You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

205 lines
23 KiB

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>YBlog - ASCII Haskell Mandelbrot</title>
<meta name="keywords" content="mandelbrot, haskell, ASCII, golfed" />
<link rel="shortcut icon" type="image/x-icon" href="../../../../Scratch/img/favicon.ico" />
<link rel="stylesheet" type="text/css" href="/css/y.css" />
<link rel="stylesheet" type="text/css" href="/css/legacy.css" />
<link rel="alternate" type="application/rss+xml" title="RSS" href="/rss.xml" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="apple-touch-icon" href="../../../../Scratch/img/about/FlatAvatar@2x.png" />
<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js"></script>
<![endif]-->
<!-- IndieAuth -->
<link href="https://twitter.com/yogsototh" rel="me">
<link href="https://github.com/yogsototh" rel="me">
<link href="mailto:yann.esposito@gmail.com" rel="me">
<link rel="pgpkey" href="../../../../pubkey.txt">
</head>
<body lang="en" class="article">
<div id="content">
<div id="header">
<div id="choix">
<span id="choixlang">
<a href="../../../../Scratch/fr/blog/Haskell-Mandelbrot/">French</a>
</span>
<span class="tomenu"><a href="#navigation">↓ Menu ↓</a></span>
<span class="flush"></span>
</div>
</div>
<div id="titre">
<h1>ASCII Haskell Mandelbrot</h1>
</div>
<div class="flush"></div>
<div id="afterheader" class="article">
<div class="corps">
<p>Here is the obfuscated code:</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb1-1" title="1">a<span class="ot">=</span><span class="dv">27</span>;b<span class="ot">=</span><span class="dv">79</span>;c<span class="ot">=</span><span class="dt">C</span>(<span class="op">-</span><span class="fl">2.0</span>,<span class="op">-</span><span class="fl">1.0</span>);d<span class="ot">=</span><span class="dt">C</span>(<span class="fl">1.0</span>,<span class="fl">1.0</span>);e<span class="ot">=</span><span class="dt">C</span>(<span class="op">-</span><span class="fl">2.501</span>,<span class="op">-</span><span class="fl">1.003</span>)</a>
<a class="sourceLine" id="cb1-2" title="2"><span class="kw">newtype</span> <span class="dt">C</span> <span class="ot">=</span> <span class="dt">C</span> (<span class="dt">Double</span>,<span class="dt">Double</span>) <span class="kw">deriving</span> (<span class="dt">Show</span>,<span class="dt">Eq</span>)</a>
<a class="sourceLine" id="cb1-3" title="3"><span class="kw">instance</span> <span class="dt">Num</span> <span class="dt">C</span> <span class="kw">where</span> <span class="dt">C</span>(x,y)<span class="op">*</span><span class="dt">C</span>(z,t)<span class="ot">=</span><span class="dt">C</span>(z<span class="op">*</span>x<span class="op">-</span>y<span class="op">*</span>t,y<span class="op">*</span>z<span class="op">+</span>x<span class="op">*</span>t);<span class="dt">C</span>(x,y)<span class="op">+</span><span class="dt">C</span>(z,t)<span class="ot">=</span><span class="dt">C</span>(x<span class="op">+</span>z,y<span class="op">+</span>t);<span class="fu">abs</span>(<span class="dt">C</span>(x,y))<span class="ot">=</span><span class="dt">C</span>(<span class="fu">sqrt</span>(x<span class="op">*</span>x<span class="op">+</span>y<span class="op">*</span>y),<span class="fl">0.0</span>)</a>
<a class="sourceLine" id="cb1-4" title="4">r(<span class="dt">C</span>(x,y))<span class="ot">=</span>x;i(<span class="dt">C</span>(x,y))<span class="ot">=</span>y</a>
<a class="sourceLine" id="cb1-5" title="5">f c z <span class="dv">0</span><span class="ot">=</span><span class="dv">0</span>;f c z n<span class="ot">=</span><span class="kw">if</span>(r(<span class="fu">abs</span>(z))<span class="op">&gt;</span><span class="dv">2</span>)<span class="kw">then</span> n <span class="kw">else</span> f c ((z<span class="op">*</span>z)<span class="op">+</span>c) (n<span class="op">-</span><span class="dv">1</span>)</a>
<a class="sourceLine" id="cb1-6" title="6">h j k <span class="ot">=</span> <span class="fu">map</span> (\z<span class="ot">-&gt;</span>(f (<span class="dt">C</span> z) (<span class="dt">C</span>(<span class="dv">0</span>,<span class="dv">0</span>)) <span class="dv">32</span>,(<span class="fu">fst</span> z<span class="op">&gt;</span>l <span class="op">-</span> q<span class="op">/</span><span class="dv">2</span>))) [(x,y)<span class="op">|</span>y<span class="ot">&lt;-</span>[p,(p<span class="op">+</span>((o<span class="op">-</span>p)<span class="op">/</span>a))<span class="op">..</span>o],x<span class="ot">&lt;-</span>[m,(m <span class="op">+</span> q)<span class="op">..</span>l]] <span class="kw">where</span> o<span class="ot">=</span>i k;p<span class="ot">=</span>i j;m<span class="ot">=</span>r j;l<span class="ot">=</span>r k;q<span class="ot">=</span>(l<span class="op">-</span>m)<span class="op">/</span>b</a>
<a class="sourceLine" id="cb1-7" title="7">u j k <span class="ot">=</span> <span class="fu">concat</span> <span class="op">$</span> <span class="fu">map</span> v <span class="op">$</span> h j k <span class="kw">where</span> v (i,p)<span class="ot">=</span>(<span class="st">&quot; .,`'°\&quot;:;-+oO0123456789=!%*§&amp;$@#&quot;</span><span class="op">!!</span>i)<span class="op">:</span>rst p;rst <span class="dt">True</span><span class="ot">=</span><span class="st">&quot;\n&quot;</span>;rst <span class="dt">False</span><span class="ot">=</span><span class="st">&quot;&quot;</span></a>
<a class="sourceLine" id="cb1-8" title="8">main <span class="ot">=</span> <span class="fu">putStrLn</span> <span class="op">$</span> im <span class="dv">0</span> <span class="kw">where</span> cl n (<span class="dt">C</span> (x,y))<span class="ot">=</span><span class="kw">let</span> cs<span class="ot">=</span>(<span class="fl">1.1</span><span class="op">**</span>n<span class="op">-</span><span class="dv">1</span>) <span class="kw">in</span> <span class="dt">C</span> ((x<span class="op">+</span>cs<span class="op">*</span>(r e))<span class="op">/</span>cs<span class="op">+</span><span class="dv">1</span>,(y<span class="op">+</span>cs<span class="op">*</span>(i e))<span class="op">/</span>cs<span class="op">+</span><span class="dv">1</span>);bl n<span class="ot">=</span>cl n c;tr n<span class="ot">=</span>cl n d;im n<span class="ot">=</span>u (bl n) (tr n)<span class="op">++</span><span class="st">&quot;\x1b[H\x1b[25A&quot;</span><span class="op">++</span>im (n<span class="op">+</span><span class="dv">1</span>)</a></code></pre></div>
<p>To launch it, you’ll need to have <a href="http://haskell.org">haskell</a> installed and to run:</p>
<p><code class="zsh">ghc –make animandel.hs &amp;&amp; animandel</code></p>
<p>Here is some image after 50 iterations:</p>
<pre>
###@@@@@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&&&&&WWOOClbUOWW&&$$$$$$$$$$$$$$
##@@@@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&&&&&WWUCUb; ,jUOWW&&&$$$$$$$$$$$$
#@@@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&&&WWWWWUb ooCWW&&&&&&$$$$$$$$
@@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&&WWWWWWWWOU uUOWWWW&&&&&&$$$$$
@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&&&WOUObUOOOUUUCbi rbCUUUOWWWWWOUW&$$$
@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&&&&&&WWWUcr,iiCb o wUUUUUC;OW&$$
$$$$$$$$$$$$$$$$$$$$$$$$$$&&&&&&&&&&WWWWOUC, j llW&&$
$$$$$$$$$$$$$$$$$$$$$&&&&&&&&&&&&WWWWWWOCCbi bWWW&&
$$$$$$$$$$$$$$$$$&&WWWWWWW&&&WWWWWWWWOUo jUOWW&&
$$$$$$$$$$$$$$&&&WWOwOOWWWOUUOWWWWWOOUbw j.blW&
$$$$$$$$$$$&&&&&WWWObiijbUCl bCiUUUUUCj, bOW&
$$$$$$$$$&&&&&&&WWWOUbw ; oobCbl jUWW&
$$$$$$$&&&&&&&WWWWOcbi ij jUW&&
$$$$$&&WWWWWWWOwUUCbw WW&&
WWWOWWWWWWWWWUUbo UWWW&&
: wbUOWW&&&
WWWOWWWWWWWWWUUbo UWWW&&
$$$$$&&WWWWWWWOwUUCbw WW&&
$$$$$$$&&&&&&&WWWWOcbi ij jUW&&
$$$$$$$$$&&&&&&&WWWOUbw ; oobCbl jUWW&
$$$$$$$$$$$&&&&&WWWObiijbUCl bCiUUUUUCj, bOW&
$$$$$$$$$$$$$$&&&WWOwOOWWWOUUOWWWWWOOUbw j.blW&
$$$$$$$$$$$$$$$$$&&WWWWWWW&&&WWWWWWWWOUo jUOWW&&
$$$$$$$$$$$$$$$$$$$$$&&&&&&&&&&&&WWWWWWOCCbi bWWW&&
$$$$$$$$$$$$$$$$$$$$$$$$$$&&&&&&&&&&WWWWOUC, j llW&&$
@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&&&&&&WWWUcr,iiCb o wUUUUUC;OW&$$
</pre>
<p>Here is the more readable version. I believe with this far more readable version, no more explanation is needed.</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb2-1" title="1">nbvert <span class="ot">=</span> <span class="dv">30</span></a>
<a class="sourceLine" id="cb2-2" title="2">nbhor <span class="ot">=</span> <span class="dv">79</span></a>
<a class="sourceLine" id="cb2-3" title="3">zoomfactor <span class="ot">=</span> <span class="fl">1.01</span></a>
<a class="sourceLine" id="cb2-4" title="4">init_bottom_left <span class="ot">=</span> <span class="dt">C</span> (<span class="op">-</span><span class="fl">2.0</span>,<span class="op">-</span><span class="fl">2.0</span>)</a>
<a class="sourceLine" id="cb2-5" title="5">init_top_right <span class="ot">=</span> <span class="dt">C</span> (<span class="fl">3.0</span>,<span class="fl">2.0</span>)</a>
<a class="sourceLine" id="cb2-6" title="6">interrest <span class="ot">=</span> <span class="dt">C</span> (<span class="op">-</span><span class="fl">1.713</span>,<span class="op">-</span><span class="fl">0.000</span>)</a>
<a class="sourceLine" id="cb2-7" title="7"></a>
<a class="sourceLine" id="cb2-8" title="8"><span class="kw">newtype</span> <span class="dt">Complex</span> <span class="ot">=</span> <span class="dt">C</span> (<span class="dt">Float</span>,<span class="dt">Float</span>) <span class="kw">deriving</span> (<span class="dt">Show</span>,<span class="dt">Eq</span>)</a>
<a class="sourceLine" id="cb2-9" title="9"><span class="kw">instance</span> <span class="dt">Num</span> <span class="dt">Complex</span> <span class="kw">where</span></a>
<a class="sourceLine" id="cb2-10" title="10"> <span class="fu">fromInteger</span> n <span class="ot">=</span> <span class="dt">C</span> (<span class="fu">fromIntegral</span> n,<span class="fl">0.0</span>)</a>
<a class="sourceLine" id="cb2-11" title="11"> <span class="dt">C</span> (x,y) <span class="op">*</span> <span class="dt">C</span> (z,t) <span class="ot">=</span> <span class="dt">C</span> (z<span class="op">*</span>x <span class="op">-</span> y<span class="op">*</span>t, y<span class="op">*</span>z <span class="op">+</span> x<span class="op">*</span>t)</a>
<a class="sourceLine" id="cb2-12" title="12"> <span class="dt">C</span> (x,y) <span class="op">+</span> <span class="dt">C</span> (z,t) <span class="ot">=</span> <span class="dt">C</span> (x<span class="op">+</span>z, y<span class="op">+</span>t)</a>
<a class="sourceLine" id="cb2-13" title="13"> <span class="fu">abs</span> (<span class="dt">C</span> (x,y)) <span class="ot">=</span> <span class="dt">C</span> (<span class="fu">sqrt</span> (x<span class="op">*</span>x <span class="op">+</span> y<span class="op">*</span>y),<span class="fl">0.0</span>)</a>
<a class="sourceLine" id="cb2-14" title="14"> <span class="fu">signum</span> (<span class="dt">C</span> (x,y)) <span class="ot">=</span> <span class="dt">C</span> (<span class="fu">signum</span> x , <span class="fl">0.0</span>)</a>
<a class="sourceLine" id="cb2-15" title="15"></a>
<a class="sourceLine" id="cb2-16" title="16"><span class="ot">real ::</span> <span class="dt">Complex</span> <span class="ot">-&gt;</span> <span class="dt">Float</span></a>
<a class="sourceLine" id="cb2-17" title="17">real (<span class="dt">C</span> (x,y)) <span class="ot">=</span> x</a>
<a class="sourceLine" id="cb2-18" title="18"><span class="ot">im ::</span> <span class="dt">Complex</span> <span class="ot">-&gt;</span> <span class="dt">Float</span></a>
<a class="sourceLine" id="cb2-19" title="19">im (<span class="dt">C</span> (x,y)) <span class="ot">=</span> y</a>
<a class="sourceLine" id="cb2-20" title="20"></a>
<a class="sourceLine" id="cb2-21" title="21"><span class="ot">cabs ::</span> <span class="dt">Complex</span> <span class="ot">-&gt;</span> <span class="dt">Float</span></a>
<a class="sourceLine" id="cb2-22" title="22">cabs <span class="ot">=</span> real<span class="op">.</span><span class="fu">abs</span></a>
<a class="sourceLine" id="cb2-23" title="23"></a>
<a class="sourceLine" id="cb2-24" title="24"><span class="ot">f ::</span> <span class="dt">Complex</span> <span class="ot">-&gt;</span> <span class="dt">Complex</span> <span class="ot">-&gt;</span> <span class="dt">Int</span> <span class="ot">-&gt;</span> <span class="dt">Int</span></a>
<a class="sourceLine" id="cb2-25" title="25">f c z <span class="dv">0</span> <span class="ot">=</span> <span class="dv">0</span></a>
<a class="sourceLine" id="cb2-26" title="26">f c z n <span class="ot">=</span> <span class="kw">if</span> (cabs z <span class="op">&gt;</span> <span class="dv">2</span>) <span class="kw">then</span> n <span class="kw">else</span> f c ((z<span class="op">*</span>z)<span class="op">+</span>c) (n<span class="op">-</span><span class="dv">1</span>) </a>
<a class="sourceLine" id="cb2-27" title="27"></a>
<a class="sourceLine" id="cb2-28" title="28">bmandel bottomleft topright <span class="ot">=</span> <span class="fu">map</span> (\z <span class="ot">-&gt;</span> (f (<span class="dt">C</span> z) (<span class="dt">C</span>(<span class="dv">0</span>,<span class="dv">0</span>)) <span class="dv">32</span>, (<span class="fu">fst</span> z <span class="op">&gt;</span> right <span class="op">-</span> hstep<span class="op">/</span><span class="dv">2</span> ))) [(x,y) <span class="op">|</span> y <span class="ot">&lt;-</span> [bottom,(bottom <span class="op">+</span> vstep)<span class="op">..</span>top], x<span class="ot">&lt;-</span>[left,(left <span class="op">+</span> hstep)<span class="op">..</span>right]]</a>
<a class="sourceLine" id="cb2-29" title="29"> <span class="kw">where</span></a>
<a class="sourceLine" id="cb2-30" title="30"> top <span class="ot">=</span> im topright</a>
<a class="sourceLine" id="cb2-31" title="31"> bottom <span class="ot">=</span> im bottomleft</a>
<a class="sourceLine" id="cb2-32" title="32"> left <span class="ot">=</span> real bottomleft</a>
<a class="sourceLine" id="cb2-33" title="33"> right <span class="ot">=</span> real topright</a>
<a class="sourceLine" id="cb2-34" title="34"> vstep<span class="ot">=</span>(top<span class="op">-</span>bottom)<span class="op">/</span>nbvert</a>
<a class="sourceLine" id="cb2-35" title="35"> hstep<span class="ot">=</span>(right<span class="op">-</span>left)<span class="op">/</span>nbhor</a>
<a class="sourceLine" id="cb2-36" title="36"></a>
<a class="sourceLine" id="cb2-37" title="37"><span class="ot">mandel ::</span> (<span class="dt">Complex</span>,<span class="dt">Complex</span>) <span class="ot">-&gt;</span> <span class="dt">String</span></a>
<a class="sourceLine" id="cb2-38" title="38">mandel (bottomleft,topright) <span class="ot">=</span> <span class="fu">concat</span> <span class="op">$</span> <span class="fu">map</span> treat <span class="op">$</span> bmandel bottomleft topright</a>
<a class="sourceLine" id="cb2-39" title="39"> <span class="kw">where</span></a>
<a class="sourceLine" id="cb2-40" title="40"> treat (i,jump) <span class="ot">=</span> <span class="st">&quot; .,:;rcuowijlbCUOW&amp;$@#&quot;</span> <span class="op">!!</span> (<span class="fu">div</span> (i<span class="op">*</span><span class="dv">22</span>) <span class="dv">32</span>)<span class="op">:</span>rst jump</a>
<a class="sourceLine" id="cb2-41" title="41"> rst <span class="dt">True</span> <span class="ot">=</span> <span class="st">&quot;\n&quot;</span></a>
<a class="sourceLine" id="cb2-42" title="42"> rst <span class="dt">False</span> <span class="ot">=</span> <span class="st">&quot;&quot;</span></a>
<a class="sourceLine" id="cb2-43" title="43"></a>
<a class="sourceLine" id="cb2-44" title="44"><span class="ot">cdiv ::</span> <span class="dt">Complex</span> <span class="ot">-&gt;</span> <span class="dt">Float</span> <span class="ot">-&gt;</span> <span class="dt">Complex</span></a>
<a class="sourceLine" id="cb2-45" title="45">cdiv (<span class="dt">C</span>(x,y)) r <span class="ot">=</span> <span class="dt">C</span>(x<span class="op">/</span>r, y<span class="op">/</span>r) </a>
<a class="sourceLine" id="cb2-46" title="46"><span class="ot">cmul ::</span> <span class="dt">Complex</span> <span class="ot">-&gt;</span> <span class="dt">Float</span> <span class="ot">-&gt;</span> <span class="dt">Complex</span></a>
<a class="sourceLine" id="cb2-47" title="47">cmul (<span class="dt">C</span>(x,y)) r <span class="ot">=</span> <span class="dt">C</span>(x<span class="op">*</span>r, y<span class="op">*</span>r) </a>
<a class="sourceLine" id="cb2-48" title="48"></a>
<a class="sourceLine" id="cb2-49" title="49"><span class="ot">zoom ::</span> <span class="dt">Complex</span> <span class="ot">-&gt;</span> <span class="dt">Complex</span> <span class="ot">-&gt;</span> <span class="dt">Complex</span> <span class="ot">-&gt;</span> <span class="dt">Float</span> <span class="ot">-&gt;</span> (<span class="dt">Complex</span>,<span class="dt">Complex</span>)</a>
<a class="sourceLine" id="cb2-50" title="50">zoom bl tr center magn <span class="ot">=</span> (f bl, f tr)</a>
<a class="sourceLine" id="cb2-51" title="51"> <span class="kw">where</span></a>
<a class="sourceLine" id="cb2-52" title="52"> f point <span class="ot">=</span> ((center <span class="ot">`cmul`</span> magn) <span class="op">+</span> point ) <span class="ot">`cdiv`</span> (magn <span class="op">+</span> <span class="dv">1</span>)</a>
<a class="sourceLine" id="cb2-53" title="53"></a>
<a class="sourceLine" id="cb2-54" title="54">main <span class="ot">=</span> <span class="kw">do</span></a>
<a class="sourceLine" id="cb2-55" title="55"> x <span class="ot">&lt;-</span> <span class="fu">getContents</span></a>
<a class="sourceLine" id="cb2-56" title="56"> <span class="fu">putStrLn</span> <span class="op">$</span> infinitemandel <span class="dv">0</span></a>
<a class="sourceLine" id="cb2-57" title="57"> <span class="kw">where</span></a>
<a class="sourceLine" id="cb2-58" title="58"> window n <span class="ot">=</span> zoom init_bottom_left init_top_right interrest (zoomfactor<span class="op">**</span>n) </a>
<a class="sourceLine" id="cb2-59" title="59"> infinitemandel n <span class="ot">=</span> mandel (window n) <span class="op">++</span> <span class="st">&quot;\x1b[H\x1b[25A&quot;</span> <span class="op">++</span> infinitemandel (n<span class="op">+</span><span class="dv">1</span>)</a></code></pre></div>
</div>
<div id="afterarticle">
<div id="social">
<a href="/rss.xml" target="_blank" rel="noopener noreferrer nofollow" class="social">RSS</a>
·
<a href="https://twitter.com/home?status=http%3A%2F%2Fyannesposito.com/Scratch/en/blog/Haskell-Mandelbrot/%20via%20@yogsototh" target="_blank" rel="noopener noreferrer nofollow" class="social">Tweet</a>
·
<a href="http://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fyannesposito.com/Scratch/en/blog/Haskell-Mandelbrot/" target="_blank" rel="noopener noreferrer nofollow" class="social">FB</a>
<br />
<a class="message" href="../../../../Scratch/en/blog/Social-link-the-right-way/">These social sharing links preserve your privacy</a>
</div>
<div id="navigation">
<a href="../../../../">Home</a>
<span class="sep">¦</span>
<a href="../../../../Scratch/en/blog">Blog</a>
<span class="sep">¦</span>
<a href="../../../../Scratch/en/softwares">Softwares</a>
<span class="sep">¦</span>
<a href="../../../../Scratch/en/about">About</a>
</div>
<div id="totop"><a href="#header">↑ Top ↑</a></div>
<div id="bottom">
<div>
Published on 2011-07-10
</div>
<div>
<a href="https://twitter.com/yogsototh">Follow @yogsototh</a>
</div>
<div>
<a rel="license" href="http://creativecommons.org/licenses/by/3.0/deed.en_US">Yann Esposito©</a>
</div>
<div>
Done with
<a href="http://www.vim.org" target="_blank" rel="noopener noreferrer nofollow"><strike>Vim</strike></a>
<a href="http://spacemacs.org" target="_blank" rel="noopener noreferrer nofollow">spacemacs</a>
<span class="pala">&amp;</span>
<a href="http://nanoc.ws" target="_blank" rel="noopener noreferrer nofollow"><strike>nanoc</strike></a>
<a href="http://jaspervdj.be/hakyll" target="_blank" rel="noopener noreferrer nofollow">Hakyll</a>
</div>
<hr />
<div style="max-width: 100%">
<a href="https://cardanohub.org">
<img src="../../../../Scratch/img/ada-logo.png" class="simple" style="height: 16px;
border-radius: 50%;
vertical-align:middle;
display:inline-block;" />
ADA:
</a>
<code style="display:inline-block;
word-wrap:break-word;
text-align: left;
vertical-align: top;
max-width: 85%;">
DdzFFzCqrhtAvdkmATx5Fm8NPJViDy85ZBw13p4XcNzVzvQg8e3vWLXq23JQWFxPEXK6Kvhaxxe7oJt4VMYHxpA2vtCFiP8fziohN6Yp
</code>
</div>
</div>
</div>
</div>
</div>
</body>
</html>