-</code><code id="L803"><span class="ln">803</span> R.getColor<span class="s"> = </span><b>function</b> (value) {
-</code><code id="L804"><span class="ln">804</span> <b>var</b> start<span class="s"> = </span><b>this</b>.getColor.start<span class="s"> = </span><b>this</b>.getColor.start<span class="s"> || </span>{h: <span class="d">0</span>, s: <span class="d">1</span>, b: value<span class="s"> || </span><span class="d">.75</span>},
-</code><code id="L805"><span class="ln">805</span> rgb<span class="s"> = </span><b>this</b>.hsb2rgb(start.h, start.s, start.b);
-</code><code id="L806"><span class="ln">806</span> start.h += <span class="d">.075</span>;
-</code><code id="L807"><span class="ln">807</span> <b>if</b> (start.h > <span class="d">1</span>) {
-</code><code id="L808"><span class="ln">808</span> start.h<span class="s"> = </span><span class="d">0</span>;
-</code><code id="L809"><span class="ln">809</span> start.s -= <span class="d">.2</span>;
-</code><code id="L810"><span class="ln">810</span> start.s <= <span class="d">0</span> && (<b>this</b>.getColor.start<span class="s"> = </span>{h: <span class="d">0</span>, s: <span class="d">1</span>, b: start.b});
-</code><code id="L811"><span class="ln">811</span> }
-</code><code id="L812"><span class="ln">812</span> <b>return</b> rgb.hex;
-</code><code id="L813"><span class="ln">813</span> };
-</code><code id="L814"><span class="ln">814</span><span class="c"> <span class="c">/*\</span>
-</span></code><code id="L815"><span class="ln">815</span><span class="c"> <span class="s"> * </span>Raphael.getColor.reset
-</span></code><code id="L816"><span class="ln">816</span><span class="c"> [ method ]
-</span></code><code id="L817"><span class="ln">817</span><span class="c"> **
-</span></code><code id="L818"><span class="ln">818</span><span class="c"> <span class="s"> * </span>Resets spectrum position <b>for</b> @Raphael.getColor back to red.
-</span></code><code id="L819"><span class="ln">819</span><span class="c"> \*/</span>
-</code><code id="L820"><span class="ln">820</span> R.getColor.reset<span class="s"> = </span><b>function</b> () {
-</code><code id="L821"><span class="ln">821</span> <b>delete</b> <b>this</b>.start;
-</code><code id="L822"><span class="ln">822</span> };
-</code><code id="L823"><span class="ln">823</span>
-</code><code id="L824"><span class="ln">824</span><span class="c"> <span class="c">/*\</span>
-</span></code><code id="L825"><span class="ln">825</span><span class="c"> <span class="s"> * </span>Raphael.parsePathString
-</span></code><code id="L826"><span class="ln">826</span><span class="c"> [ method ]
-</span></code><code id="L827"><span class="ln">827</span><span class="c"> **
-</span></code><code id="L828"><span class="ln">828</span><span class="c"> <span class="s"> * </span>Utility method
-</span></code><code id="L829"><span class="ln">829</span><span class="c"> **
-</span></code><code id="L830"><span class="ln">830</span><span class="c"> <span class="s"> * </span>Parses given path string into an array of arrays of path segments.
-</span></code><code id="L831"><span class="ln">831</span><span class="c"> > Parameters
-</span></code><code id="L832"><span class="ln">832</span><span class="c"> <span class="s"> - </span>pathString (string|array) path string or array of segments (<b>in</b> the last <b>case</b> it will be returned stright away)
-</span></code><code id="L833"><span class="ln">833</span><span class="c"> <span class="s"> = </span>(array) array of segments.
-</span></code><code id="L834"><span class="ln">834</span><span class="c"> \*/</span>
-</code><code id="L835"><span class="ln">835</span> R.parsePathString<span class="s"> = </span>cacher(<b>function</b> (pathString) {
-</code><code id="L836"><span class="ln">836</span> <b>if</b> (!pathString) {
-</code><code id="L837"><span class="ln">837</span> <b>return</b> <b>null</b>;
-</code><code id="L838"><span class="ln">838</span> }
-</code><code id="L839"><span class="ln">839</span> <b>var</b> paramCounts<span class="s"> = </span>{a: <span class="d">7</span>, c: <span class="d">6</span>, h: <span class="d">1</span>, l: <span class="d">2</span>, m: <span class="d">2</span>, q: <span class="d">4</span>, s: <span class="d">4</span>, t: <span class="d">2</span>, v: <span class="d">1</span>, z: <span class="d">0</span>},
-</code><code id="L840"><span class="ln">840</span> data<span class="s"> = </span>[];
-</code><code id="L841"><span class="ln">841</span> <b>if</b> (R.is(pathString, array) && R.is(pathString[<span class="d">0</span>], array)) { <span class="c">// rough assumption</span>
-</code><code id="L842"><span class="ln">842</span> data<span class="s"> = </span>pathClone(pathString);
-</code><code id="L843"><span class="ln">843</span> }
-</code><code id="L844"><span class="ln">844</span> <b>if</b> (!data.length) {
-</code><code id="L845"><span class="ln">845</span> Str(pathString).replace(pathCommand, <b>function</b> (a, b, c) {
-</code><code id="L846"><span class="ln">846</span> <b>var</b> params<span class="s"> = </span>[],
-</code><code id="L847"><span class="ln">847</span> name<span class="s"> = </span>lowerCase.call(b);
-</code><code id="L848"><span class="ln">848</span> c.replace(pathValues, <b>function</b> (a, b) {
-</code><code id="L849"><span class="ln">849</span> b && params.push(+b);
-</code><code id="L850"><span class="ln">850</span> });
-</code><code id="L851"><span class="ln">851</span> <b>if</b> (name<span class="s"> == </span><i>"m"</i> && params.length > <span class="d">2</span>) {
-</code><code id="L852"><span class="ln">852</span> data.push([b][concat](params.splice(<span class="d">0</span>, <span class="d">2</span>)));
-</code><code id="L853"><span class="ln">853</span> name<span class="s"> = </span><i>"l"</i>;
-</code><code id="L854"><span class="ln">854</span> b<span class="s"> = </span>b<span class="s"> == </span><i>"m"</i> ? <i>"l"</i> : <i>"L"</i>;
-</code><code id="L855"><span class="ln">855</span> }
-</code><code id="L856"><span class="ln">856</span> <b>while</b> (params.length >= paramCounts[name]) {
-</code><code id="L857"><span class="ln">857</span> data.push([b][concat](params.splice(<span class="d">0</span>, paramCounts[name])));
-</code><code id="L858"><span class="ln">858</span> <b>if</b> (!paramCounts[name]) {
-</code><code id="L859"><span class="ln">859</span> <b>break</b>;
-</code><code id="L860"><span class="ln">860</span> }
-</code><code id="L861"><span class="ln">861</span> }
-</code><code id="L862"><span class="ln">862</span> });
-</code><code id="L863"><span class="ln">863</span> }
-</code><code id="L864"><span class="ln">864</span> data.toString<span class="s"> = </span>R._path2string;
-</code><code id="L865"><span class="ln">865</span> <b>return</b> data;
-</code><code id="L866"><span class="ln">866</span> });
-</code><code id="L867"><span class="ln">867</span><span class="c"> <span class="c">/*\</span>
-</span></code><code id="L868"><span class="ln">868</span><span class="c"> <span class="s"> * </span>Raphael.parseTransformString
-</span></code><code id="L869"><span class="ln">869</span><span class="c"> [ method ]
-</span></code><code id="L870"><span class="ln">870</span><span class="c"> **
-</span></code><code id="L871"><span class="ln">871</span><span class="c"> <span class="s"> * </span>Utility method
-</span></code><code id="L872"><span class="ln">872</span><span class="c"> **
-</span></code><code id="L873"><span class="ln">873</span><span class="c"> <span class="s"> * </span>Parses given path string into an array of transformations.
-</span></code><code id="L874"><span class="ln">874</span><span class="c"> > Parameters
-</span></code><code id="L875"><span class="ln">875</span><span class="c"> <span class="s"> - </span>TString (string|array) transform string or array of transformations (<b>in</b> the last <b>case</b> it will be returned stright away)
-</span></code><code id="L876"><span class="ln">876</span><span class="c"> <span class="s"> = </span>(array) array of transformations.
-</span></code><code id="L877"><span class="ln">877</span><span class="c"> \*/</span>
-</code><code id="L878"><span class="ln">878</span> R.parseTransformString<span class="s"> = </span>cacher(<b>function</b> (TString) {
-</code><code id="L879"><span class="ln">879</span> <b>if</b> (!TString) {
-</code><code id="L880"><span class="ln">880</span> <b>return</b> <b>null</b>;
-</code><code id="L881"><span class="ln">881</span> }
-</code><code id="L882"><span class="ln">882</span> <b>var</b> paramCounts<span class="s"> = </span>{r: <span class="d">3</span>, s: <span class="d">4</span>, t: <span class="d">2</span>, m: <span class="d">6</span>},
-</code><code id="L883"><span class="ln">883</span> data<span class="s"> = </span>[];
-</code><code id="L884"><span class="ln">884</span> <b>if</b> (R.is(TString, array) && R.is(TString[<span class="d">0</span>], array)) { <span class="c">// rough assumption</span>
-</code><code id="L885"><span class="ln">885</span> data<span class="s"> = </span>pathClone(TString);
-</code><code id="L886"><span class="ln">886</span> }
-</code><code id="L887"><span class="ln">887</span> <b>if</b> (!data.length) {
-</code><code id="L888"><span class="ln">888</span> Str(TString).replace(tCommand, <b>function</b> (a, b, c) {
-</code><code id="L889"><span class="ln">889</span> <b>var</b> params<span class="s"> = </span>[],
-</code><code id="L890"><span class="ln">890</span> name<span class="s"> = </span>lowerCase.call(b);
-</code><code id="L891"><span class="ln">891</span> c.replace(pathValues, <b>function</b> (a, b) {
-</code><code id="L892"><span class="ln">892</span> b && params.push(+b);
-</code><code id="L893"><span class="ln">893</span> });
-</code><code id="L894"><span class="ln">894</span> data.push([name][concat](params));
-</code><code id="L895"><span class="ln">895</span> });
-</code><code id="L896"><span class="ln">896</span> }
-</code><code id="L897"><span class="ln">897</span> data.toString<span class="s"> = </span>R._path2string;
-</code><code id="L898"><span class="ln">898</span> <b>return</b> data;
-</code><code id="L899"><span class="ln">899</span> });
-</code><code id="L900"><span class="ln">900</span><span class="c"> <span class="c">/*\</span>
-</span></code><code id="L901"><span class="ln">901</span><span class="c"> <span class="s"> * </span>Raphael.findDotsAtSegment
-</span></code><code id="L902"><span class="ln">902</span><span class="c"> [ method ]
-</span></code><code id="L903"><span class="ln">903</span><span class="c"> **
-</span></code><code id="L904"><span class="ln">904</span><span class="c"> <span class="s"> * </span>Utility method
-</span></code><code id="L905"><span class="ln">905</span><span class="c"> **
-</span></code><code id="L906"><span class="ln">906</span><span class="c"> <span class="s"> * </span>Find dot coordinates on the given cubic bezier curve at the given t.
-</span></code><code id="L907"><span class="ln">907</span><span class="c"> > Parameters
-</span></code><code id="L908"><span class="ln">908</span><span class="c"> <span class="s"> - </span>p1x (number) x of the first point of the curve
-</span></code><code id="L909"><span class="ln">909</span><span class="c"> <span class="s"> - </span>p1y (number) y of the first point of the curve
-</span></code><code id="L910"><span class="ln">910</span><span class="c"> <span class="s"> - </span>c1x (number) x of the first anchor of the curve
-</span></code><code id="L911"><span class="ln">911</span><span class="c"> <span class="s"> - </span>c1y (number) y of the first anchor of the curve
-</span></code><code id="L912"><span class="ln">912</span><span class="c"> <span class="s"> - </span>c2x (number) x of the second anchor of the curve
-</span></code><code id="L913"><span class="ln">913</span><span class="c"> <span class="s"> - </span>c2y (number) y of the second anchor of the curve
-</span></code><code id="L914"><span class="ln">914</span><span class="c"> <span class="s"> - </span>p2x (number) x of the second point of the curve
-</span></code><code id="L915"><span class="ln">915</span><span class="c"> <span class="s"> - </span>p2y (number) y of the second point of the curve
-</span></code><code id="L916"><span class="ln">916</span><span class="c"> <span class="s"> - </span>t (number) position on the curve (<span class="d">0</span>.<span class="d">.1</span>)
-</span></code><code id="L917"><span class="ln">917</span><span class="c"> <span class="s"> = </span>(object) point information <b>in</b> format:
-</span></code><code id="L918"><span class="ln">918</span><span class="c"> | {
-</span></code><code id="L919"><span class="ln">919</span><span class="c"> | x: <span class="c">// x coordinate of the point,</span>
-</span></code><code id="L920"><span class="ln">920</span><span class="c"> | y: <span class="c">// y coordinate of the point,</span>
-</span></code><code id="L921"><span class="ln">921</span><span class="c"> | m: {
-</span></code><code id="L922"><span class="ln">922</span><span class="c"> | x: <span class="c">// x coordinate of the left anchor,</span>
-</span></code><code id="L923"><span class="ln">923</span><span class="c"> | y: <span class="c">// y coordinate of the left anchor</span>
-</span></code><code id="L924"><span class="ln">924</span><span class="c"> | },
-</span></code><code id="L925"><span class="ln">925</span><span class="c"> | n: {
-</span></code><code id="L926"><span class="ln">926</span><span class="c"> | x: <span class="c">// x coordinate of the right anchor,</span>
-</span></code><code id="L927"><span class="ln">927</span><span class="c"> | y: <span class="c">// y coordinate of the right anchor</span>
-</span></code><code id="L928"><span class="ln">928</span><span class="c"> | },
-</span></code><code id="L929"><span class="ln">929</span><span class="c"> | start: {
-</span></code><code id="L930"><span class="ln">930</span><span class="c"> | x: <span class="c">// x coordinate of the start of the curve,</span>
-</span></code><code id="L931"><span class="ln">931</span><span class="c"> | y: <span class="c">// y coordinate of the start of the curve</span>
-</span></code><code id="L932"><span class="ln">932</span><span class="c"> | },
-</span></code><code id="L933"><span class="ln">933</span><span class="c"> | end: {
-</span></code><code id="L934"><span class="ln">934</span><span class="c"> | x: <span class="c">// x coordinate of the end of the curve,</span>
-</span></code><code id="L935"><span class="ln">935</span><span class="c"> | y: <span class="c">// y coordinate of the end of the curve</span>
-</span></code><code id="L936"><span class="ln">936</span><span class="c"> | },
-</span></code><code id="L937"><span class="ln">937</span><span class="c"> | alpha: <span class="c">// angle of the curve derivative at the point.</span>
-</span></code><code id="L938"><span class="ln">938</span><span class="c"> | }
-</span></code><code id="L939"><span class="ln">939</span><span class="c"> \*/</span>
-</code><code id="L940"><span class="ln">940</span> R.findDotsAtSegment<span class="s"> = </span><b>function</b> (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {
-</code><code id="L941"><span class="ln">941</span> <b>var</b> t1<span class="s"> = </span><span class="d">1</span><span class="s"> - </span>t,
-</code><code id="L942"><span class="ln">942</span> x<span class="s"> = </span>pow(t1, <span class="d">3</span>)<span class="s"> * </span>p1x<span class="s"> + </span>pow(t1, <span class="d">2</span>)<span class="s"> * </span><span class="d">3</span><span class="s"> * </span>t<span class="s"> * </span>c1x<span class="s"> + </span>t1<span class="s"> * </span><span class="d">3</span><span class="s"> * </span>t<span class="s"> * </span>t<span class="s"> * </span>c2x<span class="s"> + </span>pow(t, <span class="d">3</span>)<span class="s"> * </span>p2x,
-</code><code id="L943"><span class="ln">943</span> y<span class="s"> = </span>pow(t1, <span class="d">3</span>)<span class="s"> * </span>p1y<span class="s"> + </span>pow(t1, <span class="d">2</span>)<span class="s"> * </span><span class="d">3</span><span class="s"> * </span>t<span class="s"> * </span>c1y<span class="s"> + </span>t1<span class="s"> * </span><span class="d">3</span><span class="s"> * </span>t<span class="s"> * </span>t<span class="s"> * </span>c2y<span class="s"> + </span>pow(t, <span class="d">3</span>)<span class="s"> * </span>p2y,
-</code><code id="L944"><span class="ln">944</span> mx<span class="s"> = </span>p1x<span class="s"> + </span><span class="d">2</span><span class="s"> * </span>t<span class="s"> * </span>(c1x<span class="s"> - </span>p1x)<span class="s"> + </span>t<span class="s"> * </span>t<span class="s"> * </span>(c2x<span class="s"> - </span><span class="d">2</span><span class="s"> * </span>c1x<span class="s"> + </span>p1x),
-</code><code id="L945"><span class="ln">945</span> my<span class="s"> = </span>p1y<span class="s"> + </span><span class="d">2</span><span class="s"> * </span>t<span class="s"> * </span>(c1y<span class="s"> - </span>p1y)<span class="s"> + </span>t<span class="s"> * </span>t<span class="s"> * </span>(c2y<span class="s"> - </span><span class="d">2</span><span class="s"> * </span>c1y<span class="s"> + </span>p1y),
-</code><code id="L946"><span class="ln">946</span> nx<span class="s"> = </span>c1x<span class="s"> + </span><span class="d">2</span><span class="s"> * </span>t<span class="s"> * </span>(c2x<span class="s"> - </span>c1x)<span class="s"> + </span>t<span class="s"> * </span>t<span class="s"> * </span>(p2x<span class="s"> - </span><span class="d">2</span><span class="s"> * </span>c2x<span class="s"> + </span>c1x),
-</code><code id="L947"><span class="ln">947</span> ny<span class="s"> = </span>c1y<span class="s"> + </span><span class="d">2</span><span class="s"> * </span>t<span class="s"> * </span>(c2y<span class="s"> - </span>c1y)<span class="s"> + </span>t<span class="s"> * </span>t<span class="s"> * </span>(p2y<span class="s"> - </span><span class="d">2</span><span class="s"> * </span>c2y<span class="s"> + </span>c1y),
-</code><code id="L948"><span class="ln">948</span> ax<span class="s"> = </span>(<span class="d">1</span><span class="s"> - </span>t)<span class="s"> * </span>p1x<span class="s"> + </span>t<span class="s"> * </span>c1x,
-</code><code id="L949"><span class="ln">949</span> ay<span class="s"> = </span>(<span class="d">1</span><span class="s"> - </span>t)<span class="s"> * </span>p1y<span class="s"> + </span>t<span class="s"> * </span>c1y,
-</code><code id="L950"><span class="ln">950</span> cx<span class="s"> = </span>(<span class="d">1</span><span class="s"> - </span>t)<span class="s"> * </span>c2x<span class="s"> + </span>t<span class="s"> * </span>p2x,
-</code><code id="L951"><span class="ln">951</span> cy<span class="s"> = </span>(<span class="d">1</span><span class="s"> - </span>t)<span class="s"> * </span>c2y<span class="s"> + </span>t<span class="s"> * </span>p2y,
-</code><code id="L952"><span class="ln">952</span> alpha<span class="s"> = </span>(<span class="d">90</span><span class="s"> - </span>math.atan2(mx<span class="s"> - </span>nx, my<span class="s"> - </span>ny)<span class="s"> * </span><span class="d">180</span><span class="s"> / </span>PI);
-</code><code id="L953"><span class="ln">953</span> (mx > nx<span class="s"> || </span>my < ny) && (alpha += <span class="d">180</span>);
-</code><code id="L954"><span class="ln">954</span> <b>return</b> {x: x, y: y, m: {x: mx, y: my}, n: {x: nx, y: ny}, start: {x: ax, y: ay}, end: {x: cx, y: cy}, alpha: alpha};
-</code><code id="L955"><span class="ln">955</span> };
-</code><code id="L956"><span class="ln">956</span> <b>var</b> pathDimensions<span class="s"> = </span>cacher(<b>function</b> (path) {
-</code><code id="L957"><span class="ln">957</span> <b>if</b> (!path) {
-</code><code id="L958"><span class="ln">958</span> <b>return</b> {x: <span class="d">0</span>, y: <span class="d">0</span>, width: <span class="d">0</span>, height: <span class="d">0</span>};
-</code><code id="L959"><span class="ln">959</span> }
-</code><code id="L960"><span class="ln">960</span> path<span class="s"> = </span>path2curve(path);
-</code><code id="L961"><span class="ln">961</span> <b>var</b> x<span class="s"> = </span><span class="d">0</span>,
-</code><code id="L962"><span class="ln">962</span> y<span class="s"> = </span><span class="d">0</span>,
-</code><code id="L963"><span class="ln">963</span> X<span class="s"> = </span>[],
-</code><code id="L964"><span class="ln">964</span> Y<span class="s"> = </span>[],
-</code><code id="L965"><span class="ln">965</span> p;
-</code><code id="L966"><span class="ln">966</span> <b>for</b> (<b>var</b> i<span class="s"> = </span><span class="d">0</span>, ii<span class="s"> = </span>path.length; i < ii; i++) {
-</code><code id="L967"><span class="ln">967</span> p<span class="s"> = </span>path[i];
-</code><code id="L968"><span class="ln">968</span> <b>if</b> (p[<span class="d">0</span>]<span class="s"> == </span><i>"M"</i>) {
-</code><code id="L969"><span class="ln">969</span> x<span class="s"> = </span>p[<span class="d">1</span>];
-</code><code id="L970"><span class="ln">970</span> y<span class="s"> = </span>p[<span class="d">2</span>];
-</code><code id="L971"><span class="ln">971</span> X.push(x);
-</code><code id="L972"><span class="ln">972</span> Y.push(y);
-</code><code id="L973"><span class="ln">973</span> } <b>else</b> {
-</code><code id="L974"><span class="ln">974</span> <b>var</b> dim<span class="s"> = </span>curveDim(x, y, p[<span class="d">1</span>], p[<span class="d">2</span>], p[<span class="d">3</span>], p[<span class="d">4</span>], p[<span class="d">5</span>], p[<span class="d">6</span>]);
-</code><code id="L975"><span class="ln">975</span> X<span class="s"> = </span>X[concat](dim.min.x, dim.max.x);
-</code><code id="L976"><span class="ln">976</span> Y<span class="s"> = </span>Y[concat](dim.min.y, dim.max.y);
-</code><code id="L977"><span class="ln">977</span> x<span class="s"> = </span>p[<span class="d">5</span>];
-</code><code id="L978"><span class="ln">978</span> y<span class="s"> = </span>p[<span class="d">6</span>];
-</code><code id="L979"><span class="ln">979</span> }
-</code><code id="L980"><span class="ln">980</span> }
-</code><code id="L981"><span class="ln">981</span> <b>var</b> xmin<span class="s"> = </span>mmin[apply](<span class="d">0</span>, X),
-</code><code id="L982"><span class="ln">982</span> ymin<span class="s"> = </span>mmin[apply](<span class="d">0</span>, Y);
-</code><code id="L983"><span class="ln">983</span> <b>return</b> {
-</code><code id="L984"><span class="ln">984</span> x: xmin,
-</code><code id="L985"><span class="ln">985</span> y: ymin,
-</code><code id="L986"><span class="ln">986</span> width: mmax[apply](<span class="d">0</span>, X)<span class="s"> - </span>xmin,
-</code><code id="L987"><span class="ln">987</span> height: mmax[apply](<span class="d">0</span>, Y)<span class="s"> - </span>ymin
-</code><code id="L988"><span class="ln">988</span> };
-</code><code id="L989"><span class="ln">989</span> }),
-</code><code id="L990"><span class="ln">990</span> pathClone<span class="s"> = </span><b>function</b> (pathArray) {
-</code><code id="L991"><span class="ln">991</span> <b>var</b> res<span class="s"> = </span>[];
-</code><code id="L992"><span class="ln">992</span> <b>if</b> (!R.is(pathArray, array)<span class="s"> || </span>!R.is(pathArray && pathArray[<span class="d">0</span>], array)) { <span class="c">// rough assumption</span>
-</code><code id="L993"><span class="ln">993</span> pathArray<span class="s"> = </span>R.parsePathString(pathArray);
-</code><code id="L994"><span class="ln">994</span> }
-</code><code id="L995"><span class="ln">995</span> <b>for</b> (<b>var</b> i<span class="s"> = </span><span class="d">0</span>, ii<span class="s"> = </span>pathArray.length; i < ii; i++) {
-</code><code id="L996"><span class="ln">996</span> res[i]<span class="s"> = </span>[];
-</code><code id="L997"><span class="ln">997</span> <b>for</b> (<b>var</b> j<span class="s"> = </span><span class="d">0</span>, jj<span class="s"> = </span>pathArray[i].length; j < jj; j++) {
-</code><code id="L998"><span class="ln">998</span> res[i][j]<span class="s"> = </span>pathArray[i][j];
-</code><code id="L999"><span class="ln">999</span> }
-</code><code id="L1000"><span class="ln">1000</span> }
-</code><code id="L1001"><span class="ln">1001</span> res.toString<span class="s"> = </span>R._path2string;
-</code><code id="L1002"><span class="ln">1002</span> <b>return</b> res;
-</code><code id="L1003"><span class="ln">1003</span> },
-</code><code id="L1004"><span class="ln">1004</span> pathToRelative<span class="s"> = </span>cacher(<b>function</b> (pathArray) {
-</code><code id="L1005"><span class="ln">1005</span> <b>if</b> (!R.is(pathArray, array)<span class="s"> || </span>!R.is(pathArray && pathArray[<span class="d">0</span>], array)) { <span class="c">// rough assumption</span>
-</code><code id="L1006"><span class="ln">1006</span> pathArray<span class="s"> = </span>R.parsePathString(pathArray);
-</code><code id="L1007"><span class="ln">1007</span> }
-</code><code id="L1008"><span class="ln">1008</span> <b>var</b> res<span class="s"> = </span>[],
-</code><code id="L1009"><span class="ln">1009</span> x<span class="s"> = </span><span class="d">0</span>,
-</code><code id="L1010"><span class="ln">1010</span> y<span class="s"> = </span><span class="d">0</span>,
-</code><code id="L1011"><span class="ln">1011</span> mx<span class="s"> = </span><span class="d">0</span>,
-</code><code id="L1012"><span class="ln">1012</span> my<span class="s"> = </span><span class="d">0</span>,
-</code><code id="L1013"><span class="ln">1013</span> start<span class="s"> = </span><span class="d">0</span>;
-</code><code id="L1014"><span class="ln">1014</span> <b>if</b> (pathArray[<span class="d">0</span>][<span class="d">0</span>]<span class="s"> == </span><i>"M"</i>) {
-</code><code id="L1015"><span class="ln">1015</span> x<span class="s"> = </span>pathArray[<span class="d">0</span>][<span class="d">1</span>];
-</code><code id="L1016"><span class="ln">1016</span> y<span class="s"> = </span>pathArray[<span class="d">0</span>][<span class="d">2</span>];
-</code><code id="L1017"><span class="ln">1017</span> mx<span class="s"> = </span>x;
-</code><code id="L1018"><span class="ln">1018</span> my<span class="s"> = </span>y;
-</code><code id="L1019"><span class="ln">1019</span> start++;
-</code><code id="L1020"><span class="ln">1020</span> res.push([<i>"M"</i>, x, y]);
-</code><code id="L1021"><span class="ln">1021</span> }
-</code><code id="L1022"><span class="ln">1022</span> <b>for</b> (<b>var</b> i<span class="s"> = </span>start, ii<span class="s"> = </span>pathArray.length; i < ii; i++) {
-</code><code id="L1023"><span class="ln">1023</span> <b>var</b> r<span class="s"> = </span>res[i]<span class="s"> = </span>[],
-</code><code id="L1024"><span class="ln">1024</span> pa<span class="s"> = </span>pathArray[i];
-</code><code id="L1025"><span class="ln">1025</span> <b>if</b> (pa[<span class="d">0</span>] != lowerCase.call(pa[<span class="d">0</span>])) {
-</code><code id="L1026"><span class="ln">1026</span> r[<span class="d">0</span>]<span class="s"> = </span>lowerCase.call(pa[<span class="d">0</span>]);
-</code><code id="L1027"><span class="ln">1027</span> <b>switch</b> (r[<span class="d">0</span>]) {
-</code><code id="L1028"><span class="ln">1028</span> <b>case</b> <i>"a"</i>:
-</code><code id="L1029"><span class="ln">1029</span> r[<span class="d">1</span>]<span class="s"> = </span>pa[<span class="d">1</span>];
-</code><code id="L1030"><span class="ln">1030</span> r[<span class="d">2</span>]<span class="s"> = </span>pa[<span class="d">2</span>];
-</code><code id="L1031"><span class="ln">1031</span> r[<span class="d">3</span>]<span class="s"> = </span>pa[<span class="d">3</span>];
-</code><code id="L1032"><span class="ln">1032</span> r[<span class="d">4</span>]<span class="s"> = </span>pa[<span class="d">4</span>];
-</code><code id="L1033"><span class="ln">1033</span> r[<span class="d">5</span>]<span class="s"> = </span>pa[<span class="d">5</span>];
-</code><code id="L1034"><span class="ln">1034</span> r[<span class="d">6</span>]<span class="s"> = </span>+(pa[<span class="d">6</span>]<span class="s"> - </span>x).toFixed(<span class="d">3</span>);
-</code><code id="L1035"><span class="ln">1035</span> r[<span class="d">7</span>]<span class="s"> = </span>+(pa[<span class="d">7</span>]<span class="s"> - </span>y).toFixed(<span class="d">3</span>);
-</code><code id="L1036"><span class="ln">1036</span> <b>break</b>;
-</code><code id="L1037"><span class="ln">1037</span> <b>case</b> <i>"v"</i>:
-</code><code id="L1038"><span class="ln">1038</span> r[<span class="d">1</span>]<span class="s"> = </span>+(pa[<span class="d">1</span>]<span class="s"> - </span>y).toFixed(<span class="d">3</span>);
-</code><code id="L1039"><span class="ln">1039</span> <b>break</b>;
-</code><code id="L1040"><span class="ln">1040</span> <b>case</b> <i>"m"</i>:
-</code><code id="L1041"><span class="ln">1041</span> mx<span class="s"> = </span>pa[<span class="d">1</span>];
-</code><code id="L1042"><span class="ln">1042</span> my<span class="s"> = </span>pa[<span class="d">2</span>];
-</code><code id="L1043"><span class="ln">1043</span> <b>default</b>:
-</code><code id="L1044"><span class="ln">1044</span> <b>for</b> (<b>var</b> j<span class="s"> = </span><span class="d">1</span>, jj<span class="s"> = </span>pa.length; j < jj; j++) {
-</code><code id="L1045"><span class="ln">1045</span> r[j]<span class="s"> = </span>+(pa[j]<span class="s"> - </span>((j % <span class="d">2</span>) ? x : y)).toFixed(<span class="d">3</span>);
-</code><code id="L1046"><span class="ln">1046</span> }
-</code><code id="L1047"><span class="ln">1047</span> }
-</code><code id="L1048"><span class="ln">1048</span> } <b>else</b> {
-</code><code id="L1049"><span class="ln">1049</span> r<span class="s"> = </span>res[i]<span class="s"> = </span>[];
-</code><code id="L1050"><span class="ln">1050</span> <b>if</b> (pa[<span class="d">0</span>]<span class="s"> == </span><i>"m"</i>) {
-</code><code id="L1051"><span class="ln">1051</span> mx<span class="s"> = </span>pa[<span class="d">1</span>]<span class="s"> + </span>x;
-</code><code id="L1052"><span class="ln">1052</span> my<span class="s"> = </span>pa[<span class="d">2</span>]<span class="s"> + </span>y;
-</code><code id="L1053"><span class="ln">1053</span> }
-</code><code id="L1054"><span class="ln">1054</span> <b>for</b> (<b>var</b> k<span class="s"> = </span><span class="d">0</span>, kk<span class="s"> = </span>pa.length; k < kk; k++) {
-</code><code id="L1055"><span class="ln">1055</span> res[i][k]<span class="s"> = </span>pa[k];
-</code><code id="L1056"><span class="ln">1056</span> }
-</code><code id="L1057"><span class="ln">1057</span> }
-</code><code id="L1058"><span class="ln">1058</span> <b>var</b> len<span class="s"> = </span>res[i].length;
-</code><code id="L1059"><span class="ln">1059</span> <b>switch</b> (res[i][<span class="d">0</span>]) {
-</code><code id="L1060"><span class="ln">1060</span> <b>case</b> <i>"z"</i>:
-</code><code id="L1061"><span class="ln">1061</span> x<span class="s"> = </span>mx;
-</code><code id="L1062"><span class="ln">1062</span> y<span class="s"> = </span>my;
-</code><code id="L1063"><span class="ln">1063</span> <b>break</b>;
-</code><code id="L1064"><span class="ln">1064</span> <b>case</b> <i>"h"</i>:
-</code><code id="L1065"><span class="ln">1065</span> x += +res[i][len<span class="s"> - </span><span class="d">1</span>];
-</code><code id="L1066"><span class="ln">1066</span> <b>break</b>;
-</code><code id="L1067"><span class="ln">1067</span> <b>case</b> <i>"v"</i>:
-</code><code id="L1068"><span class="ln">1068</span> y += +res[i][len<span class="s"> - </span><span class="d">1</span>];
-</code><code id="L1069"><span class="ln">1069</span> <b>break</b>;
-</code><code id="L1070"><span class="ln">1070</span> <b>default</b>:
-</code><code id="L1071"><span class="ln">1071</span> x += +res[i][len<span class="s"> - </span><span class="d">2</span>];
-</code><code id="L1072"><span class="ln">1072</span> y += +res[i][len<span class="s"> - </span><span class="d">1</span>];
-</code><code id="L1073"><span class="ln">1073</span> }
-</code><code id="L1074"><span class="ln">1074</span> }
-</code><code id="L1075"><span class="ln">1075</span> res.toString<span class="s"> = </span>R._path2string;
-</code><code id="L1076"><span class="ln">1076</span> <b>return</b> res;
-</code><code id="L1077"><span class="ln">1077</span> }, <span class="d">0</span>, pathClone),
-</code><code id="L1078"><span class="ln">1078</span> pathToAbsolute<span class="s"> = </span>cacher(<b>function</b> (pathArray) {
-</code><code id="L1079"><span class="ln">1079</span> <b>if</b> (!R.is(pathArray, array)<span class="s"> || </span>!R.is(pathArray && pathArray[<span class="d">0</span>], array)) { <span class="c">// rough assumption</span>
-</code><code id="L1080"><span class="ln">1080</span> pathArray<span class="s"> = </span>R.parsePathString(pathArray);
-</code><code id="L1081"><span class="ln">1081</span> }
-</code><code id="L1082"><span class="ln">1082</span> <b>var</b> res<span class="s"> = </span>[],
-</code><code id="L1083"><span class="ln">1083</span> x<span class="s"> = </span><span class="d">0</span>,
-</code><code id="L1084"><span class="ln">1084</span> y<span class="s"> = </span><span class="d">0</span>,
-</code><code id="L1085"><span class="ln">1085</span> mx<span class="s"> = </span><span class="d">0</span>,
-</code><code id="L1086"><span class="ln">1086</span> my<span class="s"> = </span><span class="d">0</span>,
-</code><code id="L1087"><span class="ln">1087</span> start<span class="s"> = </span><span class="d">0</span>;
-</code><code id="L1088"><span class="ln">1088</span> <b>if</b> (pathArray[<span class="d">0</span>][<span class="d">0</span>]<span class="s"> == </span><i>"M"</i>) {
-</code><code id="L1089"><span class="ln">1089</span> x<span class="s"> = </span>+pathArray[<span class="d">0</span>][<span class="d">1</span>];
-</code><code id="L1090"><span class="ln">1090</span> y<span class="s"> = </span>+pathArray[<span class="d">0</span>][<span class="d">2</span>];
-</code><code id="L1091"><span class="ln">1091</span> mx<span class="s"> = </span>x;
-</code><code id="L1092"><span class="ln">1092</span> my<span class="s"> = </span>y;
-</code><code id="L1093"><span class="ln">1093</span> start++;
-</code><code id="L1094"><span class="ln">1094</span> res[<span class="d">0</span>]<span class="s"> = </span>[<i>"M"</i>, x, y];
-</code><code id="L1095"><span class="ln">1095</span> }
-</code><code id="L1096"><span class="ln">1096</span> <b>for</b> (<b>var</b> i<span class="s"> = </span>start, ii<span class="s"> = </span>pathArray.length; i < ii; i++) {
-</code><code id="L1097"><span class="ln">1097</span> <b>var</b> r<span class="s"> = </span>res[i]<span class="s"> = </span>[],
-</code><code id="L1098"><span class="ln">1098</span> pa<span class="s"> = </span>pathArray[i];
-</code><code id="L1099"><span class="ln">1099</span> <b>if</b> (pa[<span class="d">0</span>] != upperCase.call(pa[<span class="d">0</span>])) {
-</code><code id="L1100"><span class="ln">1100</span> r[<span class="d">0</span>]<span class="s"> = </span>upperCase.call(pa[<span class="d">0</span>]);
-</code><code id="L1101"><span class="ln">1101</span> <b>switch</b> (r[<span class="d">0</span>]) {
-</code><code id="L1102"><span class="ln">1102</span> <b>case</b> <i>"A"</i>:
-</code><code id="L1103"><span class="ln">1103</span> r[<span class="d">1</span>]<span class="s"> = </span>pa[<span class="d">1</span>];
-</code><code id="L1104"><span class="ln">1104</span> r[<span class="d">2</span>]<span class="s"> = </span>pa[<span class="d">2</span>];
-</code><code id="L1105"><span class="ln">1105</span> r[<span class="d">3</span>]<span class="s"> = </span>pa[<span class="d">3</span>];
-</code><code id="L1106"><span class="ln">1106</span> r[<span class="d">4</span>]<span class="s"> = </span>pa[<span class="d">4</span>];
-</code><code id="L1107"><span class="ln">1107</span> r[<span class="d">5</span>]<span class="s"> = </span>pa[<span class="d">5</span>];
-</code><code id="L1108"><span class="ln">1108</span> r[<span class="d">6</span>]<span class="s"> = </span>+(pa[<span class="d">6</span>]<span class="s"> + </span>x);
-</code><code id="L1109"><span class="ln">1109</span> r[<span class="d">7</span>]<span class="s"> = </span>+(pa[<span class="d">7</span>]<span class="s"> + </span>y);
-</code><code id="L1110"><span class="ln">1110</span> <b>break</b>;
-</code><code id="L1111"><span class="ln">1111</span> <b>case</b> <i>"V"</i>:
-</code><code id="L1112"><span class="ln">1112</span> r[<span class="d">1</span>]<span class="s"> = </span>+pa[<span class="d">1</span>]<span class="s"> + </span>y;
-</code><code id="L1113"><span class="ln">1113</span> <b>break</b>;
-</code><code id="L1114"><span class="ln">1114</span> <b>case</b> <i>"H"</i>:
-</code><code id="L1115"><span class="ln">1115</span> r[<span class="d">1</span>]<span class="s"> = </span>+pa[<span class="d">1</span>]<span class="s"> + </span>x;
-</code><code id="L1116"><span class="ln">1116</span> <b>break</b>;
-</code><code id="L1117"><span class="ln">1117</span> <b>case</b> <i>"M"</i>:
-</code><code id="L1118"><span class="ln">1118</span> mx<span class="s"> = </span>+pa[<span class="d">1</span>]<span class="s"> + </span>x;
-</code><code id="L1119"><span class="ln">1119</span> my<span class="s"> = </span>+pa[<span class="d">2</span>]<span class="s"> + </span>y;
-</code><code id="L1120"><span class="ln">1120</span> <b>default</b>:
-</code><code id="L1121"><span class="ln">1121</span> <b>for</b> (<b>var</b> j<span class="s"> = </span><span class="d">1</span>, jj<span class="s"> = </span>pa.length; j < jj; j++) {
-</code><code id="L1122"><span class="ln">1122</span> r[j]<span class="s"> = </span>+pa[j]<span class="s"> + </span>((j % <span class="d">2</span>) ? x : y);
-</code><code id="L1123"><span class="ln">1123</span> }
-</code><code id="L1124"><span class="ln">1124</span> }
-</code><code id="L1125"><span class="ln">1125</span> } <b>else</b> {
-</code><code id="L1126"><span class="ln">1126</span> <b>for</b> (<b>var</b> k<span class="s"> = </span><span class="d">0</span>, kk<span class="s"> = </span>pa.length; k < kk; k++) {
-</code><code id="L1127"><span class="ln">1127</span> res[i][k]<span class="s"> = </span>pa[k];
-</code><code id="L1128"><span class="ln">1128</span> }
-</code><code id="L1129"><span class="ln">1129</span> }
-</code><code id="L1130"><span class="ln">1130</span> <b>switch</b> (r[<span class="d">0</span>]) {
-</code><code id="L1131"><span class="ln">1131</span> <b>case</b> <i>"Z"</i>:
-</code><code id="L1132"><span class="ln">1132</span> x<span class="s"> = </span>mx;
-</code><code id="L1133"><span class="ln">1133</span> y<span class="s"> = </span>my;
-</code><code id="L1134"><span class="ln">1134</span> <b>break</b>;
-</code><code id="L1135"><span class="ln">1135</span> <b>case</b> <i>"H"</i>:
-</code><code id="L1136"><span class="ln">1136</span> x<span class="s"> = </span>r[<span class="d">1</span>];
-</code><code id="L1137"><span class="ln">1137</span> <b>break</b>;
-</code><code id="L1138"><span class="ln">1138</span> <b>case</b> <i>"V"</i>:
-</code><code id="L1139"><span class="ln">1139</span> y<span class="s"> = </span>r[<span class="d">1</span>];
-</code><code id="L1140"><span class="ln">1140</span> <b>break</b>;
-</code><code id="L1141"><span class="ln">1141</span> <b>case</b> <i>"M"</i>:
-</code><code id="L1142"><span class="ln">1142</span> mx<span class="s"> = </span>res[i][res[i].length<span class="s"> - </span><span class="d">2</span>];
-</code><code id="L1143"><span class="ln">1143</span> my<span class="s"> = </span>res[i][res[i].length<span class="s"> - </span><span class="d">1</span>];
-</code><code id="L1144"><span class="ln">1144</span> <b>default</b>:
-</code><code id="L1145"><span class="ln">1145</span> x<span class="s"> = </span>res[i][res[i].length<span class="s"> - </span><span class="d">2</span>];
-</code><code id="L1146"><span class="ln">1146</span> y<span class="s"> = </span>res[i][res[i].length<span class="s"> - </span><span class="d">1</span>];
-</code><code id="L1147"><span class="ln">1147</span> }
-</code><code id="L1148"><span class="ln">1148</span> }
-</code><code id="L1149"><span class="ln">1149</span> res.toString<span class="s"> = </span>R._path2string;
-</code><code id="L1150"><span class="ln">1150</span> <b>return</b> res;
-</code><code id="L1151"><span class="ln">1151</span> }, <b>null</b>, pathClone),
-</code><code id="L1152"><span class="ln">1152</span> l2c<span class="s"> = </span><b>function</b> (x1, y1, x2, y2) {
-</code><code id="L1153"><span class="ln">1153</span> <b>return</b> [x1, y1, x2, y2, x2, y2];
-</code><code id="L1154"><span class="ln">1154</span> },
-</code><code id="L1155"><span class="ln">1155</span> q2c<span class="s"> = </span><b>function</b> (x1, y1, ax, ay, x2, y2) {
-</code><code id="L1156"><span class="ln">1156</span> <b>var</b> _13<span class="s"> = </span><span class="d">1</span><span class="s"> / </span><span class="d">3</span>,
-</code><code id="L1157"><span class="ln">1157</span> _23<span class="s"> = </span><span class="d">2</span><span class="s"> / </span><span class="d">3</span>;
-</code><code id="L1158"><span class="ln">1158</span> <b>return</b> [
-</code><code id="L1159"><span class="ln">1159</span> _13<span class="s"> * </span>x1<span class="s"> + </span>_23<span class="s"> * </span>ax,
-</code><code id="L1160"><span class="ln">1160</span> _13<span class="s"> * </span>y1<span class="s"> + </span>_23<span class="s"> * </span>ay,
-</code><code id="L1161"><span class="ln">1161</span> _13<span class="s"> * </span>x2<span class="s"> + </span>_23<span class="s"> * </span>ax,
-</code><code id="L1162"><span class="ln">1162</span> _13<span class="s"> * </span>y2<span class="s"> + </span>_23<span class="s"> * </span>ay,
-</code><code id="L1163"><span class="ln">1163</span> x2,
-</code><code id="L1164"><span class="ln">1164</span> y2
-</code><code id="L1165"><span class="ln">1165</span> ];
-</code><code id="L1166"><span class="ln">1166</span> },
-</code><code id="L1167"><span class="ln">1167</span> a2c<span class="s"> = </span><b>function</b> (x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {
-</code><code id="L1168"><span class="ln">1168</span> <span class="c">// <b>for</b> more information of where <b>this</b> math came from visit:</span>
-</code><code id="L1169"><span class="ln">1169</span> <span class="c">// http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes</span>
-</code><code id="L1170"><span class="ln">1170</span> <b>var</b> _120<span class="s"> = </span>PI<span class="s"> * </span><span class="d">120</span><span class="s"> / </span><span class="d">180</span>,
-</code><code id="L1171"><span class="ln">1171</span> rad<span class="s"> = </span>PI<span class="s"> / </span><span class="d">180</span><span class="s"> * </span>(+angle<span class="s"> || </span><span class="d">0</span>),
-</code><code id="L1172"><span class="ln">1172</span> res<span class="s"> = </span>[],
-</code><code id="L1173"><span class="ln">1173</span> xy,
-</code><code id="L1174"><span class="ln">1174</span> rotate<span class="s"> = </span>cacher(<b>function</b> (x, y, rad) {
-</code><code id="L1175"><span class="ln">1175</span> <b>var</b> X<span class="s"> = </span>x<span class="s"> * </span>math.cos(rad)<span class="s"> - </span>y<span class="s"> * </span>math.sin(rad),
-</code><code id="L1176"><span class="ln">1176</span> Y<span class="s"> = </span>x<span class="s"> * </span>math.sin(rad)<span class="s"> + </span>y<span class="s"> * </span>math.cos(rad);
-</code><code id="L1177"><span class="ln">1177</span> <b>return</b> {x: X, y: Y};
-</code><code id="L1178"><span class="ln">1178</span> });
-</code><code id="L1179"><span class="ln">1179</span> <b>if</b> (!recursive) {
-</code><code id="L1180"><span class="ln">1180</span> xy<span class="s"> = </span>rotate(x1, y1, -rad);
-</code><code id="L1181"><span class="ln">1181</span> x1<span class="s"> = </span>xy.x;
-</code><code id="L1182"><span class="ln">1182</span> y1<span class="s"> = </span>xy.y;
-</code><code id="L1183"><span class="ln">1183</span> xy<span class="s"> = </span>rotate(x2, y2, -rad);
-</code><code id="L1184"><span class="ln">1184</span> x2<span class="s"> = </span>xy.x;
-</code><code id="L1185"><span class="ln">1185</span> y2<span class="s"> = </span>xy.y;
-</code><code id="L1186"><span class="ln">1186</span> <b>var</b> cos<span class="s"> = </span>math.cos(PI<span class="s"> / </span><span class="d">180</span><span class="s"> * </span>angle),
-</code><code id="L1187"><span class="ln">1187</span> sin<span class="s"> = </span>math.sin(PI<span class="s"> / </span><span class="d">180</span><span class="s"> * </span>angle),
-</code><code id="L1188"><span class="ln">1188</span> x<span class="s"> = </span>(x1<span class="s"> - </span>x2)<span class="s"> / </span><span class="d">2</span>,
-</code><code id="L1189"><span class="ln">1189</span> y<span class="s"> = </span>(y1<span class="s"> - </span>y2)<span class="s"> / </span><span class="d">2</span>;
-</code><code id="L1190"><span class="ln">1190</span> <b>var</b> h<span class="s"> = </span>(x<span class="s"> * </span>x)<span class="s"> / </span>(rx<span class="s"> * </span>rx)<span class="s"> + </span>(y<span class="s"> * </span>y)<span class="s"> / </span>(ry<span class="s"> * </span>ry);
-</code><code id="L1191"><span class="ln">1191</span> <b>if</b> (h > <span class="d">1</span>) {
-</code><code id="L1192"><span class="ln">1192</span> h<span class="s"> = </span>math.sqrt(h);
-</code><code id="L1193"><span class="ln">1193</span> rx<span class="s"> = </span>h<span class="s"> * </span>rx;
-</code><code id="L1194"><span class="ln">1194</span> ry<span class="s"> = </span>h<span class="s"> * </span>ry;
-</code><code id="L1195"><span class="ln">1195</span> }
-</code><code id="L1196"><span class="ln">1196</span> <b>var</b> rx2<span class="s"> = </span>rx<span class="s"> * </span>rx,
-</code><code id="L1197"><span class="ln">1197</span> ry2<span class="s"> = </span>ry<span class="s"> * </span>ry,
-</code><code id="L1198"><span class="ln">1198</span> k<span class="s"> = </span>(large_arc_flag<span class="s"> == </span>sweep_flag ? -<span class="d">1</span> : <span class="d">1</span>) *
-</code><code id="L1199"><span class="ln">1199</span> math.sqrt(abs((rx2<span class="s"> * </span>ry2<span class="s"> - </span>rx2<span class="s"> * </span>y<span class="s"> * </span>y<span class="s"> - </span>ry2<span class="s"> * </span>x<span class="s"> * </span>x)<span class="s"> / </span>(rx2<span class="s"> * </span>y<span class="s"> * </span>y<span class="s"> + </span>ry2<span class="s"> * </span>x<span class="s"> * </span>x))),
-</code><code id="L1200"><span class="ln">1200</span> cx<span class="s"> = </span>k<span class="s"> * </span>rx<span class="s"> * </span>y<span class="s"> / </span>ry<span class="s"> + </span>(x1<span class="s"> + </span>x2)<span class="s"> / </span><span class="d">2</span>,
-</code><code id="L1201"><span class="ln">1201</span> cy<span class="s"> = </span>k<span class="s"> * </span>-ry<span class="s"> * </span>x<span class="s"> / </span>rx<span class="s"> + </span>(y1<span class="s"> + </span>y2)<span class="s"> / </span><span class="d">2</span>,
-</code><code id="L1202"><span class="ln">1202</span> f1<span class="s"> = </span>math.asin(((y1<span class="s"> - </span>cy)<span class="s"> / </span>ry).toFixed(<span class="d">9</span>)),
-</code><code id="L1203"><span class="ln">1203</span> f2<span class="s"> = </span>math.asin(((y2<span class="s"> - </span>cy)<span class="s"> / </span>ry).toFixed(<span class="d">9</span>));
-</code><code id="L1204"><span class="ln">1204</span>
-</code><code id="L1205"><span class="ln">1205</span> f1<span class="s"> = </span>x1 < cx ? PI<span class="s"> - </span>f1 : f1;
-</code><code id="L1206"><span class="ln">1206</span> f2<span class="s"> = </span>x2 < cx ? PI<span class="s"> - </span>f2 : f2;
-</code><code id="L1207"><span class="ln">1207</span> f1 < <span class="d">0</span> && (f1<span class="s"> = </span>PI<span class="s"> * </span><span class="d">2</span><span class="s"> + </span>f1);
-</code><code id="L1208"><span class="ln">1208</span> f2 < <span class="d">0</span> && (f2<span class="s"> = </span>PI<span class="s"> * </span><span class="d">2</span><span class="s"> + </span>f2);
-</code><code id="L1209"><span class="ln">1209</span> <b>if</b> (sweep_flag && f1 > f2) {
-</code><code id="L1210"><span class="ln">1210</span> f1<span class="s"> = </span>f1<span class="s"> - </span>PI<span class="s"> * </span><span class="d">2</span>;
-</code><code id="L1211"><span class="ln">1211</span> }
-</code><code id="L1212"><span class="ln">1212</span> <b>if</b> (!sweep_flag && f2 > f1) {
-</code><code id="L1213"><span class="ln">1213</span> f2<span class="s"> = </span>f2<span class="s"> - </span>PI<span class="s"> * </span><span class="d">2</span>;
-</code><code id="L1214"><span class="ln">1214</span> }
-</code><code id="L1215"><span class="ln">1215</span> } <b>else</b> {
-</code><code id="L1216"><span class="ln">1216</span> f1<span class="s"> = </span>recursive[<span class="d">0</span>];
-</code><code id="L1217"><span class="ln">1217</span> f2<span class="s"> = </span>recursive[<span class="d">1</span>];
-</code><code id="L1218"><span class="ln">1218</span> cx<span class="s"> = </span>recursive[<span class="d">2</span>];
-</code><code id="L1219"><span class="ln">1219</span> cy<span class="s"> = </span>recursive[<span class="d">3</span>];
-</code><code id="L1220"><span class="ln">1220</span> }
-</code><code id="L1221"><span class="ln">1221</span> <b>var</b> df<span class="s"> = </span>f2<span class="s"> - </span>f1;
-</code><code id="L1222"><span class="ln">1222</span> <b>if</b> (abs(df) > _120) {
-</code><code id="L1223"><span class="ln">1223</span> <b>var</b> f2old<span class="s"> = </span>f2,
-</code><code id="L1224"><span class="ln">1224</span> x2old<span class="s"> = </span>x2,
-</code><code id="L1225"><span class="ln">1225</span> y2old<span class="s"> = </span>y2;
-</code><code id="L1226"><span class="ln">1226</span> f2<span class="s"> = </span>f1<span class="s"> + </span>_120<span class="s"> * </span>(sweep_flag && f2 > f1 ? <span class="d">1</span> : -<span class="d">1</span>);
-</code><code id="L1227"><span class="ln">1227</span> x2<span class="s"> = </span>cx<span class="s"> + </span>rx<span class="s"> * </span>math.cos(f2);
-</code><code id="L1228"><span class="ln">1228</span> y2<span class="s"> = </span>cy<span class="s"> + </span>ry<span class="s"> * </span>math.sin(f2);
-</code><code id="L1229"><span class="ln">1229</span> res<span class="s"> = </span>a2c(x2, y2, rx, ry, angle, <span class="d">0</span>, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]);
-</code><code id="L1230"><span class="ln">1230</span> }
-</code><code id="L1231"><span class="ln">1231</span> df<span class="s"> = </span>f2<span class="s"> - </span>f1;
-</code><code id="L1232"><span class="ln">1232</span> <b>var</b> c1<span class="s"> = </span>math.cos(f1),
-</code><code id="L1233"><span class="ln">1233</span> s1<span class="s"> = </span>math.sin(f1),
-</code><code id="L1234"><span class="ln">1234</span> c2<span class="s"> = </span>math.cos(f2),
-</code><code id="L1235"><span class="ln">1235</span> s2<span class="s"> = </span>math.sin(f2),
-</code><code id="L1236"><span class="ln">1236</span> t<span class="s"> = </span>math.tan(df<span class="s"> / </span><span class="d">4</span>),
-</code><code id="L1237"><span class="ln">1237</span> hx<span class="s"> = </span><span class="d">4</span><span class="s"> / </span><span class="d">3</span><span class="s"> * </span>rx<span class="s"> * </span>t,
-</code><code id="L1238"><span class="ln">1238</span> hy<span class="s"> = </span><span class="d">4</span><span class="s"> / </span><span class="d">3</span><span class="s"> * </span>ry<span class="s"> * </span>t,
-</code><code id="L1239"><span class="ln">1239</span> m1<span class="s"> = </span>[x1, y1],
-</code><code id="L1240"><span class="ln">1240</span> m2<span class="s"> = </span>[x1<span class="s"> + </span>hx<span class="s"> * </span>s1, y1<span class="s"> - </span>hy<span class="s"> * </span>c1],
-</code><code id="L1241"><span class="ln">1241</span> m3<span class="s"> = </span>[x2<span class="s"> + </span>hx<span class="s"> * </span>s2, y2<span class="s"> - </span>hy<span class="s"> * </span>c2],
-</code><code id="L1242"><span class="ln">1242</span> m4<span class="s"> = </span>[x2, y2];
-</code><code id="L1243"><span class="ln">1243</span> m2[<span class="d">0</span>]<span class="s"> = </span><span class="d">2</span><span class="s"> * </span>m1[<span class="d">0</span>]<span class="s"> - </span>m2[<span class="d">0</span>];
-</code><code id="L1244"><span class="ln">1244</span> m2[<span class="d">1</span>]<span class="s"> = </span><span class="d">2</span><span class="s"> * </span>m1[<span class="d">1</span>]<span class="s"> - </span>m2[<span class="d">1</span>];
-</code><code id="L1245"><span class="ln">1245</span> <b>if</b> (recursive) {
-</code><code id="L1246"><span class="ln">1246</span> <b>return</b> [m2, m3, m4][concat](res);
-</code><code id="L1247"><span class="ln">1247</span> } <b>else</b> {
-</code><code id="L1248"><span class="ln">1248</span> res<span class="s"> = </span>[m2, m3, m4][concat](res).join().split(<i>","</i>);
-</code><code id="L1249"><span class="ln">1249</span> <b>var</b> newres<span class="s"> = </span>[];
-</code><code id="L1250"><span class="ln">1250</span> <b>for</b> (<b>var</b> i<span class="s"> = </span><span class="d">0</span>, ii<span class="s"> = </span>res.length; i < ii; i++) {
-</code><code id="L1251"><span class="ln">1251</span> newres[i]<span class="s"> = </span>i % <span class="d">2</span> ? rotate(res[i<span class="s"> - </span><span class="d">1</span>], res[i], rad).y : rotate(res[i], res[i<span class="s"> + </span><span class="d">1</span>], rad).x;
-</code><code id="L1252"><span class="ln">1252</span> }
-</code><code id="L1253"><span class="ln">1253</span> <b>return</b> newres;
-</code><code id="L1254"><span class="ln">1254</span> }
-</code><code id="L1255"><span class="ln">1255</span> },
-</code><code id="L1256"><span class="ln">1256</span> findDotAtSegment<span class="s"> = </span><b>function</b> (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {
-</code><code id="L1257"><span class="ln">1257</span> <b>var</b> t1<span class="s"> = </span><span class="d">1</span><span class="s"> - </span>t;
-</code><code id="L1258"><span class="ln">1258</span> <b>return</b> {
-</code><code id="L1259"><span class="ln">1259</span> x: pow(t1, <span class="d">3</span>)<span class="s"> * </span>p1x<span class="s"> + </span>pow(t1, <span class="d">2</span>)<span class="s"> * </span><span class="d">3</span><span class="s"> * </span>t<span class="s"> * </span>c1x<span class="s"> + </span>t1<span class="s"> * </span><span class="d">3</span><span class="s"> * </span>t<span class="s"> * </span>t<span class="s"> * </span>c2x<span class="s"> + </span>pow(t, <span class="d">3</span>)<span class="s"> * </span>p2x,
-</code><code id="L1260"><span class="ln">1260</span> y: pow(t1, <span class="d">3</span>)<span class="s"> * </span>p1y<span class="s"> + </span>pow(t1, <span class="d">2</span>)<span class="s"> * </span><span class="d">3</span><span class="s"> * </span>t<span class="s"> * </span>c1y<span class="s"> + </span>t1<span class="s"> * </span><span class="d">3</span><span class="s"> * </span>t<span class="s"> * </span>t<span class="s"> * </span>c2y<span class="s"> + </span>pow(t, <span class="d">3</span>)<span class="s"> * </span>p2y
-</code><code id="L1261"><span class="ln">1261</span> };
-</code><code id="L1262"><span class="ln">1262</span> },
-</code><code id="L1263"><span class="ln">1263</span> curveDim<span class="s"> = </span>cacher(<b>function</b> (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {
-</code><code id="L1264"><span class="ln">1264</span> <b>var</b> a<span class="s"> = </span>(c2x<span class="s"> - </span><span class="d">2</span><span class="s"> * </span>c1x<span class="s"> + </span>p1x)<span class="s"> - </span>(p2x<span class="s"> - </span><span class="d">2</span><span class="s"> * </span>c2x<span class="s"> + </span>c1x),
-</code><code id="L1265"><span class="ln">1265</span> b<span class="s"> = </span><span class="d">2</span><span class="s"> * </span>(c1x<span class="s"> - </span>p1x)<span class="s"> - </span><span class="d">2</span><span class="s"> * </span>(c2x<span class="s"> - </span>c1x),
-</code><code id="L1266"><span class="ln">1266</span> c<span class="s"> = </span>p1x<span class="s"> - </span>c1x,
-</code><code id="L1267"><span class="ln">1267</span> t1<span class="s"> = </span>(-b<span class="s"> + </span>math.sqrt(b<span class="s"> * </span>b<span class="s"> - </span><span class="d">4</span><span class="s"> * </span>a<span class="s"> * </span>c))<span class="s"> / </span><span class="d">2</span><span class="s"> / </span>a,
-</code><code id="L1268"><span class="ln">1268</span> t2<span class="s"> = </span>(-b<span class="s"> - </span>math.sqrt(b<span class="s"> * </span>b<span class="s"> - </span><span class="d">4</span><span class="s"> * </span>a<span class="s"> * </span>c))<span class="s"> / </span><span class="d">2</span><span class="s"> / </span>a,
-</code><code id="L1269"><span class="ln">1269</span> y<span class="s"> = </span>[p1y, p2y],
-</code><code id="L1270"><span class="ln">1270</span> x<span class="s"> = </span>[p1x, p2x],
-</code><code id="L1271"><span class="ln">1271</span> dot;
-</code><code id="L1272"><span class="ln">1272</span> abs(t1) > <i>"<span class="d">1e12</span>"</i> && (t1<span class="s"> = </span><span class="d">.5</span>);
-</code><code id="L1273"><span class="ln">1273</span> abs(t2) > <i>"<span class="d">1e12</span>"</i> && (t2<span class="s"> = </span><span class="d">.5</span>);
-</code><code id="L1274"><span class="ln">1274</span> <b>if</b> (t1 > <span class="d">0</span> && t1 < <span class="d">1</span>) {
-</code><code id="L1275"><span class="ln">1275</span> dot<span class="s"> = </span>findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);
-</code><code id="L1276"><span class="ln">1276</span> x.push(dot.x);
-</code><code id="L1277"><span class="ln">1277</span> y.push(dot.y);
-</code><code id="L1278"><span class="ln">1278</span> }
-</code><code id="L1279"><span class="ln">1279</span> <b>if</b> (t2 > <span class="d">0</span> && t2 < <span class="d">1</span>) {
-</code><code id="L1280"><span class="ln">1280</span> dot<span class="s"> = </span>findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);
-</code><code id="L1281"><span class="ln">1281</span> x.push(dot.x);
-</code><code id="L1282"><span class="ln">1282</span> y.push(dot.y);
-</code><code id="L1283"><span class="ln">1283</span> }
-</code><code id="L1284"><span class="ln">1284</span> a<span class="s"> = </span>(c2y<span class="s"> - </span><span class="d">2</span><span class="s"> * </span>c1y<span class="s"> + </span>p1y)<span class="s"> - </span>(p2y<span class="s"> - </span><span class="d">2</span><span class="s"> * </span>c2y<span class="s"> + </span>c1y);
-</code><code id="L1285"><span class="ln">1285</span> b<span class="s"> = </span><span class="d">2</span><span class="s"> * </span>(c1y<span class="s"> - </span>p1y)<span class="s"> - </span><span class="d">2</span><span class="s"> * </span>(c2y<span class="s"> - </span>c1y);
-</code><code id="L1286"><span class="ln">1286</span> c<span class="s"> = </span>p1y<span class="s"> - </span>c1y;
-</code><code id="L1287"><span class="ln">1287</span> t1<span class="s"> = </span>(-b<span class="s"> + </span>math.sqrt(b<span class="s"> * </span>b<span class="s"> - </span><span class="d">4</span><span class="s"> * </span>a<span class="s"> * </span>c))<span class="s"> / </span><span class="d">2</span><span class="s"> / </span>a;
-</code><code id="L1288"><span class="ln">1288</span> t2<span class="s"> = </span>(-b<span class="s"> - </span>math.sqrt(b<span class="s"> * </span>b<span class="s"> - </span><span class="d">4</span><span class="s"> * </span>a<span class="s"> * </span>c))<span class="s"> / </span><span class="d">2</span><span class="s"> / </span>a;
-</code><code id="L1289"><span class="ln">1289</span> abs(t1) > <i>"<span class="d">1e12</span>"</i> && (t1<span class="s"> = </span><span class="d">.5</span>);
-</code><code id="L1290"><span class="ln">1290</span> abs(t2) > <i>"<span class="d">1e12</span>"</i> && (t2<span class="s"> = </span><span class="d">.5</span>);
-</code><code id="L1291"><span class="ln">1291</span> <b>if</b> (t1 > <span class="d">0</span> && t1 < <span class="d">1</span>) {
-</code><code id="L1292"><span class="ln">1292</span> dot<span class="s"> = </span>findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);
-</code><code id="L1293"><span class="ln">1293</span> x.push(dot.x);
-</code><code id="L1294"><span class="ln">1294</span> y.push(dot.y);
-</code><code id="L1295"><span class="ln">1295</span> }
-</code><code id="L1296"><span class="ln">1296</span> <b>if</b> (t2 > <span class="d">0</span> && t2 < <span class="d">1</span>) {
-</code><code id="L1297"><span class="ln">1297</span> dot<span class="s"> = </span>findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);
-</code><code id="L1298"><span class="ln">1298</span> x.push(dot.x);
-</code><code id="L1299"><span class="ln">1299</span> y.push(dot.y);
-</code><code id="L1300"><span class="ln">1300</span> }
-</code><code id="L1301"><span class="ln">1301</span> <b>return</b> {
-</code><code id="L1302"><span class="ln">1302</span> min: {x: mmin[apply](<span class="d">0</span>, x), y: mmin[apply](<span class="d">0</span>, y)},
-</code><code id="L1303"><span class="ln">1303</span> max: {x: mmax[apply](<span class="d">0</span>, x), y: mmax[apply](<span class="d">0</span>, y)}
-</code><code id="L1304"><span class="ln">1304</span> };
-</code><code id="L1305"><span class="ln">1305</span> }),
-</code><code id="L1306"><span class="ln">1306</span> path2curve<span class="s"> = </span>cacher(<b>function</b> (path, path2) {
-</code><code id="L1307"><span class="ln">1307</span> <b>var</b> p<span class="s"> = </span>pathToAbsolute(path),
-</code><code id="L1308"><span class="ln">1308</span> p2<span class="s"> = </span>path2 && pathToAbsolute(path2),
-</code><code id="L1309"><span class="ln">1309</span> attrs<span class="s"> = </span>{x: <span class="d">0</span>, y: <span class="d">0</span>, bx: <span class="d">0</span>, by: <span class="d">0</span>, X: <span class="d">0</span>, Y: <span class="d">0</span>, qx: <b>null</b>, qy: <b>null</b>},
-</code><code id="L1310"><span class="ln">1310</span> attrs2<span class="s"> = </span>{x: <span class="d">0</span>, y: <span class="d">0</span>, bx: <span class="d">0</span>, by: <span class="d">0</span>, X: <span class="d">0</span>, Y: <span class="d">0</span>, qx: <b>null</b>, qy: <b>null</b>},
-</code><code id="L1311"><span class="ln">1311</span> processPath<span class="s"> = </span><b>function</b> (path, d) {
-</code><code id="L1312"><span class="ln">1312</span> <b>var</b> nx, ny;
-</code><code id="L1313"><span class="ln">1313</span> <b>if</b> (!path) {
-</code><code id="L1314"><span class="ln">1314</span> <b>return</b> [<i>"C"</i>, d.x, d.y, d.x, d.y, d.x, d.y];
-</code><code id="L1315"><span class="ln">1315</span> }
-</code><code id="L1316"><span class="ln">1316</span> !(path[<span class="d">0</span>] <b>in</b> {T:<span class="d">1</span>, Q:<span class="d">1</span>}) && (d.qx<span class="s"> = </span>d.qy<span class="s"> = </span><b>null</b>);
-</code><code id="L1317"><span class="ln">1317</span> <b>switch</b> (path[<span class="d">0</span>]) {
-</code><code id="L1318"><span class="ln">1318</span> <b>case</b> <i>"M"</i>:
-</code><code id="L1319"><span class="ln">1319</span> d.X<span class="s"> = </span>path[<span class="d">1</span>];
-</code><code id="L1320"><span class="ln">1320</span> d.Y<span class="s"> = </span>path[<span class="d">2</span>];
-</code><code id="L1321"><span class="ln">1321</span> <b>break</b>;
-</code><code id="L1322"><span class="ln">1322</span> <b>case</b> <i>"A"</i>:
-</code><code id="L1323"><span class="ln">1323</span> path<span class="s"> = </span>[<i>"C"</i>][concat](a2c[apply](<span class="d">0</span>, [d.x, d.y][concat](path.slice(<span class="d">1</span>))));
-</code><code id="L1324"><span class="ln">1324</span> <b>break</b>;
-</code><code id="L1325"><span class="ln">1325</span> <b>case</b> <i>"S"</i>:
-</code><code id="L1326"><span class="ln">1326</span> nx<span class="s"> = </span>d.x<span class="s"> + </span>(d.x<span class="s"> - </span>(d.bx<span class="s"> || </span>d.x));
-</code><code id="L1327"><span class="ln">1327</span> ny<span class="s"> = </span>d.y<span class="s"> + </span>(d.y<span class="s"> - </span>(d.by<span class="s"> || </span>d.y));
-</code><code id="L1328"><span class="ln">1328</span> path<span class="s"> = </span>[<i>"C"</i>, nx, ny][concat](path.slice(<span class="d">1</span>));
-</code><code id="L1329"><span class="ln">1329</span> <b>break</b>;
-</code><code id="L1330"><span class="ln">1330</span> <b>case</b> <i>"T"</i>:
-</code><code id="L1331"><span class="ln">1331</span> d.qx<span class="s"> = </span>d.x<span class="s"> + </span>(d.x<span class="s"> - </span>(d.qx<span class="s"> || </span>d.x));
-</code><code id="L1332"><span class="ln">1332</span> d.qy<span class="s"> = </span>d.y<span class="s"> + </span>(d.y<span class="s"> - </span>(d.qy<span class="s"> || </span>d.y));
-</code><code id="L1333"><span class="ln">1333</span> path<span class="s"> = </span>[<i>"C"</i>][concat](q2c(d.x, d.y, d.qx, d.qy, path[<span class="d">1</span>], path[<span class="d">2</span>]));
-</code><code id="L1334"><span class="ln">1334</span> <b>break</b>;
-</code><code id="L1335"><span class="ln">1335</span> <b>case</b> <i>"Q"</i>:
-</code><code id="L1336"><span class="ln">1336</span> d.qx<span class="s"> = </span>path[<span class="d">1</span>];
-</code><code id="L1337"><span class="ln">1337</span> d.qy<span class="s"> = </span>path[<span class="d">2</span>];
-</code><code id="L1338"><span class="ln">1338</span> path<span class="s"> = </span>[<i>"C"</i>][concat](q2c(d.x, d.y, path[<span class="d">1</span>], path[<span class="d">2</span>], path[<span class="d">3</span>], path[<span class="d">4</span>]));
-</code><code id="L1339"><span class="ln">1339</span> <b>break</b>;
-</code><code id="L1340"><span class="ln">1340</span> <b>case</b> <i>"L"</i>:
-</code><code id="L1341"><span class="ln">1341</span> path<span class="s"> = </span>[<i>"C"</i>][concat](l2c(d.x, d.y, path[<span class="d">1</span>], path[<span class="d">2</span>]));
-</code><code id="L1342"><span class="ln">1342</span> <b>break</b>;
-</code><code id="L1343"><span class="ln">1343</span> <b>case</b> <i>"H"</i>:
-</code><code id="L1344"><span class="ln">1344</span> path<span class="s"> = </span>[<i>"C"</i>][concat](l2c(d.x, d.y, path[<span class="d">1</span>], d.y));
-</code><code id="L1345"><span class="ln">1345</span> <b>break</b>;
-</code><code id="L1346"><span class="ln">1346</span> <b>case</b> <i>"V"</i>:
-</code><code id="L1347"><span class="ln">1347</span> path<span class="s"> = </span>[<i>"C"</i>][concat](l2c(d.x, d.y, d.x, path[<span class="d">1</span>]));
-</code><code id="L1348"><span class="ln">1348</span> <b>break</b>;
-</code><code id="L1349"><span class="ln">1349</span> <b>case</b> <i>"Z"</i>:
-</code><code id="L1350"><span class="ln">1350</span> path<span class="s"> = </span>[<i>"C"</i>][concat](l2c(d.x, d.y, d.X, d.Y));
-</code><code id="L1351"><span class="ln">1351</span> <b>break</b>;
-</code><code id="L1352"><span class="ln">1352</span> }
-</code><code id="L1353"><span class="ln">1353</span> <b>return</b> path;
-</code><code id="L1354"><span class="ln">1354</span> },
-</code><code id="L1355"><span class="ln">1355</span> fixArc<span class="s"> = </span><b>function</b> (pp, i) {
-</code><code id="L1356"><span class="ln">1356</span> <b>if</b> (pp[i].length > <span class="d">7</span>) {
-</code><code id="L1357"><span class="ln">1357</span> pp[i].shift();
-</code><code id="L1358"><span class="ln">1358</span> <b>var</b> pi<span class="s"> = </span>pp[i];
-</code><code id="L1359"><span class="ln">1359</span> <b>while</b> (pi.length) {
-</code><code id="L1360"><span class="ln">1360</span> pp.splice(i++, <span class="d">0</span>, [<i>"C"</i>][concat](pi.splice(<span class="d">0</span>, <span class="d">6</span>)));
-</code><code id="L1361"><span class="ln">1361</span> }
-</code><code id="L1362"><span class="ln">1362</span> pp.splice(i, <span class="d">1</span>);
-</code><code id="L1363"><span class="ln">1363</span> ii<span class="s"> = </span>mmax(p.length, p2 && p2.length<span class="s"> || </span><span class="d">0</span>);
-</code><code id="L1364"><span class="ln">1364</span> }
-</code><code id="L1365"><span class="ln">1365</span> },
-</code><code id="L1366"><span class="ln">1366</span> fixM<span class="s"> = </span><b>function</b> (path1, path2, a1, a2, i) {
-</code><code id="L1367"><span class="ln">1367</span> <b>if</b> (path1 && path2 && path1[i][<span class="d">0</span>]<span class="s"> == </span><i>"M"</i> && path2[i][<span class="d">0</span>] != <i>"M"</i>) {
-</code><code id="L1368"><span class="ln">1368</span> path2.splice(i, <span class="d">0</span>, [<i>"M"</i>, a2.x, a2.y]);
-</code><code id="L1369"><span class="ln">1369</span> a1.bx<span class="s"> = </span><span class="d">0</span>;
-</code><code id="L1370"><span class="ln">1370</span> a1.by<span class="s"> = </span><span class="d">0</span>;
-</code><code id="L1371"><span class="ln">1371</span> a1.x<span class="s"> = </span>path1[i][<span class="d">1</span>];
-</code><code id="L1372"><span class="ln">1372</span> a1.y<span class="s"> = </span>path1[i][<span class="d">2</span>];
-</code><code id="L1373"><span class="ln">1373</span> ii<span class="s"> = </span>mmax(p.length, p2 && p2.length<span class="s"> || </span><span class="d">0</span>);
-</code><code id="L1374"><span class="ln">1374</span> }
-</code><code id="L1375"><span class="ln">1375</span> };
-</code><code id="L1376"><span class="ln">1376</span> <b>for</b> (<b>var</b> i<span class="s"> = </span><span class="d">0</span>, ii<span class="s"> = </span>mmax(p.length, p2 && p2.length<span class="s"> || </span><span class="d">0</span>); i < ii; i++) {
-</code><code id="L1377"><span class="ln">1377</span> p[i]<span class="s"> = </span>processPath(p[i], attrs);
-</code><code id="L1378"><span class="ln">1378</span> fixArc(p, i);
-</code><code id="L1379"><span class="ln">1379</span> p2 && (p2[i]<span class="s"> = </span>processPath(p2[i], attrs2));
-</code><code id="L1380"><span class="ln">1380</span> p2 && fixArc(p2, i);
-</code><code id="L1381"><span class="ln">1381</span> fixM(p, p2, attrs, attrs2, i);
-</code><code id="L1382"><span class="ln">1382</span> fixM(p2, p, attrs2, attrs, i);
-</code><code id="L1383"><span class="ln">1383</span> <b>var</b> seg<span class="s"> = </span>p[i],
-</code><code id="L1384"><span class="ln">1384</span> seg2<span class="s"> = </span>p2 && p2[i],
-</code><code id="L1385"><span class="ln">1385</span> seglen<span class="s"> = </span>seg.length,
-</code><code id="L1386"><span class="ln">1386</span> seg2len<span class="s"> = </span>p2 && seg2.length;
-</code><code id="L1387"><span class="ln">1387</span> attrs.x<span class="s"> = </span>seg[seglen<span class="s"> - </span><span class="d">2</span>];
-</code><code id="L1388"><span class="ln">1388</span> attrs.y<span class="s"> = </span>seg[seglen<span class="s"> - </span><span class="d">1</span>];
-</code><code id="L1389"><span class="ln">1389</span> attrs.bx<span class="s"> = </span>toFloat(seg[seglen<span class="s"> - </span><span class="d">4</span>])<span class="s"> || </span>attrs.x;
-</code><code id="L1390"><span class="ln">1390</span> attrs.by<span class="s"> = </span>toFloat(seg[seglen<span class="s"> - </span><span class="d">3</span>])<span class="s"> || </span>attrs.y;
-</code><code id="L1391"><span class="ln">1391</span> attrs2.bx<span class="s"> = </span>p2 && (toFloat(seg2[seg2len<span class="s"> - </span><span class="d">4</span>])<span class="s"> || </span>attrs2.x);
-</code><code id="L1392"><span class="ln">1392</span> attrs2.by<span class="s"> = </span>p2 && (toFloat(seg2[seg2len<span class="s"> - </span><span class="d">3</span>])<span class="s"> || </span>attrs2.y);
-</code><code id="L1393"><span class="ln">1393</span> attrs2.x<span class="s"> = </span>p2 && seg2[seg2len<span class="s"> - </span><span class="d">2</span>];
-</code><code id="L1394"><span class="ln">1394</span> attrs2.y<span class="s"> = </span>p2 && seg2[seg2len<span class="s"> - </span><span class="d">1</span>];
-</code><code id="L1395"><span class="ln">1395</span> }
-</code><code id="L1396"><span class="ln">1396</span> <b>return</b> p2 ? [p, p2] : p;
-</code><code id="L1397"><span class="ln">1397</span> }, <b>null</b>, pathClone),
-</code><code id="L1398"><span class="ln">1398</span> parseDots<span class="s"> = </span>cacher(<b>function</b> (gradient) {
-</code><code id="L1399"><span class="ln">1399</span> <b>var</b> dots<span class="s"> = </span>[];
-</code><code id="L1400"><span class="ln">1400</span> <b>for</b> (<b>var</b> i<span class="s"> = </span><span class="d">0</span>, ii<span class="s"> = </span>gradient.length; i < ii; i++) {
-</code><code id="L1401"><span class="ln">1401</span> <b>var</b> dot<span class="s"> = </span>{},
-</code><code id="L1402"><span class="ln">1402</span> par<span class="s"> = </span>gradient[i].match(/^([^:]*):?([\d\.]*)/);
-</code><code id="L1403"><span class="ln">1403</span> dot.color<span class="s"> = </span>R.getRGB(par[<span class="d">1</span>]);
-</code><code id="L1404"><span class="ln">1404</span> <b>if</b> (dot.color.error) {
-</code><code id="L1405"><span class="ln">1405</span> <b>return</b> <b>null</b>;
-</code><code id="L1406"><span class="ln">1406</span> }
-</code><code id="L1407"><span class="ln">1407</span> dot.color<span class="s"> = </span>dot.color.hex;
-</code><code id="L1408"><span class="ln">1408</span> par[<span class="d">2</span>] && (dot.offset<span class="s"> = </span>par[<span class="d">2</span>]<span class="s"> + </span><i>"%"</i>);
-</code><code id="L1409"><span class="ln">1409</span> dots.push(dot);
-</code><code id="L1410"><span class="ln">1410</span> }
-</code><code id="L1411"><span class="ln">1411</span> <b>for</b> (i<span class="s"> = </span><span class="d">1</span>, ii<span class="s"> = </span>dots.length<span class="s"> - </span><span class="d">1</span>; i < ii; i++) {
-</code><code id="L1412"><span class="ln">1412</span> <b>if</b> (!dots[i].offset) {
-</code><code id="L1413"><span class="ln">1413</span> <b>var</b> start<span class="s"> = </span>toFloat(dots[i<span class="s"> - </span><span class="d">1</span>].offset<span class="s"> || </span><span class="d">0</span>),
-</code><code id="L1414"><span class="ln">1414</span> end<span class="s"> = </span><span class="d">0</span>;
-</code><code id="L1415"><span class="ln">1415</span> <b>for</b> (<b>var</b> j<span class="s"> = </span>i<span class="s"> + </span><span class="d">1</span>; j < ii; j++) {
-</code><code id="L1416"><span class="ln">1416</span> <b>if</b> (dots[j].offset) {
-</code><code id="L1417"><span class="ln">1417</span> end<span class="s"> = </span>dots[j].offset;
-</code><code id="L1418"><span class="ln">1418</span> <b>break</b>;
-</code><code id="L1419"><span class="ln">1419</span> }
-</code><code id="L1420"><span class="ln">1420</span> }
-</code><code id="L1421"><span class="ln">1421</span> <b>if</b> (!end) {
-</code><code id="L1422"><span class="ln">1422</span> end<span class="s"> = </span><span class="d">100</span>;
-</code><code id="L1423"><span class="ln">1423</span> j<span class="s"> = </span>ii;
-</code><code id="L1424"><span class="ln">1424</span> }
-</code><code id="L1425"><span class="ln">1425</span> end<span class="s"> = </span>toFloat(end);
-</code><code id="L1426"><span class="ln">1426</span> <b>var</b> d<span class="s"> = </span>(end<span class="s"> - </span>start)<span class="s"> / </span>(j<span class="s"> - </span>i<span class="s"> + </span><span class="d">1</span>);
-</code><code id="L1427"><span class="ln">1427</span> <b>for</b> (; i < j; i++) {
-</code><code id="L1428"><span class="ln">1428</span> start += d;
-</code><code id="L1429"><span class="ln">1429</span> dots[i].offset<span class="s"> = </span>start<span class="s"> + </span><i>"%"</i>;
-</code><code id="L1430"><span class="ln">1430</span> }
-</code><code id="L1431"><span class="ln">1431</span> }
-</code><code id="L1432"><span class="ln">1432</span> }
-</code><code id="L1433"><span class="ln">1433</span> <b>return</b> dots;
-</code><code id="L1434"><span class="ln">1434</span> }),
-</code><code id="L1435"><span class="ln">1435</span> getContainer<span class="s"> = </span><b>function</b> (x, y, w, h) {
-</code><code id="L1436"><span class="ln">1436</span> <b>var</b> container;
-</code><code id="L1437"><span class="ln">1437</span> <b>if</b> (R.is(x, string)<span class="s"> || </span>R.is(x, <i>"object"</i>)) {
-</code><code id="L1438"><span class="ln">1438</span> container<span class="s"> = </span>h<span class="s"> == </span><b>null</b> ? g.doc.getElementById(x) : x;
-</code><code id="L1439"><span class="ln">1439</span> <b>if</b> (container<span class="s"> == </span><b>null</b>) {
-</code><code id="L1440"><span class="ln">1440</span> <b>return</b>;
-</code><code id="L1441"><span class="ln">1441</span> }
-</code><code id="L1442"><span class="ln">1442</span> <b>if</b> (container.tagName) {
-</code><code id="L1443"><span class="ln">1443</span> <b>if</b> (y<span class="s"> == </span><b>null</b>) {
-</code><code id="L1444"><span class="ln">1444</span> <b>return</b> {
-</code><code id="L1445"><span class="ln">1445</span> container: container,
-</code><code id="L1446"><span class="ln">1446</span> width: container.style.pixelWidth<span class="s"> || </span>container.offsetWidth,
-</code><code id="L1447"><span class="ln">1447</span> height: container.style.pixelHeight<span class="s"> || </span>container.offsetHeight
-</code><code id="L1448"><span class="ln">1448</span> };
-</code><code id="L1449"><span class="ln">1449</span> } <b>else</b> {
-</code><code id="L1450"><span class="ln">1450</span> <b>return</b> {container: container, width: y, height: w};
-</code><code id="L1451"><span class="ln">1451</span> }
-</code><code id="L1452"><span class="ln">1452</span> }
-</code><code id="L1453"><span class="ln">1453</span> }
-</code><code id="L1454"><span class="ln">1454</span> <b>return</b> {container: <span class="d">1</span>, x: x, y: y, width: w, height: h};
-</code><code id="L1455"><span class="ln">1455</span> },
-</code><code id="L1456"><span class="ln">1456</span> plugins<span class="s"> = </span><b>function</b> (con, add) {
-</code><code id="L1457"><span class="ln">1457</span> <b>var</b> that<span class="s"> = </span><b>this</b>;
-</code><code id="L1458"><span class="ln">1458</span> <b>for</b> (<b>var</b> prop <b>in</b> add) {
-</code><code id="L1459"><span class="ln">1459</span> <b>if</b> (add[has](prop) && !(prop <b>in</b> con)) {
-</code><code id="L1460"><span class="ln">1460</span> <b>switch</b> (<b>typeof</b> add[prop]) {
-</code><code id="L1461"><span class="ln">1461</span> <b>case</b> <i>"<b>function</b>"</i>:
-</code><code id="L1462"><span class="ln">1462</span> (<b>function</b> (f) {
-</code><code id="L1463"><span class="ln">1463</span> con[prop]<span class="s"> = </span>con<span class="s"> === </span>that ? f : <b>function</b> () { <b>return</b> f[apply](that, arguments); };
-</code><code id="L1464"><span class="ln">1464</span> })(add[prop]);
-</code><code id="L1465"><span class="ln">1465</span> <b>break</b>;
-</code><code id="L1466"><span class="ln">1466</span> <b>case</b> <i>"object"</i>:
-</code><code id="L1467"><span class="ln">1467</span> con[prop]<span class="s"> = </span>con[prop]<span class="s"> || </span>{};
-</code><code id="L1468"><span class="ln">1468</span> plugins.call(<b>this</b>, con[prop], add[prop]);
-</code><code id="L1469"><span class="ln">1469</span> <b>break</b>;
-</code><code id="L1470"><span class="ln">1470</span> <b>default</b>:
-</code><code id="L1471"><span class="ln">1471</span> con[prop]<span class="s"> = </span>add[prop];
-</code><code id="L1472"><span class="ln">1472</span> <b>break</b>;
-</code><code id="L1473"><span class="ln">1473</span> }
-</code><code id="L1474"><span class="ln">1474</span> }
-</code><code id="L1475"><span class="ln">1475</span> }
-</code><code id="L1476"><span class="ln">1476</span> },
-</code><code id="L1477"><span class="ln">1477</span> tear<span class="s"> = </span><b>function</b> (el, paper) {
-</code><code id="L1478"><span class="ln">1478</span> el<span class="s"> == </span>paper.top && (paper.top<span class="s"> = </span>el.prev);
-</code><code id="L1479"><span class="ln">1479</span> el<span class="s"> == </span>paper.bottom && (paper.bottom<span class="s"> = </span>el.next);
-</code><code id="L1480"><span class="ln">1480</span> el.next && (el.next.prev<span class="s"> = </span>el.prev);
-</code><code id="L1481"><span class="ln">1481</span> el.prev && (el.prev.next<span class="s"> = </span>el.next);
-</code><code id="L1482"><span class="ln">1482</span> },
-</code><code id="L1483"><span class="ln">1483</span> tofront<span class="s"> = </span><b>function</b> (el, paper) {
-</code><code id="L1484"><span class="ln">1484</span> <b>if</b> (paper.top<span class="s"> === </span>el) {
-</code><code id="L1485"><span class="ln">1485</span> <b>return</b>;
-</code><code id="L1486"><span class="ln">1486</span> }
-</code><code id="L1487"><span class="ln">1487</span> tear(el, paper);
-</code><code id="L1488"><span class="ln">1488</span> el.next<span class="s"> = </span><b>null</b>;
-</code><code id="L1489"><span class="ln">1489</span> el.prev<span class="s"> = </span>paper.top;
-</code><code id="L1490"><span class="ln">1490</span> paper.top.next<span class="s"> = </span>el;
-</code><code id="L1491"><span class="ln">1491</span> paper.top<span class="s"> = </span>el;
-</code><code id="L1492"><span class="ln">1492</span> },
-</code><code id="L1493"><span class="ln">1493</span> toback<span class="s"> = </span><b>function</b> (el, paper) {
-</code><code id="L1494"><span class="ln">1494</span> <b>if</b> (paper.bottom<span class="s"> === </span>el) {
-</code><code id="L1495"><span class="ln">1495</span> <b>return</b>;
-</code><code id="L1496"><span class="ln">1496</span> }
-</code><code id="L1497"><span class="ln">1497</span> tear(el, paper);
-</code><code id="L1498"><span class="ln">1498</span> el.next<span class="s"> = </span>paper.bottom;
-</code><code id="L1499"><span class="ln">1499</span> el.prev<span class="s"> = </span><b>null</b>;
-</code><code id="L1500"><span class="ln">1500</span> paper.bottom.prev<span class="s"> = </span>el;
-</code><code id="L1501"><span class="ln">1501</span> paper.bottom<span class="s"> = </span>el;
-</code><code id="L1502"><span class="ln">1502</span> },
-</code><code id="L1503"><span class="ln">1503</span> insertafter<span class="s"> = </span><b>function</b> (el, el2, paper) {
-</code><code id="L1504"><span class="ln">1504</span> tear(el, paper);
-</code><code id="L1505"><span class="ln">1505</span> el2<span class="s"> == </span>paper.top && (paper.top<span class="s"> = </span>el);
-</code><code id="L1506"><span class="ln">1506</span> el2.next && (el2.next.prev<span class="s"> = </span>el);
-</code><code id="L1507"><span class="ln">1507</span> el.next<span class="s"> = </span>el2.next;
-</code><code id="L1508"><span class="ln">1508</span> el.prev<span class="s"> = </span>el2;
-</code><code id="L1509"><span class="ln">1509</span> el2.next<span class="s"> = </span>el;
-</code><code id="L1510"><span class="ln">1510</span> },
-</code><code id="L1511"><span class="ln">1511</span> insertbefore<span class="s"> = </span><b>function</b> (el, el2, paper) {
-</code><code id="L1512"><span class="ln">1512</span> tear(el, paper);
-</code><code id="L1513"><span class="ln">1513</span> el2<span class="s"> == </span>paper.bottom && (paper.bottom<span class="s"> = </span>el);
-</code><code id="L1514"><span class="ln">1514</span> el2.prev && (el2.prev.next<span class="s"> = </span>el);
-</code><code id="L1515"><span class="ln">1515</span> el.prev<span class="s"> = </span>el2.prev;
-</code><code id="L1516"><span class="ln">1516</span> el2.prev<span class="s"> = </span>el;
-</code><code id="L1517"><span class="ln">1517</span> el.next<span class="s"> = </span>el2;
-</code><code id="L1518"><span class="ln">1518</span> },
-</code><code id="L1519"><span class="ln">1519</span> removed<span class="s"> = </span><b>function</b> (methodname) {
-</code><code id="L1520"><span class="ln">1520</span> <b>return</b> <b>function</b> () {
-</code><code id="L1521"><span class="ln">1521</span> <b>throw</b> <b>new</b> Error(<i>"Rapha\xebl: you are calling to method \u201c"</i><span class="s"> + </span>methodname<span class="s"> + </span><i>"\u201d of removed object"</i>);
-</code><code id="L1522"><span class="ln">1522</span> };
-</code><code id="L1523"><span class="ln">1523</span> },
-</code><code id="L1524"><span class="ln">1524</span> extractTransform<span class="s"> = </span><b>function</b> (el, tstr) {
-</code><code id="L1525"><span class="ln">1525</span> <b>if</b> (tstr<span class="s"> == </span><b>null</b>) {
-</code><code id="L1526"><span class="ln">1526</span> <b>return</b> el._.transform;
-</code><code id="L1527"><span class="ln">1527</span> }
-</code><code id="L1528"><span class="ln">1528</span> tstr<span class="s"> = </span>Str(tstr).replace(/\.{<span class="d">3</span>}|\u2026/g, el._.transform<span class="s"> || </span>E);
-</code><code id="L1529"><span class="ln">1529</span> <b>var</b> tdata<span class="s"> = </span>R.parseTransformString(tstr),
-</code><code id="L1530"><span class="ln">1530</span> deg<span class="s"> = </span><span class="d">0</span>,
-</code><code id="L1531"><span class="ln">1531</span> dx<span class="s"> = </span><span class="d">0</span>,
-</code><code id="L1532"><span class="ln">1532</span> dy<span class="s"> = </span><span class="d">0</span>,
-</code><code id="L1533"><span class="ln">1533</span> sx<span class="s"> = </span><span class="d">1</span>,
-</code><code id="L1534"><span class="ln">1534</span> sy<span class="s"> = </span><span class="d">1</span>,
-</code><code id="L1535"><span class="ln">1535</span> _<span class="s"> = </span>el._,
-</code><code id="L1536"><span class="ln">1536</span> m<span class="s"> = </span><b>new</b> Matrix;
-</code><code id="L1537"><span class="ln">1537</span> _.transform<span class="s"> = </span>tdata<span class="s"> || </span>[];
-</code><code id="L1538"><span class="ln">1538</span> <b>if</b> (tdata) {
-</code><code id="L1539"><span class="ln">1539</span> <b>for</b> (<b>var</b> i<span class="s"> = </span><span class="d">0</span>, ii<span class="s"> = </span>tdata.length; i < ii; i++) {
-</code><code id="L1540"><span class="ln">1540</span> <b>var</b> t<span class="s"> = </span>tdata[i],
-</code><code id="L1541"><span class="ln">1541</span> tlen<span class="s"> = </span>t.length,
-</code><code id="L1542"><span class="ln">1542</span> bb;
-</code><code id="L1543"><span class="ln">1543</span> t[<span class="d">0</span>]<span class="s"> = </span>Str(t[<span class="d">0</span>]).toLowerCase();
-</code><code id="L1544"><span class="ln">1544</span> <b>if</b> (t[<span class="d">0</span>]<span class="s"> == </span><i>"t"</i> && tlen<span class="s"> == </span><span class="d">3</span>) {
-</code><code id="L1545"><span class="ln">1545</span> m.translate(t[<span class="d">1</span>], t[<span class="d">2</span>]);
-</code><code id="L1546"><span class="ln">1546</span> } <b>else</b> <b>if</b> (t[<span class="d">0</span>]<span class="s"> == </span><i>"r"</i>) {
-</code><code id="L1547"><span class="ln">1547</span> <b>if</b> (tlen<span class="s"> == </span><span class="d">2</span>) {
-</code><code id="L1548"><span class="ln">1548</span> bb<span class="s"> = </span>bb<span class="s"> || </span>el.getBBox(<span class="d">1</span>);
-</code><code id="L1549"><span class="ln">1549</span> m.rotate(t[<span class="d">1</span>], bb.x<span class="s"> + </span>bb.width<span class="s"> / </span><span class="d">2</span>, bb.y<span class="s"> + </span>bb.height<span class="s"> / </span><span class="d">2</span>);
-</code><code id="L1550"><span class="ln">1550</span> deg += t[<span class="d">1</span>];
-</code><code id="L1551"><span class="ln">1551</span> } <b>else</b> <b>if</b> (tlen<span class="s"> == </span><span class="d">4</span>) {
-</code><code id="L1552"><span class="ln">1552</span> m.rotate(t[<span class="d">1</span>], t[<span class="d">2</span>], t[<span class="d">3</span>]);
-</code><code id="L1553"><span class="ln">1553</span> deg += t[<span class="d">1</span>];
-</code><code id="L1554"><span class="ln">1554</span> }
-</code><code id="L1555"><span class="ln">1555</span> } <b>else</b> <b>if</b> (t[<span class="d">0</span>]<span class="s"> == </span><i>"s"</i>) {
-</code><code id="L1556"><span class="ln">1556</span> <b>if</b> (tlen<span class="s"> == </span><span class="d">2</span><span class="s"> || </span>tlen<span class="s"> == </span><span class="d">3</span>) {
-</code><code id="L1557"><span class="ln">1557</span> bb<span class="s"> = </span>bb<span class="s"> || </span>el.getBBox(<span class="d">1</span>);
-</code><code id="L1558"><span class="ln">1558</span> m.scale(t[<span class="d">1</span>], t[tlen<span class="s"> - </span><span class="d">1</span>], bb.x<span class="s"> + </span>bb.width<span class="s"> / </span><span class="d">2</span>, bb.y<span class="s"> + </span>bb.height<span class="s"> / </span><span class="d">2</span>);
-</code><code id="L1559"><span class="ln">1559</span> sx *= t[<span class="d">1</span>];
-</code><code id="L1560"><span class="ln">1560</span> sy *= t[tlen<span class="s"> - </span><span class="d">1</span>];
-</code><code id="L1561"><span class="ln">1561</span> } <b>else</b> <b>if</b> (tlen<span class="s"> == </span><span class="d">5</span>) {
-</code><code id="L1562"><span class="ln">1562</span> m.scale(t[<span class="d">1</span>], t[<span class="d">2</span>], t[<span class="d">3</span>], t[<span class="d">4</span>]);
-</code><code id="L1563"><span class="ln">1563</span> sx *= t[<span class="d">1</span>];
-</code><code id="L1564"><span class="ln">1564</span> sy *= t[<span class="d">2</span>];
-</code><code id="L1565"><span class="ln">1565</span> }
-</code><code id="L1566"><span class="ln">1566</span> } <b>else</b> <b>if</b> (t[<span class="d">0</span>]<span class="s"> == </span><i>"m"</i> && tlen<span class="s"> == </span><span class="d">7</span>) {
-</code><code id="L1567"><span class="ln">1567</span> m.add(t[<span class="d">1</span>], t[<span class="d">2</span>], t[<span class="d">3</span>], t[<span class="d">4</span>], t[<span class="d">5</span>], t[<span class="d">6</span>]);
-</code><code id="L1568"><span class="ln">1568</span> }
-</code><code id="L1569"><span class="ln">1569</span> _.dirtyT<span class="s"> = </span><span class="d">1</span>;
-</code><code id="L1570"><span class="ln">1570</span> el.matrix<span class="s"> = </span>m;
-</code><code id="L1571"><span class="ln">1571</span> }
-</code><code id="L1572"><span class="ln">1572</span> }
-</code><code id="L1573"><span class="ln">1573</span>
-</code><code id="L1574"><span class="ln">1574</span> el.matrix<span class="s"> = </span>m;
-</code><code id="L1575"><span class="ln">1575</span>
-</code><code id="L1576"><span class="ln">1576</span> _.sx<span class="s"> = </span>sx;
-</code><code id="L1577"><span class="ln">1577</span> _.sy<span class="s"> = </span>sy;
-</code><code id="L1578"><span class="ln">1578</span> _.deg<span class="s"> = </span>deg;
-</code><code id="L1579"><span class="ln">1579</span> _.dx<span class="s"> = </span>dx<span class="s"> = </span>m.m[<span class="d">0</span>][<span class="d">2</span>];
-</code><code id="L1580"><span class="ln">1580</span> _.dy<span class="s"> = </span>dy<span class="s"> = </span>m.m[<span class="d">1</span>][<span class="d">2</span>];
-</code><code id="L1581"><span class="ln">1581</span>
-</code><code id="L1582"><span class="ln">1582</span> <b>if</b> (sx<span class="s"> == </span><span class="d">1</span> && sy<span class="s"> == </span><span class="d">1</span> && !deg && _.bbox) {
-</code><code id="L1583"><span class="ln">1583</span> _.bbox.x += +dx;
-</code><code id="L1584"><span class="ln">1584</span> _.bbox.y += +dy;
-</code><code id="L1585"><span class="ln">1585</span> } <b>else</b> {
-</code><code id="L1586"><span class="ln">1586</span> _.dirtyT<span class="s"> = </span><span class="d">1</span>;
-</code><code id="L1587"><span class="ln">1587</span> }
-</code><code id="L1588"><span class="ln">1588</span> },
-</code><code id="L1589"><span class="ln">1589</span> getEmpty<span class="s"> = </span><b>function</b> (item) {
-</code><code id="L1590"><span class="ln">1590</span> <b>switch</b> (item[<span class="d">0</span>]) {
-</code><code id="L1591"><span class="ln">1591</span> <b>case</b> <i>"t"</i>: <b>return</b> [<i>"t"</i>, <span class="d">0</span>, <span class="d">0</span>];
-</code><code id="L1592"><span class="ln">1592</span> <b>case</b> <i>"m"</i>: <b>return</b> [<i>"m"</i>, <span class="d">1</span>, <span class="d">0</span>, <span class="d">0</span>, <span class="d">1</span>, <span class="d">0</span>, <span class="d">0</span>];
-</code><code id="L1593"><span class="ln">1593</span> <b>case</b> <i>"r"</i>: <b>if</b> (item.length<span class="s"> == </span><span class="d">4</span>) {
-</code><code id="L1594"><span class="ln">1594</span> <b>return</b> [<i>"r"</i>, <span class="d">0</span>, item[<span class="d">2</span>], item[<span class="d">3</span>]];
-</code><code id="L1595"><span class="ln">1595</span> } <b>else</b> {
-</code><code id="L1596"><span class="ln">1596</span> <b>return</b> [<i>"r"</i>, <span class="d">0</span>];
-</code><code id="L1597"><span class="ln">1597</span> }
-</code><code id="L1598"><span class="ln">1598</span> <b>case</b> <i>"s"</i>: <b>if</b> (item.length<span class="s"> == </span><span class="d">5</span>) {
-</code><code id="L1599"><span class="ln">1599</span> <b>return</b> [<i>"s"</i>, <span class="d">1</span>, <span class="d">1</span>, item[<span class="d">3</span>], item[<span class="d">4</span>]];
-</code><code id="L1600"><span class="ln">1600</span> } <b>else</b> <b>if</b> (item.length<span class="s"> == </span><span class="d">3</span>) {
-</code><code id="L1601"><span class="ln">1601</span> <b>return</b> [<i>"s"</i>, <span class="d">1</span>, <span class="d">1</span>];
-</code><code id="L1602"><span class="ln">1602</span> } <b>else</b> {
-</code><code id="L1603"><span class="ln">1603</span> <b>return</b> [<i>"s"</i>, <span class="d">1</span>];
-</code><code id="L1604"><span class="ln">1604</span> }
-</code><code id="L1605"><span class="ln">1605</span> }
-</code><code id="L1606"><span class="ln">1606</span> },
-</code><code id="L1607"><span class="ln">1607</span> equaliseTransform<span class="s"> = </span><b>function</b> (t1, t2) {
-</code><code id="L1608"><span class="ln">1608</span> t1<span class="s"> = </span>R.parseTransformString(t1)<span class="s"> || </span>[];
-</code><code id="L1609"><span class="ln">1609</span> t2<span class="s"> = </span>R.parseTransformString(t2)<span class="s"> || </span>[];
-</code><code id="L1610"><span class="ln">1610</span> <b>var</b> maxlength<span class="s"> = </span>mmax(t1.length, t2.length),
-</code><code id="L1611"><span class="ln">1611</span> from<span class="s"> = </span>[],
-</code><code id="L1612"><span class="ln">1612</span> to<span class="s"> = </span>[],
-</code><code id="L1613"><span class="ln">1613</span> i<span class="s"> = </span><span class="d">0</span>, j, jj,
-</code><code id="L1614"><span class="ln">1614</span> tt1, tt2;
-</code><code id="L1615"><span class="ln">1615</span> <b>for</b> (; i < maxlength; i++) {
-</code><code id="L1616"><span class="ln">1616</span> tt1<span class="s"> = </span>t1[i]<span class="s"> || </span>getEmpty(t2[i]);
-</code><code id="L1617"><span class="ln">1617</span> tt2<span class="s"> = </span>t2[i]<span class="s"> || </span>getEmpty(tt1);
-</code><code id="L1618"><span class="ln">1618</span> <b>if</b> ( (tt1[<span class="d">0</span>] != tt2[<span class="d">0</span>]) ||
-</code><code id="L1619"><span class="ln">1619</span> (tt1[<span class="d">0</span>]<span class="s"> == </span><i>"r"</i> && (tt1[<span class="d">2</span>] != tt2[<span class="d">2</span>]<span class="s"> || </span>tt1[<span class="d">3</span>] != tt2[<span class="d">3</span>])) ||
-</code><code id="L1620"><span class="ln">1620</span> (tt1[<span class="d">0</span>]<span class="s"> == </span><i>"s"</i> && (tt1[<span class="d">3</span>] != tt2[<span class="d">3</span>]<span class="s"> || </span>tt1[<span class="d">4</span>] != tt2[<span class="d">4</span>]))
-</code><code id="L1621"><span class="ln">1621</span> ) {
-</code><code id="L1622"><span class="ln">1622</span> <b>return</b>;
-</code><code id="L1623"><span class="ln">1623</span> }
-</code><code id="L1624"><span class="ln">1624</span> from[i]<span class="s"> = </span>[];
-</code><code id="L1625"><span class="ln">1625</span> to[i]<span class="s"> = </span>[];
-</code><code id="L1626"><span class="ln">1626</span> <b>for</b> (j<span class="s"> = </span><span class="d">0</span>, jj<span class="s"> = </span>mmax(tt1.length, tt2.length); j < jj; j++) {
-</code><code id="L1627"><span class="ln">1627</span> j <b>in</b> tt1 && (from[i][j]<span class="s"> = </span>tt1[j]);
-</code><code id="L1628"><span class="ln">1628</span> j <b>in</b> tt2 && (to[i][j]<span class="s"> = </span>tt2[j]);
-</code><code id="L1629"><span class="ln">1629</span> }
-</code><code id="L1630"><span class="ln">1630</span> }
-</code><code id="L1631"><span class="ln">1631</span> <b>return</b> {
-</code><code id="L1632"><span class="ln">1632</span> from: from,
-</code><code id="L1633"><span class="ln">1633</span> to: to
-</code><code id="L1634"><span class="ln">1634</span> };
-</code><code id="L1635"><span class="ln">1635</span> };
-</code><code id="L1636"><span class="ln">1636</span><span class="c"> <span class="c">/*\</span>
-</span></code><code id="L1637"><span class="ln">1637</span><span class="c"> <span class="s"> * </span>Raphael.pathToRelative
-</span></code><code id="L1638"><span class="ln">1638</span><span class="c"> [ method ]
-</span></code><code id="L1639"><span class="ln">1639</span><span class="c"> **
-</span></code><code id="L1640"><span class="ln">1640</span><span class="c"> <span class="s"> * </span>Utility method
-</span></code><code id="L1641"><span class="ln">1641</span><span class="c"> **
-</span></code><code id="L1642"><span class="ln">1642</span><span class="c"> <span class="s"> * </span>Converts path to relative form
-</span></code><code id="L1643"><span class="ln">1643</span><span class="c"> > Parameters
-</span></code><code id="L1644"><span class="ln">1644</span><span class="c"> <span class="s"> - </span>pathString (string|array) path string or array of segments
-</span></code><code id="L1645"><span class="ln">1645</span><span class="c"> <span class="s"> = </span>(array) array of segments.
-</span></code><code id="L1646"><span class="ln">1646</span><span class="c"> \*/</span>
-</code><code id="L1647"><span class="ln">1647</span> R.pathToRelative<span class="s"> = </span>pathToRelative;
-</code><code id="L1648"><span class="ln">1648</span><span class="c"> <span class="c">/*\</span>
-</span></code><code id="L1649"><span class="ln">1649</span><span class="c"> <span class="s"> * </span>Raphael.path2curve
-</span></code><code id="L1650"><span class="ln">1650</span><span class="c"> [ method ]
-</span></code><code id="L1651"><span class="ln">1651</span><span class="c"> **
-</span></code><code id="L1652"><span class="ln">1652</span><span class="c"> <span class="s"> * </span>Utility method
-</span></code><code id="L1653"><span class="ln">1653</span><span class="c"> **
-</span></code><code id="L1654"><span class="ln">1654</span><span class="c"> <span class="s"> * </span>Converts path to path where all segments are cubic bezier curves.
-</span></code><code id="L1655"><span class="ln">1655</span><span class="c"> > Parameters
-</span></code><code id="L1656"><span class="ln">1656</span><span class="c"> <span class="s"> - </span>pathString (string|array) path string or array of segments
-</span></code><code id="L1657"><span class="ln">1657</span><span class="c"> <span class="s"> = </span>(array) array of segments.
-</span></code><code id="L1658"><span class="ln">1658</span><span class="c"> \*/</span>
-</code><code id="L1659"><span class="ln">1659</span> R.path2curve<span class="s"> = </span>path2curve;
-</code><code id="L1660"><span class="ln">1660</span> <span class="c">// Matrix</span>
-</code><code id="L1661"><span class="ln">1661</span> <span class="c">// <b>var</b> m<span class="s"> = </span>document.createElementNS(<i>"http://www.w3.org/<span class="d">2000</span>/svg"</i>, <i>"svg"</i>).createSVGMatrix();</span>
-</code><code id="L1662"><span class="ln">1662</span> <b>function</b> Matrix(a, b, c, d, e, f) {
-</code><code id="L1663"><span class="ln">1663</span> <b>if</b> (a != <b>null</b>) {
-</code><code id="L1664"><span class="ln">1664</span> <b>this</b>.m<span class="s"> = </span>[[a, c, e], [b, d, f], [<span class="d">0</span>, <span class="d">0</span>, <span class="d">1</span>]];
-</code><code id="L1665"><span class="ln">1665</span> } <b>else</b> {
-</code><code id="L1666"><span class="ln">1666</span> <b>this</b>.m<span class="s"> = </span>[[<span class="d">1</span>, <span class="d">0</span>, <span class="d">0</span>], [<span class="d">0</span>, <span class="d">1</span>, <span class="d">0</span>], [<span class="d">0</span>, <span class="d">0</span>, <span class="d">1</span>]];
-</code><code id="L1667"><span class="ln">1667</span> }
-</code><code id="L1668"><span class="ln">1668</span> }
-</code><code id="L1669"><span class="ln">1669</span> <b>var</b> matrixproto<span class="s"> = </span>Matrix.prototype;
-</code><code id="L1670"><span class="ln">1670</span> matrixproto.add<span class="s"> = </span><b>function</b> (a, b, c, d, e, f) {
-</code><code id="L1671"><span class="ln">1671</span> <b>var</b> out<span class="s"> = </span>[[], [], []],
-</code><code id="L1672"><span class="ln">1672</span> matrix<span class="s"> = </span>[[a, c, e], [b, d, f], [<span class="d">0</span>, <span class="d">0</span>, <span class="d">1</span>]],
-</code><code id="L1673"><span class="ln">1673</span> x, y, z, res;
-</code><code id="L1674"><span class="ln">1674</span>
-</code><code id="L1675"><span class="ln">1675</span> <b>for</b> (x<span class="s"> = </span><span class="d">0</span>; x < <span class="d">3</span>; x++) {
-</code><code id="L1676"><span class="ln">1676</span> <b>for</b> (y<span class="s"> = </span><span class="d">0</span>; y < <span class="d">3</span>; y++) {
-</code><code id="L1677"><span class="ln">1677</span> res<span class="s"> = </span><span class="d">0</span>;
-</code><code id="L1678"><span class="ln">1678</span> <b>for</b> (z<span class="s"> = </span><span class="d">0</span>; z < <span class="d">3</span>; z++) {
-</code><code id="L1679"><span class="ln">1679</span> res += <b>this</b>.m[x][z]<span class="s"> * </span>matrix[z][y];
-</code><code id="L1680"><span class="ln">1680</span> }
-</code><code id="L1681"><span class="ln">1681</span> out[x][y]<span class="s"> = </span>res;
-</code><code id="L1682"><span class="ln">1682</span> }
-</code><code id="L1683"><span class="ln">1683</span> }
-</code><code id="L1684"><span class="ln">1684</span> <b>this</b>.m<span class="s"> = </span>out;
-</code><code id="L1685"><span class="ln">1685</span> };
-</code><code id="L1686"><span class="ln">1686</span> matrixproto.invert<span class="s"> = </span><b>function</b> () {
-</code><code id="L1687"><span class="ln">1687</span> <b>var</b> a<span class="s"> = </span><b>this</b>.m[<span class="d">0</span>][<span class="d">0</span>],
-</code><code id="L1688"><span class="ln">1688</span> b<span class="s"> = </span><b>this</b>.m[<span class="d">1</span>][<span class="d">0</span>],
-</code><code id="L1689"><span class="ln">1689</span> c<span class="s"> = </span><b>this</b>.m[<span class="d">0</span>][<span class="d">1</span>],
-</code><code id="L1690"><span class="ln">1690</span> d<span class="s"> = </span><b>this</b>.m[<span class="d">1</span>][<span class="d">1</span>],
-</code><code id="L1691"><span class="ln">1691</span> e<span class="s"> = </span><b>this</b>.m[<span class="d">0</span>][<span class="d">2</span>],
-</code><code id="L1692"><span class="ln">1692</span> f<span class="s"> = </span><b>this</b>.m[<span class="d">1</span>][<span class="d">2</span>],
-</code><code id="L1693"><span class="ln">1693</span> x<span class="s"> = </span>a<span class="s"> * </span>d<span class="s"> - </span>b<span class="s"> * </span>c;
-</code><code id="L1694"><span class="ln">1694</span> <b>return</b> <b>new</b> Matrix(d<span class="s"> / </span>x, -b<span class="s"> / </span>x, -c<span class="s"> / </span>x, a<span class="s"> / </span>x, (c<span class="s"> * </span>f<span class="s"> - </span>d<span class="s"> * </span>e)<span class="s"> / </span>x, (b<span class="s"> * </span>e<span class="s"> - </span>a<span class="s"> * </span>f)<span class="s"> / </span>x);
-</code><code id="L1695"><span class="ln">1695</span> };
-</code><code id="L1696"><span class="ln">1696</span> matrixproto.clone<span class="s"> = </span><b>function</b> () {
-</code><code id="L1697"><span class="ln">1697</span> <b>var</b> a<span class="s"> = </span><b>this</b>.m[<span class="d">0</span>][<span class="d">0</span>],
-</code><code id="L1698"><span class="ln">1698</span> b<span class="s"> = </span><b>this</b>.m[<span class="d">1</span>][<span class="d">0</span>],
-</code><code id="L1699"><span class="ln">1699</span> c<span class="s"> = </span><b>this</b>.m[<span class="d">0</span>][<span class="d">1</span>],
-</code><code id="L1700"><span class="ln">1700</span> d<span class="s"> = </span><b>this</b>.m[<span class="d">1</span>][<span class="d">1</span>],
-</code><code id="L1701"><span class="ln">1701</span> e<span class="s"> = </span><b>this</b>.m[<span class="d">0</span>][<span class="d">2</span>],
-</code><code id="L1702"><span class="ln">1702</span> f<span class="s"> = </span><b>this</b>.m[<span class="d">1</span>][<span class="d">2</span>];
-</code><code id="L1703"><span class="ln">1703</span> <b>return</b> <b>new</b> Matrix(a, b, c, d, e, f);
-</code><code id="L1704"><span class="ln">1704</span> };
-</code><code id="L1705"><span class="ln">1705</span> matrixproto.translate<span class="s"> = </span><b>function</b> (x, y) {
-</code><code id="L1706"><span class="ln">1706</span> <b>this</b>.add(<span class="d">1</span>, <span class="d">0</span>, <span class="d">0</span>, <span class="d">1</span>, x, y);
-</code><code id="L1707"><span class="ln">1707</span> };
-</code><code id="L1708"><span class="ln">1708</span> matrixproto.scale<span class="s"> = </span><b>function</b> (x, y, cx, cy) {
-</code><code id="L1709"><span class="ln">1709</span> y<span class="s"> == </span><b>null</b> && (y<span class="s"> = </span>x);
-</code><code id="L1710"><span class="ln">1710</span> <b>this</b>.add(<span class="d">1</span>, <span class="d">0</span>, <span class="d">0</span>, <span class="d">1</span>, cx, cy);
-</code><code id="L1711"><span class="ln">1711</span> <b>this</b>.add(x, <span class="d">0</span>, <span class="d">0</span>, y, <span class="d">0</span>, <span class="d">0</span>);
-</code><code id="L1712"><span class="ln">1712</span> <b>this</b>.add(<span class="d">1</span>, <span class="d">0</span>, <span class="d">0</span>, <span class="d">1</span>, -cx, -cy);
-</code><code id="L1713"><span class="ln">1713</span> };
-</code><code id="L1714"><span class="ln">1714</span> matrixproto.rotate<span class="s"> = </span><b>function</b> (a, x, y) {
-</code><code id="L1715"><span class="ln">1715</span> a<span class="s"> = </span>R.rad(a);
-</code><code id="L1716"><span class="ln">1716</span> <b>var</b> cos<span class="s"> = </span>+math.cos(a).toFixed(<span class="d">9</span>),
-</code><code id="L1717"><span class="ln">1717</span> sin<span class="s"> = </span>+math.sin(a).toFixed(<span class="d">9</span>);
-</code><code id="L1718"><span class="ln">1718</span> <b>this</b>.add(cos, sin, -sin, cos, x, y);
-</code><code id="L1719"><span class="ln">1719</span> <b>this</b>.add(<span class="d">1</span>, <span class="d">0</span>, <span class="d">0</span>, <span class="d">1</span>, -x, -y);
-</code><code id="L1720"><span class="ln">1720</span> };
-</code><code id="L1721"><span class="ln">1721</span> matrixproto.x<span class="s"> = </span><b>function</b> (x, y) {
-</code><code id="L1722"><span class="ln">1722</span> <b>return</b> x<span class="s"> * </span><b>this</b>.m[<span class="d">0</span>][<span class="d">0</span>]<span class="s"> + </span>y<span class="s"> * </span><b>this</b>.m[<span class="d">0</span>][<span class="d">1</span>]<span class="s"> + </span><b>this</b>.m[<span class="d">0</span>][<span class="d">2</span>];
-</code><code id="L1723"><span class="ln">1723</span> };
-</code><code id="L1724"><span class="ln">1724</span> matrixproto.y<span class="s"> = </span><b>function</b> (x, y) {
-</code><code id="L1725"><span class="ln">1725</span> <b>return</b> x<span class="s"> * </span><b>this</b>.m[<span class="d">1</span>][<span class="d">0</span>]<span class="s"> + </span>y<span class="s"> * </span><b>this</b>.m[<span class="d">1</span>][<span class="d">1</span>]<span class="s"> + </span><b>this</b>.m[<span class="d">1</span>][<span class="d">2</span>];
-</code><code id="L1726"><span class="ln">1726</span> };
-</code><code id="L1727"><span class="ln">1727</span> matrixproto.get<span class="s"> = </span><b>function</b> (i, j) {
-</code><code id="L1728"><span class="ln">1728</span> <b>return</b> +<b>this</b>.m[i][j].toFixed(<span class="d">4</span>);
-</code><code id="L1729"><span class="ln">1729</span> };
-</code><code id="L1730"><span class="ln">1730</span> matrixproto.toString<span class="s"> = </span><b>function</b> () {
-</code><code id="L1731"><span class="ln">1731</span> <b>return</b> R.svg ?
-</code><code id="L1732"><span class="ln">1732</span> <i>"matrix("</i><span class="s"> + </span>[<b>this</b>.get(<span class="d">0</span>, <span class="d">0</span>), <b>this</b>.get(<span class="d">1</span>, <span class="d">0</span>), <b>this</b>.get(<span class="d">0</span>, <span class="d">1</span>), <b>this</b>.get(<span class="d">1</span>, <span class="d">1</span>), <b>this</b>.get(<span class="d">0</span>, <span class="d">2</span>), <b>this</b>.get(<span class="d">1</span>, <span class="d">2</span>)].join()<span class="s"> + </span><i>")"</i> :
-</code><code id="L1733"><span class="ln">1733</span> [<b>this</b>.get(<span class="d">0</span>, <span class="d">0</span>), <b>this</b>.get(<span class="d">0</span>, <span class="d">1</span>), <b>this</b>.get(<span class="d">1</span>, <span class="d">0</span>), <b>this</b>.get(<span class="d">1</span>, <span class="d">1</span>), <span class="d">0</span>, <span class="d">0</span>].join();
-</code><code id="L1734"><span class="ln">1734</span> };
-</code><code id="L1735"><span class="ln">1735</span> matrixproto.toFilter<span class="s"> = </span><b>function</b> () {
-</code><code id="L1736"><span class="ln">1736</span> <b>return</b> <i>"progid:DXImageTransform.Microsoft.Matrix(M11="</i><span class="s"> + </span><b>this</b>.get(<span class="d">0</span>, <span class="d">0</span>) +
-</code><code id="L1737"><span class="ln">1737</span> <i>", M12="</i><span class="s"> + </span><b>this</b>.get(<span class="d">0</span>, <span class="d">1</span>)<span class="s"> + </span><i>", M21="</i><span class="s"> + </span><b>this</b>.get(<span class="d">1</span>, <span class="d">0</span>)<span class="s"> + </span><i>", M22="</i><span class="s"> + </span><b>this</b>.get(<span class="d">1</span>, <span class="d">1</span>) +
-</code><code id="L1738"><span class="ln">1738</span> <i>", Dx="</i><span class="s"> + </span><b>this</b>.get(<span class="d">0</span>, <span class="d">2</span>)<span class="s"> + </span><i>", Dy="</i><span class="s"> + </span><b>this</b>.get(<span class="d">1</span>, <span class="d">2</span>)<span class="s"> + </span><i>", sizingmedthod='auto expand')"</i>;
-</code><code id="L1739"><span class="ln">1739</span> };
-</code><code id="L1740"><span class="ln">1740</span> matrixproto.offset<span class="s"> = </span><b>function</b> () {
-</code><code id="L1741"><span class="ln">1741</span> <b>return</b> [<b>this</b>.m[<span class="d">0</span>][<span class="d">2</span>].toFixed(<span class="d">4</span>), <b>this</b>.m[<span class="d">1</span>][<span class="d">2</span>].toFixed(<span class="d">4</span>)];
-</code><code id="L1742"><span class="ln">1742</span> };
-</code><code id="L1743"><span class="ln">1743</span>
-</code><code id="L1744"><span class="ln">1744</span> R.Matrix<span class="s"> = </span>Matrix;
-</code><code id="L1745"><span class="ln">1745</span>
-</code><code id="L1746"><span class="ln">1746</span> <span class="c">// SVG</span>
-</code><code id="L1747"><span class="ln">1747</span> <b>if</b> (R.svg) {
-</code><code id="L1748"><span class="ln">1748</span> <b>var</b> xlink<span class="s"> = </span><i>"http:<span class="c">//www.w3.org/<span class="d">1999</span>/xlink"</i>,</span>
-</code><code id="L1749"><span class="ln">1749</span> markers<span class="s"> = </span>{
-</code><code id="L1750"><span class="ln">1750</span> block: <i>"M5,<span class="d">0</span> <span class="d">0</span>,<span class="d">2.5</span> <span class="d">5</span>,5z"</i>,
-</code><code id="L1751"><span class="ln">1751</span> classic: <i>"M5,<span class="d">0</span> <span class="d">0</span>,<span class="d">2.5</span> <span class="d">5</span>,<span class="d">5</span> <span class="d">3.5</span>,<span class="d">3</span> <span class="d">3.5</span>,2z"</i>,
-</code><code id="L1752"><span class="ln">1752</span> diamond: <i>"M2<span class="d">.5</span>,<span class="d">0</span> <span class="d">5</span>,<span class="d">2.5</span> <span class="d">2.5</span>,<span class="d">5</span> <span class="d">0</span>,<span class="d">2</span>.5z"</i>,
-</code><code id="L1753"><span class="ln">1753</span> open: <i>"M6,<span class="d">1</span> <span class="d">1</span>,<span class="d">3.5</span> <span class="d">6</span>,<span class="d">6</span>"</i>,
-</code><code id="L1754"><span class="ln">1754</span> oval: <i>"M2<span class="d">.5</span>,0A2<span class="d">.5</span>,<span class="d">2.5</span>,<span class="d">0</span>,<span class="d">0</span>,<span class="d">1</span>,<span class="d">2.5</span>,<span class="d">5</span> <span class="d">2.5</span>,<span class="d">2.5</span>,<span class="d">0</span>,<span class="d">0</span>,<span class="d">1</span>,<span class="d">2.5</span>,0z"</i>
-</code><code id="L1755"><span class="ln">1755</span> },
-</code><code id="L1756"><span class="ln">1756</span> markerCounter<span class="s"> = </span>{};
-</code><code id="L1757"><span class="ln">1757</span> round<span class="s"> = </span><b>function</b> (num) {
-</code><code id="L1758"><span class="ln">1758</span> <b>return</b> +num<span class="s"> + </span>(~~num<span class="s"> === </span>num)<span class="s"> * </span><span class="d">.5</span>;
-</code><code id="L1759"><span class="ln">1759</span> };
-</code><code id="L1760"><span class="ln">1760</span> R.toString<span class="s"> = </span><b>function</b> () {
-</code><code id="L1761"><span class="ln">1761</span> <b>return</b> <i>"Your browser supports SVG.\nYou are running Rapha\xebl "</i><span class="s"> + </span><b>this</b>.version;
-</code><code id="L1762"><span class="ln">1762</span> };
-</code><code id="L1763"><span class="ln">1763</span> <b>var</b> $<span class="s"> = </span><b>function</b> (el, attr) {
-</code><code id="L1764"><span class="ln">1764</span> <b>if</b> (attr) {
-</code><code id="L1765"><span class="ln">1765</span> <b>if</b> (<b>typeof</b> el<span class="s"> == </span><i>"string"</i>) {
-</code><code id="L1766"><span class="ln">1766</span> el<span class="s"> = </span>$(el);
-</code><code id="L1767"><span class="ln">1767</span> }
-</code><code id="L1768"><span class="ln">1768</span> <b>for</b> (<b>var</b> key <b>in</b> attr) <b>if</b> (attr[has](key)) {
-</code><code id="L1769"><span class="ln">1769</span> <b>if</b> (key.substring(<span class="d">0</span>, <span class="d">6</span>)<span class="s"> == </span><i>"xlink:"</i>) {
-</code><code id="L1770"><span class="ln">1770</span> el.setAttributeNS(xlink, key.substring(<span class="d">6</span>), Str(attr[key]));
-</code><code id="L1771"><span class="ln">1771</span> } <b>else</b> {
-</code><code id="L1772"><span class="ln">1772</span> el[setAttribute](key, Str(attr[key]));
-</code><code id="L1773"><span class="ln">1773</span> }
-</code><code id="L1774"><span class="ln">1774</span> }
-</code><code id="L1775"><span class="ln">1775</span> } <b>else</b> {
-</code><code id="L1776"><span class="ln">1776</span> el<span class="s"> = </span>g.doc.createElementNS(<i>"http:<span class="c">//www.w3.org/<span class="d">2000</span>/svg"</i>, el);</span>
-</code><code id="L1777"><span class="ln">1777</span> el.style && (el.style.webkitTapHighlightColor<span class="s"> = </span><i>"rgba(<span class="d">0</span>,<span class="d">0</span>,<span class="d">0</span>,<span class="d">0</span>)"</i>);
-</code><code id="L1778"><span class="ln">1778</span> }
-</code><code id="L1779"><span class="ln">1779</span> <b>return</b> el;
-</code><code id="L1780"><span class="ln">1780</span> },
-</code><code id="L1781"><span class="ln">1781</span> thePath<span class="s"> = </span><b>function</b> (pathString, SVG) {
-</code><code id="L1782"><span class="ln">1782</span> <b>var</b> el<span class="s"> = </span>$(<i>"path"</i>);
-</code><code id="L1783"><span class="ln">1783</span> SVG.canvas && SVG.canvas.appendChild(el);
-</code><code id="L1784"><span class="ln">1784</span> <b>var</b> p<span class="s"> = </span><b>new</b> Element(el, SVG);
-</code><code id="L1785"><span class="ln">1785</span> p.type<span class="s"> = </span><i>"path"</i>;
-</code><code id="L1786"><span class="ln">1786</span> setFillAndStroke(p, {fill: <i>"none"</i>, stroke: <i>"#<span class="d">000</span>"</i>, path: pathString});
-</code><code id="L1787"><span class="ln">1787</span> <b>return</b> p;
-</code><code id="L1788"><span class="ln">1788</span> },
-</code><code id="L1789"><span class="ln">1789</span> gradients<span class="s"> = </span>{},
-</code><code id="L1790"><span class="ln">1790</span> rgGrad<span class="s"> = </span>/^url\(#(.*)\)$/,
-</code><code id="L1791"><span class="ln">1791</span> removeGradientFill<span class="s"> = </span><b>function</b> (node, paper) {
-</code><code id="L1792"><span class="ln">1792</span> <b>var</b> oid<span class="s"> = </span>node.getAttribute(fillString);
-</code><code id="L1793"><span class="ln">1793</span> oid<span class="s"> = </span>oid && oid.match(rgGrad);
-</code><code id="L1794"><span class="ln">1794</span> <b>if</b> (oid && !--gradients[oid[<span class="d">1</span>]]) {
-</code><code id="L1795"><span class="ln">1795</span> <b>delete</b> gradients[oid[<span class="d">1</span>]];
-</code><code id="L1796"><span class="ln">1796</span> paper.defs.removeChild(g.doc.getElementById(oid[<span class="d">1</span>]));
-</code><code id="L1797"><span class="ln">1797</span> }
-</code><code id="L1798"><span class="ln">1798</span> },
-</code><code id="L1799"><span class="ln">1799</span> addGradientFill<span class="s"> = </span><b>function</b> (element, gradient) {
-</code><code id="L1800"><span class="ln">1800</span> <b>var</b> type<span class="s"> = </span><i>"linear"</i>,
-</code><code id="L1801"><span class="ln">1801</span> id<span class="s"> = </span>element.id<span class="s"> + </span>gradient,
-</code><code id="L1802"><span class="ln">1802</span> fx<span class="s"> = </span><span class="d">.5</span>, fy<span class="s"> = </span><span class="d">.5</span>,
-</code><code id="L1803"><span class="ln">1803</span> o<span class="s"> = </span>element.node,
-</code><code id="L1804"><span class="ln">1804</span> SVG<span class="s"> = </span>element.paper,
-</code><code id="L1805"><span class="ln">1805</span> s<span class="s"> = </span>o.style,
-</code><code id="L1806"><span class="ln">1806</span> el<span class="s"> = </span>g.doc.getElementById(id);
-</code><code id="L1807"><span class="ln">1807</span> <b>if</b> (!el) {
-</code><code id="L1808"><span class="ln">1808</span> gradient<span class="s"> = </span>Str(gradient).replace(radial_gradient, <b>function</b> (all, _fx, _fy) {
-</code><code id="L1809"><span class="ln">1809</span> type<span class="s"> = </span><i>"radial"</i>;
-</code><code id="L1810"><span class="ln">1810</span> <b>if</b> (_fx && _fy) {
-</code><code id="L1811"><span class="ln">1811</span> fx<span class="s"> = </span>toFloat(_fx);
-</code><code id="L1812"><span class="ln">1812</span> fy<span class="s"> = </span>toFloat(_fy);
-</code><code id="L1813"><span class="ln">1813</span> <b>var</b> dir<span class="s"> = </span>((fy > <span class="d">.5</span>)<span class="s"> * </span><span class="d">2</span><span class="s"> - </span><span class="d">1</span>);
-</code><code id="L1814"><span class="ln">1814</span> pow(fx<span class="s"> - </span><span class="d">.5</span>, <span class="d">2</span>)<span class="s"> + </span>pow(fy<span class="s"> - </span><span class="d">.5</span>, <span class="d">2</span>) > <span class="d">.25</span> &&
-</code><code id="L1815"><span class="ln">1815</span> (fy<span class="s"> = </span>math.sqrt(<span class="d">.25</span><span class="s"> - </span>pow(fx<span class="s"> - </span><span class="d">.5</span>, <span class="d">2</span>))<span class="s"> * </span>dir<span class="s"> + </span><span class="d">.5</span>) &&
-</code><code id="L1816"><span class="ln">1816</span> fy != <span class="d">.5</span> &&
-</code><code id="L1817"><span class="ln">1817</span> (fy<span class="s"> = </span>fy.toFixed(<span class="d">5</span>)<span class="s"> - </span><span class="d">1e-5</span><span class="s"> * </span>dir);
-</code><code id="L1818"><span class="ln">1818</span> }
-</code><code id="L1819"><span class="ln">1819</span> <b>return</b> E;
-</code><code id="L1820"><span class="ln">1820</span> });
-</code><code id="L1821"><span class="ln">1821</span> gradient<span class="s"> = </span>gradient.split(/\s*\-\s*/);
-</code><code id="L1822"><span class="ln">1822</span> <b>if</b> (type<span class="s"> == </span><i>"linear"</i>) {
-</code><code id="L1823"><span class="ln">1823</span> <b>var</b> angle<span class="s"> = </span>gradient.shift();
-</code><code id="L1824"><span class="ln">1824</span> angle<span class="s"> = </span>-toFloat(angle);
-</code><code id="L1825"><span class="ln">1825</span> <b>if</b> (isNaN(angle)) {
-</code><code id="L1826"><span class="ln">1826</span> <b>return</b> <b>null</b>;
-</code><code id="L1827"><span class="ln">1827</span> }
-</code><code id="L1828"><span class="ln">1828</span> <b>var</b> vector<span class="s"> = </span>[<span class="d">0</span>, <span class="d">0</span>, math.cos(R.rad(angle)), math.sin(R.rad(angle))],
-</code><code id="L1829"><span class="ln">1829</span> max<span class="s"> = </span><span class="d">1</span><span class="s"> / </span>(mmax(abs(vector[<span class="d">2</span>]), abs(vector[<span class="d">3</span>]))<span class="s"> || </span><span class="d">1</span>);
-</code><code id="L1830"><span class="ln">1830</span> vector[<span class="d">2</span>] *= max;
-</code><code id="L1831"><span class="ln">1831</span> vector[<span class="d">3</span>] *= max;
-</code><code id="L1832"><span class="ln">1832</span> <b>if</b> (vector[<span class="d">2</span>] < <span class="d">0</span>) {
-</code><code id="L1833"><span class="ln">1833</span> vector[<span class="d">0</span>]<span class="s"> = </span>-vector[<span class="d">2</span>];
-</code><code id="L1834"><span class="ln">1834</span> vector[<span class="d">2</span>]<span class="s"> = </span><span class="d">0</span>;
-</code><code id="L1835"><span class="ln">1835</span> }
-</code><code id="L1836"><span class="ln">1836</span> <b>if</b> (vector[<span class="d">3</span>] < <span class="d">0</span>) {
-</code><code id="L1837"><span class="ln">1837</span> vector[<span class="d">1</span>]<span class="s"> = </span>-vector[<span class="d">3</span>];
-</code><code id="L1838"><span class="ln">1838</span> vector[<span class="d">3</span>]<span class="s"> = </span><span class="d">0</span>;
+</code><code id="L803"><span class="ln">803</span> R.hsl<span class="s"> = </span>cacher(<b>function</b> (h, s, l) {
+</code><code id="L804"><span class="ln">804</span> <b>return</b> R.hsl2rgb(h, s, l).hex;
+</code><code id="L805"><span class="ln">805</span> });
+</code><code id="L806"><span class="ln">806</span><span class="c"> <span class="c">/*\</span>
+</span></code><code id="L807"><span class="ln">807</span><span class="c"> <span class="s"> * </span>Raphael.rgb
+</span></code><code id="L808"><span class="ln">808</span><span class="c"> [ method ]
+</span></code><code id="L809"><span class="ln">809</span><span class="c"> **
+</span></code><code id="L810"><span class="ln">810</span><span class="c"> <span class="s"> * </span>Converts RGB values to hex representation of the colour.
+</span></code><code id="L811"><span class="ln">811</span><span class="c"> > Parameters
+</span></code><code id="L812"><span class="ln">812</span><span class="c"> <span class="s"> - </span>r (number) red
+</span></code><code id="L813"><span class="ln">813</span><span class="c"> <span class="s"> - </span>g (number) green
+</span></code><code id="L814"><span class="ln">814</span><span class="c"> <span class="s"> - </span>b (number) blue
+</span></code><code id="L815"><span class="ln">815</span><span class="c"> <span class="s"> = </span>(string) hex representation of the colour.
+</span></code><code id="L816"><span class="ln">816</span><span class="c"> \*/</span>
+</code><code id="L817"><span class="ln">817</span> R.rgb<span class="s"> = </span>cacher(<b>function</b> (r, g, b) {
+</code><code id="L818"><span class="ln">818</span> <b>return</b> <i>"#"</i><span class="s"> + </span>(<span class="d">16777216</span><span class="s"> | </span>b<span class="s"> | </span>(g << <span class="d">8</span>)<span class="s"> | </span>(r << <span class="d">16</span>)).toString(<span class="d">16</span>).slice(<span class="d">1</span>);
+</code><code id="L819"><span class="ln">819</span> });
+</code><code id="L820"><span class="ln">820</span><span class="c"> <span class="c">/*\</span>
+</span></code><code id="L821"><span class="ln">821</span><span class="c"> <span class="s"> * </span>Raphael.getColor
+</span></code><code id="L822"><span class="ln">822</span><span class="c"> [ method ]
+</span></code><code id="L823"><span class="ln">823</span><span class="c"> **
+</span></code><code id="L824"><span class="ln">824</span><span class="c"> <span class="s"> * </span>On each call returns next colour <b>in</b> the spectrum. To reset it back to red call @Raphael.getColor.reset
+</span></code><code id="L825"><span class="ln">825</span><span class="c"> > Parameters
+</span></code><code id="L826"><span class="ln">826</span><span class="c"> <span class="s"> - </span>value (number) #optional brightness, <b>default</b> is `<span class="d">0.75</span>`
+</span></code><code id="L827"><span class="ln">827</span><span class="c"> <span class="s"> = </span>(string) hex representation of the colour.
+</span></code><code id="L828"><span class="ln">828</span><span class="c"> \*/</span>
+</code><code id="L829"><span class="ln">829</span> R.getColor<span class="s"> = </span><b>function</b> (value) {
+</code><code id="L830"><span class="ln">830</span> <b>var</b> start<span class="s"> = </span><b>this</b>.getColor.start<span class="s"> = </span><b>this</b>.getColor.start<span class="s"> || </span>{h: <span class="d">0</span>, s: <span class="d">1</span>, b: value<span class="s"> || </span><span class="d">.75</span>},
+</code><code id="L831"><span class="ln">831</span> rgb<span class="s"> = </span><b>this</b>.hsb2rgb(start.h, start.s, start.b);
+</code><code id="L832"><span class="ln">832</span> start.h += <span class="d">.075</span>;
+</code><code id="L833"><span class="ln">833</span> <b>if</b> (start.h > <span class="d">1</span>) {
+</code><code id="L834"><span class="ln">834</span> start.h<span class="s"> = </span><span class="d">0</span>;
+</code><code id="L835"><span class="ln">835</span> start.s -= <span class="d">.2</span>;
+</code><code id="L836"><span class="ln">836</span> start.s <= <span class="d">0</span><span class="s"> && </span>(<b>this</b>.getColor.start<span class="s"> = </span>{h: <span class="d">0</span>, s: <span class="d">1</span>, b: start.b});
+</code><code id="L837"><span class="ln">837</span> }
+</code><code id="L838"><span class="ln">838</span> <b>return</b> rgb.hex;
+</code><code id="L839"><span class="ln">839</span> };
+</code><code id="L840"><span class="ln">840</span><span class="c"> <span class="c">/*\</span>
+</span></code><code id="L841"><span class="ln">841</span><span class="c"> <span class="s"> * </span>Raphael.getColor.reset
+</span></code><code id="L842"><span class="ln">842</span><span class="c"> [ method ]
+</span></code><code id="L843"><span class="ln">843</span><span class="c"> **
+</span></code><code id="L844"><span class="ln">844</span><span class="c"> <span class="s"> * </span>Resets spectrum position <b>for</b> @Raphael.getColor back to red.
+</span></code><code id="L845"><span class="ln">845</span><span class="c"> \*/</span>
+</code><code id="L846"><span class="ln">846</span> R.getColor.reset<span class="s"> = </span><b>function</b> () {
+</code><code id="L847"><span class="ln">847</span> <b>delete</b> <b>this</b>.start;
+</code><code id="L848"><span class="ln">848</span> };
+</code><code id="L849"><span class="ln">849</span>
+</code><code id="L850"><span class="ln">850</span><span class="c"> <span class="c">/*\</span>
+</span></code><code id="L851"><span class="ln">851</span><span class="c"> <span class="s"> * </span>Raphael.parsePathString
+</span></code><code id="L852"><span class="ln">852</span><span class="c"> [ method ]
+</span></code><code id="L853"><span class="ln">853</span><span class="c"> **
+</span></code><code id="L854"><span class="ln">854</span><span class="c"> <span class="s"> * </span>Utility method
+</span></code><code id="L855"><span class="ln">855</span><span class="c"> **
+</span></code><code id="L856"><span class="ln">856</span><span class="c"> <span class="s"> * </span>Parses given path string into an array of arrays of path segments.
+</span></code><code id="L857"><span class="ln">857</span><span class="c"> > Parameters
+</span></code><code id="L858"><span class="ln">858</span><span class="c"> <span class="s"> - </span>pathString (string|array) path string or array of segments (<b>in</b> the last <b>case</b> it will be returned stright away)
+</span></code><code id="L859"><span class="ln">859</span><span class="c"> <span class="s"> = </span>(array) array of segments.
+</span></code><code id="L860"><span class="ln">860</span><span class="c"> \*/</span>
+</code><code id="L861"><span class="ln">861</span> R.parsePathString<span class="s"> = </span>cacher(<b>function</b> (pathString) {
+</code><code id="L862"><span class="ln">862</span> <b>if</b> (!pathString) {
+</code><code id="L863"><span class="ln">863</span> <b>return</b> <b>null</b>;
+</code><code id="L864"><span class="ln">864</span> }
+</code><code id="L865"><span class="ln">865</span> <b>var</b> paramCounts<span class="s"> = </span>{a: <span class="d">7</span>, c: <span class="d">6</span>, h: <span class="d">1</span>, l: <span class="d">2</span>, m: <span class="d">2</span>, q: <span class="d">4</span>, s: <span class="d">4</span>, t: <span class="d">2</span>, v: <span class="d">1</span>, z: <span class="d">0</span>},
+</code><code id="L866"><span class="ln">866</span> data<span class="s"> = </span>[];
+</code><code id="L867"><span class="ln">867</span> <b>if</b> (R.is(pathString, array)<span class="s"> && </span>R.is(pathString[<span class="d">0</span>], array)) { <span class="c">// rough assumption</span>
+</code><code id="L868"><span class="ln">868</span> data<span class="s"> = </span>pathClone(pathString);
+</code><code id="L869"><span class="ln">869</span> }
+</code><code id="L870"><span class="ln">870</span> <b>if</b> (!data.length) {
+</code><code id="L871"><span class="ln">871</span> Str(pathString).replace(pathCommand, <b>function</b> (a, b, c) {
+</code><code id="L872"><span class="ln">872</span> <b>var</b> params<span class="s"> = </span>[],
+</code><code id="L873"><span class="ln">873</span> name<span class="s"> = </span>lowerCase.call(b);
+</code><code id="L874"><span class="ln">874</span> c.replace(pathValues, <b>function</b> (a, b) {
+</code><code id="L875"><span class="ln">875</span> b<span class="s"> && </span>params.push(+b);
+</code><code id="L876"><span class="ln">876</span> });
+</code><code id="L877"><span class="ln">877</span> <b>if</b> (name<span class="s"> == </span><i>"m"</i><span class="s"> && </span>params.length > <span class="d">2</span>) {
+</code><code id="L878"><span class="ln">878</span> data.push([b][concat](params.splice(<span class="d">0</span>, <span class="d">2</span>)));
+</code><code id="L879"><span class="ln">879</span> name<span class="s"> = </span><i>"l"</i>;
+</code><code id="L880"><span class="ln">880</span> b<span class="s"> = </span>b<span class="s"> == </span><i>"m"</i> ? <i>"l"</i> : <i>"L"</i>;
+</code><code id="L881"><span class="ln">881</span> }
+</code><code id="L882"><span class="ln">882</span> <b>while</b> (params.length >= paramCounts[name]) {
+</code><code id="L883"><span class="ln">883</span> data.push([b][concat](params.splice(<span class="d">0</span>, paramCounts[name])));
+</code><code id="L884"><span class="ln">884</span> <b>if</b> (!paramCounts[name]) {
+</code><code id="L885"><span class="ln">885</span> <b>break</b>;
+</code><code id="L886"><span class="ln">886</span> }
+</code><code id="L887"><span class="ln">887</span> }
+</code><code id="L888"><span class="ln">888</span> });
+</code><code id="L889"><span class="ln">889</span> }
+</code><code id="L890"><span class="ln">890</span> data.toString<span class="s"> = </span>R._path2string;
+</code><code id="L891"><span class="ln">891</span> <b>return</b> data;
+</code><code id="L892"><span class="ln">892</span> });
+</code><code id="L893"><span class="ln">893</span><span class="c"> <span class="c">/*\</span>
+</span></code><code id="L894"><span class="ln">894</span><span class="c"> <span class="s"> * </span>Raphael.parseTransformString
+</span></code><code id="L895"><span class="ln">895</span><span class="c"> [ method ]
+</span></code><code id="L896"><span class="ln">896</span><span class="c"> **
+</span></code><code id="L897"><span class="ln">897</span><span class="c"> <span class="s"> * </span>Utility method
+</span></code><code id="L898"><span class="ln">898</span><span class="c"> **
+</span></code><code id="L899"><span class="ln">899</span><span class="c"> <span class="s"> * </span>Parses given path string into an array of transformations.
+</span></code><code id="L900"><span class="ln">900</span><span class="c"> > Parameters
+</span></code><code id="L901"><span class="ln">901</span><span class="c"> <span class="s"> - </span>TString (string|array) transform string or array of transformations (<b>in</b> the last <b>case</b> it will be returned stright away)
+</span></code><code id="L902"><span class="ln">902</span><span class="c"> <span class="s"> = </span>(array) array of transformations.
+</span></code><code id="L903"><span class="ln">903</span><span class="c"> \*/</span>
+</code><code id="L904"><span class="ln">904</span> R.parseTransformString<span class="s"> = </span>cacher(<b>function</b> (TString) {
+</code><code id="L905"><span class="ln">905</span> <b>if</b> (!TString) {
+</code><code id="L906"><span class="ln">906</span> <b>return</b> <b>null</b>;
+</code><code id="L907"><span class="ln">907</span> }
+</code><code id="L908"><span class="ln">908</span> <b>var</b> paramCounts<span class="s"> = </span>{r: <span class="d">3</span>, s: <span class="d">4</span>, t: <span class="d">2</span>, m: <span class="d">6</span>},
+</code><code id="L909"><span class="ln">909</span> data<span class="s"> = </span>[];
+</code><code id="L910"><span class="ln">910</span> <b>if</b> (R.is(TString, array)<span class="s"> && </span>R.is(TString[<span class="d">0</span>], array)) { <span class="c">// rough assumption</span>
+</code><code id="L911"><span class="ln">911</span> data<span class="s"> = </span>pathClone(TString);
+</code><code id="L912"><span class="ln">912</span> }
+</code><code id="L913"><span class="ln">913</span> <b>if</b> (!data.length) {
+</code><code id="L914"><span class="ln">914</span> Str(TString).replace(tCommand, <b>function</b> (a, b, c) {
+</code><code id="L915"><span class="ln">915</span> <b>var</b> params<span class="s"> = </span>[],
+</code><code id="L916"><span class="ln">916</span> name<span class="s"> = </span>lowerCase.call(b);
+</code><code id="L917"><span class="ln">917</span> c.replace(pathValues, <b>function</b> (a, b) {
+</code><code id="L918"><span class="ln">918</span> b<span class="s"> && </span>params.push(+b);
+</code><code id="L919"><span class="ln">919</span> });
+</code><code id="L920"><span class="ln">920</span> data.push([name][concat](params));
+</code><code id="L921"><span class="ln">921</span> });
+</code><code id="L922"><span class="ln">922</span> }
+</code><code id="L923"><span class="ln">923</span> data.toString<span class="s"> = </span>R._path2string;
+</code><code id="L924"><span class="ln">924</span> <b>return</b> data;
+</code><code id="L925"><span class="ln">925</span> });
+</code><code id="L926"><span class="ln">926</span><span class="c"> <span class="c">/*\</span>
+</span></code><code id="L927"><span class="ln">927</span><span class="c"> <span class="s"> * </span>Raphael.findDotsAtSegment
+</span></code><code id="L928"><span class="ln">928</span><span class="c"> [ method ]
+</span></code><code id="L929"><span class="ln">929</span><span class="c"> **
+</span></code><code id="L930"><span class="ln">930</span><span class="c"> <span class="s"> * </span>Utility method
+</span></code><code id="L931"><span class="ln">931</span><span class="c"> **
+</span></code><code id="L932"><span class="ln">932</span><span class="c"> <span class="s"> * </span>Find dot coordinates on the given cubic bezier curve at the given t.
+</span></code><code id="L933"><span class="ln">933</span><span class="c"> > Parameters
+</span></code><code id="L934"><span class="ln">934</span><span class="c"> <span class="s"> - </span>p1x (number) x of the first point of the curve
+</span></code><code id="L935"><span class="ln">935</span><span class="c"> <span class="s"> - </span>p1y (number) y of the first point of the curve
+</span></code><code id="L936"><span class="ln">936</span><span class="c"> <span class="s"> - </span>c1x (number) x of the first anchor of the curve
+</span></code><code id="L937"><span class="ln">937</span><span class="c"> <span class="s"> - </span>c1y (number) y of the first anchor of the curve
+</span></code><code id="L938"><span class="ln">938</span><span class="c"> <span class="s"> - </span>c2x (number) x of the second anchor of the curve
+</span></code><code id="L939"><span class="ln">939</span><span class="c"> <span class="s"> - </span>c2y (number) y of the second anchor of the curve
+</span></code><code id="L940"><span class="ln">940</span><span class="c"> <span class="s"> - </span>p2x (number) x of the second point of the curve
+</span></code><code id="L941"><span class="ln">941</span><span class="c"> <span class="s"> - </span>p2y (number) y of the second point of the curve
+</span></code><code id="L942"><span class="ln">942</span><span class="c"> <span class="s"> - </span>t (number) position on the curve (<span class="d">0</span>.<span class="d">.1</span>)
+</span></code><code id="L943"><span class="ln">943</span><span class="c"> <span class="s"> = </span>(object) point information <b>in</b> format:
+</span></code><code id="L944"><span class="ln">944</span><span class="c"> o {
+</span></code><code id="L945"><span class="ln">945</span><span class="c"> o x: (number) x coordinate of the point
+</span></code><code id="L946"><span class="ln">946</span><span class="c"> o y: (number) y coordinate of the point
+</span></code><code id="L947"><span class="ln">947</span><span class="c"> o m: {
+</span></code><code id="L948"><span class="ln">948</span><span class="c"> o x: (number) x coordinate of the left anchor
+</span></code><code id="L949"><span class="ln">949</span><span class="c"> o y: (number) y coordinate of the left anchor
+</span></code><code id="L950"><span class="ln">950</span><span class="c"> o }
+</span></code><code id="L951"><span class="ln">951</span><span class="c"> o n: {
+</span></code><code id="L952"><span class="ln">952</span><span class="c"> o x: (number) x coordinate of the right anchor
+</span></code><code id="L953"><span class="ln">953</span><span class="c"> o y: (number) y coordinate of the right anchor
+</span></code><code id="L954"><span class="ln">954</span><span class="c"> o }
+</span></code><code id="L955"><span class="ln">955</span><span class="c"> o start: {
+</span></code><code id="L956"><span class="ln">956</span><span class="c"> o x: (number) x coordinate of the start of the curve
+</span></code><code id="L957"><span class="ln">957</span><span class="c"> o y: (number) y coordinate of the start of the curve
+</span></code><code id="L958"><span class="ln">958</span><span class="c"> o }
+</span></code><code id="L959"><span class="ln">959</span><span class="c"> o end: {
+</span></code><code id="L960"><span class="ln">960</span><span class="c"> o x: (number) x coordinate of the end of the curve
+</span></code><code id="L961"><span class="ln">961</span><span class="c"> o y: (number) y coordinate of the end of the curve
+</span></code><code id="L962"><span class="ln">962</span><span class="c"> o }
+</span></code><code id="L963"><span class="ln">963</span><span class="c"> o alpha: (number) angle of the curve derivative at the point
+</span></code><code id="L964"><span class="ln">964</span><span class="c"> o }
+</span></code><code id="L965"><span class="ln">965</span><span class="c"> \*/</span>
+</code><code id="L966"><span class="ln">966</span> R.findDotsAtSegment<span class="s"> = </span><b>function</b> (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {
+</code><code id="L967"><span class="ln">967</span> <b>var</b> t1<span class="s"> = </span><span class="d">1</span><span class="s"> - </span>t,
+</code><code id="L968"><span class="ln">968</span> x<span class="s"> = </span>pow(t1, <span class="d">3</span>)<span class="s"> * </span>p1x<span class="s"> + </span>pow(t1, <span class="d">2</span>)<span class="s"> * </span><span class="d">3</span><span class="s"> * </span>t<span class="s"> * </span>c1x<span class="s"> + </span>t1<span class="s"> * </span><span class="d">3</span><span class="s"> * </span>t<span class="s"> * </span>t<span class="s"> * </span>c2x<span class="s"> + </span>pow(t, <span class="d">3</span>)<span class="s"> * </span>p2x,
+</code><code id="L969"><span class="ln">969</span> y<span class="s"> = </span>pow(t1, <span class="d">3</span>)<span class="s"> * </span>p1y<span class="s"> + </span>pow(t1, <span class="d">2</span>)<span class="s"> * </span><span class="d">3</span><span class="s"> * </span>t<span class="s"> * </span>c1y<span class="s"> + </span>t1<span class="s"> * </span><span class="d">3</span><span class="s"> * </span>t<span class="s"> * </span>t<span class="s"> * </span>c2y<span class="s"> + </span>pow(t, <span class="d">3</span>)<span class="s"> * </span>p2y,
+</code><code id="L970"><span class="ln">970</span> mx<span class="s"> = </span>p1x<span class="s"> + </span><span class="d">2</span><span class="s"> * </span>t<span class="s"> * </span>(c1x<span class="s"> - </span>p1x)<span class="s"> + </span>t<span class="s"> * </span>t<span class="s"> * </span>(c2x<span class="s"> - </span><span class="d">2</span><span class="s"> * </span>c1x<span class="s"> + </span>p1x),
+</code><code id="L971"><span class="ln">971</span> my<span class="s"> = </span>p1y<span class="s"> + </span><span class="d">2</span><span class="s"> * </span>t<span class="s"> * </span>(c1y<span class="s"> - </span>p1y)<span class="s"> + </span>t<span class="s"> * </span>t<span class="s"> * </span>(c2y<span class="s"> - </span><span class="d">2</span><span class="s"> * </span>c1y<span class="s"> + </span>p1y),
+</code><code id="L972"><span class="ln">972</span> nx<span class="s"> = </span>c1x<span class="s"> + </span><span class="d">2</span><span class="s"> * </span>t<span class="s"> * </span>(c2x<span class="s"> - </span>c1x)<span class="s"> + </span>t<span class="s"> * </span>t<span class="s"> * </span>(p2x<span class="s"> - </span><span class="d">2</span><span class="s"> * </span>c2x<span class="s"> + </span>c1x),
+</code><code id="L973"><span class="ln">973</span> ny<span class="s"> = </span>c1y<span class="s"> + </span><span class="d">2</span><span class="s"> * </span>t<span class="s"> * </span>(c2y<span class="s"> - </span>c1y)<span class="s"> + </span>t<span class="s"> * </span>t<span class="s"> * </span>(p2y<span class="s"> - </span><span class="d">2</span><span class="s"> * </span>c2y<span class="s"> + </span>c1y),
+</code><code id="L974"><span class="ln">974</span> ax<span class="s"> = </span>(<span class="d">1</span><span class="s"> - </span>t)<span class="s"> * </span>p1x<span class="s"> + </span>t<span class="s"> * </span>c1x,
+</code><code id="L975"><span class="ln">975</span> ay<span class="s"> = </span>(<span class="d">1</span><span class="s"> - </span>t)<span class="s"> * </span>p1y<span class="s"> + </span>t<span class="s"> * </span>c1y,
+</code><code id="L976"><span class="ln">976</span> cx<span class="s"> = </span>(<span class="d">1</span><span class="s"> - </span>t)<span class="s"> * </span>c2x<span class="s"> + </span>t<span class="s"> * </span>p2x,
+</code><code id="L977"><span class="ln">977</span> cy<span class="s"> = </span>(<span class="d">1</span><span class="s"> - </span>t)<span class="s"> * </span>c2y<span class="s"> + </span>t<span class="s"> * </span>p2y,
+</code><code id="L978"><span class="ln">978</span> alpha<span class="s"> = </span>(<span class="d">90</span><span class="s"> - </span>math.atan2(mx<span class="s"> - </span>nx, my<span class="s"> - </span>ny)<span class="s"> * </span><span class="d">180</span><span class="s"> / </span>PI);
+</code><code id="L979"><span class="ln">979</span> (mx > nx<span class="s"> || </span>my < ny)<span class="s"> && </span>(alpha += <span class="d">180</span>);
+</code><code id="L980"><span class="ln">980</span> <b>return</b> {x: x, y: y, m: {x: mx, y: my}, n: {x: nx, y: ny}, start: {x: ax, y: ay}, end: {x: cx, y: cy}, alpha: alpha};
+</code><code id="L981"><span class="ln">981</span> };
+</code><code id="L982"><span class="ln">982</span> <b>var</b> pathDimensions<span class="s"> = </span>cacher(<b>function</b> (path) {
+</code><code id="L983"><span class="ln">983</span> <b>if</b> (!path) {
+</code><code id="L984"><span class="ln">984</span> <b>return</b> {x: <span class="d">0</span>, y: <span class="d">0</span>, width: <span class="d">0</span>, height: <span class="d">0</span>};
+</code><code id="L985"><span class="ln">985</span> }
+</code><code id="L986"><span class="ln">986</span> path<span class="s"> = </span>path2curve(path);
+</code><code id="L987"><span class="ln">987</span> <b>var</b> x<span class="s"> = </span><span class="d">0</span>,
+</code><code id="L988"><span class="ln">988</span> y<span class="s"> = </span><span class="d">0</span>,
+</code><code id="L989"><span class="ln">989</span> X<span class="s"> = </span>[],
+</code><code id="L990"><span class="ln">990</span> Y<span class="s"> = </span>[],
+</code><code id="L991"><span class="ln">991</span> p;
+</code><code id="L992"><span class="ln">992</span> <b>for</b> (<b>var</b> i<span class="s"> = </span><span class="d">0</span>, ii<span class="s"> = </span>path.length; i < ii; i++) {
+</code><code id="L993"><span class="ln">993</span> p<span class="s"> = </span>path[i];
+</code><code id="L994"><span class="ln">994</span> <b>if</b> (p[<span class="d">0</span>]<span class="s"> == </span><i>"M"</i>) {
+</code><code id="L995"><span class="ln">995</span> x<span class="s"> = </span>p[<span class="d">1</span>];
+</code><code id="L996"><span class="ln">996</span> y<span class="s"> = </span>p[<span class="d">2</span>];
+</code><code id="L997"><span class="ln">997</span> X.push(x);
+</code><code id="L998"><span class="ln">998</span> Y.push(y);
+</code><code id="L999"><span class="ln">999</span> } <b>else</b> {
+</code><code id="L1000"><span class="ln">1000</span> <b>var</b> dim<span class="s"> = </span>curveDim(x, y, p[<span class="d">1</span>], p[<span class="d">2</span>], p[<span class="d">3</span>], p[<span class="d">4</span>], p[<span class="d">5</span>], p[<span class="d">6</span>]);
+</code><code id="L1001"><span class="ln">1001</span> X<span class="s"> = </span>X[concat](dim.min.x, dim.max.x);
+</code><code id="L1002"><span class="ln">1002</span> Y<span class="s"> = </span>Y[concat](dim.min.y, dim.max.y);
+</code><code id="L1003"><span class="ln">1003</span> x<span class="s"> = </span>p[<span class="d">5</span>];
+</code><code id="L1004"><span class="ln">1004</span> y<span class="s"> = </span>p[<span class="d">6</span>];
+</code><code id="L1005"><span class="ln">1005</span> }
+</code><code id="L1006"><span class="ln">1006</span> }
+</code><code id="L1007"><span class="ln">1007</span> <b>var</b> xmin<span class="s"> = </span>mmin[apply](<span class="d">0</span>, X),
+</code><code id="L1008"><span class="ln">1008</span> ymin<span class="s"> = </span>mmin[apply](<span class="d">0</span>, Y);
+</code><code id="L1009"><span class="ln">1009</span> <b>return</b> {
+</code><code id="L1010"><span class="ln">1010</span> x: xmin,
+</code><code id="L1011"><span class="ln">1011</span> y: ymin,
+</code><code id="L1012"><span class="ln">1012</span> width: mmax[apply](<span class="d">0</span>, X)<span class="s"> - </span>xmin,
+</code><code id="L1013"><span class="ln">1013</span> height: mmax[apply](<span class="d">0</span>, Y)<span class="s"> - </span>ymin
+</code><code id="L1014"><span class="ln">1014</span> };
+</code><code id="L1015"><span class="ln">1015</span> }),
+</code><code id="L1016"><span class="ln">1016</span> pathClone<span class="s"> = </span><b>function</b> (pathArray) {
+</code><code id="L1017"><span class="ln">1017</span> <b>var</b> res<span class="s"> = </span>[];
+</code><code id="L1018"><span class="ln">1018</span> <b>if</b> (!R.is(pathArray, array)<span class="s"> || </span>!R.is(pathArray<span class="s"> && </span>pathArray[<span class="d">0</span>], array)) { <span class="c">// rough assumption</span>
+</code><code id="L1019"><span class="ln">1019</span> pathArray<span class="s"> = </span>R.parsePathString(pathArray);
+</code><code id="L1020"><span class="ln">1020</span> }
+</code><code id="L1021"><span class="ln">1021</span> <b>for</b> (<b>var</b> i<span class="s"> = </span><span class="d">0</span>, ii<span class="s"> = </span>pathArray.length; i < ii; i++) {
+</code><code id="L1022"><span class="ln">1022</span> res[i]<span class="s"> = </span>[];
+</code><code id="L1023"><span class="ln">1023</span> <b>for</b> (<b>var</b> j<span class="s"> = </span><span class="d">0</span>, jj<span class="s"> = </span>pathArray[i].length; j < jj; j++) {
+</code><code id="L1024"><span class="ln">1024</span> res[i][j]<span class="s"> = </span>pathArray[i][j];
+</code><code id="L1025"><span class="ln">1025</span> }
+</code><code id="L1026"><span class="ln">1026</span> }
+</code><code id="L1027"><span class="ln">1027</span> res.toString<span class="s"> = </span>R._path2string;
+</code><code id="L1028"><span class="ln">1028</span> <b>return</b> res;
+</code><code id="L1029"><span class="ln">1029</span> },
+</code><code id="L1030"><span class="ln">1030</span> pathToRelative<span class="s"> = </span>cacher(<b>function</b> (pathArray) {
+</code><code id="L1031"><span class="ln">1031</span> <b>if</b> (!R.is(pathArray, array)<span class="s"> || </span>!R.is(pathArray<span class="s"> && </span>pathArray[<span class="d">0</span>], array)) { <span class="c">// rough assumption</span>
+</code><code id="L1032"><span class="ln">1032</span> pathArray<span class="s"> = </span>R.parsePathString(pathArray);
+</code><code id="L1033"><span class="ln">1033</span> }
+</code><code id="L1034"><span class="ln">1034</span> <b>var</b> res<span class="s"> = </span>[],
+</code><code id="L1035"><span class="ln">1035</span> x<span class="s"> = </span><span class="d">0</span>,
+</code><code id="L1036"><span class="ln">1036</span> y<span class="s"> = </span><span class="d">0</span>,
+</code><code id="L1037"><span class="ln">1037</span> mx<span class="s"> = </span><span class="d">0</span>,
+</code><code id="L1038"><span class="ln">1038</span> my<span class="s"> = </span><span class="d">0</span>,
+</code><code id="L1039"><span class="ln">1039</span> start<span class="s"> = </span><span class="d">0</span>;
+</code><code id="L1040"><span class="ln">1040</span> <b>if</b> (pathArray[<span class="d">0</span>][<span class="d">0</span>]<span class="s"> == </span><i>"M"</i>) {
+</code><code id="L1041"><span class="ln">1041</span> x<span class="s"> = </span>pathArray[<span class="d">0</span>][<span class="d">1</span>];
+</code><code id="L1042"><span class="ln">1042</span> y<span class="s"> = </span>pathArray[<span class="d">0</span>][<span class="d">2</span>];
+</code><code id="L1043"><span class="ln">1043</span> mx<span class="s"> = </span>x;
+</code><code id="L1044"><span class="ln">1044</span> my<span class="s"> = </span>y;
+</code><code id="L1045"><span class="ln">1045</span> start++;
+</code><code id="L1046"><span class="ln">1046</span> res.push([<i>"M"</i>, x, y]);
+</code><code id="L1047"><span class="ln">1047</span> }
+</code><code id="L1048"><span class="ln">1048</span> <b>for</b> (<b>var</b> i<span class="s"> = </span>start, ii<span class="s"> = </span>pathArray.length; i < ii; i++) {
+</code><code id="L1049"><span class="ln">1049</span> <b>var</b> r<span class="s"> = </span>res[i]<span class="s"> = </span>[],
+</code><code id="L1050"><span class="ln">1050</span> pa<span class="s"> = </span>pathArray[i];
+</code><code id="L1051"><span class="ln">1051</span> <b>if</b> (pa[<span class="d">0</span>] != lowerCase.call(pa[<span class="d">0</span>])) {
+</code><code id="L1052"><span class="ln">1052</span> r[<span class="d">0</span>]<span class="s"> = </span>lowerCase.call(pa[<span class="d">0</span>]);
+</code><code id="L1053"><span class="ln">1053</span> <b>switch</b> (r[<span class="d">0</span>]) {
+</code><code id="L1054"><span class="ln">1054</span> <b>case</b> <i>"a"</i>:
+</code><code id="L1055"><span class="ln">1055</span> r[<span class="d">1</span>]<span class="s"> = </span>pa[<span class="d">1</span>];
+</code><code id="L1056"><span class="ln">1056</span> r[<span class="d">2</span>]<span class="s"> = </span>pa[<span class="d">2</span>];
+</code><code id="L1057"><span class="ln">1057</span> r[<span class="d">3</span>]<span class="s"> = </span>pa[<span class="d">3</span>];
+</code><code id="L1058"><span class="ln">1058</span> r[<span class="d">4</span>]<span class="s"> = </span>pa[<span class="d">4</span>];
+</code><code id="L1059"><span class="ln">1059</span> r[<span class="d">5</span>]<span class="s"> = </span>pa[<span class="d">5</span>];
+</code><code id="L1060"><span class="ln">1060</span> r[<span class="d">6</span>]<span class="s"> = </span>+(pa[<span class="d">6</span>]<span class="s"> - </span>x).toFixed(<span class="d">3</span>);
+</code><code id="L1061"><span class="ln">1061</span> r[<span class="d">7</span>]<span class="s"> = </span>+(pa[<span class="d">7</span>]<span class="s"> - </span>y).toFixed(<span class="d">3</span>);
+</code><code id="L1062"><span class="ln">1062</span> <b>break</b>;
+</code><code id="L1063"><span class="ln">1063</span> <b>case</b> <i>"v"</i>:
+</code><code id="L1064"><span class="ln">1064</span> r[<span class="d">1</span>]<span class="s"> = </span>+(pa[<span class="d">1</span>]<span class="s"> - </span>y).toFixed(<span class="d">3</span>);
+</code><code id="L1065"><span class="ln">1065</span> <b>break</b>;
+</code><code id="L1066"><span class="ln">1066</span> <b>case</b> <i>"m"</i>:
+</code><code id="L1067"><span class="ln">1067</span> mx<span class="s"> = </span>pa[<span class="d">1</span>];
+</code><code id="L1068"><span class="ln">1068</span> my<span class="s"> = </span>pa[<span class="d">2</span>];
+</code><code id="L1069"><span class="ln">1069</span> <b>default</b>:
+</code><code id="L1070"><span class="ln">1070</span> <b>for</b> (<b>var</b> j<span class="s"> = </span><span class="d">1</span>, jj<span class="s"> = </span>pa.length; j < jj; j++) {
+</code><code id="L1071"><span class="ln">1071</span> r[j]<span class="s"> = </span>+(pa[j]<span class="s"> - </span>((j<span class="s"> % </span><span class="d">2</span>) ? x : y)).toFixed(<span class="d">3</span>);
+</code><code id="L1072"><span class="ln">1072</span> }
+</code><code id="L1073"><span class="ln">1073</span> }
+</code><code id="L1074"><span class="ln">1074</span> } <b>else</b> {
+</code><code id="L1075"><span class="ln">1075</span> r<span class="s"> = </span>res[i]<span class="s"> = </span>[];
+</code><code id="L1076"><span class="ln">1076</span> <b>if</b> (pa[<span class="d">0</span>]<span class="s"> == </span><i>"m"</i>) {
+</code><code id="L1077"><span class="ln">1077</span> mx<span class="s"> = </span>pa[<span class="d">1</span>]<span class="s"> + </span>x;
+</code><code id="L1078"><span class="ln">1078</span> my<span class="s"> = </span>pa[<span class="d">2</span>]<span class="s"> + </span>y;
+</code><code id="L1079"><span class="ln">1079</span> }
+</code><code id="L1080"><span class="ln">1080</span> <b>for</b> (<b>var</b> k<span class="s"> = </span><span class="d">0</span>, kk<span class="s"> = </span>pa.length; k < kk; k++) {
+</code><code id="L1081"><span class="ln">1081</span> res[i][k]<span class="s"> = </span>pa[k];
+</code><code id="L1082"><span class="ln">1082</span> }
+</code><code id="L1083"><span class="ln">1083</span> }
+</code><code id="L1084"><span class="ln">1084</span> <b>var</b> len<span class="s"> = </span>res[i].length;
+</code><code id="L1085"><span class="ln">1085</span> <b>switch</b> (res[i][<span class="d">0</span>]) {
+</code><code id="L1086"><span class="ln">1086</span> <b>case</b> <i>"z"</i>:
+</code><code id="L1087"><span class="ln">1087</span> x<span class="s"> = </span>mx;
+</code><code id="L1088"><span class="ln">1088</span> y<span class="s"> = </span>my;
+</code><code id="L1089"><span class="ln">1089</span> <b>break</b>;
+</code><code id="L1090"><span class="ln">1090</span> <b>case</b> <i>"h"</i>:
+</code><code id="L1091"><span class="ln">1091</span> x += +res[i][len<span class="s"> - </span><span class="d">1</span>];
+</code><code id="L1092"><span class="ln">1092</span> <b>break</b>;
+</code><code id="L1093"><span class="ln">1093</span> <b>case</b> <i>"v"</i>:
+</code><code id="L1094"><span class="ln">1094</span> y += +res[i][len<span class="s"> - </span><span class="d">1</span>];
+</code><code id="L1095"><span class="ln">1095</span> <b>break</b>;
+</code><code id="L1096"><span class="ln">1096</span> <b>default</b>:
+</code><code id="L1097"><span class="ln">1097</span> x += +res[i][len<span class="s"> - </span><span class="d">2</span>];
+</code><code id="L1098"><span class="ln">1098</span> y += +res[i][len<span class="s"> - </span><span class="d">1</span>];
+</code><code id="L1099"><span class="ln">1099</span> }
+</code><code id="L1100"><span class="ln">1100</span> }
+</code><code id="L1101"><span class="ln">1101</span> res.toString<span class="s"> = </span>R._path2string;
+</code><code id="L1102"><span class="ln">1102</span> <b>return</b> res;
+</code><code id="L1103"><span class="ln">1103</span> }, <span class="d">0</span>, pathClone),
+</code><code id="L1104"><span class="ln">1104</span> pathToAbsolute<span class="s"> = </span>cacher(<b>function</b> (pathArray) {
+</code><code id="L1105"><span class="ln">1105</span> <b>if</b> (!R.is(pathArray, array)<span class="s"> || </span>!R.is(pathArray<span class="s"> && </span>pathArray[<span class="d">0</span>], array)) { <span class="c">// rough assumption</span>
+</code><code id="L1106"><span class="ln">1106</span> pathArray<span class="s"> = </span>R.parsePathString(pathArray);
+</code><code id="L1107"><span class="ln">1107</span> }
+</code><code id="L1108"><span class="ln">1108</span> <b>var</b> res<span class="s"> = </span>[],
+</code><code id="L1109"><span class="ln">1109</span> x<span class="s"> = </span><span class="d">0</span>,
+</code><code id="L1110"><span class="ln">1110</span> y<span class="s"> = </span><span class="d">0</span>,
+</code><code id="L1111"><span class="ln">1111</span> mx<span class="s"> = </span><span class="d">0</span>,
+</code><code id="L1112"><span class="ln">1112</span> my<span class="s"> = </span><span class="d">0</span>,
+</code><code id="L1113"><span class="ln">1113</span> start<span class="s"> = </span><span class="d">0</span>;
+</code><code id="L1114"><span class="ln">1114</span> <b>if</b> (pathArray[<span class="d">0</span>][<span class="d">0</span>]<span class="s"> == </span><i>"M"</i>) {
+</code><code id="L1115"><span class="ln">1115</span> x<span class="s"> = </span>+pathArray[<span class="d">0</span>][<span class="d">1</span>];
+</code><code id="L1116"><span class="ln">1116</span> y<span class="s"> = </span>+pathArray[<span class="d">0</span>][<span class="d">2</span>];
+</code><code id="L1117"><span class="ln">1117</span> mx<span class="s"> = </span>x;
+</code><code id="L1118"><span class="ln">1118</span> my<span class="s"> = </span>y;
+</code><code id="L1119"><span class="ln">1119</span> start++;
+</code><code id="L1120"><span class="ln">1120</span> res[<span class="d">0</span>]<span class="s"> = </span>[<i>"M"</i>, x, y];
+</code><code id="L1121"><span class="ln">1121</span> }
+</code><code id="L1122"><span class="ln">1122</span> <b>for</b> (<b>var</b> i<span class="s"> = </span>start, ii<span class="s"> = </span>pathArray.length; i < ii; i++) {
+</code><code id="L1123"><span class="ln">1123</span> <b>var</b> r<span class="s"> = </span>res[i]<span class="s"> = </span>[],
+</code><code id="L1124"><span class="ln">1124</span> pa<span class="s"> = </span>pathArray[i];
+</code><code id="L1125"><span class="ln">1125</span> <b>if</b> (pa[<span class="d">0</span>] != upperCase.call(pa[<span class="d">0</span>])) {
+</code><code id="L1126"><span class="ln">1126</span> r[<span class="d">0</span>]<span class="s"> = </span>upperCase.call(pa[<span class="d">0</span>]);
+</code><code id="L1127"><span class="ln">1127</span> <b>switch</b> (r[<span class="d">0</span>]) {
+</code><code id="L1128"><span class="ln">1128</span> <b>case</b> <i>"A"</i>:
+</code><code id="L1129"><span class="ln">1129</span> r[<span class="d">1</span>]<span class="s"> = </span>pa[<span class="d">1</span>];
+</code><code id="L1130"><span class="ln">1130</span> r[<span class="d">2</span>]<span class="s"> = </span>pa[<span class="d">2</span>];
+</code><code id="L1131"><span class="ln">1131</span> r[<span class="d">3</span>]<span class="s"> = </span>pa[<span class="d">3</span>];
+</code><code id="L1132"><span class="ln">1132</span> r[<span class="d">4</span>]<span class="s"> = </span>pa[<span class="d">4</span>];
+</code><code id="L1133"><span class="ln">1133</span> r[<span class="d">5</span>]<span class="s"> = </span>pa[<span class="d">5</span>];
+</code><code id="L1134"><span class="ln">1134</span> r[<span class="d">6</span>]<span class="s"> = </span>+(pa[<span class="d">6</span>]<span class="s"> + </span>x);
+</code><code id="L1135"><span class="ln">1135</span> r[<span class="d">7</span>]<span class="s"> = </span>+(pa[<span class="d">7</span>]<span class="s"> + </span>y);
+</code><code id="L1136"><span class="ln">1136</span> <b>break</b>;
+</code><code id="L1137"><span class="ln">1137</span> <b>case</b> <i>"V"</i>:
+</code><code id="L1138"><span class="ln">1138</span> r[<span class="d">1</span>]<span class="s"> = </span>+pa[<span class="d">1</span>]<span class="s"> + </span>y;
+</code><code id="L1139"><span class="ln">1139</span> <b>break</b>;
+</code><code id="L1140"><span class="ln">1140</span> <b>case</b> <i>"H"</i>:
+</code><code id="L1141"><span class="ln">1141</span> r[<span class="d">1</span>]<span class="s"> = </span>+pa[<span class="d">1</span>]<span class="s"> + </span>x;
+</code><code id="L1142"><span class="ln">1142</span> <b>break</b>;
+</code><code id="L1143"><span class="ln">1143</span> <b>case</b> <i>"M"</i>:
+</code><code id="L1144"><span class="ln">1144</span> mx<span class="s"> = </span>+pa[<span class="d">1</span>]<span class="s"> + </span>x;
+</code><code id="L1145"><span class="ln">1145</span> my<span class="s"> = </span>+pa[<span class="d">2</span>]<span class="s"> + </span>y;
+</code><code id="L1146"><span class="ln">1146</span> <b>default</b>:
+</code><code id="L1147"><span class="ln">1147</span> <b>for</b> (<b>var</b> j<span class="s"> = </span><span class="d">1</span>, jj<span class="s"> = </span>pa.length; j < jj; j++) {
+</code><code id="L1148"><span class="ln">1148</span> r[j]<span class="s"> = </span>+pa[j]<span class="s"> + </span>((j<span class="s"> % </span><span class="d">2</span>) ? x : y);
+</code><code id="L1149"><span class="ln">1149</span> }
+</code><code id="L1150"><span class="ln">1150</span> }
+</code><code id="L1151"><span class="ln">1151</span> } <b>else</b> {
+</code><code id="L1152"><span class="ln">1152</span> <b>for</b> (<b>var</b> k<span class="s"> = </span><span class="d">0</span>, kk<span class="s"> = </span>pa.length; k < kk; k++) {
+</code><code id="L1153"><span class="ln">1153</span> res[i][k]<span class="s"> = </span>pa[k];
+</code><code id="L1154"><span class="ln">1154</span> }
+</code><code id="L1155"><span class="ln">1155</span> }
+</code><code id="L1156"><span class="ln">1156</span> <b>switch</b> (r[<span class="d">0</span>]) {
+</code><code id="L1157"><span class="ln">1157</span> <b>case</b> <i>"Z"</i>:
+</code><code id="L1158"><span class="ln">1158</span> x<span class="s"> = </span>mx;
+</code><code id="L1159"><span class="ln">1159</span> y<span class="s"> = </span>my;
+</code><code id="L1160"><span class="ln">1160</span> <b>break</b>;
+</code><code id="L1161"><span class="ln">1161</span> <b>case</b> <i>"H"</i>:
+</code><code id="L1162"><span class="ln">1162</span> x<span class="s"> = </span>r[<span class="d">1</span>];
+</code><code id="L1163"><span class="ln">1163</span> <b>break</b>;
+</code><code id="L1164"><span class="ln">1164</span> <b>case</b> <i>"V"</i>:
+</code><code id="L1165"><span class="ln">1165</span> y<span class="s"> = </span>r[<span class="d">1</span>];
+</code><code id="L1166"><span class="ln">1166</span> <b>break</b>;
+</code><code id="L1167"><span class="ln">1167</span> <b>case</b> <i>"M"</i>:
+</code><code id="L1168"><span class="ln">1168</span> mx<span class="s"> = </span>res[i][res[i].length<span class="s"> - </span><span class="d">2</span>];
+</code><code id="L1169"><span class="ln">1169</span> my<span class="s"> = </span>res[i][res[i].length<span class="s"> - </span><span class="d">1</span>];
+</code><code id="L1170"><span class="ln">1170</span> <b>default</b>:
+</code><code id="L1171"><span class="ln">1171</span> x<span class="s"> = </span>res[i][res[i].length<span class="s"> - </span><span class="d">2</span>];
+</code><code id="L1172"><span class="ln">1172</span> y<span class="s"> = </span>res[i][res[i].length<span class="s"> - </span><span class="d">1</span>];
+</code><code id="L1173"><span class="ln">1173</span> }
+</code><code id="L1174"><span class="ln">1174</span> }
+</code><code id="L1175"><span class="ln">1175</span> res.toString<span class="s"> = </span>R._path2string;
+</code><code id="L1176"><span class="ln">1176</span> <b>return</b> res;
+</code><code id="L1177"><span class="ln">1177</span> }, <b>null</b>, pathClone),
+</code><code id="L1178"><span class="ln">1178</span> l2c<span class="s"> = </span><b>function</b> (x1, y1, x2, y2) {
+</code><code id="L1179"><span class="ln">1179</span> <b>return</b> [x1, y1, x2, y2, x2, y2];
+</code><code id="L1180"><span class="ln">1180</span> },
+</code><code id="L1181"><span class="ln">1181</span> q2c<span class="s"> = </span><b>function</b> (x1, y1, ax, ay, x2, y2) {
+</code><code id="L1182"><span class="ln">1182</span> <b>var</b> _13<span class="s"> = </span><span class="d">1</span><span class="s"> / </span><span class="d">3</span>,
+</code><code id="L1183"><span class="ln">1183</span> _23<span class="s"> = </span><span class="d">2</span><span class="s"> / </span><span class="d">3</span>;
+</code><code id="L1184"><span class="ln">1184</span> <b>return</b> [
+</code><code id="L1185"><span class="ln">1185</span> _13<span class="s"> * </span>x1<span class="s"> + </span>_23<span class="s"> * </span>ax,
+</code><code id="L1186"><span class="ln">1186</span> _13<span class="s"> * </span>y1<span class="s"> + </span>_23<span class="s"> * </span>ay,
+</code><code id="L1187"><span class="ln">1187</span> _13<span class="s"> * </span>x2<span class="s"> + </span>_23<span class="s"> * </span>ax,
+</code><code id="L1188"><span class="ln">1188</span> _13<span class="s"> * </span>y2<span class="s"> + </span>_23<span class="s"> * </span>ay,
+</code><code id="L1189"><span class="ln">1189</span> x2,
+</code><code id="L1190"><span class="ln">1190</span> y2
+</code><code id="L1191"><span class="ln">1191</span> ];
+</code><code id="L1192"><span class="ln">1192</span> },
+</code><code id="L1193"><span class="ln">1193</span> a2c<span class="s"> = </span><b>function</b> (x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {
+</code><code id="L1194"><span class="ln">1194</span> <span class="c">// <b>for</b> more information of where <b>this</b> math came from visit:</span>
+</code><code id="L1195"><span class="ln">1195</span> <span class="c">// http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes</span>
+</code><code id="L1196"><span class="ln">1196</span> <b>var</b> _120<span class="s"> = </span>PI<span class="s"> * </span><span class="d">120</span><span class="s"> / </span><span class="d">180</span>,
+</code><code id="L1197"><span class="ln">1197</span> rad<span class="s"> = </span>PI<span class="s"> / </span><span class="d">180</span><span class="s"> * </span>(+angle<span class="s"> || </span><span class="d">0</span>),
+</code><code id="L1198"><span class="ln">1198</span> res<span class="s"> = </span>[],
+</code><code id="L1199"><span class="ln">1199</span> xy,
+</code><code id="L1200"><span class="ln">1200</span> rotate<span class="s"> = </span>cacher(<b>function</b> (x, y, rad) {
+</code><code id="L1201"><span class="ln">1201</span> <b>var</b> X<span class="s"> = </span>x<span class="s"> * </span>math.cos(rad)<span class="s"> - </span>y<span class="s"> * </span>math.sin(rad),
+</code><code id="L1202"><span class="ln">1202</span> Y<span class="s"> = </span>x<span class="s"> * </span>math.sin(rad)<span class="s"> + </span>y<span class="s"> * </span>math.cos(rad);
+</code><code id="L1203"><span class="ln">1203</span> <b>return</b> {x: X, y: Y};
+</code><code id="L1204"><span class="ln">1204</span> });
+</code><code id="L1205"><span class="ln">1205</span> <b>if</b> (!recursive) {
+</code><code id="L1206"><span class="ln">1206</span> xy<span class="s"> = </span>rotate(x1, y1, -rad);
+</code><code id="L1207"><span class="ln">1207</span> x1<span class="s"> = </span>xy.x;
+</code><code id="L1208"><span class="ln">1208</span> y1<span class="s"> = </span>xy.y;
+</code><code id="L1209"><span class="ln">1209</span> xy<span class="s"> = </span>rotate(x2, y2, -rad);
+</code><code id="L1210"><span class="ln">1210</span> x2<span class="s"> = </span>xy.x;
+</code><code id="L1211"><span class="ln">1211</span> y2<span class="s"> = </span>xy.y;
+</code><code id="L1212"><span class="ln">1212</span> <b>var</b> cos<span class="s"> = </span>math.cos(PI<span class="s"> / </span><span class="d">180</span><span class="s"> * </span>angle),
+</code><code id="L1213"><span class="ln">1213</span> sin<span class="s"> = </span>math.sin(PI<span class="s"> / </span><span class="d">180</span><span class="s"> * </span>angle),
+</code><code id="L1214"><span class="ln">1214</span> x<span class="s"> = </span>(x1<span class="s"> - </span>x2)<span class="s"> / </span><span class="d">2</span>,
+</code><code id="L1215"><span class="ln">1215</span> y<span class="s"> = </span>(y1<span class="s"> - </span>y2)<span class="s"> / </span><span class="d">2</span>;
+</code><code id="L1216"><span class="ln">1216</span> <b>var</b> h<span class="s"> = </span>(x<span class="s"> * </span>x)<span class="s"> / </span>(rx<span class="s"> * </span>rx)<span class="s"> + </span>(y<span class="s"> * </span>y)<span class="s"> / </span>(ry<span class="s"> * </span>ry);
+</code><code id="L1217"><span class="ln">1217</span> <b>if</b> (h > <span class="d">1</span>) {
+</code><code id="L1218"><span class="ln">1218</span> h<span class="s"> = </span>math.sqrt(h);
+</code><code id="L1219"><span class="ln">1219</span> rx<span class="s"> = </span>h<span class="s"> * </span>rx;
+</code><code id="L1220"><span class="ln">1220</span> ry<span class="s"> = </span>h<span class="s"> * </span>ry;
+</code><code id="L1221"><span class="ln">1221</span> }
+</code><code id="L1222"><span class="ln">1222</span> <b>var</b> rx2<span class="s"> = </span>rx<span class="s"> * </span>rx,
+</code><code id="L1223"><span class="ln">1223</span> ry2<span class="s"> = </span>ry<span class="s"> * </span>ry,
+</code><code id="L1224"><span class="ln">1224</span> k<span class="s"> = </span>(large_arc_flag<span class="s"> == </span>sweep_flag ? -<span class="d">1</span> : <span class="d">1</span>) *
+</code><code id="L1225"><span class="ln">1225</span> math.sqrt(abs((rx2<span class="s"> * </span>ry2<span class="s"> - </span>rx2<span class="s"> * </span>y<span class="s"> * </span>y<span class="s"> - </span>ry2<span class="s"> * </span>x<span class="s"> * </span>x)<span class="s"> / </span>(rx2<span class="s"> * </span>y<span class="s"> * </span>y<span class="s"> + </span>ry2<span class="s"> * </span>x<span class="s"> * </span>x))),
+</code><code id="L1226"><span class="ln">1226</span> cx<span class="s"> = </span>k<span class="s"> * </span>rx<span class="s"> * </span>y<span class="s"> / </span>ry<span class="s"> + </span>(x1<span class="s"> + </span>x2)<span class="s"> / </span><span class="d">2</span>,
+</code><code id="L1227"><span class="ln">1227</span> cy<span class="s"> = </span>k<span class="s"> * </span>-ry<span class="s"> * </span>x<span class="s"> / </span>rx<span class="s"> + </span>(y1<span class="s"> + </span>y2)<span class="s"> / </span><span class="d">2</span>,
+</code><code id="L1228"><span class="ln">1228</span> f1<span class="s"> = </span>math.asin(((y1<span class="s"> - </span>cy)<span class="s"> / </span>ry).toFixed(<span class="d">9</span>)),
+</code><code id="L1229"><span class="ln">1229</span> f2<span class="s"> = </span>math.asin(((y2<span class="s"> - </span>cy)<span class="s"> / </span>ry).toFixed(<span class="d">9</span>));
+</code><code id="L1230"><span class="ln">1230</span>
+</code><code id="L1231"><span class="ln">1231</span> f1<span class="s"> = </span>x1 < cx ? PI<span class="s"> - </span>f1 : f1;
+</code><code id="L1232"><span class="ln">1232</span> f2<span class="s"> = </span>x2 < cx ? PI<span class="s"> - </span>f2 : f2;
+</code><code id="L1233"><span class="ln">1233</span> f1 < <span class="d">0</span><span class="s"> && </span>(f1<span class="s"> = </span>PI<span class="s"> * </span><span class="d">2</span><span class="s"> + </span>f1);
+</code><code id="L1234"><span class="ln">1234</span> f2 < <span class="d">0</span><span class="s"> && </span>(f2<span class="s"> = </span>PI<span class="s"> * </span><span class="d">2</span><span class="s"> + </span>f2);
+</code><code id="L1235"><span class="ln">1235</span> <b>if</b> (sweep_flag<span class="s"> && </span>f1 > f2) {
+</code><code id="L1236"><span class="ln">1236</span> f1<span class="s"> = </span>f1<span class="s"> - </span>PI<span class="s"> * </span><span class="d">2</span>;
+</code><code id="L1237"><span class="ln">1237</span> }
+</code><code id="L1238"><span class="ln">1238</span> <b>if</b> (!sweep_flag<span class="s"> && </span>f2 > f1) {
+</code><code id="L1239"><span class="ln">1239</span> f2<span class="s"> = </span>f2<span class="s"> - </span>PI<span class="s"> * </span><span class="d">2</span>;
+</code><code id="L1240"><span class="ln">1240</span> }
+</code><code id="L1241"><span class="ln">1241</span> } <b>else</b> {
+</code><code id="L1242"><span class="ln">1242</span> f1<span class="s"> = </span>recursive[<span class="d">0</span>];
+</code><code id="L1243"><span class="ln">1243</span> f2<span class="s"> = </span>recursive[<span class="d">1</span>];
+</code><code id="L1244"><span class="ln">1244</span> cx<span class="s"> = </span>recursive[<span class="d">2</span>];
+</code><code id="L1245"><span class="ln">1245</span> cy<span class="s"> = </span>recursive[<span class="d">3</span>];
+</code><code id="L1246"><span class="ln">1246</span> }
+</code><code id="L1247"><span class="ln">1247</span> <b>var</b> df<span class="s"> = </span>f2<span class="s"> - </span>f1;
+</code><code id="L1248"><span class="ln">1248</span> <b>if</b> (abs(df) > _120) {
+</code><code id="L1249"><span class="ln">1249</span> <b>var</b> f2old<span class="s"> = </span>f2,
+</code><code id="L1250"><span class="ln">1250</span> x2old<span class="s"> = </span>x2,
+</code><code id="L1251"><span class="ln">1251</span> y2old<span class="s"> = </span>y2;
+</code><code id="L1252"><span class="ln">1252</span> f2<span class="s"> = </span>f1<span class="s"> + </span>_120<span class="s"> * </span>(sweep_flag<span class="s"> && </span>f2 > f1 ? <span class="d">1</span> : -<span class="d">1</span>);
+</code><code id="L1253"><span class="ln">1253</span> x2<span class="s"> = </span>cx<span class="s"> + </span>rx<span class="s"> * </span>math.cos(f2);
+</code><code id="L1254"><span class="ln">1254</span> y2<span class="s"> = </span>cy<span class="s"> + </span>ry<span class="s"> * </span>math.sin(f2);
+</code><code id="L1255"><span class="ln">1255</span> res<span class="s"> = </span>a2c(x2, y2, rx, ry, angle, <span class="d">0</span>, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]);
+</code><code id="L1256"><span class="ln">1256</span> }
+</code><code id="L1257"><span class="ln">1257</span> df<span class="s"> = </span>f2<span class="s"> - </span>f1;
+</code><code id="L1258"><span class="ln">1258</span> <b>var</b> c1<span class="s"> = </span>math.cos(f1),
+</code><code id="L1259"><span class="ln">1259</span> s1<span class="s"> = </span>math.sin(f1),
+</code><code id="L1260"><span class="ln">1260</span> c2<span class="s"> = </span>math.cos(f2),
+</code><code id="L1261"><span class="ln">1261</span> s2<span class="s"> = </span>math.sin(f2),
+</code><code id="L1262"><span class="ln">1262</span> t<span class="s"> = </span>math.tan(df<span class="s"> / </span><span class="d">4</span>),
+</code><code id="L1263"><span class="ln">1263</span> hx<span class="s"> = </span><span class="d">4</span><span class="s"> / </span><span class="d">3</span><span class="s"> * </span>rx<span class="s"> * </span>t,
+</code><code id="L1264"><span class="ln">1264</span> hy<span class="s"> = </span><span class="d">4</span><span class="s"> / </span><span class="d">3</span><span class="s"> * </span>ry<span class="s"> * </span>t,
+</code><code id="L1265"><span class="ln">1265</span> m1<span class="s"> = </span>[x1, y1],
+</code><code id="L1266"><span class="ln">1266</span> m2<span class="s"> = </span>[x1<span class="s"> + </span>hx<span class="s"> * </span>s1, y1<span class="s"> - </span>hy<span class="s"> * </span>c1],
+</code><code id="L1267"><span class="ln">1267</span> m3<span class="s"> = </span>[x2<span class="s"> + </span>hx<span class="s"> * </span>s2, y2<span class="s"> - </span>hy<span class="s"> * </span>c2],
+</code><code id="L1268"><span class="ln">1268</span> m4<span class="s"> = </span>[x2, y2];
+</code><code id="L1269"><span class="ln">1269</span> m2[<span class="d">0</span>]<span class="s"> = </span><span class="d">2</span><span class="s"> * </span>m1[<span class="d">0</span>]<span class="s"> - </span>m2[<span class="d">0</span>];
+</code><code id="L1270"><span class="ln">1270</span> m2[<span class="d">1</span>]<span class="s"> = </span><span class="d">2</span><span class="s"> * </span>m1[<span class="d">1</span>]<span class="s"> - </span>m2[<span class="d">1</span>];
+</code><code id="L1271"><span class="ln">1271</span> <b>if</b> (recursive) {
+</code><code id="L1272"><span class="ln">1272</span> <b>return</b> [m2, m3, m4][concat](res);
+</code><code id="L1273"><span class="ln">1273</span> } <b>else</b> {
+</code><code id="L1274"><span class="ln">1274</span> res<span class="s"> = </span>[m2, m3, m4][concat](res).join().split(<i>","</i>);
+</code><code id="L1275"><span class="ln">1275</span> <b>var</b> newres<span class="s"> = </span>[];
+</code><code id="L1276"><span class="ln">1276</span> <b>for</b> (<b>var</b> i<span class="s"> = </span><span class="d">0</span>, ii<span class="s"> = </span>res.length; i < ii; i++) {
+</code><code id="L1277"><span class="ln">1277</span> newres[i]<span class="s"> = </span>i<span class="s"> % </span><span class="d">2</span> ? rotate(res[i<span class="s"> - </span><span class="d">1</span>], res[i], rad).y : rotate(res[i], res[i<span class="s"> + </span><span class="d">1</span>], rad).x;
+</code><code id="L1278"><span class="ln">1278</span> }
+</code><code id="L1279"><span class="ln">1279</span> <b>return</b> newres;
+</code><code id="L1280"><span class="ln">1280</span> }
+</code><code id="L1281"><span class="ln">1281</span> },
+</code><code id="L1282"><span class="ln">1282</span> findDotAtSegment<span class="s"> = </span><b>function</b> (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {
+</code><code id="L1283"><span class="ln">1283</span> <b>var</b> t1<span class="s"> = </span><span class="d">1</span><span class="s"> - </span>t;
+</code><code id="L1284"><span class="ln">1284</span> <b>return</b> {
+</code><code id="L1285"><span class="ln">1285</span> x: pow(t1, <span class="d">3</span>)<span class="s"> * </span>p1x<span class="s"> + </span>pow(t1, <span class="d">2</span>)<span class="s"> * </span><span class="d">3</span><span class="s"> * </span>t<span class="s"> * </span>c1x<span class="s"> + </span>t1<span class="s"> * </span><span class="d">3</span><span class="s"> * </span>t<span class="s"> * </span>t<span class="s"> * </span>c2x<span class="s"> + </span>pow(t, <span class="d">3</span>)<span class="s"> * </span>p2x,
+</code><code id="L1286"><span class="ln">1286</span> y: pow(t1, <span class="d">3</span>)<span class="s"> * </span>p1y<span class="s"> + </span>pow(t1, <span class="d">2</span>)<span class="s"> * </span><span class="d">3</span><span class="s"> * </span>t<span class="s"> * </span>c1y<span class="s"> + </span>t1<span class="s"> * </span><span class="d">3</span><span class="s"> * </span>t<span class="s"> * </span>t<span class="s"> * </span>c2y<span class="s"> + </span>pow(t, <span class="d">3</span>)<span class="s"> * </span>p2y
+</code><code id="L1287"><span class="ln">1287</span> };
+</code><code id="L1288"><span class="ln">1288</span> },
+</code><code id="L1289"><span class="ln">1289</span> curveDim<span class="s"> = </span>cacher(<b>function</b> (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {
+</code><code id="L1290"><span class="ln">1290</span> <b>var</b> a<span class="s"> = </span>(c2x<span class="s"> - </span><span class="d">2</span><span class="s"> * </span>c1x<span class="s"> + </span>p1x)<span class="s"> - </span>(p2x<span class="s"> - </span><span class="d">2</span><span class="s"> * </span>c2x<span class="s"> + </span>c1x),
+</code><code id="L1291"><span class="ln">1291</span> b<span class="s"> = </span><span class="d">2</span><span class="s"> * </span>(c1x<span class="s"> - </span>p1x)<span class="s"> - </span><span class="d">2</span><span class="s"> * </span>(c2x<span class="s"> - </span>c1x),
+</code><code id="L1292"><span class="ln">1292</span> c<span class="s"> = </span>p1x<span class="s"> - </span>c1x,
+</code><code id="L1293"><span class="ln">1293</span> t1<span class="s"> = </span>(-b<span class="s"> + </span>math.sqrt(b<span class="s"> * </span>b<span class="s"> - </span><span class="d">4</span><span class="s"> * </span>a<span class="s"> * </span>c))<span class="s"> / </span><span class="d">2</span><span class="s"> / </span>a,
+</code><code id="L1294"><span class="ln">1294</span> t2<span class="s"> = </span>(-b<span class="s"> - </span>math.sqrt(b<span class="s"> * </span>b<span class="s"> - </span><span class="d">4</span><span class="s"> * </span>a<span class="s"> * </span>c))<span class="s"> / </span><span class="d">2</span><span class="s"> / </span>a,
+</code><code id="L1295"><span class="ln">1295</span> y<span class="s"> = </span>[p1y, p2y],
+</code><code id="L1296"><span class="ln">1296</span> x<span class="s"> = </span>[p1x, p2x],
+</code><code id="L1297"><span class="ln">1297</span> dot;
+</code><code id="L1298"><span class="ln">1298</span> abs(t1) > <i>"<span class="d">1e12</span>"</i><span class="s"> && </span>(t1<span class="s"> = </span><span class="d">.5</span>);
+</code><code id="L1299"><span class="ln">1299</span> abs(t2) > <i>"<span class="d">1e12</span>"</i><span class="s"> && </span>(t2<span class="s"> = </span><span class="d">.5</span>);
+</code><code id="L1300"><span class="ln">1300</span> <b>if</b> (t1 > <span class="d">0</span><span class="s"> && </span>t1 < <span class="d">1</span>) {
+</code><code id="L1301"><span class="ln">1301</span> dot<span class="s"> = </span>findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);
+</code><code id="L1302"><span class="ln">1302</span> x.push(dot.x);
+</code><code id="L1303"><span class="ln">1303</span> y.push(dot.y);
+</code><code id="L1304"><span class="ln">1304</span> }
+</code><code id="L1305"><span class="ln">1305</span> <b>if</b> (t2 > <span class="d">0</span><span class="s"> && </span>t2 < <span class="d">1</span>) {
+</code><code id="L1306"><span class="ln">1306</span> dot<span class="s"> = </span>findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);
+</code><code id="L1307"><span class="ln">1307</span> x.push(dot.x);
+</code><code id="L1308"><span class="ln">1308</span> y.push(dot.y);
+</code><code id="L1309"><span class="ln">1309</span> }
+</code><code id="L1310"><span class="ln">1310</span> a<span class="s"> = </span>(c2y<span class="s"> - </span><span class="d">2</span><span class="s"> * </span>c1y<span class="s"> + </span>p1y)<span class="s"> - </span>(p2y<span class="s"> - </span><span class="d">2</span><span class="s"> * </span>c2y<span class="s"> + </span>c1y);
+</code><code id="L1311"><span class="ln">1311</span> b<span class="s"> = </span><span class="d">2</span><span class="s"> * </span>(c1y<span class="s"> - </span>p1y)<span class="s"> - </span><span class="d">2</span><span class="s"> * </span>(c2y<span class="s"> - </span>c1y);
+</code><code id="L1312"><span class="ln">1312</span> c<span class="s"> = </span>p1y<span class="s"> - </span>c1y;
+</code><code id="L1313"><span class="ln">1313</span> t1<span class="s"> = </span>(-b<span class="s"> + </span>math.sqrt(b<span class="s"> * </span>b<span class="s"> - </span><span class="d">4</span><span class="s"> * </span>a<span class="s"> * </span>c))<span class="s"> / </span><span class="d">2</span><span class="s"> / </span>a;
+</code><code id="L1314"><span class="ln">1314</span> t2<span class="s"> = </span>(-b<span class="s"> - </span>math.sqrt(b<span class="s"> * </span>b<span class="s"> - </span><span class="d">4</span><span class="s"> * </span>a<span class="s"> * </span>c))<span class="s"> / </span><span class="d">2</span><span class="s"> / </span>a;
+</code><code id="L1315"><span class="ln">1315</span> abs(t1) > <i>"<span class="d">1e12</span>"</i><span class="s"> && </span>(t1<span class="s"> = </span><span class="d">.5</span>);
+</code><code id="L1316"><span class="ln">1316</span> abs(t2) > <i>"<span class="d">1e12</span>"</i><span class="s"> && </span>(t2<span class="s"> = </span><span class="d">.5</span>);
+</code><code id="L1317"><span class="ln">1317</span> <b>if</b> (t1 > <span class="d">0</span><span class="s"> && </span>t1 < <span class="d">1</span>) {
+</code><code id="L1318"><span class="ln">1318</span> dot<span class="s"> = </span>findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);
+</code><code id="L1319"><span class="ln">1319</span> x.push(dot.x);
+</code><code id="L1320"><span class="ln">1320</span> y.push(dot.y);
+</code><code id="L1321"><span class="ln">1321</span> }
+</code><code id="L1322"><span class="ln">1322</span> <b>if</b> (t2 > <span class="d">0</span><span class="s"> && </span>t2 < <span class="d">1</span>) {
+</code><code id="L1323"><span class="ln">1323</span> dot<span class="s"> = </span>findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);
+</code><code id="L1324"><span class="ln">1324</span> x.push(dot.x);
+</code><code id="L1325"><span class="ln">1325</span> y.push(dot.y);
+</code><code id="L1326"><span class="ln">1326</span> }
+</code><code id="L1327"><span class="ln">1327</span> <b>return</b> {
+</code><code id="L1328"><span class="ln">1328</span> min: {x: mmin[apply](<span class="d">0</span>, x), y: mmin[apply](<span class="d">0</span>, y)},
+</code><code id="L1329"><span class="ln">1329</span> max: {x: mmax[apply](<span class="d">0</span>, x), y: mmax[apply](<span class="d">0</span>, y)}
+</code><code id="L1330"><span class="ln">1330</span> };
+</code><code id="L1331"><span class="ln">1331</span> }),
+</code><code id="L1332"><span class="ln">1332</span> path2curve<span class="s"> = </span>cacher(<b>function</b> (path, path2) {
+</code><code id="L1333"><span class="ln">1333</span> <b>var</b> p<span class="s"> = </span>pathToAbsolute(path),
+</code><code id="L1334"><span class="ln">1334</span> p2<span class="s"> = </span>path2<span class="s"> && </span>pathToAbsolute(path2),
+</code><code id="L1335"><span class="ln">1335</span> attrs<span class="s"> = </span>{x: <span class="d">0</span>, y: <span class="d">0</span>, bx: <span class="d">0</span>, by: <span class="d">0</span>, X: <span class="d">0</span>, Y: <span class="d">0</span>, qx: <b>null</b>, qy: <b>null</b>},
+</code><code id="L1336"><span class="ln">1336</span> attrs2<span class="s"> = </span>{x: <span class="d">0</span>, y: <span class="d">0</span>, bx: <span class="d">0</span>, by: <span class="d">0</span>, X: <span class="d">0</span>, Y: <span class="d">0</span>, qx: <b>null</b>, qy: <b>null</b>},
+</code><code id="L1337"><span class="ln">1337</span> processPath<span class="s"> = </span><b>function</b> (path, d) {
+</code><code id="L1338"><span class="ln">1338</span> <b>var</b> nx, ny;
+</code><code id="L1339"><span class="ln">1339</span> <b>if</b> (!path) {
+</code><code id="L1340"><span class="ln">1340</span> <b>return</b> [<i>"C"</i>, d.x, d.y, d.x, d.y, d.x, d.y];
+</code><code id="L1341"><span class="ln">1341</span> }
+</code><code id="L1342"><span class="ln">1342</span> !(path[<span class="d">0</span>] <b>in</b> {T:<span class="d">1</span>, Q:<span class="d">1</span>})<span class="s"> && </span>(d.qx<span class="s"> = </span>d.qy<span class="s"> = </span><b>null</b>);
+</code><code id="L1343"><span class="ln">1343</span> <b>switch</b> (path[<span class="d">0</span>]) {
+</code><code id="L1344"><span class="ln">1344</span> <b>case</b> <i>"M"</i>:
+</code><code id="L1345"><span class="ln">1345</span> d.X<span class="s"> = </span>path[<span class="d">1</span>];
+</code><code id="L1346"><span class="ln">1346</span> d.Y<span class="s"> = </span>path[<span class="d">2</span>];
+</code><code id="L1347"><span class="ln">1347</span> <b>break</b>;
+</code><code id="L1348"><span class="ln">1348</span> <b>case</b> <i>"A"</i>:
+</code><code id="L1349"><span class="ln">1349</span> path<span class="s"> = </span>[<i>"C"</i>][concat](a2c[apply](<span class="d">0</span>, [d.x, d.y][concat](path.slice(<span class="d">1</span>))));
+</code><code id="L1350"><span class="ln">1350</span> <b>break</b>;
+</code><code id="L1351"><span class="ln">1351</span> <b>case</b> <i>"S"</i>:
+</code><code id="L1352"><span class="ln">1352</span> nx<span class="s"> = </span>d.x<span class="s"> + </span>(d.x<span class="s"> - </span>(d.bx<span class="s"> || </span>d.x));
+</code><code id="L1353"><span class="ln">1353</span> ny<span class="s"> = </span>d.y<span class="s"> + </span>(d.y<span class="s"> - </span>(d.by<span class="s"> || </span>d.y));
+</code><code id="L1354"><span class="ln">1354</span> path<span class="s"> = </span>[<i>"C"</i>, nx, ny][concat](path.slice(<span class="d">1</span>));
+</code><code id="L1355"><span class="ln">1355</span> <b>break</b>;
+</code><code id="L1356"><span class="ln">1356</span> <b>case</b> <i>"T"</i>:
+</code><code id="L1357"><span class="ln">1357</span> d.qx<span class="s"> = </span>d.x<span class="s"> + </span>(d.x<span class="s"> - </span>(d.qx<span class="s"> || </span>d.x));
+</code><code id="L1358"><span class="ln">1358</span> d.qy<span class="s"> = </span>d.y<span class="s"> + </span>(d.y<span class="s"> - </span>(d.qy<span class="s"> || </span>d.y));
+</code><code id="L1359"><span class="ln">1359</span> path<span class="s"> = </span>[<i>"C"</i>][concat](q2c(d.x, d.y, d.qx, d.qy, path[<span class="d">1</span>], path[<span class="d">2</span>]));
+</code><code id="L1360"><span class="ln">1360</span> <b>break</b>;
+</code><code id="L1361"><span class="ln">1361</span> <b>case</b> <i>"Q"</i>:
+</code><code id="L1362"><span class="ln">1362</span> d.qx<span class="s"> = </span>path[<span class="d">1</span>];
+</code><code id="L1363"><span class="ln">1363</span> d.qy<span class="s"> = </span>path[<span class="d">2</span>];
+</code><code id="L1364"><span class="ln">1364</span> path<span class="s"> = </span>[<i>"C"</i>][concat](q2c(d.x, d.y, path[<span class="d">1</span>], path[<span class="d">2</span>], path[<span class="d">3</span>], path[<span class="d">4</span>]));
+</code><code id="L1365"><span class="ln">1365</span> <b>break</b>;
+</code><code id="L1366"><span class="ln">1366</span> <b>case</b> <i>"L"</i>:
+</code><code id="L1367"><span class="ln">1367</span> path<span class="s"> = </span>[<i>"C"</i>][concat](l2c(d.x, d.y, path[<span class="d">1</span>], path[<span class="d">2</span>]));
+</code><code id="L1368"><span class="ln">1368</span> <b>break</b>;
+</code><code id="L1369"><span class="ln">1369</span> <b>case</b> <i>"H"</i>:
+</code><code id="L1370"><span class="ln">1370</span> path<span class="s"> = </span>[<i>"C"</i>][concat](l2c(d.x, d.y, path[<span class="d">1</span>], d.y));
+</code><code id="L1371"><span class="ln">1371</span> <b>break</b>;
+</code><code id="L1372"><span class="ln">1372</span> <b>case</b> <i>"V"</i>:
+</code><code id="L1373"><span class="ln">1373</span> path<span class="s"> = </span>[<i>"C"</i>][concat](l2c(d.x, d.y, d.x, path[<span class="d">1</span>]));
+</code><code id="L1374"><span class="ln">1374</span> <b>break</b>;
+</code><code id="L1375"><span class="ln">1375</span> <b>case</b> <i>"Z"</i>:
+</code><code id="L1376"><span class="ln">1376</span> path<span class="s"> = </span>[<i>"C"</i>][concat](l2c(d.x, d.y, d.X, d.Y));
+</code><code id="L1377"><span class="ln">1377</span> <b>break</b>;
+</code><code id="L1378"><span class="ln">1378</span> }
+</code><code id="L1379"><span class="ln">1379</span> <b>return</b> path;
+</code><code id="L1380"><span class="ln">1380</span> },
+</code><code id="L1381"><span class="ln">1381</span> fixArc<span class="s"> = </span><b>function</b> (pp, i) {
+</code><code id="L1382"><span class="ln">1382</span> <b>if</b> (pp[i].length > <span class="d">7</span>) {
+</code><code id="L1383"><span class="ln">1383</span> pp[i].shift();
+</code><code id="L1384"><span class="ln">1384</span> <b>var</b> pi<span class="s"> = </span>pp[i];
+</code><code id="L1385"><span class="ln">1385</span> <b>while</b> (pi.length) {
+</code><code id="L1386"><span class="ln">1386</span> pp.splice(i++, <span class="d">0</span>, [<i>"C"</i>][concat](pi.splice(<span class="d">0</span>, <span class="d">6</span>)));
+</code><code id="L1387"><span class="ln">1387</span> }
+</code><code id="L1388"><span class="ln">1388</span> pp.splice(i, <span class="d">1</span>);
+</code><code id="L1389"><span class="ln">1389</span> ii<span class="s"> = </span>mmax(p.length, p2<span class="s"> && </span>p2.length<span class="s"> || </span><span class="d">0</span>);
+</code><code id="L1390"><span class="ln">1390</span> }
+</code><code id="L1391"><span class="ln">1391</span> },
+</code><code id="L1392"><span class="ln">1392</span> fixM<span class="s"> = </span><b>function</b> (path1, path2, a1, a2, i) {
+</code><code id="L1393"><span class="ln">1393</span> <b>if</b> (path1<span class="s"> && </span>path2<span class="s"> && </span>path1[i][<span class="d">0</span>]<span class="s"> == </span><i>"M"</i><span class="s"> && </span>path2[i][<span class="d">0</span>] != <i>"M"</i>) {
+</code><code id="L1394"><span class="ln">1394</span> path2.splice(i, <span class="d">0</span>, [<i>"M"</i>, a2.x, a2.y]);
+</code><code id="L1395"><span class="ln">1395</span> a1.bx<span class="s"> = </span><span class="d">0</span>;
+</code><code id="L1396"><span class="ln">1396</span> a1.by<span class="s"> = </span><span class="d">0</span>;
+</code><code id="L1397"><span class="ln">1397</span> a1.x<span class="s"> = </span>path1[i][<span class="d">1</span>];
+</code><code id="L1398"><span class="ln">1398</span> a1.y<span class="s"> = </span>path1[i][<span class="d">2</span>];
+</code><code id="L1399"><span class="ln">1399</span> ii<span class="s"> = </span>mmax(p.length, p2<span class="s"> && </span>p2.length<span class="s"> || </span><span class="d">0</span>);
+</code><code id="L1400"><span class="ln">1400</span> }
+</code><code id="L1401"><span class="ln">1401</span> };
+</code><code id="L1402"><span class="ln">1402</span> <b>for</b> (<b>var</b> i<span class="s"> = </span><span class="d">0</span>, ii<span class="s"> = </span>mmax(p.length, p2<span class="s"> && </span>p2.length<span class="s"> || </span><span class="d">0</span>); i < ii; i++) {
+</code><code id="L1403"><span class="ln">1403</span> p[i]<span class="s"> = </span>processPath(p[i], attrs);
+</code><code id="L1404"><span class="ln">1404</span> fixArc(p, i);
+</code><code id="L1405"><span class="ln">1405</span> p2<span class="s"> && </span>(p2[i]<span class="s"> = </span>processPath(p2[i], attrs2));
+</code><code id="L1406"><span class="ln">1406</span> p2<span class="s"> && </span>fixArc(p2, i);
+</code><code id="L1407"><span class="ln">1407</span> fixM(p, p2, attrs, attrs2, i);
+</code><code id="L1408"><span class="ln">1408</span> fixM(p2, p, attrs2, attrs, i);
+</code><code id="L1409"><span class="ln">1409</span> <b>var</b> seg<span class="s"> = </span>p[i],
+</code><code id="L1410"><span class="ln">1410</span> seg2<span class="s"> = </span>p2<span class="s"> && </span>p2[i],
+</code><code id="L1411"><span class="ln">1411</span> seglen<span class="s"> = </span>seg.length,
+</code><code id="L1412"><span class="ln">1412</span> seg2len<span class="s"> = </span>p2<span class="s"> && </span>seg2.length;
+</code><code id="L1413"><span class="ln">1413</span> attrs.x<span class="s"> = </span>seg[seglen<span class="s"> - </span><span class="d">2</span>];
+</code><code id="L1414"><span class="ln">1414</span> attrs.y<span class="s"> = </span>seg[seglen<span class="s"> - </span><span class="d">1</span>];
+</code><code id="L1415"><span class="ln">1415</span> attrs.bx<span class="s"> = </span>toFloat(seg[seglen<span class="s"> - </span><span class="d">4</span>])<span class="s"> || </span>attrs.x;
+</code><code id="L1416"><span class="ln">1416</span> attrs.by<span class="s"> = </span>toFloat(seg[seglen<span class="s"> - </span><span class="d">3</span>])<span class="s"> || </span>attrs.y;
+</code><code id="L1417"><span class="ln">1417</span> attrs2.bx<span class="s"> = </span>p2<span class="s"> && </span>(toFloat(seg2[seg2len<span class="s"> - </span><span class="d">4</span>])<span class="s"> || </span>attrs2.x);
+</code><code id="L1418"><span class="ln">1418</span> attrs2.by<span class="s"> = </span>p2<span class="s"> && </span>(toFloat(seg2[seg2len<span class="s"> - </span><span class="d">3</span>])<span class="s"> || </span>attrs2.y);
+</code><code id="L1419"><span class="ln">1419</span> attrs2.x<span class="s"> = </span>p2<span class="s"> && </span>seg2[seg2len<span class="s"> - </span><span class="d">2</span>];
+</code><code id="L1420"><span class="ln">1420</span> attrs2.y<span class="s"> = </span>p2<span class="s"> && </span>seg2[seg2len<span class="s"> - </span><span class="d">1</span>];
+</code><code id="L1421"><span class="ln">1421</span> }
+</code><code id="L1422"><span class="ln">1422</span> <b>return</b> p2 ? [p, p2] : p;
+</code><code id="L1423"><span class="ln">1423</span> }, <b>null</b>, pathClone),
+</code><code id="L1424"><span class="ln">1424</span> parseDots<span class="s"> = </span>cacher(<b>function</b> (gradient) {
+</code><code id="L1425"><span class="ln">1425</span> <b>var</b> dots<span class="s"> = </span>[];
+</code><code id="L1426"><span class="ln">1426</span> <b>for</b> (<b>var</b> i<span class="s"> = </span><span class="d">0</span>, ii<span class="s"> = </span>gradient.length; i < ii; i++) {
+</code><code id="L1427"><span class="ln">1427</span> <b>var</b> dot<span class="s"> = </span>{},
+</code><code id="L1428"><span class="ln">1428</span> par<span class="s"> = </span>gradient[i].match(/^([^:]*):?([\d\.]*)/);
+</code><code id="L1429"><span class="ln">1429</span> dot.color<span class="s"> = </span>R.getRGB(par[<span class="d">1</span>]);
+</code><code id="L1430"><span class="ln">1430</span> <b>if</b> (dot.color.error) {
+</code><code id="L1431"><span class="ln">1431</span> <b>return</b> <b>null</b>;
+</code><code id="L1432"><span class="ln">1432</span> }
+</code><code id="L1433"><span class="ln">1433</span> dot.color<span class="s"> = </span>dot.color.hex;
+</code><code id="L1434"><span class="ln">1434</span> par[<span class="d">2</span>]<span class="s"> && </span>(dot.offset<span class="s"> = </span>par[<span class="d">2</span>]<span class="s"> + </span><i>"%"</i>);
+</code><code id="L1435"><span class="ln">1435</span> dots.push(dot);
+</code><code id="L1436"><span class="ln">1436</span> }
+</code><code id="L1437"><span class="ln">1437</span> <b>for</b> (i<span class="s"> = </span><span class="d">1</span>, ii<span class="s"> = </span>dots.length<span class="s"> - </span><span class="d">1</span>; i < ii; i++) {
+</code><code id="L1438"><span class="ln">1438</span> <b>if</b> (!dots[i].offset) {
+</code><code id="L1439"><span class="ln">1439</span> <b>var</b> start<span class="s"> = </span>toFloat(dots[i<span class="s"> - </span><span class="d">1</span>].offset<span class="s"> || </span><span class="d">0</span>),
+</code><code id="L1440"><span class="ln">1440</span> end<span class="s"> = </span><span class="d">0</span>;
+</code><code id="L1441"><span class="ln">1441</span> <b>for</b> (<b>var</b> j<span class="s"> = </span>i<span class="s"> + </span><span class="d">1</span>; j < ii; j++) {
+</code><code id="L1442"><span class="ln">1442</span> <b>if</b> (dots[j].offset) {
+</code><code id="L1443"><span class="ln">1443</span> end<span class="s"> = </span>dots[j].offset;
+</code><code id="L1444"><span class="ln">1444</span> <b>break</b>;
+</code><code id="L1445"><span class="ln">1445</span> }
+</code><code id="L1446"><span class="ln">1446</span> }
+</code><code id="L1447"><span class="ln">1447</span> <b>if</b> (!end) {
+</code><code id="L1448"><span class="ln">1448</span> end<span class="s"> = </span><span class="d">100</span>;
+</code><code id="L1449"><span class="ln">1449</span> j<span class="s"> = </span>ii;
+</code><code id="L1450"><span class="ln">1450</span> }
+</code><code id="L1451"><span class="ln">1451</span> end<span class="s"> = </span>toFloat(end);
+</code><code id="L1452"><span class="ln">1452</span> <b>var</b> d<span class="s"> = </span>(end<span class="s"> - </span>start)<span class="s"> / </span>(j<span class="s"> - </span>i<span class="s"> + </span><span class="d">1</span>);
+</code><code id="L1453"><span class="ln">1453</span> <b>for</b> (; i < j; i++) {
+</code><code id="L1454"><span class="ln">1454</span> start += d;
+</code><code id="L1455"><span class="ln">1455</span> dots[i].offset<span class="s"> = </span>start<span class="s"> + </span><i>"%"</i>;
+</code><code id="L1456"><span class="ln">1456</span> }
+</code><code id="L1457"><span class="ln">1457</span> }
+</code><code id="L1458"><span class="ln">1458</span> }
+</code><code id="L1459"><span class="ln">1459</span> <b>return</b> dots;
+</code><code id="L1460"><span class="ln">1460</span> }),
+</code><code id="L1461"><span class="ln">1461</span> getContainer<span class="s"> = </span><b>function</b> (x, y, w, h) {
+</code><code id="L1462"><span class="ln">1462</span> <b>var</b> container;
+</code><code id="L1463"><span class="ln">1463</span> container<span class="s"> = </span>h<span class="s"> == </span><b>null</b><span class="s"> && </span>!R.is(x, <i>"object"</i>) ? g.doc.getElementById(x) : x;
+</code><code id="L1464"><span class="ln">1464</span> <b>if</b> (container<span class="s"> == </span><b>null</b>) {
+</code><code id="L1465"><span class="ln">1465</span> <b>return</b>;
+</code><code id="L1466"><span class="ln">1466</span> }
+</code><code id="L1467"><span class="ln">1467</span> <b>if</b> (container.tagName) {
+</code><code id="L1468"><span class="ln">1468</span> <b>if</b> (y<span class="s"> == </span><b>null</b>) {
+</code><code id="L1469"><span class="ln">1469</span> <b>return</b> {
+</code><code id="L1470"><span class="ln">1470</span> container: container,
+</code><code id="L1471"><span class="ln">1471</span> width: container.style.pixelWidth<span class="s"> || </span>container.offsetWidth,
+</code><code id="L1472"><span class="ln">1472</span> height: container.style.pixelHeight<span class="s"> || </span>container.offsetHeight
+</code><code id="L1473"><span class="ln">1473</span> };
+</code><code id="L1474"><span class="ln">1474</span> } <b>else</b> {
+</code><code id="L1475"><span class="ln">1475</span> <b>return</b> {container: container, width: y, height: w};
+</code><code id="L1476"><span class="ln">1476</span> }
+</code><code id="L1477"><span class="ln">1477</span> }
+</code><code id="L1478"><span class="ln">1478</span> <b>return</b> {container: <span class="d">1</span>, x: x, y: y, width: w, height: h};
+</code><code id="L1479"><span class="ln">1479</span> },
+</code><code id="L1480"><span class="ln">1480</span> plugins<span class="s"> = </span><b>function</b> (con, add) {
+</code><code id="L1481"><span class="ln">1481</span> <b>var</b> that<span class="s"> = </span><b>this</b>;
+</code><code id="L1482"><span class="ln">1482</span> <b>for</b> (<b>var</b> prop <b>in</b> add) {
+</code><code id="L1483"><span class="ln">1483</span> <b>if</b> (add[has](prop)<span class="s"> && </span>!(prop <b>in</b> con)) {
+</code><code id="L1484"><span class="ln">1484</span> <b>switch</b> (<b>typeof</b> add[prop]) {
+</code><code id="L1485"><span class="ln">1485</span> <b>case</b> <i>"<b>function</b>"</i>:
+</code><code id="L1486"><span class="ln">1486</span> (<b>function</b> (f) {
+</code><code id="L1487"><span class="ln">1487</span> con[prop]<span class="s"> = </span>con<span class="s"> === </span>that ? f : <b>function</b> () { <b>return</b> f[apply](that, arguments); };
+</code><code id="L1488"><span class="ln">1488</span> })(add[prop]);
+</code><code id="L1489"><span class="ln">1489</span> <b>break</b>;
+</code><code id="L1490"><span class="ln">1490</span> <b>case</b> <i>"object"</i>:
+</code><code id="L1491"><span class="ln">1491</span> con[prop]<span class="s"> = </span>con[prop]<span class="s"> || </span>{};
+</code><code id="L1492"><span class="ln">1492</span> plugins.call(<b>this</b>, con[prop], add[prop]);
+</code><code id="L1493"><span class="ln">1493</span> <b>break</b>;
+</code><code id="L1494"><span class="ln">1494</span> <b>default</b>:
+</code><code id="L1495"><span class="ln">1495</span> con[prop]<span class="s"> = </span>add[prop];
+</code><code id="L1496"><span class="ln">1496</span> <b>break</b>;
+</code><code id="L1497"><span class="ln">1497</span> }
+</code><code id="L1498"><span class="ln">1498</span> }
+</code><code id="L1499"><span class="ln">1499</span> }
+</code><code id="L1500"><span class="ln">1500</span> },
+</code><code id="L1501"><span class="ln">1501</span> tear<span class="s"> = </span><b>function</b> (el, paper) {
+</code><code id="L1502"><span class="ln">1502</span> el<span class="s"> == </span>paper.top<span class="s"> && </span>(paper.top<span class="s"> = </span>el.prev);
+</code><code id="L1503"><span class="ln">1503</span> el<span class="s"> == </span>paper.bottom<span class="s"> && </span>(paper.bottom<span class="s"> = </span>el.next);
+</code><code id="L1504"><span class="ln">1504</span> el.next<span class="s"> && </span>(el.next.prev<span class="s"> = </span>el.prev);
+</code><code id="L1505"><span class="ln">1505</span> el.prev<span class="s"> && </span>(el.prev.next<span class="s"> = </span>el.next);
+</code><code id="L1506"><span class="ln">1506</span> },
+</code><code id="L1507"><span class="ln">1507</span> tofront<span class="s"> = </span><b>function</b> (el, paper) {
+</code><code id="L1508"><span class="ln">1508</span> <b>if</b> (paper.top<span class="s"> === </span>el) {
+</code><code id="L1509"><span class="ln">1509</span> <b>return</b>;
+</code><code id="L1510"><span class="ln">1510</span> }
+</code><code id="L1511"><span class="ln">1511</span> tear(el, paper);
+</code><code id="L1512"><span class="ln">1512</span> el.next<span class="s"> = </span><b>null</b>;
+</code><code id="L1513"><span class="ln">1513</span> el.prev<span class="s"> = </span>paper.top;
+</code><code id="L1514"><span class="ln">1514</span> paper.top.next<span class="s"> = </span>el;
+</code><code id="L1515"><span class="ln">1515</span> paper.top<span class="s"> = </span>el;
+</code><code id="L1516"><span class="ln">1516</span> },
+</code><code id="L1517"><span class="ln">1517</span> toback<span class="s"> = </span><b>function</b> (el, paper) {
+</code><code id="L1518"><span class="ln">1518</span> <b>if</b> (paper.bottom<span class="s"> === </span>el) {
+</code><code id="L1519"><span class="ln">1519</span> <b>return</b>;
+</code><code id="L1520"><span class="ln">1520</span> }
+</code><code id="L1521"><span class="ln">1521</span> tear(el, paper);
+</code><code id="L1522"><span class="ln">1522</span> el.next<span class="s"> = </span>paper.bottom;
+</code><code id="L1523"><span class="ln">1523</span> el.prev<span class="s"> = </span><b>null</b>;
+</code><code id="L1524"><span class="ln">1524</span> paper.bottom.prev<span class="s"> = </span>el;
+</code><code id="L1525"><span class="ln">1525</span> paper.bottom<span class="s"> = </span>el;
+</code><code id="L1526"><span class="ln">1526</span> },
+</code><code id="L1527"><span class="ln">1527</span> insertafter<span class="s"> = </span><b>function</b> (el, el2, paper) {
+</code><code id="L1528"><span class="ln">1528</span> tear(el, paper);
+</code><code id="L1529"><span class="ln">1529</span> el2<span class="s"> == </span>paper.top<span class="s"> && </span>(paper.top<span class="s"> = </span>el);
+</code><code id="L1530"><span class="ln">1530</span> el2.next<span class="s"> && </span>(el2.next.prev<span class="s"> = </span>el);
+</code><code id="L1531"><span class="ln">1531</span> el.next<span class="s"> = </span>el2.next;
+</code><code id="L1532"><span class="ln">1532</span> el.prev<span class="s"> = </span>el2;
+</code><code id="L1533"><span class="ln">1533</span> el2.next<span class="s"> = </span>el;
+</code><code id="L1534"><span class="ln">1534</span> },
+</code><code id="L1535"><span class="ln">1535</span> insertbefore<span class="s"> = </span><b>function</b> (el, el2, paper) {
+</code><code id="L1536"><span class="ln">1536</span> tear(el, paper);
+</code><code id="L1537"><span class="ln">1537</span> el2<span class="s"> == </span>paper.bottom<span class="s"> && </span>(paper.bottom<span class="s"> = </span>el);
+</code><code id="L1538"><span class="ln">1538</span> el2.prev<span class="s"> && </span>(el2.prev.next<span class="s"> = </span>el);
+</code><code id="L1539"><span class="ln">1539</span> el.prev<span class="s"> = </span>el2.prev;
+</code><code id="L1540"><span class="ln">1540</span> el2.prev<span class="s"> = </span>el;
+</code><code id="L1541"><span class="ln">1541</span> el.next<span class="s"> = </span>el2;
+</code><code id="L1542"><span class="ln">1542</span> },
+</code><code id="L1543"><span class="ln">1543</span> removed<span class="s"> = </span><b>function</b> (methodname) {
+</code><code id="L1544"><span class="ln">1544</span> <b>return</b> <b>function</b> () {
+</code><code id="L1545"><span class="ln">1545</span> <b>throw</b> <b>new</b> Error(<i>"Rapha\xebl: you are calling to method \u201c"</i><span class="s"> + </span>methodname<span class="s"> + </span><i>"\u201d of removed object"</i>);
+</code><code id="L1546"><span class="ln">1546</span> };
+</code><code id="L1547"><span class="ln">1547</span> },
+</code><code id="L1548"><span class="ln">1548</span> extractTransform<span class="s"> = </span><b>function</b> (el, tstr) {
+</code><code id="L1549"><span class="ln">1549</span> <b>if</b> (tstr<span class="s"> == </span><b>null</b>) {
+</code><code id="L1550"><span class="ln">1550</span> <b>return</b> el._.transform;
+</code><code id="L1551"><span class="ln">1551</span> }
+</code><code id="L1552"><span class="ln">1552</span> tstr<span class="s"> = </span>Str(tstr).replace(/\.{<span class="d">3</span>}|\u2026/g, el._.transform<span class="s"> || </span>E);
+</code><code id="L1553"><span class="ln">1553</span> <b>var</b> tdata<span class="s"> = </span>R.parseTransformString(tstr),
+</code><code id="L1554"><span class="ln">1554</span> deg<span class="s"> = </span><span class="d">0</span>,
+</code><code id="L1555"><span class="ln">1555</span> dx<span class="s"> = </span><span class="d">0</span>,
+</code><code id="L1556"><span class="ln">1556</span> dy<span class="s"> = </span><span class="d">0</span>,
+</code><code id="L1557"><span class="ln">1557</span> sx<span class="s"> = </span><span class="d">1</span>,
+</code><code id="L1558"><span class="ln">1558</span> sy<span class="s"> = </span><span class="d">1</span>,
+</code><code id="L1559"><span class="ln">1559</span> _<span class="s"> = </span>el._,
+</code><code id="L1560"><span class="ln">1560</span> m<span class="s"> = </span><b>new</b> Matrix;
+</code><code id="L1561"><span class="ln">1561</span> _.transform<span class="s"> = </span>tdata<span class="s"> || </span>[];
+</code><code id="L1562"><span class="ln">1562</span> <b>if</b> (tdata) {
+</code><code id="L1563"><span class="ln">1563</span> <b>for</b> (<b>var</b> i<span class="s"> = </span><span class="d">0</span>, ii<span class="s"> = </span>tdata.length; i < ii; i++) {
+</code><code id="L1564"><span class="ln">1564</span> <b>var</b> t<span class="s"> = </span>tdata[i],
+</code><code id="L1565"><span class="ln">1565</span> tlen<span class="s"> = </span>t.length,
+</code><code id="L1566"><span class="ln">1566</span> bb;
+</code><code id="L1567"><span class="ln">1567</span> t[<span class="d">0</span>]<span class="s"> = </span>Str(t[<span class="d">0</span>]).toLowerCase();
+</code><code id="L1568"><span class="ln">1568</span> <b>if</b> (t[<span class="d">0</span>]<span class="s"> == </span><i>"t"</i><span class="s"> && </span>tlen<span class="s"> == </span><span class="d">3</span>) {
+</code><code id="L1569"><span class="ln">1569</span> m.translate(t[<span class="d">1</span>], t[<span class="d">2</span>]);
+</code><code id="L1570"><span class="ln">1570</span> } <b>else</b> <b>if</b> (t[<span class="d">0</span>]<span class="s"> == </span><i>"r"</i>) {
+</code><code id="L1571"><span class="ln">1571</span> <b>if</b> (tlen<span class="s"> == </span><span class="d">2</span>) {
+</code><code id="L1572"><span class="ln">1572</span> bb<span class="s"> = </span>bb<span class="s"> || </span>el.getBBox(<span class="d">1</span>);
+</code><code id="L1573"><span class="ln">1573</span> m.rotate(t[<span class="d">1</span>], bb.x<span class="s"> + </span>bb.width<span class="s"> / </span><span class="d">2</span>, bb.y<span class="s"> + </span>bb.height<span class="s"> / </span><span class="d">2</span>);
+</code><code id="L1574"><span class="ln">1574</span> deg += t[<span class="d">1</span>];
+</code><code id="L1575"><span class="ln">1575</span> } <b>else</b> <b>if</b> (tlen<span class="s"> == </span><span class="d">4</span>) {
+</code><code id="L1576"><span class="ln">1576</span> m.rotate(t[<span class="d">1</span>], t[<span class="d">2</span>], t[<span class="d">3</span>]);
+</code><code id="L1577"><span class="ln">1577</span> deg += t[<span class="d">1</span>];
+</code><code id="L1578"><span class="ln">1578</span> }
+</code><code id="L1579"><span class="ln">1579</span> } <b>else</b> <b>if</b> (t[<span class="d">0</span>]<span class="s"> == </span><i>"s"</i>) {
+</code><code id="L1580"><span class="ln">1580</span> <b>if</b> (tlen<span class="s"> == </span><span class="d">2</span><span class="s"> || </span>tlen<span class="s"> == </span><span class="d">3</span>) {
+</code><code id="L1581"><span class="ln">1581</span> bb<span class="s"> = </span>bb<span class="s"> || </span>el.getBBox(<span class="d">1</span>);
+</code><code id="L1582"><span class="ln">1582</span> m.scale(t[<span class="d">1</span>], t[tlen<span class="s"> - </span><span class="d">1</span>], bb.x<span class="s"> + </span>bb.width<span class="s"> / </span><span class="d">2</span>, bb.y<span class="s"> + </span>bb.height<span class="s"> / </span><span class="d">2</span>);
+</code><code id="L1583"><span class="ln">1583</span> sx *= t[<span class="d">1</span>];
+</code><code id="L1584"><span class="ln">1584</span> sy *= t[tlen<span class="s"> - </span><span class="d">1</span>];
+</code><code id="L1585"><span class="ln">1585</span> } <b>else</b> <b>if</b> (tlen<span class="s"> == </span><span class="d">5</span>) {
+</code><code id="L1586"><span class="ln">1586</span> m.scale(t[<span class="d">1</span>], t[<span class="d">2</span>], t[<span class="d">3</span>], t[<span class="d">4</span>]);
+</code><code id="L1587"><span class="ln">1587</span> sx *= t[<span class="d">1</span>];
+</code><code id="L1588"><span class="ln">1588</span> sy *= t[<span class="d">2</span>];
+</code><code id="L1589"><span class="ln">1589</span> }
+</code><code id="L1590"><span class="ln">1590</span> } <b>else</b> <b>if</b> (t[<span class="d">0</span>]<span class="s"> == </span><i>"m"</i><span class="s"> && </span>tlen<span class="s"> == </span><span class="d">7</span>) {
+</code><code id="L1591"><span class="ln">1591</span> m.add(t[<span class="d">1</span>], t[<span class="d">2</span>], t[<span class="d">3</span>], t[<span class="d">4</span>], t[<span class="d">5</span>], t[<span class="d">6</span>]);
+</code><code id="L1592"><span class="ln">1592</span> }
+</code><code id="L1593"><span class="ln">1593</span> _.dirtyT<span class="s"> = </span><span class="d">1</span>;
+</code><code id="L1594"><span class="ln">1594</span> el.matrix<span class="s"> = </span>m;
+</code><code id="L1595"><span class="ln">1595</span> }
+</code><code id="L1596"><span class="ln">1596</span> }
+</code><code id="L1597"><span class="ln">1597</span>
+</code><code id="L1598"><span class="ln">1598</span> el.matrix<span class="s"> = </span>m;
+</code><code id="L1599"><span class="ln">1599</span>
+</code><code id="L1600"><span class="ln">1600</span> _.sx<span class="s"> = </span>sx;
+</code><code id="L1601"><span class="ln">1601</span> _.sy<span class="s"> = </span>sy;
+</code><code id="L1602"><span class="ln">1602</span> _.deg<span class="s"> = </span>deg;
+</code><code id="L1603"><span class="ln">1603</span> _.dx<span class="s"> = </span>dx<span class="s"> = </span>m.m[<span class="d">0</span>][<span class="d">2</span>];
+</code><code id="L1604"><span class="ln">1604</span> _.dy<span class="s"> = </span>dy<span class="s"> = </span>m.m[<span class="d">1</span>][<span class="d">2</span>];
+</code><code id="L1605"><span class="ln">1605</span>
+</code><code id="L1606"><span class="ln">1606</span> <b>if</b> (sx<span class="s"> == </span><span class="d">1</span><span class="s"> && </span>sy<span class="s"> == </span><span class="d">1</span><span class="s"> && </span>!deg<span class="s"> && </span>_.bbox) {
+</code><code id="L1607"><span class="ln">1607</span> _.bbox.x += +dx;
+</code><code id="L1608"><span class="ln">1608</span> _.bbox.y += +dy;
+</code><code id="L1609"><span class="ln">1609</span> } <b>else</b> {
+</code><code id="L1610"><span class="ln">1610</span> _.dirtyT<span class="s"> = </span><span class="d">1</span>;
+</code><code id="L1611"><span class="ln">1611</span> }
+</code><code id="L1612"><span class="ln">1612</span> },
+</code><code id="L1613"><span class="ln">1613</span> getEmpty<span class="s"> = </span><b>function</b> (item) {
+</code><code id="L1614"><span class="ln">1614</span> <b>switch</b> (item[<span class="d">0</span>]) {
+</code><code id="L1615"><span class="ln">1615</span> <b>case</b> <i>"t"</i>: <b>return</b> [<i>"t"</i>, <span class="d">0</span>, <span class="d">0</span>];
+</code><code id="L1616"><span class="ln">1616</span> <b>case</b> <i>"m"</i>: <b>return</b> [<i>"m"</i>, <span class="d">1</span>, <span class="d">0</span>, <span class="d">0</span>, <span class="d">1</span>, <span class="d">0</span>, <span class="d">0</span>];
+</code><code id="L1617"><span class="ln">1617</span> <b>case</b> <i>"r"</i>: <b>if</b> (item.length<span class="s"> == </span><span class="d">4</span>) {
+</code><code id="L1618"><span class="ln">1618</span> <b>return</b> [<i>"r"</i>, <span class="d">0</span>, item[<span class="d">2</span>], item[<span class="d">3</span>]];
+</code><code id="L1619"><span class="ln">1619</span> } <b>else</b> {
+</code><code id="L1620"><span class="ln">1620</span> <b>return</b> [<i>"r"</i>, <span class="d">0</span>];
+</code><code id="L1621"><span class="ln">1621</span> }
+</code><code id="L1622"><span class="ln">1622</span> <b>case</b> <i>"s"</i>: <b>if</b> (item.length<span class="s"> == </span><span class="d">5</span>) {
+</code><code id="L1623"><span class="ln">1623</span> <b>return</b> [<i>"s"</i>, <span class="d">1</span>, <span class="d">1</span>, item[<span class="d">3</span>], item[<span class="d">4</span>]];
+</code><code id="L1624"><span class="ln">1624</span> } <b>else</b> <b>if</b> (item.length<span class="s"> == </span><span class="d">3</span>) {
+</code><code id="L1625"><span class="ln">1625</span> <b>return</b> [<i>"s"</i>, <span class="d">1</span>, <span class="d">1</span>];
+</code><code id="L1626"><span class="ln">1626</span> } <b>else</b> {
+</code><code id="L1627"><span class="ln">1627</span> <b>return</b> [<i>"s"</i>, <span class="d">1</span>];
+</code><code id="L1628"><span class="ln">1628</span> }
+</code><code id="L1629"><span class="ln">1629</span> }
+</code><code id="L1630"><span class="ln">1630</span> },
+</code><code id="L1631"><span class="ln">1631</span> equaliseTransform<span class="s"> = </span><b>function</b> (t1, t2) {
+</code><code id="L1632"><span class="ln">1632</span> t1<span class="s"> = </span>R.parseTransformString(t1)<span class="s"> || </span>[];
+</code><code id="L1633"><span class="ln">1633</span> t2<span class="s"> = </span>R.parseTransformString(t2)<span class="s"> || </span>[];
+</code><code id="L1634"><span class="ln">1634</span> <b>var</b> maxlength<span class="s"> = </span>mmax(t1.length, t2.length),
+</code><code id="L1635"><span class="ln">1635</span> from<span class="s"> = </span>[],
+</code><code id="L1636"><span class="ln">1636</span> to<span class="s"> = </span>[],
+</code><code id="L1637"><span class="ln">1637</span> i<span class="s"> = </span><span class="d">0</span>, j, jj,
+</code><code id="L1638"><span class="ln">1638</span> tt1, tt2;
+</code><code id="L1639"><span class="ln">1639</span> <b>for</b> (; i < maxlength; i++) {
+</code><code id="L1640"><span class="ln">1640</span> tt1<span class="s"> = </span>t1[i]<span class="s"> || </span>getEmpty(t2[i]);
+</code><code id="L1641"><span class="ln">1641</span> tt2<span class="s"> = </span>t2[i]<span class="s"> || </span>getEmpty(tt1);
+</code><code id="L1642"><span class="ln">1642</span> <b>if</b> ( (tt1[<span class="d">0</span>] != tt2[<span class="d">0</span>]) ||
+</code><code id="L1643"><span class="ln">1643</span> (tt1[<span class="d">0</span>]<span class="s"> == </span><i>"r"</i><span class="s"> && </span>(tt1[<span class="d">2</span>] != tt2[<span class="d">2</span>]<span class="s"> || </span>tt1[<span class="d">3</span>] != tt2[<span class="d">3</span>])) ||
+</code><code id="L1644"><span class="ln">1644</span> (tt1[<span class="d">0</span>]<span class="s"> == </span><i>"s"</i><span class="s"> && </span>(tt1[<span class="d">3</span>] != tt2[<span class="d">3</span>]<span class="s"> || </span>tt1[<span class="d">4</span>] != tt2[<span class="d">4</span>]))
+</code><code id="L1645"><span class="ln">1645</span> ) {
+</code><code id="L1646"><span class="ln">1646</span> <b>return</b>;
+</code><code id="L1647"><span class="ln">1647</span> }
+</code><code id="L1648"><span class="ln">1648</span> from[i]<span class="s"> = </span>[];
+</code><code id="L1649"><span class="ln">1649</span> to[i]<span class="s"> = </span>[];
+</code><code id="L1650"><span class="ln">1650</span> <b>for</b> (j<span class="s"> = </span><span class="d">0</span>, jj<span class="s"> = </span>mmax(tt1.length, tt2.length); j < jj; j++) {
+</code><code id="L1651"><span class="ln">1651</span> j <b>in</b> tt1<span class="s"> && </span>(from[i][j]<span class="s"> = </span>tt1[j]);
+</code><code id="L1652"><span class="ln">1652</span> j <b>in</b> tt2<span class="s"> && </span>(to[i][j]<span class="s"> = </span>tt2[j]);
+</code><code id="L1653"><span class="ln">1653</span> }
+</code><code id="L1654"><span class="ln">1654</span> }
+</code><code id="L1655"><span class="ln">1655</span> <b>return</b> {
+</code><code id="L1656"><span class="ln">1656</span> from: from,
+</code><code id="L1657"><span class="ln">1657</span> to: to
+</code><code id="L1658"><span class="ln">1658</span> };
+</code><code id="L1659"><span class="ln">1659</span> };
+</code><code id="L1660"><span class="ln">1660</span><span class="c"> <span class="c">/*\</span>
+</span></code><code id="L1661"><span class="ln">1661</span><span class="c"> <span class="s"> * </span>Raphael.pathToRelative
+</span></code><code id="L1662"><span class="ln">1662</span><span class="c"> [ method ]
+</span></code><code id="L1663"><span class="ln">1663</span><span class="c"> **
+</span></code><code id="L1664"><span class="ln">1664</span><span class="c"> <span class="s"> * </span>Utility method
+</span></code><code id="L1665"><span class="ln">1665</span><span class="c"> **
+</span></code><code id="L1666"><span class="ln">1666</span><span class="c"> <span class="s"> * </span>Converts path to relative form
+</span></code><code id="L1667"><span class="ln">1667</span><span class="c"> > Parameters
+</span></code><code id="L1668"><span class="ln">1668</span><span class="c"> <span class="s"> - </span>pathString (string|array) path string or array of segments
+</span></code><code id="L1669"><span class="ln">1669</span><span class="c"> <span class="s"> = </span>(array) array of segments.
+</span></code><code id="L1670"><span class="ln">1670</span><span class="c"> \*/</span>
+</code><code id="L1671"><span class="ln">1671</span> R.pathToRelative<span class="s"> = </span>pathToRelative;
+</code><code id="L1672"><span class="ln">1672</span><span class="c"> <span class="c">/*\</span>
+</span></code><code id="L1673"><span class="ln">1673</span><span class="c"> <span class="s"> * </span>Raphael.path2curve
+</span></code><code id="L1674"><span class="ln">1674</span><span class="c"> [ method ]
+</span></code><code id="L1675"><span class="ln">1675</span><span class="c"> **
+</span></code><code id="L1676"><span class="ln">1676</span><span class="c"> <span class="s"> * </span>Utility method
+</span></code><code id="L1677"><span class="ln">1677</span><span class="c"> **
+</span></code><code id="L1678"><span class="ln">1678</span><span class="c"> <span class="s"> * </span>Converts path to path where all segments are cubic bezier curves.
+</span></code><code id="L1679"><span class="ln">1679</span><span class="c"> > Parameters
+</span></code><code id="L1680"><span class="ln">1680</span><span class="c"> <span class="s"> - </span>pathString (string|array) path string or array of segments
+</span></code><code id="L1681"><span class="ln">1681</span><span class="c"> <span class="s"> = </span>(array) array of segments.
+</span></code><code id="L1682"><span class="ln">1682</span><span class="c"> \*/</span>
+</code><code id="L1683"><span class="ln">1683</span> R.path2curve<span class="s"> = </span>path2curve;
+</code><code id="L1684"><span class="ln">1684</span> <span class="c">// Matrix</span>
+</code><code id="L1685"><span class="ln">1685</span> <span class="c">// <b>var</b> m<span class="s"> = </span>document.createElementNS(<i>"http://www.w3.org/<span class="d">2000</span>/svg"</i>, <i>"svg"</i>).createSVGMatrix();</span>
+</code><code id="L1686"><span class="ln">1686</span> <b>function</b> Matrix(a, b, c, d, e, f) {
+</code><code id="L1687"><span class="ln">1687</span> <b>if</b> (a != <b>null</b>) {
+</code><code id="L1688"><span class="ln">1688</span> <b>this</b>.m<span class="s"> = </span>[[a, c, e], [b, d, f], [<span class="d">0</span>, <span class="d">0</span>, <span class="d">1</span>]];
+</code><code id="L1689"><span class="ln">1689</span> } <b>else</b> {
+</code><code id="L1690"><span class="ln">1690</span> <b>this</b>.m<span class="s"> = </span>[[<span class="d">1</span>, <span class="d">0</span>, <span class="d">0</span>], [<span class="d">0</span>, <span class="d">1</span>, <span class="d">0</span>], [<span class="d">0</span>, <span class="d">0</span>, <span class="d">1</span>]];
+</code><code id="L1691"><span class="ln">1691</span> }
+</code><code id="L1692"><span class="ln">1692</span> }
+</code><code id="L1693"><span class="ln">1693</span> <b>var</b> matrixproto<span class="s"> = </span>Matrix.prototype;
+</code><code id="L1694"><span class="ln">1694</span> matrixproto.add<span class="s"> = </span><b>function</b> (a, b, c, d, e, f) {
+</code><code id="L1695"><span class="ln">1695</span> <b>var</b> out<span class="s"> = </span>[[], [], []],
+</code><code id="L1696"><span class="ln">1696</span> matrix<span class="s"> = </span>[[a, c, e], [b, d, f], [<span class="d">0</span>, <span class="d">0</span>, <span class="d">1</span>]],
+</code><code id="L1697"><span class="ln">1697</span> x, y, z, res;
+</code><code id="L1698"><span class="ln">1698</span>
+</code><code id="L1699"><span class="ln">1699</span> <b>for</b> (x<span class="s"> = </span><span class="d">0</span>; x < <span class="d">3</span>; x++) {
+</code><code id="L1700"><span class="ln">1700</span> <b>for</b> (y<span class="s"> = </span><span class="d">0</span>; y < <span class="d">3</span>; y++) {
+</code><code id="L1701"><span class="ln">1701</span> res<span class="s"> = </span><span class="d">0</span>;
+</code><code id="L1702"><span class="ln">1702</span> <b>for</b> (z<span class="s"> = </span><span class="d">0</span>; z < <span class="d">3</span>; z++) {
+</code><code id="L1703"><span class="ln">1703</span> res += <b>this</b>.m[x][z]<span class="s"> * </span>matrix[z][y];
+</code><code id="L1704"><span class="ln">1704</span> }
+</code><code id="L1705"><span class="ln">1705</span> out[x][y]<span class="s"> = </span>res;
+</code><code id="L1706"><span class="ln">1706</span> }
+</code><code id="L1707"><span class="ln">1707</span> }
+</code><code id="L1708"><span class="ln">1708</span> <b>this</b>.m<span class="s"> = </span>out;
+</code><code id="L1709"><span class="ln">1709</span> };
+</code><code id="L1710"><span class="ln">1710</span> matrixproto.invert<span class="s"> = </span><b>function</b> () {
+</code><code id="L1711"><span class="ln">1711</span> <b>var</b> a<span class="s"> = </span><b>this</b>.m[<span class="d">0</span>][<span class="d">0</span>],
+</code><code id="L1712"><span class="ln">1712</span> b<span class="s"> = </span><b>this</b>.m[<span class="d">1</span>][<span class="d">0</span>],
+</code><code id="L1713"><span class="ln">1713</span> c<span class="s"> = </span><b>this</b>.m[<span class="d">0</span>][<span class="d">1</span>],
+</code><code id="L1714"><span class="ln">1714</span> d<span class="s"> = </span><b>this</b>.m[<span class="d">1</span>][<span class="d">1</span>],
+</code><code id="L1715"><span class="ln">1715</span> e<span class="s"> = </span><b>this</b>.m[<span class="d">0</span>][<span class="d">2</span>],
+</code><code id="L1716"><span class="ln">1716</span> f<span class="s"> = </span><b>this</b>.m[<span class="d">1</span>][<span class="d">2</span>],
+</code><code id="L1717"><span class="ln">1717</span> x<span class="s"> = </span>a<span class="s"> * </span>d<span class="s"> - </span>b<span class="s"> * </span>c;
+</code><code id="L1718"><span class="ln">1718</span> <b>return</b> <b>new</b> Matrix(d<span class="s"> / </span>x, -b<span class="s"> / </span>x, -c<span class="s"> / </span>x, a<span class="s"> / </span>x, (c<span class="s"> * </span>f<span class="s"> - </span>d<span class="s"> * </span>e)<span class="s"> / </span>x, (b<span class="s"> * </span>e<span class="s"> - </span>a<span class="s"> * </span>f)<span class="s"> / </span>x);
+</code><code id="L1719"><span class="ln">1719</span> };
+</code><code id="L1720"><span class="ln">1720</span> matrixproto.clone<span class="s"> = </span><b>function</b> () {
+</code><code id="L1721"><span class="ln">1721</span> <b>var</b> a<span class="s"> = </span><b>this</b>.m[<span class="d">0</span>][<span class="d">0</span>],
+</code><code id="L1722"><span class="ln">1722</span> b<span class="s"> = </span><b>this</b>.m[<span class="d">1</span>][<span class="d">0</span>],
+</code><code id="L1723"><span class="ln">1723</span> c<span class="s"> = </span><b>this</b>.m[<span class="d">0</span>][<span class="d">1</span>],
+</code><code id="L1724"><span class="ln">1724</span> d<span class="s"> = </span><b>this</b>.m[<span class="d">1</span>][<span class="d">1</span>],
+</code><code id="L1725"><span class="ln">1725</span> e<span class="s"> = </span><b>this</b>.m[<span class="d">0</span>][<span class="d">2</span>],
+</code><code id="L1726"><span class="ln">1726</span> f<span class="s"> = </span><b>this</b>.m[<span class="d">1</span>][<span class="d">2</span>];
+</code><code id="L1727"><span class="ln">1727</span> <b>return</b> <b>new</b> Matrix(a, b, c, d, e, f);
+</code><code id="L1728"><span class="ln">1728</span> };
+</code><code id="L1729"><span class="ln">1729</span> matrixproto.translate<span class="s"> = </span><b>function</b> (x, y) {
+</code><code id="L1730"><span class="ln">1730</span> <b>this</b>.add(<span class="d">1</span>, <span class="d">0</span>, <span class="d">0</span>, <span class="d">1</span>, x, y);
+</code><code id="L1731"><span class="ln">1731</span> };
+</code><code id="L1732"><span class="ln">1732</span> matrixproto.scale<span class="s"> = </span><b>function</b> (x, y, cx, cy) {
+</code><code id="L1733"><span class="ln">1733</span> y<span class="s"> == </span><b>null</b><span class="s"> && </span>(y<span class="s"> = </span>x);
+</code><code id="L1734"><span class="ln">1734</span> <b>this</b>.add(<span class="d">1</span>, <span class="d">0</span>, <span class="d">0</span>, <span class="d">1</span>, cx, cy);
+</code><code id="L1735"><span class="ln">1735</span> <b>this</b>.add(x, <span class="d">0</span>, <span class="d">0</span>, y, <span class="d">0</span>, <span class="d">0</span>);
+</code><code id="L1736"><span class="ln">1736</span> <b>this</b>.add(<span class="d">1</span>, <span class="d">0</span>, <span class="d">0</span>, <span class="d">1</span>, -cx, -cy);
+</code><code id="L1737"><span class="ln">1737</span> };
+</code><code id="L1738"><span class="ln">1738</span> matrixproto.rotate<span class="s"> = </span><b>function</b> (a, x, y) {
+</code><code id="L1739"><span class="ln">1739</span> a<span class="s"> = </span>R.rad(a);
+</code><code id="L1740"><span class="ln">1740</span> <b>var</b> cos<span class="s"> = </span>+math.cos(a).toFixed(<span class="d">9</span>),
+</code><code id="L1741"><span class="ln">1741</span> sin<span class="s"> = </span>+math.sin(a).toFixed(<span class="d">9</span>);
+</code><code id="L1742"><span class="ln">1742</span> <b>this</b>.add(cos, sin, -sin, cos, x, y);
+</code><code id="L1743"><span class="ln">1743</span> <b>this</b>.add(<span class="d">1</span>, <span class="d">0</span>, <span class="d">0</span>, <span class="d">1</span>, -x, -y);
+</code><code id="L1744"><span class="ln">1744</span> };
+</code><code id="L1745"><span class="ln">1745</span> matrixproto.x<span class="s"> = </span><b>function</b> (x, y) {
+</code><code id="L1746"><span class="ln">1746</span> <b>return</b> x<span class="s"> * </span><b>this</b>.m[<span class="d">0</span>][<span class="d">0</span>]<span class="s"> + </span>y<span class="s"> * </span><b>this</b>.m[<span class="d">0</span>][<span class="d">1</span>]<span class="s"> + </span><b>this</b>.m[<span class="d">0</span>][<span class="d">2</span>];
+</code><code id="L1747"><span class="ln">1747</span> };
+</code><code id="L1748"><span class="ln">1748</span> matrixproto.y<span class="s"> = </span><b>function</b> (x, y) {
+</code><code id="L1749"><span class="ln">1749</span> <b>return</b> x<span class="s"> * </span><b>this</b>.m[<span class="d">1</span>][<span class="d">0</span>]<span class="s"> + </span>y<span class="s"> * </span><b>this</b>.m[<span class="d">1</span>][<span class="d">1</span>]<span class="s"> + </span><b>this</b>.m[<span class="d">1</span>][<span class="d">2</span>];
+</code><code id="L1750"><span class="ln">1750</span> };
+</code><code id="L1751"><span class="ln">1751</span> matrixproto.get<span class="s"> = </span><b>function</b> (i, j) {
+</code><code id="L1752"><span class="ln">1752</span> <b>return</b> +<b>this</b>.m[i][j].toFixed(<span class="d">4</span>);
+</code><code id="L1753"><span class="ln">1753</span> };
+</code><code id="L1754"><span class="ln">1754</span> matrixproto.toString<span class="s"> = </span><b>function</b> () {
+</code><code id="L1755"><span class="ln">1755</span> <b>return</b> R.svg ?
+</code><code id="L1756"><span class="ln">1756</span> <i>"matrix("</i><span class="s"> + </span>[<b>this</b>.get(<span class="d">0</span>, <span class="d">0</span>), <b>this</b>.get(<span class="d">1</span>, <span class="d">0</span>), <b>this</b>.get(<span class="d">0</span>, <span class="d">1</span>), <b>this</b>.get(<span class="d">1</span>, <span class="d">1</span>), <b>this</b>.get(<span class="d">0</span>, <span class="d">2</span>), <b>this</b>.get(<span class="d">1</span>, <span class="d">2</span>)].join()<span class="s"> + </span><i>")"</i> :
+</code><code id="L1757"><span class="ln">1757</span> [<b>this</b>.get(<span class="d">0</span>, <span class="d">0</span>), <b>this</b>.get(<span class="d">0</span>, <span class="d">1</span>), <b>this</b>.get(<span class="d">1</span>, <span class="d">0</span>), <b>this</b>.get(<span class="d">1</span>, <span class="d">1</span>), <span class="d">0</span>, <span class="d">0</span>].join();
+</code><code id="L1758"><span class="ln">1758</span> };
+</code><code id="L1759"><span class="ln">1759</span> matrixproto.toFilter<span class="s"> = </span><b>function</b> () {
+</code><code id="L1760"><span class="ln">1760</span> <b>return</b> <i>"progid:DXImageTransform.Microsoft.Matrix(M11="</i><span class="s"> + </span><b>this</b>.get(<span class="d">0</span>, <span class="d">0</span>) +
+</code><code id="L1761"><span class="ln">1761</span> <i>", M12="</i><span class="s"> + </span><b>this</b>.get(<span class="d">0</span>, <span class="d">1</span>)<span class="s"> + </span><i>", M21="</i><span class="s"> + </span><b>this</b>.get(<span class="d">1</span>, <span class="d">0</span>)<span class="s"> + </span><i>", M22="</i><span class="s"> + </span><b>this</b>.get(<span class="d">1</span>, <span class="d">1</span>) +
+</code><code id="L1762"><span class="ln">1762</span> <i>", Dx="</i><span class="s"> + </span><b>this</b>.get(<span class="d">0</span>, <span class="d">2</span>)<span class="s"> + </span><i>", Dy="</i><span class="s"> + </span><b>this</b>.get(<span class="d">1</span>, <span class="d">2</span>)<span class="s"> + </span><i>", sizingmedthod='auto expand')"</i>;
+</code><code id="L1763"><span class="ln">1763</span> };
+</code><code id="L1764"><span class="ln">1764</span> matrixproto.offset<span class="s"> = </span><b>function</b> () {
+</code><code id="L1765"><span class="ln">1765</span> <b>return</b> [<b>this</b>.m[<span class="d">0</span>][<span class="d">2</span>].toFixed(<span class="d">4</span>), <b>this</b>.m[<span class="d">1</span>][<span class="d">2</span>].toFixed(<span class="d">4</span>)];
+</code><code id="L1766"><span class="ln">1766</span> };
+</code><code id="L1767"><span class="ln">1767</span>
+</code><code id="L1768"><span class="ln">1768</span> R.Matrix<span class="s"> = </span>Matrix;
+</code><code id="L1769"><span class="ln">1769</span>
+</code><code id="L1770"><span class="ln">1770</span> <span class="c">// SVG</span>
+</code><code id="L1771"><span class="ln">1771</span> <b>if</b> (R.svg) {
+</code><code id="L1772"><span class="ln">1772</span> <b>var</b> xlink<span class="s"> = </span><i>"http:<span class="c">//www.w3.org/<span class="d">1999</span>/xlink"</i>,</span>
+</code><code id="L1773"><span class="ln">1773</span> markers<span class="s"> = </span>{
+</code><code id="L1774"><span class="ln">1774</span> block: <i>"M5,<span class="d">0</span> <span class="d">0</span>,<span class="d">2.5</span> <span class="d">5</span>,5z"</i>,
+</code><code id="L1775"><span class="ln">1775</span> classic: <i>"M5,<span class="d">0</span> <span class="d">0</span>,<span class="d">2.5</span> <span class="d">5</span>,<span class="d">5</span> <span class="d">3.5</span>,<span class="d">3</span> <span class="d">3.5</span>,2z"</i>,
+</code><code id="L1776"><span class="ln">1776</span> diamond: <i>"M2<span class="d">.5</span>,<span class="d">0</span> <span class="d">5</span>,<span class="d">2.5</span> <span class="d">2.5</span>,<span class="d">5</span> <span class="d">0</span>,<span class="d">2</span>.5z"</i>,
+</code><code id="L1777"><span class="ln">1777</span> open: <i>"M6,<span class="d">1</span> <span class="d">1</span>,<span class="d">3.5</span> <span class="d">6</span>,<span class="d">6</span>"</i>,
+</code><code id="L1778"><span class="ln">1778</span> oval: <i>"M2<span class="d">.5</span>,0A2<span class="d">.5</span>,<span class="d">2.5</span>,<span class="d">0</span>,<span class="d">0</span>,<span class="d">1</span>,<span class="d">2.5</span>,<span class="d">5</span> <span class="d">2.5</span>,<span class="d">2.5</span>,<span class="d">0</span>,<span class="d">0</span>,<span class="d">1</span>,<span class="d">2.5</span>,0z"</i>
+</code><code id="L1779"><span class="ln">1779</span> },
+</code><code id="L1780"><span class="ln">1780</span> markerCounter<span class="s"> = </span>{};
+</code><code id="L1781"><span class="ln">1781</span> R.toString<span class="s"> = </span><b>function</b> () {
+</code><code id="L1782"><span class="ln">1782</span> <b>return</b> <i>"Your browser supports SVG.\nYou are running Rapha\xebl "</i><span class="s"> + </span><b>this</b>.version;
+</code><code id="L1783"><span class="ln">1783</span> };
+</code><code id="L1784"><span class="ln">1784</span> <b>var</b> $<span class="s"> = </span><b>function</b> (el, attr) {
+</code><code id="L1785"><span class="ln">1785</span> <b>if</b> (attr) {
+</code><code id="L1786"><span class="ln">1786</span> <b>if</b> (<b>typeof</b> el<span class="s"> == </span><i>"string"</i>) {
+</code><code id="L1787"><span class="ln">1787</span> el<span class="s"> = </span>$(el);
+</code><code id="L1788"><span class="ln">1788</span> }
+</code><code id="L1789"><span class="ln">1789</span> <b>for</b> (<b>var</b> key <b>in</b> attr) <b>if</b> (attr[has](key)) {
+</code><code id="L1790"><span class="ln">1790</span> <b>if</b> (key.substring(<span class="d">0</span>, <span class="d">6</span>)<span class="s"> == </span><i>"xlink:"</i>) {
+</code><code id="L1791"><span class="ln">1791</span> el.setAttributeNS(xlink, key.substring(<span class="d">6</span>), Str(attr[key]));
+</code><code id="L1792"><span class="ln">1792</span> } <b>else</b> {
+</code><code id="L1793"><span class="ln">1793</span> el[setAttribute](key, Str(attr[key]));
+</code><code id="L1794"><span class="ln">1794</span> }
+</code><code id="L1795"><span class="ln">1795</span> }
+</code><code id="L1796"><span class="ln">1796</span> } <b>else</b> {
+</code><code id="L1797"><span class="ln">1797</span> el<span class="s"> = </span>g.doc.createElementNS(<i>"http:<span class="c">//www.w3.org/<span class="d">2000</span>/svg"</i>, el);</span>
+</code><code id="L1798"><span class="ln">1798</span> el.style<span class="s"> && </span>(el.style.webkitTapHighlightColor<span class="s"> = </span><i>"rgba(<span class="d">0</span>,<span class="d">0</span>,<span class="d">0</span>,<span class="d">0</span>)"</i>);
+</code><code id="L1799"><span class="ln">1799</span> }
+</code><code id="L1800"><span class="ln">1800</span> <b>return</b> el;
+</code><code id="L1801"><span class="ln">1801</span> },
+</code><code id="L1802"><span class="ln">1802</span> thePath<span class="s"> = </span><b>function</b> (pathString, SVG) {
+</code><code id="L1803"><span class="ln">1803</span> <b>var</b> el<span class="s"> = </span>$(<i>"path"</i>);
+</code><code id="L1804"><span class="ln">1804</span> SVG.canvas<span class="s"> && </span>SVG.canvas.appendChild(el);
+</code><code id="L1805"><span class="ln">1805</span> <b>var</b> p<span class="s"> = </span><b>new</b> Element(el, SVG);
+</code><code id="L1806"><span class="ln">1806</span> p.type<span class="s"> = </span><i>"path"</i>;
+</code><code id="L1807"><span class="ln">1807</span> setFillAndStroke(p, {fill: <i>"none"</i>, stroke: <i>"#<span class="d">000</span>"</i>, path: pathString});
+</code><code id="L1808"><span class="ln">1808</span> <b>return</b> p;
+</code><code id="L1809"><span class="ln">1809</span> },
+</code><code id="L1810"><span class="ln">1810</span> gradients<span class="s"> = </span>{},
+</code><code id="L1811"><span class="ln">1811</span> rgGrad<span class="s"> = </span>/^url\(#(.*)\)$/,
+</code><code id="L1812"><span class="ln">1812</span> removeGradientFill<span class="s"> = </span><b>function</b> (node, paper) {
+</code><code id="L1813"><span class="ln">1813</span> <b>var</b> oid<span class="s"> = </span>node.getAttribute(fillString);
+</code><code id="L1814"><span class="ln">1814</span> oid<span class="s"> = </span>oid<span class="s"> && </span>oid.match(rgGrad);
+</code><code id="L1815"><span class="ln">1815</span> <b>if</b> (oid<span class="s"> && </span>!--gradients[oid[<span class="d">1</span>]]) {
+</code><code id="L1816"><span class="ln">1816</span> <b>delete</b> gradients[oid[<span class="d">1</span>]];
+</code><code id="L1817"><span class="ln">1817</span> paper.defs.removeChild(g.doc.getElementById(oid[<span class="d">1</span>]));
+</code><code id="L1818"><span class="ln">1818</span> }
+</code><code id="L1819"><span class="ln">1819</span> },
+</code><code id="L1820"><span class="ln">1820</span> addGradientFill<span class="s"> = </span><b>function</b> (element, gradient) {
+</code><code id="L1821"><span class="ln">1821</span> <b>var</b> type<span class="s"> = </span><i>"linear"</i>,
+</code><code id="L1822"><span class="ln">1822</span> id<span class="s"> = </span>element.id<span class="s"> + </span>gradient,
+</code><code id="L1823"><span class="ln">1823</span> fx<span class="s"> = </span><span class="d">.5</span>, fy<span class="s"> = </span><span class="d">.5</span>,
+</code><code id="L1824"><span class="ln">1824</span> o<span class="s"> = </span>element.node,
+</code><code id="L1825"><span class="ln">1825</span> SVG<span class="s"> = </span>element.paper,
+</code><code id="L1826"><span class="ln">1826</span> s<span class="s"> = </span>o.style,
+</code><code id="L1827"><span class="ln">1827</span> el<span class="s"> = </span>g.doc.getElementById(id);
+</code><code id="L1828"><span class="ln">1828</span> <b>if</b> (!el) {
+</code><code id="L1829"><span class="ln">1829</span> gradient<span class="s"> = </span>Str(gradient).replace(radial_gradient, <b>function</b> (all, _fx, _fy) {
+</code><code id="L1830"><span class="ln">1830</span> type<span class="s"> = </span><i>"radial"</i>;
+</code><code id="L1831"><span class="ln">1831</span> <b>if</b> (_fx<span class="s"> && </span>_fy) {
+</code><code id="L1832"><span class="ln">1832</span> fx<span class="s"> = </span>toFloat(_fx);
+</code><code id="L1833"><span class="ln">1833</span> fy<span class="s"> = </span>toFloat(_fy);
+</code><code id="L1834"><span class="ln">1834</span> <b>var</b> dir<span class="s"> = </span>((fy > <span class="d">.5</span>)<span class="s"> * </span><span class="d">2</span><span class="s"> - </span><span class="d">1</span>);
+</code><code id="L1835"><span class="ln">1835</span> pow(fx<span class="s"> - </span><span class="d">.5</span>, <span class="d">2</span>)<span class="s"> + </span>pow(fy<span class="s"> - </span><span class="d">.5</span>, <span class="d">2</span>) > <span class="d">.25</span> &&
+</code><code id="L1836"><span class="ln">1836</span> (fy<span class="s"> = </span>math.sqrt(<span class="d">.25</span><span class="s"> - </span>pow(fx<span class="s"> - </span><span class="d">.5</span>, <span class="d">2</span>))<span class="s"> * </span>dir<span class="s"> + </span><span class="d">.5</span>) &&
+</code><code id="L1837"><span class="ln">1837</span> fy != <span class="d">.5</span> &&
+</code><code id="L1838"><span class="ln">1838</span> (fy<span class="s"> = </span>fy.toFixed(<span class="d">5</span>)<span class="s"> - </span><span class="d">1e-5</span><span class="s"> * </span>dir);