From 16bd9abe529cd1ac7152f78a363a8d9425a3bd64 Mon Sep 17 00:00:00 2001 From: lovetonight Date: Thu, 30 Nov 2023 16:07:11 +0700 Subject: [PATCH 01/15] add: login --- .gitignore | 1 + chess/online.py | 25 ++++++++++++++++--------- menus/online.py | 32 +++++++++++++++++++++++++------- pychess.py | 8 ++++---- res/texts/login.txt | 2 ++ res/texts/online.txt | 6 ------ server.py | 30 +++++++++++++++++++++++++----- tools/loader.py | 6 ++++++ 8 files changed, 79 insertions(+), 31 deletions(-) create mode 100644 res/texts/login.txt diff --git a/.gitignore b/.gitignore index 9d678c0..8faba16 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ notes.txt res/stockfish/build/stockfish.exe res/stockfish/path.txt res/savedGames/game*.txt +account.txt \ No newline at end of file diff --git a/chess/online.py b/chess/online.py index 0617a9d..8927739 100644 --- a/chess/online.py +++ b/chess/online.py @@ -7,6 +7,7 @@ ''' import socket import threading +from time import sleep from chess.onlinelib import * @@ -15,16 +16,11 @@ # This is a main function that calls all other functions, socket initialisation # and the screen that appears just after online menu but just before online lobby. -def main(win, addr, load, ipv6=False): - showLoading(win) - - if ipv6: - sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) - servaddr = (addr, PORT, 0, 0) - else: - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - servaddr = (addr, PORT) +def main(win, username, password, load, ipv6=False): + # Tai day gui request dang nhap + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + servaddr = ('127.0.0.1', PORT) try: sock.connect(servaddr) @@ -34,6 +30,17 @@ def main(win, addr, load, ipv6=False): thread = threading.Thread(target=bgThread, args=(sock,)) thread.start() + + write(sock, username) + write(sock, password) + # Đợi server phản hồi "OK" để xác nhận username và password hợp lệ + while read() != "OK": + username = "hoan" + password = "1234" + write(sock, username) + write(sock, password) + + #TODO: check username, password write(sock, "PyChess") write(sock, VERSION) diff --git a/menus/online.py b/menus/online.py index f4c39ec..a558b98 100644 --- a/menus/online.py +++ b/menus/online.py @@ -6,7 +6,7 @@ import pygame from ext.pyBox import TextBox -from tools.loader import ONLINEMENU, BACK, FONT +from tools.loader import ONLINEMENU, BACK, FONT, LOGINBOARD from tools.utils import rounded_rect # This shows the screen @@ -23,25 +23,43 @@ def showScreen(win, sel): rounded_rect(win, (255, 255, 255), (300, 350, 110, 30), 10, 3) win.blit(ONLINEMENU.CONNECT, (300, 350)) - + pygame.draw.rect(win, (255, 255, 255), (130 + sel*160, 460, 40, 20), 3) +def loginScreen(win, sel): + win.fill((0, 0, 0)) + rounded_rect(win, (255, 255, 255), (120, 10, 260, 70), 20, 4) + rounded_rect(win, (255, 255, 255), (20, 90, 460, 400), 14, 4) + win.blit(LOGINBOARD.HEAD, (175, 15)) + win.blit(BACK, (460, 0)) + + for cnt, i in enumerate(LOGINBOARD.TEXT): + win.blit(i, (40, 100 + cnt*18)) + + rounded_rect(win, (255, 255, 255), (300, 350, 110, 30), 10, 3) + win.blit(LOGINBOARD.CONNECT, (300, 350)) # This is the main function, called from main menu def main(win): clock = pygame.time.Clock() sel = 0 - box = TextBox(FONT, (0, 0, 0), (65, 350, 200, 35)) + username_box = TextBox(FONT, (0, 0, 0), (65, 350, 200, 35)) + password_box = TextBox(FONT, (0, 0, 0), (65, 400, 200, 35)) # Adjusted position for password box + while True: clock.tick(24) - showScreen(win, sel) + loginScreen(win, sel) pygame.draw.rect(win, (255, 255, 255), (63, 348, 204, 39)) - box.draw(win) + username_box.draw(win) + + pygame.draw.rect(win, (255, 255, 255), (63, 398, 204, 39)) # Draw rectangle for password box + password_box.draw(win) for event in pygame.event.get(): - box.push(event) + username_box.push(event) + password_box.push(event) if event.type == pygame.QUIT: return 0 @@ -59,5 +77,5 @@ def main(win): sel = 1 if 300 < x < 410 and 350 < y < 380: - return box.text, bool(sel) + return username_box.text, password_box.text, bool(sel) # Return both username and password pygame.display.update() diff --git a/pychess.py b/pychess.py index 8381d40..8f36f95 100644 --- a/pychess.py +++ b/pychess.py @@ -30,9 +30,9 @@ # Coordinates of buttons in rectangle notation. sngl = (260, 140, 220, 40) -mult = (280, 200, 200, 40) -onln = (360, 260, 120, 40) -load = (280, 320, 200, 40) +mult = (260, 200, 200, 40) +onln = (260, 260, 120, 40) +load = (260, 320, 200, 40) pref = (0, 450, 210, 40) abt = (390, 450, 110, 40) hwto = (410, 410, 90, 30) @@ -170,7 +170,7 @@ def showMain(prefs): if ret == 0: run = False elif ret != 1: - run = chess.online(win, ret[0], prefs, ret[1]) + run = chess.online(win, ret[0], ret[1], prefs, ret[1]) elif load[0] < x < sum(load[::2]) and load[1] < y < sum(load[1::2]): sound.play_click(prefs) diff --git a/res/texts/login.txt b/res/texts/login.txt new file mode 100644 index 0000000..cbada48 --- /dev/null +++ b/res/texts/login.txt @@ -0,0 +1,2 @@ +First, please enter username & password + diff --git a/res/texts/online.txt b/res/texts/online.txt index 6bc3b6e..1b1511d 100644 --- a/res/texts/online.txt +++ b/res/texts/online.txt @@ -13,9 +13,3 @@ THE SECTION BELOW IS FOR SELF-HOSTED SERVERS Enter the server's address below and connect to it - - - -Advanced Settings: -Enter the IP protocol of server (IPv4 is default) - - IPv4 IPv6 diff --git a/server.py b/server.py index 49ddafb..f91b8fd 100644 --- a/server.py +++ b/server.py @@ -354,27 +354,47 @@ def adminThread(): log("See 'onlinehowto.txt' for help on how to use the commands.") # Does the initial checks and lets players in. +def checkusername(username, password): + with open('account.txt', 'r') as file: + for line in file: + data = line.strip().split() + if len(data) == 3: + stored_username, stored_password, _ = data + if username == stored_username and password == stored_password: + return True + return False + + + def initPlayerThread(sock): global players, total, totalsuccess log("New client is attempting to connect.") total += 1 + # Đọc và kiểm tra username, password từ client + username = read(sock, 3) + password = read(sock, 3) + while not checkusername(username, password): + write(sock, "notOK") + username = read(sock, 3) + password = read(sock, 3) + + # Phản hồi cho client là thông tin đã được xác nhận + write(sock, "OK") + + # Kiểm tra các điều kiện khác và thực hiện logic kết nối if read(sock, 3) != "PyChess": log("Client sent invalid header, closing connection.") write(sock, "errVer") - elif read(sock, 3) != VERSION: log("Client sent invalid version info, closing connection.") write(sock, "errVer") - elif len(players) >= 10: log("Server is busy, closing new connections.") write(sock, "errBusy") - elif lock: log("SERVER: Server is locked, closing connection.") write(sock, "errLock") - else: totalsuccess += 1 key = genKey() @@ -392,7 +412,7 @@ def initPlayerThread(sock): pass rmBusy(key) sock.close() - + # Initialize the main socket log(f"Welcome to My-Pychess Server, {VERSION}\n") log("INITIALIZING...") diff --git a/tools/loader.py b/tools/loader.py index 7eb8ea1..13b39d9 100644 --- a/tools/loader.py +++ b/tools/loader.py @@ -292,6 +292,12 @@ class ONLINE: NO = small.render("NO", True, WHITE) OK = small.render("OK", True, WHITE) +class LOGINBOARD: + HEAD = large.render("Login", True, WHITE) + with open(os.path.join("res", "texts", "login.txt")) as f: + TEXT = [vsmall.render(i, True, WHITE) for i in f.read().splitlines()] + + CONNECT = small.render("Connect", True, WHITE) class ONLINEMENU: HEAD = large.render("Online", True, WHITE) From a7d59ca732c141ab89286bc26d370fc7e873a746 Mon Sep 17 00:00:00 2001 From: lovetonight Date: Sat, 2 Dec 2023 14:43:50 +0700 Subject: [PATCH 02/15] C++ server --- server.cpp | 560 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 560 insertions(+) create mode 100644 server.cpp diff --git a/server.cpp b/server.cpp new file mode 100644 index 0000000..dc1239b --- /dev/null +++ b/server.cpp @@ -0,0 +1,560 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define LOG false +#define IPV6 false + +std::queue logQ; +std::set busyPpl; +std::vector> players; +bool end = false; +bool lock = false; +int total = 0; +int totalsuccess = 0; +const std::string VERSION = "v3.2.0"; +const int PORT = 26104; +std::chrono::time_point START_TIME; + +int makeInt(const std::string& num) { + try { + return std::stoi(num); + } catch (const std::invalid_argument& e) { + return -1; + } +} + +std::string getTime() { + auto sec = std::chrono::duration_cast(std::chrono::steady_clock::now() - START_TIME).count(); + int minutes = sec / 60; + sec %= 60; + int hours = minutes / 60; + minutes %= 60; + int days = hours / 24; + hours %= 24; + std::stringstream ss; + ss << days << " days, " << hours << " hours, " << minutes << " minutes, " << sec << " seconds"; + return ss.str(); +} + +std::string getIp(bool publicIp) { + std::string ip; + if (publicIp) { + try { + std::string url = "https://api64.ipify.org"; + std::string response; + std::string command = "curl -s " + url; + FILE* pipe = popen(command.c_str(), "r"); + if (!pipe) { + throw std::runtime_error("popen() failed!"); + } + char buffer[128]; + while (fgets(buffer, sizeof(buffer), pipe) != nullptr) { + response += buffer; + } + pclose(pipe); + ip = response; + } catch (const std::exception& e) { + ip = "127.0.0.1"; + } + } else { + int sock = socket(AF_INET, SOCK_DGRAM, 0); + if (sock == -1) { + ip = "127.0.0.1"; + } else { + sockaddr_in loopback; + std::memset(&loopback, 0, sizeof(loopback)); + loopback.sin_family = AF_INET; + loopback.sin_addr.s_addr = INADDR_LOOPBACK; + loopback.sin_port = htons(9); + if (connect(sock, reinterpret_cast(&loopback), sizeof(loopback)) == -1) { + ip = "127.0.0.1"; + } else { + sockaddr_in name; + socklen_t namelen = sizeof(name); + if (getsockname(sock, reinterpret_cast(&name), &namelen) == -1) { + ip = "127.0.0.1"; + } else { + ip = inet_ntoa(name.sin_addr); + } + } + close(sock); + } + } + return ip; +} + +void log(const std::string& data, int key = -1, bool adminput = false) { + std::string text; + if (adminput) { + text = ""; + } else if (key == -1) { + text = "SERVER: "; + } else { + text = "Player" + std::to_string(key) + ": "; + } + if (!data.empty()) { + text += data; + if (!adminput) { + std::cout << text << std::endl; + } + if (LOG) { + std::time_t now = std::time(nullptr); + std::string time = std::asctime(std::localtime(&now)); + logQ.push(time.substr(0, time.length() - 1) + ": " + text + "\n"); + } + } else { + logQ.push(""); + } +} + +std::string read(int sock, int timeout = -1) { + char buffer[9]; + std::memset(buffer, 0, sizeof(buffer)); + if (timeout != -1) { + timeval tv; + tv.tv_sec = timeout; + tv.tv_usec = 0; + setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, reinterpret_cast(&tv), sizeof(tv)); + } + ssize_t bytesRead = recv(sock, buffer, sizeof(buffer) - 1, 0); + if (bytesRead <= 0) { + return "quit"; + } + return std::string(buffer); +} + +void write(int sock, const std::string& msg) { + std::string buffedmsg = msg + std::string(8 - msg.length(), ' '); + send(sock, buffedmsg.c_str(), buffedmsg.length(), 0); +} + +int genKey() { + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution<> dis(1000, 9999); + int key = dis(gen); + for (const auto& player : players) { + if (player.second == key) { + return genKey(); + } + } + return key; +} + +int getByKey(int key) { + for (const auto& player : players) { + if (player.second == key) { + return player.first; + } + } + return -1; +} + +void mkBusy(std::initializer_list keys) { + for (int key : keys) { + busyPpl.insert(key); + } +} + +void rmBusy(std::initializer_list keys) { + for (int key : keys) { + busyPpl.erase(key); + } +} + +bool game(int sock1, int sock2) { + while (true) { + std::string msg = read(sock1); + write(sock2, msg); + if (msg == "quit") { + return true; + } else if (msg == "draw" || msg == "resign" || msg == "end") { + return false; + } + } +} + +void player(int sock, int key) { + while (true) { + std::string msg = read(sock); + if (msg == "quit") { + return; + } else if (msg == "pStat") { + log("Made request for players Stats.", key); + std::vector> latestplayers = players; + std::set latestbusy = busyPpl; + if (latestplayers.size() > 0 && latestplayers.size() < 11) { + write(sock, "enum" + std::to_string(latestplayers.size() - 1)); + for (const auto& player : latestplayers) { + if (player.second != key) { + if (latestbusy.find(player.second) != latestbusy.end()) { + write(sock, std::to_string(player.second) + "b"); + } else { + write(sock, std::to_string(player.second) + "a"); + } + } + } + } + } else if (msg.substr(0, 2) == "rg") { + log("Made request to play with Player" + msg.substr(2), key); + int oSock = getByKey(std::stoi(msg.substr(2))); + if (oSock != -1) { + if (busyPpl.find(std::stoi(msg.substr(2))) == busyPpl.end()) { + mkBusy({key, std::stoi(msg.substr(2))}); + write(oSock, "gr" + std::to_string(key)); + write(sock, "msgOk"); + std::string newMsg = read(sock); + if (newMsg == "ready") { + log("Player" + std::to_string(key) + " is in a game as white"); + if (game(sock, oSock)) { + return; + } else { + log("Player" + std::to_string(key) + " finished the game"); + } + } else if (newMsg == "quit") { + write(oSock, "quit"); + return; + } + rmBusy({key}); + } else { + log("Player" + std::to_string(key) + " requested busy player"); + write(sock, "errPBusy"); + } + } else { + log("Player" + std::to_string(key) + " sent invalid key"); + write(sock, "errKey"); + } + } else if (msg.substr(0, 4) == "gmOk") { + log("Accepted Player" + msg.substr(4) + " request", key); + int oSock = getByKey(std::stoi(msg.substr(4))); + write(oSock, "start"); + log("Player" + std::to_string(key) + " is in a game as black"); + if (game(sock, oSock)) { + return; + } else { + log("Player" + std::to_string(key) + " finished the game"); + rmBusy({key}); + } + } else if (msg.substr(0, 4) == "gmNo") { + log("Rejected Player" + msg.substr(4) + " request", key); + write(getByKey(std::stoi(msg.substr(4))), "nostart"); + rmBusy({key}); + } + } +} + +void logThread() { + std::ofstream file("SERVER_LOG.txt", std::ios::app); + while (true) { + std::this_thread::sleep_for(std::chrono::seconds(1)); + while (!logQ.empty()) { + std::string data = logQ.front(); + logQ.pop(); + if (data.empty()) { + return; + } else { + file << data; + } + } + } +} + +void kickDisconnectedThread() { + while (true) { + std::this_thread::sleep_for(std::chrono::seconds(10)); + for (auto it = players.begin(); it != players.end();) { + int sock = it->first; + int key = it->second; + char buffer[8]; + std::memset(buffer, '.', sizeof(buffer)); + ssize_t bytesSent = send(sock, buffer, sizeof(buffer), 0); + if (bytesSent > 0) { + int cntr = 0; + int diff = 8; + while (true) { + cntr++; + if (cntr == 8) { + bytesSent = 0; + break; + } + if (bytesSent == diff) { + break; + } + diff -= bytesSent; + bytesSent = send(sock, buffer, diff, 0); + } + } + if (bytesSent == 0) { + log("Player" + std::to_string(key) + " got disconnected, removing from player list"); + it = players.erase(it); + } else { + ++it; + } + } + } +} + +void adminThread() { + while (true) { + std::string msg; + std::getline(std::cin, msg); + log(msg, -1, true); + if (msg == "report") { + log(std::to_string(players.size()) + " players are online right now,"); + log(std::to_string(players.size() - busyPpl.size()) + " are active."); + log(std::to_string(total) + " connections attempted, " + std::to_string(totalsuccess) + " were successful"); + log("Server is running " + std::to_string(std::thread::hardware_concurrency()) + " threads."); + log("Time elapsed since last reboot: " + getTime()); + if (!players.empty()) { + log("LIST OF PLAYERS:"); + for (size_t i = 0; i < players.size(); ++i) { + if (busyPpl.find(players[i].second) == busyPpl.end()) { + log(" " + std::to_string(i + 1) + ". Player" + std::to_string(players[i].second) + ", Status: Active"); + } else { + log(" " + std::to_string(i + 1) + ". Player" + std::to_string(players[i].second) + ", Status: Busy"); + } + } + } + } else if (msg == "mypublicip") { + log("Determining public IP, please wait...."); + std::string PUBIP = getIp(true); + if (PUBIP == "127.0.0.1") { + log("An error occurred while determining IP"); + } else { + log("This machine has a public IP address " + PUBIP); + } + } else if (msg == "lock") { + if (lock) { + log("Already in locked state"); + } else { + lock = true; + log("Locked server, no one can join now."); + } + } else if (msg == "unlock") { + if (lock) { + lock = false; + log("Unlocked server, all can join now."); + } else { + log("Already in unlocked state."); + } + } else if (msg.substr(0, 5) == "kick ") { + std::istringstream iss(msg.substr(5)); + std::vector keys; + int key; + while (iss >> key) { + keys.push_back(key); + } + for (int k : keys) { + int sock = getByKey(k); + if (sock != -1) { + write(sock, "close"); + log("Kicking player" + std::to_string(k)); + } else { + log("Player" + std::to_string(k) + " does not exist"); + } + } + } else if (msg == "kickall") { + log("Attempting to kick everyone."); + std::vector> latestplayers = players; + for (const auto& player : latestplayers) { + write(player.first, "close"); + } + } else if (msg == "quit") { + lock = true; + log("Attempting to kick everyone."); + std::vector> latestplayers = players; + for (const auto& player : latestplayers) { + write(player.first, "close"); + } + log("Exiting application - Bye"); + log(""); + end = true; + if (IPV6) { + int sock = socket(AF_INET6, SOCK_STREAM, 0); + sockaddr_in6 addr; + std::memset(&addr, 0, sizeof(addr)); + addr.sin6_family = AF_INET6; + addr.sin6_port = htons(PORT); + inet_pton(AF_INET6, "::1", &(addr.sin6_addr)); + connect(sock, reinterpret_cast(&addr), sizeof(addr)); + close(sock); + } else { + int sock = socket(AF_INET, SOCK_STREAM, 0); + sockaddr_in addr; + std::memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_port = htons(PORT); + inet_pton(AF_INET, "127.0.0.1", &(addr.sin_addr)); + connect(sock, reinterpret_cast(&addr), sizeof(addr)); + close(sock); + } + return; + } else { + log("Invalid command entered ('" + msg + "')."); + log("See 'onlinehowto.txt' for help on how to use the commands."); + } + } +} + +bool checkusername(const std::string& username, const std::string& password) { + std::ifstream file("account.txt"); + std::string line; + while (std::getline(file, line)) { + std::istringstream iss(line); + std::string stored_username, stored_password; + iss >> stored_username >> stored_password; + if (username == stored_username && password == stored_password) { + return true; + } + } + return false; +} + +void initPlayerThread(int sock) { + log("New client is attempting to connect."); + total++; + + std::string username = read(sock, 3); + std::string password = read(sock, 3); + while (!checkusername(username, password)) { + write(sock, "notOK"); + username = read(sock, 3); + password = read(sock, 3); + } + + write(sock, "OK"); + + if (read(sock, 3) != "PyChess") { + log("Client sent invalid header, closing connection."); + write(sock, "errVer"); + } else if (read(sock, 3) != VERSION) { + log("Client sent invalid version info, closing connection."); + write(sock, "errVer"); + } else if (players.size() >= 10) { + log("Server is busy, closing new connections."); + write(sock, "errBusy"); + } else if (lock) { + log("SERVER: Server is locked, closing connection."); + write(sock, "errLock"); + } else { + totalsuccess++; + int key = genKey(); + log("Connection Successful, assigned key - " + std::to_string(key)); + players.push_back({sock, key}); + write(sock, "key" + std::to_string(key)); + player(sock, key); + write(sock, "close"); + log("Player" + std::to_string(key) + " has Quit"); + players.erase(std::remove_if(players.begin(), players.end(), [sock, key](const std::pair& player) { + return player.first == sock && player.second == key; + }), players.end()); + rmBusy({key}); + } + close(sock); +} + +int main() { + int mainSock; + if (IPV6) { + log("IPv6 is enabled. This is NOT the default configuration."); + mainSock = socket(AF_INET6, SOCK_STREAM, 0); + if (mainSock == -1) { + perror("Error creating IPv6 socket"); + return 1; + } + + sockaddr_in6 addr; + std::memset(&addr, 0, sizeof(addr)); + addr.sin6_family = AF_INET6; + addr.sin6_port = htons(PORT); + addr.sin6_addr = in6addr_any; + + if (bind(mainSock, reinterpret_cast(&addr), sizeof(addr)) == -1) { + perror("Error binding IPv6 socket"); + return 1; + } + } else { + log("Starting server with IPv4 (default) configuration."); + mainSock = socket(AF_INET, SOCK_STREAM, 0); + if (mainSock == -1) { + perror("Error creating IPv4 socket"); + return 1; + } + + sockaddr_in addr; + std::memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_port = htons(PORT); + addr.sin_addr.s_addr = INADDR_ANY; + + if (bind(mainSock, reinterpret_cast(&addr), sizeof(addr)) == -1) { + perror("Error binding IPv4 socket"); + return 1; + } + + std::string IP = getIp(false); + if (IP == "127.0.0.1") { + log("This machine does not appear to be connected to a network."); + log("With this limitation, you can only serve the clients "); + log("who are on THIS machine. Use IP address 127.0.0.1"); + } else { + log("This machine has a local IP address - " + IP); + log("USE THIS IP IF THE CLIENT IS ON THE SAME NETWORK."); + log("For more info, read file 'onlinehowto.txt'"); + } + } + + if (listen(mainSock, 16) == -1) { + perror("Error listening for connections"); + return 1; + } + + log("Successfully Started."); + log("Accepting connections on port " + std::to_string(PORT)); + + std::thread(adminThread).detach(); + std::thread(kickDisconnectedThread).detach(); + + if (LOG) { + log("Logging is enabled. Starting to log all output"); + std::thread(logThread).detach(); + } + + while (true) { + int s = accept(mainSock, nullptr, nullptr); + if (s == -1) { + perror("Error accepting connection"); + return 1; + } + + if (end) { + break; + } + + std::thread(initPlayerThread, s).detach(); + } + + close(mainSock); + return 0; +} + + + From 4dd6135b70d1ac8d8f629ea477e14f2c664cc513 Mon Sep 17 00:00:00 2001 From: lovetonight Date: Wed, 13 Dec 2023 01:15:46 +0700 Subject: [PATCH 03/15] fix: play server --- server.cpp | 511 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 345 insertions(+), 166 deletions(-) diff --git a/server.cpp b/server.cpp index dc1239b..b991e2b 100644 --- a/server.cpp +++ b/server.cpp @@ -33,15 +33,20 @@ const std::string VERSION = "v3.2.0"; const int PORT = 26104; std::chrono::time_point START_TIME; -int makeInt(const std::string& num) { - try { +int makeInt(const std::string &num) +{ + try + { return std::stoi(num); - } catch (const std::invalid_argument& e) { + } + catch (const std::invalid_argument &e) + { return -1; } } -std::string getTime() { +std::string getTime() +{ auto sec = std::chrono::duration_cast(std::chrono::steady_clock::now() - START_TIME).count(); int minutes = sec / 60; sec %= 60; @@ -54,44 +59,62 @@ std::string getTime() { return ss.str(); } -std::string getIp(bool publicIp) { +std::string getIp(bool publicIp) +{ std::string ip; - if (publicIp) { - try { + if (publicIp) + { + try + { std::string url = "https://api64.ipify.org"; std::string response; std::string command = "curl -s " + url; - FILE* pipe = popen(command.c_str(), "r"); - if (!pipe) { + FILE *pipe = popen(command.c_str(), "r"); + if (!pipe) + { throw std::runtime_error("popen() failed!"); } char buffer[128]; - while (fgets(buffer, sizeof(buffer), pipe) != nullptr) { + while (fgets(buffer, sizeof(buffer), pipe) != nullptr) + { response += buffer; } pclose(pipe); ip = response; - } catch (const std::exception& e) { + } + catch (const std::exception &e) + { ip = "127.0.0.1"; } - } else { + } + else + { int sock = socket(AF_INET, SOCK_DGRAM, 0); - if (sock == -1) { + if (sock == -1) + { ip = "127.0.0.1"; - } else { + } + else + { sockaddr_in loopback; std::memset(&loopback, 0, sizeof(loopback)); loopback.sin_family = AF_INET; loopback.sin_addr.s_addr = INADDR_LOOPBACK; loopback.sin_port = htons(9); - if (connect(sock, reinterpret_cast(&loopback), sizeof(loopback)) == -1) { + if (connect(sock, reinterpret_cast(&loopback), sizeof(loopback)) == -1) + { ip = "127.0.0.1"; - } else { + } + else + { sockaddr_in name; socklen_t namelen = sizeof(name); - if (getsockname(sock, reinterpret_cast(&name), &namelen) == -1) { + if (getsockname(sock, reinterpret_cast(&name), &namelen) == -1) + { ip = "127.0.0.1"; - } else { + } + else + { ip = inet_ntoa(name.sin_addr); } } @@ -101,360 +124,503 @@ std::string getIp(bool publicIp) { return ip; } -void log(const std::string& data, int key = -1, bool adminput = false) { +void log(const std::string &data, int key = -1, bool adminput = false) +{ std::string text; - if (adminput) { + if (adminput) + { text = ""; - } else if (key == -1) { + } + else if (key == -1) + { text = "SERVER: "; - } else { - text = "Player" + std::to_string(key) + ": "; } - if (!data.empty()) { + else + { + text = "Player " + std::to_string(key) + ": "; + } + if (!data.empty()) + { text += data; - if (!adminput) { + if (!adminput) + { std::cout << text << std::endl; } - if (LOG) { + if (LOG) + { std::time_t now = std::time(nullptr); std::string time = std::asctime(std::localtime(&now)); logQ.push(time.substr(0, time.length() - 1) + ": " + text + "\n"); } - } else { + } + else + { logQ.push(""); } } -std::string read(int sock, int timeout = -1) { +std::string read(int sock, int timeout = -1) +{ char buffer[9]; std::memset(buffer, 0, sizeof(buffer)); - if (timeout != -1) { - timeval tv; - tv.tv_sec = timeout; - tv.tv_usec = 0; - setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, reinterpret_cast(&tv), sizeof(tv)); - } + // if (timeout != -1) + // { + // timeval tv; + // tv.tv_sec = timeout; + // tv.tv_usec = 0; + // setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, reinterpret_cast(&tv), sizeof(tv)); + // } ssize_t bytesRead = recv(sock, buffer, sizeof(buffer) - 1, 0); - if (bytesRead <= 0) { + if (bytesRead <= 0) + { return "quit"; } return std::string(buffer); } -void write(int sock, const std::string& msg) { +void write(int sock, const std::string &msg) { std::string buffedmsg = msg + std::string(8 - msg.length(), ' '); - send(sock, buffedmsg.c_str(), buffedmsg.length(), 0); + ssize_t bytesSent = send(sock, buffedmsg.c_str(), buffedmsg.length(), 0); } - -int genKey() { +int genKey() +{ std::random_device rd; std::mt19937 gen(rd()); std::uniform_int_distribution<> dis(1000, 9999); int key = dis(gen); - for (const auto& player : players) { - if (player.second == key) { + for (const auto &player : players) + { + if (player.second == key) + { return genKey(); } } return key; } -int getByKey(int key) { - for (const auto& player : players) { - if (player.second == key) { +int getByKey(int key) +{ + for (const auto &player : players) + { + if (player.second == key) + { return player.first; } } return -1; } -void mkBusy(std::initializer_list keys) { - for (int key : keys) { +void mkBusy(std::initializer_list keys) +{ + for (int key : keys) + { busyPpl.insert(key); } } -void rmBusy(std::initializer_list keys) { - for (int key : keys) { +void rmBusy(std::initializer_list keys) +{ + for (int key : keys) + { busyPpl.erase(key); } } -bool game(int sock1, int sock2) { - while (true) { +bool game(int sock1, int sock2) +{ + while (true) + { std::string msg = read(sock1); write(sock2, msg); - if (msg == "quit") { + if (msg.compare("quit") == 0) + { return true; - } else if (msg == "draw" || msg == "resign" || msg == "end") { + } + else if (msg.compare("draw") == 0 || msg.compare("resign") == 0 || msg.compare("end") == 0) + { return false; } } } -void player(int sock, int key) { - while (true) { - std::string msg = read(sock); - if (msg == "quit") { +void player(int sock, int key) +{ + while (true) + { + std::string msg = read(sock, 3); + if (msg.substr(0, 4).compare("quit") == 0) + { return; - } else if (msg == "pStat") { + } + else if (msg.substr(0, 5).compare("pStat") == 0) + { log("Made request for players Stats.", key); std::vector> latestplayers = players; std::set latestbusy = busyPpl; - if (latestplayers.size() > 0 && latestplayers.size() < 11) { + if (latestplayers.size() > 0 && latestplayers.size() < 11) + { write(sock, "enum" + std::to_string(latestplayers.size() - 1)); - for (const auto& player : latestplayers) { - if (player.second != key) { - if (latestbusy.find(player.second) != latestbusy.end()) { + for (const auto &player : latestplayers) + { + if (player.second != key) + { + if (latestbusy.find(player.second) != latestbusy.end()) + { write(sock, std::to_string(player.second) + "b"); - } else { + } + else + { write(sock, std::to_string(player.second) + "a"); } } } } - } else if (msg.substr(0, 2) == "rg") { + + } + else if (msg.substr(0, 2).compare("rg") == 0) + { log("Made request to play with Player" + msg.substr(2), key); int oSock = getByKey(std::stoi(msg.substr(2))); - if (oSock != -1) { - if (busyPpl.find(std::stoi(msg.substr(2))) == busyPpl.end()) { + if (oSock != -1) + { + if (busyPpl.find(std::stoi(msg.substr(2))) == busyPpl.end()) + { mkBusy({key, std::stoi(msg.substr(2))}); write(oSock, "gr" + std::to_string(key)); write(sock, "msgOk"); - std::string newMsg = read(sock); - if (newMsg == "ready") { - log("Player" + std::to_string(key) + " is in a game as white"); - if (game(sock, oSock)) { + std::string newMsg = read(sock, 3); + if (newMsg.compare("ready ") == 0) + { + log("Player " + std::to_string(key) + " is in a game as white"); + if (game(sock, oSock)) + { return; - } else { - log("Player" + std::to_string(key) + " finished the game"); } - } else if (newMsg == "quit") { + else + { + log("Player " + std::to_string(key) + " finished the game"); + } + } + else if (newMsg.compare("quit") == 0) + { write(oSock, "quit"); return; } rmBusy({key}); - } else { - log("Player" + std::to_string(key) + " requested busy player"); + } + else + { + log("Player " + std::to_string(key) + " requested busy player"); write(sock, "errPBusy"); } - } else { - log("Player" + std::to_string(key) + " sent invalid key"); + } + else + { + log("Player " + std::to_string(key) + " sent invalid key"); write(sock, "errKey"); } - } else if (msg.substr(0, 4) == "gmOk") { + } + else if (msg.substr(0, 4).compare("gmOk") == 0) + { + log("Accepted Player" + msg.substr(4) + " request", key); int oSock = getByKey(std::stoi(msg.substr(4))); write(oSock, "start"); - log("Player" + std::to_string(key) + " is in a game as black"); - if (game(sock, oSock)) { + log("Player " + std::to_string(key) + " is in a game as black"); + if (game(sock, oSock)) + { return; - } else { - log("Player" + std::to_string(key) + " finished the game"); + } + else + { + log("Player " + std::to_string(key) + " finished the game"); rmBusy({key}); } - } else if (msg.substr(0, 4) == "gmNo") { + } + else if (msg.substr(0, 4).compare("gmNo") == 0) + { log("Rejected Player" + msg.substr(4) + " request", key); write(getByKey(std::stoi(msg.substr(4))), "nostart"); rmBusy({key}); } } -} -void logThread() { +} +void logThread() +{ std::ofstream file("SERVER_LOG.txt", std::ios::app); - while (true) { + while (true) + { std::this_thread::sleep_for(std::chrono::seconds(1)); - while (!logQ.empty()) { + while (!logQ.empty()) + { std::string data = logQ.front(); logQ.pop(); - if (data.empty()) { + if (data.empty()) + { return; - } else { + } + else + { file << data; } } } } -void kickDisconnectedThread() { - while (true) { +void kickDisconnectedThread() +{ + while (true) + { std::this_thread::sleep_for(std::chrono::seconds(10)); - for (auto it = players.begin(); it != players.end();) { + for (auto it = players.begin(); it != players.end();) + { int sock = it->first; int key = it->second; char buffer[8]; std::memset(buffer, '.', sizeof(buffer)); ssize_t bytesSent = send(sock, buffer, sizeof(buffer), 0); - if (bytesSent > 0) { + if (bytesSent > 0) + { int cntr = 0; int diff = 8; - while (true) { + while (true) + { cntr++; - if (cntr == 8) { + if (cntr == 8) + { bytesSent = 0; break; } - if (bytesSent == diff) { + if (bytesSent == diff) + { break; } diff -= bytesSent; bytesSent = send(sock, buffer, diff, 0); } } - if (bytesSent == 0) { - log("Player" + std::to_string(key) + " got disconnected, removing from player list"); + if (bytesSent == 0) + { + log("Player " + std::to_string(key) + " got disconnected, removing from player list"); it = players.erase(it); - } else { + } + else + { ++it; } } } } -void adminThread() { - while (true) { +void adminThread() +{ + while (true) + { std::string msg; std::getline(std::cin, msg); log(msg, -1, true); - if (msg == "report") { + if (msg.compare("report") == 0) + { log(std::to_string(players.size()) + " players are online right now,"); log(std::to_string(players.size() - busyPpl.size()) + " are active."); log(std::to_string(total) + " connections attempted, " + std::to_string(totalsuccess) + " were successful"); log("Server is running " + std::to_string(std::thread::hardware_concurrency()) + " threads."); log("Time elapsed since last reboot: " + getTime()); - if (!players.empty()) { + if (!players.empty()) + { log("LIST OF PLAYERS:"); - for (size_t i = 0; i < players.size(); ++i) { - if (busyPpl.find(players[i].second) == busyPpl.end()) { + for (size_t i = 0; i < players.size(); ++i) + { + if (busyPpl.find(players[i].second) == busyPpl.end()) + { log(" " + std::to_string(i + 1) + ". Player" + std::to_string(players[i].second) + ", Status: Active"); - } else { + } + else + { log(" " + std::to_string(i + 1) + ". Player" + std::to_string(players[i].second) + ", Status: Busy"); } } } - } else if (msg == "mypublicip") { + } + else if (msg == "mypublicip") + { log("Determining public IP, please wait...."); std::string PUBIP = getIp(true); - if (PUBIP == "127.0.0.1") { + if (PUBIP == "127.0.0.1") + { log("An error occurred while determining IP"); - } else { + } + else + { log("This machine has a public IP address " + PUBIP); } - } else if (msg == "lock") { - if (lock) { + } + else if (msg.compare("lock") == 0) + { + if (lock) + { log("Already in locked state"); - } else { + } + else + { lock = true; log("Locked server, no one can join now."); } - } else if (msg == "unlock") { - if (lock) { + } + else if (msg.compare("unlock") == 0) + { + if (lock) + { lock = false; log("Unlocked server, all can join now."); - } else { + } + else + { log("Already in unlocked state."); } - } else if (msg.substr(0, 5) == "kick ") { + } + else if (msg.substr(0, 5).compare("kick") == 0 ) + { std::istringstream iss(msg.substr(5)); std::vector keys; int key; - while (iss >> key) { + while (iss >> key) + { keys.push_back(key); } - for (int k : keys) { + for (int k : keys) + { int sock = getByKey(k); - if (sock != -1) { + if (sock != -1) + { write(sock, "close"); log("Kicking player" + std::to_string(k)); - } else { - log("Player" + std::to_string(k) + " does not exist"); + } + else + { + log("Player " + std::to_string(k) + " does not exist"); } } - } else if (msg == "kickall") { + } + else if (msg.compare("kickall") == 0 ) + { log("Attempting to kick everyone."); std::vector> latestplayers = players; - for (const auto& player : latestplayers) { + for (const auto &player : latestplayers) + { write(player.first, "close"); } - } else if (msg == "quit") { + } + else if (msg.compare("quit") == 0) + { lock = true; log("Attempting to kick everyone."); std::vector> latestplayers = players; - for (const auto& player : latestplayers) { + for (const auto &player : latestplayers) + { write(player.first, "close"); } log("Exiting application - Bye"); log(""); end = true; - if (IPV6) { + if (IPV6) + { int sock = socket(AF_INET6, SOCK_STREAM, 0); sockaddr_in6 addr; std::memset(&addr, 0, sizeof(addr)); addr.sin6_family = AF_INET6; addr.sin6_port = htons(PORT); inet_pton(AF_INET6, "::1", &(addr.sin6_addr)); - connect(sock, reinterpret_cast(&addr), sizeof(addr)); + connect(sock, reinterpret_cast(&addr), sizeof(addr)); close(sock); - } else { + } + else + { int sock = socket(AF_INET, SOCK_STREAM, 0); sockaddr_in addr; std::memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(PORT); inet_pton(AF_INET, "127.0.0.1", &(addr.sin_addr)); - connect(sock, reinterpret_cast(&addr), sizeof(addr)); + connect(sock, reinterpret_cast(&addr), sizeof(addr)); close(sock); } return; - } else { + } + else + { log("Invalid command entered ('" + msg + "')."); log("See 'onlinehowto.txt' for help on how to use the commands."); } } } -bool checkusername(const std::string& username, const std::string& password) { +bool checkusername(const std::string &username, const std::string &password) +{ std::ifstream file("account.txt"); std::string line; - while (std::getline(file, line)) { + while (std::getline(file, line)) + { std::istringstream iss(line); std::string stored_username, stored_password; iss >> stored_username >> stored_password; - if (username == stored_username && password == stored_password) { + if (username.compare(stored_username) == 0 && password.compare(stored_password) == 0) + { return true; } } return false; } -void initPlayerThread(int sock) { +void initPlayerThread(int sock) +{ log("New client is attempting to connect."); total++; - + std::string username = read(sock, 3); + if (username.empty()) + { + log("Error reading username from client."); + return; + } std::string password = read(sock, 3); - while (!checkusername(username, password)) { - write(sock, "notOK"); - username = read(sock, 3); - password = read(sock, 3); + if (password.empty()) + { + log("Error reading password from client."); + return; } - + // while (!checkusername(username, password)) + // { + // write(sock, "notOK"); + // username = read(sock, 3); + // password = read(sock, 3); + // } + write(sock, "OK"); - - if (read(sock, 3) != "PyChess") { + + if (read(sock, 3).compare("PyChess") == 0) + { log("Client sent invalid header, closing connection."); write(sock, "errVer"); - } else if (read(sock, 3) != VERSION) { + } + else if (read(sock, 3).compare(VERSION) == 0) + { log("Client sent invalid version info, closing connection."); write(sock, "errVer"); - } else if (players.size() >= 10) { + } + else if (players.size() >= 10) + { log("Server is busy, closing new connections."); write(sock, "errBusy"); - } else if (lock) { + } + else if (lock) + { log("SERVER: Server is locked, closing connection."); write(sock, "errLock"); - } else { + } + else + { totalsuccess++; int key = genKey(); log("Connection Successful, assigned key - " + std::to_string(key)); @@ -462,21 +628,24 @@ void initPlayerThread(int sock) { write(sock, "key" + std::to_string(key)); player(sock, key); write(sock, "close"); - log("Player" + std::to_string(key) + " has Quit"); - players.erase(std::remove_if(players.begin(), players.end(), [sock, key](const std::pair& player) { - return player.first == sock && player.second == key; - }), players.end()); + log("Player " + std::to_string(key) + " has Quit"); + players.erase(std::remove_if(players.begin(), players.end(), [sock, key](const std::pair &player) + { return player.first == sock && player.second == key; }), + players.end()); rmBusy({key}); } close(sock); } -int main() { +int main() +{ int mainSock; - if (IPV6) { + if (IPV6) + { log("IPv6 is enabled. This is NOT the default configuration."); mainSock = socket(AF_INET6, SOCK_STREAM, 0); - if (mainSock == -1) { + if (mainSock == -1) + { perror("Error creating IPv6 socket"); return 1; } @@ -487,14 +656,18 @@ int main() { addr.sin6_port = htons(PORT); addr.sin6_addr = in6addr_any; - if (bind(mainSock, reinterpret_cast(&addr), sizeof(addr)) == -1) { + if (bind(mainSock, reinterpret_cast(&addr), sizeof(addr)) == -1) + { perror("Error binding IPv6 socket"); return 1; } - } else { + } + else + { log("Starting server with IPv4 (default) configuration."); mainSock = socket(AF_INET, SOCK_STREAM, 0); - if (mainSock == -1) { + if (mainSock == -1) + { perror("Error creating IPv4 socket"); return 1; } @@ -505,24 +678,29 @@ int main() { addr.sin_port = htons(PORT); addr.sin_addr.s_addr = INADDR_ANY; - if (bind(mainSock, reinterpret_cast(&addr), sizeof(addr)) == -1) { + if (bind(mainSock, reinterpret_cast(&addr), sizeof(addr)) == -1) + { perror("Error binding IPv4 socket"); return 1; } std::string IP = getIp(false); - if (IP == "127.0.0.1") { + if (IP == "127.0.0.1") + { log("This machine does not appear to be connected to a network."); log("With this limitation, you can only serve the clients "); log("who are on THIS machine. Use IP address 127.0.0.1"); - } else { + } + else + { log("This machine has a local IP address - " + IP); log("USE THIS IP IF THE CLIENT IS ON THE SAME NETWORK."); log("For more info, read file 'onlinehowto.txt'"); } } - if (listen(mainSock, 16) == -1) { + if (listen(mainSock, 16) == -1) + { perror("Error listening for connections"); return 1; } @@ -533,19 +711,23 @@ int main() { std::thread(adminThread).detach(); std::thread(kickDisconnectedThread).detach(); - if (LOG) { + if (LOG) + { log("Logging is enabled. Starting to log all output"); std::thread(logThread).detach(); } - while (true) { + while (true) + { int s = accept(mainSock, nullptr, nullptr); - if (s == -1) { + if (s == -1) + { perror("Error accepting connection"); return 1; } - if (end) { + if (end) + { break; } @@ -555,6 +737,3 @@ int main() { close(mainSock); return 0; } - - - From 0c1c1de4a3b288093290a62a0fc943795fe1d327 Mon Sep 17 00:00:00 2001 From: lovetonight Date: Wed, 13 Dec 2023 21:52:20 +0700 Subject: [PATCH 04/15] add: score --- server.cpp | 127 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 114 insertions(+), 13 deletions(-) diff --git a/server.cpp b/server.cpp index b991e2b..649a056 100644 --- a/server.cpp +++ b/server.cpp @@ -21,7 +21,18 @@ #define LOG false #define IPV6 false - +struct PlayerSockInfo { + int sock; + int key; + // Thêm các thông tin khác của người dùng nếu cần +}; +struct PlayerInfo { + std::string username; + int id; + int score; +}; + +std::vector playerInfos; std::queue logQ; std::set busyPpl; std::vector> players; @@ -33,6 +44,32 @@ const std::string VERSION = "v3.2.0"; const int PORT = 26104; std::chrono::time_point START_TIME; + + +std::vector readPlayersFromFile(const std::string& filename) { + std::vector players; + std::ifstream file(filename); + std::string line; + + while (std::getline(file, line)) { + std::istringstream iss(line); + PlayerInfo player; + iss >> player.username >> player.id >> player.score; + players.push_back(player); + } + + return players; +} + +void writePlayersToFile(const std::string& filename, const std::vector& players) { + std::ofstream file(filename); + + for (const auto& player : players) { + file << player.username << " " << player.id << " " << player.score << "\n"; + } +} + + int makeInt(const std::string &num) { try @@ -159,6 +196,50 @@ void log(const std::string &data, int key = -1, bool adminput = false) } } +int getKeyFromSock(int sock) +{ + for (const auto &playerInfo : playerInfos) + { + if (playerInfo.sock == sock) + { + return playerInfo.key; + } + } + return -1; // hoặc giá trị khác để biểu thị không tìm thấy +} +// void writePlayersToFile(const std::string& filename, const std::vector& players) { +// std::ofstream file(filename); + +// for (const auto& player : players) { +// file << player.username << " " << player.id << " " << player.score << "\n"; +// } +// } +void score(int win, int lose) +{ + int id_win, id_lose; + id_win = getKeyFromSock(win); + id_lose = getKeyFromSock(lose); + std::string filename = "username.txt"; // Thay đổi tên file của bạn + std::vector players = readPlayersFromFile(filename); + for (auto& player : players) { + if (player.id == id_win) { + // Cộng điểm cho người thắng + player.score += 1; // Thay đổi dựa trên yêu cầu của bạn + break; + } + } + for (auto& player : players) { + if (player.id == id_lose) { + // Thay đổi điểm của người thua dựa trên yêu cầu của bạn + player.score -= 1; // Giả sử bạn muốn trừ điểm khi thua + break; + } + } + + // Ghi lại thông tin vào file + writePlayersToFile(filename, players); + +} std::string read(int sock, int timeout = -1) { char buffer[9]; @@ -182,20 +263,28 @@ void write(int sock, const std::string &msg) { std::string buffedmsg = msg + std::string(8 - msg.length(), ' '); ssize_t bytesSent = send(sock, buffedmsg.c_str(), buffedmsg.length(), 0); } -int genKey() +std::string remove_space(std::string string) { - std::random_device rd; - std::mt19937 gen(rd()); - std::uniform_int_distribution<> dis(1000, 9999); - int key = dis(gen); - for (const auto &player : players) + string.erase(std::remove(string.begin(), string.end(), ' '), string.end()); + return string; + +} +int genKey(std::string username) +{ + std::ifstream file("username.txt"); + std::string line; + while (std::getline(file, line)) { - if (player.second == key) + std::istringstream iss(line); + std::string stored_username; + int stored_id; + iss >> stored_username >> stored_id; + if (username.compare(stored_username) == 0 ) { - return genKey(); + return stored_id; } } - return key; + return 0; } int getByKey(int key) @@ -231,13 +320,19 @@ bool game(int sock1, int sock2) while (true) { std::string msg = read(sock1); + msg = remove_space(msg); write(sock2, msg); if (msg.compare("quit") == 0) { return true; } - else if (msg.compare("draw") == 0 || msg.compare("resign") == 0 || msg.compare("end") == 0) + else if (msg.compare("draw") == 0 || msg.compare("resign") == 0 || msg.compare("end") == 0|| msg.compare("lose") == 0|| msg.compare("win") == 0) { + if (msg.compare("lose") == 0) + score(sock1, sock2); + else + score(sock2, sock1); + return false; } } @@ -248,6 +343,8 @@ void player(int sock, int key) while (true) { std::string msg = read(sock, 3); + msg = remove_space(msg); + if (msg.substr(0, 4).compare("quit") == 0) { return; @@ -289,7 +386,8 @@ void player(int sock, int key) write(oSock, "gr" + std::to_string(key)); write(sock, "msgOk"); std::string newMsg = read(sock, 3); - if (newMsg.compare("ready ") == 0) + newMsg = remove_space(newMsg); + if (newMsg.compare("ready") == 0) { log("Player " + std::to_string(key) + " is in a game as white"); if (game(sock, oSock)) @@ -579,12 +677,14 @@ void initPlayerThread(int sock) total++; std::string username = read(sock, 3); + username = remove_space(username); if (username.empty()) { log("Error reading username from client."); return; } std::string password = read(sock, 3); + password = remove_space(password); if (password.empty()) { log("Error reading password from client."); @@ -622,7 +722,8 @@ void initPlayerThread(int sock) else { totalsuccess++; - int key = genKey(); + int key = genKey(username); + playerInfos.push_back({sock, key}); log("Connection Successful, assigned key - " + std::to_string(key)); players.push_back({sock, key}); write(sock, "key" + std::to_string(key)); From dcadb985dd768b112c98e4e56da01ebf57ad037f Mon Sep 17 00:00:00 2001 From: lovetonight Date: Wed, 13 Dec 2023 21:52:48 +0700 Subject: [PATCH 05/15] data --- account.txt | 4 ++++ username.txt | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 account.txt create mode 100644 username.txt diff --git a/account.txt b/account.txt new file mode 100644 index 0000000..7e61f87 --- /dev/null +++ b/account.txt @@ -0,0 +1,4 @@ +hoan 1234 1 +ky 1234 1 +h 1 1 +a 1 1 \ No newline at end of file diff --git a/username.txt b/username.txt new file mode 100644 index 0000000..88dd3c7 --- /dev/null +++ b/username.txt @@ -0,0 +1,4 @@ +hoan 1102 500 +ky 2212 500 +h 1010 480 +a 1100 520 From 3fe0a078c57762889944554d9f330c65d75e99c9 Mon Sep 17 00:00:00 2001 From: lovetonight Date: Wed, 13 Dec 2023 21:53:03 +0700 Subject: [PATCH 06/15] update --- .gitignore | 3 +- .vscode/settings.json | 58 ++++++++++++++++++++++++++++++++++ chess/lib/core.py | 14 ++++++--- chess/online.py | 4 +-- chess/onlinelib/__init__.py | 20 +++++++----- chess/onlinelib/utils.py | 60 ++++++++++++++++++++++++++++++++++-- res/img/OIP.jpeg | Bin 0 -> 18268 bytes res/img/back.png | Bin 3455 -> 800 bytes res/img/home.png | Bin 0 -> 800 bytes res/img/homeome.jpeg | Bin 0 -> 24015 bytes res/img/refresh.png | Bin 2131 -> 416 bytes server | Bin 0 -> 217456 bytes server.py | 8 ++--- tools/loader.py | 14 ++++++++- 14 files changed, 157 insertions(+), 24 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 res/img/OIP.jpeg create mode 100644 res/img/home.png create mode 100644 res/img/homeome.jpeg create mode 100755 server diff --git a/.gitignore b/.gitignore index 8faba16..a21d711 100644 --- a/.gitignore +++ b/.gitignore @@ -4,5 +4,4 @@ notes.txt res/stockfish/build/stockfish.exe res/stockfish/path.txt -res/savedGames/game*.txt -account.txt \ No newline at end of file +res/savedGames/game*.txt \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..485e17f --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,58 @@ +{ + "files.associations": { + "ratio": "cpp", + "iosfwd": "cpp", + "*.tcc": "cpp", + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "cctype": "cpp", + "chrono": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "compare": "cpp", + "concepts": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "set": "cpp", + "string": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "random": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "new": "cpp", + "numbers": "cpp", + "ostream": "cpp", + "semaphore": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "stop_token": "cpp", + "streambuf": "cpp", + "thread": "cpp", + "typeinfo": "cpp" + } +} \ No newline at end of file diff --git a/chess/lib/core.py b/chess/lib/core.py index 29ea356..22c60e6 100644 --- a/chess/lib/core.py +++ b/chess/lib/core.py @@ -42,9 +42,11 @@ def legalMoves(side, board, flags): # This function returns wether a game has ended or not def isEnd(side, board, flags): - for _ in legalMoves(side, board, flags): - return False - return True + # Check if the king of the given side is present in the board + king_present = any(piece[2] == "k" for piece in board[side]) + + # If the king is not present, the game has ended + return not king_present # This function moves the piece from one coordinate to other while handling the # capture of enemy, pawn promotion and en-passent. @@ -80,7 +82,8 @@ def move(side, board, fro, to, promote="p"): # This function returns wether a move puts ones own king at check def moveTest(side, board, fro, to): - return not isChecked(side, move(side, copy(board), fro, to)) + # return not isChecked(side, move(side, copy(board), fro, to)) + return True # This function returns wether a move is valid or not def isValidMove(side, board, flags, fro, to): @@ -94,6 +97,9 @@ def isValidMove(side, board, flags, fro, to): def makeMove(side, board, fro, to, flags, promote="q"): newboard = move(side, copy(board), fro, to, promote) newflags = updateFlags(side, newboard, fro, to, flags) + if isEnd(side, newboard, newflags): + print("Game Over! The king has been captured.") + # You might want to handle the end of the game here return not side, newboard, newflags # Does a routine check to update all the flags required for castling and diff --git a/chess/online.py b/chess/online.py index 8927739..a8624d0 100644 --- a/chess/online.py +++ b/chess/online.py @@ -56,12 +56,10 @@ def main(win, username, password, load, ipv6=False): showLoading(win, 4) elif msg.startswith("key"): - ret = lobby(win, sock, int(msg[3:]), load) - + ret = lobby(win, sock, int(msg[3:]), load) else: print(msg) showLoading(win, 5) - write(sock, "quit") sock.close() thread.join() diff --git a/chess/onlinelib/__init__.py b/chess/onlinelib/__init__.py index 63e3a5c..88ae1f2 100644 --- a/chess/onlinelib/__init__.py +++ b/chess/onlinelib/__init__.py @@ -16,6 +16,7 @@ popup, request, draw, + draw_win, showLobby, ) @@ -26,11 +27,9 @@ def lobby(win, sock, key, load): playerList = getPlayers(sock) while True: clock.tick(10) - if playerList is None: - return 2 + return 2 showLobby(win, key, playerList) - for event in pygame.event.get(): if event.type == pygame.QUIT: write(sock, "quit") @@ -72,6 +71,7 @@ def lobby(win, sock, key, load): if readable(): msg = read() + print(f"1_{msg}") # Tai sao lai chay toi day if msg == "close": return 2 @@ -129,7 +129,10 @@ def chess(win, sock, player, load): animate(win, player, board, prevsel, sel, load, player) side, board, flags = makeMove( side, board, prevsel, sel, flags, promote) - + if isEnd(side, board, flags): + write(sock, "win") + ret = draw_win(win, sock) + return ret elif not isEnd(side, board, flags): if 0 < x < 70 and 0 < y < 50: write(sock, "draw?") @@ -140,13 +143,13 @@ def chess(win, sock, player, load): if 400 < x < 500 and 450 < y < 500: write(sock, "resign") return 3 + showScreen(win, side, board, flags, sel, load, player, True) if readable(): msg = read() if msg == "close": return 2 - elif msg == "quit" or msg == "resign": return popup(win, sock, msg) @@ -157,8 +160,11 @@ def chess(win, sock, player, load): elif msg == "draw?": ret = draw(win, sock, False) if ret in [2, 3]: - return ret - + return + elif msg == "win": + ret = draw_win(win, sock, False) + if ret in [2, 3]: + return elif msg.startswith("mov") and side != player: fro, to, promote = decode(msg[3:]) if isValidMove(side, board, flags, fro, to): diff --git a/chess/onlinelib/utils.py b/chess/onlinelib/utils.py index b10eb1e..5b5a026 100644 --- a/chess/onlinelib/utils.py +++ b/chess/onlinelib/utils.py @@ -170,17 +170,71 @@ def draw(win, sock, requester=True): msg = read() if msg == "close": return 2 - + if msg == "win": + return popup(win, sock, msg) if msg == "quit": return popup(win, sock, msg) if requester: if msg == "draw": return popup(win, sock, msg) - if msg == "nodraw": return 4 - +def draw_win(win, sock, requester=True): + if requester: + pygame.draw.rect(win, (0, 0, 0), (100, 160, 300, 130)) + pygame.draw.rect(win, (255, 255, 255), (100, 160, 300, 130), 4) + + win.blit(ONLINE.WIN2[0], (120, 170)) + win.blit(ONLINE.WIN2[1], (170, 195)) + + win.blit(ONLINE.OK, (145, 240)) + pygame.draw.rect(win, (255, 255, 255), (140, 240, 50, 28), 2) + + else: + pygame.draw.rect(win, (0, 0, 0), (100, 160, 300, 130)) + pygame.draw.rect(win, (255, 255, 255), (100, 160, 300, 130), 4) + + win.blit(ONLINE.WIN1[0], (120, 170)) + win.blit(ONLINE.WIN1[1], (170, 195)) + + win.blit(ONLINE.OK, (145, 240)) + pygame.draw.rect(win, (255, 255, 255), (140, 240, 50, 28), 2) + + pygame.display.flip() + while True: + for event in pygame.event.get(): + if requester: + if event.type == pygame.QUIT: + write(sock, "quit") + return 0 + if event.type == pygame.MOUSEBUTTONDOWN: + if 240 < event.pos[1] < 270: + if 140 < event.pos[0] < 190: + write(sock, "win") + return 3 + elif event.type == pygame.MOUSEBUTTONDOWN: + if 240 < event.pos[1] < 270: + if 140 < event.pos[0] < 190: + write(sock, "lose") + return 3 + elif 300 < event.pos[0] < 350: + write(sock, "nodraw") + return 4 + if readable(): + msg = read() + if msg == "close": + return 2 + if msg == "win": + return popup(win, sock, msg) + if msg == "quit": + return popup(win, sock, msg) + + if requester: + if msg == "draw": + return popup(win, sock, msg) + if msg == "nodraw": + return 4 # Responsible for showing the online Lobby def showLobby(win, key, playerlist): win.fill((0, 0, 0)) diff --git a/res/img/OIP.jpeg b/res/img/OIP.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..6cfd5d9ffe340ec41aacd5227a329f47edd2f718 GIT binary patch literal 18268 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 Hoge=f9t>UZ literal 0 HcmV?d00001 diff --git a/res/img/back.png b/res/img/back.png index 512da08c2ede4db193a9b286e2bd131863495a08..47b4cc42675478b6b6c9a0d737d19211822e330a 100644 GIT binary patch delta 788 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 diff --git a/res/img/home.png b/res/img/home.png new file mode 100644 index 0000000000000000000000000000000000000000..47b4cc42675478b6b6c9a0d737d19211822e330a GIT binary patch literal 800 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 z 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 literal 0 HcmV?d00001 diff --git a/res/img/refresh.png b/res/img/refresh.png index 2ea33aaced3cecb0c6b3c9abac8a3d47675fad88..4863e6cba24bafc784703206f8b938444598a9cf 100644 GIT binary patch delta 401 zcmV;C0dD@&5TFB)8Gi!+002a!ipBr{07y_wR7Lps`1<<#At52FtE>P2|NQ*?^78Tk z008#(_Vo1h=jZ2pdwbd0*+@u8-rnA4XJz0LNz{(weBNkV=6Sg*h4%=Rk^|027Znr!n~&neZLp&QC5`FXC--QxLQO z6i=?tC5YrAdN&fc0Ow#&xq*CG$iD5K1Si01aFYhEc9IJnZUtysoIO>M^_DnP0Mu)Z z&c1L0P-1NXuzxEq+f@6KRsijtIRw>JqKkC4wmti~sR0xX)HPsq!@Sl&j`(4hL{VJa zyuG6ul)e`P(d#%g3L>}sHmK3~vW?acM~L8!@d~I@R9oj@QW)r378*YDAXiWPbe!VXf3Lds93`!^f015yANkvXXu0mjf!sosy delta 2129 zcmV-X2(I^_1Je+Y8Gi-<0047(dh`GQ00eVFNmK|32nc)#WQYI&010qNS#tmY3D^Jt z3D^P0pt-F8000tnMObuGZ)S9NVRB^vWqN06W-eoIZJ@)mSO5SAmPtfGR9J<@S7~fi z*A@QmeakE!FSB@=G2pR`Eo_4c1d>o_Kv5c^K-;vH69P>UrGH6^5lB&`NR{%#ZS$v9 zrAmZ^09jg^kYLgRRcI4|lGKo}nFIl*)D+h&US@31zQ1?x?T>j6#)Gl>Q{{|~-n^^( z-uIpFo_p?jz&C8b*{fyMMf-R8?g~=N!pYHa!%K#jcOU65)9ETq47^o!R+x_ubyr-rgl$b?1Ki z)f+$FZH~!zo7~#orTS({uiw{H_5EcF{2seife-?m3os!d1i(3LbNp2{iK050(HeUD zgWvH~92kx#a=$zN+EecUL=?U=;3eXn$?*Qfp_?BWqU9TjKYYE1Uyd z0NfyuzZ&-j8O8-9N+3%Fmj}kuM|=AF{5mbvwwRrNlX!i7L8qvQH;ln29!TqehaRiUKXQz}(C zOBB0JMNSvc1fM`Eoz-zOoozZZp z`*ODLW=LeSOwo0&3y@Pnh<{Kb;w4t~q4HAe1Ai^`o|^ehHEye_Ad<=q0v_gQIr>V5Gb{&3uK96`~EYztR|GQ5(f?GiD99$HDB&rTbSXy z0ATRBKQ$e{FxcsJJC;4vHmjBsO1a?qgcU$MohKwanamINv5Q-i@v2)#|+w1i1^?d-=&fD~!b7Va6cH8Xghvzg@yG9~e=z>ESKL8+v zfKIgpT-Mx!!K5>lV{yN)s#l^kIv$HTc$OWV47|`T>{u5D@Plke*W&}j;k{2jGS}HR z6wfEH0ZIr^oCHNnAe6zem}P!r-JTMgI)6kcjmmM^O;vhvIs&FCD%r5?zB>C*D1B>- znnnphac!7DK&0&f#gUDQSXjS`D5@n9&l%C* z#v=d(otOj@2%O&Y!|`uz+Iwt<*Z#@YCmOT&7&HK2+17oV7q!gT*j!&(lE~<&D1T95 zW*#N^=#8-n3fxf%?|=T!PXbga9;ZZ5MX^*7!6eQB&RO57o$LM%0E;``sZn8jOID~8 z{En?Y!36ln$6j6Y>q!*=fO?;6*XpHBmHEj6;?_D6P)d-~81^5%7>mdFx6NnHyuM)s zz^ds~YWw+~DjTD#Cj?eJsj|YJD}QxZk>LbcPLUH5G)T}uQCecb3U!-~c)S^6&oP z#kwQh+;cTl4ghwmvJ`?hPD`M86;+vnGaVltyF74W`%|w>2Mz%E6%a{cet(X$mJAoo z-IqqafU=QNnwpkCu>x6*fyy%0Jl59m=r8_yc45Z{&C}tZm%p5;3pSSuG!usA4?nxI zNwq3F2q0~)Fk}?A?8+fSY^c1TE5|60$0Zqh^2Cv-QcTk ztgrsjmH&<`FWdaVU?v$o7!M40XIXs6Rll&sEBSx9qQ%uR7)X*`f9vo!L^|Nae-Jg8cc@dzub)g1)vHcNU2T1i3>N9N4n1+ z^7<+tS-!ZbT9GM9=NPzAUh_w-X4D87E|06+RhcKRGXcgqbOtca!8s5Og%jCCWLxk4 z7i0j;a7YE<766t-D}UE-p_C|xj-Kf{{r2;(1V*lZJj!ZXZK_h{^ORdOE}-eRdqIwT zZ>Vztjd5s9K<6CH=otYZ7K>*h!Qem7zV)-;;CA&D0Jup&2A}{?D%-yI(pQ(RojJL? z<0XJ8na~Y(NCSSl6Aa`kWXdq>JXK7|GV{dIBQ&vYHbZ;O~PDdbPZ*F#Fa&%>KEGgq700000NkvXX Hu0mjfl!pb8 diff --git a/server b/server new file mode 100755 index 0000000000000000000000000000000000000000..e6b57ca209beeaa1954309ff9d31e971683b8453 GIT binary patch literal 217456 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%0AZg4gDCAbxAx)i^GMGG0Hd}9v1jBx^| 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�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⁢g<37et0MaRv_>jP>;U-R(I3CP_)+>>| z&`;PDbZcMH2_pe}i~oqOhR*R-c2MkqgDcN#UPfO387R7Rana75!T881kK1E0W6K}CoZ%>jc(d7-Ma!1;+y~c>VvHt@mQybWplNbPaBZQ|jJFW| zdb^x*1;lL1+GtTWQdQt$226G-6>tyW8PWSq+)W{YwoqHFz-k3ot=GD^YLm1}lkBMu zmF%@1EGfov@Olw6fo};D1{a(}0SIDv&{T**wa|fJ9Eu;v5OZ{f2+{4eNHvRB8jMD}wb0!?Ut`cWqpGBayMM{x#y(mSAAhqS<{n5?L-hlxS)HYwJ zKC8JbOK-P}Pj!;@!G_|}68BuafC$8ksS5KDXrj+Q?lQbOhmMC?aa#xJkAX42ZTpUUCh&6Hg zgU3~ot+QgM{3%QWp^jzxk|nM;Yl-HO6a%@=VOfr1<0iu~+iKW!C8W(7u+eOffadxt zK)F6`!p|qTZr^6)zE$XE87cqiHylqnJiS8gw3;zh^vZ##)~QG{^buIo?M9^@nVkbC z#+6F*#*={w!qkb`0g62IUm6prrL4_fbg{3JcZH-Ax#($+?qFd^&f&!G&dFK@y5Fb8LF*~+I1E~H&NNq+d?a&4eE9xM3bkqgs>~i zUdobJmIZFTh7UV!Lbi~_QgE!YL5_=6)9^t?!gsuC1nIf<{R&E@Jus8%oZtu;s=ZnC z=cO+2X11wKst@TITWg1^wUutzN-?c#kRt2w9Abbz)wncJ zq2#a$?PsN{$Pt|t-Ha*Bg^ijdP?Bv!*Q2SQ&0j)R)xuml7_&0?Z+o&ba<61KSLSBp zMapZv8&}i1Ow!)4Sb$iBpgb~vKxVSCg8OO~{1rDWVmIfdZT%{qhsB%v2#N4nX&{lK zyJcj<$IXoOsn$naIs-W*Ju*N*67k8Nn4fC27E@20@-VE>%*~SUo`d52$`prY3jnp5 z;DL!O0ARt8;9QX5*ExiO`Jg6kZ7 z<#+8Nr%ZN+5mb~`Ztyxb7O0LwSjF+x?9>1b)`FaMJyY2MX6O6O3C+ic;slOFO0o(9 zOIkYm43;c@R#QavF@w!=8r)b(HZxJjzURDnWQ)ZVnDzL2ehVyDjsqa7j`*?B){m0@ zIys+~dfzOa3`C0Ref4?^8HhNcLAYhfNP8R&d)waHOa#fGGUc#tc0s33I84 zD?`bd9AB!(j)X|E}bavMNW;W9A*-;z%yZIqr@4Bz1YQ< z7atAwS1UM4h&oc~^GOLUm=c|T6M{r>6umzf5 z4eJYMhYJGQzN370x3W|)&6g{k<-*9q;Uu-FrS1o#equL?aNzpd1} zg%NW@+6aCfS!&@=`lVB=7Dl?YL--Tf`5{`js782Uq_&Lv8c=K{SYAMH`WJ?&Rs;4E z1b9cptWB?oOtdR_8R|oSr+#P}=+aEN(g-mY_l{HUg%K)|j$lS%C_hg@FOR^#qolVD zkK|wU^Qi*Y4{B@w{5t-44F2i!TjY8D9JL$c_hX#DC-Jxa{IWc+pU-sKAMN~IcAkHQ zJg=V{o%ZhY&&T&adHCU$&i`HVyngPI=N~Pf?))o&{|f%;^FNd4_4D_S;|J*-Y3=m+ z4Gb=X_@qbl`D;$#FZ6TwNzzb0-1WZ{@Q1DW|Kn-gP(P282Xy{Aj()xb&3|b<|E<&c zdHp;=o~QZKJazuus!+HNztEa$e?K^bztPV9yZzL1E+`q^mxPQQK@|L6&Q{zX^t^ZHqT0=0^N z-0}YzU)j&!c0E6@pQCf}v-F$dk3zqTU+m|9_OJZBe!ljx+LAxr@qY^N_ko$4hTgTVWN21yB*7F^Cw&T&``78W*JWnI(_#5TU+H%ZS3(k9LEoAc!;0BTRS$rrRRStn%U1s0}4i* zA Date: Thu, 14 Dec 2023 19:10:41 +0700 Subject: [PATCH 07/15] update: draw, elo score --- server.cpp | 142 ++++++++++++++++++++++----------------------------- username.txt | 6 +-- 2 files changed, 65 insertions(+), 83 deletions(-) diff --git a/server.cpp b/server.cpp index 649a056..2f1ffb9 100644 --- a/server.cpp +++ b/server.cpp @@ -21,12 +21,14 @@ #define LOG false #define IPV6 false -struct PlayerSockInfo { +struct PlayerSockInfo +{ int sock; int key; // Thêm các thông tin khác của người dùng nếu cần }; -struct PlayerInfo { +struct PlayerInfo +{ std::string username; int id; int score; @@ -44,14 +46,14 @@ const std::string VERSION = "v3.2.0"; const int PORT = 26104; std::chrono::time_point START_TIME; - - -std::vector readPlayersFromFile(const std::string& filename) { +std::vector readPlayersFromFile(const std::string &filename) +{ std::vector players; std::ifstream file(filename); std::string line; - while (std::getline(file, line)) { + while (std::getline(file, line)) + { std::istringstream iss(line); PlayerInfo player; iss >> player.username >> player.id >> player.score; @@ -61,15 +63,16 @@ std::vector readPlayersFromFile(const std::string& filename) { return players; } -void writePlayersToFile(const std::string& filename, const std::vector& players) { +void writePlayersToFile(const std::string &filename, const std::vector &players) +{ std::ofstream file(filename); - for (const auto& player : players) { + for (const auto &player : players) + { file << player.username << " " << player.id << " " << player.score << "\n"; } } - int makeInt(const std::string &num) { try @@ -219,26 +222,29 @@ void score(int win, int lose) int id_win, id_lose; id_win = getKeyFromSock(win); id_lose = getKeyFromSock(lose); - std::string filename = "username.txt"; // Thay đổi tên file của bạn + std::string filename = "username.txt"; // Thay đổi tên file của bạn std::vector players = readPlayersFromFile(filename); - for (auto& player : players) { - if (player.id == id_win) { + for (auto &player : players) + { + if (player.id == id_win) + { // Cộng điểm cho người thắng - player.score += 1; // Thay đổi dựa trên yêu cầu của bạn + player.score += 1; // Thay đổi dựa trên yêu cầu của bạn break; } } - for (auto& player : players) { - if (player.id == id_lose) { + for (auto &player : players) + { + if (player.id == id_lose) + { // Thay đổi điểm của người thua dựa trên yêu cầu của bạn - player.score -= 1; // Giả sử bạn muốn trừ điểm khi thua + player.score -= 1; // Giả sử bạn muốn trừ điểm khi thua break; } } // Ghi lại thông tin vào file writePlayersToFile(filename, players); - } std::string read(int sock, int timeout = -1) { @@ -256,10 +262,12 @@ std::string read(int sock, int timeout = -1) { return "quit"; } + std::cout <> stored_username >> stored_id; - if (username.compare(stored_username) == 0 ) + if (username.compare(stored_username) == 0) { return stored_id; } @@ -326,13 +333,16 @@ bool game(int sock1, int sock2) { return true; } - else if (msg.compare("draw") == 0 || msg.compare("resign") == 0 || msg.compare("end") == 0|| msg.compare("lose") == 0|| msg.compare("win") == 0) + else if (msg.compare("draw") == 0 || msg.compare("resign") == 0 || msg.compare("end") == 0 || msg.compare("lose") == 0 || msg.compare("win") == 0) { - if (msg.compare("lose") == 0) + if (msg.compare("resign") == 0 ) + score(sock2, sock1); + else if (msg.compare("lose") == 0 ) score(sock1, sock2); - else - score(sock2, sock1); + + // if (msg.compare("win") == 0) + // score(sock2, sock1); return false; } } @@ -372,7 +382,6 @@ void player(int sock, int key) } } } - } else if (msg.substr(0, 2).compare("rg") == 0) { @@ -442,7 +451,6 @@ void player(int sock, int key) rmBusy({key}); } } - } void logThread() { @@ -578,7 +586,7 @@ void adminThread() log("Already in unlocked state."); } } - else if (msg.substr(0, 5).compare("kick") == 0 ) + else if (msg.substr(0, 5).compare("kick") == 0) { std::istringstream iss(msg.substr(5)); std::vector keys; @@ -601,7 +609,7 @@ void adminThread() } } } - else if (msg.compare("kickall") == 0 ) + else if (msg.compare("kickall") == 0) { log("Attempting to kick everyone."); std::vector> latestplayers = players; @@ -741,65 +749,39 @@ void initPlayerThread(int sock) int main() { int mainSock; - if (IPV6) + + log("Starting server with IPv4 (default) configuration."); + mainSock = socket(AF_INET, SOCK_STREAM, 0); + if (mainSock == -1) { - log("IPv6 is enabled. This is NOT the default configuration."); - mainSock = socket(AF_INET6, SOCK_STREAM, 0); - if (mainSock == -1) - { - perror("Error creating IPv6 socket"); - return 1; - } + perror("Error creating IPv4 socket"); + return 1; + } - sockaddr_in6 addr; - std::memset(&addr, 0, sizeof(addr)); - addr.sin6_family = AF_INET6; - addr.sin6_port = htons(PORT); - addr.sin6_addr = in6addr_any; + sockaddr_in addr; + std::memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_port = htons(PORT); + addr.sin_addr.s_addr = INADDR_ANY; - if (bind(mainSock, reinterpret_cast(&addr), sizeof(addr)) == -1) - { - perror("Error binding IPv6 socket"); - return 1; - } + if (bind(mainSock, reinterpret_cast(&addr), sizeof(addr)) == -1) + { + perror("Error binding IPv4 socket"); + return 1; + } + + std::string IP = getIp(false); + if (IP == "127.0.0.1") + { + log("This machine does not appear to be connected to a network."); + log("With this limitation, you can only serve the clients "); + log("who are on THIS machine. Use IP address 127.0.0.1"); } else { - log("Starting server with IPv4 (default) configuration."); - mainSock = socket(AF_INET, SOCK_STREAM, 0); - if (mainSock == -1) - { - perror("Error creating IPv4 socket"); - return 1; - } - - sockaddr_in addr; - std::memset(&addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; - addr.sin_port = htons(PORT); - addr.sin_addr.s_addr = INADDR_ANY; - - if (bind(mainSock, reinterpret_cast(&addr), sizeof(addr)) == -1) - { - perror("Error binding IPv4 socket"); - return 1; - } - - std::string IP = getIp(false); - if (IP == "127.0.0.1") - { - log("This machine does not appear to be connected to a network."); - log("With this limitation, you can only serve the clients "); - log("who are on THIS machine. Use IP address 127.0.0.1"); - } - else - { - log("This machine has a local IP address - " + IP); - log("USE THIS IP IF THE CLIENT IS ON THE SAME NETWORK."); - log("For more info, read file 'onlinehowto.txt'"); - } + log("This machine has a local IP address - " + IP); + log("USE THIS IP IF THE CLIENT IS ON THE SAME NETWORK."); } - if (listen(mainSock, 16) == -1) { perror("Error listening for connections"); diff --git a/username.txt b/username.txt index 88dd3c7..7d11638 100644 --- a/username.txt +++ b/username.txt @@ -1,4 +1,4 @@ -hoan 1102 500 +hoan 1102 502 ky 2212 500 -h 1010 480 -a 1100 520 +h 1010 502 +a 1100 498 From 3bcc8eb91b4eb6695e050b94b2950bbf9a25d5d1 Mon Sep 17 00:00:00 2001 From: lovetonight Date: Thu, 14 Dec 2023 19:13:13 +0700 Subject: [PATCH 08/15] update --- CHANGELOG.md | 105 ----------------------------------------------- LICENSE | 21 ---------- VERSION | 1 - onlinehowto.txt | 107 ------------------------------------------------ server | Bin 217456 -> 217456 bytes 5 files changed, 234 deletions(-) delete mode 100644 CHANGELOG.md delete mode 100644 LICENSE delete mode 100644 VERSION delete mode 100644 onlinehowto.txt diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index baa3b73..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,105 +0,0 @@ -# Changelog -This is the basic changelog for My-PyChess. All dates are in dd/mm/yyyy format. - -## What's new in Version 3.2 (2/9/2020) -- Added a Back-Button, to go back to the previous menu. In older versions, the quit button was used for this purpose, but from now on a dedicated button to go back is there in the top-right corner. The quit button will now be used only to exit the app. -- Added a game timer to multiplayer mode, with a new menu to setup timer. -- Fixed bugs and made many additions and improvements to the client-server in chess online gamemode. -- Made optimisations to core chess module and gui module. -- Added a chess hotwto. -- Minor improvements to game sounds and textbox. -- Upgraded preference menu and made the loadgame interface more robust. -- Several other minor changes and improvements made. - -## What was new in Version 3.1 (14/6/2020) -- Added basic sounds (beta). -- Added draw and resign option to online gameplay. -- Added a simple "About menu". -- Added compatibility for python v3.5 (server.py still needs python v3.6 to work) -- Made many changes to GUI throughout the app, including more prompt messages. -- Upgraded preferences. -- Fixed a small issue in move animations, added a new startgame animation. -- Fixed a bug where undo in singleplayer after game ended would give weird results. -- Fixed many bugs in online mode (server), made server robust to TCP packet loss among other things. - -## What was new in Version 3.0 (23/5/2020) -- THIS WAS THE BIGGEST RELEASE OF MY-PYCHESS EVER RELEASED. -- The code came with MIT License instead of the GPL-3 which came with v2.2. -- The code was revamped, fixing minor bugs and MAJOR PERFORMANCE IMPROVEMENTS. -- On my PC, a chess match with v2.2 ran at 22 fps, while this upgrade allowed it to run at over 200 fps if fps was not constrained. -- Online play was added. This featured a ONLINE LOBBY and support upto 10 people to play chess(read more in ref/online.txt) -- Singleplayer saw BIG UPGRADES: A Good Menu, ability to play with a decent PYTHON CHESS ENGINE. -- Now, you can play against STOCKFISH CHESS ENGINE. My-PyChess will act as a GUI interface to give you this singleplayer mode. -- Included with this release, a good menu for stockfish and stockfish install/configure menu to help with installing and configuring stockfish with My-PyChess. -- Code was made more easy to understand with code comments throughout the code. -- EnPassant, Screen flip and Undo moves option were added. -- UI for loadGame menu was revamped, UI for preference menu was simplified. -- Save/load games with a new way of storing gamedata. - -## What was new in Version 2.3 (4/2/2020) -- This version never made it to github, I dropped it while working on it and started to focus on v3.0 -- This had included a few minor GUI changes. - -## What was new in Version 2.2 (22/1/2020) -- Minor performance upgrades. -- Further upgraded preferences. -- Upgraded loadgame menu (with delete games option). -- Minor changes made to the interface. -- While saving a game, it informed under what name the game was being saved. - -## What was new in Version 2.1 (11/1/2020) -- The upgrade optimised the game a bit, fixing a bug. -- When you clicked a piece, it would show all the available spaces it could go. -- The upgrade added a new preference menu where you could customise some game features. -- The upgrade added background animations on the home menu. - -## What was new in Version 2.0 (7/1/2020) -- Revamped the Home Menu so that it looks better. -- Revamped and code, optimised it. -- Fixed Bugs. -- Made some changes that ensure that it can work on all platforms. -- Added Save/load game features. -- Added highly basic SinglePlayer (random move generator) - -# Changelog for older versions - -Below, I will mention about the initial development of this app. At this state, the game was unstable - It lacked many features, had performance issues and lot, lot of bugs. Most of the versions given below have not made it to github. - -## What was new in Version 1.5 (26/11/2019) -- added choice for pawn promotion -- added piece animations -- added some popup messages -- upgraded home menu -- fixed bugs - -## What was new in Version 1.4 (9/11/2019) -- Added a home menu -- Added placeholders for future upgrades -- Basic compliance with pep8 - -## What was new in Version 1.3 (2/11/2019) -- coding optimisations -- Checkmate and stalemate report feature added -- fixed bugs - -## What was new in Version 1.2 (24/10/2019) -- Improved move validation, stopping king from moving into attacked areas. -- fixed bugs - -## What was new in Version 1.1 (21/10/2019) -- added castling, pawn-promotion -- This version fixed a few bugs, but introduced lot more bugs - -## What was new in Version 1.0 (19/10/2019) -- Added Move validation for highly basic chess moves - -## What was new in Version 0.3 (17/10/2019) -- Added a few more basic utility functions. -- Fixed a few bugs. -- Minor changes made to code. - -## What was new in Version 0.2 (16/10/2019) -- Added GUI for pieces, implemented basic piece logic. - -## What was new in Version 0.1 (15/10/2019) -- Added GUI for the chess board diff --git a/LICENSE b/LICENSE deleted file mode 100644 index e1f02ae..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 Ankith(ankith26) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/VERSION b/VERSION deleted file mode 100644 index 6d260c3..0000000 --- a/VERSION +++ /dev/null @@ -1 +0,0 @@ -v3.2.0 diff --git a/onlinehowto.txt b/onlinehowto.txt deleted file mode 100644 index 251f882..0000000 --- a/onlinehowto.txt +++ /dev/null @@ -1,107 +0,0 @@ -=============================================================== - Online Gameplay - --------------- -=============================================================== -Online Gameplay consists of two elements, client and server. - -CLIENT: It is the machine that runs My-PyChess code. -SERVER: It is a machine that accepts connections from different clients(upto 10) - -Back when I was actively working on this project, the networking element of this -app was made with security in mind. I had not used the python "pickle" module, -which is normally used in such applications. This has security risks associated. - -The server keeps absolutely NO DATA of any user that connects to it. -No names, accounts, emails, IP address, Location - nothing. PRIVACY IS RESPECTED. - -The client and server speak over Raw TCP protocol with no sort of encryption. -This means that any bad guys may read the messages that the client and server -send to one another. But the best part is the fact that the client and server DO NOT -EXCHANGE ANY SENSITIVE DATA. This means that the information is practically useless -for the bad guys. So they will not invest their time and efforts to do such things. -If they did so, they would be in major dissapointment. - -The public global test server is not being hosted anymore. - -========================================================================== - SELF-HOSTING MY_PYCHESS SERVER -========================================================================== - -HOW TO RUN SERVER: -================== -Run server.py, as simple as that! -Python v3.6 or above has to be used. - -HOW TO CONNECT TO THIS SERVER: -============================== -The server and client must be connected to the same router. When the server runs, -it will message it's IP address in the shell. Enter this in the client's menu. -IT IS TO BE NOTED THAT THE IP ADDRESS IT GIVES IS THE PRIVATE IP ADDRESS, NOT PUBLIC - -If for some reason, you want the server's PUBLIC IP ADDRESS, -I have covered that part below. This will not be required for most usecases. - -HOW TO CONFIGURE THE SERVER (FOR ADVANCED USAGE): -================================================= - -On top of server.py, there are two constants - LOG and IPV6. -They are set to False by default. -IT IS RECOMMENDED YOU DO NOT CHANGE THESE. -But if you really need to, then you can change those. - -If you set 'LOG = True', the server will log it's output to a file. The file -will be named by the current date and time of logging. This feature is not -recommended because it will consume more CPU power and RAM than when it is not -logging. - -If you set 'IPV6 = True', the server will start in IPv6 mode. This means that -any client that is using the IPv6 protocol can connect to the server. Both client -and server must support IPv6 for this to work. By default, the server opens in -IPv4 mode, which is the protocol that is supported by most of the systems of today. - -IPv6 is a more modern protocol, that will take time to be widely adopted because -most of the internet runs on IPv4. - -MANAGING THE SERVER WHILE IT IS RUNNING -======================================= - -When the server is running, it is constantly messaging you whatever is going -on. You can enter commands to the server. - -Commands are listed below: -1) report - Gives the current status of the server with useful information like the - number of threads the server is running, number of people online etc etc - -2) mypublicip - Enter this command to know the server's public IP Address. - -3) lock - This will put the server in a "locked" state. After this, anyone will not - be able to connect to the server. This will not affect anyone who is - aldready connected to the server. - -4) unlock - This will "unlock" the server, the server that is locked will be "unlocked", - then anybody can connect to the server. This is the default state of the - server. - -3) kickall - Kick EVERYONE connected to the server. - -4) kick [ ...] - Kick a particular player (whose id is ). - Can specify more than one id. - example: 'kick 3294', 'kick 9492 2839 5138', 'kick 9327 4392', etc - -5) quit - Enter this to stop the server and quit. Recommended way of closing server. - -IF YOU WANT TO CLOSE THE SERVER WHILE IT IS RUNNING, ENTER "quit" IN SHELL. -TRYING TO FORCE CLOSE THE SERVER MAY GIVE UNEXPECTED RESULTS TO CLIENTS -CONNECTED. - -WHAT IS AN ID, WHAT IS A KEY? -============================= -When the clients connect to server, the server issues the client a unique -4-digit number as their 'ID' or 'key'. \ No newline at end of file diff --git a/server b/server index e6b57ca209beeaa1954309ff9d31e971683b8453..928a8ffba7a7c81b096e28c11bf582e54c3c0a8a 100755 GIT binary patch delta 47185 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 EzawErssI20 delta 46870 zcmZ^s34D#m*TDNG}(9f@dS~b?R(#H!#PWgCWH`a`~4WBPdZPZfLhwfet|2|*&!^QbutowQP!^KgF zr+<3UZr`#BInKU^FUaQ2WizF=QBi6suFB&-_r2?Sz?&s#J`KCFrrPL+UOvNz%SsWI zRME&$HdUOo6%CuQW!f>+Ii%N_P_9l>?GZ`~=1C3D%asQ13u@H84vX9u*V}=y544$m zMzXHj#Xe))mY5VJIz1)irNt7RnrD78Q|l7*5u2c0i0Q@pX#stcy;mSe0cL;I-TJhfP9PtZ&Q!_|^``wkB*slb+KIYWJFDDl)=RBm*7ugvIl zkL?}|YJZ~c{(E10H1wj^sA+nI)Kk&v#vcw)d7gQic5T?>+WTiycTrcP)1u5IEtdI$ z`yo(yl_V>*hr?@obbp_83@DINF_?d5Ya7S;X`M#QW$$S@BU%J+7j0AGE##S~Bx-zH zisnFcKN7wWWson>d`AX&IicFp)R;Q=gG&|Fd0)Fd(kto*v`o&O^(i{cgn=2Tnn4=9 z%5)+`G5=2|MYFZ6k^Y{~&~$D2UNo&>q&I7;{X4Q28=%z~)r(csCXHIgLbZQJ)iPC@ zEIf9eI&6I(woic>A~*4Gnymrn;p|(`draB&;UJU09G}}vs_VH+>ZiItt?!-@D8 zRS+##2E!OmMdbxze0#{iHlo`1)@&m)X*`AodC{rIqf>82r=B;jm`RpLorWs>qi7Xz zc|be=u4jWmWJB73J0e`{)$+=Zi7?#d=Vvf>nMpdE)Ruy^X zYnnE;LDvhv3t_Bo;+8vQrp?xNhpZ;M&oj>_RdON=FdFlHO&u5VR`*@x59|o~t`I+6 zc-pp0WXXJ~U81)(Zd`45hZz)!Wp;^u+JYvzKk4nPdM{~}$JcPGyOVm$ zGZ#+Rnvbu=)@k34>*)4YxvFhM)sM1d)l;%+iS}@Or2F3IH1YvSGH!)S?`mD&tJ^sj zK7cTnl)D#*bS9-8MS4I|S_*AUhz`gm{VU3$#G_j!>O|spU-cuJOJee^dtbr*8eGn0im6q8N(ZB;9!(`jaRMc2S(W>^D*e!nXCJsANE9T1pKu z6bj}sm}yZP>D#}FG!*5Te-Y^v*=LHlT%<{$@FtyMsVN~PRnWjLcGsNZeA!N|Zd_wl zS?e2Do0+s(aRH`3r-~?yMb*LRI4#D29+Tu$zv^SPwim4RSZA3_(uC@N~Pw2W!)Zy)caD5$XX85Va+ zurOIRd3x1iS#p>pma56?alOW!Z}V2NE6WJn5)`|Y0cRy?c-@4>^trAX%VI;r2_2G6=`GIYHxHZ17Lek>K6vd zF~&1n0Ms2uB^0j0Xt4u5D7KF{PS-}}#)`CUiS8ASqa|vR4oY|Nvn%$sDYmbJHKi20 zmsM6*E(MyJv~+552>XE|msCfw&R5Gx#USLEX2P*F|7hV%BhbZDw1@HDEhF`nMR5Sj zS6{Y|C{?7bAu>X-g-E;>KE1Z7cMsvJBwP(hH5T_`3nbE#(_)i=2{O(dMPm^w-;Wl} zG7r(leFP0fzrWIrM30^S{UXvyWY1qBEo`UkRb`LecohG(z-!pEhz z=uURa4i6@?%f?lk2X=2{U!t@vmQHJinO!{_Vq?%xJJ~IK)AN!xdS-*LI^D{|;(B zY1^0=Uclb$q3xRGsCM{;wpG)sD6v0(j}S~vX+Sfqk0?a8v`+dWu`QLJ^f~|8X6T+c z^~pOzgIJ~GOFh-y$tS(GpnfW2oVF2dLV~j?7dD_<_{qApJo(qAyRGd;A&yXH@3rM{ z>65av-$PuGqJ$^LiGHP*he#X5-h~+stf0HZ4V*Oq%bUx~!!ZF(;^DBe7c0INjr< z=tx9RC~UVzkQis}^V&yq8npS<8tgVd&ahiIt6v$ro7hX@htjQaz!Gsgm42|snnVxP;!c@oF8NWU#V{X>v@MJ(T-46aZR(MT-Nm{&=IUG2r<%*WK(+W{;+cI1Dr*f=RfCA*1TNV?^@{YIVPc*kgclCoGwA~9mJ*T45{n_Pe3=uUVMGZCh2W?Se zb**lqtM*`?qZ)8t+m-0)``1}0UxwG5<(i&9OI}qEoh9wQTc}po*K2)rmhALhi3lq6 zdcAn4R1zhWs7=mlNeetx579=g`IEK>xj)Z{e)7*yKP?WPfua$33M^+$Cds2-moGgd z`p>}J7vk+>`DTNq^3FoJZ(~xD|GFQmi(0Hi+qKZk_wH#_N_)N1Pp8RF_AOQN+>A>1 zyV-3_qR?Na1)AK|_fLzNGikj{UV&XvPk&ThMvE*h>U8OsYfH6cQ)ibCAKO+}rE}UP zQ_$divF)TBd_}GE%poHbrEm)^uyo^pE9nxKXRb}>B(1R0FM0hjK-9US*QqJaQoTZ+ zIp#;LS5mE>8!(l&#ijSqAP+ZpJZY=DXx}B( zWj|=Qlf0@`M`eAe&yh4&_(5}8)FoinP%_*0_VpJrGGj}df@zCM4Q~QN6QX*=g%dVo;X3?gI1&u%5)N?vqXBeFiVU?b6w)t@qHRenm#ak zyFDXA&df3@NEM^FUll{Q4ri=5^^86AYA3ZJO9I$aZSIl)wfYGy$W&b|`JO_|rSN;3 zC!3zt&MyfzNg0m4Dzpc#i2bkN{E zP1WSD9LOiejvq^H6X`}IVk$yxx}w40c1i#$$sI90U6iDIRJFVOcyH}dx>tm}>)1BV zqT|A3sVL8ULu8Gomdl{aWunAmcCZTg!ki|K74`ZCG;ysfX{ zW&7%dY?{X)Qj8au7>Rs{3Turh^9Yw>3UMh8f*AD_8gY8M2>o=AdiE}N;%OJSt_%NUOHE1g%PMcNoGZ# z$PPo+JpPnCSW6A8K#o9~AT3OHNsyM*qfT?)Wa@i%Q}^~HQ%9bV_xM=dnBQ{Cn0iiT zt;QTKTe_20zcol!OH*8!y^H#h)J3;GWxE((R>>fdHAXCxK~e?JRZEH)1!@IX;p`-R zyIOuqyO3VpWy^h=x1V$t-aaqy?A9UNJu0lSHv5MbR$fXBv|z0$g->u`Aq11sWPcOr z8i-dE)CpcfiN0vDW$5Ln=s9Rft^qe1NW1IOvvdi=XK7SjYq`|D)j+5rn>%4ameJEj zZ!rye#5=1}bJ$EXEv?ZhRL-QB|Mb> z+fh^#Ua+m$_V#M+yOXnq_thUH^!c7}gu0V~j-VMLvx;8YU1o)8C~YUR!bD_)Wj0W+ zT=R&Qk?LOapH%7CCfHZX5BP8GSZa-qk6Q{$%MN(OUE6@V%8>{oY>V@)LR)#b=KoPZ zE&qr&jMv3p>t(bEj;i|Of^KBJ!)3T{GD(HrBg14=7HCQJmmOie?+Gym4H_c9^IrX1#L+ znIG$~KV9hNx0EJWn{}}-r6W*?PV&r`anf67G~FZYPg~bLMA!8BfvwvvvfDHEV9V-2 z-FEs=e^$`D-SnN%Y3+75R@nV$=!vEBbnD7rYgcnGiqwp2T2@VzR1=|VZG~*%KX{OU zrc81~y2nJJLU_s>L$#e*@QYIQfYIec2Ja^pvEUmEf15Hat%7U8K~F0?@PFd627)MzzzDwlq}VA56QP7#&vQv8Rl zvyJi|L|V(Uct@f};d0CFt%^3ELaFKNt z#FdKgbdRQsXr~rhM{9Fe*6<3atCB5vCWvXqcNVm)mAtWplz15-B3xl>Gcm5i{X`)yVAil zs3tOR8S_-vFgR<3f^6B%)QDwKcYhQ~oSsj1BY>Xc1M2`0! z2kS~XUR>>BGK?6qxR-rq0`#xA!hZIF@FIjQtk(I#2>}%D&_?3`D%anZ!lNm^Tg(L%~I@ z(Hg%l>#tEyr)1rK#T2GfCuu36aMmH*tH}_It`|a53XyRwyH8Kk($@Gl>3Gv-bb{Cn z^+VtKOc-u2PYI_%HCsy;Zu_#{y+>pt^p%+@vodb-%#RL;u)Ho}S-56UC}|08QC3U0 zvdxCVZtLreOo|$qUvH20A+M#Xdo;JTo)z!yMwF#FXvfyNv-6tkTCa-PBpECv8%W}t z3`yzte~NBn+-|MoT2HnAZY^ZJry9Ono4(eE1yK{Vl8~`S+IMSx)yuo6D|SSCfXrvR zwD=94>?bK(aov?SEfkvR-*hxM4o`mR4 z2JhTS2K%foS8P?dKx?+%tKvA)=OFa4?%IWoUKRTx-U@%Npt)`Ipu8HeSKEaF|CJ?% zbzZx%-dEk9C5DxwxqjlSE)toFshEsHrwYQd-cmG>L|0TH@)M%gwMn!U;c9zhW;?;m zU!f@VjYT-kKJoJXg=WU|dc%!hk!yTY(Efg(*Ndl!VxIw2Z2twVbt`C0^;^GQ|9@YWHP2fAKN$(ym5pvbZm{i5eSM{| zOw#AKd%p~LtK9oSBfed-Xj50eg_mu6#{|@Zzm%79 ztrlv3Y^wF%Ht9t14K++pHaep-L9er2WUb#{ixpCF+I66URC)_4tBS9|H7Zp*E#>)t zR7D=~+qJk){nW_qTI#27v4`5>PXn+a+`xZ7)?R&D)2sP*R4sqs4A0V^bv5^;0;+2%U0Mq1x(?v0;{-C2HHvFbKqm#7cN1tMzFj1DuH zvLu(K8eeILHv5^H91%K0tU9GP^by4iDZZ^Jr9;GX0H}&!r-**UU3d#7Ilq z5A#on!TXe+mYx@F)6%Q~*>7?wWq*CC(rSO$b{tYTYL&tT712z03>1$Nic9OQWY>GT zKAu)mUeZw{hlU1`!UfVv$3LSI>EzVBNb}DKzqE8&KWa~@ZYs`sCdyz9Llxpi@`E+t&z?A%GhBJmaD)z_7SgX z>ulF{s^05E?1U#gt3|n6N)OR|0aIOA$w5&x^>dF#_r+tk7}n{jw(ICdG$}i*$y>y* z_F)pr#^C0B+Z@)YCx-PxT+HRL+{^Y|x9mzA_?otGySAfsUmsRG>m*dy)NGS&zABttdX7rY+XmB7i`nL33Me&} zHf1~PUUqrSe@)q0yRtiVULQ-W)$AU4UzSMK)yk@_P1X;?!&O9@(GkXr zUDPreGlCZsWw)KV!lhEnAk1xQinFakp7}ei_=^UWE>4nj`GFR+y?Tu~?lgsHA$BI0 zX+PN}>}f3;vu~hybdW0BeoAhYn^n_KwT0XLeIw+9yIffG4*G9h{bW+__eb?I>X}`A ztk(C->OKui9UEV4vTOfDbN$l2iJ#c`t(%GYitur1r$+o>GdF_t)yyfi-?bI`Y^{52 z(H4E_(Z*9+gl$+qP+Yp_*_31iS^8CqWSIc$8T1&-O;jPV_o<;Ubu7N9#^Sg)Ksd#k{NnOx>@BuCoSg6yZRb~B?5^gL<;5OoH@@=nIq(UB@kZ&p zv8=g?>iBF!fE4b0y>zN5olT_+UN3DgO1n^Luh&bfh*D1~t@(QCP3^}lFZI-V8VvhM zdxgvznc1W@*@>@Z$jnr21Tw8eMs2@ITfWm%b&$C#o3tayU0x?t+|>Tw>1Eos4!vRW z?GFcXl*=Kv-JYx~VJ=n9e7*AMH&yOQ!ct#}5RufnY|Rv{MwVme4v3-BpXZC3PGxJ# zrTBDh8LMnjctiVXmsi7+E?y5Dfw!?#@PH0~jL(b8u)bh$gQD@NQ7iMJ zR*5Rm@|q<}$G*tj?v5 z#a(54Gx=c&zI02L2`6n43*Y9X-%e3&aYw1*Cu)^*Qjxs=<78+9JDqK>cERUO1KBO^GcttEthO6}1G8=&h+A2mL+v^j z*mYuBk67?SZXQ-j>8w&pQ>D^Osxty|#LW?U6@}~(6qN~@x}q0+>mAV~!*fNcATWu! zv-#Hhlwz_*!F}&Hjq{ASd&qJAvC2NSf1n=Y%sfIb&&aOR;^Pxqf5OjKPLf!JSJWF7 z$Loqs)c7N*SqyNYwHHKmKKVsN^wkhyorvTOrGn*a7hR6ur~J`Ydq=6-Q%luOMr~Sj z@SXe)UTU7n+#ViHjY>+3N`fP2d1B$U6UO5Uu?TzlyFBmUcJ^SD_|(Y_3Sja55=@r; zq{}7eOw-Ejp)y|Q!8Cn~{1nQ|H3@%Hldfn|h%Ke8ep8;g>YHl&QtkESYv-ANU-<@W z{>G}iA79RhgH*HBHw?vKJ}cimgoe0_+L!vmp{P2yd{wHMyoSE}^G+X>>BC=zNG#WL z^Eb5&r=3B+PQ2cvWCiIp6|S&VYFeg}2)rhhDX7J-Qqg8@?^TpmwU<7I^U9SzqK|83 z+e;`l-=g)MHsbl2?*~Mu{u#ZbC@?y80ncg0oU{d(D{9>j^i^9it>m(&8nar9dDKC5 zVA_gD9;}PzoE>PI8;HP*MFd?%;GNdj$Yacw_y$NqTS$eOvrv!RcBLDUe#y0fvLl5U zznht7_M40nU0j>QdP^^n7QgxlO=1n62%uACR%&#bJJg8i)q@wm`PyZbb~M|QKd8dI z*=6lv_H>rCZ}h>3%#<)hUI)+7l%*S822vL9pp3&r!KvspW8nZW>@ z7=II`)S{axpsT#wXEdHXb643SMsIPVnrQK*twrm>;)54z^8Oat#6vb&s5kjqcJjWh z$v9glw`og5Cx3h_%u3W-6v!4)wiaV-EwcS(i@l;n)L&?AGJhimP8k|Q0FG{XPhOzw z^TSpSuTy1nH)-6x{#GXq)^(>DmkSx*7eV)Ze|vO^c5c*8MprB9&i*aLisJW@TV!aL zzFTCpEW;~Dz9NiyYVkRhYki9>tV-)uga*YOQxQn`&0XWQebU4-FUhLqDkaJd$f+dAZJswLg`E(|Kyf#m~RX(UR`ebTh-+ypjJ3qCf; zxClzmXvco5zVDM`tb*ELsg_&dubLMFUfk7%8F^*}=Cbdv6V;fZG8Ab+-&e0{{&^8j zaaS1jJk`~FN((sU@B9Ucl$6|AF6Iqdw^KVE{Fk7wLha?L7VLo5EN@h$@n~+Io@}x3 zk83e+9^aK!G%ie{8NJ<#d22uCd3fe5CR2|=aXy6`okX|H*;+}Sry7{7d7k!XxmwH9 z@$8niO{7nr4y~59hrS|WU`th)gL~xsJzC{62mLpf5*IBoGpHj!G6baA8VzjTJG6KY?5~W ztWWFWg$VB^*j-M`L5Q7a7+gV3|EBw&Ziw8Ij-fi)rN#Ulqz(U}it4mLi~GTw#cL@) zyzTirl?rzpw7cVmcJ+s0p2y&BG%WRHU8DK1iEnPps`K{UnFG&{WsdtMol7#PzVo$$ zr>(SF7rYH;=fV3CwON2R;=*zErxtjzCtIscxmefKVm|bxN8KVb>&+EuvA_CKTKsBz zo_YEEl*Vse!-@7qGyyt=G_6;z6pQ;q&@3T7SgPhi^ilc`7KjeMor8L*VIsnBLX|yu z#RSYxpkh&)D>^DWu*Me6oxJfsox5GzHScYUXNW2%^7E&Rr(m4BTiZqBo+n=RVi8%+$4 zrpT82THLJ83`gT&nQfVA6K+i~hC)Ou-Cf)LTP5xBt;X!bef|Xpm>M!k49NL+Z$rUE z>wvocp2yT@@5#TXQ0GoZX3@sqX~pJf8}GDm`Fy->Aifi|>vw8Yd^rK*sra5|xigu) z&?f)c1`+)EpDo&K9A~Rp4OOfT(GTfAYm$q_%`s*F_{unLfnI}bHH92$L z%@5QZSxGKU?0g1oP+@`LNAzQ#rF}#1tya|z%l17g`i9{fRbM=qUibP4d&jXOX%NC& zCy_Mg4<{>e1;eCzXi1M-@Q|wb&FPOHE@DqKx8go*t2Vm$Z+76bK93mtW?#(X$;{Ag zFnYvx>(7tYVMguu|NW)58-(e1*KR#&<@j)*7`Itl^s2fR@^pmy-eB$Hr+w6V15u?n zyS%U2GXpbR=#NNS^va$8Sc$o5!~c1&Vn;~M;3KV&m%-Yze?C>Gy`%Mg?5XX1K1zMw z54S&eE#jq**6!a<>WBU8&f4{FGqrv{9uvvx@XP@GT@?a1+T4n$8;EJqG;Kyie4Uy_yY_;bgXmb zR##=F><`>o6{g0wqMgN?N3>v7vk!Z)(Tv^A4)9{xOl|rW&5##==*`+0ueGr688xy; z`LL@hTfoC=uoSgxGhs{iof^!IscnX3|5KAKWR*V-M(5(WAcK$Y!vbk$Bh)&!{fvhzm5u|)t}z+W1eclN_z_JFDNYw|}8@keGX`5xS{ z8LP)G^JdN11okR>Z8H|l)H;6Tz#!pv?$n%ZVRQJ-=FDGh<0~5SziTlke!n@ZqE`0K z{;xS(qrRoNlMBjhU)R3D*m`)|2XG!~eE^|87&3z2i~knNW~u|L@tBtEjA57u#4%nt z0{wF;^O9)X0_c*J-Mtm-z|_Xocv@?g%${buhOrThaXz&T`-*+SecNI>$GMT!TiCJe z$abu+%5G(^d7H&CRdvD41@PJ(*kA{r$}lN`FY173JIg=mz;+t5D$)JTde9iOVK1s> z&yQf?21BokVwb3{#XqddZ$z^GUSo`Cexw48G^#lISb<6#y1xV8(18VKCq%&rwX%Vh zFI9Ks0lisIuVyORe5BagRG>EZRPE7^o;;%!9Pni{rh5&)70td>iw6;*8G`2|22|1i{8Blp@I49 z=Ve<}`>%v=?7$lHq!@O<@Dr-=Pdl)N*<<>$Rm^+iKWOs&sjZ2T3?BTvL<`LK&aVFs zd#I`-|KXK}vs&UT$c`AuyjX=^#U;FNOXj~O5Mh=vh@~-yxsRae5)T@}e2k4Am&jXk zoiD}=VXVT6hb8==6KjyYd?=gC*c9$KoXx~WlsKF<@w}gf_@%3Gs<@z2{|Adov||M| z`Ssygs~_?Q!ymi32Pc3NnSF{HsKxe!cA3G4}G zf^lFjxC|@+vp@ysaxkW<5!e&DJLfd)*?N8KzYOC2P>guoGRI(`BhfZ^RSXW#^I z0;qvY!PDS&@LCUxB_DhN7K8J8S}fjpmo&bY#S#Xt>TR(M1{dH;k_es!H-PxVIu?58 zlm*@akHz3&(t!6;#Sqj1RorqS!KUC?us4_tW`f(nT<|p5q90-coC-PyDavxN0eBAV z2|fqoK<{_p5pWW?2V4W@g9pH3DmUSt=3Waf1;fAsa4;A=0Ko<(f@{GX@F10gSHY*? zb8s~7hu*anW#u4?B?7zw#)8FQ64(H@%SK!ufZ_zDmWM{0q1~0 zvG5$&3p@yJ0z2 zYzz!(gw4q=FFaw+b_MZTcfsqrj1A@IL!C){Jdt`KDiX=ya&Rk{3!VV;!8@Q69%Kzou#Ukx;6kt`cn^%D{8a3C;3jZCxC^`l z9s!?#4W=Q;n_`0lL&5Q2e{k(Ii^-CJ#C8Z)fxm{NkjOwHa2}!@j0f|<#b7a*4Z7lM5qH55aQ1wQB?epu#)DhH4A3DF?ZNBdC9nj1 z0`|tMG51h-01N{I7Gjlvi@`adX%7->kubm$2f^9kb?`X&5_Cv{>sl&G92gFEUj)~I zv0xII31))1U@rI=ECAKT@LVfw0Xzi;eTb2Qp`d%1qVxkp!BgOHuoz4PeV4*ea4~oSTm{|< z!}_nCic_r(zAps^gI&R%;JaWPI2~LDZUwWzeDEAt3>JZ>)6j8SMR8w-j=`niVDJz) z2P^{Df+gTVaA7(&A}}3%ZbITSB)r?90T>282k~3qN|ohM0M-Q8f-&Gha1?kITme1@ zzXQF)ae9Jbp!>&Y4}JtDgY+TDb}9$YfyNau9Bc=goZnWIaYzJ%E5V*%gOwOL*ach$ zE&;Q^yVUPB0YQ1NH;+!LeX5n79V(-@OA) zr8RIJ_&eAid;%tb^eur^;JLLJIe2*;Mh+U*W8`34&^rQi35J2+fP=w%;2hBX6L=0B z3mycQgIB>V;B&D121I#{j)>+Bh;FdPMnoqV2PT0l!Ax)umRq@ws3GfXa;A2j-3_d3lkCzkhlm&gYKD#Zm_~;xE|~RW`PU9 zbKpL(2s{ZoM`D?6f$PDX&#*6mwYFkk07JnHa0a*s4Bm!)0bB|8k3xUoD$wNn1-4uy z7J^s7%zQ&w_f%~wLfbrlR@E~aDp(uC2I$)jsXb+A6$Aa--GFa~$EJtuEc-n--9wdsu zDhDv9J#p&=gTa+xPw)&F2S#RNPQgLo9xxfq2iJndpu@NDTrUJA7zVZl2ZJ%-9B?YQ z7F+=y1U~~!SCOc82zxzP53JD}7XvUHoC*#HSAmJ(ci;xF5X=Dszr$Gpjt5_Y19ITG zJ}?N30MCQ5pu=If9`pt?!7gAfxaY9NWGO)683amB{&DHc^V49-rzwh2d{!Jz~`Xz8MGe+ z1Hdpa6&wr}gNdN$S;P$ZHkboW2Csvg!Iy)u{?8#%V=yibU^v*|2Lv714@?9XfE&P1 zz#Q-pcpap_?xYM+6#DB=f#6{<0xSY!LHZT(B(NEn2@VBw!8u?7xC~T=V*Q^*B5){z z1dIS*fU)4TpRis*b{@e8P6AJW%P(LL2eUxOVK@`O24I(qSgznmFbGZ4Id~e}1-gzyeJ})k2F8Hx zf5()8Bf(YRLU2EL4!jEf2htboT>ik6jaQVnz%bA>1c|{&d;-n^cY$qTd|d`>~w@KMCEWzdQdmgVkrvIa|R3)Q!Qs)(U)h z@E-3*+3QXCBxKdEnsWc|n6HCD#S!0>AG*qX$Jasn>!z4FC{d!SxPG8^c5xU5?a0=^ zzetoHLOJ$1d%4IhtlP-(_b189enR<))@1A1NGSZ+_(lx47~0dvXa0@C z&zD%5!|{fvxGq^IzU#6IOAHl)$U2(b6BV)Sf_Vu|*d3%V2lEG?FwbhiWVZtzzb=$m z26#fpSNsrX^_&{vP54~u`aOORebkz7F0s(BiyH>vW@POndPxP+ornk-3Euyl!T#;cQF3H7vz9M{tRuH%2#lFj)ZX-c*uHYa8jFKJ4ag@dX6T;CfcO(Z9_s7EFrWIyKTZ(qQynFT`T`o|J6k_n<^Q7Q#nv zfn|x65f~wIt!+U1n-IS17UVfdp9tYozef5x(gz@?k-S9ucnI&kf%!Ia7is*lThg0f zYP!^Dn^z*7aTyAs5b#&QDjS%8P^ab=OS{sx&Jfkb-jRv=BYCe4ETHm8RC}9LhxFl} z{>nTY?x1W=b76NDktQPzT@p=n>llZa)fABfB+xRMI z$ZKvw)u%0Z`%MU(j&E5k&1o`Y_;}=5cb-DUvqFU@dG01=P$z_P-(Q(8FQ80PDD~mH z=2N7zLa85L9!Qz%q12f#kD$!UP|+igrHs;2Oczh0%rn`ZXHuqCOQ|52GW}Xg1qGCu z(NZW_lZo_fy?r1uY%;H#2?N)*H^@pwyN8_%T71FLSz__xw^Q>J|@ zse3chomxrT0x1)wXCf%mv=#s86g0;o!=m}P&FD3=75`u}ytbp2#S%bX3*@^tvszA@ zTI-YI%&%=`zD~!H|A;23h?k&#P@OP~r9Seur8v?aKpEBWe8S(}f~AqbM-XQ41%x>S zKL^+9xE_S@BU>=qMPa-&G2Oaj~8bMfyP-igjOy{xU7jumq&#(jui<>g z{CLtzM7HJ_vMX@2`N*q8eWwuwLpoKCmZ zm%usR6wz6kKIs#Yoz+D~cCH7mf_%#7=we85%_K^V#_7 zSn)RI*l_9F7K; z`EdvS5%FOMxlPsZ#@mYy(*5BweG|7Lhv7&+=|I;8fAvlW-iTNt>Ur|m?J%dL11|n# zQ0wWn=+kASMXhB>hw(N$P^$qS0;ruj z%CQ%rBows}Dh|$miURq<1NdG`{to8YD7K@;vXD->w2o!QS0P?rDahUZ(da;DdCy8f z`e0|Ncoot+I#V>r*xir(r=4jj`17Q%5R+9R<(`vCnf8$sE51Az8P=cU+Z=wpfYJkb z5YlV1kc^h%KuUKPVjh9C8XifzjVB+T#T?lLJ}!&ZR=Y<@D_+9H@F;0rjheXc>+*1< zL!#v6cR14Zc%_|iPBq?eC#%gOcrWDC-@5RrJF%jjc{;LAC0#5QJPIg=Tl@gTYIs+< z%N6g05fi$~(YWqHW^Gr|I}f4EM_uL6Vkq-zSGg+VDYL69pS=r;{G){-d=ClT^-Mlx zoTB-r-56TYE)1M_#kWBK@)t zO@+A88mc5h-Ai*dZyYZG#T~Wc=Ll8VSV10(40>v zwC5`Tb$@@kA=kmf;n)3XY`zYWNT2U77K6iBq#yJb2eCsk(vPLwxE1MYyzjTrRF6+5 z`0*8lDtzy^2$K&6%9U08Efz!KK+y?zJ%r4>fg*x=2r?{=w>*TPjpaiQ!I-6kq%lQ^ zyAKA*HR0SCm)$`!=!21-#DAq0&ioa%cs7J~1Ao;plu!Br=f@t@@Z}@EgCYI-0>S{k z5l|-$75+Dd1mj5MH%PQqi2Q5q8fvlNVq-Bh%!)p%TV4v2UnDOd~^;J*5HeB zFu?u8^gCt_#&l;GUx=p&UO<_9!^9}o97ftaj5{2LeZ^A7BS`o_uN_O7C&TnxEHbQ+ zzxocBnGJ`TBNc2rj9KqJTy6;AO)=}k`N(V75Mq&@%w3LP6tjnmfHh`9G>-Qo(fepY zkDUb&EgsI7AAtc|hg0m-V$=8qRH?Oc#Qz^MW1HctI3t8V9g>kgIzrCGR;2fi5a+1~ z!4t^;G=iVniz6`OD26h26m7D;d=F)Ij1sMQK4mtHlE-k-Q4H+RDE{my1{O0~R5vaQ z!7Do6CKr}Jd&Y<6!dlBSK9AT6RdD%taBhz0#%KHxWULkc6;QJIRb5d>7@-$SfDbzoxszd`#60RCoqaeS?@_;iwdd~`jH3`#st zBQ!E6SuFVbIEvvRZ;!lsce2uw8!{6 zN$Pe>Hz9r;5gxkooX0e?aHH{0z{{JXOD63=6W)#ArEFf$;udw0M9zxECsh zc0s(^TD3_`Gw7Fjv0r9J*Baw}9$DO^m>y z=i7KTmT6-g(rvlVk0@>m5uJZo5JgOro8CF3TTBx(U@Stq6<rE3Y%ShjMXvcpg zQ8QgRedVFO-g+6*A=7w!dK}3@8k)q;d=BYwy|*Hyd+YU`@d_3_i-jMIbcboedk#I3 zUaHrLLwepc-uni0E<<_-$+2*fhTBA`Xar6d3q|^RO!l*JcwTaz<_Id(=_1MAXF$Xu2G1KI+_=&KE+4w+|aH;ua9ck6nb)8T>Y&&YdBrH=(nld^kfM zV5^YcI76QO`;p#GE&LoVA-PMh@&xGeA^|AY3)q;6j4AG zKI9!yVa+c{uH?6=ZXnWX#!R`RL{J6|#hYgHrk7E+VKxm_KGEi)&Gy-RDwRK;EnRNticisI z+XrN<13@!>;WC^a#2*n_aJMUBUYiqY@xFwKd^+K4s_ADmMB{5yd<7-zAi06>z0ADC z6(SPZ+wY5z<*rvTfI4&Jm_sPzHOFeXfyY3AYvLoQbvQ@*=E%pVBBZy?kt@czn@Hoc z8Gki%j-0rjkZsb_aY%2NLoXfif={+LW_ORB%GOphbTv;PT0B=q zt9uU|`g28B^+J)}Iagk6?5C6cQqv#hkM-^okS^BKtB`)6>)wxa!Cc-RXNK_-()IbG z-!K<-`DTI_KlU38nJ`bp-L9)drt&~acjN3gq$7}4qvwfrz+)-%&OCVsN}^i* zWQ$BnNAhFTI+xP#%GL#xj-~$m*4#kbe)H(G!eMa(Ufm!v{tlUVOMiDBg_*y4a~^GB z{;VlazkzieGhaB^7}y&-BmWU1)|3BDB_Gb0(~yLcx$}9`o6Nsf-268`MbQ&qF6ymB z8`M(|&*#gDyXW&=#N7Gv_>Jg;2$;_wkSuS$+>VkUy9)icAS;~DdxQAsYsxK{usBg{ zrw;T*m5fCCkO0A^%OW7#mB=5E>pBPBU!FwRx)oR9KTJuTb#?aM5~^ z@#M=2n4{CCME#BBPkd7Wu5rhODqjcsZVS@%nS(=5nSN1#)mnt^Z$smMiM&1W??iE* zbI3=X{~=AXe-rs85Hof7cUHrIGt!0MxXl8BsxSEe-yz4NnlG>UJBIDOfVaQE{HUQ5 z9{~w|5oiGw)LkGa%k>?6hmw>B;O*uOD)B)R9DK%jl=$(Qe@M|tipxC^dGQe>s8xZr8iVjX1V`g;7v(2M6kc;Q z{^+8-a2$@;9F>gsU6gN~@_F2Sb|SlJ5j)^qDFgvRKMCCJUl!ojbU4h#&v2biyyL&j ztNJoMdq`)~5lq|LY8ETtw^5Ai^uPbILF&2K?0zrU<%-=BGldcb_ayOy|5t;eDy~Z2 zH!_cVr}(L$O1VXsV=BbYI9=Y4PghkhpV(|EuA&$BuOOS@cb`$*jqAm@ri!1|23ef1 z%UkI3Z*}=pUEWZalMl%{mE+GHc==>~E9JCg=;xkZoWPq`P@AzQd^BM=Ur|Br>T~u- zSt&q58RvkHc%f?~e?+x1c#uJD*5dLpS=>agwYs8S>zouc*5#LU`PFuOF+Q;I-F8A2 zSha6=llNv#X(0S98}^dt9_wY>)<4-<$Ny% zR`v6AxfUzySJUfn*X2okGpYL^TozmX+P<<>cjBb1Zyn7_U7qYx*2?d7c|2zh@b}j7 zvKf7@O+SIoQe8*h+yO3h;-dlI{GVkhHahV$9iI}Cqu2k!cQ~j`eTr^LxpgeR>gB!p zBkH95Jk>-jQFA9AR8h=RU%-^BE3uBCepOlPtA26>xQ2_LR9(KUK;}&nN|r9aGf38- zs>|J7rJfhM9_xJd(B+>QM15|ls5bPu`bxI4cJ`i|Y`lZQ3oli>%g2uhyixtoB_cDYwq;6kVQqUsklP zv9EObTfBKC^m^P^HpBSEPa}N5M!kN(N23_~!`w<(24DUrOL01gpNo2}2hOtfYF*ye zL$=Ot$*)y{vB5@JZk^iz434xvxF{R+(A!PX<&oWFeGFavtkUHRcwZ;g%alQ%bmGVA zU~ey}?m%BDx6aN2U7n#zc}>v@--pxXH!GCw=0{zAypEJx&2_;iS7dI^aiO3Q{(oxn zr@daF=;O17-KV-dp1W1XoSn_(jVh~6)o(`fp_SDx>NYRF1$j1@UqEq-9eTVp)wOQG zCsEYhzrCdy6LtA7y8N1%`#P)s4gF=Y($-Jb-=zBVQC@RiPL7oTGKRttWt5p@XHATk3xA)0ry9xT=^&>h|sPVth>a&)yRx_oJ_ z6u@Zlvrd;!<$YaX&7F#}S#!O(9wv>{9UR6NyTCW$e6NeztoikFJ6r>}o~jkJkj)Xr z;%AI5U(DUAAe{Xh%3^w@ML$pV;^n*}6?^Leq;Fixv_Pq~3!jc+TpLoWsLgx^9}{hr zAPJ=_64dunegVaJbYxZ4X6o)=c#EoP)8_2+5qE1pCr*|G#TdF(Ph+ji@K8dYlIUc>lPmMaVd@K)g#R#4CjS41< zpHX^oQ{I<~6Mm9n>q35@7tiI3P^>-(=j&ZD37-6nD;#0HOElA!eO6EQ70KP)5E&u( zvs3hA9YSP%S^W4}rk^ZbZoP|GBdJK2kK)sz4p;e9H~96`34X{8dq=pwsI4QZ zj#Hmz;gzn|>esfqyjD4Xf1%4AdGl%*xs$%Otz+>)ds2s2^eFB&R^RxoJI@Dtajt#> zTYKA~%ipag2X|5*BYplr>Z16uYKW1+{82S^6y7lQt&Wk+^r*X1>MM|W(F=>w%H*4fC?i(kH!y;=9J zZ*_T6Gg;qyFnGf=)Xn7wvVM?+GG3P->Lu%s)8(6VdB2-Nz^}NgZg|yQ=&m-av~QQJ zgxmUlS4D3Y^OkJZpZBHWc-_rbYrfNqXY)l=+(_R| zt?RFPsB9g}_oCP|NWXzuXCYND&i+gGW}Vc-y8K%0va?pHr9KATWhZnaN9gi%SES&5 zU7oDVo69qUclA=;n#W#~rC49$=MTNoo_qXEEN_G~)Q@zw?-JA<#v2}Bprx#}y zOS$#pa#ELXD7Q!7)8z@AdBao7f0WJINhs4=%icVBb1Dv`uP)-}j9z?8FaE!>u05`* zDhnU3&ZOlpy;{n>B6ueRL_{y6JPdiMAco*2Lq!IG9zJ74(}^%q$1y|AU>uh^R!XnQ zv>B}M5z`2%A(BO58RHA{1rl-1XJa{Q-}PDd~y#6>uM_uyL&L#}=lum-*a6Wv+3gnB(c@DIWnJ3pYIEp3gUGk+9ZchKgMVw{tOay#c99|X{s{Ir_`S$hoR zx{$rEC3Kv*78_!PZ#gXX^@NU$6Fd`>Lig#5z-t4kjP3FGRrmGe=kC7Th?Nd$gx+|q z31Vd#Ieb`Z5xMwbKc+tBaBQ7bj<)vI2Omx0vHy%~Q4k|Khg%>;Qfdc=Ub&^t8AId`qmyPOzaTME)3YY(77| z2D}Gt?Z=&R9sB13_!-18Mb$Tw8kjE5`=j9MYg|=|KzBSS)z;OkWxOY=Rpxla41_nM z3wNV3*M^Zou4=pn{Ck`j^ww4bythm^n(oU1J%|nnd&V?K7DXqZkVg&y^@P|@GeshfgdXnS;|CRWqdmI+4tu;lI^`hDZp~>WQaEptP zQuc=JeraNR9_2F4ub&GY92y6NiIE~m4d5M1)!0te%E;5G$Pm!0KrbgZYde3z$UP1^ zi35nze&%xlbbFr$oas0`89Y$oDez!1T!y2gg65x&fAKn>|hp>Tv!g_(+Nm;5bo41p&Ny zZ^5eR1-JKPil+nPOa4n;oRRlbr8rU4C_APAO)`2Xh1=>$c6RVNr47Bud z9^n69SQR}vQgei^!eT4-uzXhy+)9OkZ1oE2sy+cwDW2(Z@8K>>$Kv@+s~Voe#;Ch%Bk;Nl zcUR^^n5%w*$_H}Jkwpz`HaRF;Dm4UNXHOTijS~dtA3fzw;OmD8uEWB4;N8d>%;sup zMLblbj6cs1b30E6t{Zn5xcT7Pcc#emZ>I!vl4DN7n?W~@rKVs`a<-ilv%2x?W{EoQ znS*$rTY@Nm(#d0?Tag;N33$>xirKY>0BZ@SLAfaf0*Gq_PRP6M}5gEHrbJRw%3j7@(KZ{{Uj z3H;y@5!9i;4Lq2fL%H&en4S?Z7x%1~i=*73oXpfdEPc@(bQ@^%9b9;!sQFN}QfvK8 z3%6d%U@ z9E3Inz}yo$EYEUb0ilwCXOMVa3nCW%iQu|p*Jzx)!nv~kxUtc6JLn8@D!SJ-(GHb|k+xE- zmQb#ueN4u;fF4byimn?f{T>hP+n{GrwW7^;@i{Mw@epz|og8i#ZQbx6KsO@eT@9;K zN<__k(tZm#pM@gW+XqQv?n$WqZk4FHZb)&>9hph5S|E{VA8t z*;c3B-LErB#oYZ=%CzN(A8m``z5UZMA{GuSR3>6Cky}}@;y|x6mmYr>+Ch#HOfSUi zf*H`B2|9sXO!G^gnIkOIY<0uMhmME$|3!?1QnQj8N;gOF{i6Aj^4|3#)sB5c?^^M| z%W;o26Ta61kEDW!xoSWCTW~#bVoA&`r>%-EOO-lJhjt6-d#QoxS0h>hI z{4OH{_!oxA>lIoCJfGar9GoYUW2AD5eS03NyymZBbtbu(b`su7>+Rcnv(T5_BCm}X z0`Er~NAglzA_vSnL3qF`qUNAx<#fZ(cWb``dIDKvn0^l3-Wzqg0r~-okKvlXOa&|z zcJijsI+9ntDn4%G^r@?M1^5>yXm1S9^=^1u7zpdHz9xF1 z%_s&n^?6BLe%QYLRD|1Lr1lLlvYxE*T!mBkE=4z> z>`kHV6t8G=Q1pFE=)X{bqRnq!-v#YUTbZ^TJVJZpxy$?V5U7%4k>`T9#YzBqC9stY zRB?&0##PYi>D~JO?ywwnO}VF0B-&&>WOSOK0 zo4~(|od|M{;d#{PqH$yRJ@#zeI_O~E#A2!!J90%2CtkzvAEJH>o1-54Il%p?n#~rM zVNg=wwMT`ho%p8!mw^WZ{~B|p1o-2?&0+r;;KQ)_=s|oH_;IP$|Gt5#1yP4IQD;Fn zfhW+?L|y^!;|^;u{2$mU_3cR&Oxy3p0_hHV;QK;Xo}n{|d;+gJCxkv6{S1B=c6S}5 z27MrU=9D87cpMcZvAZ=Ni8(zJ4}jiqfXb6NfG(kiBz_~^jyFTTs8#ESV%?mL^{o`V zs)oYGa&678Jjd)3{w+jY?RGKnas;xG@Y8d*$Y)UXSnj)3I2Q$jE(aYwufDC7Xedr9I>Lz3(vcdc@KvH{Z0Qd;d$Uer(Dz#slwzOMN}5UIK2uZodM25fwhd zN#d5X(i&(R=l1EYa&s+g$AhFx642%stA!p;jufWr@&vz*;kXKVCApXmGr!-R%j;0} zjQN|*{lJgc(54iA&o#HN*wfKz9UrWe-Zk6`>ozt3UvW{YF%h*Kz%g0Le_JQOc;NGa z4?(aG1ilBjpE#tX@fK^b`GxMR17g&?vup;w*YvL7ke0tHUWUWjn1f=+d_^)Fc)($g zAbrD?u+8ZZEeDi;fsil%5+6ae4z3A50imx~-P4%Rp)#{N# zZdSJS#@f>h_|zd0o==W6rk}P-^3pgul#3$SlE_`D_gyEkAfaV4a(M2)WSxRcYZB((>Y1y=VGJ-$FsGl`meqa zJZ6wIwE=j(#wpju@#RLl;CgmDSWfk5AMDkkP)h^86CHJo2cozW@YoLPAjRIy?K?8^--4k9yj8;2WlXdPVr3V)`5OVY#FYjV&vRt>DTGN zi-9l10ZyAc1l)Y%+MmZ!Ri+E=d6efyLbce@O@AA7XY!iJFMiCQoVI{&x+H4a+rV$c z>Kd#gy(UY6zdwcYCR#$n%nRneW1=?}YdHk%y6RQlzdYl4TOVdwLyp=mq{e@GB^H5?gte3McX0 zIQ^VBiH6k9Q(|QuRWr@MtnX&w+-wd#stl5carU%Gy@!lIPZ4{w;BBMCs!p>LfV**- zq$l=L;B#r_WL~3JP~}v(i993b8ZdLhfX@d01Mf(x=+Qg{oNsE`T(LQMKlYuNGpD)T z&kAn7;Z6l^zNUW;cr~szbfiBBe1;s6g73WcyA9$>gmg=URNHv?oH$-dd!}%rG?TnC zdH551i|@!pJVrDU_?|3iucWdg=wyUQ4B!JfI7yT0MNpt%S|5 z$T~RhP|G2e98)<#Hy>BVw+P)dnbN27rF7G8q$=8%t5tY&-uW)@5UOCawhk=9KvdC> z1C8=pM$J?C%KLiuuAW(z7&pJpca85f< awQJ?aT1w_0tv9}tAN7-Vm8Nz&W%(}xVfm*3 From 5408892deb4c2defed7e114e588d7449d7fb4cef Mon Sep 17 00:00:00 2001 From: lovetonight Date: Tue, 19 Dec 2023 23:32:11 +0700 Subject: [PATCH 09/15] helper function --- chess/singleplayer.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/chess/singleplayer.py b/chess/singleplayer.py index 42f2c31..c393c63 100644 --- a/chess/singleplayer.py +++ b/chess/singleplayer.py @@ -12,6 +12,14 @@ from chess.lib import * from ext.pyFish import StockFish + +def helper_function(): + pass + +def nl(): + print("") + + # Run main code for chess singleplayer (stockfish) def main(win, player, level, load, movestr=""): fish = StockFish(getSFpath(), level) From 7d23be2261e2c786b0e0ca216074446afdf868cd Mon Sep 17 00:00:00 2001 From: lovetonight Date: Tue, 19 Dec 2023 23:32:35 +0700 Subject: [PATCH 10/15] rematch --- chess/onlinelib/utils.py | 34 ++++++++++++++++++++++++++++++++++ server.cpp | 11 ++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/chess/onlinelib/utils.py b/chess/onlinelib/utils.py index 5b5a026..cefd4d8 100644 --- a/chess/onlinelib/utils.py +++ b/chess/onlinelib/utils.py @@ -180,6 +180,40 @@ def draw(win, sock, requester=True): return popup(win, sock, msg) if msg == "nodraw": return 4 + +def rematch(win, sock, requester=True): + pygame.draw.rect(win, (0, 0, 0), (100, 160, 300, 130)) + pygame.draw.rect(win, (255, 255, 255), (100, 160, 300, 130), 4) + + win.blit(ONLINE.DRAW2[0], (120, 170)) + win.blit(ONLINE.DRAW2[1], (170, 195)) + + win.blit(ONLINE.OK, (145, 240)) + win.blit(ONLINE.NO, (305, 240)) + pygame.draw.rect(win, (255, 255, 255), (140, 240, 50, 28), 2) + pygame.draw.rect(win, (255, 255, 255), (300, 240, 50, 28), 2) + + pygame.display.flip() + while True: + for event in pygame.event.get(): + if event.type == pygame.MOUSEBUTTONDOWN: + if 240 < event.pos[1] < 270: + if 140 < event.pos[0] < 190: + write(sock, "acc") + return 3 + elif 300 < event.pos[0] < 350: + write(sock, "dec") + return 4 + if readable(): + msg = read() + if msg == "acc": + return 2 + if msg == "dec": + return 2 + + + + def draw_win(win, sock, requester=True): if requester: pygame.draw.rect(win, (0, 0, 0), (100, 160, 300, 130)) diff --git a/server.cpp b/server.cpp index 2f1ffb9..da8ffdd 100644 --- a/server.cpp +++ b/server.cpp @@ -341,10 +341,16 @@ bool game(int sock1, int sock2) score(sock1, sock2); - // if (msg.compare("win") == 0) + // if (msg.compare("win") == 0)rematch // score(sock2, sock1); return false; + } else if (msg.compare("acc") == 0) + { + msg = "11"; + write(sock2, msg); + return false; } + } } @@ -820,3 +826,6 @@ int main() close(mainSock); return 0; } + + +// g++ server.cpp -o server && ./server \ No newline at end of file From 00a12fd3592433f074ee73f3fc0ad087b20cb17b Mon Sep 17 00:00:00 2001 From: lovetonight Date: Wed, 3 Jan 2024 00:10:46 +0700 Subject: [PATCH 11/15] find match --- chess/lib/__init__.py | 38 ++++++++++++++++++ chess/lib/gui.py | 2 +- chess/onlinelib/__init__.py | 69 ++++++++++++++++++++++++++----- chess/onlinelib/utils.py | 42 ++++++++++++------- requirement.txt | 1 + res/img/findmatch.png | Bin 0 -> 3579 bytes server | Bin 217456 -> 217584 bytes server.cpp | 78 +++++++++++++++++++++++++++++++----- tools/loader.py | 5 +++ username.txt | 4 +- 10 files changed, 201 insertions(+), 38 deletions(-) create mode 100644 requirement.txt create mode 100644 res/img/findmatch.png diff --git a/chess/lib/__init__.py b/chess/lib/__init__.py index 1b33ebb..68cabde 100644 --- a/chess/lib/__init__.py +++ b/chess/lib/__init__.py @@ -179,3 +179,41 @@ def showScreen(win, side, board, flags, pos, load, player=None, online=False): if not multi: pygame.display.update() +def showScreen_view(win, side, board, flags, pos, player=None, online=False): + multi = False + if player is None: + multi = True + player = side + flip = False + + drawBoard(win) + win.blit(BACK, (460, 0)) + + if not multi: + win.blit(CHESS.TURN[int(side == player)], (10, 460)) + + if not online: + win.blit(CHESS.SAVE, (350, 462)) + + if isEnd(side, board, flags): + if isChecked(side, board): + win.blit(CHESS.CHECKMATE, (100, 12)) + win.blit(CHESS.LOST, (320, 12)) + win.blit(CHESS.PIECES[side]["k"], (270, 0)) + else: + win.blit(CHESS.STALEMATE, (160, 12)) + else: + if online: + win.blit(CHESS.DRAW, (10, 12)) + win.blit(CHESS.RESIGN, (400, 462)) + + if isChecked(side, board): + win.blit(CHESS.CHECK, (200, 12)) + if isOccupied(side, board, pos) and side == player: + x = (9 - pos[0]) * 50 if flip else pos[0] * 50 + y = (9 - pos[1]) * 50 if flip else pos[1] * 50 + pygame.draw.rect(win, (255, 255, 0), (x, y, 50, 50)) + drawPieces(win, board, flip) + + if not multi: + pygame.display.update() \ No newline at end of file diff --git a/chess/lib/gui.py b/chess/lib/gui.py index 94f2559..1bae033 100644 --- a/chess/lib/gui.py +++ b/chess/lib/gui.py @@ -134,7 +134,7 @@ def prompt(win, msg=None): # optimising images for display - call only once per game def start(win, load): convertPieces(win) - sound.play_start(load) + # sound.play_start(load) clk = pygame.time.Clock() for i in range(101): clk.tick_busy_loop(140) diff --git a/chess/onlinelib/__init__.py b/chess/onlinelib/__init__.py index 88ae1f2..4984982 100644 --- a/chess/onlinelib/__init__.py +++ b/chess/onlinelib/__init__.py @@ -9,6 +9,7 @@ read, readable, flush, + waiting, write, getPlayers, showUpdateList, @@ -17,6 +18,7 @@ request, draw, draw_win, + rematch, showLobby, ) @@ -68,15 +70,25 @@ def lobby(win, sock, key, load): playerList = getPlayers(sock) break + if 200 < x < 300 and 450 < y < 480: + write(sock,"find") + msg = read() + print(msg) + if msg == "msgOk": + ret = waiting(win, sock) + newret = chess(win, sock, 0, load) + if newret in [0, 1, 2]: + return newret if readable(): msg = read() print(f"1_{msg}") # Tai sao lai chay toi day if msg == "close": return 2 - elif msg.startswith("gr"): ret = request(win, sock, msg[2:]) + # write(sock, "ready") + ret = 4 if ret == 4: write(sock, "gmOk" + msg[2:]) newret = chess(win, sock, 1, load) @@ -88,12 +100,41 @@ def lobby(win, sock, key, load): if ret == 2: return ret playerList = getPlayers(sock) + elif msg.startswith("xr"): + write(sock, "ready") + write(sock, "gmOk" + msg[2:]) + newret = chess(win, sock, 1, load) + if newret in [0, 1, 2]: + return newret + playerList = getPlayers(sock) + +def save_game_to_pgn(moves, filename="game.pgn"): + with open(filename, "w") as pgn_file: + pgn_file.write("[Event \"My Chess Game\"]\n") + pgn_file.write("[Site \"Chess Board\"]\n") + pgn_file.write("[Date \"2023.12.21\"]\n") + pgn_file.write("[Round \"-\"]\n") + pgn_file.write("[White \"Player 1\"]\n") + pgn_file.write("[Black \"Player 2\"]\n") + pgn_file.write("[Result \"*\"]\n\n") + + for i, move in enumerate(moves, start=1): + if i % 2 == 1: + pgn_file.write(f"{i // 2 + 1}. {move} ") + else: + pgn_file.write(move + " ") + + if len(moves) % 2 == 1: + pgn_file.write("*") + else: + pgn_file.write("\n*\n") # This is called when user enters chess match, handles online chess. -def chess(win, sock, player, load): +def chess(win, sock, player, load, pgn_filename="game.pgn"): start(win, load) side, board, flags = initBoardVars() + moves = [] # List to store moves for PGN clock = pygame.time.Clock() sel = prevsel = [0, 0] @@ -109,7 +150,7 @@ def chess(win, sock, player, load): if 460 < x < 500 and 0 < y < 50: write(sock, "end") return 3 - + if 50 < x < 450 and 50 < y < 450: x, y = x // 50, y // 50 if load["flip"] and player: @@ -122,15 +163,24 @@ def chess(win, sock, player, load): sel = [x, y] if (side == player - and isValidMove(side, board, flags, prevsel, sel)): + and isValidMove(side, board, flags, prevsel, sel)): promote = getPromote(win, player, board, prevsel, sel) write(sock, "mov" + encode(prevsel, sel, promote)) - + animate(win, player, board, prevsel, sel, load, player) side, board, flags = makeMove( side, board, prevsel, sel, flags, promote) + + # Save move to PGN + pgn_move = encode(prevsel, sel, promote) + moves.append(pgn_move) + + # Save PGN after each move + save_game_to_pgn(moves, pgn_filename) + if isEnd(side, board, flags): write(sock, "win") + # ret = rematch(win, sock) ret = draw_win(win, sock) return ret elif not isEnd(side, board, flags): @@ -143,7 +193,6 @@ def chess(win, sock, player, load): if 400 < x < 500 and 450 < y < 500: write(sock, "resign") return 3 - showScreen(win, side, board, flags, sel, load, player, True) if readable(): @@ -152,7 +201,7 @@ def chess(win, sock, player, load): return 2 elif msg == "quit" or msg == "resign": return popup(win, sock, msg) - + elif msg == "end": msg = "end" if isEnd(side, board, flags) else "abandon" return popup(win, sock, msg) @@ -160,11 +209,11 @@ def chess(win, sock, player, load): elif msg == "draw?": ret = draw(win, sock, False) if ret in [2, 3]: - return + return elif msg == "win": ret = draw_win(win, sock, False) - if ret in [2, 3]: - return + # ret = rematch(win, sock) + return ret elif msg.startswith("mov") and side != player: fro, to, promote = decode(msg[3:]) if isValidMove(side, board, flags, fro, to): diff --git a/chess/onlinelib/utils.py b/chess/onlinelib/utils.py index cefd4d8..e2b6148 100644 --- a/chess/onlinelib/utils.py +++ b/chess/onlinelib/utils.py @@ -71,7 +71,7 @@ def request(win, sock, key=None): pygame.draw.rect(win, (0, 0, 0), (100, 210, 300, 100)) pygame.draw.rect(win, (255, 255, 255), (100, 210, 300, 100), 4) - win.blit(ONLINE.REQUEST1[0], (120, 220)) + win.blit(ONLINE.WAITING1[0], (120, 220)) win.blit(ONLINE.REQUEST1[1], (105, 245)) win.blit(ONLINE.REQUEST1[2], (135, 270)) @@ -128,6 +128,26 @@ def request(win, sock, key=None): # It shows a popup message on the screen. It can show two things, # 1) Waiting for other players input for draw game (when requester is True) # 2) Waiting for players input for draw game (when requester is False) +def waiting(win, sock): + pygame.draw.rect(win, (0, 0, 0), (100, 210, 300, 100)) + pygame.draw.rect(win, (255, 255, 255), (100, 210, 300, 100), 4) + + win.blit(ONLINE.WAITING1[0], (120, 220)) + while True: + if readable(): + msg = read() + if msg == "nostart": + write(sock, "pass") + return 3 + + if msg == "start": + write(sock, "ready") + return 4 + if msg.startswith("xr"): + write(sock, "ready") + return 4 + + def draw(win, sock, requester=True): if requester: pygame.draw.rect(win, (0, 0, 0), (100, 220, 300, 60)) @@ -194,6 +214,7 @@ def rematch(win, sock, requester=True): pygame.draw.rect(win, (255, 255, 255), (300, 240, 50, 28), 2) pygame.display.flip() + while True: for event in pygame.event.get(): if event.type == pygame.MOUSEBUTTONDOWN: @@ -206,14 +227,7 @@ def rematch(win, sock, requester=True): return 4 if readable(): msg = read() - if msg == "acc": - return 2 - if msg == "dec": - return 2 - - - - + print(f'{msg}__') def draw_win(win, sock, requester=True): if requester: pygame.draw.rect(win, (0, 0, 0), (100, 160, 300, 130)) @@ -299,9 +313,9 @@ def showLobby(win, key, playerlist): pygame.draw.rect(win, (255, 255, 255), (300, yCord + 2, 175, 26), 2) win.blit(ONLINE.REQ, (300, yCord)) - win.blit(ONLINE.YOUARE, (100, 430)) - pygame.draw.rect(win, (255, 255, 255), (250, 435, 158, 40), 3) - win.blit(ONLINE.PLAYER, (260, 440)) - putLargeNum(win, key, (340, 440)) - + win.blit(ONLINE.FIND_MATCH, (200, 450)) + # win.blit(ONLINE.YOUARE, (100, 430)) + # pygame.draw.rect(win, (255, 255, 255), (250, 435, 158, 40), 3) + # win.blit(ONLINE.PLAYER, (260, 440)) + # putLargeNum(win, key, (340, 440)) pygame.display.update() \ No newline at end of file diff --git a/requirement.txt b/requirement.txt new file mode 100644 index 0000000..478047f --- /dev/null +++ b/requirement.txt @@ -0,0 +1 @@ +python-chess \ No newline at end of file diff --git a/res/img/findmatch.png b/res/img/findmatch.png new file mode 100644 index 0000000000000000000000000000000000000000..433d41c4de54a5a5beb997977fd55e13b57d022d GIT binary patch literal 3579 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 {KSjNG3q+hH<5eB_FR=(a zz#lh32Hv6YM^3Oior0OU@K*pog?^rT2>pEU1bg`rG_!mN)=jWqIfP^#pWyV7fZ!w~ zYl6L9v#S&ItP}2ypJ+eO*Q|+lcs{O6C+f6@dzRT#PoQ(;BgkCG8*m-oS0>uawbt5+ zP6M{$Fg*OzUIER3RCqstF)hxU=q$mkd0+=6^m=%AA`ToI1mwg2=|nx?B5km!uThh9 zx++?&@IZc&^sH3)lP1Z&Wd!^!C+WpA&c5L9I>~-;82u(9ic&^oMu7 z-SHIC75p@gNv(#OWYpD_7<_pwEgH=8UC`xE%vPnHxOg+Ft$ zROl`Ehtgjr8LyB{mQ6%`_@_>mHrow;pX29|+!%mYCfkumF{~9#cB<6QIEs<%I8t^5 zbvh3#TsvEn%2Q+l$6>;`%hoq-5FX1YJ4fHZfU||Jgz@9`DR$m>i0!W_x}d|B978)xdBqMqhE%6y z+cC!=OU~BWmCff)gh|b|hiUn;Y-yq5!^!687x@$?$)bZH)T|^uv9~ zRH-NZ2Gn!#>zZE!|A47dmiyuFH&w!4hQIq%ed<~vplBO3$*IyJYQle!I&I)TK2;Jk z2>$%3(kAA>A39CqS_l6N({y1~wBYS9O&Z@-_&ZILPFcLIHI}WrNejQl)G>Q5E{N2G>xkbHi<3=w=i?_ph<21=n9r)K81!L>cjsWbajDsga6s-GEt3z z|C#Ad%||bVf5~)NS3Vq}|F)*w4EYJ#I1c}D`ftO3jPaN2fC+KBR7@iL!84rpy5uBU zSfS|HRrSpc32Z0no9ok^u48BDn|sq`&6urk?lMe{zPT!yv3Kg5z!}ou3-nFV8BTVV zoRT1zckyK76k2Wa44H&;I%2Yzp=%`EJ8Om>J~8&su;0|z+hQr8YA1}!Go;{?;E$gv z<&^<{+)OFoZ1^K*+A*iGc+j80du+1hURqC>JE7MYVW8*jKhu6wU!R|8f26O2X3E+` zzXp~*)Ba7f;WMSd>sP_DVgC%+{F!zqeLV_0`dVw2jOq%H!4hZbbvRliSrS;41vysE!x2+9lKvdhbd&fD;7 zwqlmOTwnJfrgP|kn8-h!WuFF$`~vaSKrudShJSnFG6H(LVg4L~?u7Zn5_ID%J6)so zu&%G);9j@(;AgQcb7BbhZi9I(+l63yejWiCVh=wr%+X&DwgX``+W=dbTr41DWVuF3 zXE$v>@0sWEMYpuD1+u0FsDaiFORe^-_rib3-}>27=l!jtmRhEN_gGlyx#`~po`F_g z6E($pBSszeWWYPm&)O2B-uJWq9ivY9Y2lxK)-SQ@JAdojSas9ix)P&iS=M(kYHL7C zkOf67yvDz}h*cP)ju)|fTB(S&Jyy*sYP}z;=0DK`CZ+{iZ^x;(1Fczc>PVnAdO6Vg zPn_CQO#6Q*7WH+U`k}b?Un`z+K2GJA(EeXbSo7+ssX^AgIJG~>+E!1U46@eLQwvLK z>H8(E6;G)hC9UK2)cRoU&kwei`Qp`;U~6W)$}VMHucx+_iiKcSh;=ev<%C#Y#;eal ztc~&NKc%f#pHg3zwr<6%wPkeR%Vo6DIic3Yr_{<&>+n-*bEviTDfMQUwWPjU8D>qb zuYL&AI(NdXAM2}yWvzYn)%#_w4fR!FS?l!%YGFC+&-y;~ZMifk<(0Sc8>kEAtuGp= zzsg&y8>l@Mbl@Ki0^q z;M*!&D;uisD_d_gRKHfXZYQYk!gDSsn)N|rpW0o` znwF@JRkMC=sQwvceVnK^L|Mxc)#WIN)q^N&VPiGFx|Nrx?pN3TccLx4D*suu_1{Ew zAlf>YsOHp&1wT^5I@m~EtzmuMNKLD0t!ktSYg+djsfABk7aOUcp44H#s?{Ay*;3oO z-dG*2ZT;9-RsFTLwXd<-Q^(raM4hW+{j-U>U8mBVChB5coz06)Hg&z^IqknG_Nu3@ zCuqB$b<0n^q2CHYgWS|I({nMfZz_fc?e6EwHJJBuhso&)j2UpB;g54@cY)Uh1LWR; z_%EM&Wyo9c`q==_!VL*y?Sea=xQNlAqHcmtbKTFg>)rKKiSIT<6w1^1<)V^?io6fz zwF0lVi`vufdSW~|_67v^q}qq?dSXl6E+(PmfBkkqse7I(Aur&pM7tt#QNd5zt?qd` zMW~tr3JVK|Yo8zG*Li>4-f+(|(C_jS-h~^yp_}6Fd$Rq!ajlWLaf^$3H+ymx@A8(d zkdGn%@9rtwcvY|p?!5S>Hzxizb7E8`Q*3I%@Hy~!RG7M4)b8r>>YPpWc*lEo+IKwO zSl{aRMGt!+$KkJ-JCR)3F8A2(I?fMS*O5o=kb8_^j_Xf8mOO~{@fZ2@ouU^c7u5}A zq3tXX?o&@vu#$o=M4+(YbzDP#32=)%p8Rui8hU7_2%4mhAbOW5u4RI@kmv6fuIDc- zckon?g8R94yq|YmJJgD3@c-BVU49jmX#+<140t3W>iWHqDiri5zu4Zs>F15{mMd;Y z`lG(mzZL}?S2}JnT8$2W@jJP%O@5R-;~9Gz!c~YlC<0@DO;HKAtfrl(<);Tp4#OF~ z!4o3SDq)9M-WcCUT_2YpqI_0W;qNhAi$DpN{LSO>O(d_#o)kj;HRS#DcfH~IlOH1w zN^!VPnHpEdC26)TX>xLzc4*bF? z5o1~7xNP#sGjeZ&C{UO*`yQZbSqPW#IcQXy9yc5WuN_)Iqmy)l!BG!D2>kIOs_;WJa4I{6H zu~XZhMmwef_7onXYI86!W9#;X^NW`CC6tn2b&5V7{W$V~UcybN_sJtqOS~Nz{kP=n z+5b%TN}z%2WX%o{J9yv0ap}T+>a_v^E#!iQg#?IcCjkbKmn<#q>{Yfik>V*MxQ?JW zK5DLAE$TNVf4a1A)9xpe*K}$LrD}$@EfjnqJw=tFp-^~q1Y4rT5X#?ijmU!z%Drh+ zJ;>Ko6n#?>Z-Ga6E2`jN=_nXDuqDO6j~U?5PhzNxT+~_eabaR;F?m}wZk?demco&4 z$7L-X>0j3O8>OGHx=pfTQ1Uv|xRavYo}ng_AK<`*;& zOn#TV&rJbC$va`t)g$rd7X=KHVCqG1#M@IPux7?Ezy~5w%h{!7lAk9ZRz@sbBQK9F zu~U2x1em#}oxP&Cx2$J?bMbAaRu;2qI_eqn3=VW{X!SO^S)bM=Z-fS*z-%ELhn+X`;BnZ z4ujy43atvCHqg(d(UE*m)5jAshdi*ca8m;N$XCY;Z_I>Ls4Diu?g}uif1vPID!8@; zFk|N;1~|yBX)5Rs@}nGUBgLMoV3#V1$+m8U#8bc$#jWG?=N)wZf-lHDXLyxrpAGVs zEkB>)a}*~t*r$$F-#&^Po)O-WV*N3QQo8$$@Hhl3O2<_L*RiFrGn?_ZJNZ$zUelg( zz$3JsNn)o7?VJ()6t$Hjm+5DfFpcX7#&nPXrr*pb?^a*9ne7k4BNhESHBN9OPGM9n zqr~FX{Q~|=-iv$@>mh=C2Ki^?7^WO|iTwWea&Kma($yXNG0Nkb+`5WDjpH0<%4#jR zljO>tXi3@-&i9{7-c)aJ$<%CWnEhZZ6SJTEfPPmI&J0I&YKX-&{Mj|_OtB6opU7c? z!PH@Lv!68mx>QYO>iL>t=xN6sRyZP1pRrZ9Cf6^bNTya$qmyeY-eoj=C7+Z;=JpiZ z5wwv=eina-Lp#%mUL;@ZYFr1%=ix8-XlG`Y;s~hQ(1N)DhbcIAV9D{uuJ!v||R&wN9||J1KsX;#Le6 zY2VOR+oHmCitBwX+|>VQ^7RcRb>Kn0x zvD9(X$wOK2rnw#_PvvZD^iK=-siKV}U5#j{8R}RkDE+noQ<|@nw|ZXm&0xESJnORP zFQ%O`aboA0YD`-kRwMNv`jD1S%oaE?ek~LSjPuQU_ANzD~jPj7j@#VBDf|ORhxYC z0|6b#p97a!z(TV?)N(%0Csced*HF+2-&s6pz;UWKL z@p-^*S?9#`y?s|Q?btXg(wL&z_E>YCCJ?ykTG_>O5U>lU#HkVQG%KA zRDae*H}%Fn#m-c(T=9~l6HNx!DrUjfjC|N>(KB}XgG(3qh#EWDyG?Q2Bp<=a*|gB= z$r6)$2Ro9y7U$q{%;*Q?soVl!N$a>n!hI?#P_h_7L5XK1f?U_I7C~OKt>~M+w2<6= zdYVhVw1Mbn(0&=rHM&Onr)%!Rk5?&3rC_H=0z{C%1+L5djky9ouOQbP>SuAzGy1<$ zKRQ$NxW!a;Q7Jm&F?WSqI+}j?mrKD|HaXL|FOd&n37NiHr;Ql89Ih>(Ejj<=u`#$# zsOMP$>Es{SE5flj_>#c}yXMehZN*$(q3FNGU}@whSaYUjEF*WH%kL-GeLV9rq2_fthO^w+6;vzouQ|k+7W;v{ zOPkX#Rp?-Keil1}Xf6`-spj3d*!+xqA$hG^0;-U&wIizHh~|Uf6Y#$DAhA5%T)|gqu3A@toMn;kw1xX-&SIM-DMMno9WhJ_YWh#@+UYYUo9O zI2T|0?qYU*Wr>aho?1tq%~gDeq+VSocb~Y&Juh~~@!X;X_2-bUx*-6K(s5r1_o?nr zO2nVbMb&yi3=N49fT757^T>CdlzWq)Gvt$4UiGNo0yVG8-TkO!AbFpG+CC}@ea~@w zC~%*nM`4uHhH{x8oBFfKSM`yEn$En9{N0~Ku@3c%_YymkIjT7&f%sKp3L>2pJzClh zB0tO{q68YU$=$~_{%I1y1pLKS?VOf?Yg6)mt`;~LJXAlVDfjn>Gzc)&zEK^+_F~BO zsmeS)g!0!$;a1Y#N-hVY1*`v(@4O=*g1n90B^pCQuilcpLw=GxGbH>@Uek3@Tqj-h z>u}PV+2seX3 z{S49X#QD~=#nI%+KZw4rUG4szA^QK|ylKYwkW8ci2Ug$L@Rn-uB5rg$o6K?;CdH&K zkXJbC*n0Q~F95T$lYFa+@%a|Or)@m*qv&!$t z>Qq0HU%M#bFB?1k96K>;3l|ioL`I50O=JXyzXL91@98f|m~l*ORiVjFoCCa8qh!2a6&1(Q*>`YwY``g)g;N z)I#4sPqF)GCIHI}ovt+Q_DeHeZNc@>lj?fUq9^%M@}ku5Pdo9~1ej))Cp=xb_fmf` zfcy9@D_KLcAkPtA+w1C?1=@pC`}Z z;XkH($3=`5`!%@@2_f$zyp?jF4NqVI_x@xvdGm5ol%X^fX77r@dCPz?5>FWp2Bt5+ z=ZHP$or|S6@6z&n!>98-facy2t7;v&|5>pg%4qV*kKGecjQY*TNgqo_-_%Zj21~nk z;M%@>WM3fMr`%5%zhHo8nIKb8zmosS1aUT2VdEu&6-wk z;>ZaSjr$?-Q1Vr-KAvqK*5(dUJnDO~V|t?BL^0QaTSe33!pYBYQZmJxY1gZVv3>)^ zKRG)g{P6{*uEZoUm&yIQ>0jf>Tk;gZnA=6({HhpeKs$eu&tiWxJZ-XL-=}7{vN;U` zeK<1#ldN`c%SF8_0aRB`mMP>{$=&4aPu0?2=@hL9Wutsy-Q2Q*zzS%xx-&hZ6!Y?>Me@w(tyc)9PoEkKkP0T+~$_c{}cF;>n+w>e#8J+z%PUM4;;bC7NF_ zKo@((Q%G+=ipyLUZaUXa@@`Lg96>V%yGwrlD*<)ML#AN}!S2TWK2tcj&i8vfE;a2f zUARv@wn2ljxeO5GI=wqU-kTFIHtvo~oGuZ#7jvV?-A|bokjr}vs1?(nuTW5gTV#{c zx-%q#2b?<16gijNyYNB$t*`V+fy6hC89qlo_Jh>nHnuI+e{&S;nQ`J^x$#B?~>;pcs%5u|H03buj4_a zi79H1*l*lPa%vL(f^eUDyHFx9L;p+$2s!q6#4E^Gxe|1Y{J>e!e^M^$K6zJm^_Juf zUX=vh4ABYlJ*xA*6u4giT0;H_cNvXn=s0;y^y4|J{+dLP#s__Kss9%FV@KzRU!A1j z6Mr!@iUI1qE{2+Na^!ACEhImYDf;E8e~i2Vw@FT;f-DFr&{cf&q$rxXZWwr5EpWg0 zvy1`UhvUDHD;|!gGUCWL*qSnj!KW?8v+}x7<6q<**a}RN50Q^z*~U}9^qXQQ=%xVE z!3Ww?6ERS2fp`UGmVyaV0$(xMO$M9G0nt=d>|0{49mi=iye}p1#@W6N?fguhc2U4W z^5^F{c6{m_=LubX+MN)As?VnxW*m89zC`@l*P_=#E~+-U`{mtC@(bL|n<`&UzQkF| z*TA<#XlOqLwW>);d@dIizrb|xq44P{`GBt;B{1YS=1Er<1$icKDa@7?oEbn#Ry22Dr;LR2drTw1`Q@uT(ISH_bo4%mZfaWDB!j>}=> zm&vQL1)07$)^_asRB<*@BiJAUb>#)g%0L>bvQ!eZfYoHO-jTdb1<~i;RQ*WqUON6s zUdyRIwA-4DpvXTYf{Q)HP!;kHpED;d`jRj@*6Re1`moeWHjlM4kW! zER%>2aW!csfHZRVn^tqllf9A>Q>pvO|2!)Zn7zdf+tUnVMRhDXb$edV{FN3h)t7wL zF#)5<_mJP<8ru|j&^uzM3SX12Mg30X6WIbxvOX3brvCk%XvQ+YUI=9S7W_{!S(LjR z6SNn3d9FUpdTSl|)gq6Vz!~!66(8qimWzEa+lXnLF~URet!fES$K=KC(i{)sdof%& zhBIw6hdiDWRb2+VNj{rHhRH{*e@Xm*UJ^xPXAZcOz*cH3;*5fk&2dM`-7jT_=7>f2 zhQ0xKFix!scseCkaKKOfo17|#Q!oh}sa*IUZz*3cb=(ahYK6pgkMp~!@TTO!tc4b| zxtQGjDE%mT3Qx35>4dCw?6*>XvDi%Uv=G7nIU1fx{@V?Su?i!;XxB?ZL%&0D2FKOr z6nA}B^0DTW0F&O2$(!?l*hK#$IevKQ1gJ(kRaeQ$;9S>3iD+>-!%4 znl^T$KEWjz{ouOKSW=?*36(^cK+%NRX_o zW!8_AUupJu7R!Ah`nT?g;RxFA4~}|tR%8>XQ}Blf^%u9byGZ_mYb8}g(LrWwE5IFiEE^*d}fln*UWk3?uYDUw~L*8 zo+Owye8+NDS@xlJ_-*Ga_Str5@5`yXl`pRiV_K{oV&l(tQpUzcC-Qjj<9s^#zj#Vv z^mEDGFaFfp>DUib{)G}_DkJU+fiq^~yAmtfBZX@;K&$E5Su`xx*q`9KHMt+^R@^1r z{qEO5@_zA>@>XI_?I7RArE(UL;ra-Dh0A$TN?M^^T0>eez9Q zq|_k4CfujqyDelP1p_dw>IAvpkIo@?ua1t8w;CuJs6so1MxU*q0r{kTVqc#641e@6 zZUqJIBZ5oh?!I3i^R7|ck}wiD8kujv zr)|IG+Ql6pcR%P$$dO&n9PV=1o>bAV#Ln(MLV7W#XY9kB&;fc;e3W~Q?-_0<`Em{y zW<(Fo6La_Yq}fbKTF<(1&eCka$bkn-t7J5}Wn53);|(l2&M?7aH4 zq$PndbtHH1ygvd*zV)P)xtBVP3nY*kE3cAgl@Ob6(Poo;iEAGh{D;X`8SXmFxo(f_ zf`;}4^mJCU+1X98KTkfkr9=}$b2G^s^8ryg@}1=F4{!WV?%utXJEF51oT3iCDi-u# zy3(#b1UfZHB$ld$k z+vF?%5c{U@wZ_1T6eBn2RN7ULi|S?H=!zoF7P)difqI9$eUcP$2!q`wcfY(I`JLpW zCiSaPe>VA7d>As2{8Qm6>Osom5fn0j`>liS$0UMzkZTtz7xfyr6mbqU@|aVjaf;l% z<-Ses{&+%_?o1beUo%OpQ_K{$28bI43LYfcBWQ>eiTCmY%mQ(teTU%KMm7| z+cF>UkvaFNpPW^~Gl;ro9}?f>Gl-!rCl{(o9Hs@*vC`+EtN@YDBJF75pZ+ zlR*5v%@v5S@?|Pk;?bL_@%RGMQ>VeFqu!3BY1cw7>c;}%?hl4lI4eAXXY{5qrjqA( zloA6a&V$-I-eU4hNQdcQ-*^F|@Gi>Tr#nFxB%J$9;~8@I%P=#@-R};qCvVH= zIdz%d`@&Pyb)L|fnY6)A5^+~94jMARNb+FzW;5|G19wJY&ki{Vze>d$t}(IcMKOGk zPp-@$nojQi#m)@!F>z93iA>0^DE3Da(-m^}3zyM9i@y8IXzj?|CvVfq`*0QBk~#Sn z9ND!8_QC_5N>{{aAD-izM9e049|xQzcdtMbe-S&KxTLDV$etr#gh;hB4P+&_PQ-ta zh`@bR@(tP)lID#nUT#$Xj+tZn4oV%GIidfk(dxyX^#^9Y+<)+3d&95Z$W57pyq@CL z@S&rhdD#wr-y3RotnSyw-toX&eAAXO-q*SW4;VbG-`@>vdU~I??(|K=+WPhJV3axB z&M&r9POv1%TvP2*?SZdH3pUpvy9;pO!zaKs?bq7-B?JaPDQfthWghNJneSYhD?WeO z!O!QZYR~WB7yCp~Ytc@!zv|%Euv7+b%{ACA)zL3D#Jsd^u4gOST|4^41e)LfbsMtj zwT^xPo)WbK#hmm1{0*h;^_~2J1I>3kFWzB80+ku_^5}q)xLMyv%XTOGl z<|B@m@7S+F{O|*wx9>^2ziuDyj2z_HT~hsg-rzL*NGgmDO7l9g7QJeRbn#2@j%Z`I J>*5#v{{Svt31a{N delta 63985 zcmZ@>3tZ0E|9{T6rzEAKyGkx2L`f{yl@+0hwDA^0=$!Z z>*Pl1S?H*+tyots%FR{wvEt{~REIKWoM3xcf6N9*=T7 zpQ88Yan%A?3?Jd_&o1(Hpw=TQJI&AI_fy$#4rk7hyu>+x&5-?06P4#VN3kpXFvj(h zBihN|UrWkGUeCp!y~7XJ^k>ep><1qHtQVgHdUd|8nm_ZE{pZX6zsc6Fyrru@GxC<` z`HIvwn8#O(WYzc-{5Hr@o>H&t{5&}HCH_lY1K1c@tuBZ6lpUt>5nwe^GCwYVr|`oy z{MjO@z)IQkb4hPSYVfe?0jwd_xvOUYA6Gq!?Uk)zQu$71^+@e~qz3nL3t;!8ii@PY zo08)++4~2Q&GXTtR5}|y+#*?uG&e&2-Xir~B6ZXxmzAU)&#Mu@JS8=V>dwEr>U7@x zE3Gz0dt*BEq&*LF58zRl44vdvQ~vgql0qckyZkHnNOqX?bUy2>)76q3){;HWIhHz) z^9W#DrHu=u?uVp=^KyaCMRSmg(L)U41Oemo6xBOEb3yFq-It?<#ttnSO0&w%19$ z*!_tXvop_krZ;zQ{K!CE82(H5)yWkehI(?N_iE^Lp1M5H=!fZ?bo0&aaj5%@AMc^l z)zGap({_Ed0?XD_x87Wz9yA^XIq9}q$Ghpqo7;%rhzbGwYwGs+>I_oo8mQ5pDTI?ZOfBZA=5ju++Rq00lQB!{poq02$)@uA&Q~y9p-IkwXPqjE`CkW%s zoB0RMwKM@w*tJISp=gb_YrSIEn!n|DLm>gA<0 zB>gAz1I_$jddF^5m|g1_J9-B9j_~&=G5ZtosmtIY5&nT$c6}^~fm#iGEBccR%TFwy z65-E{5$+yN77{RtuLCupxw{9Avizj*^PnbyYKdWL8OK?3f1VDio24T#owo$F091E7 z>HIqOS$&biJJ_pnaP=o9^RPe7r4UcpW47Q`XdZ<~U^G68p73m)sYS$WI*IJi< z5b5tx&#pC`$4C0};z)Oo26j~V8&o5xFWFJyZ%_lG+&voGQQ>b;lR#}^M}@zm;BQcy z*-_zdPzyk9ZbyZ`LA?^?9vEpyU1_IxOa3g%-y_L3UL5I|lv+ zb%-4m{s#2~s6*|j@HeOxpbodA!r!2Vw{{O4VMlc}XC;dBk-S%H|G-gptpRqeqxlD| z{XNFowZh-6;qTV&9^>q&@HePNP$$??;crj_+PHhXWk-d-K}~Ao9{9E$b)22lDg3QA z{()2NTGQ=Xr}IzS_ZUT!x*62*h#Ap;itOKd0{^LZu;zQ1|JysH$p=TUVN7o} zFlk=L%_S%%W#5_Ro|Mz^F)GHu3X{n=+GH{vcOJ-J=`(;$Z!?;lwE2}oyNx|H)4}{ZgK?sjPFf;8IL!ACBMWHc|hOBY&MVUo9T~TJ1IM>OZ~hkB4Zyq(>^zNtJSd1oZwYT`H8Us1iWko4)g6|3OTv zQHMtkY=p;{*9JCbr}*rFP4GZaFz`2z?*fVM8ItEQov(eZrN`$s%Gme$_1FB_LjHfR zMTVqGIxM(p{Pa(V&T-ydOk=;nw5{gxuTO6A(;rf!C^(t;tyWbpb2V30ACiJ-oy~8) z-kQzgzA1@#s2q~gj{V11r1WIl_%A6RH8cKhGTn2dNbQz=G%5Rgc*er#G@4Mg@HxoW z4r-!dek=Qlo9 z{-sC}7+yk?p6mSGZq@xV7QdpF8ehLB4M{QkXPoj+nz`DRH%x7y`QpKILTx`Cy55T+ zcO+#Wv5ddRr=~{Y!E1eLyO@%%iGQLoDF^?cRxruQPP}5Nr>J__y(o;nLOq_m%e{s+ z@R9lqEK^h&Uc=wz2gcOlBZp4%xLM0;&e^y4^`X%bl183ZF=BmZ+m2p>DVp)aWSs#S3nf@Js-kHubAbEdq>+o#p3?NUgTQez8> zsceem1U^2k0ZZb!X)V|UzCZ0)18gBu?c9MSNjbe>vs^5zafSxDghub-8%FeCZ}EpC z8nABMXJj<<<6TD%MQ-_gWUBxik74o&L?Hf=@1>W|yu%-k^wp}};nhY>V4e8XQA=4m zcOKo0MevrRBs=?`TH$fmsNK?61>Jyzi*mhQy4VTq5knKa+Ca2$=zCMJDE({juT}Ee7~Acc6vz z%M&8O>$!;;=3bL;n|s0QM{mk9dY2lDWqDvmP8P)tI)gUhU)gSe6yJYc$r|bS#bqW_ zR*C1blFX86Uh(^}P3ZQ~-cnwZb_^1g>wDJLeYosCZJfDfudO9fwe&W(Y_hd9Q!O#F z#gOa!k*&#FH3gXm&9b%p0~4}JrdLBwMF2Y&lTJ|aU31UQww|YDPi29B&T{gtvRj&6 z^oUZ0d6d5^Ggu54cEfygmXo7$vgAyWx8`72{C*NDy>ZWZAL$|4pmoR%lWE?6Y`SxK zB+_?6c3D!+K;!77W4qt~={_gdK&oScxR7@$@m51ddVz!%k|Y?*fkV+xI9enx%X z{S5xfgg}E4lClp3gK_rP0r)*SDMv5)(z0n;f}BzUYECZo*y{v&Du|pP)BG-{HmC`y za(Z8el^9Vbsn$@MBLi-^qDpq=?yf(Z4A%ZIbkKDRw^Cy-S~-+v&^5Sxv5y&=}ErL3M1AAGjDo;wesG9II(od z_3doqy$5_Ke2KRl4&I+%Bi^2wZg39B8Du-i56H>6%Vm`ulI-EL&X|Pd+!~E{~Nao5|7_#_?pU zXVwzcV)5g^*U3z4RQ1L^S9u>?-+&fpw_54Z+`6LrtJSR9ef^~3QpR8yixp*%OG-Aw z9bKRyEvfE!&?NVo6F^ewVemKYCC)TgCb>Qm^AUUK;&DQ=y2AxexN3cohwYZvae3;) z5DYK7V)IG8i>d-%GS^fUwfq{-pX@VqAD-zkay*h>c2TZ}|wD~;qlFjGovaGCx+T&5pSx!@>HUK$au9$x0N%M|7_{C~|+`X!rV=6&WyGrdk zj(Tb~J!_8OUrqHf?ElrK-wzjU`h6?QR{i#&T25CT)&%A2D#geZ^C`5qoJdEi%|LEN zcjVmIN7DDtth((^LD3+$JX?qc$&g5-=`$uN6)Y)p5aL3e?7EoOA-YlUXJ_eXiIrx# z0^lTFQjVhJEGJ6UMdgN+Zax}j#Z90ngRJY{%j2PEW}b`XG@XMIrRXYQ5rXSW$FL}W z3X1Z#kZC;;ddc1EW1F>0hf8$i$qDj%%d*wouc)fU^gOxS*!!`ojq?a8 z({W!sX7}X(_XQH8R(A?S=@I+opUCw3oN>`fRgJ6s&uZKjT$)OUE91`C%-%Fi8aMEc z&A7Lv)Wi&O?kJ^!Wr+^3QwXh}%k^$=+`Bf;Go(yM2HWOnNMn~m3WM_%)7$s^G|rS5?) zYGN#&%KDd_C{t=H>)BYYouyB#EiF=IcwLiE1BucvkI<@|!GM{qhs4Im<~;yHq+8 zj|8?<`krl4?bWOCoO+iltV(3n!6&5BcPjj+*)-1>Li$Cvu+uNePQMP0`ZXv0aFF1d zA>81HX(`7=oSE|r;&q>la9Ew|`jipCX|lqNoMbu*7S9S+>qgZB@18w9ynJSTeFM z&oCajHes!m8c_0uYp%e&EcUu#5gx=p1W~E+OlKMDvydOMaT7)w9mj3;2(`s!P?sgA zZ9zNlw8_Vs8PT>3Oy$Hl%?URQMFzF(5+!mMDK$o6FzygMvj!u3mJj;FWU6v!;E4|9 z^!`Q_`ah>EcM0v+lb;`*@Eu<}-%pEBO#Hv&URi$rrfP^=h4{!ZZBVJinlHG?yyoaId^YGy}CZ%tIq#m z-T(`u-2eIh_fATEe>h3{c0YI$y)IyNSCPFD^cShTjbd^A^ZjQit|KJZk==+Zy(?0M zYfGZjn@3gXf&W8VJ(5Ou1y%Z&pO7|OJV7=D?LUED=dfC<^xB|$Em6JRrCvGD_ZqHx zb(g&i(dc!rn~jlN-XTP^&7aCiu8u_Oqr4%_rUG;@f&dNzVfr~Hp>bDWME8Bbc!-Xq{INT$j%+ppFJEHty3*%)bD_ANi2-KFj%qt|mK#qT%$)s(LS$X=@$|+Boo;8I3k>lq*RGu-MuPss3gZ;VRqEPKYf8J(M zsQ-o|F9@C`M<{?jW}?mPtV1Vx&Y}pz2sv9>`Em|ORC2CjdV;#<%7(pI5W0i#j&xioKy_pfv|rJD|CUo&MWO@8*(q$X7a9+tDG*yiR+ zcDcThHtEgq!W>jg<2zS)8`NW@Rfpek{IIHDYP^AJj<1oNh5KLFq@KuIzKoFaJ*~)P zaH=8)fsB4SvOPDK=r{)z-6t*OlH1rzwkwU66T2jSf2l|P1qn(aHBL4A=Gn%L?Iqpi zZ9b?{H$+jmqpE?bDutufO;x25sQy<%%19Gv?0r;?{~S|C4?DwtR2JB4nCs!JG-*Tw zzkZRb75A(rZth8{4jX8GLNu#7QAw9`2FQ9(i9}sq?2MI%L_i!>zi-X`#$j}hys-|0nJUP_WBBZ)bvid!Go^xTd5N^hWAv}q ziJ04&w5k$|F27mZ-|fzSS{hn^P`vCWy=Yx4XUnbKUhXbK?`QSMWO4St2OOOJo2u%} zQ}L6kO4Z=6Q>rReMD>8Gl0g(u+fXgdnQq*m6|c+_ZZZ_TeRty|wePI8f!Ssk#(*6aV0qyzGCptA%ev@Y83;D7>E zwK(8oRkb)^p{iOO@V=^A959ip^W@|+gi)^r%JS=dpjTT-_FP)RzvBK0f6LjGIrS#C z28x^^cJs52c?yp2lg3z>T(+&GgJ6&3Rcd?#8#&~} z(TH5%ledW~6-kha(C4*QB`(X%Q$>lvHYGmCA0S|rbq;XUBGOTdIB0P%$>MTr9%y3Y z^Gl*M<`52ZmTu7WhrKpUQ7uKa{2x4cp-Vn_DcARj3=ygQ7m#V)%P{9U&)v>z<}>=d z=S@3{ewGQUibcgL(p<=V9aML_?Wjtafxs8AbHsEbm_qU6XIF)pz2jUv8bpV4X0_JPyhVh2ON+t2%m z29aacI#Mgwx3}aWXZ0m;3T5D}ACp z=#~JV^nhtOowY~-5`c~y(L_hoSk!amZxDSh@uHPshB*gF*X5Da)v^LTe*MKd6MfoC zmB^NytPYYPeH>e;GPcFUpLWaPk_%eztI!OiLCZ<1vZ8K;QVV2=q}HS^xgK+D!d9rG z6>;5*!cKq={K#WG_Y~U`AK#2 zefG1pJwWYganDIVqK>!JK<>QywNyqjK=nIS)zL>$)VyESEzZB3%-L%HF0+%>XP+-g zwX93iiSn>56nht8_SWFi1hjlPCB8$Xf-*dkck|7wg6c1msjSNCX>7A&WLufJF43c# zjrILqvT9i=&+LLS*Y{8cZ3|M!;4V_S>X$W+l*my4+gj84EL#PZjryjd%FtUxDV;*k zpuC|^lp`ifW3pt(gHMSJ5Qjj|^=Nd9y2|yxI2J`byI@of*ey?!zNNss@0bMrl~oqL z;mRuVy)(_lsHLj|3~o@5K6dVJa`1owhL-<}OB9>0{jQS+(hXmNu{EJR)+nv!8ywTB zQRbs6^YDI|)rj5d48?b>sAXs(kA~KK5x3JpmA;sEXd!)`>suRg%vx+C&sq|BR*ISo z2{103;?+7C7V05Ib)1Z9YBExIE59CZOmsP70&238bXhT8V=b(J9wfgPSS5l&d z$z8S7ELHy(@hrP)osc`N<-$mD=w%eo^QYrFo++K1NzINc-V2Mk*V>?v z8{m;6MZibv?7{-oalGr=Q1=TmM&&Abi%(hW<9^ykn9V<08_=hTdgxYbrqmc$DD{mq zr>B;xDq{^y=gLW|62x!WSSH7i&ti_Khi41VtJ@_{3zK`$+Hw(-Z<+q>{MG#W8sE+j zZuHaM-_8yBfm)iZRZGI~@)Q?dxXwpwt~&T`=icl6v}fDsK1RER>}MPR>^zM zRvr&Y>$XY}*<1OP^?}-?t+MB9s%IzFvytjqQ}(R(cnhSs=%vy>Z6Pr(zrdH}-}CdI z`Dz7{5>yDvy}H($IBVdhZz29JX~bi)9FQmnXuS&g>CXbSTB;UQxO79HcJoW(UhP-% z(q&Bw+#*RKyNI*_!Dy3Unb-HeICvL%nj$a{w8hqd^U+z{kP!}>hm zT)A0#>F#Ff!84mlF~1HfD_Mf!Lo%v}Nj(?I9@Uo7jASa(pv`>U=YD=8K(eN?Qlqg0 z-LtD6{%TNN8sw=+x4)o4+WoD(#YVrNU0*mFWm)k1xAI|V&io(Ei?))wdN+vTQ5$`< z4qwPgZukX_(%iqG)^g_gVq;RX3mY;JYf9iO$C0t-RBwF2SBZSkueD%0k^! z8dz$axs~T{su%XMqK28NNe~A&#F?vYxAI$?{Qb|th31RvyuT8WQ zO>c;8P>#Y|GXGI;xlLW##1jizX&IaN%z{uYZ4+Mw2>XKXEeQ7i1_PfvG@kyF|6WkX z`{72ZMwxlB9^S+QzX%U2QdEns1*)26*7dytKH>|%dUG6y_9H3EPeri8_|0a%@{0^Z z99fjRJY4R%iG_HbYR30gPkA>*F*mVLC0KNk4*O81Z}g?q_qo(h4o7tdW;n-r8%Y65SdbE?dg7W6cH-gF zUi%anl$6`uexh!ix2oSH{6!PBR_+-}!k*7)yww@sZsN&X{0)CfhuSm!#K!cS#&{gb zQnM%Rf?pfSSyL%RfO<1U&A7K&{oQA1RFay7CEj}BP9ffm4D`})$TnnJ#Tl2Wgg+Q9*(S2!Ma?- z^N<1OrLecu-Bn=>*v+e`?kP&>lB&w2PIyjyo=tpvh<|=kzmlhMW!rc84z^u0uT}#s zOz7wF9QRZk_ZtnLH?Ff~ZZLSVBkwujUEWwPuZ4z9q`Q*mj9DXN3NZxvGMaNeo}RHf z^KHm`-kLk|RIaQst#z=*%WRF=n0O0!EA!Jf=CvG*c@t?A7R->34vO~%N8Vp!k(Cd@ z>dbLo^`<#be}n=;K_*XIDy|{tSTSjfxzEmWCxy(5wbxp{wXpHn(G%2UXS4&y<>n4~ zD%(xhlBUI}X!~fY4Q|AC)(xJIni@Tw2^3~)o z&6IfFWoPqx=UYK&j&eed`EMj>j)t0hy~mgBjBL;wVWfNyR<4Ld%hO1*In;et^Se7k zwMUHW-4Ov@g`O@4M`vJgIemLUmF6TG zcHRDnuGmG%VL`DpZ0qyQI@Rn-%^y79d~OwK9CQV7Q{L*{bJxk#d;U`y; zWrp*s(PsBrg=|~>A}${~60Il6x2w=C;rMzLdX$MGvDEkq=;nybT;q(>^pe&5yP^(t z`@+XqqT{HW{Ifcbx~0~|SU;Fv4d}B{p5)ZuFzyi4(fTsN5yYfAYh#+sml=H^Dm!a5 zILtaXsHja3`)bXeC>&G;#z#RNTxk8xrPKnAG2`(a0S0 zNMFR7Tz%!`SRBwc!+JroMjdA}kV~9ONPT%snH{MhA?DK2gNz9YB(&v9cmZVe^34y)|A z?ON`j%rT1Ik1-W$GUZ>JlpiCH$a|eP!^pU{-R&5Rc4Y81Ce+cIBevoAVy?ZuNl)cT zMH%DgIJz;!=g6r)NEcX$yD^|R%;svzuGIKc@X&q!p$(psmu-{xh;QHL+f|*rl)TJk z4(2YWsLoByKS+0C6y|5-r#9$|H{S7Nm}ukGgLnniw9`FY@=DC7aly;@jeY)xpQ6Zf z*65CLoSW?)w$@zVFX+Bl1=F)wusC1X#6{=C1< z|Mvgr|E_@sgg!sumH#oIEA@W>JE|z;iT>rdNU2Ky=c5;!XF@!eZ^TnU)d8jdW58Jq zxc6QasjD12C(01ZBBI?zm`u6w*~>NXsol#~4$9Nr(NLEf>~8!l1F8|-?)AG2@_abB zo9E>%Bv4~IEzF#u6(^5~5xtn-(nD`+<;(b#L$9%}{KTO!Hj|ehYTRc=mGoJ%KD;DIyUF?cC8_$R^K?3Ks}ZZs zACxp;(|N7K?X|5Fc%Q>BYu7^gg2PRgNNgN;lwtr%>s5 zQjYT+Nh>va=gBTlURNV_yGjP{SV!EF4RiqX{tQj9|}{LOiV_o>@oSqC^ED@2e3$<`HFT#PtCdL;kaj80%aVs)lrvLlS?b z;k~5cR3@uG#1pG}5y#ieuMW~Mrbza^r9{oO@_uOMo#Wg{((tFii+RaWpN`Z~t?@Gy zRt_&aIvc;GW*J%(v;*<&DFDt(R?Wy$k(}f9CSj$B(ild}(P+7|G93UuV%Q2U+(B)vSky^dov3*e_hBgpPbG<X+2KIi9$5j1@{iRUQh zXrsAl>@$zoJ@3cn@iyn{g3oK`-_~9)j0_BEniyi)!VV2~V zT|g^rL$g3?n`oR7Xz7$Yi{JXbDVxjPF9!O}Mj~#Wl!NctkXFbT`+F{Le=)Ecnn(pP z=M`3$C*Sna*3aULE(W?Nx(Mman%5gjW{% zvg%;EEX%aKgUUIH5Q`hmcd3l8?10~Fi$+HyiJH@^M3Lp0V9zv3F1G9G_dfj5!4i?V ziBdpc5|DkR6A73BR+eV7<+X{8N)ahikfWsolzJzWAD3M7gmr7L1+wWPtpoEFX~Xah zu-{+Hz_-4T^$V{DqD0moyS@Q-6D|KnAWB60>BjszGe}yg@wg{t46?GqoEoCv;j?b; z!8fSTn2BY9C}GUbO=WeN(^M>lTc;cGKW_bB!*`yuK>I(d1z)1oxO<97^Fh7}{iOuo zWpeWu?u2I(ETuX;@AeQ;BZ$@D%kD%o7hZa&p}z1AW|HYyZLQ$W3K!<5#l6k*%6;W} z(W-}VFJrL2YY09Z8aA>CKU3kQi9dK*MS%9fAAI}WQ0@9{QC5%nxlNx09n>bBrbocl z{B=~!o(H5C_F?lz`^zt~Zp1x_{8pASv*lAJ$Rp$Q+D0*+fBtKPKKm`DFTTk4&tF4W z82#2>!xP+h{@henQ|znFYKm9ln6vhCZGPis0M9Ts9F-hQ9wlj#d5M{MmLyx3*uj6K z4p)>;GCnrR9`*tEA5k2>?!(#m`b7IoqF)b}h$&92Nyi?3Qtm@cB~~u3w0&jW2t6J` ziqWjcXbb?)3fotRI2%vBDf6L7tIynd`WZrSuZz=>e5*qA?ayk9artCschi|`9o45JR&&$iMN6*{vALZ825FYhQ9UNR%{MJu<5X^u3tqps`5B%6# zOAqCtWq#U;@f2=axT>X(r;zjVq}@3OFHxx@l#c&-Z+z_n;_nc!1-#xpKR)?l4KXQ} zx%h=+lqE}JDD1}jQ=vTIPE$Vk{^0)W{iRzh(}U$MlhtKOMwYaGO;Gg!>WBlJ!!&Mx zuHP+xUhVgA_6Cpo{WUh0fB1VF{66@5wEI|^VL25$#_^}Whq%C>#17GJM?{6Taq9v{r3Hosw8VdluaBaN3l7opWCsQ0|1aYN!$1xsTu zi6}pOd-0$@X1E>rh_o*?CXV7i{t-Jw>Y}y+W$%Ph7%6j^)nI>cv;@x(+%m{CY{}^O zkn^l@AWW1zPXbvm&;Ku4BnKenY_FKhh6uwe%%4|2YrrS|>x*h!7`}Kp|KGFV zH|5YPeEXBbY|zdr|GmlB>-_rDPqjiT@ZMZ8x{VasNhG6yKre`l#drjJn@6yJ1 zlOy)0OMjE;$`{ycFqJZWmC=+||6cTUVgX2QE&ufqvz=J5 z{@?{m@@#y9lBfPqUl1rQXd^F(3UtwymCCG|+Sig*^&-0)tEKN&7df@>t=eL;o`u%m zD4)maAc8-ML`&67aWz>K>RBg`&D1Yjrmfqd;y*nLbN(IcE{}F6UtafWE$&(7q1_LX zi#s@(mb3Rij?38?D)OD#FzvO+Qn9IhEVc*IGxOf7qPq)gTI&^|5hYtrXV>ATgVh3d&=X2FR!%QUtjK$E%MT9WSO2fIXZd@0qlnJv z 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 HpSb@6c9s~< diff --git a/server.cpp b/server.cpp index da8ffdd..b2543bd 100644 --- a/server.cpp +++ b/server.cpp @@ -38,6 +38,8 @@ std::vector playerInfos; std::queue logQ; std::set busyPpl; std::vector> players; +std::vector> findMatchPlayers; +std::vector> reMatchPlayers; bool end = false; bool lock = false; int total = 0; @@ -262,7 +264,7 @@ std::string read(int sock, int timeout = -1) { return "quit"; } - std::cout < keys) } } -bool game(int sock1, int sock2) +int game(int sock1, int sock2) { while (true) { @@ -335,27 +337,30 @@ bool game(int sock1, int sock2) } else if (msg.compare("draw") == 0 || msg.compare("resign") == 0 || msg.compare("end") == 0 || msg.compare("lose") == 0 || msg.compare("win") == 0) { - if (msg.compare("resign") == 0 ) - score(sock2, sock1); - else if (msg.compare("lose") == 0 ) + if (msg.compare("resign") == 0) + score(sock2, sock1); + else if (msg.compare("lose") == 0) score(sock1, sock2); - // if (msg.compare("win") == 0)rematch // score(sock2, sock1); return false; - } else if (msg.compare("acc") == 0) + } + else if (msg.compare("acc") == 0) + { + // Xu li giong findmatch + } + else if (msg.compare("dec") == 0) { - msg = "11"; - write(sock2, msg); + write(sock2, "msg"); return false; } - } } void player(int sock, int key) { + bool rematch = false; while (true) { std::string msg = read(sock, 3); @@ -450,6 +455,58 @@ void player(int sock, int key) rmBusy({key}); } } + else if (msg.substr(0, 4).compare("find") == 0) + { + int id_win = getKeyFromSock(sock); + findMatchPlayers.push_back({sock, id_win}); + std::vector> findplayers = findMatchPlayers; + std::cout< + else if (msg.substr(0, 4).compare("gmNo") == 0) { log("Rejected Player" + msg.substr(4) + " request", key); @@ -827,5 +884,4 @@ int main() return 0; } - // g++ server.cpp -o server && ./server \ No newline at end of file diff --git a/tools/loader.py b/tools/loader.py index 7676c86..8bf9759 100644 --- a/tools/loader.py +++ b/tools/loader.py @@ -260,6 +260,11 @@ class ONLINE: ERRCONN = vsmall.render("Unable to connect to that player..", True, WHITE) REFRESH = pygame.image.load(os.path.join("res", "img", "refresh.png")) + FIND_MATCH = pygame.image.load(os.path.join("res", "img", "findmatch.png")) + + WAITING1 =( + vsmall.render("Please wait for the other player", True, WHITE), + ) REQUEST1 = ( vsmall.render("Please wait for the other player to", True, WHITE), diff --git a/username.txt b/username.txt index 7d11638..5da105a 100644 --- a/username.txt +++ b/username.txt @@ -1,4 +1,4 @@ hoan 1102 502 ky 2212 500 -h 1010 502 -a 1100 498 +h 1010 498 +a 1100 502 From 943456ac122bae9304e07ef1006e6ee89b30a405 Mon Sep 17 00:00:00 2001 From: lovetonight Date: Wed, 3 Jan 2024 22:33:27 +0700 Subject: [PATCH 12/15] update --- chess/online.py | 5 ++- chess/onlinelib/utils.py | 8 ++-- server | Bin 217584 -> 241024 bytes server.cpp | 94 ++++++++++++++++++++++++++++++--------- tools/loader.py | 2 +- username.txt | 2 +- 6 files changed, 83 insertions(+), 28 deletions(-) diff --git a/chess/online.py b/chess/online.py index a8624d0..9a36f41 100644 --- a/chess/online.py +++ b/chess/online.py @@ -10,6 +10,7 @@ from time import sleep from chess.onlinelib import * +import menus VERSION = "v3.2.0" PORT = 26104 @@ -35,8 +36,8 @@ def main(win, username, password, load, ipv6=False): write(sock, password) # Đợi server phản hồi "OK" để xác nhận username và password hợp lệ while read() != "OK": - username = "hoan" - password = "1234" + ret = menus.onlinemenu(win) + username, password = ret[0], ret[1] write(sock, username) write(sock, password) diff --git a/chess/onlinelib/utils.py b/chess/onlinelib/utils.py index e2b6148..f7ebc92 100644 --- a/chess/onlinelib/utils.py +++ b/chess/onlinelib/utils.py @@ -298,8 +298,9 @@ def showLobby(win, key, playerlist): if not playerlist: win.blit(ONLINE.EMPTY, (25, 130)) + # TODO: Hien thi so diem for cnt, player in enumerate(playerlist): - pkey, stat = int(player[:4]), player[4] + pkey, stat, elo = int(player[:4]), player[4], player[5:] yCord = 120 + cnt * 30 putLargeNum(win, cnt + 1, (20, yCord)) @@ -310,8 +311,9 @@ def showLobby(win, key, playerlist): win.blit(ONLINE.ACTIVE, (200, yCord)) elif stat == "b": win.blit(ONLINE.BUSY, (200, yCord)) - pygame.draw.rect(win, (255, 255, 255), (300, yCord + 2, 175, 26), 2) - win.blit(ONLINE.REQ, (300, yCord)) + pygame.draw.rect(win, (255, 255, 255), (350, yCord + 2, 120, 26), 2) + putLargeNum(win, elo, (300, yCord)) + win.blit(ONLINE.REQ, (350, yCord)) win.blit(ONLINE.FIND_MATCH, (200, 450)) # win.blit(ONLINE.YOUARE, (100, 430)) diff --git a/server b/server index 10a3ec0053ad2c50ff02a0667c88007aaa40644d..259225432a867052009509fe4206c8b5fdac7bbc 100755 GIT binary patch literal 241024 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%0D=8? z6+XrY`F8E#hX0DpttJ|xh`Sbg*xDG(!KQR)<0p9{7FW9vk-+z`6uT9<)LQawR{L&V z1hT{S72qb#8`tb;W;v^z{l**rvlDwnd0$kqC+Lmy<=Cq@m@XWI8@NCwDsJ4cJqk@X zY?FQAJ_VJ)4eYReD(=-X1dV6$(aPNYq$+8|=nPztDY;x9Dn}5cW)zP_ zdny`y!5I?pb#HT`R$#?tx<+T}P-$LrkOs6=D8OaAA|;gZuKc2{%alCsJWC~bHi^LQ z?1Fa&I(S5xAz{gA@Y&hqi#3kfE0i84tf82NFD_?OhTh>{u{Uu@V^@w;Bl8#BgZQNN z7RD;2#$(~zxMU!2GsRCvm*7R`wgQPa5fXHpKYj$5n}y@PQ8|bb#f{yQ^2wHDvtQs~ z8;sq5k$Wjljr-;&eB?rqB8Bge#-pNZF**OVC#`@4Ad0FWK8lOWi0HFqPEM-J@J=bA z1Rv{W_#|9qeXsw@u(G?Hu^FUfs4Vl|7AwaKD;$_~hWOcfSnV)=Dc9y1(s>!AeAr4F zQ>%Sa?q(tmYK7cnti-x^J5hs)^@JytuuQ46!LJwAdF5cI)W?Ffl0NCoky(|Vrz;LP z8OrE83+v)H=Ri`O;N>s4S2EMw-5#f8$eidz$d7e%l4@S1*$R6x z|J;okDLr7la}Q^Z7al0MGUfL~PtV#LM~U$$kcudh|88%TJaHoXO&~4ZfjtsPzmzm3 z82&HSXIyePV-=?iH}L)0^4$#INaJ{3)_3b#~ zT3kOUJ;L=d8M$7okEG=EepCotuJ4fdhU**A3}o&9?nQ-&hGURP8&$G)aa<7mTiblrP42REzLZf1zkBWUiD%LqF zh7Vb}$K#Ffr6=jh7D>|UwpH}pn*$R9zd->+lK3Y;S0(YBL1{Kaes_Ud%*}B2l&6>T z!N1mG{Qf|4_{m?njjwU@28`P?*U-ymUQGEgkPBs-|!gV)#>n8 z2tPd?{utnv4%MW061iVG^0j_sBk4m}*r{*f^Z|*=NM~8PK~MD4QIihv1C1?qBYbXv za;_g)QRsZsCySxbM!0p0DW1GKfb6dL4y-myA*Qf#J@8Y7=`vpIr=vKT<_8*1P9c%j z?rDk|9Kd&(IS0(7n$z*O@#CvWKYzr}`DDEu-T*u`F`dZD0KPkEip%iebo}4@@ztc4 z_<=^!shspfWVivtjUxQ{bojsk9haH2$;>V3_&xmiikZ(I&a8pg0Z*NoPULYvz9Mp$ zA7~`HjzoH=6S*jWU-YAjLVx87<KrGB8HFpcowiaRZU>?-O)|5`RHZl3_Y>k?;9 zLHvxT%l`R88DxCZ4>TM;LAdp}gY3HZ`jJ)E@<%_=1ie-MHK_J~>=EYzUqA7%9#)Fr z<16;_SIY>ir*;@(q{Z$C%etI7XC7s(??T#TA(VzR4yq5OD zDdTC4bBk2O%?HE(2CJdUu2V>S6s)O5%}hphX1pHW>!u#ki>Xe2P*RWjZXNqzI)$8c zo`e{Dl+Aj?yNsU_$sMI#4MKG!$@`)T|hVAlr>WafSKSrHO*Gkm4$7S5ZfSM=FdyChphl3iI z&x3YC`M+xbLQ+25K-6UPY=BXN3N;EWr*ZiN0_yX4*Txa}>o`?C4;5J)87jcKVH%*G zC*vo;Nk#+l32;9@;4%gaLu^v)Xj+7i@hWbj%R!z8ta#H@bSVXH8YZx29JL$Z*eCoz zLFH+vb#g%EGg7QD6h85z>6s&S^l*#++UN(#)YX$xAN`AZ3O7?{|55K7`2GcXpTUk@ z6`*cEDOZWZIY;EtqRNCF`Ih}A%GoXV7>)KA?-=z5DH2WM4z5vUDQ!SMOHJQlZKPP} zF|Ml^9t_6p@Z8L~_Xz+S2;6}ps0U~-$Lb;-_xmi`GRBQ&S&n%Ac^P%0%1=_=y8j%G>b99R59+B`eW|Ee=2Ifn?y}8lBjSk1BM(6 zAPNoK8Bv3gm%@WQTi-g)^!tt4SFs=i!BPJGB7>rg`lK{-AHGLTy|YZs!pH?0@&T7; zY+a;ZfS)DDnE5<@9^OP`@x2|h@v~UYrREd;m)+;%XEvJg!n-)Rs@W+Y?{gFub>X!N z%z&rBIRFDMq?96oFi|+%W8xYq&?`0KNpFQF*ow(koFdbdx|=tClo~%71N};USq`N} zh)0(Cgt%KZ)kJt6Ts7S|ols5T1_rqlP3K_*U9mW!O12gyTZu5OdC$A{d!yhVGVy+e z*S|>0{KBH2_g(zF|9G#D_s>+*<*wb|8$#qa3eyibTeiKj~j}4U5u1=$N1E zMbgYY{BGri*G_gfss-H(#6k^v1-=74VVjhuyBPA8e`l03DBJw|`sd$H&F_*ulIu4a z9fMgIz*Ao$3}6k+xl8erIExeLYh1xn#qCDj|KddSH@5Up&|w<-nF?qTvTj(GmNM|g zpvot&j^nl#x5yr%30wrSae02p^NRc-9x^||=F2vEAB9ex5V*NS-kPrgRPO%t3DO@D zmr95~CJGmQYx*bQw2kpTmrDq?8h>k8`X{UL3a#)=Z~UHWJp29DzYT|5*KJ_^_&w4T z0%%^Mnj!5Qvs6>qL+?4N*`ht*RMjlf$R%i|h6OeF@e*aYAy9EpgU=0y5L(@78hmM} zNT^h!v$4DdUje8zuuy40SWUPZJf+L@?=JQH>>4aPUg%HuX|S(1{y(Elzh8q>9`|W* z|?s_AO*$GbtQQQQyilzZ=;N_E@u;f|pK&c6=Ng5*a# zHbK>Mb`S=e#ikMnrzIxY)uA6QWz%sl&dpU^*W2~GrWYjQun z9p4>i%{U;_jGuVR>B?*~&hgK9mVZXZk5o$CZfk8kCPYOW!=S66HpYT6Xrp#b?umFu zExMj?t?UE=rCj8(_}=g=N@?YJNbf;V%0o+hN^!8rQYR=D-KqA^G}Qoas(IO_s`O7a z%0Jb7PW7LjhRsOg0V>6QT0H6WQH!1qjgvr|w>a{lT7AP{(wUAs)g^-?+n|nSLewqJ z=jt`LQkJDoM^&x?M%-xmvWnHN6W;)`mgYwuiKEi4*cywus9lSQ345JIY1|HBT1A=9 z=?KBE(_?(&2j>k9dFl}{ejW+KHb;>hp7>ukv+A&-(FrXKAUK}llpbuY% zg?|COZ7p7+N2AfWod4p<($^_#BKljjIL`=?w@I3AAj&)c3r;Sjv8$$8cYvBl^cEEfieNc>85jmBO>9%FI2MDt>EZU?TyLxVoJ1c1m)^61eQ@NV zs2qsNH{UKzl4r9M&D70GtPo)Kl-K`OrWDjf6MJ#oeEm}+-g(}XI1(td!mBo#{vTEP zQG$VfmZIuh#SZc?)6dc*)s*?rdx~nhraFpQR-#E|S=xZ&L+?&d=fwkrPqW^qb6@k8 zZ3sRocLRWN)nIXa@Hsga8XGZ}2_={L1IOv&`hmc4pNth_-!;rkFdO>_od@TDNqN;-#gTQMH)LaP*%x=CH5Z0f458*hR2 zQ^NS>EluVM@ipJNOXMx>B&x{t+R=Eco+OS_>yyP|^x;d?MXLfNoxlH0gmUSwQ!C${ zyqtVxvRO}bFx42xL__K$$A zay_|zREaaW_uHyN&Kt&7Fa6cWS9dF*B?{|rF}7MKckJ4x(Fw{{@&Z*|#WRYrl?z?2 zpqXrS`bZftnPfa$y(W$luvL%Gh$^-^h%%wdg;4=pwfb|(A8z&0Jxqlk*H#aZuS~W& z8y%Ld$T%18v5GBeniJYXUXZx{NYYbVg)c5O{9D*?J!rb($|bv4t$MflhG^bh^)e=r zcihKD_(QYJvYUUF9RDl>Fw2_U{ceW$C_liG*WWI8Cou7qlFA0+C^(sV-&)ZH&%oEl zv7=k)@h;RLov)hZ%i^Y}_#-^Z84-n)+(e43u2ElHH%f#_5Ch-ih8e7{lUsy^q=3+E zh2?K(-hkEeD0P^67ym%1B{Ef0voM)=_9sRi<4UAocreAIGraz(*)op~RV|W%nDM2* zh>c_(G*_!;gEsx~;yHm;_Khr5@yNwIyJj+d)IZBiKiQk10=EJ#qG9HdK;hFB(YH`K zOP#sFss@_HdH`^&f}q*)@&Hf8G0qea&5(_^WFE2(@YIBiLmtmE8c_CcXf4g0N(P0!aqC!cLm=a@YGE`GU+fB7~-6#EvQZL(g%EoVx%rayOhIH(m?m4{z z_^#9&|AZ-KXPn}7blI!PAWDweUU^N)Tp-PFDhsC8WC&F+$F3E;c-T|)S&>G+GX;Li)dLwX5J4!~Wt zH;*#0l)LUw7&P?|b}Mhj$(q7mSty*qXs{sTkdB-DN^sM-oiPLf+~uJ+YBwoXFViRe zdw_yFe@$QwHvgc4ST*qV?bLhFci=`h*Lfb}{P(WvTR`{_GQO|0 z>w6A=pc5~FdstYm9doE}>q+F@^a1f@V}4ZGHMB`_a5OZM+6_j+DNbP6v(aUL%@6kr z&@0j-dZ}iKZhrq~_PXD!!?8M5zk(exxk(Zrp5c7mVZ3v(<59)GB=!q#WMW^xKRSgn zo(C7C?YhonX3>m1A%?(Bp?{6>duC7(b)vnNZAjep48uS7up1KV)? z(O@Y=3EbOvVQD<5rxhnI`xA>3`O&36x?eScK{6K0_6p2rXdu4>fwZrgu)k>02r^O) zED|jyog-D#W%J;G%em9-?4RySHq|}og|LBBhe(0PD(Fb^y%M|>#TU2XOL^+mH~$nw z@I^WJrp{IM_|yQt{Rejw1mI)qtNdR#;ysMveIvzeI269A5o)mgl3%Qyh%Nz?VXT{S z1!*Sm)+xdGi^$>}^s|v8(Q=!+a1%Iv~vLH@L)- z&Q0=OBjfuxp=p#Or(2?L3qOHZS)w0`tX?nBa}LcU`YCc8P@)e}6S$&R!2{IM;P<^y z%5tUd^huYjnuEILcW6PFLM^Jzm)OH`v&uSuXl+hoxjO@^Ucry zhJJWOkb|Aql01)Y=aYQmJ4W)Uhh&m`yqq+Ym6MP%6T@1h+w$s5;+kS?uWn8YZx7>cr7sfVia5(*)gQn$))N*Nx!Z#lnG zNHz(A=W<2Lj${1FpP<}RL2a5jil%gc}~ zUOGVU-QNpdz(FoiCSGKD$3shrSPGC$twN}&ufM%fNGaChHd$MogT6(4@TQObT z;Y&1NZLF3+sLzk?Eq-f)$CIK9+rY!t8$a6PpmYPT6)h;1x)zBlTm$!0Yd~3#pJVE} zMqP_-6ZV!9LJ^YKklI7@r1lG9iNdGe=Cran?t`S!mf`s~fQFjrT1*sP@OA!z(-m(SBc9PWlNwHxqMTAge?PBN z{ITJ0VpUrWXL`iH`%StU?r^1n8eaRIPYv6GbgCPUxp0n)uU5|SDsPV)ySB@}v4wFi zVBrJOX5ZbL{SwTczPZhm@{|(obpQNU`6JR=F}N+-M{k0n^3A<7i1v(>uNCR<6F$)n z0qN9lkOklxaaV|zL6$Sqrn}0UZs~!UWNF4()LjHu`zL%<;(=Mno5X6iEE7E9<3K#< zt(&E6tz`MFpY&vqmIt@vxur3k2#mrTM881fy+ib?h^&I$W6^8OzL<2{u3;UH$wN%| zj7x7U`VTt>F;F~ymGXs2!@*~hCb39GgR#F>icyg=@0$M@3l$%bNoBMC;;HNmFaY%} zVw!Zayw}9tyKmkzuC(+-++%4O z-Yd#lOS}}Q_!kk3UH2E4we4EkW;AedhRJ?oO?HM%W@s^fxRS`Tqe{b_y+s)8Lwa+| zJK_~H#WVZ4l8y#K;gEHvCv%qZshnz*tZi3&vOX*C%@eE3rI|bTN@e&jc`+A@E*8gV zQZJfqiG{5wO=}&kiY(&+1iSF&$Ube6?eKZC)!MOI@DoHuc{O>UFFXEe-0y*o53lZ6{{{Lw|{7K2pi*L;q!}KVttxNB)9*M4wbH{xRoxWrov$ zZ6DU%-Sa}OdUcffCp;rCYIlrE-Hg3D0PmiK+QFcfnw5_K@OHK} zR9-rrcozJB5&tc_E~V&C8MR%Fp-KhT88KL+4#aJV7>cZ0&Yfa~SF9=dndVWFZj!4iW0 zz=v01;Kw}{Lu|XMpg!&~gK-sd{R1ShAxKlc-!|_gZ&T>L7Xl)n{;I+kl8vhe%imhS z;pSrpzXC4`8Qkd0!K=Zq`oKZs@~I5xD3By_cad3=&YN&U35%&pL^P0^4GjOUPCX2J z;QEjq?)Bk=m=?b^RSQruT8Doz8wMwcqkeA0x+eTPkj)Q8aqb6S1~O!yZ01fO4nfd{ z6+#DH-^z9zZopRf`nUx`OnT^-JlP0rR~wag&-#^ZYk>3|OJRj0oe zvT;+RPlr!~D~tH{X~a+Sh)>B#e5^(MXg~2;e&YY6@A#~Lh(|m(Bk`{!Q&-kse}#|L z0uWE#B$hzG`ou+VkKV`oX41s%7QJf&^wPNd^d;It^g4a_Ow`V>s15g1tA!gW-&n!h zX()avAU?-P3i+gSB3xEEB|o5U8RJrH9)5lO+vDif-7<0Xq?`tnzV5x;r>}OdE38yeYkyVHH|pX<3!MO{jah59)1zCp#NQX zrYbd0!CC6rOXMNMeDh;L*JBd?{Ez$f(<(ycwR}vj!~=4U@Yn^tRj{TdTLrjERe~ug zcyV!a(nA}-6u!*e`XwiP&o+#ldItY^TVxB7LqN7u7k9n)ML^LJcoHTJjC%UA%%e6! z-qb1Sv-~j&{wm_{m5zUI7X0gok7r4OQXC2V)NASReY4OxiFEEr$KQBqX1R6)e#eCY zB|Paz4vSkZCD6L}bM?7w2izuEw?i(xnQ-fd)`c%5+`E-hmK_J;+9+#bA7?dJzx;@W zlIDBl-`}t<|ZTk*A}UiObF`#a53L+Zw&-H-gncF!&mwb0Y7cHKET1o|84%hPPy&kZw2e%K zruumefMrWM@Ct58b^H;fw$$$_jSS&WpK)l?*%4>Qj>#a1k^G@E8MP6J>euRybn)_l zNBmtz@s;1h+0N$I`>~0ya>g&=U5>XJ{3yYChI{3`{OE_v)!6`{P#FU=?Y_l^pG`Z6 z!O1fW?@*xmNv^sJjF}S9BBp(9Gx1A-1xC6p^4Xb(B~%!*&0#Sbuar5+F? zNWZHNtPmDyX(T5#hK5Y2pFXJLmPmHJA2~V0#>Ec<7~DuY?!h*07w6S<_ejUx{G-Lg zvledWJ{Z?Ht1AaT9@G`ezqW+>_RIIuT%vS!uj|8q^RJC@IKGdn?kxPKtT+*`&U-q*!(wR_4rjwZ_Q#& zHO_w%&qVQyrZ1o0#*8sPx;+}$k!H+Q=lhn+D0%L!wQTZ9v{R*HO(dRMFEISx>U=@@ zx=xK4f(s09ld45Ff-yAGh!BYDvtQ}5}9Ks9KzTf zsOH$-jQG}!SSPt2^*@^2^c|^4g?po#$-x;&p+Bfe$8#453=gP-bjM!aE+uo6ah$4*+;A!0`aU0? z>ol<2_d7@{=r@n&!2O;051Ti82Q3q{5c<=hi_$@idHD~9ARI>E&5%|2B$0*IxWONA z8t1o#>U&8^Oj2xlhXpY&k_>a@hw%HL^3zC&gE`#KxW(bE8}T8Ex+lWx=8m&u843b% z5eRMEF)l6z?Klj-2!r52jHAMBwKvJk9eqFnd6W!AER`*4={!7=;Vnf(+9C;>P%9&& z%kr;43xK4v1U}S}=eEXX94!$(R=Ppv$Cw>}1slgl6Vf>xzi-Z89LW6yCpY>>Joj#V z`xA+W;cgx;?uNTIR{umGF2uu6taSEX7+&8ne|@NKTQt9E>*$Ub{K^luuN9!fbao|Q z!tcZ7WHYRTLh~Oi#V@hFpVLamEPWdcftwc}!F{xF@Rc~cLjUSQg|2X9(|AdoZzYTd z8lZrmmKcHcya*`Pw-oq(!%$|v3#8ohKb+ciX_-9fjH)-iE79vbMr`)^{8$CZWOxHD zjD#Wo-j*1iSqQhqOFQ%LT@?#|DZucTu@+hmjiKQ;=j6u28}OCB;WzQiKy!Mcfky{A z221-(-R{hb7bEzaV{PVyKMpkEJ0Kfd zrGBd7NeteS_9bK-BL0U-lTP_Xw)O?|{2ZhG5$JV}ae44*Ukhv0|B9>rS1k1d=&An| z*kNe6OtN@#~i5YIsU1XXZQR!ekk>xJhoXkR$Oh?(%ufF+(1hvx6_wqj)~TO6=8wrD0@6~14EqP>+M zwm1&eA>I2BdY$`SE`qk`id;UwYcp2D1qI7O$Ow#@@cTeqACp!uGI^lRRwGHk;Vqu} z;KT*82{2AVP8?B~m*+ZVWtT6z@Ti zUVM|O|0Vs4euDmCKhghF{4e{7@iTv-|EK65i5R~n{Xab`OTSuY@WfIq zbx8q^=p&{y>mlF?k)QCC6ZYP+CwzzU{gyb@lA7tg#f{XIeym$5>wydit#HM z?&LD+$VIl;nX@MR8CP8!X)qm4gg;|6!vn3jfYeVhy(XQ3sFrs=qgvXUcOICD3_zA* ztiV}8CSm*Oo~e0--^0W@KRprp&d$z}L|GqaUTw`Zhl;M+@l&r*4k zGf$a;*su&6 zaOQIPl4yYpT4r`)_3y_d!)|nPkk)owfP5RQRJH6K?Kmy6(kWW$h8I) zTjQ)RyEV>luehKQ|86(;D9pjRkXCnrstm%HZ3xX_7R@ePJ{>CU-gE_LVL`{QFto9y zSk1K1-l*Z2OrTjyL`o~dZb&VGPeY4qBRD3lbh0LR)c#Z{4{!B0JFZ$u3tW6et?l?=54X$=n zU)~YulR-IaarC8vHgtpMuC2(wYBUXsx7*Df4ve*t93DVA@wSsQ2zmKplH4zlrYY@1 zO&_8mI618G|c}fl)vCA(VJQ=kDf~p z5@LP~x*O1^ZveorRFlr^1Ifh&!DUva*+vECb(qXFZkIIKL%SR|q_iz*nYy zMz%{^;CMRShH4QTRDwZ!`O7S|-*XmdEa|)~q24|^=Q@vbzMwt|B)`)k zYdrL5M>K8>>|&N|g%RjP9`i>Bmm*ZSg?v!cum}Y9^;#NFGjJu|+c7hEj##{<{y6hl za@&(DxgQp3S9jNlfXNi1yeZa<$A9II(!m)QZD~fGcqesYoh;#1YABK{K_(-wMfw#_ zqe>eOV9Dzc{aT`5Bl4=1z$k8S&jEdnEdmLRI?a9G*aD&Pi>F^~S(+1oza{-PlO7yY z$cx|a@6G_~^S<0N^#%*~hM$<}jxF_XwIyd;GamU9++AwnUbm&$A?a;f>d(MkuB$Yk zpH*8kZu$w!Tw>ua+S2Uc?yp4L5u_L=)L z>q$T?xv&#@L$c62%tw#=NgpzY=-Mt+VCubPXdg7&xxNdeiD3DgEW7X5CoP68f3 z$Mg;)hj0}8tBQ*hcWcwOXnJgyY`HO%!RV^obCvWblMuwo`!x+@2kw_yKa@lV0}9B*#|h z=u=*r%1LS)}OclOijvG;ish zh2AnO=AY2Y_e}reMk^bnxiwnR8`GAwVr{8(dwXHSfYw=LHWx7bcEC>BZ?Q9~MgQU1 zX-hkc&mT|D(|rCSKs^mWqXmW$i7fagP0^i*fojRm-$9GB=>BMgK;O(;x$@h^0_i*Q zhDkQPjH@>(Lyaw$Npov#*^|)|((}dIEWK6mllKW8Kgst|7j*-|pM)TfehXZ&b z!F|l#a3%Z1=l6v!OymahT$nV?be8uj30rr| zAJ^|>$>CXK3Iy@kG^YVT#Glu(QzI__+;>*?R-BtdGsRPee@P8PGwGa85%EoM@*9|8 z*smP~9gSGYPN{JLg6~|EW*@uSBJguRFp^io;Lwz9afztHzI(#y88KA}zvRWhg)e4G zzTwQMkSYEL2p`<$eB0*d1WOUde^_~OLgtmN7565FSe&c(5@&GSxiPY%=~D3aWiVX@ro#-c(>__UV4h zr^^kbEckM|)PdhVU7jSdC3w2r7@R+Y7FV`+M={URq3!AFGz%B!M&tU4epMny@EoeG z7jK46oVW3N5Hi#*=K8mDegCb99ROmuJGab^v>~v)IQ*S7gw3Fv^&~iho1J^Qy#t%c zg{`F17c=^%Q})rl(|o;doJXLpUuttDPXHr+LtvKI6Dqu)(Lp|0iC(IDxaGCd(S}J6 zVq;sR9{`B+3E3Ol-Ei72qF~AU!}ecF3HL4H#tkKKsI@jXIO02x$!!o%rxG~UYQh%+ z%r9{HT}b>1U_95aP{Eukb!*gZB@>YIE!avrZzwdds${tEV@fCe2o37@U}=>_GNtV8 zvYW+ElMijw@9f-)=hS#p*2Dk(DtPYr*^Zn=^b;?P=Q{ryzs2ZKjE5Gp+pT1ay>rp) zTa}qJCU+fJD}0Ya>Wy&)%fXj*(l>_C62XK>`G#nEHs)0-^X=oe3)tLP3`D(G`2_cW zIkhJRgPVZNm@m+XsumtYu5Z$TV<`^Dn;p5S^5cAb#Q-vKHVy6 z|FL4uSNsMF?O|${{2CD3mhQeJv1beCk9D0ovgq@NoLSS)AB8*`V?yuzaiTzi=Z{b1 zU}xj)EqH*x-}F4oFt~Jg^O;lHqnZIK8rkeh~c)nO*%j@3oxu zxQzx-qUQW%&L7!FDdP3Zh}#!OO8scZ+DC+lO4lcFm`Iy+4g=025a)48A1T5e$LK?Y zd=N1b2kEHHBw?`^eAhixXd)?LN_saSz&RfgTlQ@enbm2l#N9ErV721c)1~fIQiD$s zEC;uF_-=#8d8y~D8zo8@6?<3dVX5^Z>3ts-ch(cT@re@oMmE>-PyyDNuY%!5b*=*aL7@l8Go!qB-d_rk zRT*%1U`(f;5lHtU zCR82%TslvWl%t&Op+~vDt(bJKiEw}-*@D5&dC<8wi}RUht?_V4=TxB{$R~@pkP@8p zs$%kyf8FrffzI}a?Z_upzL6gnUfH!d@)BC?zel&`d07d&f9vLgd@i7sY z-HjC~faPF6Jvg`PsYHdlobs+eTkv)=U0*v>wk@lMS_eSd!Tn}&F&G@ruVgY&fsq*} zj%Z8WaK&m##FV|`k-h>`Y=0ynn9{gOhCV@xP=)T&!gTxjvlQ|_1CuRIUrUS0-TfTO z!W4pWyc8fY^|^%NbJ7;*00E&Un5YLh49qt;eu0`=XzjtN(Pu^8T<0EfXL_h@El+;X zXaS9&KlrSh+1f~7>)SgoOeps;I&7S@r@U}9L?WDznVE_L^ z-lk`n+sZT3?mc|xp9zY9~f*PLIdY^$Gg$#a)CYQEa>3UtXsv+hQ{BgL8 z9ARZ6!rG7(k1zRW^y8-_STZz^GO_?AD-X4W9l8mr*hU?2-(%ImOZkMCYo!vwpaVAW zD=*zaG+qp%Z5Z34Bg-7c0+waCouN=hmik9NC?heLHIn+ZdgM@dq-dlRS{YjqIhfZO zFJgo19(lxiOyx!F4d{?Cx&j|Cl!?fQ6c8~Kl%;G&)npP_?)Jgkm;!(3%U|#p7%0_* zf7IrUSX%=65@h(0VHO3t^dt`74%^D}CnCK1aSlW{m8@v4$9r7E2appgVLso4^q}~7 zFLn4g-s>v*u3_}`9zkh+sRP%Ydv5V+B=$b5SEjW(+_h>yzehKYVAFxhwx-PXGy-+z zGTTz=$zEo=gZ+%~fz!#505uA&qd_aUvt`t9AbkA9q5fjUVkgA*6>WxtO&^OzzNAPe;z~fB70KQw z-ai&Zt-+Zs?MnM|yyNGN(UwZHk}nxOg;6gx?Y#b^@knny1tih{r_i6x(n)7*7|SU zFc}I)e5!9ww^*|hPjqpeL}lh@Ko-dRl+3+X=0<}=cp5Z_Esnc@;M8K&n(*T}7}iWZ zH3$_RvanacriuA2q&PCx#ojs<`PV{UkK;^-S87+>`+SxTbg1YUye8a&mRQ)e)nXzf znBe-x4YkH0ymGyno9!2e(b1}RY+ zL0v|>^6wyAK_&e7f>02>#rg@eU;($bLXakuYmY$mS$*_>x%5WJv*n=e_x2qRvX)+^ zFI*`GLfRLu91CFJ3s;jfDeF;QRK9h9TQEPR1ALC~_!CWbJ>I2(|Q1?r-KwnU;?8;5|tYVOW z4`#U&E&wIwJGuOT3T}m96#Q?B0sL-kV02;;`L>`HM+P|^;!cw({w7c>k?Sb&$~RCR zn;_?$DX}@{=3}n3BE`%nsRGf)w!hS43zQIPe(>NB+Yb;J zi|DYK6ym>MXiD8@dJFsU~k_hl+%ESitvTz(K;Gf3d$f*vF5XZDIBKA1SkL0RBKSa-|L|eER-V zx**S!Es!3d7v-@h)RhDeOI6==6w}YVFyOj+6~KtX2O_$0(-L34SWvl3wMY$iy>pdd z)$wakWY+gUyrYNU2iEiELGF6?YkA8#>{fgCfn+U1)Le*ZEw@bf?lcH>-G@txaRww2 zSfnzDS9Se(G=S|?ajR&O>Oh}->H%XUI<94pfKe*oGUR(4b~}pQu{X$AUTmWy>D>7m zt%V@Vru%f7Ua^8u&8^gbrc}D|)}$ja}qt(l6)4IP|TB!yT7`Yqf>oM9O@K}#gM5I6`HI`D+&Qv*oG zS4wcpkFs!l1vA>mDzW}#(2$ZAazeGZpGYd{xwxeVnXU5kyV!#dt^64s{!RLzOzcVa zW4n{}+(em70w?$9JTo2>Z6PxH!{F2XeXDoN&t!Bb?W&g0(|n3PtqIj)?<4pD8Mt=Lch?7tZJNbFjS zNX;qW#&TJCi<(vTQ>K4Q=pFKl$liW>kBo#<`1aGO?nqHWDHLJ$({9#&`leTl&$6Fd zB4yuCFFe>?C|<;;KW{k;P0JC}JxfL6=U82&l6}7NG@$k>*-Brz6W_#YBF847{FA=2 z>)MRI@&vwk3!WDAl^e78$~LYT5@qr6Xhy7nt9+i}_DLQ@@eJN8MP&zF#Dg%WDkHSut@CJKN|q_iTQ^DRF+SV*UfMrYS31$%s z?emM&(P3(xg5*kG7dXERcBvp1yieQtSSO!Duwh_1*JBq?zd`UQ%5#5;QR9t6(ko|JZvU@G6S4|9kRhA!2~2U}KDMRMaRD0t5(%8kAtbfDuvA zq7q0T(U7D`Q0#-23R+N5s#vK~OIu2*QjJP!suWX=Br0mEsHjw{`Stg{*Y#ee#qaKZXYQG~=bn51?w$ZSazj)i% zddbkWuzHqM6M5yJlOAU1_kVYgxtQgtcR9-9*i~h$NrgwiwomM)SoDY5wqHV+F~Oh$ z?a@GN$Op-R5mM?pN7uEZ;ip7rGDz1$S$$B){?H@2Z_`}Fv|f>0e1W~f|GK^-VjFEU zb|f3)sqM3b0n$cM%;)vqff#dJP!9Z~$D0n1r$=oEPqCcM*}=Sg*5WTdV{t6W>1sN-PUgCu zQwl9A^zKVNoa35nOjq7QT;Mt2Z-lv9hd=XZOwX}uc!b@;JN_axS`57L}`+#IHEDHSJy zAU!iAL$eBOO)TCbnh*yV*2F*bk{jQ#i7a_bw7fM0F^+MSe|TBAhxur*t_p;Pbs-Hp zoN4Kc^lcj#;Y<6-Q}9=`XIsjX!IOqaMko_*fXm>I#3Exx@p(}Vf`(Dl{o&Ch&}}Q3 z7NTolpVR;!O_r?KA5DHkj&ZpbY0t?CZa1#zdB44S8Hrr{CXrz}zXXw0){G*p|m=aI|+J$3968gV{R`H5MMjPXSi;>a~ibZ`mMa-(zh zpGi2*mJlg~rwj9F!SRNXkd6|3wJI$q(o;^%)@_-e&JIYmuGGNY5c_Tjg$N5a-!7)v z+G8PtwM!Geo-Rkf1AJKrs|Am*<&Q|xT4N_`TV1n_O}!4Cs#-I z8eZaw-fJM1cjR@)F(T6(CrfcNBRi8vU2F!7{GQ1%u>psf0W-qo{Jgi6)BHV? zh|xzHiKkYhn}u_zZiaq;ET%J=!eiHr9?eL^*dLI}YDx(NA^uNsN14 zKpB#geHPn^`d082f2l>L)RUOAw2R*+dFCuEF1g8Ty*SA;l9kbXVSV;IwiIFXhIWrlztL2(vS_n82$lMlkCHB$N_5?C{y^I6xT5C908dIuFYG4jl>?bP26eHYk)JNf;I>=N1pY@ojzo&8KhKkI(gu6ZEpi1u{Su-z=%&&nV}H@tuFnMY}A@9)+sb7Q|6kl1F!eG6wyV>-r; zD$U#$(Ha)voc=>D4Nx12RFnjA1K;HY=6Q=~^LzF^;is)Z*M!F~okrcQ3%~@&=EMfX zCFlm9Y?pciO=~kv3#2LARjpJlB#rq|q>mJqHf)gpc zj`?RxS2@E9J+$a@avzkzr~UB&8mJy^oNdSSv_I-lzOtz$-61Q@@|$-pJE(suoZpSq zT9=9^gcj0IimyFr#IZibvI{4Bc2Z~F3Fqv?qxVNMQAH4c(@9XUEjU&-MBO2Cj=uGD zscy@3`!07xm?3GptthrnMYdLFTaXW@Q6_zO^p{essCsgxn=>+bYJ1f#dmV#Y&x)${ z6)}0piIme`AMBK}Zq>?+tV8}<-%59~M|UUW?1f;woY~_TS8eucRVRZ`_8k~u%kp32 z$goC#7&-Zi@6wC#B(8h8YlRWLi+^N&%oyUw>W%!~^Ma>tR_WV}$aKazry3dZ_|Fn1 zXm$I~5lrGP#)15^jMs>1f={b5Q-|aP|`m5x50-EU?bsXyZZ!;040OmU{pZAlB zlB1|bcB!ba?RxZkXH?2gC{{fpElsSUfaus|Wc7gSw%{@)O-L-bLvC{;M*`bJ2Rc~%4M3)5lOD_#(d*hiHWzs-Mi-v*N0=;#h@rN>{l+m=M9HE zDUo$aDV7+z6uQ&#s7#>DjS+FFR7CWyH|Gs6=_6vitv2zgyN~WChWHMaHzKDMobOt8 z@esRe3oh9rV!f9C@gXsmk3GBgCKi)}!3FjB!|ssviEY@z&Q zS$72AzgJ>JuXElafj#S-XG%tR;;wU^%9Hr(ocE`ROw%DraWf-Ia~$>!vYqV?+8Xq2 zMr2@+;uV1exJ0X(Ph|fetZF_&N2QJrat)K|B44F1dymY-*C!fH+)g9Mk*@O@Dshx_EZ-f&}*1 z$z9G9*G_KaNqjqbBROm*5iK9QmY0dR|7|Td5;@u%dwOBg4@7zcJ?it!POc=r=`v!x zT5NoK5)psYIN25#DZSKoCCP72JZijdx-n`jM#eW7HTK?su4BL2@ueNR17nZ@RI}sK zPtZ1jv-od~8qac!OrPiF7s6Yl=JQBVl4x;G)xKwE#ye_E^TvGbaoY~PqsA@an07HJ zO59Q7k=rEl|M95tcqL-Iy-(s%`% zRCj1yI-L&hyXjk6<&$i!#OBiI;_R`ix|1%8Zk=6w`EM78m{O&y39gMiFHIHNY&Xt4 zP!Co0c%e{ED9M@+-)~_U<6ZN)ZKsr8M&We9o;9EC!q@|jP8qu!Z7bZz(yw}7i_o(t zcXoW+t6H_4_BxtAs17eO5f926a8=4Z`p%C+%Ycgge6MrFD z&FPnmIMpfHa68eNG^K{7=U9RMZ5Q~Co zJP*pp1nb}Y@Jul^DSgtHB3X|>JM4IR$@5Z%Ji(Vq)eiS$@RF|yXP;)WOYt`EOCB27Zqi+-YAN4U*J;yLZ+Ug8*L03C?xekqD))V{=y;o6`(ed>}XqXi3a z=Pa+xF$?LVeJ7a#-lV970k;1Q0> zr>ssFr%C29#PAEQcgdodVSXi>u~boJbgm%7Hj$6)$+x65~f)44|gS___EeK@4jQSuk4fxpQhij z(Pfw0Tz#u2k{5Eh#%sNinh);+6XPom1lZetU60Zhxz=C0oG7tf-wbGe`q!Gb+T~mo1b5i$ON`7;tU#6?@Bj(N0J zT*NBJ%dH*^v6(2}bG__rF*MF#eJ&2xSj8J7A$6M-M?Issc=e?ymy;xiNrV)rPPxsK zMUs`_(M+C>VJne$3$#SM1dkmd?m9{SR}OtkX@MO}ACHb6M;2m3?dEc^tgy?LvHOPY zfZa&ayU1<9_fSdry5l2B!8?My`k&?qQtZ=X6?r^CZHp)xV{z|UvVVx^1ZT+(V-pvp z%BQTnXUW#eD}15=cRlcLJc@)h&yrQfhW(=%wp;vybCzsEY}nOiSo17dhJ;Ogmh3Po z-+ywJEMO-Vb(UoKMMf=86r4j4I0c3o`1=goi_;d0K@0X=8QoDp}lU5L42lRr9w zl364AL5eyqleNQ zqu};%QF=ZY{HUX;GqgbIhDf3-Y$NMYPn?^15VpKWgo{-QyC z8pHcrDU8uFV&ApW78!1kai@v)5HQF$6pYkgXRgJ~#kO~uOVi-9(OW*3T<>hkegz7EVdPMF0(pwW5 z*_!EE!$*GJ90vrGltmm(DD(*ziAz|-t;j1 zJ*`P;mAYlNV@YXT6NI?{bN-?FhSK+XP8!cnqKg;_ua&aOZj%_)S(#dfy)CSL$@{Vq zi-&k$pMr=@`${`)@sRDv6f4f)ntLX-e)+gw3k~N(;_7^)+WA0+&Ic$mZJ$==F6s*ebOBNTz2jW7ndt zy|&;9*Tmaz#rFjK;|%h|ky_1(G;3o=woR-;w^eGw*^zyqRxBmXjx0j*5JFkJ%UI#B z#OQ9x{<_B(yrE59QYYTSa<^>}+2Z@W{rNo~MteAq22vlEY;pp>uV)6~X{E6HwluGRx+JgV`3YVh#fLqAzfN)(y*qoD1RiI;E%q8!Cr{j6w>F-{-*v0_d$dE9;$}u1oil!^ z+ayUl-Ar4sOy5!sk+;RXKH2mtao-JFCK>u)@7rn9jMTFBNZ6*w45M1J$4ssyzA^sz zFZkr)oRx^@lY8Ul411>$88d{4udw|h?TcL6BaP2+(%u}}ChxS-p2T#YDE)+M!-;)} zro$d9uA_B#4<6@?j^S+AJZ|nDyeavJIMcAiaD5!)_bIeHX)9zi1RpT zUQ`T!{W$itz0SL;=d=0QJj(u)J;BJ>F+gJ6v+IfN>vbL7&yKILJzdlgrx2L;tqm)O64I3|4t3$E0` z!ugAY3Xl6%*KrIT`H@jiaj|`0AioxMa<{!<{AXtgd)&^e>2G2kz-kil^No7=Oag3m zjC*3yDYkTGQ}&1D!cO6j`^c`H5t;Px*ao`R)ul2M2|sadEpDgy*#?nAChbZ6K7EVx zvcF;;y^?EtH4*N#;h?t-$G2v}$JjCBZg*v&#cn|q+Rnu`UPI76aGE?KsGe)?lu*cW zOBAUc=S|Z~?IW6=08x!5##M;__e8MEX!y-rrG>2&kK84{{-xgnk%h@{RkZ%f^v}BI zAhyvR#8v#(S3QdVwZ7Hs`ggYY%no(krilui+BUT6t9b@nZm{T_bc)4~m$mosLX9)| zd#FruXH5RgR+bkTSs5?e9R8I^VFzrdpgCKa`=LA`)6}kQ+>Wib6|&f2*C`w9x)Y75 zUrB3E^x|1FH6nlgO*cGQ{7bAGexy=Lg5h{)nj`)yZrClA_PVyzP=8lpSXh(+iSiS9 zT}Q@X$Ln7523~jLYkHX6rQe4k_JF9RM7d57%{mcBgHGCeL zkFH^_Co=1N@PDDs&vfd%g6a-7y&9==KB2_#QojD5)cHc*ayIJxa{VT>^oBS?ewIPs zM%8(VJd9K43H9q4$b3(WjnVJ-q}z>cL7z~{Z?4~z|AKydJNmWupx@G0BKqa6Jbo#U zhenrrknzjL@axldhjS;lMw_}x-$vsr*xE}?tu2$2j3wd zWY=qO3-OFL;`nxV%#r2{FF2g$QEMbC@x~kxmCZA8q^zDL+$LakTFa8USe`i5Y#~55_g>m^x#*mf?}CII*`fo-1mT)3={WeMJ0Ys=jsKFJ#K_LQuZZ z!p_PbUi2sm=IEHG6?H7yE_D_);4(}%xV+1@1j(>{ysC?1OPOv9w2%8h>KzYeU;VdX zBg_Rliu*saBmnCS&+F{A%TR!qiC5>#WCD5N<6CaS=C@_KJZj5JG!XiM*-hTZ zTN>O)&qwdOf`Y`l@f^&?O-S@Ti`vOdy#!YkKiKmv`N$Fkw-CpkZgU! zp5gjxkDb)&+o+!5Y5AfD$_|LK13J_G%FfWrc64{uGoC@GqpEKTa%8MB!ebq5vc zt)JAlQKRh^c^EU=jyE0&+rI8d#lz7Qyk887GWcDH_KZ{=lMjE9*lp0!zU&vo^taeM zJ*?PgW~AL1zjip{F0n{GX1qai675|NULGgE{`qWrKWdI0To!z$F8ysm8YUh zLTnF8R_zYT?%sy8m4fcV<8dh@BLc%YI4gL^Y1xq~K0@D0v%??oB`-Z7%g`yAN6>u5 zy`10iz+b!J%;l!lwb?MIJD74+L z**)AhF5Ovt|HMg>6BdeG3*ksdU>B^T9$lCZJr99B&n<9CeZ0-bNS zwS@hoZX31-Sblrtow=CL_aMb1J6he^wv+VNFEAueQ#qTbrZL5+EMAAAod;bHagEMI zL>U9Yd~V%=p#1?7S*#D+-o+9;x?f3<+CHWcMrtqX7px+VXeYOBYKQ5pn5n%l!J|{t z74v^%hwr0Sdg_8F#Y|+ag(1E1mPcFg-lx240r9*oYT_GVIQj6F(9Xy4YAX1PDe>O< z$HjRXLfsdh78p~j2~5(qIhlQsbKU5EpbJv;O}@bFTasn0#@oixNtbI+Dqbm;XL=Wr zWxDX}CfuXN&0>^g#|*HiprR-T;IyGc4J1a)D6g29&gcI;LPc~6Uccn_P_9pE988}e z!}fSS=_*XhOUI7tzd;gtQ8L&?Wthp~LGyQOa3>6!UI>1HmFw`~Fw#p!dBU(=t{zy` zq=z%z_JkPV{iPOfJBYU8ZDKT(d57#sNrXjDc*owZ^ii?Wi@&LK+4~ad-|>;|IO*xv z>b@t|OAGIuJ8wo5?lfVTt%<^rje7lVfasD&sFzhhGN@;73xsqs6uLNJXITHZG%r6n zLOOB=Gtn{ofUs5_ddNZYJ0pr0ACO7wl}V@WdFBv6^t(o5#AQocmB$xo)NWucm(DOe z;s&B}^N17cPY%8zQKFhW8TT}Ik8Avk6Y=k$5icqk5i6NH{UXzmx<#}1%sVAW7D0@D z?=~G%7f080)QV=TD~?KeyOXl4fBEN6L`&j3K(qK!!k+XBIcVa)_k@owuC7hGBrGSB z%GIUMW@YFW#arYr9i-wGdql_e?w)#L97sAU)Zte=r^%h+l^dmikqOxoy=<&{5ldhbi|VTbr#1vsy{fCN ztEkC2IWWJhs=A{5ST$ng*kO76Z-i186wSD(XvX+}Dy=TNwxT|uxLnjwQD0NGuwq!_ z;zsqoMOBTeyuR!jRbSCiwV*~-)Re30+J*{sO;wF5n>SCDSIkoj8y2X#3mVHB)wHtm zia>qE_ZC$&GzR9^)(7ge;D&&(4a11OXrY>`$`o0YKTr6^S{*!aO;uxMz|N6cP%qNY zyNdM7%CA*{s)j&SO`t5WfE)(O8Uoi;Ry9_r!2GJ3s)ovn@<3x{h2~T^7d)H0sNq^C zBdVglzVs~aRiL4wrV&|JmsMAl2d=8PR;Y7<1q(@S;=Fkkb&bSzvJsX>MU~Yz#%5z~ zb=kbD6uBr@7nh;3#r2Ak&PAoQ^TRqo^7L9YqvFbnd4}YgT3e)D6<3s;caB!PV+?@> zwT*%Dss<{%Mn}sfCktz@uBurOm|tJJ(2*Ueu4-sRMRm1gPX5Aa2FmIy0<|^ORW(#g z)q={#Kuzs6xk^7So7Y%%b;U3haD-RY)-(jl8XGGXO3B6WuBjk)!y$XsgXP=6fQMG)#|^QRa8qwby-~lx@)ManO700F2fY+E9TbLHey{RQ!bbp zIB#;Gv}EEXMKdlKuZD$HoU3hQQN#GaM4d6^KF}4m@Y=dXbE~W7Rn?Kwq>9FhdYXge z!G0W=QkqMtE6N%w0@qLl!}wEbVoiW*#SUxd(IV=}6b4gW5hyp}PbpPuW+jDMST?Ux z6jg~`mAPUAW##2qKW(YHmP(#jtxZwPQ0}Fi*tX0I_$zUqXhr3sY?NOSm{(R4xU!ZA zD1Vq*RHNnS@E7W9k>SKBtFDd;Zlq_&45v6uT~$SX=IQ2mE|*#vy1n5$YAYH@t}#%t zSWH7gB3ezft5-tO+T>}Vf-1e1Tnn%iDXXhP&t;7mMBvoGS=UymDNZw)SG#aw zSxtF>rh{pe2XanQC!H)+e?dh>;3V75Dr>K4tQ8wRNjrebit0L)fD^k$lEk~{HtI;i zZg3*Ci)tEetDjzRO<-Pim2R35V{~%sn5nk3B3-Fc5kiJtmfa-m__jfM!_}2FG+a|# zU+xWumd-m@@&D3m&#t7NrDD#u^WgCjm84ctpG*E~vFrs#v%#;`*I!goA3q-YZ4gyf z)y%JrA6xVnZdu~2+)y>554-J4^VA9H)}XD&b>MD%+a_HJZfqS{3{=V&kr}uk(!O(X zsN&?QSo|SXuf#3t=5W6B1N`B}>$Q#8_G-K8DWzBE2Xe|Q=9ew1Zai7?JHKkdqIzvW zSe34-dDNATr~@}hGih|Fxp+;{r^$HQW5kv*%!;ylF{8OOs<2Cx`?5eyMI%*vm0j)X zV(CH}rBPQ`Ev%w_qP^U}wY7_ML>cR_(Y{AHyGMUSwz}Y2Jil)yDkl1H+S9#maT_f%W2!%)@Ll>UmU8mz?b zkMMvJR9gXEN@Mx>@#Qi~pm(TWK$p^3iHlrVw)l#Ms_$3ioUE=MHEiUtJf-sT@=JH5&0uVj~Fvz?1+L9<3{F<95Hg_$WbHnM~)sj zX5`qB1tZ6e${RIe)JR@8$R9O&)R<9YM-_}3m!FqEB7bE5sQmo=(fMQY$L1I0j~ksg zdc^3FqeqR-A3b{Xn9*ZL7mOY^CU4A$F(b!}8k0X}^q4VY#*Qf%Gj43&*b!q#jvX~N zf9&Y7W5$jhTQGK9L0-X#f{_KI3i1m^7mO(wTToCiZX8)0NAlwkJ&tJOcw}oc_P_ss zFW>YF8pqfpgb^dIz%CmruBcjAS3PC=1y>YYL9bGKRYm=j3mQi^E~4w6GPQK_)m24R zMfy)G>pzcwwH>=isidP*PTS14mv%G6Zr#`u+RJt7mYz^5ALkkZW`i>y=?S&+{EV$V zp)GtJ_v~#wq21u${?HRTAotBZp&@*HIPEdsy$1(9-V<63{`}89p$*_TmY!O{_rQH% zD@$wXgOtkJ*%QhKuWauL%?9_d^{^Z~{8`cg_k$hayX*pYgKOBF&g6UHLtp3#6@WXz zS>SF?qqTr<@L`%RaOS@V7f|YmFMC4kz+HTjp#{u6lDDP7N-*tMrJgx46v_u*Jv9`X zL_6v~EEL*%2JIO<0M-o;g*Ke0)b(Hs_#3bj>;wahhYrsRg*v{g)bUZ%m>r?7UFC$7kmUP0e6Gd;0NF;@X*sjp)Ft*xC=ZD+z(cQ>3k*f zCtxnv0+xUwuo@gTf%xEba0^%i?gDQG_k$0B=|?N|JeUi943>cXPA5J%3|s|H2e*JV z;4bi1a6k9}n2!BC59Wd&gC$_UGl&lk16P65!KKveVsHbv4lJM^o55M&9&j=E1vs1f z%sw*|S_0k-t_Qb)+rhWNz2K3B)GwGbF%%kd97|2$B(NQ<2DhF?y5Ku!lW*|ZNz^l# zSriI&fp37B$1C*}SOE5)Og_Lfz{OxGxDH$bHiPTIJ>bXS0kGdWp-?spk4wP`;C65} zxEEXkX0dg!0h|oBfb+pluo+A}L8*P<5HOY9l1bo2U?q41xB~noxLNqA=o>5nyTDyw z2CG7u=Y~RgU?o@zZU*bXUEmt!*c6-Qd$;=1JreEC2^gr`+Hia52~f zt^@aj&0y|%lp9PGN#a4onK+zRdkcY}Rqg+iZ$dEkIt(gX9s`@ost zDVGo*oDQx9SAko>2f^Lo8{p?)?xn;(RjH|9K3ECP1pf^#2KRlJe1ple$u}4P_ke|9 zH+T`4$v|g0SO8{ShP{CW;1X~HxE_2S+zx&P?gg_hr`%vQ7#L2w04IU@SA;_4;8Jio z*a2%k828L$gXyNdXumAYvm^#pDPXMvA`i@_Jbb>Q3@>Ir-p+zST51K=UG_?0n? zpTP;>?ci*1Be(?I39bkCfZM^Zz`bC49r3|gVD?z-`FrRctOMtOw}VT;jo=3GQLqKv zS&!bq%m(VYfPM@d0>0CT-oasu&^uTUt^oIdo55$V#xH@{*U%4u!@%@$O05O+!A@`{ zn75er0iFe}1+M|Of}6nI;FxP^A7BYMU_5#O^TD0qOmO}8(Hpn}TnG01AKC{P0QZ0+ z!EW$%F#9yhu>`$=f4PowgZ~DXf_2wp-{3B=70mkq_6=SRrcR(9z#-s}rIZ`211rI; z;0iG7hm;%a26ut|ZlK)YbTIvN`b97o+yItFJIk*E{4vxH;bimo*F7PI> z3;Y-yP)Pf|1^t4zfwRG1gG<0i!1dts;CAq@;9f9e6?O$q0JA63U))N%;2f|V+zqY( zd)%qWU$_;J< z_kz2@1K>Mgb`gI4C&UNu180MO2bX{+-bH+HD!3iI8Qcr*01tpKf!UK8H-i(v8-9vi zg6qJg;5Kjr*bcUUop)oGV9q_*jB`9cQ6Oc_&It5j{_^gdT$m6~ zTnFw0?*mh(;a9;N@R0k^8+aO63C;&sfSbY1;9d9A&cN5f{or9+@CVbGAAq^wrC&HK&U?~_%XNwY;l`t0kiS1U;)_cS^Ne#1Y8VW4Q>Fpf-T@XU?-Tdi*|7t;lKbm1}p?G1?PZQf=j`l zgB!rDU<;!|Lx}5cZ=ZFtZ0t>;5z&YR|a4GmExB=_}TfnsEi4R@_sw?2ZA>b)5 z;IF}1U^#d_xE$OEZUm=xFb)B42KRwmz|=XkcW?;U0Zsz5|3ZB5bZ|LX18xMHz*g`{ za37fbBJs=6D>wu!04IUdz;bX6xEwqHZUpDQM11gia3AVyz~R=4U~_^WY=J)-~@0NI2(KuTmlaHkp3F11-FAg1owgug9pHNFuPW%FTn}m zDf@{JeivKHDQ6T9du+`4iC8oBaC&@%tkuwLjVkm$7JBN=i~vM9y0Hdk4|Z zMPN8g@-oefjB5V%85|0I3Z}k6CmjxhoaB9Oe)l40H{tFiTqI2Ls)(GeJf0E=g}x9u zo1)~r@5&jHjQ=|}6gt(EQ||JU;7^3lGWqjez8pRPpJVb@xcqYX9C(IVMn0$O08%d- z;je%XnEb_V{8som@B>Z0#O3$FUj%=w$Z?7q=WF~2jQ0=gx`1&zV#sdz6AUbY+^h5x%sZ1 zkVQL5eS}sR_9w;orO$1@B;iDl3x3)Y`la}<`=i4B*bSFXdT-y|6Ji*yQtvXtiGM1! z?M~$76Ye|r^n{+0be9?7B;BpaI-vNB*@WBrv!2kAq@UVggezH{vMP0%m6DXI!-~um zguV9{J)s}QlUZlW3=pon7k$mIdO~+|9VxHm&vuWxzsaV5TFCzG@60gC8zX6bPFi2V zzbX1S+sK#X|2bD5*`(F9sV8)igc~0fuE-5HiEwZJrYBS?c|Rd4+?jUXrHs{t>vdmG zs7B;{#|S6=$Q)PRTEdmw-xC@y;rd2}%eBJ=ke5madpY~kubbr*UF>q}suNiQe%BNF zLS((pL^^CEQ&*)dOHJ7)(!^JnBJ14;;_FQKI{3N=dqVe^X(ivT6B2$6{D(fgl)aKV zncvhC>L<2P7n6^Fr#Si8gPfi8p{JPXl-cExbh_a?;N$tkT=)*sNoQ}q_pzjNx{*%l zZ7H{=uC`Y7TGl(|~*PI9=pD$ zi8V@o3i~jp;8$HHaIGdfW43E-J?HQ!Q}P2pm(gSDUKTRKdYOJ}%Iefr*0NqH=VlOG z@-~UEw_2f4Uv!^(h%p`!9UkbVg-V)RN%IcIQ73R6kvH2;Q~2HR>)@GAxO}obU=jXv z`1jz4n*3Zh{(wUnXD8tE;lG9-ZN{&*<4ZZxk$*UKc$nBir=dG(pDC^_$mie=_|&z? znTZ_XmvWuD$tx$h-py|-a%M8l+fTTNK9b+n0i?Y9-~){FhLN8LpK^lENPtJF>8xup zK6sz&2rupb4L6M(!hA-UX=a$@NjiY!RY@Ahg+fnqnc62RufKQY)FJ0F!VNOzT(qS1 zo|B7pBBJk^$oRlVhVYFJ&-BgJcXCxE{#y76$A?0vnY>ZoTj6KH`{i*JWfcB&;-{`P z+IXX@2l=9KJz@OxklBy5s03+<9)-8{V5DK_VKy?hBuGQPh2NYY4bh|UI*r{%|7E1n zf{gbPq|pigX@WGGNkjO#qN_$TjZ3t$0z8-BEXW(e`kREAX@vQKtIuL44>Jk#1Hwew zP_jKpmpYg4+HZv~@$hFy>U;%!Cw!@gKPSR(hR--5Y7Rgf{T?Aiemi^~yl#tOANyT5 ze?ji^wa#1)p&eYda?2;OZ&kF!mahua7rb9RcECRY@0Y(W_>bZJ@|Quy z49ZDRe)u!s{qk1|e-^x7{_5bz!cQ~x>+~a1ziZ&j;r;5T34SU3sb+k;Yu97;4)|N) zeajF3D71-jeefI%z2GW3_#FNK{4kTRaOKOn=|02#$A(TQ$QNGh zAhmkBs|UvxB#h{B5@Gb1N)BX%#}mewYCY*x62{Nox5Kx?`}z94@Snr``T7I!L-PE6 zefCl05#FyoO@J?k_p9sK@MpmL<$nqMz3`*aN2L5ldtVQK%h#OC7d||FPvE+LlWy~KD3Vp(LY7kAC;oi3ET*9>w?f~KXh|k_*ggZypcap!7kYYP| zS*%fw^dG;K!gs*OE0d&?L!RG*FOqa_G14L5DP!Gn4Jg$2n+GyFVw zx^uTo#yoEi{6+BbY*gZRJN!s9zC8ug<;*-9+ao^1W>>zkCr|)C3x1r**ST$I7JR)= z`l1KXqwq7iPQ9PevRN-iIvbF4FX5`qbdue1`C{aJ053iU+KwbnO2DCyORGbh4-8HuYkWE-mktkJG@_gwZpGTkiVdlzF&Q% z9m5_#g7kA7-Y@-P_$>+2uY_L@@0b1x_-zT&-|X;y>9@nTCrCdC-<%-*G%Dsr_`}Wm zGul%Qd@Ht!`@Szb$O~ttwGM@0{^|bCir4_ zzkJHOP2=I?`Q!ldyWoezCmKTxzzFXpj9Z}3V*1X$CPBUvAr-wqHnY@(a zZ*E=4iH`ZjV*`w z%f~MGtv>mX`1|2E!H?!TVt2-PE1ikYWAJ`HE*Jh8_}k3*$v0_5iTo1y@n`zmR5g5F z0)7?ziSYA0^6d#&fM;9auY`Zu!58}Q zlE+f`k?@rGzj(^${iK$zWx@oN(;@M=5VFhh#`?RpY? z7W|n}GQw-q2_Q_7<1<34nNZ5jj{Mf_!8p#jZItOC%}(0;~Qh~eef5-``L6V z3r5B8e(in;yu|mj*Gce=@QLiTk}!SF@o$$a;M3v#^0*nkXL9^JV8&`GWy~i2xykt0 zpHmZNyE$EUYwa_1UC23eO8j&J$jQi|{lX_|zxjk2`bkgd0?~JPUYcy5*Af{s;V*~x z>(?aAV#3suPNIHiJz*wJjh|O(U)$mH;Tc-G<(+BUt>|PeWgQ9M$aU%?XSiXcjm>xM zJC()K>j`&?DaW3=r~uFQB4>rer(R>oF~Srh<5t2{nldCEWBsg}FfS4&UL8w*CsCeO zc{Dq6B;Zz7jrOok?93!e0vi15>`S?>7hjQFuRH zE`|Rsyx%x<1N_eu@GbB^fsf~#B!8XoTNA`rxx8Zq@0Y&-{7>Qi>bekqOM>`w;O|Kg ze<}O}3F2>n|5<|gE$|P*Q_XJuI_*-IAO4Thac-xj2Kt>&5{!SRrm_Wi9Yd&iUlX+g$9;m&= zqvsV{;fKSIL0%-Cg|1EShA)Em)5+)X=fMMRd}GWpfR1oB{GBH69E=m4=EJ`TKgi^b zGaNJFJK+8NPb2&e`1{Q9UCJ+X!x#B$;fv4rm%kN$GQ6M7?}ncT?>8R#9R3D)@kJ5+ z8GGdehBGcp5I-M&6MViIUpDBtm;BF!e-wV8$s2nBjqne`$Fs=*an{2B5`Mj@A8aJ$ zR@XN+6DI2df4{K@J_Fvbj=JIH8xDSX$jl=n@ZT}>p!=be-jWL`=LEuhPMCAJj_C1v zR}Zt{vuFC}VF`Q|e7rn}{PpnZK70UvJA4o6KV{}o^z;W;Po0F>aG|}f9m%6}*k005 zbPP9NaKAw&O zL}`J482&snzW9@gc0EWK(c_zhDd##>X20Qdl5L|GJ*16fUU;$pJR%2vBD|l^kZ(dv zhxhYI@~wz+_)AI4P2V1LNct<_?}hi%!)ExO!;^bAzA<-ihu;eC=ktQ_JK#&r_{O=A zv{9UkNDw~etsbXr#2FvA+M`vV-GzKetd%XrSJvthnw+@b>upD z`9@1T-yI;%8u()PM02UFgn9GQ_;XsZrQPsDzU!Zd&*6`R_w@PH)ne2vc^H6^O@RM| z>xivNUB2zsLjhrW&-QOGv*1sGA8X1m`tZf@6XE^Z%R2a3@JE>Ojdz`z;m?I<+UMrc zIE%0ceg^zNlQ;UHZuoQHvD*%;mL|y24lRo9R7&QFpdH96 zC2XSdd`_6`EBy02fDPwS@P7Htho1@`uii!HGvOz|Gt6@HYMd`7cr4Bt$AZP(%W*riNOMThI0`0>V80r)!d--CSJr=NzV!#3gc=@MoyGR`Qo&$dQ* zX~WJMiKL^L(kvm&X>uKwK^QSl;REpN;QjiGLinE~;OD@vh4-_SrSLbw4>!|y)@A}c z+u+EbVeHvl&iW$q!|Os+k$48OLRFlqDr+u%C*06f*~$}oIy zGkgL3V3Rl2RQJG-h1d2KE|1|iyWyw8pKr!D&gW!Kz%JmAFvr&R_+P)lAbOubnCkLS z=qytPwj<3Tz_S6QaVtFPSE)}jkq+lW7KV8yGL|A^BVqjNZUg+I@O0U3d}FTF0{=Yx z8742AU)+oQPWb)s@qCH!3ZhSie?J<4&w%%7(-R#q;p`9m?U%cEb85AK`Z>r7Qs| zWI%QNIh*i>@O|J1aUGFitcA^iPfHMgDSXdW{_!`!AApZHSCRBv;EzLom6?9Bec)U8 zPWWngzj=bfdDp}H`L6){Qg}cARS5qRct8I&2mYt}exmULlNMAJGc` zA-tch?1O(3-cJXqXVbUC`^|ZWz>9o89ZiD&65dZoEvXF&|z5 ze+|4}88*Y;3LnpoqzvuwOX2-=6m;VIwUe|Wd?WGunfWvNxE%QLyx$wIj|)f~1v43;o&8DWfZ+ZxjO4PpHJNfW%J6OSK)T+!o3_!*MM4~#UT z#?0Nwd7f}|J8oW$aZ@J7upiz}p9Sz=CE#blr`7T;AXEOiZeO+-{s8g)>T@0Z$MDCS z@r`j&GyJFU{Y~B&U+;l`2j0(Tbi;oE@0Y(!CSFp0zx)-zzX^|qUH#dw4C=mm7JMhX zUz=MD{{j3+GrloCUk9H^Kh5x>AF-uKzhl_Z9{7*o{p`IPehl^FSH8?*#$523ru_5V z`YV7Bz}K3*v#B27*(~^4_ys0!+n_%2C2e*IVIC&Txn>ypU)g>Wem(q~@P2*#cKH49 zCz|n%HL$(#pTf^KdFSk#$UgvIQ0LEQPvKkuJVOOn$K)@3u4MxJz3_fEFdKdYyq}Jj zz~7#LUk|?=zQj!5I48Otz6t(VlQ;Gb_QF2|&lZ83e`D|a0Q?j1XPNx9ZXIV&rC)^i z>sKehzY6cCpV{#Lf)~FOu~B26Z3+BW@P7JP55FINpc&s-!`u%4HoPbQ)Q?Pmq<;6p zr+zQ~*?C?6@TKrorhH@Ul#OBD4e!?mCcw*goGU!>?GF(Ics3jURro}0U@2j;>iz3* z1N_nOes$Oap9}BNfl-H@@YCV_%BV1|b?|<55P-iK-cJXG@HfEw>0l0g8+;-iEGJB# z2LC*6gr5oTm&aE4$?$%8l<&x%0q>Vb`M&Hj_(XZkAgZJ}AmGB?H zpJdvKv9GcM{vYsu{q1J>5WL^`s2zS_qkn%BgbyU()26du0YB8tpYdIU9Qe`j@x~px z{P3fE_y961;YY&XXv(LpIgtd^|fA9j$_w{4I*sk#T0Vi7-bj3WaVr!#InS zqJs|j8{y-%_W*ns{PXa~Cv#)Yc?Y^@1P8DX^ZYgb<;aKM1s~5=B#oKyd*Exhj-+At z{gE|-#e_L-vAmS23cafU>`^*!MG{$ZpXC4?y?j9)&h z;YY#`Gt)8l1y?!o{rcD~@Rt$4+>CFWVc7-$OL)I}+7G`0KAs*V|LGU<`!EUQ=fcbH zT=>Z^fghBBuZGWt_e*~j{KX04Z-KuM-cP@~;Lm~gv?ase?1#SI}`A`;a`QHXQuBQ#MkAA&$=!Yy4u6rn-9VdU<0KN{#27U z_WtFwU)RGAH+g5zTH?=yzcoSpM)>s!;;)6@0w1rxlDTv>`Jct_0A9`*F7@aAJaw2- z>W<^~B4;^r{MOJ8z_0M(1EeE*Tm{cEiAtSnq~q+pNtkZJG=;;Q5*tSJQGO}12otY7 z!Y@z2OBx#;emd8Y_9p#Pp=(p^gy|s-zd8xR_r2b~O{L+KL&W!+zvaMN#P{Qi;SYuP z%)`lJcrBt5{?r8NuYez%K>lX<6X5;kkL~ce@P0le2!Bd~^wVb3HzkOl1D^%&@y(P^ zjwDDO7Q>HC5Wf%ldN}=)L)Zmv^?v7f%Tgtb-l$A z=N9Kt#zoeaB=y52>zO3=lsuDg*%w+brl=n!S@)-?2a`(qqVz+_SzLddV%c&ggIkm8 z|COw6mq#je&tXYv$63RYPU9|#2YEW&VUz!kQ+YDwcS*Nf>H$kaO4xBp!xzh^I=3ZR zuk=cJJ;{2kSIW)F*2Z2bo06~M`m2=X$-8>1hkIK)daGb>9WCj)tu#jRmNTd5bAo~l;M@1_wr>pWyGO|sS| zt6wLb!A}JwTMs9z-#PIHUSfTgr0T3UlT>q(_2Xo<$|15Q60O17mZI)S8g*NW`a^OS z*Ka$D93kvX>#g2ufwiKy+LSbb%O{eHe%71MBcI0gx?WaWZ?&bD^>A<1Et()FKe5i| zVu8hG?RD0QQR**A)42>K7i}1&{+S|=UrV)~8>K!?wVFq%O_n@)+_K&tt?un*Jv~}I z*30^OlzO3;6&$7B?fre8e3oXtp0DmW#CjrM{q7L!zI^rPL##XV)tWvM{{BAJ*3s(O zKGyot>Ti9l<)hV?eXLLN)i2X8LGm4atsjq3Tl!l3zTLZhC9N;}TE88mcK4I(5Bd%H z^BDC(f4N?oG5NJI>g^1#AXsy`ng*KZ$Tttn9dKEnFz#t z(&Bi{o+GUf3e;oYk+@%eM`Zpq)8Yi%Bbip)IQ4X<_3$|L^P{X)oN zZqBm)GG1-WvbK*`k7ilF8L!qHZT;{xwee_c|9G|U=-GsMBiq_}n)+w9_0VbR)?=*o zr>Wh?NZb#OvEDvSJv_*|bpoFXw!S<~bq|u~>jqmdO;8UHwsuTV?Srk~PEgAO!+HLE zz*={@3I?oYr>mZT_3;Gt-m$0f{GQ`~l=6#0wd+Ky{dB%PXgzYedh{fVC$FAlb)T+2 zJjr_ZboFqK_3Ja#&Kzsa8S3jCVedHET3M(zoouz7p&mNrT(0jLYTaF|>Qw6=XR2F=S$oe^ox?;<>+p-n%J1{6 z_X^budDdSFRWQ%mUZ{4Aur^Ore;r}nF;RUsBD<$hy**M2xmWBM(;QF$UODW!Wc6~A z_4{P?ezN`in36x>2-c-ozp&K9Db^}WwWnBLq^f&Ue}T6kVpqypm0#!Mfvh)AlD4|@ zB=!4bizhE9TR+ZGA17O1o}_-2B2OMA{>kd~6zlUG^;L?sH%Hx_YPII5M^ddVIqD~t zgxO|Uub!-4v8=~WR-ahbZ%$VCWAypz*K3stWQr?&-S+d#C31$*Qcmg(=LU5 z`VgyQsCxept9hte*~i*2RQASKXg(J)5hZ zO}8G&RUf8X_vETu`dZ6!)yBToheOqYe%4P;Rd@EcdU91;e~EQRhV}HRYDc+#Yw@+0o4!5=pQ@=Re;#H-u4!7PKrtUbxY8$40Ho&@lxY{vzM|zJarm_S%tF=WuoVcSikcgnB>Ix+705J<9s`aP|A6ES|i4l=Wnu`uHg8 z{yeogOP;i6S+|T(!7S^uJoUq)tvB-2E7{iHMyOA+t>;FlO~*(M?;B*T8>w0cSxZN% z8v@qrBh@_t>xq%-#elG{9BZu}rMix_{y9>8be#34QR=4StzVB)FCA}vG)nD1-g}f>nBI4jVbaR zvsfEY9Vyn%qf}d}_1RJCuc_9XM@hHyt1R_|W!;*kzO>FJ%yYf09a-vUz2*Aj-qtHw z>i20!bA8((*0Q73uMV+3&Qh-)GDt%9u^u^Ez1zpS_h@zBq1L-cs~v}0&mXP6I8@SF zoo@9Ut#+qd_h+jQ(ygCltB3kpZ)B^d`dT}))r0-4TaHmr^|St!tycB79y>;D=x=R0 zM*X|L_2Dt<#~Icu$EZCS);)v76mA-%9y&~9{^>Al+aR^{@T0hX;Bf2RL8=umI7r=j zggki?FF07eiWeNDmJg8dO#`e)2dmZr)~^Svf9WT8473gmR=*o){e7@{67M)zeR1Rs zNd)~eb9Zmu*6vQ4Z0+j9ckutvNBuTQUJJW9#k%28wIRj&sE_)4iuLfJ>gyEiXNRiR zRO_8X)$8;ohpM%fwXd(bkLGo#ddITvOIO{Nb!WQT(Mz6x-phJDUESQn%?@ zdRss0tKREveVVTBN|Ps>(yaA;)${uLuW1(F9bR_Ge4c-Hh_$P)3ii1>MQ5+i`4^mMsfe$VYeiyjbanH4!?f`hQnWC@mlbvq~ZTeQeDo7XFw6p z=UXo&F@mxFk)-xJ&qYr9@o*(p1!E+S>;Wa*f7jZSq?X~ElGLBWvdVbgVC_hvcbC5Z zHF>VbI42}!&7Q}^GRe9rIq4J0>Q9sV{3=A*OD8q!uQjgu6sy>!hAtS3uyz$mVb*aP)$JvF;O-XuB5?GOX>~B+v869VeRjR5a zj;*#s%B)Hm``I$@IX3CYm2&e|lJ!Y)Qd0`zRGVbMOjqKjO}3^nZi>i>zCWbMs*&NN zBX?j@-&3q}lCHFB?Zj+xP9DhrF-ZfZu4-2&{VqAFExFHMlBH#blZ}M4^W6Vz7MHtH ztWBxvamQ2W;@FD$_P^h1;9CuRtATGd@T~^E)xftJ_*MhoYT#Q9e5-+PHSnzl{tFsd zbDk~a>KAM*b?(EWo5!)t$={k4_8fPIgVie|Q)tb1IN?5a_-uz?6BSMe{(s>=op*cl z7fv#8kN0`_u6dvxB7EN#b^o$+pB@%eXkYYo?i*LzG4=ix&w>TE-i~(o3>*uX1sIN zeVUy=`@g&&D010!9Q@!iRu-3^S9-Bte9Hb;u+k8D>I2 zL_0k*outFe^w85YNf0oyiY$wW3hMH*i0Fc{sE972vWN)kqI~EgL{tP+L}UR)0l)vx zsq>tB>sH_HneNQKzxUriNKHRo_f*}gQ>V^3b*hSKW?{yCrZb(zw3X=srrk`}F&$yL zjp?OKuV#89)7zQe&-78I&oRv`V);yGF>PhKfN3|=bxcQ?Zew~W)2o@@$n2pjoi&;L?Sxj4*E@0ZtbRE+XrrVfa%JgccH!{7Q>HSO}W%?Xb*{3F-=}c!aZDqQE zX*bh#Oh=e*V|ppmtC`-&^meBAGkuilb4)W?md|t+(^jSnn07N=$8?10Hl~*{y_)Hb zOmAm;KhsBT^3BMOZ>#ei;tak_$hs3!B0Oy zn|L_ycLCoCyAHN2()Zs9-{o@({@*F{x{S?V4#Yp_;D0IC^a;Z+#2-6lW=8X&;n(4h zwEExV^6#IyeQ~nfZ#aBL<~5gUO{_jYBffip|CRV20e&DJ+$l37Gd;i;I(+}kqbzq8 zo|n%_%)dAD@2qe}?kbk|z3>YP97p_p#ApAP0tmHmpO@ivB>$Pj5pwK41>(06cV`0Q zm%kGK-rbtd=DRiE1EKRU@i*zunQMr@?7IrgCq5Symi)&NZzuj0;vpT0$dLTQ%7#^L*BOusSmS>OlZz4rOJA}-bre-?H+}AB#LqZX@ehzr3-rh|I&u%P z)c=U_B%Q6q7raIB>qzI<#CHwqf5@wq&ReK&TUkBC?;TM(1=86@{FO&3-cDTZsg?T7 z_^|><5QtBa(}4M{}cPy_@oEK1)u&WE%03|cZ~S$@6q=iCjL|6+uo(P z@!{SOtU_mx!xT4ratrXZ`pbQmlK+A?Xnw1Y+*2v|ZRaKF^b^18H(C+npZ60Vr~I_{ z{WkFxM=Bkfp_zTa7()LQ&nTS}_+BH#7o4g2*AxFQ;4+Rr6U_VfGXLHc&3^>*zd*bz z7}uSsfRuX!`*%L`SBU?4gVI5@-RC~yYqN?QKRi#oc!uKEFYkjvEc71;{J?4ZWu`CC`3~aReg4Y)bN`^7PgZ+7q;% z#&35Me}VjF?Q;wqBtqxjoi%?u>+@0K;XM0!;>$VjSbcs){BxvZ?|T>=EJFYKhm!R? z4Y)naB3&}f{DT}{#^?7D{~P&jj1TSi4@&=*A1ZJv@ebhAGy7!@XTKB9yqWoPi1(4t zBK~kb@U;3|UITxEbe`nA33hd#S!mcaI&T9m?a)X4!P@`diJwOK&_X)jBfiVITF)Z! zm!n~Y&hlxB4-$VX@x94!)^4`~mwD}5{hCqElakLp%)jp&6{skjdHpPxqS@W&oErHrVg4h6{9hw}+uOB1R?ioRUvj$Q);=9jq@~;!dK5pFSFkk!@c-s5UM8%|i&gfSn>UxxXQPJj*rtycz;W>i_KdS|96|i;4IBT?tUF z$;h1+lHb;6@YQ`fKv3}Kmnxmb#6L*Gzey5nAr*zkvF=z2jmCWO=V?l=D`f4aC1iJ@76qCi5BMU4064lKzXpMen_u zeztDnuV`2L*OoN@fy4_A=NB(QczbI5-%|sBl=QbzALt>i-DYdK-)6a}p8G5UK7)Vz z$!Rt4GfC$q(pkiZu!|>^&hMH3qm;wOpKs{U`gEM8?a)g)L%`GO^PkK=OgUhAo+5q} z`)e=K*>{f8-xSPuEyS<;M=jUJ*Ez(m{|Cj5pZ|&Y#cx%7KIuP6{PA5BKahAQ7(n>v zVJbug;={xrrC__9_}7VVdb!eRCoTux9GKZBW9zgg-%gk-?K3@d=pCBzHLuiE&SIBx zU-5hW{w~rPbNTtjOKxTUaQ=Ff_;v8+$!DAU7yh()>HYFgz@^;V=zlOi{|@oxd@pOy zM~R>MdZj-``p2MQtxpNLWC3uYzv*R~e-HjRNIdj2Y$bl-Nt)m0yE};grl9!lq;oP9 z7@>a+=L@UnM&dUer}^!@u;0q%fBcP#ZzP?+62FCZgw1Pm7PQbG_>E?SI^;fi;ycmb zWqf!M@xyjf`qn155r3TTW%+l7q9XLq_>0oLll0#~{MtV&VEk|k@%x`qd^7X^jQBb4 z)N)Ney!I_h|3kmij8H$^=Xm0?{;J=fC7vh#+zh2-^7fyB+q*EUOa6oT$N#A4$^7w$ z#5Yo(G&-}6*ZN$vT{BvLWr@Gx;$*v>OZ+E~YkoAN``k@Dv`40$kjZ=kHJ$Y@O6R|r z|5)JC&TGg&m@eIC5V(xTxtHqqt@>EzY=<+Gm%N{JR-LRF?R}pjKCfHxHGJme1zK+C zk9rsJn`y6onEAg4d{6i#!u72m0hfAS{&vmyS?2#A;PPJ21?>4{h2?bv0e2epf=@s*cU-_cuf2}5&cN4#4rqcg3 z@oy0S>b{CwKhDT1{e!p=Wc^+w9@-0!5D)F~b_f=k7uGSJ0qVN@oCaL#e=+$7V%&Yc z0o?k6kV|%h;wSk-JxA7K1wWK}vdP;Gz|-h_k@>@Rdzkp#$Fx-I_p_I=9XPIyrd*9K z;8SQ=Vt&v~Oe3bm5fB4AdieI%*=@>uv5)bX)4+6J3 z`|bH@=D(2ojLjF1x%|^JXP>UQ-#ty!SzutP&vDcz(Om9xI`OA|qu-6r`M}f4{Vww_ zqFk~(dq7|c{ky5pw3GfK;-P=$65@AIZ`p_Wze9Xi+KGn}f13Dtv$Wj~B!0w6T5jl< zIG*^in>0VF?LIdW57%WLBfkGy&A*QM+g2(4S8|>*{b7jsORr7VN6yX@xmUVO34CQ= zP5+bm+d02m{dZlh`8%k%9joLr%YjRKeu;eha^jB>e<$btBUsO!(Q%T0)xnz4Cl)I9fjA8@JXLMp=VApRZT;%A;k|HCfCe?dC`%=ym7*WnN>Qtq_9mHr2qe=G6J z*pJ31UnU-|C;pQ7OYc=WMqkcF6Z)aPD(9UE{+@F+zwytOuic9{${D1p}qJ8}F zAiTfO+0ORiu*u|z???I2&ivm2o<{$*5WGU?vX?aDM&>_(_;%{^Hxs{+_>92M{B7WA z^k<%uj-LQr$~~Tb&Lc_x!W#KMZTVZZ-LBUpGqP6cJn^s+FgkY<{|n#E)90@AWM4?-SpR{;2uHGiNBB@waJyypH?4gLo)^t|b1w z-8BD!%>N|uF^s)&k9(-Y$1N%xYGF$^Z$_eu0K-1_-Z-?ozNNIU-Li0 z{Qbmtf1l#UC$|vq*i-T6nSX9h>D)v;(CD8^e0tz#`wH>U|NjHvY5n{1b?NxqfJ^-^ zo~QMp`z&)S@ysg4Bbs^5AFkgmAb#_SntzP%^(ErRu2lR4;=4g$x^ihJ?m_$n;@jwt zvibUQ;`=UFI$zNwvojb~=-kbELS1p6O~l{$YyEEZ{|fO_*e`9&|M~%?6RzhjB>tX@ zv_MR|?(?t2!}Yko8J*Rd|D(*G$9ydHJp0{>zk&EiiNE>}3LHiJ3E~5k=hi-ZL%|a| zOIV)+n12!RdpY5w8t!uq@geq0C-LtS5B-zJV;~Ft^VVrSTbO^G_z?mBe-gON@B0Mv z``3V5o0Eh~?gK7<#T&VvzB7OP3F&`nla_lZ@it6+QlAXLv>f;z39n}JLI zaGm;l#E<`(()l&%?{lW+Kkk1NFgf;3;)h?L?Pg_78`S)trrdrP>2wh9rQT@s+9!b9 zv&`y}XPEy7Y&WXcnb9Go|B+`jx5@3xfv3^=Tn+rdVWsn#Un!k7eT~cr@x$ncvHA3C z#KU#@gG);10?tR){zb!s@%{tir@o-&KB-CO;1Q*>oa4y&?O%wOsUO-qK0>^=ODk^U zYspzk=QXU4oWS~gmgQdHaDMTUt4L@0b_I?8cH%#voIHll9D|8T-s=SV{~>nVr%1d) zKhjL%*Au_?Ont8th#xVobf!O|K#TsIIhFW=7Zta5z8Sc@*P?eQ{s{9w$o%2Dk{og= z_1t||&1mEF)XnMqa}99GANn)zBEFsetG!tNUACwk?hfJuUk_a9oO*_qJA?VJV*Xp0 ze;4APVg7ypu7Ks=eXG(5?e~SmL;vF~8P7ygH~+l{Lfw|U|7$Zut_DlXaS zY%TZtZCd{p{)%fL-z0v}^9ooyJVE?rTz`BE^Upp{%Y9v5=|Eh&&sD^iP`^Eb_%DDehC?(ht{nmJtu_-1iaR zced8&wWR+`;6{^>OXmEe(!Y%LG&wU4JT3oCHSqgt;77ej=`Uh^uGDH}-bsAhGg=#~ z=f{c9e2r$L+Lw9Fd!;_pGp(4n<@3q|HGMsBkyqh-mnR;^U0g)`7}m$$@mAtjKc{pL zU_F0H{2tmPHjb8FpyeJwJNE>AEc0>V;e7Ws;y3+5Gnzl-1>##CRvc=Q`yB8-rN1}% zWG?Y6@s;%dEFk`F;Px(rTyh2TzjUO&&>sBpx5UGEn>SymhL*8hl$(#t&?xbQ=sa-+!n z4-zlZuVwP#gn!ojcd3}G`WGc&QZX8%tTw{~#W=+f&3h1?@lc{aWty{k478lTMEKX_Qxo62F-EF?(qK-8IR~zeMTm zLx0QLjSlg?BQ#?h@y`(tA zKW(>6W&r^v72wkEZ~2u1gT!ZiQ1LsTP{79NAn~WE7ah<1Um)I2ySttEbHu~=ioX)C zupz(3{PRAP{$4A9OFhqdQ8U{3x{mmE`WtP$JVt!k4>kYMr2j|a*HYhZBYxV4b^SDq z?;QXx2w?{@m`a|zkN~eYE zR{JpjM~FYf@os#3FY$T5){NH9Egx4pVI1k{#KZNqe<%LcedE(sH%Z z598`TNc^S8H22AxWbPn-Gx^Ql>vzOYXMeRbf9EHZ{tLv{5Wfg`T77;BT;g7E4!g_w zU(Em7Ym`of^4$2L$8heS`ief5xsCWCoTp5#9`;G4vz_bX%Se9<@jL&Z0K}&IJVE?g z&YSNdUi_5OIrb{uSUd9=|xM`OQB1A@M6XuN}|#nsJ@x z{~G6)Lx`^;zQ=S!({pusc&wNZX9>e@M z0H49X{p3aFZ)N>==Z~NNqSD`YFxhT@BK{M$zvtEupp9h{+pO=_Fj2l^ci`FOP!)u9ulycJe?KaE*4_dDA|LeY@bi(+nwZyNc zo@RBsjQ9cXS31_7-yj~YL%s5=O8-I12a_`!fg4S~f!@jd;kgPA5I^KMn%nB%_BEw{ z+WE=)yq&n6cXlufxdynb!`{I8YiHu0X8xzPD`53}f%r`?DsKFC$*t-2{{(Q+2M+nE z=6{;>?<#{LZBmYzLFQ#AJ-s@w;523wg^?8(ds5c&Ro6_0oFl`5u0~O*wc~%R& zljZ)Fc({+OOS-H0C!IW3=c z#816l%f0l^4$iz*lgx*Rf9fX+Y$N^<@jYnQn7r-yMtZ-z1Gx0d^|VL!Af20uhw)?g z5I>)OPUF?*YtY~A4y8ZN`kYJpMdD#Uet~$n|LeEJZ~v_lSVlTCG2u%6!??{g#DDjo zW_%O#mw;QH3AyBY=HHj|X=LvZUq(G@H6J<-3?t?4#&)oIa2UAs@10-JjD6EJeGl`0 zF_;JMCI0EXcXAnLlK!jiQu-YaD`0$n5b(76pT+#){T&-%8~pGUjkQ0D(6aG4iEKh@`% z|Gms_dePIw!~IIfen;tt`|Hmpeoeo&^Rq1XOT@p=btuzge@#5}x9{;^>FqD)C<#BD zHmvlG&IXqs@%-zxKz3*52Ihb2A;qnK|42Oa&m4QV(m#swXC>?Zuf*^EfdaoH{$=93 z5V(l=bHqcvcc+n~{+{=0{ygV* zE9(T}q5VEg{NYW?5A6QT_lbXidw8&peAxG;{?jub zKUoP}qs@`I47k+)inEgA<+sGc{Y_#oN&Yp|)2!V#6MqHy?Jcb5tN&Z`_no8kt$j`> z9-jZR-vgRIoKM#gZ=>8eg7p8Lc(_0A4&s}h(Tp}u2bE5EzCnrjMRW*V&vrf#{Uq(SAg6%Q$rJB*wc-b|@XrBHtIr+GKky38f8I2G z;27wILjTPND{jw@5Wf}eEuYIZ$$XUf%74=QCii|z{K?;I#)Fyvupgz@XAy8I_n_A* z9W$e;DsNN_^zkTHs2Sdl&JY%Sk#d zKUF%%?WK4(^RFeoh4nm;_#?p6-uI|Sw0$zPBU+ii1Gvb6D^@G;a`Mmlz@`3SoX>T{ z!}#sziGQg_>$!;ZSNu%r{On@I4SnGb{@Z_4+}ix-#6y4h+{cy9 zVJKfdCux#-FYzBy|2&NNcZnbQDy9En;){N+bi(~y=MWF|-p>&qxJc<7KsrAreiiv@ z4)Ifeq4dM`@pFk+9@UKBWd3gw59QVLUn-q#7ihUFnE!O*70UlH;$J6z6z!=Kh`;KI z^nRHIT>9ntcPsq?=6`pM{P!~d(XZG1HebBvS4t<0)7bQ79WS5ec+saanJ(u47|VSd z%e?@&@c<#0Txt1f=RQP2J3Xo8_E8?%{J56*61LA9NbJkRJ87@ImiV6FV`+!>H!I=A z#Q%->Ih=QPC*B3UO7dUL@nv-$A$~0TYbo4)!RAqPSK5c;8i=^ufo)&C0SzZvx8 zWAf@7#KZG5r=wy*fB7leK2Y1-XDjh*Iu*CF?gDOqGpkD;Vg8*de=N^Y&nf-=Xg{{_ zq0@=4EGm7Qe=jE<`l)_SJUl;e=5LjL=udbvaG5V|{Gb;2^=X=(%KYKF^LvSh=M8?{ z(P5>%WXA8b+zY{X^0D!?j(8Xku!Z=Y^e@>s{U-6yZ?oU?O8?MTX#3cB-$Xn-*Xums zdumk@|9+DBw?C$^$@8xhe|bLHzxzRN6MhKe!$*jR`}M9M{`fkjb1+N)JMr1H3pNlx z`VUHfdLU0W6A$Cr?j=5xt9ehADOS^n*6_l_*%ZN^~=4$XCzuizx;yvTOZW# zmjA#Pm44`VI*xdFZd*U`Cn#sEtWOfZmi&Jh>+lESD=43jApZ83wA`7LZ${?^;NsU^ zw@?{*AARl2H<&+^!w(UE1^wi!Nq_bqmHz6${(U>~aGmHIz^x7>;gUW6q;#I3z1G1W zsJ{BC;1Cy2j;{x0kH`-q>7 zc}6~mXp-6IZ%XGf&I_g|oJahV_iM)Eng8R&KTE&C8;IXS`~})^80PMC@ZZzr!vf&) zzM=nrJMr?5_4z%?Z~J6+a``*hKGx0`5f9J(c!+rDSD(JqPMKLsI`QuTz@(3-KJp3O=WzHddKJBk^8azt`M3KN--{3ZhIn|+>Z_+|ebxs2whs6# zKI^_*|_~Tbe=Q8@4t=)EhS$h4~0GD<+mV9FJ?X$#hcuWZ&N%~I{pD{<< z$J*qeok?dz@gnmtC%zNce@#CB6Y*Q$r1?jg|9Rjde_DgMh(9y`W8}|O%)bC~Q0iZx z{AnjXO8hP4D;tl$B7Vn8E!W1;8!-RbyO4xSJ`7ywhkn;biHH8i*S%8nhw-0liErAj z)DK`G=M!Jeb?u{x-%Gqgf4k{3uiQoHKQN&6pUeDGJkA z()n&MFYFF|OWNVWtvF5k>y!ADTU(}_zJ^Kyfp?_>Y_#=c)XpfYM z|30sDY`*va@xNd`myhw=Pk>ul`V0R>K#S1-1pCGEECMe2@So4nd{@{*z5V4%TT3aE z%jNruxk`RR2Eb@#Z2kI{{>(t3T-Zv479YS=g6%u4i|Izayh>>R~W98w`SIt^FxK)z}V2xRy^W;%OPha zk#)3C9xs$z`bS1Gxzl?qE9d2M#ggR0*HxXl+{kEUaDHJ+p?|DWEDg7hx2>E#S~x3P z``3|tx%RK~@oR2uxGse`(eEqguFdxJcCB88(pGkKukKlcKTdD!lBgYc`e( z`GI0~)rwOFdsg&TI!5xva#yjK&7w`Sz3n+X&|8^bE)12%3%TO@u2u7Mxedc(x&AF% z+UDkR!=>^N8oP*o$fLo#x;+xTmCo@(zo5OdbG>=_H;Yed`L1;Qp3APu^)8nG*0f65 zUU74BxzfmJTN|3RTo`agcGafkzezT`s<$=Q)|%@Qc9EyM)}SiA^Yrb6 zMb@sXd+)5g`BM2$-y97oZQj*W`?Ruf9 zkk+7+t7D?9#ckQ%PO=7uM{yY4F%_&aH7!@oGfli=|6tdu-dsA1gPYS?JDcrWGj)yJ z{{L(v_g30F%lYAf(oinn-(MIVjRb%b)49_-Fr-E+`AV_h3Cv=Cuy{7Um4S5YDo?)n>%sUDY@)2 zg3FflWO7U1x@zG`U5g_ktCueA#ZX$aaM8-F>kE-QmA2Wrp1xeATqrBQLFxJc3yveB;Q}GY|V}@IB{jyqQ$43mYa>6v)bFFW+<-Ws)Z zssBvrHEHlxG)$bWhzS@nLz)|t$>b#lTA>>)@TzbGPMA%H;<~s;p~a*{g9hvomd~vjgXWc!?(aGcGtqJ=6iY_dw4t#R{EeKB!8Ir3 z?z~*r@ObG=5bmwasR)s-<&He4V`n-Td^rD*J- zdD>c)V})BW2*KdF(c;-|aI}%fqrm`WNO-nu0Gc5NDw-BE^B`oN{N-ADE}E{tG_tj8 zWnU{ajX62I&O&KQCu&ebC`Hxs2Lo|VPFhM^BIp*shUw$U>(SQSGAMC67^9Am%4DT# z8}S>oK&Q%iQ)Aog;lgI?a_DHq?7X=DyH_~Th71?fdV0e0<3nr zujN5w9<7w}U4zAbVWlh@sC(&}T=xoaO?Nl?9Q*^R+r6S64|fms&d1as?30Ij>R8s= zCDv1^i=_fIcQfsbb`^$!xRJJlNSmL7qT7S!LlrtUz^;)Q z*G(>_oyWSJJSn47S~RK&_!nP0i*T8FBU*g??N~HFmreIZ!DLFOKq){A}qfVSa20l0B7gcwzsvz%*+pL6)UsMviuQcA%h?CLpw;nO^WFWo6G!v_9rT*o*R44~RlX zUy~D+8>(YrINvAp#`><)M#~sAt#AR93%OA+Z*)v3@qy`6{+q~pgLH>#H&`4l)V5qizniT_ z4(b9Y(h!C(-Y*MPx~H~?kZEL2&S`)?<3$EfI`3h2O`mU}97OZ2a$A)yR4r+pW)$n< z=A`n6i3k8OVdnI~$*99sS~+4`v5g=iB5#=q(Kttvt)o#q8EvvRH&|F-aav>aTs-=P zb>gv(E~?>j^9i zT;O+5l{N|O5IrW^WOYaR4_ePcAwLOXCDKQ|r{@fa%_mcI0Q&RM}kb60!wc)|D>UK}o|W znl3A-mAO|;5Mj#2JJp!NGD}Wvfse8!clsKcY2lE@WL|`fEpHebf}y3|NS&;Xwgt}V zIJ;0TspbM*Yzn%ry#RAH4}DD}f7f!?pU@QH3UG#|F<5e%YJ-IGrYQ(4nR8~d`5NV; zIq;^B7AEX=7!Dm^HcTmLvNYcm2b+S>TY=49({ELq;haEm@_jYTj&3n>(V0$m=CJC3 z@!(`4Pq#|A5qM6yDaVishV*Y&4#h&>$pQ{wr@wepU% z0){l5d@_~g2J)4B+%SP((p-Cf?_mf`y7!u7)p!mM-n*8$6g^NH9L*-oP%=?lPW^p5 z-g-vK*8^(H|HNqUR2^ZdNV!g^I%2Y_b9mk+7^`A0i4ZJEKe+)X>yXZe))o2XgrngM zQ5bf{C^!#V+j6jwC_A=JBtDkakSv)|Ox%S^l{MAyv2OaQqHcsk2N&%@#%$Tm zJ-v7b&In!I#iEn`Z7|dFUDC8#V5Df)@|TO#CCwKJD|3q2($+kjJo0_`J0vM0wb(Jc z3WE+=S6(#7t%gJnCuP{l8qJ~?;sY;%bN1p-e+EufC5u^z9e9U(pbIXCcNiofgy@jN z%q^paUN3*hMM_~iy0w2}q5n*%;KPnz$t%$-I?3S80P?8FUx=0=j8t1N2VV?fR8|UA z_H`4hMA70+t?}cz$el9X=Cnr99L2YS`Xw2VrfD5jI=R%Nvsc(a4lSV*avwjb}9yG9pqQ}EcmKn|umqrH*g^^IC`(wdz#YhRx+Avp@ z(C{C#AvBrpsP1kVK44VSm({LDd8uZFj5i1cB=}F69E05X+?{gX2s6sE*T`5!S87r@ zQTW4m)j*f83VKO2L?mIPf|L$fnWo$X?K|FUsVT?|chm$XV>1#vWr@d=h|N%x7ZiiH zv)}WSfM#_U&qqtc$irldHsZ_pK|ct2*R#S#ak`n>Apt7LrQSV; z$V?c>)KqK4eV?$Y#rx+5;gTFGYfFBS_edtJA_P(uFMBdAjqP@@ioPcv%V4qyjzz0} z&RE`B?~Yo6AU!W9=3pk*wHnKN1I6Lo*l1xuhL-n=p%XMvlSD?iF#+ys6~ztf^5CWv zn+X|0!%Ad^6B@H~;22rZLg8zA(Si-meKNnwN2iVUc;a&FfpMUKdOu_&MB*sv!xN2> zK9h;HUJNHFCKBZ6h`4EF(ksoF0BoJPPHX#1;_)mg%@)s+ftl45|50GXq(o_?DuUJm zpF>M5ZHAiw?jTu3uhO9EyhO+{fhpy`IQm_b|e78`4OwU$r9qA{$n>{ zRI~D@hk%KjX(CyDJt;N>jOQm*L1TR`-GA!qLE&ON7Ov4a?zL+-Z&OPjk(Stm;@dV` zTqcnZCb?J@tr?g`Z-Flo^Z@I_MPR7q2?Ih`=zVdMCQ*xyLwqx1HkRw$8ZLqhN@Zv_ zwRG?XvJV;5H0#35>BY30bOgcJVw} zfoi3rFOryy9Bf)58~4ZTJ5+=z9vggQ4+#jUvlLRjXy#@wQJWUYpkDX2gG z)3~Y`ArRM_0Ud6|JW?ak6ZxD|xpIiu>fg8kk%J2tb>-SxW>a(}#RXs9wDTs$;v5&v zSYrsnA5s;9G+rer6HbyUrW1#`1}R}0@O?Al(wh7%FG`eCq!xFz1%za#ab|-AqEiPz z-!w80i)0p=BtfJ)sAP%{wT+mG&5@KvG<{rRAhA5l5yY_iJmfjbn-jWdOBda~N)+@I zZQKPu#h!tNn!ttRZ4KVW@v7bOHE{yt$konb17)%Z)l;f(yWJy3YfxAXd-( zIGmPKB*#P;eA3d+prn`J zsMyMJe&fV@fUvB()Lv)vqXZju&1N%0`Qorv!bG$8_9iJ4(NCy49zZUvucWU1Vig=? zN5@8qqk=&{orxuAEjJQOaMq>!H_+l5b}8Oci>ZV{Gg`3)nR=m?VunNJr9@s1suBPn z5k{VnL!72~sUVUh5~fW;4So3^>B@yI;+K+m_oP1Mu@t1Rniky3;bcI+bYpLB6e~jg zl^nLYi0fBo0v)Z$<9EGGzO?H2{#b{riX_cu2SuVYcqa~mVAbVCX5&RLT6up*^ z^G;ozlvL5WxFE@>VhIh*DNfZ&O^R&63yWXQbRFbC(^*J}sH%kxrSjG(m|bc|z0IvE zPC7yZeTDDiu^pMF^}AP?K9bG0dq}#bMxUD(yGbvV88SY{Kn~*_CL=3Dwb~PEo`Pgs zmhfuTQwEmMynO@C#DSB<0yFyRE$c&|=_)eCUvqxCwl-0*{pD3p!Swpiq*$Y}*;M05 zZvpve?w{n&tteU~DMDSe3&^E=qHQ7Ee9?hQ*Y1|>>Z){NZF*fA^Rl%?M;va3e7fK& z{$&ZLSzd2FG_74@pT5&i=$V5eyP>jCc3YInfj5NRo@#paj1zw9mecs64TRP%Cq`dh<`{*nE zDGS!(ghU|6K%tT^4ni-^!9^+i2uEc%vnyzm_-Fe!p;aVbaRYW2x=Gv%N2n4B7^P}# zd+`bLVRWr=n+?Y^&`}ZZS3Q|bad4;#HJYhYz1Pn9Q1KROsdsbpGrA#_H)B*9HJ+ZQ zU|Cq%J~uF0%56k=|6l>#)7Ak2x1z9hX}L5cyC&U+oQb?hK8weE?}hme6|;kG0E$(j z3UQTIHc=r>Ny4}`-jdSDpw>q0t*P^D$||Bv4r@lt!C9gO6^j)JjcRjCT%x-6C@O9| zI+}T5Z$+d55fO9M6t;)F7DE~wr;lQT0#sdC-4w;C4qtRhEU!$XX=+KJspd;;1e6^> zTy9C9G?kNMr7GcRY|Fw^0zKa?p}JrndGCq1e8QnLQi&9F`nCK=XcD%Ck;0<;!bSqO z$C1KQAVKD=$Ii5{FcfLcT2wXZW=h{!H-$rRo*ROZ3F$n;G6r=3HmXNAR(U?sAEg=EXe}`&B|(s(6uW_jA*io_Za42)O^Q(z2UM9H$4jIN zM{!_aGC_j>LMQyH-eP$)+f(%UUWa+qaudgLc&k0Lp>zxLHEw+t`?Oq}4bor6%>#Ik zYJnd&m*1M!dGWU5#;aDt8(z&cL9B+A?RY$0#jB!Wi%lt86{1+72G`{o-vbt?3Oe?+ ziYoCMIXhFLH+n0Dv*5m|#c@?9Go($yDGS-Y90Z8`pjwj;4Y zaV$+-B2D{h^Bq9|Qg6s`W#B20igCCkniwL+)*N&BTw8K?q#8>iD2WFUw~mnNL^bj;aYhKr=woUB0Y z&@c@ha@OAzhd7r_y`FbR>|k4AmTQ8(A(q?`<_81V`bE{8Yg0|Ahs*o}7HjqO@L~wa&u8W}R0E!~ptVg-M{0u@2H;is5oB?MiWZy z*`bl5F@UOr@*35f(e@`{m8c@yOW;FI?m>$J+Je?gdnuFgj(z-%JYIiE1Bk4HZh$x} zM8x5o3Y@J|&LeKa0vuD_1I>k;g#LrM2q~m#kGZeWmZBfq*R|O-hQ60o=z^XKs-jt2Iy3Yfq7Q-Xy}jF{8q;kAFS?( z(;1>Yu#mw-VFZ(79KL{t$jH%oHI_&Je{!Z943PS#7W#n*@FDKlIaHWH$b>e3H8ZEm z7?zc59q)2ZtunUJ3?-xqJ(CZyMiw49;7gU%V2Dr()za5fg}PU6aPVO}4!@NnuhgOE zOW=vzwtkpMJ^kB1W~>{kR2bC^Q3RL3@Yvv>p7VrL<|H(=52|dkaXD?p){ysBX*&8O z;#73uH8)u7lW@vBj{K204ISjzaWT6?YasCu*y4boH+OU<;)bFF=G@*e{Y^o?SyF4| zi6l?agzih;l2}OLG1ZB^Qy&_Tp5g@4Lkm*le4N;t4gI)l2%Qhj+r4C^rOUNj87-4oFe)L04;u7OQb^`=l*@oGuumAXs7sC~uC=Hh6< z%o^G04L8=fxv}I-Jg!=bJ>&lK*7Z<)Yi@BAgzfQyZ7ffkaNg|dw|1ke;t(E_+DU7g zVR#x#kqSx!{o{&sJV>utJ#$W3FA#BF<47ku-6r@N#GF%R!`S5C!V) zd>y8Z+78ajl2bJG*pg6*=Gn^sTcX8GXdd65qHkv>KC7J*Op^zr*m&{ul|W%?hA%@8 zAUM9R53q1n()*Sw1}A+sS?zZTr_(5`Z;Ix!s>ZW&mJ6koLvnCNcHB)4UBd%~EjgY+ecI@VtRPx+ z_teF;7^P(R(G>Rl9K2(+Mm>}tQ4f%BegzW3*FCC7fG*xb6W!6U<)ov$P94mmom`h< zyVVq0-%x~T-sJKXcl=Piz;D99G+F2trm7bbyPl|WPRY);cCe;TNFBLUYvO%olh_CB zPu?_@9ozdpMPG?98Ry&^=Gu0r_~DWp2G8Tho#9~w!bfJU92#FKRdC$?n7b}QngYUk z3f6uC&h#dUG*h@rU`L`{R6?r!Zhgw>(C`H!#5M62s5lsK2R1GE=U3S7g&31Vq_fz) z02w5Q_r$vw;*bZCOtNYf>|>C6L6xn0Dxp85T?DApGVq)PNw~AZG^TVsIx!5Ex-(z- zYpJraP?ne>nVp&oIf*tH*tqd3Wj#>bV*Y6h5}6YPiMZH}(XPSdxsQ!%h+@l2{6w}p z{Xnw7Fl=Tzl$Q~&3jKgnbDkpO`X*rW70oT*Va>Z6elX#zNgu|ItD12BHk#k{i;JlN z)7oL&vb+^-9Pp(`y`?0W-F^_Z@rnPq387@{J$EX!%}eo|O{8`~8bvGkv4RIHQHs+2 zjLy-bJ~H>#&DkdA%}V<98#hVJ8`bbpAhqIr@MaXtdOw&t9?Ni5V*6AvYfezN7=V?e zEybjGm#!Yf#Ws)^fx{OqC|o6CCUxr=!f@(@z(CYt7`eEt>L%OqLFEo8b*8(#yf>~= zwt0ChB9eQ;?LUzV!|nas5g7u5g7a~#xJSziRq=KrvL`-Q)J-svaDuN)T}i>2=dvYb zsulOjMtC)`euV=9=ey&`BnT}{k%S8FSc9`b)fTv*%hG22I-FILRsC=bKXldE73$y- z=UB3Pt5gff4HpMjJ7PVSGdsi^Nrh7!z|Id9n_`iJ%kg1%SkvhAUDU#Yr9|J=<;tODP+>m_nYy2lNY#Hr7|2!(D*?>BbG28)ZPHKELO8>X4pOdi%e$DOPz8k$^N zfy;=zK(={^KU}mG8+3{p{3XZW4&&;PYC|Asd++T;ZKz&9h#Qy#t%h5|1tErB38|=S z(OMn}ZSFYwE$MxmAoi_MZ)mx=VPj>eG|GJm@yscw?lh-=Vhya(gLxK7ESZjj`rG7& z(0Fc}oMaZ$6Q{>Dd&a-nts-iv`U;BwUW!WQe@GI?ayD zagxg-5~n~^dOGrI)L1Lfs015XInlXSvf(6sk7>*rVF&^kHr~Wy+mNEO=dfA8Em+9u zjloS?%IV%IIlktWrUo=4F5>AKlYn%ztgzq%xrJ*Hde(O|Bf4rv|Quyn&v7%tNMOf=;mVFL;PTxb|VN;_iwibqddYAFk)N;+C;2f9f#dtwAN!<;HyF24b#vaP@G&d(0JWF5QVh1iaoWx7u1(BqyeSg>-pnCC+@r!ingSicU$B%YVYfcyb{I_{JVH*0 z*&Y32Ixsgf*p3hL={B_SFLseb;`%!PWk!ZDPsUE|z{WpRy16h2Igz{r^8uVmxb(r@ z`7kipJwD`}B-FxqhPLFPqG52_gwgKtJed(P}k{2FFAuNU3j=oQIS={YXSF#+5inM8E6CnCjtT0)$1N;-rf5IxZCu zjvcw)=D?6_U~gK5;%wq*Gjq*fC7rq{bfBO<47_xtHBEA@y%QIui^?>Vm~a>$?+w{t zIW-)uNwF=ep6E>IgGhV9*#g)&AUAT=a2xv$9>=$GvrhNYp59V#F0u1knYz&zMSpmn z6U>6${TN@f(>ESRwVrqnCU&CgITE~g(~c7_VRxrHCth^8RHsXF%5I=YcPMY7I6W87 z_!Z@)Zb)_KEur-~aVgo>LfP(8*|C;1&PJgrrl=ip9h;)4q#8K=ldx7IL0|jm1XvcX zAC)W8b^PX3bbmdYyHDZ)A-5%>W7Af8yvWQ+ge37^yfnvEYn2g2PFi&qNAxmU+P$TZb$ zT!+B3ftz{KrYg2<`$zk)@+S^!SWr*)Ni%hoz7xAICgo2RC_*;1P z{2yJV(cEg>wlahr_hBnHWJj7`St=N_IF&CNIUL3Ce=(rRt@O(bK5iMd5UGi8I$ePO&d*2qEQS$g1MtjcvGQPi_Pg@=w-oiDLX#V zW`S2G?dVn+tWYsUWdidg2LEZ$ImIJ^%iJUr;X306{SSJod*{)H0lutMEN?c@%M#s+PqbI0<; zEz^00%Bx71ni!i%9rYiLtyyn^^N!}SUiF`0ammms$8ON<-TE*tX7>a^>X>at2Gkhj z5{^<^*r;0;j-X}oU*rp_xA_CkD{iBkf%ZOP!F`I46m5zf$?a|P zRit~P&grrVi5I_|=X;riGOKrgd(9nabf|vyGEE?hV|RN}!%C4W5EnIrS=^c9kp|s> zb;ToK#dwo|rPQPLr+CS4HZIAtC^I@typYx_T z{>$T*G@;&X*f!#EVa@ zOLX?w76Y4$QRq9qeZQ9G$ z&Rr$wW0naxGR$cs56Yb!DruX;5c1Kgu@e)C0bgD4G;7b$jO75D6DG$L-D2*xWAQ*E z2^&ftdhE4T>J;O%YOFGQwML^u6{3Qs9y7nY(ug+2dvW2uOAE?J^+_C4V5iQ9x|;J& z684%YV8G^dkl67))V*RV_ujeqn5yd>8GAEP#~_9vdQ79X}*?FwW+NRyA@MT3KcOK73?gBS_Pz8 z(XsV0Wui8I@rKo=R+(0cqa!7`_}o{|)Wt4wKa-5vOKagkgDVW}zPC$Q)ZtX<%s?M*0q>PWF zStL~mSG7We+&5Pu54e?OH-tGnmVsunVg6 zg1s8+vh|h3P%L<{ubh5+E5ilx=+twBWBI}vTAm9Cz1rwVcZa&y@)bpgtjqf}KKhy* zdlJ53mpGPEcO_=~$NSR6l2^yDjU$D*qbmH$k0u3k)D6F?t#~DPEpV_#u{kMwwcS~< zu(;rQh&FOpZ`GDlsO9Z+M^}4sAPYrbd!@-mcT*<3H%e2Eefb>gyq?0%U}99Rdc*>3 zm>;7d?gHiDSY3~UvJ&@V)s9S=Cu*{PTzoJeH&Y*B92YWBWogY}#8o+!NAX;8=PW$i z*flwX^#Sn|i43h>9mri2>Kv!llW*G`oE*BLFkstMM*Zt{v0rYCn|t*_Q)QAyy8(Mf zoEcSJx{S_7sdc#R`YC#Z5VKVs`Ye(wm%fP*X#7P#qQ7XD#CLn~#EGk9(hjH;l_9#u z6%p5nr@|KLE&0CUc$=K!I9kN2QGOH~Ua|6nQx?{jvR*_ehhNn^Rl8ej?^=zx9v%QR ze2qOL{$Qj{0K+^!8>aePn6x2XB^skHfWS6&Dr*-~p@&jq>Eex!c;BYNg5fPiG_Yu0 zpwLhZFgEkVt8a24sCW5CL&lLz{Qf<8B7?BUYpKxJ!l5%qDy z%c3~SYP2_N1O`lE?fgW?%5ep1$Eh?^EjK89Nlq@115RN>;)EcSOrr-YD?w1Zx6q8j zr`q=#=-z%`ce)uZj|fb$%6Q(R*%pC=vFflCx2;jGaTlPOWz4CGgjN2 zs0!=^tX9Ib!F{ZG+#(RwOOy?_2^-_iE(z|bF$2_FhQ=%&EkjH3=}b_?<94@@|NIf2lv?+a^sg{Y!n;Om1ZbdlWz~+3pfVhg`{;_hoFx-zDDiQ;~Z7$oUV-P2B zMqQ*18Za+up-~&!#u@2PqHB3>eA{fVi-ov3UP_N=vCs*Y`fS>QPopAG%1^XIJ5Rzg zZ2_;|D9z|*?&#&Ge(u9wKX2~yw6mhqvs8!;xj`nOZgAg8U8kNd zU)C7cj?3bTr3sYoVq856$!t9Pi69MBalOe}Hl>O&%)RHfnF*k1 z|4{YVO&Q?o#YeZuu-4Tk8`w#utZF!5-jbL&FhY%(VUz}*uTn}OZ~GfnVj}~TmgFy+&2guv@%Q*Gj!Z zt87;|CIedsMfrj1oyz_ZBY5lWb4L41<$~Mt+BUm?W1;`dF`lbb@5sp7E>c>U6IqBU z6W{>WuyqVKs*cFH0OFt=iX27Jb)Zx0_SMx?coyMxMn{!4=itW2HpE;xKfIw3Seo)K zwdabacqU#Q4IFzKmH;kD95L^yL$WVKZv=Ixi%H0#gZf#1S z=?F^*wC3hiTS@b#e@|OPd%D;i#&>xAmL^kDxEC`kjCAv@Lb0)xXkELG9i)@myefLN zue1vHp zf9l!rn3@uPqTtA;x!7qn0%O~4u;#WTU*HGK(444)D675jJevuR{ z(mxOu(rl?UaBa${ zQpZym1)MbmjX|9_@yHa9#s9i#nJz;_Q;5_Sb6+-oCtlUdr%hwVh4G6|${}ix#WFOd zWfR9F*x)xtYMbQwPje;Gusn`yoP9k^=J54$Ua^9>PE>tasD+%NI^hPgW=6jEuKxOw z*tA%0#>V9((Y7)SNrVGe^27ad3QryDe9k~oBDUZqFX&AYkPcj8NB5B=Q<%BOEF&;T>+M zr$yAe!IC(?yC}WtxOR?gf*fJkm^&)4A(0D5Z|=;()_VR7uw$T%){<<~6zP@^%1z|)9ddAby!Zd7qnO?=j z&qjw)PqO0lcs6rTC!Mhp$k8@$a~TdWwOmHml$I6;3-#Wjwtoa7Ki2;O?L`hG(8A>-h_})BG{@8+N8ei0wxiODNN&Y6S!r#R35^$lICx0dOECs zrU{}xWuW0I<}6P%sUC{Ww7wA4?K+-lOna*-T(^ctu-hGjAuKs*XFQg!v)=HOONKmW zyj!1XRN7g{mhXu3R_>Z=PYtS)Vd2jxU_gwdss)*}hW0gtXy`%j5|QH07Ba`<|HTe- z+aIIwQCa%Kac0E{jx(z-a4_0kEVHcs)jsl!P6!C0222UrpF9)?VEW@VF!f#8=J_%e zQv1p|fZXKp|I)aJFSirU+kw(hF7NKmi{wtOlHZ`hxPg{(PK&|9`byfh4XI0QK2ygt z0~7!=D8*h@J7K7R^KHgc7RYS2NYDazb6F>K!IsuL+|Jg1;^n+B z91}N4FdP$-VyXj2JkvopUe!5Z2u%Y~R)hk80~;V@oX;E~91@V#zp=_|-T;F*GXYe& zW2u2Bak5O#-3Wr+P846CLsdZ37 zZo`%>Ib0<d37oJybPEYd4AD>XM zo~PCijPoB#`10xz2txv=uCuByLXHmNGl8`u%;29AjOi>e2X=%qR=f4&;x#ZW^*&%Y@O4;CpU{M=a*sBfb>oQ3^` zZjV0PlGQyjD8|ryxmS+1kleo0yfs8?M;E=Zj9c^GlL>S)zcW&GJaqxaQxJ8Oi4PRP zN}e3ufe5D3RwoIZ_^le)`XZ31Rd;$ZR6F#XbZ#gN^T;)j`-6ruK+j^rCq* z8m|5Z)jpZ(QR^7IOe`OzF zO-tUXWfCwPIuv19h^NBM6SYnrj@58`8;g}rUGa$3F3)4ofXW5FoTAu1ytVMw6x|BC zS~p&Z)?&BAyZB<9R)>zk(6c*};q4n6ltUYr^8_zlo?MNV#@vfdTgvZsw$yuPM#|k5 zTEGSYIO#D#5FYVqg$yrjg?OuHIQ!?=`g3#q7FfzKe`Lcv z;0)p#H&oPG+KR`Mx35W*Hr#L2jvG=aK{Q(p3rl)gloX`VtOzc2&U$n=_%Q13=vo&4 z?PHb;Z)NF~J3WfN%B6#7>IAp5Y2*N2z2Q{vAJRe^F&Slg8YpA`zBqU4szRxIi~Q*} zoHqlnf4}(r#Y-C;^rT!P8voSB_ThD$))Y$<*4Fb+CDz9=4Xo~MWZwrDb@a6vJ#fx*ZTUxc{ zZN#OFDBpl?G(rjje*9&fi5n=Z6&vxOw(M2XyH`jd-8re znJGmeg&KsB@A?i`EFD-ReNBEo{ZJ2VlX<**?rKTUzXI1jxTLn^hkFgN#?PnJI&siFl?;jzlw~&o-t`p)(S_9eaGlyq8Pi za&TDLToiVSOpgPF^?4ZokkNyMNvENc%OtNh|Te^2XtwT z$0bDeV9aqi7mTdArVB5K5FvQ&iUYZPc>_e?aP_%RY3DktFCCA=#&6)3ZjbxC;qDvu z62K5$z8dk|4zJzB{caGZdh`w%aHWRJCoTWBwS9^;c&5g$K!D^GD051k?aoU4d;qZ30sXnv_E->|-qsweZ*+lU}@R=fW?bsmcv3S(iu5o|8 ziv*kXIq;T2c^h9K<8ZghUuS`~u*t>mSn$7Svi^cGib-}MOm2Bv7a}38iM~r{0^M7I%E8u;LKyR{!pT zVz`$mQ0|M70ySavnvpl&Yk0Ft-P1D~Imj*&?c&agu7_&E?cLP7$sJ^>cetYxWJG#S zg<2YuC)vGjOp|xMu=Eskzy3NvzvOWIC`PV?_K5ewXKs7R-8dnb#O5` z{cAt%nB6+#Urv$4xmq|X-IH?ZvjW<~xwl*(uPEvB3tRdNBjP#>r=JNL9K9E2-ZQI^+RC{+)TivgxvCbvOu z5OljO-PLXW=<|D$Q%Yxl92E=gMD}aAV>46c5}DZ2EZOERttt+~t{ABpJ4XAE=AsH~ zibDl%8WC5-z+m^dIoZ>%+cATyA?pV7C#EPYDAk>!#J5_*v%01??j&(R%8YAnfLx7U zGuNHQHch~x6A!(Z^BQ%cbmm8JpY(uifc6Cf!#d)Mx$}qo1@L$TcrteqYqWay5SS=w zk=L3L;%v@YWX^*4w7nH|qY5!3{Qci1R4qmYRZncNwe{}6l&-3rzOq<5I>&X0nC*#d z>&Q90!_Ee`*ct0AZn3kw8&1KY%!oUDU{vQ8>-G+84=ci8OAF_znxSB^$+Bekkli{^ zYl2FsO+B#kx}ECeE7^_9=Byll-6O}1$epebqmtl&<_UJ4dvlLBAyJIMz~$5^Tj?BM z$EGVcCrotL`V?+XXiN^pVQ`5ZN;VP1V=>fg(PZ(nwpYO(s~Tx3(jQ#57Jgrx(JJ8l%kQEM9POyC<7+ zREf*eZN?GKiGXA;kopMJG}JfED?7hHHN zWF~wxIL%qs)GSD#@!)85DppVOIK%(h}G`JW?m(_7teEOP@#YdBst?<7K70@uh3H&YdweSYWFM^^Fw=2aYZd5L&pX z>uA}-=(2Cjk8aGg3~U`n5t>%Y`pY=BO+kl9e97TA_ntL7Nv@H}v=lbtD$M*)A-8b=)a)CI>F>{}Hw8N^CCJ86#o}i< zkCzb|_P5ZHYJjAxa(<|YvXnXwMas0`7%EvW&Ft`JKTy~S|4$>OeO{)2Sh_!POC+!V zIT&AFiT~~Sd3@f|RzEZT-X-|niSPdN8~MDYhXna|4!(B<&tJ^vEu9tQ51&63zrXPJ zzn853H}ZK)m+<*lFb(UU2mWgOZ_mHP=Plj7n?5M-C~arY@1t<0h*Tc2=kK4cKUjMC zOlD*fw*Ohc|L)a){b8EX(iwcf>Tl&(dLFX>&3k^!;rhI#)A_vAU+QV~*Ib#*`|*dg zsnNUeP5O(a%h(=PzCCa6|4}}_NFU4Gf0X`V>34S3@ACY<_&w!Iz*-(7run&rEc)0@}K1o%YP9+?2iA*=9wqw>GMw>u4&lbR=%Y#L*aXP&%eayU*hwY&&s#&mhOS) zrT$iaW`ja Kg9n1Ing0*bLI{lj literal 217584 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

l}cNxz&FPm%Jp57yQQmZGRYIu=;1zD)@JS8 zN~=1rmcT`Ey)=O{5m#iLWoyWAAm(u|P5=f%i2rO2dnX^`mF4By(yYwd zVh%+GI~cFdHycZh;&7`Dbz&K6K})2H(dhh<;s|t?%IqOgU8vh5H@ zb9rNGKP4iOAdXIYX|{%%W*{JDh=^?RELLUrkCl-sb2fZjM?Cgk$=*12b8~gcjTnN> zmY56Hp=LFq>_K8_)}T^WFyAvmbz&;!NRguuV0e>LDZVOm?M+`m7yOw^h9EM5jMrZ_ zU9*6Y<#MBh5u)@Ck+B+wL;-dbw1mDmxvO!gJkcMeS%ZSIg@n~KJ9cEt^6JVwCIXm@ zU5hSbBEiapen(Dol%Eb%nzK>G^=6{4E9Z8g{*krbt64YMGLk4EhifaQPyWWrWH7WfO4kscro zfRc&ykXh;mRL0Dt1%74

29FB)s2-z!!Erdk9vQq3FVC;X^Q?LDs2*o;BxI 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 diff --git a/server.cpp b/server.cpp index b2543bd..b442560 100644 --- a/server.cpp +++ b/server.cpp @@ -40,6 +40,7 @@ std::set busyPpl; std::vector> players; std::vector> findMatchPlayers; std::vector> reMatchPlayers; +std::vector loggedUsernames; bool end = false; bool lock = false; int total = 0; @@ -200,9 +201,14 @@ void log(const std::string &data, int key = -1, bool adminput = false) logQ.push(""); } } +bool isUsernameLoggedIn(std::string &username) +{ + return std::find(loggedUsernames.begin(), loggedUsernames.end(), username) != loggedUsernames.end(); +} int getKeyFromSock(int sock) { + for (const auto &playerInfo : playerInfos) { if (playerInfo.sock == sock) @@ -219,6 +225,33 @@ int getKeyFromSock(int sock) // file << player.username << " " << player.id << " " << player.score << "\n"; // } // } +std::string getUsernameFromSock(int sock) +{ + std::string filename = "username.txt"; // Thay đổi tên file của bạn + std::vector players = readPlayersFromFile(filename); + int id = getKeyFromSock(sock); + for (auto &player : players) + { + if (player.id == id) + { + return player.username; + } + } + return ""; +} +int getEloByID(int id) +{ + std::string filename = "username.txt"; // Thay đổi tên file của bạn + std::vector players = readPlayersFromFile(filename); + for (auto &player : players) + { + if (player.id == id) + { + return player.score; + } + } + return 0; +} void score(int win, int lose) { int id_win, id_lose; @@ -333,6 +366,8 @@ int game(int sock1, int sock2) write(sock2, msg); if (msg.compare("quit") == 0) { + std::string tmp_username = getUsernameFromSock(sock1); + loggedUsernames.erase(std::remove(loggedUsernames.begin(), loggedUsernames.end(), tmp_username), loggedUsernames.end()); return true; } else if (msg.compare("draw") == 0 || msg.compare("resign") == 0 || msg.compare("end") == 0 || msg.compare("lose") == 0 || msg.compare("win") == 0) @@ -368,6 +403,9 @@ void player(int sock, int key) if (msg.substr(0, 4).compare("quit") == 0) { + std::string tmp_username = getUsernameFromSock(sock); + loggedUsernames.erase(std::remove(loggedUsernames.begin(), loggedUsernames.end(), tmp_username), loggedUsernames.end()); + return; } else if (msg.substr(0, 5).compare("pStat") == 0) @@ -382,13 +420,16 @@ void player(int sock, int key) { if (player.second != key) { + int elo = getEloByID(player.second); + + // Them elo tai day if (latestbusy.find(player.second) != latestbusy.end()) { - write(sock, std::to_string(player.second) + "b"); + write(sock, std::to_string(player.second) + "b" +std::to_string(elo)); } else { - write(sock, std::to_string(player.second) + "a"); + write(sock, std::to_string(player.second) + "a"+ std::to_string(elo)); } } } @@ -457,27 +498,33 @@ void player(int sock, int key) } else if (msg.substr(0, 4).compare("find") == 0) { + std::vector> findplayers; int id_win = getKeyFromSock(sock); findMatchPlayers.push_back({sock, id_win}); - std::vector> findplayers = findMatchPlayers; - std::cout<= elo - 100 && o_elo < elo + 100) + { + findplayers.push_back(player); + } + } + + std::cout << findplayers.size() << std::endl; + // Tim nguoi co cung elo + if (findplayers.size() == 1) { mkBusy({id_win, sock}); - write(sock,"Wait"); + write(sock, "Wait"); } else - { + { // TODO: Tim 1 nguoi k ban de match int current_player_index = -1; - for (size_t i = 0; i < findplayers.size(); ++i) - { - if (findplayers[i].first == sock) - { - current_player_index = i; - break; - } - } int oSock = findplayers[0].first; write(oSock, "xr" + std::to_string(key)); write(sock, "msgOk"); @@ -485,6 +532,9 @@ void player(int sock, int key) newMsg = remove_space(newMsg); if (newMsg.compare("ready") == 0) { + findMatchPlayers.pop_back(); + findMatchPlayers.pop_back(); + std::cout << "number of players" << findMatchPlayers.size() << std::endl; log("Player " + std::to_string(key) + " is in a game as white"); if (game(sock, oSock)) { @@ -761,15 +811,17 @@ void initPlayerThread(int sock) log("Error reading password from client."); return; } - // while (!checkusername(username, password)) - // { - // write(sock, "notOK"); - // username = read(sock, 3); - // password = read(sock, 3); - // } + while (!checkusername(username, password) || isUsernameLoggedIn(username)) + { + write(sock, "notOK"); + username = read(sock, 3); + username = remove_space(username); + password = read(sock, 3); + password = remove_space(password); + } write(sock, "OK"); - + loggedUsernames.push_back(username); if (read(sock, 3).compare("PyChess") == 0) { log("Client sent invalid header, closing connection."); diff --git a/tools/loader.py b/tools/loader.py index 8bf9759..fc57a7e 100644 --- a/tools/loader.py +++ b/tools/loader.py @@ -254,7 +254,7 @@ class ONLINE: ACTIVE = small.render("ACTIVE", True, GREEN) BUSY = small.render("BUSY", True, RED) - REQ = small.render("Send Request", True, WHITE) + REQ = small.render("Send Req", True, WHITE) YOUARE = medium.render("You Are", True, WHITE) ERRCONN = vsmall.render("Unable to connect to that player..", True, WHITE) diff --git a/username.txt b/username.txt index 5da105a..34d68b7 100644 --- a/username.txt +++ b/username.txt @@ -1,4 +1,4 @@ hoan 1102 502 ky 2212 500 -h 1010 498 +h 1010 650 a 1100 502 From d0963d5c7b2a8d5f2b8da0f0c50a73b93b06e594 Mon Sep 17 00:00:00 2001 From: lovetonight Date: Thu, 4 Jan 2024 21:09:26 +0700 Subject: [PATCH 13/15] update --- chess/onlinelib/__init__.py | 27 ++- chess/onlinelib/sockutils.py | 18 +- chess/onlinelib/utils.py | 54 ++++- game.pgn | 9 + pychess.py | 10 +- res/log_game/a.txt | 10 + res/log_game/h.txt | 9 + res/log_game/hoan.txt | 1 + server | Bin 241024 -> 229968 bytes server.cpp | 457 ++++++++++++++++++++++------------- tools/loader.py | 41 +++- username.txt | 6 +- 12 files changed, 443 insertions(+), 199 deletions(-) create mode 100644 game.pgn create mode 100644 res/log_game/a.txt create mode 100644 res/log_game/h.txt create mode 100644 res/log_game/hoan.txt diff --git a/chess/onlinelib/__init__.py b/chess/onlinelib/__init__.py index 4984982..7c270ed 100644 --- a/chess/onlinelib/__init__.py +++ b/chess/onlinelib/__init__.py @@ -4,11 +4,13 @@ other functions for importing from online.py ''' from chess.lib import * +from chess.onlinelib.sockutils import getHistory from chess.onlinelib.utils import ( bgThread, read, readable, flush, + showHistory, waiting, write, getPlayers, @@ -45,7 +47,27 @@ def lobby(win, sock, key, load): if 270 < x < 300 and 85 < y < 115: playerList = getPlayers(sock) - + + if 330 < x < 400 and 85 < y < 115: + history = getHistory(sock) + break_while = False + + while True: + showHistory(win, key, history) + for event in pygame.event.get(): + if event.type == pygame.QUIT: + write(sock, "quit") + return 0 + if event.type == pygame.MOUSEBUTTONDOWN: + x, y = event.pos + if 460 < x < 500 and 0 < y < 50: + break_while = True + break # This breaks out of the for loop + + if break_while: + break # This breaks out of the while loop + + if 300 < x < 475: for i in range(len(playerList)): if 122 + 30 * i < y < 148 + 30 * i: @@ -59,7 +81,6 @@ def lobby(win, sock, key, load): ret = request(win, sock) if ret in [0, 1, 2]: return ret - elif ret == 4: newret = chess(win, sock, 0, load) if newret in [0, 1, 2]: @@ -82,7 +103,7 @@ def lobby(win, sock, key, load): if readable(): msg = read() - print(f"1_{msg}") # Tai sao lai chay toi day + # print(f"{msg}") # Tai sao lai chay toi day if msg == "close": return 2 elif msg.startswith("gr"): diff --git a/chess/onlinelib/sockutils.py b/chess/onlinelib/sockutils.py index d605757..64c3f74 100644 --- a/chess/onlinelib/sockutils.py +++ b/chess/onlinelib/sockutils.py @@ -16,8 +16,7 @@ def bgThread(sock): isdead = False while True: try: - msg = sock.recv(8).decode("utf-8").strip() - + msg = sock.recv(1024).decode("utf-8").strip() except: break @@ -64,6 +63,21 @@ def write(sock, msg): # A function to query the server for number of people online, returns a list # of players connected to server if all went well, None otherwise. +def getHistory(sock): + if not flush(): + return None + write(sock, "his") + msg = read() + if msg.startswith("xnum"): + data = [] + for i in range(int(msg[4:6])): + newmsg = read() + if newmsg == "close": + return None + else: + data.append(newmsg) + return tuple(data) + def getPlayers(sock): if not flush(): return None diff --git a/chess/onlinelib/utils.py b/chess/onlinelib/utils.py index f7ebc92..de763ae 100644 --- a/chess/onlinelib/utils.py +++ b/chess/onlinelib/utils.py @@ -3,6 +3,7 @@ In this file, we define the gui functions for online chess. ''' +import datetime import pygame from chess.onlinelib.sockutils import * @@ -149,7 +150,7 @@ def waiting(win, sock): def draw(win, sock, requester=True): - if requester: + if not requester: pygame.draw.rect(win, (0, 0, 0), (100, 220, 300, 60)) pygame.draw.rect(win, (255, 255, 255), (100, 220, 300, 60), 4) @@ -233,21 +234,19 @@ def draw_win(win, sock, requester=True): pygame.draw.rect(win, (0, 0, 0), (100, 160, 300, 130)) pygame.draw.rect(win, (255, 255, 255), (100, 160, 300, 130), 4) - win.blit(ONLINE.WIN2[0], (120, 170)) - win.blit(ONLINE.WIN2[1], (170, 195)) + win.blit(ONLINE.WIN2[0], (225, 195)) - win.blit(ONLINE.OK, (145, 240)) - pygame.draw.rect(win, (255, 255, 255), (140, 240, 50, 28), 2) + win.blit(ONLINE.OK, (240, 240)) + pygame.draw.rect(win, (255, 255, 255), (235, 240, 50, 28), 2) else: pygame.draw.rect(win, (0, 0, 0), (100, 160, 300, 130)) pygame.draw.rect(win, (255, 255, 255), (100, 160, 300, 130), 4) - win.blit(ONLINE.WIN1[0], (120, 170)) - win.blit(ONLINE.WIN1[1], (170, 195)) + win.blit(ONLINE.WIN1[0], (225, 195)) - win.blit(ONLINE.OK, (145, 240)) - pygame.draw.rect(win, (255, 255, 255), (140, 240, 50, 28), 2) + win.blit(ONLINE.OK, (240, 240)) + pygame.draw.rect(win, (255, 255, 255), (235, 240, 50, 28), 2) pygame.display.flip() while True: @@ -258,12 +257,12 @@ def draw_win(win, sock, requester=True): return 0 if event.type == pygame.MOUSEBUTTONDOWN: if 240 < event.pos[1] < 270: - if 140 < event.pos[0] < 190: + if 240 < event.pos[0] < 290: write(sock, "win") return 3 elif event.type == pygame.MOUSEBUTTONDOWN: if 240 < event.pos[1] < 270: - if 140 < event.pos[0] < 190: + if 240 < event.pos[0] < 290: write(sock, "lose") return 3 elif 300 < event.pos[0] < 350: @@ -292,6 +291,7 @@ def showLobby(win, key, playerlist): win.blit(BACK, (460, 0)) win.blit(ONLINE.LIST, (20, 75)) win.blit(ONLINE.REFRESH, (270, 85)) + win.blit(ONLINE.HISTORY, (330, 85)) pygame.draw.line(win, (255, 255, 255), (20, 114), (190, 114), 3) pygame.draw.line(win, (255, 255, 255), (210, 114), (265, 114), 3) @@ -313,11 +313,39 @@ def showLobby(win, key, playerlist): win.blit(ONLINE.BUSY, (200, yCord)) pygame.draw.rect(win, (255, 255, 255), (350, yCord + 2, 120, 26), 2) putLargeNum(win, elo, (300, yCord)) - win.blit(ONLINE.REQ, (350, yCord)) + win.blit(ONLINE.REQ, (360, yCord)) win.blit(ONLINE.FIND_MATCH, (200, 450)) # win.blit(ONLINE.YOUARE, (100, 430)) # pygame.draw.rect(win, (255, 255, 255), (250, 435, 158, 40), 3) # win.blit(ONLINE.PLAYER, (260, 440)) # putLargeNum(win, key, (340, 440)) - pygame.display.update() \ No newline at end of file + pygame.display.update() + +def showHistory(win, key, history): + win.fill((0, 0, 0)) + + win.blit(ONLINE.HISTORY_TITLED, (140, 14)) + pygame.draw.rect(win, (255, 255, 255), (65, 10, 355, 68), 4) + win.blit(BACK, (460, 0)) + if not history: + win.blit(ONLINE.EMPTY_HISTORY, (25, 130)) + for cnt, his in enumerate(history): + parts = his.split() + username = parts[0] + time = parts[1] + status = parts[2] + yCord = 120 + cnt * 30 + + # win.blit(ONLINE.DOT, (20, yCord)) + # win.blit(ONLINE.PLAYER, (52, yCord)) + putLargeNum(win, username, (20, yCord)) + if status == '1': + win.blit(ONLINE.WIN_STATUS, (110, yCord)) + elif status == "0": + win.blit(ONLINE.LOSE_STATUS, (110, yCord)) + year, month, day, hour, minute = map(int, time.split('-')) + output_str = '{:02d}-{:02d}-{} {:02d}:{:02d}'.format(day, month, year, hour, minute) + putLargeNum(win, output_str, (230, yCord)) + pygame.display.update() + \ No newline at end of file diff --git a/game.pgn b/game.pgn new file mode 100644 index 0000000..d050050 --- /dev/null +++ b/game.pgn @@ -0,0 +1,9 @@ +[Event "My Chess Game"] +[Site "Chess Board"] +[Date "2023.12.21"] +[Round "-"] +[White "Player 1"] +[Black "Player 2"] +[Result "*"] + +1. c2c4 d1a4 2. a4e8 * \ No newline at end of file diff --git a/pychess.py b/pychess.py index 8f36f95..828bed4 100644 --- a/pychess.py +++ b/pychess.py @@ -81,16 +81,16 @@ def showMain(prefs): win.blit(MAIN.HEADING, (80, 20)) pygame.draw.line(win, (255, 255, 255), (80, 100), (130, 100), 4) pygame.draw.line(win, (255, 255, 255), (165, 100), (340, 100), 4) - win.blit(MAIN.VERSION, (345, 95)) + # win.blit(MAIN.VERSION, (345, 95)) win.blit(MAIN.SINGLE, sngl[:2]) win.blit(MAIN.MULTI, mult[:2]) win.blit(MAIN.ONLINE, onln[:2]) win.blit(MAIN.LOAD, load[:2]) - win.blit(MAIN.PREF, pref[:2]) - win.blit(MAIN.HOWTO, hwto[:2]) - win.blit(MAIN.ABOUT, abt[:2]) - win.blit(MAIN.STOCK, stok[:2]) + # win.blit(MAIN.PREF, pref[:2]) + # win.blit(MAIN.HOWTO, hwto[:2]) + # win.blit(MAIN.ABOUT, abt[:2]) + # win.blit(MAIN.STOCK, stok[:2]) # Initialize a few more variables cnt = 0 diff --git a/res/log_game/a.txt b/res/log_game/a.txt new file mode 100644 index 0000000..8e43cd4 --- /dev/null +++ b/res/log_game/a.txt @@ -0,0 +1,10 @@ +h 2024-01-04-19-07 1 +h 2024-01-04-19-07 0 +a 2024-01-04-20-58 1 +a 2024-01-04-20-58 0 +h 2024-01-04-20-59 1 +a 2024-01-04-21-01 1 +a 2024-01-04-21-01 0 +h 2024-01-04-21-03 0 +h 2024-01-04-21-05 0 +h 2024-01-04-21-05 1 diff --git a/res/log_game/h.txt b/res/log_game/h.txt new file mode 100644 index 0000000..df1390f --- /dev/null +++ b/res/log_game/h.txt @@ -0,0 +1,9 @@ +a 2024-01-04-16-51 0 +a 2024-01-04-16-52 1 +a 2024-01-04-18-04 0 +a 2024-01-04-19-07 0 +a 2024-01-04-19-07 1 +a 2024-01-04-20-59 0 +a 2024-01-04-21-03 1 +a 2024-01-04-21-05 1 +a 2024-01-04-21-05 0 diff --git a/res/log_game/hoan.txt b/res/log_game/hoan.txt new file mode 100644 index 0000000..0afd260 --- /dev/null +++ b/res/log_game/hoan.txt @@ -0,0 +1 @@ +a 2024-01-04-16-53 0 diff --git a/server b/server index 259225432a867052009509fe4206c8b5fdac7bbc..f0a4935bb5e5741aa688f46245069467e8dd1443 100755 GIT binary patch literal 229968 zcmeFad3;pW88rPdOQjIUT*pfs_BSRy7@b5m6;>dPr?}h&j zUHID81C97I*E|JA$c_DqG~4iXFHL8zl!<@5vR}5pxx-Y8xkd^U%znB2SjvC!S1SM7 z>x!Xj1ao!!$$0a%1flDn=PN$u>h_~;mgOk}EGr6L=Wnn24c$RqO+QjezuuaD_u#cy zfe~{x_N0vbf2g)+_&QJzW3J(T({;b_^+eszTsa2+#=cuW<%f({ru*#`SN05FXA~;_ z=4!?}4gF}B@A{|R9ywi)m(363wI9q?dpUCWjOs~41|L3S%Aqr=YZ~SrI(O)hLx&7L zY2}f&y`r$!ug_b3aMzii7u-^{ zs_59K&e}{G%FRBc;UD>Fms|J>d?F3)QLxK{k&%&~Mu>~!|EutSYt=tz{_V9RUVLx- z#G9TPd`eg0v;W+4@O8r%7B1Q81T<&-^ALx-W@yO=G82ANpUn8FKhBK53Cd;Sb4nKa z*LTWHf836d$SxV=9G->GPVjH0aocvzjNjBdGyb6;WyYTa2W8^_b{2hevdGyli#_ki zBIm;hicI6)1>0o8e~!G$gugJ0JQZ2+8?x{@E{omn%VPgyP=GSYvmgtf|G@8==-G_P!KZ7`IjtwO0tambQU@1A@MWu-zy8B-)EseCqFZv zF(@jT_&`_xElb=^&r+8@&QhP}W%1W(S@4UpAg<0&jUlx32mihOS zEcW>#OWdx@LO(o9{@#>@&(2xm`Mxaq_(ZmOCrg~4lqC*ZvhbghC65ly;+MO#*z>F` z_49}rYHd9*Hz-+z@w{#2H65w?+H{2%_iG7FzOv*^1biyyCt9WurFD_P_plVv_V z8Tpur55g*={6Ect-;#xY&n)%7D@*+BpCyl;$--w{mU?ns7XG)v{`-cV0{GX6lYJsZ zk%@X=T%>94gdvD8*7*J!zkQavG!AupU+lJyc|#GF(2)3>gghet@1H6-s_`pf{9Ph@ zMN0L?yFlY36&2HF*49+auCJU`Ur`aM7&&fq#gwX9Rnw|x*H_INH~NGbwKY}aDksgT zQf--A&K@(izGU#E%GuSEE2^i?uAfy^IdkM>;7TS>ubfp;KdZ93e)h=8(dY>!(bG=> z@lh2OljqJYDJdDGI-yH-%`|i=sTf;H!YDc)Q8BW1cEzc6RW&nfr(pcE$DFc_o@s+A zMn_Gqomp2ot14P{%4D+m{v063*ow)ubr)4onc2~@$zV11C>ZMp2{dFzRn4^e>Crjp zKem3*z>13c>9cAttWfBRs#&vYXBk;(3NhJOjyCQLNIwMBRh3hQRE({!tgnjxFqMv~ zfR`)lE1`>GV4PR`f6;kX_L3tpyoxxb44pl&p{DwRhN_CX`dK5#jIA*GF|MXmO|5L0 zQIEKsQB_|x5-}2umYp4by>LixAEb)05{+5@(JZ3DT;$ldJ0Lt7~h1m@G$D&8nPT6&*7Sd0EpSIf7KF zshu^maz;fpG_905k^cwmf&M8O#E`75fdv~T*VEt8=$vsCV}~N^2MwHBJL|&ASyOC0RMb~a`(fcWq`GEy z)vWsH%+pVS1AZ8fqh?is$DFGF!oa7d4?fhL7qU+%D(JM2e#rDNWOlK$qW+>f#@EzZ2qfGlVZBv@IjDZ}baur=5;82Xf$08T>2U-DTotjS5C*s- zP?f2Ur4?{20c9cQ7x3(}Yp{NUF1SuPanKJ9xyrFoRUX7pI)V{y!Fe_~OVne5gw9`u9w`_4eHfJrL79;7b= z;SgR$XG!0|vgZ4ty^oxXMVkqvK|=#kKWkRyMHMwwW)&+#I3>WWpwJ)7d>vL9)>5{d zbE!~~wmBG7G4=>9doq+w#|u-c>MJL!^>y}m%{sVAc9{GJt{Cj3YP@F4);1SeM`HBGF4WN%oC?iK$H}el=*VGQ zQKFn<&v-f)J5o+(Rmsf7$ol>qt)aj7G6FklYyhz!(OY4)_Hq_h)in@Rt$1Mf3=1wu zjD?clU{`1rSR7+5f~7;2rJ7x*eP7pLeUd2?zSm6rUzltlOg5!@cAcpaW9tV`u5GAS zt}}_T%>ttb=MKWuZZN2*omw%gvSwP9j@ciQrsjyn*k^2gUB;b~D(~4tO%@um2P``U zSp;@N^`_)IDX3PT8E1zdpw-~n)fcOB>-Un`H46+SDw1jAHrF#RQLUG0UDit?HZs}UooSIx#= zFM>6CeML=uZKdgf6RsHu$jDTz;Acm0Hc(SFxjr(pYUa$^IaQHaRoHY$c*tgKR)kbI zB&n$cuZjvh4aCJ8&v<86R@X#oDr;(I�=Zi;$=aRYa|>>#OEg*GI5EtFN6w-l)-$ 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�%n1?fFrA50%j`-2NX`8z@tW1`WG-~&a`=uYsq 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%0D=8? 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 Kg9n1Ing0*bLI{lj diff --git a/server.cpp b/server.cpp index b442560..065e83c 100644 --- a/server.cpp +++ b/server.cpp @@ -239,6 +239,19 @@ std::string getUsernameFromSock(int sock) } return ""; } +std::string getUsernameFromKey(int key) +{ + std::string filename = "username.txt"; // Thay đổi tên file của bạn + std::vector players = readPlayersFromFile(filename); + for (auto &player : players) + { + if (player.id == key) + { + return player.username; + } + } + return ""; +} int getEloByID(int id) { std::string filename = "username.txt"; // Thay đổi tên file của bạn @@ -252,19 +265,99 @@ int getEloByID(int id) } return 0; } + +// Hàm để giới hạn số dòng trong file +void limitFileLines(const std::string &filename, int limit = 10) +{ + std::ifstream inputFile(filename); + if (inputFile.is_open()) + { + std::vector lines; + std::string line; + while (std::getline(inputFile, line)) + { + lines.push_back(line); + } + + inputFile.close(); + std::ofstream outputFile(filename); + int start = std::max(0, static_cast(lines.size()) - limit); + for (int i = start; i < lines.size(); ++i) + { + outputFile << lines[i] << "\n"; + } + outputFile.close(); + } +} + +void writeLog(std::string username_win, std::string username_lose) +{ + // 0 la thua, 1 la thang + // Win + std::string filelog_win = "./res/log_game/" + username_win + ".txt"; // Thay đổi tên file của bạn + + std::ofstream outputFile_win(filelog_win, std::ios::app); // Open in append mode + if (outputFile_win.is_open()) + { + auto now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); + struct tm timeinfo; + localtime_r(&now, &timeinfo); + // Write log information + { + char buffer[80]; + strftime(buffer, sizeof(buffer), "%Y-%m-%d-%H-%M", &timeinfo); + outputFile_win << username_lose << " " << buffer << " " << 1 << "\n"; + } + outputFile_win.close(); + } + + // Lose + std::string filelog_lose = "./res/log_game/" + username_lose + ".txt"; + std::ofstream outputFile_lose(filelog_lose, std::ios::app); + if (outputFile_lose.is_open()) + { + auto now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); + struct tm timeinfo; + localtime_r(&now, &timeinfo); + // Write log information + { + char buffer[80]; + strftime(buffer, sizeof(buffer), "%Y-%m-%d-%H-%M", &timeinfo); + outputFile_lose << username_win << " " << buffer << " " << 0 << "\n"; + } + outputFile_lose.close(); + } + // Giới hạn 10 dòng + limitFileLines(filelog_win); + limitFileLines(filelog_lose); +} +double calculateExpectedScore(int rating1, int rating2) +{ + return 1.0 / (1.0 + std::pow(10, static_cast(rating2 - rating1) / 400.0)); +} +void updateElo(int &rating, int opponentRating, int result) +{ + const double k = 32.0; // Hệ số K + double expectedScore = calculateExpectedScore(rating, opponentRating); + rating += static_cast(k * (result - expectedScore)); +} + void score(int win, int lose) { int id_win, id_lose; + int elo_win, elo_lose; id_win = getKeyFromSock(win); id_lose = getKeyFromSock(lose); std::string filename = "username.txt"; // Thay đổi tên file của bạn std::vector players = readPlayersFromFile(filename); + std::string username_win, username_lose; for (auto &player : players) { if (player.id == id_win) { - // Cộng điểm cho người thắng - player.score += 1; // Thay đổi dựa trên yêu cầu của bạn + // player.score += 10; + elo_win = player.score; + username_win = player.username; break; } } @@ -272,13 +365,32 @@ void score(int win, int lose) { if (player.id == id_lose) { - // Thay đổi điểm của người thua dựa trên yêu cầu của bạn - player.score -= 1; // Giả sử bạn muốn trừ điểm khi thua + username_lose = player.username; + // if (player.score < 5) + // { + // break; + // } + // player.score -= 5; + elo_lose = player.score; break; } } + updateElo(elo_win, elo_lose, 1); // Người thắng + updateElo(elo_lose, elo_win, 0); // Người thua - // Ghi lại thông tin vào file + writeLog(username_win, username_lose); + + for (auto &player : players) + { + if (player.id == id_win) + { + player.score = elo_win; + } + else if (player.id == id_lose) + { + player.score = elo_lose; + } + } writePlayersToFile(filename, players); } std::string read(int sock, int timeout = -1) @@ -301,9 +413,13 @@ std::string read(int sock, int timeout = -1) return std::string(buffer); } +void longWrite(int sock, const std::string &msg) +{ + ssize_t bytesSent = send(sock, msg.c_str(), msg.length(), 0); +} void write(int sock, const std::string &msg) { - std::string buffedmsg = msg + std::string(8 - msg.length(), ' '); + std::string buffedmsg = msg + std::string(1024 - msg.length(), ' '); ssize_t bytesSent = send(sock, buffedmsg.c_str(), buffedmsg.length(), 0); } std::string remove_space(std::string string) @@ -376,18 +492,6 @@ int game(int sock1, int sock2) score(sock2, sock1); else if (msg.compare("lose") == 0) score(sock1, sock2); - - // if (msg.compare("win") == 0)rematch - // score(sock2, sock1); - return false; - } - else if (msg.compare("acc") == 0) - { - // Xu li giong findmatch - } - else if (msg.compare("dec") == 0) - { - write(sock2, "msg"); return false; } } @@ -403,11 +507,34 @@ void player(int sock, int key) if (msg.substr(0, 4).compare("quit") == 0) { - std::string tmp_username = getUsernameFromSock(sock); + std::string tmp_username = getUsernameFromKey(key); loggedUsernames.erase(std::remove(loggedUsernames.begin(), loggedUsernames.end(), tmp_username), loggedUsernames.end()); - return; } + else if (msg.substr(0, 3).compare("his") == 0) + { + log("Made request for watch history.", key); + std::string username = getUsernameFromKey(key); + std::string filelog = "./res/log_game/" + username + ".txt"; // Thay đổi tên file của bạn + std::ifstream file(filelog); + std::string line; + int lineCount = 0; + + while (std::getline(file, line)) + { + lineCount++; + } + write(sock, "xnum" + std::to_string(lineCount)); + file.close(); + + // Process + std::ifstream file2(filelog); + while (std::getline(file2, line)) + { + write(sock, line); + } + file2.close(); + } else if (msg.substr(0, 5).compare("pStat") == 0) { log("Made request for players Stats.", key); @@ -425,11 +552,11 @@ void player(int sock, int key) // Them elo tai day if (latestbusy.find(player.second) != latestbusy.end()) { - write(sock, std::to_string(player.second) + "b" +std::to_string(elo)); + write(sock, std::to_string(player.second) + "b" + std::to_string(elo)); } else { - write(sock, std::to_string(player.second) + "a"+ std::to_string(elo)); + write(sock, std::to_string(player.second) + "a" + std::to_string(elo)); } } } @@ -632,148 +759,148 @@ void kickDisconnectedThread() } } -void adminThread() -{ - while (true) - { - std::string msg; - std::getline(std::cin, msg); - log(msg, -1, true); - if (msg.compare("report") == 0) - { - log(std::to_string(players.size()) + " players are online right now,"); - log(std::to_string(players.size() - busyPpl.size()) + " are active."); - log(std::to_string(total) + " connections attempted, " + std::to_string(totalsuccess) + " were successful"); - log("Server is running " + std::to_string(std::thread::hardware_concurrency()) + " threads."); - log("Time elapsed since last reboot: " + getTime()); - if (!players.empty()) - { - log("LIST OF PLAYERS:"); - for (size_t i = 0; i < players.size(); ++i) - { - if (busyPpl.find(players[i].second) == busyPpl.end()) - { - log(" " + std::to_string(i + 1) + ". Player" + std::to_string(players[i].second) + ", Status: Active"); - } - else - { - log(" " + std::to_string(i + 1) + ". Player" + std::to_string(players[i].second) + ", Status: Busy"); - } - } - } - } - else if (msg == "mypublicip") - { - log("Determining public IP, please wait...."); - std::string PUBIP = getIp(true); - if (PUBIP == "127.0.0.1") - { - log("An error occurred while determining IP"); - } - else - { - log("This machine has a public IP address " + PUBIP); - } - } - else if (msg.compare("lock") == 0) - { - if (lock) - { - log("Already in locked state"); - } - else - { - lock = true; - log("Locked server, no one can join now."); - } - } - else if (msg.compare("unlock") == 0) - { - if (lock) - { - lock = false; - log("Unlocked server, all can join now."); - } - else - { - log("Already in unlocked state."); - } - } - else if (msg.substr(0, 5).compare("kick") == 0) - { - std::istringstream iss(msg.substr(5)); - std::vector keys; - int key; - while (iss >> key) - { - keys.push_back(key); - } - for (int k : keys) - { - int sock = getByKey(k); - if (sock != -1) - { - write(sock, "close"); - log("Kicking player" + std::to_string(k)); - } - else - { - log("Player " + std::to_string(k) + " does not exist"); - } - } - } - else if (msg.compare("kickall") == 0) - { - log("Attempting to kick everyone."); - std::vector> latestplayers = players; - for (const auto &player : latestplayers) - { - write(player.first, "close"); - } - } - else if (msg.compare("quit") == 0) - { - lock = true; - log("Attempting to kick everyone."); - std::vector> latestplayers = players; - for (const auto &player : latestplayers) - { - write(player.first, "close"); - } - log("Exiting application - Bye"); - log(""); - end = true; - if (IPV6) - { - int sock = socket(AF_INET6, SOCK_STREAM, 0); - sockaddr_in6 addr; - std::memset(&addr, 0, sizeof(addr)); - addr.sin6_family = AF_INET6; - addr.sin6_port = htons(PORT); - inet_pton(AF_INET6, "::1", &(addr.sin6_addr)); - connect(sock, reinterpret_cast(&addr), sizeof(addr)); - close(sock); - } - else - { - int sock = socket(AF_INET, SOCK_STREAM, 0); - sockaddr_in addr; - std::memset(&addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; - addr.sin_port = htons(PORT); - inet_pton(AF_INET, "127.0.0.1", &(addr.sin_addr)); - connect(sock, reinterpret_cast(&addr), sizeof(addr)); - close(sock); - } - return; - } - else - { - log("Invalid command entered ('" + msg + "')."); - log("See 'onlinehowto.txt' for help on how to use the commands."); - } - } -} +// void adminThread() +// { +// while (true) +// { +// std::string msg; +// std::getline(std::cin, msg); +// log(msg, -1, true); +// if (msg.compare("report") == 0) +// { +// log(std::to_string(players.size()) + " players are online right now,"); +// log(std::to_string(players.size() - busyPpl.size()) + " are active."); +// log(std::to_string(total) + " connections attempted, " + std::to_string(totalsuccess) + " were successful"); +// log("Server is running " + std::to_string(std::thread::hardware_concurrency()) + " threads."); +// log("Time elapsed since last reboot: " + getTime()); +// if (!players.empty()) +// { +// log("LIST OF PLAYERS:"); +// for (size_t i = 0; i < players.size(); ++i) +// { +// if (busyPpl.find(players[i].second) == busyPpl.end()) +// { +// log(" " + std::to_string(i + 1) + ". Player" + std::to_string(players[i].second) + ", Status: Active"); +// } +// else +// { +// log(" " + std::to_string(i + 1) + ". Player" + std::to_string(players[i].second) + ", Status: Busy"); +// } +// } +// } +// } +// else if (msg == "mypublicip") +// { +// log("Determining public IP, please wait...."); +// std::string PUBIP = getIp(true); +// if (PUBIP == "127.0.0.1") +// { +// log("An error occurred while determining IP"); +// } +// else +// { +// log("This machine has a public IP address " + PUBIP); +// } +// } +// else if (msg.compare("lock") == 0) +// { +// if (lock) +// { +// log("Already in locked state"); +// } +// else +// { +// lock = true; +// log("Locked server, no one can join now."); +// } +// } +// else if (msg.compare("unlock") == 0) +// { +// if (lock) +// { +// lock = false; +// log("Unlocked server, all can join now."); +// } +// else +// { +// log("Already in unlocked state."); +// } +// } +// else if (msg.substr(0, 5).compare("kick") == 0) +// { +// std::istringstream iss(msg.substr(5)); +// std::vector keys; +// int key; +// while (iss >> key) +// { +// keys.push_back(key); +// } +// for (int k : keys) +// { +// int sock = getByKey(k); +// if (sock != -1) +// { +// write(sock, "close"); +// log("Kicking player" + std::to_string(k)); +// } +// else +// { +// log("Player " + std::to_string(k) + " does not exist"); +// } +// } +// } +// else if (msg.compare("kickall") == 0) +// { +// log("Attempting to kick everyone."); +// std::vector> latestplayers = players; +// for (const auto &player : latestplayers) +// { +// write(player.first, "close"); +// } +// } +// else if (msg.compare("quit") == 0) +// { +// lock = true; +// log("Attempting to kick everyone."); +// std::vector> latestplayers = players; +// for (const auto &player : latestplayers) +// { +// write(player.first, "close"); +// } +// log("Exiting application - Bye"); +// log(""); +// end = true; +// if (IPV6) +// { +// int sock = socket(AF_INET6, SOCK_STREAM, 0); +// sockaddr_in6 addr; +// std::memset(&addr, 0, sizeof(addr)); +// addr.sin6_family = AF_INET6; +// addr.sin6_port = htons(PORT); +// inet_pton(AF_INET6, "::1", &(addr.sin6_addr)); +// connect(sock, reinterpret_cast(&addr), sizeof(addr)); +// close(sock); +// } +// else +// { +// int sock = socket(AF_INET, SOCK_STREAM, 0); +// sockaddr_in addr; +// std::memset(&addr, 0, sizeof(addr)); +// addr.sin_family = AF_INET; +// addr.sin_port = htons(PORT); +// inet_pton(AF_INET, "127.0.0.1", &(addr.sin_addr)); +// connect(sock, reinterpret_cast(&addr), sizeof(addr)); +// close(sock); +// } +// return; +// } +// else +// { +// log("Invalid command entered ('" + msg + "')."); +// log("See 'onlinehowto.txt' for help on how to use the commands."); +// } +// } +// } bool checkusername(const std::string &username, const std::string &password) { @@ -906,7 +1033,7 @@ int main() log("Successfully Started."); log("Accepting connections on port " + std::to_string(PORT)); - std::thread(adminThread).detach(); + // std::thread(adminThread).detach(); std::thread(kickDisconnectedThread).detach(); if (LOG) diff --git a/tools/loader.py b/tools/loader.py index fc57a7e..aa235b9 100644 --- a/tools/loader.py +++ b/tools/loader.py @@ -28,13 +28,18 @@ BLACK = (0, 0, 0) GREEN = (0, 255, 0) RED = (200, 20, 20) +BLUE = (0, 0, 255) # Define a few constants that contain loaded texts of numbers and chararters. NUM = [vsmall.render(str(i), True, WHITE) for i in range(10)] LNUM = [small.render(str(i), True, WHITE) for i in range(10)] BLNUM = [small.render(str(i), True, BLACK) for i in range(10)] -SLASH = vsmall.render("/", True, WHITE) +CHARACTERS = [vsmall.render(chr(i), True, WHITE) for i in range(65, 91)] # Uppercase letters A-Z +CHARACTERS += [vsmall.render(chr(i), True, WHITE) for i in range(97, 123)] # Lowercase letters a-z +SLASH = small.render("/", True, WHITE) COLON = vsmall.render(":", True, WHITE) +HYPHEN = vsmall.render("-", True, WHITE) +SCOLON =small.render(":", True, WHITE) # This function displays a number in a position, very small sized text used. def putNum(win, num, pos): @@ -42,12 +47,24 @@ def putNum(win, num, pos): win.blit(NUM[int(i)], (pos[0] + (cnt * 9), pos[1])) # This function displays a number in a position, Small sized text used. -def putLargeNum(win, num, pos, white=True): - for cnt, i in enumerate(list(str(num))): - if white: - win.blit(LNUM[int(i)], (pos[0] + (cnt * 14), pos[1])) - else: - win.blit(BLNUM[int(i)], (pos[0] + (cnt * 14), pos[1])) +def putLargeNum(win, data, pos, white=True): + for cnt, char in enumerate(str(data)): + if char.isdigit(): + if white: + win.blit(LNUM[int(char)], (pos[0] + (cnt * 14), pos[1])) + else: + win.blit(BLNUM[int(char)], (pos[0] + (cnt * 14), pos[1])) + elif char.isalpha(): + # Check if it's an uppercase or lowercase letter + if 'A' <= char <= 'Z': + win.blit(CHARACTERS[ord(char) - 65], (pos[0] + (cnt * 14), pos[1])) + elif 'a' <= char <= 'z': + win.blit(CHARACTERS[ord(char) - 97 + 26], (pos[0] + (cnt * 14), pos[1])) + elif char == '-': + win.blit(SLASH, (pos[0] + (cnt * 14), pos[1])) + elif char == ':': + win.blit(SCOLON, (pos[0] + (cnt * 14), pos[1])) + # This function displays the date and time in a position on the screen. def putDT(win, DT, pos): @@ -233,6 +250,7 @@ class PREF: YES = small.render("YES", True, WHITE) NO = small.render("NO", True, WHITE) + class ONLINE: ERR = ( vsmall.render("Attempting to connect to server..", True, WHITE), @@ -246,15 +264,22 @@ class ONLINE: GOBACK = vsmall.render("Go Back", True, WHITE) EMPTY = small.render("No one's online, you are alone.", True, WHITE) + EMPTY_HISTORY = small.render("You have no matches.", True, WHITE) LOBBY = large.render("Online Lobby", True, WHITE) + HISTORY_TITLED = large.render("HISTORY", True, WHITE) LIST = medium.render("List of Players", True, WHITE) + HISTORY = small.render("HISTORY", True, BLUE) PLAYER = small.render("Player", True, WHITE) DOT = small.render(".", True, WHITE) ACTIVE = small.render("ACTIVE", True, GREEN) BUSY = small.render("BUSY", True, RED) - REQ = small.render("Send Req", True, WHITE) + + WIN_STATUS = small.render("WIN", True, GREEN) + LOSE_STATUS = small.render("LOSE", True, RED) + + REQ = small.render("Request", True, WHITE) YOUARE = medium.render("You Are", True, WHITE) ERRCONN = vsmall.render("Unable to connect to that player..", True, WHITE) diff --git a/username.txt b/username.txt index 34d68b7..9bd1313 100644 --- a/username.txt +++ b/username.txt @@ -1,4 +1,4 @@ -hoan 1102 502 +hoan 1102 488 ky 2212 500 -h 1010 650 -a 1100 502 +h 1010 618 +a 1100 607 From ba27a38830606fadfb0b7734cd265da8335744a2 Mon Sep 17 00:00:00 2001 From: lovetonight Date: Thu, 22 Feb 2024 11:12:11 +0700 Subject: [PATCH 14/15] update: how to play online --- .gitignore | 3 ++- README.md | 39 ++++++--------------------------------- onelinehowto.txt | 13 +++++++++++++ 3 files changed, 21 insertions(+), 34 deletions(-) create mode 100644 onelinehowto.txt diff --git a/.gitignore b/.gitignore index a21d711..f3c5e07 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ notes.txt res/stockfish/build/stockfish.exe res/stockfish/path.txt -res/savedGames/game*.txt \ No newline at end of file +res/savedGames/game*.txt +res/log_game/* \ No newline at end of file diff --git a/README.md b/README.md index 2eace2b..dee1806 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,6 @@ # Important Note -This project is not being maintained actively at the moment. I had started this -project back when I was still new to Python and pygame. While I enjoyed and -learnt a lot when I worked on this project, looking back at the codebase now -after over 2 years, I can't help but notice how bad the codebase is. -Please do not use this project as a base for any of your projects or for learning -python and/or pygame. There are many resources out there that are much better -than this project. - -If I ever return to this project, it would mean doing full re-write of the -entire codebase, with the current codebase being archived in a 'legacy' branch. + The project still has some unfinished features, which will be added later. ## My-PyChess @@ -25,12 +16,11 @@ Any bug-reports, suggestions or questions, you can leave it in the github issues The My-PyChess project is available under MIT License. The MIT Licence applies to all the resources I have created in this project. This includes all the python files and text files. But some resources(images, sounds and font file) are not created by me, I have downloaded these from the internet. I have given credits to the authors of these resources in [this file](res/CREDITS.txt). All these resources maintain the original licenses that the authors have leased them under (These licenses permit my use of the respective resources in this project). ### Getting started - +- `pip3 install -r requirement.txt` - Make sure you have Python and `pygame` installed and working. - Clone this repository (or download zip file and extract it). - Then, run the `pychess.py` file. Trying to run any other file will not run the game. - -There is also a [lite implementation](https://github.com/ankith26/My-PyChess-lite/) of My-PyChess, that focuses just on chess programming - free from all the code for menus, singleplayer, online etc. +- Run server if play online: `g++ server.cpp -o server && ./server` ### Features @@ -40,30 +30,13 @@ There is also a [lite implementation](https://github.com/ankith26/My-PyChess-lit - Supports things like castling, pawn promotion, enpassent etc. - Supports saving and loading games. - Has single player mode with two different types, levels and ability to play against the stockfish chess engine. -- Has online gamemode, play chess with anyone in the world. +- Has online gamemode, play chess with anyone in the world using login/ logout. - Has a chess game timer. - Has a preference menu where you can customize the app to meet your preferences. - Has a chess howto, about menu and stockfish install/configure menu to make things easy for users. +- Use the Elo scoring mechanism according to world standards. +- There is a feature to find opponents based on elo point difference -## What's new in this Version 3.2 -- Added a Back-Button, to go back to the previous menu. In older versions, the quit button was used for this purpose, but from now on a dedicated button to go back is there in the top-right corner. The quit button will now be used only to exit the app. -- Added a game timer to multiplayer mode, with a new menu to setup the timer. -- Fixed bugs and made many additions and improvements to the client-server in chess online gamemode. -- Made optimisations to core chess module and gui module. -- Added a chess hotwto. -- Minor improvements to game sounds and textbox. -- Upgraded preference menu and made the loadgame interface more robust. -- Several other minor changes and improvements made. - -## Highlights of v3.x, the latest major release. -- The code was revamped and restructured, fixed bugs and made **major performance improvements**. -- **Online play** was added. This features a online lobby and support upto 10 people to play chess. -- Singleplayer saw big upgrades: Firstly, a decent **python chess engine** that playes chess was added. -- You can play against **stockfish chess engine** (see https://stockfishchess.org). My-PyChess will act as an interface to give you this singleplayer mode. -- En-Passant in chess, undo move, screenflip and sounds were added. -- Lots of changes made to GUI. - -Click [here](CHANGELOG.md) to see full changelog. ### Online Gameplay diff --git a/onelinehowto.txt b/onelinehowto.txt new file mode 100644 index 0000000..ccfc856 --- /dev/null +++ b/onelinehowto.txt @@ -0,0 +1,13 @@ +* Account: account.txt +Descriptions: + The file includes 3 columns: Username, Password, Status. + Username, Password. + Status: Between 0 & 1. + 0: Block - Cant Login + 1: Avaiable +* username.txt +Descriptions: + The file includes 3 columns: Username, ID, Elo Score. + ID: + Elo Score + From 783fa7b03320e575fc30f2dfa6d90ad93f80432f Mon Sep 17 00:00:00 2001 From: lovetonight Date: Thu, 22 Feb 2024 11:12:29 +0700 Subject: [PATCH 15/15] update --- chess/onlinelib/__init__.py | 1 + game.pgn | 9 - res/log_game/hoan.txt | 1 - server.py | 457 ------------------------------------ tools/loader.py | 2 + username.txt | 4 +- 6 files changed, 5 insertions(+), 469 deletions(-) delete mode 100644 game.pgn delete mode 100644 res/log_game/hoan.txt delete mode 100644 server.py diff --git a/chess/onlinelib/__init__.py b/chess/onlinelib/__init__.py index 7c270ed..decd8d4 100644 --- a/chess/onlinelib/__init__.py +++ b/chess/onlinelib/__init__.py @@ -100,6 +100,7 @@ def lobby(win, sock, key, load): newret = chess(win, sock, 0, load) if newret in [0, 1, 2]: return newret + if readable(): msg = read() diff --git a/game.pgn b/game.pgn deleted file mode 100644 index d050050..0000000 --- a/game.pgn +++ /dev/null @@ -1,9 +0,0 @@ -[Event "My Chess Game"] -[Site "Chess Board"] -[Date "2023.12.21"] -[Round "-"] -[White "Player 1"] -[Black "Player 2"] -[Result "*"] - -1. c2c4 d1a4 2. a4e8 * \ No newline at end of file diff --git a/res/log_game/hoan.txt b/res/log_game/hoan.txt deleted file mode 100644 index 0afd260..0000000 --- a/res/log_game/hoan.txt +++ /dev/null @@ -1 +0,0 @@ -a 2024-01-04-16-53 0 diff --git a/server.py b/server.py deleted file mode 100644 index 6c9640d..0000000 --- a/server.py +++ /dev/null @@ -1,457 +0,0 @@ -""" -This file is a part of My-PyChess application. -To run the online server, run this script. - -For more information, see onlinehowto.txt - -IMPORTANT NOTE: - Server.py needs atleast Python v3.6 to work. -""" - -import queue -import random -import socket -import threading -import time -from urllib.request import urlopen - -# These are constants that can be modified by users. Default settings -# are given. Do not change if you do not know what you are doing. -LOG = False -IPV6 = False - -#===================================================== -# DO NOT MODIFY ANYTHING BELOW THIS!! -#===================================================== - -# Define other constants -VERSION = "v3.2.0" -PORT = 26104 -START_TIME = time.perf_counter() -LOGFILENAME = time.asctime().replace(" ", "_").replace(":", "-") - -# Initialise a few global variables -busyPpl = set() -end = False -lock = False -logQ = queue.Queue() -players = [] -total = totalsuccess = 0 - -# Function to convert string to int. Doesnt raise errors, returns None instead. -def makeInt(num): - try: - return int(num) - except ValueError: - return None - -# A function to display elapsed time in desired format. -def getTime(): - sec = round(time.perf_counter() - START_TIME) - minutes, sec = divmod(sec, 60) - hours, minutes = divmod(minutes, 60) - days, hours = divmod(hours, 24) - return f"{days} days, {hours} hours, {minutes} minutes, {sec} seconds" - -# A function to get IP address. It can give public IP or private. -def getIp(public): - if public: - try: - ip = urlopen("https://api64.ipify.org").read().decode() - except: - ip = "127.0.0.1" - - else: - with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: - try: - s.connect(('10.255.255.255', 1)) - ip = s.getsockname()[0] - except: - ip = '127.0.0.1' - return ip - -# A function to Log/Print text. Used instead of print() -def log(data, key=None, adminput=False): - global logQ - if adminput: - text = "" - elif key is None: - text = "SERVER: " - else: - text = f"Player{key}: " - - if data is not None: - text += data - if not adminput: - print(text) - - if LOG: - logQ.put(time.asctime() + ": " + text + "\n") - else: - logQ.put(None) - -# Used instead of sock.recv(), because it returns the decoded message, handles -# TCP packet loss, timeout and other useful stuff -def read(sock, timeout=None): - try: - sock.settimeout(timeout) - msg = sock.recv(8).decode("utf-8").strip() - - except: - msg = "quit" - - if msg: - return msg - return "quit" - -# A function to message the server, this is used instead of socket.send() -# beacause it buffers the message, handles packet loss and does not raise -# exception if message could not be sent -def write(sock, msg): - if msg: - buffedmsg = msg + (" " * (8 - len(msg))) - try: - sock.sendall(buffedmsg.encode("utf-8")) - except: - pass - -# Generates a random four digit number that is unique -def genKey(): - key = random.randint(1000, 9999) - for player in players: - if player[1] == key: - return genKey() - return key - -# Given a players key, returns the sock object for the player -# Returns None if player does not exist -def getByKey(key): - for player in players: - if player[1] == makeInt(key): - return player[0] - -# Makes the player(s) busy, ie puts the player's key in a list of busy people -def mkBusy(*keys): - global busyPpl - for key in keys: - busyPpl.add(makeInt(key)) - -# Makes the player(s) active, ie removes the player's key from the list of busy -def rmBusy(*keys): - global busyPpl - for key in keys: - busyPpl.discard(makeInt(key)) - -# This simple function handles the chess match. Returns after game ended. -# Returns True if player got disconnected during the match, false otherwise. -def game(sock1, sock2): - while True: - msg = read(sock1) - write(sock2, msg) - print(msg) - if msg == "quit": - return True - - elif msg in ["draw", "resign", "end"]: - return False - -# It handles every player's communiction with server. -def player(sock, key): - while True: - msg = read(sock) - if msg == "quit": - return - elif msg == "pStat": - log("Made request for players Stats.", key) - latestplayers = list(players) - latestbusy = list(busyPpl) - print(len(latestplayers)) - if 0 < len(latestplayers) < 11: - write(sock, "enum" + str(len(latestplayers) - 1)) - for _, i in latestplayers: - if i != key: - if i in latestbusy: - write(sock, str(i) + "b") - else: - write(sock, str(i) + "a") - - elif msg.startswith("rg"): - log(f"Made request to play with Player{msg[2:]}", key) - oSock = getByKey(msg[2:]) - if oSock is not None: - if makeInt(msg[2:]) not in busyPpl: - mkBusy(key, msg[2:]) - write(oSock, "gr" + str(key)) - - write(sock, "msgOk") - newMsg = read(sock) - if newMsg == "ready": - log(f"Player{key} is in a game as white") - if game(sock, oSock): - return - else: - log(f"Player{key} finished the game") - - elif newMsg == "quit": - write(oSock, "quit") - return - - rmBusy(key) - - else: - log(f"Player{key} requested busy player") - write(sock, "errPBusy") - else: - log(f"Player{key} Sent invalid key") - write(sock, "errKey") - - elif msg.startswith("gmOk"): - log(f"Accepted Player{msg[4:]} request", key) - oSock = getByKey(msg[4:]) - write(oSock, "start") - log(f"Player{key} is in a game as black") - if game(sock, oSock): - return - else: - log(f"Player{key} finished the game") - rmBusy(key) - - elif msg.startswith("gmNo"): - log(f"Rejected Player{msg[4:]} request", key) - write(getByKey(msg[4:]), "nostart") - rmBusy(key) - -# A thread to log all the texts. Flush from logQ. -def logThread(): - global logQ - while True: - time.sleep(1) - with open("SERVER_LOG_" + LOGFILENAME + ".txt", "a") as f: - while not logQ.empty(): - data = logQ.get() - if data is None: - return - else: - f.write(data) - -# This is a Thread that runs in background to remove disconnected people -def kickDisconnectedThread(): - global players - while True: - time.sleep(10) - for sock, key in players: - try: - ret = sock.send(b"........") - except: - ret = 0 - - if ret > 0: - cntr = 0 - diff = 8 - while True: - cntr += 1 - if cntr == 8: - ret = 0 - break - - if ret == diff: - break - diff -= ret - - try: - ret = sock.send(b"." * diff) - except: - ret = 0 - break - - if ret == 0: - log(f"Player{key} got disconnected, removing from player list") - try: - players.remove((sock, key)) - except: - pass - -# This is a Thread that runs in background to collect user input commands -def adminThread(): - global end, lock - while True: - msg = input().strip() - log(msg, adminput=True) - - if msg == "report": - log(f"{len(players)} players are online right now,") - log(f"{len(players) - len(busyPpl)} are active.") - log(f"{total} connections attempted, {totalsuccess} were successful") - log(f"Server is running {threading.active_count()} threads.") - log(f"Time elapsed since last reboot: {getTime()}") - if players: - log("LIST OF PLAYERS:") - for cnt, (_, player) in enumerate(players): - if player not in busyPpl: - log(f" {cnt+1}. Player{player}, Status: Active") - else: - log(f" {cnt+1}. Player{player}, Status: Busy") - - elif msg == "mypublicip": - log("Determining public IP, please wait....") - PUBIP = getIp(public=True) - if PUBIP == "127.0.0.1": - log("An error occurred while determining IP") - - else: - log(f"This machine has a public IP address {PUBIP}") - - elif msg == "lock": - if lock: - log("Aldready in locked state") - else: - lock = True - log("Locked server, no one can join now.") - - elif msg == "unlock": - if lock: - lock = False - log("Unlocked server, all can join now.") - else: - log("Aldready in unlocked state.") - - elif msg.startswith("kick "): - for k in msg[5:].split(): - sock = getByKey(k) - if sock is not None: - write(sock, "close") - log(f"Kicking player{k}") - else: - log(f"Player{k} does not exist") - - elif msg == "kickall": - log("Attempting to kick everyone.") - latestplayers = list(players) - for sock, _ in latestplayers: - write(sock, "close") - - elif msg == "quit": - lock = True - log("Attempting to kick everyone.") - latestplayers = list(players) - for sock, _ in latestplayers: - write(sock, "close") - - log("Exiting application - Bye") - log(None) - - end = True - if IPV6: - with socket.socket(socket.AF_INET6, socket.SOCK_STREAM) as s: - s.connect(("::1", PORT, 0, 0)) - else: - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - s.connect(("127.0.0.1", PORT)) - return - - else: - log(f"Invalid command entered ('{msg}').") - log("See 'onlinehowto.txt' for help on how to use the commands.") - -# Does the initial checks and lets players in. -def checkusername(username, password): - with open('account.txt', 'r') as file: - for line in file: - data = line.strip().split() - if len(data) == 3: - stored_username, stored_password, _ = data - if username == stored_username and password == stored_password: - return True - return False - - - -def initPlayerThread(sock): - global players, total, totalsuccess - log("New client is attempting to connect.") - total += 1 - # Đọc và kiểm tra username, password từ client - username = read(sock, 3) - password = read(sock, 3) - while not checkusername(username, password): - write(sock, "notOK") - username = read(sock, 3) - password = read(sock, 3) - - # Phản hồi cho client là thông tin đã được xác nhận - write(sock, "OK") - - # Kiểm tra các điều kiện khác và thực hiện logic kết nối - if read(sock, 3) != "PyChess": - log("Client sent invalid header, closing connection.") - write(sock, "errVer") - elif read(sock, 3) != VERSION: - log("Client sent invalid version info, closing connection.") - write(sock, "errVer") - elif len(players) >= 10: - log("Server is busy, closing new connections.") - write(sock, "errBusy") - elif lock: - log("SERVER: Server is locked, closing connection.") - write(sock, "errLock") - else: - totalsuccess += 1 - key = genKey() - log(f"Connection Successful, assigned key - {key}") - players.append((sock, key)) - - write(sock, "key" + str(key)) - player(sock, key) - log("send message close - " ) - write(sock, "close") - log(f"Player{key} has Quit") - - try: - players.remove((sock, key)) - except: - pass - rmBusy(key) - sock.close() - -# Initialize the main socket -log(f"Welcome to My-Pychess Server, {VERSION}\n") -log("INITIALIZING...") - -if IPV6: - log("IPv6 is enabled. This is NOT the default configuration.") - - mainSock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) - mainSock.bind(("::", PORT, 0, 0)) -else: - log("Starting server with IPv4 (default) configuration.") - mainSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - mainSock.bind(("0.0.0.0", PORT)) - - IP = getIp(public=False) - if IP == "127.0.0.1": - log("This machine does not appear to be connected to a network.") - log("With this limitation, you can only serve the clients ") - log("who are on THIS machine. Use IP address 127.0.0.1\n") - - else: - log(f"This machine has a local IP address - {IP}") - log("USE THIS IP IF THE CLIENT IS ON THE SAME NETWORK.") - log("For more info, read file 'onlinehowto.txt'\n") - -mainSock.listen(16) -log("Successfully Started.") -log(f"Accepting connections on port {PORT}\n") - -threading.Thread(target=adminThread).start() -threading.Thread(target=kickDisconnectedThread, daemon=True).start() -if LOG: - log("Logging is enabled. Starting to log all output") - threading.Thread(target=logThread).start() - -while True: - s, _ = mainSock.accept() - if end: - break - - threading.Thread(target=initPlayerThread, args=(s,), daemon=True).start() -mainSock.close() \ No newline at end of file diff --git a/tools/loader.py b/tools/loader.py index aa235b9..6e7d7df 100644 --- a/tools/loader.py +++ b/tools/loader.py @@ -283,6 +283,8 @@ class ONLINE: YOUARE = medium.render("You Are", True, WHITE) ERRCONN = vsmall.render("Unable to connect to that player..", True, WHITE) + WAIT_FINDMATCH = vsmall.render("Waiting for other player..", True, WHITE) + REFRESH = pygame.image.load(os.path.join("res", "img", "refresh.png")) FIND_MATCH = pygame.image.load(os.path.join("res", "img", "findmatch.png")) diff --git a/username.txt b/username.txt index 9bd1313..1225902 100644 --- a/username.txt +++ b/username.txt @@ -1,4 +1,4 @@ -hoan 1102 488 -ky 2212 500 +hoan 1102 452 +ky 2212 542 h 1010 618 a 1100 607