From 37a6af2e6d36ab514d01a93dbd5be6538a2572c7 Mon Sep 17 00:00:00 2001
From: 1004268 <isaac.pedrozaaguirre@student.unimelb.edu.au>
Date: Mon, 21 Oct 2019 20:12:13 +1100
Subject: [PATCH] Max changes

---
 .../GUI/ChatScreen$1.class                    | Bin 2140 -> 2505 bytes
 .../GUI/ChatScreen.class                      | Bin 6677 -> 7001 bytes
 .../GUI/PaintGUI$1.class                      | Bin 4408 -> 4408 bytes
 .../GUI/PaintGUI.class                        | Bin 2893 -> 3460 bytes
 ...ss2-infinitymonkeys-remaster.kotlin_module | Bin 0 -> 16 bytes
 .../client/ChatUpdate.class                   | Bin 1564 -> 1626 bytes
 .../client/Client.class                       | Bin 3139 -> 3672 bytes
 .../client/ClientUpdate.class                 | Bin 925 -> 1439 bytes
 .../client/DrawingUpdate.class                | Bin 936 -> 1231 bytes
 .../remote/IChatController.class              | Bin 380 -> 479 bytes
 .../remote/IChatUpdate.class                  | Bin 374 -> 375 bytes
 .../remote/IClientController.class            | Bin 456 -> 478 bytes
 .../remote/IClientUpdate.class                | Bin 283 -> 343 bytes
 .../remote/IUpdateController.class            | Bin 431 -> 0 bytes
 .../server/ChatController.class               | Bin 2237 -> 2833 bytes
 .../server/ClientController.class             | Bin 2730 -> 3445 bytes
 .../server/Server.class                       | Bin 2056 -> 2119 bytes
 .../server/User.class                         | Bin 1065 -> 1273 bytes
 src/GUI/ChatScreen.form                       |   4 +-
 src/GUI/ChatScreen.java                       |  60 +++++++++---------
 src/client/ChatUpdate.java                    |  17 ++++-
 src/client/Client.java                        |  49 ++++++++++++--
 src/client/ClientUpdate.java                  |  26 +++++++-
 src/remote/IChatController.java               |   1 +
 src/remote/IChatUpdate.java                   |   2 +-
 src/remote/IClientController.java             |   2 +-
 src/remote/IClientUpdate.java                 |   2 +
 src/server/ChatController.java                |  20 +++++-
 src/server/ClientController.java              |  31 +++++++--
 src/server/User.java                          |   2 +-
 30 files changed, 168 insertions(+), 48 deletions(-)
 create mode 100644 out/production/comp90015-dsass2-infinitymonkeys-remaster/META-INF/comp90015-dsass2-infinitymonkeys-remaster.kotlin_module
 delete mode 100644 out/production/comp90015-dsass2-infinitymonkeys-remaster/remote/IUpdateController.class

diff --git a/out/production/comp90015-dsass2-infinitymonkeys-remaster/GUI/ChatScreen$1.class b/out/production/comp90015-dsass2-infinitymonkeys-remaster/GUI/ChatScreen$1.class
index 7c1974a1de9a270cac93185b5febe95a045199fc..bf673f8ea6d84ed6e9fd40503c8a4767a75048d6 100644
GIT binary patch
delta 1140
zcmca3a8kJb)W2Q(7#J8#7-n!X$TB!_F~~7Eb1}FuxN<Q#GPr>VcP<7G22TzKFA(hw
z67k_;@MZAhWbkJQ;9v;kVhCag1__67F@!RNflLVJV2I#ih-8QYDU9Z3h+&8Y5pnDc
z@mvgI3<)6Bi6FToF%E`gZiW<wR4xX8hBS7DbasXec81J}m8aO*O7cUCQ;R0&GKx=j
zX4IM7!q_j6#m<n;&JYh)m&4AGJ6V~@xIT}EL4iS$he3%UpPeCxhoOL>kcXj&p_qrE
zgrSt3p^S&2oS}k|fq{pilA(%+p_-wFouQV8p^l-RouPq;p^>49kwG{(H7`XWskEdd
zKTn~cD7CmaHHDp_nTMeTq@|Uijh&&LhoJ*xawo_zX2+Zyc7`k-hAsx%ZXSjnh6;9u
zY#xSQhCUvKeufE*3=&z1Wr_MlxtaPwsk!+jsjd~tsRbpO`FT7H6B+V(7$$+-H<@9|
z<hM+++_^jqQ$hAjW0*c!l-Xl)6|>IdSY}y9iOKwI5}WrkpJC+VN=!~pEiP6uHZWjh
z(46eRq7d(#pPQ8LlwV=Z$RG-`twO)JJTos{-wP(e$iSbTS`wU^lbT$Tn&MfKn#;(*
zQIa2AQk0pO&d9))T3DKxQ_RR9s^J6Dub-2cm#*)hl$DxXVyzi9xs%mbOsF_DFD0NT
zvn;VB)i<@cI59nyk->8EMi$}82UvwBA7C|LG@1O7)n8VYL5_iuL7st8KmZgQ3=9lR
z3=9lP49X0Q3@Vdj*`&Qy85kJY7#JBC7`z$O7#JADz$&;H)EP7xK!6LZkCB0qL5o2f
zq>F)p@f-sS11kdq!%^*R49r?v7#Mdjuq<P!nS7W{s~*DT+s44ZjX}VQMUq8Ga2tcr
zOa=*Ehz#d824S6@3?j@7;maAskpv}Kbapa`vVerSK>D^Zh%aYwK-eI$jKK(Qgrx5#
z25up#Z4A6Ra53SX4AM;X49q(iWR^2<_~~wA5Z}na#9+Ws#Zb#2#;|~455s;2F$QJ^
zke8zv#26SD{22Hc0vIG20vS{pf*1@KLK!R=!WrBdA{hc1q8ZW{;u)$KQW<I)k{Ie4
zQW#no(iqwq(ix^QWHKyZ$YEH)kjt=xA&+4XLovgCh608I3`Gp}M;J=M;TXig!Qjqd
z%%H=d%fP}=&%nx{$Dq%^!XU|z&0xTw3wBrtgCT<v12e+`1{Sa^Gs6M~6$WDl6L1_H
zg~!2B22%zz21W*R1_lOw2KIlTENQ{cV9Cy4@ryy&iJigfCj%SPe+F{~W>a<sYjy@3
vb_QDpMs^0PUkoe^%nWwmc(-S8U|?WiVQ^$%V9;P-VBlh4WRL|#F#`ht8HD0v

delta 846
zcmX>pd`F=E)W2Q(7#J8#7#cVk#2Ku)7$g{MxEO31?6?@L80<lW0~doMgA)gXGl+Hp
ziMVnxxG}hMGI%g}axi#tF?cihfJA(`8T=Uh*%<=37z7vsK?;LF!oeI2A>0h13}IXh
z9t`2^3=!-Mk?agnj0|ig8JQDjADLXss3R=ola*MOsGpOVm#!aNQk0pOZasN9<3xc7
zc7|wnh8T8+Saya0c80jg9!$ng@jMJt4AMLdG7Jgq4ADFci3~|R49N^BJPfG}Y3vN?
zJPa8OnT!k!JPcV3**pw647uzKc{~jH3<c~Ag**&J48@c8GD!%R@Gz8u<jWW`*%@Ma
z7|IzcCi61O@>Vh=@Gw+?jH_m-nQYE1%N@tVPzzF7$51~xp4nsaWoFsQ%b9gHe_(#f
zI5~yQdlI`8qw!>EcK>>D1_=g621y1+0RfO385kIt7#J927-Sh38RQrk80;9Bz#?2)
z+FKbIwYD=bZ3L^4XJBApV_;-pVDMm2U|?VngQ#LqWKd=R0WPp<j0}tnDh#R+vlzP>
zm>F0Z7#OB%Z)0HA+QPuNgMo!*8H3N{x9nQ=x)1@*Z47)mI~n+y8N!z{a9OcPvTS1z
zT+ZNt&?2;q!3eHa*mn~Hw~)v-23{Sw7~f6?Q6>iF9Sma2894lOw=oEAWME=2VDMt_
zWe{K}VCZ4!XAoduW&nA?k3pD$fx(-Bub#n|L6X6bL6yOu!GIx%!Ga-}!HXe+!IvSF
z!Ji?VA%r24A)FzKA(bJ9p@1Qtp@JcSp@Sijp@$)jp`Rg{VFE)c!xV-La9DUSurv5G
zurjDIs57uINHSP6XfSAkouI;?#h}f=%rJq01uV<VP{5$Vpu?ccPzVb4sqo;N%Am)f
z&%nrFz`(#@#K8KW!Iy!BoxzZu!HAu~n4Q6dfsviT^d|!w(|-nY24<Ly8Cdui0}BH)
igE=^wEEp^q7#LU>tQZ&=lo%KoxEL52#6j`HzyJWkON2fE

diff --git a/out/production/comp90015-dsass2-infinitymonkeys-remaster/GUI/ChatScreen.class b/out/production/comp90015-dsass2-infinitymonkeys-remaster/GUI/ChatScreen.class
index 4a465635ebcb3e55802d5a8bd8dd0b4bd39c2976..f4e30aaffc4a45f3d431149a0acbc881b95b8b2e 100644
GIT binary patch
literal 7001
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
IZmq-t0IAi!H2?qr

literal 6677
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

diff --git a/out/production/comp90015-dsass2-infinitymonkeys-remaster/GUI/PaintGUI$1.class b/out/production/comp90015-dsass2-infinitymonkeys-remaster/GUI/PaintGUI$1.class
index 8b9146bbbc79617544b13a9369add59d22f980de..cc90a9c6246be3e81b09d9081b834ead1f6cc592 100644
GIT binary patch
delta 310
zcmdm?v_ombT~5ZJ&G$G1S?j|Y_!uG>q#2?aG#O$TEE!@MY#HJi+!+!WLKu=5A{kN`
zk{L1?N*J;j+8DAKx)^d8rZVI*EMO>P*vL@Cu#cgX;S56=!!3q#hBpiq3?CRO8GbWV
zF|sk#F^V(PGs-bEG3qe1Fj_IRF^e#CFv~G?GAlB4Gix*SFzYe&F<aC#^fOyCOk{Rt
zn8fVCFoijYVJdSd!*u3&h8fIB46~SX7-lo)Gt6bKWSGZX!?1w4jbR~kC&Oaq$qY-F
zr!g#JUcj)Nc`?IE=Cur~m^U!2Vcx~CmU%D3dgkK{8<<ZqY+}B`u$lQf!&c^p47->=
zG3;SsVA#iUgy8_oIfjEQ7a0z-DBor{!g7z{7|RQW<1DWkPO^MuIK}dV;S4Ji!&z2V
PhV!ia43{Sd2)qCQo&HxF

delta 310
zcmdm?v_ombT~0>-&G$G1S?fa>_!vSNq!}U@G#MfpEE%F0Y#Cx0+!<mSLKxy1A{i1H
zk{Qw%N*K}^+88nzx)?GUrZQwPEMUlE*vOF2u#cgL;S57D!!3pqhBpkQ3?CTE7=AO9
zGqN#MGm10RFv>C1GwLujGFmY-Gm9{^GRrZvF)K23Fl#e(GV3vPGh5U%^e|g9^f9|K
z^fP-fOk@sXn8X~)FoijuVJdSH!*u2xh8fKH46~Rk8D=xrFwA9cW0=R>$*_QVGQ&dV
zX$*^*7ceYgUd*tJc`d_o<_!!hnRhX)V&2QJhWR+dTIN#>>zS`GY+%05u!;F0!*=FR
z3_DpE7<RK9Vc5%Zj$t3mMTP?`%C{K~vfN`h%<_Wa2+M1RV=P}8j<ft=ILXSyaEg_c
O;S4K3!-dHK0xtj=-BvvS

diff --git a/out/production/comp90015-dsass2-infinitymonkeys-remaster/GUI/PaintGUI.class b/out/production/comp90015-dsass2-infinitymonkeys-remaster/GUI/PaintGUI.class
index ddf219680d1967e28e63035b2ef00d9d5300c260..592ac85cd5cd5ffa4ac44a16db9b3f65232a079d 100644
GIT binary patch
delta 1661
zcmX>r)*@Yh>ff$?3=9k=43D@Nq#5ei8R|J08aNmlIT)Ha7@9d4S~wV5IT->N+Bg{6
zIT$)P7&<u^x;PlRIT(647<xGv`ZyT+IT$8zFihlNn8d*_nS)^p2g6hjhG`&8)7cqj
zfasa*470cxWEtu}oY^2^4v3h`&QL#(i$RHDK8UvfL@Z=ySj5Gk#;_Q~S;Ee+l#4-=
zp$_D<W$X;gxfpa9R)Azyf>^6Stkoda8g_=Y91QEY7>pR!g9JB#SgSY~Hi9^tI2bmA
z=q(%!TS4?T4u<U@dItx?PR>Y%0ES&4<9Bl~>;chxIT-e_GwkPJIKai=3Nh^<h;;}=
z90n0bK*UiHaSTKp2N5UO8BQ`X@Ob9sr4~8oBo-H^7EhL8l9l61&PXf?PA*DK&0}N`
z@Np0I)OUu9SWi}A{Jq(V$(50hy*MMk+&$Ejk%3u5Gi-7#vpjP?L-pkO%s$Lv4B?aC
zF*h(rFoaJoWD#dhXULe`%_8fW$&kgvkj;?6!;r&}!N|Y|GCLqKGq1!w)KkTfhasQg
z6c0l#Lmm%95JNB{13yUKr6{pHGcVn-C^ZqJpn!)Vl_72NM;0mO(+p=O^RY^a=QEt;
zVMt*}=3zL;aGr-D3B<a<aB;Fdt3rJ~!zCVuXoeU@24=t1avp|Q5R=8fAT^JNAr8zA
zPAp61VTcE@*+Fat$6_9a1Q3_iIVZn3m4_jbA%=(HGQ$-{23EiPqLK^{=PDxuYjA#P
zNd_Z>P*!4DVugM&$d&qDZbgZ?sf-K~!5N7~sVSZc;Tf4FsY&^XMJWowmBl5gxjYP!
z3{gA`*BGwzFx+6c$-{7q;WiJ$9frF+4EI1{_Zc4WFg#?q&d9(6@;)qhHeY2mWUOao
zkSk6taY;=}EX^tL$<NPr%u8`gP0evhP0lY$EJ;maWMI*V(hOr{;44loan8>xNzE$>
zNX$!RWDwWz0XbAZvAjedB$1ezms(^EQp#SOS`wUDmCDG#s^RGg5)my<E%C`uPAtjH
z&kIV;Ni4}MOAX0qWMCAZyn#)uK8%rpr#Q7FD784VDlsVs<XwcTz=7spkXi)R4RR0I
zNUq}4lCaF;%%q%D21SMd25ANc24MyUP((9;KnO!9h++t12nW*<P&$$!3e1mYhyl~F
z3^Da!MjTWi9!e)b=|m`<#E=YDmjb0z8PdS~bcPHtoym{|rn8~^94MX3kjKElz{0@D
zkk3%Sz{pU@z`)GIz{<eHz`$gqwVi=cYw}+9(=1wB7*scRa^y1B7cnp}EMm}LU|^7E
zU||qo&}I;1=wpy%n8_f;u!KRHVLgKk!!Cv(hGPth45t}X7;Z7BGrVBXV))LW&B(-{
z!zjq0%P7U5$EeDn&uGM8z-Y^0$mqpj#2Ct8%$USr!kEio%2>r<#@NbW&Nzv|f^jZ`
zCF3dvE5@x1wu}cE?CKfMGT1ZTWN>19%HYiSk->%WFM}%+CxaW4D1#@H5`!0$9)mZN
zHG>aBF#`jG7{nh8B@Cq?-!s{OBY=^Ck)e#C9O7FBeFhMpfq_+P3xmuC1_lNu29O`w
z7#JBC82rJ;@POH@AY*tK7#J8CDi|t3x+igqfx`o$_By&+u+l1qYLHR}28Jo%U}j+O
z(%Q}78Y$$qoxy!8g9pnF22ZUm3?3lcw=sBun1aj-f=m(H7`#Co#%&BfAewm_gD;3?
z+s5DrqFJ^v_-|xjh=Mv-je(Paf#DtlFT;HXL52qmG7OIxG#MT<7&1Izuw;13;K=Zd
i!IR-Rk`ui^-T`~J229p61Tru%a4|44D1pL?fdK$Gh+yad

delta 1173
zcmZpXJ}YK_>ff$?3=9k=4Ewkkq#5$r845TU3ON{xI2ejK7)m%8N;w$HI2l|S$~hP+
zI2bB97^*lJsyP^HI2dX<80t7C3W(HmFtl+nw1X6NurqXm=q`4KZY~B{hI|mG2SoIO
zh(30Pel7+jh6y0fL=Z8FonbN;gBrsW5N9eo!!#}iO@@4sOQy3k%-~|sVVDV$nFV6a
z2C?RVSaaDK=5a90=VCBoSis2;<jSxR#GK8+un44NF$cpE5WSRxVHt>C&cUz(M6cvv
zSOub2gN$Fp!LSxYuj61?&(5%ck%7lEFE6#oIVZ8WIJJ24B*x#9qZp+&_b|CJPJYBJ
z%bdipaWWH&53@Ui$K*hk23b!A4@L%|ti-a!3jN~p%)E4cuYkn7)Epj$D2C|C?^tBh
zVi;n17~&YBc^Kjuq8S<Z+(SL}0}?ayO58&|RSbC;k{CAeFeES}@-Rd&L^3k)gXCR`
z5<zA;7NsVF6eRO7gfWCOGKhlg(N8Qd(Ra!(N=Ys9NvzB-E#YC<%&=v0A*)n<62n#=
zhERqO9)@iU+j$s*L987NI~f^-K^ox>bSf<=$<JeCV0F$(O)LUgu#1PmhrySTf!Qy$
zoQJ^=#ANX=NX_G6@CUPl6U$P07y>|Sb`V>^v6zP;5X5D5&dD!M<zWb7@a55C*v+tq
zk%84Ozo;aGhhaCvUPcDi;QZ2(3`PbXkhfsoW@KR2&<xw$#b(G@&!EWQ${@|az#zoH
zz~Ii{!2klDP}+;Z8^i@U4ov$o_=0JFC>;Q$1EF*fln!PH0jmpz(qRnYV15KcB$$q3
zhz8R!492lwMjTWi9!e)LBr-5CFf%YRBrzm2FfybtFfem6ure?)Ffdt8_Ts$2sJ&T^
zE0?i8m4Sg_5rYN;1A{CB3j;rcHiG~|AA>l<Oa=*tB@B`b>lvgNb}{%f9Al7UIL)BQ
zaGgPg;VFYU!xsh(hW`wjjC>4QjN%O1j7khTjQR|^j8+VKjP4Bjj6n<rjPVSHj9Cmu
zjO7f*j7<zCjQtFzjI$Wb7?(4cGj3wAV%*1IUC(%m!G`e~gFWLT1_#D>433Py7@U~c
z7@V1e7~GiT8Qht)89bOQ7(5x$7#JADAns>KXUG8gn#mHB<QNzk7#T7dvLL=>&<FDw
z7+AHoFvx6RU|?Wk0Qr%PfsuiM!3S&%517pgG6oc!j11WfIaqXSpzFSZt{ZH6E||<?
SaARO#;9_88Py#uPfdK%4Z_sxD

diff --git a/out/production/comp90015-dsass2-infinitymonkeys-remaster/META-INF/comp90015-dsass2-infinitymonkeys-remaster.kotlin_module b/out/production/comp90015-dsass2-infinitymonkeys-remaster/META-INF/comp90015-dsass2-infinitymonkeys-remaster.kotlin_module
new file mode 100644
index 0000000000000000000000000000000000000000..2983af70661ad375cc499ebc4da5a68ca46c532e
GIT binary patch
literal 16
RcmZQzU|?ooU|@t|egFVe02KfL

literal 0
HcmV?d00001

diff --git a/out/production/comp90015-dsass2-infinitymonkeys-remaster/client/ChatUpdate.class b/out/production/comp90015-dsass2-infinitymonkeys-remaster/client/ChatUpdate.class
index ab22187ac7d4f98f5d6a18a2636745ef64b3cae1..67a49f505beee840b3e57a9e85b034dd23bf2d8c 100644
GIT binary patch
delta 804
zcmbQkbBibV)W2Q(7#J8#7=pMM1R3-=83Y*g*%=JD7?>IKI2a5;v=Ik`F$aSQh-u2f
zV8+E@&S1gCV98*`#bC`~!@*$7!C=SEV9(Crz|P>v&fqjLe6pZ3BLi1neo1CprE^AN
z2_u8X#NVnyQJPVV3_SUzB?YA=!6ikRdFhk&8O1HQ(u(qPopUl%^GX;Q*mF~hixbmR
z85uY;ivx->%Mwdc85tO(7#VnjOA?c_eG>~p5|eUL*%@3W`!OaYx$-cGFo-fTh-W31
zCF<uS=B4XHjCLx`%t=WtVr1Y82=WYb3~^P^0NJC!!{El?&d9*5X{Er(z{thJ;KAU@
z$iQT!z|P>s!{E)}!_MH#!{Eo@&(074QX4p#lWDWK0J`yv49psuVUx|6V<#VCDw{l+
zS#PosOLP4d1||kp1_p*m*_jNQyBU}xw==K^v2J5v)859wCd9stflUX*;Mm5%wvB<)
zie)*2B2*Pv0T+e>tt|{p+ZedFG4M#TY-8YMS;N4<z|0`Yz`!5|wn&13g+Yozi$RXT
zgF%s@KAb_7L5hKa!H$8AL7jn_L6Jd;fd%9q25ANv1`vp3P-akKU<8Y)FeouFfmx~y
zY7EQ_9t?s|9qJ4W44e#1T7MX1*%>q#WEmJ3SQr=?<QNzkG#RuQm>47&7#N}$n8DhW
z;Et^4LG}$F#FsE<Gl8AW1=ga)punIFcBvScuLO6W64ZUjR%+w162-;<e%w|XFeoq>
O5^bdp0|NsSgDwE1f`EMh

delta 743
zcmcb`GlwVq)W2Q(7#J8#7=pPN1Q|3r83Y)#xEQn<bhsFF8T8m0^tl*V88ktJ0SAL2
z2ZIraY0Sl7!eGkDV8&q1#bCi;$-!X7!C=kKV8hN}%g$iO&R{<=c(R}aBLi1neo1Cp
zrE^AN2_u90#P6#7no*1lTxmu5xz0J6sd*)n^%%uD*mF~hixbmRC)YA2L_6{@h%kt<
zGdS@uI5W7gGr00FxG}ghGKgm-mL=-vB<7{-2bUCO=A}E8X6B@%7V$86FnBUDFj*-u
zGB9%SFnBR|vorXBM19#A{CF7r83NcD0(lsM7<?z&Gi_#J*3b-_oWfi&nVUI!@*QTq
zKt=`uB%>>fOHy+g8JP1+OBfkMeZVrA`T7AxnRz9_B}J);xz>yf!dQeE8Q2RzigNNM
zbFnnn_c1UtFf%YPcxY{5VA{sOyp4fnHv?<rb_O=>Z4B%}9NQS!bwCWxZ4B(&7`V1E
zaBpJZ!KMN%$;+~afq{XEL6U)ife&o17=tE*B!e4+6oV841A_us%!5IiL52YYJn9(~
z8I%|pK@MP0W>8{aVvuEEU|?ZjWRPQEWKdyHWnf~EU|?W~Vqj)qVqjoU!tP8yxa*J{
zzy;PJ&!E7d0JdBV%vXY2uEe0oP!F;k*-ABHt>njTr7D90gBngNQEcR5U}R7S2bl%{
Di5PmS

diff --git a/out/production/comp90015-dsass2-infinitymonkeys-remaster/client/Client.class b/out/production/comp90015-dsass2-infinitymonkeys-remaster/client/Client.class
index 36198e4bf93550c1cc6f881fedc4c0b372cd1dbb..b380d66220f652cc9b22291acc8445552a61b404 100644
GIT binary patch
literal 3672
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
MK_y`xxE#s{0L#uglK=n!

delta 1734
zcmca1b6BGO)W2Q(7#J8#7-n-ah%qFAh-46v0wPjDL>h=l=VH)c$Y5v4<YM4p$O4IE
zvoqvyF>pgTx$F#iTnu~=PCh$B0T+WHgj2}QP{hR`!jQ$zP|U?3#!vzxO4%98xELfE
z%DGG#Di|t3##M1JRC6=bFx0X$)NwG>vokbsFf_6=G;uR1GBk5Cv@o=CFtl+ov@>+D
zGjwh|y_8XazbG|1HM1-=#W%IMI59nSvNp5&<Y!Foo7<UX7!|u18CY@?GxHc3#5AIP
zvJ%S@^>Y&Q()EK&iZb)ktu@0YuV&Gkyq-xco;SE8F*(~eu^=QdDJPYkp^TA%Jvl!w
zFEzP@k%3u5Gm4RcD>%QjC^^+FGbfdif!jGJGc~V74`e0}gAIc%4}%_qJ`aNdgCP%t
z5rZ)ggC>I(4}&&{2xRD<oWm+%8_3YZ!(hT-%E%y?4A!mhoRL@(T9A@hlFGwi#$e9K
zAOe+eDM~EQ%u9#KSuj{mKFBIkZ^dBE$iU|w>Iv2voLrQen#ah%3)KX15)VTlgD($5
z978-KgD}W>5HGt{B&QaXWaj7bF!VBXvorMZF!VD_;9<~V&}C%c13APwKd+=HKPM-(
zh@D{~55pve$&3tQMX9;@C8_$JU<H$X8968Cuq9|tVVKI!FpY;{I>QV`24QDNIHjg2
zl;kTErxulgOqj{TFpI%=^Dj0rMn;Fpf*b~u!#Psw#TYag7#MgMm_Wh9z`(!+3L!A9
z!=MYM^%(TQv;l)5m^NZC2Gb@CreNBP!5mCmFj#_VD+X&YZNp#-rtKKC7#JA17#JDs
z85|fG85|iH81xw!85kKD7+5EJadOo=F)%Q&f%zH?&S2Mo<rrKTTp1V`7#Z9c+|l)E
zZDC;A05%?>*$}H{4+c*xnwgO_*MqG#!>Zeh!5fQi79`zZ&6Zd-`!M)IHQO;TF))FA
zsinP@fpsI?;anh59R^zlRt7t;5n><#1~#bILBXQQpal*rKL&r0VUr!X#E=5a39O3;
z><Ct<E=Gm`>=v`3S<K+hz{=nOHUZOKZK%D0489CZ;7FUszyfxiTfNqH26nJdw01La
zL~3nk;M~f<rL~)Z8^q?>%D}6&n}H9+=HJR7ptYMp5X2VR${?(@n?VG`7TwCgh;WP&
z0|x^GgEs>UgAW5IgD-<9gCBz;gFk~VLjZ#%Lm-1ILokvf-5Ba234?*bjUfo^%3uZt
z1{MZJh7bl$hERquP&hF#Ff>5jE4iCNEK-ZvXgh<rkM=eOiSXqN93Y0&MsTnRFbFe9
zGB7iM5|R`H8v_GFBm*}?6oUXmB7-nP9D@i$0)qrY64(U_49pDN4E3xG;S8<}j0_?S
zEDRA0kziva8KM}X85kI17#JAX8JL3E8Dc?Bierd}I_DwOIk{R|TNv1OFi3A@kO47e
zgk*Oz$T2Y-V36O+zyuLdfQl$?WnhMgC_zP(w=%HQYi(g**4o0rs<nlIS8EG{z)l7g
z7KWJ&yqg$Qh19k&sI#nrd69Vy*l|e=X>dR4F>o_5Fl2!02nJb(YzBRX90o^*JcdYy
z0)|9}B8Fs!3WhX>QigPfa)xY%DzLvn$s--^S!D)>TxePY`Id`;`8Pwd6V$^A;KZE>
E0O2<dRR910

diff --git a/out/production/comp90015-dsass2-infinitymonkeys-remaster/client/ClientUpdate.class b/out/production/comp90015-dsass2-infinitymonkeys-remaster/client/ClientUpdate.class
index ad564f64509e59856ae964be020e02c9981f6eba..66a59d861a1a2a8d97c3926e948b2857958cdca6 100644
GIT binary patch
delta 882
zcmbQsKA+q1)W2Q(7#J8#7<{=HxEZuL8Mqj9xEOR9^tc%G84S1>3>l0-gfRz$2}szK
zi@}V+oSngfoxzfw!HS*1dZPYRMw^L8v+Mav3sMqGQbUVVi+nPROBfl%G@^a763Y_x
za}x8?^@B@_GV{`{HKQ0A7>gMhSWAmji;5W;gt4e$WMBu$I^|a|GKhnXsL(Gi&&*5L
z_j1n9P0Dx5udrrh;0-QGOwRUAEC@+V%1LGC0J%wtoxygp9;32_0D~P510MrFJA*wB
zg9C#jJA)GsgENB*JA*9`gDZm@4}&{{9U}v?V@?hag9n2rJA)SwgExcE<U+=FF;S4K
zF|3^YjWLulWwH;G{^ZF_3iXT(d_}3b`DLk&IXRvsskz0B4BY9dB_QwnCFZ6wGKgqs
zg58edeMSZWkm1N;j0|k4g{6r(#f%K18b~_)ld@8iORP1c7!(;mal^#G!@$eH$iM{h
z7ehS*12Y37g8+jd0~3P~0|SE_0}}%i0|Nt>)^-L)E$yugOdA;(7?>D@85kJ&7?>Ft
z7z7zu7=#!&8H5=`7#JADAgUQe8N?VsfD3FaBZD{t0|N^KBZCA3BZDM^6x8$}1}3l>
z0$N)bn6@!6Z=3AS%v%pKn+t4?1Op#~6xdt^h&s5r0u0g&G7O9i3=9GcvJ5f|Oei+U
zF~~!0ILpAqz|O$H-~qFNfyGy68v~n;5c@U;R&77seP%4oW~`#DqAZITRCGmIjjZa~
zB-tRUIkquy&SK!yk!0J(z}mvfxcvWZmNg8ZAObm2iGhQGfkBCZn?Z$vpFxd5ltF_*
zn?Z}gib03LfkA`8jllrybS(xJ25kmW1_cHg1~!mW;GXbcP-IYIU}WHCuw_tYP+?$V
tP-S3XFpy?o{?8!Cz{bv?#?GM5&Y;20pw7t1z@YepffdD@n&7C=0swgXlV|_{

delta 346
zcmbQwJ(peo)W2Q(7#J8#7>v0X*coIv8Q2(PxftXa<hd9W7!<h}lo*uR8C2LARM{ES
z*csF(I!<NOn0P&V@@Ymz1s(=X9tJK3ZgvJO9tLd&9d-s?9tJ%IeRc)|9tJ}Oqsb~v
z?UN5P1v8dR7H8HM6U|C2ORUf@F3-$M*Y|SH&rQmA%CDI0!mL!!pvb_+z|O$Lz`?-D
zz{tP^GL?aWfr){Ufro*Yfr){Sfq}t|fr){Mfq{WbYdZs@miAT#rj1}V{0s~Xd<@JC
z3=I4XEDQn+oD6~t0t^fcVi45~f($|oAixDSm61W1fq{XAfssLkfssKJtcsCuasZ2>
vC&(Z!uqH7EJ_ZS}AqrrF1>lAVFo-iqFfcMOFbFV6GDt8mp%^Cxc91jx(WfKO

diff --git a/out/production/comp90015-dsass2-infinitymonkeys-remaster/client/DrawingUpdate.class b/out/production/comp90015-dsass2-infinitymonkeys-remaster/client/DrawingUpdate.class
index 5e519b95a6d0920b2aae6540612ceb081dda0366..a3b8302dd9e3252b1941eb2af93b54760ea2b35b 100644
GIT binary patch
delta 650
zcmZ3%exB3q)W2Q(7#J8#7(BTcco<YT8Mql#xfs+K)VUZm7&N&UxEQoRgf>V_hl@d%
zL63_;pTU5g!H}K7h@HWhoxy~i!E~bjG)A+D$13HyQ;HJHGxO3Ni&7IA83cXYLp}9f
z5JHn}7*#z58O(VY_!$J)87z1hEE%lW8LW92Y#3~L80;AAc^Di((vA#H><rF43@!|=
z><n%^4DJjbj12tfrZqCoujfurEeS}>%qwvZ^<-oa(9i_i2@|nqWZ(hmg7Fy{_|j8L
zkX*#bAPm)lBxudZz*P)a22$dal~|UjpIBa^ADod`kZP?N#>l{4lv<F;m^oR7smhZl
zJ+;I+Ker%1FEy`(kwIL;Qxl;DE@91}$iU6O!@$JA%fQFL$iM^&1_lNOCI&_ZK?WfP
zCI;cj516FuMHm<u_!yWO7#IW?SQrEuI2nW(L>U+u#2A<u7#O%1#2CaGK!6LZpOHa=
zfq{XAfssLyfssLqK^kNZ0|Ubp1||j;1_lNTtt|{p+ZdR)F|g=tV_-$_wlT0lIPBXP
zI9RqZa2{ab^3&DXR=~ijyN!X3c@5ZUAje2Cuz{`TV-RPMW{_aeWsqbrVvu4mV~_?r
qObcQW++h|BG7Pc|j3CPy<QU``m>6^!xET}}6d9ON9IFJjK^XuB*Kkk(

delta 382
zcmX@lxq@B))W2Q(7#J8#7)-br*coIw8Q2))xESOa6u1}^8I-sflo?dm8C2OB)Yuu+
z*%>q@x=mx$oOri#as{K30uO^04+9qiH#>ti4}%VaE<1xB4}(5~0Xu^s4}%ed@#M#h
z^Cz=0m(_Epr<Mfe=a&Q|=A|++NNQ;MWF?j*R_GU(XXd5rd%>iv859}V7}yz@7&sU>
z85kLuK!!6gFfcJNGVn0)GB7dlF)%Q=F)%SOF)%Q2X>Dg<)Y9I{z_byphM$3ffscWi
zfq{XafrUYUfs;XyL4bjQL5!guteioRL5KkaxWL9TG6*v;Ft9K%GKerRGKeyWL5&Y$
zU<4Z?ptXg8X&VFcHU^e$46NbIYv7h}fvp#3;A4;gTc7|@4>w<cL7YK?fsuiML4ZM$
PL5hJ%1jQ<8ut72a7d|TF

diff --git a/out/production/comp90015-dsass2-infinitymonkeys-remaster/remote/IChatController.class b/out/production/comp90015-dsass2-infinitymonkeys-remaster/remote/IChatController.class
index 890f6569a755665302a1d37be8dd61d80793a8f2..53c3ebdbeb067f1865fe93a3e90ce8ef69e59d0b 100644
GIT binary patch
delta 99
zcmeyvbe~!H)W2Q(7#J8#7=+mw_}Li**ck*T3i~h$O-u+D6Dm&4O9?2-EK4j&^-V1<
zPE1c_WU!p5sXEa{eBzdNMwZDojAk+{j11fiJPeEsYzzzxEDVec><o+yybKHsObmPg
DB9Rof

delta 53
zcmcc5{D(>S)W2Q(7#J8#7zEiFc-a~F*ctdI3i~h$OiT!#%);2g$UM21(Tt0Mk%60m
Jfq{vE2LN+Y3Y-7{

diff --git a/out/production/comp90015-dsass2-infinitymonkeys-remaster/remote/IChatUpdate.class b/out/production/comp90015-dsass2-infinitymonkeys-remaster/remote/IChatUpdate.class
index 05b1a7a82a84c88af6d578d3cb2e7e97a8468921..f84138bb8bf132eae71b572e7f8c37323da8ae93 100644
GIT binary patch
delta 17
Ycmeyy^qpyfDx=0kHC4u_jo#Xf05;PFF8}}l

delta 15
Wcmey)^o?nPDx>;DHPwwi+Kd1#umscq

diff --git a/out/production/comp90015-dsass2-infinitymonkeys-remaster/remote/IClientController.class b/out/production/comp90015-dsass2-infinitymonkeys-remaster/remote/IClientController.class
index 8ebb942002c9acd24731c041333431529e218a5b..a715a7529d155693afd32a10c6d499fbc792097a 100644
GIT binary patch
delta 24
gcmX@Xe2;m83}e{D10oX*WmuhaGE?(5+Vn620Bf=cT>t<8

delta 15
Wcmcb|e1ds`45PzDS%Zzq)r<fuQ3VJ9

diff --git a/out/production/comp90015-dsass2-infinitymonkeys-remaster/remote/IClientUpdate.class b/out/production/comp90015-dsass2-infinitymonkeys-remaster/remote/IClientUpdate.class
index 40d1f67006a40017f46a01564f48064d5da9a51b..594d29d42b0c49bf0496f846c0945c7ceaeacf33 100644
GIT binary patch
delta 125
zcmbQube&1;)W2Q(7#J8#7=+jvc-a~F*ctfQ83ZPZd1wnVGVqlaq$HN4h8Cw5`D7NC
zFfxc~MEhhVmL=-vB<7{-2bUCO=A~O}Moo;Lug}E7$iT|L#=ywH&cMLH!obMD!NSPE
T$-spy!obMD&A`CG#J~dp9s(9h

delta 65
zcmcc4G@D86)W2Q(7#J8#7zEfExY-$a*co`)8TclOc`))%?3^#l$im3L%D~3J$iU9P
Vz`(-5$iTtC$iT_Kz`(@71puF?2yg%Z

diff --git a/out/production/comp90015-dsass2-infinitymonkeys-remaster/remote/IUpdateController.class b/out/production/comp90015-dsass2-infinitymonkeys-remaster/remote/IUpdateController.class
deleted file mode 100644
index afcf1a62220c910720cf59d0c49f8d67d01d2167..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 431
zcmX^0Z`VEs1_l!b5q1Uvb_PLq1|dcUp3;Jp#FA9!oXpg`5=I754WF#UvPAuy#JqI<
z;F6-uymV{LFh&M0*NWuSf|AVqykd3+VMYe-^wg5j;?yFa%;FM825}8dh_=#_%p85k
zqN2n~kc2fO17~n%dR}5lX;CU8gEn?mHW01IHriP;GVnnhhOk5e>NGSvz^)6<FD*(=
zb<502Wn>WZ425_pKd+=HKPM-(NDt&CMh1zZ)ZF}%RDBG2Mg{?p3W%ruld@8iOBfmW
z!9qp3nfgIsZHx>OXd>_+VPj-qWME=oWMF1sU|?opWME-nWng4rV_;xlVPIrnXJKUE
iVBln6LWnSMF)%PNF>tdmGVn0)BCBO!WZ(nK@dE&WDsMRe

diff --git a/out/production/comp90015-dsass2-infinitymonkeys-remaster/server/ChatController.class b/out/production/comp90015-dsass2-infinitymonkeys-remaster/server/ChatController.class
index 3d53a767c735c3e1e6236e5ad6325b2e5230a9c2..b56eaad1cdbc2c794f9ab2a79109a88eb63fa3fb 100644
GIT binary patch
delta 1338
zcmdlhI8m(r)W2Q(7#J8#7&^EZq#5iv8Kf8-I2jxnoH!Vqxfom+Tsaxs7~HuSJQzH=
z8N3+0L4*%GgD)2Y7lR)+gFiz62SXr;4q|5r=3?Myum=$#91Ni#It*k)I7m8zgCP=R
zR1_COG(!x?yjXUIICc((cy@*ac80`>71J4$CJQjGXH1@afH7E1s5mt*C7>v?EU_fj
zH?_DpF+G)$!E&-1qv~W!MlpSkl6>c!%+$ORMh0FO(=#t6wStj>(UXyZKdmS~7oq?x
zI$4lORX~9ug@-|oL7tr<m4_jXA$_tNlZIag4?`wH7CS>W4?_+^E;~aW4?{jf0Xsu7
z4?`hC5f4K#LkS}TcX4V_S!$7fXmM&04?`(K89PHc4?_h*B_jieo}QkIzn?1?4?`7$
z>Eu03GR)NsHIr{MNtxC%)bTLXGi32FG%%PlG6*YVBo-^=q^6Z9lw_nT6y@jV>hUl%
zGBmL>H1jaDFtqY8v@x`AmSFzK$fyDGD07r%)MR$nu6jlWfn=~}o%8cbit=-EQi~WF
zBz>Tcf_M`lWzEPSjzfx(fhRq+1mp{Fs4y~!YWQR&mL=-vB<7{-2bUCO=A~O}dNMLF
zr>B;HWIZ)~vJ&fI3jC9@Qj<%p859|$7^E4P7-Se^85kLuKw-+jz`)AD$e_TW$iT#)
z#K6Gd#=ykD#K6G7rL~=bQA>L(1JgzZ1_mYuWd;TYJ_cq61_pix76t(ZP6j~+6$S<d
zF^FmgRR%Q%5a0rv%E+M3z#zlG!obL&!NAC%$)E)_{xAaz0~-SagZpGzHraY5NtT@q
zoQw<y7`UuhC0VyIaQo?M>oD(R;9+41U;h8rCI)69-fax5ENd7T7?{CskYiv6+seTp
z#h}F?!(hN5%V5PI$6(8#z~IWD1a^}N11p0Tg8+jzgAM~Lg8>6CgD!&}*zN9cce*p^
zGZ-5%FoN8|V8~#=z{Ft0z`(%6!1R|vgn^yG_$Pw~$P;ism@t@v{4n`7TMnc0<Op{4
zP>}bv7+4t88Ti0fu`uW|aD%M^1z<GXs%Qp%29Ql~^MxVitDu-~1~=b!vLJ^(qw-`&
z4)uEK+F{OM0rCR_1H*l2Jj7{jVPM+AAg;5GLBfm$%FzaKSVdW8Gt@hXvd(6(hKRF?
zvTS3JJix%Uje%QRmjx0_Fez3{DV8<N=<(*mz{}vvAjRO%pu!NyV9yZD5XBJ65W^4w
zjyF4S(ujixTpWWRB;*(v;utK!aRg$4VvCu9mm!eBiou$Jg+YqJg~5iwnt>G@gX|29
Se;HyJ!6^_PdA8s*YzF}J0^O(p

delta 806
zcmbOzwpXzJ)W2Q(7#J8#7>c<VBpA#%8N?aPIT<V%EIAmgxEQP%Y&aQg8SJ<i>=_)m
z85|j$K!h_pg9{e}7lSJ|gByc82ZINQ_GD-9;$q-uFar_Z91K1n+81PmA4uAtgCT&O
zA&{LRh@Byrogsvgfvq^TsBB{21jf+G@{H>l!zQ0+44%A%Nm)RaA)JRnnn8x0A%ce?
zk|ApHbtVnJXdZ?bhFErnI39+0h6HwoL>`7DhGcezFdl{!hEyJgG=_9W25yj%sYUvs
z#i>O+3>gfW><n2v4A~6oj0_xldU`JYey&_R3^@!&lYN<Gm~$EOCg(6qDd#g3@GulI
z#PTo{F&Hs22rFbH7AxeWrj;m^WTYw-<>%+>ZQjlNk#X{M)(#~GMFw#O2?izxNd_qf
zMg}I3Lm3ztSQr=?WEtcbm>A?I^Rr9)D=;uH@G&qmFfi~lurLTPa54xoC^9fGh%qoR
zFfed2C^0BAfB+X*KO=(*)C^SyMg}zob&xp>3=D@Dm>Jj@7#Q3pSF+32D@wBLWZ-0E
zIKaSV#VX0Vje*-wS6gQ%0}nGp`11d^H!&~^@or;aWm&_(z`)D^a)BHJJJ?PR1}O$D
z1{nqe23ZD61~~>B1_cHe29RGsG0)1N#lX*?!Jx^&%3#32!=S~W4R*O3+?8$&It;o-
z42&SBFz7MpGB7ddGcYjlFfjdP5Mf|vF!;%!j^YJF1|yIcCL40vPHyGUXH=NHl|wxg
z6aZQbEDY)ld|>NX7<3u9!PbESB^qvBG{`yzMuZ*05Ia;*>@bGgk;AAkc^)UV%{O6S
JU|?b}1pw(mX>R}k

diff --git a/out/production/comp90015-dsass2-infinitymonkeys-remaster/server/ClientController.class b/out/production/comp90015-dsass2-infinitymonkeys-remaster/server/ClientController.class
index fa8d3ef62c0c228de653ec499ca7bf7a1f9fb77c..f8f9cc0ee6a843d9f3771bc2c10ace5c357cb13d 100644
GIT binary patch
delta 1970
zcmZ1_`c<m_)W2Q(7#J8#7*=vIC^Cd_GAJ;Fax#Q5gmW=OFhsI5L~${&GDL$!Vz?M$
z8R9@hJcvjDNhESIBrznjGo)}a@G^veh*S=SG!UK6#gM^}$;F_+kOd;LL0WP^X6AzQ
z<$;KNE(R$rh5~kmLXcz;H$yQ)35X~KNtSUllrvPYGgPuORIxKuvoq98?3l@2%gDfz
zm7kf%$PhMJkV$y5J)<nEb53Sz-ehmabUB`65VIt-ASJORm61WrrzkZyza&-P6QX1V
zV;p1DWOk-Yo`Ok5`H3mXiNz(M#i>O;nZ+fH49psuVT=rnrHl-G$@zJCsmUd&DInQm
zMh4+%pRB~PME#t^ymbBGlA_GKbZd47e|Cnt$=8|G{nZ$Jco<X|RM{Eoc^DcP8rd0|
zco>=)oERCni&KlrQj7FK=I}76F|_b7v@*1@Gqm$CbTD-CFmy3=^Dy)<^ztzDG4!)D
zOyFUd$S`TLFS88uWQHk|bC_ilrZP-pXPC~zFoVI4hrt_UkvoG255r85o>>e|JPflL
z=I}7gWthgpFpr^=kwF06p*#%p85XcJ)bTJZ1gTuau$YHo3Byu$hGjeq%NbTo-pbrB
zECkk6T9TQg?^%*slvt8qG}(itkP$PC6*m85X<@8qOD!x-%qeDM;K+okXJio5(1e5%
ziaFMd4D1<+#eS(3C5#L#d0<KerV<>U{z+M>$tBi|3<Bw?C6Jhc$Do9UCTbi)Wm2sf
z8AMPb7b?NXz*h>6eNc!);#EuoOYCVzF(@)9FeoxGF(@%8GcYnRfg+HBfq|WYg+Yx$
zoq>r#WAaWm>3U5D1_nL`W(EcZAqEx(VFpeH5e6*=1_m((CI$uuE(UD|9R?8K0_$gF
z&}Cp?U}0cn&|_d^&}T3JnZv-q@P>hnfsKKIAx&!w1Jf1;X6<bZEaAHuSR=J{bR}7~
zGq72)LS)z_S+_B8ghM&o7$yg@8`NuUXAovt!@$76%m8wZ5(5VV1A`<34}&y=6oV{-
zI)gleDT5+|JA(>C0)rYu3WEmNiFObx;Z96rFk~=dU<5gX!I;4W?13}}QwB4z_tF^5
z87vrB7^E0{7%UmA7+4vs85kHi7#RQ5Gq|%e*r52#mcb6{vsMNsuy%DV?QIMqwlcFB
z<e`q2*~TCW^$5tnV&NcfY=rwl3hX*P1~vu*1}+981~CQ`1|<eF1~mo?u<I2d#xiI#
zctAo}9qN2G21N#Y1_uTvumjl`82>P+p@zF7gA>$sRZ!O{fL%9vEr$X)Ld6(Z85kIB
z8Q2)?8Mqi68Dtoo8RQt;knB}}hnfQ1S}6u+RBPo>t#x5=g<89ffeCDby_U{41`#{3
z<z_6REb|!j>SgCKXhB0rlw}(O*8v9BZ4BZw8APFivfy9?$2c=0&gB@`85kIR7}yy6
z7<d^17_=FJ7|a<$7_1q>7;G6L!7ev}*a>&JJ=En44E79e3`Pu03~UURhTyPcX5eKo
z0(*xA9E$7=jDHzy8BzV?&fvko$e=O#3#VSag!VQD$(alsvbM_^I9r$*m;b*cgYLRG
z1}26C1|fzd1}%mZ1|5b}27QJE22+Miu<NuKSQuCs3>iEb9KbPa4tJ+H)SXNWrVL*2
z5awoJ{>#9^$f)&;ft8`22~_q$L-z^TBnF05XoziN;M~g~<-=?%gAiE6Agc}I%D_Td
zBDjT#aryt-aAnfIIy)I;7#U_VNbBrmkY!{zz`*LKyNy9kdnbcD6GQm&|BoOE7MyC7
z!1*qZfsdhpL5`t_!HA)N!GfWbA&jA%A(5eiA%&q5?o$B<4X{s{7{VC18GIS6z<y4J
y`k9X*oWYO5pMen^_@WFfe;EYW83Gu8F{uAx;9_S8{KcSvlHb^a7#J9s7=i(hUtG5U

delta 1312
zcmew=wMw-9)W2Q(7#J8#7&^EZq!?T{86+88IT_p-+_@M$7(Ce-yto)x8N5LvK3ojG
z41OTOA4CLzBmy}Zf*69?8A7-ico|$kL?{PC7>Ew%Vu)af<YJIyhytmO1{oIv(h>_I
z;<y;%84}nT5;@r!lGquN*%?wMuAIr8%E-Wym7kf%$lx&9m(gJITUP$bix}M}3o?Z;
zdQDDax-_|&Sv5$WA&rMYmO+l4A)SXIgCUchA&ZA0o57Nifx9@hs4TTeKeRZth=)O*
zA%}+{mm!axA)kk#fT56wp@^ZFhoOX_l!u{=p`4wef`_4!p^A|~eDVV}aX%i0YK9s{
z1__0t)bz~alGLKq6oul_<mA-i;<VD7oJt;sT827yhI$@`1_o0e20I3O9)?DcSxpR<
zJPgeYEj$dZAO&qa4DAeslP9zEvoLFDhD|nQEo20HXY*Uu$&8beSp@4D8Q4+_OA~X7
z859{L8KfAP7^E3w7#JCtK;B|tU|?flVUTA~U|?cUWME)$V_;%nVqjq4(%R0zsHMG?
zfoUTH0|OI-5(5JR9|JQ31A_nq3xgm7CxZ}!G6MsH7(_LL3WF*G2ylT-Wn@reU|?Wj
zU}R7?XJBN|V9<mbe}jRQft7)QAwg>k1Jf1;X6<bZEaAHuSR=J{bhk6GS+PLG*(F&f
zf8?;OXIaC*z`zW)T#kXAfq_AsfrmkoL4rY=L6t$4!I(jw!IeRYA&x->>=+Y>*>J}s
zFlaGoGcbbeW6)vH1v@o?L61S7ftf*q!Gpno!H|K4!H9u@frEkZ4}&W^gE7M442%r*
zCJd%fhu1PNfqk#6rM;a&*j8pXgEZ8sGTRtL!Xa#scSOTM0S0li7}z~p3~UTK3|tI)
z3}Orh3`z_}V7DqjjDx#X8R}Lx23ZC(26F}`1|tSNQ0y@NVNgN}PX<N?3kFN5tE!-`
zQUJSZatW70Jt(3e_L?)WF<3HiF<3LmFxWE4F*qREs{prG0dB7pgB8?XsI_va)><>z
zK&@TJzy$W0wU*9y24Op}<z_6REb|z&>SgCKs6j%5U6f@T1J?lt)@=-8GZ_S-g0i6C
zVp+qCh*>EHHgLjYWAI?$W$<FqX7FJ!XYggPWC#Ge7!s@2a2H!cUCh8>&0x!*&A`OK
z#$XB#GiC-}O$I%%Hz3i<&cOJW!IBZ#A55Uk#K6d)IQcNQUcI>XHU^2A3>>ny%NaOZ
zm>HM<za)cj86?exGB7cOGYBz6GH5YGGw3kHFz7RcGng_YfL*7>z{0@7V94OWU=EH^
nbGSRrq3&d2FlBIrhb%V(^IrxQMn<h)46F>Cj0{fT?BxsqO^B@N

diff --git a/out/production/comp90015-dsass2-infinitymonkeys-remaster/server/Server.class b/out/production/comp90015-dsass2-infinitymonkeys-remaster/server/Server.class
index 52bd59819c3dfe46ae78bce48a1b2617d0822004..0c1967b8f8157aa219773025b224455fa21cf3ef 100644
GIT binary patch
delta 973
zcmeAWI4)3s>ff$?3=9k=3`JZFG7PTl3~pQuObo7^415gk><k`U46F>EAdVM1gEtog
z2ZZCp&fv?%zzyN}u`~E{G4L_Cf`|ZihCnU`L53hMhG2#e5E0735XQj}&cP7D%@D~D
z#mNxO5W~R`%f%4K5YNuQm@u(={p4dzA_7uA#i>PQsYUuOMTzB^dFhj784DN_C-*Uy
zFa}O$W;#6i7L%o%I)erygK$=2S)zVvNoJ0|V^L9JrB7yY2@iuTgWP08W|?|*h9n*a
zMFu5C22rSi&KZd%&iQ#IMfo{7sYN^t$_y%u3=&XDsBOsdstjt347^bJV6dZj7%UMs
z=OpH(>$_GYrxuiC=I8M+Br|BRGo<h^q%x%OFfgYxWK3SqY@x-@kjcZ4#gNU;ki)}}
z%aF&&zz;D?A+uPaC^a#qlAR%+hoOL>aI+4}R7Q6`1{nqh1{MYukWUyG8RQul7?>Co
z7+64_0m~>esDNoz1~mo-24)6E26YAv1||kg1_p*A1{MZJP&`gzQ?J+B&A=V0wVi=y
zD+BLFurXQ;3=C2XYzzzxq6{nyVhsEY;tbLZ5)A4Lk_^TSQViM*3=BLF0~mA|bQu^J
z^uSgzGUzjKG8ixzGBARzsbOGZU;>%4n}IKKI|ILu_BIBA<qRAkT4*EK03L>Veg;7X
zW(I_v3Je?!N(?*<>J0o0DhvV)Y78O_8elsW7?>G27+4sL7<3sJ83Y(u7>pTAz{ZF&
zm@=3#Fff=iFfgz)F!{4HSb%(J3HR|2uvP|!2tgL_9Sp+ZI~YWKghYLX#Qf@o#I0C%
zGq8e!fX#|^Hv<QV#c9O`3l=MOZ5>J0oeUDp4BEPqY!HSdizGXkwTVGeNNO8{G$Q28
z7<d^N7<3uf8T1&q84MWs7z`N%8H^Z28B7@D8B7^88O#`r87vrV7%UlF8LUbe{26Q*
z!WnGAUJPR3U|?W~fCei!gD-;>gEa#q10RDIgAIc%0~3QFgFAyAgDnFygD8VDgFS;S
w0}F#ZgC&C^g98IAgC>JMgEE670~>=egDQh6gA>>ppp*iN97YCba0I&m0CQ-PDgXcg

delta 965
zcmX>u&>>KN>ff$?3=9k=4EbCP(hSb*3@%&@ObpJP4BQN^><n&P46F?9AdUw+gC`dQ
z2ZZCr&fv|(z|G(cB7E2xe7P9-82q>x{22m3L?8!45C=mr2SW%uLns%6D1$pULl{Fi
zCqo27BnLwj7eh2d3_C+CBLi#c#Fo{Q6Bv_u;}{uOauYN27#YMgq9<Qu6`A~mF@(`~
zvL(~u$@+{Ulm9ST)~hh6GBOBfC6*=XmzHGa=sOk_C06=m7MJia$S}w<GKd$a7L}zI
z={x6SrskD6=jW9a<>%z27V$8sFvRmPC@?58GKj*|WF(@fP-0MKWZ;EL27}GvVK75j
zn3I?%o38I#k(^pkl9`{!!;rwB%Fd9;!;r*~%)^kvkUIGzvxO@og9OwFm!ib-%)E4j
zBiI?zco@<dGT0e1c^I-7vKblpA=W5l7Aq8`CZ<%fGvx3v<TB)K4rZCkXwS_c&A`CG
z%)kQj8v`SQ90LOb6N5Yh3&<Y~3=Av`N({<i6^slj45|!F3~CGv3`q<u42%p63>uU5
z+0^Sdg7v5~FffQQure?(h%m4)h%)dqh%rbrh%=}&NHAzHFfi~ybTDW#XfZG_XoJmW
zWYA&YWYA^MV_*cETf@M_z{J47AiA4@J90Y%kB{~?2Hxci93Yy1BiH~Q27U%U24)73
zby5s$3=9nQats^{3Jg39sto)LN(=%FDhwhFYG6AR7?>G27+4te8MGJ}83Y(u7z`K;
z!N!O(7%>=w6C?uzI|GwHJA*06OJ;B{{s3!bV2BW8@!r885Wa&!&__tfS4h}TNW_X|
zHv?;=)^-LqE7si%^&B83rxn|722l`8%!*xGN0N0XgE%vTwyq=_gdxcy$qr_1VvrD$
z+{Pe<2sJYXUT}!8Gw3jIGw3n!G3YZ0G8iy`+$hgr%%I6&!eGo`#$dx>&fv;m!Qjte
z#SqS54fbIW14jx2149HfSh*Q|8O#|h7#JD&7`zxP8LSwX7z7#I8LSzs7?>GE8Jrnx
v7_1mr7~~l&859_78CV%K8T1*H80;9>7>pTI8SEJx7}${_hmpY%9Jx*ag=v%D

diff --git a/out/production/comp90015-dsass2-infinitymonkeys-remaster/server/User.class b/out/production/comp90015-dsass2-infinitymonkeys-remaster/server/User.class
index 3b63492ccae132a24d5de57832e8052015689b63..bb1cfcbe52b605032645164945747218b2160ba8 100644
GIT binary patch
literal 1273
zcmX^0Z`VEs1_l!bLoNmm1`SRIb_Pulp#>teL4*#7&}C=PV`tE3WZ)<*PA$qy%uQuv
z5c0`NEKAhSNz6;v4=yRn%uBasWZ?F6&PXf?El5c$No8aZ@hM8p%`ZvSM-sJWWZ?63
zDM~EQ%u9!<6Njrqk+5cD;PrIQ$xO|In<xfXi7al-$iSXi?3j|9na9Y$7{$oIW|Nth
zSz^b?5T=3YN`w(`r&=S#kgP+9qB=`6jFExGIX@+pk%8YQGcVPzG&d==C?qi{2OKQ<
z$%#2(iA9+pK2(sUBqOt!k%8BzIJKxOwMaj-IJF2ATIs1JAf_KUKt(h(F&)duz)_r9
z0`(e;Mij_y)<lR;nKd+{7#aA|Q%jJ-mytnCLlfa0gclhZ1VJiMyu!#JiKG}s%9@cu
z0Hhu{oEaG;kd!0KSTizk1?QI*C8xS&f<l24<Sji=0^wm0W-#Dk;AG(9Vc=%q;bGuq
z;NxN7XAt0F5M&TyWZ*^$5=I6AkQPXq@=wZ2O)g<%VAjwKV^CyZXW(F9U|?ln0vW}?
zz`z7D4NUVg@PTQ51_3ZF$RNbPz`)MH$RNxh!obKN%D}+T$-u<G%D})NueF_lQA>L(
z1Cy4{Rt9D*NtUe)ELyr-8CbQLw=%G81REg6z`!8Kz|O$HAi%)FAjrVUAjH52HcW&;
zl0lR~jzNq;9Gq*wMlwh+NHTzcJlJWBAZx&mV*;~4&SD0$Kn`VLU}TVDkcK)-pMjA9
zq@Go43j@;zxaDkMK`F2$JYY5})DlJp83tLXW;+HZ29OnOTGA*^=K_n$Gq5r!fK3ns
z^Vy&#Ffgz&$T0|kEf!>uhnj`#5VkdF4p9LcgYFOo21P8InbCcriB+=_gEAJ)Ea;kb
XuxeIeP{pE|6<xC)R?TW)&#40dcD3M%

delta 582
zcmey#xspTk)W2Q(7#J8#7__+<*cp^L8Q2(9K!hrYPy-R_><k+044M=5iYA^EXLOkO
z&|tDU<G0D)Op@XP3|c%491NU13|tJ{JPbSxygUqi4E&QDn6&EI7}yyY7+4sXKnfTb
z7??n6z%&m7FPP?I;Adc9U}Iop5MU5wU}O+tU|=X^U}9ilU|^8c+RnhJrM;DbNlRxd
z1GARyRt6R==B*5@8^KzI85kI(7}yvX7`Pc&7<d>s8F(4^82A{38Tc6_7z7wZ80r}q
zv>+xih%$&VfPf^}C5#}`!ERv!vp}w4W?*CxXOMupL7#z<0i=pmYYPL@2Dp77hcYmT
zFo-ZPFz`SWK#gW(kYtd8YPMrwVgMOj&!#1f;#@AUup|R3gA~{ZF)*JEY6K`8q#5|Z
zHuEvaKn+873F{g(m&k#QL3fEPgB)114FdzRZf10UC}Y(v&!7O(J-MDmOdS-)5I?J7
KRjUYgj}idL?<f!e

diff --git a/src/GUI/ChatScreen.form b/src/GUI/ChatScreen.form
index 7ff8dff..9d8893e 100644
--- a/src/GUI/ChatScreen.form
+++ b/src/GUI/ChatScreen.form
@@ -8,7 +8,7 @@
     <properties>
       <maximumSize width="-1" height="-1"/>
       <minimumSize width="-1" height="-1"/>
-      <preferredSize width="1200" height="700"/>
+      <preferredSize width="1200" height="600"/>
     </properties>
     <border type="none"/>
     <children>
@@ -185,7 +185,7 @@
                   <text value="Send Message To:"/>
                 </properties>
               </component>
-              <component id="cc35d" class="javax.swing.JComboBox" binding="sentMessageToComboBox">
+              <component id="cc35d" class="javax.swing.JComboBox" binding="sendMessageToComboBox">
                 <constraints>
                   <grid row="2" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
                 </constraints>
diff --git a/src/GUI/ChatScreen.java b/src/GUI/ChatScreen.java
index 0c43cd5..e786ca1 100644
--- a/src/GUI/ChatScreen.java
+++ b/src/GUI/ChatScreen.java
@@ -15,7 +15,7 @@ public class ChatScreen {
     private JButton sendButton;
     private JPanel drawingPanel;
     private JPanel othersPanel;
-    private JComboBox sentMessageToComboBox;
+    private JComboBox sendMessageToComboBox;
     private JTextArea chatDisplayBox;
     private JComboBox userSelectComboBox;
     private JButton kickOutButton;
@@ -33,30 +33,38 @@ public class ChatScreen {
     private JButton quitButton;
     private JFrame frame;
 
-    public Client getClient() {
-        return client;
-    }
-
-    public Client client;
+    private Client client;
 
 
     public ChatScreen(Client client)
     {
         this.client = client;
-        exitThisRoomButton.addActionListener(actionListener);
-        sendButton.addActionListener(actionListener);
         yourNameDisplay.setText(client.getUserName());
-        drawingPanel = new PaintGUI(client);
-    }
+//        sentMessageToComboBox.addItem(client.getUserName());
+        quitButton.addActionListener(actionListener);
+        sendButton.addActionListener(actionListener);
+        frame = new JFrame("Application");
+        frame.setContentPane(panel2);
+        createUIComponents();
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        frame.pack();
+        frame.setResizable(false);
+        frame.setVisible(true);
 
+        SwingUtilities.getRootPane(sendButton).setDefaultButton(sendButton);
+    }
 
+    private void createUIComponents() {
+        drawingPanel = new PaintGUI(client).getGlobal();
+    }
 
     public JTextArea getChatDisplayBox() {
         return chatDisplayBox;
     }
 
-    public JComboBox getSentMessageToComboBox() {
-        return sentMessageToComboBox;
+    public JComboBox getSendMessageToComboBox()
+    {
+        return sendMessageToComboBox;
     }
 
     public JPanel getDrawingPanel() {
@@ -75,7 +83,17 @@ public class ChatScreen {
                 try
                 {
                     System.out.println("Send button pressed");
-                    chatController.broadcastMessage(client.getUserName(), message);
+
+                    String toUser = sendMessageToComboBox.getSelectedItem().toString();
+
+                    if( toUser.equals("All") )
+                    {
+                        chatController.broadcastMessage(client.getUserName(), message);
+                    }
+                    else
+                    {
+                        chatController.sendPrivateMessage(client.getUserName(), toUser, message);
+                    }
                 }
                 catch (RemoteException ex)
                 {
@@ -99,20 +117,4 @@ public class ChatScreen {
         }
 
     };
-
-    public void showGUI() {
-        frame = new JFrame("Application");
-        JFrame.setDefaultLookAndFeelDecorated(true);
-        frame.setContentPane(panel2);
-        createUIComponents();
-        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-        frame.pack();
-        frame.setResizable(false);
-        frame.setVisible(true);
-    }
-
-    private void createUIComponents() {
-//        PaintGUI paintGUI = new PaintGUI(client);
-        drawingPanel = new PaintGUI(client).getGlobal();
-    }
 }
diff --git a/src/client/ChatUpdate.java b/src/client/ChatUpdate.java
index 986f6a7..ea4baf8 100644
--- a/src/client/ChatUpdate.java
+++ b/src/client/ChatUpdate.java
@@ -17,12 +17,23 @@ public class ChatUpdate extends UnicastRemoteObject implements IChatUpdate, Seri
     }
 
     @Override
-    public boolean notifyChat(String fromClient, String message) throws RemoteException
+    public boolean notifyChat(String fromClient, String message, boolean isPrivate) throws RemoteException
     {
-        client.getChatScreen().getChatDisplayBox().append(fromClient + ": " + message + "\n");
+        String outputString;
+
+        if( isPrivate )
+        {
+            outputString = "PRIVATE (from " + fromClient + "): " + message + "\n";
+        }
+        else
+        {
+            outputString = fromClient + ": " + message + "\n";
+        }
+
+        client.getChatScreen().getChatDisplayBox().append(outputString);
 
         //client.setReceivedMessage(message);
-        System.out.println(fromClient + ": " + message);
+        //System.out.println(fromClient + ": " + message);
         return true;
     }
 
diff --git a/src/client/Client.java b/src/client/Client.java
index ef1939c..b5c34ee 100644
--- a/src/client/Client.java
+++ b/src/client/Client.java
@@ -19,16 +19,23 @@ public class Client
     private Registry registryServer;
     private IChatController chatController;
     private IClientController clientController;
+
     private IDrawingController drawingController;
 
     private ClientUpdate clientUpdate;
+
     private ChatUpdate chatUpdate;
     private DrawingUpdate drawingUpdate;
-
     private StartScreen startScreen;
+
     private ChatScreen chatScreen;
     private PaintGUI paintGUI;
 
+    private String receivedMessage;
+
+    private String[] connectedUsers;
+
+
     public PaintGUI getPaintGUI() {
         return paintGUI;
     }
@@ -39,6 +46,12 @@ public class Client
         return chatScreen;
     }
 
+    public void setConnectedUsers(String[] users)
+    {
+        this.connectedUsers = users;
+    }
+
+
     public IChatController getChatController()
     {
         return chatController;
@@ -72,9 +85,9 @@ public class Client
         this.clientUpdate = new ClientUpdate(this);
         this.chatUpdate = new ChatUpdate(this);
         this.drawingUpdate = new DrawingUpdate(this);
-//        this.startScreen = new StartScreen(this);
+        this.startScreen = new StartScreen(this);
         this.chatScreen = new ChatScreen(this);
-//        this.paintGUI = new PaintGUI(this);
+        this.paintGUI = new PaintGUI(this);
     }
 
     public static void main(String[] args)
@@ -83,7 +96,7 @@ public class Client
         {
             Client client = new Client(args[0]);
             client.connect();
-            client.chatScreen.showGUI();
+//            client.startScreen.go();
 //            client.getPaintGUI().showGUI();
         }
         catch (Exception e)
@@ -92,6 +105,22 @@ public class Client
         }
     }
 
+//    public void doSomething()
+//    {
+////        new ChatScreen();
+//
+//        try
+//        {
+//            new ChatScreen(this);
+//            System.out.println("Sleeping...");
+//            TimeUnit.MINUTES.sleep(5);
+//        }
+//        catch(Exception e)
+//        {
+//            e.printStackTrace();
+//        }
+//    }
+
     public boolean connect()
     {
         try
@@ -102,7 +131,7 @@ public class Client
             clientController = (IClientController) registryServer.lookup("ClientController");
             drawingController = (IDrawingController) registryServer.lookup("DrawingController");
 
-            if (clientController.join(userName, this.chatUpdate, this.drawingUpdate, this.clientUpdate))
+            if (clientController.join(userName, this.chatUpdate, this.clientUpdate, this.drawingUpdate))
             {
                 System.out.println("Connected to server");
 
@@ -116,4 +145,14 @@ public class Client
 
         return false;
     }
+
+    public String getReceivedMessage()
+    {
+        return receivedMessage;
+    }
+
+    public void setReceivedMessage(String receivedMessage)
+    {
+        this.receivedMessage = receivedMessage;
+    }
 }
\ No newline at end of file
diff --git a/src/client/ClientUpdate.java b/src/client/ClientUpdate.java
index 4faa272..83967bc 100644
--- a/src/client/ClientUpdate.java
+++ b/src/client/ClientUpdate.java
@@ -2,7 +2,9 @@ package client;
 
 import remote.IClientUpdate;
 
+import javax.swing.*;
 import java.io.Serializable;
+import java.rmi.Remote;
 import java.rmi.RemoteException;
 import java.rmi.server.UnicastRemoteObject;
 
@@ -19,7 +21,29 @@ public class ClientUpdate extends UnicastRemoteObject implements IClientUpdate,
     @Override
     public boolean notifyClient(String fromClient, String newUsername) throws RemoteException
     {
-        client.getChatScreen().getSentMessageToComboBox().addItem(newUsername);
+        client.getChatScreen().getSendMessageToComboBox().addItem(newUsername);
+
+        return true;
+    }
+
+    @Override
+    public boolean updateUserList(String[] users) throws RemoteException
+    {
+        //client.setConnectedUsers(users);
+
+        JComboBox userBox = client.getChatScreen().getSendMessageToComboBox();
+
+        userBox.removeAllItems();
+
+        userBox.addItem("All");
+
+        for( String s : users )
+        {
+            if( !s.equals(client.getUserName()) )
+            {
+                userBox.addItem(s);
+            }
+        }
 
         return true;
     }
diff --git a/src/remote/IChatController.java b/src/remote/IChatController.java
index 64e6811..8230587 100644
--- a/src/remote/IChatController.java
+++ b/src/remote/IChatController.java
@@ -8,4 +8,5 @@ public interface IChatController extends Remote
     boolean broadcastMessage(String fromClient, String message) throws RemoteException;
     boolean broadcastMessageUserLogin(String fromClient) throws RemoteException;
     boolean broadcastMessageUserLogout(String fromClient) throws RemoteException;
+    boolean sendPrivateMessage(String fromClient, String toClient, String message) throws RemoteException;
 }
diff --git a/src/remote/IChatUpdate.java b/src/remote/IChatUpdate.java
index 55b2e62..0c9b54d 100644
--- a/src/remote/IChatUpdate.java
+++ b/src/remote/IChatUpdate.java
@@ -6,7 +6,7 @@ import java.rmi.RemoteException;
 
 public interface IChatUpdate extends Remote, Serializable
 {
-    boolean notifyChat(String fromClient, String message) throws RemoteException;
+    boolean notifyChat(String fromClient, String message, boolean isPrivate) throws RemoteException;
     boolean notifyUserLogin(String fromClient) throws RemoteException;
     boolean notifyUserLogout(String fromClient) throws RemoteException;
 }
diff --git a/src/remote/IClientController.java b/src/remote/IClientController.java
index 35539cd..bde0a0f 100644
--- a/src/remote/IClientController.java
+++ b/src/remote/IClientController.java
@@ -5,7 +5,7 @@ import java.rmi.RemoteException;
 
 public interface IClientController extends Remote
 {
-    boolean join(String username, IChatUpdate clientChat, IDrawingUpdate clientDrawing, IClientUpdate clientUpdate) throws RemoteException;
+    boolean join(String username, IChatUpdate clientChat, IClientUpdate clientUpdate, IDrawingUpdate clientDrawing) throws RemoteException;
 
     void quit(String username) throws RemoteException;
 
diff --git a/src/remote/IClientUpdate.java b/src/remote/IClientUpdate.java
index 9eb5bc9..c1337f9 100644
--- a/src/remote/IClientUpdate.java
+++ b/src/remote/IClientUpdate.java
@@ -7,4 +7,6 @@ import java.rmi.RemoteException;
 public interface IClientUpdate extends Remote, Serializable {
 
     boolean notifyClient(String fromClient, String newUsername) throws RemoteException;
+
+    boolean updateUserList(String[] users) throws RemoteException;
 }
diff --git a/src/server/ChatController.java b/src/server/ChatController.java
index 79c344a..8fbff1e 100644
--- a/src/server/ChatController.java
+++ b/src/server/ChatController.java
@@ -26,7 +26,7 @@ public class ChatController extends UnicastRemoteObject implements IChatControll
         for( User u : server.users )
         {
             client = u.getIChatUpdate();
-            client.notifyChat(fromClient, message);
+            client.notifyChat(fromClient, message, false);
         }
 
         System.out.print("...DONE\n");
@@ -69,4 +69,22 @@ public class ChatController extends UnicastRemoteObject implements IChatControll
 
         return true;
     }
+
+    @Override
+    public boolean sendPrivateMessage(String fromClient, String toClient, String message) throws RemoteException
+    {
+        int toClientIndex = server.clientController.getUserIndex(toClient);
+        int fromClientIndex = server.clientController.getUserIndex(fromClient);
+
+        if( toClientIndex >= 0 && fromClientIndex >= 0 )
+        {
+            server.users.get(toClientIndex).getIChatUpdate().notifyChat(fromClient, message, true);
+
+            server.users.get(fromClientIndex).getIChatUpdate().notifyChat(fromClient, message, true);
+
+            return true;
+        }
+
+        return false;
+    }
 }
diff --git a/src/server/ClientController.java b/src/server/ClientController.java
index 267c0cb..bcfd261 100644
--- a/src/server/ClientController.java
+++ b/src/server/ClientController.java
@@ -1,11 +1,12 @@
 package server;
 
 import remote.IChatUpdate;
+import remote.IClientController;
 import remote.IClientUpdate;
 import remote.IDrawingUpdate;
-import remote.IClientController;
 
 import java.io.Serializable;
+import java.rmi.Remote;
 import java.rmi.RemoteException;
 import java.rmi.server.UnicastRemoteObject;
 
@@ -19,11 +20,11 @@ public class ClientController extends UnicastRemoteObject implements IClientCont
     }
 
     @Override
-    public boolean join(String username, IChatUpdate clientChat, IDrawingUpdate clientDrawing, IClientUpdate clientUpdate) throws RemoteException
+    public boolean join(String username, IChatUpdate clientChat, IClientUpdate clientUpdate, IDrawingUpdate clientDrawing) throws RemoteException
     {
         server.chatController.broadcastMessageUserLogin(username);
 
-        User newUser = new User(username, clientChat, clientDrawing, clientUpdate);
+        User newUser = new User(username, clientChat, clientUpdate, clientDrawing);
 
         server.users.add(newUser);
 
@@ -34,6 +35,8 @@ public class ClientController extends UnicastRemoteObject implements IClientCont
 
         System.out.println(username + " registered successfully");
 
+        broadcastUserList();
+
         return true;
     }
 
@@ -47,6 +50,8 @@ public class ClientController extends UnicastRemoteObject implements IClientCont
             server.users.remove(userIndex);
 
             server.chatController.broadcastMessageUserLogout(username);
+
+            broadcastUserList();
         }
     }
 
@@ -75,13 +80,16 @@ public class ClientController extends UnicastRemoteObject implements IClientCont
         if ( adminIndex > 0 && userIndex > 0 && server.users.get(adminIndex).isAdmin() )
         {
             server.users.remove(userIndex);
+
+            broadcastUserList();
+
             return true;
         }
 
         return false;
     }
 
-    private int getUserIndex(String username)
+    public int getUserIndex(String username)
     {
         int index = -1;
 
@@ -96,4 +104,19 @@ public class ClientController extends UnicastRemoteObject implements IClientCont
 
         return index;
     }
+
+    private void broadcastUserList() throws RemoteException
+    {
+        String[] connectedUsers = new String[server.users.size()];
+
+        for( int i = 0; i<server.users.size(); i++ )
+        {
+            connectedUsers[i] = server.users.get(i).getUserName();
+        }
+
+        for( User u : server.users )
+        {
+            u.getIClientUpdate().updateUserList(connectedUsers);
+        }
+    }
 }
diff --git a/src/server/User.java b/src/server/User.java
index 7211122..543f26e 100644
--- a/src/server/User.java
+++ b/src/server/User.java
@@ -12,7 +12,7 @@ public class User
     private IClientUpdate IClientUpdate;
     private boolean isAdmin;
 
-    public User(String username, IChatUpdate IChatUpdate, IDrawingUpdate IDrawingUpdate, IClientUpdate IClientUpdate)
+    public User(String username, IChatUpdate IChatUpdate, IClientUpdate IClientUpdate, IDrawingUpdate IDrawingUpdate)
     {
         this.username = username;
         this.IChatUpdate = IChatUpdate;
-- 
GitLab