From e0cb089f230e65ea366142c62c308f1d03676043 Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sun, 25 May 2014 15:58:36 +0200 Subject: [PATCH] added 2048 --- documents/2048/2048.tex | 42 ++++++++++++++++ documents/2048/Makefile | 7 +++ documents/2048/template/Makefile | 35 ++++++++++++++ documents/2048/template/pixel-art.tex | 44 +++++++++++++++++ tikz/2048/2048.png | Bin 0 -> 34380 bytes tikz/2048/2048.tex | 66 ++++++++++++++++++++++++++ tikz/2048/Makefile | 31 ++++++++++++ tikz/2048/Readme.md | 7 +++ 8 files changed, 232 insertions(+) create mode 100644 documents/2048/2048.tex create mode 100644 documents/2048/Makefile create mode 100644 documents/2048/template/Makefile create mode 100644 documents/2048/template/pixel-art.tex create mode 100644 tikz/2048/2048.png create mode 100644 tikz/2048/2048.tex create mode 100644 tikz/2048/Makefile create mode 100644 tikz/2048/Readme.md diff --git a/documents/2048/2048.tex b/documents/2048/2048.tex new file mode 100644 index 0000000..0878ce4 --- /dev/null +++ b/documents/2048/2048.tex @@ -0,0 +1,42 @@ +\documentclass[a4paper]{scrartcl} +\usepackage{amssymb, amsmath} % needed for math +\usepackage[utf8]{inputenc} % this is needed for umlauts +\usepackage[english]{babel} % this is needed for umlauts +\usepackage[T1]{fontenc} % this is needed for correct output of umlauts in pdf +\usepackage[margin=2.5cm]{geometry} %layout +\usepackage{hyperref} % links im text +\usepackage{parskip} +\usepackage{csquotes} + +\title{The Game '2048'} +\author{Martin Thoma} + +\hypersetup{ + pdfauthor = {Martin Thoma}, + pdfkeywords = {Game, combinatorics, 2048}, + pdftitle = {The Game '2048'} +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Begin document % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{document} +\maketitle +\begin{abstract} +\enquote{2048} is a single-player game with random elements and a score. +\end{abstract} + +\section{Rules of '2048'} +\enquote{2048} is played on a $4 \times 4$ grid. + +\section{Best reachable highscore} + +\section{Algorithms} + +\section{Related} +\begin{itemize} + \item \url{http://math.stackexchange.com/q/716469/6876} + \item +\end{itemize} + +\end{document} diff --git a/documents/2048/Makefile b/documents/2048/Makefile new file mode 100644 index 0000000..3470522 --- /dev/null +++ b/documents/2048/Makefile @@ -0,0 +1,7 @@ +SOURCE = 2048 +make: + pdflatex $(SOURCE).tex -output-format=pdf + make clean + +clean: + rm -rf $(TARGET) *.class *.html *.log *.aux *.out diff --git a/documents/2048/template/Makefile b/documents/2048/template/Makefile new file mode 100644 index 0000000..66e1c8e --- /dev/null +++ b/documents/2048/template/Makefile @@ -0,0 +1,35 @@ +SOURCE = pixel-art +DELAY = 80 +DENSITY = 300 +WIDTH = 512 + +make: + pdflatex $(SOURCE).tex -output-format=pdf + make clean + +clean: + rm -rf $(TARGET) *.class *.html *.log *.aux *.data *.gnuplot *.gz *latexmk + +gif: + pdfcrop $(SOURCE).pdf + convert -verbose -delay $(DELAY) -loop 0 -density $(DENSITY) $(SOURCE)-crop.pdf $(SOURCE).gif + make clean + +png: + make + make svg + inkscape $(SOURCE).svg -w $(WIDTH) --export-png=$(SOURCE).png + +transparentGif: + convert $(SOURCE).pdf -transparent white result.gif + make clean + +svg: + make + #inkscape $(SOURCE).pdf --export-plain-svg=$(SOURCE).svg + pdf2svg $(SOURCE).pdf $(SOURCE).svg + # Necessary, as pdf2svg does not always create valid svgs: + inkscape $(SOURCE).svg --export-plain-svg=$(SOURCE).svg + rsvg-convert -a -w $(WIDTH) -f svg $(SOURCE).svg -o $(SOURCE)2.svg + inkscape $(SOURCE)2.svg --export-plain-svg=$(SOURCE).svg + rm $(SOURCE)2.svg diff --git a/documents/2048/template/pixel-art.tex b/documents/2048/template/pixel-art.tex new file mode 100644 index 0000000..19f569e --- /dev/null +++ b/documents/2048/template/pixel-art.tex @@ -0,0 +1,44 @@ +\documentclass[tikz]{standalone} +\usepackage{ifthen} +\renewcommand\familydefault{\sfdefault} +\usepackage{tikz} +\usetikzlibrary{calc} +\def\pixels{ +{0,2,0,0}, +{0,8,0,4}, +{2,2,4,16}, +{8,16,128,2}, +} + +% Font color for 2 and 4: #776e65 +% Font color for rest: #f9f6f2 +% Grid color: #bbada0 +% Font family: "Clear Sans", "Helvetica Neue", Arial, sans-serif + +\definecolor{pixel 0}{HTML}{CCC0B3} +\definecolor{pixel 2}{HTML}{EEE4DA} +\definecolor{pixel 4}{HTML}{EEE4DA} +\definecolor{pixel 8}{HTML}{F2B179} +\definecolor{pixel 16}{HTML}{F59563} +\definecolor{pixel 32}{HTML}{F2B179} % TODO +\definecolor{pixel 64}{HTML}{F2B179} +\definecolor{pixel 128}{HTML}{EDCF72} +\definecolor{pixel 256}{HTML}{F2B179} % TODO +\definecolor{pixel 512}{HTML}{F2B179} % TODO +\definecolor{pixel 1024}{HTML}{F2B179} % TODO +\definecolor{pixel 2048}{HTML}{F2B179} % TODO +\definecolor{pixel 4096}{HTML}{F2B179} % TODO +\begin{document} +\begin{tikzpicture} + \foreach \line [count=\y] in \pixels { + \foreach \pix [count=\x] in \line { + \draw[fill=pixel \pix] (\x,-\y) rectangle +(1,1); + + \ifthenelse{\equal{0}{\pix}} + {} + {\node at ($(\x,-\y) + (0.5,0.5)$) {\Huge \pix};} + } + } + +\end{tikzpicture} +\end{document} diff --git a/tikz/2048/2048.png b/tikz/2048/2048.png new file mode 100644 index 0000000000000000000000000000000000000000..eb1db7c6d6f47460ddb4aa59291dd5c2fc1413e4 GIT binary patch literal 34380 zcmce-1yEa2*d`o;TXAf_&jd+?`DKmGo7YmKg9SZdVpyL|#!*v0+>y zOdRm|*H#>IuW`QfCYT=dHt2vSts0jmR$pPR;F1Bi%HaRpJ3A9*sd0g$cn^`V8u z#tubg0tktST2jO+a%9Z>+s!z*V6l!G!0192qJ(ad@%DsiY5LjU;><>d7)qP=vbn4z z*ojGa)(##Py1TQ_Zi<~;2-j?iK&d){nep#E7$ftR*q)2JukGFzZ97ObQrH$p5PrJ- zRFP)cgCAlZc)!DsM0&;5$!b3AZ75 z=BI0)x{!!O*i(@2uFvU3gp`id%Il5T@=WjXh}?uZE9uM!V68!j%J;{svciL5W<}-x zUmX_c*R?WowL!4J4>QtchH&8&LSXlWCn)yI>D%xA*xU%J^43!FEBp_V>+=E&<0BA^ zUzg9*y?64?I7`D>-8;IFN1R^V$~v_Y?E1KyVTTRoKuAb5c$IVtDq5}{Z-Yb8fZfbW ziv5N<2Dvbq-^CG1v5~KsC~8ySk>_9Q zCrF5y0#r#Z&g6$O@*}0sLglSI=$IJALIGRx$>2u5v0y4dBVVKh!jq9aD){_HfT5ix zrT*t8uLmCLdJ&i@2n@PA8`qYFUA1!|u%*p7Ua#Wp*3-b+4ETWq&g zljlZkuLbzgtOY;Ryw5l^1CD6qha0spJ(ScTmmbQ{LVe*H5gxBIf?8Eo?7fu{MoZB9PMarY%KkJyN=nKcuU~k(^b%&PKGa z)$7ap#yL4_lGO$!Alo3x*Ka#*-t0$5X;Uf2)zwvbZB_5Wt;7o{scAWZjq*qPyr5@Z z#>P{#3;MAhZ#Amd(CWN3_HggpEIThHb~c~77KZwQa*PXCZaE8DWnoX17iUmvc5bP9uaPwU0+ z2nf1@FXmI+T`{8X+4E*ZVt?2xe1S;zT?jL3$(b{54NQ`jto#kb28?q}LT`a%c<#V% z3&Pi?zLM#@Z?k>*s6T8~*yndo+^jY5t_$Ev-}K=AJT7M7R&D<#Cgu_%O|KU6*Bv6W zUGBCRLOC!AM?ZKCpJ;M4T=bAlbioeW3-_Ehpwb#$;~R>BU@wN;?$m7~v}XXj16m3q z6Lk<}Tl~I73Wd(gpHDt~OnjYe&Q-B1*IZ-yp_o|7#^wcwDefJ3cXOklf@%&uf&OS1 z6FDEhf6EMd8*-8f_ z54bT&U4uIx?)xH!(Z&$>OgnA0w)wwAWpM&5GM+@qeuv3f1jQKzC|3gO;@?gBX8J+A zz`JtY7W`xR2&n!iZ}O2v3RJko+@W2EHu`60x8@GT&U?HuhR3&iBM9$)BZ$0?UI?Nr zA(E-B8ftGx%?1#0c3E%fz4%E8oHq->2ckU00|0!`9bF#N?~I2&?yf=X`?nmqcYRM? zXLTnOGT2CS7*d}KG@wSMqCakTgYB;cL^LZ5GMDu@0;r-02j~E84cYV zp#$ij59P4YYDoA1Ab--mCxlsRm=Ga_nd71oleip4pS2#L&ZZzr!5izVN`te&8O)6@ zE$>M78YS}0yw@ZbF&}AN+$UK@MxGPJ+;u@f*S;lOh@=k5RX&zyYmfDpGo#|-CiLPA z(8;@;lDx>4tN!YYIP`{Q$weXv02y*z`2`_QpN@w0>+XQs-|qbH-_1nct@M^8m#Jm~ zrmA)H-bOfoQ$HPD^%$U%Oq+SpEb81t7^gV3I%6G#FUb;=)b)4+iFR54^f11(6C*gB z>kjUGXS^%(0y zFS>~_^-TYTm6qG0geft8(PsZ+ryNH+u}UuP1~ZapQaQ<*O8N%Q5VKbn3-U#F)D=H= zl0{{5PCL`hr4<&}pDA%XoX%D6z!a+2Y=Yuep4{Tz539FalY~v?`wB3=nH@MQI^P8loWNwl0NQqs4L)O6c47FYI5sOhVrb$IpVIVlw~hoV*}R4qh!aG}s-iS0It; z8%pYt&Yah-J{s7}OlsYPpVhuKL+!p(c%DxD>hm)FFg_9qavI%uBNEF)(IXG^Xcwa3 zbtTMyfL#V1F-Cbe5b&4Xn{KZc`bB?nhHUWP zbtuQy+)Yh#N)TD`#ijHkHRfYK{RzUXXK*2SLtE7Z`Elj0-=P-%gaURGq37snu5xG! zn8fd5C1Hh+!*Wt;l)<5~3AGXTuaViM$yawXE=Sfmz|<`?c+Tx`3@z-B$gmAD=CcKU zWjzCfT?b1ht^#fJz5(2V(343f7x9!-0mzNlQ0Gws8resOEKL2SW}M+~*T2w&@#8Ld zA{baK8MQHXs}NW=ZP(s#z-PJphZV77NztaOeK3!4Rwy&_8T=y?kS0m;9T#~msdWg! zdE`^@iPz+dHpS_m8Ag7ZPIT7?FJiMXMpG9Zw*)hjSEX2shx;)eINib`gLkt&_6hOc z)juDb_HaTARk|9s-V_|lbuXQJ?cf+;WFcJs8V0&s$?v_*;Rm30Ol<4U>aRo5@5bE2 zr;k>{g~><&MKkSB6JpCSvfW*yhCrXVqIdkesIP58ie=NJe?5bV%lU{AL#KkntCy)q zWuzE`l0I`3IC7W(DL5j2-Y(6`5nOgX4mUI2K*cR{%ryzRANq;lhD~mbK0IReH zjf_59am^!72{&)7i^cU9T-Izz!0$cg#V?)gA>lOu^&TcRy)IOHMVZ=`b=rv$aH(A> z=T|^Mc`*5+(tOMWZTDUad^a}V;0Dwu1c(1TFkHTR8sDc6UpZGkx6YdQlDH1gHIas< z*&btXhKIZ<_2Vag3tqJfzu~Torl#lHMx(*U)fOa z_VzCGyFZNam~b($tcUQ{EUsU)7ROlLWN?u4sQF0t2{$uy&Ii+;nRu&R`u)q;5f1jU zO@Nd`A3B+M6^6+bITK{m&vE}rWQ^jQSN!tVrtK=X zfPk+oqAZ1dxI`KzttUt0Ykwu;&Qp=;Rf$_DPtWc4^R5KZ;%}6@d#?$rO!Q1ZinEfn z;L1bS6V=0$bEUJ#peuu4qcEdJsz08P8sxiC9evR|&2D;5>U~hlofj46kKw1&-uC^6 zik3s~kDm;~>W;{y0II$68DIgM03#lw^mpSJcRBf*PriMuNJe1FnX0gc$9-Rvr1nkUZSgbv;Fizw$&pfYx z6c^NB6xyriVYkK+3Rd1?$*-5@BRKM0Ll;#0uJ_4w5Q)#urXv2laO%)MY87>U*T0*g z@J_-tt~CAVcqH({DoAFKtFj<;3yNY(-UfO_vZqG??mXYx$rm=Ubw-Izl7c+={sLP3 zI0=)>444d?KqcINyZ7h3X_Q*L@e2>Tbh=X^j+DB~t3+%-OT1&Y{~tf7!eF67`aXZ> z8S@t}v5dQ1oiFXKujfj$kLWHHOmLzLLLUig_7mAj{&6PH^`N`7V`5Jiw4!gEF!UCl z$DK$eAU}ESn1rpKsXtj?)N76VI;-iCxCb0n>=rNXvD2sV#zV6W?q@9{#mREf9S_%~ zbQIu?5duhN8bW>NIf^!E0oUXzO-Lw5a|m|1Yoos}>0WK;e# zVW$EMjdymD3&cRHt1Lnoc^Z82jQ|Scy#Ga3S)H~0eVCwqcnd5fndA3Z`c4dZAk z+A@;D_?6K)X>HkSbga=ITfG91^S4OS(2{Ye9P)-3zyzqB)Y0h~)?F#?{X2O1wfG{T zXe4kvzM_v0;2A|B?mm#?-jU{OYGAP9v3g}x?|)9JsD!@x{Z|T$egQ`0Az>Z2<^sSUWUn z-a?YfuXH#5(zky!#2YU1{{}xJ2FPSBH+=(xTHs0g`R9M5F)bdCq^cjicE0BHy%TQv zR1#Gqds-Y*X4hMur#Uo%S^{w+cR>O~*X8SD{{gEAhWyExMy$Q~hM~@L5pSMoh zYeO4fF%3QCp!E=V~KDCbsXVd6DnS6qsSH|1uh_YLu5<`qMvmkH zIxJ&-wBhoX6$N1Y73T8t`LYUqwDfUJtu$%Rar4^12&57ly{M213$1YF0#jQySZ!^l ztM8-1B0u$!kKtTP2KY;mhgG$2ajkEWs` z=474S&$@czg*_BGvH;sP=Aprp(TZCAY8e`1|E&O{d|R(Aj(7IO^^M;u$Q*d~(5- zWkQ0%$}ze>I7!ZaRBy&@;_1KX6=`dovMV=TPpWJ+56f%oZ!>kekZ9oN_IADnaSA(9 zNeNJ2xic6lj$vB&N4a=vc74$3&u-8)X|=B3dHxt|nsAW3{=7K*Ah*f_MJ{6<<93 zV=cWR8q#MQwL}S0%YoiP%7X*ngHGv@3`TD{UzGbzO}Ss9gImjEi(6UKHxeX6q@?A!IT`>u>*jw`cvw<`kKU5)+fsF9SX^ z++CAzB*Lm+&r4}y6;zTJRgxRE3q85J%Dydv!hY&GV9Q>=bTb>8C+U6Mnbd_T`vV0^3u1RBga0dJ%I5 zDF|kZwwv)A?=Ptfa(zd4b!82jt0tw22{=u*kiBBGkT98;=WOwEcAD*sXqm5vg*9{> z;4;xiNH6JR+iQ4TY`A60J;wBmC7+%~znh;A%VYV(&z(~kYQYGr{z&2s7y}@AkfEgW z3|pg!xB_X5oL~3jU3qOS|AFudxDzg&cnTLCqX?C|L-)ma_{Ux|p?6uZ_ytNnEt^oPAN8hKmulxNh7eGL+Pj5|l7s zY2ZMM3ThbHQcC#lKh3OYEtp7dDIHeC!GViGgjatDE$FdM$zh18+kF{p>&!Hln{$xU zyzKWh8$@s%6MV`$w7Pszsk+0h)$70OSWtw+terkckWvz?pv5X4<#Lh7i&S3Lo-|_F zk?I-z6XEC_urusQ1__{V*29ChLWdL{UXko`?#vK$`)}$Lv_9+E*J5QZ?ycBEP>DRH zAcd1xC{P9zXv9^IW1!&pEXBja=~wvbc2xN{HP>xpJ%UXF&_EH02dK!B(($%})ehIz zTLOmTsjpuTW8Aqxh+Xj;{2;{l3LB6l^!X5$7nvBThbu_u7$e;dIpAKh0sc822~z6* zC(#gTm=7yfew3SQm-+;C;l%7kP3cAL%JaL+q98)DAfylQU#$oK|2q!<1y{Ob1=M%x zXusUOKYuw)5X?5Z5BmfrWg_NEGnJFm+icrVXM;UHUbK!1T(;9I&qNgNU*9RQY%(i> zO9($Gdv&rO5s)FjjUQevmpMZ>t!LdH?2aHx2OIO0bh`LVH*dSZcZBooq?@ z=k%CUS5aSG_toW<_kOUs)>~l{6uWYy;XxUnJtI?B?};bcM9#^~#ijr&X!db5yV*+v zWR}LA{ozob89OW#5&am4#=LDEuo_gp&4}^vfI~|}_UYT9#CJb&=FRgjr}&uQ1sMpd z_iw$(p>m`9DjE-uldblX)wWG$HWXp?9)`Ye4SY(~)zY;O{hw~ua}ibTgj4$XV1q8d zsK08=zmM_{bD(6%By8~p>%Du-jImIbqJJ=LsbtHfsUUtNv-KGp33_~DygUy2rUjN@ zE##LidJhX$5*}E!b3?-%cn-qatTfJ)Y`XsPDn}nr7d-z75QFwpS(;u&nm+$Ppj=U1 zsh{H^<}ItSVVuL8UHuq&)~>?*|BsjSADmgXW>Nt_EqTQ2?O)$#vOWXrYzU(z|0dJm zsG}(XaeivvdZ&j)XI_$j<;fR&mQ2m9`bM8tmn)Wy+hSxG@u8{`2YX?35%~E> z^Y?kLDZ)zG>dN0?B0Z&2vDt`#9}gF;%?8IRB*+8(>>rIP>B7x-IzQ!W;acmgR#iXR zlg8aop)~5ZXUwm{ma^a6O$vlU2@=xBA_hOLw*{MFgIvpLvV~eoF|(7hufAXmT7ARBxt%Bp}%yC!v;6Z?-IBbGxQ#>mbo-=cCAvxhQFsQ~H$7hX=gG?jrU^uu&glXGa zAm)Xow`+{#YU9_d9M5!aS{_ormo5=L#JJUX8JSU&qOvJ3cdqiIdy5%ku zdkuCqLzi4j-ucFE@r;hoty)o^H0Z`} zovb5H8>{{_k+s2|yO9SQtC!e+FwLSn5hXw+6~&UNfUh*rkV~q}QpbQb0X%Qo6R`X}Lo8sOaxXEaD0ev|+oi7Q^BJAJ(UW7%m?O^^%bhopI*jTx zoJtBucn#lipzK8-l?s~k#;Uheq`1*{p&wEEsDMvlZ$RgB-Fi5z8FG&^R#@Jk)pl5!E^4Q1+edtQnEVIju;vg}~e=a-r1p_H2)fQwTKa%0wZ zABM=Xds?i1cNhqDcypfcG=TD#s(UB1b6(nO^2Q4}O%s3Fu|fp_Oeq|*YnQM7GzICr z;o1rTtNgaaLTk7o!R&0X8(%K1-z{h3EhJ!k0H7Uzp0RzO-*O;Hz12muk$COCsvyb` z2p;#(&7uvHeWWH1fyT@ZvOSsBH#twDc;8$~b%xq_f58TE`lo;S@;~+h1XNB&)tu-ONL-SIDe}mycw?R zUpZ0#^j<=~{7gR|GbEVca@sXO@j%uI=EU*4rfEKt<*h)FZ*L+VSUHAKL{9My@8=7Q za<55%;-0*Go^1v*{6Gtk^;FX{K0EaajRGDZKl18QF3NwNpUogzdvwFOg)Z*^rYVOi zIwe+t1}YD?wl&}Q6WFhZ>;7bLHXDi+w-%H7CxkTWl?O+^h(`PE1&tovK%-a*c3AD^ zEB{0O$wRZ6VEp&E#)LALrvlqD6DJj>`ST6c<+d$1WSnqGtO*2hq;Wc|13daf->hpQ zzK|#0+Qf1P-wt#9BEg1Y@sk7tP;5^jedrc>hQ@PBQ5eYa1J~mEl;3o!A*JkM?0s5E zR60vpl0YHYAx&HQw{|=J6xU>=Vcj#rIr9MUIOI#L_9&szt-UrX%nSPZym#IkmlR>z z_Y8r_c-6jL5Vsb36M~og-KT%zGb>>2UJdr`FVS?7LHjjx)AO z9QVAb{n~fwJZwG2AL1<9^j`1iuhgvOGyAR1`{dwG1mFp&m!2{hz5 zx=hlbVxkB?n4~W@V}5@LsF#Vs8BMg!f6pl`dM3J_y-#v6`aMKLd|4k(Y*)k}G>yqB zz<(%#rFGn|`pjKYtTUEv`$x?(PuXLQc^j~{9X>&-C?ccr61d@fA8X4{MRf?SJ~X2& zOH3g%#xm}Iahu~dv|xWyA&WV@StG!Vd66`%eko~kq;w##-4S~uv-i^l0{cM44H2G; za@e2z)hhT^_L;CR>2Tp|Rw zvume0&x@fo%~7mmp4=aoy9pw7XKDADtH~Vh-Y1d^WcW%XtJAsV9$tH{?2witG_a8m zbBw%!leGcaETw6?=bC+yYQlcENH|uG>P`y;tb>GHA~;;ysw1xmU@n zi8tiZ-xgop)+eS-(TO3l0xRE-h)`;C5Yo%pd=wVGAX>ahPPtc=AN_n!X%!QSR&(Hj z#rrw%A?c<^{jw|Zrf2@*-RNmvaDWs4dxI@PsmD{*XRfj`FEZ;`Vts=N;F5kldO>xz zS;*DZj{llv8n*nt|F0N7^n(0j;Jx2Lwt?E_)j~Dk0L-cdn5|cG9JKL7t7ExYFkHL$ zce>B7-NYG%#n+-ZS(3A*HR}A7`M-*}w`6ML%6)bB$$q`bl#39M{(pCP4Ui3EV zocu1KsK1K1{jNq>%d0b2;tLvd{`!GZFp6^JWCS7R+3)_a{4Ex(amVka)S5g=(hEVS z^)Uq)@3toHU!LE*qKpd~S}1=)uY@V{r|ue4P3ATJI!kWKTj`97 zmJlwEHEOKnt61-fkuv^#ZpzOf=K+}zi?`uQ80gQC~EnZdNs&35K+ zPZC!iUVlc5DENRqr-DpNwB08ITxEn`Xz+D{#xgSwC3Cu06|ZyX4WMO;M4)v&;>BR# zZ%V_NW{_V#WO>Hb78W%9P6b*d3oG>@C};FV}~kS3g2&CXGH=2u$|Rn_7(A z0Eg1v+DTW$>z>PBiGt66fUcSW;3$!vlzYm=vrx*qiIw<kb|zrG>F@tM3+!y0I)c^@2DoT&rjObp7B08FT->h)XpZDi&Z+7#qU>qBX{gV%_Hu9p4tZHZYY8DN@EE`*c&SW&CZwR$rt$Xrj#W8EvHG z8Yb0A%o!Tf2u;Cfaruhe{5qFnnCl<9xsVS#ri&MCE|X>OwLJOyQ^DmdIpH*FQ=5j( z&trE{y*0$c$dq!QzT4t8VTxIs0fQfpm7{@hc_&TlvR^)rNx13fX?%4{T^nAu_c)88 zDENT4>PDR`Vtv*ee5AO`KQ57|Dy0um8?ck_H;L(b1ucs z8qGzCf&ve|_;`G0u&!*k!Bc+Vu6|T|es$x^(k@EDvINhy<^?vyl%0;CsgWAt7g@AO%=!0a8gg)us4JE(1h5(6 z$K<>7n(8$fsWHco{BZoX=|?awN=n5D#AQE{jBwmvyeJnsv@pI=^HdPwhWa863Cxmq z=F7OYw^LG?R5kCoIULyvk~`yWQ}bDnz>-Mnk%e;eZTdXU4?JXm|18n7bw2sT!&seD z`U!QiH<7MhT7|?l;Mn!~$Kl59-v(($ZBBoYDHt{uo2`gM+VdAWqh7yanSY%Zzr;`Z zq>Kc}3|)!2E1Q!@2qD{wZ>t8s==<}i=U8Z~jp`~;^cPnPaE%lKpT{(pazSwI9yyQ* zVxwZkLFYS$=ubjr|76!Yv{-Gr#=Cv6tFh(GdUi=7h)kNhHnQoKnKGsc><;N)EYWxs@6_!QYWuM#$;_8YWwUfWhb?)u9m zPWYt+pWaN}bO0LM%?GkjdT5ZH2m8;N=KBe4iW$CaG1!G%*bpOut#JCj^LKZjoRitE z;M?pPbDKm5DJ#15(I8|T46uY5X4>7mef)s`!>F^-gGP4Tccv4)Yu+D!HtctOCh_!y zxiKWw#v<|tj9Vk|=6#mxhw5ayVgKaSSuk%SFur!tb0kS*CZ|+0TZkwje9}zUQ?}C5h8$cTA@M)H8PAyGSf$}$R&rg z0#1G?+4hSKMHSB`_mzWqfzDMk^ACK^oFXmuN3yeOD7v<=IwF;gc$t30=nfU+Isb_; zyfSeHC2c8c%2?b(8AKizZg0`|tSr<#3Wud${1C%vaqib^Ak5ANxRL+hI4Y|CRWRvK zw>w#|^UmVY-S`~Duf{9;y9IoOSVg!&1L=$)QSkcx%df}Hy!d^sCrX|RfxGNMLO;s2 z76Pim4Vt?v6r&yEns@=vd}SLo2qS@ox3>cp^0`46k>Z)>?TZk=o<&;-)33-*gp$AO z9IE#6#QV@&jT0;fwH~a~XrdNep{$?)KSDY-{{^40BMAOaQca zMxPhSX}0oE{zir^wJ%*0do3&ix%V8JT}hy4Q3Xxa!<^D1e9P<6naU3#5}P$p;q?^8NpIySchy$Bu;_QAi)`w<}@jgA8;$b!=OPEya!t`+MOW zuP-&VB&*Nzs{C>KWUiaEC_`lJ-CX1LaA5|Kq(??WI_O2=wg&|U#teljF?gc~CjMqc zeo?)O4^U{pICag6<+{Zehy>oL*O1)rahjYjvmy!S+*iOq+}y;9b3xJlvb4vy8Mfr| zP2aG^b-`C}YKKKe)^*dJl>`(H2{e+jh8B8!?i0GbOAK<+5i43HbXu1(Nw?EMuNbCy zJid;${!n}sXTFMvEf%s#=WI`wzNRG=y)rY^Gl**n;5BLsq^jhaDSJPOF~f#J=tS6k zXZ~vW*L*BJxN%!W&v+9%C(5t7=?XpNT?nA-4bb97T^04$P$9DyZhpi_x7C3*n~)l! zbJtEmBtUGqHtP?!CF9-n$UO7Zz0w!iP|h_NA+ZcJE4#ohJa27G>iNKS)Ej!4io>qD zJZP~@h{V!N%(vo>pI3WTxVms}Vcu3i604 zZzp5vh9y$?e-K+V4cdj;IYk5P0beHE&epNTRwW(lHDG!oSosl?zkXcY1u3LMn;*p= zxzK;OZ~|S;Up`Q6y@gus%Dq&6HXOv{v;3T1cy*Q?09LSA+b_V_(~zi6?ubzxByfE| z^(ypt(r)^rRfw_Vi94z17__Etlc~w}L7&)yETLA=nLF(5M~ife$q1_9VVsbxIgIb^ zbHj%60fwFpU(RL=T>h>r@S3DAhd2Si=XTO^xg-GAspzgpITW@&exk#6nm9OnDbKgX zqRO7oV1ivYClWv*`W%JRvJUFS}scqkQoPKs&vlGjRDCjv=2 zmw6Yg6@`3Iu{hok6ZOx3IX7*p&~@7_hnT-xJ7k?bn%@&C?NWN=ZI(Z8W)?UdrSkjP zSd`8i^;XxmWp6;F;5M7c^sI~oYVtK4nGcvHZ+m9Z#S+GHXFfj_F_+io2Iy(!X7`|h zy5#mrrbb?CNMzFnl1)$KQ+U5r=WTrK^CHy}eWbc3``#`-THhv=+7dA2)=jKca`nn< zumV1Y4Jy@$H|5U?d5cyku?nCBHD!@2f2=|=)*ek)s8YudBg?Ct-4oY5#kb8Gki<6u zkZSS1$3?hU6|sCmQZb7AvnoA`1)c_vQ0{d8w^&f9h+ct$tvruOJs`s@*z9GVI9aI+ zVFC2c&Yw$MU4m^~(dif=*}S;UqmNYx&}Om)3RtBmQ^vvVXWH;0am;7%NuD{99d71- zQhfXq(UkDl0r{pv)4Xe2A|$xkl>(W`>4YTlEb9!zkowkhm9@H+SrvS~NW;##R&7US z$v(0_)k8+tZ^`|hA;uK{xyGz243ONbX zH|jgEfOo3~3_t*7be4}IH0`w+gr>GVF93bID@3i3BxmXnEO} z)vq|r{3|ca$6ua{G6mkUlZ=v9+U6IP9jKSvCZy8(6Dc>MDp!*Td>a_?); zsTV|5*zWTh2~??LZ{+YHuyJyBbfA}PlK=X4g z2w!8p?U|@8yaO{#aq={t%AX$XJ#Oc-{)|q*hpl|nemVBjk0n`QvOS7&BnIP15pS6< zJiZ7tV+ZMntdKqj0N1h!NK0(0;DL^8gfbUuXv>``O++zU716bS@2x4Q1xTJMN|fn% z>Oav2a38kr0a9oK@z<6Jz~^%%xg>e7ZcSt{MAm`Ak{(CdW7siBJ{fx1T|Mc|O+^!t z_-t8oQqO5mic76xSk`Ek)(V)Sd=N_qCj#Qad3evs^A0}YZmXi&6=C-19Xc3S%hr?K z-#$}e@^_L$<89<}P33FDS=95BY^-e1f>SC}D%;2*1xu|OH4AzCnxPlz?B-63R%`%$ zZ&n6WMt!7uYLvibB#uqB84^o>U-$GASXe3)fSCrRl6r4650S)ssnWO|)0Fc7;?Qot z`c9|Ahp(9Y_#PKvYk9d;E5#4?Ipcw@TvL~{6D{F9I9oioxVF~0GrT~`Q!@$E!S1RWMx(1EdR?7NbLI?wZw_9u}OGy(Vsgqy`>%i=fV5g;G+RN4`D{aU18=D#k! zQ3a*VJ7}OotSIj=Zmkm7t~O=r+A!liA(h3Yqrs2myv~{~dn{L!kq2I#%3<^|?_$Rr z7AaFZuuh-M&*sc<+_&*1HK3v-A*z>8^uyu%DWgTN?{6PepLHPTeZcdqMvuJ}fRR5+ zYketz6iyVl&4nxAaBN$)d&@-E7{Sg4#$BStETrhju=*^-`$1otIt7FHX_8U$f=xP& zrXVU^0lQJtfgY(;jVU6A5lRFK4C_(D-#Xc^i29P&lKZ;6&SrxFl~8QtExM@4qx@6m zDD2uXmD@4x8tGoFqj{E|2GPGV!2SHn-h5IPMr4k@!xKP33F2B7#Kq85BqB zszrNr9)!=6or0$tLTbl+739tqs0Y0%UQU@`&zVKCBZjDib+~0LLr0AB!z80721@I2 z<05Xstc~Zt@R|AtLJq3@t6k2d%3}KcH>R*4$y2PKocBf86k{VHQvWjDY6hsI4*StZ z`pvL2j^O-^jrpv45{hGofcK>RB}NkVqSJQ;r{}XM{kTe1VY7pD;-@4Uh6)`|ZXY#1 z{EhfwFYH$$CH6HdEQ^*WaM%6G<6j^)gh#QESoWDeXi>h6a&-I{CqV4JhPr)bg3dX4 zHHL-+BN0xd>yQrx17&ImOLeQiD)=v$5)QvRKIEQuI%NOL~Z~%%!;5>#q&j4 zMT{dfg=kewKm)=-gq${Z#UK-lLP~14HG<}SB3?J`;kYZNJahIOHO;})!p65!xca}1 zh5w8z7t-p9xL65{e|39l{|RsG|DFr?zg{VT74Wjx@NDQm;s;PtNC;KV`a1VW@A&uQR|mz(+!QW~ca)5=uB1J>79 z@9njwq^2D|H2YVPx&IV5AKj`$MEPFj!@dbxT394Vno1F2B+MMQvIf`MrN9>9?8SZ!Bb{5UyZgd(_h92sy7D}4!aL7^eIIuNGDz_5bzYm}=da^3 zWu9r-4@V|VPrt*vB-npD@Rj&qNnduB1n&P-s`HlVZ=YKybdsg{Wv^%8y%%`U+ ziGqus3y6)5tU$VF870!#gQhiT(aDFL(V;b(VRhFilnJl$^g6WTqfU$7xnn#JTWWRs z{Q7hEcGm1`bh50^#M7#HAsq^_gCqeNdZjVblrr)4HkmY`8eZ>yCo`Gj2R`8kWTf8M zfpDGj6w;tF|E?u%COTD~wY$Uh5S6^jH` z*|cL2*K8m?j4a~B2}mxG{mHxk;B;7twAw-O%u`}e)|-c~as9cB1HL0REZG1h%%qI^ z_|vU8R^5TI(RTnBu658mWBa}>;X+dnlM^yTg)JI4E~U=9e_NgA{ap{m6s_N>%+vop z;Pe#X+r2b7mbU>Tr>zXA zJGjG=S}Ad$<1=?Bmd^5v-fQtU{TZTQFj$Y!Q?2=tuFQ*S=zZ&XB;oltYY#W*_ckQY)7!LxhB8oMR> z!(w8Q*zvY2zvBDnE}*|t?fWg~@UvNk^EsrrJfui4rYJtC0rblZ zNu(i)JFIN8rj1;?on$iLpa4x5^=JDBh6q78-x(ZBKFmVpuj#$bINAV0gw&*3be};qjg`0s26;jCx>BKWWwNzJKPqvNJ=9ZK z%+P*36I;O&ZKR$KL6H1vbgw7Mdx4e_j2hqEt;6HwAo_k38grY90C{d;tK8UZRdnFx zEpcn&Vj&&*P3KnpVfecB(ho5#bod?Qcxe6U@?hfXg2IuBy8Pi|3JB@fu+}P_4lsi$;NPA523GKRli_!^N?F z(8jG{dcw1kq!iW~HVgN4n4x928!_B|A zAdZO&41whLLsitx*;Cq0-JZ^NQZO%dnnn9WbX_K>TJHgN1rf$*t(F_wm`G2 zZoPjgc$x&Dbrp4{Z*JO-iAC1gVh-r*V^CrUA(=*nBy776-VZq=M_j?`NC%`%_V_22Gm;sR=rX(~Hhm`Ahy%v{`nD{+=6xAF@c9G%$St1Mswh$* z(vs%*6npaYBJnJU{TXZEse;A%+bOPz7Xi6vUF-J-k?Rknp01KQ!Q*FhkiKhbc7_

vQ5&sG{c?XJ(xy7SeZ|!Z07*FHEn^_b4gb^Ze7xj~raSvfEV$B=VP7TFvln zudD~+?oZkRH>|ASfy=Oq4JnXxkn@hZ;U!vEq7OLxT<^ZtCo@h~RTwDx-Qm}6kP~0{ zR*vv_fe4Y*CGQtFx_jihO3`UE@)?od{Mr0>8_5mQ-byENT>Fz7vqI#otH{A@~4k0N>cXx-N zl%yb`)KJn5lG5D`(jg(;sFZYfgLKz$_U~NR`3K%_@8NXp+w*D65!2nWd_=bM3vC*M1mpVG#kVq31l zKKZz-EO7NNa@KyoC3ASXBFylzAQ%sN=FB^n&^(?q2z&9knmji3ia(poe=o7=%$)F5 z%2ro`(6R)v7V%*SVRU~CoQa_QX7iHK=R1V9WjBV+KtA|As>9bR$m<`tJ#SOK7*aRb z?&*vwuS;&~!Vo?6p#|I99=Z(j!)*rOCmLMR+)Mt|*7#A#07+l>54lG>B& zsD?l<^`d@xC+nz{Q#4+Dv81ey>QILxBM=NM@Gf+$^xYMuznpOBi@q(QzaUmueNet6 zat|)_Hye*I4d&sv{vdlT#fUZ;ZO|Uh7%Cu>UQ76#z2}2&`9sWn{(f$8-yx5G+baJy zeZ5k|0v5qrd}jTeFg!;~w#me5z_SuAdo#vu%<&C9UhGCcTg7HWLcUhHa2Pr2>;-v_ zdD7)}dhFefH-5>NGx~d9ESj4Tv#DIy@{}~HU+ytK1XGlOTht6Cy12e%-PJl#x9*>m zd0TY{R3pOqz8y~}FMYo6N9Yh;ZRJbwEKOA-abiSN_d7`@lQ&Q{uzX;A$jhE-szRMq z$WE`t?SuG1;EmNtvC%6%2|;7}jf_+|@jGDkB7ty#7o?@sRnipWe4_DOtJZAX7{tp? ze>V}&u&#nDj$?ADI}u&-N)V-_iAqm<$@1TGliTW<6Nhhu6{kKmwLaYG{r9G{?~wsaZTm29g?Led-r+b7^K^crce zcO>E$(RQv880xz$tC4k#0gKhvHLoThzMF?xMfJd!bD3|A0&*Mo1BxD4@Xpzm1n3!o z(C9teytSLa5tnsNtIkXkF#kAfU--bsyl(k+*Ai>KlQ77uisw0YO8;i8?>53Duz+gV zI9E8D(tG7E1~80`G>0Y7_mt&05BYxeq4&ZigZou3Ik)i7cT3_KE$8Gh*Fg#oTK0qQ zu2;}u%JtW8N-8n9NB@Q z8Xw`GAOgVDW|yjN2HYNjBebt;%CQCM8AG(}f`5K!Km^FMZHA1H#=SPqa3X?Xhvvn{ z8Lk8_zXv~j;Z%s*VP|+pdgILImAexVo{>L`WXj9d`wyo2;Izc}{c4=6Xe$Zri}f{q zcn5LIZkX|vQ_&oz|L+7x+cp>18?)VPr1XbTy-v$a1DQH}l^@rBVMNFoP5jBVob!jf zDKbm9uW1At3cqZA(n15G_Eq~h{~`Qc$%(f3;#pt69V?Fze%sosPo4wUI`CFJ{M+^@^oErZ%m*+z^svt(st z{)O!JwXZvQ;At)DQS;A_8MkRVdlep9O!F5%c$CZ_0qp>Rj0*nd1x~O5lr!7JO!~(z zPB10rdZzCX%ooveD9CEvA%-|n7?E*D@^tuZ<@4^iF|v(4S_-cdy`G`DGwWwuo02Or zpQq0wM}2{+!)sO-8Wf`hzuY=8ECzSh9iQ?}<6jF=_Iy4%;Q&k-c)E9Tuze-lF4(?6IlzHL5I1#+McX@a5WgnWPa2fU9z7kxk2s621Z;%k#F7M>>La>!P zNbEMmcro;X^B%c+pI?m{S{zv=9fttgACm0zHMbZ@aB>lziGF*YDN z;ZrfBn^Ukw!1-{-!3;f;DcrnET;vwwY%YVVna_p1G<;S$!mww#zNKG8>Y`#O!;aM& zqE;J2Qi>qpPoWG_02mJ-L3&Hw=`XGAH95kGkP%9<+dd<{m#s@)-nw~|Bu#XK2EcnW zWIRknVt#Wrjk$w;Gt!q3{7283mo47P@9rZL4II^U^BwAFzt>}j(7kz(Va8~&NgE+e zIVY8@*s`H$Nv}^Uczi$SG`(E6Uc7p!^JePF5J&vv7-@$@nk^7E8`L5OF%$sOy z_w(^f5{qIqVDK}7ERHebg9z|D*I2UXjvlsYrv*Wf9QSz1d?zwzJ*u4_eE?I`b}y>_ttQ#k6?QZa1Z@5iksBYH!r9^ zZ|m%V%-B^3M_u6+V)`IdykJ{2WVJ=L% zdG_2N0x6GwO1#}xj$MFC=&XvL$&x>9XUOL?UHgi^@+WE^G940Ous3Mlzrm=^V)Hud zPhZrAJb%F4^1Tx8<|DjDJR)Y&sk3`v$3~q>pvzK6Q-9xX`=5|zhr6_U=VBEz9g`cs@QK|H~5T`Ue|pXYEi&)W!RJ%ONYA&F6;GJ`a}{13YDb0>p@M zqi4|xq;WAwzJbVQ;o3W2gOt7GaH z3NltGix#-G)FWmKNkprxmIX(H`gM|?gvwXFUZv$4w0N$r*&aaQ7`>++eeED~dK!}; z>}SY{e?0FddHF5%Tcsj86i%D(X#wNg^AVRv$gziXm3C5dG5OxTs3)~1d8OQ!+)C28 z)F9*L?>AVqHl96qWqY^K{#Kd(Oc}_^jTWlRn%n8M6Tu5F?eumQwXZOC%pV{R?pnf= z)I#tN7edj0F9rjBmQxLCV_U+z#c!>_eB#(u^lVom-c{{n$3oBeDGA27RI)YK3QARr z8qa%?dq(lsHqkGFY-WyXwsVBrLRh6h+YWBrCoNqqL^S-v?SjbPg|F0mrMc_N2InP>5G*cu&gg%MgjvxZJ$*;>2DQBD(^R&)@y<* z7ry|&KYsiqVhd*0*ZEpK2_QAdM~UcSJ;K&7b)QTtixLMe`l4NT1uae^%;m<_b-(MNSoCliBdWi;4ttA5an#!0O z)4H~$nDabc)c`KXn{;FUTjM|O!QE@p+6)x5CKtcVhe(O$xT6>nYZpk;! zI}!jde?xxl@8;q9IGA3~;)z}4;*N_jY_cJRmP1!0_2qmF+Wj{OL4rH)=fdo4HgKgh zhsZ!+J$JXhYQ1TUXeps8b{2!@TK2_eGotJ`+zx$a*-p<(5=%D_9eT%Q`_pDK9@t-5 zH3r5Dj5R2ZR&h_!LHQrgey!B>G9fd``h=eja;%901QxLI zR}=^+{r#R47E~UH_x(?R`{MZwLIHGCxfH6r$J|U1{BIS>LKX+TDmYis zuI#d-HdqI{B_a9}G4)Ns2g;JNZmFPfU2+0k6+u`ju8ppRxdSCv|LTjwMh#w`Rn>NX zT1(4Yw0fTMLr~b=e>~5Tettw+-Z4UK-}esm(lLyfrFB}%g?~dvTdIG4(pyhYwH{kU zpLzasnXdJE9DY=b){N2E<_gn&mTVB4IyG5~%T8R3Wr?n{F)OEv)-2RPhWMgIgqMYd z{|fT@z|q3#`?6kUSieG~(DdRvPd7^*>U8Wk0{gF1W*xtx-S#ia&ilr*J874^JCB8w zOQl`_{!%bq84T!*r~>P0WW#I=g8#C(qlr=8n`HGL3_CECy%S`Dkzoz9;q0`%*K1OQ z?YM-dpdv{A3*Zz6@Rp`c&7yY-xiWOUKE;ZbiMW&1cN<-CfQFJYeXtFo$SG*i?UiaPRrw$1A_aPco(_8@oEeb6?~8LPu=L^gG7Vx3)^SFxDdQPJ z0f>N&uWy}+h*0QAld=eaM|H-Kj8m2H3H(@M%h^?IhD1=}b$~9}9PcPHHNl zO1rS~55J7#lO&^B7`2`V)Ij^TZBy26r-_iAa+c$cf{mu5S1oZu_j*F>lf#vrm z2`$kC_R^-SDcVy01fqe~t225x59rq$ku(hwVxpVAVFi~I+5%#^lApaqzh4)s6mFsj zDzj@g{MNr?fPKe_19jZv89&2$BlGMvdO^J^BIv%PpmSVMwbA$W=*ROgofTv$ zKIpJ^K+oBilwM=l*Lf2jTCWwBWOTrc!DUdqRuiTkw3dxEU+w!VB;zFHwS(P~Pii}O zs~gSKt;8F|&@NdH+YrjN%wlyRs(sH9PC4gd<~-qG130$T_Q;t?D!T4fXSenhN3Ag; zmx6N@roSFM_}+vjYd@T+0E<8K>z#A?-^ocd7Be%;rmr^=k3@!61SymIWX9^&B8`~2 zb#2J`sag8VVIFOt{5FuNs^;*ds>6R5%J=)${dk}zD*?JR9g+T_lw=4ehp#lV8{qrz zr3H0A-5=KWe(MZct00?Z7+cG{wh&}>2qf4KSYsX+On5nUD$z3Z{9^~RFd~Mly?Tej zy$W#pBA5JrJN9jH!mR=ZmGs`;*m}AvrTq0{SjYA+{mam~Hass)!{mP2^EKmOO5cR+ zo!`FGQ~;Fk_#oju_1E?_=LJ^WRP=5!k+Zuajs0r>TD$?WozZNeVjJ7#Mx?q5v6#Vq z7gMomg4Fc;1@i=i_Is62`oGy=gb4nc4HD45#+C6n0~S)OF?+hbJTEo*#Ax^js4AXl z^N}coy3^Di)~glK`5yT{Bnb%V*$4~8;uo|4@`+uv+WH1UdI_#+&szx22^8O8^Eogx z%fbtW;Dh6t$0rnpwCi5KwYSKSC+B9Bd|BjF@(4|frMx8fp^}e4r*;zREjRn zCY9(!NU6L)&B0%DDgQkqM5}o|JRg<3hQ!Drq%fBb#P6FZr`FZoau(RfcXYC=TAW@H zO1grf1j1!;E{wm2m}#+(J4o^!giOTZ^M6}a0KgR)jg<%Va*<@Z)9dQ!1>p!3-9&t!{oXysr!QWwD zOM5(gV5WXXNnkh<89@M-s$(I?(&4?S9cw|J2V*-+9NN#d^&=mE*oSz-Y%2EDxsz@P zFzyBo(^K50f;!I)YW|>@s*EDCRv;T zM@nkN3D#Hr@FDKDyRNe$KU`8h`%kw0fkUK2ha4y%eaPJkiKZm^t1#t%H_-;~#YwMa zT}kdvm3JsP1K=<4u<`+aJZbb=8qEK_m&z=_o95KxFR_k&9!}IEC1YM%D%%&EnO3{pl;au#L8{lil{zrd1@M5r0&{rb^RkzM&d)08GLAUXD| zO9&5FNhyo4#)Er`f*Y#!^r(div>;yKX=k!5$EsFjoAS}mr%VZ9HWj?A5tVsOmsSWf zP|h(@@PZJ9cp@+sj7HltN5oGFeHaf{*H!xZUY48X)!g45c8&d|L`4764SBm+4|KVU zw=FDb=-5U99;GKnITQ10@VDboJq&d*goLm3yZMbbTEY3hZ{|XJ2|n8#&??1Y|A_jC zxGSmPC6G?B_*S@+(G9w=Wbw(K_;;cINRZf_3Jped;;2ovXhO-0-9>3N7o@xcf0ytBdo ziS5RVj(ULb$MQorf)bU1#$)QUw!#*b>{e#2@mEy>%qCj0*I9d(v5xdg_y-s@cxmCM zi|vHV*xb0*2TY(;nMn}=pj6S4$bx$JKfUBFe%DpUR?uFL^@QZ>e=cwJS_)6o@ST5P zTN{_j5KHKKI4X_lKcPXT9mT*GLHrJXTzf*%RRb2u1J$C6zgy4~3RK5l4(bE5O9!tEow`xomyQd^ zh<`>2J@GMP6zP15is~#imHFlXZ87X;$;vr7>K%@k52GXYO=t52`}H{F;L0h%*X`=( zHO1VZ=jT}5f4So^@RfSv7G(BL4%PM_6Q$ca;0U5;Jt~){IUheqPp#jjn5gV89R$4h zyw%|5XNW-Yd078;n;<@Wgq~Mckqw0>s0K8VPDWFu`AYjhqSuqxwe|tS!F=bQz0{g7p-cspL&eI8ad^$xb0%C)B~cA3_BN zBQrCp5|fg;kDSz8cRfRE=+9<-VF9yR2VF%DRFv=YyeXBdcWA$ZA|C_3Uy*MCWm z?g!NH8Y+6EjK}0Z;qvw#|z#NJ(*^3ef>09{9z?iNU!lD%aZ+# zU?XoUX!{u%bQ-XGe(NGsW!}DE=g|8^?7kd5ye!&D)iY7wU8ai|_*;{=73*Ig5AD0* zpz|IM?pc0mw&J1&Vvf%HR|^Y^sxQWb6wJ+EQczN!!DlK3w+mhM+CLN9@*j%fR^Cu1 z{8qv1dPV9#B0+9DL-4feq{8j&m+^9D^G!Pypt4U;kt^D6N7vWWXtx^O*?xyAxXY47 zjT?HlvuIFba{@K=xg-8HG^FB;RZocm&|`7YbYinLk)3V@Y;Pg0NQ3_HK)|=MUJeY^ zgcZAv17XLyUCQNyUtUP5YIqgnbtj{Ft+SX0VmZ}7<2sJ^+dJCv^1V<~Uqb@LNWs$7 z5CU@@wQ}sHf;rN^rXpr(5~4a zCtQwa8Qc-Uud4fIDs8Kk3<9!dD#@u%hkvu9X;=#5LNc}yyh1t15$DLPo(GCu<*#|zQGnF*OZ;W zv+J3#Boo{WHz{tb?j11%{u7KaT&Q&E5y#p%yztmY&bN~~!^CUkR8W&hGd3p%9)O@2 z{}Y;R${A*r6Tnu4#dczQ<0_}rVA;$lWwx;WlP5-!|OBx2&E($Z2%ISU55IP_>L z@u-&yxG(Y03y;M0185Ihe$9tlk&8ciXkaBaL6JQTrXQqzbIb9)S4B)wh-lMb@EXTGPU65EG*-G>ex0dMpqBn>)T$Y(0vhxGJFqXz<`LhlzB z{{EfwzY)I$^4>77Um3hNI2#{agqHEZb`}B4T zE6ADIYbCH|Bk=Y}69Y^WlkFiF;>|7bZB9Zpput5}OrpWm%NQ0zGXAzymuJ}|xr4$+ z?a_g*HM`Y8reoAOl-vl%pJt11PbJi0$vs9MIH)lzSY3i{GPbGR!@W5#$G0@QHIa4q z<-vXAS=K2(gWNl=tx1jesFx6?*tH-}Yim0$lAD(@b12Ap2wCcCgJTPFy8OG{c0v~$ zKTJm?!33%HKYQw=p8}@Kzf0Bz-QZ|sZ#!|??gmz2vl_>|t}m*`LR*jTSxB;A(mk8D z{37fN?p&iH&xnt!4$q_>grLMCadH=XMYu_D}#zP2YLPs1GyA9;1`S(NF_tlpjKGlzlWGX1E`KcgA%yL z{B@5_p(nJq9x*zwA=a~zv8}|EBlzX>$1JZ`=x*&8LT|9-4iK9WcbEf5#0aA|oV$>( zR%hOvgi)2MxSNzO)Hj;jBgJ0s5@zvcLpG4j=* z<4i5nYvu0itcgnx#_b)4pWW>#^>0wTLM2)Vu}ImueMa|7assHI2aUc$p5qMFOZLr~ zzQt05$j5zg{WkR3{m*NJjCSsI+CK_o2opq1)1e4D+WooX-6_-yWaruH+Kfs^? z1ok0Q5BP!KAbZA>**3>sV-d1hZIqEDY<*@yDV?+)KY!}|q&w@h14_SFDwWwKj0ax> zwr%c&uU=ga>W)}iw`^0c_5`9}Z8qLL`93Z}I%34Uz63er#ta5^KL63JJ=;+09poH1 z9b0Y3dAK=}@p;l5vEdmw)p+)%baI*^oCK##)Oy{h^YZhW_5Vo{To3MdT)tvY!E%Fd zu`jtlxuPSZ62fsyavT|bPphACr8Xg=RJeINZ*Xv-OEGVlqvRqdMMk{Md4}Uyj%J1w z4Mi)=1=6eyaI8d$oZRN^Txp0LxxD-2!s>Iq&(wT0a}r2BbOJ9ygNNblW`{0z+&ndJ zg2)Rtzn!wV9ty8`5ZT(^UKe@3G@9vb0Qz!>dqG5)vvR@|*Me?V z-@Yhk#x#B$x+ps;$@(Jvs^mKpF4q98Qa+YWiQxGDcUCXtnYP-_mzdh;GVkD)wWRzBg)gc%FmFvnmBtlT~n@$#So7U$vq!CBOz* z3oMVEgGHiJA`twi3gA^_1G4D2S;O(esEpRntveBCokOxJIB9!aqN`<@>P+mNmv!p` z7Zxg0DoP{F%$(2(zJs4x{}|~3X0}&7NxDXSk374W#_q;Xru^n-8-&`61So{mzPEV? z0e{GP!y~7c<5ZH_`~L}npMDIqQbr@@3u<*!Q(Mu(&c(JF9Py~CXJf<6(0yEf`g$Rq zLi7TpQt!qNn@u)Ilz)goT=D(rO(CNSRz35QnE>eFL=uuhu56217HepFp6nGCZ#YFe zmVdXCTz_9#Eb=^Bn&R{U0SgQJz_hMmz^9}ny=I!UC9J{iT~abAkKlCj`xtIogf1L` zCFGKeTk6{xh`6MImy^o5|D0^=ALXlzgU+|y>d{0*A0PTZcdZ+J6C2#s58H3!7C zTN2kSf|@*7ptuDu7$bM#??3QuXcgtXtz>)*J7R?AG=-38z5ubYFmEC@#El##>5Zu#mx zCRRg2i^Wq-ug zo*{=+cXp|X7kBAQq3jjcf}B-8IkUR#R11zV5kjtY1RAipfK=mt7OvL`zkP2sO8j^h zb5rEq?s2gLsyH?xQ27LghxKJ;Z$!*Il%(>m$u#qeUIJiT`7Yr;A|gUlODixsI(prX zfuSh97uzVS*4)X-2{y9Z>5s+U26J!wY?@20rlvOcc)qo|qK>u8S((DGnao+SyUxXYlV5ya67cB)s{KcRSnR!UxfX;%TpROTIWW zXS$^ zb7bK$BdoR~S#YIvVj|M7NTYdhxX@AR*{rMd8 zf!G;=Q!-l81NoXVM0w9%>l z>Ks9eh&aFkG_UnUZk#WMO4Euy{tYtksImu4r;u`akk_0B+>UMzh6&WBklv)x*d$Kk zQ-jBmgtG|4@f}R-KcAG-_Zcrmf9EoyNOyj159z%(3 z{_Tnfa+}I-q%5YihlxZ88&H$~sjD_$;iH+L3de+63*ps?oXcPD9ws3e^7`nkS_(d@ z+0awZ@(G=AX--^pVN5==yTwI0Mob!)PYZ)G0@5ZPAehCz1nX6ET+H^_VOf?H{{0sV zAPRES)1O&6A-nq8VP10mF|*A(%R&lJ7dvuU_9^f}C8#vF49OgbO-u&;KM6VyVfK`}P~!2r zza1Y?=U`MJQgXNUf5u^JEp5bG!0t_m(?iMob4CUhvBz^XMIJdcT+;}iAF>%nzY)^ywz zeTM_jkN?26@+O?Zg#0BZWt2Xyo5NB}%F?b=SU&{6&qmB$Rw4iFN1k7zT>m$=elJRo z-Jd>z9N(^vZF7G&Th65OdKV13EHc=oJklJ`i@!6PS3^BKJm%cbiks~qVz;L631|0E z0eKk!_lOo~Z+tpPkr-^hc~p1)l~>k6fkna=JYuOJ<0E$5dIN11TS$0#L^|8-_Dmpt za80Jh-9MaOIhja%rxEu$ct@zx<6uGq0XJgMh3ts+DOi%c7_@pK-_&dYdVxyIR zaLEr5^jvz(v_CIb`)yL*F1%j-D{5>bC<D;?wDcnPwdtDp;dosiO)u?&P^Z5rZR@Va0-FJwvCC zkG0RkMn99;WU0REfpYKxd+0gcQ&^Ws9>%Kb;0%F{-HqUW0>`(CZQOxPQO!= ziUE|qHyxPwX6n%{&d#NLF&AWdSkL0xgoS(MwuHyyj85<(VOSY4-)>06VKYIafe=na zO8S2jk{$g6j|xM2z~4!`DiSwt`Ra_-PCsh)mBMWQO&12Z^fU$H-rM!13%`iHPmp118HNY7)htz6PfUKb$# z3|74Y-Vl_if>tu9^^rS@y@zOjQQS~mka&1!dUGN^M zTQSNM+l7zevJ&##{Ai{(*~@}3)6RoR0qwju=nfrcP0e;_5Nq9yiFAJft!Uk4xlX^% z>xOvO3E?ATg4QqK833ht-W2j^)$~F+hct6HQWU_PWDhMLwHIKlL&4>FOKQw5u$f7( z;W8H3dj5HO7ql2LZx&5r4|=H;-;B=wK)$i$clHyJ-LB6PIo(Na;=Rdo?=ds2J7b69X0&V19lVgM6_Rs1nb`{L!%a>Bd^%r9AV@x?q z56Jb}+-r}0ygLksQ@Lasp8VB0<0_oTS|uA^6JhR;j)L3HvBRN<*Q8eNvJPW1b1_R1YH`%hE*OZ7wsOgBdoG~k@Zml)#6(<)o>S?DHghq zuLKoO{ddQGm9a7deI9N$lSVT5ZYuRUsCKjJr39WMh%LMk&buTf7Tz1+JcGWcbaXqj zpt6DZ=*TXe=Tt}+cAD!+^b5n*0Za) z-AtK+Hr>sklx51{Z*_lF;Pl9f-XIS7e$)G7nQ2_+J&cGVn`180<%R|SU_?b;#{6Zr z2V7``w0}}Vj5tSRbNI|*ik{Pc+n;B9JH@1DTi3YgV5ak`aq(=r8t!8_){|zH9a2BG zlG`$nL+uUZ#li*u&F^Lg5wn^XdFWQ_2kDx4peW!{%hQl`O%x5)m~FpWrjvxg_Yp3y z4#q}PEXW~Gci=pp#UsbXEOk=&s)JwX&8ipaVv}E#e!b;~=>tB!8q>T33cJcm_q%Gp zY48cPHhoQ#e3h*PMJ0_f{#vzJW_nz8ZXxtB5`AR`6iF>Fy2YMQYvPP94CQOKS!AEW zz3$?ZO3@@;zK4=)54u}2H1l5psnZKHUzu`zF*U!@8}DYilFV3F5WVEmCj?+}%XYo4 zPERrPL)`EOfzBQyw`aC0dV75jA-MZ<20bHl^h)xu+KT>s`yCK91Z{>2T{(BJwg8Aoz7-a;r8yuCXjAu zCw9tEPz`9>#WumBxQ-piu? z2)∈Iln`wY>8yuTLdjNmbX46zX-35v;Hc9tK_yycq4RV^|RDrf0N4^uI@SeKpk^ z3ds<@sUH*Xe<5)%@VFN(vgw3FL_}n|IiS|Ed$ia}DscScZ?pLZ>iPoVXp{Ky-*M~O#eI$E2*u>h{=q@tn4f3U4ki*e300dT^_=JvW~A+c z^eIJw>}%`_n(mL%K%0Sx47pNv>jninuB(TI3~Zo;>tOVX70XQ_zjn z8xp4k%zKBS;>yG=AdJ!qM$oiab?G|=98&>8Q^-Q@F4#v6UpwHwqW67-WfZJ|G^Ues zl(p7*Elr7iL+OC&pjFO#tpas7SaXQm9Qkj&GyJ^gqIm2XcBtdMYp~jP1(q5bP#ZEI z9v;rXnV*|!B{{M*v4Rh?Yil(2PrD~;hfUsuAOhg1O8LM$DzxHvVkCN7f(E;VIbF3E zj5EWp(3&l`K0XKwbK)r6@v^VlfVb(APpm*ie zOD{1X)wi_+7QZrXkU29TFIN*c2X{B;y;b5i)4aTqQgVYu@Q&xO8OpLy4PZnvm+y+c zPZv~Ig1s|<9wP(Op|t7?PSQ0tAyRct9-FQ!B8A(=5~gJap_0$jx$)#FCrFpV>Lk zi~62&G?`z6mDHb3e6L>p(KOb?sGf~%Y~=sZ$Xk$?hv48aAJ2JoVjWKp&ZN3W`7iLw zbR0-a6|y0D^@=qvBO~(qn*RrHQ*O~u@`vjax#hT*EKMfK7HyXsCa3o{8IFHg4!O*C zR8>K2WwE`z_wS#qxs2Gs;i2P?s^|##N3s(^ibIsts;4jD-= zK2s} z0f6PCs+)NFR0GPmq!R~3hY&O5bS^<-k3`MuVcG5Uy7eULPP|;Fs_&;&4$scv$NCBk zU}7I;S7{lTRZBs(HyFwB*$<)UtsoURifzK6OLjA-Bc2nGv~Uf(Lh zRs+s|53L=ABCsIq=-}vxb6j7aC>kb6&tJ9dpZ6xb^^EsV`$4adcKiq9UZ{MRgZgyA6CjHf2>3GW3CYojXz*SawAcLQlL+3`Noc_-uOQ}3+7J>fit4lf)E!Ct zUB=((9`g!&DveW{wq&D{VWHWhqX7%g9wQIN4EgDp$2(eM^VWSoxA{RtP^0W6vI$BIN)5< z@FP*v#9JFVGh0XG>Ge(ck45mnjOpGB&HbRUup1Yn?}zqZO<3H6yaGlMtBaUyfVh{i==#SviU1mp*^K{aLBB5U;)TW8gn9m>1<}*q zjcG&(bN?maHZCj``@Z=yJ~0nu%+bhcJ^V+K+tJo7apB=U^IoBPmzc!ps;=llYkKjq zRE~bqGZRHAXHp{7FjlcnLD7je{v&8`QJK+G`|iEG-U@^N(e%r-YQ_6T`u`YBn>CA$ zzro(kME!+hVu`JQChboSV(zn+OgU@k6eb_z8%YGuCl7LK{NMEYB#uAqSGXKjm=_!5$M0sBh4n_h>v-$ z^{nN_OzCWHuQ`5zB;F+fS>>ZqFqtYF`*-#n^p0sAiGw(`WME$RSwhO6o3G zq>NA367e9qbNs|&Xb&MP_${p;>8yy4@zmbVBJmgi2FD=L2|X>-nw;i;On;*XPBmO! z{>Rbeu6jiDw#cl}3zI_fE^e?Yh$A$W&0 lcOPU;4PbI;K95{{mf&zV%i3Tf^aH>zB{_B3DrwWe{{xDrJYoO< literal 0 HcmV?d00001 diff --git a/tikz/2048/2048.tex b/tikz/2048/2048.tex new file mode 100644 index 0000000..4b45561 --- /dev/null +++ b/tikz/2048/2048.tex @@ -0,0 +1,66 @@ +\documentclass[tikz]{standalone} +\renewcommand\familydefault{\sfdefault} +\usepackage{tikz} +\usetikzlibrary{fit,backgrounds} +% +\definecolor{grid color}{HTML}{BBADA0} +\definecolor{pixel 0}{HTML}{CCC0B3} +\definecolor{pixel 2}{HTML}{EEE4DA} +\definecolor{pixel 4}{HTML}{EDE0C8} +\definecolor{pixel 8}{HTML}{F2B179} +\definecolor{pixel 16}{HTML}{F59563} +\definecolor{pixel 32}{HTML}{F67C5F} +\definecolor{pixel 64}{HTML}{F65E3B} +\definecolor{pixel 128}{HTML}{EDCF72} +\definecolor{pixel 256}{HTML}{EDCC61} +\definecolor{pixel 512}{HTML}{EDC850} +\definecolor{pixel 1024}{HTML}{EDC53F} +\definecolor{pixel 2048}{HTML}{EDC22E} +\definecolor{pixel 4096}{HTML}{3E3933} +% +\definecolor{small color}{HTML}{776E65} +\definecolor{big color}{HTML}{F9F6F2} +% +\tikzset{ + case 2048 base/.style={minimum size=9mm,rounded corners=.3mm,text=#1,inner sep=0}, + % + case 2048 LARGE/.style={font=\LARGE\bfseries\sffamily,case 2048 base=#1}, + case 2048 Large/.style={font=\Large\bfseries\sffamily,case 2048 base=#1}, + case 2048 large/.style={font=\large\bfseries\sffamily,case 2048 base=#1}, + case 2048 normal/.style={font=\normalsize\bfseries\sffamily,case 2048 base=#1}, + % + case 2048 0/.style={case 2048 Large=black,fill=pixel 0,node contents={}}, + case 2048 2/.style={case 2048 Large=small color,fill=pixel 2,node contents={2}}, + case 2048 4/.style={case 2048 Large=small color,fill=pixel 4,node contents={4}}, + case 2048 8/.style={case 2048 Large=big color,fill=pixel 8,node contents={8}}, + case 2048 16/.style={case 2048 Large=big color,fill=pixel 16,node contents={16}}, + case 2048 32/.style={case 2048 Large=big color,fill=pixel 32,node contents={32}}, + case 2048 64/.style={case 2048 Large=big color,fill=pixel 64,node contents={64}}, + case 2048 128/.style={case 2048 large=big color,fill=pixel 128,node contents={128}}, + case 2048 256/.style={case 2048 large=big color,fill=pixel 256,node contents={256}}, + case 2048 512/.style={case 2048 large=big color,fill=pixel 512,node contents={512}}, + case 2048 1024/.style={case 2048 normal=big color,fill=pixel 1024,node contents={1024}}, + case 2048 2048/.style={case 2048 normal=big color,fill=pixel 2048,node contents={2048}}, + case 2048 4096/.style={case 2048 normal=big color,fill=pixel 4096,node contents={4096}}, +} +\begin{document} +\begin{tikzpicture} + \def\pixels{ + {0,2,32,64}, + {256,8,512,4}, + {1024,2048,4,16}, + {4096,16,128,2}, + } + + \foreach \line [count=\y] in \pixels { + \foreach \pix [count=\x] in \line { + \path (\x,-\y) node[name=c2048-\x-\y,case 2048 \pix]; + } + } + + \begin{scope}[on background layer] + \node[fill=grid color,fit=(c2048-1-1)(c2048-4-4), + inner sep=1mm,rounded corners=.3mm]{}; + \end{scope} +\end{tikzpicture} +\end{document} \ No newline at end of file diff --git a/tikz/2048/Makefile b/tikz/2048/Makefile new file mode 100644 index 0000000..36997be --- /dev/null +++ b/tikz/2048/Makefile @@ -0,0 +1,31 @@ +SOURCE = 2048 +DELAY = 80 +DENSITY = 300 +WIDTH = 512 + +make: + pdflatex $(SOURCE).tex -output-format=pdf + make clean + +clean: + rm -rf $(TARGET) *.class *.html *.log *.aux *.data *.gnuplot + +gif: + pdfcrop $(SOURCE).pdf + convert -verbose -delay $(DELAY) -loop 0 -density $(DENSITY) $(SOURCE)-crop.pdf $(SOURCE).gif + make clean + +png: + make + make svg + inkscape $(SOURCE).svg -w $(WIDTH) --export-png=$(SOURCE).png + +transparentGif: + convert $(SOURCE).pdf -transparent white result.gif + make clean + +svg: + #inkscape $(SOURCE).pdf --export-plain-svg=$(SOURCE).svg + pdf2svg $(SOURCE).pdf $(SOURCE).svg + # Necessary, as pdf2svg does not always create valid svgs: + inkscape $(SOURCE).svg --export-plain-svg=$(SOURCE).svg diff --git a/tikz/2048/Readme.md b/tikz/2048/Readme.md new file mode 100644 index 0000000..4f4e549 --- /dev/null +++ b/tikz/2048/Readme.md @@ -0,0 +1,7 @@ +Compiled example +---------------- +![Example](2048.png) + +Source +------ +[How can I create a template for 2048 game situations?](http://tex.stackexchange.com/q/174806/5645) \ No newline at end of file