1つまたは複数のオペレーションを実行するようにマイクロプロセッサを制御するように構成された第1のコンピュータ読取可能命令を受け取るステップと、マイクロプロセッサを使用して、前記第1のコンピュータ読取可能命令に基づいて第2のコンピュータ読取可能命令を生成するステップであって、前記第2のコンピュータ読取可能命令は、i関数を呼び出すことと、ii前記関数による使用のためにデータをロードすることであって、前記データは、前記関数の以前の実行中にチェックポイントで保存されていることと、iii前記関数の以前の実行中に前記チェックポイントに達する前に実行された前記関数の部分をスキップすることとによって、前記1つまたは複数の動作を実行し、前記チェックポイントから前記関数の実行を再開するように構成される、前記生成するステップとを含むことを特徴とする方法。前記第1のコンピュータ読取可能命令を含むソースコードを、前記第2のコンピュータ読取可能命令を含むオブジェクトコードにコンパイルするコンパイラによって実行されることを特徴とする請求項1に記載の方法。前記第2のコンピュータ読取可能命令を生成するステップは、追加命令を前記第1のコンピュータ読取可能命令に追加するステップを含み、前記追加命令は、チェックポイントから前記関数の実行を再開するように構成されることを特徴とする請求項1に記載の方法。前記第2のコンピュータ読取可能命令は、前記関数によって使用されるデータを保存するようにさらに構成されることを特徴とする請求項1に記載の方法。前記第2のコンピュータ読取可能命令は、前記関数を含むプログラムのプログラムスタックを追跡するようにさらに構成されることを特徴とする請求項1に記載の方法。i関数を呼び出すことと、ii前記関数による使用のためにデータをロードすることであって、前記データは、前記関数の以前の実行中にチェックポイントで保存されていることと、iii前記関数の以前の実行中に前記チェックポイントに達する前に実行された前記関数の部分をスキップすることと、iv前記関数によって使用されるデータを保存することと、v前記関数を含むプログラムのプログラムスタックを追跡することとによって前記チェックポイントから前記関数の実行を再開するように構成されたコンピュータ読取可能命令を格納したコンピュータ読取可能記憶媒体と、前記コンピュータ読取可能命令を実行するように構成された少なくとも1つのマイクロプロセッサとを備えたことを特徴とするシステム。前記少なくとも1つのマイクロプロセッサは、第1のマイクロプロセッサおよび第2のマイクロプロセッサを含むことを特徴とする請求項6に記載のシステム。前記第1のマイクロプロセッサは前記関数を実行し、前記第1のマイクロプロセッサを使用する前記関数の実行が中断されると、前記関数の実行は、前記第2のマイクロプロセッサを使用して前記チェックポイントから継続されることを特徴とする請求項7に記載のシステム。前記第1のプロセッサを含む第1のデバイスと、前記第2のプロセッサを含む第2のデバイスとを含むことを特徴とする請求項8に記載のシステム。前記第1のデバイスは、第1のオペレーティングシステムを実行し、前記第2のデバイスは、前記第1のオペレーティングシステムとは異なる第2のオペレーティングシステムを実行することを特徴とする請求項9に記載のシステム。上で述べたように、本明細書で説明する技法は、コンピュータのオペレーティングシステムからの協力を必要とせずに、実行が中断されたときにチェックポイントからプログラム実行を復元することを可能にする。そのような技法は、基礎になるハードウェアまたはソフトウェアの不安定性に対して保護することができ、オペレーティングシステムのクラッシュ、停電、またはシステム内の他の障害の後にプログラム実行を復元することを可能にすることができる。これらの技法を、自動化されたツールを使用して既存のコードを変更することによって、プログラマがこの機能性を特別に含めるためにアプリケーションをプログラムすることを必要とせずに、実装することができる。いくつかの実施形態では、コンパイラまたは他のプログラム翻訳ツールは、既存のコードを再構成して、プログラムの実行を保存し、エラーが発生した後にプログラムの実行を復元する能力を提供することができる。有利なことに、これらの技法は、マルチスレッド式マルチコア環境内において、またプログラムが複数のマシン上で動作する環境にとって頑健なものとなり得る。実行が中断され、継続することができないとき、プログラムは、異なるプロセッサまたは異なるマシン上で、さらには異なるオペレーティングシステムを実行しているマシン上であっても実行を継続することができる。これらの技法は、複数のマシンがプログラムを実行するのに利用可能なクラウドコンピューティング環境において用いることができる点で有利である。例示的実施形態の詳細な議論を以下で提供する。I.実行の復元をサポートするプログラムコードを変更する例一般に使用されるプログラム言語は、プログラムの実行中に呼び出される関数を定義する能力を提供する。コードは、関数が受け入れる入力や、関数によって実行されるオペレーション、および関数によって返されるデータなど、関数の主要な態様を定義する。例えば、次のコードは、関数FおよびGを定義する。関数Fは、整数aおよびbを入力として受け取る。関数Fは、積a×bと等しくなるようにセットされる整数になるようにローカル変数xを初期化instantiateし、関数Gの戻り値と等しくなるようにセットされる整数になるように変数yを初期化する。関数Fは、値xyを有する整数を返す。関数Gは、整数xおよびbを入力として受け取るが、これは、それぞれ関数G内のローカル変数aおよびbに対応する。関数Gは、abと等しくなるようにセットされる整数になるようにローカル変数xを初期化する。関数Gは、xの値と等しい整数を返す。プログラムが実行されるとき、関数Fを呼び出すことができ、この関数Fは、関数Gを呼び出す。関数Fおよび/またはGの実行中に、プログラムがクラッシュするか、あるいは実行が他の形で中断される場合、関数Fおよび/またはGの実行で行われた進行は、失われる可能性がある。実行を継続するためには、プログラムをリスタートする必要があり、関数Fを始めからもう一度開始する必要があり、そして、関数Gをもう一度呼び出す必要がある。例示的な関数FおよびGを実行するのに必要な処理能力の量は、大きくはない可能性があるが、複雑なプログラムを実行しているときは、かなりのデータが失われる可能性があり、関数Fおよび/またはGの実行が中断されたポイントに到達するのに、かなりの処理を二度実行する必要がある可能性があることを理解されたい。失われた作業の量は、例えばモデリングおよびシミュレーションなどの複雑なプログラミングタスクを実行するとき、特に多くなる可能性がある。いくつかの実施形態では、追加のコードをプログラムに挿入して、チェックポイントと呼ばれる様々なポイントにおいてプログラムのオペレーションの状態を格納することを可能にすることができる。どの関数が実行しているかに関する指示を保存することによってプログラムスタックを追跡するためのコードを含めることができる。関数によって使用されるローカル関数を格納し、および実行中に到達した関数内の行の指示を保存するコードを含めることもできる。これらのタイプのコードの追加は、チェックポイントで動作中であった1つまたは複数の関数を呼び出して、その1つまたは複数の関数によって使用中であったローカル変数をロードし、そしてその1つまたは複数の関数のうち、中断の前に既に実行された部分をスキップすることによって、プログラムの再構築を可能にすることができる。図1に、コンピュータプログラムの関数Fのオペレーションを実行し、およびプログラム実行の復元を可能にするためのコンピュータ読取可能命令を含む、ソフトウェアモジュール100の例を示す。ソフトウェアモジュール100のコンピュータ読取可能命令は、プログラム内の関数の実行の状態を追跡すること、プログラム実行中に様々なチェックポイントで関数によって使用されるデータを保存すること、そしてプログラムが中断されるときにチェックポイントから関数の実行を復元することを可能にする。図1の例では、ソフトウェアモジュール100は、ヘルパコード102、関数プリアンブル104、関数Fのオペレーションを実行する関数コード106、呼び出しサイトラベルコード108、および関数エピローグ110を含む。ヘルパコード102は、関数Fのローカル変数および入力引数を保存するデータ構造体を定義するコード112を含むことができる。ヘルパコード102は、関数Fのデータを保存する保存関数を定義するコード114と、ストレージから関数Fのデータをロードするロード関数を定義するコード116も含むことができる。保存関数は、保存された変数をチェックポイントファイルに付加する。ロード関数は、変数をチェックポイントファイル内の現在のポイントからロードし、ファイルポインタを進める。概念を示すためにソースコードとして示されているが、ヘルパコード102および本明細書で説明される任意の他のコードを、オブジェクトコードまたは任意の他の適切なタイプのコードとして実装することができることを理解されたい。データ構造体を定義し、保存関数およびロード関数を提供するのに適したヘルパコード102の例を以下に示す。図1に示されているように、関数プリアンブル104は、関数Fのローカル変数用のデータ構造体オブジェクトをインスタンス化するコード118と、関数Fがpush関数を使用して実行されていることの指示を保存することによってプログラムスタックを追跡するコード120とを含むことができる。関数プリアンブル104は、チェックポイントから関数Fの実行の再構築を可能にするコード122も含むことができる。関数Fの実行が再構築されている場合には、コード124が、チェックポイントで保存された関数Fのローカル変数をロードするのに実行される。コード126は、チェックポイントに達する前に既に実行された関数Fの部分をスキップするのに実行される。例えば、プログラムの実行が中断されたときに、関数Gが関数Fの範囲内で実行中であった場合には、コード126は、関数Fの、関数Gを呼び出す行までスキップすることができる。いくつかの実施形態で使用され得る関数プリアンブル104の例を、以下に示す。図1に示されているように、関数コード106は、関数、例えば関数Fのオペレーションを実行するために含まれる。関数Fを例として述べるが、本明細書で説明する技法を、コンピュータプログラムの1つまたは複数のオペレーションを実行する任意の関数に使用することができる。関数コード106を、元の関数、例えば、関数Fの関数コードから再び書くことができ、その結果、実行中のデータの保存を容易にするために、ローカル変数をコード112によって定義されたデータ構造体に格納し、これにより、関数Fの実行を再構築する必要がある場合には後に変数をロードすることが可能になる。いくつかの実施形態での使用のための関数コード106の例を、以下に示す。関数Fに関して上述したように、変数xは、積abと等しくなるようにセットされる。関数コード106では、関数Fにおける演算と同一の乗算演算が実行されるが、コードは、関数を再構築する必要がある場合にローカル変数の再ロードを容易にするため、結果をコード112によって定義されるデータ構造体内に格納するように変更される。図1に示されるように、呼び出し側ラベルコード130は、関数F内で他の関数が呼び出される場所を識別するコードを含むことができる。例えば、関数Fは、別の関数Gを呼び出すことができ、呼び出し側ラベルコード130は、関数F内で関数Gが呼び出される位置を識別することができる。コード132も、関数Gを呼び出すために関数F内に含まれる。いくつかの実施形態での使用のための呼び出し側ラベルコード130の例を、以下に示す。この点で、下記のコードなど、上記関数F内と同様に変数xおよびyの合計を計算するのに実行される、追加の関数コード106を含むことができる。図1に示されるように、関数エピローグ110は、関数Fの実行が完了されるときにpop関数を使用してプログラムスタックの追跡を更新するコード134を含むことができる。関数エピローグ110は、関数Fによってデータを返すコード136も含むことができる。いくつかの実施形態で使用できる関数エピローグ110の例を、以下に示す。PushおよびPopのサンプルの実施態様を、例として以下に示す。次のコードは、LocalsオブジェクトのLoadメソッドおよびSaveメソッドによって使用されるLoadLocalsおよびSaveLocalsの実施態様を有するCheckpointクラスの例を定義する。II.チェックポイントにおけるプログラム状態を保存する例図2は、プログラムを実行し、様々なチェックポイントでプログラム状態を保存する方法200の例を示す。プログラム状態を保存するために、ローカルオブジェクトのスタックをトラバースすることができ、各々を順番に保存することができる。プログラムの実行は、ステップ202において開始する。ステップ203において、チェックポイント機会に達し、ここで、プログラムは、プログラムの状態を保存するオプションを有する。プログラムは、ステップ203において、このチェックポイント機会を利用してプログラム状態を保存するかどうかに関する判定を行うことができる。プログラムがチェックポイント機会を使用するかどうかに関する判断は、最後のチェックポイント以降に経過した時間の長さまたは任意の他の適切な判断基準に基づいて行うことができる。いくつかの場合に、ユーザが、チェックポイントを明示的に要求することができる。プログラム状態保存の頻度とプログラムの性能との間には、トレードオフが存在する。プログラム状態を保存する頻度を高めることは、データ消失の量を制限することができるが、プログラム性能の低下を引き起こす可能性がある。チェックポイント機会を利用する頻度は、アプリケーションに応じて変化し得る。プログラムが、チェックポイント機会を使用してプログラム状態を保存すると判断した場合、この情報が、ステップ204において保存される。例えば、プログラムは、ヘルパコード102内のコード114によって定義される保存関数を使用することができる。プログラムが、チェックポイント機会を使用しないと判断した場合、プログラムの実行は、ステップ206において継続される。プログラムの実行は、次のチェックポイントに達するまで継続され、これに達したポイントにおいて、この方法は、ステップ203における次のチェックポイント機会に戻る。方法200は、プログラムが終了されるまで継続することができる。III.チェックポイントからプログラム実行を復元する例図3は、いくつかの実施形態による、チェックポイントから関数の実行を復元する方法300を示す。ステップ302において、クラッシュまたは他の障害が発生した後に、プログラムがリスタートされる。ステップ304において、プログラムが、上で述べた関数Fなどの第1の関数を呼び出す。ステップ306において、関数Fのチェックポイントで保存されたローカル変数が、ストレージからロードされる。ステップ308において、プログラムは、チェックポイントで実行中であった関数Fの行にスキップし、関数Fの実行は、そのポイントから再開される。したがって、ステップ306および308は、関数Fの実行を、プログラム状態がチェックポイントで保存されたときの実行ポイントまで復元することを容易にする。関数Gがチェックポイントで実行中であった場合、プログラムは、関数Gを呼び出す関数Fの行までスキップすることができ、次いで、ステップ310において、関数Gが呼び出される。その後、ステップ306および308が、関数Gについて繰り返される。チェックポイントで保存された関数Gのローカル変数が、ストレージからロードされ、プログラムは、チェックポイントで実行中であった関数Gの行にスキップする。前の関数の範囲内で他に実行中の関数がなかった場合、方法は終了し、プログラム実行がチェックポイントから継続される。したがって、プログラムの実行は、プログラムの中断に先立ってチェックポイントに達する前に実行されたオペレーションのすべてを再実行する必要なしに、チェックポイントから再開することができる。IV.状態の保存およびチェックポイントからのプログラム実行の復元を可能にするコードの生成図4は、いくつかの実施形態による、チェックポイントからプログラムのオペレーションを復元することを可能にするようにコードを変更する方法を示す。上で述べたように、有利には、本明細書で説明する技法を、プログラマによる手作業のコーディングなしで、プログラムに自動的に組み込むことができる。コンパイラなどのプログラム変換ツールは、既存のコードを変更して、チェックポイントからプログラムのオペレーションを復元することを可能にすることができる。例えば、ステップ402において、コンパイラまたは他のプログラム変換ツールは、1つまたは複数の関数を定義するコードを含むプログラムコードを受け取ることができる。本明細書で説明する技法は、プログラムによって実行されるオペレーションのタイプに関して限定されないので、プログラムコードは、任意の適切なオペレーションを実行するように設計することができる。一例として、プログラムコードは、上述の関数FおよびGを定義するコードを含むことができる。ステップ404において、関数FおよびGを実行するためのコードが、プログラムがチェックポイントから実行を復元することを可能にするように変更される。例えば、コンパイラまたは他のプログラム変換ツールは、上で述べたヘルパコード102、関数プリアンブル104、呼び出し側ラベルコード108、および関数エピローグ110を挿入することができる。チェックポイント機会を、データを保存するコード内の適切な位置に挿入することもできる。関数コード106は、ヘルパコード102内で定義されるローカル変数を格納するデータ構造体を利用するように変更され得る。コンパイラを使用して方法400を実行する場合、生成される結果は、中断が発生したときにチェックポイントから関数FおよびGの実行を復元することを可能にする追加の能力を有する、関数FおよびGを実行するように構成されたオブジェクトコードとすることができる。V.適用法本明細書で説明する技法は、長い実行時間を有するプログラムにとって非常に重要になり得るフォールトトレラント方式およびフェイルオーバ方式を提供することができる。これは、計算のサイズが増大すると、失われる作業のコストが増大することに起因する。障害の可能性は、より多くのハードウェアを使用して計算を実行するときにより高いので、これらの技法は、多くのコンピューティングリソースを利用する分散プログラムにとっても非常に有用であり得る。新しいコンピューティングハードウェアにおける傾向は、ハードウェアの各連続する世代が指数関数的により速いパラダイムから、各連続する世代が指数関数的により多くの計算コアを有するパラダイムにシフトしてきた。本明細書で説明する技法を使用して、複数の計算コアまたはマシンのクラスタ上で動作するマルチスレッド式プログラムを使用して大量の計算作業を実行することを可能にすることができる。例えば、そのような技法を、複数のマシンおよび/または複数のコアがプログラムデータの処理に用いられるクラウドコンピューティング環境で使用することができる。本明細書で説明する技法の利点は、あるプログラムをあるプロセッサ/マシン上で開始し、その後、クラッシュまたは他の障害が発生したときに、処理を別のプロセッサ/マシン上で継続することができることである。あるプロセッサまたはマシンが障害を発生した場合、最小限の中断で処理を別のプロセッサまたはマシン上で再開することができる。本明細書で説明する技法は、オペレーティングシステムの協力を必要としないので、いくつかの実施形態では、処理を、異なるオペレーティングシステムを実行しているプロセッサ/マシン上で継続することができるであろう。プログラムは、適切なバージョンが新しいアーキテクチャ上でコンパイルされ、チェックポイントのファイルフォーマットがアーキテクチャにまたがってポータブルである場合、異なるオペレーティングシステム上で動作することができる。図5は、複数のマイクロプロセッサ502および503を有するコンピューティングデバイス501の例を示す。実行を中断するクラッシュまたは他の障害が発生したとき、プログラム全体またはプログラムスレッドが、マイクロプロセッサ502上で動作している場合がある。本明細書で説明する技法を使用すると、そのプログラムまたはプログラムスレッドは、そのプログラムの実行の状態を表す永続ストレージ504内に格納されたデータを使用して、マイクロプロセッサ503上でプログラムの実行を継続することができる。図6は、マイクロプロセッサ602を有するコンピューティングデバイス601およびマイクロプロセッサ604を有するコンピューティングデバイス603を含むコンピューティング環境の例を示す。実行を中断するクラッシュまたは他の障害が発生したとき、プログラムまたはプログラムスレッドが、マイクロプロセッサ602上で動作していることがある。本明細書で説明する技法を使用すると、そのプログラムまたはプログラムスレッドは、デバイス603のマイクロプロセッサ604上でプログラムの実行を継続することができる。デバイス601および603を、任意の適切な通信接続によって接続することができる。デバイス501、601、および603は、例えば汎用コンピュータまたは本明細書で説明する他のデバイスなど、任意の適切なコンピューティングデバイスとすることができる。本発明の少なくとも1つの実施形態の複数の態様を説明したので、当業者には様々な代替形態、修正形態、および改善が容易に思い付くであろうことは理解されよう。そのような代替形態、修正形態、および改善は、本開示の一部であることが意図されており、また本発明の趣旨および範囲に含まれることが意図されている。したがって、前述の説明および図面は、例にすぎない。本発明の上で説明した実施形態を、多数の形のいずれかで実装することができる。例えば、実施形態を、ハードウェア、ソフトウェア、またはその組合せを使用して実装することができる。ソフトウェアで実装されるとき、ソフトウェアコードを、単一のコンピュータ内で提供されようと複数のコンピュータの間で分散されようと、任意の適切なプロセッサまたはプロセッサの集合において実行することができる。そのようなプロセッサを、集積回路コンポーネント内に1つまたは複数のプロセッサを有する、集積回路として実装することができる。しかし、プロセッサを、任意の適切なフォーマットの回路網を使用して実装することができる。さらに、コンピュータを、ラックマウントコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、またはタブレットコンピュータなど、複数の形のいずれかで具現化することができることを理解されたい。さらに、コンピュータを、PDA携帯情報端末、スマートホン、または任意の他の適切なポータブルもしくは固定の電子デバイスを含む、一般にコンピュータとはみなされないが、適切な処理能力を有するデバイス内に組み込むことができる。また、コンピュータは、1つまたは複数の入力デバイスおよび出力デバイスを有することができる。これらのデバイスを使用して、とりわけ、ユーザインターフェースを提示することができる。ユーザインターフェースを提供するのに使用できる出力デバイスの例には、出力の視覚的提示のためのプリンタまたはディスプレイスクリーンと、出力の可聴提示のためのスピーカまたは他のサウンド生成デバイスとが含まれる。ユーザインターフェースに使用できる入力デバイスの例には、キーボードと、マウス、タッチパッド、およびディジタイジングテーブルなどのポインティングデバイスとが含まれる。別の例として、コンピュータは、音声認識を介してまたは他の可聴フォーマットで入力情報を受け取ることができる。そのようなコンピュータを、ローカルエリアネットワーク、または企業ネットワークもしくはインターネットなどの広域ネットワークを含む、任意の適切な形の1つまたは複数のネットワークによって相互接続することができる。そのようなネットワークは、任意の適切な技術に基づくものとすることができ、任意の適切なプロトコルに従って動作することができ、無線ネットワーク、有線ネットワーク、または光ファイバネットワークを含むことができる。また、本明細書で概要を示した様々な方法またはプロセスを、様々なオペレーティングシステムまたはプラットフォームのうちの任意の1つを用いる1つまたは複数のプロセッサ上で実行可能なソフトウェアとしてコーディングすることができる。さらに、そのようなソフトウェアを、複数の適切なプログラミング言語および/またはプログラミングツールもしくはスクリプティングツールのいずれかを使用して記述することができ、実行可能機械語コードまたはフレームワークもしくは仮想マシン上で実行される中間コードとしてコンパイルすることもできる。これに関して、本発明を、1つまたは複数のコンピュータまたは他のプロセッサ上で実行されたとき、本発明の様々な態様を実装する方法を実行する1つまたは複数のプログラムがエンコードされたコンピュータ読取可能記憶媒体または複数のコンピュータ読取可能媒体例えば、コンピュータメモリ、1つまたは複数のフロッピディスク、CD、光ディスク、DVDディジタルビデオディスク、磁気テープ、フラッシュメモリ、フィールドプログラマブルゲートアレイまたは他の半導体デバイス内の回路構成、あるいは他の非一時的な有形のコンピュータ記憶媒体として実装することができる。1つまたは複数のコンピュータ読取可能記憶媒体を、その上に格納された1つまたは複数のプログラムを1つまたは複数の異なるコンピュータまたは他のプロセッサにロードして上で述べた本発明の様々な態様を実装することができるように、可搬とすることができる。本明細書で使用されるとき、用語非一時的なコンピュータ読取可能記憶媒体は、製品すなわち、製造品または機械と見なすことがきるコンピュータ読取可能媒体のみを包含する。あるいはまたはそれに加えて、本発明を、伝搬する信号など、コンピュータ読取可能記憶媒体以外のコンピュータ読取可能媒体として実装することができる。用語プログラムまたはソフトウェアは、本明細書では、包括的な意味で、上で述べた本発明の様々な態様を実装するようにコンピュータまたは他のプロセッサをプログラムするのに用いることができる、任意のタイプのコンピュータコードまたはコンピュータ実行可能命令のセットを指すのに使用される。さらに、この実施形態の一態様によれば、実行されると本発明の方法を実行する1つまたは複数のコンピュータプログラムは、必ずしも単一のコンピュータまたはプロセッサ上に存在する必要はなく、本発明の様々な態様を実装するように複数の異なるコンピュータまたはプロセッサの間でモジュラの形で分散され得ることを理解されたい。コンピュータ実行可能命令は、1つまたは複数のコンピュータまたは他のデバイスによって実行される、プログラムモジュールなどの多数の形とすることができる。一般に、プログラムモジュールは、特定のタスクを実行するか特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造体などを含む。典型的に、プログラムモジュールの機能性を、様々な実施形態で望み通りに組み合わせ、または分散させることができる。本発明の様々な態様を、単独で、組み合わせて、または前述で説明される実施形態で具体的には述べられない様々な配置で使用することができ、したがって、その適用において、前述の説明または図面に示された詳細およびコンポーネントの配置に限定されない。例えば、一実施形態で説明される態様を、他の実施形態で説明される態様と任意の形で組み合わせることができる。また、本発明を、その例を提供した方法として実施することができる。この方法の一部として実行される動作を、任意の適切な形で順序付けることができる。したがって、例示の実施形態において順次動作として示されている場合であっても、いくつかの動作を同時に実行することを含め、示されたものとは異なる順序で動作が実行される実施形態を構成することができる。特許請求の範囲における、請求項の要素を修飾する第1、第2、第3などの順序単語の使用は、それ自体では、別の請求項の要素に対する請求項の要素の優先、優越、もしくは順序、または方法の行為が実行される時間的順序を意味するものではなく、単に、請求項の要素を区別するために、ある名前を有するある請求項の要素を順序単語の使用を除いて同一の名前を有する別の要素から区別するためのラベルとして使用される。本明細書で使用される語法および用語法は、説明のためのものであって、限定するものとして考慮されるべきではない。including含む、comprising備える、またはhaving有する、containing含む、involving伴うおよびその変形の本明細書での使用は、その後に列挙される項目およびその同等物ならびに追加項目を含むように意図されている。