# HG changeset patch # User Shohei KOKUBO # Date 1455695986 -32400 # Node ID 958634b9fa325318f4689ed78978783b62182f14 # Parent 94c9c506bba930684e7ebadb0e2777d3b82a8f14 make paper directory diff -r 94c9c506bba9 -r 958634b9fa32 Makefile --- a/Makefile Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -TARGET = master_paper - -SRC = $(wildcard *.tex) - -LATEX = platex -shell-escape -BIBTEX = pbibtex -DVIPS = dvips -DVIPDFM = dvipdfmx -RM = rm -f -EBB = extractbb - -# Option definitions -DVIPDFMOPT = -DVIPSOPT = -D 720 -mode esphi -O 0mm,0mm -N0 - -# Suffixes definitions -.SUFFIXES: .tex .dvi - -# Recipes -all: pdf# $(TARGET).ps - open $(TARGET).pdf - -dvi: - @echo "----------- make dvi file ($(TARGET).dvi) ----------" - $(LATEX) $(TARGET) - $(BIBTEX) $(TARGET) - $(LATEX) $(TARGET) - $(LATEX) $(TARGET) -pdf: dvi - $(DVIPDFM) $(DVIPDFMOPT) $(TARGET) - -clean: - $(RM) *~ \#* - @if [ -f $(TARGET).aux ];\ - then $(RM) $(TARGET).aux;\ - fi - @if [ -f $(TARGET).log ];\ - then $(RM) $(TARGET).log;\ - fi - @if [ -f $(TARGET).toc ];\ - then $(RM) $(TARGET).toc;\ - fi - @if [ -f $(TARGET).lof ];\ - then $(RM) $(TARGET).lof;\ - fi - @if [ -f $(TARGET).lot ];\ - then $(RM) $(TARGET).lot;\ - fi - @if [ -f $(TARGET).big ];\ - then $(RM) $(TARGET).big;\ - fi - @if [ -f $(TARGET).bbl ];\ - then $(RM) $(TARGET).bbl;\ - fi - @if [ -f $(TARGET).ilg ];\ - then $(RM) $(TARGET).ilg;\ - fi - @if [ -f $(TARGET).idx ];\ - then $(RM) $(TARGET).idx;\ - fi - @if [ -f $(TARGET).ind ];\ - then $(RM) $(TARGET).ind;\ - fi - @if [ -f $(TARGET).dvi ];\ - then $(RM) $(TARGET).dvi;\ - fi - @if [ -f $(TARGET).pdf ];\ - then $(RM) $(TARGET).pdf;\ - fi - @if [ -f $(TARGET).out ];\ - then $(RM) $(TARGET).out;\ - fi - @if [ -f $(TARGET).bbl ];\ - then $(RM) $(TARGET).bbl;\ - fi - @if [ -f $(TARGET).blg ];\ - then $(RM) $(TARGET).blg;\ - fi diff -r 94c9c506bba9 -r 958634b9fa32 abstract.tex --- a/abstract.tex Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -\begin{abstract} - 本研究では Cerium を開発して得られた知見から Code Segment と Data Segment を用いた並列フレームワークの開発を行なっている。 - Code Segment と Data Segment は処理とデータの単位である。 - 今回設計した Gears OS ではプログラムを Code Segment と Data Segment で記述する。 - Code Segment と Data Segment で記述することでプログラム全体の並列度を高めて効率的に並列処理することを可能にする。 - 本論文では Gears OS の基本的な機能を設計し、CbC(Continuation based C) を用いて実装する。 -\end{abstract} diff -r 94c9c506bba9 -r 958634b9fa32 abstract_eng.tex --- a/abstract_eng.tex Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -\begin{abstract_eng} - We are developing parallel framework using Code/Data Segment. - Code/Data Segment are unit of processing and data. - Use Code/Data Segment in Gears OS Programming. - Parallelism in a high performance Gears OS with Code/Data Segment. - We show same implementation of Gears OS using CbC(Continuation based C). -\end{abstract_eng} diff -r 94c9c506bba9 -r 958634b9fa32 cbc.tex --- a/cbc.tex Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -\chapter{CbC} -Gears OS の実装には LLVM/Clang 上に実装した CbC を用いる。 - -CbC は C から for 文、while 文といったループ制御構文や関数呼び出しを取り除き、Code Segment と goto による軽量継続を導入している。 -図:\ref{fig:cs} は goto による Code Segment の遷移を表したものである。 - -本章では CbC の特徴である Code Segment と Gears OS に対するサポートについて説明する。 - - -\begin{figure}[!h] - \begin{center} - \includegraphics[scale=0.6]{./images/codesegment2.pdf} - \end{center} - \caption{goto による Code Segment 間の継続} - \label{fig:cs} -\end{figure} - -\section{Code Segment} -CbC では処理の単位として Code Segment を用いる。 -Code Segment は CbC における最も基本的な処理単位であり、C の関数と異なり戻り値を持たない。 -Code Segment の宣言は C の関数の構文と同じように行い、型に \_\_code を用いる。 -前述した通り、Code Segment は戻り値を持たないので \_\_code はそれが関数ではなく Code Segment であることを示すフラグのようなものである。 -Code Segment の処理内容の定義も C の関数同様に行うが、CbC にはループ制御構文が存在しないのでループ処理は自分自身への再帰的な継続を行うことで実現する。 - -現在の Code Segment から次の Code Segment への処理の移動は goto の後に Code Segment 名と引数を並べて記述するという構文を用いて行う。 -この goto による処理の遷移を継続と呼ぶ。 -C において関数呼び出しを繰り返し行う場合、呼び出された関数の引数の数だけスタックに値が積まれていくが、戻り値を持たない Code Segment ではスタックに値を積んでいく必要が無くスタックは変更されない。 -このようなスタックに値を積まない継続を軽量継続と呼ぶ。 -この軽量継続により並列化、ループ制御、関数コールとスタックの操作を意識した最適化がソースコードレベルで行えるようになる。 - -\section{プロトタイプ宣言の自動化} -Code Segment の処理単位は小さく、目的の計算を実現するためには多くの Code Segment を書く必要がある。 -Code Segment と同じ数だけプロトタイプ宣言を書く必要があり、好ましくない。 -また、tail call elimination を強制するためにはプロトタイプの宣言を正確に記述することを要求するためプログラマに対する負担が大きい。 -つまり、プロトタイプ宣言を自動的に行うようにすることで tail call elimnation の条件を安定して満たすことができ、プログラマの負担も減らすことができる。 - -プロトタイプ宣言の自動化は、パーサーが Code Segment への継続の解析を行なった際にプロトタイプ宣言の有無を確認し、存在しない場合に接続先の Code Segment のプロトタイプ宣言を生成するというようにして行う。 - -\section{Gear OS の構文サポート} -Gears OS では Context から必要なデータを取り出して処理を行う。 -しかし、Context を直接扱うのはセキュリティ的に好ましくない。 -そこで Context から必要なデータを取り出して Code Segment に接続する stub を定義する。 -stub は接続される Code Segment から推論することが可能である。 -また、Code Segment の遷移には Meta Code Segment を挟む。 -Meta Code Segment への接続も省略して記述できるようにする。 -省略形のソースコード:\ref{sample}から実際にコンパイルされるソースコード:\ref{sample_trans}へ変換される。 - -\newpage - -\lstinputlisting[label=sample, caption=省略形]{src/sample.c} -\lstinputlisting[label=sample_trans, caption=変換後]{src/sample_transform.c} diff -r 94c9c506bba9 -r 958634b9fa32 cerium.tex --- a/cerium.tex Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,468 +0,0 @@ -\chapter{並列プログラミングフレームワーク Cerium} -Cerium は PlayStation 3(PS3) に搭載された Cell Broadband Engine(Cell) 向けの Fine-Grain TaskManager として当研究室で設計・開発されたフレームワークである。 -本章では Cerium の実装について説明する。 - -\section{Cerium の概要} -Cerium は、TaskManager, SceneGraph, Rendering Engine の3つの要素から構成される。 -Cell 用のゲームフレームワークとして開発されたが、現在では Multi-Core CPU, GPU も計算資源として利用可能な汎用計算フレームワークとなっている。 - -\section{TaskManager} -TaskManager は、Task と呼ばれる分割されたプログラムを管理する。 -サブルーチンまたは関数が Task の単位となる。 -TaskManager が提供する API を表:\ref{table:TaskManager_api}に示す。 - -\begin{table}[htpb] - \begin{center} - \small - \begin{tabular}[htpb]{|c|l|} \hline - create\_task & Task の生成 \\ \hline - allocate & 環境のアライメントに考慮した allocator \\ \hline - set\_inData & Task への入力データのアドレスを追加 \\ \hline - set\_outData & Task からのデータ出力先アドレスを追加 \\ \hline - set\_param & Task のパラメータ(32 bits) \\ \hline - wait\_for & Task の依存関係を設定 \\ \hline - set\_cpu & Task を実行する Device の設定 \\ \hline - spawn & Task を Queue に登録 \\ \hline - iterate & データ並列で実行する Task として Queue に登録 \\ \hline - \end{tabular} - \caption{TaskManager API} - \label{table:TaskManager_api} - \end{center} -\end{table} - -TaskManager は ActiveTaskList と WaitTaskList の2種類の Queue を持つ。 -依存関係を解決する必要がある Task は WaitTaskList に入れられる。 -TaskManger によって依存関係が解決されると ActiveTaskList に移され、実行可能な状態となる。 -実行可能な状態となった Task は set\_cpu で指定された Device に対応した Scheduler に転送し実行される。 -図:\ref{fig:createTask}は Cerium が Task を生成/実行する場合のクラスの構成である。 - -\begin{figure}[!ht] - \begin{center} - \includegraphics[scale=0.6]{images/createTask.pdf} - \end{center} - \caption{TaskManager} - \label{fig:createTask} -\end{figure} - -\section{Cerium における Task} -Task は TaskManager の API を利用して生成する。 -生成された Task には以下の要素を設定することができる。 - -\begin{itemize} -\item input data \\ - set\_inData を用いて設定する Task が実行する処理に必要なデータの入力元となるアドレス。 - 関数を呼び出す際の引数に相当する。 - 汎用ポインタ(void* 型) なので Task 側で適切なキャストを行う必要がある。 -\item output data \\ - set\_outData を用いて設定する Task が処理したデータの出力先となるアドレス。 - 関数の戻り値に相当する。 -\item parameter \\ - set\_param を用いて設定するデータの処理に必要な実数値(index 等)。 -\item cpu type \\ - set\_cpu を用いて設定する Task が実行される Device の組み合わせ。 - Cell, Multi-Core CPU, GPU またはこれらの組み合わせを指定することができる。 -\item dependency \\ - wait\_for を用いて設定する他の Task との依存関係。 - 依存関係が解決された Task は実行可能な状態となる。 -\end{itemize} - -ソースコード:\ref{inittwice_cerium} に Task を生成する例題を示す。 - -input data として int 型の配列を受け取り、各要素を2倍にして output data に格納する twice という例題である。 -CPU を用いてデータ並列で実行する Task を生成している。 -set\_cpu で GPU を指定することで GPU を用いて実行される。 - -\lstinputlisting[label=inittwice_cerium, caption=Task の生成]{src/init_twice_cerium.cc} - -CPU 上で実行される Task, GPU 上で実行される kernel はソースコード:\ref{twice_task_cerium}, ソースコード\ref{twice_task_cuda} の通りになる。 - -Task には実行時に必要なデータが格納されている SchedTask, 設定した Input/Output Data が格納されている Buffer が渡される。 - -\lstinputlisting[label=twice_task_cerium, caption=実行される Task]{src/twice_cerium.cc} -\lstinputlisting[label=twice_task_cuda, caption=実行される kernel]{src/twice_cuda.cu} - -\section{Task のパイプライン実行} -Cell(図:\ref{fig:cellarch})や GPU(図:\ref{fig:gpuarch})のように異なるメモリ空間を持つ Device を計算資源として利用するにはデータの転送が必要になる。 -このデータ転送がボトルネックとなり、並列度が低下してしまう。 -転送処理をオーバーラップし、並列度を維持するために Cerium では Task のパイプライン実行をサポートしている。 - -\begin{figure}[htpd] - \begin{minipage}[t]{0.5\hsize} - \begin{center} - \includegraphics[scale=0.5]{images/cell_arch.pdf} - \end{center} - \caption{Cell Architecture} - \label{fig:cellarch} - \end{minipage} - \begin{minipage}[t]{0.5\hsize} - \begin{center} - \includegraphics[scale=0.5]{images/gpu_arch.pdf} - \end{center} - \caption{GPU Architecture} - \label{fig:gpuarch} - \end{minipage} -\end{figure} - -TaskManager である程度の Task をまとめた TaskList を生成し、実行する Device に対応した Scheduler に転送する。 -受け取った TaskList に沿ってパイプラインを組み Task を実行していく。 -TaskList でまとめられている Task は依存関係が解決されているので自由にパイプラインを組むことが可能である。 -実行完了は TaskList 毎ではなく、Task 毎に通知される。 -図:\ref{fig:scheduler}は TaskList を受け取り、Task をパイプラインで処理していく様子である。 - -\newpage - -\begin{figure}[ht] - \begin{center} - \includegraphics[scale=0.6]{images/scheduler.pdf} - \end{center} - \caption{Scheduler} - \label{fig:scheduler} -\end{figure} - -\section{マルチコアへの対応} -Cell には MailBox という機能がある。 -MailBox を用いることで双方向のデータの受け渡しが可能になる。 -FIFO キュー構造を持つ MailBox に対応させる形で Synchronized Queue 用いて Multi Core CPU 用の TaskManager に MailBox を移植した。 -Synchronized Queue は Queue を操作しているスレッドが常に1つになるようにバイナリセマフォを用いて制御する。 - -Cell では MailBox 以外に DMA 転送を使用してデータの受け渡しすることができる。 -DMA 転送は CPU を介さずに周辺装置とメモリ間でデータ転送を行う方式である。 -Cerium では DMA 転送を用いて Cell で実行することが可能である。 -Multi Core CPU 上で実行する場合、メモリ空間を共有しているので DMA 転送を行なっている部分をポインタ渡しを行うように修正し、直接アクセスさせることでデータ転送の速度の向上が見込める。 - -\newpage - -\section{データ並列による実行} -並列処理の方法としてタスク並列とデータ並列の2つがある。 - -タスク並列は Task 毎にデータを準備し、管理スレッドが個別に生成した Task を CPU に割り当てることで並列処理する方法である。 -異なる処理を同時に実行することができるというメリットがあるが、データ群の各要素に対して同じ処理をしたいときタスク並列では要素毎に同じ処理をする Task を生成する必要があり、ほとんど同一な大量の Task によってメモリを圧迫する場合がある。 -また、大量な Task の生成自体が大きなオーバーヘッドになる。 - -データ並列はあるデータ群を大量な Task で共有し、Task 実行時に処理範囲を計算し、その範囲にのみ処理を行うことで並列処理する方法である。 -実行スレッドで Task の生成・実行が行われるので、メモリの圧迫や Task 生成によるオーバーヘッドを抑えられる。 -並列化部分が全て同じ処理である場合、データ並列による実行のほうがタスク並列より有効である。 - -いままで Cerium における並列処理はタスク並列だったが、データ並列のよる実行もサポートした。 - -データ並列による実行では処理範囲を決定するための情報として index が必要になる。 -CPU による実行では SchedTask を参照(ソースコード:\ref{twice_task_cerium} 23行目)、GPU による実行では組み込み変数を参照(ソースコード:\ref{twice_task_cuda} 11行目)することで index を取得することができる。 - -データの長さが10、CPU の数が4でデータ並列による実行をした場合の index の割当は表\ref{table:dataparallel_index} の通りになる。 - -\begin{table}[htpb] - \begin{center} - \small - \begin{tabular}[htpb]{|c||c|c|c|c|} - \hline - stage & CPU0 & CPU1 & CPU2 & CPU3 \\ - \hline - \hline - 1 & 0 & 1 & 2 & 3 \\ - \hline - 2 & 4 & 5 & 6 & 7 \\ - \hline - 3 & 8 & 9 & & \\ - \hline - \end{tabular} - \caption{index の割り当て} - \label{table:dataparallel_index} - \end{center} -\end{table} - -\newpage - -\section{GPGPU への対応} -GPU の演算資源を Cerium から利用するために OpenCL, CUDA を用いた GpuScheduler, CudaScheduler を実装した。 -OpenCL, CUDA 単体を用いて GPGPU を行う場合、依存関係を記述する必要がある -しかし、Cerium には依存関係を解決する TaskManager があるので GpuScheduler, CudaScheduler は受け取った TaskList を元に GPU を制御して GPGPU を行えばよい。 - -GPU はメモリ空間が異なる(図\ref{fig:gpuarch})のでデータ転送が大きなオーバーヘッドになる。 -なので、kernel 実行中にデータ転送を行うなどしてデータ転送をオーバーラップする必要がある。 -CUDA で GPU を制御するには同期命令を使う方法と非同期命令を使う方法があるが、同期命令ではデータ転送をオーバーラップすることが出来ないので非同期命令を利用して GPU を制御する。 -非同期命令は Stream に発行することで利用することができる。 -Stream に発行された命令は発行された順序で実行される。 -非同期命令と Stream を利用してデータ転送をオーバラップするには複数の Stream を準備して、Host から Device への転送・kernel の実行・Device から Host への転送を1セットとして各 Stream に発行することで実現できる。 -同期命令を使う場合と非同期命令を使う場合の実行の様子は図:\ref{fig:stream}の通りである。 - -\begin{figure}[ht] - \begin{center} - \includegraphics[scale=0.45]{images/stream.pdf} - \end{center} - \caption{Overlap Data Transfer} - \label{fig:stream} -\end{figure} - -\newpage - -\section{Cerium の評価} -Bitonic Sort, Word Count, Fast Fourier Transform(FFT) の3つの例題を用いて Cerium を評価する。 - -測定環境は表:\ref{table:firefly}、測定に用いる GPU は表\ref{table:k5000}の通りである。 - -\begin{table}[htpb] - \begin{center} - \small - \begin{tabular}[htpb]{|c||c|} - \hline - Model & MacPro Mid 2010 \\ - \hline - OS & Mac OS X 10.10.\\ - \hline - Memory & 16GB \\ - \hline - CPU & 2 x 6-Core Intel Xeon 2.66GHz \\ - \hline - GPU & NVIDIA Quadro K5000 \\ - \hline - \end{tabular} - \caption{測定環境} - \label{table:firefly} - \end{center} -\end{table} - -\begin{table}[htpb] - \begin{center} - \small - \begin{tabular}[htpb]{|c||c|} - \hline - Cores & 1536 \\ - \hline - Clock Speed & 706MHz \\ - \hline - Memory Size & 4GB GDDR5 \\ - \hline - Memory Bandwidth & 173 GB/s \\ - \hline - \end{tabular} - \caption{Quadro K5000} - \label{table:k5000} - \end{center} -\end{table} - -\subsection{Bitonic Sort} -Bitonic Sort は並列処理に向いたソートアルゴリズムである。 -代表的なソートアルゴリズムである Quick Sort も並列処理することが、Quick Sort はソートの過程で並列度が変動するので自明な台数効果が出づらい。 -一方、Bitonic Sort は最初から最後まで並列度が変わらずに並列処理による恩恵を得やすい。 -図:\ref{fig:bitonic}は要素数8のデータに対する Bitonic Sort のソーティングネットワークである。 - -\newpage - -\begin{figure}[!h] - \begin{center} - \includegraphics[scale=0.5]{images/bitonic.pdf} - \end{center} - \caption{Sorting Network : bitonic sort} - \label{fig:bitonic} -\end{figure} - -Bitonic Sort の並列処理に用いられる Task は2点間のの比較・交換を行うだけの小さい処理なので、1コア当たりのクロック数よりもコアの数が結果に与える影響が大きいと考えられる。 -よって、通信時間を考慮しなければ CPU よりコア数が多い GPU が有利となる。 - -Cerium を用いて Bitonic Sort を実装し、要素数$2^{20}$のデータに対してコア数・プロセッサの種類を変更して測定を行なった結果は表\ref{table:bitonic}、図\ref{fig:bitonic_box}の通りである。 - -\begin{table}[!h] - \begin{center} - \small - \begin{tabular}[htpb]{|c||c|} - \hline - Processor & Time(ms) \\ - \hline - \hline - 1 CPU & 6143 \\ - \hline - 2 CPUs & 4633 \\ - \hline - 4 CPUs & 2557 \\ - \hline - 8 CPUs & 1630 \\ - \hline - 12 CPUs & 1318 \\ - \hline - GPU & 155 \\ - \hline - \end{tabular} - \caption{要素数$2^{20}$に対するソート} - \label{table:bitonic} - \end{center} -\end{table} - -\newpage - -\begin{figure}[!h] - \begin{center} - \includegraphics[scale=1.0]{images/bitonic_sort_03.pdf} - \end{center} - \caption{要素数$2^{20}$に対するソート} - \label{fig:bitonic_box} -\end{figure} - -1 CPU と 12 CPU では約4.6倍の速度向上が見られた。 -これは Task の粒度が小さいため1コア当たりのクロック数の高さが活かしづらく、並列化によるオーバーヘッドが結果に影響を与えたと考えられる。 -CPU を用いた並列化には Task の粒度をある程度大きくし1コア当たりの仕事量を増やして CPU のクロック数の高さを活かすことが重要であることがわかる。 - -12 CPU と GPU では約8.5倍の速度向上が見られた。 -GPU の特徴であるコア数の多さによって CPU より高い並列度を発揮した結果だと考えられる。 -GPU の場合はその超並列性を活かすため Task を細かく分割することが重要であることがわかる。 - -測定結果から CPU と GPU で並列化の方法を変更する必要があることがわかった。 -Cerium を用いてヘテロジニアス環境で並列実行する場合、混在しているプロセッサの特徴に合わせたスケジューリングを行い並列実行するように Scheduler を改良する必要がある。 - -次に要素数も変更して測定を行なった。 -結果は図:\ref{fig:bitonic_result_2}、図:\ref{fig:bitonic_result_1}の通りである。 - -\newpage - -\begin{figure}[!h] - \begin{center} - \includegraphics[scale=1.0]{images/bitonic_sort_02.pdf} - \end{center} - \caption{Bitonic Sort(from $2^{14}$ to $2^{17}$)} - \label{fig:bitonic_result_2} -\end{figure} - -\begin{figure}[!h] - \begin{center} - \includegraphics[scale=1.0]{images/bitonic_sort_01.pdf} - \end{center} - \caption{Bitonic Sort(from $2^{14}$ to $2^{20}$)} - \label{fig:bitonic_result_1} -\end{figure} - -\newpage - -GPGPU では通信時間を考慮する必要がある。 -図:\ref{fig:bitonic_result_2}を見ると要素数$2^{14}$のソートでは GPU が一番遅い。 -これはソート処理の時間より通信時間が大きいことが原因であると考えられる。 -通信時間を含めた処理時間が GPU が CPU を上回るのは要素数$2^{17}$を超えてからである。 - -\subsection{Word Count} -並列処理を行う際に Task を大量に生成する場合がある。 -一度に大量の Task を生成してしまうと Task がメモリを圧迫して処理速度が著しく低下する。 -改善策としては Task の生成と実行を平行して行えばよい。 -Cerium では Task を生成する Task を記述することが可能なので Task の生成と実行を平行して行うことができる。 - -Word Count を並列処理する場合、与えられたテキストを分割して、分割されたデータごとに並列処理を行う。 -分割したデータの数だけ Task が必要なのでテキストサイズによっては一度に Task を生成するとメモリを圧迫する可能性がある。 -よって、Task を生成する Task が必要になる。 -Word Count の処理の流れは図\ref{fig:wordcount}の通りである。 - -\begin{figure}[!h] - \begin{center} - \includegraphics[scale=0.7]{images/wordcount.pdf} - \end{center} - \caption{Word Count の流れ} - \label{fig:wordcount} -\end{figure} - -\newpage - -Cerium が複雑な並列処理を記述可能でその上、高い並列度を保てること示すため Cerium 上に Word Count を実装し、100MB のテキストデータに対して測定を行なった。 -結果は表:\ref{table:word_count}, 図:\ref{fig:word_count}の通りである。 - -\begin{table}[!h] - \begin{center} - \small - \begin{tabular}[htpb]{|c||c|} - \hline - Processor & Time(ms) \\ - \hline - \hline - 1 CPU & 716 \\ - \hline - 2 CPUs & 373 \\ - \hline - 4 CPUs & 197 \\ - \hline - 8 CPUs & 105 \\ - \hline - 12 CPUs & 87 \\ - \hline - GPU & 9899 \\ - \hline - GPU(Data Parallel) & 514 \\ - \hline - \end{tabular} - \caption{100MB のテキストデータに対する WordCount} - \label{table:word_count} - \end{center} -\end{table} - -\begin{figure}[!h] - \begin{center} - \includegraphics[scale=0.8]{images/word_count.pdf} - \end{center} - \caption{100MB のテキストデータに対する WordCount} - \label{fig:word_count} -\end{figure} - -1 CPU と 12 CPU では約8.2倍の速度向上が見られた。 -複雑な並列処理でも高い並列度が保てていることがわかる。 - -GPU を用いたタスク並列による実行は実用に耐えない速度である。 -これはタスク並列による実行では小さなデータを十数回 GPU に転送する必要があるからで、GPU で高速に処理するためにはデータ転送を如何にして抑えるかが重要かわかる。 -一方、GPU を用いたデータ並列による実行速度は 1 CPU の約1.4倍となった。 -元々 WordCount は GPU に不向きな例題ではあるが、データ並列による実行ではデータ転送の回数を抑えることができるので GPU でもある程度の速度を出せることがわかる。 - -\subsection{FFT} -FFT は信号処理や画像処理、大規模シミュレーションに至るまで幅広い分野で活用されている計算である。 -バタフライ演算などの計算の性質上、大量の演算資源を持つ GPU と相性が良い。 -Cerium に実装した GPU 実行機構の評価を行うために適切な例題であると考えられる。 - -Cerium 上に FFT を実装し、測定を行なった結果は表:\ref{table:fft}, 図:\ref{fig:fft}の通りである。 -測定には 1MB の画像データを用いた。 - -\begin{table}[!h] - \begin{center} - \small - \begin{tabular}[htpb]{|c||c|} - \hline - Processor & Time(ms) \\ - \hline - \hline - 1 CPU & 1958 \\ - \hline - 2 CPUs & 1174 \\ - \hline - 4 CPUs & 711 \\ - \hline - 8 CPUs & 451 \\ - \hline - 12 CPUs & 373 \\ - \hline - GPU & 418 \\ - \hline - \end{tabular} - \caption{1MB の画像データに対する FFT} - \label{table:fft} - \end{center} -\end{table} - -\begin{figure}[!h] - \begin{center} - \includegraphics[scale=0.8]{images/fft.pdf} - \end{center} - \caption{1MB の画像データに対する FFT} - \label{fig:fft} -\end{figure} - -1 CPU に対して 12 CPU では約5.2倍、GPU では約4.7倍の速度向上が見られる。 -ある程度の速度向上が見られたが、CPU に劣る結果となった。 -データ転送の最適化が十分に成されていない可能性があるので、GPU の実行機構を見直す必要がある。 - -\section{Cerium の問題点} -Cerium では Task 間の依存関係を記述することで並列処理を実現する。 -しかし、本来 Task はデータが揃えば実行可能になるものである。 -Task 間の依存関係だけでは待っている Task が不正な処理を行いデータがおかしくなっても Task の終了は通知され、そのまま処理が続行されてしまう。 -その場合、どこでデータがおかしくなったのか特定するのは難しくデバッグに多くの時間が取られてしまう。 -また、Cerium の Task は汎用ポインタでデータを受け取るので型の情報がない。 -型の情報がないので Task を実行するまで正しい型かどうか判断することが出来ない。 -不正な型でも強制的に型変換され実行されるのでデータの構造を破壊する可能性がある。 -型システムによってプログラムの正しさを保証することも出来ず、バグが入り込む原因になる。 - -Cerium の Allocator は Thread 間で共有されている。 -共有されているので、ある Thread がメモリを確保しようとすると他の Thread は終了を待つ必要がある -その間メモリを確保することができないので処理が止まり、なにもしない時間が生まれてしまう。 -これが並列度の低下に繋がり、処理速度が落ちる原因になる。 - -今回設計した Gears OS はこれらの問題を解決することを目的としている。 diff -r 94c9c506bba9 -r 958634b9fa32 comparison.tex --- a/comparison.tex Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -\chapter{比較} -本章では今回設計・実装した Gears OS と既存の並列フレームワークとの比較を行う。 -また、Gears OS は以下のような性質を有している。 - -\begin{itemize} -\item リソース管理 \\ - Context 毎に異なるメモリ空間を持ち、それを管理する。 - Meta Code Gear, Meta Data Gear を用いてネットワーク管理、並行制御等を行う。 -\item 処理の効率化 \\ - 依存関係のない Code Gear は並列実行することが可能である。 - また、Code Gear 自体が処理の最小単位となっており Code Gear を利用してプログラムを記述するとプログラム全体の並列度を高めることに繋がる。 -\item プロセッサ利用の抽象化 \\ - Multi Core CPU, GPU を同等の実行機構で実行可能である。 -\end{itemize} - -これらの性質を有する Gears OS はオペレーティングシステムであると言えるので既存の OS との比較も行う。 - -\section{Cerium} -Cerium ではサブルーチンまたは関数を Task の単位としてプログラムを分割する。 -Task には依存関係のある Task を設定することができ、TaskManager が依存関係を解決することで並列処理を実現している。 -実行に必要なデータのアドレスを Task の生成時に設定することで Task はデータにアクセスすることが可能になる。 -データは汎用ポインタとして渡されるので Task 側で型変換して扱うことになる。 -ここで問題となるのが Task 間だけにしか依存関係がないことと Task 実行時にデータの型情報がないことである。 - -本来 Task は必要なデータが揃ったときに実行されるべきものである。 -不正なデータが渡された場合、実行せずに不正なデータがであることを実行者に伝えることが望ましい。 -Cerium では Task の終了のみに着目して依存関係を解決するので途中で不正なデータになっても処理を続けてしまい不正な処理を特定することが難しい。 - -複雑なデータ構造を持つ場合、間違った型変換でデータの構造を破壊する可能性がある。 -型システムは正しい型に対して正しい処理が行われることを前提にしてプログラムの正しさを保証する。 -型情報がない Cerium では型システムによる安全性を保証できず、型に基づくバグが入り込む可能性がある。 - -Gears OS では Code Gear, Data Gear という単位でプログラムを分割する。 -Code Gear は処理の単位、Data Gear はデータそのものである。 -Code Gear には Input/Output Data Gear が設定されており、Input と Output の関係が Code Gear 間の依存関係となる。 -Gears OS の TaskManager は Data Gear が格納されている Persistent Data Tree を監視して依存関係を解決する。 -Data Gear は Context に構造体として定義されており、型情報を持つ。 - -\section{OpenCL/CUDA} -OpenCL/CUDA では並列処理に用いる関数を kernel として定義する。 -OpenCL では CommandQueue, CUDA では Stream という命令キューに命令を発行することで GPU を利用することができる。 -命令キューは発行された順番通りに命令が実行されることが保証されている。 -複数の命令キューを準備して、各命令キューに命令を発行することで命令を並列に実行することができる。 -命令キュー単位で依存関係を設定することができる。 -つまり、命令キューに入っている最後の命令次第でデータを待っているのか kernel の実行を待っているのか変わるので依存関係の記述が複雑になる。 -データは kernel の引数の定義に型変換され渡される。 -データ転送の際には型情報が落として渡す必要があり、型を意識したプログラミングが必要になる。 - -一方、Gears OS ではデータによって依存関係が決定する。 -また、データを Data Segment という単位で分割して管理しており型情報を保ったままデータの受け渡しを行うことができる。 - -\section{OpenMP} -OpenMP ではループ制御構文の前にアノテーションを付ける(ソースコード:\ref{openmp})ことでコンパイラが解釈し、スレッド処理を行うように変換して並列処理を行う。 - -\lstinputlisting[label=openmp, caption=OpenMP]{src/openmp.c} - -他の並列化手法に比べて既存のコードに対する変更が少なくて済む。 -しかし、この方法ではプログラム全体の並列度が上がらずアムダールの法則により性能向上が頭打ちになる。 - -一方、Gears OS では初めから Code Gear, Data Gear という単位でプログラムを分割して記述するのでプログラム全体の並列度を高めることができる。 - -\section{従来の OS} -従来の OS が行ってきたネットワーク管理、メモリ管理、平行制御などのメタな部分を Gears OS では Meta Code/Data Gear として定義する。 -通常の Code Gear から必要な制御を推論し、Meta Code Gear を接続することで従来の OS が行ってきた制御を提供する。 -このメタ計算は関数型言語で用いられる Monad に基づいて実現する。 diff -r 94c9c506bba9 -r 958634b9fa32 conclusion.tex --- a/conclusion.tex Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -\chapter{結論} -先行研究である Cerium の開発を通して得られた知見を元に Code Segment, Data Segment によって構成される Gears OS の設計・実装を行なった。 -実装には本研究室で開発している CbC(Continuation based C)を用いた。 - -Code Segment は処理、Data Segment はデータの単位である。 -Code Segment は戻り値を持たないので、関数呼び出しのようにスタックに値を積む必要がなくスタックは変更されない。 -このようなスタックに積まない継続を軽量継続と呼び、並列化、ループ制御、関数コールとスタックの操作を意識した最適化がソースコードレベルで行える。 -プログラムを Code/Data Segment で分割して記述することで並列度を高めることができる。 - -Gears OS を Code/Data Segment の考えに基づいて設計を行なった。 -Gears OS には Code/Data Segment と同等なものとして Code/Data Gear を定義した。 -Code Gear はプログラムの処理そのもので、Data Gear は int や文字列などの Primitive Data Type を複数持っている構造体として表現する。 -Code Gear は任意の数の Data Gear を参照し、任意の数の Data Gear に書き込みを行う。 -Gear の特徴として処理やデータ構造が Code/Data Gear に閉じている。 -これにより実行時間、メモリ使用量などを予測可能なものにする。 - -Gears OS の基本的な機能として Allocator, TaskQueue, Persistent Data Tree, Worker の実装を行なった。 -Gears OS では Context に情報が格納される。 -格納される情報には接続可能な Code/Data Gear のリスト、TaskQueue へのポインタ、Persistent Data Tree へのポインタ、Temporal Data Gear を確保するためのメモリ空間などがある。 -Context はスレッドごとに存在し、それぞれが異なる Context を参照している。 -Allocator は Context が持っているメモリ空間のアドレスを変更し、Temporal Data Gear の確保を行う。 -確保される Data Gear は処理後には必要なくなるものなのでリニアに確保するだけの単純な処理である。 -TaskQueue は並列処理される Task を管理する。 -Gears OS で Task は実行する Code Gear と実行に必要な Data Gear の組で表現する。 -TaskQueue はすべての Context で共有され、マルチスレッドでデータの一貫性を保つために Compare and Swap(CAS) を用いた。 -Persistent Data Tree は Data Gear を管理する。 -非破壊木構造で構成され、Red-Black Tree アルゴリズムによって平衡性が保たれる。 -Persistent Data Tree はすべての Context で共有される。 -非破壊木構造なので読み書きを平行して行うことができる。 -Gears OS では Persistent Data Tree への書き込みのみで相互作用を発生させ目的の処理を達成する。 -Worker は Task を並列処理する。 -個別の Context を参照しているので、メモリ空間が独立しておりメモリを確保する処理で他の Worker を止めることはない。 -CAS を用いて TaskQueue にアクセスし、Task を取得する。 -取得した Task の情報を元に Persistent Data Tree から Data Gear を取得し、Code Gear を実行する。 -また、Gears OS 自体が Code/Data Segment を用いたプログラミングの指針となるように実装を行った。 - -Gears OS を用いて簡単な例題を実装し、評価を行った。 -与えられた要素を2倍にする Twice という依存関係がない並列処理の例題を Gears OS 上に実装した。 -1 CPU と 12 CPU で約11.8倍の速度向上を確認し、Gears OS を用いることで十分な並列処理性能を引き出せることを示した。 - -\section{今後の課題} -例題として Twice を用いて並列処理の性能を示したが、Twice は依存関係がない並列処理である。 -本来、並列処理には依存関係が存在する。 -複雑な並列処理を行えるようにするために依存関係を解決する TaskManager の実装が必要である。 - -Gears OS 上でマルチコア CPU を用いた実行を可能にしたが、GPU などの他のプロセッサを演算に用いることができない。 -Code/Data Segment を用いて各プロセッサのアーキテクチャにマッピングした実行機構を実装し、演算に利用できるようにする必要がある。 - -型情報を残すために Data Segment を定義しているが Data Segment の型情報を検査していない。 -プログラムの正しさを保証するために Data Segment の型情報を検査する型システムを Gears OS 上に実装する必要がある。 diff -r 94c9c506bba9 -r 958634b9fa32 evaluation.tex --- a/evaluation.tex Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ -\chapter{Gears OS の評価} -現在の Gears OS には非破壊木構造を Red-Black Tree アルゴリズムに基づいて構築する Persistent Data Tree, CAS を用いてデータの一貫性を保証する TaskQueue, TaskQueue から Task を取得し並列に実行する Worker が実装されている。 -つまり、依存関係のない処理ならば並列処理することが可能である。 - -本章では依存関係のない簡単な例題を用いて Gears OS の評価を行う。 - -\section{Twice} -Twice は与えられた整数配列を2倍にする例題である。 - -以下の流れで処理は行われる。 - -\begin{itemize} -\item 配列サイズを元に index, alignment, 配列へのポインタを持つ Data Gear に分割。 -\item Data Gear を Persistent Data Tree に挿入。 -\item 実行する Code Gear(Twice) と実行に必要な Data Gear への key を持つ Task を生成。 -\item 生成した Task を TaskQueue に挿入。 -\item Worker の起動。 -\item Worker が TaskQueue から Task を取得。 -\item 取得した Task を元に必要な Data Gear を Persistent Data Tree から取得。 -\item 並列の処理される Code Gear(Twice) を実行。 -\end{itemize} - -\newpage - -Gears OS 上に Twice を実装し、要素数$2^{17}$*1000 のデータを640個の Task に分割してコア数を変更して測定を行なった。 -結果は表:\ref{table:twice}, 図:\ref{fig:twice}の通りである。 - -\begin{table}[!h] - \begin{center} - \small - \begin{tabular}[htpb]{|c||c|c|c|} - \hline - Processor & Time(ms) \\ - \hline - \hline - 1 CPU & 1315 \\ - \hline - 2 CPUs & 689 \\ - \hline - 4 CPUs & 366 \\ - \hline - 8 CPUs & 189 \\ - \hline - 12 CPUs & 111 \\ - \hline - \end{tabular} - \caption{要素数$2^{17}$*1000 のデータに対する Twice} - \label{table:twice} - \end{center} -\end{table} - -\begin{figure}[!h] - \begin{center} - \includegraphics[scale=0.9]{images/twice_640.pdf} - \end{center} - \caption{要素数$2^{17}$*1000 のデータに対する Twice} - \label{fig:twice} -\end{figure} - -1 CPU と 12 CPU では約11.8倍の速度向上が見られた。 -十分な台数効果が出ていることがわかる。 -しかし、タスクの粒度が小さすぎると CAS の失敗が多くなり性能が出ないことがある。 -Code Gear には実行時間を予測可能なものにするという特徴があるので、その性質を利用してタスクが最適な粒度なのか検査する機能が必要になると考えられる。 - -今回、例題に用いた Twice は依存関係のない並列処理である。 -本来、並列処理には複雑な依存関係が存在するのが一般的である。 -並列フレームワークには複雑な依存関係を解決しながら十分な並列度を保てることが必須なので依存関係を解決するための TaskManager の実装が必要である。 diff -r 94c9c506bba9 -r 958634b9fa32 gearsos.tex --- a/gearsos.tex Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,239 +0,0 @@ -\chapter{Gears OS} -Cerium と Alice の開発を通して得られた知見から並列分散処理には Code の分割だけではなく Data の分割も必要であることがわかった。 -当研究室で開発している Code Segment を基本的な処理単位とするプログラミング言語 Continuation based C(CbC) を用いて Data Segment を定義し、Gears OS の設計と基本的な機能の実装を行なった。 - -本章では Gears OS の設計と実装した基本的な機能について説明する。 -\section{Code Gear と Data Gear} -Gears OS ではプログラムの単位として Gear を用いる。 -Gear は並列実行の単位、データの分割、Gear 間の接続等になる。 - -Code Gear はプログラムの処理そのものになる。 -これは OpenCL/CUDA の kernel, Cerium の Task に相当する。 -Code Gear は任意の数の Data Gear を参照し、処理が完了すると任意の数の Data Gear に書き込む。 -Code Gear は接続された Data Gear 以外にアクセスできない。 -Code Gear から次の Code Gear への処理の移動は goto の後に Code Gear の名前と引数を指定することで実現できる。 -Code Gear は Code Segment そのものである。 - -Data Gear はデータそのものを表す。 -int や文字列などの Primitive Data Type を持っている。 - -Gear の特徴として処理やデータの構造が Code Gear, Data Gear に閉じていることにある。 -これにより実行時間、メモリ使用量などを予測可能なものにすることが可能になる。 - -\newpage - -\section{Gears OS の構成} -Gears OS は以下の要素で構成される。 -\begin{itemize} -\item Context \\ - 接続可能な Code/Data Gear のリスト、TaskQueue へのポインタ、Persistent Data Tree へのポインタ、Temporal Data Gear のためのメモリ空間等を持っており、Context を通してアクセスすることができる。 - メインとなる Context と Worker 用の Context があり、TaskQueue と Persistent Data Tree は共有される。 - Temporal Data Gear のためのメモリ空間は Context 毎に異なり、互いに干渉することはできない。 - Persistent Data Tree への書き込みのみで相互作用を発生させ目的の処理を達成する。 -\item TaskQueue \\ - ActiveTaskQueue と WaitTaskQueue の2つの TaskQueue を持つ。 - 先頭と末尾の Element へのポインタを持つ Queue を表す Data Gear である。 - Element は Task を表す Data Gear へのポインタと次の Element へのポインタを持っている。 - Compare and Swap(CAS) を使ってアクセスすることでスレッドセーフな Queue として利用することが可能になる。 -\item TaskManager \\ - Task には Input Data Gear, Output Data Gear が存在する。 - Input/Output Data Gear から依存関係を決定し、TaskManager が解決する。 - 依存関係が解決された Task は WaitTaskQueue から ActiveTaskQueue に移される。 - TaskManager はメインとなる Context を参照する。 -\item Persistent Data Tree \\ - 非破壊木構造で構成された Lock-free なデータストアである。 - Red-Black Tree として構成することで最悪な場合の挿入・削除・検索の計算量を保証する。 -\item Worker \\ - TaskQueue から Task の取得・実行を行う。 - Task の処理に必要なデータは Persistent Data Tree から取得する。 - 処理後、必要なデータを Persistent Data Tree に書き出して再び Task の取得・実行を行う。 -\end{itemize} - -図:\ref{fig:gearsos} は Gears OS の構成図である。 - -\newpage - -\begin{figure}[!ht] - \begin{center} - \includegraphics[scale=0.35]{./images/gearsos.pdf} - \end{center} - \caption{Gears OS} - \label{fig:gearsos} -\end{figure} - -\section{Allocator} -Gears OS では Context の生成時にある程度の大きさのメモリ領域を確保する。 -Context には確保したメモリ領域を指す情報が格納される。 -このメモリ領域を利用して Task の実行に必要な Data Gear を生成する。 - -Context の定義と生成はソースコード:\ref{context},ソースコード:\ref{initcontext} の通りである。 - -\lstinputlisting[label=context, caption=Context]{src/context.h} -\lstinputlisting[label=initcontext, caption=initContext]{src/initContext.c} - -\newpage - -Context はヒープサイズを示す heapLimit, ヒープの初期位置を示す heapStart, ヒープの現在位置を示す heap を持っている。 -必要な Data Gear のサイズに応じて heap の位置を動かすことで Allocation を実現する。 - -allocate を行うには allocate に必要な Data Gear に情報を書き込む必要がある。 -この Data Gear は Context 生成時に生成する必要があり、ソースコード:\ref{context} 14行目の Allocate がそれに当たる。 -UniqueData で定義した Data Gear は Context と同時に生成される。 - -Temporal Data Gear にある Data Gear は基本的には破棄可能なものなので heapLimit を超えたら heap を heapStart の位置に戻し、ヒープ領域を再利用する(図:\ref{fig:allocation})。 -必要な Data Gear は Persistent Data Tree に書き出すことで他の Worker からアクセスすることが可能になる。 - -\begin{figure}[!ht] - \begin{center} - \includegraphics[scale=0.4]{./images/allocation.pdf} - \end{center} - \caption{Allocation} - \label{fig:allocation} -\end{figure} - -実際に allocate を行う Code Gear はソースコード:\ref{allocate} の通りである。 - -Context 生成時に実行可能な Code Gear と名前が対応付けられる。 -その対応付けられた Code Gear が Context の code に格納される。 -この code を介して遷移先の Code Gear を決定する。 - -Code Gear には Context が接続されるが Context を介して Data Gear にアクセスすることはない。 -stub を介して間接的に必要な Data Gear にアクセスする。 - -\lstinputlisting[label=allocate, caption=allocate]{src/allocate.c} - -\section{Synchronized Queue} -Gears OS における Synchronized Queue は TaskQueue として利用される。 -メインとなる Context と Worker 用の Context で共有され、Woker が TaskQueue から Task を取得し実行することで並列処理を実現する。 - -Gears OS での Queue を Queue を表す Data Gear と Queue の構成要素である Element によって表現する。 -Queue を表す Data Gear には先頭の Element を指す first, 末尾の Element を指す last, Element の個数を示す count が格納される。 -Element を表す Data Gear には Task を示す task, 次の Element を示す next が格納される。 - -ソースコード:\ref{queue} は Context の定義(ソースコード:\ref{context})に追加する Queue と Element の定義である。 - -\lstinputlisting[label=queue, caption=Context: queue]{src/queue.h} - -新たに Queue に対する操作を行う Code Gear の名前を追加し、UniqueData には Queue の情報が入る Queue(ソースコード:\ref{queue} 9行目) と Enqueue に必要な情報を書き込む Element(ソースコード:\ref{queue} 10行目) を定義している。 - -通常の Enqueue, Dequeue を行う Code Gear はソースコード:\ref{enqueue} と ソースコード:\ref{dequeue} の通りである。 - -\lstinputlisting[label=enqueue, caption=Enqueue]{src/enqueue.c} -\lstinputlisting[label=dequeue, caption=Dequeue]{src/dequeue.c} - -ソースコード:\ref{enqueue} とソースコード:\ref{dequeue} はシングルスレッドでは正常に動作するが、マルチスレッドでは期待した動作を達成できない可能性がある。 -並列実行すると同じメモリ位置にアクセスされる可能性があり、データの一貫性が保証できないからである。 -データの一貫性を並列実行時でも保証するために Compare and Swap(CAS) を利用して Queue の操作を行うように変更する必要がある。 -CAS はデータの比較・置換をアトミックに行う命令である。 -メモリからのデータの読み出し、変更、メモリへのデータの書き出しという一連の処理を、CAS を利用することで処理の間に他のスレッドがメモリに変更を加えていないということを保証することができる。 -CAS に失敗した場合は置換は行わず、再びデータの読み出しから始める。 - -ソースコード:\ref{enqueue} 44行目の putQueue3, 51行目の putQueue4, ソースコード:\ref{dequeue} 2行目の getQueue が実際に Queue を操作している Code Gear である。 -これらの Code Gear から CAS を利用したソースコード:\ref{sync_enqueue}, ソースコード:\ref{sync_dequeue} の Code Gear に接続を変更することでスレッドセーフな Queue として扱うことが可能になる。 -Code Gear は Gears OS における最小の処理単位となっており、接続を変更することでプログラムの振る舞いを柔軟に変更することができる。 - -\lstinputlisting[label=sync_enqueue, caption=Enqueue using CAS]{src/sync_enqueue.c} -\lstinputlisting[label=sync_dequeue, caption=Dequeue using CAS]{src/sync_dequeue.c} - -\section{Persistent Data Tree} -Gears OS では Persistent Data Gear の管理に木構造を用いる。 -この木構造は非破壊で構成される。 -非破壊木構造とは一度構築した木構造を破壊することなく新しい木構造を構築することで、木構造を編集する方法である。 -非破壊木構造は木構造を書き換えることなく編集を行う(図:\ref{fig:non-destructive_tree})ため、読み書きを平行して行うことが可能である。 -赤色で示したノードが新しく追加されたノードである。非破壊木構造の基本的な戦略は、変更したいノードへのルートノードからのパスを全てコピーする。 -そして、パス上に存在しないノードはコピー元の木構造と共有することである。 - -\newpage - -\begin{figure}[!h] - \centering - \includegraphics[scale=0.7]{images/nondestructive_tree_modification.pdf} - \caption{木構造の非破壊的編集} - \label{fig:non-destructive_tree} -\end{figure} - -木構造はディレクトリツリー、構文木など階層構造を持つデータを表現する。 -またはデータベースのインデックスなど情報を探索しやすくするための探索木としても用いられる。 -Gears OS では Data Tree として木構造を利用する。 -その場合、普通に木構造を構築するだけでは偏った木構造が構築される可能性がある。 -最悪なケースでは事実上の線形リストになり、計算量が O(n) となる。 -挿入・削除・検索における処理時間を保証するため Red-Black Tree を用いて木構造の平衡性を保証する。 - -Red-Black Tree は通常の二分探索木としての条件の他に以下の条件を持つ。 - -\begin{itemize} -\item 各ノードは赤または黒の色を持つ。 -\item ルートの色は黒である。 -\item 赤ノードは2つの黒ノードを子として持つ(赤ノードが続くことはない)。 -\item ルートから最下位ノードへのパスに含まれる黒ノードの数はどの最下位ノードでも一定である。 -\end{itemize} - -これらの条件によってルートから最も遠い最下位ノードへのパスの長さはルートから最も近い最下位ノードへのパスの長さの2倍に収まることが保証される。 - -Red-Black Tree は挿入・削除を行ったあとに変更したノードからルートへのパスを辿りながら Red-Black Tree の条件を満たすように色の変更や木の回転を行う。 -関数呼び出しが可能なプログラミング言語では戻り値でパスを辿ることができるが、CbC は末尾呼び出し最適化が行われるように記述する必要があるのでパスを辿るにはノードに親への参照を持たせるか挿入・削除時に辿ったパスを記憶するしかない。 -ノードが親への参照を持つと非破壊木構造を構築することが出来ないので、辿ったパスを記憶する方法を用いる。 -辿ったパスを記憶するため Context にスタックを持たせる。 - -ソースコード:\ref{tree}は Context に追加する Tree, Node および Tree の操作を行う Code Gear 名の定義である。 - -\lstinputlisting[label=tree, caption=Context: Red-Black Tree]{src/tree.h} - -Tree は参照する木を格納する Code Gear である。 -この Code Gear は Context の生成時に生成される。 -Traverse は木の探索に用いられる Code Gear である。 -Code Gear は末尾最適化されるので呼び出し元の情報が残らない。 -参照しているノードの情報を Code Gear 間で持ち歩くためには Traverse のような Data Gear が必要になる。 - -赤ノードが続かないという Red-Black Tree の条件を満たすか判定する Code Gear はソースコード:\ref{insert}の通りである。 -まず、親の情報が必要なのでパスを記憶しているスタックから親ノードを取得する。 -親ノードが黒である場合、木を回転する必要はなく木は平衡を保っているので木に対する操作を終了する。 - -\lstinputlisting[label=insert, caption=Insert Case]{src/insert.c} - -木の左回転を行う Code Gear はソースコード:\ref{rotateLeft}の通りである。 -自分、親、兄弟の3点のノードの回転である。 -回転を行ったあとにも Red-Black Tree の条件を満たしているか確認する必要があるので回転後に変更された親ノードを再びスタックに記憶する。 -また、回転の際に現在見ているノードが変更する必要がある。 - -\newpage - -\lstinputlisting[label=rotateLeft, caption=Rotate Left]{src/rotate.c} - -\section{Worker} -Worker は TaskQueue から Task を取得し、実行する。 -Task には実行する Code Gear と実行に必要な Code Gear の key が格納されている。 -実行に必要な Code Gear は Persistent Data Tree から key を使って取得する。 - -各 Worker は個別の Context を参照している。 -メモリ空間も独立しているのでメモリを確保する処理で他の Thread を止めることはない。 -ただし、Persistent Data Tree への書き出しは競合する可能性があるので CAS を利用してデータの一貫性を保証する必要がある。 - -Worker が Task の取得を行う Code Gear はソースコード:\ref{sync_dequeue}の通りである。 -TaskQueue から取得した Task から実行する Code Gear と必要な Data Gear の key を Worker Context に書き込むことで実行される。 -Task の実行後に再び Task の取得を行う Code Gear に戻る必要がある。 -Context は実行する Code Gear のスタックを持っているのでそのスタックに積む(ソースコード:\ref{sync_dequeue} 11行目)ことで戻ることができる。 - -Task に格納され Worker で実行される Code Gear はソースコード:\ref{task}の通りである。 -ソースコード:\ref{task}は指定された要素の値を2倍する Twice という例題である。 -Twice は並列実行される。 - -\lstinputlisting[label=task, caption=Task Sample]{src/twice.c} - -並列処理される Code Gear と言っても他の Code Gear と完全に同じである。 -これは Gears OS 自体が Code Gear によって構成されていることに起因する。 -つまり、Gears OS を利用して書かれたプログラムで定義されている Code Gear に依存関係がないときすべて並列に動作させることができるということを意味する。 - -\section{TaskManager} -Gears OS の TaskManager は WaitTaskQueue に入っている Task の依存関係を解決する。 -Task には Input/Output Data Gear の情報が格納されている。 -Input Data Gear は Task に必要な Data Gear で揃ったら Task は実行可能な状態になる。 -Output Data Gear は Task が Persistent Data Tree に書き出す Data Gear である。 -この Input と Output の関係が依存関係となる。 -TaskManager は Persistent Data Tree を監視しており、WaitTaskQueue に入っている Task の Input Data Gear が揃っているのを確認したら実行可能な Task として AcitiveTaskQueue へ移動させる。 - -TaskManager は Worker の管理も行う。 -メインとなる Context には Worker の情報が格納されており、TaskManager はこの Context を参照して Worker の起動・停止を行う。 -ソースコード\ref{init_worker}は Worker を起動する Code Gear である。 - -\lstinputlisting[label=init_worker, caption=InitWorker]{src/initWorker.c} diff -r 94c9c506bba9 -r 958634b9fa32 images/allocation.bb --- a/images/allocation.bb Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -%%Title: ./images/allocation.pdf -%%Creator: extractbb 20140317 -%%BoundingBox: 0 0 1064 396 -%%CreationDate: Tue Feb 9 03:13:52 2016 - diff -r 94c9c506bba9 -r 958634b9fa32 images/allocation.pdf Binary file images/allocation.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 images/bitonic.bb --- a/images/bitonic.bb Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -%%Title: ./images/bitonic.pdf -%%Creator: extractbb 20140317 -%%BoundingBox: 0 0 591 422 -%%CreationDate: Fri Feb 12 02:40:15 2016 - diff -r 94c9c506bba9 -r 958634b9fa32 images/bitonic.pdf Binary file images/bitonic.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 images/bitonic_sort_01.bb --- a/images/bitonic_sort_01.bb Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -%%Title: ./images/bitonic_sort_01.pdf -%%Creator: extractbb 20140317 -%%BoundingBox: 0 0 360 216 -%%CreationDate: Sat Feb 13 22:47:36 2016 - diff -r 94c9c506bba9 -r 958634b9fa32 images/bitonic_sort_01.pdf Binary file images/bitonic_sort_01.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 images/bitonic_sort_02.bb --- a/images/bitonic_sort_02.bb Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -%%Title: ./images/bitonic_sort_02.pdf -%%Creator: extractbb 20140317 -%%BoundingBox: 0 0 360 216 -%%CreationDate: Sun Feb 14 00:45:20 2016 - diff -r 94c9c506bba9 -r 958634b9fa32 images/bitonic_sort_02.pdf Binary file images/bitonic_sort_02.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 images/bitonic_sort_03.bb --- a/images/bitonic_sort_03.bb Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -%%Title: ./images/bitonic_sort_03.pdf -%%Creator: extractbb 20140317 -%%BoundingBox: 0 0 360 216 -%%CreationDate: Sat Feb 13 23:41:22 2016 - diff -r 94c9c506bba9 -r 958634b9fa32 images/bitonic_sort_03.pdf Binary file images/bitonic_sort_03.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 images/cell_arch.bb --- a/images/cell_arch.bb Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -%%Title: ./images/cell_arch.pdf -%%Creator: extractbb 20140317 -%%BoundingBox: 0 0 412 414 -%%CreationDate: Thu Feb 4 02:51:30 2016 - diff -r 94c9c506bba9 -r 958634b9fa32 images/cell_arch.pdf Binary file images/cell_arch.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 images/codesegment2.bb --- a/images/codesegment2.bb Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -%%Title: ./images/codesegment2.pdf -%%Creator: extractbb 20140317 -%%BoundingBox: 0 0 584 275 -%%CreationDate: Wed Feb 10 03:34:03 2016 - diff -r 94c9c506bba9 -r 958634b9fa32 images/codesegment2.pdf Binary file images/codesegment2.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 images/createTask.bb --- a/images/createTask.bb Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -%%Title: ./images/createTask.pdf -%%Creator: extractbb 20090506 -%%BoundingBox: 0 0 512 391 -%%CreationDate: Tue Feb 25 09:13:13 2014 - diff -r 94c9c506bba9 -r 958634b9fa32 images/createTask.pdf Binary file images/createTask.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 images/createTask.xbb --- a/images/createTask.xbb Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -%%Title: ./images/createTask.pdf -%%Creator: extractbb 20090506 -%%BoundingBox: 0 0 512 391 -%%HiResBoundingBox: 0.000000 0.000000 512.000000 391.000000 -%%PDFVersion: 1.3 -%%Pages: 1 -%%CreationDate: Tue Feb 25 09:13:14 2014 - diff -r 94c9c506bba9 -r 958634b9fa32 images/emblem-bitmap.eps --- a/images/emblem-bitmap.eps Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,376 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (emblem.eps) -%%CreationDate: (Sat Dec 16 23:16:28 2000) -%%BoundingBox: 226 313 398.455 493 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 226 313 399 494 -userdict begin -%%BeginData: -DisplayImage -226 313 -173.455 181.091 -12.000000 -159 166 -1 -1 -1 -1 -fffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffff -fffffffefffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffff -fffffffffffffffefffffffffffffffffffffffffffffffffffffffeffffffffffffffff -fffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffeffffffff -fffffffffe0000fffffffffffffffffeffffffffffffffffc0000007fffffffffffffffe -fffffffffffffff8000000003ffffffffffffffeffffffffffffffe00002000007ffffff -fffffffeffffffffffffff008133000000fff8fffffffffefffffffffffffc04efbba440 -003ff0fffffffffeffffffffffffe017fffff661000ff0fffffffffeffffffffffff813f -f803ffe7fffff0fffffffffeffffffffffff03f8000007fffffff0fffffffffeffffffff -fffc3f813ffe003ffffff0fffffffffeffffffffffc1c1ffffffff8700000000000ffffe -ffffffffff078ffffffffff300000000000ffffeffffffffff078ffffffffff300000000 -000ffffefffffffffe3e3ffbdee67fff00000000000ffffefffffffffc787ff99eee6fff -07f83fe1000ffffefffffffff8e3ff319dce4cff0ff83fe3ff8ffffefffffffff38ffb93 -9dcc4cef0ff83fe3ff8ffffeffffffffc63ffb919dcc4ccf0ff83fe3ff8ffffeffffffff -9cffbb119dcc48cf0ff83fe3ff8ffffeffffffff73ffb1111988488f0ff83fe3ff8ffffe -fffffffee7fbb1111988c19f0ff83fe3ff8ffffefffffffb9ff19100198800070ff83fe3 -ff8ffffefffffff73e719000110000070ff83fe3ff8ffffeffffffecff38880011000007 -0ff83fe3ff8ffffeffffffecff388800110000070ff83fe3ff8ffffefffffff9fb38800e -110000070ff83fe3ff8ffffefffffff3f318001f81000d870ff83fe3ff8ffffeffffffef -fb98007fc0003fe70ff83fe3ff8ffffeffffffffd98c01ffe0003fff0ffc7fe3ff8ffffe -ffffffdf898403f1e000fffffffffffffffffffeffffffbecc800fe0e001f27fffffffff -fffffffeffffff7cc4801fc1f007f27ffffffffffffffffefffffcf200007e0fffffa267 -803f3fc7c03ffffefffffdf00000f81f3fffa267001e1f83800ffffefffffbe00019f07b -77fda267001e0603000ffffeffffffe000ffe1e937d9a267001e0003800ffffeffffff80 -7fff83e926d98027003f000f800ffffeffffff01ffff8fe9269880070fffc01fff8ffffe -fffffc0fffef1ec8228800070fffc01fff8ffffefffffc1ffe1e3ee8028800070fff0007 -ff0ffffefffff41fc03c746000880007001e0003800ffffefffff01f8038726000080007 -001e0603000ffffefffff01f8070f200000003c7001e0403000ffffeffffa01f0fe3b007 -80003fff001f0007800f7ffeffff801e03c7b00fc0007fff0fff800fff0f7ffeffff803e -018e900fe000ffff0fffc03fff0f3ffeffff803c071e001ff803ffff0fff800fff0f3ffe -ffff00fc0e32007ffe1fffff003e0007c00f3ffeffff03fc027a007fffffffff001e0403 -800f1ffeffff0ff8047801ffffffffff001e1f03000f1ffeffff1ff81cd803ffffffffff -001e1fc7000f0ffefffc7ff80dc807ffffffffff803fffff801e0ffefff8fff01bc01fff -fffffffffffffffffffe0ffefff9fff033007ffffffffffffffffffffffe0ffefffffff0 -6707ffffffffffff00000000000f0ffeffffffe06f0fffffffffffff00000000000f07fe -ffffffe1cd1fffffffffffff00000000000f07feffffffe0dc3fffffffffffff00000000 -000f07feffffffe09c3fffffffffffff0fffffffff0f07feffffffe1b83fffffffffffff -0f1e0007870f03feffffffe3383fffffffffffff0f1c0003870f03feffffffe3783fffff -ffffffff0f1c0003870f03feffffffe6683fffffffffffff0f1c0003870f03feffffffe6 -e03ffffffffffffe0f1c3fe3870f03feffffffe6e03fffffffffffff0f1c0003870f81fe -ffffffed80fffffffffffffe0f1e0003870f01feffffffed80fffffffffffffe0f1e0003 -870f01fefff9ffedc1fffffffffffffe0f1fe0ff870f01feffe1ffeb83fffffffffffffe -0f1fe0ff870f01feffc1ffff07fffffffffffffe0f000000070f81feff81ffff0fffffff -fffffffe0f000000070f01feff01fffe3fffffffffffffff1f000000079e01fefe01fffe -7fffffffffffffffff00000007bf81fefe01fffcffffffffffffffffffffe0ffffff00fe -fe01ffffffffffffffffffffffffe0fffffe00fefe01ffffffffffffffffffffffffe0ff -fff830fefe01fffffffffffffffffffffff870fc1e3f80fefe01ffffffffffffffffffff -fff879ee0e1f00fefe01fffffffffffffffffffffff87fe7863c00fefe01ffffffffffff -fffffffffff03fc3c63800fefe01fffffffffffffffffffffff01fc3e638f0fefe01ffff -fffffffffffffffffff80661fe3fc0fefe01fffffffffffffffffffffffc0038fe3f00fe -fe01fffffffffffffffffffffffe000c7e3c01fefe01fffffffffffffffffffffff3000c -3e3001fefe01ffffffffffffffffffffffe182061c31e1fefe01ffffffffffffffffffff -ffc041031c3f81fefe00ffffffffffffffffffffffc000438c3801fefe00ffffffffffff -ffffffffff801061cc2001feff00ffffffffffffffffffffff800830f86001feff00ffff -ffffffffffffffffff800830f86001feff00ffffffffffffffffffffff800418f87f03fe -ff00ffffffffffffffffffffff00061c787c03feff80ffffffffffffffffffffff00030c -386003feff80ffffffffffffffffffffff000186306003feff80ffffffffffffffffffff -ff002186307f87feff807ffffffffffffffffffffe0000c3307c07feffc07fffffffffff -fffffffffe0000e3e04007feffc07ffffffffffffffffffffc001873e0fc0ffeffe03fff -fffffffffffffffff8000c39c1e00ffeffe03ffffffffffffffffffff0000c39c1800ffe -ffe01ffffffffffffffffffff0000e1dc1f80ffefff01fffffffffffffffffffe000471d -83fe0ffefff00fffffffffffffffffffc000471f83e00ffefff00fffffffffffffffffff -c000630f07001ffefff806ffffffffffffffffff8000238f07f81ffefff8067fffffffff -ffffffff0004238e07f83ffefffc033fffffffffffffffff000421c60e003ffefffc031f -fffffffffffffffe008611c40f007ffefffe019ffffffffffffffffc004211ec1fc07ffe -fffe00c7fffffffffffffff8004311fc1e007ffeffff00c3fffffffffffffff8006318fc -3800fffeffff0061fffffffffffffff0006318f87f81fffeffff00207fffffffffffffe0 -00219cf87fc1fffeffff80201fffffffffffffe002319c70e003fffeffff80100fffffff -ffffffe001319ce1e003fffeffffc01f87fffffffffffe600131cfc1fe07fffeffffe01f -03fffffffffff8201119cf83ff87fffefffff00e03ffffffffffe0201118cf83000ffffe -fffff807f1ffffffffff80321118ef03e01ffffefffff803e07ffffffffc0033111cfe06 -781ffffefffffc01c03ffe0fffe00033191cfc0c003ffffefffffe00fc0ff800fe000013 -189cf81f807ffffeffffff007c01e00000000013189ef03fe07ffffeffffff8039800400 -00000011189ee070007ffffeffffff801e00040000000011088fe0fc00fffffeffffffc0 -0e78080000000019088fc1fe01fffffeffffffe007f118000010103988cf03c101fffffe -fffffff003c73088001011398cde07f007fffffefffffff001de71884211313b8cfc0e7c -0ffffffeffffffec007e61084231333b8cf01e000ffffffefffffff3000fc711c623333b -9f8073e03ffffffefffffff98003ce31c673333b9f00f0007ffffffefffffffe6001de71 -8e63333bfe01fc00fffffffeffffffff30007c738ee7233bf803e201fffffffeffffffff -88001ef79ee6663fe00f7003fffffffeffffffffc40007ff1ce6677f001f1807fffffffe -fffffffff30000ff3dce7ffc00f9c00ffffffffefffffffff8c0001ffdffffe000f8403f -fffffffefffffffff8c0001ffdffffe000f8403ffffffffefffffffffc300003ffffff00 -03fc007ffffffffefffffffffe0c00001fff80000f8700fffffffffeffffffffff81c000 -00000001fe300ffffffffffeffffffffffe0f80000000007e3001ffffffffffeffffffff -fff87f800000003f70003ffffffffffefffffffffffe27f0000003fe1800fffffffffffe -ffffffffffff833ff003fff10003fffffffffffeffffffffffffe10fffffff38000fffff -fffffffefffffffffffff801bffb2300007ffffffffffffeffffffffffffff0011313080 -01fffffffffffffeffffffffffffffc00118004007fffffffffffffefffffffffffffff0 -000800007ffffffffffffffeffffffffffffffffc0000003fffffffffffffffeffffffff -fffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffe -fffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffff -fffffffefffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffff -fffffffffffffffe -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 226 313 398.455 493 -%%EOF diff -r 94c9c506bba9 -r 958634b9fa32 images/fft.bb --- a/images/fft.bb Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -%%Title: ./images/fft.pdf -%%Creator: extractbb 20140317 -%%BoundingBox: 0 0 360 216 -%%CreationDate: Tue Feb 16 13:11:33 2016 - diff -r 94c9c506bba9 -r 958634b9fa32 images/fft.pdf Binary file images/fft.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 images/gearsos.bb --- a/images/gearsos.bb Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -%%Title: ./images/gearsos.pdf -%%Creator: extractbb 20140317 -%%BoundingBox: 0 0 1312 427 -%%CreationDate: Tue Feb 9 03:18:30 2016 - diff -r 94c9c506bba9 -r 958634b9fa32 images/gearsos.pdf Binary file images/gearsos.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 images/gpu_arch.bb --- a/images/gpu_arch.bb Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -%%Title: ./images/gpu_arch.pdf -%%Creator: extractbb 20140317 -%%BoundingBox: 0 0 412 414 -%%CreationDate: Thu Feb 4 02:51:35 2016 - diff -r 94c9c506bba9 -r 958634b9fa32 images/gpu_arch.pdf Binary file images/gpu_arch.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 images/images.graffle Binary file images/images.graffle has changed diff -r 94c9c506bba9 -r 958634b9fa32 images/nondestructive_tree_modification.bb --- a/images/nondestructive_tree_modification.bb Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -%%Title: ./images/nondestructive_tree_modification.pdf -%%Creator: extractbb 20140317 -%%BoundingBox: 0 0 559 248 -%%CreationDate: Mon Feb 15 04:41:46 2016 - diff -r 94c9c506bba9 -r 958634b9fa32 images/nondestructive_tree_modification.pdf Binary file images/nondestructive_tree_modification.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 images/scheduler.bb --- a/images/scheduler.bb Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -%%Title: ./images/scheduler.pdf -%%Creator: extractbb 20140317 -%%BoundingBox: 0 0 532 385 -%%CreationDate: Thu Feb 4 03:40:25 2016 - diff -r 94c9c506bba9 -r 958634b9fa32 images/scheduler.pdf Binary file images/scheduler.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 images/scheduler.xbb --- a/images/scheduler.xbb Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -%%Title: ./scheduler.pdf -%%Creator: extractbb 20130405 -%%BoundingBox: 0 0 532 385 -%%HiResBoundingBox: 0.000000 0.000000 532.000000 385.000000 -%%PDFVersion: 1.3 -%%Pages: 1 -%%CreationDate: Tue Jan 13 09:58:53 2015 - diff -r 94c9c506bba9 -r 958634b9fa32 images/stream.bb --- a/images/stream.bb Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -%%Title: ./images/stream.pdf -%%Creator: extractbb 20140317 -%%BoundingBox: 0 0 952 356 -%%CreationDate: Fri Feb 12 01:28:07 2016 - diff -r 94c9c506bba9 -r 958634b9fa32 images/stream.pdf Binary file images/stream.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 images/twice.bb --- a/images/twice.bb Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -%%Title: ./images/twice.pdf -%%Creator: extractbb 20140317 -%%BoundingBox: 0 0 360 216 -%%CreationDate: Tue Feb 16 15:51:01 2016 - diff -r 94c9c506bba9 -r 958634b9fa32 images/twice.pdf Binary file images/twice.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 images/twice_640.bb --- a/images/twice_640.bb Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -%%Title: ./images/twice_640.pdf -%%Creator: extractbb 20140317 -%%BoundingBox: 0 0 360 216 -%%CreationDate: Tue Feb 16 18:13:32 2016 - diff -r 94c9c506bba9 -r 958634b9fa32 images/twice_640.pdf Binary file images/twice_640.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 images/u-ryukyu-Mark.eps --- a/images/u-ryukyu-Mark.eps Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Illustrator(TM) 6.0 %%For: (\216\251\227\247\225\252\216U\203V\203X\203e\203\200\214\244\213\206\216\272) () %%Title: (u-ryukyu_Mark2.eps) %%CreationDate: (2/19/01) (2:50 PM) %%BoundingBox: 1 4 195 200 %%HiResBoundingBox: 1.3735 4.3999 194.5 199.3999 %%DocumentProcessColors: Black %%DocumentSuppliedResources: procset Adobe_level2_AI5 1.2 0 %%+ procset Adobe_ColorImage_AI6 1.1 0 %%+ procset Adobe_Illustrator_AI5 1.0 0 %AI5_FileFormat 3 %AI3_ColorUsage: Black&White %AI3_IncludePlacedImages %%CMYKCustomColor: 1 0 0.55 0 (Aqua) %%+ 1 0.5 0 0 (Blue) %%+ 0.5 0.4 0.3 0 (Blue Gray) %%+ 0.8 0.05 0 0 (Blue Sky) %%+ 0.5 0.85 1 0 (Brown) %%+ 1 0.9 0.1 0 (Dark Blue) %%+ 1 0.55 1 0 (Forest Green) %%+ 0.05 0.2 0.95 0 (Gold) %%+ 0.75 0.05 1 0 (Grass Green) %%+ 0 0.45 1 0 (Orange) %%+ 0.15 1 1 0 (Red) %%+ 0.45 0.9 0 0 (Violet) %%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) %%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 8.504 0 0 0 0 0 0 0 0 -1 -1 %%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () %AI3_TemplateBox: 100 102 100 102 %AI3_TileBox: 0 0 538 781 %AI3_DocumentPreview: Header %AI5_ArtSize: 612 792 %AI5_RulerUnits: 1 %AI5_ArtFlags: 1 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI5_OpenToView: -284 390 1 794 557 18 0 1 3 40 0 0 %AI5_OpenViewLayers: 7 %%PageOrigin:0 0 %%AI3_PaperRect:-28 811 567 -31 %%AI3_Margin:28 -30 -29 31 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %%EndComments %%BeginProlog %%BeginResource: procset Adobe_level2_AI5 1.2 0 %%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) %%Version: 1.2 0 %%CreationDate: (04/10/93) () %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) userdict /Adobe_level2_AI5 25 dict dup begin put /packedarray where not { userdict begin /packedarray { array astore readonly } bind def /setpacking /pop load def /currentpacking false def end 0 } if pop userdict /defaultpacking currentpacking put true setpacking /initialize { Adobe_level2_AI5 begin } bind def /terminate { currentdict Adobe_level2_AI5 eq { end } if } bind def mark /setcustomcolor where not { /findcmykcustomcolor { 0 6 packedarray } bind def /findrgbcustomcolor { 1 5 packedarray } bind def /setcustomcolor { exch aload pop 0 eq { pop 4 { 4 index mul 4 1 roll } repeat 5 -1 roll pop setcmykcolor } { pop 3 { 1 exch sub 3 index mul 1 exch sub 3 1 roll } repeat 4 -1 roll pop setrgbcolor } ifelse } def } if /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put userdict /level2? systemdict /languagelevel known dup { pop systemdict /languagelevel get 2 ge } if put /level2ScreenFreq { begin 60 HalftoneType 1 eq { pop Frequency } if HalftoneType 2 eq { pop GrayFrequency } if HalftoneType 5 eq { pop Default level2ScreenFreq } if end } bind def userdict /currentScreenFreq level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put level2? not { /setcmykcolor where not { /setcmykcolor { exch .11 mul add exch .59 mul add exch .3 mul add 1 exch sub setgray } def } if /currentcmykcolor where not { /currentcmykcolor { 0 0 0 1 currentgray sub } def } if /setoverprint where not { /setoverprint /pop load def } if /selectfont where not { /selectfont { exch findfont exch dup type /arraytype eq { makefont } { scalefont } ifelse setfont } bind def } if /cshow where not { /cshow { [ 0 0 5 -1 roll aload pop ] cvx bind forall } bind def } if } if cleartomark /anyColor? { add add add 0 ne } bind def /testColor { gsave setcmykcolor currentcmykcolor grestore } bind def /testCMYKColorThrough { testColor anyColor? } bind def userdict /composite? level2? { gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore add add add 4 eq } { 1 0 0 0 testCMYKColorThrough 0 1 0 0 testCMYKColorThrough 0 0 1 0 testCMYKColorThrough 0 0 0 1 testCMYKColorThrough and and and } ifelse put composite? not { userdict begin gsave /cyan? 1 0 0 0 testCMYKColorThrough def /magenta? 0 1 0 0 testCMYKColorThrough def /yellow? 0 0 1 0 testCMYKColorThrough def /black? 0 0 0 1 testCMYKColorThrough def grestore /isCMYKSep? cyan? magenta? yellow? black? or or or def /customColor? isCMYKSep? not def end } if end defaultpacking setpacking %%EndResource %%BeginProcSet: Adobe_ColorImage_AI6 1.1 0 userdict /Adobe_ColorImage_AI6 known not { userdict /Adobe_ColorImage_AI6 24 dict put } if userdict /Adobe_ColorImage_AI6 get begin /initialize { Adobe_ColorImage_AI6 begin Adobe_ColorImage_AI6 { dup type /arraytype eq { dup xcheck { bind } if } if pop pop } forall } def /terminate { end } def currentdict /Adobe_ColorImage_AI6_Vars known not { /Adobe_ColorImage_AI6_Vars 15 dict def } if Adobe_ColorImage_AI6_Vars begin /channelcount 0 def /sourcecount 0 def /sourcearray 4 array def /plateindex -1 def /XIMask 0 def /XIBinary 0 def /XIChannelCount 0 def /XIBitsPerPixel 0 def /XIImageHeight 0 def /XIImageWidth 0 def /XIImageMatrix null def /XIBuffer null def /XIDataProc null def /XIVersion 6 def end /WalkRGBString null def /WalkCMYKString null def /StuffRGBIntoGrayString null def /RGBToGrayImageProc null def /StuffCMYKIntoGrayString null def /CMYKToGrayImageProc null def /ColorImageCompositeEmulator null def /SeparateCMYKImageProc null def /FourEqual null def /TestPlateIndex null def currentdict /_colorimage known not { /colorimage where { /colorimage get /_colorimage exch def } { /_colorimage null def } ifelse } if /_currenttransfer systemdict /currenttransfer get def /colorimage null def /XI null def /WalkRGBString { 0 3 index dup length 1 sub 0 3 3 -1 roll { 3 getinterval { } forall 5 index exec 3 index } for 5 { pop } repeat } def /WalkCMYKString { 0 3 index dup length 1 sub 0 4 3 -1 roll { 4 getinterval { } forall 6 index exec 3 index } for 5 { pop } repeat } def /StuffRGBIntoGrayString { .11 mul exch .59 mul add exch .3 mul add cvi 3 copy put pop 1 add } def /RGBToGrayImageProc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec dup length 3 idiv string dup 3 1 roll /StuffRGBIntoGrayString load exch WalkRGBString end } def /StuffCMYKIntoGrayString { exch .11 mul add exch .59 mul add exch .3 mul add dup 255 gt { pop 255 } if 255 exch sub cvi 3 copy put pop 1 add } def /CMYKToGrayImageProc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec dup length 4 idiv string dup 3 1 roll /StuffCMYKIntoGrayString load exch WalkCMYKString end } def /ColorImageCompositeEmulator { pop true eq { Adobe_ColorImage_AI6_Vars /sourcecount get 5 add { pop } repeat } { Adobe_ColorImage_AI6_Vars /channelcount get 1 ne { Adobe_ColorImage_AI6_Vars begin sourcearray 0 3 -1 roll put channelcount 3 eq { /RGBToGrayImageProc } { /CMYKToGrayImageProc } ifelse load end } if image } ifelse } def /SeparateCMYKImageProc { Adobe_ColorImage_AI6_Vars begin sourcecount 0 ne { sourcearray plateindex get exec } { sourcearray 0 get exec dup length 4 idiv string 0 2 index plateindex 4 2 index length 1 sub { get 255 exch sub 3 copy put pop 1 add 2 index } for pop pop exch pop } ifelse end } def /FourEqual { 4 index ne { pop pop pop false } { 4 index ne { pop pop false } { 4 index ne { pop false } { 4 index eq } ifelse } ifelse } ifelse } def /TestPlateIndex { Adobe_ColorImage_AI6_Vars begin /plateindex -1 def /setcmykcolor where { pop gsave 1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub grestore 1 0 0 0 FourEqual { /plateindex 0 def } { 0 1 0 0 FourEqual { /plateindex 1 def } { 0 0 1 0 FourEqual { /plateindex 2 def } { 0 0 0 1 FourEqual { /plateindex 3 def } { 0 0 0 0 FourEqual { /plateindex 5 def } if } ifelse } ifelse } ifelse } ifelse pop pop pop pop } if plateindex end } def /colorimage { Adobe_ColorImage_AI6_Vars begin /channelcount 1 index def /sourcecount 2 index 1 eq { channelcount 1 sub } { 0 } ifelse def 4 sourcecount add index dup 8 eq exch 1 eq or not end { /_colorimage load null ne { _colorimage } { Adobe_ColorImage_AI6_Vars /sourcecount get 7 add { pop } repeat } ifelse } { dup 3 eq TestPlateIndex dup -1 eq exch 5 eq or or { /_colorimage load null eq { ColorImageCompositeEmulator } { dup 1 eq { pop pop image } { Adobe_ColorImage_AI6_Vars /plateindex get 5 eq { gsave 0 _currenttransfer exec 1 _currenttransfer exec eq { 0 _currenttransfer exec 0.5 lt } { 0 _currenttransfer exec 1 _currenttransfer exec gt } ifelse { { pop 0 } } { { pop 1 } } ifelse systemdict /settransfer get exec } if _colorimage Adobe_ColorImage_AI6_Vars /plateindex get 5 eq { grestore } if } ifelse } ifelse } { dup 1 eq { pop pop image } { pop pop Adobe_ColorImage_AI6_Vars begin sourcecount -1 0 { exch sourcearray 3 1 roll put } for /SeparateCMYKImageProc load end systemdict /image get exec } ifelse } ifelse } ifelse } def /XG { pop pop } def /XF { 13 {pop} repeat } def /Xh { Adobe_ColorImage_AI6_Vars begin gsave /XIMask exch 0 ne def /XIImageHeight exch def /XIImageWidth exch def /XIImageMatrix exch def 0 0 moveto XIImageMatrix concat XIImageWidth XIImageHeight scale XIMask { /_lp /null ddef _fc /_lp /imagemask ddef } if /XIVersion 7 def end } def /XH { Adobe_ColorImage_AI6_Vars begin /XIVersion 6 def grestore end } def /XI { Adobe_ColorImage_AI6_Vars begin gsave /XIMask exch 0 ne def /XIBinary exch 0 ne def pop pop /XIChannelCount exch def /XIBitsPerPixel exch def /XIImageHeight exch def /XIImageWidth exch def pop pop pop pop /XIImageMatrix exch def XIBitsPerPixel 1 eq { XIImageWidth 8 div ceiling cvi } { XIImageWidth XIChannelCount mul } ifelse /XIBuffer exch string def XIBinary { /XIDataProc { currentfile XIBuffer readstring pop } def XIVersion 6 le { currentfile 128 string readline pop pop } if } { /XIDataProc { currentfile XIBuffer readhexstring pop } def } ifelse XIVersion 6 le { 0 0 moveto XIImageMatrix concat XIImageWidth XIImageHeight scale XIMask { /_lp /null ddef _fc /_lp /imagemask ddef } if } if XIMask { XIImageWidth XIImageHeight false [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] /XIDataProc load imagemask } { XIImageWidth XIImageHeight XIBitsPerPixel [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] /XIDataProc load XIChannelCount 1 eq { gsave 0 setgray image grestore } { false XIChannelCount colorimage } ifelse } ifelse grestore end } def end %%EndProcSet %%BeginResource: procset Adobe_Illustrator_AI5 1.1 0 %%Title: (Adobe Illustrator (R) Version 5.0 Full Prolog) %%Version: 1.1 0 %%CreationDate: (3/7/1994) () %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_Illustrator_AI5_vars 81 dict dup begin put /_eo false def /_lp /none def /_pf { } def /_ps { } def /_psf { } def /_pss { } def /_pjsf { } def /_pjss { } def /_pola 0 def /_doClip 0 def /cf currentflat def /_tm matrix def /_renderStart [ /e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0 ] def /_renderEnd [ null null null null /i1 /i1 /i1 /i1 ] def /_render -1 def /_rise 0 def /_ax 0 def /_ay 0 def /_cx 0 def /_cy 0 def /_leading [ 0 0 ] def /_ctm matrix def /_mtx matrix def /_sp 16#020 def /_hyphen (-) def /_fScl 0 def /_cnt 0 def /_hs 1 def /_nativeEncoding 0 def /_useNativeEncoding 0 def /_tempEncode 0 def /_pntr 0 def /_tDict 2 dict def /_wv 0 def /Tx { } def /Tj { } def /CRender { } def /_AI3_savepage { } def /_gf null def /_cf 4 array def /_if null def /_of false def /_fc { } def /_gs null def /_cs 4 array def /_is null def /_os false def /_sc { } def /_pd 1 dict def /_ed 15 dict def /_pm matrix def /_fm null def /_fd null def /_fdd null def /_sm null def /_sd null def /_sdd null def /_i null def /discardSave null def /buffer 256 string def /beginString null def /endString null def /endStringLength null def /layerCnt 1 def /layerCount 1 def /perCent (%) 0 get def /perCentSeen? false def /newBuff null def /newBuffButFirst null def /newBuffLast null def /clipForward? false def end userdict /Adobe_Illustrator_AI5 known not { userdict /Adobe_Illustrator_AI5 91 dict put } if userdict /Adobe_Illustrator_AI5 get begin /initialize { Adobe_Illustrator_AI5 dup begin Adobe_Illustrator_AI5_vars begin discardDict { bind pop pop } forall dup /nc get begin { dup xcheck 1 index type /operatortype ne and { bind } if pop pop } forall end newpath } def /terminate { end end } def /_ null def /ddef { Adobe_Illustrator_AI5_vars 3 1 roll put } def /xput { dup load dup length exch maxlength eq { dup dup load dup length 2 mul dict copy def } if load begin def end } def /npop { { pop } repeat } def /sw { dup length exch stringwidth exch 5 -1 roll 3 index mul add 4 1 roll 3 1 roll mul add } def /swj { dup 4 1 roll dup length exch stringwidth exch 5 -1 roll 3 index mul add 4 1 roll 3 1 roll mul add 6 2 roll /_cnt 0 ddef { 1 index eq { /_cnt _cnt 1 add ddef } if } forall pop exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop } def /ss { 4 1 roll { 2 npop (0) exch 2 copy 0 exch put pop gsave false charpath currentpoint 4 index setmatrix stroke grestore moveto 2 copy rmoveto } exch cshow 3 npop } def /jss { 4 1 roll { 2 npop (0) exch 2 copy 0 exch put gsave _sp eq { exch 6 index 6 index 6 index 5 -1 roll widthshow currentpoint } { false charpath currentpoint 4 index setmatrix stroke } ifelse grestore moveto 2 copy rmoveto } exch cshow 6 npop } def /sp { { 2 npop (0) exch 2 copy 0 exch put pop false charpath 2 copy rmoveto } exch cshow 2 npop } def /jsp { { 2 npop (0) exch 2 copy 0 exch put _sp eq { exch 5 index 5 index 5 index 5 -1 roll widthshow } { false charpath } ifelse 2 copy rmoveto } exch cshow 5 npop } def /pl { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform } def /setstrokeadjust where { pop true setstrokeadjust /c { curveto } def /C /c load def /v { currentpoint 6 2 roll curveto } def /V /v load def /y { 2 copy curveto } def /Y /y load def /l { lineto } def /L /l load def /m { moveto } def } { /c { pl curveto } def /C /c load def /v { currentpoint 6 2 roll pl curveto } def /V /v load def /y { pl 2 copy curveto } def /Y /y load def /l { pl lineto } def /L /l load def /m { pl moveto } def } ifelse /d { setdash } def /cf { } def /i { dup 0 eq { pop cf } if setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def /XR { 0 ne /_eo exch ddef } def /H { } def /h { closepath } def /N { _pola 0 eq { _doClip 1 eq { _eo {eoclip} {clip} ifelse /_doClip 0 ddef } if newpath } { /CRender { N } ddef } ifelse } def /n { N } def /F { _pola 0 eq { _doClip 1 eq { gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc /_doClip 0 ddef } { _pf } ifelse } { /CRender { F } ddef } ifelse } def /f { closepath F } def /S { _pola 0 eq { _doClip 1 eq { gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc /_doClip 0 ddef } { _ps } ifelse } { /CRender { S } ddef } ifelse } def /s { closepath S } def /B { _pola 0 eq { _doClip 1 eq gsave F grestore { gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc /_doClip 0 ddef } { S } ifelse } { /CRender { B } ddef } ifelse } def /b { closepath B } def /W { /_doClip 1 ddef } def /* { count 0 ne { dup type /stringtype eq { pop } if } if newpath } def /u { } def /U { } def /q { _pola 0 eq { gsave } if } def /Q { _pola 0 eq { grestore } if } def /*u { _pola 1 add /_pola exch ddef } def /*U { _pola 1 sub /_pola exch ddef _pola 0 eq { CRender } if } def /D { pop } def /*w { } def /*W { } def /` { /_i save ddef clipForward? { nulldevice } if 6 1 roll 4 npop concat pop userdict begin /showpage { } def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash /setstrokeadjust where {pop false setstrokeadjust} if newpath 0 setgray false setoverprint } def /~ { end _i restore } def /O { 0 ne /_of exch ddef /_lp /none ddef } def /R { 0 ne /_os exch ddef /_lp /none ddef } def /g { /_gf exch ddef /_fc { _lp /fill ne { _of setoverprint _gf setgray /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /G { /_gs exch ddef /_sc { _lp /stroke ne { _os setoverprint _gs setgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /k { _cf astore pop /_fc { _lp /fill ne { _of setoverprint _cf aload pop setcmykcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /K { _cs astore pop /_sc { _lp /stroke ne { _os setoverprint _cs aload pop setcmykcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /x { /_gf exch ddef findcmykcustomcolor /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /X { /_gs exch ddef findcmykcustomcolor /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /A { pop } def /annotatepage { userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse } def /XT { pop pop } def /discard { save /discardSave exch store discardDict begin /endString exch store gt38? { 2 add } if load stopped pop end discardSave restore } bind def userdict /discardDict 7 dict dup begin put /pre38Initialize { /endStringLength endString length store /newBuff buffer 0 endStringLength getinterval store /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store /newBuffLast newBuff endStringLength 1 sub 1 getinterval store } def /shiftBuffer { newBuff 0 newBuffButFirst putinterval newBuffLast 0 currentfile read not { stop } if put } def 0 { pre38Initialize mark currentfile newBuff readstring exch pop { { newBuff endString eq { cleartomark stop } if shiftBuffer } loop } { stop } ifelse } def 1 { pre38Initialize /beginString exch store mark currentfile newBuff readstring exch pop { { newBuff beginString eq { /layerCount dup load 1 add store } { newBuff endString eq { /layerCount dup load 1 sub store layerCount 0 eq { cleartomark stop } if } if } ifelse shiftBuffer } loop } if } def 2 { mark { currentfile buffer readline not { stop } if endString eq { cleartomark stop } if } loop } def 3 { /beginString exch store /layerCnt 1 store mark { currentfile buffer readline not { stop } if dup beginString eq { pop /layerCnt dup load 1 add store } { endString eq { layerCnt 1 eq { cleartomark stop } { /layerCnt dup load 1 sub store } ifelse } if } ifelse } loop } def end userdict /clipRenderOff 15 dict dup begin put { /n /N /s /S /f /F /b /B } { { _doClip 1 eq { /_doClip 0 ddef _eo {eoclip} {clip} ifelse } if newpath } def } forall /Tr /pop load def /Bb {} def /BB /pop load def /Bg {12 npop} def /Bm {6 npop} def /Bc /Bm load def /Bh {4 npop} def end /Lb { 4 npop 6 1 roll pop 4 1 roll pop pop pop 0 eq { 0 eq { (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard } { /clipForward? true def /Tx /pop load def /Tj /pop load def currentdict end clipRenderOff begin begin } ifelse } { 0 eq { save /discardSave exch store } if } ifelse } bind def /LB { discardSave dup null ne { restore } { pop clipForward? { currentdict end end begin /clipForward? false ddef } if } ifelse } bind def /Pb { pop pop 0 (%AI5_EndPalette) discard } bind def /Np { 0 (%AI5_End_NonPrinting--) discard } bind def /Ln /pop load def /Ap /pop load def /Ar { 72 exch div 0 dtransform dup mul exch dup mul add sqrt dup 1 lt { pop 1 } if setflat } def /Mb { q } def /Md { } def /MB { Q } def /nc 3 dict def nc begin /setgray { pop } bind def /setcmykcolor { 4 npop } bind def /setcustomcolor { 2 npop } bind def currentdict readonly pop end end setpacking %%EndResource %%EndProlog %%BeginSetup Adobe_level2_AI5 /initialize get exec Adobe_ColorImage_AI6 /initialize get exec Adobe_Illustrator_AI5 /initialize get exec %AI5_Begin_NonPrinting Np %AI3_BeginPattern: (Arrow1.2.out/in) (Arrow1.2.out/in) 1 1 39.4039 39.4039 [ %AI3_Tile (0 O 0 R 0.75 0.75 0.375 0 k 0.75 0.75 0.375 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 1 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 33.9039 15.6187 m 39.4247 20.202 L 39.4247 20.202 L 33.8869 24.6252 L S 39.2997 20.202 m 24.5706 20.202 l 20.4039 20.4792 20.4039 16.8125 v 20.4039 13.1458 20.4039 12.5625 y S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Arrow1.2.side) (Arrow1.2.side) 1 1 39.404 39.4039 [ %AI3_Tile (0 O 0 R 0.75 0.75 0.375 0 k 0.75 0.75 0.375 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 1 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 20.202 20.202 m 39.404 20.202 l S 33.904 15.6187 m 39.4248 20.202 L 39.4248 20.202 L 33.887 24.6252 L S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Bricks) (Bricks) 1.6 1.6 73.6 73.6 [ %AI3_Tile (0 O 0 R 0.3 0.85 0.85 0 k 0.3 0.85 0.85 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 1.6 1.6 m 1.6 73.6 L 73.6 73.6 L 73.6 1.6 L 1.6 1.6 L f %AI6_EndPatternLayer ) & (0 O 0 R 1 g 1 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 1.6 70.01 m 73.6 70.01 l S 1.6 62.809 m 73.6 62.809 L S 1.6 55.609 m 73.6 55.609 L S 1.6 48.408 m 73.6 48.408 L S 1.6 41.208 m 73.6 41.208 L S 1.6 34.007 m 73.6 34.007 L S 1.6 26.807 m 73.6 26.807 L S 1.6 19.606 m 73.6 19.606 L S 1.6 12.406 m 73.6 12.406 L S 1.6 5.206 m 73.6 5.206 L S 70.01 70.01 m 70.01 62.822 l S 55.61 70.01 m 55.61 62.822 L S 41.21 70.01 m 41.21 62.822 L S 26.81 70.01 m 26.81 62.822 L S 12.41 70.01 m 12.41 62.822 L S 70.01 55.572 m 70.01 48.385 l S 55.61 55.572 m 55.61 48.385 L S 41.21 55.572 m 41.21 48.385 L S 26.81 55.572 m 26.81 48.385 L S 12.41 55.572 m 12.41 48.385 L S 70.01 41.197 m 70.01 34.01 l S 55.61 41.197 m 55.61 34.01 L S 41.21 41.197 m 41.21 34.01 L S 26.81 41.197 m 26.81 34.01 L S 12.41 41.197 m 12.41 34.01 L S 70.01 26.822 m 70.01 19.635 l S 55.61 26.822 m 55.61 19.635 L S 41.21 26.822 m 41.21 19.635 L S 26.81 26.822 m 26.81 19.635 L S 12.41 26.822 m 12.41 19.635 L S 70.01 12.385 m 70.01 5.197 l S 55.61 12.385 m 55.61 5.197 L S 41.21 12.385 m 41.21 5.197 L S 26.81 12.385 m 26.81 5.197 L S 12.41 12.385 m 12.41 5.197 L S 62.797 5.197 m 62.797 1.6 L S 48.397 5.197 m 48.397 1.6 L S 33.997 5.197 m 33.997 1.6 L S 19.597 5.197 m 19.597 1.6 L S 5.197 5.197 m 5.197 1.6 l S 62.797 19.635 m 62.797 12.447 L S 48.397 19.635 m 48.397 12.447 L S 33.997 19.635 m 33.997 12.447 L S 19.597 19.635 m 19.597 12.447 L S 5.197 19.635 m 5.197 12.447 l S 62.797 34.01 m 62.797 26.822 L S 48.397 34.01 m 48.397 26.822 L S 19.597 34.01 m 19.597 26.822 L S 5.197 34.01 m 5.197 26.822 l S 62.797 48.385 m 62.797 41.197 L S 48.397 48.385 m 48.397 41.197 L S 33.997 48.385 m 33.997 41.197 L S 19.597 48.385 m 19.597 41.197 L S 5.197 48.385 m 5.197 41.197 l S 62.797 62.822 m 62.797 55.635 L S 48.397 62.822 m 48.397 55.635 L S 33.997 62.822 m 33.997 55.635 L S 19.597 62.822 m 19.597 55.635 L S 5.197 62.822 m 5.197 55.635 l S 62.797 73.5589 m 62.797 70.072 L S 48.397 73.5589 m 48.397 70.072 L S 33.997 73.5589 m 33.997 70.072 L S 19.597 73.5589 m 19.597 70.072 L S 5.197 73.5589 m 5.197 70.072 l S 33.997 34.01 m 33.997 26.822 L S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Checks) (Checks) 1 1 31.3995 31.3995 [ %AI3_Tile (0 O 0 R 0 0.9 1 0 k 0 0.9 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 1 XR 19.9995 4.8 m 27.5995 4.8 L 27.5995 12.3995 L 19.9995 12.3995 L 19.9995 4.8 L f 31.3995 27.5995 m 31.3995 31.3995 L 27.5995 31.3995 L 27.5995 27.5995 L 31.3995 27.5995 L f 19.9995 27.5995 m 19.9995 19.9995 L 27.5995 19.9995 L 27.5995 27.5995 L 19.9995 27.5995 L f 0 XR 12.3995 12.3995 m 19.9995 12.3995 L 19.9995 19.9995 L 12.3995 19.9995 L 12.3995 12.3995 L f 1 XR 12.3995 27.5995 m 4.8 27.5995 L 4.8 19.9995 L 12.3995 19.9995 L 12.3995 27.5995 L f 4.8 12.3995 m 4.8 4.8 L 12.3995 4.8 L 12.3995 12.3995 L 4.8 12.3995 L f 19.9995 27.5995 m 19.9995 31.3995 L 12.3995 31.3995 L 12.3995 27.5995 L 19.9995 27.5995 L f 12.3995 4.8 m 12.3995 1 L 19.9995 1 L 19.9995 4.8 L 12.3995 4.8 L f 4.8 19.9995 m 1 19.9995 L 1 12.3995 L 4.8 12.3995 L 4.8 19.9995 L f 27.5995 19.9995 m 27.5995 12.3995 L 31.3995 12.3995 L 31.3995 19.9995 L 27.5995 19.9995 L f 4.8 31.3995 m 1 31.3995 L 1 27.5995 L 4.8 27.5995 L 4.8 31.3995 L f 27.5995 1 m 31.3995 1 L 31.3995 4.8 L 27.5995 4.8 L 27.5995 1 L f 1 4.8 m 1 1 L 4.8 1 L 4.8 4.8 L 1 4.8 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.05 0.2 0 k 0 0.05 0.2 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 1 XR 4.8 4.8 m 4.8 1 L 12.3995 1 L 12.3995 4.8 L 4.8 4.8 L f 4.8 12.3995 m 1 12.3995 L 1 4.8 L 4.8 4.8 L 4.8 12.3995 L f 19.9995 4.8 m 19.9995 1 L 27.5995 1 L 27.5995 4.8 L 19.9995 4.8 L f 12.3995 12.3995 m 12.3995 4.8 L 19.9995 4.8 L 19.9995 12.3995 L 12.3995 12.3995 L f 27.5995 4.8 m 31.3995 4.8 L 31.3995 12.3995 L 27.5995 12.3995 L 27.5995 4.8 L f 12.3995 19.9995 m 4.8 19.9995 L 4.8 12.3995 L 12.3995 12.3995 L 12.3995 19.9995 L f 4.8 27.5995 m 1 27.5995 L 1 19.9995 L 4.8 19.9995 L 4.8 27.5995 L f 19.9995 12.3995 m 27.5995 12.3995 L 27.5995 19.9995 L 19.9995 19.9995 L 19.9995 12.3995 L f 19.9995 19.9995 m 19.9995 27.5995 L 12.3995 27.5995 L 12.3995 19.9995 L 19.9995 19.9995 L f 27.5995 19.9995 m 31.3995 19.9995 L 31.3995 27.5995 L 27.5995 27.5995 L 27.5995 19.9995 L f 12.3995 27.5995 m 12.3995 31.3995 L 4.8 31.3995 L 4.8 27.5995 L 12.3995 27.5995 L f 27.5995 27.5995 m 27.5995 31.3995 L 19.9995 31.3995 L 19.9995 27.5995 L 27.5995 27.5995 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Confetti) (Confetti) 4.85 3.617 76.85 75.617 [ %AI3_Tile (0 O 0 R 1 g 1 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 4.85 3.617 m 4.85 75.617 L 76.85 75.617 L 76.85 3.617 L 4.85 3.617 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 g 0 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 10.6 64.867 m 7.85 62.867 l S 9.1 8.617 m 6.85 6.867 l S 78.1 68.617 m 74.85 67.867 l S 76.85 56.867 m 74.35 55.117 l S 79.6 51.617 m 76.6 51.617 l S 76.35 44.117 m 73.6 45.867 l S 78.6 35.867 m 76.6 34.367 l S 76.1 23.867 m 73.35 26.117 l S 78.1 12.867 m 73.85 13.617 l S 68.35 14.617 m 66.1 12.867 l S 76.6 30.617 m 73.6 30.617 l S 62.85 58.117 m 60.956 60.941 l S 32.85 59.617 m 31.196 62.181 l S 47.891 64.061 m 49.744 66.742 l S 72.814 2.769 m 73.928 5.729 l S 67.976 2.633 m 67.35 5.909 l S 61.85 27.617 m 59.956 30.441 l S 53.504 56.053 m 51.85 58.617 l S 52.762 1.779 m 52.876 4.776 l S 45.391 5.311 m 47.244 7.992 l S 37.062 3.375 m 35.639 5.43 l S 55.165 34.828 m 57.518 37.491 l S 20.795 3.242 m 22.12 5.193 l S 14.097 4.747 m 15.008 8.965 l S 9.736 1.91 m 8.073 4.225 l S 31.891 5.573 m 32.005 8.571 l S 12.1 70.367 m 15.6 68.867 l S 9.35 54.867 m 9.6 58.117 l S 12.85 31.867 m 14.35 28.117 l S 10.1 37.367 m 12.35 41.117 l S 34.1 71.117 m 31.85 68.617 l S 38.35 71.117 m 41.6 68.367 l S 55.1 71.117 m 58.35 69.117 l S 57.35 65.117 m 55.35 61.867 l S 64.35 66.367 m 69.35 68.617 l S 71.85 62.867 m 69.35 61.117 l S 23.6 70.867 m 23.6 67.867 l S 20.6 65.867 m 17.35 65.367 l S 24.85 61.367 m 25.35 58.117 l S 25.85 65.867 m 29.35 66.617 l S 14.1 54.117 m 16.85 56.117 l S 12.35 11.617 m 12.6 15.617 l S 12.1 19.867 m 14.35 22.367 l S 26.1 9.867 m 23.6 13.367 l S 34.6 47.117 m 32.1 45.367 l S 62.6 41.867 m 59.85 43.367 l S 31.6 35.617 m 27.85 36.367 l S 36.35 26.117 m 34.35 24.617 l S 33.85 14.117 m 31.1 16.367 l S 37.1 9.867 m 35.1 11.117 l S 34.35 20.867 m 31.35 20.867 l S 44.6 56.617 m 42.1 54.867 l S 47.35 51.367 m 44.35 51.367 l S 44.1 43.867 m 41.35 45.617 l S 43.35 33.117 m 42.6 30.617 l S 43.85 23.617 m 41.1 25.867 l S 44.35 15.617 m 42.35 16.867 l S 67.823 31.1 m 64.823 31.1 l S 27.1 32.617 m 29.6 30.867 l S 31.85 55.117 m 34.85 55.117 l S 19.6 40.867 m 22.1 39.117 l S 16.85 35.617 m 19.85 35.617 l S 20.1 28.117 m 22.85 29.867 l S 52.1 42.617 m 54.484 44.178 l S 52.437 50.146 m 54.821 48.325 l S 59.572 54.133 m 59.35 51.117 l S 50.185 10.055 m 53.234 9.928 l S 51.187 15.896 m 53.571 14.075 l S 58.322 19.883 m 59.445 16.823 l S 53.1 32.117 m 50.6 30.367 l S 52.85 24.617 m 49.6 25.617 l S 61.85 9.117 m 59.1 10.867 l S 69.35 34.617 m 66.6 36.367 l S 67.1 23.617 m 65.1 22.117 l S 24.435 46.055 m 27.484 45.928 l S 25.437 51.896 m 27.821 50.075 l S 62.6 47.117 m 65.321 46.575 l S 19.85 19.867 m 20.35 16.617 l S 21.85 21.867 m 25.35 22.617 l S 37.6 62.867 m 41.6 62.117 l S 38.323 42.1 m 38.823 38.6 l S 69.35 52.617 m 66.85 53.867 l S 14.85 62.117 m 18.1 59.367 l S 9.6 46.117 m 7.1 44.367 l S 20.6 51.617 m 18.6 50.117 l S 46.141 70.811 m 47.994 73.492 l S 69.391 40.561 m 71.244 43.242 l S 38.641 49.311 m 39.35 52.117 l S 25.141 16.811 m 25.85 19.617 l S 36.6 32.867 m 34.6 31.367 l S 6.1 68.617 m 2.85 67.867 l S 4.85 56.867 m 2.35 55.117 l S 7.6 51.617 m 4.6 51.617 l S 6.6 35.867 m 4.6 34.367 l S 6.1 12.867 m 1.85 13.617 l S 4.6 30.617 m 1.6 30.617 l S 72.814 74.769 m 73.928 77.729 l S 67.976 74.633 m 67.35 77.909 l S 52.762 73.779 m 52.876 76.776 l S 37.062 75.375 m 35.639 77.43 l S 20.795 75.242 m 22.12 77.193 l S 9.736 73.91 m 8.073 76.225 l S 10.1 23.617 m 6.35 24.367 l S 73.217 18.276 m 71.323 21.1 l S 28.823 39.6 m 29.505 42.389 l S 49.6 38.617 m 47.6 37.117 l S 60.323 73.6 m 62.323 76.6 l S 60.323 1.6 m 62.323 4.6 l S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (DblLine1.2.inner) (DblLine1.2.inner) 1 1 39.2705 39.2706 [ %AI3_Tile (0 O 0 R 1 0.14 0.09 0 k 1 0.14 0.09 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 39.2702 22.175 m 39.2702 13.6108 L 26.66 13.6108 L 26.66 1.0003 L 18.0958 1.0003 L 18.0948 22.175 L 18.0958 22.175 L 18.0958 22.1752 L 39.2702 22.175 L f 39.2708 24.6929 m 15.5779 24.6929 L 15.5779 1.0003 L 14.9037 1.0003 L 14.9032 25.3675 L 39.2708 25.3675 L 39.2708 24.6929 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (DblLine1.2.outer) (DblLine1.2.outer) 1 1.0003 39.2706 39.271 [ %AI3_Tile (0 O 0 R 1 0.14 0.09 0 k 1 0.14 0.09 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 39.2708 26.6602 m 13.6111 26.6602 L 13.6111 1.0005 L 22.1751 1 L 22.1751 18.096 L 39.2708 18.096 L 39.2708 26.6602 L f 39.2708 15.578 m 24.6928 15.578 L 24.6928 1 L 25.367 1 L 25.367 14.9038 L 39.2708 14.9038 L 39.2708 15.578 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (DblLine1.2.side) (DblLine1.2.side) 1 1 39.2706 39.2706 [ %AI3_Tile (0 O 0 R 1 0.14 0.09 0 k 1 0.14 0.09 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 39.2704 18.0958 m 39.2704 26.6598 L 1.0001 26.6598 L 1.0001 18.0958 L 39.2704 18.0958 L f 39.2704 14.9037 m 39.2704 15.5776 L 1.0001 15.5776 L 1.0001 14.9037 L 39.2704 14.9037 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Diamonds) (Diamonds) 1 1 37.1865 41.9411 [ %AI3_Tile (0 O 0 R 0.2 0 1 0 k 0.2 0 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 1.0002 1.0004 m 1.0002 41.9411 L 37.1865 41.9411 L 37.1865 1.0004 L 1.0002 1.0004 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 g 0 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 1 XR 19.0936 41.9408 m 19.0929 41.9408 L 19.0933 41.9402 L 19.0936 41.9408 L f 7.0311 41.9408 m 7.0304 41.9408 L 7.0308 41.9402 L 7.0311 41.9408 L f 31.1556 41.9408 m 31.1548 41.9408 L 31.1552 41.9402 L 31.1556 41.9408 L f %AI6_EndPatternLayer ) & (0 O 0 R 0.75 0.9 0 0 k 0.75 0.9 0 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 1 XR 37.1865 1 m 37.1865 11.2349 L 31.1552 1 L 37.1865 1 L f 19.0933 1 m 31.1552 1 L 25.124 11.2349 L 19.0933 1 L f 7.0308 1 m 19.0933 1 L 13.062 11.2349 L 7.0308 1 L f 1 1 m 7.0308 1 L 1 11.2349 L 1 1 L f 37.1859 11.2349 m 37.1865 11.236 L 37.1865 31.7059 L 31.1552 21.4704 L 37.1859 11.2349 L f 19.0933 21.4704 m 25.124 11.2349 L 31.1552 21.4704 L 25.124 31.7059 L 19.0933 21.4704 L f 7.0308 21.4704 m 13.062 11.2349 L 19.0933 21.4704 L 13.062 31.7059 L 7.0308 21.4704 L f 1 31.7059 m 1 11.2349 L 7.0308 21.4704 L 1 31.7059 L f 37.1859 31.7059 m 37.1865 31.707 L 37.1865 41.9408 L 31.1556 41.9408 L 31.1552 41.9402 L 37.1859 31.7059 L f 25.124 31.7059 m 31.1552 41.9402 L 31.1548 41.9408 L 19.0936 41.9408 L 19.0933 41.9402 L 25.124 31.7059 L f 13.062 31.7059 m 19.0933 41.9402 L 19.0929 41.9408 L 7.0311 41.9408 L 7.0308 41.9402 L 13.062 31.7059 L f 7.0304 41.9408 m 1 41.9408 L 1 31.7059 L 7.0308 41.9402 L 7.0304 41.9408 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Hexagon) (Hexagon) 4 1.6 70.151 77.983 [ %AI3_Tile (0 O 0 R 0 1 0.35 0 k 0 1 0.35 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 70.151 77.983 m 70.151 1.6 L 4 1.6 L 4 77.983 L 70.151 77.983 L f %AI6_EndPatternLayer ) & (0 O 0 R 0.9921 1 0 0 k 0.9921 1 0 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 20.538 30.244 m S 26.05 20.696 m 15.025 20.696 L 9.513 30.244 L 15.025 39.792 L 26.05 39.792 L 31.564 30.244 L 26.05 20.696 L s 20.537 11.148 m S 26.05 1.6 m 15.024 1.6 L 9.512 11.148 L 15.024 20.696 L 26.05 20.696 L 31.563 11.148 L 26.05 1.6 L s 53.614 30.244 m S 59.126 20.696 m 48.101 20.696 L 42.589 30.244 L 48.101 39.792 L 59.126 39.792 L 64.639 30.244 L 59.126 20.696 L s 53.614 11.148 m S 59.126 1.6 m 48.101 1.6 L 42.588 11.148 L 48.101 20.696 L 59.126 20.696 L 64.638 11.148 L 59.126 1.6 L s 20.538 68.436 m S 26.051 58.888 m 15.025 58.888 L 9.513 68.436 L 15.025 77.984 L 26.051 77.984 L 31.564 68.436 L 26.051 58.888 L s 20.538 49.34 m S 26.051 39.792 m 15.025 39.792 L 9.513 49.34 L 15.025 58.888 L 26.05 58.888 L 31.564 49.34 L 26.051 39.792 L s 53.614 68.436 m S 59.127 58.888 m 48.102 58.888 L 42.589 68.436 L 48.101 77.985 L 59.127 77.985 L 64.639 68.436 L 59.127 58.888 L s 53.614 49.34 m S 59.127 39.792 m 48.101 39.792 L 42.589 49.34 L 48.101 58.888 L 59.127 58.888 L 64.639 49.341 L 59.127 39.792 L s 4 20.696 m S 3.876 30.244 m 9.512 30.244 L 15.024 20.696 L 9.512 11.147 L 3.876 11.147 L S 37.075 20.696 m S 42.588 11.148 m 31.563 11.148 L 26.05 20.696 L 31.563 30.244 L 42.589 30.244 L 48.101 20.696 L 42.588 11.148 L s 37.076 58.888 m S 42.589 49.34 m 31.564 49.34 L 26.05 58.888 L 31.564 68.436 L 42.589 68.436 L 48.101 58.888 L 42.589 49.34 L s 70.151 20.696 m S 70.2094 11.147 m 64.639 11.147 L 59.127 20.696 L 64.639 30.244 L 70.2094 30.244 L S 70.152 58.888 m S 70.0427 49.34 m 64.639 49.34 L 59.127 58.888 L 64.639 68.436 L 70.0427 68.436 L S 4 58.888 m S 3.876 68.436 m 9.513 68.436 L 15.025 58.888 L 9.513 49.34 L 3.876 49.34 L S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Laurel.inner) (Laurel.inner) 1 1 28.5392 28.5392 [ %AI3_Tile (0 O 0 R 0 0.55 1 0.12 k 0 0.55 1 0.12 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 19.2768 15.3585 m 28.9144 15.3585 L 28.9144 14.2335 L 19.2768 14.2335 L 19.2768 15.3585 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.55 1 0.3 k 0 0.55 1 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 14.7461 18.9624 m 13.0264 17.8486 11.3273 14.4193 11.3273 10.0362 c 11.3273 5.6547 12.9768 2.1518 14.744 1.1112 C 14.7443 1.1112 L 16.4707 2.1518 18.1679 5.6547 18.1679 10.0362 c 18.1679 14.4143 16.432 17.8633 14.7461 18.9624 C f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Laurel.outer) (Laurel.outer) 1 1.3751 28.5393 28.9143 [ %AI3_Tile (0 O 0 R 0 0.55 1 0.12 k 0 0.55 1 0.12 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 14.2395 10.6375 m 14.2395 1 L 15.3645 1 L 15.3645 10.6375 L 14.2395 10.6375 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.55 1 0.3 k 0 0.55 1 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 10.5769 15.124 m 11.6906 16.8438 15.1198 18.5429 19.503 18.5429 c 23.8844 18.5429 27.3874 16.8935 28.428 15.1262 C 28.428 15.1259 L 27.3874 13.3995 23.8844 11.7023 19.503 11.7023 c 15.1249 11.7023 11.676 13.4382 10.5769 15.124 C f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Laurel.side) (Laurel.side) 1.3972 1 28.9364 28.5392 [ %AI3_Tile (0 O 0 R 0 0.55 1 0.12 k 0 0.55 1 0.12 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 29.1571 15.2998 m 1 15.2998 L 1 14.1748 L 29.1571 14.1748 L 29.1571 15.2998 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.55 1 0.3 k 0 0.55 1 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 2.0183 27.4787 m 1.5899 25.4751 2.8132 21.8488 5.9125 18.7494 c 9.0107 15.6513 12.654 14.3407 14.6395 14.8545 C 14.6398 14.8547 L 15.1246 16.8113 13.8478 20.4883 10.7496 23.5865 c 7.6538 26.6824 3.9876 27.8936 2.0183 27.4787 C f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.39 0.7 0.12 k 0 0.39 0.7 0.12 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 2.0183 2.0091 m 1.5899 4.0126 2.8132 7.6389 5.9125 10.7382 c 9.0107 13.8365 12.654 15.147 14.6395 14.6332 C 14.6398 14.633 L 15.1246 12.6765 13.8478 8.9993 10.7496 5.9011 c 7.6538 2.8054 3.9876 1.5941 2.0183 2.0091 C f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.55 1 0.3 k 0 0.55 1 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 15.821 2.0091 m 15.3925 4.0126 16.6159 7.6389 19.7152 10.7382 c 22.8134 13.8365 26.4567 15.147 28.4422 14.6332 C 28.4424 14.633 L 28.9273 12.6765 27.6505 8.9993 24.5523 5.9011 c 21.4565 2.8054 17.7903 1.5941 15.821 2.0091 C f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.39 0.7 0.12 k 0 0.39 0.7 0.12 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 15.821 27.4787 m 15.3925 25.4751 16.6159 21.8488 19.7152 18.7494 c 22.8134 15.6513 26.4567 14.3407 28.4422 14.8545 C 28.4424 14.8547 L 28.9273 16.8113 27.6505 20.4883 24.5523 23.5865 c 21.4565 26.6824 17.7903 27.8936 15.821 27.4787 C f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Leaves-fall) (Leaves-fall) 1 1 52.733 89.816 [ %AI3_Tile (0 O 0 R 0.05 0.2 1 0 k 0.05 0.2 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 52.733 89.816 m 52.733 1 L 1 1 L 1 89.816 L 52.733 89.816 L f %AI6_EndPatternLayer ) & (0 O 0 R 0.83 0 1 0 k 0.83 0 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 1 D 0 XR 25.317 2.083 m 25.994 2.283 26.284 2.435 V 24.815 5.147 29.266 9.428 30.186 10.168 C 30.787 9.943 30.907 7.41 30.23 6.073 C 31.073 6.196 33.262 4.818 34.02 3.529 C 34.085 4.217 35.655 7.158 36.481 7.535 C 35.561 7.933 34.896 9.406 34.134 10.854 C 35.156 11.021 36.555 10.1 38.026 9.195 C 38.541 9.996 39.915 10.968 41.174 11.484 C 40.086 12.171 39.591 12.912 39.094 14.372 C 38.052 13.806 35.865 13.657 35.336 13.944 C 35.85 15.057 38.096 15.6 38.827 15.547 C 38.573 16.409 38.425 18.562 38.598 21.155 C 36.939 19.839 35.393 18.522 33.734 18.58 C 34.003 17.158 33.367 15.353 32.99 14.86 C 32.417 15.604 32.006 16.431 32.361 18.408 C 30.908 18.893 29.671 19.439 28.297 20.697 C 28.297 18.866 27.725 17.664 26.857 16.388 C 28.117 15.9 29.389 14.697 29.385 13.658 C 28.537 13.81 26.845 14.554 26.352 15.547 C 25.634 14.8 23.95 13.491 22.346 13.487 C 23.534 12.632 24.454 11.598 24.549 9.686 C 25.802 10.657 28.255 11.272 29.635 10.674 C 24.794 6.438 25.262 3.405 25.317 2.083 C f 12.412 33.743 m 11.887 33.272 11.691 33.01 V 14.182 31.192 11.928 25.366 11.415 24.303 C 10.776 24.247 9.369 26.988 9.405 28.486 C 8.273 27.73 6.608 27.851 5.006 28.137 C 5.578 27.049 5.177 25.104 4.376 24.303 C 5.378 24.339 6.729 23.624 8.038 22.643 C 7.203 21.823 5.376 21.984 3.46 22.643 C 3.46 21.27 2.638 19.533 1.801 18.351 C 3.117 18.408 4.262 17.722 5.12 16.691 C 5.785 18.26 7.819 19.373 8.725 19.324 C 8.742 17.959 7.169 15.869 6.147 15.47 C 6.747 14.801 7.766 13.27 8.725 10.854 C 9.524 12.78 10.694 14.022 11.927 14.955 C 10.785 16.517 10.959 17.388 11.358 18.866 C 12.101 18.325 13.132 17.893 13.303 15.89 C 15.02 16.176 16.156 16.104 17.653 15.203 C 17.198 16.865 17.195 18.466 17.515 20.166 C 15.665 20.026 14.105 20.239 13.075 21.728 C 13.905 21.955 16.165 22.014 17.039 21.082 C 17.366 22.064 18.261 23.47 19.707 24.164 C 18.267 24.424 17.282 25.523 16.373 27.209 C 15.66 25.793 13.433 24.128 11.93 24.073 C 13.933 28.137 13.933 31.055 12.412 33.743 C f 31.125 30.5 m 31.445 31.128 31.648 31.385 V 34.045 29.444 38.851 32.752 39.746 33.521 C 39.636 34.153 37.511 35.29 35.794 34.26 C 36.234 35.549 35.332 37.51 34.134 38.552 C 35.873 38.451 38.019 39.813 38.541 40.555 C 38.763 39.577 39.946 38.307 41.231 37.293 C 41.582 38.266 40.887 40.384 39.971 41.986 C 41.206 42.487 42.318 43.417 42.776 44.676 C 43.233 43.359 44.236 42.685 45.58 41.929 C 44.421 40.502 43.64 38.328 43.92 37.465 C 45.243 37.8 46.814 40.518 46.937 41.607 C 47.812 40.841 49.366 40.154 51.947 39.848 C 50.246 38.77 49.884 36.778 49.3 35.347 C 48.152 35.794 45.983 35.853 45.008 35.29 C 45.721 34.711 47.061 34.16 49.071 34.146 C 49.071 32.601 49.534 31.469 50.788 30.254 C 49.065 30.267 46.965 29.781 45.469 29.389 C 45.221 30.718 44.378 32.314 43.233 32.715 C 43.227 31.854 43.493 29.605 44.378 28.938 C 43.513 28.37 42.26 26.993 41.803 25.276 C 41.181 26.601 40.32 27.906 38.457 28.35 C 39.642 29.403 40.477 31.42 40.143 32.887 C 35.091 28.905 32.414 30.203 31.125 30.5 C f 25.317 46.491 m 25.994 46.691 26.284 46.843 V 24.815 49.556 29.266 53.837 30.186 54.576 C 30.787 54.351 30.907 51.818 30.23 50.482 C 31.073 50.605 33.262 49.227 34.02 47.938 C 34.085 48.625 35.655 51.566 36.481 51.944 C 35.561 52.341 34.896 53.814 34.134 55.263 C 35.156 55.43 36.555 54.508 38.026 53.603 C 38.541 54.404 39.915 55.377 41.174 55.892 C 40.086 56.579 39.591 57.321 39.094 58.78 C 38.052 58.215 35.865 58.065 35.336 58.353 C 35.85 59.465 38.096 60.008 38.827 59.955 C 38.573 60.817 38.425 62.97 38.598 65.563 C 36.939 64.247 35.393 62.931 33.734 62.988 C 34.003 61.567 33.367 59.761 32.99 59.268 C 32.417 60.012 32.006 60.839 32.361 62.817 C 30.908 63.302 29.671 63.847 28.297 65.106 C 28.297 63.274 27.725 62.073 26.857 60.796 C 28.117 60.308 29.389 59.106 29.385 58.067 C 28.537 58.219 26.845 58.963 26.352 59.955 C 25.634 59.209 23.95 57.899 22.346 57.895 C 23.534 57.041 24.454 56.006 24.549 54.094 C 25.802 55.065 28.255 55.68 29.635 55.083 C 24.794 50.846 25.262 47.814 25.317 46.491 C f 12.412 78.151 m 11.887 77.68 11.691 77.418 V 14.182 75.601 11.928 69.774 11.415 68.711 C 10.776 68.655 9.369 71.396 9.405 72.894 C 8.273 72.138 6.608 72.259 5.006 72.545 C 5.578 71.458 5.177 69.512 4.376 68.711 C 5.378 68.747 6.729 68.032 8.038 67.052 C 7.203 66.231 5.376 66.393 3.46 67.052 C 3.46 65.678 2.638 63.941 1.801 62.759 C 3.117 62.817 4.262 62.13 5.12 61.1 C 5.785 62.669 7.819 63.781 8.725 63.732 C 8.742 62.367 7.169 60.277 6.147 59.878 C 6.747 59.209 7.766 57.678 8.725 55.263 C 9.524 57.189 10.694 58.431 11.927 59.364 C 10.785 60.925 10.959 61.796 11.358 63.274 C 12.101 62.734 13.132 62.301 13.303 60.298 C 15.02 60.584 16.156 60.512 17.653 59.612 C 17.198 61.273 17.195 62.874 17.515 64.574 C 15.665 64.434 14.105 64.648 13.075 66.136 C 13.905 66.363 16.165 66.422 17.039 65.49 C 17.366 66.472 18.261 67.878 19.707 68.572 C 18.267 68.832 17.282 69.931 16.373 71.617 C 15.66 70.202 13.433 68.536 11.93 68.482 C 13.933 72.545 13.933 75.464 12.412 78.151 C f 31.125 74.908 m 31.445 75.537 31.648 75.794 V 34.045 73.853 38.851 77.161 39.746 77.929 C 39.636 78.562 37.511 79.698 35.794 78.668 C 36.234 79.957 35.332 81.918 34.134 82.96 C 35.873 82.86 38.019 84.221 38.541 84.963 C 38.763 83.986 39.946 82.716 41.231 81.701 C 41.582 82.675 40.887 84.792 39.971 86.394 C 41.206 86.895 42.318 87.825 42.776 89.084 C 43.233 87.768 44.236 87.093 45.58 86.337 C 44.421 84.91 43.64 82.736 43.92 81.873 C 45.243 82.208 46.814 84.926 46.937 86.016 C 47.812 85.249 49.366 84.563 51.947 84.257 C 50.246 83.179 49.884 81.187 49.3 79.756 C 48.152 80.203 45.983 80.262 45.008 79.698 C 45.721 79.119 47.061 78.569 49.071 78.554 C 49.071 77.009 49.534 75.877 50.788 74.663 C 49.065 74.675 46.965 74.189 45.469 73.798 C 45.221 75.126 44.378 76.723 43.233 77.123 C 43.227 76.262 43.493 74.013 44.378 73.347 C 43.513 72.779 42.26 71.401 41.803 69.684 C 41.181 71.009 40.32 72.314 38.457 72.759 C 39.642 73.812 40.477 75.829 40.143 77.295 C 35.091 73.313 32.414 74.611 31.125 74.908 C f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Polka dots) (Polka dots) 1 1 29.8 29.8 [ %AI3_Tile (0 O 0 R 0.45 0.9 0 0 k 0.45 0.9 0 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 1 1 m 1 29.8 L 29.8 29.8 L 29.8 1 L 1 1 L f %AI6_EndPatternLayer ) & (0 O 0 R 0.09 0.18 0 0 k 0.09 0.18 0 0 K ) @ ( %AI6_BeginPatternLayer *u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 11.08 8.2 m 11.08 9.791 9.79 11.08 8.2 11.08 c 6.609 11.08 5.32 9.791 5.32 8.2 c 5.32 6.61 6.609 5.32 8.2 5.32 c 9.79 5.32 11.08 6.61 11.08 8.2 c f 11.08 22.6 m 11.08 24.191 9.79 25.48 8.2 25.48 c 6.609 25.48 5.32 24.191 5.32 22.6 c 5.32 21.01 6.609 19.72 8.2 19.72 c 9.79 19.72 11.08 21.01 11.08 22.6 c f 18.28 15.4 m 18.28 16.991 16.99 18.28 15.4 18.28 c 13.809 18.28 12.52 16.991 12.52 15.4 c 12.52 13.81 13.809 12.52 15.4 12.52 c 16.99 12.52 18.28 13.81 18.28 15.4 c f 25.48 8.2 m 25.48 9.791 24.19 11.08 22.6 11.08 c 21.009 11.08 19.72 9.791 19.72 8.2 c 19.72 6.61 21.009 5.32 22.6 5.32 c 24.19 5.32 25.48 6.61 25.48 8.2 c f 25.48 22.6 m 25.48 24.191 24.19 25.48 22.6 25.48 c 21.009 25.48 19.72 24.191 19.72 22.6 c 19.72 21.01 21.009 19.72 22.6 19.72 c 24.19 19.72 25.48 21.01 25.48 22.6 c f *U 26.92 1 m 29.8 1 L 29.8 3.88 L 28.209 3.88 26.92 2.591 26.92 1 C f 15.4 3.88 m 13.809 3.88 12.52 2.591 12.52 1 C 18.28 1 L 18.28 2.591 16.99 3.88 15.4 3.88 c f 1 3.88 m 1 1 L 3.88 1 L 3.88 2.591 2.59 3.88 1 3.88 C f 1 XR 26.92 15.4 m 26.92 13.81 28.209 12.52 29.8 12.52 C 29.8 18.28 L 28.209 18.28 26.92 16.991 26.92 15.4 c f 0 XR 15.4 18.28 m 13.809 18.28 12.52 16.991 12.52 15.4 c 12.52 13.81 13.809 12.52 15.4 12.52 c 16.99 12.52 18.28 13.81 18.28 15.4 c 18.28 16.991 16.99 18.28 15.4 18.28 c f 1 XR 3.88 15.4 m 3.88 16.991 2.59 18.28 1 18.28 C 1 12.52 L 2.59 12.52 3.88 13.81 3.88 15.4 c f 0 XR 29.8 26.92 m 29.8 29.8 L 26.92 29.8 L 26.92 28.21 28.209 26.92 29.8 26.92 C f 15.4 26.92 m 16.99 26.92 18.28 28.21 18.28 29.8 C 12.52 29.8 L 12.52 28.21 13.809 26.92 15.4 26.92 c f 3.88 29.8 m 1 29.8 L 1 26.92 L 2.59 26.92 3.88 28.21 3.88 29.8 C f 1 XR 8.2 11.08 m 6.609 11.08 5.32 9.791 5.32 8.2 c 5.32 6.61 6.609 5.32 8.2 5.32 c 9.79 5.32 11.08 6.61 11.08 8.2 c 11.08 9.791 9.79 11.08 8.2 11.08 c f 22.6 11.08 m 21.009 11.08 19.72 9.791 19.72 8.2 c 19.72 6.61 21.009 5.32 22.6 5.32 c 24.19 5.32 25.48 6.61 25.48 8.2 c 25.48 9.791 24.19 11.08 22.6 11.08 c f 8.2 25.48 m 6.609 25.48 5.32 24.191 5.32 22.6 c 5.32 21.01 6.609 19.72 8.2 19.72 c 9.79 19.72 11.08 21.01 11.08 22.6 c 11.08 24.191 9.79 25.48 8.2 25.48 c f 22.6 25.48 m 21.009 25.48 19.72 24.191 19.72 22.6 c 19.72 21.01 21.009 19.72 22.6 19.72 c 24.19 19.72 25.48 21.01 25.48 22.6 c 25.48 24.191 24.19 25.48 22.6 25.48 c f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Random circles) (Random circles) 4.365 3.849 51.13 57.85 [ %AI3_Tile (0 O 0 R 0 0.1125 0.45 0 k 0 0.1125 0.45 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 4.365 3.849 m 4.365 57.85 L 51.13 57.85 L 51.13 3.849 L 4.365 3.849 L f %AI6_EndPatternLayer ) & (0 O 0 R 0.4 0.7 1 0 k 0.4 0.7 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 45.429 36.274 m 45.843 36.991 45.598 37.908 44.88 38.323 c 44.163 38.737 43.245 38.491 42.831 37.774 c 42.417 37.056 42.663 36.139 43.38 35.725 c 44.098 35.31 45.015 35.556 45.429 36.274 c s 44.179 27.926 m 43.765 28.643 42.848 28.889 42.13 28.475 c 41.413 28.06 41.167 27.143 41.581 26.425 c 41.995 25.708 42.913 25.462 43.63 25.876 c 44.348 26.291 44.593 27.208 44.179 27.926 c s 35.929 41.024 m 35.515 41.741 34.598 41.987 33.88 41.573 c 33.163 41.158 32.917 40.241 33.331 39.524 c 33.745 38.806 34.663 38.56 35.38 38.975 c 36.098 39.389 36.343 40.306 35.929 41.024 c s 28.38 34.225 m 28.794 34.942 28.549 35.859 27.831 36.274 c 27.114 36.688 26.196 36.442 25.782 35.725 c 25.368 35.007 25.614 34.09 26.331 33.675 c 27.049 33.261 27.966 33.507 28.38 34.225 c s 31.179 28.024 m 30.765 28.741 29.848 28.987 29.13 28.573 c 28.413 28.158 28.167 27.241 28.581 26.524 c 28.995 25.806 29.913 25.56 30.63 25.975 c 31.348 26.389 31.593 27.306 31.179 28.024 c s 36.792 23.349 m 35.963 23.349 35.292 22.678 35.292 21.849 c 35.292 21.021 35.963 20.349 36.792 20.349 c 37.62 20.349 38.292 21.021 38.292 21.849 c 38.292 22.678 37.62 23.349 36.792 23.349 c s 10.888 34.175 m 10.474 34.893 10.72 35.81 11.437 36.225 c 12.155 36.639 13.072 36.393 13.486 35.675 c 13.901 34.958 13.655 34.041 12.937 33.626 c 12.22 33.212 11.303 33.458 10.888 34.175 c s 11.517 26.601 m 11.931 27.318 12.848 27.564 13.566 27.15 c 14.283 26.735 14.529 25.818 14.115 25.1 c 13.701 24.383 12.783 24.137 12.066 24.551 c 11.348 24.966 11.103 25.883 11.517 26.601 c s 16.782 41.426 m 17.196 42.143 18.114 42.389 18.831 41.975 c 19.549 41.56 19.794 40.643 19.38 39.926 c 18.966 39.208 18.049 38.962 17.331 39.377 c 16.614 39.791 16.368 40.708 16.782 41.426 c s 22.365 24.35 m 23.194 24.35 23.865 23.678 23.865 22.85 c 23.865 22.021 23.194 21.35 22.365 21.35 c 21.537 21.35 20.865 22.021 20.865 22.85 c 20.865 23.678 21.537 24.35 22.365 24.35 c s 45.385 7.849 m 44.971 7.132 44.053 6.886 43.336 7.3 c 42.619 7.714 42.373 8.632 42.787 9.349 c 43.201 10.067 44.119 10.312 44.836 9.898 c 45.553 9.484 45.799 8.567 45.385 7.849 c s 29.679 7.774 m 29.265 7.056 28.348 6.81 27.63 7.225 c 26.913 7.639 26.667 8.556 27.081 9.274 c 27.495 9.991 28.413 10.237 29.13 9.823 c 29.848 9.408 30.093 8.491 29.679 7.774 c s 35.542 11.349 m 34.713 11.349 34.042 12.021 34.042 12.849 c 34.042 13.678 34.713 14.349 35.542 14.349 c 36.37 14.349 37.042 13.678 37.042 12.849 c 37.042 12.021 36.37 11.349 35.542 11.349 c s 10.13 7.475 m 10.544 6.757 11.462 6.511 12.179 6.926 c 12.897 7.34 13.142 8.257 12.728 8.975 c 12.314 9.692 11.397 9.938 10.679 9.524 c 9.962 9.109 9.716 8.192 10.13 7.475 c s 20.203 13.349 m 21.031 13.349 21.703 14.021 21.703 14.849 c 21.703 15.678 21.031 16.349 20.203 16.349 c 19.375 16.349 18.703 15.678 18.703 14.849 c 18.703 14.021 19.375 13.349 20.203 13.349 c s 44.635 54.1 m 45.049 53.382 44.803 52.465 44.086 52.051 c 43.369 51.636 42.451 51.882 42.037 52.6 c 41.623 53.317 41.869 54.234 42.586 54.649 c 43.303 55.063 44.221 54.817 44.635 54.1 c s 36.841 48.1 m 36.427 47.382 35.509 47.136 34.792 47.551 c 34.074 47.965 33.828 48.882 34.243 49.6 c 34.657 50.317 35.574 50.563 36.292 50.149 c 37.009 49.734 37.255 48.817 36.841 48.1 c s 29.728 54.725 m 30.143 54.007 29.897 53.09 29.179 52.675 c 28.462 52.261 27.544 52.507 27.13 53.225 c 26.716 53.942 26.962 54.859 27.679 55.274 c 28.397 55.688 29.314 55.442 29.728 54.725 c s 10.86 54.1 m 10.446 53.382 10.691 52.465 11.409 52.051 c 12.126 51.636 13.044 51.882 13.458 52.6 c 13.872 53.317 13.626 54.234 12.909 54.649 c 12.191 55.063 11.274 54.817 10.86 54.1 c s 19.154 49.1 m 19.568 48.382 20.486 48.136 21.203 48.551 c 21.92 48.965 22.166 49.882 21.752 50.6 c 21.338 51.317 20.42 51.563 19.703 51.149 c 18.986 50.734 18.74 49.817 19.154 49.1 c s 51.88 38.85 m 51.052 38.85 50.38 39.521 50.38 40.35 c 50.38 41.178 51.052 41.85 51.88 41.85 c 52.709 41.85 53.38 41.178 53.38 40.35 c 53.38 39.521 52.709 38.85 51.88 38.85 c s 51.865 11.349 m 52.693 11.349 53.365 12.021 53.365 12.849 c 53.365 13.678 52.693 14.349 51.865 14.349 c 51.036 14.349 50.365 13.678 50.365 12.849 c 50.365 12.021 51.036 11.349 51.865 11.349 c s 30.179 18.524 m 29.765 19.241 28.848 19.487 28.13 19.073 c 27.413 18.658 27.167 17.741 27.581 17.024 c 27.995 16.306 28.913 16.06 29.63 16.475 c 30.348 16.889 30.593 17.806 30.179 18.524 c s 21.679 31.524 m 21.265 32.241 20.348 32.487 19.63 32.073 c 18.913 31.658 18.667 30.741 19.081 30.024 c 19.495 29.306 20.413 29.06 21.13 29.475 c 21.848 29.889 22.093 30.806 21.679 31.524 c s 37.914 33.399 m 37.5 34.116 36.583 34.362 35.865 33.948 c 35.148 33.533 34.902 32.616 35.316 31.899 c 35.73 31.181 36.648 30.935 37.365 31.35 c 38.083 31.764 38.328 32.681 37.914 33.399 c s 28.929 45.024 m 28.515 45.741 27.598 45.987 26.88 45.573 c 26.163 45.158 25.917 44.241 26.331 43.524 c 26.745 42.806 27.663 42.56 28.38 42.975 c 29.098 43.389 29.343 44.306 28.929 45.024 c s 12.429 45.524 m 12.015 46.241 11.098 46.487 10.38 46.073 c 9.663 45.658 9.417 44.741 9.831 44.024 c 10.245 43.306 11.163 43.06 11.88 43.475 c 12.598 43.889 12.843 44.806 12.429 45.524 c s 44.49 45.6 m 44.075 46.317 43.158 46.563 42.441 46.149 c 41.723 45.734 41.477 44.817 41.891 44.1 c 42.306 43.382 43.223 43.136 43.941 43.55 c 44.658 43.965 44.904 44.882 44.49 45.6 c s 12.679 18.524 m 12.265 19.241 11.348 19.487 10.63 19.073 c 9.913 18.658 9.667 17.741 10.081 17.024 c 10.495 16.306 11.413 16.06 12.13 16.475 c 12.848 16.889 13.093 17.806 12.679 18.524 c s 21.179 5.774 m 20.765 6.491 19.848 6.737 19.13 6.323 c 18.413 5.908 18.167 4.991 18.581 4.274 c 18.995 3.557 19.913 3.311 20.63 3.725 c 21.348 4.139 21.593 5.056 21.179 5.774 c s 38.929 5.274 m 38.515 5.991 37.598 6.237 36.88 5.823 c 36.163 5.408 35.917 4.491 36.331 3.774 c 36.745 3.057 37.663 2.811 38.38 3.225 c 39.098 3.639 39.343 4.556 38.929 5.274 c s 43.865 18.1 m 44.694 18.1 45.365 17.429 45.365 16.6 c 45.365 15.772 44.694 15.1 43.865 15.1 c 43.037 15.1 42.365 15.772 42.365 16.6 c 42.365 17.429 43.037 18.1 43.865 18.1 c s 51.13 4.6 m 50.302 4.6 49.63 3.928 49.63 3.1 c 49.63 2.272 50.302 1.6 51.13 1.6 c 51.959 1.6 52.63 2.272 52.63 3.1 c 52.63 3.928 51.959 4.6 51.13 4.6 c s 52.163 31.649 m 51.748 32.366 50.831 32.612 50.114 32.198 c 49.396 31.783 49.15 30.866 49.565 30.149 c 49.979 29.431 50.896 29.185 51.614 29.6 c 52.331 30.014 52.577 30.931 52.163 31.649 c s 51.85 51.35 m 51.021 51.35 50.35 50.678 50.35 49.85 c 50.35 49.021 51.021 48.35 51.85 48.35 c 52.678 48.35 53.35 49.021 53.35 49.85 c 53.35 50.678 52.678 51.35 51.85 51.35 c s 49.85 23.1 m 50.679 23.1 51.35 22.428 51.35 21.6 c 51.35 20.771 50.679 20.1 49.85 20.1 c 49.022 20.1 48.35 20.771 48.35 21.6 c 48.35 22.428 49.022 23.1 49.85 23.1 c s 5.13 38.85 m 4.302 38.85 3.63 39.521 3.63 40.35 c 3.63 41.178 4.302 41.85 5.13 41.85 c 5.959 41.85 6.63 41.178 6.63 40.35 c 6.63 39.521 5.959 38.85 5.13 38.85 c s 5.115 11.349 m 5.943 11.349 6.615 12.021 6.615 12.849 c 6.615 13.678 5.943 14.349 5.115 14.349 c 4.286 14.349 3.615 13.678 3.615 12.849 c 3.615 12.021 4.286 11.349 5.115 11.349 c s 4.38 4.6 m 3.552 4.6 2.88 3.928 2.88 3.1 c 2.88 2.272 3.552 1.6 4.38 1.6 c 5.209 1.6 5.88 2.272 5.88 3.1 c 5.88 3.928 5.209 4.6 4.38 4.6 c s 5.413 31.649 m 4.998 32.366 4.081 32.612 3.364 32.198 c 2.646 31.783 2.4 30.866 2.815 30.149 c 3.229 29.431 4.146 29.185 4.864 29.6 c 5.581 30.014 5.827 30.931 5.413 31.649 c s 5.1 51.35 m 4.271 51.35 3.6 50.678 3.6 49.85 c 3.6 49.021 4.271 48.35 5.1 48.35 c 5.928 48.35 6.6 49.021 6.6 49.85 c 6.6 50.678 5.928 51.35 5.1 51.35 c s 3.1 23.1 m 3.929 23.1 4.6 22.428 4.6 21.6 c 4.6 20.771 3.929 20.1 3.1 20.1 c 2.272 20.1 1.6 20.771 1.6 21.6 c 1.6 22.428 2.272 23.1 3.1 23.1 c s 21.194 59.775 m 20.78 60.492 19.863 60.738 19.145 60.324 c 18.428 59.909 18.182 58.992 18.596 58.275 c 19.01 57.558 19.928 57.312 20.645 57.726 c 21.363 58.14 21.608 59.057 21.194 59.775 c s 38.944 59.275 m 38.53 59.992 37.613 60.238 36.895 59.824 c 36.178 59.409 35.932 58.492 36.346 57.775 c 36.76 57.058 37.678 56.812 38.395 57.226 c 39.113 57.64 39.358 58.557 38.944 59.275 c s 51.145 58.601 m 50.317 58.601 49.645 57.929 49.645 57.101 c 49.645 56.273 50.317 55.601 51.145 55.601 c 51.974 55.601 52.645 56.273 52.645 57.101 c 52.645 57.929 51.974 58.601 51.145 58.601 c s 4.395 58.601 m 3.567 58.601 2.895 57.929 2.895 57.101 c 2.895 56.273 3.567 55.601 4.395 55.601 c 5.224 55.601 5.895 56.273 5.895 57.101 c 5.895 57.929 5.224 58.601 4.395 58.601 c s %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Rope.side) (Rope.side) 1 4.6 60.9998 33.3999 [ %AI3_Tile (0 O 0 R 0 0 0 1 k 0 0 0 1 K ) @ ( %AI6_BeginPatternLayer 800 Ar 1 J 1 j 0.6 w 4 M []0 d %AI3_Note: 0 D 0 XR 24.9999 7 m 15.6521 4.663 8.125 8.6981 1 14.1407 C S 36.9999 7 m 22.3477 3.337 12.168 15.3276 1 23.859 C S 48.9999 7 m 29.3464 2.0866 17.7386 25.3332 1 30.6213 C S 1 30.9999 m 24.9999 36.9999 36.9999 1 60.9998 7 C S 13 30.9999 m 32.6534 35.9133 44.2611 12.6667 60.9998 7.3786 C S 24.9999 30.9999 m 39.652 34.6629 49.8317 22.6722 60.9998 14.1407 C S 36.9999 30.9999 m 46.3476 33.3369 53.8749 29.3018 60.9998 23.859 C S 48.9999 30.9999 m 53.3464 32.0865 57.2978 31.7908 60.9998 30.6213 C S 13 7 m 8.6535 5.9134 4.7019 6.2091 1 7.3786 C S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Scales) (Scales) 1.6 9.3475 48.088 55.8355 [ %AI3_Tile (0 O 0 R 1 g 1 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 1.6 9.3475 m 1.6 55.8355 L 48.088 55.8355 L 48.088 9.3475 L 1.6 9.3475 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 g 0 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 17.0956 9.3475 m 12.8162 9.3475 9.3475 5.8787 9.3475 1.6 C 9.3475 5.8787 5.8787 9.3475 1.6 9.3475 C 1.6 13.6262 5.0687 17.095 9.3475 17.095 c 13.6268 17.095 17.0956 13.6262 17.0956 9.3475 C s 32.5918 9.3475 m 28.3125 9.3475 24.8437 5.8787 24.8437 1.6 C 24.8437 5.8787 21.3743 9.3475 17.0956 9.3475 C 17.0956 13.6262 20.5644 17.095 24.8437 17.095 c 29.1224 17.095 32.5918 13.6262 32.5918 9.3475 C s 48.088 9.3475 m 43.8087 9.3475 40.3399 5.8787 40.3399 1.6 C 40.3399 5.8787 36.8705 9.3475 32.5918 9.3475 C 32.5918 13.6262 36.0606 17.095 40.3399 17.095 c 44.6186 17.095 48.088 13.6262 48.088 9.3475 C s 17.0956 40.3393 m 12.8162 40.3393 9.3475 36.8699 9.3475 32.5912 C 9.3475 36.8699 5.8787 40.3393 1.6 40.3393 C 1.6 44.6181 5.0687 48.0874 9.3475 48.0874 c 13.6268 48.0874 17.0956 44.6181 17.0956 40.3393 C s 17.0956 24.8431 m 12.8162 24.8431 9.3475 21.3743 9.3475 17.095 C 9.3475 21.3743 5.8787 24.8431 1.6 24.8431 C 1.6 29.1218 5.0687 32.5912 9.3475 32.5912 c 13.6268 32.5912 17.0956 29.1218 17.0956 24.8431 C s 32.5918 24.8431 m 28.3125 24.8431 24.8437 21.3743 24.8437 17.095 C 24.8437 21.3743 21.3743 24.8431 17.0956 24.8431 C 17.0956 29.1218 20.5644 32.5912 24.8437 32.5912 c 29.1224 32.5912 32.5918 29.1218 32.5918 24.8431 C s 48.088 24.8431 m 43.8087 24.8431 40.3399 21.3743 40.3399 17.095 C 40.3399 21.3743 36.8705 24.8431 32.5918 24.8431 C 32.5918 29.1218 36.0606 32.5912 40.3399 32.5912 c 44.6186 32.5912 48.088 29.1218 48.088 24.8431 C s 32.5918 40.3393 m 28.3125 40.3393 24.8437 36.8699 24.8437 32.5912 C 24.8437 36.8699 21.3743 40.3393 17.0956 40.3393 C 17.0956 44.6181 20.5644 48.0874 24.8437 48.0874 c 29.1224 48.0874 32.5918 44.6181 32.5918 40.3393 C s 48.088 40.3393 m 43.8087 40.3393 40.3399 36.8699 40.3399 32.5912 C 40.3399 36.8699 36.8705 40.3393 32.5918 40.3393 C 32.5918 44.6181 36.0606 48.0874 40.3399 48.0874 c 44.6186 48.0874 48.088 44.6181 48.088 40.3393 C s 17.0956 55.8355 m 12.8162 55.8355 9.3475 52.3662 9.3475 48.0874 C 9.3475 52.3662 5.8787 55.8355 1.6 55.8355 C 1.6 60.1143 5.0687 63.5836 9.3475 63.5836 c 13.6268 63.5836 17.0956 60.1143 17.0956 55.8355 C s 32.5918 55.8355 m 28.3125 55.8355 24.8437 52.3662 24.8437 48.0874 C 24.8437 52.3662 21.3743 55.8355 17.0956 55.8355 C 17.0956 60.1143 20.5644 63.5836 24.8437 63.5836 c 29.1224 63.5836 32.5918 60.1143 32.5918 55.8355 C s 48.088 55.8355 m 43.8087 55.8355 40.3399 52.3662 40.3399 48.0874 C 40.3399 52.3662 36.8705 55.8355 32.5918 55.8355 C 32.5918 60.1143 36.0606 63.5836 40.3399 63.5836 c 44.6186 63.5836 48.088 60.1143 48.088 55.8355 C s %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (SolidStar.side) (SolidStar.side) 1 1 33.0117 33.0117 [ %AI3_Tile (0 O 0 R 0.05 0.2 0.95 0 k 0.05 0.2 0.95 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 1 D 0 XR 7.9689 26.0458 m 14.5331 22.9874 l 17.0095 29.7904 L 19.4859 22.9874 l 26.0473 26.0458 l 22.9889 19.4815 l 29.792 17.0052 l 22.9889 14.5288 l 26.0473 7.9674 l 19.4859 11.0257 l 17.0095 4.2226 l 14.5305 11.0257 l 7.9689 7.9674 l 11.0273 14.5288 l 4.2242 17.0052 l 11.0273 19.4843 L 7.9689 26.0458 l f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Stars) (Stars) 1 1 63.384 84.766 [ %AI3_Tile (0 O 0 R 1 0.9 0.1 0 k 1 0.9 0.1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 1 1 m 1 84.766 L 63.384 84.766 L 63.384 1 L 1 1 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.25 1 0 k 0 0.25 1 0 K ) @ ( %AI6_BeginPatternLayer *u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 37.668 67.113 m 43.924 62.567 L 41.535 55.213 L 47.791 59.757 L 54.046 55.212 L 51.657 62.566 L 57.914 67.112 L 50.18 67.112 L 47.791 74.467 L 45.402 67.113 L 37.668 67.113 L f 16.596 59.757 m 22.851 55.212 L 20.462 62.566 L 26.719 67.112 L 18.985 67.112 L 16.596 74.467 L 14.207 67.113 L 6.473 67.113 L 12.729 62.567 L 10.34 55.213 L 16.596 59.757 L f 20.462 20.683 m 26.719 25.229 L 18.985 25.229 L 16.596 32.584 L 14.207 25.23 L 6.473 25.23 L 12.729 20.684 L 10.34 13.33 L 16.596 17.874 L 22.851 13.329 L 20.462 20.683 L f 38.447 34.271 m 36.058 41.625 L 42.315 46.171 L 34.581 46.171 L 32.192 53.526 L 29.803 46.172 L 22.069 46.172 L 28.325 41.626 L 25.936 34.272 L 32.192 38.816 L 38.447 34.271 L f 51.657 20.683 m 57.914 25.229 L 50.18 25.229 L 47.791 32.584 L 45.402 25.23 L 37.668 25.23 L 43.924 20.684 L 41.535 13.33 L 47.791 17.874 L 54.046 13.329 L 51.657 20.683 L f *U 1 XR 34.581 4.288 m 32.192 11.643 L 29.803 4.289 L 22.069 4.289 L 26.5962 1 L 37.7885 1 L 42.315 4.288 L 34.581 4.288 L f 53.261 4.289 m 57.7882 1 L 63.384 1 L 63.384 11.643 L 60.995 4.289 L 53.261 4.289 L f 4.866 41.625 m 11.123 46.171 L 3.389 46.171 L 1 53.526 L 1 38.816 L 7.255 34.271 L 4.866 41.625 L f 36.058 41.625 m 42.315 46.171 L 34.581 46.171 L 32.192 53.526 L 29.803 46.172 L 22.069 46.172 L 28.325 41.626 L 25.936 34.272 L 32.192 38.816 L 38.447 34.271 L 36.058 41.625 L f 53.261 46.172 m 59.517 41.626 L 57.128 34.272 L 63.384 38.816 L 63.384 53.526 L 60.995 46.172 L 53.261 46.172 L f 4.866 83.508 m 6.5974 84.766 L 1 84.766 L 1 80.699 L 7.255 76.154 L 4.866 83.508 L f 25.936 76.155 m 32.192 80.699 L 38.447 76.154 L 36.058 83.508 L 37.7895 84.766 L 26.5951 84.766 L 28.325 83.509 L 25.936 76.155 L f 22.851 55.212 m 20.462 62.566 L 26.719 67.112 L 18.985 67.112 L 16.596 74.467 L 14.207 67.113 L 6.473 67.113 L 12.729 62.567 L 10.34 55.213 L 16.596 59.757 L 22.851 55.212 L f 41.535 55.213 m 47.791 59.757 L 54.046 55.212 L 51.657 62.566 L 57.914 67.112 L 50.18 67.112 L 47.791 74.467 L 45.402 67.113 L 37.668 67.113 L 43.924 62.567 L 41.535 55.213 L f 50.18 25.229 m 47.791 32.584 L 45.402 25.23 L 37.668 25.23 L 43.924 20.684 L 41.535 13.33 L 47.791 17.874 L 54.046 13.329 L 51.657 20.683 L 57.914 25.229 L 50.18 25.229 L f 18.985 25.229 m 16.596 32.584 L 14.207 25.23 L 6.473 25.23 L 12.729 20.684 L 10.34 13.33 L 16.596 17.874 L 22.851 13.329 L 20.462 20.683 L 26.719 25.229 L 18.985 25.229 L f 3.388 4.289 m 1 11.643 L 1 1 L 6.5948 1 L 11.122 4.289 L 3.388 4.289 L f 57.128 76.154 m 63.384 80.699 L 63.384 84.766 L 57.7855 84.766 L 59.517 83.508 L 57.128 76.154 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Stripes) (Stripes) 8.45 4.6001 80.45 76.6001 [ %AI3_Tile (0 O 0 R 1 0.07 1 0 k 1 0.07 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 3.6 w 4 M []0 d %AI3_Note: 0 D 0 XR 8.2 8.2 m 80.7 8.2 L S 8.2 22.6001 m 80.7 22.6001 L S 8.2 37.0002 m 80.7 37.0002 L S 8.2 51.4 m 80.7 51.4 L S 8.2 65.8001 m 80.7 65.8001 L S 8.2 15.4 m 80.7 15.4 L S 8.2 29.8001 m 80.7 29.8001 L S 8.2 44.2 m 80.7 44.2 L S 8.2 58.6001 m 80.7 58.6001 L S 8.2 73.0002 m 80.7 73.0002 L S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (TriBevel.outer) (TriBevel.outer) 1 1.0004 31.6124 31.6127 [ %AI3_Tile (0 O 0 R 0 0 0 0.3 k 0 0 0 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 31.6118 5.4917 m 27.1221 5.4917 L 27.1205 1.0011 L 27.8031 1.0011 L 27.8031 4.8091 L 31.6118 4.8091 L 31.6118 5.4917 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.2 k 0 0 0 0.2 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 31.6149 9.5062 m 23.1111 9.5062 L 23.1111 1.0015 L 27.1205 1.0015 L 27.1205 5.493 L 31.6144 5.493 L 31.6149 9.5062 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.4 k 0 0 0 0.4 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 31.6124 10.485 m 22.1297 10.485 L 22.1292 1.0015 L 23.1084 1.0015 L 23.1084 9.5049 L 31.6124 9.5049 L 31.6124 10.485 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.3 k 0 0 0 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 31.6129 17.2066 m 15.4064 17.2085 L 15.4064 1 L 22.1301 1 L 22.1301 10.4868 L 31.6129 10.4868 L 31.6129 17.2066 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.5 k 0 0 0 0.5 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 31.6149 18.3658 m 14.2517 18.3658 L 14.2515 1.0009 L 15.4043 1.0009 L 15.4043 17.2093 L 31.6149 17.2093 L 31.6149 18.3658 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.4 k 0 0 0 0.4 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 31.6124 30.4755 m 2.1395 30.4755 L 2.1395 1.0015 L 14.249 1 L 14.249 18.366 L 31.6149 18.366 L 31.6124 30.4755 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.6 k 0 0 0 0.6 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 15.4066 16.847 m 14.2778 18.3257 l 15.4066 17.2057 l 15.4066 16.847 l f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.5 k 0 0 0 0.5 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 23.1095 9.1906 m 22.1759 10.4392 l 23.1082 9.505 l 23.1095 9.1906 l f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.4 k 0 0 0 0.4 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 27.8039 4.6026 m 27.1619 5.4533 l 27.8029 4.8093 l 27.8039 4.6026 l f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (TriBevel.side) (TriBevel.side) 1.0006 1 29.0006 31.6124 [ %AI3_Tile (0 O 0 R 0 0 0 0.3 k 0 0 0 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 29 4.8087 m 29 4.8087 L 29.0026 5.4927 L 1.0026 5.4927 L 1 4.8087 L 1 4.8087 L 29 4.8087 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.2 k 0 0 0 0.2 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 29.0026 5.4927 m 29.0005 9.5045 L 1.0005 9.5045 L 1.0026 5.4927 L 29.0026 5.4927 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.4 k 0 0 0 0.4 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 29.0005 9.5045 m 29.0011 10.4865 L 1.0011 10.4865 L 1.0005 9.5045 L 29.0005 9.5045 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.3 k 0 0 0 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 29.0011 10.4865 m 29.003 17.209 L 1.003 17.209 L 1.0011 10.4865 L 29.0011 10.4865 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.5 k 0 0 0 0.5 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 29.003 17.209 m 29.0031 18.3656 L 1.0031 18.3656 L 1.003 17.209 L 29.003 17.209 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.4 k 0 0 0 0.4 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 29.0031 18.3656 m 29.0006 30.4752 L 1.0006 30.4752 L 1.0031 18.3656 L 29.0031 18.3656 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Waves-scroll) (Waves-scroll) 17.926 10.516 68.663 69.012 [ %AI3_Tile (0 O 0 R 1 0 0.3 0 k 1 0 0.3 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 1 D 0 XR 17.926 69.012 m 17.926 10.516 L 68.663 10.516 L 68.663 69.012 L 17.926 69.012 L f %AI6_EndPatternLayer ) & (0 O 0 R 0.55 0 0 0 k 0.55 0 0 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.75 w 4 M []0 d %AI3_Note: 0 D 0 XR 65.335 70.465 m 65.881 68.746 67.444 68.168 68.663 69.012 C 67.538 69.668 68.011 71.255 69.686 70.933 c 72.124 70.464 71.894 67.213 70.53 65.589 c 68.561 63.245 64.565 60.995 53.241 71.117 C S 39.964 70.465 m 40.511 68.746 42.074 68.168 43.293 69.012 C 42.168 69.668 42.64 71.255 44.316 70.933 c 46.753 70.464 46.524 67.213 45.16 65.589 c 43.191 63.245 39.195 60.995 27.87 71.117 c S 14.594 70.465 m 15.141 68.746 16.704 68.168 17.923 69.012 C 16.798 69.668 17.27 71.255 18.945 70.933 c 21.382 70.464 21.153 67.213 19.789 65.589 c 17.821 63.245 13.825 60.995 2.5 71.117 c S 10.959 51.619 m 22.282 41.497 26.278 43.747 28.247 46.09 c 29.611 47.715 29.841 50.965 27.403 51.434 c 25.728 51.757 25.255 50.169 26.38 49.513 C 25.161 48.669 23.599 49.248 23.052 50.966 c 22.723 51.997 23.38 53.966 24.872 54.903 c 27.267 56.406 31.371 56.05 36.328 51.619 c 47.653 41.497 51.649 43.746 53.618 46.09 c 54.982 47.715 55.212 50.965 52.774 51.434 c 51.099 51.757 50.626 50.169 51.751 49.513 C 50.532 48.669 48.97 49.248 48.423 50.966 c 48.094 51.997 48.751 53.966 50.243 54.903 c 52.638 56.406 56.742 56.05 61.699 51.619 C 73.024 41.497 77.02 43.747 78.988 46.09 c S 70.156 32.12 m 65.199 36.551 61.095 36.907 58.7 35.404 c 57.208 34.468 56.552 32.499 56.88 31.468 c 57.427 29.749 58.99 29.171 60.208 30.015 C 59.083 30.671 59.556 32.258 61.231 31.936 c 63.669 31.467 63.439 28.216 62.075 26.592 c 60.106 24.248 56.11 21.998 44.786 32.12 C 39.829 36.551 35.725 36.907 33.33 35.404 c 31.838 34.468 31.182 32.499 31.51 31.468 c 32.056 29.749 33.619 29.171 34.838 30.015 C 33.713 30.671 34.186 32.258 35.861 31.936 c 38.299 31.467 38.069 28.216 36.705 26.592 c 34.737 24.248 30.74 21.998 19.415 32.12 c 14.458 36.551 10.354 36.907 7.96 35.404 c S 19.792 7.094 m 21.157 8.719 21.386 11.968 18.949 12.437 c 17.274 12.76 16.801 11.172 17.926 10.516 C 16.708 9.673 15.145 10.252 14.598 11.969 c 14.27 13 14.926 14.969 16.418 15.906 c 18.812 17.409 22.916 17.053 27.874 12.622 c 39.199 2.5 43.195 4.75 45.163 7.094 c 46.528 8.719 46.757 11.968 44.32 12.437 c 42.644 12.76 42.172 11.172 43.297 10.516 C 42.078 9.673 40.515 10.252 39.968 11.969 c 39.64 13 40.297 14.969 41.788 15.906 c 44.183 17.409 48.287 17.053 53.245 12.622 C 64.569 2.5 68.565 4.75 70.534 7.094 c 71.898 8.719 72.127 11.968 69.69 12.437 c 68.014 12.76 67.542 11.172 68.667 10.516 C 67.448 9.673 65.885 10.252 65.338 11.969 c 65.011 13 65.667 14.969 67.159 15.906 c 69.553 17.409 73.657 17.053 78.615 12.622 c S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Yellow Stripe) (Yellow Stripe) 8.4499 4.6 80.4499 76.6 [ %AI3_Tile (0 O 0 R 0 0.4 1 0 k 0 0.4 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 3.6 w 4 M []0 d %AI3_Note: 0 D 0 XR 8.1999 8.1999 m 80.6999 8.1999 L S 8.1999 22.6 m 80.6999 22.6 L S 8.1999 37.0001 m 80.6999 37.0001 L S 8.1999 51.3999 m 80.6999 51.3999 L S 8.1999 65.8 m 80.6999 65.8 L S 8.1999 15.3999 m 80.6999 15.3999 L S 8.1999 29.8 m 80.6999 29.8 L S 8.1999 44.1999 m 80.6999 44.1999 L S 8.1999 58.6 m 80.6999 58.6 L S 8.1999 73.0001 m 80.6999 73.0001 L S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI5_End_NonPrinting-- %AI5_Begin_NonPrinting Np 13 Bn %AI5_BeginGradient: (Black & White) (Black & White) 0 2 Bd [ 0 0 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 1 %_Br [ 0 0 50 100 %_Bs 1 0 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Black, White) (Black, White) 0 2 Bd [ 0 0 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 1 %_Br [ 0 0 50 100 %_Bs 1 0 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Chrome) (Chrome) 0 6 Bd [ 0 < 464646454545444444444343434342424241414141404040403F3F3F3E3E3E3E3D3D3D3C3C3C3C3B 3B3B3B3A3A3A39393939383838383737373636363635353535343434333333333232323131313130 3030302F2F2F2E2E2E2E2D2D2D2D2C2C2C2B2B2B2B2A2A2A2A292929282828282727272726262625 2525252424242323232322222222212121202020201F1F1F1F1E1E1E1D1D1D1D1C1C1C1C1B1B1B1A 1A1A1A1919191818181817171717161616151515151414141413131312121212111111101010100F 0F0F0F0E0E0E0D0D0D0D0C0C0C0C0B0B0B0A0A0A0A09090909080808070707070606060505050504 04040403030302020202010101010000 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < 1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A 1A1A1A19191919191919191818181818181818181717171717171717161616161616161615151515 15151515151414141414141414131313131313131312121212121212121211111111111111111010 1010101010100F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C 0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A090909090909090909080808080808080807070707070707 07060606060606060606050505050505050504040404040404040303030303030303030202020202 02020201010101010101010000000000 > 1 %_Br 0 0.275 1 < 6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544 434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F > 1 %_Br 0 < 00000101010102020202030303040404040505050506060607070707080808090909090A0A0A0A0B 0B0B0C0C0C0C0D0D0D0D0E0E0E0F0F0F0F1010101011111112121212131313141414141515151516 161617171717181818181919191A1A1A1A1B1B1B1B1C1C1C1D1D1D1D1E1E1E1F1F1F1F2020202021 212122222222232323232424242525252526262626272727282828282929292A2A2A2A2B2B2B2B2C 2C2C2D2D2D2D2E2E2E2E2F2F2F303030303131313132323233333333343434353535353636363637 373738383838393939393A3A3A3B3B3B3B3C3C3C3C3D3D3D3E3E3E3E3F3F3F404040404141414142 42424343434344444444454545464646 > < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 00000101020203030304040505050606070708080809090A0A0A0B0B0C0C0D0D0D0E0E0F0F101010 1111121212131314141515151616171718181819191A1A1A1B1B1C1C1D1D1D1E1E1F1F1F20202121 222222232324242525252626272727282829292A2A2A2B2B2C2C2D2D2D2E2E2F2F2F303031313232 32333334343435353636373737383839393A3A3A3B3B3C3C3C3D3D3E3E3F3F3F4040414142424243 434444444545464647474748484949494A4A4B4B4C4C4C4D4D4E4E4F4F4F50505151515252535354 54545555565657575758585959595A5A5B5B5C5C5C5D5D5E5E5F5F5F606061616162626363646464 6565666666676768686969696A6A6B6B > 1 %_Br 0 0 0 0 1 %_Br < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < 4D4C4C4C4B4B4B4A4A4A4A4949494848484747474746464645454544444444434343424242414141 414040403F3F3F3E3E3E3E3D3D3D3C3C3C3B3B3B3B3A3A3A39393938383838373737363636353535 35343434333333323232323131313030302F2F2F2F2E2E2E2D2D2D2C2C2C2C2B2B2B2A2A2A292929 292828282727272626262625252524242423232323222222212121202020201F1F1F1E1E1E1D1D1D 1D1C1C1C1B1B1B1A1A1A1A1919191818181717171716161615151514141414131313121212111111 111010100F0F0F0E0E0E0E0D0D0D0C0C0C0B0B0B0B0A0A0A09090908080808070707060606050505 05040404030303020202020101010000 > 0 0 1 %_Br [ 1 0 50 92 %_Bs 0 0.275 1 0.12 1 50 59 %_Bs 0 0.275 1 0.42 1 50 50 %_Bs 1 0 50 49 %_Bs 1 0 50 41 %_Bs 1 0.3 0 0 1 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Green, Blue) (Green, Blue) 0 2 Bd [ < 99999A9A9B9B9B9C9C9D9D9D9E9E9F9F9FA0A0A1A1A1A2A2A3A3A3A4A4A5A5A5A6A6A7A7A7A8A8A9 A9A9AAAAABABABACACADADADAEAEAFAFAFB0B0B1B1B1B2B2B3B3B3B4B4B5B5B5B6B6B7B7B7B8B8B9 B9B9BABABBBBBBBCBCBDBDBDBEBEBFBFBFC0C0C1C1C1C2C2C3C3C3C4C4C5C5C5C6C6C7C7C7C8C8C9 C9C9CACACBCBCBCCCCCDCDCDCECECFCFCFD0D0D1D1D1D2D2D3D3D3D4D4D5D5D5D6D6D7D7D7D8D8D9 D9D9DADADBDBDBDCDCDDDDDDDEDEDFDFDFE0E0E1E1E1E2E2E3E3E3E4E4E5E5E5E6E6E7E7E7E8E8E9 E9E9EAEAEBEBEBECECEDEDEDEEEEEFEFEFF0F0F1F1F1F2F2F3F3F3F4F4F5F5F5F6F6F7F7F7F8F8F9 F9F9FAFAFBFBFBFCFCFDFDFDFEFEFFFF > < 000102020304050506070808090A0B0B0C0D0E0E0F101111121314141516171718191A1A1B1C1D1D 1E1F20202122232324252626272829292A2B2C2C2D2E2F2F303132323334353536373838393A3B3B 3C3D3E3E3F404141424344444546474748494A4A4B4C4D4D4E4F5050515253535455565657585959 5A5B5C5C5D5E5F5F606162626364656566676868696A6B6B6C6D6E6E6F7071717273747475767777 78797A7A7B7C7D7D7E7F80808182828384858586878888898A8B8B8C8D8E8E8F9091919293949495 96979798999A9A9B9C9D9D9E9FA0A0A1A2A3A3A4A5A6A6A7A8A9A9AAABACACADAEAFAFB0B1B2B2B3 B4B5B5B6B7B8B8B9BABBBBBCBDBEBEBF > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 1 %_Br [ 1 0.75 0 0 1 50 100 %_Bs 0.6 0 1 0 1 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Orange, Green, Violet) (Orange, Green, Violet) 0 3 Bd [ < F0EFEFEFEEEEEEEDEDEDECECECEBEBEBEAEAEAE9E9E9E8E8E8E7E7E7E6E6E6E5E5E5E4E4E4E3E3E3 E3E2E2E2E1E1E1E0E0E0DFDFDFDEDEDEDDDDDDDCDCDCDBDBDBDADADAD9D9D9D8D8D8D7D7D7D6D6D6 D5D5D5D4D4D4D3D3D3D2D2D2D1D1D1D0D0D0CFCFCFCECECECDCDCDCCCCCCCBCBCBCACACAC9C9C9C8 C8C8C7C7C7C6C6C6C5C5C5C4C4C4C3C3C3C2C2C2C2C1C1C1C0C0C0BFBFBFBEBEBEBDBDBDBCBCBCBB BBBBBABABAB9B9B9B8B8B8B7B7B7B6B6B6B5B5B5B4B4B4B3B3B3B2B2B2B1B1B1B0B0B0AFAFAFAEAE AEADADADACACACABABABAAAAAAA9A9A9A8A8A8A7A7A7A6A6A6A5A5A5A4A4A4A3A3A3A2A2A2A1A1A1 A0A0A0A09F9F9F9E9E9E9D9D9D9C9C9C > < 5455555657575859595A5A5B5C5C5D5E5E5F5F6061616263636465656666676868696A6A6B6B6C6D 6D6E6F6F707171727273747475767677777879797A7B7B7C7C7D7E7E7F8080818282838384858586 87878888898A8A8B8C8C8D8D8E8F8F909191929393949495969697989899999A9B9B9C9D9D9E9E9F A0A0A1A2A2A3A4A4A5A5A6A7A7A8A9A9AAAAABACACADAEAEAFAFB0B1B1B2B3B3B4B5B5B6B6B7B8B8 B9BABABBBBBCBDBDBEBFBFC0C1C1C2C2C3C4C4C5C6C6C7C7C8C9C9CACBCBCCCCCDCECECFD0D0D1D2 D2D3D3D4D5D5D6D7D7D8D8D9DADADBDCDCDDDDDEDFDFE0E1E1E2E3E3E4E4E5E6E6E7E8E8E9E9EAEB EBECEDEDEEEFEFF0F0F1F2F2F3F4F4F5 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000101010101010101010101010101010101010101010101010101010101 01010101010101010101010101010101010101010101010101010101010101010101010101010101 01010101010101010101010101010101010101010101010101010101010101020202020202020202 02020202020202020202020202020202020202020202020202020202020202020202020202020202 02020202020202020202020202020202020202020202020202020202020202020202020202020202 02020202020202020202020303030303 > 1 %_Br < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0 > < A1A0A0A09F9F9F9E9E9E9D9D9D9D9C9C9C9B9B9B9A9A9A9999999898989797979696969595959594 94949393939292929191919090908F8F8F8E8E8E8E8D8D8D8C8C8C8B8B8B8A8A8A89898988888887 878787868686858585848484838383828282818181808080807F7F7F7E7E7E7D7D7D7C7C7C7B7B7B 7A7A7A79797978787878777777767676757575747474737373727272717171717070706F6F6F6E6E 6E6D6D6D6C6C6C6B6B6B6A6A6A6A6969696868686767676666666565656464646363636262626261 61616060605F5F5F5E5E5E5D5D5D5C5C5C5B5B5B5B5A5A5A59595958585857575756565655555554 54 > < F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8 F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFF FF > 0 1 %_Br [ 0.61 0.96 0 0.01 1 50 100 %_Bs 0.94 0.33 1 0 1 50 50 %_Bs 0 0.63 0.96 0 1 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Pink, Yellow, Green ) (Pink, Yellow, Green ) 0 3 Bd [ < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4E4F50 5152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273 > < 05050505050505050505050505050404040404040404040404040404040404040404040403030303 03030303030303030303030303030303030303020202020202020202020202020202020202020202 0201010101010101010101010101010101010101010101000000000000000000000000 > < CCCCCCCCCCCBCBCBCBCBCBCBCBCBCACACACACACACACACAC9C9C9C9C9C9C9C9C9C8C8C8C8C8C8C8C8 C8C7C7C7C7C7C7C7C7C7C6C6C6C6C6C6C6C6C6C5C5C5C5C5C5C5C5C5C4C4C4C4C4C4C4C4C3C3C3C3 C3C3C3C3C3C2C2C2C2C2C2C2C2C2C1C1C1C1C1C1C1C1C1C0C0C0C0C0C0C0C0C0BFBFBF > 0 1 %_Br < 0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A09090909090909090909090909090909090909090808080808080808080808080808080808 08080807070707070707070707070707070707070706060606060606060606060606060606060605 05050505050505050505050505050505050404040404040404040404040404040404030303030303 03030303030303030303030202020202020202020202020202020201010101010101010101010101 010101000000000000000000 > < B2B2B2B2B1B1B1B0B0B0AFAFAEAEAEADADACACABABAAAAA9A9A8A8A7A7A6A6A5A5A4A4A3A3A2A2A1 A0A09F9F9E9E9D9D9C9B9B9A9A999898979796959594949392929190908F8F8E8D8D8C8B8B8A8989 88888786868584848382828180807F7E7D7D7C7B7B7A7979787777767575747372727170706F6E6D 6D6C6B6B6A69686867666565646363626160605F5E5D5D5C5B5A5A59585757565554545352515150 4F4E4D4D4C4B4A4A4948474646454443434241403F3F3E3D3C3B3B3A393837373635343333323130 2F2F2E2D2C2B2B2A2928272726252423222221201F1E1D1D1C1B1A1918181716151413131211100F 0E0E0D0C0B0A090908070605 > < 0000010101020202030304040505060607070808090A0A0B0B0C0C0D0E0E0F0F1011111213131415 151616171818191A1B1B1C1D1D1E1F1F202122222324242526272728292A2A2B2C2C2D2E2F303031 323333343536363738393A3A3B3C3D3E3E3F4041424243444546464748494A4B4B4C4D4E4F505051 5253545556565758595A5B5B5C5D5E5F6061626263646566676869696A6B6C6D6E6F707171727374 75767778797A7B7B7C7D7E7F80818283848586868788898A8B8C8D8E8F9091929394949596979899 9A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAAAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0 C1C2C3C4C5C6C7C8C9CACBCC > 0 1 %_Br [ 0.45 0 0.75 0 1 50 100 %_Bs 0 0.02 0.8 0 1 50 64 %_Bs 0.05 0.7 0 0 1 57 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Purple, Red, Yellow) (Purple, Red, Yellow) 0 3 Bd [ 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A > < CCCCCCCDCDCDCDCDCECECECECECFCFCFCFD0D0D0D0D0D1D1D1D1D1D2D2D2D2D2D3D3D3D3D3D4D4D4 D4D5D5D5D5D5D6D6D6D6D6D7D7D7D7D7D8D8D8D8D8D9D9D9D9DADADADADADBDBDBDBDBDCDCDCDCDC DDDDDDDDDDDEDEDEDEDFDFDFDFDFE0E0E0E0E0E1E1E1E1E1E2E2E2E2E2E3E3E3E3E4E4E4E4E4E5E5 E5E5E5E6E6E6E6E6E7E7E7E7E7E8E8E8E8E9E9E9E9E9EAEAEAEAEAEBEBEBEBEBECECECECECEDEDED EDEEEEEEEEEEEFEFEFEFEFF0F0F0F0F0F1F1F1F1F1F2F2F2F2F3F3F3F3F3F4F4F4F4F4F5F5F5F5F5 F6F6F6F6F6F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFAFAFBFBFBFBFBFCFCFCFCFDFDFDFDFDFEFE FEFEFEFFFFFF > 0 1 %_Br < E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBE BDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A99989796 9594939291908F8E8D8C8B8A898887868584838281807F7E7D7C7B7A797877767574737271706F6E 6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A49484746 4544434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E 1D1C1B1A191817161514131211100F0E0D0C0B0A09080706050403020100 > < E5E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9EAEAEAEA EAEAEAEAEAEBEBEBEBEBEBEBEBEBECECECECECECECECECEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEE EEEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F3F3F3 F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7 F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFCFC FCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFF > < 00010203040405060708090A0B0C0C0D0E0F10111213141415161718191A1B1C1D1D1E1F20212223 242525262728292A2B2C2D2D2E2F30313233343535363738393A3B3C3D3D3E3F4041424344454546 4748494A4B4C4D4E4E4F50515253545556565758595A5B5C5D5E5E5F60616263646566666768696A 6B6C6D6E6E6F70717273747576767778797A7B7C7D7E7F7F80818283848586878788898A8B8C8D8E 8F8F90919293949596979798999A9B9C9D9E9F9FA0A1A2A3A4A5A6A7A7A8A9AAABACADAEAFAFB0B1 B2B3B4B5B6B7B8B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C8C9CACBCC > 0 1 %_Br [ 0 0.04 1 0 1 50 100 %_Bs 0 1 0.8 0 1 50 50 %_Bs 0.9 0.9 0 0 1 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Rainbow) (Rainbow) 0 6 Bd [ < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 1 0 0 1 %_Br 1 < 0708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E 2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F50515253545556 5758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E 7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6 A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCE CFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6 F7F8F9FAFBFCFDFEFF > 0 0 1 %_Br 1 < 00000000000000000000000000000000000001010101010101010101010101010101010101010101 01010101010101010101010101010202020202020202020202020202020202020202020202020202 02020202020202020202030303030303030303030303030303030303030303030303030303030303 03030303030304040404040404040404040404040404040404040404040404040404040404040404 04040505050505050505050505050505050505050505050505050505050505050505050505050606 06060606060606060606060606060606060606060606060606060606060606060606070707070707 07070707070707070707070707070707 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 1 %_Br < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 0 1 0 1 %_Br 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 1 0 1 %_Br [ 0 1 0 0 1 50 100 %_Bs 1 1 0 0 1 50 80 %_Bs 1 0.0279 0 0 1 50 60 %_Bs 1 0 1 0 1 50 40 %_Bs 0 0 1 0 1 50 20 %_Bs 0 1 1 0 1 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Steel Bar) (Steel Bar) 0 3 Bd [ 0 0 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 1 %_Br 0 0 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 1 %_Br [ 0 0 50 100 %_Bs 1 0 50 70 %_Bs 0 0 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (White & Red Radial) (White & Red Radial) 1 18 Bd [ 0 1 1 0 1 %_Br 0 1 1 0 1 %_Br 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 1 %_Br 0 0 0 0 1 %_Br 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 0 1 %_Br 0 1 1 0 1 %_Br 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 1 %_Br 0 0 0 0 1 %_Br 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 0 1 %_Br 0 1 1 0 1 %_Br 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 1 %_Br 0 0 0 0 1 %_Br 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 0 1 %_Br 0 1 1 0 1 %_Br 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 1 %_Br 0 0 0 0 1 %_Br 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 0 1 %_Br [ 0 1 1 0 1 50 0 %_Bs 0 1 1 0 1 50 0 %_Bs 0 1 1 0 1 50 12.5 %_Bs 0 0 0 0 1 50 12.5 %_Bs 0 0 0 0 1 50 25 %_Bs 0 1 1 0 1 50 25 %_Bs 0 1 1 0 1 50 37.5 %_Bs 0 0 0 0 1 50 37.5 %_Bs 0 0 0 0 1 50 50 %_Bs 0 1 1 0 1 50 50 %_Bs 0 1 1 0 1 50 62.5 %_Bs 0 0 0 0 1 50 62.5 %_Bs 0 0 0 0 1 50 75 %_Bs 0 1 1 0 1 50 75 %_Bs 0 1 1 0 1 50 87.5 %_Bs 0 0 0 0 1 50 87.5 %_Bs 0 0 0 0 1 50 100 %_Bs 0 1 1 0 1 50 100 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Yellow & Orange Radial) (Yellow & Orange Radial) 1 2 Bd [ 0 < 0001010203040506060708090A0B0C0C0D0E0F10111213131415161718191A1B1C1D1D1E1F202122 232425262728292A2B2B2C2D2E2F303132333435363738393A3B3C3D3E3E3F404142434445464748 494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60606162636465666768696A6B6C6D6E6F 707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C > < FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9 F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F4F4F4F4F4F3F3F3F3F3F3F2F2F2F2 F2F2F1F1F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEEEEEEEEEEEDEDEDEDEDEDECECECECECEBEBEBEBEB EBEAEAEAEAEAE9E9E9E9E9E9E8E8E8E8E8E8E7E7E7E7E7E6E6E6E6E6E5 > 0 1 %_Br [ 0 0 1 0 1 52 19 %_Bs 0 0.55 0.9 0 1 50 100 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Yellow & Purple Radial) (Yellow & Purple Radial) 1 2 Bd [ < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 1415161718191A1B1C1D1E1F1F202122232425262728292A2A2B2C2D2E2F30313233343536363738 393A3B3C3D3E3F40414142434445464748494A4B4C4D4D4E4F50515253545556575858595A5B5C5D 5E5F60616263646465666768696A6B6C6D6E6F6F707172737475767778797A7B7B7C7D7E7F808182 83848586868788898A8B8C8D8E8F90919292939495969798999A9B9C9D9D9E9FA0A1A2A3A4A5A6A7 A8A9A9AAABACADAEAFB0B1B2B3B4B4B5B6B7B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C9CACBCB CCCDCECFD0D1D2D3D4D5D6D7D7D8D9DADBDCDDDEDFE0E1E2E2E3E4E5E6E7E8E9EAEBECEDEEEEEFF0 F1F2F3F4F5F6F7F8F9F9FAFBFCFDFEFF > < ABAAAAA9A8A7A7A6A5A5A4A3A3A2A1A1A09F9F9E9D9D9C9B9B9A9999989797969595949393929191 908F8F8E8D8D8C8B8B8A8989888787868585848383828181807F7F7E7D7D7C7B7B7A797978777776 7575747373727171706F6F6E6D6D6C6B6B6A6969686767666565646362626160605F5E5E5D5C5C5B 5A5A5958585756565554545352525150504F4E4E4D4C4C4B4A4A4948484746464544444342424140 403F3E3E3D3C3C3B3A3A3938383736363534343332323130302F2E2E2D2C2C2B2A2A292828272626 25242423222121201F1F1E1D1D1C1B1B1A1919181717161515141313121111100F0F0E0D0D0C0B0B 0A090908070706050504030302010100 > 0 1 %_Br [ 0 0.08 0.67 0 1 50 14 %_Bs 1 1 0 0 1 50 100 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Yellow, Violet, Orange, Blue) (Yellow, Violet, Orange, Blue) 0 4 Bd [ < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < A1A1A1A1A2A2A2A2A3A3A3A3A4A4A4A4A4A5A5A5A5A6A6A6A6A7A7A7A7A8A8A8A8A9A9A9A9AAAAAA AAAAABABABABACACACACADADADADAEAEAEAEAFAFAFAFB0B0B0B0B0B1B1B1B1B2B2B2B2B3B3B3B3B4 B4B4B4B5B5B5B5B6B6B6B6B6B7B7B7B7B8B8B8B8B9B9B9B9BABABABABBBBBBBBBCBCBCBCBCBDBDBD BDBEBEBEBEBFBFBFBFC0C0C0C0C1C1C1C1C2C2C2C2C2C3C3C3C3C4C4C4C4C5C5C5C5C6C6C6C6C7C7 C7C7C8C8C8C8C8C9C9C9C9CACACACACBCBCBCBCCCCCCCCCDCDCDCDCECECECECECFCFCFCFD0D0D0D0 D1D1D1D1D2D2D2D2D3D3D3D3D4D4D4D4D4D5D5D5D5D6D6D6D6D7D7D7D7D8D8D8D8D9D9D9D9DADADA DADADBDBDBDBDCDCDCDCDDDDDDDDDEDE > < F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CF CECDCCCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B4B3B2B1B0AFAEADACABAAA9 A8A7A6A5A4A3A2A1A09F9E9D9C9C9B9A999897969594939291908F8E8D8C8B8A8988878685848483 8281807F7E7D7C7B7A797877767574737271706F6E6D6C6C6B6A696867666564636261605F5E5D5C 5B5A59585756555454535251504F4E4D4C4B4A494847464544434241403F3E3D3C3C3B3A39383736 3534333231302F2E2D2C2B2A29282726252424232221201F1E1D1C1B1A191817161514131211100F 0E0D0C0C0B0A09080706050403020100 > 0 1 %_Br < 9C9B9A9A9998989796969595949393929191908F8F8E8E8D8C8C8B8A8A8989888787868585848383 82828180807F7E7E7D7C7C7B7B7A797978777776757574747372727170706F6E6E6D6D6C6B6B6A69 6968676766666564646362626161605F5F5E5D5D5C5B5B5A5A595858575656555454535352515150 4F4F4E4D4D4C4C4B4A4A4948484746464545444343424141403F3F3E3E3D3C3C3B3A3A3939383737 36353534333332323130302F2E2E2D2C2C2B2B2A292928272726252524242322222120201F1E1E1D 1D1C1B1B1A191918171716161514141312121111100F0F0E0D0D0C0B0B0A0A090808070606050404 030302010100 > < F5F4F4F4F3F3F3F2F2F2F1F1F1F0F0F0EFEFEFEEEEEEEDEDEDECECECEBEBEAEAEAE9E9E9E8E8E8E7 E7E7E6E6E6E5E5E5E4E4E4E3E3E3E2E2E2E1E1E1E0E0E0DFDFDEDEDEDDDDDDDCDCDCDBDBDBDADADA D9D9D9D8D8D8D7D7D7D6D6D6D5D5D5D4D4D3D3D3D2D2D2D1D1D1D0D0D0CFCFCFCECECECDCDCDCCCC CCCBCBCBCACACAC9C9C8C8C8C7C7C7C6C6C6C5C5C5C4C4C4C3C3C3C2C2C2C1C1C1C0C0C0BFBFBFBE BEBEBDBDBCBCBCBBBBBBBABABAB9B9B9B8B8B8B7B7B7B6B6B6B5B5B5B4B4B4B3B3B3B2B2B1B1B1B0 B0B0AFAFAFAEAEAEADADADACACACABABABAAAAAAA9A9A9A8A8A8A7A7A6A6A6A5A5A5A4A4A4A3A3A3 A2A2A2A1A1A1 > < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5 > < 03030303030202020202020202020202020202020202020202020202020202020202020202020202 02020202020202020202020202020202020202020202020202020202020202020202020202020202 02020202020202020202020202020202020202020201010101010101010101010101010101010101 01010101010101010101010101010101010101010101010101010101010101010101010101010101 01010101010101010101010101010101010101010101010101010101010101010101010101000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000 > 1 %_Br < 0D0D0E0F0F10101111121313141415161617171819191A1A1B1C1C1D1D1E1E1F2020212122232324 2425262627272828292A2A2B2B2C2D2D2E2E2F30303131323333343435353637373838393A3A3B3B 3C3D3D3E3E3F3F404141424243444445454647474848494A4A4B4B4C4C4D4E4E4F4F505151525253 54545555565757585859595A5B5B5C5C5D5E5E5F5F60616162626363646565666667686869696A6B 6B6C6C6D6E6E6F6F70707172727373747575767677787879797A7B7B7C7C7D7D7E7F7F8080818282 8383848585868687878889898A8A8B8C8C8D8D8E8F8F90909192929393949495969697979899999A 9A9B9C > < 08090A0B0C0D0E0F0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E 2F303132333435363738393A3B3C3D3E3F40404142434445464748494A4B4C4D4E4F505152535455 565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717172737475767778797A7B7C 7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A2A3 A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACB CCCDCECFD0D1D2D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2 F3F4F5 > < F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCB CAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3 A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A898887868584838281807F7E7D7C7B 7A797877767574737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5A59585756555453 5251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B 2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A09080706050403 020100 > < 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000101010101010101010101010101010101010101010101010101010101010101 01010101010101010101010101010101010101010101010101010101010101010101010101010101 01010101010101010101010101010101010101010101010202020202020202020202020202020202 02020202020202020202020202020202020202020202020202020202020202020202020202020202 02020202020202020202020202020202020202020202020202020202020202020202020202020303 030303 > 1 %_Br [ 1 0.87 0 0 1 50 95 %_Bs 0 0.63 0.96 0 1 50 65 %_Bs 0.61 0.96 0 0.01 1 50 35 %_Bs 0.05 0.03 0.95 0 1 50 5 %_Bs BD %AI5_EndGradient %AI5_End_NonPrinting-- %AI5_BeginPalette 0 0 Pb 0 0 0 0 k Pc 0 0 0 1 k Pc 0 0.45 0.6 0 k Pc 0 0.5 0.05 0 k Pc 0 0.9 1 0 k Pc 1 0.2 1 0 k Pc 1 0.4 0.15 0 k Pc 0.2 0 1 0 k Pc 0.25 1 0.25 0 k Pc 0.4 0.4 0.4 0 k Pc 0.4 0.7 1 0 k Pc 0.75 0.9 0 0 k Pc 1 0 0.55 0 (Aqua) 0 x Pc 1 0.5 0 0 (Blue) 0 x Pc 0.5 0.4 0.3 0 (Blue Gray) 0 x Pc 0.8 0.05 0 0 (Blue Sky) 0 x Pc 0.5 0.85 1 0 (Brown) 0 x Pc 1 0.9 0.1 0 (Dark Blue) 0 x Pc 1 0.55 1 0 (Forest Green) 0 x Pc 0.05 0.2 0.95 0 (Gold) 0 x Pc 0.75 0.05 1 0 (Grass Green) 0 x Pc 0 0.45 1 0 (Orange) 0 x Pc 0.15 1 1 0 (Red) 0 x Pc 0.45 0.9 0 0 (Violet) 0 x Pc Bb 2 (Black, White) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Chrome) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Green, Blue) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Orange, Green, Violet) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Pink, Yellow, Green ) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Purple, Red, Yellow) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Rainbow) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Steel Bar) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 0 0 0 0 Bh 2 (White & Red Radial) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 0 0 0 0 Bh 2 (Yellow & Orange Radial) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 0 0 0 0 Bh 2 (Yellow & Purple Radial) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Yellow, Violet, Orange, Blue) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc (Arrow1.2.out/in) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Arrow1.2.side) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Bricks) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Checks) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Confetti) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (DblLine1.2.inner) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (DblLine1.2.outer) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (DblLine1.2.side) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Diamonds) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Hexagon) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Laurel.inner) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Laurel.outer) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Laurel.side) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Leaves-fall) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Polka dots) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Random circles) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Rope.side) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Scales) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (SolidStar.side) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Stars) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Stripes) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (TriBevel.outer) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (TriBevel.side) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Waves-scroll) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc 1 1 1 1 k Pc 1 g Pc 0 g Pc 0.75 g Pc 0.5 g Pc 0.25 g Pc 0 g Pc Bb 2 (Black & White) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc 0.25 0 0 0 k Pc 0.5 0 0 0 k Pc 0.75 0 0 0 k Pc 1 0 0 0 k Pc 0.25 0.25 0 0 k Pc 0.5 0.5 0 0 k Pc 0.75 0.75 0 0 k Pc 1 1 0 0 k Pc 0 g Pc 0 0.25 0 0 k Pc 0 0.5 0 0 k Pc 0 0.75 0 0 k Pc 0 1 0 0 k Pc 0 0.25 0.25 0 k Pc 0 0.5 0.5 0 k Pc 0 0.75 0.75 0 k Pc 0 1 1 0 k Pc 0 g Pc 0 0 0.25 0 k Pc 0 0 0.5 0 k Pc 0 0 0.75 0 k Pc 0 0 1 0 k Pc 0.25 0 0.25 0 k Pc 0.5 0 0.5 0 k Pc 0.75 0 0.75 0 k Pc 1 0 1 0 k Pc (Yellow Stripe) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc 0.25 0.125 0 0 k Pc 0.5 0.25 0 0 k Pc 0.75 0.375 0 0 k Pc 1 0.5 0 0 k Pc 0.125 0.25 0 0 k Pc 0.25 0.5 0 0 k Pc 0.375 0.75 0 0 k Pc 0.5 1 0 0 k Pc 0 0.25 0.125 0 k Pc 0 0.5 0.25 0 k Pc 0 0.75 0.375 0 k Pc 0 1 0.5 0 k Pc 0 0.125 0.25 0 k Pc 0 0.25 0.5 0 k Pc 0 0.375 0.75 0 k Pc 0 0.5 1 0 k Pc 0.125 0 0.25 0 k Pc 0.25 0 0.5 0 k Pc 0.375 0 0.75 0 k Pc 0.5 0 1 0 k Pc 0.25 0 0.125 0 k Pc 0.5 0 0.25 0 k Pc 0.75 0 0.375 0 k Pc 1 0 0.5 0 k Pc 0.25 0.125 0.125 0 k Pc 0.5 0.25 0.25 0 k Pc 0.75 0.375 0.375 0 k Pc 1 0.5 0.5 0 k Pc 0.25 0.25 0.125 0 k Pc 0.5 0.5 0.25 0 k Pc 0.75 0.75 0.375 0 k Pc 1 1 0.5 0 k Pc 0.125 0.25 0.125 0 k Pc 0.25 0.5 0.25 0 k Pc 0.375 0.75 0.375 0 k Pc 0.5 1 0.5 0 k Pc 0.125 0.25 0.25 0 k Pc 0.25 0.5 0.5 0 k Pc 0.375 0.75 0.75 0 k Pc 0.5 1 1 0 k Pc 0.125 0.125 0.25 0 k Pc 0.25 0.25 0.5 0 k Pc 0.375 0.375 0.75 0 k Pc 0.5 0.5 1 0 k Pc 0.25 0.125 0.25 0 k Pc 0.5 0.25 0.5 0 k Pc 0.75 0.375 0.75 0 k Pc 1 0.5 1 0 k Pc PB %AI5_EndPalette %%EndSetup %AI5_BeginLayer 1 1 1 1 0 0 0 79 128 255 Lb (\203\214\203C\203\204\201| 1) Ln 0 A 0 O 0 g 800 Ar 2 J 0 j 1 w 2 M []0 d %AI3_Note: 0 D 0 XR 101.7998 199.2002 m 106.2998 199.1001 111.2998 198.5 115.7998 197.8999 C 115.7998 197.7998 L 122.2998 196.2998 129.7998 194.7998 135.7998 191.6001 C 131.5 191.2002 127.8999 190.8999 124.1001 191.8999 C 122 189.7002 119.2002 194.1001 117.7002 190.7998 C 117 191.2002 115.5 192.3999 115.2002 191.2998 C 114.7998 191.1001 114.5 190.1001 113.8999 190.2998 C 112.3999 191.2002 112.1001 193.7998 110.3999 194 C 109.8999 193.1001 110.2002 192.3999 110.3999 191.7998 C 108.5 190.1001 107.7998 193.1001 106.2998 193.8999 C 105.3999 193.2998 105.5 193.1001 105.3999 192.1001 C 104.2002 192.1001 102.7002 193 102 193.7002 C 101.3999 192.2002 100.3999 192.5 99.2002 193 C 96.7998 195.1001 L 95.2002 195.2002 96.2998 193.5 95.6001 193 C 94.2998 193.1001 92.8999 194.1001 92.2002 195.3999 C 91.7998 195.2998 90.8999 195.7002 91 194.7998 C 91.2998 193.6001 91.2002 193.7998 90.7998 193 C 89 192.3999 87.7998 196 86.6001 193.2002 C 85.2002 192.6001 84.3999 194 82.8999 194 C 83.1001 193.1001 82 193.1001 81.3999 193 C 80.8999 193.1001 80.2002 193.2998 79.6001 193.6001 C 79 193.7998 78.6001 194.7002 77.7998 194.5 C 77.7002 193.7002 77.2002 193.2002 77.5 192.3999 C 76.3999 192.1001 75.2998 192.2002 74.2002 193.2002 C 72.8999 193.2002 73.6001 191.2002 72.3999 191.3999 C 71.7998 191 71.2002 191.5 70.3999 191.8999 C 69.7002 192.2002 69.2998 191.3999 69.2002 190.8999 C 68.5 190.3999 67.1001 189.5 65.8999 190.2998 C 65.6001 190.6001 L 64.2998 187.7998 60.6001 190 58.6001 187.7002 C 58.2998 186.2002 56.8999 187.8999 55.7998 187.6001 C 52.8999 186.1001 51.6001 182 48 183.1001 C 47.7998 182.7998 L 47.6001 182.8999 L 42.1001 178.6001 36.1001 175.5 30.7998 171.2002 C 30.7998 171.6001 L 32.2002 172.7002 33.1001 174.2002 34.3999 175 C 35.2002 175.7998 36.7998 176.7002 37.7002 177.7998 C 37.7002 177.7002 L 38.3999 178.1001 39.3999 179.6001 40.2998 180 C 40.3999 179.8999 L 42 181.3999 44.8999 182.5 46.6001 184.1001 C 47.7002 184.3999 48.6001 185.2998 49.6001 185.6001 C 49.5 186.1001 50.1001 186.2998 50.3999 186.2002 C 50.2998 186.3999 L 52.3999 187.7998 55.2998 188.7998 56.8999 190 C 57.2002 189.7002 57.7002 189.8999 58 190.2002 C 58.5 190.5 59.5 191.1001 60.3999 191 C 61.3999 192.6001 63.5 192.3999 64.8999 193.1001 C 64.8999 193.2998 L 65.6001 193.2998 L 65.6001 193.6001 L 67.8999 194.1001 69.8999 194.8999 72.2002 195.3999 C 72.6001 195.7002 L 77.1001 196.3999 81.1001 197.7998 85.3999 198.3999 C 85.8999 198.3999 86.2998 198 86.6001 198.6001 C 86.6001 198.5 L 90.6001 198.7998 94 199.2998 98.2002 199.3999 C 99.2002 199 100.7002 199.2998 101.7998 199.2002 C f 151.8999 193.7002 m 151.6001 192.6001 152.5 193.2998 152.5 192.5 C 152.2998 190.7002 152.3999 189.3999 153.6001 187.8999 C 153.7998 187.7002 L 154 187.5 155.3999 187.6001 155.8999 187.6001 C 161.2002 188.8999 167 187.8999 171.7002 188.5 C 171.7002 188.3999 L 173.6001 188 176.5 189.2002 178.1001 187.6001 C 178.2998 187.7998 L 179 186.8999 179.5 185.7998 179 184.7998 C 179.2998 183 179.2002 181.8999 179.2002 180.2002 C 179.2998 179.6001 178.7002 178.5 179.2998 178 C 179.6001 177.5 178.6001 177.1001 179.2998 176.6001 C 178.7002 175.6001 178.7998 174.5 179.2002 173.2998 C 179 173.2998 L 178.7002 171 179 169 178.8999 166.2998 C 178.5 166 177.7998 165 176.8999 165 C 176 165.2998 174.5 165.2002 174.3999 166.2998 C 174.5 167.1001 174.1001 168.2002 173.8999 168.7002 C 173.7998 170.5 174 172.6001 173.7998 174.6001 C 173.8999 174.6001 L 173.8999 181.2002 L 170.7002 183.7998 166.5 182.2998 163 182.5 C 161.2998 180.5 160.6001 176.3999 161.2998 173.6001 C 161.6001 173.5 L 160.5 173.1001 161.7998 172.7002 161.6001 172 C 162 169.7998 161.7002 168.7998 161.6001 166.3999 C 160.8999 165.7002 160.2002 165.1001 159.2002 164.6001 C 158.2002 164.7998 156.7002 165.3999 156.1001 166.7002 C 156.2998 167.3999 155.8999 168.1001 155.5 168.5 C 155.6001 170.1001 155.3999 172.1001 156 173.6001 C 155.5 174.2002 156.6001 174.8999 155.7998 175.2002 C 156.1001 175.7002 L 156.1001 180.3999 L 155.2998 181.2998 155.3999 182.3999 154 182.8999 C 152.5 183.5 151.1001 182.7002 149.5 182.6001 C 147.6001 182.7002 145.8999 183.3999 144.3999 182.2002 C 141.6001 179.5 142.8999 174.6001 143.2998 171.6001 C 143.2002 169.5 143.7998 167 142.2002 165.3999 C 141.3999 164.7002 140.2998 164.5 139.3999 164.6001 C 138 165.2002 139.6001 166.6001 138.2002 167.3999 C 138.2002 167.7998 139 168.2002 138.2002 168.5 C 138.3999 170.7998 138.5 173.3999 138 175.3999 C 138.2002 175.3999 L 138.2998 176.2998 138.2002 176.2002 138.1001 177.1001 C 138 177.1001 L 138.6001 178 137.2998 178.6001 137.7998 179.7998 C 137.3999 179.8999 L 137.5 179.8999 L 137.2002 180.6001 137.2002 181.5 136.7002 182.2002 C 133.5 181.7002 127 184.1001 125.5 179.2002 C 125.7002 177.8999 125.2002 175.6001 125.5 173.7998 C 125.3999 171.2002 125.2998 167.8999 125.2002 166.2002 C 125.2998 166.2998 L 125 166.6001 125.6001 164.7998 124.3999 165 C 123.5 164.5 121.8999 164.5 121 165 C 120.3999 166.1001 120.7998 168 120 169 C 120.2998 172.6001 119.3999 175.6001 120.3999 178.8999 C 120 178.7998 L 120.2002 179.7002 119.7998 180.2002 120.5 181.2002 C 120.5 183.3999 120.5 183.6001 120.5 186 C 121 186.6001 121.3999 186.2002 121.7998 187.1001 C 121.7998 187 L 122.5 188.5 123.8999 187 125.2002 187.1001 C 131.2002 187.8999 136.7002 187.2998 142.1001 187.8999 C 143.5 188.2002 144.8999 187.6001 146.2998 188.2998 C 146.3999 189.2002 146.6001 190.1001 146.8999 190.6001 C 146.7002 190.6001 147.2002 192.2002 147 192.6001 C 147.3999 193.3999 147.8999 194.2002 148.8999 194.7998 C 150.1001 195.2002 151.2998 194.1001 151.8999 193.7002 C f 87.7002 185.2998 m 88.2998 184.7002 88.2998 184 88.1001 183.3999 C 87.6001 181.1001 L 87.7998 180.7998 87.6001 180 87.7002 179.6001 C 87.6001 179.7998 L 87 178.3999 87.2002 177.1001 87 175.7998 C 86.7002 174.8999 87.2998 174 86.6001 173.2002 C 86.8999 171.7998 86.6001 170.5 86.8999 169.3999 C 87.2998 168.8999 87 167.5 87.5 166.8999 C 87.7998 166.5 88.7998 166.5 88.8999 167.3999 C 88.8999 168.6001 L 89.1001 168.5 89.2002 168.7002 89.2998 168.7998 C 89 169.1001 L 89.6001 169.1001 88.8999 170 89.2002 170.3999 C 88.7998 170.7998 L 89.7998 170.7998 88.8999 171.6001 89.2998 172.1001 C 89 172.2998 L 89.7002 172.7002 89.2002 173.5 89.8999 173.8999 C 89.6001 174.5 L 89.7998 174.3999 89.7998 174.5 89.8999 174.6001 C 89.3999 176 90.6001 177.8999 90.7002 179.2998 C 91.1001 180.8999 92.2998 183.1001 92.5 184.2998 C 93.1001 185 L 93.5 184.7002 L 93.2998 182 92.8999 178.7998 92.8999 176.2002 C 92.3999 174.5 92.7002 173.3999 93.1001 172 C 93.3999 172 L 93 171.6001 L 93.8999 171.1001 93.5 172 94.1001 172.2998 C 93.3999 173.1001 95.1001 173.3999 94.3999 174.2002 C 94.3999 174.1001 94.5 174.1001 94.6001 174 C 94.5 174.7002 95.7002 175.7002 95.2998 177 C 96.3999 177.1001 94.8999 178.5 96.2002 178.6001 C 96.3999 179.8999 L 96.6001 179.6001 L 96.7002 181.1001 97.2998 181.7998 98 183.1001 C 97.6001 183.7002 98.5 184 98.5 184.3999 C 99 184.3999 L 99.1001 182.5 98.8999 180.8999 98.8999 179.2998 C 98.2998 177.5 98.7998 174.8999 98.2002 173.2002 C 98.5 172.6001 98.7998 172.2998 99.6001 172.2998 C 99.8999 173.5 100.5 174.2998 100.3999 175.2998 C 101.2998 175.8999 101.2002 177.6001 101.5 178.2998 C 101.7002 178.5 102 178.2998 102.1001 178.6001 C 101.7998 179.3999 102.7002 180.7002 103.2002 181.3999 C 102.8999 182.3999 103.7998 182.5 103.7998 183.2002 C 103.7998 181.7002 104.7998 180.6001 103.7998 179.3999 C 104.1001 177.2998 103.2998 175.7002 104.2998 173.7998 C 104.6001 174 105 174.1001 104.8999 174.6001 C 104.8999 174.3999 105.2002 174.3999 105.2002 174.6001 C 105.3999 175 105.2998 175.6001 105.3999 176 C 105.5 175.8999 L 105.8999 176.2002 105.7002 177.2998 106 178 C 106.2002 177.8999 106.3999 178.1001 106.2998 178.2998 C 106.3999 178.6001 107.1001 179.2002 107 179.5 C 107.2002 179.3999 L 107.2002 180.1001 108.2998 180.1001 108.2002 181.1001 C 108.6001 181.7002 L 108.7998 181.3999 109 180.7002 109.3999 180.1001 C 108.7002 180 109.3999 179.2998 108.7998 179.2998 C 109 177.2998 107.6001 175.1001 108.7002 173.7998 C 108.3999 173.5 108.8999 173.2002 109.1001 173 C 109.7998 173.7002 110.6001 175 111.1001 176 C 111 176.7002 111.7998 177.2002 111.7002 177.7998 C 112.2998 177.7998 L 112.6001 179.5 L 112.6001 179.2998 L 112.8999 179.3999 113 180.1001 113.3999 180.6001 C 113.3999 180.5 L 113.7998 180.8999 114.5 180.2002 114.2002 179.7998 C 113.6001 178.3999 113.5 176.7998 113 175.2998 C 113.1001 174.3999 113.1001 173.6001 112.6001 172.8999 C 113.3999 172.2002 L 113.7002 172.5 114.2002 172.8999 113.8999 173.2998 C 115 173.3999 114.5 174.1001 115.2998 174.7998 C 115.3999 175.2002 116.2002 175.6001 116.2002 176.3999 C 116.5 172.2998 115.8999 168.2998 116.2998 164 C 116 163.7998 L 113.2998 165.8999 109 165.7002 105.5 165.7002 C 98 163.1001 91.5 155.5 82.8999 159.1001 C 80.2002 161.8999 77.6001 167.5 72.5 165.7002 C 65.2998 163.8999 58.5 157.2002 50.8999 154.7002 C 46.8999 153.7998 43.2998 151.8999 39.5 151.7998 C 35.6001 152.5 30.3999 152.8999 28 149.6001 C 27.6001 148 26.5 145.8999 26.7998 144.1001 C 25.8999 141.5 24.3999 139.5 22 139.1001 C 17.2002 137.2002 13.6001 133.3999 9.2002 130.7002 C 9 131 9.2998 131.7002 8.7998 131.8999 C 9.5 132.7998 L 9.7998 133 9.5 134.2002 10.3999 134.3999 C 10.1001 134.7998 L 10.8999 135 12.2998 134.7002 12.6001 135.7998 C 12.5 138.1001 L 12.6001 138.1001 L 12.6001 138.3999 L 13 138.3999 L 12.5 139 13.1001 138.2002 13.2002 139.1001 C 13.5 139.7998 12.5 140.7002 13.7002 141 C 14.2998 140.6001 14.7002 140.7998 15.5 141 C 16.1001 141.3999 15.7998 142.8999 15.7002 143.2998 C 14.7002 144 16 144.2998 16.2998 145.1001 C 17 144.7998 16.8999 143.7002 17.7998 144.2002 C 17.7998 144.1001 17.7002 143.8999 17.8999 143.8999 C 18.1001 144.2002 18.7998 144.5 18.7002 145.2002 C 18.5 146.3999 18.2002 147.8999 19.1001 148.7002 C 19.6001 147.8999 20.5 147.7002 20.6001 146.8999 C 21 146.8999 L 21.2002 149 L 21.3999 148.8999 L 21.3999 150.1001 21 149.3999 21.7998 150.5 C 21.3999 151.1001 L 21.7002 150.8999 21.7002 151.2998 21.7998 151.3999 C 21.6001 151.7998 21.6001 152.2002 21.7002 152.6001 C 21.7998 151.2998 22.7998 151.6001 23.2002 150.5 C 23.6001 150.3999 24.5 150.3999 24.5 151.2002 C 25.2002 151.8999 24.1001 152.7002 24.5 153.6001 C 24.1001 154 L 24.2002 154 L 24.3999 155.8999 L 25 155.6001 25.7998 153.1001 27 153.7002 C 27.2998 154.2998 27.1001 155.2002 27.3999 155.7998 C 26.8999 156.7002 27.2998 157.5 27.1001 158.7998 C 27.3999 158.2998 L 27.6001 158.5 L 28 158 L 27.7998 157.8999 L 29 156.5 L 28.8999 156.3999 L 29.3999 155.8999 L 30.2998 157 29.7002 159.3999 29.8999 160.8999 C 31.2998 159 L 31.3999 159.1001 L 31.2002 158.5 32.3999 158.2002 32.6001 157.7002 C 33.3999 158.2998 L 32.8999 158.7998 33.2998 161.1001 32.5 161.6001 C 32.8999 162.5 32.1001 162.6001 32 163.3999 C 32.2002 163.2998 L 32.3999 163.5 32.2002 163.8999 32.2998 164.2002 C 32 164.2002 L 32 164.8999 L 32.3999 164.2998 L 32.6001 164.7998 L 32.6001 163.2998 33.8999 163.7002 34.1001 162.3999 C 34.2002 162.5 L 34.5 161.1001 35.3999 160.3999 35.8999 159.1001 C 35.8999 158.5 36.2998 157.8999 36.7998 157.7998 C 37.8999 158.3999 37.2998 159.7998 37.2998 160.8999 C 37.2998 161.5 L 37.2002 161.3999 L 36.6001 161.7998 37.5 163.6001 36.3999 164 C 36.3999 167.2998 L 36.6001 166.7998 36.5 166.6001 36.7002 166.1001 C 36.8999 166.1001 36.7998 166.2998 36.7998 166.3999 C 38.7998 163.8999 39.2002 160.8999 42 159.1001 C 42.5 160.2002 41.7998 162.3999 41.3999 163.7998 C 41.2002 163.7002 41.2998 163.3999 41.2998 163.2002 C 41.7002 164.7002 40.5 165.5 40.6001 167 C 40.1001 167.2002 40.5 167.5 40.6001 167.7998 C 40 168.2002 40 169.2998 40.1001 169.8999 C 41.3999 170.3999 41 168.2002 41.8999 168.1001 C 42 167.2998 42.3999 166.7998 43 166.3999 C 43.2998 166.2002 42.3999 165.2002 43.3999 165.3999 C 43.1001 165 43.7998 164.7998 43.7998 164.5 C 44 164.5 L 44.2002 163.7002 45.5 161.7998 46.2002 161.5 C 46.2002 160.8999 46.7998 160.6001 47.2998 160.2998 C 47.8999 160.7998 47.5 161.7998 47.7998 162.1001 C 47.2002 162.3999 47.7998 162.7998 47.3999 163.2002 C 47.5 163.2002 L 47.2002 164.1001 46.6001 164.2998 47 165.3999 C 46 165.2002 47 166.2998 46.2002 166.7002 C 46.2998 167.3999 45.3999 168.8999 45 169.7002 C 44.7002 170.7998 45.2998 172.1001 44.8999 173 C 45.2002 173.1001 45.3999 173.3999 45.6001 173.6001 C 45.7998 173 L 46.1001 173.2998 L 45.7998 172.2998 47.1001 172 46.7998 171 C 47.5 170.1001 47.7002 169.3999 48.5 168.1001 C 48.1001 167.5 49.3999 167.2998 49.2998 167 C 49.3999 167.2002 49.3999 165.3999 49.8999 166.1001 C 50.7002 165.1001 50.7998 163.2002 52.1001 162.7002 C 52.6001 162.7002 52.6001 163.7002 52.6001 164 C 51.6001 165.5 52.3999 167.7002 51.5 169.3999 C 51.3999 170.6001 50.7002 172.2998 51.1001 173.2002 C 50.8999 173.3999 L 51.2998 173.8999 50.6001 175.1001 51 175.8999 C 52.6001 175.8999 52.6001 173.7002 53.7998 172.6001 C 53.7998 171.7002 53.8999 170.1001 55 169.2998 C 54.6001 169 55 168.7002 55.1001 168.3999 C 55.3999 168.2998 55.2998 167.3999 55.7998 167.2998 C 55.8999 166.8999 56 166.1001 56.8999 166.1001 C 57.1001 166.2998 57.7002 166.2998 57.5 166.7998 C 57.6001 166.7998 57.7002 166.7002 Y 58.1001 167 57.7998 167.2998 57.6001 167.5 C 57.7002 167.5 L 57.6001 167.8999 L 57.7002 167.8999 57.7998 167.7998 Y 57.7998 168.5 L 57.5 168.5 L 57.6001 168.1001 57.8999 169.2002 57.5 169.2998 C 57.5 169.7002 57.3999 170 57.2002 170.2998 C 57.3999 170.2002 L 57.1001 170.7002 57.5 171.1001 56.8999 171.6001 C 57 171.6001 L 57.5 173.3999 55.6001 175.2002 56.6001 177.1001 C 56.6001 177.8999 56.2002 178 56.5 178.7998 C 58.2002 179.5 57.7002 177.1001 58.2998 176.2998 C 58.3999 176.3999 L 58.7002 175.8999 58.7998 175 59.2002 174.7998 C 59.6001 174.2002 58.2002 173.5 59.3999 173 C 59.5 173.2002 L 59.5 172.6001 60.7002 171.7998 60.5 171 C 60.8999 170.8999 60.7002 170.2002 61 169.8999 C 61.7998 169.1001 L 62.2998 169.2002 62.2002 169.7002 62.2998 170 C 61.8999 170.5 62.3999 170.8999 62.2002 171.5 C 62.2998 171.5 L 62.3999 172.1001 62.1001 173.1001 62.3999 173.8999 C 62 174.2002 L 62.8999 176.2002 61.7998 178.3999 62.2998 180.6001 C 62.7998 180.1001 62.8999 181.1001 63.3999 181 C 63.7002 179.3999 64.2002 178.2998 64.2998 176.6001 C 64.3999 176.7998 L 64.2002 175.6001 65.2002 174.2998 65.2998 172.8999 C 65.6001 172.8999 L 65.5 172.2998 65.7002 171.8999 65.8999 171.3999 C 66.2998 171.1001 67 171.6001 66.7002 172.1001 C 67 171.7998 L 67.2998 172.8999 67.2998 175.1001 67 176.2998 C 67.3999 177.3999 67.2002 178.7998 67.1001 180.1001 C 67.2002 180.1001 67.3999 180.1001 67.3999 180.2002 C 67.1001 180.5 67.8999 180.2998 67.7002 180.7998 C 67.7002 181.3999 L 67.8999 181.3999 68 181.7002 68.2002 181.7998 C 68.2002 182 67.6001 182.3999 68.2002 182.3999 C 69.1001 182 68.7002 180.5 69.5 179.5 C 69.3999 177 70.1001 175.6001 70.2002 173.2002 C 70.2998 173.1001 70.3999 173.2002 70.3999 173.2998 C 70.2998 173.2998 70.6001 172.7998 70.8999 172.6001 C 71.7002 172.6001 71.1001 172.6001 71.6001 172.3999 C 72.1001 173 72.1001 173.5 72.1001 174.2002 C 72.3999 174 L 72.6001 174.2002 L 72.2002 175 72.7998 176.3999 72.6001 177 C 73.1001 178.2998 72.7998 179.1001 73.6001 180.2002 C 73.2002 180.2002 L 73.6001 181 73.2002 182.5 74.2002 183 C 74.2002 183.7998 L 74.5 184.2002 74.8999 183.6001 75.2002 184 C 75.1001 182.2002 75.8999 180.2998 75.7002 178.3999 C 75.7002 178.6001 75.7998 178.7998 75.6001 178.8999 C 75 177.2002 76.1001 175.7002 76.1001 174 C 76.3999 173.7998 76.7002 173.6001 76.7998 173.2002 C 77.5 173.3999 77.2998 173.8999 77.5 174.6001 C 77.7002 174.6001 77.8999 174.5 78 174.7002 C 77.5 174.7998 77.8999 175.6001 78.1001 175.8999 C 77.8999 176 77.8999 176.2998 78.1001 176.3999 C 78.3999 177.3999 78.6001 178.2998 78.5 179.3999 C 78.6001 179.2998 L 79.2998 180.7002 79 181.7002 79.7998 182.7998 C 80 183.6001 80.7002 184.2998 80.7998 184.8999 C 81.1001 181 80.6001 176.7002 81 172.8999 C 81.1001 173 81.1001 173.1001 81.2002 173 C 81.1001 172.6001 81.2002 172.5 81.2002 172 C 81.1001 172.1001 81 172.1001 V 80.5 171.7002 81.3999 171.7002 81.2002 171.3999 C 81.1001 170.8999 81.3999 170.3999 81.5 169.8999 C 81.7998 169.7998 L 81.3999 169.6001 L 82.2002 168.7002 L 82 168.5 L 82.1001 168.3999 82.1001 168.2002 82.2998 168.2002 C 83.1001 168.6001 82.2998 169 82.8999 169.2998 C 83.2002 170.7998 83.3999 171.3999 83.5 172.6001 C 83.7998 173.6001 84.1001 174.3999 84.1001 175.3999 C 83.7002 176.1001 84.8999 176.5 84.5 177.3999 C 84.7998 178.7998 85.7998 180 85.7002 181.3999 C 85.7998 181.2998 L 86.1001 181.7002 86.2002 182.3999 86.2998 182.7998 C 86.5 183.3999 87.2998 184.1001 87.1001 185.2998 C 87.3999 184.8999 L 87.7002 185.2998 L f 106.2002 162.7002 m 106.2998 159.5 105.3999 156.8999 106.7998 154.2998 C 108.5 153.1001 107.7002 155.6001 108.3999 156 C 108 156 L 108.3999 156.5 L 108.7002 157.2002 107.5 158.2002 108.2002 159 C 107.8999 160.7998 108.1001 161.7998 109.6001 162.7998 C 109.8999 159.7002 110.3999 158 110.5 154.7002 C 110.7998 154.7002 L 110.7002 154.1001 110.7002 153.2002 111.2002 152.8999 C 111.7998 152.7002 111.1001 151.8999 111.7998 151.8999 C 112.2002 152.2998 L 112 152.2998 112.1001 152.5 112.1001 152.6001 C 112.2002 152.5 L 112.2998 152.7998 113.1001 153.1001 112.3999 153.5 C 112.7998 153.5 L 112.7002 155.2002 113.5 157 113.2998 158.7998 C 113.7998 160.6001 L 113.3999 160.6001 L 114 161.2002 L 114.3999 160.3999 115.2998 160.7002 115.3999 160 C 115.7998 159.5 116.2998 158.7002 116.2998 158 C 116 156.7002 117 155.2002 116.2002 154 C 115.8999 150.7002 116.7998 148.8999 116 146 C 111.1001 148.7998 106 147.3999 101.2998 145.1001 C 96.2002 143.1001 92.1001 139.5 86.8999 140.3999 C 84.3999 140.2002 82.6001 141.8999 80.6001 143.2002 C 79.6001 144.3999 78.2998 146.7002 76.2002 146 C 72.1001 145.3999 70.6001 141.3999 67.6001 139.3999 C 67.3999 139 L 65.7998 136.8999 62.7998 135.2998 60.7002 134.2002 C 60.6001 134.2998 L 58.7002 133.2002 55.6001 132.1001 53.2998 131 C 52.6001 130.2998 50.2998 129.6001 49.6001 128.2998 C 47.8999 126.7002 46.7002 123.7998 47.3999 121.6001 C 46.5 119.6001 48.7002 118.8999 47.2998 117.2002 C 45.7002 113.7002 40.8999 112 38.2998 109.7002 C 36.1001 108.7998 34.7998 107.2998 33.7002 105.7002 C 33.8999 106.7002 32.7998 107.7002 33.7002 108.3999 C 33.7002 109 L 33.7998 109 34 109 34.1001 108.7998 C 33.7998 110.7998 36.3999 109.3999 35.7998 111.5 C 35.8999 111.5 L 35.8999 112.8999 L 36.8999 113.2002 38 113.1001 37.6001 114.3999 C 36.7002 114.6001 37.2998 115.8999 36.3999 116 C 36.2002 116.5 36.7002 116.6001 36.7998 116.8999 C 37.6001 117.2998 39.1001 115.7002 39.1001 117.2002 C 40 117.5 38.8999 118 39.1001 118.8999 C 38.7998 120.1001 L 39 119.8999 L 39.1001 120.5 L 40.1001 120.2998 40.7002 118.2998 41.6001 119.3999 C 41.3999 120 L 41.8999 120.1001 41.5 120.3999 41.7998 120.6001 C 40.8999 121 41.5 123.2998 40.8999 124.1001 C 40.7002 124.1001 L 40.7002 123.8999 41.3999 124.2998 41.2002 124.7002 C 41.8999 124.6001 42.6001 122.6001 43.6001 122.7998 C 42.7998 122.7998 44 124.3999 43.1001 124.7998 C 43 125 43.2002 125 43.2998 125.2002 C 43.2002 125.3999 43 125.2002 42.7998 125.2998 C 43.2002 126.7002 42.1001 127.2998 42.7998 128.6001 C 43.1001 128.6001 43.2998 128.7002 43.3999 128.8999 C 43.7002 128.6001 L 43.8999 129.1001 43.8999 128.7002 44.2998 128.6001 C 44.6001 128 44.2998 127.1001 45.2002 126.7998 C 45.1001 126.2998 45.7002 126.2002 46 126.1001 C 46.6001 126.1001 46.2998 126.7998 46.7002 127.1001 C 46.6001 127.5 45.7998 127.7002 46.3999 128 C 46.1001 129 46 130.6001 45.6001 131.3999 C 46.1001 131.6001 L 45.7002 131.8999 45.7002 132.7002 46.1001 133 C 46.7998 133.2998 47.6001 132.1001 48.2002 133.1001 C 48.1001 133.7002 48.3999 134.3999 48.5 134.8999 C 48.5 135.1001 48.3999 134.6001 48.6001 134.6001 C 48.6001 135.2002 49 136 48.3999 136.2998 C 48.5 136.2002 48.6001 136.2002 V 48.7002 136.2998 48.7002 136.3999 48.7002 136.6001 C 49.7002 136.2002 50.2002 135.1001 50.7998 134 C 51.2002 134.2002 L 51.2002 134 51.2998 134 51.3999 133.8999 C 51.8999 134.2002 51.7998 135.1001 52.1001 135.6001 C 51.6001 136.5 52.3999 136.8999 51.5 137.3999 C 52 138.7002 51.5 139.3999 51.5 140.6001 C 52.2002 140.7002 52.7998 140 52.7998 139.2998 C 53.2002 139.3999 L 53.1001 139.1001 53.3999 138.8999 53.2998 138.6001 C 53.6001 138 54.1001 138.7998 54.5 138.3999 C 55.2998 140.2998 54.5 140.7002 54.1001 142.3999 C 54.6001 142.5 54.1001 143.3999 54.7998 143.2998 C 54.7002 143.2002 L 55.5 142.2002 56.2998 141 56.7998 140 C 57.1001 140.2998 57.6001 139.2998 58 140 C 58 141.7002 57.8999 141.2998 58.1001 142.7002 C 58.2002 142.7002 L 57.7998 143.1001 58.5 143.8999 57.7998 144.3999 C 57.8999 144 58.7002 145.3999 58.1001 145.6001 C 58.1001 146 58.7998 145.7998 59 145.7002 C 59.1001 144.7002 60.1001 144.5 60 143.5 C 60.6001 143.2998 60.1001 141.2002 61.3999 142.2998 C 61.8999 143.6001 61.2998 144.7998 61.7002 146.3999 C 61.6001 146.3999 L 61.8999 147.3999 61.7002 148.2998 61.7998 149.7998 C 63.5 148.6001 63.2002 147.2998 64.3999 145.7998 C 65.2002 145.8999 64.8999 146.7002 65.2998 147.1001 C 65.2998 147.5 64.6001 148.2998 65 148.7002 C 64.6001 149 65 149.2998 65.2002 149.6001 C 65.2002 151.2998 L 65.2998 151.2998 65.3999 151.5 65.5 151.6001 C 65.6001 151.7002 65.3999 151.7998 65.2998 151.8999 C 65.5 152.2002 L 65.8999 151.3999 67.2998 150.7998 67 149.6001 C 67.6001 148.8999 67.7002 147.5 68.5 146.6001 C 68.7002 146.6001 68.8999 146.2002 69.1001 146.5 C 69.1001 146.7998 L 69.5 146.5 68.8999 145.8999 69.6001 146.2002 C 69.7002 146.6001 L 69.7998 146.5 L 69.7002 147.5 70.8999 147.8999 70.3999 148.8999 C 70 149.6001 L 70.1001 149.7998 70.6001 149.7002 70.3999 150.1001 C 70 149.6001 70.2998 150.6001 70.1001 150.7002 C 70.2002 150.6001 L 70.2998 150.7002 70.2998 150.7002 70.2998 150.7998 C 69.3999 151.2002 69.8999 152.8999 70.1001 153.7998 C 70.2002 154.1001 70.3999 154.2998 70.2998 154.7002 C 71.3999 154.7002 70.7998 153 71.7998 153 C 72.1001 152 72 150 73.2998 149.5 C 74.1001 150.1001 73.2998 151.2998 74 151.8999 C 73.7002 151.8999 L 74.5 152.5 74 153.7002 74.2002 154.7002 C 74.2998 154.6001 74.3999 154.7998 74.5 154.8999 C 74.5 155.2002 74.2002 155.1001 74.2002 155.3999 C 74.2002 155.7998 74.5 156 74.7998 156.3999 C 76 154.3999 75.2002 152.8999 76.7998 151.2002 C 77.7002 151.6001 77.5 151.8999 78 152.5 C 77.7998 154 77.6001 155.2998 78.2002 157 C 78.3999 156.7998 L 78.6001 157.2002 78.2998 157.6001 78.5 158 C 78.6001 157.2998 79.1001 157.1001 79.2002 156.5 C 79.6001 154.7998 79.6001 152.5 79.8999 150.7002 C 80 150.7998 L 80.7002 150.3999 79.7002 149.3999 80.8999 149.2998 C 81.3999 149.7002 81.2998 150.8999 81.2002 151.2002 C 81.3999 151.2002 81.6001 151.1001 81.7002 151.2998 C 81.3999 151.8999 L 82.2002 151.7002 81.7002 152.7002 81.7998 153.1001 C 82 153.1001 L 81.5 154.2998 82.5 154.8999 82.3999 156.2002 C 82.7002 155.7002 83.8999 154.8999 83.6001 153.6001 C 84.1001 153.1001 L 84.1001 149.5 L 84.5 149.5 L 84.7002 148.7002 84.2002 147.8999 85.1001 147.6001 C 85.2002 147.8999 85.7998 147.8999 85.6001 148.3999 C 85.8999 148.3999 L 86.2998 150.7998 85.6001 153.1001 86.5 155.2998 C 86.3999 155.3999 L 86.6001 155.6001 L 87.2998 154.7002 87.1001 153.7002 87.7998 153.1001 C 87.7998 151.2002 88.5 151.1001 88.3999 149.2998 C 89.2002 149.2998 88.8999 146.6001 90.1001 148.2998 C 90.1001 148.7002 L 90.3999 148.7002 L 90.7998 149.5 90 150.8999 90.7002 151.6001 C 90.5 151.7998 L 90.2998 151.7002 90.3999 151.6001 90.3999 151.3999 C 90 151.8999 90.7002 152.2002 90.7998 152.6001 C 90.5 153.8999 91.2998 155 91.6001 155.8999 C 92.2002 154.6001 92.2998 153.3999 92.3999 152 C 92.5 150.6001 93.1001 149.7002 93.5 148.2998 C 93.6001 148.3999 L 94.1001 147.6001 L 95.1001 148.2002 94.5 148.7002 94.7998 149.5 C 94.6001 150.2998 94.8999 151 94.7002 151.7998 C 94.7998 152.3999 95.3999 151.5 95.2998 152.2998 C 94.7002 152.5 95.3999 152.7998 95.2998 153.1001 C 95.6001 154.3999 96 155.7998 96.3999 157.2002 C 97 155.2002 97.3999 153.2002 97.8999 151.3999 C 98.1001 151.2002 98.5 151.2998 98.7998 151.2998 C 98.7998 152.2002 100.1001 153 99.5 154 C 99.5 155 L 99.6001 154.8999 L 99.6001 156 100.2998 157.2998 100.1001 158.6001 C 100.8999 159.1001 100.2998 159.7002 101 160.2998 C 101 160.3999 101.1001 160.5 101.2002 160.6001 C 102 159.7002 101.3999 158.2998 102.1001 157.3999 C 101.6001 157.1001 101.7998 156.3999 101.7998 155.7998 C 101.7998 155.6001 102 155.6001 102.1001 155.6001 C 102.1001 155.2002 102.2002 154.7998 102.5 154.3999 C 103 154.7998 103.3999 154.6001 103.7002 155.2998 C 103.3999 155.5 L 103.7002 155.5 L 103.7002 157.6001 L 103.7002 157.3999 103.8999 157.3999 104 157.3999 C 103.5 159 104.3999 160.1001 104.5 161.7998 C 104.7002 161.7002 104.8999 161.7998 104.8999 162 C 104.8999 162.3999 L 104.8999 162.2998 105 162.2002 105.1001 162.2002 C 104.6001 163 105.8999 162.7998 106.2002 162.7002 C f 172 159.6001 m 172.2998 159.7998 L 172.2998 159.7002 L 172.7998 159.7002 173.3999 159.7998 173.7998 159.3999 C 174.1001 159.3999 175.1001 159.7002 175.7002 159.6001 C 176.2998 159.7998 178.2998 160.2998 178 159 C 178.3999 158.7002 178.5 158.2998 178.3999 157.7998 C 178.7998 157.7998 L 179.5 154 179.5 150.3999 179.2998 146.2998 C 178.7998 145.2998 178.7002 143.5 179.2998 142.7002 C 179.5 142.7002 179 142.6001 178.8999 142.3999 C 178.8999 142.1001 179.5 141.6001 178.8999 141.5 C 179.5 140.2002 179.7002 138.6001 178.7998 137.3999 C 177.7002 136.2998 L 173.2002 136.8999 169.6001 135.7998 165.2002 136.2998 C 164.6001 136.6001 163.7998 138.6001 163.7002 139.7002 C 164.8999 141.2998 167.5 141.2998 170.2002 141.2002 C 171.3999 141 172.2998 141.1001 173.5 141.6001 C 173.8999 141.2998 174.2998 141.7998 174.6001 142.1001 C 174.6001 142.2002 L 174.7998 142.2002 L 174.7002 143.2998 175.7002 144.7998 174.1001 145.3999 C 171 146.2002 167.3999 144.7998 164.3999 146.3999 C 164.6001 146.5 164.5 146.7002 164.5 146.8999 C 163.7998 147.2002 164.3999 148.7002 164.2998 149.3999 C 164.7998 149.1001 164.7998 150 165.3999 149.8999 C 165.2002 150 L 167.8999 151.7998 171.2998 149.6001 174.3999 150.5 C 175.5 151 174.5 151.8999 175.6001 152.3999 C 175.2002 152.3999 L 175.5 152.7002 175.5 153.5 175 153.7002 C 172.3999 155.7998 167.7002 153.7002 165.2002 155.5 C 164.7002 156.2998 164.2998 157.3999 164.2002 158.5 C 164.5 158.2998 164.7002 159.2002 165 158.7998 C 166.3999 160.2998 169.2998 159.7002 171.1001 160 C 172 159.6001 L f 135.7002 157.1001 m 135.1001 153.6001 129.7998 154.8999 127.1001 154 C 126.2998 153.7998 124.2998 154 124.7002 152.5 C 123.8999 151.7002 125.1001 151.2998 125 150.3999 C 128.1001 149.2002 131.5 151.2002 133.8999 149.5 C 134.1001 149.2002 136.1001 148.2998 135.2002 147.1001 C 134.6001 147 134.6001 145.8999 133.6001 145.6001 C 130.7002 144.3999 127 146.6001 124.7998 143.5 C 124.2002 142.5 125.3999 141.7002 126 141.3999 C 127 141.2002 127.8999 140.6001 129 141 C 129 140.8999 L 130.6001 140.6001 133.2998 141 134.7998 140 C 134.5 139.3999 135.2998 139.7002 135.3999 139.2998 C 137 137 133.6001 136.7998 132.3999 136 C 129.6001 135.3999 126.2002 135.8999 123 136.1001 C 121.7998 135.8999 120.8999 137.1001 120.6001 138.2002 C 120.6001 139.3999 120.7002 140.5 120.1001 141.7002 C 120 141.6001 L 120.1001 143.7998 119.7998 144.8999 119.7998 147.6001 C 120.2002 147.5 L 120.2002 149.5 L 119.8999 148.8999 L 119.8999 150.3999 120.1001 152.2998 119.8999 153.7998 C 120.5 154.1001 120 154.8999 119.8999 155.3999 C 120.7002 155.2002 119.6001 156.1001 120.5 155.7998 C 119.8999 156.3999 120.7998 157.2998 121.1001 158.3999 C 121.2998 158.2002 L 121.3999 158.5 121.6001 158.7002 121.6001 159.1001 C 121.7002 159 L 122 159.6001 L 126.6001 157.5 132.1001 161 135.7002 157.1001 C f 49.8999 150.5 m 49.7998 150.6001 L 49.6001 148.6001 46.7998 147.1001 45.6001 145.6001 C 44 146.1001 41.7998 146.1001 40.2998 145.1001 C 40 144.1001 41.6001 144.7002 41.8999 144.2002 C 42.7998 143.8999 43.6001 143.5 44 142.7002 C 43.3999 142.2998 42.2002 142.2998 41.8999 141.7002 C 41.6001 142 L 39 140.8999 L 39.5 139.6001 42 140 41.3999 138.7002 C 40.2998 137.7998 38.8999 137.2998 38 136.2002 C 38.7002 135.7002 39.5 134.8999 39.3999 133.8999 C 39.3999 134 L 38.1001 133.2002 36.7002 132.7998 35.2002 131.7998 C 35.2998 130.8999 36.3999 131 36.6001 130.2002 C 36.2998 128.6001 32.5 128.1001 34.7998 126 C 34.2002 125.7998 34.6001 124.8999 33.7998 124.8999 C 34 124.7998 L 33.2002 123.7998 31.6001 123.6001 32.3999 121.7002 C 32.8999 121.3999 L 32.6001 121.1001 32.5 121.6001 32.2998 121.2002 C 30.6001 120.3999 30.6001 117.7002 30.5 115.8999 C 30 115.2998 30 114.6001 29.5 114 C 29.7998 112.5 28.3999 111.3999 28.8999 110.2002 C 27.8999 111.2998 28.3999 113.5 28.2002 115.3999 C 28 115.3999 28 115.6001 27.7998 115.7002 C 28.2002 115.7002 L 27.8999 116.3999 28 116.5 27.7998 117.2002 C 28 117.1001 L 28.2002 117.6001 28.3999 119.2002 28.2998 120.6001 C 28.6001 120.6001 L 28.6001 121.1001 L 28.2998 121.1001 L 28.6001 121.8999 L 28.7002 121.7998 L 28.8999 123.1001 28.7998 124.1001 28.7998 124.8999 C 29 124.8999 L 29.3999 125.2998 28.6001 125.5 29.2998 125.6001 C 29.7002 126.5 28.7998 127.7002 29.8999 128.2002 C 29.5 128.5 L 29.6001 128.3999 L 30.2002 129.1001 29.7998 130 30.5 130.7002 C 30.1001 131.2002 L 30.6001 131.2002 30.2998 131.8999 30.3999 132.2002 C 30.6001 132.2002 30.7002 132.3999 31 132.6001 C 30.6001 133.5 31.5 134.5 31.6001 135.5 C 31.8999 136.5 31.8999 136.3999 32 137.6001 C 33 137.3999 32.2002 138.7998 32.6001 139.1001 C 31.7998 140 33.7998 140.1001 33.1001 141 C 33.3999 141.2002 33.2998 142.3999 34.2002 142.6001 C 34.2002 143.2998 L 34.2998 143.2002 L 34.7998 143.5 34.3999 144.7998 35.3999 145.1001 C 34.8999 145.3999 35.3999 145.7998 35.3999 146.2002 C 35.5 146.1001 35.5 146 35.6001 146 C 35.5 147.3999 36.7998 148.5 38 149.5 C 38.7002 148.8999 39 150.1001 39.6001 149.3999 C 39.8999 149.5 40.8999 149.1001 41.3999 149.2998 C 44.2998 149.5 47.6001 150.1001 50 151.3999 C 50 151.1001 49.6001 150.7998 49.8999 150.5 C f *u 159.5 158.2998 m 159.8999 155.5 151.6001 151.8999 158.2002 150.6001 C 158.7998 150.5 158.8999 149.7998 159.3999 149.5 C 160.1001 149.2002 159.8999 147.3999 159.7998 146.6001 C 159.1001 145.2002 155.6001 144.7998 156.1001 142.2998 C 157 141.7002 158.6001 141.1001 159 139.7002 C 159.6001 139.6001 L 159.6001 138.2002 159.2998 137.2002 158 136.2998 C 155.5 137.1001 152.8999 138.3999 150.6001 139.7998 C 146.2998 140.7998 145.1001 134.8999 140.8999 136.7002 C 140.6001 137.2002 140.3999 137.7002 139.8999 137.8999 C 139.5 140 142.2998 141.2002 143.7998 142.3999 C 143.6001 144 141.7002 144.7002 140.7998 145.8999 C 140.2998 146.5 140 147.6001 140.2002 148.3999 C 140.2998 148.2998 L 140.5 148.3999 140.6001 148.7998 140.3999 148.8999 C 139.8999 149 140.5 149.2998 140.5 149.5 C 140.7998 149.7002 141.1001 149.3999 141 150 C 141.7998 149.7002 141.7998 150.8999 142.2998 151 C 142.6001 151.5 144 152.2998 143.7998 153 C 142.2002 154.6001 139.5 155.5 140.2002 158 C 143 159.7998 145.6001 157 147.7002 156.2002 C 148.1001 155.8999 148.8999 155.5 149.7998 155.5 C 151 156.1001 152.2998 156.3999 153.5 157.3999 C 153.3999 157.6001 L 154.3999 157.6001 154.7998 158.8999 156.3999 158.8999 C 156.8999 159.2998 157.7998 159.1001 158.3999 158.8999 C 158.7998 158.2998 158.7998 158.5 159.5 158.2998 C f 1 D 149 149.3999 m 147.6001 149.2002 147.7002 148.7002 146.7998 148 C 146.8999 147.1001 147.8999 146.7002 148.6001 146.5 C 149.8999 145.7002 151.2998 146.6001 152.7998 146.6001 C 152.6001 147 153 147.7002 152.8999 147.6001 C 152.7998 148.1001 152.7002 148.7002 152.2002 148.7998 C 151.2998 148.8999 150 149.7002 149 149.3999 C f *U 0 D 184.3999 145 m 184.8999 144.6001 185.2002 143.6001 185.7998 142.8999 C 186.7998 139.8999 189.1001 137.3999 189.2002 134.5 C 189.7002 133.7998 190.2998 132.6001 190.3999 131.5 C 190.7002 131.5 L 190.6001 129.8999 191.5 129.1001 191.5 127.2998 C 192.1001 125.7002 192.2998 123.2998 193 121.7998 C 193 119.5 194.1001 117.3999 193.7002 115.1001 C 194.2002 113.7998 194.1001 112.7998 194.2998 111.5 C 194.5 111.5 L 194.2002 105.2002 195.3999 100.2002 194.2002 93.7998 C 193.8999 90.6001 193.7002 88 193.3999 85 C 192.6001 84 193.2002 82.7998 192.7002 81.7998 C 192.3999 78.3999 191 74.5 190.2002 71 C 189.6001 70.7002 189.7998 69.7998 189.6001 69.5 C 188.8999 67.1001 187.6001 64.8999 187 62.2998 C 186 62.2002 186.7998 60.8999 186 60.7998 C 186.1001 60.5 185.8999 60.1001 185.6001 60.1001 C 184.2998 56.3999 182.2998 53.5 180.1001 50.2998 C 180.2002 49.7998 L 179.7002 49.7998 179.6001 49.2002 179.5 48.7998 C 178.1001 46.8999 176.5 44.8999 175.2002 43 C 175.2998 42.7998 L 173.2002 40.5 171.6001 38.5 169.3999 36 C 162.1001 28.2002 154.2998 21.5 144.6001 16.1001 C 129.8999 8.2998 113.3999 3.8999 97.1001 4.3999 C 96.7998 3.7998 96.5 4.7998 96.2002 4.3999 C 87.8999 3.7002 79.8999 6.7998 71.6001 8.7998 C 71.3999 8.5 L 69.6001 9.6001 67.2998 10 65.5 10.3999 C 55.7002 13.7002 45.5 19.1001 37.2998 26 C 37.2998 26.6001 36.3999 26.6001 36.3999 27.1001 C 33 29 31.2998 32.2998 28.7002 34.7998 C 28.8999 35.7002 28 34.8999 28.2998 35.6001 C 32.7998 32.2002 38.5 27.3999 43.7002 24.7998 C 47.2002 22.7002 51.1001 21 54.5 18.5 C 56.5 17.5 58.3999 15.2998 60.3999 13.8999 C 60.7998 13.3999 61.7002 14.2002 61.2998 14.6001 C 62.7998 15.7002 63.5 14.7998 64.7002 14 C 65.3999 13.2998 66.3999 11.2998 67.7998 11.7998 C 68.3999 13.3999 L 71.5 13.8999 72.3999 10.6001 74.5 9.6001 C 75 10.3999 74.2998 11.5 74.8999 12.1001 C 76.7998 11.7002 77.6001 10.7998 78.6001 9.1001 C 79.2998 9.6001 79.8999 10.1001 79.7998 10.8999 C 81.1001 10.7002 83.2002 9.7998 84 8.8999 C 84.5 9.5 84.6001 10 84.7002 10.7998 C 86.7002 10.6001 88.1001 8.3999 89.6001 8.3999 C 90.1001 10.7998 L 90.5 10.5 91.6001 9.8999 92.2002 10 C 93.6001 8.7998 94 7.2002 96.2002 7 C 97 8.7998 94.2002 9.6001 96.1001 11.2002 C 97.5 10.6001 98.5 9.6001 99.6001 8.6001 C 100.5 8.7998 100.1001 9.8999 100.1001 10.2998 C 99.7998 10.6001 99.2998 10.8999 99.6001 11.3999 C 101.2002 12 102.7002 10.1001 104.2998 8.8999 C 104.8999 8.7002 105.7002 8.5 106 9.2002 C 106 10.6001 104.7002 10.3999 104.2002 10.8999 C 104.2002 12.2002 105.2998 11.7998 106.1001 12.2002 C 106.5 11.7998 107.2002 11.6001 107.6001 11.5 C 108.7002 10.6001 L 109 10.8999 109.2002 10.2002 109.6001 10.2002 C 110.1001 9.7002 111.7002 8.2002 113 8.7998 C 112.3999 10.2002 111.3999 10.7002 110.5 11.8999 C 110.6001 12 L 110.2002 12.6001 L 111.5 12.6001 112.3999 13 113.7998 12 C 114.6001 11.7998 115.7002 11.6001 116.7998 11 C 117.2002 11.7998 116.6001 12.3999 116.2998 13.1001 C 115.7998 13.1001 L 115.8999 13.3999 115.6001 13.8999 115.2002 14 C 116.2002 14.2998 117.6001 14.6001 118.2998 13.8999 C 119.7998 13.7998 119.6001 13.8999 120.6001 13.2002 C 121.1001 13.2002 122 12.7002 122.6001 13.2002 C 121.8999 13.8999 121 14.7998 121 15.3999 C 121.2998 16.6001 123.1001 15.6001 124 15.7002 C 125.6001 15.1001 126.8999 13.3999 128.3999 14 C 127.7998 15.5 126.6001 16.2998 125.5 17.2998 C 127.5 18.1001 129.6001 16.8999 131 16 C 132.6001 16.2002 L 132.7002 18.1001 127.8999 19.1001 130.8999 20.6001 C 131.5 20.1001 132.7002 20.2002 133.3999 19.2998 C 134.6001 18.7998 136.1001 18 137.5 17.2002 C 137.7002 17.3999 138.1001 17.2002 138.2002 17.5 C 137.7998 19.3999 135.8999 20.2002 134.5 21.2002 C 134.6001 21.3999 L 134.6001 21.8999 133.8999 21.5 134.2002 22.2002 C 134.2002 22.1001 L 137.2002 22.1001 139.6001 19.7998 142.8999 20 C 142.6001 20.3999 L 142.7002 20.3999 142.8999 20.3999 142.8999 20.5 C 141.7002 22 139.5 22.7998 138.3999 24.7998 C 139.7998 25 L 139.7998 25.2002 L 141.7002 24.7998 143.7998 23 145.7002 23 C 146.1001 24.6001 143.7002 25.2998 142.8999 26.2002 C 142.6001 26.5 142.2002 26.7002 142.6001 27.2002 C 143.2998 27.5 L 145 26.7998 147.7002 26.3999 149.2998 25.8999 C 149.5 25.8999 150.2002 26.2998 149.7998 26.6001 C 148.2002 27.7002 146.2002 28.2002 145.7998 30 C 147.8999 29.7002 150.6001 28.7002 152.6001 28.6001 C 152.7998 28.7002 L 151.7002 30.7002 149.2998 30.5 148 31.8999 C 148.7998 32.6001 148.8999 32.2998 150 32.8999 C 150.5 32.7002 151.3999 32.2002 152.2002 32 C 154 32.3999 156.2002 30.8999 158.2998 31.8999 C 158.2998 32.1001 158.1001 32.2002 158 32.2998 C 157.7002 32.2002 L 157.8999 32.3999 L 156.2998 34.2002 152.2998 34.2002 151.7002 36.1001 C 152.7998 36 154.7998 35.8999 156 35.7998 C 157.6001 35.6001 159.2998 35 161 35.6001 C 161.2998 36.2998 160.6001 36 160.2998 36.3999 C 160 36.3999 L 160 36.7002 L 158.2002 37.3999 156.5 38.3999 155.2002 39.3999 C 158.6001 39.1001 162.1001 38.7998 165 38.7998 C 165.2002 39.6001 164.1001 39.8999 163.3999 40.1001 C 161.7002 40.7998 159.7002 41.2002 158.2998 42.3999 C 159.1001 42.7002 161 42.1001 161.5 42.7998 C 162.2002 42.3999 162.8999 42.3999 163.6001 42.7998 C 165.3999 42.5 167.2998 42.7002 169.1001 42.5 C 169.2998 42.7002 169.2002 43 169.2002 43.2998 C 168.7002 43.5 167.7998 44.5 166.6001 44.5 C 165.2002 45.1001 163.3999 45.2002 162 46.1001 C 161.7002 46.6001 162.2998 46.7002 161.7998 47.2002 C 163.8999 48 166.1001 46.5 168.2002 47 C 168.8999 46.6001 169.6001 47 170.3999 47.3999 C 168.8999 49.2998 166.5 48.3999 164.7998 50.2002 C 165.8999 50.6001 168.1001 51.1001 169.8999 50.5 C 170.2002 50.7002 170.3999 50.7998 170.6001 50.5 C 172.2998 50.2002 174.2998 50.3999 175.7998 50.2998 C 176.3999 50.6001 L 175.8999 51.3999 174.7002 52.1001 173.8999 51.7998 C 171.8999 53.1001 170 53.1001 167.6001 53.8999 C 167.2002 54.3999 167.7998 54.7002 168.1001 55.1001 C 171 55.5 174.1001 55.3999 177.2002 55.3999 C 177.8999 55.8999 177 56.5 176.7998 56.6001 C 175.2998 57.3999 172 56.8999 171 58.3999 C 170.3999 58.2998 170.5 59 170 59.2002 C 172.2998 60.2998 175 59.2998 177.3999 60.1001 C 177.2002 60.2002 L 177.7998 60.2002 178.2002 60.7002 178.7002 61 C 177 62.8999 174 61.3999 172.2002 63.3999 C 172.3999 63.8999 173.7998 63.6001 174.3999 63.7998 C 176.6001 64.2998 179.2998 64.1001 181.6001 65.2002 C 181.6001 66.1001 180.2002 66.2002 179.6001 66.3999 C 177.8999 66.7002 175.2998 66.2002 173.8999 66.7002 C 173.8999 67.1001 L 175.2998 67.2998 176.7998 68 177.7998 68 C 178 68.3999 178.8999 68.2998 179.3999 68.7998 C 180.8999 69 182.7002 69.1001 184.2002 69.6001 C 184.3999 70 L 182.7002 70.7998 181.3999 70.7998 179.3999 71.2998 C 178.2998 71.7998 177 71.2002 175.8999 71.3999 C 176.7998 73.7998 179.5 72.8999 181.2998 73.7998 C 182.3999 73.7998 183.1001 74.1001 183.6001 75 C 181.7998 77.1001 178.8999 74.5 177.2002 75.7998 C 176.7998 78.3999 181 77.2002 181.7998 78.6001 C 183.5 78.7998 185.2998 79.2998 186.7002 79.7998 C 187 80.2998 L 184.7002 81.1001 181.2002 81 178.7002 81 C 178.6001 81.6001 179.1001 82.2998 179.6001 82.7002 C 180.2002 82.7002 180.3999 83.1001 180.7998 83.2998 C 182.6001 84.2002 183.2002 83.7998 184.8999 85.1001 C 183.5 87.2002 181.2998 85.5 179.3999 85.3999 C 179.1001 86.3999 179.5 87.3999 180 88.2002 C 180.7002 88.2002 180.7002 88.7002 181.1001 89 C 183.7002 90.5 185.7998 91 188.5 92.2002 C 188.8999 92.7998 L 185.8999 94.7998 183.3999 91.3999 179.8999 92.3999 C 180.6001 92.7998 179.7998 93.5 180.2002 94.2002 C 181.6001 94.7998 183.2002 95.2998 184.2002 96.2002 C 184.8999 96.2998 185.7998 97.2002 186.6001 97.2998 C 188 97.5 189 98.6001 190.2998 99.1001 C 187.2002 100.7002 184.2998 97.7002 181 98 C 180.2998 99.5 180.7002 100.3999 182.2002 101 C 183.7002 101.7998 185.2002 102.6001 186.5 103.7002 C 186.5 103.6001 L 186.8999 103.2998 186.8999 103.8999 187.2002 104 C 187.2002 103.8999 L 188.1001 104.1001 188.2002 105.2998 189.6001 105.3999 C 189.7002 106 L 188.8999 106.2002 L 186 105.3999 183.3999 104.2998 180.5 103.8999 C 180.7998 104.6001 181.3999 105.3999 181.7998 105.5 C 182.3999 106.3999 183.6001 107.3999 185 107.5 C 185 108.1001 186 107.8999 186.3999 108.7998 C 185.7998 109.5 184.3999 108.8999 183.7002 109.7998 C 183.5 110.2998 184.6001 110.3999 184.2002 111.2002 C 184.7998 111.3999 184.8999 112.5 185.6001 112.6001 C 185.2002 112.8999 187.2002 114 185.3999 114.1001 C 184.1001 113.5 L 183.7998 114.7998 183.6001 116.1001 184.2002 117.3999 C 184.2998 117.2002 L 184.7998 117.8999 185.7002 117.7998 186.3999 118.7998 C 185.7998 119.3999 L 185.2998 119.2998 184.6001 119.1001 184.1001 119.2002 C 184.2998 121.5 184 123.3999 184.2998 125.8999 C 184 126.6001 184.5 127.6001 183.7998 128.2002 C 184.6001 128.7002 183.7002 129.2002 183.7998 129.7998 C 183.7002 129.7002 L 183.7998 130.7002 183.6001 132.1001 183.5 133.2998 C 183.2002 133.2998 L 183.5 133.8999 183.2002 134.6001 183.5 135 C 183.1001 135.2998 183.5 135.3999 183.2002 135.7002 C 183.5 136 L 183 136 L 183.2998 136.8999 182.8999 139.2002 183.2002 140.5 C 183.5 140.7998 L 182.8999 141.6001 183.6001 142.2998 183.1001 143.3999 C 183.7002 143.3999 183.5 144.7002 183.7002 145.1001 C 183 145.3999 183.7998 146.2002 183.6001 146.8999 C 183.7002 145.8999 184.2998 145.8999 184.3999 145 C f 131.8999 132.7998 m 132.8999 132.5 134.2002 132.7002 135.3999 132.7998 C 135.3999 132.7002 L 138.8999 132.2002 141.7998 132.7002 145.1001 132.5 C 145.6001 132.6001 L 145.6001 132.5 L 146.2998 132.5 147.8999 132.7002 149 132.3999 C 150 133.2998 151 132 151.8999 132.6001 C 154.7002 132.7998 157 132.2002 160 132.6001 C 160 132.5 L 165.2998 132.2002 172.7002 132.5 178 132.2002 C 178.2998 131.6001 179.2002 131.2002 179.5 130.6001 C 179.2998 126 179.8999 120.5 179 116.2998 C 179.2002 115.2998 179.2998 114.2998 179.3999 113.5 C 178.7002 112 180.5 109.7998 177.7998 109.2002 C 176.7998 109 176 109.3999 175.2002 109.8999 C 175.1001 110.7998 174.8999 112.1001 175 113.2002 C 175 114 174.3999 116.6001 175.1001 118 C 175.3999 119.7998 174.2002 120.8999 175 122.6001 C 173.8999 122.7998 174.6001 124 174.6001 124.6001 C 174.6001 125.8999 173.7998 127.1001 173.2998 128.5 C 171.1001 129.3999 169.6001 128.2002 167.5 128.6001 C 165.2998 129 162.2998 129.1001 160 128.5 C 150.3999 128.3999 142.1001 127.7998 132.2002 128 C 132 127.7998 L 130.3999 127.8999 127.5 128.1001 126.2002 127.2002 C 125.8999 126.2002 125.7998 125.7002 125.5 124.8999 C 125.7002 123.8999 125.2998 122.7998 125.7998 121.8999 C 125.5 121.6001 L 126 121.3999 L 125.7002 120.2002 126.1001 118.6001 125.6001 117.5 C 126 116.7998 L 125.7998 116.7998 125.7998 116.6001 125.6001 116.5 C 125.7002 114.7002 125.5 113.1001 125.3999 111.3999 C 124.5 110.7002 125.7998 108.1001 123.7998 108.6001 C 122.6001 108.3999 121.2998 108.8999 120.6001 109.7998 C 120.7002 110.7002 120.3999 111.7998 120.6001 112.7998 C 119.8999 113.1001 121 113.2998 120.6001 113.7998 C 120.3999 115.5 120.5 117.6001 120.5 119.5 C 120.7002 119.5 L 120.2002 119.7998 120.7002 120.2998 121 120.7002 C 120.6001 120.7998 121 121.3999 120.7002 121.7002 C 120.2998 121.3999 121.5 122.1001 120.7002 122.2998 C 120.7998 122.2002 120.8999 122.2998 121 122.3999 C 120.7002 122.6001 L 120.8999 122.6001 121 122.7998 121.1001 122.8999 C 120.6001 122.7998 121 123.7998 120.7002 124.1001 C 120.7998 124.1001 L 121 125.5 120.7998 125.7998 120.7998 127.7002 C 120.6001 128.2998 120.7002 128.2998 120.7998 129.1001 C 121 129.1001 L 120.7002 130.2002 L 121 130.2002 L 120.1001 130.5 121.6001 131.2002 121.1001 131.6001 C 121.8999 132.1001 122.3999 132.1001 V 122.6001 131.8999 L 123.2002 132.3999 124 131.7998 124.2998 132.6001 C 130.2002 132.7998 L 130.2002 132.7002 L 131.8999 133 L 131.8999 132.7998 L f *u 135.3999 123 m 135.7002 122.7998 L 135.2002 122.3999 L 135.6001 121.8999 L 135.5 122 L 135.2998 121.8999 135.3999 121.7002 135.3999 121.6001 C 135.3999 121.3999 135.6001 121.3999 135.7002 121.3999 C 135 119.3999 135.5 117.6001 135.2002 115.2998 C 135.2002 114.3999 135.7998 114 136.1001 113.3999 C 136.2002 113.5 L 137.3999 111.7002 140.8999 112.8999 142.8999 112.7002 C 144 112.6001 144.7002 113.3999 145.8999 112.7998 C 146.5 113.3999 148.2002 113 147.5 114.2002 C 145.2998 117.2002 141.2002 113.2002 139.7998 117.2002 C 139.5 118.2002 139.3999 119.1001 139.3999 120.2002 C 139.3999 120.1001 L 139.7998 119.7998 139.6001 120.5 139.7998 120.6001 C 139.3999 120.6001 L 140.3999 120.8999 139.6001 121.8999 140.2002 122.5 C 140.1001 122.3999 140.2002 122.2998 140.2998 122.2998 C 140.3999 122.2998 L 139.8999 122.7998 140.8999 123.1001 140.3999 123.6001 C 140.8999 123.3999 L 140.7998 123.8999 141 124.7998 141.6001 124.8999 C 147.6001 124.8999 152.7998 124.5 158.8999 124.7002 C 159.6001 123.6001 160.3999 122.7002 160.1001 121.1001 C 160.2002 120.7998 160.3999 120.2998 160.3999 120.1001 C 160.3999 120.2002 L 159.7002 118.6001 160.7998 115.8999 157.7002 115.6001 C 155.8999 115.2002 154 115.5 152.8999 114.1001 C 152.8999 112.7998 154.5 113.3999 154.8999 112.6001 C 157.6001 112.3999 161 112.3999 164.2002 112.6001 C 165.2998 113.6001 164.5 115.2998 165.2002 116.2002 C 164.7998 116.7998 165.3999 117.1001 165 118.1001 C 164.7998 118 164.7998 118.2002 164.6001 118.2998 C 164.7002 119.2002 165 121.1001 165.2002 121.8999 C 164.8999 122.2998 L 165.8999 122.7002 164.2998 124 165.7998 124.2002 C 165.7002 124.7998 166.7002 125.5 167.2002 125.7998 C 167.6001 125.7998 L 167.7998 125.3999 168.3999 125.2998 168.7998 124.8999 C 169.7002 123.7998 L 169.8999 121.3999 169.6001 118.1001 169.8999 115.2998 C 169.7002 115.1001 L 169.7002 109.1001 L 164 107.7998 158.8999 108.6001 153.2002 107.8999 C 151.8999 106.2002 152.5 103.5 150.5 102.3999 C 149.3999 102.2998 148.2998 102.7998 147.6001 103.3999 C 146.8999 104.3999 148.1001 105.3999 146.8999 106.2002 C 147 106.7002 147.1001 107.1001 146.8999 107.6001 C 145.3999 108.3999 L 141 108.6001 136.3999 107.8999 131.5 108.3999 C 130.7998 110.1001 131 111.2002 130.3999 112.7998 C 129.8999 113.2002 131 113.8999 130.2002 114.2002 C 130.2998 116.3999 129.7998 119 130.7002 120.7998 C 129.6001 120.7002 131.3999 121.5 130.3999 121.8999 C 130.1001 122.3999 131 122.2002 130.6001 122.6001 C 130 124 130.8999 125 132.1001 125.7998 C 132.7002 125.7002 133.6001 126.2002 134 125.5 C 134.5 124.7998 135.3999 124.2998 135.3999 123 C f 1 D 148.6001 121.1001 m 147 120.8999 145.2998 122.2002 144.1001 120.2002 C 143.6001 119.5 144.5 119.7002 144.7002 119.2002 C 147.7998 118.3999 152.1001 119 155.2998 119.2002 C 155.5 119.7998 L 155.2998 119.7998 L 155.2002 120.5 154.3999 120.6001 154.1001 121 C 152.2002 121.2002 150.6001 121.6001 148.6001 121.1001 C f *U 0 D 162.6001 105.7998 m 162.7998 105.1001 164 105.3999 164.2998 105.1001 C 165.7998 104 168.1001 102.1001 169.2998 100.6001 C 169.3999 99.8999 169.7002 98.7998 169.1001 98.7998 C 165.7002 100.3999 162.5 102.3999 159.7002 105 C 159.7002 105.1001 158.7998 105.1001 159.1001 105.5 C 160 105.7002 160.7002 105.6001 161.7998 105.6001 C 161.8999 106 L 162.2002 105.7998 162.2002 105.5 162.6001 105.7998 C f 144.3999 104.5 m 144.5 102.7002 145.6001 100.2998 147.2002 99.3999 C 147.7002 99 148.2998 99.2002 148.6001 98.5 C 150.2998 99.5 151.8999 98.7998 153.1001 97.7998 C 153.7002 96.3999 156.1001 95.1001 157.2998 94.6001 C 157.5 94.2998 157.3999 94 157.3999 93.7002 C 157.6001 93.6001 158.5 92.7002 158.5 91.7998 C 158.8999 91.8999 159.2002 91.2998 159.2002 91 C 159.3999 91.1001 L 162.2002 87.6001 165.1001 84.7998 165.7998 80.2002 C 165.3999 79.7002 165.6001 78.7002 165.3999 77.8999 C 163.8999 78.2002 164 80 162.7998 80.8999 C 160.5 84 157.6001 87 154.3999 89.7998 C 153.6001 90.7998 152 92.2002 150.7998 93.1001 C 150.6001 92.7998 150.1001 92.5 150.5 92.2002 C 150.3999 92 150.6001 91.8999 150.7002 91.7998 C 151 92 L 151.5 90.7998 152.2998 89.6001 153.1001 88.6001 C 155.3999 85 L 155.5 85.1001 L 156.8999 83.6001 157.8999 81.1001 159 79.8999 C 159.1001 78.1001 161 77.8999 160.8999 76.1001 C 161.2002 76.1001 L 161.5 75.2002 161.6001 74.1001 162.2002 73.3999 C 162.2998 72.3999 163 72.1001 163 71 C 163 70 162.2998 69.7998 161.8999 69.1001 C 159.3999 72.6001 L 159.5 72.7002 L 154.2002 80.7002 148.7998 87.7002 141.5 94 C 141 94 L 140.8999 94.2998 140.2002 94.8999 139.7002 95.2002 C 139.2998 96 138.1001 95.5 138.1001 96.6001 C 137.8999 96.6001 L 137.7998 100.3999 L 138.3999 101 L 138 101.2998 L 138.3999 101.2998 L 138.3999 102.3999 138.2002 103.1001 139 103.8999 C 138.7002 104.7002 140.2998 104.7002 141.1001 105 C 144.3999 104.5 L f 158.2998 101.2998 m 158.5 100.1001 159.7002 100.2002 160.3999 99.2002 C 163.2998 96.5 165.5 94.1001 168.1001 90.3999 C 167.7002 89.5 169 88 167.5 87.2002 C 166.6001 88.3999 164.7998 89.5 164.2002 90.7002 C 163.2002 91 162.7002 92.3999 161.6001 93 C 160.6001 93.6001 159.7002 95.2002 158.7998 95.8999 C 157.3999 97.5 155.2002 98.7998 154.2998 100.7002 C 155.2002 101.7998 L 155.1001 102 155.7002 102.6001 155.6001 103.2002 C 156.2998 102.7002 157.5 101.7998 158.2998 101.2998 C f 136.7998 93.7002 m 136.8999 93.8999 137.5 93.2998 138 93.5 C 138.5 92.7998 139.6001 93.2002 140.2002 92.3999 C 142.1001 91.2998 142.6001 90 144.7002 88.3999 C 144.7998 88.6001 L 145.2998 87.7998 L 145.3999 88 L 145.8999 87.3999 146.7998 86.3999 147.2002 85.7002 C 148.1001 85.8999 147.3999 83.8999 148.7998 84 C 148.6001 83.6001 149.1001 83 149.2998 83.2998 C 150 81.5 151.2998 81 151.7998 79.1001 C 152 79.1001 L 151.6001 78.6001 152.3999 78.7998 152.2002 78.2002 C 152.6001 78.2998 152.5 77.6001 152.8999 77.2002 C 153 77.2998 L 153.2998 75.7998 154.7002 74.2002 154.8999 72.6001 C 155.2002 72.6001 L 155.5 70 157.2002 67.7002 157.3999 65.6001 C 157.8999 65.2998 158.2002 64.7002 158 64.1001 C 158.3999 64.2002 L 159.5 62.3999 157.8999 60.8999 157.2998 59.7998 C 157.2002 59.7998 157.1001 60.1001 157 60 C 156.7002 59.7998 L 156.3999 60.6001 156.1001 61.5 155.6001 62.2002 C 155.1001 63.5 154.8999 66.1001 153.5 67.1001 C 152.1001 69.7998 151 72.2002 149 74.5 C 149.2002 74.5 149.2002 74.6001 149.2998 74.6001 C 147.6001 76.7002 146.5 79 145 80.2998 C 144.3999 79.6001 L 145 77.7998 146.2002 76 147 74.2998 C 146.7998 73 147.8999 72.7002 148.2002 71.2002 C 148.5 70.8999 148.1001 69.7998 148.7002 70 C 149.2002 68.1001 150 65.8999 150.7002 63.6001 C 151 63.6001 L 150.7002 62.1001 151.8999 61.5 151.7998 60.1001 C 152.8999 57.7998 152.3999 57 153.7002 54.7002 C 153.5 54.7002 152.2998 53.2998 151.7998 52.7002 C 150.8999 52.8999 151.7002 54.1001 150.7998 54.2002 C 151 54.2002 L 151 54.3999 150.7002 54.7998 150.6001 55 C 150.3999 55.6001 150.1001 57.1001 149.3999 57.7002 C 149.5 57.7002 L 149.2002 58.6001 148.5 59.7998 148.1001 60.6001 C 148.2998 61 147.7002 61.5 147.7998 61.8999 C 147.5 61.8999 L 147.7998 63 147 63.2002 146.7998 64.2998 C 146.5 64.2998 L 146.2998 65.2002 146 65.5 145.7998 66.6001 C 145.6001 67.1001 L 145.3999 67 145.3999 66.7998 145.3999 66.7002 C 145.2002 68.2998 143.8999 68.6001 143.5 70.2002 C 143 70.2002 L 142.7998 69.6001 142.8999 68.8999 142.8999 68.2998 C 143.2998 68.3999 L 143.7998 66.7998 143.6001 65 144.5 64 C 144.5 62.7998 144.8999 62.2002 145.1001 61 C 145.5 60.7998 145.2998 59.2002 146 58.8999 C 145.7998 58.3999 146.5 58.1001 146 57.5 C 147 54.8999 147.3999 50.8999 148.3999 48.2002 C 146.5 46.2998 L 145.3999 48.7998 144.5 51.3999 143.7998 53.6001 C 143.3999 54.7998 142.6001 55.7998 142.2998 57.3999 C 142.1001 57.3999 L 142.2002 57.6001 142.2998 58.1001 142.2002 58.2998 C 140.8999 58.6001 142.2002 60 141.1001 60.2002 C 141.2002 60.8999 140.5 61.7998 140.2998 62 C 140.5 62.2998 L 139.7998 62.5 140.3999 62.7998 139.7998 63.2002 C 139.6001 63.7002 139.2998 64.2002 138.7998 64.6001 C 138.7002 64.3999 L 138.7002 64.2998 138.7998 64.8999 138.6001 65 C 137.2998 65 138.3999 64.2002 138.1001 63.5 C 138.3999 63.2002 L 138.5 63.2998 138.5 63.5 138.5 63.6001 C 138.2998 62.7998 138.7002 62.6001 138.6001 61.7998 C 139.2998 61.5 139.2002 60.6001 139.1001 59.8999 C 139.7998 59.8999 139.6001 58 140 57.6001 C 140.2998 56.3999 140 55.2998 140.7998 54.3999 C 140.7002 52.2998 141.3999 51.1001 141.2002 49.2002 C 141.8999 47.2002 141.7998 44.7002 142.2002 42.6001 C 142.2002 42.2998 142.2998 41.6001 141.7002 41.3999 C 141.1001 41.2998 L 141.2002 41.5 141 41.6001 140.8999 41.7998 C 141 41.7998 L 140.7002 43.5 140.2002 44.7002 139.3999 46.2998 C 139.1001 46.7998 139.7998 47.7002 138.7998 47.8999 C 139.3999 49.1001 138.1001 50 138.1001 51.2002 C 137.7998 52.6001 L 137.6001 52.3999 L 137 54.5 135.8999 57.3999 135 59.2002 C 135.3999 59.8999 134.2002 60.1001 134.2998 60.7998 C 134.2002 60.7002 L 133.8999 61.2002 134.2002 61.7002 133.3999 61.7998 C 132.5 60.2998 134.2002 58.6001 133.7998 56.7998 C 134.2002 55.2002 134.7998 52.6001 135.1001 50.7998 C 135.5 50.5 135.1001 49.2002 135.7002 48.7998 C 135.6001 48.7998 L 136.1001 48 135.6001 46.5 136.2998 46 C 136.2002 46 L 136.7002 44.2002 136.2002 42 136.7002 40.7002 C 136.8999 40.7002 L 136.6001 39.7998 136.6001 40.1001 136.3999 39 C 136.3999 38.1001 136.1001 37.2998 135.3999 36.7002 C 134.2998 37.2002 134.8999 39.7002 134.2998 39.7002 C 134.3999 39.7002 L 134.1001 41.2998 133.6001 42.2998 133.3999 44.2998 C 133.1001 44.5 L 133.5 44.8999 132.7998 45.8999 133 46.3999 C 132.5 46.8999 132.8999 47 132.5 47.2998 C 132.7002 47.5 L 131.5 49.6001 131.2002 52.7002 129.7002 54.7002 C 128.5 52.7002 130.2998 48.8999 130.2998 46.6001 C 130.5 42.2998 131.5 38.7998 131 34.6001 C 130.8999 34.3999 130.7002 34.2998 130.7002 34.1001 C 130.7998 34 L 129.5 32.8999 L 129 33.7002 129.1001 34.7998 128.7998 35.3999 C 129.2002 36.1001 127.8999 37.2998 128.5 37.8999 C 128 38.6001 128 40.7002 128 41.3999 C 127.6001 41.6001 L 128.2998 42.1001 127.2002 42.2002 127.6001 42.7002 C 127.6001 43.3999 127.6001 44.2002 127.1001 44.5 C 127 45.1001 127.2998 45.8999 126.7998 46.2998 C 127.3999 46.7998 126.2002 47.2002 126.5 47.8999 C 126.7002 49.3999 125.7002 50.1001 125.5 51.5 C 125.3999 51.3999 125.3999 51.2002 125.3999 51.1001 C 125 51.7002 L 124.2002 51.7002 124.7002 51.1001 124.6001 50.5 C 124.6001 50.3999 124.7998 50.3999 124.8999 50.3999 C 124.6001 45.3999 126 39.2998 125.5 34.7998 C 124.8999 33.8999 125.2998 32.6001 124.7002 31.7002 C 124.6001 30.7998 124.1001 30.3999 123.7998 29.6001 C 123 31.1001 123.5 32.5 123 33.7998 C 123.1001 33.7998 L 122.3999 35.2002 123.5 36.7002 122.2998 38.2998 C 123.1001 39.2002 121.7002 40.2998 122.2002 41.6001 C 121.7002 42.1001 L 121.7998 42.1001 L 121.7998 42.2998 121.8999 42.7998 121.3999 42.7998 C 121.7002 42.7998 L 121.8999 43.2002 121.7002 43.7002 121.2998 43.7998 C 121.6001 43.7998 L 121.6001 44.2998 L 121.1001 44.2998 L 121.5 45.7998 120.3999 46.7998 120.1001 48.2002 C 119.7998 48 L 119.7998 48.1001 119.7998 48.2998 119.6001 48.3999 C 118.2998 45.7002 119.3999 42.2998 119.2998 39.7998 C 119.3999 39.7998 119.3999 39.7998 Y 119.2002 39.6001 L 119.7998 39.3999 119.2998 38.2002 119.6001 37.8999 C 119.5 37.8999 L 118.7002 35.6001 119.2998 32.7998 118.7998 30.2002 C 119 30.2002 L 118.3999 29.5 118.5 27.5 117 27.5 C 116.7998 27.2002 L 117 28.6001 115.8999 29.7002 116.2998 31.7002 C 116 31.8999 L 116.2002 33 116.2002 33.8999 116 35 C 116.2998 35.2998 L 115.7998 35.6001 L 116.2002 35.7998 L 116.3999 36.6001 116.2998 38.2002 116.2002 39.3999 C 116.2998 39.2002 L 116.1001 41.5 115.7998 43.2998 115.1001 45.3999 C 115.2998 46.1001 115.2002 46.7002 115.1001 47.5 C 113.8999 47.8999 115.2998 49.2998 114.3999 49.8999 C 115.1001 50.2998 113.7998 50.7002 114.6001 51.1001 C 114.5 51.3999 114.2998 50.8999 114.3999 51.3999 C 114.5 51.5 L 114.1001 51.5 L 114.1001 52.6001 L 114.2002 52.6001 L 114.1001 53.1001 114 53.3999 114.6001 53.8999 C 114.2002 54.1001 L 115.1001 54.6001 113.8999 54.8999 114.5 55.3999 C 115.1001 55.8999 115.6001 57 116.2998 57.5 C 116.3999 57.7002 117.1001 58.6001 117.3999 58 C 117.6001 58.2998 117.6001 58.3999 117.2002 58.7002 C 118.6001 60.2998 119.7998 61.2002 120.7002 62.8999 C 120.7998 62.7998 L 121.1001 63.1001 122.2998 64.3999 122.3999 65.2002 C 122.5 65 L 122.3999 65.8999 123.7002 65.7002 123.2002 66.6001 C 124 66.7002 124.2002 67.8999 124.3999 68.7998 C 125.7002 68.7998 124.8999 70 126 70.2998 C 125.5 71.3999 127.1001 71.2002 126.5 72.1001 C 126.7002 72.5 128 72.7002 127.7002 73.7998 C 128.7998 74 128 75.2002 128.7998 75.6001 C 129 76 129.3999 76.2998 129.2002 76.8999 C 129.3999 76.8999 129.3999 76.8999 129.5 76.7998 C 129.8999 76.8999 129.1001 77.3999 129.7002 77.2998 C 130.2002 77.7002 129.2998 78.2002 130.1001 78.5 C 130.1001 78.3999 130 78.2002 130.2002 78.1001 C 130.3999 78.3999 130.2998 78.8999 130.2998 79.2998 C 130.6001 79.1001 L 131 80.3999 L 131.2998 80.2002 L 131.6001 80.6001 131.2002 81.7002 131.6001 81.7002 C 131.8999 81.5 L 132 82.6001 L 132.2002 82.6001 132.2002 82.2998 132.3999 82.6001 C 132.6001 83.6001 L 132.7002 83.6001 132.7002 83.5 132.7998 83.5 C 132.7998 84.1001 L 133 84.1001 L 133.1001 85.1001 L 133.6001 85.1001 L 132.8999 86.2998 134.7998 86.2998 134.2002 87.6001 C 134.7002 88 135 88.7002 135.1001 89.2002 C 135.2002 90 L 136 90.5 135.7998 90.7998 136.1001 91.6001 C 136.6001 92 136.7002 93 136.7998 93.7998 C 136.7998 93.7002 L f 0 J 0 w 4 M 177 105 m 173 105 L 172.5 55 135.373 20.021 91.479 20.021 c 47.5845 20.021 7.5 55.5 12 114.5 C 1.626 108.4907 L 1.4585 106.2656 1.3735 104.0176 1.3735 101.75 c 1.3735 52.8184 41.0415 13.1499 89.9731 13.1499 c 138.9048 13.1499 178 52 177 105 C f 0.2 w 116.5 186.75 m 92.75 194.25 67 187.5 v 34.3887 178.9517 20.75 155.75 y 38.5 178.25 67.75 185.5 v 96.1782 192.5464 116.25 183.75 y 116.5 186.75 l f 0 w 77.25 162 m 75 164.5 l 42.25 149.5 32.5 113.75 v 43 144.75 77.25 162 v f 111 51.8335 m 109.937 52.9429 109.1665 52 108.1665 51.6665 c 107.1665 51.3335 102.1665 48.1665 98.1665 46.8335 c 94.1665 45.5 93.8335 45.1665 91.1665 45 c 88.5 44.8335 85.8335 44.1665 84 43.6665 c 82.1665 43.1665 80.3335 43.5 78.3335 44 c 76.3335 44.5 70.5 46.3335 67.3335 45.6665 c 64.1665 45 63.6665 43.1665 61.5 42.5 c 59.3335 41.8335 56.3335 41.6665 52.8335 43.3335 c 49.3335 45 47.0103 46.1846 45 47.3335 c 43.8335 48 42.9429 48.8501 42 50.5 c 41.3335 51.6665 38.4165 53.8335 35.5 55.8335 c 31.7988 58.3711 24.3335 63.6665 22.8335 65.5 c 27 57 28.5 55.3335 v 30 53.6665 30 52.3335 32.6665 52.3335 c 35.3335 52.3335 36.6665 51.8335 37.5 51 c 38 50.5 37.1665 50 35.8335 50.1665 c 34.9902 50.272 33.2739 50.1968 34.1665 48.6665 c 34.9165 48.75 35.5835 48.6665 v 36.25 48.5835 37.5 48.75 38.25 48.6665 c 39 48.5835 40.3335 48.1665 40.8335 47.4165 c 40.3335 46.75 39.3335 46.5 v 38.3335 46.25 37.1665 45.8335 37.75 45.3335 c 38.3335 44.8335 39.5835 44.3335 40.9165 44.5835 c 42.25 44.8335 44 45.25 44.6665 44.8335 c 45.3335 44.4165 44.8335 43.5835 43 43 c 41.1665 42.4165 40.9165 41.75 41.8335 41.4165 c 42.75 41.0835 44.5835 41.3335 45.5835 41.9165 c 46.5835 42.5 47 42.3335 47.4165 42.1665 c 47.8335 42 47.9165 41.4165 46.75 40.9165 c 45.5835 40.4165 44.5835 39.5 45.25 39.1665 c 45.9165 38.8335 48.3335 39.4165 49.1665 39.6665 c 50 39.9165 51.4165 40.25 52 39.8335 c 52.5835 39.4165 52.75 39 51.25 38.0835 c 49.75 37.1665 48.75 36.1665 49.3335 35.6665 c 49.9165 35.1665 51.3335 35.8335 52.0835 36.3335 c 52.8335 36.8335 55.4165 38.9165 56.25 38.3335 c 57.0835 37.75 55.9165 35.5 55.0835 34.5835 c 54.25 33.6665 53.8335 32.5 54.9165 32.0835 c 56 31.6665 56.6665 33 57.3335 33.75 c 58 34.5 63.4165 41.3335 64.4165 41 c 65.4165 40.6665 63.3335 36.5835 62.5 35.3335 c 61.6665 34.0835 59.25 29.9165 60.25 29.3335 c 61.25 28.75 64.0835 31.75 64.9165 33.25 c 65.75 34.75 67.9165 38.5835 68.75 38.25 c 69.5835 37.9165 69.5 36.0835 68.25 33.75 c 67 31.4165 64.9165 27.9165 66 27.25 c 67.0835 26.5835 69.3335 29.75 70.5835 32 c 71.8335 34.25 73.8335 38.25 74.9165 37.9165 c 76 37.5835 75.1665 35.25 74.0835 32.4165 c 73 29.5835 71.4165 25.8335 72.5835 25.5 c 73.75 25.1665 76.0835 27.6665 76.9165 29.9165 c 77.75 32.1665 80 37 81.25 36.6665 c 82.5 36.3335 81.8335 34.3335 81.4165 32.8335 c 81 31.3335 80.1665 28.0835 79.4165 26.6665 c 78.6665 25.25 78.8335 24.1665 79.4165 24.1665 c 80 24.1665 83.3335 28.5835 84.5 31.6665 c 85.6665 34.75 86.6665 37.8335 87.4165 38.1665 c 88.1665 38.5 88.1665 38.5 88.0835 37.8335 c 88 37.1665 88.0835 35.6665 87.9165 33.5835 c 87.75 31.5 87.25 28.4165 86.6665 27.1665 c 86.0835 25.9165 85.9165 23 86.75 23.0835 c 87.5835 23.1665 87.4165 24.5 88.25 25.25 c 89.0835 26 90.1665 28 90.5835 30.3335 c 91.75 31.9165 91.9165 33.3335 v 92.0835 34.75 92.5835 35.1665 92.8335 36.1665 c 93.0835 37.1665 93.3335 38.75 93.8335 38.5835 c 94.3335 38.4165 94.25 37.5835 94.3335 36.6665 c 94.4165 35.75 94.75 35 94.5 34.0835 c 94.25 33.1665 94.5 32.5835 94.3335 31.9165 c 94.1665 31.25 93.5835 29.8335 93.4165 28.5 c 93.25 27.1665 93.4165 25.9165 93.25 25.1665 c 93.0835 24.4165 93 23.0835 93.8335 23.6665 c 94.6665 24.25 95.5645 25.6519 95.75 28.25 c 95.8335 29.4165 96.9165 30.5 y 97.3335 30.75 97.4165 31.75 v 97.5 32.75 98.4165 37.3335 99.0835 37.25 c 99.75 37.1665 99.5835 36.6665 99.5835 35.6665 c 99.5835 34.6665 99.9165 32 99.5 30.25 c 99.0835 28.5 98.1665 24.25 98.6665 24.0835 c 99.1665 23.9165 100.8335 24.8335 101.1665 27.5835 c 101.5 30.3335 102.3335 31.75 102.4165 33.75 c 102.5 35.75 103.6665 38.5 104.3335 38.25 c 105 38 105 37.0835 105 36.25 c 105 35.4165 106 31.8335 105.5835 30.6665 c 105.1665 29.5 104.9165 27.0835 105 26.4165 c 105.0835 25.75 105.3335 24.75 105.8335 25.1665 c 106.3335 25.5835 106.9092 27.4375 107.25 30.25 c 107.5835 33 107.6665 34.9165 107.9165 35.8335 c 108.1665 36.75 107.9165 38.0835 108.25 38.5835 c 108.5835 39.0835 108.5835 39.4165 109.0835 38.5835 c 109.5835 37.75 110.25 36.5835 110.25 35.3335 c 110.25 34.0835 110.4165 30.1665 110 28.5 c 109.5835 26.8335 109.9165 26.0835 110.75 26.1665 c 111.7207 26.2637 112.5 28.1665 112.8335 31.3335 c 113.2173 34.9834 113.3335 41.6665 113 44.5835 c 112.6665 47.5 112.9165 49.8335 111 51.8335 c f LB %AI5_EndLayer-- %%PageTrailer gsave annotatepage grestore showpage %%Trailer Adobe_Illustrator_AI5 /terminate get exec Adobe_ColorImage_AI6 /terminate get exec Adobe_level2_AI5 /terminate get exec %%EOF \ No newline at end of file diff -r 94c9c506bba9 -r 958634b9fa32 images/word_count.bb --- a/images/word_count.bb Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -%%Title: ./images/word_count.pdf -%%Creator: extractbb 20140317 -%%BoundingBox: 0 0 360 216 -%%CreationDate: Tue Feb 16 12:41:56 2016 - diff -r 94c9c506bba9 -r 958634b9fa32 images/word_count.pdf Binary file images/word_count.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 images/wordcount.bb --- a/images/wordcount.bb Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -%%Title: ./images/wordcount.pdf -%%Creator: extractbb 20140317 -%%BoundingBox: 0 0 657 356 -%%CreationDate: Sun Feb 14 02:17:07 2016 - diff -r 94c9c506bba9 -r 958634b9fa32 images/wordcount.pdf Binary file images/wordcount.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 intro.tex --- a/intro.tex Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -\chapter{並列環境下におけるプログラミング} -CPU の処理速度の向上のためクロック周波数の増加は発熱や消費電力の増大により難しくなっている。 -そのため、クロック周波数を上げる代わりに CPU のコア数を増やす傾向にある。 -マルチコア CPU の性能を発揮するには、処理をできるだけ並列化しなければならない。 -これはアムダールの法則により、並列化できない部分が並列化による性能向上を制限することから言える。 -つまり、プログラムを並列処理に適した形で記述するためのフレームワークが必要になる。 -また、PC の処理性能を上げるためにマルチコア CPU 以外にも GPU や CPU と GPU を複合したヘテロジニアスなプロセッサが登場している。 -並列処理をする上でこれらのリソースを無視することができない。 -しかし、これらのプロセッサで性能を出すためにはこれらのアーキテクチャに合わせた並列プログラミングが必要になる。 -並列プログラミングフレームワークではこれらのプロセッサを抽象化し、CPU と同等に扱えるようにすることも求められる。 - -Cerium は本論文で開発している並列プログラミングフレームワークである。 -Cerium では Task と呼ばれる分割されたプログラムを依存関係に沿って実行することで並列実行を可能にする。 -Cerium では依存関係を Task 間で設定するが、本来 Task はデータに依存するもので Task 間の依存関係ではデータの依存関係を保証することができない。 -また、Task には汎用ポインタとしてデータの受け渡しを行うので型情報を失う。 -Task 側で正しく明示的に型変換する必要があり、間違った型変換を行うとデータ構造自体を破壊する可能性がある。 -型システムによって検査することも出来ず、型に基づく一連の不具合が常に付きまとう。 - -今回、設計・実装を行なった Gears OS は Code Segment と Data Segment によって構成される。 -Code Segment は処理の単位、Data Segment はデータの単位となる。 -Gears OS を用いるプログラムも Code/Data Segment によってプログラムを分割して記述する。 -Gears OS では Code/Data Segment を用いて記述することでプログラム全体の並列度を高めて、効率的に並列処理することが可能になることを目的とする。 -また、Gears OS の実装自体が Code/Data Segment を用いたプログラミングの指針となるように実装する。 -Gears OS における Task は実行する Code Segment と実行に必要な Input Data Segment, 出力される Output Data Segment の組で表現される。 -Input/Output Data Segment によって依存関係が決定し、それに沿って並列実行する。 -本論文では基本的な機能として Data Gear を管理する Persistent Data Tree, Task を管理する TaskQueue, 並列処理を行う Worker を実装し、簡単な例題を用いて Gears OS の評価を行う。 diff -r 94c9c506bba9 -r 958634b9fa32 jlisting.sty --- a/jlisting.sty Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,216 +0,0 @@ -\NeedsTeXFormat{LaTeX2e} -\def\filedate{2006/02/20} -\def\fileversion{0.2} -\ProvidesPackage{jlisting}[\filedate\space\fileversion\space(Thor)] -% -\newcount\lst@nextchar -\let\lst@@ProcessSpace\lst@ProcessSpace -\def\lst@ProcessSpace#1{% - \lst@check@chartype{#1}% - \lst@@ProcessSpace - \lst@whitespacetrue} -\let\lst@@ProcessLetter\lst@ProcessLetter -\def\lst@ProcessLetter#1#2{% - \lst@check@chartype{#2}% - {\lst@@ProcessLetter{#1}}% - \relax} -\let\lst@@ProcessDigit\lst@ProcessDigit -\def\lst@ProcessDigit#1#2{% - \lst@check@chartype{#2}% - {\lst@@ProcessDigit{#1}}% - \relax} -\let\lst@@ProcessOther\lst@ProcessOther -\def\lst@ProcessOther#1#2{% - \lst@check@chartype{#2}% - {\lst@@ProcessOther{#1}}% - \relax} -\let\lst@@ProcessTabulator\lst@ProcessTabulator -\def\lst@ProcessTabulator#1{% - \lst@check@chartype{#1}% - \lst@@ProcessTabulator - \relax} -\def\lst@check@chartype#1#2#3{% - \edef\@tempa{\lst@nextchar=`\string#1\relax}% - \afterassignment\remove@to@nnil - \@tempa\@nnil - #2% - \ifnum\lst@nextchar<\@cclvi - #3% - \else - \lst@ifletter \else \lst@OutputOther \fi - \lst@whitespacefalse - \expandafter\lst@AppendJchar - \fi - #1} -\def\lst@AppendJchar#1#2{% - \lst@check@chartype{#2}% - {\advance\lst@length\@ne\lst@Append{#1}}% - \relax} -\def\lst@check@chartype@BOL#1{% - \edef\@tempa{\lst@nextchar=`\string#1\relax}% - \afterassignment\remove@to@nnil - \@tempa\@nnil - \ifnum\lst@nextchar<\@cclvi\else - \lst@whitespacefalse - \expandafter\lst@AppendJchar - \fi - #1} -\def\lst@InputListing#1{% - \begingroup - \lsthk@PreSet \gdef\lst@intname{#1}% - \expandafter\lstset\expandafter{\lst@set}% - \lsthk@DisplayStyle - \catcode\active=\active - \lst@Init\relax \let\lst@gobble\z@ - \lst@SkipToFirst - \lst@ifprint \def\lst@next{\lst@get@filecontents{#1}}% - \else \let\lst@next\@empty - \fi - \lst@next - \lst@DeInit - \endgroup} -\newread\lst@inputfile -\def\lst@get@filecontents#1{% - \let\lst@filecontents\@empty - \openin\lst@inputfile=#1\relax - \let\@lst@get@filecontents@prevline\relax - \lst@get@filecontents@loop - \closein\lst@inputfile - \lst@filecontents\empty} -\def\lst@get@filecontents@loop{% - \read\lst@inputfile to\@lst@get@filecontents@currline - \ifx\@lst@get@filecontents@prevline\relax\else - \expandafter\expandafter\expandafter\def - \expandafter\expandafter\expandafter\lst@filecontents - \expandafter\expandafter\expandafter{% - \expandafter\lst@filecontents\@lst@get@filecontents@prevline}% - \fi - \let\@lst@get@filecontents@prevline\@lst@get@filecontents@currline - \ifeof\lst@inputfile\else - \expandafter\lst@get@filecontents@loop - \fi} -%%% [$B$3$N=hM}$b!$AjEv6/0z$G$9!%(B] -\def\lst@BOLGobble{% - \ifnum\lst@gobble>\z@ - \@tempcnta\lst@gobble\relax - \expandafter\lst@BOLGobble@ - \else - \expandafter\lst@check@chartype@BOL - \fi} -\def\lst@BOLGobble@#1{% - \let\lst@next#1% - \ifx \lst@next\relax\else - \ifx \lst@next\lst@MProcessListing\else - \ifx \lst@next\lst@ProcessFormFeed\else - \ifx \lst@next\lstenv@backslash - \let\lst@next\lstenv@BOLGobble@@ - \else - \let\lst@next\lst@BOLGobble@@ - \ifx #1\lst@ProcessTabulator - \advance\@tempcnta-\lst@tabsize\relax - \ifnum\@tempcnta<\z@ - \lst@length-\@tempcnta \lst@PreGotoTabStop - \fi - \else - \edef\@tempa{\lst@nextchar=`\string#1\relax}% - \@tempa - \ifnum\lst@nextchar<\@cclvi\else - \advance\@tempcnta\m@ne - \fi - \advance\@tempcnta\m@ne - \fi - \fi \fi \fi \fi - \lst@next} -\def\lst@BOLGobble@@{% - \ifnum\@tempcnta>\z@ - \expandafter\lst@BOLGobble@ - \else - \expandafter\lst@check@chartype@BOL - \fi -} -% -% \begin{$B=$@5;v9`(B}{1.3} -% $B$A$g$C$H$7$?=$@5(B -\gdef\lst@breakProcessOther#1{\lst@ProcessOther#1} -% $B%=!<%9%3!<%IL\:\$7$^$7$?!#(B - -\begin{quote} - \url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21172.html}\\ - \url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21184.html}\\ - \url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21189.html}\\ - \url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21197.html} -\end{quote} - - Copyright $B$O5H1JE/H~;a$K$"$k$N$@$H;W$$$^$9!%(B - -\section{$B99?7MzNr(B}% ChageLogs - -\begin{description} - \item[ver.~0.1 (2004/03/24)] - $B$H$j$"$($:8x3+!%(B - \item[ver.~0.2 (2006/02/20)] - \verb|\lst@breakProcessOther| $BL?Na$NDj5A$NDI2C!%(B -\end{description} - -\section{$B%=!<%9%3!<%I(B} -\par\narrowbaselines -\verbatiminput{jlisting.sty} -\end{document} diff -r 94c9c506bba9 -r 958634b9fa32 master_paper.bib --- a/master_paper.bib Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -@article{ - cerium, - author = "宮國 渡 and 河野 真治 and 神里 晃 and 杉山 千秋", - title = "Cell 用の Fine-grain Task Manager の実装", - journal = "情報処理学会 システムソフトウェアとオペレーティング・システム研究会(OS)", - month = "April", - year = 2008 -} - -@article{ - alice, - author = "赤嶺 一樹 and 河野 真治", - title = "DataSegment API を用いた分散フレームワークの設計", - journal = "日本ソフトウェア科学会第28回大会論文集", - month = "Sep", - year = 2011 -} - -@misc{cell, - author = "{Sony Corporation}", - title = "{Cell broadband engine architecture}", - year = 2005 -} - -@article{ - segment, - author = "河野 真治 and 杉本 優", - title = "Code Segment と Data Segment によるプログラミング手法", - journal = "第54回プログラミング・シンポジウム", - month = "Jan", - year = 2013 -} - -@article{ - cbc, - author = "河野 真治 and 島袋 仁", - title = "C with Continuation と、そのPlayStationへの応用", - journal = "情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS)", - month = "May", - year = 2000 -} - -@article{ - cbc-llvm, - author = "徳森 海斗 and 河野 真治", - title = " Continuation based C の LLVM/clang 3.5 上の実装について", - journal = "情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS)", - month = "May", - year = 2014 -} - -@article{ - monad, - author = "Eugenio Moggi", - title = "Computational lambda-calculus and monads", - journal = "Proceedings of the Fourth Annual Symposium on Logic in computer science", - year = 1989 -} - -@article{ - model-check, - author = "下地 篤樹 and 河野 真治", - title = "線形時相論理によるContinuation based Cプログラムの検証", - journal = "情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS)", - month = "April", - year = 2007 -} - -@manual{opencl, -author = "{Aaftab Munshi, Khronos OpenCL Working Group}", -title ="{The OpenCL Specification Version 1.0}", -year = 2007 -} - -@misc{cuda, -title = "{CUDA}", -howpublished = "{https://developer.nvidia.com/category/zone/cuda-zone/}" -} - -@misc{ - msg, - title = "MessagePack", - howpublished = "{http://msgpack.org/}" -} \ No newline at end of file diff -r 94c9c506bba9 -r 958634b9fa32 master_paper.sty --- a/master_paper.sty Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,483 +0,0 @@ -% -% 修士卒業論文スタイルファイル master_papar.sty(ver. 2.1e) -% Time-stamp: <01/03/01 22:01:27 ryuji> -% -% ver 2.1e 2/3/01 ryuji -% ver 2.0e 17/12/00 ryuji -% ver 1.0e 05/11/99 hiroki -% -% modifier: Ryuji Gushiken(ryuji@ads.ie.u-ryukyu.ac.jp) -% -% author: Hiroki Taira(hiroki@ads.ie.u-ryukyu.ac.jp) - -% usage: -% -%\documentclass[a4j]{jreport} -% -%\usepackage{master_paper} -% -% -%\jtitle{修士論文スタイルファイル\\自律分散研バージョン} -%\etitle{\LaTeX style test file for master paper} -%\year{平成11年度} -%\affiliation{琉球大学大学院理工学研究科\\ 情報工学専攻} -%\author{名字 名前} -% -%\begin{document} -% -%\maketitle -% -%%要旨 -%\input{abstract.tex} -% -%%目次 -%\tableofcontents -% -%%図目次 -%\listoffigures -% -%%表目次 -%\listoftables -% -%%第一章 -%\input{chapter1.tex} -%%chapter1.texの\chapter{}の後ろに次のコマンドを追加してください。 -%%ページカウントがリセットされ、ページ数がアラビア文字になります。 -%% \pagenumbering{arabic} -%%第二章 -%\input{chapter2.tex} -%%第三章 -%\input{chapter3.tex} -% -%%付録 -%\input{appendix.tex} -% -%%謝辞 -%%\input{thanx.tex} -% -%%参考文献 -%\input{biblography.tex} -% -%\end{document} - -\typeout{****************************************************************} -\typeout{** 平成15年度 琉球大学大学院 学位論文(修士) ********************} -\typeout{** スタイルファイル(LaTeX2e) : 非公式 ********************} -\typeout{****************************************************************} - -%長さ設定 -\hoffset -1in \addtolength{\hoffset}{20mm} -\voffset -1in \addtolength{\voffset}{10mm} -\oddsidemargin 10mm -\topmargin 0mm -\headheight 10mm -\headsep 15mm -%\textheight 39\baselineskip \addtolength{\textheight}{\topskip} -\textheight 212mm -\textwidth 160mm -\marginparsep 3mm -\marginparwidth 15mm -\footskip \headsep - - -% 年度 -\def\@year{} -\def\year#1{\gdef\@year{#1}} -\def\@eyear{} -\def\eyear#1{\gdef\@eyear{#1}} - -% タイトル -\def\jetitle{} -\def\jtitle#1{\gdef\@title{#1}} -\def\@etitle{} -\def\etitle#1{\gdef\@etitle{#1}} - -% 名前 -\def\@author{} -\def\author#1{\gdef\@author{#1}} -\def\@eauthor{} -\def\eauthor#1{\gdef\@eauthor{#1}} - -% 学位 -\def\thesis{修士(工学)学位論文} -\def\ethesis{Master's Thesis of Engineering} - -% 大学 -\def\university{琉球大学} -\def\euniversity{University of the Ryukyus} - -% 所属 -\def\department{大学院理工学研究科} -\def\edepartment{Graduate School of Engineering and Science} - -% 専攻 -\def\course{情報工学専攻} -\def\ecourse{Infomation Engineering Course} - -% 署名 -\def\commission{論 文 審 査 会} - -% 指導教員 -\def\@chife{} -\def\chife#1{\gdef\@chife{#1}} -\def\@echife{} -\def\echife#1{\gdef\@echife{#1}} - -%表紙 -%\renewcommand{\maketitle}{% -%\newpage\null -%\thispagestyle{empty} -%\vskip 1cm% -%\begin{center}% -%\let\footnote\thanks -% {\huge \@title \par}% -% \vskip 1.5em% -% {\huge \@etitle \par}% -% \vskip 2.5em% -% {\LARGE \@year \ \thesis \par}% -% \vskip 10em% -%% {\huge \@belongto \par}% -% {\LARGE \@affiliation \par}% -% \vskip 1.5em% -% {\LARGE \@author \par}% -%\end{center}% -%%\par\vskip 1.5em -%} -\renewcommand{\maketitle}{% - \newpage\null - \thispagestyle{empty} - \vskip 1cm% - - \begin{center}% - \let\footnote\thanks - {\Large\bf\thesis\\} - {\Large\bf\ethesis\vskip 0.4em} - - {\LARGE\bf\mc\@title\\} - {\LARGE\bf{\@etitle}\vskip 0.4 em} - - {\large\mc\@year\\} - {\large\@eyear\vskip 0.3 em} - - {\large\bf\mc\@author\par} - {\large\bf\@eauthor\par\vskip 0.8 em} - - {\includegraphics[clip,keepaspectratio=true,scale=0.48]{images/u-ryukyu-Mark.eps}\vskip 0.8 em} - - {\large\bf\mc\university\\} - {\large\bf\mc\department\\} - {\large\bf\mc\course\vskip 0.3 em} - - {\large\textbf\ecourse\\} - {\large\textbf\edepartment\\} - {\large\textbf\euniversity\vskip 0.3em} - - {\large\bf\mc\@chife\\} - {\large\bf\@echife\\} - \end{center} -} - -\newcommand{\makecommission} { - \thispagestyle{empty} - \null - \vskip 10 em - \begin{center} - 本論文は、修士(工学)の学位論文として適切であると認める。 - \end{center} - \vskip 10 em - \begin{minipage}{0.5\hsize} - \begin{center} - \end{center} - \end{minipage} - \begin{minipage}{0.5\hsize} - \begin{center} - \bf\commission - \vskip 3 em - \underline{                  印}\\ - (主 査)    和田 知久     - \vskip 2 em - \underline{                  印}\\ - (副 査)    高良 富夫     - \vskip 2 em - \underline{                  印}\\ - (副 査)    長田 智和     - \vskip 2 em - \underline{                  印}\\ - (副 査)    河野 真治     - \end{center} - \end{minipage} -} - -%abstract -\renewenvironment{abstract}{% - \titlepage - \thispagestyle{empty} - \null\vfil - \@beginparpenalty\@lowpenalty - {\Huge \bfseries \abstractname}% - \begin{center}% - \@endparpenalty\@M - \end{center} -}% - -\newenvironment{abstract_eng}{% - \titlepage - \thispagestyle{empty} - \null\vfil - \@beginparpenalty\@lowpenalty - {\Huge \bfseries \abstractengname}% - \begin{center}% - \@endparpenalty\@M - \end{center} -}% - -%目次 -\renewcommand{\tableofcontents}{% - \pagestyle{plain} - \if@twocolumn\@restonecoltrue\onecolumn - \else\@restonecolfalse\fi - \chapter*{\contentsname - \@mkboth{\contentsname}{\contentsname}% - } \pagenumbering{roman}\@starttoc{toc}% - \if@restonecol\twocolumn\fi -} - -% 目次用ページ番号 -\newcommand\frontmatter{% - \cleardoublepage - %\@mainmatterfalse - \pagenumbering{roman} -} - -% 本文用ページ番号 -\newcommand\mainmatter{% - \cleardoublepage - % \@mainmattertrue - \pagenumbering{arabic} -} - -\newcommand\backmatter{% - \if@openright - \cleardoublepage - \else - \clearpage - \fi - % \@mainmatterfalse -} - -%付録 -\renewcommand{\appendix}{\par - \setcounter{chapter}{0}% - \setcounter{section}{0}% - \renewcommand{\@chapapp}{\appendixname}% - \renewcommand{\@chappos}\space% - \renewcommand{\thechapter}{\@Alph\c@chapter} - \renewcommand{\thesection}{\thechapter-\arabic{section}}} - - -%章 -\renewcommand{\chapter}{% -% \pagestyle{plain} -% \pagestyle{m@tterheadings} - \pagestyle{anotherheadings} - \if@openright\cleardoublepage\else\clearpage\fi -% \thispagestyle{jpl@in}% - \thispagestyle{anotherplain}% - \global\@topnum\z@ - \@afterindentfalse - \secdef\@chapter\@schapter} -\def\@chapter[#1]#2{% - \ifnum \c@secnumdepth >\m@ne - \refstepcounter{chapter}% - \typeout{\@chapapp\space\thechapter\space\@chappos (\thepage ページ)}% - \addcontentsline{toc}{chapter}% - {\protect\numberline{\@chapapp\thechapter\@chappos}#1}% - \else - \addcontentsline{toc}{chapter}{#1}% - \fi - \chaptermark{#1}% - \addtocontents{lof}{\protect\addvspace{10\p@}}% - \addtocontents{lot}{\protect\addvspace{10\p@}}% - \@makechapterhead{#2}\@afterheading} -\def\@makechapterhead#1{\hbox{}% - \vskip2\Cvs - {\parindent\z@ - \raggedright -% - \reset@font\huge\bfseries - \ifnum \c@secnumdepth >\m@ne - \setlength\@tempdima{\linewidth}% - \setbox\z@\hbox{\@chapapp\thechapter\@chappos\hskip1zw}% - \addtolength\@tempdima{-\wd\z@}% - \unhbox\z@\nobreak - \vtop{\hsize\@tempdima#1}% - \else - #1\relax - \fi}\nobreak\vskip3\Cvs} - - -\renewcommand{\prepartname}{\relax} %\renewcommand{\prepartname}{第} -\renewcommand{\postpartname}{部} -\renewcommand{\prechaptername}{第}%\renewcommand{\prechaptername}{第} -\renewcommand{\postchaptername}{章} -\renewcommand{\contentsname}{目 次} -\renewcommand{\listfigurename}{図 目 次} -\renewcommand{\listtablename}{表 目 次} -\renewcommand{\bibname}{参考文献} -\renewcommand{\indexname}{索 引} -\renewcommand{\figurename}{図} -\renewcommand{\tablename}{表} -\renewcommand{\appendixname}{付 録} -\renewcommand{\abstractname}{要 旨} -\newcommand{\abstractengname}{Abstract} - - -%%%% new environment for me(ryuji) -%定義のための環境 -\newcounter{defnum}[chapter] -\newcommand{\predef}{定義} -\newcommand{\postdef}{\relax} -\newenvironment{definition}{\vskip5mm% - \center\begin{minipage}{.8\textwidth} - \addtocounter{defnum}{1} - \begin{description}\item[\textbf{\predef\thechapter.\thedefnum\postdef}] } - {\end{description}\end{minipage}\newline\vskip5mm} - -\newcommand{\preex}{例題} -\newcommand{\postex}{\relax} -\newenvironment{example}{\vskip5mm% - \center\begin{minipage}{.9\textwidth} - \begin{description}\item[\textbf{[\preex\postex]\hskip1zw}] } - {\end{description}\end{minipage}\newline\vskip5mm} - -%%%% customized by me(ryuji) -%footnoteの表示部 -\def\@makefnmark{\hbox{\@textsuperscript{\normalfont - 注\kern0.1em \@thefnmark}}} - -%%%%%% added by ryuji %%%%%%%%%% -% ヘディング -% c.f. 奥村晴彦,''LaTeX2e 美文書作成入門,'' 技術評論社, pp207--231, 1997. - -%ヘッダ、フッタに追加するもの -\def\@lefthead{} -\def\marklefthead#1{\gdef\@lefthead{\small #1}} -\def\@leftfoot{} -\def\markleftfoot#1{\gdef\@leftfoot{\small #1}} - - -%\def\ps@headings{% -\def\ps@m@tterheadings{% - \let\@mkboth\@gobbletwo - \let\ps@jpl@in\ps@headnombre - \let\@oddfoot\@empty\let\@evenfoot\@empty -% \def\@evenhead{\thepage\hfil\leftmark}% - \def\@oddhead{\hss\addtolength{\textwidth}{-4.5zw} -% \underline{\hbox to \textwidth{\hfil\textbf{\rightmark}}% - \underline{\hbox to \textwidth{\vfil\@lefthead\hfil\textbf{\leftmark}}% - \hfil\hskip4zw\thepage}}% - - \def\chaptermark##1{\markboth{% - \ifnum \c@secnumdepth >\m@ne - \@chapapp\thechapter\@chappos\hskip1zw - \fi - ##1}{}}% - \def\sectionmark##1{\markright{% - \ifnum \c@secnumdepth >\z@ \thesection.\hskip1zw\fi - ##1}}% - } - - -%もう一個のバージョン:headings(本命) -\def\ps@anotherheadings{% - \let\@mkboth\@gobbletwo - \let\ps@jpl@in\ps@headnombre - \def\@oddfoot{\reset@font% - \textbf{\footnotesize \@leftfoot}\hfil\bf\thepage}% - \let\@evenfoot\@empty - \def\@oddhead{\hss -% \underline{\hbox to \textwidth{\hfil\textbf{\rightmark}}% - \underline{\hbox to \textwidth{\@lefthead\hfil\textbf{\leftmark}}% - \hfil}}% - - \def\chaptermark##1{\markboth{% - \ifnum \c@secnumdepth >\m@ne - \@chapapp\thechapter\@chappos\hskip1zw - \fi - ##1}{}}% - \def\sectionmark##1{\markright{% - \ifnum \c@secnumdepth >\z@ \thesection.\hskip1zw\fi - ##1}}% - } -%もう一個のバージョン:plain(本命) -\def\ps@anotherplain{% - \let\@mkboth\@gobbletwo - \let\ps@jpl@in\ps@headnombre - \def\@oddfoot{\reset@font% - \textbf{\footnotesize \@leftfoot}\hfil\bf\thepage}% - \let\@evenfoot\@empty - \let\@oddhead\@empty - \def\chaptermark##1{\markboth{% - \ifnum \c@secnumdepth >\m@ne - \@chapapp\thechapter\@chappos\hskip1zw - \fi - ##1}{}}% - \def\sectionmark##1{\markright{% - \ifnum \c@secnumdepth >\z@ \thesection.\hskip1zw\fi - ##1}}% - } - -%スタイルセットのため -\renewenvironment{thebibliography}[1] -{\chapter*{\bibname\@mkboth{\bibname}{\bibname}}% - \markboth{\bibname}{\bibname} - \addcontentsline{toc}{chapter}{参考文献} - \list{\@biblabel{\@arabic\c@enumiv}}% - {\settowidth\labelwidth{\@biblabel{#1}}% - \leftmargin\labelwidth - \advance\leftmargin\labelsep - \@openbib@code - \usecounter{enumiv}% - \let\p@enumiv\@empty - \renewcommand\theenumiv{\@arabic\c@enumiv}}% - \sloppy - \clubpenalty4000 - \@clubpenalty\clubpenalty - \widowpenalty4000% - \sfcode`\.\@m} - {\def\@noitemerr - {\@latex@warning{Empty `thebibliography' environment}}% - \endlist} - - -%索引のため -\renewenvironment{theindex}{% - \clearpage - \columnseprule.4pt \columnsep 2zw - \markboth{\indexname}{\indexname} - \addcontentsline{toc}{chapter}{\indexname} - \begin{multicols}{3}[{\chapter*{\indexname}}] - \@mkboth{\indexname}{\indexname} - \thispagestyle{anotherplain}% - \parindent=0pt - \parskip=0pt plus .3pt \relax - \let\item=\@idxitem - \raggedright - \footnotesize\narrowbaselines - }{\end{multicols}} -\def\indexname{索引} -\def\narrowbaselines{\fontsize\@xpt\@xiipt\selectfont} -\def\@idxitem{\par \hangindent4zw} -\def\subitem{\par \hangindent4zw \hspace*{2zw}} -\def\subsubitem{\par \hangindent4zw \hspace*{3zw}} - -%禁則処理の追加 - %事前でのブレークを禁止(禁止>=10000) -\prebreakpenalty\jis`,=10000 % , -\prebreakpenalty\jis`.=10000 % . -%\prebreakpenalty\jis"2124=10000 % , -%\prebreakpenalty\jis"2125=10000 % . -%\prebreakpenalty\jis`、=10000 % 、 -%\prebreakpenalty\jis`。=10000 % 。 -%%\prebreakpenalty\jis"2124=10000 % 、 -%%\prebreakpenalty\jis"2125=10000 % 。 diff -r 94c9c506bba9 -r 958634b9fa32 master_paper.tex --- a/master_paper.tex Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,107 +0,0 @@ -\documentclass[a4j,12pt]{jreport} -\usepackage{master_paper} -\usepackage{ascmac} -\usepackage[dvipdfmx]{graphicx} -\usepackage{here} -\usepackage{listings,jlisting} -\usepackage{comment} -\usepackage[deluxe, multi]{otf} - -%\input{dummy.tex} %% font - -\jtitle{Code Segment と Data Segment を持つ Gears OS の設計} -\etitle{Design of Gears OS with Code and Data Segment} -\year{2016年 3月} -\eyear{March 2016} -\author{小久保 翔平} -\eauthor{Shohei KOKUBO} -\chife{指導教員:教授 和田 知久} -\echife{Supervisor: Prof. Tomohisa WADA} - -\marklefthead{% 左上に挿入 - \begin{minipage}[b]{.4\textwidth} - 琉球大学大学院学位論文(修士) -\end{minipage}} - -\markleftfoot{% 左下に挿入 - \begin{minipage}{.8\textwidth} - Code Segment と Data Segment を持つ Gears OS の設計 -\end{minipage}} - -\newcommand\figref[1]{図 \ref{fig:#1}} -\newcommand\tabref[1]{表 \ref{tab:#1}} - -\lstset{ - language=C, - tabsize=2, - frame=single, - basicstyle={\ttfamily\footnotesize},% - identifierstyle={\footnotesize},% - commentstyle={\footnotesize\itshape},% - keywordstyle={\footnotesize\bfseries},% - ndkeywordstyle={\footnotesize},% - stringstyle={\footnotesize\ttfamily}, - breaklines=true, - captionpos=b, - columns=[l]{fullflexible},% - xrightmargin=0zw,% - xleftmargin=1zw,% - aboveskip=1zw, - numberstyle={\scriptsize},% - stepnumber=1, - numbersep=0.5zw,% - lineskip=-0.5ex, - numbers=left -} - -%%% 索引のために以下の2行を追加 -\usepackage{makeidx,multicol} -\makeindex -\begin{document} - -%rome -\frontmatter - -\maketitle -\newpage - -\makecommission - -%要旨 -\input{abstract.tex} -\input{abstract_eng.tex} - -%目次 -\tableofcontents - -%図目次 -\listoffigures - -%表目次 -\listoftables - -%arabic -\mainmatter - -%chapters -\input{intro.tex} -\input{cerium.tex} -\input{cbc.tex} -\input{gearsos.tex} -\input{comparison.tex} -\input{evaluation.tex} -\input{conclusion.tex} - -%謝辞 -\addcontentsline{toc}{chapter}{謝辞} -\input{thx.tex} - -%参考文献 -\nocite{*} -\bibliographystyle{junsrt} -\bibliography{master_paper} - -%付録 - -\printindex -\end{document} diff -r 94c9c506bba9 -r 958634b9fa32 paper/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/Makefile Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,78 @@ +TARGET = master_paper + +SRC = $(wildcard *.tex) + +LATEX = platex -shell-escape +BIBTEX = pbibtex +DVIPS = dvips +DVIPDFM = dvipdfmx +RM = rm -f +EBB = extractbb + +# Option definitions +DVIPDFMOPT = +DVIPSOPT = -D 720 -mode esphi -O 0mm,0mm -N0 + +# Suffixes definitions +.SUFFIXES: .tex .dvi + +# Recipes +all: pdf# $(TARGET).ps + open $(TARGET).pdf + +dvi: + @echo "----------- make dvi file ($(TARGET).dvi) ----------" + $(LATEX) $(TARGET) + $(BIBTEX) $(TARGET) + $(LATEX) $(TARGET) + $(LATEX) $(TARGET) +pdf: dvi + $(DVIPDFM) $(DVIPDFMOPT) $(TARGET) + +clean: + $(RM) *~ \#* + @if [ -f $(TARGET).aux ];\ + then $(RM) $(TARGET).aux;\ + fi + @if [ -f $(TARGET).log ];\ + then $(RM) $(TARGET).log;\ + fi + @if [ -f $(TARGET).toc ];\ + then $(RM) $(TARGET).toc;\ + fi + @if [ -f $(TARGET).lof ];\ + then $(RM) $(TARGET).lof;\ + fi + @if [ -f $(TARGET).lot ];\ + then $(RM) $(TARGET).lot;\ + fi + @if [ -f $(TARGET).big ];\ + then $(RM) $(TARGET).big;\ + fi + @if [ -f $(TARGET).bbl ];\ + then $(RM) $(TARGET).bbl;\ + fi + @if [ -f $(TARGET).ilg ];\ + then $(RM) $(TARGET).ilg;\ + fi + @if [ -f $(TARGET).idx ];\ + then $(RM) $(TARGET).idx;\ + fi + @if [ -f $(TARGET).ind ];\ + then $(RM) $(TARGET).ind;\ + fi + @if [ -f $(TARGET).dvi ];\ + then $(RM) $(TARGET).dvi;\ + fi + @if [ -f $(TARGET).pdf ];\ + then $(RM) $(TARGET).pdf;\ + fi + @if [ -f $(TARGET).out ];\ + then $(RM) $(TARGET).out;\ + fi + @if [ -f $(TARGET).bbl ];\ + then $(RM) $(TARGET).bbl;\ + fi + @if [ -f $(TARGET).blg ];\ + then $(RM) $(TARGET).blg;\ + fi diff -r 94c9c506bba9 -r 958634b9fa32 paper/abstract.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/abstract.tex Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,7 @@ +\begin{abstract} + 本研究では Cerium を開発して得られた知見から Code Segment と Data Segment を用いた並列フレームワークの開発を行なっている。 + Code Segment と Data Segment は処理とデータの単位である。 + 今回設計した Gears OS ではプログラムを Code Segment と Data Segment で記述する。 + Code Segment と Data Segment で記述することでプログラム全体の並列度を高めて効率的に並列処理することを可能にする。 + 本論文では Gears OS の基本的な機能を設計し、CbC(Continuation based C) を用いて実装する。 +\end{abstract} diff -r 94c9c506bba9 -r 958634b9fa32 paper/abstract_eng.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/abstract_eng.tex Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,7 @@ +\begin{abstract_eng} + We are developing parallel framework using Code/Data Segment. + Code/Data Segment are unit of processing and data. + Use Code/Data Segment in Gears OS Programming. + Parallelism in a high performance Gears OS with Code/Data Segment. + We show same implementation of Gears OS using CbC(Continuation based C). +\end{abstract_eng} diff -r 94c9c506bba9 -r 958634b9fa32 paper/cbc.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/cbc.tex Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,51 @@ +\chapter{CbC} +Gears OS の実装には LLVM/Clang 上に実装した CbC を用いる。 + +CbC は C から for 文、while 文といったループ制御構文や関数呼び出しを取り除き、Code Segment と goto による軽量継続を導入している。 +図:\ref{fig:cs} は goto による Code Segment の遷移を表したものである。 + +本章では CbC の特徴である Code Segment と Gears OS に対するサポートについて説明する。 + + +\begin{figure}[!h] + \begin{center} + \includegraphics[scale=0.6]{./images/codesegment2.pdf} + \end{center} + \caption{goto による Code Segment 間の継続} + \label{fig:cs} +\end{figure} + +\section{Code Segment} +CbC では処理の単位として Code Segment を用いる。 +Code Segment は CbC における最も基本的な処理単位であり、C の関数と異なり戻り値を持たない。 +Code Segment の宣言は C の関数の構文と同じように行い、型に \_\_code を用いる。 +前述した通り、Code Segment は戻り値を持たないので \_\_code はそれが関数ではなく Code Segment であることを示すフラグのようなものである。 +Code Segment の処理内容の定義も C の関数同様に行うが、CbC にはループ制御構文が存在しないのでループ処理は自分自身への再帰的な継続を行うことで実現する。 + +現在の Code Segment から次の Code Segment への処理の移動は goto の後に Code Segment 名と引数を並べて記述するという構文を用いて行う。 +この goto による処理の遷移を継続と呼ぶ。 +C において関数呼び出しを繰り返し行う場合、呼び出された関数の引数の数だけスタックに値が積まれていくが、戻り値を持たない Code Segment ではスタックに値を積んでいく必要が無くスタックは変更されない。 +このようなスタックに値を積まない継続を軽量継続と呼ぶ。 +この軽量継続により並列化、ループ制御、関数コールとスタックの操作を意識した最適化がソースコードレベルで行えるようになる。 + +\section{プロトタイプ宣言の自動化} +Code Segment の処理単位は小さく、目的の計算を実現するためには多くの Code Segment を書く必要がある。 +Code Segment と同じ数だけプロトタイプ宣言を書く必要があり、好ましくない。 +また、tail call elimination を強制するためにはプロトタイプの宣言を正確に記述することを要求するためプログラマに対する負担が大きい。 +つまり、プロトタイプ宣言を自動的に行うようにすることで tail call elimnation の条件を安定して満たすことができ、プログラマの負担も減らすことができる。 + +プロトタイプ宣言の自動化は、パーサーが Code Segment への継続の解析を行なった際にプロトタイプ宣言の有無を確認し、存在しない場合に接続先の Code Segment のプロトタイプ宣言を生成するというようにして行う。 + +\section{Gear OS の構文サポート} +Gears OS では Context から必要なデータを取り出して処理を行う。 +しかし、Context を直接扱うのはセキュリティ的に好ましくない。 +そこで Context から必要なデータを取り出して Code Segment に接続する stub を定義する。 +stub は接続される Code Segment から推論することが可能である。 +また、Code Segment の遷移には Meta Code Segment を挟む。 +Meta Code Segment への接続も省略して記述できるようにする。 +省略形のソースコード:\ref{sample}から実際にコンパイルされるソースコード:\ref{sample_trans}へ変換される。 + +\newpage + +\lstinputlisting[label=sample, caption=省略形]{src/sample.c} +\lstinputlisting[label=sample_trans, caption=変換後]{src/sample_transform.c} diff -r 94c9c506bba9 -r 958634b9fa32 paper/cerium.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/cerium.tex Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,468 @@ +\chapter{並列プログラミングフレームワーク Cerium} +Cerium は PlayStation 3(PS3) に搭載された Cell Broadband Engine(Cell) 向けの Fine-Grain TaskManager として当研究室で設計・開発されたフレームワークである。 +本章では Cerium の実装について説明する。 + +\section{Cerium の概要} +Cerium は、TaskManager, SceneGraph, Rendering Engine の3つの要素から構成される。 +Cell 用のゲームフレームワークとして開発されたが、現在では Multi-Core CPU, GPU も計算資源として利用可能な汎用計算フレームワークとなっている。 + +\section{TaskManager} +TaskManager は、Task と呼ばれる分割されたプログラムを管理する。 +サブルーチンまたは関数が Task の単位となる。 +TaskManager が提供する API を表:\ref{table:TaskManager_api}に示す。 + +\begin{table}[htpb] + \begin{center} + \small + \begin{tabular}[htpb]{|c|l|} \hline + create\_task & Task の生成 \\ \hline + allocate & 環境のアライメントに考慮した allocator \\ \hline + set\_inData & Task への入力データのアドレスを追加 \\ \hline + set\_outData & Task からのデータ出力先アドレスを追加 \\ \hline + set\_param & Task のパラメータ(32 bits) \\ \hline + wait\_for & Task の依存関係を設定 \\ \hline + set\_cpu & Task を実行する Device の設定 \\ \hline + spawn & Task を Queue に登録 \\ \hline + iterate & データ並列で実行する Task として Queue に登録 \\ \hline + \end{tabular} + \caption{TaskManager API} + \label{table:TaskManager_api} + \end{center} +\end{table} + +TaskManager は ActiveTaskList と WaitTaskList の2種類の Queue を持つ。 +依存関係を解決する必要がある Task は WaitTaskList に入れられる。 +TaskManger によって依存関係が解決されると ActiveTaskList に移され、実行可能な状態となる。 +実行可能な状態となった Task は set\_cpu で指定された Device に対応した Scheduler に転送し実行される。 +図:\ref{fig:createTask}は Cerium が Task を生成/実行する場合のクラスの構成である。 + +\begin{figure}[!ht] + \begin{center} + \includegraphics[scale=0.6]{images/createTask.pdf} + \end{center} + \caption{TaskManager} + \label{fig:createTask} +\end{figure} + +\section{Cerium における Task} +Task は TaskManager の API を利用して生成する。 +生成された Task には以下の要素を設定することができる。 + +\begin{itemize} +\item input data \\ + set\_inData を用いて設定する Task が実行する処理に必要なデータの入力元となるアドレス。 + 関数を呼び出す際の引数に相当する。 + 汎用ポインタ(void* 型) なので Task 側で適切なキャストを行う必要がある。 +\item output data \\ + set\_outData を用いて設定する Task が処理したデータの出力先となるアドレス。 + 関数の戻り値に相当する。 +\item parameter \\ + set\_param を用いて設定するデータの処理に必要な実数値(index 等)。 +\item cpu type \\ + set\_cpu を用いて設定する Task が実行される Device の組み合わせ。 + Cell, Multi-Core CPU, GPU またはこれらの組み合わせを指定することができる。 +\item dependency \\ + wait\_for を用いて設定する他の Task との依存関係。 + 依存関係が解決された Task は実行可能な状態となる。 +\end{itemize} + +ソースコード:\ref{inittwice_cerium} に Task を生成する例題を示す。 + +input data として int 型の配列を受け取り、各要素を2倍にして output data に格納する twice という例題である。 +CPU を用いてデータ並列で実行する Task を生成している。 +set\_cpu で GPU を指定することで GPU を用いて実行される。 + +\lstinputlisting[label=inittwice_cerium, caption=Task の生成]{src/init_twice_cerium.cc} + +CPU 上で実行される Task, GPU 上で実行される kernel はソースコード:\ref{twice_task_cerium}, ソースコード\ref{twice_task_cuda} の通りになる。 + +Task には実行時に必要なデータが格納されている SchedTask, 設定した Input/Output Data が格納されている Buffer が渡される。 + +\lstinputlisting[label=twice_task_cerium, caption=実行される Task]{src/twice_cerium.cc} +\lstinputlisting[label=twice_task_cuda, caption=実行される kernel]{src/twice_cuda.cu} + +\section{Task のパイプライン実行} +Cell(図:\ref{fig:cellarch})や GPU(図:\ref{fig:gpuarch})のように異なるメモリ空間を持つ Device を計算資源として利用するにはデータの転送が必要になる。 +このデータ転送がボトルネックとなり、並列度が低下してしまう。 +転送処理をオーバーラップし、並列度を維持するために Cerium では Task のパイプライン実行をサポートしている。 + +\begin{figure}[htpd] + \begin{minipage}[t]{0.5\hsize} + \begin{center} + \includegraphics[scale=0.5]{images/cell_arch.pdf} + \end{center} + \caption{Cell Architecture} + \label{fig:cellarch} + \end{minipage} + \begin{minipage}[t]{0.5\hsize} + \begin{center} + \includegraphics[scale=0.5]{images/gpu_arch.pdf} + \end{center} + \caption{GPU Architecture} + \label{fig:gpuarch} + \end{minipage} +\end{figure} + +TaskManager である程度の Task をまとめた TaskList を生成し、実行する Device に対応した Scheduler に転送する。 +受け取った TaskList に沿ってパイプラインを組み Task を実行していく。 +TaskList でまとめられている Task は依存関係が解決されているので自由にパイプラインを組むことが可能である。 +実行完了は TaskList 毎ではなく、Task 毎に通知される。 +図:\ref{fig:scheduler}は TaskList を受け取り、Task をパイプラインで処理していく様子である。 + +\newpage + +\begin{figure}[ht] + \begin{center} + \includegraphics[scale=0.6]{images/scheduler.pdf} + \end{center} + \caption{Scheduler} + \label{fig:scheduler} +\end{figure} + +\section{マルチコアへの対応} +Cell には MailBox という機能がある。 +MailBox を用いることで双方向のデータの受け渡しが可能になる。 +FIFO キュー構造を持つ MailBox に対応させる形で Synchronized Queue 用いて Multi Core CPU 用の TaskManager に MailBox を移植した。 +Synchronized Queue は Queue を操作しているスレッドが常に1つになるようにバイナリセマフォを用いて制御する。 + +Cell では MailBox 以外に DMA 転送を使用してデータの受け渡しすることができる。 +DMA 転送は CPU を介さずに周辺装置とメモリ間でデータ転送を行う方式である。 +Cerium では DMA 転送を用いて Cell で実行することが可能である。 +Multi Core CPU 上で実行する場合、メモリ空間を共有しているので DMA 転送を行なっている部分をポインタ渡しを行うように修正し、直接アクセスさせることでデータ転送の速度の向上が見込める。 + +\newpage + +\section{データ並列による実行} +並列処理の方法としてタスク並列とデータ並列の2つがある。 + +タスク並列は Task 毎にデータを準備し、管理スレッドが個別に生成した Task を CPU に割り当てることで並列処理する方法である。 +異なる処理を同時に実行することができるというメリットがあるが、データ群の各要素に対して同じ処理をしたいときタスク並列では要素毎に同じ処理をする Task を生成する必要があり、ほとんど同一な大量の Task によってメモリを圧迫する場合がある。 +また、大量な Task の生成自体が大きなオーバーヘッドになる。 + +データ並列はあるデータ群を大量な Task で共有し、Task 実行時に処理範囲を計算し、その範囲にのみ処理を行うことで並列処理する方法である。 +実行スレッドで Task の生成・実行が行われるので、メモリの圧迫や Task 生成によるオーバーヘッドを抑えられる。 +並列化部分が全て同じ処理である場合、データ並列による実行のほうがタスク並列より有効である。 + +いままで Cerium における並列処理はタスク並列だったが、データ並列のよる実行もサポートした。 + +データ並列による実行では処理範囲を決定するための情報として index が必要になる。 +CPU による実行では SchedTask を参照(ソースコード:\ref{twice_task_cerium} 23行目)、GPU による実行では組み込み変数を参照(ソースコード:\ref{twice_task_cuda} 11行目)することで index を取得することができる。 + +データの長さが10、CPU の数が4でデータ並列による実行をした場合の index の割当は表\ref{table:dataparallel_index} の通りになる。 + +\begin{table}[htpb] + \begin{center} + \small + \begin{tabular}[htpb]{|c||c|c|c|c|} + \hline + stage & CPU0 & CPU1 & CPU2 & CPU3 \\ + \hline + \hline + 1 & 0 & 1 & 2 & 3 \\ + \hline + 2 & 4 & 5 & 6 & 7 \\ + \hline + 3 & 8 & 9 & & \\ + \hline + \end{tabular} + \caption{index の割り当て} + \label{table:dataparallel_index} + \end{center} +\end{table} + +\newpage + +\section{GPGPU への対応} +GPU の演算資源を Cerium から利用するために OpenCL, CUDA を用いた GpuScheduler, CudaScheduler を実装した。 +OpenCL, CUDA 単体を用いて GPGPU を行う場合、依存関係を記述する必要がある +しかし、Cerium には依存関係を解決する TaskManager があるので GpuScheduler, CudaScheduler は受け取った TaskList を元に GPU を制御して GPGPU を行えばよい。 + +GPU はメモリ空間が異なる(図\ref{fig:gpuarch})のでデータ転送が大きなオーバーヘッドになる。 +なので、kernel 実行中にデータ転送を行うなどしてデータ転送をオーバーラップする必要がある。 +CUDA で GPU を制御するには同期命令を使う方法と非同期命令を使う方法があるが、同期命令ではデータ転送をオーバーラップすることが出来ないので非同期命令を利用して GPU を制御する。 +非同期命令は Stream に発行することで利用することができる。 +Stream に発行された命令は発行された順序で実行される。 +非同期命令と Stream を利用してデータ転送をオーバラップするには複数の Stream を準備して、Host から Device への転送・kernel の実行・Device から Host への転送を1セットとして各 Stream に発行することで実現できる。 +同期命令を使う場合と非同期命令を使う場合の実行の様子は図:\ref{fig:stream}の通りである。 + +\begin{figure}[ht] + \begin{center} + \includegraphics[scale=0.45]{images/stream.pdf} + \end{center} + \caption{Overlap Data Transfer} + \label{fig:stream} +\end{figure} + +\newpage + +\section{Cerium の評価} +Bitonic Sort, Word Count, Fast Fourier Transform(FFT) の3つの例題を用いて Cerium を評価する。 + +測定環境は表:\ref{table:firefly}、測定に用いる GPU は表\ref{table:k5000}の通りである。 + +\begin{table}[htpb] + \begin{center} + \small + \begin{tabular}[htpb]{|c||c|} + \hline + Model & MacPro Mid 2010 \\ + \hline + OS & Mac OS X 10.10.\\ + \hline + Memory & 16GB \\ + \hline + CPU & 2 x 6-Core Intel Xeon 2.66GHz \\ + \hline + GPU & NVIDIA Quadro K5000 \\ + \hline + \end{tabular} + \caption{測定環境} + \label{table:firefly} + \end{center} +\end{table} + +\begin{table}[htpb] + \begin{center} + \small + \begin{tabular}[htpb]{|c||c|} + \hline + Cores & 1536 \\ + \hline + Clock Speed & 706MHz \\ + \hline + Memory Size & 4GB GDDR5 \\ + \hline + Memory Bandwidth & 173 GB/s \\ + \hline + \end{tabular} + \caption{Quadro K5000} + \label{table:k5000} + \end{center} +\end{table} + +\subsection{Bitonic Sort} +Bitonic Sort は並列処理に向いたソートアルゴリズムである。 +代表的なソートアルゴリズムである Quick Sort も並列処理することが、Quick Sort はソートの過程で並列度が変動するので自明な台数効果が出づらい。 +一方、Bitonic Sort は最初から最後まで並列度が変わらずに並列処理による恩恵を得やすい。 +図:\ref{fig:bitonic}は要素数8のデータに対する Bitonic Sort のソーティングネットワークである。 + +\newpage + +\begin{figure}[!h] + \begin{center} + \includegraphics[scale=0.5]{images/bitonic.pdf} + \end{center} + \caption{Sorting Network : bitonic sort} + \label{fig:bitonic} +\end{figure} + +Bitonic Sort の並列処理に用いられる Task は2点間のの比較・交換を行うだけの小さい処理なので、1コア当たりのクロック数よりもコアの数が結果に与える影響が大きいと考えられる。 +よって、通信時間を考慮しなければ CPU よりコア数が多い GPU が有利となる。 + +Cerium を用いて Bitonic Sort を実装し、要素数$2^{20}$のデータに対してコア数・プロセッサの種類を変更して測定を行なった結果は表\ref{table:bitonic}、図\ref{fig:bitonic_box}の通りである。 + +\begin{table}[!h] + \begin{center} + \small + \begin{tabular}[htpb]{|c||c|} + \hline + Processor & Time(ms) \\ + \hline + \hline + 1 CPU & 6143 \\ + \hline + 2 CPUs & 4633 \\ + \hline + 4 CPUs & 2557 \\ + \hline + 8 CPUs & 1630 \\ + \hline + 12 CPUs & 1318 \\ + \hline + GPU & 155 \\ + \hline + \end{tabular} + \caption{要素数$2^{20}$に対するソート} + \label{table:bitonic} + \end{center} +\end{table} + +\newpage + +\begin{figure}[!h] + \begin{center} + \includegraphics[scale=1.0]{images/bitonic_sort_03.pdf} + \end{center} + \caption{要素数$2^{20}$に対するソート} + \label{fig:bitonic_box} +\end{figure} + +1 CPU と 12 CPU では約4.6倍の速度向上が見られた。 +これは Task の粒度が小さいため1コア当たりのクロック数の高さが活かしづらく、並列化によるオーバーヘッドが結果に影響を与えたと考えられる。 +CPU を用いた並列化には Task の粒度をある程度大きくし1コア当たりの仕事量を増やして CPU のクロック数の高さを活かすことが重要であることがわかる。 + +12 CPU と GPU では約8.5倍の速度向上が見られた。 +GPU の特徴であるコア数の多さによって CPU より高い並列度を発揮した結果だと考えられる。 +GPU の場合はその超並列性を活かすため Task を細かく分割することが重要であることがわかる。 + +測定結果から CPU と GPU で並列化の方法を変更する必要があることがわかった。 +Cerium を用いてヘテロジニアス環境で並列実行する場合、混在しているプロセッサの特徴に合わせたスケジューリングを行い並列実行するように Scheduler を改良する必要がある。 + +次に要素数も変更して測定を行なった。 +結果は図:\ref{fig:bitonic_result_2}、図:\ref{fig:bitonic_result_1}の通りである。 + +\newpage + +\begin{figure}[!h] + \begin{center} + \includegraphics[scale=1.0]{images/bitonic_sort_02.pdf} + \end{center} + \caption{Bitonic Sort(from $2^{14}$ to $2^{17}$)} + \label{fig:bitonic_result_2} +\end{figure} + +\begin{figure}[!h] + \begin{center} + \includegraphics[scale=1.0]{images/bitonic_sort_01.pdf} + \end{center} + \caption{Bitonic Sort(from $2^{14}$ to $2^{20}$)} + \label{fig:bitonic_result_1} +\end{figure} + +\newpage + +GPGPU では通信時間を考慮する必要がある。 +図:\ref{fig:bitonic_result_2}を見ると要素数$2^{14}$のソートでは GPU が一番遅い。 +これはソート処理の時間より通信時間が大きいことが原因であると考えられる。 +通信時間を含めた処理時間が GPU が CPU を上回るのは要素数$2^{17}$を超えてからである。 + +\subsection{Word Count} +並列処理を行う際に Task を大量に生成する場合がある。 +一度に大量の Task を生成してしまうと Task がメモリを圧迫して処理速度が著しく低下する。 +改善策としては Task の生成と実行を平行して行えばよい。 +Cerium では Task を生成する Task を記述することが可能なので Task の生成と実行を平行して行うことができる。 + +Word Count を並列処理する場合、与えられたテキストを分割して、分割されたデータごとに並列処理を行う。 +分割したデータの数だけ Task が必要なのでテキストサイズによっては一度に Task を生成するとメモリを圧迫する可能性がある。 +よって、Task を生成する Task が必要になる。 +Word Count の処理の流れは図\ref{fig:wordcount}の通りである。 + +\begin{figure}[!h] + \begin{center} + \includegraphics[scale=0.7]{images/wordcount.pdf} + \end{center} + \caption{Word Count の流れ} + \label{fig:wordcount} +\end{figure} + +\newpage + +Cerium が複雑な並列処理を記述可能でその上、高い並列度を保てること示すため Cerium 上に Word Count を実装し、100MB のテキストデータに対して測定を行なった。 +結果は表:\ref{table:word_count}, 図:\ref{fig:word_count}の通りである。 + +\begin{table}[!h] + \begin{center} + \small + \begin{tabular}[htpb]{|c||c|} + \hline + Processor & Time(ms) \\ + \hline + \hline + 1 CPU & 716 \\ + \hline + 2 CPUs & 373 \\ + \hline + 4 CPUs & 197 \\ + \hline + 8 CPUs & 105 \\ + \hline + 12 CPUs & 87 \\ + \hline + GPU & 9899 \\ + \hline + GPU(Data Parallel) & 514 \\ + \hline + \end{tabular} + \caption{100MB のテキストデータに対する WordCount} + \label{table:word_count} + \end{center} +\end{table} + +\begin{figure}[!h] + \begin{center} + \includegraphics[scale=0.8]{images/word_count.pdf} + \end{center} + \caption{100MB のテキストデータに対する WordCount} + \label{fig:word_count} +\end{figure} + +1 CPU と 12 CPU では約8.2倍の速度向上が見られた。 +複雑な並列処理でも高い並列度が保てていることがわかる。 + +GPU を用いたタスク並列による実行は実用に耐えない速度である。 +これはタスク並列による実行では小さなデータを十数回 GPU に転送する必要があるからで、GPU で高速に処理するためにはデータ転送を如何にして抑えるかが重要かわかる。 +一方、GPU を用いたデータ並列による実行速度は 1 CPU の約1.4倍となった。 +元々 WordCount は GPU に不向きな例題ではあるが、データ並列による実行ではデータ転送の回数を抑えることができるので GPU でもある程度の速度を出せることがわかる。 + +\subsection{FFT} +FFT は信号処理や画像処理、大規模シミュレーションに至るまで幅広い分野で活用されている計算である。 +バタフライ演算などの計算の性質上、大量の演算資源を持つ GPU と相性が良い。 +Cerium に実装した GPU 実行機構の評価を行うために適切な例題であると考えられる。 + +Cerium 上に FFT を実装し、測定を行なった結果は表:\ref{table:fft}, 図:\ref{fig:fft}の通りである。 +測定には 1MB の画像データを用いた。 + +\begin{table}[!h] + \begin{center} + \small + \begin{tabular}[htpb]{|c||c|} + \hline + Processor & Time(ms) \\ + \hline + \hline + 1 CPU & 1958 \\ + \hline + 2 CPUs & 1174 \\ + \hline + 4 CPUs & 711 \\ + \hline + 8 CPUs & 451 \\ + \hline + 12 CPUs & 373 \\ + \hline + GPU & 418 \\ + \hline + \end{tabular} + \caption{1MB の画像データに対する FFT} + \label{table:fft} + \end{center} +\end{table} + +\begin{figure}[!h] + \begin{center} + \includegraphics[scale=0.8]{images/fft.pdf} + \end{center} + \caption{1MB の画像データに対する FFT} + \label{fig:fft} +\end{figure} + +1 CPU に対して 12 CPU では約5.2倍、GPU では約4.7倍の速度向上が見られる。 +ある程度の速度向上が見られたが、CPU に劣る結果となった。 +データ転送の最適化が十分に成されていない可能性があるので、GPU の実行機構を見直す必要がある。 + +\section{Cerium の問題点} +Cerium では Task 間の依存関係を記述することで並列処理を実現する。 +しかし、本来 Task はデータが揃えば実行可能になるものである。 +Task 間の依存関係だけでは待っている Task が不正な処理を行いデータがおかしくなっても Task の終了は通知され、そのまま処理が続行されてしまう。 +その場合、どこでデータがおかしくなったのか特定するのは難しくデバッグに多くの時間が取られてしまう。 +また、Cerium の Task は汎用ポインタでデータを受け取るので型の情報がない。 +型の情報がないので Task を実行するまで正しい型かどうか判断することが出来ない。 +不正な型でも強制的に型変換され実行されるのでデータの構造を破壊する可能性がある。 +型システムによってプログラムの正しさを保証することも出来ず、バグが入り込む原因になる。 + +Cerium の Allocator は Thread 間で共有されている。 +共有されているので、ある Thread がメモリを確保しようとすると他の Thread は終了を待つ必要がある +その間メモリを確保することができないので処理が止まり、なにもしない時間が生まれてしまう。 +これが並列度の低下に繋がり、処理速度が落ちる原因になる。 + +今回設計した Gears OS はこれらの問題を解決することを目的としている。 diff -r 94c9c506bba9 -r 958634b9fa32 paper/comparison.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/comparison.tex Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,65 @@ +\chapter{比較} +本章では今回設計・実装した Gears OS と既存の並列フレームワークとの比較を行う。 +また、Gears OS は以下のような性質を有している。 + +\begin{itemize} +\item リソース管理 \\ + Context 毎に異なるメモリ空間を持ち、それを管理する。 + Meta Code Gear, Meta Data Gear を用いてネットワーク管理、並行制御等を行う。 +\item 処理の効率化 \\ + 依存関係のない Code Gear は並列実行することが可能である。 + また、Code Gear 自体が処理の最小単位となっており Code Gear を利用してプログラムを記述するとプログラム全体の並列度を高めることに繋がる。 +\item プロセッサ利用の抽象化 \\ + Multi Core CPU, GPU を同等の実行機構で実行可能である。 +\end{itemize} + +これらの性質を有する Gears OS はオペレーティングシステムであると言えるので既存の OS との比較も行う。 + +\section{Cerium} +Cerium ではサブルーチンまたは関数を Task の単位としてプログラムを分割する。 +Task には依存関係のある Task を設定することができ、TaskManager が依存関係を解決することで並列処理を実現している。 +実行に必要なデータのアドレスを Task の生成時に設定することで Task はデータにアクセスすることが可能になる。 +データは汎用ポインタとして渡されるので Task 側で型変換して扱うことになる。 +ここで問題となるのが Task 間だけにしか依存関係がないことと Task 実行時にデータの型情報がないことである。 + +本来 Task は必要なデータが揃ったときに実行されるべきものである。 +不正なデータが渡された場合、実行せずに不正なデータがであることを実行者に伝えることが望ましい。 +Cerium では Task の終了のみに着目して依存関係を解決するので途中で不正なデータになっても処理を続けてしまい不正な処理を特定することが難しい。 + +複雑なデータ構造を持つ場合、間違った型変換でデータの構造を破壊する可能性がある。 +型システムは正しい型に対して正しい処理が行われることを前提にしてプログラムの正しさを保証する。 +型情報がない Cerium では型システムによる安全性を保証できず、型に基づくバグが入り込む可能性がある。 + +Gears OS では Code Gear, Data Gear という単位でプログラムを分割する。 +Code Gear は処理の単位、Data Gear はデータそのものである。 +Code Gear には Input/Output Data Gear が設定されており、Input と Output の関係が Code Gear 間の依存関係となる。 +Gears OS の TaskManager は Data Gear が格納されている Persistent Data Tree を監視して依存関係を解決する。 +Data Gear は Context に構造体として定義されており、型情報を持つ。 + +\section{OpenCL/CUDA} +OpenCL/CUDA では並列処理に用いる関数を kernel として定義する。 +OpenCL では CommandQueue, CUDA では Stream という命令キューに命令を発行することで GPU を利用することができる。 +命令キューは発行された順番通りに命令が実行されることが保証されている。 +複数の命令キューを準備して、各命令キューに命令を発行することで命令を並列に実行することができる。 +命令キュー単位で依存関係を設定することができる。 +つまり、命令キューに入っている最後の命令次第でデータを待っているのか kernel の実行を待っているのか変わるので依存関係の記述が複雑になる。 +データは kernel の引数の定義に型変換され渡される。 +データ転送の際には型情報が落として渡す必要があり、型を意識したプログラミングが必要になる。 + +一方、Gears OS ではデータによって依存関係が決定する。 +また、データを Data Segment という単位で分割して管理しており型情報を保ったままデータの受け渡しを行うことができる。 + +\section{OpenMP} +OpenMP ではループ制御構文の前にアノテーションを付ける(ソースコード:\ref{openmp})ことでコンパイラが解釈し、スレッド処理を行うように変換して並列処理を行う。 + +\lstinputlisting[label=openmp, caption=OpenMP]{src/openmp.c} + +他の並列化手法に比べて既存のコードに対する変更が少なくて済む。 +しかし、この方法ではプログラム全体の並列度が上がらずアムダールの法則により性能向上が頭打ちになる。 + +一方、Gears OS では初めから Code Gear, Data Gear という単位でプログラムを分割して記述するのでプログラム全体の並列度を高めることができる。 + +\section{従来の OS} +従来の OS が行ってきたネットワーク管理、メモリ管理、平行制御などのメタな部分を Gears OS では Meta Code/Data Gear として定義する。 +通常の Code Gear から必要な制御を推論し、Meta Code Gear を接続することで従来の OS が行ってきた制御を提供する。 +このメタ計算は関数型言語で用いられる Monad に基づいて実現する。 diff -r 94c9c506bba9 -r 958634b9fa32 paper/conclusion.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/conclusion.tex Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,50 @@ +\chapter{結論} +先行研究である Cerium の開発を通して得られた知見を元に Code Segment, Data Segment によって構成される Gears OS の設計・実装を行なった。 +実装には本研究室で開発している CbC(Continuation based C)を用いた。 + +Code Segment は処理、Data Segment はデータの単位である。 +Code Segment は戻り値を持たないので、関数呼び出しのようにスタックに値を積む必要がなくスタックは変更されない。 +このようなスタックに積まない継続を軽量継続と呼び、並列化、ループ制御、関数コールとスタックの操作を意識した最適化がソースコードレベルで行える。 +プログラムを Code/Data Segment で分割して記述することで並列度を高めることができる。 + +Gears OS を Code/Data Segment の考えに基づいて設計を行なった。 +Gears OS には Code/Data Segment と同等なものとして Code/Data Gear を定義した。 +Code Gear はプログラムの処理そのもので、Data Gear は int や文字列などの Primitive Data Type を複数持っている構造体として表現する。 +Code Gear は任意の数の Data Gear を参照し、任意の数の Data Gear に書き込みを行う。 +Gear の特徴として処理やデータ構造が Code/Data Gear に閉じている。 +これにより実行時間、メモリ使用量などを予測可能なものにする。 + +Gears OS の基本的な機能として Allocator, TaskQueue, Persistent Data Tree, Worker の実装を行なった。 +Gears OS では Context に情報が格納される。 +格納される情報には接続可能な Code/Data Gear のリスト、TaskQueue へのポインタ、Persistent Data Tree へのポインタ、Temporal Data Gear を確保するためのメモリ空間などがある。 +Context はスレッドごとに存在し、それぞれが異なる Context を参照している。 +Allocator は Context が持っているメモリ空間のアドレスを変更し、Temporal Data Gear の確保を行う。 +確保される Data Gear は処理後には必要なくなるものなのでリニアに確保するだけの単純な処理である。 +TaskQueue は並列処理される Task を管理する。 +Gears OS で Task は実行する Code Gear と実行に必要な Data Gear の組で表現する。 +TaskQueue はすべての Context で共有され、マルチスレッドでデータの一貫性を保つために Compare and Swap(CAS) を用いた。 +Persistent Data Tree は Data Gear を管理する。 +非破壊木構造で構成され、Red-Black Tree アルゴリズムによって平衡性が保たれる。 +Persistent Data Tree はすべての Context で共有される。 +非破壊木構造なので読み書きを平行して行うことができる。 +Gears OS では Persistent Data Tree への書き込みのみで相互作用を発生させ目的の処理を達成する。 +Worker は Task を並列処理する。 +個別の Context を参照しているので、メモリ空間が独立しておりメモリを確保する処理で他の Worker を止めることはない。 +CAS を用いて TaskQueue にアクセスし、Task を取得する。 +取得した Task の情報を元に Persistent Data Tree から Data Gear を取得し、Code Gear を実行する。 +また、Gears OS 自体が Code/Data Segment を用いたプログラミングの指針となるように実装を行った。 + +Gears OS を用いて簡単な例題を実装し、評価を行った。 +与えられた要素を2倍にする Twice という依存関係がない並列処理の例題を Gears OS 上に実装した。 +1 CPU と 12 CPU で約11.8倍の速度向上を確認し、Gears OS を用いることで十分な並列処理性能を引き出せることを示した。 + +\section{今後の課題} +例題として Twice を用いて並列処理の性能を示したが、Twice は依存関係がない並列処理である。 +本来、並列処理には依存関係が存在する。 +複雑な並列処理を行えるようにするために依存関係を解決する TaskManager の実装が必要である。 + +Gears OS 上でマルチコア CPU を用いた実行を可能にしたが、GPU などの他のプロセッサを演算に用いることができない。 +Code/Data Segment を用いて各プロセッサのアーキテクチャにマッピングした実行機構を実装し、演算に利用できるようにする必要がある。 + +型情報を残すために Data Segment を定義しているが Data Segment の型情報を検査していない。 +プログラムの正しさを保証するために Data Segment の型情報を検査する型システムを Gears OS 上に実装する必要がある。 diff -r 94c9c506bba9 -r 958634b9fa32 paper/evaluation.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/evaluation.tex Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,67 @@ +\chapter{Gears OS の評価} +現在の Gears OS には非破壊木構造を Red-Black Tree アルゴリズムに基づいて構築する Persistent Data Tree, CAS を用いてデータの一貫性を保証する TaskQueue, TaskQueue から Task を取得し並列に実行する Worker が実装されている。 +つまり、依存関係のない処理ならば並列処理することが可能である。 + +本章では依存関係のない簡単な例題を用いて Gears OS の評価を行う。 + +\section{Twice} +Twice は与えられた整数配列を2倍にする例題である。 + +以下の流れで処理は行われる。 + +\begin{itemize} +\item 配列サイズを元に index, alignment, 配列へのポインタを持つ Data Gear に分割。 +\item Data Gear を Persistent Data Tree に挿入。 +\item 実行する Code Gear(Twice) と実行に必要な Data Gear への key を持つ Task を生成。 +\item 生成した Task を TaskQueue に挿入。 +\item Worker の起動。 +\item Worker が TaskQueue から Task を取得。 +\item 取得した Task を元に必要な Data Gear を Persistent Data Tree から取得。 +\item 並列の処理される Code Gear(Twice) を実行。 +\end{itemize} + +\newpage + +Gears OS 上に Twice を実装し、要素数$2^{17}$*1000 のデータを640個の Task に分割してコア数を変更して測定を行なった。 +結果は表:\ref{table:twice}, 図:\ref{fig:twice}の通りである。 + +\begin{table}[!h] + \begin{center} + \small + \begin{tabular}[htpb]{|c||c|c|c|} + \hline + Processor & Time(ms) \\ + \hline + \hline + 1 CPU & 1315 \\ + \hline + 2 CPUs & 689 \\ + \hline + 4 CPUs & 366 \\ + \hline + 8 CPUs & 189 \\ + \hline + 12 CPUs & 111 \\ + \hline + \end{tabular} + \caption{要素数$2^{17}$*1000 のデータに対する Twice} + \label{table:twice} + \end{center} +\end{table} + +\begin{figure}[!h] + \begin{center} + \includegraphics[scale=0.9]{images/twice_640.pdf} + \end{center} + \caption{要素数$2^{17}$*1000 のデータに対する Twice} + \label{fig:twice} +\end{figure} + +1 CPU と 12 CPU では約11.8倍の速度向上が見られた。 +十分な台数効果が出ていることがわかる。 +しかし、タスクの粒度が小さすぎると CAS の失敗が多くなり性能が出ないことがある。 +Code Gear には実行時間を予測可能なものにするという特徴があるので、その性質を利用してタスクが最適な粒度なのか検査する機能が必要になると考えられる。 + +今回、例題に用いた Twice は依存関係のない並列処理である。 +本来、並列処理には複雑な依存関係が存在するのが一般的である。 +並列フレームワークには複雑な依存関係を解決しながら十分な並列度を保てることが必須なので依存関係を解決するための TaskManager の実装が必要である。 diff -r 94c9c506bba9 -r 958634b9fa32 paper/gearsos.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/gearsos.tex Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,239 @@ +\chapter{Gears OS} +Cerium と Alice の開発を通して得られた知見から並列分散処理には Code の分割だけではなく Data の分割も必要であることがわかった。 +当研究室で開発している Code Segment を基本的な処理単位とするプログラミング言語 Continuation based C(CbC) を用いて Data Segment を定義し、Gears OS の設計と基本的な機能の実装を行なった。 + +本章では Gears OS の設計と実装した基本的な機能について説明する。 +\section{Code Gear と Data Gear} +Gears OS ではプログラムの単位として Gear を用いる。 +Gear は並列実行の単位、データの分割、Gear 間の接続等になる。 + +Code Gear はプログラムの処理そのものになる。 +これは OpenCL/CUDA の kernel, Cerium の Task に相当する。 +Code Gear は任意の数の Data Gear を参照し、処理が完了すると任意の数の Data Gear に書き込む。 +Code Gear は接続された Data Gear 以外にアクセスできない。 +Code Gear から次の Code Gear への処理の移動は goto の後に Code Gear の名前と引数を指定することで実現できる。 +Code Gear は Code Segment そのものである。 + +Data Gear はデータそのものを表す。 +int や文字列などの Primitive Data Type を持っている。 + +Gear の特徴として処理やデータの構造が Code Gear, Data Gear に閉じていることにある。 +これにより実行時間、メモリ使用量などを予測可能なものにすることが可能になる。 + +\newpage + +\section{Gears OS の構成} +Gears OS は以下の要素で構成される。 +\begin{itemize} +\item Context \\ + 接続可能な Code/Data Gear のリスト、TaskQueue へのポインタ、Persistent Data Tree へのポインタ、Temporal Data Gear のためのメモリ空間等を持っており、Context を通してアクセスすることができる。 + メインとなる Context と Worker 用の Context があり、TaskQueue と Persistent Data Tree は共有される。 + Temporal Data Gear のためのメモリ空間は Context 毎に異なり、互いに干渉することはできない。 + Persistent Data Tree への書き込みのみで相互作用を発生させ目的の処理を達成する。 +\item TaskQueue \\ + ActiveTaskQueue と WaitTaskQueue の2つの TaskQueue を持つ。 + 先頭と末尾の Element へのポインタを持つ Queue を表す Data Gear である。 + Element は Task を表す Data Gear へのポインタと次の Element へのポインタを持っている。 + Compare and Swap(CAS) を使ってアクセスすることでスレッドセーフな Queue として利用することが可能になる。 +\item TaskManager \\ + Task には Input Data Gear, Output Data Gear が存在する。 + Input/Output Data Gear から依存関係を決定し、TaskManager が解決する。 + 依存関係が解決された Task は WaitTaskQueue から ActiveTaskQueue に移される。 + TaskManager はメインとなる Context を参照する。 +\item Persistent Data Tree \\ + 非破壊木構造で構成された Lock-free なデータストアである。 + Red-Black Tree として構成することで最悪な場合の挿入・削除・検索の計算量を保証する。 +\item Worker \\ + TaskQueue から Task の取得・実行を行う。 + Task の処理に必要なデータは Persistent Data Tree から取得する。 + 処理後、必要なデータを Persistent Data Tree に書き出して再び Task の取得・実行を行う。 +\end{itemize} + +図:\ref{fig:gearsos} は Gears OS の構成図である。 + +\newpage + +\begin{figure}[!ht] + \begin{center} + \includegraphics[scale=0.35]{./images/gearsos.pdf} + \end{center} + \caption{Gears OS} + \label{fig:gearsos} +\end{figure} + +\section{Allocator} +Gears OS では Context の生成時にある程度の大きさのメモリ領域を確保する。 +Context には確保したメモリ領域を指す情報が格納される。 +このメモリ領域を利用して Task の実行に必要な Data Gear を生成する。 + +Context の定義と生成はソースコード:\ref{context},ソースコード:\ref{initcontext} の通りである。 + +\lstinputlisting[label=context, caption=Context]{src/context.h} +\lstinputlisting[label=initcontext, caption=initContext]{src/initContext.c} + +\newpage + +Context はヒープサイズを示す heapLimit, ヒープの初期位置を示す heapStart, ヒープの現在位置を示す heap を持っている。 +必要な Data Gear のサイズに応じて heap の位置を動かすことで Allocation を実現する。 + +allocate を行うには allocate に必要な Data Gear に情報を書き込む必要がある。 +この Data Gear は Context 生成時に生成する必要があり、ソースコード:\ref{context} 14行目の Allocate がそれに当たる。 +UniqueData で定義した Data Gear は Context と同時に生成される。 + +Temporal Data Gear にある Data Gear は基本的には破棄可能なものなので heapLimit を超えたら heap を heapStart の位置に戻し、ヒープ領域を再利用する(図:\ref{fig:allocation})。 +必要な Data Gear は Persistent Data Tree に書き出すことで他の Worker からアクセスすることが可能になる。 + +\begin{figure}[!ht] + \begin{center} + \includegraphics[scale=0.4]{./images/allocation.pdf} + \end{center} + \caption{Allocation} + \label{fig:allocation} +\end{figure} + +実際に allocate を行う Code Gear はソースコード:\ref{allocate} の通りである。 + +Context 生成時に実行可能な Code Gear と名前が対応付けられる。 +その対応付けられた Code Gear が Context の code に格納される。 +この code を介して遷移先の Code Gear を決定する。 + +Code Gear には Context が接続されるが Context を介して Data Gear にアクセスすることはない。 +stub を介して間接的に必要な Data Gear にアクセスする。 + +\lstinputlisting[label=allocate, caption=allocate]{src/allocate.c} + +\section{Synchronized Queue} +Gears OS における Synchronized Queue は TaskQueue として利用される。 +メインとなる Context と Worker 用の Context で共有され、Woker が TaskQueue から Task を取得し実行することで並列処理を実現する。 + +Gears OS での Queue を Queue を表す Data Gear と Queue の構成要素である Element によって表現する。 +Queue を表す Data Gear には先頭の Element を指す first, 末尾の Element を指す last, Element の個数を示す count が格納される。 +Element を表す Data Gear には Task を示す task, 次の Element を示す next が格納される。 + +ソースコード:\ref{queue} は Context の定義(ソースコード:\ref{context})に追加する Queue と Element の定義である。 + +\lstinputlisting[label=queue, caption=Context: queue]{src/queue.h} + +新たに Queue に対する操作を行う Code Gear の名前を追加し、UniqueData には Queue の情報が入る Queue(ソースコード:\ref{queue} 9行目) と Enqueue に必要な情報を書き込む Element(ソースコード:\ref{queue} 10行目) を定義している。 + +通常の Enqueue, Dequeue を行う Code Gear はソースコード:\ref{enqueue} と ソースコード:\ref{dequeue} の通りである。 + +\lstinputlisting[label=enqueue, caption=Enqueue]{src/enqueue.c} +\lstinputlisting[label=dequeue, caption=Dequeue]{src/dequeue.c} + +ソースコード:\ref{enqueue} とソースコード:\ref{dequeue} はシングルスレッドでは正常に動作するが、マルチスレッドでは期待した動作を達成できない可能性がある。 +並列実行すると同じメモリ位置にアクセスされる可能性があり、データの一貫性が保証できないからである。 +データの一貫性を並列実行時でも保証するために Compare and Swap(CAS) を利用して Queue の操作を行うように変更する必要がある。 +CAS はデータの比較・置換をアトミックに行う命令である。 +メモリからのデータの読み出し、変更、メモリへのデータの書き出しという一連の処理を、CAS を利用することで処理の間に他のスレッドがメモリに変更を加えていないということを保証することができる。 +CAS に失敗した場合は置換は行わず、再びデータの読み出しから始める。 + +ソースコード:\ref{enqueue} 44行目の putQueue3, 51行目の putQueue4, ソースコード:\ref{dequeue} 2行目の getQueue が実際に Queue を操作している Code Gear である。 +これらの Code Gear から CAS を利用したソースコード:\ref{sync_enqueue}, ソースコード:\ref{sync_dequeue} の Code Gear に接続を変更することでスレッドセーフな Queue として扱うことが可能になる。 +Code Gear は Gears OS における最小の処理単位となっており、接続を変更することでプログラムの振る舞いを柔軟に変更することができる。 + +\lstinputlisting[label=sync_enqueue, caption=Enqueue using CAS]{src/sync_enqueue.c} +\lstinputlisting[label=sync_dequeue, caption=Dequeue using CAS]{src/sync_dequeue.c} + +\section{Persistent Data Tree} +Gears OS では Persistent Data Gear の管理に木構造を用いる。 +この木構造は非破壊で構成される。 +非破壊木構造とは一度構築した木構造を破壊することなく新しい木構造を構築することで、木構造を編集する方法である。 +非破壊木構造は木構造を書き換えることなく編集を行う(図:\ref{fig:non-destructive_tree})ため、読み書きを平行して行うことが可能である。 +赤色で示したノードが新しく追加されたノードである。非破壊木構造の基本的な戦略は、変更したいノードへのルートノードからのパスを全てコピーする。 +そして、パス上に存在しないノードはコピー元の木構造と共有することである。 + +\newpage + +\begin{figure}[!h] + \centering + \includegraphics[scale=0.7]{images/nondestructive_tree_modification.pdf} + \caption{木構造の非破壊的編集} + \label{fig:non-destructive_tree} +\end{figure} + +木構造はディレクトリツリー、構文木など階層構造を持つデータを表現する。 +またはデータベースのインデックスなど情報を探索しやすくするための探索木としても用いられる。 +Gears OS では Data Tree として木構造を利用する。 +その場合、普通に木構造を構築するだけでは偏った木構造が構築される可能性がある。 +最悪なケースでは事実上の線形リストになり、計算量が O(n) となる。 +挿入・削除・検索における処理時間を保証するため Red-Black Tree を用いて木構造の平衡性を保証する。 + +Red-Black Tree は通常の二分探索木としての条件の他に以下の条件を持つ。 + +\begin{itemize} +\item 各ノードは赤または黒の色を持つ。 +\item ルートの色は黒である。 +\item 赤ノードは2つの黒ノードを子として持つ(赤ノードが続くことはない)。 +\item ルートから最下位ノードへのパスに含まれる黒ノードの数はどの最下位ノードでも一定である。 +\end{itemize} + +これらの条件によってルートから最も遠い最下位ノードへのパスの長さはルートから最も近い最下位ノードへのパスの長さの2倍に収まることが保証される。 + +Red-Black Tree は挿入・削除を行ったあとに変更したノードからルートへのパスを辿りながら Red-Black Tree の条件を満たすように色の変更や木の回転を行う。 +関数呼び出しが可能なプログラミング言語では戻り値でパスを辿ることができるが、CbC は末尾呼び出し最適化が行われるように記述する必要があるのでパスを辿るにはノードに親への参照を持たせるか挿入・削除時に辿ったパスを記憶するしかない。 +ノードが親への参照を持つと非破壊木構造を構築することが出来ないので、辿ったパスを記憶する方法を用いる。 +辿ったパスを記憶するため Context にスタックを持たせる。 + +ソースコード:\ref{tree}は Context に追加する Tree, Node および Tree の操作を行う Code Gear 名の定義である。 + +\lstinputlisting[label=tree, caption=Context: Red-Black Tree]{src/tree.h} + +Tree は参照する木を格納する Code Gear である。 +この Code Gear は Context の生成時に生成される。 +Traverse は木の探索に用いられる Code Gear である。 +Code Gear は末尾最適化されるので呼び出し元の情報が残らない。 +参照しているノードの情報を Code Gear 間で持ち歩くためには Traverse のような Data Gear が必要になる。 + +赤ノードが続かないという Red-Black Tree の条件を満たすか判定する Code Gear はソースコード:\ref{insert}の通りである。 +まず、親の情報が必要なのでパスを記憶しているスタックから親ノードを取得する。 +親ノードが黒である場合、木を回転する必要はなく木は平衡を保っているので木に対する操作を終了する。 + +\lstinputlisting[label=insert, caption=Insert Case]{src/insert.c} + +木の左回転を行う Code Gear はソースコード:\ref{rotateLeft}の通りである。 +自分、親、兄弟の3点のノードの回転である。 +回転を行ったあとにも Red-Black Tree の条件を満たしているか確認する必要があるので回転後に変更された親ノードを再びスタックに記憶する。 +また、回転の際に現在見ているノードが変更する必要がある。 + +\newpage + +\lstinputlisting[label=rotateLeft, caption=Rotate Left]{src/rotate.c} + +\section{Worker} +Worker は TaskQueue から Task を取得し、実行する。 +Task には実行する Code Gear と実行に必要な Code Gear の key が格納されている。 +実行に必要な Code Gear は Persistent Data Tree から key を使って取得する。 + +各 Worker は個別の Context を参照している。 +メモリ空間も独立しているのでメモリを確保する処理で他の Thread を止めることはない。 +ただし、Persistent Data Tree への書き出しは競合する可能性があるので CAS を利用してデータの一貫性を保証する必要がある。 + +Worker が Task の取得を行う Code Gear はソースコード:\ref{sync_dequeue}の通りである。 +TaskQueue から取得した Task から実行する Code Gear と必要な Data Gear の key を Worker Context に書き込むことで実行される。 +Task の実行後に再び Task の取得を行う Code Gear に戻る必要がある。 +Context は実行する Code Gear のスタックを持っているのでそのスタックに積む(ソースコード:\ref{sync_dequeue} 11行目)ことで戻ることができる。 + +Task に格納され Worker で実行される Code Gear はソースコード:\ref{task}の通りである。 +ソースコード:\ref{task}は指定された要素の値を2倍する Twice という例題である。 +Twice は並列実行される。 + +\lstinputlisting[label=task, caption=Task Sample]{src/twice.c} + +並列処理される Code Gear と言っても他の Code Gear と完全に同じである。 +これは Gears OS 自体が Code Gear によって構成されていることに起因する。 +つまり、Gears OS を利用して書かれたプログラムで定義されている Code Gear に依存関係がないときすべて並列に動作させることができるということを意味する。 + +\section{TaskManager} +Gears OS の TaskManager は WaitTaskQueue に入っている Task の依存関係を解決する。 +Task には Input/Output Data Gear の情報が格納されている。 +Input Data Gear は Task に必要な Data Gear で揃ったら Task は実行可能な状態になる。 +Output Data Gear は Task が Persistent Data Tree に書き出す Data Gear である。 +この Input と Output の関係が依存関係となる。 +TaskManager は Persistent Data Tree を監視しており、WaitTaskQueue に入っている Task の Input Data Gear が揃っているのを確認したら実行可能な Task として AcitiveTaskQueue へ移動させる。 + +TaskManager は Worker の管理も行う。 +メインとなる Context には Worker の情報が格納されており、TaskManager はこの Context を参照して Worker の起動・停止を行う。 +ソースコード\ref{init_worker}は Worker を起動する Code Gear である。 + +\lstinputlisting[label=init_worker, caption=InitWorker]{src/initWorker.c} diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/allocation.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/allocation.bb Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,5 @@ +%%Title: ./images/allocation.pdf +%%Creator: extractbb 20140317 +%%BoundingBox: 0 0 1064 396 +%%CreationDate: Tue Feb 9 03:13:52 2016 + diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/allocation.pdf Binary file paper/images/allocation.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/bitonic.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/bitonic.bb Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,5 @@ +%%Title: ./images/bitonic.pdf +%%Creator: extractbb 20140317 +%%BoundingBox: 0 0 591 422 +%%CreationDate: Fri Feb 12 02:40:15 2016 + diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/bitonic.pdf Binary file paper/images/bitonic.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/bitonic_sort_01.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/bitonic_sort_01.bb Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,5 @@ +%%Title: ./images/bitonic_sort_01.pdf +%%Creator: extractbb 20140317 +%%BoundingBox: 0 0 360 216 +%%CreationDate: Sat Feb 13 22:47:36 2016 + diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/bitonic_sort_01.pdf Binary file paper/images/bitonic_sort_01.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/bitonic_sort_02.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/bitonic_sort_02.bb Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,5 @@ +%%Title: ./images/bitonic_sort_02.pdf +%%Creator: extractbb 20140317 +%%BoundingBox: 0 0 360 216 +%%CreationDate: Sun Feb 14 00:45:20 2016 + diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/bitonic_sort_02.pdf Binary file paper/images/bitonic_sort_02.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/bitonic_sort_03.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/bitonic_sort_03.bb Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,5 @@ +%%Title: ./images/bitonic_sort_03.pdf +%%Creator: extractbb 20140317 +%%BoundingBox: 0 0 360 216 +%%CreationDate: Sat Feb 13 23:41:22 2016 + diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/bitonic_sort_03.pdf Binary file paper/images/bitonic_sort_03.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/cell_arch.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/cell_arch.bb Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,5 @@ +%%Title: ./images/cell_arch.pdf +%%Creator: extractbb 20140317 +%%BoundingBox: 0 0 412 414 +%%CreationDate: Thu Feb 4 02:51:30 2016 + diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/cell_arch.pdf Binary file paper/images/cell_arch.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/codesegment2.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/codesegment2.bb Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,5 @@ +%%Title: ./images/codesegment2.pdf +%%Creator: extractbb 20140317 +%%BoundingBox: 0 0 584 275 +%%CreationDate: Wed Feb 10 03:34:03 2016 + diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/codesegment2.pdf Binary file paper/images/codesegment2.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/createTask.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/createTask.bb Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,5 @@ +%%Title: ./images/createTask.pdf +%%Creator: extractbb 20090506 +%%BoundingBox: 0 0 512 391 +%%CreationDate: Tue Feb 25 09:13:13 2014 + diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/createTask.pdf Binary file paper/images/createTask.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/createTask.xbb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/createTask.xbb Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,8 @@ +%%Title: ./images/createTask.pdf +%%Creator: extractbb 20090506 +%%BoundingBox: 0 0 512 391 +%%HiResBoundingBox: 0.000000 0.000000 512.000000 391.000000 +%%PDFVersion: 1.3 +%%Pages: 1 +%%CreationDate: Tue Feb 25 09:13:14 2014 + diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/emblem-bitmap.eps --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/emblem-bitmap.eps Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,376 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (emblem.eps) +%%CreationDate: (Sat Dec 16 23:16:28 2000) +%%BoundingBox: 226 313 398.455 493 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 0 +%%EndComments + +%%BeginDefaults +%%PageOrientation: Portrait +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/buffer 512 string def +/byte 1 string def +/color_packet 3 string def +/pixels 768 string def + +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 gt + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 gt + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-RunlengthEncodedCompression or 1-NoCompression. + % hex color packets. + % + gsave + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Helvetica findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 226 313 399 494 +userdict begin +%%BeginData: +DisplayImage +226 313 +173.455 181.091 +12.000000 +159 166 +1 +1 +1 +1 +fffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffff +fffffffefffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffff +fffffffffffffffefffffffffffffffffffffffffffffffffffffffeffffffffffffffff +fffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffeffffffff +fffffffffe0000fffffffffffffffffeffffffffffffffffc0000007fffffffffffffffe +fffffffffffffff8000000003ffffffffffffffeffffffffffffffe00002000007ffffff +fffffffeffffffffffffff008133000000fff8fffffffffefffffffffffffc04efbba440 +003ff0fffffffffeffffffffffffe017fffff661000ff0fffffffffeffffffffffff813f +f803ffe7fffff0fffffffffeffffffffffff03f8000007fffffff0fffffffffeffffffff +fffc3f813ffe003ffffff0fffffffffeffffffffffc1c1ffffffff8700000000000ffffe +ffffffffff078ffffffffff300000000000ffffeffffffffff078ffffffffff300000000 +000ffffefffffffffe3e3ffbdee67fff00000000000ffffefffffffffc787ff99eee6fff +07f83fe1000ffffefffffffff8e3ff319dce4cff0ff83fe3ff8ffffefffffffff38ffb93 +9dcc4cef0ff83fe3ff8ffffeffffffffc63ffb919dcc4ccf0ff83fe3ff8ffffeffffffff +9cffbb119dcc48cf0ff83fe3ff8ffffeffffffff73ffb1111988488f0ff83fe3ff8ffffe +fffffffee7fbb1111988c19f0ff83fe3ff8ffffefffffffb9ff19100198800070ff83fe3 +ff8ffffefffffff73e719000110000070ff83fe3ff8ffffeffffffecff38880011000007 +0ff83fe3ff8ffffeffffffecff388800110000070ff83fe3ff8ffffefffffff9fb38800e +110000070ff83fe3ff8ffffefffffff3f318001f81000d870ff83fe3ff8ffffeffffffef +fb98007fc0003fe70ff83fe3ff8ffffeffffffffd98c01ffe0003fff0ffc7fe3ff8ffffe +ffffffdf898403f1e000fffffffffffffffffffeffffffbecc800fe0e001f27fffffffff +fffffffeffffff7cc4801fc1f007f27ffffffffffffffffefffffcf200007e0fffffa267 +803f3fc7c03ffffefffffdf00000f81f3fffa267001e1f83800ffffefffffbe00019f07b +77fda267001e0603000ffffeffffffe000ffe1e937d9a267001e0003800ffffeffffff80 +7fff83e926d98027003f000f800ffffeffffff01ffff8fe9269880070fffc01fff8ffffe +fffffc0fffef1ec8228800070fffc01fff8ffffefffffc1ffe1e3ee8028800070fff0007 +ff0ffffefffff41fc03c746000880007001e0003800ffffefffff01f8038726000080007 +001e0603000ffffefffff01f8070f200000003c7001e0403000ffffeffffa01f0fe3b007 +80003fff001f0007800f7ffeffff801e03c7b00fc0007fff0fff800fff0f7ffeffff803e +018e900fe000ffff0fffc03fff0f3ffeffff803c071e001ff803ffff0fff800fff0f3ffe +ffff00fc0e32007ffe1fffff003e0007c00f3ffeffff03fc027a007fffffffff001e0403 +800f1ffeffff0ff8047801ffffffffff001e1f03000f1ffeffff1ff81cd803ffffffffff +001e1fc7000f0ffefffc7ff80dc807ffffffffff803fffff801e0ffefff8fff01bc01fff +fffffffffffffffffffe0ffefff9fff033007ffffffffffffffffffffffe0ffefffffff0 +6707ffffffffffff00000000000f0ffeffffffe06f0fffffffffffff00000000000f07fe +ffffffe1cd1fffffffffffff00000000000f07feffffffe0dc3fffffffffffff00000000 +000f07feffffffe09c3fffffffffffff0fffffffff0f07feffffffe1b83fffffffffffff +0f1e0007870f03feffffffe3383fffffffffffff0f1c0003870f03feffffffe3783fffff +ffffffff0f1c0003870f03feffffffe6683fffffffffffff0f1c0003870f03feffffffe6 +e03ffffffffffffe0f1c3fe3870f03feffffffe6e03fffffffffffff0f1c0003870f81fe +ffffffed80fffffffffffffe0f1e0003870f01feffffffed80fffffffffffffe0f1e0003 +870f01fefff9ffedc1fffffffffffffe0f1fe0ff870f01feffe1ffeb83fffffffffffffe +0f1fe0ff870f01feffc1ffff07fffffffffffffe0f000000070f81feff81ffff0fffffff +fffffffe0f000000070f01feff01fffe3fffffffffffffff1f000000079e01fefe01fffe +7fffffffffffffffff00000007bf81fefe01fffcffffffffffffffffffffe0ffffff00fe +fe01ffffffffffffffffffffffffe0fffffe00fefe01ffffffffffffffffffffffffe0ff +fff830fefe01fffffffffffffffffffffff870fc1e3f80fefe01ffffffffffffffffffff +fff879ee0e1f00fefe01fffffffffffffffffffffff87fe7863c00fefe01ffffffffffff +fffffffffff03fc3c63800fefe01fffffffffffffffffffffff01fc3e638f0fefe01ffff +fffffffffffffffffff80661fe3fc0fefe01fffffffffffffffffffffffc0038fe3f00fe +fe01fffffffffffffffffffffffe000c7e3c01fefe01fffffffffffffffffffffff3000c +3e3001fefe01ffffffffffffffffffffffe182061c31e1fefe01ffffffffffffffffffff +ffc041031c3f81fefe00ffffffffffffffffffffffc000438c3801fefe00ffffffffffff +ffffffffff801061cc2001feff00ffffffffffffffffffffff800830f86001feff00ffff +ffffffffffffffffff800830f86001feff00ffffffffffffffffffffff800418f87f03fe +ff00ffffffffffffffffffffff00061c787c03feff80ffffffffffffffffffffff00030c +386003feff80ffffffffffffffffffffff000186306003feff80ffffffffffffffffffff +ff002186307f87feff807ffffffffffffffffffffe0000c3307c07feffc07fffffffffff +fffffffffe0000e3e04007feffc07ffffffffffffffffffffc001873e0fc0ffeffe03fff +fffffffffffffffff8000c39c1e00ffeffe03ffffffffffffffffffff0000c39c1800ffe +ffe01ffffffffffffffffffff0000e1dc1f80ffefff01fffffffffffffffffffe000471d +83fe0ffefff00fffffffffffffffffffc000471f83e00ffefff00fffffffffffffffffff +c000630f07001ffefff806ffffffffffffffffff8000238f07f81ffefff8067fffffffff +ffffffff0004238e07f83ffefffc033fffffffffffffffff000421c60e003ffefffc031f +fffffffffffffffe008611c40f007ffefffe019ffffffffffffffffc004211ec1fc07ffe +fffe00c7fffffffffffffff8004311fc1e007ffeffff00c3fffffffffffffff8006318fc +3800fffeffff0061fffffffffffffff0006318f87f81fffeffff00207fffffffffffffe0 +00219cf87fc1fffeffff80201fffffffffffffe002319c70e003fffeffff80100fffffff +ffffffe001319ce1e003fffeffffc01f87fffffffffffe600131cfc1fe07fffeffffe01f +03fffffffffff8201119cf83ff87fffefffff00e03ffffffffffe0201118cf83000ffffe +fffff807f1ffffffffff80321118ef03e01ffffefffff803e07ffffffffc0033111cfe06 +781ffffefffffc01c03ffe0fffe00033191cfc0c003ffffefffffe00fc0ff800fe000013 +189cf81f807ffffeffffff007c01e00000000013189ef03fe07ffffeffffff8039800400 +00000011189ee070007ffffeffffff801e00040000000011088fe0fc00fffffeffffffc0 +0e78080000000019088fc1fe01fffffeffffffe007f118000010103988cf03c101fffffe +fffffff003c73088001011398cde07f007fffffefffffff001de71884211313b8cfc0e7c +0ffffffeffffffec007e61084231333b8cf01e000ffffffefffffff3000fc711c623333b +9f8073e03ffffffefffffff98003ce31c673333b9f00f0007ffffffefffffffe6001de71 +8e63333bfe01fc00fffffffeffffffff30007c738ee7233bf803e201fffffffeffffffff +88001ef79ee6663fe00f7003fffffffeffffffffc40007ff1ce6677f001f1807fffffffe +fffffffff30000ff3dce7ffc00f9c00ffffffffefffffffff8c0001ffdffffe000f8403f +fffffffefffffffff8c0001ffdffffe000f8403ffffffffefffffffffc300003ffffff00 +03fc007ffffffffefffffffffe0c00001fff80000f8700fffffffffeffffffffff81c000 +00000001fe300ffffffffffeffffffffffe0f80000000007e3001ffffffffffeffffffff +fff87f800000003f70003ffffffffffefffffffffffe27f0000003fe1800fffffffffffe +ffffffffffff833ff003fff10003fffffffffffeffffffffffffe10fffffff38000fffff +fffffffefffffffffffff801bffb2300007ffffffffffffeffffffffffffff0011313080 +01fffffffffffffeffffffffffffffc00118004007fffffffffffffefffffffffffffff0 +000800007ffffffffffffffeffffffffffffffffc0000003fffffffffffffffeffffffff +fffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffe +fffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffff +fffffffefffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffff +fffffffffffffffe +%%EndData +end +%%PageTrailer +%%Trailer +%%BoundingBox: 226 313 398.455 493 +%%EOF diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/fft.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/fft.bb Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,5 @@ +%%Title: ./images/fft.pdf +%%Creator: extractbb 20140317 +%%BoundingBox: 0 0 360 216 +%%CreationDate: Tue Feb 16 13:11:33 2016 + diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/fft.pdf Binary file paper/images/fft.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/gearsos.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/gearsos.bb Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,5 @@ +%%Title: ./images/gearsos.pdf +%%Creator: extractbb 20140317 +%%BoundingBox: 0 0 1312 427 +%%CreationDate: Tue Feb 9 03:18:30 2016 + diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/gearsos.pdf Binary file paper/images/gearsos.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/gpu_arch.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/gpu_arch.bb Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,5 @@ +%%Title: ./images/gpu_arch.pdf +%%Creator: extractbb 20140317 +%%BoundingBox: 0 0 412 414 +%%CreationDate: Thu Feb 4 02:51:35 2016 + diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/gpu_arch.pdf Binary file paper/images/gpu_arch.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/images.graffle Binary file paper/images/images.graffle has changed diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/nondestructive_tree_modification.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/nondestructive_tree_modification.bb Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,5 @@ +%%Title: ./images/nondestructive_tree_modification.pdf +%%Creator: extractbb 20140317 +%%BoundingBox: 0 0 559 248 +%%CreationDate: Mon Feb 15 04:41:46 2016 + diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/nondestructive_tree_modification.pdf Binary file paper/images/nondestructive_tree_modification.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/scheduler.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/scheduler.bb Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,5 @@ +%%Title: ./images/scheduler.pdf +%%Creator: extractbb 20140317 +%%BoundingBox: 0 0 532 385 +%%CreationDate: Thu Feb 4 03:40:25 2016 + diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/scheduler.pdf Binary file paper/images/scheduler.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/scheduler.xbb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/scheduler.xbb Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,8 @@ +%%Title: ./scheduler.pdf +%%Creator: extractbb 20130405 +%%BoundingBox: 0 0 532 385 +%%HiResBoundingBox: 0.000000 0.000000 532.000000 385.000000 +%%PDFVersion: 1.3 +%%Pages: 1 +%%CreationDate: Tue Jan 13 09:58:53 2015 + diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/stream.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/stream.bb Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,5 @@ +%%Title: ./images/stream.pdf +%%Creator: extractbb 20140317 +%%BoundingBox: 0 0 952 356 +%%CreationDate: Fri Feb 12 01:28:07 2016 + diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/stream.pdf Binary file paper/images/stream.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/twice.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/twice.bb Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,5 @@ +%%Title: ./images/twice.pdf +%%Creator: extractbb 20140317 +%%BoundingBox: 0 0 360 216 +%%CreationDate: Tue Feb 16 15:51:01 2016 + diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/twice.pdf Binary file paper/images/twice.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/twice_640.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/twice_640.bb Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,5 @@ +%%Title: ./images/twice_640.pdf +%%Creator: extractbb 20140317 +%%BoundingBox: 0 0 360 216 +%%CreationDate: Tue Feb 16 18:13:32 2016 + diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/twice_640.pdf Binary file paper/images/twice_640.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/u-ryukyu-Mark.eps --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/u-ryukyu-Mark.eps Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,1 @@ +%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Illustrator(TM) 6.0 %%For: (\216\251\227\247\225\252\216U\203V\203X\203e\203\200\214\244\213\206\216\272) () %%Title: (u-ryukyu_Mark2.eps) %%CreationDate: (2/19/01) (2:50 PM) %%BoundingBox: 1 4 195 200 %%HiResBoundingBox: 1.3735 4.3999 194.5 199.3999 %%DocumentProcessColors: Black %%DocumentSuppliedResources: procset Adobe_level2_AI5 1.2 0 %%+ procset Adobe_ColorImage_AI6 1.1 0 %%+ procset Adobe_Illustrator_AI5 1.0 0 %AI5_FileFormat 3 %AI3_ColorUsage: Black&White %AI3_IncludePlacedImages %%CMYKCustomColor: 1 0 0.55 0 (Aqua) %%+ 1 0.5 0 0 (Blue) %%+ 0.5 0.4 0.3 0 (Blue Gray) %%+ 0.8 0.05 0 0 (Blue Sky) %%+ 0.5 0.85 1 0 (Brown) %%+ 1 0.9 0.1 0 (Dark Blue) %%+ 1 0.55 1 0 (Forest Green) %%+ 0.05 0.2 0.95 0 (Gold) %%+ 0.75 0.05 1 0 (Grass Green) %%+ 0 0.45 1 0 (Orange) %%+ 0.15 1 1 0 (Red) %%+ 0.45 0.9 0 0 (Violet) %%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) %%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 8.504 0 0 0 0 0 0 0 0 -1 -1 %%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () %AI3_TemplateBox: 100 102 100 102 %AI3_TileBox: 0 0 538 781 %AI3_DocumentPreview: Header %AI5_ArtSize: 612 792 %AI5_RulerUnits: 1 %AI5_ArtFlags: 1 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI5_OpenToView: -284 390 1 794 557 18 0 1 3 40 0 0 %AI5_OpenViewLayers: 7 %%PageOrigin:0 0 %%AI3_PaperRect:-28 811 567 -31 %%AI3_Margin:28 -30 -29 31 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %%EndComments %%BeginProlog %%BeginResource: procset Adobe_level2_AI5 1.2 0 %%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) %%Version: 1.2 0 %%CreationDate: (04/10/93) () %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) userdict /Adobe_level2_AI5 25 dict dup begin put /packedarray where not { userdict begin /packedarray { array astore readonly } bind def /setpacking /pop load def /currentpacking false def end 0 } if pop userdict /defaultpacking currentpacking put true setpacking /initialize { Adobe_level2_AI5 begin } bind def /terminate { currentdict Adobe_level2_AI5 eq { end } if } bind def mark /setcustomcolor where not { /findcmykcustomcolor { 0 6 packedarray } bind def /findrgbcustomcolor { 1 5 packedarray } bind def /setcustomcolor { exch aload pop 0 eq { pop 4 { 4 index mul 4 1 roll } repeat 5 -1 roll pop setcmykcolor } { pop 3 { 1 exch sub 3 index mul 1 exch sub 3 1 roll } repeat 4 -1 roll pop setrgbcolor } ifelse } def } if /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put userdict /level2? systemdict /languagelevel known dup { pop systemdict /languagelevel get 2 ge } if put /level2ScreenFreq { begin 60 HalftoneType 1 eq { pop Frequency } if HalftoneType 2 eq { pop GrayFrequency } if HalftoneType 5 eq { pop Default level2ScreenFreq } if end } bind def userdict /currentScreenFreq level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put level2? not { /setcmykcolor where not { /setcmykcolor { exch .11 mul add exch .59 mul add exch .3 mul add 1 exch sub setgray } def } if /currentcmykcolor where not { /currentcmykcolor { 0 0 0 1 currentgray sub } def } if /setoverprint where not { /setoverprint /pop load def } if /selectfont where not { /selectfont { exch findfont exch dup type /arraytype eq { makefont } { scalefont } ifelse setfont } bind def } if /cshow where not { /cshow { [ 0 0 5 -1 roll aload pop ] cvx bind forall } bind def } if } if cleartomark /anyColor? { add add add 0 ne } bind def /testColor { gsave setcmykcolor currentcmykcolor grestore } bind def /testCMYKColorThrough { testColor anyColor? } bind def userdict /composite? level2? { gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore add add add 4 eq } { 1 0 0 0 testCMYKColorThrough 0 1 0 0 testCMYKColorThrough 0 0 1 0 testCMYKColorThrough 0 0 0 1 testCMYKColorThrough and and and } ifelse put composite? not { userdict begin gsave /cyan? 1 0 0 0 testCMYKColorThrough def /magenta? 0 1 0 0 testCMYKColorThrough def /yellow? 0 0 1 0 testCMYKColorThrough def /black? 0 0 0 1 testCMYKColorThrough def grestore /isCMYKSep? cyan? magenta? yellow? black? or or or def /customColor? isCMYKSep? not def end } if end defaultpacking setpacking %%EndResource %%BeginProcSet: Adobe_ColorImage_AI6 1.1 0 userdict /Adobe_ColorImage_AI6 known not { userdict /Adobe_ColorImage_AI6 24 dict put } if userdict /Adobe_ColorImage_AI6 get begin /initialize { Adobe_ColorImage_AI6 begin Adobe_ColorImage_AI6 { dup type /arraytype eq { dup xcheck { bind } if } if pop pop } forall } def /terminate { end } def currentdict /Adobe_ColorImage_AI6_Vars known not { /Adobe_ColorImage_AI6_Vars 15 dict def } if Adobe_ColorImage_AI6_Vars begin /channelcount 0 def /sourcecount 0 def /sourcearray 4 array def /plateindex -1 def /XIMask 0 def /XIBinary 0 def /XIChannelCount 0 def /XIBitsPerPixel 0 def /XIImageHeight 0 def /XIImageWidth 0 def /XIImageMatrix null def /XIBuffer null def /XIDataProc null def /XIVersion 6 def end /WalkRGBString null def /WalkCMYKString null def /StuffRGBIntoGrayString null def /RGBToGrayImageProc null def /StuffCMYKIntoGrayString null def /CMYKToGrayImageProc null def /ColorImageCompositeEmulator null def /SeparateCMYKImageProc null def /FourEqual null def /TestPlateIndex null def currentdict /_colorimage known not { /colorimage where { /colorimage get /_colorimage exch def } { /_colorimage null def } ifelse } if /_currenttransfer systemdict /currenttransfer get def /colorimage null def /XI null def /WalkRGBString { 0 3 index dup length 1 sub 0 3 3 -1 roll { 3 getinterval { } forall 5 index exec 3 index } for 5 { pop } repeat } def /WalkCMYKString { 0 3 index dup length 1 sub 0 4 3 -1 roll { 4 getinterval { } forall 6 index exec 3 index } for 5 { pop } repeat } def /StuffRGBIntoGrayString { .11 mul exch .59 mul add exch .3 mul add cvi 3 copy put pop 1 add } def /RGBToGrayImageProc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec dup length 3 idiv string dup 3 1 roll /StuffRGBIntoGrayString load exch WalkRGBString end } def /StuffCMYKIntoGrayString { exch .11 mul add exch .59 mul add exch .3 mul add dup 255 gt { pop 255 } if 255 exch sub cvi 3 copy put pop 1 add } def /CMYKToGrayImageProc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec dup length 4 idiv string dup 3 1 roll /StuffCMYKIntoGrayString load exch WalkCMYKString end } def /ColorImageCompositeEmulator { pop true eq { Adobe_ColorImage_AI6_Vars /sourcecount get 5 add { pop } repeat } { Adobe_ColorImage_AI6_Vars /channelcount get 1 ne { Adobe_ColorImage_AI6_Vars begin sourcearray 0 3 -1 roll put channelcount 3 eq { /RGBToGrayImageProc } { /CMYKToGrayImageProc } ifelse load end } if image } ifelse } def /SeparateCMYKImageProc { Adobe_ColorImage_AI6_Vars begin sourcecount 0 ne { sourcearray plateindex get exec } { sourcearray 0 get exec dup length 4 idiv string 0 2 index plateindex 4 2 index length 1 sub { get 255 exch sub 3 copy put pop 1 add 2 index } for pop pop exch pop } ifelse end } def /FourEqual { 4 index ne { pop pop pop false } { 4 index ne { pop pop false } { 4 index ne { pop false } { 4 index eq } ifelse } ifelse } ifelse } def /TestPlateIndex { Adobe_ColorImage_AI6_Vars begin /plateindex -1 def /setcmykcolor where { pop gsave 1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub grestore 1 0 0 0 FourEqual { /plateindex 0 def } { 0 1 0 0 FourEqual { /plateindex 1 def } { 0 0 1 0 FourEqual { /plateindex 2 def } { 0 0 0 1 FourEqual { /plateindex 3 def } { 0 0 0 0 FourEqual { /plateindex 5 def } if } ifelse } ifelse } ifelse } ifelse pop pop pop pop } if plateindex end } def /colorimage { Adobe_ColorImage_AI6_Vars begin /channelcount 1 index def /sourcecount 2 index 1 eq { channelcount 1 sub } { 0 } ifelse def 4 sourcecount add index dup 8 eq exch 1 eq or not end { /_colorimage load null ne { _colorimage } { Adobe_ColorImage_AI6_Vars /sourcecount get 7 add { pop } repeat } ifelse } { dup 3 eq TestPlateIndex dup -1 eq exch 5 eq or or { /_colorimage load null eq { ColorImageCompositeEmulator } { dup 1 eq { pop pop image } { Adobe_ColorImage_AI6_Vars /plateindex get 5 eq { gsave 0 _currenttransfer exec 1 _currenttransfer exec eq { 0 _currenttransfer exec 0.5 lt } { 0 _currenttransfer exec 1 _currenttransfer exec gt } ifelse { { pop 0 } } { { pop 1 } } ifelse systemdict /settransfer get exec } if _colorimage Adobe_ColorImage_AI6_Vars /plateindex get 5 eq { grestore } if } ifelse } ifelse } { dup 1 eq { pop pop image } { pop pop Adobe_ColorImage_AI6_Vars begin sourcecount -1 0 { exch sourcearray 3 1 roll put } for /SeparateCMYKImageProc load end systemdict /image get exec } ifelse } ifelse } ifelse } def /XG { pop pop } def /XF { 13 {pop} repeat } def /Xh { Adobe_ColorImage_AI6_Vars begin gsave /XIMask exch 0 ne def /XIImageHeight exch def /XIImageWidth exch def /XIImageMatrix exch def 0 0 moveto XIImageMatrix concat XIImageWidth XIImageHeight scale XIMask { /_lp /null ddef _fc /_lp /imagemask ddef } if /XIVersion 7 def end } def /XH { Adobe_ColorImage_AI6_Vars begin /XIVersion 6 def grestore end } def /XI { Adobe_ColorImage_AI6_Vars begin gsave /XIMask exch 0 ne def /XIBinary exch 0 ne def pop pop /XIChannelCount exch def /XIBitsPerPixel exch def /XIImageHeight exch def /XIImageWidth exch def pop pop pop pop /XIImageMatrix exch def XIBitsPerPixel 1 eq { XIImageWidth 8 div ceiling cvi } { XIImageWidth XIChannelCount mul } ifelse /XIBuffer exch string def XIBinary { /XIDataProc { currentfile XIBuffer readstring pop } def XIVersion 6 le { currentfile 128 string readline pop pop } if } { /XIDataProc { currentfile XIBuffer readhexstring pop } def } ifelse XIVersion 6 le { 0 0 moveto XIImageMatrix concat XIImageWidth XIImageHeight scale XIMask { /_lp /null ddef _fc /_lp /imagemask ddef } if } if XIMask { XIImageWidth XIImageHeight false [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] /XIDataProc load imagemask } { XIImageWidth XIImageHeight XIBitsPerPixel [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] /XIDataProc load XIChannelCount 1 eq { gsave 0 setgray image grestore } { false XIChannelCount colorimage } ifelse } ifelse grestore end } def end %%EndProcSet %%BeginResource: procset Adobe_Illustrator_AI5 1.1 0 %%Title: (Adobe Illustrator (R) Version 5.0 Full Prolog) %%Version: 1.1 0 %%CreationDate: (3/7/1994) () %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_Illustrator_AI5_vars 81 dict dup begin put /_eo false def /_lp /none def /_pf { } def /_ps { } def /_psf { } def /_pss { } def /_pjsf { } def /_pjss { } def /_pola 0 def /_doClip 0 def /cf currentflat def /_tm matrix def /_renderStart [ /e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0 ] def /_renderEnd [ null null null null /i1 /i1 /i1 /i1 ] def /_render -1 def /_rise 0 def /_ax 0 def /_ay 0 def /_cx 0 def /_cy 0 def /_leading [ 0 0 ] def /_ctm matrix def /_mtx matrix def /_sp 16#020 def /_hyphen (-) def /_fScl 0 def /_cnt 0 def /_hs 1 def /_nativeEncoding 0 def /_useNativeEncoding 0 def /_tempEncode 0 def /_pntr 0 def /_tDict 2 dict def /_wv 0 def /Tx { } def /Tj { } def /CRender { } def /_AI3_savepage { } def /_gf null def /_cf 4 array def /_if null def /_of false def /_fc { } def /_gs null def /_cs 4 array def /_is null def /_os false def /_sc { } def /_pd 1 dict def /_ed 15 dict def /_pm matrix def /_fm null def /_fd null def /_fdd null def /_sm null def /_sd null def /_sdd null def /_i null def /discardSave null def /buffer 256 string def /beginString null def /endString null def /endStringLength null def /layerCnt 1 def /layerCount 1 def /perCent (%) 0 get def /perCentSeen? false def /newBuff null def /newBuffButFirst null def /newBuffLast null def /clipForward? false def end userdict /Adobe_Illustrator_AI5 known not { userdict /Adobe_Illustrator_AI5 91 dict put } if userdict /Adobe_Illustrator_AI5 get begin /initialize { Adobe_Illustrator_AI5 dup begin Adobe_Illustrator_AI5_vars begin discardDict { bind pop pop } forall dup /nc get begin { dup xcheck 1 index type /operatortype ne and { bind } if pop pop } forall end newpath } def /terminate { end end } def /_ null def /ddef { Adobe_Illustrator_AI5_vars 3 1 roll put } def /xput { dup load dup length exch maxlength eq { dup dup load dup length 2 mul dict copy def } if load begin def end } def /npop { { pop } repeat } def /sw { dup length exch stringwidth exch 5 -1 roll 3 index mul add 4 1 roll 3 1 roll mul add } def /swj { dup 4 1 roll dup length exch stringwidth exch 5 -1 roll 3 index mul add 4 1 roll 3 1 roll mul add 6 2 roll /_cnt 0 ddef { 1 index eq { /_cnt _cnt 1 add ddef } if } forall pop exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop } def /ss { 4 1 roll { 2 npop (0) exch 2 copy 0 exch put pop gsave false charpath currentpoint 4 index setmatrix stroke grestore moveto 2 copy rmoveto } exch cshow 3 npop } def /jss { 4 1 roll { 2 npop (0) exch 2 copy 0 exch put gsave _sp eq { exch 6 index 6 index 6 index 5 -1 roll widthshow currentpoint } { false charpath currentpoint 4 index setmatrix stroke } ifelse grestore moveto 2 copy rmoveto } exch cshow 6 npop } def /sp { { 2 npop (0) exch 2 copy 0 exch put pop false charpath 2 copy rmoveto } exch cshow 2 npop } def /jsp { { 2 npop (0) exch 2 copy 0 exch put _sp eq { exch 5 index 5 index 5 index 5 -1 roll widthshow } { false charpath } ifelse 2 copy rmoveto } exch cshow 5 npop } def /pl { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform } def /setstrokeadjust where { pop true setstrokeadjust /c { curveto } def /C /c load def /v { currentpoint 6 2 roll curveto } def /V /v load def /y { 2 copy curveto } def /Y /y load def /l { lineto } def /L /l load def /m { moveto } def } { /c { pl curveto } def /C /c load def /v { currentpoint 6 2 roll pl curveto } def /V /v load def /y { pl 2 copy curveto } def /Y /y load def /l { pl lineto } def /L /l load def /m { pl moveto } def } ifelse /d { setdash } def /cf { } def /i { dup 0 eq { pop cf } if setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def /XR { 0 ne /_eo exch ddef } def /H { } def /h { closepath } def /N { _pola 0 eq { _doClip 1 eq { _eo {eoclip} {clip} ifelse /_doClip 0 ddef } if newpath } { /CRender { N } ddef } ifelse } def /n { N } def /F { _pola 0 eq { _doClip 1 eq { gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc /_doClip 0 ddef } { _pf } ifelse } { /CRender { F } ddef } ifelse } def /f { closepath F } def /S { _pola 0 eq { _doClip 1 eq { gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc /_doClip 0 ddef } { _ps } ifelse } { /CRender { S } ddef } ifelse } def /s { closepath S } def /B { _pola 0 eq { _doClip 1 eq gsave F grestore { gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc /_doClip 0 ddef } { S } ifelse } { /CRender { B } ddef } ifelse } def /b { closepath B } def /W { /_doClip 1 ddef } def /* { count 0 ne { dup type /stringtype eq { pop } if } if newpath } def /u { } def /U { } def /q { _pola 0 eq { gsave } if } def /Q { _pola 0 eq { grestore } if } def /*u { _pola 1 add /_pola exch ddef } def /*U { _pola 1 sub /_pola exch ddef _pola 0 eq { CRender } if } def /D { pop } def /*w { } def /*W { } def /` { /_i save ddef clipForward? { nulldevice } if 6 1 roll 4 npop concat pop userdict begin /showpage { } def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash /setstrokeadjust where {pop false setstrokeadjust} if newpath 0 setgray false setoverprint } def /~ { end _i restore } def /O { 0 ne /_of exch ddef /_lp /none ddef } def /R { 0 ne /_os exch ddef /_lp /none ddef } def /g { /_gf exch ddef /_fc { _lp /fill ne { _of setoverprint _gf setgray /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /G { /_gs exch ddef /_sc { _lp /stroke ne { _os setoverprint _gs setgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /k { _cf astore pop /_fc { _lp /fill ne { _of setoverprint _cf aload pop setcmykcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /K { _cs astore pop /_sc { _lp /stroke ne { _os setoverprint _cs aload pop setcmykcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /x { /_gf exch ddef findcmykcustomcolor /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /X { /_gs exch ddef findcmykcustomcolor /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /A { pop } def /annotatepage { userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse } def /XT { pop pop } def /discard { save /discardSave exch store discardDict begin /endString exch store gt38? { 2 add } if load stopped pop end discardSave restore } bind def userdict /discardDict 7 dict dup begin put /pre38Initialize { /endStringLength endString length store /newBuff buffer 0 endStringLength getinterval store /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store /newBuffLast newBuff endStringLength 1 sub 1 getinterval store } def /shiftBuffer { newBuff 0 newBuffButFirst putinterval newBuffLast 0 currentfile read not { stop } if put } def 0 { pre38Initialize mark currentfile newBuff readstring exch pop { { newBuff endString eq { cleartomark stop } if shiftBuffer } loop } { stop } ifelse } def 1 { pre38Initialize /beginString exch store mark currentfile newBuff readstring exch pop { { newBuff beginString eq { /layerCount dup load 1 add store } { newBuff endString eq { /layerCount dup load 1 sub store layerCount 0 eq { cleartomark stop } if } if } ifelse shiftBuffer } loop } if } def 2 { mark { currentfile buffer readline not { stop } if endString eq { cleartomark stop } if } loop } def 3 { /beginString exch store /layerCnt 1 store mark { currentfile buffer readline not { stop } if dup beginString eq { pop /layerCnt dup load 1 add store } { endString eq { layerCnt 1 eq { cleartomark stop } { /layerCnt dup load 1 sub store } ifelse } if } ifelse } loop } def end userdict /clipRenderOff 15 dict dup begin put { /n /N /s /S /f /F /b /B } { { _doClip 1 eq { /_doClip 0 ddef _eo {eoclip} {clip} ifelse } if newpath } def } forall /Tr /pop load def /Bb {} def /BB /pop load def /Bg {12 npop} def /Bm {6 npop} def /Bc /Bm load def /Bh {4 npop} def end /Lb { 4 npop 6 1 roll pop 4 1 roll pop pop pop 0 eq { 0 eq { (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard } { /clipForward? true def /Tx /pop load def /Tj /pop load def currentdict end clipRenderOff begin begin } ifelse } { 0 eq { save /discardSave exch store } if } ifelse } bind def /LB { discardSave dup null ne { restore } { pop clipForward? { currentdict end end begin /clipForward? false ddef } if } ifelse } bind def /Pb { pop pop 0 (%AI5_EndPalette) discard } bind def /Np { 0 (%AI5_End_NonPrinting--) discard } bind def /Ln /pop load def /Ap /pop load def /Ar { 72 exch div 0 dtransform dup mul exch dup mul add sqrt dup 1 lt { pop 1 } if setflat } def /Mb { q } def /Md { } def /MB { Q } def /nc 3 dict def nc begin /setgray { pop } bind def /setcmykcolor { 4 npop } bind def /setcustomcolor { 2 npop } bind def currentdict readonly pop end end setpacking %%EndResource %%EndProlog %%BeginSetup Adobe_level2_AI5 /initialize get exec Adobe_ColorImage_AI6 /initialize get exec Adobe_Illustrator_AI5 /initialize get exec %AI5_Begin_NonPrinting Np %AI3_BeginPattern: (Arrow1.2.out/in) (Arrow1.2.out/in) 1 1 39.4039 39.4039 [ %AI3_Tile (0 O 0 R 0.75 0.75 0.375 0 k 0.75 0.75 0.375 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 1 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 33.9039 15.6187 m 39.4247 20.202 L 39.4247 20.202 L 33.8869 24.6252 L S 39.2997 20.202 m 24.5706 20.202 l 20.4039 20.4792 20.4039 16.8125 v 20.4039 13.1458 20.4039 12.5625 y S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Arrow1.2.side) (Arrow1.2.side) 1 1 39.404 39.4039 [ %AI3_Tile (0 O 0 R 0.75 0.75 0.375 0 k 0.75 0.75 0.375 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 1 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 20.202 20.202 m 39.404 20.202 l S 33.904 15.6187 m 39.4248 20.202 L 39.4248 20.202 L 33.887 24.6252 L S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Bricks) (Bricks) 1.6 1.6 73.6 73.6 [ %AI3_Tile (0 O 0 R 0.3 0.85 0.85 0 k 0.3 0.85 0.85 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 1.6 1.6 m 1.6 73.6 L 73.6 73.6 L 73.6 1.6 L 1.6 1.6 L f %AI6_EndPatternLayer ) & (0 O 0 R 1 g 1 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 1.6 70.01 m 73.6 70.01 l S 1.6 62.809 m 73.6 62.809 L S 1.6 55.609 m 73.6 55.609 L S 1.6 48.408 m 73.6 48.408 L S 1.6 41.208 m 73.6 41.208 L S 1.6 34.007 m 73.6 34.007 L S 1.6 26.807 m 73.6 26.807 L S 1.6 19.606 m 73.6 19.606 L S 1.6 12.406 m 73.6 12.406 L S 1.6 5.206 m 73.6 5.206 L S 70.01 70.01 m 70.01 62.822 l S 55.61 70.01 m 55.61 62.822 L S 41.21 70.01 m 41.21 62.822 L S 26.81 70.01 m 26.81 62.822 L S 12.41 70.01 m 12.41 62.822 L S 70.01 55.572 m 70.01 48.385 l S 55.61 55.572 m 55.61 48.385 L S 41.21 55.572 m 41.21 48.385 L S 26.81 55.572 m 26.81 48.385 L S 12.41 55.572 m 12.41 48.385 L S 70.01 41.197 m 70.01 34.01 l S 55.61 41.197 m 55.61 34.01 L S 41.21 41.197 m 41.21 34.01 L S 26.81 41.197 m 26.81 34.01 L S 12.41 41.197 m 12.41 34.01 L S 70.01 26.822 m 70.01 19.635 l S 55.61 26.822 m 55.61 19.635 L S 41.21 26.822 m 41.21 19.635 L S 26.81 26.822 m 26.81 19.635 L S 12.41 26.822 m 12.41 19.635 L S 70.01 12.385 m 70.01 5.197 l S 55.61 12.385 m 55.61 5.197 L S 41.21 12.385 m 41.21 5.197 L S 26.81 12.385 m 26.81 5.197 L S 12.41 12.385 m 12.41 5.197 L S 62.797 5.197 m 62.797 1.6 L S 48.397 5.197 m 48.397 1.6 L S 33.997 5.197 m 33.997 1.6 L S 19.597 5.197 m 19.597 1.6 L S 5.197 5.197 m 5.197 1.6 l S 62.797 19.635 m 62.797 12.447 L S 48.397 19.635 m 48.397 12.447 L S 33.997 19.635 m 33.997 12.447 L S 19.597 19.635 m 19.597 12.447 L S 5.197 19.635 m 5.197 12.447 l S 62.797 34.01 m 62.797 26.822 L S 48.397 34.01 m 48.397 26.822 L S 19.597 34.01 m 19.597 26.822 L S 5.197 34.01 m 5.197 26.822 l S 62.797 48.385 m 62.797 41.197 L S 48.397 48.385 m 48.397 41.197 L S 33.997 48.385 m 33.997 41.197 L S 19.597 48.385 m 19.597 41.197 L S 5.197 48.385 m 5.197 41.197 l S 62.797 62.822 m 62.797 55.635 L S 48.397 62.822 m 48.397 55.635 L S 33.997 62.822 m 33.997 55.635 L S 19.597 62.822 m 19.597 55.635 L S 5.197 62.822 m 5.197 55.635 l S 62.797 73.5589 m 62.797 70.072 L S 48.397 73.5589 m 48.397 70.072 L S 33.997 73.5589 m 33.997 70.072 L S 19.597 73.5589 m 19.597 70.072 L S 5.197 73.5589 m 5.197 70.072 l S 33.997 34.01 m 33.997 26.822 L S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Checks) (Checks) 1 1 31.3995 31.3995 [ %AI3_Tile (0 O 0 R 0 0.9 1 0 k 0 0.9 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 1 XR 19.9995 4.8 m 27.5995 4.8 L 27.5995 12.3995 L 19.9995 12.3995 L 19.9995 4.8 L f 31.3995 27.5995 m 31.3995 31.3995 L 27.5995 31.3995 L 27.5995 27.5995 L 31.3995 27.5995 L f 19.9995 27.5995 m 19.9995 19.9995 L 27.5995 19.9995 L 27.5995 27.5995 L 19.9995 27.5995 L f 0 XR 12.3995 12.3995 m 19.9995 12.3995 L 19.9995 19.9995 L 12.3995 19.9995 L 12.3995 12.3995 L f 1 XR 12.3995 27.5995 m 4.8 27.5995 L 4.8 19.9995 L 12.3995 19.9995 L 12.3995 27.5995 L f 4.8 12.3995 m 4.8 4.8 L 12.3995 4.8 L 12.3995 12.3995 L 4.8 12.3995 L f 19.9995 27.5995 m 19.9995 31.3995 L 12.3995 31.3995 L 12.3995 27.5995 L 19.9995 27.5995 L f 12.3995 4.8 m 12.3995 1 L 19.9995 1 L 19.9995 4.8 L 12.3995 4.8 L f 4.8 19.9995 m 1 19.9995 L 1 12.3995 L 4.8 12.3995 L 4.8 19.9995 L f 27.5995 19.9995 m 27.5995 12.3995 L 31.3995 12.3995 L 31.3995 19.9995 L 27.5995 19.9995 L f 4.8 31.3995 m 1 31.3995 L 1 27.5995 L 4.8 27.5995 L 4.8 31.3995 L f 27.5995 1 m 31.3995 1 L 31.3995 4.8 L 27.5995 4.8 L 27.5995 1 L f 1 4.8 m 1 1 L 4.8 1 L 4.8 4.8 L 1 4.8 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.05 0.2 0 k 0 0.05 0.2 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 1 XR 4.8 4.8 m 4.8 1 L 12.3995 1 L 12.3995 4.8 L 4.8 4.8 L f 4.8 12.3995 m 1 12.3995 L 1 4.8 L 4.8 4.8 L 4.8 12.3995 L f 19.9995 4.8 m 19.9995 1 L 27.5995 1 L 27.5995 4.8 L 19.9995 4.8 L f 12.3995 12.3995 m 12.3995 4.8 L 19.9995 4.8 L 19.9995 12.3995 L 12.3995 12.3995 L f 27.5995 4.8 m 31.3995 4.8 L 31.3995 12.3995 L 27.5995 12.3995 L 27.5995 4.8 L f 12.3995 19.9995 m 4.8 19.9995 L 4.8 12.3995 L 12.3995 12.3995 L 12.3995 19.9995 L f 4.8 27.5995 m 1 27.5995 L 1 19.9995 L 4.8 19.9995 L 4.8 27.5995 L f 19.9995 12.3995 m 27.5995 12.3995 L 27.5995 19.9995 L 19.9995 19.9995 L 19.9995 12.3995 L f 19.9995 19.9995 m 19.9995 27.5995 L 12.3995 27.5995 L 12.3995 19.9995 L 19.9995 19.9995 L f 27.5995 19.9995 m 31.3995 19.9995 L 31.3995 27.5995 L 27.5995 27.5995 L 27.5995 19.9995 L f 12.3995 27.5995 m 12.3995 31.3995 L 4.8 31.3995 L 4.8 27.5995 L 12.3995 27.5995 L f 27.5995 27.5995 m 27.5995 31.3995 L 19.9995 31.3995 L 19.9995 27.5995 L 27.5995 27.5995 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Confetti) (Confetti) 4.85 3.617 76.85 75.617 [ %AI3_Tile (0 O 0 R 1 g 1 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 4.85 3.617 m 4.85 75.617 L 76.85 75.617 L 76.85 3.617 L 4.85 3.617 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 g 0 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 10.6 64.867 m 7.85 62.867 l S 9.1 8.617 m 6.85 6.867 l S 78.1 68.617 m 74.85 67.867 l S 76.85 56.867 m 74.35 55.117 l S 79.6 51.617 m 76.6 51.617 l S 76.35 44.117 m 73.6 45.867 l S 78.6 35.867 m 76.6 34.367 l S 76.1 23.867 m 73.35 26.117 l S 78.1 12.867 m 73.85 13.617 l S 68.35 14.617 m 66.1 12.867 l S 76.6 30.617 m 73.6 30.617 l S 62.85 58.117 m 60.956 60.941 l S 32.85 59.617 m 31.196 62.181 l S 47.891 64.061 m 49.744 66.742 l S 72.814 2.769 m 73.928 5.729 l S 67.976 2.633 m 67.35 5.909 l S 61.85 27.617 m 59.956 30.441 l S 53.504 56.053 m 51.85 58.617 l S 52.762 1.779 m 52.876 4.776 l S 45.391 5.311 m 47.244 7.992 l S 37.062 3.375 m 35.639 5.43 l S 55.165 34.828 m 57.518 37.491 l S 20.795 3.242 m 22.12 5.193 l S 14.097 4.747 m 15.008 8.965 l S 9.736 1.91 m 8.073 4.225 l S 31.891 5.573 m 32.005 8.571 l S 12.1 70.367 m 15.6 68.867 l S 9.35 54.867 m 9.6 58.117 l S 12.85 31.867 m 14.35 28.117 l S 10.1 37.367 m 12.35 41.117 l S 34.1 71.117 m 31.85 68.617 l S 38.35 71.117 m 41.6 68.367 l S 55.1 71.117 m 58.35 69.117 l S 57.35 65.117 m 55.35 61.867 l S 64.35 66.367 m 69.35 68.617 l S 71.85 62.867 m 69.35 61.117 l S 23.6 70.867 m 23.6 67.867 l S 20.6 65.867 m 17.35 65.367 l S 24.85 61.367 m 25.35 58.117 l S 25.85 65.867 m 29.35 66.617 l S 14.1 54.117 m 16.85 56.117 l S 12.35 11.617 m 12.6 15.617 l S 12.1 19.867 m 14.35 22.367 l S 26.1 9.867 m 23.6 13.367 l S 34.6 47.117 m 32.1 45.367 l S 62.6 41.867 m 59.85 43.367 l S 31.6 35.617 m 27.85 36.367 l S 36.35 26.117 m 34.35 24.617 l S 33.85 14.117 m 31.1 16.367 l S 37.1 9.867 m 35.1 11.117 l S 34.35 20.867 m 31.35 20.867 l S 44.6 56.617 m 42.1 54.867 l S 47.35 51.367 m 44.35 51.367 l S 44.1 43.867 m 41.35 45.617 l S 43.35 33.117 m 42.6 30.617 l S 43.85 23.617 m 41.1 25.867 l S 44.35 15.617 m 42.35 16.867 l S 67.823 31.1 m 64.823 31.1 l S 27.1 32.617 m 29.6 30.867 l S 31.85 55.117 m 34.85 55.117 l S 19.6 40.867 m 22.1 39.117 l S 16.85 35.617 m 19.85 35.617 l S 20.1 28.117 m 22.85 29.867 l S 52.1 42.617 m 54.484 44.178 l S 52.437 50.146 m 54.821 48.325 l S 59.572 54.133 m 59.35 51.117 l S 50.185 10.055 m 53.234 9.928 l S 51.187 15.896 m 53.571 14.075 l S 58.322 19.883 m 59.445 16.823 l S 53.1 32.117 m 50.6 30.367 l S 52.85 24.617 m 49.6 25.617 l S 61.85 9.117 m 59.1 10.867 l S 69.35 34.617 m 66.6 36.367 l S 67.1 23.617 m 65.1 22.117 l S 24.435 46.055 m 27.484 45.928 l S 25.437 51.896 m 27.821 50.075 l S 62.6 47.117 m 65.321 46.575 l S 19.85 19.867 m 20.35 16.617 l S 21.85 21.867 m 25.35 22.617 l S 37.6 62.867 m 41.6 62.117 l S 38.323 42.1 m 38.823 38.6 l S 69.35 52.617 m 66.85 53.867 l S 14.85 62.117 m 18.1 59.367 l S 9.6 46.117 m 7.1 44.367 l S 20.6 51.617 m 18.6 50.117 l S 46.141 70.811 m 47.994 73.492 l S 69.391 40.561 m 71.244 43.242 l S 38.641 49.311 m 39.35 52.117 l S 25.141 16.811 m 25.85 19.617 l S 36.6 32.867 m 34.6 31.367 l S 6.1 68.617 m 2.85 67.867 l S 4.85 56.867 m 2.35 55.117 l S 7.6 51.617 m 4.6 51.617 l S 6.6 35.867 m 4.6 34.367 l S 6.1 12.867 m 1.85 13.617 l S 4.6 30.617 m 1.6 30.617 l S 72.814 74.769 m 73.928 77.729 l S 67.976 74.633 m 67.35 77.909 l S 52.762 73.779 m 52.876 76.776 l S 37.062 75.375 m 35.639 77.43 l S 20.795 75.242 m 22.12 77.193 l S 9.736 73.91 m 8.073 76.225 l S 10.1 23.617 m 6.35 24.367 l S 73.217 18.276 m 71.323 21.1 l S 28.823 39.6 m 29.505 42.389 l S 49.6 38.617 m 47.6 37.117 l S 60.323 73.6 m 62.323 76.6 l S 60.323 1.6 m 62.323 4.6 l S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (DblLine1.2.inner) (DblLine1.2.inner) 1 1 39.2705 39.2706 [ %AI3_Tile (0 O 0 R 1 0.14 0.09 0 k 1 0.14 0.09 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 39.2702 22.175 m 39.2702 13.6108 L 26.66 13.6108 L 26.66 1.0003 L 18.0958 1.0003 L 18.0948 22.175 L 18.0958 22.175 L 18.0958 22.1752 L 39.2702 22.175 L f 39.2708 24.6929 m 15.5779 24.6929 L 15.5779 1.0003 L 14.9037 1.0003 L 14.9032 25.3675 L 39.2708 25.3675 L 39.2708 24.6929 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (DblLine1.2.outer) (DblLine1.2.outer) 1 1.0003 39.2706 39.271 [ %AI3_Tile (0 O 0 R 1 0.14 0.09 0 k 1 0.14 0.09 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 39.2708 26.6602 m 13.6111 26.6602 L 13.6111 1.0005 L 22.1751 1 L 22.1751 18.096 L 39.2708 18.096 L 39.2708 26.6602 L f 39.2708 15.578 m 24.6928 15.578 L 24.6928 1 L 25.367 1 L 25.367 14.9038 L 39.2708 14.9038 L 39.2708 15.578 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (DblLine1.2.side) (DblLine1.2.side) 1 1 39.2706 39.2706 [ %AI3_Tile (0 O 0 R 1 0.14 0.09 0 k 1 0.14 0.09 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 39.2704 18.0958 m 39.2704 26.6598 L 1.0001 26.6598 L 1.0001 18.0958 L 39.2704 18.0958 L f 39.2704 14.9037 m 39.2704 15.5776 L 1.0001 15.5776 L 1.0001 14.9037 L 39.2704 14.9037 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Diamonds) (Diamonds) 1 1 37.1865 41.9411 [ %AI3_Tile (0 O 0 R 0.2 0 1 0 k 0.2 0 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 1.0002 1.0004 m 1.0002 41.9411 L 37.1865 41.9411 L 37.1865 1.0004 L 1.0002 1.0004 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 g 0 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 1 XR 19.0936 41.9408 m 19.0929 41.9408 L 19.0933 41.9402 L 19.0936 41.9408 L f 7.0311 41.9408 m 7.0304 41.9408 L 7.0308 41.9402 L 7.0311 41.9408 L f 31.1556 41.9408 m 31.1548 41.9408 L 31.1552 41.9402 L 31.1556 41.9408 L f %AI6_EndPatternLayer ) & (0 O 0 R 0.75 0.9 0 0 k 0.75 0.9 0 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 1 XR 37.1865 1 m 37.1865 11.2349 L 31.1552 1 L 37.1865 1 L f 19.0933 1 m 31.1552 1 L 25.124 11.2349 L 19.0933 1 L f 7.0308 1 m 19.0933 1 L 13.062 11.2349 L 7.0308 1 L f 1 1 m 7.0308 1 L 1 11.2349 L 1 1 L f 37.1859 11.2349 m 37.1865 11.236 L 37.1865 31.7059 L 31.1552 21.4704 L 37.1859 11.2349 L f 19.0933 21.4704 m 25.124 11.2349 L 31.1552 21.4704 L 25.124 31.7059 L 19.0933 21.4704 L f 7.0308 21.4704 m 13.062 11.2349 L 19.0933 21.4704 L 13.062 31.7059 L 7.0308 21.4704 L f 1 31.7059 m 1 11.2349 L 7.0308 21.4704 L 1 31.7059 L f 37.1859 31.7059 m 37.1865 31.707 L 37.1865 41.9408 L 31.1556 41.9408 L 31.1552 41.9402 L 37.1859 31.7059 L f 25.124 31.7059 m 31.1552 41.9402 L 31.1548 41.9408 L 19.0936 41.9408 L 19.0933 41.9402 L 25.124 31.7059 L f 13.062 31.7059 m 19.0933 41.9402 L 19.0929 41.9408 L 7.0311 41.9408 L 7.0308 41.9402 L 13.062 31.7059 L f 7.0304 41.9408 m 1 41.9408 L 1 31.7059 L 7.0308 41.9402 L 7.0304 41.9408 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Hexagon) (Hexagon) 4 1.6 70.151 77.983 [ %AI3_Tile (0 O 0 R 0 1 0.35 0 k 0 1 0.35 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 70.151 77.983 m 70.151 1.6 L 4 1.6 L 4 77.983 L 70.151 77.983 L f %AI6_EndPatternLayer ) & (0 O 0 R 0.9921 1 0 0 k 0.9921 1 0 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 20.538 30.244 m S 26.05 20.696 m 15.025 20.696 L 9.513 30.244 L 15.025 39.792 L 26.05 39.792 L 31.564 30.244 L 26.05 20.696 L s 20.537 11.148 m S 26.05 1.6 m 15.024 1.6 L 9.512 11.148 L 15.024 20.696 L 26.05 20.696 L 31.563 11.148 L 26.05 1.6 L s 53.614 30.244 m S 59.126 20.696 m 48.101 20.696 L 42.589 30.244 L 48.101 39.792 L 59.126 39.792 L 64.639 30.244 L 59.126 20.696 L s 53.614 11.148 m S 59.126 1.6 m 48.101 1.6 L 42.588 11.148 L 48.101 20.696 L 59.126 20.696 L 64.638 11.148 L 59.126 1.6 L s 20.538 68.436 m S 26.051 58.888 m 15.025 58.888 L 9.513 68.436 L 15.025 77.984 L 26.051 77.984 L 31.564 68.436 L 26.051 58.888 L s 20.538 49.34 m S 26.051 39.792 m 15.025 39.792 L 9.513 49.34 L 15.025 58.888 L 26.05 58.888 L 31.564 49.34 L 26.051 39.792 L s 53.614 68.436 m S 59.127 58.888 m 48.102 58.888 L 42.589 68.436 L 48.101 77.985 L 59.127 77.985 L 64.639 68.436 L 59.127 58.888 L s 53.614 49.34 m S 59.127 39.792 m 48.101 39.792 L 42.589 49.34 L 48.101 58.888 L 59.127 58.888 L 64.639 49.341 L 59.127 39.792 L s 4 20.696 m S 3.876 30.244 m 9.512 30.244 L 15.024 20.696 L 9.512 11.147 L 3.876 11.147 L S 37.075 20.696 m S 42.588 11.148 m 31.563 11.148 L 26.05 20.696 L 31.563 30.244 L 42.589 30.244 L 48.101 20.696 L 42.588 11.148 L s 37.076 58.888 m S 42.589 49.34 m 31.564 49.34 L 26.05 58.888 L 31.564 68.436 L 42.589 68.436 L 48.101 58.888 L 42.589 49.34 L s 70.151 20.696 m S 70.2094 11.147 m 64.639 11.147 L 59.127 20.696 L 64.639 30.244 L 70.2094 30.244 L S 70.152 58.888 m S 70.0427 49.34 m 64.639 49.34 L 59.127 58.888 L 64.639 68.436 L 70.0427 68.436 L S 4 58.888 m S 3.876 68.436 m 9.513 68.436 L 15.025 58.888 L 9.513 49.34 L 3.876 49.34 L S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Laurel.inner) (Laurel.inner) 1 1 28.5392 28.5392 [ %AI3_Tile (0 O 0 R 0 0.55 1 0.12 k 0 0.55 1 0.12 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 19.2768 15.3585 m 28.9144 15.3585 L 28.9144 14.2335 L 19.2768 14.2335 L 19.2768 15.3585 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.55 1 0.3 k 0 0.55 1 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 14.7461 18.9624 m 13.0264 17.8486 11.3273 14.4193 11.3273 10.0362 c 11.3273 5.6547 12.9768 2.1518 14.744 1.1112 C 14.7443 1.1112 L 16.4707 2.1518 18.1679 5.6547 18.1679 10.0362 c 18.1679 14.4143 16.432 17.8633 14.7461 18.9624 C f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Laurel.outer) (Laurel.outer) 1 1.3751 28.5393 28.9143 [ %AI3_Tile (0 O 0 R 0 0.55 1 0.12 k 0 0.55 1 0.12 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 14.2395 10.6375 m 14.2395 1 L 15.3645 1 L 15.3645 10.6375 L 14.2395 10.6375 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.55 1 0.3 k 0 0.55 1 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 10.5769 15.124 m 11.6906 16.8438 15.1198 18.5429 19.503 18.5429 c 23.8844 18.5429 27.3874 16.8935 28.428 15.1262 C 28.428 15.1259 L 27.3874 13.3995 23.8844 11.7023 19.503 11.7023 c 15.1249 11.7023 11.676 13.4382 10.5769 15.124 C f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Laurel.side) (Laurel.side) 1.3972 1 28.9364 28.5392 [ %AI3_Tile (0 O 0 R 0 0.55 1 0.12 k 0 0.55 1 0.12 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 29.1571 15.2998 m 1 15.2998 L 1 14.1748 L 29.1571 14.1748 L 29.1571 15.2998 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.55 1 0.3 k 0 0.55 1 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 2.0183 27.4787 m 1.5899 25.4751 2.8132 21.8488 5.9125 18.7494 c 9.0107 15.6513 12.654 14.3407 14.6395 14.8545 C 14.6398 14.8547 L 15.1246 16.8113 13.8478 20.4883 10.7496 23.5865 c 7.6538 26.6824 3.9876 27.8936 2.0183 27.4787 C f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.39 0.7 0.12 k 0 0.39 0.7 0.12 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 2.0183 2.0091 m 1.5899 4.0126 2.8132 7.6389 5.9125 10.7382 c 9.0107 13.8365 12.654 15.147 14.6395 14.6332 C 14.6398 14.633 L 15.1246 12.6765 13.8478 8.9993 10.7496 5.9011 c 7.6538 2.8054 3.9876 1.5941 2.0183 2.0091 C f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.55 1 0.3 k 0 0.55 1 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 15.821 2.0091 m 15.3925 4.0126 16.6159 7.6389 19.7152 10.7382 c 22.8134 13.8365 26.4567 15.147 28.4422 14.6332 C 28.4424 14.633 L 28.9273 12.6765 27.6505 8.9993 24.5523 5.9011 c 21.4565 2.8054 17.7903 1.5941 15.821 2.0091 C f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.39 0.7 0.12 k 0 0.39 0.7 0.12 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 15.821 27.4787 m 15.3925 25.4751 16.6159 21.8488 19.7152 18.7494 c 22.8134 15.6513 26.4567 14.3407 28.4422 14.8545 C 28.4424 14.8547 L 28.9273 16.8113 27.6505 20.4883 24.5523 23.5865 c 21.4565 26.6824 17.7903 27.8936 15.821 27.4787 C f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Leaves-fall) (Leaves-fall) 1 1 52.733 89.816 [ %AI3_Tile (0 O 0 R 0.05 0.2 1 0 k 0.05 0.2 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 52.733 89.816 m 52.733 1 L 1 1 L 1 89.816 L 52.733 89.816 L f %AI6_EndPatternLayer ) & (0 O 0 R 0.83 0 1 0 k 0.83 0 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 1 D 0 XR 25.317 2.083 m 25.994 2.283 26.284 2.435 V 24.815 5.147 29.266 9.428 30.186 10.168 C 30.787 9.943 30.907 7.41 30.23 6.073 C 31.073 6.196 33.262 4.818 34.02 3.529 C 34.085 4.217 35.655 7.158 36.481 7.535 C 35.561 7.933 34.896 9.406 34.134 10.854 C 35.156 11.021 36.555 10.1 38.026 9.195 C 38.541 9.996 39.915 10.968 41.174 11.484 C 40.086 12.171 39.591 12.912 39.094 14.372 C 38.052 13.806 35.865 13.657 35.336 13.944 C 35.85 15.057 38.096 15.6 38.827 15.547 C 38.573 16.409 38.425 18.562 38.598 21.155 C 36.939 19.839 35.393 18.522 33.734 18.58 C 34.003 17.158 33.367 15.353 32.99 14.86 C 32.417 15.604 32.006 16.431 32.361 18.408 C 30.908 18.893 29.671 19.439 28.297 20.697 C 28.297 18.866 27.725 17.664 26.857 16.388 C 28.117 15.9 29.389 14.697 29.385 13.658 C 28.537 13.81 26.845 14.554 26.352 15.547 C 25.634 14.8 23.95 13.491 22.346 13.487 C 23.534 12.632 24.454 11.598 24.549 9.686 C 25.802 10.657 28.255 11.272 29.635 10.674 C 24.794 6.438 25.262 3.405 25.317 2.083 C f 12.412 33.743 m 11.887 33.272 11.691 33.01 V 14.182 31.192 11.928 25.366 11.415 24.303 C 10.776 24.247 9.369 26.988 9.405 28.486 C 8.273 27.73 6.608 27.851 5.006 28.137 C 5.578 27.049 5.177 25.104 4.376 24.303 C 5.378 24.339 6.729 23.624 8.038 22.643 C 7.203 21.823 5.376 21.984 3.46 22.643 C 3.46 21.27 2.638 19.533 1.801 18.351 C 3.117 18.408 4.262 17.722 5.12 16.691 C 5.785 18.26 7.819 19.373 8.725 19.324 C 8.742 17.959 7.169 15.869 6.147 15.47 C 6.747 14.801 7.766 13.27 8.725 10.854 C 9.524 12.78 10.694 14.022 11.927 14.955 C 10.785 16.517 10.959 17.388 11.358 18.866 C 12.101 18.325 13.132 17.893 13.303 15.89 C 15.02 16.176 16.156 16.104 17.653 15.203 C 17.198 16.865 17.195 18.466 17.515 20.166 C 15.665 20.026 14.105 20.239 13.075 21.728 C 13.905 21.955 16.165 22.014 17.039 21.082 C 17.366 22.064 18.261 23.47 19.707 24.164 C 18.267 24.424 17.282 25.523 16.373 27.209 C 15.66 25.793 13.433 24.128 11.93 24.073 C 13.933 28.137 13.933 31.055 12.412 33.743 C f 31.125 30.5 m 31.445 31.128 31.648 31.385 V 34.045 29.444 38.851 32.752 39.746 33.521 C 39.636 34.153 37.511 35.29 35.794 34.26 C 36.234 35.549 35.332 37.51 34.134 38.552 C 35.873 38.451 38.019 39.813 38.541 40.555 C 38.763 39.577 39.946 38.307 41.231 37.293 C 41.582 38.266 40.887 40.384 39.971 41.986 C 41.206 42.487 42.318 43.417 42.776 44.676 C 43.233 43.359 44.236 42.685 45.58 41.929 C 44.421 40.502 43.64 38.328 43.92 37.465 C 45.243 37.8 46.814 40.518 46.937 41.607 C 47.812 40.841 49.366 40.154 51.947 39.848 C 50.246 38.77 49.884 36.778 49.3 35.347 C 48.152 35.794 45.983 35.853 45.008 35.29 C 45.721 34.711 47.061 34.16 49.071 34.146 C 49.071 32.601 49.534 31.469 50.788 30.254 C 49.065 30.267 46.965 29.781 45.469 29.389 C 45.221 30.718 44.378 32.314 43.233 32.715 C 43.227 31.854 43.493 29.605 44.378 28.938 C 43.513 28.37 42.26 26.993 41.803 25.276 C 41.181 26.601 40.32 27.906 38.457 28.35 C 39.642 29.403 40.477 31.42 40.143 32.887 C 35.091 28.905 32.414 30.203 31.125 30.5 C f 25.317 46.491 m 25.994 46.691 26.284 46.843 V 24.815 49.556 29.266 53.837 30.186 54.576 C 30.787 54.351 30.907 51.818 30.23 50.482 C 31.073 50.605 33.262 49.227 34.02 47.938 C 34.085 48.625 35.655 51.566 36.481 51.944 C 35.561 52.341 34.896 53.814 34.134 55.263 C 35.156 55.43 36.555 54.508 38.026 53.603 C 38.541 54.404 39.915 55.377 41.174 55.892 C 40.086 56.579 39.591 57.321 39.094 58.78 C 38.052 58.215 35.865 58.065 35.336 58.353 C 35.85 59.465 38.096 60.008 38.827 59.955 C 38.573 60.817 38.425 62.97 38.598 65.563 C 36.939 64.247 35.393 62.931 33.734 62.988 C 34.003 61.567 33.367 59.761 32.99 59.268 C 32.417 60.012 32.006 60.839 32.361 62.817 C 30.908 63.302 29.671 63.847 28.297 65.106 C 28.297 63.274 27.725 62.073 26.857 60.796 C 28.117 60.308 29.389 59.106 29.385 58.067 C 28.537 58.219 26.845 58.963 26.352 59.955 C 25.634 59.209 23.95 57.899 22.346 57.895 C 23.534 57.041 24.454 56.006 24.549 54.094 C 25.802 55.065 28.255 55.68 29.635 55.083 C 24.794 50.846 25.262 47.814 25.317 46.491 C f 12.412 78.151 m 11.887 77.68 11.691 77.418 V 14.182 75.601 11.928 69.774 11.415 68.711 C 10.776 68.655 9.369 71.396 9.405 72.894 C 8.273 72.138 6.608 72.259 5.006 72.545 C 5.578 71.458 5.177 69.512 4.376 68.711 C 5.378 68.747 6.729 68.032 8.038 67.052 C 7.203 66.231 5.376 66.393 3.46 67.052 C 3.46 65.678 2.638 63.941 1.801 62.759 C 3.117 62.817 4.262 62.13 5.12 61.1 C 5.785 62.669 7.819 63.781 8.725 63.732 C 8.742 62.367 7.169 60.277 6.147 59.878 C 6.747 59.209 7.766 57.678 8.725 55.263 C 9.524 57.189 10.694 58.431 11.927 59.364 C 10.785 60.925 10.959 61.796 11.358 63.274 C 12.101 62.734 13.132 62.301 13.303 60.298 C 15.02 60.584 16.156 60.512 17.653 59.612 C 17.198 61.273 17.195 62.874 17.515 64.574 C 15.665 64.434 14.105 64.648 13.075 66.136 C 13.905 66.363 16.165 66.422 17.039 65.49 C 17.366 66.472 18.261 67.878 19.707 68.572 C 18.267 68.832 17.282 69.931 16.373 71.617 C 15.66 70.202 13.433 68.536 11.93 68.482 C 13.933 72.545 13.933 75.464 12.412 78.151 C f 31.125 74.908 m 31.445 75.537 31.648 75.794 V 34.045 73.853 38.851 77.161 39.746 77.929 C 39.636 78.562 37.511 79.698 35.794 78.668 C 36.234 79.957 35.332 81.918 34.134 82.96 C 35.873 82.86 38.019 84.221 38.541 84.963 C 38.763 83.986 39.946 82.716 41.231 81.701 C 41.582 82.675 40.887 84.792 39.971 86.394 C 41.206 86.895 42.318 87.825 42.776 89.084 C 43.233 87.768 44.236 87.093 45.58 86.337 C 44.421 84.91 43.64 82.736 43.92 81.873 C 45.243 82.208 46.814 84.926 46.937 86.016 C 47.812 85.249 49.366 84.563 51.947 84.257 C 50.246 83.179 49.884 81.187 49.3 79.756 C 48.152 80.203 45.983 80.262 45.008 79.698 C 45.721 79.119 47.061 78.569 49.071 78.554 C 49.071 77.009 49.534 75.877 50.788 74.663 C 49.065 74.675 46.965 74.189 45.469 73.798 C 45.221 75.126 44.378 76.723 43.233 77.123 C 43.227 76.262 43.493 74.013 44.378 73.347 C 43.513 72.779 42.26 71.401 41.803 69.684 C 41.181 71.009 40.32 72.314 38.457 72.759 C 39.642 73.812 40.477 75.829 40.143 77.295 C 35.091 73.313 32.414 74.611 31.125 74.908 C f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Polka dots) (Polka dots) 1 1 29.8 29.8 [ %AI3_Tile (0 O 0 R 0.45 0.9 0 0 k 0.45 0.9 0 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 1 1 m 1 29.8 L 29.8 29.8 L 29.8 1 L 1 1 L f %AI6_EndPatternLayer ) & (0 O 0 R 0.09 0.18 0 0 k 0.09 0.18 0 0 K ) @ ( %AI6_BeginPatternLayer *u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 11.08 8.2 m 11.08 9.791 9.79 11.08 8.2 11.08 c 6.609 11.08 5.32 9.791 5.32 8.2 c 5.32 6.61 6.609 5.32 8.2 5.32 c 9.79 5.32 11.08 6.61 11.08 8.2 c f 11.08 22.6 m 11.08 24.191 9.79 25.48 8.2 25.48 c 6.609 25.48 5.32 24.191 5.32 22.6 c 5.32 21.01 6.609 19.72 8.2 19.72 c 9.79 19.72 11.08 21.01 11.08 22.6 c f 18.28 15.4 m 18.28 16.991 16.99 18.28 15.4 18.28 c 13.809 18.28 12.52 16.991 12.52 15.4 c 12.52 13.81 13.809 12.52 15.4 12.52 c 16.99 12.52 18.28 13.81 18.28 15.4 c f 25.48 8.2 m 25.48 9.791 24.19 11.08 22.6 11.08 c 21.009 11.08 19.72 9.791 19.72 8.2 c 19.72 6.61 21.009 5.32 22.6 5.32 c 24.19 5.32 25.48 6.61 25.48 8.2 c f 25.48 22.6 m 25.48 24.191 24.19 25.48 22.6 25.48 c 21.009 25.48 19.72 24.191 19.72 22.6 c 19.72 21.01 21.009 19.72 22.6 19.72 c 24.19 19.72 25.48 21.01 25.48 22.6 c f *U 26.92 1 m 29.8 1 L 29.8 3.88 L 28.209 3.88 26.92 2.591 26.92 1 C f 15.4 3.88 m 13.809 3.88 12.52 2.591 12.52 1 C 18.28 1 L 18.28 2.591 16.99 3.88 15.4 3.88 c f 1 3.88 m 1 1 L 3.88 1 L 3.88 2.591 2.59 3.88 1 3.88 C f 1 XR 26.92 15.4 m 26.92 13.81 28.209 12.52 29.8 12.52 C 29.8 18.28 L 28.209 18.28 26.92 16.991 26.92 15.4 c f 0 XR 15.4 18.28 m 13.809 18.28 12.52 16.991 12.52 15.4 c 12.52 13.81 13.809 12.52 15.4 12.52 c 16.99 12.52 18.28 13.81 18.28 15.4 c 18.28 16.991 16.99 18.28 15.4 18.28 c f 1 XR 3.88 15.4 m 3.88 16.991 2.59 18.28 1 18.28 C 1 12.52 L 2.59 12.52 3.88 13.81 3.88 15.4 c f 0 XR 29.8 26.92 m 29.8 29.8 L 26.92 29.8 L 26.92 28.21 28.209 26.92 29.8 26.92 C f 15.4 26.92 m 16.99 26.92 18.28 28.21 18.28 29.8 C 12.52 29.8 L 12.52 28.21 13.809 26.92 15.4 26.92 c f 3.88 29.8 m 1 29.8 L 1 26.92 L 2.59 26.92 3.88 28.21 3.88 29.8 C f 1 XR 8.2 11.08 m 6.609 11.08 5.32 9.791 5.32 8.2 c 5.32 6.61 6.609 5.32 8.2 5.32 c 9.79 5.32 11.08 6.61 11.08 8.2 c 11.08 9.791 9.79 11.08 8.2 11.08 c f 22.6 11.08 m 21.009 11.08 19.72 9.791 19.72 8.2 c 19.72 6.61 21.009 5.32 22.6 5.32 c 24.19 5.32 25.48 6.61 25.48 8.2 c 25.48 9.791 24.19 11.08 22.6 11.08 c f 8.2 25.48 m 6.609 25.48 5.32 24.191 5.32 22.6 c 5.32 21.01 6.609 19.72 8.2 19.72 c 9.79 19.72 11.08 21.01 11.08 22.6 c 11.08 24.191 9.79 25.48 8.2 25.48 c f 22.6 25.48 m 21.009 25.48 19.72 24.191 19.72 22.6 c 19.72 21.01 21.009 19.72 22.6 19.72 c 24.19 19.72 25.48 21.01 25.48 22.6 c 25.48 24.191 24.19 25.48 22.6 25.48 c f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Random circles) (Random circles) 4.365 3.849 51.13 57.85 [ %AI3_Tile (0 O 0 R 0 0.1125 0.45 0 k 0 0.1125 0.45 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 4.365 3.849 m 4.365 57.85 L 51.13 57.85 L 51.13 3.849 L 4.365 3.849 L f %AI6_EndPatternLayer ) & (0 O 0 R 0.4 0.7 1 0 k 0.4 0.7 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 45.429 36.274 m 45.843 36.991 45.598 37.908 44.88 38.323 c 44.163 38.737 43.245 38.491 42.831 37.774 c 42.417 37.056 42.663 36.139 43.38 35.725 c 44.098 35.31 45.015 35.556 45.429 36.274 c s 44.179 27.926 m 43.765 28.643 42.848 28.889 42.13 28.475 c 41.413 28.06 41.167 27.143 41.581 26.425 c 41.995 25.708 42.913 25.462 43.63 25.876 c 44.348 26.291 44.593 27.208 44.179 27.926 c s 35.929 41.024 m 35.515 41.741 34.598 41.987 33.88 41.573 c 33.163 41.158 32.917 40.241 33.331 39.524 c 33.745 38.806 34.663 38.56 35.38 38.975 c 36.098 39.389 36.343 40.306 35.929 41.024 c s 28.38 34.225 m 28.794 34.942 28.549 35.859 27.831 36.274 c 27.114 36.688 26.196 36.442 25.782 35.725 c 25.368 35.007 25.614 34.09 26.331 33.675 c 27.049 33.261 27.966 33.507 28.38 34.225 c s 31.179 28.024 m 30.765 28.741 29.848 28.987 29.13 28.573 c 28.413 28.158 28.167 27.241 28.581 26.524 c 28.995 25.806 29.913 25.56 30.63 25.975 c 31.348 26.389 31.593 27.306 31.179 28.024 c s 36.792 23.349 m 35.963 23.349 35.292 22.678 35.292 21.849 c 35.292 21.021 35.963 20.349 36.792 20.349 c 37.62 20.349 38.292 21.021 38.292 21.849 c 38.292 22.678 37.62 23.349 36.792 23.349 c s 10.888 34.175 m 10.474 34.893 10.72 35.81 11.437 36.225 c 12.155 36.639 13.072 36.393 13.486 35.675 c 13.901 34.958 13.655 34.041 12.937 33.626 c 12.22 33.212 11.303 33.458 10.888 34.175 c s 11.517 26.601 m 11.931 27.318 12.848 27.564 13.566 27.15 c 14.283 26.735 14.529 25.818 14.115 25.1 c 13.701 24.383 12.783 24.137 12.066 24.551 c 11.348 24.966 11.103 25.883 11.517 26.601 c s 16.782 41.426 m 17.196 42.143 18.114 42.389 18.831 41.975 c 19.549 41.56 19.794 40.643 19.38 39.926 c 18.966 39.208 18.049 38.962 17.331 39.377 c 16.614 39.791 16.368 40.708 16.782 41.426 c s 22.365 24.35 m 23.194 24.35 23.865 23.678 23.865 22.85 c 23.865 22.021 23.194 21.35 22.365 21.35 c 21.537 21.35 20.865 22.021 20.865 22.85 c 20.865 23.678 21.537 24.35 22.365 24.35 c s 45.385 7.849 m 44.971 7.132 44.053 6.886 43.336 7.3 c 42.619 7.714 42.373 8.632 42.787 9.349 c 43.201 10.067 44.119 10.312 44.836 9.898 c 45.553 9.484 45.799 8.567 45.385 7.849 c s 29.679 7.774 m 29.265 7.056 28.348 6.81 27.63 7.225 c 26.913 7.639 26.667 8.556 27.081 9.274 c 27.495 9.991 28.413 10.237 29.13 9.823 c 29.848 9.408 30.093 8.491 29.679 7.774 c s 35.542 11.349 m 34.713 11.349 34.042 12.021 34.042 12.849 c 34.042 13.678 34.713 14.349 35.542 14.349 c 36.37 14.349 37.042 13.678 37.042 12.849 c 37.042 12.021 36.37 11.349 35.542 11.349 c s 10.13 7.475 m 10.544 6.757 11.462 6.511 12.179 6.926 c 12.897 7.34 13.142 8.257 12.728 8.975 c 12.314 9.692 11.397 9.938 10.679 9.524 c 9.962 9.109 9.716 8.192 10.13 7.475 c s 20.203 13.349 m 21.031 13.349 21.703 14.021 21.703 14.849 c 21.703 15.678 21.031 16.349 20.203 16.349 c 19.375 16.349 18.703 15.678 18.703 14.849 c 18.703 14.021 19.375 13.349 20.203 13.349 c s 44.635 54.1 m 45.049 53.382 44.803 52.465 44.086 52.051 c 43.369 51.636 42.451 51.882 42.037 52.6 c 41.623 53.317 41.869 54.234 42.586 54.649 c 43.303 55.063 44.221 54.817 44.635 54.1 c s 36.841 48.1 m 36.427 47.382 35.509 47.136 34.792 47.551 c 34.074 47.965 33.828 48.882 34.243 49.6 c 34.657 50.317 35.574 50.563 36.292 50.149 c 37.009 49.734 37.255 48.817 36.841 48.1 c s 29.728 54.725 m 30.143 54.007 29.897 53.09 29.179 52.675 c 28.462 52.261 27.544 52.507 27.13 53.225 c 26.716 53.942 26.962 54.859 27.679 55.274 c 28.397 55.688 29.314 55.442 29.728 54.725 c s 10.86 54.1 m 10.446 53.382 10.691 52.465 11.409 52.051 c 12.126 51.636 13.044 51.882 13.458 52.6 c 13.872 53.317 13.626 54.234 12.909 54.649 c 12.191 55.063 11.274 54.817 10.86 54.1 c s 19.154 49.1 m 19.568 48.382 20.486 48.136 21.203 48.551 c 21.92 48.965 22.166 49.882 21.752 50.6 c 21.338 51.317 20.42 51.563 19.703 51.149 c 18.986 50.734 18.74 49.817 19.154 49.1 c s 51.88 38.85 m 51.052 38.85 50.38 39.521 50.38 40.35 c 50.38 41.178 51.052 41.85 51.88 41.85 c 52.709 41.85 53.38 41.178 53.38 40.35 c 53.38 39.521 52.709 38.85 51.88 38.85 c s 51.865 11.349 m 52.693 11.349 53.365 12.021 53.365 12.849 c 53.365 13.678 52.693 14.349 51.865 14.349 c 51.036 14.349 50.365 13.678 50.365 12.849 c 50.365 12.021 51.036 11.349 51.865 11.349 c s 30.179 18.524 m 29.765 19.241 28.848 19.487 28.13 19.073 c 27.413 18.658 27.167 17.741 27.581 17.024 c 27.995 16.306 28.913 16.06 29.63 16.475 c 30.348 16.889 30.593 17.806 30.179 18.524 c s 21.679 31.524 m 21.265 32.241 20.348 32.487 19.63 32.073 c 18.913 31.658 18.667 30.741 19.081 30.024 c 19.495 29.306 20.413 29.06 21.13 29.475 c 21.848 29.889 22.093 30.806 21.679 31.524 c s 37.914 33.399 m 37.5 34.116 36.583 34.362 35.865 33.948 c 35.148 33.533 34.902 32.616 35.316 31.899 c 35.73 31.181 36.648 30.935 37.365 31.35 c 38.083 31.764 38.328 32.681 37.914 33.399 c s 28.929 45.024 m 28.515 45.741 27.598 45.987 26.88 45.573 c 26.163 45.158 25.917 44.241 26.331 43.524 c 26.745 42.806 27.663 42.56 28.38 42.975 c 29.098 43.389 29.343 44.306 28.929 45.024 c s 12.429 45.524 m 12.015 46.241 11.098 46.487 10.38 46.073 c 9.663 45.658 9.417 44.741 9.831 44.024 c 10.245 43.306 11.163 43.06 11.88 43.475 c 12.598 43.889 12.843 44.806 12.429 45.524 c s 44.49 45.6 m 44.075 46.317 43.158 46.563 42.441 46.149 c 41.723 45.734 41.477 44.817 41.891 44.1 c 42.306 43.382 43.223 43.136 43.941 43.55 c 44.658 43.965 44.904 44.882 44.49 45.6 c s 12.679 18.524 m 12.265 19.241 11.348 19.487 10.63 19.073 c 9.913 18.658 9.667 17.741 10.081 17.024 c 10.495 16.306 11.413 16.06 12.13 16.475 c 12.848 16.889 13.093 17.806 12.679 18.524 c s 21.179 5.774 m 20.765 6.491 19.848 6.737 19.13 6.323 c 18.413 5.908 18.167 4.991 18.581 4.274 c 18.995 3.557 19.913 3.311 20.63 3.725 c 21.348 4.139 21.593 5.056 21.179 5.774 c s 38.929 5.274 m 38.515 5.991 37.598 6.237 36.88 5.823 c 36.163 5.408 35.917 4.491 36.331 3.774 c 36.745 3.057 37.663 2.811 38.38 3.225 c 39.098 3.639 39.343 4.556 38.929 5.274 c s 43.865 18.1 m 44.694 18.1 45.365 17.429 45.365 16.6 c 45.365 15.772 44.694 15.1 43.865 15.1 c 43.037 15.1 42.365 15.772 42.365 16.6 c 42.365 17.429 43.037 18.1 43.865 18.1 c s 51.13 4.6 m 50.302 4.6 49.63 3.928 49.63 3.1 c 49.63 2.272 50.302 1.6 51.13 1.6 c 51.959 1.6 52.63 2.272 52.63 3.1 c 52.63 3.928 51.959 4.6 51.13 4.6 c s 52.163 31.649 m 51.748 32.366 50.831 32.612 50.114 32.198 c 49.396 31.783 49.15 30.866 49.565 30.149 c 49.979 29.431 50.896 29.185 51.614 29.6 c 52.331 30.014 52.577 30.931 52.163 31.649 c s 51.85 51.35 m 51.021 51.35 50.35 50.678 50.35 49.85 c 50.35 49.021 51.021 48.35 51.85 48.35 c 52.678 48.35 53.35 49.021 53.35 49.85 c 53.35 50.678 52.678 51.35 51.85 51.35 c s 49.85 23.1 m 50.679 23.1 51.35 22.428 51.35 21.6 c 51.35 20.771 50.679 20.1 49.85 20.1 c 49.022 20.1 48.35 20.771 48.35 21.6 c 48.35 22.428 49.022 23.1 49.85 23.1 c s 5.13 38.85 m 4.302 38.85 3.63 39.521 3.63 40.35 c 3.63 41.178 4.302 41.85 5.13 41.85 c 5.959 41.85 6.63 41.178 6.63 40.35 c 6.63 39.521 5.959 38.85 5.13 38.85 c s 5.115 11.349 m 5.943 11.349 6.615 12.021 6.615 12.849 c 6.615 13.678 5.943 14.349 5.115 14.349 c 4.286 14.349 3.615 13.678 3.615 12.849 c 3.615 12.021 4.286 11.349 5.115 11.349 c s 4.38 4.6 m 3.552 4.6 2.88 3.928 2.88 3.1 c 2.88 2.272 3.552 1.6 4.38 1.6 c 5.209 1.6 5.88 2.272 5.88 3.1 c 5.88 3.928 5.209 4.6 4.38 4.6 c s 5.413 31.649 m 4.998 32.366 4.081 32.612 3.364 32.198 c 2.646 31.783 2.4 30.866 2.815 30.149 c 3.229 29.431 4.146 29.185 4.864 29.6 c 5.581 30.014 5.827 30.931 5.413 31.649 c s 5.1 51.35 m 4.271 51.35 3.6 50.678 3.6 49.85 c 3.6 49.021 4.271 48.35 5.1 48.35 c 5.928 48.35 6.6 49.021 6.6 49.85 c 6.6 50.678 5.928 51.35 5.1 51.35 c s 3.1 23.1 m 3.929 23.1 4.6 22.428 4.6 21.6 c 4.6 20.771 3.929 20.1 3.1 20.1 c 2.272 20.1 1.6 20.771 1.6 21.6 c 1.6 22.428 2.272 23.1 3.1 23.1 c s 21.194 59.775 m 20.78 60.492 19.863 60.738 19.145 60.324 c 18.428 59.909 18.182 58.992 18.596 58.275 c 19.01 57.558 19.928 57.312 20.645 57.726 c 21.363 58.14 21.608 59.057 21.194 59.775 c s 38.944 59.275 m 38.53 59.992 37.613 60.238 36.895 59.824 c 36.178 59.409 35.932 58.492 36.346 57.775 c 36.76 57.058 37.678 56.812 38.395 57.226 c 39.113 57.64 39.358 58.557 38.944 59.275 c s 51.145 58.601 m 50.317 58.601 49.645 57.929 49.645 57.101 c 49.645 56.273 50.317 55.601 51.145 55.601 c 51.974 55.601 52.645 56.273 52.645 57.101 c 52.645 57.929 51.974 58.601 51.145 58.601 c s 4.395 58.601 m 3.567 58.601 2.895 57.929 2.895 57.101 c 2.895 56.273 3.567 55.601 4.395 55.601 c 5.224 55.601 5.895 56.273 5.895 57.101 c 5.895 57.929 5.224 58.601 4.395 58.601 c s %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Rope.side) (Rope.side) 1 4.6 60.9998 33.3999 [ %AI3_Tile (0 O 0 R 0 0 0 1 k 0 0 0 1 K ) @ ( %AI6_BeginPatternLayer 800 Ar 1 J 1 j 0.6 w 4 M []0 d %AI3_Note: 0 D 0 XR 24.9999 7 m 15.6521 4.663 8.125 8.6981 1 14.1407 C S 36.9999 7 m 22.3477 3.337 12.168 15.3276 1 23.859 C S 48.9999 7 m 29.3464 2.0866 17.7386 25.3332 1 30.6213 C S 1 30.9999 m 24.9999 36.9999 36.9999 1 60.9998 7 C S 13 30.9999 m 32.6534 35.9133 44.2611 12.6667 60.9998 7.3786 C S 24.9999 30.9999 m 39.652 34.6629 49.8317 22.6722 60.9998 14.1407 C S 36.9999 30.9999 m 46.3476 33.3369 53.8749 29.3018 60.9998 23.859 C S 48.9999 30.9999 m 53.3464 32.0865 57.2978 31.7908 60.9998 30.6213 C S 13 7 m 8.6535 5.9134 4.7019 6.2091 1 7.3786 C S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Scales) (Scales) 1.6 9.3475 48.088 55.8355 [ %AI3_Tile (0 O 0 R 1 g 1 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 1.6 9.3475 m 1.6 55.8355 L 48.088 55.8355 L 48.088 9.3475 L 1.6 9.3475 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 g 0 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 17.0956 9.3475 m 12.8162 9.3475 9.3475 5.8787 9.3475 1.6 C 9.3475 5.8787 5.8787 9.3475 1.6 9.3475 C 1.6 13.6262 5.0687 17.095 9.3475 17.095 c 13.6268 17.095 17.0956 13.6262 17.0956 9.3475 C s 32.5918 9.3475 m 28.3125 9.3475 24.8437 5.8787 24.8437 1.6 C 24.8437 5.8787 21.3743 9.3475 17.0956 9.3475 C 17.0956 13.6262 20.5644 17.095 24.8437 17.095 c 29.1224 17.095 32.5918 13.6262 32.5918 9.3475 C s 48.088 9.3475 m 43.8087 9.3475 40.3399 5.8787 40.3399 1.6 C 40.3399 5.8787 36.8705 9.3475 32.5918 9.3475 C 32.5918 13.6262 36.0606 17.095 40.3399 17.095 c 44.6186 17.095 48.088 13.6262 48.088 9.3475 C s 17.0956 40.3393 m 12.8162 40.3393 9.3475 36.8699 9.3475 32.5912 C 9.3475 36.8699 5.8787 40.3393 1.6 40.3393 C 1.6 44.6181 5.0687 48.0874 9.3475 48.0874 c 13.6268 48.0874 17.0956 44.6181 17.0956 40.3393 C s 17.0956 24.8431 m 12.8162 24.8431 9.3475 21.3743 9.3475 17.095 C 9.3475 21.3743 5.8787 24.8431 1.6 24.8431 C 1.6 29.1218 5.0687 32.5912 9.3475 32.5912 c 13.6268 32.5912 17.0956 29.1218 17.0956 24.8431 C s 32.5918 24.8431 m 28.3125 24.8431 24.8437 21.3743 24.8437 17.095 C 24.8437 21.3743 21.3743 24.8431 17.0956 24.8431 C 17.0956 29.1218 20.5644 32.5912 24.8437 32.5912 c 29.1224 32.5912 32.5918 29.1218 32.5918 24.8431 C s 48.088 24.8431 m 43.8087 24.8431 40.3399 21.3743 40.3399 17.095 C 40.3399 21.3743 36.8705 24.8431 32.5918 24.8431 C 32.5918 29.1218 36.0606 32.5912 40.3399 32.5912 c 44.6186 32.5912 48.088 29.1218 48.088 24.8431 C s 32.5918 40.3393 m 28.3125 40.3393 24.8437 36.8699 24.8437 32.5912 C 24.8437 36.8699 21.3743 40.3393 17.0956 40.3393 C 17.0956 44.6181 20.5644 48.0874 24.8437 48.0874 c 29.1224 48.0874 32.5918 44.6181 32.5918 40.3393 C s 48.088 40.3393 m 43.8087 40.3393 40.3399 36.8699 40.3399 32.5912 C 40.3399 36.8699 36.8705 40.3393 32.5918 40.3393 C 32.5918 44.6181 36.0606 48.0874 40.3399 48.0874 c 44.6186 48.0874 48.088 44.6181 48.088 40.3393 C s 17.0956 55.8355 m 12.8162 55.8355 9.3475 52.3662 9.3475 48.0874 C 9.3475 52.3662 5.8787 55.8355 1.6 55.8355 C 1.6 60.1143 5.0687 63.5836 9.3475 63.5836 c 13.6268 63.5836 17.0956 60.1143 17.0956 55.8355 C s 32.5918 55.8355 m 28.3125 55.8355 24.8437 52.3662 24.8437 48.0874 C 24.8437 52.3662 21.3743 55.8355 17.0956 55.8355 C 17.0956 60.1143 20.5644 63.5836 24.8437 63.5836 c 29.1224 63.5836 32.5918 60.1143 32.5918 55.8355 C s 48.088 55.8355 m 43.8087 55.8355 40.3399 52.3662 40.3399 48.0874 C 40.3399 52.3662 36.8705 55.8355 32.5918 55.8355 C 32.5918 60.1143 36.0606 63.5836 40.3399 63.5836 c 44.6186 63.5836 48.088 60.1143 48.088 55.8355 C s %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (SolidStar.side) (SolidStar.side) 1 1 33.0117 33.0117 [ %AI3_Tile (0 O 0 R 0.05 0.2 0.95 0 k 0.05 0.2 0.95 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 1 D 0 XR 7.9689 26.0458 m 14.5331 22.9874 l 17.0095 29.7904 L 19.4859 22.9874 l 26.0473 26.0458 l 22.9889 19.4815 l 29.792 17.0052 l 22.9889 14.5288 l 26.0473 7.9674 l 19.4859 11.0257 l 17.0095 4.2226 l 14.5305 11.0257 l 7.9689 7.9674 l 11.0273 14.5288 l 4.2242 17.0052 l 11.0273 19.4843 L 7.9689 26.0458 l f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Stars) (Stars) 1 1 63.384 84.766 [ %AI3_Tile (0 O 0 R 1 0.9 0.1 0 k 1 0.9 0.1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 1 1 m 1 84.766 L 63.384 84.766 L 63.384 1 L 1 1 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.25 1 0 k 0 0.25 1 0 K ) @ ( %AI6_BeginPatternLayer *u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 37.668 67.113 m 43.924 62.567 L 41.535 55.213 L 47.791 59.757 L 54.046 55.212 L 51.657 62.566 L 57.914 67.112 L 50.18 67.112 L 47.791 74.467 L 45.402 67.113 L 37.668 67.113 L f 16.596 59.757 m 22.851 55.212 L 20.462 62.566 L 26.719 67.112 L 18.985 67.112 L 16.596 74.467 L 14.207 67.113 L 6.473 67.113 L 12.729 62.567 L 10.34 55.213 L 16.596 59.757 L f 20.462 20.683 m 26.719 25.229 L 18.985 25.229 L 16.596 32.584 L 14.207 25.23 L 6.473 25.23 L 12.729 20.684 L 10.34 13.33 L 16.596 17.874 L 22.851 13.329 L 20.462 20.683 L f 38.447 34.271 m 36.058 41.625 L 42.315 46.171 L 34.581 46.171 L 32.192 53.526 L 29.803 46.172 L 22.069 46.172 L 28.325 41.626 L 25.936 34.272 L 32.192 38.816 L 38.447 34.271 L f 51.657 20.683 m 57.914 25.229 L 50.18 25.229 L 47.791 32.584 L 45.402 25.23 L 37.668 25.23 L 43.924 20.684 L 41.535 13.33 L 47.791 17.874 L 54.046 13.329 L 51.657 20.683 L f *U 1 XR 34.581 4.288 m 32.192 11.643 L 29.803 4.289 L 22.069 4.289 L 26.5962 1 L 37.7885 1 L 42.315 4.288 L 34.581 4.288 L f 53.261 4.289 m 57.7882 1 L 63.384 1 L 63.384 11.643 L 60.995 4.289 L 53.261 4.289 L f 4.866 41.625 m 11.123 46.171 L 3.389 46.171 L 1 53.526 L 1 38.816 L 7.255 34.271 L 4.866 41.625 L f 36.058 41.625 m 42.315 46.171 L 34.581 46.171 L 32.192 53.526 L 29.803 46.172 L 22.069 46.172 L 28.325 41.626 L 25.936 34.272 L 32.192 38.816 L 38.447 34.271 L 36.058 41.625 L f 53.261 46.172 m 59.517 41.626 L 57.128 34.272 L 63.384 38.816 L 63.384 53.526 L 60.995 46.172 L 53.261 46.172 L f 4.866 83.508 m 6.5974 84.766 L 1 84.766 L 1 80.699 L 7.255 76.154 L 4.866 83.508 L f 25.936 76.155 m 32.192 80.699 L 38.447 76.154 L 36.058 83.508 L 37.7895 84.766 L 26.5951 84.766 L 28.325 83.509 L 25.936 76.155 L f 22.851 55.212 m 20.462 62.566 L 26.719 67.112 L 18.985 67.112 L 16.596 74.467 L 14.207 67.113 L 6.473 67.113 L 12.729 62.567 L 10.34 55.213 L 16.596 59.757 L 22.851 55.212 L f 41.535 55.213 m 47.791 59.757 L 54.046 55.212 L 51.657 62.566 L 57.914 67.112 L 50.18 67.112 L 47.791 74.467 L 45.402 67.113 L 37.668 67.113 L 43.924 62.567 L 41.535 55.213 L f 50.18 25.229 m 47.791 32.584 L 45.402 25.23 L 37.668 25.23 L 43.924 20.684 L 41.535 13.33 L 47.791 17.874 L 54.046 13.329 L 51.657 20.683 L 57.914 25.229 L 50.18 25.229 L f 18.985 25.229 m 16.596 32.584 L 14.207 25.23 L 6.473 25.23 L 12.729 20.684 L 10.34 13.33 L 16.596 17.874 L 22.851 13.329 L 20.462 20.683 L 26.719 25.229 L 18.985 25.229 L f 3.388 4.289 m 1 11.643 L 1 1 L 6.5948 1 L 11.122 4.289 L 3.388 4.289 L f 57.128 76.154 m 63.384 80.699 L 63.384 84.766 L 57.7855 84.766 L 59.517 83.508 L 57.128 76.154 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Stripes) (Stripes) 8.45 4.6001 80.45 76.6001 [ %AI3_Tile (0 O 0 R 1 0.07 1 0 k 1 0.07 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 3.6 w 4 M []0 d %AI3_Note: 0 D 0 XR 8.2 8.2 m 80.7 8.2 L S 8.2 22.6001 m 80.7 22.6001 L S 8.2 37.0002 m 80.7 37.0002 L S 8.2 51.4 m 80.7 51.4 L S 8.2 65.8001 m 80.7 65.8001 L S 8.2 15.4 m 80.7 15.4 L S 8.2 29.8001 m 80.7 29.8001 L S 8.2 44.2 m 80.7 44.2 L S 8.2 58.6001 m 80.7 58.6001 L S 8.2 73.0002 m 80.7 73.0002 L S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (TriBevel.outer) (TriBevel.outer) 1 1.0004 31.6124 31.6127 [ %AI3_Tile (0 O 0 R 0 0 0 0.3 k 0 0 0 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 31.6118 5.4917 m 27.1221 5.4917 L 27.1205 1.0011 L 27.8031 1.0011 L 27.8031 4.8091 L 31.6118 4.8091 L 31.6118 5.4917 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.2 k 0 0 0 0.2 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 31.6149 9.5062 m 23.1111 9.5062 L 23.1111 1.0015 L 27.1205 1.0015 L 27.1205 5.493 L 31.6144 5.493 L 31.6149 9.5062 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.4 k 0 0 0 0.4 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 31.6124 10.485 m 22.1297 10.485 L 22.1292 1.0015 L 23.1084 1.0015 L 23.1084 9.5049 L 31.6124 9.5049 L 31.6124 10.485 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.3 k 0 0 0 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 31.6129 17.2066 m 15.4064 17.2085 L 15.4064 1 L 22.1301 1 L 22.1301 10.4868 L 31.6129 10.4868 L 31.6129 17.2066 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.5 k 0 0 0 0.5 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 31.6149 18.3658 m 14.2517 18.3658 L 14.2515 1.0009 L 15.4043 1.0009 L 15.4043 17.2093 L 31.6149 17.2093 L 31.6149 18.3658 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.4 k 0 0 0 0.4 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 31.6124 30.4755 m 2.1395 30.4755 L 2.1395 1.0015 L 14.249 1 L 14.249 18.366 L 31.6149 18.366 L 31.6124 30.4755 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.6 k 0 0 0 0.6 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 15.4066 16.847 m 14.2778 18.3257 l 15.4066 17.2057 l 15.4066 16.847 l f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.5 k 0 0 0 0.5 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 23.1095 9.1906 m 22.1759 10.4392 l 23.1082 9.505 l 23.1095 9.1906 l f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.4 k 0 0 0 0.4 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 27.8039 4.6026 m 27.1619 5.4533 l 27.8029 4.8093 l 27.8039 4.6026 l f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (TriBevel.side) (TriBevel.side) 1.0006 1 29.0006 31.6124 [ %AI3_Tile (0 O 0 R 0 0 0 0.3 k 0 0 0 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 29 4.8087 m 29 4.8087 L 29.0026 5.4927 L 1.0026 5.4927 L 1 4.8087 L 1 4.8087 L 29 4.8087 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.2 k 0 0 0 0.2 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 29.0026 5.4927 m 29.0005 9.5045 L 1.0005 9.5045 L 1.0026 5.4927 L 29.0026 5.4927 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.4 k 0 0 0 0.4 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 29.0005 9.5045 m 29.0011 10.4865 L 1.0011 10.4865 L 1.0005 9.5045 L 29.0005 9.5045 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.3 k 0 0 0 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 29.0011 10.4865 m 29.003 17.209 L 1.003 17.209 L 1.0011 10.4865 L 29.0011 10.4865 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.5 k 0 0 0 0.5 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 29.003 17.209 m 29.0031 18.3656 L 1.0031 18.3656 L 1.003 17.209 L 29.003 17.209 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.4 k 0 0 0 0.4 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 29.0031 18.3656 m 29.0006 30.4752 L 1.0006 30.4752 L 1.0031 18.3656 L 29.0031 18.3656 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Waves-scroll) (Waves-scroll) 17.926 10.516 68.663 69.012 [ %AI3_Tile (0 O 0 R 1 0 0.3 0 k 1 0 0.3 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 1 D 0 XR 17.926 69.012 m 17.926 10.516 L 68.663 10.516 L 68.663 69.012 L 17.926 69.012 L f %AI6_EndPatternLayer ) & (0 O 0 R 0.55 0 0 0 k 0.55 0 0 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.75 w 4 M []0 d %AI3_Note: 0 D 0 XR 65.335 70.465 m 65.881 68.746 67.444 68.168 68.663 69.012 C 67.538 69.668 68.011 71.255 69.686 70.933 c 72.124 70.464 71.894 67.213 70.53 65.589 c 68.561 63.245 64.565 60.995 53.241 71.117 C S 39.964 70.465 m 40.511 68.746 42.074 68.168 43.293 69.012 C 42.168 69.668 42.64 71.255 44.316 70.933 c 46.753 70.464 46.524 67.213 45.16 65.589 c 43.191 63.245 39.195 60.995 27.87 71.117 c S 14.594 70.465 m 15.141 68.746 16.704 68.168 17.923 69.012 C 16.798 69.668 17.27 71.255 18.945 70.933 c 21.382 70.464 21.153 67.213 19.789 65.589 c 17.821 63.245 13.825 60.995 2.5 71.117 c S 10.959 51.619 m 22.282 41.497 26.278 43.747 28.247 46.09 c 29.611 47.715 29.841 50.965 27.403 51.434 c 25.728 51.757 25.255 50.169 26.38 49.513 C 25.161 48.669 23.599 49.248 23.052 50.966 c 22.723 51.997 23.38 53.966 24.872 54.903 c 27.267 56.406 31.371 56.05 36.328 51.619 c 47.653 41.497 51.649 43.746 53.618 46.09 c 54.982 47.715 55.212 50.965 52.774 51.434 c 51.099 51.757 50.626 50.169 51.751 49.513 C 50.532 48.669 48.97 49.248 48.423 50.966 c 48.094 51.997 48.751 53.966 50.243 54.903 c 52.638 56.406 56.742 56.05 61.699 51.619 C 73.024 41.497 77.02 43.747 78.988 46.09 c S 70.156 32.12 m 65.199 36.551 61.095 36.907 58.7 35.404 c 57.208 34.468 56.552 32.499 56.88 31.468 c 57.427 29.749 58.99 29.171 60.208 30.015 C 59.083 30.671 59.556 32.258 61.231 31.936 c 63.669 31.467 63.439 28.216 62.075 26.592 c 60.106 24.248 56.11 21.998 44.786 32.12 C 39.829 36.551 35.725 36.907 33.33 35.404 c 31.838 34.468 31.182 32.499 31.51 31.468 c 32.056 29.749 33.619 29.171 34.838 30.015 C 33.713 30.671 34.186 32.258 35.861 31.936 c 38.299 31.467 38.069 28.216 36.705 26.592 c 34.737 24.248 30.74 21.998 19.415 32.12 c 14.458 36.551 10.354 36.907 7.96 35.404 c S 19.792 7.094 m 21.157 8.719 21.386 11.968 18.949 12.437 c 17.274 12.76 16.801 11.172 17.926 10.516 C 16.708 9.673 15.145 10.252 14.598 11.969 c 14.27 13 14.926 14.969 16.418 15.906 c 18.812 17.409 22.916 17.053 27.874 12.622 c 39.199 2.5 43.195 4.75 45.163 7.094 c 46.528 8.719 46.757 11.968 44.32 12.437 c 42.644 12.76 42.172 11.172 43.297 10.516 C 42.078 9.673 40.515 10.252 39.968 11.969 c 39.64 13 40.297 14.969 41.788 15.906 c 44.183 17.409 48.287 17.053 53.245 12.622 C 64.569 2.5 68.565 4.75 70.534 7.094 c 71.898 8.719 72.127 11.968 69.69 12.437 c 68.014 12.76 67.542 11.172 68.667 10.516 C 67.448 9.673 65.885 10.252 65.338 11.969 c 65.011 13 65.667 14.969 67.159 15.906 c 69.553 17.409 73.657 17.053 78.615 12.622 c S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Yellow Stripe) (Yellow Stripe) 8.4499 4.6 80.4499 76.6 [ %AI3_Tile (0 O 0 R 0 0.4 1 0 k 0 0.4 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 3.6 w 4 M []0 d %AI3_Note: 0 D 0 XR 8.1999 8.1999 m 80.6999 8.1999 L S 8.1999 22.6 m 80.6999 22.6 L S 8.1999 37.0001 m 80.6999 37.0001 L S 8.1999 51.3999 m 80.6999 51.3999 L S 8.1999 65.8 m 80.6999 65.8 L S 8.1999 15.3999 m 80.6999 15.3999 L S 8.1999 29.8 m 80.6999 29.8 L S 8.1999 44.1999 m 80.6999 44.1999 L S 8.1999 58.6 m 80.6999 58.6 L S 8.1999 73.0001 m 80.6999 73.0001 L S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI5_End_NonPrinting-- %AI5_Begin_NonPrinting Np 13 Bn %AI5_BeginGradient: (Black & White) (Black & White) 0 2 Bd [ 0 0 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 1 %_Br [ 0 0 50 100 %_Bs 1 0 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Black, White) (Black, White) 0 2 Bd [ 0 0 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 1 %_Br [ 0 0 50 100 %_Bs 1 0 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Chrome) (Chrome) 0 6 Bd [ 0 < 464646454545444444444343434342424241414141404040403F3F3F3E3E3E3E3D3D3D3C3C3C3C3B 3B3B3B3A3A3A39393939383838383737373636363635353535343434333333333232323131313130 3030302F2F2F2E2E2E2E2D2D2D2D2C2C2C2B2B2B2B2A2A2A2A292929282828282727272726262625 2525252424242323232322222222212121202020201F1F1F1F1E1E1E1D1D1D1D1C1C1C1C1B1B1B1A 1A1A1A1919191818181817171717161616151515151414141413131312121212111111101010100F 0F0F0F0E0E0E0D0D0D0D0C0C0C0C0B0B0B0A0A0A0A09090909080808070707070606060505050504 04040403030302020202010101010000 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < 1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A 1A1A1A19191919191919191818181818181818181717171717171717161616161616161615151515 15151515151414141414141414131313131313131312121212121212121211111111111111111010 1010101010100F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C 0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A090909090909090909080808080808080807070707070707 07060606060606060606050505050505050504040404040404040303030303030303030202020202 02020201010101010101010000000000 > 1 %_Br 0 0.275 1 < 6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544 434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F > 1 %_Br 0 < 00000101010102020202030303040404040505050506060607070707080808090909090A0A0A0A0B 0B0B0C0C0C0C0D0D0D0D0E0E0E0F0F0F0F1010101011111112121212131313141414141515151516 161617171717181818181919191A1A1A1A1B1B1B1B1C1C1C1D1D1D1D1E1E1E1F1F1F1F2020202021 212122222222232323232424242525252526262626272727282828282929292A2A2A2A2B2B2B2B2C 2C2C2D2D2D2D2E2E2E2E2F2F2F303030303131313132323233333333343434353535353636363637 373738383838393939393A3A3A3B3B3B3B3C3C3C3C3D3D3D3E3E3E3E3F3F3F404040404141414142 42424343434344444444454545464646 > < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 00000101020203030304040505050606070708080809090A0A0A0B0B0C0C0D0D0D0E0E0F0F101010 1111121212131314141515151616171718181819191A1A1A1B1B1C1C1D1D1D1E1E1F1F1F20202121 222222232324242525252626272727282829292A2A2A2B2B2C2C2D2D2D2E2E2F2F2F303031313232 32333334343435353636373737383839393A3A3A3B3B3C3C3C3D3D3E3E3F3F3F4040414142424243 434444444545464647474748484949494A4A4B4B4C4C4C4D4D4E4E4F4F4F50505151515252535354 54545555565657575758585959595A5A5B5B5C5C5C5D5D5E5E5F5F5F606061616162626363646464 6565666666676768686969696A6A6B6B > 1 %_Br 0 0 0 0 1 %_Br < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < 4D4C4C4C4B4B4B4A4A4A4A4949494848484747474746464645454544444444434343424242414141 414040403F3F3F3E3E3E3E3D3D3D3C3C3C3B3B3B3B3A3A3A39393938383838373737363636353535 35343434333333323232323131313030302F2F2F2F2E2E2E2D2D2D2C2C2C2C2B2B2B2A2A2A292929 292828282727272626262625252524242423232323222222212121202020201F1F1F1E1E1E1D1D1D 1D1C1C1C1B1B1B1A1A1A1A1919191818181717171716161615151514141414131313121212111111 111010100F0F0F0E0E0E0E0D0D0D0C0C0C0B0B0B0B0A0A0A09090908080808070707060606050505 05040404030303020202020101010000 > 0 0 1 %_Br [ 1 0 50 92 %_Bs 0 0.275 1 0.12 1 50 59 %_Bs 0 0.275 1 0.42 1 50 50 %_Bs 1 0 50 49 %_Bs 1 0 50 41 %_Bs 1 0.3 0 0 1 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Green, Blue) (Green, Blue) 0 2 Bd [ < 99999A9A9B9B9B9C9C9D9D9D9E9E9F9F9FA0A0A1A1A1A2A2A3A3A3A4A4A5A5A5A6A6A7A7A7A8A8A9 A9A9AAAAABABABACACADADADAEAEAFAFAFB0B0B1B1B1B2B2B3B3B3B4B4B5B5B5B6B6B7B7B7B8B8B9 B9B9BABABBBBBBBCBCBDBDBDBEBEBFBFBFC0C0C1C1C1C2C2C3C3C3C4C4C5C5C5C6C6C7C7C7C8C8C9 C9C9CACACBCBCBCCCCCDCDCDCECECFCFCFD0D0D1D1D1D2D2D3D3D3D4D4D5D5D5D6D6D7D7D7D8D8D9 D9D9DADADBDBDBDCDCDDDDDDDEDEDFDFDFE0E0E1E1E1E2E2E3E3E3E4E4E5E5E5E6E6E7E7E7E8E8E9 E9E9EAEAEBEBEBECECEDEDEDEEEEEFEFEFF0F0F1F1F1F2F2F3F3F3F4F4F5F5F5F6F6F7F7F7F8F8F9 F9F9FAFAFBFBFBFCFCFDFDFDFEFEFFFF > < 000102020304050506070808090A0B0B0C0D0E0E0F101111121314141516171718191A1A1B1C1D1D 1E1F20202122232324252626272829292A2B2C2C2D2E2F2F303132323334353536373838393A3B3B 3C3D3E3E3F404141424344444546474748494A4A4B4C4D4D4E4F5050515253535455565657585959 5A5B5C5C5D5E5F5F606162626364656566676868696A6B6B6C6D6E6E6F7071717273747475767777 78797A7A7B7C7D7D7E7F80808182828384858586878888898A8B8B8C8D8E8E8F9091919293949495 96979798999A9A9B9C9D9D9E9FA0A0A1A2A3A3A4A5A6A6A7A8A9A9AAABACACADAEAFAFB0B1B2B2B3 B4B5B5B6B7B8B8B9BABBBBBCBDBEBEBF > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 1 %_Br [ 1 0.75 0 0 1 50 100 %_Bs 0.6 0 1 0 1 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Orange, Green, Violet) (Orange, Green, Violet) 0 3 Bd [ < F0EFEFEFEEEEEEEDEDEDECECECEBEBEBEAEAEAE9E9E9E8E8E8E7E7E7E6E6E6E5E5E5E4E4E4E3E3E3 E3E2E2E2E1E1E1E0E0E0DFDFDFDEDEDEDDDDDDDCDCDCDBDBDBDADADAD9D9D9D8D8D8D7D7D7D6D6D6 D5D5D5D4D4D4D3D3D3D2D2D2D1D1D1D0D0D0CFCFCFCECECECDCDCDCCCCCCCBCBCBCACACAC9C9C9C8 C8C8C7C7C7C6C6C6C5C5C5C4C4C4C3C3C3C2C2C2C2C1C1C1C0C0C0BFBFBFBEBEBEBDBDBDBCBCBCBB BBBBBABABAB9B9B9B8B8B8B7B7B7B6B6B6B5B5B5B4B4B4B3B3B3B2B2B2B1B1B1B0B0B0AFAFAFAEAE AEADADADACACACABABABAAAAAAA9A9A9A8A8A8A7A7A7A6A6A6A5A5A5A4A4A4A3A3A3A2A2A2A1A1A1 A0A0A0A09F9F9F9E9E9E9D9D9D9C9C9C > < 5455555657575859595A5A5B5C5C5D5E5E5F5F6061616263636465656666676868696A6A6B6B6C6D 6D6E6F6F707171727273747475767677777879797A7B7B7C7C7D7E7E7F8080818282838384858586 87878888898A8A8B8C8C8D8D8E8F8F909191929393949495969697989899999A9B9B9C9D9D9E9E9F A0A0A1A2A2A3A4A4A5A5A6A7A7A8A9A9AAAAABACACADAEAEAFAFB0B1B1B2B3B3B4B5B5B6B6B7B8B8 B9BABABBBBBCBDBDBEBFBFC0C1C1C2C2C3C4C4C5C6C6C7C7C8C9C9CACBCBCCCCCDCECECFD0D0D1D2 D2D3D3D4D5D5D6D7D7D8D8D9DADADBDCDCDDDDDEDFDFE0E1E1E2E3E3E4E4E5E6E6E7E8E8E9E9EAEB EBECEDEDEEEFEFF0F0F1F2F2F3F4F4F5 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000101010101010101010101010101010101010101010101010101010101 01010101010101010101010101010101010101010101010101010101010101010101010101010101 01010101010101010101010101010101010101010101010101010101010101020202020202020202 02020202020202020202020202020202020202020202020202020202020202020202020202020202 02020202020202020202020202020202020202020202020202020202020202020202020202020202 02020202020202020202020303030303 > 1 %_Br < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0 > < A1A0A0A09F9F9F9E9E9E9D9D9D9D9C9C9C9B9B9B9A9A9A9999999898989797979696969595959594 94949393939292929191919090908F8F8F8E8E8E8E8D8D8D8C8C8C8B8B8B8A8A8A89898988888887 878787868686858585848484838383828282818181808080807F7F7F7E7E7E7D7D7D7C7C7C7B7B7B 7A7A7A79797978787878777777767676757575747474737373727272717171717070706F6F6F6E6E 6E6D6D6D6C6C6C6B6B6B6A6A6A6A6969696868686767676666666565656464646363636262626261 61616060605F5F5F5E5E5E5D5D5D5C5C5C5B5B5B5B5A5A5A59595958585857575756565655555554 54 > < F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8 F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFF FF > 0 1 %_Br [ 0.61 0.96 0 0.01 1 50 100 %_Bs 0.94 0.33 1 0 1 50 50 %_Bs 0 0.63 0.96 0 1 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Pink, Yellow, Green ) (Pink, Yellow, Green ) 0 3 Bd [ < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4E4F50 5152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273 > < 05050505050505050505050505050404040404040404040404040404040404040404040403030303 03030303030303030303030303030303030303020202020202020202020202020202020202020202 0201010101010101010101010101010101010101010101000000000000000000000000 > < CCCCCCCCCCCBCBCBCBCBCBCBCBCBCACACACACACACACACAC9C9C9C9C9C9C9C9C9C8C8C8C8C8C8C8C8 C8C7C7C7C7C7C7C7C7C7C6C6C6C6C6C6C6C6C6C5C5C5C5C5C5C5C5C5C4C4C4C4C4C4C4C4C3C3C3C3 C3C3C3C3C3C2C2C2C2C2C2C2C2C2C1C1C1C1C1C1C1C1C1C0C0C0C0C0C0C0C0C0BFBFBF > 0 1 %_Br < 0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A09090909090909090909090909090909090909090808080808080808080808080808080808 08080807070707070707070707070707070707070706060606060606060606060606060606060605 05050505050505050505050505050505050404040404040404040404040404040404030303030303 03030303030303030303030202020202020202020202020202020201010101010101010101010101 010101000000000000000000 > < B2B2B2B2B1B1B1B0B0B0AFAFAEAEAEADADACACABABAAAAA9A9A8A8A7A7A6A6A5A5A4A4A3A3A2A2A1 A0A09F9F9E9E9D9D9C9B9B9A9A999898979796959594949392929190908F8F8E8D8D8C8B8B8A8989 88888786868584848382828180807F7E7D7D7C7B7B7A7979787777767575747372727170706F6E6D 6D6C6B6B6A69686867666565646363626160605F5E5D5D5C5B5A5A59585757565554545352515150 4F4E4D4D4C4B4A4A4948474646454443434241403F3F3E3D3C3B3B3A393837373635343333323130 2F2F2E2D2C2B2B2A2928272726252423222221201F1E1D1D1C1B1A1918181716151413131211100F 0E0E0D0C0B0A090908070605 > < 0000010101020202030304040505060607070808090A0A0B0B0C0C0D0E0E0F0F1011111213131415 151616171818191A1B1B1C1D1D1E1F1F202122222324242526272728292A2A2B2C2C2D2E2F303031 323333343536363738393A3A3B3C3D3E3E3F4041424243444546464748494A4B4B4C4D4E4F505051 5253545556565758595A5B5B5C5D5E5F6061626263646566676869696A6B6C6D6E6F707171727374 75767778797A7B7B7C7D7E7F80818283848586868788898A8B8C8D8E8F9091929394949596979899 9A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAAAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0 C1C2C3C4C5C6C7C8C9CACBCC > 0 1 %_Br [ 0.45 0 0.75 0 1 50 100 %_Bs 0 0.02 0.8 0 1 50 64 %_Bs 0.05 0.7 0 0 1 57 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Purple, Red, Yellow) (Purple, Red, Yellow) 0 3 Bd [ 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A > < CCCCCCCDCDCDCDCDCECECECECECFCFCFCFD0D0D0D0D0D1D1D1D1D1D2D2D2D2D2D3D3D3D3D3D4D4D4 D4D5D5D5D5D5D6D6D6D6D6D7D7D7D7D7D8D8D8D8D8D9D9D9D9DADADADADADBDBDBDBDBDCDCDCDCDC DDDDDDDDDDDEDEDEDEDFDFDFDFDFE0E0E0E0E0E1E1E1E1E1E2E2E2E2E2E3E3E3E3E4E4E4E4E4E5E5 E5E5E5E6E6E6E6E6E7E7E7E7E7E8E8E8E8E9E9E9E9E9EAEAEAEAEAEBEBEBEBEBECECECECECEDEDED EDEEEEEEEEEEEFEFEFEFEFF0F0F0F0F0F1F1F1F1F1F2F2F2F2F3F3F3F3F3F4F4F4F4F4F5F5F5F5F5 F6F6F6F6F6F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFAFAFBFBFBFBFBFCFCFCFCFDFDFDFDFDFEFE FEFEFEFFFFFF > 0 1 %_Br < E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBE BDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A99989796 9594939291908F8E8D8C8B8A898887868584838281807F7E7D7C7B7A797877767574737271706F6E 6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A49484746 4544434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E 1D1C1B1A191817161514131211100F0E0D0C0B0A09080706050403020100 > < E5E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9EAEAEAEA EAEAEAEAEAEBEBEBEBEBEBEBEBEBECECECECECECECECECEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEE EEEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F3F3F3 F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7 F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFCFC FCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFF > < 00010203040405060708090A0B0C0C0D0E0F10111213141415161718191A1B1C1D1D1E1F20212223 242525262728292A2B2C2D2D2E2F30313233343535363738393A3B3C3D3D3E3F4041424344454546 4748494A4B4C4D4E4E4F50515253545556565758595A5B5C5D5E5E5F60616263646566666768696A 6B6C6D6E6E6F70717273747576767778797A7B7C7D7E7F7F80818283848586878788898A8B8C8D8E 8F8F90919293949596979798999A9B9C9D9E9F9FA0A1A2A3A4A5A6A7A7A8A9AAABACADAEAFAFB0B1 B2B3B4B5B6B7B8B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C8C9CACBCC > 0 1 %_Br [ 0 0.04 1 0 1 50 100 %_Bs 0 1 0.8 0 1 50 50 %_Bs 0.9 0.9 0 0 1 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Rainbow) (Rainbow) 0 6 Bd [ < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 1 0 0 1 %_Br 1 < 0708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E 2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F50515253545556 5758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E 7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6 A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCE CFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6 F7F8F9FAFBFCFDFEFF > 0 0 1 %_Br 1 < 00000000000000000000000000000000000001010101010101010101010101010101010101010101 01010101010101010101010101010202020202020202020202020202020202020202020202020202 02020202020202020202030303030303030303030303030303030303030303030303030303030303 03030303030304040404040404040404040404040404040404040404040404040404040404040404 04040505050505050505050505050505050505050505050505050505050505050505050505050606 06060606060606060606060606060606060606060606060606060606060606060606070707070707 07070707070707070707070707070707 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 1 %_Br < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 0 1 0 1 %_Br 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 1 0 1 %_Br [ 0 1 0 0 1 50 100 %_Bs 1 1 0 0 1 50 80 %_Bs 1 0.0279 0 0 1 50 60 %_Bs 1 0 1 0 1 50 40 %_Bs 0 0 1 0 1 50 20 %_Bs 0 1 1 0 1 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Steel Bar) (Steel Bar) 0 3 Bd [ 0 0 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 1 %_Br 0 0 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 1 %_Br [ 0 0 50 100 %_Bs 1 0 50 70 %_Bs 0 0 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (White & Red Radial) (White & Red Radial) 1 18 Bd [ 0 1 1 0 1 %_Br 0 1 1 0 1 %_Br 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 1 %_Br 0 0 0 0 1 %_Br 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 0 1 %_Br 0 1 1 0 1 %_Br 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 1 %_Br 0 0 0 0 1 %_Br 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 0 1 %_Br 0 1 1 0 1 %_Br 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 1 %_Br 0 0 0 0 1 %_Br 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 0 1 %_Br 0 1 1 0 1 %_Br 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 1 %_Br 0 0 0 0 1 %_Br 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 0 1 %_Br [ 0 1 1 0 1 50 0 %_Bs 0 1 1 0 1 50 0 %_Bs 0 1 1 0 1 50 12.5 %_Bs 0 0 0 0 1 50 12.5 %_Bs 0 0 0 0 1 50 25 %_Bs 0 1 1 0 1 50 25 %_Bs 0 1 1 0 1 50 37.5 %_Bs 0 0 0 0 1 50 37.5 %_Bs 0 0 0 0 1 50 50 %_Bs 0 1 1 0 1 50 50 %_Bs 0 1 1 0 1 50 62.5 %_Bs 0 0 0 0 1 50 62.5 %_Bs 0 0 0 0 1 50 75 %_Bs 0 1 1 0 1 50 75 %_Bs 0 1 1 0 1 50 87.5 %_Bs 0 0 0 0 1 50 87.5 %_Bs 0 0 0 0 1 50 100 %_Bs 0 1 1 0 1 50 100 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Yellow & Orange Radial) (Yellow & Orange Radial) 1 2 Bd [ 0 < 0001010203040506060708090A0B0C0C0D0E0F10111213131415161718191A1B1C1D1D1E1F202122 232425262728292A2B2B2C2D2E2F303132333435363738393A3B3C3D3E3E3F404142434445464748 494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60606162636465666768696A6B6C6D6E6F 707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C > < FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9 F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F4F4F4F4F4F3F3F3F3F3F3F2F2F2F2 F2F2F1F1F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEEEEEEEEEEEDEDEDEDEDEDECECECECECEBEBEBEBEB EBEAEAEAEAEAE9E9E9E9E9E9E8E8E8E8E8E8E7E7E7E7E7E6E6E6E6E6E5 > 0 1 %_Br [ 0 0 1 0 1 52 19 %_Bs 0 0.55 0.9 0 1 50 100 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Yellow & Purple Radial) (Yellow & Purple Radial) 1 2 Bd [ < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 1415161718191A1B1C1D1E1F1F202122232425262728292A2A2B2C2D2E2F30313233343536363738 393A3B3C3D3E3F40414142434445464748494A4B4C4D4D4E4F50515253545556575858595A5B5C5D 5E5F60616263646465666768696A6B6C6D6E6F6F707172737475767778797A7B7B7C7D7E7F808182 83848586868788898A8B8C8D8E8F90919292939495969798999A9B9C9D9D9E9FA0A1A2A3A4A5A6A7 A8A9A9AAABACADAEAFB0B1B2B3B4B4B5B6B7B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C9CACBCB CCCDCECFD0D1D2D3D4D5D6D7D7D8D9DADBDCDDDEDFE0E1E2E2E3E4E5E6E7E8E9EAEBECEDEEEEEFF0 F1F2F3F4F5F6F7F8F9F9FAFBFCFDFEFF > < ABAAAAA9A8A7A7A6A5A5A4A3A3A2A1A1A09F9F9E9D9D9C9B9B9A9999989797969595949393929191 908F8F8E8D8D8C8B8B8A8989888787868585848383828181807F7F7E7D7D7C7B7B7A797978777776 7575747373727171706F6F6E6D6D6C6B6B6A6969686767666565646362626160605F5E5E5D5C5C5B 5A5A5958585756565554545352525150504F4E4E4D4C4C4B4A4A4948484746464544444342424140 403F3E3E3D3C3C3B3A3A3938383736363534343332323130302F2E2E2D2C2C2B2A2A292828272626 25242423222121201F1F1E1D1D1C1B1B1A1919181717161515141313121111100F0F0E0D0D0C0B0B 0A090908070706050504030302010100 > 0 1 %_Br [ 0 0.08 0.67 0 1 50 14 %_Bs 1 1 0 0 1 50 100 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Yellow, Violet, Orange, Blue) (Yellow, Violet, Orange, Blue) 0 4 Bd [ < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < A1A1A1A1A2A2A2A2A3A3A3A3A4A4A4A4A4A5A5A5A5A6A6A6A6A7A7A7A7A8A8A8A8A9A9A9A9AAAAAA AAAAABABABABACACACACADADADADAEAEAEAEAFAFAFAFB0B0B0B0B0B1B1B1B1B2B2B2B2B3B3B3B3B4 B4B4B4B5B5B5B5B6B6B6B6B6B7B7B7B7B8B8B8B8B9B9B9B9BABABABABBBBBBBBBCBCBCBCBCBDBDBD BDBEBEBEBEBFBFBFBFC0C0C0C0C1C1C1C1C2C2C2C2C2C3C3C3C3C4C4C4C4C5C5C5C5C6C6C6C6C7C7 C7C7C8C8C8C8C8C9C9C9C9CACACACACBCBCBCBCCCCCCCCCDCDCDCDCECECECECECFCFCFCFD0D0D0D0 D1D1D1D1D2D2D2D2D3D3D3D3D4D4D4D4D4D5D5D5D5D6D6D6D6D7D7D7D7D8D8D8D8D9D9D9D9DADADA DADADBDBDBDBDCDCDCDCDDDDDDDDDEDE > < F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CF CECDCCCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B4B3B2B1B0AFAEADACABAAA9 A8A7A6A5A4A3A2A1A09F9E9D9C9C9B9A999897969594939291908F8E8D8C8B8A8988878685848483 8281807F7E7D7C7B7A797877767574737271706F6E6D6C6C6B6A696867666564636261605F5E5D5C 5B5A59585756555454535251504F4E4D4C4B4A494847464544434241403F3E3D3C3C3B3A39383736 3534333231302F2E2D2C2B2A29282726252424232221201F1E1D1C1B1A191817161514131211100F 0E0D0C0C0B0A09080706050403020100 > 0 1 %_Br < 9C9B9A9A9998989796969595949393929191908F8F8E8E8D8C8C8B8A8A8989888787868585848383 82828180807F7E7E7D7C7C7B7B7A797978777776757574747372727170706F6E6E6D6D6C6B6B6A69 6968676766666564646362626161605F5F5E5D5D5C5B5B5A5A595858575656555454535352515150 4F4F4E4D4D4C4C4B4A4A4948484746464545444343424141403F3F3E3E3D3C3C3B3A3A3939383737 36353534333332323130302F2E2E2D2C2C2B2B2A292928272726252524242322222120201F1E1E1D 1D1C1B1B1A191918171716161514141312121111100F0F0E0D0D0C0B0B0A0A090808070606050404 030302010100 > < F5F4F4F4F3F3F3F2F2F2F1F1F1F0F0F0EFEFEFEEEEEEEDEDEDECECECEBEBEAEAEAE9E9E9E8E8E8E7 E7E7E6E6E6E5E5E5E4E4E4E3E3E3E2E2E2E1E1E1E0E0E0DFDFDEDEDEDDDDDDDCDCDCDBDBDBDADADA D9D9D9D8D8D8D7D7D7D6D6D6D5D5D5D4D4D3D3D3D2D2D2D1D1D1D0D0D0CFCFCFCECECECDCDCDCCCC CCCBCBCBCACACAC9C9C8C8C8C7C7C7C6C6C6C5C5C5C4C4C4C3C3C3C2C2C2C1C1C1C0C0C0BFBFBFBE BEBEBDBDBCBCBCBBBBBBBABABAB9B9B9B8B8B8B7B7B7B6B6B6B5B5B5B4B4B4B3B3B3B2B2B1B1B1B0 B0B0AFAFAFAEAEAEADADADACACACABABABAAAAAAA9A9A9A8A8A8A7A7A6A6A6A5A5A5A4A4A4A3A3A3 A2A2A2A1A1A1 > < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5 > < 03030303030202020202020202020202020202020202020202020202020202020202020202020202 02020202020202020202020202020202020202020202020202020202020202020202020202020202 02020202020202020202020202020202020202020201010101010101010101010101010101010101 01010101010101010101010101010101010101010101010101010101010101010101010101010101 01010101010101010101010101010101010101010101010101010101010101010101010101000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000 > 1 %_Br < 0D0D0E0F0F10101111121313141415161617171819191A1A1B1C1C1D1D1E1E1F2020212122232324 2425262627272828292A2A2B2B2C2D2D2E2E2F30303131323333343435353637373838393A3A3B3B 3C3D3D3E3E3F3F404141424243444445454647474848494A4A4B4B4C4C4D4E4E4F4F505151525253 54545555565757585859595A5B5B5C5C5D5E5E5F5F60616162626363646565666667686869696A6B 6B6C6C6D6E6E6F6F70707172727373747575767677787879797A7B7B7C7C7D7D7E7F7F8080818282 8383848585868687878889898A8A8B8C8C8D8D8E8F8F90909192929393949495969697979899999A 9A9B9C > < 08090A0B0C0D0E0F0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E 2F303132333435363738393A3B3C3D3E3F40404142434445464748494A4B4C4D4E4F505152535455 565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717172737475767778797A7B7C 7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A2A3 A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACB CCCDCECFD0D1D2D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2 F3F4F5 > < F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCB CAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3 A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A898887868584838281807F7E7D7C7B 7A797877767574737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5A59585756555453 5251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B 2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A09080706050403 020100 > < 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000101010101010101010101010101010101010101010101010101010101010101 01010101010101010101010101010101010101010101010101010101010101010101010101010101 01010101010101010101010101010101010101010101010202020202020202020202020202020202 02020202020202020202020202020202020202020202020202020202020202020202020202020202 02020202020202020202020202020202020202020202020202020202020202020202020202020303 030303 > 1 %_Br [ 1 0.87 0 0 1 50 95 %_Bs 0 0.63 0.96 0 1 50 65 %_Bs 0.61 0.96 0 0.01 1 50 35 %_Bs 0.05 0.03 0.95 0 1 50 5 %_Bs BD %AI5_EndGradient %AI5_End_NonPrinting-- %AI5_BeginPalette 0 0 Pb 0 0 0 0 k Pc 0 0 0 1 k Pc 0 0.45 0.6 0 k Pc 0 0.5 0.05 0 k Pc 0 0.9 1 0 k Pc 1 0.2 1 0 k Pc 1 0.4 0.15 0 k Pc 0.2 0 1 0 k Pc 0.25 1 0.25 0 k Pc 0.4 0.4 0.4 0 k Pc 0.4 0.7 1 0 k Pc 0.75 0.9 0 0 k Pc 1 0 0.55 0 (Aqua) 0 x Pc 1 0.5 0 0 (Blue) 0 x Pc 0.5 0.4 0.3 0 (Blue Gray) 0 x Pc 0.8 0.05 0 0 (Blue Sky) 0 x Pc 0.5 0.85 1 0 (Brown) 0 x Pc 1 0.9 0.1 0 (Dark Blue) 0 x Pc 1 0.55 1 0 (Forest Green) 0 x Pc 0.05 0.2 0.95 0 (Gold) 0 x Pc 0.75 0.05 1 0 (Grass Green) 0 x Pc 0 0.45 1 0 (Orange) 0 x Pc 0.15 1 1 0 (Red) 0 x Pc 0.45 0.9 0 0 (Violet) 0 x Pc Bb 2 (Black, White) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Chrome) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Green, Blue) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Orange, Green, Violet) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Pink, Yellow, Green ) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Purple, Red, Yellow) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Rainbow) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Steel Bar) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 0 0 0 0 Bh 2 (White & Red Radial) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 0 0 0 0 Bh 2 (Yellow & Orange Radial) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 0 0 0 0 Bh 2 (Yellow & Purple Radial) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Yellow, Violet, Orange, Blue) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc (Arrow1.2.out/in) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Arrow1.2.side) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Bricks) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Checks) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Confetti) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (DblLine1.2.inner) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (DblLine1.2.outer) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (DblLine1.2.side) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Diamonds) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Hexagon) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Laurel.inner) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Laurel.outer) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Laurel.side) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Leaves-fall) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Polka dots) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Random circles) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Rope.side) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Scales) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (SolidStar.side) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Stars) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Stripes) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (TriBevel.outer) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (TriBevel.side) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Waves-scroll) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc 1 1 1 1 k Pc 1 g Pc 0 g Pc 0.75 g Pc 0.5 g Pc 0.25 g Pc 0 g Pc Bb 2 (Black & White) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc 0.25 0 0 0 k Pc 0.5 0 0 0 k Pc 0.75 0 0 0 k Pc 1 0 0 0 k Pc 0.25 0.25 0 0 k Pc 0.5 0.5 0 0 k Pc 0.75 0.75 0 0 k Pc 1 1 0 0 k Pc 0 g Pc 0 0.25 0 0 k Pc 0 0.5 0 0 k Pc 0 0.75 0 0 k Pc 0 1 0 0 k Pc 0 0.25 0.25 0 k Pc 0 0.5 0.5 0 k Pc 0 0.75 0.75 0 k Pc 0 1 1 0 k Pc 0 g Pc 0 0 0.25 0 k Pc 0 0 0.5 0 k Pc 0 0 0.75 0 k Pc 0 0 1 0 k Pc 0.25 0 0.25 0 k Pc 0.5 0 0.5 0 k Pc 0.75 0 0.75 0 k Pc 1 0 1 0 k Pc (Yellow Stripe) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc 0.25 0.125 0 0 k Pc 0.5 0.25 0 0 k Pc 0.75 0.375 0 0 k Pc 1 0.5 0 0 k Pc 0.125 0.25 0 0 k Pc 0.25 0.5 0 0 k Pc 0.375 0.75 0 0 k Pc 0.5 1 0 0 k Pc 0 0.25 0.125 0 k Pc 0 0.5 0.25 0 k Pc 0 0.75 0.375 0 k Pc 0 1 0.5 0 k Pc 0 0.125 0.25 0 k Pc 0 0.25 0.5 0 k Pc 0 0.375 0.75 0 k Pc 0 0.5 1 0 k Pc 0.125 0 0.25 0 k Pc 0.25 0 0.5 0 k Pc 0.375 0 0.75 0 k Pc 0.5 0 1 0 k Pc 0.25 0 0.125 0 k Pc 0.5 0 0.25 0 k Pc 0.75 0 0.375 0 k Pc 1 0 0.5 0 k Pc 0.25 0.125 0.125 0 k Pc 0.5 0.25 0.25 0 k Pc 0.75 0.375 0.375 0 k Pc 1 0.5 0.5 0 k Pc 0.25 0.25 0.125 0 k Pc 0.5 0.5 0.25 0 k Pc 0.75 0.75 0.375 0 k Pc 1 1 0.5 0 k Pc 0.125 0.25 0.125 0 k Pc 0.25 0.5 0.25 0 k Pc 0.375 0.75 0.375 0 k Pc 0.5 1 0.5 0 k Pc 0.125 0.25 0.25 0 k Pc 0.25 0.5 0.5 0 k Pc 0.375 0.75 0.75 0 k Pc 0.5 1 1 0 k Pc 0.125 0.125 0.25 0 k Pc 0.25 0.25 0.5 0 k Pc 0.375 0.375 0.75 0 k Pc 0.5 0.5 1 0 k Pc 0.25 0.125 0.25 0 k Pc 0.5 0.25 0.5 0 k Pc 0.75 0.375 0.75 0 k Pc 1 0.5 1 0 k Pc PB %AI5_EndPalette %%EndSetup %AI5_BeginLayer 1 1 1 1 0 0 0 79 128 255 Lb (\203\214\203C\203\204\201| 1) Ln 0 A 0 O 0 g 800 Ar 2 J 0 j 1 w 2 M []0 d %AI3_Note: 0 D 0 XR 101.7998 199.2002 m 106.2998 199.1001 111.2998 198.5 115.7998 197.8999 C 115.7998 197.7998 L 122.2998 196.2998 129.7998 194.7998 135.7998 191.6001 C 131.5 191.2002 127.8999 190.8999 124.1001 191.8999 C 122 189.7002 119.2002 194.1001 117.7002 190.7998 C 117 191.2002 115.5 192.3999 115.2002 191.2998 C 114.7998 191.1001 114.5 190.1001 113.8999 190.2998 C 112.3999 191.2002 112.1001 193.7998 110.3999 194 C 109.8999 193.1001 110.2002 192.3999 110.3999 191.7998 C 108.5 190.1001 107.7998 193.1001 106.2998 193.8999 C 105.3999 193.2998 105.5 193.1001 105.3999 192.1001 C 104.2002 192.1001 102.7002 193 102 193.7002 C 101.3999 192.2002 100.3999 192.5 99.2002 193 C 96.7998 195.1001 L 95.2002 195.2002 96.2998 193.5 95.6001 193 C 94.2998 193.1001 92.8999 194.1001 92.2002 195.3999 C 91.7998 195.2998 90.8999 195.7002 91 194.7998 C 91.2998 193.6001 91.2002 193.7998 90.7998 193 C 89 192.3999 87.7998 196 86.6001 193.2002 C 85.2002 192.6001 84.3999 194 82.8999 194 C 83.1001 193.1001 82 193.1001 81.3999 193 C 80.8999 193.1001 80.2002 193.2998 79.6001 193.6001 C 79 193.7998 78.6001 194.7002 77.7998 194.5 C 77.7002 193.7002 77.2002 193.2002 77.5 192.3999 C 76.3999 192.1001 75.2998 192.2002 74.2002 193.2002 C 72.8999 193.2002 73.6001 191.2002 72.3999 191.3999 C 71.7998 191 71.2002 191.5 70.3999 191.8999 C 69.7002 192.2002 69.2998 191.3999 69.2002 190.8999 C 68.5 190.3999 67.1001 189.5 65.8999 190.2998 C 65.6001 190.6001 L 64.2998 187.7998 60.6001 190 58.6001 187.7002 C 58.2998 186.2002 56.8999 187.8999 55.7998 187.6001 C 52.8999 186.1001 51.6001 182 48 183.1001 C 47.7998 182.7998 L 47.6001 182.8999 L 42.1001 178.6001 36.1001 175.5 30.7998 171.2002 C 30.7998 171.6001 L 32.2002 172.7002 33.1001 174.2002 34.3999 175 C 35.2002 175.7998 36.7998 176.7002 37.7002 177.7998 C 37.7002 177.7002 L 38.3999 178.1001 39.3999 179.6001 40.2998 180 C 40.3999 179.8999 L 42 181.3999 44.8999 182.5 46.6001 184.1001 C 47.7002 184.3999 48.6001 185.2998 49.6001 185.6001 C 49.5 186.1001 50.1001 186.2998 50.3999 186.2002 C 50.2998 186.3999 L 52.3999 187.7998 55.2998 188.7998 56.8999 190 C 57.2002 189.7002 57.7002 189.8999 58 190.2002 C 58.5 190.5 59.5 191.1001 60.3999 191 C 61.3999 192.6001 63.5 192.3999 64.8999 193.1001 C 64.8999 193.2998 L 65.6001 193.2998 L 65.6001 193.6001 L 67.8999 194.1001 69.8999 194.8999 72.2002 195.3999 C 72.6001 195.7002 L 77.1001 196.3999 81.1001 197.7998 85.3999 198.3999 C 85.8999 198.3999 86.2998 198 86.6001 198.6001 C 86.6001 198.5 L 90.6001 198.7998 94 199.2998 98.2002 199.3999 C 99.2002 199 100.7002 199.2998 101.7998 199.2002 C f 151.8999 193.7002 m 151.6001 192.6001 152.5 193.2998 152.5 192.5 C 152.2998 190.7002 152.3999 189.3999 153.6001 187.8999 C 153.7998 187.7002 L 154 187.5 155.3999 187.6001 155.8999 187.6001 C 161.2002 188.8999 167 187.8999 171.7002 188.5 C 171.7002 188.3999 L 173.6001 188 176.5 189.2002 178.1001 187.6001 C 178.2998 187.7998 L 179 186.8999 179.5 185.7998 179 184.7998 C 179.2998 183 179.2002 181.8999 179.2002 180.2002 C 179.2998 179.6001 178.7002 178.5 179.2998 178 C 179.6001 177.5 178.6001 177.1001 179.2998 176.6001 C 178.7002 175.6001 178.7998 174.5 179.2002 173.2998 C 179 173.2998 L 178.7002 171 179 169 178.8999 166.2998 C 178.5 166 177.7998 165 176.8999 165 C 176 165.2998 174.5 165.2002 174.3999 166.2998 C 174.5 167.1001 174.1001 168.2002 173.8999 168.7002 C 173.7998 170.5 174 172.6001 173.7998 174.6001 C 173.8999 174.6001 L 173.8999 181.2002 L 170.7002 183.7998 166.5 182.2998 163 182.5 C 161.2998 180.5 160.6001 176.3999 161.2998 173.6001 C 161.6001 173.5 L 160.5 173.1001 161.7998 172.7002 161.6001 172 C 162 169.7998 161.7002 168.7998 161.6001 166.3999 C 160.8999 165.7002 160.2002 165.1001 159.2002 164.6001 C 158.2002 164.7998 156.7002 165.3999 156.1001 166.7002 C 156.2998 167.3999 155.8999 168.1001 155.5 168.5 C 155.6001 170.1001 155.3999 172.1001 156 173.6001 C 155.5 174.2002 156.6001 174.8999 155.7998 175.2002 C 156.1001 175.7002 L 156.1001 180.3999 L 155.2998 181.2998 155.3999 182.3999 154 182.8999 C 152.5 183.5 151.1001 182.7002 149.5 182.6001 C 147.6001 182.7002 145.8999 183.3999 144.3999 182.2002 C 141.6001 179.5 142.8999 174.6001 143.2998 171.6001 C 143.2002 169.5 143.7998 167 142.2002 165.3999 C 141.3999 164.7002 140.2998 164.5 139.3999 164.6001 C 138 165.2002 139.6001 166.6001 138.2002 167.3999 C 138.2002 167.7998 139 168.2002 138.2002 168.5 C 138.3999 170.7998 138.5 173.3999 138 175.3999 C 138.2002 175.3999 L 138.2998 176.2998 138.2002 176.2002 138.1001 177.1001 C 138 177.1001 L 138.6001 178 137.2998 178.6001 137.7998 179.7998 C 137.3999 179.8999 L 137.5 179.8999 L 137.2002 180.6001 137.2002 181.5 136.7002 182.2002 C 133.5 181.7002 127 184.1001 125.5 179.2002 C 125.7002 177.8999 125.2002 175.6001 125.5 173.7998 C 125.3999 171.2002 125.2998 167.8999 125.2002 166.2002 C 125.2998 166.2998 L 125 166.6001 125.6001 164.7998 124.3999 165 C 123.5 164.5 121.8999 164.5 121 165 C 120.3999 166.1001 120.7998 168 120 169 C 120.2998 172.6001 119.3999 175.6001 120.3999 178.8999 C 120 178.7998 L 120.2002 179.7002 119.7998 180.2002 120.5 181.2002 C 120.5 183.3999 120.5 183.6001 120.5 186 C 121 186.6001 121.3999 186.2002 121.7998 187.1001 C 121.7998 187 L 122.5 188.5 123.8999 187 125.2002 187.1001 C 131.2002 187.8999 136.7002 187.2998 142.1001 187.8999 C 143.5 188.2002 144.8999 187.6001 146.2998 188.2998 C 146.3999 189.2002 146.6001 190.1001 146.8999 190.6001 C 146.7002 190.6001 147.2002 192.2002 147 192.6001 C 147.3999 193.3999 147.8999 194.2002 148.8999 194.7998 C 150.1001 195.2002 151.2998 194.1001 151.8999 193.7002 C f 87.7002 185.2998 m 88.2998 184.7002 88.2998 184 88.1001 183.3999 C 87.6001 181.1001 L 87.7998 180.7998 87.6001 180 87.7002 179.6001 C 87.6001 179.7998 L 87 178.3999 87.2002 177.1001 87 175.7998 C 86.7002 174.8999 87.2998 174 86.6001 173.2002 C 86.8999 171.7998 86.6001 170.5 86.8999 169.3999 C 87.2998 168.8999 87 167.5 87.5 166.8999 C 87.7998 166.5 88.7998 166.5 88.8999 167.3999 C 88.8999 168.6001 L 89.1001 168.5 89.2002 168.7002 89.2998 168.7998 C 89 169.1001 L 89.6001 169.1001 88.8999 170 89.2002 170.3999 C 88.7998 170.7998 L 89.7998 170.7998 88.8999 171.6001 89.2998 172.1001 C 89 172.2998 L 89.7002 172.7002 89.2002 173.5 89.8999 173.8999 C 89.6001 174.5 L 89.7998 174.3999 89.7998 174.5 89.8999 174.6001 C 89.3999 176 90.6001 177.8999 90.7002 179.2998 C 91.1001 180.8999 92.2998 183.1001 92.5 184.2998 C 93.1001 185 L 93.5 184.7002 L 93.2998 182 92.8999 178.7998 92.8999 176.2002 C 92.3999 174.5 92.7002 173.3999 93.1001 172 C 93.3999 172 L 93 171.6001 L 93.8999 171.1001 93.5 172 94.1001 172.2998 C 93.3999 173.1001 95.1001 173.3999 94.3999 174.2002 C 94.3999 174.1001 94.5 174.1001 94.6001 174 C 94.5 174.7002 95.7002 175.7002 95.2998 177 C 96.3999 177.1001 94.8999 178.5 96.2002 178.6001 C 96.3999 179.8999 L 96.6001 179.6001 L 96.7002 181.1001 97.2998 181.7998 98 183.1001 C 97.6001 183.7002 98.5 184 98.5 184.3999 C 99 184.3999 L 99.1001 182.5 98.8999 180.8999 98.8999 179.2998 C 98.2998 177.5 98.7998 174.8999 98.2002 173.2002 C 98.5 172.6001 98.7998 172.2998 99.6001 172.2998 C 99.8999 173.5 100.5 174.2998 100.3999 175.2998 C 101.2998 175.8999 101.2002 177.6001 101.5 178.2998 C 101.7002 178.5 102 178.2998 102.1001 178.6001 C 101.7998 179.3999 102.7002 180.7002 103.2002 181.3999 C 102.8999 182.3999 103.7998 182.5 103.7998 183.2002 C 103.7998 181.7002 104.7998 180.6001 103.7998 179.3999 C 104.1001 177.2998 103.2998 175.7002 104.2998 173.7998 C 104.6001 174 105 174.1001 104.8999 174.6001 C 104.8999 174.3999 105.2002 174.3999 105.2002 174.6001 C 105.3999 175 105.2998 175.6001 105.3999 176 C 105.5 175.8999 L 105.8999 176.2002 105.7002 177.2998 106 178 C 106.2002 177.8999 106.3999 178.1001 106.2998 178.2998 C 106.3999 178.6001 107.1001 179.2002 107 179.5 C 107.2002 179.3999 L 107.2002 180.1001 108.2998 180.1001 108.2002 181.1001 C 108.6001 181.7002 L 108.7998 181.3999 109 180.7002 109.3999 180.1001 C 108.7002 180 109.3999 179.2998 108.7998 179.2998 C 109 177.2998 107.6001 175.1001 108.7002 173.7998 C 108.3999 173.5 108.8999 173.2002 109.1001 173 C 109.7998 173.7002 110.6001 175 111.1001 176 C 111 176.7002 111.7998 177.2002 111.7002 177.7998 C 112.2998 177.7998 L 112.6001 179.5 L 112.6001 179.2998 L 112.8999 179.3999 113 180.1001 113.3999 180.6001 C 113.3999 180.5 L 113.7998 180.8999 114.5 180.2002 114.2002 179.7998 C 113.6001 178.3999 113.5 176.7998 113 175.2998 C 113.1001 174.3999 113.1001 173.6001 112.6001 172.8999 C 113.3999 172.2002 L 113.7002 172.5 114.2002 172.8999 113.8999 173.2998 C 115 173.3999 114.5 174.1001 115.2998 174.7998 C 115.3999 175.2002 116.2002 175.6001 116.2002 176.3999 C 116.5 172.2998 115.8999 168.2998 116.2998 164 C 116 163.7998 L 113.2998 165.8999 109 165.7002 105.5 165.7002 C 98 163.1001 91.5 155.5 82.8999 159.1001 C 80.2002 161.8999 77.6001 167.5 72.5 165.7002 C 65.2998 163.8999 58.5 157.2002 50.8999 154.7002 C 46.8999 153.7998 43.2998 151.8999 39.5 151.7998 C 35.6001 152.5 30.3999 152.8999 28 149.6001 C 27.6001 148 26.5 145.8999 26.7998 144.1001 C 25.8999 141.5 24.3999 139.5 22 139.1001 C 17.2002 137.2002 13.6001 133.3999 9.2002 130.7002 C 9 131 9.2998 131.7002 8.7998 131.8999 C 9.5 132.7998 L 9.7998 133 9.5 134.2002 10.3999 134.3999 C 10.1001 134.7998 L 10.8999 135 12.2998 134.7002 12.6001 135.7998 C 12.5 138.1001 L 12.6001 138.1001 L 12.6001 138.3999 L 13 138.3999 L 12.5 139 13.1001 138.2002 13.2002 139.1001 C 13.5 139.7998 12.5 140.7002 13.7002 141 C 14.2998 140.6001 14.7002 140.7998 15.5 141 C 16.1001 141.3999 15.7998 142.8999 15.7002 143.2998 C 14.7002 144 16 144.2998 16.2998 145.1001 C 17 144.7998 16.8999 143.7002 17.7998 144.2002 C 17.7998 144.1001 17.7002 143.8999 17.8999 143.8999 C 18.1001 144.2002 18.7998 144.5 18.7002 145.2002 C 18.5 146.3999 18.2002 147.8999 19.1001 148.7002 C 19.6001 147.8999 20.5 147.7002 20.6001 146.8999 C 21 146.8999 L 21.2002 149 L 21.3999 148.8999 L 21.3999 150.1001 21 149.3999 21.7998 150.5 C 21.3999 151.1001 L 21.7002 150.8999 21.7002 151.2998 21.7998 151.3999 C 21.6001 151.7998 21.6001 152.2002 21.7002 152.6001 C 21.7998 151.2998 22.7998 151.6001 23.2002 150.5 C 23.6001 150.3999 24.5 150.3999 24.5 151.2002 C 25.2002 151.8999 24.1001 152.7002 24.5 153.6001 C 24.1001 154 L 24.2002 154 L 24.3999 155.8999 L 25 155.6001 25.7998 153.1001 27 153.7002 C 27.2998 154.2998 27.1001 155.2002 27.3999 155.7998 C 26.8999 156.7002 27.2998 157.5 27.1001 158.7998 C 27.3999 158.2998 L 27.6001 158.5 L 28 158 L 27.7998 157.8999 L 29 156.5 L 28.8999 156.3999 L 29.3999 155.8999 L 30.2998 157 29.7002 159.3999 29.8999 160.8999 C 31.2998 159 L 31.3999 159.1001 L 31.2002 158.5 32.3999 158.2002 32.6001 157.7002 C 33.3999 158.2998 L 32.8999 158.7998 33.2998 161.1001 32.5 161.6001 C 32.8999 162.5 32.1001 162.6001 32 163.3999 C 32.2002 163.2998 L 32.3999 163.5 32.2002 163.8999 32.2998 164.2002 C 32 164.2002 L 32 164.8999 L 32.3999 164.2998 L 32.6001 164.7998 L 32.6001 163.2998 33.8999 163.7002 34.1001 162.3999 C 34.2002 162.5 L 34.5 161.1001 35.3999 160.3999 35.8999 159.1001 C 35.8999 158.5 36.2998 157.8999 36.7998 157.7998 C 37.8999 158.3999 37.2998 159.7998 37.2998 160.8999 C 37.2998 161.5 L 37.2002 161.3999 L 36.6001 161.7998 37.5 163.6001 36.3999 164 C 36.3999 167.2998 L 36.6001 166.7998 36.5 166.6001 36.7002 166.1001 C 36.8999 166.1001 36.7998 166.2998 36.7998 166.3999 C 38.7998 163.8999 39.2002 160.8999 42 159.1001 C 42.5 160.2002 41.7998 162.3999 41.3999 163.7998 C 41.2002 163.7002 41.2998 163.3999 41.2998 163.2002 C 41.7002 164.7002 40.5 165.5 40.6001 167 C 40.1001 167.2002 40.5 167.5 40.6001 167.7998 C 40 168.2002 40 169.2998 40.1001 169.8999 C 41.3999 170.3999 41 168.2002 41.8999 168.1001 C 42 167.2998 42.3999 166.7998 43 166.3999 C 43.2998 166.2002 42.3999 165.2002 43.3999 165.3999 C 43.1001 165 43.7998 164.7998 43.7998 164.5 C 44 164.5 L 44.2002 163.7002 45.5 161.7998 46.2002 161.5 C 46.2002 160.8999 46.7998 160.6001 47.2998 160.2998 C 47.8999 160.7998 47.5 161.7998 47.7998 162.1001 C 47.2002 162.3999 47.7998 162.7998 47.3999 163.2002 C 47.5 163.2002 L 47.2002 164.1001 46.6001 164.2998 47 165.3999 C 46 165.2002 47 166.2998 46.2002 166.7002 C 46.2998 167.3999 45.3999 168.8999 45 169.7002 C 44.7002 170.7998 45.2998 172.1001 44.8999 173 C 45.2002 173.1001 45.3999 173.3999 45.6001 173.6001 C 45.7998 173 L 46.1001 173.2998 L 45.7998 172.2998 47.1001 172 46.7998 171 C 47.5 170.1001 47.7002 169.3999 48.5 168.1001 C 48.1001 167.5 49.3999 167.2998 49.2998 167 C 49.3999 167.2002 49.3999 165.3999 49.8999 166.1001 C 50.7002 165.1001 50.7998 163.2002 52.1001 162.7002 C 52.6001 162.7002 52.6001 163.7002 52.6001 164 C 51.6001 165.5 52.3999 167.7002 51.5 169.3999 C 51.3999 170.6001 50.7002 172.2998 51.1001 173.2002 C 50.8999 173.3999 L 51.2998 173.8999 50.6001 175.1001 51 175.8999 C 52.6001 175.8999 52.6001 173.7002 53.7998 172.6001 C 53.7998 171.7002 53.8999 170.1001 55 169.2998 C 54.6001 169 55 168.7002 55.1001 168.3999 C 55.3999 168.2998 55.2998 167.3999 55.7998 167.2998 C 55.8999 166.8999 56 166.1001 56.8999 166.1001 C 57.1001 166.2998 57.7002 166.2998 57.5 166.7998 C 57.6001 166.7998 57.7002 166.7002 Y 58.1001 167 57.7998 167.2998 57.6001 167.5 C 57.7002 167.5 L 57.6001 167.8999 L 57.7002 167.8999 57.7998 167.7998 Y 57.7998 168.5 L 57.5 168.5 L 57.6001 168.1001 57.8999 169.2002 57.5 169.2998 C 57.5 169.7002 57.3999 170 57.2002 170.2998 C 57.3999 170.2002 L 57.1001 170.7002 57.5 171.1001 56.8999 171.6001 C 57 171.6001 L 57.5 173.3999 55.6001 175.2002 56.6001 177.1001 C 56.6001 177.8999 56.2002 178 56.5 178.7998 C 58.2002 179.5 57.7002 177.1001 58.2998 176.2998 C 58.3999 176.3999 L 58.7002 175.8999 58.7998 175 59.2002 174.7998 C 59.6001 174.2002 58.2002 173.5 59.3999 173 C 59.5 173.2002 L 59.5 172.6001 60.7002 171.7998 60.5 171 C 60.8999 170.8999 60.7002 170.2002 61 169.8999 C 61.7998 169.1001 L 62.2998 169.2002 62.2002 169.7002 62.2998 170 C 61.8999 170.5 62.3999 170.8999 62.2002 171.5 C 62.2998 171.5 L 62.3999 172.1001 62.1001 173.1001 62.3999 173.8999 C 62 174.2002 L 62.8999 176.2002 61.7998 178.3999 62.2998 180.6001 C 62.7998 180.1001 62.8999 181.1001 63.3999 181 C 63.7002 179.3999 64.2002 178.2998 64.2998 176.6001 C 64.3999 176.7998 L 64.2002 175.6001 65.2002 174.2998 65.2998 172.8999 C 65.6001 172.8999 L 65.5 172.2998 65.7002 171.8999 65.8999 171.3999 C 66.2998 171.1001 67 171.6001 66.7002 172.1001 C 67 171.7998 L 67.2998 172.8999 67.2998 175.1001 67 176.2998 C 67.3999 177.3999 67.2002 178.7998 67.1001 180.1001 C 67.2002 180.1001 67.3999 180.1001 67.3999 180.2002 C 67.1001 180.5 67.8999 180.2998 67.7002 180.7998 C 67.7002 181.3999 L 67.8999 181.3999 68 181.7002 68.2002 181.7998 C 68.2002 182 67.6001 182.3999 68.2002 182.3999 C 69.1001 182 68.7002 180.5 69.5 179.5 C 69.3999 177 70.1001 175.6001 70.2002 173.2002 C 70.2998 173.1001 70.3999 173.2002 70.3999 173.2998 C 70.2998 173.2998 70.6001 172.7998 70.8999 172.6001 C 71.7002 172.6001 71.1001 172.6001 71.6001 172.3999 C 72.1001 173 72.1001 173.5 72.1001 174.2002 C 72.3999 174 L 72.6001 174.2002 L 72.2002 175 72.7998 176.3999 72.6001 177 C 73.1001 178.2998 72.7998 179.1001 73.6001 180.2002 C 73.2002 180.2002 L 73.6001 181 73.2002 182.5 74.2002 183 C 74.2002 183.7998 L 74.5 184.2002 74.8999 183.6001 75.2002 184 C 75.1001 182.2002 75.8999 180.2998 75.7002 178.3999 C 75.7002 178.6001 75.7998 178.7998 75.6001 178.8999 C 75 177.2002 76.1001 175.7002 76.1001 174 C 76.3999 173.7998 76.7002 173.6001 76.7998 173.2002 C 77.5 173.3999 77.2998 173.8999 77.5 174.6001 C 77.7002 174.6001 77.8999 174.5 78 174.7002 C 77.5 174.7998 77.8999 175.6001 78.1001 175.8999 C 77.8999 176 77.8999 176.2998 78.1001 176.3999 C 78.3999 177.3999 78.6001 178.2998 78.5 179.3999 C 78.6001 179.2998 L 79.2998 180.7002 79 181.7002 79.7998 182.7998 C 80 183.6001 80.7002 184.2998 80.7998 184.8999 C 81.1001 181 80.6001 176.7002 81 172.8999 C 81.1001 173 81.1001 173.1001 81.2002 173 C 81.1001 172.6001 81.2002 172.5 81.2002 172 C 81.1001 172.1001 81 172.1001 V 80.5 171.7002 81.3999 171.7002 81.2002 171.3999 C 81.1001 170.8999 81.3999 170.3999 81.5 169.8999 C 81.7998 169.7998 L 81.3999 169.6001 L 82.2002 168.7002 L 82 168.5 L 82.1001 168.3999 82.1001 168.2002 82.2998 168.2002 C 83.1001 168.6001 82.2998 169 82.8999 169.2998 C 83.2002 170.7998 83.3999 171.3999 83.5 172.6001 C 83.7998 173.6001 84.1001 174.3999 84.1001 175.3999 C 83.7002 176.1001 84.8999 176.5 84.5 177.3999 C 84.7998 178.7998 85.7998 180 85.7002 181.3999 C 85.7998 181.2998 L 86.1001 181.7002 86.2002 182.3999 86.2998 182.7998 C 86.5 183.3999 87.2998 184.1001 87.1001 185.2998 C 87.3999 184.8999 L 87.7002 185.2998 L f 106.2002 162.7002 m 106.2998 159.5 105.3999 156.8999 106.7998 154.2998 C 108.5 153.1001 107.7002 155.6001 108.3999 156 C 108 156 L 108.3999 156.5 L 108.7002 157.2002 107.5 158.2002 108.2002 159 C 107.8999 160.7998 108.1001 161.7998 109.6001 162.7998 C 109.8999 159.7002 110.3999 158 110.5 154.7002 C 110.7998 154.7002 L 110.7002 154.1001 110.7002 153.2002 111.2002 152.8999 C 111.7998 152.7002 111.1001 151.8999 111.7998 151.8999 C 112.2002 152.2998 L 112 152.2998 112.1001 152.5 112.1001 152.6001 C 112.2002 152.5 L 112.2998 152.7998 113.1001 153.1001 112.3999 153.5 C 112.7998 153.5 L 112.7002 155.2002 113.5 157 113.2998 158.7998 C 113.7998 160.6001 L 113.3999 160.6001 L 114 161.2002 L 114.3999 160.3999 115.2998 160.7002 115.3999 160 C 115.7998 159.5 116.2998 158.7002 116.2998 158 C 116 156.7002 117 155.2002 116.2002 154 C 115.8999 150.7002 116.7998 148.8999 116 146 C 111.1001 148.7998 106 147.3999 101.2998 145.1001 C 96.2002 143.1001 92.1001 139.5 86.8999 140.3999 C 84.3999 140.2002 82.6001 141.8999 80.6001 143.2002 C 79.6001 144.3999 78.2998 146.7002 76.2002 146 C 72.1001 145.3999 70.6001 141.3999 67.6001 139.3999 C 67.3999 139 L 65.7998 136.8999 62.7998 135.2998 60.7002 134.2002 C 60.6001 134.2998 L 58.7002 133.2002 55.6001 132.1001 53.2998 131 C 52.6001 130.2998 50.2998 129.6001 49.6001 128.2998 C 47.8999 126.7002 46.7002 123.7998 47.3999 121.6001 C 46.5 119.6001 48.7002 118.8999 47.2998 117.2002 C 45.7002 113.7002 40.8999 112 38.2998 109.7002 C 36.1001 108.7998 34.7998 107.2998 33.7002 105.7002 C 33.8999 106.7002 32.7998 107.7002 33.7002 108.3999 C 33.7002 109 L 33.7998 109 34 109 34.1001 108.7998 C 33.7998 110.7998 36.3999 109.3999 35.7998 111.5 C 35.8999 111.5 L 35.8999 112.8999 L 36.8999 113.2002 38 113.1001 37.6001 114.3999 C 36.7002 114.6001 37.2998 115.8999 36.3999 116 C 36.2002 116.5 36.7002 116.6001 36.7998 116.8999 C 37.6001 117.2998 39.1001 115.7002 39.1001 117.2002 C 40 117.5 38.8999 118 39.1001 118.8999 C 38.7998 120.1001 L 39 119.8999 L 39.1001 120.5 L 40.1001 120.2998 40.7002 118.2998 41.6001 119.3999 C 41.3999 120 L 41.8999 120.1001 41.5 120.3999 41.7998 120.6001 C 40.8999 121 41.5 123.2998 40.8999 124.1001 C 40.7002 124.1001 L 40.7002 123.8999 41.3999 124.2998 41.2002 124.7002 C 41.8999 124.6001 42.6001 122.6001 43.6001 122.7998 C 42.7998 122.7998 44 124.3999 43.1001 124.7998 C 43 125 43.2002 125 43.2998 125.2002 C 43.2002 125.3999 43 125.2002 42.7998 125.2998 C 43.2002 126.7002 42.1001 127.2998 42.7998 128.6001 C 43.1001 128.6001 43.2998 128.7002 43.3999 128.8999 C 43.7002 128.6001 L 43.8999 129.1001 43.8999 128.7002 44.2998 128.6001 C 44.6001 128 44.2998 127.1001 45.2002 126.7998 C 45.1001 126.2998 45.7002 126.2002 46 126.1001 C 46.6001 126.1001 46.2998 126.7998 46.7002 127.1001 C 46.6001 127.5 45.7998 127.7002 46.3999 128 C 46.1001 129 46 130.6001 45.6001 131.3999 C 46.1001 131.6001 L 45.7002 131.8999 45.7002 132.7002 46.1001 133 C 46.7998 133.2998 47.6001 132.1001 48.2002 133.1001 C 48.1001 133.7002 48.3999 134.3999 48.5 134.8999 C 48.5 135.1001 48.3999 134.6001 48.6001 134.6001 C 48.6001 135.2002 49 136 48.3999 136.2998 C 48.5 136.2002 48.6001 136.2002 V 48.7002 136.2998 48.7002 136.3999 48.7002 136.6001 C 49.7002 136.2002 50.2002 135.1001 50.7998 134 C 51.2002 134.2002 L 51.2002 134 51.2998 134 51.3999 133.8999 C 51.8999 134.2002 51.7998 135.1001 52.1001 135.6001 C 51.6001 136.5 52.3999 136.8999 51.5 137.3999 C 52 138.7002 51.5 139.3999 51.5 140.6001 C 52.2002 140.7002 52.7998 140 52.7998 139.2998 C 53.2002 139.3999 L 53.1001 139.1001 53.3999 138.8999 53.2998 138.6001 C 53.6001 138 54.1001 138.7998 54.5 138.3999 C 55.2998 140.2998 54.5 140.7002 54.1001 142.3999 C 54.6001 142.5 54.1001 143.3999 54.7998 143.2998 C 54.7002 143.2002 L 55.5 142.2002 56.2998 141 56.7998 140 C 57.1001 140.2998 57.6001 139.2998 58 140 C 58 141.7002 57.8999 141.2998 58.1001 142.7002 C 58.2002 142.7002 L 57.7998 143.1001 58.5 143.8999 57.7998 144.3999 C 57.8999 144 58.7002 145.3999 58.1001 145.6001 C 58.1001 146 58.7998 145.7998 59 145.7002 C 59.1001 144.7002 60.1001 144.5 60 143.5 C 60.6001 143.2998 60.1001 141.2002 61.3999 142.2998 C 61.8999 143.6001 61.2998 144.7998 61.7002 146.3999 C 61.6001 146.3999 L 61.8999 147.3999 61.7002 148.2998 61.7998 149.7998 C 63.5 148.6001 63.2002 147.2998 64.3999 145.7998 C 65.2002 145.8999 64.8999 146.7002 65.2998 147.1001 C 65.2998 147.5 64.6001 148.2998 65 148.7002 C 64.6001 149 65 149.2998 65.2002 149.6001 C 65.2002 151.2998 L 65.2998 151.2998 65.3999 151.5 65.5 151.6001 C 65.6001 151.7002 65.3999 151.7998 65.2998 151.8999 C 65.5 152.2002 L 65.8999 151.3999 67.2998 150.7998 67 149.6001 C 67.6001 148.8999 67.7002 147.5 68.5 146.6001 C 68.7002 146.6001 68.8999 146.2002 69.1001 146.5 C 69.1001 146.7998 L 69.5 146.5 68.8999 145.8999 69.6001 146.2002 C 69.7002 146.6001 L 69.7998 146.5 L 69.7002 147.5 70.8999 147.8999 70.3999 148.8999 C 70 149.6001 L 70.1001 149.7998 70.6001 149.7002 70.3999 150.1001 C 70 149.6001 70.2998 150.6001 70.1001 150.7002 C 70.2002 150.6001 L 70.2998 150.7002 70.2998 150.7002 70.2998 150.7998 C 69.3999 151.2002 69.8999 152.8999 70.1001 153.7998 C 70.2002 154.1001 70.3999 154.2998 70.2998 154.7002 C 71.3999 154.7002 70.7998 153 71.7998 153 C 72.1001 152 72 150 73.2998 149.5 C 74.1001 150.1001 73.2998 151.2998 74 151.8999 C 73.7002 151.8999 L 74.5 152.5 74 153.7002 74.2002 154.7002 C 74.2998 154.6001 74.3999 154.7998 74.5 154.8999 C 74.5 155.2002 74.2002 155.1001 74.2002 155.3999 C 74.2002 155.7998 74.5 156 74.7998 156.3999 C 76 154.3999 75.2002 152.8999 76.7998 151.2002 C 77.7002 151.6001 77.5 151.8999 78 152.5 C 77.7998 154 77.6001 155.2998 78.2002 157 C 78.3999 156.7998 L 78.6001 157.2002 78.2998 157.6001 78.5 158 C 78.6001 157.2998 79.1001 157.1001 79.2002 156.5 C 79.6001 154.7998 79.6001 152.5 79.8999 150.7002 C 80 150.7998 L 80.7002 150.3999 79.7002 149.3999 80.8999 149.2998 C 81.3999 149.7002 81.2998 150.8999 81.2002 151.2002 C 81.3999 151.2002 81.6001 151.1001 81.7002 151.2998 C 81.3999 151.8999 L 82.2002 151.7002 81.7002 152.7002 81.7998 153.1001 C 82 153.1001 L 81.5 154.2998 82.5 154.8999 82.3999 156.2002 C 82.7002 155.7002 83.8999 154.8999 83.6001 153.6001 C 84.1001 153.1001 L 84.1001 149.5 L 84.5 149.5 L 84.7002 148.7002 84.2002 147.8999 85.1001 147.6001 C 85.2002 147.8999 85.7998 147.8999 85.6001 148.3999 C 85.8999 148.3999 L 86.2998 150.7998 85.6001 153.1001 86.5 155.2998 C 86.3999 155.3999 L 86.6001 155.6001 L 87.2998 154.7002 87.1001 153.7002 87.7998 153.1001 C 87.7998 151.2002 88.5 151.1001 88.3999 149.2998 C 89.2002 149.2998 88.8999 146.6001 90.1001 148.2998 C 90.1001 148.7002 L 90.3999 148.7002 L 90.7998 149.5 90 150.8999 90.7002 151.6001 C 90.5 151.7998 L 90.2998 151.7002 90.3999 151.6001 90.3999 151.3999 C 90 151.8999 90.7002 152.2002 90.7998 152.6001 C 90.5 153.8999 91.2998 155 91.6001 155.8999 C 92.2002 154.6001 92.2998 153.3999 92.3999 152 C 92.5 150.6001 93.1001 149.7002 93.5 148.2998 C 93.6001 148.3999 L 94.1001 147.6001 L 95.1001 148.2002 94.5 148.7002 94.7998 149.5 C 94.6001 150.2998 94.8999 151 94.7002 151.7998 C 94.7998 152.3999 95.3999 151.5 95.2998 152.2998 C 94.7002 152.5 95.3999 152.7998 95.2998 153.1001 C 95.6001 154.3999 96 155.7998 96.3999 157.2002 C 97 155.2002 97.3999 153.2002 97.8999 151.3999 C 98.1001 151.2002 98.5 151.2998 98.7998 151.2998 C 98.7998 152.2002 100.1001 153 99.5 154 C 99.5 155 L 99.6001 154.8999 L 99.6001 156 100.2998 157.2998 100.1001 158.6001 C 100.8999 159.1001 100.2998 159.7002 101 160.2998 C 101 160.3999 101.1001 160.5 101.2002 160.6001 C 102 159.7002 101.3999 158.2998 102.1001 157.3999 C 101.6001 157.1001 101.7998 156.3999 101.7998 155.7998 C 101.7998 155.6001 102 155.6001 102.1001 155.6001 C 102.1001 155.2002 102.2002 154.7998 102.5 154.3999 C 103 154.7998 103.3999 154.6001 103.7002 155.2998 C 103.3999 155.5 L 103.7002 155.5 L 103.7002 157.6001 L 103.7002 157.3999 103.8999 157.3999 104 157.3999 C 103.5 159 104.3999 160.1001 104.5 161.7998 C 104.7002 161.7002 104.8999 161.7998 104.8999 162 C 104.8999 162.3999 L 104.8999 162.2998 105 162.2002 105.1001 162.2002 C 104.6001 163 105.8999 162.7998 106.2002 162.7002 C f 172 159.6001 m 172.2998 159.7998 L 172.2998 159.7002 L 172.7998 159.7002 173.3999 159.7998 173.7998 159.3999 C 174.1001 159.3999 175.1001 159.7002 175.7002 159.6001 C 176.2998 159.7998 178.2998 160.2998 178 159 C 178.3999 158.7002 178.5 158.2998 178.3999 157.7998 C 178.7998 157.7998 L 179.5 154 179.5 150.3999 179.2998 146.2998 C 178.7998 145.2998 178.7002 143.5 179.2998 142.7002 C 179.5 142.7002 179 142.6001 178.8999 142.3999 C 178.8999 142.1001 179.5 141.6001 178.8999 141.5 C 179.5 140.2002 179.7002 138.6001 178.7998 137.3999 C 177.7002 136.2998 L 173.2002 136.8999 169.6001 135.7998 165.2002 136.2998 C 164.6001 136.6001 163.7998 138.6001 163.7002 139.7002 C 164.8999 141.2998 167.5 141.2998 170.2002 141.2002 C 171.3999 141 172.2998 141.1001 173.5 141.6001 C 173.8999 141.2998 174.2998 141.7998 174.6001 142.1001 C 174.6001 142.2002 L 174.7998 142.2002 L 174.7002 143.2998 175.7002 144.7998 174.1001 145.3999 C 171 146.2002 167.3999 144.7998 164.3999 146.3999 C 164.6001 146.5 164.5 146.7002 164.5 146.8999 C 163.7998 147.2002 164.3999 148.7002 164.2998 149.3999 C 164.7998 149.1001 164.7998 150 165.3999 149.8999 C 165.2002 150 L 167.8999 151.7998 171.2998 149.6001 174.3999 150.5 C 175.5 151 174.5 151.8999 175.6001 152.3999 C 175.2002 152.3999 L 175.5 152.7002 175.5 153.5 175 153.7002 C 172.3999 155.7998 167.7002 153.7002 165.2002 155.5 C 164.7002 156.2998 164.2998 157.3999 164.2002 158.5 C 164.5 158.2998 164.7002 159.2002 165 158.7998 C 166.3999 160.2998 169.2998 159.7002 171.1001 160 C 172 159.6001 L f 135.7002 157.1001 m 135.1001 153.6001 129.7998 154.8999 127.1001 154 C 126.2998 153.7998 124.2998 154 124.7002 152.5 C 123.8999 151.7002 125.1001 151.2998 125 150.3999 C 128.1001 149.2002 131.5 151.2002 133.8999 149.5 C 134.1001 149.2002 136.1001 148.2998 135.2002 147.1001 C 134.6001 147 134.6001 145.8999 133.6001 145.6001 C 130.7002 144.3999 127 146.6001 124.7998 143.5 C 124.2002 142.5 125.3999 141.7002 126 141.3999 C 127 141.2002 127.8999 140.6001 129 141 C 129 140.8999 L 130.6001 140.6001 133.2998 141 134.7998 140 C 134.5 139.3999 135.2998 139.7002 135.3999 139.2998 C 137 137 133.6001 136.7998 132.3999 136 C 129.6001 135.3999 126.2002 135.8999 123 136.1001 C 121.7998 135.8999 120.8999 137.1001 120.6001 138.2002 C 120.6001 139.3999 120.7002 140.5 120.1001 141.7002 C 120 141.6001 L 120.1001 143.7998 119.7998 144.8999 119.7998 147.6001 C 120.2002 147.5 L 120.2002 149.5 L 119.8999 148.8999 L 119.8999 150.3999 120.1001 152.2998 119.8999 153.7998 C 120.5 154.1001 120 154.8999 119.8999 155.3999 C 120.7002 155.2002 119.6001 156.1001 120.5 155.7998 C 119.8999 156.3999 120.7998 157.2998 121.1001 158.3999 C 121.2998 158.2002 L 121.3999 158.5 121.6001 158.7002 121.6001 159.1001 C 121.7002 159 L 122 159.6001 L 126.6001 157.5 132.1001 161 135.7002 157.1001 C f 49.8999 150.5 m 49.7998 150.6001 L 49.6001 148.6001 46.7998 147.1001 45.6001 145.6001 C 44 146.1001 41.7998 146.1001 40.2998 145.1001 C 40 144.1001 41.6001 144.7002 41.8999 144.2002 C 42.7998 143.8999 43.6001 143.5 44 142.7002 C 43.3999 142.2998 42.2002 142.2998 41.8999 141.7002 C 41.6001 142 L 39 140.8999 L 39.5 139.6001 42 140 41.3999 138.7002 C 40.2998 137.7998 38.8999 137.2998 38 136.2002 C 38.7002 135.7002 39.5 134.8999 39.3999 133.8999 C 39.3999 134 L 38.1001 133.2002 36.7002 132.7998 35.2002 131.7998 C 35.2998 130.8999 36.3999 131 36.6001 130.2002 C 36.2998 128.6001 32.5 128.1001 34.7998 126 C 34.2002 125.7998 34.6001 124.8999 33.7998 124.8999 C 34 124.7998 L 33.2002 123.7998 31.6001 123.6001 32.3999 121.7002 C 32.8999 121.3999 L 32.6001 121.1001 32.5 121.6001 32.2998 121.2002 C 30.6001 120.3999 30.6001 117.7002 30.5 115.8999 C 30 115.2998 30 114.6001 29.5 114 C 29.7998 112.5 28.3999 111.3999 28.8999 110.2002 C 27.8999 111.2998 28.3999 113.5 28.2002 115.3999 C 28 115.3999 28 115.6001 27.7998 115.7002 C 28.2002 115.7002 L 27.8999 116.3999 28 116.5 27.7998 117.2002 C 28 117.1001 L 28.2002 117.6001 28.3999 119.2002 28.2998 120.6001 C 28.6001 120.6001 L 28.6001 121.1001 L 28.2998 121.1001 L 28.6001 121.8999 L 28.7002 121.7998 L 28.8999 123.1001 28.7998 124.1001 28.7998 124.8999 C 29 124.8999 L 29.3999 125.2998 28.6001 125.5 29.2998 125.6001 C 29.7002 126.5 28.7998 127.7002 29.8999 128.2002 C 29.5 128.5 L 29.6001 128.3999 L 30.2002 129.1001 29.7998 130 30.5 130.7002 C 30.1001 131.2002 L 30.6001 131.2002 30.2998 131.8999 30.3999 132.2002 C 30.6001 132.2002 30.7002 132.3999 31 132.6001 C 30.6001 133.5 31.5 134.5 31.6001 135.5 C 31.8999 136.5 31.8999 136.3999 32 137.6001 C 33 137.3999 32.2002 138.7998 32.6001 139.1001 C 31.7998 140 33.7998 140.1001 33.1001 141 C 33.3999 141.2002 33.2998 142.3999 34.2002 142.6001 C 34.2002 143.2998 L 34.2998 143.2002 L 34.7998 143.5 34.3999 144.7998 35.3999 145.1001 C 34.8999 145.3999 35.3999 145.7998 35.3999 146.2002 C 35.5 146.1001 35.5 146 35.6001 146 C 35.5 147.3999 36.7998 148.5 38 149.5 C 38.7002 148.8999 39 150.1001 39.6001 149.3999 C 39.8999 149.5 40.8999 149.1001 41.3999 149.2998 C 44.2998 149.5 47.6001 150.1001 50 151.3999 C 50 151.1001 49.6001 150.7998 49.8999 150.5 C f *u 159.5 158.2998 m 159.8999 155.5 151.6001 151.8999 158.2002 150.6001 C 158.7998 150.5 158.8999 149.7998 159.3999 149.5 C 160.1001 149.2002 159.8999 147.3999 159.7998 146.6001 C 159.1001 145.2002 155.6001 144.7998 156.1001 142.2998 C 157 141.7002 158.6001 141.1001 159 139.7002 C 159.6001 139.6001 L 159.6001 138.2002 159.2998 137.2002 158 136.2998 C 155.5 137.1001 152.8999 138.3999 150.6001 139.7998 C 146.2998 140.7998 145.1001 134.8999 140.8999 136.7002 C 140.6001 137.2002 140.3999 137.7002 139.8999 137.8999 C 139.5 140 142.2998 141.2002 143.7998 142.3999 C 143.6001 144 141.7002 144.7002 140.7998 145.8999 C 140.2998 146.5 140 147.6001 140.2002 148.3999 C 140.2998 148.2998 L 140.5 148.3999 140.6001 148.7998 140.3999 148.8999 C 139.8999 149 140.5 149.2998 140.5 149.5 C 140.7998 149.7002 141.1001 149.3999 141 150 C 141.7998 149.7002 141.7998 150.8999 142.2998 151 C 142.6001 151.5 144 152.2998 143.7998 153 C 142.2002 154.6001 139.5 155.5 140.2002 158 C 143 159.7998 145.6001 157 147.7002 156.2002 C 148.1001 155.8999 148.8999 155.5 149.7998 155.5 C 151 156.1001 152.2998 156.3999 153.5 157.3999 C 153.3999 157.6001 L 154.3999 157.6001 154.7998 158.8999 156.3999 158.8999 C 156.8999 159.2998 157.7998 159.1001 158.3999 158.8999 C 158.7998 158.2998 158.7998 158.5 159.5 158.2998 C f 1 D 149 149.3999 m 147.6001 149.2002 147.7002 148.7002 146.7998 148 C 146.8999 147.1001 147.8999 146.7002 148.6001 146.5 C 149.8999 145.7002 151.2998 146.6001 152.7998 146.6001 C 152.6001 147 153 147.7002 152.8999 147.6001 C 152.7998 148.1001 152.7002 148.7002 152.2002 148.7998 C 151.2998 148.8999 150 149.7002 149 149.3999 C f *U 0 D 184.3999 145 m 184.8999 144.6001 185.2002 143.6001 185.7998 142.8999 C 186.7998 139.8999 189.1001 137.3999 189.2002 134.5 C 189.7002 133.7998 190.2998 132.6001 190.3999 131.5 C 190.7002 131.5 L 190.6001 129.8999 191.5 129.1001 191.5 127.2998 C 192.1001 125.7002 192.2998 123.2998 193 121.7998 C 193 119.5 194.1001 117.3999 193.7002 115.1001 C 194.2002 113.7998 194.1001 112.7998 194.2998 111.5 C 194.5 111.5 L 194.2002 105.2002 195.3999 100.2002 194.2002 93.7998 C 193.8999 90.6001 193.7002 88 193.3999 85 C 192.6001 84 193.2002 82.7998 192.7002 81.7998 C 192.3999 78.3999 191 74.5 190.2002 71 C 189.6001 70.7002 189.7998 69.7998 189.6001 69.5 C 188.8999 67.1001 187.6001 64.8999 187 62.2998 C 186 62.2002 186.7998 60.8999 186 60.7998 C 186.1001 60.5 185.8999 60.1001 185.6001 60.1001 C 184.2998 56.3999 182.2998 53.5 180.1001 50.2998 C 180.2002 49.7998 L 179.7002 49.7998 179.6001 49.2002 179.5 48.7998 C 178.1001 46.8999 176.5 44.8999 175.2002 43 C 175.2998 42.7998 L 173.2002 40.5 171.6001 38.5 169.3999 36 C 162.1001 28.2002 154.2998 21.5 144.6001 16.1001 C 129.8999 8.2998 113.3999 3.8999 97.1001 4.3999 C 96.7998 3.7998 96.5 4.7998 96.2002 4.3999 C 87.8999 3.7002 79.8999 6.7998 71.6001 8.7998 C 71.3999 8.5 L 69.6001 9.6001 67.2998 10 65.5 10.3999 C 55.7002 13.7002 45.5 19.1001 37.2998 26 C 37.2998 26.6001 36.3999 26.6001 36.3999 27.1001 C 33 29 31.2998 32.2998 28.7002 34.7998 C 28.8999 35.7002 28 34.8999 28.2998 35.6001 C 32.7998 32.2002 38.5 27.3999 43.7002 24.7998 C 47.2002 22.7002 51.1001 21 54.5 18.5 C 56.5 17.5 58.3999 15.2998 60.3999 13.8999 C 60.7998 13.3999 61.7002 14.2002 61.2998 14.6001 C 62.7998 15.7002 63.5 14.7998 64.7002 14 C 65.3999 13.2998 66.3999 11.2998 67.7998 11.7998 C 68.3999 13.3999 L 71.5 13.8999 72.3999 10.6001 74.5 9.6001 C 75 10.3999 74.2998 11.5 74.8999 12.1001 C 76.7998 11.7002 77.6001 10.7998 78.6001 9.1001 C 79.2998 9.6001 79.8999 10.1001 79.7998 10.8999 C 81.1001 10.7002 83.2002 9.7998 84 8.8999 C 84.5 9.5 84.6001 10 84.7002 10.7998 C 86.7002 10.6001 88.1001 8.3999 89.6001 8.3999 C 90.1001 10.7998 L 90.5 10.5 91.6001 9.8999 92.2002 10 C 93.6001 8.7998 94 7.2002 96.2002 7 C 97 8.7998 94.2002 9.6001 96.1001 11.2002 C 97.5 10.6001 98.5 9.6001 99.6001 8.6001 C 100.5 8.7998 100.1001 9.8999 100.1001 10.2998 C 99.7998 10.6001 99.2998 10.8999 99.6001 11.3999 C 101.2002 12 102.7002 10.1001 104.2998 8.8999 C 104.8999 8.7002 105.7002 8.5 106 9.2002 C 106 10.6001 104.7002 10.3999 104.2002 10.8999 C 104.2002 12.2002 105.2998 11.7998 106.1001 12.2002 C 106.5 11.7998 107.2002 11.6001 107.6001 11.5 C 108.7002 10.6001 L 109 10.8999 109.2002 10.2002 109.6001 10.2002 C 110.1001 9.7002 111.7002 8.2002 113 8.7998 C 112.3999 10.2002 111.3999 10.7002 110.5 11.8999 C 110.6001 12 L 110.2002 12.6001 L 111.5 12.6001 112.3999 13 113.7998 12 C 114.6001 11.7998 115.7002 11.6001 116.7998 11 C 117.2002 11.7998 116.6001 12.3999 116.2998 13.1001 C 115.7998 13.1001 L 115.8999 13.3999 115.6001 13.8999 115.2002 14 C 116.2002 14.2998 117.6001 14.6001 118.2998 13.8999 C 119.7998 13.7998 119.6001 13.8999 120.6001 13.2002 C 121.1001 13.2002 122 12.7002 122.6001 13.2002 C 121.8999 13.8999 121 14.7998 121 15.3999 C 121.2998 16.6001 123.1001 15.6001 124 15.7002 C 125.6001 15.1001 126.8999 13.3999 128.3999 14 C 127.7998 15.5 126.6001 16.2998 125.5 17.2998 C 127.5 18.1001 129.6001 16.8999 131 16 C 132.6001 16.2002 L 132.7002 18.1001 127.8999 19.1001 130.8999 20.6001 C 131.5 20.1001 132.7002 20.2002 133.3999 19.2998 C 134.6001 18.7998 136.1001 18 137.5 17.2002 C 137.7002 17.3999 138.1001 17.2002 138.2002 17.5 C 137.7998 19.3999 135.8999 20.2002 134.5 21.2002 C 134.6001 21.3999 L 134.6001 21.8999 133.8999 21.5 134.2002 22.2002 C 134.2002 22.1001 L 137.2002 22.1001 139.6001 19.7998 142.8999 20 C 142.6001 20.3999 L 142.7002 20.3999 142.8999 20.3999 142.8999 20.5 C 141.7002 22 139.5 22.7998 138.3999 24.7998 C 139.7998 25 L 139.7998 25.2002 L 141.7002 24.7998 143.7998 23 145.7002 23 C 146.1001 24.6001 143.7002 25.2998 142.8999 26.2002 C 142.6001 26.5 142.2002 26.7002 142.6001 27.2002 C 143.2998 27.5 L 145 26.7998 147.7002 26.3999 149.2998 25.8999 C 149.5 25.8999 150.2002 26.2998 149.7998 26.6001 C 148.2002 27.7002 146.2002 28.2002 145.7998 30 C 147.8999 29.7002 150.6001 28.7002 152.6001 28.6001 C 152.7998 28.7002 L 151.7002 30.7002 149.2998 30.5 148 31.8999 C 148.7998 32.6001 148.8999 32.2998 150 32.8999 C 150.5 32.7002 151.3999 32.2002 152.2002 32 C 154 32.3999 156.2002 30.8999 158.2998 31.8999 C 158.2998 32.1001 158.1001 32.2002 158 32.2998 C 157.7002 32.2002 L 157.8999 32.3999 L 156.2998 34.2002 152.2998 34.2002 151.7002 36.1001 C 152.7998 36 154.7998 35.8999 156 35.7998 C 157.6001 35.6001 159.2998 35 161 35.6001 C 161.2998 36.2998 160.6001 36 160.2998 36.3999 C 160 36.3999 L 160 36.7002 L 158.2002 37.3999 156.5 38.3999 155.2002 39.3999 C 158.6001 39.1001 162.1001 38.7998 165 38.7998 C 165.2002 39.6001 164.1001 39.8999 163.3999 40.1001 C 161.7002 40.7998 159.7002 41.2002 158.2998 42.3999 C 159.1001 42.7002 161 42.1001 161.5 42.7998 C 162.2002 42.3999 162.8999 42.3999 163.6001 42.7998 C 165.3999 42.5 167.2998 42.7002 169.1001 42.5 C 169.2998 42.7002 169.2002 43 169.2002 43.2998 C 168.7002 43.5 167.7998 44.5 166.6001 44.5 C 165.2002 45.1001 163.3999 45.2002 162 46.1001 C 161.7002 46.6001 162.2998 46.7002 161.7998 47.2002 C 163.8999 48 166.1001 46.5 168.2002 47 C 168.8999 46.6001 169.6001 47 170.3999 47.3999 C 168.8999 49.2998 166.5 48.3999 164.7998 50.2002 C 165.8999 50.6001 168.1001 51.1001 169.8999 50.5 C 170.2002 50.7002 170.3999 50.7998 170.6001 50.5 C 172.2998 50.2002 174.2998 50.3999 175.7998 50.2998 C 176.3999 50.6001 L 175.8999 51.3999 174.7002 52.1001 173.8999 51.7998 C 171.8999 53.1001 170 53.1001 167.6001 53.8999 C 167.2002 54.3999 167.7998 54.7002 168.1001 55.1001 C 171 55.5 174.1001 55.3999 177.2002 55.3999 C 177.8999 55.8999 177 56.5 176.7998 56.6001 C 175.2998 57.3999 172 56.8999 171 58.3999 C 170.3999 58.2998 170.5 59 170 59.2002 C 172.2998 60.2998 175 59.2998 177.3999 60.1001 C 177.2002 60.2002 L 177.7998 60.2002 178.2002 60.7002 178.7002 61 C 177 62.8999 174 61.3999 172.2002 63.3999 C 172.3999 63.8999 173.7998 63.6001 174.3999 63.7998 C 176.6001 64.2998 179.2998 64.1001 181.6001 65.2002 C 181.6001 66.1001 180.2002 66.2002 179.6001 66.3999 C 177.8999 66.7002 175.2998 66.2002 173.8999 66.7002 C 173.8999 67.1001 L 175.2998 67.2998 176.7998 68 177.7998 68 C 178 68.3999 178.8999 68.2998 179.3999 68.7998 C 180.8999 69 182.7002 69.1001 184.2002 69.6001 C 184.3999 70 L 182.7002 70.7998 181.3999 70.7998 179.3999 71.2998 C 178.2998 71.7998 177 71.2002 175.8999 71.3999 C 176.7998 73.7998 179.5 72.8999 181.2998 73.7998 C 182.3999 73.7998 183.1001 74.1001 183.6001 75 C 181.7998 77.1001 178.8999 74.5 177.2002 75.7998 C 176.7998 78.3999 181 77.2002 181.7998 78.6001 C 183.5 78.7998 185.2998 79.2998 186.7002 79.7998 C 187 80.2998 L 184.7002 81.1001 181.2002 81 178.7002 81 C 178.6001 81.6001 179.1001 82.2998 179.6001 82.7002 C 180.2002 82.7002 180.3999 83.1001 180.7998 83.2998 C 182.6001 84.2002 183.2002 83.7998 184.8999 85.1001 C 183.5 87.2002 181.2998 85.5 179.3999 85.3999 C 179.1001 86.3999 179.5 87.3999 180 88.2002 C 180.7002 88.2002 180.7002 88.7002 181.1001 89 C 183.7002 90.5 185.7998 91 188.5 92.2002 C 188.8999 92.7998 L 185.8999 94.7998 183.3999 91.3999 179.8999 92.3999 C 180.6001 92.7998 179.7998 93.5 180.2002 94.2002 C 181.6001 94.7998 183.2002 95.2998 184.2002 96.2002 C 184.8999 96.2998 185.7998 97.2002 186.6001 97.2998 C 188 97.5 189 98.6001 190.2998 99.1001 C 187.2002 100.7002 184.2998 97.7002 181 98 C 180.2998 99.5 180.7002 100.3999 182.2002 101 C 183.7002 101.7998 185.2002 102.6001 186.5 103.7002 C 186.5 103.6001 L 186.8999 103.2998 186.8999 103.8999 187.2002 104 C 187.2002 103.8999 L 188.1001 104.1001 188.2002 105.2998 189.6001 105.3999 C 189.7002 106 L 188.8999 106.2002 L 186 105.3999 183.3999 104.2998 180.5 103.8999 C 180.7998 104.6001 181.3999 105.3999 181.7998 105.5 C 182.3999 106.3999 183.6001 107.3999 185 107.5 C 185 108.1001 186 107.8999 186.3999 108.7998 C 185.7998 109.5 184.3999 108.8999 183.7002 109.7998 C 183.5 110.2998 184.6001 110.3999 184.2002 111.2002 C 184.7998 111.3999 184.8999 112.5 185.6001 112.6001 C 185.2002 112.8999 187.2002 114 185.3999 114.1001 C 184.1001 113.5 L 183.7998 114.7998 183.6001 116.1001 184.2002 117.3999 C 184.2998 117.2002 L 184.7998 117.8999 185.7002 117.7998 186.3999 118.7998 C 185.7998 119.3999 L 185.2998 119.2998 184.6001 119.1001 184.1001 119.2002 C 184.2998 121.5 184 123.3999 184.2998 125.8999 C 184 126.6001 184.5 127.6001 183.7998 128.2002 C 184.6001 128.7002 183.7002 129.2002 183.7998 129.7998 C 183.7002 129.7002 L 183.7998 130.7002 183.6001 132.1001 183.5 133.2998 C 183.2002 133.2998 L 183.5 133.8999 183.2002 134.6001 183.5 135 C 183.1001 135.2998 183.5 135.3999 183.2002 135.7002 C 183.5 136 L 183 136 L 183.2998 136.8999 182.8999 139.2002 183.2002 140.5 C 183.5 140.7998 L 182.8999 141.6001 183.6001 142.2998 183.1001 143.3999 C 183.7002 143.3999 183.5 144.7002 183.7002 145.1001 C 183 145.3999 183.7998 146.2002 183.6001 146.8999 C 183.7002 145.8999 184.2998 145.8999 184.3999 145 C f 131.8999 132.7998 m 132.8999 132.5 134.2002 132.7002 135.3999 132.7998 C 135.3999 132.7002 L 138.8999 132.2002 141.7998 132.7002 145.1001 132.5 C 145.6001 132.6001 L 145.6001 132.5 L 146.2998 132.5 147.8999 132.7002 149 132.3999 C 150 133.2998 151 132 151.8999 132.6001 C 154.7002 132.7998 157 132.2002 160 132.6001 C 160 132.5 L 165.2998 132.2002 172.7002 132.5 178 132.2002 C 178.2998 131.6001 179.2002 131.2002 179.5 130.6001 C 179.2998 126 179.8999 120.5 179 116.2998 C 179.2002 115.2998 179.2998 114.2998 179.3999 113.5 C 178.7002 112 180.5 109.7998 177.7998 109.2002 C 176.7998 109 176 109.3999 175.2002 109.8999 C 175.1001 110.7998 174.8999 112.1001 175 113.2002 C 175 114 174.3999 116.6001 175.1001 118 C 175.3999 119.7998 174.2002 120.8999 175 122.6001 C 173.8999 122.7998 174.6001 124 174.6001 124.6001 C 174.6001 125.8999 173.7998 127.1001 173.2998 128.5 C 171.1001 129.3999 169.6001 128.2002 167.5 128.6001 C 165.2998 129 162.2998 129.1001 160 128.5 C 150.3999 128.3999 142.1001 127.7998 132.2002 128 C 132 127.7998 L 130.3999 127.8999 127.5 128.1001 126.2002 127.2002 C 125.8999 126.2002 125.7998 125.7002 125.5 124.8999 C 125.7002 123.8999 125.2998 122.7998 125.7998 121.8999 C 125.5 121.6001 L 126 121.3999 L 125.7002 120.2002 126.1001 118.6001 125.6001 117.5 C 126 116.7998 L 125.7998 116.7998 125.7998 116.6001 125.6001 116.5 C 125.7002 114.7002 125.5 113.1001 125.3999 111.3999 C 124.5 110.7002 125.7998 108.1001 123.7998 108.6001 C 122.6001 108.3999 121.2998 108.8999 120.6001 109.7998 C 120.7002 110.7002 120.3999 111.7998 120.6001 112.7998 C 119.8999 113.1001 121 113.2998 120.6001 113.7998 C 120.3999 115.5 120.5 117.6001 120.5 119.5 C 120.7002 119.5 L 120.2002 119.7998 120.7002 120.2998 121 120.7002 C 120.6001 120.7998 121 121.3999 120.7002 121.7002 C 120.2998 121.3999 121.5 122.1001 120.7002 122.2998 C 120.7998 122.2002 120.8999 122.2998 121 122.3999 C 120.7002 122.6001 L 120.8999 122.6001 121 122.7998 121.1001 122.8999 C 120.6001 122.7998 121 123.7998 120.7002 124.1001 C 120.7998 124.1001 L 121 125.5 120.7998 125.7998 120.7998 127.7002 C 120.6001 128.2998 120.7002 128.2998 120.7998 129.1001 C 121 129.1001 L 120.7002 130.2002 L 121 130.2002 L 120.1001 130.5 121.6001 131.2002 121.1001 131.6001 C 121.8999 132.1001 122.3999 132.1001 V 122.6001 131.8999 L 123.2002 132.3999 124 131.7998 124.2998 132.6001 C 130.2002 132.7998 L 130.2002 132.7002 L 131.8999 133 L 131.8999 132.7998 L f *u 135.3999 123 m 135.7002 122.7998 L 135.2002 122.3999 L 135.6001 121.8999 L 135.5 122 L 135.2998 121.8999 135.3999 121.7002 135.3999 121.6001 C 135.3999 121.3999 135.6001 121.3999 135.7002 121.3999 C 135 119.3999 135.5 117.6001 135.2002 115.2998 C 135.2002 114.3999 135.7998 114 136.1001 113.3999 C 136.2002 113.5 L 137.3999 111.7002 140.8999 112.8999 142.8999 112.7002 C 144 112.6001 144.7002 113.3999 145.8999 112.7998 C 146.5 113.3999 148.2002 113 147.5 114.2002 C 145.2998 117.2002 141.2002 113.2002 139.7998 117.2002 C 139.5 118.2002 139.3999 119.1001 139.3999 120.2002 C 139.3999 120.1001 L 139.7998 119.7998 139.6001 120.5 139.7998 120.6001 C 139.3999 120.6001 L 140.3999 120.8999 139.6001 121.8999 140.2002 122.5 C 140.1001 122.3999 140.2002 122.2998 140.2998 122.2998 C 140.3999 122.2998 L 139.8999 122.7998 140.8999 123.1001 140.3999 123.6001 C 140.8999 123.3999 L 140.7998 123.8999 141 124.7998 141.6001 124.8999 C 147.6001 124.8999 152.7998 124.5 158.8999 124.7002 C 159.6001 123.6001 160.3999 122.7002 160.1001 121.1001 C 160.2002 120.7998 160.3999 120.2998 160.3999 120.1001 C 160.3999 120.2002 L 159.7002 118.6001 160.7998 115.8999 157.7002 115.6001 C 155.8999 115.2002 154 115.5 152.8999 114.1001 C 152.8999 112.7998 154.5 113.3999 154.8999 112.6001 C 157.6001 112.3999 161 112.3999 164.2002 112.6001 C 165.2998 113.6001 164.5 115.2998 165.2002 116.2002 C 164.7998 116.7998 165.3999 117.1001 165 118.1001 C 164.7998 118 164.7998 118.2002 164.6001 118.2998 C 164.7002 119.2002 165 121.1001 165.2002 121.8999 C 164.8999 122.2998 L 165.8999 122.7002 164.2998 124 165.7998 124.2002 C 165.7002 124.7998 166.7002 125.5 167.2002 125.7998 C 167.6001 125.7998 L 167.7998 125.3999 168.3999 125.2998 168.7998 124.8999 C 169.7002 123.7998 L 169.8999 121.3999 169.6001 118.1001 169.8999 115.2998 C 169.7002 115.1001 L 169.7002 109.1001 L 164 107.7998 158.8999 108.6001 153.2002 107.8999 C 151.8999 106.2002 152.5 103.5 150.5 102.3999 C 149.3999 102.2998 148.2998 102.7998 147.6001 103.3999 C 146.8999 104.3999 148.1001 105.3999 146.8999 106.2002 C 147 106.7002 147.1001 107.1001 146.8999 107.6001 C 145.3999 108.3999 L 141 108.6001 136.3999 107.8999 131.5 108.3999 C 130.7998 110.1001 131 111.2002 130.3999 112.7998 C 129.8999 113.2002 131 113.8999 130.2002 114.2002 C 130.2998 116.3999 129.7998 119 130.7002 120.7998 C 129.6001 120.7002 131.3999 121.5 130.3999 121.8999 C 130.1001 122.3999 131 122.2002 130.6001 122.6001 C 130 124 130.8999 125 132.1001 125.7998 C 132.7002 125.7002 133.6001 126.2002 134 125.5 C 134.5 124.7998 135.3999 124.2998 135.3999 123 C f 1 D 148.6001 121.1001 m 147 120.8999 145.2998 122.2002 144.1001 120.2002 C 143.6001 119.5 144.5 119.7002 144.7002 119.2002 C 147.7998 118.3999 152.1001 119 155.2998 119.2002 C 155.5 119.7998 L 155.2998 119.7998 L 155.2002 120.5 154.3999 120.6001 154.1001 121 C 152.2002 121.2002 150.6001 121.6001 148.6001 121.1001 C f *U 0 D 162.6001 105.7998 m 162.7998 105.1001 164 105.3999 164.2998 105.1001 C 165.7998 104 168.1001 102.1001 169.2998 100.6001 C 169.3999 99.8999 169.7002 98.7998 169.1001 98.7998 C 165.7002 100.3999 162.5 102.3999 159.7002 105 C 159.7002 105.1001 158.7998 105.1001 159.1001 105.5 C 160 105.7002 160.7002 105.6001 161.7998 105.6001 C 161.8999 106 L 162.2002 105.7998 162.2002 105.5 162.6001 105.7998 C f 144.3999 104.5 m 144.5 102.7002 145.6001 100.2998 147.2002 99.3999 C 147.7002 99 148.2998 99.2002 148.6001 98.5 C 150.2998 99.5 151.8999 98.7998 153.1001 97.7998 C 153.7002 96.3999 156.1001 95.1001 157.2998 94.6001 C 157.5 94.2998 157.3999 94 157.3999 93.7002 C 157.6001 93.6001 158.5 92.7002 158.5 91.7998 C 158.8999 91.8999 159.2002 91.2998 159.2002 91 C 159.3999 91.1001 L 162.2002 87.6001 165.1001 84.7998 165.7998 80.2002 C 165.3999 79.7002 165.6001 78.7002 165.3999 77.8999 C 163.8999 78.2002 164 80 162.7998 80.8999 C 160.5 84 157.6001 87 154.3999 89.7998 C 153.6001 90.7998 152 92.2002 150.7998 93.1001 C 150.6001 92.7998 150.1001 92.5 150.5 92.2002 C 150.3999 92 150.6001 91.8999 150.7002 91.7998 C 151 92 L 151.5 90.7998 152.2998 89.6001 153.1001 88.6001 C 155.3999 85 L 155.5 85.1001 L 156.8999 83.6001 157.8999 81.1001 159 79.8999 C 159.1001 78.1001 161 77.8999 160.8999 76.1001 C 161.2002 76.1001 L 161.5 75.2002 161.6001 74.1001 162.2002 73.3999 C 162.2998 72.3999 163 72.1001 163 71 C 163 70 162.2998 69.7998 161.8999 69.1001 C 159.3999 72.6001 L 159.5 72.7002 L 154.2002 80.7002 148.7998 87.7002 141.5 94 C 141 94 L 140.8999 94.2998 140.2002 94.8999 139.7002 95.2002 C 139.2998 96 138.1001 95.5 138.1001 96.6001 C 137.8999 96.6001 L 137.7998 100.3999 L 138.3999 101 L 138 101.2998 L 138.3999 101.2998 L 138.3999 102.3999 138.2002 103.1001 139 103.8999 C 138.7002 104.7002 140.2998 104.7002 141.1001 105 C 144.3999 104.5 L f 158.2998 101.2998 m 158.5 100.1001 159.7002 100.2002 160.3999 99.2002 C 163.2998 96.5 165.5 94.1001 168.1001 90.3999 C 167.7002 89.5 169 88 167.5 87.2002 C 166.6001 88.3999 164.7998 89.5 164.2002 90.7002 C 163.2002 91 162.7002 92.3999 161.6001 93 C 160.6001 93.6001 159.7002 95.2002 158.7998 95.8999 C 157.3999 97.5 155.2002 98.7998 154.2998 100.7002 C 155.2002 101.7998 L 155.1001 102 155.7002 102.6001 155.6001 103.2002 C 156.2998 102.7002 157.5 101.7998 158.2998 101.2998 C f 136.7998 93.7002 m 136.8999 93.8999 137.5 93.2998 138 93.5 C 138.5 92.7998 139.6001 93.2002 140.2002 92.3999 C 142.1001 91.2998 142.6001 90 144.7002 88.3999 C 144.7998 88.6001 L 145.2998 87.7998 L 145.3999 88 L 145.8999 87.3999 146.7998 86.3999 147.2002 85.7002 C 148.1001 85.8999 147.3999 83.8999 148.7998 84 C 148.6001 83.6001 149.1001 83 149.2998 83.2998 C 150 81.5 151.2998 81 151.7998 79.1001 C 152 79.1001 L 151.6001 78.6001 152.3999 78.7998 152.2002 78.2002 C 152.6001 78.2998 152.5 77.6001 152.8999 77.2002 C 153 77.2998 L 153.2998 75.7998 154.7002 74.2002 154.8999 72.6001 C 155.2002 72.6001 L 155.5 70 157.2002 67.7002 157.3999 65.6001 C 157.8999 65.2998 158.2002 64.7002 158 64.1001 C 158.3999 64.2002 L 159.5 62.3999 157.8999 60.8999 157.2998 59.7998 C 157.2002 59.7998 157.1001 60.1001 157 60 C 156.7002 59.7998 L 156.3999 60.6001 156.1001 61.5 155.6001 62.2002 C 155.1001 63.5 154.8999 66.1001 153.5 67.1001 C 152.1001 69.7998 151 72.2002 149 74.5 C 149.2002 74.5 149.2002 74.6001 149.2998 74.6001 C 147.6001 76.7002 146.5 79 145 80.2998 C 144.3999 79.6001 L 145 77.7998 146.2002 76 147 74.2998 C 146.7998 73 147.8999 72.7002 148.2002 71.2002 C 148.5 70.8999 148.1001 69.7998 148.7002 70 C 149.2002 68.1001 150 65.8999 150.7002 63.6001 C 151 63.6001 L 150.7002 62.1001 151.8999 61.5 151.7998 60.1001 C 152.8999 57.7998 152.3999 57 153.7002 54.7002 C 153.5 54.7002 152.2998 53.2998 151.7998 52.7002 C 150.8999 52.8999 151.7002 54.1001 150.7998 54.2002 C 151 54.2002 L 151 54.3999 150.7002 54.7998 150.6001 55 C 150.3999 55.6001 150.1001 57.1001 149.3999 57.7002 C 149.5 57.7002 L 149.2002 58.6001 148.5 59.7998 148.1001 60.6001 C 148.2998 61 147.7002 61.5 147.7998 61.8999 C 147.5 61.8999 L 147.7998 63 147 63.2002 146.7998 64.2998 C 146.5 64.2998 L 146.2998 65.2002 146 65.5 145.7998 66.6001 C 145.6001 67.1001 L 145.3999 67 145.3999 66.7998 145.3999 66.7002 C 145.2002 68.2998 143.8999 68.6001 143.5 70.2002 C 143 70.2002 L 142.7998 69.6001 142.8999 68.8999 142.8999 68.2998 C 143.2998 68.3999 L 143.7998 66.7998 143.6001 65 144.5 64 C 144.5 62.7998 144.8999 62.2002 145.1001 61 C 145.5 60.7998 145.2998 59.2002 146 58.8999 C 145.7998 58.3999 146.5 58.1001 146 57.5 C 147 54.8999 147.3999 50.8999 148.3999 48.2002 C 146.5 46.2998 L 145.3999 48.7998 144.5 51.3999 143.7998 53.6001 C 143.3999 54.7998 142.6001 55.7998 142.2998 57.3999 C 142.1001 57.3999 L 142.2002 57.6001 142.2998 58.1001 142.2002 58.2998 C 140.8999 58.6001 142.2002 60 141.1001 60.2002 C 141.2002 60.8999 140.5 61.7998 140.2998 62 C 140.5 62.2998 L 139.7998 62.5 140.3999 62.7998 139.7998 63.2002 C 139.6001 63.7002 139.2998 64.2002 138.7998 64.6001 C 138.7002 64.3999 L 138.7002 64.2998 138.7998 64.8999 138.6001 65 C 137.2998 65 138.3999 64.2002 138.1001 63.5 C 138.3999 63.2002 L 138.5 63.2998 138.5 63.5 138.5 63.6001 C 138.2998 62.7998 138.7002 62.6001 138.6001 61.7998 C 139.2998 61.5 139.2002 60.6001 139.1001 59.8999 C 139.7998 59.8999 139.6001 58 140 57.6001 C 140.2998 56.3999 140 55.2998 140.7998 54.3999 C 140.7002 52.2998 141.3999 51.1001 141.2002 49.2002 C 141.8999 47.2002 141.7998 44.7002 142.2002 42.6001 C 142.2002 42.2998 142.2998 41.6001 141.7002 41.3999 C 141.1001 41.2998 L 141.2002 41.5 141 41.6001 140.8999 41.7998 C 141 41.7998 L 140.7002 43.5 140.2002 44.7002 139.3999 46.2998 C 139.1001 46.7998 139.7998 47.7002 138.7998 47.8999 C 139.3999 49.1001 138.1001 50 138.1001 51.2002 C 137.7998 52.6001 L 137.6001 52.3999 L 137 54.5 135.8999 57.3999 135 59.2002 C 135.3999 59.8999 134.2002 60.1001 134.2998 60.7998 C 134.2002 60.7002 L 133.8999 61.2002 134.2002 61.7002 133.3999 61.7998 C 132.5 60.2998 134.2002 58.6001 133.7998 56.7998 C 134.2002 55.2002 134.7998 52.6001 135.1001 50.7998 C 135.5 50.5 135.1001 49.2002 135.7002 48.7998 C 135.6001 48.7998 L 136.1001 48 135.6001 46.5 136.2998 46 C 136.2002 46 L 136.7002 44.2002 136.2002 42 136.7002 40.7002 C 136.8999 40.7002 L 136.6001 39.7998 136.6001 40.1001 136.3999 39 C 136.3999 38.1001 136.1001 37.2998 135.3999 36.7002 C 134.2998 37.2002 134.8999 39.7002 134.2998 39.7002 C 134.3999 39.7002 L 134.1001 41.2998 133.6001 42.2998 133.3999 44.2998 C 133.1001 44.5 L 133.5 44.8999 132.7998 45.8999 133 46.3999 C 132.5 46.8999 132.8999 47 132.5 47.2998 C 132.7002 47.5 L 131.5 49.6001 131.2002 52.7002 129.7002 54.7002 C 128.5 52.7002 130.2998 48.8999 130.2998 46.6001 C 130.5 42.2998 131.5 38.7998 131 34.6001 C 130.8999 34.3999 130.7002 34.2998 130.7002 34.1001 C 130.7998 34 L 129.5 32.8999 L 129 33.7002 129.1001 34.7998 128.7998 35.3999 C 129.2002 36.1001 127.8999 37.2998 128.5 37.8999 C 128 38.6001 128 40.7002 128 41.3999 C 127.6001 41.6001 L 128.2998 42.1001 127.2002 42.2002 127.6001 42.7002 C 127.6001 43.3999 127.6001 44.2002 127.1001 44.5 C 127 45.1001 127.2998 45.8999 126.7998 46.2998 C 127.3999 46.7998 126.2002 47.2002 126.5 47.8999 C 126.7002 49.3999 125.7002 50.1001 125.5 51.5 C 125.3999 51.3999 125.3999 51.2002 125.3999 51.1001 C 125 51.7002 L 124.2002 51.7002 124.7002 51.1001 124.6001 50.5 C 124.6001 50.3999 124.7998 50.3999 124.8999 50.3999 C 124.6001 45.3999 126 39.2998 125.5 34.7998 C 124.8999 33.8999 125.2998 32.6001 124.7002 31.7002 C 124.6001 30.7998 124.1001 30.3999 123.7998 29.6001 C 123 31.1001 123.5 32.5 123 33.7998 C 123.1001 33.7998 L 122.3999 35.2002 123.5 36.7002 122.2998 38.2998 C 123.1001 39.2002 121.7002 40.2998 122.2002 41.6001 C 121.7002 42.1001 L 121.7998 42.1001 L 121.7998 42.2998 121.8999 42.7998 121.3999 42.7998 C 121.7002 42.7998 L 121.8999 43.2002 121.7002 43.7002 121.2998 43.7998 C 121.6001 43.7998 L 121.6001 44.2998 L 121.1001 44.2998 L 121.5 45.7998 120.3999 46.7998 120.1001 48.2002 C 119.7998 48 L 119.7998 48.1001 119.7998 48.2998 119.6001 48.3999 C 118.2998 45.7002 119.3999 42.2998 119.2998 39.7998 C 119.3999 39.7998 119.3999 39.7998 Y 119.2002 39.6001 L 119.7998 39.3999 119.2998 38.2002 119.6001 37.8999 C 119.5 37.8999 L 118.7002 35.6001 119.2998 32.7998 118.7998 30.2002 C 119 30.2002 L 118.3999 29.5 118.5 27.5 117 27.5 C 116.7998 27.2002 L 117 28.6001 115.8999 29.7002 116.2998 31.7002 C 116 31.8999 L 116.2002 33 116.2002 33.8999 116 35 C 116.2998 35.2998 L 115.7998 35.6001 L 116.2002 35.7998 L 116.3999 36.6001 116.2998 38.2002 116.2002 39.3999 C 116.2998 39.2002 L 116.1001 41.5 115.7998 43.2998 115.1001 45.3999 C 115.2998 46.1001 115.2002 46.7002 115.1001 47.5 C 113.8999 47.8999 115.2998 49.2998 114.3999 49.8999 C 115.1001 50.2998 113.7998 50.7002 114.6001 51.1001 C 114.5 51.3999 114.2998 50.8999 114.3999 51.3999 C 114.5 51.5 L 114.1001 51.5 L 114.1001 52.6001 L 114.2002 52.6001 L 114.1001 53.1001 114 53.3999 114.6001 53.8999 C 114.2002 54.1001 L 115.1001 54.6001 113.8999 54.8999 114.5 55.3999 C 115.1001 55.8999 115.6001 57 116.2998 57.5 C 116.3999 57.7002 117.1001 58.6001 117.3999 58 C 117.6001 58.2998 117.6001 58.3999 117.2002 58.7002 C 118.6001 60.2998 119.7998 61.2002 120.7002 62.8999 C 120.7998 62.7998 L 121.1001 63.1001 122.2998 64.3999 122.3999 65.2002 C 122.5 65 L 122.3999 65.8999 123.7002 65.7002 123.2002 66.6001 C 124 66.7002 124.2002 67.8999 124.3999 68.7998 C 125.7002 68.7998 124.8999 70 126 70.2998 C 125.5 71.3999 127.1001 71.2002 126.5 72.1001 C 126.7002 72.5 128 72.7002 127.7002 73.7998 C 128.7998 74 128 75.2002 128.7998 75.6001 C 129 76 129.3999 76.2998 129.2002 76.8999 C 129.3999 76.8999 129.3999 76.8999 129.5 76.7998 C 129.8999 76.8999 129.1001 77.3999 129.7002 77.2998 C 130.2002 77.7002 129.2998 78.2002 130.1001 78.5 C 130.1001 78.3999 130 78.2002 130.2002 78.1001 C 130.3999 78.3999 130.2998 78.8999 130.2998 79.2998 C 130.6001 79.1001 L 131 80.3999 L 131.2998 80.2002 L 131.6001 80.6001 131.2002 81.7002 131.6001 81.7002 C 131.8999 81.5 L 132 82.6001 L 132.2002 82.6001 132.2002 82.2998 132.3999 82.6001 C 132.6001 83.6001 L 132.7002 83.6001 132.7002 83.5 132.7998 83.5 C 132.7998 84.1001 L 133 84.1001 L 133.1001 85.1001 L 133.6001 85.1001 L 132.8999 86.2998 134.7998 86.2998 134.2002 87.6001 C 134.7002 88 135 88.7002 135.1001 89.2002 C 135.2002 90 L 136 90.5 135.7998 90.7998 136.1001 91.6001 C 136.6001 92 136.7002 93 136.7998 93.7998 C 136.7998 93.7002 L f 0 J 0 w 4 M 177 105 m 173 105 L 172.5 55 135.373 20.021 91.479 20.021 c 47.5845 20.021 7.5 55.5 12 114.5 C 1.626 108.4907 L 1.4585 106.2656 1.3735 104.0176 1.3735 101.75 c 1.3735 52.8184 41.0415 13.1499 89.9731 13.1499 c 138.9048 13.1499 178 52 177 105 C f 0.2 w 116.5 186.75 m 92.75 194.25 67 187.5 v 34.3887 178.9517 20.75 155.75 y 38.5 178.25 67.75 185.5 v 96.1782 192.5464 116.25 183.75 y 116.5 186.75 l f 0 w 77.25 162 m 75 164.5 l 42.25 149.5 32.5 113.75 v 43 144.75 77.25 162 v f 111 51.8335 m 109.937 52.9429 109.1665 52 108.1665 51.6665 c 107.1665 51.3335 102.1665 48.1665 98.1665 46.8335 c 94.1665 45.5 93.8335 45.1665 91.1665 45 c 88.5 44.8335 85.8335 44.1665 84 43.6665 c 82.1665 43.1665 80.3335 43.5 78.3335 44 c 76.3335 44.5 70.5 46.3335 67.3335 45.6665 c 64.1665 45 63.6665 43.1665 61.5 42.5 c 59.3335 41.8335 56.3335 41.6665 52.8335 43.3335 c 49.3335 45 47.0103 46.1846 45 47.3335 c 43.8335 48 42.9429 48.8501 42 50.5 c 41.3335 51.6665 38.4165 53.8335 35.5 55.8335 c 31.7988 58.3711 24.3335 63.6665 22.8335 65.5 c 27 57 28.5 55.3335 v 30 53.6665 30 52.3335 32.6665 52.3335 c 35.3335 52.3335 36.6665 51.8335 37.5 51 c 38 50.5 37.1665 50 35.8335 50.1665 c 34.9902 50.272 33.2739 50.1968 34.1665 48.6665 c 34.9165 48.75 35.5835 48.6665 v 36.25 48.5835 37.5 48.75 38.25 48.6665 c 39 48.5835 40.3335 48.1665 40.8335 47.4165 c 40.3335 46.75 39.3335 46.5 v 38.3335 46.25 37.1665 45.8335 37.75 45.3335 c 38.3335 44.8335 39.5835 44.3335 40.9165 44.5835 c 42.25 44.8335 44 45.25 44.6665 44.8335 c 45.3335 44.4165 44.8335 43.5835 43 43 c 41.1665 42.4165 40.9165 41.75 41.8335 41.4165 c 42.75 41.0835 44.5835 41.3335 45.5835 41.9165 c 46.5835 42.5 47 42.3335 47.4165 42.1665 c 47.8335 42 47.9165 41.4165 46.75 40.9165 c 45.5835 40.4165 44.5835 39.5 45.25 39.1665 c 45.9165 38.8335 48.3335 39.4165 49.1665 39.6665 c 50 39.9165 51.4165 40.25 52 39.8335 c 52.5835 39.4165 52.75 39 51.25 38.0835 c 49.75 37.1665 48.75 36.1665 49.3335 35.6665 c 49.9165 35.1665 51.3335 35.8335 52.0835 36.3335 c 52.8335 36.8335 55.4165 38.9165 56.25 38.3335 c 57.0835 37.75 55.9165 35.5 55.0835 34.5835 c 54.25 33.6665 53.8335 32.5 54.9165 32.0835 c 56 31.6665 56.6665 33 57.3335 33.75 c 58 34.5 63.4165 41.3335 64.4165 41 c 65.4165 40.6665 63.3335 36.5835 62.5 35.3335 c 61.6665 34.0835 59.25 29.9165 60.25 29.3335 c 61.25 28.75 64.0835 31.75 64.9165 33.25 c 65.75 34.75 67.9165 38.5835 68.75 38.25 c 69.5835 37.9165 69.5 36.0835 68.25 33.75 c 67 31.4165 64.9165 27.9165 66 27.25 c 67.0835 26.5835 69.3335 29.75 70.5835 32 c 71.8335 34.25 73.8335 38.25 74.9165 37.9165 c 76 37.5835 75.1665 35.25 74.0835 32.4165 c 73 29.5835 71.4165 25.8335 72.5835 25.5 c 73.75 25.1665 76.0835 27.6665 76.9165 29.9165 c 77.75 32.1665 80 37 81.25 36.6665 c 82.5 36.3335 81.8335 34.3335 81.4165 32.8335 c 81 31.3335 80.1665 28.0835 79.4165 26.6665 c 78.6665 25.25 78.8335 24.1665 79.4165 24.1665 c 80 24.1665 83.3335 28.5835 84.5 31.6665 c 85.6665 34.75 86.6665 37.8335 87.4165 38.1665 c 88.1665 38.5 88.1665 38.5 88.0835 37.8335 c 88 37.1665 88.0835 35.6665 87.9165 33.5835 c 87.75 31.5 87.25 28.4165 86.6665 27.1665 c 86.0835 25.9165 85.9165 23 86.75 23.0835 c 87.5835 23.1665 87.4165 24.5 88.25 25.25 c 89.0835 26 90.1665 28 90.5835 30.3335 c 91.75 31.9165 91.9165 33.3335 v 92.0835 34.75 92.5835 35.1665 92.8335 36.1665 c 93.0835 37.1665 93.3335 38.75 93.8335 38.5835 c 94.3335 38.4165 94.25 37.5835 94.3335 36.6665 c 94.4165 35.75 94.75 35 94.5 34.0835 c 94.25 33.1665 94.5 32.5835 94.3335 31.9165 c 94.1665 31.25 93.5835 29.8335 93.4165 28.5 c 93.25 27.1665 93.4165 25.9165 93.25 25.1665 c 93.0835 24.4165 93 23.0835 93.8335 23.6665 c 94.6665 24.25 95.5645 25.6519 95.75 28.25 c 95.8335 29.4165 96.9165 30.5 y 97.3335 30.75 97.4165 31.75 v 97.5 32.75 98.4165 37.3335 99.0835 37.25 c 99.75 37.1665 99.5835 36.6665 99.5835 35.6665 c 99.5835 34.6665 99.9165 32 99.5 30.25 c 99.0835 28.5 98.1665 24.25 98.6665 24.0835 c 99.1665 23.9165 100.8335 24.8335 101.1665 27.5835 c 101.5 30.3335 102.3335 31.75 102.4165 33.75 c 102.5 35.75 103.6665 38.5 104.3335 38.25 c 105 38 105 37.0835 105 36.25 c 105 35.4165 106 31.8335 105.5835 30.6665 c 105.1665 29.5 104.9165 27.0835 105 26.4165 c 105.0835 25.75 105.3335 24.75 105.8335 25.1665 c 106.3335 25.5835 106.9092 27.4375 107.25 30.25 c 107.5835 33 107.6665 34.9165 107.9165 35.8335 c 108.1665 36.75 107.9165 38.0835 108.25 38.5835 c 108.5835 39.0835 108.5835 39.4165 109.0835 38.5835 c 109.5835 37.75 110.25 36.5835 110.25 35.3335 c 110.25 34.0835 110.4165 30.1665 110 28.5 c 109.5835 26.8335 109.9165 26.0835 110.75 26.1665 c 111.7207 26.2637 112.5 28.1665 112.8335 31.3335 c 113.2173 34.9834 113.3335 41.6665 113 44.5835 c 112.6665 47.5 112.9165 49.8335 111 51.8335 c f LB %AI5_EndLayer-- %%PageTrailer gsave annotatepage grestore showpage %%Trailer Adobe_Illustrator_AI5 /terminate get exec Adobe_ColorImage_AI6 /terminate get exec Adobe_level2_AI5 /terminate get exec %%EOF \ No newline at end of file diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/word_count.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/word_count.bb Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,5 @@ +%%Title: ./images/word_count.pdf +%%Creator: extractbb 20140317 +%%BoundingBox: 0 0 360 216 +%%CreationDate: Tue Feb 16 12:41:56 2016 + diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/word_count.pdf Binary file paper/images/word_count.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/wordcount.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/wordcount.bb Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,5 @@ +%%Title: ./images/wordcount.pdf +%%Creator: extractbb 20140317 +%%BoundingBox: 0 0 657 356 +%%CreationDate: Sun Feb 14 02:17:07 2016 + diff -r 94c9c506bba9 -r 958634b9fa32 paper/images/wordcount.pdf Binary file paper/images/wordcount.pdf has changed diff -r 94c9c506bba9 -r 958634b9fa32 paper/intro.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/intro.tex Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,26 @@ +\chapter{並列環境下におけるプログラミング} +CPU の処理速度の向上のためクロック周波数の増加は発熱や消費電力の増大により難しくなっている。 +そのため、クロック周波数を上げる代わりに CPU のコア数を増やす傾向にある。 +マルチコア CPU の性能を発揮するには、処理をできるだけ並列化しなければならない。 +これはアムダールの法則により、並列化できない部分が並列化による性能向上を制限することから言える。 +つまり、プログラムを並列処理に適した形で記述するためのフレームワークが必要になる。 +また、PC の処理性能を上げるためにマルチコア CPU 以外にも GPU や CPU と GPU を複合したヘテロジニアスなプロセッサが登場している。 +並列処理をする上でこれらのリソースを無視することができない。 +しかし、これらのプロセッサで性能を出すためにはこれらのアーキテクチャに合わせた並列プログラミングが必要になる。 +並列プログラミングフレームワークではこれらのプロセッサを抽象化し、CPU と同等に扱えるようにすることも求められる。 + +Cerium は本論文で開発している並列プログラミングフレームワークである。 +Cerium では Task と呼ばれる分割されたプログラムを依存関係に沿って実行することで並列実行を可能にする。 +Cerium では依存関係を Task 間で設定するが、本来 Task はデータに依存するもので Task 間の依存関係ではデータの依存関係を保証することができない。 +また、Task には汎用ポインタとしてデータの受け渡しを行うので型情報を失う。 +Task 側で正しく明示的に型変換する必要があり、間違った型変換を行うとデータ構造自体を破壊する可能性がある。 +型システムによって検査することも出来ず、型に基づく一連の不具合が常に付きまとう。 + +今回、設計・実装を行なった Gears OS は Code Segment と Data Segment によって構成される。 +Code Segment は処理の単位、Data Segment はデータの単位となる。 +Gears OS を用いるプログラムも Code/Data Segment によってプログラムを分割して記述する。 +Gears OS では Code/Data Segment を用いて記述することでプログラム全体の並列度を高めて、効率的に並列処理することが可能になることを目的とする。 +また、Gears OS の実装自体が Code/Data Segment を用いたプログラミングの指針となるように実装する。 +Gears OS における Task は実行する Code Segment と実行に必要な Input Data Segment, 出力される Output Data Segment の組で表現される。 +Input/Output Data Segment によって依存関係が決定し、それに沿って並列実行する。 +本論文では基本的な機能として Data Gear を管理する Persistent Data Tree, Task を管理する TaskQueue, 並列処理を行う Worker を実装し、簡単な例題を用いて Gears OS の評価を行う。 diff -r 94c9c506bba9 -r 958634b9fa32 paper/jlisting.sty --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/jlisting.sty Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,216 @@ +\NeedsTeXFormat{LaTeX2e} +\def\filedate{2006/02/20} +\def\fileversion{0.2} +\ProvidesPackage{jlisting}[\filedate\space\fileversion\space(Thor)] +% +\newcount\lst@nextchar +\let\lst@@ProcessSpace\lst@ProcessSpace +\def\lst@ProcessSpace#1{% + \lst@check@chartype{#1}% + \lst@@ProcessSpace + \lst@whitespacetrue} +\let\lst@@ProcessLetter\lst@ProcessLetter +\def\lst@ProcessLetter#1#2{% + \lst@check@chartype{#2}% + {\lst@@ProcessLetter{#1}}% + \relax} +\let\lst@@ProcessDigit\lst@ProcessDigit +\def\lst@ProcessDigit#1#2{% + \lst@check@chartype{#2}% + {\lst@@ProcessDigit{#1}}% + \relax} +\let\lst@@ProcessOther\lst@ProcessOther +\def\lst@ProcessOther#1#2{% + \lst@check@chartype{#2}% + {\lst@@ProcessOther{#1}}% + \relax} +\let\lst@@ProcessTabulator\lst@ProcessTabulator +\def\lst@ProcessTabulator#1{% + \lst@check@chartype{#1}% + \lst@@ProcessTabulator + \relax} +\def\lst@check@chartype#1#2#3{% + \edef\@tempa{\lst@nextchar=`\string#1\relax}% + \afterassignment\remove@to@nnil + \@tempa\@nnil + #2% + \ifnum\lst@nextchar<\@cclvi + #3% + \else + \lst@ifletter \else \lst@OutputOther \fi + \lst@whitespacefalse + \expandafter\lst@AppendJchar + \fi + #1} +\def\lst@AppendJchar#1#2{% + \lst@check@chartype{#2}% + {\advance\lst@length\@ne\lst@Append{#1}}% + \relax} +\def\lst@check@chartype@BOL#1{% + \edef\@tempa{\lst@nextchar=`\string#1\relax}% + \afterassignment\remove@to@nnil + \@tempa\@nnil + \ifnum\lst@nextchar<\@cclvi\else + \lst@whitespacefalse + \expandafter\lst@AppendJchar + \fi + #1} +\def\lst@InputListing#1{% + \begingroup + \lsthk@PreSet \gdef\lst@intname{#1}% + \expandafter\lstset\expandafter{\lst@set}% + \lsthk@DisplayStyle + \catcode\active=\active + \lst@Init\relax \let\lst@gobble\z@ + \lst@SkipToFirst + \lst@ifprint \def\lst@next{\lst@get@filecontents{#1}}% + \else \let\lst@next\@empty + \fi + \lst@next + \lst@DeInit + \endgroup} +\newread\lst@inputfile +\def\lst@get@filecontents#1{% + \let\lst@filecontents\@empty + \openin\lst@inputfile=#1\relax + \let\@lst@get@filecontents@prevline\relax + \lst@get@filecontents@loop + \closein\lst@inputfile + \lst@filecontents\empty} +\def\lst@get@filecontents@loop{% + \read\lst@inputfile to\@lst@get@filecontents@currline + \ifx\@lst@get@filecontents@prevline\relax\else + \expandafter\expandafter\expandafter\def + \expandafter\expandafter\expandafter\lst@filecontents + \expandafter\expandafter\expandafter{% + \expandafter\lst@filecontents\@lst@get@filecontents@prevline}% + \fi + \let\@lst@get@filecontents@prevline\@lst@get@filecontents@currline + \ifeof\lst@inputfile\else + \expandafter\lst@get@filecontents@loop + \fi} +%%% [$B$3$N=hM}$b!$AjEv6/0z$G$9!%(B] +\def\lst@BOLGobble{% + \ifnum\lst@gobble>\z@ + \@tempcnta\lst@gobble\relax + \expandafter\lst@BOLGobble@ + \else + \expandafter\lst@check@chartype@BOL + \fi} +\def\lst@BOLGobble@#1{% + \let\lst@next#1% + \ifx \lst@next\relax\else + \ifx \lst@next\lst@MProcessListing\else + \ifx \lst@next\lst@ProcessFormFeed\else + \ifx \lst@next\lstenv@backslash + \let\lst@next\lstenv@BOLGobble@@ + \else + \let\lst@next\lst@BOLGobble@@ + \ifx #1\lst@ProcessTabulator + \advance\@tempcnta-\lst@tabsize\relax + \ifnum\@tempcnta<\z@ + \lst@length-\@tempcnta \lst@PreGotoTabStop + \fi + \else + \edef\@tempa{\lst@nextchar=`\string#1\relax}% + \@tempa + \ifnum\lst@nextchar<\@cclvi\else + \advance\@tempcnta\m@ne + \fi + \advance\@tempcnta\m@ne + \fi + \fi \fi \fi \fi + \lst@next} +\def\lst@BOLGobble@@{% + \ifnum\@tempcnta>\z@ + \expandafter\lst@BOLGobble@ + \else + \expandafter\lst@check@chartype@BOL + \fi +} +% +% \begin{$B=$@5;v9`(B}{1.3} +% $B$A$g$C$H$7$?=$@5(B +\gdef\lst@breakProcessOther#1{\lst@ProcessOther#1} +% $B%=!<%9%3!<%IL\:\$7$^$7$?!#(B + +\begin{quote} + \url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21172.html}\\ + \url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21184.html}\\ + \url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21189.html}\\ + \url{http://http://cise.edu.mie-u.ac.jp/~okumura/texfaq/qa/21197.html} +\end{quote} + + Copyright $B$O5H1JE/H~;a$K$"$k$N$@$H;W$$$^$9!%(B + +\section{$B99?7MzNr(B}% ChageLogs + +\begin{description} + \item[ver.~0.1 (2004/03/24)] + $B$H$j$"$($:8x3+!%(B + \item[ver.~0.2 (2006/02/20)] + \verb|\lst@breakProcessOther| $BL?Na$NDj5A$NDI2C!%(B +\end{description} + +\section{$B%=!<%9%3!<%I(B} +\par\narrowbaselines +\verbatiminput{jlisting.sty} +\end{document} diff -r 94c9c506bba9 -r 958634b9fa32 paper/master_paper.bib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/master_paper.bib Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,84 @@ +@article{ + cerium, + author = "宮國 渡 and 河野 真治 and 神里 晃 and 杉山 千秋", + title = "Cell 用の Fine-grain Task Manager の実装", + journal = "情報処理学会 システムソフトウェアとオペレーティング・システム研究会(OS)", + month = "April", + year = 2008 +} + +@article{ + alice, + author = "赤嶺 一樹 and 河野 真治", + title = "DataSegment API を用いた分散フレームワークの設計", + journal = "日本ソフトウェア科学会第28回大会論文集", + month = "Sep", + year = 2011 +} + +@misc{cell, + author = "{Sony Corporation}", + title = "{Cell broadband engine architecture}", + year = 2005 +} + +@article{ + segment, + author = "河野 真治 and 杉本 優", + title = "Code Segment と Data Segment によるプログラミング手法", + journal = "第54回プログラミング・シンポジウム", + month = "Jan", + year = 2013 +} + +@article{ + cbc, + author = "河野 真治 and 島袋 仁", + title = "C with Continuation と、そのPlayStationへの応用", + journal = "情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS)", + month = "May", + year = 2000 +} + +@article{ + cbc-llvm, + author = "徳森 海斗 and 河野 真治", + title = " Continuation based C の LLVM/clang 3.5 上の実装について", + journal = "情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS)", + month = "May", + year = 2014 +} + +@article{ + monad, + author = "Eugenio Moggi", + title = "Computational lambda-calculus and monads", + journal = "Proceedings of the Fourth Annual Symposium on Logic in computer science", + year = 1989 +} + +@article{ + model-check, + author = "下地 篤樹 and 河野 真治", + title = "線形時相論理によるContinuation based Cプログラムの検証", + journal = "情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS)", + month = "April", + year = 2007 +} + +@manual{opencl, +author = "{Aaftab Munshi, Khronos OpenCL Working Group}", +title ="{The OpenCL Specification Version 1.0}", +year = 2007 +} + +@misc{cuda, +title = "{CUDA}", +howpublished = "{https://developer.nvidia.com/category/zone/cuda-zone/}" +} + +@misc{ + msg, + title = "MessagePack", + howpublished = "{http://msgpack.org/}" +} \ No newline at end of file diff -r 94c9c506bba9 -r 958634b9fa32 paper/master_paper.sty --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/master_paper.sty Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,483 @@ +% +% 修士卒業論文スタイルファイル master_papar.sty(ver. 2.1e) +% Time-stamp: <01/03/01 22:01:27 ryuji> +% +% ver 2.1e 2/3/01 ryuji +% ver 2.0e 17/12/00 ryuji +% ver 1.0e 05/11/99 hiroki +% +% modifier: Ryuji Gushiken(ryuji@ads.ie.u-ryukyu.ac.jp) +% +% author: Hiroki Taira(hiroki@ads.ie.u-ryukyu.ac.jp) + +% usage: +% +%\documentclass[a4j]{jreport} +% +%\usepackage{master_paper} +% +% +%\jtitle{修士論文スタイルファイル\\自律分散研バージョン} +%\etitle{\LaTeX style test file for master paper} +%\year{平成11年度} +%\affiliation{琉球大学大学院理工学研究科\\ 情報工学専攻} +%\author{名字 名前} +% +%\begin{document} +% +%\maketitle +% +%%要旨 +%\input{abstract.tex} +% +%%目次 +%\tableofcontents +% +%%図目次 +%\listoffigures +% +%%表目次 +%\listoftables +% +%%第一章 +%\input{chapter1.tex} +%%chapter1.texの\chapter{}の後ろに次のコマンドを追加してください。 +%%ページカウントがリセットされ、ページ数がアラビア文字になります。 +%% \pagenumbering{arabic} +%%第二章 +%\input{chapter2.tex} +%%第三章 +%\input{chapter3.tex} +% +%%付録 +%\input{appendix.tex} +% +%%謝辞 +%%\input{thanx.tex} +% +%%参考文献 +%\input{biblography.tex} +% +%\end{document} + +\typeout{****************************************************************} +\typeout{** 平成15年度 琉球大学大学院 学位論文(修士) ********************} +\typeout{** スタイルファイル(LaTeX2e) : 非公式 ********************} +\typeout{****************************************************************} + +%長さ設定 +\hoffset -1in \addtolength{\hoffset}{20mm} +\voffset -1in \addtolength{\voffset}{10mm} +\oddsidemargin 10mm +\topmargin 0mm +\headheight 10mm +\headsep 15mm +%\textheight 39\baselineskip \addtolength{\textheight}{\topskip} +\textheight 212mm +\textwidth 160mm +\marginparsep 3mm +\marginparwidth 15mm +\footskip \headsep + + +% 年度 +\def\@year{} +\def\year#1{\gdef\@year{#1}} +\def\@eyear{} +\def\eyear#1{\gdef\@eyear{#1}} + +% タイトル +\def\jetitle{} +\def\jtitle#1{\gdef\@title{#1}} +\def\@etitle{} +\def\etitle#1{\gdef\@etitle{#1}} + +% 名前 +\def\@author{} +\def\author#1{\gdef\@author{#1}} +\def\@eauthor{} +\def\eauthor#1{\gdef\@eauthor{#1}} + +% 学位 +\def\thesis{修士(工学)学位論文} +\def\ethesis{Master's Thesis of Engineering} + +% 大学 +\def\university{琉球大学} +\def\euniversity{University of the Ryukyus} + +% 所属 +\def\department{大学院理工学研究科} +\def\edepartment{Graduate School of Engineering and Science} + +% 専攻 +\def\course{情報工学専攻} +\def\ecourse{Infomation Engineering Course} + +% 署名 +\def\commission{論 文 審 査 会} + +% 指導教員 +\def\@chife{} +\def\chife#1{\gdef\@chife{#1}} +\def\@echife{} +\def\echife#1{\gdef\@echife{#1}} + +%表紙 +%\renewcommand{\maketitle}{% +%\newpage\null +%\thispagestyle{empty} +%\vskip 1cm% +%\begin{center}% +%\let\footnote\thanks +% {\huge \@title \par}% +% \vskip 1.5em% +% {\huge \@etitle \par}% +% \vskip 2.5em% +% {\LARGE \@year \ \thesis \par}% +% \vskip 10em% +%% {\huge \@belongto \par}% +% {\LARGE \@affiliation \par}% +% \vskip 1.5em% +% {\LARGE \@author \par}% +%\end{center}% +%%\par\vskip 1.5em +%} +\renewcommand{\maketitle}{% + \newpage\null + \thispagestyle{empty} + \vskip 1cm% + + \begin{center}% + \let\footnote\thanks + {\Large\bf\thesis\\} + {\Large\bf\ethesis\vskip 0.4em} + + {\LARGE\bf\mc\@title\\} + {\LARGE\bf{\@etitle}\vskip 0.4 em} + + {\large\mc\@year\\} + {\large\@eyear\vskip 0.3 em} + + {\large\bf\mc\@author\par} + {\large\bf\@eauthor\par\vskip 0.8 em} + + {\includegraphics[clip,keepaspectratio=true,scale=0.48]{images/u-ryukyu-Mark.eps}\vskip 0.8 em} + + {\large\bf\mc\university\\} + {\large\bf\mc\department\\} + {\large\bf\mc\course\vskip 0.3 em} + + {\large\textbf\ecourse\\} + {\large\textbf\edepartment\\} + {\large\textbf\euniversity\vskip 0.3em} + + {\large\bf\mc\@chife\\} + {\large\bf\@echife\\} + \end{center} +} + +\newcommand{\makecommission} { + \thispagestyle{empty} + \null + \vskip 10 em + \begin{center} + 本論文は、修士(工学)の学位論文として適切であると認める。 + \end{center} + \vskip 10 em + \begin{minipage}{0.5\hsize} + \begin{center} + \end{center} + \end{minipage} + \begin{minipage}{0.5\hsize} + \begin{center} + \bf\commission + \vskip 3 em + \underline{                  印}\\ + (主 査)    和田 知久     + \vskip 2 em + \underline{                  印}\\ + (副 査)    高良 富夫     + \vskip 2 em + \underline{                  印}\\ + (副 査)    長田 智和     + \vskip 2 em + \underline{                  印}\\ + (副 査)    河野 真治     + \end{center} + \end{minipage} +} + +%abstract +\renewenvironment{abstract}{% + \titlepage + \thispagestyle{empty} + \null\vfil + \@beginparpenalty\@lowpenalty + {\Huge \bfseries \abstractname}% + \begin{center}% + \@endparpenalty\@M + \end{center} +}% + +\newenvironment{abstract_eng}{% + \titlepage + \thispagestyle{empty} + \null\vfil + \@beginparpenalty\@lowpenalty + {\Huge \bfseries \abstractengname}% + \begin{center}% + \@endparpenalty\@M + \end{center} +}% + +%目次 +\renewcommand{\tableofcontents}{% + \pagestyle{plain} + \if@twocolumn\@restonecoltrue\onecolumn + \else\@restonecolfalse\fi + \chapter*{\contentsname + \@mkboth{\contentsname}{\contentsname}% + } \pagenumbering{roman}\@starttoc{toc}% + \if@restonecol\twocolumn\fi +} + +% 目次用ページ番号 +\newcommand\frontmatter{% + \cleardoublepage + %\@mainmatterfalse + \pagenumbering{roman} +} + +% 本文用ページ番号 +\newcommand\mainmatter{% + \cleardoublepage + % \@mainmattertrue + \pagenumbering{arabic} +} + +\newcommand\backmatter{% + \if@openright + \cleardoublepage + \else + \clearpage + \fi + % \@mainmatterfalse +} + +%付録 +\renewcommand{\appendix}{\par + \setcounter{chapter}{0}% + \setcounter{section}{0}% + \renewcommand{\@chapapp}{\appendixname}% + \renewcommand{\@chappos}\space% + \renewcommand{\thechapter}{\@Alph\c@chapter} + \renewcommand{\thesection}{\thechapter-\arabic{section}}} + + +%章 +\renewcommand{\chapter}{% +% \pagestyle{plain} +% \pagestyle{m@tterheadings} + \pagestyle{anotherheadings} + \if@openright\cleardoublepage\else\clearpage\fi +% \thispagestyle{jpl@in}% + \thispagestyle{anotherplain}% + \global\@topnum\z@ + \@afterindentfalse + \secdef\@chapter\@schapter} +\def\@chapter[#1]#2{% + \ifnum \c@secnumdepth >\m@ne + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter\space\@chappos (\thepage ページ)}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\@chapapp\thechapter\@chappos}#1}% + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% + \@makechapterhead{#2}\@afterheading} +\def\@makechapterhead#1{\hbox{}% + \vskip2\Cvs + {\parindent\z@ + \raggedright +% + \reset@font\huge\bfseries + \ifnum \c@secnumdepth >\m@ne + \setlength\@tempdima{\linewidth}% + \setbox\z@\hbox{\@chapapp\thechapter\@chappos\hskip1zw}% + \addtolength\@tempdima{-\wd\z@}% + \unhbox\z@\nobreak + \vtop{\hsize\@tempdima#1}% + \else + #1\relax + \fi}\nobreak\vskip3\Cvs} + + +\renewcommand{\prepartname}{\relax} %\renewcommand{\prepartname}{第} +\renewcommand{\postpartname}{部} +\renewcommand{\prechaptername}{第}%\renewcommand{\prechaptername}{第} +\renewcommand{\postchaptername}{章} +\renewcommand{\contentsname}{目 次} +\renewcommand{\listfigurename}{図 目 次} +\renewcommand{\listtablename}{表 目 次} +\renewcommand{\bibname}{参考文献} +\renewcommand{\indexname}{索 引} +\renewcommand{\figurename}{図} +\renewcommand{\tablename}{表} +\renewcommand{\appendixname}{付 録} +\renewcommand{\abstractname}{要 旨} +\newcommand{\abstractengname}{Abstract} + + +%%%% new environment for me(ryuji) +%定義のための環境 +\newcounter{defnum}[chapter] +\newcommand{\predef}{定義} +\newcommand{\postdef}{\relax} +\newenvironment{definition}{\vskip5mm% + \center\begin{minipage}{.8\textwidth} + \addtocounter{defnum}{1} + \begin{description}\item[\textbf{\predef\thechapter.\thedefnum\postdef}] } + {\end{description}\end{minipage}\newline\vskip5mm} + +\newcommand{\preex}{例題} +\newcommand{\postex}{\relax} +\newenvironment{example}{\vskip5mm% + \center\begin{minipage}{.9\textwidth} + \begin{description}\item[\textbf{[\preex\postex]\hskip1zw}] } + {\end{description}\end{minipage}\newline\vskip5mm} + +%%%% customized by me(ryuji) +%footnoteの表示部 +\def\@makefnmark{\hbox{\@textsuperscript{\normalfont + 注\kern0.1em \@thefnmark}}} + +%%%%%% added by ryuji %%%%%%%%%% +% ヘディング +% c.f. 奥村晴彦,''LaTeX2e 美文書作成入門,'' 技術評論社, pp207--231, 1997. + +%ヘッダ、フッタに追加するもの +\def\@lefthead{} +\def\marklefthead#1{\gdef\@lefthead{\small #1}} +\def\@leftfoot{} +\def\markleftfoot#1{\gdef\@leftfoot{\small #1}} + + +%\def\ps@headings{% +\def\ps@m@tterheadings{% + \let\@mkboth\@gobbletwo + \let\ps@jpl@in\ps@headnombre + \let\@oddfoot\@empty\let\@evenfoot\@empty +% \def\@evenhead{\thepage\hfil\leftmark}% + \def\@oddhead{\hss\addtolength{\textwidth}{-4.5zw} +% \underline{\hbox to \textwidth{\hfil\textbf{\rightmark}}% + \underline{\hbox to \textwidth{\vfil\@lefthead\hfil\textbf{\leftmark}}% + \hfil\hskip4zw\thepage}}% + + \def\chaptermark##1{\markboth{% + \ifnum \c@secnumdepth >\m@ne + \@chapapp\thechapter\@chappos\hskip1zw + \fi + ##1}{}}% + \def\sectionmark##1{\markright{% + \ifnum \c@secnumdepth >\z@ \thesection.\hskip1zw\fi + ##1}}% + } + + +%もう一個のバージョン:headings(本命) +\def\ps@anotherheadings{% + \let\@mkboth\@gobbletwo + \let\ps@jpl@in\ps@headnombre + \def\@oddfoot{\reset@font% + \textbf{\footnotesize \@leftfoot}\hfil\bf\thepage}% + \let\@evenfoot\@empty + \def\@oddhead{\hss +% \underline{\hbox to \textwidth{\hfil\textbf{\rightmark}}% + \underline{\hbox to \textwidth{\@lefthead\hfil\textbf{\leftmark}}% + \hfil}}% + + \def\chaptermark##1{\markboth{% + \ifnum \c@secnumdepth >\m@ne + \@chapapp\thechapter\@chappos\hskip1zw + \fi + ##1}{}}% + \def\sectionmark##1{\markright{% + \ifnum \c@secnumdepth >\z@ \thesection.\hskip1zw\fi + ##1}}% + } +%もう一個のバージョン:plain(本命) +\def\ps@anotherplain{% + \let\@mkboth\@gobbletwo + \let\ps@jpl@in\ps@headnombre + \def\@oddfoot{\reset@font% + \textbf{\footnotesize \@leftfoot}\hfil\bf\thepage}% + \let\@evenfoot\@empty + \let\@oddhead\@empty + \def\chaptermark##1{\markboth{% + \ifnum \c@secnumdepth >\m@ne + \@chapapp\thechapter\@chappos\hskip1zw + \fi + ##1}{}}% + \def\sectionmark##1{\markright{% + \ifnum \c@secnumdepth >\z@ \thesection.\hskip1zw\fi + ##1}}% + } + +%スタイルセットのため +\renewenvironment{thebibliography}[1] +{\chapter*{\bibname\@mkboth{\bibname}{\bibname}}% + \markboth{\bibname}{\bibname} + \addcontentsline{toc}{chapter}{参考文献} + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \@openbib@code + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \sloppy + \clubpenalty4000 + \@clubpenalty\clubpenalty + \widowpenalty4000% + \sfcode`\.\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} + + +%索引のため +\renewenvironment{theindex}{% + \clearpage + \columnseprule.4pt \columnsep 2zw + \markboth{\indexname}{\indexname} + \addcontentsline{toc}{chapter}{\indexname} + \begin{multicols}{3}[{\chapter*{\indexname}}] + \@mkboth{\indexname}{\indexname} + \thispagestyle{anotherplain}% + \parindent=0pt + \parskip=0pt plus .3pt \relax + \let\item=\@idxitem + \raggedright + \footnotesize\narrowbaselines + }{\end{multicols}} +\def\indexname{索引} +\def\narrowbaselines{\fontsize\@xpt\@xiipt\selectfont} +\def\@idxitem{\par \hangindent4zw} +\def\subitem{\par \hangindent4zw \hspace*{2zw}} +\def\subsubitem{\par \hangindent4zw \hspace*{3zw}} + +%禁則処理の追加 + %事前でのブレークを禁止(禁止>=10000) +\prebreakpenalty\jis`,=10000 % , +\prebreakpenalty\jis`.=10000 % . +%\prebreakpenalty\jis"2124=10000 % , +%\prebreakpenalty\jis"2125=10000 % . +%\prebreakpenalty\jis`、=10000 % 、 +%\prebreakpenalty\jis`。=10000 % 。 +%%\prebreakpenalty\jis"2124=10000 % 、 +%%\prebreakpenalty\jis"2125=10000 % 。 diff -r 94c9c506bba9 -r 958634b9fa32 paper/master_paper.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/master_paper.tex Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,107 @@ +\documentclass[a4j,12pt]{jreport} +\usepackage{master_paper} +\usepackage{ascmac} +\usepackage[dvipdfmx]{graphicx} +\usepackage{here} +\usepackage{listings,jlisting} +\usepackage{comment} +\usepackage[deluxe, multi]{otf} + +%\input{dummy.tex} %% font + +\jtitle{Code Segment と Data Segment を持つ Gears OS の設計} +\etitle{Design of Gears OS with Code and Data Segment} +\year{2016年 3月} +\eyear{March 2016} +\author{小久保 翔平} +\eauthor{Shohei KOKUBO} +\chife{指導教員:教授 和田 知久} +\echife{Supervisor: Prof. Tomohisa WADA} + +\marklefthead{% 左上に挿入 + \begin{minipage}[b]{.4\textwidth} + 琉球大学大学院学位論文(修士) +\end{minipage}} + +\markleftfoot{% 左下に挿入 + \begin{minipage}{.8\textwidth} + Code Segment と Data Segment を持つ Gears OS の設計 +\end{minipage}} + +\newcommand\figref[1]{図 \ref{fig:#1}} +\newcommand\tabref[1]{表 \ref{tab:#1}} + +\lstset{ + language=C, + tabsize=2, + frame=single, + basicstyle={\ttfamily\footnotesize},% + identifierstyle={\footnotesize},% + commentstyle={\footnotesize\itshape},% + keywordstyle={\footnotesize\bfseries},% + ndkeywordstyle={\footnotesize},% + stringstyle={\footnotesize\ttfamily}, + breaklines=true, + captionpos=b, + columns=[l]{fullflexible},% + xrightmargin=0zw,% + xleftmargin=1zw,% + aboveskip=1zw, + numberstyle={\scriptsize},% + stepnumber=1, + numbersep=0.5zw,% + lineskip=-0.5ex, + numbers=left +} + +%%% 索引のために以下の2行を追加 +\usepackage{makeidx,multicol} +\makeindex +\begin{document} + +%rome +\frontmatter + +\maketitle +\newpage + +\makecommission + +%要旨 +\input{abstract.tex} +\input{abstract_eng.tex} + +%目次 +\tableofcontents + +%図目次 +\listoffigures + +%表目次 +\listoftables + +%arabic +\mainmatter + +%chapters +\input{intro.tex} +\input{cerium.tex} +\input{cbc.tex} +\input{gearsos.tex} +\input{comparison.tex} +\input{evaluation.tex} +\input{conclusion.tex} + +%謝辞 +\addcontentsline{toc}{chapter}{謝辞} +\input{thx.tex} + +%参考文献 +\nocite{*} +\bibliographystyle{junsrt} +\bibliography{master_paper} + +%付録 + +\printindex +\end{document} diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/bitonic_sort/box --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/bitonic_sort/box Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,18 @@ +1 6.145623 +1 6.139483 +1 6.144892 +2 4.539460 +2 4.436463 +2 4.925628 +3 2.530406 +3 2.570707 +3 2.571939 +4 1.631456 +4 1.627970 +4 1.632292 +5 1.322997 +5 1.321029 +5 1.312275 +6 0.149487 +6 0.152230 +6 0.163515 diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/bitonic_sort/cpu_1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/bitonic_sort/cpu_1 Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,21 @@ +16384 0.054535 +16384 0.053521 +16384 0.054224 +32768 0.119125 +32768 0.118421 +32768 0.118529 +65536 0.261226 +65536 0.258138 +65536 0.259855 +131072 0.575518 +131072 0.574977 +131072 0.573440 +262144 1.275700 +262144 1.280920 +262144 1.266228 +524288 2.803241 +524288 2.796131 +524288 2.793901 +1048576 6.145623 +1048576 6.139483 +1048576 6.144892 diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/bitonic_sort/cpu_12 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/bitonic_sort/cpu_12 Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,21 @@ +16384 0.028451 +16384 0.030065 +16384 0.030341 +32768 0.044924 +32768 0.045511 +32768 0.043224 +65536 0.076149 +65536 0.075513 +65536 0.076242 +131072 0.138685 +131072 0.138920 +131072 0.138807 +262144 0.285647 +262144 0.284760 +262144 0.289191 +524288 0.640933 +524288 0.642066 +524288 0.616291 +1048576 1.322997 +1048576 1.321029 +1048576 1.312275 diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/bitonic_sort/cpu_2 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/bitonic_sort/cpu_2 Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,21 @@ +16384 0.040895 +16384 0.039489 +16384 0.039098 +32768 0.085891 +32768 0.084144 +32768 0.086287 +65536 0.177633 +65536 0.167117 +65536 0.172507 +131072 0.372879 +131072 0.393514 +131072 0.393431 +262144 0.794246 +262144 0.934616 +262144 0.906198 +524288 2.164428 +524288 2.217274 +524288 2.032049 +1048576 4.539460 +1048576 4.436463 +1048576 4.925628 diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/bitonic_sort/cpu_4 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/bitonic_sort/cpu_4 Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,21 @@ +16384 0.028437 +16384 0.027519 +16384 0.027354 +32768 0.056601 +32768 0.056044 +32768 0.057884 +65536 0.117800 +65536 0.121380 +65536 0.121663 +131072 0.244752 +131072 0.246284 +131072 0.248601 +262144 0.549241 +262144 0.545955 +262144 0.517979 +524288 1.192022 +524288 1.123386 +524288 1.195495 +1048576 2.530406 +1048576 2.570707 +1048576 2.571939 diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/bitonic_sort/cpu_8 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/bitonic_sort/cpu_8 Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,21 @@ +16384 0.024300 +16384 0.024318 +16384 0.023870 +32768 0.041917 +32768 0.042845 +32768 0.042200 +65536 0.081457 +65536 0.080062 +65536 0.081057 +131072 0.169538 +131072 0.164242 +131072 0.166205 +262144 0.351782 +262144 0.355738 +262144 0.356107 +524288 0.771449 +524288 0.752787 +524288 0.755115 +1048576 1.631456 +1048576 1.627970 +1048576 1.632292 diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/bitonic_sort/gpu --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/bitonic_sort/gpu Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,21 @@ +16384 0.083421 +16384 0.093149 +16384 0.078294 +32768 0.084040 +32768 0.095510 +32768 0.087000 +65536 0.100729 +65536 0.090225 +65536 0.085858 +131072 0.105753 +131072 0.103785 +131072 0.109697 +262144 0.115981 +262144 0.119174 +262144 0.108622 +524288 0.122353 +524288 0.127722 +524288 0.125356 +1048576 0.149487 +1048576 0.152230 +1048576 0.163515 diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/box.plt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/box.plt Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,9 @@ +set term pdf +set output "word_count.pdf" +set boxwidth 0.5 relative +set style fill solid border lc rgb "black" +set ylabel "time(ms)" +set xrange[0:8] +set yrange[0:1000] +set xtics ("1 cpu" 1, "2 cpus" 2, "4 cpus" 3, "8 cpus" 4, "12 cpus" 5, "gpu" 6, "gpu(data parallel)" 7) +plot "word_count/result" u 1:($2*1000) smooth unique with boxes lw 2 lc rgb "light-cyan" notitle diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/fft/result --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/fft/result Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,18 @@ +1 1.958956 +1 1.966016 +1 1.950610 +2 1.125611 +2 1.200725 +2 1.197753 +3 0.707902 +3 0.733299 +3 0.692185 +4 0.437522 +4 0.475558 +4 0.440223 +5 0.368692 +5 0.378096 +5 0.372550 +6 0.415012 +6 0.416886 +6 0.424896 diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/graph.plt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/graph.plt Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,7 @@ +set term pdf +set output "twice.pdf" +set xlabel "Number of CPU" +set ylabel "time(ms)" +set grid +set xrange [1:12] +plot "twice/task_640" u 1:($2*1000) smooth unique title "204800 elements per Task" \ No newline at end of file diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/twice/task_64 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/twice/task_64 Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,15 @@ +1 1.246386 +1 1.246681 +1 1.244309 +2 0.628358 +2 0.631107 +2 0.629942 +4 0.327789 +4 0.327607 +4 0.325506 +8 0.165063 +8 0.165796 +8 0.166200 +12 0.122147 +12 0.121734 +12 0.120947 diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/twice/task_640 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/twice/task_640 Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,15 @@ +1 1.312108 +1 1.318565 +1 1.316683 +2 0.691450 +2 0.687672 +2 0.690753 +4 0.375747 +4 0.362807 +4 0.359630 +8 0.188330 +8 0.192578 +8 0.188250 +12 0.110277 +12 0.114549 +12 0.110316 diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/twice/task_6400 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/twice/task_6400 Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,15 @@ +1 1.986212 +1 1.967297 +1 1.966392 +2 1.122235 +2 1.148616 +2 1.084848 +4 0.616860 +4 0.593097 +4 0.621747 +8 0.317680 +8 0.344738 +8 0.321525 +12 0.112422 +12 0.112661 +12 0.117707 diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/word_count/cpu_1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/word_count/cpu_1 Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,3 @@ +0.718177 +0.718678 +0.714053 diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/word_count/cpu_12 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/word_count/cpu_12 Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,3 @@ +0.084439 +0.092542 +0.086132 diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/word_count/cpu_2 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/word_count/cpu_2 Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,3 @@ +0.370620 +0.373916 +0.377258 diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/word_count/cpu_4 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/word_count/cpu_4 Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,3 @@ +0.198103 +0.196991 +0.196469 diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/word_count/cpu_8 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/word_count/cpu_8 Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,3 @@ +0.105340 +0.105016 +0.104969 diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/word_count/gpu --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/word_count/gpu Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,3 @@ +9.881886 +9.897281 +9.919438 diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/word_count/gpu_dp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/word_count/gpu_dp Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,3 @@ +0.517102 +0.513130 +0.512495 diff -r 94c9c506bba9 -r 958634b9fa32 paper/result/word_count/result --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/result/word_count/result Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,21 @@ +1 0.718177 +1 0.718678 +1 0.714053 +2 0.370620 +2 0.373916 +2 0.377258 +3 0.198103 +3 0.196991 +3 0.196469 +4 0.105340 +4 0.105016 +4 0.104969 +5 0.084439 +5 0.092542 +5 0.086132 +6 9.881886 +6 9.897281 +6 9.919438 +7 0.517102 +7 0.513130 +7 0.512495 diff -r 94c9c506bba9 -r 958634b9fa32 paper/src/allocate.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/allocate.c Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,47 @@ +// Code Gear +__code start_code(struct Context* context) { + // start processing + goto meta(context, context->next); +} + +// Meta Code Gear +__code meta(struct Context* context, enum Code next) { + // meta computation + goto (context->code[next])(context); +} + +// Code Gear +__code code1(struct Context* context, struct Allocate* allocate) { + allocate->size = sizeof(struct Data1); + context->next = Code2; + + goto meta(context, Allocator); +} + +// Meta Code Gear(stub) +__code code1_stub(struct Context* context) { + goto code1(context, &context->data[Allocate]->allocate); +} + +// Meta Code Gear +__code allocator(struct Context* context, struct Allocate* allocate) { + context->data[++context->dataNum] = context->heap; + context->heap += allocate->size; + + goto meta(context, context->next); +} + +// Meta Code Gear(stub) +__code allocator_stub(struct Context* context) { + goto allocator(context, &context->data[Allocate]->allcate); +} + +// Code Gear +__code code2(struct Context* context, struct Data1* data1) { + // processing +} + +// Meta Code Gear(stub) +__code code2_stub(struct Context* context) { + goto code2(context, &context->data[context->dataNum]->data1); +} diff -r 94c9c506bba9 -r 958634b9fa32 paper/src/context.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/context.h Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,43 @@ +/* Context definition example */ +#define ALLOCATE_SIZE 1000 + +// Code Gear Name +enum Code { + Code1, + Code2, + Allocator, + Exit, +}; + +// Unique Data Gear +enum UniqueData { + Allocate, +}; + +struct Context { + enum Code next; + int codeNum; + __code (**code) (struct Context*); + void* heapStart; + void* heap; + long heapLimit; + int dataNum; + union Data **data; +}; + +// Data Gear definition +union Data { + // size: 4 byte + struct Data1 { + int i; + } data1; + // size: 5 byte + struct Data2 { + int i; + char c; + } data2; + // size: 8 byte + struct Allocate { + long size; + } allocate; +}; diff -r 94c9c506bba9 -r 958634b9fa32 paper/src/dequeue.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/dequeue.c Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,24 @@ +// Dequeue +__code getQueue(struct Context* context, struct Queue* queue, struct Node* node) { + if (queue->first == 0) + return; + + struct Element* first = queue->first; + queue->first = first->next; + queue->count--; + + context->next = GetQueue; + stack_push(context->code_stack, &context->next); + + context->next = first->task->code; + node->key = first->task->key; + + goto meta(context, GetTree); +} + +// Meta Code Gear(stub) +__code getQueue_stub(struct Context* context) { + goto getQueue(context, + &context->data[ActiveQueue]->queue, + &context->data[Node]->node); +} diff -r 94c9c506bba9 -r 958634b9fa32 paper/src/enqueue.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/enqueue.c Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,64 @@ +// allocate Element +__code putQueue1(struct Context* context, struct Allocate* allocate) { + allocate->size = sizeof(struct Element); + allocator(context); + + goto meta(context, PutQueue2); +} + +// Meta Code Gear(stub) +__code putQueue1_stub(struct Context* context) { + goto putQueue1(context, &context->data[Allocate]->allocate); +} + +// write Element infomation +__code putQueue2(struct Context* context, struct Element* new_element, struct Element* element, struct Queue* queue) { + new_element->task = element->task; + + if (queue->first) + goto meta(context, PutQueue3); + else + goto meta(context, PutQueue4); +} + +// Meta Code Gear(stub) +__code putQueue2_stub(struct Context* context) { + goto putQueue2(context, + &context->data[context->dataNum]->element, + &context->data[Element]->element, + &context->data[ActiveQueue]->queue); +} + +// Enqueue(normal) +__code putQueue3(struct Context* context, struct Queue* queue, struct Element* new_element) { + struct Element* last = queue->last; + last->next = new_element; + + queue->last = new_element; + queue->count++; + + goto meta(context, context->next); +} + +// Meta Code Gear(stub) +__code putQueue3_stub(struct Context* context) { + goto putQueue3(context, + &context->data[ActiveQueue]->queue, + &context->data[context->dataNum]->element); +} + +// Enqueue(nothing element) +__code putQueue4(struct Context* context, struct Queue* queue, struct Element* new_element) { + queue->first = new_element; + queue->last = new_element; + queue->count++; + + goto meta(context, context->next); +} + +// Meta Code Gear(stub) +__code putQueue4_stub(struct Context* context) { + goto putQueue4(context, + &context->data[ActiveQueue]->queue, + &context->data[context->dataNum]->element); +} diff -r 94c9c506bba9 -r 958634b9fa32 paper/src/initContext.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/initContext.c Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,28 @@ +#include + +#include "context.h" + +extern __code code1_stub(struct Context*); +extern __code code2_stub(struct Context*); +extern __code allocator_stub(struct Context*); +extern __code exit_code(struct Context*); + +__code initContext(struct Context* context, int num) { + context->heapLimit = sizeof(union Data)*ALLOCATE_SIZE; + context->heapStart = malloc(context->heapLimit); + context->heap = context->heapStart; + context->codeNum = Exit; + + context->code = malloc(sizeof(__code*)*ALLOCATE_SIZE); + context->data = malloc(sizeof(union Data*)*ALLOCATE_SIZE); + + context->code[Code1] = code1_stub; + context->code[Code2] = code2_stub; + context->code[Allocator] = allocator_stub; + context->code[Exit] = exit_code; + + context->data[Allocate] = context->heap; + context->heap += sizeof(struct Allocate); + + context->dataNum = Allocate; +} diff -r 94c9c506bba9 -r 958634b9fa32 paper/src/initWorker.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/initWorker.c Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,24 @@ +// Code Gear +__code createWorker(struct Context* context, struct LoopCounter* loopCounter, struct Worker* worker) { + int i = loopCounter->i; + + if (i < worker->num) { + struct Context* worker_context = &worker->contexts[i]; + worker_context->next = GetQueue; + worker_context->data[Tree] = context->data[Tree]; + worker_context->data[ActiveQueue] = context->data[ActiveQueue]; + pthread_create(&worker_context->thread, NULL, (void*)&start_code, worker_context); + worker_context->thread_num = i; + loopCounter->i++; + + goto meta(context, CreateWorker); + } + + loopCounter->i = 0; + goto meta(context, TaskManager); +} + +// Meta Code Gear +__code createWorker_stub(struct Context* context) { + goto createWorker(context, &context->data[LoopCounter]->loopCounter, &context->data[Worker]->worker); +} diff -r 94c9c506bba9 -r 958634b9fa32 paper/src/init_twice_cerium.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/init_twice_cerium.cc Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,33 @@ +void +twice_init(TaskManager *manager, int* data, int length) +{ + /** + * Create Task + * create_task(Task ID); + */ + HTask* twice = manager->create_task(TWICE_TASK); + + /** + * Set of Device + * set_cpu(CPU or GPU) + */ + twice->set_cpu(SPE_ANY); + + /** + * Set of Input Data + * set_inData(index, address of input data, size of input data); + */ + twice->set_inData(0, data, sizeof(int)*length); + + /** + * Set of OutPut area + * set_outData(index, address of output area, size of output area); + */ + twice->set_outData(0, data, sizeof(int)*length); + + /** + * Enqueue Task + * iterate(Number of Tasks) + */ + twice->iterate(length); +} diff -r 94c9c506bba9 -r 958634b9fa32 paper/src/insert.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/insert.c Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,18 @@ +// Code Gear +__code insertCase2(struct Context* context, struct Node* current) { + struct Node* parent; + stack_pop(context->node_stack, &parent); + + if (parent->color == Black) { + stack_pop(context->code_stack, &context->next); + goto meta(context, context->next); + } + + stack_push(context->node_stack, &parent); + goto meta(context, InsertCase3); +} + +// Meta Code Gear(stub) +__code insert2_stub(struct Context* context) { + goto insertCase2(context, context->data[Traverse]->traverse.current); +} diff -r 94c9c506bba9 -r 958634b9fa32 paper/src/openmp.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/openmp.c Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,4 @@ +#pragma omp parallel for +for(int i=0;i + +#include "context.h" +#include "origin_cs.h" + +extern void allocator(struct Context* context); +extern void compare(struct Context* context, struct Traverse* traverse, int key1, int key2); + +extern int num; + +__code put(struct Context* context, struct Tree* tree, struct Traverse* traverse, struct Node* root, struct Allocate* allocate) { + allocate->size = sizeof(struct Node); + allocator(context); + + stack_push(context->code_stack, &context->next); + + context->next = StackClear; + stack_push(context->code_stack, &context->next); + + tree->root = &context->data[context->dataNum]->node; + + if (root) { + traverse->current = root; + compare(context, traverse, traverse->current->key, context->data[Node]->node.key); + + goto meta(context, Replace); + } + + goto meta(context, Insert); +} + +__code put_stub(struct Context* context) { + goto put(context, + &context->data[Tree]->tree, + &context->data[Traverse]->traverse, + context->data[Tree]->tree.root, + &context->data[Allocate]->allocate); +} + +__code replaceNode(struct Context* context, struct Traverse* traverse, struct Node* oldNode, struct Node* newNode, int result) { + *newNode = *oldNode; + stack_push(context->node_stack, &newNode); + + if (result == EQ) { + newNode->value = context->data[Node]->node.value; + + stack_pop(context->code_stack, &context->next); + goto meta(context, context->next); + } else if (result == GT) { + traverse->current = oldNode->right; + newNode->right = context->heap; + } else { + traverse->current = oldNode->left; + newNode->left = context->heap; + } + + allocator(context); + + if (traverse->current) { + compare(context, traverse, traverse->current->key, context->data[Node]->node.key); + goto meta(context, Replace); + } + + goto meta(context, Insert); +} + +__code replaceNode_stub(struct Context* context) { + goto replaceNode(context, + &context->data[Traverse]->traverse, + context->data[Traverse]->traverse.current, + &context->data[context->dataNum]->node, + context->data[Traverse]->traverse.result); +} + +__code insertNode(struct Context* context, struct Traverse* traverse, struct Node* node, struct Node* newNode) { + node->color = Red; + *newNode = *node; + + traverse->current = newNode; + + goto meta(context, InsertCase1); +} + +__code insertNode_stub(struct Context* context) { + goto insertNode(context, + &context->data[Traverse]->traverse, + &context->data[Node]->node, + &context->data[context->dataNum]->node); +} + +__code insertCase1(struct Context* context, struct Tree* tree, struct Node* current) { + if (!isEmpty(context->node_stack)) + goto meta(context, InsertCase2); + + tree->root->color = Black; + + stack_pop(context->code_stack, &context->next); + goto meta(context, context->next); +} + +__code insert1_stub(struct Context* context) { + goto insertCase1(context, &context->data[Tree]->tree, context->data[Traverse]->traverse.current); +} + +__code insertCase2(struct Context* context, struct Node* current) { + struct Node* parent; + stack_pop(context->node_stack, &parent); + + if (parent->color == Black) { + stack_pop(context->code_stack, &context->next); + goto meta(context, context->next); + } + + stack_push(context->node_stack, &parent); + goto meta(context, InsertCase3); +} + +__code insert2_stub(struct Context* context) { + goto insertCase2(context, context->data[Traverse]->traverse.current); +} + +__code insertCase3(struct Context* context, struct Traverse* traverse, struct Node* current) { + struct Node* parent; + struct Node* uncle; + struct Node* grandparent; + + stack_pop(context->node_stack, &parent); + stack_pop(context->node_stack, &grandparent); + + if (grandparent->left == parent) + uncle = grandparent->right; + else + uncle = grandparent->left; + + if (uncle && (uncle->color == Red)) { + parent->color = Black; + uncle->color = Black; + grandparent->color = Red; + traverse->current = grandparent; + goto meta(context, InsertCase1); + } + + stack_push(context->node_stack, &grandparent); + stack_push(context->node_stack, &parent); + + goto meta(context, InsertCase4); +} + +__code insert3_stub(struct Context* context) { + goto insertCase3(context, &context->data[Traverse]->traverse, context->data[Traverse]->traverse.current); +} + +__code insertCase4(struct Context* context, struct Traverse* traverse, struct Node* current) { + struct Node* parent; + struct Node* grandparent; + + stack_pop(context->node_stack, &parent); + stack_pop(context->node_stack, &grandparent); + + stack_push(context->node_stack, &grandparent); + + traverse->current = parent; + + if ((current == parent->right) && (parent == grandparent->left)) { + context->next = InsertCase4_1; + + stack_push(context->code_stack, &context->next); + goto meta(context, RotateL); + } else if ((current == parent->left) && (parent == grandparent->right)) { + context->next = InsertCase4_2; + + stack_push(context->code_stack, &context->next); + goto meta(context, RotateR); + } + + stack_push(context->node_stack, &parent); + traverse->current = current; + goto meta(context, InsertCase5); +} + +__code insert4_stub(struct Context* context) { + goto insertCase4(context, &context->data[Traverse]->traverse, context->data[Traverse]->traverse.current); +} + +__code insertCase4_1(struct Context* context, struct Traverse* traverse) { + stack_push(context->node_stack, &traverse->current); + traverse->current = traverse->current->left; + goto meta(context, InsertCase5); +} + +__code insert4_1_stub(struct Context* context) { + goto insertCase4_1(context, &context->data[Traverse]->traverse); +} + +__code insertCase4_2(struct Context* context, struct Traverse* traverse) { + stack_push(context->node_stack, &traverse->current); + traverse->current = traverse->current->right; + goto meta(context, InsertCase5); +} + +__code insert4_2_stub(struct Context* context) { + goto insertCase4_2(context, &context->data[Traverse]->traverse); +} + +__code insertCase5(struct Context* context, struct Traverse* traverse, struct Node* current) { + struct Node* parent; + struct Node* grandparent; + + stack_pop(context->node_stack, &parent); + stack_pop(context->node_stack, &grandparent); + + parent->color = Black; + grandparent->color = Red; + + traverse->current = grandparent; + + if ((current == parent->left) && (parent == grandparent->left)) + goto meta(context, RotateR); + else + goto meta(context, RotateL); +} + +__code insert5_stub(struct Context* context) { + goto insertCase5(context, &context->data[Traverse]->traverse, context->data[Traverse]->traverse.current); +} + +__code rotateLeft(struct Context* context, struct Node* node, struct Tree* tree, struct Traverse* traverse) { + struct Node* tmp = node->right; + struct Node* parent = 0; + + stack_pop(context->node_stack, &parent); + + if (parent) { + if (node == parent->left) + parent->left = tmp; + else + parent->right = tmp; + } else { + tree->root = tmp; + } + + stack_push(context->node_stack, &parent); + + node->right = tmp->left; + tmp->left = node; + traverse->current = tmp; + + stack_pop(context->code_stack, &context->next); + goto meta(context, context->next); +} + +__code rotateLeft_stub(struct Context* context) { + goto rotateLeft(context, + context->data[Traverse]->traverse.current, + &context->data[Tree]->tree, + &context->data[Traverse]->traverse); +} + +__code rotateRight(struct Context* context, struct Node* node, struct Tree* tree, struct Traverse* traverse) { + struct Node* tmp = node->left; + struct Node* parent = 0; + + stack_pop(context->node_stack, &parent); + + if (parent) { + if (node == parent->left) + parent->left = tmp; + else + parent->right = tmp; + } else { + tree->root = tmp; + } + + stack_push(context->node_stack, &parent); + + node->left = tmp->right; + tmp->right = node; + traverse->current = tmp; + + stack_pop(context->code_stack, &context->next); + goto meta(context, context->next); +} + +__code rotateRight_stub(struct Context* context) { + goto rotateRight(context, + context->data[Traverse]->traverse.current, + &context->data[Tree]->tree, + &context->data[Traverse]->traverse); +} + +__code stackClear(struct Context* context, stack_ptr node_stack, struct Traverse* traverse) { + if (stack_pop(node_stack, &traverse->current) == 0) + goto meta(context, StackClear); + + traverse->current = 0; + + stack_pop(context->code_stack, &context->next); + goto meta(context, context->next); +} + +__code stackClear_stub(struct Context* context) { + goto stackClear(context, context->node_stack, &context->data[Traverse]->traverse); +} + + +__code get(struct Context* context, struct Tree* tree, struct Traverse* traverse) { + if (tree->root) { + traverse->current = tree->root; + + goto meta(context, Search); + } + + stack_pop(context->code_stack, &context->next); + goto meta(context, context->next); +} + +__code get_stub(struct Context* context) { + goto get(context, &context->data[Tree]->tree, &context->data[Traverse]->traverse); +} + +__code search(struct Context* context, struct Traverse* traverse, struct Node* node) { + compare(context, traverse, traverse->current->key, node->key); + + if (traverse->result == EQ) { + *node = *traverse->current; + + goto meta(context, context->next); + } else if (traverse->result == GT) { + traverse->current = traverse->current->right; + } else { + traverse->current = traverse->current->left; + } + + if (traverse->current) + goto meta(context, Search); + + stack_pop(context->code_stack, &context->next); + goto meta(context, context->next); +} + +__code search_stub(struct Context* context) { + goto search(context, &context->data[Traverse]->traverse, &context->data[Node]->node); +} + +/* /\* __code delete(struct Context* context, struct Tree* tree) { *\/ */ +/* /\* if (tree->root) { *\/ */ +/* /\* stack_push(context->code_stack, &context->next); *\/ */ +/* /\* context->next = Delete1; *\/ */ +/* /\* goto meta(context, Get); *\/ */ +/* /\* } *\/ */ + +/* /\* goto meta(context, context->next); *\/ */ +/* /\* } *\/ */ + +/* /\* __code delete_stub(struct Context* context) { *\/ */ +/* /\* goto delete(context, &context->data[Tree]->tree); *\/ */ +/* /\* } *\/ */ + +/* /\* __code delete1(struct Context* context, struct Tree* tree, struct Allocate* allocate) { *\/ */ +/* /\* allocate->size = sizeof(struct Node); *\/ */ +/* /\* allocator(context); *\/ */ + +/* /\* struct Node* root = tree->root; *\/ */ + +/* /\* tree->root = &context->data[context->dataNum]->node; *\/ */ +/* /\* tree->current = root; *\/ */ + +/* /\* compare(context, tree, tree->current->key, context->data[Node]->node.key); *\/ */ + +/* /\* goto meta(context, Replace_d1); *\/ */ +/* /\* } *\/ */ + +/* /\* __code delete1_stub(struct Context* context) { *\/ */ +/* /\* goto delete1(context, &context->data[Tree]->tree, &context->data[Allocate]->allocate); *\/ */ +/* /\* } *\/ */ + +/* /\* __code delete2(struct Context* context, struct Node* current) { *\/ */ +/* /\* if (current->color == Black) { *\/ */ +/* /\* struct Node* child = current->right == NULL ? current->left : current->right; *\/ */ +/* /\* current->color = child == NULL ? Black : child->color; *\/ */ + +/* /\* goto meta(context, DeleteCase1); *\/ */ +/* /\* } *\/ */ + +/* /\* goto meta(context, Delete3); *\/ */ +/* /\* } *\/ */ + +/* /\* __code delete2_stub(struct Context* context) { *\/ */ +/* /\* goto delete2(context, context->data[Tree]->tree.current); *\/ */ +/* /\* } *\/ */ + +/* /\* __code delete3(struct Context* context, struct Tree* tree, struct Node* current) { *\/ */ +/* /\* struct Node* tmp = current->right == NULL ? current->left : current->right; *\/ */ + +/* /\* if (current->parent) { *\/ */ +/* /\* if (current == current->parent->left) *\/ */ +/* /\* current->parent->left = tmp; *\/ */ +/* /\* else *\/ */ +/* /\* current->parent->right = tmp; *\/ */ +/* /\* } else { *\/ */ +/* /\* tree->root = tmp; *\/ */ +/* /\* } *\/ */ + +/* /\* if (tmp) *\/ */ +/* /\* tmp->parent = current->parent; *\/ */ + +/* /\* if (current->parent == NULL && tmp) *\/ */ +/* /\* tmp->color = Black; *\/ */ + +/* /\* current == current->parent->left ? (current->parent->left = NULL) : (current->parent->right = NULL); *\/ */ + +/* /\* stack_pop(context->code_stack, &context->next); *\/ */ +/* /\* goto meta(context, context->next); *\/ */ +/* /\* } *\/ */ + +/* /\* __code delete3_stub(struct Context* context) { *\/ */ +/* /\* goto delete3(context, &context->data[Tree]->tree, context->data[Tree]->tree.current); *\/ */ +/* /\* } *\/ */ + +/* /\* __code replaceNodeForDelete1(struct Context* context, struct Tree* tree, struct Node* oldNode, struct Node* newNode, int result) { *\/ */ +/* /\* *newNode = *oldNode; *\/ */ + +/* /\* if (result == EQ) *\/ */ +/* /\* goto meta(context, Replace_d2); *\/ */ +/* /\* else if (result == GT) *\/ */ +/* /\* tree->current = newNode->right; *\/ */ +/* /\* else *\/ */ +/* /\* tree->current = newNode->left; *\/ */ + +/* /\* tree->current->parent = newNode; *\/ */ + +/* /\* if (tree->current->left == NULL && tree->current->right == NULL) *\/ */ +/* /\* goto meta(context, Delete2); *\/ */ + +/* /\* if (result == GT) *\/ */ +/* /\* newNode->right = context->heap; *\/ */ +/* /\* else if (result == LT) *\/ */ +/* /\* newNode->left = context->heap; *\/ */ + +/* /\* allocator(context); *\/ */ + +/* /\* compare(context, tree, tree->current->key, context->data[Node]->node.key); *\/ */ + +/* /\* goto meta(context, Replace_d1); *\/ */ +/* /\* } *\/ */ + +/* /\* __code replaceNodeForDelete1_stub(struct Context* context) { *\/ */ +/* /\* goto replaceNodeForDelete1(context, &context->data[Tree]->tree, context->data[Tree]->tree.current, &context->data[context->dataNum]->node, context->data[Tree]->tree.result); *\/ */ +/* /\* } *\/ */ + +/* /\* __code replaceNodeForDelete2(struct Context* context, struct Tree* tree, struct Node* newNode) { *\/ */ +/* /\* if (tree->current->left && tree->current->right) { *\/ */ +/* /\* newNode->left->parent = newNode; *\/ */ +/* /\* tree->current = newNode->left; *\/ */ +/* /\* newNode->left = context->heap; *\/ */ +/* /\* tree->deleted = newNode; *\/ */ + +/* /\* allocator(context); *\/ */ +/* /\* tree->current->parent = newNode; *\/ */ + +/* /\* goto meta(context, FindMax1); *\/ */ +/* /\* } *\/ */ + +/* /\* goto meta(context, Delete2); *\/ */ +/* /\* } *\/ */ + +/* /\* __code replaceNodeForDelete2_stub(struct Context* context) { *\/ */ +/* /\* goto replaceNodeForDelete2(context, &context->data[Tree]->tree, &context->data[context->dataNum]->node); *\/ */ +/* /\* } *\/ */ + +/* /\* __code findMax1(struct Context* context, struct Tree* tree, struct Node* oldNode, struct Node* newNode) { *\/ */ +/* /\* *newNode = *oldNode; *\/ */ + +/* /\* if (newNode->right) *\/ */ +/* /\* goto meta(context, FindMax2); *\/ */ + +/* /\* tree->deleted->key = newNode->key; *\/ */ +/* /\* tree->deleted->value = newNode->value; *\/ */ + +/* /\* tree->current = newNode; *\/ */ + +/* /\* goto meta(context, Delete2); *\/ */ +/* /\* } *\/ */ + +/* /\* __code findMax1_stub(struct Context* context) { *\/ */ +/* /\* goto findMax1(context, &context->data[Tree]->tree, context->data[Tree]->tree.current, &context->data[context->dataNum]->node); *\/ */ +/* /\* } *\/ */ + + +/* /\* __code findMax2(struct Context* context, struct Tree* tree, struct Node* oldNode, struct Node* newNode) { *\/ */ +/* /\* *newNode = *oldNode; *\/ */ + +/* /\* if (newNode->right->right) { *\/ */ +/* /\* tree->current = newNode->right; *\/ */ +/* /\* newNode->right = context->heap; *\/ */ + +/* /\* allocator(context); *\/ */ +/* /\* tree->current->parent = newNode; *\/ */ + +/* /\* goto meta(context, FindMax2); *\/ */ +/* /\* } *\/ */ + +/* /\* tree->deleted->key = newNode->right->key; *\/ */ +/* /\* tree->deleted->value = newNode->right->value; *\/ */ + +/* /\* tree->current = newNode; *\/ */ + +/* /\* goto meta(context, Delete2); *\/ */ +/* /\* } *\/ */ + +/* /\* __code findMax2_stub(struct Context* context) { *\/ */ +/* /\* goto findMax2(context, &context->data[Tree]->tree, context->data[Tree]->tree.current, &context->data[context->dataNum]->node); *\/ */ +/* /\* } *\/ */ + +/* /\* __code deleteCase1(struct Context* context, struct Node* current) { *\/ */ +/* /\* if (current->parent) *\/ */ +/* /\* goto meta(context, DeleteCase2); *\/ */ + +/* /\* goto meta(context, Delete3); *\/ */ +/* /\* } *\/ */ + +/* /\* __code deleteCase1_stub(struct Context* context) { *\/ */ +/* /\* goto deleteCase1(context, context->data[Tree]->tree.current); *\/ */ +/* /\* } *\/ */ + +/* /\* __code deleteCase2(struct Context* context, struct Tree* tree, struct Node* current) { *\/ */ +/* /\* struct Node* sibling = current == current->parent->left ? current->parent->right : current->parent->left; *\/ */ + +/* /\* if ((sibling == NULL ? Black : sibling->color) == Red) { *\/ */ +/* /\* current->parent->color = Red; *\/ */ +/* /\* sibling->color = Black; *\/ */ + +/* /\* current == current->parent->left ? (current->parent->left = context->heap) : (current->parent->right = context->heap); *\/ */ +/* /\* allocator(context); *\/ */ +/* /\* context->data[context->dataNum]->node = *sibling; *\/ */ + +/* /\* tree->current = current->parent; *\/ */ + +/* /\* context->next = DeleteCase3; *\/ */ +/* /\* stack_push(context->code_stack, &context->next); *\/ */ + +/* /\* if (current == current->parent->left) *\/ */ +/* /\* goto meta(context, RotateL); *\/ */ +/* /\* else *\/ */ +/* /\* goto meta(context, RotateR); *\/ */ +/* /\* } *\/ */ + +/* /\* goto meta(context, DeleteCase3); *\/ */ +/* /\* } *\/ */ + +/* /\* __code deleteCase2_stub(struct Context* context) { *\/ */ +/* /\* goto deleteCase2(context, &context->data[Tree]->tree, context->data[Tree]->tree.current); *\/ */ +/* /\* } *\/ */ + +/* /\* __code deleteCase3(struct Context* context, struct Tree* tree, struct Node* current) { *\/ */ +/* /\* struct Node* sibling = current == current->parent->left ? current->parent->right : current->parent->left; *\/ */ + +/* /\* if (current->parent->color == Black && *\/ */ +/* /\* (sibling == NULL ? Black : sibling->color) == Black && *\/ */ +/* /\* (sibling->left == NULL ? Black : sibling->left->color) == Black && *\/ */ +/* /\* (sibling->right == NULL ? Black : sibling->right->color) == Black) { *\/ */ +/* /\* sibling->color = Red; *\/ */ + +/* /\* tree->current = current->parent; *\/ */ +/* /\* goto meta(context, DeleteCase1); *\/ */ +/* /\* } *\/ */ + +/* /\* goto meta(context, DeleteCase4); *\/ */ +/* /\* } *\/ */ + +/* /\* __code deleteCase3_stub(struct Context* context) { *\/ */ +/* /\* goto deleteCase3(context, &context->data[Tree]->tree, context->data[Tree]->tree.current); *\/ */ +/* /\* } *\/ */ + +/* /\* __code deleteCase4(struct Context* context, struct Node* current) { *\/ */ +/* /\* struct Node* sibling = current == current->parent->left ? current->parent->right : current->parent->left; *\/ */ + +/* /\* if (current->parent->color == Red && *\/ */ +/* /\* (sibling == NULL ? Black : sibling->color) == Black && *\/ */ +/* /\* (sibling->left == NULL ? Black : sibling->left->color) == Black && *\/ */ +/* /\* (sibling->right == NULL ? Black : sibling->right->color) == Black) { *\/ */ +/* /\* sibling->color = Red; *\/ */ +/* /\* current->parent->color = Black; *\/ */ + +/* /\* goto meta(context, Delete3); *\/ */ +/* /\* } *\/ */ + +/* /\* goto meta(context, DeleteCase5); *\/ */ +/* /\* } *\/ */ + +/* /\* __code deleteCase4_stub(struct Context* context) { *\/ */ +/* /\* goto deleteCase4(context, context->data[Tree]->tree.current); *\/ */ +/* /\* } *\/ */ + +/* /\* __code deleteCase5(struct Context* context, struct Tree* tree, struct Node* current) { *\/ */ +/* /\* struct Node* sibling = current == current->parent->left ? current->parent->right : current->parent->left; *\/ */ +/* /\* sibling->parent = current->parent; *\/ */ + +/* /\* if (current == current->parent->left && *\/ */ +/* /\* (sibling == NULL ? Black : sibling->color) == Black && *\/ */ +/* /\* (sibling->left == NULL ? Black : sibling->left->color) == Red && *\/ */ +/* /\* (sibling->right == NULL ? Black : sibling->right->color) == Black) { *\/ */ +/* /\* sibling->color = Red; *\/ */ +/* /\* sibling->left->color = Black; *\/ */ + +/* /\* sibling == sibling->parent->left ? (sibling->parent->left = context->heap) : (sibling->parent->right = context->heap); *\/ */ +/* /\* allocator(context); *\/ */ +/* /\* struct Node* tmp = &context->data[context->dataNum]->node; *\/ */ +/* /\* *tmp = *sibling; *\/ */ +/* /\* tmp->parent = current; *\/ */ + +/* /\* tmp->left = context->heap; *\/ */ +/* /\* allocator(context); *\/ */ +/* /\* context->data[context->dataNum]->node = *sibling->left; *\/ */ +/* /\* context->data[context->dataNum]->node.parent = tmp; *\/ */ + +/* /\* tree->current = tmp; *\/ */ + +/* /\* context->next = DeleteCase6; *\/ */ +/* /\* stack_push(context->code_stack, &context->next); *\/ */ + +/* /\* goto meta(context, RotateR); *\/ */ +/* /\* } else if (current == current->parent->right && *\/ */ +/* /\* (sibling == NULL ? Black : sibling->color) == Black && *\/ */ +/* /\* (sibling->left == NULL ? Black : sibling->left->color) == Black && *\/ */ +/* /\* (sibling->right == NULL ? Black : sibling->right->color) == Red) { *\/ */ +/* /\* sibling->color = Red; *\/ */ +/* /\* sibling->right->color = Black; *\/ */ + +/* /\* sibling == sibling->parent->left ? (sibling->parent->left = context->heap) : (sibling->parent->right = context->heap); *\/ */ +/* /\* allocator(context); *\/ */ +/* /\* struct Node* tmp = &context->data[context->dataNum]->node; *\/ */ +/* /\* *tmp = *sibling; *\/ */ +/* /\* tmp->parent = current; *\/ */ + +/* /\* tmp->right = context->heap; *\/ */ +/* /\* allocator(context); *\/ */ +/* /\* context->data[context->dataNum]->node = *sibling->right; *\/ */ +/* /\* context->data[context->dataNum]->node.parent = tmp; *\/ */ + +/* /\* tree->current = tmp; *\/ */ + +/* /\* context->next = DeleteCase6; *\/ */ +/* /\* stack_push(context->code_stack, &context->next); *\/ */ +/* /\* goto meta(context, RotateL); *\/ */ +/* /\* } *\/ */ + +/* /\* goto meta(context, DeleteCase6); *\/ */ +/* /\* } *\/ */ + +/* /\* __code deleteCase5_stub(struct Context* context) { *\/ */ +/* /\* goto deleteCase5(context, &context->data[Tree]->tree, context->data[Tree]->tree.current); *\/ */ +/* /\* } *\/ */ + +/* /\* __code deleteCase6(struct Context* context, struct Tree* tree, struct Node* current) { *\/ */ +/* /\* struct Node* sibling = current == current->parent->left ? current->parent->right : current->parent->left; *\/ */ + +/* /\* sibling == sibling->parent->left ? (sibling->parent->left = context->heap) : (sibling->parent->right = context->heap); *\/ */ +/* /\* allocator(context); *\/ */ +/* /\* struct Node* tmp = &context->data[context->dataNum]->node; *\/ */ +/* /\* *tmp = *sibling; *\/ */ +/* /\* tmp->parent = current; *\/ */ + +/* /\* tmp->color = current->parent->color; *\/ */ +/* /\* current->parent->color = Black; *\/ */ + +/* /\* context->next = Delete3; *\/ */ +/* /\* stack_push(context->code_stack, &context->next); *\/ */ + +/* /\* if (current == current->parent->left) { *\/ */ +/* /\* tmp->right->color = Black; *\/ */ +/* /\* tree->current = current->parent; *\/ */ + +/* /\* goto meta(context, RotateL); *\/ */ +/* /\* } else { *\/ */ +/* /\* tmp->left->color = Black; *\/ */ +/* /\* tree->current = current->parent; *\/ */ + +/* /\* goto meta(context, RotateR); *\/ */ +/* /\* } *\/ */ +/* /\* } *\/ */ + +/* /\* __code deleteCase6_stub(struct Context* context) { *\/ */ +/* /\* goto deleteCase6(context, &context->data[Tree]->tree, context->data[Tree]->tree.current); *\/ */ +/* /\* } *\/ */ diff -r 94c9c506bba9 -r 958634b9fa32 paper/src/rotate.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/rotate.c Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,33 @@ +// Code Gear +__code rotateLeft(struct Context* context, struct Node* node, struct Tree* tree, struct Traverse* traverse) { + struct Node* tmp = node->right; + struct Node* parent = 0; + + stack_pop(context->node_stack, &parent); + + if (parent) { + if (node == parent->left) + parent->left = tmp; + else + parent->right = tmp; + } else { + tree->root = tmp; + } + + stack_push(context->node_stack, &parent); + + node->right = tmp->left; + tmp->left = node; + traverse->current = tmp; + + stack_pop(context->code_stack, &context->next); + goto meta(context, context->next); +} + +// Meta Code Gear(stub) +__code rotateLeft_stub(struct Context* context) { + goto rotateLeft(context, + context->data[Traverse]->traverse.current, + &context->data[Tree]->tree, + &context->data[Traverse]->traverse); +} diff -r 94c9c506bba9 -r 958634b9fa32 paper/src/sample.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/sample.c Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,11 @@ +// Code Gear +__code code1(struct Allocate* allocate) { + allocate->size = sizeof(struct Data1); + + goto allocator(allocate, Code2); +} + +// Code Gear +__code code2(struct Data1* data1) { + // processing +} diff -r 94c9c506bba9 -r 958634b9fa32 paper/src/sample_transform.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/sample_transform.c Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,22 @@ +// Code Gear +__code code1(struct Context* context, struct Allocate* allocate) { + allocate->size = sizeof(struct Data1); + context->next = Code2; + + goto meta(context, Allocator); +} + +// Meta Code Gear(stub) +__code code1_stub(struct Context* context) { + goto code1(context, &context->data[Allocate]->allocate); +} + +// Code Gear +__code code2(struct Context* context, struct Data1* data1) { + // processing +} + +// Meta Code Gear(stub) +__code code2_stub(struct Context* context) { + goto code2(context, &context->data[context->dataNum]->data1); +} diff -r 94c9c506bba9 -r 958634b9fa32 paper/src/sync_dequeue.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/sync_dequeue.c Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,20 @@ +// Dequeue +__code getQueue(struct Context* context, struct Queue* queue, struct Node* node) { + if (queue->first == 0) + return; + + struct Element* first = queue->first; + if (__sync_bool_compare_and_swap(&queue->first, first, first->next)) { + queue->count--; + + context->next = GetQueue; + stack_push(context->code_stack, &context->next); + + context->next = first->task->code; + node->key = first->task->key; + + goto meta(context, Get); + } else { + goto meta(context, GetQueue); + } +} diff -r 94c9c506bba9 -r 958634b9fa32 paper/src/sync_enqueue.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/sync_enqueue.c Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,25 @@ +// Enqueue(normal) +__code putQueue3(struct Context* context, struct Queue* queue, struct Element* new_element) { + struct Element* last = queue->last; + + if (__sync_bool_compare_and_swap(&queue->last, last, new_element)) { + last->next = new_element; + queue->count++; + + goto meta(context, context->next); + } else { + goto meta(context, PutQueue3); + } +} + +// Enqueue(nothing element) +__code putQueue4(struct Context* context, struct Queue* queue, struct Element* new_element) { + if (__sync_bool_compare_and_swap(&queue->first, 0, new_element)) { + queue->last = new_element; + queue->count++; + + goto meta(context, context->next); + } else { + goto meta(context, PutQueue3); + } +} diff -r 94c9c506bba9 -r 958634b9fa32 paper/src/tree.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/tree.h Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,63 @@ +// Code Gear Name +enum Code { + PutTree, + Replace, + Insert, + Compare, + RotateL, + RotateR, + SetTree, + InsertCase1, + InsertCase2, + InsertCase3, + InsertCase4, + InsertCase4_1, + InsertCase4_2, + InsertCase5, + StackClear, + Get, + Search, +}; + +// Compare Result +enum Relational { + EQ, + GT, + LT, +}; + +// Unique Data Gear +enum UniqueData { + Tree, + Traverse, + Node, +}; + +// Context definication +struct Context { + stack_ptr node_stack; +}; + +// Red-Black Tree definication +union Data { + // size: 8 byte + struct Tree { + struct Node* root; + } tree; + // size: 12 byte + struct Traverse { + struct Node* current; + int result; + } traverse; + // size: 32 byte + struct Node { + int key; + union Data* value; + struct Node* left; + struct Node* right; + enum Color { + Red, + Black, + } color; + } node; +}; diff -r 94c9c506bba9 -r 958634b9fa32 paper/src/twice.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/twice.c Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,26 @@ +// Code Gear +__code twice(struct Context* context, struct LoopCounter* loopCounter, int index, int alignment, int* array) { + int i = loopCounter->i; + + if (i < alignment) { + array[i+index*alignment] = array[i+index*alignment]*2; + loopCounter->i++; + + goto meta(context, Twice); + } + + loopCounter->i = 0; + + stack_pop(context->code_stack, &context->next); + goto meta(context, context->next); +} + +// Meta Code Gear(stub) +__code twice_stub(struct Context* context) { + goto twice(context, + &context->data[LoopCounter]->loopCounter, + context->data[Node]->node.value->array.index, + context->data[Node]->node.value->array.alignment, + context->data[Node]->node.value->array.array); +} + diff -r 94c9c506bba9 -r 958634b9fa32 paper/src/twice_cerium.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/twice_cerium.cc Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,28 @@ +static int +twice(SchedTask *s,void *rbuf, void *wbuf) +{ + /** + * Get Input Data + * get_input(input data buffer, index) + */ + int* input = (int*)s->get_input(rbuf, 0); + + /** + * Get Output Data + * get_output(output data buffer, index) + */ + int* output = (int*)s->get_output(wbuf, 0); + + /** + * Get index(x, y, z) + * SchedTask member + * x : SchedTask->x + * y : SchedTask->y + * z : SchedTask->z + */ + long i = s->x; + + output[i] = input[i]*2; + + return 0; +} diff -r 94c9c506bba9 -r 958634b9fa32 paper/src/twice_cuda.cu --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/twice_cuda.cu Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,16 @@ +__global__ void +twice(int* input, int* output) +{ + /** + * Get index(x, y, z) + * kernel built-in variables + * x : blockIdx.x * blockDim.x + threadIdx.x + * y : blockIdx.y * blockDim.y + threadIdx.y + * z : blockIdx.z * blockDim.z + threadIdx.z + */ + long i = blockIdx.x * blockDim.x + threadIdx.x; + + output[i] = input[i]*2; + + return 0; +} diff -r 94c9c506bba9 -r 958634b9fa32 paper/thx.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/thx.tex Wed Feb 17 16:59:46 2016 +0900 @@ -0,0 +1,8 @@ +\chapter*{謝辞} +本研究を行うにあたりご多忙にも関わらず日頃より多くのご助言、ご指導をいただきました河野真治准教授に心より感謝いたします。 +また、Cerium の先行研究がなければ本研究は成り立つことはありませんでした。 +Cerium の設計や実装に関わった全ての先輩方に感謝いたします。 + +研究を行うにあたり、研究に対する意見、実装、実験に協力いただいた並列信頼研究室の皆さまに感謝いたします。 + +最後に、長年に渡り理解を示し、支援してくださった家族に感謝いたします。 diff -r 94c9c506bba9 -r 958634b9fa32 result/bitonic_sort/box --- a/result/bitonic_sort/box Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -1 6.145623 -1 6.139483 -1 6.144892 -2 4.539460 -2 4.436463 -2 4.925628 -3 2.530406 -3 2.570707 -3 2.571939 -4 1.631456 -4 1.627970 -4 1.632292 -5 1.322997 -5 1.321029 -5 1.312275 -6 0.149487 -6 0.152230 -6 0.163515 diff -r 94c9c506bba9 -r 958634b9fa32 result/bitonic_sort/cpu_1 --- a/result/bitonic_sort/cpu_1 Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -16384 0.054535 -16384 0.053521 -16384 0.054224 -32768 0.119125 -32768 0.118421 -32768 0.118529 -65536 0.261226 -65536 0.258138 -65536 0.259855 -131072 0.575518 -131072 0.574977 -131072 0.573440 -262144 1.275700 -262144 1.280920 -262144 1.266228 -524288 2.803241 -524288 2.796131 -524288 2.793901 -1048576 6.145623 -1048576 6.139483 -1048576 6.144892 diff -r 94c9c506bba9 -r 958634b9fa32 result/bitonic_sort/cpu_12 --- a/result/bitonic_sort/cpu_12 Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -16384 0.028451 -16384 0.030065 -16384 0.030341 -32768 0.044924 -32768 0.045511 -32768 0.043224 -65536 0.076149 -65536 0.075513 -65536 0.076242 -131072 0.138685 -131072 0.138920 -131072 0.138807 -262144 0.285647 -262144 0.284760 -262144 0.289191 -524288 0.640933 -524288 0.642066 -524288 0.616291 -1048576 1.322997 -1048576 1.321029 -1048576 1.312275 diff -r 94c9c506bba9 -r 958634b9fa32 result/bitonic_sort/cpu_2 --- a/result/bitonic_sort/cpu_2 Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -16384 0.040895 -16384 0.039489 -16384 0.039098 -32768 0.085891 -32768 0.084144 -32768 0.086287 -65536 0.177633 -65536 0.167117 -65536 0.172507 -131072 0.372879 -131072 0.393514 -131072 0.393431 -262144 0.794246 -262144 0.934616 -262144 0.906198 -524288 2.164428 -524288 2.217274 -524288 2.032049 -1048576 4.539460 -1048576 4.436463 -1048576 4.925628 diff -r 94c9c506bba9 -r 958634b9fa32 result/bitonic_sort/cpu_4 --- a/result/bitonic_sort/cpu_4 Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -16384 0.028437 -16384 0.027519 -16384 0.027354 -32768 0.056601 -32768 0.056044 -32768 0.057884 -65536 0.117800 -65536 0.121380 -65536 0.121663 -131072 0.244752 -131072 0.246284 -131072 0.248601 -262144 0.549241 -262144 0.545955 -262144 0.517979 -524288 1.192022 -524288 1.123386 -524288 1.195495 -1048576 2.530406 -1048576 2.570707 -1048576 2.571939 diff -r 94c9c506bba9 -r 958634b9fa32 result/bitonic_sort/cpu_8 --- a/result/bitonic_sort/cpu_8 Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -16384 0.024300 -16384 0.024318 -16384 0.023870 -32768 0.041917 -32768 0.042845 -32768 0.042200 -65536 0.081457 -65536 0.080062 -65536 0.081057 -131072 0.169538 -131072 0.164242 -131072 0.166205 -262144 0.351782 -262144 0.355738 -262144 0.356107 -524288 0.771449 -524288 0.752787 -524288 0.755115 -1048576 1.631456 -1048576 1.627970 -1048576 1.632292 diff -r 94c9c506bba9 -r 958634b9fa32 result/bitonic_sort/gpu --- a/result/bitonic_sort/gpu Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -16384 0.083421 -16384 0.093149 -16384 0.078294 -32768 0.084040 -32768 0.095510 -32768 0.087000 -65536 0.100729 -65536 0.090225 -65536 0.085858 -131072 0.105753 -131072 0.103785 -131072 0.109697 -262144 0.115981 -262144 0.119174 -262144 0.108622 -524288 0.122353 -524288 0.127722 -524288 0.125356 -1048576 0.149487 -1048576 0.152230 -1048576 0.163515 diff -r 94c9c506bba9 -r 958634b9fa32 result/box.plt --- a/result/box.plt Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,9 +0,0 @@ -set term pdf -set output "word_count.pdf" -set boxwidth 0.5 relative -set style fill solid border lc rgb "black" -set ylabel "time(ms)" -set xrange[0:8] -set yrange[0:1000] -set xtics ("1 cpu" 1, "2 cpus" 2, "4 cpus" 3, "8 cpus" 4, "12 cpus" 5, "gpu" 6, "gpu(data parallel)" 7) -plot "word_count/result" u 1:($2*1000) smooth unique with boxes lw 2 lc rgb "light-cyan" notitle diff -r 94c9c506bba9 -r 958634b9fa32 result/fft/result --- a/result/fft/result Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -1 1.958956 -1 1.966016 -1 1.950610 -2 1.125611 -2 1.200725 -2 1.197753 -3 0.707902 -3 0.733299 -3 0.692185 -4 0.437522 -4 0.475558 -4 0.440223 -5 0.368692 -5 0.378096 -5 0.372550 -6 0.415012 -6 0.416886 -6 0.424896 diff -r 94c9c506bba9 -r 958634b9fa32 result/graph.plt --- a/result/graph.plt Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -set term pdf -set output "twice.pdf" -set xlabel "Number of CPU" -set ylabel "time(ms)" -set grid -set xrange [1:12] -plot "twice/task_640" u 1:($2*1000) smooth unique title "204800 elements per Task" \ No newline at end of file diff -r 94c9c506bba9 -r 958634b9fa32 result/twice/task_64 --- a/result/twice/task_64 Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -1 1.246386 -1 1.246681 -1 1.244309 -2 0.628358 -2 0.631107 -2 0.629942 -4 0.327789 -4 0.327607 -4 0.325506 -8 0.165063 -8 0.165796 -8 0.166200 -12 0.122147 -12 0.121734 -12 0.120947 diff -r 94c9c506bba9 -r 958634b9fa32 result/twice/task_640 --- a/result/twice/task_640 Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -1 1.312108 -1 1.318565 -1 1.316683 -2 0.691450 -2 0.687672 -2 0.690753 -4 0.375747 -4 0.362807 -4 0.359630 -8 0.188330 -8 0.192578 -8 0.188250 -12 0.110277 -12 0.114549 -12 0.110316 diff -r 94c9c506bba9 -r 958634b9fa32 result/twice/task_6400 --- a/result/twice/task_6400 Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -1 1.986212 -1 1.967297 -1 1.966392 -2 1.122235 -2 1.148616 -2 1.084848 -4 0.616860 -4 0.593097 -4 0.621747 -8 0.317680 -8 0.344738 -8 0.321525 -12 0.112422 -12 0.112661 -12 0.117707 diff -r 94c9c506bba9 -r 958634b9fa32 result/word_count/cpu_1 --- a/result/word_count/cpu_1 Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -0.718177 -0.718678 -0.714053 diff -r 94c9c506bba9 -r 958634b9fa32 result/word_count/cpu_12 --- a/result/word_count/cpu_12 Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -0.084439 -0.092542 -0.086132 diff -r 94c9c506bba9 -r 958634b9fa32 result/word_count/cpu_2 --- a/result/word_count/cpu_2 Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -0.370620 -0.373916 -0.377258 diff -r 94c9c506bba9 -r 958634b9fa32 result/word_count/cpu_4 --- a/result/word_count/cpu_4 Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -0.198103 -0.196991 -0.196469 diff -r 94c9c506bba9 -r 958634b9fa32 result/word_count/cpu_8 --- a/result/word_count/cpu_8 Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -0.105340 -0.105016 -0.104969 diff -r 94c9c506bba9 -r 958634b9fa32 result/word_count/gpu --- a/result/word_count/gpu Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -9.881886 -9.897281 -9.919438 diff -r 94c9c506bba9 -r 958634b9fa32 result/word_count/gpu_dp --- a/result/word_count/gpu_dp Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -0.517102 -0.513130 -0.512495 diff -r 94c9c506bba9 -r 958634b9fa32 result/word_count/result --- a/result/word_count/result Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -1 0.718177 -1 0.718678 -1 0.714053 -2 0.370620 -2 0.373916 -2 0.377258 -3 0.198103 -3 0.196991 -3 0.196469 -4 0.105340 -4 0.105016 -4 0.104969 -5 0.084439 -5 0.092542 -5 0.086132 -6 9.881886 -6 9.897281 -6 9.919438 -7 0.517102 -7 0.513130 -7 0.512495 diff -r 94c9c506bba9 -r 958634b9fa32 src/allocate.c --- a/src/allocate.c Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -// Code Gear -__code start_code(struct Context* context) { - // start processing - goto meta(context, context->next); -} - -// Meta Code Gear -__code meta(struct Context* context, enum Code next) { - // meta computation - goto (context->code[next])(context); -} - -// Code Gear -__code code1(struct Context* context, struct Allocate* allocate) { - allocate->size = sizeof(struct Data1); - context->next = Code2; - - goto meta(context, Allocator); -} - -// Meta Code Gear(stub) -__code code1_stub(struct Context* context) { - goto code1(context, &context->data[Allocate]->allocate); -} - -// Meta Code Gear -__code allocator(struct Context* context, struct Allocate* allocate) { - context->data[++context->dataNum] = context->heap; - context->heap += allocate->size; - - goto meta(context, context->next); -} - -// Meta Code Gear(stub) -__code allocator_stub(struct Context* context) { - goto allocator(context, &context->data[Allocate]->allcate); -} - -// Code Gear -__code code2(struct Context* context, struct Data1* data1) { - // processing -} - -// Meta Code Gear(stub) -__code code2_stub(struct Context* context) { - goto code2(context, &context->data[context->dataNum]->data1); -} diff -r 94c9c506bba9 -r 958634b9fa32 src/context.h --- a/src/context.h Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* Context definition example */ -#define ALLOCATE_SIZE 1000 - -// Code Gear Name -enum Code { - Code1, - Code2, - Allocator, - Exit, -}; - -// Unique Data Gear -enum UniqueData { - Allocate, -}; - -struct Context { - enum Code next; - int codeNum; - __code (**code) (struct Context*); - void* heapStart; - void* heap; - long heapLimit; - int dataNum; - union Data **data; -}; - -// Data Gear definition -union Data { - // size: 4 byte - struct Data1 { - int i; - } data1; - // size: 5 byte - struct Data2 { - int i; - char c; - } data2; - // size: 8 byte - struct Allocate { - long size; - } allocate; -}; diff -r 94c9c506bba9 -r 958634b9fa32 src/dequeue.c --- a/src/dequeue.c Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -// Dequeue -__code getQueue(struct Context* context, struct Queue* queue, struct Node* node) { - if (queue->first == 0) - return; - - struct Element* first = queue->first; - queue->first = first->next; - queue->count--; - - context->next = GetQueue; - stack_push(context->code_stack, &context->next); - - context->next = first->task->code; - node->key = first->task->key; - - goto meta(context, GetTree); -} - -// Meta Code Gear(stub) -__code getQueue_stub(struct Context* context) { - goto getQueue(context, - &context->data[ActiveQueue]->queue, - &context->data[Node]->node); -} diff -r 94c9c506bba9 -r 958634b9fa32 src/enqueue.c --- a/src/enqueue.c Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -// allocate Element -__code putQueue1(struct Context* context, struct Allocate* allocate) { - allocate->size = sizeof(struct Element); - allocator(context); - - goto meta(context, PutQueue2); -} - -// Meta Code Gear(stub) -__code putQueue1_stub(struct Context* context) { - goto putQueue1(context, &context->data[Allocate]->allocate); -} - -// write Element infomation -__code putQueue2(struct Context* context, struct Element* new_element, struct Element* element, struct Queue* queue) { - new_element->task = element->task; - - if (queue->first) - goto meta(context, PutQueue3); - else - goto meta(context, PutQueue4); -} - -// Meta Code Gear(stub) -__code putQueue2_stub(struct Context* context) { - goto putQueue2(context, - &context->data[context->dataNum]->element, - &context->data[Element]->element, - &context->data[ActiveQueue]->queue); -} - -// Enqueue(normal) -__code putQueue3(struct Context* context, struct Queue* queue, struct Element* new_element) { - struct Element* last = queue->last; - last->next = new_element; - - queue->last = new_element; - queue->count++; - - goto meta(context, context->next); -} - -// Meta Code Gear(stub) -__code putQueue3_stub(struct Context* context) { - goto putQueue3(context, - &context->data[ActiveQueue]->queue, - &context->data[context->dataNum]->element); -} - -// Enqueue(nothing element) -__code putQueue4(struct Context* context, struct Queue* queue, struct Element* new_element) { - queue->first = new_element; - queue->last = new_element; - queue->count++; - - goto meta(context, context->next); -} - -// Meta Code Gear(stub) -__code putQueue4_stub(struct Context* context) { - goto putQueue4(context, - &context->data[ActiveQueue]->queue, - &context->data[context->dataNum]->element); -} diff -r 94c9c506bba9 -r 958634b9fa32 src/initContext.c --- a/src/initContext.c Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -#include - -#include "context.h" - -extern __code code1_stub(struct Context*); -extern __code code2_stub(struct Context*); -extern __code allocator_stub(struct Context*); -extern __code exit_code(struct Context*); - -__code initContext(struct Context* context, int num) { - context->heapLimit = sizeof(union Data)*ALLOCATE_SIZE; - context->heapStart = malloc(context->heapLimit); - context->heap = context->heapStart; - context->codeNum = Exit; - - context->code = malloc(sizeof(__code*)*ALLOCATE_SIZE); - context->data = malloc(sizeof(union Data*)*ALLOCATE_SIZE); - - context->code[Code1] = code1_stub; - context->code[Code2] = code2_stub; - context->code[Allocator] = allocator_stub; - context->code[Exit] = exit_code; - - context->data[Allocate] = context->heap; - context->heap += sizeof(struct Allocate); - - context->dataNum = Allocate; -} diff -r 94c9c506bba9 -r 958634b9fa32 src/initWorker.c --- a/src/initWorker.c Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -// Code Gear -__code createWorker(struct Context* context, struct LoopCounter* loopCounter, struct Worker* worker) { - int i = loopCounter->i; - - if (i < worker->num) { - struct Context* worker_context = &worker->contexts[i]; - worker_context->next = GetQueue; - worker_context->data[Tree] = context->data[Tree]; - worker_context->data[ActiveQueue] = context->data[ActiveQueue]; - pthread_create(&worker_context->thread, NULL, (void*)&start_code, worker_context); - worker_context->thread_num = i; - loopCounter->i++; - - goto meta(context, CreateWorker); - } - - loopCounter->i = 0; - goto meta(context, TaskManager); -} - -// Meta Code Gear -__code createWorker_stub(struct Context* context) { - goto createWorker(context, &context->data[LoopCounter]->loopCounter, &context->data[Worker]->worker); -} diff -r 94c9c506bba9 -r 958634b9fa32 src/init_twice_cerium.cc --- a/src/init_twice_cerium.cc Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -void -twice_init(TaskManager *manager, int* data, int length) -{ - /** - * Create Task - * create_task(Task ID); - */ - HTask* twice = manager->create_task(TWICE_TASK); - - /** - * Set of Device - * set_cpu(CPU or GPU) - */ - twice->set_cpu(SPE_ANY); - - /** - * Set of Input Data - * set_inData(index, address of input data, size of input data); - */ - twice->set_inData(0, data, sizeof(int)*length); - - /** - * Set of OutPut area - * set_outData(index, address of output area, size of output area); - */ - twice->set_outData(0, data, sizeof(int)*length); - - /** - * Enqueue Task - * iterate(Number of Tasks) - */ - twice->iterate(length); -} diff -r 94c9c506bba9 -r 958634b9fa32 src/insert.c --- a/src/insert.c Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -// Code Gear -__code insertCase2(struct Context* context, struct Node* current) { - struct Node* parent; - stack_pop(context->node_stack, &parent); - - if (parent->color == Black) { - stack_pop(context->code_stack, &context->next); - goto meta(context, context->next); - } - - stack_push(context->node_stack, &parent); - goto meta(context, InsertCase3); -} - -// Meta Code Gear(stub) -__code insert2_stub(struct Context* context) { - goto insertCase2(context, context->data[Traverse]->traverse.current); -} diff -r 94c9c506bba9 -r 958634b9fa32 src/openmp.c --- a/src/openmp.c Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4 +0,0 @@ -#pragma omp parallel for -for(int i=0;i - -#include "context.h" -#include "origin_cs.h" - -extern void allocator(struct Context* context); -extern void compare(struct Context* context, struct Traverse* traverse, int key1, int key2); - -extern int num; - -__code put(struct Context* context, struct Tree* tree, struct Traverse* traverse, struct Node* root, struct Allocate* allocate) { - allocate->size = sizeof(struct Node); - allocator(context); - - stack_push(context->code_stack, &context->next); - - context->next = StackClear; - stack_push(context->code_stack, &context->next); - - tree->root = &context->data[context->dataNum]->node; - - if (root) { - traverse->current = root; - compare(context, traverse, traverse->current->key, context->data[Node]->node.key); - - goto meta(context, Replace); - } - - goto meta(context, Insert); -} - -__code put_stub(struct Context* context) { - goto put(context, - &context->data[Tree]->tree, - &context->data[Traverse]->traverse, - context->data[Tree]->tree.root, - &context->data[Allocate]->allocate); -} - -__code replaceNode(struct Context* context, struct Traverse* traverse, struct Node* oldNode, struct Node* newNode, int result) { - *newNode = *oldNode; - stack_push(context->node_stack, &newNode); - - if (result == EQ) { - newNode->value = context->data[Node]->node.value; - - stack_pop(context->code_stack, &context->next); - goto meta(context, context->next); - } else if (result == GT) { - traverse->current = oldNode->right; - newNode->right = context->heap; - } else { - traverse->current = oldNode->left; - newNode->left = context->heap; - } - - allocator(context); - - if (traverse->current) { - compare(context, traverse, traverse->current->key, context->data[Node]->node.key); - goto meta(context, Replace); - } - - goto meta(context, Insert); -} - -__code replaceNode_stub(struct Context* context) { - goto replaceNode(context, - &context->data[Traverse]->traverse, - context->data[Traverse]->traverse.current, - &context->data[context->dataNum]->node, - context->data[Traverse]->traverse.result); -} - -__code insertNode(struct Context* context, struct Traverse* traverse, struct Node* node, struct Node* newNode) { - node->color = Red; - *newNode = *node; - - traverse->current = newNode; - - goto meta(context, InsertCase1); -} - -__code insertNode_stub(struct Context* context) { - goto insertNode(context, - &context->data[Traverse]->traverse, - &context->data[Node]->node, - &context->data[context->dataNum]->node); -} - -__code insertCase1(struct Context* context, struct Tree* tree, struct Node* current) { - if (!isEmpty(context->node_stack)) - goto meta(context, InsertCase2); - - tree->root->color = Black; - - stack_pop(context->code_stack, &context->next); - goto meta(context, context->next); -} - -__code insert1_stub(struct Context* context) { - goto insertCase1(context, &context->data[Tree]->tree, context->data[Traverse]->traverse.current); -} - -__code insertCase2(struct Context* context, struct Node* current) { - struct Node* parent; - stack_pop(context->node_stack, &parent); - - if (parent->color == Black) { - stack_pop(context->code_stack, &context->next); - goto meta(context, context->next); - } - - stack_push(context->node_stack, &parent); - goto meta(context, InsertCase3); -} - -__code insert2_stub(struct Context* context) { - goto insertCase2(context, context->data[Traverse]->traverse.current); -} - -__code insertCase3(struct Context* context, struct Traverse* traverse, struct Node* current) { - struct Node* parent; - struct Node* uncle; - struct Node* grandparent; - - stack_pop(context->node_stack, &parent); - stack_pop(context->node_stack, &grandparent); - - if (grandparent->left == parent) - uncle = grandparent->right; - else - uncle = grandparent->left; - - if (uncle && (uncle->color == Red)) { - parent->color = Black; - uncle->color = Black; - grandparent->color = Red; - traverse->current = grandparent; - goto meta(context, InsertCase1); - } - - stack_push(context->node_stack, &grandparent); - stack_push(context->node_stack, &parent); - - goto meta(context, InsertCase4); -} - -__code insert3_stub(struct Context* context) { - goto insertCase3(context, &context->data[Traverse]->traverse, context->data[Traverse]->traverse.current); -} - -__code insertCase4(struct Context* context, struct Traverse* traverse, struct Node* current) { - struct Node* parent; - struct Node* grandparent; - - stack_pop(context->node_stack, &parent); - stack_pop(context->node_stack, &grandparent); - - stack_push(context->node_stack, &grandparent); - - traverse->current = parent; - - if ((current == parent->right) && (parent == grandparent->left)) { - context->next = InsertCase4_1; - - stack_push(context->code_stack, &context->next); - goto meta(context, RotateL); - } else if ((current == parent->left) && (parent == grandparent->right)) { - context->next = InsertCase4_2; - - stack_push(context->code_stack, &context->next); - goto meta(context, RotateR); - } - - stack_push(context->node_stack, &parent); - traverse->current = current; - goto meta(context, InsertCase5); -} - -__code insert4_stub(struct Context* context) { - goto insertCase4(context, &context->data[Traverse]->traverse, context->data[Traverse]->traverse.current); -} - -__code insertCase4_1(struct Context* context, struct Traverse* traverse) { - stack_push(context->node_stack, &traverse->current); - traverse->current = traverse->current->left; - goto meta(context, InsertCase5); -} - -__code insert4_1_stub(struct Context* context) { - goto insertCase4_1(context, &context->data[Traverse]->traverse); -} - -__code insertCase4_2(struct Context* context, struct Traverse* traverse) { - stack_push(context->node_stack, &traverse->current); - traverse->current = traverse->current->right; - goto meta(context, InsertCase5); -} - -__code insert4_2_stub(struct Context* context) { - goto insertCase4_2(context, &context->data[Traverse]->traverse); -} - -__code insertCase5(struct Context* context, struct Traverse* traverse, struct Node* current) { - struct Node* parent; - struct Node* grandparent; - - stack_pop(context->node_stack, &parent); - stack_pop(context->node_stack, &grandparent); - - parent->color = Black; - grandparent->color = Red; - - traverse->current = grandparent; - - if ((current == parent->left) && (parent == grandparent->left)) - goto meta(context, RotateR); - else - goto meta(context, RotateL); -} - -__code insert5_stub(struct Context* context) { - goto insertCase5(context, &context->data[Traverse]->traverse, context->data[Traverse]->traverse.current); -} - -__code rotateLeft(struct Context* context, struct Node* node, struct Tree* tree, struct Traverse* traverse) { - struct Node* tmp = node->right; - struct Node* parent = 0; - - stack_pop(context->node_stack, &parent); - - if (parent) { - if (node == parent->left) - parent->left = tmp; - else - parent->right = tmp; - } else { - tree->root = tmp; - } - - stack_push(context->node_stack, &parent); - - node->right = tmp->left; - tmp->left = node; - traverse->current = tmp; - - stack_pop(context->code_stack, &context->next); - goto meta(context, context->next); -} - -__code rotateLeft_stub(struct Context* context) { - goto rotateLeft(context, - context->data[Traverse]->traverse.current, - &context->data[Tree]->tree, - &context->data[Traverse]->traverse); -} - -__code rotateRight(struct Context* context, struct Node* node, struct Tree* tree, struct Traverse* traverse) { - struct Node* tmp = node->left; - struct Node* parent = 0; - - stack_pop(context->node_stack, &parent); - - if (parent) { - if (node == parent->left) - parent->left = tmp; - else - parent->right = tmp; - } else { - tree->root = tmp; - } - - stack_push(context->node_stack, &parent); - - node->left = tmp->right; - tmp->right = node; - traverse->current = tmp; - - stack_pop(context->code_stack, &context->next); - goto meta(context, context->next); -} - -__code rotateRight_stub(struct Context* context) { - goto rotateRight(context, - context->data[Traverse]->traverse.current, - &context->data[Tree]->tree, - &context->data[Traverse]->traverse); -} - -__code stackClear(struct Context* context, stack_ptr node_stack, struct Traverse* traverse) { - if (stack_pop(node_stack, &traverse->current) == 0) - goto meta(context, StackClear); - - traverse->current = 0; - - stack_pop(context->code_stack, &context->next); - goto meta(context, context->next); -} - -__code stackClear_stub(struct Context* context) { - goto stackClear(context, context->node_stack, &context->data[Traverse]->traverse); -} - - -__code get(struct Context* context, struct Tree* tree, struct Traverse* traverse) { - if (tree->root) { - traverse->current = tree->root; - - goto meta(context, Search); - } - - stack_pop(context->code_stack, &context->next); - goto meta(context, context->next); -} - -__code get_stub(struct Context* context) { - goto get(context, &context->data[Tree]->tree, &context->data[Traverse]->traverse); -} - -__code search(struct Context* context, struct Traverse* traverse, struct Node* node) { - compare(context, traverse, traverse->current->key, node->key); - - if (traverse->result == EQ) { - *node = *traverse->current; - - goto meta(context, context->next); - } else if (traverse->result == GT) { - traverse->current = traverse->current->right; - } else { - traverse->current = traverse->current->left; - } - - if (traverse->current) - goto meta(context, Search); - - stack_pop(context->code_stack, &context->next); - goto meta(context, context->next); -} - -__code search_stub(struct Context* context) { - goto search(context, &context->data[Traverse]->traverse, &context->data[Node]->node); -} - -/* /\* __code delete(struct Context* context, struct Tree* tree) { *\/ */ -/* /\* if (tree->root) { *\/ */ -/* /\* stack_push(context->code_stack, &context->next); *\/ */ -/* /\* context->next = Delete1; *\/ */ -/* /\* goto meta(context, Get); *\/ */ -/* /\* } *\/ */ - -/* /\* goto meta(context, context->next); *\/ */ -/* /\* } *\/ */ - -/* /\* __code delete_stub(struct Context* context) { *\/ */ -/* /\* goto delete(context, &context->data[Tree]->tree); *\/ */ -/* /\* } *\/ */ - -/* /\* __code delete1(struct Context* context, struct Tree* tree, struct Allocate* allocate) { *\/ */ -/* /\* allocate->size = sizeof(struct Node); *\/ */ -/* /\* allocator(context); *\/ */ - -/* /\* struct Node* root = tree->root; *\/ */ - -/* /\* tree->root = &context->data[context->dataNum]->node; *\/ */ -/* /\* tree->current = root; *\/ */ - -/* /\* compare(context, tree, tree->current->key, context->data[Node]->node.key); *\/ */ - -/* /\* goto meta(context, Replace_d1); *\/ */ -/* /\* } *\/ */ - -/* /\* __code delete1_stub(struct Context* context) { *\/ */ -/* /\* goto delete1(context, &context->data[Tree]->tree, &context->data[Allocate]->allocate); *\/ */ -/* /\* } *\/ */ - -/* /\* __code delete2(struct Context* context, struct Node* current) { *\/ */ -/* /\* if (current->color == Black) { *\/ */ -/* /\* struct Node* child = current->right == NULL ? current->left : current->right; *\/ */ -/* /\* current->color = child == NULL ? Black : child->color; *\/ */ - -/* /\* goto meta(context, DeleteCase1); *\/ */ -/* /\* } *\/ */ - -/* /\* goto meta(context, Delete3); *\/ */ -/* /\* } *\/ */ - -/* /\* __code delete2_stub(struct Context* context) { *\/ */ -/* /\* goto delete2(context, context->data[Tree]->tree.current); *\/ */ -/* /\* } *\/ */ - -/* /\* __code delete3(struct Context* context, struct Tree* tree, struct Node* current) { *\/ */ -/* /\* struct Node* tmp = current->right == NULL ? current->left : current->right; *\/ */ - -/* /\* if (current->parent) { *\/ */ -/* /\* if (current == current->parent->left) *\/ */ -/* /\* current->parent->left = tmp; *\/ */ -/* /\* else *\/ */ -/* /\* current->parent->right = tmp; *\/ */ -/* /\* } else { *\/ */ -/* /\* tree->root = tmp; *\/ */ -/* /\* } *\/ */ - -/* /\* if (tmp) *\/ */ -/* /\* tmp->parent = current->parent; *\/ */ - -/* /\* if (current->parent == NULL && tmp) *\/ */ -/* /\* tmp->color = Black; *\/ */ - -/* /\* current == current->parent->left ? (current->parent->left = NULL) : (current->parent->right = NULL); *\/ */ - -/* /\* stack_pop(context->code_stack, &context->next); *\/ */ -/* /\* goto meta(context, context->next); *\/ */ -/* /\* } *\/ */ - -/* /\* __code delete3_stub(struct Context* context) { *\/ */ -/* /\* goto delete3(context, &context->data[Tree]->tree, context->data[Tree]->tree.current); *\/ */ -/* /\* } *\/ */ - -/* /\* __code replaceNodeForDelete1(struct Context* context, struct Tree* tree, struct Node* oldNode, struct Node* newNode, int result) { *\/ */ -/* /\* *newNode = *oldNode; *\/ */ - -/* /\* if (result == EQ) *\/ */ -/* /\* goto meta(context, Replace_d2); *\/ */ -/* /\* else if (result == GT) *\/ */ -/* /\* tree->current = newNode->right; *\/ */ -/* /\* else *\/ */ -/* /\* tree->current = newNode->left; *\/ */ - -/* /\* tree->current->parent = newNode; *\/ */ - -/* /\* if (tree->current->left == NULL && tree->current->right == NULL) *\/ */ -/* /\* goto meta(context, Delete2); *\/ */ - -/* /\* if (result == GT) *\/ */ -/* /\* newNode->right = context->heap; *\/ */ -/* /\* else if (result == LT) *\/ */ -/* /\* newNode->left = context->heap; *\/ */ - -/* /\* allocator(context); *\/ */ - -/* /\* compare(context, tree, tree->current->key, context->data[Node]->node.key); *\/ */ - -/* /\* goto meta(context, Replace_d1); *\/ */ -/* /\* } *\/ */ - -/* /\* __code replaceNodeForDelete1_stub(struct Context* context) { *\/ */ -/* /\* goto replaceNodeForDelete1(context, &context->data[Tree]->tree, context->data[Tree]->tree.current, &context->data[context->dataNum]->node, context->data[Tree]->tree.result); *\/ */ -/* /\* } *\/ */ - -/* /\* __code replaceNodeForDelete2(struct Context* context, struct Tree* tree, struct Node* newNode) { *\/ */ -/* /\* if (tree->current->left && tree->current->right) { *\/ */ -/* /\* newNode->left->parent = newNode; *\/ */ -/* /\* tree->current = newNode->left; *\/ */ -/* /\* newNode->left = context->heap; *\/ */ -/* /\* tree->deleted = newNode; *\/ */ - -/* /\* allocator(context); *\/ */ -/* /\* tree->current->parent = newNode; *\/ */ - -/* /\* goto meta(context, FindMax1); *\/ */ -/* /\* } *\/ */ - -/* /\* goto meta(context, Delete2); *\/ */ -/* /\* } *\/ */ - -/* /\* __code replaceNodeForDelete2_stub(struct Context* context) { *\/ */ -/* /\* goto replaceNodeForDelete2(context, &context->data[Tree]->tree, &context->data[context->dataNum]->node); *\/ */ -/* /\* } *\/ */ - -/* /\* __code findMax1(struct Context* context, struct Tree* tree, struct Node* oldNode, struct Node* newNode) { *\/ */ -/* /\* *newNode = *oldNode; *\/ */ - -/* /\* if (newNode->right) *\/ */ -/* /\* goto meta(context, FindMax2); *\/ */ - -/* /\* tree->deleted->key = newNode->key; *\/ */ -/* /\* tree->deleted->value = newNode->value; *\/ */ - -/* /\* tree->current = newNode; *\/ */ - -/* /\* goto meta(context, Delete2); *\/ */ -/* /\* } *\/ */ - -/* /\* __code findMax1_stub(struct Context* context) { *\/ */ -/* /\* goto findMax1(context, &context->data[Tree]->tree, context->data[Tree]->tree.current, &context->data[context->dataNum]->node); *\/ */ -/* /\* } *\/ */ - - -/* /\* __code findMax2(struct Context* context, struct Tree* tree, struct Node* oldNode, struct Node* newNode) { *\/ */ -/* /\* *newNode = *oldNode; *\/ */ - -/* /\* if (newNode->right->right) { *\/ */ -/* /\* tree->current = newNode->right; *\/ */ -/* /\* newNode->right = context->heap; *\/ */ - -/* /\* allocator(context); *\/ */ -/* /\* tree->current->parent = newNode; *\/ */ - -/* /\* goto meta(context, FindMax2); *\/ */ -/* /\* } *\/ */ - -/* /\* tree->deleted->key = newNode->right->key; *\/ */ -/* /\* tree->deleted->value = newNode->right->value; *\/ */ - -/* /\* tree->current = newNode; *\/ */ - -/* /\* goto meta(context, Delete2); *\/ */ -/* /\* } *\/ */ - -/* /\* __code findMax2_stub(struct Context* context) { *\/ */ -/* /\* goto findMax2(context, &context->data[Tree]->tree, context->data[Tree]->tree.current, &context->data[context->dataNum]->node); *\/ */ -/* /\* } *\/ */ - -/* /\* __code deleteCase1(struct Context* context, struct Node* current) { *\/ */ -/* /\* if (current->parent) *\/ */ -/* /\* goto meta(context, DeleteCase2); *\/ */ - -/* /\* goto meta(context, Delete3); *\/ */ -/* /\* } *\/ */ - -/* /\* __code deleteCase1_stub(struct Context* context) { *\/ */ -/* /\* goto deleteCase1(context, context->data[Tree]->tree.current); *\/ */ -/* /\* } *\/ */ - -/* /\* __code deleteCase2(struct Context* context, struct Tree* tree, struct Node* current) { *\/ */ -/* /\* struct Node* sibling = current == current->parent->left ? current->parent->right : current->parent->left; *\/ */ - -/* /\* if ((sibling == NULL ? Black : sibling->color) == Red) { *\/ */ -/* /\* current->parent->color = Red; *\/ */ -/* /\* sibling->color = Black; *\/ */ - -/* /\* current == current->parent->left ? (current->parent->left = context->heap) : (current->parent->right = context->heap); *\/ */ -/* /\* allocator(context); *\/ */ -/* /\* context->data[context->dataNum]->node = *sibling; *\/ */ - -/* /\* tree->current = current->parent; *\/ */ - -/* /\* context->next = DeleteCase3; *\/ */ -/* /\* stack_push(context->code_stack, &context->next); *\/ */ - -/* /\* if (current == current->parent->left) *\/ */ -/* /\* goto meta(context, RotateL); *\/ */ -/* /\* else *\/ */ -/* /\* goto meta(context, RotateR); *\/ */ -/* /\* } *\/ */ - -/* /\* goto meta(context, DeleteCase3); *\/ */ -/* /\* } *\/ */ - -/* /\* __code deleteCase2_stub(struct Context* context) { *\/ */ -/* /\* goto deleteCase2(context, &context->data[Tree]->tree, context->data[Tree]->tree.current); *\/ */ -/* /\* } *\/ */ - -/* /\* __code deleteCase3(struct Context* context, struct Tree* tree, struct Node* current) { *\/ */ -/* /\* struct Node* sibling = current == current->parent->left ? current->parent->right : current->parent->left; *\/ */ - -/* /\* if (current->parent->color == Black && *\/ */ -/* /\* (sibling == NULL ? Black : sibling->color) == Black && *\/ */ -/* /\* (sibling->left == NULL ? Black : sibling->left->color) == Black && *\/ */ -/* /\* (sibling->right == NULL ? Black : sibling->right->color) == Black) { *\/ */ -/* /\* sibling->color = Red; *\/ */ - -/* /\* tree->current = current->parent; *\/ */ -/* /\* goto meta(context, DeleteCase1); *\/ */ -/* /\* } *\/ */ - -/* /\* goto meta(context, DeleteCase4); *\/ */ -/* /\* } *\/ */ - -/* /\* __code deleteCase3_stub(struct Context* context) { *\/ */ -/* /\* goto deleteCase3(context, &context->data[Tree]->tree, context->data[Tree]->tree.current); *\/ */ -/* /\* } *\/ */ - -/* /\* __code deleteCase4(struct Context* context, struct Node* current) { *\/ */ -/* /\* struct Node* sibling = current == current->parent->left ? current->parent->right : current->parent->left; *\/ */ - -/* /\* if (current->parent->color == Red && *\/ */ -/* /\* (sibling == NULL ? Black : sibling->color) == Black && *\/ */ -/* /\* (sibling->left == NULL ? Black : sibling->left->color) == Black && *\/ */ -/* /\* (sibling->right == NULL ? Black : sibling->right->color) == Black) { *\/ */ -/* /\* sibling->color = Red; *\/ */ -/* /\* current->parent->color = Black; *\/ */ - -/* /\* goto meta(context, Delete3); *\/ */ -/* /\* } *\/ */ - -/* /\* goto meta(context, DeleteCase5); *\/ */ -/* /\* } *\/ */ - -/* /\* __code deleteCase4_stub(struct Context* context) { *\/ */ -/* /\* goto deleteCase4(context, context->data[Tree]->tree.current); *\/ */ -/* /\* } *\/ */ - -/* /\* __code deleteCase5(struct Context* context, struct Tree* tree, struct Node* current) { *\/ */ -/* /\* struct Node* sibling = current == current->parent->left ? current->parent->right : current->parent->left; *\/ */ -/* /\* sibling->parent = current->parent; *\/ */ - -/* /\* if (current == current->parent->left && *\/ */ -/* /\* (sibling == NULL ? Black : sibling->color) == Black && *\/ */ -/* /\* (sibling->left == NULL ? Black : sibling->left->color) == Red && *\/ */ -/* /\* (sibling->right == NULL ? Black : sibling->right->color) == Black) { *\/ */ -/* /\* sibling->color = Red; *\/ */ -/* /\* sibling->left->color = Black; *\/ */ - -/* /\* sibling == sibling->parent->left ? (sibling->parent->left = context->heap) : (sibling->parent->right = context->heap); *\/ */ -/* /\* allocator(context); *\/ */ -/* /\* struct Node* tmp = &context->data[context->dataNum]->node; *\/ */ -/* /\* *tmp = *sibling; *\/ */ -/* /\* tmp->parent = current; *\/ */ - -/* /\* tmp->left = context->heap; *\/ */ -/* /\* allocator(context); *\/ */ -/* /\* context->data[context->dataNum]->node = *sibling->left; *\/ */ -/* /\* context->data[context->dataNum]->node.parent = tmp; *\/ */ - -/* /\* tree->current = tmp; *\/ */ - -/* /\* context->next = DeleteCase6; *\/ */ -/* /\* stack_push(context->code_stack, &context->next); *\/ */ - -/* /\* goto meta(context, RotateR); *\/ */ -/* /\* } else if (current == current->parent->right && *\/ */ -/* /\* (sibling == NULL ? Black : sibling->color) == Black && *\/ */ -/* /\* (sibling->left == NULL ? Black : sibling->left->color) == Black && *\/ */ -/* /\* (sibling->right == NULL ? Black : sibling->right->color) == Red) { *\/ */ -/* /\* sibling->color = Red; *\/ */ -/* /\* sibling->right->color = Black; *\/ */ - -/* /\* sibling == sibling->parent->left ? (sibling->parent->left = context->heap) : (sibling->parent->right = context->heap); *\/ */ -/* /\* allocator(context); *\/ */ -/* /\* struct Node* tmp = &context->data[context->dataNum]->node; *\/ */ -/* /\* *tmp = *sibling; *\/ */ -/* /\* tmp->parent = current; *\/ */ - -/* /\* tmp->right = context->heap; *\/ */ -/* /\* allocator(context); *\/ */ -/* /\* context->data[context->dataNum]->node = *sibling->right; *\/ */ -/* /\* context->data[context->dataNum]->node.parent = tmp; *\/ */ - -/* /\* tree->current = tmp; *\/ */ - -/* /\* context->next = DeleteCase6; *\/ */ -/* /\* stack_push(context->code_stack, &context->next); *\/ */ -/* /\* goto meta(context, RotateL); *\/ */ -/* /\* } *\/ */ - -/* /\* goto meta(context, DeleteCase6); *\/ */ -/* /\* } *\/ */ - -/* /\* __code deleteCase5_stub(struct Context* context) { *\/ */ -/* /\* goto deleteCase5(context, &context->data[Tree]->tree, context->data[Tree]->tree.current); *\/ */ -/* /\* } *\/ */ - -/* /\* __code deleteCase6(struct Context* context, struct Tree* tree, struct Node* current) { *\/ */ -/* /\* struct Node* sibling = current == current->parent->left ? current->parent->right : current->parent->left; *\/ */ - -/* /\* sibling == sibling->parent->left ? (sibling->parent->left = context->heap) : (sibling->parent->right = context->heap); *\/ */ -/* /\* allocator(context); *\/ */ -/* /\* struct Node* tmp = &context->data[context->dataNum]->node; *\/ */ -/* /\* *tmp = *sibling; *\/ */ -/* /\* tmp->parent = current; *\/ */ - -/* /\* tmp->color = current->parent->color; *\/ */ -/* /\* current->parent->color = Black; *\/ */ - -/* /\* context->next = Delete3; *\/ */ -/* /\* stack_push(context->code_stack, &context->next); *\/ */ - -/* /\* if (current == current->parent->left) { *\/ */ -/* /\* tmp->right->color = Black; *\/ */ -/* /\* tree->current = current->parent; *\/ */ - -/* /\* goto meta(context, RotateL); *\/ */ -/* /\* } else { *\/ */ -/* /\* tmp->left->color = Black; *\/ */ -/* /\* tree->current = current->parent; *\/ */ - -/* /\* goto meta(context, RotateR); *\/ */ -/* /\* } *\/ */ -/* /\* } *\/ */ - -/* /\* __code deleteCase6_stub(struct Context* context) { *\/ */ -/* /\* goto deleteCase6(context, &context->data[Tree]->tree, context->data[Tree]->tree.current); *\/ */ -/* /\* } *\/ */ diff -r 94c9c506bba9 -r 958634b9fa32 src/rotate.c --- a/src/rotate.c Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -// Code Gear -__code rotateLeft(struct Context* context, struct Node* node, struct Tree* tree, struct Traverse* traverse) { - struct Node* tmp = node->right; - struct Node* parent = 0; - - stack_pop(context->node_stack, &parent); - - if (parent) { - if (node == parent->left) - parent->left = tmp; - else - parent->right = tmp; - } else { - tree->root = tmp; - } - - stack_push(context->node_stack, &parent); - - node->right = tmp->left; - tmp->left = node; - traverse->current = tmp; - - stack_pop(context->code_stack, &context->next); - goto meta(context, context->next); -} - -// Meta Code Gear(stub) -__code rotateLeft_stub(struct Context* context) { - goto rotateLeft(context, - context->data[Traverse]->traverse.current, - &context->data[Tree]->tree, - &context->data[Traverse]->traverse); -} diff -r 94c9c506bba9 -r 958634b9fa32 src/sample.c --- a/src/sample.c Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -// Code Gear -__code code1(struct Allocate* allocate) { - allocate->size = sizeof(struct Data1); - - goto allocator(allocate, Code2); -} - -// Code Gear -__code code2(struct Data1* data1) { - // processing -} diff -r 94c9c506bba9 -r 958634b9fa32 src/sample_transform.c --- a/src/sample_transform.c Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,22 +0,0 @@ -// Code Gear -__code code1(struct Context* context, struct Allocate* allocate) { - allocate->size = sizeof(struct Data1); - context->next = Code2; - - goto meta(context, Allocator); -} - -// Meta Code Gear(stub) -__code code1_stub(struct Context* context) { - goto code1(context, &context->data[Allocate]->allocate); -} - -// Code Gear -__code code2(struct Context* context, struct Data1* data1) { - // processing -} - -// Meta Code Gear(stub) -__code code2_stub(struct Context* context) { - goto code2(context, &context->data[context->dataNum]->data1); -} diff -r 94c9c506bba9 -r 958634b9fa32 src/sync_dequeue.c --- a/src/sync_dequeue.c Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ -// Dequeue -__code getQueue(struct Context* context, struct Queue* queue, struct Node* node) { - if (queue->first == 0) - return; - - struct Element* first = queue->first; - if (__sync_bool_compare_and_swap(&queue->first, first, first->next)) { - queue->count--; - - context->next = GetQueue; - stack_push(context->code_stack, &context->next); - - context->next = first->task->code; - node->key = first->task->key; - - goto meta(context, Get); - } else { - goto meta(context, GetQueue); - } -} diff -r 94c9c506bba9 -r 958634b9fa32 src/sync_enqueue.c --- a/src/sync_enqueue.c Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -// Enqueue(normal) -__code putQueue3(struct Context* context, struct Queue* queue, struct Element* new_element) { - struct Element* last = queue->last; - - if (__sync_bool_compare_and_swap(&queue->last, last, new_element)) { - last->next = new_element; - queue->count++; - - goto meta(context, context->next); - } else { - goto meta(context, PutQueue3); - } -} - -// Enqueue(nothing element) -__code putQueue4(struct Context* context, struct Queue* queue, struct Element* new_element) { - if (__sync_bool_compare_and_swap(&queue->first, 0, new_element)) { - queue->last = new_element; - queue->count++; - - goto meta(context, context->next); - } else { - goto meta(context, PutQueue3); - } -} diff -r 94c9c506bba9 -r 958634b9fa32 src/tree.h --- a/src/tree.h Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -// Code Gear Name -enum Code { - PutTree, - Replace, - Insert, - Compare, - RotateL, - RotateR, - SetTree, - InsertCase1, - InsertCase2, - InsertCase3, - InsertCase4, - InsertCase4_1, - InsertCase4_2, - InsertCase5, - StackClear, - Get, - Search, -}; - -// Compare Result -enum Relational { - EQ, - GT, - LT, -}; - -// Unique Data Gear -enum UniqueData { - Tree, - Traverse, - Node, -}; - -// Context definication -struct Context { - stack_ptr node_stack; -}; - -// Red-Black Tree definication -union Data { - // size: 8 byte - struct Tree { - struct Node* root; - } tree; - // size: 12 byte - struct Traverse { - struct Node* current; - int result; - } traverse; - // size: 32 byte - struct Node { - int key; - union Data* value; - struct Node* left; - struct Node* right; - enum Color { - Red, - Black, - } color; - } node; -}; diff -r 94c9c506bba9 -r 958634b9fa32 src/twice.c --- a/src/twice.c Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -// Code Gear -__code twice(struct Context* context, struct LoopCounter* loopCounter, int index, int alignment, int* array) { - int i = loopCounter->i; - - if (i < alignment) { - array[i+index*alignment] = array[i+index*alignment]*2; - loopCounter->i++; - - goto meta(context, Twice); - } - - loopCounter->i = 0; - - stack_pop(context->code_stack, &context->next); - goto meta(context, context->next); -} - -// Meta Code Gear(stub) -__code twice_stub(struct Context* context) { - goto twice(context, - &context->data[LoopCounter]->loopCounter, - context->data[Node]->node.value->array.index, - context->data[Node]->node.value->array.alignment, - context->data[Node]->node.value->array.array); -} - diff -r 94c9c506bba9 -r 958634b9fa32 src/twice_cerium.cc --- a/src/twice_cerium.cc Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -static int -twice(SchedTask *s,void *rbuf, void *wbuf) -{ - /** - * Get Input Data - * get_input(input data buffer, index) - */ - int* input = (int*)s->get_input(rbuf, 0); - - /** - * Get Output Data - * get_output(output data buffer, index) - */ - int* output = (int*)s->get_output(wbuf, 0); - - /** - * Get index(x, y, z) - * SchedTask member - * x : SchedTask->x - * y : SchedTask->y - * z : SchedTask->z - */ - long i = s->x; - - output[i] = input[i]*2; - - return 0; -} diff -r 94c9c506bba9 -r 958634b9fa32 src/twice_cuda.cu --- a/src/twice_cuda.cu Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -__global__ void -twice(int* input, int* output) -{ - /** - * Get index(x, y, z) - * kernel built-in variables - * x : blockIdx.x * blockDim.x + threadIdx.x - * y : blockIdx.y * blockDim.y + threadIdx.y - * z : blockIdx.z * blockDim.z + threadIdx.z - */ - long i = blockIdx.x * blockDim.x + threadIdx.x; - - output[i] = input[i]*2; - - return 0; -} diff -r 94c9c506bba9 -r 958634b9fa32 thx.tex --- a/thx.tex Wed Feb 17 07:18:39 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -\chapter*{謝辞} -本研究を行うにあたりご多忙にも関わらず日頃より多くのご助言、ご指導をいただきました河野真治准教授に心より感謝いたします。 -また、Cerium の先行研究がなければ本研究は成り立つことはありませんでした。 -Cerium の設計や実装に関わった全ての先輩方に感謝いたします。 - -研究を行うにあたり、研究に対する意見、実装、実験に協力いただいた並列信頼研究室の皆さまに感謝いたします。 - -最後に、長年に渡り理解を示し、支援してくださった家族に感謝いたします。