From e0c9cad16f6f1ab8d4532674c621a36fd0057004 Mon Sep 17 00:00:00 2001
From: dre0059 <eliska.dreveniakova@vsb.cz>
Date: Tue, 29 Apr 2025 12:09:49 +0200
Subject: [PATCH] Sofisticated graph of references

---
 data/demo.mv.db                               | Bin 21037056 -> 21037056 bytes
 data/demo.trace.db                            | 267 ++++++++++++++++++
 .../controller/DocumentController.java        |  51 +++-
 .../controller/StatisticsController.java      |  44 +++
 .../repository/CategoryRepository.java        |   2 +-
 .../service/HeaderService.java                |  10 -
 .../resources/static/assets/logo_FEI_en.png   | Bin 0 -> 27668 bytes
 .../resources/templates/about-project.html    | 123 ++++++++
 .../templates/citation-timeline.html          | 238 ++++++++++++++++
 src/main/resources/templates/view-all.html    |   2 +-
 src/main/resources/templates/view-pdf.html    |  77 ++++-
 11 files changed, 795 insertions(+), 19 deletions(-)
 create mode 100644 src/main/resources/static/assets/logo_FEI_en.png
 create mode 100644 src/main/resources/templates/about-project.html
 create mode 100644 src/main/resources/templates/citation-timeline.html

diff --git a/data/demo.mv.db b/data/demo.mv.db
index c687424bbc764ff63cdef9e93a82885258976e41..7ce692294bc8c4f8f1c7c478ed4243370dcb0e91 100644
GIT binary patch
delta 146609
zcmeEv37i~NwSHIiI%}56Br}t3vH~F_T}y8xkPfm16aorDd;;B7)q)^|O+lZp!@dMV
zk^wG@kc1rsA#8(+5<~?QSwaN=DhMQiC_#ceK^F7>?pAfXXUPuX(f#}NoT{4cs?)cY
zd(QdJ`Ods~XV=fed(ysL=G5YGCpgD;d1=1zrDMM1bs5QIa;kImsmCAN<)*WXCQcp>
zF|~A@cZzegcT$(<nNG=ct@`DKTLz8X%x^9kbXR9=Ucoi(smFQ8Lyx(IuX`tV6{mi)
za9Wp9@{(AX+hyn6sVALq!YN&ror6-zq+u14si~(N^G&8@DU-DwYwEYWlTJS7gyXyD
z&W`s^JB9w5Q%-QY4A)JO<?EaF&ew-Rp_7{43ne02C_D=*`-Zsu!kJutMd$L!-*9=+
zg<3>UM5Ee|&x-H5R3}T{chlpBHV)SkS}3aB_j<#uGj;4{O5?72B7!aW*nSu4r1L~)
zRJif0VKQ?}zBAhR*GM8kx*qGih&=yT=eXF<2i+V^M9Ffuc|2L#^hzt4JvM*FgwcZ@
zi`8jbNdNb|Q0Ue#^5Z{zP}}tOP)PgBpnt{druB^bP3LfpJaVLUNYg&pdi_bEFyzmF
zPu96_P9%4>YmH>ZZ#%~)cb}1;xyR@C+-vWB_T3NaW$M-^LOOQ+K2}Pz*{-#HUtlu!
zkD>Y)GURLd*7)!%##~bu8q>Y(=8MXiI(FixIR$^In3UU!X@9BUFL`pwNy#P8^p|pS
zspN_!H!1(?8uGuc;qd>CpXM6=2Tgfk*EHmpO{;tE!k6@Pl4$QX4cC%n-7(Gkgx#b;
zmfw^cua`<ai<+#zYQrslA(@t!PEI}Um~VMs#C7F#FMWRRuxnam<|(<!TCV4<DOOup
zv&m6A=38~sBc0Q%y|e;ZH@A7`NU7xB-Tm~P(}p>0S60yqcI1)iJLUJ*izexuZcU6A
zOOBN(^^k+6<dee<_VKipDFmM{*`%;Gzh~Grirv~P6JjOL$s{x6>9zUk!_w^Yrn>ta
zdHT})Ui8ysLDK3BXEPo-!m#ddC}hO_YA4ByUv)Z3e)a23<ikhSBzCdWMSk(yh9T}5
zGw0BICX*>R!9C+7om{C~yQ`(E==ygK&NjPatfb{mJ;8BKom)8GIlZgoCav2v{v>dU
zNpWl|*ZuRiJIefb;vNfrrY-K;j3rb_+ENv!NzzPZvw<pZDruCGQ%^nq)RR4T<|&8D
z+t?@uis7j2RxTD)#k^8-xT2YOcy-xEfxPrmuCtsr0;O>N*`vf)%8<_#)6LTHG1Fd!
zQcf;u_EO3zrWK|5^TkZ&Ol7p7l<`A0TFu9HImLoJRR%FSym93eeu}&haoj4U%%mJC
zPbg)oN~Kdy&g-QVE)Yej0vjnaX?u!NrQDDB35-A`k39Zlegc_$=Bzlb@)JAO4Eu_m
zNy*E`k{Xnl2I;J$YEba9#oih?o}p;qaSgm&iM({?tPxEPt~)-z*hYzrTm5<`y}2G)
z(}Kh1#9>W&Sj({K*+>^`Te(D>l7W%0zC;`^8yuEi+<4ksCeFSw-@#!$Ijz}Ak34N!
zom!eKpXcDP*-Wp)X4$XBg{k~nFJoql_P~e5LFi%4qMZ@H*2~FXizkfoYp2>-d2gB-
zG00Yd|612l51X?xWZVR=Wmi1Vf**+evL9%aEcMLdGveHKIVD#f+AzpL)9194x2`xm
zu4Ty?W4vKyJ11|*;P@qee9u#!4W*=QJGovzyFwWpiH~+BsVb8Tl)(dDDucseb|;5S
zpVLZKyw?;fTLtAQYNQ=G&C83>EQ;~5ll&rd4RyXxI(DY_X>pUmy-5$w^s_QWRlh8|
zHxt~bF>+*?n;+4A^twhe`2D7sj`O9h%nvKW++YTTos{RvPP1_`jjVE2mQs#s_r5AI
zpZO<^E>k^>5^nq8iE3r<70**ldHyK5%m%W(vao{i1gB4m*~}!$u=ycn7L^BWDw)HB
zQ(8z|W&B=YDrImR8J3YsDVJ6$<rUph?^BE0&o`e8s6=(PT`#3xX_*q9-r~^)lMv5O
zc~iUOr3+`ZliA14ij|F0E_lFM@&V_MsG=SlQNzfnS6<5VGTGkh;aGus{K_*tYz#)U
z<UJstxh@`}LbEJc_ZzpPOvmW7E+`XdRy}N4`TVij1(!5)1$Efc$wFEV8#RoD$yxnC
zf=v-93N`33n(4_IN7b~HEOA{ih^FDIYLR8PcDDPvD$_(SUDNUuXW1B9hNWJWX`_%V
ziZR@1T@9{lZnBZ>S69o|6*rEetC<~OTpeFmHuqcEf_f*X%@pnsK8zc!tHpJ7+A`|A
zTf(@8LVEkKGwR71ZPv<manB~rV%BQ1#FK=sk)@|L|GsRq`@<|j(tq>2CF!Q^Qj=x4
z!cZyN?0;;S@ztD(PjVN8?kE?m6`iDkqr<@7`2sHCTd;Nb7EHpoU=qFsl}6~I3$c(7
zg&xqjeE1-I17`i_qFlm4r!QFOxQMpf$+Wz6CR5>O`hK8)yJL&*a;8$rBuogSQ+bi^
zHGX05v(`U&-ueeMymh?8ct`M#;vK^~j&}m@I=t)gZos>-XZ?ds@ufxT(yE@PFvF8_
zN-E~W^_wbCvm|NQ%DrZo$#lsr1h+hP#-75K#qTGhShT3?xmP`0Pkq*)i$n2|OS*oT
z*Nn#N^y~E-bnY_tytOnxS0n3=YHl6)PZ^g-d-J(kq8<+H;VVL+Kds>M<vqB3L#+QZ
z&)5I`OD46%uS4NE_;RF?uN#kYx&OXgetkbKFWXO#=z1j55Q)Sh((R3Et6mwT{S?Z^
z)|{D`x{mq5Z9@lX^X3gU=^snG?UtDRw=h#)KPyaDENX7m9}JTr7w1NjckY=#w()g(
zYkX99j-F@;b>F!Ec>M=D|EUWXHOI;2&p3ni1$>LXL`eACbVT%JLS8H6bwXax<>VXa
zt}}^)!xcU*{j~>;VZS<7I9MM^7JWFQH9l<SsBcC>BP)H}fjwKrpOt<p>@4YsDqgJc
zT`OEyTYfI(|2HkXXMLJW7S7GBf%E#=^I`8GKX3CAjWuu5e|AvMl9>yi3UBguZoW2m
zePX`dR&%o2D*PJ7$r4^<g-=D@xpG!<USKT>1ANPTE7J?EgnoQ0>F5on0a?|#3Ov1X
zrC;Uiwq<^mqFaA{75qNx(Ue)RxDS`+WAbQbDd8j46#sO3G`F&wEK1!3n=JcQZXEeb
z(u(UPj|@2`-{O0z2y<^ZINsY+N%<EX4VW`06@hZa__s>QjEpR}Dc?=al(?HpzA}AI
z3ym+tbURCy9oyVmMsSWhp}sejqGmN>k8o7{XbxQYwCDEWH>VYqa6GD#mCaVz_-cG1
z?Z^AzR8kv`{Q5aKdzG;TMC17V2}7=0w;YcxWOIS{WEiE4ZAtG*xtee=-z3E{)6Gn&
zK0S4gF<fl|Fp(iz%jDx_E}8jSUK>^}FkjR(6*nGWMx~C_eB`Gz#bdXIlU8&zlc{9E
z=<Ow^Gm4Hpk_$&h^*xhT!lQ1=wBZkv6DP0Pn+#4_m$aw&K-f8lI!a<~%N-?QF$=dz
zt`%Je4wiJHxZ9+`lHGYR^nxMxvnQFPmMVQ|pC7UpUw|=3UohsnPkiO7ZKgCIaH@2Y
zjs^DvbE$0KN-yL}UwSc@Fvr=Cc)73#Uw}Q%HozWd681Qi)E;NDLrB=;Y#sJEld#8`
zybKaA?bl)uR*6A)Z80%!$z{k1H{}o6IFO@z@C)O2@zFft^8}Z)0_<fGPOx*O967P^
z3kRRKzTAxWAiM|TJp}Kec(>p^4DVLFhvPj0?>4;K@$SHTB;KR&9*y@HyvO3*iT60X
z$KyQ#?}>O%!h15_JK((|-aFwv1@E2lo{IM_cu&K7I^IdVjh^*oGd|aGajmOv8v^|_
z#KUeY77q*jwgK*-;OC2Yu<y6wwxNF8p44yCZf-1u;=`EVwo^>?*tk2k<L0?zaNjhX
ze(J_)8*;}YTiG2eGk2_`d8nSyeISzqnitWVa7yzp!wR6ufAf4efYcHEg~sLg=_fmy
zpNO!1P|xsj{D(@y|8r-Q{b%h<@tuE*|4?}u{m-t=`U5etex=i{brZvBZf{sfH}6~5
z7*9mVZqH!*Rb=i2YeM4{bo+nR%}zj>zP-kV1@t4Ox?k7ftIO}3Gn_p5j59*NQl~!X
z2r_k|)!KM9{m9%zS3UMZmOs|nN)DT7jnJ+kb0=DvhDG$h4<z<(NW>^6o6#5R<mp0l
z2RUw)GfKOhjPsgjHe5_Uw4&iZjW~*CzB-A#waS^ST}tkpWF0g468g_f{j8=62b7*y
z+^+Qe#$H?OJD>-QIlcK4c0dL28ky#%)1O@!wdR7-WQk8NpjmT4MLI*x1!YMJH5U}=
zQJJj_s?}W3zFg3s^5_@R;v~ckADo$^WZo0`co`m_kK1y?)F>(WN7CCf1XutMQFwbi
z2_ads15DH~igq?9F;QS-03G^q|D=m*A_oqdF_*sRsSs|dlqvZxz3M-chn{oCexj~3
z{GG_OVb2XB<GS6wwyj_KnQ-x>f28_2K9H74!^O)87q5H$^f(-<9J_)o8L1NvRTlXj
zRSp$TSusmSMMxr(PAO>**c*?wAoYu0ho)tfe1|IhpXOXBp5#CndHAU2QA-}b4Y835
z-)dkWEckE5m&)+g+7o}~4%wW1NIMa@7?r032cz<QvA*yZeEo{Ox%|=jTt0dLllq7Y
zx!hGqPi((+K{yr;$70Q~SRFqy(n7ZaKE@rg@rea`BHYU%<Br+Q)XV5f+!Id3{7lop
zF{7EMH}!JRxMsJ|Z;o&HMuhFV(oy3M+uc+7M-ox?kxGw^dv15pPaM*4cnofm1{bTT
zTd$+oUz_&Y*!DY^8`ri_ucw<DwQE+@HQh$P@b!j!;`jpf>6)+N|IKOZ?vHo%Fb8kU
z6?!#_crU)D?bdK=BGJrTzF|M$AK8uWd3Wun7c|bep96nni=jgRupDB%k;{f#sm_-~
zudAcJpyEt+FMp<0zfbWg^{d%RYvYgUH?E6j>v2{pe9M_`^Kk7a%*E6f>BJakbu`>g
ze_Lzx^@c>9?`i@f?a+UuxSaasd_}v5xt`j^RCG4{kbZY$><^7}{G|t~U#gR3h31Lc
za^{KZm*}K$akDk~PO4QVc2%WEiW@**Pa)BKD6!|k`X~;Gwzjs+YYvUt9w5<Xc%(Al
z7{GkZH$`BWXEN22ZENsoMRxRtQeSKEs7L`cGc|ZrW-iv?QJTTkSM5*@9+d`r0NrkV
zc=Tr*f=4^b6~JiVdiYs&8w-naN0~V#z0NJN^i;2i`N;w&9WF~=N~O||eJ?*tPJALi
zoIKI$4lSEBHBc6C^snFm*@AwyD?Is)P%tYT`66@V2MYx)n(I1k+MyqZzswyz3W?f)
zMEROw7L$ELqL*;wa_2!@!UJPS=II3ieZmD}8{mR52^Wk>xL{1e1*4L>U`)aVV-hYH
zleaE_ZHvWq91^7#Eq%eFC7o;YJ8i?lt2<g{-Zm|i67x$EwMOQg_9ZX;A+N=j%z7!W
zwUjrh2umg#&?~mz?1LaPqQ4rgQc$B+ORJNSFph7q0K}&vtxjBDN|Dy|(QD!rSzY3h
zvpMxz8+(PJz>5tTa?V*g&{$Chh{84jy42GC{M5Qy+Fvd0kEXb7y+Wo>8|HH8wn_UV
zg{Sf(!T>Uu@l}DT@KWpwOvOgE6^~PI2CAaw`I(Ass9-4hpwtZMjLDx++fZgx$;f$N
zROW)3m7Il8yW?k5&9Kf}Kf}g5g?Ae74BpwE^)qsbc?DYYrLZ9IR6$l+&3+n6m$~_C
zit41k%BZChG_}4W1aF{rn$@D%$Y~0VYn%~!Hx9mm@Kmf>Plm!BC>eR}>3?dMg#Q->
zN!p;Mx!Sw&Ht~UP-}KG5W@wSIi4*mn6W7hiYmt47X?D+DZ_juxJZPVW`tW=44*pSn
z2pLq&Jv<1z)yKxz?sdC<c=w4%v}^6;>8t1D$=p?Dtm#}<<&=#)9(gZ5oa7%^ZN$GE
zxjgz_yp7CTW$s22@6Bi&O%1!nk+);-#oI&p!g<lq`O(k?(U4A$PCDP4ar(GS^p$u;
z-VHr)>A%>4V@IykTX~do(5v-NCPJ-<axS%e(t>PJlxH|upS~a<JSYU)N;DKntB3b#
z9-$k_?t^aKN6!{0*T4iVL#YPNjrL6+pq0q77VCcUpU3ltW|HLZ^25S__b3g(UU~rq
z_?!j6N@jY%0#L8BvIsKy>HK6eFXOe4k4&qc+-F(4=~<T?xI90utr%3;I;ba>RwyfQ
z=H<S}^_>Ks7B_}M48X6WbjAykbCZQk#zQ@OwbSHegAz=7TxKA+u0a-_HETo|<44Bb
znNO3CzUL;U+G#l{CJXY4wRo<rQw)&JWFePE(c{tiVV^4~23uBGAJotdZaQ!f1ZB>>
ztZxi{;li~osjMv9+Ef+<1H1I^94ynHSIvTuOj^9IA7%Xoj|^Iw8$o{5;_k4EEjb0O
zoUC?4aUh)(D(i(^+qD_z!t{cY?T=-8G^2n)2!5}X4UUCt=v%qg?#JJ5nVAC|C!NnU
z$`Ispf&0hG;n@?y$ht}qt805Dmn`~Du4R`(N%^%Ue*A0&iviTPa3f6{@lu_F$cmpu
zbAyp7EQlrO8Y`)67tba6Z~l}rin!kA-kTpg#6-3)8x@vYi#776wAFsVM=Oy1dlst0
zAn_n#^4ph%LjS>2=)nV-)Q3d4#1n;X#}kD<8bbPE=WvM|p1yFyFE5-G?w+?KKG}bm
z`sWo}d<4|+Q1+Qk86wH`FS+y9|D_A>&*8l*-n-$wd(Zm6%t#znfIUnf%Mu#Ru~bu*
zX3mE{B`@*;7!v{|Jn>jIL>Vis?4%`vW%`ruZM-1_TrCtHzakX+@}XdZSrO6}9U2Pn
zg!RLo4TY!A<8lJzmk(qAkA3biwq5)FpF`m>^FrF2SF-PG-^EifJTIi5^5>3@wvGv-
zCykr1bHdD+DF-#U3H<t$n=6_LyJT7^BdKM`(q(INJFlv%)AWvz+?>HeI&Bv{4-0O_
zHcbl)UI7{XrJm%q&d>Dj+5f!@Ir6V-C-)4#*|}VcH|`sINY^KkJ8p5#B=h&nA3nH%
z^8H-eNaPBh<CJWdbiTZ1IvKKmeq`KAyTwd4*K_2{Yev`IJ^SoeweI}+kx64#hc!Am
z;pawf#?Ob0HP3Dz8O4ZC%Y{PG%SWCUx#kyn?dtlB9j6<?V9_(=?EKCVz37tZ53Csz
zcCaw}fi+9@*8l0zF37Ldrey3eJ{AHrHvFftib;d+|H>oSaT>-g*4sEE&d|}3-^4?0
zbkdl;$&<#wRfWaw6BfR_IWx*85YlMH?lYFBYtv3L-S@OJqMvDp6@E3UF`g}E*)cYb
zWrvxSDDU#;mlqCkC!tbZ%%>YOzbN6Pq}vZ$ONBChPd_E!(=XOnf{<j%1+!v%R1p4T
z<g_alwKszChZI_@md_Ofdz)IUY$mKC`N;*5Et;(=ES~L`<EMi(T{tIRLG)9QSv39t
zZ5GiFWfKY}l0J!kykw9Ui_<Iz%OHcho%ZgxR?{=51h6S}Lxl}tV_FhU2B(HeV$$|Y
zw{S(dc7dI_sp>_9Wp?JWrdq9q*`5{~wT~Z1=CxVRw3~c>L~V&ftp~oQSPz`?NLmkk
z&G0O4Jv4x+L0Au2GV{3n@R{@RAm_6om2~zCh4P`ul83p(v_aP~Z9s-Xv5UB=Kp*q;
zg~$A&!WG<7kn?*mwq9T<q@9dezy!%G1)3`b&H&C<Ck+C@8DPniT$Bbuic>{YSb>J&
zrae2j>gmpepC$}na0)PkU<x$|#y9;n#Ad?7v0@KLIYB6-T{&2t2@_K_J`)zjOju+y
z;gkrRXNymTbb(HV;rjp8@75N)p-m}bDlD?8Flts7&f@_3WLmcn3dJv7tdHhXVe8Ka
z?-2=&uFMh%e5DOccD^UIHHzumrlA^9*43wd7P)kd5{^<h)+pg>lyJ!Ztx>`O`=PN0
z>c}gUaJ9S`VG`8xVge$xT3!q+tB*A=hOz*HHlX_-ZtIr92dN;IMp+8j4G-1;qMbcw
z`+*PIgUFr_A242J1VA|j;ZXA7V{4E)fHV)^9F$cdENoU~MHW+8I}<RcNwcy#ZVSuL
zcNyq19UjVBrG^@5DoOj0oui?)5IMWedJ?tu%+eN?xZrT`4fTUImpKh^g|y%+Q%Aaw
zzkkO%p2h)_b9v#V=Ea?{9Rf33+U0bMAHhpG09MSPh9OZv+?K}aY*E6%;S<Y|VN%3|
zg=fPHK>8rWRd`gfGkzYx!pN>EaN??Qx(5c1(;;4`9gTQhb({{{^~H$K^&6*apD=pj
z#>DAj`MR?;1gZ|7nSbu?@h2Y@o)ij2Zfd$t*W3G!-31}LD|&_O8s2OQhxLg;$Sy8I
zb^}D}F6EKBj-N%Ce}W$tz3eg;sEmEMQ1ws7dQs+|)TIkNQkU-0?q4%hyZhp6JHmP)
zEuwW;fQzzBzb(c+lyo7CJQ{dCnIYe;M0jwh`1#kcLp5A56bKKauO6)H=W&GR)}00p
z)=8JaDX{YAfueAa#(DtVJgjR!CC#R_3!&*4WZtiwq2w#3W!E920_k9aNtynXFFchW
z7eSuHZDj1z`CUFs7>?0TFim;TPz)!CaG4xIp%Jd#?Vw)BM~wKxqT;ESEP5azmCPp<
zgFjt8d_e%Wg+e8tO#rE+8Kgo+cRP(VC{pe_DAI>kJSnm=DB>iG1)x^dk6v6}{-c*J
z)2E1$Dye)dGC~sWyt0myRtiidmGvkqWfj8mHaY6u{HS`N1BG2^AY|XFKnNZ?G$2AB
zGc*7aT@dCHcP9&od<fDKyyD;a6_>b`=&Rv^9_>Z*on{si@gJq~(MzMD{-ZYo;Lgt4
zB|jwMxT!(~Mk4t*@WAKsrGk9;rqUc4E2fn4v83%}um^cCx;Ost1=$drv2Zl{@MU})
z;d7f$>Z^RL`=M16$<klsV@gTbcQtK4&aTKy!@kW+!wyBf=u4nJr1DslhEe$)l!j4x
zCQ8GooR88lDwm=(jLM&YB9Y2Jp(G4a4+*&wO2g>-@e3MQX;^HVl!g@(r&8)f*>r$Q
z%E&>R5L_hW_k~;_<i$cR6mpS}-9p|dq$n+WvUh3OVm*2s>uOM4TXqS)O36TYZCPSb
z@7l6!@CjOLcDIg;Ykb4Wy-Ulk#wTd0nJ6tA@0XTc*}Jri^if*&pkG>cZ6Bp&OZzM>
z3!T%DPM}tcvWX14ZX-&|P+>(`C`D;l{nE<Puw{Dh(lGE+QvOR>8umd|Y1j=!Ee%7l
zmr@!Q`I}!Fc7;yaGpkC&K#fVMNn~l*Wol_y^n=RMFc562rD0c9l!nFcuPhCt7x2Rf
z`avcT^c%~QCPwTxWK?r#?Di1!n>x)kOETz}k_{-_lwU5E%KHD!eRd1SYP}(3(~4Se
z2;K~*76_~b0%aE$o<UXP5AC-jLM;%utpb7II1zzoLDp$={!ktWOwvH$@$lAstDi?|
zY@RWeNt=PQkSrBaxwO;E-Ez^2!*?KXI2N=?Rd|3voDHA5rF-_ewu-D`>ZyQ2Fw>i<
zr67vqEXx!jBsA4vp{xp~mZWWYNWly0yM$X)?HIZ~Q^t-!YEr^8^lU@*mBG{^-BnmQ
zGD=w4sAOk&RU%j@8<nI|eFO`Wb|FI+jj&ph*i|q{SZ2;uRX8v!eRMaK<vuzJ-&ziI
z(bh?(9tKWb_2JVza+qb<3-8ZnU>FQIauwrZ6YYb;TiS34MITY>RzNGAxBi)LZKMMw
zt{Qasx*pw=+&)f@KL(yWIlNg*GM5aJO{o$#dRtT|L4D5tPYyjdqI*kG^coq&D`9x?
z-7e!RitqTqi<qgnaQ&F+W_Ozq?lN}7ito7dY$V-*i|?8Sh2WqvAD78vW$_)HT($vD
zE|YL_nS_(eB%E9(;p9?Dom?j2<T81@D89RQFBUVPJ_CKhXINhN?|K%s^&<iP&4?|2
z=)f+TxtvqV$k0Ke0Jdv2YAdoUDaSTTOhL~g{w%NtXjLQ+MH?XTD-tb-*aN`KB-N<x
zt2}CJ<XIMFuk6Y$zCApH%0Gm{S@`=`bg;BQmR*VMdfgvGVSG-z4%wDGyK-bl+o*|S
zCXJu8!R*RxJod|mIT|9ZGwxpN#?we{F+4O=xqEFZdFsS`PhA29p=qn&WqKZ(Isfkw
zGIv(KJND9`&*}PjvdeGR-X6DH+*;WTNxrdWkDfbE%P*=YZ=IPxWK!F6JYf<VM(YuV
zg^bOu2*Zv(P$W#|Odf{KSt4Pw<cJU~7FfdMuwRRW$($KR(<q$a%!m^!6DH~YKST@`
zvaxj~*ezKMc9<9bMx3!*E-eQ!SU>w?i}FSMsI3>YVUXURQ*va3x}xYr**$OJ(|X!q
zy%qFimZj`_vOVB{Is4lr!x8~x77<1Oxt-jDnvgLxeA!Q@E&Lpo?B9$?vR`tF6nj8L
zJCOr-qcG7Xq}UshYJ1=#`p;n`^YeM3Dg$3B|J%CBksH~9Fvv)(B_smFt4P-$u<76@
zoRBC8=aiz>&ur(xt<)@udG@ruAv535c~CVR)dC^46(OBvc?&+;6L4nVMM9g}p|A~)
zs^Gz)HqW^I5EpepnCNNk3K{!Oo&(&ic1{-P`Np*6b{k7uzT&wBGnWc1v;m%u!68e6
z=iVz7ltHk9^yLz1UYVOnL7tg?gFI57pe_oH57?_B^A+{=DQZIxo2vd|EYovf<j_$v
zfcPb>v-{mV@l}{Esia9k9kJ%yhVACSiLX)}iTC)4uYbVAJdYV9p%A8hUEn;J{^>fV
zf5=cM_9n-9=yXkAn68%>9&KbWk8gXa29$5BrL%=}!Ax-?c&(l+*df0IdFy*_>!w$D
zeT=F0wb?|p#YQ&FwrF8nn@x~pyIu6L-9Ba$8o}9vRl~{XK+w>2Q>T+X9Ix-`M0vQ<
zAdZZTpe?Wr5YT3+v`DYJu&$+|o9oWmlJp5B&#vXLQi96d0<YkJDr}lHEQg&2&qLA3
z54}$n9jvTxmZKSOkWqO=+pC-jCSFdXcfA}C;mQVz$Rr2L;nA9OQmNDQ9JC%)%XmCD
zXP}#Nb)>>6DXcJ1gU52<H`9rz)#vQ6?iV~psJ!Eo@uNrP8%3W{6a97jQ!|KmSuUFo
z4ZET_GK!R3wRh)6sVO=Q6+4i|5lonwl8iawNBJ=)O19KH=;V*0A-jrO2u<N-fCC_?
zRPj(w<XVa~u~F*rgki(M_(QuvD%n!|@K!OK^Q%WhdPE23jh)SlaNyZsVm3$nP(zGt
zHl3xVGMJvL+lL--Cf{DwK9qG2rPKKXQTjI&dh7)zV!JOU%i67_8!#%`#h8h>k{m&V
z%*fB5%@3a~NSx~G*uk|)2oK?<?ZFSG9ViYq|6mEXZS%Ww`lj8LJi7=r(~XRoDL&ii
z|3bHeE6HIe$H*D#{a7eDDA@5Mhe>vWc58RF>{1HqcpNM<Q;;qMS2nuRvO4O)e^KkG
z#RI7COXwWYrpGA>QgP*Jlnx?kXi03NM>@C8P?wY_pgN2_0!98~mdCSc!+BZaCGsB!
z=q>L*_^>k(NfT|1(NLa6(x%d~q;ZX@D*A|N^H9AV&__JfbPwnwcIf%&zjC%lo?n=Y
z$LJ@nAKtzEixWuGqTC^Mk&o)1)8CCZg}R?VqNC@K?p!@sB~sHYvZ#>zMgj~EsZjLn
zC^3#+J&dfrB=@bvKISw#6g?-pWYGmPv|;3=OLJePG!z-~#HG3a7GF3|e8IUa_w~d+
z_B1OLJwLi+=3@GV)tBYw(Ve72(F>xaup{>S-y}yy?32cRadq!gKesoJ#V)Y0P4HMi
zdp*T?EZX#8qXQy~7EWYwU*r!UvKSpOQ;ZsYR+RpRbJ<@Fi|HSS>ECnch7395%(YX!
zv!nDk?TA0A@6kW!)Ae+B1b=hqMXCC0H991JU;}ezlrEng#^2lpQK5Ax6ODrqLksEe
z<2RIMb4}+S!DRgWp?>3;BZo|k^$N{xGy#Sr%1{cu{D53hreiooKOk3>=@?Ei*H>t6
zprp(G$TYS|V6Miv(O<l;#<+pmV_%y+MGcjB16(Hl6O}z9)w*nE(Dg^W(S>KR|AYkz
z2b(aeh&RAXu{}jPeN!8i+QQH^3}SpI*E!Qe5wkRLO_;lKmf`b8P)N)t)ud}Hld79S
z1e1}GfPx|z6D+ea$s}E661B4O5wblMfOC^|5UTZy0UM-E4w^TsoivSlHBK6LUo&)f
zzj)sUhA8G=-d)~Isk}RGs#Gl6ik0D}4aX%9otSIMVgLSBgJo{$!z5A74Bvn*X8rTz
z_OFamf6mR(R7pKM^w@5NGM1O@9&%4h7P}90;eaiybd|cM6d3d9!Y8j8GJD=Egbw7m
z1f&L(xl7t5+$~F^L+I2~WE3NfBP-x>(oG|-(T6vLV+D$F+!l(dQNa=|beT5zo_MG|
zL?(8-d+;_Ru*9WB-aF;`_Zu*z%ci)xdBaG#Rxo;7_Z2)hPjjA|>xXlmo7D$$UYis(
zuApV{94;}B(--D(?jiKrhrNOtReUEeik-k*VI(<wik%%VcJ|+5XIIcf@0)m{w{J5B
zW2d6E$&8sRirV+4`jGw|ZurMN;Jv2|;??shVRZ(3NCj4E%E=%tBB-8+mCCJJSv=42
zUK8ise}2fjgq;>M?Wq?gk7)&mN((C$Hy6Jxa;9pf=BlhzSaX$D>iyMLD*Z%-mAY;#
zS*bm+Quosb4QOOiV{^|wj7-6nwr?a2BXbxdNE?mIB6MrC5sYc0`{qU)HG*59ecPTo
zOzY*>%;_L+nawdnH7)6mGttjg;=NQeTt8vR_!WUsdGZjuH{QD?My25!nt^#~`P*!N
zDJ5qF74NMXmHuP1M&m}&Yx+po{%G84MrB~E`0?AMO&)4>J7=p#WiTZOlTx<DHbn@|
zRpX{^%5Y24Frc{(ZYotY$dEx6EGX5+6d~Poh1FvD>2}U1YU%ocWfTHS+sUHrJ!8vk
zl9UE_ud$J&Gp39wgXGPB9I&BKQWG&Y*`z54E8stMaMWOO<uPT$Gqcpx>=e;ZgtUUJ
z6qu}1%M{b{pn<iNd5Y+NPG4raSTVaRO7SyTKpP-L+PZL@KrazQ_7EUbO<+~6l&=<9
z-fVR&nejqiLr@-8M!y3ngYqU1C!1-vVgR9u8kFxBT~mVcAOd3E4C04O(II|No(6lT
z4gN5(3EYZ7+?ZOae9iE1+fZ)B6Qtp}WoGDRS&-763(k)krOd$oO9l2H*ppzY(J-Z1
z5vDXsIdMhjq?<HQGfR0ax-<T4Kw2>yYtP_i+6^#%^(zKV3B`tm$hgESW9r}5-qHT0
zovB}__Z*aX<rR&*J6sz@zWHe99^Hqp8oDFzr8WhP)TjX@UR}*cY4KR-Ed6Z#9Q|DV
zJpFu~9CdAe%wFu%yW&$PHNUARBA_bVCm#xZ_-iJ$Ce#w{g?}Pw&*YK6;qsyj;}Ja(
z<zHT^lcn#w>4WxYzAc=HSC#gih1xi%vg_GGo+ISBLY^n&`4lslQm03hcHN}&L}%o<
zOx>xKaX~1kO+v~ZWbA{LevQ}RV^+pkjn|U$R?p9Kg}vq`r8Vao(uQ*l86tEIp3&ES
z>@?SqX@g*}kzY2PjVS2a3PHno5yWJfQV%(3N<O&_`bb2x887n_a>kqasde;XKds9^
z3GeJn@*UmzyQlDkz?2uzk_3-s3<jAwHQxz3;lWSlf6@TcMm%+sTTD&3k@*tR-li;l
z{MfagWS^>@WVJLrtCKp2^PHBi*htsn(}wA%mvg=WaFi$piI*|6eo!vB9V?ozDQS4*
zr88%ZXmZr7J2Gzd>z!JGtb1fl%T#+)^C5Oc3_h@Xl=M2)?os3PNa&L0m=W|n)3W4@
zG2XB;a=GQtmUh@cS@qQk2NlZTNX)xJg1xE?x^VjqhLe887}@xK_94v|sp>SGmi(be
z{}ZQ0(goN^P{1n<2I0V(EhQZo2O>NfoEA5!Q~=@NOg{^Tfnp>gc?8k*p+}!e*>`~Z
ziqSHQj3AS&cpL4TRf0@IqNh38Aj|aalN8k~S;+-aLa?hK(+(8Xlrl_uSZ1me5n>Hg
zL!iuHsTwh+T9)T({Ou^GrCjWtOOg{+FP0^JB3qQ+*lN72lqy<qa{}zTlyWUUEke~V
zh@N6%=K5u`oU5XRo2`cLAz{MqyCA6y<Bgxdq`bgvUW`+jYg0-&rmt3iT8P@463##{
zN>)&vWEA8?giKOyQIgJ;xfuD+*|^q`2UBI~_oW+;{8j{<D@KT=%%|KmxPyA#4LE*a
zhH^4iBa3^KDNFwK&-|c9O2g+*)F@yYPu7oLGX(dc93~$VuyGI2S30F$=jxHUD*c%U
ziYmeo&J`<3p6-?H%#5-lmBO`52M)<aa|>VhPVS;fRDS1j9+^#<MK>7ARML@wTK_lT
z2ICQ1&I@H3D2`L^)!r6O>X;KKLt&8VMVILvVY^;RZC7p}>xxmxP8;^;xZ)~_Yf7X~
zh)0B<fwS4QR>I*(LLD?ZlWTCXkf_6c8<a6k2fmv&4~aU9Ay<S#PyZ5*28{3*XL0%A
zxL>mc>IBf2HsV)Y!uF;w*xo%ipPrtei8PPE9}2D}Hwd7o?NX{>cs|!kqJW|{cGAQ-
z69rQ=pPK`4Iax4eFgPWRG?CzRxJa3U*&+``%k=z-kU!5stgO({zc6sY6nN7aEqyi3
z6}DH<(WBr>n?Fh^m|}GF6E|2em5V)AcY=l-hQBOZds=%jTPS#iVgmVDE;0@?2?TtQ
zs*^7D9C7X1*TS?~YTr6!INuffs;*DG?Af)Yc-BEqdD0;7ziW<;c}2st98$=*M$caF
znR_>oh4-zwanhI^ubqODkrklWg^W$EpxEvBnk1Xg3bOf}sGV|bQ9FeNPBwqNB%9BI
zY(9q*o*C{`#?tBj?;697(-@+Cm|5*qYc7mfI_<-()=o($sLu{1N-{=}f*~C!r|8#R
zIY}8ecl`LeBRw+5@#E``&8__IZ!P@Orz@83N6lbi$p@}ziPB#Owaw{=!eUbV4yv9G
z9K?A1y9!#+o5@6j6gC|M*_c5GwJmFzQcI`@>|W!G_d)W0F!8`dq1^H8nnWI-Vo!O=
zYQJzwMY}-*R;8F%<V+DHc5nvwbk<Sk`~G?ksJBOTgFz7%h3`P`<2bd=5yYl>z!NCr
zUhJTX%AH>NNDJ6v7F3l%?mB5FCw&Ee|K?1CQP_`g6jT5%2pt|Hlk&*mUGi<ZV^ozc
z9c^c%*9bd_n>-d0l<}&xZe1r+L_T(4bc;!Mz()r1q1o{r$E3yY!yBPo;L5#p;jGRB
zU4%%hY}!C0-;d=EQ?h_bG6?@W*%CggYUG(@(fBnj7-%Kpk7M#dD5}}nrIP=6#fPO*
z9F&-C!pi7hE9om)ph?6FX|;-Z>pD0S$-cDOwNfjAL(oP9fhRy=2tQE@SC`bw^;;eE
zQ}7jxnO_e8u!z1Y3cg$v*s&qnrQ*?!Be5aM!OIJj5q4_(?$3)Hac+Cr=xswQzWADN
zp>80jq`?yU$cnFg6~iAasZa>UN)NgwQ3<1kN*FDWurRORi%S?8^wk*ZS-x`3lZ}h!
z&Sn`Kz5(gaSJ)C%eOVb77NZqZ=)<QO$l%0eCvFDb8aVBuwUB@5c{wZNC^<venJ_p7
zJZqFJ)!=-4V1rXu=nI3hSB1XhRqb7&KVi(IaT`&gKQ%fvaigY>>YGHhssR!~1Egi`
zu~ZR3BP)?|N+p^vlSskubI~ZH=fP{&v{aI<UZzPawW%@w4YWxb&`Kq+Qm4jKcm}5|
zx96#6*Z#J?=f%g??yc<*8b5Y6w_5Q_BmX#*aT3H1nXMA9c0A6l*1D`9Ud^h+t6o-E
zu2|qz|9c6`H4Em|Y!MeuX2ilu%N56py@V_f$cBF{_N)F63Fmref%w+vRzek0(uVc?
zBxBFd3skc}wxg>54JH?pwP((12ybEgyqYaovju|(Zom1Fn_&x1AfMS%{cVO3bncjM
zYxIKr1cT<ijAiWayV+SeJNibpmFvU8^fI1RQ7TVoSu$>d2Yb#_CtF+=)TpHmhXP~8
z3hX)02NDg71l5bP`>I})ss)e<=TSG)6_82REfiFH8{I^+DPjz<TF`SbaFMahR4e6J
za!HU|5;WPw#Kg!0BujHYt*hjiDfNnlKJ2+bkEs<yB!k_;Rp-8lwCBc65%wH6ZEP=1
zTUTvj&0m8h^pW<QU%~$@CRs$vKqbWNxK~B%Dop3ho;yUeu6pJiti!Iu)JtEOdY2dW
zYGSsWZ=3nH9JctjT(*?U*beB!PHg<b!Mt}BaFKzGIb2mDm^%RQB98@FUm9~f;9&u6
zQH;5!_6lPzoS(;|g&=TeQA3y!OoBvcK)NM-PrERnTN=sfmL_jR^zhNdEi`&~z>RBf
zjHNOTy4d!tyK(J5Sg3F!LWNDG*nzq}dE<>R0wZkySQ=bnp4Ia~#yzVZO)CWz{+Q+5
zB7?e-H=YgApBp>)Db*qyxs&8z60N#&eyc9TC|TD^fNUa=c&8*`LaVME?^;<!!bA`7
z!VBy`jfVxTx?T%k6KAcuwn0XRY`g`gEoqOHd`qw7GxR2T#4(DDj->JNWN&P2x62m&
zlSrTNJ=Lo8iCQ<s)4OWqMZm)lu4faXN&5lwJOX&-GN@5f^9a5ITtPl}{jd)YG4u)c
z^ol#F^B;{8!9-AdWch)oBnzQ`>ar$KRKHPK6Mj^Sa|E$aV`V1@5o+87iXfHe5(Gx*
ztu84N0+<`m&cF_;Vh|$Nf5~lWqMwkb{u9gN@RPKWRLzy)_2nkH<6F6SP+DI$l&0iz
z#AL@>5V4Bj5DyktRz_9~5CgcA=|Wb9PSp_$nmjpBhgpur3{U?Jz!fVvqv)BAzDnfS
zwpRrKK$#|)R7FqybQnKd!J>#W;<+g`qzx?trMQ;GlyBn(S|X)cIj^F+vy|cX?HCc{
z1|NVNSo(Q!mXl=J!nK{?yD0RpWRNSsty?3dX1_zp5^4j35N|2DK_#gIY$zSvFz^q?
z2rE3}(`V5;NnVISV72ll@q5Vn!-;esX+$#Tr82PEuVTSXOApHwD^zr<l2*CC`{~>)
z7tp`$**47b>O_DIg;~+1n2ltAW;skwW|pt{JeRQPm|1@CQ;;ynpN?_~6O6uKf-Nun
ztbviB`c}4TD*I-+?RaUc<hhDj4#E*?mdm8*5=#$dT*M62SK6nr3p80tJe*2_9M!+}
zT<na;SVj93*s4f;6Fug&_Qp3tiF#x#AG#tGI&lS;-^z3O-(vj?v3?HihJw#6IFrlE
zX}1)t-*7gUcMJK8NBR1n&ewEJ)9EWLQk0iM(pDiq)uVBZb_7|+5}(_K4$|h$8*I`)
zmUi1MG5c>})@nmPE6f^b=nsZz3yhKEoqOhwJ?wQILp-!`ftJwxRB3GKXuMoc=-7f}
z>HRJgNBV`vKKqj}`z$@=<7~^IFGScD+H~Z%bjyT6Cy@M@d}nN@LHouMI_Y|>vy&E0
zT7w$m*em(_2yG{L38Czu|4rcE%kP^roILo96DLa^>l{iyxZ9wc>*xoUKi1hwo`0-!
zT+C^<>JwqI+-)9DmNvc8N@kDEPoVqonrAm)ADa2<Bywc)E2+tkQ4KQ94>ne?H(+oz
zeJLBvc>G|!lP3qXwG7##Db%?=bmB;FN+%AP!ksE?gcI;rZMenLqD{+Fh@PG9rO)pj
zc1?@SJS8_-%k{i9#cB&{HaTj?e5-DHq;s0J7tOJp+r0B8a71kDbnh_Iy~z=VRqM$i
zNrGxUIchyQ<b+sj&g-1sMLXiL{EJ#oj(&4SYdtw&q;8YuytSSjitkqI$$<>kPh(Gx
z(cH1NN<Whc?&vom-D;1_JUZVY$u5!YUmXJQJE*`_;y&v@4Jv)_8r3Mw<*E*?(ax1}
zhNH{Wi8bxEEU*8SApk~1)82AqGw=B+dbY@PcHZ;GPZrwjboP`eDS&%h*=|`fO<v3s
z*5Lw%sB;AukV&|JOu_}EvK)dB$Tq+SWD-6glkfqVgb&Chd_X4u#MvT4?})^AxHI$x
zcZOn-uB&Eof!sRd7Yy}&AR)({%$YuCFj4vhl|SA-LFmup@NyyHqmK=;2C1hVc=aW;
zHgSX2Ch-!jYhYlTQeQ#KK6y<AbL>$?Awne?_L%Rpc*4J;us`A0bG(feOi<5$CM$Qo
zebCrYtd*BLcfbF1eNgKBl=*73`^{&*H-$UORaMS=G)J{~yrRna0$%4#MvrT5$nS@<
zcT)2|MV)gfq=jjnGvx3+d0lhwI_E^Ry3V<<U)|y1M8bF8dFxVH=lq7Y3H8oq-M1r&
zsBro(;9&+h|E%tL!sxmSqjehi5dS?71UX;iicT5QmTZT@uP441tDD|4?l+ysYONh;
zTr>6^{(<XHV)Ey|C+pldCz3ncwI;ISx1GB*?Ymz{f9IF$_m9_Up;_m>R!HNW>3OY?
z{mDD^+Cz_IzMsH9_B(IPyRY|*dG~KWd&mMg=AD!3-i<>AjFC3|zylc-qe?q8X!(@-
zcjIm11Kq>P@o&voA8ESp@CI_?x)~#I+Q_=^uKi(b-@?%+e8Uv%m2XU5J)6>9+C6u@
zJ>$9XpnaZ<HNF?`z)q&(wi`kQ6>|>{+GSpdu~p*0#*Tdu2}!of$C{fyA-2j#Pj9Y>
zcTi0oq?AEs>JHY&@Xn*dFMk0&jK(0|u?;XxiCk`6Rr;W+s`QNrWYlWW$%l`uN$i6D
z?c#amCrpcu)|m_~W0D+iehc+lExI7~=#%xV+Ss6Eh;nM6%gor=guXE2%9I;eVj|Qy
zs$_6fi1}EZq?tx0kAKqo$upxRkAYHs)*O^_)inpTJhRhI>9T{ws#-0&f0^~uBC7)8
zt<|F2wOaI}*Ht#htkt3;^?)UPZhy7tFj%KO(=xb{hjlAfb#s6mTv(=GxeeY}CmpPL
znSraipXEi|q1R?HpH>SWEvmZV@`Ut!NE`nUms5st2?v61|M~CdQf60e`aWSUVg9rA
zZq(@fC!{5xWhAZCIuGHc8HcdkPG$qs^-LW>t<H@Ak#|(QM>(O=O}@WrSQdKWmWmWb
zK8PoGra2dv-A`#aC~`%NBgZE6bT${1h8spHV_U)G4blT)ydfcjniiIsQhRAOeXsB2
z&co;Ro!t2q{Jg`^I}`ucPC+R+*7cJh^H^7tJKIN1?3_GtW0E_+nK)Y0+q(}x@$)e&
zQz#UZWZ^PrCi&yc{GoS`Kl$u1P}jz5Bg2s2N$$ACIg`xaFF!Jtbj*zFk^HUB%)te)
zisaHpB3JMnbVqSX=gVuRlOg-(N5-wRi`uPR&yg>$8C}=2;+eHMoz~o>d4?x`L*xcj
zibKX4Dl5gmAu>FRqEfubD#fQn!myV_h9?$y!Oh(w!?TD|@gge~A8|@$!3{kCL8&-o
zW7A4~v?vw-ll~IV@Vuz(7sG5(nN84AvoGgJCVhgcKmxj^pz&&(1|mGUF)eG#@mn{-
zP5M8I_ukR!ry(gkT?O)zIfpj~iY=M-QeLA?JU78Tk_05kKazK9wLgGS4@~cV*iVsu
zB$>P#YgAsraDA%WCvkl#9X0zSImm2A(e}n(VM@X(voprZ@U~i)`w6A6`n>Z<8rdQS
zuC@wC0~QsV32Du$G2a2#S4E;GJyMx=uI}Yi_fC!5B;qYFwMr9!9+A(+mBd>$Bzb@U
zI)75ukmPNJB&U2vDZpq9@gQHBKBtAC(`-z)QO0#_bL*i6NqPl)QkbFilqHjytR1id
z09i|WuB0qe09s{ogUP|~fo#?!g{Sf(U|gBx#3%B@%Q(DGVCC>+vXYWYMw?BrAQuP@
z7?NW73CdvpW7<??RvJZ=<Yh%xt*VTI0i^|LLeaCPwg**q_+3dq(-$Tm%}4G&dL3_r
zTLv?Lu&$Gy9F0CI{S3pSltn>W@5api)DGaWz>4fys|1U?ea60tP+N$c-DW-6p5ktR
zopUHlfmquLz@r$+zJSLNyn~&q=nUWughHrd|G`;Y!m_68BVk%&0g1L3?8PN4Vfun4
zyu9$&MwV#ndpz>_NZl6SMatwX+s>5y9%=ET=%v%U{>`QjZJuZ=@wn6g*QS3g?2O}a
z(nZR47drPTQ`hd^rhWSMkNPWqlm3yU&g#!ULh)PYq>b>8vJ(<sWR9kHh7y^Kl`9k+
zJCVs|a@lMN3%Q(K0MQvaZpfT5u{5e0Qw1`1=KL|_h9PtQCx%9fNz?A>96IM8oUh=%
z56lN6<f<9-2a~7v&kra06>E=*H(r`Rrtd_u%Wv0yK2|81Zm~oL?LWVj{PFK=M#fUE
z?O8TSo|ezY(ex0tcNvm=W6d5tcb=BtBiy}o-nV<^KDqWw8hPtSYyR2O`Js7Ev^#%(
zWYWk9+{eQ2k1jzK9b`OOQAIcAr^3f7IGl~E;8Hd&>SLvf!pFh_^RWisC48)c6SfO3
zPE4ldyOll`J;0(D*@2p_3^H!VH-OY&JIuJ14j&lYrQem3?i*4L{B6b0t_N1jxUFT}
zp6t2Gd|d;jP+{0dsb9@c5}9HqdOuH}(@rhccs~SaTS!i<_;9ptp80T9<isFAqb#ju
zPEPFG)C01#W|)y%&C;4H$wEA7bZ-JnYt2uBBd|3yZe={s?VaF8{iOD?om7Gb(h`-S
z8$UDA=9z(+v>8P0fdHg(Y1KjK&woOyns2v44|e^fkV*%Sh1@lIO$&^tOr?`@wC!g{
z`UR3ASFwWd&On>J47B84HVq$bj1DQ;$S_@^gm<kte%5dO-EttBu=rsVIU+J#8fYUp
zuVG#Ki3!lgF)FpOYpJa#oN!8)wGC2R%e_)tCDQ@Tjg$}9>f**~ADtCC%AlF=qx)B%
ze+S5v*1$*Khh1&`<l-t<Jd~kVJgtP}plIQE)L&2^ojS$2sl1+4IDILwrcj5NyMSB4
zAs!$Tx56R*Bm9$j3>KpfaFl!=>yU7RsO*3rgax=OXY<Na>bB5V)0LFquP4SlV&B2_
z?{;kQJ>qoM%oTw2vC>nmo}6)8?pAWqZ}Z7oIbBzO9pl^pGpRu){v=Y%I6LJ~?<7{x
z=XgQs`gX+QQ8Vu4{8KaTU1^@xjQg!@+z(K_!a<Oay>!KQH_&257DBNGJYD34JM)PO
zjD(ujr*&1>U((u^{zm{%7`+jaBxsn?C^4}8vBC5Th2D^fEqMudMDq`5#t;h2QCr}E
zKG*LZ?%Gw}NGqI-UXY2=Z7gj$tW+|xS+!kxsg$)mnK7Y+fo#Phv?T!{lnqcDtMp@8
zMh4u9LQ3R`R=0&L`1+cmWnY7UY7lMg*$doqz6U~wfVN5T{h<wy2^|taL|90wgosL6
zo890)&_T?k*0q_v`vdu771+)uV>>aNg6ci0CyP<rl&nIkcVAG~R{8^BnVr1kWJ9Hu
zEaBzX;Gyxlxb!lm3SBb;=$bVp6b4Qiyv%}8p{t@A*EM4!fxTB6436#FzF20u+M}$D
za+;~GzN2CnncrD)UvTWO;=Ty{5_uh(lKDDi_GV?lN$*EJ^&<4$lHAnR;3|}U$+QVk
zQ6ea~?E$G#qMND`!Gn0`9kT>U|ILwbWIWm^{G;6YY%q(ABPSy{Z)k3$)Vmi_*M0o`
zJJxkF=OXbn(Aqr2X>Du{o&}8YF17@|g@KDJSxWh|HVz;lhPKIO@2qza9ybLUo+|hm
zi55HKhT~P7@f=!cC@0gCa2vl@a7AZn_1m8HK-{$Z8xIS`hcD^+VP4y1D6ezlHD-Ld
z=dGprxmp<?Y;QI+Mu79Bd7;o>KyX9lUs1|N<vSq2q4EO|;6Q5HFS#6yk~g|OUdS8>
zZ|M4$_T}<~{kXhlzi?F7BlH!E@R~M-07r{$E&)!N5#Wq(ZqXCrsv5eBPyu(}>kYFO
z=%G-^Y<@oM*Tzvo97>EcU&!x6QYxNbpxTbgi|IEyn$L?c3LQ?A6J;DdSMdM*ILiJ5
z!knRC%!z80Ip=cvuU+d-jgj>$op$X~VmQt14U6g4ee3p$Cn99GXR!ThGIxSCq46rZ
z{lDt2NT5M!_l^6H*RMfw+fmJ}WZ|ObIJx{8XK=$p`jJxIlXdv2q}Umu|3IfKKqJW1
ziB@al68e$3iIeNG7f!Zw*hFiDwv^1BXk{9@>3<(c9N3VEQR1D9eu++=E;M(L<5oGN
zv@6LtuX$#}BKn~f4evJMD2#;XtyRusjgUJhS;tJijQ%rIpKq$DO{3@c&z<bNCcd>;
zpTKL=I=(UZ%gvz)+XENRmsBnuTlN6L)G1Lw+s6oPA0xDVjL??dg>W1D-{?MJ;mdkD
zNwjyHhHFW(?wIC%!bmP6%Wuk!*Gr|IMNQWK(ZtOfY*>R0Yp@}0&R0PqUV{y5L_J;7
zsO*!Upq5^V@yRhOduzgmwa7v(vH(x87FqbTMHYepTpy8z0U~aj5m(@G5auTLj)O?o
zIZMM!N~9qOG|-6K5B-3bpK*df3{8@?x(n-C$l&*zVwy=FYH`s)91gq4c$JMJQam(K
zkr9B{M?V2LrRgt12RsItt!PvnG<dds5^Mxos6J5Q$b5@rbHagpWeD`49glZpGnH|L
zq^<TSDU~)bf^-0R-G$)|H`GW{hGtbyoA#4IN`GQ8BwL-(iN{E=+guW{8?lzl^`>{y
zRv^oIArymGdxfBRLZE}K|Fy6uUqGaTZ9t@hN*d{45|Iuj5$RwOkq#yi>0lC(4koXG
z#7ldEXJ=DSnZDpDFE6}T&#-7e{1e3EydYkb$<SbAWxR-&4^+pCN(dVA^z0yB#G+c&
z5yC<?6|`Y>?UKA$`NeN$4cCtsg^y@{FcjaJ#fuE`@KMd9mOOr2UaRjXbo5<K+fNB0
zCFY0_(u$Bai-wLM522wU$kHBM9#2C{SpW9kTwZiOmp9T-5w<^aA(wA(ska`$*7Z3H
zqVaGzMqhQYtsX)$6NiDCsoxM14<#)VA*Ji+6|_fUPB;-4bW44OlxT?Q+Fqe09%8zl
z?qPi5ok$|QCw5U8W8&*S;vac7$|75woLPpNxV)Wy;*i86F$8$DXHa)_sa{8UquaFC
z#<t(e0#I#>^?JIgQM+bUUDHkU3tw;Oh~o=18r6I?|8GuPcYnO=E*6>^bCq7rKz%3u
z+BpqhN+e<|ST*b#{*m42o_E)NdO_oiyQ{-j`a-^?;RgEUOX`1BN25@JDVm0{x|cuG
zsxMcfS^5&T(%N_r{l<0mN7UnR6;Z93Zu4;MUKZTayLDoWvpO1X#)q}m$e@M<O2kEw
z3-s6>`YlSZOTUt@Xm_xnm$rzC&W0Q5cSlBdZ=~Z#38-o8OD8&6R%o86-Ns^I`eiyP
zT-<C;{vp*W6aT0x7Pca!-$7$xD?)YOU5Tv!MIX*+jgPcOt!NHS+#X_KM{I*wm|yN}
zd$nwO=h!YgNnZS_(@FBHUvH{WJo)IVf#U9$a-HQg@C}*8hN81dHYLA(Lyh8T7&_QU
zblGooXKqS2=~}{#KvxZe)i>9wj=@h-%ck!m*`I^{Mn+9fNO>N*()98d@r3g2bSzWn
z4CSX42^!w5%vp>c+vS=z?anxk{3U6{^^!-190S)3bf(Nb^wI*!uZ6{G2{$}R5~w7<
zq)N4fn~KyRC96eERr<e|a8nD5{a+4?O{@xw1*u@NeVmOxz-rnW%>t6<auDAU;l->>
z1sfnSh|gd=1j-^my{0q-p!_Kf%RCjVts=vY2A2`gnl@#@#}dMm$yhm?hVa;$f$Fbb
z4DBq0cL|TQg$HqoKog6+9a0dXIYgS+21J^eM5KvHM4FgHq=`vHnwUhSiAox2Vsg#`
zxcXRJ#zT12!KW`c_{$5cc{vGUXe<=0jAJPX;bl#P@X{iLSFZ2d0{ghi8IMvjFjHR9
zPkC0Js-Rf)uLp4H(d&V6s4J;~8QKES@Pp#8f267Hl9w)=)lOy~J1bT;O1a?TMFgBX
zd(!-|m1@iXdj^=#YGO*jz_JV<FlcA3%z+e$7Lc}It%qbymWXI%)mVHkX`_*&ax1F^
zjq0gWZe<*p-O5I(0y-#3YBSf=Jf6HOdx!VavQR1+(7@P5p5%-aOXYGZ*aeWa^?JOh
zHN9A77IUFOCweX625Z-M{fTH<$a6PSnN(kyoSWV3L8^^R&Kxp8IT%g*F5>7YDGNAP
zM2T66_cn~4$~jk}|HC;~I$~=E(<eYEUgVF2_*}ucvbslm(Y&ONh4qn2%Q;m1dkI_o
zG*GblAYB*?SwYirD=WS*xA1lE<Sv&bom&MNBS96aXoBFeD<qXPRCfjJjHta1j+GTr
zecXX`#4V(yv+jn6)I;(8n*I#F5U}EZ5i6;uxV(wVJo@-8gj^8{eQtIrj7MN-_rY9V
zzp9PCCS9lhRDVYQJ30^|UV2sISG72(az47(of<hKd}g=@ao9;3IqKSc!{_$niIsi*
zrKy;5J71=$mLYTjXgo)cPeP>kK6fg4<mOkJ$q7B~;2vZ{x*Cu33xokcOK5T8Smbfy
zcR)|=5+s{ac{>mSNWI~4F7pR-`N)@<43k3}rVSo5en$x!kfratZRG7vtCcoYM6`HJ
zx!6z_Ni<Z2|7m_GRh8z4QYpj#KNIUKg?v@We+#)@$TPzHdzaF2`%eA4(ZsYWxPa!U
zQkbAjlVRz?142G6<SRnHFXRV8ekkNeLjFg{c{n89&n1v*O6vmrpRP+h;vTVnFPCNQ
zKCz)k$oqx-v5-Fz674G4j(#rWQ$ju?<ZD8nDHOO2Qbji|$N%a2Z9+cEq?efbyx6c#
z$cw}mmqM!G2f_d8`VWPCM94o2`IeCL#rKwA@Ix!3zltRWGmxZwi2{<`tStXhS^j^@
z@>*s2{BQuU{2;6#E5Fi|l|?G%a)Y|^kY2xQ0LMJ5{_Ah*$~o%3ufQ+RN5v+^6Jr=^
zGy4bpqa3xlQ(bvnU3p1e`CoNqA>TdU!S!Ks;sk4a`O03n&yRX-`Ax4af9bX5pS`v$
z2v;LY*YYh2fb@2E&;CP>znXtn*}lBjmf!W-@^Y^&|LV16QLiK3!27BO8Q1#79J11{
z6Y@bJR|zQVuP_qB`KXsjj3+}{wc+&XL6f$15~gSt?SVQ%zltMUcX07rE?(r~9WE|r
zAJ?yA4PALEH_iV>UU#d0myk~gxmw6~g<LGUz}|>vs<gW*OZZ+w7&LY_7f*7rhKu)@
z(7XBP^_y_ECt7KJvCi-_{YD{wA>?yH{$0p(!yIS35*K0g))=zUcjP!5062!T-6Z70
zLjFO>H-tQoJz+catHMF@xqb!5<Mi8wd`!p}gnU~kGk<sZNR59-Uxs}w%a0|uta8SY
zag(fZ+Vu><(^hctdoEsQLO+{-TE85spX5v?^CwvoDU3%^J^fZ8e=X#ng#3q)7l!%g
zuEBUsvX0g-<?tVc6DbU+|4PU|3i+mx7lb)Xcr|_8WZDz;6)E$WouY%5ve~F%)nXqe
z9HtL#*gjywuK_0XWU{+il1o<7Uo!k9pU&8_{B45wc$#aa{B3^Xy+szy&8<e(d@Xst
zh7z)-VYEtK`j0h~&`cr-qhz0bCL6){Rh%_$;u`1HXR$2*1Q{mVmMGy*WmYTt!?QAO
zM1oq%sD<qnau#u_O$h<9kaHoO1Eq2Am{2JQRaD1>$PHg|hc;EvfRTrubH|mHR94gW
zi(_SugkQtGVFoZYV5TZkN%(atr)sCcDF({0_S4XT&r}$R?g!uIy$a&wKi3>iE8m4K
zG}0$xH7s_WG;)U06s)8U3LmAMgL?5^qlAM60UaL4G2CKhIeF5Oh*6V^!wTgrgB;QJ
zs?e@XD+H=B1UYO$;L%}0STmihP*u^4t6EGtRv)S=F=ME~1CN;2={z>Z=e)Q4sHkPi
z86VY?*L$61GnpMgNlE`~JG=tg_9_C81;>&)aV2T5l0KAF2&tg}i$r=RXLoz&pZOse
zLCaUmBM-H@V+YpDuWh#-cA^b19jF0OMU9OfJl;pf@JdBGcx7=FT0tegWlJ4#$#d92
zMhxjmp3S0%CXXJb6!ZwEmj~eGWor9W0=COSindi5QpBk~K#r?&&p?6Tvb6cRE&>8k
zZ5Bh(*KcnCBJyRoc8(2O=>j?N=3GnAq!yQ)xM4tPhnH<u4y5DZI_-Ub1g-txX$VCe
z(a?!;m!WrjK$ZbkGht=oaCG3vq4Q=9BTb`TO_ci}T#$E2R-$aS%P+ocvEmMKGo~SQ
z<0skmygtYwaP(l*1ha=}3L1;uxwgunWqe($!@|KyHuy=-;NgwYJT5q|jz600vb4c#
ztzMS>D40<c6ug5a1oV~D>KY6M?A)_aN#qyL+pQj~=V5MIACN(?p0631q+P5I-7^&M
zJOou&uwXTl*RMj944dYb_vZ_U4zmr24l`5_(P1VL9cB{IVJZ<FhQ|*7T>BN5@YCrF
zetKVzJv==8lWOu?p{jTDSlYbVf9%!3AQhnc41q!NCibrupgjQ?R00@OtN?>-QCuXN
zlyL%E6RimRN4V$?foT&jBkQSmxRcH#Rel#!fI&d=*vy<NW*8WBJOzW!X!>R-UcV_|
z(7aG6zY^iA6`|1Q0TvyI^}PYI9EkN<0E=daLZSVig2eXyS2ECu{h6@%xnVe<{;TGj
zwfKY(Su}F>)X1X9;t2WAtA`I~0W)&jviyA!3R%!Hl9RMDMJYJMp#H@H);51tPb8o<
zj;7uG1up;iI6JDA1q6icx<|Eud~6ky;RQpPj2M@2`7bV`e>k*l^pvr?j2b(3yhMfg
z;Q)12!b2=7`ydNqjwJ8gGk+|j9MR?^{vA$C!Bd0kyE&i;{oWnGD5!i`$QOisN67O*
zl|ui2rI1%qS;mGRhz(amZWvt|7+j&>|1l0o<?n?2tC0T@axso0L6|aK*mM+z@8Evy
zkbeJhAzu^nBOw<>aHca22Sh5ur?{@PA0T`RnRq#Tu)YH?vlu;M_zuy~4%<VSMOiJg
zu=<LI`s5>)Pd;M#lp~f;Ib!*gBbHxgVfm3+%a6?3eq`1*fbVyoyzqq@JxQ$&!*63(
zi?A}rj$*CVc0u%HLzgz;4Amm6wFv8HF~a(Z*I_*JoICOp3~DlJ$MW&0Qu$aTN|gbn
zJbf-x1p>!t`;RF3q?pL)lMyBE;Ek4DrCk<q<*~TRFpU!Q+J<48K*g-DBIl*7^Hn4U
zIlP4|Iu{{-KXi?xNEtgCAkDCMBu**BfM+W+4y$5Efl@y4DSCb)5?Ah$N`VT~k70^&
z^OV+veiE@C>&j((eVHeWMjvW)u9(bNec%t4;vHl80H&~=tqgXlF<059fdU{rt&_)G
zu~w~braHK(sK~-`sZy#!#gc(GAH9cEDKtaJai$^oLn?+;VFE_~Lvbl0Qp$pxl*X7m
zzHD{N0Xby^g8%}rA@GTdfvB)ZLb?K~aFQl01+E;6ZaPV_=*%_4aL+0%C0J&0g(M=%
zLAX%W&QA~rEANBLR(F;M(g~v@qQNDe7@n>eFeDx0I2Af&`wGtC#0O6mUaDsrDL#Uu
zIVO=Q`TS9qUxAU!kpFpfO=sB#!LE;+^l{}$Vq04j<z`$p`0ph9R!Rwg;gIaKrjZFB
z3|q-9F|CHMk^rkD&ugy8)C${%!{WVDf_tFkj~BbZ(rDSP#Csi+B(L*^?doD*!GH*`
zD~rLdJoX(D6hw0waY^M$<bd~Aca(E1;B4E<xERP+_hVB0l0uY82B+91mBANOb!@NH
z7xlFQcHziuV2Vk#u+naGy`WpDEx|5YF~ct@MXhR`{Kr}<$uFsFMM&I9gAcgkl423G
zUN<EU>W?6n*+p-o&YF(kAbCk4;52ROE3s`KB2V$)9}STsC@$B4dANOs$mjDA`Ti@R
zAmS?EuAoxOwj(5tm$rb1ylHHOz7j7V+&%Bkaaw__o7=o|q*QY6?tc2tX~Q_{vsF~!
zSdUEKDZjT~G)d=lYht`ua;!|Lha5B|pB&Dg;%O^W2yUj5O$uxCdxl-3*sZ-XAy)F7
zOfo~BUYnmjEX}SlQ{8=zJbh_?FZyY+AZc}mvp_tKFsvFCX^o1sMnzhqB4tyB`I+zZ
z?yy`+*GG<miOLM1COd5uEU%R6?Cd0`G=Aa0?)B5-MHeQpYSen{5o}Szn-hxp_L$ed
zjqM)}JL7f$>|S<iU{^D==_rae9n$nrC?4A!v}s-_^zbl_CQS}%kglTT5OvK-R)s{1
zh9XyluMAhz3lTs`9*!MuZp!NM$szKc4_+QmzWQaSnLPO6%cFV<FXbDw-IR)rO<Cjx
zHk|bAaQwdO8qNwQ=<hoKD8(J%y{GcA$GQCQ3ry<f6I_0eqG<C%;UUAgT;JB%)-ht-
z4!cyMP}Lw5t5Nz!!`euqahugB@mi%H(fsw_)IS$Zv{ltAm1VKgwy0I20O0MwfGFA}
zY51#ZmdaXH(b7iLEaA8Ov3^J_(XkbPy7JZn+9Z&+i8xvt1J0HRpzMB}Cv9rv`FLW)
z)-G!bN}TRh%a8^xaVq;HbEt9Jj1nj1J2$IGy+vKQRbBa^x^mkHb?q+ti1=b`ULrA$
zRZM+tYgbG$ZF%|B&px^GDU*(~rQLQ*%>Jnsrfnq3A8!E_E9+8<wSJC*oysm28&^|x
zzy9mG#17RpRlK(9&dsc?V*G*+Y+;F&1pha;)QWyjU$J>5SNfHr^y+S0&9NgQm)9qD
z+3eCQR;qQ+mX%=9-XZ!=Hn$Xu7I5jyx3DCOm2mZJUTKzowJ6cLk4|x!kzZ-3$T7gI
z9KHT1HY+!hgY`**$?@^f*Be8VwucmhqbpJjeE8qmlESRMk`i(?PRAOjqgP4}ujLYS
zApqrv|D0Mb0T?}v`QRCLYPke5P;S<msQQdTwI-@GG1n@pP)sIk_k~n#IE|cUk^4{;
zFh~K+061cS8}bR~64VN$PDLboqicL>1yUX#t6G5+O~0uXNU<cKZCxPs8P2@%3y>^7
z?UPdTdB>B7m#rRE&J9rhh728%jNx(QJmaWnei7(%MfqEQ88>Q%km!wUp^0)Y<b1bT
zP1_zhw>gmE7ng}5nl#1HD|zA6;xZJyu;Q|ZhjHZm+=BqAQwSY#ekKv;XA*IKDruab
zNyPc7q;Y;G*S8_&fFiTY&fyY~2KqvzfvmqLf7qvl;7)=@D)QskG@%l<lyjAuCdWm(
zi;6OdKF2J}rV3^nAfYBWnCx?$6UkA?qG5e&%Jmq^W1Bt*#c6raMl;;a3-w*pgzZl(
zmPJeo`Q26FyTiYwk>zpCF$zB29lj@gZ}`4&5Bb9(&JLUgPY~8o0O|o~rQh6m8zZ-C
z>{vaO9Jl`EVfB9xzY$&=elz?JMl^H}<;_cUKelQVS^A57tb*_ESp2HB2_wvko=|e7
z-TfO@dZoPxPzme$aDYlw9**KCD(?ii1R4IX#azBVl*z~i0GqHqdcd=-9i1b0Xloxi
zYGAlYhCLBARBE0=cQt%Il4#xL02BwJegU9^lJ5PU$}$$76&s!t@()7(KOz4p<e!9m
zo`(7USnov{`a=OG*`#OFfvhqI{WgYmPa;`VJ_J>${4?YL$kv8|tujdM=neulK0Jf!
zBPYZXom&CfqI*_L(0T)1<!Zvd%_}L}Oyo;jI~gTo0rFK{LWZ$8A{vb+Ms7<aEI`E`
zQ%C^UsIU`9$jYMG(ts?0+Ylj}73{kbB2!hpOI`W3y7Cfz!rc))H~~P0_J}HPQ|wFu
z(w^p8a8&ILpE8h~KEdkvB*+O>bZwHajs)DE?6u`@+XVtAG*v*kmA#k`*KQU{r<?l!
z)Fs;bL+LnL_e;Tu_?In1?HG9X6x)aX_btHi8g8Ul^Sn?;eWIP5@il9>j!IrOyFDZ1
zo14$0D8W4@R|$SaOzWG&uPDJj{caBW>5p*P@G^ctc*Llt20YzZf3wZtU6kM-laI1e
z<_>-J)&T<<DENfnX?%TPaIoR`Fo`2S9`!(DViZ~SRjX6$&DbbmLMDI3_ou&z!PpWe
zM+qA;`CGy8`0AFyi28jTPSk%RV8vIcy^$GK)gTUbSM0(Unf=w&a<D#u!-^f_n=;Lz
z3EKm#_@xS1aqCnrcb~BE<ytjzts1$8Al48>maR;wN+>72Swj$yK9$kRC4D-y8iE+~
zB&i{YpB)6TR*l?838;#Q@Mor3?8R>vRMpn1kx%C3<SN!st46M*TC7zgyC@8nwbI*1
zHF8Di=;yws_E_6i?1~&>p#T_dg~Zp4Og7th>F5Ors;*!xZ%jV17;zMAI_;?M^95iL
zYy+?eDk&DhB(Ml3fkjYBu?QxCMNmnx2r7X^z*|OM^Y@}$!bhgBrk0-NE7zQx;0=`|
ze567^KHik^lBGhb5^t(3)t7ja0ea(Vys7W9Y1>fBeNj9u%9?`8=>Tu~R?};tc-_{(
zn^tfVJxZo`OF*7CL9KYAz|(5P7qqjQF4y8Z+AmQ+De_YI<pEG6Rs~gu;eNhpFFihC
z$wBw$HG>S&R@alOMy_t8RZvaZV2V$0q=jP@ys+t5oQt)ILk0G<0`zMXbAo*QaVGUR
z#hg}z^aCjd1$jHgoK}Rwo{%4L8M%{UPb)&vvz{F>YQpF#9iv8%-7M_s7Y!Fh5+go6
z*b^Vpbpng}CyfpLt^U<$VibM?9rBIGq6GG|IUS(rfoN3~l`0lR*WVJ`-`)^5C9x;b
zDr%#uuC(!yP%JTFt6)>*N^pvTRg@pGH%PU0Fe<uVN_*&IRYz<Sx<lN{-;RDeo*4Z}
zU{(Q^^*#q(%8lAJtLmBtF7eui6<$Su-vg9*sVLPz_?1#h_Ac%_{l(}piNuso6wHz^
zSM>gP*O`$|tlyRjX=Qo=SbafS)s4I6MYe}BGokwiK(6ZQw6h|cQ=FzBr9W1e=-61;
zi^E|5%b=@GZwMxe)+*sIwsuB@;#Qm2ER3UINFJ#N?$RF$#!#`dBb(h-tUol2Z9fOs
z{AP3=>kk#vVfLWwWJkk$xWB^(j=Hk}&(W=ojxn_C-`fTyW2o8sjX=wysWH*U#Mn(m
z%NTn0uWf{yF%<2?t&5)NuLu<F18ON{hJT@{qBsv0Wb6fsqOAxuUAj{CPwV(|<K@lU
zNB^`VwgHN!@c-6I@@ge{wURs@>#LRI9pB~D0JYP*KznAe3aJ{PR>78-@@jyZC}7|X
z-#;TIc{M<-2B_8OeNkOkqxU`GlrBI#jEmK%(fe)(^u7o~P7CMu{#bB625tE`A6vsk
z&<{oI1qeg~ctRH^CU4=eomMC`L1k<M?!zQ-A1W#C!z6GYCV~4<NpT-0f%{NNaUUvy
z`@o+E&iAyy`QXLV7rgl8h402V%qLO10Ol(N{Ds*ZV7^QR%m=dIzRJodNpU62mtuE7
zvQIi<|6tgg&tlAy)WAW^U_Q|+>x6C8D+{CWZ~*tUjYY4l1P1)Yri-=slG(uO%zh9$
zitAlKi_30k{F@#h%iC%VrERskBbP)jja(KXk;@}jMEdBjHCN-nUONZ&dUevmPDcRP
z+tf~4ll$tVRn1}8Pf^)#8g`B_u0dMtbtdYZsGKk4_k~<0<j;g$Ddej{{#(fPLY@Ht
zhwkT6A%7&~Rwyc~2KM;+d9-iU+x7o1ni##&0G|N%UV+XOklU63AKm}CqGy;-uPA}N
zYoP!|)i#G-QR|BA5KBznET9j--eov1^w1mA2yLqaeq|ti12sC^M1IC9ddBJ^HNLL)
zIg4uxqx-}W+|{0OMwBnn161y2W%-xN^8Zto*DA~BD-~%!P?qmimMg2)f@8hUKT~eg
zUK`uKAfkY0A1fMIo+rxYHkR;lv(P~0*UiTr8y*t<RwA)W2%E{wXPnkgs@6@ygF_iS
zDA%xpNBM~ptnr_8`P;0`#0sm?!%Mac^iceoO-2u^@kFwDc;W)>Uv<FYhO}zK^|M5|
z91-$PA%ikHi6?S-L4<;VTNhVk@ZzOg3NMC-jagieXW53}MP>zDzU^Q}1~<a?*%ol4
z{+@sxFQU(m^G1(uzz^P5up@&XzaJqKDkR6Paz^P_=xjy5UC76Td_l;!bu#mJhmQmY
zD}xu82?@r|>LNV}KQh@JArvkox2$r;k#Uo(aoY7{oY&l`tzd!`?M0W5UD%iyzqv3Z
zgCj4DY?~rJ2}d%y5LebD>uCK_oms#7EkgcE$Uh4CrjQqiB0j+lT3ys9VM+Z10Z(4c
z`jZa!D&a}k%khJcVs>+LW~I*^dRfDg=IxO?bn6uPDez<+W1^pib~81gvIbPvfXW(B
zDWfYjpwg)Um54=WSY4ZussWY9<XdWeNMSG3`jC3=%u^2aP7)PtwaUL*A5z{=umn3g
zDDkZIAr&;cwLYXNS&#N9>qAN%L!U;UE;E>|cOO!qPt!8XKL(6c;DQt*Wo<MCP`;ry
znon_z^kIRKep6zkHw%pPj{+kFghsJX-NP5Cd~6ky;RQpPj2M@2`7bV`e>jvvqM`Vn
zoE(&f66gz|gyn^Qh8afcL!Q#GcCp1Tg|ss0@m4IQ$cc?#IG8qgb6lIXS?)?r<z0(q
zDP*P(jFch7nW9Z|3Xl0F=V^A*1zYKujJ*krR1{a23_B==yr`)ViZ^V<Qb@#8Li<03
zc*=@U=l~QFQu)lml9Cg$Qx->dC!TAjP-si@H&{QoMI%ubNukgx@RMSuZ`9#~#m3|G
zcqjSj)x!<)wfTn+rm?ZJCvp_3|GyMJQwt+CfuF7jX*V@8{j@(_#H8NQ%;jkdxqNvQ
zli|A$W-?OzGLz99-yYlP^7b*)#wEv$A2(^U3L{rGG({5a0N_65_$mJZOKE)VecFC*
z%m#5(fuBAt@Y9bIN2S-pl5#bmDsa>-!c)H!IVhHxwo!O0@YC1CA<q;z>ZahS6nDK+
z{DiB7{DF{H3we!@%OHE<uM|JM4GPeIJSyb#Lar0?A}B`xzf{N{3;8=C`@&!8=YNO;
z`W2Y{6kvXZe&EkI5S4EUIUhTw>;1EZRs*qo{Z?Ff+AYyU94+IvCp<O)YH#{jv02Gt
zx>?Qmwj7(SZw**Xucv6s9?=UEiR5-s#5uM%N~=J&cWfV!?N_%NWLpj5-o9OcxZ?M1
z1rWCy*1dD{VBH5avo0}ab75T$?_Rs@;9Z9D{%DI)-Xs2hd*=ckMRf(>o!KNC^E^Pr
zJfN&#V&oBacV@HMXm#yZ<g=m`AFb3@*{8KC;sdp<viLeaP|yS&wORp1p`ry9QBXio
z2?EMXQNc$61+BJ%Ra&*R=iWOrJK2pPK(a)>$@d-3&V0-4-QCG<=KlXVx8IZk;(#5c
zyqxyV?RwhFsqd3rOMT_r2w<|J(;4jZXmMp#A$?VJHT~rj_>t^TU`~T)cYp@x4e8ZV
zlwZBSG?-K2hq6S4IUSzWwRBjXEG|20X0pFx1HB$iqr^)buBB7?U;m}SCb?F$g6+Gx
z^sW*|ZFgt|o9x;m))XZ+ZmH%fmMUAt(lu_(1$DHXxebwRh-^b-8zLKXT{c9vAu=my
zvLUiZamk6e*29L#Uc1`Wu6DJnUF~XDW358F+Ewpx+YPE+Syzr8bTLO~r@3%(Frtlb
z+2(et-l)d<6AuiVI6Gm!hi!Ld)jSWy%Z}+FL^jt<CO~SuA_@JW)dv31sbxXK#!{E<
zRf>)q!<PEBxH_sYMYHKqjG|G#vZbMLBogKdoT}Ft2rZ+@3Rkt4rfscC1_{Mpc>Wdf
zlfzdvrV3Z}j<bdf<M)UqI2*#P=`8&%q<{SLWp$(V0Z%yd`+y$V_!~M#x7k2_YTU~Q
z+E<J;U>T>mBtg)lEuOa3-R=-AFP*-YX1w(fQzO!c$cS?Lucc26(H{w9t`e$D%!(Lb
z7Eg0AKrfz-MB8qXJW&V%gs6G(^!n2{*Ox9xt`;|l4Ko3Nv0*L(5F6&1*f7t;hFNB8
zm}SO>S!QgQWn#lLk3?d?(=Urmvq$WQW{-H+^R^TKH~Z19C>n9{{O=}jyQ%cZlnIbJ
z6_k`Z;7@qNs;{*=ptdfr_EA;!RgF|#ojOZJdlkQzixUmr2Gybt#JoWzVma?rLmh~U
z-;}s&Q3tf*YaFhkE>s6b((5(yRELx0WmbitT<Y7jv7A+0w-m3Sifives<`gB4Zwtg
zkC;&Kvm&SL>Z^_2G3sdTk`<#o8Y~UPCEXTC(%~x(DRAZ&&{L!#NcWR1!19JkJj;iQ
zZFxA^1GHbh8btn->;c+#j#wk|%5^;FAlU=7KX<Iid1K0}`juA<sHk*T52#J|2Xdu6
z#!`36+SIRO<vr6u&L?`Y85N;@Pi^*=!Z&mBs}3HwKsW|Z5nE=m#5{(4<-)Su{C*j(
zf$kPeC92F=|MPmznro0GjBONcbJ>8#%<|Ke8Mrr#xM^T)dw-k*$E&&T<na=GcBF;;
zh~yS5(ht2x&+GM^73UyHBVp138__eA*?GK568Rn)2;0td59oJ%UCzxeuEU5kU)*!=
zEd+Z1*#Ve_!15Bxd(sg))kf&4Kj30^jxJ?Y$^*KsmXJ~up6_x+L2p!juhlTfrlL@1
zHmaUzeXb8%H=bkf*|n}K51}<D59A7}hLkXP559tNKf2pX-9uhTwjnRjYx=D;v49qH
z&io!r-!ma6eb1DPJ&$MXSt|CBQqcUwNtMY5WPT8fVK6si&+3dlTQc^1m9ghe@$@W5
zo{_O<(M1`%+FHmpeTdha&tU=_D=oaG=r}E7&zy`sFYlZ3@QLHv!hHAsDi1<^nBV2<
z12-U+?Y99jv(J}|eebOS!T-W~C3_|WHzJm2$B2+;=w`$M`s8!&uDZ0CzOAxlMsP!7
zVRj7(Zc4n^5mRDT&ofK%Ydg!7;KszWSvDrPIk6}^=7c;`Hz;19GszJc(zCQx8*sYv
z$**zqE1=TcCbQ0deEoDd*y`-#h9jXQj9V64La`MITamC830sjc=Jaeu!d4_~MIv~(
z_P(u1gvZeD0+9<_kqBh+CdIC^H`t;Y=lI6&@mj%MI35l9+j!mV6?QLc^l}oW1j1<;
zxhq%LHF>rYH!w0i9LLDlw`{9Qsy+)xRxFH8C&@psTJawo<~QFTs*%=x1485M{gM0+
z9=|;#m1*yt9?MIrtn}L8{h9AmxIvd7{2mUS+pNdVr00qSv?_wHQfYRYi9lSj&Z%78
zLp!`VHcSJ*GNq!678%xwuu)hq_%L<-i6&^tVX+v8Cld8|X)<?-!!bzb=fr3E_A;HH
zpP77}^KV8=83$*ylx0Rsc_v!QGtp9>iI%d=XerM`OIc>Llx0RsSteRavkEkaP(Dm#
znoD3mG?&0W34IY&p<xD8Pf~0KeZ`9Yb{Nk{ygA<by)^>%P6!yW2P1&D+iQ%e2B<f#
z0@xn2DL}nKWM64b_Jx09HU-ehKAmvsjnlncJ81~SNm((Q0>u46pQVulL4WZX6A@~O
z>Inu@O#!ACpXhKEXM^mA9F8*>HmAJ0i8To*FgpcQHf^jVNH2X<`~|fKV36LM4(WSK
ztbagR(Rs3~(xFY;F{<Xl(4vr3kh3XgvzU{HNXam5^z=|+YpUN{r}`m>bk8dO@X{O9
zJDr9hA11ct5hKL*4UFQ`{%;u74>_FY_7r)08P7S7i<~>_ZoZv2@2tM=imK|$KK*N}
z2X#8t-&MFFhqoy|NIC|jQ+=`BLIjmP!B-iLD=4hY&38L=s^9Uomj!h1w9f1X)wiy_
z{C$+4?O#F9p)+ZJashn`I@aa3<Z(ov!u?sI{fz3j*J8k+{VcDf=g!c3hp7LSoV#6I
zRB503>r}rZ%?AwX&+;2Oj9*Ct0;BvI2?#7drsw5)-eWI<pXkjAR_S@Wo>N`njb;QQ
zFV-J;13QN|<=vi7;HkSdC$L%osoQI<V7${B$|w11)i+utfUFt;!;NP3yRAcL&j{d*
zT`aQw8hbM*xvJTs!reg+2=0v@U~vWB?#`}&?3OENwd1aK1!zI-f(f8VvuEY08@okc
z1YMo5xCLFQ4W#P_@9dLE;4GJ3ETpai``8lS=$&AQ1R}4>mQcXGg17eDE7;Y?Swy6G
zU%dkE7i`MDU%)+s&Dr$~<ORBK@H%~z<_zt(s+hhPv+Wyj?_kY=@ea6u@MZ`616MW7
zE6E?!+5Q3d5LO=`4}tp#>$B@4$S>$#!a6$R9D%_%r+En>NB(W2`L$c=ee2{J(b=I-
zqjCy3Y7VZ>4twwtOjkjjO*KHQ1Sk@(9~^1E=8g?=y+@OF7x$Jt+RpP!hC6BXUTyB9
z!Txe0G5^kDWrx&T;nS;LpAxT6O_fEPr@niFGv-sY<1Y`^NWuA^4^+yXlB$ia4IL``
z;+nfo8776bonuP|<s=fZr<&K!sVj?$nc9ewI#662dQ|8HIpWjYLzN?3kwjDpB<5=)
z2ZlVo#l&ts&FrS`pHQ{%XQ7`uW8O%!^x=TKL_8Ys1hloEg@%^Z^TYeBhYxCN?+OiL
z_tqwP6t|P+PPB8p%Cm*xfH5!V(LOjk>efPAKQ7k3UA`@Uh*}@fr%=3JefrNA6w`kJ
zYr#*{6AdPsr6+qeMq=iKUz85aOOHHCtkr~{M=@UeXvC<2Qi9Ekc2y?D^Yq4Isi#Rr
zBz)1lfYIX7qZ&iuBk}nBtW&2k2^1q-kT7bGEHzQBR^=8oQQk<{Ixt&TuyqAvqSDqC
zY+b?D6>ME08XYIfQ0c42))j1BL9;tL{J=Xpm^j?l6^zfeL@bdoUzP*il^`{cZmTQI
zp({s~caI>PZ73BD={4z0r8qTwUfi&9s6L%rIb+Pe65*(!RJ2p4o~cx*<`ovh>HG?d
zO4eIlVI>kCg`jbr*O3*cg0pzTKoDf!>-ROZ>r@aC=T61yCK@Q+JS{m{+#puXcMz*)
znXzh~iB<DVteR(H)hshs%`>rTmKm#NnXzh?iB;2#2sstw#o`5Q9)$hSJP6O`KXWfW
zu|zCoU`PnY#XyWi0@GRu_{mzR*R2Jq0O2Hr5eO$EoPzLkgi{elBAkYBI>H$UXCnLp
z;g<+!A&f%!6~fsFzee~C!Z`@%B8)}|BSa9Q2r+~>LIUADgx?~ZkMKK$3lJ_uxCmhk
z!o>(<5iUWv6yY+2%Mr#QT!C;U!c_>rNB9H69}%ubxCUW7LK0yD!nFw3AzY7e1Hz36
zh;S3a%?P(3+=?&};WmWZ5hfu_Mz{mvPJ||eW`rpScOl%3pds9Ya4*7r2!BGjAK?Ln
zKO;PdFco1M!gPd(5FSRDf$#{zqX;t*W+D6q;W32S2#+H?f$&#^IS6wRo<w*G;c0|<
z2+ttQM|c+DIfMlW3lW}2cmZJ%!eWFa2rnWmMOcRL62i*}uOKW(XhB$k@G8PegjEQu
z5ne-h9bpZ^T7-27>k&2}yn*m0!bXI*5Z*?32VoP!W`uVU-a~jF;RA%fA#6d|im(mg
zLxhhIwj=C7_!!|6guf$vitri2KM?+j@HxUxgk1<<Ap8sAON6fwb|d^7;XeppBYcDK
zEy8~h{)h10tsqSTi9)7uQshwNQshy%DDo)|p(vmzq$r{&rYNB(rC|TR2SrbcUKC{%
zhf?&WIE<p4qJpB5qKcvqMPG^^QS_s5QyfmwpJD*T5fs%FH55lu)KVNpF_2;q#bAmd
u6m=9sDLfQj3Lk|+p;GuM>L~&g4HQ9&Mv9{;j-mK5#jzB}Nl!pX`uzXK2*sBG

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

diff --git a/data/demo.trace.db b/data/demo.trace.db
index 3cde3d5..761ae41 100644
--- a/data/demo.trace.db
+++ b/data/demo.trace.db
@@ -3366,3 +3366,270 @@ insert into documents (abstract_text,category_id,content,doi,notes,publication_y
 org.h2.jdbc.JdbcSQLDataException: Hodnota je príliš dlhá pre stĺpec "TITLE CHARACTER VARYING(255)": "'The in vitro induction of human immunodeficiency virus (HIV) replication in pur... (311)"
 Value too long for column "TITLE CHARACTER VARYING(255)": "'The in vitro induction of human immunodeficiency virus (HIV) replication in pur... (311)"; SQL statement:
 insert into documents (abstract_text,category_id,content,doi,notes,publication_year,publisher,status,target,title,id) values (?,?,?,?,?,?,?,?,?,?,default) [22001-232]
+2025-04-29 11:42:42.721697+02:00 database: flush
+org.h2.message.DbException: Všeobecná chyba: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/elidr/pdf-processor/data/demo.mv.db [2.3.232/7]"
+General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/elidr/pdf-processor/data/demo.mv.db [2.3.232/7]" [50000-232]
+	at org.h2.message.DbException.get(DbException.java:212)
+	at org.h2.message.DbException.convert(DbException.java:407)
+	at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122)
+	at org.h2.mvstore.MVStore.handleException(MVStore.java:1546)
+	at org.h2.mvstore.MVStore.panic(MVStore.java:371)
+	at org.h2.mvstore.MVStore.<init>(MVStore.java:291)
+	at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035)
+	at org.h2.mvstore.db.Store.<init>(Store.java:133)
+	at org.h2.engine.Database.<init>(Database.java:326)
+	at org.h2.engine.Engine.openSession(Engine.java:92)
+	at org.h2.engine.Engine.openSession(Engine.java:222)
+	at org.h2.engine.Engine.createSession(Engine.java:201)
+	at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:344)
+	at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:124)
+	at org.h2.Driver.connect(Driver.java:59)
+	at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137)
+	at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360)
+	at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202)
+	at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461)
+	at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550)
+	at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:98)
+	at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111)
+	at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.getConnectionUrl(H2ConsoleAutoConfiguration.java:94)
+	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215)
+	at java.base/java.util.ArrayList.forEach(ArrayList.java:1597)
+	at java.base/java.util.stream.SortedOps$RefSortingSink.end(SortedOps.java:395)
+	at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:261)
+	at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:261)
+	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:571)
+	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560)
+	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:636)
+	at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:291)
+	at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:656)
+	at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:662)
+	at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:667)
+	at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.logDataSources(H2ConsoleAutoConfiguration.java:86)
+	at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.lambda$h2Console$0(H2ConsoleAutoConfiguration.java:69)
+	at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.withThreadContextClassLoader(H2ConsoleAutoConfiguration.java:78)
+	at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.h2Console(H2ConsoleAutoConfiguration.java:69)
+	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
+	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.lambda$instantiate$0(SimpleInstantiationStrategy.java:171)
+	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiateWithFactoryMethod(SimpleInstantiationStrategy.java:88)
+	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:168)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653)
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:645)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1351)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1181)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:563)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:336)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:288)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:334)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204)
+	at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:211)
+	at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:202)
+	at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:97)
+	at org.springframework.boot.web.servlet.ServletContextInitializerBeans.<init>(ServletContextInitializerBeans.java:86)
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:266)
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:240)
+	at org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:52)
+	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4426)
+	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
+	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
+	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
+	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
+	at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:148)
+	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
+	at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:772)
+	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
+	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
+	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
+	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
+	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
+	at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:148)
+	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
+	at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:203)
+	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
+	at org.apache.catalina.core.StandardService.startInternal(StandardService.java:415)
+	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
+	at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:870)
+	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
+	at org.apache.catalina.startup.Tomcat.start(Tomcat.java:437)
+	at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:128)
+	at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.<init>(TomcatWebServer.java:107)
+	at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:516)
+	at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:222)
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:188)
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:162)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:621)
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
+	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752)
+	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:318)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1361)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1350)
+	at com.dre0059.articleprocessor.ArticleProcessorApplication.main(ArticleProcessorApplication.java:10)
+Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Všeobecná chyba: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/elidr/pdf-processor/data/demo.mv.db [2.3.232/7]"
+General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/elidr/pdf-processor/data/demo.mv.db [2.3.232/7]" [50000-232]
+	at org.h2.message.DbException.getJdbcSQLException(DbException.java:566)
+	at org.h2.message.DbException.getJdbcSQLException(DbException.java:489)
+	... 98 more
+Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/elidr/pdf-processor/data/demo.mv.db [2.3.232/7]
+	at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996)
+	at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143)
+	at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117)
+	at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81)
+	at org.h2.mvstore.MVStore.<init>(MVStore.java:286)
+	... 92 more
+2025-04-29 11:42:44.133669+02:00 database: flush
+org.h2.message.DbException: Všeobecná chyba: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/elidr/pdf-processor/data/demo.mv.db [2.3.232/7]"
+General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/elidr/pdf-processor/data/demo.mv.db [2.3.232/7]" [50000-232]
+	at org.h2.message.DbException.get(DbException.java:212)
+	at org.h2.message.DbException.convert(DbException.java:407)
+	at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122)
+	at org.h2.mvstore.MVStore.handleException(MVStore.java:1546)
+	at org.h2.mvstore.MVStore.panic(MVStore.java:371)
+	at org.h2.mvstore.MVStore.<init>(MVStore.java:291)
+	at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035)
+	at org.h2.mvstore.db.Store.<init>(Store.java:133)
+	at org.h2.engine.Database.<init>(Database.java:326)
+	at org.h2.engine.Engine.openSession(Engine.java:92)
+	at org.h2.engine.Engine.openSession(Engine.java:222)
+	at org.h2.engine.Engine.createSession(Engine.java:201)
+	at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:344)
+	at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:124)
+	at org.h2.Driver.connect(Driver.java:59)
+	at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137)
+	at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360)
+	at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202)
+	at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461)
+	at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550)
+	at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:98)
+	at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111)
+	at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:126)
+	at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:467)
+	at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:61)
+	at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:320)
+	at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:129)
+	at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:81)
+	at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:130)
+	at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263)
+	at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:238)
+	at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215)
+	at org.hibernate.boot.model.relational.Database.<init>(Database.java:45)
+	at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:226)
+	at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:194)
+	at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:171)
+	at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1431)
+	at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1502)
+	at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66)
+	at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:390)
+	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:419)
+	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:400)
+	at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1849)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1798)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:336)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:288)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:334)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:970)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:627)
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
+	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752)
+	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:318)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1361)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1350)
+	at com.dre0059.articleprocessor.ArticleProcessorApplication.main(ArticleProcessorApplication.java:10)
+Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Všeobecná chyba: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/elidr/pdf-processor/data/demo.mv.db [2.3.232/7]"
+General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/elidr/pdf-processor/data/demo.mv.db [2.3.232/7]" [50000-232]
+	at org.h2.message.DbException.getJdbcSQLException(DbException.java:566)
+	at org.h2.message.DbException.getJdbcSQLException(DbException.java:489)
+	... 60 more
+Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/elidr/pdf-processor/data/demo.mv.db [2.3.232/7]
+	at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996)
+	at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143)
+	at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117)
+	at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81)
+	at org.h2.mvstore.MVStore.<init>(MVStore.java:286)
+	... 54 more
+2025-04-29 11:42:45.852115+02:00 database: flush
+org.h2.message.DbException: Všeobecná chyba: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/elidr/pdf-processor/data/demo.mv.db [2.3.232/7]"
+General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/elidr/pdf-processor/data/demo.mv.db [2.3.232/7]" [50000-232]
+	at org.h2.message.DbException.get(DbException.java:212)
+	at org.h2.message.DbException.convert(DbException.java:407)
+	at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122)
+	at org.h2.mvstore.MVStore.handleException(MVStore.java:1546)
+	at org.h2.mvstore.MVStore.panic(MVStore.java:371)
+	at org.h2.mvstore.MVStore.<init>(MVStore.java:291)
+	at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035)
+	at org.h2.mvstore.db.Store.<init>(Store.java:133)
+	at org.h2.engine.Database.<init>(Database.java:326)
+	at org.h2.engine.Engine.openSession(Engine.java:92)
+	at org.h2.engine.Engine.openSession(Engine.java:222)
+	at org.h2.engine.Engine.createSession(Engine.java:201)
+	at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:344)
+	at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:124)
+	at org.h2.Driver.connect(Driver.java:59)
+	at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137)
+	at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360)
+	at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202)
+	at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461)
+	at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550)
+	at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:98)
+	at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111)
+	at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:126)
+	at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:467)
+	at org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:46)
+	at org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:39)
+	at org.hibernate.tool.schema.internal.exec.ImprovedExtractionContextImpl.getJdbcConnection(ImprovedExtractionContextImpl.java:63)
+	at org.hibernate.tool.schema.extract.spi.ExtractionContext.getQueryResults(ExtractionContext.java:43)
+	at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:39)
+	at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.initializeSequences(DatabaseInformationImpl.java:66)
+	at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.<init>(DatabaseInformationImpl.java:60)
+	at org.hibernate.tool.schema.internal.Helper.buildDatabaseInformation(Helper.java:185)
+	at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:93)
+	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:280)
+	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.lambda$process$5(SchemaManagementToolCoordinator.java:144)
+	at java.base/java.util.HashMap.forEach(HashMap.java:1430)
+	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:141)
+	at org.hibernate.boot.internal.SessionFactoryObserverForSchemaExport.sessionFactoryCreated(SessionFactoryObserverForSchemaExport.java:37)
+	at org.hibernate.internal.SessionFactoryObserverChain.sessionFactoryCreated(SessionFactoryObserverChain.java:35)
+	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:324)
+	at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:463)
+	at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1506)
+	at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66)
+	at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:390)
+	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:419)
+	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:400)
+	at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1849)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1798)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:336)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:288)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:334)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:970)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:627)
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
+	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752)
+	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:318)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1361)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1350)
+	at com.dre0059.articleprocessor.ArticleProcessorApplication.main(ArticleProcessorApplication.java:10)
+Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Všeobecná chyba: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/elidr/pdf-processor/data/demo.mv.db [2.3.232/7]"
+General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/elidr/pdf-processor/data/demo.mv.db [2.3.232/7]" [50000-232]
+	at org.h2.message.DbException.getJdbcSQLException(DbException.java:566)
+	at org.h2.message.DbException.getJdbcSQLException(DbException.java:489)
+	... 64 more
+Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/elidr/pdf-processor/data/demo.mv.db [2.3.232/7]
+	at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996)
+	at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143)
+	at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117)
+	at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81)
+	at org.h2.mvstore.MVStore.<init>(MVStore.java:286)
+	... 58 more
diff --git a/src/main/java/com/dre0059/articleprocessor/controller/DocumentController.java b/src/main/java/com/dre0059/articleprocessor/controller/DocumentController.java
index 4fef59b..379bc5b 100644
--- a/src/main/java/com/dre0059/articleprocessor/controller/DocumentController.java
+++ b/src/main/java/com/dre0059/articleprocessor/controller/DocumentController.java
@@ -2,7 +2,9 @@ package com.dre0059.articleprocessor.controller;
 
 import com.dre0059.articleprocessor.dto.DocumentDto;
 import com.dre0059.articleprocessor.dto.SimpleDocumentDto;
+import com.dre0059.articleprocessor.model.Category;
 import com.dre0059.articleprocessor.model.Dokument;
+import com.dre0059.articleprocessor.repository.CategoryRepository;
 import com.dre0059.articleprocessor.repository.DocumentRepository;
 import com.dre0059.articleprocessor.service.DocumentService;
 
@@ -23,6 +25,9 @@ public class DocumentController {
 
   private final DocumentService documentService;
 
+  @Autowired
+  private CategoryRepository categoryRepository;
+
   @Autowired
   private DocumentRepository dokumentRepository;
 
@@ -53,23 +58,36 @@ public class DocumentController {
     var references = documentService.getReferencedDocumentsById(id);
     Dokument document = dokumentRepository.findById(id).get();
 
+
     if (documentService.getDocumentById(id) == null) {
       throw new IllegalArgumentException("Document with ID " + id + " not found.");
     }
 
     if(!document.getStatus().equals("Referenced"))
-      model.addAttribute("category", document.getCategory().getName());
+    model.addAttribute("category", document.getCategory().getName());
     model.addAttribute("author", document.authorsToString());
     model.addAttribute("year", document.getYear());
     model.addAttribute("doi", document.getDoi());
     model.addAttribute("link", document.getTarget());
     model.addAttribute("tags", document.tagsToString());
     model.addAttribute("notes", document.getNotes());
+    model.addAttribute("status", document.getStatus());
 
     model.addAttribute("documentId", id);
     model.addAttribute("references", references);
     model.addAttribute("docTitle", documentService.getDocumentById(id).getTitle());
 
+    // add category
+    if (document.getCategory() != null) {
+      model.addAttribute("category", document.getCategory().getName());
+      model.addAttribute("currentCategoryId", document.getCategory().getId());
+    } else {
+      model.addAttribute("category", "No category assigned");
+      model.addAttribute("currentCategoryId", null);  // Ak nie je kategória, nastavíme na null
+    }
+
+    model.addAttribute("categories", categoryRepository.findAll());
+
     return "view-pdf";
   }
 
@@ -104,4 +122,35 @@ public class DocumentController {
 
     return ResponseEntity.ok(response);
   }
+
+  @PostMapping("/api/documents/{documentId}/setCategory")
+  @ResponseBody
+  public ResponseEntity<Map<String, Object>> setCategory(@PathVariable Long documentId, @RequestBody Map<String, String> payload) {
+    Dokument document = dokumentRepository.findById(documentId)
+            .orElseThrow(() -> new IllegalArgumentException("Document not found"));
+
+    String categoryName = payload.get("categoryName");
+
+    // Skontrolujeme, či kategória existuje
+    Category category = categoryRepository.findByName(categoryName);
+    if (category == null) {
+      // Ak kategória neexistuje, môžeme buď priradiť default hodnotu, alebo poslať error
+      return ResponseEntity.badRequest().body(Map.of("error", "Category with name '" + categoryName + "' not found"));
+    }
+
+    document.setCategory(category);
+    dokumentRepository.save(document);
+
+    Map<String, Object> response = new HashMap<>();
+    response.put("success", true);
+
+    return ResponseEntity.ok(response);
+  }
+  @GetMapping("/about")
+  public String aboutProject() {
+    return "about-project"; // názov HTML súboru bez prípony
+  }
+
+
+
 }
diff --git a/src/main/java/com/dre0059/articleprocessor/controller/StatisticsController.java b/src/main/java/com/dre0059/articleprocessor/controller/StatisticsController.java
index 8a8348b..380f0c4 100644
--- a/src/main/java/com/dre0059/articleprocessor/controller/StatisticsController.java
+++ b/src/main/java/com/dre0059/articleprocessor/controller/StatisticsController.java
@@ -74,4 +74,48 @@ public class StatisticsController {
 
         return "statistics";
     }
+
+    // sofistikovaný graf
+    @GetMapping("/statistics/citation-timeline")
+    public String citationTimeline(@RequestParam("documentId") Long documentId, Model model) {
+        Optional<Dokument> mainDocOpt = documentRepository.findById(documentId);
+
+        if (mainDocOpt.isEmpty()) {
+            return "redirect:/statistics";
+        }
+
+        Dokument mainDoc = mainDocOpt.get();
+
+        List<Map<String, Object>> references = mainDoc.getReferences().stream()
+                .map(ref -> {
+                    Dokument cited = ref.getToDocument();
+                    Map<String, Object> refMap = new HashMap<>();
+                    refMap.put("title", cited.getTitle());
+                    refMap.put("year", cited.getPublicationYear());
+                    refMap.put("category", cited.getCategory() != null ? cited.getCategory().getName() : "Unknown");
+                    return refMap;
+                })
+                .filter(refMap -> refMap.get("year") != null)
+                .collect(Collectors.toList());
+
+        // 🆕 Získame všetky existujúce kategórie pre Y-os grafu
+        List<Dokument> allDocuments = documentRepository.findAll();
+        List<String> categories = allDocuments.stream()
+                .map(Dokument::getCategory)
+                .filter(Objects::nonNull)
+                .map(c -> c.getName())
+                .distinct()
+                .sorted()
+                .collect(Collectors.toList());
+
+        model.addAttribute("mainArticleTitle", mainDoc.getTitle());
+        model.addAttribute("mainArticleYear", mainDoc.getPublicationYear());
+        model.addAttribute("mainArticleCategory", mainDoc.getCategory() != null ? mainDoc.getCategory().getName() : "Unknown");
+        model.addAttribute("references", references);
+        model.addAttribute("categories", categories); // ✅ Dôležité pre JS
+
+        return "citation-timeline";
+    }
+
+
 }
diff --git a/src/main/java/com/dre0059/articleprocessor/repository/CategoryRepository.java b/src/main/java/com/dre0059/articleprocessor/repository/CategoryRepository.java
index 823a39d..23f6995 100644
--- a/src/main/java/com/dre0059/articleprocessor/repository/CategoryRepository.java
+++ b/src/main/java/com/dre0059/articleprocessor/repository/CategoryRepository.java
@@ -6,5 +6,5 @@ import org.springframework.stereotype.Repository;
 
 @Repository
 public interface CategoryRepository extends JpaRepository<Category, String> {
-
+    Category findByName(String name);
 }
diff --git a/src/main/java/com/dre0059/articleprocessor/service/HeaderService.java b/src/main/java/com/dre0059/articleprocessor/service/HeaderService.java
index bcdfa43..d621352 100644
--- a/src/main/java/com/dre0059/articleprocessor/service/HeaderService.java
+++ b/src/main/java/com/dre0059/articleprocessor/service/HeaderService.java
@@ -84,16 +84,6 @@ public class HeaderService {
         System.out.println("Author list before checking duplicity: " + authorList);
         System.out.println("Author last names before checking duplicity: " + authorLastNames);
 
-
-        // check duplicity of the document
-        /*if(documentRepository.existsByTitleAndAuthorsIn(title, authorLastNames)){
-            System.out.println("Document with this title and authors already exist");
-
-            return null;
-        }*/
-
-        //Dokument dok = new Dokument(title, year, doi, publisher, "PDF");
-
         List<Author> savedAuthors = authorRepository.saveAll(authorList);
 
         Dokument dokument = documentRepository.findByTitleAndAuthorsIn(title, authorLastNames)
diff --git a/src/main/resources/static/assets/logo_FEI_en.png b/src/main/resources/static/assets/logo_FEI_en.png
new file mode 100644
index 0000000000000000000000000000000000000000..06d62423addb44af461bbaf0a5aeb84a07b2809d
GIT binary patch
literal 27668
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

literal 0
HcmV?d00001

diff --git a/src/main/resources/templates/about-project.html b/src/main/resources/templates/about-project.html
new file mode 100644
index 0000000..db4482d
--- /dev/null
+++ b/src/main/resources/templates/about-project.html
@@ -0,0 +1,123 @@
+<!DOCTYPE html>
+<html lang="en" xmlns:th="http://www.thymeleaf.org">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>About Project</title>
+
+    <link rel="icon" type="image/x-icon" href="/assets/favicon.ico" />
+    <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css" rel="stylesheet" />
+    <link href="https://fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" />
+    <link rel="stylesheet" th:href="@{/styles.css}" />
+
+    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
+
+    <style>
+        .navbar-nav .nav-link {
+            font-size: 1.2rem;
+            margin-right: 20px;
+            color: rgb(51, 102, 255);
+        }
+
+        .navbar-nav .nav-link:hover {
+            color: #00134d;
+        }
+
+        .navbar-nav .nav-link.active {
+            color: rgb(51, 102, 255) !important;
+        }
+
+        .navbar-nav .nav-link.active:hover {
+            color: #00134d !important;
+        }
+
+        .about-container {
+            max-width: 800px;
+            margin: 60px auto;
+            padding: 20px;
+            font-size: 1.2rem;
+            line-height: 1.8;
+            color: #333;
+        }
+
+        h2.about-heading {
+            text-align: center;
+            margin-bottom: 30px;
+            font-size: 2rem;
+            font-weight: bold;
+        }
+    </style>
+</head>
+
+<body>
+
+<!-- navbar -->
+<nav class="navbar navbar-expand-lg navbar-light bg-light static-top">
+    <div class="container">
+        <a class="navbar-brand" href="/upload">Article Processor</a>
+        <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
+                aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
+            <span class="navbar-toggler-icon"></span>
+        </button>
+        <div class="collapse navbar-collapse justify-content-end" id="navbarNav">
+            <ul class="navbar-nav">
+                <li class="nav-item">
+                    <a class="nav-link" href="/upload">Upload</a>
+                </li>
+                <li class="nav-item">
+                    <a class="nav-link" href="/view">View all</a>
+                </li>
+                <li class="nav-item">
+                    <a class="nav-link" href="/statistics">Statistics</a>
+                </li>
+                <li class="nav-item">
+                    <a class="nav-link active" href="/about">About project</a>
+                </li>
+            </ul>
+        </div>
+    </div>
+</nav>
+
+<header class="masthead">
+    <div class="container position-relative">
+        <div class="row justify-content-center">
+            <div class="col-xl-8">
+                <div class="text-center text-white">
+                    <h1 class="mb-4">About the project</h1>
+                </div>
+            </div>
+        </div>
+    </div>
+</header>
+
+<!-- About Project Content -->
+<div class="about-container">
+
+    <p>
+        <h2 class="about-heading">About the Project</h2>
+        This web application was developed as part of a bachelor's thesis with the goal of creating a simple and interactive
+        tool for processing scientific PDF documents.
+    </p>
+    <p>
+    The whole project was created at <strong>VÅ B Technical University of Ostrava</strong>.
+    </p>
+    <p>
+        It utilizes the open-source GROBID system to extract metadata such as
+        authors, titles, abstracts, and references. Users can upload PDF files, and the application automatically analyzes them
+        and stores the structured results in a database.
+    </p>
+    <p>
+        The application follows a clean three-layer architecture (MVC) and is built using Spring Boot and Java. Extracted data
+        is processed and displayed in a clear format, providing users with a user-friendly way to manage and browse academic content.
+    </p>
+    <img src="/assets/logo_FEI_en.png" alt="fei" style="max-width: 100%; margin-bottom: 20px;" />
+</div>
+
+<!-- Footer -->
+<footer class="footer bg-light mt-5">
+    <div class="container text-center">
+        <p class="text-muted small">&copy; Eliška Kozáčiková 2025. All Rights Reserved.</p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/src/main/resources/templates/citation-timeline.html b/src/main/resources/templates/citation-timeline.html
new file mode 100644
index 0000000..4baff6b
--- /dev/null
+++ b/src/main/resources/templates/citation-timeline.html
@@ -0,0 +1,238 @@
+    <!DOCTYPE html>
+    <html xmlns:th="http://www.thymeleaf.org">
+    <head>
+        <meta charset="UTF-8">
+        <title>Document Statistics</title>
+        <script src="https://cdn.plot.ly/plotly-1.58.5.min.js"></script>
+
+        <link rel="icon" type="image/x-icon" href="/assets/favicon.ico" />
+        <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css" rel="stylesheet" />
+        <link href="https://fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" />
+
+        <link rel="stylesheet" th:href="@{/styles.css}" />
+
+        <style>
+            .navbar-nav .nav-link {
+                font-size: 1.2rem;
+                margin-right: 20px;
+                color: rgb(51, 102, 255);
+            }
+
+            .navbar-nav .nav-link:hover {
+                color: #00134d;
+            }
+
+            .navbar-nav .nav-link.active {
+                color: rgb(51, 102, 255) !important;
+            }
+
+            .navbar-nav .nav-link.active:hover {
+                color: #00134d !important;
+            }
+
+            h2 {
+                color: #ffffff;
+                text-align: center;
+                margin-top: 30px;
+            }
+
+            .chart-container {
+                display: flex;
+                justify-content: space-between;
+                flex-wrap: wrap;
+                gap: 20px;
+                margin-top: 30px;
+            }
+
+            .chart-box {
+                flex: 1;
+                min-width: 400px;
+                height: 500px;
+                background-color: #6780a3;
+                border-radius: 12px;
+                padding: 15px;
+                overflow: hidden;
+            }
+
+            .chart-box:hover {
+                transform: scale(1.01);
+                transition: transform 0.2s ease-in-out;
+            }
+
+            .chart-box .js-plotly-plot {
+                position: absolute;
+                top: 0;
+                left: 0;
+                width: 100% !important;  /* natiahne graf presne na šírku boxu */
+                height: 100% !important; /* natiahne graf presne na výšku boxu */
+            }
+        </style>
+    </head>
+
+    <body>
+    <!-- Navbar -->
+    <nav class="navbar navbar-expand-lg navbar-light bg-light static-top">
+        <div class="container">
+            <a class="navbar-brand" href="/upload">Article Processor</a>
+            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
+                    aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
+                <span class="navbar-toggler-icon"></span>
+            </button>
+            <div class="collapse navbar-collapse justify-content-end" id="navbarNav">
+                <ul class="navbar-nav">
+                    <li class="nav-item">
+                        <a class="nav-link" href="/upload">Upload</a>
+                    </li>
+                    <li class="nav-item">
+                        <a class="nav-link" href="/view">View all</a>
+                    </li>
+                    <li class="nav-item">
+                        <a class="nav-link" href="/statistics">Statistics</a>
+                    </li>
+                    <li class="nav-item">
+                        <a class="nav-link" href="/upload">About project</a>
+                    </li>
+                </ul>
+            </div>
+        </div>
+    </nav>
+
+    <!-- Page Content -->
+    <header class="masthead">
+        <div class="container position-relative">
+            <div class="row justify-content-center">
+                <div class="col-xl-8">
+                    <div class="text-center text-white">
+                        <h1 class="mb-4">📊 Graph of references</h1>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </header>
+
+    <!-- sofistikovaný graf  -->
+    <div class="container mt-5">
+        <div class="chart-container">
+            <div id="referenceTimelineChart" class="chart-box"></div>
+        </div>
+    </div>
+
+
+    <script th:inline="javascript">
+        // Predpokladám, že tieto údaje sú dostupné z backendu cez Thymeleaf.
+        const mainArticle = {
+            title: [[${mainArticleTitle}]],
+            year: [[${mainArticleYear}]],
+            category: [[${mainArticleCategory}]]
+        };
+
+        const references = [[${references}]];
+        const categories = [[${categories}]]; // Kategórie, ktoré dostaneme z databázy
+        console.log("Categories received:", categories);
+
+        // Predstavujeme kategórie ako mapu (indexovanie podľa názvu kategórie)
+        const categoryIndex = categories.reduce((acc, category, index) => {
+            acc[category] = index + 1; // Začneme od 1, aby sme vyhli hodnotám 0
+            return acc;
+        }, {});
+
+        // Funkcia pre získanie Y-ovej hodnoty podľa kategórie
+        function getCategoryY(categoryName) {
+            return categoryIndex[categoryName] || 0; // Ak kategória nie je v zozname, použijeme hodnotu 0
+        }
+
+        // Pripravíme hlavný dokument
+        const mainTrace = {
+            x: [mainArticle.year],
+            y: [getCategoryY(mainArticle.category)],
+            mode: 'markers',
+            type: 'scatter',
+            name: mainArticle.title,
+            hoverinfo: 'text',
+            marker: {
+                size: 14,
+                color: 'gold'
+            },
+            // Po kliknutí na marker sa zobrazí informácia
+            customdata: [{ title: mainArticle.title, year: mainArticle.year, category: mainArticle.category }]
+        };
+
+        // Pripravíme referencie
+        const referenceTrace = {
+            x: references.map(r => r.year),
+            y: references.map(r => getCategoryY(r.category)),
+            mode: 'markers',
+            type: 'scatter',
+            name: 'References',
+            text: references.map(r => r.title),
+            hoverinfo: 'text',
+            marker: {
+                size: 10,
+                color: '#66ccff'
+            },
+            customdata: references.map(r => ({ title: r.title, year: r.year, category: r.category }))
+        };
+
+        // Spojovacie čiary medzi referenciami a hlavným dokumentom
+        const connectionLines = references.map(ref => ({
+            type: 'line',
+            x0: ref.year,
+            y0: getCategoryY(ref.category),
+            x1: mainArticle.year,
+            y1: getCategoryY(mainArticle.category),
+            line: {
+                color: '#ffffff',
+                width: 1.5,
+                dash: 'dot'
+            }
+        }));
+
+        // Konfigurácia grafu
+        const layout = {
+            title: 'Chronological graph of categories & references',
+            paper_bgcolor: '#6780a3',
+            plot_bgcolor: '#6780a3',
+            font: { color: '#ffffff' },
+            margin: {
+                l: 180,  // zväčší ľavý okraj pre čitateľnosť názvov kategórií
+                t: 150    // zväčší horný okraj pre pridanie odsadenia pod nadpis
+            },
+            xaxis: {
+                title: 'Publication Year',
+                showgrid: true,
+                zeroline: false,
+                range: [1950, 2030]
+            },
+            yaxis: {
+                title: 'Category',
+                tickmode: 'array',
+                tickvals: categories.map((_, index) => index + 1),
+                ticktext: categories,
+                showgrid: true,
+                automargin: true,
+                tickfont: {
+                    size: 14
+                }
+            },
+            shapes: connectionLines,
+            legend: {
+                orientation: 'h',  // horizontálne usporiadanie legendy
+                yanchor: 'bottom', // pozícia legendy
+                y: 1.1, // trošku nad grafom
+                xanchor: 'center',
+                x: 0.5
+            }
+        };
+
+        // Vytvorenie grafu bez pridania event listenera na kliknutie
+        Plotly.newPlot('referenceTimelineChart', [mainTrace, referenceTrace], layout, { responsive: true });
+    </script>
+
+
+    <footer class="footer bg-light mt-5">
+        <div class="container text-center">
+            <p class="text-muted small">&copy; Eliška Kozáčiková 2025. All Rights Reserved.</p>
+        </div>
+    </footer>
+    </body>
+    </html>
diff --git a/src/main/resources/templates/view-all.html b/src/main/resources/templates/view-all.html
index cc516be..5150e3b 100644
--- a/src/main/resources/templates/view-all.html
+++ b/src/main/resources/templates/view-all.html
@@ -56,7 +56,7 @@
           <a class="nav-link" href="/statistics">Statistics</a>
         </li>
         <li class="nav-item">
-          <a class="nav-link" href="/upload">About project</a>
+          <a class="nav-link" href="/about">About project</a>
         </li>
       </ul>
     </div>
diff --git a/src/main/resources/templates/view-pdf.html b/src/main/resources/templates/view-pdf.html
index 6779709..a4a7f7e 100644
--- a/src/main/resources/templates/view-pdf.html
+++ b/src/main/resources/templates/view-pdf.html
@@ -12,7 +12,7 @@
 
   <style>
     .navbar {
-      background-color : #dfe2ec !important;
+      background-color: #dfe2ec !important;
     }
     .navbar-nav .nav-link {
       font-size: 1.2rem;
@@ -29,8 +29,15 @@
       color: #00134d !important;
     }
 
-    .italic{
-      font-style:italic;
+    .italic {
+      font-style: italic;
+    }
+
+    /* Center the graph */
+    #graphContainer {
+      display: flex;
+      justify-content: center;
+      margin-top: 20px;
     }
   </style>
 
@@ -68,6 +75,11 @@
 <div class="container mt-4">
   <h2><span class="italic" th:text="${docTitle}"></span></h2>
 
+  <!-- Button to show graph of references -->
+  <div class="mt-4" id="graphContainer" style="display: none;">
+    <button id="showGraphButton" class="btn btn-secondary">SHOW GRAPH OF REFERENCES</button>
+  </div>
+
   <div class="row mt-4">
     <div class="col-md-6">
       <h3>Information about Document</h3>
@@ -80,7 +92,6 @@
       <p><strong>Tags:</strong> <span class="italic" th:text="${tags}"></span></p>
       <p><strong>Notes:</strong> <span class="italic" th:text="${notes}"></span></p>
 
-
       <!-- Form for adding notes and delete document buttons -->
       <div class="d-flex justify-content-between mt-4">
         <!-- Add Notes Button -->
@@ -102,6 +113,16 @@
         </div>
       </div>
 
+      <!-- choose Category -->
+      <form id="categoryForm" class="mt-3">
+        <label for="categorySelect" class="form-label"><strong>Category:</strong></label>
+        <select id="categorySelect" class="form-select" name="category">
+          <option th:each="category : ${categories}" th:value="${category.name}" th:text="${category.name}"
+                  th:selected="${category.name == category}"></option>
+        </select>
+        <button type="button" class="btn btn-primary mt-2" id="saveCategoryButton">Save Category</button>
+      </form>
+
       <h3 class="mt-4">References:</h3>
       <div class="table-responsive">
         <table class="table table-bordered table-striped">
@@ -140,14 +161,48 @@
 
 <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
 
-<script>
+<script th:inline="javascript">
+  // Check if the status is "PDF" and show the button
+  const status = [[${status}]]; // Get the status from the backend
+
+  if (status === "PDF") {
+    document.getElementById("graphContainer").style.display = "block";
+  }
+
+  // Save the category to the document
+  document.getElementById("saveCategoryButton").addEventListener("click", function () {
+    const selectedCategoryName = document.getElementById("categorySelect").value;
+    let documentId = [[${documentId}]];
+
+    // Send the selected category to the backend to update the document
+    fetch(`/api/documents/${documentId}/setCategory`, {
+      method: 'POST',
+      headers: {
+        'Content-Type': 'application/json'
+      },
+      body: JSON.stringify({ categoryName: selectedCategoryName }) // Send the selected category ID
+    })
+            .then(response => {
+              if (response.ok) {
+                alert("Category updated successfully!");
+              } else {
+                alert("Error updating category.");
+              }
+            })
+            .catch(error => {
+              console.error("Error:", error);
+              alert("An error occurred.");
+            });
+  });
+
+  // Handle notes addition
   document.getElementById("addNotesButton").addEventListener("click", function() {
     document.getElementById("notesForm").style.display = "block";
   });
 
   document.getElementById("saveNotesButton").addEventListener("click", function() {
     const notes = document.getElementById("notesTextarea").value;
-    const documentId = [[${documentId}]];
+    const documentId = [[${documentId}]]; // Insert the documentId here (e.g., from Thymeleaf)
 
     fetch(`/api/documents/${documentId}/setNotes`, {
       method: 'POST',
@@ -169,6 +224,16 @@
               alert("Error saving notes!");
             });
   });
+
+  // "SHOW GRAPH OF REFERENCES" button
+  document.getElementById("showGraphButton").addEventListener("click", function() {
+    // Get the document ID from Thymeleaf model
+    const documentId = [[${documentId}]];
+
+    // Redirect to the citation timeline page
+    window.location.href = `/statistics/citation-timeline?documentId=${documentId}`;
+  });
 </script>
+
 </body>
 </html>
-- 
GitLab