From 4b748e62f78875feb0702bd122c76ca53cd82661 Mon Sep 17 00:00:00 2001 From: Dmitry Isaenko Date: Sun, 18 Sep 2022 01:18:39 +0300 Subject: [PATCH] Move to JRE8, store/restore CD or DVD user selection, fix issue when file was not actually deleted till application closed, add few cosmetic changes to pom.xml, insert screenshot to README.md --- README.md | 2 + pom.xml | 8 +-- screenshots/1.png | Bin 0 -> 45488 bytes src/main/java/tihwin/MainAppUi.java | 6 +- src/main/java/tihwin/Settings.java | 6 ++ src/main/java/tihwin/ul/UlConfiguration.java | 9 +-- src/main/java/tihwin/ul/UlMaker.java | 72 ++++++++++--------- src/main/resources/locale.properties | 1 + src/main/resources/locale_ru_RU.properties | 1 + 9 files changed, 64 insertions(+), 41 deletions(-) create mode 100644 screenshots/1.png diff --git a/README.md b/README.md index 8f4e817..d041158 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ OPL-compatible PS2 tool for making split files. Sort of ul.cfg manager or USBUtil. +![Application screenshot](screenshots/1.png) + #### Let's stay in touch GitHubs are arising and passing, cozy mirrors are eternal: https://git.redrise.ru/desu/Tihwin diff --git a/pom.xml b/pom.xml index d88ae5d..3e639b6 100644 --- a/pom.xml +++ b/pom.xml @@ -4,15 +4,15 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - loper + ru.redrise Tihwin Tihwin - 1.0 + 1.1 https://github.com/developersu/${project.artifactId}/ - NS Atmosphere dongle flash tool + OPL-compatible PS2 tool for making split files. Sort of ul.cfg manager or USBUtil. 2022 @@ -36,7 +36,7 @@ Developer +3 - https://developersu.blogspot.com/ + https://redrise.ru/ diff --git a/screenshots/1.png b/screenshots/1.png new file mode 100644 index 0000000000000000000000000000000000000000..1cb2756a78b595d61f3f93e830bb4ea6ed0e8e86 GIT binary patch literal 45488 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πDgeaDEFjXL!Z( zOZ5s7{m@e>_=tlM9?E4{{0X;@k*FR~ycpd)=nJtN!?XW;6zQ<=ybVp;GjPqXjji&s zfHEMww=WkDH%*Jw*H>92dILVLlYv%`=vEhBMS7M|b3!P#RSvA0;uM*xFh4cN+;`9L z`ZC5z%+%6$u2EGUcX#gZHZ|7vUx-%C`we^*D8Cs6n_=0YE7&Z-?t5*a4-bDl=RPl% zen;uO)1ti3ImVs*7Pe!F|LV4dUXx-0DhSe8n+c`<+FM$v(h*Zy`_nDF_6uEYKmR>a z0KS(|>JeKAdM|krP&m+^1@S|VMBtZ9Y$SxGX!kofolY@^AZ-{Xd%A3BlpHo{2AI$nV9ap_?ggAPmJl|4U@NZ*J5^zf1*EIk>d!DHYEiVcIoXZS znpPlSzacLs=nN^S3>y30vOW~DO}HRAR?K=>{NBETkWyAVC*0UT#~V_*X&Gqc)%1A0 zmCNfS^?bH3+fC)IdOH|!HG4Y%P?wkE0ozzHfDCO6j2K+4Y~KzD002HgS6dL+!pIS5 zU}R!u%};*X+DQ&HGvp^%W0z-=w-q%qHIs6;H&Su`qzZPo0CO9X3ko3ex$?XLSQ$Bj zfUZ`S)($+b{N#V(^1R*uNoFJm{w3mQ!B4I(uLu;iu{Q#;F|aW((Tls9IkS)pAOiX9 z4UKt}#U%cQczfa}H+6Kh{+18?M?WiDdHH|CTRZ&C!W$oqt{_`R zW(FokD=WtTEaBiN?)(Pww?hBN5)P_w=O~QIMh-Sk_FyA%XCrGzivNT#1pm9dt&_dw zU(GQDGa6YMS-pumyw%G5->Q_9mRJ0Di9ZyWm|5BWRqBoG|0d~ZX8d1d{WsnIIS?%))BK$;{08R>OZlDA=35c_qm5KehS;W%vh*m5qh#?V@L4 zGB%=T<6sBTb8#~p(}OvU!C(VUc4i|M=D(l}!8{T+_Ew-bbDCL!OpF+9txf*Q_(M34 zu%a|SIST{Rf2Al|f*g(C3hBj^vC%p7mkv$L?XGqJLie)2ym z0soZzceeancQOPyg2X_MMsJ`@EG#@s+&s)&s!Ys(ZkV`fnOJ$4{zKlz(9GEF|4aH$ z=K=El%j8mK4sZ3l{gw2u9;ISr_phgaJzARm)s=w2zd8jE2>h=mIDnju4FA&e4eMW7 zU{jE_iP78W@wdDFlWz8Za0M=7E-=U#%uR0u0<+Mw85nWXgV_K06*CtTh>4wpot@)f zt@<~*gN?DH3&`F`*yN4JH?H2?^DnM|AO12F&41U$#nkAJ72XJ=XX2*+H(|_7e-p;| zcY_)Kj2Zv5n2+)Q#R=bE0{=0{yp{V`+S}muHWo7edocW)vp0SJZ(e`f;{Rq9K;ZvY z@;~DDf9d*Py8cHD{EvkH*Sr3guKy7O|0Ci5^{)Tl=tBIj?Ua%A+bYQAZL{R;WB%)H zqXlaqD=7vL2Ur1qDxZ+1zoj79N@+L%0H}R`J`jntsDy8caE{XQ;&6Ki7`OMNE?7c|=@KZe1Hz^I}!1JTEXqy{s8vuBN;MsqtGJ3H5=TXM`l z?t-aW9mYKcSjWdbbhBJ8|8O8}n$Ot4)*z&$WliW2jy7`0fFY86cgUHky| zDL0CLBzOW#Ay(?&>QJBzbfX}D)q-^UmyVQ}C8Che^f&PQwSG_M09|Mei+|M5k9tF8 zVCTOowd!G9BHAgqx|5!wBKsTCiHEtr&D-*5l*HWjQQQ|Jm2*mg!Q8@D0s0L3>Td$_ z$B-}R@cSB3HuUQLv@a$0zHA9|>$sYsz;PtcrwCH`Zw`L(#f>1G#W4@Kz^$bJPS+^z zMC_s+!CQ2)DkKv?-H3FPb4?BvZg=3pLH%286S!nMcV*_urKZxT>PmI0X#N1SG!$sE-o5H}Ib;Wib!1tZuK3ZEe| zV$5P1Mcb|$(I;N9`&|&e;w>Cy*i?r5e*0s~KW4~L6oB2KgS|pVj$jpnXXf-q_vV#_^B2a7g9)M2c82@%JGO4xd5!+S5actE7Ce$-+2sP+@rk5llMQkPnq${!l zl1gVNui?b1hM0|ZVcirUBam(MK~0Q3)D&BjE%&v;tl!ZqtyfEdSYP^Y!xP8tqR>X3 zE2-i{IM|9$Qk;h&R({wBgU&t}mO?;g&R} z@o%G0rT-h6E@hs#+5WR%ZmHt4cQJSK+3udu=%irSI9!SOh5#ux8AMjR88;p!mhTQe z#Qm4=>ofcyfFhv!3 zFx>dVWAs)CMX(PnEsei#63LmyC^JLOMHR4i2%5u24bC0T-l@mlGm*;+v(3(AZ+1bv z{pcTezM~LiMC(lBL{rnX6aPqPy8BXp4m0YFA#;0SXqjG;Ab!X$Tv%^Bptd;j6O%N{ zVwB}jGw!5T?pa8=O@w85zRF9MZb%k;@E|+d^dp?qe8aGE*3Y!8+WUKrt)cQoZcHLl zS#Xxd$B@`1%#p`pL?{StpXY1Wn{l79C3c^SlA^QeqpIwi{@xR~rb*D3F8JW|OjFi`;P%fP zgf0W0SB>*L_Uem+O}YG~RIt*_&HpgR{_2VEvhIL3mLh;c#p}FLADvwP%{ZlO>AQM; zED1~=l?@c8)6c{b`jsbp=_n=l-ysPchDjWziI_cs>e0eY`IaQ173{+cF1PkI&!P0x z`2eWe(NpbDT$~1vBu7`4&&CnBmL&0x#I4&z3x%zcq@NnvJV-7N40DAiEceyj6OgJ{ zwwgYjSOo3l5mRgG<&smxH-3rZY>*<(Op?;@i5sTF4Vp`aNiyIDn_2TNIyw-@p3&WC z&RLjx+&U~jtg=^m@zPDUjND_6#GAVJ>|zk&h4Sth)vQ~F3|UQIEv8!QGJT6&8I-pc z)T!}`py%|O`g&(Q|LONaiNDK5ohx#uXo9 zgvNVB#6&>9bz5Pt(>Wjk*too;Vf9UQfJ8!4A>Z^}T5+HWNvHHdhm$XFhb$n?4$zY( z*-31QIY{UUUuO#4I(!T6QS$BFTp^#un7u+&u!Js5DSl#>G(Yy`{Pl;#T_bj-lpqz8u+($Eq+S^8STwhhoxwH_Ir*;9VR^u zZZ?hV1m#Ytm(BWP-(m9ZF)WFO2^kDvVL=7MNpm2=Xw4(MAg2-E1mp;5DF-UMfzuW8 z+C7jRFXeX13T~+*aSUrH4fxVksKHA~vWtF5Bd$cqi2%!SUf< z{OO_sw2Owohnu9fx-81*xdv`VPCcW#{Mq<#V9LXcipYK_nI6+RrYgS#bj+BQCITy$h&GUM=VtOTdQuGGZ?1bFA@HVo-_TdSP7NA!xUF*a~EvG4mlM0_mB z*6KZ5V($#65q4V9EioosF3Ewl(>^1g=kiewRKE66FDWP#n~c~+%R^sB2?gC}H1e-w z!A!Sh3osmjM6xRUHh!d!)JHY#S}C56mKcM3_)wo0jq`ApnSYJza?Tu0pb^e^tgll! z*l4*!wmS$~VPTEHNtvc4`D&{Bn<(06H+Ig32AI)9l0oNgR>S1>z;~zHRsqoarT6!2 zMxfmhtQlo*?9D6|5ROn}f4hKmS@UGLC@$Q=Km9#6GrnO(ii8z!t8<*L_)Qnd_u9N; z5F7o*vU7Wa^5ZmM>(Y-VEVgp$&bBh3W5az5FJLys5OvOKh&9J)(J~+9L(n%)-82qD z3K*mO5(Ezp&wysm)j*rZQ&TUtHQ2+Eo0?9@?S^#&{qgdjbK0H)u{dOe4QXNk6aOmy z@APyr`x9)$2dR@?m~o=;2qe9R2T;G$YGBmzyGn1?IPfLe^xg;GHJP>#l|iV#Eb;y6bU8@z|&xt6&DJ#3dBmWS+6R~ zJh==>sy7;gWy+mr?t1O|uT=P))z@*!$tX4mq2bWkZ>A##9rglML0#>}LVUI2!+IYV zL&ja^HJ1g>H$=2u7ld6GuOAVh5N*#7UZMtDS3iN_+##MT!r8OVU1kQm4(1Apm+huU zIk#hrvP9M~dN+~wM9%LcwJ#qeOH04CD@{{e`djG7@&5j$(YV-09@U_vMHQiaDdD)5 zq$i-M6`~=?g+^MTF>MfIqD)ZX)IOn=J=XlfiO0oB_HFsaS)_9{DxN&Nk&7Vf0ya)! zr(Iw7)wBoTM%JCete%XG-b2KqP8y`f;zcrsT+OaO(SZV5G2MDT;{e=LZ%BpQ^4qDd zzpU2iIC%PrRiB){C&!At+uM`Ht{8{zD`H_v8_5y3rUnBAV%+w- z1gA{Kj^9NSbst{T)(nrU3K6tf9*ekqOkuObB~w0N9ALE2QwHb)2^fX0Ghz<5#!syq<=5VIYwjhDFTZTj zZ)OE*XPLLI^leV4eRbPfPuJb`7xBPq#B={eooM6w0zJOn{@C_=3r(9q4Ez1+$E(zN z{2BcI(4EUBj$G91k?NoD^UplkhJ9QkSfPAoq zaqD^%$xCn=^=lY9Qzd;^k;0NURfbZREjjhQc&Lp9t-N`x>!S8Xn9w&d^D=m^q};1x z*sIEIE2QE^iIzIaA6Dq6H{~88?V~DL2Wj~Roy=KSD|6Kwl@?umV+E`3VE4vU46$(W zd5{N%epid(7xZwlIp(>GpXo7H!G)0~#f9P+UnRD?_)b`u;O3}3E#ivFvdstr(I)~Y zte9xT*4l;ENSbf8qhU>h9YoEQLTwj*P5g`u?;-;N?jp9g8hqMCYW8m~g%LL)-Khr^ zepPI&cngF|QQqKo-ADk19Yb`OF`5wRq$Y2^vn0$lq&L^1~~&=d~Po$d3l;-Y(hEL zDf`%=V^&_*mZUscLS1YGC;5nBx3mBl(C64W)JlN@1?3bP5i^aHn(O7y?}a5b7&|>2 zV%=%MGI1lEC&;`>RB(H>v(=00&Z#Lhfo>1SI`XiDcd`Jbw@KxzE11hchhZ;lhB|$| z0Uk`GL|+OAA0)I;&;Lly&dxs9+UUYxq3+`-o+ujuOfJT1J4mc~l$DAb zNYBZe{r!#;QJ3m8!+>9OOgvdPTJZIp>_}6`;h0bE_mJ%;<^ZOKU6{+lg8o3aQLMdG zqf}|cOOaZbTKSlHd@bQke@!R!&N`LW`?v1 zLIa_5AvZq4!3~r|3r4f9r$jC%u5Yd*z0bKI9RQ)~1sc^#7I-~<-+{?sd30$y|B=Y$ zV;H{u@JWcljihK~Ei`1^1Ar9{KANgv2Veopw4-25#(QJOeIguCVJNXSw4))V`g3f# za*0O{V)8f*Q&7@YCq9B20UU&pl3^O=e7Q#@&IVQ$nf(_0#3)-@P-iCxe13di#mwyz zI#Q+D5mXn0-6;Xik{@NzmLpbAzYThC3rK$3r~NvdodtZc_6Wyp^+uKt>g~FKCC5YNsZ_E(B~kTmoW&uU^;?C${@`28Cj3nlN>ueg z*S)ooBuKn?Et4-coZGha8=i!^GeM47zf|>9HP3+mrXqG3DfrQKZQC(=-Fh8O$Q1GiuP+32tX*}8fCyM&O=2DVF4RuQ;W_Qt4bOb^$VR6$ zKf3N=EaPn&nl7fL%F{IA(O&!t&sD66OY8sc-Q1yBS%wF;8t*c4=0iQORh|5)=U{6y=iX+SR&M=hpxits+e>OztlCJsB-(jmGQ#2>NB# zWvRoP#(_8)Q;}(kMUHIa2D)H*r|vqQ0*PGBw&ZVzNqEG3RJpOHJw0!6s`BmiYEQ6s zURMU{L8gn2I2_=L6A%m|&dRgQvmeVdFDxP?gf|9?x_dhFwQhdMHl>`~N9pScIko-0 zorkvW*W9>@M#Gk&S-Uu?@8IH$Gj%oUz>i1@cj;~@fZO#6@=_Uc?@qR-ZmJJfEwQpA zG*z*Tw@dSoW)!M=*;dTlm8_tT`fWDq|G>0&uB7ffi+V+ayw#g!`J*0#Sd5YDRfJBx z8W5J?+F{7rh4;{|FLz)i}|n{$5rhSH$3V!_V`O) z<1dXB)242#$cE6YDA$QkMmuwIOJ-A%eJ&idkse;qZ!17T z+Hid9CGyWk;g+0lD?3_`PZD|8(#l%zf6=AWRTRv-ZS1l38JX2D+q4ld(h2wW2fEjG z>pR6Ij_f8T>qlsDsPY4-Bd-!}gdxDZ7Nk^jUSgj=e>UR}$hYtsNhA&Sqqf9Iol9Nk zV`8NFy(}BNx|XLWXx5Ejvf_S(PAE4o=S>cvwUgcgKV}a|m5-AKhTuM7#)f|De7WHz z=?_5iM(D>Q(LR%XGJmlF;`bibuQ#u8H6aEw`Rq!Jc~B^{GcN$PP3K_E7Q-X+nV7J8 zxgb}j2uyL5hX(nB8c%|;-la7bl-7AEPrS=|d%sKI?xj|g>E$+L^JQ>*_3G>RGV=xM8k5wFmR=Bq;Cv*~hvecL|;L{NfJGe7|sh zx5oV1g$qc`S`9vZHs?lVf_*Q0wl%qJcY7i89ISLf)Zy}osQSe-jCbG_@wLoQ=tohL z!xJB!`(|>A=Zam5=LqxM(+IBc>q!upY4?Zx-0e>Vo8E+b+NEp~gG6OBg7+xN5n&X{1M*&`1B(bhls7-b#zS#DC18&#t7T!n@Yd5~{vz*=` z=KcH>j~P4DAhiBP$$fDuJ6m$mv8s&fR-(!ba|~mge(jxce&wYt<;^G>%$e&gLA}-C;E2DkTSsr(e_^uWzb0I ziGC&>38e*0!*OgiSlL$k=!>nX+%Gg5omBPUcxlOvH;<{p@Xez^KW(^q1Lx6__CqiS zA;yOxE-t$4p@cpGMo4`}P=xmOg!gtK+?wZ1y!3(IUgPwkV&w24y?3)uAxs?F!Fr>w zDCDv5xsxAGTK93whY3x!7|;fX14d8)%@AFrfN=!hU6`(m3*R=PGa=LjK0)=$8lQV_ z+bl#|sseX|e(_P})N;0jm~SNm%bYA(zl~${i}?3VFnP1?P$S!~HXDK&xZ&?iFq|v& zq7h6oQGy&iU;2;WS@drXl%j;b@{^C3ldQs?EqPC;hpaH;`CTvVPY&dCTu=$%Yxut# z&o;_#N~PK*>jb88Gm<2JZRcJ}lV5*fTb=Em&CC-R`ve~M z+2Mb$Nv!5Fn&FnlME1>ux#MP51>rvIz<_!7L9w8Jk2zci66G z!8Lk)e@>My{D9m$zRD1>suzCd*D*wB9y!UG|Z9uR2G$jYAZU2GX zIqLHx;X6GBF16`W5~+Y7Ug(il*5rI|)=4e;03VK?T0k1DjoA)!;$_jw4LJi53?R>T zMca?Mk+iFwIS^y$NJf(Q3e$Nf$zeVyQ5Rvnzi;!y4^T=|McQ24KoE zLf$aej-(>7mAQWGqKrw8N0P^CC}(FbCgm|!C1O~VEdSn$MfA$mKe(lcO`4J`wE5Aq zgXrDaFIF^uOXy&dInUY9&WDrW0JPFyaJP>+xVU(QxX;>U5--v?0Fx<5Pw`1Iy`btT z)wGh2MY*UdO8ZO75QVv@Cb?tv?_j>{tKkT#+HdQ@f@dF0>*6$U_lqGO&+fY}p%j}K z*$)z?c$Ng$$L^K@p&d6pHiC#x-a#vgknMfaI`RfH(o&I7aPfKe=vV|+N59Ur=B0(5 IAdiBls>u%IBDTXNKeTEyF53OpS`fEbHuH)w+vP3!QMN zTC$=)G4(_q0Uxn>?4}cIA5Xf*0`=Mm*H+Q9-X;^_P=$ol!aNsq`FA@A2dxGRs>*3U ztx>N^?k0GVCp^$~S~88&d5yhZAol+Jnjr+ zMEC8%cgM!grNQ&37~rez<%kaV9$*Nlm@cn15&G@YpIs_Y9EKK_OU_9>Pmw)_dG7W! zF75k`88&Mi?#@2@!69}!uZUg+Ex;VW2iMgc_;WP09k5-~ou_ZuDa^XdVYWw3SZt?- zD8m3Cvpf}yP|cCaMklX=bH5oJm&+Wgo=H;kPSu3DEvGy0luu!Sd3`(+l`ME3IQ229 zCt4@w09+^gKmZOdyBWKjJ0e+4#say^(_qf@zw9iGJeo_?v-e*kGdFl1jIA6Lj!WPA zqh;CB_K9D9?as|P}QD@;v)7_mC zL|n!M`}DmLuV7hXTZTC`uAnegIBUw!ld*RSy$0?WIP^P`L{1)zN6S-YGS%TQsIS=6$&ab zGv;Z>BkEX+H>&dqt>gzH=C!ebn|SWrGdi<`wI@NSaNZQ6PBekfFlyL$4)z<|_Nd`n znVe?>6m8q->!$&X190Esp?rkVD5ff-m8(SgYNtMz%8?=@Ikb28qGZL{OC&%4^DY1+ z#9Y_~0s9zqvipl`Norm<%TdMGk5?bsOYgFGU}FSLKX9lLbuHL!Pn$yz(2b9>I$4;z z&QV|-srAeFJ)^^j?YTgu=Ghf^eosN_TY>EWdx&yd9o zN*RKzIkq)P_%ljZ<3&@cqWoCntCgqPNO})wU|V7~+GdJ{-rcLhU#{y52k~x&ERe zVbAJrkK9d16x%ZS{99-7KZ{I5v!%Pp#*a#FZ^H)2U~H{+ zHbQTyME03{Y&Y!BJ;M*{Ycxi|{&Sd`+5~4rshQOSR2}LPu+sD5F{9_t7SQM?P$+g; zHq*9&Y`d7Iu3N)9TCa0}W5{4fa#{D{6xn1NOJ_$CZ+`&hiW3LOH*YRMY}$1@?n!s< zRW)-9ARkN<4n*N+vUzt+(Y!^SM@P@|Y&Z0gGaSEzl4Iv?nikoZ&!l&IZanO5P0W&P z9=nv3A=7qzLw9rLUAm&f^zrm;=znN2wudgi-k^D^w9q?TQ;HhAz0e?aRAN)OP!n7n zDUl;i5gOd{7VvsIAAXBO!q3g+=6uI=+I_4!uW+dbt!mP}xN1!CFc$QIFKt{@n?Re> zX933w8?kv&KMH40^9I^j?$CHJ6^O3&@~9gYDboD{M3tIi^D+lu6SrG3 z3czkLJ?y$0#-01#B`sKO&Bem@@m4A}@YWl{Z)qW291^`N!TL&mNu1(tgc~k=GYnzT z%QB+r8u4}Ss}rV^bv%{&SlYTk7X9Y}ir%-sU2!O^T+B&bo_D4mnN*HA-8k73f^Lr% zvB1Hoy~D3=IO(1A!lQmrUvtv9bNFAbs`Hcm{kl&t-57c`6+fgwy>x4Jh}7>bkzU@7 z);QonaYYy4aZah)dyHAlS8LC8XnsORzs(dVUE8LIg-LV0|$MNb6Chv9QC4qy2LkhY^Mc+>b zfo3b!cXSY$O3+%7-d~N4XB+G>CK^ftM$ zs++N(oZqyF2`P{pmE_C@9ch-mdAaw(!0IInsN2pZiCr=&v0<={S9v|7NVmoF60;$c z#~{|#WiMSU;8XWaMx9AJ$d`iC%gu@1{^oc0?{EfTC1F46P!I7feh`mF!Z#|g<6PJs zq->{fN_WFYivZXA{^J5W;JVU`H?h8v0sQ^FKV0=i0NUC8BPp<0mHZdh2B7kBH-PIU zL4^!|+KMt1MLnO1c#8_UDM4ROBo;YN7JjHJQaG`xtl*gcy@h%8`{{hY?WV--~MT)Dbwa)BR4DEPf z&!3rES_VaCy;7bg{;rS@3?$D5@LrsZu-{kv69(~Ss6ULe1Ss0bv*xWkFNY(&&9XBd zRQuID{YyMUEkz!YlooI=SIk4Mq}Mf-~e#TYh)y{jo|Ev zQE?;BKubB#$Z?~|x!U?}2ol%mhh4v;2T%=v=yYBZjKEI)`!2Q!K)MNf?yFPgNAKVh6kDjEDY>znRe8!1g zbhWs8VOMKIva2QEL3|U;;p04^`x#Z5-MC5}X0ABi?SxA@)pvF-ft<8`joDg`M?23Z zi3|dxRkV!nwe&po2s|TE{vtOaA1m0uXW&;oqnI^`pjmlvzW=s(b*q%MY(t$hJSJrK zyEgjE+pc}RqHKukMcZ-}R}P1cJWE9d-z;;S6xo^f+g_n1`kU8r`ces=zu!)xwix62 z>UwK+{SbLKhbnUb7sYNDVd@Axuwh{eK04sZ+l=an{8DI$ftwyT9b|TY61+gGP4;L~ zHDps(8|dZa2llgy^}b{&%KL->P8%iwWzoJsoPMYqtXs~l!z$QwH?3fmja!8o<>KcL ztAkx1=nz8Pn7(=eA3h%ZYDLdP!s!bC(Zg-9ZMIKA_=hoJu(bA;FQw_oOxTVh@(a#d?Aymkue5q-2x#9>}pxTh7PDDoy< zn=>N2JcBf;(}XZyG(5z&*5V#|C5bJ`UaYQlE41Z*ZPF0+vpocc*SeHaR1Kt5>sij4 zDEdY0R?VG%E{U|H`)1%Gu$X*rRhaH2<_gI{J9VXSbEU9|VOWde>}ti~r+Tx^`($rh zEhi>(pio$adQHVbmr6OJi->9Sy;p%z$49EvZeO>Z7i6ykeAurLu*F0^L=+Pc6UfzH z1;+Y!r{%9*Qun%S8zYLD-a0ZwqakEQBh!3HG#p&9{gf*}figk|Izs5IXZ|Aq&_wlA zl~=7faxS>0`V0N-x-L?1-Qj_0;OQ~IN`{AJXUC<~-~&wy?0OdaR1fR&?0dSoU zXtC%bzoP~7S8;>JnoTpN29$QOvm(|4wtWJbcn`I!`PYLyN6WUU77Gevt_e?6s_&XI zw0=uTttn&schN6&<6%H}{tjFpJ8)Ex2?QFFn5x;~da^ODAEmFZ0yv9w0vT>I3i``^ zP_*UfC56ufkhDvTXmKc_{1#>w#_Ox`-~Gr0AaC;1W(G>E(1Q)TS8@&9U+&u>`h_Qv zs!Srvb@JYF(S2?VaZE1irA)ac-==&0#EGYExaZe;x){IO|AHRR)q>p3x)r!Ch+aGY za>*grw?EnUg5yiZO#YOCj)pGmFHSghzu^@|fhyG>}MLR0R zWE%mSy#fIW0F{B|P&+E$)K`+9t15L3pQYsWy1vBs5l_ZRY~pTD_bO*>n&TfB_zFV%%zn%z&unaJe8Q> z#k(c1*=m>v(rbU*Tw(lahzfq#lM=u?F zJzSMD{y>+Y^G6%;{Rj4!$b^e+tus#n(>6*n4$bT0xTrPiNWk|IRvUV!sj=-LXP4by zZa;<{szo@!qDoC?_ge9rWsGS|Jhh1$AM56)3ak`Qz7bY@-lJIvmX62hT5Vv7`O(fl z9{WNnpyQ7E8FH)Vtoi?tSC=nYZi_2|XXCuveqDO~-Z82JzMDX7CW*EnMU4O963hB6 zFFA{MPRY&PT438}%@%b+|Bs~;PWg^*`eoCw#Q%TL%#U=rc3Jb*0O9|~G=7xKA$Mpa z`X3yTLE}K{aX+m@QjBFRf^YFi+Vb&9?WxsS>OX9ri>0d#X=(`(sIW<6XOpUQiZ;o z`wT{wXFpEO)+CcLoO*@SNjH2#9Fks;x7&$$l=L|-&l94nWoH-(CV`^{i$!p`UTIwm zUQ%8V3{A`YhftoUwHC1SqGqcVW1$MR!q2^~Jg9|jq`a~yZ3OCgBLyR;t9kzvi@>jx zvsM37n@RG+qTgFxonU_=Bh)?qcMs-(}%w$mv}4h+F%>s+TW8Iy8MBhWLzVA`~Q6kOp6;Fv%pTJt64|x?E)Q zn&VB1fJMhMg$Ti&chn>t`e9ijZb%4C$<}`s9}m7w(@Hz+LY;bIB+x&pA4&a(%2oEu zb|LB)U8UtO;(Ml#PiJSL3#9KeS@~?(PrN9k71(d*70C)O!9fRz**~c5(h!%2tne z8*YF}p##c}=ZBM5Qa#|ioe0*do=0$ZY^&2jzFaIdUa2oErd%C*tHnaeg1z3Oyrz_@M05BTRYAuD-<`QVL*+JgC?ugCNd96|LC2!5*3IgFapQP-#+w@9(k*%YX zOS!7cXJQhNiOwnEZ~fSQz(R~(CSAIHvUl%(?oqmVO^hV&5Bjtg zSYm$G_W^ZN()%II^SWMnt(&EFVUToMw=>qr7sd~SWPl`B9V>2+7qFcUCI>`bZjZ1z zJ6`?%Eu|QaZ|Fh2M%{vCsflZ#{~rq50C_*{M4AqDAcHv}$x*%P+k4ewSD0ev2?{mzsO|D<5s`G*BL%+lhz@6~BUvEdap zoCeEjOYeCmioVfMYvh&S9zST@ymB1p9x}e#9a+3vDAzGvZLnzBOV+FLd2~hSiKCUi zxah~)RNapJZS2=FK;rpMece~Bj^>9QZid_6gjW` zl7X8Ec(W71?{9zTPP`m-Z|;Xcwc2h<0LX{mk+o?~=3m@&SwiH|N02f-WUx0u-b>tv zf+FV;7h&s(-pU@H_Cq^SjA})sPurR$h~%b9yRva5(|J}w@cDkH5u1=)++_jK$vL?e-XYRp6|aQn24YOG=^2JEk#L-i+wSU=;d# zvd>TVqg2kGLTb*rvE#><^mm9LWf?>G6 ztpGo28Gshi#gy152fMA|J< zq#s_c^liJUT9W@cQU=G8WH5$khFGe3*qE8LBuK1bZ$To@AqTG)*Cb|)lq#To6C7JC zZx#t+lslU7DC5@hCber+VB*P1NC-TsYM*?d#zDI*k!YmuKo9C~DQ_T>D6K$2=(wBe zrctYn#=`t}&yj_E(C+r0f@xS2fB8H&q*J8k=Ej_=TLF_zcZsmxkSyeLJ2Ls&;(WXd zGv48h8)vz)FqiL9QA)lq{CV+?)X*LA@%GGW;aRz&yx*s&h>Q%+^uZsQj1r6Xb-3{u z2#^~f^{K@Y^0q{6j?3;qWxTW^ ziuKC$4TZyZX=DWB6W?Kxe{)+jm~uVJA?9+m(dNYal_XJ@5dmRcR^?_R_0#$BiTfLl zH0UW^&KT6NLc8+(YZx|NDo+J9f|}uW5LCC78uEkXIsDKoH3s`?&mR>>hM}H&zn@cuomwm z`AMYm2j9rW!RG-%I6%4#zE`}I%?7ax?THm*MzohSk>veu(GtjyFELkP}oc*-&hWdSN0^yu5-&S2$23)gy`DiX8rAX6CvDwyj&1zWH}cL z8J+G>wVEG7^WEj+y^Ng4>JReR`PWQTvwnG!x2G$McUM=A z9oMr;7B+fGuXRq>Lajzew-U;tZM|fZHt+Ahtvn9nE~)?hkH!Ak4ioZbZW}M93Cl5m z?l0cb92p#yVu0?=-+L3xu%RMUcVkQPm_yP}<=F-=5~S8$#DDB!2_V@oWgnBCL-d{9 zt7_eUgMw6hDy%9FWeBj~llPP>XtB7njpCv^E3=d`pu*zEb?K#r&&#H?C8cDFD%4W^Nz+m)hroxU5`t)1 z2k2f(L0#SJ>aGXN(MOLjnuNBiofI-NKUaqi6J8TqSzQ9F4VN3PT`1S7xvG(P(VZtB z$f8dFuvU9V`Ii`M2^sKgEfO3dLpoWzWnDJojrA>DH?6JdZJ=|YlG4&YxZuS+;|uvI zG*CfkiEotAf@tu8n_<2A7A}lTOe8XX@+4ZrlrwNOth(p!PiQ> z%Kqx5*nsh)jeVDgtG|?inxd7oHrTe$b{tpe(Yc|VEFx@Ho_iv%#>|?L*$()AY6+;_ zmlwsc=zh{r|7hy|%>$tSv`xFLpC)Rkxl+2lIuLj{#)yuLfE5}uSQ_aYk^t}^o-=&H zDuF>wKSBH3Qy==?WkT$(x@qHAatDO zM8}~GL}qD-`3!I5(gwNlZ(t~_u(@ny3e~MNG%qk%#Y4aR@;ShybrD;z{j&1*WTS?Y zl=R7z*)~xFuZyD-G}%U zF0x1P7OL2c)AUawqbE(u=YFGakL{e>?Y?k=y}dnVPEI>lUvG`=p_eH5BY$NmSUoy= zc!`e>;lk!CDy734Vg`-SIV=92hVAR*k%_E`&0aa4Ho#CLLOwcvcI2!P98+$>N0k1N zhTPr-n^M6Sb|QW)be^c<0b`2tdc_KA!Cwp6P)PEh_fg**sHdXMQzD^qv*YZ;Z4IYyU_|d3I5i`qIo2N=wrq)Z#^MSOC9Q~vpYa=o(E%^S3cB_ z+CsdaF5d29#oUGLy_E_RJ0j(hiU^>>n*TGJhCqmiz*rM}S>da)a@q1re#Iy+h;c!y zjR5zhkXZbWvrYX>_>{>#K1_@e2%VIf5%M7E<13RNm^uJ?OKSuKj% z)wuy5k5eNMP8zTMfrC-Br7Iopc@YEkbBhd|IaAXD?UjGX-qJ4z;O*!&b0Byl?%oQu z%#k4GfaTW(ErmV`%HR0Ui-I z6|>POjw7@~7bSQnhrt1)oUzk;wXv9w!RbS7JqNcRw~3{%2KPGP&XOl3rM5dUT{T{N z7tl`DvT)*qZ;yjZ&~bV?O!_Yp)C=rEakTDvMiSnO1?a!EHg2@rY*?=vW#4@D3{ zU)VkV0evIjtXd)?&F=#!SwcWX@Gs6O?7A}QbZCpD=LrPwqUemx44Zt`^*p2%*xCJU zr2d1(MJL@YDy?wMx-Hz?uzAJ4hh&~M8SEKxx`BpJDp5?W9Li5?XG)EffwUEEvt(-> zWluyUj3%eg56HWNo@EM6t%W4CucJYV_nh2I}{J_9? z^-gidewsilSDs3x%Q3B~`_F+0WhjZw)bK6mupKn8pyopOxlH^`Fw#HOf?hFW=(fkSTFmBOt9|*|Hy~Uw?DSzONXW;U!0!pK-up9 zV*zS?)-PD*!wantFqb`8GSRv#!WoN0g`R) zfsjY4RG+D{)p=*>aNj}EuK!i=vL&?ksd1>r?N6l^xBLd`L2nvCrrG3-al7a^ucR+K zttpGQVDNr>VuSsw^cilxRe?^##C)-W(u^;mZQ*T6GGe)O7dDdcM3gPi*&T;Y=1%U8 zivRsKu6eKcHp4~!OYP#2f?}GsTj^mm`i<`lD79XMXsV*9An!(DD;j)+nc|QNqi#vK zwEd`4xo%egNgGMaasRHlLcp;yBP|s}JZiGe@cVIap3&LU@^SMiFCCDuYY#()4 z+qlP#jj;4Mr)LK0@|q#iP~-ZpwbcKnc)R#0f!h}7vO ze@1klAQAPW+WU+uMiD>D)=COSu2qqURYI%UyWgG557XM#Ku2EJiH+b<@}!@_6_^?` zUWWIP5ih<3zk%nV|0|V;^@EJo%?F|RBO8Jrdbv1nvTmGK=9eW=Bjz0#{h6eWN=iGn z(4jwnGh3~^|7@%klKq7gMuVUC8^-RH2=xn`^>*%jx{@Wr5u=P^HK-HZ-Tl2KnkGUJ}=;2jaieY1c{Y-!K8$-`0^8uD;?v+O$pwC;8iX%Z`R zYnV7&z>ni0Q5L{<1@*F*zw*f(3lFgjmxz9=7F!cO> zUd-dL?VRZIq#K!xOIq9vkedH{)?Cj0luyy->_NuA?MkTw6#0y!k)pGntKLBojWCA5 ztj{fO_B~s8+?kPOMvcTO;W_pVvtLvYf{7PlZmHj~-HN3X!~kU`?5Cmn?V8MoH*vx9 zwR`0W@&fO3a(wyo8I^P!Is+qk?^@WHQ;{!~$Bet=z}L40bytX#rAVGQfVI7`Ka3?H zG^3+-Eg^XW>iw4wQDj-Ii3n#c;MGKY3v?Sbo7-bJ%Tm^CX%Zdor4UMdi`p>*ZJu3z zvO{=PR*eWb2q^3NVyVE66%^A?oUOZlAp%<9*HYosK1$0u?ikA5ewKI1<*&L?7kA|_YKxLGpjhJ$) zWS53L3636WvX%Ke&39aaFV9HR{Xea1_{`+g&+dC!jJo7{0am)%~P`QY7c3AExt-`SUdS9~6^sa#5m3Si|#o5(3Jg z=QTUufDT}wp1`WLNO{+Dth@D43}4Qj&^?q~PEy;ZNLcFl7nhxx`Aejzsd<%_r#euy zsQ5Jf*!Lp0!mj>wuDJ(277grUe=5g9V0dMIAgM9JWjse3=6x3AdUL2r@NO-{CgZ&s zEYdy=i*;)avPgb;j%qDg__8w7bfsGVCP z4@B19CbWf#UnPordZo*_;)R2e_Kucf$$3L^%^<7uae_>ZlLjY??6N9T;%d^Odu$>@ z)LzuLY%n)V-twL>zUtOato5U62lpvz(N=ociRf*Z7q{8nhL(c70rq}$ z5JyCQU`JoOdbS6`R#YHwztMMZc>^UebgEU3HFoHb)K;#^MYPDmWxI8S%;5wR!P8wq zn0F)5HyzABT^c{v7U`Z=%71$Pwf(5g?$Bkaqjg_m7#x9HUULu`yIS(?79ji21T*wY zmdWE^KiqW_uYvBZ6d@rG#kZMX8V(U2ltqzW^-!>&#X}&~C|yeIpUoH~Iu90Ri@-F^ zEfVt_-_jrgEG=$EKC5G}pU0FJSvl%5v@R^E2QjLTYu5ADw&Q24bg5v^Q7WzmgQhjL zCMqK_Zv3Hf82ihKEgvK#*7|b13G39GS;saiF1^U|L=6}Z$ z0$C@CHm`trXix0-vT~#zpg;^%`(tdImBEkSSl&O~AW~lLtodi7)3!ZqGzd4>c1Z1h z$_b2n)AJj3iB>}=dTVBhj_1&8c;kZ7TSVL*Ph~;&jn5ylc}0n&BHLW^?4vgXN=>Rr zs7D)9B{}hdv6k=ta=ufUtwU8&=tVLzfMG}x5PSIC0D1kfFt0z^_)ccHFrR<9<@b!u zN_6fjpF8YdoxZ@gUL_hFY0g|}q>)9cwmwMZ(&)<>ggkB`E^S5qqPR5KB-A=mFhJTT zu5vE**UdkHUNx$b`7H5BA*)Q3diAK&xFxj_v| z%gTDM);K@Fs@O4N1xb5N?E)6zU-&X_1uZ$fN%LwYLas@hj<|6E67d07g_Ae-*hu^q zB&#f%F|q^cu?drexP`a5U)rv%c5eVkWYz6oG2~rv_JA`CeA&r4zRx^Q zG6NTTcZZHkx|mMmpt;0bM{^%I;`Q+en!612GjXttQIe?+X2B3=y3!yd@J;Ei;#5%uE-Bwr=&@QB}dgUf+#Og@pM z%5$9Xbthsn_rU>!ThFoI`cEaasf#?Bq}z*{_yH9gGQ=VCBiy0nK9Z&|$u&LENI8I# zvIWB`Q!+UHcmvUxPv0oeWs37p1jUr(*|vnFy5R0i$p^7V&s{@4{HMe*S~(R-=P5I5 z-zPJ+c851jop)G;(=<+Aw9eQ3k^xIUXGtXw!&XY$w`}+_p+t1(s-w%mgWX*k9%oTv zI*pP98-)GDLgoQ7-j>&K;gCL~lnf~Y{OaC^o8FcR?vvk|cKZ6>AH)NaeuSIL_j7{g zukjYE@xN`c9Jm~vz%Eq)cwyJFa8|a=2qk1+zwrQr_>Y#-nJzefqaKgwB@5O$2$)~! ze{d_Rtngz$sF(B|wByIiKOT@)39E(g*|8yQe)$gDhddHshVJZFX1HQmmShL`H*W^_ zJW5EzR;Ca|6#}dV3CKlJ<9juGtQ6xRXOS0n`Y6SydL7+EIilnXY$;d-WpfH;DPexJ zStdJ^64mI270l9xApdOD5_OiK3|BA^N6}E+JGhgw`#@WPW?=YPUCtoL;I2E0AZ24) z2sX<1dpE`CnV_pL+u?C;;ZFgM8yIURoc3s=`fZdK!b|)H@DjiIkQ6fil?DBFvYN`@ ztlqNTB+6eJaN9)h9wl#67+@%P90Yb7f5%LGT}2fhm@(MPl)1v{?t^?>oE7kUMZ!<_ znHY(cTHd2G|0i?$+s&BOF>%?sLg*_fOs~PWzc^ERFLYjr(N7|Hu6{KN;EOgYu6ruP zuAjI{xV@k=rpEWp`Y8xQEp7XJ_rNG3b3=)+LBr2<&RygA%nqGv%WI>6`q2{RUfjlQ zbK2s%>S6q&ylgT~n0?gAw(zUmkbT#Wj(@8z}e`V3z(D0F7O67x-Y2+-gkP& z`OSEaJI2Bv?t{5G9d@;5D|uM+_rlJb;Q5!%tZw%;DIMQF*1W;B5ntwm-p9viC6AT- zd^*19XKG?r7jCk*4)?mN2v;=JcfQgs1{5k_n(=E$#-I$@91)}QiYg_3kGYv!KW3txKjnz)slaw`^8GY)t`KP&9X(X_!*4`Vbo^{50}>K_ssK> zw2q!PXX2y=2-wXfa5jMF@PuHiCH3bw8V9UbX#KK{WK&IUXl)g}-loi9{EUoWG&KSi z7(w5Z6)=mi`x~F5wY!vM$ZgIJu$wP>_^Ey>xd0rb*=|H%rT((H z#+El{XZ1Y7w057C?gNyf?}&G(j&w|uB;ckG&r!aX5<1lFK-Qa|b< zbA%AQL)D^u>@l}dYod-To%y8&msFo)!YG-2e5?UE2v)LBRY|ES4tiA!g8!aTuJOvj zu#qS4@suZ?nyz?i0>-tB{Sz(*71Z>;sUtiScj`mgCK7_+O@))Xp**&U$ejK8&6Q3eBkcsMGurAUXO9=?Bs@q?BrkmRk|Q6AWv>yD!u0xU?36_H&?Uan2K$)fz_Vz@DS7Wl-(x#c z;vxYc_tyb23f5er+dK-SGR@MaF2uFF<2K2Ug8u~d5`AcgZi5w_JH0N>d!`6(X<)h;YWAMG+4|2!o zQ(-!Ro1NvlJ;WYTN!v?5ThD&hYJu<{oQtAcz0(zer!P(xD%f3GhKlD z7VlMnj#N{wB264MQGh*>Q1Aez%G_%Mh5%;4c)^z9p$1zj0oON}ti9K+-p88W5q5-y z>u=u)GQQKHp8rEGkXt~8xU$cH65uJ*6!$&Q-w)ALudY$#4#4}!P^sNMtGk*c&dFio zW$x;_FHpZa^>i!J4F&$xyJk>ihzzd52nmSS^jytgd@8l zS@djOb(V(sr(0rY`&OJeTW}9w2i>XiHctvw*oE)qXkGUVC(1}Tq0U%emtJ;)wfS09 zwn|XN&p3RRk*QeT<$NdTa>|nVKwGAS<4Q~UB&WQV<<9&>Xx9CGW5?&a0|X*5AHaFR z96+OTtM$FUUH6~XgX}TX=87eMI;YWdzOfPsNE&0u#+}~d4y{C^VKGzoJ+2IxHN0KP zsSm%Eu*`RnhxPLQUd67+o*Em2H@)DJS-08<0fJ(wS$Bt+=E?!@aqv&Xzam$| zRqUuoqDAe##^YJEkA8RMJsXcUBV2m{!aa3hT`vKX@%4os-T0%aM&7=@Ak;_EyXf=% z>v4wf5Zn3S1`muMOO`ss8IXXpMiI)DbWoo+<7r%+7$7_yWu18N!bPbVcuID=lQ+Tl zcb#@($Py2D2qhXFGjsU9_wTz@fhJeEWI^YA9HX6=J7@(Zo2aDvIo~>;rq!?uw5fwh zlYbuQT|j6#hvq0NIV9lp6_>D|>%+2iUp?YN6Do<}!J9qIi|Js?Ukt*Tyup|n9QrLV1X|xM%6qINf z-F+?>AFd?@h9?b1D|bI`07*VS)mnD-KfS7kTcV%5ZyziSZ$haS9|INmwptxML9bY?SkBnH00btPXz3% zM(r8b=AKd|CDt5V&H6it_4En_PC7)Mb-d$a=hwNcs=M6_y`Mt8?P;;6q5wYm_dWGw z^gCY3n@_U`Lh7F}B@IFNBX9$+(dwL~JLxOW?obo5^((i#tJQ!=7q#JaF@InFPS9n} z{huUCiG)=cCAIGp@gzH3?HJ(PA9pOKxN#0?{k{8HJnKaVW(q)C^I<99Kt-!ZrlN31 zL}`mns>L&)#6gR*oBPN<8vv5S5AxjaH|JCd!~dFm_2g|zrtdr?&~gal1$-loF_bs4 zSMRe3SG3VD31Pu{67Cfl9AJfC@CO{M2ms%?KL9Q|uEqmVB>f~#vKvkqYrngvPGWfF->_K18r|M&2!w(Pum6%^bxNBb zWUxK18(D^`=584XfFAlW`Gdx5xxnAQ)|omFl5;NO+I0jxJ@MDI1Q8o~`Ss=JlY33v zy=}SYXZtHt(-Xji_vt=!XGsUL$nI+ynjGKEyxEOMFPKR)+}#u4uUlC*8krb|wSasmh4}ItYJjE>v>C8J#Ky-)~WCQ60 zQ|$!Ae#-lF#+NyKG5WOD4U70@B*YP`BO+pP@85)oO}sw5J_4Dcw3;Z%h907J-;ygo zmA>ZzL~Ch5((FX#F9T4`VU53%R@j7h=p_=}sYn>e7T!8K>c<fh_wRRpdK-BpBdO zF@#;J2e)>)=j(R;=R8*Ep_om_o|v47!9FoPMr`KDIvA>UsGJRa5LB|Q$e0bCKF4vz z(_7?{xbM|t>y%-9Uv`1l4t*?m*BsyaYBxOQ8{uR2n;ZpXOMV$(}&B zleX2NLCaTf&y_#^$fkWYMwtxb$T+?iJkK>8p0tL&^`QL25nLj%%VsX&aToraEomb- z-q4k^DRWv*ws3OmkItJ#2_ElN<-e$!?P1Sb8QN$|d%jnzC$y7~JqxQNEN_4Xaj+8E z`ByyXNS*vkH{lQ3wNH)RM19ZmYoepo zB9U04$-Bv$pLS&@N(8XPZd7zzey5(;8*e+Q`tn4fNp^T>DN1`W@TjDF*lU#W#+-M&#nz5gNkBJJ-x0LqP|z|$G6;CSFI0xWE7=#zo(7%_Y7)v=KH*~j?hyRnlwxDWhl zOyq)yB*AUctC;i;oD1f%(hV;mVgmxs1L)4yS+FQ44}Qw;tjXJA3F-8P498I9PTr%| z(6Z{Cr!cOZ?gn5p+qT5&H32D%ju_{3wO>fdRzr+bNnyy`2R>3o0AWajX}oMtM}&#M zzZ{AZ-68oUaKe7BmS@eJeJA|q#GRafp;&z&nBPB8xc)Fwi3~d+m z{JYmtCHS;m{9kUO__PVVl7c3WAjvt)LZO5)zFwI8m2`&DLQ)k0D-ny$l1(&Sz{AGEJQ6 zSjQKyo}A>vMSpU2rg@>NIUb9SCn~$y8hJ^?KCd$2=dXk9@tmn%b>TTr_KV&^JlzDh z-`;ZHTmWNytDQ-FSnsR-Tl!YU?=9|k(gGS+c@(Wr_v*6QFt=w2sC#O9OLF$0)BYTv z87EuL#Gark)mUO%d@}4rkV({c%LYskL-bbsgMF*MzQaOj>vqUg&w{{Za(k*ygUH9( z?KdIK?1FAs9?x#wCp6&9yRAvi@$vA16A~iTvp?JIARlDVs7Qk}?`?nfQm8 z#FQf}6Z_LArN2)~Lf{>vUC#hE?-Q=x0vJyB`qUa{_aBjJz>nQ|g%H*3-Q5wwC>(rE zwJ*Z~sMsuQhLS*aZm@yIXh5XmNOx(}bg+^~`IcCe?nOwtpi6-2O1fegZg)nuUZGbP)*&}ej(a{O=@9ow%l$8FbS+qb@1zDbht8D!YY7L#!FZ143eMd;v z*JeYG*c4S!%3>x{lPU6CE8&S^NSy zDpvoC+hi?Cx%~fFfNw(wT6ZO3FKzcrE+E6|;B#v1Q(3kL!Alz{V*szi_|K7+S0);G z$@b51am(gqKfW}_sK13P)BkL9&AQCRBi|eT)5%~^n>AN&voBj8E|x+29N^#GeQ!fW zO!v}$HQLhYG6A|C%X?3CVy5(`I#Bb}m|yRH7U2Bn@7A|XTB4aY2Xd*g7Jl;5hwiUl zMvte&hSd80v!M}+RF5P5rzaEpiZCU53d#l8oVRW>mi%|rPDu$@$rKM>z8|0Bm{^+( z{_V_S2Ecriqo!Yq&PKZhc;ELS60iNkq`b-i)ZR}3CyI@k>TdjSa0m^mF!{Yn;yN`Z znY`(5jNUxPKLjOwUm5PkHC<#?HhVu_;&HGf0&dfko51n7@JCB(WgDyK6;4+^ zMXmYk_b>my=oQ3YANF=3ET*gOj1L*W%Ks;TR?!>-k41h8+*d31sGk4IB#9=6d1|tR z3!w9@fabs1BRMohcTTgD)*SR(O=mM3PtyqeW12c9-u ze1P5W0GnnAvp4H;yFpV;+4ITuu3)t*sD^ne_lMVu#%1^+$LPwP1N?DpD;C^6ukfZkac~~ z^Fe=eIm9A8)r=x~@2&D*`>%}zb9^gblJZDLudnvg>lehINzCEt4flD~F08y+txi=F zA3uK2X7FG=sXL9rQzjP*ba+GGj%}mZ3e7{HGSDlH!hMW4eDtISC^~9z&3HS^y<52$ zM&Rn%ajPi7HU@cGf|vW_GX?W~<~PpKKec(0Eu9E8xY_9AgFklWx!OTiFa5b)Jtjd* zwreCXSK~87&u@nGO(|}tR!rGV$&FS+-tDjM&ZNhMvnHrF>^WV=n-~p2HqNT^;+h*( zBX!`)=)^g>C4X8vu{*0J;W5W#UWE+h1_K0V8|5cl$+{aV2yQ&AgZ8$nF&5KH+sk06 z(@=QmkZA4G$B+ARxjEhZFGp?hwb>3k7Dh?dS`H7k4;R&1eN+UaO^u}2?(^LW+LUMs6u(Kh=i zbA2Z+B0qdg`}Cw)KQ6Y$E{3E^dMB@}ErxVjgfBL~84p**c)QNwxx6^7m@~JtxrkAT zJBLx?^JCpMJ$0Ys*gJt!#5L!p@%}Jl}UCpOMbn4OS(Y?S#b07vhS zN&@y4iV(D_zMwi^&8G@O3n5~SIUKoWGL2#o7rmF6vA=T>^45A(WI=vF!)KcGQIRZP zCByTr)x@t~QrTch5ldWR8$!QV97DL!(GfZz+LM$(miDWTF?gXHZ>_UN`E9&~GMJP;QozOKq<`pE0X% zo@)sw9u53e%9*ky@1lRm-L71vJ1_wg>>#PIt)S}*VC)9x?bR7H1nmJ)Vu9tf`s2`{ z^Xfk;;GPR`!acNR(w$;!ki1scsAx_v?~7 zDvJ~sfB6=&m+Rxj+_&@^cFMz{dR3(De5y)Zpsp$P5r8b{k^#&y&{o0Ai!5@SQr z-*{)d$NV;hJk*%j%u83pENq>xZgk)1Dz|yP*C19=+>3755SN!u80q)2EBejBOUtre zzqV|aL$ka`{!*W1pg+(@@>4U{9$!-tfuZ^GzZ?)|`N_}z!g$k&_>kEpFT_$!d` z^#TuHG~=z}!HXJ}G~Sp{bA(={GbU7nQHBmHkDAiL!p22NjK`~aGAas;9fEc2(`#-~M)0w{lczv7<)`XR%g9@kb*MCHHo; zq2?8OfJx1iN}rn|ZB?e3FPr-4SCn!pnv>Kb(aKXTl}Ehra4@YpCbfD9W>KVHW^(Mr zWbiP2T&b4j$B#W+Q|D!(vFf|rsHK9)#>T{PnE5=L=*xc74;a2Bfa`XG4+=Q5+%@(EJ_O-#GamGP$RCs}ot zx3B&jwkQmwAu`mW%{2HjVE$!b{bBQkA;rF^3Vtz1+RAs<~rpCZ-P2k!0n0EAO6T@fy~Xt!Zx!+?+Im}_2$UquI-Id6>M zZ=12O&7ON8lDP7K6~Qi9hd~$s%pyA2jKcyhoj4^e=oq(;QZ^y8$HFrvE^HlytB#Gr10=`&Q44^#Mmr4awjDXB?B&(R{MC2xz?%E zb*NQBRxXef?zV!3O=fByN5)#?9&;|((slYOicYHsF(ut|xI0~2L5D$fGWIbo^_VO} z{y8C7Ba@yQuUdPr^9lI@Mbmayf)XAh!VuB!P4>Br&j36Yb{h=+e9#AuH0p?0L5Sre zu-G-At4XxK-HySG3t{<10aIj`&}6)!!&ijqmX>PKD1UF9H5PxmGOrGcCKD1Yv`^cB z4o>ciQiZIw2xF?yc_MC!=-^FPzS(%*H%+BXEY*0~9L!GIDlvT_2pjZ1*H#qPxF+qc zH9er9KQrU?9ucl?(j&~O+W}w$>x@d9Eivr4(VCN+Hl0Xnww|dQQ?bj;Q*$}zfMiqCw#q!qzbQvuKkh?%##)k$f;-jl{M_$;QgX%UtqE3@9j0FdR;hC#O ziV3NG0B+iv~cx6O&4QizsLI-@! zjFa>Zn==&1bQD7QD)KnefPX)SiuA_m8})yJ^264EuC><^9_cq*F&Ca@ar+GP3i~g- zv~NiD8f8>=-#FK?@NR5(Z3%xS-Cwko+7MPO zi)dUCip9Oel^#?}#MMQ=QSP;$*P3rXIhqTa-*Hx^PvX6XcyM8P{NPFdRL}b+mZtg0 z`KI^=>AjwbF##3t`y^YLjb7yLNgR0v72Zj8MrP|dldkn;jp5Rz{rOfo;6;yK!SV5O zvpdZd)oY450ogPSw;4%_%>;T6OM4Q{Yi0#Ch0D!U8U(nYx>o0ElXG@RMsTm5sj~y( zAhqiDz}jcPp4e%D1y@2B2V=b+@Cy!*$EuaFhSTY)@^jxd`vA%j^Bi(QbLHmTKC30W zrMCoFve$ajEu7x8Rdxl|5|W$H$_0X5xWV=h5X&;?eP$`?u%N}>@!(WRICBG?bpx0$ z0eb7^jhkEVUaW1K-$6n2`kS5lDuf0mlU*pfR>P93aK~~PT?o?Jwh9d_3HM%4JfCPnY9(~&awf~^mOU=9b}e#s>C7EQ1++m96!{{nw(9f;P=Aa zwMqZrpH0_2L+=2e!agWpo{hptWbaZ!{xEAKp*`&EFXS?F#K^Sogf6WIWWp~UuMUO? z=zI_mm`*GzoxiRAw!=g1H30WhcAO6L-%%AAJ;!OekBGW z0-Yi)*c5W*H%!_w_B5&Js4s&8n~mGzCklQCZH^?=eeC@Rey1r?QuO;yFuv;K9MJ{G zmPK~{c*zfkCQnMY1X9!H?m%PG&?e}esbm+W7p*5z5lMIbKq<^K* z?dydfl<|1XXu+$doDLj~RF#+P=RaF7ji3jo7IKAFqpm8T zBjSR#A^tx}qX-nVYCoIjDQ$Vsyt0t9U|{1cOg#DaLG}k-j&kixBC{v(dqKjb|I;pG z;%yT%Yc{Y^f`CthGR-S0@rHoxt<^5y?Av1NxzDtKId|2!U<)>H+rd>Kd2usWIr71! zh382Wp{(CtT>Ldp#cbT#f{}zl>xqMtE4$%i@kZ|%UT?aRpg2soKMeCGW zd&X%+MS-*OeC217c|+NpVJZW+#hx^KM9rbP;`ur==gLbVUGdBvO?X_CF~MajYC^@(pk zY7F19*R^U!LgA(5BD1IM%F`-lf$1BXS&CINdeAB-+3{d?J%=s+~QsD!qI_1@u!bciKbLu!;uW&=h=V{z~z6E z{1v%u!-t{>B14kG1m_?d3$H!7;=sP2-WL2wG;d_uDt27eu8eS^A)rz*q5)se7Z~zS z^{AmK_#hG&hx8>HbFz}(5L!xLIImaLfbW#ZmfsaGoaJtMr0d)C`_`*Cz_1yo@d^{9 zDO-jpa!|LFaXxRplQ{_dz46O3qh}KBUEiR1Df{w?fOyL;c*pj4xX6>MDP;Y`DODP< zcebj+3k=bMpV@rNtAV9&U+N8w-v&DxanA`kaa;KtAGuT?b2z76(j^^&1e}I-YLc^= z1Oz27e==`Q#}75WfM-%tM4>%V+T`{-n%m10rAA9RvyPTb$5xXqSyIz6tlHGkE0@cU?Wao@$(b*6d- zLel!vHd|kCsVgujmAF}RQP(uc(`>@rLP@dsP-lK$;&5a;z=;VZMgq9c>>*f$LRcr1{j8K66v~#K-<-UfX%is z-CV_>14BI-evZLkLKrl#VVg&Y#RAmWpRhk-(*Gp?uUA=fjZsQjj>+dR_^N*mJRL=%&VQVkx%1zL{~Qx;{0cXz)_6KKUH!JXGB9 zMIqK0aO6D~y)~@c1eJs}Os4r`n60*Sk-2$IQNqK(wJF9PzU21ceKxigG&zaMD064K z6D6Qzk>VfyLSyX@q_07kK}Yv}>-+#W6mq0w`wJw(;-Sd8b16v+;0*`F+PF zdEx5sf}VltT@hHUNL6WmpKQOdlu}MQt;78;{+)rjO2LYwYhD*uc2rs*!a=}eLjjD$ zk*lzGSXcWG3;|UcgW$A`r@M1Xp9sbv+aaQ3pDX*u`n+yWkSsnW zzT=qVz#xsmaJSwRk_tV=p4z|RsbAwCQG~;ET=>=7nd?~UZFes@Dg)nOg-ooBuTy1o zK(DIm=naPE(lBCQJsFTS0_9i?{ocu{Y<|=n>YgSa#*#ZeB|BS0djTzLn|YhCYjS?} zYQm~&@Ew_FVPrce72`Cb6A&1fO46xP_1wL~hW*J3N%thy3H5oj%1O|;E3usNnWPD^ zujizGzMeucO+#WToQO7&>v{vM4ivzfo;K-q}iI_?;D6H-~*lOHG1cq~| zsKLcwacrpAZBakEJ$J-aoS7n7OGd)x-N2eH7EEyN!>_+}7ORjR{Qt&vsJv#Ef>0-iu4?0>`;bu5 zV>wy2Jnteb(_w$|FQ!B2mo44)rL|SL%FQk1dDey{DsC*wHYVidt#oJ~;{R#P`%Cqt z6EF8I6o=V6(-8qx9Du+dSnm+3x<-56(#joDpMETyaZaiD%3&5W|CtDvM*JrR!$u-9 z@{xd?*u0a-Yg|W(4H7BQieOTqxFzI4`Dird*UL=_$J~K@CVf+iKPjbb^mfvmVy#R; z!3OAGqs5A{=}Z~-k^HVOB^L>87E~zs(anSa#fOt$!r#J&-jS`gy5DzNJ30a%M7kCg zSA1@KR%hABTEy)gf~yN4+z-d~>=y8Es8r)i_9=ovCxzld0RQp|n!cYx0_4#>AGg&d z{}XGJm0Mo)x$xVm`#lDc!bZm>#ir+;!QW@qU!frG?|VJ3xxcqs*kyzD=XJ3Z=&PV4 z&8`4?w7QV`;Yw}XK&6dD<+(;_o+WYIYVE<}?-b>?#D6gdW2 zT(8`!miZ52LX#jq?T}=Rxrx=0^y$juoXLQBv{BW!+OuSft&bU%U6F(*sc+tH&F!6- zR8_Ruv=#}!n;r&({R+^F4=76m@T~oFg)+N4WruG zZ=DM5xPsZ}3g>(B2{gLwKh&%^*pCwuNXtfdB0rlNHF+grrN^O9##PbY5N{?5Ea41$ z%`0avC}-{%yRgpiQdU{O%`IRsilUDslJ}wyoZ_-X8qstl#sj?y0Nyti#8o&Sp*>c3 z1+w@ES^eMC#nAvZNHGbZ%a1oj-P=j59|LaxD-1K?US+j7n2rj=w`g5J>O+>3EdRfG z36UT}gX$rkq&Ki|j2|o)p$hzi_?#GK0oZC*fe`_$vHUli`A?Ex)8r7Zgj{krm31Ataqr$_?m68bQ6%#9WodrpeN36HoRw98ECCx< zPhhtwqPp__5(P4bUiR_XbJ$Q=R0_!f5gJq6J<;0$`e0R(cAt2yCXZrre?obFqSiYy zre3xf<%?+O8-rBB0dwtPznMx$AwL@hiMe{k@$kH%t6bU)`L?#E$&3B+BLrYsuwkRJ zDV+YR`h+s6$!7bp;j38)WKM@ks^^up)%T5WEDyDZn~$ayP#wWXC3h(YIKJE1teFDe z`m!7wcCx@TY1+w7&-SQB-)h3207yJ(FE@J08sZbw9LbzpAtU6rG&v-_^*wKSd$u9Aux6aOv>l#=0^$gWG0LCd+Nuff*?N%UjS$+w-I@v7Ys zS#im@j#gEF<}SnjjF8;|dT0}dq1Z5>7jue&ed7mFL~&-T0!hrZu4khxb??IgKRgDb zWSHY$%-6R9?s5!btqjI$i9Hv>rh17M#e~g=RoxUDef&2iGIISAJAAjZQdh-uf{!fq@lgr;O2G0L|uU2jyth-wwsjf2SuW%d)ER)!I z`{n_z`}g7k;2p%Uvu=gQ92|M`0=!<5xgt_~9sot7p{k|7qnK~j|I~3Zt~Bz6UX|p& zi>D`BTwJfCin~_aQlp)muo5OuR(NZD*71VsHmPGt(RDZHs=-u8V9+2Rug_|MSR&jL zN*~<1bIaV!$wH*J61<^X>HqZ3(+;r-EfDFd{`BOlU$tb{eT6uYO6cc&Js-#qE5U}k z1invwnDX5wwU7aSs!i}FN{PhA+1*n4hOt7dDkK)~7H7n&#&f?ik$kATn0x(+%fkl@ z#kIa4*NSo7p~LccNX9MMty6ct^xFmt@-cdkcZ(n5VVr0`x=*?qGZ(KtTOVh{T=KC~ zE>eBjTR|^{yAOB<4wNWIddcL_@e-x@IopD!}ku((M?z;xPAq;eVwzQl-$Rpck|_2 zPH@}!V~!2H$74>4I^KGtMjNmlpYRjpE4XJSxDHgCHDB^bqHkR*5PV-F1Bbs_gk) z&YpYJB$SM#l(!|M0h>FxNb#~i#njOyK%li1*q+xHDl)flVp)9fVNJyacvou8TBc10 z7qSYZIW#hZ5IFaWhiPm=a_l|XX^>)HSGbHn4#pKoRYyb|jjm6rW3>4+dozZk#;k{y z`Es(+{EIM2TJ;Ux>Q&`;58r@VknF)HqZ_B!?NMVku@}{`S4pet-26p zKp!)|D+Ej$aFl7Ra{CC8ROVpD2twXsG@HHWSD&Ci!g$Rh_|%T$!@~)zUbUH>l*dHo z-d z8U?tohbJ438E5Aj&h|WvF zTyW}4yB4=-x<+DTQ8LA)z=O8B8E%~@UMVl>GcuM{BMyz-yktmsgutVyNx>dx24F084(og5rPJwe_D9bPoteapo$D)Q;Kanhp6?vY zxN@vFWIW|@KslIkUy+-@7l<0FKL3pMD8pPo{4 z>ii5{G)(h8O7PhFkx#w;f_nW>k`7oK(zP+K!cw>Y*y|iop2Em*x2c*QEm0xygZYd6_wI^CXNGTFHXbONthD;xzc}uk#9w^xdS1|m+FR)AF={?tQ*)cG zoEe@$NN88>2F7u0T=m+}dmMh36t_Qp`f^41YsSNSn+1tf=f*)|Vyi7Xdh>yF`+ND4 z2%B`*c=zp^;4n!KHe#M9EGk}Uv)~;&S#KRk?#0ZNd&Q?;G!~I^X=xv(U2>Y#bm#+8 z7*EZuzhLTk`1?^OdsB6y19$zGeJQPG5jZ5fy5vjUPGfRTP&;Qt-o0}9TzR+jusL$K z`7RyL^pzvKfxQVM!5KGD?#q|e>#dsh+vjt^@RD09dd%D6bHxNyDx#fxPc+7H#UF2wtL zwA3=*M8tcv%S&DT9WnYo?ERJrOD-t;+xK;%sRX_#*5-@|*wEuw>(IyJanl7nw=)CQ zQ+m=;UfH=zxDXSSJf~f2{But^UA)WhnA;SMV0fOD74XtO;CW_eXv;~tOllW)_T1tl z!EI%L&ZZ^=cOZYIrrR91)#*U{>&L@-mO`(d+y~drFoW;c%?>KWmp=3QBtAU*u!lG0 zx;I@=PxvC47zd=d9?V0o!W%+EBq}704=D~FyzubLg4%dJq;DaL5L$EVC#;Qm_jGvxyD0kn95)9QO1Xm%~z?f zZeX5aE@s+1*uO{DGUYnH5f>@mK_gPti7v4B6T_Jm z9TrA4shxe7t*{TNcUT@(hBEyas_CQl{~S0&@>#&9?Xb_EX{>`(ld&4z8ph;TKYl3>aSPF>fY+{4LY|Hv8>%n!&MX7@I+Xg)#S-ZFs|nV0_QzNqx|1)YgBk{ z93I(4hWaOr{C@P@{;xa3X-FuDeg(J^-waHl1f8=9CSf76vFz6lX62z3`^Sh>-knc` zTgqIXCyZ}2pZsLMxer^9BM&~Mdb;P>uR)3D_WZ6+ANuvffWYHU(q6E%0zmo-vv5#7bnUGit5Qj&?y95qEguCm@_(Xw{RQdqRQj==n9mnH%W;(HLD5c zOb9&T0`b`nd zRZAu8?fZ=BnS0R^&l*LAJ6jXePI+^KuaGIIXl#2^zz}yAKt}!-0fuvg=y4oSVrbY0 zOkhHWHLAl0rOi?7DLmLFpN|$HNNdD1zY`;^iB%Cfekr`EDh<8!cV#fu#$~9(!Up*@ z4&TQM_6CHn3!t=^)`7)S{WM&_%OIG5SME>E=j^xrVG-D((|R4Fzl8%F@-LKSik=(z F{THQ|`NseN literal 0 HcmV?d00001 diff --git a/src/main/java/tihwin/MainAppUi.java b/src/main/java/tihwin/MainAppUi.java index 49be658..821d74c 100644 --- a/src/main/java/tihwin/MainAppUi.java +++ b/src/main/java/tihwin/MainAppUi.java @@ -72,7 +72,10 @@ public class MainAppUi extends JFrame { destinationSelectBtn.addActionListener(actionEvent -> destinationSelectEventHandler()); convertBtn.addActionListener(actionEvent -> convertButtonAction()); ((AbstractDocument) titleField.getDocument()).setDocumentFilter(new TitleFieldFilter()); - + if (Settings.INSTANCE.getDvdSelected()) + DVDRadioButton.setSelected(true); + else + CDRadioButton.setSelected(true); recentRomLocation = Settings.INSTANCE.getRomLocation(); destinationDirectoryLbl.setText(FilesHelper.getRealFolder(Settings.INSTANCE.getDestination())); @@ -90,6 +93,7 @@ public class MainAppUi extends JFrame { public void windowClosing(WindowEvent windowEvent) { Settings.INSTANCE.setRomLocation(recentRomLocation); Settings.INSTANCE.setDestination(destinationDirectoryLbl.getText()); + Settings.INSTANCE.setDvdSelected(DVDRadioButton.isSelected()); } @Override diff --git a/src/main/java/tihwin/Settings.java b/src/main/java/tihwin/Settings.java index 5ae88c3..87aa2dd 100644 --- a/src/main/java/tihwin/Settings.java +++ b/src/main/java/tihwin/Settings.java @@ -35,6 +35,9 @@ public class Settings { public String getDestination(){ return preferences.get("destination", System.getProperty("user.home")); } + public boolean getDvdSelected(){ + return preferences.getBoolean("dvd_selected", true); + } public void setDestination(String location){ preferences.put("destination", location); @@ -42,4 +45,7 @@ public class Settings { public void setRomLocation(String location){ preferences.put("rom_location", location); } + public void setDvdSelected(boolean value) { + preferences.putBoolean("dvd_selected", value); + } } diff --git a/src/main/java/tihwin/ul/UlConfiguration.java b/src/main/java/tihwin/ul/UlConfiguration.java index 0a85775..27f5578 100644 --- a/src/main/java/tihwin/ul/UlConfiguration.java +++ b/src/main/java/tihwin/ul/UlConfiguration.java @@ -20,6 +20,7 @@ */ package tihwin.ul; +import java.nio.Buffer; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.util.Arrays; @@ -85,14 +86,14 @@ public class UlConfiguration { public byte[] generateUlConfig(){ ByteBuffer byteBuffer = ByteBuffer.allocate(0x40); byteBuffer.put(title.getBytes(StandardCharsets.US_ASCII)); - byteBuffer.position(32); + ((Buffer) byteBuffer).position(32); byteBuffer.put(("ul."+publisherTitle).getBytes()); - byteBuffer.position(32+15); + ((Buffer) byteBuffer).position(32+15); byteBuffer.put(chunksCount); byteBuffer.put(cdDvdFlag); - byteBuffer.position(53); + ((Buffer) byteBuffer).position(53); byteBuffer.put((byte) 0x8); // weird. no idea why it's here - byteBuffer.flip(); + ((Buffer) byteBuffer).flip(); return byteBuffer.array(); } } diff --git a/src/main/java/tihwin/ul/UlMaker.java b/src/main/java/tihwin/ul/UlMaker.java index fe87aaa..74f4446 100644 --- a/src/main/java/tihwin/ul/UlMaker.java +++ b/src/main/java/tihwin/ul/UlMaker.java @@ -69,35 +69,44 @@ public class UlMaker implements Runnable{ safeShutdown(); } catch (Exception e){ - updater.setStatus(resourceBundle.getString("FailedText")+" "+e.getMessage()); e.printStackTrace(); + if (! interrupted()) { + updater.setStatus(resourceBundle.getString("FailedText") + " " + e.getMessage()); + return; + } + safeShutdown(); } finally { updater.close(); } } - private void safeShutdown(){ - boolean isDeleted = true; - for (int i = 0; i < ulConfiguration.getChunksCount(); i++) { - File chunkFile = new File(String.format(locationPattern, i)); - if (chunkFile.exists()) - isDeleted &= chunkFile.delete(); - } + private void safeShutdown() { + updater.setStatus(resourceBundle.getString("PleaseWaitText")); + try{ + boolean isDeleted = true; + for (int i = 0; i < ulConfiguration.getChunksCount(); i++) { + isDeleted &= Files.deleteIfExists(Paths.get(String.format(locationPattern, i))); + } - if (isDeleted) - updater.setStatus(resourceBundle.getString("InterruptedAndFilesDeletedText")); - else - updater.setStatus(resourceBundle.getString("InterruptedAndFilesNotDeletedText")); + if (isDeleted) + updater.setStatus(resourceBundle.getString("InterruptedAndFilesDeletedText")); + else + updater.setStatus(resourceBundle.getString("InterruptedAndFilesNotDeletedText")); + } + catch (Exception e){ + updater.setStatus(resourceBundle.getString("FailedText") + " " + e.getMessage()); + e.printStackTrace(); + } } private void makeUlFile() throws Exception { byte[] config = ulConfiguration.generateUlConfig(); - RandomAccessFile raf = new RandomAccessFile(ulLocation+File.separator+"ul.cfg", "rw"); - raf.seek(raf.length()); - raf.write(config); - raf.close(); + try (RandomAccessFile raf = new RandomAccessFile(ulLocation+File.separator+"ul.cfg", "rw")){ + raf.seek(raf.length()); + raf.write(config); + } } private void splitToChunks() throws Exception{ @@ -109,28 +118,27 @@ public class UlMaker implements Runnable{ main_loop: for (int chunkNumber = 0; ; chunkNumber++){ String pathname = String.format(locationPattern, chunkNumber); - BufferedOutputStream fragmentBos = new BufferedOutputStream(Files.newOutputStream(Paths.get(pathname))); + try (BufferedOutputStream fragmentBos = new BufferedOutputStream(Files.newOutputStream(Paths.get(pathname)))){ + long counter = 0; - long counter = 0; + while (counter < 256){ + byte[] chunk = new byte[4194304]; - while (counter < 256){ - byte[] chunk = new byte[4194304]; + if ((readBytesCount = bis.read(chunk)) < 4194304){ + if (readBytesCount > 0) + fragmentBos.write(chunk, 0, readBytesCount); + fragmentBos.close(); + updater.updateProgressBySize(readBytesCount); + break main_loop; + } + if (interrupted()) + throw new InterruptedException(); - if ((readBytesCount = bis.read(chunk)) < 4194304){ - if (readBytesCount > 0) - fragmentBos.write(chunk, 0, readBytesCount); - fragmentBos.close(); + fragmentBos.write(chunk); + counter++; updater.updateProgressBySize(readBytesCount); - break main_loop; } - if (interrupted()) - throw new InterruptedException(); - - fragmentBos.write(chunk); - counter++; - updater.updateProgressBySize(readBytesCount); } - fragmentBos.close(); } } } diff --git a/src/main/resources/locale.properties b/src/main/resources/locale.properties index 0c4cba1..e61e29a 100644 --- a/src/main/resources/locale.properties +++ b/src/main/resources/locale.properties @@ -21,3 +21,4 @@ ISO_NotSupportedCdDvd=Not supported CD/DVD format ISO_CantReadRootDescriptor=Can't read CD/DVD directory entry for the root directory ISO_NoSystemCnf=SYSTEM.CNF not found in this CD/DVD. Is it a PS2 Disk? ISO_PublisherTitleNotFound=Title not found. SYSTEM.CNF file is next: +PleaseWaitText=Please wait while useless file fragments removing... diff --git a/src/main/resources/locale_ru_RU.properties b/src/main/resources/locale_ru_RU.properties index 3d162b9..918be85 100644 --- a/src/main/resources/locale_ru_RU.properties +++ b/src/main/resources/locale_ru_RU.properties @@ -21,3 +21,4 @@ ISO_NotSupportedCdDvd=\u041D\u0435\u043F\u043E\u0434\u0434\u0435\u0440\u0436\u04 ISO_CantReadRootDescriptor=\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043F\u0440\u043E\u0447\u0435\u0441\u0442\u044C \u0437\u0430\u043F\u0438\u0441\u044C \u043A\u043E\u0440\u043D\u0435\u0432\u043E\u0433\u043E \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0430 CD/DVD \u0434\u0438\u0441\u043A\u0430 ISO_NoSystemCnf=\u041D\u0430 \u044D\u0442\u043E\u043C CD/DVD \u043D\u0435\u0442 \u0444\u0430\u0439\u043B\u0430 SYSTEM.CNF. \u042D\u0442\u043E \u0442\u043E\u0447\u043D\u043E \u0434\u0438\u0441\u043A \u0434\u043B\u044F PS2? ISO_PublisherTitleNotFound=\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E. SYSTEM.CNF \u0432\u044B\u0433\u043B\u044F\u0434\u0438\u0442 \u0442\u0430\u043A: +PleaseWaitText=\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u043E\u0434\u043E\u0436\u0434\u0438\u0442\u0435 \u043F\u043E\u043A\u0430 \u0443\u0434\u0430\u043B\u044F\u044E\u0442\u0441\u044F \u043D\u0435\u043D\u0443\u0436\u043D\u044B\u0435 \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442\u044B \u0444\u0430\u0439\u043B\u0430...