From edfc0eeb458527ba95bbb1a3f9229e4eb04d75a1 Mon Sep 17 00:00:00 2001 From: Satvik-Singh192 Date: Sat, 15 Nov 2025 16:16:44 +0530 Subject: [PATCH] feat: implemented page replacement algorithms --- Src/PageReplacementAlgorithm/main.cpp | 184 ++++++++++++++++++++++++++ Src/PageReplacementAlgorithm/main.exe | Bin 0 -> 92002 bytes 2 files changed, 184 insertions(+) create mode 100644 Src/PageReplacementAlgorithm/main.cpp create mode 100644 Src/PageReplacementAlgorithm/main.exe diff --git a/Src/PageReplacementAlgorithm/main.cpp b/Src/PageReplacementAlgorithm/main.cpp new file mode 100644 index 0000000..1ce0a36 --- /dev/null +++ b/Src/PageReplacementAlgorithm/main.cpp @@ -0,0 +1,184 @@ +#include +#include +#include +using namespace std; +void printFrames(const vector& frames) { + cout << "Frames: "; + for (int f : frames) { + if (f == -1) cout << "- "; + else cout << f << " "; + } + cout << endl; +} +void simulateFIFO(int framesCount, const vector& pages) { + vector frames(framesCount, -1); + int pointer = 0, hits = 0, misses = 0; + + cout << "\n===== FIFO Page Replacement =====\n"; + + for (int p : pages) { + bool hit = false; + for (int f : frames) { + if (f == p) { hit = true; break; } + } + + if (hit) { + hits++; + cout << "Page " << p << ": HIT | "; + } else { + misses++; + frames[pointer] = p; + pointer = (pointer + 1) % framesCount; + cout << "Page " << p << ": MISS | "; + } + + printFrames(frames); + } + + cout << "\nTotal Hits : " << hits; + cout << "\nTotal Misses: " << misses; + cout << "\nHit Ratio : " << fixed << setprecision(2) + << (double)hits / pages.size() << endl; +} +void simulateLRU(int framesCount, const vector& pages) { + vector frames(framesCount, -1); + vector lastUsed(framesCount, -1); + int time = 0, hits = 0, misses = 0; + + cout << "\n===== LRU Page Replacement =====\n"; + + for (int p : pages) { + time++; + bool hit = false; + for (int i = 0; i < framesCount; i++) { + if (frames[i] == p) { + hit = true; + lastUsed[i] = time; + break; + } + } + + if (hit) { + hits++; + cout << "Page " << p << ": HIT | "; + } else { + misses++; + + int replaceIndex = -1; + for (int i = 0; i < framesCount; i++) { + if (frames[i] == -1) { + replaceIndex = i; + break; + } + } + if (replaceIndex == -1) { + int minTime = lastUsed[0]; + replaceIndex = 0; + + for (int i = 1; i < framesCount; i++) { + if (lastUsed[i] < minTime) { + minTime = lastUsed[i]; + replaceIndex = i; + } + } + } + + frames[replaceIndex] = p; + lastUsed[replaceIndex] = time; + cout << "Page " << p << ": MISS | "; + } + + printFrames(frames); + } + + cout << "\nTotal Hits : " << hits; + cout << "\nTotal Misses: " << misses; + cout << "\nHit Ratio : " << fixed << setprecision(2) + << (double)hits / pages.size() << endl; +} +void simulateOptimal(int framesCount, const vector& pages) { + vector frames(framesCount, -1); + int hits = 0, misses = 0; + + cout << "\n===== Optimal Page Replacement =====\n"; + + for (int i = 0; i < (int)pages.size(); i++) { + int p = pages[i]; + bool hit = false; + for (int f : frames) { + if (f == p) { hit = true; break; } + } + + if (hit) { + hits++; + cout << "Page " << p << ": HIT | "; + } else { + misses++; + int replaceIdx = -1; + for (int j = 0; j < framesCount; j++) { + if (frames[j] == -1) { + replaceIdx = j; + break; + } + } + if (replaceIdx == -1) { + int farthest = -1; + for (int j = 0; j < framesCount; j++) { + int nextUse = -1; + for (int k = i + 1; k < (int)pages.size(); k++) { + if (pages[k] == frames[j]) { + nextUse = k; + break; + } + } + if (nextUse == -1) { + replaceIdx = j; + break; + } + + if (nextUse > farthest) { + farthest = nextUse; + replaceIdx = j; + } + } + } + + frames[replaceIdx] = p; + cout << "Page " << p << ": MISS | "; + } + + printFrames(frames); + } + + cout << "\nTotal Hits : " << hits; + cout << "\nTotal Misses: " << misses; + cout << "\nHit Ratio : " << fixed << setprecision(2) + << (double)hits / pages.size() << endl; +} + +int main() { + int framesCount, n, choice; + cout << "Enter number of frames: "; + cin >> framesCount; + + cout << "Enter number of page requests: "; + cin >> n; + + vector pages(n); + cout << "Enter the page reference string:\n"; + for (int i = 0; i < n; i++) cin >> pages[i]; + + cout << "\nChoose Algorithm:\n"; + cout << "1. FIFO\n2. LRU\n3. Optimal\n"; + cout << "Enter choice: "; + cin >> choice; + + switch (choice) { + case 1: simulateFIFO(framesCount, pages); break; + case 2: simulateLRU(framesCount, pages); break; + case 3: simulateOptimal(framesCount, pages); break; + default: cout << "Invalid choice!\n"; + } + + return 0; +} diff --git a/Src/PageReplacementAlgorithm/main.exe b/Src/PageReplacementAlgorithm/main.exe new file mode 100644 index 0000000000000000000000000000000000000000..6a0ec7d0022e0e742b98ea20155070effc35c780 GIT binary patch literal 92002 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

ip$ zszv0Km6n&*Xdf|(3d`_?HeXHYMo*2etg_NutzB*uA~0%hEv$keRqhfuVv^jp!Cm1l zDJ?<=)~+z1Wkp^Qu)0C4azoql%Hq?M(ylb9r4=>qjqWO6aS3X; zS?g45R~hA%-Wp%w##(KmK`Pu-Sz1hu!n$T*adDNl$SAGGx9|{BwPh4nEAm(nUOho^ z0d}<1n8n$mRehCS^fc=BMJ!ly42)>A>Y6I}1WmNqC}Pg4^4(lfd20n?)k~&SZ-93y zt2b!Z8aQ-x=6yH$XcNW}#tXi#^vO`H#(1jKBDYl+dP=kvOv^J0Dlr+9maqXDjbB}% ztuV@j!%Hv?xV3zP?%wRBp{{U4wYJirk{>*!EJ#X9;rdnPqUyM!)#jp-k}9{`s}&ej z_vRX3fpbN{YEldXZbePCcD+%&5wTvyXR2x+AL~nD)*1sr#M%nkj%Aeycm!%`IeN$1 ziBO0H^eG8jXNGwTi*80li1;E;Ddc)HvgS6gyUbk;#fV?Ec7wT?baDDN+~)IcuB_5- zGzzJsRY7S?S`>HHzM4wkCiF$uB#@G-%5nxOObX)jXf;NoYHfpo;4`DCBgM_pT9JXI zHiZr_#21e!PKuDTw&pg9S!efFdumHIXe9=jM^^rZ+b}OszbxGhM{P99N$$qN8V?+j zM>BS{<}nvm7Zui!yF_WJxl~lm=T&bq7s{%l^k#FZs9M0QmYEA>RZ&`QlyZZX=M|Kc z7y61k_@;8TR*_how{lfnab;rh%H?@+#a^R$Q(kciMy%pmHnH$gzsl#q!0Ij5ZZU8a z^a!1zBFv<2AEva5;!RqWQC_%dGgO$UUsO*5Gr4Rck7QM^r!AWGW#|WM8}0 zQo{X-(DQlSRpr`d69A5iU)|kiDkQ#a+@>y8>MlZHZLt8jJqF@-6N30Bu(-nlNMv!R z1yOTr{EYEYqg*T@ZY{0x_|S-&&nPM^yS4DPYAkNC^7di9iIrr*YOT%y@DZFQB{Z+* zHwvmfr6o1XwXFtai<_pb%{2%EAD2~8tkoOkn9<5B(E-JvO;fVgU=)`WV#45^Qwtd6 zxW$9-)~eDPx7KJBGOv{{_iZXI^kH;sGD<2cY4-6JmR1!aFtui*M6Sr`wu7&&gVsX6 zmP03?brxH(-xUWEhTOuY80~IriKi4*vFdCwiiFkVV{My3=8;@hDHfvDTB}h;y=rrj zXX6H~%}j*ZPAz26$XGsX(sZbO%qUTDO+zYHT2vf1ipAXnyk1<&J3H2PxNWK_ycwYYt(5vzLK}KL| z*y$Et{M-k>i+0$3&?kZ+NK11}mw9!!j{ElvUkTk^FJFbb_H;ar3bh0}b%U0vX#6HT z&7lbL{#;iS(;dA-awgdZMz98PCOs(gg(BE+xYn^0xAqx-hOaKhmdGp(YO@))tP~y4 zr!AXH8znwpF@=nvIf=%q+=9&PPvZ{XrcI;j_s%ZF=Zy5Of8e`r)0X0Lmmr1&5%B-M z126MAE;`RPFDrfSrE?d}J>L#dwj3=z^RijkW?87snsvjhbnFhLXV}s+Z&)yW)`E=E z^Vck}t+ijjV44kI2FbA5O3$Z^Js-8!EJ#~B>-q)fm7ag&#p^ECv}yU;M!?evKC|@v zv~27ioo8E=dH$?E+pJI7rlntT=@s<#kIXDcDg~Dr^R;VGZ{~%>Y!-Mi>Z}D&YxV-I z^!#N|>)i2|^T1}XvSTkd7pcu=`_tSxl+aEfPGqiNo5MHbIt}@(v?eNHAK2fLdxhzz zG~1O|Hr?jzxVfpxxxVbmEAivfHd`^U#2a57NzOa{pHZSikP|24pHWR>@1)BH%7y3y zpmWE6lLu%&m%gKj_UhDUPtWWZ-lpdQbjT)_&jSkQIvz+XoSWU1-a6MYSU5NS9Z+85 z+~@x!59H=9<9~buei?s_W?67W!K!8TJDc!6L~gZKwdM|F==BS{3*v9We!Y)=P-RvA z9r*3IrTpho?qFN_KK5f>chIgjesu*ubF`EZR^;8m`D^s(ps-rc%gtZ;Kgmu1&+7UY zY}!deN&D{zr9^o=!t!$K5wFXV$Llg9UYEti>oRM+E)(&ZAVf>Jrp^PN@!dwe{zQ6E zFT!upHEnHKN_BG#+N*=V2}f_nVfBVH zUE^=M@n^uCf)}Rf;T(I`&na|uH%=`1L@lCh$4SqS4NMoV=&)%z?i+ZXf6h=B{m5aJ z$T0MOD~tor$;9zI(yMV&@iazz6`z9;l#Vo=J>oQ~(y}JE1#cTR?BMGYT=QDTkSoDS z`j};5d5QzIFbIYtwG2bGI3I4UA$=6(9SoCbmof7F8RZUIT_a7VA;{R>*EBr^#sf@$ z3QQ}hmICu>VER&Eo&zS70&@r$$0VL7yT*VSNWmu)&D5WQ&k|tjQt;UTj5h^lGcbcG zFd<;NQedLMxKd!A0mhjE^G#s-QrP};V4gtmSo;pX!YPh1V1`rhxfnb~QeX;!8B2i) z0#la)vm2PFF_c(!E@T>u7iYD%a4Txpy;L4tpOsl<5}>bgGS_Zt!?XF?8=2tW(B)?QDB(ujPg1tI!v&7 z6+1oR_yuX06vF|^^9)0l&P4<8kx}xndLAYx9MbbT=-l((1O&V)Jl};9?s?sc5uPW1 zbI&`Gn{C47hK<%Cr=;6>q?tgtpw`hb>2Qp-bqN0lD#XD(FWV~uC-e5AA3@En53#wB zBPE=E9f8N{yto3~=;DffSHQcS{eptEb=nkuE{RoqjJb~hoDY5fpxVbViSw5Vb?qbI zl7xD&klvJ1*QwX05OqW1nf|lL_Qx^eEu4kkraHsrZ9liaR%6ef{Rx8ide82V)kZr3uOe$2g1 z>hlqWN#yf4iqCRjXq{k<`Ohj$4KPk%c(0_9#H#Z)U|cCM-vs9Uq_RGzWYK>+3eQTW z&*v3}hO0lI>sfVvhGA#~pv-yLTCrmGDLy&iqvM>+F0yGD0~&9yYgJv!NIy3yOroE^ zqVNv@Q>XaQUY~JDK6@1=kpp&^l{uwbUoMf9e$`ky0Wmg;M zR{y-EFo}F#Q+!SV)2G@C4v#yee=fpI#W9I|4l8s%-9jyw{zKJO?#1Hd?yKFR0P6AF{aXH@aI3{yl%=~J9kAFskB z^7*ae^9f-3)ckdwqEkkC>M4auvrl0X`J7gKjsoLSe5#W2nS*BJm_$Ct?#nu0#@5Psru_=5 ze|9NMBA@9Be1I^jy|R>^l#%WAFA9^$XO`mg8(``bpKFuqvjprpCXr8;;?qDXsCdpL zHPj*X`JBQe@;P7e83rb#+WltmP({ivn?qs}`CO#HOMn?reg?xNeCiY?kq`X~XMTJV z7-tIq3@J<^pDPrf-vFbj@fnUvqR-{$NlYT2s}vs(FuJm<2NkU2^F0ca$mbfx=ZnD9 zA^eDtZliI@x=wgcVG{XVr}%7`hnQD(-IbJ2NMREBEK_`*0A@t-SqwhLA>-#e3X{l( zz7)WZlfXEXT^m4DMJj$SJYQlG`K(spHNXtu*ZYXTe!5H5)>N)uVG{YQReb&mm_cRN zMM6uSNV{HCm_$A|Dn28?)G2+)E?L{iO}jv168RJfFo}FPT<%ox z`wJF77)5?y;w5(~DC|j7V+1r{a;KsTBrI){VhDW~^yx>6TL@sVfQvh%7j^=(8+2Md zrQ0yUB#GyTf!U9e$@n}0OkWB<`+*rq!RH7tPp9A$1Li;qK6q<`={%WT*8($`g3rys zypTel7GRE~;1d3=aay6 zrQkCF3_ZV@%&uWz9!%DF2yIgK7R|$ z!zuU-15=iQk9`4tg*yeGHNb36!KW3N{uF$^08B#)KK}#^jZu^NIpa#SMG8KvfjN+Z z&t1UWn}W})z#K}!XYN&Kixhm;12de0PYW=QD?Z8N=P6*0rQmY}n5Pw=9npX7Eu3k;1>lks^Im{%2_);XGjB9I|jOvvAI~aDLjt znWE0@4O*+4D643D!R!tCj~Qm2pRjQ5w{Whra6W{I(#$!>!ufFvXNm@shWVQY1Lk>{s?<-*?6;C+Fr-}L;55L!KJiaN1nA;!p=6;khb?B&pc0$ zzLFfIvjeV00$E8`7eZ%Rb@Le8fnSHJ_lFzKPG=|NaGjI1g?RI`9~iDPGD!~7xo!$N z4=9}*TIfHqZ#PtCzt&15?&rjQ!G&7eVwOc4*%mI8aJwuJ)fW9In#e90hvTq~$05bD z`H*o);}4HRTAfnMnGf>Mz!d!Rvhol8qA&fntl=POduR%A=z{pE+iq=l(w=n2H+NIU z;c=xieq6e}BV=eyzg66cAJT^Hc;ZFuXtV+49^9iT3dwo}BNDeOvE2`n8SHo+7-}rW zC&~8|2=q2Ev$4x*9mnWijvxOH%;KaNUT*dCdnlj?Fpe{cu>n+@sK4jJWs)n6UWre{ zsEjZRw`|!$(KjKcsH$e+=CZ;*>D6T8565iTKN&{81B{U1ex}jEPHLzlm+>hsRBbw; ztl}-Im6KuQ8{?40`r$dN{!jlISGa&Q@f8%!H4sd54Yj>|BW^$9#}?2 znn4XsWo%J?UV`XIzK(K%Ckk}2j5O1a(8sw^_MLt_ts!NT+AhAP;6gd~kF{UOwbo?* zAqA=3`=+4t)k}tNn{Nx zqM(FuNo*#%Z+ewDPlB;V!fs63P9c*ga^#;%B#fX6(=f@Mf_!Hngf7W-zJ0>pP2W+O z243kl4_6}YQ}%B9z8UY`gu#nf2?s@;6YouOSrhl}I{@IbOx!<|i0k1e;KMQSHa!0x zD9$UBwO0iRW5=9p@c&?wVtBdqJm*7}K8^x&|2Y%SD-9=Ex9nD4#bBOrNUy#D3%FMa zLv3I_$g5pb@M@#-YGj2Q!v0L9I{Q1 z!!F*Yguz9^LH^P44jq+DHV^(a0KBJQfsg;l5_kK~IIe|%bg46=l!8M0w9E=dxdRm1 z6E-M!5oJ-b-n2`p`VcU`ONzNqVfF#@JbI>eq`hBZ27$Q+Ct;F}w6X=cKIDx*qXic- z&E?0LM5gkFtw2^+scgahss){@OlD*Yj==)nf`qZQG__!83N82~aH<8jA{v>+Q{Rx!vc0%%&5Wn4q_w<>l27X>6J-^x zR|Q4f57KDNN6|+A-GK!4aQR{mr_nf_Zleq9I_jXnU|9kTz2Rm(h6M(LBrtd2lg0w$ zkS(Z7OKo{Zp~(HET9DXLPoe`~%z!>2mQVaRDKN7bhGr}4DDWqNaWKrii7eRlH1tS1 z=v`ob7hvWi@69t1ExawPzrZ8?Q>XmHSeic0&Of?|hrFP6C)0Sl-wQV-Z+B{K-tN!H zs-~2DNS@<9)RD7Jp%fbw5j-|L$W6y-KB&E@m3Vv2v@$^%^(OjpA4(>hLFg9>xS#oc zg4jCBMKv{ho|&J)FyW9ZhdyXZ)+AejP!-bII|ZFDS31+LnyLSA$8?te?vCr6ID>G- ztnpKbf`m8}s{-zK=li?er`a+ zQ9n{E>XkGan<)9&5N)EYT4Subh4k^WlHP2QUT2Z6Tcj5o(#7hXev@dT)q8U*{^Kqz zG^}WhGZ)rbW7LNEb1Gc#@cx{oQCm+27+@S@=+wRwV1o;x0gqqRB8*S#OB` z{sLk*Rev{h79&7>WD46?!($VTb+TW4h<4>WWP45AmsfgaD^HABT`Xh6ri)%~Bo@2Q zsK*_}O}9Df4j_I^lzjTerHQg?o~6I%$Y?nu>BlV62QAXOEYfw0bmv(~AF)WM^_a=h zeEKGriLxr!BE8_Oq#w6PAGS#Evq&$nNOzr;^q56D?a!Mm&40ooy~-lpb5_z%TBOrX zsablzMS7h@y7#Q4(|bfFSu0}}>H96xn=R5epOy4e7U^Ra=>rz&k65JFot5-)i}Z1e zbozFl$v>-}vPf?}E9oCtq|?TZNml-#Mfw*l(nDt@oi-{>vQ}nVq#v#U?_TBK)Nq#w0N|G7o_!)GOZwne&bkv?LP{%b?JnBU!~HPQSo z*EYs%CD%4_Gn!c2^hqm{ty})WYny&d)hy~JxtB3?mTQ|horUfGNo<#EfDh5GeEN-@XRbw!R*`=gEA*1Dt zq|3O?e_j^2DQQSzHD(laeF-!@6R%a}K;kTD-;sfhW0X~l;S^N*tKn5C1%yrHv< zmN=b7%+vR_ChG4pHax8qp=jn+fZoT3T;d!g= z@%|A}w{H^LWz>C$cI9uD?KMf%Jt13pV$AACWo+2+a~KJS#jZ1ox;n{OM%2nKsgI=O zyQCG8vg*5*sQbnwo|jQ)@R3m$Crd=#;D;D>4e(^Ds55kyV_lriBI-<)%@*l77U?foq#r#i>FX@gLl)^yi*))`as1Kq6cO|P zK1s~W{%*9O?C)`{ELw0xTJa&QZM;+H?}pB@zsKn;Y)`}EwNz`H57Dmt0@+>@_vMwH zvXv*stai!Rm}HhwcAZg=%aEL9UtZ~v`bbKCrnEv*Ry|^gI>#iQmr-Z%kx>^XOGMq+ zhZuG1rVw?8&NAxabQV!}`6RZ>S>{8uE8ij8YvPDn>6NWKF=jRW;yfE$Y*)im=0lD) zQDr;*TV{O05^rkM$3g#oF}`bt5rn;qrSAUD%p0VGc@VNb_auzO8QBQbf-o7 zm_>TCMLNAENZvJ`<4?u*m_>SyMS9F4oxaX(wmtK#q#w6P*DcaVEYhni(j8|deZ(R? z+amp_MS8wPdiGgKKW35cut*=aNMC4?uAi0kqZa9z7U@SU(q~(w=bV-FH!adNi}XQ@ z^f3%RP=F#_^f>2PNguXIAD7P}W$(^EV3GcFi}ZrClKzH8I=w?K?Be53{(wdL>lW#* zvyy(qB0Xl2zTYDKWs7vrSxG-+kv?LPPUEx58>^nPNcWzV^g)aCqZa8;SfoF0k-qt? zq`zvBK5UUrGpyP6dkyJgmGY#Tsjc5QkSjEUk6fX}$r631PFew(iHCe=X%Gc$_DqIJ zoKKTscs%FjfDf~4l08pDXSqU)(^=TQZxY+(nD8Oml~2y$cG0K#kXE?l$TrCe?UalS z_6~3YA7T3sl@w2YQcLz+rtznf#E6?G{ zR-WRm*D)wVUgw_A24`JzX6h5AKv6_&XZL)BA=BJD}8wwje&OJLrvG z{;Q~)FG=L(X?{LavpvcuJr+f{RVH2Mpfl`N9 zrS{^OpM&B;=o*yYf^xuw(Ut&?V+KxMD+`p6N#_-y=wM>#TtygmpF)@Few)7qzqo?` zX`-y~(U-2vYcwxp89F~q(#2YWYxp=Qa*X1XFB1lb(WVDL={H5xABbY|;dzi;Z1P4v zDCTG>1EtHvXFDkJ?NFf)C~}p{Df_6F$s4Z_#w4Bg;a)K5{6|olO&B}ub^$|NIp<42 zX*TI|Jt*=Hkz-0g;lIBsTgL~Ad;-NWy`b=&K#6$@ltEK_eI1lnO&Y!dirj_ZeBJ^@ z?vHWG+~we7^6KTF445cRP&S*aaDgK45ILXQLE*n{Dm82YrOV`vE>QTd<4VjILFt1Z z5oW?;uYlq*jp089g@!&T0E~ZYTNne0*2!u~K7RxzWb(#B%%)~5@?S^rc)OkiMF-K)@E<^tPutV9dePtc z6Cdg4UlJd1HuO0OirLTq2};N`Tg}YJ>}k^HB2dip#Y#{#teT8SxD%8*QzUc}h8@ty zhM(19XhA|!-4Y0dkjmXB?w>x?8dP5O@t?R03<3woiq?4s82+trX(|2BQo|ml? z2a3x?SqF-a+J@&npzz;_mY%NyWk6xtgH5ge7T9Id=T2ZW6J;AHeX15R+HO!ns&(2U z;nw#|Q{{%_{Bp7XKTMg+ZA1(kzH}!&CP>z^t z-2sa8LW*LkPZua7CO*%AGG@}}0M#;KUI(SlMEN-=@@+A0R~EkN$A7h6%GwNy{O%IR z1VE8bCpjeyO24VyKLrW}va#0MOB7Sg9|FZ|YMoz!BKHP4=RboY->c-5%DYb8z>YlRL(I$Q0OrDJOGN>V|$2V@@hXQ^t8(ue_jVgH+l7^pd3+_ zvehzr+>f$(~cl#52ZX+<8 zO@8hGMOPY<4)=p%j@~a2#wjgj_h{g3^c1S~O7aY9=j8iqbAO6pvb3P z9J3dc5tFPJLD5aJhCnfUYy=ef6h_=T)T0Ge>%cheKY(dA@v&i{IdY(D`-?&0(J`4uQ~XPZ;r2W8kK>%tq+Pr(o3gcWX33?G85HG$G)s&zjo z{DAGYY-Fh|&Bteeaha_E#XQ=)NPJAQ=MO;1Hd*?wpd3)G+!zkfc%%)RFuwyvzInwh zUEl%+I37`XxXKMQ`x?Xa4dC2{z}Ai?pFiwxZ3?u@%V29`o6P&SZVd;v%d3`PtEyz; zfCi1n_~?3@zt!IqXz+(ZTC>01S6?4#3)BBJ2(~uuz;pQR{+3{a7oxWXB7v~S-`da; z2y3?nTg&lJ4{$eL9r1@F9U(2Z1>BI`q48hVT$mdUG=?JKT*(Roe36}@00f#U`h1ZD ziiH9Gr$BH!eoU2%@?lTlZmX085Wo>Qf$fbNx-_+RpmWp**w1Ci-&C}qgz;@H4Zw!f zZ!cPKe6mTDAr|`0fK2Q_I3(D}7v;&QehXF%$QF7-oBW>$mLk5tYGq%KwStA(u(OqIY0>)}KDxcz z>POqvHwWtP#?L*o!1Gb$St`o#3r1QZ?G53!h_A6NTyJeq6{j2saZ|yyceG7}E8T|P zu)*IR&>A{IEx~$3kuMZNM?rs3zP{(4d(cJP9$!gSVY%D4!M(Ax0&B2_KseA8Y)3!g z9oN^`3K;%_iO) ztF5ZaQcb8jL6K3{Uom0b35sOhit0!~5YE|(ILOBjIySnkN;t`3Qv^!B)sdBr!OlPf z^iuqp6OxdPI?MB*0)APtKG+^?YYnmrR@(CAA;f5;ghuN2s++4LtG4533fsb^!D@eL z(CxPLF|>AmeOpH)X#s93T1x9-_44{=f7llZ`-748(t5X>xfFg0*8AGfD+2y)r8T}9 zr_WuziW~yHg4;S;&}&LcODcoO^Z;nN1eI0QPJ~%0F_jpsu@jsWmpE>~rWN>ge$_=P ztbSOz6@9eTy`5Tbl2YmZB$yR&&P4S^nW}ARhN9)}omDrJF*1M>+Q|f%m{0L?u7X7X zE10-my!n>8s&L}^hVho#DQypSx@mYqr%AAx6)2h3R>`M9ZX%bd>mjHq5b@Q7jL1+ykyQ1Gs>I1kuqJOggfs*i z{T(e4lR-(XnHVi4U@*lxtaPWl>gF0>bsqhJQ!=WoVeQ(>mm_+&`8(M<1&k&P+a$O+ zt`m4wIga8Loi&dC8P!NFX*FD1kLeD}!FF_NEE45dHi4j|6;jJt!J1GE9s##EC`QZ) zq$Gh$8P$=ze4nqQl?DwS*$q6@TYdgg@C^ptXw~I3d82)o`>L=`sLAuWSreaSRYP`x zuNXHd;kKO+<=)N&F~-U0My)(7Xw4eSaF$B{pVqFnsc{?$^M`H%%&ax(aRR`?xDR3v4T^YcDoZHLG}Z?|=g~w=NIW z53x}$%wTM1p--Af?4Bpbi%Lb~9b!yRp$x)b@$_}=ChzHSGj z5LK3)VzkvwK~g&a3)&I0_gTzls zJxH_smUb*8m5bmvX<~e?-H*>?9)w{wHQ^~_G7z3Zrh})D%tiR|$!0$~myqxTay>ka zTw=o0$n_8!KoHF>4CF3UGh_P;{bUY9sij-}*f?(y4D2<@sKgQ6A5=v!gPjH_$)RJv!W;AD<9UkB0A)rz0!R&qR9UY48a7G?6}$XeK?0`DDOe72BME&IRC?*jo8$s*4)x6i|vRYUs2dkUn5k zz$+6LcMe@WQyo8OFQ*_65UeH5An3c7ZeQ}cq%gn1-2!T{6!YnTV7lW61)S1r%w_}v zb_b3Oct#T)NDl<;#t#xs$@GCxOg75MKAxtM3j@BH>>g0h$WD!;lVk|_95!%2$8_#M zgakQc7^cVV=abId{D7|oPwW2GT9&tL!6YzQD{6oe5T_Jik^3E?u3#N z;q*U}laRR&>DVQ1yGaRUeE7)yJmZXmh%nD99w9s+)$wTuVRO)+fD<;|QOOFG9T<%s zBYa2(iQT=Iv`{9a2M7l+7@53K9tR8&E|}KONn+?EejdeOjwxBkNeZ!>jHKi4A@%Ix zU6LB%>PF-?M$zuaP}ym8BY&uQILV>2-QRQ6Ov4mLDCO*Y!vVsfHlU+5vaR(|-ZrnB3t8#A5EZc+FVq}XX_Q1sG!xb7}6 zq3UUgq7dR1jBr1jYJ&?W2H!$QE1sRq@T3k;{#*RNd7^Jh(=YSd)Z6lYSsmePFg7QKP_hYpB8^Uefj+P^s}3_I&9aQ&7h}I4tCj2fT|-(dgiw% z==p4}|0J=IWcUgkBwXLaTk!8w)vT)J=`W_ly4fbJ1WCRqfO|G%r7Tm(6%wzTHC4mW zQ#7vR1XMua=K+km0X)$|i;u9dQ!@(+r64Rp4Z`h`w%-m*y_G1%lxc z(%=uM^8G1yGOopM=GrZP%}y@sB)~FLq5Q| zdfwV~*lNY~0}(+9D3!{hFq8~|As$=UZdsYSB?9y1YxdHy#{^kGHjcIrH?K=uC zpUq3vP<5PbvkJtu@~-&K@tkH`onb>nRp(Oim5p>*I$pNnuK!mJ_br$I-Px*3Z|tN( zJW`vlR}VE*grb3kMF{c;o?0DEt%Ekwh41xv*6d7zU-YQ3Zrb7o>Y+>HcCB73vUmF7 z`EA>azgO{myKG?@*raxty!Z*iEcvMQs==jik;^ko?kXiiJc3jTI@?;{a^w^5LgbQ+|5g5hrxX}5re(KF zgli~}SCu)-DON!L9^wvNgb?$Nbwv0~u4=FM=}PIU1Km1s`@Ed31gMf0*0FF=zI&02 z<8JR^0Z!aO3nBWCm9v+p@QjB|qTc_*N(W>q*Nwrx_*I>+z??mR&cpso1Vcp@L z&2CrvU);xB)E}(n#v!@QZC?q$cq6iJh{RHm3 z!T$iaRt5JzQYP1k6mNhop_uN2U4nbK>{>Zy@6Osa9XeL&BJa*!Dcic*daxX z&MxPQvTQ#F+dZzPo!A&JjQt@{fc)H_Lrq8JgI>u2lH!LqxK1|3Um;>?xr_Rd<|7A; zpovS<_Cx||?_IT0W{2+=G5?+k={Uk*cez589vri?Fe;fCF?0b7ki*&SpC5^w*!W&2 z|8Ota(V6G6D)bIGR49f}NCrF6IH!m6!y(YXKx@$q!h=S`ahk}A?3j;tEO`VZ_KXm1 zX6$9U(F+5*r4<-9h&}8O0H_{~Axsv87N||4WfyEg2WK|WaYslBOUFwG^5TT#G##vGh(G?EVnS71S$6u{fRITI7jaY%g4j1cvPIy zPUQmkd#4<5gN%!m2valilkJ5T7DvWpl$txSr@BP%&T&&l93fw=H#Vb4JOnKucyf2` zdXg?M%w)&d8@fi0tW~%8r%?5CwgLn^+n1!M=DI17c&lQcuIZL$Cq`Z3;6wK==`JHB z0myMb<}%*r#+(3<<#=khxXnt5*JvMg`+DE>f+I*T0E1O(ss#%GRgTHMUxcAKxAnzg zQO4$cyn8#Yi(qrbyAn&uRP68w!5vjyuunuf2TIiu-!Zn%>s&~ihNAn>Sq9TFoIB~w zNWeO2!|~n;$?ZQvSve&$HHj#?D>%9WEbt|MnhD;95(@nC$2k&$?j3rtkI{|5s> Bba(&& literal 0 HcmV?d00001