From 7dea021ece06ad44a78760cb331a8145adbb81be Mon Sep 17 00:00:00 2001 From: aarne Date: Wed, 18 Oct 2006 08:46:44 +0000 Subject: [PATCH] started compiling-gf --- doc/compiling-gf.txt | 143 ++++++++++++++++++++++++++++++++++++ doc/gf-compiler.dot | 3 + doc/gf-compiler.png | Bin 31740 -> 27451 bytes examples/gfcc/compiler/gfcc | 2 +- 4 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 doc/compiling-gf.txt diff --git a/doc/compiling-gf.txt b/doc/compiling-gf.txt new file mode 100644 index 000000000..edc061a5f --- /dev/null +++ b/doc/compiling-gf.txt @@ -0,0 +1,143 @@ +Compiling GF +Aarne Ranta + +==The compilation task== + +GF is a grammar formalism, i.e. a special purpose programming language +for writing grammars. + +Cf: BNF, YACC, Happy (grammars for programming languages); +PATR, HPSG, LFG (grammars for natural languages). + +The grammar compiler prepares a GF grammar for two computational tasks: +- linearization: take syntax trees to strings +- parsing: take strings to syntax trees + + +The grammar gives a declarative description of these functionalities, +preferably on a high abstraction level enhancing grammar writing +productivity. + + +==Characteristics of GF language== + +Functional language with types, both built-in and user-defined. + +Pattern matching and higher-order functions. + +Module system reminiscent of ML (signatures, structures, functors). + + +==GF vs. Haskell== + +Some things that (standard) Haskell hasn't: +- records and record subtyping +- regular expression patterns +- dependent types +- ML-style modules + + +Some things that GF hasn't: +- infinite (recursive) data types +- recursive functions +- classes, polymorphism + + +==GF vs. most linguistic grammar formalisms== + +GF separates abstract syntax from concrete syntax + +GF has a module system with separate compilation + +GF is generation-oriented (as opposed to parsing) + +GF has unidirectional matching (as opposed to unification) + +GF has a static type system (as opposed to a type-free universe) + +"I was - and I still am - firmly convinced that a program composed +out of statically type-checked parts is more likely to faithfully +express a well-thought-out design than a program relying on +weakly-typed interfaces or dynamically-checked interfaces." +(B. Stroustrup, 1994, p. 107) + + +==The computation model== + +An abstract syntax defines a free algebra of trees (using +dependent types, recursion, higher-order abstract syntax: GF has a +complete Logical Framework). + +A concrete syntax defines a homomorphism (compositional mapping) +from the abstract syntax to a system of tuples of strings. + +The homomorphism can as such be used as linearization algorithm. + +The parsing problem can be reduced to that of MPCFG (Multiple +Parallel Context Free Grammars), see P. Ljunglöf's thesis (2004). + + +==The compilation task, again== + +1. From a GF source grammar, derive a canonical GF grammar +(a much simpler format) + +2. From the canonical GF grammar derive an MPCFG grammar + +The canonical GF grammar can be used for linearization, with +linear time complexity (w.r.t. the size of the tree). + +The MPCFG grammar can be used for parsing, with (unbounded) +polynomial time complexity (w.r.t. the size of the string). + +For these target formats, we have also built interpreters in +different programming languages (C++, Haskell, Java, Prolog). + +Moreover, we generate supplementary formats such as grammars +required by various speech recognition systems. + + +==An overview of compilation phases== + +Legend: +- ellipse node: representation saved in a file +- plain text node: internal representation +- solid arrow or ellipse: essential phare or format +- dashed arrow or ellipse: optional phase or format +- arrow label: the module implementing the phase + + +[gf-compiler.png] + + +==Using the compiler== + +Batch mode (cf. GHC) + +Interactive mode, building the grammar incrementally from +different files, with the possibility of testing them +(cf. GHCI) + +The interactive mode was first, built on the model of ALF-2 +(L. Magnusson), and there was no file output of compiled +grammars. + + +==Modules and separate compilation== + +The above diagram shows essentially what happens to each module. +(But not quite, since some of the back-end formats must be +built for sets of modules.) + +When the grammar compiler is called, it has a main module as its +argument. It then builds recursively a dependency graph with all +the other modules, and decides which ones must be recompiled. +The behaviour is rather similar to GHC, and we don't go into +details (although it would be beneficial to spell out the +rules that are right now just in the implementation...) + +Separate compilation is //extremely important// when developing +big grammars, especially when using grammar libraries. Compiling +the GF resource grammar library takes 5 minutes, whereas reading +in the compiled image takes 10 seconds. + diff --git a/doc/gf-compiler.dot b/doc/gf-compiler.dot index 69916c695..f8ce1aaae 100644 --- a/doc/gf-compiler.dot +++ b/doc/gf-compiler.dot @@ -43,6 +43,9 @@ gfc -> gf11 [label = " PrintGFC", style = "solid"]; gf11 [label = "file.gfc", style = "solid", shape = "ellipse"]; + gfcc [label = "file.gfcc", style = "solid", shape = "ellipse"]; + gfc -> gfcc [label = " CanonToGFCC", style = "solid"]; + mcfg [label = "file.gfcm", style = "dashed", shape = "ellipse"]; gfc -> mcfg [label = " PrintGFC", style = "dashed"]; diff --git a/doc/gf-compiler.png b/doc/gf-compiler.png index 64b68b96251e2f6285767d58da5a00f6b8570fd3..6949c37b58db7f089d39fb59f0f03f5661f750f1 100644 GIT binary patch literal 27451 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 J);T3K0RWt(+eiQa literal 31740 zcmeAS@N?(olHy`uVBq!ia0y~yV0pp7z-Ge1%)r2q(sXDU0|SFufKQ0)zyJTu&CUJ& z{q^FSZ|=6wdbMLw!oykCmusUV>;6xdWpy`5IKbq& z=D&5jlEu`{jIHLWLRM0#J-@qh0ozThit<;K`Vy4$|VfDu7|z&vt69Q zq5Bp8T>gJG z6mC7vhHqDIbUZ(ORM48C{EB#o_;*)N*@oz>(}$(o?|8^I)RrE7_#;`)i&|XA0=FnpNHdz?eIA#&#=UhD~BsW1L)yl}U==K|x5PzkHdJ?6)FwdCr&4JW&CZ?(y}Bp)Ep ze%q!jeHBApIIHcBjjrjJQ}=8rl4z0VKX$UfwaV~~ZCU*)hPtcYt2cc1oUq5=s`cDa z#wR6Jp+73;tUiA2hlXr}C#z+Jh}F#hy5W=Mh2wmeE3T8`WDkVtF0{_K?m5G_Bf$R!Tm7+38!Xu$c)2dLe(bDRvySD!)?J4_q%A)o z(_p)G>BHWziIxn%Uv(e;YM)+vLeu>RL&?fxHb0i1*RZi?Ymg60e$n>)lox z+A2=GJ>aa+fY%yOcGc zbK9kh*Df)waEX4Ik)6pHvS@9|maSVDv@V8O-HM80n3|z2TazGhfEzh~VYTlTS1g*j z8~1NHRaariux07q3!abn%H(^$fBQdbzs#;+C+^%OKTcg@ToF>eP@3)i@(G;l4=ED;&;81m4*#<9DNvpTTv!~o_J6AFNef_I9YpV6S8D?Ehd9lR&Wmn+r3!3(_ zYpT<(U*)vh!c?;E#x7P#{z zTLa%#aVt%y$%pu-?vtFj|8>^fF7c0!Yqy@+Xv8Mk@Jn}y#E ztG%+V?=xIj_|1u(!9R;ODQ^AT3qNmepU&ct3`&bzg?BZcW31qXCHc3l?{0T9F0kZn z%~L30h;w?uP_lmKh1zOGhAqpNUf^xvJD?rKeRsP!qeC-DJE*G2)++h)Rfu6dC<|S8 zc=2anzP?yPT8P}P+n&m041KFCOZvUtUNgu9$%2QvE0HI> z1oP!A4~}0I+O^u&Z~5F$VKW>h*XQ?7XWwnF$zZ>3)`i%6iB5N?TvoFyQ!lC9z>6cVJ2UQ1)CtZl$eo~(M?z`kEd$-iS2XHGfX7cdFVeoDCf_6K!3G$$zc&IarOz9Uxo_i zKb^d~h3|lKX-nR7Va3}QPX6(ine}JJhb$}Jjq+Ar>V=iu^F$h1F@sK1=+kSrl(Q|Le;XhCeM?PTyVT&$$@KQT;g3 ziv59;>%zzPdl&-TY!^O`XJiiW0P#y%1KfNUR@(=c@Ezz|<@7yo#S57R+tSu|dqXZ- zGVIpkzAL>|shA;eg(A}da$^6pZJP7*Idi{zx!zl{ z`Eq*m^@YqI9!K%bEi}qMezPJ-X@2{K$IoAY8cBy2cK=>`i#xM5DCrl+-5+N;o^#4J zcvdg$zF&IvBlnuZ>~pQshct5^1@8Kj`0z_?c;em1`A3<42)=FQW0>bcc3f-~wzB{I zZ4yHU&qC%4d&`{6FIY0HR|K_A<6i9BE5R`9a=;5VC-w)bpw{awP|?KXPz{R2ts=V` zFECcPW-t8xO^G2x0Hl4H)A8xQ822Lq?Tm%in^&~syNh_qd}`QGde>RG*l$DUr$%s=#Rg-O&3$H=!m*FXQu{c;?j##XX?9cJGX~zJ;5AI>hcUc=u3Ep<#Y#{hTpNDmd;wK43WJ4fuTU7M@Ee#m>_B)d1Eo9}?{)KspEP@8dOlnzuuI zmt&SbhipT%7I&ePt5j>TKH~GPlvplVC9$fx;716p(0jGxAsmnKDO-ruBhdYT8&={%;CBI*;Pb- z`cI`R=Vlo=$jLIS3lXtm&}hchP9r+su3vlM<9R2B3PxDf2TDMogafM6h&Bahdl9Dz zx47pD-Q!-^drR5@Tu^MV;uCHA{ORy%js;e4TlHdI6(p8%J!|Rv8EnP#{8B)og%kUq zJ!#J7ad{kXFZn;8eq44Tb6wo-g_pzG-z?ew*wpw&tek*If^d*e=I)V12fJ3Bv~!^!7H+@I#Lxob8#t-<-a`J<4!l zPMedtfE9y2xX_4sv2U*c!!2h}y9P^p##Gd5-xdA`qAlyzoYya`e$An=ZtVqAr8i0c zdylOzUh?|rv+eUP+dQ}T3t|>_D&KUw((|KbZ5}_@tjpz}Vj8b~kh8e_`0O@e^G)+^ zBxvul<-F2={eNcPu_sfm{k658$~1ejgE7Zl%Xzo$Yl@j)U%hCV)*kQr;@pQC$2kAH z)f1PL{_t#h$D)7q@z%JX-{%_ywcmGsaqnA^#XS3rvUA@g($zi`SDf7c@~rI1BIoY?95zb;bSbHiov(KXm%9ZvOK}KinUl`@iPnNnw^(t}pHt9!k4-a5Fcn z*#QmNI`)Othdr0G_3@M(>RA_P^@q#p`>x4moqSW)UD@pN@`EzR-Ph+%9Xb4b!JWx2 zFF#0g+&%60XT$MkNl_lz^Y(R2`d`A|zS&`wowIM*ledD?7ryg(^=@(dv(2ARe4X>t zLAH*0{pax5^_K8PR^RmYTldQCOV*z`{;sql{oEdg55iJ)b63AV_pj>g%mCS^TR6kt zx9IV2-TOZ7#X5Ow6ZzWgJ*TUs>sT4wxBfON-yZ#m(^}h4-@8P;r0V@b>!rKvUR~LcT#4^&x_ZfP=Fi_PJ~FT3m@9nj z$oAQ$ZW87vDrz+2ELJ<8KXh)IsN0cd?@Jkm?>0ug@14mu<6XRM+^wr!lht%DE_l?m zY+25%!66RUgDe)ZR_Vn!erb zkZZ@>sSjyDGeJxBdK| zZQtD5t}c#=aP_My%s$t`2Qu;JhjSqh?@HWXb85C_N#W*{4$JP@8g5qe^Ln219&bFv zaQW};|{5cKqh$6U(1(zT=Ut#+Da1vxRT}>aGi|b60Iq zoRrtH{jpZb$9XR^=A8Lou=3>gY33hF{(t*;NUkk!v&m}auJdw>tF!D*_wIS+)Xym! z;QqpieNVyThsAI8oy}##x6d|z^@(lXyY1W0Gt7CP_`=M4@#)q)VH=xvX{k%dmI1d zI(&KI?aCJ*?T^>3u9ew!dox>ApzDiEkxqs^^Hn;Jzge@%Du?B1dG?K!SFd$dn1y** z*G^K(QPDJiyWr_>^Zw~&d!KD%oHbo-UdN33*1vb|REx=h{E#a8A~V&FD^_$p!-6$h zanBT)+@AEGUYbAG`eCc^v--9CM^A6B{lhZD_+!L9i%FM$-7jo-`S0xGrLpTQr;Dq_ zocjN$b@sGlM~rnpuQ&MXSH65}Vc;(I&ojdsg{;<|`N27-WTX9at2hRS#69QYOaHvD zv+;TV*HiXiu-AH(dHds<<{xTVUqnp?}rs@&D2f0&OH47VUhje&+dEvJk&3Xt;(-{^Ytea@8i_^zUM*T zpRH`zFYf-Fhow$*q4n8|y-S0O9?ze9>asF}tYS%e)t>0eN1YAom%bkV$^OSI?!S7s z@6Gq;;~Ve%v7ME1#T_7kHe)#TGJaU5I;etIE8-Byo0>@d0+hU7I*$0~jGv4lhnAl{m0+ z#74I8t#D{wnEmSSpOdM%nR^-JU0yfFJ&@85+_ zb5ctg?mI%98pRu{ouBK(9@21O>erb^bG}8g*e$-f-9vfd?=!!0!MwZMJ*1cZKJhE} zyC;j?;=A8D7XE(Y)6i!6NA9NP+$&KLtLM$=_!9T}&;PF(K^clYSKjMA-clDjW1d+M zPcv_^P~$hFyYl&&i^Hy`ZFk#c*uVSnnmo#`m{(qFZ=?5Fv+NA>T{v1NpZFP!|5 zS8ION^eExwB2CYZOp;J9*|YG=@95sjzq3qiC7&Bx%>SJEDQQ`>n%?K4+zOLR=XB(H zH}9KTr>`D#D>ftg-_pIit)&+v^0vR*Ribn^`K|Ef4TZ&Od-p#5^h~T$S$)s@`%(Ke z*2X{n{3T@8Jqh9MT(P@i*75ec?V5M=abei@q649NbFSO1H>j^Sb2uEucQ^E9$-Tcd zY9*RHKi|Gx_It_vWeN8pcId2&H}&_|DW3f#+R*m&)`u58rWZ@_^=#f{dM;UKweR^-agv9`el^d-~V@|Umo+SuvzSQ z)P0$*)#T&hcDif!OR>Iiy}WR@PV9?j^Pj$2hi2b+xq*Auy(%OcAsCHIw6xa2FS5OJ&HU$2o0`JtJeX@m0T9`{`xbm0$i> z=P!|7{orAbQ}^==nsdu994?(L_c?qq!`=+*lJMIl*M5I2sJZp0>#L-*_`mm${(cNp z{`_!zro8FCz0(bs{oQV$`#x1lH#9(>ecz|n9Xm|bW~b+WArEu3vgl z?!Idyo7}k*&-aGRUDwO5^w>h}@2&4?%qD9$Us&2}WtxAxg=MXi`I>E&DRu6%GdEn7 z_}sXv|h`{eM2m#1%E));p1r19OBH^*>*X}-wLfe7(I~X- z#fA09oVS0L6c*mT<=B-L`P&!Ha&CIP_}$01dwVv1Ns`l*J5b#3Y|dLEXtnug$Gwsb zZyaB|>nnNu-QGZXyPcc*GtHK#VgIs37Kq!n`t`LR4O)Gvw05tn`LYA+%`#2 zdA)tt>GwfvmoLuOi^+3NzZ}-Hx%rH5g#6;!$2x*fh+dh!$Cl@=%>~yN)ApSD8C-pu z!Q835e97GSItwdh>$iRV^ZDeKPxSK_wklcm^TOKuZ#3h6&KAu4ez|Lhb^6q+mk(~+ z(7kM}=*xut6UzS7c-pNTu4KJ?SFB$3JJ&;7f+cWo}DzL?{2`bp2+=Vm_YZh38a z^-H4nSCu8W6|MSc@@7kBHizu5t938J^2-%_1(n{HMp3TPSxX$|D=yc>c`BOckX`j z+-KAFzukIg*7}{5U-nMS`}1sbweh8w*=yA5u7|cC40`%FJm$D;X<@dR!)Ggw*sJx& zpWNHDxBA5Y55>oKvi{j6=M-N2l55?4y?Is-lz&xhzY@Kx==JvgbiN-QcK7t`C3e}( zvv^=^Rk=STdRNfv?USGL{^*IjXRza~3P^HLuKW%s78 zy0b!iQ(g8S*Tz|;BD=Jh1CsuR{m5o2eXUg@ns-GsV!^9A_XSn8t?Tw(5wu#sw6}HL zwkvb@8-)I?a*+PT9UHsSx;ilH*WHG+FA}?E6%~AH3i({k==;*Rq;$zSeZN^r>(7e? zMC{L>`+oVmHy8eX{hh*?`t{E}%Y5%wUs)|S7cci={oy)yfAzlEyMmps|1@Tua^>&s z=d)KXE_RTud+_)3-Yat@cF9-FYbdIF#QSAyb7^|%yW8y2jmQ4FylBhc`fkpJiIxw1 z_Y3WMsJ+)hwIqeF;yQopJL%b_@5}qnT0W??7v1&n@!D$Zk`z9RgX>%Ke&oEqH%I(_ zD}&$1+3%P1Z+*8`a-!t}75m?DzXD$0dwHkQoAJ+%_&W32MWyG@CCbe^Yx%&&{$JUz zU*G@fpE>>c@p z->*8^S^x3RS5}M9@7FQU5ZJYKeOlWE#-#$gyzgh7{rP_iUxVPn+h2d)sc>Q!aek3^ z%hPWsi=gEK1*h`su2o&F9Y+{d1$VVimy}`FYWcIsdLXG0qU!CG3%ZJUeZM^K{FD8*LuE=D5q* zQocIcvc%|q>R$6>k#8RvT*{dEE#vu+n9p+Xqp8N0{cjzVJ&}&d5R8WR$ zS*J5Vn&Nop+LUTG$h*Hd<+X70t!lxH`VH~dHmh>X>9{a;YV*@Qe)eb8N?v`-n00|s zU8y9s_n?&X^J@!>e|^hn;j<84sGTjn%T)c{k)8{T=}IN3xlYSNUd=8z6`j7L z4RtCjeUG2@<}eBG7Y)XOyEa{0Sgh9S^V;!N;+?F`iRob#&ucv9e^I)l>|?Xc{Y8VY z;I2)}E~ILfBo^zj>9(FbdVJ~jomC&5mNnj3#C*=>#i?6wc0JSGb@0i9r)yNxIOl%6 zoXl{}>BXsAE$5zISSheg@%R}(bjLPp+jpEaUfs0DrmKUt!15t75kNj3!<(s8l(hv zZF(VtXvpK4d?j))=-QLY$wA?lgSP$fVSMxJ>jlouG26}mH@1HbXxDiBwalhG`PJ;* zOD{M{tYlxkSG@6Cia^Ev_3eJ^g_q^G>hUg}H>-f_?!=Y)<<<)y+l1^nzVu`J!JdWH zdCwTk>TFA-&7H+9|6bYh=jsD~XZ0dx#Z9O z@yyd7=g-L;IJUms@8$>lw>|yUy|>yIExGHSxh3G^fmwXtcUVmMdT+)-$?O*Cu*W=M z5{c6T)iguIgZaxV7Kb&r6~2|(WwE&XBm2zvUdHpq(&T<8^)clA{CMH!1>xs=OD}cL zP@23xV&-n;!_GmgEkf>ny7aM2BJ8n*;OErmfog?QPOp5M^I-`yK$7pV1COYYjyyZqa>7oU#We7h>cc*p5QnN#}nxhGa%h=Lv)Rw4&UQ|R7uQm^iz@gmx-PtZw`-ZKQ?=}_vk!K5CUvBzPY(94sDywwR^2s+yC89_q2Yy74>i$Nb9_+TUoQ& zN)zR;d+yKSewOd{n>@d4Lp(L6uTFjHXJ-tMA~U}aZ0#}CX?e?cr;LUB z_L>~%2UQEvC2{TCkDrE5XZ;b`vTjZ3i(}pl^W8w@vS0BLz8_pp;n&WI%{6(MF?Z7~ z$@Pa#)7J><-4WJnz3#^;pYO-aR3W}lJ6qIhdjG|n1&Vv5=X}5Bseh;~t|Fj){$<;b zhjgGSxaNuQa@#*z?sMt*laxJ%aT%$5f1Lj%aH!(prLCC`4DXdnQa{FWV6PZP zQf1&3`01LmxjaJv+d^$;$@SmmH@>cSa{^7dBnE&>{}KTU>4n-)!(Oo2wx8o%dx(GP zyTZpDX*_eac2^wGS1eg7!!h@Q-rtfs)27o4i?_S6e=u3hweCCSbH$!yVg;VdLgnuUAxiJi9nsC4Djsn9to6+T&} zcg5X1YlYR`l^%<|bU}BfpH4^WnJ+JDjGXef{|tIDM`F2rafM<3**}aj?k~hLgSF$1 z$Ssv#Y5UXZiE`%Ycgy-t&V2v*;WVz>aVwp*(k}XMHTfKHX?5b(*H-UVxAmIKcfT;+ z9y#Nxjovf<2L?{tXE=+W=ZI<3%bTy7X8WaP{>RGKy6!rCLjUt0m(7^fe#(0L^o8BG zE3$6fUUd817%>M+19uE8+n#) zUno3#?e>k;ue3@o-$Cb`R~2ylAjc} z>`O!X4=axvgL+3w~BbFKmW{o*GZ>B#6PT|)itW>vLaO+CkP*<;fK39H1B1_^Dz5Oi*_!UZ0pH@h&J+$=8#^_(y z?!9@%sD6p#)w2x@^BiBC@>*(iZ>hA_Ju4xrg`YY4E-iEwe`rKE#E=(15RyVs{a7$Xf)<##c_)^aa=~}}Qv$>P5t}Yh1 zRIRfi5&YL?|v*eO`+P!<+v#TC2+-X=+SnYdu zX2~b5l3$;$nFyq3H}X1#U;8EzYclo3tE+EoQmw45ryJUt+2!?C%k0WjaAMC9*tO|X z)iG^nFK((!zy8&zu(ye|+y9-$q zTh5lR{_@pOblcxcxsu1Hf4pTsJGw~b#r{GW24$ykvDsm;QGM#C<)S~2Zg(^NF>?y% zTga^C_=0Ouv4bo}tYZt`3g(5{9p@NJ6-rnItrqaLtW&XK4{5wG)#XKlmcXt_9I^qd zPT?YRnX?>TbSafM@N&ckmhi1$T&Uf3fzectqT*%5zL1p2zRW(yx@yLT`%W+H z&aeBwZ2X{%;RBFS1#cWO>??F`D*ctITt=AioP$5TmHMprn0bMzWa+b zKk=Ct&ZSJh!1?x*!^e4sC4TdETQG3kJ<>V(Uv2x_mTzj-?clXWhh=t67H4NzI6Lxv zZ=l_>vLkEUoE z-{WE|{`q`M_e?KQdGG%9>raR%JUuJ1>ubYjmy}m8_PCnAThq4ITz=B4&7m(2wMO^W z?$lxEQ!Lp$M_%|+($x~}FY4Ei>m0V+DZT6CjHrz3S2m^|s8l+pUo16kaZ#eQ|J&S) zzB^@)?~4;-a2MDWd9I&ZR`9d#+qYZFSAI&np3r-n_in`cr?;{WR4P?TTW!2qbNXg* z_`=!8x6SEbjdOaDmR#2pUbb)P*17zhJ2l><-MdjLnz`OYuI%*Ub?kH0C!IEHKj$aU z7uTA%+2V1bvpMg%hn5dSTk_1FxmVgAKT)audETR%7@cb`ju~3bK0f1HRXFoGVZ*x4 zj9JfrSnk@raQ5+iF=7nI1$IT=Q1RZ~tMqPX+mRMtlgUY{OJeOV3%;BF@c%ollE;;S zhQ1k626tzvJvwx6{p7lvUT5z2oOqtNeWCR6)1PI;A0|aI$T+`9(|WV~*nG3Mep&gK zmp@`l-y?onZ}FF?Nd12wU&>_Nc_h7lN&g8+YyS+H3rnLvyG;3D#j|~jR_*oB2=f&N z9ig+2{=EKd_p^=q(^wA}w!HJwJGrTvb3tj#yGdu}-%}`Yu;;kjHphO0_lt%)fnB`j ze@%D%5sYJqRVdjlbKil%3bc%r^p!Fkv5|j5tq~b&>d+YPf=o_cld;lf+G*ZlaQq$f z2Q6^bw!D{ny3>xci?!lj%w6&JF8hPfmUU|kOQM#@=l!uP`t|rU^B)zb@G!o)Ump9d z{+d;JhO_ShqrBsbQ>QeA>+Yn6-s3smU8L$myb!j zJuI5JC186x;{!pk8S}pf?&a9{+09ed>{Ch2m1FF4LH(Uat&;CI7v4AfH)VAYQw8Hf z?bli*52Id1uZY?=Nj@gF<71S^Y|iRkdi=Te`(8NMbHql9FDy1pPQL%A_rh86Om}k= zy@w_`AFQ0hua)%V?U{LL>hERp?S8K}gr-}Xa_{K|4~LcV%&il#ntg1O%sl3Mt}jmA zs_WDH?^9cR&yFMZ)>+vpXR6oAEM|^#e{t&8@3fY_*`;pBZKIanIeX!$@me(=y(LdS zs~(W%h>fhiUwZYPl;GjzTef|?T=Hpu#l&?xf8MgUtDE50aZvI->+bbXWwjS-6q$bL zp!aU9eT(lEr!oG}a0vWdM#W$?#tRuxje#;M7T5x*G0uT%4Cttsjum1+*9x-xhP)+-;PK*JkDhE7XZTUs z@{aY8%x?Wnv+GU49iOTVpwU-<_QppXcZ);zT(Azjy<6XYL(4f%+2i3K^`4jRI)CD7 z3!{kRi+PW}Twc7!Nqx)d;Lh^ig~gw)axzxVP!X}xe)(BHs9Hc8BANs3MWgjK1@i@}{CaDvVJ@FDow zs-+*NPZq4&Ts_O_`H>s@ED|NvG`G$=Hcy@Tfp5z@vzbbZosI|Hce;A)?}aNXuC_|7 zZ#~!>{!<|4hW}K%yguFNlE>$=Zd83#C$XM%_K0%<-*yc~4gE)!nsndF7j@Tn*-eyKWzIdATzGSK*5ioAp^=tNzSQE~&D7 zy=tA4dGFpB#t&*v<+DHh3@*MbcDLqf+KZfDKi11OPdmJ=1zHJg;<`J<`Se4}2P!S^ zw$;>}X+0gX;OD8c7j~9x@jJO^cc!mY{Z~sX+q%AYc`uf2oUYAq&*jCt6VL5jbpmc| zGq%co(mMBS^up7#3qIayoe-w+d~eAmed)Bv=E|QsZ{)tX)Uv$xuF1DoTn*m^c2%!2 zP|Kfs^Go9{$IRTvnZZBf_jp{tQ}b3{-rhs~$b%k#`E|jEUK@0Vt^&^`Hgh%KxXPS( z=>M&n>n7idSPxWl+!b7X*Pr37Vu`ze)q>2HcN|XaCcPJAC)hvaUJ%;y&hWUnNW(TV z)=6r2?|;t%TKF)ON^;N&6o(h5W;v_3iXHO!du+>+?@`bHuYMXQsd1`6-L~o_cBb_;ZWs?-K`d zTh^_)BmeSk#qB+YYo~14^YYoT-B)Z9%VHaEbHqkkmK@ssR4;uicezD!FGu<60?j>T zUO!&Xe(dmABeSVe{;HI654Uv5Wxt$1mV9duT{yNp_EzDBudxUCl}b{dUU>Oc(B$Rb zsZmFNZ|SJse9!8o>mGyY=Eob41zuvgyu?K&==iU->1KSkzDbffrQ#pDK{mQvPMg91 zWWnWakv#!c<`d=4h(G%D%w)nmbI#9(yGnv9H{0&q$YZ;tyK=)*y$9-oyEd6E?3ND8 zdf7X9`oh~gPcZ9tdX;x&Zkk>D=SG}OofN=544&l)yEAyk4-@SA*?Zp;Xb3V5h zA0BhWMkYsn`C+*$H2<0Gsp^HZ*>-Wn{@c;TJw55xlF4~D_~!Oq^lcWj0yXTfeVZ+K zPJi#kxRW31%gswJJBTkl{riyFyv?GS$rmMe&w3KGwbH<;{XS^?u1oVg5V6{Os>EJ}DCa z(997Vnd40JSvJeMk8fQW>!cTIw_jkKs!+mu(Gt``W!KNh-LF98P(6bSnz73=BxL*9jYyPwC=3#6}ca0 z#lXC4Iv4 zq|b4DcEwfpB@Zw4x_>^T_x{W0#izOds5yO~_HxCX&xQG=Hy7=`<2T#Me97BgCw%Pf zckMZluT+vhbMmt3o7ZKP_T+8ink#!d!%~pDhHGJUcdtBOU)aL#^jQ7vm#;09zMWxd z!w!<@m$P@@&KY~-g0%U|Csob)w@Q6Qw_HAdURV3WW{$hn$MW4Q_H)h^&h$P%^XKQ1 zI8F2CejeIa{(v1C`*QcXL%SR$->;2&clFj8(cq})^v{p=c+~HF0?DIo*CivyKqkaS zhW|gL-Edxcpy!Dp?Ph3ci&)f$zg@=H;&<~?HzO#^hjGo_bdOtcOW}3q9UpEKoo+kW z^5@DS#{Eqfrkc9>9G~x3vDLU^p7Zk{uDJrY72fr-Jm3URBd|R^dQQRnMM>R_muD0F zrbk&k2p0eqY|?+?Hb1-IY5#7^t*_JKZ}91CD>=}wP?8#(b8%+D%O2Cr=U2FtbLw<# z7O_1%9(&DV&SonWztaJ>`De<-h##Pg;iJA3+$>X$n%T0nl@ej zdJA8L{6g*5kJe=WNvz#vTff4udimvTcfPH8En(&RqG3C@^e)bPUSh+Le)-v4Z*}EQ zFK@goF8P`MujgaMCZ+?{pyvPmo(V6jY-X?ecR4OvJI3zyEV-LC#!ko2S}lGow>HT7 zzASTr#6s=tf9qC@MRjl4thJY~oI`xqbJ##n;^)}#w`&CrYrL}eedFKLdSU9RBR29)JrlXh7@qz(x?P<0M{dhH z87KCTrVFAj;IgubLl!h!Eijk)mBR}zr4rEak0+$8?7RS)tyUGZTEK-iTfOLoOaQY} zxX41#@Xx75#SW|-ch8tVx&4|egL~m@(~$l)G0_!_gNrpcZO)qgu(bg3{FT2%+*|l6 zxE9WqUD)z8ne%~c6XOyg$c|YU%r+15(ZYY&({{6M!*So{jVGD(CJzaTZH?$-_ z%PcpCdm-~Yrx$7EuOA-yTo~!3zE^hr(Y5STTkkEpowuB~_(fYPiUyx4^L~N)(#Joq z3R{2tzNOo8Xgy>7c+Yejzf=>Bi{Q7kVdex<0$Mg|9+r;q2VLi${}_^kSC1I0MqKbaAQIvy#Zk$Kqw1 zFF$_%!ffH}Dyj1a{0^@zi~YQ0+5GKdq6d;&^0ryNmfF5}O~*w}T_Y=3&z-Z;`yR=V zzK3Or-x6Kh^fyNL4W?%vH}}o@SD78iXyfuC?e_VLoXMZUX8Ovnke+hQY@XTF|3|w^ z&Yr#g@8iej5~r55pI;tYsqW#M9Pv~WKG1Y}Z`67=?&6=9M*H(%~>z^Q+VH1MM%&rmwWfin=@1a%v-at%4Ew52VRc5 z#IjEOZhLj{!XhS9g%ankIr*#Pd_yIF*g2W|T+CP@Ti0dWpj>BLvO31(O0VYGd;foZ zW|#SNJAcYqx4`O!-T#{2>vCLZi?5p;^XB(f$z2^c7{C90C;jA=K=|&3-Ty2y*zbH< zz3_IYlk?0STUQ+6yYY4L!rP}C^H1!JKf76;JLbp9??)&&--mw_OrgYSf}?vx=yzwec#*o`B&0!KmHkGSa&yn zFSFm>U6tuk^7l{udb~ll?xz3VAO2@gM`ypY-aXl{?9GWs;(r5P_}!gTUHpMO=gU9|Am@9%3k!?wS(Wq*5N z<-hnFSIgF&+s}PelIzQg@8YG6e>blG@7wUm!m;sQiQF!x_t&HLxrRv`e{*5-I_L05 zYpY(VX!~<+bk?upi|sUjdGhj_{mOF|IPhE535s`~INz%G$XX;LcK`bOVpi9^UM{l# zmV9wto^$v!-^yRFvaE;#@mMna$40 zziReQyR~0yBO z^Nv|vKMdl9tlNM6dFt~iAL2N2uM|x;uzu_bEQO8hw{&Ao-EOP*dg_6fBscDkvG%{n?zFuw>e}mPYb6&K?QPA=-*39VB!6#1 z?5_AHz6(B_isya3Gi`p)8RLO<*BpL^!32i}@}{LQ-S z=Wd$$pWc*r>byk!mB<%m@k@RlUGqKuK%#U;$A8)Fk8?No2*!W8d^gFwB;UU{eWkwK z{cT^0wuLX89VD^sX9L!`j()I)WES z@mp(Ot4?M!{P(=Z_L#z9fzJ;&bbHP>KD+nmzKR;DT#Um9K z?S92yCuNJPktHJwt;o8*K z+3OA;J>oy}*}FyW-+s*7_CoLZu3hRm`*lF8^%r)&&%5Z`C%^gjpKnS3RHt9KY0%Ic zz2&0FW`VCYYF0d2W%K%9K784zVXwPdcbEP;d6DaZFY@+H<#WlboB8_cO24gE^U8KE z@|*eWl+n-bj`49uDdLQ}Mo!qWg~KeZJklKjp{9mUFFVcWiiGwe#0w zb)LJIj$FNLU?*P3_4ixm%G^_IDpmu0MMj zZ?mubTImk1xwF6TE%NWJ zE%ojjd)*f<<_mXkjxMqHddMpGE#_GN>HhroN*?t~_5bJYjPXzRxtzDm;(X%oA11S6 z_`bxRDV4Z1@6MOA9VYL#987-29b58TzVGgzZ<*$oyUuQl{P)fIhQnmD`BOW;AAMMI zZ&9>c)ZCsE{Lf2wR7OoJEq&%dN_=Bx-t=PA_NO0HxBS?<{^vD|>lM+*^Rudi_rG3sIOC;D!Jn?zJL=W8 z6|XySHo5He*5uaChZ8@~;=Sa2Zpq@j%dfuQl6rV)^Mhp*!;*XX{qN76J%8HUT{ml^ zF0}hOh5y;i`1Jba#g<=oIDfq)u5m9y&~}}(jMIz0p9iX5Jy}_CDLZ}v!@SGKyVv|_ zx3&LJc*$;FSNMnUn}Jc{`Wy7Du3xbK7{#>F*)w*}j$a&i`={qsJmVHQP+Y}vm;Ihh z%e&wVS+5rgC4b+9eG>Dxuy4Fv`k_myME21HS--3QRE2`ce1#N$@%oc-*4X7S?W8L8};2>xK+Gi|Bs(5Z`Kvr*1jx%Bfa)_ zuCC4Rf72Ef|NTAt`DgQAN9L?g|9+h9q@{)Z$HQ9n?03(4t$g;!*6(zqV_d=S?>`^& z`^{^<_IJfB=W>l?_3iIgCSPBE?RlX^<>YyficB{J)jMuoSp6)vHi$7U>zU<3+g+6& zul*ige?7bO7xyckyPwzZ-5$TTKHulT*_rm=*;OnP%KI{HKP}xoKj87~XGgE!mDaz$ zoqxyA>*^o=-0rzDSH<@2e2a~(>sPue>*xkz8?SeO=0_b~zMOQ%6kr|CGI(67F;>~Hpd+r#a}5jP`uB!AvN&sLqQ@wgV} z-KVmC)=$?OG#ka;m(%AjE132AxYwD2*YCo`%dDz1{#9>QFFC5Qu+=Px2i$*qT;Gzi zBU+;Jd1}+E5GgC+IM-8|!t%R6H=Syho%8JOalaW4g+K3)dwu-be)DRl@UDwmF{ggi z?D*(uSX7{NckP!wkFHLi#_zvEspR_m(7k(ZzAtsZ|9kzbw@h!|yqjxyxZQZ>n>AmO zKi{8gyHxw|k3aK8M8iM)SYlzxG53Ah<*M?WTc!&xUHF-NcjxyTdoSFbd+D^Xjm`hL zQ|og6?dBKUr8F&>B`IQUrRDwHPyFf?Oi}@>!%Xl&I(;4=Rz@-}CI3v7|Zwq_?$mA1swT7b{i7CV&3fv!=T<|GyHy z!yn6gKC%9bS;@@V^O&UbPhM@XO3SUfw{5+A$bv5OlZ!8${G%nkeU?kj zv#vjW{^FaHxo!UK>;A{$zy4XJ2C>ne4Y7H`?b;=cQ#$0 z|GwhgY(f3AAM#$jTYK~M@potHzjD88UDubs!P##~uX*~m|DBTiB_BS^YgK3qKR#vm zpFO_z+kZ$OyB~b~_LE09%db_hel%0}C+K9OA727Zh2yIpPmHtV6^onj@7Lv2|Jv(c zmr5RsHtLXo* ze4pdRT9LQ?b1wEDto*=x*j>10QPlCYiiZcQZ1cBj^7{d!^hKpJh|fk+kLbDEWUlshs)%H&PqT1ac;@QxHq-izwTUVyYYKPN}KrR z|5x@)9^B7-t-0hzU;3sMRblz=|G92FzWMw7|Kz(XVyyCx3rBglF0_7cX=kxAX#ekt z=jML;eQD>v4f@e;whOKEXTSSU()C79refx=#mxI`)lD?FtXpQD#=k0RzWn{U*8lD2 zxi7Qe{g{^iGUmEPPWh@`*PcEvf9|*L=)~*Kj81QlJGqDVT=?yJ>x{dZScF$F-v(6p+0}i#@?_rK$9w;6u3lX&=l{Bj!>hdM*sX(U zcfGaZGymOVKl+y5H6g+oyH(?%E#ukMG9eot@9OelYnR z-F42i{%gS}^Qzi&)0OYeI8oNtUw>6>-ho-Bvv{JuFS&M4{eD%|{TTo2(OK+u6PuqG zMptuXe`<^ona#Yin(h50{vCN27h1{MP5pi6Qo^U1|J|m%7MyQk*=HJhr+a4gvwmTl zjV3c{v$|J2sqwh$xMumGvbaw7>pzW`*YoptU1b0Mr|VqT^M3-@feKR(t!lYURm zrr-b98^(2uij_;*H}r8;X&3wNv#!``|MYV9>Nnq#kKVt$mNmaW>08|G_qF?eTsc^O z)BNA+fU;?Gnra&^Ox^g~a=H3`%YT2q*Up!D7+#xhD_Xbu;Bres_}KlZ2p=H?kc|fhwTlw{=w-W z3I3XoqW>G6o99g4)%dk&*=_yJ;h#P~Dt3PP?&mx1f6T?|rMn}v(|3ONzp{7R%%l6& z3-{&!4}T#1`T5WL2dyj*H``}?dbIlY*XM2NU)%D_-#L3byjr)x?cV3|C;8X+TD=uN zE?u$o{)fNkYO^FO7-JG@_oV$=UC7>6Qz@5kYi_gg`l<+Z+drC(Y@r|Tn5X<=o^!mt zJ~?iE|F36reutcl{-3;b^^@;wncufH$Njo|=>5@Wcg3~tH{4l~mRpnKxaw!Gw!;g) zidXT!qWZtz%eh}a_mfxrmCbrqKYs`0Dwce=-8#R@^409mb`L{OY1f8bob}_u>~)Lo z|Ju!Q*Y~CTipttA-><*1{2%dFQuw7q=h1U`KscuZ)*SBZpA&DA3N_>-S7Ma*)@Bsu071MO80rP z$02antGH+Kdawey_{dwT=A0e~KDdzIRUl z>YMT724;2S<~KL*!cTcZ{HJp0eq{|fJHT~nV|T)VS>%{lRd?04(` z-`+b}*w6au_xpdvo$alE9bL57w)OSPyM@oztlIQ*@6-!U(wcEICm6W5O-kfDD9*bu5SaKX29q3>y_p#w@{^XUfiV{IihzjtxkS-`u&!_q0eu6zu$W9|NOKK za-WiFPu4enU zT>O};{5O@E?;^X?bC+4oUD}s>Hyak^AG>^OnjzoIM+by*<}bRsBJ+@1Y^?sFYv<}u z-J9|IS9#RmRjY4C8|%#!E?yhv9Jl6tNpbAftDAC@zdQY^GcP&5@AlU3&#s%_Q>|{c zGyFAm_Cjl$R_$_o+v0a?R&D&Zw&(oCu%mW`$|dufyNf06U-o-dVom}vZq}#`@uRWey z{hFYMR!%W^M7=*z{Uu;o?z| zZ~tyAOAQCR?e0wTLur4XouBgWOI%3)Oqu+1>mH}^eQwol$@e>TBwl!z|HC>98-U&7st)HK6C$_8Igb3uirLZ^3nU1)C{JE4I2x!6vX#iF1=$OzMg%e{_HJr zYwjfo&wctQ_SD`Z(zVOg~`yzqT5>ftz-RED+e^#0PQkU^}R&~N# zrOSr*cdUrx49+fDzMA)9!rnaFyvf`S`Al_}MsmonZ~Fti z?wS;-<5-+3@zGT`Z>8ppqLZ)m*1bEyAtmx@>6_!HW_iXx*^;>F{wW4vr>%<%63U`o7k=I0yKbfR=c?Xwzt7J7S$b;O>P`83 zf6JQJG8x9*pEIS^UZrHZ+%@x9g>47rD$v?JwD8?)p&?x7rxwkjA+e zb}s6gEiUH%@Wh*CT~4n%BX{MzI=5$^x%ankw&^K#?UIL{mOr$e%D-xR zt_YrO@#AlT^`5nbaeq2Kzm?*fu;A{gD*-NdrW<_m-F!{_e$2jQ97W+bp2_U=?ydH{ zV|B7-&G{#ep0Zzz`+3<5=5APVbM{+C?*sdeMP7OLYWc9x8_*s#3?(OsX{jHAQ7ufaszNe55U(P0(%cm`)FY|TDZ`v1oSh4KP z?U_;?726ADFwRK3Xt4OVkd?pI`pX**?otyvlH$89Ai}F&=U`5eILF;<1wQ#kmHq2` zgS-#y+a=erR842qb%_^!hdQJ4BKmJXnYGI}-^l8@dHwaT(=SNwW;Cy568~ zi`e!{Y~MHaND1R@Hv3@Z+4J89S!&kpIV8Yw_o!6gM%DWlt{CLZdXZH2D6O%5wd=R_ zlXYg!_O)tRtNg@_SFa^<@#fa1m8*Y7G|q}m*?7UVEx9f&SfaF&fBNdASq-(NwgTS1 z5m#~~;FpY`7Ge3ra7Eq@;O10}ItCklK5T-WTozuK%%_lmH=`gQC!!Ku0$S>G@EN^_;p z+nH#a6@25$jXgVGzxq?AQL?(itNPZy=gauKo3h{8e15USXHV1%t(x9vJ}(wo1-&x~ z_+Pl~pZV#ye{){lNi5uL_(1*0TPZ(5)zVzw-h+8H{w+bfX1tAb*?QeHTrODtqwCsT zGoP&&%=n(~dq<4RYi7T=aeAbZm6>yx0|s)p@7?=G#6-_479ja$8NK$vwZ#yedBBAuNZU-^~(uHFSuaa;!td}y)`y8&tsXfhL`o- zYcHGHdES3CIc}WM({8q5{VCp}%LWH4&oA2r7iKrx@Zvew>x7=^Y^TmfPkE<#xZ39Y z_Afv5d%hP)R=u6xom*y}S+AAZup;`m^O`TTA38SPiG7-r&ws~`JL!vkQpq1S2L3cgr*P*T8@3%` zZY!$aYIxUn+hxZd>*v4S`|3I5&M-EtliRO$N8&S;rV~f#LDQBAYgoyHb-E zGB8L7fbIwoSj7MK84rWtt`j?*YkAWH#TZz54dgVB7h5Q!67ctZJU1y8EMx!M%-`HR5UHFN6hZZ~V{?G4R4e5o?8{Lkd)7uh_l z)7&FB`pLfOJCMIS@xv((H2hMUAL#x3;HuvK@QQ z&-9i)XuUjQ|C)0qN!vD;I_2JBWj5qU-MiN5^P;8l(=Y7`zj^v%%F)GK-Nsk43jY5& zlJR-%CtXhQ-t*@>^vzv*9KUT?VeC{sGtA)Z&dAceUN zUHH{E)w4uCURzY~D^YIU$2%JXObeuX|6bd?blTVLCu(1P+B>;t@wLB zbWz)-yEFX$uiKQh`2Cq5r!Od|=B_$l8YYz=yvJ15-G*^__cq?#ZZ43y{;=aUhUtzqN1mK>cme6?X6~h-f<*F;Dzm++omeFJt+RM&A7GOk^8d5h|*n-XkSRLT+e6AzI_rAV6SZVE4j;Zf*IjT#n z_gF;F_?JD;PkUCk?`M~Zn+5lUPAU@-esgZhy7N8it3@^M&%1Qn^8c0Hm)~#yd2Zi< z((jq~EIy>qWt#dfmBXrJdGVCo?82dU)APj*V-Q%Z%1PPv|tPoKul=yk65) zjYY9VFGe=v^wf>k(;nWoDnE1F;o>aL*l0t+n|W{FTz&0Q+L&{1&bPOc2j`xfTQU9U zzm9wB&c&^~=((zU!JGMCds9s~52pRpoZYOJyHid`H&tq0X-Hwh|FRv&f!3+qpX3GO#`UR>o4t$Vc51-tn9{Wo|h=X~u`gndQ8TXX{xUa5=Pj zQ|mkL@5&D}-rlGU@wwQtjC)s58N2i9(<$y-lMEY;z0KC$?TT8U$ocK~tBu*WSC)TG zZFbAI_0`NYvf;RH$}xGTj`c!q8Fuj*dFQR%d(&H2o|Nxjb&D&uLgDJgnqNYX_3j0| zcv7mhqoAPnsnw*M8$VS38Qmy7n14ajMmzq+w3Y``IART5g}W3j?D0Exrg4F2_hQrf$xg>Z z56$}Y*73yKJ9RJaUQJ9%yfoWq-qZV4vtFq<-bm67E}b&D_Sqyk_M7YM(!FNbXGi_j z|1NrNb@X+W>H$`o++`~ z3J*8`KI~}PwX;=W=LDxe9MkrFU#+*Vp?2zL7O#|W{m(8(pZw!E{ppIRQguW8f)z=H z%e20SKUFzf`p47u$)^uhf@w8E_Ba3j+cy1d_5HZVoIBaHt zJ11T{@O8(l_}iC1?GMQcaekq*e7$tS!ylin{GD$TvDmxBB;Isq23uX{_ULb_jgec~ z4jx&5TkArhT1mWh)s?0O@7SsQY1Vc~>sTy`(5*r~RQ#D?@&4x{w+Wvf68MtkuMmQ>Anqy`=b# zu=WcrR1!<4oy=$=u%``nLX8)|owN(*3BS z`AH?$ukzG5T6`70oxD){L`O}vvVTVNyw_!CW>3DF_c*jlq(uX5vs zk017>ty=s%p?BTOZ6<1Bg0x_w>J@^uR@7z!R`_*&nR zDm?Rp%KR+c zlh67I|MasB+NWFiZen@q2FrNXd}lx5kCVd}dg*${tXDZ#U-0+jmyj1p%Zh8Rd39|1 z@MW9R_FIb|y=I^BS#o;E9fkjMnDh$Wck|z|ip*XZygPc%&67H2wk7SJ3MJ9obDuM> zTIgq)_R!pZX`b7S%mv>5cjO&!9#Q%dsPpeeT#&;>y?r~2ssv;8Uuc+Jl)5`F*3RrZ}_XMLc~HFbLslL zK=sk z>?-@#bC$Yt1*@)~Q@p?z-y-||($6~9+bqPcb^Aa2zv}-V*93NZzmuH$ zVW;fY{;M|I(&Mhn)TCwo?0zYm^{#)xo4Um>KJHz2-nYx=-sC0Ewk^@x<;U|^9D^)d9kRZ!Nu^B+_H z&NeCy*RN>Ua$|e+UyE<=e6F<#cqYd6vgga54W0M2I^ZmkrJE<+=3A)z=KPs+Tdh|%Jv+BQ-|Bbk?1YkCJMJ#^ zDcz^Ar00=-&ds@#x*x62NZROo{LV&RuBgB_x8FRllYhSSoZiz}uWzvgANyf*{>>V; zKi?)zSA2D0(&-x_cWXUur>&hRWEEW&{%VfH$?aZGg8nq-HuAi0S?TtZ%j=xn(l=o- z3GpARmz|muYsaVOe``jposAuD>ATz=-*^vCzHzT6akr~j^V|zRH(k!FNuO~pc811+ zAB&r~y#zPyRw#*#zdYr7m-icOwu;Wp>wB74yL9f;F8EaIyrOvh;jQ<39+Yff^)dO$ zj@aIR{Ly8i-mebLMBS?ZuO3J{R5b>F8|cI^##b#PiMmp5@qg;;xIj zIbY-79_d9)->l76-8=QLtXt9kZuX4)9T(3o^D--)GG}`^v(x!Q@2x(BADCs}V8hXQ zcDi$&<$@Dgw4cuHaz6x-!_($!gE$vdM?!OXwQf0RqT+Po)Hd6h~;O8x0n zYqoIS(!`3xCzhtHQhK*^YVG>c@S9;}AAS25o;i5*qWJXkfJxP6QO0{>_e+@maOJ&T zQ+4*hdx=%gA4ad$^>-JHExfZm*S)IO@Rpya%hGN32}eJhS9#pMduOAc``sx!xp)M0 z3vW61PMXwp)hr=mr`JVYbD^(uKW198u6O>vt@{1N1G(k=4q@`4ee?XkCWx4ZPm%Kc zy?o=XS}Cm{?&(*qKC#}ncX`ncqwgFk{QQBrH|)6sFT+)GlJl=gty1U= z-*l<%z3TaUd#oPJ`Kqb$dWE&}meYUUZVLJ;$juz6IXm#y7HcwkE4e5<4*btPA(yU+IHc0V`MZvG<03*`bS9V=H9UOj60 zdUC2Ht*%L_tVzd+?qe@ z^@9!{+r6!ZMFKllNSj`;mbcn3(IB#xL7_J0_SD`Kz9sJ)HfbF(Zsu&1=t%Q4_3>;x zxk^Bzgu_KpYMtzXDIzo0a5Xx$JBTcJyV;5N^*+W0Te=#Y+8v%O&OO5%Dgxsz`noo3 zK^N1MFu{Nq0v$eE>VGZS+L+DYwVDHDlvq{GMDJqm=?qYLo|2miJRyM%m$aC;WSI)P z{LVWv^tvtB()FRuOhLf+;@d*~1s6G{gbCiez{avj_19633mGh4t2y#Bn3*mL$U3uR zm@q93Z86`%*qG6_E?$h;M5^(U)*gmo#1P%wYGt;U?4o^cF zKxQ5~Frh)JH=t7V0jsZrf>u(Bi$ky5ialH(n$#2oz82UjEE7DYEpgUCbG_XfaKN*4 zFefdVVqlg&CHdpDDKj}7Ibshj5?QtzxiQW9ut_vJwTkPMO=yhUny*U7(3)h32P2|9a|8-R$|g zwKlfn&y=+n_kQpch?fj~{o%6;%j_3EnVarKyl_cf?DnFj*Tir37N&{8g@U1xtZVOc z#j;KB2F0C8(C_~<4PLfKUR96TZ}i)0W#tW{o1Tl-=eC|IUU6!XkB4z(1=p*)+_A2U z-x)_gZfm`8LU7lrH8G(JFQgXjy{XR?odiqESZu}>Y3KTeA8jIaE4?4s{s z{yWj@Ru_L=*0OF^;Qy?wI~z1kyjZoVC^XTn-J#^zdUh*uQ_jnVUaZCoGvhPUN_Jm0 zEbm%pu356Rr)~a9DRZ4KFN>F5xSITQ)vdJ`=N3aOQ(9O&d1lP79ZRR|yg9v2^^ne* z`7Y+0Z=blfJ#nwy$w#xCeHZ^SU16B=vDft*$0D`W8&)m&SaDsn@kK++g+kftEY|yP zHl$7tkT$-f9XyjWefccsmC>f$uS=iny1menioL8H=^LWVd;Q&~)^$o?&7k~Ut-|c+ zy5Zj8^=9?DA^#lJ+|quZTDhP{P|oGMh`xQ`?n6tj-QRg8rK#%fUq;dIrM>IkYjkJx zL{8y|^$lkUW$kre=&W!{S&}0qO3Z1BT;M@5rOkT#I2;d!?~QEYJou&lRigTL3H9`M zm408RXeQdM37_ZwRC%7(FW1<`*=@LpH(#gZMBj){>+Wg4hxIVM8$CcSsRysNGKlAD6p!b4x5r!y=4a7lK5C;v}ohTNmow=3k5 zSr*AyZv6RDQ+uY8nbO@e0-K({UE{pad5F&2hzXE}=gT%|dAm%~EmJ<>}* z-ms}#eh7R;TX(y8heaASj;mhHn&A*TzjK@af^`uUXNvARXDA7X7eq=+wZ8XV zo26YUo?YK@$+lUQDX=eE@rFX(`{yaVn|DbUKX&)HD{KK$Tb>bqZHkxFRkzT*Yrh(9 z3u%;egfD7R2;se-RW2N*ardp&Lv2|u*+;!Al-NZNZ%>;O+8>!A-YN!imB7|R>w;{j zZr*U~YUoPV9hVkfP`uY(K22UHOnI=tyd1cx*K`7UA>m0 z_~hu}Dh6M^#vKj2%mua9#D^}pxaQof*ApfjWic{mdBnAC;pv-)zQlhniK-|+^_F9& zYkKsP^tIuIt#kjS_;YQV;qa`@A?84tNAaojgC{=C6?gPMwajm)q|)svFDIOl4!YS9=jM2ET8i$vqFHW!dD?}Ao(nI#ZrhT# zansb8qG`WWT)94|35!@A*}Xyf;uZEcstb3Ud*2b&TfA9UXo1^{xZ-KQR6My_`5Ip| z-|Z0F(6X-Q+`&rU7QODdzf^u2a>+7XWW9az#uko^I)AKBKUEQ(bJ^+S8~eB~({qb9 z{rl?6eYf|6?vlgm=Z_R^c0IQ$@7y`TX#1azT<`9Pw(@<{dc(ejE8^KEfo)lwf@&_y zzxI1hSU<1xalJBld&qPkUG4VpyVb_h=}zL81KV|l&*#p#aP*Cip@8>Al`tiQaGf=v= ze>Hckq-^aCgO7LGIPbR2Rcs3mXGt>gOAdF@ez95L%9%52TH;5lxMO|X>sQRI$a~zP zmzLhS@PeX1^Tzt7I&0}*VMFD-IX67w`ipidg#BFidfyvCS=&-mADiv+vw|F7blr$d za=+~jYM$v?2=016Yl=_LnQVdcuTy&bHs8CaUo1ZB+>59;i@h&jG*{-C+z`F_$;uOv z($l3|X}T@NrKbveQ*YS4tnzT@ zo}2V&=S-z^-n}hK>5@rz>gFi0hWkA*a#mQUP%XdqiZQq!Wgxin&zjeQb2WUe9$tGE zc|HEd`|y3CvGoU1+Zax3beE)(>%sNcewq612)!iI5r66)3n;-&pJ2bN z^VZ&j(~lha;FK$>CGhXIx8IJdTrn5+-wGC-uv1YWd_w)}e*F-EO@IAPbC}N4IBU~? zCZ;0N`dOH6-bd*+!H#yO8~R#LxEK~5pC!HE(fNRoVzE1GRY7_5JL9eO4OgczOxVxF z7WF*fg+M;bh6iisyt%TDFF^NfgHwBj@~Sg$v-}!YU%lcGG|MKLkq4Ai79Be;5*Dg{ z!aH&MT-G?SzN2>+##)+aWjfA|o^77ZTDw1#+0L2ekyKu5eDjUJch-Hb<7E%+*SN*+ z|DeMm=J3BPWo9xhWrm z|8ll5r>uIv{NdkrX*2uS+E8Xt+07(5$A15v+$jrWB1D}%GHdvz&&fujShR{G)g#F9)0~`zoH{f=E;HLOAHJQ44$rjF6*2UngHYjEcE~Y diff --git a/examples/gfcc/compiler/gfcc b/examples/gfcc/compiler/gfcc index 9750b8133..5be0e4094 100644 --- a/examples/gfcc/compiler/gfcc +++ b/examples/gfcc/compiler/gfcc @@ -1,4 +1,4 @@ ./TestImperC $1 | tail -1 >gft.tmp echo "es -file=typecheck.gfs" | gf -s Imper.gfcm -runhugs CleanJVM jvm.tmp $1 +runghc CleanJVM jvm.tmp $1 rm *.tmp