From 9de1a7db79cbedaefe3d4ee7bbf285bb33040113 Mon Sep 17 00:00:00 2001 From: Tiara Rodney Date: Thu, 19 Jun 2025 17:58:46 +0200 Subject: [PATCH] dirty --- .gitignore | 12 +- LICENSE | 0 Makefile | 71 ++++++++--- NOTES | 11 ++ README.md | 2 +- docs/Makefile | 2 + docs/diagrams/workflow.png | Bin 0 -> 67597 bytes docs/diagrams/workflow.puml | 32 +++++ pyproject.toml | 10 +- .../sphinxcontrib/theme/web2/.gitignore | 1 + .../theme/web2/_static_extra.tar.sha256 | 1 + .../theme/web2/assets/.gitignore | 20 --- .../theme/web2/test_sphinx_theme.py | 5 + tests/unit/__init__.py | 0 tests/unit/byteb4rb1e/__init__.py | 0 .../unit/byteb4rb1e/sphinxcontrib/__init__.py | 0 .../sphinxcontrib/theme/__init__.py | 0 .../sphinxcontrib/theme/web2/__init__.py | 0 .../theme/web2/test_unarchive.py | 3 + tox.ini | 120 +++++++++--------- 20 files changed, 180 insertions(+), 110 deletions(-) create mode 100644 LICENSE create mode 100644 NOTES create mode 100644 docs/Makefile create mode 100644 docs/diagrams/workflow.png create mode 100644 docs/diagrams/workflow.puml create mode 100644 src/byteb4rb1e/sphinxcontrib/theme/web2/.gitignore create mode 100644 src/byteb4rb1e/sphinxcontrib/theme/web2/_static_extra.tar.sha256 delete mode 100644 src/byteb4rb1e/sphinxcontrib/theme/web2/assets/.gitignore create mode 100644 tests/integration/byteb4rb1e/sphinxcontrib/theme/web2/test_sphinx_theme.py create mode 100644 tests/unit/__init__.py create mode 100644 tests/unit/byteb4rb1e/__init__.py create mode 100644 tests/unit/byteb4rb1e/sphinxcontrib/__init__.py create mode 100644 tests/unit/byteb4rb1e/sphinxcontrib/theme/__init__.py create mode 100644 tests/unit/byteb4rb1e/sphinxcontrib/theme/web2/__init__.py create mode 100644 tests/unit/byteb4rb1e/sphinxcontrib/theme/web2/test_unarchive.py diff --git a/.gitignore b/.gitignore index 00a6874..773a82e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,17 @@ +.tox/ + /dist/ /build/ -/src/**/*.egg-info -/src/**/*.pyc -/src/**/__pycache/ +*.egg-info +*.pyc /.venv/ /autom4te.cache/ /config.log /config.status /configure~ + +vendor/**/*.tar.gz +vendor/**/*.tar + +test-reports/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e69de29 diff --git a/Makefile b/Makefile index 1e6a41b..09fa329 100644 --- a/Makefile +++ b/Makefile @@ -1,31 +1,62 @@ -.PHONY: requirements.txt requirements-dev.txt configure Pipfile.lock src/sphinx_theme_ref/assets build +WEB2_PACKAGE_ID := html-theme-web2-1.0.0 +WEB2_PACKAGE_URL := https://bitbucket.org/byteb4rb1e/html-theme-web2/downloads/$(WEB2_PACKAGE_ID).tar.gz +PYPKG_DIR := src/byteb4rb1e/sphinxcontrib/theme/web2 +WITH_GPG = $(shell command -v gpg && echo yes) -PKG_BASENAME := sphinx_theme_ref +PYTHON3=$(if $(wildcard .venv/.*),.venv/bin/python3,python3) -VENDOR_OUTPUT_PATH := $(shell realpath ./src/sphinx_theme_ref/assets) +VERSION=$(shell $(PYTHON3) -m setuptools_scm) -Pipfile.lock: - .venv/bin/pipenv lock +.chore: requirements.txt requirements-dev.txt Pipfile.lock configure -requirements.txt: - .venv/bin/pipenv requirements > requirements.txt - -requirements-dev.txt: - .venv/bin/pipenv requirements --dev-only > requirements-dev.txt +.clean: + rm -rvf dist/ build/ configure: autoconf -src/sphinx_theme_ref/assets: - rm -r src/$(PKG_BASENAME)/assets - make -C vendor/html-theme-ref build/production OUTPUT_PATH=$(VENDOR_OUTPUT_PATH) +dist: src/ + $(PYTHON3) -m build -# user acceptance testing -uat: - trap 'kill 0' SIGINT; \ - make -C vendor/html-theme-ref watch OUTPUT_PATH=$(VENDOR_OUTPUT_PATH) & \ - wait +Pipfile.lock: + pipenv lock -build: - .venv/bin/pipenv run build +requirements.txt: + $(PYTHON3) -m pipenv requirements > requirements.txt +requirements-dev.txt: + $(PYTHON3) -m pipenv requirements --dev-only > requirements-dev.txt + +src src/: $(PYPKG_DIR)/_static_extra.tar $(PYPKG_DIR)/_static_extra.tar.sha256 + +$(PYPKG_DIR)/_static_extra.tar: vendor/$(WEB2_PACKAGE_ID).tar + cp -vf "$<" "$@" + +$(PYPKG_DIR)/_static_extra.tar.sha256: vendor/$(WEB2_PACKAGE_ID).tar.sha256 + cp -vf "$<" "$@" + +test-reports test-reports/: test-reports/unit test-reports/integration + +test-reports/unit: + $(PYTHON3) -m tox -m unit + +test-reports/integration: + $(PYTHON3) -m tox -m integration + +test-reports/audit.json: + $(PYTHON3) -m tox -m integration + +vendor/$(WEB2_PACKAGE_ID).tar.gz: $(if $(WITH_GPG),vendor/$(WEB2_PACKAGE_ID).tar.gz.asc,) + curl -L --fail --output "$@" "$(WEB2_PACKAGE_URL)" +ifneq ($(WITH_GPG),) + gpg --verify "$<" "$@" +endif + +vendor/$(WEB2_PACKAGE_ID).tar.gz.asc: + curl -L --fail --output "$@" "$(WEB2_PACKAGE_URL).asc" + +vendor/$(WEB2_PACKAGE_ID).tar: vendor/$(WEB2_PACKAGE_ID).tar.gz + gzip --decompress --keep --stdout "$<" > $@ + +vendor/$(WEB2_PACKAGE_ID).tar.sha256: + curl -L --fail --output "vendor/$(WEB2_PACKAGE_ID).tar.sha256" "$(patsubst %.gz,%.sha256,$(WEB2_PACKAGE_URL))" diff --git a/NOTES b/NOTES new file mode 100644 index 0000000..087166e --- /dev/null +++ b/NOTES @@ -0,0 +1,11 @@ + + +=== Configuration === + +1. Run sh configure +2. Run make .chore + + +Ḿakefile conventions + +abstract targets (e.g. chore, clean, etc.) must be prepended with an underscore. diff --git a/README.md b/README.md index c76c37b..e5a66d1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ - + # Tiara's Sphinx Theme Reference Implementation > 🛌 **NOTICE:** This project is taking a naap. It depends upon diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..09b9b7c --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,2 @@ +$(patsubst %.puml,%.png,$(wildcard **/*.puml)): + plantuml "$$(echo "$@" | sed 's|.png$$|.puml|')" diff --git a/docs/diagrams/workflow.png b/docs/diagrams/workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..f74b07859e6893886faa4be6c76a70141adbb4c0 GIT binary patch literal 67597 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 QgmCim z_8&`LGgN2olW8&D~>1U`fet)kA~yAP?t!_45@POjC)yQgr-1vFcNENmQzi zNVybtGSEr(hSO7R*XF94YY%IsTLNpNqnqV?K&O99SaU| z-Zpig?$vEmt)seKE9#Eed!CpmY?2OopwZ#VW~e9ZGJEw$bYU_uqnE5q=~VbGe(}`3 zMtwxBoBJGS_4$LIle@JZGKyrW&{9+zT)LkkgqkvFr7A`YOHKE?slUUECo*#o5<@*| z!!4?ED3-78dA>=oCAB40)aKBr5HpO626K#-#Eo0gd0gcfF&D6*13Oop-{?B+)s?h{ z$z6v=-4FG?zSpDlEXzEn)0_6?zAhehZ7!e(%#pivwfHuty z@`?&fO(aAR(-ym0{Cb+RsPEk@6gZgo+^y#65)SdY#P@qKsHrN$g?hwili&A=97)8J z?sG-kZK!*?oJKk3cP*oNsZL?6EIcx@i$k2f8rdZZRWEOa0Kh{yt(s%hDaGLIS3 zu!@)l%+CJ2&n85N&R|XweW>?OK{BhrxldxR_M$YFL7nMyG}-9SgaKG(gD<*fo_+fI z+-()JU<;a9E9CvGa0E}9sh{gEWj5y>ua2lVs!`3dg|zwbkzlY!7_S5j{3^{Z-I{gy z?34XA5$LXgp@?G=uilCe{!C_IbP)$WxV-A>5A;@%r1w1pGYJbntc>2(-_`FM?I`}m zsl|RlxkCc_VW^^YRlV|oAX3Rgfx~)aSPkZcfhUT^?V^L_@4z_dre94`9gNZ|e-*sx zo0pZq**jL86h-A9D$1Z-?E`A5zj)gf+y)}_Mzk0ceSm7Q54zar7+#(7OGs-a34j?A zNO+f>jMB%>&6UrIt0DY@v=N3(egLX?^)+XU!c$2+T{lkYs%VuQ`zrxIe_oh)3j)yO z0TgrtDHKY^bSpn(SSom3{XhMtBhZCn3Lw}z)!B;8x-K&#gIm#Hj1adZH@7tC$k9B` zdk-I;1~LjQ2*9)*Rk+e)qA+q-tal@DV7)~F8-KGE^pvu*v+-=GEJ<$Lc9!TjI^z8k zHUKUHlzXKx<8rp#<0OXcY3RKaF!&6KcX5qjF4Ob zOVW>Ei9wij?`%{yj;|D}CN#i2xPN~rM`W!z7&HT**}OuX3B=p?IteIg{FDdjAqAMX zMj8#5z;BiV<=G^<-gNn@<=C79Fd7mEDxobUzcmadoCe~srnC5S%mxN7*Bq3AqW<(e zX@f2XuMy7%R@dyI*&t1vi;x40;dfWcEh^d~d_f5m2VcwxIBuER`T)2M^%6Hq{R|rj z!(I%vlPK^CRd4|RaMQ&OIHsV`W}`RP4;~rn7y}lb6m>f3R5?yiRE?zgXn-FN0{~`XoLE;lO%!-pPzH<)5AR?EU+F8#k@Zmgo#my!o<08{e%N_CcJ3?zXM`;6 zdKDxY+!lhI3fvZH?S=U}ajJp34u1T|k(+wg&tV?34(uLbYa~IneYSMZZ*O9L9t@#1 zlH+GUX3|^aa?BtdWmv=vd4+|QUHGJu;QRun*dX*n_cSs0mF%hyQaBXqg3(5t(_`Cp z1t0y(uEoV_GhAHI7z$r7Ov_M4Sm^~xhiBC=2s7YG^;oO9vyD z@Y}iu)Jq|vjz^RugCZrFxA6da`_mY>Xn$|)P-h9i8<3=`mOr%*HB22=m;ti*9!p8Z!PK`Xw#41`pqpmZwDqT>qa8{Y!rD!IED1$B)<<4 zzEmP#3`J%IH`ft-J``PWWw1QyJANPNnQwrD7_ULvG5@VS_fhI+VnXYMZCchbK_MZl z4?QW^itVkf9k9V??gX$6;tD}<;B}Rnw=$2X__t(>x=|cbjvhjosV54#XdorTTGBi~ z6o|7TFT-)!x9jtd^MKW<`!(LBJpUEf-P$SJckIA=>5}otA4Obdr%{MUyTb`GiSMu9 z2nX*Myg8hios9Gr=+Q-$C^|ZN?k7AD0Dy~E_PXg0>Fe|Fw%HT}KG-3;Hoow(S0evG zQjN+Q+Js1J*}?NBnihtYzp?*i0Zy>4$+13i(2*CQt$@fo=q83cI_o}v*Pn^9Dvb8X zG?P50IadQ6Mq*4j6VfYz`ODbXLC_ilfx>3}!C`E~0oe%D7lC^xv5jAe&VTMJC}-m@ zeI;XpZe~1r@&sj_2AoTlZ?%bi>Dn_NkYqJt8Hp{7Tk2qJCXNHA7C$*h4D%!gH{hC? z4_ZPE(b_b9U2Eg~!~30qtA}9`a@xFEXb+6UK`;#Hu&t%#C-I#GR1HvAlQ@$}N?WWj z@BX~jf(8#gyb6$UMm#UVV1u7LftJ=c3Pn6^HE5J|$otD9PO_x#F5~@nblz@g{DOkU zpf~`f0Ch4AFKil>z)f=j0~(xUfLg#gAQB&;-M41`khC^5G(?MvRb9$SGR=AfWhYOZ zz>tFX#D>et2jL$a$3#d%rY&AQ?=!r(ejTThPNQ*pXPwZDvA_ln?0|pVmN*x^h~W_F8Bf{P+#B$q`&4P=<)itXZ|6MqLV)4;lp# zZw2K_m-^h^Zk}g2GF?YFrP+fWrXLyxSi`e1Z;vXX6w0Hl02ZS$kT5=6iKG@>AkL$i{1 zZOUH{d(eGnZ`zoiB+;(;2TG*O;85v#zMA(PbgOR3*&pBbrx^c!of!8@lC=Zr$e9hK-{o=;w(=XQX+h*Tg z#&Uf9DH++gt^FZ;p4wE`EaU!@kB-`86Dpq6{$#(Cv9ZX0D`PvX(xtOTFlNu&{eQf4 zm9wATfC7(ndQLu8h>^aT`N$&Qe&L~g#CvhQdM6O;&%>T2^andde`5FCzxmAnn>R@P z#{`)hj}Z&P<;u>^9-y{|H4b!ZC3^Z$Kmpkq@0s|AgvU4uG_dJ|!%#$EU==2s2dvt& zZo$V|=iq>4A0b*HHPLb(Tbh^U%pa#g1AfNNF8=4%tOBq%5f9x4tpx)tI5Bgf##P*R z{x)!Hn+az9GuNXE3bvOnLEIuBaghTnFIGrZ#{K+8^g<96Yw3@E_wJR#1p!p&Wx4nE zbt0ZyR>uD3LHD4;#QHIC(bLl-OS+Y~!GYyJzfHQA^RF+E95(;&KIZ2`(}yhQlF6r= zFOI45n7;A2c@v%9oydT#+Y7rn3zW|v+iROg%(s1fD;{@ zp{tbneL(wwXZ--6tdsuNbi%mwoQhMsKUKUN!dWndu}cr`f=WdZ}QNGrlk>+ zj9OlGBe*{I65X&03JQpgcAa|h3DAYiTL1uP+K9m|^YQUnpD$9iL~aIRBGU%~aD(8< zcd6SVO`NkMG*%E}K4(~#iV_kqb3zm#is64)*q+%<4DqjI=)Y64Yn-4nIc>*=zj#`AF@9ybwI!B*YrLL<2jC1{`n) z;d-DI{I$ATBgPy>VJ_HvY$4-;C#3XFdA$>qk7r+FFVc{|Er6 zsRW5Q73vAr;lr6a9X`M#?&JU6v9ylWBD{nvaFVZR+EY|iG+Hu9Qb$KZ6nN`<5}BI0 z(~t6=lCdAO*&Q|s#&q`ijmKnX(?JtKhU9rv7ZFYK46^Dtiira6k@)}z=f*^`pGcim&3y~};ilQAp zSc`NQ>MTO!0{u!gI%1zlv;OT#du8nboIxoz4QV8FOv)ff6s@?NUJo6B0Ohb|gXql0 zNIp({^C|77&w7WJqXvcm$&IhbT<(YVB@&FrC(M$jQl}ZE^xVCiH;>umTl$ z3_5QST^C4jes8f|<7#4!qWw>IQt#FOBqRjQ*lN)D2m3|mgYC)A`#6+%utUvEO|?*% z0I>`>Lpvanay^{?UHFgbF2%40ko=G_6u@T#;~3ZgGg=o2@QgkXJ`__{#}3%_Ud7y~ zA{zc3J0gJa608T|I38lDNrU_TUS9gSF%*ydWLLiiw6WIu4uX!jr2|8i*cxBJ;SIC{Ff z`E=erGtc#%voi(IaL|)bk4!Xik>lS>Vku+4Y>v`!v;?5WuHC!c+}r|JmGb{}tGD~D z3CNsecm~NR%EGtr+&Q&Z+V`*9nLmy0z5boMA>z+p{*&%6fB5^fAvInA8v$EV`O6{w ze|@|E2-pRRCr+sTPk&r+7R;Y*3tz}XK_gGWfJ5qY-I^_z{yIp}{&W`VLHRng!3Yd@ zxVX5q?#JmZt(P_L77J166u-CodnI?t4uoTmmo8oE4OJ&iFP%Sse*}T#Gim$5mOC$B z{s6xo&SA^%>%+83w4PB>T-w@oh;F%A?$OOZ75>7o6_d+xI;7e5JW5<-YVbS2z+aSJ zLHvIJ@s)G`x9f?EV$Lo2(>DmA=fPKL(y7g#t@sA1a(=mRHzXyt-)|Pd6G_^6!QGHX z7JP~8Cwv(gs4;P}#q--8U*P%)v55xckYMN-EwOg}Z8Wej>4RfPtkCyHfNnLeo6r1x zU#^u1%U7(p1!w?qg6@K!?Ds7#Ek%mO3RYQ-tNDB!g&%UIGHu*=!N33mqNB~Fzbv@3 zOe&7R9hk|W=@qx&y^x~j0~p*4>6zqj1BB&~TqhU2SyJbMFS%aEj%){9mak>Fc)@!K zGedn4E&|DIaN;7X`2{E5A2XuOi*SW1%E~x_)-L#xVGB+>^gj^1-NZ%A3l_#zl$bsh z64HQQ3S4z`;R;Y{er=mmG?4iT=?+3 znDSf)^p!C2!yhyM-pQm?c5d#DChF`Mp{e$te`^KR3mmdlt5&J)WgsoQpcj~gfojW^ zELh$D{wV)^{>l4Kp2WrFM=mg6X%{q-f9vZb#})nMMTsSF0n`H=AMjPYd9K~UFOU%^ z>Vigr9%5dWL8b*eqZA`l+JJ2XzB^HK&v$`wxGnd&I%R|M zhoIr5c`pBgpZdq<`sa>R9Rm3mFC1M#RvB$#2<|jkEp9IOuCxfEXN*J}m?%T=;q2@j zxZ=seU940@a7n$>2mL@lI_Z$vQIMCPRbVFQ;V%bPkp2-_S#GJ9q-S<>2I*=#Xy-19 zIghQ2BKddn(kYTJaYsLAIIhR_V_`SmU~A?%XBCX|&T;Wb$`#a#D|=$Yh= zCqMWa`x*QHDXR9mB_y~d#J_RwUPAwMpF^tdLH*;Dq$Cw^zfmH!eLoyz(=H7R_3;S{4=S%z^t08 z9dRPMl{dm8ePd zX$LZ3ZoVtR;qHSm>&usqTG^d4F5Ik7*4y%0o;usmmmO06MA1{--EOdQ@2T~6)ZrHH zKieD>1G+Gb<#0);e!h_3jilr*QSg2$=f;diQB*P z3Tt<^{0FfslUbj_v|`ntn%uf`u2^ciR7{{Frr23_ziqw#lh^}SPF$Ovm=Z8p?zx0M z@NDyn?6Ny{Og55^g^B`c47xj&ruJCX*EdC+6mnqFs7@$XYNo&S$>H%nlPC|5I}Za# zr-g(TT_NJ|w7D>H&cX_}hH3W;D%$8TIbttn7tf^}cClQ3%iE-eyZiOt53gWVk&|sW zkZ9afxQ^3v#nYxh{|84fI^t(6xmJ(1CdoQb1JVwB`YUgH9~gx2#)OsTM(h305QJ){ z@Oh@$9sfh`%>}=T^Roe?{(`$gKCGBdi%^gE&Aw?*-fQt_)yC4p0?b7;eX`#fMc-PT zI1zKF$LDdITI}fa;pCaQm6tc^q1eF#V~kr~Sg}ogbMqf!IYmDfy1CDEK;Y-s*R7s`q2FmuOQ=5UmC~^H zOIe6igCs5DS;+fT;Eem*OBIwgl3dYSp4}ES8|AmPz0w+#kf6I_b$9R}kGI!t@m*Dq zA6E|#>E9dd?1~*@ds5?a#;uZp_0rFmzC2bn?~gX}rZw2jB)>T1k@$F~Ek}xWL+ikO zy1}XAvfbz-@i48DoF4xXlkJ(N9e!MvyUc0!yLGB{_>wU)Q=QxLkxhHM#T<4FI%U_d z^k4q^jc~)88twK=9Zv$=mNFc^lXi3UjC%XWgr+??m2citUT$nZJH6jzO#d45u1Dwk zW^BBk6g#VwD>y-IHf$0Os4CW_1+VB)vJh-I@Zn`O3|THV$a$YvX%&6wE_m@Cn!eKJljq*t8fX{hwaVG-(%;{m>o?;# zI<1`Wq-{T;bjwZ7+BM<8w0G|Y7SSU4GMZxSEc43T2=kh9BwiC(vhw?<8R8Z1u-k$sVd=z&SgCYas`Az^>NTDTj}yzp(!L zst*-K_P(D#e}2PD_;loJrFzE8ei=~rp@pogcizF_y#_bDU#iCUp=4tnb@4oFm)IGCL zzP>)T{zFh+_2pjPy_5*wswbiFASIn0LzJE1oJc27Seyi#2OK8CxoUSRwV%~{_wK{R z=0ny-RWX4rG-RdcRC4uxs;GkW2t=r)t$sV`wat0fiHW6m`(=Xn7hnXb;D=eQZ7KKl z^g@K}vOe@}2(+~2Rqt-#kfS;z$l8B;?#WmXuPe$c%gc1XB7v4Me>T}EJg4&1s!gYl zy-l*1vbpm!^`qV0HoXIOOjcSM>ER5<7PZ|o&9?$uRx9Ui&03%RB}D-QN8_SdSx4@o z?Xq2IVKj=rY+n25mQShc>gfG$Wovh@IvqcBMz+hTFYw;y42DEG^IINl0XZ%K7t^(p z*QDX;Q^~^ich+T7>(fBFz%>>hoeLj&}V3t?S!&$|b`=psDp(C)C+D5(gGlDS78i5oqPqA)tEwtt+o ze4-t#?7+(_bV*$!Zdlbjql?UlHz8(!;bpON`057_BG7>Wie^%<<|=_lQT5-%J$K&wDSo~77I*$bfhE{8%JH?g?%rLEjs_To^5vrcVWSB81j;I#b|Qd3cldA# z>%MmeZhh+%$@=0FIZlpu1M^>Gv)0)`0DH2eP9P_lW1Xx+@YNpm;W9Bh#S7K9qW8tuna@QtHMut_?TVe{;mO86!s~lNt@Fw+gB`w?}&) z$<8e=83&GlhtXJWq_T#!cAx!4E0u~)=62VKPo>JI?aV0*#rbl=-vNkHf8O9QX6m$xiOwJ!DsM;z$op;UVdIt$%uC`*S z47-Re4oX}T(F>n^(tA#>8eir$vr)N;(9#zKPk`lsG$tn|2rX==5uy2UaCo|*qQaoJ zzT?`pSR4miST7ye&nd_$azbp?b0zPDg%{QI>F-4`6k0iu)akB!+lNf>#g4suN5QYY z?d`1tJP-`UFiSx3jLzWd03_k;Gdp+Ay0?D+L^vx&Agdzmw5GVz=q_R5VPr|^>FH>m zBlk8;?Q8%Ss`u`e^hgD&v)GP(oFampBN4Vr{ymAJXRgdn1@G-}*t*iUWXei2s^QV4 zyh6RyF^b=byH6U`3i7VEDBgZoGWyQjC+I zc1dg(Q4r(J(-ROSr}mU^){cDE27S{0dkY(Pjq`Xn%b0(TMw;O@!w`+#w^oG8qcrD= zSs4VN5|gLw-rm)v4VgF-v3>jAp>46bxmnqL3}SPh`2ch8-Ma@s*eg`|E#Q+i8}~?? z1GRn$n3#N|{JxH7{~OGsQaT>!DE0Hxmw?UNHSZkLNak&2_a!^#P5-a%zC4=i{d-q+ zDn&_#5~WaP(m>`4nTj%oP$Ut_JP$=BN)xGsG9)CS$Xr5(kSQ5Iky)k>nTPwl(K&sG zb=Ugcf9|^XtaH}toWtkye!qsjpZ)A-?_DI8s9R1WAwp1;|3FyELFBz*fY5fc=O)u$ z@SNKG0>`GQCQsL3JklDca<`b{#Xg(fsavhs`V>O=+BgM?@Zx$9Q zcdRCXy*V?@Fm=Z9LSF;COxYvxL%q&F-{nR|dc*K4-oJihuHnp=f5GX+&#JEaXJ*=& zSza`#E{^TF?484OQ`)$50v6cUY;=$`YtY1f!uCh!9Pn=OkIW1QNuc$gEh$}?R^Y6o z``E8}#hgLP+1TqrL65St6ZYkB0oN0;13XuLh@XBHv!Q^@wRb4JdU1k1BzswWG{=Sh z3>~9`LN6sGLyb%1J}W(8F_W3@-uFq>imPYzYpgMOq=IytY47n-!kq`$wM9K+WZc!Z z$IOtspoob&1gELxvg!23vpN5A?EQv(AkG_w;aY&00uXHoi9E@@n)zv(ST&9TK)%sBsQ$iYUt|I%z! z-r=hCii|?5FCDzgU|*#sp0;1Ps?HV}K)rP;;h{GhwcmdS>XWeP%E5E*jeB3b(3AiA zGE^r*cKG{9rdKiaW8D{3tP8zU+;}SCaiQOxLUIU&w{7@9c7G` zuN)y!n2^$DH9flfm~Xj%)Uj#&7-GB_VqF=g!aRHLRzkPPnV?xQC<`1Lj^o=`!o6Wh|1^*nt3 zigODc^Zw+!<^~)F+=e+f*{F4M&jiGp*-u7)>o_x$u9M=KloHRYosr?N^}y?x^5OrC zC%Aj$os7n@+-g+=({zo9q&GC~2p)$%Mb_e_j(7@mEVz=hxhxpO-Er< zqg)_^I~I~{9}t_Kc@EkDyT?EJSd^Z;fUHL`lOyI7n#Qto=h4YDQ;XlZR~~fFK#9GN zW$c#rFmlsT*I|ZcJy>5|;dCa#kjEM(@%A*?f$mycgi|G07M=2;KmVs&< zv^etrmV?|UWP@noCv>*x4pQJnKPIN8V3Rd%Ws(vY5!6N~aI1pjK*%!kVfD`0G`_&) zTPAnJEXEYfqREEi1N|M@Kl?2i&U_iHK7!1VhS0lj@un4m9l_NS^F5KaZvPovJi2$r zhqGT`wP}?D;@|wj#TY;hT|3i9`x}pSO+4P29qw}htU~itz1XLkCVkpg?tq08w2pa9 zAELDON|vo#qbLV4eg=@`SX@nxnp*b0e29VB`PbwVFK;}&VaZmg#lK>(aoM_pR9))Lt(IdU zXx{&5e$^{z*=4h4>T=_X(BVUV?X%}|bGD@qZgnX28*1vMm&BiuxiHz0@hb&K?%2P^ zCfVh~;S$+ST?01|5yGd{XF7I4c=qJpn7GSTs(HFKiqR+vvhm@p?f!h5h}@dqUCyd& z{&s)O?fJ>6xG^l!4-Vz7hmSLP*(A~p#Pg~}1M5bU9&?uD<;nUDMX@U>b}1iRuoKxQepUOJSp!!yF{qAlKH(OUqyd1CqC}X-{bkcKJzcX@v?V+TJL(_p_{(T z*t7I1<@x!Jf=EHfkx%vY#qdZzYowoVI?S&xjHVY=5uRX7`S_2${kWZU%a&J@$I8S+ zE6FIGfmbqGDZI9tSA$D0Cg8?5?WsfiLVrlRZX|c64`Gwch6<#ml8hmg#hiTIvnDZK?>Vx}1R~>wU?~M)l_!fO^xb65w zCk!W#cj|>h_9=s1hIEmV!09KLwpnxSwX&Z7@Q7JtoVRUTlJVIZX;qaXwYvd*C-N?k zNHwB4=i+BR+KTy?3+*-B_eqh)7R4i(>(irM>~v@$2^3T$;6 z8@u->*jOZ&51abP7gKfgzIFc(aPGJH%~OW|c=naF1_lDK+n21ZFV?*(0LgLj6HDE| z@uz=&_WfLT2^t!jC5oF(!Y_&FNAw$b?_!mA!f5pbl#oE-PvGzC3Cb#3jNqb;x&Po+ zj?D!OVF*=EclSx;2q2H)*U!+<;JIxm^WT10DqzS5nrLEH22dh~Os!wP9y3?BASvb| z($R6&c(#vuE4U%&5P=pTC*_pn#6Z^yhTO7A;WkMtuKbwMeuG zXk*%(a6cuXwy?Feg;4^|$jrzXAmvK$+_`hVDKC|vAkEqW1trF9)zlQCOWb&2X({iX zJ!(wu9aO{^hh!6fvR5@!y}+sO($i~^Iz%vw$A&aeH`hawNXgVJw7mwcE+y4cTH1%i z#`tbwba2(u${qk3FNv&0!!tW1pCPMx^zfkuGDiT)05t(fWsf0~rL)j*l45f_P!4Z= zatERdq{^u&DUS=cdqM3D0R6eF43lTnP&J^fU5BDpX^)wc^+Z;D`GV^@{jvsN3Ja>E zr#C${#lxJeY@pMGHttZtm@W$R?3JV@lt*`12E4WT zKGSj*6PeWWiF{B*5nWY*0*EGm@NLB4Z`8D8W=yxp}t!p4K z!i*|n_?C)_R;tN~RlNRSs}RsYxL;UP^F|Zs$$Y<6iyOcBm%gX_riA;Q|iQG9YMpT$HA)6mh@W@Kq;dEo+TV@bf? zyScc!iKIVzta3Rm5_NorMY# zyOZHDn~}VO&gNY*p6LVd7=%Daj~yc>=b%RiCIUZy-kdm&W@zs+Gf_*B3Wp0x2+p+L zoAZ@W&)C>hY^Q+qZRsS~i09Ekwvv#Lpc*O$*F^VLixIPO(0rs0Q=X9F0}7ColM zfCMQGO~y)!%?pB0oS`1hJUZkaEsc#+&<)2#X3ECi1oFQmlo{hRDjTMRN_);>$AUuD z)UoPqgM;(vSrUT-Z8V4bh}Z?ac1JO)>o$uh8R(<~D)08i?6Ox*Dv_ss6ri@7A1IrA2dFBlTITFE0 z_wG9S@Oxh$GYiY-5g{x)!Y4D|G)2*MU4N$M8rKN?0ghWOfV*@NLEQm(tII#ZDmM>qP|FFaz(?$PU zx@bM3dFWubk@yKfvH{}Mr`9oDGTG7T0Q&+gO4RwFo*M(-b#mO&%dHyB{Xut8Q`664 zmKq7Kg5x#UXE+ao{U|=Z5B02Q&&*0sPmkcLX&r^vsf9rtxQ?^(PKP1aMxz6ClnNYX zHykM{VFTli>C%w3jE#*63kze;0%~=sXlS&@lu4*B6hyKMu>-2UiQF%g3~8yU;AnJF zW`$T@2>;-L{l9_-!0PfiuA(@&bIAtnQSb?VJod8=C2$b?5p9V|Qnkt7OCVu20szMs zrKYB$*%NfxjDi?7A2_?G6(xGa@F{4>5w_&VUb45hx3k-)OvoM)#5e$m;h2q#jEK8U zymlg?QE|rx*vpkm+eOXLs)$>9+SJq$lgUkF9!umTLts~k8~|FFeZn$92}mj{v&0|_ zh&D?+bVh-L@#uIh42gGwVKw>&Tc}JbeEa4NkO`o07k(l;D+`yepcspAR903N?M!TN zISqbWIj{g%!ov;mPDI_E#qPKuIrLwLoyCf@pxnaNb_6nbCs$X0Z(8GvFosG@B)E|1kcp^=f}GPAPLy(t!YH=C^ZZmuukXa=Pz(TnS|Ud%*FL}%$-5!aAiP1fol_c(uwPc zJB-g)%UMV9{`_K2xR3{_nLNA|j5s=mMe97GS+G#(B=s;Y%@IZ(mC@C}9I!MVPzrzz za2{^Enw)0Pl<6plBLRDlC&QNznIN_-6hqEoRY1Dgs8mPDQT0&e1sT%bw|e*-0#P;A zo`Br&eZGgHD$jz28mrwjY~bfu@eMk?eVpO8IGR-~o+$qHV}g!ST}iEy(vkMwIirreyFr$c+iRKn42?!Q6eBL=8RDd@JfFmkC77M>&%-m4{1i;V?kYHi) zGFfEpHRx5iIUzp@I;_UcLew4C#W${U9qry>;t8wXR$+x2%=|9-8c=EqXTm3rPfkz! zyW=v#kjA;uP^{d%bhXGDKAae<7X{M{`C%C|dH0>1oW3hX$+4q8D}(0x z6O_oXx#Ao^LvCkpZ;8HKNGlewX2X=+-Yk@d?}yA0vQ9!dW@Acm^6Lsnpz+%!l_ zbkql_{H>)W2hbjezX9FFCjPQX*>?KoZ(tJ4E|K({OY0@tz|=#Z7-;F#f#M((|LDBC z)QZ-;b-4T185xd)1Ffw|m?;`|axH^?u7|$c3lwCa%`}C){3i?*a0f_-kQ+F7YcwcgK+_ax&o5XR4l}`Z<7oq_sZ68ixOSH2s zudKXlXj{6oEq^IDf=&i-&uEEf2>Mt??HjdXWCIvkRjSC{Dk`u(Kz3?z}cBWi;^?fLDItf@LBK z@Jc#sYP`HC7_0(HolKIT;Jt96@9ER+fTm<}e;OV~ZKJYJ z&`%|OAFuN_5tXOk6%-Xk0UZ(Kq7Kd6$fyc+dS3LH^@h;gMF0qcPm;0`lIW1pV4WG4q#R@b*Z-P(9Um_xD z2qkcsRqF*!ZF<^rP84cO1fMIAfA#(NT&dLF`3Q)sDei14qHO`}0JcEP`B-^20#Y)UgvSm;IFp^b{eC*-5szXTq9L8N;M-Gw-8@QN`ZkYObZE z+#m?ZN0dq67;$pO0EPN(F*GC*&8{+nj>m=>gsC7b*v|}5I_#Hil&AJ-J84N`)b~tiMEY@7?*^>l#MW~_?UdoLr;oPZxlQ6 z7qyJO)MP|=*4f7?YiVfaQGJ1AW7oNXiOxk?9qW?1mT8kg|9EA&}HBqos%bj z9>b6w*WuNl3JVLXtJRUUxvZftpJ1!C@)*V(0gvDS@JczgRXm<>-Ok0uB`T^@FX%r} z6x}Ok9-4B+dQqu$Gl-?texOO`<(k>qSr`cq*p~u#hpK-22E(Xq)K9Etb$g8!LN{O} zC;hY#Fy!I<=l8lJKENw#q(;+L6C#2%i~4(a?rfl=Q%4>X2gg$L74y-Xs@B8_aPdI)t#brEnKjz?jrThAU{h-3YHCx_bvzTWZJ_0r3mQUQsL?6;1*`zp=0PgT%83DUq;y;P zi$T=L!fQN6`ay~F&=jqES<^9#O*|UiZ=3hr9BL15O-o9uN9UwD|Dm&O3RqyVbDuZE zv?Bs4LuVW%y5#)r!K!y-xIl=<>!9{7_IzbT$37%kwBM{}7JdnzPCgH+OD&8H!Br7y zH1O~cB7m>)+JoqucxT(HxX_qxiQdt3E9+rlK-i!s&}rDOp0F=SDe;O&d*6OCb|OZE zcQfshu~($UX!nA92D3hsz@?~o`h@%D7aiM_030R8o<%}?dKd&75$_qsuq)TEU-$Nw zL9!vjz#y_5Pt4cZL9_`~=8ihRmGpEL7Cv{flQ~_J?TGl@PB(0+i zCNXuxcdMm{HDM>`_Hh=sMUqURVrS@x1#nj}3v@FqOg+GrPc#LD(H~U}iLD zj&E;KhpTZITN%&3eQ%&vCrYgLj}MX((dB4#?>toIJCy>z0W}gyLX4gM8qd1xKIuGA zDlpld0ke&))RiAlNV82?^M||rHhY(p!-a5+U9GKXwqa~d#@#E>39{m?&X-r2eo-C5 zaIAAxvEve&iet*pwAxa&XSsHK{x@v@*-P_ z+O%$CGqXp?VVptufG&@a#|K}4$16CGil>c@MmoF?UZQaZ?cQJy8FRd>kqK|J9~WaZ z2u8+uEoZ}HI=Xja&N*$_*+3iCsWFm<3Uf3xNI;MPZjE4F>UgtFZ)|BNXA7y`HSK`h zB35munG*7#_gUk~03SD`>Dz8=f-KG#A_Nb6Rc{0YFnV4>VhFT5=NyHYs3=j`V|%h} zyp}i!SC3}Eut7Y5A@JOi4-b!|zlwEhx7&)PxtF{#mkY^rPTJ5dv;au-~fQ{9}&$X0(y{|Z}@e=wA&1QKa{TdYLlxO zt8Y2Y!4}b8w_SXE7O0*@U8pm{6R?1nFvlr2?DnY^QS%qbKHyn*YduEZ<^D)e0fG_~ zz=8Npv^Z#B57bOUa~toA-Xabl`Kkonn7FO^z;DdKa-eE;A4~+c8j%i{_zpqZ;LoL{ z@o?tI0uWQ*84L?6rYDM8Z~YF@khf_CN5-%F2Kc)!=fhvl58j;wBLD}KfT#^>cyQ2x zk~i}azrlpVvIr9X?!H86Hi`+!md@`c4S$p(xTSNLCOo5@Rw^Rb8^p>%f;B9+-WIugJY%yEK+_g$n~k&BiCu9HSTbwVXu1k@$rjPSb=U64Sb(XtiWrdKkk{?z0UsKC@x~T}1eKDu6qE1auW@x6F~R_t0I}Qk zc_9kp#iY>Ycr^T7u;aW@E!ybHT4@1=NLqgyzB^2mop#>QJ?wlIjW_aXjaa;&dsDFc8AAA9W45% zm4!YlO8NZ)yV)fUy-Zr7%q+Yr*RET)RocT1ObT4E6K;da-aFGsNt>2Eu0@0d+I4bb zf`fyD%avjkF~Nrdd5q=A(?A=AlpA;$P2u+s5j39%!v;DRc?E)2G%||72A6`<2lfU| zym0OuMi0Kmwd29(EGD|J94xJCP@Rk4*}CVf0yxg(b%lI*A>d#%b$k2vEefzx-+d|B zc5na_)P9YPIb6B~Ct85XpD5ma`g2+LrX?0&Em#0Fwi`ubtsW4l_?|$^-5x}BG&TlD z8G#@{_m+7Xu!!2^mz5oJTMtzk`nj$&+541GcoP{cwmdq695?Q-wP0}49S6gb*G(P< zZ;Aq1(37x)6_Kk>bK!XbS`$DiAj*eVE-cIag3(a;fcGb9TZ=vBXB}6sUVX8q>;{_ZzkYRq9heDU(M`AX7QRFKu-LwG_9)0sUN)%! z;v9!)F@IPJe1cgJYV|9=_~YsYfaLl7`DaYHM_c07?$v*P06ju$OeHGd*IoGm$c6}z ztgLd8CnRh_$g*sthAuChUwyoPK1sUd+`-?;4Ys^$Mtb_QmX_JhBj-@X9Z7I5h%-=7 z5BJ1b1SeL=hq)BFf6807Q~R(INHULHydoKG27$zc~I3Epm=zbnq)9c|wqj zfa};cuEv@lU0vE}2neF~lAuA0_1ugzcaa{5RpP`meF+AY0Pv0I>1c>BKVh+`|4tR) zvmMbWTu9~ML9gT;wn**3eIxf~jaI@YAucchyLN$TP%&9SO)MW!FnG!y#0x=|Ufbl3 z99hq_C%>e`90UiTqo(kRM@xK0{FM!@v3trv1;JIkGRTgzI9`ks0(m|tQ&w!G7l7JZ zv+7RpEU+CKsmomK;BetJ&~JdC*_&AWES9Jo23mv8$;ruD*gsUZ)<3<6ECNu^HCDsY z6c7L{Fl!*rh`^jGN|=9UB~6;$T64Z(c`s3XX!JM~(M78+;ZI>Fcpq9{-?7}D4}2jx$o z`lIDpxR|TRp--AKZ=2-1QmwEji@%-V#S-^E`Z{Q z6HchBaxkK|oK(H3ypJEZvamc?37x{kX7pn$N($W^g_@hh@v<#B$`@oYH+7;^F!!Xc zu8XVdNc`E|Pw^CZK;ZL=vNC=i9;JHf^GmCyx$Nc;YDhDpVl`s#y+AHFX>`wl0}}`o z=r?U5CQ9M}`qSRKcQ2|0(E%EB4gU(zA)a65{Q2|nS41}j_zm7h3Q6FR*x=w`AhA); zO*r3MmTnkf_|dA0qZbZLRnA>Op$OyzJTItWnb=MQy$jX*7`gTiAY8*4Syw-Z@43~F z+`I(#>qH7JBl6)f&ztGlQ{mJx5^rE|Fc%3M9JA~#Qomr9(945s%+;#nzCxw`qL$HZ{7jY#Rw&uIM!((AOCVeBy+@bEFJ%)>s zl9mQFi)Y_2N>%jubVE)Kek6Yk85+J++$&TN79%?e2bBN>(m=Zn3uV4$%^EmgL^fcX zI#-iVpKKEp5l6~FM5IUf%=Vx~RA(UT^q95D#nvDb5otJlV3l?TY zT4_@_8+a!eTNCD|@~{!JNacaVz|%jz-(|v1`umQDo%0ca$38KF#-Bmem(U*tH(5#b z)g3ofII4LfIot>)5{*!d5TL0W$~iIcXxz!LtWTC}P<|OvPzXjUY6=WmZZtz{G+Do4 zhHd-y?`Q?UP#1dLC-3zu!`v2Z6uN1c&#_X{AN||CR^J>#NGON!*f=T}?$iIqjdYA` zK~eb0lP7VcaqdX2gOZh9NbSU$nW{qL1H0?D1uYM_^MI!BX$Z!ZVurVV3=I~ z7!sh!$2j&(ZeBPLWv1v{p|7tG3j=%|W3d8dsgd#n0|P*Q#K9R2-n{nr&4#=(Od%63 z$I4%jtKfrA$QAevsua!{x{hyqB4;mk zsi}{Cb1WNs-Qo0W%J1YZ>-N(7%N_R#*yGjkOiQ;%VJmIy`ZQWuSvk6c2Za=PA3WIT z=O=Ppu(Vevo?is{Ge zZOIbt>r6~w>OCOYo35W3c;E=pD0TaK)Y%PoF-; zZ@_k(OO2&Ezfg{#C`Tn|4x}|*?wDgdBoZ^hXPKaV;)D=#N;qj?WEn7!zaA&>W(edRZyVYbk5}yH6ciNXQ4D8>nwgE0lT%vSu;qF?7dJQ2w!Y)->y1QUYYS~y~Kt4l49K~=Os6i1=^Y2O> z%C95Mjivn<(>tBYL#1cUCx##k%p7DUbNG5!=7Ma6*)Mdx$+%L!G4_BRkV5^k+B8`W zH3gEF(;~|&C(Eon&`J_zlQ#25$h$iOFR(722E_*g`VH7HXvsjw0vV;xiYJ*M4M~2s zzeLOA3~zuw&M(oi8U3v*?F8N4Qiwa&8yb39r!`?>2OCWt1}V;6_FdW0Aiub!4?)P>$hgq-j);313<>HU z&2`C#_LmW_tRjn95A_gO0T22!R{~Oj6DgIa2x_9)n}gXncy|3%3mwn`&}Do-5a7nL zVQ11wAfwMuL`RS}2Y5GXLv0|H^Jba9-*`6$?Z_d73ehC+xJ2WTg}sbO!NJ4=y-UN_ zZ4DHH!1}4c4>kLHJ#+`!(_Z{9|zM2{uGovxmTMu0N4(b6BPc32hY6Az0)ORx)yd#Enu(}-1b$*_Ue(Q9w=S?FU@Z6eYfYVRe#Xt{=}nF|oQ=bgY&$ZM>4cNy*XYTA z-e`vIgbl^Asmjiq!2LpY2b-p9Lwf`Sm1{zU$D0EY`< zWLCKq_9fi8lWFq&_T|X)w}1>bzAfoc%AbaLY{l~xG;NIlXC;CM%TBy@LE7xsEP%@3L1uft~7mVX1w{y9u?dYG~aLJjisFZss{ygtsazKU~`a-eMj z#oi&f!X#RWlfYgpe%yi9qFP zfh!kaFEeyvPE9X5NLm*pI6A^R?w3vopj1=&3}CV&NsIYQqi2C496FZ;)^8kJT@7!-v9Yy8**xm;*)p#%G9&ywT|$- z^O15XqG&$nC)CO2WS64y_o``lyZ_ak`)t6|aze|Wc%Stqwo&H7iC6Bc+|u23bX%{m z`c0utwR;|Y7W-`peD93Pxa~3v)fGG77GHqNzu|hasM`Jz?GI+R=x#*Xd&>N`-}$OK zld6!*y?s#Y?s_Vcc@pu~&nyBISjar@yx3*id@5uX9xp2RER>tgC;RyITyRQDIP~j_fN|gUgT1F50H!A#FS^hZ}v5(8* zzrQKGkzbjSyJPX29vwaR&o?Rbae8Dn88T9q&o}(B62;EyTjwu)?9#kc6?>wz$XN^j zw)CJ(qVaJ*JQFT{<*t)jgqS{2tZnz%{&~C9JpA4o_t87cGRo+UKg$hu|M7)f&)j|f z`J!)Yf1mR1h4b_wGQ|G3XV~z}XN)#4O&5S-l{Ht0F|V7!%HS{ZG)zw$iM{#j_MeZi zu|b~lpOs1&!mbe4%WGjzXeIu*(0%E?`w{so0v1&Jx)@6|h} z?d&|6Ihez1wQhUHSt_jLRp(K2I>B`jnF$%@ZXAoNFYqJ1NO0oH$zLsxBmP|6-R?f0 zwz<9p_tNGMx!lQ_z&YSDO{umE5Q}m1@dc(``)yy0j|+!nUp|+Z%vKZ&-G@EUOtD`4 z57pG|rj;9|60cOdkKPpgI&rmirRdv`Rkh_iR9>Gi%=&)l$j1GP)+o6C6vqhx-&oW6 zF6nvhF~V)n-LiiA$K&j1mbwzIofH@pM9hzc`6bgDq9NoD%+uzyTK9XuK0UQS3!yRt z6S+I;^KF}QG2tU9P3u#*#i8?M3d;&}YN&}>3ID;fw_4wh0ybolUq>Qc_01|=n5omv6;>Yc5<2Nl1C(igy@8tQ6 zz-k!viPjoIm^RStN(>o8o%LXIW*sY$*;IbONBap_=Ua2z?R01g=P@y+vlr_81Bu^w z4Y*2l9e+sA4bu#t6Emba81)sdso+9({LsAwKdOC<#BR8ZstF4JdLSB?Cid&*<3I~U*YOy@#Nb;6gnFmpJ!A~>>wF5W?wioA)w4vb@5MUHEL>p2? z#T&LBm*y=xUkL1NrsS`(e7@OOz$RU>+k?O3+B8oGOGlj1Aq|6fj-mr;J=Zw&wW$qd z*c?#*V=3p?J(2bVoAnFQYX^WW2pioHm$Xqdr?~@<8-1=baJ7WY^BN87tD8L@4SkO< zyrQkl7ohD$TG7!EAkuC);hPg6-VI8kw>-Ui`!z@Nj&DA>2rPkQHyMKUlFu4KNr+>b ztI2C|3Ly^K6y#7g8922n3ud=Z{JFGI{+ca&I`l#Z^dWlJ|7>S=+;Y9|!#Q={Pn{E0 z?=us623+5&Uj7jhN)YpSS0oRg2Pj!ENxIkpNe{mJ5dffQU{@(uAvyj;`rW+xos!a{ zB8UC$7K}5C;YP8zrb|^7CsgdIBFK5OtWn2AqH6m5&ir9+-%L?9rdrZzmLVn$Em2(o zj$4_b6pBf??AC33y%87yQaQWsN(~L&Rr)1Q5UD3DZkT&H;vW64e!#`vi%&3v3#qw+ zO&M01dTlL;725g`_wyQOF#HhooK$w4hQJfw!kdFQnYQ)^4s&yV#1%_Gbl4*4PS~Ps z^%!P71A`VsT%n^KN#b4*OMPjcyB|IytC3PZ>1oQ-ymAX+mCPhv0tSr|qAuIzRuyPG zKlGmEl3R?5h_K+gC`N-`_wk5mW^-$6gw}>Xh223K00RE7YITkzvWT0DaZ8(np|c!t zB~6EIY8t-9(QKk6bXf221$$n4%g$EgEmcHh#wE1p5#{KxhuT5<;vWE`s+S$%M+|t? zmNYP`fjke8FY(>-6REEpENI(QE#SZ}uypb6jdJM| zg>^{&v^{u-@Y_f`Jp#z55Y@(-k zqE#z3cBDXL{~%LRL_}MoNX5RxS^>2~8ax*k=mP+`ce_{Q z{Z(pIg1>UaYb942iS?p+#wKTsof+7!F256ETh6veWfc{hWJ-#Qtu^?w>|zZHC@m`& z@2Hz%w^G^fRe2ma!!OZsC$R1SJ;{MEUAC=dvm_lWk7J?ahi@vq`#@|^#ipWcr&(m&_Q z1BsTT7g=SuXv)bI=sPz5x@F}Si8L^#U2RD0uZ<60I6wMv+JB#)8O4VJB2{H44l(A} zh?bD@Y&B%m475SGHzogrp9x#GQwi5s^~r%&4{>x%j5R`+ESfAsIuK4DF&io8^oQlc z_Mk_bbQfK~DwCAyRXH={(l&m3>4r4t0d_-`lZ5=0~?j4_(MH1?$=ChY9c^Qvgf@8vwlMu@8o*-6_6Z}q7>;)91KGOl|BQ$?Ka|1K_1EG zv}VJ$ZK5`^Ow|c{k?rA8>W0FcC^AL$9qlLo5}o{TA>(W6lYKixTAU(7R;bng4Am7C zwiXlde^N4UmIMlcn9Hp`xkFqqwrao9Oow&G-#(IsRPa30q$I6j{;=o1p2dUZCHlQP z>d+lVgId+g2mHT57v>~%jDeBSubNxW3G+9=$2oXLD_dA#8YnDb_IEa4k$ZN*I)C3h zGUu6$CIu0B&CKmn6$2V`9hq=WWu!dy^@`5=LVt!=7g^7MU5I#{-WwM$dkb^*C}WLi zqw6X>#!?6k4Y(h;#qlQF+tcxXMO>p@O_ar~H|1FZt^h(~E$`v62?ZG@M{XF*&?)W$%e>gYpvST5OB zZC9X5?2S3N;r1Cq6Qu*Y&91Ve4Io0yrrq}&uYkNyS$Vk!M3V(O--R34c~8?Fb$+CI z^9$o5D)ij=ymTFB8B2#o8dggn2UW}SxK0b!ilx@RVD}%PSBCpvG35CPOi42B9aMLc zElWYQ(TVkwB7Rn-B_%U@dB4%W5Z4>$u>cB+l_H9=hcrS$M@R=xeDIiPy&f?$!n%QM z8EoXj@B=Owak=eW(!4UuPlhU`Idx@YIJ?GqR_)lVtWz98<4hUfuNa=*K-@5IdDV<> zTU5QxZQoZO^)}ZWrbpT$@%8I3;xEwMeHSCzYsBy> z*bh*+kF(fU{qH{9UVS2Kt-!O}+x8qxdt`L;|D3W2{33PuA1c7&YDN6_jZ@t_RxG~r z_sX(Ac!0yxl)oKRU|A9aAh2?GA*yvQHNXiY!+Kf(Jat^Yd@t12<<hp@SAo1|=iu@W)%!FH$8XF2;P)_-G9ik~S2d%1$*pc>aw z^#A|)e@efahN2nkF9>6z`oV8fY-oZJl{Gn`rp7k-MfU1)iWe6GFT7~VBbsO*Ae?xW z1My>&7Z*E*4DJbl3*{loFb2^NXAkfbdGkc_obePw3h&>_8(ZBRzC59~7 zB%SeDyOQF#yhhSB9$hCw0Ra>tNPH#*JA^58Z$E+CZa4Z!$*`8<>3~8S@l$!om=e6E z<8nfA{8S8j&sJ$^-e-rGQPix|eEF<*A-RD6<@NCC0>gwq=5JX@bl^|hzb+m%{4r@v Zn%nxIfZ|O76Z{*6qMVBCtHY [vendor/html-theme-web2-1.0.0.tar.gz] + [vendor/html-theme-web2-1.0.0.tar.gz] --> [vendor/html-theme-web2-1.0.0.tar] + [vendor/html-theme-web2-1.0.0.tar.gz.asc] --> [vendor/html-theme-web2-1.0.0.tar.gz] : GPG verify +} + +package "Python Project" { + [vendor/html-theme-web2-1.0.0.tar] --> [src/byteb4rb1e/sphinxcontrib/theme/web2/html-theme-web2.tar] : cp + [src/byteb4rb1e/sphinxcontrib/theme/web2/html-theme-web2.tar] ... [src/...] + [src/...] --> [dist] : build + [configure] --> [configure] : autoconf + [requirements.txt] <-- [Pipfile.lock] + [requirements-dev.txt] <-- [Pipfile.lock] +} + +package "Testing" { + [src/...] --> [test-reports/unit] : tox -m unit + [src/...] --> [test-reports/integration] : tox -m integration + [src/...] --> [test-reports/audit.json] : tox -m integration +} + +note right of [WEB2_PACKAGE_URL] + HTML theme tarball is fetched + as a compressed artifact +end note + +note right of [src/...] + Contains Python package source + and consumes the integrated theme +end note +@enduml diff --git a/pyproject.toml b/pyproject.toml index 5aa6513..5f4f841 100755 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,7 +12,7 @@ description = "Functional theme for Sphinx documentation generator" authors = [ { name = "Tiara Rodney", email = "tiara.rodney@administratrix.de" } ] -license = { file = "LICENSE" } +license-files = ["LICENSE"] readme = "README.md" classifiers = [ "Development Status :: 1 - Planning", @@ -31,14 +31,18 @@ classifiers = [ "Topic :: Software Development :: Documentation", ] dependencies = [ - "sphinx >= 8.0,<9.0", + "sphinx >= 5.0" ] dynamic = ["version"] -requires-python = ">=3.8" +requires-python = ">=3.9" [project.entry-points."sphinx.html_themes"] web2 = "byteb4rb1e.sphinxcontrib.theme.web2" +[tool.setuptools.package-data] +# relative to root dir of package, NOT repository +"byteb4rb1e.sphinxcontrib.theme.web2" = ["*.tar", "*.tar.sha256"] + [project.urls] Bitbucket = "https://bitbucket.org/byteb4rb1e/sphinxcontrib-theme-seaharvest" GitHub = "https://github.com/ByteB4rb1e/sphinxcontrib-theme-seaharvest" diff --git a/src/byteb4rb1e/sphinxcontrib/theme/web2/.gitignore b/src/byteb4rb1e/sphinxcontrib/theme/web2/.gitignore new file mode 100644 index 0000000..d874ad6 --- /dev/null +++ b/src/byteb4rb1e/sphinxcontrib/theme/web2/.gitignore @@ -0,0 +1 @@ +*.tar diff --git a/src/byteb4rb1e/sphinxcontrib/theme/web2/_static_extra.tar.sha256 b/src/byteb4rb1e/sphinxcontrib/theme/web2/_static_extra.tar.sha256 new file mode 100644 index 0000000..d8d393b --- /dev/null +++ b/src/byteb4rb1e/sphinxcontrib/theme/web2/_static_extra.tar.sha256 @@ -0,0 +1 @@ +63e49714a06c865bf8f15e94f9d514cbcdb9927dc20c748a373e93570c4c8e8b \ No newline at end of file diff --git a/src/byteb4rb1e/sphinxcontrib/theme/web2/assets/.gitignore b/src/byteb4rb1e/sphinxcontrib/theme/web2/assets/.gitignore deleted file mode 100644 index d772e58..0000000 --- a/src/byteb4rb1e/sphinxcontrib/theme/web2/assets/.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -# generated by Tiara's HTML Theming Reference Implementation -# -# this .gitignore serves the purpose of allowing wrapping projects, that -# generate this project's assets dynamically, not having to worry about -# auxiliary debugging assets polution. The file is supposed to be copied by -# webpack into the output directory, so the globbing patterns shouldn't match -# the current directory. That's why it's called `gitignore` instead of -# `.gitignore` so that it isn't actually being picked up by git. webpack should -# rewrite the basename. -# -# Depending on your level of paranoia towards breaking changes in dependencies -# with no access to working versions, you can either choose to ignore the entire -# directory and generate HTML theme assets just-in-time, or commit them as -# static assets. I'm running registry proxies as pull-through mirrors locally, -# that I back up regularly, to keep my paranoia at bay. That way, I can.just -# gitignore the directory and generate all assets dynamically. -* -!/.gitignore -*.ts -*.map diff --git a/tests/integration/byteb4rb1e/sphinxcontrib/theme/web2/test_sphinx_theme.py b/tests/integration/byteb4rb1e/sphinxcontrib/theme/web2/test_sphinx_theme.py new file mode 100644 index 0000000..435f852 --- /dev/null +++ b/tests/integration/byteb4rb1e/sphinxcontrib/theme/web2/test_sphinx_theme.py @@ -0,0 +1,5 @@ + + +def test_default(): + """ + """ diff --git a/tests/unit/__init__.py b/tests/unit/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit/byteb4rb1e/__init__.py b/tests/unit/byteb4rb1e/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit/byteb4rb1e/sphinxcontrib/__init__.py b/tests/unit/byteb4rb1e/sphinxcontrib/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit/byteb4rb1e/sphinxcontrib/theme/__init__.py b/tests/unit/byteb4rb1e/sphinxcontrib/theme/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit/byteb4rb1e/sphinxcontrib/theme/web2/__init__.py b/tests/unit/byteb4rb1e/sphinxcontrib/theme/web2/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit/byteb4rb1e/sphinxcontrib/theme/web2/test_unarchive.py b/tests/unit/byteb4rb1e/sphinxcontrib/theme/web2/test_unarchive.py new file mode 100644 index 0000000..5428947 --- /dev/null +++ b/tests/unit/byteb4rb1e/sphinxcontrib/theme/web2/test_unarchive.py @@ -0,0 +1,3 @@ +def test_default(): + """ + """ diff --git a/tox.ini b/tox.ini index 6075fb8..b81dd10 100755 --- a/tox.ini +++ b/tox.ini @@ -1,73 +1,67 @@ [tox] -skipsdist = true -maxversion = 3.11.0 -isolated_build = True -env_list = - static-type-check +requires = + tox>=4.19 +env_list = + py3{8-12}-{unit} + py3{8-12}-sphinx{5-8}-{integration} lint - test - + format [testenv] -basepython = python3 deps = - {toxinidir} -setenv = PYTHONPATH = {toxinidir}/src - + . [testenv:lint] -description = lint with pylint -deps = - pylint >= 2.12.2, < 3 -commands = - python3 -m pylint {toxinidir}/src {posargs} - -[testenv:static-type-check] -description = static type checking -deps = - mypy >=1.5.1,<2 -commands = - python3 -m mypy {toxinidir}/src {posargs} - -[testenv:test] -description = test suite with pytest -deps = - pytest - pytest-cov -commands = - pytest \ - --junitxml=test-reports/full.xml \ - --cov-report term \ - --cov-report html:test-reports/coverage \ - --cov=wsgirouter \ - {posargs} - -[testenv:build-demo] -description = test suite with pytest -deps = - sphinx - {toxinidir} -commands = - sphinx-build -b html -Dhtml4_writer=0 \ - -d {envtmpdir}/doctrees demo \ - build/demo - -[testenv:autobuild-demo] -description = test suite with pytest -deps = - sphinx - sphinx-autobuild - {toxinidir} -commands = - sphinx-autobuild -b html -Dhtml4_writer=0 \ - -d {envtmpdir}/doctrees demo \ - --watch src/tiararodneycom_theme \ - build/demo - -[testenv:build-sdist] -description = build and package +description = run type check on code base +labels = static deps = - build >= 0.5.1, < 1 + mypy commands = - python3 -m build --sdist {posargs} + python3 -m mypy src tests --junit-xml test-reports/{env_name}.xml +[testenv:audit] +description = run type check on code base +labels = audit +deps = + pip-audit +commands = + pip-audit . + +[testenv:format] +description = run type check on code base +labels = static +deps = + black +commands = + black --check src tests + +[testenv:py3{9-13}-unit] +description = run type check on code base +labels = unit +deps = + {[testenv]deps} + pytest +commands = + pytest tests/unit --junitxml=test-reports/{env_name}.xml + +[testenv:py3{9-13}-sphinx{5-7}-integration] +description = run type check on code base +labels = integration +deps = + {[testenv]deps} + sphinx5: sphinx>=5.0,<=6.0 + sphinx6: sphinx>=6.0,<=7.0 + sphinx7: sphinx>=7.0,<=8.0 + pytest +commands = + pytest tests/integration --junitxml=test-reports/{env_name}.xml + +[testenv:py3{10-13}-sphinx8-integration] +description = run type check on code base +labels = integration +deps = + {[testenv]deps} + sphinx8: sphinx>=8.0,<=9.0 + pytest +commands = + pytest tests/integration --junitxml=test-reports/{env_name}.xml