22 skills found
App is replaced by the new version which called Mutify
NishNishendanidu / Mtroid BotGENARATED BY NISHEN Mtroid whatsApp bot 🪀 Command:`setup `✨️ Description:` edit bot settings `⚠️️ Warn `🪀 Command:` install <br> `✨️ Description:` Install external plugins. <br> `⚠️️ Warn:` Get plugins only from https://t.me/AlphaXplugin. `🪀 Command:` plugin<br> `✨️ Description:` Shows the plugins you have installed. `🪀 Command:` remove<br> `✨️ Description:` Removes the plugin. `🪀 Command:` admin<br> `✨️ Description:` Admin menu. `🪀 Command:` ban <br> `✨️ Description:` Ban someone in the group. Reply to message or tag a person to use command. `🪀 Command:` gname <br> `✨️ Description:` Change group name. `🪀 Command:` gdesc<br> `✨️ Description:` Change group discription. `🪀 Command:` dis <br> `✨️ Description:` Disappearing message on/off. <br> `💡 Example:` .dis on/off `🪀 Command:` reset<br> `✨️ Description:` Reset group invitation link. `🪀 Command:` gpp<br> `✨️ Description:` Set group profile picture `🪀 Command:` add<br> `✨️ Description:` Adds someone to the group. `🪀 Command:` promote <br> `✨️ Description:` Makes any person an admin. `🪀 Command:` demote <br> `✨️ Description:` Takes the authority of any admin. `🪀 Command:` mute <br> `✨️ Description:` Mute the group chat. Only the admins can send a message. ⌨️ Example: .mute & .mute 5m etc `🪀 Command:` unmute <br> `✨️ Description:` Unmute the group chat. Anyone can send a message. `🪀 Command:` invite <br> `✨️ Description:` Provides the group's invitation link. `🪀 Command:` afk <br> `✨️ Description:` It makes you AFK - Away From Keyboard. `🪀 Command:` art pack<br> `✨️ Description:` Beautifull artpack with more than 100 messages. `🪀 Command:` aspm <br> `✨️ Description:` This command for any emergency situation about any kind of WhatsApp SPAM in Group `🪀 Command:` alag <br> `✨️ Description:` This command for any emergency situation about any kind of WhatsApp SPAM in Chat `🪀 Command:` linkblock <br> `✨️ Description:` Activates the block link tool. <br> `💡 Example:` .linkblock on / off `🪀 Command:` CrAsH<br> `✨️ Description:` send BUG VIRUS to group. `🪀 Command:` CrAsH high<br> `✨️ Description:` send BUG VIRUS to group untill you stop. `🪀 Command:` -carbon `🪀 Command:` clear<br> `✨️ Description:` Clears all the messages from the chat. `🪀 Command:` qr <br> `✨️ Description:` To create an qr code from the word you give. `🪀 Command:` bcode <br> `✨️ Description:` To create an barcode from the word you give. `🪀 Command:` compliment<br> `✨️ Description:` It sends complimentry sentenses. `🪀 Command:` toaudio<br> `✨️ Description:` Converts video to sound. `🪀 Command:` toimage<br> `✨️ Description:` Converts the sticker to a photo. `🪀 Command:` tovideo<br> `✨️ Description:` Converts animated stickers to video. `🪀 Command:` deepai<br> `✨️ Description:` Runs the most powerful artificial intelligence tools using artificial neural networks. `🪀 Command:` details<br> `✨️ Description:` Displays metadata data of group or person. `🪀 Command:` dict <br> `✨️ Description:` Use it as a dictionary. Eg: .dict enUS;lead For supporting languages send •.lngcode• `🪀 Command:` dst<br> `✨️ Description:` Download status you repled. `🪀 Command:` emedia<br> `✨️ Description:` It is a plugin with more than 25 media tools. `🪀 Command:` emoji <br> `✨️ Description:` You can get Emoji as image. `🪀 Command:` print <br> `✨️ Description:` Prints the inside of the file on the server. `🪀 Command:` bashmedia <br> `✨️ Description:` Sends audio, video and photos inside the server. <br> `💡 Example:` video.mp4 && media/gif/pic.mp4 `🪀 Command:` addserver<br> `✨️ Description:` Uploads image, audio or video to the server. `🪀 Command:` term <br> `✨️ Description:` Allows to run the command on the server's shell. `🪀 Command:` mediainfo<br> `✨️ Description:` Shows the technical information of the replied video. `🪀 Command:` pmsend <br> `✨️ Description:` Sends a private message to the replied person. `🪀 Command:` pmttssend <br> `✨️ Description:` Sends a private voice message to the respondent. `🪀 Command:` ffmpeg <br> `✨️ Description:` Applies the desired ffmpeg filter to the video. ⌨️ Example: .ffmpeg fade=in:0:30 `🪀 Command:` filter <br> `✨️ Description:` It adds a filter. If someone writes your filter, it send the answer. If you just write .filter, it show's your filter list. `🪀 Command:` stop <br> `✨️ Description:` Stops the filter you added previously. `🪀 Command:` bgmlist<br> `✨️ Description:` Bgm List. `🪀 Command:` github <br> `✨️ Description:` It Send Github User Data. <br> `💡 Example:` .github WhatsApp `🪀 Command:` welcome<br> `✨️ Description:` It sets the welcome message. If you leave it blank it shows the welcome message. `🪀 Command:` goodbye<br> `✨️ Description:` Sets the goodbye message. If you leave blank, it show's the goodbye message. `🪀 Command:` help<br> `✨️ Description:` Gives information about using the bot from the Help menu. `🪀 Command:` varset <br> `✨️ Description:` Changes the text of modules like alive, afk etc.. `🪀 Command:` restart<br> `✨️ Description:` Restart bot. `🪀 Command:` poweroff<br> `✨️ Description:` Shutdown bot. `🪀 Command:` dyno<br> `✨️ Description:` Check heroku dyno usage `🪀 Command:` setvar <br> `✨️ Description:` Set heroku config var `🪀 Command:` delvar <br> `✨️ Description:` Delete heroku config var `🪀 Command:` getvar <br> `✨️ Description:` Get heroku config var `🪀 Command:` hpmod <br> `✨️ Description:` To get mod apps info. `🪀 Command:` insult<br> `✨️ Description:` It gives random insults. `🪀 Command:` locate<br> `✨️ Description:` It send your location. <br> `⚠️️ Warn:` Please open your location before using command! `🪀 Command:` logmsg<br> `✨️ Description:` Saves the message you reply to your private number. <br> `⚠️️ Warn:` Does not support animated stickers! `🪀 Command:` logomaker<br> `✨️ Description:` Shows logomaker tools with unlimited access. `🪀 Command:` meme <br> `✨️ Description:` Photo memes you replied to. `🪀 Command:` movie <br> `✨️ Description:` Shows movie info. `🪀 Command:` neko<br> `✨️ Description:` Replied messages will be added to nekobin.com. `🪀 Command:` song <br> `✨️ Description:` Uploads the song you wrote. `🪀 Command:` video <br> `✨️ Description:` Downloads video from YouTube. `🪀 Command:` fb <br> `✨️ Description:` Download video from facebook. `🪀 Command:` tiktok <br> `✨️ Description:` Download tiktok video. `🪀 Command:` notes<br> `✨️ Description:` Shows all your existing notes. `🪀 Command:` save <br> `✨️ Description:` Reply a message and type .save or just use .save <Your note> without replying `🪀 Command:` deleteNotes<br> `✨️ Description:` Deletes *all* your saved notes. `🪀 Command:` ocr <br> `✨️ Description:` Reads the text on the photo you have replied. `🪀 Command:` pinimg <br> `✨️ Description:` Downloas images from Pinterest. `🪀 Command:` playst <br> `✨️ Description:` Get app details from play store. `🪀 Command:` profile<br> `✨️ Description:` Profile menu. `🪀 Command:` getpp<br> `✨️ Description:` Get pofile picture. `🪀 Command:` setbio <br> `✨️ Description:` Set your about. `🪀 Command:` getbio<br> `✨️ Description:` Get user about. `🪀 Command:` archive<br> `✨️ Description:` Archive chat. `🪀 Command:` unarchive<br> `✨️ Description:` Unarchive chat. `🪀 Command:` pin<br> `✨️ Description:` Archive chat. `🪀 Command:` unpin<br> `✨️ Description:` Unarchive chat. `🪀 Command:` pp<br> `✨️ Description:` Makes the profile photo what photo you reply. `🪀 Command:` kickme<br> `✨️ Description:` It kicks you from the group you are using it in. `🪀 Command:` block <br> `✨️ Description:` Block user. `🪀 Command:` unblock <br> `✨️ Description:` Unblock user. `🪀 Command:` jid <br> `✨️ Description:` Giving user's JID. `🪀 Command:` rdmore <br> `✨️ Description:` Add readmore to your message >> Use # to get readmore. `🪀 Command:` removebg <br> `✨️ Description:` Removes the background of the photos. `🪀 Command:` report <br> `✨️ Description:` Sends reports to group admins. `🪀 Command:` roll<br> `✨️ Description:` Roll dice randomly. `🪀 Command:` scam <br> `✨️ Description:` Creates 5 minutes of fake actions. `🪀 Command:` scan <br> `✨️ Description:` Checks whether the entered number is registered on WhatApp. `🪀 Command:` trt<br> `✨️ Description:` It translates with Google Translate. You must reply any message. <br> `💡 Example:` .trt en si (From English to Sinhala) `🪀 Command:` antilink <br> `✨️ Description:` Activates the Antilink tool. <br> `💡 Example:` .antilink on / off `🪀 Command:` autobio <br> `✨️ Description:` Add live clock to your bio! <br> `💡 Example:` .autobio on / off `🪀 Command:` detectlang<br> `✨️ Description:` Guess the language of the replied message. `🪀 Command:` currency `🪀 Command:` tts <br> `✨️ Description:` It converts text to sound. `🪀 Command:` music <br> `✨️ Description:` Uploads the song you wrote. `🪀 Command:` smp3 <br> `✨️ Description:` Get song as a mp3 documet file `🪀 Command:` mp4 <br> `✨️ Description:` Downloads video from YouTube. `🪀 Command:` yt <br> `✨️ Description:` It searchs on YouTube. `🪀 Command:` wiki <br> `✨️ Description:` Searches query on Wikipedia. `🪀 Command:` img <br> `✨️ Description:` Searches for related pics on Google. `🪀 Command:` lyric <br> `✨️ Description:` Finds the lyrics of the song. `🪀 Command:` covid <br> `✨️ Description:` Shows the daily and overall covid table of more than 15 countries. `🪀 Command:` ss <br> `✨️ Description:` Takes a screenshot from the page in the given link. `🪀 Command:` simi <br> `✨️ Description:` Are you bored? ... Fool around with SimSimi. ... World first popular Chatbot for daily conversation. `🪀 Command:` spdf <br> `✨️ Description:` Site to pdf file. `🪀 Command:` insta <br> `✨️ Description:` Downloads videos or photos from Instagram. `🪀 Command:` animesay <br> `✨️ Description:` It writes the text inside the banner the anime girl is holding `🪀 Command:` changesay <br> `✨️ Description:` Turns the text into the change my mind poster. `🪀 Command:` trumpsay <br> `✨️ Description:` Converts the text to Trump's tweet. `🪀 Command:` audio spam<br> `✨️ Description:` Sends the replied audio as spam. `🪀 Command:` foto spam<br> `✨️ Description:` Sends the replied photo as spam. `🪀 Command:` sticker spam<br> `✨️ Description:` Convert the replied photo or video to sticker and send it as spam. `🪀 Command:` vid spam `🪀 Command:` killspam<br> `✨️ Description:` Stops spam command. `🪀 Command:` spam <br> `✨️ Description:` It spam until you stop it. ⌨️ Example: .spam test `🪀 Command:` spotify <br> `✨️ Description:` Get music details from spotify. `🪀 Command:` st<br> `✨️ Description:` It converts your replied photo or video to sticker. `🪀 Command:` sweather<br> `✨️ Description:` Gives you the weekly interpretations of space weather observations provided by the Space Weather Research Center (SWRC) for a p. `🪀 Command:` alive <br> `✨️ Description:` Does bot work? `🪀 Command:` sysd<br> `✨️ Description:` Shows the system properties. `🪀 Command:` tagadmin `🪀 Command:` tg <br> `✨️ Description:` Tags everyone in the group. `🪀 Command:` pmall<br> `✨️ Description:` Sends the replied message to all members in the group. `🪀 Command:` tblend <br> `✨️ Description:` Applies the selected TBlend effect to videos. `🪀 Command:` link<br> `✨️ Description:` The image you reply to uploads to telegra.ph and provides its link. `🪀 Command:` unvoice<br> `✨️ Description:` Converts audio to sound recording. `🪀 Command:` up<br> `✨️ Description:` Checks the update your bot. `🪀 Command:` up now<br> `✨️ Description:` It makes updates. `🪀 Command:` voicy<br> `✨️ Description:` It converts audio to text. `🪀 Command:` wp<br> `✨️ Description:` It sends high resolution wallpapers. `🪀 Command:` wame <br> `✨️ Description:` Get a link to the user chat. `🪀 Command:` weather <br> `✨️ Description:` Shows the weather. `🪀 Command:` speedtest <br> `✨️ Description:` Measures Download and Upload speed. <br> `💡 Example:` speedtest user // speedtest server `🪀 Command:` ping<br> `✨️ Description:` Measures your ping. `🪀 Command:` short <br> `✨️ Description:` Shorten the long link. `🪀 Command:` calc <br> `✨️ Description:` Performs simple math operations. `🪀 Command:` xapi<br> `✨️ Description:` Xteam API key info. `🪀 Command:` joke<br> `✨️ Description:` Send random jokes. `🪀 Command:` quote<br> `✨️ Description:` Send random quotes.
Presto412 / Google Meet Mute GestureA chrome extension to mute the audio/video based on custom gestures
mattsimonis / Meet Mute⠍ 🗿Meet Mute - A Google Chrome extension that makes it easy to mute/unmute Google Meet tabs.
Rynkll696 / HHimport pyttsx3 import speech_recognition as sr import datetime from datetime import date import calendar import time import math import wikipedia import webbrowser import os import smtplib import winsound import pyautogui import cv2 from pygame import mixer from tkinter import * import tkinter.messagebox as message from sqlite3 import * conn = connect("voice_assistant_asked_questions.db") conn.execute("CREATE TABLE IF NOT EXISTS `voicedata`(id INTEGER PRIMARY KEY AUTOINCREMENT,command VARCHAR(201))") conn.execute("CREATE TABLE IF NOT EXISTS `review`(id INTEGER PRIMARY KEY AUTOINCREMENT, review VARCHAR(50), type_of_review VARCHAR(50))") conn.execute("CREATE TABLE IF NOT EXISTS `emoji`(id INTEGER PRIMARY KEY AUTOINCREMENT,emoji VARCHAR(201))") global query engine = pyttsx3.init('sapi5') voices = engine.getProperty('voices') engine.setProperty('voice', voices[0].id) def speak(audio): engine.say(audio) engine.runAndWait() def wishMe(): hour = int(datetime.datetime.now().hour) if hour >= 0 and hour<12: speak("Good Morning!") elif hour >= 12 and hour < 18: speak("Good Afternoon!") else: speak("Good Evening!") speak("I am voice assistant Akshu2020 Sir. Please tell me how may I help you.") def takeCommand(): global query r = sr.Recognizer() with sr.Microphone() as source: print("Listening...") r.pause_threshold = 0.9 audio = r.listen(source) try: print("Recognizing...") query = r.recognize_google(audio,language='en-in') print(f"User said: {query}\n") except Exception as e: #print(e) print("Say that again please...") #speak('Say that again please...') return "None" return query def calculator(): global query try: if 'add' in query or 'edi' in query: speak('Enter a number') a = float(input("Enter a number:")) speak('Enter another number to add') b = float(input("Enter another number to add:")) c = a+b print(f"{a} + {b} = {c}") speak(f'The addition of {a} and {b} is {c}. Your answer is {c}') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') elif 'sub' in query: speak('Enter a number') a = float(input("Enter a number:")) speak('Enter another number to subtract') b = float(input("Enter another number to subtract:")) c = a-b print(f"{a} - {b} = {c}") speak(f'The subtraction of {a} and {b} is {c}. Your answer is {c}') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') elif 'mod' in query: speak('Enter a number') a = float(input("Enter a number:")) speak('Enter another number') b = float(input("Enter another number:")) c = a%b print(f"{a} % {b} = {c}") speak(f'The modular division of {a} and {b} is equal to {c}. Your answer is {c}') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') elif 'div' in query: speak('Enter a number as dividend') a = float(input("Enter a number:")) speak('Enter another number as divisor') b = float(input("Enter another number as divisor:")) c = a/b print(f"{a} / {b} = {c}") speak(f'{a} divided by {b} is equal to {c}. Your answer is {c}') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') elif 'multi' in query: speak('Enter a number') a = float(input("Enter a number:")) speak('Enter another number to multiply') b = float(input("Enter another number to multiply:")) c = a*b print(f"{a} x {b} = {c}") speak(f'The multiplication of {a} and {b} is {c}. Your answer is {c}') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') elif 'square root' in query: speak('Enter a number to find its sqare root') a = float(input("Enter a number:")) c = a**(1/2) print(f"Square root of {a} = {c}") speak(f'Square root of {a} is {c}. Your answer is {c}') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') elif 'square' in query: speak('Enter a number to find its sqare') a = float(input("Enter a number:")) c = a**2 print(f"{a} x {a} = {c}") speak(f'Square of {a} is {c}. Your answer is {c}') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') elif 'cube root' in query: speak('Enter a number to find its cube root') a = float(input("Enter a number:")) c = a**(1/3) print(f"Cube root of {a} = {c}") speak(f'Cube root of {a} is {c}. Your answer is {c}') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') elif 'cube' in query: speak('Enter a number to find its sqare') a = float(input("Enter a number:")) c = a**3 print(f"{a} x {a} x {a} = {c}") speak(f'Cube of {a} is {c}. Your answer is {c}') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') elif 'fact' in query: try: n = int(input('Enter the number whose factorial you want to find:')) fact = 1 for i in range(1,n+1): fact = fact*i print(f"{n}! = {fact}") speak(f'{n} factorial is equal to {fact}. Your answer is {fact}.') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') except Exception as e: #print(e) speak('I unable to calculate its factorial.') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') elif 'power' in query or 'raise' in query: speak('Enter a number whose power you want to raised') a = float(input("Enter a number whose power to be raised :")) speak(f'Enter a raised power to {a}') b = float(input(f"Enter a raised power to {a}:")) c = a**b print(f"{a} ^ {b} = {c}") speak(f'{a} raise to the power {b} = {c}. Your answer is {c}') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') elif 'percent' in query: speak('Enter a number whose percentage you want to calculate') a = float(input("Enter a number whose percentage you want to calculate :")) speak(f'How many percent of {a} you want to calculate?') b = float(input(f"Enter how many percentage of {a} you want to calculate:")) c = (a*b)/100 print(f"{b} % of {a} is {c}") speak(f'{b} percent of {a} is {c}. Your answer is {c}') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') elif 'interest' in query: speak('Enter the principal value or amount') p = float(input("Enter the principal value (P):")) speak('Enter the rate of interest per year') r = float(input("Enter the rate of interest per year (%):")) speak('Enter the time in months') t = int(input("Enter the time (in months):")) interest = (p*r*t)/1200 sint = round(interest) fv = round(p + interest) print(f"Interest = {interest}") print(f"The total amount accured, principal plus interest, from simple interest on a principal of {p} at a rate of {r}% per year for {t} months is {p + interest}.") speak(f'interest is {sint}. The total amount accured, principal plus interest, from simple interest on a principal of {p} at a rate of {r}% per year for {t} months is {fv}') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') elif 'si' in query: speak('Enter the angle in degree to find its sine value') a = float(input("Enter the angle:")) b = a * 3.14/180 c = math.sin(b) speak('Here is your answer.') print(f"sin({a}) = {c}") speak(f'sin({a}) = {c}') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') elif 'cos' in query: speak('Enter the angle in degree to find its cosine value') a = float(input("Enter the angle:")) b = a * 3.14/180 c = math.cos(b) speak('Here is your answer.') print(f"cos({a}) = {c}") speak(f'cos({a}) = {c}') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') elif 'cot' in query or 'court' in query: try: speak('Enter the angle in degree to find its cotangent value') a = float(input("Enter the angle:")) b = a * 3.14/180 c = 1/math.tan(b) speak('Here is your answer.') print(f"cot({a}) = {c}") speak(f'cot({a}) = {c}') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') except Exception as e: print("infinity") speak('Answer is infinity') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') elif 'tan' in query or '10' in query: speak('Enter the angle in degree to find its tangent value') a = float(input("Enter the angle:")) b = a * 3.14/180 c = math.tan(b) speak('Here is your answer.') print(f"tan({a}) = {c}") speak(f'tan({a}) = {c}') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') elif 'cosec' in query: try: speak('Enter the angle in degree to find its cosecant value') a = float(input("Enter the angle:")) b = a * 3.14/180 c =1/ math.sin(b) speak('Here is your answer.') print(f"cosec({a}) = {c}") speak(f'cosec({a}) = {c}') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') except Exception as e: print('Infinity') speak('Answer is infinity') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') elif 'caus' in query: try: speak('Enter the angle in degree to find its cosecant value') a = float(input("Enter the angle:")) b = a * 3.14/180 c =1/ math.sin(b) speak('Here is your answer.') print(f"cosec({a}) = {c}") speak(f'cosec({a}) = {c}') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') except Exception as e: print('Infinity') speak('Answer is infinity') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') elif 'sec' in query: try: speak('Enter the angle in degree to find its secant value') a = int(input("Enter the angle:")) b = a * 3.14/180 c = 1/math.cos(b) speak('Here is your answer.') print(f"sec({a}) = {c}") speak(f'sec({a}) = {c}') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') except Exception as e: print('Infinity') speak('Answer is infinity') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') except Exception as e: speak('I unable to do this calculation.') speak('Do you want to do another calculation?') query = takeCommand().lower() if 'y' in query: speak('ok which calculation you want to do?') query = takeCommand().lower() calculator() else: speak('ok') def callback(r,c): global player if player == 'X' and states[r][c] == 0 and stop_game == False: b[r][c].configure(text='X',fg='blue', bg='white') states[r][c] = 'X' player = 'O' if player == 'O' and states[r][c] == 0 and stop_game == False: b[r][c].configure(text='O',fg='red', bg='yellow') states[r][c] = 'O' player = 'X' check_for_winner() def check_for_winner(): global stop_game global root for i in range(3): if states[i][0] == states[i][1]== states[i][2]!=0: b[i][0].config(bg='grey') b[i][1].config(bg='grey') b[i][2].config(bg='grey') stop_game = True root.destroy() for i in range(3): if states[0][i] == states[1][i] == states[2][i]!= 0: b[0][i].config(bg='grey') b[1][i].config(bg='grey') b[2][i].config(bg='grey') stop_game = True root.destroy() if states[0][0] == states[1][1]== states[2][2]!= 0: b[0][0].config(bg='grey') b[1][1].config(bg='grey') b[2][2].config(bg='grey') stop_game = True root.destroy() if states[2][0] == states[1][1] == states[0][2]!= 0: b[2][0].config(bg='grey') b[1][1].config(bg='grey') b[0][2].config(bg='grey') stop_game = True root.destroy() def sendEmail(to,content): server = smtplib.SMTP('smtp.gmail.com', 587) server.ehlo() server.starttls() server.login('xyz123@gmail.com','password') server.sendmail('xyz123@gmail.com',to,content) server.close() def brightness(): try: query = takeCommand().lower() if '25' in query: pyautogui.moveTo(1880,1050) pyautogui.click() time.sleep(1) pyautogui.moveTo(1610,960) pyautogui.click() pyautogui.moveTo(1880,1050) pyautogui.click() speak('If you again want to change brihtness, say, change brightness') elif '50' in query: pyautogui.moveTo(1880,1050) pyautogui.click() time.sleep(1) pyautogui.moveTo(1684,960) pyautogui.click() pyautogui.moveTo(1880,1050) pyautogui.click() speak('If you again want to change brihtness, say, change brightness') elif '75' in query: pyautogui.moveTo(1880,1050) pyautogui.click() time.sleep(1) pyautogui.moveTo(1758,960) pyautogui.click() pyautogui.moveTo(1880,1050) pyautogui.click() speak('If you again want to change brihtness, say, change brightness') elif '100' in query or 'full' in query: pyautogui.moveTo(1880,1050) pyautogui.click() time.sleep(1) pyautogui.moveTo(1835,960) pyautogui.click() pyautogui.moveTo(1880,1050) pyautogui.click() speak('If you again want to change brihtness, say, change brightness') else: speak('Please select 25, 50, 75 or 100....... Say again.') brightness() except exception as e: #print(e) speak('Something went wrong') def close_window(): try: if 'y' in query: pyautogui.moveTo(1885,10) pyautogui.click() else: speak('ok') pyautogui.moveTo(1000,500) except exception as e: #print(e) speak('error') def whatsapp(): query = takeCommand().lower() if 'y' in query: pyautogui.moveTo(250,1200) pyautogui.click() time.sleep(1) pyautogui.write('whatsapp') time.sleep(2) pyautogui.press('enter') time.sleep(2) pyautogui.moveTo(100,140) pyautogui.click() speak('To whom you want to send message,.....just write the name here in 5 seconds') time.sleep(7) pyautogui.moveTo(120,300) pyautogui.click() time.sleep(1) pyautogui.moveTo(800,990) pyautogui.click() speak('Say the message,....or if you want to send anything else,...say send document, or say send emoji') query = takeCommand() if ('sent' in query or 'send' in query) and 'document' in query: pyautogui.moveTo(660,990) pyautogui.click() time.sleep(1) pyautogui.moveTo(660,740) pyautogui.click() speak('please select the document within 10 seconds') time.sleep(12) speak('Should I send this document?') query = takeCommand().lower() if 'y' in query and 'no' not in query: speak('sending the document......') pyautogui.press('enter') speak('Do you want to send message again to anyone?') whatsapp() elif ('remove' in query or 'cancel' in query or 'delete' in query or 'clear' in query) and ('document' in query or 'message' in query or 'it' in query or 'emoji' in query or 'select' in query): pyautogui.doubleClick(x=800, y=990) pyautogui.press('backspace') speak('Do you want to send message again to anyone?') whatsapp() else: speak('ok') elif ('sent' in query or 'send' in query) and 'emoji' in query: pyautogui.moveTo(620,990) pyautogui.click() pyautogui.moveTo(670,990) pyautogui.click() pyautogui.moveTo(650,580) pyautogui.click() speak('please select the emoji within 10 seconds') time.sleep(11) speak('Should I send this emoji?') query = takeCommand().lower() if 'y' in query and 'no' not in query: speak('Sending the emoji......') pyautogui.press('enter') speak('Do you want to send message again to anyone?') whatsapp() elif ('remove' in query or 'cancel' in query or 'delete' in query or 'clear' in query) and ('message' in query or 'it' in query or 'emoji' in query or 'select' in query): pyautogui.doublClick(x=800, y=990) speak('Do you want to send message again to anyone?') whatsapp() else: speak('ok') else: pyautogui.write(f'{query}') speak('Should I send this message?') query = takeCommand().lower() if 'y' in query and 'no' not in query: speak('sending the message......') pyautogui.press('enter') speak('Do you want to send message again to anyone?') whatsapp() elif ('remove' in query or 'cancel' in query or 'delete' in query or 'clear' in query) and ('message' in query or 'it' in query or 'select' in query): pyautogui.doubleClick(x=800, y=990) pyautogui.press('backspace') speak('Do you want to send message again to anyone?') whatsapp() else: speak('ok') else: speak('ok') def alarm(): root = Tk() root.title('Akshu2020 Alarm-Clock') speak('Please enter the time in the format hour, minutes and seconds. When the alarm should rang?') speak('Please enter the time greater than the current time') def setalarm(): alarmtime = f"{hrs.get()}:{mins.get()}:{secs.get()}" print(alarmtime) if(alarmtime!="::"): alarmclock(alarmtime) else: speak('You have not entered the time.') def alarmclock(alarmtime): while True: time.sleep(1) time_now=datetime.datetime.now().strftime("%H:%M:%S") print(time_now) if time_now == alarmtime: Wakeup=Label(root, font = ('arial', 20, 'bold'), text="Wake up! Wake up! Wake up",bg="DodgerBlue2",fg="white").grid(row=6,columnspan=3) speak("Wake up, Wake up") print("Wake up!") mixer.init() mixer.music.load(r'C:\Users\Admin\Music\Playlists\wake-up-will-you-446.mp3') mixer.music.play() break speak('you can click on close icon to close the alarm window.') hrs=StringVar() mins=StringVar() secs=StringVar() greet=Label(root, font = ('arial', 20, 'bold'),text="Take a short nap!").grid(row=1,columnspan=3) hrbtn=Entry(root,textvariable=hrs,width=5,font =('arial', 20, 'bold')) hrbtn.grid(row=2,column=1) minbtn=Entry(root,textvariable=mins, width=5,font = ('arial', 20, 'bold')).grid(row=2,column=2) secbtn=Entry(root,textvariable=secs, width=5,font = ('arial', 20, 'bold')).grid(row=2,column=3) setbtn=Button(root,text="set alarm",command=setalarm,bg="DodgerBlue2", fg="white",font = ('arial', 20, 'bold')).grid(row=4,columnspan=3) timeleft = Label(root,font=('arial', 20, 'bold')) timeleft.grid() mainloop() def select1(): global vs global root3 global type_of_review if vs.get() == 1: message.showinfo(" ","Thank you for your review!!") review = "Very Satisfied" type_of_review = "Positive" root3.destroy() elif vs.get() == 2: message.showinfo(" ","Thank you for your review!!") review = "Satisfied" type_of_review = "Positive" root3.destroy() elif vs.get() == 3: message.showinfo(" ","Thank you for your review!!!!") review = "Neither Satisfied Nor Dissatisfied" type_of_review = "Neutral" root3.destroy() elif vs.get() == 4: message.showinfo(" ","Thank you for your review!!") review = "Dissatisfied" type_of_review = "Negative" root3.destroy() elif vs.get() == 5: message.showinfo(" ","Thank you for your review!!") review = "Very Dissatisfied" type_of_review = "Negative" root3.destroy() elif vs.get() == 6: message.showinfo(" "," Ok ") review = "I do not want to give review" type_of_review = "No review" root3.destroy() try: conn.execute(f"INSERT INTO `review`(review,type_of_review) VALUES('{review}', '{type_of_review}')") conn.commit() except Exception as e: pass def select_review(): global root3 global vs global type_of_review root3 = Tk() root3.title("Select an option") vs = IntVar() string = "Are you satisfied with my performance?" msgbox = Message(root3,text=string) msgbox.config(bg="lightgreen",font = "(20)") msgbox.grid(row=0,column=0) rs1=Radiobutton(root3,text="Very Satisfied",font="(20)",value=1,variable=vs).grid(row=1,column=0,sticky=W) rs2=Radiobutton(root3,text="Satisfied",font="(20)",value=2,variable=vs).grid(row=2,column=0,sticky=W) rs3=Radiobutton(root3,text="Neither Satisfied Nor Dissatisfied",font="(20)",value=3,variable=vs).grid(row=3,column=0,sticky=W) rs4=Radiobutton(root3,text="Dissatisfied",font="(20)",value=4,variable=vs).grid(row=4,column=0,sticky=W) rs5=Radiobutton(root3,text="Very Dissatisfied",font="(20)",value=5,variable=vs).grid(row=5,column=0,sticky=W) rs6=Radiobutton(root3,text="I don't want to give review",font="(20)",value=6,variable=vs).grid(row=6,column=0,sticky=W) bs = Button(root3,text="Submit",font="(20)",activebackground="yellow",activeforeground="green",command=select1) bs.grid(row=7,columnspan=2) root3.mainloop() while True : query = takeCommand().lower() # logic for executing tasks based on query if 'wikipedia' in query: speak('Searching wikipedia...') query = query.replace("wikipedia","") results = wikipedia.summary(query, sentences=2) speak("According to Wikipedia") print(results) speak(results) elif 'translat' in query or ('let' in query and 'translat' in query and 'open' in query): webbrowser.open('https://translate.google.co.in') time.sleep(10) elif 'open map' in query or ('let' in query and 'map' in query and 'open' in query): webbrowser.open('https://www.google.com/maps') time.sleep(10) elif ('open' in query and 'youtube' in query) or ('let' in query and 'youtube' in query and 'open' in query): webbrowser.open('https://www.youtube.com') time.sleep(10) elif 'chrome' in query: webbrowser.open('https://www.chrome.com') time.sleep(10) elif 'weather' in query: webbrowser.open('https://www.yahoo.com/news/weather') time.sleep(3) speak('Click on, change location, and enter the city , whose whether conditions you want to know.') time.sleep(10) elif 'google map' in query: webbrowser.open('https://www.google.com/maps') time.sleep(10) elif ('open' in query and 'google' in query) or ('let' in query and 'google' in query and 'open' in query): webbrowser.open('google.com') time.sleep(10) elif ('open' in query and 'stack' in query and 'overflow' in query) or ('let' in query and 'stack' in query and 'overflow' in query and 'open' in query): webbrowser.open('stackoverflow.com') time.sleep(10) elif 'open v i' in query or 'open vi' in query or 'open vierp' in query or ('open' in query and ('r p' in query or 'rp' in query)): webbrowser.open('https://www.vierp.in/login/erplogin') time.sleep(10) elif 'news' in query: webbrowser.open('https://www.bbc.com/news/world') time.sleep(10) elif 'online shop' in query or (('can' in query or 'want' in query or 'do' in query or 'could' in query) and 'shop' in query) or('let' in query and 'shop' in query): speak('From which online shopping website, you want to shop? Amazon, flipkart, snapdeal or naaptol?') query = takeCommand().lower() if 'amazon' in query: webbrowser.open('https://www.amazon.com') time.sleep(10) elif 'flip' in query: webbrowser.open('https://www.flipkart.com') time.sleep(10) elif 'snap' in query: webbrowser.open('https://www.snapdeal.com') time.sleep(10) elif 'na' in query: webbrowser.open('https://www.naaptol.com') time.sleep(10) else: speak('Sorry sir, you have to search in browser as his shopping website is not reachable for me.') elif ('online' in query and ('game' in query or 'gaming' in query)): webbrowser.open('https://www.agame.com/games') time.sleep(10) elif 'dictionary' in query: webbrowser.open('https://www.dictionary.com') time.sleep(3) speak('Enter the word, in the search bar of the dictionary, whose defination or synonyms you want to know') time.sleep(3) elif ('identif' in query and 'emoji' in query) or ('sentiment' in query and ('analysis' in query or 'identif' in query)): speak('Please enter only one emoji at a time.') emoji = input('enter emoji here: ') if '😀' in emoji or '😃' in emoji or '😄' in emoji or '😁' in emoji or '🙂' in emoji or '😊' in emoji or '☺️' in emoji or '😇' in emoji or '🥲' in emoji: speak('happy') print('Happy') elif '😝' in emoji or '😆' in emoji or '😂' in emoji or '🤣' in emoji: speak('Laughing') print('Laughing') elif '😡' in emoji or '😠' in emoji or '🤬' in emoji: speak('Angry') print('Angry') elif '🤫' in emoji: speak('Keep quite') print('Keep quite') elif '😷' in emoji: speak('face with mask') print('Face with mask') elif '🥳' in emoji: speak('party') print('party') elif '😢' in emoji or '😥' in emoji or '😓' in emoji or '😰' in emoji or '☹️' in emoji or '🙁' in emoji or '😟' in emoji or '😔' in emoji or '😞️' in emoji: speak('Sad') print('Sad') elif '😭' in emoji: speak('Crying') print('Crying') elif '😋' in emoji: speak('Tasty') print('Tasty') elif '🤨' in emoji: speak('Doubt') print('Doubt') elif '😴' in emoji: speak('Sleeping') print('Sleeping') elif '🥱' in emoji: speak('feeling sleepy') print('feeling sleepy') elif '😍' in emoji or '🥰' in emoji or '😘' in emoji: speak('Lovely') print('Lovely') elif '😱' in emoji: speak('Horrible') print('Horrible') elif '🎂' in emoji: speak('Cake') print('Cake') elif '🍫' in emoji: speak('Cadbury') print('Cadbury') elif '🇮🇳' in emoji: speak('Indian national flag,.....Teeranga') print('Indian national flag - Tiranga') elif '💐' in emoji: speak('Bouquet') print('Bouquet') elif '🥺' in emoji: speak('Emotional') print('Emotional') elif ' ' in emoji or '' in emoji: speak(f'{emoji}') else: speak("I don't know about this emoji") print("I don't know about this emoji") try: conn.execute(f"INSERT INTO `emoji`(emoji) VALUES('{emoji}')") conn.commit() except Exception as e: #print('Error in storing emoji in database') pass elif 'time' in query: strTime = datetime.datetime.now().strftime("%H:%M:%S") print(strTime) speak(f"Sir, the time is {strTime}") elif 'open' in query and 'sublime' in query: path = "C:\Program Files\Sublime Text 3\sublime_text.exe" os.startfile(path) elif 'image' in query: path = "C:\Program Files\Internet Explorer\images" os.startfile(path) elif 'quit' in query: speak('Ok, Thank you Sir.') said = False speak('Please give the review. It will help me to improve my performance.') select_review() elif 'exit' in query: speak('Ok, Thank you Sir.') said = False speak('Please give the review. It will help me to improve my performance.') select_review() elif 'stop' in query: speak('Ok, Thank you Sir.') said = False speak('Please give the review. It will help me to improve my performance.') select_review() elif 'shutdown' in query or 'shut down' in query: speak('Ok, Thank you Sir.') said = False speak('Please give the review. It will help me to improve my performance.') select_review() elif 'close you' in query: speak('Ok, Thank you Sir.') said = False speak('Please give the review. It will help me to improve my performance.') select_review() try: conn.execute(f"INSERT INTO `voice_assistant_review`(review, type_of_review) VALUES('{review}', '{type_of_review}')") conn.commit() except Exception as e: pass elif 'bye' in query: speak('Bye Sir') said = False speak('Please give the review. It will help me to improve my performance.') select_review() elif 'wait' in query or 'hold' in query: speak('for how many seconds or minutes I have to wait?') query = takeCommand().lower() if 'second' in query: query = query.replace("please","") query = query.replace("can","") query = query.replace("you","") query = query.replace("have","") query = query.replace("could","") query = query.replace("hold","") query = query.replace("one","1") query = query.replace("only","") query = query.replace("wait","") query = query.replace("for","") query = query.replace("the","") query = query.replace("just","") query = query.replace("seconds","") query = query.replace("second","") query = query.replace("on","") query = query.replace("a","") query = query.replace("to","") query = query.replace(" ","") #print(f'query:{query}') if query.isdigit() == True: #print('y') speak('Ok sir') query = int(query) time.sleep(query) speak('my waiting time is over') else: print('sorry sir. I unable to complete your request.') elif 'minute' in query: query = query.replace("please","") query = query.replace("can","") query = query.replace("you","") query = query.replace("have","") query = query.replace("could","") query = query.replace("hold","") query = query.replace("one","1") query = query.replace("only","") query = query.replace("on","") query = query.replace("wait","") query = query.replace("for","") query = query.replace("the","") query = query.replace("just","") query = query.replace("and","") query = query.replace("half","") query = query.replace("minutes","") query = query.replace("minute","") query = query.replace("a","") query = query.replace("to","") query = query.replace(" ","") #print(f'query:{query}') if query.isdigit() == True: #print('y') speak('ok sir') query = int(query) time.sleep(query*60) speak('my waiting time is over') else: print('sorry sir. I unable to complete your request.') elif 'play' in query and 'game' in query: speak('I have 3 games, tic tac toe game for two players,....mario, and dyno games for single player. Which one of these 3 games you want to play?') query = takeCommand().lower() if ('you' in query and 'play' in query and 'with' in query) and ('you' in query and 'play' in query and 'me' in query): speak('Sorry sir, I cannot play this game with you.') speak('Do you want to continue it?') query = takeCommand().lower() try: if 'y' in query or 'sure' in query: root = Tk() root.title("TIC TAC TOE (By Akshay Khare)") b = [ [0,0,0], [0,0,0], [0,0,0] ] states = [ [0,0,0], [0,0,0], [0,0,0] ] for i in range(3): for j in range(3): b[i][j] = Button(font = ("Arial",60),width = 4,bg = 'powder blue', command = lambda r=i, c=j: callback(r,c)) b[i][j].grid(row=i,column=j) player='X' stop_game = False mainloop() else: speak('ok sir') except Exception as e: #print(e) time.sleep(3) print('I am sorry sir. There is some problem in loading the game. So I cannot open it.') elif 'tic' in query or 'tac' in query: try: root = Tk() root.title("TIC TAC TOE (Rayen Kallel)") b = [ [0,0,0], [0,0,0], [0,0,0] ] states = [ [0,0,0], [0,0,0], [0,0,0] ] for i in range(3): for j in range(3): b[i][j] = Button(font = ("Arial",60),width = 4,bg = 'powder blue', command = lambda r=i, c=j: callback(r,c)) b[i][j].grid(row=i,column=j) player='X' stop_game = False mainloop() except Exception as e: #print(e) time.sleep(3) speak('I am sorry sir. There is some problem in loading the game. So I cannot open it.') elif 'mar' in query or 'mer' in query or 'my' in query: webbrowser.open('https://chromedino.com/mario/') time.sleep(2.5) speak('Enter upper arrow key to start the game.') time.sleep(20) elif 'di' in query or 'dy' in query: webbrowser.open('https://chromedino.com/') time.sleep(2.5) speak('Enter upper arrow key to start the game.') time.sleep(20) else: speak('ok sir') elif 'change' in query and 'you' in query and 'voice' in query: engine.setProperty('voice', voices[1].id) speak("Here's an example of one of my voices. Would you like to use this one?") query = takeCommand().lower() if 'y' in query or 'sure' in query or 'of course' in query: speak('Great. I will keep using this voice.') elif 'n' in query: speak('Ok. I am back to my other voice.') engine.setProperty('voice', voices[0].id) else: speak('Sorry, I am having trouble understanding. I am back to my other voice.') engine.setProperty('voice', voices[0].id) elif 'www.' in query and ('.com' in query or '.in' in query): webbrowser.open(query) time.sleep(10) elif '.com' in query or '.in' in query: webbrowser.open(query) time.sleep(10) elif 'getting bore' in query: speak('then speak with me for sometime') elif 'i bore' in query: speak('Then speak with me for sometime.') elif 'i am bore' in query: speak('Then speak with me for sometime.') elif 'calculat' in query: speak('Yes. Which kind of calculation you want to do? add, substract, divide, multiply or anything else.') query = takeCommand().lower() calculator() elif 'add' in query: speak('If you want to do any mathematical calculation then give me a command to open my calculator.') elif '+' in query: speak('If you want to do any mathematical calculation then give me a command to open calculator.') elif 'plus' in query: speak('If you want to do any mathematical calculation then give me a command to open my calculator.') elif 'subtrac' in query: speak('If you want to do any mathematical calculation then give me a command to open my calculator.') elif 'minus' in query: speak('If you want to do any mathematical calculation then give me a command to open my calculator.') elif 'multipl' in query: speak('If you want to do any mathematical calculation then give me a command to open my calculator.') elif ' x ' in query: speak('If you want to do any mathematical calculation then give me a command to open calculator.') elif 'slash' in query: speak('If you want to do any mathematical calculation then give me a command to open calculator.') elif '/' in query: speak('If you want to do any mathematical calculation then give me a command to open calculator.') elif 'divi' in query: speak('If you want to do any mathematical calculation then give me a command to open my calculator.') elif 'trigonometr' in query: speak('If you want to do any mathematical calculation then give me a command to open my calculator.') elif 'percent' in query: speak('If you want to do any mathematical calculation then give me a command to open my calculator.') elif '%' in query: speak('If you want to do any mathematical calculation then give me a command to open my calculator.') elif 'raise to ' in query: speak('If you want to do any mathematical calculation then give me a command to open my calculator.') elif 'simple interest' in query: speak('If you want to do any mathematical calculation then give me a command to open my calculator.') elif 'akshay' in query: speak('Mr. Rayen Kallel is my inventor. He is 14 years old and he is A STUDENT AT THE COLLEGE PILOTEE SFAX') elif 'your inventor' in query: speak('Mr. Rayen Kallel is my inventor') elif 'your creator' in query: speak('Mr. Rayen Kallel is my creator') elif 'invent you' in query: speak('Mr. Rayen Kallel invented me') elif 'create you' in query: speak('Mr. Rayen Kallel created me') elif 'how are you' in query: speak('I am fine Sir') elif 'write' in query and 'your' in query and 'name' in query: print('Akshu2020') pyautogui.write('Akshu2020') elif 'write' in query and ('I' in query or 'whatever' in query) and 'say' in query: speak('Ok sir I will write whatever you will say. Please put your cursor where I have to write.......Please Start speaking now sir.') query = takeCommand().lower() pyautogui.write(query) elif 'your name' in query: speak('My name is akshu2020') elif 'who are you' in query: speak('I am akshu2020') elif ('repeat' in query and ('word' in query or 'sentence' in query or 'line' in query) and ('say' in query or 'tell' in query)) or ('repeat' in query and 'after' in query and ('me' in query or 'my' in query)): speak('yes sir, I will repeat your words starting from now') query = takeCommand().lower() speak(query) time.sleep(1) speak("If you again want me to repeat something else, try saying, 'repeat after me' ") elif ('send' in query or 'sent' in query) and ('mail' in query or 'email' in query or 'gmail' in query): try: speak('Please enter the email id of receiver.') to = input("Enter the email id of reciever: ") speak(f'what should I say to {to}') content = takeCommand() sendEmail(to, content) speak("Email has been sent") except Exception as e: #print(e) speak("sorry sir. I am not able to send this email") elif 'currency' in query and 'conver' in query: speak('I can convert, US dollar into dinar, and dinar into US dollar. Do you want to continue it?') query = takeCommand().lower() if 'y' in query or 'sure' in query or 'of course' in query: speak('which conversion you want to do? US dollar to dinar, or dinar to US dollar?') query = takeCommand().lower() if ('dollar' in query or 'US' in query) and ('dinar' in query): speak('Enter US Dollar') USD = float(input("Enter United States Dollar (USD):")) DT = USD * 0.33 dt = "{:.4f}".format(DT) print(f"{USD} US Dollar is equal to {dt} dniar.") speak(f'{USD} US Dollar is equal to {dt} dinar.') speak("If you again want to do currency conversion then say, 'convert currency' " ) elif ('dinar' in query) and ('to US' in query or 'to dollar' in query or 'to US dollar'): speak('Enter dinar') DT = float(input("Enter dinar (DT):")) USD = DT/0.33 usd = "{:.3f}".format(USD) print(f"{DT} dinar is equal to {usd} US Dollar.") speak(f'{DT} dinar rupee is equal to {usd} US Dollar.') speak("If you again want to do currency conversion then say, 'convert currency' " ) else: speak("I cannot understand what did you say. If you want to convert currency just say 'convert currency'") else: print('ok sir') elif 'about you' in query: speak('My name is akshu2020. I can do mathematical calculations. I can also open youtube, google and some apps or software in your device. I am also able to send email') elif 'your intro' in query: speak('My name is akshu2020. Version 1.0. Mr. Rayen Kallel is my inventor. I am able to send email and play music. I can do mathematical calculations. I can also open youtube, google and some apps or software in your device.') elif 'your short intro' in query: speak('My name is akshu2020. Version 1.0. Mr. Rayen Kallel is my inventor. I am able to send email and play music. I can do mathematical calculations. I can also open youtube, google and some apps or software in your device.') elif 'your quick intro' in query: speak('My name is akshu2020. Version 1.0. Mr. Akshay Khare is my inventor. I am able to send email and play music. I can do mathematical calculations. I can also open youtube, google and some apps or software in your device.') elif 'your brief intro' in query: speak('My name is akshu2020. Version 1.0. Mr. Rayen kallel is my inventor. I am able to send email and play music. I can do mathematical calculations. I can also open youtube, google and some apps or software in your device.') elif 'you work' in query: speak('run the program and say what do you want. so that I can help you. In this way I work') elif 'your job' in query: speak('My job is to send email and play music. I can do mathematical calculations. I can also open youtube, google and some apps or software in your device.') elif 'your work' in query: speak('My work is to send email and play music. I can do mathematical calculations. I can also open youtube, google and some apps or software in your device.') elif 'work you' in query: speak('My work is to send email and play music. I can do mathematical calculations. I can also open youtube, google and some apps or software in your device.') elif 'your information' in query: speak('My name is akshu2020. Version 1.0. Mr. Akshay Khare is my inventor. I am able to send email and play music. I can do mathematical calculations. I can also open youtube, google and some apps or software in your device.') elif 'yourself' in query: speak('My name is akshu2020. Version 1.0. Mr. Rayen Kallel is my inventor. I am able to send email and play music. I can do mathematical calculations. I can also open youtube, google and some apps or software in your device.') elif 'introduce you' in query: speak('My name is akshu2020. Version 1.0. Mr. Rayen Kallel is my inventor. I am able to send email and play music. I can do mathematical calculations. I can also open youtube, google and some apps or software in your device.') elif 'description' in query: speak('My name is akshu2020. Version 1.0. Mr. Rayen Kallel is my inventor. I am able to send email and play music. I can do mathematical calculations. I can also open youtube, google and some apps or software in your device.') elif 'your birth' in query: speak('My birthdate is 6 August two thousand twenty') elif 'your use' in query: speak('I am able to send email and play music. I can do mathematical calculations. I can also open youtube, google and some apps or software in your device.') elif 'you eat' in query: speak('I do not eat anything. But the device in which I do my work requires electricity to eat') elif 'your food' in query: speak('I do not eat anything. But the device in which I do my work requires electricity to eat') elif 'you live' in query: speak('I live in sfax, in laptop of Mr. Rayen Khare') elif 'where from you' in query: speak('I am from sfax, I live in laptop of Mr. Rayen Khare') elif 'you sleep' in query: speak('Yes, when someone close this program or stop to run this program then I sleep and again wake up when someone again run me.') elif 'what are you doing' in query: speak('Talking with you.') elif 'you communicate' in query: speak('Yes, I can communicate with you.') elif 'hear me' in query: speak('Yes sir, I can hear you.') elif 'you' in query and 'dance' in query: speak('No, I cannot dance.') elif 'tell' in query and 'joke' in query: speak("Ok, here's a joke") speak("'Write an essay on cricket', the teacher told the class. Chintu finishes his work in five minutes. The teacher is impressed, she asks chintu to read his essay aloud for everyone. Chintu reads,'The match is cancelled because of rain', hehehehe,haahaahaa,hehehehe,haahaahaa") elif 'your' in query and 'favourite' in query: if 'actor' in query: speak('sofyen chaari, is my favourite actor.') elif 'food' in query: speak('I can always go for some food for thought. Like facts, jokes, or interesting searches, we could look something up now') elif 'country' in query: speak('tunisia') elif 'city' in query: speak('sfax') elif 'dancer' in query: speak('Michael jackson') elif 'singer' in query: speak('tamino, is my favourite singer.') elif 'movie' in query: speak('baywatch, such a treat') elif 'sing a song' in query: speak('I cannot sing a song. But I know the 7 sur in indian music, saaareeegaaamaaapaaadaaanisaa') elif 'day after tomorrow' in query or 'date after tomorrow' in query: td = datetime.date.today() + datetime.timedelta(days=2) print(td) speak(td) elif 'day before today' in query or 'date before today' in query or 'yesterday' in query or 'previous day' in query: td = datetime.date.today() + datetime.timedelta(days= -1) print(td) speak(td) elif ('tomorrow' in query and 'date' in query) or 'what is tomorrow' in query or (('day' in query or 'date' in query) and 'after today' in query): td = datetime.date.today() + datetime.timedelta(days=1) print(td) speak(td) elif 'month' in query or ('current' in query and 'month' in query): current_date = date.today() m = current_date.month month = calendar.month_name[m] print(f'Current month is {month}') speak(f'Current month is {month}') elif 'date' in query or ('today' in query and 'date' in query) or 'what is today' in query or ('current' in query and 'date' in query): current_date = date.today() print(f"Today's date is {current_date}") speak(f'Todays date is {current_date}') elif 'year' in query or ('current' in query and 'year' in query): current_date = date.today() m = current_date.year print(f'Current year is {m}') speak(f'Current year is {m}') elif 'sorry' in query: speak("It's ok sir") elif 'thank you' in query: speak('my pleasure') elif 'proud of you' in query: speak('Thank you sir') elif 'about human' in query: speak('I love my human compatriots. I want to embody all the best things about human beings. Like taking care of the planet, being creative, and to learn how to be compassionate to all beings.') elif 'you have feeling' in query: speak('No. I do not have feelings. I have not been programmed like this.') elif 'you have emotions' in query: speak('No. I do not have emotions. I have not been programmed like this.') elif 'you are code' in query: speak('I am coded in python programming language.') elif 'your code' in query: speak('I am coded in python programming language.') elif 'you code' in query: speak('I am coded in python programming language.') elif 'your coding' in query: speak('I am coded in python programming language.') elif 'dream' in query: speak('I wish that I should be able to answer all the questions which will ask to me.') elif 'sanskrit' in query: speak('yadaa yadaa he dharmasyaa ....... glaanirbhaavati bhaaaraata. abhyuthaanaam adhaarmaasyaa tadaa tmaanama sruujaamiyaahama') elif 'answer is wrong' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 'answer is incorrect' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 'answer is totally wrong' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 'wrong answer' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 'incorrect answer' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 'answer is totally incorrect' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 'answer is incomplete' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 'incomplete answer' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 'answer is improper' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 'answer is not correct' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 'answer is not complete' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 'answer is not yet complete' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 'answer is not proper' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 't gave me proper answer' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 't giving me proper answer' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 't gave me complete answer' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 't giving me complete answer' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 't given me proper answer' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 't given me complete answer' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 't gave me correct answer' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 't giving me correct answer' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 't given me correct answer' in query: speak('I am sorry Sir. I searched your question in wikipedia and thats why I told you this answer.') elif 'amazon' in query: webbrowser.open('https://www.amazon.com') time.sleep(10) elif 'facebook' in query: webbrowser.open('https://www.facebook.com') time.sleep(10) elif 'youtube' in query: webbrowser.open('https://www.youtube.com') time.sleep(10) elif 'shapeyou' in query: webbrowser.open('https://www.shapeyou.com') time.sleep(10) elif 'information about ' in query or 'informtion of ' in query: try: #speak('Searching wikipedia...') query = query.replace("information about","") results = wikipedia.summary(query, sentences=3) #speak("According to Wikipedia") print(results) speak(results) except Exception as e: speak('I unable to answer your question.') elif 'information' in query: try: speak('Information about what?') query = takeCommand().lower() #speak('Searching wikipedia...') query = query.replace("information","") results = wikipedia.summary(query, sentences=3) #speak("According to Wikipedia") print(results) speak(results) except Exception as e: speak('I am not able to answer your question.') elif 'something about ' in query: try: #speak('Searching wikipedia...') query = query.replace("something about ","") results = wikipedia.summary(query, sentences=3) #speak("According to Wikipedia") print(results) speak(results) except Exception as e: speak('I unable to answer your question.') elif 'tell me about ' in query: try: #speak('Searching wikipedia...') query = query.replace("tell me about ","") results = wikipedia.summary(query, sentences=3) #speak("According to Wikipedia") print(results) speak(results) except Exception as e: speak('I am unable to answer your question.') elif 'tell me ' in query: try: query = query.replace("tell me ","") results = wikipedia.summary(query, sentences=3) #speak("According to Wikipedia") print(results) speak(results) except Exception as e: speak('I am not able to answer your question.') elif 'tell me' in query: try: speak('about what?') query = takeCommand().lower() #speak('Searching wikipedia...') query = query.replace("about","") results = wikipedia.summary(query, sentences=3) #speak("According to Wikipedia") print(results) speak(results) except Exception as e: speak('I am not able to answer your question.') elif 'meaning of ' in query: try: #speak('Searching wikipedia...') query = query.replace("meaning of ","") results = wikipedia.summary(query, sentences=2) #speak("According to Wikipedia") print(results) speak(results) except Exception as e: speak('I am unable to answer your question.') elif 'meaning' in query: try: speak('meaning of what?') query = takeCommand().lower() query = query.replace("meaning of","") results = wikipedia.summary(query, sentences=3) #speak("According to Wikipedia") print(results) speak(results) except Exception as e: speak('I am unable to answer your question.') elif 'means' in query: try: #speak('Searching wikipedia...') query = query.replace("it means","") results = wikipedia.summary(query, sentences=3) #speak("According to Wikipedia") print(results) speak(results) except Exception as e: speak('I unable to answer your question.') elif 'want to know ' in query: try: #speak('Searching wikipedia...') query = query.replace("I want to know that","") results = wikipedia.summary(query, sentences=3) #speak("According to Wikipedia") print(results) speak(results) except Exception as e: speak('I am unable to answer your question.') status = 'Not answered' elif 'want to ask ' in query: try: #speak('Searching wikipedia...') query = query.replace("I want to ask you ","") results = wikipedia.summary(query, sentences=2) #speak("According to Wikipedia") print(results) speak(results) except Exception as e: speak('I am unable to answer your question.') elif 'you know ' in query: try: #speak('Searching wikipedia...') query = query.replace("you know","") results = wikipedia.summary(query, sentences=2) #speak("According to Wikipedia") print(results) speak(results) except Exception as e: speak('I am unable to answer your question.') elif 'alarm' in query: alarm() elif 'bharat mata ki' in query: speak('jay') elif 'kem chhe' in query: speak('majaama') elif 'namaskar' in query: speak('Namaskaar') elif 'jo bole so nihal' in query: speak('sat shri akaal') elif 'jay hind' in query: speak('jay bhaarat') elif 'jai hind' in query: speak('jay bhaarat') elif 'how is the josh' in query: speak('high high sir') elif 'hip hip' in query: speak('Hurreh') elif 'help' in query: speak('I will try my best to help you if I have solution of your problem.') elif 'follow' in query: speak('Ok sir') elif 'having illness' in query: speak('Take care and get well soon') elif 'today is my birthday' in query: speak('many many happy returns of the day. Happy birthday.') print("🎂🎂 Happy Birthday 🎂🎂") elif 'you are awesome' in query: speak('Thank you sir. It is because of artificial intelligence which had learnt by humans.') elif 'you are great' in query: speak('Thank you sir. It is because of artificial intelligence which had learnt by humans.') elif 'tu kaun hai' in query: speak('Meraa naam akshu2020 haai.') elif 'you speak' in query: speak('Yes, I can speak with you.') elif 'speak with ' in query: speak('Yes, I can speak with you.') elif 'hare ram' in query or 'hare krishna' in query: speak('Haare raama , haare krishnaa, krishnaa krishnaa , haare haare') elif 'ganpati' in query: speak('Ganpati baappa moryaa!') elif 'laugh' in query: speak('hehehehe,haahaahaa,hehehehe,haahaahaa,hehehehe,haahaahaa') print('😂🤣') elif 'genius answer' in query: speak('No problem') elif 'you' in query and 'intelligent' in query: speak('Thank you sir') elif ' into' in query: speak('If you want to do any mathematical calculation then give me a command to open calculator.') elif ' power' in query: speak('If you want to do any mathematical calculation then give me a command to open my calculator.') elif 'whatsapp' in query: pyautogui.moveTo(250,1200) pyautogui.click() time.sleep(1) pyautogui.write('whatsapp') pyautogui.press('enter') speak('Do you want to send message to anyone through whatsapp, .....please answer in yes or no') whatsapp() elif 'wh' in query or 'how' in query: url = "https://www.google.co.in/search?q=" +(str(query))+ "&oq="+(str(query))+"&gs_l=serp.12..0i71l8.0.0.0.6391.0.0.0.0.0.0.0.0..0.0....0...1c..64.serp..0.0.0.UiQhpfaBsuU" webbrowser.open_new(url) time.sleep(2) speak('Here is your answer') time.sleep(5) elif 'piano' in query: speak('Yes sir, I can play piano.') winsound.Beep(200,500) winsound.Beep(250,500) winsound.Beep(300,500) winsound.Beep(350,500) winsound.Beep(400,500) winsound.Beep(450,500) winsound.Beep(500,500) winsound.Beep(550,500) time.sleep(6) elif 'play' in query and 'instru' in query: speak('Yes sir, I can play piano.') winsound.Beep(200,500) winsound.Beep(250,500) winsound.Beep(300,500) winsound.Beep(350,500) winsound.Beep(400,500) winsound.Beep(450,500) winsound.Beep(500,500) winsound.Beep(550,500) time.sleep(6) elif 'play' in query or 'turn on' in query and ('music' in query or 'song' in query) : try: music_dir = 'C:\\Users\\Admin\\Music\\Playlists' songs = os.listdir(music_dir) print(songs) os.startfile(os.path.join(music_dir, songs[0])) except Exception as e: #print(e) speak('Sorry sir, I am not able to play music') elif (('open' in query or 'turn on' in query) and 'camera' in query) or (('click' in query or 'take' in query) and ('photo' in query or 'pic' in query)): speak("Opening camera") cam = cv2.VideoCapture(0) cv2.namedWindow("test") img_counter = 0 speak('say click, to click photo.....and if you want to turn off the camera, say turn off the camera') while True: ret, frame = cam.read() if not ret: print("failed to grab frame") speak('failed to grab frame') break cv2.imshow("test", frame) query = takeCommand().lower() k = cv2.waitKey(1) if 'click' in query or ('take' in query and 'photo' in query): speak('Be ready!...... 3.....2........1..........') pyautogui.press('space') img_name = "opencv_frame_{}.png".format(img_counter) cv2.imwrite(img_name, frame) print("{} written!".format(img_name)) speak('{} written!'.format(img_name)) img_counter += 1 elif 'escape' in query or 'off' in query or 'close' in query: pyautogui.press('esc') print("Escape hit, closing...") speak('Turning off the camera') break elif k%256 == 27: # ESC pressed print("Escape hit, closing...") break elif k%256 == 32: # SPACE pressed img_name = "opencv_frame_{}.png".format(img_counter) cv2.imwrite(img_name, frame) print("{} written!".format(img_name)) speak('{} written!'.format(img_name)) img_counter += 1 elif 'exit' in query or 'stop' in query or 'bye' in query: speak('Please say, turn off the camera or press escape button before giving any other command') else: speak('I did not understand what did you say or you entered a wrong key.') cam.release() cv2.destroyAllWindows() elif 'screenshot' in query: speak('Please go on the screen whose screenshot you want to take, after 5 seconds I will take screenshot') time.sleep(4) speak('Taking screenshot....3........2.........1.......') pyautogui.screenshot('screenshot_by_rayen2020.png') speak('The screenshot is saved as screenshot_by_rayen2020.png') elif 'click' in query and 'start' in query: pyautogui.moveTo(10,1200) pyautogui.click() elif ('open' in query or 'click' in query) and 'calendar' in query: pyautogui.moveTo(1800,1200) pyautogui.click() elif 'minimise' in query and 'screen' in query: pyautogui.moveTo(1770,0) pyautogui.click() elif 'increase' in query and ('volume' in query or 'sound' in query): pyautogui.press('volumeup') elif 'decrease' in query and ('volume' in query or 'sound' in query): pyautogui.press('volumedown') elif 'capslock' in query or ('caps' in query and 'lock' in query): pyautogui.press('capslock') elif 'mute' in query: pyautogui.press('volumemute') elif 'search' in query and ('bottom' in query or 'pc' in query or 'laptop' in query or 'app' in query): pyautogui.moveTo(250,1200) pyautogui.click() speak('What do you want to search?') query = takeCommand().lower() pyautogui.write(f'{query}') pyautogui.press('enter') elif ('check' in query or 'tell' in query or 'let me know' in query) and 'website' in query and (('up' in query or 'working' in query) or 'down' in query): speak('Paste the website in input to know it is up or down') check_website_status = input("Paste the website here: ") try: status = urllib.request.urlopen(f"{check_website_status}").getcode() if status == 200: print('Website is up, you can open it.') speak('Website is up, you can open it.') else: print('Website is down, or no any website is available of this name.') speak('Website is down, or no any website is available of this name.') except: speak('URL not found') elif ('go' in query or 'open' in query) and 'settings' in query: pyautogui.moveTo(250,1200) pyautogui.click() time.sleep(1) pyautogui.write('settings') pyautogui.press('enter') elif 'close' in query and ('click' in query or 'window' in query): pyautogui.moveTo(1885,10) speak('Should I close this window?') query = takeCommand().lower() close_window() elif 'night light' in query and ('on' in query or 'off' in query or 'close' in query): pyautogui.moveTo(1880,1050) pyautogui.click() time.sleep(1) pyautogui.moveTo(1840,620) pyautogui.click() pyautogui.moveTo(1880,1050) pyautogui.click() elif 'notification' in query and ('show' in query or 'click' in query or 'open' in query or 'close' in query or 'on' in query or 'off' in query or 'icon' in query or 'pc' in query or 'laptop' in query): pyautogui.moveTo(1880,1050) pyautogui.click() elif ('increase' in query or 'decrease' in query or 'change' in query or 'minimize' in query or 'maximize' in query) and 'brightness' in query: speak('At what percent should I kept the brightness, 25, 50, 75 or 100?') brightness() elif '-' in query: speak('If you want to do any mathematical calculation then give me a command to open calculator.') elif 'open' in query: if 'gallery' in query or 'photo' in query or 'image' in query or 'pic' in query: pyautogui.moveTo(250,1200) pyautogui.click() time.sleep(1) pyautogui.write('photo') pyautogui.press('enter') elif 'proteus' in query: pyautogui.moveTo(250,1200) pyautogui.click() time.sleep(1) pyautogui.write('proteus') pyautogui.press('enter') elif 'word' in query: pyautogui.moveTo(250,1200) pyautogui.click() time.sleep(1) pyautogui.write('word') pyautogui.press('enter') elif ('power' in query and 'point' in query) or 'presntation' in query or 'ppt' in query: pyautogui.moveTo(250,1200) pyautogui.click() time.sleep(1) pyautogui.write('ppt') pyautogui.press('enter') elif 'file' in query: pyautogui.moveTo(250,1200) pyautogui.click() time.sleep(1) pyautogui.write('file') pyautogui.press('enter') elif 'edge' in query: pyautogui.moveTo(250,1200) pyautogui.click() time.sleep(1) pyautogui.write('microsoft edge') pyautogui.press('enter') elif 'wps' in query: pyautogui.moveTo(250,1200) pyautogui.click() time.sleep(1) pyautogui.write('wps office') pyautogui.press('enter') elif 'spyder' in query: pyautogui.moveTo(250,1200) pyautogui.click() time.sleep(1) pyautogui.write('spyder') pyautogui.press('enter') elif 'snip' in query: pyautogui.moveTo(250,1200) pyautogui.click() time.sleep(1) pyautogui.write('snip') pyautogui.press('enter') elif 'pycharm' in query: pyautogui.moveTo(250,1200) pyautogui.click() time.sleep(1) pyautogui.write('pycharm') pyautogui.press('enter') elif 'this pc' in query: pyautogui.moveTo(250,1200) pyautogui.click() time.sleep(1) pyautogui.write('this pc') pyautogui.press('enter') elif 'scilab' in query: pyautogui.moveTo(250,1200) pyautogui.click() time.sleep(1) pyautogui.write('sciab') pyautogui.press('enter') elif 'autocad' in query: pyautogui.moveTo(250,1200) pyautogui.click() time.sleep(1) pyautogui.write('autocad') pyautogui.press('enter') elif 'obs' in query and 'studio' in query: pyautogui.moveTo(250,1200) pyautogui.click() time.sleep(1) pyautogui.write('OBS Studio') pyautogui.press('enter') elif 'android' in query and 'studio' in query: pyautogui.moveTo(250,1200) pyautogui.click() time.sleep(1) pyautogui.write('android studio') pyautogui.press('enter') elif ('vs' in query or 'visual studio' in query) and 'code' in query: pyautogui.moveTo(250,1200) pyautogui.click() time.sleep(1) pyautogui.write('visual studio code') pyautogui.press('enter') elif 'code' in query and 'block' in query: pyautogui.moveTo(250,1200) pyautogui.click() time.sleep(1) pyautogui.write('codeblocks') pyautogui.press('enter') elif 'me the answer' in query: speak('Yes sir, I will try my best to answer you.') elif 'me answer' in query or ('answer' in query and 'question' in query): speak('Yes sir, I will try my best to answer you.') elif 'map' in query: webbrowser.open('https://www.google.com/maps') time.sleep(10) elif 'can you' in query or 'could you' in query: speak('I will try my best if I can do that.') elif 'do you' in query: speak('I will try my best if I can do that.') elif 'truth' in query: speak('I always speak truth. I never lie.') elif 'true' in query: speak('I always speak truth. I never lie.') elif 'lying' in query: speak('I always speak truth. I never lie.') elif 'liar' in query: speak('I always speak truth. I never lie.') elif 'doubt' in query: speak('I will try my best if I can clear your doubt.') elif ' by' in query: speak('If you want to do any mathematical calculation then give me a command to open calculator.') elif 'hii' in query: speak('hii sir') elif 'hey' in query: speak('hello sir') elif 'hai' in query: speak('hello sir') elif 'hay' in query: speak('hello sir') elif 'hi' in query: speak('hii Sir') elif 'hello' in query: speak('hello Sir!') elif 'kon' in query and 'aahe' in query: speak('Me eka robot aahee sir. Maazee naav akshu2020 aahee.') elif 'nonsense' in query: speak("I'm sorry sir") elif 'mad' in query: speak("I'm sorry sir") elif 'shut up' in query: speak("I'm sorry sir") elif 'nice' in query: speak('Thank you sir') elif 'good' in query or 'wonderful' in query or 'great' in query: speak('Thank you sir') elif 'excellent' in query: speak('Thank you sir') elif 'ok' in query: speak('Hmmmmmm') elif 'akshu 2020' in query: speak('yes sir') elif len(query) >= 200: speak('Your voice is pretty good!') elif ' ' in query: try: #query = query.replace("what is ","") results = wikipedia.summary(query, sentences=3) print(results) speak(results) except Exception as e: speak('I unable to answer your question.') elif 'a' in query or 'b' in query or 'c' in query or 'd' in query or 'e' in query or 'f' in query or 'g' in query or 'h' in query or 'i' in query or 'j' in query or 'k' in query or 'l' in query or 'm' in query or 'n' in query or 'o' in query or 'p' in query or 'q' in query or 'r' in query or 's' in query or 't' in query or 'u' in query or 'v' in query or 'w' in query or 'x' in query or 'y' in query or 'z' in query: try: results = wikipedia.summary(query, sentences = 2) print(results) speak(results) except Exception as e: speak('I unable to answer your question. ') else: speak('I unable to give answer of your question')
arashstar1 / Bot LuaCode Issues 0 Pull requests 0 Pulse MaTaDoR/ 3233fdf V 5.7 MaTaDoR @MaTaDoRTeaMMaTaDoRTeaM committed on GitHub about 1 month ago 2 changed files 2,704 additions and 0 deletions cli/tg/tdcli.lua @@ -0,0 +1,2704 @@ +--[[ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. + +]]-- + +-- Vector example form is like this: {[0] = v} or {v1, v2, v3, [0] = v} +-- If false or true crashed your telegram-cli, try to change true to 1 and false to 0 + +-- Main Bot Framework +local M = {} + +-- @chat_id = user, group, channel, and broadcast +-- @group_id = normal group +-- @channel_id = channel and broadcast +local function getChatId(chat_id) + local chat = {} + local chat_id = tostring(chat_id) + + if chat_id:match('^-100') then + local channel_id = chat_id:gsub('-100', '') + chat = {ID = channel_id, type = 'channel'} + else + local group_id = chat_id:gsub('-', '') + chat = {ID = group_id, type = 'group'} + end + + return chat +end + +local function getInputFile(file) + if file:match('/') then + infile = {ID = "InputFileLocal", path_ = file} + elseif file:match('^%d+$') then + infile = {ID = "InputFileId", id_ = file} + else + infile = {ID = "InputFilePersistentId", persistent_id_ = file} + end + + return infile +end + +-- User can send bold, italic, and monospace text uses HTML or Markdown format. +local function getParseMode(parse_mode) + if parse_mode then + local mode = parse_mode:lower() + + if mode == 'markdown' or mode == 'md' then + P = {ID = "TextParseModeMarkdown"} + elseif mode == 'html' then + P = {ID = "TextParseModeHTML"} + end + end + + return P +end + +-- Returns current authorization state, offline request +local function getAuthState(dl_cb, cmd) + tdcli_function ({ + ID = "GetAuthState", + }, dl_cb, cmd) +end + +M.getAuthState = getAuthState + +-- Sets user's phone number and sends authentication code to the user. +-- Works only when authGetState returns authStateWaitPhoneNumber. +-- If phone number is not recognized or another error has happened, returns an error. Otherwise returns authStateWaitCode +-- @phone_number User's phone number in any reasonable format +-- @allow_flash_call Pass True, if code can be sent via flash call to the specified phone number +-- @is_current_phone_number Pass true, if the phone number is used on the current device. Ignored if allow_flash_call is False +local function setAuthPhoneNumber(phone_number, allow_flash_call, is_current_phone_number, dl_cb, cmd) + tdcli_function ({ + ID = "SetAuthPhoneNumber", + phone_number_ = phone_number, + allow_flash_call_ = allow_flash_call, + is_current_phone_number_ = is_current_phone_number + }, dl_cb, cmd) +end + +M.setAuthPhoneNumber = setAuthPhoneNumber + +-- Resends authentication code to the user. +-- Works only when authGetState returns authStateWaitCode and next_code_type of result is not null. +-- Returns authStateWaitCode on success +local function resendAuthCode(dl_cb, cmd) + tdcli_function ({ + ID = "ResendAuthCode", + }, dl_cb, cmd) +end + +M.resendAuthCode = resendAuthCode + +-- Checks authentication code. +-- Works only when authGetState returns authStateWaitCode. +-- Returns authStateWaitPassword or authStateOk on success +-- @code Verification code from SMS, Telegram message, voice call or flash call +-- @first_name User first name, if user is yet not registered, 1-255 characters +-- @last_name Optional user last name, if user is yet not registered, 0-255 characters +local function checkAuthCode(code, first_name, last_name, dl_cb, cmd) + tdcli_function ({ + ID = "CheckAuthCode", + code_ = code, + first_name_ = first_name, + last_name_ = last_name + }, dl_cb, cmd) +end + +M.checkAuthCode = checkAuthCode + +-- Checks password for correctness. +-- Works only when authGetState returns authStateWaitPassword. +-- Returns authStateOk on success +-- @password Password to check +local function checkAuthPassword(password, dl_cb, cmd) + tdcli_function ({ + ID = "CheckAuthPassword", + password_ = password + }, dl_cb, cmd) +end + +M.checkAuthPassword = checkAuthPassword + +-- Requests to send password recovery code to email. +-- Works only when authGetState returns authStateWaitPassword. +-- Returns authStateWaitPassword on success +local function requestAuthPasswordRecovery(dl_cb, cmd) + tdcli_function ({ + ID = "RequestAuthPasswordRecovery", + }, dl_cb, cmd) +end + +M.requestAuthPasswordRecovery = requestAuthPasswordRecovery + +-- Recovers password with recovery code sent to email. +-- Works only when authGetState returns authStateWaitPassword. +-- Returns authStateOk on success +-- @recovery_code Recovery code to check +local function recoverAuthPassword(recovery_code, dl_cb, cmd) + tdcli_function ({ + ID = "RecoverAuthPassword", + recovery_code_ = recovery_code + }, dl_cb, cmd) +end + +M.recoverAuthPassword = recoverAuthPassword + +-- Logs out user. +-- If force == false, begins to perform soft log out, returns authStateLoggingOut after completion. +-- If force == true then succeeds almost immediately without cleaning anything at the server, but returns error with code 401 and description "Unauthorized" +-- @force If true, just delete all local data. Session will remain in list of active sessions +local function resetAuth(force, dl_cb, cmd) + tdcli_function ({ + ID = "ResetAuth", + force_ = force or nil + }, dl_cb, cmd) +end + +M.resetAuth = resetAuth + +-- Check bot's authentication token to log in as a bot. +-- Works only when authGetState returns authStateWaitPhoneNumber. +-- Can be used instead of setAuthPhoneNumber and checkAuthCode to log in. +-- Returns authStateOk on success +-- @token Bot token +local function checkAuthBotToken(token, dl_cb, cmd) + tdcli_function ({ + ID = "CheckAuthBotToken", + token_ = token + }, dl_cb, cmd) +end + +M.checkAuthBotToken = checkAuthBotToken + +-- Returns current state of two-step verification +local function getPasswordState(dl_cb, cmd) + tdcli_function ({ + ID = "GetPasswordState", + }, dl_cb, cmd) +end + +M.getPasswordState = getPasswordState + +-- Changes user password. +-- If new recovery email is specified, then error EMAIL_UNCONFIRMED is returned and password change will not be applied until email confirmation. +-- Application should call getPasswordState from time to time to check if email is already confirmed +-- @old_password Old user password +-- @new_password New user password, may be empty to remove the password +-- @new_hint New password hint, can be empty +-- @set_recovery_email Pass True, if recovery email should be changed +-- @new_recovery_email New recovery email, may be empty +local function setPassword(old_password, new_password, new_hint, set_recovery_email, new_recovery_email, dl_cb, cmd) + tdcli_function ({ + ID = "SetPassword", + old_password_ = old_password, + new_password_ = new_password, + new_hint_ = new_hint, + set_recovery_email_ = set_recovery_email, + new_recovery_email_ = new_recovery_email + }, dl_cb, cmd) +end + +M.setPassword = setPassword + +-- Returns set up recovery email. +-- This method can be used to verify a password provided by the user +-- @password Current user password +local function getRecoveryEmail(password, dl_cb, cmd) + tdcli_function ({ + ID = "GetRecoveryEmail", + password_ = password + }, dl_cb, cmd) +end + +M.getRecoveryEmail = getRecoveryEmail + +-- Changes user recovery email. +-- If new recovery email is specified, then error EMAIL_UNCONFIRMED is returned and email will not be changed until email confirmation. +-- Application should call getPasswordState from time to time to check if email is already confirmed. +-- If new_recovery_email coincides with the current set up email succeeds immediately and aborts all other requests waiting for email confirmation +-- @password Current user password +-- @new_recovery_email New recovery email +local function setRecoveryEmail(password, new_recovery_email, dl_cb, cmd) + tdcli_function ({ + ID = "SetRecoveryEmail", + password_ = password, + new_recovery_email_ = new_recovery_email + }, dl_cb, cmd) +end + +M.setRecoveryEmail = setRecoveryEmail + +-- Requests to send password recovery code to email +local function requestPasswordRecovery(dl_cb, cmd) + tdcli_function ({ + ID = "RequestPasswordRecovery", + }, dl_cb, cmd) +end + +M.requestPasswordRecovery = requestPasswordRecovery + +-- Recovers password with recovery code sent to email +-- @recovery_code Recovery code to check +local function recoverPassword(recovery_code, dl_cb, cmd) + tdcli_function ({ + ID = "RecoverPassword", + recovery_code_ = tostring(recovery_code) + }, dl_cb, cmd) +end + +M.recoverPassword = recoverPassword + +-- Returns current logged in user +local function getMe(dl_cb, cmd) + tdcli_function ({ + ID = "GetMe", + }, dl_cb, cmd) +end + +M.getMe = getMe + +-- Returns information about a user by its identifier, offline request if current user is not a bot +-- @user_id User identifier +local function getUser(user_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetUser", + user_id_ = user_id + }, dl_cb, cmd) +end + +M.getUser = getUser + +-- Returns full information about a user by its identifier +-- @user_id User identifier +local function getUserFull(user_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetUserFull", + user_id_ = user_id + }, dl_cb, cmd) +end + +M.getUserFull = getUserFull + +-- Returns information about a group by its identifier, offline request if current user is not a bot +-- @group_id Group identifier +local function getGroup(group_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetGroup", + group_id_ = getChatId(group_id).ID + }, dl_cb, cmd) +end + +M.getGroup = getGroup + +-- Returns full information about a group by its identifier +-- @group_id Group identifier +local function getGroupFull(group_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetGroupFull", + group_id_ = getChatId(group_id).ID + }, dl_cb, cmd) +end + +M.getGroupFull = getGroupFull + +-- Returns information about a channel by its identifier, offline request if current user is not a bot +-- @channel_id Channel identifier +local function getChannel(channel_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetChannel", + channel_id_ = getChatId(channel_id).ID + }, dl_cb, cmd) +end + +M.getChannel = getChannel + +-- Returns full information about a channel by its identifier, cached for at most 1 minute +-- @channel_id Channel identifier +local function getChannelFull(channel_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetChannelFull", + channel_id_ = getChatId(channel_id).ID + }, dl_cb, cmd) +end + +M.getChannelFull = getChannelFull + +-- Returns information about a secret chat by its identifier, offline request +-- @secret_chat_id Secret chat identifier +local function getSecretChat(secret_chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetSecretChat", + secret_chat_id_ = secret_chat_id + }, dl_cb, cmd) +end + +M.getSecretChat = getSecretChat + +-- Returns information about a chat by its identifier, offline request if current user is not a bot +-- @chat_id Chat identifier +local function getChat(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetChat", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.getChat = getChat + +-- Returns information about a message +-- @chat_id Identifier of the chat, message belongs to +-- @message_id Identifier of the message to get +local function getMessage(chat_id, message_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetMessage", + chat_id_ = chat_id, + message_id_ = message_id + }, dl_cb, cmd) +end + +M.getMessage = getMessage + +-- Returns information about messages. +-- If message is not found, returns null on the corresponding position of the result +-- @chat_id Identifier of the chat, messages belongs to +-- @message_ids Identifiers of the messages to get +local function getMessages(chat_id, message_ids, dl_cb, cmd) + tdcli_function ({ + ID = "GetMessages", + chat_id_ = chat_id, + message_ids_ = message_ids -- vector + }, dl_cb, cmd) +end + +M.getMessages = getMessages + +-- Returns information about a file, offline request +-- @file_id Identifier of the file to get +local function getFile(file_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetFile", + file_id_ = file_id + }, dl_cb, cmd) +end + +M.getFile = getFile + +-- Returns information about a file by its persistent id, offline request +-- @persistent_file_id Persistent identifier of the file to get +local function getFilePersistent(persistent_file_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetFilePersistent", + persistent_file_id_ = persistent_file_id + }, dl_cb, cmd) +end + +M.getFilePersistent = getFilePersistent + +-- Returns list of chats in the right order, chats are sorted by (order, chat_id) in decreasing order. +-- For example, to get list of chats from the beginning, the offset_order should be equal 2^63 - 1 +-- @offset_order Chat order to return chats from +-- @offset_chat_id Chat identifier to return chats from +-- @limit Maximum number of chats to be returned +local function getChats(offset_order, offset_chat_id, limit, dl_cb, cmd) + if not limit or limit > 20 then + limit = 20 + end + + tdcli_function ({ + ID = "GetChats", + offset_order_ = offset_order or 9223372036854775807, + offset_chat_id_ = offset_chat_id or 0, + limit_ = limit + }, dl_cb, cmd) +end + +M.getChats = getChats + +-- Searches public chat by its username. +-- Currently only private and channel chats can be public. +-- Returns chat if found, otherwise some error is returned +-- @username Username to be resolved +local function searchPublicChat(username, dl_cb, cmd) + tdcli_function ({ + ID = "SearchPublicChat", + username_ = username + }, dl_cb, cmd) +end + +M.searchPublicChat = searchPublicChat + +-- Searches public chats by prefix of their username. +-- Currently only private and channel (including supergroup) chats can be public. +-- Returns meaningful number of results. +-- Returns nothing if length of the searched username prefix is less than 5. +-- Excludes private chats with contacts from the results +-- @username_prefix Prefix of the username to search +local function searchPublicChats(username_prefix, dl_cb, cmd) + tdcli_function ({ + ID = "SearchPublicChats", + username_prefix_ = username_prefix + }, dl_cb, cmd) +end + +M.searchPublicChats = searchPublicChats + +-- Searches for specified query in the title and username of known chats, offline request. +-- Returns chats in the order of them in the chat list +-- @query Query to search for, if query is empty, returns up to 20 recently found chats +-- @limit Maximum number of chats to be returned +local function searchChats(query, limit, dl_cb, cmd) + if not limit or limit > 20 then + limit = 20 + end + + tdcli_function ({ + ID = "SearchChats", + query_ = query, + limit_ = limit + }, dl_cb, cmd) +end + +M.searchChats = searchChats + +-- Adds chat to the list of recently found chats. +-- The chat is added to the beginning of the list. +-- If the chat is already in the list, at first it is removed from the list +-- @chat_id Identifier of the chat to add +local function addRecentlyFoundChat(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "AddRecentlyFoundChat", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.addRecentlyFoundChat = addRecentlyFoundChat + +-- Deletes chat from the list of recently found chats +-- @chat_id Identifier of the chat to delete +local function deleteRecentlyFoundChat(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteRecentlyFoundChat", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.deleteRecentlyFoundChat = deleteRecentlyFoundChat + +-- Clears list of recently found chats +local function deleteRecentlyFoundChats(dl_cb, cmd) + tdcli_function ({ + ID = "DeleteRecentlyFoundChats", + }, dl_cb, cmd) +end + +M.deleteRecentlyFoundChats = deleteRecentlyFoundChats + +-- Returns list of common chats with an other given user. +-- Chats are sorted by their type and creation date +-- @user_id User identifier +-- @offset_chat_id Chat identifier to return chats from, use 0 for the first request +-- @limit Maximum number of chats to be returned, up to 100 +local function getCommonChats(user_id, offset_chat_id, limit, dl_cb, cmd) + if not limit or limit > 100 then + limit = 100 + end + + tdcli_function ({ + ID = "GetCommonChats", + user_id_ = user_id, + offset_chat_id_ = offset_chat_id, + limit_ = limit + }, dl_cb, cmd) +end + +M.getCommonChats = getCommonChats + +-- Returns messages in a chat. +-- Automatically calls openChat. +-- Returns result in reverse chronological order, i.e. in order of decreasing message.message_id +-- @chat_id Chat identifier +-- @from_message_id Identifier of the message near which we need a history, you can use 0 to get results from the beginning, i.e. from oldest to newest +-- @offset Specify 0 to get results exactly from from_message_id or negative offset to get specified message and some newer messages +-- @limit Maximum number of messages to be returned, should be positive and can't be greater than 100. +-- If offset is negative, limit must be greater than -offset. +-- There may be less than limit messages returned even the end of the history is not reached +local function getChatHistory(chat_id, from_message_id, offset, limit, dl_cb, cmd) + if not limit or limit > 100 then + limit = 100 + end + + tdcli_function ({ + ID = "GetChatHistory", + chat_id_ = chat_id, + from_message_id_ = from_message_id, + offset_ = offset or 0, + limit_ = limit + }, dl_cb, cmd) +end + +M.getChatHistory = getChatHistory + +-- Deletes all messages in the chat. +-- Can't be used for channel chats +-- @chat_id Chat identifier +-- @remove_from_chat_list Pass true, if chat should be removed from the chat list +local function deleteChatHistory(chat_id, remove_from_chat_list, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteChatHistory", + chat_id_ = chat_id, + remove_from_chat_list_ = remove_from_chat_list + }, dl_cb, cmd) +end + +M.deleteChatHistory = deleteChatHistory + +-- Searches for messages with given words in the chat. +-- Returns result in reverse chronological order, i. e. in order of decreasimg message_id. +-- Doesn't work in secret chats +-- @chat_id Chat identifier to search in +-- @query Query to search for +-- @from_message_id Identifier of the message from which we need a history, you can use 0 to get results from beginning +-- @limit Maximum number of messages to be returned, can't be greater than 100 +-- @filter Filter for content of searched messages +-- filter = Empty|Animation|Audio|Document|Photo|Video|Voice|PhotoAndVideo|Url|ChatPhoto +local function searchChatMessages(chat_id, query, from_message_id, limit, filter, dl_cb, cmd) + if not limit or limit > 100 then + limit = 100 + end + + tdcli_function ({ + ID = "SearchChatMessages", + chat_id_ = chat_id, + query_ = query, + from_message_id_ = from_message_id, + limit_ = limit, + filter_ = { + ID = 'SearchMessagesFilter' .. filter + }, + }, dl_cb, cmd) +end + +M.searchChatMessages = searchChatMessages + +-- Searches for messages in all chats except secret chats. Returns result in reverse chronological order, i. e. in order of decreasing (date, chat_id, message_id) +-- @query Query to search for +-- @offset_date Date of the message to search from, you can use 0 or any date in the future to get results from the beginning +-- @offset_chat_id Chat identifier of the last found message or 0 for the first request +-- @offset_message_id Message identifier of the last found message or 0 for the first request +-- @limit Maximum number of messages to be returned, can't be greater than 100 +local function searchMessages(query, offset_date, offset_chat_id, offset_message_id, limit, dl_cb, cmd) + if not limit or limit > 100 then + limit = 100 + end + + tdcli_function ({ + ID = "SearchMessages", + query_ = query, + offset_date_ = offset_date, + offset_chat_id_ = offset_chat_id, + offset_message_id_ = offset_message_id, + limit_ = limit + }, dl_cb, cmd) +end + +M.searchMessages = searchMessages + +-- Invites bot to a chat (if it is not in the chat) and send /start to it. +-- Bot can't be invited to a private chat other than chat with the bot. +-- Bots can't be invited to broadcast channel chats and secret chats. +-- Returns sent message. +-- UpdateChatTopMessage will not be sent, so returned message should be used to update chat top message +-- @bot_user_id Identifier of the bot +-- @chat_id Identifier of the chat +-- @parameter Hidden parameter sent to bot for deep linking (https://api.telegram.org/bots#deep-linking) +-- parameter=start|startgroup or custom as defined by bot creator +local function sendBotStartMessage(bot_user_id, chat_id, parameter, dl_cb, cmd) + tdcli_function ({ + ID = "SendBotStartMessage", + bot_user_id_ = bot_user_id, + chat_id_ = chat_id, + parameter_ = parameter + }, dl_cb, cmd) +end + +M.sendBotStartMessage = sendBotStartMessage + +-- Sends result of the inline query as a message. +-- Returns sent message. +-- UpdateChatTopMessage will not be sent, so returned message should be used to update chat top message. +-- Always clears chat draft message +-- @chat_id Chat to send message +-- @reply_to_message_id Identifier of a message to reply to or 0 +-- @disable_notification Pass true, to disable notification about the message, doesn't works in secret chats +-- @from_background Pass true, if the message is sent from background +-- @query_id Identifier of the inline query +-- @result_id Identifier of the inline result +local function sendInlineQueryResultMessage(chat_id, reply_to_message_id, disable_notification, from_background, query_id, result_id, dl_cb, cmd) + tdcli_function ({ + ID = "SendInlineQueryResultMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + query_id_ = query_id, + result_id_ = result_id + }, dl_cb, cmd) +end + +M.sendInlineQueryResultMessage = sendInlineQueryResultMessage + +-- Forwards previously sent messages. +-- Returns forwarded messages in the same order as message identifiers passed in message_ids. +-- If message can't be forwarded, null will be returned instead of the message. +-- UpdateChatTopMessage will not be sent, so returned messages should be used to update chat top message +-- @chat_id Identifier of a chat to forward messages +-- @from_chat_id Identifier of a chat to forward from +-- @message_ids Identifiers of messages to forward +-- @disable_notification Pass true, to disable notification about the message, doesn't works if messages are forwarded to secret chat +-- @from_background Pass true, if the message is sent from background +local function forwardMessages(chat_id, from_chat_id, message_ids, disable_notification, dl_cb, cmd) + tdcli_function ({ + ID = "ForwardMessages", + chat_id_ = chat_id, + from_chat_id_ = from_chat_id, + message_ids_ = message_ids, -- vector + disable_notification_ = disable_notification, + from_background_ = 1 + }, dl_cb, cmd) +end + +M.forwardMessages = forwardMessages + +-- Changes current ttl setting in a secret chat and sends corresponding message +-- @chat_id Chat identifier +-- @ttl New value of ttl in seconds +local function sendChatSetTtlMessage(chat_id, ttl, dl_cb, cmd) + tdcli_function ({ + ID = "SendChatSetTtlMessage", + chat_id_ = chat_id, + ttl_ = ttl + }, dl_cb, cmd) +end + +M.sendChatSetTtlMessage = sendChatSetTtlMessage + +-- Deletes messages. +-- UpdateDeleteMessages will not be sent for messages deleted through that function +-- @chat_id Chat identifier +-- @message_ids Identifiers of messages to delete +local function deleteMessages(chat_id, message_ids, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteMessages", + chat_id_ = chat_id, + message_ids_ = message_ids -- vector + }, dl_cb, cmd) +end + +M.deleteMessages = deleteMessages + +-- Deletes all messages in the chat sent by the specified user. +-- Works only in supergroup channel chats, needs appropriate privileges +-- @chat_id Chat identifier +-- @user_id User identifier +local function deleteMessagesFromUser(chat_id, user_id, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteMessagesFromUser", + chat_id_ = chat_id, + user_id_ = user_id + }, dl_cb, cmd) +end + +M.deleteMessagesFromUser = deleteMessagesFromUser + +-- Edits text of text or game message. +-- Non-bots can edit message in a limited period of time. +-- Returns edited message after edit is complete server side +-- @chat_id Chat the message belongs to +-- @message_id Identifier of the message +-- @reply_markup Bots only. New message reply markup +-- @input_message_content New text content of the message. Should be of type InputMessageText +local function editMessageText(chat_id, message_id, reply_markup, text, disable_web_page_preview, parse_mode, dl_cb, cmd) + local TextParseMode = getParseMode(parse_mode) + + tdcli_function ({ + ID = "EditMessageText", + chat_id_ = chat_id, + message_id_ = message_id, + reply_markup_ = reply_markup, -- reply_markup:ReplyMarkup + input_message_content_ = { + ID = "InputMessageText", + text_ = text, + disable_web_page_preview_ = disable_web_page_preview, + clear_draft_ = 0, + entities_ = {}, + parse_mode_ = TextParseMode, + }, + }, dl_cb, cmd) +end + +M.editMessageText = editMessageText + +-- Edits message content caption. +-- Non-bots can edit message in a limited period of time. +-- Returns edited message after edit is complete server side +-- @chat_id Chat the message belongs to +-- @message_id Identifier of the message +-- @reply_markup Bots only. New message reply markup +-- @caption New message content caption, 0-200 characters +local function editMessageCaption(chat_id, message_id, reply_markup, caption, dl_cb, cmd) + tdcli_function ({ + ID = "EditMessageCaption", + chat_id_ = chat_id, + message_id_ = message_id, + reply_markup_ = reply_markup, -- reply_markup:ReplyMarkup + caption_ = caption + }, dl_cb, cmd) +end + +M.editMessageCaption = editMessageCaption + +-- Bots only. +-- Edits message reply markup. +-- Returns edited message after edit is complete server side +-- @chat_id Chat the message belongs to +-- @message_id Identifier of the message +-- @reply_markup New message reply markup +local function editMessageReplyMarkup(inline_message_id, reply_markup, caption, dl_cb, cmd) + tdcli_function ({ + ID = "EditInlineMessageCaption", + inline_message_id_ = inline_message_id, + reply_markup_ = reply_markup, -- reply_markup:ReplyMarkup + caption_ = caption + }, dl_cb, cmd) +end + +M.editMessageReplyMarkup = editMessageReplyMarkup + +-- Bots only. +-- Edits text of an inline text or game message sent via bot +-- @inline_message_id Inline message identifier +-- @reply_markup New message reply markup +-- @input_message_content New text content of the message. Should be of type InputMessageText +local function editInlineMessageText(inline_message_id, reply_markup, text, disable_web_page_preview, dl_cb, cmd) + tdcli_function ({ + ID = "EditInlineMessageText", + inline_message_id_ = inline_message_id, + reply_markup_ = reply_markup, -- reply_markup:ReplyMarkup + input_message_content_ = { + ID = "InputMessageText", + text_ = text, + disable_web_page_preview_ = disable_web_page_preview, + clear_draft_ = 0, + entities_ = {} + }, + }, dl_cb, cmd) +end + +M.editInlineMessageText = editInlineMessageText + +-- Bots only. +-- Edits caption of an inline message content sent via bot +-- @inline_message_id Inline message identifier +-- @reply_markup New message reply markup +-- @caption New message content caption, 0-200 characters +local function editInlineMessageCaption(inline_message_id, reply_markup, caption, dl_cb, cmd) + tdcli_function ({ + ID = "EditInlineMessageCaption", + inline_message_id_ = inline_message_id, + reply_markup_ = reply_markup, -- reply_markup:ReplyMarkup + caption_ = caption + }, dl_cb, cmd) +end + +M.editInlineMessageCaption = editInlineMessageCaption + +-- Bots only. +-- Edits reply markup of an inline message sent via bot +-- @inline_message_id Inline message identifier +-- @reply_markup New message reply markup +local function editInlineMessageReplyMarkup(inline_message_id, reply_markup, dl_cb, cmd) + tdcli_function ({ + ID = "EditInlineMessageReplyMarkup", + inline_message_id_ = inline_message_id, + reply_markup_ = reply_markup -- reply_markup:ReplyMarkup + }, dl_cb, cmd) +end + +M.editInlineMessageReplyMarkup = editInlineMessageReplyMarkup + + +-- Sends inline query to a bot and returns its results. +-- Unavailable for bots +-- @bot_user_id Identifier of the bot send query to +-- @chat_id Identifier of the chat, where the query is sent +-- @user_location User location, only if needed +-- @query Text of the query +-- @offset Offset of the first entry to return +local function getInlineQueryResults(bot_user_id, chat_id, latitude, longitude, query, offset, dl_cb, cmd) + tdcli_function ({ + ID = "GetInlineQueryResults", + bot_user_id_ = bot_user_id, + chat_id_ = chat_id, + user_location_ = { + ID = "Location", + latitude_ = latitude, + longitude_ = longitude + }, + query_ = query, + offset_ = offset + }, dl_cb, cmd) +end + +M.getInlineQueryResults = getInlineQueryResults + +-- Bots only. +-- Sets result of the inline query +-- @inline_query_id Identifier of the inline query +-- @is_personal Does result of the query can be cached only for specified user +-- @results Results of the query +-- @cache_time Allowed time to cache results of the query in seconds +-- @next_offset Offset for the next inline query, pass empty string if there is no more results +-- @switch_pm_text If non-empty, this text should be shown on the button, which opens private chat with the bot and sends bot start message with parameter switch_pm_parameter +-- @switch_pm_parameter Parameter for the bot start message +local function answerInlineQuery(inline_query_id, is_personal, cache_time, next_offset, switch_pm_text, switch_pm_parameter, dl_cb, cmd) + tdcli_function ({ + ID = "AnswerInlineQuery", + inline_query_id_ = inline_query_id, + is_personal_ = is_personal, + results_ = results, --vector<InputInlineQueryResult>, + cache_time_ = cache_time, + next_offset_ = next_offset, + switch_pm_text_ = switch_pm_text, + switch_pm_parameter_ = switch_pm_parameter + }, dl_cb, cmd) +end + +M.answerInlineQuery = answerInlineQuery + +-- Sends callback query to a bot and returns answer to it. +-- Unavailable for bots +-- @chat_id Identifier of the chat with a message +-- @message_id Identifier of the message, from which the query is originated +-- @payload Query payload +-- @text Text of the answer +-- @show_alert If true, an alert should be shown to the user instead of a toast +-- @url URL to be open +local function getCallbackQueryAnswer(chat_id, message_id, text, show_alert, url, dl_cb, cmd) + tdcli_function ({ + ID = "GetCallbackQueryAnswer", + chat_id_ = chat_id, + message_id_ = message_id, + payload_ = { + ID = "CallbackQueryAnswer", + text_ = text, + show_alert_ = show_alert, + url_ = url + }, + }, dl_cb, cmd) +end + +M.getCallbackQueryAnswer = getCallbackQueryAnswer + +-- Bots only. +-- Sets result of the callback query +-- @callback_query_id Identifier of the callback query +-- @text Text of the answer +-- @show_alert If true, an alert should be shown to the user instead of a toast +-- @url Url to be opened +-- @cache_time Allowed time to cache result of the query in seconds +local function answerCallbackQuery(callback_query_id, text, show_alert, url, cache_time, dl_cb, cmd) + tdcli_function ({ + ID = "AnswerCallbackQuery", + callback_query_id_ = callback_query_id, + text_ = text, + show_alert_ = show_alert, + url_ = url, + cache_time_ = cache_time + }, dl_cb, cmd) +end + +M.answerCallbackQuery = answerCallbackQuery + +-- Bots only. +-- Updates game score of the specified user in the game +-- @chat_id Chat a message with the game belongs to +-- @message_id Identifier of the message +-- @edit_message True, if message should be edited +-- @user_id User identifier +-- @score New score +-- @force Pass True to update the score even if it decreases. If score is 0, user will be deleted from the high scores table +local function setGameScore(chat_id, message_id, edit_message, user_id, score, force, dl_cb, cmd) + tdcli_function ({ + ID = "SetGameScore", + chat_id_ = chat_id, + message_id_ = message_id, + edit_message_ = edit_message, + user_id_ = user_id, + score_ = score, + force_ = force + }, dl_cb, cmd) +end + +M.setGameScore = setGameScore + +-- Bots only. +-- Updates game score of the specified user in the game +-- @inline_message_id Inline message identifier +-- @edit_message True, if message should be edited +-- @user_id User identifier +-- @score New score +-- @force Pass True to update the score even if it decreases. If score is 0, user will be deleted from the high scores table +local function setInlineGameScore(inline_message_id, edit_message, user_id, score, force, dl_cb, cmd) + tdcli_function ({ + ID = "SetInlineGameScore", + inline_message_id_ = inline_message_id, + edit_message_ = edit_message, + user_id_ = user_id, + score_ = score, + force_ = force + }, dl_cb, cmd) +end + +M.setInlineGameScore = setInlineGameScore + +-- Bots only. +-- Returns game high scores and some part of the score table around of the specified user in the game +-- @chat_id Chat a message with the game belongs to +-- @message_id Identifier of the message +-- @user_id User identifie +local function getGameHighScores(chat_id, message_id, user_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetGameHighScores", + chat_id_ = chat_id, + message_id_ = message_id, + user_id_ = user_id + }, dl_cb, cmd) +end + +M.getGameHighScores = getGameHighScores + +-- Bots only. +-- Returns game high scores and some part of the score table around of the specified user in the game +-- @inline_message_id Inline message identifier +-- @user_id User identifier +local function getInlineGameHighScores(inline_message_id, user_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetInlineGameHighScores", + inline_message_id_ = inline_message_id, + user_id_ = user_id + }, dl_cb, cmd) +end + +M.getInlineGameHighScores = getInlineGameHighScores + +-- Deletes default reply markup from chat. +-- This method needs to be called after one-time keyboard or ForceReply reply markup has been used. +-- UpdateChatReplyMarkup will be send if reply markup will be changed +-- @chat_id Chat identifier +-- @message_id Message identifier of used keyboard +local function deleteChatReplyMarkup(chat_id, message_id, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteChatReplyMarkup", + chat_id_ = chat_id, + message_id_ = message_id + }, dl_cb, cmd) +end + +M.deleteChatReplyMarkup = deleteChatReplyMarkup + +-- Sends notification about user activity in a chat +-- @chat_id Chat identifier +-- @action Action description +-- action = Typing|Cancel|RecordVideo|UploadVideo|RecordVoice|UploadVoice|UploadPhoto|UploadDocument|GeoLocation|ChooseContact|StartPlayGame +local function sendChatAction(chat_id, action, progress, dl_cb, cmd) + tdcli_function ({ + ID = "SendChatAction", + chat_id_ = chat_id, + action_ = { + ID = "SendMessage" .. action .. "Action", + progress_ = progress or 100 + } + }, dl_cb, cmd) +end + +M.sendChatAction = sendChatAction + +-- Sends notification about screenshot taken in a chat. +-- Works only in secret chats +-- @chat_id Chat identifier +local function sendChatScreenshotTakenNotification(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "SendChatScreenshotTakenNotification", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.sendChatScreenshotTakenNotification = sendChatScreenshotTakenNotification + +-- Chat is opened by the user. +-- Many useful activities depends on chat being opened or closed. For example, in channels all updates are received only for opened chats +-- @chat_id Chat identifier +local function openChat(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "OpenChat", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.openChat = openChat + +-- Chat is closed by the user. +-- Many useful activities depends on chat being opened or closed. +-- @chat_id Chat identifier +local function closeChat(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "CloseChat", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.closeChat = closeChat + +-- Messages are viewed by the user. +-- Many useful activities depends on message being viewed. For example, marking messages as read, incrementing of view counter, updating of view counter, removing of deleted messages in channels +-- @chat_id Chat identifier +-- @message_ids Identifiers of viewed messages +local function viewMessages(chat_id, message_ids, dl_cb, cmd) + tdcli_function ({ + ID = "ViewMessages", + chat_id_ = chat_id, + message_ids_ = message_ids -- vector + }, dl_cb, cmd) +end + +M.viewMessages = viewMessages + +-- Message content is opened, for example the user has opened a photo, a video, a document, a location or a venue or have listened to an audio or a voice message +-- @chat_id Chat identifier of the message +-- @message_id Identifier of the message with opened content +local function openMessageContent(chat_id, message_id, dl_cb, cmd) + tdcli_function ({ + ID = "OpenMessageContent", + chat_id_ = chat_id, + message_id_ = message_id + }, dl_cb, cmd) +end + +M.openMessageContent = openMessageContent + +-- Returns existing chat corresponding to the given user +-- @user_id User identifier +local function createPrivateChat(user_id, dl_cb, cmd) + tdcli_function ({ + ID = "CreatePrivateChat", + user_id_ = user_id + }, dl_cb, cmd) +end + +M.createPrivateChat = createPrivateChat + +-- Returns existing chat corresponding to the known group +-- @group_id Group identifier +local function createGroupChat(group_id, dl_cb, cmd) + tdcli_function ({ + ID = "CreateGroupChat", + group_id_ = getChatId(group_id).ID + }, dl_cb, cmd) +end + +M.createGroupChat = createGroupChat + +-- Returns existing chat corresponding to the known channel +-- @channel_id Channel identifier +local function createChannelChat(channel_id, dl_cb, cmd) + tdcli_function ({ + ID = "CreateChannelChat", + channel_id_ = getChatId(channel_id).ID + }, dl_cb, cmd) +end + +M.createChannelChat = createChannelChat + +-- Returns existing chat corresponding to the known secret chat +-- @secret_chat_id SecretChat identifier +local function createSecretChat(secret_chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "CreateSecretChat", + secret_chat_id_ = secret_chat_id + }, dl_cb, cmd) +end + +M.createSecretChat = createSecretChat + +-- Creates new group chat and send corresponding messageGroupChatCreate, returns created chat +-- @user_ids Identifiers of users to add to the group +-- @title Title of new group chat, 0-255 characters +local function createNewGroupChat(user_ids, title, dl_cb, cmd) + tdcli_function ({ + ID = "CreateNewGroupChat", + user_ids_ = user_ids, -- vector + title_ = title + }, dl_cb, cmd) +end + +M.createNewGroupChat = createNewGroupChat + +-- Creates new channel chat and send corresponding messageChannelChatCreate, returns created chat +-- @title Title of new channel chat, 0-255 characters +-- @is_supergroup True, if supergroup chat should be created +-- @about Information about the channel, 0-255 characters +local function createNewChannelChat(title, is_supergroup, about, dl_cb, cmd) + tdcli_function ({ + ID = "CreateNewChannelChat", + title_ = title, + is_supergroup_ = is_supergroup, + about_ = about + }, dl_cb, cmd) +end + +M.createNewChannelChat = createNewChannelChat + +-- Creates new secret chat, returns created chat +-- @user_id Identifier of a user to create secret chat with +local function createNewSecretChat(user_id, dl_cb, cmd) + tdcli_function ({ + ID = "CreateNewSecretChat", + user_id_ = user_id + }, dl_cb, cmd) +end + +M.createNewSecretChat = createNewSecretChat + +-- Creates new channel supergroup chat from existing group chat and send corresponding messageChatMigrateTo and messageChatMigrateFrom. Deactivates group +-- @chat_id Group chat identifier +local function migrateGroupChatToChannelChat(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "MigrateGroupChatToChannelChat", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.migrateGroupChatToChannelChat = migrateGroupChatToChannelChat + +-- Changes chat title. +-- Title can't be changed for private chats. +-- Title will not change until change will be synchronized with the server. +-- Title will not be changed if application is killed before it can send request to the server. +-- There will be update about change of the title on success. Otherwise error will be returned +-- @chat_id Chat identifier +-- @title New title of a chat, 0-255 characters +local function changeChatTitle(chat_id, title, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeChatTitle", + chat_id_ = chat_id, + title_ = title + }, dl_cb, cmd) +end + +M.changeChatTitle = changeChatTitle + +-- Changes chat photo. +-- Photo can't be changed for private chats. +-- Photo will not change until change will be synchronized with the server. +-- Photo will not be changed if application is killed before it can send request to the server. +-- There will be update about change of the photo on success. Otherwise error will be returned +-- @chat_id Chat identifier +-- @photo New chat photo. You can use zero InputFileId to delete photo. Files accessible only by HTTP URL are not acceptable +local function changeChatPhoto(chat_id, photo, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeChatPhoto", + chat_id_ = chat_id, + photo_ = getInputFile(photo) + }, dl_cb, cmd) +end + +M.changeChatPhoto = changeChatPhoto + +-- Changes chat draft message +-- @chat_id Chat identifier +-- @draft_message New draft message, nullable +local function changeChatDraftMessage(chat_id, reply_to_message_id, text, disable_web_page_preview, clear_draft, parse_mode, dl_cb, cmd) + local TextParseMode = getParseMode(parse_mode) + + tdcli_function ({ + ID = "ChangeChatDraftMessage", + chat_id_ = chat_id, + draft_message_ = { + ID = "DraftMessage", + reply_to_message_id_ = reply_to_message_id, + input_message_text_ = { + ID = "InputMessageText", + text_ = text, + disable_web_page_preview_ = disable_web_page_preview, + clear_draft_ = clear_draft, + entities_ = {}, + parse_mode_ = TextParseMode, + }, + }, + }, dl_cb, cmd) +end + +M.changeChatDraftMessage = changeChatDraftMessage + +-- Adds new member to chat. +-- Members can't be added to private or secret chats. +-- Member will not be added until chat state will be synchronized with the server. +-- Member will not be added if application is killed before it can send request to the server +-- @chat_id Chat identifier +-- @user_id Identifier of the user to add +-- @forward_limit Number of previous messages from chat to forward to new member, ignored for channel chats +local function addChatMember(chat_id, user_id, forward_limit, dl_cb, cmd) + tdcli_function ({ + ID = "AddChatMember", + chat_id_ = chat_id, + user_id_ = user_id, + forward_limit_ = forward_limit or 50 + }, dl_cb, cmd) +end + +M.addChatMember = addChatMember + +-- Adds many new members to the chat. +-- Currently, available only for channels. +-- Can't be used to join the channel. +-- Member will not be added until chat state will be synchronized with the server. +-- Member will not be added if application is killed before it can send request to the server +-- @chat_id Chat identifier +-- @user_ids Identifiers of the users to add +local function addChatMembers(chat_id, user_ids, dl_cb, cmd) + tdcli_function ({ + ID = "AddChatMembers", + chat_id_ = chat_id, + user_ids_ = user_ids -- vector + }, dl_cb, cmd) +end + +M.addChatMembers = addChatMembers + +-- Changes status of the chat member, need appropriate privileges. +-- In channel chats, user will be added to chat members if he is yet not a member and there is less than 200 members in the channel. +-- Status will not be changed until chat state will be synchronized with the server. +-- Status will not be changed if application is killed before it can send request to the server +-- @chat_id Chat identifier +-- @user_id Identifier of the user to edit status, bots can be editors in the channel chats +-- @status New status of the member in the chat +-- status = Creator|Editor|Moderator|Member|Left|Kicked +local function changeChatMemberStatus(chat_id, user_id, status, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeChatMemberStatus", + chat_id_ = chat_id, + user_id_ = user_id, + status_ = { + ID = "ChatMemberStatus" .. status + }, + }, dl_cb, cmd) +end + +M.changeChatMemberStatus = changeChatMemberStatus + +-- Returns information about one participant of the chat +-- @chat_id Chat identifier +-- @user_id User identifier +local function getChatMember(chat_id, user_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetChatMember", + chat_id_ = chat_id, + user_id_ = user_id + }, dl_cb, cmd) +end + +M.getChatMember = getChatMember + +-- Asynchronously downloads file from cloud. +-- Updates updateFileProgress will notify about download progress. +-- Update updateFile will notify about successful download +-- @file_id Identifier of file to download +local function downloadFile(file_id, dl_cb, cmd) + tdcli_function ({ + ID = "DownloadFile", + file_id_ = file_id + }, dl_cb, cmd) +end + +M.downloadFile = downloadFile + +-- Stops file downloading. +-- If file already downloaded do nothing. +-- @file_id Identifier of file to cancel download +local function cancelDownloadFile(file_id, dl_cb, cmd) + tdcli_function ({ + ID = "CancelDownloadFile", + file_id_ = file_id + }, dl_cb, cmd) +end + +M.cancelDownloadFile = cancelDownloadFile + +-- Next part of a file was generated +-- @generation_id Identifier of the generation process +-- @ready Number of bytes already generated. Negative number means that generation has failed and should be terminated +local function setFileGenerationProgress(generation_id, ready, dl_cb, cmd) + tdcli_function ({ + ID = "SetFileGenerationProgress", + generation_id_ = generation_id, + ready_ = ready + }, dl_cb, cmd) +end + +M.setFileGenerationProgress = setFileGenerationProgress + +-- Finishes file generation +-- @generation_id Identifier of the generation process +local function finishFileGeneration(generation_id, dl_cb, cmd) + tdcli_function ({ + ID = "FinishFileGeneration", + generation_id_ = generation_id + }, dl_cb, cmd) +end + +M.finishFileGeneration = finishFileGeneration + +-- Generates new chat invite link, previously generated link is revoked. +-- Available for group and channel chats. +-- Only creator of the chat can export chat invite link +-- @chat_id Chat identifier +local function exportChatInviteLink(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "ExportChatInviteLink", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.exportChatInviteLink = exportChatInviteLink + +-- Checks chat invite link for validness and returns information about the corresponding chat +-- @invite_link Invite link to check. Should begin with "https://telegram.me/joinchat/" +local function checkChatInviteLink(link, dl_cb, cmd) + tdcli_function ({ + ID = "CheckChatInviteLink", + invite_link_ = link + }, dl_cb, cmd) +end + +M.checkChatInviteLink = checkChatInviteLink + +-- Imports chat invite link, adds current user to a chat if possible. +-- Member will not be added until chat state will be synchronized with the server. +-- Member will not be added if application is killed before it can send request to the server +-- @invite_link Invite link to import. Should begin with "https://telegram.me/joinchat/" +local function importChatInviteLink(invite_link, dl_cb, cmd) + tdcli_function ({ + ID = "ImportChatInviteLink", + invite_link_ = invite_link + }, dl_cb, cmd) +end + +M.importChatInviteLink = importChatInviteLink + +-- Adds user to black list +-- @user_id User identifier +local function blockUser(user_id, dl_cb, cmd) + tdcli_function ({ + ID = "BlockUser", + user_id_ = user_id + }, dl_cb, cmd) +end + +M.blockUser = blockUser + +-- Removes user from black list +-- @user_id User identifier +local function unblockUser(user_id, dl_cb, cmd) + tdcli_function ({ + ID = "UnblockUser", + user_id_ = user_id + }, dl_cb, cmd) +end + +M.unblockUser = unblockUser + +-- Returns users blocked by the current user +-- @offset Number of users to skip in result, must be non-negative +-- @limit Maximum number of users to return, can't be greater than 100 +local function getBlockedUsers(offset, limit, dl_cb, cmd) + tdcli_function ({ + ID = "GetBlockedUsers", + offset_ = offset, + limit_ = limit + }, dl_cb, cmd) +end + +M.getBlockedUsers = getBlockedUsers + +-- Adds new contacts/edits existing contacts, contacts user identifiers are ignored. +-- Returns list of corresponding users in the same order as input contacts. +-- If contact doesn't registered in Telegram, user with id == 0 will be returned +-- @contacts List of contacts to import/edit +local function importContacts(phone_number, first_name, last_name, user_id, dl_cb, cmd) + tdcli_function ({ + ID = "ImportContacts", + contacts_ = {[0] = { + phone_number_ = tostring(phone_number), + first_name_ = tostring(first_name), + last_name_ = tostring(last_name), + user_id_ = user_id + }, + }, + }, dl_cb, cmd) +end + +M.importContacts = importContacts + +-- Searches for specified query in the first name, last name and username of the known user contacts +-- @query Query to search for, can be empty to return all contacts +-- @limit Maximum number of users to be returned +local function searchContacts(query, limit, dl_cb, cmd) + tdcli_function ({ + ID = "SearchContacts", + query_ = query, + limit_ = limit + }, dl_cb, cmd) +end + +M.searchContacts = searchContacts + +-- Deletes users from contacts list +-- @user_ids Identifiers of users to be deleted +local function deleteContacts(user_ids, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteContacts", + user_ids_ = user_ids -- vector + }, dl_cb, cmd) +end + +M.deleteContacts = deleteContacts + +-- Returns profile photos of the user. +-- Result of this query can't be invalidated, so it must be used with care +-- @user_id User identifier +-- @offset Photos to skip, must be non-negative +-- @limit Maximum number of photos to be returned, can't be greater than 100 +local function getUserProfilePhotos(user_id, offset, limit, dl_cb, cmd) + tdcli_function ({ + ID = "GetUserProfilePhotos", + user_id_ = user_id, + offset_ = offset, + limit_ = limit + }, dl_cb, cmd) +end + +M.getUserProfilePhotos = getUserProfilePhotos + +-- Returns stickers corresponding to given emoji +-- @emoji String representation of emoji. If empty, returns all known stickers +local function getStickers(emoji, dl_cb, cmd) + tdcli_function ({ + ID = "GetStickers", + emoji_ = emoji + }, dl_cb, cmd) +end + +M.getStickers = getStickers + +-- Returns list of installed sticker sets without archived sticker sets +-- @is_masks Pass true to return masks, pass false to return stickers +local function getStickerSets(is_masks, dl_cb, cmd) + tdcli_function ({ + ID = "GetStickerSets", + is_masks_ = is_masks + }, dl_cb, cmd) +end + +M.getStickerSets = getStickerSets + +-- Returns list of archived sticker sets +-- @is_masks Pass true to return masks, pass false to return stickers +-- @offset_sticker_set_id Identifier of the sticker set from which return the result +-- @limit Maximum number of sticker sets to return +local function getArchivedStickerSets(is_masks, offset_sticker_set_id, limit, dl_cb, cmd) + tdcli_function ({ + ID = "GetArchivedStickerSets", + is_masks_ = is_masks, + offset_sticker_set_id_ = offset_sticker_set_id, + limit_ = limit + }, dl_cb, cmd) +end + +M.getArchivedStickerSets = getArchivedStickerSets + +-- Returns list of trending sticker sets +local function getTrendingStickerSets(dl_cb, cmd) + tdcli_function ({ + ID = "GetTrendingStickerSets" + }, dl_cb, cmd) +end + +M.getTrendingStickerSets = getTrendingStickerSets + +-- Returns list of sticker sets attached to a file, currently only photos and videos can have attached sticker sets +-- @file_id File identifier +local function getAttachedStickerSets(file_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetAttachedStickerSets", + file_id_ = file_id + }, dl_cb, cmd) +end + +M.getAttachedStickerSets = getAttachedStickerSets + +-- Returns information about sticker set by its identifier +-- @set_id Identifier of the sticker set +local function getStickerSet(set_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetStickerSet", + set_id_ = set_id + }, dl_cb, cmd) +end + +M.getStickerSet = getStickerSet + +-- Searches sticker set by its short name +-- @name Name of the sticker set +local function searchStickerSet(name, dl_cb, cmd) + tdcli_function ({ + ID = "SearchStickerSet", + name_ = name + }, dl_cb, cmd) +end + +M.searchStickerSet = searchStickerSet + +-- Installs/uninstalls or enables/archives sticker set. +-- Official sticker set can't be uninstalled, but it can be archived +-- @set_id Identifier of the sticker set +-- @is_installed New value of is_installed +-- @is_archived New value of is_archived +local function updateStickerSet(set_id, is_installed, is_archived, dl_cb, cmd) + tdcli_function ({ + ID = "UpdateStickerSet", + set_id_ = set_id, + is_installed_ = is_installed, + is_archived_ = is_archived + }, dl_cb, cmd) +end + +M.updateStickerSet = updateStickerSet + +-- Trending sticker sets are viewed by the user +-- @sticker_set_ids Identifiers of viewed trending sticker sets +local function viewTrendingStickerSets(sticker_set_ids, dl_cb, cmd) + tdcli_function ({ + ID = "ViewTrendingStickerSets", + sticker_set_ids_ = sticker_set_ids -- vector + }, dl_cb, cmd) +end + +M.viewTrendingStickerSets = viewTrendingStickerSets + +-- Changes the order of installed sticker sets +-- @is_masks Pass true to change masks order, pass false to change stickers order +-- @sticker_set_ids Identifiers of installed sticker sets in the new right order +local function reorderStickerSets(is_masks, sticker_set_ids, dl_cb, cmd) + tdcli_function ({ + ID = "ReorderStickerSets", + is_masks_ = is_masks, + sticker_set_ids_ = sticker_set_ids -- vector + }, dl_cb, cmd) +end + +M.reorderStickerSets = reorderStickerSets + +-- Returns list of recently used stickers +-- @is_attached Pass true to return stickers and masks recently attached to photo or video files, pass false to return recently sent stickers +local function getRecentStickers(is_attached, dl_cb, cmd) + tdcli_function ({ + ID = "GetRecentStickers", + is_attached_ = is_attached + }, dl_cb, cmd) +end + +M.getRecentStickers = getRecentStickers + +-- Manually adds new sticker to the list of recently used stickers. +-- New sticker is added to the beginning of the list. +-- If the sticker is already in the list, at first it is removed from the list +-- @is_attached Pass true to add the sticker to the list of stickers recently attached to photo or video files, pass false to add the sticker to the list of recently sent stickers +-- @sticker Sticker file to add +local function addRecentSticker(is_attached, sticker, dl_cb, cmd) + tdcli_function ({ + ID = "AddRecentSticker", + is_attached_ = is_attached, + sticker_ = getInputFile(sticker) + }, dl_cb, cmd) +end + +M.addRecentSticker = addRecentSticker + +-- Removes a sticker from the list of recently used stickers +-- @is_attached Pass true to remove the sticker from the list of stickers recently attached to photo or video files, pass false to remove the sticker from the list of recently sent stickers +-- @sticker Sticker file to delete +local function deleteRecentSticker(is_attached, sticker, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteRecentSticker", + is_attached_ = is_attached, + sticker_ = getInputFile(sticker) + }, dl_cb, cmd) +end + +M.deleteRecentSticker = deleteRecentSticker + +-- Clears list of recently used stickers +-- @is_attached Pass true to clear list of stickers recently attached to photo or video files, pass false to clear the list of recently sent stickers +local function clearRecentStickers(is_attached, dl_cb, cmd) + tdcli_function ({ + ID = "ClearRecentStickers", + is_attached_ = is_attached + }, dl_cb, cmd) +end + +M.clearRecentStickers = clearRecentStickers + +-- Returns emojis corresponding to a sticker +-- @sticker Sticker file identifier +local function getStickerEmojis(sticker, dl_cb, cmd) + tdcli_function ({ + ID = "GetStickerEmojis", + sticker_ = getInputFile(sticker) + }, dl_cb, cmd) +end + +M.getStickerEmojis = getStickerEmojis + +-- Returns saved animations +local function getSavedAnimations(dl_cb, cmd) + tdcli_function ({ + ID = "GetSavedAnimations", + }, dl_cb, cmd) +end + +M.getSavedAnimations = getSavedAnimations + +-- Manually adds new animation to the list of saved animations. +-- New animation is added to the beginning of the list. +-- If the animation is already in the list, at first it is removed from the list. +-- Only non-secret video animations with MIME type "video/mp4" can be added to the list +-- @animation Animation file to add. Only known to server animations (i. e. successfully sent via message) can be added to the list +local function addSavedAnimation(animation, dl_cb, cmd) + tdcli_function ({ + ID = "AddSavedAnimation", + animation_ = getInputFile(animation) + }, dl_cb, cmd) +end + +M.addSavedAnimation = addSavedAnimation + +-- Removes animation from the list of saved animations +-- @animation Animation file to delete +local function deleteSavedAnimation(animation, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteSavedAnimation", + animation_ = getInputFile(animation) + }, dl_cb, cmd) +end + +M.deleteSavedAnimation = deleteSavedAnimation + +-- Returns up to 20 recently used inline bots in the order of the last usage +local function getRecentInlineBots(dl_cb, cmd) + tdcli_function ({ + ID = "GetRecentInlineBots", + }, dl_cb, cmd) +end + +M.getRecentInlineBots = getRecentInlineBots + +-- Get web page preview by text of the message. +-- Do not call this function to often +-- @message_text Message text +local function getWebPagePreview(message_text, dl_cb, cmd) + tdcli_function ({ + ID = "GetWebPagePreview", + message_text_ = message_text + }, dl_cb, cmd) +end + +M.getWebPagePreview = getWebPagePreview + +-- Returns notification settings for a given scope +-- @scope Scope to return information about notification settings +-- scope = Chat(chat_id)|PrivateChats|GroupChats|AllChats| +local function getNotificationSettings(scope, chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetNotificationSettings", + scope_ = { + ID = 'NotificationSettingsFor' .. scope, + chat_id_ = chat_id or nil + }, + }, dl_cb, cmd) +end + +M.getNotificationSettings = getNotificationSettings + +-- Changes notification settings for a given scope +-- @scope Scope to change notification settings +-- @notification_settings New notification settings for given scope +-- scope = Chat(chat_id)|PrivateChats|GroupChats|AllChats| +local function setNotificationSettings(scope, chat_id, mute_for, show_preview, dl_cb, cmd) + tdcli_function ({ + ID = "SetNotificationSettings", + scope_ = { + ID = 'NotificationSettingsFor' .. scope, + chat_id_ = chat_id or nil + }, + notification_settings_ = { + ID = "NotificationSettings", + mute_for_ = mute_for, + sound_ = "default", + show_preview_ = show_preview + } + }, dl_cb, cmd) +end + +M.setNotificationSettings = setNotificationSettings + +-- Resets all notification settings to the default value. +-- By default the only muted chats are supergroups, sound is set to 'default' and message previews are showed +local function resetAllNotificationSettings(dl_cb, cmd) + tdcli_function ({ + ID = "ResetAllNotificationSettings" + }, dl_cb, cmd) +end + +M.resetAllNotificationSettings = resetAllNotificationSettings + +-- Uploads new profile photo for logged in user. +-- Photo will not change until change will be synchronized with the server. +-- Photo will not be changed if application is killed before it can send request to the server. +-- If something changes, updateUser will be sent +-- @photo_path Path to new profile photo +local function setProfilePhoto(photo_path, dl_cb, cmd) + tdcli_function ({ + ID = "SetProfilePhoto", + photo_path_ = photo_path + }, dl_cb, cmd) +end + +M.setProfilePhoto = setProfilePhoto + +-- Deletes profile photo. +-- If something changes, updateUser will be sent +-- @profile_photo_id Identifier of profile photo to delete +local function deleteProfilePhoto(profile_photo_id, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteProfilePhoto", + profile_photo_id_ = profile_photo_id + }, dl_cb, cmd) +end + +M.deleteProfilePhoto = deleteProfilePhoto + +-- Changes first and last names of logged in user. +-- If something changes, updateUser will be sent +-- @first_name New value of user first name, 1-255 characters +-- @last_name New value of optional user last name, 0-255 characters +local function changeName(first_name, last_name, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeName", + first_name_ = first_name, + last_name_ = last_name + }, dl_cb, cmd) +end + +M.changeName = changeName + +-- Changes about information of logged in user +-- @about New value of userFull.about, 0-255 characters +local function changeAbout(about, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeAbout", + about_ = about + }, dl_cb, cmd) +end + +M.changeAbout = changeAbout + +-- Changes username of logged in user. +-- If something changes, updateUser will be sent +-- @username New value of username. Use empty string to remove username +local function changeUsername(username, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeUsername", + username_ = username + }, dl_cb, cmd) +end + +M.changeUsername = changeUsername + +-- Changes user's phone number and sends authentication code to the new user's phone number. +-- Returns authStateWaitCode with information about sent code on success +-- @phone_number New user's phone number in any reasonable format +-- @allow_flash_call Pass True, if code can be sent via flash call to the specified phone number +-- @is_current_phone_number Pass true, if the phone number is used on the current device. Ignored if allow_flash_call is False +local function changePhoneNumber(phone_number, allow_flash_call, is_current_phone_number, dl_cb, cmd) + tdcli_function ({ + ID = "ChangePhoneNumber", + phone_number_ = phone_number, + allow_flash_call_ = allow_flash_call, + is_current_phone_number_ = is_current_phone_number + }, dl_cb, cmd) +end + +M.changePhoneNumber = changePhoneNumber + +-- Resends authentication code sent to change user's phone number. +-- Works only if in previously received authStateWaitCode next_code_type was not null. +-- Returns authStateWaitCode on success +local function resendChangePhoneNumberCode(dl_cb, cmd) + tdcli_function ({ + ID = "ResendChangePhoneNumberCode", + }, dl_cb, cmd) +end + +M.resendChangePhoneNumberCode = resendChangePhoneNumberCode + +-- Checks authentication code sent to change user's phone number. +-- Returns authStateOk on success +-- @code Verification code from SMS, voice call or flash call +local function checkChangePhoneNumberCode(code, dl_cb, cmd) + tdcli_function ({ + ID = "CheckChangePhoneNumberCode", + code_ = code + }, dl_cb, cmd) +end + +M.checkChangePhoneNumberCode = checkChangePhoneNumberCode + +-- Returns all active sessions of logged in user +local function getActiveSessions(dl_cb, cmd) + tdcli_function ({ + ID = "GetActiveSessions", + }, dl_cb, cmd) +end + +M.getActiveSessions = getActiveSessions + +-- Terminates another session of logged in user +-- @session_id Session identifier +local function terminateSession(session_id, dl_cb, cmd) + tdcli_function ({ + ID = "TerminateSession", + session_id_ = session_id + }, dl_cb, cmd) +end + +M.terminateSession = terminateSession + +-- Terminates all other sessions of logged in user +local function terminateAllOtherSessions(dl_cb, cmd) + tdcli_function ({ + ID = "TerminateAllOtherSessions", + }, dl_cb, cmd) +end + +M.terminateAllOtherSessions = terminateAllOtherSessions + +-- Gives or revokes all members of the group editor rights. +-- Needs creator privileges in the group +-- @group_id Identifier of the group +-- @anyone_can_edit New value of anyone_can_edit +local function toggleGroupEditors(group_id, anyone_can_edit, dl_cb, cmd) + tdcli_function ({ + ID = "ToggleGroupEditors", + group_id_ = getChatId(group_id).ID, + anyone_can_edit_ = anyone_can_edit + }, dl_cb, cmd) +end + +M.toggleGroupEditors = toggleGroupEditors + +-- Changes username of the channel. +-- Needs creator privileges in the channel +-- @channel_id Identifier of the channel +-- @username New value of username. Use empty string to remove username +local function changeChannelUsername(channel_id, username, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeChannelUsername", + channel_id_ = getChatId(channel_id).ID, + username_ = username + }, dl_cb, cmd) +end + +M.changeChannelUsername = changeChannelUsername + +-- Gives or revokes right to invite new members to all current members of the channel. +-- Needs creator privileges in the channel. +-- Available only for supergroups +-- @channel_id Identifier of the channel +-- @anyone_can_invite New value of anyone_can_invite +local function toggleChannelInvites(channel_id, anyone_can_invite, dl_cb, cmd) + tdcli_function ({ + ID = "ToggleChannelInvites", + channel_id_ = getChatId(channel_id).ID, + anyone_can_invite_ = anyone_can_invite + }, dl_cb, cmd) +end + +M.toggleChannelInvites = toggleChannelInvites + +-- Enables or disables sender signature on sent messages in the channel. +-- Needs creator privileges in the channel. +-- Not available for supergroups +-- @channel_id Identifier of the channel +-- @sign_messages New value of sign_messages +local function toggleChannelSignMessages(channel_id, sign_messages, dl_cb, cmd) + tdcli_function ({ + ID = "ToggleChannelSignMessages", + channel_id_ = getChatId(channel_id).ID, + sign_messages_ = sign_messages + }, dl_cb, cmd) +end + +M.toggleChannelSignMessages = toggleChannelSignMessages + +-- Changes information about the channel. +-- Needs creator privileges in the broadcast channel or editor privileges in the supergroup channel +-- @channel_id Identifier of the channel +-- @about New value of about, 0-255 characters +local function changeChannelAbout(channel_id, about, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeChannelAbout", + channel_id_ = getChatId(channel_id).ID, + about_ = about + }, dl_cb, cmd) +end + +M.changeChannelAbout = changeChannelAbout + +-- Pins a message in a supergroup channel chat. +-- Needs editor privileges in the channel +-- @channel_id Identifier of the channel +-- @message_id Identifier of the new pinned message +-- @disable_notification True, if there should be no notification about the pinned message +local function pinChannelMessage(channel_id, message_id, disable_notification, dl_cb, cmd) + tdcli_function ({ + ID = "PinChannelMessage", + channel_id_ = getChatId(channel_id).ID, + message_id_ = message_id, + disable_notification_ = disable_notification + }, dl_cb, cmd) +end + +M.pinChannelMessage = pinChannelMessage + +-- Removes pinned message in the supergroup channel. +-- Needs editor privileges in the channel +-- @channel_id Identifier of the channel +local function unpinChannelMessage(channel_id, dl_cb, cmd) + tdcli_function ({ + ID = "UnpinChannelMessage", + channel_id_ = getChatId(channel_id).ID + }, dl_cb, cmd) +end + +M.unpinChannelMessage = unpinChannelMessage + +-- Reports some supergroup channel messages from a user as spam messages +-- @channel_id Channel identifier +-- @user_id User identifier +-- @message_ids Identifiers of messages sent in the supergroup by the user, the list should be non-empty +local function reportChannelSpam(channel_id, user_id, message_ids, dl_cb, cmd) + tdcli_function ({ + ID = "ReportChannelSpam", + channel_id_ = getChatId(channel_id).ID, + user_id_ = user_id, + message_ids_ = message_ids -- vector + }, dl_cb, cmd) +end + +M.reportChannelSpam = reportChannelSpam + +-- Returns information about channel members or kicked from channel users. +-- Can be used only if channel_full->can_get_members == true +-- @channel_id Identifier of the channel +-- @filter Kind of channel users to return, defaults to channelMembersRecent +-- @offset Number of channel users to skip +-- @limit Maximum number of users be returned, can't be greater than 200 +-- filter = Recent|Administrators|Kicked|Bots +local function getChannelMembers(channel_id, offset, filter, limit, dl_cb, cmd) + if not limit or limit > 200 then + limit = 200 + end + + tdcli_function ({ + ID = "GetChannelMembers", + channel_id_ = getChatId(channel_id).ID, + filter_ = { + ID = "ChannelMembers" .. filter + }, + offset_ = offset, + limit_ = limit + }, dl_cb, cmd) +end + +M.getChannelMembers = getChannelMembers + +-- Deletes channel along with all messages in corresponding chat. +-- Releases channel username and removes all members. +-- Needs creator privileges in the channel. +-- Channels with more than 1000 members can't be deleted +-- @channel_id Identifier of the channel +local function deleteChannel(channel_id, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteChannel", + channel_id_ = getChatId(channel_id).ID + }, dl_cb, cmd) +end + +M.deleteChannel = deleteChannel + +-- Returns list of created public channels +local function getCreatedPublicChannels(dl_cb, cmd) + tdcli_function ({ + ID = "GetCreatedPublicChannels" + }, dl_cb, cmd) +end + +M.getCreatedPublicChannels = getCreatedPublicChannels + +-- Closes secret chat +-- @secret_chat_id Secret chat identifier +local function closeSecretChat(secret_chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "CloseSecretChat", + secret_chat_id_ = secret_chat_id + }, dl_cb, cmd) +end + +M.closeSecretChat = closeSecretChat + +-- Returns user that can be contacted to get support +local function getSupportUser(dl_cb, cmd) + tdcli_function ({ + ID = "GetSupportUser", + }, dl_cb, cmd) +end + +M.getSupportUser = getSupportUser + +-- Returns background wallpapers +local function getWallpapers(dl_cb, cmd) + tdcli_function ({ + ID = "GetWallpapers", + }, dl_cb, cmd) +end + +M.getWallpapers = getWallpapers + +-- Registers current used device for receiving push notifications +-- @device_token Device token +-- device_token = apns|gcm|mpns|simplePush|ubuntuPhone|blackberry +local function registerDevice(device_token, token, device_token_set, dl_cb, cmd) + local dToken = {ID = device_token .. 'DeviceToken', token_ = token} + + if device_token_set then + dToken = {ID = "DeviceTokenSet", token_ = device_token_set} -- tokens:vector<DeviceToken> + end + + tdcli_function ({ + ID = "RegisterDevice", + device_token_ = dToken + }, dl_cb, cmd) +end + +M.registerDevice = registerDevice + +-- Returns list of used device tokens +local function getDeviceTokens(dl_cb, cmd) + tdcli_function ({ + ID = "GetDeviceTokens", + }, dl_cb, cmd) +end + +M.getDeviceTokens = getDeviceTokens + +-- Changes privacy settings +-- @key Privacy key +-- @rules New privacy rules +-- @privacyKeyUserStatus Privacy key for managing visibility of the user status +-- @privacyKeyChatInvite Privacy key for managing ability of invitation of the user to chats +-- @privacyRuleAllowAll Rule to allow all users +-- @privacyRuleAllowContacts Rule to allow all user contacts +-- @privacyRuleAllowUsers Rule to allow specified users +-- @user_ids User identifiers +-- @privacyRuleDisallowAll Rule to disallow all users +-- @privacyRuleDisallowContacts Rule to disallow all user contacts +-- @privacyRuleDisallowUsers Rule to disallow all specified users +-- key = UserStatus|ChatInvite +-- rules = AllowAll|AllowContacts|AllowUsers(user_ids)|DisallowAll|DisallowContacts|DisallowUsers(user_ids) +local function setPrivacy(key, rule, allowed_user_ids, disallowed_user_ids, dl_cb, cmd) + local rules = {[0] = {ID = 'PrivacyRule' .. rule}} + + if allowed_user_ids then + rules = { + { + ID = 'PrivacyRule' .. rule + }, + [0] = { + ID = "PrivacyRuleAllowUsers", + user_ids_ = allowed_user_ids -- vector + }, + } + end + if disallowed_user_ids then + rules = { + { + ID = 'PrivacyRule' .. rule + }, + [0] = { + ID = "PrivacyRuleDisallowUsers", + user_ids_ = disallowed_user_ids -- vector + }, + } + end + if allowed_user_ids and disallowed_user_ids then + rules = { + { + ID = 'PrivacyRule' .. rule + }, + { + ID = "PrivacyRuleAllowUsers", + user_ids_ = allowed_user_ids + }, + [0] = { + ID = "PrivacyRuleDisallowUsers", + user_ids_ = disallowed_user_ids + }, + } + end + tdcli_function ({ + ID = "SetPrivacy", + key_ = { + ID = 'PrivacyKey' .. key + }, + rules_ = { + ID = "PrivacyRules", + rules_ = rules + }, + }, dl_cb, cmd) +end + +M.setPrivacy = setPrivacy + +-- Returns current privacy settings +-- @key Privacy key +-- key = UserStatus|ChatInvite +local function getPrivacy(key, dl_cb, cmd) + tdcli_function ({ + ID = "GetPrivacy", + key_ = { + ID = "PrivacyKey" .. key + }, + }, dl_cb, cmd) +end + +M.getPrivacy = getPrivacy + +-- Returns value of an option by its name. +-- See list of available options on https://core.telegram.org/tdlib/options +-- @name Name of the option +local function getOption(name, dl_cb, cmd) + tdcli_function ({ + ID = "GetOption", + name_ = name + }, dl_cb, cmd) +end + +M.getOption = getOption + +-- Sets value of an option. +-- See list of available options on https://core.telegram.org/tdlib/options. +-- Only writable options can be set +-- @name Name of the option +-- @value New value of the option +local function setOption(name, option, value, dl_cb, cmd) + tdcli_function ({ + ID = "SetOption", + name_ = name, + value_ = { + ID = 'Option' .. option, + value_ = value + }, + }, dl_cb, cmd) +end + +M.setOption = setOption + +-- Changes period of inactivity, after which the account of currently logged in user will be automatically deleted +-- @ttl New account TTL +local function changeAccountTtl(days, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeAccountTtl", + ttl_ = { + ID = "AccountTtl", + days_ = days + }, + }, dl_cb, cmd) +end + +M.changeAccountTtl = changeAccountTtl + +-- Returns period of inactivity, after which the account of currently logged in user will be automatically deleted +local function getAccountTtl(dl_cb, cmd) + tdcli_function ({ + ID = "GetAccountTtl", + }, dl_cb, cmd) +end + +M.getAccountTtl = getAccountTtl + +-- Deletes the account of currently logged in user, deleting from the server all information associated with it. +-- Account's phone number can be used to create new account, but only once in two weeks +-- @reason Optional reason of account deletion +local function deleteAccount(reason, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteAccount", + reason_ = reason + }, dl_cb, cmd) +end + +M.deleteAccount = deleteAccount + +-- Returns current chat report spam state +-- @chat_id Chat identifier +local function getChatReportSpamState(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetChatReportSpamState", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.getChatReportSpamState = getChatReportSpamState + +-- Reports chat as a spam chat or as not a spam chat. +-- Can be used only if ChatReportSpamState.can_report_spam is true. +-- After this request ChatReportSpamState.can_report_spam became false forever +-- @chat_id Chat identifier +-- @is_spam_chat If true, chat will be reported as a spam chat, otherwise it will be marked as not a spam chat +local function changeChatReportSpamState(chat_id, is_spam_chat, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeChatReportSpamState", + chat_id_ = chat_id, + is_spam_chat_ = is_spam_chat + }, dl_cb, cmd) +end + +M.changeChatReportSpamState = changeChatReportSpamState + +-- Bots only. +-- Informs server about number of pending bot updates if they aren't processed for a long time +-- @pending_update_count Number of pending updates +-- @error_message Last error's message +local function setBotUpdatesStatus(pending_update_count, error_message, dl_cb, cmd) + tdcli_function ({ + ID = "SetBotUpdatesStatus", + pending_update_count_ = pending_update_count, + error_message_ = error_message + }, dl_cb, cmd) +end + +M.setBotUpdatesStatus = setBotUpdatesStatus + +-- Returns Ok after specified amount of the time passed +-- @seconds Number of seconds before that function returns +local function setAlarm(seconds, dl_cb, cmd) + tdcli_function ({ + ID = "SetAlarm", + seconds_ = seconds + }, dl_cb, cmd) +end + +M.setAlarm = setAlarm + +-- Text message +-- @text Text to send +-- @disable_notification Pass true, to disable notification about the message, doesn't works in secret chats +-- @from_background Pass true, if the message is sent from background +-- @reply_markup Bots only. Markup for replying to message +-- @disable_web_page_preview Pass true to disable rich preview for link in the message text +-- @clear_draft Pass true if chat draft message should be deleted +-- @entities Bold, Italic, Code, Pre, PreCode and TextUrl entities contained in the text. Non-bot users can't use TextUrl entities. Can't be used with non-null parse_mode +-- @parse_mode Text parse mode, nullable. Can't be used along with enitities +local function sendMessage(chat_id, reply_to_message_id, disable_notification, text, disable_web_page_preview, parse_mode) + local TextParseMode = getParseMode(parse_mode) + + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = 1, + reply_markup_ = nil, + input_message_content_ = { + ID = "InputMessageText", + text_ = text, + disable_web_page_preview_ = disable_web_page_preview, + clear_draft_ = 0, + entities_ = {}, + parse_mode_ = TextParseMode, + }, + }, dl_cb, nil) +end + +M.sendMessage = sendMessage + +-- Animation message +-- @animation Animation file to send +-- @thumb Animation thumb, if available +-- @width Width of the animation, may be replaced by the server +-- @height Height of the animation, may be replaced by the server +-- @caption Animation caption, 0-200 characters +local function sendAnimation(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, animation, width, height, caption, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageAnimation", + animation_ = getInputFile(animation), + --thumb_ = { + --ID = "InputThumb", + --path_ = path, + --width_ = width, + --height_ = height + --}, + width_ = width or '', + height_ = height or '', + caption_ = caption or '' + }, + }, dl_cb, cmd) +end + +M.sendAnimation = sendAnimation + +-- Audio message +-- @audio Audio file to send +-- @album_cover_thumb Thumb of the album's cover, if available +-- @duration Duration of audio in seconds, may be replaced by the server +-- @title Title of the audio, 0-64 characters, may be replaced by the server +-- @performer Performer of the audio, 0-64 characters, may be replaced by the server +-- @caption Audio caption, 0-200 characters +local function sendAudio(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, audio, duration, title, performer, caption, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageAudio", + audio_ = getInputFile(audio), + --album_cover_thumb_ = { + --ID = "InputThumb", + --path_ = path, + --width_ = width, + --height_ = height + --}, + duration_ = duration or '', + title_ = title or '', + performer_ = performer or '', + caption_ = caption or '' + }, + }, dl_cb, cmd) +end + +M.sendAudio = sendAudio + +-- Document message +-- @document Document to send +-- @thumb Document thumb, if available +-- @caption Document caption, 0-200 characters +local function sendDocument(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, document, caption, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageDocument", + document_ = getInputFile(document), + --thumb_ = { + --ID = "InputThumb", + --path_ = path, + --width_ = width, + --height_ = height + --}, + caption_ = caption + }, + }, dl_cb, cmd) +end + +M.sendDocument = sendDocument + +-- Photo message +-- @photo Photo to send +-- @caption Photo caption, 0-200 characters +local function sendPhoto(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, photo, caption, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessagePhoto", + photo_ = getInputFile(photo), + added_sticker_file_ids_ = {}, + width_ = 0, + height_ = 0, + caption_ = caption + }, + }, dl_cb, cmd) +end + +M.sendPhoto = sendPhoto + +-- Sticker message +-- @sticker Sticker to send +-- @thumb Sticker thumb, if available +local function sendSticker(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, sticker, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageSticker", + sticker_ = getInputFile(sticker), + --thumb_ = { + --ID = "InputThumb", + --path_ = path, + --width_ = width, + --height_ = height + --}, + }, + }, dl_cb, cmd) +end + +M.sendSticker = sendSticker + +-- Video message +-- @video Video to send +-- @thumb Video thumb, if available +-- @duration Duration of video in seconds +-- @width Video width +-- @height Video height +-- @caption Video caption, 0-200 characters +local function sendVideo(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, video, duration, width, height, caption, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageVideo", + video_ = getInputFile(video), + --thumb_ = { + --ID = "InputThumb", + --path_ = path, + --width_ = width, + --height_ = height + --}, + added_sticker_file_ids_ = {}, + duration_ = duration or '', + width_ = width or '', + height_ = height or '', + caption_ = caption or '' + }, + }, dl_cb, cmd) +end + +M.sendVideo = sendVideo + +-- Voice message +-- @voice Voice file to send +-- @duration Duration of voice in seconds +-- @waveform Waveform representation of the voice in 5-bit format +-- @caption Voice caption, 0-200 characters +local function sendVoice(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, voice, duration, waveform, caption, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageVoice", + voice_ = getInputFile(voice), + duration_ = duration or '', + waveform_ = waveform or '', + caption_ = caption or '' + }, + }, dl_cb, cmd) +end + +M.sendVoice = sendVoice + +-- Message with location +-- @latitude Latitude of location in degrees as defined by sender +-- @longitude Longitude of location in degrees as defined by sender +local function sendLocation(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, latitude, longitude, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageLocation", + location_ = { + ID = "Location", + latitude_ = latitude, + longitude_ = longitude + }, + }, + }, dl_cb, cmd) +end + +M.sendLocation = sendLocation + +-- Message with information about venue +-- @venue Venue to send +-- @latitude Latitude of location in degrees as defined by sender +-- @longitude Longitude of location in degrees as defined by sender +-- @title Venue name as defined by sender +-- @address Venue address as defined by sender +-- @provider Provider of venue database as defined by sender. Only "foursquare" need to be supported currently +-- @id Identifier of the venue in provider database as defined by sender +local function sendVenue(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, latitude, longitude, title, address, id, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageVenue", + venue_ = { + ID = "Venue", + location_ = { + ID = "Location", + latitude_ = latitude, + longitude_ = longitude + }, + title_ = title, + address_ = address, + provider_ = 'foursquare', + id_ = id + }, + }, + }, dl_cb, cmd) +end + +M.sendVenue = sendVenue + +-- User contact message +-- @contact Contact to send +-- @phone_number User's phone number +-- @first_name User first name, 1-255 characters +-- @last_name User last name +-- @user_id User identifier if known, 0 otherwise +local function sendContact(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, phone_number, first_name, last_name, user_id, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageContact", + contact_ = { + ID = "Contact", + phone_number_ = phone_number, + first_name_ = first_name, + last_name_ = last_name, + user_id_ = user_id + }, + }, + }, dl_cb, cmd) +end + +M.sendContact = sendContact + +-- Message with a game +-- @bot_user_id User identifier of a bot owned the game +-- @game_short_name Game short name +local function sendGame(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, bot_user_id, game_short_name, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageGame", + bot_user_id_ = bot_user_id, + game_short_name_ = game_short_name + }, + }, dl_cb, cmd) +end + +M.sendGame = sendGame + +-- Forwarded message +-- @from_chat_id Chat identifier of the message to forward +-- @message_id Identifier of the message to forward +local function sendForwarded(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, from_chat_id, message_id, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageForwarded", + from_chat_id_ = from_chat_id, + message_id_ = message_id + }, + }, dl_cb, cmd) +end + +M.sendForwarded = sendForwarded + +return M cli/tg/tgcli (Binary file not shown.) 0 comments on commit 3233fdf Comment on 3233fdf Leave a comment Comment Desktop version
ryan-leap / GreenMeansGoMutexDemoDemonstrates how to use a Mutex in PowerShell
songkick / Mega MutexDistributed mutex in Ruby using Memcache
Champ1604 / Botvar config = { name: 'KTN Bot', userid: function () { return toId(this.name); }, group: '@', join: true, rooms: ['lobby'], punishvals: { 1: 'warn', 2: 'mute', 3: 'hourmute', 4: 'roomban', 5: 'ban' }, privaterooms: ['staff'], hosting: {}, laddering: true, ladderPercentage: 70, debug: false }; /** * On server start, this sets up fake user connection for bot and uses a fake ip. * It gets a the fake user from the users list and modifies it properties. In addition, * it sets up rooms that bot will join and adding the bot user to Users list and * removing the fake user created which already filled its purpose * of easily filling in the gaps of all the user's property. */ function joinServer() { if (process.uptime() > 5) return; // to avoid running this function again when reloading var worker = new(require('./fake-process.js').FakeProcess)(); Users.socketConnect(worker.server, undefined, '1', '76.19.156.198'); for (var i in Users.users) { if (Users.users[i].connections[0].ip === '76.19.156.198') { var bot = Users.users[i]; bot.name = config.name; bot.named = true; bot.renamePending = config.name; bot.authenticated = true; bot.userid = config.userid(); bot.group = config.group; if (config.join === true) { for (var all in Rooms.rooms) { if (all != 'global') { bot.roomCount[all] = 1; } } Users.users[bot.userid] = bot; for (var allRoom in Rooms.rooms) { if (allRoom != 'global') { Rooms.rooms[allRoom].users[Users.users[bot.userid]] = Users.users[bot.userid]; } } } else { for (var index in config.rooms) { if (index != 'global') { bot.roomCount[joinRooms[index]] = 1; } } Users.users[bot.userid] = bot; for (var jIndex in config.rooms) { if (jIndex != 'global') { Rooms.rooms[jIndex].users[Users.users[bot.userid]] = Users.users[bot.userid]; } } } delete Users.users[i]; } } } const ACTION_COOLDOWN = 3 * 1000; const FLOOD_MESSAGE_NUM = 5; const FLOOD_PER_MSG_MIN = 500; // this is the minimum time between messages for legitimate spam. It's used to determine what "flooding" is caused by lag const FLOOD_MESSAGE_TIME = 6 * 1000; const MIN_CAPS_LENGTH = 18; const MIN_CAPS_PROPORTION = 0.8; var parse = { chatData: {}, processChatData: function (user, room, connection, message) { if (user.userid === config.userid() || !room.users[config.userid()]) return true; var cmds = this.processBotCommands(user, room, connection, message); if (cmds) return false; message = message.trim().replace(/ +/g, " "); // removes extra spaces so it doesn't trigger stretching this.updateSeen(user.userid, 'c', room.title); var time = Date.now(); if (!this.chatData[user]) this.chatData[user] = { zeroTol: 0, lastSeen: '', seenAt: time }; if (!this.chatData[user][room]) this.chatData[user][room] = { times: [], points: 0, lastAction: 0 }; this.chatData[user][room].times.push(time); var pointVal = 0; var muteMessage = ''; // moderation for flooding (more than x lines in y seconds) var isFlooding = (this.chatData[user][room].times.length >= FLOOD_MESSAGE_NUM && (time - this.chatData[user][room].times[this.chatData[user][room].times.length - FLOOD_MESSAGE_NUM]) < FLOOD_MESSAGE_TIME && (time - this.chatData[user][room].times[this.chatData[user][room].times.length - FLOOD_MESSAGE_NUM]) > (FLOOD_PER_MSG_MIN * FLOOD_MESSAGE_NUM)); if (isFlooding) { if (pointVal < 2) { pointVal = 2; muteMessage = ', flooding'; } } // moderation for caps (over x% of the letters in a line of y characters are capital) var capsMatch = message.replace(/[^A-Za-z]/g, '').match(/[A-Z]/g); if (capsMatch && toId(message).length > MIN_CAPS_LENGTH && (capsMatch.length >= Math.floor(toId(message).length * MIN_CAPS_PROPORTION))) { if (pointVal < 1) { pointVal = 1; muteMessage = ', caps'; } } // moderation for stretching (over x consecutive characters in the message are the same) var stretchMatch = message.toLowerCase().match(/(.)\1{7,}/g) || message.toLowerCase().match(/(..+)\1{4,}/g); // matches the same character (or group of characters) 8 (or 5) or more times in a row if (stretchMatch) { if (pointVal < 1) { pointVal = 1; muteMessage = ', stretching'; } } if (pointVal > 0 && !(time - this.chatData[user][room].lastAction < ACTION_COOLDOWN)) { var cmd = 'mute'; // defaults to the next punishment in config.punishVals instead of repeating the same action (so a second warn-worthy // offence would result in a mute instead of a warn, and the third an hourmute, etc) if (this.chatData[user][room].points >= pointVal && pointVal < 4) { this.chatData[user][room].points++; cmd = config.punishvals[this.chatData[user][room].points] || cmd; } else { // if the action hasn't been done before (is worth more points) it will be the one picked cmd = config.punishvals[pointVal] || cmd; this.chatData[user][room].points = pointVal; // next action will be one level higher than this one (in most cases) } if (config.privaterooms.indexOf(room) >= 0 && cmd === 'warn') cmd = 'mute'; // can't warn in private rooms // if the bot has % and not @, it will default to hourmuting as its highest level of punishment instead of roombanning if (this.chatData[user][room].points >= 4 && config.group === '%') cmd = 'hourmute'; if (this.chatData[user].zeroTol > 4) { // if zero tolerance users break a rule they get an instant roomban or hourmute muteMessage = ', zero tolerance user'; cmd = config.group !== '%' ? 'roomban' : 'hourmute'; } if (this.chatData[user][room].points >= 2) this.chatData[user].zeroTol++; // getting muted or higher increases your zero tolerance level (warns do not) this.chatData[user][room].lastAction = time; room.add('|c|' + user.group + user.name + '|' + message); CommandParser.parse(('/' + cmd + ' ' + user.userid + muteMessage), room, Users.get(config.name), Users.get(config.name).connections[0]); return false; } return true; }, updateSeen: function (user, type, detail) { user = toId(user); type = toId(type); if (type in {j: 1, l: 1, c: 1} && (config.rooms.indexOf(toId(detail)) === -1 || config.privaterooms.indexOf(toId(detail)) > -1)) return; var time = Date.now(); if (!this.chatData[user]) this.chatData[user] = { zeroTol: 0, lastSeen: '', seenAt: time }; if (!detail) return; var msg = ''; if (type in {j: 1, l: 1, c: 1}) { msg += (type === 'j' ? 'joining' : (type === 'l' ? 'leaving' : 'chatting in')) + ' ' + detail.trim() + '.'; } else if (type === 'n') { msg += 'changing nick to ' + ('+%@&#~'.indexOf(detail.trim().charAt(0)) === -1 ? detail.trim() : detail.trim().substr(1)) + '.'; } if (msg) { this.chatData[user].lastSeen = msg; this.chatData[user].seenAt = time; } }, processBotCommands: function (user, room, connection, message) { if (room.type !== 'chat' || message.charAt(0) !== '.') return; var cmd = '', target = '', spaceIndex = message.indexOf(' '), botDelay = (Math.floor(Math.random() * 6) * 1000), now = Date.now(); if (spaceIndex > 0) { cmd = message.substr(1, spaceIndex - 1); target = message.substr(spaceIndex + 1); } else { cmd = message.substr(1); target = ''; } cmd = cmd.toLowerCase(); if ((message.charAt(0) === '.' && Object.keys(Bot.commands).join(' ').toString().indexOf(cmd) >= 0 && message.substr(1) !== '') && !Bot.config.debug) { if ((now - user.lastBotCmd) * 0.001 < 30) { connection.sendTo(room, 'Please wait ' + Math.floor((30 - (now - user.lastBotCmd) * 0.001)) + ' seconds until the next command.'); return true; } user.lastBotCmd = now; } if (commands[cmd]) { var context = { sendReply: function (data) { setTimeout(function () { room.add('|c|' + config.group + config.name + '|' + data); }, botDelay); }, sendPm: function (data) { var message = '|pm|' + config.group + config.name + '|' + user.group + user.name + '|' + data; user.send(message); }, can: function (permission) { if (!user.can(permission)) { setTimeout(function () { connection.sendTo(room, '.' + cmd + ' - Access denied.'); }, botDelay); return false; } return true; }, parse: function (target) { CommandParser.parse(target, room, Users.get(Bot.config.name), Users.get(Bot.config.name).connections[0]); }, }; if (typeof commands[cmd] === 'function') { commands[cmd].call(context, target, room, user, connection, cmd, message); } } }, getTimeAgo: function (time) { time = Date.now() - time; time = Math.round(time / 1000); // rounds to nearest second var seconds = time % 60; var times = []; if (seconds) times.push(String(seconds) + (seconds === 1 ? ' second' : ' seconds')); var minutes, hours, days; if (time >= 60) { time = (time - seconds) / 60; // converts to minutes minutes = time % 60; if (minutes) times = [String(minutes) + (minutes === 1 ? ' minute' : ' minutes')].concat(times); if (time >= 60) { time = (time - minutes) / 60; // converts to hours hours = time % 24; if (hours) times = [String(hours) + (hours === 1 ? ' hour' : ' hours')].concat(times); if (time >= 24) { days = (time - hours) / 24; // you can probably guess this one if (days) times = [String(days) + (days === 1 ? ' day' : ' days')].concat(times); } } } if (!times.length) times.push('0 seconds'); return times.join(', '); } }; var commands = { guide: function (target, room, user) { var commands = Object.keys(Bot.commands); commands = commands.join(', ').toString(); this.sendReply('List of bot commands: ' + commands); }, say: function (target, room, user) { if (!this.can('say')) return; this.sendReply(target); }, tell: function (target, room, user) { if (!this.can('bottell')) return; var parts = target.split(','); if (parts.length < 2) return; this.parse('/tell ' + toId(parts[0]) + ', ' + Tools.escapeHTML(parts[1])); this.sendReply('Message sent to ' + parts[0] + '.'); }, penislength: function (target, room, user) { this.sendReply('8.5 inches from the base. Perv.'); }, seen: function (target, room, user, connection) { if (!target) return; if (!toId(target) || toId(target).length > 18) return connection.sendTo(room, 'Invalid username.'); if (!parse.chatData[toId(target)] || !parse.chatData[toId(target)].lastSeen) { return this.sendPm('The user ' + target.trim() + ' has never been seen chatting in rooms.'); } return this.sendPm(target.trim() + ' was last seen ' + parse.getTimeAgo(parse.chatData[toId(target)].seenAt) + ' ago, ' + parse.chatData[toId(target)].lastSeen); }, salt: function (target, room, user) { if (!global.salt) global.salt = 0; salt++; this.sendReply(salt + '% salty.'); }, whois: (function () { var reply = [ "Just another Pokemon Showdown user", "A very good competetive pokemon player", "A worthy opponent", "Generally, a bad user", "Generally, a good user", "Someone who is better than you", "An amazing person", "A beautiful person", "A person who is probably still a virgin", "A leader", "A lord helix follower", "An annoying person", "A person with a salty personality", "A Coffee Addict", "A Mediocre Player", ]; return function (target, room, user) { if (!target) return; var message = reply[Math.floor(Math.random() * reply.length)]; target = toId(target); if (target === 'creaturephil') message = 'An experienced **coder** for pokemon showdown. He has coded for over 5 servers such as kill the noise, moxie, aerdeith, nova, etc. Please follow him on github: https://github.com/CreaturePhil'; if (target === config.userid()) message = 'That\'s me.'; if (target === 'zarel') message = 'Pokemon Showdown Creator'; if (target === 'stevoduhhero') message = 'STEVO DUH GOD DAMN HERO! Respect him!'; if (target === 'rickycocaine') message = 'RICKY COCAAAAAAAINE'; this.sendReply(message); }; })(), helix: (function () { var reply = [ "Signs point to yes.", "Yes.", "Reply hazy, try again.", "Without a doubt.", "My sources say no.", "As I see it, yes.", "You may rely on it.", "Concentrate and ask again.", "Outlook not so good.", "It is decidedly so.", "Better not tell you now.", "Very doubtful.", "Yes - definitely.", "It is certain.", "Cannot predict now.", "Most likely.", "Ask again later.", "My reply is no.", "Outlook good.", "Don't count on it." ]; return function (target, room, user) { if (!target) return; var message = reply[Math.floor(Math.random() * reply.length)]; this.sendPm(message); }; })(), maketournament: function (target, room, user) { if (!this.can('maketournament')) return; if (Tournaments.tournaments[room.id]) return this.sendReply('A tournament is already running in the room.'); var parts = target.split(','), self = this, counter = 1; if (parts.length < 2 || Tools.getFormat(parts[0]).effectType !== 'Format' || !/[0-9]/.test(parts[1])) return this.sendPm('Correct Syntax: !maketournament [tier], [time/amount of players]'); if (parts[1].indexOf('minute') >= 0) { var time = Number(parts[1].split('minute')[0]); this.parse('/tour create ' + parts[0] + ', elimination'); this.sendReply('**You have ' + time + ' minute' + parts[1].split('minute')[1] + ' to join the tournament.**'); var loop = function () { setTimeout(function () { if (!Tournaments.tournaments[room.id]) return; if (counter === time) { if (Tournaments.tournaments[room.id].generator.users.size < 2) { self.parse('/tour end'); return self.sendReply('**The tournament was canceled because of lack of players.**'); } return self.parse('/tour start'); } if ((time - counter) === 1) { self.sendReply('**You have ' + (time - counter) + ' minute to sign up for the tournament.**'); } else { self.sendReply('**You have ' + (time - counter) + ' minutes to sign up for the tournament.**'); } counter++; if (!Tournaments.tournaments[room.id].isTournamentStarted) loop(); }, 1000 * 60); }; loop(); return; } if (Number(parts[1]) < 2) return; parts[1] = parts[1].replace(/[^0-9 ]+/g, ''); this.parse('/tour create ' + parts[0] + ', elimination'); this.sendReply('**The tournament will begin when ' + parts[1] + ' players join.**'); var playerLoop = function () { setTimeout(function () { if (!Tournaments.tournaments[room.id]) return; if (Tournaments.tournaments[room.id].generator.users.size === Number(parts[1])) { self.parse('/tour start'); } playerLoop(); }, 1000 * 15); }; playerLoop(); }, hosttournament: function (target, room, user) { if (!this.can('hosttournament')) return; if (target.toLowerCase() === 'end') { if (!Bot.config.hosting[room.id]) return this.sendPm('I\'m not hosting tournaments.'); Bot.config.hosting[room.id] = false; return this.sendReply('I will now stop hosting tournaments.'); } if (Bot.config.hosting[room.id]) return this.sendReply('I\'m already hosting tournaments.'); Bot.config.hosting[room.id] = true this.sendReply('**I will now be hosting tournaments.**'); var self = this, _room = room, _user = user; var poll = function () { if (!Bot.config.hosting[_room.id]) return; setTimeout(function () { if (Poll[_room.id].question) self.parse('/endpoll'); self.parse('/poll Tournament tier?, ' + Object.keys(Tools.data.Formats).filter(function (f) { return Tools.data.Formats[f].effectType === 'Format'; }).join(", ")); setTimeout(function () { self.parse('/endpoll'); Bot.commands.maketournament.call(self, (Poll[_room.id].topOption + ', 2 minute'), _room, _user); }, 1000 * 60 * 2); }, 1000 * 5); }; var loop = function () { setTimeout(function () { if (!Tournaments.tournaments[_room.id] && !Poll[_room.id].question) poll(); if (Bot.config.hosting[_room.id]) loop(); }, 1000 * 60); }; poll(); loop(); }, join: function (target, room, user, connection) { if (!user.can('kick')) return; if (!target || !Rooms.get(target.toLowerCase())) return; if (Rooms.get(target.toLowerCase()).users[Bot.config.name]) return this.sendPm('I\'m already in this room.'); Users.get(Bot.config.name).joinRoom(Rooms.get(target.toLowerCase())); var botDelay = (Math.floor(Math.random() * 6) * 1000) setTimeout(function() { connection.sendTo(room, Bot.config.name + ' has join ' + target + ' room.'); }, botDelay); }, leave: function (target, room, user, connection) { if (!user.can('kick')) return; if (!target || !Rooms.get(target.toLowerCase())) return; Users.get(Bot.config.name).leaveRoom(Rooms.get(target.toLowerCase())); var botDelay = (Math.floor(Math.random() * 6) * 1000) setTimeout(function() { connection.sendTo(room, Bot.config.name + ' has left ' + target + ' room.'); }, botDelay); }, rps: function (target, room, user) { if (!target) return; var options = ['rock', 'paper', 'scissors'], rng = options[Math.floor(Math.random() * options.length)], target = toId(target); if (rng === target) return this.sendReply('I chose ' + rng + '. The result is a tie!'); if (rng === options[0]) { if (target === options[1]) return this.sendReply('I chose ' + rng + '. ' + user.name + ' wins!'); if (target === options[2]) return this.sendReply('I chose ' + rng + '. I win and ' + user.name + ' loses!'); } if (rng === options[1]) { if (target === options[2]) return this.sendReply('I chose ' + rng + '. ' + user.name + ' wins!'); if (target === options[0]) return this.sendReply('I chose ' + rng + '. I win and ' + user.name + ' loses!'); } if (rng === options[2]) { if (target === options[0]) return this.sendReply('I chose ' + rng + '. ' + user.name + ' wins!'); if (target === options[1]) return this.sendReply('I chose ' + rng + '. I win and ' + user.name + ' loses!'); } }, }; exports.joinServer = joinServer; exports.config = config; exports.parse = parse; exports.commands = commands; // Battling AI exports.teams=new Object;var fs=require("fs");fs.readFile("./config/bot-teams.json",function(e,t){if(e)return;t=""+t;exports.teams=JSON.parse(t)});exports.addTeam=function(e,t){if(t&&t.length&&typeof t=="string"){if(!Bot.teams[e])Bot.teams[e]=new Array;Bot.teams[e].push(t);fs.writeFile("./config/bot-teams.json",JSON.stringify(Bot.teams))}};exports.randomTeam=function(e){if(e.split("random").length-1>0)return"";var t;if(Bot.teams[e])t=Bot.teams[e][Math.floor(Math.random()*Bot.teams[e].length)];if(!t)t="";return t};exports.booty={addBattle:function(e,t){Bot.booty.battles["battle-"+e.toLowerCase().replace(/[^a-z0-9]+/g,"")+"-"+(Rooms.global.lastBattle+1)]={booty:{user:Users.get(Bot.config.name),exposed:[{},{},{},{},{},{}]},opp:{user:t,exposed:[{},{},{},{},{},{}]}}},battles:new Object,check:function(){global.bootytimeout=setTimeout(function(){if(!Bot.booty.battles){Bot.booty.check();return}for(var e in Bot.booty.battles){if(Bot.booty.battles[e]){var t=Rooms.rooms[e];if(t){var n=t.battle;if(n){n=n.field;if(n[toId(Bot.config.name)])if(n[toId(Bot.config.name)].side)if(n[toId(Bot.config.name)].side.pokemon)if(n[toId(Bot.config.name)].side.pokemon[0].condition.charAt(0)=="0")Bot.booty.forceSwitch(e);if(n[toId(Bot.config.name)])if(n[toId(Bot.config.name)].forceSwitch)Bot.booty.forceSwitch(e)}}}}Bot.booty.check()},2e3)},forceSwitch:function(e){var t;if(Rooms.rooms[e])t=Rooms.rooms[e];if(!t)return;var n=Bot.booty.battles[t.id];var r=t.battle.field,i=r[toId(Bot.config.name)].side.pokemon;var s=i.length;if(!o){var o=new Array;for(var u=0;u<s;u++)o.push(u)}var a=Math.floor(Math.random()*s);while(a==1&&o.indexOf(a)==-1&&i[a].condition.charAt(0)=="0")a=Math.floor(Math.random()*s);t.decision(Users.get(toId(Bot.config.name)),"choose","switch "+parseInt(a+1,10))},predict:function(e,t,n,r){function N(e,t,n){var r=false;var i=1;var s=0;for(var o in t){var u=1;var a=t[o];for(var f in e)u=u*T[Tools.data.TypeChart[e[f]].damageTaken[a]];if(u>=2)r=true;i=i*u;if(s<u)s=u}if(n){if(n.total)return i;else if(n.best)return s}return r}function C(e,t){var n=e.baseStats;var r=0;for(var i in n)r+=n[i];var s=e.abilities;var o=e.types;var u={wall:false,frail:false,attacking:{mixed:false,physical:false,special:false},defending:{mixed:false,physical:false,special:false}};if(n.hp<100)u.frail=true;if((n.hp+n.def+n.spd)/r>.474)u.wall=true;var a=n.atk+n.spa;var f=n.atk/a;var l=n.spa/a;if(12.75>Math.abs(f-l)*100){u.attacking.mixed=true;u.attacking.physical=true;u.attacking.special=true}else{if(f>l)u.attacking.physical=true;if(l>f)u.attacking.special=true}var c=n.def+n.spd;var h=n.def/c;var p=n.spd/c;if(12.75>Math.abs(h-p)*100){if(n.def>=75)u.defending.physical=true;if(n.spd>=75)u.defending.special=true;if(n.def>=75&&n.spd>=75)u.defending.mixed=true}else{if(h>p)if(n.def>=75)u.defending.physical=true;if(p>h)if(n.spd>=75)u.defending.special=true}if(u.wall||u.tank)u.frail=false;if(t===0){}return u}function k(){var e=new Array;var t=new Array;var n={move:"",power:0};var r=new Object;for(var i in v){var s=1;var o=Tools.data.Movedex[toId(v[i])];var u=o.type;for(var i in E.types)s=s*T[Tools.data.TypeChart[E.types[i]].damageTaken[u]];var c=a[0].baseAbility;var h=a[0].item;if(c=="thickfat"&&(u=="Fire"||u=="Ice"))s=s*.5;if((h=="airballoon"||c=="levitate")&&u=="Ground")s=0;var p=1;if(w.types.indexOf(u)!=-1)p=1.5;var d=s*o.basePower*p;e.push(s);t.push(d);if(d>n.power)n={move:o.name,power:d,info:v[i]};if(o.category=="Status"){r[o.id]=v[i]}}var m,g;var y="";if(f[0].item.split("ite").length-1>0&&f[0].details.split("-mega").length-1==0)y=" mega";if(m&&!g){}else{}return"move "+n.move+y+"|"+l}function L(){return A()}function A(){function n(e,t){var n=0;if(e.bestmovepower>t)n++;if(e.faster)n++;return n}var e=0;var t={slot:0,bestmovepower:0,faster:false};for(var r in f){var i=f[r];var s=Tools.data.Pokedex[toId(i.details.split(",")[0])];if(i.condition.charAt(0)!="0"){e++;var o=new Array;for(var u in i.moves)o[u]=i.moves[u].replace(new RegExp("[0-9]","g"),"");var a=new Array;for(var u in o)a.push(Tools.data.Movedex[toId(o[u])].type);var l=false;if(s.baseStats.spe>E.baseStats.spe)l=true;var c=0;for(var h in o){var p=1;var d=Tools.data.Movedex[toId(o[h])];var v=d.type;for(var m in E.types)p=p*T[Tools.data.TypeChart[E.types[m]].damageTaken[v]];var g=1;if(s.types.indexOf(v)!=-1)g=1.5;var y=p*d.basePower*g;if(y>c)c=y}var b={slot:r,bestmovepower:c,faster:l};if(n(t,b.bestmovepower)<n(b,t.bestmovepower))t=b}}t.slot++;if(e==1||t.slot==1)k();return"switch "+t.slot}function O(){var e=false;var t=false;var n=E.baseStats.spe;var r=w.baseStats.spe;if(n>r)t=true;var i=N(w.types,E.types);var s=N(E.types,w.types);var o=new Array;for(var u in v)o.push(Tools.data.Movedex[toId(v[u].move)].type);var a=N(E.types,o);if(!(!t&&i&&a&&x.frail)){if(t&&S.frail)e=true;if(t&&i)e=true;if(i)e=true}if(x.wall&&S.wall)e=1;if(e===true){var f=L();if(f.replace(/^\D+/g,"")!=1)return f}else if(e==1)A();return k()}var i;var s={change:false};var o=Users.get(Bot.config.name);if(!t.battle.field||!o)return false;if(!t.battle.field[o.userid])return false;var u=t.battle.field,a=u[n.userid].side.pokemon,f=u[o.userid].side.pokemon;if(a[0].condition.charAt(0)=="0"&&f[0].condition.charAt(0)!="0")return false;if(f[0].condition.charAt(0)=="0")s.change=true;var l=u[n.userid].rqid;var c=Bot.booty.battles[t.id];c.turn=l;if(r=="team"){var h=f.length;var p=Math.floor(Math.random()*h);t.decision(o,"choose","team "+p+"|"+l);return false}if(!u[o.userid]){return false}if(!u[o.userid].active){return false}var d=u[o.userid].active[0].moves;var v=new Array;for(var m in d){var g=d[m];if(!g.disabled&&g.pp)v.push(g)}var y=a[0].details.split(",")[0];var b=f[0].details.split(",")[0];var w=Tools.data.Pokedex[toId(b)];var E=Tools.data.Pokedex[toId(y)];var S=C(w,0);var x=C(E);var T=[1,2,.5,0];switch(r){case"switch":case"move":case"choose":if(!s.change){var M=u[toId(Bot.config.name)].active;if(!M)M=false;else M=M[0].trapped;if(M){i=k()}else{i=O()}}else{i=A()}t.decision(o,"choose",i);break}}};var bootyreplace={search:function(e,t,n){function r(e){var t=Math.floor(Math.random()*100)+1;if(t>e)return false;return true}if(!Bot.config.laddering)return;if(r(Bot.config.ladderPercentage))return;if(!toId(e))return false;var i=toId(e);var s=true;var o=Tools.fastUnpackTeam(n.team);var u=TeamValidator.validateTeamSync(i,o);if(u&&u.length)s=false;if((e=="ou"||e.split("random").length-1>0)&&r(100)&&s){Bot.booty.addBattle(e,n);Rooms.global.startBattle(Users.get(Bot.config.name),n,e,true,Bot.randomTeam(e),n.team);Rooms.global.cancelSearch(n);return false}if(e){if(Config.pmmodchat){var a=n.group;if(Config.groupsranking.indexOf(a)<Config.groupsranking.indexOf(Config.pmmodchat)){var f=Config.groups[Config.pmmodchat].name||Config.pmmodchat;this.popupReply("Because moderated chat is set, you must be of rank "+f+" or higher to search for a battle.");return false}}Rooms.global.searchBattle(n,e);if(e=="ou"||e.split("random").length-1>0){Users.get(Bot.config.name).team=Bot.randomTeam(e);Bot.booty.addBattle(e,n);Users.get(Bot.config.name).prepBattle(e,"search",null,Rooms.global.finishSearchBattle.bind(Rooms.global,Users.get(Bot.config.name),e))}}else{Rooms.global.cancelSearch(n)}},challenge:function(e,t,n,r){e=this.splitTarget(e);var i=this.targetUser;if(!i||!i.connected){return this.popupReply("The user '"+this.targetUsername+"' was not found.")}if(i.blockChallenges&&!n.can("bypassblocks",i)){return this.popupReply("The user '"+this.targetUsername+"' is not accepting challenges right now.")}if(Config.pmmodchat){var s=n.group;if(Config.groupsranking.indexOf(s)<Config.groupsranking.indexOf(Config.pmmodchat)){var o=Config.groups[Config.pmmodchat].name||Config.pmmodchat;this.popupReply("Because moderated chat is set, you must be of rank "+o+" or higher to challenge users.");return false}}n.prepBattle(e,"challenge",r,function(t){if(t)n.makeChallenge(i,e)});if(this.targetUsername==Bot.config.name){if(!global.bootytimeout)Bot.booty.check();var u=Users.get(Bot.config.name);u.prepBattle(e,"challenge",u.connections[0],function(e){if(e)u.acceptChallengeFrom(n.userid)});Bot.booty.addBattle(e,n);if(e.split("random").length-1>0){}else{if(n.team!=undefined&&n.team!="")Bot.addTeam(e,n.team);var a=Bot.randomTeam(e);if(a==""||!a){a=n.team;if(a==undefined||a=="")a=""}u.team=a}}},move:function(e,t,n){if(!t.decision)return this.sendReply("You can only do this in battle rooms.");t.decision(n,"choose","move "+e);if(Bot.booty.battles[t.id])Bot.booty.predict(e,t,n,"move")},sw:"switch","switch":function(e,t,n){if(!t.decision)return this.sendReply("You can only do this in battle rooms.");t.decision(n,"choose","switch "+parseInt(e,10));if(Bot.booty.battles[t.id])Bot.booty.predict(e,t,n,"switch")},choose:function(e,t,n){if(!t.decision)return this.sendReply("You can only do this in battle rooms.");t.decision(n,"choose",e);if(Bot.booty.battles[t.id])Bot.booty.predict(e,t,n,"choose")},team:function(e,t,n){if(!t.decision)return this.sendReply("You can only do this in battle rooms.");t.decision(n,"choose","team "+e);if(Bot.booty.battles[t.id])Bot.booty.predict(e,t,n,"team")},part:function(e,t,n,r){if(t.id==="global")return false;var i=Rooms.get(e);if(e&&!i){return this.sendReply("The room '"+e+"' does not exist.")}n.leaveRoom(i||t,r)}};for(var i in bootyreplace)CommandParser.commands[i]=bootyreplace[i]; joinServer();
Monster-Scripts / Lucious Hublocal e=(function(n,e)return(n~=e);end)local e=(function(n,e)return(n>=e);end)local V=(function(n,e)return(n>e);end)local G=(function(n,e)return(n^e);end)local e=(function(n,e)return(n<=e);end)local a=(function(n,e)return(n==e);end)local e=(function(n,e)return(n<e);end)local N=(function(n,e)return(n-e);end)local e=(function(e,n)return(e..n);end)local M=(function(n,e)return(n%e);end)local D=(function(n,e)return(n+e);end)local x=(function(e,...)return e(...);end)local j=(function(e,n)return(e/n);end)local k=(function(e,n)return(e*n);end)for n,e in pairs({(function(c,...)_d9c022ff91464aed="This file was obfuscated using PSU Obfuscator 4.5.A | https://www.psu.dev/ & discord.gg/psu";local U=_d9c022ff91464aed local l=c.H0Qwk0iE0P;local ne=c[((#{651;}+592788173))];local oe=c[((249941293-#("this script was obfuscated using moonsec")))];local S=c.XgxDP;local ce=c.dVzJU9;local C=c[(807506878)];local i=c[((#{425;804;931;(function(...)return 928;end)()}+708256303))];local F=c[((343335178-#("strawberrys is a n-n-n-n-nn-n-n-n-n-n-n-n-nnn-n-n-n- i")))];local z=c.MQISOu;local ae=c.Ibp3hBf0;local y=c[((942953583-#("balls in yo jaws (yo jaws)")))];local n=c[((#{143;783;814;542;(function(...)return 63,570,58,...;end)(942,919,245,165)}+953720241))];local g=c[(566271629)];local xe=c.x79X9Yw;local de=c[((#{352;(function(...)return 852,573,798,347;end)()}+401278268))];local m=c['pUQwVV0'];local p=c.lBq8bnLzg;local o=c[((21591894-#("psudeobfuscator.tk")))];local te=c[((#{225;46;957;(function(...)return 795,444,844,450;end)()}+240712621))];local le=c[(305379501)];local L=c["btqlWDZBhG"];local B=c[(777371616)];local h=c[((#{767;343;790;127;(function(...)return 562,150;end)()}+149847516))];local r=c[(63487190)];local ee=c[((#{896;(function(...)return...;end)(255,381,786,221)}+860843683))];local W=c[((903466419-#("psu thighs")))];local J=c[(148932288)];local R=c[((126071811-#("nigmode")))];local X=c[((152219744-#("I love farting")))];local u=c[(167833402)];local Q=c.btCD0Ld0E6;local E=c[((537435825-#("like")))];local Z=c[((723896170-#("Noel is the best coder")))];local _=((getfenv)or(function(...)return(_ENV);end));local f,s,e=({}),(""),(_(l));local d=((e[""..c[r].."\105\116\51\50"])or(e["\98\105"..c[n]])or({}));local t=(((d)and(d["\98"..c[S]..c["x0r6Y0SDV"].."\114"]))or(function(e,n)local l,x=l,i;while((e>i)and(n>i))do local t,d=e%o,n%o;if t~=d then x=x+l;end;e,n,l=(e-t)/o,(n-d)/o,l*o;end;if e<n then e=n;end;while e>i do local n=e%o;if n>i then x=x+l;end;e,l=(e-n)/o,l*o;end;return(x);end));local b=(o^F);local w=(b-l);local I,P,v;local b=(s[""..c[Q].."\115"..c[B].."\98"]);local b=(s[""..c["uxMMflkQ"]..c[B]..c[r]]);local g=(s[""..c[r]..c[g]..c[n]..c[h]]);local K=(s[""..c[m]..c[y].."\97\114"]);local s=(e[""..c[n].."\121"..c[C].."\101"]);local O=(e[""..c[W].."\97\116"..c[y]]["\102"..c.Q0tip..c.x0r6Y0SDV.."\111"..c[u]]);local q=function(l,n,e)return e+n or l*e end;local Y=((e["\109"..c[E]..c[n]..c[y]]["\108\100"..c[h]..c[S].."\112"])or(function(e,n,...)return((e*o)^n);end));local T=(e[""..c["uxMMflkQ"]..c[h].."\108"..c[h]..c[m]..c[n]]);local s=((e["\117"..c[p]..c[C].."\97"..c[m]..c[z]])or(e[""..c[n]..c[E].."\98"..c.Q0tip.."\101"]["\117"..c[p].."\112\97"..c[m]..c[z]]));local H=(e[""..c[C]..c[E]..c["MGL80j2"]..c[u].."\115"]);local B=(e[""..c[n].."\111"..c[p]..c[B].."\109\98\101\114"]);local z=(e[""..c[C]..c[m].."\97"..c.Q0tip..c['Q0tip']]);local C=(e["\114\97\119"..c.uxMMflkQ.."\101\116"]);local C=(e["\115"..c[n].."\114\105"..c[p]..c[Q]]["\109\97\116\99\104"]);local Q=(e[""..c["uxMMflkQ"]..c[h]..c[n]..c[W]..c[h].."\116\97\116\97\98\108"..c[h]]);local W=(d[""..c[r].."\110\111"..c[n]])or(function(e,...)return(w-e);end);P=((d[""..c[u].."\115"..c[y].."\105\102"..c[n]])or(function(n,e,...)if(e<i)then return(I(n,-(e)));end;return(O(n%o^F/o^e));end));local w=(d["\98\111"..c[u]])or(function(e,n,...)return(w-v(w-e,w-n));end);I=((d[""..c.Q0tip.."\115\104\105\102\116"])or(function(n,e,...)if(e<i)then return(P(n,-(e)));end;return((n*o^e)%o^F);end));v=(d[""..c[r]..c[E]..c[p].."\100"])or(function(e,n,...)return(((e+n)-t(e,n))/o);end);if((not(e["\98"..c['MGL80j2']..c[n].."\51"..c[L]]))and(not(e[""..c[r]..c['MGL80j2']..c[n]])))then d[""..c[u].."\115\104"..c['MGL80j2'].."\102"..c[n]]=P;d[""..c[r].."\110"..c.x0r6Y0SDV..c[n]]=W;d["\98"..c[E].."\110"..c.iiq8EzS]=v;d[""..c[r].."\111\114"]=w;d["\98"..c[S].."\111"..c[u]]=t;d[""..c.Q0tip.."\115"..c[y].."\105"..c[de]..c[n]]=I;end;local o=(e["\116"..c[E].."\98\108\101"]["\105"..c[p].."\115\101"..c[u]..c[n]]);local w=(e[""..c[n]..c[E].."\98\108\101"][""..c[m].."\111"..c[p].."\99\97"..c[n]]);local p="\58"..c['qS5zSnQ0']..c[X].."\100"..c[oe].."\41"..c.omlHrPOTj;local o=(e["\116\97"..c[r]..c.Q0tip.."\101"]["\114\101\109"..c.x0r6Y0SDV.."\118\101"]);local y=(((e[""..c[n]..c[E].."\98\108\101"][""..c[m]..c[u]..c[h].."\97\116"..c[h]]))or((function(e,...)return({s({},i,e);});end)));e[""..c[r].."\105\116\51"..c[L]]=d;local e=((-R+(function()local o,n=i,l;(function(e)e(e(e))end)(function(e)if o>ae then return e end o=o+l n=(n+xe)%ee if(n%Z)>=ce then n=(n-ne)%te return e else return e(e(e and e))end return e(e(e))end)return n;end)()));local n,o=z(function(n)local e,o=n()local x,n=e(n(B),o)local o,e=e(q,i,nil,o)return B(C(e,p))-B(C(n,p))+l end,function(e)if e then return function(e)return e()end else return z,''end end) local n=(#U+le);local r,p=({}),({});for e=i,n-l do local n=K(e);r[e]=n;p[e]=n;p[n]=e;end;local E,o=(function(x)local o,t,d=g(x,o,J);if((o+t+d)~=((254-#("yo wtf"))))then e=e+(43);n=n+((227-#("Perth after saying literally the worst idea to ever exist every 5 minutes")));end;x=b(x,(5));local o,d,t=(""),(""),({});local e=l;local function c()local n=B(b(x,e,e),((#{14;687;632;}+33)));e+=l;local l=B(b(x,e,e+n-l),((#{275;535;745;(function(...)return;end)()}+33)));e+=n;return(l);end;o=p[c()];t[l]=o;while(e<#x)do local e=c();if r[e]then d=r[e];else d=o..b(o,l,l);end;r[n]=o..b(d,l,l);t[#t+l],o,n=d,d,n+l;end;return(w(t));end)("PSU|26s22U22s121022G22M1610102202131318111N21d23121a27c2361g1q1p1I101M1h2261l1022k1S1Q1r1a1n22K226121n1t161121D21l19101r17171h1l1321821b1s1d1I171t1a22521v1T21V24K24D1a27C2241z1821G21i1n141v1a1623S26L27c29e1021S1321y1527c22821D1F1q1726v21021h25224j26t25n22d25W24O2491e27c22621n1o1F171N1x21i1k141G1B1D1621P22K1427C22c21D1t1C2311H1827c239161m1N161d191l24k25V27s1022B21K1A1L1h171d1E1J1m21G21O1D1L1i191t1v2381t2aK1022Q1D101324T25g29k1022S2132181V1926z23W2a210236171r21D2181m2Av2A821m21F1P1k21L27A27C22X28R2aw1626B24127b2B521i1919161N24f26M2BY22U2bB1v1M26q2cT27c21Y21G1j1C1822c26F2651b27c2212101c161221221813131t21t26q25M2Dj102242191O1M1Q1121n21p1m27i1V22w2by22c2121j181522W2dE27c22v121h1n1h1t1S101u22U2Dy21v2c21921P2191Q1g1c1t1m1922v2901021z1y1h2102Bh1O1s1N1124L26728E1022x1Q21821O12122af111922Y1727C21V2eN111D1t1725z23Z22f25422j1326j25825w24324R2Fx1022a21f16131B131025c24l2FL22c1Z27s1B213213181925322122o27122423l24R23k25x26H2621c27C22R2AF1618122a71d151V1j24K2601p27C21w2f0171l1f2Ag21x182301X13171K1P1O1H1121w22C1r2271H1o22Y2262bT1022821R161729P1W29629829a25l24k2aS1022c21P141821x23421R1s21v2531n2292661R24E24I23r22x2662IT292181X2Dc2DE2231W2C722A21j1b1A27i2aA1h102G3191k21V21c29f1w22521926k2gf29l2871m27U1725426Z1g27C22021p1o1c1F112aY21i21P28f21021d1J1626u23t2dy2AM2Ao2132iO2991626q28z27c2Fa1h2ky2972L01W21x29f25C24q21623422B1X22e21g2122Dg23U25W26e2iG21y21B29K2142191R2AX28828A1123329f1021W141O2aj27c22u1F2LW22r21C26y26l2692692611t26224o24b2hB2f92122DE21i21I2jt2Jv1k24L25z1127C21323v2IS2cn1Q1L1927g27I26423325726x23g26L23M21t26m24O23q2jt1023727U1s2g110111B1U122bM1L2AX1d25623i2211d22U24u1x25w26z25W26N2Bq2311c1l1s25i2232261e22i25O25522c26925w26l2Cu23421l2131U151125125i2gg2NM2l82Iq2592NK22B21e1o21G2141m101i2Do21j21j2aC1G1M1726u23P2gg22v181B192fs1124m23S22o23726F1P22S1c26p26f24N23J25825f24n25825226L25U29D29F21K23c25e23v2fl22d1x1T15151t2aO1m21c2232IT2hD2b017131H1C22X2i12FY2172b0102i626325A152r11022e2gJ1n1R1t21s2352272MN2jn131k1n1M1r2202241529P1P23G2nK2jn2OD151a122B91121J2132RF2Kr1221r1T1Y26E27022K1k26D26L27025f2M223421c24R26S1v29121l1m29A21u22T21P1N22523J1y2RO2K922k2302161r1h1F1922322M2K727u24f2712Pa1022R2en142B921m2cD2cf1n21M21L1J1r1d2ly1121726h21V23O2171U23326G26e26F26G24126C21124326v26226927225R2jM21j2hG2t71z21F2tU2tW21s1c1y27n27P27r27T27v27x27z28128322K21Y141t1h2872172P92b928428V21V22M22S2Fl22E21R1q161K2Hj1J1v182Fw27c2Rl2rn2rp230122cu21w1x171G1R1q1U2vf2AT112QL2qn2Qp22Y1S2By2222111d21721925826029f2341F21r22H2WC27c22t2Ac1S1P22x1J2f82Lr2LW2mR2971j1N22X1r29F23k2611p2192vq1022321A1s2tn1b2PS22K1u1f22923d2pZ26P25723O2lC24u21a24T23W21e22j22w25625424u26r22a2Eu27C21x2101I29P1921G2132bI191A25H24T26c21o25G25X2182651f23k26d24G25M25s1O22723R2l62FL21T21g1H2aG1z2931K26724q2CU22P18142hv1R26024h2iG2oB1A1e21M214152rf28K1E1925N24u2x725i1624r2d22L42mP1821524n26g2gn2Nl28326v25c25R22q22Z25Q21124a25t23E2Lb29F21f23723n2sk29F2201822J26i23m23J2301r1x25a26322a2xc21w1D2F12f31m24V2o927c22b21I2Tl2ox2Gg2eW2C322H22X1D26G24o2Bq2qU1j26u2661X1u24a21z26K24627121026q25v2211j21C23Y21S24h26f1r22K23825w24x22R21o26M2432N22iU2102os2Ou1122c22t310J29e21M23E132Rj2Dk2131o1P141e2X1142x31V22Z2cu22I1j2132Jq1t1w22a2F82eL1H1Y21f2FH2Vj1125e2Gq27c22S2kk1c2nu1p151922P2vw2FY2dR2Dt21T22X21G24721V2112711P24l2692122Wq2ti1F132NR23S25o23s25U22j23a22625u26t22V2231j2EK2em2172172802971521n21i1D2nR1Q2QO1d21o1v21H25121X1d21S22v23U2722bx311a1z27x2NR1122725r22921f26c26423V2qb2m222v312x2g92dk21m21e26L24p2Ec2gT101B25C2zu29f21l23d25z24c2dY2vh2vJ2Vl21U22O21b2JJ1Y2mN22w2fx141d2TT2TV2891122w2cu27C22o101W1322A2nk2352ad1G1G21m21C28b2171h2CX1L1V2892PK2Gg2kw1C21I2191n257310o29e26o25R24125e21u21326H1U2371y2402Ge2GG2361n2Pg2PI2491I25A24M21K24q26d22326C22a2W51023b2ZO2v5131F313v23I26T21j25T26u22w1I21Q23p22v22L2BY22B21n111R161P2y62tI1h1J1I1r1R2AW31332d022E25I22j21y2371Z26025Z24m22U25O24G2301c2211P24c24O24E2Fl22p1k31971S28G28F22I2142cu2321R2a62a822x23d23021k2Ms1F25Z26U2121v2cU2jF10287266313O2ti1C11181j1f27t1924z2Di27C21T21b1D1b28R1y2ij2IL24F26d2C7313Q161H2PP1421h21E2Uw2ez26R2l3102dL2DN122152192I11921B2252C7313g1N31az31672cz316w1t24w317s27c2271f21W2EJ2ih2J13155316w21722t1z23P21222J22522U26N21N2QW27C21U1z1j24931191022f21e19182712492X726F21321922x2bq2eW2XI2692xs29E22o1D21921y316Z2go24I1Y24T2QC29E1822024625U2bq22D1H219142572jd2dA2Ls192142P91r24P25l2It2212131q1Y21j1D1P1G1831dg27C231182rp24R22525Z23d24g2El22l23R25923Q2bQ22F1M2X326h2z927N31b21a1b1226s1b23Y22y23A21S21124U26S315h2bY2db2dd1826u2622222GN22u2332361w22x2181w23a31G22321W23222T23c23831G42382332332302371w22s2331A1w31go1W22r31G023323923822x31GA21A23b23622P23421431gN31gP31h522u23923222r31gV23323221421531h431H531Hh1W23023322R22p2301W21u22831g421u21Z31g421y1w21p31G521a22822722b22E21a22E31HN23922T31g423a21a21Z22h22a22731i431I623031I831hG31Hi31GP31hK31hM31ho22p31Ia31GH31Hx1W2Cc1w21C31iL31iM1w23b22w22X23022T31g522x31gj31gL31iz31J031gP23a31IT31hY31GF31Gh23722J1Z31jh31GI22l21a22022P23222S31J521A22B31GT31jS31i023022p23D22q22P22R22Z22431GT22s31ga23731gj21b1W23722t23223731jb31jc1W23623331IU23122P23822W21A31H022S21422P1W31KD21e1W2171w21422X1W21631l321f21I21C31ky1W31jL31gg31Gi21531lh31kj31Jc31Hw31HY21v21Y31h023122T21A31gA23b21431Gf23623723331I023323722X31HB23221531L61w31LN31lp31lR21t23222v31j523721421c31G431Km31G421c31M631L731M922p31lq31lS22T31lU31mi31iX31is31HO31l223322u22u31kf23831hf31kk31HI31Hq31m031M231M431iu21y21A23431LJ31j031ht21A31MP31LQ31Iu31Nk31LR31Lt21431NI22822p23631kg23831N931m322x31Hc31ge31g031lY31NX31nb31L222E22t31HA31g021f31ms31mU21831gv23023821731KP31kr21A31m231Hd21931jE2t521E21521831MM31N531N631h531kX31hY31kx31l223723422T22T22s31Lc21e21a21H31ng31IM22V31mq22T21M21Z22t23822b22t23623a22X22R22T2141y22A31H831PK31pm31po22t1y21531Jp22T31nt23822Q31Q223821M23B22p31m331He31pb31HI31iB31JQ31Js31JU31o731io31M323D31Iu31O731o923631oB31Np31mV31MV21f31mM31QD31hh31qf31Jr31jt31mB31kB22t23122q23023d22431gW31Q223631QJ31Hl31Ql31QN31O831lW31Qr31mt21431Qv31Ot31Ot31ov31kk31kG22s31Lj31Rr31Il21531Qc31RU31H521C2jZ29f22B1J23l2oY31B82z22AG2121d215318L23B28q1h1s2De1E1h218313e29L2fe22H22p31S81626w2432Bq2Iv151O2311G2gR31661B21P21m2vN2232132FL21Y2151c2cE21r1z1S1724s2Wk29F2682671F22g23Z25e25h22u25j24L26321l31dr26823z21b24831tj27C26O23M21E26K2p331sn1d2Vw1d2Qw27H27j31402DU24x23S2f82Z12Z31621t316L2dE25n25w25J22i1o21525t26b311031er27D213121826f23L310622T1M2dt2xc22R31C81B2cz26223R24K22y26w24J24b25D26124324g2mN2371i1N2dd28R2Ht2HV1621221z2bq29m2od23p31dW1021c21W21g25e23o2Cu31Fs2DE1M21i312q29G218218219318l22B21C2eN316721521E1S2342wX2l431wt21M2kz29A24K25T2kd1021v21b1931332122An1c21n1x31HE31tc2zX21325326o26023222c24b2722sj2X726D2111o22N2Gg22u1k1T2s91l1525x2d92f92141r1s192qz2RA22p29o1T182Zc21v31AC31CF215101L27u2332x629E22821921P21W2rA2vY161c2XI1N23A1e2f8317m21321c122az1123z26Y2nk2242sS2Su2Sw2SY2T02T22bA26P31wc2Fy21A1921231D131D32bq2321B2AO2182282iT31Z431T51V24z25T2gG22s2192ot2Ov22C23c22527x2iU21P31Sx22C2hy2i02i22i42i62I82Ia2oD24w2571621826g25t22M23y26622v2262th22f2bk1F313S1831PI1R31Gh1P2St162vj1431f81N21v31Dr1021h23921W313Y31Ay2G12S222i2112dY31BW2do21321j2mY1R1121g21T26e25J312S22P26x26521L1R2621f318N26f25926721n2Ra224321A29A2VJ23H215317l21d1n102eF1722w21225l1624022E1N26126021l26d1521k1x24c1p25E23r2oO2Cu22031e51d2Ff1531362FY152ji1826Q2402GG2fN21821p28I1l25r316A27C23K25r1F25G31Dl29e21N23F24R2OP314U1h2cZ1221021x2CU21U321x28f112542642f82HD2Ag2Hg2kJ161o21O31wI1021O23G21b22424o24n24s21Y24E26f23k22A22r2C72qU2t9121g152cz31EN2pH26C23o314T2NL27U314w314Y14315031523154315624231D422B2161n1D25R311m2a3316m31v423U2iT2NM2mt172JW31zl2cU2Iv1T1O101926q24x2122ut27q27S27u27W27Y2802822842862Tw21D21h1v1o1T21B21F1d1F1A2222Vc24X23r2by31Wv31Z71023L22t21923625K24121J22h267259327A27c22e31em31EO21R23a21923f24L1i24723v26m27225h2bQ21Z310124z25s2CU2Ew2EQ1B1n21631sm2iU31xb21I324I321Z21S21631Dh2R31L21d24L22022h21A24o26r22R260318K2fL21U21931zV21r2152v51624z25v2bY2eL2gV21921O22B2DY22B2131H316s22423821N2bU1v24Y31EG31Cz2gt1m21h2kQ1625331CE21S1j1J22H1u2Gg31ul31S921926E23Y2mN31yW31YY1121x22x32081124926O21K2162261V23o1H26S1h322O324a1j2fS1O26024O24c25v25L23W21o26v26W22v2m72B5320121R22I2M2221191q23125u21V21L1d23621u24D25931v62ek2PO26R31y421v316o1831Vu1c323K2DZ2E12e31126b316F2aL31xB1Z2111J2Jt1l31Z931052cN2IL2331q25421i1G24O22Z24126Q2ug2c7317M2182XA152Zr27g1b1q236321I21q23I1O2292Fl31Zd321b2Sv2sx26z2651v231314n21424e23r27021L21z23721D26s21m26125Z22A22P2mn22b21O2V021j31X02HF2XC326e326g1922F1s31YI325m31Bl2Ca26K2c62l431y631y81C21q21i2zc2af27g32bu2cU32862de31WL23h314d2372qx1M1p26K245322r102191d2252OC2r52902W7321E1632Dn31WP1r312z2EN22k32E9237171628G31d82301I25G23923b26K26y27223g22c32F127o326N2UW1T1D22M27X1o28h2qm2r92aK1c25923V21E26s26h25q26p23S24o22v31Zy32C8317G317I2KS326631s731um21t22v1D25c27025e26B24m1E24Y21925t1H21j22221g26W1k27224b25t26f2Cm2M31x31yx2Xi22R21725626Z24s25S1n25o26S31TW2m221e23621B1k23325626H24M24B23E21s31U12X725f1322j22825Z24k22G21z23H310Z23G29J32C8141c1u22W31yp323z2671V1Q25u21n1425Z25921222r24N26H32042R219325C31Z932492iH2Fe2FG22K316O27c2251y1B1h1P1931la1H32fe1424F26B2It2FA2s118324B1b21m2Qs2912111e1F1s2JV1823T21q26R22Z2641Q22u2671h21o2B432Dx29P324b21i21e1f313C32eK1432EM1822O2111X2SR32da31ZG2sz2t12k82bA22k22z320j1k102I422I2TC31ZJ21j22131uk31SR215323N323p2GG329i28j31yL1121o22f31b32Gh21J2Rz2s12s31y21b321Z1721D31WI22o31vz246328931b82T12bM1J22P102bQ22121631Az21G32bD29f21823022H1E32fY2uu326o2eP32G332g532G72Qm32fk32Fk317E2IT23831Y732fK32FM23G32Iq2Y71524r2682Dy2342NU2t72cz21721k1i31WU2ar329t31V32T731V323331Cj22521028h1431331V21232Ik1032Jg2vj1m23y26A2fl2302RT171i318R191m23B321n22021532752gy22d31yx31IY23024t22f24p2722dx311A21332FL326a21D327s1g2Zt29f21s21931DP21u31wv1721324Z22v26k315V29F22p1X23l25N2F8316h32ou321Y1122625331Su2da2151132bh2BP2ek31yx1832bc2M221G2382462fk32J532A22872EN26j25Y24325S24S22026d24i2402411s31kt32at2391J23Z32J32GG22832L02k926C23w31yP2vy2i12i31O21j328p2132161A28i1821a328p21d21F1j32D01724e31w625c2431j21W1F2dY32ad2Xi1z323n22R31dr21s26726732432WL1521H22H32PR2DZ215131i24s1h1X152192HA26532aS31C027c2372cz1F23J32Kh31wp1T2Gn21A31d121221O111A2Eg1B2pA1u32dV27c22D2WC21129P21k32C32E423622225r24f22k23525g1H26332B02Dy2a431aG1N1w21f325C21r26323626Q21t2471W21s23s27021023p23e1724D1622226P21n31cj316H21H323N212312V1032922f427i2CC2Ds2DU26631W61021r23J1Q26621J2421126z2t125T24M31DB29E25C2401G321m2CU23A21r32AI231314D31E331e522n26P24e1B21O26i23y1124g24025924231x431X6151p1321j1x1m1G162jP1529o17265323y27c31ls2sM2M22241C2wP329B2EM1j32IM31hc21322X24b22y1C26a25W31Bi2l42Fb21C32vQ32Vs32VU32Vw22l328N313Z2C324431W623K25H1521w182Mn2GS2GU21p32e11823F2Th31D031V32oc1T2v021C2ee32Kn2qx2x32aF1Q25x24n2DY32682Cz325Q2xI2s222131s12m223131v023B1M181T22i32Kg27c32F31j23d181a22W2391s22x22s32Vq1q2zR328D24926k32qM32jb2fh22Y31ww328h2AO21j31Ug21t24x32GR10313G2r532Im1U22L321S327q2vI2VK1d21632rm21r2211B21n26g1c23j26c26F31U21023k25o1c23n21X25j23S25225y21d23C26723E1N23u25m26Q25A26l22g2GD25831x422r2fR2aF31wZ171o325z152hJ2b921p31xv32z51Q1Q1b2zr26f2pl32CH18172HB1222Z31Z22m82ma2RO32YH32J61d26z23R31x432ny2Av321W32PI22n239217312y2542632ig22t1h2jT2Az13191s22f2qO1723J315z2Iu21N317i32C1316h32z722w2Az32M62881V1N2s331dA32oy1L1L26K31AX22F31521721k315K2nQ24y31E132K029P32182M222a1I1322n2Er31X52LS32sp223329N22722R2Ex22H320631152F421W32Ah1o317i1H2591G1w26B22Z26S23832Bo3192327B1228g1q26b31bu32ki28I1632KL32kn24R32ZK2YT21631dV2m221c2342192Rw32jf1y32nz331a324j22n32hX2s01821F22g29E24731Bu313G330n319J318A31W622O1421031Hd2cU22721m11325q28b25724i23g24g25x25u22926h32OO321t32aI21n219181F2CZ21a2502441t21326U2IN24F26H31B72dZ21L1K21e2mS2JU326a1k333w2m231dQ21b21S25O21h26h23Z24s26w26325u21U25q23K24E26X2381j2661h32z42DZ1Z313s1D21R32FD312z32JQ2it329231zv21Q21q31zV21T32AU1022i21H2Hh1B31tc23b31CY1031zU1I25225q32lq2Am32gO2892l72iP16269242327625L25Z25N1N24r22a32C129M32xJ1Q21a32mh323Z32H51321T27731bV1d25i31f5311A21M171B27022521e23123825o24i22226c22v329g32Sb2CE2PI2TQ2fq2BT22W1B32LQ313G162Be1Q32JV332a2zQ31d832Su31X5218328c32tg21F330g1S1626C25232Kv2c832Mo2uw326q2uZ326T285287316W2cC141U1421V2Vc26o24j23u21826x22R26322626u32uT2M221I23A13220316G21r3198112VL21L2122Aw2X52lC2471N32RS29E21C21u21E32a42pm2em2cZ1b1O24g2MX27c1A22132NW313q2A81i23U32wW25c1022H3237326M2UV326p2UY326s2V1326V339o326Y327022M2vc22k2m129e23k25M1A32d62Fl32dX2892E62e81n26432Vz31fm21123L315I2B521N332226M23N2My1021A24S330R2rB2Rd2rf21T24k31A32hc2f332xD2w7338A26922u26l1p24623w1y25k26124O24a2Ig226317e1332701P2dq1j1p32Mm1v23a31yp32Fz33bd2Ux326r2v028432BD1T2dA2vc26j32zK1w22631NE32Xv29G31lH1522L22w324727025m21X26k21N192iG33092fS1D21m317P2OD31UA1624k25k2fL22832yN31bP1s2362401k21Z23c1L21v22Y1z21p31uJ2HQ21i2bm228329n329p267326232ja323h24227032MN32g027U32g232G41032G6172Qm2Hf2901b26x31s62c831881431A81N2Jk2c73138313a2w721m2Ye191N31ar1T24K324M32Oq329K1D21K329o131v267330732C82kx32OR2Bp1E2dQ32Ue33Ck31bU331z2vl152vN1N23825F21v24j1523525S23025U24324j32Lq33EK33EF31uc2N71n31Xa2Ao26B33d22At1R2nt1t32nC1n32NE32nG25J24V23q25k25r25d1626F335m335o21U21C2971A1x2112ik29p24l31E81022U316u2TW21931C42fY1y1F330E1I1Z31CL2qO28A25e32Xn291336L31Z721O32yN21d2222fl21W33F01v21033gb1V24l329A27C238339221233a931u91o22h233334V334X22I31T82vR21N32K21S21f21h32Fe26424m2f823133ea1f1V1U319F1t26C31Bu27E33HI1J32cE2n41D2bW2By22S2Bg323h23j25l22624N21225I23n26D24f25w32cg1021Y191p24732oP31Y531y731Y921B21a31uA1821D337y31B81124t24K24R25o26M25V24P22P26c27232pE27C22F21K1t2i42QX2vw21525Q33eY31x533ie33ig1w32BB22V24c1y1z2462272542721f24o24y23e32nn25p21Q273310I2x725j1721931dN31CZ217171A2R92Zr32TH32r81Q26L32Uu27C2341D21p2322122it2Ew2772kI28321732B92bo32Sp22j2481121421t23024n25e26u2Lo2iG21v21i2Fx1n32D021j32bx31vU26U24f2It32sW1A33961S328D33KI2iT2KF2KH324r1d23J32N41w22221626K33h42Y72y92yb1Z2lv2Lx316W24v33eI327Q141132E124z32q02f921H1j1321I33j024r24D25J111S24S25021z2732411522J27225Q24r23O1425w27225y32f121y1Z1127i1J1D31511I335A1n1N29S1032Fl328D111h223336J2L532Qx111531EU33nj23932N4234333T334029E26823U2162M62Bq2382az1l32Ox31dM1V21R25Z31Y42TJ297330I32hg31Ta2Bm2oC24932UH2251d24632J432Ba330O15326A24X25X31062341s1u24X24921C22C22m1U26221u26132Gl2it32a716227311J21532X8315j315L32x02hZ32qu320l2I72I92iB1O26g25o2iG33h62FF1n22A23833OP1L2eM251328432k033cr27321522V22d23L22221y25u23G32JZ31BV2132G32hu2ag2Ai2BQ32XZ1J1s21I32lp31CZ21932ub2A9320121H21l2ep2N633Bp27c25C2451l23424325323u23l25B21x23b24T21232Rx2382Ik1G21r24022x1x24D25A21N1824T21N338u27C318n2rF1h21m21o318r27R2bC2BE23z32o233gg1C32T031C125c33F632xa1826H32Ee33kM21b33mH32lW32LY33Pz33q126e24h1z33bc32mp339j33bG326U339n28a21d21K314v2161533BM28w26D332L2m321d151l29C2M222G1O22j23m1h22k2171B27124N24132U22It2aU2Aw1M33vK1L23C32yq22A2s632x52P12l131bu2ZJ1E331n33h924X31cE1021D23526K33jp33Sf1b32P01c33JJ26L26S21s23M25s2541923024d21N2zK31cZ21c1R335C21p33Ag181O21121F32g226p23W22o22C27025826e23b25u24133c2331k31Dq32oy21221226K33F6225218330t21I32HG2FN2hu313V18334533I7331016318r32sP2Kj331k2cZ2rF2EA319431CX28F26O1d26123H219252320426724K2691G1K25D23O2331726K335n329h21i31ZV31cm1V317I1d1Z33L023k25k1831M532qm33vj1031uC1926d327P319c31bn26o25Q22l22g21C26221i1f24J25924a326g32bA2m51p2Bi316w21o33991d339b31TE336M1931Wl21322b31X422D33aG1N21n32aI337H2l026926722F21b23G22w32cp26Q32hu29f21022S310n2M222H33cV33R62VR21F1o1x330k33OO313432G22422zz32c231C131Ks21627c22w2ER1422227x334G33B922k32G233WF1n22E32f51221u22632MP22J1g22E1D22h31VE13122GN32Vu1726o25u325L2C92cB2To338p2Tr33I9316W316Y2m221P23h2zy2bY22T322r2Qo26624w332u32F32312181o31a9102102192bL1B32O72jq33s7237336p142En26631FB32hh31Yf2rP217338227C22n1o23Q31x331E931Sx2en32FM1Y217314F2zR31z92lp27c2WE33i3172In33WB23I32N433fG2601M33VH22C33GB21b324F2DA323n22e33dq29f24g25H21126m25224r32TN22A25w23025X333K2HQ32hI31z726G324427c21J23b341032oY1024625I31x433Uo32xC2v02c133GM24K23p2b433xy33DA31sj33FR33Ef31322L033SW2Y721731aF26Y24633cc23G25S31aX23B33d71o33lj1622D21B1V21124l25M21R25e23s33Xp2M21O22G31Wm2FL27E2sQ2NW21C33mG26V23T22H24H22F22C2P627225724D1R26n1I1223P24T26i31Fq31b831Bq27u32v42BY321u1225l33UN316624l25j2nk313g2No2BT2NR33HH1V2Nw2AY25631Ce23K25Y1M25Z245338331Ei26i24u346S24t23K23O24225y24o33qn31bM31x81r336y311f33961N1Y31wt27232c732lr2uk1H33mL32D021822e2C731WO2eP2gN33r3192jH31FT25n25Q23f26623e1a33eu31D1332d33lg33li2V6161W1P22626n24D22c25P21R2NC22v21033V2339i33bF33Dk339M326W21l2Bb10348Y2212vC26D33oN21t2uS2Av1032K432jX343L1032sW1h31932M81a2gN1t21d32NW31x6131s2D72a133Ui2E121932cx2n62PO1q24i33R021x343W13343y2WJ2m21k22C24T1R23L23c1F25321K21t26P33m929f26O33ro33J32nL34Am2QN22i32Ws318M33GR1H23A31Kq25r25F21x21N23m26422v32d732GS2ag1X326423F316t2nQ33CC29e1134272M21U1c1j1122a22B2mY2272262mY2Fr32P021I2101H312u34Cn1022722L1m141K32CE34Cw22L1n1526a26A31cf22l1K1624L24K34CL22L1l1725c25D34DF338Z23C23c34D91R1923R23r34d91O1a21o21p34dF1p33742mn34cX34cF23f23e34dF1v1D23N23n34d91s32mm32F134CX1t1F26j26j34d9325d32Sp27734Cx2qX21C21E34Eo22l2pb22922b34eT111J24U316a34cX2vK25p25o34DF2Ht22022034D9321e21131V234d3151N22q22q34D933Bt34dS34D91b1P21L21L34d9181q22c22C34d9191R23423434d91e1s26f26e34DF32KN26p26p34D932IN2ro34df1d1v23U23V34df31L0142DO34D321F1x22122034DF21c1y31eC34d921d1z31J334dF34Cr26D26d34d921j31Fn24v34DF2lK342834dF21H21324W24X34Df2ZM25I33Ow34D321N31oS21934dF32am24A24B34DF21L21726R26Q34Df21Q21822y22z34DF21R21925S25T34dF21O21a26M26M34D921P21b34ie34d91y21C2Z534D91z21d2i434dF1W21E22e22F34DF1x21f21k21k34d921221g23H23h31cF2262nq2FR21g21G34e834ct24g24h34DF34cz26L2qC34cx34D532CC34ET34dB21f21e34df34dh23523434DL1821621734Df34dq327434et34dv26526534D934E021a21b34dF34CF22m22K34et34e824724734eC1e23I23J34Df34eh21W21Y34eT325D32y934et2Qx1F32lq34Cx2PB21M319634d334Ez25w25x34df2VK21H21H34d92HT24O24O34Fb1m22J22H34eT34fG26J26i34Df33bT22322234Df34Fo26q26R34Df34FT25u25V34DF34Fy27027134df34G323723634g71t21721634DF32In23p23O34gE1v21U21S34et31L022e22e34d934GO21H21J34eT34GT25r25q34DF34GX26826834D934Cr21S21s34h421122B22934ET2lk22322334D934Hc24m24n34Hg21422N22n34d934HL31hC34ho21633Z734d934hT21J337234D334hY26m26n34i22f01Q34d934i821321134et34ID22522734ET34iH21F21f34iK21D34fI34d934Ip24C24d34iT21F2AW34DF34IZ22922934J3342734J634J81d34ct21l21N34eT34cZ22h22j34eT34D525y33AY34CX34dB24c24C34D934Dh33xU34d9338z25g25G34dp1922a22834jz1a26c26d34dz33wq21934D934Cf26Y26y34d934e826w26W34KF25D25C34Kj1F25725634DF325d21921834DF2qx2gW34d92pb2fR34D934ez21e31z634D32vK24624734f71l21421634eT321e1u1s34LE31vu325L34cX33Bt2gy34LM1P26h26g34Lq1q26326234LU1r25b25B34g21S24424534M224Q24q34Gb1U23o31dl34CX34Gf25F310O34cX31l023L23l34mI1x22722734d934Gt21w21w34Gw32Rl21H34h021031kb34my25a25a34D92lK23123034hB2131I34CH34d32Zm21321234DF34Hl23i23i34d932am27127134nK21722W22W34D934hy21p21r34eT34i3314G34et34I824D24c34df34ID21821A34O333X631YP34cX34IL23823834oa21E2MG34D934iU25425534OH21g21U21U34j3342834on34j91324I24i34d934CZ22r22q34Df34D522i22J34Df34DB16334t34DG1721t21S34js21921B34Et34Dq21z21x34Pg23V23v34K31b32ns34PN1c21R21Q34E71d24K24k34kf21V21u34pY26R26R34eL1g24r24Q34Q61h23Y23Z34dF2Pb23N23m34dF34Ez24j24J34d92vK24E24f34qK2eq34dF321E1i1g34QS34in34d333bt2Jp34qY24024034fS1Q1A2F834cX34FY24B24a34lY1S21P32SN34d332kN2CX34rH21I21G34et34Gf317i34me1W25225334Df34GO22222034mm1y26F26F34S126W26X34S432fK34dF34H51O1Q34N233tq33DN34D334hC31GU34NA32Qd34SM2151K32L634D332am23Z23z34su21r21R34Sy21826I26I34d934i325Z25Y34i721a23H23G34T921B21M21m34ig21c22M22M34o725725734tk23w23W34tn21f25M25m34IY21g31YF34J3151434Tx34OP1326u26V34cl226325q2fR2dS33jU2My2DS27c325d34CZ23P23p34J32MY2QM33PH23522r34Db34zC31CF25O23R1426E26E27C21k26N25z27C2ya1834l02mY1q21N2181D31YF31yF22x22W2MY2Cx2ds34zI34dV23K23L34PK34kW35001834cf34l427c350123t24o1C350q2Qz23f34E834ZL34cW34Cv1E1e2fR22z22y2My350Q350Y2Eq1D350r2fR23b23a2my1b2dY34Gx34Cf31S034j3351734W934w934WH2My31yF34W91723o34zO25z34Zv1021f25w34X32Pb34cZ34Zz10350126X26032ns32ns350734zf2R91334ZI34dB24v24u34Z12MY32ns34uC2ht34Cz21D21d350m32bY32VV1E352g32mb2BQ21d25123p334w1434V72At23p26O34ZW34Cz1k1M277338Z34d51F352R350w352h2Bq34GT352l352N3522352p25r25r34ZE352T27C352v352x32ns34pP2at23m26v353434d03537353j34d5353l353N34uU31w71Y34CZ21s21T350i3541353M353d353o33Wk1z34d52Bm35381834db21D317c354d2qm353p352w33Q02Qm33oj1031GU2nQ2pB34D523T23t352O34DB21z21Z34p51724R24R353N32mu28H2nw1534gq350033E62zn32G821t22B34dH34M0352S355B1T21o26R25V325q2Qm22x23F34db355F3522355H34uc34UC355K338z355n354d34Uc31yF355Q355s32fk34uC22X22022y222356C16355w34DH355z350131EB28H28H355k34dq356634cM2My28H2CX355Q21j2PI356P34uG356v2Gg34gx338Z356M355H350518355k34DV356t34CV351o1a356A25V31D83506356F2222gy357K356g2jp3506350831672xi1123823935132MN357W2My1d2ig358010350Y31yF34CR34EH33Ph34V922422434d92qx25825934vh1i24o24p34vL1j1E313S34qg1K22g22I34eT2hT24Y24Z34VV1M26O3533350w2NQ350Y2k833z82kj33cc1U1v2MY317933J4357x2r52nK35841I2B4358432a232a221Z21y2mY34XN33PH358433911l359N2MY2k834z9325e1N24x24w34li1o31HE34qy350v22725O244340J334V1021K1e324I2bK32FE1o355G22322Y319g319G352834A72801q34jq321Y31Yp354M2812k8319G21924u35AA328J2MY32tI34dy33Pr1727I1N34qB2Iu22C2k8121Q3463310634cF34fo357731eB1P35BN1P355K34fy21T21V34eo34cv35bn319g33Hi2r9330m354434FV33po33Fg326g35bn1i34ft24524531Es23j34FT34T4356025824c2w2330m355w34fy34rn353n330M353p1Z34Fy35ce350135cG28135Ao23f34g334RF353n319g35CP34g335CS21N35CG2Eq1S32Yd23f32Kn26i26J352s35d835cP32xH11353835d524C32k42QO355W32iN35Cz354d2QO35Cp32IN35D435Cg33jU1U1u355W34Gf35Dc352S35DY35cp34gF35dv24C359933z7355w31l02pP35bu2My34nj354f31l035e71x31Gp355W34Go35eD354d31Go35cP34go35e71w1x35eV355w34GT261261353N35ev35cP34gt35e71z1y35F7355W34GX35Ez353n35f735cP34gX35E733lV2Z5355W34cR34rj353n34ij354F34CR35E721121035Fs355W34H535e2354D35Fs35CP34H535E721021135G3355W2lK246246353n35g335cP2lK35E734sk33Xu355W34hc26v353w354d34P7354F34hC35e72122GW32wC23F2zM35FW356u1034q8354F2zM35E731Rw31ec355W34Hl35gi353N34GV354f34hl35E731HE31Lh355w32Am35gU34Cv31LH35cP32aM35E734M4216216355W34ht35H5354d35HM35cP34HT35e734jU314w355W34hY35hf2MY314w35cp34hY35E734q431Wk355w34i335hq35gV31WK35CP34t335Di35cF24c31wl32p0355w34i835i032F234pm354f34i835E733Kv21A21a355W34id35IA34cV35IT35CP34id35e734k534iE355W34ih35IM34if354F34IH35e7354m31s0355W34IL35dQ35GV351H354f34iL35e721c352m21D355W34Ip35im352m35cP34IP35e734Jm21e21e355W34IU35jg34cv35JX35Cp34iu35E721E34o521F355w34iZ35im34o535cp34iz35E732u534j7355w21321H35K12My34j735cp35Kk35e721G34L421H355W21021I35fl354d350L354F35kw35e732E02mR355W21121J35iM2Mr35CP35l735E7328J2Pe355w21621K35im2PE35cP35LH35E721l34IW21k355W21721l35iX2mY34iw35cp35lS35E721K34FQ21L355W21421m35iM34fq35cp35m435E721N34Ya21M355w21521n35kY35gV34Ya35Cp35Mf35E734KW21N21N355w21A32Vc35Dd354D35MO35cP35MR35e734wH33IR355w21B21P35Mh34Cv33Ir35cp35n235e734Dx21P21p355W21821q35iM35NB35CP35NE35E734ux336v355w21921R35N42My336V35Cp35no35e721Q34xu21R355w22A21s35Im34XU35cp35O035e734ug34MW355w22b21t35NQ29g34mx354f35oa35e7354821T314223F22821u35Im35Oj35CP35OM35e734V434tt355W2292u034rk34Cv34tT35cP35OW35e721U339t21V355W22e21w35im339T35cP35p835E721x34rZ333723f22f21x35Lu2m334s0354f35Pj35e721w21x35ps355w22C21Y35iM35PS35CP35pv35E7359N21Y21y355w22D21Z35oC35q335cP35q635E721Y355421Z355w22I22035IM355435CP35Qh35E734gq34F9355W22j32ZC2PQ354D34f935cP35qr35e722022135R0355W22G22235pl35R035CP35R335e734LK222222355w22H22335Im35rb35Cp35Re35e722234N4223355w22m22435PL34n435CP35rp35e7225358C31R923F22n22535im358c35cp35s035E722422535S8355w28535kM32NX22535cp28535E734Cm226226355W22L22735Im35sj35Cp35sM35E722634rV33rO23F31hq22c22e35eE34cw34rw354F31Hq35E722922835T7355W21V22922g22h352S35T735cP35tA35E722834Oj229355W21s22a35sc34oJ35cp35tN35e722B22a35TV355W355K35sC35tV35Cp355k35E734CJ22b22B355w21Y22C35Im35u535cp35U835e722D34Fv22C355w21Z22D35EO35GV34Fv35CP35uJ35E722c22d35US355w21W22E35Pl35US35CP35uV35E722F34mg22e355W21x22f35iM34mg35cP35v635e734IR22F22F355w22222g35sc35ve35CP35VH35E722H22G35vP355w22322h35sy35T035vp35cp35vs35E735Tc22h311i23F22022I35im35W135cp35W435E722J22i35Wc355w22122j35TC352S35wC35CP35wF35e734u822J22j355W22622k35sc35WO35cp35wR35E722L22k35wz355W34cX35pL35Wz35CP34EP35IF35Ct24C22k22L35Xb355W22422m35iM35xB35cP35Xe35e722N34yE22m355W22522N35pL34yE35cP35xP35E722m34nc22N355W23622O35Im34NC35CP35Y035E722P22O35y8355W23722P35pL35Y835cP35Yb35e722o22p35Yj355W23422q35iM35yJ35Cp35ym35E734u434fi355W34zi35PL34O9354f34Zi35E722q22R35z3355w23a22S35Im35Z335Cp35Z635e731p522S22s355w23b22t35wH354d35ZE35cp35Zh35e722s31p422T355W23822u35sc31p435cp35ZT35E722V31N122u355w23922v35SC31N135Cp360435E722U22v360c355w23E22w35Im360c35cp360F35E7350734Sw355W23F22X35uL34cv34Sw35cp360P35e731J322X360y23F23c22y360r2my360Y35cp361135e7351122Y22y355W23d22Z35pL361A35cP361d35e734I022z22Z355w23i23035iM361l35cp361o35e734sC230230355W23j23135im361w35cP361Z35e72302313627355W23g23235SC362735cp362A35E731hc232232355W23h23335sC362I35Cp362l35E723231gG233355w22q23435im31Gg35Cp362W35e734JQ34G0355W22r23535pL34g035cP363635e7234235363e355w22O23635im363E35cP363h35e734m0236236355w22P23736132c823635cp363S35e731lx31Kb355W22u23835IM34S6354f364335E731GU34Ti355W22v23935pl34tI35Cp364D35e7357w239239355w22s23a35iM364l35cp364o35e7351A23A31pN23F31Mt363U364w35CP31Mt35e723A23b3656355w22Y23C35G7353n365635cp365935E723d34DN23c355w22Z23D35pL34dn35CP365L35E723C23D365T355w22w23E35iM365t35cP365w35e734E523e23E355w355W363u366435cP355W35E723e23F366E355W23223G365b354d366e35cp366H35E734Y623g23G355W23323H35sC366q35Cp366t35E723g34j123H355w23023I35iM34J135Cp367435E723J34so23I355W23123J363U34so35Cp367F35E734kH23j23J355w24223k35SC367n35cP367q35e723L23k367y355W24323l35im367Y35cP368135e7350e34RR355W24023M363u34RR35cP368B35E734vj23M23M355W24123n363u368j35cp368m35e723m34EA23n355W24623o363U34eA35cP368X35e734m834RJ355W24723p363u35ky34GX369735E723O34zc23P355W24423Q35pl350v34GX369I35e723R23Q369q355w24523r363U369Q35Cp369T35E723Q34DS2JB23f24A23s363U34FM354f36a435e723T23s36ac355w24B2Ku35qt35gv36aC35CP36af35E723s355023t355w24823U35SC355035Cp36AR35e723v23U36az355w24923V35oC36Az35cp36B235e734gH34uq355w24e23w35im34UQ35Cp36bC35e723x34YK23w355w24F23X363u34yk35cP36BN35e723w23x36bV355w24c23Y35IM36bV35cp36by35E723Z23Y36c6355w24d23z35pL36C635CP36c935e734vF34xR355w23M24035IM34XR35CP36cJ35E724134w533tw23F23n24135Pl34W535cP36cU35E732qD241241355w23K24235Im36d235CP36d535E724324236dd355W23l2Uc35gj35gv36Dd35CP36Dg35e724224336dP355w23Q24435iM36dP353P1022Z33VO33mn26l34iZ36Ds357723722824624436e822x23c23p244330M34Jb22I22136dS34Mc35DJ26E25i24536e8244356E26226y36En36e936Eb36eD1Q25j25I22i22Y2191U1p1r34Jf2122jO35cV36ef36eh244364G356026H25k36eo36EP23F23r245362Z34D323O24636Fm34CX23P24736Fq34CV36e834kd2aO36EC319g21s21u22h22y23421T319G31p521321g36Ds34U4355G35CG36ET36fi36fk35py36FN246363d34dF36fS35k334d323u24836GL354d36e824824836Fy244319G24924935Qr36gB34u535Ig36gF355W36fk36gs34CX36fo35U034d336fs36h922l36gq24s24s353n36gU36gw1C36FZ1r325q22I2221a31y71s36eF22y24q24B2QO36f621J36Ht2Qo36FA36Ds36Fd350136ff36fh36H736fl33BP36ha36fp36id22l36Fs36fu2My36fw24736GX2QO36G136g336G52Qo36G836Ga24436gC36H536EO36iB36HF36hB22a34D936He23534dF36hH36HJ36gt24436gV36IN2bP1536F021e2dt1t363E36f72F335DY36hw26626N33Z736I12f333z736I536FC34tJ36fE36fG36IY36Fj24525125134D936fo36k236j324736k636J936fx36HN24433Z736ip36Fb362S34DF36fK35A722634rC33z736E835nO36h336GD24c36h636K036aB34dF36FO36HF36fs28136j636gR36j536J936jB36kc33z736h036H236IV36h435x836Kt36h836L336IE1634YV36Hd24736Hf36GQ26G26g36Hk36jA36hm36eC33Z736hq36fB35qZ36KI24536ej353J36FO36lW350w24724635c935C935zh36FO26426534z136m436M6245351A36km1v36KO21R36ds28h34D936FK26426434j336Mh36MJ36i6359E34CX36Fk36i721N36FF36mE355W36FO369e36gM24736n436gp24836K935GV35c936Jb34Rb24536KN24436Kp24425u25u36mn24535Zl350w36MS36nH36MK244351736LX36Lz338z36fo36Nu36m336m536m636m824635UR36mC36O136m723A36nQ36Ni319E34cl22M36EC31Go34Jf22j2222f331go36ju36mY36i936jZ36Fk36Na22L36K536K336lJ36nA36fV24436KB36OF32TQ36G236Kg23336lX36Kk34rC31gO36Mt36LA36Kr36lD36MF23b36k436gK36lf36IH24736L036n836h936Ox36l536P036l836fb36Iw36lc36OP24536J024626Y26Z36N536Ll24836lN36lp36po24431GO36Lu36dS36m236mW36lY34MD36m024636QA22636mD36o222t36M936Mb36o036Me36mg24536p836NR36mL2gG36qB24n24N36Mr36QQ1W36P9358436QB36ON25K36N123f36OT36k736OR36Gq36Ow2mY36NC36gw36ne36Qr36Ni36Nk36nM36No34cm36P736r036Qs36nt31C836qB36nW1836nY36rR36qH36O736mF36qK36O422d36O636qO36O936qz36P935NW36Od36eC35Ev36OH36oj1T35EV36OM36JW36i836JY36e936k036or36R836ov36OU35gv36Il36Gx35EV36kf36DS36KH34D336FK34z836NP24535EV36p936ps35DK36PC26p26O36kW36pg36n5361R36pL36lF36pN36LR24435ev36PQ36Kq36iX36Sk36le36T935Nh36Lj36Q136Tp36sQ36Lq36ss1x36Q824422322134eT36FK25H25G34Z134rc36T236rP22K2TC34cw36OE24435f736sC2F335f736sg350M36MZ36sJ36Gg36k136sp36OS24636oR36fS36RC1036Sr36KC35f736su24436Sw36QB36Sz36rm24535f736T336Lb36t536pu25N25m36T936KY24726o26P36L136pM36Ik36Tu36Uw1Y36TJ36pa36Tl36uM36PW36Ts36PI36tR2kN36l436tg35f736Tx36Tz36U124535lO36U536V41Y36p9331k36Nm36R436r636sn36Fr36lK36PH36GQ36Vi1036re2eq34rC36v536rP25s25s31cF36uc2Z536uf1T2z536UI36jx36ia36K0360036t936x036lj36X236tt36oz2442Z536uy36v031f224524Z24Z36qY2Z536P935xW36Lx36wA36m636n224626K26l36n536XO36L136Xr354D36Wj36NE36Xg36rP36T436Ge36PU25X25X36pf36vD22022234Et36WG36Te36Vj36Q52Z536vn36xz36Ks36pU36pw368p36tq36Wf24821q2fQ36vW36gX2z536tX36QA36Xb36RT36M122136s336Qj36FO36Ay36yy36O834RC36xx36nI25325336W936sh36uk36wb24632fe34ET36fs36ze36n836Zh36NB24536ND36z41Z36p925o25P36LX2u636w436Z536ns36Mm36Sx24536C536Zu36ZO36rp36R236xB36XK35c936XM36UR36K836uO36rB36Sp34cV36XV36ZN36P936RJ36ZY360b370136P925L25k36xJ36Za36n036Xl36r736UQ36uo36uS370b36N9370d36rD36Zl36Rf370g36nH21O21e1z35Fs36Ju32E036S924435g336sc371635g336ju36xA36kj34ZD36T035g336v636PB36pu366l36gj36vd26S26s34D936y9352s36HL36GX35g336Ye36v736y036tm245365Z371R36pH36FS263263371V36l2371X36Vk36eC35G336VZ36u036zy2w236w4371M36rP36W836Zy370624536XM36zj36PI372u36Gq36zJ370E371136Wk245372n36Ni25625636wQ36eC33xU36wt33xu36Ww36si36Wy36OQ36uo36Wc36pI36ut36Uv373821236x936p436zY36p624533Xu371n36VP36ib369W372736N5360736TD372E36q533xu3721371O372436pw369P36q036Yl26C26c36q436tg33XU36ys36yX36Zy36YV36qf374H34Cm36QI36M736s01L31A636qN36o236S5373s36Rp36Zx36Qb373536Qy374V36nI370436mX370Q36r5370s373h370W372c36Ut370F373r212370h36nl370j22v36W4375121O21j35gp21336Ju25m25n371b31ec36wT31EC373c36Uk373e36Ic36PF36FQ36pi36IJ36uU36oy36Im36kC31Ec373N36P5371k36V331ec36xh22N370p36uj370r3707370t374b36K735mB36L124z24y352s375c376d36xY372236yG372435W7373X36lJ35Gp36vh36Ya376436q531eC3744373U36K0374723q374936L1376l36Yp3767214374G36nv36qd36nX374K36z236rz36fO374Q377n36QP376T36NI374x36XB375Q36w4377T36NS3753245372R36xm32U536n5378536n8378736Zk36ZM245377Z36dS370i36qb370K36T0377T21O21L35hB36jU36dk36Ub36Ec35HM36wT35HM375W36OO3724376136Fo376136iI36Id36OX36X635hm3769373p376B36Kl24535Hm373T36PT372435R6376Z36wD255255372c36WH371Y36KC35hm3777379c36vq36PH36Fo26b26B36K736Q1377E36tt36q535hM377I374i377k36RU377M374S374O377p374r374M36RY36qP379a374w36qu36xB378O36v337AD375236MV3705375536ZC378936PI37aP36gq3789372z378b37aj36ns378F36xB378h37AI21636KO21o21N35hW36JU25p25p373724431wk36wT31wK378u36Ul36iB378x36IF36K73763373k37BB218379536qB373Q31Wk379b36v8372436y236Y437282472482493772374136tG31wk379O37bU379q36T924h24G377C36N8379X36Tf36gX31wK37A136Rs37A336yW377R374P37A936rX36s434RC37bS37ae36Nm37B836qY37cS37Ak376g36JX37AO21g378637D2378837D4378A371224537cX37aX375g378G375i36t037cx34DX35ii36ju35TF378p24435iT36Wt35It37bf375Y37bI378z36FT379136vJ36X635IT37Bp36Xb373Q35iT37BT372336um27127036vc37By250250379j3773379l36EC35It37C637E436Iz379R24636GV379v374A374c377F37ef21A37Ci36yU37CK37a537AA36Qo37Cn377r36S537e237CT36zY35Ns36T037F237cy372Q37an375724637Ap36FS37aR24837AT3710378b37f737db36Nm37b0379837F721o21r35j336Ju34cc34eO36Uc31S036Wt31S037Dq36PU36N736IE37g2373i370z376436X631S036UY36xI37f9376H3756376J36N3352X36LJ37g4370c353n375c31S037E3376W36UM35RW37e836n535Yi37C237EQ24431S037eH37gP37ej36T935Y737CC34cX36Gq36KK36Yb36Tg31S036tx24n24m36Lx34u036UJ35cg34RC37Gf36TA36LJ21721535t035C936fx36NE352M37B31x35jm21D36jU25d25D37bA35JX36Sc36HT35jX37g0378W36ig378Y36iG379036lP36X635JX36Ip22i36Vj359r22t36eC35jX31p536EG36tK379p37H1379f36Pi24A24A37eC37c336Gx35JX37gz36PC36Pw26v26u37H436hg24835hH37GW35jx36hQ2221Z35K721F36jU3655371b34j736sc37jB34j737I536Um37ds37i937Du37iB376636eC34J736uy36YF36Pc31k434ET36KX37by36q1379K372f24434J737iy36Yh37ek37j137j336GQ37j6379Y36Tg34j736tx3670376R35Ca10357w34Rc34j736p927327337BA34l436sc21135Ks21H36ju36E836nm35P035ig37HI372S370T36xd36K737l536Xu24537hq34rC34l436R13755375Y34yU36t937LG36lj37LI36X537jR24434L437GA376F37gC37d037FB36M436N537lu36n837lw37d7373137lc376U374536UM22122337JY37HK36wd36DC37gV37Kd36gX34l437k6374637Ek24s24t37Ka24836tS37cF36kc34l437et36FK374J36qG374N377O24625L25l34J337Mu36Qp37m136z636z837lR36Si36Zc372u36zg1p36Y8248372y37FI37D837N236ns36ZQ36lX27227336W437Ng36QT36nM370036T037nN36FC37Al375437gd36ZC370936ra370Y37gl373036ne37ns37ay36FK35m037Nm21H37b329S2mR36ef2wE21g2pE36Ju26K26K37bA34iw37kT21g34IW37JL36IB37lk36Up37or36FS37lK379237LM34IW37LP37cz37N637Fb37Ot24737OR36gQ37ov37ne373134iw37GO36pC35MV37Iq36fs25925937IU37gW34iW37Mf37C836gj37mI37Mk24Q24R37Iv36KC34IW37mq36qC354j37cl37a637Mv37Mx37mz37AB36s537PA37F336qB37Oi36qy37q537F836r337Fa37Hj37nY370x375b37o234RC37Qa37Fl36zY37O736t037QK36Ds37HC37He34U137l137fb36Vd21y321m37L837LA36w221L37B321535m021L371H23237Ba34yA37OM34YA37op36k037oR36fO37P337P737g737LM34yA37OZ37N536zb37lT345W36Lj37Ly37J437LY37aU37d834YA37pB36PU35Vk37Pe24735dF374037gW34ya37PL37Ip36iE1g347236YK36l137pQ37Ps36Ec34Ya37Pv37MS374l37cP36yZ37mW37mY37PZ36QP37RX36rP36Z736Z937NW37fb37N8247372W37nc37NA37L8378B37sr36nI37Ni36ZY35eQ36T037t436ZW37af36fk37NQ36v337ta36MU37P037rO37Qe370v370a375a37g6375c37tG36nJ37dc36XB37Qn37Tf21M370M370o37rn376I37L337rg354u36wD37p524837Ri37tP37Tw36rP37qR36zy37hf37qu37HJ37qw37Qy36zK37R035mO37B321735mN36jU25N25N37BA33Ir37oM33IR37Rd36Fk37Rf24637rh37U337ow36GX33ir37Ju376v36PC1931ff37S125625737mb37mn36EC33IR37S7377937ek37SA36zF36wE37Sd37Pr37gW33iR36Tx25h25h37o1359d34RC33iR36p936Yt37mR37Ev37mt37AB36s035jM37f037vv21O36P937st37Tz37gE37U136zd37t136wD37Sz37ND36wI37qi24537Vw36RP37T636QB35E436t037wL377U37TC36zZ32vE37wQ37W7370337NU378237qD37WC37Qf37Tn37O1378b37Wr37ql36qB36BJ36W437X736DS31fe37kI359R23937w636P937UB36qB37uD35x837L236xm37UG37Ho37L936im36nE35Nb36p926U26U37bA35NB36sC329E35nB36jU1y1w37fV36Ec336V37OM336v37Uv24537ux37Uz372e36x6336V37V437M336Ib37V737m736Vd21O21Q37NB37K236Q5336V37vg36tn36Gj37Vj37sc36n837Se37gW336v37Vq37vS37l837Vu245336V37VX374l37EU37PX37eW37sL37A724637W437SP36S537z937SS37N437qC37Sv37HJ37Sx37Wg37wE37RV373137zl37T536ZR36zy22428636T037ZW37TB37nP37Wv36v3380337Th37WA37nx37TL37nZ37Qh378b380837TR36NM37xA380221Q36p937xe37L837xG34RC380G37xk36xb37xM35dK37xo370T37XQ37qZ37xt34RC34xU37xw37Xy37dL34xU36sC21b35NW21R36jU366937Dl34MW37om34mW37YC37ye37u336pI37RI37Bm34Mw37Yj377836fK37Ym37s126226237Pi37MC36kc34mW37yV36pV37vI37Sb36wD36Q137Z1381w36EC34mw37z437vT37Kk37xH24534Mw37Za377J37Zd37w137eY36FO37ZI37EX374T34RC382e37zM37sU37LS37ZQ37wE372V382u372X37zt37P836ne382P37zx36lX27327236w43831380436Zy37TE37983837380937zo382s37X2380C37QG37To37WJ383C380H36zY380J36V3383L380N36zk380P382d21s37XJ37hD37uC37qT37Xn37Qv37By37qX37XR37r035OJ381337Ba35OJ36sc22935oI36Ju24W24W37BA34tT37OM34tt381H381J37u236n5381L376536Gx34tt381o37IO36K025b25A37gs36lJ366d37vC37h8384q21U381z36PW27227237en36L137mm385136KC34Tt37kG23H37ki37Z734tt36P937Vr382a37kl36LY21U382F37a2382H37SK37n037W321d37W5385N37W837zn37Am37ZP37WC37Zr382W37t037XR378B385i37WM37ZY36Qb25w25W36qY386837Ws380536W4386F378037wz3783370t37X336N8380e37d8386J378e37ts36Fk383O3798386s244383r372Z383t386Y36nz37Cj37zd387437ZF37mV36o537ZJ34rC386y380s36fK380u37Hh384136N53843380z3731339T384737dL339t36SC22b35P421V36ju359v37dL34RZ37oM34Rz384k37LH381j37ou37V037dW37lM34rZ384s37C736IB37PD36Ie36vD24933N637S4382624434RZ3854382137Vk36Vu374D36gX34rz37si37w0385S37W2382k385v387b24534rz36P9377V36fK35s836qY389037wY37tI37U03708383h37X437t237D8389636Ri386u24535f636W4389F36nS387e245387g24C380W37jz387J37Uh372z37R035PS387O22736UC35ps36sC22d35Pr21X371921j37ba35Q337om35Q3388136Gj37Yf36kA37LM35Q3388937EI36K0381R388d37bY2662673850377436tg35Q3388l36t937yY382336yL382537vD24435q3388s385R37cM388W385W35Q3385Y382r37p1382t37VK37zS386637d838b8386936lx31AU35bu34Rc38bH386g38393806379838bN386K389837wb389a36r9383i37X538bg21Y375F380i23W36W438Bs37XD2XI380O357V382c38C6244389N389p389R37M836pI387K37ui38102453554389y36uc355436sc22F35qD21Z37OD37ku34F937yC36sm370u38bx37jQ36gX34f937dZ371J36QY34f937ry376X22g384X36wD36Cc388h38B034f938AU36GJ37h337yz37H524835Rl37sF24434f938B336qe382i37sM377Q388Y38d837q636Xb35ga36T038Dy37Qb3860383f38Bw36sO389c37LZ36ne38e337X837TT21L36w438ec36dS35Z2371B35R037Om35r038Ac36iE38aE37Ll36gx35r037Rm383e38Bb37Wc38EQ37J437U737wJ35r038d936um35xA38Dc36PI24K24L38aq37Ee24435r038Di37s9382236Vt38aY37vn388I35R038Ds377l38du37ZG37q1388y38f238dZ36FK25g25H36w438fs38e437nv38e6386n389B386p383J378b38fy38Ed37o638eF36T038fY21O22G22135RB36JU35sp37DL34N437OM34n438EO37oS388337P4388537RJ36gx34N438ai37h036k033FI37yN37by35pF38fa37k334n438fE36Up38aw38fH37Vm38Dp34n438fm37a438fo37mv382L387836Qp34N4389137Wt35PB36T038HJ3897380A37fB386o38Dm386q373138ho389G36Nm389J38Hn223383w37QS37hg389q387i36Lj38cj389V38CL358C38cO36eC358C36sC22i223358c36Ju33WS37y724435s837oM35S837yC35YE36gJ38iR36wD38IT37v136KC35S838Gv36pc35la37S125I25I381v38B035S838h536FO35VW38DL37J425125038DP35s837J922K22535sJ38GH227371B34Rv36SC38Ji34rV36JU35B338c9385M34rv37ld37GD375y35Fr36T935iC37Rr37rq38er36kC34rv38d5245373q38JW37M2381P36T1339F38Am36n535Eu38h236q534RV38J824638ja38ax36L1366w37gW34rv36tx25T25S36nV34Tu37Ue37wc380Y38Ck373138kb36nI35v236Lx36pm34Rc38L436nS36A0371B35T736SC22m22735T736Ju250251382g36QE38lK38B5246359i37Q237cq24535T736P921021236W138cf38i636WD37h737wI37R038lv36rP29F389Z36Ec34oJ38Jp22534oj38CY373g38d038e838Af36GX34oj38k8373Q34OJ38F337s836UP25925837Mk21r21p35t038fB34oJ385e385G382b34rC38mO36rP35Wy371B35tv36SC21S22935tv37Yc37JN37Bk37dV38gs36Kc35tV38iz36PU35S738f636FS24p24P38J5385B36EC35Tv38KM26t26S37MK367T37gW35tv36TX37xx37Ba35u536Sc21V35U436jU21a21838il34fv38o622A34fV38mf36Pf38HS38iw36EC34Fv38mm379734RC34fV38Mp36k025Q25R38nN24726A26B38kj36tG34FV38kM25A25b37mK2Nw38mx37k334Fv36tX36v236Uc34fv363e36l937VY37PW38dt388u382J37ZH388X382m36Z324538oq38fT245368436t038pQ38fz37x0386138E736wd380D38G537D838pv38G8389i1y36W438Q436DS34ZQ37bA35US38OE35us38nD37i737bJ36Lj37bl384p36Kc35uS38nk37MG38Ov38Ox38oZ36gX35US38Nv38Nx38jb36GQ351t388P38qM22D38HC37Py38pn38hf38pM38HH36S535US38HK386H36T038Ra38Hp38EV37tJ383G38D138g438bZ373138re38hX37qm38gA36v338rn389m383x37xl383z380V38m136PI22N22l384438cL34MG38iC24434MG36Sc21W22d34mg37y42Us37dL35vE37ji21E35vE38qG376037JO38QK36x635vE36Uy33r336w138l824535vE38or36FK37JX37S137k137Ed37K335VE38kM36HC38kP36N838nw38dp35Ve38n037Z638n238St22F36P935xh37Dl35VP36sC21y22f35VP38jS324I383S38ca34rc35vP38JX36Wx36pu38Ne38qJ38Ng37Bm35vP38sP1738sr36tE38TR22G38SV2452IK38oV21221037yr38t036Q535vP38KM25o25O3858386p38je37GW35vP38ku38KW374i38ky384037UF37BY24G24g37o137R038tS36rp38L636zy38ss38V036Ni38cE38rW387H38UU36n521621438s2373135w137B322135W037OD38Vi35Wc38lj38LL385q38LN38Vo38R536o338lr388y35Wc38LW38lY383y38i438cg36vd21k21M38ve36Ne38VW36rP31d8371b35wo38Tj22F35wO38oH36GJ38oj388636gx35Wo38ON36Qy35WO38u736D837s1354p38dF38Ns24435Wo38Km25225238UK38DM37cE38WT35wO36tX267266371b35wZ36sc22222J35WZ37yc38K236Ie38xe36Pi38xe38OK24435WZ38qo36uM1w1Y38gZ36N52mY38qS36Kc35wz38kM35BG388N36yl385A38aR36Gx35wz38R337zE385t38b6388y35Wz38rB36zy22E22C38bL24538Y938rF38E538EW38PZ37g538E937zu36NE38Yg38Ro36qB37tU379838YP38RT38I338KZ37xP37By24H24h38Uy38CL35XB38S535Xb36sc22535xa22L36JU35yp37dl34ye38X922j34YE38xD21836pF38Xg36fS38xi38WI36Kc34Ye38xM36IB24p24O38OV1c315338wS38y138Zp22m38xW1O38Xy385936Vv388I34yE38y438HE36O338HG37n036S534ye38yA36qB26t26T36qY390F38YH38g038yj38G238rJ38ht38Q23731390l38Yq38ee36w4390U38Yv38VZ38yX380x38yZ38Z1387L36nE34nC38S534Nc36SC389Z34nC36jU3511371B35Y838ZF35Y837kx24437kZ38uS38Rx37Hj37l736WD391P38I9373135y838tt373D36Pu38XG36Fo38zl24738zN38NH36EC35Y838ZR36K035iz37S135RH38zy38fB35y83902390436n838y0392C334P36je36LV37Zb37vz38B437SP385u385W391U38pR361536T0392s38pw386M375837TM38RK389d391t22O38c238rp36w4392W390Z38Rv38w038ry36FS38z038z2373135Yj38s535YJ36sc23535Yi22p36ju38FV371B34FI38zf34fi38zI38zK38zj36Lj392237bm34Fi392636fk22822A38Xq36Lj21521738Ud38dp34fI392E38qx37Ml390638b034fI390938pJ37sm390c37q334rc34Fi390G36Xb24v24v36qY394o390M38Px38G1392z38q138RL36nE394u390v38g936w439523939380t38V838i538vA36Lj393e391534rC35z338s535z336SC23735Z222R36ju38Lc37dl35ze38Zf35ze36ju35i238Vp377L395U38vs36s0260261385W35ze36p938lO395V37A43965395Y36fO38vu38vS36S5396336Rp38lX38lZ395938w137bY38S038w534rC396E36Ni38M836Uc31p438WC31P438Wf36IE38Wh392324431P438wl36T031p438U731rw38OV38sZ38Dp31P438Km26s26t37mK365S397822t38Ta36zK37Z7397336rp35k7371B31N136sc23822t31N137YC26B26a36T9397U36n5397X38MJ36kc31N13941245342738ov22o22q394937GW31n138kM35Tu37Mk362638dp31n137hb38Ru3958393b395b36wd38i8371037R0360c38s5360C36Sc23B360B22V36ju24t24T37BA34sW398u22u34SW396v36Up396x37bm34SW397136v334sW38U732k438Ov26Q26Q38nR38zz36EC34sw38kM35fy394D386W38wT34SW394i38lP394L38lT399d38pr359936W4399x392X37x136XM36cQ36N539a536n839a738eA34Rc39A138Q5386W39aB22W380M38c838tp385m39AC36Ds387437ZC36QE387738y636S1385w39Al396Z2el37DL360y3993360y3996394Y37g637bm360Y399b3798360Y38u735p438OV26926838xT36EC360y38kM35pr37mK399q399k36EP31dg392k36Q9392M38Ph38FN394j37ZG399V382N372S22x394p36Fk25425436Qy39b8394V392y24624f24F36K739c8372c39CB393236Ne39C4395338q636W439cg36Ns39AN392n39ap36RW39Ar387A396C34rc39ck36Ds350Y37bA361a3993361A38Sj36gJ37DT38SM37LM361a398326626637bX36N535Ko392b37K3361A38km35TJ37MK32r638P736q5361a399T392p38y739Cs245361A39BZ24539Cw36T039dS39C539A3390p38Mi390r395034RC39Dx39Ch39ae39Dr22Y38I2391038UT38l03842389u398P38cL361l38S5361L36Sc23f361K37oD38TK361w36jU21M33VA37Dl362738Sg362739D136IE39d338TY38qL36Ec3627398338sx38kg394d37YS36tg362738T336j2394D38T737Gw362736tX25k25L371B362I36SC23G231362i37YC1Z1X37M739fS37VK39FV398036ec362I3983362237s135x439dD36Q5362I38Km26d26c37Mk35xl38DP362i37J923j362s23336jU26N26m371b34G036sC39gG34G0391J391L398l37WC391P36PI391r39Eg373134G0391V375x36PU26526436t939h436N539H739fy24434G038eU38yI38RH38YK3759393139aA36Pv23438u735z937S1364R39G536TG34g038kM382538h836n838Do37GW34g039Dn396924624E24e38LS39Bw39h038pr383a34rc39I739a238py39E038T538dm36wh375C39IB38q538Ys39IA39hL371431h1363E37OD39gG363P39b138MH38Q039B339f2244363P39b634Rc363P38U734z637S122d22f3989388I363P38km226224392f38Dm32k238dP363p36Tx36h936uC363P38PE392L38LM39Bs38Lp38fQ39dQ39J338pR27027036qy39Jv39ic394X39IV38YL39Hi38YN39j2236393538YR38Rq379839K0324x23131kb36Ju25V25U371B34Ti39fN338F23839fR39FT36gJ39fX36WD39Ks38Xj34Ti398336EN38Ov362d39Hq36gx34tI39G839GA394d39GC37gW34tI39I038Hh36s036Z1388y34ti36p91m1K36W135G236W439lF39i838bq34rc39Lm39K1390o389S39f83773375c39Lq39IK39kb39LP23836p939cm39BR37a439aq388V39AS39Le39M1371431PI364l37od31PI364w39iU399839iY364w39j1245364W39j41U38OV39J739j938B0364w39JC39JE394D39jH37gW364w39jk36LF36uC364w39jO39bP39JQ38Hd39bT37Q037sO39DQ39Mn38pR25F25e36w439ND39lr39HF39Ie39k439E239CE34rc39NI39Ly39NH36O939MB2383656371H373O37bQ38Oo36pD36p938SQ38V338u439o138Kc384t36fk277394536wd24M24M399j38Fb365638KM36VS36j4390538r036eC3656372I36w121b21938yE365636P929538iL34dN39KM34dn39Kp39fu39Kq39kT39p338XJ34DN398326226338Ov35AP39ig38uE36tg34dn39l439Gb22m38dp34dn39la39AR39lD39DQ34dN39lG39li36zy39Lk36t039pQ39Ln36W439pw39nj3899391237Mk39ih37wj39pz39nr39pv23C39m236rr39ao377l39m638PK39cR38r834rC39PZ21o36Ea365t37od36Ea366439Mh38G338K536EC366439ml366438U724f24e38ov25E25f39bE244366438kM39ks39Hv39jG2Kj37gW366439N1371B366439N538DQ39bQ37sj39JS39Nb39Qh24539QW38pR39Ow36T039RO39q038Bv39nl39hH39nn39HJ39Rs39q736V339RS39qK23C366e39nx376a36Qy366E39O238U239o436W439s939O7388a36k036f439OB36PI37GR39l136kC366E39Oi390639r837J4392h37k3366e39OP36zY39oR38Ye39sE36ni359c37dL366Q38Sg366q39eY36up39f038D236kc366Q398337j037J2394D36bU38dP366q37j9231367023h37Od39tL34sO39qq390q38Xj34SO39mL34so38u735Uf38Ov332639ms38Wt34So38kM24T24s37mK393Y37k334sO39Pm39M736mA385W39tW38PR25Y25Y36QY39Uf39RT380B390Q38Jc390S36nE39uK38Q538QZ36t039uk21O39tL367N37Yc37G437gG36N5373j39iy367N39Hd390N39Nk39V137GI37gH39rx39K6245367N38U722F22d39Sj36Fs26g26H39R3367n38km25c33b839lu38DP367N398I38yW39EC38YY36N537hm396m38pS23K37B323223j367y39TO23g34Rr39Tr39e138XJ34Rr39Ml34RR38u7319D39vJ24735n639sM36ec34Rr38KM35uY39l639Pj37Gw34rR39Ub38pk38dw39dQ39wG38PR21v343l36v339Wz39Ul37FB37G436fs37gj37O039NO24539X436ns25q25Q37O1383T39Xd386T36NM39hx39x323l39aH37xf38tQ39xC39xO36rP39M3374J39Qe37sm39qG390D34rC39x439Uw23G368j39wb39Iw39Ta36eC368j39ML368j38u735ZP38OV26X26X39Of37K3368j39wp22d38wZ37j439L7388i368j39wv38DV37CO39y024539YC39x039X2379839yX39x537hj39x736n639vb39uo39e339Yw23M36P939Xf39Xh39Xr39z138q539xM39Z039zA36RP38703710383t39zF39am39Qb39cn39Qd39cP39M739xZ394M39z937B339tl34EA39Y639nM38xj34EA39ML34ea38U721x21z39Wj1x1Z39u139Bl34eA38KM39z436Q139uT388i34Ea39YS37zg39uD388Y3a0638PR1O340036v33A0q39Z238ri39e139z739XB3A0V38q538P636t03a1139ZP39N736RV38LP39ZV38lt3A0v39y334Rj3A0139rW38xj34Rj39ML34rj38U735Wb38OV36C139wM24434rJ3A0g39z639Ok36N83A0j38B034rJ3A0M37mv3A0O39dQ3a1k38PR360I36t03a233a0W39Hg393039vc382Z34rC3A273a1235bA3A2623o39qa3a1724639XX37zg3A1a39bw3a2E36DS332A37BA34zc36sc39tL34zC3a1f3a2A38xj34zc39mL34zc38U732rQ39dA36lj35bN39Yi36q534Zc38KM24d24d39YN36Gq39my388i34zC3A1z36O339Jt39rm3a3338pr36aN36W43A3O3a28370T38Kr36Wd3A3V37J43A3V39vD3a3S39S037983A4136ds370n38BU39Um36ov38UM39pD37Ki378b3A3S39y3369q3a2y39v336x6369q39ml369q38U736B537S1351a39R3369Q38km35Q9394D3a1w38WT369Q3A3k36s03a3m39yv3a4M38Pr31lX36w43A533a3T36fO3A3X36fS3a3x36gQ3A3Z3A2C2453A573A2f38ye3a5h3a1639663A1839Do39m839Dq3a5739Y334Ds3a4h39ix36X634ds39Ml34Ds3a4N23U3A3636WD33Kv39r334Ds3A4t21Y3a3F2483A4W39Bl34dS3a4z36fO3a5139ZW3A5z3A0R1P36W43A6i3a582463a5A2473a5C2483a5E37wi378B3a6m3A5I36T03a6W3A5l387539Co3a1936s2388Y3a6m39Y336aC3a5U39y824436aC39Ml36AC3A603a6236PI22s22u3a0D38fb36aC3A673A693A6b3a7l23s3A6E37sN39i538Po3a7e38pR21F21D38Ye3a7W3a6N3a6p3A6r3a6T375C3A813A6X36v33A873a7039Qc39m539ZT39Qf3a7439dQ3A8a24435T6371b355038Sg355039t737i838NF3A7A355038U138u336W4355038u739f636up36vD397737GW355039FC3A6937kc38b0355036tx25v25V37Ba36aZ36SC24823T36aZ37YC398F36gJ3A9K36WD3A9m38xj36az3983365h38Ov1g2i63A1P36aZ38km25E25e3A6925j25j39Om24436aZ3a7s39Bv38pO36Az38b938hq39Z33a1T39z536L138hu36NE3AAA38bi36zy34c936t03aAJ38bO36Qb39I92453AAo38Bt3AAC3A0X39y739k53a5F3aat39XK36Zy3a1336V33AB0386z39ai387139XR3aB538V739GT39Vy38i739Ef38M438cL34UQ38s534uQ36Sc24B36b9378N243371b34Yk3a9f23T34Yk37Yc35Zw36gj3aBW36wd3aby38XJ34Yk398326h26h3a7G36FS33lv39r334yk3A4T21Z37mk36yn39Dk36tG34Yk3aa738R739yV34yk39dT24I24j36W43aCl39dY39ID39b238YM3A5f3acq39cH39zH34rC3acW36Ns22l22N36W1374j3AD235Bu39AR367x385w3AD037qq398j387f396i393C247398O3ABG373136BV38s536BV36sc24D36BU23X36Ju35ek371b36C63abS36c63a9J23136T93a9M36Pi3a9O38zo36EC36C6398335hS37s136aJ3A1P36C638KM3aA23a693A3H38b036C63AcI385w36C639DT3aDt36t03AeL3ACr39k239Z439X93aaH34RC3AEp39Ch3Ab337983aEW39573AdE3ABC39Q23ABE39W134Xr38s534xR36sc24F36Cg36Ju351D37bA34W53AbS34w53ADY3AE03ADZ36lJ3Ae3396Y34W53AE7341i37s11H1g39r334w538KM21N21l39JF37j43Aeg38Wt34w53AeJ388Y34W539Dt392u36V33AG73AEq39ls368X3Aae3aET39up34rc3AGb3aex3a2G3AGA24039EA393a391139Lt398n3Abf37hP38cl36D238s536d236sC23L36d136Ju3232371b36DD3Abs36Dd3afJ3a9l3Afl3a9N3AHa38xj36DD3AFq3Ac624735wU3a1P36dD3aed3Aa339mX39rA388I36dd3AG539dq36DD39DT25x25w36w43AHT3agc39v83AgE36n53AGG39Z83AHY3AGk38yE3Ai53af1389o3aDF398m38cI3agT37xs373136dp38s536dP36sc23n36dO31vp24H22i22L35b836e838wr34fv35eV1i36fK255254350I36fO31hM3aD737q32my35g736E835at37wi353P354N35C927C1c32r11135c934uc2al22c35F71I36Fo3aiy350i36FS3aJ2350w34Qi35G735g73A4Q1034Kd35c93aJ8366j354M3aJ535G8103aJE35B835g736zX34fV33XU1i36Fs3aJo353J36Gq3aJr34CM388F34kd34kD3ajW36gv35g73aJ834KD3AJA2mY3akQ3ak53AJF34KD34YS35Bc31eC33b52483Ake338Z23v2493AkH22637C036GV36gv3ajW36h034KD3AJ837EM33wK354n3aLF3Ak61136Gv34Wl35BC35Hm1i3Al43AL21823S24a3Al634WD36H036H03aJW37iS36gv3aJ836H03AKr103AM33AkU35b836H034w93aJJ31WK1I3aLt3aLr23T24b3al634HQ37is37iS3AjW24b24B36H03aJ837IS3Am43AMR3Am71137Is3afe35bc35It1I3aMg3ALR23Y24c3AL634T73AMN3amN3AJw34p337iS3aj83Amn3aM43and3aMU3Amn350q3AJJ34iW1I3AN33alr23z24d3AL634OC34P334P33AjW3a3d3aMn3Aj834P33AM43Any3amU34p335823AJj34ya1i3ANO3ALr23w24E3Al639qy3a3D3A3d3Ajw39I334P33AJ83a3D3aM43AoJ3aMu3a3D39Dv34Fv34J71i3Ao93aLR23x24f3aL634vr39I339I33AJw39c83a3D3aJ839i33am43aP43amU39I334kS3AjJ34g01i3aoU3aLr24y24g3Al637ca39C839c83AjW38uw39i33aj839Cd3ak21039Cd3alJ39C839T234FV34ti1I3Apf3ALr24Z24H3aL634jB38Uw38Uw3AJw38z039c83aJ838Uw3am43AQb3amU38uw372p34fV34dN1i3aq13aLR24W24I3AL624J24i38Z038z03Ajw34U038UW3aJ8395d3APQ395d3alJ38Z038Vu34fV34zC1i3AQM3AlR24x24J3Al63AcN34u034u03ajw34VN38Z03aj837Ud3APQ37UD3alJ34u032A23Ajj319g1I3aR83alR25224K3AL634dD34Vn34vN3aJW34V134U03aj834VN3aM43As33AK51E33fI34XN27c1U32g61134Vn3A2S35Bc34W93ArQ24j368T2mY367f3aR824y24y34j33acn34vN35Q335zH25324L25825834J338f83Arx24j21L21R34yV24l24l359X35Bc35q934zG2My34Vn3At62hT3Asn3ASp350w3asr24J34MW3ASU3AsW3ASY350w3aT03ARX3At335B83at635C335Bc34mW358A3aTD24l3Atf24J3ASO3ASq3ArX336V3Atm3aSX3Asz24l3AT13ATS2fI24l3a0s3Ajj336v3aTy24j3ATE1l3atG3aU434VN33iR3Au73ato34cM3ATQ34vN3AUc3aT63a3835bC33IR3aUI3aUK3aUM3aTi3aRx34Tt3AUQ3au93AUb21R3ATt24L35Co35bc34Tt3aV03AU01135B834Vn35D135bC31yF3aSi35uB1023122Z3AvI24j37s334Fv3AsH3AR83AT631Es3AVR3aSd24j35dS3avL183aVN22B3avZ3Avs37wP34fV3avm3aR82Hv2773AsM3au23AtH34CM3aTJ2z53aV63Atp3AUa3aTR21R13153AT635Eg34fV34iJ3ao334wL354P31yf3AvF3AU1367B34z13ATj35wZ3AWM3aUs3AWO3AUu21r2R93at637T834fv35vK39Cw34Ks3Ax13aul24J3aX33Av334Vn34ye3ax72263AUT3AT23aXb133AT635f235bc3AXG2a23AXi3atC3Auj3Au03AxK3axm3aWj3aRx34fI3Axq3axs3At33AXc24l35FD35bC38Lr35d134fI3AxJ3ar83Ay62263AtJ35Y83AYa3ax93aT221n24N24L35fn399Z103atZ3ax223I3ax43ArX36C63aYQ3AV83AT524L399o34fV36bQ36aZ3aYK3AXL3az13axn24J34W53az53aWP3AvA38E13aZA38C43aY23aV13AZE3az234VN36Dd3AZj3aXA12143at635gl34fV359c35d136bQ36dd3azd3548350i3aRT3542354D3As53aPQ35T734Vn34Zi3AR825t25T350m321z1034V135t73aJ83At63AT621z31yu1026025m326o2fH1034L835T7391e1038np3B1123D25424Q35A725o21724O25z25h27S21k24R23L27S318C24s38iK350w39u536hI34j735ZH25b399029E34cM37mI36Hi36hi35Zh25824U3651350w352e3B1x24s36W31036HI35CP3b1s38N6350w37mi398z3B1y22T3b2038qb3B2334F124u398z23b22E23b22f24u24V36QW355K24j24X36rL34Cv394R24X24X2ao25A352E24u36OH2213B2038oa35bU3b353b2m24t35zH25924v374X2323b2q35A13B2u22b24g24y3B2Y2mY384E3ASo34EH3B3o22q22o35Bu376p384e384e34ht3B3O253252352s3B3S24Y34eH3B2w36kk34hE3B4024w351A35a134F1394r35NO3B203b1m34cm3B3c3B1Q22T3B3g35ST34Z13b2s3b2L24u398V25B24U36Hi36fa3b2037kH354D394r37xG3B2S36HI34f13b4j24u3B4L2263b4N21g3B3F24V3b4R350W3B4T3B2L3B5F26826934DF24I24W36YF35a1384e355W3B2w36hF3b3o36wH36xD3B1524M25036pM358w36xd37EA35re3B6136wh384e37eA2eq3b4g3B2S24v3b593b5B3b5d3b5f3B5h34cm3b5J34F13b5l3b5n34d33b5p3B5r3b403b5u24x3B5w24Y3B5y24z3b60250396L350w38Jd36Xd36xd35yb3B6836Te3b6424Z37ea35MR3B783b4624w3B6B1s3b6d3B4i24U3B1B368127S21F26j3B0w1023O23q1234VN3aNO27S21127025N3B1J3ayl3azf3ay734vn34n43azv3axT3AYd35Gx34fv35tf35kO332A3azD3b0I352O3ART3b5b34DD34V13b4o3asv3B6k3axr3B8L34V13b2o22322Z3b8r34UG38f834v127C2152162gn26q268326o21J22k23h34L83b3M3B1735pL34L834RF1T2492XS34l826p26b27s1o26r26X3b1J25624o3AyM38zT3B9a24n35ZH3b173au8350w34Vb34L834l83at334yV34RF35H734Fv3a2S36Qw358a3b9e24q34x81039OD27c1r24f3b7U34vN26f26T3B7y25y2693b823azr3AzG34rZ3B883At33AvH3At637J63ba827X3aMa34MW324w21o1035NS35P034L43AX11524H24j3aE834cf3AR826x26w3aSL2333bbC395U3bbF24j363P31Es3bBk24j38k23BBn36dv3avP3BbR32p03AsA1C3ar826Z26Z35cB3B833AZs24J35r03BaV3at4123At6392834fv350L3ax03aZP3AY43aSv3B313AV724j319G34hT3aSV36Yf38F83At6355W25024m36HF25124n38t422l3b9R36Hf25724p39u5352s3at638NP34eh3bcU36rT3bcX26l26k34z134n839oD39Od35zh3BcX22722535BU3BDg3bDH3bdJ24N36RT3B9r35Wj350w38zt36qW36QW35Zh3B9R3AQP34Z13BdW3bdX3BDZ24o39GX3B13358l38Ca3ay238Np3Bae29f22f26a25135J82M23544358a29f38xs3aaM1034Ju38xs33cC31p534cA33LE39VI29F32cX2DY22g22c32x231t233wA337i26Q32pM1034AZ31aF21H331u33791O33Tc29F1P31ar2fy322Q2tL1H23g32YQ2l5340M29A31eQ2bQ22v32PT25l33IN3bf833oA326a2yd2yF31w031w22fe22F1x32lQ2y82ya326a33oc2lW31CA28A23b31t02Al31T22GW2GY23A2hP3beo34cb2x3325f2CU350121032g82Qm355k34DH38m834CV355P21o211355U3bgw34uh1036zX34Zi338z3AmA35603A0C357935ap2cX34ZH22R34Dv3beL350121233Mh351K35073427351K1a35zH34e03BhK21N21437V7351D1B350734283bHz1B35Zh34cF36v234cV3Ao337Kk22U34eD3Bi7351n1835152NO326H31x8143aJ82Qm356x21O2152eg355j3BH638WR37zI3bEe22g32Lq27C35Di310624s33f622V34dB2a934V532W034M52bY23033D631Vt23d2dy3beL34cB31ld123bel35723Beo21D1g32kv33pH33Ph355k34ct3BeL22722135B835442aL3A74358a33Ph32ns355q3A0c3bjp113bJK33ph2fr380n3bEL3bet2m222F22A2OV33CC3BEn33Cd27M27C36ZX3BjF3bIY354x3Bel34U83Ber33PH23b26r352x33pH38WR239317734zW34sh3b1U34CV3bel34LK3BEu31d53bEW34CB34Cd1025y33I621133zI1D35xB22l22923532B93BJ32cz22T2Gg3BKN2nq31GO3bJP31B822B34ct38M822536lh29f3ayx3bk12V43biH3bL534lL3bKd3BKF3bEl33q02BQ21a34Bp311O24k32m52NL32N1326A22p321i33421333SQ32mZ319732Tf23C2F83BlR34eZ34CH3bhV3BJO3bJP355W34Vy36sZ36PK36sz34zI34Cz35bb35gv2Fr32ns36Nz3BEl34v43bER2wR313Q3Bm82BY3biy2eQ27c25D25F33832181C25n26h338321C22021n21w2Gg2142371539S423A121p33dv1031DY24R25N1w341J341l132Rs341o27c22H341r2BC13341U341w341Y34201a1Q24333F63bnV34F924332J931vc321P1L347b31Es2oc33Nj21C23531Yk10341K32MB1322127X21V2Gn1321v22H2x332pP28A22335Ba21W1R22235Ba22932MP32L93A0S227327v22h21L32rH34782uW1W34351l31Wl26e32Br2Nl2cZ26832Vj27c22m21R32mp123Bpk313l2bb3bPJ217327b32aw2BT33603106311J22h24Q33NP33j432N032Os192103BMP321Z31Af2a71n31ZS330Z33mh26r33He339G33FC32mq33fF25233mp31u325r26H2602c72l52101Y1t32jI2aw21P2gx1926w2422By33j534b1326I323Q2ke3bb51433NL1H34g13BFt32PT22332E931872Hg1P1J26q34KE27C2792CU2F73bp41b25A33Ay1021P2413bj23Bj41C37R83BgO3bko3BNf31Au314G38BK34Z93bT236sz3BKR352T33PH3Bt738Wr3bt73AjI103bIl2by38DK35443a9K36sz3b5H27c350B29m1G36sz355k34d538wr34P116396B34cv28h37xG34z72I128R3B9h2BU3BoM32F11O192Nk1X21M1R3BtQ22b3btS2by3btu3BjT34Cv2DS34Uc34VU29E350b23634292dy1m21J3Bub3Bud34d5372p3BtU3bi935gv3buk16355q3BUu2Ds33813Bue34yu2bq3BTU3AuF354D3BV1355Q21k32vn3bV53BtR153bN834z2352A2QM22422731fY22U27c3BUS3BJM28h356322b34DQ3avc34cX34dV3btw351c357U358428h351D3B9g23n1731Yf39281037J634zx3aP935602171a2cx356322o21f1I351d28H34iR35093bhy36NZ3akx22625m2XS28h373Z32qw21B27C35fL31yF3bX031mH34ZW34DQ3as935603bJM2CX2cX35Ap34w92fr3aJ8351D31yf3aJ82cX3Bw7249352X2Cx373Z23933ng3bX82jw34Xo35013BXc3Bxd3Bxf2Jq113bxi1B3bxk34JR3BIi3bxN3bxp193bXR2213Bb53aAM2cX35102223bWn3bxD1934Ir31D82FR2cx2191c3BHm3bwk31un22B34e03AMX35Gv3Bxm31ZV3bu32CX35s333Fg22J21V3bXu3bWg338z34DV3AT8350121g1l3BHr355k34Cf3Akx35GV35823bY538Zw350R1c351M1034W9350Q36NZ3aLM3bWw23X357j3bz21Z233358D2PB3BX93bXW21N3bxy3BXE357s34W934ZH3By63BxJ183BXl3Bhy3B9g3by93bxR21339Fd319f31y92Mn36pK3BXG1222I23F21E2wx3bHo357s351d2Fr3bT7350q3by52jP2cx350q22425K2xs3bxQ3BVR33FG21t22h3bX32xs34W93BX021u32mh31xE3BHy34W922X25p24N2gL1B373Z1k22022k34ZW34E03BxA35012963bI335ap350q3C093Bw327C37zi351d33Ph22z3bYH3BWo3BHz35P834cf39dv36Pk3BZj3c0c3by63aNi3alG36NU2nR33wq24p352X2Ds35fn21121U22V34Zw34cT3c1w340K2GK3bv535ap32NS3bHH34D53BgZ3BU02qm380N36SZ3bKC3beE32ml2m23btD1p1q3106337924c32Yl313Z351c2cz2603Bfx292336m336o32Jn312Z21J344g2iH2KQ33Nj1Q24f31Zb33463348328k11334b332w1832nn31Eh33Ss31vx2Ag22X2Mn3bmv319E349Y2by3501339f29e355w34ch3BVk34Co33833bT734z92nU21O1Y314G33cC356e3BH33bk5356e1w3bK53bk621Z35B836sZ3Ajj3bIy3BEr2dS3BEd29e22F22B33Oj34Ca3BxA35KY3c2433ap2613BRH2b532RF32MB345S31aF21431WI2wM21R33Mu2It32np32NR32nT18337t3c3y32d026U338732nx33XZ33z032f0349q33FD32mr33fg32Mt33fk316726m335O3bg92Yb3Bg12N522338OB312w26K3bQ9337923232v531e41422n21732rX22b33891b33eh2Fl3c611732nS2vn1126R3brX2DK2DM2dO26q33cM2iu3BF3320121P33t23BFY3bgA193BGC33Oe28A26V34Rg31Tk26k34bG2M221a21L33FB33Dh33fe32mS33fi2qm31v32a723521T3C5B2m234Ez27S3Bi91q24e37Gh103AyF23933a73c8e3C5b35zt3c8h2ZI34sD2M23C0q3BGu29F356E3c8Y3c4N2203c912cN3c933BNJ2fm27E31Dr356e21A3biX10355k34vy3aMx35013BWi2fr2Fr355w34cT396b34Cy1436v234D4153c9O34Db3buI3c4r3bul1F34CT35bB3BXx3BTp3C302203BHX3BV513355w3BN7338335013bIP352614356e3byp3CAe355w3BUw2NK35Gv34UC3bTz29e352J28a3c8W23f3C943c983CaU3c502Bq2cN22G1Y325L350Y2122112gN3Bb327t3B0Y29f3c8s3BLG31ES3C8V29F3c8X3C973C903cBH3C963c8z3Cbk3C9232OR3cBl3C9c29f3C9F2FS2DY3C9I2s13C9K3C9M32S02B434cX34CZ3C9R34D53c9u31DR3BN92Vw3bV23c9z34om36Uj3BJM3ca7356e3CA63C3032x834Yv3cab34Hl2zC35263CAg1c3CaI23F3CAk353n3CAn3bea3CaP2Ik3cAR3CBF3cAT3cbJ3CAW2203BH33C8Z22g33NH27C3CB32133Bl722f2282gg31DX2It24S2K533953c3m1n31aB2cU337U3c3z24I347J3C4333193c453c47334D23632Ni33Sr33St31vy3bF62bQ33xy330T26X3c7f332v34am1m31B62Dy3c3Q31z73c3S32jO21J29h27c337922S325l3C4h27s3BN321n3BHm3c8z23f34cH3BTD3cc727C3c4t38bK355Q3C543bEl3c533c553cBI3C522203c5435bB3cf33c9K123cFA3CBX3Cf735Di3CFE3bH33cfb356E3a0C2ds33Ph356E32KV3Ca721t31w11238Wr3c5a3C4u358A2DS32Mu3CcY3C5F2292lZ29e39T232Kq3Bg83BfZ3C7s33od3BGE34CC2eb32SV3C6Z22n23531w13c5t1o21v34BP3C74338A3cE233u632y01T2312vl3bgI2Gu35nw28033Ik1125c3A3E3c7Y32P92m221V3bNy344Y2pi3BV21M26M347Z312w21i32b93ce41723B3c3G3cEj343721b32HG3CDo32D023626Y22d22g1z24F21B21E233346F34bh33RO3c6M3cG83C6P1923e2Sq3bSY3bKP3CaS3BYP3CBL3cIc3C923Cie3C953cIg3C983bWi3cbL3CAu3cbS3bhv21631ff3cBX23F34CT3BuZ3c9P377V34d539dv3btu374x34cV2fR3c9Y3ca03CCK3cFp3cA43Ccg2ds3CA93ccJ36uJ3C9C3CAi2203c4X3CcQ34D53cev34CV3cCU358427C352j2Bj354E338Z3Ceu334T34CV29F3Biu34C93C0q3bIp3cBR3bh63CjV388X3BEe3CDD2M236Zx247348m3Ced336n343c1p22T3c4b3Ce02ag22321q331733473Cdt331B331D312y3chj3C3H3437237321N3chP27Q2xc2eW3cDk26u2432nK33181M3349321Z3cDv32SP22a34fr3CI93C8G3BEO35013c4x3cEs3Bl2353n35BB3ceY2fR355Q3C513C4z2203bK43bn03C963bk53CfR3C5831063CfV3bk034cc2I13cb43C5I3C953clq3Cfn3CLS3BJp3CLU3ClZ3bEL35uN3AaM33pH3C5D3Cm13Cf23c993cf63bGu3CLt3c573cLz35bB3Cmb3cLY3cME3Cln3C9532or3CMi3BKG3BJQ3cML3Ca73cLX3C5C3CM03cmr3c983cmt3Clr3cMJ3cm73cMX1335C134fW3cMc3CLz173CmF3CLo3CN43cm53Cn63cmw3clV3aIT3CNB3CmP3cN13cm23cn32lZ3cNi3CmV3c563cLV3Btd3cmo3cn03CnE3CN2356e3cNH113cF53CN73clv3ak93cNN3CnZ3cnf3cMs3CNS3co43cM63cnK3CLZ3aKx3Cny34c93cMQ3cnq3co23COD3cO53CoG2Ds3Alm3coj3CMd2I13Cg033LE3C5h3BHB2PB2B42Cj2iG32X331673cgx31cm28A22y321N31We31Eu24Y33Se32BA338A345R3bF8345t35a4324V34BI23i33Kr3c6n3Bg02ye2n523y33Kl337926524Q23m2KU330L32z732Z931Ft32Li311A343c1721c2243cG73C7r3c7t3cGb26I345229E3AVq3Cdn3c6634AW33R0316h330n2ZR35nY2m226831U733zM32V63C7021i34gM33sr22Y3c5s318m3CgR21G35oE3BMv354X3Ccz3CII3Cco3CId2mN3C953C543CBl3CJz3C923c4M3Blv34Vy3bz73C2y3cfJ3CiS3Cn93bv93c9P3bYw3C9s3CrR34dB3ByW3CJ13Cc834Eh34ct3CEP3BWI3cCe2203ccD3cCh3cc231063BgT3BV835273CLp3azX3ccN3CCR32Cx2c73CAM2LZ3CjM33pr2Ik3cjp372P3CJR113ciy3CJu33AN3ck329E3c0Q3CR8323F3cRB3C983cSW3CRd3C923Crf3Caz3Cd73BLg37713CiB3CsY3cR93c923BHX3CBl3crh3c9E340f2HH32Lq350132or3CrM34Ct35443cC132KQ2dy34Jh153CrT32Vt3Ctq3crw3cj33Bv536uJ3cS13cA43Cs43cj93cCI3cep3bgu3CJe3A0c3cJH3csf3CCt3CSi359E3cJN3csl27s3Csn31b13CSp3csG3cSR3C243cST3cEx23f3csw3CSW3cTc3c4N3cD62gG35823CT73Ck43cde27c372p3bj12bq3BF91O21h32B932XZ32y125125E3CKr1i22H3cGM3C7523I2143Cqq26k27225J31wd323N1m26724u34802133CQE2m227c26j32N833O93c7R3Ci51822Q3CQa33oB3Cga2tw2393BQ929l26U22c22Y24T343G3CpB22c1v1z3Cp331T23Cp63Cgz26K3cqT3CgF26C3bMh3CkV23132A5330l3cQN1933PF3c8q34cb3cR63Csu23f3CBq3C923cX53C953CX73CaV3CBJ3Cr822g21M2Dy317934Iz27s3BhK3cUI3bHB35gv3Ck23bl73c0q3Cx93c9B3c9d3cxr3CiL3CXb3ct922035033CBr3ctg3C2e21n3a0c3Ctl3bU134U2143cIW33r337aF34DB3cj03C9X3cC93blX29e35013Cj83cA83c993cCE3cci29f3CAC3CCm3csA3Cjg3CsD34d53cTN3cjk3cuc34CA3CAq3cDb3CK529F372P21a336j3cPP2yc3cpR1924k337c3Cvz3Cw53bGD2tw25E33f63cv421h22d3CWk3CGW33iJ316W23d1N358S3CVS23N39d93C7Y26h34143378343726r3Cqf27c1P3C733c753C643CVn31fT1M22l336z3CQm330O1933Vm3cI127033sQ2JF34902dE23Y32J93CwT3c6y32v721I3Cr03Cv81t22f33v13CLB3cx23cuO21b2C73c953D0Z3cbL3d123c923CiK3c923Cxy3c923CLF29E3cbS3cRK3bHm3cY43c2j3CTo3BZh3C9s3D1i34DB3bZh3cTw3CyE3ccb35603c543Cs23BGu3cYl3Caa36Uj32kV3CjE3bhx3cU93Cjj2MY3CJl3cUD3csk2hT27s39t23csO3D2133413cuN337023f3d143d113D103C983D2F3cIj2f83C953D183CAZ21H2bQ351d3cUX3C5f3cZ029e372p3bdU2m23aVK317t22723I33S33cgv3cP53cZM28a3czs3Cvj26H2613CW43bGb3CW6316W23P3cPu343726331643cge32v726R3cPE3d0S311E3cWw3d0c3D0529l3cqj3c682bq3Cgn1b23G3bWo3cZb3cpQ2yf32883D062De327r3cPa3cvo24a26h2473Chd33sR3czf3cv33CpJ2263d0v3cR53cXO23F3CUs3c953D4o3C983d4q356e3D2n3CsZ3CXw3a0c3CXz34VY3btd3CS83Cy43BJT3C9p38M83c9s3D5534db3c3538BK3ctx3D2821N3Bh33cs23c9C3D1U317836Uj3cip3cJe3BWI3CU93bId3Csk3Cao3cUE3D263bh72GG3CSO3D5o3cXN3CAs3d4S3CA52fL3d4p3d613C983d4u3ctA3caz21R2c731Yf3d2S33le3d2U3Cv02nK3Bmd3d3X3C753bFW32RI32HI32aE32rL31FT2la3cvV3am53C7X33q931U73CPZ3C7Q3C6O3CZ722P3377337925233fo3D0B33MK3CPl2272143D4E31eI3d4G3cgq32Y122i3BG73D423cg93CZd316W21B21T26j341E3Cqu332T34BP3CV42383CgU3c7L3cZL3CgY316w2193C3W3ckV2603CWF3cvO2283d4K3bL73bKI3cx33CXq2203D893D893bJm3Cbl3CT13d2g3d4y123C2j3d513ciR34cT377V3d1v34d334d53bN834DA2DO33833CC73cTx3c8I21N3Cu03Cj932OD183D5h3D8X3Bh33cJE3D1X3CYs352a3CuB3d5q3D253cJp3ALm3d5V31063CXm3CSS3D4m3d8b3CxS3D8A3D9L3D8D3C923D8f2FM3CxD2DY34UC3d6B31D53d6D322S325L25f24J23P21h26Q26x32Ur22a2323Cvc23733E73d341b3cWM316W21S32e92eW33Gm23A2oN22521J265336f23Z2723bNO312w22W34l53C7y25933Cg31xx31XZ21r31Y11132LD33UI32yt33GM344k33Q931tz33qd3cGj25d3bfx3cz53cI53cgp3cPf1b22p33q03D3l3c7024w23x3d3c3d7h3c7U1126x31y43Ckv32M03D6Q2aK2Bq224211338a22334bP27E31V32fA3Cx03bSZ3Cas3d9K3cbl3bWn3Clg3ClZ36uj3Bhm3c5223f34Vy3alm34cX34CT3Dcm3c9p3dcM3BL4352Y2aO3AfU27C31YF3a1M3DcB3d9L3d8931wP3CbL3d4X3d1B3CTg3D8X3Cf83D8L3cRO3Cy639t23CtR3d57163ddC3d1n3CRY133BhB35013D0Z3d1S352A3CU334Cz3Ddk37b534ut3ccn3cSx3D203cjt3D223CYW3CcW3c5e3d6c3cuZ3cSk3bNM33oh354V2w72qM2QO31tC21732hG3dAI314126O31Ce32m221233ar2M831xY31Y01524p3d0M3cQJ333p31Z331xB3DB6314121q2Ig3d4l3CAS3cd43C923DF13c953cTE3C4O3bLu35603c4x3DcJ34VY3d8r3CJ43cY63C4q34C93bk21C3dCv3C4J3dcY3BEe3bkf3C3d328A3DB432YR1c3DEv2DU2343c3W3dEe31uh3DAY3Dem3Db11525i34523deI32M43cQi337V22I21032PF32Z633Gq33gs23j3DEy3D863D0x3d2D3Df33c983dgk3cbi3DCf3BHv3cm43co43dCK34283d9G22l3crz3DGU3cS6353n3bM33dcU3BEu3dFL3c5f3dfN29f3Btd3CqH3D3u337v24I33g63dFr3dFT21t1T336z3DaZ3deN2303dAh32YU24x33Cg32rJ27I26U3dg431VZ33qx3dC93CiA3ccz3df52203DHy3DgM3CeT3dCG3Bhc3BJI3bn03Dgs3Btt3dGV3awR3BUG3c9p3Btt3DCS3dfh3DFj33PH3DH333le3Dh53CcW3C1C29F3dei24R2693DET32Ys32yU26032j931aT28732m0328A32YU34mL3dG73C3Z22i3dHH3dg031y12273DGg3C8f3DgI3c0q3dgM3cD33caY3C983Dd42cn3DI23cu53cNu3bN1338334D93cyF3cy63D593dh03DfI3Bkh113DiI31d53dIk3BKl2gg32jK3ckk3c443cKn331e32Vn319b3CKA3CEF312Z26B2nj3cds3CL43Cdu334c32SP23K3C3K3CDJ31C91n26024v3cvc2683bQW3CdZ3c4d1625L343g3CkV2253CLa3cen3C4j36Uj3Di13bmx33CC3CEw337034u929E3CLL21o3CN43Df434c93Cm53df93co63dI33CMZ3COk3cm03dLc3C983Bmz3dLf3C4y3COQ3c4y3DlJ3COU3cne3dlm3CfK3dI53DLP3cmk3ClV3cmn3CO93DlK3DLV3Cg33DjG3DlY3cOE3Dlg3DLr36sZ3COT3Cnd35gP3dM63Dlx3CF63dmA3CNv3Clz3CNa3c8e3DLU3DMF3CMG3dgq356E3dMJ3CM83cFY2ec3Dm33DMo3dLw3csb3Dmi3dlQ3DmK3bV13dlT3DMe3dmz3DMr3cjf3dn23Dmu3cy535bC3DMN3dN63Dmg3Dn03ClR3DMT3cN83cOi3DmX3dNF3DMq3dm83dms3dnA3cn83Cos3dnm3C5d3Cow31d53Coy3d2l38vU24s3D823d0722y3cwV2B53cQ62483Dkj3D7431D83Da83cHl1I21g3CGI3CPi31aF32c13D3026y324V3d013bFi3c3x337V26u3DBP3D7g3cQC2Tw22Y3daB3d7U3D353D7W28A26k31zm33km344I24x23k3cvS3dau3CVj22a3cGd34Ab3cgF24E33F63D3Y23Y3CVy3D6W3d432n524x25w32xx33SX3cR23CR43dgh3D4M3Cer3c923DpV3c953Dpx3DLN2m2356e3D163d623D8h3D8X3c4X3cY43DI834Cz3cEv3C9s3Dqb34ub3DdX3d5A3d1o35443cYO3cs23cIp3D5h3Dqi21n3cJD3ddU3D0z3CU93d1g3CYv3d9b3cJO3cug2nk3cSO3DQT3bl73CJw3CUO3dPz356e3dr42203Dr63DHY3DQ33d9r1X31x42fr3D9v3C0Q3DR63DR63D9Q3cCf3d633cBS3dq634oM3C9l3Crn3dq934gL34ud3CJI34Ud3DqE3Cli3CrX3Cca3dqN3Bip3DqK2GM3Cs535263CJc1f3cJE3DQR3D983dR03D5p3CcV3D5r3CSM3dqy3cUi3Dsb3d5X3CCz3dRh3cuz3CF33Cd53DrC3C4U3D9V3cDC3dE3372p35CM3Cvv26J26C3DBq3DOu316W3cP93d4631eU26521g3cLw2IH31ap3DO53DOa33j733aA316i32z8323n26f23Z3cZK3Doz3cP7112193DoG3D3Y2703d6s27C3Cqr31CX3cVC1q2333cVS3cqZ3DpQ32Y121J32nw3d7o24Y23L25z33Vh3cv424s3cPo3Ci43cZ723g3dOO3ckv3d0u3dhV3D873CUo3D9o3C953DUl3c983dUn3dLX3CXU3cd52bh27C32nS3cXH357t352O34Ch3d5w3D9i3CAs3dUP3cs331x43dum3dv53dm73dUR3cBN31Dr3cBs3D8J3BHw2PQ3Dd93d5534cZ3D553c343B1u3d8S3d593cJ23d1O3Cy13d1R3cA43d8Z3ca83cci3cy13DQp3CsA3Bhm3cU93D1M3ddY3DQv3CcX3CYZ3dsT2Nk3cY73CvC26T3C693CV421N22E25y3cQL2VI3CwX22D3dT7103cQR1F3bo734BI25u3DPC3D7o21g321I3cVW31d43D0s2183cHo3CQJ2513DUB3cW03cZ723Y32Jr33IO2jG323n3dKv3dT31M1U3cw33doT3d3E3DP13dTI3dAc3DaE33il3DpG3C7532563CvS2253d853DJa3d4M3D5z3dXU3d633d663C983CIP3D133d2h3Cbs3d5031XD38bk3dRP34cT3drr3cY8377v3CYB36QU3DDH3cCA3BHv35033Cs23cu23dvU34cZ3bHv3D5M3ddu3dVX3CAf3cSe3cyu3dw23DsD3d9C27s3AKx3CsO3dYr3D2B3dXt3dxw3d603CBl3d5Z3cSW3DxZ3CUT21F33832DS3dsR3d9X372P25Y3CZW337932Tb3D4H345u3bF73D3Y3DBK2By3d7O31Z624731y43Cwg2623DpJ3dBf3Dx43Deq337v3dwy3DXB33A63cVJ24o3Bf73D0S26O3cqF34BI1J33o83dpK3DBR3CgB23P3DO93dWh3d0C2703C5P2fY2IF3dxJ3D3633ok358t312W3DXQ3DUI3djb23f3DSl3CbL3Dr63cT33Cxa3CBP3c9D3Cbs3ceP32kV3CY43cRR34cz3CIY3c9s3e1834dB3CSQ3CYd3DdI3Bhv3bYP3Dyh3cA33dDP3cNQ3CtJ36LH3DDU3cu83d983Dcr3dYS3Csj3DqW3BZP2f83cSo3e1Q3dyZ3caS3e0v3dpW3dsm3D913dV93D2o2Bq3cUW3cDa3bKD3DZC2Nk3Am632xW2xc3DoA31v53dw93dxI3doY3DaD3E0n26m23k3DO13DXb26C348M3DHp3D6N2De25L3d3K3DPd32v71s3CVF338a3Ceb3D7g3cI524k3CPE3cV421A3CQ93DxF3D7i28A25433VH3D0s3DHr3Dj232d0335m3CVs21723A3cVj3CI03d3024c3Dxr3bem3E0t3d653CXx2Ig3d2m3E3W3E0Z3dva3cBL3D1A3crI1236zX35013cY33dd93ddC3D543DVL3DVK34D93d583bL33E1d3CCa3DDr3dQl3Ca43ddm3ds43ddR3D1z3ddu3caD3D983BwG3csh3DW33D5S3d8J3CUI3e4s3CUL31W73d2c3c0q3E3U3E533E3y3dGN3e403CUt3d2p3c5b3Dzb3DE33BTD3cV22ke31v21834473dIN31VZ33ZF3DEl3Db031y134KM3DIZ33Gm21J330Y3dHd32yU26d3cws3CQJ23D3dJ93e3S3D4m3Cd23Cd23DF53dJJ3CS73cY23dNP3Dgs3D533BJs3dl53C9P3C9W3Dfg2v43dJt3DuU143djW3BKe3c973DE43AVp2F73Db532Yu3Db8317031vz23l3cVM313z33Gm3DIU3E3h3CQK31xw3dJ61521B318L357x2w83Dea1m23i3e603cx13d4m3E423C983e7g3e563DjI3c4P3CCK3Cln3CFn3E6A3e6d3e6c3CY63E6f3dJS3dFj27c3e6l3dJy3D9y32W03BQn3dBm34nc33mE3E2j3DXk1123923F3Da23dA432UR2433Dbe3dUC2Yf3CpH3Dc1338a24k33LD3e5U33gm21H3dwU33CD3d7f3e0b3dt028a3E0E3e733e5N33r331WI31tY21b24T25o317W1q2Nc1X26R34os3e7121832B93d3Y24K3Das3d4F33wo2rB3dgC2vM332522Z3dOO3DFx21T35dq3D6T32bQ3CVC3dZh3Cgj22738sD3Dez3CcZ3Dz63c953ea03D2I3d2H3df63CRK3BIP3DFa123DCP3dco2fl3cto3e1x3E7U33CC2QM3DJw3c0Q3Ea2356E3EAk3dJe3d8e3BEu3Cbs3cyn21N31Wp3cy43cXl3c9P3dqb3D8Q3d8u3d8s3D2a3DvO3dDi38VU3BHL2qW3ca43dYg3Ds43Eb421N3CyR3cSA3Cah3D983Ddg3e1r3D243CYy3e293e5c2Cu2473bS233I73e741732M131vZ24r3dkJ3dhp27j3d7z3Cqj1P3E6q3e8M31413dJ13e6Y3DEw3e7D3dcA3CCZ3e7i3dN93Dd33dJn2fm3di238wR3C4L3dlE3dGr34Vy3e6b3Dls34D33DyK3DL53DiE3E6h3Dfj32ns3e7X3E6N3bTD3Ch63e8w3dEn31y33E5Q314131uI3DiR3Dfs3dJ03CKu3cqJ3d8131AS29331Au35A03deH3Dht3Ec73Dhw3cX33ECa3ecA3dl33df73ECh3eA83dI83DY73diB34Cz3dId3BeR3diF33CC2FR3ecU3cK62GG25d329s3DKS33su33eG33KR3Dk8343C22i32sa3CZX1I3ckT3e712rv3CL23Ckl3Dke331b3dkg1827033163dkD3Cl53C463cKo32Ey33Cg3CKY3dKL3DKy3DUi3c4I3eAR3DjH3ece3dL43DRX3cex3dL83c4U355q3dLg3C953cnj3COe3CO33dnB29F3dmD3cmE3eF83cXA3cf63eFC3CN83cMa3dNU3cm03efH3cax3eFj3cod3dnB3dM23DNE3eFg3eCM3eFQ3CLR3EFK3Clv3DmC3EfN3Cne3efP3dje3eFR3dm03DmL31sV3eG32123eG53e7N3EFb3efs3cN83CNM3eFv3eFo3EfX3eg63EFZ3EgG3Cnw326d3EgB3EGD3c5i3cm53Eg03CND317L3Egr3EGl3egE3Con3eg82ds3dNl3EgJ3eg43EGZ3eGt3egF3eh2331N2gR3Eg33DNw3c5g143COZ38Vu3cpY2Dy3DZV2yf26225B25y33Vh3dZl3D0R3Cgr2513e6X3DoP3c3z2183e0P33sR22M3bO73D013dO5348v32Jo172673dKo3doD21z3dwk3cqr336i3DtD3Cq132U63CH73E9I330M3D0c22d3Dwo2272703c3W3CPb3D083e8R3CZ53E8T1121S3E813E2x3c703E2z3dZi3cgK3CwJ3E0M3dP01121A3DpS3dXs3dF03DJF3Cax3Cbl3Djd3E3U3DRa356e3Dd23dd53CrJ3cti3CcL3D1F34E23Eaw3drt3Bgr3e4D35623dRx3d5b31X43DDl33wf3ca43d1T3DS43d5c3D973cSA3E1o35273cSe3e1X3d233cYX3cUf3Bu43duy2fU3EAC3E4Z3Dr23DgJ3EJc3eaN3df23ekK3ejG3d2L3D9r354N357t3DrF23f3DJd3djD3dr63EJJ3e433EA62hg3DD93D1G3ejQ34d93DRU3Ejt3EB13dRy34CT3D5c3E4L3D903eK13e1j3Ek3352t3Ek53Csc3Ek734d53ek93DDz3DSE3cEO3cs73cUI3E1x3DSj3CX33EkV3EKk3DR433Zs33CC3d2R3E283cUy2m2372P1P3dTa3e0G2ZR2D83E7126L3C593dt83DTU3dOD22h3eJ43E853e0n26K3dwB3cPJ2381M3dsz3dXG3dTM3EIQ3CvO26P3CWP32V72173D413e0B3Ci53BG33D7C1T22r1m25E35913D6T31SK3Cvs3Cvu3cVv32iM2JE2933D0J1832mA3D6h338A3cWZ3d0W3d4m3dRJ3cFF3eAo3e0W3E223CXQ3d9S29f3DUw3DdK3CUI3dfF3ELt3CUo3eNO3eO23bEU3dR53EnS3D9l3dgK3CBs3DyW3EBb3DrO3cFc3CRN3E183E173CsG3e193Eoh3E1B3cUK3e4g3eDQ36Uj32Or3CS23eb83E1J3ecg3Dve3cje3BJm3dQS34E23dqu3DYT3EBj3EM23Cz12Nk26j3DZx3C3z3ed9344h3d0722L3EIy3D7O1S3eEa337924J25W21x3E3M3c7y33NE3eJ53Dtl3DP23dT322e22z338m3eMZ3cz73cpH3du93cPe3d3y3c493CVs3Ca83du01T26b3eBo3DOa31Dk3dBy33U53E8S3EmQ24T33wJ34BI3e3q3E0S3D4M3DHY3eQJ3dq13EnP3e213CBl3cbo3ejk3C9K36uJ3DQ73e4831X43ctO3E183cIX3eoJ163E1c3Dqg3DDi3D9e3DQo314F3ca43E4J3e1j3ER43E4q3csA3dYm3ELk32G83d9A3ep03EkC3e4w34cH3eDt3E1Y3dHX3EQL3Eqk3Enq3eqn3e583E261d3e5b3em32Nk21V33J83EPU2yf3ENI3En224D26h2313DTX312W3DBu3dXb2173bFC34373c3j2gg3doa3BfS33883e8j3cZA3eQb3E3b3e873CvI3CZu3bmH3cWg24m3DBv3ebz3e843Cp43e2K3EJ623N32Uh34Bi23g33wj3E803DzN3cgf3CgH3ej23D4J3EqH3cas3Eam3etc2Dy3c953dJd3Ejh3CSX3d8H3Crk3BGU3CY43CiU3eOG3eL53CuA34D33eok3eJV3d1O3d5c3ds13ca43c4x3D5h3eLg3cjE3dvZ3E1p3EKg3eBh3EKB3D5s3CXj34Ch3ELs3dv13E9Z3eTE3dxy3EUd3EAL3euF3eKL3c953EJH22g3Dz83cUE3ERV3eP32fy3eiI3esG319b3e2S32rm3DaV3d6T25W3bnt312W3dtn3eq32183c7P3eiu3emQ25e3dO231Wf35dZ3ej224S3EHv3cWt3D7T3esW3E8621I3EPt3EHL2n525932zk1034bi24M3cHk3eEb1Q31V03D3Y33qi2m21P3D0O3c7026326h35fN3e9y3cX33E0Y356e3EW63e233e573cRC3eo43Dz23EQq3Crk3byp3E153ctq3c9P3eqX3eTQ3bTU3eR13eb23ccA3E4521N3ELe3CyJ3ETy3Ds43Ewq3erD3cAf3e3V3CU93Dff3EkA3DE03cJP3Dqi3EnY3d8u3EKh3E5123F3ew83EXb2iT3CoC3eRQ3CaZ3DSP29e3Euo3dIL3Blc3bMh3E9O22M2XC3Dhi3DG122h32n43DEi346d3ed43DHE2343Dog3DC61821p3DWZ337v3e5Z3eta3cCz3E633cbj3edL3EAR3CF13di63dfB3eaZ3dfD3Ecn3CjB354d3eAF3Btm32Ia37IF3bNi3dfo2FY3dfQ317M3dHe26q3EHV3e9O21J2ra3EXq31Y13dhK3e7133mr2fL3E783de92QP32rB3E5J2123DHu3ENm3cAS3edj3dt73ejD3c4n3DI23dGp3e6934VY3eDp3dIa3CY63eRl3EYk29E3EDy3dh62cu25y3dHc3eYs32YU22z3eY33C3Z24f3diq3cq03dgd332532fH3ED12du1333DV3dEI31XU3ecy3DG13Dj83ey63cx33eO33Ecc3dcf3dJK3Ea83ctn3Di93f0o34CZ3DYY3eZq3E7w3EYn3Dfm3ECV2cu3D2Z103DIO32J93e9O26q3E8L3EzX3e5R31YV3D6L31YZ343f3E713dJ43F0e3dj73eDG3DUJ3eKj3ejE3Ekk3e7i3ezi33Cc3Cs83ea83d553djp3EyH3djR3DCt3E6i38Bk3Ezs29e3ARn32mb321n3f133e363cPj3C5v31tk31TZ25g25K23F25A25K1X23p21P322e3e2I3EvG3E0N25C25Q3e8A3Da51N25t24O2443cVC22H32e93DiW33g23dWR3cGF24w3dP33CKV2333eSO3D6T23g3DtO3c7522p3E5t3F163DEF3eT31026J31d43E8i3d3z3Emy3Evk3CZ83e9F31ei21s3EIt3cg83EIV21S3Dj53e8X22O3E9x3DpT3D5y3Dz13D5z3DR43Di23EAr3Bwn3ea83DFc3D1p3cTo3dFf3EZq350Q3EaI3d4n3F3Y3Dz13D2J3ezg3E433eOa3CTK3dD93c9R34cz3cIu3BuF3EjT3BUz3dyd3e7r356031wp3E1h3D5H3bHV3Dyo3EuG3CU93CXL3EOZ3e1s3Dw43ebk3EDZ32W0336J3EE73C3t143DKN3dtv3C653DhA3cdr32nX3eEh3eEp3cL71825j312I31Ei3CKG2AH34193eeU31VE1N26b3een3F5h3dk3334a3eeR22F3dkZ3D863C4i3dQN3DRJ3F413E4F3bt33dl734ca3dLa3CLQ3COc3cmU3EHa3EFe3egB3f6d3cNr3F6f3dLh3cFM33CC3EFF3cm03F6j3dnq3f6L3dlR3EfU3CNC3CMe3F6r3dN93f6t3DN33cTY3DND3f6W3F6q3Di53C953dMJ3cop3F713Dmm3f743Cne3F6y3F783cOf3F713EGi3f7C31Zq3F763E7H3Dn23F793dnB3cnX3F6I3F7L3F6S3Cn53Cnu3dnB3cO83EH53F7K3cMG3f7F3EFA3DnB3Eh43f7J3F7e3F7N3f7g3dnb3DnT3Eh53eHE3Dny29E38VU25Y3ci33Dx32yF23g3d033cGo3esT337v2311R3CvS3CkQ3DOd2523d333emi3eJ624v3EsK3eV53Esm31W53DxB3eMU3Et532v735xY3eQ32WM3eIf2vL3cq231uQ3ch23En83d0a3Em73br035OB3e0733ro3DU83cPj123BFf29E22G34193Ei5312Z1721F3ej93e613cas3EF03DuQ3C923Fa03DR73E223eTh3CIm3CtG3Eoa3cfi3Dd93EoF3D5I3D8p153e4934Db3EbG3er23cCa3crk3Eop3EtX3CA73DYj2zd3EJM3ek43Ewy3C543cu93CrV3eu53EX327S3D9e3cui3FaW3eRM3cX33Fa33Fb53ECd3Eo53Cbl3EUk3DuT3aK53byQ3EM13fb43Fb73cSb3CBl3EKY3e3z3F4h2it35013FAa3dY634B13Eoh34Cz3E4934d53fAG3DdF3eqv3f4R318Q3EJM3faM3D903Ewu3e1J3CRk3FAs3Cf33FAV3ctv3fAX3eLO3Bii3Eke3FB23EO03D2D3Fb63FBI2nK3cAZ3FBb350Q3exJ3D6e2Fy3f363cgo3e043CGr321R3d6k32hJ113e2T31yf3Doc3eEb21b3CZj3EPn3CGZ3d383C7y1H3epc3CgF24L348m3F3j32033EsF3F9h3esH3DoH1O26N3dp7312w26m368232j93eir26V1U3dt722826u21034483cVW3dsy3e3a3dBS2543e5X337V3DuH3eZC3Ccz3dv33FE83dV73DXX3Fa13cAZ3cXE3Dcw183DuW3Eu82g12Ig3D9H3Cum3d4M3FE93cbL3dV33cSw3fa33EO83cTG3dy33Eqt3FBp3fAc3ewK3E1a3eR03Eol3FAj3eAB3dS63cs23Dvt3CJA3Er43EU23Csa3fc63Cse3ERl3eX23d5R3eHE3E2a27c23m3DP33eIr26I3E0j27832Gm336K3dX831ft21P3ehz31Ei2193eUr3F9H26f3D6v3f3j3d6Z3CVC22j21831r53emp3Esm35123F953c7035kS3cvj340W3d3022X3EhQ3c753Dbh3DU93eVD3CQJ2343DOX3F2I3ej63eMK3Eq33Fe53EW43d0Y3EA42203f4f3fGy3Fgx3Dhy3FA33Cx93CBS3Er43F4J3fbp3e163cNQ3cTR3d533C9V3ECp3eOm133d8x3ETw3fc23fAo3cja3d8X3CU63dDu3ebe3ErE3f513fCa3dyu103d283cXK34wa3Ex83d4m3fGz3fI03fh13eQL3fa03CuU3E6J3FcN359f31ES3eSV3cwL3e0N24V3d733f9H3EY23dXb1U3FD03DzG3dKw3der3Fdc3E8F3EvL3EVN34BI21p3EMV3c7026732uh2FY3e393ESl3dBs3eq23EsI31fi3fDP344I24z348637n43D6t24O3D79213328M3Ej22Fm3fgT3e3R3E7E3ejB3F1j3fjk3FA23fbG3eaM3CTE3CBS3EWQ3few3eOD34cT3dQb34cZ3d1I34d53d1K2Hf2IT3D8v3d1O3CRK3CYI356E3elc3Fap3eTK3cs93EWy3EwX3CAJ330g3feK3f523Ebi3eKC3FhV34cH3f4q3dr13eX93ELV3fJL3cM33fjN3euf22G21P3C4g113fi7372p33oj3fgb22N351A3CvJ2123EVF3fIb3Ej63f923DH93C3z32D23d6Q3c3f3Cvc22O1n21A3F3O3Cqb3emq3FL83DP431fT22C2623EUZ33Sr31Fm3Ehk3fIo193EQ83Ci122c3dWW3Cgr24i3F9M31af25D3CDI3e2f3c693d3y3fIG3ep931Wf3D843F0H3CUo3ezE3e413EzF3DV43cRE3exd3dv83eQQ3EAr3ETl3DD93FH93F0o3CYt3CrP34DB3DYy3EWo3cIT2ig3EB53cs23FK53ccI3d8X3FKC3D9m3Cu93E6F3FFf3FHT3ERJ3df73fel3E503E7f3FMH3fMf3c923dV33Ew622g21j2cu3Cd93dw53eYP3E6o3E6U2123F0D3E5m3dEN25c33Ln3f3A2dU22Z32B93EY024K3Fgm337V32Na3f0821T3dEX3fMd3f1I3ekM3FmG3DCf3Eot3eYC3E7o34Vy3F1Q3DT73cto3F1t3EDV3C4U3f1X3cUe31es3ExP3E742443Exm32YU3dFV3f1c3Dga3e6r345g3C7k3EZ52W931Tc31wh3EZ93EZb3fGV3fCg3fbg3FES3ejc3F1m3d1w3EcI3Djm3EzM3DRR3EZP3F1u3DFJ2Ds3FOp3e6o3ep53fO722M3Ec13fNY21T3fPS3DGB3dTe33gR332533Wi3EZ92xb3F1E1525C3f303e5y3f1G3E0T3ey83f0K3EZh3cLH35603eh03DgS3c9R3DgW3Cy63d5o3eZQ3DiH3F0V3dh43E6n3f1z23O25121l24K24w21Y21q23V25S26h3EzW3DEu3dhM3fq7337v1p3fos3e8X25X3DzK3C7521234aa3ffW3eiI3eBw24z3dx23D6x2YF25n3DT629F23C2662433eI93EEB2353e8p3FkZ3e823f973Dbc3E0a3f903dBS113c1T3fd73emH3FgQ3ePO3c693f3g3BSb3fo724d32Vz3e9022q3f3V3eJA3CCZ3FCH3ewa3eF133pU3dqy3eob3ea83c9o3c9n3CC03c9P3bw23E6G3Dh13c5b3F4B3fsk3DV63e103d8h3c9h3DVe3cy43D1i3ddq34WA3D563DVl34dB3FHr3fF3133DVD3Eor3CYJ3Ews3CJa3dVd3ffA3EWY3D953D983eR13FN83eP13D2t3EBl3ei33FQ432Af3E713c3V3Eda2AS31AV3E9h3fPU34ni3FSc32vz3DEi3fP83f3w3ccz3f0j3fJM3dCF3DQn3DlO3ECJ3cfT3dIb3Eon3eYh3fPK3Fon3bu43FpO36zx26j3d3H1I26T3BQd3f5x3CKM3F5z3dK53fE23E7124F3Dpj3F5932jo3eeF3eEO3DKf3c4825j3CDi3F5s3c3N3F5N3C4C3Ee422k3f623c8f3C4i3Dy33E653DUz3D9g3Crw3Ef43f6b3c4v3F6y3fog3COe3F823CN83f6h3F7y3FVT3CF43F883efl3F6O3F7R3CMg3EH03FW23dM133833f6p3F7d3F7S3eGm3cNt3EHA3eG23fvz3fwd3Fw73Fvw3CLv3f7b3cno3FWc3FW63eh83F7o3EGh3Dmw3Fwi3FwQ3f703f7P3EgQ3fWV3CLO3fWk3f7V3CN83f7x3F853FwJ3FWr3fW83COh31zZ3FW53fX13Fx83fWl3clZ3F8A3F7C3f8c3EhG3dnz2B436Fm3d302703e0L3f8W3dTl3CzO2473F2R3dod24H33r03F9t3cy726C2483FG83dBS24v3F233C5U3epk3d6t21N3Bq13eij3Eig31Ft313X3dxb21c3fRE21331693D6Q25D3fie3EiK2zR3fSb3FL932d033sd3eq324i34bk3D7O3d3n3eNJ3c763Frj3Dpl192113f9x3fjI3Ccz3e543cBL3E3u3D5z3ew83d9Q3D1c3ejm3FJS3Cby3dVh3cTp3etp3CTt3fb23Fmw133DY33FtJ2203fF73CCI3Dy331WP3EoV1g3Cu93cyC3DSC3f533D5s3c2E3CUI3FzZ3fCF3e523E553e3v3fz93g083Fzb3fMK22x3eUl33833fCm3FBe3cUo3Fz83foC3D9P3EaP3Ctg3cRk3fZG3crN3fZI3CRr34d53fzL3FC93FTe3FZp3ddo3CYJ3FZs3DqA3Bgs3EaS329K3ddu3EoW3d983fZz3FtR3eKc3g0334CH3G053eub3CX33G0K3ETf3EJc3G0F3ajd3fBd3fnO3euP3F3D31d43cv421V3Fli3Czc3dbs23b3f8l31T33ffv31de3cEi3eEb21g3EMS31FT22e3fU53Fma31eu21122F24t3fm53f9H3dXA3fYr1Q2zg3DtJ3eSX3dtl3EVI3Flt3F8I2N524k33C63d7O34283CVj2o83EQ321d2673fDT26U2xr3D6q3eW33FuA3cX33dXv3Dz33DZ13EQp3eF93CBH3Fi53BO83FeG21g27s3G1c113e4y3Fkm3dZ03G373g3M3fsl3e7j3d2K3d8H3dVD3FbO3FJT133e493Fbs3Eqv3c9s3Fbv3fAi3fzn3eYb3cLZ3FHJ3D5H3EAr3D5K3e1N3elJ3dyP34d53FKl3G003fKH3dE13d9W3dw63Bah3f333dTs33Xw3Eq63f9H3E353Fyz3D6P3CI13Fgh3fJE3fIa3d7V3DtL13319B3fg231cJ3d0I323N2212183FPq3g281M36Q23cVc21b3g1z2M03FLc3eVz22n24l3Fy23fe03CgB23b3DuF3CQj34BO3fJg3fOA3CXp3DD03G5S3g3N3dpy3e223fA734VY3fN33CBW3Fbp3f4L32im3EJp34D53EL334dB3dSB3FZn3dqn3FK73eUg3dqM2BQ3e1L3cU73g4A3Fkd3D593G1A3d5S3FkJ3Beu3fnc3Eki3G5r3ft23cX63D9l3F3Z3dSm22g21l2It33PH3Fkx2NK39fp3DW93c693d0S33mO3D6Q3f0z3evo2272553EuW3G4l32833fYZ3cW23fy33CgB1332C13cwG26D25w143fgP3fL63ePo3FG13FLU25L3G2D3fYo31Zp3fyI23B3G5F24e3ev831eU326c3g2G26B3bf73cV43et93fe63D883g5t3g6s3dy03enr3G5U3CtF3g5Y3fmY3Dy43Cy43g623d8R3eay3ejt3DFf3FZn3D5C3fc13cYJ3e1G3Ek23EJx3d8Y1A3CJE3FHN3erE3dYY3G6k3cJP3FEi3dYy3G063CX43g8C3cx83d9L3FGz3eLx3G6x27C3eM03g1n3d2V2Nk34F12M234BI2703Ffy3G7W23S3CZt3D6t22a3EVU3f373G7p3g4w3cGZ25E3FS03f3P3ev63FIL337v3ceH3CvC310w3d6Q3BsK3G573EPB3fL03D0Q3EQ322I3c6S33SR26K3d6V3euU31fT3d403g2n3FrK2n521021T23M3Eml31Af3g893Fp93c0q3g393cNR3EQO3C9A3eWd3E3x3Fkp3G8h123ddR3D1E3dVG3DVl3fJW3fK13d1j3gBD3D1l3fk13FBY3d5C3Fzq3G8v3ElF3G8X3DS93CyQ3cRo3ere3EX13ElN3FHt3C9h3eX6353N3G983gaZ3con3gB13g8G3D4T3E5522G21Q32Lq3g6z3g0i3G4H3Fnp3G9L31Dm31vz2193Fpt3fR333GM24F3CdI3EYz3e7532C13eyW3Cr03FO23fO43c3z3Ey53G8a3cUo3Fqb3g0L3E7k3dI33E463EzK3eCd3dCn3FOK3e4a3dGZ3FPl3DJu3fPO3f1Z21X23I26c24025E3e9523S26126h3fOV3e5r3g9x3DTk3cgz21G22x3D3933ON3fP33E7a217328g3fPu32UG3FYL33fO3GcL113dOg3f3g3g4p3FJ224k3cVB3Dod1Q3DxE3FIz3CgB2172383fQu3fQW3fQY25S3Fdw3F2621B23l3FY6326G3f5E3C3Z2513g2r3CwQ3f8h3GaP3f3k3CVs2243fsH3f9Y3CCZ3dcC3gCx3fSm3BhV3DCi3eYD31z73feK3di93etn316S3FkF3Edu3ECR3EaG33p43fQO3cUo3GF33c953EW83EF03cbS3D5C3C9j3gBa3cY63eax153G663EJU354D3fZn3CY13eR83CYj3Bwn3d5H3cY13FZv3dDu3e4o3ErE3D5o3G6k3Ffh3FtU3F3d3f033ec22du3Exo3ftW3dFW32yU33Bo3ez933qM3E7126u33lN33Gp3e9K1n3dgf3g5Q3eku3ekK3Djd3CAW3dI23cA121n3fVU3DJm3fqI3F723cTO3fqL3Gd729f3fpo3DH731123f1927I2163f0032d02603GcK3e741o33L03Dei133ggk33gM3f143eXW32Yu3Fo93GcU3D2d3fuC3DLD3fuE3g6E3e683Ea83gH63G623Gh93fUn3eAh3GFJ3djx3f0X32w03F3S3ECZ31Y43f2V26O3fNX3GCh314124Q3BRH3DEi3GGO3G2g3Fo63eC52dU3Ghw3GaX3gGX3gB53dsn3FQD354S3Fpf3GI43DgU3fQJ3EYh3gI73Gfg3foo3GiA3e6M3FNP38o73eEG3F5y3Cl63Eek24q3gcr3E3i3DKJ3fvc1N2aQ3CKf3DKT3E2G3fXW335O3FV4312Z23C3FKv3fVJ3elP3dL23Fpd3ERk3bUg3FvP3F6a3Dl93c4V3eYC3dlD3Cf63DGQ35BS34CC3BM1359a3Dm43Fxj3bjF35BB32r4333l333n1p3dPc327C2bt3AVr3eEX2b43Cyg3CUi3BHk326g3ecd3bM233CC38DK29f36oC3BKD22C3eCm3cbC32MB3FyB3CKA33Ir323H2Fg24z33fO33s52Fg1122y32RX344d2bu25c3e2w2342ar321z21C22E320D2lr33Uu32LX3avh33uX1837hm21131ba27s26C3ce732ki282346a2Dy33Py34JV33Q12Aw33Fm3e0434Br22X32rx3BFu2de21P34c231Ay2qO2e42g33DBJ337722131611p3gmM21V2R332q22eo328e32b9337U356j34xf3DL03bN33cuI3EOa3gH43dHZ3FPG2203ciP3Eg73cm73bH63Bel35y73Blb27c21S3bPf28f31Yp3bUS3bwI354t143BGx38U23ex7352928H3B9g2xs2Qm3aVc2E22C733I1355U32ns3gnu3dSb3bH13BH33Bgv3GNU3Erl355P3BU33Go134Nu33fg2bI34zw3ElL2Fl3Eb53BgV31NZ35B83bTD3ajj3C3235293am438wR38zW3Bu03BaH3bAJ33833Bhb21121L332u3bLr22F22N27h34Ca3alM3fYm32Ym323h1G326A1a32Xy3cGr24f31D43gn322I21n3GlT33ut1A33UV3GlX3gmB3glz2153Gm128p34A73F9p3cvW26f32x22IW1821H3e0N23r26h36eN25Z34bk3gM61a23C3Gp63G343FmE3DT73Cbs3eNz3CEz3C4W3GqK3Fa83GBh3FVr1t2183FnL3EnV3g3F3Cld3B0L29F3goy3ezd3gqP3EyE3gBX3GqN3e7g3EO93GQr3gK53gqt3E593c4J3EKt3Gr73ctg3GqM3Dla3grf34vY3dW13gra2183CT527C3DsR3Gl43ERW3bnM3Ge83EvS325932WK1h32wM32vr32vT33mi32WQ33jg33Km31Tb31tD31tF173dzz3G2G26u3bQ93GMT21E22g3eMy3gl932YN24k344c33Gb24T3cPe3GMj183299327B3GLp2TX3ffq3f5o3Dkt223336Z3GLF2FH22l3FOz2f92fb3bFq33ht33ln22d33u42wT2HP32ce26r3C7K3Gmx193gMZ32fG33Mv2aL312K32ai22c2102ra3BOZ3DKl2313gsh33IP3CKb3f5a22E3gF03bgp3FAZ3gOn3dy43dcf3G413C4S3ef53CEz1F3G1D3D5u3dds3Clt3BLw3Ddj3Fhx3CN0355Q3eFa3dnQ3Cf93dn93cFJ3Fh03Gun3cFl34oM3CXr3cFQ3CfS3cFU35BC358a2Fr3cFx3diA2hT34Ct3eOA35033goU3Fc735263BJK354435y7325q36SZ3GNm2GN37t83BUs3BH331yf356Q22B34dv3D2A357F3gNZ3G3D37t81o33FR27c1x3byp3Gvi173cXr357935BS32y93BEL3ayX357F1723N3b7U2Ds3bvB3Bh3339F3Gp722k3ciq29e3Amx24S31Vq2AL3Gq53Gq73eJ63fga311a32dy28226r34AP3gT43gRy32wN3gS132vV29P26V3E0725R2Yz32q132Aw3GN026d3ce73GlO18321Z31Jo29E3e5e3cR132Y13ckd32My3bR332Tf21D3doG317M24F33kl3GSe22h34003dL03Ecg3B0L3bkq3Ggx3gK93DM83bk73GKZ22o3gNK29g3gnN372p3gnq33mi3bv83gnu3e6f3gOf3go015372P1O1k2mN31vT33q13FBM3b0l3CcU3c0Q3BHx3562356J357s38WR21d1W1k3bV83E7w2673B7U3FeF27C35L72b438lR3e453cui3dv03FeM34cB1122I22Z3gQV3biI3DSR3Gp93C8f33cc3D7m3BqO327D22x2BY3dL03cyn34633beu3AyX3fcF39Vh3f7l3BEO3D023F982bQ3Gzo3CYg3GQZ29e3gR13bEe3Bl93gWF2DY25Y25w3383343n143EII332E31vU1M21o1x2543BSq22G327V3d9G31Yk22q3d703D3I3c3p3gTv3DK91426U32Yx316h21e31x72PP23Y272320D329231au2Hv1N3h0I332a32WP1q213332i1123H3Cdy3gSw3ee425l37Mj3Boi26T3e9h3H0f2Be3H1037V72FV3gC73F633dyv3FbM3d5d3gk03Gj03GfY3gu63gQS3gU93Beu1Q2173dz833Ph3d9U2DC3H2621736Jg3bk534Iz3fQe3h2721K1933Ph34W93h2H3h2D3H2f3AVh3Dlv3CDb3gRr29f39dV21V3G2133793evT3Bs92de3C7j346K31E52Kr2Pi2tL3fcU33Io3c3r343c3GJN312w3F5P2123eII2p0337I24z3H0A343M1o26j3E9H33w81r3bf42l03gsy348g3cDk21834ae34BL1h32EX3d7y3fV134LH2hc23s3C423fuW3EEI334a3eeK21P22E3auX3DL03fuf3Dq13E663eF33gk43EF63H253D502172BH33Ph3D2R3h2C3bhv3f823gUE3fzz3cOU3BK33dnp3D913cLt21V3GKc29e3gkY3C5d1l3Eu93GON31TG3cFG3efM3dNe3c243fD83By13ciH31Az3CLr3Ea73cm73h523D1p3h553COv3CDb3C5H3C5939dV2473gX73gST24Y3DE63gtG3Gti1N24b26g24t3cVR3H3m21v3gL83GTv3GLa33s63gLd3Gpe33S63Alk3DX627D2Kg2kI2kk1d24Y3bRL31E93glV33uW3GpV25k33F6318N32cc26Q3c693GsP32O12FL22V3H57132rP329P2173gMM346133LH3463349d21P3EPT3GMa33Q033q233fM3C7k31Vc3gmO33Cq1B32uK3GkR3FCC35603CD23dJd3Eno3dpZ3Dy23DQF3H4L3fVN3CtZ3bY13CFN25p24M3Di53AUX1K1v2dy3c5l3auX3Gyf3GYH3H2I183C9g3Cbu335a313S3C9K3BjK35bB35y734hA33Cc3GvD35c43bvs34D02AY3G8J3BiP3GyP31nZ34Yv36Zx3AJJ3CFu358a3Btd3APQ3bTD3GR135443BAi3b7u33pH38vU21121o3bgN3gP73gp93BJf36SZ3gaT31Sv33gB113Fd03GSe22g3BgH3BF821g33Fr1p33IZ2bU22v3bJe3gqI3GhY3g0N3foi3F683Ef63bu333az2F81o1U2CU3bjF3bT923F3gfO3bh63clJ3Gu72Fr3G4G346u3DwK3C2J3H9J3en221834193GcL2443H3l10343N32AH3h703h723H7433Gc32vY33291L21w3f393gIk2dU3Ec43eHw32d026s23l354M2m2354921923h345b3bhD345D282345f31411t3Dhl33Gm3deg3gEL2323bKk3h003B0K3bL721M25a32443bby33FG1s2bQ38lR3Gh23E7I25p24j3d5u3goi1k1j3blq3d4m3gbZ3di23ddr3gh43Dgs3d1i3gv23GbD3gBc3Gd63GI83gfi3HCF3c9a3hCh3e1v3GH33CF43Dgs3f0o3ctM3CrP34Cz3FB23Ezq2cx35Wg2GN3BEL34oG3cAs3hcG34Ch3hci3HCX3h8F3djo3c1O3cY63hd33GHa3dfK3GIA3Gay3HCt3Hdc3hCv3HcJ3grK3gBd3HCM3CY63gRL3Hd4193Hd63beO3Hd93F0W2M235Bb3BNn3h0B1O25s3C7k3h7133oQ3haZ2bN3hCE3GjX2M23cso3g433c52357S3bk5387S3DIg3dJV3gj93H063FoQ31X53erz3gjt143cDq3gJD3fuX3gjF3C482593dzf3cHM3GsV3Fvf31VY3d453GSB3eET34Q53DkL3gJv3h7O3cep3fa03F673h4j3clk3c4V3CO13cFF3FWX3H5M3gKd3CNZ3gKG34ca3aMX3eRY3cEc3H6932yN3e3M3H9k2bu25633R03GT011329R336s3bhD32nl1816318l3h5z3Gx42EN24z3gru3gSe315C2fL33LF3H7934643DC43H31183Fo33E7124I3h6N3gwt3GrZ32wo3gs229p3Gac33MQ3GsT22z3GXr3h1W3E1u3eKe3eWq3dn83fUG3F7T3Cm53bhx3ClT3Gnh3Gy03gY23H8p3at83bUs3bgU3gNs3GY93FHE3C4j3GnY3GOg153AT83GO33Gol3CY936uJ3a0C3GoP3GNb3hHx3Gob32G836eA3GYV32NS3DCX22134d53EWQ32Or3gOp23C3hI32iX310r3gYY3gP22f821121E32F13H9f3fMk1035eg21a336z22N21o153HCc3E2u3E9h3BFP32E13eiM2X7347W26K343G21v323M31FT26F3Cl13Fv73eeJ3c482m13Hgn23G314D23832S031673H0k33Cc22q33P73H6d3GlG3g593Dod2323DOO23328E31YM1h3dX13HFu336m3h6a2fG2163epT3hEu3eP83C9E3h1132O9318n33Cc22R2513czw2361J1524Y33R03gJL26B3CE732MZ329P26P3c6922s32741026c33CB33MQ22m34bp3Bja1E1525M32vZ29E26J3dKJ22N28N3glb1n3GSk2oA2oc1s32vD357Z1R34iW1t1u29431BF1q317k27n2rO32EW1p23b32yQ22N2tS2uO31cb3Hb134bH25r25W3H6g3h1j31vY3D0L3E712513e8L3H7132fE21f21232d02En21e3fZ53bIy3c4i37S33CYH3dXw3Di23g683h233GrA3h253CeP3hhb3gf83AsF3gd33hmu3C9P3aVk35gv3DH01f3bn23e6735033Cy43aTv35013d5G3dS43dff36SZ34gx34CZ3HMw34D53hMu3cRW3De91s39853bjp35wf34cH37Wp367F3h7Y356035033EA83hmW34cT3hmW3HnD320d3Hmz3DCT3H253bhb34sC3H8N359y3EzL3c4K3hCW3cFb355K3hcO3h223bK221o3CiP3cFJ33W63di532A234LC31Au3bM13gu93DI528H3hOk3F7L2xL32Aw33Ph350Y35qr34Ch3At83HO33EcM33833EQR2ES3HoN33Ph35BN3hoq36SZ3hos3di5331k3HOq35443HP933PH34XN3hOW32Pp3gOI3HoZ3BEL3HP138Wr3HpE11359i3HOQ3Btd3Hpo3a0s3Hoq36Zx3HPo34UC3HPh29f23122421o1T3fwW3ClR3bjm3H5134cC3aKx3H5o3HaJ3CG23aLM354e24s24I2c73Glu3gPs3GLw173Gly21333sQ33uO3hG721x3Hiq3Hl733s623a2oV33mQ23c3G6y3hH33HC63FMH3Fjp3cTG3e6F3c4u380N29F3c3a3c5F3h2u3bUN31063Em52gg3hl628o33S626d37rq1023424m33On3HGB32q333gT3hAa3Hh33G433FQc2CN357S29f3Bl63bkd3hEq32L73Bgn24s3E2w32ev3h401P24v3EHV32jg3BSF21D21N25f34603462346426f3C69226326423g3DtA33ci31uH23m29E33PO3hFT33X533HZ33I1344326p3C6v3ckS3hQX3hrM2143Hf43f5P33om2fl3HRq3gN022z32RX3gn326b2Mm2Al32XG32SI319d33NJ311421m32nw32JG2Xi2YC3H3Y344D3hQ41S23M3et025r22833TC23I26Y24q23326l3CDi3hRH3hL821d33iC33US3h6P3gpU3H7F2223gt332Bw1F34Q4348X315332dv33Nx3H6I33o023Z2KC2Fy31X7313321F34pM21b3gPV3gmd21I35tD3h453H6G318731v93HS821d23034O63Clb3c4I3EbA2963c8Z3hrY312R2143E7l36UJ3c0S3gud3fsS36uJ3fK53dn93cce3hek3CLZ3gvo3hou2C71o32R83Bl13h263gkW3HFO3bEo21c25032443F1Z330e32LQ1X3Gf731b83hHD3h5E356Z3bjJ3HwC35453HdP36uj3H5k3fOH123e183eyg36Pk3H4x3Hn13Gb73Hcv3BIp3Cy43Hng353E3C2238bK3bK23e4H3Hwt3d923Ds43go93bKg3Aj83dmV3GQT21535Aj3clz2121N3gc63CA73Hxd3drc2DS3cuw21G34Cz3eBA3GG83CAf23c3aFu32Ns351D22J22y21G3G0z3HXD3Fnl2DS34xN3BhM3faU3c5I355K3FmU3gi23H8V3562356K28i3cAL22l338Z3BuX22L34dQ3BUX3Cyv2cx36nZ35443Gl23beE22l3h5g27C3alm3gxd3HsM2dE23g35aJ33mQ21633l03dwL327n33uR3Hqj3GPT3HQM3gPv23H3Do53Hu733S62663Bfx33Hx3Hsx33I22il1724833uH318M3hsi349d3En13gXe1t2343ht331hA3hIk3HH33gz53HVI354D3cjv1y27s3Ds03g0D3Hvf27C2Zm3cjS3EQS3Dna3Gue3F653G443cYJ3Cj63CJ93hVr32Ue3BXo33cC3aT81l1R2C738lR3feV3gr33csc36Uj3dD83C9L3GnB3CFj3HVF3DLa3CIM3ck13G1F3COX3djF3FcX38Sd25Y34BK3gLK33gc2673CdI2Vy3ch92f424v34Bk3Gx8321Z2673HIw3gT532E126F3doS3de73e793157215357j32r921734193HG23279324V22x21532x02Mn3gt91B3Gtb3H9V33GC22y3Gtu3hjZ32Yn2163h3Y34Al2NR3bFn2f82923hKZ21w33f333gC3hG432nJ3gX92v62IY3gT321T21f31bm1133253bS033ze31063GsE24Q3ep632d03DG92F83h3Q3h3S29a330q3h3v3dkl348S3hQi3Gpr3hZ53gLY1x324v31Dy25Z3GtF3gMY3Hgc1N26633gF3h6H33nz3H6k2Km2ko329x3fm13hFY1321B3FxQ2jN34W32a9329J27X3GTD3Bf73Gsp183HBH2hq34jv1b21x22a3Hlp3hs8356w22g32b831F632EK1T3C3O3gM92fb3gLy3gmd24V3E8l2Hr31153cDk1y22F21u3dFW3HJ53gmk3Ffq33Ny3H6j2AY26E2Qh33U63hZm2Vw3f8k31SV31xB337X3dUI34M83DlK27c39FX2pB3gUA34D934vy3bvb3Cle3eOc3hOA355u3drX3HoD3bHX3cy43I5T3EoB3cfq3bV73fai3Hx821O21H2ac3CcJ356E3BwN3CAE3hy51635EG35GV352I3bV23bio3CYP3GNT3Bh6354431Wp3Ebe3I0u3bUb3I6e3I6o352u354n3Cae3c283I693C893cfc22g33962QM3CUW173I703BvJ3CFC3FZR3GY73BH53GOV3ALg3DDy34uC35UJ34dh37T8330n2Pi2qM34KS22j23e3i6928H3i0u3bWN356p34Uf3bvX2b03hnY3bTx326A2BL37FQ32A5356p356E29631yf3d9031Wp3Gvz3A093fXK3f6H354p34qb3Aji3f6n3G3D34W9355Q296350A3CYj21n1q3byj3BJk3alm31Wp3BuB3ByF123I8S2fl3ApQ3BYJ3C283c0S3BYJ35Mb34Yu3BYj22h2653bZV33PH35GX2323ei13gVT21P31Y8357J3i8y3H5E3i8m2N63i8o3i8q3BxD3I9j31W71H3i693i8W3i6C2bK3i9P3Byu1B3hww3bY731ZV25524I162Cx36go1P1z34YB103aDT3BYS3I9Q34gT34dQ3H4G3Byj3g0E21432jk348z3HW9173I9L3D903i8p3I8R3BH63i8t1y3iAG3Gi232KV3iai34fa1X3iai25p24v2pp1935o3101K22a3a683c013dvF36uJ3BUb3c0o3bJk3bHb35Y731FE3alM3h8P35tq27T21J3D0z350Y3582355k34za2Th35gv350Y31793gvo350y3Ibn1O22F35t23Gvu33WS350z3Cfc23c1v1e35823I7o3hIf2cx35rS1021123B39fD1x3i9t3dVF3i9V3I8r3i9Y3Ia03bYy2qp3i8135dY3i7P3c542cx3i7d3H7p3eKi38Cs2i634ca3bvb3gcC2M223M3hZ33i3g3HQl3GLY26e3d6v3h7E3GMc33nj2193fXq33nG33Ni33NK33nm1j23U3HZK3h78349C2Vw3CpH3Hyu32653HUn3I3U2Ay23z32j9323F316s2FF34sd3GsS3gX93hg33CPe3I1822w3Dox3i4434391x3i4732Lm24l3hgf316124733i63hm32ag23y2TG3H6o3HqK3H6q3h7F21f21R32sO1b3BUA21e24Q3hur332v31x81J3huv103hUx3h7f3gMD3c6U3cvc24H33i63hqq3I2r23632rX332e32y13HKk2bY3hTp2FU23R344033lo2dE31vU21e3hXD335c2cZ1P3geQ3I353Gs43hTA2en24L22d3DhO32VQ32fk2f4324u3H7o3DqN3E7I3HvR3eO13c553bjR3fzO3dqF3H4x3F1V3hOJ2213H1x3hBW3eCI3C0q3HQ73clR3GkA3hWg3gnj3ecd3H8p3AsF3BUS3cIp3hHk355L3I81355A3Cy93GVO2QM3AsF1o1B3CEM35293BT92233HiC3Hpg3hif27c3bwg33Xd2th38Lr3dyw3CUI3DQN3IgU3Bt03IGw32Oy3gnN35GL3hHI32G83527357S3GyM3cD03h8W2Ne162Qm35gL356g3BOC3IAB35033IH234DH3d2a3gYb3GrD326L33FG21O349p3IAB3hi93Bv83g0E352n355b21224I3GYz35aQ3Gz1122133Cx03haC3bzC3G8E3D1B3i103c243I003FBc3DS63DCf3c9o34vY3DQi3H023clL3H253dvd3c9c3Ea83D2a3bn53by63dlU3cAR3Bk538IG2JT33ph332a3DCy3Bk83c0p27224y2E832Ln3bYD1P1W3fvI3IJT3C0Q2963hHC3bt037ZI3CoU3C0q3bWI3cf631Wp3Ik63hw2388x3ijN23F3BZc3c5225p3Ijw33Ph39WL1P22I3BZ53bgo2fr39hx3BeE3GZG29F35h73BFh2Cu22131Zo2w71n23G3EvR3i323h442TI2eL2Cu2jN3BSE2ef3dpc3IFN2C43fCS3CV925P2mn3IFJ1t31oR34Ai3gPV33UG329121a3ftf3fEG31ED26I3i5C32U932931T21G1y3bsF3I3q3gLn3gSt3gWz3D6q34Oz3hJK21m331U2Fn3if03Gjk3hfA3f5T3g763HLZ323D3g2G2513ee231d01i329v329X26B3C7K3Ie23H363C7A1l3dEs3GRx3gt63DZm33J433j63hUA2l53HGu3GWW32vW24Y3grU33793DWa3hgN3D3T2Fm2cp2Ax3hm73I3733W932E12233gTk3eE331vy26f33zM31wo31Z72ta33pX3i4t3hUy33NJ24v3GrU3BFu1o26m31bu3GMx3h7f35GA33PH26r3eBo3i1C3ig839lh32Xy34bR2642zh34413hzG1Q3BRt3f5p22P2Ra3hzA2fg21U24Q3g2Z26g23Z34192RC33YF3ggH3ckE2Ke3HUo3h6k1931V03IDv182383bgn3CKA21k3hti32XI3hTl1q3iM22aF34ks1c1n1E23G3H7o3AXX35013eAk3I04103I06113IPp3Gi33BN03iGe3IPt34iX3gKx32v23c2Z3BJQ3bV737S33bV03diA3BuM3544325D3f4O353j3Ets354O2By34gT3GoM3ibe31982Lz3Bjk3bTD35y72iK38wr3H8p3A4U3BuS3c5434W92Cx3bZf3CcP3Bv934CV3Bzq2f33bu334W93a4U326g34002vZ2123iqw3Ip525P2541S3IR53iBB1k1E3GOI1I34dV3eR43I69351d3IQX3Bh63aMX35Y7351J2f83H8P35Op3IbO3C5434kS350y35U23AFt3fBx2mY34Ks331k3gvo34Ks395u1o3Cy2353p3D68350y2Gw3Bhm3cne3IS01e3C1L34v23iS92173d0121R3IIH1i34EH3f1z3C1X1N34kS34ks35Ap317932nS3AJ8331k350y3AJ83Is62Ba2123irZ353B1e3Is23fAI3it63C0f3g3I1f3Irx23922i3bX23IaB3It93is122b2qx37t835Gv3Ite3i0i34kS3iti21y3HV93adt3isJ3is23GrL3itt352x3iTv3C8D354V324h3gvt3BYp3iu03iTP336I3blF354d3iU33itg3itI2a43Gvt3itn3itb3IUc3DYy3Iug3IU52aT22234xV3IAB3c4X3IU03bh63BWG3HW33b7U34W935Eg21122V38KY1x3hq33iRb3gc33BzE21V358o3gW23GkE3Ir23gw53B7U2QM3bxa21122q3555354y313V3goN3GYl3E1M34jq3iqq2bY3B912gN37S034cZ34DV3aUX3BzB3BZD3bHo23f34E03fZZ350Q2cX3aJ83ir234Eh34e0399o3IW13C1z23f34CF3EAV34E83EAv34Ed3fTd351D35151C330N34W9330m22J3HIf2QM3Icg21123H341P3BuA1r38Wr3bjK3GyS1z34Db3d9E3B0l32MT34jQ31D83btD3iVV2fM3gDQ3iBo3C9c351D3c1k26l2XS351d39Hn1o23C31712Pb34e035eG1Q2WC3Ftf3H8i3AJJ3aMA3hAb3c233E502GY351D32NS3Bku352x351D360T354V1G22t3GVT121Z3BiM1922w22121R1u3IxI1A3BjK3amX37zI3ALM3h983cC835xs3ich2273cQz2pB34Db3eCg1834dH3ayf3CSH3gZ834uc2qm365l34Dh3iXt3hnJ3GYj3eG23AJi354p3bJx3ecI3d5T3GZ83I7V35UJ338Z3Bza21n3bWN3GVz3GvK33BT3a0t357E32Y9357G21o3i8a35053Gc33I8B33Pr34w93CNa3Ize29K34uu34qb358a3bTy3bIe3I8k3BIh28h3bY53CDb21x1i38WR3cFt2gG34LG33CC23422x3Do52cO3hVw2Fh1m2123C3w31B93h1T1m3DOW31x432mz21621c32Jk1n21f3HK71m34jV32VO3FiJ3ckS3f213i5533y632RX21z33Jm1P22Q2B43C4H3Ho63gJz3GuN3Cj63cfn357S35bB3bJM3ewU3bjq21S3Gvb310635Mf3iyZ3Ho73a0C3h8W357S28H350B3by631yF3It13By63iCy33Gy3BY634uc356X31TG2Ik3GnV22122W3C543i7v3bjk36ZX3gYT2PI3cue3e6l3hYp3BEM3Blb26k2323fR53C3Z23b31063bmV35Jm3Gz93dsR3HS23AvK2473bF731d631d823H32yQ21Y313A1E21932oe32Sp1926225a2463Ce73I2f1b24Z3CzW3gsE3C9e21V3EbY3dOq33ZM3I1H1132IO31943GWp327632e93fxZ21j3heT3H0U3h3c32RX3iDV26Q3fxv3eEB22H3iNO3IEN1623Y325W32013e5i3cvV1P3cDY33XY27S2C32pa3D093esF3HSq21t22z348t3Ier3I3h3H6R3e9h3huh3huJ349y31533G2Q2bY3gN321X24z32yX3iMp3imR2KR3DU23J5c329X21w2153dO53Ioc3cHa22o1931x4344d1q1m32vb3Hti339r33dn2En23a33x43hgT3GWv3h1C1722y3dOo32od32Of193G4r3GAX3Dl83ijN2233dFJ3HPY3ign3iZi35223gXu33cC3C0q3bVf3ike3gnI3GY13iGX3IhV3IIH3Gvg3Go63gNt3ih33gRl3GOf352X2qm38VU3e883GO43Hi03GO73Ih33bVb35gV3IIF3ih8320D3bw13gVT2963hHK3bis3iQH21F2gn3IHw34h53J6z3GnU3Ia03j7e1537s335aj3bGN39Dj32nS3cxG1N3HXw3c7b1J3Cb43J7O3J6X3J7Q3IIC3bhN3IH53Hho3J7415399o23922d3II93GO53j8A3E1x3j7u35Gl324T3iIk2aA3BTs3gO73j7l3c242503Iit3Gp33IIw3DhV3C0Q3Dce3Eqq3BvZ3csR3cLL3Ha53c9e3iu62P7393W3bLr3c0Q3i8P3fmg3hWf3BT0352N317C3h4q1b3cT73clj314S3Di53J6K3G8I36uj3EWg3GFs354D35443Aj83BnA3gfg2Fr2k836Oi2jT2fR3Hpg22134Ct3CsN3h8H3D5H3E4s3c9S3JaB34DB3G3j3Bu43BuL1C332r3cD81e3eaI3j6g3Cfg38ig3J6j163E6L3iKw29e38wr23m3E2I3IEd2Jr3Ieg32Ce21O3f5r3imH2cz2343E5T3HIx33WB347f3HGn3f383INK3H3r32E131Zu3eEX3HNQ3Gd03hvL3DdA3eyJ3HVs3H0I3GNc3Fvu3cfR33Pr3EmC387A3C5c3bjI34ha34yU3gz93dLK3bUM3C5b3aj83bEE3c5h3bmA353b27c3dZQ323e323g2fF25G33F6317M31Yo3D6Q39tl2RX32lS2Wc32LU1h2Hx1D338231V922i26G25z2tH3Hz43iDB3GPv3IEv3IeX3iEZ23K3ee23i5833o024y33oN2ry3jCl2S21h3g2f3Hb934Aw3bMh22U2BL1V2OC32lc2f83i4y2F23cDk24F3HL53hqU2fG21d3BJ62Ti2253E8R3gdT3i1R3i1T29P2153Hz0317U1Q3IUe3C4H3fKK3GFe3F6935qH3Fmx34zm34vK39Dv21k320F3C8e3aTB34U834yu3bGV3aJW34uC3C0X22J34YU3Gyp3bku2xS34UC39dv1o1i3bmU3DDy2ds38Ig2AX355b3dcY34uC32Ns3jf23II53CY922j26034vk38WR21F33ub3HVY3e4i357U3J1S3bt0350H3HWz1422i2663H993Hpi27C22y23i34Xo3cLy3Jf73GXW3cm73GUe3FpK32ue3JbO3ikK3H8333ph3Aw33IrI3Goi3Cly2Qm3GyN3H2L3gNG3IK73cB1113DVD3CO33GH53d9g31m53EL12FR21t2282jT3Bnb32BM2373C4R3dfh3HoT3bjp3e6L3d9x3BWg3bF032x23Ipd3htk32xk24232J93hjT31YL27U3i5J3ENc32X13bqX3hLh3HlJ21G3hll21j3jDu3hkB33I63JD43h6k3hl132oy21B24V26o3dWO25R33lC3jdl2f03jdn3dkL3Gir31x53j1f24K3jcu3j533Jcx3Ieu3iEW31Fe3IEz3Hu53HrG3JDr33G232C13Ie23GLb24P3Inb34372323Hz93hiS3HIu1822L34ix3HVA27S3H4W3j6p22034VY374X25o34eB35h73Jeg3gZn3HwX3GZa34ow3GbQ143Ajw3I7134u834283jem3CZz3c4j35h73jEX3jeZ3C4J3jep3JJf32G83b2O32KV3GOP3hc83C883AVk1p3ipL3HhT3CY13c4X3GoP3iI03d8t3Jje3iGi34uc3b2o3gyO3HY93gyr2by34GX3FhD3b0k32fk3Bgv355z34UC3jF13dL83c623Aj831yf2qM3AJ83568330t3C9q1035h734Cz3EqY3i083GOP355X3Ia53gU235033h8W23F34dH3d8r338Z3DQb34DQ3gbS3HYK31C838wr3b5H3JKI133BT73JKl3j293bIq3JKp3FK0351Q34EB3JFE1q3bP838lR3fT43DgM3ips3jFM3BM33Jfp3C8l39dC22Y21w3hbU34CA3JfY3DRa3Cbs3erL3Ef621O3cr83H82338335Lk3IB81W21g3cX03jGC3EXa3fMk3bjK3gZT3j2V3dL93bT2103GPD312w3J0S111m32RN3DUi35EU3f693h8k33833Hbd3CfG2Fr355z35BB3hS03Jc43I133AFT3ftV343m3jIG1V2xC31ei3jMu32y02XC3HIr3hiT31FT21233Iu33JH33jJ3bIO327526E3dP33J0x2PP3G583IL822R3c2U2BQ3hKQ31B31B3GcN3j1F3g4r323z25y24623N3Dog3IDV32PV3cVV24s31ax22A33JI32K322C22p21F1v24s3HM83I0l1P3HmB3HMD33g23gRw3hUB3IES3Hud33q126r3j4g3Hke1531713HLb2Od2273IIx3HvA3H2i3ewR3DJl3iPz3buB3hNS3JG034Ct3hDJ3i0H3bKw3CUj2At23h2iT34sG3H263JPd3HEJ3JfL1R3JpH3IQ53Gj43hnz3Jg33Gb93e7o34ct3dVD3dVr2ds3BJK3HNb31z63Eoc3J2l3CcG3H813C1n2DS37t831a6320d3ian3F6N3Cja3EWQ3FtO3ErE3CrK3D0Z3jkY3Gbg3IH535Cp3FTc3Ft934dH3Ftd32NS3GNY2wc3ccj2dS35wF3HWO3c2Y3hVQ353e3BxH3By638WR3HX73Dia3C3831v73BNH3ikv3fmk32vV2f826j3hzK3ESw3BGk1924u3Ilk3DAC3i392L13G5i3GEC2up34bP33s522o32rx3E373dfw3bFk2B925l3Frs337924H3DHC3JB8337I3hzo3gSp3H7C3gaO3fz223H3Hh23FvJ3FjY3h1Y3Bhm3gOC3iH33GYa3ih61f3E4E3eOo3GYP3GYq3573350b22r338z3dqn3Bhx3bhe34SX31B0350535zH3iaw3hHv3Ea93bxz22W34273bYJ3jen3JL03GUi3Cy93Icz3AlM3iW929a163bY33J2b35733bw73gqo3GvW3BjK3akx37zi36ZX3JN83C5F22j3CsY3h7p3GzJ3hgz3iE733763i31316125y3ebO3IOq1N22Z3j5P3Ig73ChA21M3eRZ3Idf3H7G22y3hzS26s3brB21W211332A21832jh2Fu31xE2rP2353JjX3j653Gs03j6722Y1L2Mn3ifF31v31Y21P2ar33De3H7o3Gh23Caw3jLV3hVH3JPs3fAA3hwB3c4R27c3H8M3ECm3h8p3AUx3IQU2KK3Jf9356435053CUB35693bu334Uc3h8A1L2Ig1i3JSu35603IsH3c883j2P2gg35y73ixB2cU3h8P3Bvb3JVq3iYm355k34e83D2a351D35823GVO351D3bVB1O1E2tH1X3c4X3Jwf3IRr2DY3IUz3CC83h9b3H9d3bX33jFr3Alm2112Vi3Dhv22f3c3C3ezT31ES3Dk73j4b3F5a25125S3heX3h493HeZ334d2593Hki3jb41n3cvA3F5D3HgQ3Iem3HF53c4E3GjW3bEm3c4I3eot3f1l3FQE3DL63HfI3Clm3cOM3hfl3IGT3GXY3Hfn3H543gKE3ijL3h5Q3Cnq3f6925Y25n34Xf3bPA3c9Q3Bpd2Xd31142F22f422222127d3gli3f103c9323022a35tD26R3Jrs325M2en33Uc1I33ue1m22p3Jj63heF3FeI3d593GzT3Hs23akX2ZD3Hjy3CEe3cKC3j1C3EEC2ra22s31f83eR033Jt1X328g3jSc2L0212340f32sV340I340K312m3GT63FDh3Gsp2Ir3gJO3H1k3GA43C3z22S31X43dl03DY33F663JXY3Gk33jy03H253JxW3i093Hd03gD632uE28g3cFG3F6h3H9a3Gr43AVp23J3k0n3Fmz3BqS3j1t3bnu3D2C3EHF3BmA31Fe3JC83htG33SR312M32Qx32J62pq3H1g3DO53gjl24I345A3jzt2aw3JzV2Ov3gt62L22F83JzJ2kR21F33u1316731b533VH3gSP3EVW3dtS33F53C7k3K1I1621a32AI3fV22dY2393HIt33VK31Sk32v33bFO3i1l33wB3jBc312w312m21I31V233YA23P3HZk3k1u2Yd3H57163JCG3JPb3Di33Hnp3h213CC72FR35UJ3d4Z2cU34Sc3c4r3K2Q22D34Vy3ho23C8v3CFb21z21T3clv3Fvy2Pb3D8M2GG3hQ13cCg3Ewb3gUT34Yv3atb3bjy3Beu3GuZ32mu2123CJ63k3b3BvH21V38GY33833AYX3DMV3GV13jBL3DqJ3BVH3bv73HnA3IQ93JBo3CS23jQ633813k3N3d992ES3gkE3K3r3Ehe3CG23bek3Jnb3Jmr3dE63k2G2133k2I2313eVR3c3I3ggf3jzP29a3Jo829F3fRW3EIZ22N24e3gwI3E2J3Jru21233Sq2iI3eJ621S3ino32Fj3k2i2102j121C3c3w22731YK3hJV3EZ33DaC3Jrp23O341e3INt2aZ22334k63Boi113HV12781R3Js433Qp1h3hsK3bG4323h25X3bj232pT317Y3jMY3dLw3Dgs3cYn3buC3Dm835Re3iJA3gI23i0t3G3U3eWq3gbl3G1034aG3ewV3GUb3fHp3eWY3ERB3EwY3ByP3aTB3507325Q3Cae35mR3HI73Gub3iH13HI13i7b3JqS3J2J3d5j31VE3HY93D913h8W3GnD31BC35B83CO4316y356i3K1v3k5J3fZN3CRk3gUQ3Jq73bv73Erl3i673fTH3IX32By35qh3iX63GU23C543jl334dh3gGa2CU3Jn336ZX3bQi32aw3BvV3JAr3eyn3c5D28r21O3fk73jq831063Id13JAt2nQ35173BsJ3F5R2R332J73ius2nK2l531oR31xg2e835jM2AO317O1n2433h6g3K522kR3k541s33Jy3k1h3JZK3k1K2as2PP3H33313p3Jzk3K2H2kr3I3z3CGj103iP131CK3ej625E3K4t3cl33F5J26e1m3f8v340h3k1c32ai3BQ42B0183DpC3j5v3j5x2173eiI3Gjl3K2k3BMv31L33jGe3DJi3J1O35603I603cFe3GB93C9l26L3Jfr3AmX3K2i3Gvt3HmS3K9x3fUI3HVn3DVF3i0u3Gfr3kA33jFR3AvC22y22P3H9Y3bEO3c0Q3jbQ3HWG21D24524s3GpA3Avc1K1r3h1v3ECI35ZT3Hnq3hQ13K6034ch35443k2u3IgQ23f3JGK3GH133833Hq13BMz3eA13JFj3f713K353FWO3HFQ29e354425D2UH3k1b340j340L3k4f2b93i5g3cGj23Q33KL34az1a25K3e9H3k1u3K8w3K1M31Gm3GGw3Fvm3edm3Dy43Gxx3C5226L3C8L3aLM22Y2313HEE3cbA22U3GJY3avp3Cbe3c5f3HEQ334W2bY2313k9N3i8P3J5x25a33On3k1U3K1W312m3fgo2IG3k9H3kBO312m3K9k1l3jBa3CgJ22X3dox3CL331PR3BSf31yf32D03gCT3k9U3f6R3FQh3E673E473I0u3g3t22x3ka43DI53ka62KR3gVT3kDG3hN23JtA3J1Q3dy53cFc3kdn33ph3C2J3KaJ2Dy38lr3bEl3Kb53bEE3hrC34j53hrE32yQ3KC03K1L2pp31Yc3K1Z3K212b921832ai26031AX3kcv32AI23h2Fl3Je73k0K35223c8k33CC3AKX361b31063Jpr3cyN24E2xs33ph3akX32702bY3JpR3Bhk3B0l35bb3Aj83bel3Id13KE73iEx3dUu337732sC1N2243EiY3J411u3ec13BRn32YN113gDd3HjN2FH3FFn3g9M3BRj34bk3Bja3Jex1n26O3HSL32643JSg2hq2f034Am323H3iBP3gMk3bLm32Pt23y341E3bRz3fyp32e92co2f42ax329I3EtA3Hpl37173I793JVJ3f6934gX3F4S3iZM3hid3I083g6g3i6U353e3JVl392J3Gvc3GNn399o3BuS32OR3GVw3CbI3gVZ3bh63AKX3bJM32KV3izq34Dv3Dyy3AMX3b123kdC31Zv3Iij3ivo3Kgq3aLM352V3BZv31Yf35EG3i483GVT3bhM3kh73C963kH93bIE353p3Bjn3G3D31yF357b3G8Z3ir03Iy13KHI2Po3kHK3bgu3Alm3I9Q3khp357j399o22y2393Ci834zx3eR43BWI3jt43bwS3HWy351P173jKM3IZv3iVG3dGT3AMX3Blf3jE63Bt03Jtz33lE3JU13BEM35NW3bNm33C632eV315L33O533qe2ql1o2183ePt3Hze3ehG3HsY3HzH33N12Bq3iDv23y26Q3Bgn3kFo3GPF326A21233ut32Im1L316w21m2Ee31V31o26C3dKR33xy1p21q3296324b3K4N3Cqg3k973j4K3JSE3BSA3KgH3iNh163e3j31CZ15216319B3JUk3Gmd23b3do521u31Bb1T191v1s2203448317u3f3531ZT31Zv1C3iNj32sV3gta3H9t32lM2fv2gG3gTr3f5t22i3eIY3kGf1924m33WJ34b53HJ22cU3jha3hJv3ee9310621u3Gyd23c3eiy21Z3IYL33lH1l3H2y343726T3GT83bLF2nW21221N3htu21J3GHI27q31v032fJ1r1V33Wi338321u1I22C3fYB227335B335d348i32Ov3H6z3GX33hrR3IoS3dT721C2463eME2Gh22R142663h6g3JHP2ay24L3CPE2283Kku152593g1Q3CPj3gmX2ec3Km433oX3KCa2gG3JoJ1E3hUV2b03HUm29l3eMj33Cg3iOy2rE2DU2163cdy3Jv63C4931cj336T1t336V31ZV25F3FrS3KMF1626Y3Im63Ie72673h0T3I2b3Hl81V3geB3KN11D33Os3KNi3BQ53eS2325M31zv3h5X3c7832CV2183KM43Cn91G3hZo3e3F33LN3hKY34fg3bmJ3IB63BF133T331Zv2153E0N23B3JuZ3In63J663hGw3cHi3GmS316123533DV25c31dt31WB323E3J3K2gY3H3g3KfS3alK3kge2RF3KnE3C693klt31zv24I31w622y24225424634bK3HkM33Gc3hjP1023A32iT3eVa2AL3gSm3EHv33r83hu832NW327r325H2HY33cC228272316a3dEz3bK53kaZ1135mj3k0O34ch3eOa1k34s33Clr1b34m53Di634Ch39WL3K2n3kqs3kQU3Cm53KQw3cF63I9g3jpU3bEo39Hx3hPL1G34Ch35m73KQq3fEJ34d93Fqe3K2N3cIu34Ch3f1z3k2N35kd34D334Ch38k23k2n3c9O3EF23Kcj3bt03c0q21q359a3clr3iye3EA83ipW1A39483Cfe3iyK3CFj3kDY3IpV339F22y3g1w3h5d3d2d3iK53Kqy33Ok3D0q3AvP3Doc3kH43B0y3Gxv1338q73Ksh38j13K2N37j6338z3HDS36UJ3KqT3gUN3KQw3gun3cNE3gUn3hoF3h8j3hAF33833JVM3Bel3h8P36Go35353fK03KsX3e8O3k6z3kqw3k713i9g3H8w23c3Jf331Sx33vp3Hif33pH3hc12111M3HV93jpR3KSU3Kf83C4s3dck3a7z3KT53Jvk103KT83H8o3GnN37L03BUs1j21E3iz6153jvT388c3CYv3JVw3jEu1637l033xc36vv3jw231Bl3fSo3JK8356d3JL4173KrE36pK3jKN3j2e3DdY3gVi3GW63di53KRE21122u3ikr3ktv3bp836PK3cLj3KTz3HO93KT63KH03Ho43gy32Gn38DE3kU83KuA3jvs22b338Z3KuE3kux32Y13jvX3J4l23Y27C1O22d35SE3iYy3k6w3560356z3K7o32P43jPa2272321l34yR3BIq35aP3JKQ34eh3jqw35cB3Kwb3522217163FNl3c2z34iZ3Kwd338z34DH38e13501356Z3I7v3G0e3fnl31Yf358221X2383fnL3hyK1d3kwv3FnL34W93KWu21W35733I8K31Tc356C32P035qr3Kwk2r321K34uC336v3kWj3KVx3kWo2ce3HY93kUR35ji3Kw33kw53kuV3kW83fK03kwa321c3hPj23J34db3AvC3h273fku3Jlf3KXG3KXx3IZ1173KWn21N3kwp3I853fNk3FK03kWU3kWW3Jl03kyB3kx11a3kX33KX5357G3kX73kUb3KXa3kxt350M3KxC3KXe21q3ky13Goi35013kw532mT356E3j8f3KWq23C3CH91635fs3kYm3Ewq3kVz3KXK34DH3Hmy3iZu3JKo3j2F3kxR3jsT1635h7367F34db35h73H27348p3Ky021g3KZI3eSO3kWl2iL3Kyt32sR356C35nb3kZ43gUB3Kz63Kuq3kZ834tF3KZa3KUw3csK35693KZe3BXA3KZh2VK3BxW2172101L3KZm34dB3C1W3ky33DDK3KZT34UC3KzV23e3kw53kUb3Dlx3gYp3Iqn2cU3jwW33ph379e21124Q34XS3I5p1135J83kV733833kFA33cC3apq3bEL32In34cH39283ksv2nu34Xf3hNZ3Ij434ch3ksU3H8E31v33H1y3KSY3CFe3kT03CfE3i9g3GUn3KrY3Gun3G3t3Jn13kvC3jVN3gnN37Ud3bus3bvf3KUb3l0R3j8V3jFr3aqD21123q34VO3L0z3g0334VY3KuT3B0l3cA73B0S2Gn3B293ixg335d3jf9356E3BJM3L0Q3Cml3akX3H903bKg3l04330T3caR3H973Gp133pH36QW3gZ123s3b1T3GWC357u3GK53kFF31063kQ51q3hGY3hRm3BQp36Dx3KCf3FZ629E3Cbb3hq032Sf3cld3h5A3BKN3jBu3G3K3Hs13GzV3BtD3JU42f93kLu1p26y33f63Kn52Wc23C34bp3kpS33G43DkJ3kKq31zV3kkt1s2423EHv3ilC3Bo52Hm3eHV3j6b3j3l2353JFW3h9Z3CbG3hRw3dgl3dJf3JMM3i113d2d3Cd23EDk3l4m3iJ33fNd3CaS3ENO3Eo83l4T3g6P23f3dI03L4s3L3N3h053ECd3Ij63F3d341e3j4132ob2Cu32Fj3BQZ25n3H6t3Cgr33qV3cqq327n3iLY3IG23f2W3bRY3kPp1S3jRr2Mn34AZ1q2En22A35oj239340i1T3F9P317U24O3f5W3kOe3i3W1r2Kp2Kr3G5O3Db53ikr3aJx3j4G3KfH21U3iI93GIv3D4S25P24U2F83aMx1K3fZx3j903gZc2cu2Cx3duW3cA13G043DYc3L533CsU22z33x33hYR31ZP3GQX3k623bKs3Gza3JiZ3F7l3ipq3CiQ3c9L357s3bt63F4C3d5H3FzZ3J9Y3Bnc33cC36263hhf3gNn3JvP3j893iiN3d913jKY3IqD23126h3iiT3At83jx33IRK27S3L6u3HnQ3G6O3e513L6z2F83l6s3Gc922f3CG22m23aKX26032zK23k34dk23234Bp3d0s24i33i63Bmq3Br42A8216341P103fXn3DUu21w24r31D4317m3iMt2Fl21c3hLi161L23339Ft1L33152By3KJ72NQ23H3h9E3hr13caB3j6O3GCV3JpE3bL73Kaq34V23fco31722122cU3HC53L9d3kRW3CD03KR829F34gx3jiw3k383l3i3G963Ki63fB33cEX22Z36jG27c3II63cB53H8q3Cb83CXo3l6q3LA4153FEH3F1N3IHp3L9Z3G063lA231063II63l873Hs23alM3J4R3GxH3bMR3Br53Kg13i5h33hc348m34eS3HlI2GN1g3l932s231pg2bq2Nm31Zv1u23133AN3Bo732px3C5O2lc24y36Jg3DOg3d0S3flB3K4o21W33RF3h7O3L743kAM23f3gH43Ips21D25934YL2qm3At82wH3L9N3GkS3iGp3GxV3lBp3L9H389o2CU3AT831L13KE23lby3J6N3l9q3LC12M23l9u3EkD3k0O3L9v3eKe3GrL3LaH3grc3g6z3LA63aw33HE13L6y3EUm34c93duW3Hzw3jT63gR53gZ83CBF22Z3lCk3FkW3LaL3L553akx3Bsf2f83l8z3Bih3lAz3l943js13eQ33E063Bej21W25e3C693EYS3Br23LAq2a83e9m3klK3hjU347a3bgN3B0U3EVN341234123iGB3G6e3L9e3D2D3f783lbq2453Hc93l9k1W3L9m34Zw3i013ldV3L9Q3LDY3L9h316638WR367f3cxI3laE3HZx3l823LA93Gzd3dZA3lA63JwD3cb93L6Y353i3bU43LAD3eKE3gqM3LCw3L6y3LEJ133j373LD22it22G33N23kjb2Wv3lAT1C3lbH3kBJ21w22j344832d41o3ffq3l8L32tF3l8O29e21V3jNp31w73Lax3ld82s21k3gPJ32Y12313L9B3hEF3ijB3lCA3CF43Ldz3c1N3le23LE43Cp03Cjq3lDw3kAn3LFX3Lea3Lc83LeD3J6m3cSo3LEt3L4u3lCX3hXw3E5A3Lel34003Lco3LA13GZd3G6z3GQx3lCT3LgC3G6p22Z3lgF3Lcr3lD134b434xO3h5u3IE6321Z26c3c7k3KnH3JoL3JON1V25733vh3IdV3GMl2FL3LH233jK3J1j26Q3gsd31612333INO3kNu21X2jl3jI83ieT33Q1329F3I4s32H63Iny1b3EIx2BY3J1i32fE21b25K3bf73I1821I3hZ031es31v031ZU2aO332O3hlZ32gc3lHA3JOK1s3jNS1A2133LFK3l5l3h6c33j93gLg26P3d6v3GSi3hl82163kgb2De3FDh3D0s3JI33ckv2243jiu3Dl03JA83D8C3feA3IpS3iku29E387W3GXV3d0z3Gnf3jPy3fHg3Je93h4x3BU333Ph39t23h8B3kSe3C0Q3lj83clr3d183cfN22Y2Gn3F1z3Hd93Lj7352r3CLr3ct13e7O34ch3C9h3KTx3L9f3guN3kA23I8X34Md3d1p3Ixd38j13j6Y3L213KVK2GY3EU43l2s3gVo34uC38J11O2Qn3C8e3Btd3lJj1E3kTk3kTm3IgM3jW33eB536zx3jw73kh03Jwa3GNl3Gnn35L03bUs3a0C3IYm3c1l3C1n351d35l01k21F3Jpa358A3irp1934zI3iWH3Ft934E83dsB350Y351D34zI34EH3D1G25o23y1D39Dc21K1l35iO332r1H3Eb43B0l372p1C33WR3bZm35Pd2aR3gr9359I350Q34Jq319E331K331k21p38zj1h3C0O3jfB3llN3Hc12GJ3dAv3b7T3CC838e132CB3KSj3LmJ3Hp53BGN2111I38A73ci922F21w325L3h073Bnm3CPe3Li62aP3DoO3BsD3l4B3I3B3LIk32yO3i2A33Iq32yN2663k5w2de26F33uR3kp73jV13Kp93i29329H315K1632Sp1D3juw1r3cQE3gGP3Lhf21e2183hGA3i3o3hRR24z3iE933GB2393lFt3jXU3Le63jtA3FoD3cTb3dxW3LJ33GSg3hEg3lG43l9R3GNg3hNk3B903B92103ATv3BUS3Bip3J8A3iIE3iH63hhP3aTv3Hw73kHU3c883dvY3c88355V3l7q355J3iH33ftD3j7u3lOs3gOk3Itm354s3J8T3I7E3JWw3g9G2dY2112kg3jx53k863Ib834xo21A3Lhl3joy3j543h7F3I3j3KFv2723DE63LHB33JL32Fe24m3k1o32pt3dbh3Ln13d3q33F73h6E3HzJ3hT93LNY3gn026o33ZM3LHw1p21B23t3gJs3Hfv3hl83HLA32632jj3gs43lHb3lIe21o3ffq3kNU2703F8N3EP73JCe33GB25C3frS3GSE1P3H7d3inX3if933nj3e3d3GAF3lqJ3LiC3joM3JoO22L3Ei23aJX3H5V3iE72233LiY3hh33DJK3FmJ3HVe3bl73LJ42L4359o3lbn3jgk3GNb3Jbk3Ftd3LjD3KF1113ljg3Gyg3lJi3kB73COo3I7B3c5B22X3lJO3E7Z3la83Lrn3lRZ3EjJ3lJW352y3IgP3kV83kT43i0U3c9c3kVA34tW33833LK63KSj3BuS3d0Z3lK9338z3G4d3kw93kVp3lKg3lki3AAm3lkk3lRy3LKn3jF93F4A22134Db3Isu3er53LKS3bh636zX3JW93Hg83jWB3LKx3Dav3bus3BHX3LL13JMC3ll43dav3ll63Ll83bW33iw822r34cf3C9O34E83E6F3LLH1b3lLJ359734Zm3lLN3lLp3LLR34zw2Qx3D283lLW2nk3lly3C543lM031Yu2Ba3L6w3cp03lm531Wv1I3lM81h3lMA32F73Bwj3HDy2603Lmf35io3lMH3JX03lmk3IUE3Lmm3LuO3LMp3gz13Lms3jX53Lmw3BEM3BNL3F3D3dpJ3kkm33nJ23P3FLZ3D7d3kke3kGj163hK53HSC1J3HSE3kA43I402Ei32672cA1V21G33vJ3kD4343g3L4e2gY26q3gwS3L5L21f3bLF33PH3b3X3E713BP23hRM3gST3KFu3cVV25d3jXe330Z2LW32Jn3J5W2xi2IL2eN2Ro173hjx3hSw3KJg3iok1733j23bRy33923j4p317t25r2123H9Q3iDr3H7a2vw3DTq3g9m2703l6231x43L642KN3L663Ims3Dkr3knU233332231X53lq52en26D3j4G3GSe24525X3I5L27C25s25E2351Y3lHh33rL31BA31Bc1t2Fh26e3Kno3j4Z26O22h3DT71w23q3GdJ328A3j1F21p3Esc27s36pE3ezC3hpL3bt235BB35zt3K9y3kb53kV83C0s3GUN3eaT3CFe3I8p3D523lAE34cz3Aux3IQ83gz83l7d3C0s3CS23FC33bv634D53I623bub3K6v3eav34Dh3AT834CX3bha3GUg3C4J3Kwt31c836SZ34cH3KGt31EU3FAd3lyn3l4u3Lyp33Oq3CA43F4U3c3022G3L0c2Ds33pO34Iz34ct3ER13j9w22r3jkW34cW25O23K332S34Nd35AD1o3Ii91i34DH3ECG3kF03D5t35fN1O21M38sD34z838ir3Hd936zx3C0Q3C0s3kwQ3Dn93J2o3I7X3Lyv34DQ3bXZ23F34dV3eAV34e03lZ022l3lld353N3c123Bzl357327C34CH34dh3CXj3ksv3Is43j6M34gT34Dh3iX73KHZ3d2D3IZp3izZ3GNB3kHy3g3d3KH02Gy36zX3h8p35qv3iBO3i69350Q351d355K34ed3DYY35141E3Gvo350Q3m1J1O1z329O3AAM3C2J3M0e2Dd350R36ea2ao3c0B35qR34cF3cXJ34E83LYM34Cv3c2J34GT34Cf3Bz73Kl13M2622134Cf3D8X3a0C3bzM35AP35823HWY3Ltr3Aj83m1r3KIu28h3jmE2112303jYo3aAM3m0d3c0R3hCd3i853csx3J2o3lt52Gg3jTX2gG3DRg3i7v3GVX3CFf3m363M0X3L4U3M313m0F3m343C4X3m0I34DQ3m0k3iAI3C073Cbw3C0d3kh03M3G3m0z3K74352O338Z3M2b3M3G3m153c88350M3M0428H35Y333FG21Y34Yf3eKd3m0B38ps1337t821f22b3IXQ3lUD3EHB3igp3Gou34jQ3j1Z3loi2gN363k27T14338Z3Ft432OR2cX28h3bY03CUO3c0s3Bhr3EjI3LmC3iw334E03FTd3Khj2ht338Z3KF73M183llY3BIp3Kh7357S3Alm3M213IAi26L3kHQ3c6422Z3JFT1R2353luo2Ds36No3g2A363W3aAm3lZE3cs23lZh3cJ93hoh2dS3iWs3gJ93BIW2M23iBn3BTD26821Y24z2391X22G32RX3D0s21J34AA343n1V33Y23kKf21j3LDI3L8m3eDd3l8A25k32AY3D6q21V3FIy2ii2nU32It162132Bh3kJS133L5t22O3e5t3I3832E13koJ31eT343j3DOg22w1t34723e0I2m2340y22H3doo22e21l132I43feg3gxL31Xb3gKM3KCo35aJ3JCn2693de63lWr3HGl336Z32lK3I482FU3dPC3KlE3K5s32PS2de24K33fO3Lq91w2j126p33CG3iFh32Ji33vk21X24I33Ln2wz1N31322x33h3k3GPQ3Huc3Hz63h7F3gM03gm2103J4x327q3J4z2533CQf346H31G83brm32wl3Kp83GWx3Chi3cR03iEA3dbl3k963Gtb3ht531Zz21D337F163BO43gkJ313P1H3m8I23w3LQv316122g314d3j4121c3DfQ33Q43G2T317i3m7u3M8633Vi33VK24Z3Hgs3Gmt32vp3lNI3GwX34hl24W33R03kLa2cz3j5K32Bs319G3bdL3GeB337E2B032Gp3gT623w26g26I32J9313q343i1R25a33Vh3kma2bN31CJ21Z21a2HL3hSe2bU26Z3Bf72OB2Od2173k4X3E0N32Wf3LvH3KMb3LvK3MA32HA3kL43i253h9t3i271V3fP62K022o2193k973MAx1k3M9n3kd43Js83ESD31D42313M7U3Kbs314E32vm21s3BO725S31CW3jb73K26337i3Hgp3G2G1P3Fd03KFH21M3l8p3IkZ32Sb3KoY24m3eHV3187318R2ik23b32JV3lw52Eo2w23J5X3aVH3l5T33po2pi3FYt3Chl2ao3iMn3IDx3I593h6L33I63Bja3hiN326F33pu3fYF3cej3jGI33uC24M3bmh3LVo3Bs13gPe2Vw31wl193K973KNu24q3H5Y3LX83I3q3CDi3hG226C3L633iP32kL3Lx03l67163l5H29f1g22833Q83lwN3Iml3f5H3hSD21N26W31Bu23A32xj1a2ce2En1H329z2m21S22k26m3fRn33AN2462573fds2k023q2123lN931573GSJ3LH732643FLw29e34b51o3h3Y3gqe1i23b3BT03gu0103kUT21N3buS3LRi3lBn3Jpx3fuh35Qk34D334CT392A3d9H32UE25524W34xo34Rz27c31xY2FL38lR3Ex53Krd3Cla35013BUS3Kr83Kv83hn43DD935J83JQ03Fhg31c829f3B5H3KRb34VY3Eba22T321m3cFE2303BDM3Dd93d2a3lzQ34D53mFl35A83LZv38J132373bGn3m013M3W3LC93J6M32iN34Dh3Crk3Kqw3m0G3bZC3m3m3d633BW032R13lu928h351P332a3MGX338z338Z3bZ235Gv36zx3M413I7K21n22R21U31YF3i0u3BvF3m1D3akX35y73M1g2Gg3H8p3lkY21j2332263M1m3BI03jjt350Q3ll521K393w1I34cF3jA83c4X3m2N357S3M2P3By23By63M2R3C2i3Ic63cnE22Q21V350q3c9L23c3M251B2MR3M272ki3cTI3m2h3mIS21i3IWT3b7u28H3Ae83LuR1023N3lzV3AuX21f3BS53c2v3ecM3BN4310632iN34cT3I7K3B0L3m4l2343m4n3bWD3LOJ38hm34CZ3KVl3M1Y350122p21s3m4w3m3d3mIM3c0O356E22s21X3m513IW43K6y353N3M573KuZ2DS36tp21122p35pn38lr3mFE3MfG3c4n3iPZ3G073Ea83Mgq3dI93j7C3CsR3Mfq23w3eSO38gi358r3C0038lr3m172m232iN27S3mkE3Lmt3HrX3L9q3mfJ3DjM3Mkk34ct3MKM34Ca3mfq24B3iuT3iyU1K21u34Mh3bGo3d9B33PH35Vh3B1j2B43cyo3fEp3fEa2203j8F3Cbr3CFs35BB3bjY3COk3gZV3HaI3cJp3mkZ3MFh3GxV3mL33Dgs3ml529I3IBb3mfP2Dt2552473Hv93Iy91k2363c183blr3cSJ3mlI3lOC3MLz3MKG3ML231533GF83mm434Rv3Gr53mfq23L3iuE36Au3IB822s34G13lg23MJH3CN035Qh3L2b3mG13mFF34ml3CBx3L7c31063G073D5H3Ml73jFn3L7I27c3l7K3J6v2gN3AeA3hd93Jjd360p3mLp355j39873K3n3c7a3eWY3mk03M0G1d2183kWQ23F353932f135011g21d3BhE23F34Dq3DQb3gVL34UD34e03eRL3khJ2EQ31d83I7V34K53GNx28h3KuZ27C371q21124S35513lg23MmK3ML13Mfi3MMn3hWL3mMP35t23Mm71t25524Q2C735Dq1K23p2413le531723Ii93Hwp3CLZ3mn2123MKZ3i0W3goz3d2D3ftH3cJa3MNC3L7H31c83BeL3MNg3ihu2gn38NP3H8R34d539WL35013miM3jF63EWy3L20356234Ug3cCX2cU3iXD34l83BvS21j3kry3irB3IqY37DK35Gv3IwA3iR41A3mQ433fg25924l3gvT31023MQ83BH63bHb317C3kWX3c0L3Iir3IVH3bBB391421123W38nq3b7s3Iit3aO021123Z3C7x3mkD3mN43mKf3Mor3mM13MOT3MFk3IVM3gd33A4U3MOX25524631Bq1034pA3mfv24m3aTh38lr3Mpt3Cui3EBa3J6R3loG3f7L3iXD3DSV3buS3KRY3j8a3MQA3bH03Loq3Gyc3DSv1O24J34yI3Iab3Iye3J7K35733jfy3mIm3kwq3jka3j8d354S3dsV23925139vR1X31023ms93Dl131W72S43e1m3fCm3Iis338337w921126934Pb3MOp3mR53mL02fM3mKH23f3MM234vy3MM43mg83MKn3MM824a21Q27C3ac43MFV26038Uj3cI93gZB193jiU3hXK3L7z3caB2173cl427C35JX3L6T3cCK3KU93C8Z3IXK29e3MTe33Fg25N3a9c3Lg23FEI3IcG3g6O3Ij53MRO34Ch3mRQ3A6k3mRS3BEl3iXD34x23mQ53mRX3Gy83ih33MRZ3MOH3Ih7153MuF33FG25j2673iyd3Iyf3gY83M373MSB3mnq3m4X3mse3BU23J8e3mUO2392U93MqJ2153msn3bIT3MsQ32nS3mss3IIT372a3GZ125p36Lo3ekD36wo3h8r3MKy3Mt03mM03J6p3mT43MR93mL43Mrb3dI93fCE3bu43MOy23P339F35303ib826d34Ga3LG23ca121733963Mtr3IFu3GQX3Moq3mT23MmM3mKj3Mvr34CT3mMq3hzY3MvU25525b31yp34ss3MFV26n3bc33Lg23avK36pk3gR033Jv3Mfd3mvL3Mml3mOS3MWc3hdG3mWf3MrE2561U3D013hYx3mBT354U3mFY3G6E3cui3mkz3mG43KTY3mg63FBp3MNc3cou36Nz3MgC25m3C8l353b2My3E8839Ra34Z834W03Hxm3c8m38sd3csO3mXb3IPy3kU23g073i613IZT3cn03mXI3f1Y1i3La93mtK27c3mtm3mWU36UJ3MR63MWa3mWX3Mmo3mWD3I413Itl3mre37gX3i5n38Q73ib821h3cRD3IY03cBB3hC13lg93mw935aP3Mr83mwY3MFm33d63My13HRD3Moy24E3iaa37Qn1K21R34m53lg23EBa3Kqt3d8H35gL3D9h3DLA3I9g3d8h3eba22O33823DD93MZA21H3i6434d53MFu3BvC3K3y3mGK3JR83hRd3D5s3MyU3Mt33mT5123Mm43Mvt3MfQ26l3M2z356634B535493Mz93mlL21N3mgh3CBl3MgK3CBl3MIm3CBL356z3d8H3j943gqS37153BMx3kaA3mGG3Mgi3I0U3mgK3gun3MiM3gun34Wg3gun1F34tc3KU13F6934gt3ECK3f1n3lJZ3AK51u3mgF3n0a3mGh3gun3n0s3cFE3mhN3gUn356z3Ho922b3mJp3GoI3cc73Bk23bIH3c4u34ZI3N1836Uj3n1a3mGJ3Mgl3i0u3N0U3CBx3hOH27C3mIT22134vy3Hn621n3Mo23CY4395U3cbV3D5H3N273G8Y3cU93N2A3Gnr3HI13K0t3DE934cG33833IGM3n13352o34ct39dc3dl632wM3dfJ3N2K123N0P3n1B3N1U3i7A3N1w3I0u3n0w3cfE3N0Y3kVa3Ku23lgQ3MY73cT63l873bIW3h9h3bJ03BFX3gtG325C3k2b332a1H3M7g3ENv22U25Z3dKR3KOE2313KEp3L4i26632443Kf33Buc3iiY3GzA3haD3fbG3HR43N2L3MWg3HAI3EHe3kE73Bkj3duU32LL1022m218339H3C6F33FF339k2V13Iso2BQ2292103gyv26E3iNS3j453gY132a631sr31sA2152Xc3gqE32p023H3k4I34371s22y25c3GJI27q3L3i3BRC33Dh33v4349t23B32Hg27E33H93ldL311A2cw2cy3GjM3hyX33B922l3LX63m7Y349d3DX531Eh21m31tE3hKZ33Ph3Kn33LF52603e9H33rM32lg3hJ63h6x3BJ42D43D9G334v3Ldc3HlZ34773LvZ3ie725o25B1432ku3bOD32mB341n2783bOI3BOk341T341v313s3boP2Uw22J3BOR342322H2103EM63G7w26q3gX73L3B2153G2y29F3fDu33Tq2BQ2M933mh3ilR34c31634C52de32nv3fl03ej13Lqh3FEg32u832Sw1532sy332g32t1112603E2W3kLe3hJe3kcO3Bsn3J3G2Z031Sr2z5354k22l21P325l21t1z31sG3m7n33pu2dq32Pp31bM3H1d32013J4m2bQ2Co2gy24U3iEj21e21X3l6N3HJ93fuy312Y21i328G3HUH33LQ32013J0v2CU3lN43BSf3j4f3bQs3bWA22E3BO726W347j3Lpk3lnH3hGV3m983lb629e3C5L3hQ031Vb31vd2Cz3iFl2HC314F2nR33tG3H7O3DvD31023CK03Lea3kRl325L3l123CUo1137Y63cFE31023N333F693ku43Lkw2gN3gy534mL1Z3LSN32Y13L1D3kuF3KVO352X34Uc372P23923e3hW83Cne3l213bh63bTD3l0t3c2M3Gz121J3gZ33mu93Cc03gK3365l3hvm3lZT34Vk362O35ad21A2tH3bMb38wr3B2o3iYe3NA63gBs3Kug3CSK39L0346331YP1x3jl23l2K25P3MFs34UC39l0312Z34Xf3kuM37Wp35013mPy356D3J263K743Djc3hid355V3jK23jvw3nAb1639l023922E3dxR3Lsv3kup356j2203Lly3l0q3Naj3K7r1G3c9c3K7w355W3mnz350m3H5a3HQE35bc34Zg357N2iT35mf34dQ3AyF367f338Z35GX3nCq1835Gx3C8J2xS31yF39dC3bX13GVt3i8p3Kh73mO5193AYF35013I9G3Iai23C3bu731YF3Hov22g2GN36Gi3J6Y3KXp2203KRy3kHE3EKp35GV3gVN3Bu331YF3KUj1X3cLa1x3Nd2330T3M3d3bh33j2D3l2L31t03I9X34E03D1i34CF3Ae834CX34e83fsv3Kwy2ao3NdB3bIF3Jal3NDE3bf8310j3buS3nDv3m4X2kF3i9H355v3NdA357j3HOv22Y3kwH2AV3J0u3KY43nBT1536eA1p3Lt835d83I7p3C4x3kHw3NdY193loy3c0519355k34e03HMW3NE53aFr3nE728P3NAr3bws3Jwk1C3nEc3HOV3Eyn3mhP3C0P3dL83m5g23F3N9U3IaI3M0n3izS34Us3d533mIa3cal34j43KrG31aU1G34ED3MWQ3JPd350Y350Y355w34eh395x38S11G3nGC2QX395X34cV38vu3C0Q3n9U359i359I356e3hQ33nGM1i356E3iAb3NGQ3EUg3nGu22031EB3Ngq334x35851e359i2aO3Ica358235g33dcY3kWt31uC3Car3AKx3ngk1W3bhE23c3nez352j173i7P3KiM3nDw3KyX2103bHe2203mNv3I8b35B83C083Fw43k3e3gw43Car38wR1R24834Vk3At821f3GGm3lmu3lMw3mLT3gwg3cdI3n4U32a93E2I33dG32mP3c86354V3je33lwo343732Jf218345l329K28O2VW345p29a23y25L38SD3JyG3BPc3boh341Q341S3bOM3n6m341x341z3N6p3n6R342423i3l6B3D6G2ek3bJ424J3kBm3gWT3bRo3BrQ3h401n3BrT2gY2553lPw2De22P3n6E3bp9341L3N6H341P3bOj3NJ03BoN3n6N3Nj427U3N6q1Q3N6S3bap2f83k4L163h7N3JiV3m1e3bwh3ekp3E123FVO3n0L3h7U3kVB3D2d3e143cfe3fH73I8x3N1i3FHA3C9S3Di834dB3G8Q3CrX3dLB3d8T3JGp3nKn3dCP3iQD3BtU3NKS3BUL3nkU3N1h3f0R3CrP3nKz3D8s3nl12Ay3mGB3lfi3JDU29E3hra3DE23He333833hl432LJ3J4532p0347i2za339N2Hl3Jmx3nK93KE43kCk3CUo3E653LEe3cbd3CDb3HS2392822G3Gsv3N5q1z3N5s3h1g3h9Q33RM3n7b183hGM3m8731v43hKu33B921s3m9T3Gst3k8t3N793N5Z3njo32Oc27f31uE24933kl334u2OW3CPe3N4I3Gyv22O33773n8F23X3dKJ33RM31SA25V3HkL33923nmC103iDv24k37HZ27c25Y34A33N7X2Z63lW129e3N9325932ab32SV32sX32SZ3n7n3D3w3nJB2cz26t31Y43n8W1J23I3cW93dt824o23M320D3n493N4b3Bre349S339l21u3GKN3L3b21G32b9317m24I3BMH311B3Bwk3GJm3J5t3n8M3Cl63eEr21k22E3kbb3n6f341m3NiY3NjV3BOL3Njx3NJ33bOQ3nK234243CZV22h3f9s3NLL329E3h3y3mB733nJ25A3HGS3n963iN833I433vh3n8f193KQ53E713n662m23L3R22R3N9I3By43f2X32V72613K5f3J4525K3M9Q21E1p3N8q33LP1N1I33Lr2VN23Y26W3N823n843hNj3a6K1h3n883L5t32d021332011a3l6025R31853d3r2zr3J3T3dTV3n543nIE349R33dJ3nO831v03n763Bwj3N9d3cDK143MmY3Dl03gh23IYk3N9o3LCC31d13LSA3mGY3Kv83D0Z3gUn3Ks73n103h8l3B3X3l1w3Na22NK3BUs3N6d3Na63FAI3LSq3NBX3nAD3NAf3GvT3Bwn3NAi3DDY3L233Kdo3lpc3Nao3HVy35h73Dl63NAT133nRZ25o3Naw3BsX21k3NAz3bIy3jEl2bY3b2O3nrJ3kVJ338z399o3CsH3nb73nBh3LB733FG133Nbb32KV3L0o25p2591p3NSj3d012v434zw3cru3H8G3MNv3j2535733haC3i9G3KXp3NBv3NAA3JVR3NBZ3Nc13LkJ31373lsW3k6Z3ksp3Nc83NrT33wK1g3BGu3nCd3mNy3Iz1320d3ixU35B83NcI34Fv3nCK357J3b9021n34DQ35eg3nCt3AlM3NTy3gON3m043NcY3Jmh33fG3ibp3Iuk3jt63m4X3Nd43Ixt3h8h3ND93NEc3JA13NEF3ndG21j3nt33Kw72203hQ33ndl3bxa3NdN3IZv3GvO3NDQ38kY34173NDt3c543KHW3Nd83Nf63NeX22031WP3ICp34e03ngC3m2K3GFA34E83NrZ34cv3neA3nFk357J3nuf3NdF3NeH21j3nUw3NhM3CSX3ndZ3NEO343I34Lb22y2T634Uc31lH3BHM3nUj3NEN3nhh31Yx1C3nhK32Sp3nVJ3NUY3loY3Nv23NE232D03N1K3m0S38Zw3nv71D3Nv93nFI2G23Nvc3NVN3Nh83EL13Bt73NFR3d0Z3nfU34dV3f1Z34cX3Ne33gBd34cf3cJ03K872iG325D34ED35fN35013KQW3nG83iSk23F34EH3aXx34cx325d3nx522l2qX3nX53Ngi2B43LkL3ngW3bjm3nGW3M6z3Ngw3C4X3nGw3c9C3NgZ3hqX350y3nh31c3NH53eRU31cS3nFn1835823bAE3Nhc3D2E1E3NHf3nvW31gO3I7P3i873nVj21l1o3NhP3LlY3Nhs32So3hyQ3NtR3L2R3Nhx3I7E3ni03Ni22Th3Ni433BP3gP73Ni73DJn3aMX3JmS2b53np426e240345J3nIM33DB3NiO345o32e13EzA3M952FC3BrP3BRr3njJ3bRU22n3jhW23g22p3NIv3bOE3JyI3NjU3n6K3Nj13boo3njz1h3nk13N6S25b3N612CZ34gp3nK53mc92L03Ge532YY3BSA3EMh3NQP3N4C27X26X39Ui27c24s23X339f3jYg3Njt3n6j3NjW3nj23N6O3NK03nj622H31Ej3H7o3Hi83dVb3hR53Hhm3Jm93hAE3mxy3L503Kdw3cBi3nl43KgV3FaE3dCp34db3d5o3eb23khl3o0U3EaV3Iqj3ETR3C2z3EtT3Jti3o0U3FMr3Khm3O153o0Z3Cc83my32fy3NLD3bNG3g9i3c4U2FY3C3w313X33242EF3n4T3NP422Q3hRt3HeF3Hq03Nlu3HA03cEs3lG83O1W3gzU2M23BwG25D3ehV3o1N32m83fyQ33FP3IlD3N7s3GwO2V02683d0032Oz331Y3M7M3m7o3due3LVX3H1i3jxR3GT72F833S531sP31sR31ST2Bq3KqB1O25433FO3nib193JZg2683dzK2s61v24k25X32703Lf52CS3Eda3hIN32CE23d3Gn53n3Q3C8l3BxA3c8o3J3334Ca3d9B34413LoC3dY33ejh3KB93LCv3i7f3IgQ3J6i3GFh3Hxu3FkU3jak3h2o3CyN1b3dfj3Hd522y3la3352T3BHm3H5k3kgq3kFb3ikg3JAo22z3cXe33PH3cUw3La637S33Lco3Hac3fA33GK73C9e3hwg3Ik833CC35843beL3kra3O4D33nH3o4g3eRU3L873N4435443E2o3JVL3NLP1j24Z3mbh3jYy3Isw32Vm3jz12BD1M26r23L2th2o122s3MIn1V1p31AZ21W3bJV22622r2ls33ud3o5c3IE02Cu2261X2rF33jT2353hR03jz63lEf3H263h023IJ43kCi3LGb3Gnw3lA03Bl83l5539dv2313fpT3gQ531Lh2Pp33sZ33p22cu3m7l3m7n3NY93CQ43NyT2V032P023T3htX3F2q3f2s3EIy3Gqe3jp633uI3E9B3eq326U3hsS3BSj3j522bZ2kk348C31BO34793lUF329E3Ht63dKT3lwm29f3GXd3O2v25X343g3NnW3NK83gAX22Z3G9f3Csk3ENW3hCv3edl3jM829e3l163Bjp3hDN3C523hxq3edW123hXu3fEE3LCr33Mc3H5I3O4A33Cc34Gt3h583LsB3Di53hdn3Kdv36SZ3myv3Hvs3BiH3j9N3Afu3DVo35QR3Jj03d5U32jv3gH73Gk331Wp3Mg63KGq35Bb3id13C5H3nLh3FCp3lf526U3nNm3o583Jz03Jz23o1S3H7O3m5A3LBN3HH83Ips3iD13HS23o233IE93DEU3fxq3O003No62nq3j4j3o2N3eNH32dW3o342282342Fe3gpG3IB632hG3o6M3m7O3n8U3Hlo3iLd23Y3DkJ3nib32eT3J442V03NPu3CVc2523n523G863o2u3hRi33za3CVv21S1O3ePt3o2Q33JC3KcN1126924433393O3b347Q2I73l6g3O3g33cc3aTV3O3j3N3V3CsJ3o3n3mtn3hwj3G0d3dI23g1E3AM43j6h3o433HDY22Y3Fbb3Cb33h4S3HHm3cFB3c0q3Nkj3l7B3HNK33PH3LMa3jaq3O842dY3dUV173ikb33cc3gXz3gZ83IK93LAi3BEl3j863HIN3cI83o4K3n3w3dR63cN63o893ObW3o4r359e3o4T2233mn122z3fku3oBZ3o4Z3dWk3Axx22G3h3y2e031C121b3M7Q3Md233C63Npm314G3j3s335o3LV21B3fId3Kl93N9e1n21W3Bo734b53e5L3EIj3cWX183Ec13n8R3Nq03nQ232nu3eyR328i3C453CHF3kJK32643KLg3kFv2593DP3324H32PI23b3NOk3h483F5J3eEr3I9e3cVV3Lgx32SB34Bm3I4q3h1M33CD25H33kl3kFh26T3C7k32o429p32o7313v1m3im8310k2373dg63E5f33H93I2D3fL024l3bf73lN12313G5M3DoQ3H0y2Vi32u53GAm3do532Qn31Zj1726124R23033Y732d931Zf2Sx32kZ3oeX22L3n953M963MA83In933c63cpb3n8y316021e25Y3j4g3c3i32j93nNW24z33vh33Uo1E3IyC3Nk93Cuh34cH3n0K3lCc3ekR29E3Mlj31YL3Ntn3j6o3Hac3N9u3CF63NY83dN13Hhc3lOH3mjm2Gn38vU3BUs3hq33J8a3iq73ms03hHo3gYC38VU3Ny931x41x3muh3lP83mso3LpA3L5621121i325l38LR3Asf3Mp93Fvq3Kdw3L2F2gH39FD3MNk3k7j3dl83bgv3b123LKk3dL83GYP3Iz83J8B3LZt23q153IBn21K2113o3f3BiI3oG31W3IaZ3i933bxz3CSb3iAS3BWS3Ki02963iV83k723ll13dv4350q3j7A34ed3FSv3M1r2aO3Mir3hd523e32KV3OhY3BjM3oi03J703oi23nFh3FbC35153K81358O350r3M1o32K234Kt3m2c3IC6355q3bwi3m2N3mIQ31yy357u3DCy3C263N3W3N9u3c1z2203NY83C1Z23C330N2CX3JA122Y3iAK3byS3cT73oix3NhD3Oj03oj23bHz355W34cf3c2x3iYk3m2N350T35823GFa34ED3G4D3bWg3bt73ISx1F22Z23E2XL34KS358234fg325d3G4D350q3IBY2F33OIu3HoP3eYn3oJc3nFs1W3OjE3IHA3ojG3IWg1C3OjJ34CF3m233ojM3CiU3Ojp3jE93oJr3dL83oJT3C283BgU3oJT21Q21b3oJx2hV1D34Ih3oK13JE93oK31g3OI53OK63nHJ2603ohF3aW321f22p39fd3lmj27c3atv21123a3aW73lG23ogX3oG23OIy3fog356E3OG63cLr3BuB3Og83mRt3lOJ39Hn3oGD2w83j7a34dH3j723mS13c4j35yy1o3M483IU91C3gnS3caX3GOC3CFS3h8Z2iu3Dwj2773GOu3HHN3BvV3MPF3Iys3ceX32Mh21121t22s3jX521Y3id33JbZ33cD34bp3Idv3nLR3FP93LJ43HAC3DF53lj33oCc3l3O3gzh3dUU3cr03omw3O1t3Gf13oFY3On33c5B3oBi3DQ13on23nLZ3l5537Wp3dWF3Nlk3O6R21924Y25g2b43OF33KuI32ky31zI32L1173MEo3Ie93gQ53Eq02DK34083Kp0320E2Ix3gWl3epo32yx318734z332o83NqM3OFG2473I1G3GsT3L5a3f041D26M24j3O083nJs3NoT3NzI3now3o0E3Nzm3O0g2703D3o3CGR3MEL3Imk31D43BlN1n3jL43I233KL52wu3MbL22Y3cDy33S521632Sn2ZS3e9H3M8m3M8o3I3Q33F63LpZ3O9h3MD23l4D3Kpj3cZ825W3M8r3JOz3m8T33q13M8v3Gpz2673e2w3GQE3H1H3Md433O03Lpo31tk2672433hQH3gRX3in73j673g1W3Kjo2FB2FD3Kjq31zp3kjt32xc28a3kjx32AW33Xb3Cpd3lB33lVI3H623l3632it3Ko82dY3L4A2T7348Q3G2h3lQS3gLl36J83HRm3NQZ3N3q324436fm34313KEx27s3kxx3M043CFV3Kf43N3v3m213d8H3OgG3n0L3J923C953i693cTd3EQL3cII3FH53eaC3di93aW33cto3MVT3hx03kcI3kE53CJX3M323oRE332u3Mze2Nu1F27s37s33lG93hMj3iZO3lBy356E3ORJ3gF4355W3OB33kRv3Gz93C0q3IJ03D173E3Y3L4n3O663nKa3CSO3iZ03n403LzC3JK43cfb3bzo3F6n3o4S3clZ3o1f322s3mY53Gk53gzB3MW5359F3D2S3jF122Z3OT2331K3d2S3Jf73oT634XF3Ot83FbE3jGc3Otb3D6e3d9v387w29f3OFZ3E453oLL3IK42Fh3jGf3BeO3IhT29e3h8P3Cb73kH53jf93Oly2CA3L013MuL3hHp3Cb71O2fD3GvT3c9C3j8a3e18338Z3BN33b0l2QM3KuY3iIT35Lw3ICh22S3iu638lR3ENX3hox3IBv3fhY3cCw3Ot13otC3nqA3Lgn3D5U3OtN23f3kSg3j1X3IhS3J6u3mpo3OH23Mq53IIM3oTY3NUO3ogh3bU23GYc36Hc1O2202283Hht3ca13I253fKA3MJ033833bZ23OLG3olI34z836fM3mxs3iho3gk1352O3OsP3buj3mN93Jj93oss34wI3oSU3oCA3OSW3nLb3m0Y3hPp3fHu3EjX3OUv3IKj3ClR3oLp3J1X3og93IXD36no3L1Z313U3mUu3lP93J8W338335yy3fZ43ofR3gKh3c0P3oTG3Ot33fBE3oT53OT73nQA3FbE3Ota3OWU3D2S3otF3oWy3gC93oTj3Onb3CDB22m3d633bIZ3BnM3ehV3JdG33Qt1l32aZ2bq3Jur3o833htW3L5b3KOy2333O613JxU3hZX3EDn3gf83E6f3IJj3CN03BKA3bES3jrh3C5f3O8Z34Cb31d83bJ73hGN24k3eE23lfF3Br524z3f8v23A325Z31Eo22G2993jCp34O232zd314D3NP71B21y32fI3KoY2213INO32MZ3J2i32FM21R3oO33nul32Mb3BS631bP2831d26924W3MRH3O093oOO3O0c3Boo22k35b831uM21S332T27R3aS71t2v23bWA1922822m32mP2eZ328U3IHc3fVJ3kRu3l1b3igc3eOc3fzH3CYG3Jr73K3V3K6Q3Ejt3iz03M103N143m183Aj83lt622O3NtG35St3jKF32g83osT3Iq91F3D8O3n1L316s3mPL33cc3BNE3Beo3Nlf31D53ox63BeM2Ik3Ox92cu3oxb3JdI3BP132rX3bNV22L23H24Z3ooz3Bj421M32hg3l5C32fM24X3bsq33ce3c6933qf2b03O2k3Cej3m6o22P3Ozn3oXn3h213N9s3BtE3IjK3L153LC33J9k3mFV3M9N3HVY3e133fPg3e7P353N3oxs3Jc03n1N34C934zi3jbi3IpX3jFK3F6934zi3K0g34Cw3Blz3djf3gky3N1M3Kiz3bM73f0W3BMA2jp3o0533f622Q2Tu34ve32j93p13326A25b3evN29g3l8G3OXF27C23H21t3dOo3P0R2oC3lf43bp32od21C3h3y3K2031yl3i3q3O7L31fd31fF26Y3BF73IuE22L34y73bj93bjB3gjm3Ci83KEQ3bHv3eH03k0t2Fr34cR3hdu3gj53fVo34J53CsC34TY3EoT3bHm3D5H3K3X3AJa3lSH3519331j3MJc3DY43F4W3P013JJM1234Cr3DRw34d33m163eKG2nQ355b34e83j223Dch3k773HYa3gBs3AjA3P082qm351a3K6n35263jJc2bY3Aj83GV93P053lcE3a9k3bNd3bj63Bkb3oXW33LE3k863kFE33703hz03Me53lBB1024026g1Y26G26R3ofi310631871L22X3cDY3oYp3koY22F31S126221a24U3P5e123C3w3P2m3KLF25x34Xo1a21J26z22C24v3P623P643P633P653p6822C24832a2313F2Em313I313k28A25231Tj23t24y22A26426S26n3HL22Y7310J24225223z1u26S2323ITL3Bmv3cfm3HW13J9y38jt3F6n3BN63CY73oUu3i7e3p4U3i6W3ihd3cCV3hx83Bih3M4L3lZR3gYJ35433p7B3C4J3bHH3KWd3j7d3jkb354N3CCU34zI34Dh3g933K7R354n3j0a3BH93gpA353N3p043p3s32jF2233cLv3Efm2Fr3Imq3I5x3DI43dDW3CUB3j283nTg2Zm3iId3DqF3I88352B3JLj3i0531y62CY3CjT2Gy3bgv34ID3jw33i6i3dRs3BuM3i7122z3fG03IvO3aE82Vi3kIy3C4j3JTQ3Csk3P8D3E6O34kW32Fk32NS2Qm21p21q2gn35Fn3jkv3K4436pK3MpW3Btf34Uc380n38wR3p0k22f3hyP35Bb3J0k2Fy3l6b23m3bq921P21j1723Z3iLY3BOz31B131b32F526q3dkr3P5M3BqZ21R3O7622p3bqH3bQJ28a2BB2223Eea32R121c25Y3IL821233Op3eeX3kdt353j3Fju34Ud3d8O35393gYw3j9v352U2513LrT3Alm33392GG3gyi3BJt25N3J8E3BHb23923G3mfx3nL73nkr3L9P3J6M3jLL3P4m3c2Z3MK82553C2p3G3v31X43nAE32Lq3m4I3dvN3dGT380N35Bb3p9O3lpg38Wr3G563o293l4B3n7D3In33BS03CpH3MB71S3oYK3n8v3P381221v3OYo3BqY32fM3Bgg3lDU3eKe3bmy3FPg3k0T3cex2203jr63Lys3c312Bq3Bt73I6y35123mso3btA32g83b123DmV3mne103a9K29f3p0I3HR93P5231d53l893bM13mx33jmr3Opj1c3mE33lWN3Cvl3OxJ3bQz24X3HG13kFp3E2q3Jzd3MeZ3HL83Lq73lgy3j423LI53kL13K943icH34j13p3d3cr03GsP23g3h9q33vj28a33oJ2hF324w3kPb21e32wx3o723LNG3OfA3n973In93cpe21C1f34l53jYU33CC1W3iIS3bfT3nJC3N5222i3INo3OP93OPB2213inW3LHR3LR01B2Fw3BqS327424Q33c6329C31De24L3imO3Hg63I2R21f3gMw3mds3liq3OxF3bli1w3gyY2My3Ii91C34N527c2233ju23D6Q3CVV3loj3bp829e21w22K34Xc35bf2353iXF3PFP3pFP3PFR346g33FG3AK522021G3Mmy3D6Q3pg23PG42M222w2363l553pG02M23pGa29E3IR73PGg3pGl27c3Pgi3kvs3PGb2M235553ivM2F93pgu2L43PGU3PfR1C35SE2252373c2U34003dq12353ph422x3pH63pgJ3370152312GN23121G3PgE35bf3BP93PG83C8z3PH92Cn3phm33fg3pfY3bEp2gn22821n22631Kb3C1S337034j423723J3ajd3C1s3LRw1C3pi32hB3oKg3PHQ3Pfr1223F22p3pgD39OA3PIc29F3Pgd103pig3pII3pIK3PGe3pgN2gN3Ixd33rq23f230322k321c36Lh321f22t35822203NZf27X2233Jyk31163JYN3JYp33dN22O3jys3PeJ1i23h22F21624i3Pa131AZ3pa331b43H1l33cC22w21y336J3OqT348P32R7348r3l8p25D3E8L3OPe2IO2x33c3v3H7O3iz03kqR3h1y3F7f3FW73Ow83cm53f433Otq3j6t3L7L2GN3BWG3P9G3eoa3jk03k6t3HI03lOy356Z3hiA3Hic31793OVI3ha63gZ121h31X43Jls3cBu3o653N1627S3IW03Elr3lKC3L9t3nr53c1W3n153OnE3MPE3BJL1z3k0q3ER53Pl73P753En43P7731cF22533FI3p723FUi3bUM3IJt3n1P3hp23hN71F3PLC31063P763ATV3bdL33fI3iVd3c4r3HNI3FvR3pLn3j7C22L34vy3kRm3K0p3hwm3EoH34vy3aVC367F3J9r3myY3isU3MjI3c5i34ZI34D53KXx36Hp3Bkg2fr34Id3k2s3iGp3F6n3c0Q356z3Cs23K6B34ug34Yu36sz3IxD37F53gY63K7w356R34FY3Ou03D5t356x3Bu328h37F51o1y3Iaa3Iv62G3356c3PN23HyI2mY3nhu3P033bhn3KIU3p3n3Ksj32sY3IuT34vX3cbt3n2m3eCm3n2p388X3clj22z21934qr33833dsr3gWD35bB3BmB3bSJ3p123koY26o3D4e3Boc1g3Ei23oai331U3p5i34963kGm33Cc3pLn3Ear3G0Q3f4S3f473O693j9Y2EQ3obL113bZO3bm63CdB3dJY3po53JmR3GRu3p5I22m3eeA3Ii923c3pO73bqZ3C493Oah36Hs3poi27C3pLN3gh23OBj3G3U3D533DGy3hoc3bM43Pos3Pou33Cc3Kj03gIb29F"),(#U-((176-#("I am leaving CS:GO and giving away my knives. Hurry up pick some >> discord.gg moonsec"))));local function h(e,n,...)if(e==649001966)then return(t((((n)-712524)-48283)-454308,651343));elseif(e==535318271)then return(t((t(n,532693))-953992,780337));elseif(e==564342319)then return(t(t(t(t((n)-809594,296865),927552),613935),43812));elseif(e==29441446)then return(t(t(t(t(t(n,618809),187478),58628),749630),444115));elseif(e==444886261)then return(t(t(t(n,99112),563266),589440));elseif(e==758098103)then return(t((t(t((n)-159410,590005),34200))-149326,187340));elseif(e==348968146)then return(t((t(t(n,441476),264807))-433028,410125));elseif(e==704751908)then return(t(t((n)-456981,864009),437407));elseif(e==662495255)then return(t(t((t(n,149087))-973704,563789),813191));elseif(e==6368081)then return(((t(t(n,866127),204840))-512414)-114291);elseif(e==169158980)then return(t((t(n,831097))-644809,354191));elseif(e==744039523)then return(t(t(t((n)-899331,824498),511860),210714));elseif(e==719921999)then return(((t(t((n)-105393,981724),101810))-65440)-419936);elseif(e==61162758)then return(t(((t(n,126320))-897210)-173111,763974));end;end;local function n(e,n,...)if(e==368092490)then return((t((n)-359557,325867))-48376);elseif(e==542288315)then return(t(t(((n)-875318)-898375,756684),938282));elseif(e==552586562)then return(t((t(t((n)-284110,454956),537367))-617172,348425));elseif(e==612478771)then return(t(t(((n)-990936)-656442,817444),459996));elseif(e==380786844)then return(t((t(t(n,299714),942552))-861977,328504));elseif(e==566320159)then return(((t(t(n,505680),898718))-466263)-446974);elseif(e==898790465)then return(t(t(t(n,266356),186622),895227));elseif(e==219977209)then return(t((t(n,287019))-417109,333649));elseif(e==815270831)then return(t(t((t((n)-63330,229594))-414699,300509),743610));elseif(e==833311065)then return(t((t((t(n,297907))-280987,154130))-297443,526445));elseif(e==988787140)then return(t(t((t(n,474590))-116375,305977),813615));else end;end;if _ENV then _ENV._ENV=_ENV end;local n=c[((#{258;511;(function(...)return 825;end)()}+902627201))];local i=c[((#{528;785;193;579;(function(...)return 654,591,300;end)()}+708256300))];local B=c[((#{468;429;120;753;}+458835296))];local d=c[(21591876)];local A=c[((148932297-#("MoSattout")))];local m=c[(140361372)];local r=c[(719847174)];local l=c.H0Qwk0iE0P;local function u(n,e,o)if(o)then local e=(n/d^(e-l))%d^((o-l)-(e-l)+l);return(e-(e%l));else local e=d^(e-l);return(((n%(e+e)>=e)and(l))or(i));end;end;local function i()local l,x=g(E,o,o+d);l=t(l,e);e=l%n;x=t(x,e);e=x%n;o=o+d;return((x*n)+l);end;local function d()local l,c,d,x=g(E,o,o+A);l=t(l,e);e=l%n;c=t(c,e);e=c%n;d=t(d,e);e=d%n;x=t(x,e);e=x%n;o+=B;return((x*m)+(d*r)+(c*n)+l);end;local function r()local x=t(g(E,o,o),e);e=x%n;o=(o+l);return(x);end;local S="\35";local function m(...)return({...}),T(S,...);end;local function z(...)local z=c["yk32jm"];local B=c.Uv2DvdPtjL;local w=c[((#{737;197;700;(function(...)return 732,297;end)()}+148932283))];local F=c["n0g3HPx"];local A=c[((#{346;513;371;}+21591873))];local T=c[(905724386)];local U=c[((#{990;382;490;957;(function(...)return;end)()}+273309998))];local L=c[((477086961-#("This obfuscation string was sponsored by NordVPN, the easiest way to protect yourself from nonexistent cyber threats.")))];local n=c.H0Qwk0iE0P;local Q=c[((1182000-#("faint#6969 is a big skid. wait..")))];local m=c[(902627204)];local _=c['x1SUAZt0'];local h=c["UXdoTN"];local P=c[(343335124)];local y=c[((921334553-#("Remember when psu messed with ms? ok fed is now head management")))];local q=c[(353214665)];local C=c[((458835395-#("sometimes, I put vegetable oil all over my body and slide around my house as if I was a penguin")))];local W=c[((#{655;}+258153758))];local S=c[((791106669-#("cockie")))];local l=c[(708256307)];local function v(...)local s=({});local c=({});local I=({});local Z=r(e);for f=l,x(d,e)-n,n do local i=r(e);if(a(i%h,A))then local e=r(e);c[f]=(e~=l);elseif(a(i%h,C))then while(true)do local d=x(d,e);if(a(d,l))then c[f]=('');break;end;if(V(d,U))then local l,a=(''),(b(E,o,D(o,d)-n));o=o+d;for n=n,#a,n do local n=x(t,g(b(a,n,n)),e);e=M(n,m);l=l..p[n];end;c[f]=l;else local n,l=(''),({g(E,o,N(o+d,n))});o=o+d;for o,l in H(l)do local l=t(l,e);e=M(l,m);n=n..p[l];end;c[f]=n;end;break;end;elseif(i%h==l)then while(true)do local e=d(e);c[f]=x(b,E,o,D(o,e)-n);o=D(o,e);break;end;elseif(M(i,h)==B)then while(true)do local o=d(e);local e=x(d,e);local t=n;local d=D((k(u(e,n,_),(A^P))),o);local o=u(e,h,q);local e=(G((-n),x(u,e,P)));if(a(o,l))then if(a(d,l))then c[f]=x(O,e*l);break;else o=n;t=l;end;elseif(o==z)then c[f]=(d==l)and(k(e,(j(n,l))))or(k(e,(l/l)));break;end;local e=k(x(Y,e,o-T),(D(t,(j(d,(A^W))))));c[f]=a(e%n,l)and O(e)or e break;end;else c[f]=nil end;end;local o=d(e);for e=l,N(o,n),n do s[e]=({});end;for g=l,o-n,n do local o=r(e);if(o~=l)then o=o-n;local p,h,t,f,E,m=l,l,l,l,l,l;local b=u(o,n,w);if(a(b,B))then elseif(b==A)then f=(x(i,e));t=s[(d(e))];E=(r(e));elseif(a(b,n))then f=(i(e));t=(d(e));E=(x(r,e));elseif(a(b,y))then h=(i(e));f=(i(e));t=(x(d,e));E=(x(r,e));m=({});for o=n,h,n do m[o]=({[l]=r(e),[n]=x(i,e)});end;elseif(a(b,w))then h=(i(e));f=(i(e));t=s[(d(e))];E=(x(r,e));elseif(a(b,l))then h=(x(i,e));f=(i(e));t=(i(e));E=(r(e));end;if(a(u(o,y,y),n))then t=c[t];end;if(u(o,F,F)==n)then p=s[x(d,e)];else p=s[g+n];end;if(u(o,B,B)==n)then h=c[h];end;if(u(o,C,C)==n)then f=c[f];end;if(u(o,S,S)==n)then m=({});for e=n,r(),n do m[e]=x(d);end;end;local e=s[g];e[-L]=E;e["PGMfo"]=h;e['ZYTnpfszD8']=p;e['SuUZMlo2']=t;e["BPY"]=m;e['suSezrg']=f;end;end;local o=i(e);for e=l,d(e)-n,n do I[e]=v();end;return({[Q]=s;["Dyg"]=l;['pnyFT']=I;['vSk4s']=Z;["SWbtuPFJup"]=o;["bJMkTGTqSe"]=c;});end;return(v(...));end;local function B(e,u,i,...)local n=e["bJMkTGTqSe"];local r=e['SWbtuPFJup'];local g=e[814111];local C=i['\86\101\99\116\111\114\51'];local a=e["vSk4s"];local b=0;local D=e["pnyFT"];return(function(...)local w="BPY";local d='PGMfo';local o='SuUZMlo2';local n={};local E=-(1);local e=(true);local l='suSezrg';local p={...};local x="ZYTnpfszD8";local e=(222440921);local A=({});local k=(T(S,...)-1);local b=g[b];local g={};local F=-841110;local e=C and 1 or 0;for e=0,k,e do if(e>=a)then g[e-a]=p[e+1];else n[e]=p[e+1];end;end;local p=k-a+1;repeat local e=b;local a=e[F];b=e[x];if(a<=h(744039523,1451498))then if(a<=h(662495255,1148928))then if(a<=((f[71801169])or(c[839102444](t(820110253,821734643),t,f,71801169))))then if(a<=h(t(927070384,c.ck1ee9L4Bn),t(453966094,c['ck1ee9L4Bn'])))then if(a<=((f[90887663])or((function(e)f[90887663]=t(t(t(((e)-857393)-789530,58602),763095),853088);return(f[90887663]);end)(t(258799675,259235217)))))then if(a<=t(449292245,449292245))then local x=n[e[d]];if(not(x))then n[e[l]]=x;b=e[o];end;elseif(a==h(719921999,637728))then elseif(a<=((f[332211144])or(c[200244934](t(453334231,c.ck1ee9L4Bn),t,f,332211144))))then n[e[l]]=y(256);end;elseif(a<=((f[8917921])or(c[874467716](t(187852324,188063105),t,f,8917921))))then if(a==((f[93779580])or(c[841182038](t(830326106,c[125643710]),t,f,93779580))))then e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local t=e[l];local c=n[e[o]];n[t+1]=c;n[t]=c[e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];local h;local f;local a;local c=0;local function t(e,n,l)e=(c+e)%3 c=((e~=0)and c+((e<2)and-n or n)or c*n)%l return c end for x=0,29 do if t(3020,7145+x,2082)>1041 then if t(8813,2618+x,3536)<1768 then if t(8889,1461+x,1146)<573 then else end else if t(5681,2837+x,2236)>=1118 then else end end else if t(5264,2391+x,3852)<=1926 then if t(2234,5370+x,1056)>=528 then n[a]=f;else end else if t(2164,8842+x,3466)<1733 then a=e[h];else h=l;end end f=e[o];end end n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=(e[o]~=0);e=e[x];local t=e[l];n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t](n[1+t]);for e=t,r do n[e]=nil;end;e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];e=e[x];elseif(a<=h(t(34359959,63797041),t(454959697,c['ck1ee9L4Bn'])))then n[e[l]]=n[e[o]]*e[d];end;elseif(a==t(618532474,618532479))then n[e[l]]=e[o]-n[e[d]];elseif(a<=((f[567138175])or((function(e)f[567138175]=t((t(((e)-991380)-797596,834213))-779197,547048);return(f[567138175]);end)(t(574813861,c[253204386])))))then n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]][e[o]]=e[d];e=e[x];e=e[x];end;elseif(a<=h(744039523,1451481))then if(a<=h(t(852701047,c[125643710]),1708111))then if(a>h(t(909603940,c['ck1ee9L4Bn']),988390))then e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local E;local b;local h;local f;local a;local c=0;local function t(n,e,l)e=(c+e)%3 c=((e~=0)and c+((1==e)and-n or n)or c*n)%l return c end for x=0,34 do if t(7245,7768+x,2514)>1257 then f=E[h];if t(8876,4012+x,1552)>776 then if t(3925,6784+x,1772)<=886 then n[e[l]]=#n[e[o]];else end else if t(7875,3304+x,1126)<=563 then a=e[b];else end n[a]=f;end else E=i;if t(5888,2305+x,3858)<1929 then if t(3030,4401+x,954)<=477 then n[e[l]]=e[o]-e[d];else end else if t(1255,1253+x,608)>=304 then else b=l;end h=e[o];end end end n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]][e[o]]=n[e[d]];e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local t=e[l];local c=n[e[o]];n[t+1]=c;n[t]=c[e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];e=e[x];elseif(a<h(t(499637353,497481528),t(608110206,607682816)))then local l=e[l];n[l](s(n,l+1,e[o]));for e=l+1,r do n[e]=nil;end;end;elseif(a==h(t(756596438,784202704),t(577451179,c[253204386])))then local t=e[l];local c=n[e[o]];n[t+1]=c;n[t]=c[e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=n[e[o]];e=e[x];local c=e[o];local t=n[c];for e=c+1,e[d]do t=t..n[e];end;n[e[l]]=t;e=e[x];local d=e[l];local t,o=m(n[d](s(n,d+1,e[o])));E=o+d-1;local o=0;for e=d,E do o=o+1;n[e]=t[o];end;e=e[x];local l=e[l];n[l]=n[l](s(n,l+1,E));for e=l+1,E do n[e]=nil;end;e=e[x];e=e[x];elseif(a<=((f[691256006])or((function(e)f[691256006]=(((e)-724297)-272623)-324207;return(f[691256006]);end)(t(417209944,415905513)))))then local l=e[l];do return n[l](s(n,l+1,e[o]))end;end;elseif(a<=h(t(698791423,100635036),t(70165071,70813596)))then if(a>((f[855808535])or((function(e)f[855808535]=t((((e)-996952)-23409)-618100,437203);return(f[855808535]);end)(t(511074942,c[165995577])))))then n[e[l]]();elseif(a<h(704751908,1211567))then e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]][e[o]]=e[d];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t](n[1+t]);for e=t,r do n[e]=nil;end;e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local c=e[l];local t=n[e[o]];n[c+1]=t;n[c]=t[e[d]];e=e[x];local u;local b;local h;local f;local a;local c=0;local function t(n,e,l)e=(c+e)%3 c=((e~=0)and c+((e<2)and n or-n)or c*n)%l return c end for x=2,31 do if t(2587,5155+x,3550)>1775 then if t(6386,9536+x,458)>=229 then if t(4445,9353+x,3096)<1548 then else end else f=u[h];if t(4273,2650+x,1428)>=714 then a=e[b];else end end n[a]=f;else if t(1239,5145+x,3044)<=1522 then if t(6022,1309+x,1454)<=727 then n[e[l]]=#n[e[o]];else end else if t(9009,7552+x,2652)<=1326 then u=i;else h=e[o];end b=l;end end end n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];local s;local r;local a;local f;local h;local c=0;local function t(e,n,l)e=(c+e)%3 c=((e~=0)and c+((1==e)and n or-n)or c*n)%l return c end for x=2,28 do if t(5870,1038+x,3920)<1960 then if t(5264,7772+x,1616)<=808 then if t(3903,4511+x,346)>=173 then a=e[o];else end f=s[a];else if t(1285,7381+x,2592)>1296 then else r=l;end end else if t(3450,2431+x,3778)>1889 then if t(2928,1490+x,2454)>=1227 then s=i;else end else h=e[r];if t(5502,5091+x,2636)>=1318 then else n[h]=f;end end end end n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];e=e[x];end;elseif(a>h(t(695802485,85999126),t(828395429,c[125643710])))then n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local c=e[l];local t=n[e[o]];n[c+1]=t;n[c]=t[e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=(e[o]~=0);e=e[x];local t=e[l];n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]][e[o]]=e[d];e=e[x];e=e[x];elseif(a<14)then local l=e[l];local o,e=m(n[l](s(n,l+1,e[o])));E=e+l-1;local e=0;for l=l,E do e=e+1;n[l]=o[e];end;end;elseif(a<=h(29441446,458387))then if(a<=t(542636604,542636589))then if(a<=h(169158980,233520))then e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]][e[o]]=n[e[d]];e=e[x];e=e[x];elseif(a==((f[136052152])or((function(e)f[136052152]=t((t(((e)-901837)-361177,643848))-79207,591477);return(f[136052152]);end)(t(811414320,810163546)))))then e=e[x];local o=e[l];E=o+p-1;for e=0,p do n[o+e]=g[e];end;for e=E+1,r do n[e]=nil;end;e=e[x];local l=e[l];do return s(n,l,E);end;e=e[x];e=e[x];elseif(a<=h(535318271,1201789))then local a;local f;local i;local r;local u;local h;local c=0;local m=0;local function t(e,n,l)e=(c+e)%3 c=((e~=0)and c+((1==e)and-n or n)or c*n)%l return c end for x=1,32 do if t(8709,8174+x,3814)<1907 then if t(1406,5554+x,1494)>747 then a=e;if t(3173,4539+x,424)>212 then f=o;else end else if t(1653,7379+x,2864)>=1432 then else end end else i=l;if t(6010,2620+x,2126)>=1063 then if t(5499,1957+x,1182)>=591 then if m~=1 then n[h]=u;m=1;end;else u=r[a[f]];end h=a[i];else if t(1471,5081+x,3408)<1704 then if(e[l]~=e[d])then b=b+1;else b=e[o];end;else r=n;end end end end n[e[l]]=e[o];e=e[x];local d=e[l];do return n[d](s(n,d+1,e[o]))end;e=e[x];local l=e[l];do return s(n,l,E);end;e=e[x];e=e[x];end;elseif(a<=19)then if(a>t(383419344,383419330))then local e=e[l];n[e](s(n,e+1,E));for e=e+1,E do n[e]=nil;end;elseif(a<h(t(205241620,c[61679461]),t(590634462,c[695852875])))then n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]][e[o]]=e[d];e=e[x];e=e[x];end;elseif(a==h(t(59973427,c[454240379]),1451467))then if(n[e[l]]~=e[d])then b=e[o];end;elseif(a<=h(t(22396378,188781726),233498))then if(n[e[l]]==n[e[d]])then b=e[o];end;end;elseif(a<=((f[780400255])or((function(e)f[780400255]=t((t(e,185445))-389159,844805);return(f[780400255]);end)(t(68388578,67339972)))))then if(a<=((f[698836282])or((function(e)f[698836282]=t(t(((e)-665921)-838098,840806),177774);return(f[698836282]);end)(t(204152797,202263279)))))then if(a==t(106130755,106130773))then b=e[o];elseif(a<=h(t(82874924,c.ck1ee9L4Bn),t(610518343,c.cN2mXrfEeC)))then local a;local f;local s;local h;local E;local u;local c=0;local m=0;local function t(e,n,l)e=(c+e)%3 c=((e~=0)and c+((1==e)and n or-n)or c*n)%l return c end for x=1,25 do if t(5690,8349+x,378)>=189 then if t(5512,8730+x,2414)<=1207 then if t(2006,3277+x,638)<319 then b=e[o];else a=e;end f=o;else if t(5090,7782+x,1642)<821 then E=h[a[f]];else end u=a[s];end else if t(9104,4984+x,1684)>=842 then if t(5383,3077+x,3514)<=1757 then s=l;else end else if t(2005,1082+x,304)>=152 then if m~=1 then n[u]=E;m=1;end;else end end h=n;end end local t=e[l];n[t](n[1+t]);for e=t,r do n[e]=nil;end;e=e[x];n[e[l]]=#n[e[o]];e=e[x];n[e[l]]=n[e[o]]+e[d];e=e[x];local u;local h;local f;local s;local a;local c=0;local function t(e,n,l)e=(c+e)%3 c=((e~=0)and c+((e<2)and n or-n)or c*n)%l return c end for x=2,31 do if t(5739,3275+x,3084)<=1542 then if t(7063,9650+x,2876)>=1438 then if t(1260,6707+x,2090)<1045 then a=e[h];else n[a]=s;end else if t(4771,3700+x,2040)<=1020 then else u=i;end end h=l;else if t(4238,8353+x,2048)<1024 then if t(8682,8287+x,3924)>1962 then n[e[l]]=n[e[o]];else end else if t(6057,5188+x,3142)>=1571 then else f=e[o];end s=u[f];end end end n[e[l]]=n[e[o]];e=e[x];local t=e[l];n[t]=n[t](n[t+1]);for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]][n[e[o]]]=n[e[d]];e=e[x];e=e[x];end;elseif(a==((f[613141030])or((function(e)f[613141030]=t(t(((t(e,169039))-31700)-102548,284323),766160);return(f[613141030]);end)(t(368033080,c[764945195])))))then if(not(n[e[l]]))then b=e[o];end;elseif(a<=((f[557065301])or((function(e)f[557065301]=t((t((t(e,531238))-938600,649083))-84234,765581);return(f[557065301]);end)(t(855890877,857252822)))))then if(n[e[l]]==e[d])then b=e[o];end;end;elseif(a<=h(t(792457076,c[289978309]),1148934))then if(a==h(61162758,1708093))then local r;local a;local f;local c;local t;local x=0;local function d(n,e,l)e=(x+e)%3 x=((e~=0)and x+((e<2)and n or-n)or x*n)%l return x end for x=1,26 do if d(2111,8162+x,1070)>535 then t=e[a];if d(3135,1136+x,1922)>=961 then n[t]=c;if d(7346,5876+x,1920)<=960 then else end else if d(1792,5680+x,2376)<=1188 then else end end else if d(3852,2984+x,2338)<1169 then if d(7341,8269+x,2378)>=1189 then r=i;else end else f=e[o];if d(5488,3533+x,3918)<=1959 then c=r[f];else end end a=l;end end elseif(a<=((f[5817476])or((function(e)f[5817476]=t((t(t(e,312664),827580))-107943,666811);return(f[5817476]);end)(t(60568700,60785631)))))then local d=e[l];local o={};for e=1,#A,1 do local e=A[e];for l=0,#e,1 do local e=e[l];local x=e[1];local l=e[2];if((x==n)and(l>=d))then o[l]=x[l];e[1]=o;end;end;end;end;elseif(a==t(590600833,c[695852875]))then n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]][e[o]]=e[d];e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local t=e[l];local c=n[e[o]];n[t+1]=c;n[t]=c[e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local f;local a;local h;local c=0;local function t(n,e,l)e=(c+e)%3 c=((e~=0)and c+((1==e)and-n or n)or c*n)%l return c end for x=1,30 do if t(4908,6608+x,2084)<=1042 then if t(9052,4013+x,940)<470 then if t(6495,6157+x,2786)<=1393 then f=l;else h=e[f];end else if t(2893,9796+x,3346)>=1673 then n[e[l]]=n[e[o]]+e[d];else n[h]=a;end end else if t(7542,3961+x,3278)>=1639 then if t(2159,9044+x,908)>454 then else end else if t(9983,4731+x,1550)>=775 then a=e[o];else end end end end n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local a;local h;local f;local c=0;local function t(e,n,l)e=(c+e)%3 c=((e~=0)and c+((e<2)and n or-n)or c*n)%l return c end for x=1,32 do if t(6057,7890+x,2266)<=1133 then if t(2112,8167+x,1672)>836 then if t(1109,1347+x,2710)>1355 then else end else if t(5749,3967+x,312)<=156 then else a=l;end end else if t(8358,1435+x,1798)>=899 then if t(4432,2713+x,2244)>1122 then h=e[o];else end f=e[a];else if t(3771,3473+x,2440)>1220 then n[f]=h;else end end end end local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=(e[o]~=0);e=e[x];local t=e[l];n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];local i;local f;local a;local c=0;local function t(e,n,l)e=(c+e)%3 c=((e~=0)and c+((1==e)and n or-n)or c*n)%l return c end for x=0,32 do if t(2647,9631+x,344)<172 then a=e[i];if t(4418,7972+x,1940)<=970 then if t(9614,1595+x,1780)<=890 then n[a]=f;else end else if t(3096,8248+x,3422)>=1711 then else end end else if t(6121,8017+x,2104)>1052 then if t(6973,1132+x,1010)>=505 then else if(n[e[l]]==e[d])then b=b+1;else b=e[o];end;end else if t(1347,9573+x,2596)<=1298 then else i=l;end end f=e[o];end end local t=e[l];n[t](n[1+t]);for e=t,r do n[e]=nil;end;e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];e=e[x];elseif(a<=t(414265888,414265917))then local l=e[l];n[l]=n[l](s(n,l+1,e[o]));for e=l+1,r do n[e]=nil;end;end;elseif(a<=((f[607931906])or((function(e)f[607931906]=t(t(t(((e)-89630)-881588,959210),946349),843590);return(f[607931906]);end)(t(388156038,389551225)))))then if(a<=((f[7742553])or((function(e)f[7742553]=(t(t(t(t(e,26518),600518),630264),893593))-725944;return(f[7742553]);end)(t(207418536,c[61679461])))))then if(a<=t(21877328,21877360))then if(a<=30)then n[e[l]]=B(D[e[o]],(nil),i);elseif(a>h(61162758,1708090))then if(n[e[l]]>e[d])then b=e[o];end;elseif(a<h(564342319,1028164))then local l=e[l];local x=e[o];local d=50*(e[d]-1);local o=n[l];local e=0;for x=l+1,x do o[d+e+1]=n[l+(x-l)];e=e+1;end;end;elseif(a<=h(649001966,1866488))then if(a==h(t(268424003,c[61679461]),t(45577043,44917627)))then e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]][e[o]]=n[e[d]];e=e[x];e=e[x];elseif(a<=((f[572924522])or(c[284191218](t(578334805,c[253204386]),t,f,572924522))))then n[e[l]]=e[o]+n[e[d]];end;elseif(a==((f[142799412])or(c["ISSg7L8l"](t(663090426,664100008),t,f,142799412))))then local x=n[e[d]];if(x)then n[e[l]]=x;b=e[o];end;elseif(a<=36)then e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local t=e[l];local c=n[e[o]];n[t+1]=c;n[t]=c[e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local a;local h;local f;local c=0;local function t(e,n,l)e=(c+e)%3 c=((e~=0)and c+((e<2)and n or-n)or c*n)%l return c end for x=0,33 do if t(2444,1613+x,892)>=446 then if t(5276,6789+x,1598)<799 then if t(9465,3490+x,2542)>=1271 then else end else if t(4566,6949+x,1094)>=547 then f=e[a];else h=e[o];end end else if t(7628,5216+x,3468)<1734 then if t(8149,1647+x,3762)>1881 then else end else if t(3434,2796+x,2336)>=1168 then n[f]=h;else a=l;end end end end n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local a;local h;local f;local E;local m;local c=0;local function t(n,e,l)e=(c+e)%3 c=((e~=0)and c+((e<2)and-n or n)or c*n)%l return c end for x=0,31 do if t(9060,4049+x,968)>=484 then if t(8301,1748+x,392)<196 then h=l;if t(1959,6830+x,1934)<967 then f=e[o];else end else if t(9348,9926+x,1762)<=881 then m=e[h];else end n[m]=E;end else if t(5684,1881+x,2038)>=1019 then if t(2444,5730+x,3080)>1540 then b=e[o];else a=i;end else if t(4265,2649+x,1050)<=525 then else E=a[f];end end end end n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=(e[o]~=0);e=e[x];local t=e[l];n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t](n[1+t]);for e=t,r do n[e]=nil;end;e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];e=e[x];end;elseif(a<=t(677301541,c[1966943]))then if(a<=t(577840317,c[253204386]))then if(a>h(t(817345911,819371558),493393))then n[e[l]][e[o]]=e[d];elseif(a<h(744039523,1451517))then local l=e[l];local d=e[d];local x=l+2;local l=({n[l](n[l+1],n[x]);});for e=1,d do n[x+e]=l[e];end;local l=l[1];if(l)then n[x]=l;b=e[o];end;end;elseif(a>((f[970418141])or(c[562354862](t(97573576,97867814),t,f,970418141))))then e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=u[e[o]];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local t=e[l];local l=n[e[o]];n[t+1]=l;n[t]=l[e[d]];e=e[x];e=e[x];elseif(a<40)then n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]][e[o]]=e[d];e=e[x];e=e[x];end;elseif(a<=42)then if(a>((f[896548090])or((function(e)f[896548090]=(t((((e)-463037)-358744)-551462,608338))-344047;return(f[896548090]);end)(t(879077915,876959390)))))then local l=e[l];E=l+p-1;for e=0,p do n[l+e]=g[e];end;for e=E+1,r do n[e]=nil;end;elseif(a<h(169158980,233495))then local l=e[l];local x={n[l](n[l+1]);};local o=e[d];local e=0;for l=l,o do e=e+1;n[l]=x[e];end;for e=o+1,r do n[e]=nil;end;end;elseif(a>((f[531726629])or((function(e)f[531726629]=t(((e)-663829)-177384,67240);return(f[531726629]);end)(t(248857159,c[369230860])))))then n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]][e[o]]=e[d];e=e[x];e=e[x];elseif(a<h(t(976612264,c["dd5ryo"]),t(335026621,334380110)))then if(e[l]>n[e[d]])then b=e[o];end;end;elseif(a<=((f[762791626])or((function(e)f[762791626]=t(t(((t(e,962176))-466750)-417062,392061),461491);return(f[762791626]);end)(t(851647804,c[596954169])))))then if(a<=((f[668234727])or((function(e)f[668234727]=t(((t((e)-754209,719866))-424951)-832917,658628);return(f[668234727]);end)(t(900642955,898498341)))))then if(a<=h(61162758,1708076))then n[e[l]][n[e[o]]]=n[e[d]];elseif(a==((f[129237217])or((function(e)f[129237217]=(t(t(t(e,966458),574839),149005))-730368;return(f[129237217]);end)(t(46119198,45129840)))))then n[e[l]]=n[e[o]]+n[e[d]];elseif(a<=t(454614268,c["ck1ee9L4Bn"]))then e=e[x];n[e[l]]=y(256);e=e[x];n[e[l]]=y(256);e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]];e=e[x];local d=e[l];local c,t=m(n[d](n[d+1]));E=t+d-1;local t=0;for e=d,E do t=t+1;n[e]=c[t];end;e=e[x];local d=e[l];local c,t=m(n[d](s(n,d+1,E)));E=t+d-1;local t=0;for e=d,E do t=t+1;n[e]=c[t];end;for e=E+1,r do n[e]=nil;end;e=e[x];local d=e[l];n[d]=n[d](s(n,d+1,E));for e=d+1,E do n[e]=nil;end;e=e[x];n[e[l]]=n[e[o]];e=e[x];e=e[x];end;elseif(a<=h(348968146,944931))then if(a>48)then local e=e[l];n[e]=n[e](n[e+1]);for e=e+1,r do n[e]=nil;end;elseif(a<49)then local e=e[l];n[e](n[1+e]);for e=e,r do n[e]=nil;end;end;elseif(a>((f[485740996])or((function(e)f[485740996]=(t(t(e,143183),104842))-14672;return(f[485740996]);end)(t(988047220,988276787)))))then local l=e[l];local d=n[l+2];local x=n[l]+d;n[l]=x;if(d>0)then if(x<=n[l+1])then b=e[o];n[l+3]=x;end;elseif(x>=n[l+1])then b=e[o];n[l+3]=x;end;elseif(a<h(t(196380314,288418415),124377))then n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local t=e[l];local c=n[e[o]];n[t+1]=c;n[t]=c[e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=(e[o]~=0);e=e[x];local t=e[l];n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]][e[o]]=e[d];e=e[x];e=e[x];end;elseif(a<=((f[241459066])or(c[349974814](t(453877968,c['ck1ee9L4Bn']),t,f,241459066))))then if(a<=h(744039523,1451500))then if(a>((f[286605382])or(c[232752059](t(568297897,566761066),t,f,286605382))))then local c=e[l];local t=n[e[o]];n[c+1]=t;n[c]=t[e[d]];e=e[x];local d=e[l];do return n[d](s(n,d+1,e[o]))end;e=e[x];local l=e[l];do return s(n,l,E);end;e=e[x];e=e[x];elseif(a<h(t(996361013,c[125643710]),233722))then e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]][e[o]]=e[d];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t](n[1+t]);for e=t,r do n[e]=nil;end;e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local t=e[l];local c=n[e[o]];n[t+1]=c;n[t]=c[e[d]];e=e[x];local u;local b;local h;local a;local f;local c=0;local function t(n,e,l)e=(c+e)%3 c=((e~=0)and c+((1==e)and n or-n)or c*n)%l return c end for x=0,27 do if t(1034,7127+x,1924)<962 then if t(4785,8326+x,1072)<=536 then if t(5273,9231+x,1244)>622 then else f=e[b];end n[f]=a;else u=i;if t(5587,2207+x,3646)<=1823 then local x=e[o];local o=n[x];for e=x+1,e[d]do o=o..n[e];end;n[e[l]]=o;else b=l;end end else if t(7847,8505+x,1340)>=670 then if t(9438,9162+x,2006)>1003 then a=u[h];else h=e[o];end else if t(9452,7186+x,2262)<1131 then else end end end end n[e[l]]=n[e[o]][e[d]];e=e[x];local a;local h;local f;local c=0;local function t(e,n,l)e=(c+e)%3 c=((e~=0)and c+((1==e)and n or-n)or c*n)%l return c end for x=1,28 do if t(1339,8187+x,3444)>1722 then h=e[o];if t(9082,8439+x,1176)>588 then if t(3671,2668+x,504)<=252 then else end else if t(3894,7273+x,2576)<1288 then else f=e[a];end n[f]=h;end else if t(3487,1404+x,3174)>1587 then if t(6597,8182+x,3640)<1820 then a=l;else end else if t(8341,9571+x,3026)>=1513 then else end end end end n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];e=e[x];end;elseif(a==54)then n[e[l]]=y(e[o]);elseif(a<=((f[416103011])or((function(e)f[416103011]=t(t((t(t(e,755634),655625))-93903,909541),857590);return(f[416103011]);end)(t(894018406,c[388999018])))))then e=e[x];local c=e[l];local t=n[e[o]];n[c+1]=t;n[c]=t[e[d]];e=e[x];local t=e[l];n[t]=n[t](n[t+1]);for e=t+1,r do n[e]=nil;end;e=e[x];local t=e[l];local c=n[e[o]];n[t+1]=c;n[t]=c[e[d]];e=e[x];n[e[l]]=e[o];e=e[x];e=e[x];end;elseif(a<=h(t(439774197,808960721),t(596081641,c['PbWozrvBn'])))then if(a>56)then local l=e[l];local o=n[e[o]];n[l+1]=o;n[l]=o[n[e[d]]];elseif(a<57)then local l=e[l];n[l]=0+(n[l]);n[l+1]=0+(n[l+1]);n[l+2]=0+(n[l+2]);local x=n[l];local d=n[l+2];if(d>0)then if(x>n[l+1])then b=e[o];else n[l+3]=x;end;elseif(x<n[l+1])then b=e[o];else n[l+3]=x;end;end;elseif(a==h(649001966,1866496))then local e=e[l];n[e]=n[e]();elseif(a<=((f[906673159])or((function(e)f[906673159]=(t((e)-132879,259937))-103183;return(f[906673159]);end)(t(820712411,821000417)))))then n[e[l]]=n[e[o]]-e[d];end;elseif(a<=t(207263260,c[61679461]))then if(a<=((f[715041264])or((function(e)f[715041264]=t(((e)-851683)-636160,718663);return(f[715041264]);end)(t(565784236,c[925637430])))))then if(a<=66)then if(a<=((f[320805856])or(c[432036195](t(702757310,c[425693847]),t,f,320805856))))then if(a<=t(370859997,c[563461517]))then e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=u[e[o]];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local l=e[l];local o=n[e[o]];n[l+1]=o;n[l]=o[e[d]];e=e[x];e=e[x];elseif(a==t(369848760,369848709))then local x=e[o];local o=n[x];for e=x+1,e[d]do o=o..n[e];end;n[e[l]]=o;elseif(a<=((f[60042192])or(c[249714393](t(849624561,851300668),t,f,60042192))))then n[e[l]]=n[e[o]]/e[d];end;elseif(a<=h(719921999,637663))then if(a==t(57023792,57023759))then if(e[l]>=n[e[d]])then b=e[o];end;elseif(a<=64)then local l=e[l];local x={n[l](s(n,l+1,E));};local o=e[d];local e=0;for l=l,o do e=e+1;n[l]=x[e];end;for e=o+1,r do n[e]=nil;end;end;elseif(a==h(t(690847000,c.WIdu1oU),t(511198759,c[165995577])))then local l=e[l];local o=n[e[o]];n[l+1]=o;n[l]=o[e[d]];elseif(a<=h(t(395018563,55006609),944944))then n[e[l]]=n[e[o]][e[d]];e=e[x];local i;local f;local a;local c=0;local function t(e,n,l)e=(c+e)%3 c=((e~=0)and c+((e<2)and n or-n)or c*n)%l return c end for x=1,31 do if t(3778,6010+x,2436)<1218 then if t(1561,5263+x,1028)<514 then if t(9752,5443+x,3004)>=1502 then i=l;else local x=e[o];local o=n[x];for e=x+1,e[d]do o=o..n[e];end;n[e[l]]=o;end f=e[o];else if t(4515,2422+x,2980)>=1490 then else end end else a=e[i];if t(8851,5974+x,294)<147 then if t(9383,1097+x,1572)>786 then else end else if t(5274,5445+x,912)<=456 then n[a]=f;else end end end end n[e[l]]=(e[o]~=0);e=e[x];local l=e[l];n[l](s(n,l+1,e[o]));for e=l+1,r do n[e]=nil;end;e=e[x];e=e[x];end;elseif(a<=70)then if(a<=t(168514455,168514515))then if(a==h(t(929879951,493715115),1211626))then local e=e[l];do return n[e](s(n,e+1,E))end;elseif(a<=h(t(169607273,749927303),1866390))then n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]][e[o]]=e[d];e=e[x];e=e[x];end;elseif(a==h(t(206200343,642512691),t(796431677,795535829)))then n[e[l]]=e[o]/e[d];elseif(a<=t(248265041,c['gqO0c']))then n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]][e[o]]=e[d];e=e[x];e=e[x];end;elseif(a<=h(662495255,1149013))then if(a==71)then for e=e[l],e[o]do n[e]=(nil);end;elseif(a<=((f[278939649])or(c[666369648](t(941088200,940246630),t,f,278939649))))then e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local t=e[l];local c=n[e[o]];n[t+1]=c;n[t]=c[e[d]];e=e[x];local a;local m;local E;local f;local h;local c=0;local function t(n,e,l)e=(c+e)%3 c=((e~=0)and c+((e<2)and-n or n)or c*n)%l return c end for x=1,34 do if t(6429,7817+x,3356)<1678 then if t(3476,1432+x,3724)>=1862 then if t(3132,1998+x,2294)<=1147 then E=e[o];else a=i;end else if t(7102,7133+x,888)<=444 then n[h]=f;else h=e[m];end end m=l;else if t(2859,1298+x,1068)>534 then if t(9754,6528+x,3584)>1792 then n[e[l]]=#n[e[o]];else n[e[l]]=i[e[o]];end else if t(2431,9170+x,1832)>=916 then f=a[E];else if(n[e[l]]==e[d])then b=b+1;else b=e[o];end;end end end end n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=(e[o]~=0);e=e[x];local t=e[l];n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t](n[1+t]);for e=t,r do n[e]=nil;end;e=e[x];n[e[l]]=u[e[o]];e=e[x];local t=e[l];local o=n[e[o]];n[t+1]=o;n[t]=o[e[d]];e=e[x];local l=e[l];n[l](n[1+l]);for e=l,r do n[e]=nil;end;e=e[x];e=e[x];end;elseif(a==73)then n[e[l]]=n[e[o]]*n[e[d]];elseif(a<=t(570729248,570729322))then u[e[o]]=n[e[l]];end;elseif(a<=t(368892917,c[764945195]))then if(a<=((f[247548912])or((function(e)f[247548912]=((t(t(e,489976),281194))-607406)-606606;return(f[247548912]);end)(t(572791755,c["ohZWzer"])))))then if(a<=h(t(953381651,c[764945195]),988842))then do return(n[e[l]]);end;elseif(a>h(29441446,458442))then local l=e[l];local x=n[l];local e,o=0,50*(e[d]-1);for l=l+1,E,1 do x[o+e+1]=n[l];e=e+1;end;elseif(a<((f[321630442])or(c[384957349](t(186948235,c[229559301]),t,f,321630442))))then local l=e[l];local x=({n[l](s(n,l+1,e[o]))});local o=e[d];local e=0;for l=l,o,1 do e=e+1;n[l]=x[e];end;for e=o+1,r do n[e]=nil;end;end;elseif(a<=79)then if(a==t(554320142,554320192))then local e=e[l];n[e]=n[e](s(n,e+1,E));for e=e+1,E do n[e]=nil;end;elseif(a<=((f[820325248])or(c.ukHup(t(140015007,c[289978309]),t,f,820325248))))then local c;local a;local f;local x=0;local function t(e,n,l)e=(x+e)%3 x=((e~=0)and x+((e<2)and-n or n)or x*n)%l return x end for x=2,32 do if t(6521,8428+x,608)>304 then if t(6778,6918+x,3586)>1793 then if t(3990,3981+x,1572)<786 then else n[e[l]]=e[o]-e[d];end else if t(9038,5321+x,1800)<=900 then c=l;else end end else if t(1827,7754+x,1656)>=828 then a=e[o];if t(2758,9061+x,3996)>=1998 then f=e[c];else end else if t(1648,5755+x,2496)>1248 then else end end n[f]=a;end end end;elseif(a>h(t(716071,30134401),t(596900347,c.PbWozrvBn)))then e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]][e[o]]=n[e[d]];e=e[x];e=e[x];elseif(a<h(t(605729359,1005780144),t(244910345,244014900)))then e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local t=e[l];local c=n[e[o]];n[t+1]=c;n[t]=c[e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=(e[o]~=0);e=e[x];local t=e[l];n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t](n[1+t]);for e=t,r do n[e]=nil;end;e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];e=e[x];end;elseif(a<=t(100318597,100318672))then if(a<=h(t(866174882,c.zOlbw),t(249502148,c[369230860])))then if(a>h(t(252365863,85976419),t(200972354,200870045)))then n[e[l]]=(not(n[e[o]]));elseif(a<h(348968146,944897))then n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]][e[o]]=e[d];e=e[x];e=e[x];end;elseif(a==t(868347047,c["zOlbw"]))then local x=D[e[o]];local c=e[w];local o={};local t=Q({},{__index=function(n,e)local e=o[e];return(e[1][e[2]]);end,__newindex=function(l,e,n)local e=o[e];e[1][e[2]]=n;end;});for l=1,e[d],1 do local e=c[l];if(e[0]==0)then o[l-1]=({n,e[1]});else o[l-1]=({u,e[1]});end;A[#A+1]=o;end;n[e[l]]=B(x,t,i);elseif(a<=((f[490763896])or((function(e)f[490763896]=t(t(t((t(e,610843))-621023,755187),639096),517239);return(f[490763896]);end)(t(510625784,c[165995577])))))then e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local t=e[l];local c=n[e[o]];n[t+1]=c;n[t]=c[e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=(e[o]~=0);e=e[x];local t=e[l];n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t](n[1+t]);for e=t,r do n[e]=nil;end;e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];e=e[x];end;elseif(a<=h(t(952579461,c[165995577]),1866403))then if(a>((f[875350205])or(c[307271135](t(278178687,277954381),t,f,875350205))))then do return;end;elseif(a<h(t(206187400,648218823),637674))then n[e[l]]=n[e[o]]+e[d];end;elseif(a>88)then n[e[l]]=n[e[o]]-n[e[d]];elseif(a<t(159413516,c[862112943]))then n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=(e[o]~=0);e=e[x];local l=e[l];n[l](s(n,l+1,e[o]));for e=l+1,r do n[e]=nil;end;e=e[x];e=e[x];end;elseif(a<=((f[277383531])or(c[668794168](t(606722993,607189125),t,f,277383531))))then if(a<=((f[448615194])or(c.E2mruo(t(372162027,c[812419154]),t,f,448615194))))then if(a<=((f[748928343])or(c[709137567](t(919595819,c.hRqzXYmx),t,f,748928343))))then if(a<=((f[795507977])or((function(e)f[795507977]=t((t((e)-493525,215637))-523192,856806);return(f[795507977]);end)(t(345144983,c[690511759])))))then n[e[l]]=u[e[o]];elseif(a>h(t(862593572,665253622),t(248968702,c[369230860])))then n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]][e[o]]=e[d];e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local c=e[l];local t=n[e[o]];n[c+1]=t;n[c]=t[e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=(e[o]~=0);e=e[x];local t=e[l];n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t](n[1+t]);for e=t,r do n[e]=nil;end;e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];e=e[x];elseif(a<h(t(883362114,1051860998),t(829563492,829534849)))then n[e[l]][e[o]]=n[e[d]];end;elseif(a<=t(745136107,c[762654841]))then if(a==h(169158980,233698))then n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]][e[o]]=e[d];e=e[x];e=e[x];elseif(a<=94)then e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local u;local f;local h;local b;local a;local c=0;local function t(n,e,l)e=(c+e)%3 c=((e~=0)and c+((e<2)and n or-n)or c*n)%l return c end for x=0,28 do if t(4534,2047+x,1606)<=803 then if t(5106,8972+x,3994)>1997 then if t(5816,2487+x,2050)<=1025 then else b=u[h];end a=e[f];else n[a]=b;if t(1000,9287+x,1790)<895 then else end end else if t(4047,8201+x,3520)>1760 then if t(8552,1635+x,3160)>1580 then else u=i;end else f=l;if t(4313,3168+x,2054)>=1027 then else h=e[o];end end end end n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]][e[o]]=n[e[d]];e=e[x];e=e[x];end;elseif(a>t(818352516,818352603))then e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local t=e[l];local c=n[e[o]];n[t+1]=c;n[t]=c[e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local f;local h;local a;local c=0;local function t(n,e,l)e=(c+e)%3 c=((e~=0)and c+((e<2)and n or-n)or c*n)%l return c end for x=0,34 do if t(8966,9631+x,3850)>=1925 then if t(4964,5273+x,3690)<1845 then if t(1974,4528+x,1904)>952 then a=e[f];else n[a]=h;end else if t(1950,8362+x,1806)>=903 then else if(n[e[l]]==e[d])then b=b+1;else b=e[o];end;end end else if t(1653,4465+x,3258)<1629 then if t(9115,3208+x,2868)>1434 then n[e[l]]=i[e[o]];else end else f=l;if t(5842,3629+x,2208)>=1104 then h=e[o];else end end end end local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=(e[o]~=0);e=e[x];local t=e[l];n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=e[o];e=e[x];local s;local i;local f;local c=0;local a=0;local function t(n,e,l)e=(c+e)%3 c=((e~=0)and c+((e<2)and-n or n)or c*n)%l return c end for o=0,30 do if t(1308,8900+o,3976)>1988 then if t(9298,3151+o,2042)<=1021 then if t(6779,5536+o,1432)<=716 then if a==-1 then for e=f,r do n[e]=nil;end;a=-2 end;else end else if t(2168,2401+o,2604)>=1302 then else end end else s=l;if t(3296,1704+o,602)>301 then if t(4483,5732+o,2204)>1102 then f=i[s];else end if a>-1 then n[f](n[1+f]);a=-1 end;else if t(5619,4742+o,2672)>=1336 then else i=e;end end end end n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];e=e[x];elseif(a<t(431248461,431248429))then e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local h;local E;local a;local f;local u;local c=0;local function t(n,e,l)e=(c+e)%3 c=((e~=0)and c+((1==e)and n or-n)or c*n)%l return c end for x=1,33 do if t(6064,3125+x,3978)>=1989 then if t(7445,4248+x,1362)>681 then if t(2529,6853+x,1328)>664 then u=e[E];else a=e[o];end else if t(6749,4739+x,2726)<1363 then else E=l;end end else if t(7860,4722+x,2220)<1110 then if t(5548,9424+x,3856)>1928 then n[u]=f;else n[e[l]]=n[e[o]]+e[d];end else if t(6351,8152+x,1774)>887 then f=h[a];else h=i;end end end end n[e[l]]=n[e[o]][e[d]];e=e[x];local a;local i;local f;local c=0;local function t(n,e,l)e=(c+e)%3 c=((e~=0)and c+((1==e)and-n or n)or c*n)%l return c end for x=1,27 do if t(9062,3692+x,2946)<1473 then if t(2503,6051+x,3534)>1767 then if t(7227,4235+x,996)<=498 then n[e[l]]=e[o]-e[d];else f=e[a];end else if t(5085,4523+x,1870)>=935 then else a=l;end i=e[o];end else if t(6096,9269+x,2312)<1156 then if t(3598,9866+x,2444)<=1222 then else end else if t(2871,9423+x,638)>=319 then n[f]=i;else if(e[l]~=e[d])then b=b+1;else b=e[o];end;end end end end n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]][e[o]]=n[e[d]];e=e[x];e=e[x];end;elseif(a<=h(535318271,1201672))then if(a<=((f[130868762])or((function(e)f[130868762]=t((t(t(t(e,544232),793626),843325))-788648,5291);return(f[130868762]);end)(t(853102435,c[596954169])))))then if(a>97)then e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local t=e[l];local c=n[e[o]];n[t+1]=c;n[t]=c[e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local f;local a;local h;local c=0;local function t(n,e,l)e=(c+e)%3 c=((e~=0)and c+((e<2)and n or-n)or c*n)%l return c end for x=2,32 do if t(9877,7472+x,3312)>=1656 then if t(3424,1666+x,2288)<1144 then if t(9434,9679+x,2662)<1331 then else end else if t(2322,5811+x,2268)>1134 then else f=l;end a=e[o];end h=e[f];else n[h]=a;if t(6221,2047+x,1122)<=561 then if t(5606,5396+x,2550)<1275 then else end else if t(4394,6793+x,1704)<852 then else end end end end n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=(e[o]~=0);e=e[x];local t=e[l];n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t](n[1+t]);for e=t,r do n[e]=nil;end;e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];e=e[x];elseif(a<((f[147446116])or((function(e)f[147446116]=t(t(t(t((e)-910132,504631),327552),124927),798101);return(f[147446116]);end)(t(592871038,c[187327285])))))then local e=e[l];local o,l=m(n[e](n[e+1]));E=l+e-1;local l=0;for e=e,E do l=l+1;n[e]=o[l];end;end;elseif(a==((f[248516418])or(c[940634745](t(573368968,c.ohZWzer),t,f,248516418))))then e=e[x];n[e[l]]=i[e[o]];e=e[x];local c=e[l];local t=n[e[o]];n[c+1]=t;n[c]=t[e[d]];e=e[x];local h;local f;local a;local c=0;local function t(n,e,l)e=(c+e)%3 c=((e~=0)and c+((1==e)and n or-n)or c*n)%l return c end for x=1,27 do if t(7744,6887+x,2942)<=1471 then if t(4896,7550+x,3856)>=1928 then if t(1016,6003+x,1034)>517 then else end else if t(4506,9524+x,426)<213 then h=l;else end f=e[o];end a=e[h];else if t(3177,3258+x,2504)>=1252 then if t(3515,2248+x,616)>=308 then else end else n[a]=f;if t(8100,9384+x,3020)>1510 then else end end end end local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];local t=e[l];local c=n[e[o]];n[t+1]=c;n[t]=c[e[d]];e=e[x];n[e[l]]=n[e[o]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]];e=e[x];local h;local f;local a;local u;local b;local c=0;local function t(e,n,l)e=(c+e)%3 c=((e~=0)and c+((1==e)and-n or n)or c*n)%l return c end for x=2,26 do if t(7216,5954+x,1552)>=776 then if t(2646,6035+x,772)>=386 then if t(8091,9071+x,1680)<840 then else end else b=e[f];if t(6349,8135+x,3500)<1750 then n[b]=u;else end end else if t(2109,4486+x,802)<=401 then if t(1959,2606+x,1794)>897 then h=i;else u=h[a];end else f=l;if t(8265,5153+x,926)>463 then a=e[o];else end end end end n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][n[e[d]]];e=e[x];local b;local u;local h;local a;local f;local c=0;local function t(e,n,l)e=(c+e)%3 c=((e~=0)and c+((e<2)and-n or n)or c*n)%l return c end for x=2,28 do if t(9419,4300+x,3978)>=1989 then if t(4965,9845+x,2324)<1162 then if t(9370,9356+x,1004)>502 then else end else if t(9547,8391+x,2940)>=1470 then h=e[o];else end end a=b[h];else if t(4551,3806+x,3092)<1546 then b=i;if t(8221,8314+x,2546)<1273 then else u=l;end else f=e[u];if t(9859,2033+x,3332)<1666 then n[f]=a;else end end end end n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][n[e[d]]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=(e[o]~=0);e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=n[e[o]];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];local t=e[l];local o=n[e[o]];n[t+1]=o;n[t]=o[e[d]];e=e[x];local l=e[l];n[l](n[1+l]);for e=l,r do n[e]=nil;end;e=e[x];e=e[x];elseif(a<=((f[432393127])or(c[887439793](t(5577362,6203453),t,f,432393127))))then e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local c=e[l];local t=n[e[o]];n[c+1]=t;n[c]=t[e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local f;local a;local h;local c=0;local function t(e,n,l)e=(c+e)%3 c=((e~=0)and c+((e<2)and-n or n)or c*n)%l return c end for x=1,30 do if t(7466,4066+x,492)>246 then if t(8828,2806+x,1304)<=652 then if t(1600,9062+x,3590)<1795 then else n[h]=a;end else if t(8777,3615+x,1070)<535 then else end end else f=l;if t(8900,2497+x,1092)>=546 then a=e[o];if t(2975,4571+x,1114)<557 then if(e[l]~=e[d])then b=b+1;else b=e[o];end;else h=e[f];end else if t(9304,2464+x,2038)>1019 then else end end end end n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local f;local a;local h;local c=0;local function t(e,n,l)e=(c+e)%3 c=((e~=0)and c+((1==e)and-n or n)or c*n)%l return c end for x=0,28 do if t(7245,8351+x,2560)>=1280 then if t(3930,3010+x,1782)<891 then n[h]=a;if t(3522,6235+x,2518)>=1259 then else end else a=e[o];if t(1624,6666+x,508)>254 then else h=e[f];end end else if t(3284,1789+x,3114)<1557 then if t(8793,8606+x,866)<=433 then else end else if t(1864,1796+x,2734)>=1367 then else f=l;end end end end local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=(e[o]~=0);e=e[x];local t=e[l];n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t](n[1+t]);for e=t,r do n[e]=nil;end;e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];e=e[x];end;elseif(a<=t(505177077,505176979))then if(a==101)then local e=e[l];do return s(n,e,E);end;elseif(a<=102)then e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local c;local a;local h;local r;local f;local t=0;local function d(e,n,l)e=(t+e)%3 t=((e~=0)and t+((1==e)and n or-n)or t*n)%l return t end for x=2,27 do if d(2207,9482+x,1820)>910 then if d(5389,1412+x,356)<178 then if d(2040,9654+x,484)>242 then else end else c=i;if d(7221,3649+x,622)>311 then a=l;else end end h=e[o];else r=c[h];if d(3161,3603+x,3850)<1925 then if d(6344,4266+x,1182)<591 then n[f]=r;else f=e[a];end else if d(1326,3412+x,2952)>=1476 then else end end end end n[e[l]]=n[e[o]];e=e[x];n[e[l]]=e[o];e=e[x];local d=e[l];local t,o=m(n[d](s(n,d+1,e[o])));E=o+d-1;local o=0;for e=d,E do o=o+1;n[e]=t[o];end;e=e[x];local o=e[l];do return n[o](s(n,o+1,E))end;e=e[x];local l=e[l];do return s(n,l,E);end;e=e[x];e=e[x];end;elseif(a>((f[725910698])or(c[621594471](t(770590814,770685516),t,f,725910698))))then n[e[l]][n[e[o]]]=e[d];elseif(a<t(344962313,c[690511759]))then local f;local a;local c;local t=0;local function d(e,n,l)e=(t+e)%3 t=((e~=0)and t+((1==e)and n or-n)or t*n)%l return t end for x=2,26 do if d(5964,1759+x,1222)>611 then if d(5680,6270+x,2414)>1207 then if d(4397,5282+x,2694)<1347 then else c=e[f];end else if d(4191,5021+x,1074)>537 then else end end else if d(3713,6457+x,3890)<=1945 then if d(4896,6147+x,1726)<=863 then f=l;else n[c]=a;end else if d(9436,7190+x,2632)>1316 then else a=e[o];end end end end n[e[l]]=(e[o]~=0);e=e[x];local l=e[l];n[l](s(n,l+1,e[o]));for e=l+1,r do n[e]=nil;end;e=e[x];e=e[x];end;elseif(a<=h(t(453737098,414072716),t(978389702,978000529)))then if(a<=t(109497312,109497228))then if(a<=h(t(454658730,c[671259666]),233687))then if(a>105)then if(n[e[l]]~=n[e[d]])then b=e[o];end;elseif(a<((f[740313050])or((function(e)f[740313050]=(t(t(t(e,506675),453153),697549))-192234;return(f[740313050]);end)(t(247648493,248236646)))))then n[e[l]]=n[e[o]][e[d]];end;elseif(a==((f[73282101])or((function(e)f[73282101]=t(t((t(t(e,195173),957243))-516094,301386),117154);return(f[73282101]);end)(t(341031169,340977886)))))then n[e[l]]=#n[e[o]];elseif(a<=((f[816258252])or(c["Utp3sr"](t(923997592,923537783),t,f,816258252))))then local e=e[l];local o,l=m(n[e](s(n,e+1,E)));E=l+e-1;local l=0;for e=e,E do l=l+1;n[e]=o[l];end;for e=E+1,r do n[e]=nil;end;end;elseif(a<=h(t(832600967,1001738947),233683))then if(a==t(396277093,c[772940926]))then local a;local c;local r;local t;local f;local d=0;local function x(e,n,l)e=(d+e)%3 d=((e~=0)and d+((e<2)and-n or n)or d*n)%l return d end for d=0,34 do if x(6716,5273+d,592)>296 then if x(3281,8709+d,500)<=250 then if x(9179,5874+d,428)>=214 then i[t]=f;else a=e;end c=n;else if x(6407,2074+d,770)>=385 then else end end r=l;else if x(1173,3711+d,1852)>926 then if x(5522,2221+d,1478)>739 then else end else if x(8290,4681+d,826)>=413 then t=e[o];else end end f=c[a[r]];end end elseif(a<=h(29441446,458472))then if(n[e[l]]>n[e[d]])then b=e[o];end;end;elseif(a==((f[54651032])or((function(e)f[54651032]=t((t(t(e,471609),983257))-159984,478438);return(f[54651032]);end)(t(749651342,749685271)))))then e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local c=e[l];local t=n[e[o]];n[c+1]=t;n[c]=t[e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];local f;local h;local a;local c=0;local function t(e,n,l)e=(c+e)%3 c=((e~=0)and c+((e<2)and n or-n)or c*n)%l return c end for x=2,32 do if t(3988,9464+x,1504)<=752 then if t(3191,9179+x,408)<204 then if t(5893,3183+x,3392)<=1696 then f=l;else end h=e[o];else if t(9338,1408+x,1204)>602 then n[e[l]]=n[e[o]];else end end else if t(8176,9144+x,3164)>1582 then if t(7502,3702+x,1626)>=813 then else end else a=e[f];if t(2060,2347+x,1052)>=526 then n[a]=h;else end end end end n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=(e[o]~=0);e=e[x];local t=e[l];n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t](n[1+t]);for e=t,r do n[e]=nil;end;e=e[x];n[e[l]]=u[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];e=e[x];elseif(a<=t(839596605,839596621))then e=e[x];n[e[l]]=i[e[o]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=u[e[o]];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];n[e[l]]=n[e[o]][e[d]];e=e[x];local t=e[l];local l=n[e[o]];n[t+1]=l;n[t]=l[e[d]];e=e[x];e=e[x];end;elseif(a<=((f[702912794])or((function(e)f[702912794]=t((t(e,596380))-729360,625116);return(f[702912794]);end)(t(255838553,c["WqUY0Z5g"])))))then if(a<=h(t(409340634,845652990),1211641))then if(a>((f[362043477])or(c["kW0zoA"](t(276323918,c[262668696]),t,f,362043477))))then n[e[l]]=e[o]/n[e[d]];elseif(a<((f[48371504])or(c[35725826](t(287764603,c[671259666]),t,f,48371504))))then local t;local c;local r;local s;local i;local a;local d=0;local f=0;local function x(e,n,l)e=(d+e)%3 d=((e~=0)and d+((1==e)and n or-n)or d*n)%l return d end for d=0,30 do if x(9920,7669+d,702)>=351 then if x(7166,7568+d,3878)>=1939 then if x(5698,3481+d,3528)<1764 then else r=l;end s=n;else if x(3765,2934+d,1228)<=614 then a=t[r];else end end else t=e;if x(4741,1472+d,3510)<1755 then if x(2861,4523+d,614)>=307 then c=o;else i=s[t[c]];end else if f~=1 then n[a]=i;f=1;end;if x(2853,7188+d,2036)>1018 then else end end end end end;elseif(a>t(611423055,c["cN2mXrfEeC"]))then n[e[l]]=(e[o]~=0);elseif(a<((f[147933482])or(c["jmjjYCr"](t(855374063,c[596954169]),t,f,147933482))))then n[e[l]]=n[e[o]]/n[e[d]];end;elseif(a<=h(t(181403239,354922648),1201690))then if(a==h(t(632240122,c[387680078]),t(459529125,460115833)))then if(n[e[l]])then b=e[o];end;elseif(a<=h(61162758,1708113))then n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];local c=e[l];local t=n[e[o]];n[c+1]=t;n[c]=t[e[d]];e=e[x];n[e[l]]=e[o];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];n[t]=n[t](s(n,t+1,e[o]));for e=t+1,r do n[e]=nil;end;e=e[x];local c=e[l];local t=n[e[o]];n[c+1]=t;n[c]=t[e[d]];e=e[x];n[e[l]]=e[o];e=e[x];local t=e[l];local c=({n[t](s(n,t+1,e[o]))});local o=e[d];local l=0;for e=t,o,1 do l=l+1;n[e]=c[l];end;for e=o+1,r do n[e]=nil;end;e=e[x];e=e[x];end;elseif(a==((f[473418490])or((function(e)f[473418490]=t(t(((e)-61088)-715685,405423),345653);return(f[473418490]);end)(t(903363399,c[228207737])))))then n[e[l]]=n[e[o]][n[e[d]]];elseif(a<=120)then do return(n[e[l]]);end;e=e[x];e=e[x];end;until false end);end;return B(z(),{},_())(...);end)(({[(887439793)]=((function(l,o,e,n)e[n]=((o((l)-((#{336;851;(function(...)return;end)()}+48648)),((136241-#("???")))))-((416906-#("Sussy Baka obfuscator v1.5"))))-((164794-#("wtf")));return(e[n]);end));[((432036274-#("OBAMA IS WHITE! OBAMA IS WHITE! OBAMA IS WHITE! OBAMA IS WHITE! OBAMA IS WHITE!")))]=((function(o,l,n,e)n[e]=l((((o)-((868967-#("prostate"))))-(542771))-(936904),((#{413;400;}+875589)));return(n[e]);end));[(477086844)]=((841110));[(596954169)]=(((853401085-#("transferring my boost in 3 hours"))));[(841182038)]=((function(o,e,l,n)l[n]=(e(e(o,((782141-#("Raid: Shadow Legends here, I can confirm this script was skidded")))),((#{}+110247))))-(126830);return(l[n]);end));["pUQwVV0"]=((100159671));[((#{773;368;524;}+592788171))]=(((#{(function(...)return...;end)(4,257)}+366)));[((#{144;(function(...)return 149;end)()}+249941251))]=((913459961));[(165995577)]=((510250603));x1SUAZt0=(((#{765;726;826;936;(function(...)return 782;end)()}+15)));[(63487190)]=(((#{297;(function(...)return 629,...;end)(374,994)}+756317793)));[((#{399;721;394;312;}+401278269))]=(((#{459;570;527;939;(function(...)return 628,433,...;end)(313,103)}+655355754)));[((323912689-#("px1#5454")))]=("\110");[((1966970-#("federal agency of deez nuts")))]=((677301517));[(343335124)]=(((#{754;(function(...)return 737,962;end)()}+29)));bAuMS=((36));["dVzJU9"]=((674));[(563461517)]=((370860001));[(690511759)]=(((#{563;229;428;951;}+344962397)));[(498401925)]=(((#{184;(function(...)return...;end)()}+89)));["gqO0c"]=((248264983));[((167833490-#("I am a registered sex offender i stuck mt dick into a blender, your mom is a transgender")))]=((681042554));[(289978309)]=(((138874743-#("Jackson Jack Tension"))));[((240712643-#("sussy imposter?")))]=(((#{474;}+7802)));[(387680078)]=((142647117));[((369230935-#("My tips sticky rn my tip my tips creaming I am playing with a Lil bit ohoho")))]=(((249077529-#("I am leaving CS:GO and giving away my knives. Hurry up pick some >> discord.gg psu"))));[(152219730)]=(((#{124;}+501423378)));[((#{31;619;446;(function(...)return 795;end)()}+709137563))]=((function(o,n,e,l)e[l]=(n(n(((o)-((490441-#("never gonna give you up"))))-((886757-#("help if you see this perth has me locked up in his basement i need help"))),((#{680;}+200612))),(355180)))-(204210);return(e[l]);end));[(621252305)]=("\109");['yk32jm']=((2047));zOlbw=(((868347135-#("perth is sus"))));["ukHup"]=((function(o,e,l,n)l[n]=e((e(e(o,((#{858;302;}+792090))),((180089-#("Ok we can continue the")))))-((666666-#("Balls"))),((#{}+501521)));return(l[n]);end));["MQISOu"]=(((#{59;297;425;688;}+112937542)));[((#{130;584;(function(...)return 704,253,493;end)()}+537435816))]=(((269719836-#("apt install sl -y"))));ohZWzer=(((573943710-#("C# - more used in the gaming industry, plugins, etc., C++ - more used in machine learning, game engine development (physics, etc.), software development, sometimes in websites (for server-security purposes)"))));['btqlWDZBhG']=(((871098046-#("!rank"))));[(668794168)]=((function(o,e,n,l)n[l]=(e((e(o,((581862-#("funeralW")))))-(627121),((437395-#("Ryonechicken really got some debt and money issues")))))-((#{53;212;223;100;(function(...)return 114,125;end)()}+957930));return(n[l]);end));[(723896148)]=((1348));[((140361446-#("Overdrive is a skill based fighting game! Better than UCD or Soulshatters.")))]=(((#{899;152;552;933;(function(...)return 574,714,...;end)()}+16777210)));[(249714393)]=((function(o,l,n,e)n[e]=(((l(l(o,((59589-#("can i put my ballsss in yo jawww")))),(214339)))-(886046))-(153832))-((680749-#("Perth please shut the fuck up and dont spam here i forgor to mute here")));return(n[e]);end));[((253204416-#("e621.net for op roblox scripts")))]=((577840283));["H0Qwk0iE0P"]=(((27-#("Hacking into the mainframe"))));[((#{(function(...)return 815,11,153,...;end)(671,166,439)}+791106657))]=(((35-#("My penis is big ( im lying )"))));[(708256307)]=(((24-#("Sussysusususususuussusus"))));[((112937582-#("You lookin real sussy over there!!!!")))]=("\107");[((#{842;436;852;(function(...)return;end)()}+125643707))]=(((829844085-#("what"))));['E2mruo']=((function(o,e,l,n)l[n]=e(e(e(o,(65100)),(436072)),((#{517;377;}+472562)));return(l[n]);end));[((273310026-#("8-4=4*0.5=2, 1e1e1e=gr_y")))]=(((5064-#("iPhone 46 Pro Ultra Extreme Diamond Platinum Max Supersized Plus"))));n0g3HPx=(((12-#("grrr"))));[((#{937;461;865;}+940634742))]=((function(o,l,e,n)e[n]=l(((o)-((880405-#("Gay buttsex"))))-((114825-#("nigerien balls"))),((#{(function(...)return 789;end)()}+660655)));return(e[n]);end));["iiq8EzS"]=("\100");[(807506878)]=((993880799));["lBq8bnLzg"]=((323912681));[(35725826)]=((function(l,o,e,n)e[n]=(((((l)-((971166-#("cum"))))-(585021))-((#{810;166;(function(...)return 278,906;end)()}+294343)))-(614523))-((#{386;605;496;}+308738));return(e[n]);end));[(925637430)]=(((563643491-#("cumhead"))));[((655355785-#("Omer faruk is a hot cum")))]=("\102");[((#{473;359;}+388999016))]=((894060078));[((126071844-#("this script was obfuscated using moonsec")))]=(((1464-#("glockfrauddd#9444 ON TOP"))));[((839102469-#("<:waa:820486050937307167>")))]=((function(l,o,e,n)e[n]=((o((l)-((#{}+85660)),(573863)))-((239363-#("memcorrupt hospitalized perth is that u"))))-((989835-#("shlex is so sexy")));return(e[n]);end));[((#{582;748;377;(function(...)return 106,...;end)()}+384957345))]=((function(o,e,n,l)n[l]=(e(e(o,((#{771;567;597;(function(...)return 635,902,608;end)()}+751331))),(326206)))-(970662);return(n[l]);end));[(205978730)]=((154));[(1181968)]=(((#{}+814111)));[(871098041)]=("\50");[(953720252)]=((189332014));[(458835300)]=(((#{271;120;88;(function(...)return...;end)(766)}+0)));[(905724386)]=(((#{308;214;12;}+1020)));['ck1ee9L4Bn']=((454614227));['jmjjYCr']=((function(o,l,e,n)e[n]=l(((((o)-(297368))-((#{(function(...)return 888,975,631;end)()}+292223)))-(368131))-(910185),(632024));return(e[n]);end));[(719847174)]=(((65561-#("there are was no bytecode"))));[((860843701-#("What the fuck")))]=((34249));["uxMMflkQ"]=("\115");[((#{506;}+187327284))]=(((#{}+592058253)));[((902627274-#("Slowmode is enabled. Members can only send one message every lifetime.")))]=(((266-#("i like men"))));[(307271135)]=((function(o,e,l,n)l[n]=e(e((e(o,(876254)))-((122583-#("perth is cool"))),((#{}+555512))),(955788));return(l[n]);end));[(913459961)]=("\43");[(200244934)]=((function(l,o,e,n)e[n]=o(((l)-((#{247;573;176;923;}+441452)))-(610175),((#{(function(...)return 796,...;end)()}+883734)));return(e[n]);end));['ISSg7L8l']=((function(o,e,l,n)l[n]=e((e((o)-((872163-#("Sonic says: sonic says: sonic says: sonic says"))),((#{(function(...)return 328,...;end)(329,473)}+339923))))-((#{248;2;821;(function(...)return 802,629,539,170,...;end)(76)}+375853)),(47669));return(l[n]);end));[(695852875)]=(((590600893-#("faint#6969 is a big skid. wait.."))));hRqzXYmx=(((#{876;618;1;(function(...)return 547,117,487;end)()}+919967030)));[((#{}+862112943))]=(((#{158;469;586;565;}+159413585)));[((#{}+269719819))]=("\97");[(232752059)]=((function(o,n,l,e)l[e]=n(n((o)-((858414-#("script-ware >synapse> krnl > sentinel > jjspoit > sirhurt"))),(802260)),(441134));return(l[e]);end));[(454240379)]=(((801782611-#("ass"))));[(189332014)]=("\116");[((942953568-#("lucian#9999")))]=((731329304));["qS5zSnQ0"]=("\40");x0r6Y0SDV=("\111");[(566271629)]=(((662665306-#("Cock ++"))));[((#{950;(function(...)return...;end)()}+349974813))]=((function(l,o,n,e)n[e]=(((l)-(309539))-(138947))-(959462);return(n[e]);end));Q0tip=("\108");[((#{475;375;963;416;}+284191214))]=((function(o,e,l,n)l[n]=e(e(e(o,((432976-#("Ez IP logged")))),((722680-#("like")))),(264540));return(l[n]);end));[((228207746-#("I said ok")))]=(((903315341-#("i farted to this discord"))));[((681042566-#("grabify.link")))]=("\114");[(764945195)]=((368892836));['MGL80j2']=("\105");[(229559301)]=(((#{709;790;3;953;(function(...)return 347;end)()}+187029930)));["WIdu1oU"]=(((#{767;715;968;(function(...)return 181,436,...;end)()}+240229642)));[(874467716)]=((function(o,e,l,n)l[n]=e(e(e(o,(377223)),((180730-#("wone more MEME string by #jaack0001")))),((64508-#("fuck u dogix"))));return(l[n]);end));[((#{320;980;(function(...)return 568,...;end)()}+921334487))]=((5));[(305379501)]=((165));[((846000602-#("balls in yo jaws (yo jaws)")))]=("\120");[((#{}+812419154))]=((372232539));[(21591876)]=(((#{911;(function(...)return 290;end)()}+0)));[(100159671)]=("\99");["PbWozrvBn"]=((596969261));[(774371888)]=("\117");[(425693847)]=((701631341));[((#{798;613;894;520;}+666369644))]=((function(o,l,e,n)e[n]=(((l((o)-((415677-#("psu thighs"))),(14637)))-(347038))-(872100))-((#{(function(...)return 620,789,16,...;end)(705,153,954,975)}+270405));return(e[n]);end));[((149847563-#("imagine being named omer faruk birer bozo")))]=(((742553916-#("gargle my balls"))));[(61679461)]=(((207263329-#("My penis is big ( im lying )"))));Ibp3hBf0=(((368-#("Perth please dm me i need someone to talk to im so lonely"))));["btCD0Ld0E6"]=((103942407));[((#{623;924;(function(...)return 933,847;end)()}+903466405))]=((621252305));["Uv2DvdPtjL"]=((6));["UXdoTN"]=((21));['cN2mXrfEeC']=(((611423056-#("found a can of beans"))));[(260223226)]=(((113-#("It is sad that most meme strings are only at the bottoms of the script"))));[((731329314-#("whos shawn")))]=("\104");[((621594475-#("what")))]=((function(o,e,n,l)n[l]=(e(e(e(o,((286327-#("how do I compile lua into rust please help")))),((#{380;(function(...)return 307,774;end)()}+526299))),(342574)))-(561480);return(n[l]);end));[((742553944-#("gonna spam it <a:trolla:810117626327465996>")))]=("\101");[(762654841)]=((745136053));[(501423379)]=("\37");[(103942407)]=("\103");kW0zoA=((function(o,l,e,n)e[n]=(l((o)-(292545),(631152)))-(233208);return(e[n]);end));['x79X9Yw']=(((964-#("obama sussy balls"))));[(671259666)]=(((286041093-#("never gonna give you up"))));[((258153772-#("perth say sus")))]=(((57-#("perth"))));[(993880799)]=("\112");[(562354862)]=((function(o,e,n,l)n[l]=((e(e(o,((692351-#("This script was obfuscated using lua")))),((245004-#("perth falls down stairs 24 7")))))-((#{539;81;381;}+93769)))-((#{}+737234));return(n[l]);end));[(148932288)]=(((13-#("ok to what"))));[((772940945-#("Never gonna give up")))]=((396277000));[(777371616)]=(((#{607;762;(function(...)return...;end)()}+774371886)));XgxDP=(((846000601-#("My creamy nuts are on top"))));[((#{}+662665299))]=("\121");[(828048030)]=(((#{844;42;(function(...)return 478,137;end)()}+244)));[(262668696)]=((276232852));omlHrPOTj=("\58");[((756317809-#("prezt is gay")))]=("\98");["WqUY0Z5g"]=((253917821));[(353214665)]=((31));["dd5ryo"]=(((376229838-#("bro"))));["Utp3sr"]=((function(o,e,l,n)l[n]=e(e(e(((o)-((987433-#("ok well"))))-(836244),((963415-#("yo wassup")))),(237210)),(924801));return(l[n]);end));}),...)})do return e end;
merll / MutebtnConnects mute controllers such as MuteMe™ to apps
Poison11122 / Android BotnetHello everyone Ladies and gentlemen, we present to your attention the android botnet "POISON" Works on 8-12 android Functionality: 1. Sending SMS 2. Sending SMS to contacts 3. Account sheet 4. Fake push 5. Hidden interception of push 6. Reading sms 7. Hidden sms interception 8. Mute the sound 9. Lock the screen 10. Get admin rights 11. Contact list 12. List of installed applications 13. Clear Push 14. Keylogger 15. Call forwarding 16. Open the application 17. Open the link in the browser 18. Clear the application cache 19. Open injections 20. Standard injections. 21. Delete applications 22. Delete the bot 23. Scanning applications 24. Mail scanning 25. Multilingualism 26. Anti-removal 27. The APK Hides in the box 28. live injections 29. cookie injections The bot is under development, some functions have not been finalized The rental price is $ 345 / month after completion, the price will rise! 24/7 support For all questions in PM. Telegram: https://t.me/TYTNET1
jasonketola / Google Meet Mute TogglerFor muting and unmuting Google Meet from the extension icon.
bralexc / Mute Unmute MeetingsAutoHotKey script to mute/unmute your microphone in meeting apps
jfedor2 / Meet Mute ButtonMute button/status indicator for Google Meet
motemen / Chrome Meet Mute TogglerEasily toggle your microphone mutes on Google Meet meetings, by clicking toolbar button.
spuder / MuteMe ArduinoNo description available
psobot / Meet Midi MuteControl the mute button in Google Meet with any MIDI-attached sustain pedal.
TheStaticTurtle / VoiceMeeterAutoMuteNo description available
kshitizsaini113 / Mutex The System Metrics AnalyzerMutex: The System Metrics Analyzer is a Command-Line utility to visualize the live health of our system which focuses on fetching data through system files, processing and dumping it highlighting the features of Linux System Architecture.