summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--LaTeX/argouml.zargobin29589 -> 35421 bytes
-rw-r--r--LaTeX/chapters/implementierung.tex47
-rw-r--r--LaTeX/chapters/simulator.tex43
-rw-r--r--LaTeX/diplomarbeit.pdf6943
-rw-r--r--LaTeX/images/exceptions.eps335
-rw-r--r--LaTeX/images/ss--expertenmodus.pngbin0 -> 56747 bytes
-rw-r--r--LaTeX/images/ss-protokoll-time-sync-2-long-transfer.pngbin0 -> 800061 bytes
-rw-r--r--LaTeX/images/utils.eps772
-rw-r--r--saved-simulations/broadcast.datbin0 -> 30665 bytes
-rw-r--r--saved-simulations/ext-vs-int-sync-long-transfer.datbin0 -> 28965 bytes
-rw-r--r--sources/prefs/editors/VSAbstractBetterEditor.java10
-rw-r--r--sources/simulator/VSSimulatorFrame.java2
-rw-r--r--sources/utils/VSAbout.java106
-rw-r--r--sources/utils/VSInfoArea.java2
14 files changed, 4865 insertions, 3395 deletions
diff --git a/LaTeX/argouml.zargo b/LaTeX/argouml.zargo
index a50a6a9..fce51b9 100644
--- a/LaTeX/argouml.zargo
+++ b/LaTeX/argouml.zargo
Binary files differ
diff --git a/LaTeX/chapters/implementierung.tex b/LaTeX/chapters/implementierung.tex
index 64034db..7b273a6 100644
--- a/LaTeX/chapters/implementierung.tex
+++ b/LaTeX/chapters/implementierung.tex
@@ -42,6 +42,8 @@ Die Programmierrichtlinien entsprechen in den meisten F\"{a}llen denen aus der V
\item F\"{u}r die Einr\"{u}ckung des Quelltextes wird das Tool \textit{astyle} mit den Aufrufparametern \textit{--style=java --mode=java} verwendet. Hierbei wird eine Einr\"{u}ckungsl\"{a}nge von 4 Zeichen verwendet.
\item Namen abstrakter Klassen tragen stets das Prefix \textit{VSAbstract}.
\item Namen aller Klassen und Interfaces tragen als Prefix stets \textit{VS}, was f\"{u}r Verteilte Systeme steht.
+ \item Namen aller Protokollklassen tragen als Postfix \textit{Protocol}, zum Beispiel \textit{VSPingPongProtocol}.
+ \item \"{U}berall wo es Sinn ergibt werden Java-Generic-Datentypen verwendet (z.B. \textit{java.util.Vector<Integer>} anstelle von \textit{java.util.Vector}.
\end{itemize}
@@ -238,19 +240,7 @@ Jede Simulation besitzt genau eine Instanz von \textit{VSTaskManager}. Eine Inst
\label{fig:PackageCore}
\end{figure}
-Eine Instanz von \textit{VSMessage} stellt eine Nachricht dar, die von einem Prozess verschickt wird. F\"{u}r jedes Versenden einer Nachricht wird hiervon eine Instanz gebildet, wo der Senderprozess die zu verschickende Daten ablegt. Da \textit{VSMessage} von \textit{VSPrefs} erbt, k\"{o}nnen zwischen zwei Prozessen beliebige Datentypen (Tabelle \ref{tb:VariablenDatentypen}) \"{u}ber eine Nachricht verschickt werden. Anschlieend wird f\"{u}r jeden Empf\"{a}ngerprozess das neues Ereignisobjekt der Klasse \textit{VSMessageReceiveEvent} angelegt, welche eine Referenz der verschickten Nachricht besitzt. Danach wird ein \textit{VSTask}-Objekt instanziert, wo die Referenz auf das Ereignisobjekt und das dazugeh\"{o}rige Prozessobjekt sowie die Ereigniseintrittszeit als Attribute gespeichert werden. Das \textit{VSTask}-Objekt wird dann dem Task-Manager "{u}bergeben, der das dazugeh\"{o}rige Ereignis ausf\"{u}hrt, wenn die Ereigniseintrittszeit eingetroffen ist.
-
-Via Java-Polymorphie wird das \textit{VSMessageReceiveEvent}-Objekt in ein \textit{VSAbstractEvent} umgewandelt. Wenn die aktuelle globale Zeit $t_g$ ist und wenn $t_{min}$ sowie $t_{max}$ die beim Senderprozess eingestellten Variablen entsprechen, dann wird die Ereigniseintrittszeit $t_e$ f\"{u}r den Empfang der Nachricht wie folgt berechnet:
-
-\begin{equation*}
- t_e := t_g + rand(t_{min}, t_{max})
-\end{equation*}
-
-Das heit, dass die Nachricht nach einer zuf\"{a}lligen Zeit zwischen $t_{min}$ und $t_{max}$ beim Empf\"{a}nger eintrifft. F\"{u}r jeden Emfp\"{a}nger wird hierbei ein neuer Zufallswert gew\"{a}hlt. F\"{u}r den Fall, dass die Einstellung ``Mittelwerte der \"{U}bertragungszeiten w\"{a}hlen'' aktiviert ist, und wenn $t'_{min}$ und $t'_{max}$ die beim Empf\"{a}ngerprozess eingestellten Werte ensprechen, dann wird die Nachrichtenempfangszeit wie folgt berechnet:
-
-\begin{equation*}
- t_e := t_g + \frac{1}{2} (rand(t_{min}, t_{max}) + rand(t'_{min}, t'_{max}))
-\end{equation*}
+Eine Instanz von \textit{VSMessage} stellt eine Nachricht dar, die von einem Prozess verschickt wird. F\"{u}r jedes Versenden einer Nachricht wird hiervon eine Instanz gebildet, wo der Senderprozess die zu verschickende Daten ablegt. Da \textit{VSMessage} von \textit{VSPrefs} erbt, k\"{o}nnen zwischen zwei Prozessen beliebige Datentypen (Tabelle \ref{tb:VariablenDatentypen}) \"{u}ber eine Nachricht verschickt werden. Anschlieend wird f\"{u}r jeden Empf\"{a}ngerprozess das neues Ereignisobjekt der Klasse \textit{VSMessageReceiveEvent} angelegt, welche eine Referenz der verschickten Nachricht besitzt. Danach wird ein \textit{VSTask}-Objekt instanziert, wo die Referenz auf das Ereignisobjekt und das dazugeh\"{o}rige Prozessobjekt sowie die Ereigniseintrittszeit als Attribute gespeichert werden. Das \textit{VSTask}-Objekt wird dann dem Task-Manager "{u}bergeben, der das dazugeh\"{o}rige Ereignis ausf\"{u}hrt, wenn die Ereigniseintrittszeit eingetroffen ist. Via Java-Polymorphie wird das \textit{VSMessageReceiveEvent}-Objekt in ein \textit{VSAbstractEvent} umgewandelt.
Erw\"{a}hnentswert ist auch die Klasse \textit{VSMessageStub}, welche ein \textit{VSMessage} kapselt. Ihr Zweck ist das Verstecken einiger Methoden von \textit{VSMessage} im Protokoll-API, welches f\"{u}r die Erstellung eigener Protokolle dient. Der Protokoll-Entwickler soll m\"{o}glichst nichts falsch machen k\"{o}nnen und deswegen soll den Protokoll-API ein eingeschr\"{a}nkter Funktionsumpfang zur Verf\"{u}rung gestellt werden. Da sich \textit{VSMessageStub} im selben Paket wie \textit{VSMessage} befindet, kann \textit{VSMessageStub} auf paket-private Methoden von \textit{VSMessage} zugreifen. Protokolle hingegen werden in einem anderen Paket implementiert und haben somit keinen Zugriff auf diese paket-privaten Methoden. Zwar kann der Protokollentwickler ein eigenes \textit{VSMessageStub}-Objekt anlegen, jedoch kann er auf diese Weise besser unterscheiden, auf welche Mehhoden er zugreifen sollte und auf welche nicht. Das Protokoll-API wird sp\"{a}ter genauer behandelt.
@@ -460,9 +450,36 @@ registerEvent("protocols.implementations.VSMyProtocol",
\subsubsection{R\"{u}ckw\"{a}rtskompatibel}
-\section{Weiteres}
+\section{Noch nicht Erw\"{a}hntes}
+
+Es wurden noch nicht die Klassen der Pakete \textit{utils} (Abbildung \ref{fig:PackageUtils}) sowie \textit{exceptions} (Abbildung \ref{fig:PackageExceptions}) vorgestellt. \textit{utils} fasst lediglich einige Helferklassen zusammen, die vom restlichen Quelltext verwendet werden.
+
+\begin{figure}[h]
+ \centering
+ \includegraphics[width=11cm]{images/utils}
+ \caption{Das Paket \textit{utils}}
+ \label{fig:PackageUtils}
+\end{figure}
+
+\begin{itemize}
+ \item \textit{VSFrame}: Alle Objekte, die ein eigenes Swing-Fenster besitzen, erben von der Klasse \textit{VSFrame}. Sie stellt sicher, dass neue Fenster an der richtigen Position der Bildf\"{a}che platziert werden und dass Unterfenster (Fenster, die aus einem anderen Fenster aus ge\"{o}ffnet wurden) automatisch mitgeschlossen werden, sobald ihre ``Erzeugerfenster'' geschlossen werden.
+ \item \textit{VSAboutFrame}: Dieses Fenster implementiert die ``About-Anzeige'' die im Simulator \"{u}ber das Datei-Men\"{u} aufgerufen werden kann.
+ \item \textit{VSInfoArea}: Ist f\"{u}r die Textanzeige in \textit{VSAboutFrame} zust\"{a}ndig.
+ \item \textit{VSClassLoader}: Diese Klasse wird f\"{u}r die automatische Instanzierung von Ereignisobjekten ben\"{o}tigt, wenn dem Simulator lediglich die Klassennamen (aus \textit{events.VSRegisteredEvents}) bekannt sind.
+ \item \textit{VSHelper}: In dieser Klasse befinden sich statische Hilfsmethoden, die in keine andere Klasse passen.
+ \item \textit{VSPriorityQueue}: Diese Klasse wird f\"{u}r das Verwalten von \textit{core.VSTask}-Objekte im Task-Manager ben\"{o}tigt. \textit{VSPriorityQueue} passt die Priorit\"{a}ts-Warteschlange aus der Java-Standardbibliothek den Anforderungen des Simulators an.
+ \item \textit{VSRandom}: Wird f\"{u}r Zufallsereignisse ben\"{o}tigt. Jedes Prozessobjekt besitzt einen solchen eigenen Pseudozufallsgenerator. Diese Klasse setzt gleichzeitig einen eigenen Seed basierend auf der lokalen Systemzeit und anderer Berechnungen fest.
+ \item \textit{VSTupel}: Diese Klasse ist eine Implementierung eines sehr einfach aufgebauten 3-Tupel Datentyps. Alle 3 Elemente k\"{o}nnen von einem anderen Typ sein, was mithilfe der Java-Generics verwirklicht wird. Wird von den Editorklassen f\"{u}r die Generierung von GUI-Elementen ben\"{o}tigt.
+\end{itemize}
+
+\begin{figure}[h]
+ \centering
+ \includegraphics[width=7.5cm]{images/exceptions}
+ \caption{Das Paket \textit{exceptions}}
+ \label{fig:PackageExceptions}
+\end{figure}
-exceptions, utils
+Im Paket \textit{exceptions} befinden sich lediglich einige eigene Objekte f\"{u}r Ausnahmebehandlungen. \textit{VSNotCopyableException} wird von einem nicht-kopierbaren Ereignis geworfen, wenn versucht wird es zu kopieren. \textit{VSNegatieNumberException} wird geworfen, wenn intern negative Zahlen dort auftreten, wo sie es nicht sollten. Wenn ein Editorobjekt die Benutzereingabe einer Integer-Vektor-Variable nicht parsen kann, so greifen es auf \textit{VSParseIntegerVectorException} zur\"{u}ck.
\section{Entwicklungsumgebung}
diff --git a/LaTeX/chapters/simulator.tex b/LaTeX/chapters/simulator.tex
index 076b04a..230d124 100644
--- a/LaTeX/chapters/simulator.tex
+++ b/LaTeX/chapters/simulator.tex
@@ -283,7 +283,7 @@ Im Folgenden werden alle in den Simulationseinstellungen verf\"{u}gbaren Variabl
\begin{itemize}
\item \textbf{Prozesse empfangen eigene Nachrichten} \textit{(Boolean: sim.message.own.recv = false)}: Standardm\"{a}ig k\"{o}nnen Prozesse keine Nachrichten empfangen, die sie selbst verschickt haben. Dies tr\"{a}gt zur \"{U}bersichtlichkeit der Simulation bei. Wenn diese Variable jedoch auf \textit{true} gesetzt wird, dann kann ein Prozess auch selbst verschickte Nachrichten emfpangen und auf diese ebenso antworten. Die Zeit f\"{u}r das Versenden und Empfangen einer Nachricht an sich selbst betr\"{a}gt jedoch stets \textit{0ms}. Diese Variable sollte mit Vorsicht verwendet werden, da bedingt durch den \textit{0ms} Endlosschleifen entstehen k\"{o}nnen.
\item \textbf{Mittelwerte der Nachrichtenverlustwahrscheinlichkeiten bilden} \textit{(Boolean: sim.message.prob.mean = true)}: Jede Nachricht die verschickt wird hat, je nach Einstellungen, eine vom verschickenden Prozess abh\"{a}ngige zuf\"{a}llige Verlustwahrscheinlichkeit. Wenn diese Option aktiviert ist, so wird die der Mittelwert aus den Verlustwahrscheinlichkeiten vom Sender- und Empf\"{a}ngerprozess gebildet. Ansonsten wird stets die Verlustwahrscheinlichkeit, die beim Senderprozesses angegeben wurde, verwendet.
- \item \textbf{Mittelwerte der \"{U}bertragungszeiten bilden} \textit{(Boolean: sim.message.sendingtime.mean = true)}: Jede Nachricht die verschickt wird hat, je nach Einstellungen, eine vom verschickenden Prozess abh\"{a}ngige zuf\"{a}llige \"{U}bertragungszeit bis sie ihr Ziel erreicht. Wenn diese Option aktiviert ist, so wird der Mittelwert vom Sender- und Empf\"{a}ngerprozess gebildet. Ansonsten wird stets die \"{U}bertragungszeit, die beim Senderprozesses angegeben wurde, verwendet.
+ \item \textbf{Mittelwerte der \"{U}bertragungszeiten bilden} \textit{(Boolean: sim.message.sendingtime.mean = true)}: Jede Nachricht die verschickt wird hat, je nach Einstellungen, eine vom verschickenden Prozess abh\"{a}ngige zuf\"{a}llige \"{U}bertragungszeit bis sie ihr Ziel erreicht (siehe Prozesseinstellungen sp\"{a}ter). Wenn diese Option aktiviert ist, so wird der Mittelwert vom Sender- und Empf\"{a}ngerprozess gebildet. Ansonsten wird stets die \"{U}bertragungszeit, die beim Senderprozesses angegeben wurde, verwendet.
\item \textbf{Nur relevante Nachrichten anzeigen} \textit{(Boolean: sim.messages.relevant = true)}: Wenn nur alle relevanten Nachrichten angezeigt werden, dann werden Nachrichten an einen Prozess die er selbst nicht verarbeiten kann, weil er das dazugeh\"{o}rige Protokoll nicht unterst\"{u}tzt, nicht angezeigt. Dies verbessert die \"{U}bersicht.
\item \textbf{Expertenmodus aktivieren} \textit{(Boolean: sim.mode.expert = false)}: Hier l\"{a}sst sich der Expertenmodus aktivieren beziehungsweise deaktivieren. Alternativ kann dies \"{u}ber den gleichnamigen Schalter unterhalb des Loggfensters geschehen.
\item \textbf{Simulation periodisch wiederholen} \textit{(Boolean: sim.periodic = false)}: Wenn diese Variable auf \textit{true} gesetzt ist, dann wird die Simulation jedes Mal nach Ablauf automatisch erneut gestartet.
@@ -307,10 +307,22 @@ Jeder Prozess besitzt folgende Variablen, die entweder via dem Variablen-Tab in
\item \textbf{Prozessausfallwahrscheinlichkeit} \textit{(Integer: process.prob.crash = 0)}: Gibt eine Wahrscheinlichkeit in Prozent an, ob der gegebene Prozess w\"{a}hrend der Simulation zuf\"{a}llig abst\"{u}rzt. Die Wahrscheinlichkeit bezieht sich auf die komplette Simulationsdauer. Bei einer Einstellung von \textit{100} Prozent und der Simulationsdauer von \textit{15} Sekunden st\"{u}rzt der Prozess auf jeden Fall zwischen \textit{0ms} und \textit{15000ms} ab. An welcher Stelle dies geschieht wird zuf\"{a}llig bestimmt. Wenn der Prozess nach seinem Absturz wiederbelebt wird, st\"{u}rzt er nicht noch einmal zuf\"{a}llig ab. Dies gilt allerdings nicht, wenn die Prozesseinstellungen nach dem Zufallsabsturz erneut ge\"{a}ndert und \"{u}bernommen werden, da dann das Zufallsabst\"{u}rzereignis erneut erstellt wird.
\item \textbf{Lokale Zeit} \textit{(Long: process.localtime = 0)}: Gibt die lokale Prozesszeit in Millisekunden an.
\item \textbf{Nachrichtenverlustwahrscheinlichkeit} \textit{(Integer: message.prob.crash = 0)}: Gibt eine Wahrscheinlichkeit in Prozent an, ob eine vom aktuell ausgew\"{a}hlten Prozess verschickte Nachricht unterwegs verloren geht. An welcher Stelle die Nachricht zwischen dem Sende- und Empfangsprozess verloren geht wird vom Simulator zuf\"{a}llig gew\"{a}hlt.
- \item \textbf{Maximale \"{U}bertragungszeit} \textit{(Long: message.sendingtime.max = 2000)}: Gibt die Dauer in Millisekunden an, die eine vom Prozess verschickte Nachricht maximal ben\"{o}tigt, bis sie einen Empf\"{a}ngerprozess erreicht. Im weiteren Verlauf wird dieser Wert mit $t_{max}$ bezeichnet. Der tats\"{a}chlich verwendete Wert wird zuf\"{a}llig zwischen der minimalen- und der maximalen Zeit (jeweils inklusive) gew\"{a}hlt.
- \item \textbf{Minimale \"{U}bertragungszeit} \textit{(Long: message.sendingtime.min = 500)}: Gibt die Dauer in Millisekunden an, die eine vom Prozess verschickte Nachricht minimal ben\"{o}tigt, bis sie einen Empf\"{a}ngerprozess erreicht. Im weiteren Verlauf wird dieser Wert mit $t_{min}$ bezeichnet. Der tats\"{a}chlich verwendete Wert wird zuf\"{a}llig zwischen der minimalen- und der maximalen Zeit (jeweils inklusive) gew\"{a}hlt. \\
- \\
- Wenn die \"{U}bertragungszeiten von Nachrichten immer exakt die selbe Zeit in Anspruch nehmen sollen, dann m\"{u}ssen alle Prozesseinstellungen mit $t_{min} = t_{max}$ konfiguriert werden.
+ \item \textbf{Maximale \"{U}bertragungszeit} \textit{(Long: message.sendingtime.max = 2000)}: Gibt die Dauer in Millisekunden an, die eine vom Prozess verschickte Nachricht maximal ben\"{o}tigt, bis sie einen Empf\"{a}ngerprozess erreicht. Im weiteren Verlauf wird dieser Wert mit $t_{max}$ bezeichnet.
+ \item \textbf{Minimale \"{U}bertragungszeit} \textit{(Long: message.sendingtime.min = 500)}: Gibt die Dauer in Millisekunden an, die eine vom Prozess verschickte Nachricht minimal ben\"{o}tigt, bis sie einen Empf\"{a}ngerprozess erreicht. Im weiteren Verlauf wird dieser Wert mit $t_{min}$ bezeichnet.
+
+Wenn die \"{U}bertragungszeiten von Nachrichten immer exakt die selbe Zeit in Anspruch nehmen sollen, dann m\"{u}ssen alle Prozesseinstellungen mit $t_{min} = t_{max}$ konfiguriert werden. Wenn die aktuelle globale Zeit $t_g$ ist und die Simulationseinstellung ``Mittelwerte der \"{U}bertragungszeiten'' nicht aktiv ist, dann wird die Ereigniseintrittszeit $t_e$ f\"{u}r den Empfang der Nachricht wie folgt berechnet:
+
+\begin{equation*}
+ t_e := t_g + rand(t_{min}, t_{max})
+\end{equation*}
+
+Das heit, dass die Nachricht nach einer zuf\"{a}lligen Zeit zwischen $t_{min}$ und $t_{max}$ beim Empf\"{a}nger eintrifft. F\"{u}r jeden Emfp\"{a}nger wird hierbei ein neuer Zufallswert gew\"{a}hlt. F\"{u}r den Fall, dass die Einstellung ``Mittelwerte der \"{U}bertragungszeiten w\"{a}hlen'' aktiviert ist, und wenn $t'_{min}$ und $t'_{max}$ die beim Empf\"{a}ngerprozess eingestellten Werte ensprechen, dann wird die Nachrichtenempfangszeit wie folgt berechnet:
+
+\begin{equation*}
+ t_e := t_g + \frac{1}{2} (rand(t_{min}, t_{max}) + rand(t'_{min}, t'_{max}))
+\end{equation*}
+
+Das heit, dass stets der Mittelwert der Nachrichten\"{u}bertragungszeiten des Sender- und Empf\"{a}ngerprozesses verwendet wird.
\end{itemize}
@@ -1032,7 +1044,7 @@ Dieses Protokoll verwendet folgende serverseitige Variablen, die in den Prozesse
Bisher wurden alle verf\"{u}gbaren Protokolle anhand von Beispielen aufgef\"{u}hrt. Mit dem Simulator lassen sich allerdings noch viel mehr Szenarien simulieren. Daher soll hier auf weitere Anwendungsbeispiele eingegangen werden.
-\subsection{Vektor- und Lamportzeitstempel}
+\subsection{Simulation von Vektor- und Lamportzeitstempel}
\begin{figure}[h]
\centering
@@ -1066,3 +1078,22 @@ Wenn im Laufe einer Simulation Prozesse entfernt- oder neue Prozesse hinzugef\"{
Wie bereits beschrieben gibt es in den Simulationseinstellungen die boolschen Variablen ``Lamportzeiten betreffen alle Ereignisse'' und ``Vektorzeiten betreffen alle Ereignisse'', die standardm\"{a}ig auf \textit{false} gesetzt sind. Mit \textit{true} werden alle Ereignisse, und nicht nur der Empfang oder das Versenden einer Nachricht, ber\"{u}cksichtigt. F\"{u}r eine weitere Betrachtung der Lamport- sowie Vektor-Zeitstempel siehe \cite{Vorlesung} oder \cite{Tanenbaum}.
+\newpage
+\subsection{Simulation langsamer Verbindungen}
+
+Mit dem Simulator lassen sich auch langsame Verbindungen zu einem bestimmten Prozess simulieren. F\"{u}r die Demonstration wird das Beispiel aus Kapitel 2.5.5 wieder aufgegriffen, wo das Protokoll zur internen Synchronisation (P1) mit der Christians-Methode (P3) parallel simuliert wurden. P2 stellt den Server beider Protokolle zur Verf\"{u}gung. In diesem Szenario soll P3 eine schlechte Netzwerkverbindung besitzen, sodass Nachrichten von- und an P3 stets eine l\"{a}ngere \"{U}bertragungszeit haben.
+
+Die Ereignisse sind so wie bereits auf Tabelle \ref{tb:InterneSync2Tasks} dargestellt wurde programmiert. In den Simulationseinstellungen ist hier die Einstellung ``Mittelwerte der \"{U}bertragungszeiten bilden'' aktiviert. In den Prozesseinstellungen von P3 wurde ``Minimale \"{U}bertragungszeit'' auf \textit{2000ms} und ``Maximale \"{U}bertragungszeit'' auf \textit{8000ms} gesetzt. P1 und P2 behalten als Standardeinstellungen f\"{u}r die minimale und maximale \"{U}bertragungszeiten jeweils \textit{500ms} und \textit{2000ms} eingestellt. Die Simulationsdauer wurde auf \textit{20000ms} gesetzt.
+
+\begin{figure}[h]
+ \centering
+ \fbox{\includegraphics[width=10cm]{images/ss-protokoll-time-sync-2-long-transfer}}
+ \caption{Simulation einer langsamen Verbindung}
+ \label{fig:TimeSync2LongTransferProto}
+\end{figure}
+
+Als Folge (Abbildung \ref{fig:TimeSync2LongTransferProto}) dauern Nachrichten, die von- und an P3 verschickt werden, f\"{u}r eine \"{U}bertragung immer l\"{a}nger. Bevor P3 eine Antwort auf seine vorherige Anfrage bekommt, verschickt er eine erneute Anfrage. Da P3 die Serverantworten immer stets seiner letzten verschickten Anfrage zuordnet, berechnet er die RTTs allesamt falsch und seine lokale Zeit wird bei jedem Durchgang zus\"{a}tzlich verf\"{a}lscht. Die Berechnungsformeln der \"{U}bertragungszeiten wurde bereits in Kapitel 2.4.3 bei den Prozesseinstellungen behandelt. Konkret bedeutet dies f\"{u}r die \"{U}bertragungszeiten alle Nachrichten von- und an P3 jeweils:
+
+\begin{equation*}
+ \frac{1}{2} (rand(500, 2000) + rand(2000, 8000)) = \frac{1}{2} rand(2500, 10000) = rand(1250, 5000) ms
+\end{equation*}
diff --git a/LaTeX/diplomarbeit.pdf b/LaTeX/diplomarbeit.pdf
index 3b2c557..2f1e6be 100644
--- a/LaTeX/diplomarbeit.pdf
+++ b/LaTeX/diplomarbeit.pdf
@@ -147,161 +147,166 @@ endobj
<< /S /GoTo /D (subsection.2.6.1) >>
endobj
104 0 obj
-(\376\377\0002\000.\0006\000.\0001\000\040\000V\000e\000k\000t\000o\000r\000-\000\040\000u\000n\000d\000\040\000L\000a\000m\000p\000o\000r\000t\000z\000e\000i\000t\000s\000t\000e\000m\000p\000e\000l)
+(\376\377\0002\000.\0006\000.\0001\000\040\000S\000i\000m\000u\000l\000a\000t\000i\000o\000n\000\040\000v\000o\000n\000\040\000V\000e\000k\000t\000o\000r\000-\000\040\000u\000n\000d\000\040\000L\000a\000m\000p\000o\000r\000t\000z\000e\000i\000t\000s\000t\000e\000m\000p\000e\000l)
endobj
105 0 obj
-<< /S /GoTo /D (chapter.3) >>
+<< /S /GoTo /D (subsection.2.6.2) >>
endobj
108 0 obj
-(\376\377\0003\000\040\000D\000i\000e\000\040\000I\000m\000p\000l\000e\000m\000e\000n\000t\000i\000e\000r\000u\000n\000g)
+(\376\377\0002\000.\0006\000.\0002\000\040\000S\000i\000m\000u\000l\000a\000t\000i\000o\000n\000\040\000l\000a\000n\000g\000s\000a\000m\000e\000r\000\040\000V\000e\000r\000b\000i\000n\000d\000u\000n\000g\000e\000n)
endobj
109 0 obj
-<< /S /GoTo /D (section.3.1) >>
+<< /S /GoTo /D (chapter.3) >>
endobj
112 0 obj
-(\376\377\0003\000.\0001\000\040\000P\000r\000o\000g\000r\000a\000m\000m\000i\000e\000r\000r\000i\000c\000h\000t\000l\000i\000n\000i\000e\000n)
+(\376\377\0003\000\040\000D\000i\000e\000\040\000I\000m\000p\000l\000e\000m\000e\000n\000t\000i\000e\000r\000u\000n\000g)
endobj
113 0 obj
-<< /S /GoTo /D (section.3.2) >>
+<< /S /GoTo /D (section.3.1) >>
endobj
116 0 obj
-(\376\377\0003\000.\0002\000\040\000E\000i\000n\000s\000t\000e\000l\000l\000u\000n\000g\000e\000n\000\040\000u\000n\000d\000\040\000E\000d\000i\000t\000o\000r\000e\000n)
+(\376\377\0003\000.\0001\000\040\000P\000r\000o\000g\000r\000a\000m\000m\000i\000e\000r\000r\000i\000c\000h\000t\000l\000i\000n\000i\000e\000n)
endobj
117 0 obj
-<< /S /GoTo /D (subsection.3.2.1) >>
+<< /S /GoTo /D (section.3.2) >>
endobj
120 0 obj
-(\376\377\0003\000.\0002\000.\0001\000\040\000E\000i\000n\000s\000t\000e\000l\000l\000u\000n\000g\000s\000o\000b\000j\000e\000k\000t\000e)
+(\376\377\0003\000.\0002\000\040\000E\000i\000n\000s\000t\000e\000l\000l\000u\000n\000g\000e\000n\000\040\000u\000n\000d\000\040\000E\000d\000i\000t\000o\000r\000e\000n)
endobj
121 0 obj
-<< /S /GoTo /D (subsection.3.2.2) >>
+<< /S /GoTo /D (subsection.3.2.1) >>
endobj
124 0 obj
-(\376\377\0003\000.\0002\000.\0002\000\040\000E\000d\000i\000t\000o\000r\000o\000b\000j\000e\000k\000t\000e)
+(\376\377\0003\000.\0002\000.\0001\000\040\000E\000i\000n\000s\000t\000e\000l\000l\000u\000n\000g\000s\000o\000b\000j\000e\000k\000t\000e)
endobj
125 0 obj
-<< /S /GoTo /D (section.3.3) >>
+<< /S /GoTo /D (subsection.3.2.2) >>
endobj
128 0 obj
-(\376\377\0003\000.\0003\000\040\000E\000r\000e\000i\000g\000n\000i\000s\000s\000e)
+(\376\377\0003\000.\0002\000.\0002\000\040\000E\000d\000i\000t\000o\000r\000o\000b\000j\000e\000k\000t\000e)
endobj
129 0 obj
-<< /S /GoTo /D (subsection.3.3.1) >>
+<< /S /GoTo /D (section.3.3) >>
endobj
132 0 obj
-(\376\377\0003\000.\0003\000.\0001\000\040\000F\000u\000n\000k\000t\000i\000o\000n\000s\000w\000e\000i\000s\000e\000\040\000v\000o\000n\000\040\000E\000r\000e\000i\000g\000n\000i\000s\000s\000e\000n)
+(\376\377\0003\000.\0003\000\040\000E\000r\000e\000i\000g\000n\000i\000s\000s\000e)
endobj
133 0 obj
-<< /S /GoTo /D (subsection.3.3.2) >>
+<< /S /GoTo /D (subsection.3.3.1) >>
endobj
136 0 obj
-(\376\377\0003\000.\0003\000.\0002\000\040\000B\000e\000i\000s\000p\000i\000e\000l\000i\000m\000p\000l\000e\000m\000e\000n\000t\000i\000e\000r\000u\000n\000g\000\040\000e\000i\000n\000e\000s\000\040\000E\000r\000e\000i\000g\000n\000i\000s\000s\000e\000s)
+(\376\377\0003\000.\0003\000.\0001\000\040\000F\000u\000n\000k\000t\000i\000o\000n\000s\000w\000e\000i\000s\000e\000\040\000v\000o\000n\000\040\000E\000r\000e\000i\000g\000n\000i\000s\000s\000e\000n)
endobj
137 0 obj
-<< /S /GoTo /D (section.3.4) >>
+<< /S /GoTo /D (subsection.3.3.2) >>
endobj
140 0 obj
-(\376\377\0003\000.\0004\000\040\000Z\000e\000i\000t\000f\000o\000r\000m\000a\000t\000e\000,\000\040\000P\000r\000o\000z\000e\000s\000s\000e\000,\000\040\000N\000a\000c\000h\000r\000i\000c\000h\000t\000e\000n\000\040\000s\000o\000w\000i\000e\000\040\000T\000a\000s\000k\000-\000M\000a\000n\000a\000g\000e\000r)
+(\376\377\0003\000.\0003\000.\0002\000\040\000B\000e\000i\000s\000p\000i\000e\000l\000i\000m\000p\000l\000e\000m\000e\000n\000t\000i\000e\000r\000u\000n\000g\000\040\000e\000i\000n\000e\000s\000\040\000E\000r\000e\000i\000g\000n\000i\000s\000s\000e\000s)
endobj
141 0 obj
-<< /S /GoTo /D (subsection.3.4.1) >>
+<< /S /GoTo /D (section.3.4) >>
endobj
144 0 obj
-(\376\377\0003\000.\0004\000.\0001\000\040\000F\000u\000n\000k\000t\000i\000o\000n\000s\000w\000e\000i\000s\000e)
+(\376\377\0003\000.\0004\000\040\000Z\000e\000i\000t\000f\000o\000r\000m\000a\000t\000e\000,\000\040\000P\000r\000o\000z\000e\000s\000s\000e\000,\000\040\000N\000a\000c\000h\000r\000i\000c\000h\000t\000e\000n\000\040\000s\000o\000w\000i\000e\000\040\000T\000a\000s\000k\000-\000M\000a\000n\000a\000g\000e\000r)
endobj
145 0 obj
-<< /S /GoTo /D (subsection.3.4.2) >>
+<< /S /GoTo /D (subsection.3.4.1) >>
endobj
148 0 obj
-(\376\377\0003\000.\0004\000.\0002\000\040\000B\000e\000i\000s\000p\000i\000e\000l\000\040\000f\000\374\000r\000\040\000d\000i\000e\000\040\000E\000r\000s\000t\000e\000l\000l\000u\000n\000g\000\040\000v\000o\000n\000\040\000P\000r\000o\000z\000e\000s\000s\000e\000r\000e\000i\000g\000n\000i\000s\000s\000e\000n)
+(\376\377\0003\000.\0004\000.\0001\000\040\000F\000u\000n\000k\000t\000i\000o\000n\000s\000w\000e\000i\000s\000e)
endobj
149 0 obj
-<< /S /GoTo /D (section.3.5) >>
+<< /S /GoTo /D (subsection.3.4.2) >>
endobj
152 0 obj
-(\376\377\0003\000.\0005\000\040\000P\000r\000o\000t\000o\000k\000o\000l\000l\000e)
+(\376\377\0003\000.\0004\000.\0002\000\040\000B\000e\000i\000s\000p\000i\000e\000l\000\040\000f\000\374\000r\000\040\000d\000i\000e\000\040\000E\000r\000s\000t\000e\000l\000l\000u\000n\000g\000\040\000v\000o\000n\000\040\000P\000r\000o\000z\000e\000s\000s\000e\000r\000e\000i\000g\000n\000i\000s\000s\000e\000n)
endobj
153 0 obj
-<< /S /GoTo /D (subsection.3.5.1) >>
+<< /S /GoTo /D (section.3.5) >>
endobj
156 0 obj
-(\376\377\0003\000.\0005\000.\0001\000\040\000F\000u\000n\000k\000t\000i\000o\000n\000s\000w\000e\000i\000s\000e\000\040\000d\000e\000s\000\040\000P\000r\000o\000t\000o\000k\000o\000l\000l\000-\000A\000P\000I\000s)
+(\376\377\0003\000.\0005\000\040\000P\000r\000o\000t\000o\000k\000o\000l\000l\000e)
endobj
157 0 obj
-<< /S /GoTo /D (subsection.3.5.2) >>
+<< /S /GoTo /D (subsection.3.5.1) >>
endobj
160 0 obj
-(\376\377\0003\000.\0005\000.\0002\000\040\000B\000e\000i\000s\000p\000i\000e\000l\000i\000m\000p\000l\000e\000m\000e\000n\000t\000i\000e\000r\000u\000n\000g\000\040\000e\000i\000n\000e\000s\000\040\000P\000r\000o\000t\000o\000k\000o\000l\000l\000s)
+(\376\377\0003\000.\0005\000.\0001\000\040\000F\000u\000n\000k\000t\000i\000o\000n\000s\000w\000e\000i\000s\000e\000\040\000d\000e\000s\000\040\000P\000r\000o\000t\000o\000k\000o\000l\000l\000-\000A\000P\000I\000s)
endobj
161 0 obj
-<< /S /GoTo /D (subsection.3.5.3) >>
+<< /S /GoTo /D (subsection.3.5.2) >>
endobj
164 0 obj
-(\376\377\0003\000.\0005\000.\0003\000\040\000E\000r\000s\000t\000e\000l\000l\000u\000n\000g\000\040\000e\000i\000g\000e\000n\000e\000r\000\040\000P\000r\000o\000t\000o\000k\000o\000l\000l\000e)
+(\376\377\0003\000.\0005\000.\0002\000\040\000B\000e\000i\000s\000p\000i\000e\000l\000i\000m\000p\000l\000e\000m\000e\000n\000t\000i\000e\000r\000u\000n\000g\000\040\000e\000i\000n\000e\000s\000\040\000P\000r\000o\000t\000o\000k\000o\000l\000l\000s)
endobj
165 0 obj
-<< /S /GoTo /D (section.3.6) >>
+<< /S /GoTo /D (subsection.3.5.3) >>
endobj
168 0 obj
-(\376\377\0003\000.\0006\000\040\000G\000U\000I\000\040\000s\000o\000w\000i\000e\000\040\000S\000i\000m\000u\000l\000a\000t\000i\000o\000n\000s\000v\000i\000s\000u\000a\000l\000i\000s\000i\000e\000r\000u\000n\000g)
+(\376\377\0003\000.\0005\000.\0003\000\040\000E\000r\000s\000t\000e\000l\000l\000u\000n\000g\000\040\000e\000i\000g\000e\000n\000e\000r\000\040\000P\000r\000o\000t\000o\000k\000o\000l\000l\000e)
endobj
169 0 obj
-<< /S /GoTo /D (section.3.7) >>
+<< /S /GoTo /D (section.3.6) >>
endobj
172 0 obj
-(\376\377\0003\000.\0007\000\040\000S\000e\000r\000i\000a\000l\000i\000s\000i\000e\000r\000u\000n\000g\000\040\000v\000o\000n\000\040\000S\000i\000m\000u\000l\000a\000t\000i\000o\000n\000e\000n)
+(\376\377\0003\000.\0006\000\040\000G\000U\000I\000\040\000s\000o\000w\000i\000e\000\040\000S\000i\000m\000u\000l\000a\000t\000i\000o\000n\000s\000v\000i\000s\000u\000a\000l\000i\000s\000i\000e\000r\000u\000n\000g)
endobj
173 0 obj
-<< /S /GoTo /D (section.3.8) >>
+<< /S /GoTo /D (section.3.7) >>
endobj
176 0 obj
-(\376\377\0003\000.\0008\000\040\000W\000e\000i\000t\000e\000r\000e\000s)
+(\376\377\0003\000.\0007\000\040\000S\000e\000r\000i\000a\000l\000i\000s\000i\000e\000r\000u\000n\000g\000\040\000v\000o\000n\000\040\000S\000i\000m\000u\000l\000a\000t\000i\000o\000n\000e\000n)
endobj
177 0 obj
-<< /S /GoTo /D (section.3.9) >>
+<< /S /GoTo /D (section.3.8) >>
endobj
180 0 obj
-(\376\377\0003\000.\0009\000\040\000E\000n\000t\000w\000i\000c\000k\000l\000u\000n\000g\000s\000u\000m\000g\000e\000b\000u\000n\000g)
+(\376\377\0003\000.\0008\000\040\000N\000o\000c\000h\000\040\000n\000i\000c\000h\000t\000\040\000E\000r\000w\000\344\000h\000n\000t\000e\000s)
endobj
181 0 obj
-<< /S /GoTo /D (chapter.4) >>
+<< /S /GoTo /D (section.3.9) >>
endobj
184 0 obj
-(\376\377\0004\000\040\000A\000u\000s\000b\000l\000i\000c\000k)
+(\376\377\0003\000.\0009\000\040\000E\000n\000t\000w\000i\000c\000k\000l\000u\000n\000g\000s\000u\000m\000g\000e\000b\000u\000n\000g)
endobj
185 0 obj
-<< /S /GoTo /D (appendix.A) >>
+<< /S /GoTo /D (chapter.4) >>
endobj
188 0 obj
-(\376\377\000A\000\040\000A\000k\000r\000o\000n\000y\000m\000s)
+(\376\377\0004\000\040\000A\000u\000s\000b\000l\000i\000c\000k)
endobj
189 0 obj
-<< /S /GoTo /D (appendix.B) >>
+<< /S /GoTo /D (appendix.A) >>
endobj
192 0 obj
-(\376\377\000B\000\040\000L\000i\000t\000e\000r\000a\000t\000u\000r\000v\000e\000r\000z\000e\000i\000c\000h\000n\000i\000s)
+(\376\377\000A\000\040\000A\000k\000r\000o\000n\000y\000m\000s)
endobj
193 0 obj
-<< /S /GoTo /D [194 0 R /Fit ] >>
+<< /S /GoTo /D (appendix.B) >>
+endobj
+196 0 obj
+(\376\377\000B\000\040\000L\000i\000t\000e\000r\000a\000t\000u\000r\000v\000e\000r\000z\000e\000i\000c\000h\000n\000i\000s)
endobj
-197 0 obj <<
-/Length 826
+197 0 obj
+<< /S /GoTo /D [198 0 R /Fit ] >>
+endobj
+201 0 obj <<
+/Length 827
/Filter /FlateDecode
>>
stream
-xڍUKs6W(͔of׊N];ri-A"kL %YI:<
-,
-犂b쫑 h<r*r`o2ř֯CC'KsJLΛcD׾k|nZ҅v 6`#ȳEM<%Li$Uu ЉR#?gp3Pbj%=Swi 6"5 F>_㘱FԮCaLp1[CмE?'4!ޮ!M caf ]
-%T=ke=)KPJjqT*'8e5Ҋa(Dc8Q+`J_mߦ~s51D G܉endstream
+xڍUMs6W(͔ͮWvҦZD#.d%
+ι>wyW 7Ve{'} n4~' ,
+ŨF&qeXd˩ʝgZN p.ͩ2):os>0]e{JK|hF"{gj,wy*fxIϫ608J|-_`_K_!sPӱ bk{>>3(~Zuh엗qDh\P@4w1ωuȷgH%Աf`.O{F,s>`ϮbtEEiOԡӀpFu<|9ҊPypΎ|L^K Sbqt8c&4(\܊endstream
endobj
-194 0 obj <<
+198 0 obj <<
/Type /Page
-/Contents 197 0 R
-/Resources 196 0 R
+/Contents 201 0 R
+/Resources 200 0 R
/MediaBox [0 0 595.2757 841.8898]
-/Parent 206 0 R
+/Parent 210 0 R
>> endobj
-195 0 obj <<
+199 0 obj <<
/Type /XObject
/Subtype /Image
/Width 500
@@ -462,18 +467,18 @@ j'F{E,
5M%jKqizlO<ԕ#C~%(4p<]gʟ~c ]'?Ӹ)E-
sOyGKrm{
endobj
-198 0 obj <<
-/D [194 0 R /XYZ 74.4095 769.8898 null]
+202 0 obj <<
+/D [198 0 R /XYZ 74.4095 769.8898 null]
>> endobj
-199 0 obj <<
-/D [194 0 R /XYZ 74.4095 769.8898 null]
+203 0 obj <<
+/D [198 0 R /XYZ 74.4095 769.8898 null]
>> endobj
-196 0 obj <<
-/Font << /F26 202 0 R /F28 205 0 R >>
-/XObject << /Im1 195 0 R >>
+200 0 obj <<
+/Font << /F26 206 0 R /F28 209 0 R >>
+/XObject << /Im1 199 0 R >>
/ProcSet [ /PDF /Text /ImageC ]
>> endobj
-209 0 obj <<
+213 0 obj <<
/Length 892
/Filter /FlateDecode
>>
@@ -482,24 +487,24 @@ xڍUn8+t
)/KHB;!idzIgW.k*
vsqy#oj >qԳDR&ڦ
&l,P>n,|YS'dY(ֻѪ%)>r [Ib/џmy˴巄
-C1D\q{oJ7. pV1H9<E YJ=ZN~ P#Qm`Wŀ;>:
-@endstream
+C1D\q{oJ7. pV1H9<E YJ=ZN~ P#Qm`Wŀ;>:
+~@endstream
endobj
-208 0 obj <<
+212 0 obj <<
/Type /Page
-/Contents 209 0 R
-/Resources 207 0 R
+/Contents 213 0 R
+/Resources 211 0 R
/MediaBox [0 0 595.2757 841.8898]
-/Parent 206 0 R
+/Parent 210 0 R
>> endobj
-210 0 obj <<
-/D [208 0 R /XYZ 74.4095 793.4011 null]
+214 0 obj <<
+/D [212 0 R /XYZ 74.4095 793.4011 null]
>> endobj
-207 0 obj <<
-/Font << /F26 202 0 R /F28 205 0 R >>
+211 0 obj <<
+/Font << /F26 206 0 R /F28 209 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-213 0 obj <<
+217 0 obj <<
/Length 790
/Filter /FlateDecode
>>
@@ -513,410 +518,420 @@ xڕVMs0Wp"[>d2$3A)_ I C֫}ڷJ08$b<zE[
7,
=js+&f
endobj
-212 0 obj <<
+216 0 obj <<
/Type /Page
-/Contents 213 0 R
-/Resources 211 0 R
+/Contents 217 0 R
+/Resources 215 0 R
/MediaBox [0 0 595.2757 841.8898]
-/Parent 206 0 R
+/Parent 210 0 R
>> endobj
-214 0 obj <<
-/D [212 0 R /XYZ 74.4095 793.4011 null]
+218 0 obj <<
+/D [216 0 R /XYZ 74.4095 793.4011 null]
>> endobj
-211 0 obj <<
-/Font << /F26 202 0 R /F28 205 0 R /F35 217 0 R >>
+215 0 obj <<
+/Font << /F26 206 0 R /F28 209 0 R /F35 221 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-220 0 obj <<
-/Length 2201
+224 0 obj <<
+/Length 2296
/Filter /FlateDecode
>>
stream
-xM۸<J!x̬צ*$uFZ 5%R}$Aِ=سS>h,o76 2
-Xf$4WXvf;+HT&> o`06YT_uʩn;KziatUwkxyzۿzs;8
-4˧0U:-ɅQq?
-NSE: Β\k9[Yo֫7e/T.CbNy>!3JHPLkXB>D* IdP-+d ge5&g6[ F]4 zwh\MyTɜ0msJDskZ2~]~k0bN<rxČDcM8%VkBJ \2,'TY9Cuќ
-et
-(wED-`VoKP arfhr\.5(ިCWzt˪nTMzV !@
-NDI#gxvG]vl_\'/-,O1FRŪJ<wW{<%5Mj<Z
-OB<9r{<]sʺ<TuZ.4.IdMoơ5y.ڞ#0bi `DNF{(z]_כ?UQsU~S
-@MLJ6'mDs"(@Q<Z;vA2D [y
- +;FC CCGsA~=G䔦z̳g.oja[{t;<>WR< Li6 RwX~YDGk+P dҝLG^"EC~g {Hy(Q<Z |z]!ˡY`[y;px0^ӻ7ۺ;o;훲# ᔊ,3`oaUC,Og<Ecί1 !4.S`6lNSS~ѶwDPC;׀i]`' qʳh*ţ\
-SƝ賿RܢbC
+xs۶+xoǺ˴dZy/=(̩DyD_@. [zwhᰄ?I$MUbR_0_d?{u)5Jf⧛0f֓*hc%JJUnn_\'[)DiWCU?7n /E^ūޑRr5 :eY:uD%}qjpQb5,I9U=6FU^!1<Oۊ"!(lB:DjA D4}D>: sۇh;U/jԤI՛SjSJ1mE+D” [3/o~}If^͉C'H`k_w) ))A,Oq;M/}}
+Vbw`!׉8愦5^$ν` ʠ3ыl5Lyn83R}6W,̀kntu9l9,ϰU0L&ܩ" Y#bbn5eVrfj̃Vڤ>fR^gm
+o,*Ev>ΠwT?/z\ri? ǝ&<Bu*?2Dz}֦ >E R#[.'j!uK֫?O*+%t3È=nϵSEa&%xG@߃MhY0K)pԠ:MpȞ|a,J"Ol:BA<sA6!*-rPl8NJn^Uv8\
+6ei{KkUy:pJWԋ&ԩ"AsV(Eˑ Z3vA2E
+[I!(;{=k~juGT`T hꌉ>P^ mwzQ ڝq -aāqDXl9(F$P)Ƽ.,&MX9u2G~n|ȳpBr<k>\ۃ*e&~(aMuH(=?M4ׅlJX-U16̱Z۲//k ;ht0H\X"840pK'Z'O.2 2|e(4i4[Q$M?"X2=4l4<ׅhRF$'shʠrXlx=E܀PuR?}(ϧ"/];u
+}[e~:ud{™&|9UdI*c~`=`Ck RG?x!ŭ&FADoʷEGכ?+?U&4T"zScbIHcRϽ l5`.-l d6ʗuӑT zmx!YݷGkaK,lq:UdBÖqCCZ)uP ٓ)12Ǟ^:_t|{:Gm vD _M~YDy
+57ׅ=eA{nrs94 SE~2Yy9
+5ηׅok)95yN /;&Ͷ37C7Mp!RM`ة"%ɕD,UhBk ȆFJ¢wt?)&
+P^է}Y\#jp٩"E),JQ}YT%M@h- u!Mue@
endobj
-219 0 obj <<
+223 0 obj <<
/Type /Page
-/Contents 220 0 R
-/Resources 218 0 R
+/Contents 224 0 R
+/Resources 222 0 R
/MediaBox [0 0 595.2757 841.8898]
-/Parent 206 0 R
-/Annots [ 223 0 R 224 0 R 225 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R 231 0 R 232 0 R 233 0 R 234 0 R 235 0 R 236 0 R 237 0 R 238 0 R 239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 244 0 R 245 0 R 246 0 R 247 0 R ]
+/Parent 210 0 R
+/Annots [ 227 0 R 228 0 R 229 0 R 230 0 R 231 0 R 232 0 R 233 0 R 234 0 R 235 0 R 236 0 R 237 0 R 238 0 R 239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 244 0 R 245 0 R 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R ]
>> endobj
-223 0 obj <<
+227 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [73.4132 602.7474 132.1982 613.2758]
+/Rect [73.4132 607.8694 132.1982 618.3978]
/Subtype /Link
/A << /S /GoTo /D (chapter.1) >>
>> endobj
-224 0 obj <<
+228 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [86.8628 585.4997 150.1131 594.0645]
+/Rect [86.8628 591.1647 150.1131 599.7295]
/Subtype /Link
/A << /S /GoTo /D (section.1.1) >>
>> endobj
-225 0 obj <<
+229 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [86.8628 564.6297 156.4611 575.212]
+/Rect [86.8628 570.8377 156.4611 581.42]
/Subtype /Link
/A << /S /GoTo /D (section.1.2) >>
>> endobj
-226 0 obj <<
+230 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [73.4132 537.7331 147.4677 546.3786]
+/Rect [73.4132 544.8461 147.4677 553.4916]
/Subtype /Link
/A << /S /GoTo /D (chapter.2) >>
>> endobj
-227 0 obj <<
+231 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [86.8628 516.899 252.1763 527.3736]
+/Rect [86.8628 524.555 252.1763 535.0296]
/Subtype /Link
/A << /S /GoTo /D (section.2.1) >>
>> endobj
-228 0 obj <<
+232 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [86.8628 497.8402 172.6274 508.1086]
+/Rect [86.8628 506.0392 172.6274 516.3075]
/Subtype /Link
/A << /S /GoTo /D (section.2.2) >>
>> endobj
-229 0 obj <<
+233 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [86.8628 478.6738 151.3326 489.0498]
+/Rect [86.8628 487.4157 151.3326 497.7917]
/Subtype /Link
/A << /S /GoTo /D (section.2.3) >>
>> endobj
-230 0 obj <<
+234 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [86.8628 459.6149 163.3025 469.991]
+/Rect [86.8628 468.8999 163.3025 479.2759]
/Subtype /Link
/A << /S /GoTo /D (section.2.4) >>
>> endobj
-231 0 obj <<
+235 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [107.4855 440.6638 219.7364 450.9322]
+/Rect [107.4855 450.4917 219.7364 460.7601]
/Subtype /Link
/A << /S /GoTo /D (subsection.2.4.1) >>
>> endobj
-232 0 obj <<
+236 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [107.4855 421.4973 237.2476 432.0796]
+/Rect [107.4855 431.8683 237.2476 442.4505]
/Subtype /Link
/A << /S /GoTo /D (subsection.2.4.2) >>
>> endobj
-233 0 obj <<
+237 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [107.4855 402.4385 280.8776 412.8146]
+/Rect [107.4855 413.3525 280.8776 423.7285]
/Subtype /Link
/A << /S /GoTo /D (subsection.2.4.3) >>
>> endobj
-234 0 obj <<
+238 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [107.4855 383.3797 269.5888 393.7557]