diff --git a/Client.py b/Client.py index ab5f778..6f1f193 100755 --- a/Client.py +++ b/Client.py @@ -4,16 +4,30 @@ from PIL import Image, ImageTk import io import sys +import time from CustomPacket import CustomPacket MULTICAST_GROUP = '239.1.1.1' MULTICAST_PORT = 5004 +SOCKET_BUFFER_SIZE = 4 * 1024 * 1024 +STALE_FRAME_SECONDS = 5 +FRAGMENT_TIMEOUT_SECONDS = 0.02 +MISSING_FRAGMENT_PREVIEW = 20 + +def get_default_interface_ip(): + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + try: + sock.connect((MULTICAST_GROUP, MULTICAST_PORT)) + return sock.getsockname()[0] + finally: + sock.close() class Client: - def __init__(self, master): + def __init__(self, master, interface_ip=None): self.master = master self.master.title("Multicast Video Client") self.master.protocol("WM_DELETE_WINDOW", self.handler) + self.interface_ip = interface_ip or get_default_interface_ip() # UI Elements self.label = tk.Label(self.master, text="Waiting for multicast stream...", bg="black", fg="white", width=60, height=20) @@ -26,7 +40,11 @@ def __init__(self, master): self.running = True self.expected_frame = 0 self.received_frames = 0 + self.completed_frames = 0 + self.expired_frames = 0 self.lost_frames = 0 + self.fragment_buffers = {} + self.last_stats_update = 0 self.setup_socket() @@ -37,6 +55,7 @@ def __init__(self, master): def setup_socket(self): # Create UDP socket self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, SOCKET_BUFFER_SIZE) # Allow multiple clients on the same machine to bind to the same port self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) @@ -50,36 +69,84 @@ def setup_socket(self): self.sock.bind(('', MULTICAST_PORT)) # Join the multicast group - mreq = socket.inet_aton(MULTICAST_GROUP) + socket.inet_aton('0.0.0.0') + mreq = socket.inet_aton(MULTICAST_GROUP) + socket.inet_aton(self.interface_ip) self.sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) - print(f"Joined multicast group {MULTICAST_GROUP}:{MULTICAST_PORT}") + print(f"Joined multicast group {MULTICAST_GROUP}:{MULTICAST_PORT} via {self.interface_ip}") def receive_loop(self): while self.running: try: - # Receive multicast packets (buffer size 65536 is large enough for our max frame size ~14KB) - data, _ = self.sock.recvfrom(65536) + data, _ = self.sock.recvfrom(2048) if not data: continue # Decode received packets using our CustomPacket - frame_num, payload = CustomPacket.decode(data) + frame_num, fragment_index, fragment_count, payload = CustomPacket.decode(data) if frame_num is not None: - # Loss detection - if self.expected_frame > 0 and frame_num > self.expected_frame: - self.lost_frames += (frame_num - self.expected_frame) - - self.expected_frame = frame_num + 1 self.received_frames += 1 - - # Schedule display update on the main GUI thread - self.master.after(0, self.update_display, payload) - self.master.after(0, self.update_stats) + + buffer = self.fragment_buffers.setdefault(frame_num, { + 'count': fragment_count, + 'fragments': {}, + 'updated_at': time.monotonic(), + }) + + if buffer['count'] == fragment_count: + buffer['fragments'][fragment_index] = payload + buffer['updated_at'] = time.monotonic() + + if len(buffer['fragments']) == buffer['count']: + self.completed_frames += 1 + + # Loss detection is frame-based; display only complete frames. + if self.expected_frame > 0 and frame_num > self.expected_frame: + self.lost_frames += (frame_num - self.expected_frame) + + self.expected_frame = frame_num + 1 + frame = b''.join(buffer['fragments'][index] for index in range(buffer['count'])) + del self.fragment_buffers[frame_num] + + # Drop stale incomplete frames to avoid unbounded growth. + self.cleanup_stale_frames() + + # Schedule display update on the main GUI thread + self.master.after(0, self.update_display, frame) + self.master.after(0, self.update_stats) + + self.cleanup_stale_frames() + now = time.monotonic() + if now - self.last_stats_update >= 0.1: + self.last_stats_update = now + self.master.after(0, self.update_stats) except Exception as e: if self.running: print(f"Error receiving packet: {e}") + def cleanup_stale_frames(self): + now = time.monotonic() + for stale_frame, stale_buffer in list(self.fragment_buffers.items()): + if stale_frame < self.expected_frame: + del self.fragment_buffers[stale_frame] + continue + + timeout = max(STALE_FRAME_SECONDS, stale_buffer['count'] * FRAGMENT_TIMEOUT_SECONDS) + if now - stale_buffer['updated_at'] > timeout: + self.log_expired_frame(stale_frame, stale_buffer) + self.expired_frames += 1 + del self.fragment_buffers[stale_frame] + + def log_expired_frame(self, frame_num, buffer): + received = len(buffer['fragments']) + expected = buffer['count'] + missing = [index for index in range(expected) if index not in buffer['fragments']] + preview = missing[:MISSING_FRAGMENT_PREVIEW] + suffix = "" if len(missing) <= MISSING_FRAGMENT_PREVIEW else f" ... +{len(missing) - MISSING_FRAGMENT_PREVIEW} more" + print( + f"Expired frame {frame_num}: received {received}/{expected} fragments, " + f"missing {len(missing)} [{', '.join(map(str, preview))}{suffix}]" + ) + def update_display(self, payload): # Display the video in real time try: @@ -91,16 +158,19 @@ def update_display(self, payload): print(f"Error displaying frame: {e}") def update_stats(self): - total = self.received_frames + self.lost_frames - loss_rate = (self.lost_frames / total * 100) if total > 0 else 0 - self.stats_label.config(text=f"Packets Received: {self.received_frames} | Lost: {self.lost_frames} | Loss Rate: {loss_rate:.2f}%") + total_frames = self.completed_frames + self.lost_frames + loss_rate = (self.lost_frames / total_frames * 100) if total_frames > 0 else 0 + incomplete_frames = len(self.fragment_buffers) + self.stats_label.config( + text=f"Packets Received: {self.received_frames} | Complete Frames: {self.completed_frames} | Incomplete Frames: {incomplete_frames} | Expired Frames: {self.expired_frames} | Lost Frames: {self.lost_frames} | Loss Rate: {loss_rate:.2f}%" + ) def handler(self): """Clean up when exiting.""" self.running = False try: # Leave the multicast group when exiting - mreq = socket.inet_aton(MULTICAST_GROUP) + socket.inet_aton('0.0.0.0') + mreq = socket.inet_aton(MULTICAST_GROUP) + socket.inet_aton(self.interface_ip) self.sock.setsockopt(socket.IPPROTO_IP, socket.IP_DROP_MEMBERSHIP, mreq) self.sock.close() print("Left multicast group.") @@ -110,6 +180,11 @@ def handler(self): self.master.destroy() if __name__ == "__main__": + if len(sys.argv) > 2: + print("Usage: python Client.py [interface_ip]") + sys.exit(1) + + interface_ip = sys.argv[1] if len(sys.argv) == 2 else None root = tk.Tk() - client = Client(root) + client = Client(root, interface_ip) root.mainloop() diff --git a/CustomPacket.py b/CustomPacket.py index d6bbb77..aceaf85 100644 --- a/CustomPacket.py +++ b/CustomPacket.py @@ -2,35 +2,50 @@ class CustomPacket: MAGIC = 0x1234 - HEADER_FORMAT = "!HII" + HEADER_FORMAT = "!HIIII" HEADER_SIZE = struct.calcsize(HEADER_FORMAT) @staticmethod - def encode(frame_num, payload): + def encode(frame_num, payload, fragment_index=0, fragment_count=1): """ - Encode the frame into a custom packet. + Encode a frame fragment into a custom packet. Header: - 2 bytes: Magic number (0x1234) - 4 bytes: Frame number + - 4 bytes: Fragment index + - 4 bytes: Fragment count - 4 bytes: Payload length """ - header = struct.pack(CustomPacket.HEADER_FORMAT, CustomPacket.MAGIC, frame_num, len(payload)) + header = struct.pack( + CustomPacket.HEADER_FORMAT, + CustomPacket.MAGIC, + frame_num, + fragment_index, + fragment_count, + len(payload), + ) return header + payload @staticmethod def decode(data): """ Decode the custom packet. - Returns (frame_num, payload) or (None, None) if invalid. + Returns (frame_num, fragment_index, fragment_count, payload) or + (None, None, None, None) if invalid. """ if len(data) < CustomPacket.HEADER_SIZE: - return None, None + return None, None, None, None header = data[:CustomPacket.HEADER_SIZE] - magic, frame_num, length = struct.unpack(CustomPacket.HEADER_FORMAT, header) + magic, frame_num, fragment_index, fragment_count, length = struct.unpack(CustomPacket.HEADER_FORMAT, header) if magic != CustomPacket.MAGIC: - return None, None - + return None, None, None, None + if fragment_count == 0 or fragment_index >= fragment_count: + return None, None, None, None + payload = data[CustomPacket.HEADER_SIZE:CustomPacket.HEADER_SIZE+length] - return frame_num, payload + if len(payload) != length: + return None, None, None, None + + return frame_num, fragment_index, fragment_count, payload diff --git a/Server.py b/Server.py index ef95fa5..8ce4fbd 100755 --- a/Server.py +++ b/Server.py @@ -5,6 +5,17 @@ MULTICAST_GROUP = '239.1.1.1' MULTICAST_PORT = 5004 +UDP_MTU = 1400 +SOCKET_BUFFER_SIZE = 4 * 1024 * 1024 +FRAGMENT_SEND_INTERVAL = 0.005 + +def get_default_interface_ip(): + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + try: + sock.connect((MULTICAST_GROUP, MULTICAST_PORT)) + return sock.getsockname()[0] + finally: + sock.close() class VideoStream: def __init__(self, filename): @@ -15,38 +26,80 @@ def __init__(self, filename): print(f"Error: Could not open {filename}") sys.exit(1) self.frameNum = 0 + self.lengthPrefixed = self._is_length_prefixed() + + def _is_length_prefixed(self): + """Detect the original sample format: 5 ASCII digits before each frame.""" + prefix = self.file.read(5) + self.file.seek(0) + return len(prefix) == 5 and prefix.isdigit() def nextFrame(self): - # The first 5 bytes represent the frame length + if not self.lengthPrefixed: + return self._next_jpeg_frame() + data = self.file.read(5) - if data: - try: - framelength = int(data) - frame = self.file.read(framelength) - self.frameNum += 1 - return frame - except ValueError: + if not data: + return None + + framelength = int(data) + frame = self.file.read(framelength) + if len(frame) != framelength: + return None + + self.frameNum += 1 + return frame + + def _next_jpeg_frame(self): + """Read one JPEG image from a standard concatenated MJPEG stream.""" + frame = bytearray() + prev = None + + while True: + byte = self.file.read(1) + if not byte: return None - return None + + value = byte[0] + if prev == 0xFF and value == 0xD8: + frame.extend((0xFF, 0xD8)) + break + prev = value + + prev = None + while True: + byte = self.file.read(1) + if not byte: + return None + + value = byte[0] + frame.append(value) + if prev == 0xFF and value == 0xD9: + self.frameNum += 1 + return bytes(frame) + prev = value def reset(self): self.file.seek(0) self.frameNum = 0 def main(): - if len(sys.argv) != 2: - print("Usage: python Server.py ") + if len(sys.argv) not in (2, 3): + print("Usage: python Server.py [interface_ip]") sys.exit(1) - + filename = sys.argv[1] + interface_ip = sys.argv[2] if len(sys.argv) == 3 else get_default_interface_ip() # Create UDP socket for multicast sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, SOCKET_BUFFER_SIZE) sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2) + sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_IF, socket.inet_aton(interface_ip)) video_stream = VideoStream(filename) - print(f"Starting multicast streaming to {MULTICAST_GROUP}:{MULTICAST_PORT}...") + print(f"Starting multicast streaming to {MULTICAST_GROUP}:{MULTICAST_PORT} via {interface_ip}...") while True: frame = video_stream.nextFrame() @@ -55,16 +108,25 @@ def main(): video_stream.reset() continue - # Packetize the frame using our custom format - packet = CustomPacket.encode(video_stream.frameNum, frame) - - # Send every frame to the multicast IP address - try: - sock.sendto(packet, (MULTICAST_GROUP, MULTICAST_PORT)) - except Exception as e: - print(f"Failed to send packet: {e}") + # Split large frames so each UDP datagram stays under the target MTU. + max_payload_size = UDP_MTU - CustomPacket.HEADER_SIZE + fragment_count = (len(frame) + max_payload_size - 1) // max_payload_size + + for fragment_index in range(fragment_count): + start = fragment_index * max_payload_size + payload = frame[start:start + max_payload_size] + packet = CustomPacket.encode(video_stream.frameNum, payload, fragment_index, fragment_count) + + try: + sock.sendto(packet, (MULTICAST_GROUP, MULTICAST_PORT)) + except Exception as e: + print(f"Failed to send packet: {e}") + + # Avoid dropping large FHD frames by blasting hundreds of UDP packets at once. + if fragment_count > 1: + time.sleep(FRAGMENT_SEND_INTERVAL) - # Broadcast frames at approximately 20 FPS (50 ms/frame) + # Keep a baseline frame interval; large fragmented frames may run slower due to pacing. time.sleep(0.05) if __name__ == "__main__": diff --git a/doc/Socket_Requirement.pdf b/doc/Socket_Requirement.pdf deleted file mode 100644 index 792f8cd..0000000 Binary files a/doc/Socket_Requirement.pdf and /dev/null differ diff --git a/doc/assets/Client_Init.png b/doc/assets/Client_Init.png deleted file mode 100644 index 0dd62eb..0000000 Binary files a/doc/assets/Client_Init.png and /dev/null differ diff --git a/doc/assets/Client_running_2.png b/doc/assets/Client_running_2.png deleted file mode 100644 index d7e2119..0000000 Binary files a/doc/assets/Client_running_2.png and /dev/null differ diff --git a/doc/assets/Clients_running.png b/doc/assets/Clients_running.png deleted file mode 100644 index 822db90..0000000 Binary files a/doc/assets/Clients_running.png and /dev/null differ diff --git a/doc/assets/Server_Init.png b/doc/assets/Server_Init.png deleted file mode 100644 index 0d58f83..0000000 Binary files a/doc/assets/Server_Init.png and /dev/null differ diff --git a/doc/assets/Statistics.png b/doc/assets/Statistics.png deleted file mode 100644 index a688ba0..0000000 Binary files a/doc/assets/Statistics.png and /dev/null differ diff --git a/doc/assets/client_waiting_stream.png b/doc/assets/client_waiting_stream.png deleted file mode 100644 index 67e43a6..0000000 Binary files a/doc/assets/client_waiting_stream.png and /dev/null differ diff --git a/doc/assets/pause_packet_client.png b/doc/assets/pause_packet_client.png deleted file mode 100644 index bbbec0c..0000000 Binary files a/doc/assets/pause_packet_client.png and /dev/null differ diff --git a/doc/assets/pause_packet_server.png b/doc/assets/pause_packet_server.png deleted file mode 100644 index 5b5785f..0000000 Binary files a/doc/assets/pause_packet_server.png and /dev/null differ diff --git a/doc/assets/play_packet_client_udp.png b/doc/assets/play_packet_client_udp.png deleted file mode 100644 index 2dc982f..0000000 Binary files a/doc/assets/play_packet_client_udp.png and /dev/null differ diff --git a/doc/assets/play_packet_server.png b/doc/assets/play_packet_server.png deleted file mode 100644 index 8f5aa8e..0000000 Binary files a/doc/assets/play_packet_server.png and /dev/null differ diff --git a/doc/assets/play_packet_tcp.png b/doc/assets/play_packet_tcp.png deleted file mode 100644 index 0c34e01..0000000 Binary files a/doc/assets/play_packet_tcp.png and /dev/null differ diff --git a/doc/assets/setup_packet_client.png b/doc/assets/setup_packet_client.png deleted file mode 100644 index dfeb893..0000000 Binary files a/doc/assets/setup_packet_client.png and /dev/null differ diff --git a/doc/assets/setup_packet_server.png b/doc/assets/setup_packet_server.png deleted file mode 100644 index 40ec9e9..0000000 Binary files a/doc/assets/setup_packet_server.png and /dev/null differ diff --git a/doc/assets/setup_ui_udp.png b/doc/assets/setup_ui_udp.png deleted file mode 100644 index 756d5f9..0000000 Binary files a/doc/assets/setup_ui_udp.png and /dev/null differ diff --git a/doc/assets/tcp_setup.png b/doc/assets/tcp_setup.png deleted file mode 100644 index 8c437c3..0000000 Binary files a/doc/assets/tcp_setup.png and /dev/null differ diff --git a/doc/assets/teardown_packet_client.png b/doc/assets/teardown_packet_client.png deleted file mode 100644 index a1eeb96..0000000 Binary files a/doc/assets/teardown_packet_client.png and /dev/null differ diff --git a/doc/assets/teardown_packet_server.png b/doc/assets/teardown_packet_server.png deleted file mode 100644 index f9e1c44..0000000 Binary files a/doc/assets/teardown_packet_server.png and /dev/null differ diff --git a/doc/logohcmus.jpg b/doc/logohcmus.jpg deleted file mode 100644 index f34fbbb..0000000 Binary files a/doc/logohcmus.jpg and /dev/null differ diff --git a/doc/multicast_design.md b/doc/multicast_design.md deleted file mode 100644 index 2e4049d..0000000 --- a/doc/multicast_design.md +++ /dev/null @@ -1,134 +0,0 @@ -# Multicast Design Checkpoint - -This document records the current behavior and the target multicast design before code changes are made. It is intended as a safe checkpoint for review and rollback. - -## Current Behavior - -The current project uses RTSP over TCP for control and sends media per client. - -Control path: - -```text -Client -> Server -RTSP over TCP -SETUP / PLAY / PAUSE / TEARDOWN -``` - -Media path: - -```text -ServerWorker -> one client -RTP over UDP, or custom frame delivery over TCP -``` - -For UDP streaming, the server sends each RTP packet directly to the requesting client's IP address and RTP port. Each client has its own `ServerWorker`, its own `VideoStream`, and its own media sending loop. - -Current UDP media model: - -```text -Client A SETUP/PLAY -> ServerWorker A -> RTP packets to Client A -Client B SETUP/PLAY -> ServerWorker B -> RTP packets to Client B -``` - -This is multi-client unicast, not multicast. Multiple clients can connect, but the server still sends separate media streams to each client. - -## Target Multicast Behavior - -The target design keeps RTSP as the unicast control protocol and changes RTP media delivery to UDP multicast. - -Target control path: - -```text -Client -> Server -RTSP over TCP -SETUP / PLAY / PAUSE / TEARDOWN -``` - -Target media path: - -```text -Server -> RTP multicast group -UDP multicast -All joined clients receive the same RTP stream -``` - -Target media model: - -```text -Server -> 239.10.10.1:5004 - -> Client A, if joined - -> Client B, if joined -``` - -The server sends each RTP packet once to the multicast group. Clients receive video by joining the multicast group and listening on the multicast RTP port. - -## Target State Model - -The server owns the official shared stream state. - -Proposed states: - -```text -STOPPED -READY -PLAYING -PAUSED -``` - -The target design may use a separate state announcement multicast channel so all clients can observe the official state. - -State channel: - -```text -Server -> 239.10.10.2:7000 -UDP multicast state announcements -``` - -Example flow: - -```text -Client A sends RTSP PAUSE to server -Server changes shared stream state to PAUSED -Server multicasts STATE_PAUSED -All clients receive STATE_PAUSED and update local UI/playback state -``` - -Clients do not directly control each other. Clients request control from the server, and the server announces the official state. - -## Assumptions - -- RTSP remains TCP unicast per client. -- RTP media is multicast over UDP. -- The multicast stream is shared by all clients. -- PLAY and PAUSE are global stream controls in the multicast design. -- TEARDOWN should disconnect the requesting client; it should not necessarily stop the shared stream for all clients. -- Late-joining clients start from the current live stream position, not from the beginning of the video. -- A simple LAN/demo environment is assumed. -- Security and authentication for state packets are out of scope. - -## Out Of Scope For Initial Multicast Work - -- RTCP implementation. -- H.264 encoding changes. -- Authentication or anti-spoofing for multicast state messages. -- WAN multicast routing support. -- Production-grade stream discovery. - -## Implementation Direction - -The main architectural change is moving from per-client media streams to one shared multicast stream. - -Current ownership: - -```text -ServerWorker owns VideoStream and RTP sending loop -``` - -Target ownership: - -```text -Shared multicast stream manager owns VideoStream and RTP sending loop -ServerWorker handles RTSP control requests and delegates shared stream control -``` - -This keeps the existing RTSP client/server structure while replacing the media delivery path with multicast. diff --git a/doc/report_template.aux b/doc/report_template.aux deleted file mode 100644 index 6077e49..0000000 --- a/doc/report_template.aux +++ /dev/null @@ -1,48 +0,0 @@ -\relax -\providecommand \babel@aux [2]{\global \let \babel@toc \@gobbletwo } -\@nameuse{bbl@beforestart} -\providecommand\hyper@newdestlabel[2]{} -\providecommand\HyField@AuxAddToFields[1]{} -\providecommand\HyField@AuxAddToCoFields[2]{} -\babel@aux{english}{} -\pgfsyspdfmark {pgfid1}{3952079}{49932859} -\@writefile{toc}{\contentsline {chapter}{\numberline {1}Introduction and Specifications}{1}{chapter.1}\protected@file@percent } -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {1.1}Project Overview}{1}{section.1.1}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {1.2}Group Members and Task Allocation}{1}{section.1.2}\protected@file@percent } -\@writefile{toc}{\contentsline {chapter}{\numberline {2}System Architecture and Protocol Design}{2}{chapter.2}\protected@file@percent } -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {2.1}Multicast Streaming Paradigm}{2}{section.2.1}\protected@file@percent } -\@writefile{lof}{\contentsline {figure}{\numberline {2.1}{\ignorespaces Server-Multicast Group Architecture Diagram}}{2}{figure.caption.1}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {2.2}Custom Packet Format}{2}{section.2.2}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {2.3}Concurrent Clients and Loss Detection Algorithm}{3}{section.2.3}\protected@file@percent } -\@writefile{toc}{\contentsline {chapter}{\numberline {3}Code Implementation Details}{4}{chapter.3}\protected@file@percent } -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {3.1}Custom Packet Encoding/Decoding (\texttt {CustomPacket.py})}{4}{section.3.1}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\numberline {3.1}{\ignorespaces CustomPacket.py - Header Structure}}{4}{lstlisting.3.1}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {3.2}Server Implementation (\texttt {Server.py})}{4}{section.3.2}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\numberline {3.2}{\ignorespaces Server.py - Core Multicast Loop}}{5}{lstlisting.3.2}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {3.3}Client Implementation and GUI Threading (\texttt {Client.py})}{5}{section.3.3}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\numberline {3.3}{\ignorespaces Client.py - Threading and Socket Setup}}{5}{lstlisting.3.3}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\numberline {3.4}{\ignorespaces Client.py - Packet Reception and Thread-Safe UI Update}}{5}{lstlisting.3.4}\protected@file@percent } -\@writefile{toc}{\contentsline {chapter}{\numberline {4}Verification and Experimental Results}{6}{chapter.4}\protected@file@percent } -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {4.1}Server Operation and Initialization}{6}{section.4.1}\protected@file@percent } -\@writefile{lof}{\contentsline {figure}{\numberline {4.1}{\ignorespaces Server terminal successfully running and broadcasting}}{6}{figure.caption.2}\protected@file@percent } -\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}} -\newlabel{fig:server_running}{{4.1}{6}{Server terminal successfully running and broadcasting}{figure.caption.2}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.2}Client Playback and Concurrency}{6}{section.4.2}\protected@file@percent } -\@writefile{lof}{\contentsline {figure}{\numberline {4.2}{\ignorespaces Client GUI in waiting state}}{7}{figure.caption.3}\protected@file@percent } -\newlabel{fig:client_waiting}{{4.2}{7}{Client GUI in waiting state}{figure.caption.3}{}} -\@writefile{lof}{\contentsline {figure}{\numberline {4.3}{\ignorespaces Client GUI displaying the video stream}}{7}{figure.caption.3}\protected@file@percent } -\newlabel{fig:client_running}{{4.3}{7}{Client GUI displaying the video stream}{figure.caption.3}{}} -\@writefile{lof}{\contentsline {figure}{\numberline {4.4}{\ignorespaces Multiple Client windows running simultaneously on the same screen}}{7}{figure.caption.4}\protected@file@percent } -\newlabel{fig:multiple_clients}{{4.4}{7}{Multiple Client windows running simultaneously on the same screen}{figure.caption.4}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.3}Statistics, Loss Detection, and IGMP Leave}{7}{section.4.3}\protected@file@percent } -\@writefile{lof}{\contentsline {figure}{\numberline {4.5}{\ignorespaces Client GUI highlighting the "Packets Lost" and "Loss Rate" statistics}}{7}{figure.caption.5}\protected@file@percent } -\newlabel{fig:client_loss}{{4.5}{7}{Client GUI highlighting the "Packets Lost" and "Loss Rate" statistics}{figure.caption.5}{}} -\gdef \@abspage@last{10} diff --git a/doc/report_template.fdb_latexmk b/doc/report_template.fdb_latexmk deleted file mode 100644 index 96b6eff..0000000 --- a/doc/report_template.fdb_latexmk +++ /dev/null @@ -1,206 +0,0 @@ -# Fdb version 4 -["pdflatex"] 1783087802.83038 "report_template.tex" "report_template.pdf" "report_template" 1783087804.07969 0 - "/usr/share/texmf-dist/fonts/enc/dvips/cm-super/cm-super-ts1.enc" 1775415801 2900 1537cc8184ad1792082cd229ecc269f4 "" - "/usr/share/texmf-dist/fonts/map/fontname/texfonts.map" 1775415801 3524 cb3e574dea2d1052e39280babc910dc8 "" - "/usr/share/texmf-dist/fonts/tfm/jknappen/ec/tcss1200.tfm" 1775415801 1536 809a177113b9dd743dafe00d0870078f "" - "/usr/share/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm" 1775415801 1004 54797486969f23fa377b128694d548df "" - "/usr/share/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex8.tfm" 1775415801 988 bdf658c3bfc2d96d3c8b02cfc1c94c20 "" - "/usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm" 1775415801 916 f87d7c45f9c908e672703b83b72241a3 "" - "/usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam7.tfm" 1775415801 928 2dc8d444221b7a635bb58038579b861a "" - "/usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm" 1775415801 908 2921f8a10601f252058503cc6570e581 "" - "/usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm7.tfm" 1775415801 940 228d6584342e91276bf566bcf9716b83 "" - "/usr/share/texmf-dist/fonts/tfm/public/cm/cmex10.tfm" 1775415801 992 662f679a0b3d2d53c1b94050fdaa3f50 "" - "/usr/share/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm" 1775415801 1524 4414a8315f39513458b80dfc63bff03a "" - "/usr/share/texmf-dist/fonts/tfm/public/cm/cmmi6.tfm" 1775415801 1512 f21f83efb36853c0b70002322c1ab3ad "" - "/usr/share/texmf-dist/fonts/tfm/public/cm/cmmi8.tfm" 1775415801 1520 eccf95517727cb11801f4f1aee3a21b4 "" - "/usr/share/texmf-dist/fonts/tfm/public/cm/cmr12.tfm" 1775415801 1288 655e228510b4c2a1abe905c368440826 "" - "/usr/share/texmf-dist/fonts/tfm/public/cm/cmr6.tfm" 1775415801 1300 b62933e007d01cfd073f79b963c01526 "" - "/usr/share/texmf-dist/fonts/tfm/public/cm/cmr8.tfm" 1775415801 1292 21c1c5bfeaebccffdb478fd231a0997d "" - "/usr/share/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm" 1775415801 1124 6c73e740cf17375f03eec0ee63599741 "" - "/usr/share/texmf-dist/fonts/tfm/public/cm/cmsy6.tfm" 1775415801 1116 933a60c408fc0a863a92debe84b2d294 "" - "/usr/share/texmf-dist/fonts/tfm/public/cm/cmsy8.tfm" 1775415801 1120 8b7d695260f3cff42e636090a8002094 "" - "/usr/share/texmf-dist/fonts/tfm/public/latex-fonts/lasy10.tfm" 1775415801 520 82a3d37183f34b6eb363a161dfc002c2 "" - "/usr/share/texmf-dist/fonts/tfm/public/latex-fonts/lasy6.tfm" 1775415801 520 4889cce2180234b97cad636b6039c722 "" - "/usr/share/texmf-dist/fonts/tfm/public/latex-fonts/lasy8.tfm" 1775415801 520 7bb3abb160b19e0ed6ac404bb59052b7 "" - "/usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnr12.tfm" 1775415801 3984 be7b630197255361b12d153ce5e1bc5b "" - "/usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnss10.tfm" 1775415801 3860 2fdd484113fc2fde7b8c827421590630 "" - "/usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnss12.tfm" 1775415801 3884 000089fb5b5a94f8165f420e3d273c01 "" - "/usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnss17.tfm" 1775415801 3884 759091b1e805bc56b5225d9e9fab88a0 "" - "/usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnss8.tfm" 1775415801 3856 9f75b7140af36732b08690416b434073 "" - "/usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnssbx10.tfm" 1775415801 3856 b1324a77942d6f7087fa7f383d2bdb2f "" - "/usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnssi12.tfm" 1775415801 4116 e6a6f383427b42b466d0095e529f972d "" - "/usr/share/texmf-dist/fonts/tfm/vntex/vnr/vntt10.tfm" 1775415801 1340 1f050e88f9cfabe402b16c8ea7930ea1 "" - "/usr/share/texmf-dist/fonts/tfm/vntex/vnr/vntt12.tfm" 1775415801 1340 06553ed104adbb36180126e32f8c640c "" - "/usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi12.pfb" 1775415801 36741 fa121aac0049305630cf160b86157ee4 "" - "/usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmr12.pfb" 1775415801 32722 d7379af29a190c3f453aba36302ff5a9 "" - "/usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb" 1775415801 32569 5e5ddc8df908dea60932f3c484a54c0d "" - "/usr/share/texmf-dist/fonts/type1/public/cm-super/sfss1200.pfb" 1775415801 95792 fb800ffa2babe7bd5fafc1817d8f1313 "" - "/usr/share/texmf-dist/fonts/type1/vntex/vnr/vnss12.pfb" 1775415801 35928 ab81e39dbf90a1b05fa94d1ea4c5aa72 "" - "/usr/share/texmf-dist/fonts/type1/vntex/vnr/vnss8.pfb" 1775415801 35755 40eb5a01357ca8422253fee6a2216252 "" - "/usr/share/texmf-dist/fonts/type1/vntex/vnr/vnssbx10.pfb" 1775415801 40590 d65e446f1203ef77fe7df09181803989 "" - "/usr/share/texmf-dist/fonts/type1/vntex/vnr/vnssi12.pfb" 1775415801 36701 4bd31f3a166e9d489907e142f250442c "" - "/usr/share/texmf-dist/fonts/type1/vntex/vnr/vntt10.pfb" 1775415801 41221 c1f2d5e30504195bc4ee3c8fab0ee4ad "" - "/usr/share/texmf-dist/fonts/type1/vntex/vnr/vntt12.pfb" 1775415801 40832 4a1109db0219898270ca9c4c2fdb38d4 "" - "/usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii" 1775415801 71627 94eb9990bed73c364d7f53f960cc8c5b "" - "/usr/share/texmf-dist/tex/generic/babel-english/english.ldf" 1775415801 7008 9ff5fdcc865b01beca2b0fe4a46231d4 "" - "/usr/share/texmf-dist/tex/generic/babel/babel.sty" 1775415801 147019 f2ca437186bfeb562e1066ad59426a04 "" - "/usr/share/texmf-dist/tex/generic/babel/locale/en/babel-en.ini" 1775415801 3936 fef897bbcfe8e9d18c93a3d2d53cf9d8 "" - "/usr/share/texmf-dist/tex/generic/babel/locale/en/babel-english.tex" 1775415801 374 a9c05f002d9437e6de45ac1cc23d56c2 "" - "/usr/share/texmf-dist/tex/generic/babel/txtbabel.def" 1775415801 5231 c1599e5bf7d2ee42743212a7f8d20a56 "" - "/usr/share/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty" 1775415801 40635 c40361e206be584d448876bba8a64a3b "" - "/usr/share/texmf-dist/tex/generic/bitset/bitset.sty" 1775415801 33961 6b5c75130e435b2bfdb9f480a09a39f9 "" - "/usr/share/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty" 1775415801 8371 9d55b8bd010bc717624922fb3477d92e "" - "/usr/share/texmf-dist/tex/generic/iftex/iftex.sty" 1775415801 7984 7dbb9280f03c0a315425f1b4f35d43ee "" - "/usr/share/texmf-dist/tex/generic/iftex/ifvtex.sty" 1775415801 1057 525c2192b5febbd8c1f662c9468335bb "" - "/usr/share/texmf-dist/tex/generic/infwarerr/infwarerr.sty" 1775415801 8356 7bbb2c2373aa810be568c29e333da8ed "" - "/usr/share/texmf-dist/tex/generic/intcalc/intcalc.sty" 1775415801 31769 002a487f55041f8e805cfbf6385ffd97 "" - "/usr/share/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty" 1775415801 5412 d5a2436094cd7be85769db90f29250a6 "" - "/usr/share/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty" 1775415801 17865 1a9bd36b4f98178fa551aca822290953 "" - "/usr/share/texmf-dist/tex/generic/pdfescape/pdfescape.sty" 1775415801 19007 15924f7228aca6c6d184b115f4baa231 "" - "/usr/share/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty" 1775415801 20089 80423eac55aa175305d35b49e04fe23b "" - "/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex" 1775415801 1016 1c2b89187d12a2768764b83b4945667c "" - "/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex" 1775415801 43906 06058dc09064474303f3b5dd62d982c0 "" - "/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex" 1775415801 19324 f4e4c6403dd0f1605fd20ed22fa79dea "" - "/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex" 1775415801 6038 ccb406740cc3f03bbfb58ad504fe8c27 "" - "/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex" 1775415801 6911 f6d4cf5a3fef5cc879d668b810e82868 "" - "/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex" 1775415801 4883 42daaf41e27c3735286e23e48d2d7af9 "" - "/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex" 1775415801 2544 8c06d2a7f0f469616ac9e13db6d2f842 "" - "/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex" 1775415801 44195 5e390c414de027626ca5e2df888fa68d "" - "/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.tex" 1775415801 17311 e001219836e75b16c4af9a112785f30a "" - "/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex" 1775415801 21302 788a79944eb22192a4929e46963a3067 "" - "/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex" 1775415801 9691 3d42d89522f4650c2f3dc616ca2b925e "" - "/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex" 1775415801 33335 dd1fa4814d4e51f18be97d88bf0da60c "" - "/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex" 1775415801 2965 4c2b1f4e0826925746439038172e5d6f "" - "/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex" 1775415801 5196 2cc249e0ee7e03da5f5f6589257b1e5b "" - "/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex" 1775415801 20821 7579108c1e9363e61a0b1584778804aa "" - "/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex" 1775415801 35251 5ff5b5b310c5ac882610e0ccc99095e7 "" - "/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.tex" 1775415801 22012 81b34a0aa8fa1a6158cc6220b00e4f10 "" - "/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex" 1775415801 8893 e851de2175338fdf7c17f3e091d94618 "" - "/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarytopaths.code.tex" 1775415801 11518 738408f795261b70ce8dd47459171309 "" - "/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex" 1775415801 186859 0445d9a41a87648b4723e04765409541 "" - "/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.tex" 1775415801 32995 ac577023e12c0e4bd8aa420b2e852d1a "" - "/usr/share/texmf-dist/tex/generic/pgf/math/pgfint.code.tex" 1775415801 3063 8c415c68a0f3394e45cfeca0b65f6ee6 "" - "/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex" 1775415801 949 cea70942e7b7eddabfb3186befada2e6 "" - "/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex" 1775415801 13272 7777a64fbd07131a37d276b131c17ee2 "" - "/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex" 1775415801 104717 9b2393fbf004a0ce7fa688dbce423848 "" - "/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex" 1775415801 10165 cec5fa73d49da442e56efc2d605ef154 "" - "/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex" 1775415801 28178 41c17713108e0795aac6fef3d275fbca "" - "/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex" 1775415801 9649 85779d3d8d573bfd2cd4137ba8202e60 "" - "/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.tex" 1775415801 3865 ac538ab80c5cf82b345016e474786549 "" - "/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics.code.tex" 1775415801 3177 27d85c44fbfe09ff3b2cf2879e3ea434 "" - "/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex" 1775415801 11024 0179538121bc2dba172013a3ef89519f "" - "/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex" 1775415801 7889 d0e193914ddc35444510f5b569e26b3d "" - "/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex" 1775415801 3379 781797a101f647bab82741a99944a229 "" - "/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code.tex" 1775415801 92405 f515f31275db273f97b9d8f52e1b0736 "" - "/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex" 1775415801 37733 0fe471ac50324723cf6ab693e5c0916c "" - "/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex" 1775415801 8471 c2883569d03f69e8e1cabfef4999cfd7 "" - "/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex" 1775415801 21211 1e73ec76bd73964d84197cc3d2685b01 "" - "/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex" 1775415801 16218 98503859deba28f16813029fd927ed8e "" - "/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex" 1775415801 44792 c4a5a3feba777682c1d16420f2f01a5b "" - "/usr/share/texmf-dist/tex/generic/pgf/pgf.revision.tex" 1775415801 116 760d50e6a16543bf6edb475635793673 "" - "/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg" 1775415801 926 2963ea0dcf6cc6c0a770b69ec46a477b "" - "/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def" 1775415801 5542 32f75a31ea6c3a7e1148cd6d5e93dbb7 "" - "/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def" 1775415801 12612 7774ba67bfd72e593c4436c2de6201e3 "" - "/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex" 1775415801 61355 39904e7552da3800a6838d41440943a5 "" - "/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex" 1775415801 1896 b8e0ca0ac371d74c0ca05583f6313c91 "" - "/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex" 1775415801 7778 53c8b5623d80238f6a20aa1df1868e63 "" - "/usr/share/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex" 1775415801 24033 d8893a1ec4d1bfa101b172754743d340 "" - "/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex" 1775415801 39784 414c54e866ebab4b801e2ad81d9b21d8 "" - "/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfiltered.code.tex" 1775415801 37436 50ba7794827e363eec9ea3467c15c6d7 "" - "/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex" 1775415801 4385 510565c2f07998c8a0e14f0ec07ff23c "" - "/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex" 1775415801 30029 c49ea8f95207c46731469c614daf4e33 "" - "/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def" 1775415801 7067 11553488d1600cac6a0cfca012fca111 "" - "/usr/share/texmf-dist/tex/generic/stringenc/stringenc.sty" 1775415801 21514 b7557edcee22835ef6b03ede1802dad4 "" - "/usr/share/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty" 1775415801 7008 f92eaa0a3872ed622bbf538217cd2ab7 "" - "/usr/share/texmf-dist/tex/latex/amscls/amsthm.sty" 1775415801 12594 0d51ac3a545aaaa555021326ff22a6cc "" - "/usr/share/texmf-dist/tex/latex/amsfonts/amsfonts.sty" 1775415801 5949 3f3fd50a8cc94c3d4cbf4fc66cd3df1c "" - "/usr/share/texmf-dist/tex/latex/amsfonts/amssymb.sty" 1775415801 13829 94730e64147574077f8ecfea9bb69af4 "" - "/usr/share/texmf-dist/tex/latex/amsfonts/umsa.fd" 1775415801 961 6518c6525a34feb5e8250ffa91731cff "" - "/usr/share/texmf-dist/tex/latex/amsfonts/umsb.fd" 1775415801 961 d02606146ba5601b5645f987c92e6193 "" - "/usr/share/texmf-dist/tex/latex/amsmath/amsbsy.sty" 1775415801 2222 27db7d52163edae53881b71ff62e754e "" - "/usr/share/texmf-dist/tex/latex/amsmath/amscd.sty" 1775415801 5321 1c88c84c0b0940b8bd542edb29597d30 "" - "/usr/share/texmf-dist/tex/latex/amsmath/amsgen.sty" 1775415801 4173 1b3e76addfb8afcb47db4811d66e1dc6 "" - "/usr/share/texmf-dist/tex/latex/amsmath/amsmath.sty" 1775415801 88471 b1bb09142edddebd46ba986341b867bd "" - "/usr/share/texmf-dist/tex/latex/amsmath/amsopn.sty" 1775415801 4474 c510a88aa5f51b8c773b50a7ee92befd "" - "/usr/share/texmf-dist/tex/latex/amsmath/amstext.sty" 1775415801 2444 9983e1d0683f102e3b190c64a49313aa "" - "/usr/share/texmf-dist/tex/latex/base/fontenc.sty" 1775415801 5275 6f9d359641b36842524cdb97716ab75f "" - "/usr/share/texmf-dist/tex/latex/base/inputenc.sty" 1775415801 5048 0270515b828149155424600fd2d58ac5 "" - "/usr/share/texmf-dist/tex/latex/base/latexsym.sty" 1775415801 2853 45a98f589f86476fadff19a8edda5ea9 "" - "/usr/share/texmf-dist/tex/latex/base/report.cls" 1775415801 23203 f495085ac76be4e20c5e1e88646a241e "" - "/usr/share/texmf-dist/tex/latex/base/size12.clo" 1775415801 8449 8dc66c6c313c8eb2d774af83bca435dd "" - "/usr/share/texmf-dist/tex/latex/base/ulasy.fd" 1775415801 2233 b5d3114ec3e0616e658a8e7b74e810f1 "" - "/usr/share/texmf-dist/tex/latex/booktabs/booktabs.sty" 1775415801 6078 f1cb470c9199e7110a27851508ed7a5c "" - "/usr/share/texmf-dist/tex/latex/caption/caption.sty" 1775415801 56128 c2ccf1a29d78c33bc553880402e4fb9a "" - "/usr/share/texmf-dist/tex/latex/caption/caption3.sty" 1775415801 72619 ee90b6612147680fd73c3b1406a74245 "" - "/usr/share/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty" 1775415801 13886 d1306dcf79a944f6988e688c1785f9ce "" - "/usr/share/texmf-dist/tex/latex/etoolbox/etoolbox.sty" 1775415801 46885 8953c67ffba03252c6090aa19568b8ba "" - "/usr/share/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty" 1775415801 31715 19e60610b63819fe670dfa1cd84a4e94 "" - "/usr/share/texmf-dist/tex/latex/float/float.sty" 1775415801 6749 16d2656a1984957e674b149555f1ea1d "" - "/usr/share/texmf-dist/tex/latex/geometry/geometry.sty" 1775415801 41601 9cf6c5257b1bc7af01a58859749dd37a "" - "/usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg" 1775415801 1213 620bba36b25224fa9b7e1ccb4ecb76fd "" - "/usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg" 1775415801 1224 978390e9c2234eab29404bc21b268d1e "" - "/usr/share/texmf-dist/tex/latex/graphics-def/pdftex.def" 1775415801 19626 23e2822b9b2b5005f4c549ca98b9334d "" - "/usr/share/texmf-dist/tex/latex/graphics/color.sty" 1775415801 7245 a7e8457a46cda4920df85d975267efb4 "" - "/usr/share/texmf-dist/tex/latex/graphics/graphics.sty" 1775415801 18363 69bb4f5538964bfea50d1e6d89cbe69f "" - "/usr/share/texmf-dist/tex/latex/graphics/graphicx.sty" 1775415801 8118 43b99e52946c33a23f5f43b52d5cc5ec "" - "/usr/share/texmf-dist/tex/latex/graphics/keyval.sty" 1775415801 2671 d9941f4bf4750e9b0603c9a2ec54693b "" - "/usr/share/texmf-dist/tex/latex/graphics/mathcolor.ltx" 1775415801 2885 9c645d672ae17285bba324998918efd8 "" - "/usr/share/texmf-dist/tex/latex/graphics/trig.sty" 1775415801 4023 e66acf578d6b564c4670fb57ff336a7a "" - "/usr/share/texmf-dist/tex/latex/hycolor/hycolor.sty" 1775415801 17914 4c28a13fc3d975e6e81c9bea1d697276 "" - "/usr/share/texmf-dist/tex/latex/hyperref/hpdftex.def" 1775415801 48140 0d317d7fb0c7460a10b7b2713db57305 "" - "/usr/share/texmf-dist/tex/latex/hyperref/hyperref.sty" 1775415801 223349 c7928c099a8656537a829ba316c95536 "" - "/usr/share/texmf-dist/tex/latex/hyperref/nameref.sty" 1775415801 11459 697f11f6c439d25d39d2674b99566af4 "" - "/usr/share/texmf-dist/tex/latex/hyperref/pd1enc.def" 1775415801 14249 b94983bbccc8d5739c16cc91d1fd1c3b "" - "/usr/share/texmf-dist/tex/latex/hyperref/puenc.def" 1775415801 117118 2e3ba580751de5583beacf2e5fee69a9 "" - "/usr/share/texmf-dist/tex/latex/kvoptions/kvoptions.sty" 1775415801 22555 6d8e155cfef6d82c3d5c742fea7c992e "" - "/usr/share/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty" 1775415801 13815 760b0c02f691ea230f5359c4e1de23a7 "" - "/usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def" 1775415801 30662 bfd6e864f4ffc5018b0e2b6260c3181c "" - "/usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg" 1775415801 678 4792914a8f45be57bb98413425e4c7af "" - "/usr/share/texmf-dist/tex/latex/listings/listings.cfg" 1775415801 1865 73df61e45e2dfdc239ef37ab16d87d6a "" - "/usr/share/texmf-dist/tex/latex/listings/listings.sty" 1775415801 81627 6a9c17f89f356724d1c9813b7025f0c1 "" - "/usr/share/texmf-dist/tex/latex/listings/lstlang1.sty" 1775415801 206518 095934a0019dcba14af528744bf9b295 "" - "/usr/share/texmf-dist/tex/latex/listings/lstmisc.sty" 1775415801 77105 002e983b638eadbf04e580642335f689 "" - "/usr/share/texmf-dist/tex/latex/listings/lstpatch.sty" 1775415801 353 9024412f43e92cd5b21fe9ded82d0610 "" - "/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty" 1775415801 1090 bae35ef70b3168089ef166db3e66f5b2 "" - "/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty" 1775415801 373 00b204b1d7d095b892ad31a7494b0373 "" - "/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty" 1775415801 21013 f4ff83d25bb56552493b030f27c075ae "" - "/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty" 1775415801 989 c49c8ae06d96f8b15869da7428047b1e "" - "/usr/share/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty" 1775415801 339 c2e180022e3afdb99c7d0ea5ce469b7d "" - "/usr/share/texmf-dist/tex/latex/pgf/math/pgfmath.sty" 1775415801 306 c56a323ca5bf9242f54474ced10fca71 "" - "/usr/share/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty" 1775415801 443 8c872229db56122037e86bcda49e14f3 "" - "/usr/share/texmf-dist/tex/latex/pgf/utilities/pgffor.sty" 1775415801 348 ee405e64380c11319f0e249fed57e6c5 "" - "/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty" 1775415801 274 5ae372b7df79135d240456a1c6f2cf9a "" - "/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty" 1775415801 325 f9f16d12354225b7dd52a3321f085955 "" - "/usr/share/texmf-dist/tex/latex/refcount/refcount.sty" 1775415801 9878 9e94e8fa600d95f9c7731bb21dfb67a4 "" - "/usr/share/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty" 1775415801 9684 a33a14b82ce60d6e77cb9be689d79ee6 "" - "/usr/share/texmf-dist/tex/latex/tocloft/tocloft.sty" 1775415801 36103 3e78d14f0f4b1a30560fea5e04de805d "" - "/usr/share/texmf-dist/tex/latex/tools/array.sty" 1775415801 15651 9d7c62df82cb29a555c00550babfe364 "" - "/usr/share/texmf-dist/tex/latex/tools/enumerate.sty" 1775415801 3468 f21ceb3448a22fec45299f924e7fc48b "" - "/usr/share/texmf-dist/tex/latex/tools/tabularx.sty" 1775415801 7243 a2c17f18e2c9b702b84fad03d5f9c78b "" - "/usr/share/texmf-dist/tex/latex/url/url.sty" 1775415801 12796 8edb7d69a20b857904dd0ea757c14ec9 "" - "/usr/share/texmf-dist/tex/latex/vntex/t5cmr.fd" 1775415801 1333 ab1c3d512aa3d88df568aed3641db58f "" - "/usr/share/texmf-dist/tex/latex/vntex/t5cmss.fd" 1775415801 993 eca69743cf07d540f4f4c78c7b621a1c "" - "/usr/share/texmf-dist/tex/latex/vntex/t5cmtt.fd" 1775415801 860 ace2c897f6dd06f95e7b6314e005c728 "" - "/usr/share/texmf-dist/tex/latex/vntex/t5enc.def" 1775415801 21986 ccb3b8f7cc27fbd61b3daabbbb82ad3f "" - "/usr/share/texmf-dist/tex/latex/vntex/t5enc.dfu" 1775415801 13949 387dd4fa58aea5f873839c93430fffed "" - "/usr/share/texmf-dist/tex/latex/xcolor/xcolor.sty" 1775415801 55384 b454dec21c2d9f45ec0b793f0995b992 "" - "/usr/share/texmf-dist/web2c/texmf.cnf" 1775415801 43569 fd570f2fa160877d211e859f687312ba "" - "/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map" 1775824205 5416051 b497ca793fa673a5a7af8d7f07edf099 "" - "/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1775824169 2426821 af50642378b6ffd79d02dd2ab7d57d8d "" - "assets/Client_Init.png" 1783086839.99161 671360 0c83a21d2a28b3163da2c8554a7dbc91 "" - "assets/Client_running_2.png" 1783086864.58369 120407 aa7ee503896a7bd82a1dcf3e89478a71 "" - "assets/Server_Init.png" 1783086781.38743 15303 9106fc837bddc87f51a26694e3073609 "" - "assets/Statistics.png" 1783086879.30073 3183 48abd035f81bf2f7d9f9073b1673359d "" - "assets/client_waiting_stream.png" 1783087702.7724 8590 eac2136036e7d84a56fc517f1d0860d9 "" - "logohcmus.jpg" 1781619705.9001 97049 7298e6a7f00d000e22456c9977085835 "" - "report_template.aux" 1783087803.99299 4974 d825d5babdf3deb209f83a3651c6de2f "pdflatex" - "report_template.out" 1783087803.99488 3523 d8748c629b14ccb67acdd31e6984cfb9 "pdflatex" - "report_template.tex" 1783087801.53798 19427 43d174dfb37f69a415feb74027bf53ab "" - "report_template.toc" 1783087803.99488 1463 3ba4401a212cebbe3caa5bf3f0b22305 "pdflatex" - (generated) - "report_template.aux" - "report_template.log" - "report_template.out" - "report_template.pdf" - "report_template.toc" - (rewritten before read) diff --git a/doc/report_template.fls b/doc/report_template.fls deleted file mode 100644 index efbce13..0000000 --- a/doc/report_template.fls +++ /dev/null @@ -1,386 +0,0 @@ -PWD /home/phuc/codespace/video_streaming/doc -INPUT /usr/share/texmf-dist/web2c/texmf.cnf -INPUT /var/lib/texmf/web2c/pdftex/pdflatex.fmt -INPUT report_template.tex -OUTPUT report_template.log -INPUT /usr/share/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texmf-dist/tex/latex/base/size12.clo -INPUT /usr/share/texmf-dist/tex/latex/base/size12.clo -INPUT /usr/share/texmf-dist/tex/latex/base/size12.clo -INPUT /usr/share/texmf-dist/fonts/map/fontname/texfonts.map -INPUT /usr/share/texmf-dist/fonts/tfm/public/cm/cmr12.tfm -INPUT /usr/share/texmf-dist/tex/latex/base/inputenc.sty -INPUT /usr/share/texmf-dist/tex/latex/base/inputenc.sty -INPUT /usr/share/texmf-dist/tex/latex/base/fontenc.sty -INPUT /usr/share/texmf-dist/tex/latex/base/fontenc.sty -INPUT /usr/share/texmf-dist/tex/latex/vntex/t5enc.def -INPUT /usr/share/texmf-dist/tex/latex/vntex/t5enc.def -INPUT /usr/share/texmf-dist/tex/latex/vntex/t5enc.def -INPUT /usr/share/texmf-dist/tex/latex/vntex/t5enc.dfu -INPUT /usr/share/texmf-dist/tex/latex/vntex/t5enc.dfu -INPUT /usr/share/texmf-dist/tex/latex/vntex/t5enc.dfu -INPUT /usr/share/texmf-dist/tex/latex/vntex/t5cmr.fd -INPUT /usr/share/texmf-dist/tex/latex/vntex/t5cmr.fd -INPUT /usr/share/texmf-dist/tex/latex/vntex/t5cmr.fd -INPUT /usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnr12.tfm -INPUT /usr/share/texmf-dist/tex/generic/babel/babel.sty -INPUT /usr/share/texmf-dist/tex/generic/babel/babel.sty -INPUT /usr/share/texmf-dist/tex/generic/babel/txtbabel.def -INPUT /usr/share/texmf-dist/tex/generic/babel/locale/en/babel-english.tex -INPUT /usr/share/texmf-dist/tex/generic/babel/locale/en/babel-english.tex -INPUT /usr/share/texmf-dist/tex/generic/babel/locale/en/babel-english.tex -INPUT /usr/share/texmf-dist/tex/generic/babel/locale/en/babel-en.ini -INPUT /usr/share/texmf-dist/tex/generic/babel-english/english.ldf -INPUT /usr/share/texmf-dist/tex/generic/babel-english/english.ldf -INPUT /usr/share/texmf-dist/tex/generic/babel-english/english.ldf -INPUT /usr/share/texmf-dist/tex/latex/amsmath/amsmath.sty -INPUT /usr/share/texmf-dist/tex/latex/amsmath/amsmath.sty -INPUT /usr/share/texmf-dist/tex/latex/amsmath/amsopn.sty -INPUT /usr/share/texmf-dist/tex/latex/amsmath/amstext.sty -INPUT /usr/share/texmf-dist/tex/latex/amsmath/amstext.sty -INPUT /usr/share/texmf-dist/tex/latex/amsmath/amsgen.sty -INPUT /usr/share/texmf-dist/tex/latex/amsmath/amsgen.sty -INPUT /usr/share/texmf-dist/tex/latex/amsmath/amsbsy.sty -INPUT /usr/share/texmf-dist/tex/latex/amsmath/amsbsy.sty -INPUT /usr/share/texmf-dist/tex/latex/amsmath/amsopn.sty -INPUT /usr/share/texmf-dist/tex/latex/amscls/amsthm.sty -INPUT /usr/share/texmf-dist/tex/latex/amscls/amsthm.sty -INPUT /usr/share/texmf-dist/tex/latex/amsfonts/amssymb.sty -INPUT /usr/share/texmf-dist/tex/latex/amsfonts/amssymb.sty -INPUT /usr/share/texmf-dist/tex/latex/amsfonts/amsfonts.sty -INPUT /usr/share/texmf-dist/tex/latex/amsfonts/amsfonts.sty -INPUT /usr/share/texmf-dist/tex/latex/base/latexsym.sty -INPUT /usr/share/texmf-dist/tex/latex/base/latexsym.sty -INPUT /usr/share/texmf-dist/tex/latex/amsmath/amscd.sty -INPUT /usr/share/texmf-dist/tex/latex/amsmath/amscd.sty -INPUT /usr/share/texmf-dist/tex/latex/tools/enumerate.sty -INPUT /usr/share/texmf-dist/tex/latex/tools/enumerate.sty -INPUT /usr/share/texmf-dist/tex/latex/geometry/geometry.sty -INPUT /usr/share/texmf-dist/tex/latex/geometry/geometry.sty -INPUT /usr/share/texmf-dist/tex/latex/graphics/keyval.sty -INPUT /usr/share/texmf-dist/tex/latex/graphics/keyval.sty -INPUT /usr/share/texmf-dist/tex/generic/iftex/ifvtex.sty -INPUT /usr/share/texmf-dist/tex/generic/iftex/ifvtex.sty -INPUT /usr/share/texmf-dist/tex/generic/iftex/iftex.sty -INPUT /usr/share/texmf-dist/tex/generic/iftex/iftex.sty -INPUT /usr/share/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty -INPUT /usr/share/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty -INPUT /usr/share/texmf-dist/tex/latex/graphics/graphicx.sty -INPUT /usr/share/texmf-dist/tex/latex/graphics/graphicx.sty -INPUT /usr/share/texmf-dist/tex/latex/graphics/graphics.sty -INPUT /usr/share/texmf-dist/tex/latex/graphics/graphics.sty -INPUT /usr/share/texmf-dist/tex/latex/graphics/trig.sty -INPUT /usr/share/texmf-dist/tex/latex/graphics/trig.sty -INPUT /usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg -INPUT /usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg -INPUT /usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg -INPUT /usr/share/texmf-dist/tex/latex/graphics-def/pdftex.def -INPUT /usr/share/texmf-dist/tex/latex/graphics-def/pdftex.def -INPUT /usr/share/texmf-dist/tex/latex/graphics-def/pdftex.def -INPUT /usr/share/texmf-dist/tex/latex/xcolor/xcolor.sty -INPUT /usr/share/texmf-dist/tex/latex/xcolor/xcolor.sty -INPUT /usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg -INPUT /usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg -INPUT /usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg -INPUT /usr/share/texmf-dist/tex/latex/graphics/mathcolor.ltx -INPUT /usr/share/texmf-dist/tex/latex/graphics/mathcolor.ltx -INPUT /usr/share/texmf-dist/tex/latex/graphics/mathcolor.ltx -INPUT /usr/share/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty -INPUT /usr/share/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty -INPUT /usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty -INPUT /usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty -INPUT /usr/share/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty -INPUT /usr/share/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty -INPUT /usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def -INPUT /usr/share/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/pgf.revision.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/pgf.revision.tex -INPUT /usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty -INPUT /usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty -INPUT /usr/share/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty -INPUT /usr/share/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty -INPUT /usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfiltered.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg -INPUT /usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def -INPUT /usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def -INPUT /usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def -INPUT /usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/math/pgfint.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex -INPUT /usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty -INPUT /usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty -INPUT /usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty -INPUT /usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty -INPUT /usr/share/texmf-dist/tex/latex/pgf/utilities/pgffor.sty -INPUT /usr/share/texmf-dist/tex/latex/pgf/utilities/pgffor.sty -INPUT /usr/share/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty -INPUT /usr/share/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty -INPUT /usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex -INPUT /usr/share/texmf-dist/tex/latex/pgf/math/pgfmath.sty -INPUT /usr/share/texmf-dist/tex/latex/pgf/math/pgfmath.sty -INPUT /usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarytopaths.code.tex -INPUT /usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarytopaths.code.tex -INPUT /usr/share/texmf-dist/tex/latex/booktabs/booktabs.sty -INPUT /usr/share/texmf-dist/tex/latex/booktabs/booktabs.sty -INPUT /usr/share/texmf-dist/tex/latex/tools/array.sty -INPUT /usr/share/texmf-dist/tex/latex/tools/array.sty -INPUT /usr/share/texmf-dist/tex/latex/caption/caption.sty -INPUT /usr/share/texmf-dist/tex/latex/caption/caption.sty -INPUT /usr/share/texmf-dist/tex/latex/caption/caption3.sty -INPUT /usr/share/texmf-dist/tex/latex/caption/caption3.sty -INPUT /usr/share/texmf-dist/tex/latex/float/float.sty -INPUT /usr/share/texmf-dist/tex/latex/float/float.sty -INPUT /usr/share/texmf-dist/tex/latex/tools/tabularx.sty -INPUT /usr/share/texmf-dist/tex/latex/tools/tabularx.sty -INPUT /usr/share/texmf-dist/tex/latex/tocloft/tocloft.sty -INPUT /usr/share/texmf-dist/tex/latex/tocloft/tocloft.sty -INPUT /usr/share/texmf-dist/tex/latex/listings/listings.sty -INPUT /usr/share/texmf-dist/tex/latex/listings/listings.sty -INPUT /usr/share/texmf-dist/tex/latex/listings/lstpatch.sty -INPUT /usr/share/texmf-dist/tex/latex/listings/lstpatch.sty -INPUT /usr/share/texmf-dist/tex/latex/listings/lstpatch.sty -INPUT /usr/share/texmf-dist/tex/latex/listings/lstmisc.sty -INPUT /usr/share/texmf-dist/tex/latex/listings/lstmisc.sty -INPUT /usr/share/texmf-dist/tex/latex/listings/lstmisc.sty -INPUT /usr/share/texmf-dist/tex/latex/listings/listings.cfg -INPUT /usr/share/texmf-dist/tex/latex/listings/listings.cfg -INPUT /usr/share/texmf-dist/tex/latex/listings/listings.cfg -INPUT /usr/share/texmf-dist/tex/latex/hyperref/hyperref.sty -INPUT /usr/share/texmf-dist/tex/latex/hyperref/hyperref.sty -INPUT /usr/share/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty -INPUT /usr/share/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty -INPUT /usr/share/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty -INPUT /usr/share/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty -INPUT /usr/share/texmf-dist/tex/generic/pdfescape/pdfescape.sty -INPUT /usr/share/texmf-dist/tex/generic/pdfescape/pdfescape.sty -INPUT /usr/share/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -INPUT /usr/share/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -INPUT /usr/share/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty -INPUT /usr/share/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty -INPUT /usr/share/texmf-dist/tex/generic/infwarerr/infwarerr.sty -INPUT /usr/share/texmf-dist/tex/generic/infwarerr/infwarerr.sty -INPUT /usr/share/texmf-dist/tex/latex/hycolor/hycolor.sty -INPUT /usr/share/texmf-dist/tex/latex/hycolor/hycolor.sty -INPUT /usr/share/texmf-dist/tex/latex/hyperref/nameref.sty -INPUT /usr/share/texmf-dist/tex/latex/hyperref/nameref.sty -INPUT /usr/share/texmf-dist/tex/latex/refcount/refcount.sty -INPUT /usr/share/texmf-dist/tex/latex/refcount/refcount.sty -INPUT /usr/share/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty -INPUT /usr/share/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty -INPUT /usr/share/texmf-dist/tex/latex/kvoptions/kvoptions.sty -INPUT /usr/share/texmf-dist/tex/latex/kvoptions/kvoptions.sty -INPUT /usr/share/texmf-dist/tex/latex/etoolbox/etoolbox.sty -INPUT /usr/share/texmf-dist/tex/latex/etoolbox/etoolbox.sty -INPUT /usr/share/texmf-dist/tex/generic/stringenc/stringenc.sty -INPUT /usr/share/texmf-dist/tex/generic/stringenc/stringenc.sty -INPUT /usr/share/texmf-dist/tex/latex/hyperref/pd1enc.def -INPUT /usr/share/texmf-dist/tex/latex/hyperref/pd1enc.def -INPUT /usr/share/texmf-dist/tex/latex/hyperref/pd1enc.def -INPUT /usr/share/texmf-dist/tex/generic/intcalc/intcalc.sty -INPUT /usr/share/texmf-dist/tex/generic/intcalc/intcalc.sty -INPUT /usr/share/texmf-dist/tex/latex/hyperref/puenc.def -INPUT /usr/share/texmf-dist/tex/latex/hyperref/puenc.def -INPUT /usr/share/texmf-dist/tex/latex/hyperref/puenc.def -INPUT /usr/share/texmf-dist/tex/latex/url/url.sty -INPUT /usr/share/texmf-dist/tex/latex/url/url.sty -INPUT /usr/share/texmf-dist/tex/generic/bitset/bitset.sty -INPUT /usr/share/texmf-dist/tex/generic/bitset/bitset.sty -INPUT /usr/share/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty -INPUT /usr/share/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty -INPUT /usr/share/texmf-dist/tex/latex/hyperref/hpdftex.def -INPUT /usr/share/texmf-dist/tex/latex/hyperref/hpdftex.def -INPUT /usr/share/texmf-dist/tex/latex/hyperref/hpdftex.def -INPUT /usr/share/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty -INPUT /usr/share/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty -INPUT /usr/share/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty -INPUT /usr/share/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty -INPUT /usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnr12.tfm -INPUT /usr/share/texmf-dist/tex/latex/vntex/t5cmss.fd -INPUT /usr/share/texmf-dist/tex/latex/vntex/t5cmss.fd -INPUT /usr/share/texmf-dist/tex/latex/vntex/t5cmss.fd -INPUT /usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnss12.tfm -INPUT /usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def -INPUT /usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def -INPUT ./report_template.aux -INPUT ./report_template.aux -INPUT report_template.aux -OUTPUT report_template.aux -INPUT /usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnss12.tfm -INPUT /usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii -INPUT /usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii -INPUT /usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii -INPUT /usr/share/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty -INPUT /usr/share/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty -INPUT /usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg -INPUT /usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg -INPUT /usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg -INPUT /usr/share/texmf-dist/tex/latex/graphics/color.sty -INPUT ./report_template.out -INPUT ./report_template.out -INPUT report_template.out -INPUT report_template.out -OUTPUT report_template.pdf -INPUT ./report_template.out -INPUT ./report_template.out -OUTPUT report_template.out -INPUT /usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnss12.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnssbx10.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnssbx10.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnss17.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnssbx10.tfm -INPUT ./logohcmus.jpg -INPUT ./logohcmus.jpg -INPUT ./logohcmus.jpg -INPUT ./logohcmus.jpg -INPUT ./logohcmus.jpg -INPUT /usr/share/texmf-dist/fonts/tfm/public/cm/cmr8.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/cm/cmr6.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/cm/cmmi8.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/cm/cmmi6.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/cm/cmsy8.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/cm/cmsy6.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/cm/cmex10.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex8.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm -INPUT /usr/share/texmf-dist/tex/latex/amsfonts/umsa.fd -INPUT /usr/share/texmf-dist/tex/latex/amsfonts/umsa.fd -INPUT /usr/share/texmf-dist/tex/latex/amsfonts/umsa.fd -INPUT /usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam7.tfm -INPUT /usr/share/texmf-dist/tex/latex/amsfonts/umsb.fd -INPUT /usr/share/texmf-dist/tex/latex/amsfonts/umsb.fd -INPUT /usr/share/texmf-dist/tex/latex/amsfonts/umsb.fd -INPUT /usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm7.tfm -INPUT /usr/share/texmf-dist/tex/latex/base/ulasy.fd -INPUT /usr/share/texmf-dist/tex/latex/base/ulasy.fd -INPUT /usr/share/texmf-dist/tex/latex/base/ulasy.fd -INPUT /usr/share/texmf-dist/fonts/tfm/public/latex-fonts/lasy10.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/latex-fonts/lasy8.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/latex-fonts/lasy6.tfm -INPUT /var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map -INPUT /usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnss17.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnssbx10.tfm -INPUT ./report_template.toc -INPUT ./report_template.toc -INPUT report_template.toc -INPUT /usr/share/texmf-dist/tex/latex/vntex/t5cmtt.fd -INPUT /usr/share/texmf-dist/tex/latex/vntex/t5cmtt.fd -INPUT /usr/share/texmf-dist/tex/latex/vntex/t5cmtt.fd -INPUT /usr/share/texmf-dist/fonts/tfm/vntex/vnr/vntt12.tfm -OUTPUT report_template.toc -INPUT /usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnssi12.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/jknappen/ec/tcss1200.tfm -INPUT /usr/share/texmf-dist/fonts/enc/dvips/cm-super/cm-super-ts1.enc -INPUT /usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnss8.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnss8.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/vntex/vnr/vntt12.tfm -INPUT /usr/share/texmf-dist/tex/latex/listings/lstlang1.sty -INPUT /usr/share/texmf-dist/tex/latex/listings/lstlang1.sty -INPUT /usr/share/texmf-dist/tex/latex/listings/lstlang1.sty -INPUT /usr/share/texmf-dist/fonts/tfm/vntex/vnr/vntt10.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/vntex/vnr/vnss10.tfm -INPUT ./assets/Server_Init.png -INPUT ./assets/Server_Init.png -INPUT ./assets/Server_Init.png -INPUT ./assets/Server_Init.png -INPUT ./assets/Server_Init.png -INPUT ./assets/client_waiting_stream.png -INPUT ./assets/client_waiting_stream.png -INPUT ./assets/client_waiting_stream.png -INPUT ./assets/client_waiting_stream.png -INPUT ./assets/client_waiting_stream.png -INPUT ./assets/Client_Init.png -INPUT ./assets/Client_Init.png -INPUT ./assets/Client_Init.png -INPUT ./assets/Client_Init.png -INPUT ./assets/Client_Init.png -INPUT ./assets/Client_running_2.png -INPUT ./assets/Client_running_2.png -INPUT ./assets/Client_running_2.png -INPUT ./assets/Client_running_2.png -INPUT ./assets/Client_running_2.png -INPUT ./assets/Statistics.png -INPUT ./assets/Statistics.png -INPUT ./assets/Statistics.png -INPUT ./assets/Statistics.png -INPUT ./assets/Statistics.png -INPUT report_template.aux -INPUT ./report_template.out -INPUT ./report_template.out -INPUT /usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi12.pfb -INPUT /usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmr12.pfb -INPUT /usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb -INPUT /usr/share/texmf-dist/fonts/type1/public/cm-super/sfss1200.pfb -INPUT /usr/share/texmf-dist/fonts/type1/vntex/vnr/vnss12.pfb -INPUT /usr/share/texmf-dist/fonts/type1/vntex/vnr/vnss8.pfb -INPUT /usr/share/texmf-dist/fonts/type1/vntex/vnr/vnssbx10.pfb -INPUT /usr/share/texmf-dist/fonts/type1/vntex/vnr/vnssi12.pfb -INPUT /usr/share/texmf-dist/fonts/type1/vntex/vnr/vntt10.pfb -INPUT /usr/share/texmf-dist/fonts/type1/vntex/vnr/vntt12.pfb diff --git a/doc/report_template.log b/doc/report_template.log deleted file mode 100644 index 7e23089..0000000 --- a/doc/report_template.log +++ /dev/null @@ -1,1262 +0,0 @@ -This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux) (preloaded format=pdflatex 2026.4.10) 3 JUL 2026 21:10 -entering extended mode - restricted \write18 enabled. - %&-line parsing enabled. -**report_template.tex -(./report_template.tex -LaTeX2e <2025-11-01> -L3 programming layer <2026-01-19> -(/usr/share/texmf-dist/tex/latex/base/report.cls -Document Class: report 2025/01/22 v1.4n Standard LaTeX document class -(/usr/share/texmf-dist/tex/latex/base/size12.clo -File: size12.clo 2025/01/22 v1.4n Standard LaTeX file (size option) -) -\c@part=\count275 -\c@chapter=\count276 -\c@section=\count277 -\c@subsection=\count278 -\c@subsubsection=\count279 -\c@paragraph=\count280 -\c@subparagraph=\count281 -\c@figure=\count282 -\c@table=\count283 -\abovecaptionskip=\skip49 -\belowcaptionskip=\skip50 -\bibindent=\dimen148 -) -(/usr/share/texmf-dist/tex/latex/base/inputenc.sty -Package: inputenc 2024/02/08 v1.3d Input encoding file -\inpenc@prehook=\toks17 -\inpenc@posthook=\toks18 -) -(/usr/share/texmf-dist/tex/latex/base/fontenc.sty -Package: fontenc 2025/07/18 v2.1d Standard LaTeX package - -(/usr/share/texmf-dist/tex/latex/vntex/t5enc.def -File: t5enc.def 2006/11/21 v1.4 Vietnamese T5 encoding -Now handling font encoding T5 ... -... processing UTF-8 mapping file for font encoding T5 - -(/usr/share/texmf-dist/tex/latex/vntex/t5enc.dfu -File: t5enc.dfu 2006/08/19 v1.1 UTF8 support for Vietnamese - defining Unicode char U+00AB (decimal 171) - defining Unicode char U+00BB (decimal 187) - defining Unicode char U+00C0 (decimal 192) - defining Unicode char U+00C1 (decimal 193) - defining Unicode char U+00C2 (decimal 194) - defining Unicode char U+00C3 (decimal 195) - defining Unicode char U+00C8 (decimal 200) - defining Unicode char U+00C9 (decimal 201) - defining Unicode char U+00CA (decimal 202) - defining Unicode char U+00CC (decimal 204) - defining Unicode char U+00CD (decimal 205) - defining Unicode char U+00D2 (decimal 210) - defining Unicode char U+00D3 (decimal 211) - defining Unicode char U+00D4 (decimal 212) - defining Unicode char U+00D5 (decimal 213) - defining Unicode char U+00D9 (decimal 217) - defining Unicode char U+00DA (decimal 218) - defining Unicode char U+00DD (decimal 221) - defining Unicode char U+00E0 (decimal 224) - defining Unicode char U+00E1 (decimal 225) - defining Unicode char U+00E2 (decimal 226) - defining Unicode char U+00E3 (decimal 227) - defining Unicode char U+00E8 (decimal 232) - defining Unicode char U+00E9 (decimal 233) - defining Unicode char U+00EA (decimal 234) - defining Unicode char U+00EC (decimal 236) - defining Unicode char U+00ED (decimal 237) - defining Unicode char U+00F2 (decimal 242) - defining Unicode char U+00F3 (decimal 243) - defining Unicode char U+00F4 (decimal 244) - defining Unicode char U+00F5 (decimal 245) - defining Unicode char U+00F9 (decimal 249) - defining Unicode char U+00FA (decimal 250) - defining Unicode char U+00FD (decimal 253) - defining Unicode char U+0102 (decimal 258) - defining Unicode char U+0103 (decimal 259) - defining Unicode char U+0110 (decimal 272) - defining Unicode char U+0111 (decimal 273) - defining Unicode char U+0128 (decimal 296) - defining Unicode char U+0129 (decimal 297) - defining Unicode char U+0131 (decimal 305) - defining Unicode char U+0168 (decimal 360) - defining Unicode char U+0169 (decimal 361) - defining Unicode char U+01A0 (decimal 416) - defining Unicode char U+01A1 (decimal 417) - defining Unicode char U+01AF (decimal 431) - defining Unicode char U+01B0 (decimal 432) - defining Unicode char U+1EA0 (decimal 7840) - defining Unicode char U+1EA1 (decimal 7841) - defining Unicode char U+1EA2 (decimal 7842) - defining Unicode char U+1EA3 (decimal 7843) - defining Unicode char U+1EA4 (decimal 7844) - defining Unicode char U+1EA5 (decimal 7845) - defining Unicode char U+1EA6 (decimal 7846) - defining Unicode char U+1EA7 (decimal 7847) - defining Unicode char U+1EA8 (decimal 7848) - defining Unicode char U+1EA9 (decimal 7849) - defining Unicode char U+1EAA (decimal 7850) - defining Unicode char U+1EAB (decimal 7851) - defining Unicode char U+1EAC (decimal 7852) - defining Unicode char U+1EAD (decimal 7853) - defining Unicode char U+1EAE (decimal 7854) - defining Unicode char U+1EAF (decimal 7855) - defining Unicode char U+1EB0 (decimal 7856) - defining Unicode char U+1EB1 (decimal 7857) - defining Unicode char U+1EB2 (decimal 7858) - defining Unicode char U+1EB3 (decimal 7859) - defining Unicode char U+1EB4 (decimal 7860) - defining Unicode char U+1EB5 (decimal 7861) - defining Unicode char U+1EB6 (decimal 7862) - defining Unicode char U+1EB7 (decimal 7863) - defining Unicode char U+1EB8 (decimal 7864) - defining Unicode char U+1EB9 (decimal 7865) - defining Unicode char U+1EBA (decimal 7866) - defining Unicode char U+1EBB (decimal 7867) - defining Unicode char U+1EBC (decimal 7868) - defining Unicode char U+1EBD (decimal 7869) - defining Unicode char U+1EBE (decimal 7870) - defining Unicode char U+1EBF (decimal 7871) - defining Unicode char U+1EC0 (decimal 7872) - defining Unicode char U+1EC1 (decimal 7873) - defining Unicode char U+1EC2 (decimal 7874) - defining Unicode char U+1EC3 (decimal 7875) - defining Unicode char U+1EC4 (decimal 7876) - defining Unicode char U+1EC5 (decimal 7877) - defining Unicode char U+1EC6 (decimal 7878) - defining Unicode char U+1EC7 (decimal 7879) - defining Unicode char U+1EC8 (decimal 7880) - defining Unicode char U+1EC9 (decimal 7881) - defining Unicode char U+1ECA (decimal 7882) - defining Unicode char U+1ECB (decimal 7883) - defining Unicode char U+1ECC (decimal 7884) - defining Unicode char U+1ECD (decimal 7885) - defining Unicode char U+1ECE (decimal 7886) - defining Unicode char U+1ECF (decimal 7887) - defining Unicode char U+1ED0 (decimal 7888) - defining Unicode char U+1ED1 (decimal 7889) - defining Unicode char U+1ED2 (decimal 7890) - defining Unicode char U+1ED3 (decimal 7891) - defining Unicode char U+1ED4 (decimal 7892) - defining Unicode char U+1ED5 (decimal 7893) - defining Unicode char U+1ED6 (decimal 7894) - defining Unicode char U+1ED7 (decimal 7895) - defining Unicode char U+1ED8 (decimal 7896) - defining Unicode char U+1ED9 (decimal 7897) - defining Unicode char U+1EDA (decimal 7898) - defining Unicode char U+1EDB (decimal 7899) - defining Unicode char U+1EDC (decimal 7900) - defining Unicode char U+1EDD (decimal 7901) - defining Unicode char U+1EDE (decimal 7902) - defining Unicode char U+1EDF (decimal 7903) - defining Unicode char U+1EE0 (decimal 7904) - defining Unicode char U+1EE1 (decimal 7905) - defining Unicode char U+1EE2 (decimal 7906) - defining Unicode char U+1EE3 (decimal 7907) - defining Unicode char U+1EE4 (decimal 7908) - defining Unicode char U+1EE5 (decimal 7909) - defining Unicode char U+1EE6 (decimal 7910) - defining Unicode char U+1EE7 (decimal 7911) - defining Unicode char U+1EE8 (decimal 7912) - defining Unicode char U+1EE9 (decimal 7913) - defining Unicode char U+1EEA (decimal 7914) - defining Unicode char U+1EEB (decimal 7915) - defining Unicode char U+1EEC (decimal 7916) - defining Unicode char U+1EED (decimal 7917) - defining Unicode char U+1EEE (decimal 7918) - defining Unicode char U+1EEF (decimal 7919) - defining Unicode char U+1EF0 (decimal 7920) - defining Unicode char U+1EF1 (decimal 7921) - defining Unicode char U+1EF2 (decimal 7922) - defining Unicode char U+1EF3 (decimal 7923) - defining Unicode char U+1EF4 (decimal 7924) - defining Unicode char U+1EF5 (decimal 7925) - defining Unicode char U+1EF6 (decimal 7926) - defining Unicode char U+1EF7 (decimal 7927) - defining Unicode char U+1EF8 (decimal 7928) - defining Unicode char U+1EF9 (decimal 7929) - defining Unicode char U+200C (decimal 8204) - defining Unicode char U+2013 (decimal 8211) - defining Unicode char U+2014 (decimal 8212) - defining Unicode char U+2018 (decimal 8216) - defining Unicode char U+2019 (decimal 8217) - defining Unicode char U+201A (decimal 8218) - defining Unicode char U+201C (decimal 8220) - defining Unicode char U+201D (decimal 8221) - defining Unicode char U+201E (decimal 8222) - defining Unicode char U+2030 (decimal 8240) - defining Unicode char U+2031 (decimal 8241) - defining Unicode char U+2039 (decimal 8249) - defining Unicode char U+203A (decimal 8250) - defining Unicode char U+2423 (decimal 9251) -)) -LaTeX Font Info: Trying to load font information for T5+cmr on input line 11 -6. - -(/usr/share/texmf-dist/tex/latex/vntex/t5cmr.fd -File: t5cmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions -)) -(/usr/share/texmf-dist/tex/generic/babel/babel.sty -Package: babel 2026/02/14 v26.3 The multilingual framework for LuaLaTeX, pdfLaT -eX and XeLaTeX -\babel@savecnt=\count284 -LaTeX Encoding Info: Redeclaring text command \ij (encoding OT1) on input li -ne 2078. -LaTeX Encoding Info: Redeclaring text command \IJ (encoding OT1) on input li -ne 2080. -LaTeX Encoding Info: Redeclaring text command \ij (encoding T1) on input lin -e 2082. -LaTeX Encoding Info: Redeclaring text command \IJ (encoding T1) on input lin -e 2083. -LaTeX Encoding Info: Ignoring declaration for text command \ij (encoding ?) -on input line 2084. -LaTeX Encoding Info: Ignoring declaration for text command \IJ (encoding ?) -on input line 2086. -LaTeX Encoding Info: Ignoring declaration for text command \SS (encoding ?) -on input line 2111. -\U@D=\dimen149 -\l@unhyphenated=\language28 - -(/usr/share/texmf-dist/tex/generic/babel/txtbabel.def) -\bbl@readstream=\read2 -\bbl@dirlevel=\count285 - -(/usr/share/texmf-dist/tex/generic/babel/locale/en/babel-english.tex) -Package babel Info: Importing font and identification data for english -(babel) from babel-en.ini. Reported on input line 4330. - -(/usr/share/texmf-dist/tex/generic/babel-english/english.ldf -Language: english 2017/06/06 v3.3r English support from the babel system -Package babel Info: Hyphen rules for 'british' set to \l@english -(babel) (\language0). Reported on input line 82. -Package babel Info: Hyphen rules for 'UKenglish' set to \l@english -(babel) (\language0). Reported on input line 83. -Package babel Info: Hyphen rules for 'canadian' set to \l@english -(babel) (\language0). Reported on input line 102. -Package babel Info: Hyphen rules for 'australian' set to \l@english -(babel) (\language0). Reported on input line 105. -Package babel Info: Hyphen rules for 'newzealand' set to \l@english -(babel) (\language0). Reported on input line 108. -)) -(/usr/share/texmf-dist/tex/latex/amsmath/amsmath.sty -Package: amsmath 2025/07/09 v2.17z AMS math features -\@mathmargin=\skip51 - -For additional information on amsmath, use the `?' option. -(/usr/share/texmf-dist/tex/latex/amsmath/amstext.sty -Package: amstext 2024/11/17 v2.01 AMS text - -(/usr/share/texmf-dist/tex/latex/amsmath/amsgen.sty -File: amsgen.sty 1999/11/30 v2.0 generic functions -\@emptytoks=\toks19 -\ex@=\dimen150 -)) -(/usr/share/texmf-dist/tex/latex/amsmath/amsbsy.sty -Package: amsbsy 1999/11/29 v1.2d Bold Symbols -\pmbraise@=\dimen151 -) -(/usr/share/texmf-dist/tex/latex/amsmath/amsopn.sty -Package: amsopn 2022/04/08 v2.04 operator names -) -\inf@bad=\count286 -LaTeX Info: Redefining \frac on input line 233. -\uproot@=\count287 -\leftroot@=\count288 -LaTeX Info: Redefining \overline on input line 398. -LaTeX Info: Redefining \colon on input line 409. -\classnum@=\count289 -\DOTSCASE@=\count290 -LaTeX Info: Redefining \ldots on input line 495. -LaTeX Info: Redefining \dots on input line 498. -LaTeX Info: Redefining \cdots on input line 619. -\Mathstrutbox@=\box53 -\strutbox@=\box54 -LaTeX Info: Redefining \big on input line 721. -LaTeX Info: Redefining \Big on input line 722. -LaTeX Info: Redefining \bigg on input line 723. -LaTeX Info: Redefining \Bigg on input line 724. -\big@size=\dimen152 -LaTeX Font Info: Redeclaring font encoding OML on input line 742. -LaTeX Font Info: Redeclaring font encoding OMS on input line 743. -\macc@depth=\count291 -LaTeX Info: Redefining \bmod on input line 904. -LaTeX Info: Redefining \pmod on input line 909. -LaTeX Info: Redefining \smash on input line 939. -LaTeX Info: Redefining \relbar on input line 969. -LaTeX Info: Redefining \Relbar on input line 970. -\c@MaxMatrixCols=\count292 -\dotsspace@=\muskip17 -\c@parentequation=\count293 -\dspbrk@lvl=\count294 -\tag@help=\toks20 -\row@=\count295 -\column@=\count296 -\maxfields@=\count297 -\andhelp@=\toks21 -\eqnshift@=\dimen153 -\alignsep@=\dimen154 -\tagshift@=\dimen155 -\tagwidth@=\dimen156 -\totwidth@=\dimen157 -\lineht@=\dimen158 -\@envbody=\toks22 -\multlinegap=\skip52 -\multlinetaggap=\skip53 -\mathdisplay@stack=\toks23 -LaTeX Info: Redefining \[ on input line 2950. -LaTeX Info: Redefining \] on input line 2951. -) -(/usr/share/texmf-dist/tex/latex/amscls/amsthm.sty -Package: amsthm 2020/05/29 v2.20.6 -\thm@style=\toks24 -\thm@bodyfont=\toks25 -\thm@headfont=\toks26 -\thm@notefont=\toks27 -\thm@headpunct=\toks28 -\thm@preskip=\skip54 -\thm@postskip=\skip55 -\thm@headsep=\skip56 -\dth@everypar=\toks29 -) -(/usr/share/texmf-dist/tex/latex/amsfonts/amssymb.sty -Package: amssymb 2013/01/14 v3.01 AMS font symbols - -(/usr/share/texmf-dist/tex/latex/amsfonts/amsfonts.sty -Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support -\symAMSa=\mathgroup4 -\symAMSb=\mathgroup5 -LaTeX Font Info: Redeclaring math symbol \hbar on input line 98. -LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' -(Font) U/euf/m/n --> U/euf/b/n on input line 106. -)) -(/usr/share/texmf-dist/tex/latex/base/latexsym.sty -Package: latexsym 1998/08/17 v2.2e Standard LaTeX package (lasy symbols) -\symlasy=\mathgroup6 -LaTeX Font Info: Overwriting symbol font `lasy' in version `bold' -(Font) U/lasy/m/n --> U/lasy/b/n on input line 52. -) -(/usr/share/texmf-dist/tex/latex/amsmath/amscd.sty -Package: amscd 2017/04/14 v2.1 AMS Commutative Diagrams -\athelp@=\toks30 -\minaw@=\dimen159 -\bigaw@=\dimen160 -\minCDarrowwidth=\dimen161 -) -(/usr/share/texmf-dist/tex/latex/tools/enumerate.sty -Package: enumerate 2023/07/04 v3.00 enumerate extensions (DPC) -\@enLab=\toks31 -) -(/usr/share/texmf-dist/tex/latex/geometry/geometry.sty -Package: geometry 2020/01/02 v5.9 Page Geometry - -(/usr/share/texmf-dist/tex/latex/graphics/keyval.sty -Package: keyval 2022/05/29 v1.15 key=value parser (DPC) -\KV@toks@=\toks32 -) -(/usr/share/texmf-dist/tex/generic/iftex/ifvtex.sty -Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead. - -(/usr/share/texmf-dist/tex/generic/iftex/iftex.sty -Package: iftex 2024/12/12 v1.0g TeX engine tests -)) -\Gm@cnth=\count298 -\Gm@cntv=\count299 -\c@Gm@tempcnt=\count300 -\Gm@bindingoffset=\dimen162 -\Gm@wd@mp=\dimen163 -\Gm@odd@mp=\dimen164 -\Gm@even@mp=\dimen165 -\Gm@layoutwidth=\dimen166 -\Gm@layoutheight=\dimen167 -\Gm@layouthoffset=\dimen168 -\Gm@layoutvoffset=\dimen169 -\Gm@dimlist=\toks33 -) -(/usr/share/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty -Package: fancyhdr 2025/02/07 v5.2 Extensive control of page headers and footers - -\f@nch@headwidth=\skip57 -\f@nch@offset@elh=\skip58 -\f@nch@offset@erh=\skip59 -\f@nch@offset@olh=\skip60 -\f@nch@offset@orh=\skip61 -\f@nch@offset@elf=\skip62 -\f@nch@offset@erf=\skip63 -\f@nch@offset@olf=\skip64 -\f@nch@offset@orf=\skip65 -\f@nch@height=\skip66 -\f@nch@footalignment=\skip67 -\f@nch@widthL=\skip68 -\f@nch@widthC=\skip69 -\f@nch@widthR=\skip70 -\@temptokenb=\toks34 -) -(/usr/share/texmf-dist/tex/latex/graphics/graphicx.sty -Package: graphicx 2024/12/31 v1.2e Enhanced LaTeX Graphics (DPC,SPQR) - -(/usr/share/texmf-dist/tex/latex/graphics/graphics.sty -Package: graphics 2024/08/06 v1.4g Standard LaTeX Graphics (DPC,SPQR) - -(/usr/share/texmf-dist/tex/latex/graphics/trig.sty -Package: trig 2023/12/02 v1.11 sin cos tan (DPC) -) -(/usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg -File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration -) -Package graphics Info: Driver file: pdftex.def on input line 106. - -(/usr/share/texmf-dist/tex/latex/graphics-def/pdftex.def -File: pdftex.def 2025/09/29 v1.2d Graphics/color driver for pdftex -)) -\Gin@req@height=\dimen170 -\Gin@req@width=\dimen171 -) -(/usr/share/texmf-dist/tex/latex/xcolor/xcolor.sty -Package: xcolor 2024/09/29 v3.02 LaTeX color extensions (UK) - -(/usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg -File: color.cfg 2016/01/02 v1.6 sample color configuration -) -Package xcolor Info: Driver file: pdftex.def on input line 274. - -(/usr/share/texmf-dist/tex/latex/graphics/mathcolor.ltx) -Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1349. -Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1353. -Package xcolor Info: Model `RGB' extended on input line 1365. -Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1367. -Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1368. -Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1369. -Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1370. -Package xcolor Info: Model `Gray' substituted by `gray' on input line 1371. -Package xcolor Info: Model `wave' substituted by `hsb' on input line 1372. -) -(/usr/share/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty -(/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty -(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty -(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex -\pgfutil@everybye=\toks35 -\pgfutil@tempdima=\dimen172 -\pgfutil@tempdimb=\dimen173 -) -(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def -\pgfutil@abb=\box55 -) -(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex -(/usr/share/texmf-dist/tex/generic/pgf/pgf.revision.tex) -Package: pgfrcs 2025-08-29 v3.1.11a (3.1.11a) -)) -Package: pgf 2025-08-29 v3.1.11a (3.1.11a) - -(/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty -(/usr/share/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty -(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex -Package: pgfsys 2025-08-29 v3.1.11a (3.1.11a) - -(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex -\pgfkeys@pathtoks=\toks36 -\pgfkeys@temptoks=\toks37 - -(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfiltered.code.te -x -\pgfkeys@tmptoks=\toks38 -)) -\pgf@x=\dimen174 -\pgf@y=\dimen175 -\pgf@xa=\dimen176 -\pgf@ya=\dimen177 -\pgf@xb=\dimen178 -\pgf@yb=\dimen179 -\pgf@xc=\dimen180 -\pgf@yc=\dimen181 -\pgf@xd=\dimen182 -\pgf@yd=\dimen183 -\w@pgf@writea=\write3 -\r@pgf@reada=\read3 -\c@pgf@counta=\count301 -\c@pgf@countb=\count302 -\c@pgf@countc=\count303 -\c@pgf@countd=\count304 -\t@pgf@toka=\toks39 -\t@pgf@tokb=\toks40 -\t@pgf@tokc=\toks41 -\pgf@sys@id@count=\count305 - (/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg -File: pgf.cfg 2025-08-29 v3.1.11a (3.1.11a) -) -Driver file for pgf: pgfsys-pdftex.def - -(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def -File: pgfsys-pdftex.def 2025-08-29 v3.1.11a (3.1.11a) - -(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def -File: pgfsys-common-pdf.def 2025-08-29 v3.1.11a (3.1.11a) -))) -(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex -File: pgfsyssoftpath.code.tex 2025-08-29 v3.1.11a (3.1.11a) -\pgfsyssoftpath@smallbuffer@items=\count306 -\pgfsyssoftpath@bigbuffer@items=\count307 -) -(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex -File: pgfsysprotocol.code.tex 2025-08-29 v3.1.11a (3.1.11a) -)) -(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex -Package: pgfcore 2025-08-29 v3.1.11a (3.1.11a) - -(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex -(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex) -(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex -\pgfmath@dimen=\dimen184 -\pgfmath@count=\count308 -\pgfmath@box=\box56 -\pgfmath@toks=\toks42 -\pgfmath@stack@operand=\toks43 -\pgfmath@stack@operation=\toks44 -) -(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex) -(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex) -(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code -.tex) -(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex) -(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.te -x) (/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex) -(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex) -(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex) -(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics -.code.tex) (/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex) -(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex -\c@pgfmathroundto@lastzeros=\count309 -)) -(/usr/share/texmf-dist/tex/generic/pgf/math/pgfint.code.tex) -(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex -File: pgfcorepoints.code.tex 2025-08-29 v3.1.11a (3.1.11a) -\pgf@picminx=\dimen185 -\pgf@picmaxx=\dimen186 -\pgf@picminy=\dimen187 -\pgf@picmaxy=\dimen188 -\pgf@pathminx=\dimen189 -\pgf@pathmaxx=\dimen190 -\pgf@pathminy=\dimen191 -\pgf@pathmaxy=\dimen192 -\pgf@xx=\dimen193 -\pgf@xy=\dimen194 -\pgf@yx=\dimen195 -\pgf@yy=\dimen196 -\pgf@zx=\dimen197 -\pgf@zy=\dimen198 -) -(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex -File: pgfcorepathconstruct.code.tex 2025-08-29 v3.1.11a (3.1.11a) -\pgf@path@lastx=\dimen199 -\pgf@path@lasty=\dimen256 -) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex -File: pgfcorepathusage.code.tex 2025-08-29 v3.1.11a (3.1.11a) -\pgf@shorten@end@additional=\dimen257 -\pgf@shorten@start@additional=\dimen258 -) -(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex -File: pgfcorescopes.code.tex 2025-08-29 v3.1.11a (3.1.11a) -\pgfpic=\box57 -\pgf@hbox=\box58 -\pgf@layerbox@main=\box59 -\pgf@picture@serial@count=\count310 -) -(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex -File: pgfcoregraphicstate.code.tex 2025-08-29 v3.1.11a (3.1.11a) -\pgflinewidth=\dimen259 -) -(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.t -ex -File: pgfcoretransformations.code.tex 2025-08-29 v3.1.11a (3.1.11a) -\pgf@pt@x=\dimen260 -\pgf@pt@y=\dimen261 -\pgf@pt@temp=\dimen262 -) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex -File: pgfcorequick.code.tex 2025-08-29 v3.1.11a (3.1.11a) -) -(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex -File: pgfcoreobjects.code.tex 2025-08-29 v3.1.11a (3.1.11a) -) -(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.te -x -File: pgfcorepathprocessing.code.tex 2025-08-29 v3.1.11a (3.1.11a) -) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex -File: pgfcorearrows.code.tex 2025-08-29 v3.1.11a (3.1.11a) -\pgfarrowsep=\dimen263 -) -(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex -File: pgfcoreshade.code.tex 2025-08-29 v3.1.11a (3.1.11a) -\pgf@max=\dimen264 -\pgf@sys@shading@range@num=\count311 -\pgf@shadingcount=\count312 -) -(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex -File: pgfcoreimage.code.tex 2025-08-29 v3.1.11a (3.1.11a) -) -(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex -File: pgfcoreexternal.code.tex 2025-08-29 v3.1.11a (3.1.11a) -\pgfexternal@startupbox=\box60 -) -(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex -File: pgfcorelayers.code.tex 2025-08-29 v3.1.11a (3.1.11a) -) -(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex -File: pgfcoretransparency.code.tex 2025-08-29 v3.1.11a (3.1.11a) -) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex -File: pgfcorepatterns.code.tex 2025-08-29 v3.1.11a (3.1.11a) -) -(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex -File: pgfcorerdf.code.tex 2025-08-29 v3.1.11a (3.1.11a) -))) -(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex -File: pgfmoduleshapes.code.tex 2025-08-29 v3.1.11a (3.1.11a) -\pgfnodeparttextbox=\box61 -) -(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex -File: pgfmoduleplot.code.tex 2025-08-29 v3.1.11a (3.1.11a) -) -(/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty -Package: pgfcomp-version-0-65 2025-08-29 v3.1.11a (3.1.11a) -\pgf@nodesepstart=\dimen265 -\pgf@nodesepend=\dimen266 -) -(/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty -Package: pgfcomp-version-1-18 2025-08-29 v3.1.11a (3.1.11a) -)) -(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgffor.sty -(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty -(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex)) -(/usr/share/texmf-dist/tex/latex/pgf/math/pgfmath.sty -(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex)) -(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex -Package: pgffor 2025-08-29 v3.1.11a (3.1.11a) -\pgffor@iter=\dimen267 -\pgffor@skip=\dimen268 -\pgffor@stack=\toks45 -\pgffor@toks=\toks46 -)) -(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex -Package: tikz 2025-08-29 v3.1.11a (3.1.11a) - -(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.te -x -File: pgflibraryplothandlers.code.tex 2025-08-29 v3.1.11a (3.1.11a) -\pgf@plot@mark@count=\count313 -\pgfplotmarksize=\dimen269 -) -\tikz@lastx=\dimen270 -\tikz@lasty=\dimen271 -\tikz@lastxsaved=\dimen272 -\tikz@lastysaved=\dimen273 -\tikz@lastmovetox=\dimen274 -\tikz@lastmovetoy=\dimen275 -\tikzleveldistance=\dimen276 -\tikzsiblingdistance=\dimen277 -\tikz@figbox=\box62 -\tikz@figbox@bg=\box63 -\tikz@tempbox=\box64 -\tikz@tempbox@bg=\box65 -\tikztreelevel=\count314 -\tikznumberofchildren=\count315 -\tikznumberofcurrentchild=\count316 -\tikz@fig@count=\count317 - (/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex -File: pgfmodulematrix.code.tex 2025-08-29 v3.1.11a (3.1.11a) -\pgfmatrixcurrentrow=\count318 -\pgfmatrixcurrentcolumn=\count319 -\pgf@matrix@numberofcolumns=\count320 -) -\tikz@expandcount=\count321 - -(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary -topaths.code.tex -File: tikzlibrarytopaths.code.tex 2025-08-29 v3.1.11a (3.1.11a) -))) (/usr/share/texmf-dist/tex/latex/booktabs/booktabs.sty -Package: booktabs 2020/01/12 v1.61803398 Publication quality tables -\heavyrulewidth=\dimen278 -\lightrulewidth=\dimen279 -\cmidrulewidth=\dimen280 -\belowrulesep=\dimen281 -\belowbottomsep=\dimen282 -\aboverulesep=\dimen283 -\abovetopsep=\dimen284 -\cmidrulesep=\dimen285 -\cmidrulekern=\dimen286 -\defaultaddspace=\dimen287 -\@cmidla=\count322 -\@cmidlb=\count323 -\@aboverulesep=\dimen288 -\@belowrulesep=\dimen289 -\@thisruleclass=\count324 -\@lastruleclass=\count325 -\@thisrulewidth=\dimen290 -) -(/usr/share/texmf-dist/tex/latex/tools/array.sty -Package: array 2025/09/25 v2.6n Tabular extension package (FMi) -\col@sep=\dimen291 -\ar@mcellbox=\box66 -\extrarowheight=\dimen292 -\NC@list=\toks47 -\extratabsurround=\skip71 -\backup@length=\skip72 -\ar@cellbox=\box67 -) -(/usr/share/texmf-dist/tex/latex/caption/caption.sty -Package: caption 2023/08/05 v3.6o Customizing captions (AR) - -(/usr/share/texmf-dist/tex/latex/caption/caption3.sty -Package: caption3 2023/07/31 v2.4d caption3 kernel (AR) -\caption@tempdima=\dimen293 -\captionmargin=\dimen294 -\caption@leftmargin=\dimen295 -\caption@rightmargin=\dimen296 -\caption@width=\dimen297 -\caption@indent=\dimen298 -\caption@parindent=\dimen299 -\caption@hangindent=\dimen300 -Package caption Info: Standard document class detected. -) -\c@caption@flags=\count326 -\c@continuedfloat=\count327 -) -(/usr/share/texmf-dist/tex/latex/float/float.sty -Package: float 2001/11/08 v1.3d Float enhancements (AL) -\c@float@type=\count328 -\float@exts=\toks48 -\float@box=\box68 -\@float@everytoks=\toks49 -\@floatcapt=\box69 -) -(/usr/share/texmf-dist/tex/latex/tools/tabularx.sty -Package: tabularx 2023/12/11 v2.12a `tabularx' package (DPC) -\TX@col@width=\dimen301 -\TX@old@table=\dimen302 -\TX@old@col=\dimen303 -\TX@target=\dimen304 -\TX@delta=\dimen305 -\TX@cols=\count329 -\TX@ftn=\toks50 -) -(/usr/share/texmf-dist/tex/latex/tocloft/tocloft.sty -Package: tocloft 2017/08/31 v2.3i parameterised ToC, etc., typesetting -Package tocloft Info: The document has chapter divisions on input line 51. -\cftparskip=\skip73 -\cftbeforetoctitleskip=\skip74 -\cftaftertoctitleskip=\skip75 -\cftbeforepartskip=\skip76 -\cftpartnumwidth=\skip77 -\cftpartindent=\skip78 -\cftbeforechapskip=\skip79 -\cftchapindent=\skip80 -\cftchapnumwidth=\skip81 -\cftbeforesecskip=\skip82 -\cftsecindent=\skip83 -\cftsecnumwidth=\skip84 -\cftbeforesubsecskip=\skip85 -\cftsubsecindent=\skip86 -\cftsubsecnumwidth=\skip87 -\cftbeforesubsubsecskip=\skip88 -\cftsubsubsecindent=\skip89 -\cftsubsubsecnumwidth=\skip90 -\cftbeforeparaskip=\skip91 -\cftparaindent=\skip92 -\cftparanumwidth=\skip93 -\cftbeforesubparaskip=\skip94 -\cftsubparaindent=\skip95 -\cftsubparanumwidth=\skip96 -\cftbeforeloftitleskip=\skip97 -\cftafterloftitleskip=\skip98 -\cftbeforefigskip=\skip99 -\cftfigindent=\skip100 -\cftfignumwidth=\skip101 -\c@lofdepth=\count330 -\c@lotdepth=\count331 -\cftbeforelottitleskip=\skip102 -\cftafterlottitleskip=\skip103 -\cftbeforetabskip=\skip104 -\cfttabindent=\skip105 -\cfttabnumwidth=\skip106 -) -(/usr/share/texmf-dist/tex/latex/listings/listings.sty -\lst@mode=\count332 -\lst@gtempboxa=\box70 -\lst@token=\toks51 -\lst@length=\count333 -\lst@currlwidth=\dimen306 -\lst@column=\count334 -\lst@pos=\count335 -\lst@lostspace=\dimen307 -\lst@width=\dimen308 -\lst@newlines=\count336 -\lst@lineno=\count337 -\lst@maxwidth=\dimen309 - -(/usr/share/texmf-dist/tex/latex/listings/lstpatch.sty -File: lstpatch.sty 2025/11/14 1.11b (Carsten Heinz) -) -(/usr/share/texmf-dist/tex/latex/listings/lstmisc.sty -File: lstmisc.sty 2025/11/14 1.11b (Carsten Heinz) -\c@lstnumber=\count338 -\lst@skipnumbers=\count339 -\lst@framebox=\box71 -) -(/usr/share/texmf-dist/tex/latex/listings/listings.cfg -File: listings.cfg 2025/11/14 1.11b listings configuration -)) -Package: listings 2025/11/14 1.11b (Carsten Heinz) - -==> First Aid for listings.sty no longer applied! - Expected: - 2024/09/23 1.10c (Carsten Heinz) - but found: - 2025/11/14 1.11b (Carsten Heinz) - so I'm assuming it got fixed. -(/usr/share/texmf-dist/tex/latex/hyperref/hyperref.sty -Package: hyperref 2026-01-29 v7.01p Hypertext links for LaTeX - -(/usr/share/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty -Package: kvsetkeys 2022-10-05 v1.19 Key value parser (HO) -) -(/usr/share/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty -Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO) -) -(/usr/share/texmf-dist/tex/generic/pdfescape/pdfescape.sty -Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO) - -(/usr/share/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -Package: ltxcmds 2023-12-04 v1.26 LaTeX kernel commands for general use (HO) -) -(/usr/share/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty -Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO -) - -(/usr/share/texmf-dist/tex/generic/infwarerr/infwarerr.sty -Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO) -) -Package pdftexcmds Info: \pdf@primitive is available. -Package pdftexcmds Info: \pdf@ifprimitive is available. -Package pdftexcmds Info: \pdfdraftmode found. -)) -(/usr/share/texmf-dist/tex/latex/hycolor/hycolor.sty -Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO) -) -(/usr/share/texmf-dist/tex/latex/hyperref/nameref.sty -Package: nameref 2026-01-29 v2.58 Cross-referencing by name of section - -(/usr/share/texmf-dist/tex/latex/refcount/refcount.sty -Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO) -) -(/usr/share/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty -Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) - -(/usr/share/texmf-dist/tex/latex/kvoptions/kvoptions.sty -Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO) -)) -\c@section@level=\count340 -) -(/usr/share/texmf-dist/tex/latex/etoolbox/etoolbox.sty -Package: etoolbox 2025/10/02 v2.5m e-TeX tools for LaTeX (JAW) -\etb@tempcnta=\count341 -) -(/usr/share/texmf-dist/tex/generic/stringenc/stringenc.sty -Package: stringenc 2019/11/29 v1.12 Convert strings between diff. encodings (HO -) -) -\@linkdim=\dimen310 -\Hy@linkcounter=\count342 -\Hy@pagecounter=\count343 - -(/usr/share/texmf-dist/tex/latex/hyperref/pd1enc.def -File: pd1enc.def 2026-01-29 v7.01p Hyperref: PDFDocEncoding definition (HO) -Now handling font encoding PD1 ... -... no UTF-8 mapping file for font encoding PD1 -) -(/usr/share/texmf-dist/tex/generic/intcalc/intcalc.sty -Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO) -) -\Hy@SavedSpaceFactor=\count344 - -(/usr/share/texmf-dist/tex/latex/hyperref/puenc.def -File: puenc.def 2026-01-29 v7.01p Hyperref: PDF Unicode definition (HO) -Now handling font encoding PU ... -... no UTF-8 mapping file for font encoding PU -) -Package hyperref Info: Option `unicode' set `true' on input line 4072. -Package hyperref Info: Option `colorlinks' set `true' on input line 4072. -Package hyperref Info: Hyper figures OFF on input line 4201. -Package hyperref Info: Link nesting OFF on input line 4206. -Package hyperref Info: Hyper index ON on input line 4209. -Package hyperref Info: Plain pages OFF on input line 4216. -Package hyperref Info: Backreferencing OFF on input line 4221. -Package hyperref Info: Implicit mode ON; LaTeX internals redefined. -Package hyperref Info: Bookmarks ON on input line 4468. -\c@Hy@tempcnt=\count345 - -(/usr/share/texmf-dist/tex/latex/url/url.sty -\Urlmuskip=\muskip18 -Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. -) -LaTeX Info: Redefining \url on input line 4807. -\XeTeXLinkMargin=\dimen311 - -(/usr/share/texmf-dist/tex/generic/bitset/bitset.sty -Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO) - -(/usr/share/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty -Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO -) -)) -\Fld@menulength=\count346 -\Field@Width=\dimen312 -\Fld@charsize=\dimen313 -Package hyperref Info: Hyper figures OFF on input line 6084. -Package hyperref Info: Link nesting OFF on input line 6089. -Package hyperref Info: Hyper index ON on input line 6092. -Package hyperref Info: backreferencing OFF on input line 6099. -Package hyperref Info: Link coloring ON on input line 6102. -Package hyperref Info: Link coloring with OCG OFF on input line 6109. -Package hyperref Info: PDF/A mode OFF on input line 6114. -\Hy@abspage=\count347 -\c@Item=\count348 -\c@Hfootnote=\count349 -) -Package hyperref Info: Driver (autodetected): hpdftex. - -(/usr/share/texmf-dist/tex/latex/hyperref/hpdftex.def -File: hpdftex.def 2026-01-29 v7.01p Hyperref driver for pdfTeX -\Fld@listcount=\count350 -\c@bookmark@seq@number=\count351 - -(/usr/share/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty -Package: rerunfilecheck 2025-06-21 v1.11 Rerun checks for auxiliary files (HO) - -(/usr/share/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty -Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO) -) -Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 -84. -) -\Hy@SectionHShift=\skip107 -) -LaTeX Font Info: Trying to load font information for T5+cmss on input line 9 -4. - -(/usr/share/texmf-dist/tex/latex/vntex/t5cmss.fd -File: t5cmss.fd 1999/05/25 v2.5h Standard LaTeX font definitions -) -(/usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def -File: l3backend-pdftex.def 2025-10-09 L3 backend support: PDF output (pdfTeX) -\l__color_backend_stack_int=\count352 -) -(./report_template.aux) -\openout1 = `report_template.aux'. - -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 94. -LaTeX Font Info: ... okay on input line 94. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 94. -LaTeX Font Info: ... okay on input line 94. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 94. -LaTeX Font Info: ... okay on input line 94. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 94. -LaTeX Font Info: ... okay on input line 94. -LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 94. -LaTeX Font Info: ... okay on input line 94. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 94. -LaTeX Font Info: ... okay on input line 94. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 94. -LaTeX Font Info: ... okay on input line 94. -LaTeX Font Info: Checking defaults for T5/cmr/m/n on input line 94. -LaTeX Font Info: ... okay on input line 94. -LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 94. -LaTeX Font Info: ... okay on input line 94. -LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 94. -LaTeX Font Info: ... okay on input line 94. - -*geometry* driver: auto-detecting -*geometry* detected driver: pdftex -*geometry* verbose mode - [ preamble ] result: -* driver: pdftex -* paper: a4paper -* layout: -* layoutoffset:(h,v)=(0.0pt,0.0pt) -* modes: -* h-part:(L,W,R)=(42.67912pt, 512.14963pt, 42.67912pt) -* v-part:(T,H,B)=(71.13188pt, 717.00946pt, 56.9055pt) -* \paperwidth=597.50787pt -* \paperheight=845.04684pt -* \textwidth=512.14963pt -* \textheight=717.00946pt -* \oddsidemargin=-29.59087pt -* \evensidemargin=-29.59087pt -* \topmargin=-38.1381pt -* \headheight=12.0pt -* \headsep=25.0pt -* \topskip=12.0pt -* \footskip=30.0pt -* \marginparwidth=35.0pt -* \marginparsep=10.0pt -* \columnsep=10.0pt -* \skip\footins=10.8pt plus 4.0pt minus 2.0pt -* \hoffset=0.0pt -* \voffset=0.0pt -* \mag=1000 -* \@twocolumnfalse -* \@twosidefalse -* \@mparswitchfalse -* \@reversemarginfalse -* (1in=72.27pt=25.4mm, 1cm=28.453pt) - -(/usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii -[Loading MPS to PDF converter (version 2006.09.02).] -\scratchcounter=\count353 -\scratchdimen=\dimen314 -\scratchbox=\box72 -\nofMPsegments=\count354 -\nofMParguments=\count355 -\everyMPshowfont=\toks52 -\MPscratchCnt=\count356 -\MPscratchDim=\dimen315 -\MPnumerator=\count357 -\makeMPintoPDFobject=\count358 -\everyMPtoPDFconversion=\toks53 -) (/usr/share/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty -Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf -Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 -85. - -(/usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg -File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv -e -)) -Package caption Info: Begin \AtBeginDocument code. -Package caption Info: float package is loaded. -Package caption Info: hyperref package is loaded. -Package caption Info: listings package is loaded. -Package caption Info: End \AtBeginDocument code. -\c@lstlisting=\count359 -Package hyperref Info: Link coloring ON on input line 94. - -(./report_template.out) (./report_template.out) -\@outlinefile=\write4 -\openout4 = `report_template.out'. - - -File: logohcmus.jpg Graphic file (type jpg) - -Package pdftex.def Info: logohcmus.jpg used on input line 129. -(pdftex.def) Requested size: 128.0374pt x 128.0305pt. -LaTeX Font Info: Trying to load font information for U+msa on input line 138 -. - -(/usr/share/texmf-dist/tex/latex/amsfonts/umsa.fd -File: umsa.fd 2013/01/14 v3.01 AMS symbols A -) -LaTeX Font Info: Trying to load font information for U+msb on input line 138 -. - -(/usr/share/texmf-dist/tex/latex/amsfonts/umsb.fd -File: umsb.fd 2013/01/14 v3.01 AMS symbols B -) -LaTeX Font Info: Trying to load font information for U+lasy on input line 13 -8. - -(/usr/share/texmf-dist/tex/latex/base/ulasy.fd -File: ulasy.fd 1998/08/17 v2.2e LaTeX symbol font definitions -) [1 - -{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map} <./logohcmus.jpg>] (./repor -t_template.toc -LaTeX Font Info: Trying to load font information for T5+cmtt on input line 1 -0. - -(/usr/share/texmf-dist/tex/latex/vntex/t5cmtt.fd -File: t5cmtt.fd 1999/05/25 v2.5h Standard LaTeX font definitions -)) -\tf@toc=\write5 -\openout5 = `report_template.toc'. - - - -LaTeX Font Warning: Font shape `T5/cmss/m/it' in size <12> not available -(Font) Font shape `T5/cmss/m/sl' tried instead on input line 156. - - -Package fancyhdr Warning: \headheight is too small (12.0pt): -(fancyhdr) Make it at least 14.49998pt, for example: -(fancyhdr) \setlength{\headheight}{14.49998pt}. -(fancyhdr) You might also make \topmargin smaller: -(fancyhdr) \addtolength{\topmargin}{-2.49998pt}. - - -pdfTeX warning (ext4): destination with the same identifier (name{page.1}) has -been already used, duplicate ignored - - \relax -l.156 \newpage - [1] -Chapter 1. - -Package fancyhdr Warning: \headheight is too small (12.0pt): -(fancyhdr) Make it at least 14.49998pt, for example: -(fancyhdr) \setlength{\headheight}{14.49998pt}. -(fancyhdr) You might also make \topmargin smaller: -(fancyhdr) \addtolength{\topmargin}{-2.49998pt}. - - -pdfTeX warning (ext4): destination with the same identifier (name{page.1}) has -been already used, duplicate ignored - - \relax -l.187 \newpage - [1 - -] -Chapter 2. - -Package fancyhdr Warning: \headheight is too small (12.0pt): -(fancyhdr) Make it at least 14.49998pt, for example: -(fancyhdr) \setlength{\headheight}{14.49998pt}. -(fancyhdr) You might also make \topmargin smaller: -(fancyhdr) \addtolength{\topmargin}{-2.49998pt}. - -[2 - -{/usr/share/texmf-dist/fonts/enc/dvips/cm-super/cm-super-ts1.enc}] - -Package fancyhdr Warning: \headheight is too small (12.0pt): -(fancyhdr) Make it at least 14.49998pt, for example: -(fancyhdr) \setlength{\headheight}{14.49998pt}. -(fancyhdr) You might also make \topmargin smaller: -(fancyhdr) \addtolength{\topmargin}{-2.49998pt}. - -[3] -Chapter 3. -LaTeX Font Info: Font shape `T5/cmtt/bx/n' in size <17.28> not available -(Font) Font shape `T5/cmtt/m/n' tried instead on input line 250. -(/usr/share/texmf-dist/tex/latex/listings/lstlang1.sty -File: lstlang1.sty 2025/11/14 1.11b listings language file -) -Package hyperref Info: bookmark level for unknown lstlisting defaults to 0 on i -nput line 253. - - -Package fancyhdr Warning: \headheight is too small (12.0pt): -(fancyhdr) Make it at least 14.49998pt, for example: -(fancyhdr) \setlength{\headheight}{14.49998pt}. -(fancyhdr) You might also make \topmargin smaller: -(fancyhdr) \addtolength{\topmargin}{-2.49998pt}. - -[4 - -] -Overfull \hbox (11.92468pt too wide) in paragraph at lines 298--299 -\T5/cmss/m/n/12 The Client script uses \T5/cmtt/m/n/12 Tkinter \T5/cmss/m/n/12 -to con-struct the user in-ter-face. It binds a UDP socket with the \T5/cmtt/m/n -/12 SO_REUSEADDR - [] - - -Overfull \hbox (20.918pt too wide) in paragraph at lines 300--301 -[]\T5/cmss/m/n/12 Because Tk-in-ter's \T5/cmtt/m/n/12 mainloop() \T5/cmss/m/n/1 -2 is block-ing and must run on the main thread, the net-work-ing \T5/cmtt/m/n/1 -2 receive_loop - [] - - -Package fancyhdr Warning: \headheight is too small (12.0pt): -(fancyhdr) Make it at least 14.49998pt, for example: -(fancyhdr) \setlength{\headheight}{14.49998pt}. -(fancyhdr) You might also make \topmargin smaller: -(fancyhdr) \addtolength{\topmargin}{-2.49998pt}. - -[5] -Chapter 4. - -File: assets/Server_Init.png Graphic file (type png) - -Package pdftex.def Info: assets/Server_Init.png used on input line 343. -(pdftex.def) Requested size: 409.72125pt x 127.03403pt. - -File: assets/client_waiting_stream.png Graphic file (type png) - -Package pdftex.def Info: assets/client_waiting_stream.png used on input line 3 -55. -(pdftex.def) Requested size: 245.82962pt x 156.33466pt. - -File: assets/Client_Init.png Graphic file (type png) - -Package pdftex.def Info: assets/Client_Init.png used on input line 362. -(pdftex.def) Requested size: 245.82962pt x 191.56973pt. - -Package fancyhdr Warning: \headheight is too small (12.0pt): -(fancyhdr) Make it at least 14.49998pt, for example: -(fancyhdr) \setlength{\headheight}{14.49998pt}. -(fancyhdr) You might also make \topmargin smaller: -(fancyhdr) \addtolength{\topmargin}{-2.49998pt}. - -[6 - - <./assets/Server_Init.png>] - -File: assets/Client_running_2.png Graphic file (type png) - -Package pdftex.def Info: assets/Client_running_2.png used on input line 372. -(pdftex.def) Requested size: 409.72125pt x 224.7573pt. - -File: assets/Statistics.png Graphic file (type png) - -Package pdftex.def Info: assets/Statistics.png used on input line 382. -(pdftex.def) Requested size: 409.72125pt x 48.98866pt. - -Overfull \hbox (32.92685pt too wide) in paragraph at lines 387--388 -[]\T5/cmss/m/n/12 When a client ap-pli-ca-tion is closed via the win-dow man-ag -er, the ap-pli-ca-tion in-ter-cepts the \T5/cmtt/m/n/12 WM_DELETE_WINDOW - [] - - -Package fancyhdr Warning: \headheight is too small (12.0pt): -(fancyhdr) Make it at least 14.49998pt, for example: -(fancyhdr) \setlength{\headheight}{14.49998pt}. -(fancyhdr) You might also make \topmargin smaller: -(fancyhdr) \addtolength{\topmargin}{-2.49998pt}. - -[7 <./assets/client_waiting_stream.png> <./assets/Client_Init.png> <./assets/Cl -ient_running_2.png> <./assets/Statistics.png>] - -Package fancyhdr Warning: \headheight is too small (12.0pt): -(fancyhdr) Make it at least 14.49998pt, for example: -(fancyhdr) \setlength{\headheight}{14.49998pt}. -(fancyhdr) You might also make \topmargin smaller: -(fancyhdr) \addtolength{\topmargin}{-2.49998pt}. - -[8] (./report_template.aux) - *********** -LaTeX2e <2025-11-01> -L3 programming layer <2026-01-19> - *********** -Package rerunfilecheck Info: File `report_template.out' has not changed. -(rerunfilecheck) Checksum: D8748C629B14CCB67ACDD31E6984CFB9;3523. - ) -Here is how much of TeX's memory you used: - 26857 strings out of 468995 - 476803 string characters out of 5460435 - 1256708 words of memory out of 5000000 - 55140 multiletter control sequences out of 15000+600000 - 648225 words of font info for 80 fonts, out of 8000000 for 9000 - 264 hyphenation exceptions out of 8191 - 84i,11n,94p,552b,1319s stack positions out of 10000i,1000n,20000p,200000b,200000s - - -Output written on report_template.pdf (10 pages, 1067206 bytes). -PDF statistics: - 287 PDF objects out of 1000 (max. 8388607) - 241 compressed objects within 3 object streams - 98 named destinations out of 1000 (max. 500000) - 163 words of extra memory for PDF output out of 10000 (max. 10000000) - diff --git a/doc/report_template.out b/doc/report_template.out deleted file mode 100644 index bf32d49..0000000 --- a/doc/report_template.out +++ /dev/null @@ -1,15 +0,0 @@ -\BOOKMARK [0][-]{chapter.1}{\376\377\000I\000n\000t\000r\000o\000d\000u\000c\000t\000i\000o\000n\000\040\000a\000n\000d\000\040\000S\000p\000e\000c\000i\000f\000i\000c\000a\000t\000i\000o\000n\000s}{}% 1 -\BOOKMARK [1][-]{section.1.1}{\376\377\000P\000r\000o\000j\000e\000c\000t\000\040\000O\000v\000e\000r\000v\000i\000e\000w}{chapter.1}% 2 -\BOOKMARK [1][-]{section.1.2}{\376\377\000G\000r\000o\000u\000p\000\040\000M\000e\000m\000b\000e\000r\000s\000\040\000a\000n\000d\000\040\000T\000a\000s\000k\000\040\000A\000l\000l\000o\000c\000a\000t\000i\000o\000n}{chapter.1}% 3 -\BOOKMARK [0][-]{chapter.2}{\376\377\000S\000y\000s\000t\000e\000m\000\040\000A\000r\000c\000h\000i\000t\000e\000c\000t\000u\000r\000e\000\040\000a\000n\000d\000\040\000P\000r\000o\000t\000o\000c\000o\000l\000\040\000D\000e\000s\000i\000g\000n}{}% 4 -\BOOKMARK [1][-]{section.2.1}{\376\377\000M\000u\000l\000t\000i\000c\000a\000s\000t\000\040\000S\000t\000r\000e\000a\000m\000i\000n\000g\000\040\000P\000a\000r\000a\000d\000i\000g\000m}{chapter.2}% 5 -\BOOKMARK [1][-]{section.2.2}{\376\377\000C\000u\000s\000t\000o\000m\000\040\000P\000a\000c\000k\000e\000t\000\040\000F\000o\000r\000m\000a\000t}{chapter.2}% 6 -\BOOKMARK [1][-]{section.2.3}{\376\377\000C\000o\000n\000c\000u\000r\000r\000e\000n\000t\000\040\000C\000l\000i\000e\000n\000t\000s\000\040\000a\000n\000d\000\040\000L\000o\000s\000s\000\040\000D\000e\000t\000e\000c\000t\000i\000o\000n\000\040\000A\000l\000g\000o\000r\000i\000t\000h\000m}{chapter.2}% 7 -\BOOKMARK [0][-]{chapter.3}{\376\377\000C\000o\000d\000e\000\040\000I\000m\000p\000l\000e\000m\000e\000n\000t\000a\000t\000i\000o\000n\000\040\000D\000e\000t\000a\000i\000l\000s}{}% 8 -\BOOKMARK [1][-]{section.3.1}{\376\377\000C\000u\000s\000t\000o\000m\000\040\000P\000a\000c\000k\000e\000t\000\040\000E\000n\000c\000o\000d\000i\000n\000g\000/\000D\000e\000c\000o\000d\000i\000n\000g\000\040\000\050\000C\000u\000s\000t\000o\000m\000P\000a\000c\000k\000e\000t\000.\000p\000y\000\051}{chapter.3}% 9 -\BOOKMARK [1][-]{section.3.2}{\376\377\000S\000e\000r\000v\000e\000r\000\040\000I\000m\000p\000l\000e\000m\000e\000n\000t\000a\000t\000i\000o\000n\000\040\000\050\000S\000e\000r\000v\000e\000r\000.\000p\000y\000\051}{chapter.3}% 10 -\BOOKMARK [1][-]{section.3.3}{\376\377\000C\000l\000i\000e\000n\000t\000\040\000I\000m\000p\000l\000e\000m\000e\000n\000t\000a\000t\000i\000o\000n\000\040\000a\000n\000d\000\040\000G\000U\000I\000\040\000T\000h\000r\000e\000a\000d\000i\000n\000g\000\040\000\050\000C\000l\000i\000e\000n\000t\000.\000p\000y\000\051}{chapter.3}% 11 -\BOOKMARK [0][-]{chapter.4}{\376\377\000V\000e\000r\000i\000f\000i\000c\000a\000t\000i\000o\000n\000\040\000a\000n\000d\000\040\000E\000x\000p\000e\000r\000i\000m\000e\000n\000t\000a\000l\000\040\000R\000e\000s\000u\000l\000t\000s}{}% 12 -\BOOKMARK [1][-]{section.4.1}{\376\377\000S\000e\000r\000v\000e\000r\000\040\000O\000p\000e\000r\000a\000t\000i\000o\000n\000\040\000a\000n\000d\000\040\000I\000n\000i\000t\000i\000a\000l\000i\000z\000a\000t\000i\000o\000n}{chapter.4}% 13 -\BOOKMARK [1][-]{section.4.2}{\376\377\000C\000l\000i\000e\000n\000t\000\040\000P\000l\000a\000y\000b\000a\000c\000k\000\040\000a\000n\000d\000\040\000C\000o\000n\000c\000u\000r\000r\000e\000n\000c\000y}{chapter.4}% 14 -\BOOKMARK [1][-]{section.4.3}{\376\377\000S\000t\000a\000t\000i\000s\000t\000i\000c\000s\000,\000\040\000L\000o\000s\000s\000\040\000D\000e\000t\000e\000c\000t\000i\000o\000n\000,\000\040\000a\000n\000d\000\040\000I\000G\000M\000P\000\040\000L\000e\000a\000v\000e}{chapter.4}% 15 diff --git a/doc/report_template.pdf b/doc/report_template.pdf deleted file mode 100644 index 73a5cf5..0000000 Binary files a/doc/report_template.pdf and /dev/null differ diff --git a/doc/report_template.tex b/doc/report_template.tex deleted file mode 100644 index 1648c51..0000000 --- a/doc/report_template.tex +++ /dev/null @@ -1,389 +0,0 @@ -\documentclass[12pt,a4paper]{report} -\usepackage[utf8]{inputenc} -\usepackage[T5]{fontenc} -\usepackage[english]{babel} -\usepackage{amsmath, amsthm, amssymb, latexsym, amscd, amsfonts, enumerate} -\usepackage[top=2.5cm, bottom=2.0cm, left=1.5cm, right=1.5cm]{geometry} - -% === Packages === -\usepackage{fancyhdr} -\usepackage{graphicx} -\usepackage{xcolor} -\usepackage{tikz} -\usepackage{booktabs} -\usepackage{array} -\usepackage{caption} -\usepackage{float} -\usepackage{tabularx} -\usepackage{tocloft} -\usepackage{listings} -\usepackage[unicode, colorlinks=true, linkcolor=black, urlcolor=blue]{hyperref} - -% === Code Listing Styling === -\definecolor{codegreen}{rgb}{0,0.6,0} -\definecolor{codegray}{rgb}{0.5,0.5,0.5} -\definecolor{codepurple}{rgb}{0.58,0,0.82} -\definecolor{backcolour}{rgb}{0.95,0.95,0.92} - -\lstdefinestyle{mystyle}{ - backgroundcolor=\color{backcolour}, - commentstyle=\color{codegreen}, - keywordstyle=\color{magenta}, - numberstyle=\tiny\color{codegray}, - stringstyle=\color{codepurple}, - basicstyle=\ttfamily\footnotesize, - breakatwhitespace=false, - breaklines=true, - captionpos=b, - keepspaces=true, - numbers=left, - numbersep=5pt, - showspaces=false, - showstringspaces=false, - showtabs=false, - tabsize=2 -} -\lstset{style=mystyle} - -% === Font & Spacing === -\renewcommand{\familydefault}{\sfdefault} -\fontsize{13pt}{18pt}\selectfont -\setlength{\baselineskip}{18truept} -\renewcommand{\arraystretch}{1.3} - -% === Header & Footer === -\pagestyle{fancy} -\fancyhf{} - -\lhead{\itshape Computer Networks Lab Report} -\rhead{\itshape Project: Video Streaming using IP Multicast} -\lfoot{\itshape Group: Đặng Võ Hồng Phúc \& Trịnh Chấn Duy} -\rfoot{Page \thepage} - -\renewcommand{\headrulewidth}{1.2pt} -\renewcommand{\footrulewidth}{1.2pt} - -\fancypagestyle{plain}{% - \fancyhf{} - \lhead{\itshape Computer Networks Lab Report} - \rhead{\itshape Project: Video Streaming using IP Multicast} - \lfoot{\itshape Group: Đặng Võ Hồng Phúc \& Trịnh Chấn Duy} - \rfoot{Page \thepage} - \renewcommand{\headrulewidth}{1.2pt} - \renewcommand{\footrulewidth}{1.2pt} -} - -\fancypagestyle{empty}{% - \fancyhf{} - \renewcommand{\headrulewidth}{0pt} - \renewcommand{\footrulewidth}{0pt} -} - -% === Custom Table of Contents === -\makeatletter -\renewcommand\tableofcontents{% - \begin{center} - {\Large\bfseries \contentsname} - \par\nobreak - \vspace{10pt} - \end{center} - \@starttoc{toc} -} -\makeatother - -\begin{document} - -% ==================== TITLE PAGE ==================== -\begin{titlepage} -\thispagestyle{empty} - -\begin{tikzpicture}[remember picture,overlay,inner sep=0,outer sep=0] - \draw[blue!70!black,line width=4pt] - ([xshift=-1.5cm,yshift=-2cm]current page.north east) coordinate (A) -- - ([xshift=1.5cm,yshift=-2cm]current page.north west) coordinate(B) -- - ([xshift=1.5cm,yshift=2cm]current page.south west) coordinate (C) -- - ([xshift=-1.5cm,yshift=2cm]current page.south east) coordinate(D) -- cycle; - - % Inner decorative border 1 - \draw ([yshift=0.5cm,xshift=-0.5cm]A)-- ([yshift=0.5cm,xshift=0.5cm]B)-- - ([yshift=-0.5cm,xshift=0.5cm]B) --([yshift=-0.5cm,xshift=-0.5cm]B)--([yshift=0.5cm,xshift=-0.5cm]C)--([yshift=0.5cm,xshift=0.5cm]C)--([yshift=-0.5cm,xshift=0.5cm]C)-- - ([yshift=-0.5cm,xshift=-0.5cm]D)--([yshift=0.5cm,xshift=-0.5cm]D)--([yshift=0.5cm,xshift=0.5cm]D)--([yshift=-0.5cm,xshift=0.5cm]A)--([yshift=-0.5cm,xshift=-0.5cm]A)--([yshift=0.5cm,xshift=-0.5cm]A); - - % Inner decorative border 2 - \draw ([yshift=-0.3cm,xshift=0.3cm]A)-- ([yshift=-0.3cm,xshift=-0.3cm]B)-- - ([yshift=0.3cm,xshift=-0.3cm]B) --([yshift=0.3cm,xshift=0.3cm]B)--([yshift=-0.3cm,xshift=0.3cm]C)--([yshift=-0.3cm,xshift=-0.3cm]C)--([yshift=0.3cm,xshift=-0.3cm]C)-- - ([yshift=0.3cm,xshift=0.3cm]D)--([yshift=-0.3cm,xshift=0.3cm]D)--([yshift=-0.3cm,xshift=-0.3cm]D)--([yshift=0.3cm,xshift=-0.3cm]A)--([yshift=0.3cm,xshift=0.3cm]A)--([yshift=-0.3cm,xshift=0.3cm]A); -\end{tikzpicture} - -\begin{center} -{\large\bf UNIVERSITY OF SCIENCE}\\ -{\large\bf FACULTY OF INFORMATION TECHNOLOGY}\\[0.5cm] -{---------------------o0o--------------------}\\[1cm] - -{\bf COURSE PROJECT REPORT\\NETWORK PROGRAMMING}\\[0.5cm] -\rule{\linewidth}{0.5mm}\\[0.2cm] -{\Large\bf PROJECT: VIDEO STREAMING USING IP MULTICAST}\\ -\rule{\linewidth}{0.5mm}\\[1cm] - -% Note: logohcmus.jpg might not be present in all environments, so we add a fallback. -\includegraphics[width=0.25\textwidth]{logohcmus.jpg}\\[0.5cm] -\vspace{0.5cm} - -\begin{minipage}{0.4\textwidth} -\begin{flushleft}\large -\textbf{Group Members:}\\ -\textbf{Đặng Võ Hồng Phúc}\\ -\textbf{Trịnh Chấn Duy} -\end{flushleft} -\end{minipage} -~ -\begin{minipage}{0.4\textwidth} -\begin{flushright}\large -\textbf{Student IDs:}\\ -\textbf{23120155}\\ -\textbf{23120419} -\end{flushright} -\end{minipage} - -\vfill -{\bf Ho Chi Minh City, May 2026} - -\end{center} -\end{titlepage} - -% ==================== TABLE OF CONTENTS ==================== -\tableofcontents -\newpage -\pagenumbering{arabic} - -% ==================== Chapter 1: Introduction ==================== -\chapter{Introduction and Specifications} - -\section{Project Overview} -This laboratory report provides a comprehensive examination of the architecture, design, and implementation of a multicast video streaming application over IP. The developed system operates on a direct Server-to-Multicast paradigm where multiple clients join a multicast group to watch a shared stream without any individual, stateful connection overhead. - -The core objective of the project is to implement a streamlined, robust multicast framework that bypasses complex legacy protocols. The key technical features implemented and discussed in this report include: -\begin{enumerate} - \item \textbf{IP Multicast Architecture}: The server continuously broadcasts Motion JPEG (MJPEG) video frames to a specific UDP Multicast group (\texttt{239.1.1.1:5004}), eliminating the need for RTSP, RTP, TCP/UDP selection, or separate control/data channels. By leveraging IGMP (Internet Group Management Protocol), the network routers handle the duplication of packets to end clients, maintaining $O(1)$ server bandwidth complexity regardless of client count. - \item \textbf{Custom Packetization Protocol}: Standard RTP introduces significant byte overhead and parsing complexity. To optimize delivery, a minimal 10-byte custom packet header mechanism was designed to encapsulate frames, maintaining integrity while allowing for sequence tracking and packet loss detection. - \item \textbf{Real-Time Playback and Loss Detection}: The client concurrently listens to the multicast group, decodes received packets, tracks skipped frames for dynamic loss calculation, and renders the video in real-time utilizing a Tkinter GUI. - \item \textbf{Automatic Loop and Clean Group Management}: The server resets playback transparently upon video completion. The client correctly manages its network footprint by executing an IGMP Join upon execution and an IGMP Leave upon termination. -\end{enumerate} - -\section{Group Members and Task Allocation} -The project was executed collaboratively by the following team members. Both members contributed extensively to the design, implementation, and testing phases. - -\begin{center} -\begin{tabularx}{\textwidth}{l c X} -\toprule -\textbf{Full Name} & \textbf{Student ID} & \textbf{Email} \\ -\midrule -Đặng Võ Hồng Phúc & 23120155 & 23120155@student.hcmus.edu.vn \\ -Trịnh Chấn Duy & 23120419 & 23120419@student.hcmus.edu.vn \\ -\bottomrule -\end{tabularx} -\end{center} - -\newpage - -% ==================== Chapter 2: Protocol Design ==================== -\chapter{System Architecture and Protocol Design} - -\section{Multicast Streaming Paradigm} -Unlike unicast models where a server must duplicate bandwidth for each connected client, IP Multicast operates by sending a single stream into the network. Routers and switches then duplicate the packets only where necessary, reaching all clients subscribed to the group. - -\begin{figure}[H] - \centering - \begin{tikzpicture}[node distance=4cm, auto] - \node[circle, draw, minimum size=2.0cm, fill=blue!10] (server) {\textbf{Server}}; - \node[circle, draw, minimum size=2.0cm, fill=green!10, right of=server, xshift=1cm] (group) {\textbf{239.1.1.1:5004}}; - - \node[circle, draw, minimum size=2.0cm, fill=red!10, right of=group, yshift=2cm] (client1) {\textbf{Client 1}}; - \node[circle, draw, minimum size=2.0cm, fill=red!10, right of=group] (client2) {\textbf{Client 2}}; - \node[circle, draw, minimum size=2.0cm, fill=red!10, right of=group, yshift=-2cm] (client3) {\textbf{Client N}}; - - \path[->, >=stealth, thick] - (server) edge node[above] {UDP Packets} (group) - (group) edge (client1) - (group) edge (client2) - (group) edge (client3); - \end{tikzpicture} - \caption{Server-Multicast Group Architecture Diagram} -\end{figure} - -The server does not know who the clients are, nor does it keep any TCP connection open. It blindly packetizes the MJPEG video and transmits datagrams at approximately 20 frames per second (50ms per frame). Because the server does not handle client acknowledgments or connection states, its CPU and Memory utilization remain flat even if thousands of clients join the stream. - - - -\section{Custom Packet Format} -Instead of relying on standard but bloated protocols like RTP, a \textbf{Custom Packet Format} was devised. This provides exactly the information the client needs to reassemble the data and calculate packet loss without any unnecessary overhead. - -The header format consists of exactly 10 bytes arranged in Big-Endian (Network) byte order: -\begin{itemize} - \item \textbf{Magic Number (2 bytes)}: \texttt{0x1234}, used to verify that the incoming packet actually belongs to our streaming application and isn't random network noise. - \item \textbf{Frame Number (4 bytes)}: An unsigned integer incrementing continuously. Essential for the client to detect missing packets and calculate the loss rate. - \item \textbf{Payload Length (4 bytes)}: An unsigned integer dictating the size of the MJPEG frame appended immediately following the header. -\end{itemize} - -By limiting the header to 10 bytes, the payload to header ratio is vastly improved compared to a 12-byte RTP header plus potential extension headers, allowing for maximum data throughput. - -\section{Concurrent Clients and Loss Detection Algorithm} -Since UDP Multicast provides no guarantee of delivery, packets may be dropped by the network (due to router congestion or buffer overflow). The client tracks the \texttt{Frame Number} extracted from the Custom Packet header. - -The algorithm operates as follows: -\begin{enumerate} - \item When the first packet arrives, the client sets \texttt{expected\_frame} to \texttt{frame\_number + 1}. - \item For subsequent packets, if \texttt{frame\_number > expected\_frame}, the difference represents the exact number of frames lost during transit. - \item The client accumulates \texttt{lost\_frames} and updates the \texttt{expected\_frame} variable. - \item A real-time UI widget continuously updates the total received packets, lost packets, and the loss percentage formula: - $$ \text{Loss Rate (\%)} = \frac{\text{lost\_frames}}{\text{lost\_frames} + \text{received\_frames}} \times 100 $$ -\end{enumerate} - -Multiple clients can operate on the same machine or network independently. They will each calculate statistics based on the exact moment they executed the IGMP join command, demonstrating accurate per-client network diagnostics. - -\newpage - -% ==================== Chapter 3: Implementation ==================== -\chapter{Code Implementation Details} -This chapter highlights the core components implemented in Python, particularly focusing on the usage of the \texttt{socket} and \texttt{struct} libraries for low-level network manipulation. - -\section{Custom Packet Encoding/Decoding (\texttt{CustomPacket.py})} -The \texttt{CustomPacket.py} module uses Python's \texttt{struct} library for rapid binary serialization using network byte order (\texttt{!}). The \texttt{H} format character maps to a 2-byte unsigned short (Magic Number), and the two \texttt{I} characters map to 4-byte unsigned integers (Frame Number and Payload Length). - -\begin{lstlisting}[language=Python, caption=CustomPacket.py - Header Structure] -import struct - -class CustomPacket: - MAGIC = 0x1234 - HEADER_FORMAT = "!HII" - HEADER_SIZE = struct.calcsize(HEADER_FORMAT) - - @staticmethod - def encode(frame_num, payload): - header = struct.pack(CustomPacket.HEADER_FORMAT, - CustomPacket.MAGIC, frame_num, len(payload)) - return header + payload - - @staticmethod - def decode(data): - if len(data) < CustomPacket.HEADER_SIZE: - return None, None - header = data[:CustomPacket.HEADER_SIZE] - magic, frame_num, length = struct.unpack(CustomPacket.HEADER_FORMAT, header) - if magic != CustomPacket.MAGIC: - return None, None - payload = data[CustomPacket.HEADER_SIZE:CustomPacket.HEADER_SIZE+length] - return frame_num, payload -\end{lstlisting} - -\section{Server Implementation (\texttt{Server.py})} -The Server script binds a UDP socket, applies the IP Multicast Time-To-Live (TTL) configuration (\texttt{IP\_MULTICAST\_TTL}), and streams the MJPEG file frame-by-frame. A TTL of 2 ensures that the stream can pass through the local subnet to adjacent routers, though it can be adjusted for broader WAN distribution. Upon reaching the file's end, it automatically seeks back to the 0th byte. - -\begin{lstlisting}[language=Python, caption=Server.py - Core Multicast Loop] -sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) -sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2) - -while True: - frame = video_stream.nextFrame() - if frame is None: - video_stream.reset() # Replay video automatically - continue - - packet = CustomPacket.encode(video_stream.frameNum, frame) - sock.sendto(packet, (MULTICAST_GROUP, MULTICAST_PORT)) - time.sleep(0.05) # Delay to enforce ~20 FPS pacing -\end{lstlisting} - -\section{Client Implementation and GUI Threading (\texttt{Client.py})} -The Client script uses \texttt{Tkinter} to construct the user interface. It binds a UDP socket with the \texttt{SO\_REUSEADDR} flag (and \texttt{SO\_REUSEPORT} on supported OSs), allowing multiple clients to run simultaneously on the same host and listen to the same port. It then issues an IGMP Join request via \texttt{IP\_ADD\_MEMBERSHIP}. - -Because Tkinter's \texttt{mainloop()} is blocking and must run on the main thread, the networking \texttt{receive\_loop} is offloaded to a background Daemon thread. - -\begin{lstlisting}[language=Python, caption=Client.py - Threading and Socket Setup] -self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) -self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) -self.sock.bind(('', MULTICAST_PORT)) - -# Issue IGMP Join for Multicast Group 239.1.1.1 -mreq = socket.inet_aton(MULTICAST_GROUP) + socket.inet_aton('0.0.0.0') -self.sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) - -# Start background thread to avoid freezing GUI -self.receive_thread = threading.Thread(target=self.receive_loop) -self.receive_thread.daemon = True -self.receive_thread.start() -\end{lstlisting} - -The receive loop extracts the payload and schedules the UI update using \texttt{master.after(0, ...)} to ensure thread safety when modifying the Tkinter Label widget: - -\begin{lstlisting}[language=Python, caption=Client.py - Packet Reception and Thread-Safe UI Update] -data, _ = self.sock.recvfrom(65536) # Max UDP Size buffer -frame_num, payload = CustomPacket.decode(data) - -if frame_num is not None: - # Update loss tracking logic... - self.received_frames += 1 - - # Safely dispatch image rendering back to the Main GUI Thread - self.master.after(0, self.update_display, payload) - self.master.after(0, self.update_stats) -\end{lstlisting} - -\newpage - -% ==================== Chapter 4: Verification ==================== -\chapter{Verification and Experimental Results} -This chapter provides visual evidence of the system operating successfully under specified constraints. - -\section{Server Operation and Initialization} -The server successfully initializes using the command \texttt{python Server.py movie.Mjpeg}. Without waiting for any client handshakes, the server begins continuous injection of video packets into the \texttt{239.1.1.1} multicast group at port \texttt{5004}. This verifies the stateless architecture required by the specifications. - -\begin{figure}[H] - \centering - \includegraphics[width=0.8\textwidth]{assets/Server_Init.png} - \caption{Server terminal successfully running and broadcasting} - \label{fig:server_running} -\end{figure} - -\section{Client Playback and Concurrency} -Multiple instances of the client can be launched concurrently using \texttt{python Client.py}. Each instance independently joins the multicast group. Upon launch, the GUI displays a waiting state until the first video packets arrive, after which real-time playback initiates instantly. - -\begin{figure}[H] - \centering - \begin{minipage}{0.48\textwidth} - \centering - \includegraphics[width=\textwidth]{assets/client_waiting_stream.png} - \caption{Client GUI in waiting state} - \label{fig:client_waiting} - \end{minipage} - \hfill - \begin{minipage}{0.48\textwidth} - \centering - \includegraphics[width=\textwidth]{assets/Client_Init.png} - \caption{Client GUI displaying the video stream} - \label{fig:client_running} - \end{minipage} -\end{figure} - -This sequential rendering confirms that the application effectively leverages IP Multicast's inherent scalability capabilities to serve unlimited concurrent watchers with zero additional overhead on the server. - -\begin{figure}[H] - \centering - \includegraphics[width=0.8\textwidth]{assets/Client_running_2.png} - \caption{Multiple Client windows running simultaneously on the same screen} - \label{fig:multiple_clients} -\end{figure} - -\section{Statistics, Loss Detection, and IGMP Leave} -During execution, the loss detection logic performs exceptionally. Each UI instance displays its own live counter. If a network disruption occurs (or frames are deliberately dropped by temporarily suspending the server/client), the client accurately identifies the skipped frame numbers based on our Custom Packet header and updates the "Packets Lost" and "Loss Rate \%" counters dynamically. - -\begin{figure}[H] - \centering - \includegraphics[width=0.8\textwidth]{assets/Statistics.png} - \caption{Client GUI highlighting the "Packets Lost" and "Loss Rate" statistics} - \label{fig:client_loss} -\end{figure} - -When a client application is closed via the window manager, the application intercepts the \texttt{WM\_DELETE\_WINDOW} event and successfully executes \texttt{IP\_DROP\_MEMBERSHIP} on the socket. This forces the OS to send an IGMP Leave message, properly exiting the group and preventing continued unnecessary network traffic caching by local routers. - -\end{document} diff --git a/doc/report_template.toc b/doc/report_template.toc deleted file mode 100644 index eaad193..0000000 --- a/doc/report_template.toc +++ /dev/null @@ -1,16 +0,0 @@ -\babel@toc {english}{}\relax -\contentsline {chapter}{\numberline {1}Introduction and Specifications}{1}{chapter.1}% -\contentsline {section}{\numberline {1.1}Project Overview}{1}{section.1.1}% -\contentsline {section}{\numberline {1.2}Group Members and Task Allocation}{1}{section.1.2}% -\contentsline {chapter}{\numberline {2}System Architecture and Protocol Design}{2}{chapter.2}% -\contentsline {section}{\numberline {2.1}Multicast Streaming Paradigm}{2}{section.2.1}% -\contentsline {section}{\numberline {2.2}Custom Packet Format}{2}{section.2.2}% -\contentsline {section}{\numberline {2.3}Concurrent Clients and Loss Detection Algorithm}{3}{section.2.3}% -\contentsline {chapter}{\numberline {3}Code Implementation Details}{4}{chapter.3}% -\contentsline {section}{\numberline {3.1}Custom Packet Encoding/Decoding (\texttt {CustomPacket.py})}{4}{section.3.1}% -\contentsline {section}{\numberline {3.2}Server Implementation (\texttt {Server.py})}{4}{section.3.2}% -\contentsline {section}{\numberline {3.3}Client Implementation and GUI Threading (\texttt {Client.py})}{5}{section.3.3}% -\contentsline {chapter}{\numberline {4}Verification and Experimental Results}{6}{chapter.4}% -\contentsline {section}{\numberline {4.1}Server Operation and Initialization}{6}{section.4.1}% -\contentsline {section}{\numberline {4.2}Client Playback and Concurrency}{6}{section.4.2}% -\contentsline {section}{\numberline {4.3}Statistics, Loss Detection, and IGMP Leave}{7}{section.4.3}% diff --git a/project_requirement.md b/project_requirement.md deleted file mode 100644 index f5d55c9..0000000 --- a/project_requirement.md +++ /dev/null @@ -1,66 +0,0 @@ -# Socket Programming Project Video Streaming using IP Multicast - -**Description**\ -Implement a multicast video streaming application. The server -continuously broadcasts MJPEG video frames to a multicast group, and -multiple clients join the group to watch the stream. No RTSP, RTP, -TCP/UDP selection, or separate control/data channels are required. - -## Architecture - -Server -\> Multicast Group (239.1.1.1:5004) -\> Multiple Clients - -![](media/image1.png){width="4.40625in" height="4.0625in"} - -## Functional Requirements - -Server: - -- Read a MJPEG video file frame by frame. - -- Packetize each frame. - -- Send every frame to a multicast IP address. - -- Broadcast frames at approximately 20 FPS (50 ms/frame). - -- Continue streaming until the video ends. - -- Restart the video automatically after reaching the last frame - - Client: - -- Join the multicast group. - -- Receive multicast packets. - -- Decode received packets. - -- Display the video in real time. - -- Leave the multicast group when exiting. - -## Running - -Server:\ -python Server.py \\ -\ -Client:\ -python Client.py - -## Grading Rubric (10 pts) - - ----------------------- ----------------------- ------------------------ - Requirement Points Description - - Server implementation 2.5 Multicast server - - Client implementation 2.5 Receive/display video - - Packet format 2.0 Custom packet - - Multiple clients & loss 2.0 Concurrency/statistics - detection - - Report 1.0 Architecture/testing - ----------------------- ----------------------- ------------------------