From 69709aff4d4f8f0d8f5e4e98fa0a6406e5b3628d Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Wed, 1 Apr 2026 15:41:53 -0400 Subject: [PATCH 01/57] Add MemoryCore Class Skeleton Introduce MemoryCore skeleton, implementation details remain incomplete and will be implemented in a follow-up. --- .../chevron/process/memory/memory_core.hpp | 36 +++++++++++++++++++ src/process/CMakeLists.txt | 3 ++ src/process/memory/memory_core.cpp | 21 +++++++++++ tests/cli/dev_exe.cpp | 1 + 4 files changed, 61 insertions(+) create mode 100644 include/chevron/process/memory/memory_core.hpp create mode 100644 src/process/memory/memory_core.cpp diff --git a/include/chevron/process/memory/memory_core.hpp b/include/chevron/process/memory/memory_core.hpp new file mode 100644 index 0000000..c4d72b7 --- /dev/null +++ b/include/chevron/process/memory/memory_core.hpp @@ -0,0 +1,36 @@ + +// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. +// Released under the terms of the GNU Affero General Public License version 3 + +// [ISJTB-CXX-XL20260108-000003] + +/*! + * @file memory_core.hpp + * + * @brief + * // TODO: INCOMPLETE DOC STRING!!! + * + * @author + * Jamon T. Bailey + * + * @date 04-01-2026 + */ + +#ifndef CHEVRON_LIB_PROCESS_MEMORY_AUTHORITY_H_ +#define CHEVRON_LIB_PROCESS_MEMORY_AUTHORITY_H_ + +namespace chevron::process +{ + +/*! + * @brief + * Process memory authority. + * + * @details + * N/a + */ +class MemoryCore { /* TODO : INCOMPLETE IMPLEMENTATION!!! */ }; + +} + +#endif // CHEVRON_LIB_PROCESS_MEMORY_AUTHORITY_H_ diff --git a/src/process/CMakeLists.txt b/src/process/CMakeLists.txt index 83c1a62..2a7b597 100644 --- a/src/process/CMakeLists.txt +++ b/src/process/CMakeLists.txt @@ -6,6 +6,9 @@ target_sources( ${CHEVRON_MAIN_BINARY_NAME} + PUBLIC + "${CMAKE_CURRENT_SOURCE_DIR}/memory/memory_core.cpp" + PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/thread/thread_engine.cpp" ) diff --git a/src/process/memory/memory_core.cpp b/src/process/memory/memory_core.cpp new file mode 100644 index 0000000..f86c654 --- /dev/null +++ b/src/process/memory/memory_core.cpp @@ -0,0 +1,21 @@ + +// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. +// Released under the terms of the GNU Affero General Public License version 3 + +// [ISJTB-CXX-XL20260108-000003] + +/*! + * @file memory_core.cpp + * + * @brief + * // TODO: INCOMPLETE DOC STRING!!! + * + * @author + * Jamon T. Bailey + * + * @date 04-01-2026 + */ + +#include "chevron/process/memory/memory_core.hpp" + +// TODO : INCOMPLETE IMPLEMENTATION!!! diff --git a/tests/cli/dev_exe.cpp b/tests/cli/dev_exe.cpp index 8463f7a..18905dd 100644 --- a/tests/cli/dev_exe.cpp +++ b/tests/cli/dev_exe.cpp @@ -4,6 +4,7 @@ #include "chevron/function.hpp" #include "chevron/process/thread/thread_engine.hpp" +#include "chevron/process/memory/memory_core.hpp" int main(int argc, char* argv[]) { From fea504982fdaa628f4e19df81199cfe0e3112bf1 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Wed, 15 Apr 2026 18:05:32 -0400 Subject: [PATCH 02/57] Chevron Research Resources Resources being studied for the implementation of a process-wide fixed-size memory block pool. --- ...llocator for Multithreaded Applications.pdf | Bin 0 -> 451503 bytes ...or to Many CPUs and Arbitrary Resources.pdf | Bin 0 -> 134454 bytes ... Object-Caching Kernel Memory Allocator.pdf | Bin 0 -> 55883 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/prj/resources/Hoard - A Scalable Memory Allocator for Multithreaded Applications.pdf create mode 100644 docs/prj/resources/Magazines and Vmem - Extending the Slab Allocator to Many CPUs and Arbitrary Resources.pdf create mode 100644 docs/prj/resources/The Slab Allocator - An Object-Caching Kernel Memory Allocator.pdf diff --git a/docs/prj/resources/Hoard - A Scalable Memory Allocator for Multithreaded Applications.pdf b/docs/prj/resources/Hoard - A Scalable Memory Allocator for Multithreaded Applications.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6fe5cd1f866f111458ae7509630863b7a8056d64 GIT binary patch literal 451503 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

}N;nT##h-DY1TL0F zy5b)y6d7nlg9Fn1UbRWf657ktRxFQ@xeKvnobJ15R=LYR-kf% zl_4j1iQoh)|1l@vGEJZqa89UZl%j;(%!!K!UZ8Sp{$oy*z&)A-CsZp+ zQ6c>NeJpr^$_Z8pIl)T=Cs_H9IRRI(g4=WPKA{>>d2se3(IHME6Y5u6Hy+kPPUl~nse5;ZuSy_Q3>gD{OjiIQS3k$F>6wy`SA6RvRW=aaO z^72ZkK{WMnc6RdhpqfRv%>I1>z_d}9&>)5;OCl?Xf-_AKdu!yoZ-=v&sJn}(2Z$0l zdwaWkc_Xwy@2V=1fN7_I)=n%^KD)e}9h`iey?sPiiPG@23b3jQB7LiXvO>Hm0J_25 z!OMx@*BbcBz(25K_)2(6)1x%qA7|b%=-quG~!p_W!$|Wg9(i|9;oG~$Rptd zP=gv`d7u=*Z`3X-0QUs^#!VD*%j;eiXeN{?Kz|}-Tv;nCBd#-4n5yy!FQAMoCK8y> zNExaJGI()NLgy)kqKf=R=ZriEK!D$<1S^1P3!O1V5Su_QNVmq{6nB|`m;fySJt#6o z88LGR90uvzqzbJ6Q5uTC#32~49tQ2PJ_bXKwa1FUH-_z%De`E0WEcPk%D^xo z?Xgh-?eTF@1Otp=fCELL5I9s7$!H^F@Bj`~U{Vm4u(33yjwTuP5P+S*Tmmq)(Dz6B z0xWCLcOqj$4qzz293WVr3;-A?1&ZJrdE{-02f%m5--n_=La%-X@` zASjq%A~34xIN}cwT7;~EU=;dJ!~=Ok&g4m$Sb!cuCX_swQ3xzrL~&pe4tf{EfE5+c zfyC;8P#_JENdVf*gAfOJceIGsW3xgT#R}@tBHoW!JrD|{Ju-2SdSJnk_SifE?|{uD zj0mX5iWm{Jy)q^c$Y3DtRmdo7Xc4K$bh)B3-UGO5ClT+jK*B@;tl^ONS0Ew5B0wL` zS1>H7_EAtpMG}!f?13T$^1{`A=sw}c9aw|K61=V2)%nL+z9*EZyaLhp zR4D8jkVmL$@pcGBLXRp?prVATR32Cle1r%n{29Onq40JnE~rlxRM6f5P*9;NC=!;8 zLO@~9XrZunC@x&5k`=)e2ND3FaHUFCB%wSy7P~ zM=BKd3@9*M0mF7EE_}4eO2D3CxbP7r12qNvOCCbu&j2n6g||a-DPsDTtOWZDs$8-X zwZDLcM@Jbx1GsR-4BMf&aNP?gDsD8P`UM(>@B-u^6#k5=q+vS*7u3UKWoSI1Dh3n@ znINF>XHr{Efd&bv{@`RTQ997Iy zMolYH0#LL%8x0LApi>dN2o@=%(PV_ShOY{hH3@xyjwbuy(XS7-Ezk0*Xouw@`RH6bh3i5Y55*1}kEr zH>@7_=MixOgrLd6qz~`{tr7`qLkof-{TU0D5WXF zq4~q+Ah3OKEkeTD(1KuS5q_vp1StX$4J~}l0_H5v4}1XJUC0kyvmnzR5Q8QZ(*iWM zn1r>V1)*6%5m>0C@Wl__4&@s61WCYmMaK-fh9uzR;WABFVodP>a?o5uO$2y?)*5d| z3xuJ@sNpLq8glqjik2SKYhbmHjTwBPMD-4!-A9xkAO?*-rV9Z-L_OAq76e0!@tp2XN!11^|c7E08zg*E&-;EX?zPrMWP)|cnvsOgdZvvDk*Gn2b3@& zAGmJE7M6(107xQA8p;phRgi%CN9wVrK+hxA08oKm2i}Gjgt}U#LQx4pL^QO}6#)rs zLZTyun;H<)z-5{6O2CLCyg-)(DWbeUuLUS;yk7_q4C&8MR6<~m0~%m?K&6E&G(mI{ zb}&|?uHy->1~Y$v8+_$S*hA1a(DNZ-?P!58#3(-m6hVwYMWu&ZR{(IS56i_uGCNSVAg+;3kDkf_|E*`(6hxS2V1N?zn@H zBq9r<=pR~N4Fs-GZw&fsSQ+|iM2ZpSVUTEiHLzAEJT(xvr18|y5@AO04OGHY15D6( zY9RRZlc$DKAk+tN!BNi*o4{zK6Q4lnDji#2lSs\Xw+H?60Judb0`0gx(mNYOuN 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 SRyIa9W+qrNGBE{l*#8Bs6x*=? literal 0 HcmV?d00001 diff --git a/docs/prj/resources/Magazines and Vmem - Extending the Slab Allocator to Many CPUs and Arbitrary Resources.pdf b/docs/prj/resources/Magazines and Vmem - Extending the Slab Allocator to Many CPUs and Arbitrary Resources.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1b1b73a4fff4539335a135db00873d962353aad9 GIT binary patch literal 134454 zcmb??Wq2LUj;5J0W26iEN+qdu-cqZ{6+Vj7Gc&Lvl5cHK%pk&Xu>qI>wuTmne0%^zMj3M(pn-$A z2hbS6{C+DB;NpBgNdmM1T&$b`HZCTB&hK6TW>z*fcDDCRF#sDI6Vv;J9DwEbN#(tX zg@c^~fG8jUKm^(t|7H#N|2^CsfF_9V5;C&_5SjjQFmnL@TmfwUN#kI7pTzIuUuoQ& z|Cz?j%KYy%HcsY$>&L;u^=~vzR`&l)W94FI`ZpRk^S{Z$#>D;aG-ghg|NJb|Zyo=q zc`&nZ|I2)x91P5@fDZ4rLS$5aw-SJx6OmEM#>5uD_0A2T^xGgdMh@ez(+{y{)0AN&hGO#f=a4>%7r37Gk z|CI+&jjqwIL~;_JNbvFT%6_)FRuzf{L`q!#`i3F5NmkDCO^h0mQ58VtE0Rx8lL*5S zLN-?6eqDm;*xZxwb*d}|6Be~4Lr=Woy_W)jp7}RZwco4ZUu5C_tjWoHMx z56s5O0$}`GFmWpbC*Vh*k*)Fjgk^v>rcP#n-==(@)o(_QP7Xi=YeYEgX_N0EetIbU zJt7RXbXbX}d|jFN7%ZaFeYL))LH^_c1o&c~>PGu2Js%3(pEV7RH1hS+SzTjt851a` zsz3XQM;kLL9Tn;jgynwlOB{gpgbuto`=TtXOAILtS>qQ9W08j;1Dys>+e=z;y=Bri z?LwJ*<^S2Gt?ZI755m2B6(>PHw(ONdRu^>+b!;MOT9h4KxV176_-3#V!ML=qkXQxA zhwNFwi4FfDB2VN>W)*73PwWP#AX~S?51l%9X|@VTE|X5zOg z=uKK*kr?TXP`iwOp!2QFf50S+9q&6)Jxn7=qSh}J)M`Q9`$5Cd>3Y1G>TLB(&`Pc? zNa;Jkc5mlbeJkkk%Wz!M;Txh#3l^*0&o3?Ful);Q0^i+c>HsBF=vErHe(uNI(o6Yy zlq}QG!N}`o-j*^&Lixu|Y>CI>Ln&Dvh{6dwDr3fSd)F=PnKJxS4i&5;-(Wcken+H# zsQw?Z>5ol*o065|J=Fb!_#XBCY2Wvl_Qz>|yXqg0bpYBp0XVt;a!^Jkprfs`gVAp< z{)f*pirU&Zz4vhhaR2SsvOr^V0})%d_c;2S#PRM_oZKvbVyUQut=)g!qGapz?n3X~ z|JC#U4D!!apx|I@qzrU=XUq5=)&YzvKsTp9T*co-0K7+ZMsXGZ*I%MCin9T@-(%fB z9FS4W%}L^Y^}LVpyPt$IGk}}*PwV?N3*dLe`n#v7t(C2VvYmm^UtL8V*#Ymu|K0pA z%i_;S{}k>owf&LgJz6;%I{i`OZ|d*AmiIViYiw>~3Sg8qFjBI$Hn9081(8w2z!CW8 zK}HpGYoH_jpZ5Qthd-+Qdj-R;JZqMl|`kbxY++*g#WrCb^gO5q<_8y z{oWmi#;xNR-D4|gn};Ja!XCZJAIOXX0!!vB<@3zkl3hE%9GJRAX5U0Cs};r+fi9x zCKsi@modKpq)&(OrIhr>JV6^#BeYA~c;iG?#hK8K;a6!#_B~%yxTfWtfp~~tV7M3R zC9o(wIlBj4E1(p7VA5eW&9Yx%wuh(HH=OwPGii|@p|Ey3ZLE@xkmyotd>3qJo?83! zRv3?DP1-zo2ODLrXm_d_hjz3{z3yCOf_^MEvuR=G$CQY!w%9c$EC_C;z3D;b0^+0Y zP3*?z{O5hhK(vr*b22n)4^Wqee{R0D|$&R#v&<(`rd2%K%{7pevNh_50F(> zQxL)tHsPOiPzAD+9OG^p6)9DHmonf_uZ*qP?4UY^`4?wNcD{kjXCip^cnE~L+ZdAf zX7N0y2$x^WPep#NELJOS&6xS_2g!v@M4r_Ye<4Eq9?@bFo=VXB0hZ*|BkDQjk5Rv$ zj&>RA6WO>*+0W_Kh0T4M$WN8=aF4rDC2m*y&z;) z9DS79sHNlJ&x65J((6}6c=g?I4zyczzKo-p=Unf4QUnk(BC82vDh`{4&32WHUD*$I zZs4bouH*EqCwF}?1R3G2prc~$Bs9m89IvVkhs%RW@9joJ@iT74$OE zUZT%5BlDguwTNvh{+zDmMsKneOJm_0Y`G!Oy1w9gO9L&&g#~GdCo&5kA6_ivIn|`4 z;7~q}(Rz`H4cz}haT$AuNC$9h2TU)E4(PIc*A=-Cz0#1FL}61!c(;SI3DrOu|s~!tR-!^G}CVRhw6Dh zd2r>FT&klA(=k1DdRB3ze%BrMZ;YyHx6e|X@MSOg@RpL3@JZg;MH(2>Iu&WDQy++`g*RT zYm9X^c>o!-G+SN6qv(ZkQCevSSsA0xz#Iv4+Rih_(dOKVRzF95k8jWh76z z?gE@@?ks32?hpy=K3$=jcSa{eyISv5?B-{{PghK^;1UgpMNVNVRbT;sGQR8*$XA%#by(%woH>ZzH%61VwU`;2-HVuMXHLM*u`1?Y<(pr^;G?g0&Nt~X13di$I`5W?SE~tm~G}^`^J|(K^EX;6a z%iZ3AxFId$_MqQ@=Rr?w;87csX4&^OLGOx`qQguo#96Nyo06p5F&-d>h1bu8ANqt^N=f4sjb&2tw@O;CrWtUWv&{ehsy)T&c9s7ir9v1<1GO6Ij_t(-e)%_aOvOV7e{s=6g*^#?-2 z0(KY7S&!*xPwmRxg>xten6@N?kXMZof|7w=hd@C$3oHvK8h8cm8r^*Cz2CP1XoTfh z3KYNENpbiQ;YHFy)q(3_I0z`162+hlfjMGO8Z+^3wJM|D0nID~4zLC=rW6G~4yeki z!mfZ?*w# zHR47O!UGw0N|@GUS?h7kn3Im>=7umay2();@c{H&O|AyWi0FJ-*0>9Dne*wKY{x>lH7d-uYHvdrX-&;sF&i5?G-x!ziUm@-9=lRTvcTKpK77x6YHWKVj@Ne{1d!N;!3aDL zK_U&!Rngwvx8U((PW^fXTKI|L+TtiCG7ptq$A?9xk`HVj;HBKVD*gPjJMgOQk(pe3 z2ICI}sK92GiaqNTnNSx79T|dqv?ZmabI-y%1>5Xq;J8|g*XfhM8$>2^pbw~7C4n7S zgYdmP*NR+2PM9uGaCfD3?H95kLby4NuG{V3Oe9T)?oPJ9%JyTt^Hxi#sot9(RT^>G z3KK$>!TInD54yOs{^9X$=go{wW9Otl;J8oj;aiNtaFjmpP38P3k zKtB6iULwQ1uJU|_@2_h5$ItA-dvZoR@R`s*T-OE-lCt4}nbfIrP3Mne&=i4vO3n)r zKd70{@#f{$LA5{au}XqIX!CCb!J|`hHtWnd!QM^)0`{0VB#L7 zl=v}dFhziQ%}rN1`A0?-YfYyPHJksE_1uyelbaTwN^MG-P^G};|7FM^^d+x#ZShNg z^dlrS=G&K#FgJ*wB~~1mQ6O-hrGa+$q1qVXROPJE3GjOq!AVl4I@`W`H8FI$XfUge z%fa3$d56j%B~wQUF{!H;I;~g>Wn|erIlP#qtz`y>-<^5=4dEUx zXG{n>_(g&KJBOTV!3G*MY;bW}wb$B*W6gq3WJ$8N&RblrBPeKub9Y31f=OBYi;MAl zqRi5X`EuX)dsRQoRkB}eBl4^iZz#k4Y)u^Xul{7WJyxU3?Nlh@G#NKW zSq=R&EohPjCrrg%z2!Ng+EVEljcrPgADsb2QVkx(<-{k#kCfA}6+}AfBQF^#6!@5% zGWK|H+cTlS*Dtc>z1RJr4mAbH$lQ@u6zc$*t8zRxZli17n)6_#SAe zBH|05u0?Nnr4Z2OA{i@Spk+h|mom^BQZ$pV^JF#b!#+@C>3Tn*GzX7YE?}sHRN}$z zwdi<|jqv2c0Y5WqEV~TRz)p+`VeU#*tMIBMsk&Gy7(jiF$Xd3Sf%=t$YU7Sq!Gyj8}5*P-m$SVhIM4)V}R~)pU=4)xDHXnW+pnO ze7$mTvQKUqjKTOMr>ADVfF)Bx>< zf~SYrb*Ot=zIz`L+*79~$#d}Y)nh+p2s36Nw&ZgvEe9n}*^_~W$T~1QdWJNEVXHuiq>!fwDDwm^<$g#rN88twC1w zI`)SLqQUS<4A#Bw*IJtru*gwfNpoXK-!_0ak4oK3t+{1fJB*Xlt`d^|&zj@G!SrwZ zY!XQNUH3E|;fBxYvaMtS-{v16Qh#i+2~-C5^V}-wq_7#M;l`*s+nQ>#I=q-^u>SBGxaBiYR75-FYCWFq&g%|wtijA!Ey1Zw~Vjb%W1{hhhTAW0*PkM2_JbS zD>vfUPEvZ45Uf!j4wV<#iS7^#UyCD zO}iI3nl=9xLvWB?u8`u%-Ymy|mtrW^ZP&q`=P8(GJs-6gfY}FrptRkZy{ji1OoCw% zT?Jn0;KNcV76n}`$Q@Tm%I9y-lf*akKj(u?$Brdjda(Xt~qc@ldI`!>qzE|sy&tzYuS7MbveQ{Rzj+86MD$JPBkp6VY z4!t}THU&Y*If})qD=|f7$(N{%TatMtE5$Xov)4Ov0V@*Tsger*?6SxH0W7Xpwn1F! z!Du0V51IhLQCI6G+-?=9QWT_Yy6+9akkc@GB2g?!(cgVw9D4rx=F=0;`H&t6Ta#ym z@v$)^x7e-NsDMFDpmEW1dd{AS^wHg4C)=cEiX0t0z;oluqjo;OpZm+fxZ8!bPP@_a z+zYWwCxL@J`3xGnnc6CIX^E}_8;P4Hnup<;Ux15Ri}<;hbLt&<{!3`1-T7SMBz|R% zl1@|sPs{gcCWoJI?HnGWibbSu@JAW`!)d##7O`kCH&Vk|8X>nb9G-1?Q~Af6pAvKN*4lO#*@{?6(j--ym%n`ffVDFtVIw+Grf;x+*#ZaE-=93Qu>Kei7~b z)ka-hfDi)n(b7gn$_=w3o!C#co%rA*M;#`6IEPnT7AryN3-x@0`bQ}eOnyS{eGqdC zFdiMP9(9=m$wGb`E4(atBKVwukyqQ`@d4M~a?uKB@%rN2(00u*FyYt2yqJFHnKnZZ zVG60sm~3a6_qPLvEwE>pIY@=T*@FA#k2}&$CH?+x_P51kBnK1#am&d30Bx{tcV2H8 zokH2Y=BdlED>8cwnM7?!bt89hkj0psNUT<(1-Yu#{t~q>D?R~uMR7uvOgXfK7HC#h zl2C7F8}}K(=&d9X^Zb;${%|e_g4cH6Dt+SSK{eH%ni38yccRziY`FKVH~n8i&6w@? zFj{gT@)Z#0YS4ZDhG-D{qaT#%;I1LB z{AFVV8{Ml7IZX9jAwZ%jABckeb{$Pg;g~Lk>^|k$#0jJq;(cIu2xy!Op5J0#SmVg? zYH^JxE=}MUDeQbsT%WH>Llox=p%^LjzoWo~f;OMTN7dmlu#u`lsyH;o4#_c8G_ z!VNcA-U#=40(3De=d_=3?nzA`=Ec=%+{SOXt&z{6n{*oY(1lVrhkryx-<-V6iW@+T zmPh51Q+D3yM7f{*e@oPTP)-(+HBjKQl>{(Yb@3Y}KUK)Xw@MJPHjvZBk> zekgo^6{p>^Q4-|u&fsDVBuTQkDZkG4($u0 z!;b>z+gt=G0S`>91$k0Dm3*BwJ2SY!;E7!-{$t}D7UOE2O|h4oXcg(_7qP1>9cF zVJdHi`Gqx@*>R zuh*Alc(Be#tJvaD#tA;RXY|S38&wd}-=megwu^seRUZe|F}}RY$6A5Wg1m{b>cEVJ z(c$WwPZTeYTem3hrzz0Mvs&R(ti_u=lArPRqwXe2S=?Y`Axvk@RcRXkY`QibO1+p? zEmj%qb*~+?LkHg=(>=uw-U=W1dK`ko>7q&mnwD<8o)=m6HSxjO9g}mSgVcT06g8n@ z3>vEc!z8A?UTAwSD%RBOEiY=)yk6st9?_CoAY&bDad^&C2y{w@QJ{bCcow^3@d#g3 zl0eu`1qOyk>!?d{g>BJ(y^3kx;WT$-f`zieH2uff>Ge+c5G}=-LfawQ-FfX=42%F3 zJg^>AO85$IH7e0QHo^ zB!FCrPL)gKLZ(mBoQPRO-xlf#e!vwj^LC$@l&a86vd*XhId(pM?uB${I##$4v0V+C zU-Wf?5Igzu^^C8!HyaWSMluCr9<0^sP@2Kq@($Cg#ZXiFJjU$i@rn!3*83HeNkaX0=KGJH56eXwJ$PiYrEg-T z30-!TzNwF;t<+{Gn^d)O7f{ke7ekm-~2t_g;t^c5G?i^Z{Mi(t|RhTudV&(Jq zv8*fod_<0qj5CHpOj^vz$_G~vdnS0Uq%*kl3w!l zr>JP+=gHE}8MCop{AMDJ6|65G+KfSSHTYWcJ#O(TX>;1`% z46fzM?1gK#N?$ifeh|b?#IDzK)d@HpY}D{LXLOlV9cIE zRl$k5R2Ww#bn1dE1T2j@?0TPw8UwCNpVRs)e*nWxG~7kf2xZ;@yM}%IN$_ajuic;b z_6}GWb~#_AriF-9-}?9Rq*aN*Tct++0mbnUb8Qs zPs;8cL$YZaBq_(*dj zqC)WP`hq)pYrfo2DASPG7m9yVP^6T0Z`I$Y^tebw!H)a!2!cqqq zM4%>(XD^ZG!FjP_bDx!2AjR=oc+@dweWKzm`k;GZGt&F##}LO_c=GMl2nC!^VFI7V z>!T)*hM01NhaozsLgqx0$=Y>rwuh zx%;a$;(s!8_b)XX@0A??H*d=SkC{70aZUioUkS(mrzGC*iT&p!9y=4~f1kt)yAS?! z$;``KFIndP-FTTk3LB5plzTW)!D`0ae6n!OjDOuny1`>tLkqUKDvrU6rC@IJMm5XU zma1$$WJ*I>X@htnb%wlCYf_G%8~wI59D3g~)F-?3IK?3!J>&kR-sZMKXVtn+nC`hh zu@v^Cj4Pi0QRS|Vrg-nUP}O}PNcm&`9-~ozk`Jvs6;~QY%8W^Fg-*5DDK46M zBE|P=oK57F-b1f3FHssr)kiG=w{34}$l>u6Pn~!yhHOMb?i?P*AP|X$>Aba=q9^mM zo_e<~y6i!SHNW(^F!s)AHKe8kTYh`Df3BmU@T>q?G587z?T6&L7<+m;GJICsOF9>2H$bXgM!%}2*`#Z&p}I2Z>Q|%fbpG@k zpnrjrvsrvJQcNo;7g3&bg`CENI(_$-EG? z+y`Ld;1b(6!+f_O8x{@bMbKHl?)dE*Kf4ah+!I$sQy#I0^7d4wT4KHJ&^X-N@V80w*)n>)qb=Mj7! zzIwlQl%jD65k@FpwuA?GW&@7Er2P>P_M^$j-ikXizeyp4DB+v+x4t~o_O?RoqPG$J z?_NCU+GFH&ym?-!(xK_K}0tD(U=dYk2SBU;s|1M{0v^Fgg1xvxaV{DgMkrs{mW=D;1 zh5|M!!|=THPjccEJ|ym$k^;~DSNj?5z09)a*jWp_dBbCHuo+#viuDMqWyTLO4#;qF zGP{yCSMaZi?Br>lD8o8<*!ZSXg!?1A;sc4VTB4z?Ql9eT(Dx=Tp`|aG%MLh~`dyW6 zPwml7-=2WSh|pRQ6LQE4?YTYAZidScl8k+;m6RVQamSB&QajAsQL++;lNoV0Tgd!+ z`25KwjuEJ5VFimIHX9wv1N&}2XaQz_^>1Q_FIJL|aSXu)E7=L^gHZh%*|%ybs44yE z9O*ctj04(@@5KgZ8ci%y3l~dLTVbiqka1A_fQN$jp&04V9i4m+DKTfb%-T zyoX7DZ7e$V$+HN_N*8+LAaT_S4$Ff&(?%{stHk8 zNNttPxN;tLsJxbJ-Vbsp-~6P>?%>-{PZrhQ?g&MJN+)7Sf30buxVG-VS5U3b8c2Fd zhrF=;Q*4TShpVE8-{?&AR20Vj55hTS4JFVVK=5cZjV{0Y*sBaI2D;cHAXJ78iS_5W zC=pO(v-~1d1MV0jmv2IDNF6VgpqC8$7E()SB@4KB6#!}oi{WW;3%q5vwve&&x2#Kf zRk0UWNUN+?kkY}qMYPOjlVtGyJF;Fz8vx>HsG<-P<|(_k+yJ$Go=w9Vm~=O1MvQ88 zilq#X0ZWr9P@08>Sb{ZHNS{1dMm>+hK*`Wgr$olXYaDkg>EgFFo0fggf!5Rv6!$^U z#dr3%-0E&&R+oK6d}})f#;I3@K4v> zFd4dqWM`Pi z_#I`YvOXIy_talS=d8F>XHJTz2;=0U?IMaZtdx*1lwM!>(uoP}?1E*YDAZ-h=@m$YX=3Y;yzT-{i|@BF+^ zn8D2d{Z^mh%Q7BaS*9gh$Ag#=>qeWjXmtNK>H=;0w(c7)b|^80_#A0G>@D;DZo1?u8XPair`P395%hA`_= z5E&NrhLR-W^&@Ub;6_Gohh~IF)B_nC6Vy?b=I26z5?ljU_E_dXTaP-#!yVR-<+k4s zuA8#i17``NC=_5gDCxGd&&ub%Tn=CHr>Zls!MJDZN(bio#lRJ9Ql>7lIJl*&YU z1Aq%c@Vx@$PN_6M4-i=6a%~c~p7F4;mbEeT0J1qF$<*GUNDohMH!pD)`$0AklaCim z(O8fK5WI?W zbPOx!x2JbJA{gR-K@DX&oY%34lKg6$bGF@WoCqG&@BEpheTO~eZ9Jhj6wh{5ybWwF?k zT0>MY_=`c@K3#+i03jIR8H=-~#a4Pz-+%@Ka5x>1pN$AKvyjYSfw>)4&sd3v9;w0e z)lc!G6073tQOq|0n@>@qJu6q7AJuv@DR7TCdMR(XLeo0(&#hUQ5eDV2ntObcGOhTs zy^e?aX5GD$Yhh9Z7I2lFrsTJf#njg{+{u4)zTZE2qCk6m3yQ^hw>6Rw-Gef zFYr~n6=ai>NcciTg5T4;F4Hr)`pVZv(XN_m6?8xbt}H3-N}s9`Rxfo3(7JD@bC4m~ zf1l0v6`s1O=sr>%++w6SHPFh zx^eCxmt=WX1y&UJ?`^$ek?{WM1=^SUNSW|sv{vp)cYq0BW)Ul)G zXdFDFHj1}xpA^%AitB%|lZ^z&#IJ)i0ihpA{zSS~#5lI_d@eG_5Z3di1}Z`!!q?oZ z?No~zfqQs+jce6T)h4{ifV9`8WvX#>VO#K)v2FzNXw!|Va9YiQgLexLotrwnPK-N& zuWC#UC;NlzVhS6+wYBW-peOb{J=q z#+%!)qvNfrRM);8sF1oN+5{AbY_UZ12bV{)sv&#+OV8s^W=$CU@}1}_y7{TmqKZyX z$J>4TT+p>9vRYyKW7OBjhuHw<*NdHpMAVDlS6x*t521YM5b0R zuwyu_$kd7l2WoG=M@ZLywn0NOS8AsecgQ=u1b-Qp)cg4A4)5Yr5)`de7$SRC1Feuk zTM(HCoV6jyC;}Gm!UI?SB4yA5){mN)xmF$*-%6rQ@ZPc|rKPmAr4J}d_z z9r{9tSEGdgIBAd4NRoS-Kp~MT;yEC=kpOf&@!M8|D|(>V6~)6=yX_s?Q-28&xHq!T zI0(*r&F;hl%D88cLLK}#zE~}RcQTn7P(ZK@xt48>lCG(7`1G zx6*uk(HRqnMeK}MY1uB_g@lI{`)$<*G2&@Hq12Hptj4@W1?60>xLCi5TXESM9h>_s zdxJj$$iys+rwZpiF`@T7T1HbF7IRJD6t@co!SSA>OW#cRizGgD7^&aR6{>ddXL?{25#2LhTWJ~EmH$^u=OCYb#E6;7n8Bc8zkrRrS1AG(2$(k=^UYd z1Y+gRBbBk!^zN=DG`0-!!mC?gr8Ho6!-XB9k}=@xYuFUW<>6M#A)Jx*L2j%IX)T4z zHQX`e5KLb6;ZZ!UlU;Gwa+aot6XBubcCIavv6m(gM$HpJT9IItRIv;Z3pw#qy&%PQ z5L9El;ZH`@L5q7?1cuB4#=!};dWvL|usq_GMS-wvMm*-Ii_+kDW#gP-2i+DcVWcSF z8m&X3?x89<{x2ebvDYkVxDx>cs$e0YqnV+*320h$EmeEP0MS*~8zwVxWDuuY!flWO z&4{r*e^1bIalCqd#6LNHVwM%_aOL{j&$$cd(lx6R)*%W3`^kXhRH!u3* zFdNzx`BS|q0b{TWR--hK6aEr866JkD4YHUmD0d9w#--1P9ACet*>Q56!sbY$%+ABq z5V*W**^a-h{TOcM4e!l5PIFn~r?RWYL-&2Mgkw5zxxCwhV8&e|)e*iw^R9z6O}5nN zk*l(keBtj z&!ATq$UOQ>N+?+UO^23z#&1V=+Kml>1)jSDPajE#?%zTo6A%*yCOWGTV#a~60*(Yq zQKLL(Ed|OXjgo{=U2*luNJ=6J!#KBMC4&L26p3*TthdHsVPy~d_Z-;&*9Rl-nW6V@ zoc?$9+TY)l{LfXd{VqlOXMx`TL=KD#!0}g&-TzY#?Dxd}EeFQN{NLxmzTeW5q>m+h z#5A}mx`|(-|Guwpl{j_XPLkVF2_R%r-7Aeo18aV*cmV|7U0YmfhwZjZ_b&9D0+mBV zeR?PyEZD`m`7_=1wM-{5s|Hx=Es{(G1x!^G@{$M5O`En~MD>RMRBxa^0? zAw%Jr@%kZ%HxodJG;sNUHWYmnUv=Zkp8%s$s&ehB8rjIVe7nzY%ElxNu)JD%=EVK!RQ{wh#a< z^b>Jv(Yl}Ss^g@09(W$+543wqe*RHyph>$oWejqWZJR<4y?5x9;R7Yql;9A$YwcVE zBStBYti{5&vjpwGp`36ACN5lF*ulH4-La`ecV28(l|BfK&X(~~;RROMVUkB8T7Jy) zA%wq`Bqo|9@JQKUeSXPC&e>iLQA@Vi6A2hSa9RD@xpW!ENrd%7l*AZWd2CIoYjx6! z9bHDyazDl~H2LQcpAq1T5!8hOA$6l5;u3io-pktnTy$_IqdRES(IO~?gu~~ittoui zrIAxfa%>vi3K;qTJDlxIO=o3*_(wD+PETX?^yBHP`g)>BE`3kC_ zJ?cuR%{jZpS%OYQ!It?h1o>1lS(o@av14R+UMysEx_IFe`I%m5C(8k97MtR1%2+f5>Up|}L6^{6GJX;-UwF%&2F zvzRL^kvV#*oiSRlL67kz!R^UiRf3T%G%*OpZ^TZ1UDn&Jel2Bv?_X*0!|r@D23^SU z)vR@(>S{93VxM8@kyEPc1m4c6+(ml~n{p6f7K`06NQn@P#D9{@^~{D$n!{oiB1B?y z3Ye2dSV?AyXk!AM?)ofp)Vjuy*X!CM387Nx@&YaLdS$QVx>HB$EIf}6%Aeb-B)^>4 z##YoYq4C5J5zG~C%)loVTRUl5@8hf@x|Xiz(by0uvxfdWGE``57>V!e=EG>i)ni#o zjvm@NE||7R3<#3dsv;*3AbrFr;7GMi#X1nKSBpUW21+7F7)4skw}gP7#eYkNV?2ZS z{$7z@7`(sq#l~B(Hy^`8mwoN8cGuuNg z5N_HbYgP%%6^{sU5`|Oo!0(bg6RP*ac$Egdy_Sm$KPM5(Re+}SFuyXgY<abwu^0BN$RTLHFO3>Zop_%HrsY-89w_C9xk;AJJpH||uo6~x+~o5yHrZbN~xP805iVM2@sTmXv4yKCr- z?x?1-1Dh`&uF{pm5LV8WX;n;JY_d2zun10k@GiiWV`wd$w=f8)=IBi!zXKSbg3}>d zl&(>-sgzv_^n@`CScCa}+PRCL(2oYYWUN(ByJ&oKyrC`Dx{%HyVZtx04K{uo;?Zg=G~ zNP!T!VHg@k*Xt#Gu z9=xu|Pd{H|xNah#HCe9vZT=$_b6soh=k{cEQ5ECJZO7#rN~W9};T zQD28|8YYdk#O}&ntl~7^v~Zprv%2+I9bwvnvo;J>m%{U8Fn7o803b8li1{q8M^T)_ znLs{Oi@LP57s7$ms&N7WBFLiqn^^=wjB3*Hs*i{A*YppXv1LxYLxF@L4JAdxN(j?- zio---A8AMFh+=R^S0uFpkML7SUq(K@;$jNlB=Fw>%yBzzmGX$5;G7?|v70D8By)FH zs(-0!%Fc^f5d6685qtG&IfpPAuB2R_#hxql8$4!k9R}Zn#UW-`{i(uNHi}r?C72C4HYVN!j5@GXK?5H~rjGC4utIL~b0j zkg-R@ny>$d>xqy=DN;V2dupy|2pL6(X8jsiiE?#uXB|Tqp`pq)f7z^}y|yTkly|0d zfy0i-0`CR_ipU)3&~$1Qg;;;bF4VQ*+RC^o_^A$G+e2}H=>?W?erg|Q!P*UC1oX{_QqD%)wXn0GiEqj=S`!Q<}LyPymNDRLs8nqj1Knmawoj6 z{|cWX99!_pg6bj_T;6K+jNq{u(DQzZ15X(WBPH934zoO+omL+FBsX=()ZxsA_-o@4 zZ7XkW)D)ELwKE%!ynW8SsyMLj@K=M=ZEU^KznJk7V?}3J8jVU=3ibnfW=s)E}2i8Sj^=i9#8-aTIq##BF%kN0^6I zrC=t-XopV;%H}vK3(}96-JV-H=t!zhq~H941irVtEJEv=rLj(@a7?8bAy$>ud=G-n zDy)E&m2OWZt4gn&>BW*yjUWhfq4I>zlEGPWIBrdJvuN7++Hfeq+U?Vv)O@@aVLUNj z)XZcCc}8dG4XnymI?B?)&x=UQu_Nl9G>fLai`CX=zzwWT&zn=S*I+AnBe2>bj&~Ax zMiLZD4^Jc7u;@o5<{?x) zfn2jr^x`nq%)%ytd|`nskDxMWV@isp?6Hyz-U;Mc{Kdn@z1KXUQVi-+8MwUY$f>67 zpb6TQ7(#d@{0EFUbKcC!W9prc59}ENMkR6M@sAEfZOy@5XO+76%LuG{Z zRC%4RU)ypYQobz@g7TE8KI*!)Zr=o)%fO76yF)((E6$TR{2D)_@5k!*ugP#pCQOILeMXBct5O3+ta2ONJ;(_ci zN;>(nTdcy=Z$MYjPM4T4Of0<4(=6OxGYvrR zB~!W(nj!`XU~}>g!Bw5W|Mi)B^3&wDG3T#Nh>Ficzj`TM}0? zWj5u%n%dZ@Qm5TQr_rjd`uV&z1}{Ply6TK#_c$s%CuuOd`s=BgSW)A`{pJNN)KJfTPlX$n z0r#R^^@rrD|H6&?yaB9Y&ZzokId;Wr+XLO}{$y|xff_zX-1JL2w7dV?W9QSPu%KydMIWUJBtywy@lM~yvZQHhO+cr*Y+qP}n$%*Y`PWP?ux--*N z)6;c-!LD6j)%Vt3?^@5Ac|&7&UNljLrpOoODQT~0(KB-dk7`IFT_h}Cw>d)^21 z$E%Z(9m2Cye|U-njNnK}ng-*@YcS8EY12c{sSZS@>jXcc%t4TN%DxI(p`&gg`pXG% zv-!h<5r(u?Fk+~G?^{*`RiZpcF`S~Zc%xCccP+?*wT)h2hFK-@?@A$&yF;00m z{LGyifAHt`gs`bgf;AP<(Z*>W>LL}!oT(q2wMcqkQ`gNxZtQ9`S^{dA;`2jdA1R%A zERG$in!#}c-|D==s#i#s3 zIs4ZMW&eK2zf>vvPq!GI=>JSK`}bS^AF3HE1KVHJ(0|1k`setke)hTbOd`%7caTYX zNcPQJziuDv*2fUlC<4i%r#5)RDfyHm^U1znA$+WAeD)+vuMc4ES|EMku;MmI@{8uEA47eAvlbR$71? zQ86xw&%3Z*k-2}05GBQQ>Pr@-m+NGdU6hE-_lBs_jx(bC`Z;GE1GIo_9PeN9y{5Nk zmPnQA%F^IzzXk|3p@YIl8B6=5ja#RKJR0dBEHJ)mC>)t`rH#mn237T9yX8DBVI|n7 zgVAbjfNmx^dk}vf#YaB~^!Q?|&m5txwr=DUF9josx3>l+F(_&dPVUg_HgPt%zNR8~ z5tJzcXfe(KFGtuwoQG7lrK7r#Gt{~Bzgm=cyCyY2i$Dp%1R?T>YLpt#^h`)I62$_k zzCVoh#&)#JJVa^VS8WRaS3+UjVU;9f*G| zeOkt4L!AX6`V!ig+ll{&S}5Bgv{(8}0EcF9@s&---efjX9vEq{|K^X-uLxU*lnP1@ zYV>Fq`Oh1E!Mx3d?&h|k*PURW1-WyLQ7e!~UDd7=BYY5@T_j{1b&KN_BDuoi_8gE>=!1EbN7|K9UtmbZlgxBoY^=!j!{eaXLUlD7$pop7mKt-g*Bxpua51bR8VU| zE0krmw~=TmqEU+|W8&#A4Vu&`IR7aLrY_Qe#Bz~#^ffS{>L=%L`*fA%nQQ7!?!@0) zQ@Yh9gBwsy{GVeTx|w%>`o$870Uq{o&oVFp5ep}Pc*s_kh1y_F88I0^6g9+{9|h4J z!s}j1<2-;s1KM(JP$bHHI;Cd5kHZ{NV%x-iZFAL;xbL{)`NdahIcs-c%A#V-d)Sgg zGI0(CexG%9A=daM#vO!9(|;Vo`dm|89Vy{sVL^trWy=>-4@n|X?j7~B{nGMA>~>+_ zJUFSfGcZ_6Y@<^w{lt=cQ>Vl@>9Hklnpad15w_u1@3OCU00t4Xi{WFIPb|a)qz13j z@cw3`V}YqT+T&TjGX4?IEi`g1^!vJjNv+O!uFDnsGh5a_%M?I?hFJAmhU7MK2*Nwq zI$7{ZtO^7Uc#^oUifgw9xfxl@+wZuFfcm)ZG?}JyamHOW5XGL7K3!vizkN*k*xU>2 zScV8}2~@b}&KKbVY-&$Y@hEO zsWZqJoC!2}m-qb8R{y?&tn~?s`wu7c3MjvijQxqXMbzK#X*bbozY3>o@SVbMQn(K8E0TiwyF5Ocb{tjL8o`UmgyH%tgI(54rlK%+$#^ev!X z?VqZl6)^8Y;k^|gI0CAcD7q7Xj|0ZY$7yvy1lV`|@JkMPNslve$^=40kam%%dMQw66@ja^Fb#|*Qg@h4v&3W+)>Xawyu z|IPhgGAIcgzM0S^7{Cb}w6q{sN50h#f{w(LK9g93-{Ud)^yG^Ueyg134Kka0t_n<) zPtoCT9A9_VoDm$vUBuG$#R%f?`Ya0vbB&dfF=uHnJqa7HfCqB{o$*`{i2>2LdWY}y z6q0qat<1hNttOrGOh{~FR%}riaD+YP{3UlSNzD72WUg4iM8Voivv$7 zi((++UTM#S#b2DP5{jh+0>n?)^{X4-sn*k*lqnXlZvhvTc^+p?8H+S z4u_B^hrk0(Z$_3N^e7JOT`m^|{Yj;CRej~BKYs1`wwZ6t37Yh@duUvyv)$orC1eXQdg3=1;Jm%uyP z1}9NiRu`z|8Uh9Pi2#vxgxYa4bV_(RM`$;wm5rDIGHyq4LZ74B1Tuo_a;vf;8o2qk z$SVlY{JYak=orHqll31jwj6KKo}&=!qK^n)NXlASn(kdVvaQakwVGTtxoA#|^Hs?E z%hkYV3}A|vC-&?EVLgc{1e0r@#t^hq-UEg*kC2+?DLu-*Hteg{O;&IdCYhou!-agnFhZoqF&~6~(LV$h zILWfJ9*K^@Azw2D3E5HMv9Sp0UlH-?__7rYvgHBxvx}8Ycyc85)I17b0{9c8uK!EO zn13_6t%O}|J1$!c-SCAwmBz;Jwfn)2(vqQ2uo}2=GfHN)b`XMr*c$Jvc$MnzpLcJEvL=1lceO^w;@v} zbrb^hn}d4oP+wKqcI-Hh1_H0zCyongxL@ zPtv8N4(xmOo7BC}1x6v0d?5Mj&Mr_t$fWWjytr^Rf-@YjDJmSJf#;{Mhd`Z|&gcu? zzVv|D?H>AVW%+{{NbN5}m>gbJ1Nvn+RwIK`tW-$+3?bE}rR?yE#nYgzw!&zYQ`*&8 z{46sOP|E78I)Rsh-CfSr<31zpX?uJKNh7*nVd(Qj-6@$F1nX}ewJa)Iq)ym-`%{RH za>u=vhzHCkx64>yKM9i`FTI|KIj9P9mB08LKRP1!Hl~R>{c;(;@Aus@R1r#B?tW)M zx}*}AO`528TwXOOLSO6ftC(n^f8Xy4zZ7jZ^IpI+_3$i^sDj5vM}+n$65Uz>S;{;?ZTFPg;)-)&kDv6j@lrXxD*JTw zzxS(hBj=t_DQRYM;?kJ7^s_sj-{^a&ZSZkR=kaFnl$VmCJ^++_N*)2mh!?;XdUC}L z;%nVtbNDufhOjZzrJ6sN6;-Jj6L_Sn!dKyeuCOk}!5UV}vB2ChVs8=c(e{@+Y2enQ0fFjlWYh#iT?^0dA5*9Vah!l%xHCB#)tBH0vG%Ts@@UQj5`+u>k}>9UW)Y%IIvX^ZRnnvDW3DB^x_H$|{dkTm#n%th@gMIgW~y$sMH=-t^}oEg?Ys_nM7%Mvv!({Wd?vt$kYIU_8Cp7rHJE zE8UQFDZ{77X#AU=hU1`$4}?l_GVI;2aZG?)>`nqx^3%6;ayjd|heKiM=|&gOphawD zH^_B53(aFg0V`H33ab{SKG=WubOJQV(Mr3<3Dec$ANmC1!n&6?Buak5gx_=fY)|~T z``n(!zk+z7kgjDUdIV^Xw*$k{tO)6^%PUeUs*F2dTbpryk@lkfL{};|ZRtD+h7N}T zk&qH+eE^ib#2ZLz)erc(5BEL?S@^!^BgVBMMqRQFw!?!R8iG!a(J2#cpEY5}+Wrn1 z%`wlFtFi33@lRssQIaqt&jQ%FW`I#*0_|Glen9qlq*KQ}{EEduKswI6ScTHAK~l6$ zEwEWC1Vxd4KLuzBG})<%q_HvWtm6 zc!O3sodY?#^m^GQs;TefJ9kix%oX}gK#me-9w zq2K#T6*WE>WQa7ggg_P$Lz5@-?Gz3656|i>e{H*niVozkOIWr}OX0XJz}#?zh2xO( zWs~_5ad1wXni*R5TO}iKmE}A;LHB`SYFmmdRDb`3>e?QGDoVKJ{9-v>%uV4YGysZj zV1x*UTv3sngI8lIRHs;x z({Gt}T$uN{adwU22r`A^3HfI4=?^@y0|%9k*Yn3Z89r)po>`;jf#|gff0hl1SlKuC zgq<%AA7V24x{L4hT5#T3z5H0iBAfEy-;o*>TTC8#GlE|-Kfn3fXkYz<>0~cr9ki3v z=dffu30cj3Wqi(r-Qa#nk06{8M=B4Z(Y=x^n8$2WOyp4w!Z*A|%geedB%2#*D56mr7{rBY{}jUNvG`S2 z{LPp|hIeHdKiNMor?^@~^ale6=e7SxPEx|AKU8S!SwZ6rWa;+0pt9G9 zNUoV~763RQFB3jqMzDUqW_*L+EvJVWKDod7u7cS=a)f|7Amvhn@Qad?`agNa^5k|< zCq56e9m=58qBLz(V&B{ntSgS6V==^lotnVlcL>dT3ErP~@8s4GNPZ^P&Qqvwz|x*2 zwxgIA3jmCHm~||Sv+Cs%H)z?cV%%6P(z)9h1+Ev4yC93mv!FEMHbXZj%N(*UAjJ$z z>P^prlpoWG!rk$rw1bI~Oap~Ye`mr>ilMD-Og{@-W|V)Xmb&W7Ev%?uK+wNq6PZrR zRs);1Ky?MQ9)})(mhLd~#IU4f6T2BuQm_=hnjHMn!OXEZQA0!(Yn+UwlhAsEN<$vP zR6EQWVb(prZ-<#qf^J@ckQud8`$HW{ibVx0&l*pgTnkxY0@lF3nEQ1HAa=zKYS~Of z1EC}B#t}Wf)-~r~MFniIts|v$6;vr>45Aq$pjl6(fSN|4M*#)_ zr9d*laByc35nku5>=yS2i@E;gh%6zM-fQK~P!aOow{ZHoAJltjBJFMb4Vh7x^YRhi zzA`k|+_u2+Aq`24ySPZTY&io>EpY*mc`dm+Uj9NVmdu9$#aXrSTS^#@Dxx)D@*-a> zVrW~Om`P@5zQUo)h#vR;gYm|8yBGs7w0fE^fU0BhNPb7Wg95*ad}&g)JAY$ZQ%4Ub zcY+XToUv6SmJE@FcZr!0JH#*U0tDo6#XpI`uHxu6?&q3CDrj<^-NQ5Ogw$ypgr;m{ z!24t)D!P}H&jVidaPMxxYlEhl+o}w)2KC+=n-BP!BM8PcwmLz^75Inqky9XLSvUUa z;VT~H22n@*Ei`bygI5zdq9Zm&L&t7QA5)gsdiN#fnBOe%Ty6lC-gW6mnfNrMwh`g4 zJ?4pz!@eM8Yj#)JQxhB4;>`a3yewIeL!4ccKSH+-m%%vROoT6D27rQzBkfuu#32pj ze_N_B&U&rCP6CNqvhe)49x-s~1A**UB&&&XQ8EdDiHC1;;}xhtqueCauoJX_ek@~< zx84qP@n&2_g=il67c)}cDv8o<3%kD>A9??2C6?4TJdZnxHi7T9Ov)v$)e8!)e>R9P zumZrsEc?4u&iA!q*pq1f{4qn3yA)5;>^ebK%{I!1ZM0JLabl2l@Z#nu!856x1x(dV z#9)7Okpm@a8H>HO46Up6^1xYFe~X^$ve~)*!XLjqX?flwD4aIq%Bmk$jx;V;ku%ho z)pKCe`3c{$XYXwGHhOg=aq}l0UDYk1nZv2aB%Hm;-^TJyGgoC;ObOf9 zPdT&Qt5<$B30o^DNS|T{)Q=49JN^!*ejHw1l!&&t2AqpXmGn{wBpj@$^s=-;^ZD*& zxIA7Dt}E|zT_d`XMK{J*pIO8H9C5Mc)9(s_SXqotl;+O9^oc_)xU&re!+X;X_uPl7 z;JA@9vipRDI}MD)G@$}CN^c98igi&Bq2kYU+#Ic-+l&hy`tVe7P zVNX9*Fc&k2QgnzlY^$5K$x8d6)sgDoY_B98M_1q!KUM4|Se15B_{6F1jh;gJEDYy3 z;AUT|Gn`t= z0en;5nFIOZLu?W>(A~Hx`+ape%%XVv5=j&0-VDI~CM1G@d@Og27!(uO-k0xl0p1C3 z6YoDI`h-#_zfo3MEop2)#RwVg-IJU33*SWigv{ltnj98wm`4a_4Z>`znfOCT zD_Zc`D|HD~e+b)I zle2=6-(|3kEV=fb#fH}0sS~mSHm}+kJU?;n{IKiP5;`jJ5kx6PD6cx zb)KuE(N8;_a3AqU4QrdsrS+cN&lp0y$hTK5AQyuqAe@!=Yq~PEEMTXPU;#rUjUV|t ze+@l~n&0s4T6d?CT6b&TvmN@}vrw$;R{9h@R*jU#mhgX{F{8RYyA-C;Cv%%+bWj!&vJc zZQx8^0+Ecy(L#q*L~(oVwIdnAapoOp{~gcGv|3J~XKEvQSZ3rF>qxAEnX z=&g#1qx$$7sZuG*77%o9+HMnVv@mojme;)W0^>I-i1WkTf`+{Cey3!|ZUU4`^Zw|O zV2)t8RXLS-*K{*mhAa*W2_g=BIJ*b*9f`C%VWmu+6nVn`a z6tWI6Y7hb99~tY+5z@L^Q5PjmW6U4OQtVL~D-P6|c;>v*Q{ex6$H8H)DF zLWDYzacU8U3Fbr#1Nc&ENcd9Yc{(S#dENm=0d z8&rS@XBdKZ+R^(*2n<5kR+FVQPQt7=d;@n3hgo>2GtYRDf5t{wP!oV_NBK-3rTZEcy{_|JE+RSS^OL*m$suST zX3z=vQ>q7vpDr|hc%$MGTQ{m5D28}6&}vVL9li3e^rJK8NxyJ0i-EqSn~z3Re$Ecf zm}`)>_^&2V%QLMPm}&58B+qep16TxS9>-A*eN^q^3!|(R+5V?@=xv63;5W0*8k%o7 zLV=f@n!Si@Bynlc7F9oxrA5Wg+o>*y6I;ibvawlF(VYeAyN)3gn;|XJISO$Z(wlfs zA@$w}{EDDaA9&jiMGUg9@kKUZy)N6ScSM=f12=ETUam) z$CS0fQ{^bi5oZgOAt_Ec!LNW`Me%ai@q(<6ko+yjaNCfN`=?UjlLg-4RsJZVNCIbQ zj%o^il3xS6gA_XLZPb!aV`l^HdCX7p(fz85Lj?FsoIZ(LUb32X=I`|wnyym zzb}7jIQyfBTLxJoSt#-?8xzQN_|j~Dz}$ngE3GEsC;3TSs-G{(a@b@#75FDDPc4bGO}mbbRa5+GdfGIA0RN!|d39NMC&f3Z)j$bovf17Ya`6BQsN7 zvBK0$D;iYhlOMz?N?-JLERm58-nAB~hM=?^ad9kLb&&eG3Hq`x(QX!IOrs{GS?^_t z&dzTB5=Y|@fy_rD1dypuq7fR)C9>M8{nbOSRC`a(><3qT?qfcf*MpS#H2Kg{D=D~O zYr!F@WZ^_S{qjBD8(K-#QR}6Yl-U^gbbMt%Z3h-qc}JdYb4yD)l6sv&&*V)0$G#xi zYL>O?oSkU*i^G%|)D2z4EC?|1xB{mZo+Ed`=;rGX?s~*h1f5!BU@3s9^Qy~!2$uD^ z5GA=O`5DvFT9O*)H)IQ+f8L#X@7HT2ZV-sASNBc6s8V?Y0r~l$wUzMz8|%ZL|6&6D z6DH-qo%B<;O;f4ntuuYVCbXb&6?0ioo42CcF#r8XCQNqI%Cl-D=k*qkOEA%)dr z4P!8NSQq!HhS@K}|Me72GA{fH00eM8_P2Or71g3A*Ic(#CsX?L)sg=?D*+oyDtZRJ zPfRx>u^4GpA(y2g-vslh^R@4!NXw02eMt+=M_QNrg8_jOLL^IXA^2E^)3x9d^U7r( z(aj|HlFD@(`y*5B5WPt)C&GrMoNkbagC&Ddg@q>cIWLbbE>L12mLAejo||K=<>yUS z+2@YVri6swD7$xNRQM z;ks!3k5`uv2sANdO`B@Q-Ai~d;Bzea)jCE0f?EwmqqYUT2=J_1$vHusebMDnVDC~< ze%&oxoh*O7(i>kf9|YYZd~@n{P=5c$&d4#nBWn|mQz*D)kL!93>##*VU74(iGgoPS z$qs$IH_d$zA(j@jxR*FZawxfpYlsQSG~bWP2pcT@IgeJnTH7*sLaU+aDIz<);{#)v ziTr$us&d>e=Q_i?M=Dk}MsLKDkD?l4q~oPb1HHgI_UOJO_y?UR@7m~)=4n~Jkv@Qe zlVk@kC82~XY78CWS2bxYkeZZ2 z3Wo<*wvgYO`K6#~vgLeSV?Ck@+;Gwk$HU$O!u#s5A`?IhTZhqQ+PiuwY?ajlWbHaZ zrT#N~oh()e<|78nuI&Lcfw_)C!d5FAZB7UnbpnOntoKF;;v9iqoH@Vqyz%IjwH_$g!ql$MB8<%n zs0ti8IU-B(a>SSAt`z5u4ay&X&@(KI2yChx9#M6v9YoJY=}N-hsDSjy zWI9=n!960{Yhu3NosN#c(X+zkJ>4DGG+cNE#{dL={MfjKEn1=Ux{etq-iSJN^z_c0 zG)}6p2%1uj4dYcl47Vv8FKH0Z)rVr?{M>rB-KGa7m6D3j5{?MMzN3fLwg7Bu9tnLR z3MmE|evNbXap(a-|3XtsyGCHMMR}5@mkjUNvrvQ`BOQaT>dT1SCsKMx`lam}%_YGt zT;mdMr(}5^rt{OiT`WVB$CY)vu~|FhaPg4RlT}3P#|5ZNtfF_r9oGgjlS;>IEIxqJ z6Lenk2Bxp~SOHOfw+h{?Ws8m-rW}I(n*v6Jt?(^ixXXpyCrhomN4^O-uL&b=^uuzx(bxWwhddsN zb)Y8StsFyy`SvYw8>0t&G}yS69CME{?GflbuGWi4^X@^XP&n4O>q2p=LEVTWb}bIk zCJOknL?+Liy|~vGx|}J);WjQ6agU8@ZK6NI@-;gA!QE~KfH1WV?}^c1%dF%+#9G|N z6TNdC>%G;E(;}HDli~Sqogd&g7mWyz2w`F_#_0FBgY(Wt=1F}0QXE@DR#z>{#d>skW_$a*mB8q_UCz2*~ z^6zIkpx)5Ij#qIJ%{+Xh&GJ~^w7kI52_X*FODo=+^eKHK*h)COo?6Mk)KuM44fTK} zEvv`OB@SW+KDfE&u3X)+WX=7~$r`_;)CrI*Sxf?@97MI{2~f0smtab;U178Eu_jIKI*rNQpEislnkHpL#59O3CjCzajifs_{nLUn3zK?z8DDYjkitiM;M(`A-V<*+oWBZkJ0z7SWVoX(JA;`7xFluIWl>r44@Z@e zm;Jc%g(ay+>p2s;u>mXtuz5#5q+lGa(M!m;?cWY9LLcu#w$&MSjP4SIN&qpC=7R}8 zIKuj+{2$ShmrAClfx9@!th!BK;e5CwE#&j^uwlIjv8@LNY8k&Bv3w?dDv$OelyS*( z?YiC)CI(oT8>ZuUQM~#AD1Q3JVHLbriv1KMvRLLCi&m_$6;7ejg8aaF6nz!aS8Wj56#|`hXs;<)DA!4JPn9;hGW#3{%+A8L-iZR&QcC`+xVff+X z5r&0hRE(?x@YDd`PZZzc7HDd#Cij(2+ynJ(1m==r9IA3$6?Rb=5UqL^^;|`j!i{6P z$t(h)z+|vIu2Ae#jge)OmyHdq3?qvP0jfxMTSq#4(z=W|%tVClF#NCj!tDVDsuJ-!`&c?XF6*q1aLdE>iEUMn#HIkk{d1*6*wKzA( zx~d+&jzG7{uyujU%gBw1#KEBX`CJL?y;y>woL4cM!A(K9XuL?b7ydSk?G1h`gK)o$ zEk%?rKnbvH2`Ya8ic2Qx{&v1S%M%X0bUz^MtL=s7rawu0H#Apk82JnL)ew8n+1WW z-*#Z?RJ9(%uzUenqG-urPGT0bvI`K%RVE*5*wi0gx)XG~t;edx7ib*!`9Vn*=JUiS zNzu~y^X|lzWwDv`J1S_~dM^A}TwpdUSQ3anz(k>qKc{v)cymu8_iDq$ zW{D~N2%GVwv*=&Lw`VnQJ-?G$_j|&{Qwk*pr#=(%83sA@FDX24E?^o9p>?3{PoYa& zXm46YBl6wq3_45TXv(E0(bQbnCZo3#-DV&b{RL#S0`uT?=fx<16`#na?X^0XyNBBqcD$G(i$FtV+R zEaDPpeK9P4-F`(@zX+kS2uN;IvhS*By`Yq#6?` zz&Sn04~=1V#cuhnif*NMYQ$Bl;2hyzOKB)ZJou+PoJ(L)k z5L*Rx|LM;GK9d^2&2N)(6Qi^OH#$IFX?$f@XOs>hB{J;$aKq^!Q$iY@+6JI)@=_w< zbx&87*-D9UQ~y>juO^5Gb8@YZP(IF1{GkPC3PiG1_5A5fnGeCy{8@wTzT8X|M>IUi zmej@MNjv|vYnR8VTgmm@=_W}$dh&ynW;uGU+YQk_V=_5ipz>t=VbIUg`BRDTyqc!X zd4J0c3VWU|TV>_Cvo9x7lHwB&LxxhrG|!$v&YPwJG4BogQw;*!aDQ}S-MIH9-e%x7 zc*?bpK*l#DdWTNWWnOLOD}{X^_qZm_k&7sM)22{&k;fKbm9}i1G82cPLH2ciuOF@H zx_BYsg7?tAawR~^NMo+@R52iZuM_it%R~y+aOQ>g?Yq;RnA|vSdUd4&&EybPn2C+j zb8XR#;pm;j_3h}_$gO63-Sp|t-=G&FvplAWZXVfkJnBRL{sIIF2)g;z>Sl$ND~I&E zj)A$lH~DX-uUHTpD|)r{7YPe6QwPAoull+^QwU6PnMkkgF(KD+cAX0Y_LnF%kR;1^ zigv!m{=+i(q2j$PQuk?|mYFZpxAm3Zehnza443gyDKa-3=5L3Cjc5?WhN6taa{QHm zcV7?VU45fQn?||-&Iadi`6qRa_brErQC8FMDN5k0grUdK4^*AdmRN0J8RWLe(eVcz z^B7zT-Kx9n=%+9e*{?AJi$D;N$l)Pl>K=AAem6g?N$t*QbxNhY#Q>zVSFU9+x}VF; zDSiy1gFQh_+${{>N!TN|f9 zm1f^WD7T0-jLm)@_9E`*R7wT2UV9>xb&<%Sb#q6tyo% z>ld0%KUw8!-YE*wFN-UgYsBkm9=QyqPVe5SX`>L{^SE9w3l$~&grP-x*>{LW@tN51 z)5fLHX0xIORm3WOA~J5_WUBg$@0&Tou*7x|;~GEluDZ2<2m@OIzfVfHjI8&V4qKe2 znM-#BWb<1jVX2~xNV~Na#Z>j@VXRzGi_W{TNbKcpFogO2)>fT#sZ#vMSa;iei%1;_68Y?<|cBi_q+*DayTX(rfVR0t{&OT<+OA zcX-_M(FfwX2G#izE3H^^%@$}OGSM?ueeJYS<7hmZZUV?K18^0oK%D?4QuS7ZD$yc4 zSNC-@Y30<;BZL)Ck@%Tn?fG?aMGLu=%;sd~p-We8-4BuUU;2J)9?OR0!hnXFY_&PJ=yG8z*{4$&*s9`f5_ z8>6fSv*aNaAQ`4TDjJ*MQ%JXd4FHl^naG8j0|Ne87xi|8qAXhN#@qKceZ=tzF~!9} zi`{rQ*3UORLRTsda6qQnbct5)kIk;N&SD#^znmAcZwhwlRY;Nc&5$i{ScYx17+XJH z7V+&F6a9kn4TE##qPnjcG%1uh6LAYkgjtlm!o_|cX;~-o2G%5T3jrkhxm#5%)<^2! zqV2}UNz8PeanYLq^x<$`u3$)Jf{DEklYj$2(sOc?>ECCZArKLg~#$ zL|TKAG`%6iminLQVAM5E{a*orOQx^U=UWG|;RiR9hOl3|#A0V`9bd$Lfe$>Ib?88NL%S7KYMosakq48-KEwt71p zw{#Bx1=<-b(<9x2SUjG3jo1O76c+Y@KYv{WrbnDRv`dnM>+&^rmE$rbv}XG667Knx z6M)&&((eze{Pe_gW`kr)JRlk*A7I&BYgamGLAOPm8Ps8nQq;0}Ko{qI;KA@~Wbcuo zH&cgB<;8EYbh-bAT9jUNv$T(~-xkIDs<>S#*g0@}({lt<;GWDr z;7Btib_X{8-c5+RBmP0azUo2)z8pwX!IT<>@7|r#9e%X%=HpdHCfE){h4DgQ=ynn- zUeUH0^|g&Pw5scDwwzkiDc>yfUcC37^tjIPl=-8bHm?F&LOKORgBLy0y;7P3d02<^ zB<#wG94&khdBo60`f*+adsgiXSm2uCJON6!M*pS`Hu>^S5}s0fs~EfQNq_j%Ew2b^ zg3b6YZMr#=RwVIfE_rC`Ccl9ffmoBRUiZjEnYV{?cEW>G;=fR}{|S8b-&VC5|Irlq zPkYtBEs_7~yxYGY@-J1j|7Rh$f4|!Q8FFJ`V)}op+Oj@Fz`bDp{Zalpfpv~{LQVp| zXw36Ge)Aj@Cl^V>*=sdDtgP>gNxzI_4F&ir{}?#WqZoC{fTE2-4ByTdn+Y2X^2&rW zS`ebkIj%i2Z248QuORa&Z&M0{0DF4-cyk}0+FS!dJ3FLCV156sKpG`!%1u?FM1?Rk zbS57I+GKkpDD7Qi#+l3+9r0llA`ij;+vlxrW50a2*tWZST8boy8CN?h!lF%Vz*q36 zuHw+Le38%j+`sG8`*Ln!^4)D=3BLz25YjA(*iT3j1^?U9=Z8-Hi&Q@t2ANaiKFrZG zx_ZrymUT#=y>ojwemA1%;b|2JQ?cgO`@QGZFwscNhOtp88F9cDQ9NR{%9sD>cIQE* zi(XiNSt3-Z*~b|D0hSl>@B|S$T#iiWrqh9#j#Ia%3-NIAnd5`A35(4hb^sLI%mhSk zmQMVaSI68HvYP0_S%9^gSn30A!C+$C6yafKeEVlW_N^y}0`llZs%Y8B$O%mnFdy!u zp*&oxG3HdbgfP#0u?l0p{>Frz>=qTNKtUK!BvC$;%;8{2+dM4^Yf+-5LteJK1}I?$Dozmr(d%NI*VY+K<3ISvFND`FAr{#UWz?JT=$P7pPqctJSMLQ`SN{ zfgXtQ_(2jTgI037Rt~)AtyWk_16C3!z1D&Yn&Eq7yZ|4fF*O^{K8A=M8GHj&5m*SD zOzu_0T;R?S8_qg!z{Vylnu?=M@jN2T=mIFTk8EFY6~;vf*PGt(OxTzw6`+3!!F=T@ zgSNl;CN!EER-_~9?mB8Ck{H)HdL=@ke;L?LggN(fn`r{!Pb_6*u*w2B(CmbyG;QgQ zvA;>V?_I1AzFtcs76@eBS){k*sjXHZJnNiGNz!AMrR>hD^mW0uHClhz^;D$rwjgvl zr+B-u<9Z`Vta3OXSv34k%SEz^GnIKAKn8y~D$*>cRcfzJn6UuCRtTg$Sk#NZg;P_4 zUICpUS0sD9qVg|SpH7XNCLDXi6k(o6k#alOn9d%uV|*x&a{Cpmb!x#0mCii9t=GCX z-QJ|K3=adq)&jx(xb68_=$6tTM2UKAeLeC^ET2chs?UnY5NkPq_a_M*#>oZj>b+dq z6cy=IzSSfFHgm5c&%M78MW&yxG_rw+Mu%-{Ypu-MAnrjjx*zbrS-F_M0?-jqJug%zYh`ia_@vDXJVr1U<2zn-4Ac4HC)m z0gjzSfHiW9fWBVI@7r*rBM$!99%z#T-W1AoP~&Z5u9y|IDBxKoZa!#md52Fh%G8w} zQ0M+xZ{veQ6dbV>PTx8BsanW)D+}|E7S>Jm{lYm+na1Ft;=rv_k!qPLnPT=~X%V^a z`c~ij;$^OS$XHaCAcA_{ZQBs(#>Xv!Uf6j&>*_w2OA^>H0D%@6TdI~_MHFZ^l12k%kPtf38`FJlj5_=aJx7AO6SVLIKG-%3r`Y(XBfm7O4?Ky5c&ubUbqE-1 zk`SZzX19=8-kP?V`43+Ac1B|Oh4gIq!gKYAt$as@`;L8_2#;5-l{?TGPRnIxc?;MioZt-km;OHnap*}8;X?rVLe|)`}`*Y`@B9$55jPM;I+{1ble8mi0sw~)A}$694x!Yt^^KTTQ4C?r^hEc$hD$n8 zSnbyf#V5s#a-4qi$v@u11U1*;#mpCHnqV(>sMAE^an{XYYx{L{6H&U1&gL&!4ufDs z&`KCxj#a8EnTARA;I=xJpKVy`;swBA+YN7|XbNM&!=Y#CABDqK^65t!PI{ToEQr=g zwInQg0d@=G3FWk%!jik<8eAzYonmIYNs= z{%vO7*e&;uRZfN@HflQl63PWxWb)~%Q`4mZIwHyKU3)zz=nm9H!Uj0lGoz%r+bh*C zJ+ov4xLl9S^;sFK@`=pn6cF*9yhi$>s?3dKqpXdB1-y%^!DA1fJz*(oEzFJv|0S;H zHA@SCX=Vb?+A>&{dfgW5eZ_K-iKY(apCNO}`@q4h>W@M|sEKoH`YiE*^ zPg}oHHAPKIs4pD9ZXVKlJ2fe z_{}_=C1Mmgu%U z5Cezm^hs_mRCU6**Rbr6XBB7VMW1X4NY+S7l{0WhsrQEcLwKL49u=@dKVG>wJ_RPH zR6iTf|1559geX&$Tyn=^f+M$v*L9K7E`D`J3f;ZrU)6QGEK>vq06|rx`zZM>CE#CI z=C1Uvs6RG=GoPP?d6OSlNA~jxyPK+z*OS9%80g@80F zH1#HvBiTEVv_#6!%5H8Ptr!jT;KA++Pj1Dg6xUCrz|#Ku0k_;B&NNOEYf%&4gk$z1 zAxEv2kt7Rj9-EJjFQl`0Ji~1~m)Me7 zM=kJ^MQSrzC@NmnBFS6M#G6ou;3Y3|J=>M#c1AB~qxt*p3^7Z7%UP!|^G^g1M*#`9 z3g{K#LntOR<6^Vsq3qoeH0+O8YHsyozpWk7S(CHe%l)|b7xsih)ECxPb9rSYfo8tDTZ^=}gVRPHe`!+PjT3HE&P$q3Dq-)P_q({17A>)k1?3eyj2qp4((?FpAW`3v6u!#B{Y zztl2}6~F!#eM(VS73COVy(Vk9F@zne8aju-Ta^S_hCS@LGAR|3921i4zWL4yjdzamI6yntxR6Z9mW88FD~U(R+q_!I#yWz!&Z2^UISO0PY{vFy)m3+2WiGL4v<)2EbIJHo$AaUO713JokK&R@b6`qfVgC$Nj1eD{Z^LLHViIXeu zTGYibh0$u+5giVgB{du$)4Z2xyuNDUe4f&Q6|VX~zcycajP17yamu`vY2M8&R^Cv@ zaVZeVs#M50C3SLm9OOp%5qun5kn+v@wxZIfoL& zAb^qzZC!>!h#1N0$6W2iOEQLTd$AA`A}J_4`7D(r~{*Eor|bL5xi{6JR;vu zyDz4aGb$%a3!xae+KHha!n7MqpzkOGG%o<(M>*%iuM}z)k>S;a>EbWhB0S+8D&s;) z*#gUE!t9uZP%GAsw8-ei5WsQ3GOvgrE3gc}56=QBBIP3GS0vTzOr!O1P=pjr zv6#ce$rRRjD(6nmke3R>5D|xtl>HvTo5ct63lo5-NR(JsYv|o7-FGt6xd1=SqXC8J z2O(`{K+TH_Ue!V=-$ANx_;RzY!pv{q$6+ZOan9cyVxw=G@pIkfE@c30CkmbXM`@V| zLW#Ykjm?N{p^m`7M8bF|A#rH+(BZv2xXvNgx0u`YYg*=k&_b(#p#d|#-~AZw4S<mJGOqx1L5dt01--%WDY4TDEgo0P-vlu%QP zFZ_^w-(c)p=6v01bYUg9ptzb+lDGJrTQ*+ZjE7w>fAlMr*>1F{=%oc5Iem%vnwRgJ zJtjR{MSOOhE&wkZqfF;8=ov~h{v1TCLKxd>bFRwiQpHk`Cng0_aRNT*!S3BmyjT0O zRfLFmijp|DE>Mv?e%2Y{uDY#Y>oYi{;T~5KSL72>zy=f`tdk>W@v+#?0m{lNZE7)Y z*vF|DPDwMv0ek(HK`1F(kE!~j_6jI*gtG=KzraV7nGs|sN2>x;S>Ve1$XJv-D$0#g z%ohL%e=bgO<%E=?$)(;W7a_-))H%?QB*Caw=vuW<80D>@9Q1O^dCL-@7`#F64ap(kr38nQ+*(N;cJ{OVTYm)!GmP)sWSMwdYkMt%Fp16x z7fc4i;E#^yB)wO1xT2b9gv4VK1u|XqX{1Qyb@OmgE^qLTM0V6L)sHh*yjqA&zjT1Jf^!)4K%I^zYWR5tZ9hII+jk+gFi>nixB;BoL8yAr&@p9g zzG-;|H|?sRkv)DM&AO&(O;+-@w(AALa3v5IWE}R0gcA1?Su3(vQ|zlS{1w~nfpK+l ze*)h%;>ARe{4E>t9PV>1-UYmJ!cY^@g~C;FBiAW~kWZ?p9T9Jbibe%;ujngpOhhFV zHSe0ej3s^_BK^{;l&qyE(0`H?s+fGY=drJ}sp7q;)a#9O_#lYm4Er(nz-gwi6rRMF zUYaqMh7$hva+nB@6+Io(bvL@6hDNG|jHk|VT48c{G54Y;4C`M^m`2E4zBXF-&X09d zUx9rQi8L^XU%;YqNp(72+J^PPcXN4GQoU7c2I^&6-rHVsQ?-PZhv%7dNh5=sqxKCQ zN|WCVTGyF`h))u*>FpBgHj%K1=Oa;ebDYOg&jEXMmo=iI(Bucda3LrqC*K>afj9Tc zAlY$i6dRn(We zoRTj}5C-I|Qlbb$sM={bZW&+iZaDpvPOhx;r9|;`kYiDy@k{wiwal&bsBkVD3AaG-sX1;*f*? z)Jy=-?O>XZ4ZR-j$v%Zx-M1KU6F{v{t=fr-wdX>J`^R3)0vV40`UT&LyPr_O$H~6< zVjphfHCF|#b@-Y1*ISE#=d5UbgQl$33lqZ@=4U@|Xp1xUq?&+cT^ZwdYcom-w-5fg zJoZ@~+Zs!(l+v0;j<+3m2t#pTmUyqix5I?;5IF^YlCu%hOOmUAl;eiBWGwUvgt?aK z6p?~DA@oQS`tNV80njcv`sEE|(^2%9RVGzg>kH9e{cOe+&D590CeL(OZZl8VA30FuL&KFnXHR8oToDmQ8V6{2Vr zDQAHD0A9ZGqLN&wG;%Ah8J>U=g%x4^X#R?DV&z|Q>6~Isjp9yUkV9?N*9|5*{=V@7 z@6hwWH`n`q6Hdjnz2=I?DeX~ftVslw5^&D{6F1ySK#v;hMQ!xs@So&zq!U^@E&*$lG; zj1UOx9qiDW5p}^ro!>_t>vUuOLLG++j3ud|O&Lfqg%oNC0!q$rjT6cfaNzM)i@Wa% z9UwZ!Gu*9XF1u!K^WJ)ChMfzInq-)gyO~BMD}{KLRV44MMD6@*1|Rr^zH#)O<6(g_ zZPc!b+y+J>FC*?6%XRqaald1oIxdpQ*8;OoU|V|lyfCC};T6E9iepS%`?4i@e+!6# zzsE$NsbE|jxtklO|J3SrvM%B!YYx&R2dS8;kBrZR6LP3N9IgF~ry^zavpGGL|IrwG zY|K~txEVbxp@ZqNpS<7l$ia>Ma&4Am@oaLcD|F4<2u=;;ddOI3x3Ye9V?;*>>~&%l zN{yP&v5CH^5fTGqw`>GMW>Y`u;|^AF)^~VP2X5}``S3Fp6zN-t-+xD;-~?A#BMT59 zxNGK0Xpa>B%0F#&wd-}Eq05_z$9D~z%&N!Vrv%%V{f#%Mr?PiP@l+mR@xNNoGOI^qMAA_g?_HyLu`C7XlT@*pg4fxE2I* z?K%V)(5pEnQl^}mCPVEAnL&?}UAr!a$Yr58g+edbBi@8s_2J<_02?K^sktpu&X(0` zRO4fvC$LK+AS62u>2OU%Z4Da>(I5FLu>bJNQ-~eU1;2Ag5T)9SLAp`dq5y=8V%cg2 zE4RzJ0f7ETONvabsg(2+2&6ghTgLnrpTx%YYW{1DQcV-M&v{bLk6FYm`Q*6IC&%wH zu>Me4%Me9C2vK+nC%I})Ao*z^kmYVquOo!I(8Xb%1}JHfG!lGob*|RO0s)ZLPGe^- zJYo!8k~~<)yY#BLzhZswP6RX z`KPg};!hKdhy-j-z$bBxo2u+nVjh@{N{vrtXZx1~fx&y_pvDo|TG+1O7VGwFrEKT}N(PxW z`b#P6WUf|r$R1oK3&dMdYftP7($Un?+E9G@PT{NQz{0k_?1be&v5e1~s zj7r9!bwg++khMKK7<(hPzezypYVH>z(~SM+w;o*!~&N{Tm@Lz1aU-rsE%{{15btm4$`#zouVz?vDO16kANc z4a?E{>kUF*Z%r2Du^nTWOH*6Kz|)ID%B0x2Jnl&_=Gg@=3U5eyW9sJ&WyRd-et&aH zH{g#MgYb){V62x`S>qo5UP*BjFx2?bFvQ{nr4ps%p) ztUJPPt_KE?eK&kQRhyZQS6m%w=I-1aN(X#zYbhje{+-XTi;<}=*J8pKW<$$ymj)Mz z@A|S7&+?q&##PMaK4&juqXb=0B;E1DiSe7)B8R|j0Lv}IFG!dZE_}r>4+2k{#2j(m zX({cjPzgx7>;V8lcREE}5fPrmG>w4o_07$>M7Hj z(@acK7dYM<;$BL4jUHjQx5K{|rg`fZK+cxkGs&5@IsUiG0RT<&mo)KvhZnD#e%#pR zNOdbGN~IsX?iuqNf}Z>Y7v^t&jevBu-;X;M)LtjA0&-beuPZgHbk;O@tH`-skJKtQ z9c5$(vTM|CRM%DTtUAj3!N%Cip|=1|)V90s&39rydZm5U$MLnDXV^5&$TdpOi?s@! zvtBIH=VZZ=YkV9=8lFM=Mfar3A{O5^Ki*0n_^wlj0`*W{cXiUbL(QDQQOx%w}VWlV?I8 zxtLLCSC=y$CC9V&$_3j1M?nn9Nbm-)QSUZp{bheX5jnnM%FypY1QVyNZ3U;5wus!IhS_8`^6frfoUA%A^a5sSlA4)AghL9 zJCMWk7p7GCc;U~cRi~+wpj(B&Z3K77A-c>-VnsKSfH>!5)}t~()VguM?}@HBLj=&D z$9ri$8k0m9z{ocqlDr)|^1{0n_045=wTyf#9V1@@k7&Nq4;4Oi@N3$lkXNXRxJOv5 zeT+9t$oB^-k|jy-*@2r^_+yI|FcRY=->{!^(q#1_2u6zXSViznY8rE~()jdNPE7Fx zHv$zUX-}AJ7c3Cr1eSl|eM=ahx{vRkPbN)(-@=Z--qt*5!I8ZDfg}_Zb(5OQgDLAL z3b{d7=7a)@mChHhd@?%4Ui|P_aAqQnc%+w7WamdCZI=4-&x1!wj-8G=s27M ziZW)4GZW)}MkzpW$28-j{ZlgvIV^I+$Z8+CaD49EnU$kbQXmTU-IbNz{Vl-;MB zqdstIphlZU*^>}ZQKK^|6jgD1J`{c^TzJ9;U#!zz;XatzfyXRniE!4Sx{((nmpqn^ zLH?8u){nTEF(^K4^JA7oL0f+(UgN8NJFvmzg^hu?)^cWqS{w*;JhUB(V%&% z_7j1bA6((NDKq|~8lMr?Bh**S`VdpwtpQO*pbxAM$qjDkJ_kN=a?k{W0K{eM9TC=YVg8 z48F@_+E9Sc*7B|}3^7?ngPLGOmOg57i5x*Q5g=zW-azmqhLqK$lxLGzxh^)LQK{vH zP(36a$yag3Yju}Sa~+DvFfQbj5m&@xRPjwyY=F0_Hy(UoL_cZ&U>iE+_F_Cl%UuNN zHV50y=FMp8mEp+w5OObnZW@j<$OOGa%uNCT+=x*Ow3676J6^Yn*Ci4n`RFZVKY_Q+ zy^yN7*Zcc?G?V|mqD{}8ng@)OLOHJ`Qyqov&l;^a)vks=j!fL146Y6(SRn^h-)p%z zMwBdu{=9mqs5yY75;~WIj-q<;umg}W`|UXC0@B^H9|AgA6~+U>lw?7lmg{n8tg<#h z+=LyJR=mctNa5vYcINmO&kc%%+N%Sn*!%a??*w}Tc{59v28um5g*SjcEN6VcKZSCg;irYSWNdB0 zC5zI?7KMSF1+P!~lT-B%S2MHqv<$e*GAX7%+SmekBOSot4itTL-*tLkht&k7wDb~z z5PkSc63wjcmkw`%%rfLVGGPXnL!XWOWmtL*iKK=azNm9(+N{4p3=Sxsz?|2&oVjBz zE8!=XIa|5{g$iOP21%(OyR1Of#eQv5Yfk?erPtxs9rXt7YES}tXs%P&bPamR&}OuNIoIR7gq64*l_XPemrz5^yzbjfk4Xc_(yt_{lLqbqYGAWk z{u7rixq5-Ur1~m+k^(l@F79|AEv+2|-IS=ow08EjgX4b)9H>C> ziw}xLEG!9TBO6n%rg}3Ui_VAETDjA^c16{-Ifcp$q*DAMg9x_Q@yGrbwc4AFQTldU ztpf}@h9H@Bj;R(Z!nZlcs~M|5=wMq*EL!oO)6;K&%?>Ad4?iN98AE9N+FV%X7!YN! zx}rKogPwIs%>CF359nBGr{n>9h)=ruJ&9Se0o`BGZ@JvV__HDu7ZH)ynYfw7`z)Lw zyl5~AEVi981cB5g!)lvdV@h>`Lg+eSMb<{q;O!3ai^fll&hKPSMZ>9be_rbnIb&5rX8P%cuF&5Ce2S=Ak51VPCpM7f9?$YwDD$VFjnljp5Xe6!X zO3}z5RkxrXrjTElDeZl?s~+*JoyPVoo~<}NXBNn2a^l}Jm4e72LChdPHY(4q=b-gJ zcy_L%4O#HQDzFD`)qMdFAx-Hxl>2L<=CIi>D$o6DKE9>U56C$AUI9MD$EMpoKqh z@{Rs1NC_(vw};4YjJ(yV^+?1mapunY)xmcsEpnD2YEPUeftxyKf?%>yTGhqI=jp*r z4&(;5mfAYPpXb{f(QgDTBOfSI=lxP=Z%HE-;AY85Fh;$lQPj68iZCsP9dumjHuNVy z&Tn;dPDs;ldHh-xrdP1MNQNrg*{qG0E0)2AJp75(=2`el^(hIuhmEDt9agj%o@qm1 zwCbJ~z*24e7UGwAM8xX2a|_LI@VvkMb*kIte(b&h!Gyk_OgFi9O!Gc*>8A3R{}ZGt z@xam;%CO^ZHWC*bxJ}K`YZ5w3Si@z<-cHD-KjlmkBaY!08%GQL{L3S1J0XBPdFc(& zRHiCR8AjXl{ns_!nY;LiXhDp_tvFl>`g=gE(tc-iJ9e4lrabZWosjNAkQ zh_$|*X8ARj3%?WAVlGM$U`Ke7K^2u!rLeWiE>;U5F457}=Wmg3gh@>vqO{#d1w}l8 z+aRv8`Tirdc>#3kR!JJYj{`x$f|t7cMCT{xpIQ7A0*d-`OU~dYi9(MGzfH$7+?Zw>0Sle-E?5S3sZNMS zCP2rfw=Lv(*AiDA2MS5s3f$h79e5o9Y z0j|LM{Tj#K{fYF;`UB8W#~7=PTd{Qgx-Rjg_;h5DKfzu8?G$&BT{w-lcoIK;eqCa~ zgd;`&yIj=K^opoSzFhYe=sg#zst8Ltcb+>OyE&Lj6tW!6iu3G-_cATBrQ67J{Z?!> ztRNf+ zW!dNmV3K`JzB!Xj-0%f_V5-#9sFIM!g>hXWP$sN$dy$a6J&4N%gk8=sn;sbH>CPTl z&H?R@Rzpz7GMyq^yd|Rqtfg=otSZCh42TOqPL&vs?|=#3EM{s;1PT6YHu2b$6O)c1dVex!kyxz z?dq#oG-kohPSd2H(dp|l<;+7hT#Ow@)vn^CSZZ747fU&eL_kN&^m-yS_zwwOZLzLi zUOhY17Ush~ttC|IOz732jFb}>o{{cn<@+qvOnprEi5R7ScWh!K$IN>Xr;MA|(>HDf z`4Ovh(y9(s7k55MRRISC!>k|-uQA75X<8KirjLm2eMa|pgy!24Ou6_*hMYA~iRO2~ zYEtaJBzTrVhES`ivnUAx>~x@By550h#jc<$y++T6Wz#Eiml1;I`Jv$fQ=Vx^mC9l) z3Wj0{DuUjeLuy>Fg41@}0R6XL#%EW3daOO5sbCpGDs#KGa2W0>kleoQ!i0n{*$PDx zCgN+zSxZt`REUcZ4rQq%R9lB6W1(Pfn)z1)YXIH!Pr`>>ut}uMv!b6nX_h|(#EnjCBih=KQ;=`4`YxOeetPUF9UN-ml0h;I zzS!G(ze#{iyk{=Q2h3+(9E;gkLO8-gYtM8&R$YawQMQB)7K-rFaSSy~jh3lZbA(R&sTntEOH2VH+%<}hy;N^AS7fF6G+;lj?Ny(Kf|qpqZW?tkHiYj6GCW==G!dPu zs_IjA3Hdn_q0KN6YtJ5*+1V>pqx9+q_9)P#OWDj72t{S>6ZF24D&~X@fxGhS_stnn zQ}#<%7~b*&pNF?VXT$pgf76T}V$@g}xAE~&)g^R+PQ}T<69=BKW+4IDg&uUppLbK< zH^+{JvSw0Bgj+ALA-ItqKi~^)1!o10VKC|y-JrNuKBW6Cv^%?gnIp(%1ZJ&OaUbhM zGTp8mC%5RDjpS;hd%>OhQTW|g2~z4;9V48MRL=jL%ao#i3Ang~vxkGfQ@e)@Wgb^8#^JCAkz3d68H~!IWxft&EW-1Tr-!8))e;kI# z`0gkX6jMqII_trnZpJy7qU)yF?&PDVB@|MHsC*O2(Xt!B?0Of+4&^%LLms!Fok);K8xT)Oj6(QG*|r)^q>`XUbvr$V zQy+ukIbGM|H+MQw)z+x18gcosaUF-;qSb%2IlGl>1(kh-?M-^^ioo5^vNa>Gql-&2 z1D1^`bK5apg|HPOdkz+0uZ2w6aJ|2k1fjU-t~gJ)KiyFRySl|wm-+01E$b1ea(Y|n zU=3U84yA@vcNsdA2zR^rDaDwlr+H$`F_{6RdCcHxb_T3qOvw#br>GMTrQk5sgi&?; zt{^BEoE3bqX7)4Inb!)%`ShwJWXLn~)E1{&S*irRoodsa!=}-Bc-58c1%eDJBXqLI zXIn1lz{YmdE7-ef(1RZYWeh^5q+1pt8+kR*v`zbrom9gCSc~=By9U4V>wJ}`}v1UlwFG_NX2a_|%bQCg| z;mYp97Cc@?MFz=$*>j=35D-Pr!;D^KUKR)BJHfNR^}%fbCtNs#U>(ei{uMix4+Q9YGB<;yb`uzJN%b;=^SEY@EZOw z45{dRHroL(FL=i0>Jumn6q;FVDmnHm)=(|@94QIRh#JRW*2>Svl2F$n@?P3DnCV8^ zNnV)yd`9#J)QBz`JyRtBJSNv9A4uWatTk-bpc(@tVBc?jfo**)H3zNPk+1W2G)t1E z^Psg<5EKNNOXGyuT|^e3fQmsPrsRO0i-cleyLytnAv{r$;8Z-6KZ09u)?K+q;?9DR zsOtPST0<()*_HP9-F$Vg36w-<1uf}d%HZ`%=D|n~8eEdCn{utzzzi;o$~j?+!su0U zC=Ue=pC`%t$cSXt8TyvCD~<<96hsPXmsS!Z-|HED`~nQ@;^KzhdC5agb$sy`^iUl( zTS>RvZsMzhKY|9+I?TqM&alx4^mIQZBcYhnBaCD$FsPC||CvQnm^>M@nN&tbT?{Zw z6>V#TB}lqqwq1}7Q?-h>k4gYqrheg3DP<%=b~F7Ao*;}B;tuwoOtAk=>)U@nwDC{< zMgLCb&GawjME{Eu?0;91^#5yuO)vIW)5P}ARet}YhN6F*_&-du*%`uU&GkCUmwC|^(tu{QE-BnI4VoEe|-u(}ngDl0wB^kX3?f5+Kv7}EP zuvTdU-%Qs9t!(`$D(N%XXcsy|raxJTYpzqExOeP1RMF=3Gqi2cErvT#f!qmrL?LYF z!UHI>Wv~wCS5SLJ5d(~4^&6PjdG|krngy0odkAY!JdwN$L4V*lkCGj%Q>5ejK&UK) zKIHU?R(ym5GO7976LM^iFI}$BzI%T@BO8N@ffLSXXXd=Dq=UMnf!wwJPYd!8@ zmsA)Q{jS|^{VrNGg9vCAaB+g0{B?nC(n6L?zZPJ~1NSuk2aHhyuOYKR_u^J1-BUV_ zJw*?ATu?dHlKEHNbj#u;Lv^~v`j?#>A^R$LSif<|LkKds{puaQmtX~LaW)%IJJg{# zP(Y;Ud}9#f=oadw11&hE7c&6S5#RAv*>cS@Fow$3NraZ^M=%E}`|l{s4RzkzpaGGI zYB$H{(I~;ut<&ZEmN@+1>Vqp-Cy@mP#F;!bOQ|Ow59|RMrkH!v{?D)vn|qqfm6ch6 z^v;@3t=sy9eIi0&S$$YtJbGxU#J1BeX8g8o2uK_i`I{dNV_=? zUAJai&_4DX;X|O}5vQODmjBuV4r=JQ2^9 z{66FhUj*x(8F`-7Bov)*ETUsR@rjSM zy@qae1KIR9-X%`>3fpEc6Nf*@{!#N8YhUQAB_9uzHS8nUF0`bgk9laoM}`mQpk)60 zr6TRAWu9m9K=9X+q`&{U;?wALlM6i`GbN(klfV4NJ^i%J?O(t&;pa7HNd8@BgZq1O zC(QKj6lqRAso7N?Hl`a8?-`VaTl_iK6fjaTuUoFFE~}rgJf69$eL0Fde-BJx||^RAu^RGz{os$bB*q%4|nF~CT+ zz!{GYxc0l`=HUUravN&Yozx;AQ;Vbdv!;ppm&>q!dbLEwv8!iz&KWb7&xNv(E|$Mk zT%rg3SbRo%k;|fZzVY?J2*LDI?rT#A&X^eee2jDERv(sVR}U*LSMGg$P7XHg{_C+r zMZpLY$9#!j&pE*WRw`9M z^-haT$oa>ifItx~BqjAZ6G5Ef;?!Eey9Mo`HvXeBU)omvhLT9YP_~&ARpf!)O1CNr zy?6JmDL$uR4~J_D=NJJ;C0X3aX(%m`Oha1#`+(HD$(xPO(kk(({d;I(u>S2K($*=u zE6xE0Qx_^hm*c`C&`yVQd{LM2Iq&eGtBvYdQ}4S+*-p5`Z4$t^R^j|sNHJH5Z?^pJ zPuUcS@#MyWgnr5@oXJPuuV}?f%cYP%1;^7M_Pz7E;lOG2W_p>XFgGs#ZD#h=uWMkJ zm^o%??IwBj5|w{dx7D+dd40*Kg!4A$bqHD-uk)}8=pGKdvg&3=;w92No~tKdiZZeM zoctTZfZ&s41=wB24gps)fGtB9@sjzM_o2#ZaYz$mO`+5B4r1a$|YO`8v%XosWbRxeuNzqCL<`=yrQg@SVC{h(jFvmfdfS& zF{)dJ-n|*g{*<$j9H;X;ZRu>}fswxM0f|-G_ZvgZMffNyY!ul9JlN%vqDZ|oq{TLF zr2arGv|s4)b^i%EflEDz>^i1?(T(%PgULqKhWnkus_sa23QAs<9{cM&llbE$(6cBo z%-A21af;ph;suKXl!=6;%zQ9Ma0u+giC)oMOB)ZSw8U;<=8qs57o2=>FbA$Vz}xH! zGYIfC*Mvk!cSkRT7Tz5NzZ3~}iE35Oz*2RlL;`ESQ`*bh{=WZ9I==^AkC9LVkz_zT z!#fna-G~(md(6$(Bq1`GxxoB2+vKZ?y*ZR};{XE4s zv~O1Xg-{+6=`KI7$?0`g^pUb&>Vzj3COKmwvy-zg_)73DnMmQw96qG}xBESJ!=RF- z{)&R}IS!8e0dZ>q+~WymV96@VicvM3j+Kira3G$5UP~kGf#CarqHt+s*p6N#{k!yP z)7=6r6ILvd3J)9(3XKa=pc9fWX~sb0ZZg4S*ify1&81syS2*#inev+V(UfKPJ^fK~ z!Z1$k(U8xn+>tUCPD-lm9|Yrg4iHm0rs}z5g^;{=`m?i=r{m#TugmAUcXafIjnm^G(y%ux zNU;5xP(K%Oi{>amYSbYsh`@v(lB)o0T@vbxtNwTqypU#8uNTCLZ<+&eo~QF{?X~hA zQo;{rzL$F`)>lb;s#W#6SdmYHbv0!W6gg}!Iz4h8rMX&``Nf9V4Gc8h@w+K;8!NbeS+Al5g&?Lnh04m7%F9ehxl&i|sb12E-d zHc&M8s!q=V?PqcQyJHu1z@dh;>=L`hz+@ zZ7TKYpBQhf(_AC z4DHuu3NV-W5{c-qLpfaH2pMJq%n;=DjRrg)G)2*D_o!! zRKdpcpaPXdE%1egd%4T_Dt>@u#QOBeQ+vJP?G7$aO{ZrUZCnnt5d2G9lhh$o93;bW zHqOg}`6>!TK{p1F5Aj6Hyr%c;l3u4OmWL2&R`a;{aXIWkRimOCk1=MXsZ}vtmI}&B zEUv7=_h{M}FI^L^+m@-5VJPo>lgf{F0Xic3Er*JR%1P&j`E<+^U-`czBR&N&Zzqc+ ztE-X+kv@4}_E5yHO66y9Ehq45m9)EiQYsLsrG4{0q3%&Uj|b)Do{?<1F24%Oz4Fm0_hD(kZd2)xSqEG*;@_(lBw0E8dEGp z6%iy5(Sso|q%k-wn~RNhLQxK_&68T}>#6;Lht(iGK0T3@=1ux{!4q zl6+s&S1sF>$64(pLRFj8yV_xR3`DwtohZhpygor<{1u9uXd~Mu<$J1vwO3D|qd<3dSFnz}| ze;K6);W7#sj@RWp_&s;Gh!7_8y35uo0QEi*fmZObyRG=+mF8J~u5)%DM0+^*nO za~x-i+n&ZjyXBU?MW&YW1{OS}2E^MK=1{MDP0{=)%Rq)L!+a=QQ#AQ1B(uS{`^AYq zE(5W{;3ezpdZezOxfI%~B%aKYFy34wv+fpG@2T`q-QCXt_$Z`X4?*2xpC@e#=ZUFh zE^VNsm2D0|kvo#_O7wc0CK(R-lBS-tsb|hwMJA10x=Sn_Y;8)Oe*C0x7)VtmwrOCH z!tU22Dq|HXi6~YQ|yrl(R&nWc>mAFLy$TOR3_DH%3YkI za3nP5*UKWEe20n(2J{Z#Upn3ykOLp zvAP6_U)WXnG&&?G;{sy;1NwqN6%s9~r(?x1yU|U+jRg(896{_CfW>nOMdT3ia1J04 zE*D%>72>(&D*Z8YG^dihuK|{vZvE9MkCdDYp0I{BESwGs@TivuJKLm}VFv|OS`M8@ zoCn%|{Z2Pp+C#HFCyy5y2)ymHl^8^TDRFW6?2|d)hb+eJ4~E`2%x$rvSQ?2Pa>G+SI$I=tq*%$s$v5I>hGf zz)TSqhll3e-K%WM&r|SsV6(XM-xq$((^5wSs*URMW)X{0k*0G<-jNcp2XmZ$nIv0JDDat-}{H{ z`EOQGbgz~{k~{inn&96Sss5R0EA1+i7-8OaWCZ*Ca}XnLjCH~D)F8C+2(4f4?NyY~ zhPyje%1iRix8L3s*Xqt(&9~&6TuqljPfMlRub>i2-(6c-`HZ5cNEe}0@Ih_8Yq_`d zN2p%{*^|=>ZNA7RyG+ln&66WU0g*&j{gNuifu<-A{xUGv(9<4YZ*a2RT@pWO6KWO9 z<9QbP6taRUy>)*I;}t(c=D-Z!2|Hn+JqZv^Uy^pz^hJ>0_!NDna~T#(^jYn=4C(@R zspKvqN2SJ|K|bev;_q>6I%kuXtVe{fnunr5o;_iye8X7$_-x-QCy1u%n~jH zCYMciCJ-OPPJ?8Bl7Ro!gdm|dX>8syz;+d{5AdL&0oH!;lzT;l7dP(#RZ+A<*0(q2m!fAR5wIpE2P_CtT74MBLO z4;pr_f0;Sq>P+MwBY>35KYsV%3>M(i0v#!Fr*}+sLpYK;H z1gI&;9-__U$GWL}uJv~*sHbhW731N$ir@VHZ(!01C7WTZJZGBI>Q-u;hoy>e|^l;Xsks`8~q z7d^m)+V5^rPrEUc!>3lw+1#R2q@CuFsSDIbd-k^1yNV*>Rni8ffdg8m`WtIT3XE;B zLZL9R*z3Gp(Xn|Z1{IH_aV%t1^pwXlYW1a-{1Z7-pxRN7AO_cbXMya!#A>Uc5T0)+ zWfSl&tOVmtwi7haHrVW!3aTvQ#m8e+W4c7T_?v+)<7dBKely@&HeK35Ck=G(9_?jA zA7B$rOoX7h{j@YyL0mEw+t9v;ovafqRhpb&Qv_u{$L>6OS>vUVIn=L-xyzu8XL1!L z-mA_4>-jf>!ES(OF3#JD8tbu8_x_qmN$e36d1BA_0@QmcAzCbSotu?+SpO_&s{UB9 zCzid+blkR)TDkX8SV z-0)mVzkav$OBI@1N}@jZF$liATyi&1qE1t&BOm;c9KSM|3aL8N@}!!3qHaxiKf$tL z=hf*uwNX)ZN~L)z4YQy^gK$b-&OZ#*2XK<-H*)iunC&{z+xCx12k_s|d)wYA2SL_k z?3Iu9)zBR|v|E<7p}=q=f!&-pObu@>pnA8%(^_R^i0Xbj6tRv>`+_5vV^#MZ@NZN! zOt(#lxe~JnlcB92Vs-*AXR$H&jpCA59Y}=I;Q6^}U>4v!$?PG6k&mgxWs2~OEvpoD6e+IOq2JBDpghliz5FC2>Cb0f&V@T z`KQXOe+NRC|E16Be-VWIyI!sTRS@z&A|C%Z+J7J(%zu%`e@#4uVhU&32W|1X4S~I? z{iiQSXtN5T$bxeRG)tRpm%1)Lq+b-89vrkx$TIDddOm&%GU4pqMgVT3nkKMWbxZg1 zD0+!|oW?FxY5-j&q6WX(1At<^OjY5p7ji25Ku_TolJwiB2yGU}SdxPC)?P-|-38Vc za3f9QHT%h}cAzJ~kojH!GPv>2#f}Fia3e+%+DU9};&NR3nvs0Wn7B?z&a99DwWLCl zjB*u~PM>arCwjKOjODqzQ=VCq`Kh`J-Uzw#6Yy<3QpQys+MQ3^8OS!BPAmZWDBkL< z`aDjJjOLeCQj3cmGNZuww;35p5k4*>4qCb#i9~DfZv8JiG;fN?b$av|0oIey_cZ2mj(3pQPTLKe??6@q-1txtod(n+y zYO<_<=bR&Xppcqt3YoDCN4Bg@Z2-s*&b8Ha(DFrHeATgpAF!Z|-21!TtUQO+;VMN@1@TsEm%atPvQh9BY-fR=&r2}JSvnvOaa3qjhJ)nw9x0X@Jc%U zhNOW~krTJo^l!y&v4$BU(p*>vS}>}sXW!}?vV95nm&o|@lZ6!a0c^_cw5at)ux#=kyLN?_l=yyxY=M)grLp5xsha>Cd4 z_Vk2bwCIdx(RVgm$=2zt*s2zz8%8WV2Rd3Gq@T4syIRbanJE~I|FvSO=QzP)#h`S` zB_|l#?9`rJ@uyQKW6lhQy&UZXLbAPuTlGzV5uYg(Jp8Y0(QXTuvq5X_0;+bTosu0L zY$?XmlEpxU;H0S{d<-5_i)kf?b1k|~yELjo<<9E30(GVJS1Z#}_tH)StySb`FWtI* zpraT;2a}<8*7Y^@)4h;$9t|2xn5f;}ND(li-t)P2Bn7Em(;+YI)vz&%Pn2b+q7UMi zU7Lru3J=;JN>?E_mvf}atvSHO^BJh&O-96=imXiyZjJlj4Ut>>7`&r17k-UDh2|-a z*5%R@g@nL-Be-M$w)drehfsMUs3YIifi;eV_-RIOaj4tiQk^c~1WIcyqw}~zSHxM< z9L1#DbgTFP(q;#jBj3qbg5WZJ>L%u2PJT&l-69NaKTKSfG{3N-w_*B zpxxD4g1g-kalN~_kW8O^engb0;|C+$7z|VsL<4FZ=##)vkczeTY9LC>U;!sAO3}K) zGJoe>Rn7|BBUv(-1j>%e!(`s!f_j6o0eB_ys#Iy0W{K@~d!eGBO%q1s~f_=OW z$MWFr)|br(fF%no&mfQQ8QmWTgH0|Gb(J7E2o#p8E&Nkk-b5aw4hSudgQZm;!rrm; zQe;x2VHVo=8d*mhL;YdvEkWVenP{PH->btA=C&V7XvOKhuIzlAwaMje7A#eTz{KRP^YT!6^L$EW zuYvz;`}dHwFtDk9$!PH=V(3af4ghcjyqzF_!lTsrZD=CHU;9UljIc69rw`Rcu; z#ooQl!vMQl#l@o5`ZH!SvRCpV z`T!FWW_hGntaz{8{GI}lUCSy>)coq}!@;6aeRai{A6&UKl{5+^MtlU7nCr0vudsK7M8*$W2pv)44FzFS57dC}d{8 zoG{J7%$03+J+edrCKm1#+Z4xUv#$G0UVy;}HhDyMD1WEq;BeS#P+M3` z7la!6P``-5Wc|Vt+BV6*NiWWLNOIrMl_(hKY9WDQPbX|*q1CsIS4g@hjUC0~?UJS2 zTH?W9@E|4!fAWn~%R)+#@FOff^OCL#PXkm1tFId_H^3Vr`R5RgPKMWsVS;3Jd|DBR ziAfM3?wsL0vXyX`ZDGLLI=~$R`o|&E%qFMDfQ@674=uS90*Us=eOOo?o--1vjG`wh z8dzkKcL`_B*!7vfR8tG8RdcXrOMFosMz++oYs7{kUc83J7{Pi(26@es>7s2n;RE$I4TdDX-#g0 ztXMui8%im}H^gcc#<8U2+08EW977qPEKu;ak~8q*4K58YbYA4PQdyTA(Re)|7$0LM z^cBzU?|H*RZ2yc^b;--id9v$it-Lo@2EUE7KC#0KBTrr5jkTeMXGJ0sT@_wIj@M(G z8l&nBV?F&{Z~1P2&P!N_R8nY>v8Fxlhh*({A@W`w1jUAKy-0Qi6gy_4(^ChOnuqKV2mKlcNTR6cE_ zvFsGvjC#g$8RvCcdj!BXu$C)}ta;q5lu#U}Tu2niD#Van5c0Jdqh28<*(&dw>n>ri zBhH)cN0y%W{;>Iem@b*7Qt-1L6W4o-d@sKc>th&)bueicNLy6St&okw-%`<3s=NWB z5F40rJI=wmk2N>4T39V^Un!KSke!@o63V`l@li0&S&7#V%OVFSaTR1r#Ws~&wZ`a| zSpNhr%PWn7Z};#kIG3`Ib-By-bWx%+BSAyp^j2Au!fSET9XX-^=E3{} z@;5Zb?I`czxnC8-kVge$$1zT`zf2Q#-fdyCI0HF89QS_ZhPw=T_YN?;w-!z4M1i4V z;!0M(*6Bu)4VjYK9t7}Mn8+GpP!GTV4S7T^8g0tz8Ogjwc7fMd29g5%kD}x@34ac& z3jt6_{SwHDNj2?U+Z{XgW7{=d!+t~@%EJ?E*2)J2tyZUw(x$K@p zmx0Zsp!Q=mBXTl*L4nn|u#j~2^WQ~!h& z8#;Bs&!;e@8SV~;Rt}mImS(g>t?nFHKDExZzUNQQ1uBNcy@}^&$nqgHosY9rECIDBj=k2(df)d(ABEmK7gJ3lhT_lAy|JPB7$rP(2jUhAJHl9yG7I;#6IPym=fo5ixJSk`*J2ap89x_rI@fKv;e zCl7dziTyw4Z>E1}pa1uC`TsJ1|5FV8e>xGF{*k}`&-3>`!}b5Z`TKufAZ6)GFz6ka_C?3w67Ok}O_l@72ryUv{ z4q4ig$g?FVM{Hiv1cd@19)C;qa(5IZbI14-D3)#ebx=!R{=|mV&hykZz5V?P6^btE z4&4f4O<7*J4@&@wriRy~tVTNFO4tHkaOv5yFap_Hm45?^x~HTjO)#1bga}{-S0n^K`z+O3if*w?HC4nYB-VC&&SUsMbcfxmLMU0QbCb zYYU<<(|*CAWsTx$gDsbs9cT2@jd>;|?rrVJUM=17(_-d>!zA)nh|T@o%pdRvp@Nem zOC4XH5w4yU;(@=Ard)AW6q4e{ZHM|;fg!x&OF1T zPRW^Zp!!x3vR?G0p2js&jE|Sm9|oW89j|su{vFB`ky;R-b(_BX6liwC7QBTFXLma3 zy>!@@?xVh%vs55ZfEBl!a3D4s0PKk4BX>SuV;cMzQ`VZjFKL?L^LQas9p~v0_r*MB zzE;nG2^*MOr#Z6Ydw0+;B#B)e2O}S7J-$h0&K@L{OiL~#ZGXp`gq+xNdBYLe`Bk3E z#1|S66o7njmU7~?Im){lCm(b&+ndI*DsJ-&XC?pHvdETJq$7cO%xQiixB;Eeqx!13 z`})hf^=lweZj-qNaDy??Mv9 z)L7m>xP1tCr*T`y1o zthSps@Q601s%eK;vcAKsN`_M7RX#d6f>zWdpgZPwYZCK7e2FURG|}mTLh9&d1=S@= z483P@@)-esiXihD@JXT^EM=U~B1nKIpFyQxEqqRGr59X~-N72J|kvFHct@z0?c%$WksBW?3}r5#Ih7xs%aP zS|Sr<**b?@Ce^Qkzs+dZ<|4c6|JVLuX)D~COYC9(Lj+p9Nq zi8VBj6+`-xw4~fabV}8qfK|+g;j`#PLHl`mOJS2~u0C8<_RuHtE4G{Yg<=8p>GqL` zZdrK<5!C)*#>tbTdk%%UQ^SSV&0T2%yDkUQiIqj81@r1T1(aLXu3zV_&tVoE+AwLA zGA(Q#A5p6PZIs=k9POhfWzNmPXS5=>y?^>9ppISZ+|XvykNGR$epy_2pl|iTl%*BM znw8|xV7xTCa}pm~$(5Yt3dlV@G73yzN6}6HzQ?EgyZ2l#G;Vv{jh&IdR@m4@AAh8> z!>~JWC95nWDl)adLY3mjtjcN+APdS>`5kG-h0-9;(5kH$UOQ>OVt-3)0YQ%*b2zqTWXwb+Ylrx7w& zP*(PSTz+FLV|a~0f+tF`U|?BDR@9dKu$ShGi`{!&7M-*EO@}tpZ zF>|s?U9I-#wz8ZdP{2pZ==JwZLEHYcW%LdnqTp|ItO>3JJIPW7%Ju=akjiv&{4^5 z&_Rp-iJ8?E+ZpObtivi^035u~m9n{!Yid?5zTdo&A;roF02UzmRv5BiIg|TE%J53I zM?16gi!up2Q$iRYSlS80h|di0R5bQIjrb0QS2lity#vm)TCuwA`-J1GDOYD+S1?zRxgO80R;`_tosz~FsA#GyhT8HxNYFK` zxdVO}2Afje3A06vB9T zqL?D`%vI`Ysoak9SAG5teS1NYcjiURRl!JHt#x)bEi6P- z_VmmPjT(6`X5dJazZMrW;vJt?rVoh0TBp=dA2##KWUoBbJ)Vh`J^u z)&p_vG(sYk(j_u0?GqH&|4~%VYg#F1x6qNrdqvv|>U~~ia3P+hXDsgk3OX>|h={#U6Zm9RB=TI~7K zH%%xi$BJL8@~)eN2D#l2 zv17Tc4vxTxyI_((OLqy+lwLqmLHq8Tf2Z1n{8k)o-z(kIcI zZY5>2c=kZ?A{Pk`!914@-r|Y8nt=ESZuKazIP#C^I52+)i5y;Xf5C7BOnz#=jplJ3 z;CC#?Dp$zldKq&Kk|pziA5Gko(%Aw6FvbHalP4ufrVz))3lQLJ4VIjxu-Q20FOmxi z7&W#=rWruQRc3>I4PTXLV<-CPT3B4pWv@5a0gVN{o~H$}X$s9< z@y>dlV~!q(Hot!0W#VO9K+C~|+`RJY$z4f?EqlxwmR1ERtMHI!&ST)yUSO64)|=Fj zun$1qi>Kat#*%KOhcSvL;OB=^W~jcS{OtCGuPIu^NGue7V>h(CFgY0%$uiR3&WseD7f<22kqW|xJO8jp)J9}#OPssIPcgXH;}%Z`Lkc`>M&QV7~< z!I^bmxf(UaQ@6rd->b@KrYdA8aYmesxF9|4tYHzD7>tqWOuw}7lt*?__Zk2I5YEZ7 zYWdwCGaZ)TF!1rWq*$tqXQ zGypcyIE5h;FH}BxlQtVo>_Y#s+1*(HDuXYh&S7@Hw*4_K)g?7P-iB_h(gQKu@pzhr zL0Sq1Ie$IAF-Nbwex-HD<%|J@`pa!u6 zJN#{VqEm0NfQSB_le9UV?3xvqb7G$Y_Q{OXcrW=~lQL43Dz}o@i1Y^#&&&p%>sfdg z6kS6~qErCk&hL(SmF}|418X{VpX@8+G5~A>O=MAL@VTd;#Oek7#sM^qTR_Zq)$kDd z5NxOmB1r1gu0i7pI{te&FYu3MEr=25&VF*J9r7L5%2-};l;_QD)MA48Xr zDieKtw)=2XcU`SYgXopdJ2Fr3ZMu$qrgLHY)BF3)r?22*ty9}{OJNKM_bR>3NfGuw zmN_u8#a-J0v%qP)-T^Uh?1Ity3s>`axDeAI=f5B4(8w4UqlI4_Euz`i+LceR9tSK! zhn{k+{M0mmv|w#TC=ax~*u;g18Ga=xE%UKKn-Nhk=XkGwMt>}X(Uk$ysy+M_Xf+tRj(ag(wm=!$*P>hPHIWmJm0ag9EMKt2m;=5wyl z+7is6=(=kI|DXy-N;X;`;{8Yz0i?_`ktZ(=BoER`GWWf&8C=nFqL;~me5ByN1yWQR z*Z1TuZgwr=z`q9Xd3z2E@?6T#gAU2zMx z;bjbm0Yzkt>9k1gXYnw}p8O7`(KMlbd}&^@W4{es&E5>T57gLd3tw`UAa}KFaG53& zfk8>^Dguf9!+Iw1_C@+0(C1RxI|8s1Pc*_+OG}F@8F=l3wxork*GRREE-sZ_EAIs_ zSd^b!B zPn6}hxC2mUqsF0va38Z3iFVpbmyRO0814# zT_!3`#(tAN4}7R%I`5{bjf;*BvOhi}K<)$wE_t|Qp4z!JU|t2fv06|sGRDfnzD6aT znK|f}Sg*|w$p`wf2Av_QRms~La{1%kjh-fu%vR-*RLnm{GBw8pd47+fq-|zHXPMp8 zAVSFx@e4UK69Z-A1{t|KX5K$Qu|&Yby2<=;!4Ypr;Rac(sEa_C)&9ANxACqsm;MaS zN>for>8i5g>D^Xa-$d$+(L0n=4?WbZE+{8CSH9AgU@4KpI>ppAM#7diWKofjdjF7Y zlFcx0$EPF+ifUNs8ka&U<2+V#7m$*avvbb`y)i)ii9h?u$2{ho)5*R9S7Ocp*w4jd z4l=DI41tR{c2aUdo3S;S04!=R+fXq`ufKJh>5yFOq%0fAxQFJPyA?tVve^d9Com;1 zqr^tw=aB?0&WZWEGC||&x8-HiD<>EfYAV^sX-!BPnmJrf{i}Haqm?s z6476ze`fEBQzdiNwbS_3UOt=7q%`@v-MIas4_i?PE@A+_5a7(?GLGh0A8milG<`T; zzqvMPc_%#5HzF!_I3hjIVS?QuW!7;Y=y)r`oruo_v&Q*46T8cLXl}S3 zJ0`I_%k!t1_>dUi2!KsF_B!UT?|M<2%2SL97m;#rw5LROgf)O*RhX0Ldp(4r=SA zSnP|KOarx)e5eFe^Lm(H80OrKg)N1>w9;mcJFY1(?s|@|3p4P29^mU#gANEy)26Fb zJPGol5m1j=i_~-eVqeyw2W;b&O)uS5U%Q{Qik=~>vE7t*NdAHhTXrK~Ou(&ix$>cj z$p48=mLP$U8nVuF#+&sEzzAy^mw_uEqyJ&|i!md?Zdo85@>7pWX8_ojFZL{RTvGMC zoBGZ?@?=-nD*p(=gbS#cfQJEG`E-i4utEJIA)91&6Q8C^JPsnAc{TTJIjw3>o1e3` zVF|(BaCF~0!kvx*_fr_`@vy?y~SQkR?6NI{``*enN`IZ$~ht~}VDey6Fflr-E; zb1WC4ZN{Z(oAV~I(u$FC<@KQ;==r)_{|D5n$iIhaLbkufy{n z5GXa49XW>9O*0)$)rH}xP0>dTB)3(5be6fhl^GHRX=dds%}thKyaDESv?CXQAu-e% zufLP4Oky}_b?IXQLgaSkaD#F;_GTy@=JiED9B)Di%FoWmLuT4#-r5!xFm}1o6#eUTEk4FCfT2M8N+-4gaN2_`iT4|I1$RA1XAN{^@7f{{icpVYI<$7RO z-%=X9v_cPhP=Rf-e6`40nFFoft_I#dRlD6Y-CJ30&yKX=DxO4k8JR6NU$C`7hU#x0 zOnVn}sWH?*s^}$2!(_ekQnTe*P1pkS2f#K;Db4uAU^oz!8Mx^1?n&tMuqD?OyuXWQ z3uqrFw7j!1$Jg9dHvRT#W9#t4FtK#WaCqL-e>3@wjuu=%G-IT9Ndz(TRz~X$zXv@# zkd!4K{S+j7G45PG>yxGR;zS({zS_3->T3Jz?8D?cw=1J2N$1C*1q9{(9d+HZc&Y>0 zSOg2kCU2~QV1?MgV!k?+9M5h&GPN|rj^#yl?8Fs5V+@?NI!h3#y_G~G9Nf$R;Y*$0 z!qVQ~U>D|zLhXk8l8;KPh|6;V zdio8yLXh7GA83b6T=OlcDwxeQcKwrdH={&pWxwwxHJRDVP?|u=l4WK6r_9s$m(rt^ zGaX{8*f<D=?!7(0=^wK)BTo>>Qbd0U8KO7uPx|`5N=48`Z)n z%=En2=7ncV81(tN4{md^= zC{$pb^j4X!9pOP~)FQV|LoaJp19aqPdLqGefhN!dguiU7qUlEZ`k2q8%z{tcC2m_) zuG$CAhHdZ9($x~Y6_RHfG6aITk^2oieiHz@ON2KQ zg0A@!N}oujD%suCiXCjp@V}i#?k@Ge#&TQ)760`3p-mQ&RDv?RJgnTp5)eWrDy>L> z2oo_&{D2+I6S)beMi~tH5d|BO@o7*sTUTwQ(ZXAyYKbW*9KnB9V?gcg^|LAEo&uuf zxIJ&HgVp^+36$&nnEWyi_|y@1jz?w=`~;&k!=Dzi($jY%kLM0hLn%Zf<}}}IhFMfU zKt#oMlSe9+hF3;6spviDVN;J4b=tiIhpo+gX|Do;<#V!j9IPk_t*Qujf5aJMrKPHp zVFG|6o?{hSCp&|9j8~A4<5PACwMR0lnjpIza{M8OegA^x>&nNRb2v?{eV4oz%*IYB zodXb&^||IC=s9#drD=SciHf&F+12*)I;7onaFN4ny7ko;kcp#}uj|;%KTj8{9s-#D zNLYF<7Dr&OW7QX7y+6Zs0Ay3Sx44l*LSh6MB7kdKlb+2@eeVL*LATmHjN`;L;F$Tz zknM5&F&WKHEh-hB2(Om`MN=SN&tej7`$RhDyGqy-_FTdg(9LpI7gmUQ;)n6wQi_co z1Q0uTp=3BatdX|*a3v7E02b{>Vv1KZ+Xj$J^u*=6uWrz+u+%yKOZaTV1Ef4=CUEq@bY84> zD)m5Can9Q0jjSA%(DCB1c^{`+C;DwbA^fS0!c@4a46@1OB;l52cr+Y#Q_7H!i^gx~ z+(AqsxVV(dJi?YowMQUcCc|^@X0zRErHpRE@=@`|VH$dV5_GQOB&CV{U{h|Rj`j*F zZog9&4?{w|K|awlLRb3dku5x^CHfi3MTD5KblbE-et5XfLme1qF26F8NBOFaoyfLS22^$i9TfO}d}gmFmfOphpi zTK-8^0Z8|!Wef}((YUBET{VfO*flBK2m+1%K#?M=-*^OpH*vgZ6^nM>4L)8ZVR|o3 z8OSSJ9=EU9vQR&~HsIrj8NgYrxnQ!SR#{3AWzvfe9MLuBauDXpg#|9;2tyqwI*O6f z5H9#+@Qi^az5uDe;GXpZy=!6Dq}1$%H<0o(`{RgmIWeA80G zszyVqWMrAY)gNy~g9!x^7Bk+f1CXW(>=tQeGgl#^)VKNulrXqIz7X`I~-HHKNiQw8k3Ewh8!BP-T;I zT}yi!ERbS9p1~Gs^;^v5>3N87kT`yOLzNzdkgW}sQ_@w$;ObfqRzNV*iKsTo=T*(U z+pkd2pL_VC zKJYAASquir=Nb&z5{=+3m=%yKX==?cbV_68po)N6bP3pxn$VH9LICBmv6ER^2O_{o zTGIk7NN~77#iyvY&=r(yWZ|#SA)XWSj8-p2ip&sC+tPMe(S4Z-Z`%>XB53NOzD2Fn zmTm3w5BiLzN-kx{O`X_enmn@;pXuH^$Jp(mCa5`6)K=x?lkj z6NRNI7$TfA_0<+umn7XL4r)*~kw^@^?TsVm1mkYvF_O-sCsS)YRY2kN85D15&?MF_ z(Y?vCLJ`WFu-P2OL&p=X6IsI#B@_#Rq!I{@>DY&Ks_xFYn7yEC)z`9VWVrOin5}WL z6Y)NETJO|!cuanJ07;{uttVi)cFWc-nqAJ5Mb) zk7XEZ#Xb@eu1~upVFi0JJKSOpSyeIfD;=j#Bwxgbo>ZRsQR);vB%!@pdue9G6;aEo zPRM1|!62Py8Rp=dgtDd!Ycl(!nH?TKsM?~gF!=mD=_}sF(IsrS)mC~~Ee1mca%7|k z=4IgK7m$6omh;kW?P$Hlo?6eSt;Ta(SDWM}IN(N!4hO8)=H%Ni2U0S9x;(IRyz+?$ zw?*#^wH2tjs+NPPwNkQ{B4k_1&coCWt4a5E*y-=8{G%_@+0P@VoNmk} zN1y<^-wK(1wh;lK3$jH|a#o>BEUQGj>kvGHR?!tpJXZ%Np0UJ`oR`0v*wE1S45=C$ zb2$lmlFT5vQf&}?IIZpAy$2B;a$^0=uldkfn5=;mf3Fx1kJ+4Y(kq8r&fjo=;4h}y zwVIN^$~aL~Pz#|iLxr}~Qp#pD9M`qxG;5v_&i(*VZ8b)wy`HFzG#bnZjmFz)t!H*2 zvA@@o{IOxA0T#c-!@}UIFFTzqs1B+j&4>sMq14~a>qcs)xR!1S@Qe+lqtRGMzpVGV zr6p8W2p?u$rVp~)AJf@*>=inVzbp3=*yo=t8!pf1r~ztE@IbAbc*Qh@*j8*;G;qFZ zaM!Hai%%-83P&SwViHnFY`mcDR#WpC`-GM|u8rXi4igR6M(wvXLAY2Ala>JCoRPQh z-52~?`*7Yu87+MZ=jiMxLUG zVDYOCoPFatSiwF`8T|L`;Q+JpbcaS$noZ5dU{F+zbf*&l$+hRo`F)N}?GdJy1?Ff|uixE-H5x#x>z6m_VECjehaIv1uYyim%X zIY{SFsZe==oF_}`PY+EL9e+X07GQifNvk;TvK38su`gJccTkxU_8$y$hnG7%myaJT z>FW`c8@acMZEtXcYX8b!{QQWFJ!7Dfq8uMZPwbxUXJymHCQBIG3*oCyTRXGrd3#Ki z(x_d39zq-n432hG)zXZe`53{+&+Y+c(i@(i90`C|(yy#!d2oxvp0~EnNv454G%(JD zULjyD`Xv1mZ9rEU2m(FY*_A6HT1PoND>nbsxU1(^HLvQ%hs-`@SJHGtL{{JSker4V zwVl8|u;UI-mwfP;d^u5tw01|D)w7556a@scc2fevBnHO4I@>hiWGI63cPgpb!k|lNk3&}OP{zl3k3jw4qUAbAAq1M zHryX}wBvsK^?-Kdd2a8ubQr;pnK|-*bACQd#86(~HGAy#CwU(#9j$182C-$+kg3AZ zQn*pzFBYh+#PIN!ezgmXB{AV%+U6niE-e_t*YRvChh|?{0hh84v8h^@)H+`Us|Bss%w+x%e!hA*|OWHc-}>tKvSCKN{P_kfaF4ptkaq`Q z7Otd_GhvJPOoBez`!EH=EtJ8hm)yz`dq=r4((qiGd4uk{Q&QPo`_e%ZO;=mX$7vv4dUNUC7$SQ&W4*w>(DsV7Riu~I4Gve z#GQ!nk{x$#mOIg2qYH-gJRG8xy4H*i8pdl13u9o@Nzln4gx+N5uIeK4D<*X*tT;=e z>TA9LIai3_r>(w99WqF-ZEftHr7BDK_b(SXJt}s#ZW!RrCZ%HhBXwib}0Ya*Df zSoEDr7_~S$2)~E>vYSo>HHQzqQ%x1O$6Xslz2GA~Pf57qYAsV;R-SRx(a{bd@W^(| z(QF)N_R<1am)r@^#kh(zJrp^CI*J|}wn%w%n6KtTL}O+8=1vH}DYhWmJ0>tdvtV72 zi#^k!_h_*Wzq;@!Yk4WJ2vjLMg=AUHb;b6+pIZo?BrbEe+c04bcSKveu(~lnc(y6X)5} z7ZBmqb6Cx6&Nv_Zfk3L=AmHp^{E@??D!}OI&u>G>x6E{|5Z{&7D)@C6t+d>48rA0| z=osX}V_@}wvD_n?r5j;GsrD)jGWHtJi^BGQfD5)DiZG@Iv0EyTnBi@za;Rt==(k2$ zdab3lwg%qX^e2hMeXzhKOHV^kw?V&QN0x2iBG?s_?@-@|A%SJVQ$@cIbZ1>T zl?-iLk>McV!id6ws7ppNr(F}|(b|K8?7Zg*a-N8!*FxO0USfEDYbNW3bfDWk8VbPW zm4=OoqO1U1cz7Cj!EcbXB0Uo?(ZKH{&qUFKqbG!ho@I8gjX5xF9RzuVN1g_SC^i%e z!Z9AuRMtHRPxXgw1bCeYqFTSr!Uu_;@AW#!>V0UV;($G23NBAh!}BeH@POU2PyN_K zdqQIyJLykw|5#XEhXKLysmwV&U|1t+Qc;lp-T{l3=0bux?*5%uQ2p>@NS$|*j7H|a50P+VDCAQI7pKyNmj0Q*PLT}xaWzs_sO%Tx>Hsj- z#K2HkoW~PQG9ss~4_#X{$<`5G_RcOLTc*`2#|e{5^UhpnbOPqY`aT!3u4-=%el$~d zqpbD`|2t(_E$ z(4)FfQ=+UPZEKQsL4o0`M-_I6L^dri)2)|o-{Xd@h^8!!bjYrNl%oiOQ>}S%M%N$DD7puw^uKcFZ%D0`h{j1-K;}ofpDU&`u*vk%dWc% z%%bXMm?GY8H>KJ`RB`|E_Jo?Vi$w)SayTvag# zh>D&B?}0_9SCNg(7gTZSeaA2zBDDs=&ia!XD11f6n-0409 ze|)yEhgXjEc`=Cie9;!Bj!07f2#nJJ=c9zN4zG4w-So&6A;?G_AdRsK)~6S}W= zmJAC_j$@8%iON}jrSiz3ag$t3I@UPZ|fRrB&@bcs(zj zo5-ABLD2C-;Vz5EJRg*od@m&7Bn`fV8`Qpwo=jVcfd*>td6c;n4eseE>4w5a$9AR$)W>aP^}lh!nwWS2fHq0NhjoVyf52}=@dlb+*kQFsT?l0@-XtFk--8teQrnd|vlG1%#G+hj4Q7MsYp#3Dw7SVCvZTNR0q3si98k z3=+uY+AFFF{&Or=NdDIX*FL$A08iNB@76B8pS#2Xo(HM1@7-dTyDOs_nZz7xTnpojiqgC z2O3gx0;IQA4o5y%lpSFSX4{Sp6oPWGj9(7U=Qb{_X6UO4b5k{<<>k*E9dXQ9ZONOw zzveom>H|;THUe))O8*#xX#O&y58TCl`{ulydbHQ7p+$5tk&Wp<{LmrI0tEoopCNrbuB!JDZk2$7Nv4o&!QH# zo~0R+MDC=OyVn3=CD$rEdH6VNpc-}{%&0+tHW*;368wWCskmR?ND9r$!4+%<7eq|O zVKHT(b)0(b7mNflI6th$Ebz41M~$o1<#$TFb=-iC`%yjsZ8=?c6OT_9Nr+r-z$w2T z_PA0KhXb%Gd`7+tjW2{`xKX#LwAP+yOxU4dClmziBzF;YPTc(XGEhqnZUwqJd7IpKO@ zKw`4pp`VrECXTojOSjepsJLSm3wzg=Jdl{}4Bw%0;s-l-TSTnUBBQd3Nv|bUR8-!b z2L>FUg-;5j|Kw7s_Yq}j?u8xYxLVE!${%0$Sd-{jod{C^ILO zlmkPDE)0t>ob|7eqJqw^2zgk0;s9EW{5%3hH zt6nsAp6MIc~sdn(Zhcg%P0_z5X0_kB``wUYT^gQZ1r)@Nrt;6({2Uy}yyM;tYK z4z!J?k_7<^F!#=9BA}^?_4sBINY#`381fKgtZVzo@xEG&2>;5ax}|EpsqUn&QL zB|#*HbbwJPAxMUzLK#6O?SpN{g}S-j<*b*w?m5mXs~yR?5Tptpaj$R*zIGw4ZZvT2)XiUkMQ{6uVYpW%*b^%n-G%c;9hyX=5oh`vgrkWBU0I9 zcBcm%OnX{w5WsEAD<9EYHHD}M<5qTx$KF>a_kj5=j+Ak0Y`CY;I!K&y(10f~pLKLG zbF~PCO3B@M^R7x5R8PP^4@l|QF^4ut6&arN#7rWOHCT{copri{S5F;W03={h{u`F7 zsi=rbe{YXU?&a=T7sNkvV=U0=7~kci(xNl4bqK64u2><7NFm-84_FAAYe z@Zn?oH)H>tMoWOdxB>7|C~VojHOLdw6UNxJe7vb~Y9#-v1KhUcYkS!d-QP(peo=}C zB!dKxBFVJpY4J;S^xWOdz5p7A9|C)!GX84UaJ!M0jdlb{ms)4wG zXaE;O)r`??xVZ?Gtg*3TiMiB`pbNK8rK#EaByLm%1geBLj@rWvo zfh`OWUkg5Yvw5$8;-vQQEtGAT5@1(%HW~QBSjnEVpa!haVb;`op#JTw*2JA9X!^9p zaPZNtxZL}Ci!McHKl%wS?{<{UiCfIxWmr5JnfBQ7F*oOfS1L{nO;Qbm8paJfs%@^M zG20PaNaPj295Q68CLg}hlqvK1@B1H1hB)U)^X{TDwmP2<@@n6Myt0^|<;IHD?Ycak&E86k&O zBD~3xMefKZU6X{PLZz9xjkc0#h~&eI2T@;};y1JcV{Oia38LU`7dZ0l?_aN&#&=VE zwGSCTsEbFhP;`R&nGrwtsX>~P!=1n!q(f17H?MGvZ{_!gVwk^bb8hq$j;y+j=SGdt z5V-sQkeU>ozKABaPdC9F&(07q;uYD(Er;?mT+lt>iLx{%5#6`Z@k z4Pk7Heu$=Ft{`n@Rcob8hd-{CGO1`EI+`EWKr?qZXspB^wc5r$PK zM4H1A{92l@F-CJaE5#U>m@7dTOdxQF?!3079KGgkyXPPxU(x$B$iqKZ5ci{OmdM8E zt&*hG#`sR@wF^>#%jy5>Yt6TMijUEY8(wyqfxG2DmI=cby7pQIpy_`{#tyRMf)ZgE z$6GICM}1XW9taY6Fx?e?LXFqKCV{cGZr_BtP2$YY8Rr2(DFrNKaW67a2R_H$ONbR`_-k3V8+M`6R3Q0zNI z=4myAjZraMq-G+a@#wH|R5k!mz;xJ~DA_ZRHKL#08{!v|4@Dw%{We9UxG4kq zmWt4Fa;e;ym;*USgGPAiir98BqHwxysAwFv)x`&Q_IYeC#DZa+E~|y{b0^RS;Ag5H z5!y6j291Ni=_7ypMm#qNCRvsbSV4Bfd5&rW&tbw|{*aLJ%P)%6dWmAJ{JIWpK|X0$UH5Kqi8 zR~F*OtFe9n^G6ES~3V&p~TQ)~?Wz{Z0l*aUtgh z>l5oZNdX;kfU&xxWQ*)+6s)c7yZR7!yw($x(EA&b!$`Bm_xvXw*68OQh$9#!3FNq@ z0=f|l2*S>ZyfaL|JH5B{TRHNXf^0@H9=Vy2wu)IKka;rtJzgy}|J$^0Z<1yLdHNRdcUv6j-?F6c%_R&)8T5#*(VUK^ia z5Y)M*4yw`b{iEdIXVIW~kB@+{j4mWnM$=FqQ>Rs{c4_mg{@3$5%@Yrl)3MUE+4)wzRfy+^WzA=476Y(_+5U_+Q3Jl6y!W|1irV!46?M< z^SD>hAY{e79l}&sHf~8m@mzQdYS#Kg!s{Eo)VqJVcc`Iy*0B6ytSnQyKZdydCSNlv zub1}eicf&N-8rkjmWRG*fHCS4zTz-F$L5d^iiE%2i-)Q z8q7wxy>6XI1Ewk3jtaj~T`p3Hh*@dP{4_j&ZUSzuDl@`(y3XVK;=@ZVhwDY|8_X?s z(3&v$xQ5az9odiz=#;?`=8Fqgp!tff29ExJ7FQ>a0Z zLY5?EtDM5`P(#NX z=*5hup8|1zU}J`8zMzo(%G!utRrUQ**~w1EKgmjHRja9y?Ju?{dMbuN z$`a}3<(948J-g!o?~PNvumS=yKuDo2MWKXvRhk|!d@F?GeSljnRFe@%8#s6$I03kA zAI}YoEy*`|8XIM}iO#1p3l7%UK-u&RQB8r3%muTKUp{JRdV@nu3!Qn;!Y$0zw`%W0 z#e|`-c`o3KT)ywR?B@FpRoecDL-aEPF>}k5|Q5>8U_~^`N!`{ z)Z9~y^e$B3)F@WCnxnnZVAC(k0j9Q1KZ*&Z8^umS2FO_t$^V`D-RZ8;)pNGhvR^38 zKG~^zPz<6_+{bZ0jyzoJ5YZpvKy^*%!^)KI^&QM?d*$CBc_SMcso*+CO zdeZsOBh&M!Sqg+M&pL@K3t>qi+JMWu$k#!vldI6hh`cV)oEvm z0$l>8lvh2$i|AvlGtccQu4<{TSgBLuk#-1T>)>e-QGk!Cib1k441 zC_8*^4L@@lm#m1q?2fFMP|s(qU;hm+HU$5U3)kU0P|PuOcAmL6nHJFq08@<+!IRe= zQq;$)VTpI<8igM6>Oyg;^1$NO8Hch2N{a7Lh168rKrl7ZwE^QW2$g{ZwD*vcmKng5 zV%Zi1x{KLBl)^m_Iw02705Gx0KHg`Joe>y~m$NNWqoWb6AQp7P(y`!yxXd-bOTB8mJlv@Ak_6hEKO03w`(?$@_NR{6V*F z^I2FW32H-B z)w&xnmvmCuAO_1b@@rG#254A^@~%9LiS{q_HSknyZCUZPk|I@c1Ei&?Asr?*?+vN$ zh$je!fWm6-4H;hI6=x1~#4G%uxNLKJspUT{W@3;L!&L~`-7Iubh2-bI1w zG#G@gn+wI$1r=sue)rRjc-4D$5M6762)l3N;(&7ZY~TcA*JN34Yj(k-QvhtRauv|$ zHNEa|^cFv-vVaagNfI9d&tqdrpkXo{ee#$~SvE>aZ&W^%1TjbPQ*M8mmsdHgudF}B zmHurg%y+&VUj~J`W*~>gK}xD`QpLYkcJF%4xW7;^i0Y~EQyWl3LT@3kHWoh>X95w< z#wtbP@3tJ0ME40l)Km z4U=hQX6Q#Bntv$|JN=zBiq*OYefPs5g|?F5T(9>O3vdrI z>`{KQHniJMhH1Q-S&%a-KKkVGah>k=g23Hzaa*F(7Va+ zP1EWwn7*X$K^HAQUt*U%um`^W`w*}kbdr-+lXnTDl$uJ%4#zpmZxoSHljS{YA`6`V z-rsb#j_2D%O*N@@f!MvI4g@2{w_T31ohU3(|NH`x7wzY+J|jm4%Y}DxW_}T^B15L< zW(B-i&-!>6HpO@Hi|@0njJHLauqVWJ1G)u>ncZRSDgSgJZQ)W9OzHU84V`gd&xA)R zOKktcYrPA1lbGOaDJ|3RMvPDjGU`TqRT<1AgxWy48o?NJvDT+G?iNj{P67F0?roa? zsAwt=5Ur&ME1&J@jI@}EwBj7{r&(%a6{-M~A%BeRPt+PCJOjC}kx-s1&v|@{usA>^ zdlHifpQaYoegX2EGocmL>F5RN_0Dgj-%J4YJ}<^+w>A(%%NO^f8|{#ZZDC}maJ%*= zi~}AIIQN7%V6`4xoJBQ42BQEb!C>nRBQETO$4IySx0#RAEOg}30NIdbydwQeZH74o zK@L^n6`|;46kn&@>s|CJZ~TNR7r04Ovxey4hk(BD`bVZ% zn0Fu72<~qvI}-;xpgSdnXDS6=8DtUD6DnC|mQ$vk3vN0BMcVC|e+%JEUGSz>%$O5^ z_zX4bzwGE+M?OWNLK81fxR$f@3>7~BmMM1@qAZggq=q7#cj-vB`#&PP2ddwy%XB(0 zfqW%XRcmphw;Zmb&bwN8X?n_UXgTeSE~5am8X`2qg3^P*p+JxBcy4F3&w^h<#VFre zTqMz1!^JJUSYh|Kp#Vy#$>^u(gNEy5_ka}_QRDJ2lF&1d;W3v1t#)6El6v9h9Udxaa-J( zs}e!f6PH~%yo!zhmq6yJPa;GePsakuq?Ofd152PgPWSdv{f0R;KF1XRp+h)~Y{z51jSqqFF zS8QmMXx?O^Gm>`J-FFDcH&S3rh5CUZ^`#Ui3Ur6{?DQ29KBS0ER-^L0SQEdv_->3NV&mrFwYVR`>VtQ>Dnrp zsvAZA*RbJ^6@=>MgqDQ^DTx&~u;YTd+e4r2G5l7;*WH?Hv4RRSPqb&MgL6`KRPMtz@qSXOWKH4Ne4DYtCYu*hE20D zmW71iwQME|ctLlZXSnQXXoKxgtkM^#3(9`a7m8hQS_bQmKRm*C>HWk`-*!?7EjePd zHJC=dL6q5_FJ1eKP6i6=R(%jRi}a~7Lb6X6)FZ?TG7x(siB9^lM0buLx>xu-r!ypqBspDGZzI*j^Oc_e^W{%q4;rSGF+cjc%S^DrOSP!rHS{C6? z$H>zH?sk3RJa6YA`{7pROo^z~`!A=7l3Ab$zM@9P0nj*PY`^{jq@?00`Oa;lpz7K0 zJ_b*@K(dEM?&rEtbnI5J0q!u(9BUck-r*=aW9^~Qz3Z>I4&)l?v?!v8?a95 z#602^c7%UxZU%XtO#q^S;a7a?vlk;`Q{bZU)Z99Lltt(G_Yg{KK`N>wsDpWm+!M;mhbDC3f!8sFq&%4v2`sLe++6vdR&4jwP0oP5LG_3xW4fC2S2Bz)XJSO_!q>Al7g2vGZ>vV!8YqKy z-F1-vPkD^#$KZMi8viWlQ`gX6>?hpOUgdZQFe6Uk+}GRnd7iR>TFD1a-Ka*b=!I zajAQFLr?!jr~vw&4K^-OGHo_&Fc_N}JfFy!nSj8&{mhjHL9`3Y0pWusxX%3J3*#gC(<+Z9i^%6?nfBq zLUb7H#pTCf^d|zy4L=sY0R%DG&dO;9aUg2cC*`AI{8tznQNHcpPA12+;@)H75Nh9* zdO>dobX1N$)Kj9k8)N1QQsQJyjclXpWyA3r*>+lHW$uk7D@N$_0(fVuGyOWQXv?Fl zQRx?zEcRd4dv~CWX+}Y}U}4k9SS=1o1Qi@e@gua&JXrJ=-RYFg`L*Q*!d;tC4{fuT zHybVM0ODlsdrK06VWoPRyyw~I{VMF;jEqh=?EXzO{dnZ-$w9zpa=XT(=m z#a&F*#DIseX^p>=u^fnuD^VJ9H7^;f^vD{n;qEc2P=ob(?K!uWiz%Y1RM}InZ0y@o?H9i!l%M zvO~26p`mn}r zewIAKA$mHeODgqa;BnjHG^sT2fm9w1Fd~HC1y5;jX4|TV@G6kelw$O>8sLLXj2|)q zF+wURo4a-gJ}a0v0ApJ*4p8qw^5+pUv}DvHH$+S0!qW04f|mTQ@N9D)l`|_Qq*{tz zP4Ms%v|TjG7H{*(CXVGC-FyeN+q}*1qg``wtJo`>V>xe)O7YiKTAOv;7p=5jB4=%v zglV$6^n0RwVdLg!!mT`Sp2XQSlm=CD&Y>F+x*&L7H;_t-j8y>T zymU1LB1;PsJ(@>16ReTR5o(?P6WUJRpJyxW8Y+%0>KzX7fm5aPvix-M&j4)G`Dsd| z;s;tR*V4HXkkPw{CrhbF^|)lfQapJ!Ojpl)Np5t(A>pTL*BXXospNFymxb%Qtmp?2 z8dv9FvEV@EhhZSC5Ld$c)Q7r`(l+sfX}{`5CQXqSi!xtn9@KN)6)WeI@Rc`KO_YeD*){ZrcRjkMAHRuJ#Bcr{Ph zp3ulb661-um5DwgQ8_E1M@^zYsQiyBtAw4EFZrJpHSb|A_4q$FI+wj|@>}2Xl4pg_ zur?Im&cDHNhU_n&w{dd>4p{48>|oL~eo!SlB1xfh5l2-;VkVAvVQFm_s?QeyrH}1z zTA2d@U3}9h6vC&MRM4Q-(%=%FDyULQPMfeR&$9vy+@AU=*p z3jINWf(<7|Nm5)Cgb;^nv7pD-_mw{kuFlCGt$#}Gg1~+d zzljZWCVMUc>^m4l^C|V`Sm_Y>B$rUVQJ<<=;;H`(Yo(tEaG?X;Q;IVz5e-j$RH;#5 z=lvrf)D(wLCS4ZQ+XItyg%hfKjPE?CE&nn4S-FZMWP*6mW}iutW3QW)H7O#OFYnNY zCO=c!k-2hhqQF2jv=sF|QD~BCFR>GXA_RCCt^NAT?c;B!DI;P0 z07STqon#Y1ET(k4m0WRBb^TcTVV$$A^T|lH#n*IUvEVa6c3Nh)_Vy`e)j94ly@iZ| z=R#~_`7Vs)ySjJ007q|Tc^QHuQ?duCxdlo05B|Nrd^=OP>(5N6^kAJly^$Th^pA&B z2NGFAR}w&_X4sHZPXzCo_9T2eECbx6&(yQ8R|e)fA5vA2n^Jr#$GFjt+S*r$!?Dr) zi+Wr~n7CaE)@`e|p3p}&Gv5kYQOI5sQH5st`x2QL-f{+MB)5 z*uRf>7-1|d6M+|ry_?f-IB*fO4?Xcd=z|ww1JC+zN-wGSV`-LVcr*?gpeeh<`G4yG zEpiF9OUc;^6-=OI+!-H9&7+ojuT4JuE;~!6)~K!cT)} z%97Q(u1+8HQxP^oRm%=c><+zE@aow`0G_#X=F4Cs??d#K)4n8FJ&97UksKG!3J}f= zdZFQRtco_2P{KfXq}#yHdg?otf@{~2SiU@Wg+bfEkE&voVM23d71%63ej66@{AaDs z@CKkfK;fjD7FHRmpyymCI0dCGJ``&9VTbR-0Q<|v#JlUQj1L{s9>c4jlS>f#i5y_| zqUEG_33^k1q<{;^w=ziq`stc{bD5p2ScU%v+KUMne%gt2(6fL5CL$=tS5TLz8-=<- z0L;*8LqA`}9i4-_P&%^q3a&6UNPv&GFcI#soXtL6KW*4~%(36zGSmEfEmusAqmOPci-VEc#hybA%WE{x+BKuj-;@ip|ly^<+ z6K7a3HVc_KalA`3hjiPDUQf)rz{Rz2aoZDryF~8m6wG+4xB*T*r*!0;enMSDI+K-* za2Yed>GQyL#fs`j;qJWXPt2X{yYD8|Oi^RJD?LyUQVL>G8jcjq8LlRj7_{Lnh z*`Xa|+Kidznn~0?a#cB5)LGznI&gNleDin#r_1W{sthZ~HBVt19Aas2lJH7G6ZT++ zm+~r5z{4lzAXk4+_bNu-^fUskMxPKNsI+Dwz3{??&aXvK4m3!9f;w$ByA4q^YTf!v zO^iO&f>Q0T#5#i{o!y1Etlv$0t<^7;v8CE@D)F+(d^1WT4-IjkK#YmBJ$mvg{C$@L zy+T|6SFTQh$~lOL45>4~@wo#(=x9-hl}f3d=wTY8$nv=Gc^oYyX1NzB|;e@V)m0th-Ti)9G(6tcC4n51SK8>VfnL$X2&# z{Ik2!35D3M3Z&&oa5PSlbl%Xe+XpXjGGuIA02(Z!Bl3G`?7ufPJ zlsD@hcI9Cdv%jX0D*PzDyFYo_C`zmCxrBt5un1~@bqq6j`NYB4qxdPz!A&d|h@KTffeBIIPERpZ1%2eVD=kkzYCM>pzQ$mdJmx$V1+Bn(i|MMY6j3A=Y8 zE^lt=3m~?g6W$*>RYE2Y537-ntl=P8OT*A))pjO#4+~i`)Lo8hyAvzQr=~@7(765= zA3rEy(c!YOI7Ue#76o(-1ctwAszoki%it#X-C%5O<1mTD%QO7ZcP~E%HPnwS)Npk) zg_v6#;*hNvc$T~sg?k~>e7pCQ$H)cU+MRBnuZOV-2|n>1Y)Up}xeBw2r_bm3x<*kM zA98%rOqP*!u;Av5Zi4uttFY~bJIJq_&!m>9&0+6;J&ZaRw){pdLI?fhBqKb4URo>{ zZgR+&85InY4ZoIpuFC~Z8l+msH%%AMT0S4(* ztRKQOAa%VqJz0{CLx0&>u||RI&}X151P|~p>yQLq$Dx{53>R-~pb{b3TEYd z4skKT1O6Zc>})Ft#ue*;_akfPt}hdm$0_5u5Y(Apz0&ULMK5IQJ@NWbAQg?CpYQ;F zcZ6wgI`~|F>v_6D{19|wAth7iNA{gu))OPmS(kEM0>#J4KVe_58nkKr1554scc|Y< zdSc+RHf+L2mn?mhrgVnmg|!NU2r8yNA)~%|lmHj;L5ky{St9H@G|96Hs=yn(0ZP=b z2%P~G(wMw)#6L>~ts;p|oq0&xuD-Zo1n!un45P~_Qc#M}@{UPR?;Fys6+sbz6QO*a zB|R^Q=5{1t4uuRze)xWE+=8Aevex55cQd_7bzjiA?*D-t{SRuI|7E`q%YXFY{a+GB zEdNz@_uoj4{^OAUeRA|aG9pF-w*LrJDgL87|36JW|2gOXjTdn+{;!yPc)Dp~>!JeB z!8smU1ZP{{{sOB{x9Iu{)u(Ngq7Z-9`9?yuz5O6!O%bE}_jh>+3UXmMdV`2x;amM1zw@ldFmy|xj_4^*G zUxJ5b@!k{-F@Wk*c=gWrFAoe)(nF|Zqxn+Aq0hoe@E(~1NB)bZ1*++)6zsD{3Z= zcPMw`EDz#i%Skc#X2@vxiTZpDk!>%|)qN@vL-jUag_RNS%^B{_)qW5rHs)UCcGy|A zY6o>gogTlM8}tSpbt_=U+EPHC{RD<`0N>r%^;9UGlOX(<+R;LsMwqH%uk%Y`O)S|| zm%)M-LVIQZ$z0hZ836jQAthDwd5F8o6EzD}#E>L)g#Fd^=4(UGW2kJ%CbONM5c0RhS)gE2dMHSx8^bG=*{BsDj zIhGJhJd~L_s1M)u1-;2&w*Y`}vL?hg(n-s2lpl->e}Rx$5x7)EHKm92aA}lWXHBxH z!ob{&A7@~xm`xK++4d=F`q;eDIK;j~s#>_wgF52gr?4x5Yb>w-&^%{uOG@EN5VnYC_U3-p7 zpJ6vp9y1$I{lQBRqo!_2ltPrj9khb5dJeho+l|01Zc6J?;Z@l z8?{IIq6)(vMZ2~@(oA#MggfmRbV9Dg96d&(7RDjX*Un%{DmMZ%$716LaN%kuZm4z! z$t=Ksr#2@Te6)N2>@hPNz!V}xy{T16XymjkjKry~YjC2L%)6HC_)*3HVdzrVwRI8E z>yq)--W=G+$5`4&;&D(}oJ--3Vwbr>5aOD$4X;x5hphyeQr|L`ZDaQvN@Z{g(zrVP zw4T-gCdiUx5qMWuvD|QAuGRl`sBj@hpM3H9m^?Eed==)6DHvAfnhYWDNE(#m)_*nb zsFW+fy#TVINB?C2j#c|+bo5?IUk?-u)uQ&cs10V0x+3~D>#DGODA!`)-Uh&y^$)Hn zo%rtuwig?q)LuuKf3uU$VkYNrPsjJeIrTiNRI)sdVkcTgL@QV$Of4niRxq8_7Dx|hsJ^*)?N(f+lLulsSDqzl4*a)DdMZ#r zC5}%5Q``fRdc^V|AZce!%-MK=Jx7SlmJ=1P&Lp*aiG0S9sz zvmWRqi?5A?^R(ln>Th;$Z)b_jmIaW}Zk$F9+7J0CP61HOt3x8^C{}+BIQD0X4~AE8 za2>*LQu_c=nJB#w7XJ#kSJC^0)-%CQ|IP(l_r&x>x`PX`E$3ae_q(`xx}J9|*YsK0 zM+uVW5A#`~p4V4YMcYdrp?v7}TBX717#td7INrmI*<5r1mNSj%U&#*k z$SH)%x5vuT?g7rS6XEknGu_}Y2p@KstR%*rQu$w0a&ytA`VI1s7czNfscMfg*C{%7 zi9?8KxfRuR_M$tGYwQqTUQ`LHM9jbCL|HjJc%Bb}0{Unm2C)&9-xfeL{;t(xuI1ko zu2^?irnBmhue1u#8k-YDJ8>|@SO=s%aj-ewn%$lX>|BzO?6u@ZaJk_<0^bALIpR_mbUVAAR-tQHUbkjKT} z|4`!{zc0;fG;D2*ET6~&QFhP$^U*f8(Z(%F&Wic8Y`3|e$I0|vdT5c^qy6y-wzMrP zmoN-3Og0kXzjuc4Np4X@BVbX?%w+R znGHVTVhU5EP7nX=(X6R#_%s5spKAL))C)+zIn|2Zg%&PI<@7jUf??Js+A~&PotY{h zAdQWU`z~5L#f1aohzHFfPo7d+y1|t0Tuu+K^hi>Eau_EQ2u6r75NciINE%ds#K!}l zc0AdgekFJr6@cOYib_bE1suBf0isDPKIi^6aaWUDskyv7w~`e|d;p%0eWa9Y{T>5L zWud*A&x_pYy76ThfaA(>CZRGSG#RpOfL9qs9-6vb5X0`^O_Fc6>&3SP)vl{?ohQ1? z%mRF>$cj#5??70xuMov;0S@F#YffnkgX=qd7-CgT*2&Z?^KmlSY#tAzNqY-cGKl!7 zd$bc8QTp_d946&l80?Gz&f*+TBi{(wON?rGF1V;q5#^M&GH2TSb|!?VeTj!s2LA1BwRYUtbo0lQhTRbxGjTSeh652?!%Z3$5WZ>AS-Yl+Ha-NCFeuD2$Dp~d^cb=;S65-_v@ zaR;48E<(V%6Y&ab?R2cMrc(5PpXRHa3U<35HoRS1KMY4_0+Z}3DFBSP;c*xL>{D6emO7SvSgMN;OvE)OXkIN+Pfn8TS-VL ztqGdlv#eFLDS6vxO%{q+>No;9{&T9Cw?(${1&LC0+EG=7*gm$ z^JfKA&q-pDJ|$%#u(N2A&*uSqU)}&hrciZ0)UiXZ3Md&MbEZeHN)s~Y(qN<{okSr| zy5W-&N(SN+1Jz*E+76$L1*XPg$#Y5415DXVX@QC^?Mrh$zVK1K$WJ2sVCq%l*3r#l zbZMA;8wQTH+)$BEdze=Ln?(u=SGN1Kg>Vk}@)U{zBe_tajJAgR-gTM5_D zNNilsw}WamF=_z>L5NOm5H`HV+?X!C%|eybVYI5e6VHH>1k(jeiZhP4L@0IqcE0IC zIe@ad;W3XE0h&g*d|IafXOU^Qi}dHqx{`bZ{Y|-l65A|_^v~Q|)nL^n z4=ZXbH1VC~U<4C>GVh%LqKJ0mW;!@H?E%QT;18jcsn zl|#1nGPXSd#2@$s484{!VCiWkay83gb0BVOAGYimhP6@li)-4-5s#cn6$vmiby0dg z;4;^<^YjITn2+~1ePNosW~q85x+bCoHcS9LW zYd-+xJ~T|Vnap;KPJ}tt?tQo1D(fJ(0EoIU2pZnaEcMPto$w9MM+&KZ6g;^_%^bUI zoj0s(9a`chF)_DLEr5R)C#fj5cpRh!zh)U!pw{OQml7a?qyq z@>%Txb_?G6Y(BtsChvxzTHv9l>uPZF&M?S2sSV-Gx$YniyhdUHlCLoHgbrV`sNC?# zQ*oH3es7qnSl&AY0Q0dp#M_MOwljp+mqeSTJ8nkJujchSgAwO=s{%diYwbH!5e@89 zIZmoUg$w}+rQXSFDoIVgE}S$}LI;iqs$U<+e)NTcU5nWY@Ak<=<*t-hT27OAr3U|Q zD3-gGb-#S5HuG2!P-X{F5Q=Mm#^B0_^jPx)=lf_$&0z&9RX zY)QVso|0hrno}uBGIB&SQpJY2PevL$Q(0cS(dV@@QceEr@6{jA1Re~U9GRzZMp&CJ ziP2uP0zc+H`{tt`4MnUrb4>7j#uerANMlxgjFhG9n>cyDBwHA-o1sGEPvaR;yB7sc|-+EbB zuE`T~7g9q-Bf^=7EsU5YfGF?+aT@PcrHyRe1h4$`Mk;Dl2%oCW)TY2k+65&s2;-x; zS(+RrXh~DLp^A5POTGDs?CqcGJ<4x_7uL?uctQ{EDrXo27f*7dpBiTah(N%#qsfQ! zNcZnuUML8`006L-!5Dc=TXEoQex};-wv`b2GH(V^PA`j>;pn+1i=CrU%;^?@6stA!0(JmT~;1{gNzm!5bJJ!cl;+XWi_u7Cd?mm4t@g?)lZAI{m z+abfRNVEjAdG{r^;1=tAuS-rzq91|e8uXt+IrMQY)?z?W62wrCtrV>Poe9-YmkUhZ z51~!@vwj%0%`5r^Ir*bfFg0}iT7ms$V8CJjLKhbSn;Ha~VnKn42uyVmhbiLCT#fsB zZ>hXsnvu-&m6!Vk3jMGfi7ce90^EJHo{vy$yn=Xz z##+O2(W#3wazi^BwwDk%?!=ZW&iKw#qSbX$_;~~3JgDc@w`qW&;iiS> zif5q`p-x3Q>sTf&%$>WQlJL7cJvhGuWMNkUs;ke6f4zPy z(~k@v2ZyUxm|c-YoaxamTBOs>yLfSII%$x@v5=QHwYh)yk%&5AjI#b#(N5h}&#XQpY2!YqSL&XY(Ei7s<_0Mj^skSYavQ+Lr%M zdL5ed!LV|6*I8n&#zfN?Rzq+*MtOb2p6MVTRYCfFh8;%&b!g*g z;LjXAb+6gYxR?t2-Wu32e84QtkQApRji_N$l-pWlLMm8pfhc(wKVR6d5PgCwHL1q< zWY-n~00%$|Jorm`QK${BUeEbcj~-6`N?fM){ilPu@qGQn~Sa5`h7v_c+C@ z4!=>xK54oCgSL0<5-nPccH6dX8@p}Wwr!icZQHhO?6z&&w(dU3I2p-%Ge(ko^ZtUl z)~B_qX4O-jWa_?s8t>GFm#r?XL<>4SK)^g-&;rlsUUiOfL=kQ{u7Yv_ z9%TF8z;!sO?;R1q*U!`=MzU|4Y7~E~N)@zbA{U0H0M)QvoxN>}8Mr*fmrt+lIw^JP zA&G z-q9R_g(*KX+^@)kuD(D~Vo-E3<#8xnZhHdMj{D^hF};nNQlOOyPq{rR8E8TM&9DXN za+u!;^HyrJN%824Pc0C9VGQ%`cqF6~J;4Xm?eiFw)8 z1G~KNFmIyV+a%=9X54VQeF_opRA6-5jP;`!N|&K<@3Xl)iVdy9i~}Zd6wdra`s{

NFsvnciJWIEhkg)*aGP=oUF2XQ$@oe1 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 YXIubm1UF6NCqOX4;;O19R_nz72YVEsX8-^I literal 0 HcmV?d00001 diff --git a/docs/prj/resources/The Slab Allocator - An Object-Caching Kernel Memory Allocator.pdf b/docs/prj/resources/The Slab Allocator - An Object-Caching Kernel Memory Allocator.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7b0bbd3983c15b1d90a52d91203b26089d420ba0 GIT binary patch literal 55883 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 D_v&8_ajSoD6b@t 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 literal 0 HcmV?d00001 From 5d4156162d2a8d28fed06ff07fa83b9a08a37e66 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Wed, 15 Apr 2026 19:38:11 -0400 Subject: [PATCH 03/57] Chevron Diagrams Update --- docs/prj/Chevron_diagrams.drawio | 369 ++++++++++++++++++++++++++++++- 1 file changed, 359 insertions(+), 10 deletions(-) diff --git a/docs/prj/Chevron_diagrams.drawio b/docs/prj/Chevron_diagrams.drawio index d9f7d0b..8323180 100644 --- a/docs/prj/Chevron_diagrams.drawio +++ b/docs/prj/Chevron_diagrams.drawio @@ -93,7 +93,7 @@ - + @@ -609,7 +609,7 @@ - + @@ -639,24 +639,30 @@ - + - + - + - + + + + + + + - + @@ -682,7 +688,7 @@ - + @@ -1954,7 +1960,7 @@ - + @@ -1986,7 +1992,7 @@ - + @@ -2074,6 +2080,349 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 73efbeb3150b1d04f06079458f095939c32f0cfd Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Wed, 15 Apr 2026 19:45:04 -0400 Subject: [PATCH 04/57] Process Memory Stubs Added skeletons for process-wide MemoryPoolConfig and ProcessMemoryPool. Both are incomplete stubs; Update src/process/CMakeLists.txt to include the new source files --- .../process/memory/mem_pool_config.hpp | 36 ++++++++++++++++++ .../chevron/process/memory/proc_mem_pool.hpp | 38 +++++++++++++++++++ src/process/CMakeLists.txt | 2 + src/process/memory/mem_pool_config.cpp | 21 ++++++++++ src/process/memory/proc_mem_pool.cpp | 21 ++++++++++ 5 files changed, 118 insertions(+) create mode 100644 include/chevron/process/memory/mem_pool_config.hpp create mode 100644 include/chevron/process/memory/proc_mem_pool.hpp create mode 100644 src/process/memory/mem_pool_config.cpp create mode 100644 src/process/memory/proc_mem_pool.cpp diff --git a/include/chevron/process/memory/mem_pool_config.hpp b/include/chevron/process/memory/mem_pool_config.hpp new file mode 100644 index 0000000..477fb82 --- /dev/null +++ b/include/chevron/process/memory/mem_pool_config.hpp @@ -0,0 +1,36 @@ + +// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. +// Released under the terms of the GNU Affero General Public License version 3 + +// [ISJTB-CXX-XL20260108-000003] + +/*! + * @file mem_pool_config.hpp + * + * @brief + * Declaration of process-wide block pool configuration. + * + * @author + * Jamon T. Bailey + * + * @date 04-14-2026 + */ + +#ifndef CHEVRON_LIB_PROCESS_MEMORY_POOL_CONFIGURATION_H_ +#define CHEVRON_LIB_PROCESS_MEMORY_POOL_CONFIGURATION_H_ + +namespace chevron::process +{ + +/*! + * @brief + * Process-wide memory block pool configuration. + * + * @details + * N/a + */ +struct MemoryPoolConfig { /* TODO : INCOMPLETE IMPLEMENTATION!!! */ }; + +} + +#endif // CHEVRON_LIB_PROCESS_MEMORY_POOL_CONFIGURATION_H_ diff --git a/include/chevron/process/memory/proc_mem_pool.hpp b/include/chevron/process/memory/proc_mem_pool.hpp new file mode 100644 index 0000000..b09c14e --- /dev/null +++ b/include/chevron/process/memory/proc_mem_pool.hpp @@ -0,0 +1,38 @@ + +// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. +// Released under the terms of the GNU Affero General Public License version 3 + +// [ISJTB-CXX-XL20260108-000003] + +/*! + * @file proc_mem_pool.hpp + * + * @brief + * Declaration of process-wide fixed-size memory block pool. + * + * @author + * Jamon T. Bailey + * + * @date 04-14-2026 + */ + +#ifndef CHEVRON_LIB_PROCESS_MEMORY_POOL_H_ +#define CHEVRON_LIB_PROCESS_MEMORY_POOL_H_ + +#include "chevron/process/memory/mem_pool_config.hpp" + +namespace chevron::process +{ + +/*! + * @brief + * Process-wide fixed-size memory block pool. + * + * @details + * N/a + */ +class ProcessMemoryPool { /* TODO : INCOMPLETE IMPLEMENTATION!!! */ }; + +} + +#endif // CHEVRON_LIB_PROCESS_MEMORY_POOL_H_ diff --git a/src/process/CMakeLists.txt b/src/process/CMakeLists.txt index 2a7b597..c421bfb 100644 --- a/src/process/CMakeLists.txt +++ b/src/process/CMakeLists.txt @@ -7,6 +7,8 @@ target_sources( ${CHEVRON_MAIN_BINARY_NAME} PUBLIC + "${CMAKE_CURRENT_SOURCE_DIR}/memory/mem_pool_config.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/memory/proc_mem_pool.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/memory/memory_core.cpp" PUBLIC diff --git a/src/process/memory/mem_pool_config.cpp b/src/process/memory/mem_pool_config.cpp new file mode 100644 index 0000000..3a86034 --- /dev/null +++ b/src/process/memory/mem_pool_config.cpp @@ -0,0 +1,21 @@ + +// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. +// Released under the terms of the GNU Affero General Public License version 3 + +// [ISJTB-CXX-XL20260108-000003] + +/*! + * @file mem_pool_config.cpp + * + * @brief + * // TODO: INCOMPLETE DOC STRING!!! + * + * @author + * Jamon T. Bailey + * + * @date 04-14-2026 + */ + +#include "chevron/process/memory/mem_pool_config.hpp" + + // TODO : INCOMPLETE IMPLEMENTATION!!! diff --git a/src/process/memory/proc_mem_pool.cpp b/src/process/memory/proc_mem_pool.cpp new file mode 100644 index 0000000..bbde4f2 --- /dev/null +++ b/src/process/memory/proc_mem_pool.cpp @@ -0,0 +1,21 @@ + +// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. +// Released under the terms of the GNU Affero General Public License version 3 + +// [ISJTB-CXX-XL20260108-000003] + +/*! + * @file proc_mem_pool.cpp + * + * @brief + * // TODO: INCOMPLETE DOC STRING!!! + * + * @author + * Jamon T. Bailey + * + * @date 04-14-2026 + */ + +#include "chevron/process/memory/proc_mem_pool.hpp" + + // TODO : INCOMPLETE IMPLEMENTATION!!! From ad2da2e7d848c9311b31f4cb1f1f448979e103e3 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Wed, 15 Apr 2026 19:45:57 -0400 Subject: [PATCH 05/57] Update memory_core.hpp Prematurely adding necessary header dependency --- include/chevron/process/memory/memory_core.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/chevron/process/memory/memory_core.hpp b/include/chevron/process/memory/memory_core.hpp index c4d72b7..f3dfa56 100644 --- a/include/chevron/process/memory/memory_core.hpp +++ b/include/chevron/process/memory/memory_core.hpp @@ -19,6 +19,8 @@ #ifndef CHEVRON_LIB_PROCESS_MEMORY_AUTHORITY_H_ #define CHEVRON_LIB_PROCESS_MEMORY_AUTHORITY_H_ +#include "chevron/process/memory/proc_mem_pool.hpp" + namespace chevron::process { From e95188bc77a2535f272380e93a2f88124ef8b04a Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Wed, 15 Apr 2026 19:47:18 -0400 Subject: [PATCH 06/57] Add debug bad-address notes to dev_exe test Appended a comment block to dev_exe.cpp about potential debug-mode bad-address/sentinel values (several hex patterns and their decimal equivalents) --- tests/cli/dev_exe.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/cli/dev_exe.cpp b/tests/cli/dev_exe.cpp index 18905dd..66f5eb3 100644 --- a/tests/cli/dev_exe.cpp +++ b/tests/cli/dev_exe.cpp @@ -26,3 +26,10 @@ int main(int argc, char* argv[]) * [ Function Utilities Notes ] * -> Static callable type `Func`? (No heap alloc) */ + +// Potential Debug Mode Bad Address Signal: +// 0xDEAD2BAD == 3,735,890,861 +// 0xDEA110C == 233,443,596 +// 0xDEA110CA7ED +// 0xDEA110CA7ED64B (a.k.a -> DEA110CA7ED 64 B [Deallocated 64 Bit]) +// == 62,664,538,318,624,331 From 63e0af40ac038c66040e15e0afcd836f65d907be Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Thu, 16 Apr 2026 02:02:38 -0400 Subject: [PATCH 07/57] Chevron Diagrams Update --- docs/prj/Chevron_diagrams.drawio | 473 +++++++++++++++++++++++++------ 1 file changed, 384 insertions(+), 89 deletions(-) diff --git a/docs/prj/Chevron_diagrams.drawio b/docs/prj/Chevron_diagrams.drawio index 8323180..8c2208b 100644 --- a/docs/prj/Chevron_diagrams.drawio +++ b/docs/prj/Chevron_diagrams.drawio @@ -93,7 +93,7 @@ - + @@ -609,7 +609,7 @@ - + @@ -696,7 +696,7 @@ - + @@ -792,7 +792,7 @@ - + @@ -894,7 +894,7 @@ - + @@ -993,7 +993,7 @@ - + @@ -1337,11 +1337,11 @@ - - + + - + @@ -1419,7 +1419,7 @@ - + @@ -1506,7 +1506,7 @@ - + @@ -1650,7 +1650,7 @@ - + @@ -1658,13 +1658,13 @@ - - + + - + @@ -1691,7 +1691,7 @@ - + @@ -1739,7 +1739,7 @@ - + @@ -1790,7 +1790,7 @@ - + @@ -1961,7 +1961,7 @@ - + @@ -2081,7 +2081,7 @@ - + @@ -2108,18 +2108,15 @@ - + - - - - + - + @@ -2127,7 +2124,7 @@ - + @@ -2138,7 +2135,7 @@ - + @@ -2186,7 +2183,7 @@ - + @@ -2213,28 +2210,34 @@ - + - + - + - + + + + + + + - + - + @@ -2261,87 +2264,82 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + + + + + + + + + + - - - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + @@ -2362,7 +2360,7 @@ - + @@ -2394,7 +2392,7 @@ - + @@ -2420,8 +2418,305 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 1d6add8447d48eb983edca43be8c993d2c570b24 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Thu, 16 Apr 2026 02:04:03 -0400 Subject: [PATCH 08/57] Export MemoryPoolConfig with CHEVRON_API Annotate MemoryPoolConfig structure with CHEVRON_API to ensure proper symbol visibility from the shared library/object; Implementation remains incomplete --- include/chevron/process/memory/mem_pool_config.hpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/chevron/process/memory/mem_pool_config.hpp b/include/chevron/process/memory/mem_pool_config.hpp index 477fb82..f667095 100644 --- a/include/chevron/process/memory/mem_pool_config.hpp +++ b/include/chevron/process/memory/mem_pool_config.hpp @@ -19,6 +19,8 @@ #ifndef CHEVRON_LIB_PROCESS_MEMORY_POOL_CONFIGURATION_H_ #define CHEVRON_LIB_PROCESS_MEMORY_POOL_CONFIGURATION_H_ +#include "chevron/common/export.h" + namespace chevron::process { @@ -29,7 +31,7 @@ namespace chevron::process * @details * N/a */ -struct MemoryPoolConfig { /* TODO : INCOMPLETE IMPLEMENTATION!!! */ }; +struct CHEVRON_API MemoryPoolConfig { /* TODO : INCOMPLETE IMPLEMENTATION!!! */ }; } From 3dc7e65cfbb42f9e2a069e58adf4c593758b4e95 Mon Sep 17 00:00:00 2001 From: Jamon Bailey <83630529+jamon-bailey@users.noreply.github.com> Date: Thu, 16 Apr 2026 17:01:39 -0400 Subject: [PATCH 09/57] Chevron Diagrams Update --- docs/prj/Chevron_diagrams.drawio | 184 ++++++++++++++++++++----------- 1 file changed, 122 insertions(+), 62 deletions(-) diff --git a/docs/prj/Chevron_diagrams.drawio b/docs/prj/Chevron_diagrams.drawio index 8c2208b..2abce26 100644 --- a/docs/prj/Chevron_diagrams.drawio +++ b/docs/prj/Chevron_diagrams.drawio @@ -1,4 +1,4 @@ - + @@ -93,7 +93,7 @@ - + @@ -609,7 +609,7 @@ - + @@ -696,7 +696,7 @@ - + @@ -792,7 +792,7 @@ - + @@ -894,7 +894,7 @@ - + @@ -993,7 +993,7 @@ - + @@ -1341,7 +1341,7 @@ - + @@ -1419,7 +1419,7 @@ - + @@ -1506,7 +1506,7 @@ - + @@ -1650,7 +1650,7 @@ - + @@ -1658,13 +1658,13 @@ - - + + - + @@ -1691,7 +1691,7 @@ - + @@ -1739,7 +1739,7 @@ - + @@ -1790,7 +1790,7 @@ - + @@ -2135,7 +2135,7 @@ - + @@ -2327,19 +2327,19 @@ - + - + - + - + @@ -2360,39 +2360,63 @@ - + + + + - + - - + + - - + + + + + - + - - + + + + + + + + + + + + + + + + + + + + - + - + - + @@ -2419,7 +2443,7 @@ - + @@ -2515,7 +2539,7 @@ - + @@ -2599,7 +2623,7 @@ - + @@ -2670,53 +2694,89 @@ - - + + + + + - - + + + + + - - - - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + - - + + - - + + + + + + + + + + + + + + + + + + + + - - + + + + + From 984cf2c50ba9a9cbb6dc17e40711302ce607cc45 Mon Sep 17 00:00:00 2001 From: Jamon Bailey <83630529+jamon-bailey@users.noreply.github.com> Date: Fri, 17 Apr 2026 17:08:14 -0400 Subject: [PATCH 10/57] Digital Size Quantity Stubs Added skeleton for strongly-typed DigitalSize template as a stub; Still incomplete --- include/chevron/common/units/digital_size.hpp | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 include/chevron/common/units/digital_size.hpp diff --git a/include/chevron/common/units/digital_size.hpp b/include/chevron/common/units/digital_size.hpp new file mode 100644 index 0000000..b55a507 --- /dev/null +++ b/include/chevron/common/units/digital_size.hpp @@ -0,0 +1,37 @@ + +// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. +// Released under the terms of the GNU Affero General Public License version 3 + +// [ISJTB-CXX-XL20260108-000003] + +/*! + * @file digital_size.hpp + * + * @brief + * Declaration of digital size quantity template. + * + * @author + * Jamon T. Bailey + * + * @date 04-17-2026 + */ + +#ifndef CHEVRON_LIB_DIGITAL_SIZE_TEMPLATE_H_ +#define CHEVRON_LIB_DIGITAL_SIZE_TEMPLATE_H_ + +namespace chevron +{ + +/*! + * @brief + * Byte-based digital size quantity template. + * + * @details + * N/a + */ +template +class DigitalUnits { /* TODO : INCOMPLETE IMPLEMENTATION!!! */ }; + +} + +#endif // CHEVRON_LIB_DIGITAL_SIZE_TEMPLATE_H_ From 8c4bd94caf4142c54f978908074279d67f2ce0a0 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Sat, 18 Apr 2026 04:25:31 -0400 Subject: [PATCH 11/57] Implement DigitalSize template and traits Moved digital size measurement facilities to 'include/chevron/common/units/digital' subdirectory; Implementation STILL INCOMPLETE --- .../common/units/digital/digital_size.hpp | 123 ++++++++++++++++++ include/chevron/common/units/digital_size.hpp | 37 ------ 2 files changed, 123 insertions(+), 37 deletions(-) create mode 100644 include/chevron/common/units/digital/digital_size.hpp delete mode 100644 include/chevron/common/units/digital_size.hpp diff --git a/include/chevron/common/units/digital/digital_size.hpp b/include/chevron/common/units/digital/digital_size.hpp new file mode 100644 index 0000000..fc61a9f --- /dev/null +++ b/include/chevron/common/units/digital/digital_size.hpp @@ -0,0 +1,123 @@ + +// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. +// Released under the terms of the GNU Affero General Public License version 3 + +// [ISJTB-CXX-XL20260108-000003] + +/*! + * @file digital_size.hpp + * + * @brief + * Digital size quantity template. + * + * @author + * Jamon T. Bailey + * + * @date 04-17-2026 + */ + +#ifndef CHEVRON_LIB_HDR_DIGITAL_SIZE_TEMPLATE_H_ +#define CHEVRON_LIB_HDR_DIGITAL_SIZE_TEMPLATE_H_ + +#include +#include +#include "chevron/common/units/digital/type_traits.hpp" + +namespace chevron::units +{ + +/*! + * @brief + * Byte-based digital size quantity template. + * + * @details + * N/a + */ +template +class DigitalSize { + // ===================================================================================== // + // <> chevron::units::DigitalSize | [PUBLIC] NESTED TYPES + // ===================================================================================== // +public: + /*! @brief Alias of underlying byte representation. */ + using ReprType = uint64_t; + /*! @brief Ratio detailing total bytes in this unit. */ + using ByteRatio = std::ratio; + + // ===================================================================================== // + // <> chevron::units::DigitalSize | CONSTRUCTORS / DESTRUCTOR + // ===================================================================================== // + + /*! @brief Default construct with a digital size of 0 bytes. */ + constexpr DigitalSize() noexcept = default; + + /*! + * @brief + * Construct digital size quantity with specified unit count. + */ + constexpr explicit DigitalSize(ReprType units) noexcept + : unitCount_{units} + { + // + } + + ~DigitalSize() noexcept = default; + + // ===================================================================================== // + // <> chevron::units::DigitalSize | [PUBLIC] MEMBER METHODS + // ===================================================================================== // + + /*! + * @brief + * Returns raw count of digital units. + * + * @return + * Raw count of digital units. + */ + constexpr ReprType count() const noexcept + { + return unitCount_; + } + + // ===================================================================================== // + // <> chevron::units::DigitalSize | [PRIVATE] ATTRIBUTES + // ===================================================================================== // +private: + ReprType unitCount_; +}; + +// ===================================================================================== // +// <> chevron::units::DigitalSize | TYPE TRAITS +// ===================================================================================== // + +namespace traits { + +/*! + * @brief + * Verify conversion between provided digital unit types is lossless. + */ +template +constexpr bool is_lossless_size_conversion_v = std::ratio_divide< + typename From_Units::ByteRatio, typename To_Units::ByteRatio>::den == 1; + +/*! + * @brief + * Determine which of two digital units is smaller. + */ +template +using finer_unit_t = std::conditional_t< + std::ratio_less_v, Units_A, Units_B>; + +/*! + * @brief + * Determine which of two digital units is larger. + */ +template +using coarser_unit_t = std::conditional_t< + !std::ratio_less_v, Units_A, Units_B>; + +} + +} + +#endif // CHEVRON_LIB_HDR_DIGITAL_SIZE_TEMPLATE_H_ diff --git a/include/chevron/common/units/digital_size.hpp b/include/chevron/common/units/digital_size.hpp deleted file mode 100644 index b55a507..0000000 --- a/include/chevron/common/units/digital_size.hpp +++ /dev/null @@ -1,37 +0,0 @@ - -// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. -// Released under the terms of the GNU Affero General Public License version 3 - -// [ISJTB-CXX-XL20260108-000003] - -/*! - * @file digital_size.hpp - * - * @brief - * Declaration of digital size quantity template. - * - * @author - * Jamon T. Bailey - * - * @date 04-17-2026 - */ - -#ifndef CHEVRON_LIB_DIGITAL_SIZE_TEMPLATE_H_ -#define CHEVRON_LIB_DIGITAL_SIZE_TEMPLATE_H_ - -namespace chevron -{ - -/*! - * @brief - * Byte-based digital size quantity template. - * - * @details - * N/a - */ -template -class DigitalUnits { /* TODO : INCOMPLETE IMPLEMENTATION!!! */ }; - -} - -#endif // CHEVRON_LIB_DIGITAL_SIZE_TEMPLATE_H_ From 45d0bd31e0e74b16f889cc929a5efb690c32b0e5 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Sat, 18 Apr 2026 04:28:02 -0400 Subject: [PATCH 12/57] Added Utility for Digital Unit Conversions Add include/chevron/common/units/digital/unit_cast.hpp which introduces DigitalSizeCast, a constexpr template utility to convert between digital size unit types --- .../common/units/digital/unit_cast.hpp | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 include/chevron/common/units/digital/unit_cast.hpp diff --git a/include/chevron/common/units/digital/unit_cast.hpp b/include/chevron/common/units/digital/unit_cast.hpp new file mode 100644 index 0000000..fc82c06 --- /dev/null +++ b/include/chevron/common/units/digital/unit_cast.hpp @@ -0,0 +1,53 @@ + +// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. +// Released under the terms of the GNU Affero General Public License version 3 + +// [ISJTB-CXX-XL20260108-000003] + +/*! + * @file unit_cast.hpp + * + * @brief + * Digital size quantity cast utility. + * + * @author + * Jamon T. Bailey + * + * @date 04-18-2026 + */ + +#ifndef CHEVRON_LIB_HDR_DIGITAL_SIZE_UNIT_CAST_H_ +#define CHEVRON_LIB_HDR_DIGITAL_SIZE_UNIT_CAST_H_ + +#include +#include + +namespace chevron::units +{ + +/*! + * @brief + * TODO : INCOMPLETE DOCUMENTATION!!! + */ +template +struct DigitalSizeCast { + /*! + * @brief + * TODO : INCOMPLETE DOCUMENTATION!!! + */ + template + static constexpr To_Units cast(const From_Units units) + { + using SourceRatio = typename From_Units::ByteRatio; + using TargetRatio = typename To_Units::ByteRatio; + using Factor = std::ratio_divide; + return To_Units{ (units.count() * Factor::num) / Factor::den }; + } + + DigitalSizeCast() noexcept = delete; + ~DigitalSizeCast() noexcept = delete; +}; + +} + +#endif // CHEVRON_LIB_HDR_DIGITAL_SIZE_UNIT_CAST_H_ From 0b1617c448d53c1042cae0946f9f9c9faf3b15e1 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Sat, 18 Apr 2026 04:30:35 -0400 Subject: [PATCH 13/57] Digital Unit Type Traits Header Incomplete --- .../common/units/digital/type_traits.hpp | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 include/chevron/common/units/digital/type_traits.hpp diff --git a/include/chevron/common/units/digital/type_traits.hpp b/include/chevron/common/units/digital/type_traits.hpp new file mode 100644 index 0000000..88bd4ba --- /dev/null +++ b/include/chevron/common/units/digital/type_traits.hpp @@ -0,0 +1,60 @@ + +// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. +// Released under the terms of the GNU Affero General Public License version 3 + +// [ISJTB-CXX-XL20260108-000003] + +/*! + * @file type_traits.hpp + * + * @brief + * Defines digital unit entity related type traits. + * + * @author + * Jamon T. Bailey + * + * @date 04-17-2026 + */ + +#ifndef CHEVRON_LIB_HDR_DIGITAL_UNIT_TYPE_TRAITS_H_ +#define CHEVRON_LIB_HDR_DIGITAL_UNIT_TYPE_TRAITS_H_ + +#include +#include + +namespace chevron::units::traits +{ + +template +struct has_byte_ratio_spec { + // +}; + +//constexpr bool has_byte_ratio_spec_v = false; + +/*! + * @brief + * Verify conversion between provided ratios is lossless. + */ +template +constexpr bool is_lossless_ratio_conversion_v = std::ratio_divide::den == 1; + +/*! + * @brief + * Determine which of two ratios is smaller. + */ +template +using finer_ratio_t = std::conditional_t< + std::ratio_less_v, Ratio_A, Ratio_B>; + +/*! + * @brief + * Determine which of two ratios is larger. + */ +template +using coarser_ratio_t = std::conditional_t< + !std::ratio_less_v, Ratio_A, Ratio_B>; + +} + +#endif // CHEVRON_LIB_HDR_DIGITAL_UNIT_TYPE_TRAITS_H_ From 3223a9569eec16bbbadc26b5219a5e4d23b59b94 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Sat, 18 Apr 2026 04:32:42 -0400 Subject: [PATCH 14/57] General Unit Measurement Include Header Introduce a general units include header that centralizes unit-measure facilities; This front-facing header is still INCOMPLETE --- include/chevron/units.hpp | 40 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 include/chevron/units.hpp diff --git a/include/chevron/units.hpp b/include/chevron/units.hpp new file mode 100644 index 0000000..87220c5 --- /dev/null +++ b/include/chevron/units.hpp @@ -0,0 +1,40 @@ + +// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. +// Released under the terms of the GNU Affero General Public License version 3 + +// [ISJTB-CXX-XL20260108-000003] + +/*! + * @file units.hpp + * + * @brief + * General include header for unit measure related facilities. + * + * @author + * Jamon T. Bailey + * + * @date 04-18-2026 + */ + +#ifndef CHEVRON_LIB_HDR_EXPLICIT_UNITS_INCLUDE_H_ +#define CHEVRON_LIB_HDR_EXPLICIT_UNITS_INCLUDE_H_ + +#include "chevron/common/units/digital/digital_size.hpp" +#include "chevron/common/units/digital/unit_cast.hpp" + +namespace chevron +{ + +/*! + * @brief + * TODO : INCOMPLETE DOCUMENTATION!!! + */ +template +constexpr To_Units size_cast(const From_Units& source) noexcept +{ + return units::DigitalSizeCast::cast(source); +} + +} + +#endif // CHEVRON_LIB_HDR_EXPLICIT_UNITS_INCLUDE_H_ From 692b3043dbcab51ab1ece1f2fbd319502637e0ac Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Sat, 18 Apr 2026 04:33:52 -0400 Subject: [PATCH 15/57] Update mem_pool_config.hpp Temporary 'size_t' references to be replaced with explicit unit types; Incomplete --- include/chevron/process/memory/mem_pool_config.hpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/include/chevron/process/memory/mem_pool_config.hpp b/include/chevron/process/memory/mem_pool_config.hpp index f667095..050af49 100644 --- a/include/chevron/process/memory/mem_pool_config.hpp +++ b/include/chevron/process/memory/mem_pool_config.hpp @@ -31,7 +31,14 @@ namespace chevron::process * @details * N/a */ -struct CHEVRON_API MemoryPoolConfig { /* TODO : INCOMPLETE IMPLEMENTATION!!! */ }; +struct CHEVRON_API MemoryPoolConfig { + size_t block_size; + size_t chunk_size; + size_t block_alignment; + size_t budget_ceiling; + size_t initial_thread_blocks; + size_t max_thread_blocks; +}; } From 8a8ea7ef300a47bcad52c8e2e5a13e0c9ed03da2 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Sat, 18 Apr 2026 04:34:42 -0400 Subject: [PATCH 16/57] Update dev_exe.cpp --- tests/cli/dev_exe.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/cli/dev_exe.cpp b/tests/cli/dev_exe.cpp index 66f5eb3..aa36b4a 100644 --- a/tests/cli/dev_exe.cpp +++ b/tests/cli/dev_exe.cpp @@ -3,6 +3,7 @@ #include #include "chevron/function.hpp" +#include "chevron/units.hpp" #include "chevron/process/thread/thread_engine.hpp" #include "chevron/process/memory/memory_core.hpp" @@ -25,6 +26,11 @@ int main(int argc, char* argv[]) * * [ Function Utilities Notes ] * -> Static callable type `Func`? (No heap alloc) + * + * [ Units Facility Notes ] + * -> Length measure units? (i.e. milimeters, centimeters, meters, inches, feet, yards) + * -> (these can use device display info to determine pixel counts?) + * -> Time measure units? (i.e. miliseconds, seconds, minutes, hours, days, months, years) */ // Potential Debug Mode Bad Address Signal: From fabfa42708680e3ff17de9cbcabbcfcee8d80149 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Sat, 18 Apr 2026 04:35:19 -0400 Subject: [PATCH 17/57] Chevron Diagrams Update --- docs/prj/Chevron_diagrams.drawio | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/prj/Chevron_diagrams.drawio b/docs/prj/Chevron_diagrams.drawio index 2abce26..8a767a5 100644 --- a/docs/prj/Chevron_diagrams.drawio +++ b/docs/prj/Chevron_diagrams.drawio @@ -1,4 +1,4 @@ - + @@ -93,7 +93,7 @@ - + @@ -2697,7 +2697,7 @@ - + @@ -2718,7 +2718,7 @@ - + From 9104eb1edf1f0d0ddf3de62ad128c61277f7c334 Mon Sep 17 00:00:00 2001 From: Jamon Bailey <83630529+jamon-bailey@users.noreply.github.com> Date: Sat, 18 Apr 2026 23:34:07 -0400 Subject: [PATCH 18/57] Math Utilities Directory Compile-time and runtime math utilities --- include/chevron/utility/math/algebra.hpp | 43 ++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 include/chevron/utility/math/algebra.hpp diff --git a/include/chevron/utility/math/algebra.hpp b/include/chevron/utility/math/algebra.hpp new file mode 100644 index 0000000..d58cd0d --- /dev/null +++ b/include/chevron/utility/math/algebra.hpp @@ -0,0 +1,43 @@ + +// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. +// Released under the terms of the GNU Affero General Public License version 3 + +// [ISJTB-CXX-XL20260108-000003] + +/*! + * @file algebra.hpp + * + * @brief + * Algebraic computation utilities. + * + * @author + * Jamon T. Bailey + * + * @date 04-18-2026 + */ + +#ifndef CHEVRON_LIB_HDR_ALGEBRAIC_COMPUTATION_H_ +#define CHEVRON_LIB_HDR_ALGEBRAIC_COMPUTATION_H_ + +#include + +namespace chevron::math +{ + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +constexpr uint64_t exponent = []() { + uint64_t result = 1; + + for (uint64_t i = 0; i < Expon; ++i) + result *= Base; + + return result; +}(); + +} + +#endif // CHEVRON_LIB_HDR_ALGEBRAIC_COMPUTATION_H_ From 1c16b9b8a911acdff091a71736fec52967edc3e8 Mon Sep 17 00:00:00 2001 From: Jamon Bailey <83630529+jamon-bailey@users.noreply.github.com> Date: Sat, 18 Apr 2026 23:34:26 -0400 Subject: [PATCH 19/57] Further Digital Units Development Incomplete --- .../common/units/digital/digital_size.hpp | 50 +++++- include/chevron/units.hpp | 146 +++++++++++++++++- 2 files changed, 194 insertions(+), 2 deletions(-) diff --git a/include/chevron/common/units/digital/digital_size.hpp b/include/chevron/common/units/digital/digital_size.hpp index fc61a9f..3c4e842 100644 --- a/include/chevron/common/units/digital/digital_size.hpp +++ b/include/chevron/common/units/digital/digital_size.hpp @@ -21,11 +21,25 @@ #include #include +#include +#include #include "chevron/common/units/digital/type_traits.hpp" namespace chevron::units { +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +inline constexpr uint64_t IEC_DIGITAL_UNIT_MAGNITUDE = 1024; + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +inline constexpr uint64_t STD_DIGITAL_UNIT_MAGNITUDE = 1000; + /*! * @brief * Byte-based digital size quantity template. @@ -72,13 +86,47 @@ class DigitalSize { * Returns raw count of digital units. * * @return - * Raw count of digital units. + * Raw count of digital units */ constexpr ReprType count() const noexcept { return unitCount_; } + /*! + * @brief + * Returns total number of bytes in this size. + * + * @return + * This size in bytes + */ + constexpr ReprType bytes() const noexcept + { + return unitCount_ * ByteRatio::num / ByteRatio::den; + } + + /*! + * @brief + * Returns total number of bytes in this size as size_t. + * + * @return + * This size in bytes + */ + constexpr size_t size_t_bytes() const noexcept(sizeof(size_t) >= sizeof(ReprType)) + { + const ReprType byteCount = bytes(); + + if constexpr (sizeof(size_t) < sizeof(ReprType)) { + if (byteCount > std::numeric_limits::max()) { + throw std::overflow_error( + "DigitalSize::to_size_t: Byte count exceeds size_t capacity" + ); + } + } + + return static_cast(byteCount); + } + // ===================================================================================== // // <> chevron::units::DigitalSize | [PRIVATE] ATTRIBUTES // ===================================================================================== // diff --git a/include/chevron/units.hpp b/include/chevron/units.hpp index 87220c5..c8bcecd 100644 --- a/include/chevron/units.hpp +++ b/include/chevron/units.hpp @@ -21,13 +21,68 @@ #include "chevron/common/units/digital/digital_size.hpp" #include "chevron/common/units/digital/unit_cast.hpp" +#include "chevron/utility/math/algebra.hpp" namespace chevron { /*! * @brief - * TODO : INCOMPLETE DOCUMENTATION!!! + * Bytes. + */ +using Bytes = units::DigitalSize<1>; + +/*! + * @brief + * Kilobyte. + */ +using KB = units::DigitalSize; + +/*! + * @brief + * Megabyte. + */ +using MB = units::DigitalSize>; + +/*! + * @brief + * Gigabyte. + */ +using GB = units::DigitalSize>; + +/*! + * @brief + * Terabyte. + */ +using TB = units::DigitalSize>; + +/*! + * @brief + * Kilobyte (IEC Standard). + */ +using KiB = units::DigitalSize; + +/*! + * @brief + * Megabyte (IEC Standard). + */ +using MiB = units::DigitalSize>; + +/*! + * @brief + * Gigabyte (IEC Standard). + */ +using GiB = units::DigitalSize>; + +/*! + * @brief + * Terabyte (IEC Standard). + */ +using TiB = units::DigitalSize>; + +/*! + * @brief + * Cast digital size units to another digital unit. */ template constexpr To_Units size_cast(const From_Units& source) noexcept @@ -35,6 +90,95 @@ constexpr To_Units size_cast(const From_Units& source) noexcept return units::DigitalSizeCast::cast(source); } +/*! + * @brief + * User-defined literals for digital size units. + */ +namespace digital_size::literals { + +/*! + * @brief + * Byte integer literal. + */ +constexpr Bytes operator""_Bytes(unsigned long long value) noexcept +{ + return Bytes{static_cast(value)}; +} + +/*! + * @brief + * Kilobyte integer literal. + */ +constexpr KB operator""_KB(unsigned long long value) noexcept +{ + return KB{static_cast(value)}; +} + +/*! + * @brief + * Megabyte integer literal. + */ +constexpr MB operator""_MB(unsigned long long value) noexcept +{ + return MB{static_cast(value)}; +} + +/*! + * @brief + * Gigabyte integer literal. + */ +constexpr GB operator""_GB(unsigned long long value) noexcept +{ + return GB{static_cast(value)}; +} + +/*! + * @brief + * Terabyte integer literal. + */ +constexpr TB operator""_TB(unsigned long long value) noexcept +{ + return TB{static_cast(value)}; +} + +/*! + * @brief + * IEC Standard kilobyte integer literal. + */ +constexpr KiB operator""_KiB(unsigned long long value) noexcept +{ + return KiB{static_cast(value)}; +} + +/*! + * @brief + * IEC Standard megabyte integer literal. + */ +constexpr MiB operator""_MiB(unsigned long long value) noexcept +{ + return MiB{static_cast(value)}; +} + +/*! + * @brief + * IEC Standard gigabyte integer literal. + */ +constexpr GiB operator""_GiB(unsigned long long value) noexcept +{ + return GiB{static_cast(value)}; +} + +/*! + * @brief + * IEC Standard terabyte integer literal. + */ +constexpr TiB operator""_TiB(unsigned long long value) noexcept +{ + return TiB{static_cast(value)}; +} + +} + } #endif // CHEVRON_LIB_HDR_EXPLICIT_UNITS_INCLUDE_H_ From ee1a6a5ba9f185d37112cea26d86b1d45148e59a Mon Sep 17 00:00:00 2001 From: Jamon Bailey <83630529+jamon-bailey@users.noreply.github.com> Date: Sat, 18 Apr 2026 23:35:50 -0400 Subject: [PATCH 20/57] Bits Utilities Directory Introduces an alignment and bit inspection header; Both headers incomplete --- include/chevron/utility/bits/alignment.hpp | 116 +++++++++++++++++++ include/chevron/utility/bits/bit_inspect.hpp | 40 +++++++ 2 files changed, 156 insertions(+) create mode 100644 include/chevron/utility/bits/alignment.hpp create mode 100644 include/chevron/utility/bits/bit_inspect.hpp diff --git a/include/chevron/utility/bits/alignment.hpp b/include/chevron/utility/bits/alignment.hpp new file mode 100644 index 0000000..eecc118 --- /dev/null +++ b/include/chevron/utility/bits/alignment.hpp @@ -0,0 +1,116 @@ + +// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. +// Released under the terms of the GNU Affero General Public License version 3 + +// [ISJTB-CXX-XL20260108-000003] + +/*! + * @file alignment.hpp + * + * @brief + * Generic alignment utilities for sizes, offsets, and addresses. + * + * @author + * Jamon T. Bailey + * + * @date 04-18-2026 + */ + +#ifndef CHEVRON_LIB_HDR_GENERAL_ALIGNMENT_UTILITIES_H_ +#define CHEVRON_LIB_HDR_GENERAL_ALIGNMENT_UTILITIES_H_ + +#include +#include +#include + +namespace chevron::bits +{ + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +constexpr size_t alignUp(const size_t value, const size_t alignment) +{ + if (alignment == 0) + throw std::invalid_argument{ "alignUp: Alignment must be non-zero." }; + + const size_t remainder = value % alignment; + + if (remainder == 0) + return value; + + return value + (alignment - remainder); +} + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +T* alignUp(const T* ptr, const size_t alignment) +{ + const uintptr_t address = static_cast(ptr); + const uintptr_t aligned = static_cast( + alignUp(static_cast(address), alignment) + ); + return reinterpret_cast(aligned); +} + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +T* alignUp(const T* ptr) +{ + const uintptr_t address = static_cast(ptr); + const uintptr_t aligned = static_cast( + alignUp(static_cast(address), alignof(T)) + ); + return reinterpret_cast(aligned); +} + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +constexpr size_t alignDown(const size_t value, const size_t alignment) +{ + if (alignment == 0) + throw std::invalid_argument{ "alignDown: Alignment must be non-zero." }; + + return value - (value % alignment); +} + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +T* alignDown(const T* ptr, const size_t alignment) +{ + const uintptr_t address = static_cast(ptr); + const uintptr_t aligned = static_cast( + alignDown(static_cast(address), alignment) + ); + return reinterpret_cast(aligned); +} + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +T* alignDown(const T* ptr) +{ + const uintptr_t address = static_cast(ptr); + const uintptr_t aligned = static_cast( + alignDown(static_cast(address), alignof(T)) + ); + return reinterpret_cast(aligned); +} + +} + +#endif // CHEVRON_LIB_HDR_GENERAL_ALIGNMENT_UTILITIES_H_ diff --git a/include/chevron/utility/bits/bit_inspect.hpp b/include/chevron/utility/bits/bit_inspect.hpp new file mode 100644 index 0000000..f6b7ae5 --- /dev/null +++ b/include/chevron/utility/bits/bit_inspect.hpp @@ -0,0 +1,40 @@ + +// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. +// Released under the terms of the GNU Affero General Public License version 3 + +// [ISJTB-CXX-XL20260108-000003] + +/*! + * @file bit_inspect.hpp + * + * @brief + * Compile-time bit pattern inspection primitives. + * + * @author + * Jamon T. Bailey + * + * @date 04-18-2026 + */ + +#ifndef CHEVRON_LIB_HDR_BIT_INSPECTION_UTILITIES_H_ +#define CHEVRON_LIB_HDR_BIT_INSPECTION_UTILITIES_H_ + +#include +#include + +namespace chevron::bits +{ + +// TODO: INCOMPLETE HEADER!!! + +// NOTE: 'std::unsigned_integral' not reliable, need local impl + +// template +// constexpr int countLeadingZeros(const UIntT value) noexcept; + +// template +// constexpr int countTrailingZeros(const UIntT value) noexcept; + +} + +#endif // CHEVRON_LIB_HDR_BIT_INSPECTION_UTILITIES_H_ From 867c0d7e920a3dde6aa5f04a56219feb902e17ce Mon Sep 17 00:00:00 2001 From: Jamon Bailey <83630529+jamon-bailey@users.noreply.github.com> Date: Sat, 18 Apr 2026 23:36:13 -0400 Subject: [PATCH 21/57] Update dev_exe.cpp --- tests/cli/dev_exe.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/cli/dev_exe.cpp b/tests/cli/dev_exe.cpp index aa36b4a..b2006bf 100644 --- a/tests/cli/dev_exe.cpp +++ b/tests/cli/dev_exe.cpp @@ -6,6 +6,7 @@ #include "chevron/units.hpp" #include "chevron/process/thread/thread_engine.hpp" #include "chevron/process/memory/memory_core.hpp" +#include "chevron/utility/bits/alignment.hpp" int main(int argc, char* argv[]) { From a60abfd8de38b6414f00c31b6303dc02ce1e590a Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Sun, 19 Apr 2026 00:23:54 -0400 Subject: [PATCH 22/57] Misc. Header Fixes Adjustments to documentation comments --- .../chevron/common/units/digital/digital_size.hpp | 2 +- include/chevron/common/units/digital/type_traits.hpp | 9 +++++---- include/chevron/units.hpp | 12 ++++++++++++ 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/include/chevron/common/units/digital/digital_size.hpp b/include/chevron/common/units/digital/digital_size.hpp index 3c4e842..9290fbe 100644 --- a/include/chevron/common/units/digital/digital_size.hpp +++ b/include/chevron/common/units/digital/digital_size.hpp @@ -142,7 +142,7 @@ namespace traits { /*! * @brief - * Verify conversion between provided digital unit types is lossless. + * Verify conversion between provided digital size units is lossless. */ template constexpr bool is_lossless_size_conversion_v = std::ratio_divide< diff --git a/include/chevron/common/units/digital/type_traits.hpp b/include/chevron/common/units/digital/type_traits.hpp index 88bd4ba..50e22be 100644 --- a/include/chevron/common/units/digital/type_traits.hpp +++ b/include/chevron/common/units/digital/type_traits.hpp @@ -25,10 +25,11 @@ namespace chevron::units::traits { -template -struct has_byte_ratio_spec { - // -}; +// TODO: INCOMPLETE IMPLEMENTATION!!! +// template +// struct has_byte_ratio_spec { +// // +// }; //constexpr bool has_byte_ratio_spec_v = false; diff --git a/include/chevron/units.hpp b/include/chevron/units.hpp index c8bcecd..d45975f 100644 --- a/include/chevron/units.hpp +++ b/include/chevron/units.hpp @@ -26,6 +26,10 @@ namespace chevron { +// ===================================================================================== // +// <> DigitalSize | TYPE ALIASES +// ===================================================================================== // + /*! * @brief * Bytes. @@ -80,6 +84,10 @@ using GiB = units::DigitalSize>; +/* ------------------------------------------------------------------------------------- */ +// > DigitalSize | Cast Operations +/* ------------------------------------------------------------------------------------- */ + /*! * @brief * Cast digital size units to another digital unit. @@ -90,6 +98,10 @@ constexpr To_Units size_cast(const From_Units& source) noexcept return units::DigitalSizeCast::cast(source); } +// ===================================================================================== // +// <> DigitalSize | USER-DEFINED LITERALS +// ===================================================================================== // + /*! * @brief * User-defined literals for digital size units. From 7c1efb951e07940db777774627cdfea24dd5c980 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Sun, 19 Apr 2026 03:56:57 -0400 Subject: [PATCH 23/57] Added Arithmetic Operations to DigitalSize Introduce arithmetic and compound operators for DigitalSize; Moved class type traits above class definition --- .../common/units/digital/digital_size.hpp | 178 +++++++++++++++--- 1 file changed, 148 insertions(+), 30 deletions(-) diff --git a/include/chevron/common/units/digital/digital_size.hpp b/include/chevron/common/units/digital/digital_size.hpp index 9290fbe..0106bdc 100644 --- a/include/chevron/common/units/digital/digital_size.hpp +++ b/include/chevron/common/units/digital/digital_size.hpp @@ -28,6 +28,38 @@ namespace chevron::units { +// ===================================================================================== // +// <> chevron::units::DigitalSize | TYPE TRAITS +// ===================================================================================== // + +namespace traits { + +/*! + * @brief + * Verify conversion between provided digital size units is lossless. + */ +template +constexpr bool is_lossless_size_conversion_v = std::ratio_divide< + typename From_Units::ByteRatio, typename To_Units::ByteRatio>::den == 1; + +/*! + * @brief + * Determine which of two digital size units is smaller. + */ +template +using finer_size_t = std::conditional_t< + std::ratio_less_v, Units_A, Units_B>; + +/*! + * @brief + * Determine which of two digital size units is larger. + */ +template +using coarser_size_t = std::conditional_t< + !std::ratio_less_v, Units_A, Units_B>; + +} + /*! * @brief * TODO: INCOMPLETE DOCUMENTATION!!! @@ -128,43 +160,129 @@ class DigitalSize { } // ===================================================================================== // - // <> chevron::units::DigitalSize | [PRIVATE] ATTRIBUTES + // <> chevron::units::DigitalSize | OPERATORS // ===================================================================================== // -private: - ReprType unitCount_; -}; -// ===================================================================================== // -// <> chevron::units::DigitalSize | TYPE TRAITS -// ===================================================================================== // + /*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ + template + constexpr auto operator+(const DigitalSize& other) const noexcept + { + using FinerUnit = traits::finer_size_t, DigitalSize>; -namespace traits { + const ReprType totalBytes = bytes() + other.bytes(); + return FinerUnit{static_cast(totalBytes / FinerUnit::ByteRatio::num)}; + } -/*! - * @brief - * Verify conversion between provided digital size units is lossless. - */ -template -constexpr bool is_lossless_size_conversion_v = std::ratio_divide< - typename From_Units::ByteRatio, typename To_Units::ByteRatio>::den == 1; + /*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ + template + constexpr auto operator-(const DigitalSize& other) const noexcept + { + using FinerUnit = traits::finer_size_t, DigitalSize>; -/*! - * @brief - * Determine which of two digital units is smaller. - */ -template -using finer_unit_t = std::conditional_t< - std::ratio_less_v, Units_A, Units_B>; + const ReprType diffBytes = bytes() - other.bytes(); + return FinerUnit{static_cast(diffBytes / FinerUnit::ByteRatio::num)}; + } -/*! - * @brief - * Determine which of two digital units is larger. - */ -template -using coarser_unit_t = std::conditional_t< - !std::ratio_less_v, Units_A, Units_B>; + /*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ + constexpr DigitalSize operator*(const ReprType scalar) const noexcept + { + return DigitalSize{unitCount_ * scalar}; + } -} + /*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ + constexpr DigitalSize operator/(const ReprType scalar) const + { + if (scalar == 0) { + throw std::invalid_argument{"DigitalSize::operator/(): Division by zero."}; + } + + return DigitalSize{unitCount_ / scalar}; + } + + /*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ + template + constexpr double operator/(const DigitalSize& other) const + { + if (other.count() == 0) { + throw std::invalid_argument{ "DigitalSize::operator/(): Division by zero." }; + } + + return static_cast(bytes()) / static_cast(other.bytes()); + } + + // ===================================================================================== // + // <> chevron::units::DigitalSize | COMPOUND OPERATORS + // ===================================================================================== // + + /*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ + template + DigitalSize& operator+=(const DigitalSize& other) noexcept + { + const ReprType totalBytes = bytes() + other.bytes(); + unitCount_ = static_cast(totalBytes / ByteRatio::num); + return *this; + } + + /*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ + template + DigitalSize& operator-=(const DigitalSize& other) noexcept + { + const ReprType diffBytes = bytes() - other.bytes(); + unitCount_ = static_cast(diffBytes / ByteRatio::num); + return *this; + } + + /*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ + DigitalSize& operator*=(const ReprType scalar) noexcept + { + unitCount_ *= scalar; + return *this; + } + + /*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ + DigitalSize& operator/=(const ReprType scalar) + { + if (scalar == 0) { + throw std::invalid_argument{ "DigitalSize::operator/=(): Division by zero." }; + } + + unitCount_ /= scalar; + return *this; + } + + // ===================================================================================== // + // <> chevron::units::DigitalSize | [PRIVATE] ATTRIBUTES + // ===================================================================================== // +private: + ReprType unitCount_; +}; } From e7aa60fba8d1a3a8e169a787cb8a55fe4b1b3364 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Sun, 19 Apr 2026 03:58:52 -0400 Subject: [PATCH 24/57] Use DigitalSize Types for Process Memory Config Replace raw size_t fields with unit-safe Bytes for block_size, chunk_size, and budget_ceiling in MemoryPoolConfig; Other fields and structure remain unchanged --- include/chevron/process/memory/mem_pool_config.hpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/include/chevron/process/memory/mem_pool_config.hpp b/include/chevron/process/memory/mem_pool_config.hpp index 050af49..e4b2cd1 100644 --- a/include/chevron/process/memory/mem_pool_config.hpp +++ b/include/chevron/process/memory/mem_pool_config.hpp @@ -19,6 +19,7 @@ #ifndef CHEVRON_LIB_PROCESS_MEMORY_POOL_CONFIGURATION_H_ #define CHEVRON_LIB_PROCESS_MEMORY_POOL_CONFIGURATION_H_ +#include "chevron/units.hpp" #include "chevron/common/export.h" namespace chevron::process @@ -32,10 +33,10 @@ namespace chevron::process * N/a */ struct CHEVRON_API MemoryPoolConfig { - size_t block_size; - size_t chunk_size; + Bytes block_size; + Bytes chunk_size; size_t block_alignment; - size_t budget_ceiling; + Bytes budget_ceiling; size_t initial_thread_blocks; size_t max_thread_blocks; }; From ae1142884969350731cd01e493ef4ef89bac42a4 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Sun, 19 Apr 2026 04:00:02 -0400 Subject: [PATCH 25/57] Update dev_exe.cpp Rolling example of application implementation with Chevron --- tests/cli/dev_exe.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/cli/dev_exe.cpp b/tests/cli/dev_exe.cpp index b2006bf..b593290 100644 --- a/tests/cli/dev_exe.cpp +++ b/tests/cli/dev_exe.cpp @@ -14,6 +14,22 @@ int main(int argc, char* argv[]) // // Start... + using namespace chevron::digital_size::literals; + + constexpr chevron::MiB blockSize = 16_MiB; + constexpr chevron::MiB chunkSize = blockSize * 24; + constexpr chevron::GiB budgetMax = 3_GiB; + + chevron::process::MemoryPoolConfig config{}; + + config.block_size = chevron::size_cast(blockSize); + config.chunk_size = chevron::size_cast(chunkSize); + config.block_alignment = sizeof(std::max_align_t); + config.budget_ceiling = chevron::size_cast(budgetMax); + config.initial_thread_blocks = 2; + config.max_thread_blocks = 12; + + // // //\\// From 4593ec4de96678da8e66ed2e77fd170cc5e47d54 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Sun, 19 Apr 2026 13:14:34 -0400 Subject: [PATCH 26/57] Bit Power-of-Two Utilities Incomplete documentation --- include/chevron/utility/bits/power_of_two.hpp | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 include/chevron/utility/bits/power_of_two.hpp diff --git a/include/chevron/utility/bits/power_of_two.hpp b/include/chevron/utility/bits/power_of_two.hpp new file mode 100644 index 0000000..dc86197 --- /dev/null +++ b/include/chevron/utility/bits/power_of_two.hpp @@ -0,0 +1,92 @@ + +// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. +// Released under the terms of the GNU Affero General Public License version 3 + +// [ISJTB-CXX-XL20260108-000003] + +/*! + * @file power_of_two.hpp + * + * @brief + * Predicates and rounding operations for power-of-two values. + * + * @author + * Jamon T. Bailey + * + * @date 04-19-2026 + */ + +#ifndef CHEVRON_LIB_HDR_POWER_OF_TWO_UTILITIES_H_ +#define CHEVRON_LIB_HDR_POWER_OF_TWO_UTILITIES_H_ + +#include +#include +#include ///< NOTE: Potentially unreliable use of `std::unsigned_integral` concept +#include + +namespace chevron::bits +{ + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +constexpr UIntT max_power_of_two = []() { + return std::numeric_limits::digits - 1; +}(); + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + * + * @return + * True if provided value is a power of 2 + */ +template +constexpr bool is_power_of_two(UIntT value) noexcept { + return std::has_single_bit(value); +} + +/*! + * @brief + * Rounds provided value up to next power of 2. + * + * @return + * Next power of 2 + */ +template +constexpr UIntT next_power_of_two(UIntT value) { + constexpr UIntT maxPower = max_power_of_two; + + if (value > maxPower) { + throw std::overflow_error{ + "next_power_of_two(): Value exceeds the maximum representable " + "power of 2 for the target unsigned integral type." + }; + } + + return std::bit_ceil(value); +} + +/*! + * @brief + * Rounds provided value down to previous power of 2. + * + * @return + * Previous power of 2 + */ +template +constexpr UIntT previous_power_of_two(UIntT value) { + if (value == 0) { + throw std::overflow_error{ + "previous_power_of_two(): Zero value has no previous power of 2." + }; + } + + return std::bit_floor(value); +} + +} + +#endif // CHEVRON_LIB_HDR_POWER_OF_TWO_UTILITIES_H_ From 2dd81912cce99fa4e8e9de382461e5d37a0a52e5 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Sun, 19 Apr 2026 13:16:03 -0400 Subject: [PATCH 27/57] Process Memory Pool Config Validation Stubs Added validation method stubs for process memory pool configuration; Incomplete implementation --- .../process/memory/mem_pool_config.hpp | 22 +++++++++++++++ src/process/memory/mem_pool_config.cpp | 28 ++++++++++++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/include/chevron/process/memory/mem_pool_config.hpp b/include/chevron/process/memory/mem_pool_config.hpp index e4b2cd1..12dffa5 100644 --- a/include/chevron/process/memory/mem_pool_config.hpp +++ b/include/chevron/process/memory/mem_pool_config.hpp @@ -39,6 +39,28 @@ struct CHEVRON_API MemoryPoolConfig { Bytes budget_ceiling; size_t initial_thread_blocks; size_t max_thread_blocks; + + /*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + * + * @return + * True if valid memory configuration + */ + [[nodiscard]] bool isValid() const noexcept; + + /*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ + void isValidOrThrow() const; + +private: + /*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ + [[nodiscard]] bool validate(const char** reason) const noexcept; }; } diff --git a/src/process/memory/mem_pool_config.cpp b/src/process/memory/mem_pool_config.cpp index 3a86034..39b9722 100644 --- a/src/process/memory/mem_pool_config.cpp +++ b/src/process/memory/mem_pool_config.cpp @@ -16,6 +16,32 @@ * @date 04-14-2026 */ +#include #include "chevron/process/memory/mem_pool_config.hpp" - // TODO : INCOMPLETE IMPLEMENTATION!!! +// ===================================================================================== // +// <> chevron::process::MemoryPoolConfig | [PUBLIC] MEMBER METHODS +// ===================================================================================== // + +bool chevron::process::MemoryPoolConfig::isValid() const noexcept +{ + return validate(nullptr); +} + +void chevron::process::MemoryPoolConfig::isValidOrThrow() const +{ + const char* reason = nullptr; + + if (!validate(&reason)) + throw std::invalid_argument(reason); +} + +// ===================================================================================== // +// <> chevron::process::MemoryPoolConfig | [PRIVATE] MEMBER METHODS +// ===================================================================================== // + +bool chevron::process::MemoryPoolConfig::validate(const char** reason) const noexcept +{ + // TODO: INCOMPLETE IMPLEMENTATION!!! + return false; +} From 6ab4f6153c91b0b934860c353ff49d9c1d5573a4 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Sun, 19 Apr 2026 13:17:20 -0400 Subject: [PATCH 28/57] Update dev_exe.cpp --- tests/cli/dev_exe.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/cli/dev_exe.cpp b/tests/cli/dev_exe.cpp index b593290..fafe548 100644 --- a/tests/cli/dev_exe.cpp +++ b/tests/cli/dev_exe.cpp @@ -7,6 +7,7 @@ #include "chevron/process/thread/thread_engine.hpp" #include "chevron/process/memory/memory_core.hpp" #include "chevron/utility/bits/alignment.hpp" +#include "chevron/utility/bits/power_of_two.hpp" int main(int argc, char* argv[]) { @@ -29,6 +30,11 @@ int main(int argc, char* argv[]) config.initial_thread_blocks = 2; config.max_thread_blocks = 12; + if (!config.isValid()) { + std::cout << "\n[Process]: Invalid memory configuration." << std::endl; + return 1; + } + // // From ec0c8e7b030f6e3509787b3ad37d68830a496e66 Mon Sep 17 00:00:00 2001 From: Jamon Bailey <83630529+jamon-bailey@users.noreply.github.com> Date: Sun, 19 Apr 2026 20:54:38 -0400 Subject: [PATCH 29/57] Update power_of_two.hpp Concerns of portability were invalid --- include/chevron/utility/bits/power_of_two.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/chevron/utility/bits/power_of_two.hpp b/include/chevron/utility/bits/power_of_two.hpp index dc86197..ef5f525 100644 --- a/include/chevron/utility/bits/power_of_two.hpp +++ b/include/chevron/utility/bits/power_of_two.hpp @@ -21,7 +21,7 @@ #include #include -#include ///< NOTE: Potentially unreliable use of `std::unsigned_integral` concept +#include #include namespace chevron::bits From e52b5e439d235910bc8a2660d3f7c0e5e81b06c1 Mon Sep 17 00:00:00 2001 From: Jamon Bailey <83630529+jamon-bailey@users.noreply.github.com> Date: Sun, 19 Apr 2026 20:57:11 -0400 Subject: [PATCH 30/57] Digital Size Units Relocation Moved digital size units to dedicated header inside the library file structure, general include header references these nested files/types --- .../common/units/digital/size_units.hpp | 88 +++++++++++++++++++ include/chevron/units.hpp | 64 +++----------- 2 files changed, 99 insertions(+), 53 deletions(-) create mode 100644 include/chevron/common/units/digital/size_units.hpp diff --git a/include/chevron/common/units/digital/size_units.hpp b/include/chevron/common/units/digital/size_units.hpp new file mode 100644 index 0000000..6cb9f56 --- /dev/null +++ b/include/chevron/common/units/digital/size_units.hpp @@ -0,0 +1,88 @@ + +// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. +// Released under the terms of the GNU Affero General Public License version 3 + +// [ISJTB-CXX-XL20260108-000003] + +/*! + * @file size_units.hpp + * + * @brief + * Digital size unit type aliases. + * + * @author + * Jamon T. Bailey + * + * @date 04-19-2026 + */ + +#ifndef CHEVRON_LIB_HDR_DIGITAL_SIZE_UNIT_ALIASES_H_ +#define CHEVRON_LIB_HDR_DIGITAL_SIZE_UNIT_ALIASES_H_ + +#include "chevron/common/units/digital/digital_size.hpp" +#include "chevron/utility/math/algebra.hpp" + +namespace chevron::units +{ + +// ===================================================================================== // +// <> chevron::units::DigitalSize | TYPE ALIASES +// ===================================================================================== // + +/*! + * @brief + * Bytes. + */ +using Bytes = units::DigitalSize<1>; + +/*! + * @brief + * Kilobyte. + */ +using KB = units::DigitalSize; + +/*! + * @brief + * Megabyte. + */ +using MB = units::DigitalSize>; + +/*! + * @brief + * Gigabyte. + */ +using GB = units::DigitalSize>; + +/*! + * @brief + * Terabyte. + */ +using TB = units::DigitalSize>; + +/*! + * @brief + * Kilobyte (IEC Standard - Kibibyte). + */ +using KiB = units::DigitalSize; + +/*! + * @brief + * Megabyte (IEC Standard - Mebibyte). + */ +using MiB = units::DigitalSize>; + +/*! + * @brief + * Gigabyte (IEC Standard - Gibibyte). + */ +using GiB = units::DigitalSize>; + +/*! + * @brief + * Terabyte (IEC Standard - Tebibyte). + */ +using TiB = units::DigitalSize>; + +} + +#endif // CHEVRON_LIB_HDR_DIGITAL_SIZE_UNIT_ALIASES_H_ diff --git a/include/chevron/units.hpp b/include/chevron/units.hpp index d45975f..0749007 100644 --- a/include/chevron/units.hpp +++ b/include/chevron/units.hpp @@ -20,8 +20,8 @@ #define CHEVRON_LIB_HDR_EXPLICIT_UNITS_INCLUDE_H_ #include "chevron/common/units/digital/digital_size.hpp" +#include "chevron/common/units/digital/size_units.hpp" #include "chevron/common/units/digital/unit_cast.hpp" -#include "chevron/utility/math/algebra.hpp" namespace chevron { @@ -30,59 +30,17 @@ namespace chevron // <> DigitalSize | TYPE ALIASES // ===================================================================================== // -/*! - * @brief - * Bytes. - */ -using Bytes = units::DigitalSize<1>; +using units::Bytes; ///< Byte -/*! - * @brief - * Kilobyte. - */ -using KB = units::DigitalSize; +using units::KiB; ///< Kibibyte +using units::MiB; ///< Mebibyte +using units::GiB; ///< Gibibyte +using units::TiB; ///< Tebibyte -/*! - * @brief - * Megabyte. - */ -using MB = units::DigitalSize>; - -/*! - * @brief - * Gigabyte. - */ -using GB = units::DigitalSize>; - -/*! - * @brief - * Terabyte. - */ -using TB = units::DigitalSize>; - -/*! - * @brief - * Kilobyte (IEC Standard). - */ -using KiB = units::DigitalSize; - -/*! - * @brief - * Megabyte (IEC Standard). - */ -using MiB = units::DigitalSize>; - -/*! - * @brief - * Gigabyte (IEC Standard). - */ -using GiB = units::DigitalSize>; - -/*! - * @brief - * Terabyte (IEC Standard). - */ -using TiB = units::DigitalSize>; +using units::KB; ///< Kilobyte +using units::MB; ///< Megabyte +using units::GB; ///< Gigabyte +using units::TB; ///< Terabyte /* ------------------------------------------------------------------------------------- */ // > DigitalSize | Cast Operations @@ -90,7 +48,7 @@ using TiB = units::DigitalSize constexpr To_Units size_cast(const From_Units& source) noexcept From c5e6fb7b7f3cfe71956c35416c3351fdf163e050 Mon Sep 17 00:00:00 2001 From: Jamon Bailey <83630529+jamon-bailey@users.noreply.github.com> Date: Sun, 19 Apr 2026 20:58:57 -0400 Subject: [PATCH 31/57] Additional Digital Size Template Operators Added missing operators to digital size unit template; Misc. fixes to header --- .../common/units/digital/digital_size.hpp | 92 ++++++++++++++++--- 1 file changed, 78 insertions(+), 14 deletions(-) diff --git a/include/chevron/common/units/digital/digital_size.hpp b/include/chevron/common/units/digital/digital_size.hpp index 0106bdc..52fd268 100644 --- a/include/chevron/common/units/digital/digital_size.hpp +++ b/include/chevron/common/units/digital/digital_size.hpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include "chevron/common/units/digital/type_traits.hpp" @@ -62,13 +63,13 @@ using coarser_size_t = std::conditional_t< /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Binary-based digital unit magnitude. */ inline constexpr uint64_t IEC_DIGITAL_UNIT_MAGNITUDE = 1024; /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Decimal-based digital unit magnitude. */ inline constexpr uint64_t STD_DIGITAL_UNIT_MAGNITUDE = 1000; @@ -151,7 +152,7 @@ class DigitalSize { if constexpr (sizeof(size_t) < sizeof(ReprType)) { if (byteCount > std::numeric_limits::max()) { throw std::overflow_error( - "DigitalSize::to_size_t: Byte count exceeds size_t capacity" + "DigitalSize::size_t_bytes(): Byte count exceeds size_t capacity" ); } } @@ -159,10 +160,53 @@ class DigitalSize { return static_cast(byteCount); } + template + constexpr auto absoluteDifference(const DigitalSize& other) const noexcept + { + using FinerUnit = traits::finer_size_t, DigitalSize>; + + const ReprType thisBytes = bytes(); + const ReprType otherBytes = other.bytes(); + return FinerUnit{ + std::max(thisBytes, otherBytes) - std::min(thisBytes, otherBytes) + }; + // TODO: INCOMPLETE IMPLEMENTATION!!! + } + // ===================================================================================== // // <> chevron::units::DigitalSize | OPERATORS // ===================================================================================== // + /*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ + template + constexpr bool operator==(const DigitalSize& other) const noexcept + { + return this->bytes() == other.bytes(); + } + + /*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ + template + constexpr bool operator<(const DigitalSize& other) const noexcept + { + return this->bytes() < other.bytes(); + } + + /*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ + template + constexpr bool operator>(const DigitalSize& other) const noexcept + { + return this->bytes() > other.bytes(); + } + /*! * @brief * TODO: INCOMPLETE DOCUMENTATION!!! @@ -172,7 +216,7 @@ class DigitalSize { { using FinerUnit = traits::finer_size_t, DigitalSize>; - const ReprType totalBytes = bytes() + other.bytes(); + const ReprType totalBytes = this->bytes() + other.bytes(); return FinerUnit{static_cast(totalBytes / FinerUnit::ByteRatio::num)}; } @@ -185,7 +229,7 @@ class DigitalSize { { using FinerUnit = traits::finer_size_t, DigitalSize>; - const ReprType diffBytes = bytes() - other.bytes(); + const ReprType diffBytes = this->bytes() - other.bytes(); return FinerUnit{static_cast(diffBytes / FinerUnit::ByteRatio::num)}; } @@ -195,7 +239,7 @@ class DigitalSize { */ constexpr DigitalSize operator*(const ReprType scalar) const noexcept { - return DigitalSize{unitCount_ * scalar}; + return DigitalSize{this->unitCount_ * scalar}; } /*! @@ -208,7 +252,7 @@ class DigitalSize { throw std::invalid_argument{"DigitalSize::operator/(): Division by zero."}; } - return DigitalSize{unitCount_ / scalar}; + return DigitalSize{this->unitCount_ / scalar}; } /*! @@ -222,13 +266,33 @@ class DigitalSize { throw std::invalid_argument{ "DigitalSize::operator/(): Division by zero." }; } - return static_cast(bytes()) / static_cast(other.bytes()); + return static_cast(this->bytes()) / static_cast(other.bytes()); } // ===================================================================================== // // <> chevron::units::DigitalSize | COMPOUND OPERATORS // ===================================================================================== // + /*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ + template + constexpr bool operator<=(const DigitalSize& other) const noexcept + { + return this->bytes() <= other.bytes(); + } + + /*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ + template + constexpr bool operator>=(const DigitalSize& other) const noexcept + { + return this->bytes() >= other.bytes(); + } + /*! * @brief * TODO: INCOMPLETE DOCUMENTATION!!! @@ -236,8 +300,8 @@ class DigitalSize { template DigitalSize& operator+=(const DigitalSize& other) noexcept { - const ReprType totalBytes = bytes() + other.bytes(); - unitCount_ = static_cast(totalBytes / ByteRatio::num); + const ReprType totalBytes = this->bytes() + other.bytes(); + this->unitCount_ = static_cast(totalBytes / ByteRatio::num); return *this; } @@ -248,8 +312,8 @@ class DigitalSize { template DigitalSize& operator-=(const DigitalSize& other) noexcept { - const ReprType diffBytes = bytes() - other.bytes(); - unitCount_ = static_cast(diffBytes / ByteRatio::num); + const ReprType diffBytes = this->bytes() - other.bytes(); + this->unitCount_ = static_cast(diffBytes / ByteRatio::num); return *this; } @@ -259,7 +323,7 @@ class DigitalSize { */ DigitalSize& operator*=(const ReprType scalar) noexcept { - unitCount_ *= scalar; + this->unitCount_ *= scalar; return *this; } @@ -273,7 +337,7 @@ class DigitalSize { throw std::invalid_argument{ "DigitalSize::operator/=(): Division by zero." }; } - unitCount_ /= scalar; + this->unitCount_ /= scalar; return *this; } From c0ec7225c0d8486ce161a0c4ff43f99e6334686b Mon Sep 17 00:00:00 2001 From: Jamon Bailey <83630529+jamon-bailey@users.noreply.github.com> Date: Sun, 19 Apr 2026 21:00:58 -0400 Subject: [PATCH 32/57] Unit Cast Utility Noexcept Qualifier Added missing noexcept qualifier to digital size unit cast utility --- include/chevron/common/units/digital/unit_cast.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/chevron/common/units/digital/unit_cast.hpp b/include/chevron/common/units/digital/unit_cast.hpp index fc82c06..26d4b26 100644 --- a/include/chevron/common/units/digital/unit_cast.hpp +++ b/include/chevron/common/units/digital/unit_cast.hpp @@ -36,7 +36,7 @@ struct DigitalSizeCast { * TODO : INCOMPLETE DOCUMENTATION!!! */ template - static constexpr To_Units cast(const From_Units units) + static constexpr To_Units cast(const From_Units units) noexcept { using SourceRatio = typename From_Units::ByteRatio; using TargetRatio = typename To_Units::ByteRatio; From 841a087fe1f51037e24a68de8422596f9f616d5f Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Mon, 20 Apr 2026 20:56:46 -0400 Subject: [PATCH 33/57] Rename power_of_two.hpp to powers.hpp Renamed source file and introduced power of ten related utilities; Incomplete --- include/chevron/utility/bits/power_of_two.hpp | 92 -------- include/chevron/utility/bits/powers.hpp | 207 ++++++++++++++++++ 2 files changed, 207 insertions(+), 92 deletions(-) delete mode 100644 include/chevron/utility/bits/power_of_two.hpp create mode 100644 include/chevron/utility/bits/powers.hpp diff --git a/include/chevron/utility/bits/power_of_two.hpp b/include/chevron/utility/bits/power_of_two.hpp deleted file mode 100644 index ef5f525..0000000 --- a/include/chevron/utility/bits/power_of_two.hpp +++ /dev/null @@ -1,92 +0,0 @@ - -// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. -// Released under the terms of the GNU Affero General Public License version 3 - -// [ISJTB-CXX-XL20260108-000003] - -/*! - * @file power_of_two.hpp - * - * @brief - * Predicates and rounding operations for power-of-two values. - * - * @author - * Jamon T. Bailey - * - * @date 04-19-2026 - */ - -#ifndef CHEVRON_LIB_HDR_POWER_OF_TWO_UTILITIES_H_ -#define CHEVRON_LIB_HDR_POWER_OF_TWO_UTILITIES_H_ - -#include -#include -#include -#include - -namespace chevron::bits -{ - -/*! - * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! - */ -template -constexpr UIntT max_power_of_two = []() { - return std::numeric_limits::digits - 1; -}(); - -/*! - * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! - * - * @return - * True if provided value is a power of 2 - */ -template -constexpr bool is_power_of_two(UIntT value) noexcept { - return std::has_single_bit(value); -} - -/*! - * @brief - * Rounds provided value up to next power of 2. - * - * @return - * Next power of 2 - */ -template -constexpr UIntT next_power_of_two(UIntT value) { - constexpr UIntT maxPower = max_power_of_two; - - if (value > maxPower) { - throw std::overflow_error{ - "next_power_of_two(): Value exceeds the maximum representable " - "power of 2 for the target unsigned integral type." - }; - } - - return std::bit_ceil(value); -} - -/*! - * @brief - * Rounds provided value down to previous power of 2. - * - * @return - * Previous power of 2 - */ -template -constexpr UIntT previous_power_of_two(UIntT value) { - if (value == 0) { - throw std::overflow_error{ - "previous_power_of_two(): Zero value has no previous power of 2." - }; - } - - return std::bit_floor(value); -} - -} - -#endif // CHEVRON_LIB_HDR_POWER_OF_TWO_UTILITIES_H_ diff --git a/include/chevron/utility/bits/powers.hpp b/include/chevron/utility/bits/powers.hpp new file mode 100644 index 0000000..d601807 --- /dev/null +++ b/include/chevron/utility/bits/powers.hpp @@ -0,0 +1,207 @@ + +// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. +// Released under the terms of the GNU Affero General Public License version 3 + +// [ISJTB-CXX-XL20260108-000003] + +/*! + * @file powers.hpp + * + * @brief + * Predicates and rounding operations for power-of-two values. + * + * @author + * Jamon T. Bailey + * + * @date 04-19-2026 + */ + +#ifndef CHEVRON_LIB_HDR_POWER_OF_TWO_UTILITIES_H_ +#define CHEVRON_LIB_HDR_POWER_OF_TWO_UTILITIES_H_ + +#include +#include +#include +#include + +namespace chevron::bits +{ + +// ===================================================================================== // +// <> POWER-OF-TWO UTILITIES +// ===================================================================================== // + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +constexpr UIntT max_power_of_two_exponent = []() { + return std::numeric_limits::digits - 1; +}(); + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + * + * @return + * True if provided value is a power of 2 + */ +template +constexpr bool is_power_of_two(UIntT value) noexcept { + return std::has_single_bit(value); +} + +/*! + * @brief + * Rounds provided value up to next power of 2. + * + * @return + * Next power of 2 + */ +template +constexpr UIntT next_power_of_two(UIntT value) { + constexpr UIntT maxPower = max_power_of_two_exponent; + + if (value > maxPower) { + throw std::overflow_error{ + "next_power_of_two(): Value exceeds the maximum representable " + "power of 2 for the target unsigned integral type." + }; + } + + return std::bit_ceil(value); +} + +/*! + * @brief + * Rounds provided value down to previous power of 2. + * + * @return + * Previous power of 2 + */ +template +constexpr UIntT previous_power_of_two(UIntT value) { + if (value == 0) { + throw std::overflow_error{ + "previous_power_of_two(): Zero value has no previous power of 2." + }; + } + + return std::bit_floor(value); +} + +// ===================================================================================== // +// <> POWER-OF-TEN UTILITIES +// ===================================================================================== // + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +constexpr UIntT max_power_of_ten_exponent = []() { + constexpr UIntT uintMax = std::numeric_limits::max(); + UIntT exponent = 0; + UIntT value = 1; + + while (value <= uintMax / 10) { + value *= 10; + ++exponent; + } + + return exponent; +}(); + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + * + * @return + * True if provided value is a power of 10 + */ +template +constexpr bool is_power_of_ten(UIntT value) noexcept { + if (value == 0 || value % 2 != 0) + return false; + + while (value > 1) { + const bool multipleOfTen = value % 10 != 0; + + switch (multipleOfTen) { + case true: + return false; + + default: + value /= 10; + } + } + + return true; +} + +/*! + * @brief + * Rounds provided value up to next power of 10. + * + * @return + * Next power of 10 + */ +template +constexpr UIntT next_power_of_ten(UIntT value) { + if (value == 0) + return UIntT{value}; + + constexpr UIntT uintMax = std::numeric_limits::max(); + UIntT accumulator = 1; + + while (accumulator < value) { + if (accumulator > uintMax / 10) { + throw std::overflow_error{ + "next_power_of_ten<>: Value exceeds the maximum representable " + "power of ten for the target unsigned integral type." + }; + } + + accumulator *= 10; + } + + return accumulator; +} + +/*! + * @brief + * Rounds provided value down to previous power of 10. + * + * @return + * Previous power of 10 + */ +template +constexpr UIntT previous_power_of_ten(UIntT value) { + if (value == 0) { + throw std::overflow_error{ + "previous_power_of_ten(): Zero value has no previous power of 10." + }; + } + + constexpr UIntT uintMax = std::numeric_limits::max(); + UIntT accumulator = 1; + + while (accumulator <= value) { + if (accumulator > uintMax / 10) + return accumulator; + + const UIntT next = accumulator * 10; + + if (next > value) + return accumulator; + + accumulator = next; + } + + return accumulator; +} + +} + +#endif // CHEVRON_LIB_HDR_POWER_OF_TWO_UTILITIES_H_ From c6cb08315c4b994c6cfa3ac89a2d522d1fcba55f Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Mon, 20 Apr 2026 20:56:53 -0400 Subject: [PATCH 34/57] Update dev_exe.cpp --- tests/cli/dev_exe.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/cli/dev_exe.cpp b/tests/cli/dev_exe.cpp index fafe548..ce906c9 100644 --- a/tests/cli/dev_exe.cpp +++ b/tests/cli/dev_exe.cpp @@ -7,7 +7,7 @@ #include "chevron/process/thread/thread_engine.hpp" #include "chevron/process/memory/memory_core.hpp" #include "chevron/utility/bits/alignment.hpp" -#include "chevron/utility/bits/power_of_two.hpp" +#include "chevron/utility/bits/powers.hpp" int main(int argc, char* argv[]) { From 4212300ed20b99b7675139d59d7c8d968141b051 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Mon, 20 Apr 2026 22:37:32 -0400 Subject: [PATCH 35/57] Moved Bloating Digital Size Type Traits --- .../common/units/digital/digital_size.hpp | 67 ++++++++--------- .../common/units/digital/type_traits.hpp | 75 ++++++++++++++++--- 2 files changed, 98 insertions(+), 44 deletions(-) diff --git a/include/chevron/common/units/digital/digital_size.hpp b/include/chevron/common/units/digital/digital_size.hpp index 52fd268..adee4a0 100644 --- a/include/chevron/common/units/digital/digital_size.hpp +++ b/include/chevron/common/units/digital/digital_size.hpp @@ -24,52 +24,20 @@ #include #include #include -#include "chevron/common/units/digital/type_traits.hpp" +#include "chevron/common/units/digital/unit_cast.hpp" namespace chevron::units { -// ===================================================================================== // -// <> chevron::units::DigitalSize | TYPE TRAITS -// ===================================================================================== // - -namespace traits { - -/*! - * @brief - * Verify conversion between provided digital size units is lossless. - */ -template -constexpr bool is_lossless_size_conversion_v = std::ratio_divide< - typename From_Units::ByteRatio, typename To_Units::ByteRatio>::den == 1; - -/*! - * @brief - * Determine which of two digital size units is smaller. - */ -template -using finer_size_t = std::conditional_t< - std::ratio_less_v, Units_A, Units_B>; - -/*! - * @brief - * Determine which of two digital size units is larger. - */ -template -using coarser_size_t = std::conditional_t< - !std::ratio_less_v, Units_A, Units_B>; - -} - /*! * @brief - * Binary-based digital unit magnitude. + * Binary-based digital size unit magnitude. */ inline constexpr uint64_t IEC_DIGITAL_UNIT_MAGNITUDE = 1024; /*! * @brief - * Decimal-based digital unit magnitude. + * Decimal-based digital size unit magnitude. */ inline constexpr uint64_t STD_DIGITAL_UNIT_MAGNITUDE = 1000; @@ -348,6 +316,35 @@ class DigitalSize { ReprType unitCount_; }; +namespace traits { + +/* ------------------------------------------------------------------------------------- */ +// > is_digital_size | TYPE TRAIT +/* ------------------------------------------------------------------------------------- */ + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +struct is_digital_size : std::false_type {}; + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +struct is_digital_size> : std::true_type {}; + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +constexpr bool is_digital_size_v = is_digital_size::value; + +} + } #endif // CHEVRON_LIB_HDR_DIGITAL_SIZE_TEMPLATE_H_ diff --git a/include/chevron/common/units/digital/type_traits.hpp b/include/chevron/common/units/digital/type_traits.hpp index 50e22be..9b5511c 100644 --- a/include/chevron/common/units/digital/type_traits.hpp +++ b/include/chevron/common/units/digital/type_traits.hpp @@ -25,20 +25,34 @@ namespace chevron::units::traits { -// TODO: INCOMPLETE IMPLEMENTATION!!! -// template -// struct has_byte_ratio_spec { -// // -// }; +/* ------------------------------------------------------------------------------------- */ +// > is_std_ratio | TYPE TRAIT +/* ------------------------------------------------------------------------------------- */ -//constexpr bool has_byte_ratio_spec_v = false; +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!!! + */ +template +struct is_std_ratio : std::false_type {}; /*! * @brief - * Verify conversion between provided ratios is lossless. + * TODO: INCOMPLETE DOCUMENTATION!!! */ -template -constexpr bool is_lossless_ratio_conversion_v = std::ratio_divide::den == 1; +template +struct is_std_ratio> : std::true_type {}; + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +constexpr bool is_std_ratio_v = is_std_ratio::value; + +/* ------------------------------------------------------------------------------------- */ +// > finer_ratio / coarser_ratio | TYPE TRAIT +/* ------------------------------------------------------------------------------------- */ /*! * @brief @@ -56,6 +70,49 @@ template using coarser_ratio_t = std::conditional_t< !std::ratio_less_v, Ratio_A, Ratio_B>; +/* ------------------------------------------------------------------------------------- */ +// > is_lossless_ratio_conversion | TYPE TRAIT +/* ------------------------------------------------------------------------------------- */ + +/*! + * @brief + * Verify conversion between provided ratios is lossless. + */ +template +constexpr bool is_lossless_ratio_conversion_v = std::ratio_divide::den == 1; + +/* ------------------------------------------------------------------------------------- */ +// > is_lossless_size_conversion | TYPE TRAIT +/* ------------------------------------------------------------------------------------- */ + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +constexpr bool is_lossless_size_conversion_v = std::ratio_divide< + typename From_Units::ByteRatio, typename To_Units::ByteRatio>::den == 1; + +/* ------------------------------------------------------------------------------------- */ +// > finer_size / coarser_size | TYPE TRAIT +/* ------------------------------------------------------------------------------------- */ + +/*! + * @brief + * Determine which of two digital size units is smaller. + */ +template +using finer_size_t = std::conditional_t< + std::ratio_less_v, Units_A, Units_B>; + +/*! + * @brief + * Determine which of two digital size units is larger. + */ +template +using coarser_size_t = std::conditional_t< + !std::ratio_less_v, Units_A, Units_B>; + } #endif // CHEVRON_LIB_HDR_DIGITAL_UNIT_TYPE_TRAITS_H_ From 5ea4f6c9b3ca50885307951d876d02549d4e4431 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Wed, 22 Apr 2026 19:25:43 -0400 Subject: [PATCH 36/57] Function Utilities Namespace Change Moved function utilities from 'chevron::model' to 'chevron::func'; Also renamed argument indexing concept name, now titled 'valid_arguments_index' from 'is_valid_args_index' (consistent with library concepts approach) --- include/chevron/utility/function/callable.hpp | 6 +++--- include/chevron/utility/function/concepts.hpp | 6 +++--- include/chevron/utility/function/func_args.hpp | 8 ++++---- include/chevron/utility/function/type_traits.hpp | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/include/chevron/utility/function/callable.hpp b/include/chevron/utility/function/callable.hpp index 1f95c12..550cf7b 100644 --- a/include/chevron/utility/function/callable.hpp +++ b/include/chevron/utility/function/callable.hpp @@ -181,9 +181,9 @@ Callable(ClassType*, ReturnT (ClassType::*)(ArgsT...) const) /*! @details Lambda and functor deduction guide. */ template Callable(Function&&) -> Callable< - typename model::traits::callable_signature>::ReturnType, - model::traits::to_funcargs_t< - typename model::traits::callable_signature>::ArgsTuple>>; + typename func::traits::callable_signature>::ReturnType, + func::traits::to_funcargs_t< + typename func::traits::callable_signature>::ArgsTuple>>; // TODO: Lambda and functor deduction guide only works // when directly naming `Callable` with it's fully diff --git a/include/chevron/utility/function/concepts.hpp b/include/chevron/utility/function/concepts.hpp index f4ff479..ac67560 100644 --- a/include/chevron/utility/function/concepts.hpp +++ b/include/chevron/utility/function/concepts.hpp @@ -17,13 +17,13 @@ #include #include -namespace chevron::model::concepts +namespace chevron::func::concepts { /*! @brief Concept that validates indexing into function parameters. */ template -concept is_valid_args_index = Index >= 0 && Index < sizeof...(ArgsT); +concept valid_arguments_index = Index >= 0 && Index < sizeof...(ArgsT); -} // namespace chevron::model::concepts +} // namespace chevron::func::concepts #endif // CHEVRON_LIB_HDR_FUNCTION_CONCEPTS_H_ diff --git a/include/chevron/utility/function/func_args.hpp b/include/chevron/utility/function/func_args.hpp index 78bf340..e5e3098 100644 --- a/include/chevron/utility/function/func_args.hpp +++ b/include/chevron/utility/function/func_args.hpp @@ -78,7 +78,7 @@ class FuncArgs { /*! @brief Get argument at specified index. */ template - requires(model::concepts::is_valid_args_index) + requires(func::concepts::valid_arguments_index) [[nodiscard]] constexpr decltype(auto) get() noexcept { return std::get(this->args); @@ -86,7 +86,7 @@ class FuncArgs { /*! @brief Get argument at specified index. */ template - requires(model::concepts::is_valid_args_index) + requires(func::concepts::valid_arguments_index) [[nodiscard]] constexpr decltype(auto) get() const noexcept { return std::get(this->args); @@ -116,7 +116,7 @@ class FuncArgs { // <> chevron::FuncArgs | TYPE TRAIT UTILITIES // ===================================================================================== // -namespace model::traits +namespace func::traits { /*! @brief Function arguments structure conversion utility. */ @@ -133,7 +133,7 @@ struct to_funcargs> { template using to_funcargs_t = to_funcargs::type; -} // namespace model::traits +} // namespace func::traits // ===================================================================================== // // <> chevron::FuncArgs | DEDUCTION GUIDES diff --git a/include/chevron/utility/function/type_traits.hpp b/include/chevron/utility/function/type_traits.hpp index bd5ebe2..673abe5 100644 --- a/include/chevron/utility/function/type_traits.hpp +++ b/include/chevron/utility/function/type_traits.hpp @@ -18,7 +18,7 @@ #include #include -namespace chevron::model::traits +namespace chevron::func::traits { /*! @brief Callable entity signature extraction utility. */ @@ -67,6 +67,6 @@ struct callable_signature { using FuncType = ReturnT (*)(ArgsT...); }; -} // namespace chevron::model::traits +} // namespace chevron::func::traits #endif // CHEVRON_LIB_HDR_FUNCTION_TYPE_TRAITS_H_ From 0ce1250a3862d0fb306eaf581f501bb56356167d Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Wed, 22 Apr 2026 19:29:22 -0400 Subject: [PATCH 37/57] Additional Predefined Function Types Introduce templated Callable aliases that accept argument packs ('VoidReturnArgs', 'BoolReturnArgs', 'CharReturnArgs', 'IntReturnArgs', 'FloatReturnArgs', 'DoubleReturnArgs', 'CstrReturnArgs', 'SizeTReturnArgs'); Removed the dependency on header and the previous 'StringReturnNoArgs' alias; Also renamed 'SizeReturnNoArgs' to 'SizeTReturnNoArgs' --- include/chevron/function.hpp | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/include/chevron/function.hpp b/include/chevron/function.hpp index 85ae862..393c826 100644 --- a/include/chevron/function.hpp +++ b/include/chevron/function.hpp @@ -16,7 +16,6 @@ #include "chevron/utility/function/func_args.hpp" #include "chevron/utility/function/callable.hpp" -#include namespace chevron { @@ -24,29 +23,58 @@ namespace chevron /*! @brief Callable function that accepts no arguments and returns void. */ using VoidReturnNoArgs = Callable; +/*! @brief Callable function that accepts specified arguments and returns void. */ +template +using VoidReturnArgs = Callable>; + /*! @brief Callable function that accepts no arguments and returns a boolean. */ using BoolReturnNoArgs = Callable; +/*! @brief Callable function that accepts specified arguments and returns a boolean. */ +template +using BoolReturnArgs = Callable>; + /*! @brief Callable function that accepts no arguments and returns a character. */ using CharReturnNoArgs = Callable; +/*! @brief Callable function that accepts specified arguments and returns a character. */ +template +using CharReturnArgs = Callable>; + /*! @brief Callable function that accepts no arguments and returns an integer. */ using IntReturnNoArgs = Callable; +/*! @brief Callable function that accepts specified arguments and returns an integer. */ +template +using IntReturnArgs = Callable>; + /*! @brief Callable function that accepts no arguments and returns a float. */ using FloatReturnNoArgs = Callable; +/*! @brief Callable function that accepts specified arguments and returns a float. */ +template +using FloatReturnArgs = Callable>; + /*! @brief Callable function that accepts no arguments and returns a double. */ using DoubleReturnNoArgs = Callable; +/*! @brief Callable function that accepts specified arguments and returns a double. */ +template +using DoubleReturnArgs = Callable>; + /*! @brief Callable function that accepts no arguments and returns a const char pointer. */ using CstrReturnNoArgs = Callable; -/*! @brief Callable function that accepts no arguments and returns a string. */ -using StringReturnNoArgs = Callable; +/*! @brief Callable function that accepts specified arguments and returns a const char pointer. */ +template +using CstrReturnArgs = Callable>; /*! @brief Callable function that accepts no arguments and returns size_t. */ -using SizeReturnNoArgs = Callable; +using SizeTReturnNoArgs = Callable; + +/*! @brief Callable function that accepts specified arguments and returns size_t. */ +template +using SizeTReturnArgs = Callable>; /*! @brief Callable function that accepts no arguments and returns specified type. */ template From 307e634eb554163aa7edc32407f18673566ce0f0 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Wed, 22 Apr 2026 19:37:54 -0400 Subject: [PATCH 38/57] Digital Unit Concepts Introduce digital unit concepts in 'common/units/digital/size_concepts.hpp'; Updated digital unit type traits to include 'utility/bits/powers.hpp' and add 'is_binary_size_system_v' and 'is_decimal_size_system_v' traits (detects power-of-two / power-of-ten byte ratios); Removed now-redundant 'is_lossless_size_conversion_v' trait (made into a concept instead) --- .../common/units/digital/size_concepts.hpp | 130 ++++++++++++++++++ .../common/units/digital/type_traits.hpp | 39 ++++-- 2 files changed, 157 insertions(+), 12 deletions(-) create mode 100644 include/chevron/common/units/digital/size_concepts.hpp diff --git a/include/chevron/common/units/digital/size_concepts.hpp b/include/chevron/common/units/digital/size_concepts.hpp new file mode 100644 index 0000000..b41502d --- /dev/null +++ b/include/chevron/common/units/digital/size_concepts.hpp @@ -0,0 +1,130 @@ + +// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. +// Released under the terms of the GNU Affero General Public License version 3 + +// [ISJTB-CXX-XL20260108-000003] + +/*! + * @file size_concepts.hpp + * + * @brief + * Defines digital unit entity related type concepts. + * + * @author + * Jamon T. Bailey + * + * @date 04-20-2026 + */ + +#ifndef CHEVRON_LIB_HDR_DIGITAL_UNIT_TYPE_CONCEPTS_H_ +#define CHEVRON_LIB_HDR_DIGITAL_UNIT_TYPE_CONCEPTS_H_ + +#include +#include "chevron/common/units/digital/type_traits.hpp" + +namespace chevron::units::concepts +{ + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +concept has_byte_ratio_specification = requires { + requires traits::is_std_ratio_v; +}; + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +concept lossless_digital_size_conversion = requires { + requires has_byte_ratio_specification + && has_byte_ratio_specification; + requires traits::is_lossless_ratio_conversion_v< + typename From_Units::ByteRatio, typename To_Units::ByteRatio>; +}; + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +concept binary_digital_size_units = requires { + requires traits::is_binary_size_system_v; +}; + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +concept decimal_digital_size_units = requires { + requires traits::is_decimal_size_system_v; +}; + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +concept matching_digital_size_systems = requires { + requires (traits::is_binary_size_system_v && traits::is_binary_size_system_v) + || (traits::is_decimal_size_system_v && traits::is_decimal_size_system_v); +}; + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +concept digital_size_unit_api = requires(const UnitsT& u) { + { u.count() } -> std::same_as; + { u.bytes() } -> std::same_as; + { u.size_t_bytes() } -> std::same_as; +}; + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +concept digital_size_unit_arithmetic = requires(UnitsT& u, typename UnitsT::ReprType i) { + // Relational operators + { u < u } -> std::same_as; + { u > u } -> std::same_as; + { u == u } -> std::same_as; + { u <= u } -> std::same_as; + { u >= u } -> std::same_as; + + // Arithmetic operators + { u + u } -> std::same_as; + { u - u } -> std::same_as; + // NOTE: Heterogeneous arithmetic results not covered by the above + { u * i } -> std::same_as; + { u / i } -> std::same_as; + { u / u } -> std::same_as; + + // Arithmetic assignment operators + { u += u } -> std::same_as; + { u -= u } -> std::same_as; + { u *= i } -> std::same_as; + { u /= i } -> std::same_as; +}; + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +concept digital_size_units = requires { + requires std::unsigned_integral; + requires digital_size_unit_api; + requires digital_size_unit_arithmetic; + requires binary_digital_size_units || decimal_digital_size_units; +}; + +} + +#endif // CHEVRON_LIB_HDR_DIGITAL_UNIT_TYPE_CONCEPTS_H_ diff --git a/include/chevron/common/units/digital/type_traits.hpp b/include/chevron/common/units/digital/type_traits.hpp index 9b5511c..4452cf3 100644 --- a/include/chevron/common/units/digital/type_traits.hpp +++ b/include/chevron/common/units/digital/type_traits.hpp @@ -21,6 +21,7 @@ #include #include +#include "chevron/utility/bits/powers.hpp" namespace chevron::units::traits { @@ -81,18 +82,6 @@ using coarser_ratio_t = std::conditional_t< template constexpr bool is_lossless_ratio_conversion_v = std::ratio_divide::den == 1; -/* ------------------------------------------------------------------------------------- */ -// > is_lossless_size_conversion | TYPE TRAIT -/* ------------------------------------------------------------------------------------- */ - -/*! - * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! - */ -template -constexpr bool is_lossless_size_conversion_v = std::ratio_divide< - typename From_Units::ByteRatio, typename To_Units::ByteRatio>::den == 1; - /* ------------------------------------------------------------------------------------- */ // > finer_size / coarser_size | TYPE TRAIT /* ------------------------------------------------------------------------------------- */ @@ -113,6 +102,32 @@ template using coarser_size_t = std::conditional_t< !std::ratio_less_v, Units_A, Units_B>; +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +constexpr bool is_binary_size_system_v = + requires { typename UnitsT::ByteRatio; } + && requires { typename UnitsT::ReprType; } + && (UnitsT::ByteRatio::den == 1) + && bits::is_power_of_two( + static_cast(UnitsT::ByteRatio::num) + ); + +/*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ +template +constexpr bool is_decimal_size_system_v = + requires { typename UnitsT::ByteRatio; } + && requires { typename UnitsT::ReprType; } + && (UnitsT::ByteRatio::den == 1) + && bits::is_power_of_ten( + static_cast(UnitsT::ByteRatio::num) + ); + } #endif // CHEVRON_LIB_HDR_DIGITAL_UNIT_TYPE_TRAITS_H_ From c608e7d3444bba2267b3bfff1fb4b5ae1a401c85 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Wed, 22 Apr 2026 19:48:11 -0400 Subject: [PATCH 39/57] Update unit_cast.hpp Add include for 'chevron/common/units/digital/size_concepts.hpp' to 'unit_cast.hpp' (INCOMPLETE!!!) TODO: Having troubles integrating 'digital_size_units' concept inside of the 'DigitalSizeCast' class --- include/chevron/common/units/digital/unit_cast.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/include/chevron/common/units/digital/unit_cast.hpp b/include/chevron/common/units/digital/unit_cast.hpp index 26d4b26..7e453bd 100644 --- a/include/chevron/common/units/digital/unit_cast.hpp +++ b/include/chevron/common/units/digital/unit_cast.hpp @@ -21,6 +21,7 @@ #include #include +#include "chevron/common/units/digital/size_concepts.hpp" namespace chevron::units { From 80205bcde265bfbfc58e5414741e987f3c283642 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Wed, 22 Apr 2026 19:51:13 -0400 Subject: [PATCH 40/57] Digital Size Template Fixes Fixes and additions to 'DigitalSize' class template --- .../common/units/digital/digital_size.hpp | 99 +++++++++++++++---- 1 file changed, 79 insertions(+), 20 deletions(-) diff --git a/include/chevron/common/units/digital/digital_size.hpp b/include/chevron/common/units/digital/digital_size.hpp index adee4a0..3955762 100644 --- a/include/chevron/common/units/digital/digital_size.hpp +++ b/include/chevron/common/units/digital/digital_size.hpp @@ -25,6 +25,7 @@ #include #include #include "chevron/common/units/digital/unit_cast.hpp" +#include "chevron/common/units/digital/size_concepts.hpp" namespace chevron::units { @@ -50,6 +51,13 @@ inline constexpr uint64_t STD_DIGITAL_UNIT_MAGNITUDE = 1000; */ template class DigitalSize { + // ===================================================================================== // + // <> chevron::units::DigitalSize | [PRIVATE] NESTED TYPES + // ===================================================================================== // + + /*! @brief Highest digital size resolution (Bytes). */ + using ByteResolution = DigitalSize<1ULL>; + // ===================================================================================== // // <> chevron::units::DigitalSize | [PUBLIC] NESTED TYPES // ===================================================================================== // @@ -76,6 +84,17 @@ class DigitalSize { // } + /*! + * @brief + * Construct digital size quantity with different size units (lossy). + */ + template + constexpr explicit DigitalSize(const DigitalSize& other) + : unitCount_{DigitalSizeCast>::cast(other).count()} + { + // + } + ~DigitalSize() noexcept = default; // ===================================================================================== // @@ -128,17 +147,22 @@ class DigitalSize { return static_cast(byteCount); } + /*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ template constexpr auto absoluteDifference(const DigitalSize& other) const noexcept { - using FinerUnit = traits::finer_size_t, DigitalSize>; + using Self = DigitalSize; + using Other = DigitalSize; + using FinerUnit = traits::finer_size_t; - const ReprType thisBytes = bytes(); - const ReprType otherBytes = other.bytes(); + const ReprType selfUnits = DigitalSizeCast::cast(*this).count(); + const ReprType otherUnits = DigitalSizeCast::cast(other).count(); return FinerUnit{ - std::max(thisBytes, otherBytes) - std::min(thisBytes, otherBytes) + std::max(selfUnits, otherUnits) - std::min(selfUnits, otherUnits) }; - // TODO: INCOMPLETE IMPLEMENTATION!!! } // ===================================================================================== // @@ -182,10 +206,19 @@ class DigitalSize { template constexpr auto operator+(const DigitalSize& other) const noexcept { - using FinerUnit = traits::finer_size_t, DigitalSize>; + using Self = DigitalSize; + using Other = DigitalSize; + + if constexpr (concepts::matching_digital_size_systems) { + using FinerUnit = traits::finer_size_t; - const ReprType totalBytes = this->bytes() + other.bytes(); - return FinerUnit{static_cast(totalBytes / FinerUnit::ByteRatio::num)}; + const FinerUnit lhs = DigitalSizeCast::cast(*this); + const FinerUnit rhs = DigitalSizeCast::cast(other); + return FinerUnit{ lhs.count() + rhs.count() }; + } + else { + return ByteResolution{ this->bytes() + other.bytes() }; + } } /*! @@ -195,10 +228,19 @@ class DigitalSize { template constexpr auto operator-(const DigitalSize& other) const noexcept { - using FinerUnit = traits::finer_size_t, DigitalSize>; + using Self = DigitalSize; + using Other = DigitalSize; + + if constexpr (concepts::matching_digital_size_systems) { + using FinerUnit = traits::finer_size_t; - const ReprType diffBytes = this->bytes() - other.bytes(); - return FinerUnit{static_cast(diffBytes / FinerUnit::ByteRatio::num)}; + const FinerUnit lhs = DigitalSizeCast::cast(*this); + const FinerUnit rhs = DigitalSizeCast::cast(other); + return FinerUnit{ lhs.count() - rhs.count() }; + } + else { + return ByteResolution{ this->bytes() - other.bytes() }; + } } /*! @@ -216,9 +258,8 @@ class DigitalSize { */ constexpr DigitalSize operator/(const ReprType scalar) const { - if (scalar == 0) { + if (scalar == 0) throw std::invalid_argument{"DigitalSize::operator/(): Division by zero."}; - } return DigitalSize{this->unitCount_ / scalar}; } @@ -230,13 +271,29 @@ class DigitalSize { template constexpr double operator/(const DigitalSize& other) const { - if (other.count() == 0) { - throw std::invalid_argument{ "DigitalSize::operator/(): Division by zero." }; - } + if (other.count() == 0) + throw std::invalid_argument{"DigitalSize::operator/(): Division by zero."}; return static_cast(this->bytes()) / static_cast(other.bytes()); } + /*! + * @brief + * TODO: INCOMPLETE DOCUMENTATION!!! + */ + template + constexpr ReprType operator%(const DigitalSize& other) const + { + using Self = DigitalSize; + + const Self castedOther = DigitalSizeCast::cast(other); + + if (castedOther.count() == 0) + throw std::invalid_argument{"DigitalSize::operator%(): Division by zero."}; + + return static_cast(this->unitCount_ % castedOther.count()); + } + // ===================================================================================== // // <> chevron::units::DigitalSize | COMPOUND OPERATORS // ===================================================================================== // @@ -268,8 +325,9 @@ class DigitalSize { template DigitalSize& operator+=(const DigitalSize& other) noexcept { - const ReprType totalBytes = this->bytes() + other.bytes(); - this->unitCount_ = static_cast(totalBytes / ByteRatio::num); + using Self = DigitalSize; + + this->unitCount_ += DigitalSizeCast::cast(other).count(); return *this; } @@ -280,8 +338,9 @@ class DigitalSize { template DigitalSize& operator-=(const DigitalSize& other) noexcept { - const ReprType diffBytes = this->bytes() - other.bytes(); - this->unitCount_ = static_cast(diffBytes / ByteRatio::num); + using Self = DigitalSize; + + this->unitCount_ -= DigitalSizeCast::cast(other).count(); return *this; } From 4b8a8f95196e521ebfdfb45382879e4dbc2d5120 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Wed, 22 Apr 2026 19:53:32 -0400 Subject: [PATCH 41/57] Update dev_exe.cpp --- tests/cli/dev_exe.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/cli/dev_exe.cpp b/tests/cli/dev_exe.cpp index ce906c9..8a19739 100644 --- a/tests/cli/dev_exe.cpp +++ b/tests/cli/dev_exe.cpp @@ -30,11 +30,6 @@ int main(int argc, char* argv[]) config.initial_thread_blocks = 2; config.max_thread_blocks = 12; - if (!config.isValid()) { - std::cout << "\n[Process]: Invalid memory configuration." << std::endl; - return 1; - } - // // From a4399fb0a027f4437f4b3acbd65b8b04c5cd9a16 Mon Sep 17 00:00:00 2001 From: Jamon Bailey <83630529+jamon-bailey@users.noreply.github.com> Date: Wed, 22 Apr 2026 20:07:16 -0400 Subject: [PATCH 42/57] Update digital_size.hpp Fixed ill-formed type trait helper variable --- include/chevron/common/units/digital/digital_size.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/chevron/common/units/digital/digital_size.hpp b/include/chevron/common/units/digital/digital_size.hpp index 3955762..d4b048b 100644 --- a/include/chevron/common/units/digital/digital_size.hpp +++ b/include/chevron/common/units/digital/digital_size.hpp @@ -399,8 +399,8 @@ struct is_digital_size> : std::true_type {}; * @brief * TODO: INCOMPLETE DOCUMENTATION!!! */ -template -constexpr bool is_digital_size_v = is_digital_size::value; +template +constexpr bool is_digital_size_v = is_digital_size::value; } From 8b615251b645d32e4e1866b2c62c86dfef56c645 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Wed, 22 Apr 2026 21:41:37 -0400 Subject: [PATCH 43/57] Update unit_cast.hpp Documentation update --- .../common/units/digital/unit_cast.hpp | 37 ++++++++++++++++++- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/include/chevron/common/units/digital/unit_cast.hpp b/include/chevron/common/units/digital/unit_cast.hpp index 7e453bd..c5d504d 100644 --- a/include/chevron/common/units/digital/unit_cast.hpp +++ b/include/chevron/common/units/digital/unit_cast.hpp @@ -28,13 +28,45 @@ namespace chevron::units /*! * @brief - * TODO : INCOMPLETE DOCUMENTATION!!! + * Performs unconditional conversions between DigitalSize units. + * + * @important + * Conversions that go from finer to coarser grained units can + * experience truncation (information loss) if the finer unit is + * not in multiples of the coarser unit (i.e. 1,024 Bytes -> KB + * = 1 KB with 24 bytes discarded). Conversions are determined to + * be lossy or lossless at the call site. + * + * @details + * Given a digital size quantity expressed in one unit, an equivalent + * quantity is provided in another specified digital size unit. The + * target units are specified explicitly and the source units are + * deduced from the `cast()` argument. + * + * The cast is unconditional regardless of the possibility of lossing + * information in the process. Conversions that cannot be represented + * exact in the target units are truncated toward zero. Callers of this + * utility are expected to be aware of lossy conversions during cast + * that go from finer units to coarser units. + * + * Truncation also occurs when casting between binary and decimal based + * digital size systems (i.e. casting 1 KiB to 1 KB). The two sizing + * systems work with different unit magnitude baselines (KiB = 1024 + * bytes vs. KB = 1000 bytes). The additional 24 bytes present in the + * binary KiB are effectively discarded in the process rendering the + * operation lossy. In the reverse direction, 1 KB is truncated to + * 0 KiB since the decimal magnitude baseline is short 24 bytes to a + * full 1 KiB. */ template struct DigitalSizeCast { /*! * @brief - * TODO : INCOMPLETE DOCUMENTATION!!! + * Converts provided units to an equivalent value in specified + * units. + * + * @return + * Converted digital size units */ template static constexpr To_Units cast(const From_Units units) noexcept @@ -42,6 +74,7 @@ struct DigitalSizeCast { using SourceRatio = typename From_Units::ByteRatio; using TargetRatio = typename To_Units::ByteRatio; using Factor = std::ratio_divide; + return To_Units{ (units.count() * Factor::num) / Factor::den }; } From 3b76834502cae7cf8afabf4a5532d0816ac97e53 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Wed, 22 Apr 2026 22:09:29 -0400 Subject: [PATCH 44/57] Update size_units.hpp Documentation update Updated references to size system magnitude constants --- .../common/units/digital/size_units.hpp | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/include/chevron/common/units/digital/size_units.hpp b/include/chevron/common/units/digital/size_units.hpp index 6cb9f56..e85c60d 100644 --- a/include/chevron/common/units/digital/size_units.hpp +++ b/include/chevron/common/units/digital/size_units.hpp @@ -39,49 +39,65 @@ using Bytes = units::DigitalSize<1>; * @brief * Kilobyte. */ -using KB = units::DigitalSize; +using KB = units::DigitalSize; /*! * @brief * Megabyte. */ -using MB = units::DigitalSize>; +using MB = units::DigitalSize>; /*! * @brief * Gigabyte. */ -using GB = units::DigitalSize>; +using GB = units::DigitalSize>; /*! * @brief * Terabyte. */ -using TB = units::DigitalSize>; +using TB = units::DigitalSize>; /*! * @brief * Kilobyte (IEC Standard - Kibibyte). + * + * @note + * This is a binary-based digital size unit that should not be + * confused with its decimal counterpart. */ -using KiB = units::DigitalSize; +using KiB = units::DigitalSize; /*! * @brief * Megabyte (IEC Standard - Mebibyte). + * + * @note + * This is a binary-based digital size unit that should not be + * confused with its decimal counterpart. */ -using MiB = units::DigitalSize>; +using MiB = units::DigitalSize>; /*! * @brief * Gigabyte (IEC Standard - Gibibyte). + * + * @note + * This is a binary-based digital size unit that should not be + * confused with its decimal counterpart. */ -using GiB = units::DigitalSize>; +using GiB = units::DigitalSize>; /*! * @brief * Terabyte (IEC Standard - Tebibyte). + * + * @note + * This is a binary-based digital size unit that should not be + * confused with its decimal counterpart. */ -using TiB = units::DigitalSize>; +using TiB = units::DigitalSize>; } From 9dab5bd38e82ecead9792e45bc848713f7d2309c Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Wed, 22 Apr 2026 22:12:06 -0400 Subject: [PATCH 45/57] Rename digital unit magnitude constants Renamed 'IEC_DIGITAL_UNIT_MAGNITUDE' to 'BINARY_DIGITAL_UNIT_MAGNITUDE' and 'STD_DIGITAL_UNIT_MAGNITUDE' to 'DECIMAL_DIGITAL_UNIT_MAGNITUDE' --- include/chevron/common/units/digital/digital_size.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/chevron/common/units/digital/digital_size.hpp b/include/chevron/common/units/digital/digital_size.hpp index d4b048b..d8d70f1 100644 --- a/include/chevron/common/units/digital/digital_size.hpp +++ b/include/chevron/common/units/digital/digital_size.hpp @@ -34,13 +34,13 @@ namespace chevron::units * @brief * Binary-based digital size unit magnitude. */ -inline constexpr uint64_t IEC_DIGITAL_UNIT_MAGNITUDE = 1024; +inline constexpr uint64_t BINARY_DIGITAL_UNIT_MAGNITUDE = 1024; /*! * @brief * Decimal-based digital size unit magnitude. */ -inline constexpr uint64_t STD_DIGITAL_UNIT_MAGNITUDE = 1000; +inline constexpr uint64_t DECIMAL_DIGITAL_UNIT_MAGNITUDE = 1000; /*! * @brief From 0bd4cf822292de4a497300aca6da554a787d871e Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Thu, 23 Apr 2026 00:17:09 -0400 Subject: [PATCH 46/57] Library-Wide Macro Definitions Introduces primary library macro header --- include/chevron/common/macro_defs.h | 98 +++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 include/chevron/common/macro_defs.h diff --git a/include/chevron/common/macro_defs.h b/include/chevron/common/macro_defs.h new file mode 100644 index 0000000..084b804 --- /dev/null +++ b/include/chevron/common/macro_defs.h @@ -0,0 +1,98 @@ + +// Copyright (C) 2026 by Jamon T. Bailey and InfinSys, LLC. All rights reserved. +// Released under the terms of the GNU Affero General Public License version 3 + +// [ISJTB-CXX-XL20260108-000003] + +/*! + * @file macro_defs.h + * + * @brief + * Defines library-wide macro definitions. + * + * @author + * Jamon T. Bailey + * + * @date 04-22-2026 + */ + +#ifndef CHEVRON_LIB_HDR_COMMON_MACRO_DEFINITIONS_H_ +#define CHEVRON_LIB_HDR_COMMON_MACRO_DEFINITIONS_H_ + +// ===================================================================================== // +// [ ARCHITECTURE DETECTION ] +// +// Identifies the CPU architecture of the target platform. Each supported architecture +// is probed with both its GCC/Clang spelling and its MSVC spelling, since the two +// compiler families do not share a common macro for this. +// ===================================================================================== // + +#if defined(__x86_64__) || defined(_M_X64) + #define CHEVRON_ARCH_X86_64 1 +#elif defined(__i386__) || defined(_M_IX86) + #define CHEVRON_ARCH_X86 1 +#elif defined(__aarch64__) || defined(_M_ARM64) + #define CHEVRON_ARCH_ARM64 1 +#elif defined(__arm__) || defined(_M_ARM) + #define CHEVRON_ARCH_ARM 1 +#endif + +// ===================================================================================== // +// [ COMPILER DETECTION ] +// +// Identifies the compiler building Chevron. Clang is checked before GCC because Clang +// defines `__GNUC__` for GCC compatibility, and MSVC is identified through `_MSC_VER`. +// ===================================================================================== // + +#if defined(__clang__) + #define CHEVRON_CLANG 1 +#elif defined(__GNUC__) + #define CHEVRON_GCC 1 +#elif defined(_MSC_VER) + #define CHEVRON_MSVC 1 +#else + #error "Chevron does not support this compiler." +#endif + +// ===================================================================================== // +// [ OPERATING SYSTEM DETECTION ] +// +// Identifies the operating system of the target platform. `_WIN32` is defined on both +// 32 and 64-bit Windows and is the canonical Windows marker; `_WIN64` is checked +// alongside it defensively. Cygwin is treated as a distinct branch because it targets +// a POSIX layer on top of Windows rather than the native Win32 API. +// ===================================================================================== // + +#if defined(_WIN32) || defined(_WIN64) + #define CHEVRON_WINDOWS 1 +#elif defined(__CYGWIN__) + #define CHEVRON_CYGWIN 1 +#elif defined(__APPLE__) + #define CHEVRON_MACOS 1 +#elif defined(__linux__) + #define CHEVRON_LINUX 1 +#else + #error "Chevron does not support this operating system." +#endif + +// ===================================================================================== // +// [ POINTER-WIDTH DETECTION ] +// +// Identifies the target platforms pointer/address width using `UINTPTR_MAX` defined in +// ``, which represents the maximum value of `uintptr_t`. This approach evades +// the complexities of vendor-specific macros. +// ===================================================================================== // + +#include + +#if UINTPTR_MAX == 0xFFFFFFFFFFFFFFFFu + #define CHEVRON_64BIT 1 + #define CHEVRON_PTR_WIDTH 64 +#elif UINTPTR_MAX == 0xFFFFFFFFu + #define CHEVRON_32BIT 1 + #define CHEVRON_PTR_WIDTH 32 +#else + #error "Chevron only supports 32/64-bit platforms." +#endif + +#endif // CHEVRON_LIB_HDR_COMMON_MACRO_DEFINITIONS_H_ From 5ed2f8ab4065ec71fececd1d4d8b4a3b494b0718 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Thu, 23 Apr 2026 00:37:09 -0400 Subject: [PATCH 47/57] Update powers.hpp Updates made to code documentation --- include/chevron/utility/bits/powers.hpp | 60 ++++++++++++++++++++----- 1 file changed, 48 insertions(+), 12 deletions(-) diff --git a/include/chevron/utility/bits/powers.hpp b/include/chevron/utility/bits/powers.hpp index d601807..1c0fb91 100644 --- a/include/chevron/utility/bits/powers.hpp +++ b/include/chevron/utility/bits/powers.hpp @@ -33,7 +33,8 @@ namespace chevron::bits /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Determines maximum power of 2 exponent representable by + * the provided unsigned integer type. */ template constexpr UIntT max_power_of_two_exponent = []() { @@ -42,7 +43,13 @@ constexpr UIntT max_power_of_two_exponent = []() { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Determines if provided unsigned integer is a power of 2. + * + * @note + * Note that `1` is considered a power of 2 because 2^0 is + * equal to 1. Additionally, `0` is **NOT** considered a + * power of 2 because no integer exponent produces a value + * of zero with 2 as the base. * * @return * True if provided value is a power of 2 @@ -55,17 +62,23 @@ constexpr bool is_power_of_two(UIntT value) noexcept { /*! * @brief * Rounds provided value up to next power of 2. + * + * @note + * If the provided value is already a power of 2, it is + * returned unchanged. Additionally, the smallest power + * of 2 is 1, so `power_of_two_ceil(0)` returns `1` by + * convention. * * @return * Next power of 2 */ template -constexpr UIntT next_power_of_two(UIntT value) { +constexpr UIntT power_of_two_ceil(UIntT value) { constexpr UIntT maxPower = max_power_of_two_exponent; if (value > maxPower) { throw std::overflow_error{ - "next_power_of_two(): Value exceeds the maximum representable " + "power_of_two_ceil(): Value exceeds the maximum representable " "power of 2 for the target unsigned integral type." }; } @@ -76,15 +89,20 @@ constexpr UIntT next_power_of_two(UIntT value) { /*! * @brief * Rounds provided value down to previous power of 2. + * + * @note + * If the provided value is already a power of 2, it is + * returned unchanged. Additionally, the smallest power + * of 2 is 1. * * @return * Previous power of 2 */ template -constexpr UIntT previous_power_of_two(UIntT value) { +constexpr UIntT power_of_two_floor(UIntT value) { if (value == 0) { throw std::overflow_error{ - "previous_power_of_two(): Zero value has no previous power of 2." + "power_of_two_floor(): Zero value has no previous power of 2." }; } @@ -97,7 +115,8 @@ constexpr UIntT previous_power_of_two(UIntT value) { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Determines maximum power of 10 exponent representable + * by the provided unsigned integer type. */ template constexpr UIntT max_power_of_ten_exponent = []() { @@ -115,7 +134,13 @@ constexpr UIntT max_power_of_ten_exponent = []() { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Determines if provided unsigned integer is a power of 10. + * + * @note + * Note that `1` is considered a power of 10 because 10^0 is + * equal to 1. Additionally, `0` is **NOT** considered a + * power of 10 because no integer exponent produces a value + * of zero with 10 as the base. * * @return * True if provided value is a power of 10 @@ -143,12 +168,18 @@ constexpr bool is_power_of_ten(UIntT value) noexcept { /*! * @brief * Rounds provided value up to next power of 10. + * + * @note + * If the provided value is already a power of 10, it is + * returned unchanged. Additionally, the smallest power + * of 10 is 1, so `power_of_ten_ceil(0)` returns `1` by + * convention. * * @return * Next power of 10 */ template -constexpr UIntT next_power_of_ten(UIntT value) { +constexpr UIntT power_of_ten_ceil(UIntT value) { if (value == 0) return UIntT{value}; @@ -158,7 +189,7 @@ constexpr UIntT next_power_of_ten(UIntT value) { while (accumulator < value) { if (accumulator > uintMax / 10) { throw std::overflow_error{ - "next_power_of_ten<>: Value exceeds the maximum representable " + "power_of_ten_ceil(): Value exceeds the maximum representable " "power of ten for the target unsigned integral type." }; } @@ -172,15 +203,20 @@ constexpr UIntT next_power_of_ten(UIntT value) { /*! * @brief * Rounds provided value down to previous power of 10. + * + * @note + * If the provided value is already a power of 10, it is + * returned unchanged. Additionally, the smallest power + * of 10 is 1. * * @return * Previous power of 10 */ template -constexpr UIntT previous_power_of_ten(UIntT value) { +constexpr UIntT power_of_ten_floor(UIntT value) { if (value == 0) { throw std::overflow_error{ - "previous_power_of_ten(): Zero value has no previous power of 10." + "power_of_ten_floor(): Zero value has no previous power of 10." }; } From 23547d15b7a5bffab44cfbe894d9ff048e0aa5ff Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Thu, 23 Apr 2026 12:53:43 -0400 Subject: [PATCH 48/57] Update dev_exe.cpp --- tests/cli/dev_exe.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/cli/dev_exe.cpp b/tests/cli/dev_exe.cpp index 8a19739..5042ccb 100644 --- a/tests/cli/dev_exe.cpp +++ b/tests/cli/dev_exe.cpp @@ -4,6 +4,7 @@ #include "chevron/function.hpp" #include "chevron/units.hpp" +#include "chevron/common/macro_defs.h" #include "chevron/process/thread/thread_engine.hpp" #include "chevron/process/memory/memory_core.hpp" #include "chevron/utility/bits/alignment.hpp" From a5900f9e2d4cd3fdbafc55be313a238357925c15 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Fri, 24 Apr 2026 20:48:30 -0400 Subject: [PATCH 49/57] Update alignment.hpp - Documentation update - Removed auto type aligned overloads; pointer arithmetic suffices for that purpose --- include/chevron/utility/bits/alignment.hpp | 76 ++++++++++++---------- 1 file changed, 40 insertions(+), 36 deletions(-) diff --git a/include/chevron/utility/bits/alignment.hpp b/include/chevron/utility/bits/alignment.hpp index eecc118..3d7c5db 100644 --- a/include/chevron/utility/bits/alignment.hpp +++ b/include/chevron/utility/bits/alignment.hpp @@ -28,12 +28,20 @@ namespace chevron::bits /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Aligns a size or offset value upward to the nearest + * multiple of alignment. + * + * @note + * If the provided value is already a multiple of the + * alignment, it is returned unchanged. + * + * @return + * Value rounded up to nearest multiple of alignment */ constexpr size_t alignUp(const size_t value, const size_t alignment) { if (alignment == 0) - throw std::invalid_argument{ "alignUp: Alignment must be non-zero." }; + throw std::invalid_argument{"alignUp(): Alignment must be non-zero."}; const size_t remainder = value % alignment; @@ -45,12 +53,20 @@ constexpr size_t alignUp(const size_t value, const size_t alignment) /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Aligns a pointer upward to the nearest address that + * is a multiple of alignment. + * + * @note + * If the provided address is already a multiple of the + * alignment, it is returned unchanged. + * + * @return + * Pointer rounded up to nearest multiple of alignment */ template T* alignUp(const T* ptr, const size_t alignment) { - const uintptr_t address = static_cast(ptr); + const uintptr_t address = reinterpret_cast(ptr); const uintptr_t aligned = static_cast( alignUp(static_cast(address), alignment) ); @@ -59,58 +75,46 @@ T* alignUp(const T* ptr, const size_t alignment) /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! - */ -template -T* alignUp(const T* ptr) -{ - const uintptr_t address = static_cast(ptr); - const uintptr_t aligned = static_cast( - alignUp(static_cast(address), alignof(T)) - ); - return reinterpret_cast(aligned); -} - -/*! - * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Aligns a size or offset value downward to the nearest + * multiple of alignment. + * + * @note + * If the provided value is already a multiple of the + * alignment, it is returned unchanged. + * + * @return + * Value rounded down to nearest multiple of alignment */ constexpr size_t alignDown(const size_t value, const size_t alignment) { if (alignment == 0) - throw std::invalid_argument{ "alignDown: Alignment must be non-zero." }; + throw std::invalid_argument{"alignDown(): Alignment must be non-zero."}; return value - (value % alignment); } /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Aligns a pointer downward to the nearest address that + * is a multiple of alignment. + * + * @note + * If the provided address is already a multiple of the + * alignment, it is returned unchanged. + * + * @return + * Pointer rounded down to nearest multiple of alignment */ template T* alignDown(const T* ptr, const size_t alignment) { - const uintptr_t address = static_cast(ptr); + const uintptr_t address = reinterpret_cast(ptr); const uintptr_t aligned = static_cast( alignDown(static_cast(address), alignment) ); return reinterpret_cast(aligned); } -/*! - * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! - */ -template -T* alignDown(const T* ptr) -{ - const uintptr_t address = static_cast(ptr); - const uintptr_t aligned = static_cast( - alignDown(static_cast(address), alignof(T)) - ); - return reinterpret_cast(aligned); -} - } #endif // CHEVRON_LIB_HDR_GENERAL_ALIGNMENT_UTILITIES_H_ From ab0064e3c8879be5f1076cfaecde6a638e99b12f Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Fri, 24 Apr 2026 20:49:45 -0400 Subject: [PATCH 50/57] Power Utilities Rename Adjusted to camel-case --- .../common/units/digital/type_traits.hpp | 4 +-- include/chevron/utility/bits/powers.hpp | 25 ++++++++++--------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/include/chevron/common/units/digital/type_traits.hpp b/include/chevron/common/units/digital/type_traits.hpp index 4452cf3..b2466ed 100644 --- a/include/chevron/common/units/digital/type_traits.hpp +++ b/include/chevron/common/units/digital/type_traits.hpp @@ -111,7 +111,7 @@ constexpr bool is_binary_size_system_v = requires { typename UnitsT::ByteRatio; } && requires { typename UnitsT::ReprType; } && (UnitsT::ByteRatio::den == 1) - && bits::is_power_of_two( + && bits::isPowerOfTwo( static_cast(UnitsT::ByteRatio::num) ); @@ -124,7 +124,7 @@ constexpr bool is_decimal_size_system_v = requires { typename UnitsT::ByteRatio; } && requires { typename UnitsT::ReprType; } && (UnitsT::ByteRatio::den == 1) - && bits::is_power_of_ten( + && bits::isPowerOfTen( static_cast(UnitsT::ByteRatio::num) ); diff --git a/include/chevron/utility/bits/powers.hpp b/include/chevron/utility/bits/powers.hpp index 1c0fb91..fcdcd88 100644 --- a/include/chevron/utility/bits/powers.hpp +++ b/include/chevron/utility/bits/powers.hpp @@ -55,7 +55,7 @@ constexpr UIntT max_power_of_two_exponent = []() { * True if provided value is a power of 2 */ template -constexpr bool is_power_of_two(UIntT value) noexcept { +constexpr bool isPowerOfTwo(UIntT value) noexcept { return std::has_single_bit(value); } @@ -66,19 +66,19 @@ constexpr bool is_power_of_two(UIntT value) noexcept { * @note * If the provided value is already a power of 2, it is * returned unchanged. Additionally, the smallest power - * of 2 is 1, so `power_of_two_ceil(0)` returns `1` by + * of 2 is 1, so `powerOfTwoCeil(0)` returns `1` by * convention. * * @return * Next power of 2 */ template -constexpr UIntT power_of_two_ceil(UIntT value) { +constexpr UIntT powerOfTwoCeil(UIntT value) { constexpr UIntT maxPower = max_power_of_two_exponent; if (value > maxPower) { throw std::overflow_error{ - "power_of_two_ceil(): Value exceeds the maximum representable " + "powerOfTwoCeil(): Value exceeds the maximum representable " "power of 2 for the target unsigned integral type." }; } @@ -99,14 +99,15 @@ constexpr UIntT power_of_two_ceil(UIntT value) { * Previous power of 2 */ template -constexpr UIntT power_of_two_floor(UIntT value) { +constexpr UIntT powerOfTwoFloor(UIntT value) { if (value == 0) { throw std::overflow_error{ - "power_of_two_floor(): Zero value has no previous power of 2." + "powerOfTwoFloor(): Zero value has no previous power of 2." }; } return std::bit_floor(value); + // TODO: Are we really going to throw over this? Think about this. } // ===================================================================================== // @@ -146,7 +147,7 @@ constexpr UIntT max_power_of_ten_exponent = []() { * True if provided value is a power of 10 */ template -constexpr bool is_power_of_ten(UIntT value) noexcept { +constexpr bool isPowerOfTen(UIntT value) noexcept { if (value == 0 || value % 2 != 0) return false; @@ -172,14 +173,14 @@ constexpr bool is_power_of_ten(UIntT value) noexcept { * @note * If the provided value is already a power of 10, it is * returned unchanged. Additionally, the smallest power - * of 10 is 1, so `power_of_ten_ceil(0)` returns `1` by + * of 10 is 1, so `powerOfTenCeil(0)` returns `1` by * convention. * * @return * Next power of 10 */ template -constexpr UIntT power_of_ten_ceil(UIntT value) { +constexpr UIntT powerOfTenCeil(UIntT value) { if (value == 0) return UIntT{value}; @@ -189,7 +190,7 @@ constexpr UIntT power_of_ten_ceil(UIntT value) { while (accumulator < value) { if (accumulator > uintMax / 10) { throw std::overflow_error{ - "power_of_ten_ceil(): Value exceeds the maximum representable " + "powerOfTenCeil(): Value exceeds the maximum representable " "power of ten for the target unsigned integral type." }; } @@ -213,10 +214,10 @@ constexpr UIntT power_of_ten_ceil(UIntT value) { * Previous power of 10 */ template -constexpr UIntT power_of_ten_floor(UIntT value) { +constexpr UIntT powerOfTenFloor(UIntT value) { if (value == 0) { throw std::overflow_error{ - "power_of_ten_floor(): Zero value has no previous power of 10." + "powerOfTenFloor(): Zero value has no previous power of 10." }; } From 8795a2e17f0630ef2766e9da67461f5a794ac97f Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Sat, 25 Apr 2026 21:27:38 -0400 Subject: [PATCH 51/57] Exponent Function and Compile-Time Alias - Replaced the prior compile-time-only template variable with a constexpr function `exponent(uint64_t base, uint64_t expon)` that computes base^expon. Also added a template variable exponent_v that forwards to the function to preserve compile-time usage. - Updated documentation comments --- include/chevron/utility/math/algebra.hpp | 32 ++++++++++++++++++------ 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/include/chevron/utility/math/algebra.hpp b/include/chevron/utility/math/algebra.hpp index d58cd0d..309496b 100644 --- a/include/chevron/utility/math/algebra.hpp +++ b/include/chevron/utility/math/algebra.hpp @@ -24,19 +24,37 @@ namespace chevron::math { +/* ------------------------------------------------------------------------------------- */ +// > Exponents +/* ------------------------------------------------------------------------------------- */ + /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Computes integral exponentation on provided base and + * exponent. + * + * @return + * = (base^expon) */ -template -constexpr uint64_t exponent = []() { +constexpr uint64_t exponent(const uint64_t base, const uint64_t expon) +{ uint64_t result = 1; - for (uint64_t i = 0; i < Expon; ++i) - result *= Base; - + for (uint64_t i = 0; i < expon; ++i) + result *= base; + return result; -}(); +} + +/*! + * @brief + * Computes integral exponentation. + * + * @return + * = (Base^Expon) + */ +template +constexpr uint64_t exponent_v = exponent(Base, Expon); } From 1067533c9aaa6d932ef4f18161e74b29c3f4d389 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Sat, 25 Apr 2026 21:29:13 -0400 Subject: [PATCH 52/57] Documentation Update Updated documentation comments --- .../common/units/digital/type_traits.hpp | 24 ++++-- .../common/units/digital/unit_cast.hpp | 9 ++- include/chevron/units.hpp | 81 ++++++++++++------- 3 files changed, 77 insertions(+), 37 deletions(-) diff --git a/include/chevron/common/units/digital/type_traits.hpp b/include/chevron/common/units/digital/type_traits.hpp index b2466ed..d111385 100644 --- a/include/chevron/common/units/digital/type_traits.hpp +++ b/include/chevron/common/units/digital/type_traits.hpp @@ -32,21 +32,21 @@ namespace chevron::units::traits /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!!! + * Base specialization of STL `std::ratio` type validation. */ template struct is_std_ratio : std::false_type {}; /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Specialization for any STL `std::ratio` instantiation. */ template struct is_std_ratio> : std::true_type {}; /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Convenience alias for STL `std::ratio` type validation. */ template constexpr bool is_std_ratio_v = is_std_ratio::value; @@ -77,7 +77,13 @@ using coarser_ratio_t = std::conditional_t< /*! * @brief - * Verify conversion between provided ratios is lossless. + * Validates conversion between provided ratios is lossless. + * + * @details + * A conversion is lossless when the source ratio is a + * whole-number multiple of the target ratio. This is verified + * by dividing the two ratios and confirming the denominator + * of the **reduced** result is 1. */ template constexpr bool is_lossless_ratio_conversion_v = std::ratio_divide::den == 1; @@ -102,9 +108,14 @@ template using coarser_size_t = std::conditional_t< !std::ratio_less_v, Units_A, Units_B>; +/* ------------------------------------------------------------------------------------- */ +// > is_binary_size_system / is_decimal_size_system | TYPE TRAIT +/* ------------------------------------------------------------------------------------- */ + /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Validates that `UnitsT` belongs to the IEC binary digital + * size system. */ template constexpr bool is_binary_size_system_v = @@ -117,7 +128,8 @@ constexpr bool is_binary_size_system_v = /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Validates that `UnitsT` belongs to the SI decimal digital + * size system. */ template constexpr bool is_decimal_size_system_v = diff --git a/include/chevron/common/units/digital/unit_cast.hpp b/include/chevron/common/units/digital/unit_cast.hpp index c5d504d..3f9ac06 100644 --- a/include/chevron/common/units/digital/unit_cast.hpp +++ b/include/chevron/common/units/digital/unit_cast.hpp @@ -28,7 +28,7 @@ namespace chevron::units /*! * @brief - * Performs unconditional conversions between DigitalSize units. + * Performs unconditional conversions between digital size units. * * @important * Conversions that go from finer to coarser grained units can @@ -62,7 +62,7 @@ template struct DigitalSizeCast { /*! * @brief - * Converts provided units to an equivalent value in specified + * Converts source units to an equivalent value in target * units. * * @return @@ -82,6 +82,11 @@ struct DigitalSizeCast { ~DigitalSizeCast() noexcept = delete; }; +// TODO: Template should be `template ` +// but integrating the concept appears to cause issues with casting +// operations. This same concept should also be applied to the deduced +// type in the `cast()` template method. + } #endif // CHEVRON_LIB_HDR_DIGITAL_SIZE_UNIT_CAST_H_ diff --git a/include/chevron/units.hpp b/include/chevron/units.hpp index 0749007..80aa701 100644 --- a/include/chevron/units.hpp +++ b/include/chevron/units.hpp @@ -32,23 +32,38 @@ namespace chevron using units::Bytes; ///< Byte +/* ------------------------------------------------------------------------------------- */ +// > Binary Digital Size Units (IEC) +/* ------------------------------------------------------------------------------------- */ + using units::KiB; ///< Kibibyte using units::MiB; ///< Mebibyte using units::GiB; ///< Gibibyte using units::TiB; ///< Tebibyte +/* ------------------------------------------------------------------------------------- */ +// > Decimal Digital Size Units (SI) +/* ------------------------------------------------------------------------------------- */ + using units::KB; ///< Kilobyte using units::MB; ///< Megabyte using units::GB; ///< Gigabyte using units::TB; ///< Terabyte -/* ------------------------------------------------------------------------------------- */ -// > DigitalSize | Cast Operations -/* ------------------------------------------------------------------------------------- */ +// ===================================================================================== // +// <> DigitalSize | CAST OPERATIONS +// ===================================================================================== // /*! * @brief - * Cast digital size to another digital size. + * Converts a digital size value to different units. + * + * @note + * Values that cannot be represented exact in the target + * units are truncated towards zero. + * + * @return + * Source units expressed in the target units */ template constexpr To_Units size_cast(const From_Units& source) noexcept @@ -68,83 +83,91 @@ namespace digital_size::literals { /*! * @brief - * Byte integer literal. + * Byte literal. */ constexpr Bytes operator""_Bytes(unsigned long long value) noexcept { return Bytes{static_cast(value)}; } +/* ------------------------------------------------------------------------------------- */ +// > Binary Digital Size UDL's (IEC) +/* ------------------------------------------------------------------------------------- */ + /*! * @brief - * Kilobyte integer literal. + * Kibibyte literal. */ -constexpr KB operator""_KB(unsigned long long value) noexcept +constexpr KiB operator""_KiB(unsigned long long value) noexcept { - return KB{static_cast(value)}; + return KiB{ static_cast(value) }; } /*! * @brief - * Megabyte integer literal. + * Mebibyte literal. */ -constexpr MB operator""_MB(unsigned long long value) noexcept +constexpr MiB operator""_MiB(unsigned long long value) noexcept { - return MB{static_cast(value)}; + return MiB{ static_cast(value) }; } /*! * @brief - * Gigabyte integer literal. + * Gibibyte literal. */ -constexpr GB operator""_GB(unsigned long long value) noexcept +constexpr GiB operator""_GiB(unsigned long long value) noexcept { - return GB{static_cast(value)}; + return GiB{ static_cast(value) }; } /*! * @brief - * Terabyte integer literal. + * Tebibyte literal. */ -constexpr TB operator""_TB(unsigned long long value) noexcept +constexpr TiB operator""_TiB(unsigned long long value) noexcept { - return TB{static_cast(value)}; + return TiB{ static_cast(value) }; } +/* ------------------------------------------------------------------------------------- */ +// > Decimal Digital Size UDL's (SI) +/* ------------------------------------------------------------------------------------- */ + /*! * @brief - * IEC Standard kilobyte integer literal. + * Kilobyte literal. */ -constexpr KiB operator""_KiB(unsigned long long value) noexcept +constexpr KB operator""_KB(unsigned long long value) noexcept { - return KiB{static_cast(value)}; + return KB{static_cast(value)}; } /*! * @brief - * IEC Standard megabyte integer literal. + * Megabyte literal. */ -constexpr MiB operator""_MiB(unsigned long long value) noexcept +constexpr MB operator""_MB(unsigned long long value) noexcept { - return MiB{static_cast(value)}; + return MB{static_cast(value)}; } /*! * @brief - * IEC Standard gigabyte integer literal. + * Gigabyte literal. */ -constexpr GiB operator""_GiB(unsigned long long value) noexcept +constexpr GB operator""_GB(unsigned long long value) noexcept { - return GiB{static_cast(value)}; + return GB{static_cast(value)}; } /*! * @brief - * IEC Standard terabyte integer literal. + * Terabyte literal. */ -constexpr TiB operator""_TiB(unsigned long long value) noexcept +constexpr TB operator""_TB(unsigned long long value) noexcept { - return TiB{static_cast(value)}; + return TB{static_cast(value)}; } } From 915109cf53e78c12009e69da50881864e17be004 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Sat, 25 Apr 2026 21:31:03 -0400 Subject: [PATCH 53/57] Update size_units.hpp - Updated to use new exponent function convention for calculation - Updated documentation comments --- .../common/units/digital/size_units.hpp | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/include/chevron/common/units/digital/size_units.hpp b/include/chevron/common/units/digital/size_units.hpp index e85c60d..bfd84e9 100644 --- a/include/chevron/common/units/digital/size_units.hpp +++ b/include/chevron/common/units/digital/size_units.hpp @@ -35,6 +35,10 @@ namespace chevron::units */ using Bytes = units::DigitalSize<1>; +/* ------------------------------------------------------------------------------------- */ +// > Decimal Digital Size Units +/* ------------------------------------------------------------------------------------- */ + /*! * @brief * Kilobyte. @@ -45,19 +49,23 @@ using KB = units::DigitalSize; * @brief * Megabyte. */ -using MB = units::DigitalSize>; +using MB = units::DigitalSize; /*! * @brief * Gigabyte. */ -using GB = units::DigitalSize>; +using GB = units::DigitalSize; /*! * @brief * Terabyte. */ -using TB = units::DigitalSize>; +using TB = units::DigitalSize; + +/* ------------------------------------------------------------------------------------- */ +// > Binary Digital Size Units +/* ------------------------------------------------------------------------------------- */ /*! * @brief @@ -77,7 +85,7 @@ using KiB = units::DigitalSize; * This is a binary-based digital size unit that should not be * confused with its decimal counterpart. */ -using MiB = units::DigitalSize>; +using MiB = units::DigitalSize; /*! * @brief @@ -87,7 +95,7 @@ using MiB = units::DigitalSize>; +using GiB = units::DigitalSize; /*! * @brief @@ -97,7 +105,7 @@ using GiB = units::DigitalSize>; +using TiB = units::DigitalSize; } From 5ba77174508f757f6cee920009c27b52183ef24c Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Sat, 25 Apr 2026 21:33:55 -0400 Subject: [PATCH 54/57] Updated Digital Size Concepts and Documentation - Added additional requirements to concepts to better reflect the questions they answer - Updated documentation comments --- .../common/units/digital/size_concepts.hpp | 38 ++++++++++++++----- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/include/chevron/common/units/digital/size_concepts.hpp b/include/chevron/common/units/digital/size_concepts.hpp index b41502d..2ed2114 100644 --- a/include/chevron/common/units/digital/size_concepts.hpp +++ b/include/chevron/common/units/digital/size_concepts.hpp @@ -27,7 +27,8 @@ namespace chevron::units::concepts /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Validates `Units` exposes a nested ByteRatio type that + * is a `std::ratio`. */ template concept has_byte_ratio_specification = requires { @@ -36,7 +37,7 @@ concept has_byte_ratio_specification = requires { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Validates conversion between provided units is lossless. */ template concept lossless_digital_size_conversion = requires { @@ -48,25 +49,36 @@ concept lossless_digital_size_conversion = requires { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Validates `UnitsT` belongs to the IEC binary digital size + * system. */ template concept binary_digital_size_units = requires { + requires has_byte_ratio_specification; requires traits::is_binary_size_system_v; }; /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Validates `UnitsT` belongs to the SI decimal digital size + * system. */ template concept decimal_digital_size_units = requires { + requires has_byte_ratio_specification; requires traits::is_decimal_size_system_v; }; /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Validates `Units_A` and `Units_B` belong to the same digital + * size system. + * + * @note + * This concept does **NOT** check whether the two units are equal. + * It asks whether they share the same baseline unit magnitude. The + * IEC binary size system is based on 1,024; the SI decimal size + * system is based on 1,000. */ template concept matching_digital_size_systems = requires { @@ -76,7 +88,7 @@ concept matching_digital_size_systems = requires { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Validates `UnitsT` exposes the `DigitalSize` accessor API. */ template concept digital_size_unit_api = requires(const UnitsT& u) { @@ -87,7 +99,8 @@ concept digital_size_unit_api = requires(const UnitsT& u) { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Validates `UnitsT` exposes the `DigitalSize` arithmetic + * operations API. */ template concept digital_size_unit_arithmetic = requires(UnitsT& u, typename UnitsT::ReprType i) { @@ -97,25 +110,30 @@ concept digital_size_unit_arithmetic = requires(UnitsT& u, typename UnitsT::Repr { u == u } -> std::same_as; { u <= u } -> std::same_as; { u >= u } -> std::same_as; + // NOTE: Heterogeneous relational operations not covered by the above // Arithmetic operators { u + u } -> std::same_as; { u - u } -> std::same_as; - // NOTE: Heterogeneous arithmetic results not covered by the above + { u % u } -> std::same_as; + { u / u } -> std::same_as; + // NOTE: Heterogeneous arithmetic operations not covered by the above { u * i } -> std::same_as; { u / i } -> std::same_as; - { u / u } -> std::same_as; // Arithmetic assignment operators { u += u } -> std::same_as; { u -= u } -> std::same_as; + { u %= u } -> std::same_as; + // NOTE: Heterogeneous assignment operations not covered by the above { u *= i } -> std::same_as; { u /= i } -> std::same_as; }; /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Validates `UnitsT` participates in the `DigitalSize` + * unit system. */ template concept digital_size_units = requires { From 893b4a836f99cbaa19ecada59405f88146d1c84f Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Sat, 25 Apr 2026 21:35:45 -0400 Subject: [PATCH 55/57] Document and add DigitalSize operations - Implemented several DigitalSize features: a lossless converting constructor, a lossless assignment operator, a lossless in-place modulo operator (operator%=) and a non-member/operator% that handles same-system and cross-system modulo with division-by-zero checks - Updated documentation comments --- .../common/units/digital/digital_size.hpp | 256 ++++++++++++++++-- 1 file changed, 226 insertions(+), 30 deletions(-) diff --git a/include/chevron/common/units/digital/digital_size.hpp b/include/chevron/common/units/digital/digital_size.hpp index d8d70f1..bb9a855 100644 --- a/include/chevron/common/units/digital/digital_size.hpp +++ b/include/chevron/common/units/digital/digital_size.hpp @@ -86,7 +86,8 @@ class DigitalSize { /*! * @brief - * Construct digital size quantity with different size units (lossy). + * Construct digital size quantity with different size units + * (lossy). */ template constexpr explicit DigitalSize(const DigitalSize& other) @@ -95,6 +96,19 @@ class DigitalSize { // } + /*! + * @brief + * Construct digital size quantity with different size units + * (lossless). + */ + template + constexpr DigitalSize(const DigitalSize& other) + requires concepts::lossless_digital_size_conversion, DigitalSize> + : unitCount_{DigitalSizeCast>::cast(other).count()} + { + // + } + ~DigitalSize() noexcept = default; // ===================================================================================== // @@ -149,7 +163,18 @@ class DigitalSize { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Calculates absolute difference between this and + * another digital size. + * + * @details + * The difference operation conducted in this method + * is direction independent. It returns the positive + * difference between the two regardless of which is + * larger. This is meaningful when the question is + * "how far apart are two digital sizes?". + * + * @return + * Absolute difference between DigitalSize values */ template constexpr auto absoluteDifference(const DigitalSize& other) const noexcept @@ -171,7 +196,17 @@ class DigitalSize { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Tests whether this and another digital size represent + * the same byte count. + * + * @details + * The comparison is performed in bytes, so values from + * different units compare as equal when they represent + * the same size (i.e. `1_MiB == 1024_KiB` is a true + * statement). + * + * @return + * True if equivalent sizes */ template constexpr bool operator==(const DigitalSize& other) const noexcept @@ -181,7 +216,11 @@ class DigitalSize { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Tests whether this digital size is strictly less than + * another. + * + * @return + * True if left-hand side is smaller */ template constexpr bool operator<(const DigitalSize& other) const noexcept @@ -191,7 +230,11 @@ class DigitalSize { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Tests whether this digital size is strictly greater + * than another. + * + * @return + * True if left-hand side is greater */ template constexpr bool operator>(const DigitalSize& other) const noexcept @@ -201,7 +244,18 @@ class DigitalSize { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Adds another digital size of any unit to this one. + * + * @details + * Same-system arithmetic returns the finer unit of + * the two types. Cross-system arithmetic returns + * `Bytes` since this is the only unit the binary + * and decimal size systems can represent exact. + * Addition conducted through this operator is + * always lossless. + * + * @return + * Sum of two digital sizes in the greatest common unit */ template constexpr auto operator+(const DigitalSize& other) const noexcept @@ -223,7 +277,20 @@ class DigitalSize { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Subtracts another digital size of any unit from + * this one. + * + * @details + * Same-system arithmetic returns the finer unit of + * the two types. Cross-system arithmetic returns + * `Bytes` since this is the only unit the binary + * and decimal size systems can represent exact. + * Subtraction conducted through this operator is + * always lossless. + * + * @return + * Difference of two digital sizes in the greatest + * common unit */ template constexpr auto operator-(const DigitalSize& other) const noexcept @@ -245,7 +312,55 @@ class DigitalSize { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Calculates remainder of dividing this digital size + * by another. + * + * @details + * Same-system arithmetic returns the finer unit of + * the two types. Cross-system arithmetic returns + * `Bytes` since this is the only unit the binary + * and decimal size systems can represent exact. + * Modulo conducted through this operator is always + * lossless. + * + * @return + * Remainder of division between digital sizes + */ + template + constexpr auto operator%(const DigitalSize& other) const + { + using Self = DigitalSize; + using Other = DigitalSize; + + if constexpr (concepts::matching_digital_size_systems) { + using FinerUnit = traits::finer_size_t; + + const FinerUnit lhs = DigitalSizeCast::cast(*this); + const FinerUnit rhs = DigitalSizeCast::cast(other); + + if (rhs.count() == 0) + throw std::invalid_argument{"DigitalSize::operator%(): Division by zero."}; + + return FinerUnit{ lhs.count() % rhs.count() }; + } + else { + if (other.bytes() == 0) + throw std::invalid_argument{"DigitalSize::operator%(): Division by zero."}; + + return ByteResolution{ this->bytes() % other.bytes() }; + } + } + + /*! + * @brief + * Multiplies this digital size by a scalar. + * + * @note + * The unit type is always preserved during this + * operation; only the unit count is scaled. + * + * @return + * Scaled digital size in same units */ constexpr DigitalSize operator*(const ReprType scalar) const noexcept { @@ -254,7 +369,14 @@ class DigitalSize { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Divides this digital size by a scalar. + * + * @note + * The unit type is always preserved during this + * operation; only the unit count is scaled. + * + * @return + * Scaled digital size in same units */ constexpr DigitalSize operator/(const ReprType scalar) const { @@ -266,7 +388,15 @@ class DigitalSize { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Divides this digital size by another. + * + * @details + * Both operands are converted to bytes before division. + * The result is a `double` to preserve precision in the + * resulting quotient. + * + * @return + * Quotient of two digital sizes as a double */ template constexpr double operator/(const DigitalSize& other) const @@ -279,19 +409,20 @@ class DigitalSize { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Assigns another digital size to this. + * + * @details + * This operator is only applicable to lossless + * assignment operations. */ template - constexpr ReprType operator%(const DigitalSize& other) const + DigitalSize& operator=(const DigitalSize& other) noexcept + requires concepts::lossless_digital_size_conversion, DigitalSize> { using Self = DigitalSize; - const Self castedOther = DigitalSizeCast::cast(other); - - if (castedOther.count() == 0) - throw std::invalid_argument{"DigitalSize::operator%(): Division by zero."}; - - return static_cast(this->unitCount_ % castedOther.count()); + this->unitCount_ = DigitalSizeCast::cast(other).count(); + return *this; } // ===================================================================================== // @@ -300,7 +431,11 @@ class DigitalSize { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Tests whether this digital size is less than or equal + * to another. + * + * @return + * True if left-hand side is smaller or equal */ template constexpr bool operator<=(const DigitalSize& other) const noexcept @@ -310,7 +445,11 @@ class DigitalSize { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Tests whether this digital size is greater than or + * equal to another. + * + * @return + * True if left-hand side is greater or equal */ template constexpr bool operator>=(const DigitalSize& other) const noexcept @@ -320,7 +459,16 @@ class DigitalSize { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * In-place addition. + * + * @details + * The right-hand side is constrained to the resolution + * of the left-hand side units during an in-place + * addition operation. + * + * @note + * The unit type is always preserved during in-place + * operations. */ template DigitalSize& operator+=(const DigitalSize& other) noexcept @@ -333,7 +481,16 @@ class DigitalSize { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * In-place subtraction. + * + * @details + * The right-hand side is constrained to the resolution + * of the left-hand side units during an in-place + * subtraction operation. + * + * @note + * The unit type is always preserved during in-place + * operations. */ template DigitalSize& operator-=(const DigitalSize& other) noexcept @@ -346,7 +503,43 @@ class DigitalSize { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * In-place modulus division. + * + * @details + * This operator is only available when the right-hand + * side is losslessly convertible to this types units. + * Combinations that would truncate the divisor are + * rejected from using this signature. In those cases + * the caller must use `operator%()` and store that + * result in another variable. In-place operators are + * intentionally designed to preserve this types units. + * + * @note + * The unit type is always preserved during in-place + * operations. + */ + template + DigitalSize& operator%=(const DigitalSize& other) + requires concepts::lossless_digital_size_conversion, DigitalSize> + { + using Self = DigitalSize; + + const ReprType otherUnitCount = DigitalSizeCast::cast(other).count(); + + if (otherUnitCount == 0) + throw std::invalid_argument{"DigitalSize::operator%=(): Division by zero."}; + + this->unitCount_ %= otherUnitCount; + return *this; + } + + /*! + * @brief + * In-place scalar multiplication. + * + * @note + * The unit type is always preserved during in-place + * operations. */ DigitalSize& operator*=(const ReprType scalar) noexcept { @@ -356,13 +549,16 @@ class DigitalSize { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * In-place scalar division. + * + * @note + * The unit type is always preserved during in-place + * operations. */ DigitalSize& operator/=(const ReprType scalar) { - if (scalar == 0) { - throw std::invalid_argument{ "DigitalSize::operator/=(): Division by zero." }; - } + if (scalar == 0) + throw std::invalid_argument{"DigitalSize::operator/=(): Division by zero."}; this->unitCount_ /= scalar; return *this; @@ -383,21 +579,21 @@ namespace traits { /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Base specialization of `DigitalSize` type validation. */ template struct is_digital_size : std::false_type {}; /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Specialization for any `DigitalSize` instantiation. */ template struct is_digital_size> : std::true_type {}; /*! * @brief - * TODO: INCOMPLETE DOCUMENTATION!!! + * Convenience alias for `DigitalSize` type validation. */ template constexpr bool is_digital_size_v = is_digital_size::value; From 60febc6eecf7c0e06c7cd08a8cd27fd897dcdbb0 Mon Sep 17 00:00:00 2001 From: Jamon Bailey Date: Sat, 25 Apr 2026 21:36:46 -0400 Subject: [PATCH 56/57] Demo and Notes Update Made adjustments to the ongoing demo of an application launch with Chevron --- tests/cli/dev_exe.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/tests/cli/dev_exe.cpp b/tests/cli/dev_exe.cpp index 5042ccb..0dd48f6 100644 --- a/tests/cli/dev_exe.cpp +++ b/tests/cli/dev_exe.cpp @@ -19,15 +19,18 @@ int main(int argc, char* argv[]) using namespace chevron::digital_size::literals; constexpr chevron::MiB blockSize = 16_MiB; - constexpr chevron::MiB chunkSize = blockSize * 24; - constexpr chevron::GiB budgetMax = 3_GiB; + constexpr chevron::MiB chunkSize = blockSize * 32; + constexpr size_t maxOSAllocs = 8; + constexpr chevron::GiB budgetMax = chevron::size_cast( + chunkSize * maxOSAllocs + ); chevron::process::MemoryPoolConfig config{}; - config.block_size = chevron::size_cast(blockSize); - config.chunk_size = chevron::size_cast(chunkSize); + config.block_size = blockSize; + config.chunk_size = chunkSize; config.block_alignment = sizeof(std::max_align_t); - config.budget_ceiling = chevron::size_cast(budgetMax); + config.budget_ceiling = budgetMax; config.initial_thread_blocks = 2; config.max_thread_blocks = 12; @@ -43,6 +46,10 @@ int main(int argc, char* argv[]) /* * :: Chevron Notes :: * + * [ TO-DO ] + * -> Start applying export macros to appropriate symbols + * -> Figure out how exception and error codes will be integrated + * * [ Function Utilities Notes ] * -> Static callable type `Func`? (No heap alloc) * From 4547b16a3e776c6676982a2d70522e256e3c1e9f Mon Sep 17 00:00:00 2001 From: Jamon Bailey <83630529+jamon-bailey@users.noreply.github.com> Date: Sat, 25 Apr 2026 23:57:31 -0400 Subject: [PATCH 57/57] Update dev_exe.cpp --- tests/cli/dev_exe.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tests/cli/dev_exe.cpp b/tests/cli/dev_exe.cpp index 0dd48f6..f6cdc7a 100644 --- a/tests/cli/dev_exe.cpp +++ b/tests/cli/dev_exe.cpp @@ -19,7 +19,8 @@ int main(int argc, char* argv[]) using namespace chevron::digital_size::literals; constexpr chevron::MiB blockSize = 16_MiB; - constexpr chevron::MiB chunkSize = blockSize * 32; + constexpr size_t blocksInChunk = 32; + constexpr chevron::MiB chunkSize = blockSize * blocksInChunk; constexpr size_t maxOSAllocs = 8; constexpr chevron::GiB budgetMax = chevron::size_cast( chunkSize * maxOSAllocs @@ -27,12 +28,12 @@ int main(int argc, char* argv[]) chevron::process::MemoryPoolConfig config{}; - config.block_size = blockSize; - config.chunk_size = chunkSize; - config.block_alignment = sizeof(std::max_align_t); - config.budget_ceiling = budgetMax; + config.block_size = blockSize; + config.chunk_size = chunkSize; + config.block_alignment = sizeof(std::max_align_t); + config.budget_ceiling = budgetMax; config.initial_thread_blocks = 2; - config.max_thread_blocks = 12; + config.max_thread_blocks = 12; //