From 5b609f15af008ae4ff3156adf931b807aa488b44 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Sun, 5 Jan 2025 22:01:37 +0100 Subject: [PATCH] Optimize derived class construction (#753) We were emitting gobs of inefficient bytecode that created an arguments array on the stack, then applied it to the parent constructor. Add a new opcode for initializing a derived class. Speeds up construction by 500%, although sadly that is not visible in the web-tooling-benchmark, only in micro-benchmarks. Fixes: https://github.com/quickjs-ng/quickjs/issues/752 --- gen/function_source.c | Bin 2892 -> 2892 bytes gen/hello.c | Bin 1559 -> 1559 bytes gen/hello_module.c | Bin 3961 -> 3961 bytes gen/repl.c | Bin 143246 -> 143246 bytes gen/standalone.c | Bin 15281 -> 15281 bytes gen/test_fib.c | Bin 2840 -> 2840 bytes quickjs-opcode.h | 1 + quickjs.c | 54 ++++++++++++++++-------------------------- 8 files changed, 22 insertions(+), 33 deletions(-) diff --git a/gen/function_source.c b/gen/function_source.c index 642e8285b4aad3c7fad526859cb8efec8bc34780..f486ee566f65eeee240fb25ecc3aec3a7b569821 100644 GIT binary patch delta 458 zcmX>jc1CQ2ItydUWDS-_7REXX1{DS-VA29aCa36dfrP-E)FiNkDOkb)%m$OG#*>{` zwG@m%B4%LH04594oRS8TFfpFo!)joc2v!8K2c`(5%?x22P%}td62xqXonX?~a`G=$ zITsAgX<(JcU=nIS%oQMmphAWS8-NDIu*or+O|E7$;7tXI8$&c0P8MJhlTHTPW@ZfW zI+8xHALJ)jc1CQ2Ityd+WDS-_7DhS>1{DS-VA29aCMWA~frP-E)I_j^DTqu;1G5c4WUA3* zCsr*5LlD~xOd5d2fh0(CN-9Xg#AtF4tAU**SP{e?m?Driu%Rg062Ue=?Mwn`Gq#xg zi&f4ALvt!vr4g8f+7D9$vL7mhG>-rjx7L40uz(Mnhx`CkwEMNhgE-X=ViR zI+8xHALJ) diff --git a/gen/hello_module.c b/gen/hello_module.c index 45e9bc7120780ddba104f6f47e61b91f7444d71c..65cd2e75f1e0e4327e22ea99b5461139f1534308 100644 GIT binary patch delta 327 zcmew<_fu}eF{XMW9WDifiX>AVAem?ZB2$wi76OL%|Ieh zrKun`iU!LxkWiWdSOOs}T9IT95<-@?Ox+yCe2`fO;tsIOlEL~648V4$f*oRH3DRc( zu{CY8J9{d#FhmEEw6W#n{akX4#*^=Hg(!eEq#A?G02&3-jYOJ&6iH6b=2lh!n+cZ# ahY#4h28kd|X$F(majP(R9U=dTWhQwqL2SuqV zNCc`h1w(^nDp*4rSOOs}T9IT15<-@?OxYa8e2`fO;tsH}Nnm{j24K5W!45I91nDyX z>o!W=?9QIbEDX_M1d@PA8(U1?&n3rbH2EG^hyvIbsm5S4fJT9IBatQ`MUs=Vxs?^b dR>I}L;RE)r0oeT1w8`tZRTxt@U*=xM3;@tkR$2f6 diff --git a/gen/repl.c b/gen/repl.c index 80bf563d83b51c55a2598614df951cf6f44d7f07..b79df848762de0c0b39060ba36e6d129c0150cec 100644 GIT binary patch literal 143246 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%0D?;g8q_~HXK*a5YA3pjBP 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�uqnL;!c%D{fj8Dw)$21WG?ab|gsF6Q|DH6!+n|XC&LwLRLq46P8 z-2K4G!JW3nzNZ<_{H?u*bRcxG)xl!pOzFGQBQ|%7HH63Z=~)TRYpa+Xus2_+N2M8M z?O>2SJ-BKWN?$!a<}Ig4OPV<({o>pZ#@V;2ZuSXl*iR0~{l^NPBnXpxFY2Y*lhQui zyMmj*;yI2?PmxmT*VYWOlqP`JAZya&>DAnm1FZdU+X>kpCkMIhtQ9H_Z>)zw&AESQ zPmxd>FmoJxjP*%ooO0+6ZPpHbarN=kdKuf!glru$2xlf;5R(j-|2W?vnmvylx2jsq|oD%z{^lQqQO8XAu&U%Ok z=aF)zNU8J%SqL#~HCkqkHRVhWu)e39ZRk_Mtif*2XVlcF`ka_CBs^HV)h=o9N+o(GI;HsJ@an-lal0xWa&8nwV zAU$hwNq!J(ztns%0BbnKzajkYxgROVFQT$agQzuMCZ$hQ!vMc~YnfI$ne{h0yc3-W z2$0V5mik^5Q5%BI8qI~f9v>c{W<$s%@Oy18P@P1X{jmk!n#-&z(|5Dp16#3VqNm}2 zwdz!hPn`s6;+>*3v!M4cbz5y_mC_dAn`q6d_h@C!)l~1%O6H@gcUN{12lxu zUhD6_?$PQ|mOScBkzLk78~&{D7Jr%bA4hASSwB&gOZ*Kza&CM=RvjVm4Jk3c zBAxj`@fEEh;LESjgf=*4e5TjofRsOF8Shx$l*W1ml}H;HrGL^hL8$j3Po+(%gNHCS ziABOPP=edW(}a#a5Mf8Ag3zf=n^FfKM8fu>#B%(j9Tyse3VO8?osfq{sz2v^y60^SqSH6+Trir6m#oHtFpM?5QvUJAJ&B nvFFf|`?2+}N^0j_6S7cfhvbpYpQ*qVfM)7yj?x{POC5zJB|s_4o6K{`=~k z{=U}VAN}{^oBsRZy^de~X%l?-*8jZG@P{uN5Q|qyrsEoIf{z-08<&2RoDV5YOh3Lx zLR<>jho5ITucg>M0eS}`SbX>)3D#9cquzx|DETvNFqyc1c##Ay`qyi>s0A?45NUsUnGAHmEJ)hyg5!e?*>yjPUa$dm-A7VS`H|EkmDwB)0I9Wmk}C8 z))HQED#C1(q-sPP&!T*3F7*Z00vOO@K)!I)lf_* zp#~buaql^X7(j=5vO(Ctj#&C|!=mt%1o5-RSI88SlieegEC-cP?;R2VQK4ZIH4JVi z^;!ZZl8`gm+uv|atXu>z5m79fL#5WgohKnXP1Z9)HEetYbTtZ1z$oBm zsZ0f&4v!&cc1tn5o17;7~^Kv@4Rx(q)%(Qln%}TQEaR<(o_eD=DuaTP%?p zmZ``sGC2+#HnQyYJ^%m&=8E$HQR*!aV>IR7oI<6Kg3{fGF0~C5;-rI#}0=~d|DYPgB9p{fY3bUh@XqySiA$^1xvhBLE)fimM+X9z9c z4~WBt4Rzp#*!@6u0$}2>i_pkrM^$0LN=TEtsrPVJDe1}oBLu)Y!mEbgFf(kX8zqMt zIA969IR^C6ZAvASi9|IESwdYR0g3~hr0fgn>X+2}xNN>gZn5<+#6SpWdjF7k7pPF)|=k(S`_5>~#H zAjbxwhf0OpnP5RFz{RT7XzDZk2uJh|tSWL_g0)Xfu6U!oR3bL+6Bt;h`-(p9MRc;bIuTD)yuR=>#xL(RURGO8ijSKBhk|jan4CQc8lU@0z30xz>L6^$Z zmBq9Pyb4?$)Do`zbEx#dP}xc z6N@=Bv@2h}#5Yr~fnKIeNhswNeBp=mv4dRfkWf3O^20xe1S9EUJmRErxC-e$Ka#9f zdPAJPOtB_F95Lf!oV5c;#Lg&D;x99}*kuA2RxQB`Q$kHXc1YvzI6owW(DZ|mfq+n7 zwke3v;CCtKFgpF3avVjZu}dY>k>Zrtw4t0A=u^Fx;5fk#&#F@sByf{cowrY-{J7U( zz?a@2W=nEOV>!eX_K4W6JcZdt%R!GN5IBpc7kuvJ$Y}HqId|pWQqr6LJG~lzSxPPM-J3 zV&*=vYn6No9#LCSi5_6i;v&GrhXuxQ@RiC3Z=y0Rxs==zj0X7JYhPEEucXoqpeOCy zT1V^4v~L1$0dLwr2ou?$Z1zox2yDE&Soo`}1_bb66ElM%%QNX!SGG#EoNI%KnW(2r z(hA86q9%Zv+Top1MJog+0OW@VW@CRZO$0;SQ)xAah=8CV3CRJ4<21Awc@A-CJT_D- zMVB*o0zu$)Tq-GPcAtv?`M^ahzlM8dcQ)Fb@XW@jZik5=<3|wBN?HiMtc-P?tys@fWd8m{jXzi)z#DTQ<6%ss) zXD7f0&Pn6edsSE}MR{}%05r-(3AGIu7j0oOBex~IzJhO8rq8&m6atnL{>~OO+D9{s*X*7UtOK(GBoU)!QttW+ypik2?BHn zzz%iw#&N1ei?npym`e{E0Pd-@CYa*d#7){OCIgIic*mrOO0MKr5hV#SchP>Je#ji4 z%Z5aq0n#-9B_ABE-ccYxL~O;7!(Tj;JG#q7Op^pT(KXa=mB1k<6w4eJ^)*C5HduJT zO$faCD{090j;^!z-q6O1(cBo!dg`u;uxBSx>XjDq!?P?a37-2rv9CO8*uesnfl_6k z97kvnMd8F*9@_?yIUi<%x9F?#*aSqtV+npjU@Z$$3BQIiuB2hx>WBN-Y-LtPlCX0M znRT~y8f}yu6sxXvk<)ceBS{#6RTrVFH`UflTTZq=mLrW%Y8=wM0OukCM90+A#Xm^% z&PmpvQ14Ra;fG~dEF4kF3XaRdCSXFj^lKX$5EoNPxQhF}6nhBDk*<<}YaolX%tgO5 z&YR5QWE*HjMC|xk*-0gYGC*#qR+~kh&lb-76o{mblLmsJg(MKI)CJr}x&)x}IVl+p z0q|jT5rxNltHJ9}DMtOS9Q z0TourSy95f+wi-6QQ&4B8)Vjd3`JV>`*tfCXQ4>Yr6!Yi8GTQZkq<0djE~&s&_FVZ z0jv8~U6ce!;Jz`I_?W8kUdmX@l(4Hrvu@Xj>>V+)6}6eDiX|Cjl`t-qr(lM{s~+Mw)|>h9nY*hV0G>a(5!io&8K%{LpTf3?=m^%P*@Zsk`STs3U9<2r~hCf z3BlvNCJw49^%Q#u@_PyCGO>Fjwclj#&GWzS)tbN8L~N8q@R7|D)}kIDvjcmV0!c%q zy0UGUPc+uC)0JEchz+`zG(*%V{!U%~>aX zLKL%(tde&~pcEux??(J|_+Yxb`v?jf3anfNpj_kbUeV%9(Hj8v;&4#}C}EM=RHP|c zj)Nb(@vCr~)vj!CIO1srTqEQMPk}kdNj-;##c_)MbePyaNejJbA}Yl%)i9JONi?96 zC6H^9usl+l=b3>n2u7&2%aR~xAQu}A6HD*01gikrdt?#PjwpZ@0rDq1`9bmcE@LzM zn3Y`Y}=a zlH-RXFe_1?DPNa*TVdEE3F7)5*GK^z$Gb0lA}ARX zQY5^Q)tepncbW&et`E4IiXTk}cCajF8}qsCHCuuqT=Dz$gWh5ar(U zorYcRspOL2_kmK4rD_lwI24(=o?hCvxYQZKEaCOEw6q*4~ZR2nzINy|FJl*M`DrUJ%qk8Ws5!jA5V(A?OWVRCDTqz3ydfiYLthzLPoVTM0 zbwA&~Pg&-j1x8q{C}jx?X#h|!(G^ObpNJ(3P3=QM_8s*+m~0S_^ecBBE?09+@OUXU zwXZ9y=WK#J#VRY$P&?+CCU~2DJtm@L_{Rj;VC@x4oLc&UfX3Xl+ zx4Ne0p|AlpPzhiF6^@GtI31hC2ti38IU@&_NuDTX z)WsNaOt>2G8d_X!1Gaf1glqXOFYzYt#Wa^qJM-pOSN9?p+B?7`O+(el% zF|L$nD*F!!OE_e(2nH+c(1=qG1OR|czF($YPgw!w-L6ArMXPlADpH-NUY*#9K#ogg z+|8h>B(pdxViBP6ibhKi+-Ai5;O?Fz)L)lPJR?R{X)qP61LHGSVhoiAVp0iw^mpM$ zGAYumm{CF{_(c@qEVE$Lo)+&!$^CvfbmDfPWKO6j6Ny|i0tUl+#i<>dC=IoR(x^ET zrM;=M9M3=yyiAU47zj)?9Lz$@ym2e5EJ7Efz2b>{@Q%}%bXtOUBaw4+sWDvk?tzk+ ziMhv*UJpADKTOw5OVTrQqf@Zb9-@q}njkjNgEx#M0jC74$$M#k+$3^oMigap<=qnY zs$p;=W^*-HId~Y2-nj}j48m=W%4ndJVl+}G@3!egt8EZIJnxtaWG(b|(cY0wyqha< zV-NK=_l!MHXCM-A_=o&XSh+9Y4S8K;LuDbW?OI5;(H?-eu=g2?m;B?D@~*?i4@~G_ z7IsTV##|pojT)ZPDzW4^;oz8w;F~X?bx;h&L?G?=iQT+$S(cdv`|$dFnX!QZT(1;` z%;|xesfOhcze_hWTvL})^nGc}v7SXSmtpsI$iy?^J;Pqnia~eUBY{z7AcD*aq<4`c zb~ADn8eEhTKs}On-r1B&1TYB%d?KD)8&)ai2ld(IS@wD~OyllF0nq@gR8MCd5@;8M z65DA!Wma~|1_AeO;Lt7$dmu3AEWkZ1Onl2xT^RQoPwiJ2jW=SFW#g1@t4ujkiAym{ zP?E01?W0>1$kg<)F7LNHL<5aO^ zVy3dFh^|YX_6TX*M;R8Qll)d`*E<#S4s~_{KBa&&vDEO^wc>#3y;K#f*dT(O*8mrL zykhqbRuagGZxtYxrembJF0nq}c`sxt6c;&-0`Mk6tr80x_k18N#ZDR*hVGTIkkD9= zQGWZ3oOpWTp;5||&(@RTb$X295drGG$Oa>pQ8a=@5;U+RqyX4UWigVcNfGf#b8(id z2F@iPtZU+<$i;DtnvpwWg#$tE)&ZGPl}r7CzdN$sIEoFk9zK>zMcg)UC&L}EVrHpP zBNO^cdX2>_dL&SSIKZeDNhl#2HTa7S6n%|O&<|LtPDVpkQU4}B9f-@qkEs!50w3Q` z8PZxp2A}zcqM$vbJg?_TZ#7Z54kBlRJD-MJb zfhEOE0021!k10Vm2x;FXj@r6NBYb>|a3n{Y6>ds`*|kX}YzV~w8Uin=VC0>3{bL?d z$t#rXy~VT`NkZZyDE*2ZrC-{Em0y@;0J z;0sIgu7;mgBtuwQ`l+Z9Ed*Kr4WMnOt48=CXNl!jHcIBR4hAkQ8SzunEWztIF2a|f zj!cxqt#W9Qwb7nMMP^PSdn-eIMv&NXE;H~`+2SHv2X1S-f$?ir7&L%ue00V$L#S7* z?eUBXwnKJ0{Szk>xTKl0`OPK%EF~o1dC*;6lbd?c&o>sz%bJ+@O z*?@^?%mgJ6UGo4`D!I1WO*oDLf$JJ2Y4ZksOGtBbPXP7O!a6>TcEAx=_g2Y=xRQW4@DbSq zd!*96o6h#!?#)EHBF#bR=42RD{GQnJatVGB$0$W0*j%BsKO0}Zm(di-@Uh!D;Wp#6 z6s|ho1f*rg>0ZO9TSY+C5He00Nwa#Yi1RTIsYI@AP+rOufs)-qNqmSgT`B6SwcLM@ z8ncF$Z8*z4$cX5cz`&BI$RWl+kH0Aal^}kH8eD|Y#IiSNw~%&ueu)HofV#vKL*W?! zv<*v&Fd&rd2NaXEnmt7DtaugE35ooGk1-B=P$r7xgro^*nXTB0NsW3%Aytd)xde9{ zvSbjT0Oo4ISjCwcBv#51C`F)dUlPGXOY|5F}bD0`QwSGz+>9n%QiNG@9%Rj6)^I%s`_E5)3{fIQk`A7K!R9eGBi><*;G#Zp0D_ zPtS-zu2}|%Q-TjA0l=GT;)jIPoBO#g)gu!n0fK-PY5CU*dqUX=?6OQO)T3$uDEyY# zB#OhrS{t=WuFM3mOf<11`P@QL;P=Vy}lrem8*^^jlH6Tue2=5GvCl*vd= z64(S1%`o%b#WPcM=H4UI?1FLZH{hndZ!O=;XjFO_1U_wse z6aE4&?h_=2m3Qy(s0}4rVU+T{K}&5V33K>LvQ)Yf-RQ}2C&@x-6Fp>i5VO(kd0Ip{sP!9>{?R=o}CP_h*R7ad~LJ=oS zXEB2W+C!>IAsG@>e|YlbBju5#p)O?tT@0f)7m?Y6g(LuL)F0b0lBUhYxh^yC!*qPi zG0RE*LVyicDanW&w1-$K6(p_F1pykvH5k>EvVl_+dR+>j@1qtH0nUeMP#ZVGxQ`(K zZe)6&kIdo}1V{sbI6qb>aEc%|tO++{o~OmtrW2=lU|clSvki_PbPZ|P<~_f`R48!~ zAj(ZhORQYODV0vn;mbn-sYIEZcNXP1{IG?ZRaNi-!>|EPkP({{X21<4M`(a|c*9C^ zhSEkvdDkGwAw)6nKX~2;lQ1!5 z+Lgd+gEABFhKL=f$Z_8a(hMUfq?tFCcorpfAY*#xOqQ@Duuwv6h(5w3B$u`FLk4qb zpId?kAS)jr^5_(}c@YRZtXkG_Xo-W6LpX8_h6$_J{tVy^xQbx9vTfiI1uGDtVZGDS z-ob)jaB}OAa!}Z{l}pKNF4A8|Kmc9odL$4EaM7|WbDurT4q^nKLxX~a4fL5DliA2mKOo1?PvSCyk3bx1%V>#%fNyu8K-Q?M+B&kfHNHvO zb;^>Km)qz6n=m*|yl@^qqdAA7w+6~srT-KH>p@CVl z!8;n1c**BBg9&oOV=tBTnXg1v&Q*94jpe8-Pn z%6F2$D~Md=2S~+^9l089mH40m@8NN57Lwra@dykPSSST+Q^Py>BOF@-QDilwYi|3_ zjnme}6MIbKo^Symr^W@=F=@9nf{#l_z}0!n_xunS5i|HT-+`PBgdC^9V()?HmW>j~ zNSe`OliAM}3nh-H0;LSq2^Kc`F;{~wVEiT|5AU*J$8BX_BrtO0_APbk?$TwCgX#o9 zeqfiK(G%CQgoRbfKTz^hEd&TCY%&# ztB^lpOhyxGOig%WC@|%tSgG0sp5-Hc4C|^4x`aw3suaj#lfMHpBs^5+ly_1oiZPM% zOeKMMiw{9Q{38huRm%D|`lXk|sjew4gwl=-Rt+^8`k{qX+TC=Y?hW3poDa!o0kjeDrjKZhR z$ObrN56KyUv5+yL;@~9 z8KW)1!x+j%WB3>yN=l`Dcxc?%ucMNnQ@4r@4>U2Y!!ngfB}cz}OoL~3FCs|w$cJ6R zN5!eRN~L*C+rWhK;G(`pa_SnP1e7bMzDPEl7&XBZ*B1$~<)VOfyuEhi(IWQCXsbid z5*83w-o>Kc0}LDXVVyZSv7lO>- zAYd|>k`I*F%<+JrT(sv5vE+-Sk{_OvkJ-WUs337S#AW;mr(K39iIN4fh~gSN?L+>XLvIlp8h^U@GzQn9K=61qhF_|9Ve++c>2d~G>wmW z??#8Ge_R+Hp8l~Lji=3fH#$81-bH2`V&UyaCrI?=f`NrQhl~^hTtcR9>YBv zp8jN`b2vQh3Y(+p=}#D)!{O;q80|R@v%=G#ccatOpLe6h55ztrb4Zra;pxwt(d;vt zcsH6Y9S`H_!MhNvUBDx!KW|3U&zg8QnpT#2`eiek9=3>ELe0MQm)A!ipnHY)m)&UA zvmV}!4o}y_&=MBj;pr;w=h5`^m)+>_^p^{x!_%Jc643PY*WKvw^w$fc!_%Htf;V9B z_v>yn-@WkgW^}z{b9nmeX0#g;Iq~amG@tx%E3|oXw&zU@YPznxe$$rnb;(;nW9PEWhPNX5d_?wT^Ec~b!1o~M&op03e0+VgY{1EQ?@eqppcZQh&F z+#kY~W1bG)JP2;$&FH!@qI^K~=4s!KVs!Vke+5Fro~KhX3lWU=Je|X`1id{^kI`0% zm#NYF$8I#85|VdM^Dw=MccbyNhj*jpX^&nQ4S_^^o*sI)+UaS}(>W}D80~p_jLPWn zwCCwDT)h3AVEYd0Y#g@@o~OsD9u7}? zo*tu3z$Q4Dc%B}^JsQ<}%+om>)!XxQj%H4Kp3dROY0uN#c?CpnKB1WB=_JnT?Rh$f z!_%Ip$Eb{s>g{=Y442V7GhoT~bPh*H_L=a`(X8H{r*k-Z@6UKTjb`1BXwTD0tm7JO z8$3_vaCqAD^cZadZXuXAIX#AZG(0`#=^T#g?Rh#!)6<@(b2vQhd3rHgIgMhTr;|8y z+VgY{ho?PHk5L&Np7uOFhRbLt({N}L)O1~cU*$y_W~aeQ4zD)>(dxV#oSG4pDjDUz zw>gavI2chD2BVhX4V>h}@wlk3p@B(Qoy~a>yps`6Q>1aB69*|Cor{ajWHKBD4s(}IZiyROkjdT z`8%8VCZK;u!Zfbsgl#SesKlLn6Wka*yKzYfzkWt<*^p0Z&&?Ov5Cqw{)3PIZy$>W^ zX+ZtB4cfg!4Dx>0pA34L_g##i^g$Cmiw4=N6=t7*0Modzv(Ykh+g>;h9>ZrDn~rl znW^zq*slUOr+1BShzrA(u!A`HwX~I86Y#*%3BEqRBL+&#?tD0rN6>SXSGou#a+gb0 z`FtrQN9Wnuax76K*#b$$xbc}qx|EcJ)vVT@3Zei>h>emJ;C`GGFm9o$KcY`~&;8&A zQCw#R_nCm9j>G6wfV!khb3I)PX%XmBGU2Nf`=Lo}s!?*L76(D5ztspEeD5?%rGG9! z7kLj6PwzH-2gDo>drtLSDv4lL&(b)H=c%-X4Io3!!zYsC5FCm%fr}I^dnkkHY-@gJ z@+Vs9>N1MBlyv3NA4;hat>LC`8sJjQWtt@8YooqZ@}8uc9TsG8}6lU-KGtnyT ze+V(wEYCb0C@uB?!x$B;g3RfH9D?G?l}#}BgX@@ri3Gb$WZZA6^G%R@WIVoTf}uuT z^JaKS5>z({4I`%Xx64p6Q34I1!~OhIx zExuGL;l!_+xj##05jO$79pBX=@5p0T(x}Rk<_9@#y;bv&z=j=0BZn-nBHa>f^e_uu z>n}0;C9JCIC|KjtpV9IxR>_jDl*+`x+XsQz=M}4#;N|vq5p$f`DL@J_sU*l~(txi- z7bDJq8;F&)O#n*fC#>K)k*RBDZZyFxgLO>U`JNfUCrDfiL20>hBum))gxK38BR5(C z11>7!_nEpR2|NXC2}>+Vd*(97Dg9qqRTE@O;8D4hlRi!s^~AJPT6r{!s3TLEI{$^> zGY{1z=k(5EASMYy=7Aaw%wQn`Q7`w{lZ6oTbaOk4M!UO!ap5?Xu-D3g7dh?~E)$vO zp*#bugxUk|w$TJXDZ02uXiQA%Qg6*dfP{sBmS=!?5Gcm%xCvPeUxYdlb>TSTo6j?3K6Nsf<&9<8144$v_^2@tA@ zn|0L4zXSDlpQL$GWb5&XFvqMsjcwD3O~4NmW~iYzL2+_o z6R@~Wf(s`~S~;-^><68qIskOCm`)5ER0^b_b`&z&-2;Y&TE#F{*JJt5f1{5^pwuJrztA&9E_ z%Z_e2Kq!HRrY6HmFh^+22dhK?pyIvUg@sZ6^@bFuB-#%e%871ISD+71`_>1ge*@Zk zrIxS_&%)U5V|4s&3Em*RB2dH6BJ~?pS{i>+j8Ro5yCz6}yjC*#)u0HoL`jG%I#aaZ+%AvvTXgL4Dm!G zqn!_gH)e6K#;a$+!0`$0mM~Ycb-Z`?%R?oOrNAD&b6WWVKK!L>c+=(z#FBX`YKPH; z!^M{1@IVpQolOx42lg^>(7XXs7cKWcd?PigH*vK*lo@`g-XJ8zOlO}+GRqNsQt$RQ z!7?nD@qD&>nn>ERQv_^vDEgNT3bpC*X0ch(C6(}lIGxH?$#*g#2OB;~!VKVf(J3hU zJWCq-B5tc-54%aY>MlGy~FkEIe4AhS$a!dlNW5Q&1(n25#(K;8g=I@1zBDbtciki2zHfD9)#0qe~D z_5^ZBskt2^qa#|@ry`*EV;1Zfsac<0V5m4DSiB)7B+!z%0~!h<@3D_l8k)tgBJud zp~j+H$LWVUZVA47a#Jep`#~&}B2g}S%P4cTH7tVU9hT&?vph6g$l8J&q(RUP&G?oPY!ybL!gkDYuznO9spm84bs=WQ0h}+Q!xI_l@8>E9 zyH?2)`xyI(D7g1coIQ*hp9EdXS+6u308*q!7w!Gx@i_b{;>6x+l5PL6{m zV~NP&u9y)c;G{6=>c{i4I{4BtL6wpxpR^5#dt8^0P{cwhMB9d#^@!Y=k4->zc&&W6 z)m~vz$~OV8JwMeR<(uHK_9vNADLuVuf2t`>aN<#C@Wv@9S{FS1c}#e9%0)#oQPs~t zj6&KHxX6I&QlDY>QlQTTp$J6HeP}{$3Bf1`wFnIfn5*Ga2h&=lN|#MYU38joA!`YA zl@3Aq`$2RaDv{aD3427rw917fsDwQB_hcjq!=O^nwOVJm$O;Q$OJJk?LF-wJ{1j(S zyXj+t7?S7Rn^q~`FUq@bd^Cuq&XnH-)9rN(@A-;HpNU|p<1jh`+c!IP>B+4J!KGhI z0*xGsm9Lrrl)!;!(;sY?H-VeMsM06B(~?6aE}Cf6MLQTZO^V=-H-1>XAp+1~f)cT9 z(53D^bX@X9uqI(^tl`s3F<5d)a5$tlLe&X+6QlwsH%)0oZcPbIaEg{XbAivWFjUHz zL77;act?&{n)T?1`tRN6WT!=q#b~L-0f6%hYM0-D}9xPkmejwN=;>SlZnI zdh&O`N<;|&rw)lFl%|qRU{6Qh&BEC7!@_cL6Qrl-R&SlZRPvB8$)BB16Fn;hp~)Ei1R z!AZ+LBjT**GvJ%xUEIUS6uneZ1kA?>l@0qls>aZsj!QkDxZ-%eU{$&--){vgFI8D; zWO51ye=OB8lgLQIWfyp30}x*UEm$!+TMVIeV}>B7!c2kis_O-OXt6B|s;?9+gjcHmlAzK|TrPd5zXQ@loVf zGK)YOJL6(PS?(kc7EO?@p&S)`IA0OA8>nuQaH z%JWPabZH3`0lw#y`EdDcRulLs;LPB_%}NgWP2f&R=AJURMpNdPP)36Ha8y$7Q|D+J zeV3xAO_2lEQz}knm>IC7euMcS$Pa&bH(&nA)UCX00?%>M)pMLM@zZItiWsY`Yy!_{ z>+)*?u;fM>JvUSO(oF&ZU)Qt*c(~}R2vA_A8mYx$bb5f&vd^oQfT30+!h5Q5XhDiD zubXMkMoHg)RXLk8Q>#SQ&U;C9CbI%hTMOnmyD26Vc3LTqb!)R(s8kp0mVoG|HLtEL zRi)BaupY1wtaAPxl)k|r^eo{e8?@X?DliTS={PTvvtA8InjmxfJ^2-ZO~?>wM(MIT zG$V)y?>bXjgh~Vje+2`#^iXx?V-w6LR_ge)YHO}4l~e5|*!8A)b0$K-VgbjwE(Ip` zdH^snlnpZL=?bpZv(XAHuWglaEba-AgtbCYMl0fP!Dap&;7X+^j}LrYDtY}ty6jjn zCruv%aZ8xfQJ)f4&aa`yJU@&EzL>!Mttt_pdbG0*cQyPrG?vmUxb1b-!sUiG?^L=9 zO8ey@Pn~hbQ4-;lPt4HHoocvHlDT&e!(@L`UT=bBpD(aN@~QlsQNjjWLeVF>@JaTq z?)-$ziEBG6wKxb~RR26rXH@2~P|CUD zJ$~SnZ^jb21Cwcq@08v>QSRH4Njw}XSotT1qyEhuzLHiOd`&=>-DSdQ-!cd=SAVm3 zk|B<0cLFLiR3Y#t@!b!wDMB)tAlB#0(?zTtBy*Xk`3i|wBI2~HSwx0PRomN!Wmrv+ zA4<~kU_=>-g{VDhe%HEQ%B6sFK)Dii>5q0a38JY1D1?+ zVX>QqzK)mu)>9bQFzdKevn7;LdnrR85O60aHo=KUoyk=R5#?yT>-lh*ANF14w*(6f zWbpT;WZ4jxE@e1)J7ieAKK8NqatRqXC&B4~k4t%fb-_s6B0cU4}!qwfsc`Sc>1Z2TP0Q~ckN-W zPH9vsiX{P!aemB0xi+#-?&i3QEFS>0gvZNzYTgW=!)Q>y42NPmm*GuN>+t$ZTBf17 z40n)|4}JheTHXdCOsRbNi+}{;gJ5ZuSVD43?Nn51)YVCIpM!6CuUQR=CtrDnMKYgf zuNNK#s|IrN;~6ZIDbid7umK)qGqW3)&Wl=YHDP62OL*L|V&Sx{37jZ{#{(7xOcR)T zL`$8qGCGqXSge}>K(jUHb8@Fkxl#n;L_^JAf0k%eySmiC&?H`P5{pHq{Nv4>oga03 z|616y6h);_%tiyN`_q_e^O?ID_HA^={cU&;Y4SttEM=X=l3X>McK2^%gLvXh?KCQ7?iM z=!Xry8$PATEe~n-@gKEOFXe-XhzY!JqJpsl}O_w^iI)r z5L`qND+m3Z{%L|s2Tcj5&lXDpe&8=rl(7`99LqCe`;s6 z3A_`nQsC{cfYtLInVp-=nJ5pozYdj5AQPE~NL@mG*>8QSMngQJK@tSn7w}eu&f$ib z&=}`MAT{=)?{$wxX9P6Co^kuPv8T*1I-qnzExk|u%|UR=tTt47-##lnwY*jm`QF#y zA8_D!MW$GI@0H5u^pExsWia&A{~b1X7zZWsa9PQz$Q6MU$Y<-A>gkkdR0xx0+b-|f z(~$U5MF10i-Lh{9gx7KxB7Bl}Aw01Y@$5aMxmbl9H+T!I7^k$n2o``|2skwyRH}Mn z*Lgl+H*Plz#3$Yua0^!c84=$wq@3_WS=9vo9fNdM5M%C~ttBBq^zRrXaa5{$R8ItP zit>1RcB}!A%-hh&&&~6pc?e3qkU$L;Cuf<0Vtxg<;awkV=$_V{*hrq zz<&dud}?D}BbC^@Ph=8%>XqdGBs6|%p3J|j>{6x`qjm5A54}iNehik<#!u?`2i?er z{QWrpthdzQSJe4oSbo`{7C&u+tEYIM-Y;sGt&!FQj{Y>1<0~+P62mJR#VBFmxWEVk z!OAqA&n!(3w0aj)mZa^x=TG#7gs{OcKMMvV0BapL!ThI>^P)Tk027RVnm|h@bB$wv zY7v6@PZ9Xzhf)v6LF`{vHbF>u6#=q*iJMJa63B&C8oOXBX=xgKn@VBtjH5rD<+c>_ z3Rell=)C{hDDjJ2)KGe-FDMqtge7iH<`;L0xW13qf0f@0i_t-y9XCZc8I~}ylkqfI zyuiH|dQSsUP3&p(LxEFgQF4r-R4ojp66HjvF70}~g;KDPCtHM(%X^vszK@ zSbknJ0Pypzi%L}TE8eC2@Pi7>o2?iV*b6%^{OhXwDz%@z;|P0E;kQYrIUmCDXmH``5~v>kbtu=nr~$-pPz)cmp6bL z#7l~1rQj(+j9yp_B&AYta?G$iMpeN&S%^U4z-PZ^qO=FZ=)|H4vS95!K8mqsDQ`5v z^8ByVAdgYQESR70gPTt2$`&IX)K3vFu-XrlE#`Uwnz;E6kVfmcRYFU@Z7%@qCaD3z zyru~Z8BwXf%ab%>G1YE@y++_~R_Uj*&;*IJE4h-1QVC*{tO;Y2TFe@It*21rxClEPa5=aDI9TLo%bxu9GB#c;Z zhza%3e&SQ3_VnzlCt_H2(NA{wS!<$AOJOs zfuRV*&%bu4OCNlHvkB%0I2-R&2A@bV(#VTfPv&wBr64~*#Typnbdj|LF2a{?3?m$o zIUin;4Kj#Q;M9>NQ;k+t@{64a?)mklu+!gS*919>Ew?S!OSw`6QefG5mjWnB-9}X# zohhHv2*l;43kd|Qo{u#JGk=`9nV zp7~Jsyrw1iA8{fOzsbksx8EX^%zEtVP|2Afh-YjTJG5uxYrv|CKnQTl$TD?)$qjn% z95!NOwNMgLaz#U{G$EVAo{iK#Gws6Yb3U1~Z~{cBbYdr?HCg!)bYVrU#t+;CKtg@2 z<{G7wcc-cqf=yuFLK@y|2cv!7)>$^ycqH$udR6RkXedMG`NM`pqkave)!2$deKc1D z(deEqX)-}VepkqdfOsTYiBouUEO2K~HUVy8Hx$L}djd{TJkLvl2KFXsi6Y4HKQimr5k3;yckIGrmA3TBrxbOj}HP}w(MOq0>f zI{Xa<_)XK()2|0XmP#)5*FIN&H-TTekYc$W$_$}kdoyRw!5s+V=k7x`m~3o{NG17_ zr3S;ikmQ>#Br1)Z_gm9w9s6f5M~R=3i=Au`luKVmAd2|ZJ4q$#oQ5xYCq)3Nj@z7R zTpatR0v4inws3BLayX9N1o_P`sIdgaFgFOiqk_@aJBI-gVvfhCj3&GprmBwN29z^H zvIt~o{&3pqHpuitb><=vaE=y*hVMD(JVnwWllSBDmRiOVJ1P*=$IK)Fzha3b+%Bxg2k`Hi@& zQB~|jAlJC^NP$^Ni=7Lp{Ow7ROFgB7m}2Ro70UJ}3ud-IUOQqmez>UBilzO0HAHQL zXXWjpG}mh&jGlF~i3I?!NBF!FnDbRmg_2CfO_$ZKp&v+!0D}Z*n#raZblBWbE~rEM}u5p6M!;6p21H!nhrtBv8o63gTV?lGTL5QyrlQVv=xId{*l z-lYGAy;W6oO`s)#j9We0Sn2%9p$7rOh@Si=8IG$Q6oCw)lH$Y}Ig?<@5y7VYjGQJ| zN1Nb*0!<+QApZ+0IZ*^ImRvr>Q^d8>kV=#piC%svKF)i$&x=>V2XCImr3>^%ryR;? z*&_)ea3>ixBF&vkkb}THa3X(Y73(`b?^w6`n!uAH-Vi3NR@nY>MHGv|stK5ziPpLN z0+ae{a|KBeOQkeRoU9&`OITIY@nHj*uy@JcRuyqQV4iUTP=4D zx;uRlxHE>+C-7l_V@Y=84%=F#8M=*$E=r%!%Fh5jj3!0s2l5$0ho&SKqbA_H3jFFM zTU+}B!#KCjOG3iaeFZ9yl->L=vr)w07K;(e62Z;z#p2Zx z5C;zU0Tz;cdgSd;$$3o7L@gx!iLu%yISBj`rVRa{mJ97~gU=80A|VKD395P%0bNl8 z397S}fS1Imo<%uS@^iTigiqW&A~_|vEQsAZu<5i-Ss zXPG>j4?MBQ>U&J`46Pl#_k|6Vdx{#~&1?n|KPx?}T30?P!#wQ=0~Ki#!!{Zd?+l&F zz^(}Z)RKvG9zkB7kpu#PN-=_LB7+B5=+~TmsPs6q{k%D4CV!*ebE)La-=b-0 zD29Z~AF-{AxX143!sxUCT?xBAy5?QEw!ypR%G%t;@LC-h$Z5m6#$&OV>+{xL#n_EI zJs-=weDjsE<%5|*%?2XUo9+u$iZb>;XvNE{2=%iqjlzGMiV(#svZ*jBnxFze=*m)PfCGWYXt!& zGRf`)l2%V_H$gti!$#u+0GePTP{;PVY)Amu!YcrpV7k4D75BeF!h9H|h?lM#3$qh& ztp-YB3B-gCAv3Cm>V>B!4V#!tIfG}iBO^ucz8gO~@HTq>GEW`fZo;PxANWVwdzGaO z&Q~gDzt$46VY|C8;O!W%<3L6onIBA+g!w9ZG4&_Zfpz(jLKFi~6pIeCdYx8@^m`Y1 zeCk#E8ZoM7D+o|be<_mQ6XlF#R$XiY64G0<8gMpCCK*Qwtt%w~jWvJr4U8X}Cf%{h z(+)=@c-LMR!JFUXB#J$w3V@1+mcYOiT4$UU3iTx`NYT?=Uj#lwx}uWG&stlBH|_4i zRdG6*%IFAS5TmqNF&N3hVkB4F6=DKc^gYvN--5=;3u|)4n zIPf$@Ha>H-38>y|0P;a1)+wppTX~}tYXY*C3U_z&0voEDNTs1)5oZ}D#ui9uLv5&n zk71^FeptXoU^wwG8q}w8C5;UnKi?(XYU&XI@R13j9xRZFh2`9{1TIRfTs8-zCdkF> zqLTD}kpy!c@l#A;WE-CBu~Mm?q-gN=4<`Qer>JtK&})?TP`eC@y0T(Iet20>6hV3E zaNObnnRp6{CLmhNcOC1e?QWI1M1tQQeQpzv~{N=|)0x)gBZepkKyy-0b$azsq<`Fm)~(?vNHpu*n1oidByN_T6&b`Xfay+ z81`NYi7FN*^R``bl^hT6SkX!|?0GVYrG`g|hD9YssE6tBl32d4(MHK%|IcAf#3o+B zIAY1e1C3&2Kd5Q(=x#I>#KW7>)xNg`hFP>^fbdqWM|Y#^&9sAfGnz)Oh+BfcKpI9f zrJMI|G%tI4cr%)91xD*74WUHR(84Klz5R~fF_l&SDFOzF91&#O=65}HzV>?$3H&rT zYfkp2`Kmy^E9W&(?k;$diX{WecA_LydWA}$feok!0T$|fbss^%FuHQgUwi_AZD4?e z)PUcg;XKo!&ex9?gwZ;MuATs-3=v@47Fb97Q6}EqF1&yGG}JSO0|u!S$~XrIY}w!* ze?(dkh=+Hd$MEz3jMi8}sQxm$aTm)~T>$t=HKq(-q=Drk<@da%RXWWvtp*+ddyY|( z6t$t49)9Kg`#4i802vL4*Z`T1m#i4)n;<7}-|8B}tsaad#}5GFb`NOy)aMnMVc-^F zZdd=LP2VJ-MJ)}^j(bXc*s!ZXuX_5Tgd~6o%L_Tq#CSlX5Z7(Qvr37{&j|Pli3kMQ z-5a|nX|jPN97s3z8%n5D9|<^Ym_ny3X-iJ87#{>)eubfzJEKyG@EY-Wgae8(I+T=z zSXy4JNXMncsLGEB;2o7O{mo6b3BzFnJqwlx7Ja#xPEEfWg&fjqm4xGZb}Oyn(u$2$r)d*#vBJxeSNV-YBuxn44|fEv>Xt)Lo?l+iy|JC$7BS!5VHq8R~s}a$S+;trqHO{qE+8084WFzv7@#qNzd| z?!0n0k^XNgQ&;+ZphSA-3W1q&FALt>>Gpa}o}t(<4|!GXM|p@=nZ*;>4-{(~cwPL3 ziZ#K!f8GEnj2|ebSW@wFd3>gr2$Wg0(vKCZ&lNR+J)mUwZNW&+ya_pePFm%JhSpun zR$#b&RqPIxP{ujH1VF|i4d}ClgMg(0cYyG&l^jVHHUKEqK@;RfEcv0{E!md{70^?f zY>0fwn7s^;!)Skz_f8sVM2cp_^M>}F`}~C`|E~DJphZZCN7qX-&ajRKqHVy( z?rAn3BgYQS356F-eFsx{ zxSu@3VG>kTZwaKLZHV3y8{Cqr2n-2I!VGEj_N59Ov&)H{$hp&g#;lCam{Gl8*j%%p zr41#Fz28aXQoQKKBhnnLmtj1Sv7FH&wMq~?-b3V?vC3M7HqcSMmk7ud-QAQy!E;~r z3fY0uf=o1wbePU>Qq*&>z(v=)O_9<<5~4irYUEGEmljQ6;6Po(s6h$k5l}BPvlB4c z=pKvFPFCvxskDVdE?d*+`gl|m%mnXaN^(ZmTGY-)<0ij*7jb2o`=p3BPKjTVVdUVm zk0Ts*a1DuVkj6e0^W9>uqP47*4dVUOTogMS{lMHafmMo`4ghSAw5Vx75;oKyz|aKd zq>ALyq5xsv(q~lcDl3{GKLLSap1H%vK6B@|i|nJ=vEX<~EKOIoN{gyC8-JxhEd0!|(1WbJ-V$g+IF-Z`%DM)7hDsDN2~C33emX4V!z{E#8z zy-HGa(U>V~@Y{)7CGKU})6q)j%M-{i&&X(n8f3OaUGjq7z8v5aO1_B`_56h10V{@P zIHXJ?=6i~pi4PEK35HDl*AgH?j7Qtp-!Cr-B_yb-PLDRA96cxjFMRAGqa7GJuNpGDPfN-9UGye!{D_|mOsJ6xd&=_do6Q5ZK}Ju1w**!q z#-53t1d<#-lRZ*EHsCk~0`t&mZZ4+NOHGh-GdHmMr@Qd3uO~~TC|j8{<}DVp z@Eio(Oe4tft6v0!-H3xA&?yMKJl-Ui{3e)jQpY4pP5`GZm_x#;=uVWd3K)Dpj#Fu( zU8dkW?Xn*dCJvK#dYU|W!zwFzJ6*vw7>gVJ}z?Y-Qh!)3%NIVK>e%hDF(&zsA-QQdfwRMLKbO++`$q3%$v2g2kc1Md?0p zn|)p}nw3Sc%A-4hLvX|?@|%E5sTbMJ?ET++CdK`iP$)d80VFf*TLNB8OE|_GTxv49 zN(k<@`Kf{~5&H^d_j<-vNs~&#!S6tBX?apiu*z{SQp_rCp1xD8!bEA(Z@^A$P94Gx|Ye+7i&1hZtQ!m?rg?Cuz8* zMrA|Hq6D*xd$bW)SndubJl%f@fIz@T-+)bLi!SMbqbobu#>DZ|Z5-xo&loWilhb}6#jT?HUwg_(Y zUha;LW~&Kyjq@>Rd~8T)f6y3b?Gp;y2lIh{Ot$xkdFi&&m-d~TY#Ir z<=jPS3Hj-Y3j%4+J3Fp?c8#2c9EuHcY{>|mmaunT*@h;I+M$-wB>UiTVzEq+UgB>A z6q`%;NrKE;-nGO{L@38p7J6?`VttOeG|rb!lmuyiQD(v_QeZ7Jh}K0HPpc0*TY?{> z$N6w2;B9??yQ(nM>G_v^fJU!}wM6!|7SzmcS01x5a^#Swb?cBzf-% z1(a0o-=sGn)?dGw;+zfw;%ZS30%ZEWXmH|EuNHKE{t#S4pHB?V?s{5f+n5?hun5+a zAoXyQLtVK}b*dIX1meL<4f)KmB_vi}4j_SjzCEHiBc`^2DPxH!U33{ytx_%A`>&ku zh{7BCdy1$q`ehL%f@~KOv8#w`f<)#vqEONu8KDsY@*tw564@LC4g1g)24vlD`>u`luK``< zx(Ke4eLC*sJ`u$9K{7pXp9mtz95WlN(|wN!F5M>r@pD3QjAu4E<-S9L)BnbOEX&4C z7pj_S>s#!}Gt}I1rX~2B=i^kLVS3LqK<^>|Z@|rqIL@_SLcG|mjg&MIXsnn_be&$ZT>z)2IP zgBTY2bvORW*SYfe^lDc~PB6q;34$CRCbstL`D+4O5@dvC5jVm7r}>3qUTmfW zud>!tQ;kcArBaAajV~cSY{)mv64pE}h!28%eQvR2T_79;smyY`DjWpsz%<>K3^`3O zpAkD9ldedc$4%hxYzo{w_U8z7ejZDuaMo=PFnkp@aO%dAXZb+I77Ks6b{roPsBM^- z$LW)GwL7$&fG*z9Xhl~`$RL|t%OzR)L@I@$rwl&Ggk<$2hYje;9z)*8WVt^-2HFI< z$G|QI&kW>lG53GRdOAR~p^BX4gS-QhmcWB&@LnD~LvNL8Ucs(wnjklDxDmw)?()kg zO^^@r`lCux>GGYtvr25LA#=u0F~zppfoOvHPan%Cryo3@*Z75No`lL@Ur$SJzoha) zOAeJ1+y|C4fj3j+J|Am-xU@tlsekvAzj$4yrzO+ELnW|EOZ?#k`NS_v=Uo~I{FOdU zRnO7qQnV(9@U2P9H#cv|h*B_>6{*WAd5@h#v;Q7j=^U0_yK1*_UN zV9f_s64rUg@e!~{_8g1*+)A%z6^nEqA2B6Q z$||V@#t}uvN|nOyV@hDPn`q=GQ7*|^0$)-|GVfDws+P1S@LeqRr%C27_N^E;K?a$p zEHF{bo}RyJ0xcv@|2Bw7`mDlT$Mi0LjRo=2|Wi0C`b;O{j?HHBw1;<HLDw6&L~$LEwl8t3QV*gqi-mbY~-Z<~TlYXJ=2 zC?5$vhcTMJr@GiSFkon@g3{KSfs@sB3MTj1hv z&fluUEXrRhh@b6a`_vl*p)uj;ho98nywmJamb6MajepX>_b?h5=9>jF8eN5w+X&gi zmPKMX9!C<=r)Q!Y48;%l%oGqxG3_}~#o}@;(FDd=g^})+CkFZ2I=nw>7OkDSCdl77 zLXG|JCs|bvl}e)Ke$z*(=bH)xBn|7!fepNhR^)MjhZ{?!2g!aTDh7evA_HDocEF+Fz;KoRuvprN5dZsdP2tw;E(w zCa@PA@RnkkcUfC!l1akm;|IT|-2}I}Cdu@iGp?F|{K8GZdby2LS5`mU1pI7kmNWc7 z#+^FMCIB+BEJH0f(AgEL-l+-9n^HgmC6qW0B<<-~3leI6uSFr_&&}f#`$4?X+q*n* zCOuQ_wp1F_t==e!b!<=P=+a=}=^T#en$=bk;2I5<9{@~Z*tw8_L(Bs2Km7Rq{hl z48TtW{xpQn`*y%^0nK!DUT%ft0e3U}YnHcN<6w{tnm89!LyC(^)P>d`eZGa&z;xEv5Z`-GAbX8SH1KtL)j z>j!zjj7HeY57HZ5C#McLF){)1OYmKaE`sG&q`Xl~TY|R_;IUyvRiCOh0cAMXI^IuI z2je~pUm;;)+|rPsDzvLQ<_GFhDC2@DveRN*u;N{6n=%dpZWi&h`Yg!@f%i|4BTVuk zMp%@>B2cXRik*) z^9?_*beS}D4R@U!-sY+qf6qHBDYffZM$0Lu{fpwt4=9^pSSSMVzI0P7vwEose5rW2 zl1hOD+7sk5$7Plc1zLjSlg1S$LP^8kgjc}XbYLA}*Tg&v=Zc_c@j8K`7PSzyE7A@d zh$3SG#EK>FG7Tp-0Y4Xz-f-~Abnig0zeHW~rBZ2eoaCg;;W$N0)<0fA^QB_sWAY(+ z0D$$zXuu#q9efI4bX~a0Xg3W&Pd@m!H>4P3d`HN{dw6@|5I>i*C~XT2l>42NCq-;X ztQJ@$!NeTPT+l;{PrmIR3ZT;ee-jE{h*(@EWXST9*E?FBmbwU|S=&<2nf1u*df=c5 z_C+OoN|u>^V8P)TQpq{DREiOW-trY7C0`Phkp33>R)Fc3W=q-xOSE9F;`hxc@vU}B za0>dNM}9ucM}i} z^?`&szJ#*QPb6hSMC-ERQCZ-A%1ovvFjvJ7M!OixbnlLGFEVMK*R zf}faSK;A$lo}MuynjjNMKMzp(kRbJZUUm+Zq@M?5s3p+I!9tR~+V%IfCFjY{6>z7C zTTm>(*$GxTf^54;6Wkngh*KO4*9xvp#iztgm((RU!0=`eLpJIgX=g*s|1 z7J9oVE`>O4aC-_$?q-NqMGnFy_w4R>seGPkw&@kb-BDz zcqhT&RFe6z5T1vh&p;dmDCVzg?TP`qCzL=5t{-HgSrB%EMN6<#=uAT;Af{27zh%+{ zG&tsmXi4y{RU$^YpL-TX3|IKQQ|c~^JWng)U0^~bvVy0{=5p;o$-@e`IXq>0lvuhQ zR{YS5&BxIX3C0AYNqN*$ad6GWXv|_7r}XnX!Sqr5o!7JkUnKX@JI&HNM`^IUzm)H- zp_tVZ3x76cpeGyT{L^z8#oN#J$#K(HB7mAI#ISh#_Y^fce?&Y`8bVudCDZZ%m$dle z1QOSeA=-~(C>;IuJh2;3Q!tI6ri<< z+eW{WL3j0!8I@~pE1xG~YLOH+Q;P9kfM<;;`PeY;H-#URU->Q#m!4n<035o}8TKOc5VO z`%M87AL8)3-xyim@e5u3Yne$roY)dr0Aub)GC@YOMDuxtk5#%$7fK5@;J%89!v@UC zg#c&B=8lw1tm*Ro%3B9x=PtYIV%=YNeJ9-{w53G<`jIW z#6p(+D*6kQoI7YO0R@HX+KwR?HN4nIXLnTHJEm1`WHc+50n(lb2GVzCBdt01z!Om zlyqr|hW8RzLd+?e&-)O}BoqEYrgt|8K5u&{1bGyL`!;lEx!L9){)6BpekcdD4JRCc zum6&?k=aJc1W`3|+O>Z)Iwq9hajK*ZZZImKTP1&=CCIo4V(zL;GWkI~z#eBkE5^Zl z2f!W}c`pfa`+^B|i4wZj*+V7YL#En^z;}2FO8u=*{fHn-VqkJv;F`cCp6NX#Fn`iO z%-h-`kU<{cSPEP=5F$|An}A9I0q7wa0GJN4W=!D zTK%-kKu)Mc6$0;-YhOBQlnAzA@3AUQDKjK(ofiSrRO}mKOYrj=Hy3#Z(oE-D&-8pK zU>>M`+KmH;}lpfVPoK=>U&aPZ-3Izi=D0A==VqnIV9%g$^xf_39ZcXpwqTeyv2V$zVTi6sdV zdf|a9B@Y5?Nx9!-P9>XQQQ##R#|J}Bc%K=K#5z9gU zYal|Jzhh=PRPqNOgpcRXT&j8pah&e!(?@ud?i5$WP_E`JXyhlLUz~J?=Te8 zmf-4eQ#;6w+jqcsuJd84V(q8x&>l|paB~lAu|)XPLpQAwKj6;(?P8*cPgB`pgTH68 z@kahsRj{H4iK@Q@g(pjaK0jU;1Xl`73_oRal6tdUbXkTQ3_^oa1xgS4Nzgk~nr6YN z|87>*JwOr2tc$LabfvUqw9@7fo9QxdrRvfd(T7SV6IT9BdGVebcC94AcZ&EPAmCYj zg(aiAANtj$26WZCSxBQ0PSP`eW zc&=z@f)9w^0viB+t}EZe52v`F$ar%>?CMwqght8KkZ+QUOMJtX$nWJo6o!vu%D^+^ow@FSMj3%;b29PnsZGhvk?6K_!wl@4UWnJ46!1iK;qRA}u+2 zOF{)v6TGM{p%O*FdS7WgEu0Fs1b2HVmU$d$G!c6;c zz$$c!fT6Zj5`pi-Fnz3Q9I)n|Kz{%C4%YEvBQp@qproCa03~6^K?fH?PF?Lo`IbuO)VMulz6? zmzfi5x^O7=jNn7pE#-Ol#WSGP^Ta+8xCQ{*V44ZEOou6L%+SSdyadGzN&HA}oXGtL zteRgA3!~vG(cWE6qjfws)zmt;QIN*zW4u1?yzw;M$1t?Cw}mzuWuirSi=jI2caMji zhYc87H)ES$5N8yZ=_0`Gp@7K%U`)6Ts|hslDG1QmFYYnBjr3{>r|_C4er2fvJN#p# z!CQab&_)gCu?R0a*aEf(RA&4{rL4MK`L;^lAV30SQiD4{JQa^Ct3_%8%2u|7iyF!e zx+#Z7Jy}&`^HyoIkV-7fx$((ex!Qs`{D6bJbBobZ%)CK~6$%LW;Smk&`=E{&66jLVpHXxKFo z_x_;*0+E_`SB(Acu?)=)VaBgujR3BQZ)ZUefjA%FYJ!g_lL`cs5c}hG?1uXJ806?L z5lZ9EU;J%Y?R>?oV+LYEM&QoKl?~x68yaWm2YA-s%K@t0ELCl^pgj4w&et_9fqp4X zpBmTbDGr)|XJV%FCyS-#0XHa}oL>ZNrRH4f-^E#`EQ-JgfhG&A{Bk-OmoGx!b*$fE zXM%KDghnoP+=06@Mh%h85Ga){A|Pi`ZoA)kdM-iEp2n}Zk|<)|eU`I>fN3vt!0waR ziGy;Y2u6aJ-WW&e<%PPFl1(r>_Y?MxVu3LwA1V=WCw@D-ARwfr-es3j#3e@r5dz4` zjPrLTMur>`FqFqh9w@d+5T_SOm^d_6C?F5e1o8F0l6;o%7~-)UQ2R5TKP6nsYzYrc zY~sX_a*v6Z{C0LN;i=wr&2*)V9!{x&J2|r-XaZ94g_ax=NF9=9xvR0t7eV5XMUs|6 z1hd$QK$YTRfhl6vK(lxrD%o){mE^|7Z0MW74_8aEyFxaXvrUj|D(?x1_!74!@Oxe{ zjia%B5-3%AHGyl9OnhAQmn98BmQNMC=mUd#gDRdafdN`8*0u|jvge%?t8FO}goDtY zVb2LU>N!r-uGP_T;2DVLBSVq^4$_t3i{D{Wy{b{6LmtKg*`=f!0J6Jcn2AEn>nNwXH9T%hl9jVRhQsPl{hAH^E}aoN|(uAk_p6< zs0KD`;z(#Dh^329tLQA*(0od5(9x_pr6u^)U33O~fw z;}fHq%lr{7W#0(~*+5X}FB1w}{pARGodrkD7-6&s@QIrV02uf*RvCO3wId{Zv)|jN z8pz+1Sc-9kNd>=D0vQq&uTzWGz%G@l=!<|zBtk`SF%M~Ue18cEaK)oi!@nyMZmn=^ z3FLzvq)X?6JB>`3?kz7jwf38B0&rCn%_gL6y9!4c4FSXVVb|7D zDhWGBku>HE$YkJn7WF0qHG)<|a%M;0>J2bjC3}=wq-5G<0($*zf(NL#-q{=E3}k;} zdh|%_oiRGL;z|Di_kmC3X}tKd+R+4e&RS+BiUT%0C@RIyz0Rm9ErD3i$~RGOl*HSv z^rT1&CHS&Zq>pJY#-2cwL`@ulhRsg*Zhf-|jw`>4V5uA20+Cs6z5{Cxx z?ZpN#<_lI3OM-Yzp*^5LTmX<3^*}}w(Csmtwbf-og>1?{Brva~99}f>rOY8N_XM#1 z66y~Ez9l#`?#c`SKSrCtPwx?40^qLL{P8Bm%fLo?p%k%1@w#hNZfDW#k2BOgq0HYe zDxo=?neZ#-hb2JhHQ0Rp8nC7udwST}Mn6rOLsb&!vWC`08CNa^5IjwqsYR(LKTyab zQBO%TRVtZH;9hJ`8ih2Y-&9%3+9tS28dcjGa{gRAXvUx!DrTX|u$eAFF?w zAmO9$FpHQaJguM-$qw0_w5f1Q$UsPG{ICgSnBeoX(vO=H%iLpWwooN=DzM9MmDoqh zPj%AxoOm}Q9GAQ=p{z@>trDRn@UCV4bRNfq{SpT(ns_0di|$~Zec?5% zul$Ok^_K>wX1ykG6RVgpF>4cL$O)?^z&Nm4?p4#-tUb9TXwoL49u)dw?XRomzDCBC zd%h7AMNm7LErE;fO8o36xl#l&_pU`b)!9SBU5i3sJA9bqQtvFlptp1!_Cw+wnN8{> z+@lRuMe?FsbLk#YlUO#0D*?P`UnXt+PF)kYd6GxxYO2n2>5^U~(2`%94X2gR3sh3C z;ra_osFcmR+Y$x*DY_(qHHiGZZ%#R)#$+IZ=!`!TYOqk3;ce&aW)@F#X(UhrU7Oiw z33=PX4Fr7*EC}yY0CyPQ$8SqG1#lC{#LM_?f@SkJ5yOd6Y5q=t2tWxOxCn?j0|9-R zyL${`AP5MGQ-;U}akBFjf|RYxAa8<9kr^{}{xW2mfC+EsciQ)s&F>lqFIL@8WziEB>P1tQ{gC;#I=(WunZDX-N|--wj|@Et#jE z)&k-t*mb39aIhFVK z3T=%;X4a)r?;yCtiu9i{o1lLBtGR}EPlom=C=p9{1iQ=;-cd>aXyHxKudr_$s60#@ zR0@9$OM!iwt(yQG_Nu`LC)@)l9LMhit*$8+In{DA&tD2*e!$1{t#Cc5(OO8off5-f zKkRC7X8QZ^^r8m!T#WdF?sV%xu)7J|3zbSABdDRbyOpqmp82Z-1}Bgb!AInN7v>Oa6^GWfWs>=;o~h;Sz9mZfnRQ8^!ch{Lo0F0EB=!V4DbQ}E zJd0`lT(WG~Dt7jNJVaz~kkd=)RoGE4xX3#-+lEjE1+c_lSreIA5E}Uz(7DxH8ZV_EGK}U|GT?fe4GvcdjQW&K z8_jNHdX(?z&epTZgjfZoP+F6)hZW3z-e-;FCU~3!zArJznqZ2nW1}I*870+1Zc{A} z7F=RdEZktphO$!QklZD-n!B+r#*n!hA(08w456|6=;pMBD^f z=hze7ooKIMIsbSDEfhrG@X(fDc<}GqZ{;cacrzQW+p7l+1B{Nkd@NO{}(I zpLJY3brCa$e;FJlS!woPiI~9TTDPSlN53Qw>>+qsUzOyFt5%5(3U3w&dp}kkyr*Q@u=Qe;f@PO|5I4c4 z=qcGBjU>tF`IyENB?_ZU&IyaoeD3qLpJ?}VIm^6fcoj}fD zJRM=@)ahYI)ID|B1^ZhSk!2~L!Fo8qQA*#FQr&&x5Gi7>6WD4W_jwkfx{g8!l;KVK zLrM0?SY2>1znI&aD6Z;$aaoCYOq=j`a2r}RgkO{%LpOw9 zl)fQ&rik=p1%D%wbbAz@#=(VN@wkutTyikXz96;dG!q+&P0dpp2PPBnVe+wuqu&_D z5B>++ORxhU=~jGXC8@~6j}!8&_%N98EKhS`BlyY11 zB~c&x$V#fJ7>-R^?1uCYeHy~;14X>wL?QKt0A}SW_M!4g#n`KcIBGeseA_Lv1fp&x?N%CcFK$aGOGci>UIT%+X)Q=WLyJ8)$J^h z=(qA)evq?x(ai{=3If66c8`}p(60faX9QV{c5mw#5Po2m?)LCQ?aGBn;RojGMhHLD zD^h_Fe&98GBZMESz63(}fz4$jgdb{*9|++G7Nm?2ey9;gAcP;7n;0SdPy?ljz&+kJ zU-*FsyW7(b+`DZ+_<^goX|FFk2Z!)Oek+69vW<{_sC%y~`wWPD_#S?!{04)#(2d?}uLioX}4hDoDNPM@4AL?Xyh!lQcWMPExgFhDvfHxd0Yxsd{i`|}n z;M!LM!VfCoMPir(0<$7>j(qq?Kl}(ke1spEXPZ#^fje^yh`PjHmfO=0+%#iA z)TJL`rJ6fV9X?gujSzK-Z(h4S{lEt|4T!qLSEJpY`S2Oh%2%PV61S5W!3%?`NS_gv z6g4A6Q2GR|0Z|=zX1hItvL?@=bVTLv;b{&=BT}VtAVlzy$L0`btu&qp+{$B0;c32< z>h|Q&mnMy2@gMXyfpQ0{GBXwQzK;p0y`5bw~t!&qys1yn&Zp`P&FG zYa-NA^D75wwIF!@5QbYg$YP05xBt9ykTDXW7F1sm6tfFLzU`l?TWO{Lg5U|qO^4NG z&10T`-w-y(^_QS-2zm~sNVSyksnnVK1{lg z7qCbNB_SK+Sr8xrGMgj?-INw`eFm}R+KF>R@P$$v7`c7zSBFjxu>MPxbf;}(=R?PC zVn`SxQ`(-5JC9e&P(w^?G(5W;> z3T{gK;?$ecKAW)8F2U?+U-!9zE%zD+o6>6_Je774*l1g66|#p`q4X&bkh^}p_OUBX z8TLLnff!|`-d_}li%5CybQGZw=^j5#u>Pc-Rx%CB%w3;`aJ=xL+MP7-e&Ef)hbaeg zMc13sUOQW#9-%b0x>#(yQ+if<#AXvFI5_wo$ERl}l19HntI2`*VU#++Ph@6UI~e5S zs~Vy7tEb1h+!Sf?^rh%qX`iwRYb?lXm`o1H{o4wDDE-&_Q`B3vt1G9{ez|uA7YB3h zxjscoxxL$ZLT(7Rs|Q?WR&!4du=a=BE*7hsV})>H-R#47e}xKxAX`}vgPL<6Xit$) z8Zc`ddyMr(W)lDMIJ8+i^vS`N=~f?t4gL*b)SL&{$XKkaJ~_bp%aS96jy*V7?vvew zAf?BcYoHCet7Vj&DN@GLZOB!e8^WkL58755mvylx2jqS)IVH9bI`-fI^0DLyfmpgb zs|byfGet_JeF5@`vk+q1YBan{jIAYSazO6)lJkYq$C5LZe)se!Ia8!m`laMFgxfU@ z_VhY{m>jG$&&*rZV2Z!zu8~R06?rQC;;a@jz2r=hQt21uhH!iH3&9>6Fq6Z76#~4V z!YaYBIyD53k%$?^tXmXI9N=<`r^nfe{E~6qNmC6T_0`fiaKvSygf|jRMEjQw!qTQH z4{(vXTlDPn<&bVt6{N{x_4k_#bb>`Nz#O&F9!9epH{>@%7g?ae+c3j2}8;XXo;fb(&`-3%fPJS^R{KP4ImC#U>v z11Nsnwa=vKIT0+YJm9XUS+#UfV6lQu*V{W6MYJKXLQL1&SugYFk!1nMvYV|G4b@X3 z5kI%C3KNU!MYT&;wvx>MHkz@lGK0I`syAI(V|CZlpm&;;&mz0)X;{*N$Y#}&io4!Q zfrPBhCHaBXwp%H{tujmzZ3wJ_9SRIxga1!YUN2^42MAGr_H1b!_Go2yz+I`~o#;fc z2fD0H)Z6-!J)mGV)t)Xpe_1JV;OCky1HnYGlBu53r4ZazUay`q>w93!OD1}o4m_wf z1H4CTRzaU%x|&r=TYxX3HM_n?>-VTaJ~G(_c$l?zVdV$e!M6b4y7nAw2)xpLi`LBS zI*-*5Ze6psa^+j~6hc1OVI9H3A&fzEBG_4BtG~a9Rz)Zt@IKJV0F48CuI~CCt<0z0 z^)*`A;jNyH184PyTFq|xaEWN`2W?KWHc^FU{_oMsCz9P&90vcVS@|rpyS_&&XY1Vc zi)c;1-fFA#tZ$h}Bu03uZQS<6z907r@&Neggr*KQC6yF=U(_%q6xKPbMU zH3Y)$Gc+Lw$BNHzWr^Alc*pK{8PP9EY_7z51(iq}7^VFXgAju431mtgJcL2@E)tml zCAe)oP3V@>7K!YG(CrCiN*#O=3EPVj+wmhd2Lgl&`f4RSgGl{JCxj?77O8^=ht*0N z{@^%&FXm#Ug1(BRD2C9Oah*jP;EPDq1u6HK<_!dNE9k38B7sPM$YK@0XORYYa9FLx zh!K0A3UHy>+_$ke2W)+kFHG!76Bp=^cWma>4}8^ diff --git a/gen/standalone.c b/gen/standalone.c index 39f0a652382b14d87eb3386e479d7d37c1fbaa11..998907ab32b7f2e1e4c9669ab8437bc2ee0fe2fd 100644 GIT binary patch delta 3551 zcma)8OOI4V6i#=B>7E7#=0U&T)7>*Y+?l?QzPI~Af({BRHj}t9A!@&7C5|i8;T~Wez;9X~cy+Wta@r*CBXb2xlrU zU>g@VDsZc^QS-<>m@e>y3p;?NdOC@@sWe;&v#~MMs*S{$R{Chp!RgKs;%`Kiu*TKu z+G@aXruXLCjnb~*Gz?OnX)*yxS;{oiP!F=2vs1^$&YUr6nz>l>OQuceTjJ+SO+b+YRI>L;B2T51egmulx zrTSS+aZpzh`l;@p6W)zXys?u3MUU9PEzdZ0nW-@>IhiDj)}E*?&TA1+pooXV4RWyt z0t|@=Y?!z)0=h0-?&c1W3q0;*76lAx1c^&D8t}Y74^E>};oKxMVS;`~BHeG4S7z!5 z9^7nft{SoE&zggWjZ$k*!FzIC@Q-ZEG{{=BmqF3t}4RQ3%+ww@LG^;s3jTgoK^cOS6Xp>sC6=V!OKo^ zl6sH^sypF2>y< z;|!}*Gtfk#{2a_#yeV>+Om1gdaqud0%J8+ni~}yV-G=+_$)sjXPrRp)T3$KET@Adv z{Q3l;GFm?Q!VPVomLNRDKp+10O2^ohWU4ntT@Z^}xTGm9n0#yxZgev(4x+Oj=}kH6 z{EB-LTskdwnNmz$U@5u9-9GM4JIS|w(1jg8dxkR`>Y1HME*?hA9~Cz0!hSD@5?5Em z{}p9X#=z{u1{H=c#o`IEn3K)5;6}fgpCZ_>PX_QupzqG9jfP6kuJV)aSz=Iq;rQ9_ z1=zu*dIbmWJbd5VRzvnbdM>WY3}goR5P0}d&Oo&_zbb4QAn~lB&|f57JY`j-_?;m+ z4VBA^At!vpJ?dvg6MQRb@$lAgS9BifMXILW`LH}sv&V(w^(?#>=B_a<6gndKtfqil zH(%&tCT7vBs?fCM0JN%#Hi<~glshsjE72s@kqUtPsl{tlT_i_|C)DVW*I9T2GDxVw zj5tw1ddvZ73gA#zf9s6qiDstEC-J5zhX{ZoN@zTobY7`zjWuSOqqVP5JW2P?pdj;r&Fna0EX*cWB>pF delta 3580 zcmb7HOK%%h6qem$yKa+`mpwDK$B)=f945)kcs%yBYNZsxhHj9M*zoczD@v(Aq?=M; z$)Xg_jz!xAY#~v_3PGi^0|_>)S?~j@Rzm8k66cBsPwH&+9v{@7^5j9qjGD zYs`60#l0H%>T|aZ`$jG~2;fV@Nc7-ZrM#HM^O2_087rOa&{YP0;AG*QUZ<9eBH!gO4_r@9q`8PF^QaZlt2QgeLSH<?#*ryU6cxEm+jNrh|FGmD&+*c?( z%Cp^r^W_&4KD@DBLft#%R@L8C;&9sMVPV}67HYXnC?MftWF&@At<=*)O0I`u6V7g* zqGk*!7Dl;NSv}UF-sa$!b>mf^^VSpNhn z0jsSdO1TLZM!ZzJfaTt=+4%WKt@DzU`-t^8BI_Xws1j0hE$x8oH-ZH(pW(rG$0`r_ z&aoUe!>xkB=*VF8>3!a@*OLe(! z!&kNe-_{!t+Vd$M6ZorMYEp%#w}JyshpjeB?J-ZBmZ{7&pG>ErLPR6%b_x09i$?u* z7RT$S@{1i&mb^5xJdq6Y0o(StPAvuUSgI^c(< zYjN%|d2qE90xzJZ-72S6Wc0ezVBEFRa%?<>vcFcUa0G!LJ4dfP9bQ-YK7pH~3Iik1LqMFT)EaXI=JfRY8#6^h`kg4XK)mcrHxG8F2*W;@|=g0W_ zVV#)3khjlm+7;^GQ^ZAiQ4&01$C(R5Q>o9L`pRq$97pA zE(fWk?_*b%V83&GS%Ss5R4~OOC95}!L|I(ec6|yYQy1r~lA1Agk zZV=(75gn0Orj~mgJLlw1dLchn`XSu*OUtu7!Hu46@!(Ip5PS!od!92RrIF5!+7t1(!r! zQvYXm5hTBV2R(B|_)?=BWOTUME8_f6Z5WLvA4l*YwBZ|jfiSFgojHE&@k07=%QN7^ zu7{{D)yhcYDfq3sbsU@jH1Oh*6i1%|WO@TC%@lm@EGBW+ag?!{p1tJKpy>>xjjA}( zND*Ia4||3*k8e*+DxH_-3_Uj$Z@nDZDN4hK=W7Oh7Ma&MHyWVM3F(sfk!gsS+X`Dg&_2%wH$qJPQ#y9#iTAKIdzk1!AgIMwIAe zqC-fua!foShKZ8GLwOgZTB1e8jJ4qYnNYpW@nO8Rot+<0_4uEeV2JMAWWE3Z diff --git a/gen/test_fib.c b/gen/test_fib.c index d33cff29e7dcea99b2c7254933f9db4529239b80..efa478d0168e4173d275def5fd55d048d66981f3 100644 GIT binary patch delta 316 zcmYL@F$%&!6hw(;6G>sA7_bowD~Yg4R+E5=ClQSK>Fun&!f#T00zvQ+;vMuR`ezlJ zVVT+gW}2`GFDG|aMq_={iD*)YE*5a~Uky^4M*+XofVZB{cXycA@`F1H(@hcF7Ow3G5djrz77B#jMJ@>xxtiXUpVMw)|7mE2a~q*zWn wFn`OX(;~jjr8Ix$=bZwBXeUO?q@=wHsae{Qgb)o3=9wIk~^ZO6+XO8WQ!Fm)>d+Z this_obj func */ DEF( add_brand, 1, 2, 0, none) /* this_obj home_obj -> */ DEF( return_async, 1, 1, 0, none) diff --git a/quickjs.c b/quickjs.c index 9b86e42..c534a26 100644 --- a/quickjs.c +++ b/quickjs.c @@ -15412,10 +15412,27 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValue func_obj, BREAK; CASE(OP_check_ctor): if (JS_IsUndefined(new_target)) { + non_ctor_call: JS_ThrowTypeError(ctx, "class constructors must be invoked with 'new'"); goto exception; } BREAK; + CASE(OP_init_ctor): + { + JSValue super, ret; + sf->cur_pc = pc; + if (JS_IsUndefined(new_target)) + goto non_ctor_call; + super = JS_GetPrototype(ctx, func_obj); + if (JS_IsException(super)) + goto exception; + ret = JS_CallConstructor2(ctx, super, new_target, argc, argv); + JS_FreeValue(ctx, super); + if (JS_IsException(ret)) + goto exception; + *sp++ = ret; + } + BREAK; CASE(OP_check_brand): { int ret = JS_CheckBrand(ctx, sp[-2], sp[-1]); @@ -21896,9 +21913,6 @@ static __exception int js_parse_class_default_ctor(JSParseState *s, fd->has_this_binding = TRUE; fd->new_target_allowed = TRUE; - /* error if not invoked as a constructor */ - emit_op(s, OP_check_ctor); - push_scope(s); /* enter body scope */ fd->body_scope = fd->scope_level; if (has_super) { @@ -21906,43 +21920,17 @@ static __exception int js_parse_class_default_ctor(JSParseState *s, fd->super_call_allowed = TRUE; fd->arguments_allowed = TRUE; fd->has_arguments_binding = TRUE; - func_type = JS_PARSE_FUNC_DERIVED_CLASS_CONSTRUCTOR; - /* super */ - emit_op(s, OP_scope_get_var); - emit_atom(s, JS_ATOM_this_active_func); - emit_u16(s, 0); - - emit_op(s, OP_get_super); - - emit_op(s, OP_scope_get_var); - emit_atom(s, JS_ATOM_new_target); - emit_u16(s, 0); - - emit_op(s, OP_array_from); - emit_u16(s, 0); - emit_op(s, OP_push_i32); - emit_u32(s, 0); - - /* arguments */ - emit_op(s, OP_scope_get_var); - emit_atom(s, JS_ATOM_arguments); - emit_u16(s, 0); - - emit_op(s, OP_append); - /* drop the index */ - emit_op(s, OP_drop); - - emit_op(s, OP_apply); - emit_u16(s, 1); - /* set the 'this' value */ - emit_op(s, OP_dup); + emit_op(s, OP_init_ctor); + // TODO(bnoordhuis) roll into OP_init_ctor emit_op(s, OP_scope_put_var_init); emit_atom(s, JS_ATOM_this); emit_u16(s, 0); emit_class_field_init(s); } else { func_type = JS_PARSE_FUNC_CLASS_CONSTRUCTOR; + /* error if not invoked as a constructor */ + emit_op(s, OP_check_ctor); emit_class_field_init(s); }