IMPLEMENTATION ARCHITECTURE CLIENT: 1. Run a client with and as command line argument. The client also gets its IP address (IP-C) from the local system. 2. The client program will need three independent control execution paths: one can be the main execution path and you will need to create two threads Thread1 and Thread2 for the other two. 3. Now, the three control execution paths operate as follows. In the main control execution path, the client program sends the information of the client including to the server via UDP. The server will then sends the list of online-clients to this client. Once the client receives the list, , the client program stores it in the local storage (memory or disk). Then, the main execution path of the client program waits for an updated online-client list from the server via UDP over the UDP socket that it used to connect to the server above. Thread1 is used to handle incoming chat requests from other online clients. Thread1 starts waiting for a TCP connection request over PORT-C to handle a connection request for chatting from another client. Any at time, at most one connection can be established. Note that, if this client is the one initiating a chat session to another online client, then Thread1 running on this client should reject all other chat requests coming from other online clients. This is so that a given client is involved in one chat session at a given time. Thread2 is used to handle the user input from the keyboard. The user can see the list of the online-clients coming from the server. It can tehn terminate the client itself, or make a connection with another client or wait for incoming chat requests from other clients. A user can type "LIST", "CONNECT", or "TERMINATE", or can wait for other clients to connect. If the command "LIST" is given, the Thread2 should show the list of other clients from the server on the screen. If "TERMINATE" is typed, the client process will be terminated. Before termination, the client should send a message to the server over the UDP socket to inform the server about his leaving the system. "CONNECT" command should be given with the ID of the other clients. When done, this client will connect to the client with this ID assuming that the selected client is still online. While connected, one of the clients can terminate their connection using "BYE" command. For simplicity, one process handles at most one connection request. SERVER: 1. Run the server with the port number as a command line argument. 2. A server creates a listening socket and waits for a message from the clients, which will look like . The server adds this to its list and also sends this updated list back to the client. 3. Whenever the client list is updated, the updated list should be sent to the all clients over PORT-C1.