# HG changeset patch # User kent # Date 1265331605 -32400 # Node ID 50e23a4b2f4053ece0f21665ae9aab149cd2928e # Parent aa09c34b90d36b01d3f93e712ff10ad0a89fcef6 add many files. diff -r aa09c34b90d3 -r 50e23a4b2f40 .hgignore --- a/.hgignore Mon Feb 01 20:37:36 2010 +0900 +++ b/.hgignore Fri Feb 05 10:00:05 2010 +0900 @@ -2,6 +2,7 @@ *.o *.s +*~ .*.swp .*.swo diff -r aa09c34b90d3 -r 50e23a4b2f40 abstract.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/abstract.tex Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,35 @@ +%% 要旨 +\begin{abstract} + +%%TODO + +システムの大規模化、複雑化という傾向は現代のソフトウェア開発プロジェク +トにおける特徴の一つである。 +この傾向は社会システムが成長する中で必然的なものとはいえるが、そのため +にシステムの設計や実装において誤りが発生する可能性も応じて高くなり、ソ +フトウェア開発における問題点の一つとして挙げられる。 + +また、多くのシステム構築にはソフトウェアとハードウェアの両方が不可欠で +ある。その受け渡しを行う組み込み開発の需要も増加傾向にある。 +ハードウェア記述にはVHDLや..などが使われるが、それらの言語は現代のソフ +トウェア開発でのオブジェクト指向やスタックとは違い、状態遷移を基本とし +ており、方向性がまったく違う。 +これらを統合し。。。でより効率的なシステム開発が可能になると考えられる +。 + +当研究室では、コードセグメントと継続を使う言語 Continuation based C を +提案している。 +この言語は上記の問題を解決するため、1) ハードウェアとスタック言語の中間 +2) 状態遷移を言語として直接記述できる 3) アセンブラに変わるコンパイル +ターゲットとして最適 4) 検証をプログラムに組み込める +という特徴を持っている。 +これにより +Continuation based Cは過去の研究においてGCCやmicro-cへの実装がなされて +いる。 + +本研究では実装における問題点の洗い出しとその解決、 +またContinuation based Cを使った例としてTaskManagerの実装を紹介する。 + + +\end{abstract} + diff -r aa09c34b90d3 -r 50e23a4b2f40 appendix.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/appendix.tex Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,40 @@ +\chapter{付録} + +\section{\texttt{\_\_return}擬似変数の実装} +% 環境付き継続の実装、内部関数の自動追加処理 + +環境付き継続の実装のための、\verb|__return|擬似変数を追加する処理を +コード\ref{code:postfix-expr},\ref{code:nest-and-goto}に掲載する。 +これはgcc/c\_parser\_postfix\_expression関数内の処理である。 +\lstinputlisting + [caption=c\_parser\_postfix\_expressionでの処理, + label=code:postfix-expr] + {sources/c-parser-postfix-expression.c} +\lstinputlisting + [caption=c\_parser\_postfix\_expressionでの処理, + label=code:nest-and-goto] + {sources/nest-and-goto.c} + + +\section{quicksort例題} + +速度、ファイルサイズの性能評価に用いたCbCによるquicksortの例題プログラム +をコード\ref{code:quicksort}に掲載する。 + +\lstinputlisting + [caption=quicksort\_cbc.cbc, + label=code:quicksort-cbc, + tabsize=4, + frame=single, + breaklines] + {quicksort/quicksort_cbc.cbc} + +\lstinputlisting + [caption=quicksort\_test.cbc, + label=code:quicksort-test, + tabsize=4, + frame=single, + breaklines] + {quicksort/quicksort_test.cbc} + + diff -r aa09c34b90d3 -r 50e23a4b2f40 bibliography.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bibliography.tex Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,37 @@ +\begin{thebibliography}{99} + \bibitem{bib:kono-april-2008} + 河野真治. ``Implementing Continuation based language in GCC'' + Continuation Festa 2008, April, 2008 + \bibitem{bib:kono-march-2008} + 河野真治. ``検証を自身で表現できるハードウェア、ソフトウェア記述言 + 語 Continuation based C と、そのCell への応用''. + 電子情報通信学会VLSI設計技術研究会, March, 2008 + \bibitem{bib:kinjo-master-2005} + 金城拓実. ``軽量継続を用いたゲームプログラムの分割と再構成の考察''. + 琉球大学理工学研究科情報工学専攻 平成17年度学位論文, 2006. + \bibitem{bib:gongo-master-2008} + 宮國渡. ``Cell用のFine-Grain Task Managerの実装''. + 琉球大学理工学研究科情報工学専攻 平成20年度学位論文, 2009. + \bibitem{bib:shimoji-2006} + 下地篤樹, 河野真治. ``タブロー法を用いたContinuation based Cプログラムの検証''. + 日本ソフトウェア科学会第23回大会, 2006. + \bibitem{bib:shimoji-2007} + 下地篤樹, 河野真治. ``線形時相論理によるContinuation based Cプログラムの検証''. + 情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS), April, 2007. + \bibitem{bib:kinjo-2004} + 金城拓実, 河野真治. + ``ゲームプログラムからの一部の仕様の抽出に関する考察''. + 日本ソフトウェア科学会第22回大会論文集, Sep, 2005 + \bibitem{bib:kinjo-2004} + 金城拓実, 河野真治. + ``ゲームプログラムの シナリオに基づいた状態遷移系を生成するシステムの提案''. + 日本ソフトウェア科学会第21回大会論文集, Sep, 2004 + \bibitem{bib:kent-2008} + 与儀健人, 河野真治. + ``Continuation based CコンパイラのGCC-4.2による実装'' + 情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS), April, 2008 + \bibitem{bib:nestedfunc} + ``Nested Function''. + http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html + +\end{thebibliography} diff -r aa09c34b90d3 -r 50e23a4b2f40 cbc.tex --- a/cbc.tex Mon Feb 01 20:37:36 2010 +0900 +++ b/cbc.tex Fri Feb 05 10:00:05 2010 +0900 @@ -1,9 +1,8 @@ \chapter{Continuation based C (CbC)} \label{chp:cbc} Continuation based C(以下CbC)は当研究室の提案する、アセンブラよりも上位でCよりも下位な記述言語である。 -我々は\ref{chp:first}章に述べたように様々な視点からこのCbCを使った研究を行っている。 -本章ではそのCbCの仕様について説明する。 - +我々は様々な視点からこのCbCを使った研究を行っている。本章ではそのCbCの +仕様と現在の状況について説明し、またCbCを用いた研究例も紹介する。 \section{CbCの要求仕様} 90 年代以降、ハードウェアの進歩がプログラミング言語よりも早く進みつつ @@ -110,10 +109,11 @@ 処理単位として用い、これを``コードセグメント''(code-segment)と呼ぶ。 コードセグメントはキーワード``code''を用いてCの関数の様に定義される。 -例として引数で与えられた数xの階乗を求めるプログラムをコード +引数部分はインタフェイスと呼ばれ、継続前のコードセグメントからの出力に +あたる。例として、引数で与えられた数xの階乗を求めるプログラムをコード \ref{code:factorial}に示した。 -引数部分はインタフェイスと呼ばれ、継続前のコードセグメントからの出力に -あたる。 + +\lstinputlisting[caption=CbCプログラムの例(階乗計算),label=code:factorial]{sources/factorial.cbc} %コードセグメントは手続きを細かく分割したものなので、Cの関数と比べより %小さい処理単位となる。しかしコードセグメント内部ではCのステートメント @@ -130,11 +130,14 @@ メントのインタフェイスに渡す引数列を並べて記述する。(同じく軽量継続の 例がコード \ref{code:factorial}にみられる。) - %この引数列は継続前のコードセグメントの状態、つまりインタフェイスの値に %よって一意に決まる -\lstinputlisting[caption=コードセグメント例(階乗計算),label=code:factorial]{sources/factorial.cbc} +この例の様に、プログラムはforやwhileなどのループ制御構造を含んでいない +。代わりに、コードセグメント\verb|factorial0|の様に自分自身への軽量継 +続を用いることで繰り返し処理を実現している。Cでは再帰関数を使うことで +同じことを行えるが、そこにはスタックの拡張という処理が入る。しかしCbC +ではスタックの拡張は行われず、元の環境に戻ることはない。 \section{状態遷移に適した言語} @@ -164,9 +167,14 @@ \section{C with Continuation} -\ref{chp:intro}でも述べたようにCbCはCと互換性を持つことが望ましい。 -CbCをCと相互に利用するためには、Cの関数から継続を行った場合に元の環境 -に戻るための、特殊な継続を導入する必要がある。これを環境付き継続と呼ぶ。 +数学的検証や組み込み用途を目的として提案されたCbCであるが、既存のソフ +トウェアやシステムは膨大な数にのぼり、これらをCbCに置き換えるのは無理 +がある。そのため、少なくともソースコードのレベルでCとの互換性を持つこ +とが望ましい。 +Continuation based Cの名のとおり、CbCからCの関数の呼び出しは問題なく行 +える。しかしCbCをCと相互に利用するためには、Cの関数から継続を行った場 +合に元の環境に戻るための、特殊な継続を導入する必要がある。これを環境付 +き継続と呼ぶ。 この環境付き継続を導入した言語はC with Continuation(CwC)と呼ばれ、Cと CbCの両方の機能をもつ言語となる。また、 C、CbCはCwCのサブセットと考え @@ -184,7 +192,7 @@ \end{figure} -\subsection{環境付き継続} +\subsection{環境付き継続}\label{ssec:gotowithenv} 環境付き継続を用いる場合、Cの関数からコードセグメントへ継続する際に \_\_returnという名前で表される特殊なコードセグメントポインタを渡す。コ ード\ref{code:cbcreturn}参照。 @@ -192,10 +200,10 @@ 事で元のCの環境に復帰することが可能となる。 ただし復帰先は\_\_returnを参照した関数が終了する位置である。 図\ref{fig:cbcreturn}にこの様子を表した。 -\lstinputlisting[ - caption=\_\_returnの例, - label=code:cbcreturn, - emph=\_\_return] +\lstinputlisting + [caption=\_\_returnの例, + label=code:cbcreturn, + emph=\_\_return] {sources/cbcreturn.cbc} この様な形にすることでcode segment側では関数から呼ばれたか、コードセグ メントからの継続かを考慮する必要がない。また、\verb|funcA|からもその内 @@ -211,8 +219,47 @@ -%CbCにおける環境付き継続の構文は幾度か改訂されている。 -% TODO _CbC_return + +\section{CbCの用途・先行研究} +CbCによるプログラム記述の例として本研究室における研究例を紹介する。 + +\subsection{プログラムの検証} +計算機科学の進歩により、ソフトウェアは大規模かつ複雑なものになっている +。しかしそれに応じて、設計段階において誤りが生じる可能性も高くなってき +ており、設計されたシステムに誤りがないことを保証するための論理設計や検 +証手法及びデバッグ手法の確立が重要な課題となっている。 + +どんなプログラムでも状態と状態遷移が存在し、その全てを網羅的に探索する +ことでデッドロックなどの望ましくない状態を検出することができる。探索に +はさまざまな手法が考えられるが、プログラムを直接状態遷移として記述でき +ればこの探索に有利となる。 + +本研究室の下地らはこの特徴を持つCbCを用いて線形時相論理による検証を提 +案し、その有用性を示した。\cite{bib:shimoji} + + +\subsection{ゲームプログラミングにおけるデモンストレーション} +我々は家庭用ゲーム機で動作するゲームプログラムのオープンな開発フレーム +ワークに関する研究も行ってきた。家庭用ゲーム機の多くは特殊なアーキテク +チャをもち、そのためゲームプログラムには汎用性や冗長性が極めて小さく、 +移植が困難という問題がある。 + +その問題の解決に、ゲームプログラム全体を小規模なプログラムの集合である +``デモンストレーション''に分割するという手法を本研究室の金城らが提案し +た。\cite{bib:kinjo},\cite{bib:chiaki} + +このデモンストレーション手法はプログラムを細かく分割するため、ゲーム機 +や組み込みなどの資源が制約された環境ではサブルーチンによるスタック操作 +がネックとなる。そのためこの手法ではプログラム分割の実現にCbCを用いて +おり、CからCbCへの機械的な変換方法について述べている。 + + +\subsection{ハードウェア記述、ソフトウェアプログラミング} +% TODO + +\subsection{軽量継続を用いたプログラミング} +以上の研究はそれぞれ軽量継続というCbC言語の特徴を利用して進められている。 + \section{gccベースコンパイラの現時点の問題点} @@ -220,7 +267,7 @@ 当初CbCのコンパイラはmicro-cをベースとしたものが使われていた。しかしよ り多くのアーキテクチャや最適化機能などの要望により、 2008年の研究をも -って\ref{}GCCによる実装が行われた。この研究によりコードセグメント、継 +って\bibref{kent-2008}GCCによる実装が行われた。この研究によりコードセグメント、継 続制御構造などは実装され、一通りのCbCプログラムのコンパイルが可能とな った。 @@ -243,9 +290,9 @@ 入れ替えるような処理では並列代入が行われることになる。 前実装では単純な並列代入に対しては問題がなかったが、構造体の混じる 複雑な並列代入ではバグが見つかっている。 - \lstinputlisting[ - caption=並列代入の例, - label=code:parallel-example] + \lstinputlisting + [caption=並列代入の例, + label=code:parallel-example] {sources/parallel-example.cbc} \item PowerPCにおける間接継続(indirect goto) diff -r aa09c34b90d3 -r 50e23a4b2f40 evaluations.tex --- a/evaluations.tex Mon Feb 01 20:37:36 2010 +0900 +++ b/evaluations.tex Fri Feb 05 10:00:05 2010 +0900 @@ -1,4 +1,4 @@ -\chapter{評価} +\chapter{評価・考察} \label{chp:eval} 本章では本研究の評価を行う。 @@ -7,12 +7,12 @@ 最後に、\ref{chp:task}章のTaskManagerの開発を元に、CbC言語そのものの記述性、プログラミング手法などについて考察する。 - -\section{gccでを使うことの利点・欠点} +\section{gccを使うことの利点・欠点} \label{sec:merit} -これまでCbCのコンパイルに使用してきたmc(micro-c)に対し、新しくgccが使 -用可能となった。ここでgccを用いることの利点と欠点について考察する。 +これまでCbCのコンパイルに使用してきたmc(micro-c)に対し、新しくgccが +CwCのフルセットとして使用可能となった。ここでgccを用いることの利点と欠 +点について考察する。 \subsection*{アーキテクチャ} @@ -65,6 +65,8 @@ スタック操作はコードセグメントには現れないため、このオーバヘッドがgcc では不利な点である。 +% TODO: 取り除くには… + % スタック処理が残ってしまう % 同じくcpuに特化したコンパイルに比べると @@ -92,21 +94,40 @@ \section{性能評価} +\subsection{評価項目、比較対象} +コンパイラの出力した実行ファイルを複数回実行し、その実効速度を測定する +。CbCは実用的なプログラムの記述を目的としているので、プログラムの動作 +速度は性能の評価として妥当だと考えられる。 + +またもう一つの項目として、出力した実行ファイルのファイルサイズも評価す +る。一般的なプログラムではファイルサイズを気にすることは少ないが、CbC +の用途には組み込みなども考えられているため、ファイルサイズの影響は大き +い。比較する際はstripコマンドを用いてデバグ情報等を取り除いている。 +%SPUはm.. + +実効速度、ファイルサイズの比較対象として2つ用意した。 +一つは過去の研究でのGCCベースコンパイラ、つまり今回の改善を含めてない +ものである。こちらはGCCのバージョン4.2.3をベースとしている。 + +もう一つの比較対象にはmicro-cベースのコンパイラ(以下mc)を用いる。 +さらにGCCでは最適化による効果も評価するため、 +\begin{inparaenum}[\itshape 1)\ttfamily] + \item 最適化なし ``-O0'' + \item 速度最適化 ``-O2 -fomit-framepointer'' + \item サイズ最適化 ``-Os'' +\end{inparaenum} +についてもそれぞれ比較する。 + \subsection{評価手法と環境} -性能評価として、実際にコンパイラの出力した実行ファイルを複数回実行し、 -その実効速度の平均を測定する。 CbCは実用的なプログラムの記述を目的とし -ているので、プログラムの動作速度は性能評価として妥当だと考えられる。ま -た速度比較の対象として、もう一つのCbCコンパイラ実装であるmicro-cベース -のコンパイラ(以下mc)を用いる。 - 実行するプログラムとして、クイックソートのテストプログラムを作成した。 クイックソートは再帰呼び出しを伴うため、スタック操作が必須となる。その -ためより多く様々なコードセグメントへの継続制御が使用されることになり、 +ためより様々な状態でコードセグメントへの継続制御が使用されることになり、 CbCの性能評価に適していると考えられる。クイックソートはCbCに先立ってC -で実装し、参考文献\cite{bib:kinjo}で紹介する手法を用いてCbCに変換した。 +で実装し、参考文献\cite{bib:kinjo-2005}で紹介する手法を用いてCbCに変換 +した。このプログラムは付録\ref{apx:quicksort}に添付する。 -測定環境は両コンパイラが対応しているアーキテクチャ、OSから以下の5つ -の組み合わせ[CPUアーキテクチャ/OS種別]を選択した。 +測定環境は両コンパイラが対応しているアーキテクチャ、OSから以下の5つの +組み合わせ[CPUアーキテクチャ/OS種別]を選択した。 \begin{itemize} \item ppc/OS X \item ppc/linux @@ -115,122 +136,282 @@ \item x86/linux \end{itemize} なお、mcはmips,armにも対応しているが、現在その処理系が用意できなかった -ので割愛した。 +ので割愛している。また、GCC-4.2.3ベースコンパイラはppcでは実行不能であ +ったためx86のみとなる。 + +各評価マシンの詳細は付録\ref{sec:}に掲載する。 %gccのコンパイルでは``-O2 -fomit-pointer''の最適化を付加して測定している。 % noreturnもON. % x86ではfastcallもON, \subsection{評価結果} -実効速度の測定結果を表\ref{tab:eval}に示す。 -ただし環境毎にCPUの速度は異なるので、上下の比較には意味はない。 +実効速度の測定結果を表\ref{tab:eval-speed}に示す。 +ただし環境毎にCPU速度は異なるので、上下の比較には意味はない。 +% -O2で約10秒になる要素数を選んだ方がいいかもしれない +\begin{table}[htpb] + \centering + \begin{tabular}{|c|c|c|c|c|} \hline + \multirow{2}{*}{ \backslashbox{CPU/OS}{コンパイラ} } + & \multicolumn{3}{c|}{gcc} & \multirow{2}{*}{mc} \\ \cline{2-4} + &最適化なし&速度最適化&サイズ最適化& \\ \hline + x86/OS X & 5.901 & 2.434 & 2.785 & 2.857 \\ \hline + x86/Linux & 5.732 & 2.401 & 2.876 & 2.254 \\ \hline + ppc/OS X &14.875 & 2.146 & 2.170 & 4.811 \\ \hline + ppc/Linux &19.793 & 3.955 & 4.013 & 6.454 \\ \hline + ppc/PS3 &39.176 & 5.874 & 6.111 &11.121 \\ \hline + \end{tabular} + \caption{アーキテクチャ毎のgccとmcの速度比較(単位: 秒)} + \label{tab:eval-speed} +\end{table} + +次に実行ファイルのstrip前のファイルサイズを表\ref{tab:eval-nostrip} +に、strip後のファイルサイズを表\ref{tab:eval-strip}に示す。 + +\begin{table}[htpb] + \centering + \begin{tabular}{|c|c|c|c|c|c|} \hline + \multirow{3}{*}{ \backslashbox{CPU/OS}{コンパイラ} } + & \multicolumn{4}{c|}{GCC} & \multirow{3}{*}{mc} \\ \cline{2-5} + & \multicolumn{2}{c|}{デバグ情報(-g)付き} & \multicolumn{2}{c|}{デバグ情報なし} & \\ \cline{2-5} + & -O2 & -Os & -O2 & -Os & \\ \hline + x86/OS X & 11100 & 11100 & 9804 & 9804 & 11136 \\ \hline + x86/Linux & 18444 & 17310 & 8216 & 8214 & 9844 \\ \hline + ppc/OS X & 10392 & 10392 & 9172 & 9172 & 14396 \\ \hline + ppc/Linux & 25138 & 23876 & 13030 & 13028 & 15453 \\ \hline + ppc/PS3 & 22142 & 20452 & 9906 & 9672 & 15463 \\ \hline + \end{tabular} + \caption{実行ファイルのファイルサイズ比較 not stripped(単位: bytes)} + \label{tab:eval-nostrip} +\end{table} \begin{table}[htpb] \centering \begin{tabular}{|c|c|c|c|} \hline \multirow{2}{*}{ \backslashbox{CPU/OS}{コンパイラ} } - & \multicolumn{2}{c|}{gcc} & \multirow{2}{*}{mc} \\ \cline{2-3} - & 最適化なし & 最適化あり & \\ \hline - x86/OS X & 5.901 & 2.213 & 2.857 \\ \hline - x86/Linux & 5.869 & 2.401 & 2.254 \\ \hline - ppc/OS X &14.875 & 2.146 & 4.811 \\ \hline - ppc/Linux &19.722 & 3.927 & 6.596 \\ \hline - ppc/PS3 &26.169 & 6.104 &11.536 \\ \hline + & \multicolumn{2}{c|}{GCC} & \multirow{2}{*}{mc} \\ \cline{2-3} + & -O2 & -Os & \\ \hline + x86/OS X & 9176 & 9176 & 9172 \\ \hline + x86/Linux & 5752 & 5752 & 5796 \\ \hline + ppc/OS X & 8576 & 8576 & 12664 \\ \hline + ppc/Linux & 10068 & 10068 & 9876 \\ \hline + ppc/PS3 & 6960 & 6728 & 8636 \\ \hline \end{tabular} - \caption{アーキテクチャ毎のgccとmcの速度比較(単位: 秒)} - \label{tab:eval} + \caption{実行ファイルのファイルサイズ比較 stripped(単位: bytes)} + \label{tab:eval-strip} \end{table} + +最後に、本研究での実装GCC-4.4.2と以前のバージョンGCC-4.2.3との比較であ +る。こちらはx86のみ、最適化も-Osは対応していない。 +\begin{table}[htpb] + \centering + \begin{tabular}{|c|c|c|c|c|} \hline + \multirow{2}{*}{ \backslashbox{CPU/OS}{コンパイラ} } + & \multicolumn{2}{c|}{CbC on GCC-4.4.2} & + \multicolumn{2}{c|}{CbC on GCC-4.2.3} \\ \hline + & -O0 & -O2 & -O0 & -O2 \\ \hline + x86/OS X & 5.907 & 2.434 & 4.668 & 3.048 \\ \hline + x86/Linux & 5.715 & 2.401 & 4.525 & 2.851 \\ \hline + \end{tabular} + \caption{GCC-4.2.3ベースとGCC-4.4.2ベースの速度比較(単位: 秒)} + \label{tab:eval-speed} +\end{table} + + % ppcのが圧倒的に早い % x86ではあまりさはでない % 最適化が効いている +% TODO: ファイルサイズの比較 +% SPUに送るのに有利 +% コンパイルにかかる時間? -まずどのアーキテクチャにおいてもgccの最適化の効果が大きいことが分かる -。 x86では約2.5倍、ppcでは4~7倍もの差が生じている。ppcの方で異様に効果 -が高いように見えるのは、関数やコードセグメントの引数渡しがレジスタベー -スのため、最適化なしの場合には無駄なメモリアクセスが生じているためであ -る。 +\subsection{評価結果考察} +% stripするとx86はサイズに変化がない +\subsubsection{速度面} +まずは速度面からこの測定結果を考察する。 + +まずどのアーキテクチャにおいても、GCCの最適化が大きな速度差を生み出し +ている事が分かる。最適化なしと速度最適化を比較すると、x86では2.4倍、 +ppcでは5〜7倍もの差が生じている。 +ただしppcのこの以上な速度差は\ref{ssec:}並列代入で示した様に、継続の引 +数を全て一時変数に入れていることが大きい。その場合最適化なしではすべて +の引数を一度メモリに確保するので、その分逆に遅くなっているのだと考えら +れる。しかしながら最適化を有効にすることでそのメモリへの一時変数の確保 +も解消されるということが分かった。 + +x86はOS XとLinuxの環境で測定を行った。速度最適化のGCCとmcを比べると、 +OS Xではmcに比べて20\%ほど早くなった事が分かる。しかし逆にLinux環境で +は6\%の速度低下が示された。どちらにしてもppcほどの良い結果ではない。こ +れは自由に使えるレジスタが極めて少ないというx86の特殊なアーキテクチャ +が要因だと考えられる。そのためGCCの最適化が十分に機能できなかった可能 +性がある。この6\%の差は実用レベルでは問題なく、プログラムの構成によっ +ては結果は逆転する事も十分にある。 -x86はOS XとLinuxの環境で測定を行った。OS Xではmcに比べて20\%ほど早くな -ったことが分かる。しかし逆にLinux環境では6\%の速度低下が示された。 -どちらにおいてもppcほどの良い結果ではない。これは自由に使えるレジスタ -が極めて少ないというx86の特殊なアーキテクチャが要因だと考えられる。そ -のためにgccの最適化が十分に働かなかった可能性がある。逆に言うとmcが高 -いレベルでx86のアセンブラ命令を実行しているともとれる。この6\%の差は実 -用レベルでは問題なく、プログラムの構成によっては結果は逆転する事も十分 -にある。 +ppcにおいてはどのオペレーティングシステムでも、速度最適化を使ったGCCは +mcに比べて早い事が分かる。いずれも約2倍、もしくはそれ以上に速度が向上 +している。これはGCCの最適化機構が十分に働いている要因が大きい。 + +\subsubsection{アセンブラ比較} +実際に出力されたアセンブラから速度向上の要因を確かめるため、quicksort +プログラムで使用されているコードセグメントを一つ例に挙げる。CbCのプロ +グラムソースがコード \ref{code:divider-e}である。このコードセグメント +の速度最適化を使ったGCCによる出力がコード\ref{code:divider-e-gcc}、mc +による出力がコード \ref{code:divider-e-mc}である。 +どちらもアーキテクチャはppcである。 -ppcではどのオペレーティングシステムでもmcに比べてgccが早いことが分かる -。いずれも約2倍近くあるいはそれ以上に速度が向上している。これはgccの最 -適化機構が十分に働いている要因が大きい。 +%まずどのアーキテクチャにおいてもgccの最適化の効果が大きいことが分かる +%。 x86では約2.5倍、ppcでは4~7倍もの差が生じている。ppcの方で異様に効果 +%が高いように見えるのは、関数やコードセグメントの引数渡しがレジスタベー +%スのため、最適化なしの場合には無駄なメモリアクセスが生じているためであ +%る。 + +%x86はOS XとLinuxの環境で測定を行った。OS Xではmcに比べて20\%ほど早くな +%ったことが分かる。しかし逆にLinux環境では6\%の速度低下が示された。 +%どちらにおいてもppcほどの良い結果ではない。これは自由に使えるレジスタ +%が極めて少ないというx86の特殊なアーキテクチャが要因だと考えられる。そ +%のためにgccの最適化が十分に働かなかった可能性がある。逆に言うとmcが高 +%いレベルでx86のアセンブラ命令を実行しているともとれる。この6\%の差は実 +%用レベルでは問題なく、プログラムの構成によっては結果は逆転する事も十分 +%にある。 + +%ppcではどのオペレーティングシステムでもmcに比べてgccが早いことが分かる +%。いずれも約2倍近くあるいはそれ以上に速度が向上している。これはgccの最 +%適化機構が十分に働いている要因が大きい。 %\subsubsection{アセンブラ比較} -比較のため、quicksortプログラムで使われているコードセグメントを一つ例 -にあげる。 CbCのソースがコード\ref{code:divider_s}、そのコードセグメン -トのgccによる出力がコード\ref{code:divider_s_gcc}、mcによる出力がコー -ド \ref{code:divider_s_mc} である。 - +%比較のため、quicksortプログラムで使われているコードセグメントを一つ例 +%にあげる。 CbCのソースがコード\ref{code:divider_s}、そのコードセグメン +%トのgccによる出力がコード\ref{code:divider_s_gcc}、mcによる出力がコー +%ド \ref{code:divider_s_mc} である。 +% \lstinputlisting[ caption=quicksortプログラムで使われているコードセグメント, - label=code:divider_s] - {sources/quicksort_divider_s.cbc} + label=code:divider-e] + {sources/divider-e.cbc} \begin{minipage}[t]{.45\textwidth} \lstinputlisting[ - caption=divider\_sのgccによる出力(PowerPC), - label=code:divider_s_gcc] - {sources/gcc_divider_s.asm} + caption=divider\_eのgccによる出力(ppc), + label=code:divider-e-gcc] + {sources/divider-e-gcc.asm} \end{minipage} \hfill \begin{minipage}[t]{.45\textwidth} \lstinputlisting[ - caption=divider\_sのmcによる出力(PowerPC), - label=code:divider_s_mc] - {sources/mc_divider_s.asm} + caption=divider\_eのmcによる出力(ppc), + label=code:divider-e-mc] + {sources/divider-e-mc.asm} \end{minipage} -もっとも比較しやすい箇所は\verb|s+1|の処理である。 -コード\ref{code:divider_s_gcc}のgccではこれを1命令の\verb|addi 4,4,1| +もっとも比較しやすい箇所は\verb|e-1|の処理である。 +コード\ref{code:divider-e-gcc}のgccではこれを1命令の\verb|addi 5,5,-1| で行っている。 mcではこれが\verb|mr, addi, mr|という3命令になっている 。これは変数\verb|s|の値を一度別のレジスタに移して計算するという処理で ある。この様な細かい命令の展開が速度に差が出る要因である。 -またこの出力からも、x86での速度差が少ないことが頷ける。引数のほとんど -をメモリに格納するx86では計算には一度レジスタに格納しないといけない事 -から、結局3 命令になる。そのためgccの最適化が十分には働かないのである。 -実際x86でのdivider\_sのアセンブラ出力はgccでは 24命令、mcでは18命令と -となっている。 +またこのppcのアセンブラからも、x86での速度差が少ないことが頷ける。引数 +のほとんどをメモリに格納するx86では、計算のために一度レジスタに格納し +ないといけないことから、この命令は結局3命令になるはずであり、実際にx86 +ではGCC,mc共にそのようなコードが出力されていた。 この結果より、CbCで記述されたプログラムではレジスタが多い方が実効速度 の面で有利であるということが分る。これは他のコンパイラ言語でも同じ事が -言えるが、前の(手続きやメソッドにおける)環境を保持する必要がないCbCでは -その影響がより強い。 +言えるが、(手続きやメソッドにおける)前の環境を保持する必要がないCbC +ではその影響がより強い。 %レジスタの数は +\subsubsection{ファイルサイズ} + +次に、実行ファイルのファイルサイズの面から考察する。 + +実行ファイルのファイルサイズは組み込み用途のプログラムには重要な要素と +なる。多くの場合、組み込み機器では大容量のメモリは用意されておらず、 +OSも存在しないため仮想記憶の概念がない。そのためメモリに乗り切らないプ +ログラムはそもそも実行不能である。 + +まず、評価の主な特徴として、strip後のファイルサイズ\ref{tab:eval-strip} +をみると、x86ではmcとGCCでほとんど差がない事が分かる。この環境では速度 +面でも大きな差はなく、mcの精度の良さがわかる。 + +デバグ情報のあり/なし/strip後との比較で大きな差が出ているのは全て +Linux(PS3含む)である。Linuxでは実行ファイルのファイル形式にELFを用い +ている。この形式はLinuxの標準的な実行形式で、様々な研究に用いられてい +るため、Mach-Oと比べて付加機能が豊富である。そのため多くの情報が含まれ +ているのだと考えられる。 +Linuxは組み込み用途に多く用いられているため、極端にメモリの制限された +環境ではデバグが困難になることが考えられる。 + +また興味深い特徴として、-O2と-Osの差がppc/PS3以外は全くないことも分か +った。 -Osは-O2の最適化機能から、ファイルサイズが大きくなるものを除外 +したものである。評価結果には-Osによるファイルサイズの減少はほとんどな +く、しかし速度は少々遅くなっている。このことからCbCによるプログラムで +は-Osを用いる必要はなく、-O2で十分であることが分かった。 -%まずどのアーキテクチャにおいても、gccを使った場合は最適化の有無で大きな差が出ていることが分かる。 -%ppc/OS Xでは倍以上の速度を示すことができた。 -%これはgccの最適化機構が十分に働いている要因が大きい。 -%特に構造体のポインタからそのメンバにアクセスする処理(Cにおけるアロー演算子である)では違いがでた。ppcではその処理のために -%特に共通部分式除去(Common Subexpression Elimination)の処理はmcにはなく、この例題では多数その処理が適用可能な部分が出てきているためその影響があるものと思われる。 -%x86/OS Xでは約23\%ほど高速化された。 -%x86/OS Xでは約23\%、 ppc/OS Xでは最適化ありのgccはmcと比べて倍以上の速度を示すことができた。 -%しかしx86/Linuxでは逆に6\%ほど速度が低下している事が分かる。 -%この主な原因は関数呼出し時のスタック操作である。今回\ref{chp:impl}章で説明したように、継続制御の実装には末尾最適化を応用する形をとった。そのためgccとしては関数として処理しているので、一部のスタック操作(x86なら\verb|pop, push|である)が残ってしまうことが分かっている。元から継続制御用に設計されたmcではそれが存在しないため、その分の処理が速度としてに現れたものと思われる。 -%レジスタの多いアーキテクチャであるほど、速度は改善されると考えられる。 -%その中でPowerPC(ppc)での最適化ありとなしの差が非常に大きい。これはppcアセンブラの特徴であるレジスタの多さが原因の一つである。ppcの関数呼出し規約ではほとんどの引数はレジスタにのせて呼出し先に渡すことができる。 -%しかし呼出し先でさらに別の関数を呼び出す場合はそのレジスタを置き換えるため、スタックに積むなど値を保存しなければならない。この処理を最適に行うには呼び出し後の使用する変数、保持すべき変数を考慮する必要があるため、単純に全てをスタックに積む事とは違う処理が必要になる。 +% ELF, Mach-O +% o OS Xはデバグ情報が少ない。逆か、ELFが多いのか +% o x86でほぼ同じサイズ +% - mcがんばってる +% o -Osと-O2が変わらない、でも速度は-O2 +% o PS3とLinuxで大きく違う +% + +\subsubsection{以前のバージョンとの速度比較}\label{sec:compare2old} +古いバージョンとの速度差についても考察を重ねる。 +実行環境にppcが存在しないのは、\ref{sec:impl-indirect}節における問題の +ためである。今回用意したプログラムは間接継続を用いているため、古いバー +ジョンではバグにより実行できなかった。 +また、速度向上に関する改善は\ref{sec:impl-fastcall}節におけるfastcall +の追加のみなであり、このfastcallはx86環境にしか影響しないはずである。 -\section{CbCでのプログラム} +表を見ると、\verb|-O0|の場合は新バージョンの方が旧バージョンより遅くな +っているのが分かる。これは\ref{sec:impl-parallel}節の一時変数への退避 +処理のためだと考えられる。この処理では、最適化により無駄なスタックへの +アクセスは排除されることを期待して実装していた。\verb|-O0|は最適化を行 +わないので、この場合は逆に遅くなっている。これは予想通りの結果である。 +しかし最適化を行った場合は新バージョンに劣化はない。したがって一時変数 +への退避処理においては、期待通り無駄な命令は十分に排除されていることが +分かった。 + +また、それだけなら速度はほぼ同じ結果がでるところだが、ここではいずれの +環境でも新しいバージョンの方が速い。15~20\%ほど高速化していることがわ +かる。これは本研究で行った改善の一つ、fastcallの影響である。 -\section{本研究における成果} -本研究では、これまでバグが多くプログラムの動作に問題のあった -GCCベースのCbCコンパイラを、実用的なプログラムが動くレベルまで改善する -ことができた。 + +\section{CbCでのプログラミング} + +% TODO: + + +\section{バージョン管理} + +% TODO: version management + + -\section{以前のバージョンとの速度比較} +\section{本研究における成果} +本研究では、これまでバグが多くプログラムの動作に問題のあった GCCベース +のCbCコンパイラを、実用的なプログラムが動くレベルまで改善することがで +きた。 + +2008年の研究にて、GCCベースのCbCコンパイラは一部実装されていた。 +そして本研究により、そのコンパイラの改善が行われた。 + +\begin{itemize} + \item CwCの全機能に対応 + \item 一部バグのあったアーキテクチャに対応 + \item バージョン管理の + \item 宣言の簡略化 + \item +\end{itemize} + + + + + + diff -r aa09c34b90d3 -r 50e23a4b2f40 figures/cbcreturn.eps --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figures/cbcreturn.eps Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,919 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: /home/kent/WorkSpace/Mercurial/master-paper/figures/cbcreturn.dia +%%Creator: Dia v0.97 +%%CreationDate: Fri Jan 29 16:03:03 2010 +%%For: kent +%%Orientation: Portrait +%%Magnification: 1.0000 +%%BoundingBox: 0 0 426 318 +%%BeginSetup +%%EndSetup +%%EndComments +%%BeginProlog +[ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright +/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one +/two /three /four /five /six /seven /eight /nine /colon /semicolon +/less /equal /greater /question /at /A /B /C /D /E +/F /G /H /I /J /K /L /M /N /O +/P /Q /R /S /T /U /V /W /X /Y +/Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c +/d /e /f /g /h /i /j /k /l /m +/n /o /p /q /r /s /t /u /v /w +/x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright +/ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior +/acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf +/threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla +/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde +/Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex +/Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring +/ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis +/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave +/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def +/cp {closepath} bind def +/c {curveto} bind def +/f {fill} bind def +/a {arc} bind def +/ef {eofill} bind def +/ex {exch} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth pop} bind def +/tr {translate} bind def + +/ellipsedict 8 dict def +ellipsedict /mtrx matrix put +/ellipse +{ ellipsedict begin + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def /savematrix mtrx currentmatrix def + x y tr xrad yrad sc + 0 0 1 startangle endangle arc + savematrix setmatrix + end +} def + +/mergeprocs { +dup length +3 -1 roll +dup +length +dup +5 1 roll +3 -1 roll +add +array cvx +dup +3 -1 roll +0 exch +putinterval +dup +4 2 roll +putinterval +} bind def +/dpi_x 300 def +/dpi_y 300 def +/conicto { + /to_y exch def + /to_x exch def + /conic_cntrl_y exch def + /conic_cntrl_x exch def + currentpoint + /p0_y exch def + /p0_x exch def + /p1_x p0_x conic_cntrl_x p0_x sub 2 3 div mul add def + /p1_y p0_y conic_cntrl_y p0_y sub 2 3 div mul add def + /p2_x p1_x to_x p0_x sub 1 3 div mul add def + /p2_y p1_y to_y p0_y sub 1 3 div mul add def + p1_x p1_y p2_x p2_y to_x to_y curveto +} bind def +/start_ol { gsave 1.1 dpi_x div dup scale} bind def +/end_ol { closepath fill grestore } bind def +28.346000 -28.346000 scale +-1.050000 -12.565163 translate +%%EndProlog + + +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 1.400000 2.250000 m 1.400000 6.250000 l 2.400000 6.250000 l 2.400000 2.250000 l f +0.000000 0.000000 0.000000 srgb +n 1.400000 2.250000 m 1.400000 6.250000 l 2.400000 6.250000 l 2.400000 2.250000 l cp s +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 1.400000 7.250000 m 1.400000 11.250000 l 2.400000 11.250000 l 2.400000 7.250000 l f +0.000000 0.000000 0.000000 srgb +n 1.400000 7.250000 m 1.400000 11.250000 l 2.400000 11.250000 l 2.400000 7.250000 l cp s +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 7.400000 3.250000 m 7.400000 7.250000 l 8.400000 7.250000 l 8.400000 3.250000 l f +0.000000 0.000000 0.000000 srgb +n 7.400000 3.250000 m 7.400000 7.250000 l 8.400000 7.250000 l 8.400000 3.250000 l cp s +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 7.400000 8.250000 m 7.400000 11.250000 l 8.400000 11.250000 l 8.400000 8.250000 l f +0.000000 0.000000 0.000000 srgb +n 7.400000 8.250000 m 7.400000 11.250000 l 8.400000 11.250000 l 8.400000 8.250000 l cp s +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 13.300000 3.850000 m 13.300000 8.850000 l 14.300000 8.850000 l 14.300000 3.850000 l f +0.000000 0.000000 0.000000 srgb +n 13.300000 3.850000 m 13.300000 8.850000 l 14.300000 8.850000 l 14.300000 3.850000 l cp s +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 2.400000 6.250000 m 3.396000 6.250000 5.400000 1.250000 7.095306 2.945306 c s +[] 0 sd +0 slj +0 slc +n 7.360472 3.210472 m 6.830141 3.033695 l 7.095306 2.945306 l 7.183695 2.680141 l ef +n 7.360472 3.210472 m 6.830141 3.033695 l 7.095306 2.945306 l 7.183695 2.680141 l cp s +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 7.400000 11.250000 m 6.404000 11.250000 5.400000 7.250000 2.830902 7.250000 c s +[] 0 sd +0 slj +0 slc +n 2.455902 7.250000 m 2.955902 7.000000 l 2.830902 7.250000 l 2.955902 7.500000 l ef +n 2.455902 7.250000 m 2.955902 7.000000 l 2.830902 7.250000 l 2.955902 7.500000 l cp s +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 8.400000 7.250000 m 9.396000 7.250000 11.300000 1.850000 12.995306 3.545306 c s +[] 0 sd +0 slj +0 slc +n 13.260472 3.810472 m 12.730141 3.633695 l 12.995306 3.545306 l 13.083695 3.280141 l ef +n 13.260472 3.810472 m 12.730141 3.633695 l 12.995306 3.545306 l 13.083695 3.280141 l cp s +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 13.300000 8.850000 m 3.700000 17.075000 6.850000 9.200000 3.639642 7.683998 c s +[] 0 sd +0 slj +0 slc +n 3.300549 7.523870 m 3.859425 7.511311 l 3.639642 7.683998 l 3.645922 7.963436 l ef +n 3.300549 7.523870 m 3.859425 7.511311 l 3.639642 7.683998 l 3.645922 7.963436 l cp s +gsave 1.500000 4.550000 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 1.937092 4.550000 translate 0.035278 -0.035278 scale +start_ol +1535 3200 moveto +1185 3200 1008 2840 conicto +832 2481 832 1759 conicto +832 1039 1008 679 conicto +1185 320 1535 320 conicto +1887 320 2063 679 conicto +2240 1039 2240 1759 conicto +2240 2481 2063 2840 conicto +1887 3200 1535 3200 conicto +1536 3584 moveto +2127 3584 2439 3116 conicto +2752 2649 2752 1759 conicto +2752 871 2439 403 conicto +2127 -64 1536 -64 conicto +944 -64 632 403 conicto +320 871 320 1759 conicto +320 2649 632 3116 conicto +944 3584 1536 3584 conicto +end_ol grestore +gsave 1.550000 9.500000 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 1.987092 9.500000 translate 0.035278 -0.035278 scale +start_ol +640 384 moveto +1408 384 lineto +1408 3136 lineto +576 2944 lineto +576 3328 lineto +1434 3520 lineto +1920 3520 lineto +1920 384 lineto +2688 384 lineto +2688 0 lineto +640 0 lineto +640 384 lineto +end_ol grestore +gsave 7.550000 5.500000 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 7.989589 5.500000 translate 0.035278 -0.035278 scale +start_ol +1535 3200 moveto +1185 3200 1008 2840 conicto +832 2481 832 1759 conicto +832 1039 1008 679 conicto +1185 320 1535 320 conicto +1887 320 2063 679 conicto +2240 1039 2240 1759 conicto +2240 2481 2063 2840 conicto +1887 3200 1535 3200 conicto +1536 3584 moveto +2127 3584 2439 3116 conicto +2752 2649 2752 1759 conicto +2752 871 2439 403 conicto +2127 -64 1536 -64 conicto +944 -64 632 403 conicto +320 871 320 1759 conicto +320 2649 632 3116 conicto +944 3584 1536 3584 conicto +end_ol grestore +gsave 7.500000 9.950000 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 7.939589 9.950000 translate 0.035278 -0.035278 scale +start_ol +640 384 moveto +1408 384 lineto +1408 3136 lineto +576 2944 lineto +576 3328 lineto +1434 3520 lineto +1920 3520 lineto +1920 384 lineto +2688 384 lineto +2688 0 lineto +640 0 lineto +640 384 lineto +end_ol grestore +gsave 13.400000 6.600000 translate 0.035278 -0.035278 scale +start_ol +3136 3264 moveto +3136 2752 lineto +2892 2977 2616 3088 conicto +2340 3200 2030 3200 conicto +1418 3200 1093 2829 conicto +768 2459 768 1759 conicto +768 1061 1093 690 conicto +1418 320 2030 320 conicto +2340 320 2616 431 conicto +2892 543 3136 768 conicto +3136 256 lineto +2882 96 2599 16 conicto +2316 -64 2000 -64 conicto +1189 -64 722 424 conicto +256 913 256 1759 conicto +256 2607 722 3095 conicto +1189 3584 2000 3584 conicto +2320 3584 2603 3504 conicto +2887 3424 3136 3264 conicto +end_ol grestore +gsave 13.847080 6.600000 translate 0.035278 -0.035278 scale +start_ol +1535 3200 moveto +1185 3200 1008 2840 conicto +832 2481 832 1759 conicto +832 1039 1008 679 conicto +1185 320 1535 320 conicto +1887 320 2063 679 conicto +2240 1039 2240 1759 conicto +2240 2481 2063 2840 conicto +1887 3200 1535 3200 conicto +1536 3584 moveto +2127 3584 2439 3116 conicto +2752 2649 2752 1759 conicto +2752 871 2439 403 conicto +2127 -64 1536 -64 conicto +944 -64 632 403 conicto +320 871 320 1759 conicto +320 2649 632 3116 conicto +944 3584 1536 3584 conicto +end_ol grestore +gsave 1.050000 1.975000 translate 0.035278 -0.035278 scale +start_ol +1792 3712 moveto +1792 3328 lineto +1369 3328 lineto +1139 3328 1049 3237 conicto +960 3147 960 2912 conicto +960 2688 lineto +1664 2688 lineto +1664 2368 lineto +960 2368 lineto +960 0 lineto +512 0 lineto +512 2368 lineto +64 2368 lineto +64 2688 lineto +512 2688 lineto +512 2864 lineto +512 3307 718 3509 conicto +925 3712 1374 3712 conicto +1792 3712 lineto +end_ol grestore +gsave 1.274788 1.975000 translate 0.035278 -0.035278 scale +start_ol +448 1040 moveto +448 2688 lineto +896 2688 lineto +896 1057 lineto +896 689 1042 504 conicto +1188 320 1481 320 conicto +1832 320 2036 541 conicto +2240 763 2240 1145 conicto +2240 2688 lineto +2688 2688 lineto +2688 0 lineto +2240 0 lineto +2240 384 lineto +2081 157 1870 46 conicto +1660 -64 1382 -64 conicto +923 -64 685 217 conicto +448 499 448 1040 conicto +end_ol grestore +gsave 1.679402 1.975000 translate 0.035278 -0.035278 scale +start_ol +2688 1646 moveto +2688 0 lineto +2240 0 lineto +2240 1632 lineto +2240 2001 2093 2184 conicto +1947 2368 1654 2368 conicto +1302 2368 1099 2146 conicto +896 1925 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1053 2529 1266 2640 conicto +1479 2752 1757 2752 conicto +2217 2752 2452 2471 conicto +2688 2191 2688 1646 conicto +end_ol grestore +gsave 2.084016 1.975000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 2.436185 1.975000 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 7.100000 2.025000 translate 0.035278 -0.035278 scale +start_ol +1792 3712 moveto +1792 3328 lineto +1369 3328 lineto +1139 3328 1049 3237 conicto +960 3147 960 2912 conicto +960 2688 lineto +1664 2688 lineto +1664 2368 lineto +960 2368 lineto +960 0 lineto +512 0 lineto +512 2368 lineto +64 2368 lineto +64 2688 lineto +512 2688 lineto +512 2864 lineto +512 3307 718 3509 conicto +925 3712 1374 3712 conicto +1792 3712 lineto +end_ol grestore +gsave 7.324788 2.025000 translate 0.035278 -0.035278 scale +start_ol +448 1040 moveto +448 2688 lineto +896 2688 lineto +896 1057 lineto +896 689 1042 504 conicto +1188 320 1481 320 conicto +1832 320 2036 541 conicto +2240 763 2240 1145 conicto +2240 2688 lineto +2688 2688 lineto +2688 0 lineto +2240 0 lineto +2240 384 lineto +2081 157 1870 46 conicto +1660 -64 1382 -64 conicto +923 -64 685 217 conicto +448 499 448 1040 conicto +end_ol grestore +gsave 7.729402 2.025000 translate 0.035278 -0.035278 scale +start_ol +2688 1646 moveto +2688 0 lineto +2240 0 lineto +2240 1632 lineto +2240 2001 2093 2184 conicto +1947 2368 1654 2368 conicto +1302 2368 1099 2146 conicto +896 1925 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1053 2529 1266 2640 conicto +1479 2752 1757 2752 conicto +2217 2752 2452 2471 conicto +2688 2191 2688 1646 conicto +end_ol grestore +gsave 8.134016 2.025000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 8.486185 2.025000 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 11.500000 1.950000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 11.852169 1.950000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 12.244298 1.950000 translate 0.035278 -0.035278 scale +start_ol +2176 2304 moveto +2176 3712 lineto +2624 3712 lineto +2624 0 lineto +2176 0 lineto +2176 384 lineto +2040 157 1832 46 conicto +1624 -64 1332 -64 conicto +855 -64 555 324 conicto +256 712 256 1344 conicto +256 1976 555 2364 conicto +855 2752 1332 2752 conicto +1624 2752 1832 2641 conicto +2040 2531 2176 2304 conicto +704 1344 moveto +704 865 900 592 conicto +1096 320 1439 320 conicto +1782 320 1979 592 conicto +2176 865 2176 1344 conicto +2176 1823 1979 2095 conicto +1782 2368 1439 2368 conicto +1096 2368 900 2095 conicto +704 1823 704 1344 conicto +end_ol grestore +gsave 12.651417 1.950000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 13.046043 1.950000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 13.248350 1.950000 translate 0.035278 -0.035278 scale +start_ol +2112 2560 moveto +2112 2176 lineto +1932 2272 1738 2320 conicto +1544 2368 1336 2368 conicto +1020 2368 862 2269 conicto +704 2170 704 1972 conicto +704 1821 814 1735 conicto +925 1649 1260 1571 conicto +1403 1538 lineto +1857 1438 2048 1255 conicto +2240 1072 2240 744 conicto +2240 371 1954 153 conicto +1668 -64 1167 -64 conicto +958 -64 732 -16 conicto +506 32 256 128 conicto +256 576 lineto +491 448 719 384 conicto +947 320 1170 320 conicto +1470 320 1631 425 conicto +1792 531 1792 722 conicto +1792 900 1678 994 conicto +1564 1089 1177 1177 conicto +1032 1212 lineto +621 1298 438 1476 conicto +256 1654 256 1964 conicto +256 2341 520 2546 conicto +784 2752 1269 2752 conicto +1509 2752 1721 2704 conicto +1933 2656 2112 2560 conicto +end_ol grestore +gsave 13.580535 1.950000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 13.975161 1.950000 translate 0.035278 -0.035278 scale +start_ol +2176 1375 moveto +2176 1848 1982 2108 conicto +1789 2368 1439 2368 conicto +1091 2368 897 2108 conicto +704 1848 704 1375 conicto +704 904 897 644 conicto +1091 384 1439 384 conicto +1789 384 1982 644 conicto +2176 904 2176 1375 conicto +2624 347 moveto +2624 -347 2323 -685 conicto +2023 -1024 1404 -1024 conicto +1174 -1024 971 -992 conicto +768 -961 576 -896 conicto +576 -448 lineto +766 -546 951 -593 conicto +1137 -640 1329 -640 conicto +1754 -640 1965 -415 conicto +2176 -190 2176 264 conicto +2176 448 lineto +2042 223 1833 111 conicto +1624 0 1332 0 conicto +848 0 552 376 conicto +256 753 256 1375 conicto +256 1999 552 2375 conicto +848 2752 1332 2752 conicto +1624 2752 1833 2640 conicto +2042 2529 2176 2304 conicto +2176 2688 lineto +2624 2688 lineto +2624 347 lineto +end_ol grestore +gsave 14.382280 1.950000 translate 0.035278 -0.035278 scale +start_ol +2549 2204 moveto +2714 2485 2942 2618 conicto +3171 2752 3482 2752 conicto +3899 2752 4125 2464 conicto +4352 2177 4352 1646 conicto +4352 0 lineto +3904 0 lineto +3904 1632 lineto +3904 2006 3769 2187 conicto +3634 2368 3356 2368 conicto +3017 2368 2820 2146 conicto +2624 1925 2624 1542 conicto +2624 0 lineto +2176 0 lineto +2176 1632 lineto +2176 2008 2041 2188 conicto +1906 2368 1624 2368 conicto +1289 2368 1092 2145 conicto +896 1922 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1046 2534 1255 2643 conicto +1465 2752 1753 2752 conicto +2044 2752 2247 2611 conicto +2451 2471 2549 2204 conicto +end_ol grestore +gsave 15.004191 1.950000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 15.398817 1.950000 translate 0.035278 -0.035278 scale +start_ol +2688 1646 moveto +2688 0 lineto +2240 0 lineto +2240 1632 lineto +2240 2001 2093 2184 conicto +1947 2368 1654 2368 conicto +1302 2368 1099 2146 conicto +896 1925 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1053 2529 1266 2640 conicto +1479 2752 1757 2752 conicto +2217 2752 2452 2471 conicto +2688 2191 2688 1646 conicto +end_ol grestore +gsave 15.803431 1.950000 translate 0.035278 -0.035278 scale +start_ol +896 3456 moveto +896 2688 lineto +1792 2688 lineto +1792 2368 lineto +896 2368 lineto +896 902 lineto +896 572 984 478 conicto +1073 384 1345 384 conicto +1792 384 lineto +1792 0 lineto +1345 0 lineto +836 0 642 194 conicto +448 389 448 902 conicto +448 2368 lineto +128 2368 lineto +128 2688 lineto +448 2688 lineto +448 3456 lineto +896 3456 lineto +end_ol grestore +showpage diff -r aa09c34b90d3 -r 50e23a4b2f40 figures/cbcreturn.pdf Binary file figures/cbcreturn.pdf has changed diff -r aa09c34b90d3 -r 50e23a4b2f40 figures/functionstack.dia Binary file figures/functionstack.dia has changed diff -r aa09c34b90d3 -r 50e23a4b2f40 figures/functionstack.eps --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figures/functionstack.eps Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,3175 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: /home/kent/WorkSpace/Mercurial/master-paper/figures/functionstack.dia +%%Creator: Dia v0.97 +%%CreationDate: Thu Feb 4 17:00:32 2010 +%%For: kent +%%Orientation: Portrait +%%Magnification: 1.0000 +%%BoundingBox: 0 0 426 363 +%%BeginSetup +%%EndSetup +%%EndComments +%%BeginProlog +[ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright +/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one +/two /three /four /five /six /seven /eight /nine /colon /semicolon +/less /equal /greater /question /at /A /B /C /D /E +/F /G /H /I /J /K /L /M /N /O +/P /Q /R /S /T /U /V /W /X /Y +/Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c +/d /e /f /g /h /i /j /k /l /m +/n /o /p /q /r /s /t /u /v /w +/x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright +/ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior +/acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf +/threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla +/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde +/Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex +/Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring +/ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis +/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave +/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def +/cp {closepath} bind def +/c {curveto} bind def +/f {fill} bind def +/a {arc} bind def +/ef {eofill} bind def +/ex {exch} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth pop} bind def +/tr {translate} bind def + +/ellipsedict 8 dict def +ellipsedict /mtrx matrix put +/ellipse +{ ellipsedict begin + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def /savematrix mtrx currentmatrix def + x y tr xrad yrad sc + 0 0 1 startangle endangle arc + savematrix setmatrix + end +} def + +/mergeprocs { +dup length +3 -1 roll +dup +length +dup +5 1 roll +3 -1 roll +add +array cvx +dup +3 -1 roll +0 exch +putinterval +dup +4 2 roll +putinterval +} bind def +/dpi_x 300 def +/dpi_y 300 def +/conicto { + /to_y exch def + /to_x exch def + /conic_cntrl_y exch def + /conic_cntrl_x exch def + currentpoint + /p0_y exch def + /p0_x exch def + /p1_x p0_x conic_cntrl_x p0_x sub 2 3 div mul add def + /p1_y p0_y conic_cntrl_y p0_y sub 2 3 div mul add def + /p2_x p1_x to_x p0_x sub 1 3 div mul add def + /p2_y p1_y to_y p0_y sub 1 3 div mul add def + p1_x p1_y p2_x p2_y to_x to_y curveto +} bind def +/start_ol { gsave 1.1 dpi_x div dup scale} bind def +/end_ol { closepath fill grestore } bind def +28.346000 -28.346000 scale +-3.300000 -13.550000 translate +%%EndProlog + + +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 5.950000 3.000000 m 5.950000 13.500000 l s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 7.050000 3.000000 m 7.050000 13.500000 l s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 6.000000 10.000000 m 6.000000 11.000000 l 7.000000 11.000000 l 7.000000 10.000000 l f +0.000000 0.000000 0.000000 srgb +n 6.000000 10.000000 m 6.000000 11.000000 l 7.000000 11.000000 l 7.000000 10.000000 l cp s +gsave 6.077500 10.721250 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 6.514592 10.721250 translate 0.035278 -0.035278 scale +start_ol +640 384 moveto +1408 384 lineto +1408 3136 lineto +576 2944 lineto +576 3328 lineto +1434 3520 lineto +1920 3520 lineto +1920 384 lineto +2688 384 lineto +2688 0 lineto +640 0 lineto +640 384 lineto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 6.000000 11.000000 m 6.000000 12.000000 l 7.000000 12.000000 l 7.000000 11.000000 l f +0.000000 0.000000 0.000000 srgb +n 6.000000 11.000000 m 6.000000 12.000000 l 7.000000 12.000000 l 7.000000 11.000000 l cp s +gsave 6.077500 11.721250 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 6.514592 11.721250 translate 0.035278 -0.035278 scale +start_ol +938 384 moveto +2643 384 lineto +2643 0 lineto +384 0 lineto +384 384 lineto +654 668 1119 1146 conicto +1584 1625 1704 1763 conicto +1931 2023 2021 2203 conicto +2112 2384 2112 2558 conicto +2112 2842 1913 3021 conicto +1715 3200 1397 3200 conicto +1171 3200 920 3104 conicto +669 3009 384 2816 conicto +384 3328 lineto +678 3455 933 3519 conicto +1188 3584 1400 3584 conicto +1959 3584 2291 3309 conicto +2624 3034 2624 2574 conicto +2624 2356 2540 2160 conicto +2457 1965 2237 1700 conicto +2177 1631 1852 1302 conicto +1528 974 938 384 conicto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 6.000000 12.000000 m 6.000000 13.000000 l 7.000000 13.000000 l 7.000000 12.000000 l f +0.000000 0.000000 0.000000 srgb +n 6.000000 12.000000 m 6.000000 13.000000 l 7.000000 13.000000 l 7.000000 12.000000 l cp s +gsave 6.077500 12.721250 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 6.514592 12.721250 translate 0.035278 -0.035278 scale +start_ol +1897 1936 moveto +2269 1862 2478 1627 conicto +2688 1392 2688 1046 conicto +2688 516 2331 226 conicto +1975 -64 1319 -64 conicto +1099 -64 865 -16 conicto +632 32 384 128 conicto +384 576 lineto +576 449 805 384 conicto +1035 320 1285 320 conicto +1720 320 1948 504 conicto +2176 688 2176 1039 conicto +2176 1363 1967 1545 conicto +1759 1728 1388 1728 conicto +1024 1728 lineto +1024 2112 lineto +1405 2112 lineto +1717 2112 1882 2250 conicto +2048 2388 2048 2648 conicto +2048 2915 1877 3057 conicto +1706 3200 1388 3200 conicto +1200 3200 985 3153 conicto +770 3107 512 3008 conicto +512 3456 lineto +773 3520 1001 3552 conicto +1229 3584 1431 3584 conicto +1952 3584 2256 3343 conicto +2560 3102 2560 2692 conicto +2560 2406 2387 2209 conicto +2215 2012 1897 1936 conicto +end_ol grestore +0.050000 slw +[] 0 sd +[] 0 sd +0 slc +n 5.000000 10.500000 m 5.888197 10.500000 l s +0.050000 slw +[] 0 sd +0 slj +0 slc +n 5.444098 10.750000 m 5.944098 10.500000 l 5.444098 10.250000 l s +gsave 7.850000 11.250000 translate 0.035278 -0.035278 scale +start_ol +896 384 moveto +896 -1024 lineto +448 -1024 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1032 2531 1240 2641 conicto +1448 2752 1737 2752 conicto +2217 2752 2516 2364 conicto +2816 1976 2816 1344 conicto +2816 712 2516 324 conicto +2217 -64 1737 -64 conicto +1448 -64 1240 46 conicto +1032 157 896 384 conicto +2368 1344 moveto +2368 1823 2171 2095 conicto +1975 2368 1632 2368 conicto +1289 2368 1092 2095 conicto +896 1823 896 1344 conicto +896 865 1092 592 conicto +1289 320 1632 320 conicto +1975 320 2171 592 conicto +2368 865 2368 1344 conicto +end_ol grestore +gsave 8.257119 11.250000 translate 0.035278 -0.035278 scale +start_ol +1622 1344 moveto +1104 1344 904 1225 conicto +704 1106 704 818 conicto +704 589 854 454 conicto +1004 320 1262 320 conicto +1618 320 1833 572 conicto +2048 825 2048 1244 conicto +2048 1344 lineto +1622 1344 lineto +2496 1513 moveto +2496 0 lineto +2048 0 lineto +2048 384 lineto +1900 154 1679 45 conicto +1458 -64 1138 -64 conicto +733 -64 494 162 conicto +256 389 256 769 conicto +256 1213 555 1438 conicto +854 1664 1448 1664 conicto +2048 1664 lineto +2048 1712 lineto +2048 2025 1851 2196 conicto +1655 2368 1300 2368 conicto +1074 2368 860 2320 conicto +646 2272 448 2176 conicto +448 2560 lineto +687 2656 912 2704 conicto +1138 2752 1351 2752 conicto +1927 2752 2211 2444 conicto +2496 2137 2496 1513 conicto +end_ol grestore +gsave 8.649248 11.250000 translate 0.035278 -0.035278 scale +start_ol +1984 2304 moveto +1912 2337 1828 2352 conicto +1744 2368 1642 2368 conicto +1282 2368 1089 2127 conicto +896 1887 896 1437 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1030 2531 1245 2641 conicto +1460 2752 1767 2752 conicto +1811 2752 1864 2752 conicto +1917 2752 1982 2752 conicto +1984 2304 lineto +end_ol grestore +gsave 8.911500 11.250000 translate 0.035278 -0.035278 scale +start_ol +1622 1344 moveto +1104 1344 904 1225 conicto +704 1106 704 818 conicto +704 589 854 454 conicto +1004 320 1262 320 conicto +1618 320 1833 572 conicto +2048 825 2048 1244 conicto +2048 1344 lineto +1622 1344 lineto +2496 1513 moveto +2496 0 lineto +2048 0 lineto +2048 384 lineto +1900 154 1679 45 conicto +1458 -64 1138 -64 conicto +733 -64 494 162 conicto +256 389 256 769 conicto +256 1213 555 1438 conicto +854 1664 1448 1664 conicto +2048 1664 lineto +2048 1712 lineto +2048 2025 1851 2196 conicto +1655 2368 1300 2368 conicto +1074 2368 860 2320 conicto +646 2272 448 2176 conicto +448 2560 lineto +687 2656 912 2704 conicto +1138 2752 1351 2752 conicto +1927 2752 2211 2444 conicto +2496 2137 2496 1513 conicto +end_ol grestore +gsave 9.303629 11.250000 translate 0.035278 -0.035278 scale +start_ol +2549 2204 moveto +2714 2485 2942 2618 conicto +3171 2752 3482 2752 conicto +3899 2752 4125 2464 conicto +4352 2177 4352 1646 conicto +4352 0 lineto +3904 0 lineto +3904 1632 lineto +3904 2006 3769 2187 conicto +3634 2368 3356 2368 conicto +3017 2368 2820 2146 conicto +2624 1925 2624 1542 conicto +2624 0 lineto +2176 0 lineto +2176 1632 lineto +2176 2008 2041 2188 conicto +1906 2368 1624 2368 conicto +1289 2368 1092 2145 conicto +896 1922 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1046 2534 1255 2643 conicto +1465 2752 1753 2752 conicto +2044 2752 2247 2611 conicto +2451 2471 2549 2204 conicto +end_ol grestore +gsave 9.925540 11.250000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 10.320167 11.250000 translate 0.035278 -0.035278 scale +start_ol +896 3456 moveto +896 2688 lineto +1792 2688 lineto +1792 2368 lineto +896 2368 lineto +896 902 lineto +896 572 984 478 conicto +1073 384 1345 384 conicto +1792 384 lineto +1792 0 lineto +1345 0 lineto +836 0 642 194 conicto +448 389 448 902 conicto +448 2368 lineto +128 2368 lineto +128 2688 lineto +448 2688 lineto +448 3456 lineto +896 3456 lineto +end_ol grestore +gsave 10.569933 11.250000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 10.964559 11.250000 translate 0.035278 -0.035278 scale +start_ol +1984 2304 moveto +1912 2337 1828 2352 conicto +1744 2368 1642 2368 conicto +1282 2368 1089 2127 conicto +896 1887 896 1437 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1030 2531 1245 2641 conicto +1460 2752 1767 2752 conicto +1811 2752 1864 2752 conicto +1917 2752 1982 2752 conicto +1984 2304 lineto +end_ol grestore +gsave 7.850000 12.050000 translate 0.035278 -0.035278 scale +start_ol +1792 3712 moveto +1792 3328 lineto +1369 3328 lineto +1139 3328 1049 3237 conicto +960 3147 960 2912 conicto +960 2688 lineto +1664 2688 lineto +1664 2368 lineto +960 2368 lineto +960 0 lineto +512 0 lineto +512 2368 lineto +64 2368 lineto +64 2688 lineto +512 2688 lineto +512 2864 lineto +512 3307 718 3509 conicto +925 3712 1374 3712 conicto +1792 3712 lineto +end_ol grestore +gsave 8.074788 12.050000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 8.466917 12.050000 translate 0.035278 -0.035278 scale +start_ol +1984 2304 moveto +1912 2337 1828 2352 conicto +1744 2368 1642 2368 conicto +1282 2368 1089 2127 conicto +896 1887 896 1437 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1030 2531 1245 2641 conicto +1460 2752 1767 2752 conicto +1811 2752 1864 2752 conicto +1917 2752 1982 2752 conicto +1984 2304 lineto +end_ol grestore +gsave 8.729169 12.050000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 8.931476 12.050000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 9.283645 12.050000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 9.675774 12.050000 translate 0.035278 -0.035278 scale +start_ol +2176 2304 moveto +2176 3712 lineto +2624 3712 lineto +2624 0 lineto +2176 0 lineto +2176 384 lineto +2040 157 1832 46 conicto +1624 -64 1332 -64 conicto +855 -64 555 324 conicto +256 712 256 1344 conicto +256 1976 555 2364 conicto +855 2752 1332 2752 conicto +1624 2752 1832 2641 conicto +2040 2531 2176 2304 conicto +704 1344 moveto +704 865 900 592 conicto +1096 320 1439 320 conicto +1782 320 1979 592 conicto +2176 865 2176 1344 conicto +2176 1823 1979 2095 conicto +1782 2368 1439 2368 conicto +1096 2368 900 2095 conicto +704 1823 704 1344 conicto +end_ol grestore +gsave 10.082893 12.050000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 10.477519 12.050000 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 11.500000 5.000000 m 11.500000 6.000000 l 12.500000 6.000000 l 12.500000 5.000000 l f +0.000000 0.000000 0.000000 srgb +n 11.500000 5.000000 m 11.500000 6.000000 l 12.500000 6.000000 l 12.500000 5.000000 l cp s +gsave 11.576250 5.721250 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 12.015839 5.721250 translate 0.035278 -0.035278 scale +start_ol +640 384 moveto +1408 384 lineto +1408 3136 lineto +576 2944 lineto +576 3328 lineto +1434 3520 lineto +1920 3520 lineto +1920 384 lineto +2688 384 lineto +2688 0 lineto +640 0 lineto +640 384 lineto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 11.500000 6.000000 m 11.500000 7.000000 l 12.500000 7.000000 l 12.500000 6.000000 l f +0.000000 0.000000 0.000000 srgb +n 11.500000 6.000000 m 11.500000 7.000000 l 12.500000 7.000000 l 12.500000 6.000000 l cp s +gsave 11.576250 6.721250 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 12.015839 6.721250 translate 0.035278 -0.035278 scale +start_ol +938 384 moveto +2643 384 lineto +2643 0 lineto +384 0 lineto +384 384 lineto +654 668 1119 1146 conicto +1584 1625 1704 1763 conicto +1931 2023 2021 2203 conicto +2112 2384 2112 2558 conicto +2112 2842 1913 3021 conicto +1715 3200 1397 3200 conicto +1171 3200 920 3104 conicto +669 3009 384 2816 conicto +384 3328 lineto +678 3455 933 3519 conicto +1188 3584 1400 3584 conicto +1959 3584 2291 3309 conicto +2624 3034 2624 2574 conicto +2624 2356 2540 2160 conicto +2457 1965 2237 1700 conicto +2177 1631 1852 1302 conicto +1528 974 938 384 conicto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 11.500000 7.000000 m 11.500000 8.000000 l 12.500000 8.000000 l 12.500000 7.000000 l f +0.000000 0.000000 0.000000 srgb +n 11.500000 7.000000 m 11.500000 8.000000 l 12.500000 8.000000 l 12.500000 7.000000 l cp s +gsave 11.576250 7.721250 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 12.015839 7.721250 translate 0.035278 -0.035278 scale +start_ol +1897 1936 moveto +2269 1862 2478 1627 conicto +2688 1392 2688 1046 conicto +2688 516 2331 226 conicto +1975 -64 1319 -64 conicto +1099 -64 865 -16 conicto +632 32 384 128 conicto +384 576 lineto +576 449 805 384 conicto +1035 320 1285 320 conicto +1720 320 1948 504 conicto +2176 688 2176 1039 conicto +2176 1363 1967 1545 conicto +1759 1728 1388 1728 conicto +1024 1728 lineto +1024 2112 lineto +1405 2112 lineto +1717 2112 1882 2250 conicto +2048 2388 2048 2648 conicto +2048 2915 1877 3057 conicto +1706 3200 1388 3200 conicto +1200 3200 985 3153 conicto +770 3107 512 3008 conicto +512 3456 lineto +773 3520 1001 3552 conicto +1229 3584 1431 3584 conicto +1952 3584 2256 3343 conicto +2560 3102 2560 2692 conicto +2560 2406 2387 2209 conicto +2215 2012 1897 1936 conicto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 11.450000 3.000000 m 11.450000 13.500000 l s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 12.550000 3.000000 m 12.550000 13.500000 l s +gsave 5.143750 1.400000 translate 0.035278 -0.035278 scale +start_ol +1792 3712 moveto +1792 3328 lineto +1369 3328 lineto +1139 3328 1049 3237 conicto +960 3147 960 2912 conicto +960 2688 lineto +1664 2688 lineto +1664 2368 lineto +960 2368 lineto +960 0 lineto +512 0 lineto +512 2368 lineto +64 2368 lineto +64 2688 lineto +512 2688 lineto +512 2864 lineto +512 3307 718 3509 conicto +925 3712 1374 3712 conicto +1792 3712 lineto +end_ol grestore +gsave 5.368538 1.400000 translate 0.035278 -0.035278 scale +start_ol +448 1040 moveto +448 2688 lineto +896 2688 lineto +896 1057 lineto +896 689 1042 504 conicto +1188 320 1481 320 conicto +1832 320 2036 541 conicto +2240 763 2240 1145 conicto +2240 2688 lineto +2688 2688 lineto +2688 0 lineto +2240 0 lineto +2240 384 lineto +2081 157 1870 46 conicto +1660 -64 1382 -64 conicto +923 -64 685 217 conicto +448 499 448 1040 conicto +end_ol grestore +gsave 5.773152 1.400000 translate 0.035278 -0.035278 scale +start_ol +2688 1646 moveto +2688 0 lineto +2240 0 lineto +2240 1632 lineto +2240 2001 2093 2184 conicto +1947 2368 1654 2368 conicto +1302 2368 1099 2146 conicto +896 1925 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1053 2529 1266 2640 conicto +1479 2752 1757 2752 conicto +2217 2752 2452 2471 conicto +2688 2191 2688 1646 conicto +end_ol grestore +gsave 6.177766 1.400000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 6.529935 1.400000 translate 0.035278 -0.035278 scale +start_ol +896 3456 moveto +896 2688 lineto +1792 2688 lineto +1792 2368 lineto +896 2368 lineto +896 902 lineto +896 572 984 478 conicto +1073 384 1345 384 conicto +1792 384 lineto +1792 0 lineto +1345 0 lineto +836 0 642 194 conicto +448 389 448 902 conicto +448 2368 lineto +128 2368 lineto +128 2688 lineto +448 2688 lineto +448 3456 lineto +896 3456 lineto +end_ol grestore +gsave 6.779702 1.400000 translate 0.035278 -0.035278 scale +start_ol +448 2688 moveto +896 2688 lineto +896 0 lineto +448 0 lineto +448 2688 lineto +448 3712 moveto +896 3712 lineto +896 3136 lineto +448 3136 lineto +448 3712 lineto +end_ol grestore +gsave 6.957031 1.400000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 7.349160 1.400000 translate 0.035278 -0.035278 scale +start_ol +2688 1646 moveto +2688 0 lineto +2240 0 lineto +2240 1632 lineto +2240 2001 2093 2184 conicto +1947 2368 1654 2368 conicto +1302 2368 1099 2146 conicto +896 1925 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1053 2529 1266 2640 conicto +1479 2752 1757 2752 conicto +2217 2752 2452 2471 conicto +2688 2191 2688 1646 conicto +end_ol grestore +gsave 5.713750 2.200000 translate 0.035278 -0.035278 scale +start_ol +1792 3712 moveto +1792 3328 lineto +1369 3328 lineto +1139 3328 1049 3237 conicto +960 3147 960 2912 conicto +960 2688 lineto +1664 2688 lineto +1664 2368 lineto +960 2368 lineto +960 0 lineto +512 0 lineto +512 2368 lineto +64 2368 lineto +64 2688 lineto +512 2688 lineto +512 2864 lineto +512 3307 718 3509 conicto +925 3712 1374 3712 conicto +1792 3712 lineto +end_ol grestore +gsave 5.938538 2.200000 translate 0.035278 -0.035278 scale +start_ol +448 1040 moveto +448 2688 lineto +896 2688 lineto +896 1057 lineto +896 689 1042 504 conicto +1188 320 1481 320 conicto +1832 320 2036 541 conicto +2240 763 2240 1145 conicto +2240 2688 lineto +2688 2688 lineto +2688 0 lineto +2240 0 lineto +2240 384 lineto +2081 157 1870 46 conicto +1660 -64 1382 -64 conicto +923 -64 685 217 conicto +448 499 448 1040 conicto +end_ol grestore +gsave 6.343152 2.200000 translate 0.035278 -0.035278 scale +start_ol +2688 1646 moveto +2688 0 lineto +2240 0 lineto +2240 1632 lineto +2240 2001 2093 2184 conicto +1947 2368 1654 2368 conicto +1302 2368 1099 2146 conicto +896 1925 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1053 2529 1266 2640 conicto +1479 2752 1757 2752 conicto +2217 2752 2452 2471 conicto +2688 2191 2688 1646 conicto +end_ol grestore +gsave 6.747766 2.200000 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 11.086250 2.200000 translate 0.035278 -0.035278 scale +start_ol +1792 3712 moveto +1792 3328 lineto +1369 3328 lineto +1139 3328 1049 3237 conicto +960 3147 960 2912 conicto +960 2688 lineto +1664 2688 lineto +1664 2368 lineto +960 2368 lineto +960 0 lineto +512 0 lineto +512 2368 lineto +64 2368 lineto +64 2688 lineto +512 2688 lineto +512 2864 lineto +512 3307 718 3509 conicto +925 3712 1374 3712 conicto +1792 3712 lineto +end_ol grestore +gsave 11.311038 2.200000 translate 0.035278 -0.035278 scale +start_ol +448 1040 moveto +448 2688 lineto +896 2688 lineto +896 1057 lineto +896 689 1042 504 conicto +1188 320 1481 320 conicto +1832 320 2036 541 conicto +2240 763 2240 1145 conicto +2240 2688 lineto +2688 2688 lineto +2688 0 lineto +2240 0 lineto +2240 384 lineto +2081 157 1870 46 conicto +1660 -64 1382 -64 conicto +923 -64 685 217 conicto +448 499 448 1040 conicto +end_ol grestore +gsave 11.715652 2.200000 translate 0.035278 -0.035278 scale +start_ol +2688 1646 moveto +2688 0 lineto +2240 0 lineto +2240 1632 lineto +2240 2001 2093 2184 conicto +1947 2368 1654 2368 conicto +1302 2368 1099 2146 conicto +896 1925 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1053 2529 1266 2640 conicto +1479 2752 1757 2752 conicto +2217 2752 2452 2471 conicto +2688 2191 2688 1646 conicto +end_ol grestore +gsave 12.120266 2.200000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 12.472435 2.200000 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 11.500000 8.000000 m 11.500000 9.000000 l 12.500000 9.000000 l 12.500000 8.000000 l f +0.000000 0.000000 0.000000 srgb +n 11.500000 8.000000 m 11.500000 9.000000 l 12.500000 9.000000 l 12.500000 8.000000 l cp s +gsave 11.576250 8.721250 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 12.015839 8.721250 translate 0.035278 -0.035278 scale +start_ol +1792 3103 moveto +630 1216 lineto +1792 1216 lineto +1792 3103 lineto +1709 3520 moveto +2304 3520 lineto +2304 1216 lineto +2816 1216 lineto +2816 832 lineto +2304 832 lineto +2304 0 lineto +1792 0 lineto +1792 832 lineto +256 832 lineto +256 1291 lineto +1709 3520 lineto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 17.000000 2.000000 m 17.000000 3.000000 l 18.000000 3.000000 l 18.000000 2.000000 l f +0.000000 0.000000 0.000000 srgb +n 17.000000 2.000000 m 17.000000 3.000000 l 18.000000 3.000000 l 18.000000 2.000000 l cp s +gsave 17.072500 2.721250 translate 0.035278 -0.035278 scale +start_ol +3136 3264 moveto +3136 2752 lineto +2892 2977 2616 3088 conicto +2340 3200 2030 3200 conicto +1418 3200 1093 2829 conicto +768 2459 768 1759 conicto +768 1061 1093 690 conicto +1418 320 2030 320 conicto +2340 320 2616 431 conicto +2892 543 3136 768 conicto +3136 256 lineto +2882 96 2599 16 conicto +2316 -64 2000 -64 conicto +1189 -64 722 424 conicto +256 913 256 1759 conicto +256 2607 722 3095 conicto +1189 3584 2000 3584 conicto +2320 3584 2603 3504 conicto +2887 3424 3136 3264 conicto +end_ol grestore +gsave 17.519580 2.721250 translate 0.035278 -0.035278 scale +start_ol +640 384 moveto +1408 384 lineto +1408 3136 lineto +576 2944 lineto +576 3328 lineto +1434 3520 lineto +1920 3520 lineto +1920 384 lineto +2688 384 lineto +2688 0 lineto +640 0 lineto +640 384 lineto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 17.000000 3.000000 m 17.000000 4.000000 l 18.000000 4.000000 l 18.000000 3.000000 l f +0.000000 0.000000 0.000000 srgb +n 17.000000 3.000000 m 17.000000 4.000000 l 18.000000 4.000000 l 18.000000 3.000000 l cp s +gsave 17.072500 3.721250 translate 0.035278 -0.035278 scale +start_ol +3136 3264 moveto +3136 2752 lineto +2892 2977 2616 3088 conicto +2340 3200 2030 3200 conicto +1418 3200 1093 2829 conicto +768 2459 768 1759 conicto +768 1061 1093 690 conicto +1418 320 2030 320 conicto +2340 320 2616 431 conicto +2892 543 3136 768 conicto +3136 256 lineto +2882 96 2599 16 conicto +2316 -64 2000 -64 conicto +1189 -64 722 424 conicto +256 913 256 1759 conicto +256 2607 722 3095 conicto +1189 3584 2000 3584 conicto +2320 3584 2603 3504 conicto +2887 3424 3136 3264 conicto +end_ol grestore +gsave 17.519580 3.721250 translate 0.035278 -0.035278 scale +start_ol +938 384 moveto +2643 384 lineto +2643 0 lineto +384 0 lineto +384 384 lineto +654 668 1119 1146 conicto +1584 1625 1704 1763 conicto +1931 2023 2021 2203 conicto +2112 2384 2112 2558 conicto +2112 2842 1913 3021 conicto +1715 3200 1397 3200 conicto +1171 3200 920 3104 conicto +669 3009 384 2816 conicto +384 3328 lineto +678 3455 933 3519 conicto +1188 3584 1400 3584 conicto +1959 3584 2291 3309 conicto +2624 3034 2624 2574 conicto +2624 2356 2540 2160 conicto +2457 1965 2237 1700 conicto +2177 1631 1852 1302 conicto +1528 974 938 384 conicto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 16.950000 2.000000 m 16.950000 13.500000 l s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 18.050000 2.000000 m 18.050000 13.500000 l s +gsave 16.482500 1.350000 translate 0.035278 -0.035278 scale +start_ol +1792 3712 moveto +1792 3328 lineto +1369 3328 lineto +1139 3328 1049 3237 conicto +960 3147 960 2912 conicto +960 2688 lineto +1664 2688 lineto +1664 2368 lineto +960 2368 lineto +960 0 lineto +512 0 lineto +512 2368 lineto +64 2368 lineto +64 2688 lineto +512 2688 lineto +512 2864 lineto +512 3307 718 3509 conicto +925 3712 1374 3712 conicto +1792 3712 lineto +end_ol grestore +gsave 16.707288 1.350000 translate 0.035278 -0.035278 scale +start_ol +448 1040 moveto +448 2688 lineto +896 2688 lineto +896 1057 lineto +896 689 1042 504 conicto +1188 320 1481 320 conicto +1832 320 2036 541 conicto +2240 763 2240 1145 conicto +2240 2688 lineto +2688 2688 lineto +2688 0 lineto +2240 0 lineto +2240 384 lineto +2081 157 1870 46 conicto +1660 -64 1382 -64 conicto +923 -64 685 217 conicto +448 499 448 1040 conicto +end_ol grestore +gsave 17.111902 1.350000 translate 0.035278 -0.035278 scale +start_ol +2688 1646 moveto +2688 0 lineto +2240 0 lineto +2240 1632 lineto +2240 2001 2093 2184 conicto +1947 2368 1654 2368 conicto +1302 2368 1099 2146 conicto +896 1925 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1053 2529 1266 2640 conicto +1479 2752 1757 2752 conicto +2217 2752 2452 2471 conicto +2688 2191 2688 1646 conicto +end_ol grestore +gsave 17.516516 1.350000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 17.868685 1.350000 translate 0.035278 -0.035278 scale +start_ol +3136 3264 moveto +3136 2752 lineto +2892 2977 2616 3088 conicto +2340 3200 2030 3200 conicto +1418 3200 1093 2829 conicto +768 2459 768 1759 conicto +768 1061 1093 690 conicto +1418 320 2030 320 conicto +2340 320 2616 431 conicto +2892 543 3136 768 conicto +3136 256 lineto +2882 96 2599 16 conicto +2316 -64 2000 -64 conicto +1189 -64 722 424 conicto +256 913 256 1759 conicto +256 2607 722 3095 conicto +1189 3584 2000 3584 conicto +2320 3584 2603 3504 conicto +2887 3424 3136 3264 conicto +end_ol grestore +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 7.000000 10.000000 m 8.000000 10.000000 7.000000 11.500000 8.000000 11.500000 c s +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 8.000000 11.500000 m 7.000000 11.500000 8.000000 13.000000 7.000000 13.000000 c s +gsave 3.300000 10.300000 translate 0.035278 -0.035278 scale +start_ol +2624 3392 moveto +2624 2944 lineto +2352 3073 2111 3136 conicto +1870 3200 1645 3200 conicto +1255 3200 1043 3052 conicto +832 2904 832 2631 conicto +832 2402 969 2285 conicto +1107 2169 1491 2097 conicto +1773 2039 lineto +2308 1937 2562 1678 conicto +2816 1420 2816 986 conicto +2816 469 2468 202 conicto +2121 -64 1450 -64 conicto +1197 -64 911 0 conicto +626 65 320 192 conicto +320 704 lineto +613 513 893 416 conicto +1174 320 1445 320 conicto +1857 320 2080 485 conicto +2304 650 2304 955 conicto +2304 1221 2148 1371 conicto +1992 1522 1636 1597 conicto +1352 1652 lineto +807 1756 563 1978 conicto +320 2201 320 2597 conicto +320 3056 654 3320 conicto +989 3584 1576 3584 conicto +1828 3584 2089 3536 conicto +2351 3488 2624 3392 conicto +end_ol grestore +gsave 3.707119 10.300000 translate 0.035278 -0.035278 scale +start_ol +896 3456 moveto +896 2688 lineto +1792 2688 lineto +1792 2368 lineto +896 2368 lineto +896 902 lineto +896 572 984 478 conicto +1073 384 1345 384 conicto +1792 384 lineto +1792 0 lineto +1345 0 lineto +836 0 642 194 conicto +448 389 448 902 conicto +448 2368 lineto +128 2368 lineto +128 2688 lineto +448 2688 lineto +448 3456 lineto +896 3456 lineto +end_ol grestore +gsave 3.956886 10.300000 translate 0.035278 -0.035278 scale +start_ol +1622 1344 moveto +1104 1344 904 1225 conicto +704 1106 704 818 conicto +704 589 854 454 conicto +1004 320 1262 320 conicto +1618 320 1833 572 conicto +2048 825 2048 1244 conicto +2048 1344 lineto +1622 1344 lineto +2496 1513 moveto +2496 0 lineto +2048 0 lineto +2048 384 lineto +1900 154 1679 45 conicto +1458 -64 1138 -64 conicto +733 -64 494 162 conicto +256 389 256 769 conicto +256 1213 555 1438 conicto +854 1664 1448 1664 conicto +2048 1664 lineto +2048 1712 lineto +2048 2025 1851 2196 conicto +1655 2368 1300 2368 conicto +1074 2368 860 2320 conicto +646 2272 448 2176 conicto +448 2560 lineto +687 2656 912 2704 conicto +1138 2752 1351 2752 conicto +1927 2752 2211 2444 conicto +2496 2137 2496 1513 conicto +end_ol grestore +gsave 4.349015 10.300000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 4.701184 10.300000 translate 0.035278 -0.035278 scale +start_ol +448 3712 moveto +896 3712 lineto +896 1529 lineto +2196 2688 lineto +2752 2688 lineto +1346 1430 lineto +2816 0 lineto +2246 0 lineto +896 1313 lineto +896 0 lineto +448 0 lineto +448 3712 lineto +end_ol grestore +gsave 3.300000 11.100000 translate 0.035278 -0.035278 scale +start_ol +896 384 moveto +896 -1024 lineto +448 -1024 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1032 2531 1240 2641 conicto +1448 2752 1737 2752 conicto +2217 2752 2516 2364 conicto +2816 1976 2816 1344 conicto +2816 712 2516 324 conicto +2217 -64 1737 -64 conicto +1448 -64 1240 46 conicto +1032 157 896 384 conicto +2368 1344 moveto +2368 1823 2171 2095 conicto +1975 2368 1632 2368 conicto +1289 2368 1092 2095 conicto +896 1823 896 1344 conicto +896 865 1092 592 conicto +1289 320 1632 320 conicto +1975 320 2171 592 conicto +2368 865 2368 1344 conicto +end_ol grestore +gsave 3.707119 11.100000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 4.099248 11.100000 translate 0.035278 -0.035278 scale +start_ol +448 2688 moveto +896 2688 lineto +896 0 lineto +448 0 lineto +448 2688 lineto +448 3712 moveto +896 3712 lineto +896 3136 lineto +448 3136 lineto +448 3712 lineto +end_ol grestore +gsave 4.276577 11.100000 translate 0.035278 -0.035278 scale +start_ol +2688 1646 moveto +2688 0 lineto +2240 0 lineto +2240 1632 lineto +2240 2001 2093 2184 conicto +1947 2368 1654 2368 conicto +1302 2368 1099 2146 conicto +896 1925 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1053 2529 1266 2640 conicto +1479 2752 1757 2752 conicto +2217 2752 2452 2471 conicto +2688 2191 2688 1646 conicto +end_ol grestore +gsave 4.681191 11.100000 translate 0.035278 -0.035278 scale +start_ol +896 3456 moveto +896 2688 lineto +1792 2688 lineto +1792 2368 lineto +896 2368 lineto +896 902 lineto +896 572 984 478 conicto +1073 384 1345 384 conicto +1792 384 lineto +1792 0 lineto +1345 0 lineto +836 0 642 194 conicto +448 389 448 902 conicto +448 2368 lineto +128 2368 lineto +128 2688 lineto +448 2688 lineto +448 3456 lineto +896 3456 lineto +end_ol grestore +gsave 4.930958 11.100000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 5.325584 11.100000 translate 0.035278 -0.035278 scale +start_ol +1984 2304 moveto +1912 2337 1828 2352 conicto +1744 2368 1642 2368 conicto +1282 2368 1089 2127 conicto +896 1887 896 1437 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1030 2531 1245 2641 conicto +1460 2752 1767 2752 conicto +1811 2752 1864 2752 conicto +1917 2752 1982 2752 conicto +1984 2304 lineto +end_ol grestore +0.050000 slw +[] 0 sd +[] 0 sd +0 slc +n 10.500000 5.500000 m 11.388197 5.500000 l s +0.050000 slw +[] 0 sd +0 slj +0 slc +n 10.944098 5.750000 m 11.444098 5.500000 l 10.944098 5.250000 l s +0.050000 slw +[] 0 sd +[] 0 sd +0 slc +n 16.000000 2.500000 m 16.888197 2.500000 l s +0.050000 slw +[] 0 sd +0 slj +0 slc +n 16.444098 2.750000 m 16.944098 2.500000 l 16.444098 2.250000 l s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 11.500000 9.000000 m 11.500000 10.000000 l 12.500000 10.000000 l 12.500000 9.000000 l f +0.000000 0.000000 0.000000 srgb +n 11.500000 9.000000 m 11.500000 10.000000 l 12.500000 10.000000 l 12.500000 9.000000 l cp s +gsave 11.553750 9.721250 translate 0.035278 -0.035278 scale +start_ol +1984 2304 moveto +1912 2337 1828 2352 conicto +1744 2368 1642 2368 conicto +1282 2368 1089 2127 conicto +896 1887 896 1437 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1030 2531 1245 2641 conicto +1460 2752 1767 2752 conicto +1811 2752 1864 2752 conicto +1917 2752 1982 2752 conicto +1984 2304 lineto +end_ol grestore +gsave 11.801011 9.721250 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 12.195637 9.721250 translate 0.035278 -0.035278 scale +start_ol +896 3456 moveto +896 2688 lineto +1792 2688 lineto +1792 2368 lineto +896 2368 lineto +896 902 lineto +896 572 984 478 conicto +1073 384 1345 384 conicto +1792 384 lineto +1792 0 lineto +1345 0 lineto +836 0 642 194 conicto +448 389 448 902 conicto +448 2368 lineto +128 2368 lineto +128 2688 lineto +448 2688 lineto +448 3456 lineto +896 3456 lineto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 11.500000 10.000000 m 11.500000 11.000000 l 12.500000 11.000000 l 12.500000 10.000000 l f +0.000000 0.000000 0.000000 srgb +n 11.500000 10.000000 m 11.500000 11.000000 l 12.500000 11.000000 l 12.500000 10.000000 l cp s +gsave 11.577500 10.721250 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 12.014592 10.721250 translate 0.035278 -0.035278 scale +start_ol +640 384 moveto +1408 384 lineto +1408 3136 lineto +576 2944 lineto +576 3328 lineto +1434 3520 lineto +1920 3520 lineto +1920 384 lineto +2688 384 lineto +2688 0 lineto +640 0 lineto +640 384 lineto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 11.500000 11.000000 m 11.500000 12.000000 l 12.500000 12.000000 l 12.500000 11.000000 l f +0.000000 0.000000 0.000000 srgb +n 11.500000 11.000000 m 11.500000 12.000000 l 12.500000 12.000000 l 12.500000 11.000000 l cp s +gsave 11.577500 11.721250 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 12.014592 11.721250 translate 0.035278 -0.035278 scale +start_ol +938 384 moveto +2643 384 lineto +2643 0 lineto +384 0 lineto +384 384 lineto +654 668 1119 1146 conicto +1584 1625 1704 1763 conicto +1931 2023 2021 2203 conicto +2112 2384 2112 2558 conicto +2112 2842 1913 3021 conicto +1715 3200 1397 3200 conicto +1171 3200 920 3104 conicto +669 3009 384 2816 conicto +384 3328 lineto +678 3455 933 3519 conicto +1188 3584 1400 3584 conicto +1959 3584 2291 3309 conicto +2624 3034 2624 2574 conicto +2624 2356 2540 2160 conicto +2457 1965 2237 1700 conicto +2177 1631 1852 1302 conicto +1528 974 938 384 conicto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 11.500000 12.000000 m 11.500000 13.000000 l 12.500000 13.000000 l 12.500000 12.000000 l f +0.000000 0.000000 0.000000 srgb +n 11.500000 12.000000 m 11.500000 13.000000 l 12.500000 13.000000 l 12.500000 12.000000 l cp s +gsave 11.577500 12.721250 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 12.014592 12.721250 translate 0.035278 -0.035278 scale +start_ol +1897 1936 moveto +2269 1862 2478 1627 conicto +2688 1392 2688 1046 conicto +2688 516 2331 226 conicto +1975 -64 1319 -64 conicto +1099 -64 865 -16 conicto +632 32 384 128 conicto +384 576 lineto +576 449 805 384 conicto +1035 320 1285 320 conicto +1720 320 1948 504 conicto +2176 688 2176 1039 conicto +2176 1363 1967 1545 conicto +1759 1728 1388 1728 conicto +1024 1728 lineto +1024 2112 lineto +1405 2112 lineto +1717 2112 1882 2250 conicto +2048 2388 2048 2648 conicto +2048 2915 1877 3057 conicto +1706 3200 1388 3200 conicto +1200 3200 985 3153 conicto +770 3107 512 3008 conicto +512 3456 lineto +773 3520 1001 3552 conicto +1229 3584 1431 3584 conicto +1952 3584 2256 3343 conicto +2560 3102 2560 2692 conicto +2560 2406 2387 2209 conicto +2215 2012 1897 1936 conicto +end_ol grestore +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 12.500000 5.000000 m 13.500000 5.000000 12.500000 7.000000 13.500000 7.000000 c s +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 13.500000 7.000000 m 12.500000 7.000000 13.500000 9.000000 12.500000 9.000000 c s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 17.000000 5.000000 m 17.000000 6.000000 l 18.000000 6.000000 l 18.000000 5.000000 l f +0.000000 0.000000 0.000000 srgb +n 17.000000 5.000000 m 17.000000 6.000000 l 18.000000 6.000000 l 18.000000 5.000000 l cp s +gsave 17.076250 5.721250 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 17.515839 5.721250 translate 0.035278 -0.035278 scale +start_ol +640 384 moveto +1408 384 lineto +1408 3136 lineto +576 2944 lineto +576 3328 lineto +1434 3520 lineto +1920 3520 lineto +1920 384 lineto +2688 384 lineto +2688 0 lineto +640 0 lineto +640 384 lineto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 17.000000 6.000000 m 17.000000 7.000000 l 18.000000 7.000000 l 18.000000 6.000000 l f +0.000000 0.000000 0.000000 srgb +n 17.000000 6.000000 m 17.000000 7.000000 l 18.000000 7.000000 l 18.000000 6.000000 l cp s +gsave 17.076250 6.721250 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 17.515839 6.721250 translate 0.035278 -0.035278 scale +start_ol +938 384 moveto +2643 384 lineto +2643 0 lineto +384 0 lineto +384 384 lineto +654 668 1119 1146 conicto +1584 1625 1704 1763 conicto +1931 2023 2021 2203 conicto +2112 2384 2112 2558 conicto +2112 2842 1913 3021 conicto +1715 3200 1397 3200 conicto +1171 3200 920 3104 conicto +669 3009 384 2816 conicto +384 3328 lineto +678 3455 933 3519 conicto +1188 3584 1400 3584 conicto +1959 3584 2291 3309 conicto +2624 3034 2624 2574 conicto +2624 2356 2540 2160 conicto +2457 1965 2237 1700 conicto +2177 1631 1852 1302 conicto +1528 974 938 384 conicto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 17.000000 7.000000 m 17.000000 8.000000 l 18.000000 8.000000 l 18.000000 7.000000 l f +0.000000 0.000000 0.000000 srgb +n 17.000000 7.000000 m 17.000000 8.000000 l 18.000000 8.000000 l 18.000000 7.000000 l cp s +gsave 17.076250 7.721250 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 17.515839 7.721250 translate 0.035278 -0.035278 scale +start_ol +1897 1936 moveto +2269 1862 2478 1627 conicto +2688 1392 2688 1046 conicto +2688 516 2331 226 conicto +1975 -64 1319 -64 conicto +1099 -64 865 -16 conicto +632 32 384 128 conicto +384 576 lineto +576 449 805 384 conicto +1035 320 1285 320 conicto +1720 320 1948 504 conicto +2176 688 2176 1039 conicto +2176 1363 1967 1545 conicto +1759 1728 1388 1728 conicto +1024 1728 lineto +1024 2112 lineto +1405 2112 lineto +1717 2112 1882 2250 conicto +2048 2388 2048 2648 conicto +2048 2915 1877 3057 conicto +1706 3200 1388 3200 conicto +1200 3200 985 3153 conicto +770 3107 512 3008 conicto +512 3456 lineto +773 3520 1001 3552 conicto +1229 3584 1431 3584 conicto +1952 3584 2256 3343 conicto +2560 3102 2560 2692 conicto +2560 2406 2387 2209 conicto +2215 2012 1897 1936 conicto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 17.000000 8.000000 m 17.000000 9.000000 l 18.000000 9.000000 l 18.000000 8.000000 l f +0.000000 0.000000 0.000000 srgb +n 17.000000 8.000000 m 17.000000 9.000000 l 18.000000 9.000000 l 18.000000 8.000000 l cp s +gsave 17.076250 8.721250 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 17.515839 8.721250 translate 0.035278 -0.035278 scale +start_ol +1792 3103 moveto +630 1216 lineto +1792 1216 lineto +1792 3103 lineto +1709 3520 moveto +2304 3520 lineto +2304 1216 lineto +2816 1216 lineto +2816 832 lineto +2304 832 lineto +2304 0 lineto +1792 0 lineto +1792 832 lineto +256 832 lineto +256 1291 lineto +1709 3520 lineto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 17.000000 9.000000 m 17.000000 10.000000 l 18.000000 10.000000 l 18.000000 9.000000 l f +0.000000 0.000000 0.000000 srgb +n 17.000000 9.000000 m 17.000000 10.000000 l 18.000000 10.000000 l 18.000000 9.000000 l cp s +gsave 17.053750 9.721250 translate 0.035278 -0.035278 scale +start_ol +1984 2304 moveto +1912 2337 1828 2352 conicto +1744 2368 1642 2368 conicto +1282 2368 1089 2127 conicto +896 1887 896 1437 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1030 2531 1245 2641 conicto +1460 2752 1767 2752 conicto +1811 2752 1864 2752 conicto +1917 2752 1982 2752 conicto +1984 2304 lineto +end_ol grestore +gsave 17.301011 9.721250 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 17.695637 9.721250 translate 0.035278 -0.035278 scale +start_ol +896 3456 moveto +896 2688 lineto +1792 2688 lineto +1792 2368 lineto +896 2368 lineto +896 902 lineto +896 572 984 478 conicto +1073 384 1345 384 conicto +1792 384 lineto +1792 0 lineto +1345 0 lineto +836 0 642 194 conicto +448 389 448 902 conicto +448 2368 lineto +128 2368 lineto +128 2688 lineto +448 2688 lineto +448 3456 lineto +896 3456 lineto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 17.000000 10.000000 m 17.000000 11.000000 l 18.000000 11.000000 l 18.000000 10.000000 l f +0.000000 0.000000 0.000000 srgb +n 17.000000 10.000000 m 17.000000 11.000000 l 18.000000 11.000000 l 18.000000 10.000000 l cp s +gsave 17.077500 10.721250 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 17.514592 10.721250 translate 0.035278 -0.035278 scale +start_ol +640 384 moveto +1408 384 lineto +1408 3136 lineto +576 2944 lineto +576 3328 lineto +1434 3520 lineto +1920 3520 lineto +1920 384 lineto +2688 384 lineto +2688 0 lineto +640 0 lineto +640 384 lineto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 17.000000 11.000000 m 17.000000 12.000000 l 18.000000 12.000000 l 18.000000 11.000000 l f +0.000000 0.000000 0.000000 srgb +n 17.000000 11.000000 m 17.000000 12.000000 l 18.000000 12.000000 l 18.000000 11.000000 l cp s +gsave 17.077500 11.721250 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 17.514592 11.721250 translate 0.035278 -0.035278 scale +start_ol +938 384 moveto +2643 384 lineto +2643 0 lineto +384 0 lineto +384 384 lineto +654 668 1119 1146 conicto +1584 1625 1704 1763 conicto +1931 2023 2021 2203 conicto +2112 2384 2112 2558 conicto +2112 2842 1913 3021 conicto +1715 3200 1397 3200 conicto +1171 3200 920 3104 conicto +669 3009 384 2816 conicto +384 3328 lineto +678 3455 933 3519 conicto +1188 3584 1400 3584 conicto +1959 3584 2291 3309 conicto +2624 3034 2624 2574 conicto +2624 2356 2540 2160 conicto +2457 1965 2237 1700 conicto +2177 1631 1852 1302 conicto +1528 974 938 384 conicto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 17.000000 12.000000 m 17.000000 13.000000 l 18.000000 13.000000 l 18.000000 12.000000 l f +0.000000 0.000000 0.000000 srgb +n 17.000000 12.000000 m 17.000000 13.000000 l 18.000000 13.000000 l 18.000000 12.000000 l cp s +gsave 17.077500 12.721250 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 17.514592 12.721250 translate 0.035278 -0.035278 scale +start_ol +1897 1936 moveto +2269 1862 2478 1627 conicto +2688 1392 2688 1046 conicto +2688 516 2331 226 conicto +1975 -64 1319 -64 conicto +1099 -64 865 -16 conicto +632 32 384 128 conicto +384 576 lineto +576 449 805 384 conicto +1035 320 1285 320 conicto +1720 320 1948 504 conicto +2176 688 2176 1039 conicto +2176 1363 1967 1545 conicto +1759 1728 1388 1728 conicto +1024 1728 lineto +1024 2112 lineto +1405 2112 lineto +1717 2112 1882 2250 conicto +2048 2388 2048 2648 conicto +2048 2915 1877 3057 conicto +1706 3200 1388 3200 conicto +1200 3200 985 3153 conicto +770 3107 512 3008 conicto +512 3456 lineto +773 3520 1001 3552 conicto +1229 3584 1431 3584 conicto +1952 3584 2256 3343 conicto +2560 3102 2560 2692 conicto +2560 2406 2387 2209 conicto +2215 2012 1897 1936 conicto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 17.000000 4.000000 m 17.000000 5.000000 l 18.000000 5.000000 l 18.000000 4.000000 l f +0.000000 0.000000 0.000000 srgb +n 17.000000 4.000000 m 17.000000 5.000000 l 18.000000 5.000000 l 18.000000 4.000000 l cp s +gsave 17.053750 4.721250 translate 0.035278 -0.035278 scale +start_ol +1984 2304 moveto +1912 2337 1828 2352 conicto +1744 2368 1642 2368 conicto +1282 2368 1089 2127 conicto +896 1887 896 1437 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1030 2531 1245 2641 conicto +1460 2752 1767 2752 conicto +1811 2752 1864 2752 conicto +1917 2752 1982 2752 conicto +1984 2304 lineto +end_ol grestore +gsave 17.301011 4.721250 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 17.695637 4.721250 translate 0.035278 -0.035278 scale +start_ol +896 3456 moveto +896 2688 lineto +1792 2688 lineto +1792 2368 lineto +896 2368 lineto +896 902 lineto +896 572 984 478 conicto +1073 384 1345 384 conicto +1792 384 lineto +1792 0 lineto +1345 0 lineto +836 0 642 194 conicto +448 389 448 902 conicto +448 2368 lineto +128 2368 lineto +128 2688 lineto +448 2688 lineto +448 3456 lineto +896 3456 lineto +end_ol grestore +gsave 13.400000 6.750000 translate 0.035278 -0.035278 scale +start_ol +896 384 moveto +896 -1024 lineto +448 -1024 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1032 2531 1240 2641 conicto +1448 2752 1737 2752 conicto +2217 2752 2516 2364 conicto +2816 1976 2816 1344 conicto +2816 712 2516 324 conicto +2217 -64 1737 -64 conicto +1448 -64 1240 46 conicto +1032 157 896 384 conicto +2368 1344 moveto +2368 1823 2171 2095 conicto +1975 2368 1632 2368 conicto +1289 2368 1092 2095 conicto +896 1823 896 1344 conicto +896 865 1092 592 conicto +1289 320 1632 320 conicto +1975 320 2171 592 conicto +2368 865 2368 1344 conicto +end_ol grestore +gsave 13.807119 6.750000 translate 0.035278 -0.035278 scale +start_ol +1622 1344 moveto +1104 1344 904 1225 conicto +704 1106 704 818 conicto +704 589 854 454 conicto +1004 320 1262 320 conicto +1618 320 1833 572 conicto +2048 825 2048 1244 conicto +2048 1344 lineto +1622 1344 lineto +2496 1513 moveto +2496 0 lineto +2048 0 lineto +2048 384 lineto +1900 154 1679 45 conicto +1458 -64 1138 -64 conicto +733 -64 494 162 conicto +256 389 256 769 conicto +256 1213 555 1438 conicto +854 1664 1448 1664 conicto +2048 1664 lineto +2048 1712 lineto +2048 2025 1851 2196 conicto +1655 2368 1300 2368 conicto +1074 2368 860 2320 conicto +646 2272 448 2176 conicto +448 2560 lineto +687 2656 912 2704 conicto +1138 2752 1351 2752 conicto +1927 2752 2211 2444 conicto +2496 2137 2496 1513 conicto +end_ol grestore +gsave 14.199248 6.750000 translate 0.035278 -0.035278 scale +start_ol +1984 2304 moveto +1912 2337 1828 2352 conicto +1744 2368 1642 2368 conicto +1282 2368 1089 2127 conicto +896 1887 896 1437 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1030 2531 1245 2641 conicto +1460 2752 1767 2752 conicto +1811 2752 1864 2752 conicto +1917 2752 1982 2752 conicto +1984 2304 lineto +end_ol grestore +gsave 14.461500 6.750000 translate 0.035278 -0.035278 scale +start_ol +1622 1344 moveto +1104 1344 904 1225 conicto +704 1106 704 818 conicto +704 589 854 454 conicto +1004 320 1262 320 conicto +1618 320 1833 572 conicto +2048 825 2048 1244 conicto +2048 1344 lineto +1622 1344 lineto +2496 1513 moveto +2496 0 lineto +2048 0 lineto +2048 384 lineto +1900 154 1679 45 conicto +1458 -64 1138 -64 conicto +733 -64 494 162 conicto +256 389 256 769 conicto +256 1213 555 1438 conicto +854 1664 1448 1664 conicto +2048 1664 lineto +2048 1712 lineto +2048 2025 1851 2196 conicto +1655 2368 1300 2368 conicto +1074 2368 860 2320 conicto +646 2272 448 2176 conicto +448 2560 lineto +687 2656 912 2704 conicto +1138 2752 1351 2752 conicto +1927 2752 2211 2444 conicto +2496 2137 2496 1513 conicto +end_ol grestore +gsave 14.853629 6.750000 translate 0.035278 -0.035278 scale +start_ol +2549 2204 moveto +2714 2485 2942 2618 conicto +3171 2752 3482 2752 conicto +3899 2752 4125 2464 conicto +4352 2177 4352 1646 conicto +4352 0 lineto +3904 0 lineto +3904 1632 lineto +3904 2006 3769 2187 conicto +3634 2368 3356 2368 conicto +3017 2368 2820 2146 conicto +2624 1925 2624 1542 conicto +2624 0 lineto +2176 0 lineto +2176 1632 lineto +2176 2008 2041 2188 conicto +1906 2368 1624 2368 conicto +1289 2368 1092 2145 conicto +896 1922 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1046 2534 1255 2643 conicto +1465 2752 1753 2752 conicto +2044 2752 2247 2611 conicto +2451 2471 2549 2204 conicto +end_ol grestore +gsave 15.475540 6.750000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 15.870167 6.750000 translate 0.035278 -0.035278 scale +start_ol +896 3456 moveto +896 2688 lineto +1792 2688 lineto +1792 2368 lineto +896 2368 lineto +896 902 lineto +896 572 984 478 conicto +1073 384 1345 384 conicto +1792 384 lineto +1792 0 lineto +1345 0 lineto +836 0 642 194 conicto +448 389 448 902 conicto +448 2368 lineto +128 2368 lineto +128 2688 lineto +448 2688 lineto +448 3456 lineto +896 3456 lineto +end_ol grestore +gsave 16.119933 6.750000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 16.514559 6.750000 translate 0.035278 -0.035278 scale +start_ol +1984 2304 moveto +1912 2337 1828 2352 conicto +1744 2368 1642 2368 conicto +1282 2368 1089 2127 conicto +896 1887 896 1437 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1030 2531 1245 2641 conicto +1460 2752 1767 2752 conicto +1811 2752 1864 2752 conicto +1917 2752 1982 2752 conicto +1984 2304 lineto +end_ol grestore +gsave 13.400000 7.550000 translate 0.035278 -0.035278 scale +start_ol +1792 3712 moveto +1792 3328 lineto +1369 3328 lineto +1139 3328 1049 3237 conicto +960 3147 960 2912 conicto +960 2688 lineto +1664 2688 lineto +1664 2368 lineto +960 2368 lineto +960 0 lineto +512 0 lineto +512 2368 lineto +64 2368 lineto +64 2688 lineto +512 2688 lineto +512 2864 lineto +512 3307 718 3509 conicto +925 3712 1374 3712 conicto +1792 3712 lineto +end_ol grestore +gsave 13.624788 7.550000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 14.016917 7.550000 translate 0.035278 -0.035278 scale +start_ol +1984 2304 moveto +1912 2337 1828 2352 conicto +1744 2368 1642 2368 conicto +1282 2368 1089 2127 conicto +896 1887 896 1437 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1030 2531 1245 2641 conicto +1460 2752 1767 2752 conicto +1811 2752 1864 2752 conicto +1917 2752 1982 2752 conicto +1984 2304 lineto +end_ol grestore +gsave 14.279169 7.550000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 14.481476 7.550000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 14.833645 7.550000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 15.225774 7.550000 translate 0.035278 -0.035278 scale +start_ol +2176 2304 moveto +2176 3712 lineto +2624 3712 lineto +2624 0 lineto +2176 0 lineto +2176 384 lineto +2040 157 1832 46 conicto +1624 -64 1332 -64 conicto +855 -64 555 324 conicto +256 712 256 1344 conicto +256 1976 555 2364 conicto +855 2752 1332 2752 conicto +1624 2752 1832 2641 conicto +2040 2531 2176 2304 conicto +704 1344 moveto +704 865 900 592 conicto +1096 320 1439 320 conicto +1782 320 1979 592 conicto +2176 865 2176 1344 conicto +2176 1823 1979 2095 conicto +1782 2368 1439 2368 conicto +1096 2368 900 2095 conicto +704 1823 704 1344 conicto +end_ol grestore +gsave 15.632893 7.550000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 16.027519 7.550000 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +0.100000 slw +[0.200000] 0 sd +[0.200000] 0 sd +0 slc +n 8.150000 1.525000 m 9.713197 1.525000 l s +[] 0 sd +0 slj +0 slc +n 10.088197 1.525000 m 9.588197 1.775000 l 9.713197 1.525000 l 9.588197 1.275000 l ef +n 10.088197 1.525000 m 9.588197 1.775000 l 9.713197 1.525000 l 9.588197 1.275000 l cp s +0.100000 slw +[0.200000] 0 sd +[0.200000] 0 sd +0 slc +n 13.802500 1.467500 m 15.365697 1.467500 l s +[] 0 sd +0 slj +0 slc +n 15.740697 1.467500 m 15.240697 1.717500 l 15.365697 1.467500 l 15.240697 1.217500 l ef +n 15.740697 1.467500 m 15.240697 1.717500 l 15.365697 1.467500 l 15.240697 1.217500 l cp s +gsave 8.450000 2.325000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 8.802169 2.325000 translate 0.035278 -0.035278 scale +start_ol +1622 1344 moveto +1104 1344 904 1225 conicto +704 1106 704 818 conicto +704 589 854 454 conicto +1004 320 1262 320 conicto +1618 320 1833 572 conicto +2048 825 2048 1244 conicto +2048 1344 lineto +1622 1344 lineto +2496 1513 moveto +2496 0 lineto +2048 0 lineto +2048 384 lineto +1900 154 1679 45 conicto +1458 -64 1138 -64 conicto +733 -64 494 162 conicto +256 389 256 769 conicto +256 1213 555 1438 conicto +854 1664 1448 1664 conicto +2048 1664 lineto +2048 1712 lineto +2048 2025 1851 2196 conicto +1655 2368 1300 2368 conicto +1074 2368 860 2320 conicto +646 2272 448 2176 conicto +448 2560 lineto +687 2656 912 2704 conicto +1138 2752 1351 2752 conicto +1927 2752 2211 2444 conicto +2496 2137 2496 1513 conicto +end_ol grestore +gsave 9.194298 2.325000 translate 0.035278 -0.035278 scale +start_ol +448 3712 moveto +896 3712 lineto +896 0 lineto +448 0 lineto +448 3712 lineto +end_ol grestore +gsave 9.371626 2.325000 translate 0.035278 -0.035278 scale +start_ol +448 3712 moveto +896 3712 lineto +896 0 lineto +448 0 lineto +448 3712 lineto +end_ol grestore +gsave 14.252500 2.367500 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 14.604669 2.367500 translate 0.035278 -0.035278 scale +start_ol +1622 1344 moveto +1104 1344 904 1225 conicto +704 1106 704 818 conicto +704 589 854 454 conicto +1004 320 1262 320 conicto +1618 320 1833 572 conicto +2048 825 2048 1244 conicto +2048 1344 lineto +1622 1344 lineto +2496 1513 moveto +2496 0 lineto +2048 0 lineto +2048 384 lineto +1900 154 1679 45 conicto +1458 -64 1138 -64 conicto +733 -64 494 162 conicto +256 389 256 769 conicto +256 1213 555 1438 conicto +854 1664 1448 1664 conicto +2048 1664 lineto +2048 1712 lineto +2048 2025 1851 2196 conicto +1655 2368 1300 2368 conicto +1074 2368 860 2320 conicto +646 2272 448 2176 conicto +448 2560 lineto +687 2656 912 2704 conicto +1138 2752 1351 2752 conicto +1927 2752 2211 2444 conicto +2496 2137 2496 1513 conicto +end_ol grestore +gsave 14.996798 2.367500 translate 0.035278 -0.035278 scale +start_ol +448 3712 moveto +896 3712 lineto +896 0 lineto +448 0 lineto +448 3712 lineto +end_ol grestore +gsave 15.174126 2.367500 translate 0.035278 -0.035278 scale +start_ol +448 3712 moveto +896 3712 lineto +896 0 lineto +448 0 lineto +448 3712 lineto +end_ol grestore +showpage diff -r aa09c34b90d3 -r 50e23a4b2f40 figures/functionstack.pdf Binary file figures/functionstack.pdf has changed diff -r aa09c34b90d3 -r 50e23a4b2f40 figures/interfacestack.dia Binary file figures/interfacestack.dia has changed diff -r aa09c34b90d3 -r 50e23a4b2f40 figures/interfacestack.eps --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figures/interfacestack.eps Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,2372 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: /home/kent/WorkSpace/Mercurial/master-paper/figures/interfacestack.dia +%%Creator: Dia v0.97 +%%CreationDate: Thu Feb 4 16:40:03 2010 +%%For: kent +%%Orientation: Portrait +%%Magnification: 1.0000 +%%BoundingBox: 0 0 443 302 +%%BeginSetup +%%EndSetup +%%EndComments +%%BeginProlog +[ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright +/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one +/two /three /four /five /six /seven /eight /nine /colon /semicolon +/less /equal /greater /question /at /A /B /C /D /E +/F /G /H /I /J /K /L /M /N /O +/P /Q /R /S /T /U /V /W /X /Y +/Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c +/d /e /f /g /h /i /j /k /l /m +/n /o /p /q /r /s /t /u /v /w +/x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright +/ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior +/acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf +/threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla +/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde +/Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex +/Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring +/ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis +/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave +/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def +/cp {closepath} bind def +/c {curveto} bind def +/f {fill} bind def +/a {arc} bind def +/ef {eofill} bind def +/ex {exch} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth pop} bind def +/tr {translate} bind def + +/ellipsedict 8 dict def +ellipsedict /mtrx matrix put +/ellipse +{ ellipsedict begin + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def /savematrix mtrx currentmatrix def + x y tr xrad yrad sc + 0 0 1 startangle endangle arc + savematrix setmatrix + end +} def + +/mergeprocs { +dup length +3 -1 roll +dup +length +dup +5 1 roll +3 -1 roll +add +array cvx +dup +3 -1 roll +0 exch +putinterval +dup +4 2 roll +putinterval +} bind def +/dpi_x 300 def +/dpi_y 300 def +/conicto { + /to_y exch def + /to_x exch def + /conic_cntrl_y exch def + /conic_cntrl_x exch def + currentpoint + /p0_y exch def + /p0_x exch def + /p1_x p0_x conic_cntrl_x p0_x sub 2 3 div mul add def + /p1_y p0_y conic_cntrl_y p0_y sub 2 3 div mul add def + /p2_x p1_x to_x p0_x sub 1 3 div mul add def + /p2_y p1_y to_y p0_y sub 1 3 div mul add def + p1_x p1_y p2_x p2_y to_x to_y curveto +} bind def +/start_ol { gsave 1.1 dpi_x div dup scale} bind def +/end_ol { closepath fill grestore } bind def +28.346000 -28.346000 scale +-2.900000 -13.550000 translate +%%EndProlog + + +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 5.950000 4.500000 m 5.950000 13.500000 l s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 7.050000 4.500000 m 7.050000 13.500000 l s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 6.000000 7.000000 m 6.000000 8.000000 l 7.000000 8.000000 l 7.000000 7.000000 l f +0.000000 0.000000 0.000000 srgb +n 6.000000 7.000000 m 6.000000 8.000000 l 7.000000 8.000000 l 7.000000 7.000000 l cp s +gsave 6.077500 7.721250 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 6.514592 7.721250 translate 0.035278 -0.035278 scale +start_ol +640 384 moveto +1408 384 lineto +1408 3136 lineto +576 2944 lineto +576 3328 lineto +1434 3520 lineto +1920 3520 lineto +1920 384 lineto +2688 384 lineto +2688 0 lineto +640 0 lineto +640 384 lineto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 6.000000 8.000000 m 6.000000 9.000000 l 7.000000 9.000000 l 7.000000 8.000000 l f +0.000000 0.000000 0.000000 srgb +n 6.000000 8.000000 m 6.000000 9.000000 l 7.000000 9.000000 l 7.000000 8.000000 l cp s +gsave 6.077500 8.721250 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 6.514592 8.721250 translate 0.035278 -0.035278 scale +start_ol +938 384 moveto +2643 384 lineto +2643 0 lineto +384 0 lineto +384 384 lineto +654 668 1119 1146 conicto +1584 1625 1704 1763 conicto +1931 2023 2021 2203 conicto +2112 2384 2112 2558 conicto +2112 2842 1913 3021 conicto +1715 3200 1397 3200 conicto +1171 3200 920 3104 conicto +669 3009 384 2816 conicto +384 3328 lineto +678 3455 933 3519 conicto +1188 3584 1400 3584 conicto +1959 3584 2291 3309 conicto +2624 3034 2624 2574 conicto +2624 2356 2540 2160 conicto +2457 1965 2237 1700 conicto +2177 1631 1852 1302 conicto +1528 974 938 384 conicto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 6.000000 9.000000 m 6.000000 10.000000 l 7.000000 10.000000 l 7.000000 9.000000 l f +0.000000 0.000000 0.000000 srgb +n 6.000000 9.000000 m 6.000000 10.000000 l 7.000000 10.000000 l 7.000000 9.000000 l cp s +gsave 6.077500 9.721250 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 6.514592 9.721250 translate 0.035278 -0.035278 scale +start_ol +1897 1936 moveto +2269 1862 2478 1627 conicto +2688 1392 2688 1046 conicto +2688 516 2331 226 conicto +1975 -64 1319 -64 conicto +1099 -64 865 -16 conicto +632 32 384 128 conicto +384 576 lineto +576 449 805 384 conicto +1035 320 1285 320 conicto +1720 320 1948 504 conicto +2176 688 2176 1039 conicto +2176 1363 1967 1545 conicto +1759 1728 1388 1728 conicto +1024 1728 lineto +1024 2112 lineto +1405 2112 lineto +1717 2112 1882 2250 conicto +2048 2388 2048 2648 conicto +2048 2915 1877 3057 conicto +1706 3200 1388 3200 conicto +1200 3200 985 3153 conicto +770 3107 512 3008 conicto +512 3456 lineto +773 3520 1001 3552 conicto +1229 3584 1431 3584 conicto +1952 3584 2256 3343 conicto +2560 3102 2560 2692 conicto +2560 2406 2387 2209 conicto +2215 2012 1897 1936 conicto +end_ol grestore +0.050000 slw +[] 0 sd +[] 0 sd +0 slc +n 5.000000 7.500000 m 5.888197 7.500000 l s +0.050000 slw +[] 0 sd +0 slj +0 slc +n 5.444098 7.750000 m 5.944098 7.500000 l 5.444098 7.250000 l s +gsave 7.900000 8.300000 translate 0.035278 -0.035278 scale +start_ol +448 2688 moveto +896 2688 lineto +896 0 lineto +448 0 lineto +448 2688 lineto +448 3712 moveto +896 3712 lineto +896 3136 lineto +448 3136 lineto +448 3712 lineto +end_ol grestore +gsave 8.077329 8.300000 translate 0.035278 -0.035278 scale +start_ol +2688 1646 moveto +2688 0 lineto +2240 0 lineto +2240 1632 lineto +2240 2001 2093 2184 conicto +1947 2368 1654 2368 conicto +1302 2368 1099 2146 conicto +896 1925 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1053 2529 1266 2640 conicto +1479 2752 1757 2752 conicto +2217 2752 2452 2471 conicto +2688 2191 2688 1646 conicto +end_ol grestore +gsave 8.481943 8.300000 translate 0.035278 -0.035278 scale +start_ol +896 3456 moveto +896 2688 lineto +1792 2688 lineto +1792 2368 lineto +896 2368 lineto +896 902 lineto +896 572 984 478 conicto +1073 384 1345 384 conicto +1792 384 lineto +1792 0 lineto +1345 0 lineto +836 0 642 194 conicto +448 389 448 902 conicto +448 2368 lineto +128 2368 lineto +128 2688 lineto +448 2688 lineto +448 3456 lineto +896 3456 lineto +end_ol grestore +gsave 8.731709 8.300000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 9.126335 8.300000 translate 0.035278 -0.035278 scale +start_ol +1984 2304 moveto +1912 2337 1828 2352 conicto +1744 2368 1642 2368 conicto +1282 2368 1089 2127 conicto +896 1887 896 1437 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1030 2531 1245 2641 conicto +1460 2752 1767 2752 conicto +1811 2752 1864 2752 conicto +1917 2752 1982 2752 conicto +1984 2304 lineto +end_ol grestore +gsave 9.388587 8.300000 translate 0.035278 -0.035278 scale +start_ol +1792 3712 moveto +1792 3328 lineto +1369 3328 lineto +1139 3328 1049 3237 conicto +960 3147 960 2912 conicto +960 2688 lineto +1664 2688 lineto +1664 2368 lineto +960 2368 lineto +960 0 lineto +512 0 lineto +512 2368 lineto +64 2368 lineto +64 2688 lineto +512 2688 lineto +512 2864 lineto +512 3307 718 3509 conicto +925 3712 1374 3712 conicto +1792 3712 lineto +end_ol grestore +gsave 9.613376 8.300000 translate 0.035278 -0.035278 scale +start_ol +1622 1344 moveto +1104 1344 904 1225 conicto +704 1106 704 818 conicto +704 589 854 454 conicto +1004 320 1262 320 conicto +1618 320 1833 572 conicto +2048 825 2048 1244 conicto +2048 1344 lineto +1622 1344 lineto +2496 1513 moveto +2496 0 lineto +2048 0 lineto +2048 384 lineto +1900 154 1679 45 conicto +1458 -64 1138 -64 conicto +733 -64 494 162 conicto +256 389 256 769 conicto +256 1213 555 1438 conicto +854 1664 1448 1664 conicto +2048 1664 lineto +2048 1712 lineto +2048 2025 1851 2196 conicto +1655 2368 1300 2368 conicto +1074 2368 860 2320 conicto +646 2272 448 2176 conicto +448 2560 lineto +687 2656 912 2704 conicto +1138 2752 1351 2752 conicto +1927 2752 2211 2444 conicto +2496 2137 2496 1513 conicto +end_ol grestore +gsave 10.005505 8.300000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 10.357673 8.300000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 7.900000 9.100000 translate 0.035278 -0.035278 scale +start_ol +1792 3712 moveto +1792 3328 lineto +1369 3328 lineto +1139 3328 1049 3237 conicto +960 3147 960 2912 conicto +960 2688 lineto +1664 2688 lineto +1664 2368 lineto +960 2368 lineto +960 0 lineto +512 0 lineto +512 2368 lineto +64 2368 lineto +64 2688 lineto +512 2688 lineto +512 2864 lineto +512 3307 718 3509 conicto +925 3712 1374 3712 conicto +1792 3712 lineto +end_ol grestore +gsave 8.124788 9.100000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 8.516917 9.100000 translate 0.035278 -0.035278 scale +start_ol +1984 2304 moveto +1912 2337 1828 2352 conicto +1744 2368 1642 2368 conicto +1282 2368 1089 2127 conicto +896 1887 896 1437 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1030 2531 1245 2641 conicto +1460 2752 1767 2752 conicto +1811 2752 1864 2752 conicto +1917 2752 1982 2752 conicto +1984 2304 lineto +end_ol grestore +gsave 8.779169 9.100000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 8.981476 9.100000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 9.333645 9.100000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 9.725774 9.100000 translate 0.035278 -0.035278 scale +start_ol +2176 2304 moveto +2176 3712 lineto +2624 3712 lineto +2624 0 lineto +2176 0 lineto +2176 384 lineto +2040 157 1832 46 conicto +1624 -64 1332 -64 conicto +855 -64 555 324 conicto +256 712 256 1344 conicto +256 1976 555 2364 conicto +855 2752 1332 2752 conicto +1624 2752 1832 2641 conicto +2040 2531 2176 2304 conicto +704 1344 moveto +704 865 900 592 conicto +1096 320 1439 320 conicto +1782 320 1979 592 conicto +2176 865 2176 1344 conicto +2176 1823 1979 2095 conicto +1782 2368 1439 2368 conicto +1096 2368 900 2095 conicto +704 1823 704 1344 conicto +end_ol grestore +gsave 10.132893 9.100000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 10.527519 9.100000 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 11.500000 7.000000 m 11.500000 8.000000 l 12.500000 8.000000 l 12.500000 7.000000 l f +0.000000 0.000000 0.000000 srgb +n 11.500000 7.000000 m 11.500000 8.000000 l 12.500000 8.000000 l 12.500000 7.000000 l cp s +gsave 11.576250 7.721250 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 12.015839 7.721250 translate 0.035278 -0.035278 scale +start_ol +640 384 moveto +1408 384 lineto +1408 3136 lineto +576 2944 lineto +576 3328 lineto +1434 3520 lineto +1920 3520 lineto +1920 384 lineto +2688 384 lineto +2688 0 lineto +640 0 lineto +640 384 lineto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 11.500000 8.000000 m 11.500000 9.000000 l 12.500000 9.000000 l 12.500000 8.000000 l f +0.000000 0.000000 0.000000 srgb +n 11.500000 8.000000 m 11.500000 9.000000 l 12.500000 9.000000 l 12.500000 8.000000 l cp s +gsave 11.576250 8.721250 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 12.015839 8.721250 translate 0.035278 -0.035278 scale +start_ol +938 384 moveto +2643 384 lineto +2643 0 lineto +384 0 lineto +384 384 lineto +654 668 1119 1146 conicto +1584 1625 1704 1763 conicto +1931 2023 2021 2203 conicto +2112 2384 2112 2558 conicto +2112 2842 1913 3021 conicto +1715 3200 1397 3200 conicto +1171 3200 920 3104 conicto +669 3009 384 2816 conicto +384 3328 lineto +678 3455 933 3519 conicto +1188 3584 1400 3584 conicto +1959 3584 2291 3309 conicto +2624 3034 2624 2574 conicto +2624 2356 2540 2160 conicto +2457 1965 2237 1700 conicto +2177 1631 1852 1302 conicto +1528 974 938 384 conicto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 11.500000 9.000000 m 11.500000 10.000000 l 12.500000 10.000000 l 12.500000 9.000000 l f +0.000000 0.000000 0.000000 srgb +n 11.500000 9.000000 m 11.500000 10.000000 l 12.500000 10.000000 l 12.500000 9.000000 l cp s +gsave 11.576250 9.721250 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 12.015839 9.721250 translate 0.035278 -0.035278 scale +start_ol +1897 1936 moveto +2269 1862 2478 1627 conicto +2688 1392 2688 1046 conicto +2688 516 2331 226 conicto +1975 -64 1319 -64 conicto +1099 -64 865 -16 conicto +632 32 384 128 conicto +384 576 lineto +576 449 805 384 conicto +1035 320 1285 320 conicto +1720 320 1948 504 conicto +2176 688 2176 1039 conicto +2176 1363 1967 1545 conicto +1759 1728 1388 1728 conicto +1024 1728 lineto +1024 2112 lineto +1405 2112 lineto +1717 2112 1882 2250 conicto +2048 2388 2048 2648 conicto +2048 2915 1877 3057 conicto +1706 3200 1388 3200 conicto +1200 3200 985 3153 conicto +770 3107 512 3008 conicto +512 3456 lineto +773 3520 1001 3552 conicto +1229 3584 1431 3584 conicto +1952 3584 2256 3343 conicto +2560 3102 2560 2692 conicto +2560 2406 2387 2209 conicto +2215 2012 1897 1936 conicto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 11.450000 4.500000 m 11.450000 13.500000 l s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 12.550000 4.500000 m 12.550000 13.500000 l s +gsave 4.221250 3.500000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 4.573419 3.500000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 4.965548 3.500000 translate 0.035278 -0.035278 scale +start_ol +2176 2304 moveto +2176 3712 lineto +2624 3712 lineto +2624 0 lineto +2176 0 lineto +2176 384 lineto +2040 157 1832 46 conicto +1624 -64 1332 -64 conicto +855 -64 555 324 conicto +256 712 256 1344 conicto +256 1976 555 2364 conicto +855 2752 1332 2752 conicto +1624 2752 1832 2641 conicto +2040 2531 2176 2304 conicto +704 1344 moveto +704 865 900 592 conicto +1096 320 1439 320 conicto +1782 320 1979 592 conicto +2176 865 2176 1344 conicto +2176 1823 1979 2095 conicto +1782 2368 1439 2368 conicto +1096 2368 900 2095 conicto +704 1823 704 1344 conicto +end_ol grestore +gsave 5.372667 3.500000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 5.767293 3.500000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 5.969600 3.500000 translate 0.035278 -0.035278 scale +start_ol +2112 2560 moveto +2112 2176 lineto +1932 2272 1738 2320 conicto +1544 2368 1336 2368 conicto +1020 2368 862 2269 conicto +704 2170 704 1972 conicto +704 1821 814 1735 conicto +925 1649 1260 1571 conicto +1403 1538 lineto +1857 1438 2048 1255 conicto +2240 1072 2240 744 conicto +2240 371 1954 153 conicto +1668 -64 1167 -64 conicto +958 -64 732 -16 conicto +506 32 256 128 conicto +256 576 lineto +491 448 719 384 conicto +947 320 1170 320 conicto +1470 320 1631 425 conicto +1792 531 1792 722 conicto +1792 900 1678 994 conicto +1564 1089 1177 1177 conicto +1032 1212 lineto +621 1298 438 1476 conicto +256 1654 256 1964 conicto +256 2341 520 2546 conicto +784 2752 1269 2752 conicto +1509 2752 1721 2704 conicto +1933 2656 2112 2560 conicto +end_ol grestore +gsave 6.301785 3.500000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 6.696411 3.500000 translate 0.035278 -0.035278 scale +start_ol +2176 1375 moveto +2176 1848 1982 2108 conicto +1789 2368 1439 2368 conicto +1091 2368 897 2108 conicto +704 1848 704 1375 conicto +704 904 897 644 conicto +1091 384 1439 384 conicto +1789 384 1982 644 conicto +2176 904 2176 1375 conicto +2624 347 moveto +2624 -347 2323 -685 conicto +2023 -1024 1404 -1024 conicto +1174 -1024 971 -992 conicto +768 -961 576 -896 conicto +576 -448 lineto +766 -546 951 -593 conicto +1137 -640 1329 -640 conicto +1754 -640 1965 -415 conicto +2176 -190 2176 264 conicto +2176 448 lineto +2042 223 1833 111 conicto +1624 0 1332 0 conicto +848 0 552 376 conicto +256 753 256 1375 conicto +256 1999 552 2375 conicto +848 2752 1332 2752 conicto +1624 2752 1833 2640 conicto +2042 2529 2176 2304 conicto +2176 2688 lineto +2624 2688 lineto +2624 347 lineto +end_ol grestore +gsave 7.103530 3.500000 translate 0.035278 -0.035278 scale +start_ol +2549 2204 moveto +2714 2485 2942 2618 conicto +3171 2752 3482 2752 conicto +3899 2752 4125 2464 conicto +4352 2177 4352 1646 conicto +4352 0 lineto +3904 0 lineto +3904 1632 lineto +3904 2006 3769 2187 conicto +3634 2368 3356 2368 conicto +3017 2368 2820 2146 conicto +2624 1925 2624 1542 conicto +2624 0 lineto +2176 0 lineto +2176 1632 lineto +2176 2008 2041 2188 conicto +1906 2368 1624 2368 conicto +1289 2368 1092 2145 conicto +896 1922 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1046 2534 1255 2643 conicto +1465 2752 1753 2752 conicto +2044 2752 2247 2611 conicto +2451 2471 2549 2204 conicto +end_ol grestore +gsave 7.725441 3.500000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 8.120067 3.500000 translate 0.035278 -0.035278 scale +start_ol +2688 1646 moveto +2688 0 lineto +2240 0 lineto +2240 1632 lineto +2240 2001 2093 2184 conicto +1947 2368 1654 2368 conicto +1302 2368 1099 2146 conicto +896 1925 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1053 2529 1266 2640 conicto +1479 2752 1757 2752 conicto +2217 2752 2452 2471 conicto +2688 2191 2688 1646 conicto +end_ol grestore +gsave 8.524681 3.500000 translate 0.035278 -0.035278 scale +start_ol +896 3456 moveto +896 2688 lineto +1792 2688 lineto +1792 2368 lineto +896 2368 lineto +896 902 lineto +896 572 984 478 conicto +1073 384 1345 384 conicto +1792 384 lineto +1792 0 lineto +1345 0 lineto +836 0 642 194 conicto +448 389 448 902 conicto +448 2368 lineto +128 2368 lineto +128 2688 lineto +448 2688 lineto +448 3456 lineto +896 3456 lineto +end_ol grestore +gsave 5.507500 4.300000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 5.859669 4.300000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 6.251798 4.300000 translate 0.035278 -0.035278 scale +start_ol +2176 2304 moveto +2176 3712 lineto +2624 3712 lineto +2624 0 lineto +2176 0 lineto +2176 384 lineto +2040 157 1832 46 conicto +1624 -64 1332 -64 conicto +855 -64 555 324 conicto +256 712 256 1344 conicto +256 1976 555 2364 conicto +855 2752 1332 2752 conicto +1624 2752 1832 2641 conicto +2040 2531 2176 2304 conicto +704 1344 moveto +704 865 900 592 conicto +1096 320 1439 320 conicto +1782 320 1979 592 conicto +2176 865 2176 1344 conicto +2176 1823 1979 2095 conicto +1782 2368 1439 2368 conicto +1096 2368 900 2095 conicto +704 1823 704 1344 conicto +end_ol grestore +gsave 6.658917 4.300000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 7.053543 4.300000 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 13.400000 8.800000 translate 0.035278 -0.035278 scale +start_ol +448 2688 moveto +896 2688 lineto +896 0 lineto +448 0 lineto +448 2688 lineto +448 3712 moveto +896 3712 lineto +896 3136 lineto +448 3136 lineto +448 3712 lineto +end_ol grestore +gsave 13.577329 8.800000 translate 0.035278 -0.035278 scale +start_ol +2688 1646 moveto +2688 0 lineto +2240 0 lineto +2240 1632 lineto +2240 2001 2093 2184 conicto +1947 2368 1654 2368 conicto +1302 2368 1099 2146 conicto +896 1925 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1053 2529 1266 2640 conicto +1479 2752 1757 2752 conicto +2217 2752 2452 2471 conicto +2688 2191 2688 1646 conicto +end_ol grestore +gsave 13.981943 8.800000 translate 0.035278 -0.035278 scale +start_ol +896 3456 moveto +896 2688 lineto +1792 2688 lineto +1792 2368 lineto +896 2368 lineto +896 902 lineto +896 572 984 478 conicto +1073 384 1345 384 conicto +1792 384 lineto +1792 0 lineto +1345 0 lineto +836 0 642 194 conicto +448 389 448 902 conicto +448 2368 lineto +128 2368 lineto +128 2688 lineto +448 2688 lineto +448 3456 lineto +896 3456 lineto +end_ol grestore +gsave 14.231709 8.800000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 14.626335 8.800000 translate 0.035278 -0.035278 scale +start_ol +1984 2304 moveto +1912 2337 1828 2352 conicto +1744 2368 1642 2368 conicto +1282 2368 1089 2127 conicto +896 1887 896 1437 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1030 2531 1245 2641 conicto +1460 2752 1767 2752 conicto +1811 2752 1864 2752 conicto +1917 2752 1982 2752 conicto +1984 2304 lineto +end_ol grestore +gsave 14.888587 8.800000 translate 0.035278 -0.035278 scale +start_ol +1792 3712 moveto +1792 3328 lineto +1369 3328 lineto +1139 3328 1049 3237 conicto +960 3147 960 2912 conicto +960 2688 lineto +1664 2688 lineto +1664 2368 lineto +960 2368 lineto +960 0 lineto +512 0 lineto +512 2368 lineto +64 2368 lineto +64 2688 lineto +512 2688 lineto +512 2864 lineto +512 3307 718 3509 conicto +925 3712 1374 3712 conicto +1792 3712 lineto +end_ol grestore +gsave 15.113376 8.800000 translate 0.035278 -0.035278 scale +start_ol +1622 1344 moveto +1104 1344 904 1225 conicto +704 1106 704 818 conicto +704 589 854 454 conicto +1004 320 1262 320 conicto +1618 320 1833 572 conicto +2048 825 2048 1244 conicto +2048 1344 lineto +1622 1344 lineto +2496 1513 moveto +2496 0 lineto +2048 0 lineto +2048 384 lineto +1900 154 1679 45 conicto +1458 -64 1138 -64 conicto +733 -64 494 162 conicto +256 389 256 769 conicto +256 1213 555 1438 conicto +854 1664 1448 1664 conicto +2048 1664 lineto +2048 1712 lineto +2048 2025 1851 2196 conicto +1655 2368 1300 2368 conicto +1074 2368 860 2320 conicto +646 2272 448 2176 conicto +448 2560 lineto +687 2656 912 2704 conicto +1138 2752 1351 2752 conicto +1927 2752 2211 2444 conicto +2496 2137 2496 1513 conicto +end_ol grestore +gsave 15.505505 8.800000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 15.857673 8.800000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 13.400000 9.600000 translate 0.035278 -0.035278 scale +start_ol +1792 3712 moveto +1792 3328 lineto +1369 3328 lineto +1139 3328 1049 3237 conicto +960 3147 960 2912 conicto +960 2688 lineto +1664 2688 lineto +1664 2368 lineto +960 2368 lineto +960 0 lineto +512 0 lineto +512 2368 lineto +64 2368 lineto +64 2688 lineto +512 2688 lineto +512 2864 lineto +512 3307 718 3509 conicto +925 3712 1374 3712 conicto +1792 3712 lineto +end_ol grestore +gsave 13.624788 9.600000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 14.016917 9.600000 translate 0.035278 -0.035278 scale +start_ol +1984 2304 moveto +1912 2337 1828 2352 conicto +1744 2368 1642 2368 conicto +1282 2368 1089 2127 conicto +896 1887 896 1437 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1030 2531 1245 2641 conicto +1460 2752 1767 2752 conicto +1811 2752 1864 2752 conicto +1917 2752 1982 2752 conicto +1984 2304 lineto +end_ol grestore +gsave 14.279169 9.600000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 14.481476 9.600000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 14.833645 9.600000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 15.225774 9.600000 translate 0.035278 -0.035278 scale +start_ol +2176 2304 moveto +2176 3712 lineto +2624 3712 lineto +2624 0 lineto +2176 0 lineto +2176 384 lineto +2040 157 1832 46 conicto +1624 -64 1332 -64 conicto +855 -64 555 324 conicto +256 712 256 1344 conicto +256 1976 555 2364 conicto +855 2752 1332 2752 conicto +1624 2752 1832 2641 conicto +2040 2531 2176 2304 conicto +704 1344 moveto +704 865 900 592 conicto +1096 320 1439 320 conicto +1782 320 1979 592 conicto +2176 865 2176 1344 conicto +2176 1823 1979 2095 conicto +1782 2368 1439 2368 conicto +1096 2368 900 2095 conicto +704 1823 704 1344 conicto +end_ol grestore +gsave 15.632893 9.600000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 16.027519 9.600000 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 11.006250 4.250000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 11.358419 4.250000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 11.750548 4.250000 translate 0.035278 -0.035278 scale +start_ol +2176 2304 moveto +2176 3712 lineto +2624 3712 lineto +2624 0 lineto +2176 0 lineto +2176 384 lineto +2040 157 1832 46 conicto +1624 -64 1332 -64 conicto +855 -64 555 324 conicto +256 712 256 1344 conicto +256 1976 555 2364 conicto +855 2752 1332 2752 conicto +1624 2752 1832 2641 conicto +2040 2531 2176 2304 conicto +704 1344 moveto +704 865 900 592 conicto +1096 320 1439 320 conicto +1782 320 1979 592 conicto +2176 865 2176 1344 conicto +2176 1823 1979 2095 conicto +1782 2368 1439 2368 conicto +1096 2368 900 2095 conicto +704 1823 704 1344 conicto +end_ol grestore +gsave 12.157667 4.250000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 12.552293 4.250000 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 11.500000 10.000000 m 11.500000 11.000000 l 12.500000 11.000000 l 12.500000 10.000000 l f +0.000000 0.000000 0.000000 srgb +n 11.500000 10.000000 m 11.500000 11.000000 l 12.500000 11.000000 l 12.500000 10.000000 l cp s +gsave 11.576250 10.721250 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 12.015839 10.721250 translate 0.035278 -0.035278 scale +start_ol +1792 3103 moveto +630 1216 lineto +1792 1216 lineto +1792 3103 lineto +1709 3520 moveto +2304 3520 lineto +2304 1216 lineto +2816 1216 lineto +2816 832 lineto +2304 832 lineto +2304 0 lineto +1792 0 lineto +1792 832 lineto +256 832 lineto +256 1291 lineto +1709 3520 lineto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 17.000000 7.000000 m 17.000000 8.000000 l 18.000000 8.000000 l 18.000000 7.000000 l f +0.000000 0.000000 0.000000 srgb +n 17.000000 7.000000 m 17.000000 8.000000 l 18.000000 8.000000 l 18.000000 7.000000 l cp s +gsave 17.072500 7.721250 translate 0.035278 -0.035278 scale +start_ol +3136 3264 moveto +3136 2752 lineto +2892 2977 2616 3088 conicto +2340 3200 2030 3200 conicto +1418 3200 1093 2829 conicto +768 2459 768 1759 conicto +768 1061 1093 690 conicto +1418 320 2030 320 conicto +2340 320 2616 431 conicto +2892 543 3136 768 conicto +3136 256 lineto +2882 96 2599 16 conicto +2316 -64 2000 -64 conicto +1189 -64 722 424 conicto +256 913 256 1759 conicto +256 2607 722 3095 conicto +1189 3584 2000 3584 conicto +2320 3584 2603 3504 conicto +2887 3424 3136 3264 conicto +end_ol grestore +gsave 17.519580 7.721250 translate 0.035278 -0.035278 scale +start_ol +640 384 moveto +1408 384 lineto +1408 3136 lineto +576 2944 lineto +576 3328 lineto +1434 3520 lineto +1920 3520 lineto +1920 384 lineto +2688 384 lineto +2688 0 lineto +640 0 lineto +640 384 lineto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 17.000000 8.000000 m 17.000000 9.000000 l 18.000000 9.000000 l 18.000000 8.000000 l f +0.000000 0.000000 0.000000 srgb +n 17.000000 8.000000 m 17.000000 9.000000 l 18.000000 9.000000 l 18.000000 8.000000 l cp s +gsave 17.072500 8.721250 translate 0.035278 -0.035278 scale +start_ol +3136 3264 moveto +3136 2752 lineto +2892 2977 2616 3088 conicto +2340 3200 2030 3200 conicto +1418 3200 1093 2829 conicto +768 2459 768 1759 conicto +768 1061 1093 690 conicto +1418 320 2030 320 conicto +2340 320 2616 431 conicto +2892 543 3136 768 conicto +3136 256 lineto +2882 96 2599 16 conicto +2316 -64 2000 -64 conicto +1189 -64 722 424 conicto +256 913 256 1759 conicto +256 2607 722 3095 conicto +1189 3584 2000 3584 conicto +2320 3584 2603 3504 conicto +2887 3424 3136 3264 conicto +end_ol grestore +gsave 17.519580 8.721250 translate 0.035278 -0.035278 scale +start_ol +938 384 moveto +2643 384 lineto +2643 0 lineto +384 0 lineto +384 384 lineto +654 668 1119 1146 conicto +1584 1625 1704 1763 conicto +1931 2023 2021 2203 conicto +2112 2384 2112 2558 conicto +2112 2842 1913 3021 conicto +1715 3200 1397 3200 conicto +1171 3200 920 3104 conicto +669 3009 384 2816 conicto +384 3328 lineto +678 3455 933 3519 conicto +1188 3584 1400 3584 conicto +1959 3584 2291 3309 conicto +2624 3034 2624 2574 conicto +2624 2356 2540 2160 conicto +2457 1965 2237 1700 conicto +2177 1631 1852 1302 conicto +1528 974 938 384 conicto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 16.950000 4.500000 m 16.950000 13.500000 l s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 18.050000 4.500000 m 18.050000 13.500000 l s +gsave 16.502500 4.250000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 16.854669 4.250000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 17.246798 4.250000 translate 0.035278 -0.035278 scale +start_ol +2176 2304 moveto +2176 3712 lineto +2624 3712 lineto +2624 0 lineto +2176 0 lineto +2176 384 lineto +2040 157 1832 46 conicto +1624 -64 1332 -64 conicto +855 -64 555 324 conicto +256 712 256 1344 conicto +256 1976 555 2364 conicto +855 2752 1332 2752 conicto +1624 2752 1832 2641 conicto +2040 2531 2176 2304 conicto +704 1344 moveto +704 865 900 592 conicto +1096 320 1439 320 conicto +1782 320 1979 592 conicto +2176 865 2176 1344 conicto +2176 1823 1979 2095 conicto +1782 2368 1439 2368 conicto +1096 2368 900 2095 conicto +704 1823 704 1344 conicto +end_ol grestore +gsave 17.653917 4.250000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 18.048543 4.250000 translate 0.035278 -0.035278 scale +start_ol +3136 3264 moveto +3136 2752 lineto +2892 2977 2616 3088 conicto +2340 3200 2030 3200 conicto +1418 3200 1093 2829 conicto +768 2459 768 1759 conicto +768 1061 1093 690 conicto +1418 320 2030 320 conicto +2340 320 2616 431 conicto +2892 543 3136 768 conicto +3136 256 lineto +2882 96 2599 16 conicto +2316 -64 2000 -64 conicto +1189 -64 722 424 conicto +256 913 256 1759 conicto +256 2607 722 3095 conicto +1189 3584 2000 3584 conicto +2320 3584 2603 3504 conicto +2887 3424 3136 3264 conicto +end_ol grestore +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 12.500000 7.000000 m 13.500000 7.000000 12.500000 9.000000 13.500000 9.000000 c s +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 13.500000 9.000000 m 12.500000 9.000000 13.500000 11.000000 12.500000 11.000000 c s +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 7.000000 7.000000 m 8.000000 7.000000 7.000000 8.500000 8.000000 8.500000 c s +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 8.000000 8.500000 m 7.000000 8.500000 8.000000 10.000000 7.000000 10.000000 c s +gsave 2.900000 7.350000 translate 0.035278 -0.035278 scale +start_ol +2624 3392 moveto +2624 2944 lineto +2352 3073 2111 3136 conicto +1870 3200 1645 3200 conicto +1255 3200 1043 3052 conicto +832 2904 832 2631 conicto +832 2402 969 2285 conicto +1107 2169 1491 2097 conicto +1773 2039 lineto +2308 1937 2562 1678 conicto +2816 1420 2816 986 conicto +2816 469 2468 202 conicto +2121 -64 1450 -64 conicto +1197 -64 911 0 conicto +626 65 320 192 conicto +320 704 lineto +613 513 893 416 conicto +1174 320 1445 320 conicto +1857 320 2080 485 conicto +2304 650 2304 955 conicto +2304 1221 2148 1371 conicto +1992 1522 1636 1597 conicto +1352 1652 lineto +807 1756 563 1978 conicto +320 2201 320 2597 conicto +320 3056 654 3320 conicto +989 3584 1576 3584 conicto +1828 3584 2089 3536 conicto +2351 3488 2624 3392 conicto +end_ol grestore +gsave 3.307119 7.350000 translate 0.035278 -0.035278 scale +start_ol +896 3456 moveto +896 2688 lineto +1792 2688 lineto +1792 2368 lineto +896 2368 lineto +896 902 lineto +896 572 984 478 conicto +1073 384 1345 384 conicto +1792 384 lineto +1792 0 lineto +1345 0 lineto +836 0 642 194 conicto +448 389 448 902 conicto +448 2368 lineto +128 2368 lineto +128 2688 lineto +448 2688 lineto +448 3456 lineto +896 3456 lineto +end_ol grestore +gsave 3.556886 7.350000 translate 0.035278 -0.035278 scale +start_ol +1622 1344 moveto +1104 1344 904 1225 conicto +704 1106 704 818 conicto +704 589 854 454 conicto +1004 320 1262 320 conicto +1618 320 1833 572 conicto +2048 825 2048 1244 conicto +2048 1344 lineto +1622 1344 lineto +2496 1513 moveto +2496 0 lineto +2048 0 lineto +2048 384 lineto +1900 154 1679 45 conicto +1458 -64 1138 -64 conicto +733 -64 494 162 conicto +256 389 256 769 conicto +256 1213 555 1438 conicto +854 1664 1448 1664 conicto +2048 1664 lineto +2048 1712 lineto +2048 2025 1851 2196 conicto +1655 2368 1300 2368 conicto +1074 2368 860 2320 conicto +646 2272 448 2176 conicto +448 2560 lineto +687 2656 912 2704 conicto +1138 2752 1351 2752 conicto +1927 2752 2211 2444 conicto +2496 2137 2496 1513 conicto +end_ol grestore +gsave 3.949015 7.350000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 4.301184 7.350000 translate 0.035278 -0.035278 scale +start_ol +448 3712 moveto +896 3712 lineto +896 1529 lineto +2196 2688 lineto +2752 2688 lineto +1346 1430 lineto +2816 0 lineto +2246 0 lineto +896 1313 lineto +896 0 lineto +448 0 lineto +448 3712 lineto +end_ol grestore +gsave 2.900000 8.150000 translate 0.035278 -0.035278 scale +start_ol +896 384 moveto +896 -1024 lineto +448 -1024 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1032 2531 1240 2641 conicto +1448 2752 1737 2752 conicto +2217 2752 2516 2364 conicto +2816 1976 2816 1344 conicto +2816 712 2516 324 conicto +2217 -64 1737 -64 conicto +1448 -64 1240 46 conicto +1032 157 896 384 conicto +2368 1344 moveto +2368 1823 2171 2095 conicto +1975 2368 1632 2368 conicto +1289 2368 1092 2095 conicto +896 1823 896 1344 conicto +896 865 1092 592 conicto +1289 320 1632 320 conicto +1975 320 2171 592 conicto +2368 865 2368 1344 conicto +end_ol grestore +gsave 3.307119 8.150000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 3.699248 8.150000 translate 0.035278 -0.035278 scale +start_ol +448 2688 moveto +896 2688 lineto +896 0 lineto +448 0 lineto +448 2688 lineto +448 3712 moveto +896 3712 lineto +896 3136 lineto +448 3136 lineto +448 3712 lineto +end_ol grestore +gsave 3.876577 8.150000 translate 0.035278 -0.035278 scale +start_ol +2688 1646 moveto +2688 0 lineto +2240 0 lineto +2240 1632 lineto +2240 2001 2093 2184 conicto +1947 2368 1654 2368 conicto +1302 2368 1099 2146 conicto +896 1925 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1053 2529 1266 2640 conicto +1479 2752 1757 2752 conicto +2217 2752 2452 2471 conicto +2688 2191 2688 1646 conicto +end_ol grestore +gsave 4.281191 8.150000 translate 0.035278 -0.035278 scale +start_ol +896 3456 moveto +896 2688 lineto +1792 2688 lineto +1792 2368 lineto +896 2368 lineto +896 902 lineto +896 572 984 478 conicto +1073 384 1345 384 conicto +1792 384 lineto +1792 0 lineto +1345 0 lineto +836 0 642 194 conicto +448 389 448 902 conicto +448 2368 lineto +128 2368 lineto +128 2688 lineto +448 2688 lineto +448 3456 lineto +896 3456 lineto +end_ol grestore +gsave 4.530958 8.150000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 4.925584 8.150000 translate 0.035278 -0.035278 scale +start_ol +1984 2304 moveto +1912 2337 1828 2352 conicto +1744 2368 1642 2368 conicto +1282 2368 1089 2127 conicto +896 1887 896 1437 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1030 2531 1245 2641 conicto +1460 2752 1767 2752 conicto +1811 2752 1864 2752 conicto +1917 2752 1982 2752 conicto +1984 2304 lineto +end_ol grestore +0.050000 slw +[] 0 sd +[] 0 sd +0 slc +n 10.500000 7.500000 m 11.388197 7.500000 l s +0.050000 slw +[] 0 sd +0 slj +0 slc +n 10.944098 7.750000 m 11.444098 7.500000 l 10.944098 7.250000 l s +0.050000 slw +[] 0 sd +[] 0 sd +0 slc +n 16.000000 7.500000 m 16.888197 7.500000 l s +0.050000 slw +[] 0 sd +0 slj +0 slc +n 16.444098 7.750000 m 16.944098 7.500000 l 16.444098 7.250000 l s +showpage diff -r aa09c34b90d3 -r 50e23a4b2f40 figures/interfacestack.pdf Binary file figures/interfacestack.pdf has changed diff -r aa09c34b90d3 -r 50e23a4b2f40 figures/tailcall.eps --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figures/tailcall.eps Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,1833 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: /home/kent/WorkSpace/Mercurial/master-paper/figures/tailcall.dia +%%Creator: Dia v0.97 +%%CreationDate: Sun Jan 31 15:22:48 2010 +%%For: kent +%%Orientation: Portrait +%%Magnification: 1.0000 +%%BoundingBox: 0 0 442 289 +%%BeginSetup +%%EndSetup +%%EndComments +%%BeginProlog +[ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright +/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one +/two /three /four /five /six /seven /eight /nine /colon /semicolon +/less /equal /greater /question /at /A /B /C /D /E +/F /G /H /I /J /K /L /M /N /O +/P /Q /R /S /T /U /V /W /X /Y +/Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c +/d /e /f /g /h /i /j /k /l /m +/n /o /p /q /r /s /t /u /v /w +/x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright +/ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior +/acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf +/threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla +/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde +/Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex +/Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring +/ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis +/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave +/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def +/cp {closepath} bind def +/c {curveto} bind def +/f {fill} bind def +/a {arc} bind def +/ef {eofill} bind def +/ex {exch} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth pop} bind def +/tr {translate} bind def + +/ellipsedict 8 dict def +ellipsedict /mtrx matrix put +/ellipse +{ ellipsedict begin + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def /savematrix mtrx currentmatrix def + x y tr xrad yrad sc + 0 0 1 startangle endangle arc + savematrix setmatrix + end +} def + +/mergeprocs { +dup length +3 -1 roll +dup +length +dup +5 1 roll +3 -1 roll +add +array cvx +dup +3 -1 roll +0 exch +putinterval +dup +4 2 roll +putinterval +} bind def +/dpi_x 300 def +/dpi_y 300 def +/conicto { + /to_y exch def + /to_x exch def + /conic_cntrl_y exch def + /conic_cntrl_x exch def + currentpoint + /p0_y exch def + /p0_x exch def + /p1_x p0_x conic_cntrl_x p0_x sub 2 3 div mul add def + /p1_y p0_y conic_cntrl_y p0_y sub 2 3 div mul add def + /p2_x p1_x to_x p0_x sub 1 3 div mul add def + /p2_y p1_y to_y p0_y sub 1 3 div mul add def + p1_x p1_y p2_x p2_y to_x to_y curveto +} bind def +/start_ol { gsave 1.1 dpi_x div dup scale} bind def +/end_ol { closepath fill grestore } bind def +28.346000 -28.346000 scale +0.350000 -19.284101 translate +%%EndProlog + + +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 6.450000 16.000000 m 6.450000 17.537500 l 9.300000 17.537500 l 9.300000 16.000000 l f +0.000000 0.000000 0.000000 srgb +n 6.450000 16.000000 m 6.450000 17.537500 l 9.300000 17.537500 l 9.300000 16.000000 l cp s +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 0.000000 10.000000 m 0.000000 14.000000 l 1.000000 14.000000 l 1.000000 10.000000 l f +0.000000 0.000000 0.000000 srgb +n 0.000000 10.000000 m 0.000000 14.000000 l 1.000000 14.000000 l 1.000000 10.000000 l cp s +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 0.000000 15.000000 m 0.000000 19.000000 l 1.000000 19.000000 l 1.000000 15.000000 l f +0.000000 0.000000 0.000000 srgb +n 0.000000 15.000000 m 0.000000 19.000000 l 1.000000 19.000000 l 1.000000 15.000000 l cp s +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 5.000000 11.000000 m 5.000000 15.000000 l 6.000000 15.000000 l 6.000000 11.000000 l f +0.000000 0.000000 0.000000 srgb +n 5.000000 11.000000 m 5.000000 15.000000 l 6.000000 15.000000 l 6.000000 11.000000 l cp s +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 5.000000 16.000000 m 5.000000 17.000000 l 6.000000 17.000000 l 6.000000 16.000000 l f +0.000000 0.000000 0.000000 srgb +n 5.000000 16.000000 m 5.000000 17.000000 l 6.000000 17.000000 l 6.000000 16.000000 l cp s +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +1.000000 1.000000 1.000000 srgb +n 11.900000 11.600000 m 11.900000 16.600000 l 12.900000 16.600000 l 12.900000 11.600000 l f +0.000000 0.000000 0.000000 srgb +n 11.900000 11.600000 m 11.900000 16.600000 l 12.900000 16.600000 l 12.900000 11.600000 l cp s +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 1.000000 14.000000 m 1.996000 14.000000 3.000000 9.000000 4.695306 10.695306 c s +[] 0 sd +0 slj +0 slc +n 4.960472 10.960472 m 4.430141 10.783695 l 4.695306 10.695306 l 4.783695 10.430141 l ef +n 4.960472 10.960472 m 4.430141 10.783695 l 4.695306 10.695306 l 4.783695 10.430141 l cp s +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 6.000000 15.000000 m 6.996000 15.000000 9.900000 9.600000 11.595306 11.295306 c s +[] 0 sd +0 slj +0 slc +n 11.860472 11.560472 m 11.330141 11.383695 l 11.595306 11.295306 l 11.683695 11.030141 l ef +n 11.860472 11.560472 m 11.330141 11.383695 l 11.595306 11.295306 l 11.683695 11.030141 l cp s +gsave 0.077500 12.221250 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 0.514592 12.221250 translate 0.035278 -0.035278 scale +start_ol +1535 3200 moveto +1185 3200 1008 2840 conicto +832 2481 832 1759 conicto +832 1039 1008 679 conicto +1185 320 1535 320 conicto +1887 320 2063 679 conicto +2240 1039 2240 1759 conicto +2240 2481 2063 2840 conicto +1887 3200 1535 3200 conicto +1536 3584 moveto +2127 3584 2439 3116 conicto +2752 2649 2752 1759 conicto +2752 871 2439 403 conicto +2127 -64 1536 -64 conicto +944 -64 632 403 conicto +320 871 320 1759 conicto +320 2649 632 3116 conicto +944 3584 1536 3584 conicto +end_ol grestore +gsave 0.077500 17.221250 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 0.514592 17.221250 translate 0.035278 -0.035278 scale +start_ol +640 384 moveto +1408 384 lineto +1408 3136 lineto +576 2944 lineto +576 3328 lineto +1434 3520 lineto +1920 3520 lineto +1920 384 lineto +2688 384 lineto +2688 0 lineto +640 0 lineto +640 384 lineto +end_ol grestore +gsave 5.076250 12.821250 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 5.515839 12.821250 translate 0.035278 -0.035278 scale +start_ol +1535 3200 moveto +1185 3200 1008 2840 conicto +832 2481 832 1759 conicto +832 1039 1008 679 conicto +1185 320 1535 320 conicto +1887 320 2063 679 conicto +2240 1039 2240 1759 conicto +2240 2481 2063 2840 conicto +1887 3200 1535 3200 conicto +1536 3584 moveto +2127 3584 2439 3116 conicto +2752 2649 2752 1759 conicto +2752 871 2439 403 conicto +2127 -64 1536 -64 conicto +944 -64 632 403 conicto +320 871 320 1759 conicto +320 2649 632 3116 conicto +944 3584 1536 3584 conicto +end_ol grestore +gsave 5.076250 16.721250 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 5.515839 16.721250 translate 0.035278 -0.035278 scale +start_ol +640 384 moveto +1408 384 lineto +1408 3136 lineto +576 2944 lineto +576 3328 lineto +1434 3520 lineto +1920 3520 lineto +1920 384 lineto +2688 384 lineto +2688 0 lineto +640 0 lineto +640 384 lineto +end_ol grestore +gsave 11.972500 14.321250 translate 0.035278 -0.035278 scale +start_ol +3136 3264 moveto +3136 2752 lineto +2892 2977 2616 3088 conicto +2340 3200 2030 3200 conicto +1418 3200 1093 2829 conicto +768 2459 768 1759 conicto +768 1061 1093 690 conicto +1418 320 2030 320 conicto +2340 320 2616 431 conicto +2892 543 3136 768 conicto +3136 256 lineto +2882 96 2599 16 conicto +2316 -64 2000 -64 conicto +1189 -64 722 424 conicto +256 913 256 1759 conicto +256 2607 722 3095 conicto +1189 3584 2000 3584 conicto +2320 3584 2603 3504 conicto +2887 3424 3136 3264 conicto +end_ol grestore +gsave 12.419580 14.321250 translate 0.035278 -0.035278 scale +start_ol +1535 3200 moveto +1185 3200 1008 2840 conicto +832 2481 832 1759 conicto +832 1039 1008 679 conicto +1185 320 1535 320 conicto +1887 320 2063 679 conicto +2240 1039 2240 1759 conicto +2240 2481 2063 2840 conicto +1887 3200 1535 3200 conicto +1536 3584 moveto +2127 3584 2439 3116 conicto +2752 2649 2752 1759 conicto +2752 871 2439 403 conicto +2127 -64 1536 -64 conicto +944 -64 632 403 conicto +320 871 320 1759 conicto +320 2649 632 3116 conicto +944 3584 1536 3584 conicto +end_ol grestore +gsave -0.350000 9.687500 translate 0.035278 -0.035278 scale +start_ol +1792 3712 moveto +1792 3328 lineto +1369 3328 lineto +1139 3328 1049 3237 conicto +960 3147 960 2912 conicto +960 2688 lineto +1664 2688 lineto +1664 2368 lineto +960 2368 lineto +960 0 lineto +512 0 lineto +512 2368 lineto +64 2368 lineto +64 2688 lineto +512 2688 lineto +512 2864 lineto +512 3307 718 3509 conicto +925 3712 1374 3712 conicto +1792 3712 lineto +end_ol grestore +gsave -0.125212 9.687500 translate 0.035278 -0.035278 scale +start_ol +448 1040 moveto +448 2688 lineto +896 2688 lineto +896 1057 lineto +896 689 1042 504 conicto +1188 320 1481 320 conicto +1832 320 2036 541 conicto +2240 763 2240 1145 conicto +2240 2688 lineto +2688 2688 lineto +2688 0 lineto +2240 0 lineto +2240 384 lineto +2081 157 1870 46 conicto +1660 -64 1382 -64 conicto +923 -64 685 217 conicto +448 499 448 1040 conicto +end_ol grestore +gsave 0.279402 9.687500 translate 0.035278 -0.035278 scale +start_ol +2688 1646 moveto +2688 0 lineto +2240 0 lineto +2240 1632 lineto +2240 2001 2093 2184 conicto +1947 2368 1654 2368 conicto +1302 2368 1099 2146 conicto +896 1925 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1053 2529 1266 2640 conicto +1479 2752 1757 2752 conicto +2217 2752 2452 2471 conicto +2688 2191 2688 1646 conicto +end_ol grestore +gsave 0.684016 9.687500 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 1.036185 9.687500 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 4.700000 9.687500 translate 0.035278 -0.035278 scale +start_ol +1792 3712 moveto +1792 3328 lineto +1369 3328 lineto +1139 3328 1049 3237 conicto +960 3147 960 2912 conicto +960 2688 lineto +1664 2688 lineto +1664 2368 lineto +960 2368 lineto +960 0 lineto +512 0 lineto +512 2368 lineto +64 2368 lineto +64 2688 lineto +512 2688 lineto +512 2864 lineto +512 3307 718 3509 conicto +925 3712 1374 3712 conicto +1792 3712 lineto +end_ol grestore +gsave 4.924788 9.687500 translate 0.035278 -0.035278 scale +start_ol +448 1040 moveto +448 2688 lineto +896 2688 lineto +896 1057 lineto +896 689 1042 504 conicto +1188 320 1481 320 conicto +1832 320 2036 541 conicto +2240 763 2240 1145 conicto +2240 2688 lineto +2688 2688 lineto +2688 0 lineto +2240 0 lineto +2240 384 lineto +2081 157 1870 46 conicto +1660 -64 1382 -64 conicto +923 -64 685 217 conicto +448 499 448 1040 conicto +end_ol grestore +gsave 5.329402 9.687500 translate 0.035278 -0.035278 scale +start_ol +2688 1646 moveto +2688 0 lineto +2240 0 lineto +2240 1632 lineto +2240 2001 2093 2184 conicto +1947 2368 1654 2368 conicto +1302 2368 1099 2146 conicto +896 1925 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1053 2529 1266 2640 conicto +1479 2752 1757 2752 conicto +2217 2752 2452 2471 conicto +2688 2191 2688 1646 conicto +end_ol grestore +gsave 5.734016 9.687500 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 6.086185 9.687500 translate 0.035278 -0.035278 scale +start_ol +960 1728 moveto +960 384 lineto +1696 384 lineto +2071 384 2251 550 conicto +2432 716 2432 1057 conicto +2432 1401 2251 1564 conicto +2071 1728 1696 1728 conicto +960 1728 lineto +960 3136 moveto +960 2112 lineto +1639 2112 lineto +1975 2112 2139 2238 conicto +2304 2365 2304 2624 conicto +2304 2881 2139 3008 conicto +1975 3136 1639 3136 conicto +960 3136 lineto +448 3520 moveto +1673 3520 lineto +2222 3520 2519 3300 conicto +2816 3080 2816 2674 conicto +2816 2360 2658 2174 conicto +2500 1989 2193 1943 conicto +2549 1866 2746 1621 conicto +2944 1376 2944 1009 conicto +2944 526 2625 263 conicto +2306 0 1718 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 11.550000 9.687500 translate 0.035278 -0.035278 scale +start_ol +1792 3712 moveto +1792 3328 lineto +1369 3328 lineto +1139 3328 1049 3237 conicto +960 3147 960 2912 conicto +960 2688 lineto +1664 2688 lineto +1664 2368 lineto +960 2368 lineto +960 0 lineto +512 0 lineto +512 2368 lineto +64 2368 lineto +64 2688 lineto +512 2688 lineto +512 2864 lineto +512 3307 718 3509 conicto +925 3712 1374 3712 conicto +1792 3712 lineto +end_ol grestore +gsave 11.774788 9.687500 translate 0.035278 -0.035278 scale +start_ol +448 1040 moveto +448 2688 lineto +896 2688 lineto +896 1057 lineto +896 689 1042 504 conicto +1188 320 1481 320 conicto +1832 320 2036 541 conicto +2240 763 2240 1145 conicto +2240 2688 lineto +2688 2688 lineto +2688 0 lineto +2240 0 lineto +2240 384 lineto +2081 157 1870 46 conicto +1660 -64 1382 -64 conicto +923 -64 685 217 conicto +448 499 448 1040 conicto +end_ol grestore +gsave 12.179402 9.687500 translate 0.035278 -0.035278 scale +start_ol +2688 1646 moveto +2688 0 lineto +2240 0 lineto +2240 1632 lineto +2240 2001 2093 2184 conicto +1947 2368 1654 2368 conicto +1302 2368 1099 2146 conicto +896 1925 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1053 2529 1266 2640 conicto +1479 2752 1757 2752 conicto +2217 2752 2452 2471 conicto +2688 2191 2688 1646 conicto +end_ol grestore +gsave 12.584016 9.687500 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 12.936185 9.687500 translate 0.035278 -0.035278 scale +start_ol +3136 3264 moveto +3136 2752 lineto +2892 2977 2616 3088 conicto +2340 3200 2030 3200 conicto +1418 3200 1093 2829 conicto +768 2459 768 1759 conicto +768 1061 1093 690 conicto +1418 320 2030 320 conicto +2340 320 2616 431 conicto +2892 543 3136 768 conicto +3136 256 lineto +2882 96 2599 16 conicto +2316 -64 2000 -64 conicto +1189 -64 722 424 conicto +256 913 256 1759 conicto +256 2607 722 3095 conicto +1189 3584 2000 3584 conicto +2320 3584 2603 3504 conicto +2887 3424 3136 3264 conicto +end_ol grestore +gsave 6.653750 16.590000 translate 0.035278 -0.035278 scale +start_ol +960 3136 moveto +960 384 lineto +1536 384 lineto +2266 384 2605 716 conicto +2944 1048 2944 1764 conicto +2944 2475 2605 2805 conicto +2266 3136 1536 3136 conicto +960 3136 lineto +448 3520 moveto +1463 3520 lineto +2493 3520 2974 3094 conicto +3456 2669 3456 1764 conicto +3456 853 2972 426 conicto +2488 0 1463 0 conicto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 7.145784 16.590000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 7.537913 16.590000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 7.740220 16.590000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 8.132349 16.590000 translate 0.035278 -0.035278 scale +start_ol +2688 1646 moveto +2688 0 lineto +2240 0 lineto +2240 1632 lineto +2240 2001 2093 2184 conicto +1947 2368 1654 2368 conicto +1302 2368 1099 2146 conicto +896 1925 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1053 2529 1266 2640 conicto +1479 2752 1757 2752 conicto +2217 2752 2452 2471 conicto +2688 2191 2688 1646 conicto +end_ol grestore +gsave 8.536963 16.590000 translate 0.035278 -0.035278 scale +start_ol +448 3712 moveto +896 3712 lineto +896 0 lineto +448 0 lineto +448 3712 lineto +end_ol grestore +gsave 8.714292 16.590000 translate 0.035278 -0.035278 scale +start_ol +1542 -238 moveto +1360 -726 1187 -875 conicto +1015 -1024 726 -1024 conicto +384 -1024 lineto +384 -640 lineto +636 -640 lineto +813 -640 910 -555 conicto +1008 -470 1127 -155 conicto +1204 46 lineto +128 2688 lineto +603 2688 lineto +1418 586 lineto +2234 2688 lineto +2688 2688 lineto +1542 -238 lineto +end_ol grestore +gsave 6.796250 17.390000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 6.998557 17.390000 translate 0.035278 -0.035278 scale +start_ol +1984 2304 moveto +1912 2337 1828 2352 conicto +1744 2368 1642 2368 conicto +1282 2368 1089 2127 conicto +896 1887 896 1437 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1030 2531 1245 2641 conicto +1460 2752 1767 2752 conicto +1811 2752 1864 2752 conicto +1917 2752 1982 2752 conicto +1984 2304 lineto +end_ol grestore +gsave 7.245818 17.390000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 7.640444 17.390000 translate 0.035278 -0.035278 scale +start_ol +896 3456 moveto +896 2688 lineto +1792 2688 lineto +1792 2368 lineto +896 2368 lineto +896 902 lineto +896 572 984 478 conicto +1073 384 1345 384 conicto +1792 384 lineto +1792 0 lineto +1345 0 lineto +836 0 642 194 conicto +448 389 448 902 conicto +448 2368 lineto +128 2368 lineto +128 2688 lineto +448 2688 lineto +448 3456 lineto +896 3456 lineto +end_ol grestore +gsave 7.890211 17.390000 translate 0.035278 -0.035278 scale +start_ol +448 1040 moveto +448 2688 lineto +896 2688 lineto +896 1057 lineto +896 689 1042 504 conicto +1188 320 1481 320 conicto +1832 320 2036 541 conicto +2240 763 2240 1145 conicto +2240 2688 lineto +2688 2688 lineto +2688 0 lineto +2240 0 lineto +2240 384 lineto +2081 157 1870 46 conicto +1660 -64 1382 -64 conicto +923 -64 685 217 conicto +448 499 448 1040 conicto +end_ol grestore +gsave 8.294825 17.390000 translate 0.035278 -0.035278 scale +start_ol +1984 2304 moveto +1912 2337 1828 2352 conicto +1744 2368 1642 2368 conicto +1282 2368 1089 2127 conicto +896 1887 896 1437 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1030 2531 1245 2641 conicto +1460 2752 1767 2752 conicto +1811 2752 1864 2752 conicto +1917 2752 1982 2752 conicto +1984 2304 lineto +end_ol grestore +gsave 8.547089 17.390000 translate 0.035278 -0.035278 scale +start_ol +2688 1646 moveto +2688 0 lineto +2240 0 lineto +2240 1632 lineto +2240 2001 2093 2184 conicto +1947 2368 1654 2368 conicto +1302 2368 1099 2146 conicto +896 1925 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1053 2529 1266 2640 conicto +1479 2752 1757 2752 conicto +2217 2752 2452 2471 conicto +2688 2191 2688 1646 conicto +end_ol grestore +0.030000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 5.000000 17.000000 m 3.600000 16.887500 3.250000 15.100000 1.408138 15.018139 c s +[] 0 sd +0 slj +0 slc +n 1.033508 15.001489 m 1.544115 14.773936 l 1.408138 15.018139 l 1.521915 15.273443 l ef +n 1.033508 15.001489 m 1.544115 14.773936 l 1.408138 15.018139 l 1.521915 15.273443 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 11.900000 16.600000 m 7.900000 17.500000 7.550000 22.400000 2.162722 15.973072 c s +[] 0 sd +0 slj +0 slc +n 1.921822 15.685683 m 2.434614 15.908268 l 2.162722 15.973072 l 2.051429 16.229468 l ef +n 1.921822 15.685683 m 2.434614 15.908268 l 2.162722 15.973072 l 2.051429 16.229468 l cp s +gsave 3.050000 12.400000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 3.402169 12.400000 translate 0.035278 -0.035278 scale +start_ol +1622 1344 moveto +1104 1344 904 1225 conicto +704 1106 704 818 conicto +704 589 854 454 conicto +1004 320 1262 320 conicto +1618 320 1833 572 conicto +2048 825 2048 1244 conicto +2048 1344 lineto +1622 1344 lineto +2496 1513 moveto +2496 0 lineto +2048 0 lineto +2048 384 lineto +1900 154 1679 45 conicto +1458 -64 1138 -64 conicto +733 -64 494 162 conicto +256 389 256 769 conicto +256 1213 555 1438 conicto +854 1664 1448 1664 conicto +2048 1664 lineto +2048 1712 lineto +2048 2025 1851 2196 conicto +1655 2368 1300 2368 conicto +1074 2368 860 2320 conicto +646 2272 448 2176 conicto +448 2560 lineto +687 2656 912 2704 conicto +1138 2752 1351 2752 conicto +1927 2752 2211 2444 conicto +2496 2137 2496 1513 conicto +end_ol grestore +gsave 3.794298 12.400000 translate 0.035278 -0.035278 scale +start_ol +448 3712 moveto +896 3712 lineto +896 0 lineto +448 0 lineto +448 3712 lineto +end_ol grestore +gsave 3.971626 12.400000 translate 0.035278 -0.035278 scale +start_ol +448 3712 moveto +896 3712 lineto +896 0 lineto +448 0 lineto +448 3712 lineto +end_ol grestore +gsave 9.250000 12.850000 translate 0.035278 -0.035278 scale +start_ol +448 2688 moveto +896 2688 lineto +896 -41 lineto +896 -559 695 -791 conicto +494 -1024 47 -1024 conicto +-128 -1024 lineto +-128 -640 lineto +28 -640 lineto +272 -640 360 -524 conicto +448 -408 448 -41 conicto +448 2688 lineto +448 3712 moveto +896 3712 lineto +896 3136 lineto +448 3136 lineto +448 3712 lineto +end_ol grestore +gsave 9.427329 12.850000 translate 0.035278 -0.035278 scale +start_ol +448 1040 moveto +448 2688 lineto +896 2688 lineto +896 1057 lineto +896 689 1042 504 conicto +1188 320 1481 320 conicto +1832 320 2036 541 conicto +2240 763 2240 1145 conicto +2240 2688 lineto +2688 2688 lineto +2688 0 lineto +2240 0 lineto +2240 384 lineto +2081 157 1870 46 conicto +1660 -64 1382 -64 conicto +923 -64 685 217 conicto +448 499 448 1040 conicto +end_ol grestore +gsave 9.831943 12.850000 translate 0.035278 -0.035278 scale +start_ol +2549 2204 moveto +2714 2485 2942 2618 conicto +3171 2752 3482 2752 conicto +3899 2752 4125 2464 conicto +4352 2177 4352 1646 conicto +4352 0 lineto +3904 0 lineto +3904 1632 lineto +3904 2006 3769 2187 conicto +3634 2368 3356 2368 conicto +3017 2368 2820 2146 conicto +2624 1925 2624 1542 conicto +2624 0 lineto +2176 0 lineto +2176 1632 lineto +2176 2008 2041 2188 conicto +1906 2368 1624 2368 conicto +1289 2368 1092 2145 conicto +896 1922 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1046 2534 1255 2643 conicto +1465 2752 1753 2752 conicto +2044 2752 2247 2611 conicto +2451 2471 2549 2204 conicto +end_ol grestore +gsave 10.453854 12.850000 translate 0.035278 -0.035278 scale +start_ol +896 384 moveto +896 -1024 lineto +448 -1024 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1032 2531 1240 2641 conicto +1448 2752 1737 2752 conicto +2217 2752 2516 2364 conicto +2816 1976 2816 1344 conicto +2816 712 2516 324 conicto +2217 -64 1737 -64 conicto +1448 -64 1240 46 conicto +1032 157 896 384 conicto +2368 1344 moveto +2368 1823 2171 2095 conicto +1975 2368 1632 2368 conicto +1289 2368 1092 2095 conicto +896 1823 896 1344 conicto +896 865 1092 592 conicto +1289 320 1632 320 conicto +1975 320 2171 592 conicto +2368 865 2368 1344 conicto +end_ol grestore +gsave 8.000000 12.000000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 8.352169 12.000000 translate 0.035278 -0.035278 scale +start_ol +1622 1344 moveto +1104 1344 904 1225 conicto +704 1106 704 818 conicto +704 589 854 454 conicto +1004 320 1262 320 conicto +1618 320 1833 572 conicto +2048 825 2048 1244 conicto +2048 1344 lineto +1622 1344 lineto +2496 1513 moveto +2496 0 lineto +2048 0 lineto +2048 384 lineto +1900 154 1679 45 conicto +1458 -64 1138 -64 conicto +733 -64 494 162 conicto +256 389 256 769 conicto +256 1213 555 1438 conicto +854 1664 1448 1664 conicto +2048 1664 lineto +2048 1712 lineto +2048 2025 1851 2196 conicto +1655 2368 1300 2368 conicto +1074 2368 860 2320 conicto +646 2272 448 2176 conicto +448 2560 lineto +687 2656 912 2704 conicto +1138 2752 1351 2752 conicto +1927 2752 2211 2444 conicto +2496 2137 2496 1513 conicto +end_ol grestore +gsave 8.744298 12.000000 translate 0.035278 -0.035278 scale +start_ol +448 3712 moveto +896 3712 lineto +896 0 lineto +448 0 lineto +448 3712 lineto +end_ol grestore +gsave 8.921626 12.000000 translate 0.035278 -0.035278 scale +start_ol +448 3712 moveto +896 3712 lineto +896 0 lineto +448 0 lineto +448 3712 lineto +end_ol grestore +gsave 8.200000 12.200000 translate 0.035278 -0.035278 scale +start_ol +448 5440 moveto +1238 5440 lineto +2588 3418 lineto +3946 5440 lineto +4736 5440 lineto +2989 2827 lineto +4864 0 lineto +4070 0 lineto +2534 2314 lineto +989 0 lineto +192 0 lineto +2141 2904 lineto +448 5440 lineto +end_ol grestore +gsave 9.650000 18.250000 translate 0.035278 -0.035278 scale +start_ol +960 3136 moveto +960 1792 lineto +1552 1792 lineto +1881 1792 2060 1967 conicto +2240 2142 2240 2465 conicto +2240 2786 2060 2961 conicto +1881 3136 1552 3136 conicto +960 3136 lineto +448 3520 moveto +1552 3520 lineto +2145 3520 2448 3251 conicto +2752 2983 2752 2465 conicto +2752 1943 2448 1675 conicto +2145 1408 1552 1408 conicto +960 1408 lineto +960 0 lineto +448 0 lineto +448 3520 lineto +end_ol grestore +gsave 10.012157 18.250000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 10.404286 18.250000 translate 0.035278 -0.035278 scale +start_ol +2112 2560 moveto +2112 2176 lineto +1932 2272 1738 2320 conicto +1544 2368 1336 2368 conicto +1020 2368 862 2269 conicto +704 2170 704 1972 conicto +704 1821 814 1735 conicto +925 1649 1260 1571 conicto +1403 1538 lineto +1857 1438 2048 1255 conicto +2240 1072 2240 744 conicto +2240 371 1954 153 conicto +1668 -64 1167 -64 conicto +958 -64 732 -16 conicto +506 32 256 128 conicto +256 576 lineto +491 448 719 384 conicto +947 320 1170 320 conicto +1470 320 1631 425 conicto +1792 531 1792 722 conicto +1792 900 1678 994 conicto +1564 1089 1177 1177 conicto +1032 1212 lineto +621 1298 438 1476 conicto +256 1654 256 1964 conicto +256 2341 520 2546 conicto +784 2752 1269 2752 conicto +1509 2752 1721 2704 conicto +1933 2656 2112 2560 conicto +end_ol grestore +gsave 10.736470 18.250000 translate 0.035278 -0.035278 scale +start_ol +2112 2560 moveto +2112 2176 lineto +1932 2272 1738 2320 conicto +1544 2368 1336 2368 conicto +1020 2368 862 2269 conicto +704 2170 704 1972 conicto +704 1821 814 1735 conicto +925 1649 1260 1571 conicto +1403 1538 lineto +1857 1438 2048 1255 conicto +2240 1072 2240 744 conicto +2240 371 1954 153 conicto +1668 -64 1167 -64 conicto +958 -64 732 -16 conicto +506 32 256 128 conicto +256 576 lineto +491 448 719 384 conicto +947 320 1170 320 conicto +1470 320 1631 425 conicto +1792 531 1792 722 conicto +1792 900 1678 994 conicto +1564 1089 1177 1177 conicto +1032 1212 lineto +621 1298 438 1476 conicto +256 1654 256 1964 conicto +256 2341 520 2546 conicto +784 2752 1269 2752 conicto +1509 2752 1721 2704 conicto +1933 2656 2112 2560 conicto +end_ol grestore +gsave 11.068654 18.250000 translate 0.035278 -0.035278 scale +start_ol +448 2688 moveto +896 2688 lineto +896 0 lineto +448 0 lineto +448 2688 lineto +448 3712 moveto +896 3712 lineto +896 3136 lineto +448 3136 lineto +448 3712 lineto +end_ol grestore +gsave 11.245983 18.250000 translate 0.035278 -0.035278 scale +start_ol +2368 1344 moveto +2368 1823 2171 2095 conicto +1975 2368 1632 2368 conicto +1289 2368 1092 2095 conicto +896 1823 896 1344 conicto +896 865 1092 592 conicto +1289 320 1632 320 conicto +1975 320 2171 592 conicto +2368 865 2368 1344 conicto +896 2304 moveto +1032 2531 1240 2641 conicto +1448 2752 1737 2752 conicto +2217 2752 2516 2364 conicto +2816 1976 2816 1344 conicto +2816 712 2516 324 conicto +2217 -64 1737 -64 conicto +1448 -64 1240 46 conicto +1032 157 896 384 conicto +896 0 lineto +448 0 lineto +448 3712 lineto +896 3712 lineto +896 2304 lineto +end_ol grestore +gsave 11.653103 18.250000 translate 0.035278 -0.035278 scale +start_ol +448 3712 moveto +896 3712 lineto +896 0 lineto +448 0 lineto +448 3712 lineto +end_ol grestore +gsave 11.830431 18.250000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 12.225057 18.250000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 12.427364 18.250000 translate 0.035278 -0.035278 scale +start_ol +896 3456 moveto +896 2688 lineto +1792 2688 lineto +1792 2368 lineto +896 2368 lineto +896 902 lineto +896 572 984 478 conicto +1073 384 1345 384 conicto +1792 384 lineto +1792 0 lineto +1345 0 lineto +836 0 642 194 conicto +448 389 448 902 conicto +448 2368 lineto +128 2368 lineto +128 2688 lineto +448 2688 lineto +448 3456 lineto +896 3456 lineto +end_ol grestore +gsave 12.677131 18.250000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 13.069260 18.250000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 13.271567 18.250000 translate 0.035278 -0.035278 scale +start_ol +1984 2304 moveto +1912 2337 1828 2352 conicto +1744 2368 1642 2368 conicto +1282 2368 1089 2127 conicto +896 1887 896 1437 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1030 2531 1245 2641 conicto +1460 2752 1767 2752 conicto +1811 2752 1864 2752 conicto +1917 2752 1982 2752 conicto +1984 2304 lineto +end_ol grestore +gsave 13.518828 18.250000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 13.913454 18.250000 translate 0.035278 -0.035278 scale +start_ol +896 3456 moveto +896 2688 lineto +1792 2688 lineto +1792 2368 lineto +896 2368 lineto +896 902 lineto +896 572 984 478 conicto +1073 384 1345 384 conicto +1792 384 lineto +1792 0 lineto +1345 0 lineto +836 0 642 194 conicto +448 389 448 902 conicto +448 2368 lineto +128 2368 lineto +128 2688 lineto +448 2688 lineto +448 3456 lineto +896 3456 lineto +end_ol grestore +gsave 14.163221 18.250000 translate 0.035278 -0.035278 scale +start_ol +448 1040 moveto +448 2688 lineto +896 2688 lineto +896 1057 lineto +896 689 1042 504 conicto +1188 320 1481 320 conicto +1832 320 2036 541 conicto +2240 763 2240 1145 conicto +2240 2688 lineto +2688 2688 lineto +2688 0 lineto +2240 0 lineto +2240 384 lineto +2081 157 1870 46 conicto +1660 -64 1382 -64 conicto +923 -64 685 217 conicto +448 499 448 1040 conicto +end_ol grestore +gsave 14.567835 18.250000 translate 0.035278 -0.035278 scale +start_ol +1984 2304 moveto +1912 2337 1828 2352 conicto +1744 2368 1642 2368 conicto +1282 2368 1089 2127 conicto +896 1887 896 1437 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1030 2531 1245 2641 conicto +1460 2752 1767 2752 conicto +1811 2752 1864 2752 conicto +1917 2752 1982 2752 conicto +1984 2304 lineto +end_ol grestore +gsave 14.820099 18.250000 translate 0.035278 -0.035278 scale +start_ol +2688 1646 moveto +2688 0 lineto +2240 0 lineto +2240 1632 lineto +2240 2001 2093 2184 conicto +1947 2368 1654 2368 conicto +1302 2368 1099 2146 conicto +896 1925 896 1542 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1053 2529 1266 2640 conicto +1479 2752 1757 2752 conicto +2217 2752 2452 2471 conicto +2688 2191 2688 1646 conicto +end_ol grestore +gsave 9.650000 19.050000 translate 0.035278 -0.035278 scale +start_ol +896 3456 moveto +896 2688 lineto +1792 2688 lineto +1792 2368 lineto +896 2368 lineto +896 902 lineto +896 572 984 478 conicto +1073 384 1345 384 conicto +1792 384 lineto +1792 0 lineto +1345 0 lineto +836 0 642 194 conicto +448 389 448 902 conicto +448 2368 lineto +128 2368 lineto +128 2688 lineto +448 2688 lineto +448 3456 lineto +896 3456 lineto +end_ol grestore +gsave 9.899767 19.050000 translate 0.035278 -0.035278 scale +start_ol +1473 2368 moveto +1117 2368 910 2094 conicto +704 1820 704 1344 conicto +704 868 909 594 conicto +1115 320 1473 320 conicto +1827 320 2033 595 conicto +2240 870 2240 1344 conicto +2240 1816 2033 2092 conicto +1827 2368 1473 2368 conicto +1472 2752 moveto +2040 2752 2364 2378 conicto +2688 2005 2688 1344 conicto +2688 685 2364 310 conicto +2040 -64 1472 -64 conicto +902 -64 579 310 conicto +256 685 256 1344 conicto +256 2005 579 2378 conicto +902 2752 1472 2752 conicto +end_ol grestore +gsave 10.291896 19.050000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 10.494203 19.050000 translate 0.035278 -0.035278 scale +start_ol +1696 3047 moveto +1042 1280 lineto +2352 1280 lineto +1696 3047 lineto +1424 3520 moveto +1970 3520 lineto +3328 0 lineto +2827 0 lineto +2502 896 lineto +897 896 lineto +572 0 lineto +64 0 lineto +1424 3520 lineto +end_ol grestore +gsave 10.931294 19.050000 translate 0.035278 -0.035278 scale +start_ol +640 384 moveto +1408 384 lineto +1408 3136 lineto +576 2944 lineto +576 3328 lineto +1434 3520 lineto +1920 3520 lineto +1920 384 lineto +2688 384 lineto +2688 0 lineto +640 0 lineto +640 384 lineto +end_ol grestore +gsave 11.338414 19.050000 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 11.540721 19.050000 translate 0.035278 -0.035278 scale +start_ol +2176 2304 moveto +2176 3712 lineto +2624 3712 lineto +2624 0 lineto +2176 0 lineto +2176 384 lineto +2040 157 1832 46 conicto +1624 -64 1332 -64 conicto +855 -64 555 324 conicto +256 712 256 1344 conicto +256 1976 555 2364 conicto +855 2752 1332 2752 conicto +1624 2752 1832 2641 conicto +2040 2531 2176 2304 conicto +704 1344 moveto +704 865 900 592 conicto +1096 320 1439 320 conicto +1782 320 1979 592 conicto +2176 865 2176 1344 conicto +2176 1823 1979 2095 conicto +1782 2368 1439 2368 conicto +1096 2368 900 2095 conicto +704 1823 704 1344 conicto +end_ol grestore +gsave 11.947840 19.050000 translate 0.035278 -0.035278 scale +start_ol +448 2688 moveto +896 2688 lineto +896 0 lineto +448 0 lineto +448 2688 lineto +448 3712 moveto +896 3712 lineto +896 3136 lineto +448 3136 lineto +448 3712 lineto +end_ol grestore +gsave 12.125169 19.050000 translate 0.035278 -0.035278 scale +start_ol +1984 2304 moveto +1912 2337 1828 2352 conicto +1744 2368 1642 2368 conicto +1282 2368 1089 2127 conicto +896 1887 896 1437 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2304 lineto +1030 2531 1245 2641 conicto +1460 2752 1767 2752 conicto +1811 2752 1864 2752 conicto +1917 2752 1982 2752 conicto +1984 2304 lineto +end_ol grestore +gsave 12.372430 19.050000 translate 0.035278 -0.035278 scale +start_ol +2752 1480 moveto +2752 1280 lineto +704 1280 lineto +733 811 978 565 conicto +1223 320 1660 320 conicto +1914 320 2152 384 conicto +2390 448 2624 576 conicto +2624 192 lineto +2388 67 2140 1 conicto +1893 -64 1639 -64 conicto +1001 -64 628 309 conicto +256 683 256 1320 conicto +256 1979 613 2365 conicto +970 2752 1576 2752 conicto +2120 2752 2436 2410 conicto +2752 2068 2752 1480 conicto +2304 1600 moveto +2299 1950 2099 2159 conicto +1900 2368 1572 2368 conicto +1200 2368 976 2166 conicto +753 1964 719 1597 conicto +2304 1600 lineto +end_ol grestore +gsave 12.767056 19.050000 translate 0.035278 -0.035278 scale +start_ol +2368 2560 moveto +2368 2176 lineto +2180 2272 1991 2320 conicto +1803 2368 1611 2368 conicto +1180 2368 942 2099 conicto +704 1830 704 1344 conicto +704 858 942 589 conicto +1180 320 1611 320 conicto +1803 320 1991 368 conicto +2180 416 2368 512 conicto +2368 128 lineto +2184 32 1987 -16 conicto +1791 -64 1569 -64 conicto +966 -64 611 316 conicto +256 697 256 1344 conicto +256 2000 615 2376 conicto +974 2752 1598 2752 conicto +1801 2752 1994 2704 conicto +2187 2656 2368 2560 conicto +end_ol grestore +gsave 13.119225 19.050000 translate 0.035278 -0.035278 scale +start_ol +896 3456 moveto +896 2688 lineto +1792 2688 lineto +1792 2368 lineto +896 2368 lineto +896 902 lineto +896 572 984 478 conicto +1073 384 1345 384 conicto +1792 384 lineto +1792 0 lineto +1345 0 lineto +836 0 642 194 conicto +448 389 448 902 conicto +448 2368 lineto +128 2368 lineto +128 2688 lineto +448 2688 lineto +448 3456 lineto +896 3456 lineto +end_ol grestore +gsave 13.368992 19.050000 translate 0.035278 -0.035278 scale +start_ol +448 3712 moveto +896 3712 lineto +896 0 lineto +448 0 lineto +448 3712 lineto +end_ol grestore +gsave 13.546320 19.050000 translate 0.035278 -0.035278 scale +start_ol +1542 -238 moveto +1360 -726 1187 -875 conicto +1015 -1024 726 -1024 conicto +384 -1024 lineto +384 -640 lineto +636 -640 lineto +813 -640 910 -555 conicto +1008 -470 1127 -155 conicto +1204 46 lineto +128 2688 lineto +603 2688 lineto +1418 586 lineto +2234 2688 lineto +2688 2688 lineto +1542 -238 lineto +end_ol grestore +gsave 13.836047 19.050000 translate 0.035278 -0.035278 scale +start_ol +576 576 moveto +1088 576 lineto +1088 0 lineto +576 0 lineto +576 576 lineto +end_ol grestore +0.050000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 5.500000 17.000000 m 5.500000 18.187500 l 7.875000 18.187500 l 7.875000 17.537500 l s +showpage diff -r aa09c34b90d3 -r 50e23a4b2f40 figures/tailcall.pdf Binary file figures/tailcall.pdf has changed diff -r aa09c34b90d3 -r 50e23a4b2f40 implementation.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/implementation.tex Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,448 @@ + +\chapter{GCCにおける実装・改善} +\label{chp:impl} + +前章で洗い出したGCCでの問題点の改善を行う。 + +実装にはGCCのフロントエンドであるcc1というプログラムを直接変更する。 +過去の研究においてはGCCのバージョン4.2.3が用いられた。現在はGCCのリリ +ースに並ぶ形で4.4.2(2010年1月時)を用いている。 + +\section{過去の研究における実装部分} +今回の実装においての予備知識として、過去の研究での実装部分であるコード +セグメントと軽量継続がどのように実装されたかを簡単に説明する。 + +\subsection{コードセグメントの実装} + +コードセグメント内部の実装は実際は単なる関数で良い。 +変更の必要があったのは関数の返り値に当たる部分である。コードセグメント +では返り値が存在しないのでここは``code''キーワードを入力できるようにす +る。このcodeは内部でvoid型に変換する。 + +GCC(及び一般的なコンパイラ)ではコンパイルに必要な全ての要素、変数や式 +、関数、構文などをすべて treeと呼ばれる構文木に保持している。コードセ +グメントの構文木も関数とほ +ぼ同じものを作成すれば良い。コード\ref{code:build-code-segment}はその +構文木を作成している部分である。 + +\lstinputlisting + [caption=構文木生成(gcc/c-typeck.c),label=code:build-code-segment] + {sources/build-code-segment.cbc} + +\verb|build_code_segment_type|関数においてコードセグメントの構文木を作 +成している。内部の処理は\verb|build_function_type|とほぼ同じだが、関数 +のテーブルに登録せず、軽量継続の際にそれがコードセグメントであることを +示すためのフラグをセットしている。 + + + +\subsection{軽量継続の実装} +\label{ssec:impl-goto} +% return somesegment(); +% expand_call() + +軽量継続はGCCの末尾呼び出し最適化の機構を用いて実装する。 + +\subsubsection{末尾呼び出し最適化} +プログラム中、関数を呼び出すときには通常はスタックを積み上げ、現在の環 +境を保持した上で呼び出し先の処理を行う。これは元の関数に復帰して残りの +処理を続行する必要があるためである。しかし関数の最後、リターン直前に呼 +び出しを行う場合は環境を保持する必要がない(図\ref{fig:tailcall}参照) +。そのためスタックの状態を変更することなく呼び出すことができる。この最 +適化は末尾呼び出し最適化(tailcall)と呼ばれている。 +\begin{figure}[htpb] + \begin{center} + \includegraphics[width=.6\textwidth]{figures/tailcall.eps} + \end{center} + \caption{末尾呼び出し最適化が可能な関数funcBの例} + \label{fig:tailcall} +\end{figure} + +Scheme処理系では仕様上この最適化が必須となっているが、Cはそうではない。 +しかしGCCはこの最適化をデフォルトで行っている。 + +\subsubsection{軽量継続への摘要} +tailcallをコードセグメントの呼び出しに適用することで軽量継続が実装でき +る。具体的にはソースコード上にコード\ref{code:goto}のような式があった +場合に、これをコード\ref{code:ret-call}と同じように解釈すれば良い。 +この構文解析はGCCのgcc/c-parser.c内で行う。 + +\begin{minipage}[t]{.45\textwidth} + \lstinputlisting[caption=goto文の例,label=code:goto] + {sources/goto-expression.cbc} +\end{minipage} +\hfill +\begin{minipage}[t]{.45\textwidth} + \lstinputlisting[caption=構文木での解釈,label=code:ret-call] + {sources/ret-call.cbc} +\end{minipage} + +しかし構文木の変更だけでは最適化が行われるとは限らない。特にスタックの +状態や変数の数、順番によっても最適化はカットされる場合がある。 +そのため最適化を判断する条件式を修正、また構文木から中間コードを生 +成する部分でも修正が必要になる。 + +\paragraph{expand-call}関数は関数を表す構文木から中間コードを生成する +処理である。この関数内では呼び出される関数のアドレスを取得するコードの +生成、スタックへの引数をプッシュするコードの生成、引数のプッシュの度に +tailcallが可能かのチェックなどが行われている。 + +ここでは以下の処理を追加することでtailcallカットの条件判断をパスしている。 +\begin{itemize} + \item スタックのサイズをごまかす + + tailcallは呼び出し元の全引数サイズが呼び出し先のそれより小さい場合 + には実行できない。そのため呼び出し元、この場合コードセグメント全て + の引数にもちいるスタックサイズを大きな値でごまかす。 + \item 並列代入 + + \ref{sec:cbc-problem}で説明したような並列代入の必要な関数呼び出し + を行った場合はtailcallは実行されない。そのためここで並列代入が必要 + になる。 +\end{itemize} + +上記処理の追加により軽量継続が実装された。 +継続の際にコードセグメントに渡す引数は関数と同じようにスタック上に格納 +されるが、このスタックは拡張することはなく、図 +\ref{fig:gotostack}のように連続した継続の中でスタックポインタは常 +に同じアドレスを指し示す。(比較のため、図\ref{fig:funcstack}には関数 +呼び出しの際のスタックの状態を例示した) +\begin{figure}[htpb] + \begin{center} + \subfloat[][関数呼び出し]{\label{fig:funcstack} + \includegraphics[width=.6\textwidth]{figures/functionstack.eps}} + \subfloat[][軽量継続]{\label{fig:gotostack} + \includegraphics[width=.6\textwidth]{figures/interfacestack.eps}} + \end{center} + \caption{継続制御と関数呼び出しでのスタックの違い} +\end{figure} + +しかし並列代入の処理は構造体のようにオーバラップする引数に対しては対応 +しておらず、プログラムによっては引数がちゃんと渡されないなどのバグが生 +じていた。 + + +\section{問題点の改善} +ここから\ref{sec:cbc-problem}節で紹介した問題点について、本研究での改 +善点を説明する。 + + +\subsection{並列代入}\label{sec:impl-parallel} +% 一時変数を取得する例を示す +% 最適化の期待 +% おい、replace_arguments関数、あんまり意味ないぞ + +\ref{sec:}のコード\ref{code:}で説明した様に、コードセグメントの受け取 +った引数と継続の際に渡す引数の順序が変わる場合等に並列代入が必要になる。 +過去の実装ではこの並列代入を、\verb|expand_call|という構文木から中間コ +ードを生成する処理の部分で行っていた。 + +しかし実際にはGCCは元より並列代入を実装しているため、独自の実装は必要 +としない。また、この独自の実装にも問題があった。 +そのため独自の実装は廃止し、GCCの機能を利用することにする。 + +コード\ref{code:parallel-example2}は並列代入の必要な軽量継続の例である。 +\lstinputlisting + [caption=並列代入の必要な軽量継続の例,label=code:parallel-example2] + {sources/parallel-example.cbc} + +継続の引数は現在の引数と同じメモリに格納されるため、引数\verb|a|は +\verb|b|の位置に、引数\verb|b|は\verb|a|の位置に代入されることになる。 +この場合に並列代入を考慮せず、順に代入すると +\begin{verbatim} + a = b; + b = a; +\end{verbatim} +となり、両方が同じ値になってしまう。 +ただしこの例は極端に簡略化した例であり、この程度であればtailcallに問題 +はない。しかしより複雑な並列代入では同じ問題が現れる。特に、引数に含ま +れるコードセグメントポインタへ間接継続する場合には、ほぼ確実に失敗する。 + +この問題の回避策として単純にコード\ref{code:avoiding-parallel}の様に変 +数の値を一時変数に退避することが考えられる。 + +\lstinputlisting + [caption=引数の退避,label=code:avoiding-parallel] + {sources/avoiding-parallel.cbc} + +こうすることで引数が一時変数に確保され、その後そこからコピーする形で所 +定のメモリ位置に戻されるため問題が回避できる。今回の並列代入の改善では +この手法を用いる。 + +\subsubsection{問題点と最適化の期待} +この手法でどのように引数を入れ替えても正しく代入可能になる。ただし、一 +時変数の使用は処理速度に問題がある。特にレジスタの少ないアーキテクチャ +では一時変数の確保にはメモリ上のスタックを用いるため、余計なメモリアク +セスや冗長な命令が増えてしまう。このため、この手法を実践したコードでは +そうでないコードに比べて若干の速度低下が見込まれる。 + +その代わり、この速度低下はGCCのもつ最適化機構で回避され得るものである。 +GCCでは中間コード生成後、必要のない一時変数へのコピーなどは最適化によ +りカットされる。そのため、最適化を有効にした場合はこの処理速度の低下は +起きないはずである。この影響に関しては\ref{chp:eval}章にて評価を行う。 + +\subsubsection{一時変数への退避の実装} + +この手法の実装は、中間コード生成時ではなく構文木生成で可能である。 +tailcallの関数呼び出しを表す構文木の生成時に以下の処理を追加する。 +\begin{enumerate} + \item 関数呼び出しを表す構文木\verb|a|の取得 + \item \verb|a|から引数を表す構文木を取得、それぞれについて + \begin{enumerate} + \item 同じ型の名前なし一時変数を作成 + \item 引数の値を一時変数に代入 + \item 関数に渡す引数を一時変数に変更 + \end{enumerate} + \item 呼び出す関数がポインタだった場合 + \item 関数と同じ型(関数ポインタ)の一時変数を作成 + \item 関数アドレスを一時変数に代入 + \item 呼び出す関数を一時変数に変更 +\end{enumerate} + +ここでは関数ポインタも引数と同じように扱い、一時変数に退避する。 +実際のプログラムはコード\ref{code:replace-args}の様になる。 +この関数\verb|cbc_replace_arguments|は関数呼び出し構文木を引数として受 +け取り、上記の処理を行う。tree callがその構文木である。 +\verb|build_decl|は名無し一時変数の宣言、 \verb|build_modify_expr|は一 +時変数への代入を行う構文木の生成をしている。 + +\lstinputlisting + [caption=上記の処理を行う関数,label=code:replace-args] + {sources/replace-args.c} + +これによりソースコードの構文解析時、軽量継続をパースしてその構文木を生 +成した際にこの関数\verb|cbc_replace_arguments|を実行することで、この軽 +量継続は並列代入に対応できるようになった。 + +この影響による速度変化の評価は\ref{sec:compare2old}節で行う。 + + +\subsection{環境付き継続} + +環境付き継続は過去の研究では実装されていなかった。 +これはCとの互換性のために必要な制御構造である。 + +環境付き継続には\ref{ssec:gotowithenv}で述べたように、\verb|__return| +という擬似変数を使う。この変数の値を継続先のコードセグメントに渡すこと +で、そのコードセグメントから関数の環境へ復帰することを可能にする。 +渡された\verb|__return|の値は、コードセグメント側からは他のコードセグ +メントと識別できる必要はない。 + +この環境付き継続にもちいる\verb|_ _return|擬似変数の実装には様々な方法 +が考えられるが、今回の実装には内部関数をもちいることにした。内部関数は +GCCによるCの拡張機能である +\cite{bib:nestedfunc}。 + +\subsubsection{GCCにより追加されるコード} +環境付き継続で使う\verb|__return|変数は特殊なコードセグメントへのポイ +ンタとなる必要がある。このコードセグメントはユーザでは定義せず、その変 +数を参照した関数の返り値型を基にコンパイラが自動で生成する事が望ましい。 + +具体的には、コード\ref{code:cbcreturn}の関数funcBをコンパイラは次のコ +ード\ref{code:nestedcode}の様に解釈し、内部コードセグメントを自動生成 +する。 +\lstinputlisting + [caption=コード\ref{code:cbcreturn}のfuncBに追加される処理, + label=code:nestedcode,numbers=left] + {sources/nestedcode.cbc} + + +5--14行がGCCにより追加される処理である。内部コードセグメント +\verb|__unnamed_code|は受け取った引数を関数の返り値として保持し、ラベ +ル\verb|__unnamed_label|にjumpする。この時点で内部コードセグメントを抜 +けて元の関数funcBの環境に復帰する。 + +さらにjump先もGCCにより自動で追加される。しかしこのjump先は +\verb|__unnamd_code|以外からは実行してはならない。そのため条件式が真に +ならないif文で囲み、実行を回避している。 +jump先での処理は、\verb|__unnamed_code|内で代入された値を持ってリター +ンするのみである。 + + +\subsubsection{内部コードセグメント自動生成の実装方法} + +GCCは変数や関数、また文字列や数値などのリテラルに関する処理を +\verb|c_parser_postfix_expression|で行っている。この関数では変数や数値 +、文字列などの判定に500行にわたるswitch文を使っているが、ここに +\verb|__return|の判定も追加する。 + +必要な処理は以下の様になる。 +\begin{itemize} + \item ラベル\verb|_ _unnamed_label|の宣言 + \item 返り値を保持しておく変数の宣言 + \item 内部関数の定義 + \item 条件分岐制御の構文木生成 + \item 条件分岐内でのラベルの定義 + \item 条件分岐内での復帰構文の構文木生成 +\end{itemize} +参考のため付録にコード\ref{code:nestedcode}を用意した。 + +%コード\ref{code:nestedcode}にその処理を示す。 +%\lstinputlisting +% [caption=c\_parser\_postfix\_expressionでの処理, +% label=code:nestedcode] +% {sources/c_parser_postfix_expression.c} +%ここで使われている関数\verb|cbc_define_nested_code|, +%\verb|cbc_define_if_closed_goto |もこの処理のために作成したものである +%が割愛する。処理内容は GCCが通常行う関数やif文の構文木生成とほぼ同じで +%ある。 + +以上でコード\ref{code:nestedcode}に示すような処理がコンパイル時に自動 +で追加され、環境付き継続の使用が可能になった。 + +\subsubsection{関数からの継続} + +ここで関数内から継続を行ったときの弊害がでてくる。 +\ref{ssec:impl-goto}節の実装では関数からの継続は考慮していない。通常の +継続の際は現コードセグメントのもつ引数は保持しないため、直接継続しよう +とすると、その関数やその関数を呼び出した関数の持つ環境(スタック)を破 +壊してしまう(\pageref{fig:interfacestack} +ページ、図\ref{fig:interfacestack})。 + +この問題を回避するため、関数からの継続に限り、スタックを拡張し関数の環 +境を保持する手法をとった。 +この動作は本来の軽量継続の概念とは相容れないものだが、Cとの互換性維持 +のために必要である。また、CbC部分での軽量継続ではいずれもスタックは定 +常なので、CbC の目的である検証、状態遷移記述などの問題にはならない。 + + + +\subsection{PowerPCにおける間接継続}\label{sec:impl-indirect} + +軽量継続の実装にtailcallを用いたことは\ref{sec:}で説明した。しかし、実 +際にはtailcallが行われないアーキテクチャがいくつか存在する。 PowerPCも +その一つで、このアーキテクチャでは間接呼び出しの場合は tailcallが行わ +れない。このためこれまでPowerPCでの間接継続はコンパイルエラーで実行で +きなかった。 + +\subsubsection{RTLとMachine Description} +GCCは構文木からRTLと呼ばれる中間コードを生成する。この中間コードは一部 +を除いてアーキテクチャ依存性はなく、どのアーキテクチャでもほぼ同じにな +る。さらに、最終的にこのRTLはアーキテクチャ毎に異なる規則でアセンブラ +に変換される。この規則を定義するのがMachine Description(以下md)であ +る。 + +RTL、およびmdはどちらもS式で表現されている。 +GCCは自身のビルドの際、S式をパースするプログラムを作成し、そのプログラ +ムはmdを基にアーキテクチャ毎に異なるCのソースコードを出力する。このソ +ースコードがコンパイルされてGCCの一部となる。 + +RTLの例としてこの問題となっている間接継続を表すS式をコード +\ref{code:rtl-example}に示す。 +\lstinputlisting + [caption=PowerPCにおける間接継続のRTL, + label=code:rtl-example, + language=Lisp] + {sources/rtl-example.rtl} + +% TODO: RTLの説明も入れるか? + +\subsubsection{間接継続のmd} + +mdにはこのRTLをアセンブラに変換するための情報を定義する。 +定義すべき情報は以下の4つである。 +\begin{itemize} + \item 規則の名前 + \item 変換するRTL + \item 変換する条件 + \item 出力するアセンブラを返すCの構文 +\end{itemize} +同じくmdの例として、この問題となったRTL用の変換規則を定義したものをコ +ード\ref{code:md-example}に示す。 +\lstinputlisting + [caption=\ref{code:rtl-example}の変換規則, + label=code:md-example, + language=Lisp] + {sources/md-example.md} +ここでは出力するアセンブラとして\verb|b%T0|が使われている。 +\verb|%T0|はレジスタ名に置き換えられる部分である。このアセンブラは最終 +的には\verb|bctr|と置き換えられてPowerPCのアセンブラとして出力される。 +%間接でない、通常の継続ではこれが\verb|bl%T0|となっているので対照的であ +%る。コード\ref{code:md-example}は実際に通常の継続用のmd修正して作られ +%た。 + + + + +\subsection{x86における引数渡し}\label{sec:impl-fastcall} + +コードセグメントの間の軽量継続は、Cの関数呼び出しと同じように引数を渡 +すことができる。関数呼び出しでのこの引数の渡し型はほとんどの場合アーキ +テクチャやオペレーティングシステム、また各プログラミング言語毎に違った +規約があり、これは一般に呼出規約(Calling convention)と呼ばれている。 + +CbCでは同じアーキテクチャでもコンパイラによってこの呼出規約は違う。mc +の軽量継続では、なるべく多くの引数をレジスタに格納するようになっており +、 PowerPCでは最大11個のint型をレジスタに格納する。レジスタの少ない +x86でも2つだけだがやはりレジスタを使用している。 + +GCCベースコンパイラでは継続制御の引数渡しに関数の呼出規約と同じ方法を +使っている。そのため、x86では引数渡しに全てスタックを用いることになり +、mcに比べて速度低下がみられた。 + +引数渡しにレジスタを使用できるようにすることでこの問題を解決したい。 + +\subsubsection{fastcall} +そもそも引数渡しがスタックだけだということは、CbCだけでなくCにおいても +速度面で問題をはらんでいる。そのためGCCではもとより、x86でのレジスタ渡 +しを可能にする拡張機能を実装している。それがfastcallである。 + +このfastcallも使用するレジスタ数は2つだけではあるが、継続制御でもこれ +を使うことにより高速化が図れるはずである。 + +\subsubsection{コードセグメントを全てfastcallに} + +通常、GCCの拡張機能を用いて関数をfastcallにするにはコード +\ref{code:fastcall-example}の様に ``attribute''キーワードを関数宣言の +後ろに記述する。 + +\begin{minipage}[t]{.7\textwidth} +\lstinputlisting + [caption=fastcallな関数funcBを呼び出す例,label=code:fastcall-example] + {sources/fastcall-example.c} +\end{minipage} + +しかし全てのコードセグメントに対してこの属性を宣言するのは現実的でなく +、mcとのソースコードレベルの整合性もとれない。そこでGCCではコードセグ +メントの解析時に全てfastcall属性を付加することにする。 + +具体的には「型」の構文解析の際、キーワード``code''で関数の型が宣言され +ている場合に、属性値を表す構文木を付加する。 +\verb|c_parser_declspecs|関数が「型」に関する構文解析部である。 +この関数内の型名キーワードを処理するswitch文内で、``code''のみ +fastcall属性を付加する。 + +コード\ref{code:declspecs}がその処理である。このコードの12--14行目が +fastcall属性付加の処理になる。それ以外の行は voidやintなど他の型の処理 +と変わらない。 + +\lstinputlisting + [caption=c\_parser\_declspecsにおけるキーワード``code''の処理, + label=code:declspecs] + {sources/declspecs.c} + +この処理で全てのコードセグメントがfastcall対応となり、軽量継続の際には +レジスタ\verb|ecx,edx|に引数をのせることが可能となる。 + + +\subsection{プロトタイプ自動生成} +Cのプロトタイプ宣言はコンパイル時のエラー検出に役立っている。 +しかしCbCのコードセグメントには返り値は存在しない。また状態遷移記 +述という性質上、プログラムを記述する際は上から下に実行順にコードセ +グメントを並べることが多いため、プロトタイプ宣言をするとそれが膨大 +な数になる。 + +また、mcベースコンパイラの方ではプロトタイプ宣言を減らすため、一種の簡 +単な型推論を実装している。そのためこれまでに作られたCbCのプログラムで +は特殊な場合を除いてプロトタイプ宣言がほとんどなく、GCCでコンパイルす +る際に問題となる。 + +この問題に暫定的に対処するため、Pythonを用いてプロトタイプの自動生成を +行うスクリプトを作成した。このスクリプトでは関数の定義部を正規表現で検 +索し、マッチする部分を変換して関数宣言として出力する。 + +全コードは付録\ref{apx:}に掲載する。 + +% TODO: prototype declaration + + diff -r aa09c34b90d3 -r 50e23a4b2f40 introduction.tex --- a/introduction.tex Mon Feb 01 20:37:36 2010 +0900 +++ b/introduction.tex Fri Feb 05 10:00:05 2010 +0900 @@ -115,6 +115,7 @@ %\ref{chp:cbc}にてContinuation based Cの要求仕様と詳細について説明する。 %\ref{chp:impl}章ではgccへの実装方法を説明する。 +% TODO: 整理せい 次章以降、本稿は\ref{chp:cbc}章にてCbCについて説明する。 \ref{chp:impl}章にてgccへの実装について説明、 diff -r aa09c34b90d3 -r 50e23a4b2f40 master_paper.tex --- a/master_paper.tex Mon Feb 01 20:37:36 2010 +0900 +++ b/master_paper.tex Fri Feb 05 10:00:05 2010 +0900 @@ -2,11 +2,18 @@ \usepackage{master_paper} \usepackage{ascmac} %% itembox \usepackage[dvipdfm]{graphicx} -\usepackage{listings, jlisting} +\usepackage{listings} \usepackage{multirow} \usepackage{slashbox} \usepackage{color} -\lstset{basicstyle=\footnotesize, frame=trbl, framesep=5pt} +\usepackage{paralist} + +\usepackage{caption} +% TODO: +% captionパッケージはtouch ragged2e.sty everysel.sty +% をしておかないとフォントが破滅する +\usepackage{subfig} % なかでcaptionを呼び出してる + % dvipdfm を使って PDF ファイルに日本語の栞をつける \usepackage[dvipdfm,bookmarks=true, @@ -32,6 +39,7 @@ framesep=5pt,% showstringspaces=false,% frameround=ftft,% + frame=trBL, emphstyle=\underbar, %frame=tRBl, %numbers=left,stepnumber=1,numberstyle=\footnotesize% @@ -80,12 +88,15 @@ \listoffigures %表目次 \listoftables +%コード目次 +\lstlistoflistings %\pagenumbering{arabic} \input{introduction.tex} \input{cbc.tex} +\input{gcc.tex} \input{implementation.tex} -\input{taskmanager.tex} +%\input{taskmanager.tex} \input{evaluations.tex} \input{conclusion.tex} @@ -93,7 +104,11 @@ \input{thanx.tex} %参考文献 \input{bibliography.tex} +%発表履歴 +\input{presentations.tex} + %付録 +\appendix \input{appendix.tex} diff -r aa09c34b90d3 -r 50e23a4b2f40 memo.txt --- a/memo.txt Mon Feb 01 20:37:36 2010 +0900 +++ b/memo.txt Fri Feb 05 10:00:05 2010 +0900 @@ -179,6 +179,9 @@ o mcとgcc +quicksort 100万要素 x86 +oldGCC: 2.849 +GCC: 2.401 TODO: @@ -191,3 +194,69 @@ +\begin{table}[htpb] + \centering + \begin{tabular}{|c|c|c|c|c|c|} \hline + \multirow{3}{*}{ \backslashbox{CPU/OS}{コンパイラ} } + & \multicolumn{4}{c|}{GCC} & \multirow{3}{*}{mc} \\ \cline{2-5} + & \multicolumn{2}{c|}{デバグ情報(-g)付き} & \multicolumn{2}{c|}{デバグ情報なし} & \\ \cline{2-5} + & -O2 & -Os & -O2 & -Os & \\ \hline + x86/OS X & 11100 & 11100 & 9804 & 9804 & \\ \hline + x86/Linux & 18444 & 17310 & 8216 & 8214 & \\ \hline + ppc/OS X & 10392 & 10392 & 9172 & 9172 & \\ \hline + ppc/Linux & 25138 & 23876 & 13030 & 13028 & \\ \hline + ppc/PS3 & 22142 & 20452 & 9906 & 9672 & \\ \hline + \end{tabular} + \caption{実行ファイルのファイルサイズ比較 not stripped(単位: bytes)} + \label{tab:eval-strip} +\end{table} +\begin{table}[htpb] + \centering + \begin{tabular}{|c|c|c|c|c|c|} \hline + \multirow{3}{*}{ \backslashbox{CPU/OS}{コンパイラ} } + & \multicolumn{4}{c|}{GCC} & \multirow{3}{*}{mc} \\ \cline{2-5} + & \multicolumn{2}{c|}{デバグ情報(-g)付き} & \multicolumn{2}{c|}{デバグ情報なし} & \\ \cline{2-5} + & -O2 & -Os & -O2 & -Os & \\ \hline + x86/OS X & 9176 & 9176 & 9176 & 9176 & \\ \hline + x86/Linux & 5752 & 5752 & 5752 & 5752 & \\ \hline + ppc/OS X & 8576 & 8576 & 8576 & 8576 & \\ \hline + ppc/Linux & 10068 & 10068 & 10068 & 10068 & \\ \hline + ppc/PS3 & 6960 & 6728 & 6960 & 6728 & \\ \hline + \end{tabular} + \caption{実行ファイルのファイルサイズ比較 stripped(単位: bytes)} + \label{tab:eval-strip} +\end{table} + + + + +\begin{table}[htpb] + \centering + \begin{tabular}{|c|c|c|c|c|} \hline + \multirow{2}{*}{ \backslashbox{CPU/OS}{コンパイラ} } + & \multicolumn{3}{c|}{gcc} & \multirow{2}{*}{mc} \\ \cline{2-4} + &最適化なし&速度最適化&サイズ最適化& \\ \hline + x86/OS X & 11352 & 11100 & 11100 & 11100 \\ \hline + x86/Linux & 19634 & 18444 & 8214 & 9800 \\ \hline + ppc/OS X & 14720 & 10392 & 10392 & 14396 \\ \hline + ppc/Linux & 22498 & 25138 & 23876 & 19754 \\ \hline + ppc/PS3 & 20758 & 21507 & 9672 & 18516 \\ \hline + \end{tabular} + \caption{実行ファイルのファイルサイズ比較 not stripped(単位: bytes)} + \label{tab:eval-nostrip} +\end{table} +\begin{table}[htpb] + \centering + \begin{tabular}{|c|c|c|c|c|} \hline + \multirow{2}{*}{ \backslashbox{CPU/OS}{コンパイラ} } + & \multicolumn{3}{c|}{gcc} & \multirow{2}{*}{mc} \\ \cline{2-4} + &最適化なし&速度最適化&サイズ最適化& \\ \hline + x86/OS X & 9256 & 9176 & 9176 & 9176 \\ \hline + x86/Linux & 9856 & 5752 & 5752 & 5752 \\ \hline + ppc/OS X & 12736 & 8576 & 8576 & 12664 \\ \hline + ppc/Linux & 10072 & 10068 & 10068 & 9920 \\ \hline + ppc/PS3 & 9064 & 6960 & 6728 & 7944 \\ \hline + \end{tabular} + \caption{実行ファイルのファイルサイズ比較 stripped(単位: bytes)} + \label{tab:eval-strip} +\end{table} diff -r aa09c34b90d3 -r 50e23a4b2f40 presentations.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presentations.tex Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,12 @@ +\chapter*{発表文献} +\addcontentsline{toc}{chapter}{発表文献} + +Continuation based CコンパイラのGCC-4.2による実装 \\ +与儀健人, 河野真治, ~~ +情報処理学会システムソフトウェアとオペレーティング・システム研究会 +(OS), April, 2008. + +組み込み向け低レベル言語 CbC の GCC による実装 \\ +与儀健人, 河野真治, ~~ +第6回ディペンダブルシステムワークショップ, July, 2008 + diff -r aa09c34b90d3 -r 50e23a4b2f40 quicksort/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/quicksort/Makefile Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,26 @@ + +CbCC=cbc-gcc + +#CC=gcc +CC=cbc-gcc + +# fastcall版では-O0,-O2は動作確認、-O3以上はだめ +#CFLAGS=-O2 -fomit-frame-pointer -fno-optimize-sibling-calls +#CFLAGS=-g -O2 +#CFLAGS=-g -O1 +CFLAGS=-g -O0 +#CFLAGS=-Os # an error occurred. + +.SUFFIXES: .cbc .o + +all: quicksort_cbc + +.cbc.o: + $(CbCC) $(CFLAGS) -c -o $@ $< + + +quicksort_cbc: quicksort_cbc.o quicksort_test.o + $(CC) $(CFLAGS) -o $@ $^ + +clean: + rm -rf *.o *.s quicksort_c quicksort_cbc quicksort_cbc2 diff -r aa09c34b90d3 -r 50e23a4b2f40 quicksort/benchmark.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/quicksort/benchmark.sh Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,44 @@ +#!/usr/bin/env zsh + +time=/usr/bin/time +QS=./quicksort_cbc +size=10000000 +seed=123456789 +num=10 + + +max=0 +min=99999 +count=0 +amount=0 + +echo "size of array = $size" +while [[ $count -lt $num ]]; do + usertime=$( $time -p $QS -n $size -s $seed 2>&1 >& - |grep '^user'|tr -s " "|cut -f2 -d" ") + #usertime=$(printf "%d" $usertime) + echo $usertime + + amount=$(($usertime+$amount)) + if [[ $usertime -lt $min ]]; then + min=$usertime + fi + if [[ $usertime -gt $max ]]; then + max=$usertime + fi + #seed=$seed[1,-2] + seed=$(($seed+10)) + count=$(($count+1)) +done + +echo "amount time = $amount" +echo "maxtime = $max" +echo "mintime = $min" + +amount=$(($amount - $max - $min)) +echo "amount time - mintime - maxtime = $amount" +count=$(($count-2)) +echo "count = $count" +averagetime=$(($amount/($count))) +echo "average time = $averagetime" + + diff -r aa09c34b90d3 -r 50e23a4b2f40 quicksort/quicksort_cbc.cbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/quicksort/quicksort_cbc.cbc Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,169 @@ +#include +#include +#include + +typedef void *stack; +typedef struct { + int size; + void *interface; + __code (*ret)(void*, stack) ; +} frame, *framep; + +/* quickstart main routine. */ +typedef struct { + int *v; + int s; + int e; +} QS_IF ; +typedef __code (*RET)(void*); + +#include"quicksort_cbc.h" + +/* for check. */ +void *mustbefreed; + +__code returner(stack sp) +{ + framep fp = (framep)sp; + sp += fp->size; + goto fp->ret(fp->interface, sp); +} + +__code quicksort_start(void *arg, stack sp) +{ + QS_IF *recvif = arg; + int a,b,c,p; + a = recvif->v[recvif->s]; + b = recvif->v[recvif->e]; + c = recvif->v[(recvif->s+recvif->e)/2]; + + //printf("quicksort_start: s=%d,e=%d", recvif->s, recvif->e); + if (recvif->e <= recvif->s) goto returner(sp); + + if (a < b) { + if (b < c) + p = b; + else if (a < c) + p = c; + else + p = a; + } else { + if (a < c) + p = a; + else if (b < c) + p = c; + else + p = b; + } + + goto quicksort_divider (recvif, recvif->s, recvif->e, p, sp); +} +/* main routine end. */ + +/* divide routine. */ +__code quicksort_divider(QS_IF *recvif, int s, int e, int p, stack sp) +{ + goto quicksort_divider_s(recvif, s, e, p, sp); +} +__code quicksort_divider_s(QS_IF *recvif, int s, int e, int p, stack sp) +{ + if (recvif->v[s]v[e]) { + e--; + goto quicksort_divider_e(recvif, s, e, p, sp); + } else + goto quicksort_swapper(recvif, s, e, p, sp); +} +__code quicksort_swapper(QS_IF *recvif, int s, int e, int p, stack sp) +{ + if (sv[s]; + recvif->v[s] = recvif->v[e]; + recvif->v[e] = tmp; + goto quicksort_divider(recvif, s+1, e-1, p, sp); + } else { + goto quicksort_treecall(recvif, s, e, sp); + } +} +/* divide routin end. */ + + +/* recursive call routine. */ +__code quicksort_treecall(QS_IF *recvif, int s, int e, stack sp) +{ + framep fp; + QS_IF *outif; + + /* interface for first quicksort_start this segment directly jump to. */ + outif = (sp-=sizeof(QS_IF)); + outif->v = recvif->v; + outif->s = recvif->s; + outif->e = e; + fp = (sp-=sizeof(frame)); + fp->ret = quicksort_start; + fp->interface = recvif; + fp->size = sizeof(frame)+sizeof(QS_IF); + + /* recvif is used by second quicksort_start. */ + recvif->s = e+1; + goto quicksort_start(outif, sp); +} +/* recursive call routine end. */ + +#define STACK_SIZE 10240 + +typedef struct { + __code (*ret)(void*); + void *ret_arg; + stack *sp; +} QS_FINISH; +__code +quicksort(int *v, int s, int e, RET ret, void *arg ) +{ + framep fp; + stack sp0, sp; + sp0 = mustbefreed = malloc(STACK_SIZE); + sp = sp0 + STACK_SIZE; + QS_FINISH *finish_if; + QS_IF *outif; + + /* interface for quicksort_finish. */ + finish_if = (sp -= sizeof(QS_FINISH)); + finish_if->ret = ret; + finish_if->ret_arg = arg; + finish_if->sp = sp0; + + /* interface for quicksort_start. */ + outif = (sp -= sizeof(QS_IF)); + outif->v = v; + outif->s = s; + outif->e = e; + /* frame for quicksort_finish. */ + fp = (sp -= sizeof(frame)); + fp->ret = quicksort_finish; + fp->interface = finish_if; + fp->size = sizeof(frame)+sizeof(QS_IF); + + goto quicksort_start(outif, sp); +} +__code +quicksort_finish(void *arg, stack sp) +{ + QS_FINISH interface; + interface = *(QS_FINISH*)arg; + //assert((void*)interface.sp==(void*)mustbefreed); + free(interface.sp); + goto interface.ret(interface.ret_arg); +} + + + + + diff -r aa09c34b90d3 -r 50e23a4b2f40 quicksort/quicksort_cbc.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/quicksort/quicksort_cbc.h Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,26 @@ +/* defined in file quicksort_cbc.cbc at offset 354 */ +__code returner (stack sp) __attribute__((noreturn)); + +/* defined in file quicksort_cbc.cbc at offset 462 */ +__code quicksort_start (void *arg, stack sp) __attribute__((noreturn)); + +/* defined in file quicksort_cbc.cbc at offset 1031 */ +__code quicksort_divider (QS_IF *recvif, int s, int e, int p, stack sp) __attribute__((noreturn)); + +/* defined in file quicksort_cbc.cbc at offset 1155 */ +__code quicksort_divider_s (QS_IF *recvif, int s, int e, int p, stack sp) __attribute__((noreturn)); + +/* defined in file quicksort_cbc.cbc at offset 1364 */ +__code quicksort_divider_e (QS_IF *recvif, int s, int e, int p, stack sp) __attribute__((noreturn)); + +/* defined in file quicksort_cbc.cbc at offset 1576 */ +__code quicksort_swapper (QS_IF *recvif, int s, int e, int p, stack sp) __attribute__((noreturn)); + +/* defined in file quicksort_cbc.cbc at offset 1916 */ +__code quicksort_treecall (QS_IF *recvif, int s, int e, stack sp) __attribute__((noreturn)); + +/* defined in file quicksort_cbc.cbc at offset 2547 */ +__code quicksort (int *v, int s, int e, RET ret, void *arg ) __attribute__((noreturn)); + +/* defined in file quicksort_cbc.cbc at offset 3213 */ +__code quicksort_finish (void *arg, stack sp) __attribute__((noreturn)); diff -r aa09c34b90d3 -r 50e23a4b2f40 quicksort/quicksort_test.cbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/quicksort/quicksort_test.cbc Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,106 @@ +#include +#include +#include +#include + +#include"quicksort_test.h" + +extern __code quicksort(int *,int,int, __code (*)(void*), void*); + + +void +random_initialize(int *v, int size, int min, int max) +{ + int i; + int diff = max-min+1; + + for (i=0; i v[i+1]) + return 0; + } + return 1; +} + +__code +exit0(void *arg) +{ + int *v = arg; + int b; + //print_array(arg, size); + b = check_sort(arg, size); + if (b) { + printf("sorting successful!\n"); + exit(EXIT_SUCCESS); + } else { + printf("sorting failure! \n"); + exit(EXIT_FAILURE); + } +} + diff -r aa09c34b90d3 -r 50e23a4b2f40 quicksort/quicksort_test.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/quicksort/quicksort_test.h Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,18 @@ +/* defined in file quicksort_test.cbc at offset 172 */ +void random_initialize (int *v, int size, int min, int max); + +/* defined in file quicksort_test.cbc at offset 334 */ +static void print_array (int *v, int size); + +/* defined in file quicksort_test.cbc at offset 497 */ +void starter (int size); + +/* defined in file quicksort_test.cbc at offset 811 */ +int main (int argc, char **argv); + +/* defined in file quicksort_test.cbc at offset 1207 */ +static int check_sort (int *v, int size); + +/* defined in file quicksort_test.cbc at offset 1336 */ +__code exit0 (void *arg); + diff -r aa09c34b90d3 -r 50e23a4b2f40 sources/avoiding-parallel.cbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sources/avoiding-parallel.cbc Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,7 @@ +code somesegment(int a, int b) { + /* do something */ + int a1, b1; + a1 = a; + b1 = b; + goto nextsegment(b1, a1); +} diff -r aa09c34b90d3 -r 50e23a4b2f40 sources/c-parser-postfix-expression.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sources/c-parser-postfix-expression.c Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,26 @@ +case RID_CbC_RET: + + stmt = c_begin_stmt_expr (); + + /* create label declaration. */ + label = get_identifier ("_cbc_exit0"); + tlab = declare_label (label); + add_stmt (build_stmt (DECL_EXPR, tlab)); + + /* declare retval. (int retval;) */ + tree decl_cond = + build_decl(VAR_DECL,get_identifier ("retval"), + TREE_TYPE(current_function_decl)); + pushdecl (decl_cond); + + /* define nested function. */ + decl = cbc_define_nested_code(label, decl_cond); + + /* define if-ed goto label and return statement. */ + cbc_define_if_closed_goto (label, decl_cond); + + /* get pointer to nested function. */ + value = build_addr (decl , current_function_decl); + add_stmt (value); + + expr.value = c_finish_stmt_expr (stmt); diff -r aa09c34b90d3 -r 50e23a4b2f40 sources/c_parser_postfix_expression.c --- a/sources/c_parser_postfix_expression.c Mon Feb 01 20:37:36 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -case RID_CbC_RET: - - stmt = c_begin_stmt_expr (); - - /* create label declaration. */ - label = get_identifier ("_cbc_exit0"); - tlab = declare_label (label); - add_stmt (build_stmt (DECL_EXPR, tlab)); - - /* declare retval. (int retval;) */ - tree decl_cond = - build_decl(VAR_DECL,get_identifier ("retval"), - TREE_TYPE(current_function_decl)); - pushdecl (decl_cond); - - /* define nested function. */ - decl = cbc_define_nested_code(label, decl_cond); - - /* define if-ed goto label and return statement. */ - cbc_define_if_closed_goto (label, decl_cond); - - /* get pointer to nested function. */ - value = build_addr (decl , current_function_decl); - add_stmt (value); - - expr.value = c_finish_stmt_expr (stmt); diff -r aa09c34b90d3 -r 50e23a4b2f40 sources/declspecs.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sources/declspecs.c Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,17 @@ +case RID_CbC_CODE: + if (!typespec_ok) + goto out; + attrs_ok = true; + seen_type = true; + if (c_dialect_objc ()) + parser->objc_need_raw_identifier = true; + t.kind = ctsk_resword; + t.spec = c_parser_peek_token (parser)->value; + declspecs_add_type (specs, t); + + attrs = get_identifier("fastcall"); + attrs = build_tree_list(attrs, NULL_TREE); + declspecs_add_attrs(specs, attrs); + + c_parser_consume_token (parser); + break; diff -r aa09c34b90d3 -r 50e23a4b2f40 sources/divider-e-gcc.asm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sources/divider-e-gcc.asm Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,11 @@ + +quicksort_divider_e: + lwz 11,0(3) + slwi 0,5,2 + lwzx 0,11,0 + cmpw 7,0,6 + bgt 7,.L13 + b quicksort_swapper +.L13: + addi 5,5,-1 + b quicksort_divider_e diff -r aa09c34b90d3 -r 50e23a4b2f40 sources/divider-e-mc.asm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sources/divider-e-mc.asm Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,19 @@ + +quicksort_divider_e: + la 1,.LC22@l(31) + addis 1,1,.LC22@ha + mr 3,27 + slwi 3,3,2 + mr 11,29 + lwz 11,0@l(11) + add 11,11,3 + lwz 11,0@l(11) + mr 10,26 + cmpw 7,10,11 + bge 7,.LC24 + mr 10,27 + addi 10,10,-1@l + mr 27,10 + b quicksort_divider_e +.LC24: + b quicksort_swapper diff -r aa09c34b90d3 -r 50e23a4b2f40 sources/divider-e.cbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sources/divider-e.cbc Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,9 @@ +__code divider_e(QS_IF *recvif, + int s, int e, int p, + stack sp) +{ + if (pv[e]) { + goto divider_e(recvif, s, e-1, p, sp); + } else + goto swapper(recvif, s, e, p, sp); +} diff -r aa09c34b90d3 -r 50e23a4b2f40 sources/fastcall-example.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sources/fastcall-example.c Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,9 @@ +int funcB() __attribute__((fastcall)); + +int funcB(int a, int b) { + /* do something. */ +} + +void funcA() { + funcB(20, 30); +} diff -r aa09c34b90d3 -r 50e23a4b2f40 sources/nest-and-goto.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sources/nest-and-goto.c Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,107 @@ +static void +cbc_finish_labeled_goto (location_t loc, + tree label, tree retval) +{ + tree tlab; + tree cond; + + tree cstmt = c_begin_compound_stmt (true); + + tlab = define_label (loc, label); + gcc_assert (tlab); + decl_attributes (&tlab, NULL_TREE, 0); + add_stmt (build_stmt (LABEL_EXPR, tlab)); + + tree ret = c_finish_return (retval); + TREE_USED(ret) = 1; + + cond = integer_zero_node; + tree if_body = c_end_compound_stmt (cstmt, true); + TREE_SIDE_EFFECTS (cstmt) = 1; + c_finish_if_stmt (loc, cond, if_body, NULL_TREE, false); +} + + +static tree +cbc_finish_nested_function (location_t loc, + tree label, tree retval_decl) +{ + + tree fnbody; + tree _retval_decl, _envp_decl; + struct c_declarator *declarator; + tree ident; + struct c_arg_info *args; + struct c_declspecs *specs; + struct c_typespec t; + { + push_scope (); + declare_parm_level (); + /*tree retval_type = TREE_TYPE(retval_decl);*/ + + _retval_decl = build_decl (PARM_DECL, + get_identifier ("_retval"), + TREE_TYPE (retval_decl)); + DECL_SOURCE_LOCATION (_retval_decl) = loc; + DECL_ARTIFICIAL (_retval_decl) = 1; + DECL_ARG_TYPE (_retval_decl) = TREE_TYPE(retval_decl); + pushdecl (_retval_decl); + finish_decl (_retval_decl, NULL_TREE, NULL_TREE); + + _envp_decl = build_decl (PARM_DECL, + get_identifier ("_envp"), + ptr_type_node ); + DECL_SOURCE_LOCATION (_envp_decl) = loc; + DECL_ARTIFICIAL (_envp_decl) = 1; + DECL_ARG_TYPE (_envp_decl) = ptr_type_node; + pushdecl (_envp_decl); + finish_decl (_envp_decl, NULL_TREE, NULL_TREE); + + args = get_parm_info(false); + pop_scope(); + } + + t.kind = ctsk_resword; + t.spec = get_identifier("void"); + specs = build_null_declspecs(); + declspecs_add_type (specs, t); + finish_declspecs (specs); + + /* make nested function. */ + declarator = + build_id_declarator ( + get_identifier ("_cbc_internal_return")); + declarator = build_function_declarator (args, declarator); + + c_push_function_context (); + + if (!start_function (specs, declarator, NULL_TREE)) + { + c_pop_function_context(); + gcc_assert (0); + } + store_parm_decls (); + + + /* start compound statement. */ + tree cstmt = c_begin_compound_stmt (true); + + add_stmt (build_modify_expr + (loc, retval_decl, + NOP_EXPR, _retval_decl)); + tree stmt = c_finish_goto_label (label); + + /* end compound statement. */ + fnbody = c_end_compound_stmt (cstmt, true); + TREE_SIDE_EFFECTS (cstmt) = 1; + + /* finish declaration of nested function. */ + tree decl = current_function_decl; + add_stmt (fnbody); + finish_function (); + c_pop_function_context (); + + add_stmt (build_stmt (DECL_EXPR, decl)); + return decl; + +} diff -r aa09c34b90d3 -r 50e23a4b2f40 sources/replace-args.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sources/replace-args.c Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,35 @@ +static tree +cbc_replace_arguments (location_t loc, tree call) +{ + tree args; + tree fn; + tree tmp_decl; + int i=0; + + fn = CALL_EXPR_FN (call); + if ( TREE_CODE (fn)==PARM_DECL || !TREE_CONSTANT (fn) ) + { + tmp_decl = build_decl (VAR_DECL, NULL_TREE, TREE_TYPE(fn)); + pushdecl (tmp_decl); + + add_stmt (build_modify_expr (loc, tmp_decl, NOP_EXPR, fn)); + CALL_EXPR_FN (call) = tmp_decl; + } + + args = CALL_EXPR_ARGS (call); + for ( ;args; args = TREE_CHAIN (args), i++) + { + tree arg = TREE_VALUE (args); + + if ( TREE_CODE (arg)==PARM_DECL || !TREE_CONSTANT (arg) ) + { + tmp_decl = build_decl (VAR_DECL, NULL_TREE, TREE_TYPE(arg)); + pushdecl (tmp_decl); + + add_stmt (build_modify_expr (loc, tmp_decl, NOP_EXPR, arg)); + CALL_EXPR_ARG (call, i) = tmp_decl; + } + } + + return call; +} diff -r aa09c34b90d3 -r 50e23a4b2f40 thanx.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thanx.tex Fri Feb 05 10:00:05 2010 +0900 @@ -0,0 +1,3 @@ +\chapter*{謝辞} +\addcontentsline{toc}{chapter}{謝辞} +