From 495e20265c939e344add347921a5582ca32d5825 Mon Sep 17 00:00:00 2001 From: Cody Boone Ferguson <53008573+xexyl@users.noreply.github.com> Date: Fri, 22 Dec 2023 10:50:24 -0800 Subject: [PATCH] Add missing MIDI files to 2020/otterness These files in particular were previously to be downloaded prior to use of the program (or try section). These files have now been downloaded and added to the repo. Format/typo check README.md file. Updated bugs.md with features/limitations. --- 2020/otterness/README.md | 95 +++++++++++++++++++-------------- 2020/otterness/cvikl.mid | Bin 0 -> 96325 bytes 2020/otterness/entertainer.mid | Bin 0 -> 15273 bytes bugs.md | 45 +++++++++------- thanks-for-help.md | 9 ++++ 5 files changed, 91 insertions(+), 58 deletions(-) create mode 100644 2020/otterness/cvikl.mid create mode 100644 2020/otterness/entertainer.mid diff --git a/2020/otterness/README.md b/2020/otterness/README.md index bd5a2a68d..3a905a9af 100644 --- a/2020/otterness/README.md +++ b/2020/otterness/README.md @@ -5,6 +5,17 @@ make ``` +### Bugs and (Mis)features: + +The current status of this entry is: + +``` +STATUS: INABIAF - please **DO NOT** fix +``` + +For more detailed information see [2020 otterness in bugs.md](/bugs.md#2020-otterness). + + ## To use: ```sh @@ -15,27 +26,27 @@ make ### Try: ```sh -wget -O cvikl.mid 'http://www.kunstderfuge.com/-/midi.asp?file=beethoven/symphony_6_1_(c)cvikl.mid' ./prog < cvikl.mid > output.mid +# Play output.mid with your favorite player -# Play output.mid with your favorite player -wget -O entertainer.mid https://www.midiworld.com/download/3857 ./prog < entertainer.mid > output2.mid -# Play output.mid with your favorite player +# Play output2.mid with your favorite player ``` ## Judges' remarks: -In an entry that boasts not using literals, one would expect to see straightforward ways to produce -small integers like `!(x^x)<output.mid ``` @@ -77,20 +90,22 @@ it will exit with a specific status code. Meanings of the various status codes are listed below, under the "Program error codes" heading. On success, the program exits with a code of 0. -#### Limitations - 1. The program does not support MIDI files over 4 MB (specifically, it will - not take input files larger than 2^22 - 1 bytes). This is unlikely to be a - big limitation in practice, since even lengthy MIDIs are rarely over a - couple hundred KB. +### Limitations - 2. Not all MIDIs set (or *correctly* set) their timing information, which will - lead to the tempo of the drum beat not matching the track. This will be - especially true for "live performance" .mid files. +1. The program does not support MIDI files over 4 MB (specifically, it will +not take input files larger than `2^22 - 1` bytes). This is unlikely to be a +big limitation in practice, since even lengthy MIDIs are rarely over a +couple hundred KB. + +2. Not all MIDIs set (or *correctly* set) their timing information, which will +lead to the tempo of the drum beat not matching the track. This will be +especially true for "live performance" .mid files. + +3. There may be some types of MIDI messages that the program is unable to +correctly parse, but I have rarely seen this in practice. The largest +cause of program failures, in my experience, has been Limitation 2. - 3. There may be some types of MIDI messages that the program is unable to - correctly parse, but I have rarely seen this in practice. The largest - cause of program failures, in my experience, has been Limitation 2. #### Obfuscation notes @@ -103,13 +118,14 @@ simple uses of find-and-replace. So, in a sense, this obfuscation is simply an intentional use of global variables' classic problem: absolute spaghetti code. The absence of any sort of literals has the added benefit of forcing any would-be reader to trace the -contents of many variables starting from `main`, since, without literals, very +contents of many variables starting from `main()`, since, without literals, very little of the code gives any inherent visual cues as to its purpose. I already took the liberty of running `prog.c` through `clang-format`, since it still fits in the size limit and the formatting of the code was never intended to be an obfuscation technique here. + #### Other remarks MIDI files are generally divided up into one or more "tracks" that play @@ -124,24 +140,25 @@ new track, containing the simple 4-note percussion sequence, to match the length (in beats) of the longest-running track. It appends the new track onto the end of the file, taking care to update the file header, as well. + ### Program error codes If the program encounters an error, it will exit with a nonzero code. The error codes can be interpreted as follows: - - `1`: Encountered an invalid MIDI variable-length integer in the input. - - `2`: Attempted to write an invalid MIDI variable-length integer to output. - (This would be an internal error). - - `3`: Encountered an unsupported MIDI event in the input. - - `4`: Encountered a bad MIDI track header in the input. - - `5`: The input MIDI file uses SMPTE time division, which isn't supported. - - `6`: Failed allocating a temporary buffer to hold a single copy of our "beat" - messages. - - `7`: Failed allocating a buffer to hold the new track data. - - `8`: Failed allocating a buffer to hold the input file. - - `9`: The input file was too large. - - `10`: The input file's MIDI header was incorrect (but this isn't checked - very thoroughly). +- `1`: Encountered an invalid MIDI variable-length integer in the input. +- `2`: Attempted to write an invalid MIDI variable-length integer to output. +(This would be an internal error). +- `3`: Encountered an unsupported MIDI event in the input. +- `4`: Encountered a bad MIDI track header in the input. +- `5`: The input MIDI file uses SMPTE time division, which isn't supported. +- `6`: Failed allocating a temporary buffer to hold a single copy of our "beat" +messages. +- `7`: Failed allocating a buffer to hold the new track data. +- `8`: Failed allocating a buffer to hold the input file. +- `9`: The input file was too large. +- `10`: The input file's MIDI header was incorrect (but this isn't checked +very thoroughly). ## Copyright and CC BY-SA 4.0 License: diff --git a/2020/otterness/cvikl.mid b/2020/otterness/cvikl.mid new file mode 100644 index 0000000000000000000000000000000000000000..b951700b459ddb2274c705a11ed90f932324c61e GIT binary patch literal 96325 zcmeFa>u+31mM0e7U9GOEVNX@V+BUbgL2GyAF;$XES+_EkO7be1sbnToWF|9{Oi?5y zN|bcGu4i`)!>>;U)}IV` zvHl1A!SJW{@Ao@5SV1LIP1U1~-W4DvPn>h&#N)=}#EBCT&F-zlId{N)&As6^o88BE zo%`C4-A}*q>i0L^yZzq1>xuj6@+)8e`sl0frz>CosdGQ=eB;#*4uAB~x&crBQP+Tj z{PW{`ukp_xe^;S@^zSP4KmUgc{mTy(`hWjNhJNXd-)88S{=I*q(A0f}&i|o84^J!f zo3|AD)A1U-- zpk~R&bmMSR^Po=`-{@Q-$`6E z$uynoxRGY!I!UJET+@v#B(9ZYTFxy9UP>}cg1erl>qc6MTS!J1oNKuQiaV;f2Y_!R znFjGA^(0fLWF$fU9ekMXe&h_x8{~A8(Ju4Pba(O-$`A8A3|>k`mfSbG$w=3IV=)<7 zB%DDR_rk9>5?4wD+W%Ud>17#dl{U1EXNQ@8m!ZX5KLkQ6j{N53er*1d-)y@xH^YLq4_p7RfKh3mGZ?B_rx@We* z;1=tfi}*dO-#Pv+HDa{a#byk+JHH8@ZcD!%{w^=X%fKwgfY-Y5nsXPr@df8r&c!Q; zyTrJy^Dz=wIWNqzFe}8Yt&0Bw`Ij$B&Kl*kE|a>vF3c5Su8Kbq|8>c~A!#=y?Y89K z5$3Ki_atG%UD%Lt_sPMP4Y#(z_$%&rxT@1nb*-w$Pr3S(Pr2YKg-uJi9=UGB zTCThQeOetPR@1;}hCwXWK!ni%g=3|nUjVks0IWfPJp67PG{)3%Ebf@a1-_BQ>aeJY z7-erJOd`aG>F!6)u)IM|HyJ}_kaQ>~lpp4K7`&9cj<4NKUWcf~ed#JCieQF#vQWX$RW_}L`ZAVxV>&mawyam?ypWf`+?6v_|3k;)$1w+LY? z(L(Y%NS)+$)Y3viwx#4--Q;Ua?prD^;YIg@u6wjsc~K8r-x?C(>R$LsL>L=F_|+l! zy(1t?=$AHzeRpRJJN$ACdpU;rG3@WZvoy|;`uuo&9%J-4M)Qx3g{YNr4E9e;3q`j3 z<`g^9Txo0$-L=F{SS!ah^old0o)NVoYDLs(QLCcXM6HQh6Lm(^x~OMGJuB+0sI#Dc zT3UL{>~$V6r{{a|Jd%HpOiSMv^@*rYME!xNKM-|O)b~YwU(^po{h_Eo6!k+< ze+wTDrFFz6Hi7-D9=6zv45at76J{0Ch!u%RAUt31zAZWQy!oCBwW#n|Z zk3TNWwI zprvFJIrRK&?mijgC&o{h1DugE6p1qur_>LX`k%em>A7kzuIh6&d#=;-8b}Yl#cLov zx71@DF&WQ;nQMVOln%V&G7Z*2&oz2p1L;Wv>9K|yUM6Q-F9-Nxa-Ped<_-Dp_EHUG zKu%f~@lc&$6_bAtc!~ILE%v?!Hq6Ut9Niu@&840+lb$q_o-`Ab$QRHQOO$1{$3Fi| z*$3(*)j(!@D8AQNyePIBk7pwY>Q;C*F5ttu70+kiDEwYKFbcK6LVXM0s3W-JegJr> z_bQuITI8Mb&Mo!6)$MuBMDU_Bh2kqG{OVq5O9kous;ZJIh+5cRCiOM9w8kdcy~K~X za9N#Vot1%aQeS7ITeu>m7Bls0rU<91boaWNzzsE!oBR~@TV&|m7Up(bzk~XI9shuA z+;vM@=XCEe78-BkzFW92;Tuemm4nE`$+i-|S0z3R@&pUFKeIG#*A%7?b{0lv0<#D^(M5UYBhH4)}0loOU9#E0nyCHTz@CWe(Lt=?t75@WS+rm`U}#%yES4ZC6F zT2b1?fNw@@D;*cNBG-u0A#T>=F#o^WEViK z^xay26P5w?WU+#;2{QgL(u>BngcNP-p#=t$_eCk2W#*~fb=}9`dp2MPFOK;~IC^2N~_YYu@*5X!(ijK2ar*!g{b8LE36v z`aP&3CakFxuja#WBq;s!Q*Vy`Yk$w1qrcg@`T*AGe>&~{jMnI*e?Ibiv(f0RJJ5(= zC_T`OWHXLngdXWcFiWSu3z6)X5e(8J-H0~Yg$PFI1Dy!w=L0SA*CSb-0|`y4qp58h zqmH7WK_V64Q@gcB9ooEUi+z^g+fzM%*B#KPHVS^Fj!`YOqjz(zoX@X zCtZEg!$nswdbsTBWe-og`m~2QbdLhV_s%|mOiJl@3FV6i z4F+T8$aCR!@r;IYG(Chi_|TS*MvGzkfXr#E!!L19Kbdzz_glo1)`?7L>9-4E z@z8v};6_ysqbl#<{>k3u-Pt1wWlBz1Z)qOFZ}&{zcJ_k8Z!}D1hzGnAcRw;eM;>jSbgImElhgb~aphgClmwLEoi1#ibNxgGH|%VSS~6O6oQySgKRB-!rwy%|_{J z3Ikg`qFN0S4CkhDAvoiCW`wUsT)_elRct1TfkaO08_1NY-k%)oZlKhraPH0#Qnr;p zQVtY6Q{=dCN6N!;6y`3>QPt-fnF@0h^4D`LR{fOgo=T^-`lRblrf{d|x<#u%*D1Sh zIfWOeU2B@31ohXMam^W1M_p^qHRe)vv^DP<^C{fyxY>@cOAfMWT{bw#rts{ln_2aB zw&tp9XYBM)AHMLVnW!-_%_zZ4ARrYZK!&Yzh_E~N6m>nLQ zJdjyW{ANkGO=I>Kzn`-&E)!I_#QhfAv8gNw)-Fw@Dp)%+wkM+o_CLHa8;zl?jfiXX zLAA##KU7IfT``T>t2(rNm^x(bHI(p7L$@f_&`pnm=BpW;AJ&?iB?r7_d?pG~moqpM zLSNDho|<05W~&*T9~L~C!9C0w+{2u~J|1N%ghVP=$n|OR0 z%^=Am@fohjVNVxwjI@pXvy^JQ&_A#b*G zhtE^aUEZAy(om-AFs!%qyM*8FnY`_6kPftg zG|!>TFfG74arYzhbL3%1ewc13M>Dwfk$-yda2VEN~_56cXo<1Q@u1sZM{VGvQp+cp>;;oGon^Rt%y1;YE{&ls5Mb*qRxm~7xk>D zXGNVAbr#g8rNw3KKdw+kYOjo8E3dK2smZk4#S5Zd6!oI0YocDFh{a2yUKVv-)OAs> zhoKw5!txuN;k(!0HCDYcIDe~S=vf#!&Nr)MUgeX5r{6LjV`~W;f6#y8*8h9 zFbsd8$se0xwrPO|r?{!s5N;gSgAK@V^K2k3uYGV6&TAh-Hs_RXnm27_uwkGg2J(}Z zCEV_KE==Pwe&V^20hA2CH0N`}3PpC~_!2%qQ@T9>-A>S?O|Er1tGMlBs=Dj@SMI{II-*_!pI_ z{IKIAKVcq*$qe~b#``v+rvxq+5>HIWwFqf^bW_!`U2Ne3yZ>Z zg*iuzd5Ct;YbA1CwYki+>no&oR)x7B%ti5Q$ws67;5O@eY#XeI*b4SonTi$;j5V;$ z%Cz>_Y2{eHbQe3VDvsY~UAT{(Ru#c-v(_JAr&UGUz0Hadxc-=Ud>d@eTf?ox4>jlw zztdHhv8MjCRE{t_a$d%eREu0C;&=oV;ThwN*Bd@L7%UZNudt;NY#>%z6wJ2s%%-s* zXH{FSz-EHDRVe{Y7eke=BuuQ~VmPsyx?f3oHjyFLkvXuMlSvZ+;F`(iAZ2@>shmGiOM}2B8=`f~`KgRs)-A*veY~7g&IRcGc`# zmySVb^liw9o7Y@bYGe~FQ>(|VtjP_Rl7YGClY?3VZe>kwxF8G`=OEMSu&1ogOc49! zYA!p|kejsK&bj8Cl>~t)`0wom{HAxu{q6UVel3wN9{T(ZY}m0YQZWd2>ujqo-K1+g zaV_l7sq(B+rMBqX>pQXr4{ESaY{*xgYJ(49n1WM92kGnz{M7H({mp;jck6zsa_`FH z+Z)&4>$(4K#{Fm9v77v}@BMx)8m+kl^=P#24$MY4)G*SBuoZ#*Gi+M?W?ap=axR0h zq3T8|r(Eq+24h3TjnpRH>?Dss)Nn+k=&HpGdMpl#RLXE=ghcQhC|6vyGOD5FKxNvM zrZZ515I3I5#BQWK2eBj2{44Vri~=QKI-DG zZ?!d7StB0#sjkDQhVmfK2P#)x?P@Bgnz(Y3@}u2U6Q+f&Bz-oP3&$#St|LA4QcGAh z)dWc&s3Z_R5+}+zg^ZLqe)*hxY0NnrL73vGYVSbEALc~-X{`cZPkhb;IpsjUc(_T0 zFY;WNDsI({J~uz3s`&$uUra`!sg@n{sbcDj5T6l#S9z8Huw1E}qOalN{_02N@?SQn zPi%Wz-QsJ8^)mpktEG*G^`^MYkG>tg_#XLG{?nEa$_(oha%K~544RzX-(~9!C46|_ zA2s|K`-ogh(!LVrE=(+J5g|V02fQPve8W|5A5!0X71LfhI;2+l`CzNLPY!)yL18Ao zY@t$YY&6*_ReX^v?o|*f(IGUDvU@ee?*~>~cKWjW<3pV~r@)q0^l+PWb57bQ*m43*20uZ4X5ic-8P{ukfdwB>38^LBH?RX3jMpb8#+}Q$FR2rx+JWlqOwe zlI23W)uJmGnJzL|FS}})IYm{^OuLFKEU z>c(JT5zf2#e42;JRaac~`CoH|HJ|@=S6ol=8dQy+r?*V;g+i3!{gqkz2Iz@5v16k2xAIWXFHC>`x9Zr`x9ZnLxHjOQFs6Sp;|PC5w;$2 zMP%FHw&|@6#ox?GElIzf)Dmi4$cxkx_6SC%T9STusU?&M9;qc`8Vb=EpqB8P0w2%t z1C{3}_L(+N?W8LtsU=)DqwJsFtL8lUhPNlCG{pEn#_(bcJe3Do2x1$}hEq zX<=XqwMkn|Su?05j95*Wv^AtSQO*Yfc_1g0AGBoTEp4&L;Q-7wr<^}0KVzsd%YQK$OM5pPZ`$LKZZYw_J}58JDkovN zQaMsfST2YP%Nyoj<@H~d>X!eqfqbbJ>DLVFX8_)`mZq|&^`^MYkG|dB`BeUg)xV7r zs5Gc0w0D`DdJ=w@t*j*+7V^15!;i6#$fYFhD`APl#KIa4@gYCp9XVyHCF5ugY>b>M z#;sL;F4$`BlY^ft^00)zY@va@Wh*O{gDIn3NVOOzfS|7m1os0gE*mD)l7lbR5)OGU z)smNL$(OB`eEJIX&>D<{7-ca%g@LCZnwBybLG4L*0nPboF49>{xmB4{lr-Y_1^H>5 zEk?h~DGaIC=3H^^X~_b`WmjGPT~4Y97azMSHsLHV+jm9mwE>L@Ljlg3fQx+ux3YxN z0F@>WzYsxUYZANtW)S$vY6ZJ*7?XL_M$H2ys}BV{NOr}qA>4XXA1-DxyMv;L>{eL0-k1Y~>_#Ef3A zxYwCdbQ}QNzTYQ66>75GL=-U83$9vV#X!ZA#_d&#YQvQqsbW)WyV*7i#0oj<>St3O zq*P9~#w$f-IaZb@RNRwZLG{bYs{1>c+5*+JdY1~&tQN+N3taRz*Re3hxAG@CkvD8E z?VRqc`3+S>w&RMnXISe=t?n_|N{l2<>U$M4l@ zZdZEs?O8c#Z9%4G54n0SoYo>rSLt~*^V$3mZ}~6wyjtB$iwS&@{7e^pbfCPf7GDpk zoMHT`hcy5DsUPK;6^<_={*1uP){WkJ5@|7+WH6=Vy zDSmCmj~5E{YBlk`4-AVO;=|I1_^<>a{<-|aG};s|MKo2tLwG=Yw$A%@CtZVF9=h#!bqE;nqU3`rg?4Zsj$LsEO&Is4lcyFi`-eia4#?dVo-y&!Aw(#;b ziSH;bCe*ubR;Lx}_ZXK`?0r|euT;8?T4L>4m5u7^79JtYLaRH3gK|>0p2W! z9GHAu8{llXFWc64v1e)z?k!--oP3a}Fh|I#-{BsbBQ+~OEPpl;(PmkSsHC7$p0Rh@ zZaPR|Tr-H8a%jJ*Cs}h*RenQ}A2>Mb5!M;-J4ZcKe|`}2bzt>s331{Ga=WXZhSeYK zA6ECYEZP>oZQuJVgJRhs%+j{YiWyh{;=lqxIi@<9oN~gBg|D#7C@J$76$oy2(wOtn zt+Z7$uvZLNH_ST#krZQl-D1R-Qhxw;nq^mBPGiH5qAuS6;^$!Q^Z2T(%TIv#DOaBI z_yW`#wol@HJ;HgQ^n&{Pi|YGNOV%Kt`Mx{-CR|p8JkPXbTaPp&dU9D5RFvo8=QAG# z`>jXgC}=GjNBbGXm}^7o%>V}nNHmmrK3D{U=b~|}f=ryjMy(;*p0dBn)GQm8LM4KQ zrCp6U@2Q;QQgd-eyzk0=|H=C}r!7AXd~Mx8D zG6~*#Xw9?g&qyO963bx{q+yXme8^v+_XT}FFgj}`liK=+@ejif%TFj@i!OSYa6sEf z{=D{Q+8M^(opzSOh99JcJn9ACmuS1{lP)s2snq@=o;)aL3vNyL=sP+s!)qJTzrGN4_J%0 z;MS8GO-lX*J{oKDzANJdzV-6T6W4%$4;l>`F1kP!zESuZC^VXC>h~o=UAIF3zl%wF zk77WaCUFUdgdP8$zy7bhf6uFDuJn2j9&Gg7U)0>6)4iwo$L;?hZqs8W-yY4o1BLcz z!5x@rXC~apWIHnne-=_dZRB#Ukjr4#HRnbqPPzQ447TIIRGf4ZliyM z0h=oe@({w<`^+WG1FB{}@UXaF1Rus71{Zw(QRmNv*Y#aS!DHnDzkrd6gdbZKGLld5 zX@Ey1AIK+a5Ui*jJik;n8O^!_o`?L|1Rr7~lkjUAY;r=pxkc?x<$2Ofg2~)ZEaMDg zS?REEtpc(=WD;y+v+W_D6CPICKdX}vKa4-O=?aeysV}@*h+Hl@q_#Q~&e3Bb3&(h*MuRgYKc`X_>!r= z1HR`jUzaeo+=eS`(4i!U^|WHpcz|%8ABvJtBf#e(X36l`Xj5Y?kZ5X19+A-uTsDe< z$A?BUIuUK2U=fHv9>vFnKjHa7%ChCeU}lt@%jSICQ!aPPitqB1E;~s)@{lXKLeVnn z3S}3USzpZ0w40pv`J8dN8K2KNmz_)FYJTu?Ixgy@dCqoSrkm#B#CaE;-$aIyx6GP5 zzUK41?xJ<_GtY_3B*q^D&L{kMSr=2YHfah+t8ldO_$fHr_>>FoXd#t@V%c|%-GAMUtsAz-AgjYo!zNCPnxA@GWQe9IKx<0I%x-Kd(dpp45QUa3rO2= zSSKNV7{9cGakMMchDP0S0>fcx1Sx+A2P5_;2N8&(aSS&m=ySu;4%oP%9Z+Z{8b@&v zmPWu_AQ-~KctX5jc2;NySxsN#HhpQz8b{w}kdx6K_>d=rgK6;Zz4uZ(2&~68r*lMo zsU5u34hHmzpQCp0=_?p2@^E&sQ8NrYEyd$*YJ7Wr$|lJ$fI(;iZYr3DF`z|rZUSy9 zX<*qE;HIMS$wiM{0d6W5DD>S)823(UusYdyg+50y1O-FyRX|*E!1O|dAolj*An;p> zZ6V3+d~*n#ZZnx{dcYInW9z!9i@UnCamLXYG>OS*3XCll0d6n)aB`pU}w zv;+hc*;C8z#PZV;A^f}UPF(+8p&_R4PNAxRhO|?CgsG{Ki||&~0^*7TrWYavv9}Kg zf!|7OpGyVBjwqK^18}+*W|a}}g!uS$6rbj-!6nw2C_V#yIIS?cC7h1NKs5=rW+|Ym z&O`Ru&%%O8g0n6@n`*>3a+EKt6H>qNpQr%eqKSnue%UU2uGt<+7h*KA@;Yn-7x49y|mI0*Z5UNR>DM&U(S&E9zSocr%&C} z_mgmsCx5o5hLiHBDfQSGGd-={1si`hz?(PL?o{@cW^zn|!JjXded39pGf^mG#=~eY zAwFymA$}OY>Yv^rs15Y^T*PGrgB&t`20r8w%w=5MCBaA!7zNt zGXS%zXo9SdzQ{6b43FbGLu}(ze1kx!m#qXPkL)rwYZ@YgmYCYc$dKJ!VFj;1k%dBWYWQK!eOx5k?ls%r)`r5KDYri})Loe^b(KN&anNZVPiq{IW^L_ay(mq-{w41Id3V z%p+kQOM)Mo3Rn=LT}C}lFB2HRP(=}DK7>$T_-4luFdHB!M-hP036$eKccd2|0q|S_ z$JrRR9-@qpv0FgojzlH^X?zBYDNYmd7AcDyMYQrEakR;|qfG*77B?-2%5Dlv4lP?? z3*qC5JCazsF+5Vz15&U`es*#w#(LjQ5luK+|7`Mt^$+$IgK^FT^w)~6z`El;sWZLgz=OySNXXc9K*V{}n(=C?%?1Kw1YXYlCE=|q|GTkmHl zpNO^&f%}=>A9hI8&_py29@JJiDuf+4r}AAL+vovYE{~j|2itx& z8oCJdume6!AjH4R${5GW;az>!oe?F(hr^LFq>@>i*csQpiju*GpF_!zeH0=reprGq zcOgD3L72G^AJz)Ku^KqPh*g7?4XWiKRAwQf$;LidiF)GJA=EvTkTA`#_Lb(=Av7TL z#4wYJJ)TDPZYwBbX2)#>5#V}J=u?xzR!xpf^1WhB^bw}Ig(}$<1FI-=jiHtmh!w1z zYD5~w6ebs@5aL6jc{+g50T?xtrJu(pY63+XCO^c#sC+oOWc#T(Ka>;ZC&Y*HfzRRA z6qX#frl7v^*z@NcpseQl9L)2KJvcHJ!WhS$7aE|6+*g8V|zQ= zu`w-qkjIp6!+&PrguOO-J>$kQ?saBU`zJ@dF8uRIi<{O~uC46P$kzT@F*4f(z%Vp~gs37&iI{aN?26#*IPN44U^_@T)cNy#*;1Q1<$}RyDu0F9t zp&RfirStSv3~+I@RnknDLEU0VE+L;WHX?^o#K!%0`gG)6E@yBZ=8@c_hs!QkPT?F* z(DNP|)I>cu@8bCs#wq_?*YmHs+^Xka$EK3;?D84W@mkg>FUaB9Xn#Qt&kggY2wq6T z^U&#)EjkB0Dm<@U(d{z$0=QrX+6CnY*UUf<;buQBm4SX@(s*$WW36M9#&-*232zr( zSWedAvQ%-r9A)R)n=mKvytONEaBWYB7tHU1%VR>BfPH@I0nD`GWL-HYzvnT0S|Z8W zBhRXhw3dd!s#Sky%CG{5kyS7zR!?ugNk2&#H{=iT%4k@LY25wDR7UqmEBpXqTEpNM z<;V0>?OUFoz5xx!{84bb$rpyL^?h>a3ky1=W^5TUq5rT{>29y1AH=*GecQ$Xhx;w; zz#PvA-f)#0obd_Y#)}InT=8cZX72I!3ozh`gLvcP@1Y5z)n>f=1V_9L1UW>56ygK; z=_?ldRg0|{+&1$uxEe=LF@6Rdq=uPnN6km<^dzKkRM;v1l*^pbnu+0Q7f)|JOq0U9 zTAh@ua-M~*tnn9fW1RRb1hDo5e3k?JFn%;~n{eT!fu?3_9o#+Eerf7ZOzI4 zgL6(!okui3qm8JUX-=lg5vO9#$*Ha#!kUvQsO~m3CEJOFP0h$2=7j8F&c}Pf{=j7n zIh>3=59eYJb1JTBD*p8kY{F&B%EJM`hp~iD4=*VvpIr#DbHPfO6U{E< z=d2s#P%u9WlVDn@Ou*J{>1g#CYtFIzoP*SiJ34eKzM#?g zuh>+4LCk*z??e4UPsQI>F}@K_ngcWLcFHtB@G}}!ioKXZse-q^tt$M+^QYoB#dP5L zQ}LV1_<`q7#h&T8Q}J7p^y#l)QmRDTQaCXb?I>rwFdsA75ssb+p50uR@S16DOHb$MG)SrDyT#=A0fW#hE;)D+g{J00yC%; zDJ?RAaH=f34E9$|%?Y%EKRB2fck#GyU`Jhi)WdJP_-zlr)+>{Fn9n?Z z!eu7Brgz$9PJ5Usdw3f9wT~O{*8Pc4DFs>uFGuhN; zc!5Kz)`V9ZK#uLyQmy$6w!Co(gl0E@r($RLYR{`RK}o|a5{ALME_n#6DJ)nRS%pc} z8bwaE%P{UR{4kkerG#;1y8Y5ae*nJKxrw4KfkWgfQBM1~Yg z^V}{ewe`Ee--=Gxl+ML~%S+5v`MiEt_*=c8Zhn!gDYHIQF3S?J&fnTq4MEq~>TUf~ zy}{m4y`?^ZXX63ip@jIZtKVf1CCzZG<01s}LFT@T?|V2f*kt_O6Pz<1y39jAJ3Vrl zN8XV0*u}bm0z7D#x!%X$<0zR1xJKL`3QNg zFPZ=fpprMdm+TW$a=^7gk?mEZXC zn6TSv`M~!LVWfa9uQxT)A5g&07~Z?r@(QLAF)`zXe#jKUHoB81?sL#YHe7L zdtG+Fe;5VIU=NeSGP)c~WTSU1f{o1D$d1897JVVx;>G|G#>m}w=zox#gE?c@dPISA zR>1PY?yq@1m$&C|n|HXZp zC|G**AAK=?;wsnywkCkjn;!kQW^Zm2fOX%6CfpSE2mDd|)ae(=8s)1N5zIa# zag^bM5B1w!(yB4AjZ}!A!<0Qv;G zM6HTi5!G^45_L+{;;EW@WhOo~<6fyxDDEjy^P-+q+^pj2;}3q5ndmdB|E&D%)>zI) zFu_>!`R!xn+$c7xt0y7)j8$AM2J4w>nTgdaqjlhw^~TxJ2Jk9gvo+cT+$B%*9O1?) zs0UgXM_Yi`1z!bxK=0Cz*zZDud3|IlfthHen_#a7ue6LVkY}`mxCvgTPhV+iCU~f3 z#4tYYvz#7JncZZx>kfEnr#cQV0#g3&-}SB=^*oj$bJ$Ff{{wnkeq?vLAX*@2dCeEx=|2pI9veYy01DqDYDLVDUL{I@4YLrjNSz49`w|6NI+lWDkF+A( zvV@mLqs%;7n=<1G%-DDKn%tYG9*2`;l15JntUmdlZY5dKsTz=saJM&Az z9Wx=`T$aoeY(KCGG5-C)sV%jh-(JUeoH@No6J}ArQ~aGRt7K)CtbT^Jp8B+Yb;nwx zrq@aIvU;n|>y$cmUd+=vEBLJ7S;4b{=LF9QZU}A&ZVGM+o)zb zJHjsrUJ$$}cu{bdFH3g1e9N+B@HxTfgg1Ce@RIQ71)mS#Wx>nB8@wV|PqMaF1+R+d zg5V2+FA820ye9aP;LC#bBx`G3@Vf9<1nV)@)>XmRgx9<4okZ|;;jat6A^4`?n}Tl% zzAgB+;5&lv2)--$p5S|e?+f103u~PX1{OE?0B(1K4=EaK_?BKOd~qH;AHTJb-fbAk zjG(s(!?tR>UPE-CIOI$yt-$|9;-Y+Q&o~A*iu0CUL z)zs&Sx7UN}UBP-8$R7HwtZ{spSyvC#^w&?7Fi`!j(-3 z+r?sb4cctNM-R;;5yB?TFuKbcFF@*TXuW1(oAQGgYsd2m-;!=67=q)pWvi8^Z^R33 zCcNV?y`NIBN&8CEY9_DEx`U16n@#su>&Z78E{`wLQqOGIyV#dF4z|?Ko2$%WeVJdX zrO~9Zs2W%hPm6u5*%Z&5cX{~+Hf#}QQ-b}b*NUp?Tf?>AumhxbSAL&O)~@Q) zWodg{Hg287-@d2Iw>1%39xSa;{%%e#us%A5OUhBeYH-PU5M$Hw;&VETbF*GR;;XeX zF67?&Znc4{czNgf?llQ}RHZEuZDzIBmLaq)L+D;>5|)3L2$ik!u0&)dB1aK3d3DnQ zKWSxBRJ;HDw5U^}Y8a@T5w)VY)1vBW@OoWwXGNV8wIS-f;@U%F16iMG2h^70&MR(H zapy!mE6FpW)>0=p%7e#cQ_EJK}1W zJk4{28>{R=EzZHQ_1tt$)f;K{fbBxUM|hVKJVs6_L<8o5By6n6 z64oRS!;vQ)%{1bLS46fVR$O?KvtbrKdp!6{6lCdG3Vu?QDFk|!4i{Zb# zHHozQv~zQ8+|LRm`U`)-SkiTfJHf?LOk{E7*1Fh-{pM-6ItF1P}4f2d{WetqMj5rFX}1gqFfNQAnJsu z6QWLv8jBi>dRo*Xsk6mT+I&a=9+Lbs$3n4QlP>Cd*%(XN=i-QCp(6MQw|! zM|Nkm5UwwXx+vUmPO)ZHU7!GsHa5b`rlOwqN?#vPKY`ws+QxGSX4Fs$s(z6T6(QUoe=u`in=`)ws1*ZFC)7uPN58Hjo>PuE%vg83RrmcsI_hQ-`Wv6amA47o} z*Cg)}6I@&oRo40Tf~a~)eMY8=#hR#Pu2S1YQDeoWd1ccYs#;12V-H0<+J)H%90vx7 zbdBY^0DJP;XzVOXFKM<$u@-F@A2;OOdWeD}s`Bf*j%lr3IFt! zf^N#P+tVzX{TikejltC~#M_m0#fW#Vh4>H?N;CP^CqsV256Tba7>~tzK0GML_(L;M zC}&uHLY@#F#y?EH#kI1`>J`sn@R?{6qg6H9dh ziy;1CBEIipp1t;{(R?(HQ8aw>$lgV=cUitPIa%hRk>|TIO}$W3jrC?pk#CmN%F0!R z+b#8)Fm+<;bA+o+a?ZB7-BOz;zNwc{>Ssl*sl3yaUny(DW{R7f%~&Z;=p~yxF|{1y z4l9@8!}n>dmO_ld#yMD@A=P}L?INL2LiHWyw(<`1S=eT%|iRYMjj*91~c#ewaE%Cf1o+IKpBA)S>9?|1cC&oFh*2ZO}9_N%( z=cdS4Nj;`?Pbl4YlnvfI;WY&P4)EK zackqXri<{!;r`$0QB6ci4Or;OwB3_wyT{(Q(9^il)40*2InmxBZT4hJ7RJYYmeb>9 z*zL)*ol0Y(UCH15E7SI_6lL1(ab#%pI6d!9*K%b%KRZ8Gy4}ArZSTt4XEJx^Uxw+P zOxr2{v*l{3HoCi{v80xwm2~NINeE>QOXc}I@NviMxAyIjr7z30jqw8hnW^U@S3FY8WuJICKnlg+)^WLNC!k*=lIICYRVAKF@K3+@Q+2wo7pD0oqDS8!MG zIl)VUmjs^|d|vRf;1$6uf>#CW0kNeEf-eexQScfEprti+;7fup3BD}&vfy>W>j8X4 z@D<^&3cf1%n&4}KgZ-|h>%w0b-ryU8ZwP-=@J+$D1m6;TTk!1wz9aaK@OK5@6?{+d zJ;C<{-xs_gcq4!x2!0^^L%|OT*B{YvGW&>ALjAGe$Aa-fF$q1*6+O)r8si&+4R7Pe z=i=e30W{Fq01?9B7XKg|s&fX{e_?VOmd46GSo$wg6Lt@b`Pi86&9L8)$KcRQ$9!^3 zS_s>-fcA8tdHYNxyrnRNO`2hJ_y?ECP=&E8HPTxa1~9Yo_L)g&8!*ot!_*VDNW0*| z;95eJ$FABi*yR6w)1rZ~enoj(SLrTs`BuL`Ol?(0$Yt@I6VIY}7Q|yl&Zc1#J3KW~&ghiO3Bkt&9}|33@LPguAAVXI zHaFYS(pE{{en$<{CLzPvv}Di7&aP7DoLiLzdKDAGN5_oG$eQJLqZB(Huw1843eP2D zvTJJ?N|>@W8@sv1Tq%6qXE{Bdc`?_oR2r?FIN(kfCJsHk1bHFiTb=%Q`;8!AgzaxH zxNms+i=ejNgipFH68-Pin{X7j6{i2)dK3Qcw%qZ*^tsZTsIZXHUQl*imUa5_K<#Ux z*54bm)aR_W*r!)sx4(60sgE)KHBPpDPI@N7;Dx^4D3v&ajoL)CP9M58+)VI%>{p-K zoA8>qr2X&Kn{eaz0TvoXc@uv5mT~)S0foA>4BBr8sAnSXf%=MN?IAuzSta{lHIA^1 z$m*e;8u!Ig8Jqgp{&$P@)p*1udgH!+@2CmQUf^1Pc3HpOtv6@Us;XSr*3am-xbV5TkK1qs`XdH$>g5y++&-Cs* zsf*X&@nWvY!=F9nnd#T$;i+N7HhIV+u2R9hs=&1RT1{e!k5m2+T=S8uKVbSulNa19 z;C%viP&r#k5q=g&mn`t?;@cCq3cl}lmhI1+{h6{q+9eq_{_XZLj?*y zvV%_$&l94iJ9Lis^wSfr*?oN1xno&>((IS~Nwf5* z8SWlEw!Qv`c7UT4WlEo&BOApzv2rwu6GJ6j-&u0^^m66MM8p?Ki%|w|%Er-0hj8+2 zF9L7>#MPgg#0u-U>9T~AVmzwe;3>6QTLx8mT$b9Do+-CE?b$C-;^j@JyLqFnH%jhs zIZr~VV1X$G$`+_8P`ALm0&NRO7$i%;oG524PzeRZ3QQO!s{pHI>%&4c%GY1Jbo0<*;?g$}d66=&ggHv};->66U?=rg06IXfa+#l~D9hprs zv;Le^E#a{)-8YKMMs@Cw_l@E@QOetWrfKwr&N|uYq}{*k9XHxaLODF=HJglb%;H_B zY2JLgcCN~Jm}if-vs9s+Ov9h{veQQXcfI9C{pqlfpE7r!)v}XN&z=#pT$wb3_Y=$V zX|cjQzW_dR)d_qujDMdt?A()m+%r+;O!}d>N|O=aYqplLAJ_)0!8MfdaY(fR%LcV@ zm11Xs1~DOjC_g+qWb(t)NA{XexF=i8a#c8)<1T8t8+(#)DNkc;e2V9QOQ!@E1WyQ_ z6g(+7CR{$v39G0**-DXvb#aQ4D^r3?g3E%-g3k~xRVbk{EqGe6H1bkSa839b!n1Ww zw=?x|On9?r1)mi>D|lA$oZvaZ4Z#h;O~FmVjd{-G^?AiEqTn^**92b@d|B{i!8-F$Ul)8u_^X1i3cg0zlyzGHHm@_?nd@8)Hg5>NDfp(~ zTY_&3zAgBU;5&lv3ce@!p5Xh08#wiYOgA@(YHd*0>1@zEWw7BJ8=5{p505u>S{t|i z5%#A+IP60q{EL&*w4dkL->hfG>WAeb`<}h^Tb>p?qy9O^o)gatw&$I@>Z|s2^D6sc zc}@Lxop31`2Y-V%U#htehnt>7CnURlu~#;$t)IT1u@v4Nn+Aw)hH%h zHiod}&@gcVwInVjW5{zc;qJNJ5;}-6i^Z8lUMvYt*zB^Al#&<{yuF0ZRrVf9IU#J) zzS6YH$!kS-u#|kW?EY$;e6!^8_`a1Z+>R=(t8|x84+kq3h$*i!SMf5xW96K97R9q5 z9vvPjH^nn2p1OEu#8b7AS8~eYnG%ouX-X5~DTqhjIpwT)bPUP1%FQdF_>Oqqk(`Wp zGLmybX`PUq6XJPWJa3EVxOk3>=eT%|iANi6<)h*`DxSB*^Oktt63-FIIU=5Ms-yXF zJ`WV{2WI|1X;$ zM5!BPUIDLshXL8YN@tC&B1)>y#|lgsC943R0>n!Q>AP=wh)pdad^K<)GQ1vWQ{{xU zX&xHZW_KRchqE`43CZa0${%+dQF7W8H6C1+N++$*h&ae1hvZb2`F+MTLrE{b|l zRJ|8kxWwD!s+Sb^vZ%KB($ctaMbxXJUKRD4;$CC=_6o%8^`|A&#q49&NcFMyj(c3U zoayP%$$Mm-{l2JAM13Oa6H$L4>ZYjgi~7E(ABg%xQMqh!)elAek*Gfs_18efxf>p5 zdHPEA9y3|FDf)G0wP=~N07G>Mbdexe!Wl@Ww#-ip`{PeO3QFSK7yeG60 z`t3ul=%ZhOJ~^-BF6P*5p4zrMt>5(M%K*&xD`)uFCR2m?D35}8GoqIECB5EWqB@x` z^KI3N42Z=uqEI|-yM;2z5>Hb+= zVQo*Z@DM<0HAZ8aTqWzw1yL`GdQsFhQ7?(AQxet7qOOa&F6tFguPW|UQLl-5P1J-GfzbQfvB6JzAx(gqJALi2crH^ z)DK1dP}CoZ`fH#*E$Lv$(^u?1{OS*t$xUVQi8A>}MbM*9)tjPT4~k&LU!gp^*kO7> z)RyATDXwnHu&W`ai=xJ&@)*!>AL^hPVHwtrcyJ_aOtu%N-}K*TEqR}2exXB zBYs+2g&O>2;q6UyTm71RgTE~N&@&9?>{*I7IjX6%3@)+_-$>*z$jf?Q?A^-ltnNCA zt#XaPRiD{{ZQYA?CT`Qgy%)girXOqp(@D1j5n3E`$=FTo5)32Is%uAb?V1R?D8m-4 zOUdTaXZ+gt)-u=g%ZFFjYwW=poQE)%PICt}r_FM75c5kVIw*s}L3C2{pb2(ww_)Mo zRN;?#aBK^iZ1p(kcr&=299o%&Z#?rFoZr5@zAdWkZ~5b*9vAhPsK-Q= ztov*4rjydTg33@-l z9#7cqpDxqOzWvtC(|q@@I!P~-!;x~gA13qW)0HVG_0i|AU!CD_X7^21&kCNU zyGT{1lj{w^P2$ZVyrqj7ZOgNz%NQHl^0dns8`|=0=`zNKwmDn6jIq(>mS?L==d{K- z!kr~<@idp@7I$9odBMwqR|KyJUKPA5_=4bzf-e$YSfeSkr7IQ}E(yNGR=;pru&!HN zSQo787E@T4x-DE0Ue_%yTorsxajyvuW*FPr?C9#n6uv=Yt8H`I@z$ocIXk+Bv3ZOA zxT9+ro7(bBVQqPKbR}a`Tb>JdnN~w*bnExHrCPhs@u_}a@P^=x0Dd6&f$$FnKNKv7 z@Y*B6atN)@{xx!t=1X@RV9edk z&dXNb;h<7~M=d79W>wCJ=L9iT9d@gn5YOAe-csI52Q z2xg}^{qNSB@Yb_qnf`a{O*osy5uaP|zuf-R+X+w@+48G>out%52lfoaAZE5N7nnX> zVCwy?L$iH+CS00{0QcK1g2A;u3t5pkgN<57G~6RlcCS(Y`Z=WbCY%<%FD_>c_)F6x zH$?5>b=&|Ke9antPFD82N5nl)U$Lw`#HT3lg3LKKb+!)6h^*qk=y$^crDe2_>VM4< z`4K;7{l0$Tu1rVd3u?5>`h~kP-4Cm5G1W8rg}XBDgs)_H5Vyi3ySOY*JI%$s>?3*E zM|4F;K2Q4y-j?9Yb>?2|omi=oB4s=o2KQolEK>nNiAp%0P}cTxF_yeo^7srb934K7 zytsT1C3MZ(RBn~#C%F4n?nbtMi6e}5UZM&|=3Nx{tys5jqMPrc;K3W)ZpDGeJt(V4 z3Y72SL5lJ+H})}3d>8NB6y{bjyWlwIcguW`Vkh7qq$s<;{hkds^i|c zN>+g=lXpLE$EY@XN1s=b%zrmdM&UV}N$}A1ftT>hdiXb?4dfnYa_%P&qXD|lA$oZvaZ4Z#h;O~FmVm3b-xrTKBB zUTFz#32qB+3+@Q+2wo7pAb3&mqF`+?mAf*)8hlQ$oEFOlFL5iWyd?a2!RG^bS@5#( z2CoQS5q_0$X?2YG)FyA~g5Zn7uL)igd`a+S!IuTE3)cQ##T+fK3V&62?d*jPp_S{z zm#-_`8-i~N)+Sr|mf+jM-xhpF@EyT-1>X~VPw;)g8?FQ&Y33fP#fB?y5KGm1!_92a zg&O$!21v5)V1s7^B*y2~%5MJB2HV6lazg%4PAI=j`CPmqY2bgR9Hd*{kYx#4lHSAO zz94!e`o0D>!4z>iXyQ2p{)36STF<=6k<32SaLN{3PE;XzG@_+4Kn=VE!D;|s^9 zT;`O26LivLCQ~?9bcLdC5qv$ELm^wlv@1+|Jl}p!@!2_-pW{G=nE(&^n5R1UvD1|A zczoBz@>-{y^Dcj$c+LT<=}s(L#G1>kabf^za@|GioGMVREFVqh(i!qAN$TH@Zc<7R z)KIk>#sib7&$;jx7mcaTWdj#WTw4u+v4BX;U1)rshdnyLhj|zVBX2wD4ugySAyJIi zc%9SojN%W&<9)qsGLA|>RfPPRgb!Ws{@s3KKd6r$X569O5e;=!64&*6Y3ucj`;NWV zo#_g-V5qYS%;>jjD7_h;nG~w9HI{Kt-^`4&UFFBQCzTx^VsRji;;Ef}=85{jZtG(xPPvdlMQ?nTfFiZt*dUR)TT$N~fMzsbY5 zoB>@Qo37DJqz}wV0DQ~ICXb$cDnK42dH9x-qT^=LvVJ^`6;zvLJukO;GsVUU%>$VP z4FLV%CH%4;{`GGIxyP8hev<5GRTJ`rtC#)2Vch+|`;i&)yj(#QU#_5DuArX35)0NJ zUrgVBxq=#8BY&|PeYt{qxq|vKR!~FNM!Qy9L%IGqe86Xv9NPKqZlOkO;v#B)lRf_NsxGa<~RcqYXY3lodyw0KSnQxs28 zJX69u&9 z6VIG@WEP%ih$k=(Pt1#FUOX*HZi%O@v^v6c#IqnCo=SHUi{e=nPgj_(c+QFEoG?q` zSrX5AVa^j%Sf=~VnU!&#V^|@+x=KsTnN?vf5L37yo{Pd<6wjJ?)`a2dc~`h3p3A~q z7SFnPt_X8QJXghYRhVnyxh9@O7~MutxGtXS!rTzg4e{I*=9c8#63=a6Zj0xRcgn1~QhvIo8%p>tU7SCg0dgAGc=RING6VLa>^L=5S zi06rTejv=Ics9lJzA*2L=L7M4Aj}WN^F#4`D9nfA`H^^jB+Rb?^R%S5Rp6gOPvLx@ zrkj)f_#_M*eP}FO51&i^gElVghZ8mW=f_WqZZ#j#o69=u*PuCoD`2b>ttR$r^KVqI$03Ugm~0hCnv=-DIRs!$yhw6#iPzTSrkuEJnF2I zQ{pL!N1b)DES@vsQD>d3h(|Za7u8uOr^Qnhk2>pQO*}QpQD>c;5l>w_>a3Gz#WO1& z?c_|(iDync>a3Fu@ifJwb;#trc;>~U&N|r=k9Km3>a3F;@hpf(opo|iJle@Asa3GX;#pE!>a3IJiODY0$XHt8{?FtJG1IH#IyfWD1@T-E&qZM_if2tcYr3X z@!S#59bxW@=dO6}33E?8_r-Hxm<{o4i06SY55@CPJdcEVB%a6Oc`Qs%JU#KeC(L`| z`M!9*FU%A1JQ2?igxM6&rg+{L=6&&eAf69|`Js4zD4q|6`A|GR63>r>`88mkmh={k zo9vI_Q(2ci)rWE4W&7Bi#q}5cm|t>l@*lL*>*`AAtR=Tvz`;QDd9!=kX$Dw7AEH6L z6K%djQ|Kn(2=+$UI^T(6piV}c7#Tc)M*Aollhu^Q-jk8W4ek3HPd?(MA15I~(YS$Z z33&n|oQ%fs>(59~dyu*DX~|@VM}Q1AyhSsN!G;fy^cehnImTm;x)_{|SQ>-v7?Q!c z2*%zNZ>M+$@gYws+2q=i7uaBj0rp{TQt$&+6TNjJf?@3L8r#A&hbObHTI5=yd;1`Q z+l`6bHi1eG)?HFf4%Qq8bvyoR*KgRx5+-Oi(Gw^MZ#gv2CZ7!V5mR3$-6FdO=fDfm z=6^3={H=#!VeLcs+ttTVKe2=R*t1Mh4kIduw*5Hl@QoeMGNHD|?@jVjJ0or?`M5mA z;yJe-=5ZwLMJ)PWE^-P@vTT3a`jbTnEy1MuhAXqU?Q>2vE+F&t!?ELT}NW=YNk#U*MV@v0=RN%A@+6s5Jr zH-x_}{5?s2Ajv&`?6@b3a!;1^;c%w+%^3GF^}d;LfAuB&vL1eM+dz(O_-~@+7r4#O z&V`=xqOhDg%uVy-Wd+!;o+C8mc`m${&@jTVoIaO_JFo?}iS1P@F-8&aM-hh;kcQzy zo&lKqxjDB9^(7N=K*IP0lVLXEK*d4&^T1SzGVV7{*+geE(|%x^t8CiX54<0lA-3$9&k|pq6|76~stv(S;dMsNUhXn~w^~~V zAhb%Vbp*@bt+pUoE2G+?;4W7{wXWcEgzHN>PO(G{s(xPZdBMwqR|KyJmKmeID)@r% z7X@DwyyoIH&Qs8`Ce~bSjpu1lhxJP?zU1+jTS|X#|5X=X^>VJc+BKi#lm8$|1gN{kn^G3z6T{u8Fw_JS7<8Qg@Ezf`3#kW&@ z^|mYArWu0YBET2!xau9xf5*jlyqvqPdN;+#cU}E1PcpGw_gw8>TCUPPm%T@I9%^^y zzKicOF2{oVu5^D4NcQIq7jL9^_@rewQvP@YBxxOp{=j7)csUPT{J`@+blHcV|Dnq~ z^!$%p_L1j*5#u>E8p;W4I!yNk<$QTHVYQ{{lzK3W;XN|(t$|OMP{e;Z zbq`-NJATRJyk8sA4Pp4E84qeUpZKGjm}xy8am}$V{LLlQW5VB%YH&z3*qq>=|C>vo zJH&-V_REC!%Uq)B8o=14vy%ypCw4)szlN6W-;N{NAUKh*H{}z}i-Jx5mzY+ZyjE}r zk?!!cP>QFon92~|hLV4W*^1v`rYADYXfC65(g_tq_ekVVi05tbye*#N;yErJ-6oMg zCZ1#BIVzr`;(1Fvx>F+mmUxbc=ZJXZESHHkF^Jm2_-Db8`AOSubedY#HqRJFx$t9M(Kl7hCAl*e$~Lv5eC&x>kid%xE8*rd8TOQU8m@`_@Ar z;M&u}A3dCKhkU>Y`$KKLKHSaB7H}sH_Gn2W%qT@`Kt!wd5$V_P7T3*M*(SH2$GP(6~4Yg ztDBvARdB52Uc(e8B&f8h0#-^CXKAL12unD~>DD1(p>DkTOsk(@DoTUpsV@2sNzRF*Lv(jO{QIA#nr%Eu0Cck58Ck19=>c;*-?C^1s1Q`pxN zX#-USscGp{VBE2cs(%fvtPy^+usXI5;jC)0j}M20Sm|i;!tl#@c;AQK)i^E4tUfie8Az z+6rgb`4EKORVZ#9n#j0(hJ#P+UIQx^PRCsS7<(&%6S`0&pVu@rPIGZKPpfw(PkUbu z?+F2w$9Y_^SNdEKmHQ~pLZ%NoS637nD|W2dv0}%H4deXtV&`shq&--HnHX}@llERo z;K|xu6inl0ALe^syC`sgw*izVYll-Z%g7XrnRE7M%Kp%A`ftBygLHg@gLm;3HP+Id z7+<4|hj-9jGEZFmL_Wlx3x)N98--^y zkCWyaJS_Kid-H81)~3lKgY&UCgL|aCdBnNn?akxP9mRpzqs|>^LsrUbWMmYs`iC?5 z3=YC(aP}2}>{KR;0K_v;QvhdQ8JJf9$6Xm{hk-c-aQ2myiUO&CSOJ`UB_*o>kNZA- z<481m1m|2Mo^$;LhTm2Gb1KV8!KVZl1WyW%1s4UE1eXO@1WyaD37!#rR`8tQhTwU@ zEx{eZ3xd0X&j~&+ct!B4;ERIS1YZ`sF8He8M6k{oA9)E6)WhLq^sqmN{fh{{{HAtx zd}uwqkJ0e&#K)t|aW`@_${ckgZ$+862yY{Ry9~D1F~*;WHc#ySHNW>0Q4G8-G{Rr= zX15(YTP>SiGxshRG7+A$#CV*IF&vw_T69vFlf)EsMXH?#&YsdVTfpSyj!ux8ofJj~ z<#5v;`A>8CVdsH!MaiF%v?<9i2~!rPEdDd%*LmRVw4_Z-epT{o!qkMBA?9d(dmVo= z^HvjG)xS4$Z6)HelPPkdqwiDQeKqM@*UmK?`>JZ?<#lqC?T`) zNgGT@HsT|gzK=kuz|@saqDK*89`?ba1z_eB(>_w%goq>4{LRcMPaXaqJ-^9vt?_sF z(K8(ylXqp5(86yk{K56V85+W0J8BpH+7mP3uN@UUnv65`A-{){@x#vT{@s3KKd6r$ z9(IRzM>Nz`NnF=2PSPEA-#NUbKv%ywNk`OK1!nY%lXOI#R$x-U1w%y&*zY@r$_RDB zehqc}|7-7je%na0JKnqS0t>-_Jqu%#Sqv#!!*IGSkxjQK$(CtJltf9ie$gW3AF^fH zQcD)CpB5<({bQD(Jd;7N0p<{3GFT+YA%|RYSmd%natLw=Ha~zp=U>P%K!80a?|q82 z$)TiZyqozESP))Uee26&b#?cvSFc_*$r#yXpiZC*MppkIY@O+}gVGPS9kk_q?WCOI zH->of?Vp}cp&7R2b1p0vc;y03SSIn^xc*)FFgBaIap6J55;X-R?- zwSx6TgZe~x>f-$lr@Lu?59iWL`V#5Oq_2=pk{%#EL^?%!g!CxsG1B9tGo&X;Pm!J> zJxlsJ={eGQ((|NmlDxG-zU9H+9%D{MCWa~r60n6P#!?Db@RKJetS*L zwL7vOo{Bd7A|CaUIxY3o$hhDoFKGHDrp8;N>#foCO&eWDno~^%+L5fcM%Vvl&Z*J$ z=Rb5jwTv9k7HOhtV%@g7vAT7I!AqzW9!n_V^uXx>>4nn^rw^nL&LudPKrX}Shtm&o z1L2fD%y=9B)?!9gI$~C&J_~iw4NB1s(+)*TY2hLrPyKolaEP~vFa}UlE z$PygFFMA(=Jb<$dXBlJ#&IV5Tp#J4Cg7x zQ#jAyJOgVR9(dDn%C4!Ds@GV+a;R(FqW))#S^ z^~)6f#}~YyG}ZQWq8Ral(%^`v%{H>r)9JKP9d5TR4vD^QUGy-j!%ZmC*#igF;r7Dm zg@fvF``}!HgX(ZE!|8{E>Ts{XxdI2(;U?i+g@fvF2jC3AL3Ox;aE9QZI@}bTVK}G` zcLdG|98`xp3MUN*)!~l88H0oBaL3_Hz(IAm893MApgP=1IFoQt9qtsIX*j43cLvT3 z98`xp3nvQ))!|-;GY1FN;pX7v;GjC(Je+wrs1ElAoEvaZ9qvs<>|3^6$HZ+7c64tm za%sWVogxb$ci`NCa~I?;oJBZ`Aot+hgR=y(1m`}S2OtmNEW=@gkGleA1rF~pa(y_f zaMS4(A2P3pgLa`3U5v zim-#naw|be8wJu;Np{I~tR(e1>i(Xuzf`tA9QVaKx2Wz$tzefIl%_T+5Zlvc8yS^( zhA6~{R~Bs&^>mTUmd{CfG^Lq~Dcx@5ia$orJ*Bf1FQsnFdV#t;-IVss#Z*wJ9&T1Q zrMTfFQtVZdD)<wB9`g1l0p)%m28`eTXKTQn5PS#vR0bKou%*0db2GyvSRutx8gRQGV^Az<1#1R z8*{l+hvB}MYQUb0YC>6g)v<~fFR)_F-PWdqm zvgm^1or|h%okqvfDvqUxIGGBhH%V`kCI-|gl4jS++jP98AHqePPvGCh^xJFNdQF@A zL?)bnA#WLG&576P)mQOe>QY~i3<~ukkD9S1|jARgcyj|E%Mg z-@oijD;{SZZ(yAICx|)D=;~k3HR{(88SC;C$TY~bBDJMH=f+E20kId$I$|y%@2l)w zR+pWw2T9r@1``vi2EzBj`iNde>RDo%?N$6?E>2tp32U-f?bl(s`t;_$ibjGmexMKZUN6 z!9n84il0JwW@=Ja{1l4Aa*Z@ll#G$G;-{=mpbJJ;WzhMtS#dI>x$*lnAjyWbjOlv! zG$6lCsj2O=T7<5N$L;o$-7>Ob6`8a#ZyIr9UB!IN4lJ#xkH^~Ao7eHRiRM$aTer4m z9rL((n&g2PIHBf(uK+cN{Qj1~ylRLz6)sCnn!D|H199!Wig7v^Sv})PSaF55^_nzq zYHfv@+x6|K>twAzA?pP_QAX~Yo>(JeUf8r`pezs@mg5-%nRnXuQP52|gT!r$lJw-D z*1ZHQs=;3oO`bG?n>8&e?@Bm=;OJ7!C+Ffa8BoQ~UCzVzWlZmO;WY7%#++Nwok?>T zGzafzcOC1G^R*{xO@|t9oq5S4orLsA5TRF)|VdshJrv5(lZ7Y-47UjKo1|$q1QR1xYdz2dO0q zGM>oK&jx&LO^f{Obl5i`p#Fgbgr0W%c#Ax;pnBG^!u3xyW(rctFXGXwD6^|5vjMq6 zR%B4!YVCtb=^keYBn6UEBsvU#gt32A$NuoBMs2jGwbUL183P$tq+Q~MGN1bEg+re} zxnkCrp1_23bGT2hx;%ko2FZvAMKSKLumr_uW`+`ZoHdhe%uJGzpcpL~X{;bgMuK9r zBtb?OqCP(r@U=B9@-w;6!~+H75U`Rh1o_C(1&M|#<=%W%e?h+M7vZ;0pgf*(9n4eu z|MCeukn=kE4UN>CJBu#yZ~)=w(QpNP)?W=gBO$A0mj zoo)AI2q?GrATJ@WAP11c$TV^SIf&LQVjzIUtqp2$1Md&p(vDsmmUf!s#!A@`AG z~bW?m6ral`5K)wSSA6*9!yzFH1ZpFJ zbSbk4zeyfhU_vnn&_)9-Nq_c=v3a8RA7jNXXX&M^^C$Qa^4&FF!zX|FMfxwH$tN{7H*?_Gds7{Vm0+Nx932tuFxAn9|o*< z1Iu>cep|o_2JVTh{vcqz6S%=i=aJ$HQz%1b94W3ag|3phf)rPnLLM0-#TBMd9LP1& zKv6PAiYrW6oj@0itOf(t=QqqG*l3pz{Nx9!;#8rTw9!nBxKWH9zT6)*C3)UY>a*$V zT+3Lc=2IQsnA}4b0^XRM@P!VK%hx0iL@9-u3%&x>?8T~{iCOQM7>v5Cp6RsSu|3r^ zby+=Q%YK5!%>(BCtI#D)(p>M~4MgupDyr4$vU(;WEvYbHt4Xs#p%n@=HR9V-*U4Ic zLe>j#Tlhg7HAqN&M1Y08Q$cM6`#ybQzB%r)!df9p!=&!m@)9P-LT@@lXas8-y9Tdz*zd#CHC@q4YO zu`FJ;*C(+qC&8P}=zzyFUIG>*q5S`N`$#?sdzWk^d8Aetkb%v2yaEoMmO@|3sNzh4Q}qqFi-%!m{%6 z|8-`XzwM9)$S>XHrD@VGDSX|J(Rx4rsHq>#ZB_5Z{6EEiE{6S(?tee#AdYF>@7{E% z{?}Rgh(5)~9poeGZf-hM|5HK}Qncum0E8HaS0&%a5k##^%SrAP9a*_pQ4nb&2*w?nC^bS{^g8J(LAxE)yt+2TolH>lizq%J%+1Y)%S9rKy3Y~9j zvsav*?UhYYJcX49n_VHvuRJMiNXm;}jK5g}W@bZjE}`kv?a*90J3l;?$xVdv6Pa9S zEHjl3-OS`CX6N&vY939ZzeLs znS6Tm&6+kQJy8rrqz|@b=vdw_?d*L}3~d&QrT)-*skGbgx*Pl3#gg>X+Wy1U*vih9 i+m>J5+bV`0Z2S5#zn~pkJet0}Q(7&?)=OLZVEzxS2a&G; literal 0 HcmV?d00001 diff --git a/2020/otterness/entertainer.mid b/2020/otterness/entertainer.mid new file mode 100644 index 0000000000000000000000000000000000000000..9eafe2dade8cd961596d9b874699510bf92a1614 GIT binary patch literal 15273 zcmeHN?^0aHmH%NWvd7q^if>XC*LrHC1Swnr5@rTk1I=(@7!3?FOpibVV~Skt)pe5E zEwknF2UqQf6v_)^-(>dw0+yC8j z0JkuK8~DH8{@4G)zbszfxV`_o>`v>eZ?dny`TX}^WnYu@!QMZge)G+p&gsAX>+iq9 z%fp*D-}%LRcsY89TV4)sy#K!s@$wP;8I^y+%exc6e*^#d?jP{}CjRufyY)FHzHqZ& zp!D2TpQCi*swXHNyVGNoQddn;I&!B+C~do2+nDIM*$zrwSM8#-<*HjKwcKe7rM9cK zQEIx=CT@S~CO!og-0T8MHCL^nH1DeOD9yRkIg}o`>LXcKxt?{^S(Ikn&u4IU)J)M% z(Mi!yPy0XRRmE%0AFVdAN$+YNZDZ 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 B{9yn9 literal 0 HcmV?d00001 diff --git a/bugs.md b/bugs.md index 5a514313f..752371093 100644 --- a/bugs.md +++ b/bugs.md @@ -3617,6 +3617,32 @@ exactly 16 bits per sample, but it allows any sample rate and any number of audio channels. +## 2020 otterness + +### STATUS: INABIAF - please **DO NOT** fix +### Source code: [2020/otterness/prog.c](2020/otterness/prog.c) +### Information: [2020/otterness/README.md](2020/otterness/README.md) + +The author listed the following limitations: + +1. The program does not support MIDI files over 4 MB (specifically, it will +not take input files larger than `2^22 - 1` bytes). This is unlikely to be a +big limitation in practice, since even lengthy MIDIs are rarely over a +couple hundred KB. + +2. Not all MIDIs set (or *correctly* set) their timing information, which will +lead to the tempo of the drum beat not matching the track. This will be +especially true for "live performance" .mid files. + +3. There may be some types of MIDI messages that the program is unable to +correctly parse, but I have rarely seen this in practice. The largest +cause of program failures, in my experience, has been Limitation 2. + +See also the [Program error +codes](/2020/otterness/README.md#program-error-codes) written by the author +which lists some other conditions which should be considered features, not bugs. + + # 2021 There was no IOCCC in 2021. @@ -3632,25 +3658,6 @@ There was no IOCCC in 2022. There was no IOCCC in 2023. -# Final words - -We hope this document was of use to you in determining which entries are known -to have a problem, what entries are known to have features that are not bugs and -so on. We also thank you for going through this document and, if you propose any -fixes via a [GitHub pull -request](https://github.com/ioccc-src/temp-test-ioccc/pulls) or otherwise, we -thank you as well for the help! We will happily add you to the -[thanks](/thanks-for-help.md) file. - -There was no IOCCC in these years. - -# 2023 - -Probably there will be no IOCCC in 2023 but we do hope to at least run the -IOCCCMOCK contest this year. This depends entirely on the work in this repo -and the [mkiocccentry](https://github.com/ioccc-src/mkiocccentry) being -completed. - # Final words We hope this document was of use to you in determining which entries are known diff --git a/thanks-for-help.md b/thanks-for-help.md index 51106ee4f..3c62d1b81 100644 --- a/thanks-for-help.md +++ b/thanks-for-help.md @@ -4443,6 +4443,15 @@ set by the late Christopher Tolkien, son and literary executor and heir to J.R.R. Tolkien). +## [2020/otterness](/2020/otterness/prog.c) ([README.md](/2020/otterness/README.md)) + + +[Cody](#cody) added the MIDI files [cvikl.mid](/2020/otterness/cvikl.mid) and +[entertainer.mid](/2020/otterness/entertainer.mid) from the URLs we suggested so +that one need not download them and to make sure they can always be obtained +even if the domain or link goes dead. + + ## [2020/tsoj](/2020/tsoj/prog.c) ([README.md](/2020/tsoj/README.md)) [Cody](#cody) added [alternate code](/2020/tsoj/README.md#alternate-code) that will feel