From 11bd673596cf8d888b0e8f6ecdf890cb6bf06987 Mon Sep 17 00:00:00 2001
From: Mai Pham <maitp2@illinois.edu>
Date: Sun, 25 Sep 2022 19:53:57 -0500
Subject: [PATCH] Fix_bug7

---
 .gitignore                                    |   1 +
 .../mp2_membership_jar/mp2-membership.jar     | Bin 88351 -> 89129 bytes
 send_jars.sh                                  |  12 ++
 src/main/java/cs425/mp2/Constant.java         |   2 +
 src/main/java/cs425/mp2/Introducer.java       |   5 +-
 src/main/java/cs425/mp2/Member.java           | 116 +++++++++++++-----
 src/main/java/cs425/mp2/MemberInfo.java       |   4 +
 src/main/java/cs425/mp2/Receiver.java         |  20 ++-
 src/main/java/cs425/mp2/test/Server.java      |  13 +-
 target/classes/cs425/mp2/Constant.class       | Bin 324 -> 357 bytes
 target/classes/cs425/mp2/Introducer$1.class   | Bin 595 -> 595 bytes
 target/classes/cs425/mp2/Introducer.class     | Bin 3995 -> 4068 bytes
 target/classes/cs425/mp2/Member$1.class       | Bin 3608 -> 3801 bytes
 target/classes/cs425/mp2/Member$2.class       | Bin 3091 -> 3095 bytes
 target/classes/cs425/mp2/Member.class         | Bin 8039 -> 8877 bytes
 target/classes/cs425/mp2/MemberInfo.class     | Bin 1710 -> 1808 bytes
 target/classes/cs425/mp2/Receiver.class       | Bin 1912 -> 2220 bytes
 target/classes/cs425/mp2/test/Server.class    | Bin 3030 -> 2973 bytes
 18 files changed, 135 insertions(+), 38 deletions(-)
 create mode 100644 send_jars.sh

diff --git a/.gitignore b/.gitignore
index 1c2d52b..40c802c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
 .idea/*
+log/
diff --git a/out/artifacts/mp2_membership_jar/mp2-membership.jar b/out/artifacts/mp2_membership_jar/mp2-membership.jar
index f1f2ff116416205efad483410f8ac67de95aa68c..8496664df44dac3196f5501fe809891e728a0cb7 100644
GIT binary patch
delta 16571
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
D!ITy<

delta 15958
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
U2nem0zY7TjL^}V=Appex0pSmz_W%F@

diff --git a/send_jars.sh b/send_jars.sh
new file mode 100644
index 0000000..3a14855
--- /dev/null
+++ b/send_jars.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+# This bash will send Client and server jars files to all VMs
+upperlim=10
+
+for ((i=1; i<=upperlim; i++)); do
+        echo "Sending jar file to VM $i"
+        if [ "$i" -lt 10 ]; then
+          scp -r out/artifacts/ maitp2@fa22-cs425-520$i.cs.illinois.edu:/home/maitp2/
+        else
+          scp -r out/artifacts/ maitp2@fa22-cs425-52$i.cs.illinois.edu:/home/maitp2/
+        fi
+done
diff --git a/src/main/java/cs425/mp2/Constant.java b/src/main/java/cs425/mp2/Constant.java
index 6921c12..b1c6cde 100644
--- a/src/main/java/cs425/mp2/Constant.java
+++ b/src/main/java/cs425/mp2/Constant.java
@@ -2,4 +2,6 @@ package cs425.mp2;
 
 public class Constant {
     public static final int waitingTime = 1000;
+    public static final int SleepTime = 2000;
+    public static final String logDir = "/home/maitp2/";
 }
diff --git a/src/main/java/cs425/mp2/Introducer.java b/src/main/java/cs425/mp2/Introducer.java
index 1aeac1d..b73ef05 100644
--- a/src/main/java/cs425/mp2/Introducer.java
+++ b/src/main/java/cs425/mp2/Introducer.java
@@ -5,6 +5,7 @@ import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.net.ServerSocket;
 import java.net.Socket;
+import java.net.SocketException;
 import java.net.UnknownHostException;
 import java.util.List;
 import java.util.concurrent.Executors;
@@ -42,7 +43,9 @@ public class Introducer extends Member {
 
     @Override
     protected void leaveMembership() {
-        this.memberList.remove(this.memberInfo.getID());
+        memberList.remove(this.memberInfo.getID());
+        this.status.set(Status.NOT_IN_MEMBERLIST);
+        receiver.close();
         logger.info("Introducer has left!");
     }
 
diff --git a/src/main/java/cs425/mp2/Member.java b/src/main/java/cs425/mp2/Member.java
index 1c04e20..33a1a50 100644
--- a/src/main/java/cs425/mp2/Member.java
+++ b/src/main/java/cs425/mp2/Member.java
@@ -8,7 +8,9 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.logging.FileHandler;
 import java.util.logging.Logger;
+import java.util.logging.SimpleFormatter;
 
 public class Member extends Thread {
     private boolean isIntroducer;
@@ -17,16 +19,21 @@ public class Member extends Thread {
 
     protected AtomicReference<Status> status = new AtomicReference<>(Status.NOT_IN_MEMBERLIST);
     protected MemberInfo memberInfo;
-    protected final String id;
+    protected String id;
     protected List<String> memberList = new ArrayList<>();
-    protected static final Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
     protected AtomicBoolean isAck = new AtomicBoolean(false);
     protected String ackRevID = null;
     protected MessageInfo memberMesStatus;
     protected Queue<MessageInfo> operationQueue;
     protected Receiver receiver = null;
 
+    protected static final Logger logger = Logger.getLogger("MP2_Logger");
+    protected FileHandler loggerFile ;
+//    protected AtomicBoolean terminate = new AtomicBoolean(false);
+//    protected int port;
+
     public Member(int port, boolean isIntroducer, String introHost, int introPort) throws UnknownHostException {
+//        this.port = port;
         this.memberInfo = new MemberInfo(port);
         this.id = this.memberInfo.getID();
         this.isIntroducer = isIntroducer;
@@ -34,6 +41,16 @@ public class Member extends Thread {
         this.introPort = introPort;
         this.memberMesStatus = new MessageInfo(MessageType.PING, id, " ");
         this.operationQueue = new LinkedList<>();
+
+        try {
+            loggerFile = new FileHandler(Constant.logDir + memberInfo.getPort() + ".log");
+            logger.addHandler(loggerFile);
+            SimpleFormatter formatter = new SimpleFormatter();
+            loggerFile.setFormatter(formatter);
+            logger.setUseParentHandlers(false);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
     }
 
     public void start() {
@@ -60,13 +77,16 @@ public class Member extends Thread {
      */
     protected void SWIMSend(ExecutorService executors) {
         executors.execute(new Runnable() {
-//            MessageInfo memberMesStatus;
             @Override
             public void run() {
                 int countToStop = Math.min((memberList.size() - 1), 4);
+//                if (status.get() == Status.NEW_JOIN) {
+//                    System.out.println(status.get());
+//                }
                 while (true) {
-//                    if ()
-//                    MessageInfo memberMesStatus = new MessageInfo(MessageType.PING, id, " ");
+//                    if (status.get() == Status.NEW_JOIN) {
+//                        System.out.println("debug ");
+//                    }
 
                     if (status.get() == Status.NOT_IN_MEMBERLIST || memberList.size() <= 1) {
                         /*
@@ -101,7 +121,6 @@ public class Member extends Thread {
                                 memberMesStatus = new MessageInfo(MessageType.PING, id, " ");
                             }
                         } else {
-//                            System.out.println(operationQueue.size());
                             if (countToStop >= Math.min((memberList.size() - 1), 4)) {
                                 memberMesStatus = operationQueue.remove();
                                 countToStop = 0;
@@ -110,25 +129,35 @@ public class Member extends Thread {
                         countToStop ++;
 
                         ackRevID = idToPing;
-
-                        synchronized (isAck) {
-                            isAck.set(true);
-//                            isAck.notify();
-                        }
-                        if (memberMesStatus.getMessageType() == MessageType.NEW_JOIN)
-                        System.out.println("debug " + memberMesStatus.getMessageType() + " " + memberMesStatus.getInfo());
+                        isAck.set(true);
+//                        synchronized (isAck) {
+//
+//                        }
+//                        if (memberMesStatus.getMessageType() == MessageType.NEW_JOIN)
+//                        System.out.println("debug " + memberMesStatus.getMessageType() + " " + memberMesStatus.getInfo());
                         sender.send(idToPing, memberMesStatus.getMessageType(), memberMesStatus.getInfo());
+                        logger.info("Sending from ID=" +memberInfo.getID() + " to ID=" +
+                                    idToPing + " with MessageType "+ memberMesStatus.getMessageType() +
+                                    " and content " + memberMesStatus.getInfo());
 
                         long startTime = System.currentTimeMillis(); //fetch starting time
                         while((System.currentTimeMillis()-startTime) <= Constant.waitingTime) {
                             if (!isAck.get()) {
+                                logger.info("Wait to receive ACK from ID=" + idToPing);
                                 break;
                             }
                         }
                         if (isAck.get()) {
                             operationQueue.add(new MessageInfo(MessageType.LEAVE_FAIL, idToPing));
                             isAck.set(false);
+                            logger.info("Fail to receiving ACK from ID=" + idToPing + ". Starting to dissemination");
                         }
+
+//                        try {
+//                            Thread.sleep(Constant.SleepTime);
+//                        } catch (InterruptedException e) {
+//                            throw new RuntimeException(e);
+//                        }
                     }
 
                 }
@@ -145,41 +174,46 @@ public class Member extends Thread {
                 } else if (messRev.getMessageType() == MessageType.NEW_JOIN && !memberList.contains(messRev.getInfo())) {
                     memberList.add(messRev.getInfo());
                     operationQueue.add(messRev);
-                    System.out.println("Debug " + memberList.size());
                 }
             }
 
             @Override
             public void run() {
-
+//                try {
+//                    DatagramSocket socket = new DatagramSocket(this.receiverInfo.getPort());
+//                } catch (SocketException e) {
+//                    e.printStackTrace();
+//                }
                 while (true) {
                     if (status.get() == Status.NOT_IN_MEMBERLIST || receiver == null) {
                         continue;
                     }
 
                     MessageInfo messRev = receiver.receive();
-                    if (messRev.getMessageType() == MessageType.NEW_JOIN) {
-                        System.out.println("Debug " + messRev.getInfo());
-                        System.out.println(isAck);
-                    }
+                    logger.info("Receiving message from ID=" + messRev.getMemID() +
+                                " with messageType " + messRev.getMessageType() +
+                                " and content "+messRev.getInfo());
                     if (isAck.get()) {
                         if (messRev.getMemID().equals(ackRevID)) {
+                            logger.info("Successfully receive expected ACK from "+ackRevID + ". Staring dissemination");
                             isAck.set(false);
                             dissemination(messRev);
                             continue;
                         }
                     }
                     dissemination(messRev);
-                    if (messRev.getMessageType() == MessageType.NEW_JOIN) {
-                        System.out.println("Debug " + memberList.size());
-                        System.out.println("Debug " + memberMesStatus.getMessageType());
-                        System.out.println("Debug " + memberMesStatus.getInfo());
-                    }
                     Sender sender = new Sender(memberInfo);
+                    logger.info("Starting to ACK to ID="+messRev.getMemID() +
+                                " with messageType " +memberMesStatus.getMessageType() +
+                                " and content " + memberMesStatus.getInfo());
                     sender.send(messRev.getMemID(),
                             memberMesStatus.getMessageType(),
                             memberMesStatus.getInfo());
-
+//                    try {
+//                        Thread.sleep(Constant.SleepTime);
+//                    } catch (InterruptedException e) {
+//                        throw new RuntimeException(e);
+//                    }
                 }
             }
         });
@@ -191,10 +225,7 @@ public class Member extends Thread {
         try {
             command = reader.readLine();
         } catch (IOException e) {
-//            if (receiver != null) {
-//                receiver.close();
-//            }
-            receiver = null;
+//            receiver.close();
             System.err.println("Cannot get input from commandline");
         }
         switch (Objects.requireNonNull(command).toLowerCase()) {
@@ -248,6 +279,9 @@ public class Member extends Thread {
         if (this.status.get() == Status.IN_MEMBERLIST)
             return;
 
+        this.memberInfo.setTimestamp(System.currentTimeMillis());
+        id = this.memberInfo.getID();
+
         try {
             Socket socket = new Socket(this.introHost, this.introPort);
 
@@ -272,8 +306,17 @@ public class Member extends Thread {
                 status.notify();
             }
             receiver = new Receiver(memberInfo);
+//            if (receiver == null) {
+//
+//            } else {
+//                receiver.reuseSocket();
+//            }
+
+//            terminate.set(false);
+//            terminate = new AtomicBoolean(false);
 
         } catch (IOException e) {
+            e.printStackTrace();
             System.err.println("Cannot establish TCP connection to Introducer");
         } catch (ClassNotFoundException e) {
             System.err.println("Fail to read message from introducer");
@@ -281,10 +324,21 @@ public class Member extends Thread {
 
     }
 
+    protected void reset() {
+//        receiver.close();
+        this.memberMesStatus = new MessageInfo(MessageType.PING, id, " ");
+        this.operationQueue = new LinkedList<>();
+        this.status = new AtomicReference<>(Status.NOT_IN_MEMBERLIST);
+        memberList = new ArrayList<>();
+        isAck = new AtomicBoolean(false);
+        ackRevID = null;
+//        terminate.set(true);
+//        terminate = new AtomicBoolean(true);
+    }
+
     protected void leaveMembership() {
         memberList.remove(this.memberInfo.getID());
-        this.status.set(Status.NOT_IN_MEMBERLIST);
-        receiver = null;
+        reset();
     }
 
     protected void printAllMembers() {
diff --git a/src/main/java/cs425/mp2/MemberInfo.java b/src/main/java/cs425/mp2/MemberInfo.java
index 7dcecc8..cf10567 100644
--- a/src/main/java/cs425/mp2/MemberInfo.java
+++ b/src/main/java/cs425/mp2/MemberInfo.java
@@ -36,6 +36,10 @@ public class MemberInfo {
                 port;
     }
 
+    public void setTimestamp(long timestamp) {
+        this.timestamp = timestamp;
+    }
+
     public static MemberInfo fromString(String s) {
 //        if (s.isEmpty()) return null;
         String[] ss = s.split("::");
diff --git a/src/main/java/cs425/mp2/Receiver.java b/src/main/java/cs425/mp2/Receiver.java
index ddfe122..c3235c7 100644
--- a/src/main/java/cs425/mp2/Receiver.java
+++ b/src/main/java/cs425/mp2/Receiver.java
@@ -3,6 +3,7 @@ package cs425.mp2;
 import java.io.IOException;
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
+import java.net.InetSocketAddress;
 import java.net.SocketException;
 import java.util.Arrays;
 
@@ -25,6 +26,7 @@ public class Receiver {
         try {
             socket.receive(revPacket);
         } catch (IOException e) {
+            e.printStackTrace();
             System.err.println("Error receiving udp mess");
         }
         return MessageInfo.fromString(data(mes).toString());
@@ -45,7 +47,23 @@ public class Receiver {
     }
 
     public void close() {
-        this.socket.close();
+        socket.close();
+
+    }
+
+    public void reuseSocket() {
+        if (!socket.isClosed()) return;
+        try {
+//            this.socket.bind(new InetSocketAddress(this.receiverInfo.getPort()));
+            this.socket = new DatagramSocket(receiverInfo.getPort());
+        } catch (SocketException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public boolean isSocketClose() {
+        return socket.isClosed();
     }
 
 }
diff --git a/src/main/java/cs425/mp2/test/Server.java b/src/main/java/cs425/mp2/test/Server.java
index 91d017d..5caa7e8 100644
--- a/src/main/java/cs425/mp2/test/Server.java
+++ b/src/main/java/cs425/mp2/test/Server.java
@@ -93,13 +93,16 @@ public class Server {
                 // Clear the buffer after every message.
                 receive = new byte[65535];
 //                i = new AtomicBoolean(true);
-                synchronized (i) {
-                    i = new AtomicBoolean(false);
-                    i.notify();
+//                synchronized (i) {
+//                    i = new AtomicBoolean(false);
+//                    i.notify();
 ////                    i += 1;
 ////                    System.out.println(i + " 2");
-                }
+//                }
 
+                System.out.println(ds.isClosed());
+                ds.close();
+                System.out.println(ds.isClosed());
             }
 
         } catch (IOException e) {
@@ -123,7 +126,7 @@ public class Server {
         long startTime = System.currentTimeMillis(); //fetch starting time
         while((System.currentTimeMillis()-startTime)<10000) {
             synchronized (i) {
-                System.out.println(i.get());
+//                System.out.println(i.get());
 //                        i.wait(1000);
 //                if (i.get()) {
 //                    System.out.println(i.get());
diff --git a/target/classes/cs425/mp2/Constant.class b/target/classes/cs425/mp2/Constant.class
index fcf70719aa7b4067133ed6194f70f92d83fce128..b92fc00386da3b6b474063c14b93b6ee1c13a8a8 100644
GIT binary patch
delta 162
zcmX@Y^pr{T)W2Q(7#J8#7{s_3m>GoG8AR9_L??=B@^c2~q^1^xWag$aGcd4Um}pbQ
z%*DVxai?Jx6N4lJ3j-?yBLf>yCldoZkk5g{=LE_yG5{3=NgkjIeK4PafmLfe1LH=p
i7G5C91{7uh+Q|nbdBAK|27U$sAditj5J)mH2mt^JXAuYh

delta 130
zcmW-Zy$!-J7)0M^<2aZ=AdrF)pg~C4BR!L_hDV`7qM)M69;^}N<mT!Abbt4A{WO2R
zz`!ZtIYhe1G541|K7GwPPxps$W<|iLv~)x%L#3FM+=_>AePgdO*@%^5^x23_(Sa>H
JIinRF`vt&`3`qb0

diff --git a/target/classes/cs425/mp2/Introducer$1.class b/target/classes/cs425/mp2/Introducer$1.class
index b96ff1174d6ad84674ff2ca35d78fcce8cbe7731..9e7d6f0ad38b90bbf9f59d6aef73c86987e33cfd 100644
GIT binary patch
delta 23
fcmcc2a+zhrIYvg=$>$k8Srr)A85AeWGMNDYT_grA

delta 23
fcmcc2a+zhrIYvgA$>$k8S>+kn85AbVGMNDYT?Ym#

diff --git a/target/classes/cs425/mp2/Introducer.class b/target/classes/cs425/mp2/Introducer.class
index b66766471a11586b82a82dd3c44a9e7078e82db0..c8824ae2d8199d77f431708bb0e99b65a631822e 100644
GIT binary patch
delta 1603
zcmYk6d0bRg6vw}B7T)7=1sp{kD8VfiMAS?KwE|aChH@w)D?=C&CCFj0Op6w+EX?Yq
zm9|-y?Iq}-QbuN0mR7b}*=qZ~`A46M&K>xuGxN?p%RRsIyZ4+o>(dXXH}3s!$4+20
zM{Fjrz~)pI#*0>?#l>3GYEhTKB`nffIG%bUHVrH`xm0^Dvq@ly)-Km#sl_szE4b36
z(Z<JB7FX-_8k=ibZm~ie*V$ap4YFgUO)57ga1%|s_A0&UW{cIj-YvS+ts4C{3r9z8
zH(6sdh_x1XXqY>-ahJ(DoAumnlgT|=+-q{5#r-zJ*<kX34nAlzl8stCWbv@cCX+|v
zd9)9YSv+p@1W(#L#nTqgm~1v_Zc&CZj26f5I%12x&SZ-uIevFZ-Z=ynlh~>_odQK6
z6BSWf7261yY**}{P4O(xne0?NPrJzrie0?uY;gB(+|5fmdynE}UQxWtUISn0{ObA)
z`4!bh!gZAm6``=nYl_#|XV7~=`Qq}Nn)2GJoM0qeU0YSyP+e0Q3Tu?0LBg?|48?xl
zFnLq)76%NhjQU7<I1;K<yv+fVcNFisc+bi6q@_$^p2_=)4>+ipsZaDF2b^k8+LVtp
z`;Tc?9MbqbkHeo|UY}7DniuJ(_=HalQexC<Ly??dD7-in4%SsH3`I1t&zyEouC<@f
z6<_eB)8Xlxd|2@nU+dsEif{SO$@co)-}8f0<W2APBR}cL&x&8<o*KM!<9=2A#_!G{
zZ))Nnia*&W9Z>v5u*Dm<+wJcjC@Gy&6qr*yxwvrh%o#<&QUh;AO<jG<p7?{tfC(~7
z;F7QOD5go9WR1g+GLywW#o3iGy>Y7e`eKUgfkhJCNS3kcNd_r0N4?0SH`64ViAQ8U
zMVuk4)}}K<u(Vc8K=8CyB0e`~itdrvS@Ouuiku>zr7<5AG?U~@j?!J$Hm6DD=V}hU
z@QO?m4ks{-6B*9{VLmWcTgB=Wbk+7y+KK7>tFmJJ6Qw2$p*utI3scRvGbi<E&e=zK
zgoLZ+ot3!-uRJPB-|b|$m?ehQOus0$Xo*q!Yo-H)>1NsP;uy{0QYuHtj-au>yil2p
zI<96`S4|i4o^+nwSS@Fd6Ogr?^#+d5Y-3PaS}P}Q#iQ>5Us)?Xe1oH;q(vDLrH_=&
zl--^vL$~5?BeP5_ca*GFh7}KslHJbmfUhw}yxwh$$oI4{vTMtzR!+|M`n`Th9<9%C
zihyk*Inc~lUtW~_>?q?lb!?oW?eSu7mJ6K95|%NhYt0q1P4XQRiy%$+iD!(oCs&4J
zEZK|`c^Y#61=96G&XcKHAak`S1~6TqrpaGm5i2BhrA$SWOvx&llQl9Ox<4}oszh#X
zmiXL~ozA(Uc?2VgGO@jqt(eXEF#?5Lz=hHRi{)K&w@UQc%$XQ#<=U<*zes=w<N1ed
zqeJ7Glp7{<5mE6sszY~Pd|Ff{TZEXW`{M+Xdc|f?zZ;NvTra&;#pd0`e2KWImLr2L
J`%-0<&;Nk-JbwTH

delta 1557
zcmZvcYgANK6vuye9^A|206HqGL061osUtY4D2k+Emia`%GAuKMDZl_72Ft`IODjsV
zx=9auXW6?HoiQ=BvWHgoGJC)6{j?9QRjZZlGqBVT&7HgVKKtzb-}{{XU-wW>droZM
zzuR{L1^jL^jvAX{YE#9k(_)bpmuOL+Mgxu7TAa!fA~sD#O`5f5sZAP}YU?sBmRVeG
zvz!)_6*fMuu!w1WrOisNvbb6=R@toP8k5+yHrZU4Ml09r+BfK+H5O}iy&Emo>Ge$}
zH{0ZLi-n_;Z`F(SCT%vial6f6?$F{+lXi={Z1T9<<Q~0wuT6;iw7B2m0h0$!Hl*?p
z4_j=sd4xwZY#!rriziH;G<m8c%TR{#w3F-l)0TCc$upAV<hn~^bC|7|$R@>jCMZs$
zM6sC;#TKTUY*oZbD7Nve$#z92J4~Ka>|~dLud1nF#HdjH;t`>;a8<Z=X*i<T&GQ=X
z1;vZ(QM|;<5;&)(wkaV0DGkv`V|8;?IAZdO;#KxKhu!_gPGq)0+Of@mVjr)WysmhI
z{RUQ`DOwqchN~5Cvftz_#oN4Nkmbxu>0LN*xGq?2@~+|l?<r>KBOTO<S;t}4R5k_b
z8fzQE)%_LklW^KS{=f%(Xwavwa%p9#Ash{rha+-`^2Vw~;iv}v$T{FC9KDZ^6`$~_
zfj=2p+ZZZcSQoB}PH9-&94(JV!j<(VpD8})3!U|);w!#(O1yseA--|udvnsi<vYFe
zz2XOUIj!D>DL*QH;%DcuH#_4O#jos@nJ9i^c85P@kGtcq)PqLuIAIRB<dNAVEg6sK
z6bu17UHp@rKhmbf&Jf>;m?C{xWROm#SiK0)n;?A{OBQF!ZV->iA|`W|Xl+els$gkr
z8q)<&TQkJxW~SI4*(;S-E>z?s@hngJpky<dz8-OUitcoFsG>sMLl$0<+0sK_^5`es
z4-i7-CTpu?os#a_9?H5fo&5BnA)T8cHDM4vh4Frd9G8=QG^hM%jz1P~F;_RyUz*q?
znJ$i@<O|9$K?(g2iVI<U*J+G(a+(y$Z3}Ke#Tif>>?F6MZ-Rka@#vG`t4PqxcT$`_
zedC-Q=LD%1lxR;Z&Y-QhI~iOdOLv?h34$~7;tbtQ-b`P<IKA5#R^;g<)E#k3g5gD8
zzt``HGeWmMQouISW9DW?`wHWX$&WL3<B<*1^}0ybo8(F+vy2w`jCJWz((D>}3W&Lr
z=bb8ZhLLjP1v2YV<TFN|VhJBFlbgUi;Y*!xWr<90nM}P!vR25gtd@vYnf@A?^;((z
zdYQUrNSPp&3Qx`!Hn=4_hjYa82u3DzIalVp0!0P$V#(enavtZ))myCUrqWumE0~`g
zcAFH@M7u!VL3sWl-#8+?a+@qLOfE!3<=?0y0wCrBEf)5$sG_=?Z6VQ`o!(#q<Jgcj
g{X+=Lb;n)2@)Ay#a&eLPTwKhlqHPJx7A?R30P0pPN&o-=

diff --git a/target/classes/cs425/mp2/Member$1.class b/target/classes/cs425/mp2/Member$1.class
index dfcff489469d1e20c1f14641b305ec6383df0a13..f4b1d1b9a18ef4a085f58889201da4a0881ad207 100644
GIT binary patch
delta 1657
zcmZ{kX>?OX6vuy)rhUm{Jg27%2c%%wq#zI|2x=)73xx_5u@%G(L;D(nZBo)uK!M06
z$_|fRQ4z7OXrTrKMG+MR7Zf+ts^A6)di*9*(U}Bk{op(2-I;su|NigH+&i;A>uCGv
z!SlQK0{!{TO)htt48rH;PA0aZjB*o;3a$E0CJ}HmnY#@twWZ3$O;FE5rV`Z}Kcy96
zYP5(LOx5UG4VY#y-OUW{G0EWGR?K9U_RUtDQKDMEPrK*1n5z-<bj*BhUZ7|9Yq8Me
z0Up%eMOrM@$(LxyQiEkC-SD|suE!N7D_P~jcClLPYh0|=<2sY|Y%tl#Lk15gt1YW9
z=|q<1-Q?mCy?{quJmzAv!Q%#744&ALBx;3OX|UDcNwpz+iNhPMlRU-KlEGXn$)`y2
z3}X~T@+{98JTKYC3z8S9H`p%OL4(0dk{CM$sbw|&bFTDORp)q1tYEnnmh9qXO|x6F
zhhoVqyeiqtYbv4Sb@oZ#pg{#r_SO2lmA;@q!&?#w2ZDades)UU<Sjv_{kxGl(co=u
zJfP{`F?d&UkVBI9H0*sokbJ1=4s$>tJR0<o<YSIVKA}PKsm}fxpBsFk;YTH3@|EOk
z8YSQGt>in7*?W_+qN#f2Y5|^#aHz^tG&E0gobL^Oko-ua!0<#u+AK)(ObbLNd5W!?
z8lT@Pol$M6w8!~LaEZqkEccX!f)OhiQO2KXG&mtS$ti<hB&Ru}!kZ7PAQY^L_<|92
zoKf}(vc~xW5uGP&m05vW%QK{4WQ+Cus`uET&=;s|#^@EdL<!pU_LM|?;fVGqs`5Zh
zja3y0`XYf)@ITp$t*VJuxJ%!78SH%L$Q_%VX->P?-O;XhkLa9I8S?wBu;9{B@hVM?
z1S-ASrii_x;y(MBYf$@)=KUlXi-Hv)L9*Y96b-f8xpN9!kx-(zf;Rt0C2$7fahchP
zbh;@n^h9p=v39*H(?09YZl9|zvLFwUnyOn>HM>Lo`3zCk>+Hd1ySxIWrzj0ZGgQge
zafHb*hAR!sc${h$Mo^@q)P3=*2$!NNu-BTFXtbNm#;7w!r=D$-do&;#=n$jx#aWja
zUAJ@j9=eU+Np@QI7(Eg`GsYE4N$aUZ+hjfKb<w98V)Rb)wzMdw9x?jF=(~%YfhkI~
zPO&oRzj_mey%L-qV+`2%_sJId2CASqdm^%qq-Nv>3KL5D9x}#n=PG-pY#nV8eD%M<
zY1drLU3dPny1$O7qj91SZyBAHyoq#fqaPC(K!rLyKcxiJ3pkm%gjhqhdIF}Xt2|BJ
zzv=3V%n%M{iZ;v=y_qfgFh}%bo*2Y@F+9p5;bXC|St7QwRBTi8dX|eAE5v?Qio>iD
zr?ABt)`~w_=SXM0qXQcpd2Dv%vn5`|!K5hsLat||s#RDVVid(BGfbT0232VXrQ$R<
zGKM5w#|za?cl1#k@t3GFm#RHUJ;q@-E7(|N$;NCVU35B6SA%f|w-}6XqRimda}4R#
l!~*AlvyA>j(I=_X(9L!`cc{^+p6Ce_s+p-cbJeK6e*jC(m0$n>

delta 1457
zcmY+EX>e3U5XXPB+3aLrhALnK2m)nL<Pg{h0R#ah5fTm&2_O-IEXk4tlHIu3gxiIH
zc;Wd#A&Ph)5ygXm%M}5^6Aw@nK}FFjtMr54RWR6-P()wV>z?lazk7PR=e@H%Hg!)N
zZ$5Ac$mSQnh&c{JDe`kSbJMwpc@81wTeH}qgs`6llxoVXr`*BMLc3bzh^Vmq%5)+`
zt*Fx6YuPbNsMf^&)KKe?!Qyn5u+(D9Bxi!<)?Q)Zm1*2(83`M+%DPwERh<=U9M*Eb
zMc4UxfCn`XIrOF|jfbs%#ESJ6e$=iWb9kI5Y=KWY!hTBQrph7ZN%_qt+F-ZasCina
z@{DHF?ry491<Ev=HT6=tMJ({FTki=bo-=IWdBbpSGK?U{u$76zHN3!!nwJbOv(4}d
z+cgb_SJ|O?&G0%q743_wvj-0iR#puT7K9@u;h5nK-n41nGQ7=r!!8;PyV)Z<8{Q#l
z*vk$HTo|ei1uH_4(hk9bc&t29YS_n4!+s99A)S$!5Lpn_9JJmho9|uCA;V#g7~ZqI
zqZ~85Z}WXXlR{l%Ngo<M;$y=n>@Xa++keVun$Io$3&ROcYQ8jl#VJLXD-~QWAg89h
zLQbIYm4xT#*OW@euldG`(}r(3V>rth&3A_H`N43G9}PcoUeU3w3AxcobvzV_+crsQ
zKhxx%@`f`4ZF@~Gi$xcQ=2wJw4@=GP4r=Q|uwZF*JY1<riPppwohG-$lt+V8r8{xy
zQ8-lTp7xJ&Z*;QUiT=!fY4K=l=M=5^|IbzEDjQi5ao0QD+(rI;cfZrON49(cieaes
z?d`<n&UoY<!ASAm>^3`Bj~*qqPb?V2Xpx;;7>-!CiUm$foV1*=<k%>=b_*mTO;UAn
zXQqeMF1IQDT%vHK?`Z!$s6AwQll1E9JJvw@NG-anKHLiQOmb}_owhT)k?Ri9yKpbp
zckGj-ZyTJXU&rqM_4F4b$qh*c4CtEL#=Ei-eBeF?4IkkX+1VG)AZx=G0<CyvlEL+t
zes3V9&E8C(RwHnbjKW5SxO3ZePBb)6YWU|89+jtNs9B(9sUoZKVjHxMOp!SR$YThT
zq@mLoM*-8BL5!KyF`JFdk(*z{5sKyNmGCQJ<)K_%#X>cRMJkJk8bXyCMNH*Ut)@|<
z=25GvSgaD;SfUQGOdVsnI>`!kj+N>>tJEK?_V}ptbYQJV{uV708iP-GQ^@5unL|u%
zl~Tr&$~bjG%FCDeO;<;lz(i8)j4n?y;PFb~lVyUp%TbKzR@M|@-BB&BNwm92K=o>-
zw`Qv5PR+E76l)4DFm~W2`k=MMT)_m;a(r>j{2P6N+>7+|cK?g4Kc#{c?vj)qW>F~G
REC0ON+#)MS_RSV8&%ZgBN|FEo

diff --git a/target/classes/cs425/mp2/Member$2.class b/target/classes/cs425/mp2/Member$2.class
index 1357f7f084321c4d854e675020d0fdcff205b413..6d60a1aa768f86e8845ff29c4f7d78507c291b66 100644
GIT binary patch
delta 1531
zcmZ{k*>_V_6vlrirMb!NLE9ju7K#@rQYaEEpp~gIDV2gqk-<5nw;|XjwMiMP!5Ia|
zt0E4F15{-$7(|pMDxxk$MSbwe2VMFH_~cp&?vs>KAIx1jd++ajd*APzea`jDww7hS
zI{U$KU?N9@RCB$}SmxT)b3>4MGz6K$d=oAx;zkyl;U<GEDx#6ahH|sP#GAtso24uZ
zvYcB?c&p8A+-|%(Ebg=!z}x_L85=PLR|JSku!N=nu0fk^Vyra$xXmi=HeQQOD~SNf
z0Br`m#}<w47AZ5Cwi!uBfYl~gV}i97>nzq=Y&iJSD5W~Re^fYgujW27nsJ0R<C$*J
zsoBW=77u71<RQ(&JfeA&O%{)79%r*=iy5BaNsFg6Pn+NwLwpv`;yKOpykN0a^CH_c
zFY&U)E1Fl?u6d0eib1O)t0Uo-NFo+)OnX~={WIl@+^8F09Z$rZRyUQ3#9XJjJ=yBi
z&z`1voi{XZvPltg*2L2*&r=q!YjYhl{g$G?6G=2V(PSd+Cei}#G-`Kgx_Ddj4)0p*
zHnR3;_Oj1nzvcj&6{8wEqER=MNi}!0w5)U5b1GcNUEAhH({7V9W7fR95D`7jX-r4j
zjl`ySD&@Au6OnX0na~`hTT{z5isEQ$V$Gy*Yg<jY(M>eD?V3XzHoN+sqSU0PO@2C=
zD=a3rzAXMJnj^e_sJ7sYI`nH{g&N^+NycJsyP~`yw^<$OcuUw|k{@o!&3UzjQ-gt+
zo1X8s*3b5SvueB@g+;Yx|HoJKizk|sih))6nmr9LOPVrziFejt>n*S*cw4NwUTI*a
z_oEf^mIdl7s^!Ehu0RzRn=>MJp+NrQxl+&??|5MFv<VXXB|>(3qKu{ZWVD&Y)nbij
z@{~NXOD0ROGr}>fPOmgLJyTbmrJ$RlT}&Et7<HIJ0sKd?d~$q-{|C}Omga$A^-*kz
z4oaB<jEJFFGVZ2=J@U%E)Ui+Q*nYVq2iQP&A90<%;yRg3W{RkqDyjYO)fs;p)AKsj
zX~AT@sxtr1{#h>S=Hi{_{>;b4r|@^3`@JW~Qqs^(=okZ*AK{YFz$~S*jzMBVWqH3K
z%cY_6yzdv2WpI`unS6dlmZ962XHxROWm%kUOzu;1nB?@%m4=4*mguP<^+$}60+n6o
z7Uk?QMlR3KU4Dd7^ZS&l%BwKyGC6s9+Gy#-d6B)y1*u~%s58vIj4@qjf9Y+-3d+R)
zka9kfc6>|~Cz#DAEaX%90G^Pxd`6s;tmkvKXE-HC=L_l9mvWoFCd)T6b(%l;mcRH;
z`8cf#`CgT9Mh)f%HB|gz{G98jBkidY)?`fMPD<fAt~EzXRrd7QG}ac@kiX66X@+<+
Y1@SRU1euo4q2xNQ%8`_OK6Af+0p3DePyhe`

delta 1496
zcmZvcTU3-)6vuyuf%%x>gp<Z40wl{EE-^}A8W?3{k)Rfaq1^z#2xNd@z_80?WfwDV
zpJ|vTS%Q=|ZbL}R9$Tx29$c%{b1yx%T&qV-+Gl3Ma>*>txA#8(eLMes&XG(fGyL=Q
zi<f{>W<2EcxR(OfczJ>+Jyi3QhsRiJ)S47(S!b5@#<n4ar+LOe>WodKjXY~n?<JKr
z$!s#;=gdxnkv5xUi<jql!8pI@<t1MB&`6V~Ui4-!Td~c~D+bfz<yBfu(l%q;=B1sW
zv2}Q*!cJrBG67$+=r&4^m&Jt4(reLYvEAbJ(O;J+)$jbR0vmT|-r!A55%+6~sj%qR
zyv5rVVa+@2)V#}kn)lgd@qy+;KGJ+_mfd_}u}AZ%QTDRaVxML|2NW636?aBh;jXfq
zdRy`|2XQoq_{>O$HAhUW&ou)a)qKG*i{qLvIbkuV`HGX8uldH}lxB!w&1psq_FIeZ
z4D5{NEW0%4IB#)5GivgWF|Jw8gPI9enlzJ(6u#!3(vq@3u&X3cXLoG1yEPG}Oqbtl
zrnxx&gX^*?_O&(kH3r%nJ6ZyD{XHQ&sBm@mh7@Tv(Vf=Lz=rPDj!<2w+inaxzql)W
zi9M}5Y=Qans}<S)YUfXPjz82Xh}Mo4#e!S-DXcCNrM<)Hva-haCgmt+x3xSy%^%AW
z&A+~>&2A2r=hr)ztg_@5J5*~2tE-$V)>_}ZpdD<oyKC*9x=>@Nx5rsvl{n?etDSwx
z)!}@ZN<|^c=QBLYyt?GSn1EQ9iu5oE@&j){;UubHiiA<o5?CgyTQIPP5?Rw@C?23p
zG{HxsDM855#$#QR*e2FsVFcG0i9@V#HhD^On`3&)5Df(rs0ot9;GV`x;3#XH5zoT#
z7`M%k+Azhu`MwCZ$6?dVSHjDJ2zNwCGljXLg)Jgk<h|suPg>beB?n~s4-&+Yi9N&#
z4*#d<!MUObS;0yv_95|hlTdk8Zj+*%ig2t0^&5%ieAKd70qGGk#>hN1`&UfA^C#TH
zvwy^u2w63AofX~Gf$2~hiB&FpF`v64WY0-C11u3(t{B2{C<`Ox4Uit+c15_mKz0`m
z&u))?=Q3@(DO1cL>HlYSOUyk&ON4vpYPxaa;eU@@AUDdMVR4+W`=(e@TNE!=YBiB!
zd1DU#;p>;@*x4+@0>{YWxG*$`UoLJ5Cs`+VcMGTFIU1s$VR<)B%X2Xz19m1X1fG@q
zevThG&+lANF2>Y+##Js8%Fm=K6uFqGD6M(IkzcuEWC|*qRna*X-r`gnf>TK%`x>h(
hDwkfRPkbH`YXXn5TE2<${8h=@Z6;YRV7>_Q_Yc{!KTrSw

diff --git a/target/classes/cs425/mp2/Member.class b/target/classes/cs425/mp2/Member.class
index 92e60a44e4d256c2bd5c20b7c2cb813928ac6023..77522edff6e25cc10f7a19b14f7fcc474221ebe9 100644
GIT binary patch
literal 8877
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
UtQ8=!T!lV_(K__<&&`DY2U58(;{X5v

delta 3925
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

diff --git a/target/classes/cs425/mp2/MemberInfo.class b/target/classes/cs425/mp2/MemberInfo.class
index 19f8585870a39e53742cc5ba5ff9226fd0791678..9a62b1f87c300e9ee6952f8d9e0a5def1b6bffb1 100644
GIT binary patch
delta 416
zcmYk2$4Y}i6h_bdY9@}Oh{RaHwu?0yV~f2-V=uASC=nH6LK0jFK7bn~?;(h|ap42F
z@qJu~_je@&=YAiYxiIrw{#bGU`Sbn(ggG<#=q;s^u%VBB7Xxk`Gz<}O)39d5;HB5a
zsFyK!j=Pv}F=?1$S~FvqC2E*s-pH+(W<gP$NoVs46_a?G&Pl9Vx=!3a-9M<sLYdm~
z*<3Ooze*)@`9vxsQedHVyKt=TnwKoq_%+Lx6;>^41S~bwYSt|qY!<#%OEk`w!ihvI
zakgFTSau0$_AL7xD17I+aHubs%7lW;$<$dg8@stkYYr_(9BWQ2rzBnzPNk#tYqt1H
ztt;ASN6{ePGe(gd@U%6(p<g69GzyJO2v9;RO_Kb7-9s}i(!{5Zdf8D*2c3neXSBT&
XP1irSQCh8-TAmc7TU<qtbcfI{DjYg}

delta 299
zcmWlUxlV#X6h_ZXkb!X|e~cnFq8*AGircTaZzw9FxPe<|Y%pptv7t4w(fluAWkYA-
z1K9XR#+l}P=PPdRy>GG4w#Luj*Ef*mO4C6mipQ8{oUFrytCN~3rk%|wd`*Om!)$~(
zmpO-dhXu_dONwR93agqm*0r75P;3f9ceVRRfyi6EsXbV2FWg?&-y5$YAGC^cP#4d=
zTZT^Jifu!I9m6guLl+6fo}tKo;K{yZi35T3eM5;uhqB>_l;YTM!f8;H-LW%6g{tD*
yaKUBsNqSO*n=heX(Gq2Vbnp?*rTbCVllJ>K(z1s^5;m1xIm9sbT1IS_jQ#`VF)6SB

diff --git a/target/classes/cs425/mp2/Receiver.class b/target/classes/cs425/mp2/Receiver.class
index 074d336dca005fa2713690085500e11fc0717c75..c8206a9c054a821d7aa8fd065bd799333c2d1649 100644
GIT binary patch
delta 1215
zcmZvb%X3p@7>A#eljNM993V{!ZE1QzAZ-)cN?S#Nf=DZ%<)TGOLC_ci253{06mgXe
z|A3s8&N$<a4U3k+z*xtP3upL4blfn*&W+aJchX^S#yK<J<^A5v^IpzhTOYPJp8fOF
zFTf;Udt^A#Mh_<)PI<h~2Oc)FMsnKWOdDr8=klS)N6gu<vEgvu!{=k8cEMrZV;dJ;
z7Cc#8^4QL0k59PbaMfH+nB`NW`<Yn^9u60s7@s>7zgc<VXuqZ~!J<`j#^qWLgFmeK
ziK`Z|;_XVUWMK~tU$972ODna~T%~xcRJYhtuC<QGU+P>6PDlDDcX7<8mp+Tmn}s`t
zv87UdY`Rb{+^7~7TNVoFQ{uYME^herGZ6d`>5YHkQ|4yyYa~B&%jY(W|L5Uc!Gt%K
zOFpAiEYe|=a%Jq)*_pe=(sI3A(bF==f>FCS`4(^cd`Z=z=2K@SxNK*(+~F&qcMRuU
zrh|t4XL8$ewY*fHtIPZOYN1#Pu1CM$Z{e0}VS3jTuSacyh(0A3o&>Hvj-}VvwC)au
zV@Dc$B<oX+VJlH}rj2&G=#YI%9@6YlJND{zK+VYDl4Vdnk!*-z?dD`6Smbn06WNey
z#3Apn56fZ1)zc_rCZH776(p*CB9-{ron0sRJ(g}H&x|xlKEh44H}UdMNi|77rDIh_
zNzwF(%N7aZcC~g9qgyXMI`wPK=<5|>pO^+h+MI%9G;~>Bm!-mO(#C|cpYhP|Zb>JV
zORgb>9W8J>1b@TfO~Zb`S2@&@P4@e8Wt<J>ej{eBuCsmN2|H%(sa$5_TT*##_nUOi
z--}oeHlF8KrTQxMUNL1=|3OuHNc6)Bniv1RhLA@?Y*S?U=b#WxL%KP{;SjcyDUKLe
z$rIS|ziD$gYIW#Qld%aXXno-39usfUwWf0<teY41Y+QYw3<LQsy;fBky1e_+$vt73
z24`DNy1yg3mRrYO&^^*5`h?hz#2?_!=9}zXlWig_zO$L^PNfJ3Bt0nklp1nK19w<q
zkA|UDY28gJ21AG}S6Y)~Qgg8r`lUyrdOFUuRx>oFU$5lV{ZO)2US^sRyqVDd<Rtk_
HsP*2zIiRY7

delta 984
zcmZWmNl#Nz7(KV8+{fbrrOZ;HATqRQK~S7PK~Pa9MM0cvdDb$tq%FjSNlkQZqFot(
z02>!Lq!1x&P5dLqjZ5N2@!Ut%g}KQczTuqno%^=*M{)YguTR?mx)C=~gZ=_kV?g4Z
zi9rmRaN@j<T#&d}fMHxRaM{ENMxDU!uEdxLg>hXrA#ugPRg=Y&CdzTm#C1$bOzTI#
z-frl!8Ht+`w**we3R}??>*b5Dl9Aga$UG5A86+s7GCN|rWLm%#UWg|x0cUI5ROYFp
zzNZd-3j0tiP&F4?2?b+TDmWNQg(8X2;$%ELZ>0#Pa0ho4>TplNi~R!CnRZcaNZeNl
z;X!7{5lDv>W<litVJ1QvMz=py2p}R*W>ZDu!Qt_t$6;$J6^+LTI+RGn6TZDcqOpi?
zd3MRSXeE;hM{!Ky5uy@v3iDX_L$eTyMS_#5L^S4!3@k?%X03$6B4P@?=*w(5zh&0*
z-ZZ0uF4pi<99*2$zHttoc@Wf9&)t`K=ITo~Fjfc2y@<JD6u`~iGWL{mau1qld?T|y
zdhdmS1B^KMKFHO~Q{Oa$Knw3>aP0EokZ6@?gOKnWOa;)c30d%gBzZi8p296-WD{vM
z69{atqiEFs5&7*|6t6;!y@%m(XJH05P@08j17&OM*TQO1LLvV|SHZ=on-Z!yUM-iG
ztBE6N(SCC6i9W<GvgSm)m^sXsK-x_&I?&0PwEoIH{Z3o|5s5B6LbpLz_#wFwUJ*)z
zwfH~7CDt}kKC_OB5ofR8+w~fr0FPH$R8Bv4h}GTifi;%yDQ={Fpn-YRmro_dG?4r)
zWNo7gKSS+*y(T_-C=o2H!Ev0h4XDCNoXTk}gfssq3M5X8awhrzIe}WJV56Ze&7$fZ
c?+)8D)Bd^+es`x$q)=fO=4=r-W0#)&4FdL(xc~qF

diff --git a/target/classes/cs425/mp2/test/Server.class b/target/classes/cs425/mp2/test/Server.class
index d25edc0764869c1dca8b3eaf420828b74cfb20c5..d836ab4a21f0378a78ccd09df6e2f588b66239c3 100644
GIT binary patch
delta 690
zcmYk4OHWf#5XXO~J>|5wE#jlRAM$P?AVI~%L`6VRt97R-8%YqA1i=K6htj&h#Kf3r
zF2)U@qH;BEgc>lxgakf;F8ly~05`7GkUA}zc$1Smcg}xielv5w7R(hqI-;r{A8l*5
zsOF}{5ThCEmSN1IlyQqIOnAsX^?5!Tn6${{w&6}jH)Ti|k`{GKA2yU4v!`4IIfiM&
zJ$uHLP>IxTw^sgH<^nurKEN|Ori+8mX$|m#g#i0#u_tw(irAl3$ZpkzdR`H-d)=Yb
z4;^-udk0232Zu-cFDu;PNRL8?dm<MUp1zFNj+o|DpV^^`N~y)iF<MdV2UUv3CDaM~
zfj8C_+2#G@jV=>h#=k<*3dLEY<bRKoe&XPbHmp##BuQYDahZUd17dfOXSew3lUM2G
znv7&XZinQ4kO{6c#V`j&wO7<0ZqUwg`7)yDpi^>92uv3z#CK9oKAtU%q1$lkH{Cy}
z?J%6yf`8^8K8{3WrrwwZ|44beoQnSB9x7&LDO{#99@}Wzbg&NVrp+R~?xephNy8<S
z2}OpaCi~u|FD6HPBa$&8Rg#3bE6V$_%-Jk=zC?Pc`^)X4iYRA=J40KJ-ohueI!%5q
z?u=zPhcd+Mht{FCs*BSu<)ptiz8Cd&y(+w7FGvqBrSdEJUtW{PqICX-3f{`9-r2vb
r^Uc-qo%+ivH7WcK!RQ)w@rG6E*VhQg^(v7RmD{TbN_ee3=D+j@6I_C)

delta 774
zcmXw%Sx*yD7>1wIP8m8B1QFR65p0WWK?OAt5d;LJ+z<`iNF~J-Wl<^?Sxv+%6PF<|
zCLoJZyoDNSf(a3RfnM-COuSM<@S8TyWX?9<`<?eW-&xAs&wP1FmA<O4ZE#XXNavwJ
z4&w%=d889I$Y;V}fX5DEk2}@+KWQ+`ltBv9Ix_~P%<3DTcU8etoq3Tdv`}Cyq;QUf
z{0~Ci!J&XcwVMmJ88sJ4w`(e)ifV<|{H`+0T`jA6(Zv!qiu6JMxW6hmQq|Vg9PST{
zhJqu*F5Xe&Vwn{etE{<r!=l-y^^3I6o)P(_d2A_~r`LN!kuW?G3Jy$|7xc;__B#P_
zVE1@?6?vW}bJdn-KGT0@=i|o7Wol5I0o8^kFFY|{B>HZaA5Hw4*s)1=Pv`D7IX(6$
zxe>BuVT-)-y>$|O<$D!7>xZvp*ip7c!3K7E8Ddm&j4~GMA<U$lot?9?+CrLn!s(vv
zlQ=&CZgW@Ku(Xo|nPQMR?r}~ci$vj&91UENna+J0X%e4P;_xcXv0PA&et@pis&nlx
zt%sH@KGSJK>9qer`;Dzpr$ZCg>v7gukw+zwRm!>;<`)VZ<SPsuqiA7~5)0e6yGe2k
zw|I+_6+&!W)GGF}HDTW0z(y`!abUTqj`eZI0&#2cJA}z8elwVs$Qe27d1`rU(VgeG
z$Q@!Pj_0J3PJDvbBGLl11Dt}P9a0?Q(f-qz-A0`%F`pY*`OD&eg#@_=DXfvod&&8M
yLO#kJ{A7MJx++V1(zG8@PDMysC%I!APfuAC?~YYWEndtG*%FdP?l$X_Zv6v?vzbl+

-- 
GitLab