diff --git a/CIP-0140/README.md b/CIP-0140/README.md
index 8fdac26714..99820e1a91 100644
--- a/CIP-0140/README.md
+++ b/CIP-0140/README.md
@@ -13,6 +13,7 @@ Implementors:
- Intersect
Solution-To:
- CPS-0017
+ - CPS-0021
Discussions:
- https://github.com/cardano-foundation/CIPs/pull/872
Created: 2024-08-15
diff --git a/CIP-0161/README.md b/CIP-0161/README.md
new file mode 100644
index 0000000000..f401af7dc8
--- /dev/null
+++ b/CIP-0161/README.md
@@ -0,0 +1,1871 @@
+---
+CIP: 161
+Title: Ouroboros Phalanx - Breaking Grinding Incentives
+Category: Consensus
+Status: Proposed
+Authors:
+ - Nicolas Henin
+ - Raphael Toledo
+Solution-To:
+ - CPS-0017
+ - CPS-0021
+Discussions:
+ - https://github.com/cardano-foundation/CIPs/pull/1065
+Created: 2025-07-25
+License: Apache-2.0
+---
+
+## Abstract
+
+We propose an extension to Ouroboros Praos, called **Ouroboros Phalanx**. The name derives from the [**Phalanx**](https://en.wikipedia.org/wiki/Phalanx), an **Ancient Greek military formation** where soldiers stood in tightly packed units, shielding one another to form a nearly impenetrable defense. Just as the phalanx multiplied the strength of individual soldiers through coordination, this protocol enhances Cardano’s consensus by reinforcing its resistance to adversarial attacks.
+
+At its core, **Phalanx Protocol** strengthens the **VRF-based randomness generation sub-protocol** that underpins leader election. It introduces an additional cryptographic primitive that is **lightweight for honest participants** yet **computationally expensive for adversaries** seeking to bias slot leader distributions. This design does not eliminate grinding attacks outright but makes them **economically infeasible at scale**.
+
+By addressing both [CPS-0021: Randomness Manipulation](https://github.com/cardano-foundation/CIPs/tree/master/CPS-0021) and [CPS-0017: Settlement Speed](https://github.com/cardano-foundation/CIPs/tree/master/CPS-0017), Phalanx achieves two goals simultaneously:
+- It raises the cost of grinding attacks by a factor of roughly 1010.
+- It reduces settlement time by approximately **20–30%** compared to unmodified Praos, without compromising security.
+
+Ouroboros Phalanx therefore represents a **complementary advancement**: reinforcing Cardano’s consensus security while improving performance, and ensuring the network remains robust against future adversarial strategies.
+
+
+Table of Contents
+
+- [Abstract](#abstract)
+- [Motivation: why is this CIP necessary?](#motivation-why-is-this-cip-necessary)
+- [Specification](#specification)
+ - [1. High-Level Overview ](#1-high-level-overview)
+ - [1.1 Changes Relative to Praos](#11-changes-relative-to-praos)
+ - [1.2 Inputs & Outputs ](#12-inputs--outputs)
+ - [1.2.1 The η Stream](#121-the-η-stream)
+ - [1.2.2 The pre-ηₑ Synchronizations](#122-the-pre-ηₑ-synchronizations)
+ - [1.2.3 The Φ Stream ](#123-the-φ-stream)
+ - [1.2.3.1 The Setup](#1231-the-setup)
+ - [1.2.3.2 The Lifecycle](#1232-the-lifecycle)
+ - [1.2.4 The η Generations](#124-the-η-generations)
+ - [2. The Φ Cryptographic Primitive](#2-the-φ-cryptographic-primitive)
+ - [2.1. Expected Properties](#21-expected-properties)
+ - [2.2. Verifiable Delayed Functions (VDF)](#22-verifiable-delayed-functions-vdf)
+ - [2.3 Wesolowski's VDF](#23-wesolowskis-vdf)
+ - [2.3.1 VDF Primitives](#231-vdf-primitives)
+ - [2.3.2 VDF Aggregation Primitives](#232-vdf-aggregation-primitives)
+ - [3. Φ Stream Specification](#3-φ-stream-specification)
+ - [3.1 Distribution of Φ Iterations](#31-distribution-of-φ-iterations)
+ - [3.2 The State Machine](#32-the-state-machine)
+ - [3.2.1 Diagram Overview](#321-diagram-overview)
+ - [3.2.2 Parametrization Phase](#322-parametrization-phase)
+ - [3.2.3 Initialization Grace Phase](#323-initialization-grace-phase)
+ - [3.2.3.1 Initialize Command](#3231-initialize-command)
+ - [3.2.3.2 Tick Commands & Grace Period](#3232-tick-commands--grace-period)
+ - [3.2.4 Computation Phase](#324-computation-phase)
+ - [3.2.4.1 VDF integration](#3241-vdf-integration)
+ - [3.2.4.2 The States](#3242-the-states)
+ - [3.2.4.3 ProvideAttestedOutput & Tick Commands](#3243-provideattestedoutput--tick-commands)
+ - [3.2.5 Catch-up Phase](#325-catch-up-phase)
+ - [3.2.5.1 The States](#3251-the-states)
+ - [3.2.5.2 ProvideMissingAttestedOutput & Tick Commands](#3252-providemissingattestedoutput--tick-commands)
+ - [3.2.6 Closure Phase](#326-closure-phase)
+ - [3.2.6.1. The States](#3261-the-states)
+ - [3.2.6.2. The Successful Scenario: The `Close` Command](#3262-the-successful-scenario-the-close-command)
+ - [3.2.6.3. `tick` Command](#3263-tick-command)
+ - [3.2.6.4. The Failure Scenario: Ungraceful Closure](#3264-the-failure-scenario-ungraceful-closure)
+ - [4. Recommended Parameter Values](#4-recommended-parameter-values)
+ - [4.1. VDF Security Parameters λ and ρ](#41-vdf-security-parameters-λ-and-ρ)
+ - [4.2. Time Budget Tᵩ and Derived T](#42-time-budget-tᵩ-and-derived-t)
+ - [4.2.1. Specialized ASIC vs CPU-Based Chips](#421-specialized-asic-vs-cpu-based-chips)
+ - [4.2.2. Deriving from Tᵩ to T](#421-deriving-from-tᵩ-to-t)
+ - [5. Efficiency Analysis](#5-efficiency-analysis)
+ - [5.1. Block Publication](#51-block-publication)
+ - [5.2. Block Verification](#52-block-verification)
+ - [5.2.1. When Not Syncing](#521-when-not-syncing)
+ - [5.2.2. When Syncing](#522-when-syncing)
+ - [6. CDDL Schema for the Ledger](#6-cddl-schema-for-the-ledger)
+
+- [Rationale: How does this CIP achieve its goals?](#rationale-how-does-this-cip-achieve-its-goals)
+ - [1. How Phalanx Addresses CPS-21 - Ouroboros Randomness Manipulation ?](#1-how-phalanx-addresses-cps-21---ouroboros-randomness-manipulation)
+ - [1.1 Problem Overview](#11-problem-overview)
+ - [1.2 Phalanx Cost Amplification per Grinding Attempt](#12-phalanx-cost-amplification-per-grinding-attempt)
+ - [1.3 Phalanx Cost Amplification per Grinding Attack](#13-phalanx-cost-amplification-per-grinding-attack)
+ - [1.3.1 Formula](#131-formula)
+ - [1.3.2 Estimated Formula Using Mainnet Cardano Parameters](#132-estimated-formula-using-mainnet-cardano-parameters)
+ - [1.3.3 Impact of Tᵩ on Canonical Scenarios](#133-impact-of-tᵩ-on-canonical-scenarios)
+ - [1.3.4 Impact of Tᵩ on Feasibility Categories](#134-impact-of-tᵩ-on-feasibility-categories)
+ - [1.4. Conclusion: How Much Risk is Mitigated?](#14-conclusion-how-much-risk-is-mitigated)
+ - [2. How Phalanx Improves CPS-17 - Settlement Speed ?](#2-how-phalanx-improves-cps-17---settlement-speed)
+ - [2.1 Settlement times without grinding attacks](#21-settlement-times-without-grinding-attacks)
+ - [2.2 How Grinding Power affects Settlement times](#22-how-grinding-power-affects-settlement-times)
+ - [2.3 How Phalanx improves compared to Praos?](#23-how-phalanx-improves-compared-to-praos-)
+ - [2.4 Advocating for Peras: Phalanx as a Complementary Layer](#24-advocating-for-peras-phalanx-as-a-complementary-layer)
+ - [3. Why VDFs Were Chosen over other Cryptographic Primitives ?](#3-why-vdfs-were-chosen-over-other-cryptographic-primitives-)
+ - [3.1 Requirements](#31-requirements)
+ - [3.2 Primitive selection](#32-primitive-selection)
+ - [3.2.1 RSA solutions](#321-rsa-solutions)
+ - [3.2.1.1 Designs](#3211-designs)
+ - [3.2.1.2 Properties](#3212-properties)
+ - [3.2.2 ECC solutions](#322-ecc-solutions)
+ - [3.2.2.1 Designs](#3221-designs)
+ - [3.2.2.2 Properties](#3222-properties)
+ - [3.2.3 Class group solutions](#323-class-group-solutions)
+ - [3.2.3.1 Design](#3231-design)
+ - [3.2.3.2 Properties](#3232-properties)
+ - [3.2.4 OWF solutions](#324-owf-solutions)
+ - [3.2.4.1 Proofs of knowledge](#3241-proofs-of-knowledge)
+ - [3.2.4.2 OWFs](#3242-owfs)
+ - [3.2.4.3 Design](#3243-design)
+ - [3.2.4.4 Properties](#3244-properties)
+ - [3.3 Primitive recommendation](#33-primitive-recommendation)
+- [Path to Active](#path-to-active)
+ - [Acceptance Criteria](#acceptance-criteria)
+ - [Implementation Plan](#implementation-plan)
+- [References](#references)
+- [Copyright](#copyright)
+
+
+
+## Motivation: why is this CIP necessary?
+
+This proposal strengthens Cardano’s consensus protocol (Ouroboros Praos) against a class of attacks known as *grinding attacks*. These attacks allow adversaries to bias the randomness used in block leader elections in their favor, statistically slowing down settlement times and thys weakening the effectivness of Praos.
+
+The improvement introduces an additional computation step that is lightweight for honest participants but significantly more expensive for attackers, making grinding attacks economically infeasible.
+
+### Recommended Configuration
+
+As an initial configuration, we recommend **12 hours of cumulative and distributed execution** of this cryptographic primitive per epoch on standard CPU architectures.
+- The epoch is divided into **1-hour intervals**.
+- The **first leader of each interval** must produce the corresponding proof.
+- For any individual node, this requirement represents roughly **527 seconds (≈10 minutes)** of computation.
+
+The algorithm is designed so that with **128-bit confidence**, all required proofs will be produced on time by the end of each epoch.
+
+### Security Improvements
+
+The proposal increases substantially the computational cost of a grinding attack by a factor of approximately 1010 compared to the current situation.
+
+To maintain this level of security over time:
+- Governance may choose to **increase the 12-hour budget** as the cost of computation decreases.
+- Execution could migrate to **ASIC-based architectures**, preserving the same budget while maintaining security guarantees, and later increasing the budget further.
+
+Beyond parameter updates, adoption of this proposal would necessarily require a **hard fork**, since it modifies the consensus protocol in two fundamental ways:
+1. The randomness for slot distribution is extended from **1 epoch to 2 epochs**. At the start of epoch *e*, the snapshot of the stake distribution will be taken at the end of *epoch e−2*, rather than at the end of *epoch e−1* as in Praos today.
+2. The **general method of generating slot leader distributions** is changed, making leader election more resilient to adversarial bias.
+
+### Consensus Performance
+
+This proposal is not only about security, but also about **consensus performance**.
+
+In Praos, because grinding allows adversaries to choose among multiple possible slot leader distributions, the probability of “bad events” (such as rollbacks or settlement failures) is statistically amplified compared to the honest model.
+
+- If a bad event occurs with probability $`\varepsilon`$ under unbiased randomness,
+- An adversary able to try $`R`$ independent randomness candidates can increase the likelihood of that event up to $`R \cdot \varepsilon`$ (by the union bound).
+
+This translates into slower settlement and weaker guarantees for the network as a whole. By substantially reducing $`R`$ compared to Praos, we limit the impact of grinding attacks and therefore improve settlement. In fact, the recommended configuration reduces settlement time by approximately **20–30%** while maintaining equivalent security.
+
+### Relationship to Peras
+
+[Ouroboros Peras](https://peras.cardano-scaling.org/) is a recent extension of Praos designed to **accelerate settlement**.
+- Instead of waiting for the traditional 2160-block window (around 5 days) to guarantee finality, Peras introduces **stake-weighted voting and certified blocks**.
+- Randomly chosen committees of stake pool operators can “vote” on blocks, and when enough votes are collected, the block receives a certificate.
+- Certified blocks are treated as more important in the chain, which enables **settlement in just 1–2 minutes**.
+
+Peras is fully compatible with Praos:
+- When enough committee members participate, it achieves **rapid settlement**.
+- When they do not (e.g., if too many operators are offline), Peras **gracefully falls back to Praos**. Peras would only fall back to Praos if there were massive network disruption or an attack by a 25% adversary.
+
+In these fallback situations, the network still relies on Praos’ guarantees—precisely where Phalanx becomes relevant as a **complementary defense layer**. Phalanx ensures that even when Peras cannot certify blocks, the protocol still benefits from:
+- **Stronger protection against grinding attacks**, and
+- **Faster settlement** compared to unmodified Praos.
+
+Together, they form a **complementary pair**:
+- **Peras** provides speed when conditions are favorable.
+- **Phalanx** ensures resilience and strong security guarantees in all cases.
+
+### Technical Depth
+
+The remainder of this document provides the full technical specification for node implementors and researchers. Because Cardano’s security is grounded in **cryptography, probability, and statistical guarantees**, understanding the full details of this proposal requires technical knowledge in these areas. The complete specification is therefore dense: it describes mathematical models, cryptographic primitives, and rigorous proofs to ensure the system can be trusted at scale. Readers interested only in the high-level motivation and community impact may stop here.
+
+Please refer to the CPD "[Ouroboros Randomness Generation Sub-Protocol – The Coin-Flipping Problem](https://github.com/cardano-foundation/CIPs/tree/master/CPS-0021/CPD/README.md)" for a detailed understanding of **randomness generation, leader election in Praos, and the coin-flipping dilemma in consensus protocols**. Moving forward, we will **dive into the core details**, assuming you have the **relevant background** to understand the proposal.
+
+
+## Specification
+
+The core principle of the proposed protocol change is to **substantially escalate the computational cost of each grinding attempt for an adversary**. To achieve this, every honest participant is required to perform a designated computation for each block they produce over an epoch (**432,000 slots - 5 days**) - note that this computation can be preprocessed locally at the beginning of the epoch. Consequently, an adversary attempting a grinding attack must **recompute these operations for every single attempt**, while being **constrained by the grinding window**, which dramatically increases the resource expenditure. By enforcing this computational burden, we **drastically reduce the feasible number of grinding attempts** an adversary with a fixed resource budget can execute, making randomness manipulation **more expensive and significantly less practical**.
+
+### 1. High-Level Overview
+
+#### 1.1. Changes Relative to Praos
+
+In **Phalanx** , the randomness generation and leader election flows are modified as follows:
+
+
+
+1. The **stake distribution stabilization phase** is shifted **back by one epoch :** The **active** **stake distribution** $`\mathbf{SD}_e`$ used for leader election is now derived from the **end of $epoch_\text{e-3}$** instead of **$epoch_\text{e-2}$** as in the original Praos protocol.
+2. The **honest contribution inclusion phase**, which originally resulted in a **ηₑ candidate**, is also **shifted back by one epoch**, aligning with the adjusted **stake distribution stabilization**. This value is now referred to as the **pre-ηₑ candidate**, signifying its role as an **intermediate randomness nonce** in the sub-protocol.
+3. The **pre-ηₑ candidate**, once stabilized (after $`3 \cdot \frac{k}{f}`$), undergoes a **sequence of incremental operations** using a **new deterministic cryptographic primitive Φ (Phi)**. This sequence spans a full epoch size, specifically during the interval:$`\left[\frac{9k}{f} \cdot \text{epoch}_{e-2}, \frac{9k}{f} \cdot \text{epoch}_{e-1}\right)`$.
+4. The final **ηₑ (eta nonce)**, resulting from the Φ computation, completely determined by the prior stabilized pre-seed pre-ηₑ, does not need stabilization and is availablea a whole $`\frac{k}{f}`$ slots before the start of $`\text{epoch}_e`$ .
+
+#### 1.2. Inputs & Outputs
+
+The Randomness Generation sub-protocol pipelines two parallel streams η stream and Φ Stream, which synchronize at $`9 \cdot \frac{k}{f}`$ at each epoch :
+
+
+
+##### 1.2.1. The η stream
+
+ - Already present in Praos and retained in Phalanx
+ - Updated with every block produced in the blockchain tree, a η stream captures intermediate values $`\eta^\text{evolving}_t`$ in the block headers, defined as follows:
+
+```math
+ \eta^{\text{evolving}}_{t+1} =
+ \begin{cases}
+ \eta^{\text{evolving}}_{t}\ \star\ \mathsf{VRF}^\text{Output}_\text{t+1} & \text{when BlockProduced}(t) \\
+ \eta^{\text{evolving}}_{t} & \text{otherwise.}
+ \end{cases}
+
+```
+```math
+\text{BlockProduced}(t) =
+\begin{cases}
+\text{true} & \text{if a block is produced at time } t, \\
+\text{false} & \text{otherwise.}
+\end{cases}
+```
+
+| **where** ||
+|---------------|-----------------|
+| $`\text{ProtocolParameter}_\text{extraEntropy} `$ | The evolving nonce is initialized using the extraEntropy field defined in the protocol parameters.|
+| $`\mathsf{VRF}^\text{Output}_\text{i} `$ | The **VRF output** generated by the $` \text{slot}_\text{i} `$ Leader and included in the block header |
+| $a\ \star\ b$ | The concatenation of $a$ and $b$ , followed by a BLAKE2b-256 hash computation.
+
+
+##### 1.2.2. The pre-ηₑ Synchronizations
+
+- To generate $`\eta_\text{e}`$ for epoch $`e`$, the stream Φ Stream is reset with the value of η stream at $`t=9.\frac{k}{f}`$ at $epoch_{e-2}$
+- This specific value of η stream is referred to as **$`\text{pre-}\eta_e`$** and defined as :
+```math
+\text{pre-}\eta_e= \eta^{evolving}_{9.\frac{k}{f}(epoch_{e-2})}
+```
+
+##### 1.2.3. The Φ Stream
+
+###### 1.2.3.1. The Setup
+
+The stream is bootstrapped by calling the parametrize function of the cryptographic primitive $`\Phi`$ with:
+```math
+Φ.\text{Stream.State} \leftarrow \Phi.\text{parametrize}(\lambda, T_\Phi)
+```
+where :
+ - $`\lambda`$ is a security parameter for the cryptographic primitive $`\Phi`$.
+ - $`T_\Phi`$, a time-bound parameter representing the required computation $`\Phi`$ duration, independent of available computing power.
+ - Any change to these 2 parameters would require a decision through Cardano governance.
+ - $\Phi.\text{Stream.State}$ will contain derived configuration specific to the algorithm and the cryptographic primitive used.
+
+###### 1.2.3.2. The Lifecycle
+
+It is reset at every pre-ηₑ synchronization point every $`10.\frac{k}{f}`$ slots :
+```math
+Φ.\text{Stream.State} \leftarrow \Phi.\text{initialize}(Φ.\text{Configuration}, \text{pre-}\eta)
+```
+At each slot $t$, update the stream state by :
+```math
+Φ.\text{Stream.State} \leftarrow \Phi.\text{tick}(Φ.\text{Stream.State, t})
+```
+A node must be able to determine, based on the current state, whether it should begin computing $\Phi$ iterations in order to provide a proof at its next scheduled leader slot (see [Section "3.2.4.1. VDF integration"](#3241-vdf-integration) for details):
+```math
+\{0,1\} \leftarrow \Phi.\text{shouldCompute}(Φ.\text{Stream.State, nextElectedSlot})
+```
+A node must be able to compute a specific chunk of the $`\Phi`$ iterations independently of any global state.
+The result is an *attested output*—a pair $`\phi_x =(\pi_x,\ o_x)`$ where :
+
+ - $`o_x`$ is the computed output for iteration $`x`$,
+ - $`\pi_x`$ is a cryptographic proof attesting that $`o_x`$ was correctly derived from the input according to the rules of $`\Phi`$.
+ - Since this operation may be long-lived, intermediate attested outputs should be persistable to disk, allowing the node to stop, resume, or cancel computation from the latest completed sub-computation.
+
+A subset of block-producing slots must include in their block bodies a unique attested output $`\phi_x`$ with $`x \in \{1,\ \dots,\ i \}`$ denoting the iteration index within the $`\Phi`$ computation :
+ - Each attested output updates the stream state as follows:
+```math
+ \Phi.\text{StreamState} \leftarrow \Phi.\text{provideAttestedOutput}(\Phi.\text{StreamState},\ t,\ \phi_x)
+```
+ - Each attested output must be verifiable both:
+ - **logically**, to ensure it corresponds to the correct slot and index, and
+ - **cryptographically**, to confirm that the computation was effectively executed
+
+```math
+\{0,1\} \leftarrow \Phi.\text{verify}(\Phi.\text{StreamState},\ t,\ \phi_x)
+```
+
+At the synchronization point $`\text{pre-}\eta_{e+1}`$, the stream is closed providing $`\phi^{final}_e = (\phi_e,\ \phi^{aggregated}_e)`$ with the last attested output $`\phi_e\text{,}`$ along with an **aggregated proof** $`\phi^{final}_e`$. This aggregated proof fastens node synchronisation by allowing nodes to efficiently verify the final result without checking each individual $`\phi_x`$ produced during the computation phase :
+
+```math
+\phi^{final}_e \leftarrow \Phi.\text{close}( \Phi.\text{StreamState})
+```
+
+##### 1.2.4. The η Generations
+ - This is the final nonce $`\eta_\text{e}`$ used to determine participant eligibility during epoch $`e`$.
+ - It originates from the operation $`\star`$ with $`\phi^{\text{stream}}_{t}`$ at $`\text{pre-}\eta_\text{e+1}`$ synchronization and η stream $`\text{when } t = \text{end of epoch}_\text{e-3}`$ and the combination of the outputs $`\{o_i\}_{[1,i]}`$ using an aggregation function $`f_\text{agg}`$.
+
+```math
+\eta_\text{e} = \eta^\text{evolving}_{epoch_\text{e-3}}\ \star\ f_\text{agg}(o_1, \dots, o_e) , \quad \text{when } t = \text{pre-}\eta_\text{e+1}\text{ synchronization }
+```
+
+### 2. The Φ Cryptographic Primitive
+
+#### 2.1. Expected Properties
+
+The Φ cryptographic primitive is a critical component of the Phalanx protocol, designed to increase the computational cost of grinding attacks while remaining efficient for honest participants. To achieve this, Φ must adhere to a set of well-defined properties that ensure its security, efficiency, and practical usability within the Cardano ecosystem. These properties are outlined in the table below :
+
+| **Property** | **Description** |
+|---------------------------|-------------------------------------------------------------------------------------------------------------------|
+| **Functionality** | Must be a well-defined mathematical function, ensuring a unique output for each given input (unlike proof-of-work, which allows multiple valid outputs). |
+| **Determinism** | Must be fully deterministic, with the output entirely determined by the input, eliminating non-deterministic variations. |
+| **Efficient Verification**| Must allow for fast and lightweight verification, enabling rapid validation of outputs with minimal computational overhead. |
+| **Compact Representation**| Input and output sizes should be small enough to fit within a block, optimizing on-chain storage efficiency. Further reductions are desirable where feasible. |
+| **Lower Bound on Computation** | Computational cost of evaluation should be well-characterized and predictable, with a lower bound that is difficult to surpass, ensuring adversaries cannot gain an unfair efficiency advantage. |
+| **Ease of Implementation & Maintenance** | Should be simple to implement and maintain, ensuring long-term usability and minimizing technical debt. |
+| **Adaptive Security** | Function and its parameters should be easily reconfigurable to accommodate evolving threats, such as advances in computational power or new cryptographic attacks. |
+
+#### 2.2. Verifiable Delayed Functions (VDF)
+
+Verifiable Delayed Functions (VDFs) are cryptographic primitives designed to take a certain amount of time to compute, regardless of how much computing resources are available. This delay is enforced by requiring a specific number of sequential steps that cannot be easily sped up through parallel processing. Once the computation is done, the result, $`y = g^{2^T}`$, comes with a proof, $`\pi`$, that can be checked quickly and efficiently by anyone. Importantly, for a given input, the output is always the same (deterministic function), ensuring consistency. They usually rely on repeatedly squaring numbers in a mathematical setting that prevents shortcuts and enables quick verification.
+
+As one can see, VDFs present _functionality_, _determinism_, _efficient verification_ and _lower bound on computation_. The _compact representation_ depends on the chosen group as well as the instantiation, which we will tackle later on. The _implementation and maintenance_ is straightforward as the output of a VDF is a simple exponentiation of a group element, only the square operation is needed to be implemented to compute it. As for the proof, this depends on the precise VDF instantiation. Finally, the system is "adaptively secure" as we can set up a group with high security to be reused for a whole epoch or more, and set the number of squaring, also called difficulty, depending on how much computation we want the nodes to perform.
+
+Verifiable Delayed Functions were introduced by Boneh et al. [[6]](https://eprint.iacr.org/2018/601.pdf) where the authors suggest several sequential functions combined with the use of proof systems in the incrementally verifiable computation framework (IVC) for viable proof generation and fast verification.
+VDF variants revolve around two primary SNARK-free designs: one from Pietrzak [[36]](https://drops.dagstuhl.de/storage/00lipics/lipics-vol124-itcs2019/LIPIcs.ITCS.2019.60/LIPIcs.ITCS.2019.60.pdf) and the second from Wesolowski [[35]](https://eprint.iacr.org/2018/623.pdf). They differ in the proof design.
+
+In Wesolowski’s paper, the proof is defined as $g^{{2^T} /\ p}$ where $g$ is the challenge, $T$ the difficulty and $p$ is a prime number found by hashing the VDF input and output together.
+The proof is thus a single group element that can be computed in at most $2\cdot T$ group operations and constant space, or $(1+1/s) \cdot T$ time where the number $s$ is both the number of processors and space while the verification takes $\text{log}_2 T$ scalar multiplications in $\mathbb{Z}/p$ and two small exponentiations in the group $\mathbb{G}$. The proving time can further be optimized to $O(T /\ \text{log}(T))$ group multiplications by reusing the evaluation intermediary results.
+Wesolowski also presents aggregation and watermarking methods. The aggregation method does not consist in aggregating multiple proofs but computing a proof of several VDF challenges. This is done by batching all inputs and outputs together and creating a proof for this batched input. The watermarking is done by computing the VDF twice, once normally and another time on a combination of the challenger’s id and VDF input.
+
+In Pietrzak’s paper, the proof is a tuple of group elements $\pi = \{x^{2^{T / 2^i}}\}$, of size logarithmic in $T$, that can be computed in $(1+2 /\sqrt{T})\cdot T$ time and can be optimized to $O(\sqrt{T} \cdot \text{log}_2 T)$ multiplications. The verification takes $2 \cdot \text{log}_2T$ small exponentiations. Subsequent work on Pietrzak’s paper shows how VDFs challenges can be structured in a Merkle tree to get a proof of the whole tree.
+
+We will choose Wesolowski design over Pietrzark because of its space efficiency and possibility to aggregate proofs.
+
+Specialized hardware such as ASICs can be used to evaluate VDF output much faster, up to a factor 5 in Chia's VDF project while Ethereum considers a factor 10. This, while unfortunate, is not prohibitive in our context as we only consider the use of VDFs for their computational cost. An attacker would still require a substantial budget to perform an anti-grinding attack in addition to purchasing at scale the specialized hardware that is not inexpensive nor readily available (Chia' ASICs can be purchased on a case per case basis for $1,000). We can also note that any solution would still be affected by hardware, like in the case of proof of works and hash farms.
+
+#### 2.3. Wesolowski's VDF
+
+##### 2.3.1. VDF Primitives
+
+To define Wesolowski VDF construction, we first introduce a series of hash functions: $`\text{Hash}^{(n)}_\mathbb{N}`$, which samples random integers of $`n`$ bits, $`\text{Hash}^{(n)}_\text{prime}`$, which samples a random integer from the set of the first $`2^{2n}`$ prime numbers, and $`\text{Hash}_\mathbb{G}`$, which samples a random group element of the class group $`\mathbb{G}`$.
+
+We define the interface of a Verifiable Delay Function as $`\texttt{VDF} = (\texttt{Setup},\ \texttt{Evalute},\ \texttt{Prove},\ \texttt{Verify})`$, and define its underlying functions based on class groups as follows:
+
+- $`(\mathbb{G},\ \Delta,\ \cdot) \leftarrow \texttt{VDF.Setup}(\lambda,\ \Delta_{\text{challenge}})`$
+ Takes as input a **security parameter** $`\lambda \in \mathbb{N}`$ and a **challenge discriminant** $`\Delta_{\text{challenge}} \in \{0,1\}^*`$. This challenge discriminant acts as a source of public entropy used to deterministically derive the group discriminant $\Delta$, which defines a group of unknown order $\mathbb{G}$ along with its group operation $`\cdot`$. The use of a challenge ensures that the resulting group is unbiasable and unpredictable, preventing adversarial precomputation. We shall drop the group settings $`(\mathbb{G},\ \Delta,\ \cdot)`$ from further functions for readability. Internally, we expect the setup procedure to invoke the following sub-operations:
+```math
+ \Delta \leftarrow \texttt{VDF.CreateDiscriminant}(\lambda,\ \Delta_{\text{challenge}})
+```
+```math
+ (\mathbb{G},\ \cdot) \leftarrow \texttt{VDF.DeriveClassGroup}(\lambda,\ \Delta)
+```
+
+- $`y \leftarrow \texttt{VDF.Evaluate}(\ x,\ I)`$
+ Given a challenge $`x \in \mathbb{G}`$ and a number of iterations $`I \in \mathbb{N}`$, computes the output $`y = x^{2^I}`$.
+
+- $`\pi \leftarrow \texttt{VDF.Prove}(\ x,\ y,\ I)`$
+ Given a challenge and output $`(x,y) \in \mathbb{G}^2`$, computes the VDF **proof** as $`\pi = x^{2^I / p}`$ where $`p \leftarrow \text{Hash}^{(2 \lambda)}_\text{prime}(x \| y)`$ is sampled from the first $`2^{2 \lambda}`$ prime numbers.
+
+- $`\{0,1\} \leftarrow \texttt{VDF.Verify}( \ x,\ y,\ I,\ \pi)`$
+ Returns 1 if $`\pi`$ successfully attests that $`y = x^{2^I}`$ with overwhelming probability, that is if $\pi^r \cdot x^p == y$ where $`p \leftarrow \text{Hash}^{(2 \lambda)}_\text{prime}(x \| y)`$ and $`r \leftarrow 2^I \text{mod}\ p`$. Returns 0 otherwise.
+
+##### 2.3.2. VDF Aggregation Primitives
+
+In this section, we present a mechanism for producing a Wesolowski VDF **aggregation proof**. This construction enables efficient synchronization for network participants and may play a central role in deriving the final epoch nonce $`\eta_e`$.
+The aggregation mechanism has the following interface $`\texttt{VDF.Aggregation} = (\text{Init},\ \text{Update},\ \text{Prove},\ \text{Verify})`$ whose functions will be detailled afterwards. We assume that a class group $`\mathbb{G}`$ has already been set up, by $`(\mathbb{G},\ \Delta,\ \cdot) \leftarrow \texttt{VDF.Setup}(\lambda,\ \Delta_{\text{challenge}})`$.
+
+**N.B.** We are showing here the core algorithms for simplicity and readability. In practice, we may use further techniques, for instance using an arbitrary byte and the epoch's number as personalization tags to ensure domain separation.
+
+At the beginning of each epoch, we initialize the VDF accumulators' state that will be used to generate the VDF aggregation proof using $`\texttt{VDF.Aggregation.Init}`$.
+
+
+| `Initialize accumulators` | $`(\text{Acc}_x, \text{Acc}_y, \alpha) \leftarrow \texttt{VDF.Aggregation.Init}(\lambda, \text{pre-}\eta_e)`$ |
+| ------------------------- | ------------------------- |
+| **Input Parameters** | - $`\lambda \in \mathbb{N}`$ — Security parameter.
- $\text{pre-}\eta_e \in \{0,1\}^{256}$ — 256-bit pre-nonce entropy for epoch $e$.
|
+| **Steps** | - Compute all VDF challenges:
$`\forall i\ x_i \leftarrow \text{Hash}_\mathbb{G}(\text{pre-}\eta_e \|\|\ i) `$ - Compute the initial aggregation nonce:
$`\alpha \leftarrow \text{Hash}^{(\lambda)}_\mathbb{N}(x_1 \|\| \dots \|\| x_n) `$ - Initializes the accumulators to the identity:
$`(\text{Acc}_x,\ \text{Acc}_y) \leftarrow (1_\mathbb{G},\ 1_\mathbb{G})`$
|
+| **Returned Output** | $`(\text{Acc}_x,\ \text{Acc}_y,\ \alpha)`$ — Input and output accumulators and initial aggregation nonce. |
+
+
+
+Every time a VDF output is published on-chain, if no previous VDF outputs are missing, we shall update the accumulators' state using $`\texttt{VDF.Aggregation.Update}`$.
+
+
+| `Update accumulators` | $`(\text{Acc}_x, \text{Acc}_y, \alpha) \leftarrow \texttt{VDF.Aggregation.Update}(\lambda, (x_i, y_i),\ (\text{Acc}_x,\ \text{Acc}_y,\ \alpha))`$ |
+| ------------------------- | ------------------------- |
+| **Input Parameters** | - $`\lambda \in \mathbb{N}`$ — Security parameter.
- $`(x_i,\ y_i)`$ — Pair of VDF input and output for current interval.
- $`(\text{Acc}_x,\ \text{Acc}_y,\ \alpha)`$ — Accumulators' state.
|
+| **Steps** | - Compute the aggregation nonce:
$`\alpha \leftarrow \text{Hash}^{(\lambda)}_\mathbb{N}(\alpha\ \|\|\ y_i) `$ - Update the accumulators:
$`(\text{Acc}_x, \text{Acc}_y) \leftarrow (\text{Acc}_x \cdot x_i^\alpha,\ \text{Acc}_y \cdot y_i^\alpha)`$
|
+| **Returned Output** | $`(\text{Acc}_x,\ \text{Acc}_y,\ \alpha)`$ — Updated accumulator's state. |
+
+
+
+Once all VDF outputs have been generated and the accumulators updated, we can generate the VDF aggregation proof $`\pi`$ using $`\texttt{VDF.Aggregation.Prove}`$.
+
+
+| `Prove accumulators` | $`\pi \leftarrow \texttt{VDF.Aggregation.Prove}(\ (\text{Acc}_x,\ \text{Acc}_y,\ \_\alpha),\ I)`$ |
+| ------------------------- | ------------------------- |
+| **Input Parameters** | - $`(\text{Acc}_x,\ \text{Acc}_y,\ \alpha)`$ — Accumulators' state.
- $`I \in \mathbb{N}`$ — Per-interval iteration count for the VDF.
|
+| **Steps** | - Compute the accumulator proof as a VDF proof:
$`\pi \leftarrow \texttt{VDF.Prove}(\text{Acc}_x,\ \text{Acc}_y,\ I)`$
|
+| **Returned Output** | $`\pi`$ — Aggregated proof. |
+
+
+
+The VDF aggregation proof $`\pi`$ can then be efficiently be verified using $`\texttt{VDF.Aggregation.Verify}`$.
+
+
+| `Verify accumulators` | $`\{0,1\} \leftarrow \texttt{VDF.Aggregation.Verify}(\ (\text{Acc}_x,\ \text{Acc}_y,\ \_\alpha),\ I,\ \pi)`$ |
+| ------------------------- | ------------------------- |
+| **Input Parameters** | - $`(\text{Acc}_x,\ \text{Acc}_y,\ \alpha)`$ — Accumulators' state.
- $`I \in \mathbb{N}`$ — Per-interval iteration count for the VDF.
- $`\pi \in \mathbb{G}`$ — Aggregated VDF proof.
|
+| **Steps** | - Verfy the accumulators' proof:
$`b \leftarrow \texttt{VDF.Verify}(\text{Acc}_x,\ \text{Acc}_y,\ I,\ \pi)`$
|
+| **Returned Output** | $`b`$ — Verification bit. |
+
+
+
+### 3. Φ Stream Specification
+
+We previously outlined the purpose of the Phalanx sub-protocol and introduced the cryptographic primitive underpinning its security guarantees. In this section, we provide a precise technical specification of the protocol, focusing on how the $`\Phi`$ iterations are distributed and how Wesolowski’s Verifiable Delay Function (VDF) is integrated into the process.
+
+#### 3.1. Distribution of Φ Iterations
+
+As previously mentioned, Φ Stream is divided into epoch-sized *lifecycle segments*. Each segment begins with an **initialize** function, ends with a **close** function, and is immediately followed by the start of a new segment.
+
+We further partition this segment into **intervals**, each large enough to guarantee (with 128-bit confidence) that at least one block will be produced within it. This corresponds to **3435 slots** per interval. For simplicity, we round this to **3600 slots** (~1 hour), resulting in exactly 120 intervals per segment, which conveniently aligns with the 120 hours in five days.
+
+
+🔍 How 128-bit Confidence gives 3435 Slots ?
+
+
+ 📦 Guaranteeing Honest Block Inclusion with 128-bit Confidence in our context
+
+We want to make sure that, in any given interval of $N$ slots, there's **at least one honest block** produced — with a failure probability of at most $2^{-128}$ (which is a standard for cryptographic security).
+
+It is also important to note that we are operating in a context where fork-related concerns can be safely abstracted away. In particular, if an adversary were to attempt a private chain attack and succeed, it would imply that their chain is denser and that the proof of $\Phi$ computation is valid. In this setting, forks do not undermine security—they actually improve the probability of having at least one valid computation published within the interval.
+
+This means: $`\Pr(\text{at least one honest block in } N \text{ slots}) \geq 1 - 2^{-128}`$
+
+ 🎲 Step 1 — What’s the chance of *not* getting an honest block?
+
+Each slot gives honest participants a chance to be selected as leader.
+
+Let:
+
+- $f = 0.05$ → probability a slot is active
+- $\sigma = 0.51$ → at least 51% of stake is honest
+
+Then the chance that **no honest party** is selected in a slot is: $`(1 - f) + f \cdot(1-\sigma) = 0.95 + 0.05 \cdot (1-0.51) \approx 0.97449`$
+
+
+So, the chance that **at least one honest party** is selected in a slot is: $`p_h = 1 - 0.97449 = 0.0255`$
+
+
+This means that **each slot has a 2.584% chance** of having an honest leader.
+
+ 📐 Step 2 — What about across $N$ slots?
+
+The chance that **no honest block** is produced in $N$ consecutive slots is: $`(1 - p_h)^N`$
+
+We want this to be **less than or equal to** $2^{-128}$, so: $(1 - p_h)^N \leq 2^{-128}$
+
+ ✏️ Step 3 — Solve for $N$
+
+Take log base 2 of both sides:
+
+$\log_2((1 - p_h)^N) \leq \log_2(2^{-128})$
+
+$N \cdot \log_2(1 - p_h) \leq -128$
+
+$N \geq \frac{-128}{\log_2(1 - p_h)}$
+
+Now plug in:
+
+
+$`\log_2(1 - 0.0255) = \log_2(0.97449) \approx -0.03726`$
+
+$`N \geq \lceil \frac{128}{0.03726} \rceil = 3435`$
+
+To guarantee with 128-bit confidence that an interval contains **at least one honest block**, the interval must be at least **3435 slots** long.
+
+This ensures security even if up to **49% of stake is adversarial**.
+
+----
+
+
+
+
+This structure can be illustrated as follows:
+
+
+
+As previously described, we configure the stream using two key parameters, most notably the total computational budget $`T_\Phi`$. This value defines the total amount of work we require SPOs to collectively perform.
+
+We split $`T_\Phi`$ into discrete **iterations**, each with the following properties:
+
+- Iterations are fully independent and can be computed in parallel.
+- Slot leaders are responsible for submitting a proof of computation for the specific iteration assigned to them.
+- These computations are fully decoupled, there is no requirement to wait for previous iterations, enabling input precomputation and reducing latency.
+- All iterations must eventually be completed, and an additional and final iteration is used to aggregating all outputs along with a corresponding proof.
+- The iterations are then used to compute the epoch randomness $\eta_e$.
+
+Each iteration is mapped to a specific interval, with the following constraints:
+
+ - The first interval is intentionally left without an assigned iteration, giving slot leaders time to compute the first output for interval \#2 and allowing precomputation of the challenges.
+ - Each interval must be longer than the time required to compute a single iteration (i.e., the iteration duration must be less than one hour).
+ - The first slot leader to produce a block within an interval is responsible for submitting the corresponding attested output.
+
+At first glance, we could divide $`T_\Phi`$ evenly across the 120 intervals. However, to ensure resilience, the protocol must remain robust even in extreme scenarios—such as a global outage causing **36 hours** of consecutive downtime (**30% of an epoch**). This scenario is detailed in the [Cardano Disaster Recovery Plan](https://iohk.io/en/research/library/papers/cardano-disaster-recovery-plan).
+
+A global outage implies a sequence of blockless intervals. To tolerate such conditions, the protocol must be able to handle up to **36 intervals without block production**. To address this, we introduce a catch-up mechanism:
+ - We reserve the final 36 intervals of the segment specifically for recovering any missing attested outputs.
+ - These missing outputs must be submitted in order, according to their original indices, ensuring deterministic reconstruction of the full computation stream.
+
+
+We define **4 sequential phases** in the stream lifecycle:
+
+- 🟧 **Parametrization Phase** :
+ The stream is configured but not yet active. Parameters such as $`\lambda`$ (computation hardness) and $`\#\text{iterations}_\phi`$ (number of iterations) are established during this phase.
+
+- 🟩 **Initialization Grace Phase**:
+ The stream is activated, and Stake Pool Operators (SPOs) are given a grace period to begin the first iteration of the computation.
+
+- 🟥 **Computation Phase**:
+ During this phase, the protocol expects attested outputs to be published on-chain. It consists of **82 computation iterations**, each producing an intermediate output that contributes to the final result.
+
+- 🟦 **Catch-up & Closure Phase**:
+ - A bounded recovery window that allows SPOs to submit any **missing attested outputs**, ensuring the completeness of the computation prior to finalization.
+ - A final dedicated interval to compute the **aggregation** of all previous outputs and derive the epoch’s final randomness $`\eta_e`$. This phase **seals the stream** and concludes a lifecycle.
+
+The diagram below illustrates how the lifecycle segment is structured:
+
+
+
+### 3.2. The State Machine
+
+#### 3.2.1. Diagram Overview
+
+The figure below presents the **state transition diagram** for the Phalanx computation stream. Each node represents a distinct state in the lifecycle of the stream, and the arrows indicate transitions triggered by `Tick` events. These transitions are guarded by boolean predicates evaluated at each slot (e.g., `isWithinComputationPhase`, `isWithinCurrentInterval`).
+
+
+
+In the following sections, we provide a detailed breakdown of each phase of the state machine, specifying its purpose, entry conditions, timing constraints, and transitions.
+
+#### 3.2.2. 🟧 Parametrization Phase
+
+At the setup of $`\phi^{stream}`$, the total number of VDF iterations is derived from the time-bound parameter $`T_\Phi`$, using a reference hardware profile that reflects the minimal computational capacity expected of SPOs. While this derivation may not be fully automatable in practice, we include it here to clarify how time constraints are mapped to iteration counts during configuration.
+
+Importantly, this **parametrization phase** occurs only once, either during the initial bootstrap of the stream or following a transition from the `Closed` to `Initialized` state.
+
+
+
+| `Parametrized` | $`\Phi.\text{Stream.State} \in \texttt{Parametrized} : \left\{ {securityParameter} \in \mathbb{N},\quad I \in \mathbb{N} \right\}`$ |
+| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
+| **Fields** | - $`\text{securityParameter} \in \mathbb{N}`$ — The **security parameter**, defining the size (in bits) of the VDF discriminant.
- $`I \in \mathbb{N}`$ — The **per-interval VDF iteration count**, computed from $`T_\Phi`$ and evenly distributed across 82 computation intervals.
|
+
+
+| `parametrize` | $`\Phi.\text{Stream.State} \leftarrow \Phi.\text{parametrize}(\lambda,\ T_\Phi)`$|
+| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
+| **Input Parameters** | - $`\lambda \in \mathbb{N}`$ — **Security parameter**, defines the size (in bits) of the VDF discriminant.
- $`T_\Phi \in \mathbb{N}`$ — **Time budget** in seconds, representing the total computation time under reference hardware.
|
+| **Derivation Logic** | - $`\#\text{Iterations}_\Phi \leftarrow \texttt{VDF}.\texttt{IterationsFromDuration}(T_\Phi)`$
- $`\#\text{Iterations}_\phi \leftarrow \left\lfloor \frac{\#\text{Iterations}_\Phi}{82} \right\rfloor`$
|
+| **Returned State** | $`\texttt{Parametrized} \left\{ \text{securityParameter} \leftarrowtail \lambda,\quad I \leftarrowtail \#\text{Iterations}_\phi \right\}`$|
+
+
+
+#### 3.2.3. 🟩 Initialization Grace Phase
+
+Initialization occurs at every pre-ηₑ synchronization point, followed by an *Initialization Grace* period during which the protocol waits long enough for the first iteration to be computed and its proof to be included within the first computation interval. This process recurs every $`10 \cdot \frac{k}{f}`$ slots.
+
+##### 3.2.3.1. Initialize Command
+We show here how to initialize the class-group based VDF algorithm when generating a group for each different epoch. Were we to use the same group for many, if not all, epochs, we would run these steps in the *Parametrization phase* and change the discriminant seed $`\Delta_{\text{challenge}}`$ accordingly, e.g. if we use the same group forever we could use $`\Delta_{\text{challenge}} \leftarrow \text{Hash}(\text{bin}(\text{``IOHKPhalanx2025"}))`$.
+
+
+
+| `Initialized` | $`\Phi.\text{Stream.State} \in \texttt{Initialized} : \left\{ \text{parametrized} \in \texttt{Parametrized},\ \text{group} \in \mathbb{G},\ \text{discriminant} \in \mathbb{Z},\ \text{operation} : \mathbb{G} \times \mathbb{G} \to \mathbb{G} \right\}`$|
+| ----------- | -------------- |
+| **Fields** | - $\text{parametrized} \in \texttt{Parametrized}$ — Reference to the prior configuration (security parameter and iteration count).
- $\text{group} \in \mathbb{G}$ — VDF group used for exponentiation.
- $\text{discriminant} \in \mathbb{Z}$ — Epoch-specific VDF discriminant.
- $\text{operation} : \mathbb{G} \times \mathbb{G} \to \mathbb{G}$ — Group operation used for VDF evaluation (e.g., modular exponentiation).
- $\text{epochId}_e \in \mathbb{N}$ — Numerical identifier for epoch $e$.
- $\text{pre-}\eta_e \in \{0,1\}^{256}$ — 256-bit pre-nonce entropy for epoch $e$.
|
+
+
+
+
+
+| `initialize` | $\Phi.\text{Stream.State} \leftarrow \Phi.\text{Initialize}(\text{parametrizedState},\ \text{epochId}_e,\ \text{pre-}\eta_e)$ |
+| -------------------- | ----------------------------------------- |
+| **Input Parameters** | - $\text{parametrizedState} = (\lambda,\ I) \in \texttt{Parametrized}$ — Configuration from the prior Parametrized state.
- $\text{epochId}_e \in \mathbb{N}$ — Numerical identifier for epoch $e$.
- $\text{pre-}\eta_e \in \{0,1\}^{256}$ — 256-bit pre-nonce entropy for epoch $e$.
|
+| **Derivation Logic** | - $`\Delta_{\text{challenge}} \leftarrow \text{Hash}(\text{bin}(\text{epochId}_e) \ \|\ \text{pre-}\eta_e)`$
- $`(\mathbb{G},\ \Delta,\ \cdot) \leftarrow \texttt{VDF.Setup}(\lambda,\ \Delta_{\text{challenge}})`$
|
+| **Returned State** | $`\texttt{Initialized} \left\{ \text{parametrized} \leftarrowtail (\lambda,\ I),\ \text{group} \leftarrowtail \mathbb{G},\ \text{discriminant} \leftarrowtail \Delta,\ \text{operation} \leftarrowtail \cdot , \ \text{epochId}_e \leftarrowtail \text{epochId}_e ,\ \text{pre-}\eta_e \leftarrowtail \text{pre-}\eta_e \right\}`$ |
+
+
+
+##### 3.2.3.2. Tick Commands & Grace Period
+
+
+
+| `AwaitingComputationPhase` | $`\Phi.\text{Stream.State} \in \texttt{AwaitingComputationPhase} : \left\{ \text{initialized} \in \texttt{Initialized},\ \text{currentSlot} \in\ \mathbb{N} \bmod \left(10 \cdot \frac{k}{f}\right) \right\}`$ |
+|--------------------|-------------|
+| **Fields** | - $`\text{initialized} \in \texttt{Initialized}`$ — Reference to the prior initialization.
- $`\text{currentSlot} \in\ \mathbb{N} \bmod \left(10 \cdot \frac{k}{f}\right)`$ — The current slot in the chain timeline.
|
+
+
+
+**Initial tick transition to `AwaitingComputationPhase`:**
+
+
+
+| `tick` | $\Phi.\text{Stream.State} \leftarrow \Phi.\text{tick}(\text{initializedState})$ |
+| -------------------- | ----------------------------------------- |
+| **Input Parameters** | - $\text{initializedState} \in \texttt{Initialized}$ — Configuration from the prior Initialized state.
|
+| **Returned State** | $`\texttt{AwaitingComputationPhase} \left\{ \text{initialized} \leftarrowtail initialiinitializedzedState,\ \text{currentSlot} \leftarrowtail 0 \right\}`$
+
+
+
+**Subsequent ticks on `AwaitingComputationPhase`:**
+
+
+
+| `tick` | $`\Phi.\text{Stream.State} \leftarrow \Phi.\text{tick}(\text{awaitingComputationPhaseState})`$ |
+|--------------------|---------------------------------------------------------------------------------------------------|
+| **Input Parameters** | - $`\text{awaitingComputationPhaseState} \in \texttt{AwaitingComputationPhase}`$ — Configuration from the prior Initialized state.
|
+| **Returned State** | $` \begin{cases} \text{When } \texttt{isWithinInitializationGracePhase} :\ \texttt{AwaitingComputationPhase}\ \{ \text{initialized} ,\ \text{currentSlot++} \} \\\\ \text{When } \texttt{isWithinComputationPhase} :\ \texttt{AwaitingAttestedOutput}\ \{ \text{initialized} ,\ \text{currentSlot++} \} \end{cases}`$ |
+
+
+
+#### 3.2.4. 🟥 Computation Phase
+
+##### 3.2.4.1. VDF integration
+
+We are now entering the **Computation Phase**. We have waited long enough for the first slot leader within the initial interval to have the opportunity to produce a block and submit the corresponding attested output. However, because the slot distribution is privately visible, leaders within the interval cannot determine whether they are the first to produce a block.
+
+Each leader is free to adopt their own strategy for deciding whether to initiate the proof of computation. A simple and conservative approach is to wait until $`\text{currentSlot} \geq \text{nextElectedSlot} - \left(\frac{T_\Phi}{82} + C\right)`$, where $`C`$ is a small constant. At that point, the leader may begin computing. If a block has already been produced by then, the leader can either skip the computation or abort it if already in progress. This delay increases the chances that any earlier eligible leaders have already submitted their outputs, thereby minimizing the risk of redundant proofs.
+
+To publish the first block of interval $`i \in [1..82]`$ of epoch $`e`$, the node invokes:
+
+```math
+(y_i, \pi_i) \leftarrow \Phi.\text{compute}(\text{initialized} \in \texttt{Initialized},\ i \in \texttt{Interval})
+```
+
+This function internally calls the VDF primitives: $`y_i \leftarrow \texttt{VDF.Evaluate}((\mathbb{G},\ \Delta,\ \cdot), \ x_i,\ I)`$ and $`\pi \leftarrow \texttt{VDF.Prove}((\mathbb{G},\ \Delta, \cdot),\ x_i,\ y_i,\ I)`$ with inputs constructed as:
+
+- $`x_i \leftarrow \text{Hash}(\text{b``challenge"} ||\ \text{bin}(e) ||\ \text{pre-}\eta_e || \text{bin}(i))`$
+- The parameters $`(\mathbb{G}, \Delta, \cdot)`$ and $`I`$ are retrieved from the `Initialized` state.
+
+Finally, the node includes the attested outputs in the block header:
+
+- $`y_i`$: the VDF output for interval $`i`$
+- $`\pi_i`$: the corresponding VDF proof for interval $`i`$
+
+In rare cases, an interval may produce no block, and consequently, no expected proof for the corresponding iteration. The computation phase simply acknowledges these gaps; they are handled during the subsequent **Catch-up Phase**, which is specifically designed to resolve such missing outputs.
+
+##### 3.2.4.2. The States
+
+During the computation phase, the stream alternates between two closely related states: `AwaitingAttestedOutput` and `AttestedOutputProvided`. These two states are **structurally identical**, meaning they share the same underlying fields. What distinguishes them is their **semantic role** in the protocol’s lifecycle:
+
+* `AwaitingAttestedOutput` represents the period **before** an attestation has been submitted for the current interval.
+* `AttestedOutputProvided` signals that the attestation for the current interval has been **successfully received and verified**.
+
+The field structure for both is as follows:
+
+```math
+\Phi.\text{Stream.State} \in \texttt{AwaitingAttestedOutput} : \left\{
+ \begin{aligned}
+ &\text{initialized} &&\in\ \texttt{Initialized}, \\
+ &\text{currentSlot} &&\in\ \mathbb{N} \bmod \left(10 \cdot \frac{k}{f}\right), \\
+ &\text{attestedOutputs} &&\in\ \left[\texttt{Maybe}\ (y, \pi)\right]^{82}
+ \end{aligned}
+\right\}
+```
+
+
+
+| **Field** | **Description** |
+| ---- | -------- |
+| $`\text{initialized} \in \texttt{Initialized}`$ | Reference to the prior initialization state.|
+| $`\text{currentSlot} \in\ \mathbb{N} \bmod \left(10 \cdot \frac{k}{f}\right)`$| The current slot in the timeline. |
+| $`\text{attestedOutputs} \in \left[\texttt{Maybe}\ (y, \pi)\right]^{82}`$ | - An array of optional attested outputs, one per computation interval.
- Each index corresponds to a specific interval and may contain a proof pair $`(y, \pi)`$.
- If the output is not yet submitted, the entry is `None`.
|
+
+
+
+The `AttestedOutputProvided` state reuses the exact same structure:
+
+```math
+\Phi.\text{Stream.State} \in \texttt{AttestedOutputProvided} : \left\{
+ \begin{aligned}
+ &\text{initialized} &&\in\ \texttt{Initialized}, \\
+ &\text{currentSlot} &&\in\ \mathbb{N} \bmod \left(10 \cdot \frac{k}{f}\right), \\
+ &\text{attestedOutputs} &&\in\ \left[\texttt{Maybe}\ (y, \pi)\right]^{82}
+ \end{aligned}
+\right\}
+```
+
+This version aligns both the field names and their types in two neat columns. Let me know if you'd prefer the braces to be placed differently (e.g. outside the alignment block) for aesthetic reasons.
+
+
+
+| **Field** | **Description** |
+| ------------- | --------------- |
+| $`\text{initialized} \in \texttt{Initialized}`$ | Reference to the prior initialization state. |
+| $`\text{currentSlot} \in\ \mathbb{N} \bmod \left(10 \cdot \frac{k}{f}\right)`$ | The current slot in the timeline. |
+| $`\text{attestedOutputs} \in \left[\texttt{Maybe}\ (y, \pi)\right]^{82}`$ | - An array of optional attested outputs, one per computation interval.
- Each index corresponds to a specific interval and may contain a proof pair $`(y, \pi)`$.
- If the output hasn't been submitted yet, the entry is `None`.
- For the current interval, the output **has already been provided** in this state.
|
+
+
+
+##### 3.2.4.3. ProvideAttestedOutput & Tick Commands
+
+The `provideAttestedOutput` command is used to submit a new attested output $`\phi_i = (y_i, \pi_i)`$ for a specific interval $`i`$, when the protocol is in the `AwaitingAttestedOutput` state. This function verifies the validity of the provided proof and updates the stream state accordingly :
+
+
+
+| `provideAttestedOutput` | $`\Phi.\text{Stream.State} \leftarrow \Phi.\text{provideAttestedOutput}(\text{awaitingAttestedOutputState},\ \phi_i)`$ |
+|-------------------------|--------------------------------------------------------------------------------------------------------------------------|
+| **Input Parameters** | - $`\text{awaitingAttestedOutputState} \in \texttt{AwaitingAttestedOutput}`$ — Current state awaiting an attested output $`\phi_i`$ for interval $`i`$.
- $`\phi_i = (y_i, \pi_i)`$ — Attested output and corresponding proof.
|
+| **Property Check** | - Ensure $`\phi_i`$ is valid by verifying: $`\texttt{VDF.Verify}((\mathbb{G},\ \Delta,\ \cdot),\ x_i,\ y_i,\ I,\ \pi_i)`$
- Where:
$`x_i = \text{Hash}(\text{b``challenge"}\ \|\|\ \text{bin}(e)\ \|\|\ \text{pre-}\eta_e\ \|\|\ \text{bin}(i))`$
$`I \in \mathbb{N}`$ is the per-interval iteration count.
|
+| **Returned State** | $`\texttt{AttestedOutputProvided}\ \{ \text{initialized},\ \text{currentSlot} + 1,\ \text{attestedOutputs}[i] \leftarrowtail \phi_i \}`$ — Updated state reflecting the verified attestation. |
+
+
+
+Once an attested output has been provided, the next slot may trigger a `tick` event. If no further action is taken, the system must determine whether it remains within the current interval, moves to the next, or enters the catch-up phase. The following command captures this logic when starting from the `AttestedOutputProvided` state :
+
+
+
+| `tick` | $`\Phi.\text{Stream.State} \leftarrow \Phi.\text{tick}(\text{attestedOutputProvidedState})`$ |
+|----------------------|---------------------------------------------------------------------------------------------------|
+| **Input Parameters** | - $`\text{attestedOutputProvidedState} \in \texttt{AttestedOutputProvided}`$ — The current state after an attestation has been successfully provided.
|
+| **Returned State** | $`\begin{cases} \text{When } \texttt{isWithinCurrentInterval} &: \texttt{AttestedOutputProvided} \{ \dots,\ \text{currentSlot++} \} \\\\ \text{When } \texttt{isWithinNextInterval} &: \texttt{AwaitingAttestedOutput} \{ \dots,\ \text{currentSlot++} \} \\\\ \text{When } \texttt{isWithinCatchUpPhase} &: \texttt{AwaitingMissingAttestedOutput} \{ \dots,\ \text{currentSlot++} \} \end{cases}`$ |
+
+
+
+Alternatively, when still waiting for an attestation and no block was produced, a `tick` may trigger a transition based on the current time. This command applies to the `AwaitingAttestedOutput` state before any attestation has been submitted :
+
+
+
+| `tick` | $`\Phi.\text{Stream.State} \leftarrow \Phi.\text{tick}(\text{awaitingAttestedOutputState})`$ |
+|--------------------|---------------------------------------------------------------------------------------------------|
+| **Input Parameters** | - $`\text{awaitingAttestedOutputState} \in \texttt{AwaitingAttestedOutput}`$ — Current state awaiting an attested output $`\phi_i`$ for interval $`i`$.
- $`\phi_i = (y_i, \pi_i)`$ — Attested output and corresponding proof.
|
+| **Returned State** | $` \begin{cases} \text{When } \texttt{isWithinCurrentInterval} :\ \texttt{AwaitingComputationPhase}\ \{ \text{..} ,\ \text{currentSlot++} \} \\\\ \text{When } \texttt{isWithinCatchUpPhase} :\ \texttt{AwaitingMissingAttestedOutput}\ \{ \text{..} ,\ \text{currentSlot++} \} \\\\ \text{When } \texttt{isClosable} :\ \texttt{AwaitingGracefulClosure}\ \{ \text{..} ,\ \text{currentSlot++} \}\end{cases}`$ |
+
+
+
+`isClosable` indicates that all attested outputs have been successfully provided, and only the final interval remains, during which the outputs are aggregated and the seed $`\eta_e`$ is derived and recorded on-chain.
+
+#### 3.2.5. 🟦 Catch-up Phase
+
+This Catch-up Phase closely resembles the preceding Computation Phase, but its purpose is to recover from any blockless intervals that may have occurred — albeit such cases are extremely rare.
+
+The phase spans a total of 37 intervals: 36 are reserved to account for up to 36 consecutive intervals without block production (e.g., a global outage affecting 30% of an epoch), and 1 final interval is allocated for the Closure Phase. As in the Computation Phase, missing attested outputs must be submitted in order, one per interval.
+
+The faster these missing outputs are provided, the sooner the state machine can transition to the final phase. Although the protocol allocates 37 intervals to handle the worst-case scenario, recovery may complete much earlier in practice.
+
+This section focuses solely on the Catch-up Phase; the next section will describe the process of stream closure.
+
+##### 3.2.5.1. The States
+
+Structurally, we define two states that are similar in form and semantics to `AwaitingMissingAttestedOutput` and `AttestedMissingOutputProvided`:
+
+```math
+\Phi.\text{Stream.State} \in \texttt{AwaitingMissingAttestedOutput} : \left\{
+ \begin{aligned}
+ &\text{initialized} &&\in\ \texttt{Initialized}, \\
+ &\text{currentSlot} &&\in\ \mathbb{N} \bmod \left(10 \cdot \frac{k}{f}\right), \\
+ &\text{attestedOutputs} &&\in\ \left[\texttt{Maybe}\ (y, \pi)\right]^{82}
+ \end{aligned}
+\right\}
+```
+
+```math
+\Phi.\text{Stream.State} \in \texttt{AttestedMissingOutputProvided} : \left\{
+ \begin{aligned}
+ &\text{initialized} &&\in\ \texttt{Initialized}, \\
+ &\text{currentSlot} &&\in\ \mathbb{N} \bmod \left(10 \cdot \frac{k}{f}\right), \\
+ &\text{attestedOutputs} &&\in\ \left[\texttt{Maybe}\ (y, \pi)\right]^{82}
+ \end{aligned}
+\right\}
+```
+
+This phase focuses on recovering the missing attested outputs—specifically, the `None` entries in the `attestedOutputs` array. The goal during this phase is to have those missing values provided.This phase operates under strict sequential expectations where the missing attested outputs must be provided in order, one per interval, as in the Computation Phase. To make this explicit, we define the sequence of expected indices as follows:
+
+```math
+\text{ExpectedMissingIndices} := \left\{ i \in \{1, \dots, 82\} \mid \text{attestedOutputs}[i] = \texttt{Nothing} \right\}
+```
+This ordered set defines the exact sequence in which the missing attestations must be submitted during the Catch-up Phase.
+
+
+##### 3.2.5.2. ProvideMissingAttestedOutput & Tick Commands
+
+The `provideMissingAttestedOutput` command is used to submit a missing attested output $`\phi_i = (y_i, \pi_i)`$ for a specific interval $`i`$, when the protocol is in the `AwaitingMissingAttestedOutput` state. This function checks the validity of the proof and updates the stream state accordingly:
+
+
+
+| `provideMissingAttestedOutput` | $`\Phi.\text{Stream.State} \leftarrow \Phi.\text{provideMissingAttestedOutput}(\text{awaitingMissingAttestedOutputState},\ \phi_i)`$ |
+| ----- | --- |
+| **Input Parameters** | - $`\text{awaitingMissingAttestedOutputState} \in \texttt{AwaitingMissingAttestedOutput}`$ — State awaiting a missing attestation $`\phi_i`$ for interval $`i`$.
- $`\phi_i = (y_i, \pi_i)`$ — Attested output and its proof.
|
+| **Property Check** | - Verify $`\phi_i`$ with: $`\texttt{VDF.Verify}((\mathbb{G},\ \Delta,\ \cdot),\ x_i,\ y_i,\ I,\ \pi_i)`$
- Where:
$`x_i = \text{Hash}(\text{b``challenge"}\ \|\|\ \text{bin}(e)\ \|\|\ \text{pre-}\eta_e\ \|\|\ \text{bin}(i))`$ - $`I \in \mathbb{N}`$ is the per-interval iteration count.
|
+| **Returned State** | $`\texttt{MissingAttestedOutputProvided} \{ \text{initialized},\ \text{currentSlot} + 1,\ \text{attestedOutputs}[i] \leftarrowtail \phi_i \}`$ — Updated state reflecting the accepted missing output. |
+
+
+
+Once a missing attested output has been provided, the next slot may trigger a `tick` event. The system must determine whether it remains within the current interval, moves to the next, or enters the closure phase. The following command captures this logic when starting from the `MissingAttestedOutputProvided` state :
+
+
+
+| `tick` | $`\Phi.\text{Stream.State} \leftarrow \Phi.\text{tick}(\text{missingAttestedOutputProvidedState})`$ |
+|----------------------|---------------------------------------------------------------------------------------------------|
+| **Input Parameters** | - $`\text{missingAttestedOutputProvidedState} \in \texttt{MissingAttestedOutputProvided}`$ — The current state after an attestation has been successfully provided.
|
+| **Returned State** | $`\begin{cases} \text{When } \texttt{isWithinCurrentInterval} &: \texttt{MissingAttestedOutputProvided} \{ \dots,\ \text{currentSlot++} \} \\\\ \text{When } \texttt{isWithinNextInterval} &: \texttt{AwaitingMissingAttestedOutput} \{ \dots,\ \text{currentSlot++} \} \\\\ \text{When } \texttt{isClosable} &: \texttt{AwaitingGracefulClosure} \{ \dots,\ \text{currentSlot++} \} \\\\ \text{When } \texttt{isUngracefullyClosable} &: \texttt{UngracefullyClosed} \{.., {pre-}\eta_e = {initialized.}{pre-}\eta_e \} \} \end{cases}`$ |
+
+
+
+Alternatively, when still waiting for an attestation and no block was produced, a `tick` may trigger a transition based on the current time. This command applies to the `AwaitingMissingAttestedOutput` state before any attestation has been submitted :
+
+
+
+| `tick` | $`\Phi.\text{Stream.State} \leftarrow \Phi.\text{tick}(\text{awaitingMissingAttestedOutputState})`$ |
+|--------------------|---------------------------------------------------------------------------------------------------|
+| **Input Parameters** | - $`\text{awaitingMissingAttestedOutputState} \in \texttt{AwaitingMissingAttestedOutput}`$ — Current state awaiting an attested output $`\phi_i`$ for interval $`i`$.
- $`\phi_i = (y_i, \pi_i)`$ — Attested output and corresponding proof.
|
+| **Returned State** | $` \begin{cases} \text{When } \texttt{isWithinCurrentInterval} :\ \texttt{AwaitingMissingAttestedOutput}\ \{ \text{..} ,\ \text{currentSlot++} \} \\\\ \text{When } \texttt{isClosable} :\ \texttt{AwaitingGracefulClosure}\ \{ \text{..} ,\ \text{currentSlot++} \} \\\\ \text{When } \texttt{isUngracefullyClosable} :\ \texttt{UngracefullyClosed} \{.., {pre-}\eta_e = {initialized.}{pre-}\eta_e \} \}\end{cases}`$ |
+
+
+
+`isUngracefullyClosable` indicates that the end of the lifecycle segment has been reached (i.e., `currentSlot++ == 0`), while some attested outputs are still missing. When this condition holds, the lifecycle is forcefully closed in an ungraceful manner.
+
+
+#### 3.2.6 ⬛ Closure Phase
+
+We now enter the final phase of the lifecycle, during which all collected outputs are expected to be aggregated and recorded on-chain, and the seed $\eta_e$ derived and committed.
+
+**Successful Scenarios:**
+In these cases, all attested outputs have been provided by the end of the catch-up phase.
+
+- **Best-case scenario:** The closure phase begins at interval 84, giving the system 37 intervals to perform output aggregation and seed commitment under normal operating conditions.
+- **Worst-case scenario:** The catch-up mechanism is fully utilized, and the system enters the closure phase at interval 120, the very last interval of the lifecycle segment. Even so, all necessary outputs have been successfully provided.
+
+**Failure Scenario:**
+
+This occurs when the lifecycle segment reaches its end (i.e., the full $10 \cdot \frac{k}{f}$ slots), and despite the entire duration of the catch-up mechanism (up to interval 120), either some required attested outputs remain missing, or all outputs have been delivered but the final aggregation has not occurred.
+This scenario represents an extremely rare event—statistically far beyond 128-bit confidence—and reflects a severe disruption in which no blocks have been produced for over 36 hours. These edge cases are represented in the diagram by the transition `Tick / isUngracefullyClosable`.
+
+##### 3.2.6.1. The States
+
+In this phase, we define two states:
+
+- `AwaitingGracefulClosure`: This state signifies that all 82 attested outputs have been successfully collected. At this point, the outputs are no longer optional—each index is populated with a verified pair $`(y, \pi)`$.
+
+```math
+\Phi.\text{Stream.State} \in \texttt{AwaitingGracefulClosure} : \left\{
+ \begin{aligned}
+ &\text{initialized} &&\in\ \texttt{Initialized}, \\
+ &\text{currentSlot} &&\in\ \mathbb{N} \bmod \left(10 \cdot \frac{k}{f}\right), \\
+ &\text{attestedOutputs} &&\in\ \left[(y, \pi)\right]^{82}
+ \end{aligned}
+\right\}
+```
+
+- `Closed`: This is a final state in the stream lifecycle. It signifies that the aggregated output has been computed and verified, and the final epoch randomness \$`\eta_e`\$ has been successfully derived—achieving the core objective of the protocol. This state is reached in response to either a `Close` command :
+
+```math
+\Phi.\text{Stream.State} \in \texttt{Closed} : \left\{
+ \begin{aligned}
+ &\text{initialized} &&\in\ \texttt{Initialized}, \\
+ &\text{attestedOutputs} &&\in\ \left[(y, \pi)\right]^{82}, \\
+ &\text{aggregatedOutput} &&\in\ (x, y, \pi), \\
+ &\eta_e &&\in\ \{0,1\}^{256}
+ \end{aligned}
+\right\}
+```
+
+- `UngracefullyClosed`: This is a terminal state in the stream lifecycle. It indicates that either not all expected attested outputs were provided, or the aggregated output could not be computed. As a result, $`{pre-}\eta_e`$ is returned as the final value of $`\eta_e`$. Statistically, this state is highly unlikely to occur, but it is explicitly handled for completeness and structural consistency of the state machine. The transition to this state is triggered by `Tick` in combination with the `isUngracefullyClosable` condition.
+
+```math
+\Phi.\text{Stream.State} \in \texttt{UngracefullyClosed} : \left\{
+ \begin{aligned}
+ &\text{initialized} &&\in\ \texttt{Initialized}, \\
+ &\text{attestedOutputs} &&\in\ \left[\texttt{Maybe}\ (y, \pi)\right]^{82} \\
+ &{pre-}\eta_e &&\in\ \{0,1\}^{256}
+ \end{aligned}
+\right\}
+```
+
+##### 3.2.6.2. The Successful Scenario: The `Close` Command
+
+At this stage, the system is in the `AwaitingGracefulClosure` state. All necessary data has been collected, and a block can now be produced within the remaining time before the end of the stream lifecycle (as previously discussed, this could occur at the 84th or 120th interval, depending on how smoothly the lifecycle progressed).
+
+In this scenario, the first block producer within the remaining intervals must include the following values in the block body:
+
+- $`(y, \pi)`$: The aggregated output of the $`\Phi`$ computation, representing the final result and its corresponding proof.
+- $`\eta_e`$: The final objective of the protocol—a 256-bit epoch randomness beacon, which will be used to seed leader election in the next epoch.
+
+These values complete the stream and trigger the transition to the `Closed` state.
+
+
+
+| `Close` | $`\Phi.\text{Stream.State} \leftarrow \Phi.\text{Close}((x, y, \pi),\ \text{awaitingGracefulClosureState})`$ |
+| -------------------- | ---- |
+| **Input Parameters** | - $`\text{awaitingGracefulClosureState} \in \texttt{AwaitingGracefulClosure}`$ — State indicating readiness for closure.
- $`(y,\ \pi)`$ — Aggregated output and its proof for the entire stream.
|
+| **Property Check** | - Verify the aggregated output with:
$`\texttt{VDF.Aggregation.Verify}((\mathbb{G},\ \Delta,\ \cdot),\ \lambda,\ x,\ y,\ \text{attestedOutputs},\ \pi)`$ - Where:
$`\lambda`$ is the security parameter,
$`x`$ is the aggregated input of the $`\Phi`$ computation
$`\text{attestedOutputs} = \text{awaitingGracefulClosureState.attestedOutputs}`$
|
+| **Epoch Randomness** | $`\eta_e = \text{Hash}^{(256)}(y)`$ — Apply the SHA-256 hash function to $`y`$. |
+| **Returned State** | $`\texttt{Closed} \{ \text{initialized},\ \text{attestedOutputs},\ (x, y, \pi),\ \eta_e \}`$ — Final state embedding the verified computation and the derived epoch randomness. |
+
+
+
+##### 3.2.6.3. `tick` Command
+
+The `tick` command handles time progression within the `AwaitingGracefulClosure` state:
+
+- **`isUngracefullyClosable`** is true when the stream reaches the end of its lifecycle segment (i.e., $`\texttt{currentSlot} + 1 \equiv 0 \pmod{T}`$) and some attested outputs are still missing. When this condition holds, the system transitions to the `UngracefullyClosed` state.
+
+- **Otherwise**, the command simply increments the `currentSlot` field to reflect time advancement.
+
+
+
+| `tick` | $`\Phi.\text{Stream.State} \leftarrow \Phi.\text{tick}(\text{awaitingGracefulClosureState})`$ |
+|--------------------|---------------------------------------------------------------------------------------------------|
+| **Input Parameters** | - $`\text{awaitingGracefulClosureState} \in \texttt{AwaitingMissingAttestedOutput}`$ — State indicating readiness for closure.
|
+| **Returned State** | $`\begin{cases} \text{When } \texttt{isUngracefullyClosable} :\ \texttt{UngracefullyClosed} \{.., {pre-}\eta_e = {initialized.}{pre-}\eta_e \} \\\\ \text{Otherwise} :\ \texttt{AwaitingGracefulClosure} \{\, \ldots,\, \texttt{currentSlot} + 1 \,\} \end{cases}`$ |
+
+
+
+`isUngracefullyClosable` indicates that the end of the lifecycle segment has been reached (i.e., `currentSlot++ == 0`), while some attested outputs are still missing. When this condition holds, the lifecycle is forcefully closed in an ungraceful manner. Otherwise we are just update the current slot field
+
+##### 3.2.6.4. The Failure Scenario: Ungraceful Closure
+
+If the protocol reaches the end of its lifecycle, or it becomes evident that too many consecutive blockless intervals have occurred—such that a valid $`\eta_e`$ can no longer be derived—the `Tick` signal triggers the `isUngracefullyClosable` condition. This causes a transition to the terminal state `UngracefullyClosed`, in which the precomputed value $`{pre-}\eta_e`$ is adopted as the official $`\eta_e`$.
+
+While this state is statistically unexpected, it is explicitly defined to ensure completeness and structural consistency within the state machine.
+
+### 4. Recommended Parameter values
+
+There are **two categories of parameters** in the Phalanx protocol that Cardano governance will need to oversee. The first category concerns the **VDF parameters**, which are essential to maintaining the protocol’s cryptographic security. The second concerns the **total time budget** $T_\Phi$ that will be required from SPOs during the **Computation Phase**.
+
+The goal of this section is to provide **recommended values** for these parameters along with the **rationale** behind their selection, so that governance is well-equipped to **adjust them over time** in response to advances in adversarial computational power.
+
+#### 4.1 VDF Security Parameters λ and ρ
+
+The VDF component in Phalanx relies on class group security, which is parameterized by two values:
+
+- $`\lambda`$, the **class group security parameter**, and
+- $`\rho`$, the **grinding resistance parameter**, newly introduced in the Phalanx design.
+
+Several combinations of $`\lambda`$ and $`\rho`$ are considered in the literature, depending on the desired level of paranoia or efficiency. Based on the recommendations from the paper [Trustless Unknown-Order Groups]((https://arxiv.org/pdf/2211.16128)), we highlight the following trade-offs:
+
+- A **paranoid** setting, $(\lambda, \rho) = (128, 128)$, requires a **group size of \~3400 bits**.
+- A more **realistic yet cautious** setting, $(\lambda, \rho) = (128, 55)$, brings the group size down to **\~1900 bits**, but requires discriminants of at least **3800 bits**.
+- Based on those benchmarks and our needs, we opt for $(\lambda, \rho) = (128, 64)$, which corresponds to:
+
+ - a **discriminant size of 4096 bits**,
+ - and a **group size of 2048 bits**.
+
+This strikes a balance between long-term security and practical efficiency:
+
+- On one hand, **breaking the class group** is considered harder than **finding a collision in a 256-bit hash** (our minimum security baseline).
+- On the other hand, by following the paper’s recommendation and selecting a slightly lower $`\rho = 64`$, we can **reduce the size of on-chain group elements** while maintaining sufficient resistance against grinding.
+
+Since Phalanx is designed to operate with a **single class group instance “for the lifetime of the protocol”** (reparametrization would require explicit governance intervention), this configuration $(\lambda, \rho) = (128, 64)$ ensures protocol simplicity, consistency, and operational predictability.
+
+#### 4.2 Time Budget Tᵩ and Derived T
+
+In terms of efficiency, the section [**1. How Phalanx Addresses CPS-21 – Ouroboros Randomness Manipulation**](#1-how-phalanx-addresses-cps-21---ouroboros-randomness-manipulation) in the *Rationale* part of this document illustrates, through three scenarios $`\text{Phalanx}_{1/10}`$, $`\text{Phalanx}_{1/100}`$, and $`\text{Phalanx}_{\text{max}}`$, how different time budgets (2 hours, 12 hours, and 5 days, respectively) improve the protocol’s security guarantees against grinding attacks.
+
+In terms of computational load, we recommend setting the time budget at a **midpoint between minimal and maximal protocol capacity**, corresponding to approximately **12 hours** of execution on typical, CPU-based hardware as recommended for SPOs. However, this choice should ultimately be guided by **settlement time performance requirements** across the ecosystem, including the needs of **partner chains and other dependent components**.
+
+##### 4.2.1 Specialized ASIC vs CPU-Based Chips
+
+We need to account for the possibility that adversaries may equip themselves with specialized ASIC chips optimized for computing Wesolowski’s Verifiable Delay Function (VDF). The Chia team has already developed and deployed such **ASIC Timelords**, which demonstrate between **3× and 5× performance improvements** compared to standard CPU-based implementations. These ASICs reach up to **1,000,000 iterations per second**, while commodity CPU Timelords typically max out around **260,000 IPS** ([Chia Network, Oct 2023](https://www.chia.net/2023/10/26/were-going-to-ludicrous-speed)).
+
+To mitigate this performance asymmetry, our initial strategy is to require a **12-hour equivalent workload on standard CPU hardware** (as in $`\text{Phalanx}_{1/10}`$), which is calibrated to provide the **same security guarantees** as a less aggressive configuration like $`\text{Phalanx}_{1/100}`$. This gives us a conservative baseline for security, assuming an adversary might leverage ASIC acceleration.
+
+Critically, scaling this kind of grinding capability is expensive. For an adversary to mount an effective grinding attack, they would need to build and operate a farm of VDF-optimized ASICs — a non-trivial financial and operational challenge. Chia’s rollout of these units has been tightly controlled and aimed at ensuring global distribution, not centralization ([Chia Global Expansion Update, June 2024](https://www.chia.net/2024/06/10/global-expansion-of-chia-network-security-with-successful-asic-timelord-rollout)).
+
+**Mid-term**, we propose encouraging — or potentially requiring — stake pool operators (SPOs) to adopt VDF ASIC hardware. This would ensure that honest participants remain competitive and are not systematically outperformed by well-resourced adversaries.
+
+**Long-term**, our strategy involves standardizing the use of verifiable delay ASICs across the network, or alternatively, establishing a dynamic calibration process. This would allow iteration requirements to be periodically adjusted based on the evolving performance gap between commodity and specialized hardware, maintaining consistent and predictable security guarantees.
+
+In summary, while ASIC-equipped adversaries could, in theory, gain a computational advantage during the grinding window, the cost and scale required to pose a real threat remains high. Our mitigation strategy is to raise the honest baseline to neutralize this advantage and prepare for possible hardware evolution over time.
+
+##### 4.2.1 Deriving from Tᵩ to T
+
+We recommend a **12-hour computation budget** on standard **CPU-based machines**, which we estimate to be **10× slower** than specialized ASICs available to adversaries. This configuration corresponds to **Phalanx1/10** in terms of **time budget**, while achieving **Phalanx1/100** in terms of **security guarantees** against grinding attacks.
+
+However, this **time budget** ($T\_\Phi$) is a high-level abstraction. To implement it concretely, we must derive the **number of VDF iterations** ($T$) required for each **first block of an interval**. Assuming 82 intervals per epoch, this translates to:
+
+```math
+T = \frac{T_\Phi}{82} = \frac{12 \text{ hours} \times 3600 \text{ seconds/hour}}{82} \approx 527 \text{ seconds}
+```
+
+So, we ask for approximately **10 minutes of VDF computation** per published interval block on standard CPU-based hardware.
+
+To translate this into a concrete number of **VDF iterations** ($T$), we rely on performance benchmarks from the implementation available in the repository [rrtoledo/chiavdf](https://github.com/rrtoledo/chiavdf). This library is a **highly optimized and production-hardened** implementation of Wesolowski's VDF, currently in use by the **Chia blockchain**. We have made minor, superficial modifications to this codebase solely to facilitate benchmarking and increase the discriminant size.
+
+Thanks to its well-established performance profile, this implementation provides a dependable baseline for estimating how many iterations can be executed within a fixed time frame on standard CPU hardware. Under our test environment—an Ubuntu machine equipped with an **Intel® Core™ i9-14900HX (32 cores, 64 GiB RAM)**—we observed approximately **27 million iterations** in a 10-minute window.
+
+**Note** : We recommend that this benchmark be re-run on a **dedicated, representative SPO machine** to calibrate a more accurate production value for $T$.
+
+### 5. Efficiency analysis
+
+#### 5.1 Block Publication
+
+To publish a block, a node must:
+
+* Perform $T$ squarings to compute the output,
+* Execute $O(T / \log(T))$ operations for the proof generation.
+
+We now show benchmarks for evaluating and proving together VDFs, as well as individually, for different discriminant sizes done on a Ubuntu computer with Intel® Core™ i9-14900HX with 32 cores and 64.0 GiB RAM. For a 4,096 bit long discriminant, we perform around 45,000 iterations per second, and so evaluate and prove a VDF in 22.6s.
+
+
+
+| Size Discriminant | #iterations | IPS | Evaluate and Prove (s) | σ proving | Eval (s) | σ proving | Prove (s) | σ proving |
+|-------------------- | ------------- | -------- | ------------------------- | ----------- | -------------- | ----------- | -------------- | ----------- |
+| 256 | 10,000 | 637252 | 0.0187 | 0.000676 | 1.57E-02 (84%) | 0.000563 | 8.00E-03 (43%) | 0.000461 |
+| 256 | 100,000 | 641349 | 0.172 | 0.00115 | 1.56E-01 (91%) | 0.00188 | 5.68E-02 (33%) | 0.00165 |
+| 256 | 1,000,000 | 627336 | 1.72 | 0.0215 | 1.59E+00 (93%) | 0.0197 | 4.88E-01 (29%) | 0.00633 |
+| 512 | 10,000 | 367449 | 0.0322 | 0.000635 | 2.72E-02 (85%) | 0.000648 | 1.31E-02 (41%) | 0.000204 |
+| 512 | 100,000 | 378942 | 0.289 | 0.0029 | 2.64E-01 (92%) | 0.00283 | 8.76E-02 (31%) | 0.000893 |
+| 512 | 1,000,000 | 378204 | 2.83 | 0.0287 | 2.64E+00 (94%) | 0.0279 | 7.29E-01 (26%) | 0.00873 |
+| 1024 | 10,000 | 206186 | 0.0537 | 0.000902 | 4.85E-02 (91%) | 0.00076 | 2.00E-02 (38%) | 0.000364 |
+| 1024 | 100,000 | 211921 | 0.503 | 0.00722 | 4.72E-01 (94%) | 0.00721 | 1.45E-01 (29%) | 0.00198 |
+| 1024 | 1,000,000 | 213319 | 4.92 | 0.0506 | 4.69E+00 (96%) | 0.0475 | 1.20E+00 (25%) | 0.0136 |
+| 2048 | 10,000 | 103135 | 0.105 | 0.000285 | 9.70E-02 (92%) | 0.000303 | 3.77E-02 (36%) | 0.000122 |
+| 2048 | 100,000 | 105315 | 1.01 | 0.0165 | 9.50E-01 (94%) | 0.0123 | 2.78E-01 (28%) | 0.00516 |
+| 2048 | 1,000,000 | 107038 | 9.75 | 0.0746 | 9.34E+00 (96%) | 0.0828 | 2.20E+00 (23%) | 0.0209 |
+| 4096 | 10,000 | 44567.8 | 0.244 | 0.00463 | 2.24E-01 (92%) | 0.00454 | 8.30E-02 (35%) | 0.00168 |
+| 4096 | 100,000 | 45848.6 | 2.31 | 0.0253 | 2.18E+00 (95%) | 0.0229 | 6.00E-01 (26%) | 0.0089 |
+| 4096 | 1,000,000 | 46293.2 | 22.6 | 0.16 | 2.16E+01 (96%) | 0.148 | 4.79E+00 (22%) | 0.0422 |
+
+
+
+#### 5.2 Block Verification
+
+##### 5.2.1 When Not Syncing
+
+To verify a VDF proof, a node performs:
+
+* 2 hashes,
+* 4 small exponentiations,
+* 3 group multiplications.
+
+Over an epoch with $N$ intervals, this results in:
+* $2 \cdot N$ hashes,
+* $4 \cdot N$ small exponentiations,
+* $3 \cdot N$ group multiplications.
+
+
+We now show verification benchmarks for discriminants of different sizes done on the same machine as before. For a 4,096 bit long discriminant, the verification takes around 15ms.
+
+
+
+| Size Discriminant | #iterations | Verification (ms) | σ verification |
+|-------------------- | ------------- | ------------------- | ---------------- |
+| 256 | 10,000 | 1.74E+00 (10%) | 0.0786 |
+| 256 | 100,000 | 1.12E+00 (1%) | 0.0471 |
+| 256 | 1,000,000 | 1.75E+00 (1%) | 0.151 |
+| 512 | 10,000 | 3.25E+00 (11%) | 0.0562 |
+| 512 | 100,000 | 1.89E+00 (1%) | 0.0268 |
+| 512 | 1,000,000 | 2.11E+00 (1%) | 0.134 |
+| 1024 | 10,000 | 3.66E+00 (7%) | 0.117 |
+| 1024 | 100,000 | 3.21E+00 (1%) | 0.0467 |
+| 1024 | 1,000,000 | 3.20E+00 (1%) | 0.135 |
+| 2048 | 10,000 | 7.00E+00 (7%) | 0.0409 |
+| 2048 | 100,000 | 9.33E+00 (1%) | 0.147 |
+| 2048 | 1,000,000 | 6.40E+00 (1%) | 0.218 |
+| 4096 | 10,000 | 1.58E+01 (7%) | 0.316 |
+| 4096 | 100,000 | 1.47E+01 (1%) | 0.248 |
+| 4096 | 1,000,000 | 1.37E+01 (1%) | 0.303 |
+
+
+
+##### 5.2.2 When Syncing
+
+When synching, the nodes only need to update the accumulators and verify the final aggregation proof. As such, the node perform in total arounf half as less operations than verifying all proofs individually. More particularly, we have:
+* $2 \cdot N$ hashes,
+* $2 \cdot (N + 1)$ small exponentiations.
+* $2 \cdot N + 1$ group multiplications,
+
+Note: The exponentiations involving the $\alpha_i$ values are **half as expensive** as those in the full proof verification.
+
+For a discriminant of 4096 bits, we benchmarks the aggregation functions on the same machine as before. We can see that updating the accumulators in the aggregation indeed takes half time as much as verifying a single VDF proof, and verifying the aggregation is as cheap as a normal VDF proof and that proving the aggregation is more expensive than a VDF output, this is due to the absence of intermediary value found when evaluating the VDF input, but less expensive than evaluating a VDF.
+
+
+
+| Size Discriminant | #iterations | $`\texttt{VDF.Aggregation.Update}`$ (ms)| $`\texttt{VDF.Aggregation.Prove}`$ (s)| $`\texttt{VDF.Aggregation.Verify}`$ (ms)|
+| ----------------- | ----------- | --------------------------------------- | -------------------------------------- | --------------------------------------- |
+| $4096$ | 1,000 | 8.0E+00 | 2.3E-03 | 1.7E+01 |
+| $4096$ | 10,000 | 8.0E+00 | 3.0E-02 | 1.7E+01 |
+| $4096$ | 100,000 | 8.0E+00 | 3.0E+00 | 1.7E+01 |
+| $4096$ | 1,000,000 | 8.0E+00 | 3.1E+01 | 1.7E+01 |
+
+
+
+### 6. CDDL Schema for the Ledger
+
+To support Phalanx, **one block per interval** (every 3600 slots), across **83 intervals per epoch**, must include **2 group elements**. Each of these elements can be compressed to approximately $3/4 \cdot \log_2(|\Delta|)$ bits. Based on our recommended discriminant size of **4096 bits**:
+
+* **3,104 bits (388 bytes)** per element (the benchmarked library adds 4 bytes to each element),
+* **6,208 bits (776 bytes)** per block (2 elements),
+* **515,264 bits (64,408 bytes ≈ 64.4 KB)** per epoch (83 blocks).
+
+Phalanx requires a single addition to the block body structure in the ledger: the field `phalanx_challenge`.
+
+```diff
+ block =
+ [ header
+ , transaction_bodies : [* transaction_body]
+ , transaction_witness_sets : [* transaction_witness_set]
+ , auxiliary_data_set : {* transaction_index => auxiliary_data }
+ , invalid_transactions : [* transaction_index ]
++ , ? phalanx_challenge : vdf_attested_output
+ ]
+```
+
+The structure `phalanx_challenge` is defined as follows:
+
+```cddl
+vdf_attested_output =
+ [ output : vdf_size
+ , proof : vdf_size
+ ]
+
+vdf_size = [ bytes, bytes .size 388 ]
+```
+
+We initially evaluated including the `phalanx_challenge` (i.e., the VDF attested output) in the **block header** (instead as proposed in the **block body**) colocated with the VRF outputs. However, this approach raised concerns due to **header size constraints**.
+
+The current **maximum block header size** in Cardano is **1100 bytes**, although actual usage today averages around **860 bytes**. Since TCP packet limits suggest keeping headers under **1500 bytes** (1,460 without headers), the available headroom is approximately **600 bytes**. The full `vdf_attested_output` in its default form requires:
+
+- **388 bytes** per group element (assuming the lowest acceptable security parameters)
+- 2 group elements (output + proof)
+- Total: **776 bytes**
+
+This would **exceed the 1500-bytes limit**, risking fragmentation and violating guidance from the Cardano networking team. We could safely decrease the group element size by decreasing the security parameters if we were to generate new class groups at each epoch. Doing so would however render the protocol more complex and potentially weaken the security of the protocol as we may have more chances to generate a weak class group.
+
+## Rationale: How does this CIP achieve its goals?
+
+### 1. How Phalanx Addresses CPS-21 - Ouroboros Randomness Manipulation?
+
+#### 1.1 Problem Overview
+
+[CPS-0021 / Ouroboros Randomness Manipulation](https://github.com/cardano-foundation/CIPs/tree/master/CPS-0021) examines the *Randomness Generation Sub-Protocol* within *Ouroboros Praos* ⚙️, highlighting its vulnerabilities and their implications for *Cardano’s* **security** 🔒. Key insights include:
+
+- **Randomness Vulnerability**: *Ouroboros Praos* employs **VRFs** for randomness generation, but this approach is susceptible to *grinding attacks*, where adversaries manipulate outcomes to influence **leader election**, threatening Cardano’s **fairness** ⚖️ and **integrity**.
+- **Attack Likelihood**: Attacks become significantly more feasible when an adversary controls **over 20% of the total stake** (approximately **4.36 billion ADA**, as of March 2025), while smaller stakes (e.g., **5%**) make such attempts highly unlikely over extended periods.
+- **Economic Barrier**: Gaining enough stake to execute an attack requires a **substantial investment** 💰—billions of USD for a **20% share**—posing a financial risk, as a successful attack could devalue the asset and undermine network trust.
+- **Computational Feasibility**: The feasibility of attacks varies widely based on the computational resources an adversary can deploy, becoming progressively more accessible as stake accumulates:
+ - Small-scale attacks, costing as little as ~**$56**, are easily achievable with minimal resources, such as a standard computer, making them a low-barrier threat that even individual actors could attempt.
+ - Large-scale attacks, costing up to ~**$3.1 billion**, require extensive computational infrastructure, such as large data centers with millions of CPUs or ASICs, placing them in a range from feasible for well-funded entities (e.g., corporations or nation-states) to nearly impractical for most adversaries due to the immense resource demands.
+ - The intensity of these attacks scales with stake: the more stake an adversary holds, the greater their influence over **leader election**, amplifying their ability to manipulate randomness. In a simplistic view, this can be likened to manipulating a $256$-bits nonce—a value $\rho$ ranging from $0$ to $256$— where higher stake progressively grants more control, potentially allowing full manipulation of the nonce at the upper limit.
+ - The wide cost disparity reflects how the complexity of the attack—such as the scope of the targeted time window and the depth of evaluation—drastically increases resource needs, acting as a natural deterrent for more ambitious manipulations.
+
+To illustrate the **Computational Feasibility**, the graph below (sourced from the **CPD**, Section [**3. The Cost of Grinding: Adversarial Effort and Feasibility**](./CPD/README.md#3-the-cost-of-grinding-adversarial-effort-and-feasibility)) maps attack feasibility across four scenarios—**Ant Glance**, **Ant Patrol**, **Owl Stare**, and **Owl Survey**—based on the nonce value $\rho$ (0 to 256 bits). Each scenario reflects different attack complexities, with feasibility shifting as computational and economic demands grow:
+
+
+

+
+
+The table below delineates the **$\rho$ values** at which each scenario transitions across feasibility categories, illustrating the computational and economic thresholds:
+
+
+
+| **Feasibility Category** | **🔵 Ant Glance** | **🟠 Ant Patrol** | **🟢 Owl Stare** | **🔴 Owl Survey** |
+|--------------------------------------------|---------------------|---------------------|--------------------|--------------------|
+| **🟢 🌱 Trivial for Any Adversary** | $0 \to 53.6$ | $0 \to 32.9$ | $0 \to 31.6$ | $0 \to 31.1$ |
+| **🟡 💰 Feasible with Standard Resources** | $53.6 \to 60$ | $32.9 \to 39.5$ | $31.6 \to 38.3$ | $31.1 \to 37.8$ |
+| **🟠 🏭 Large-Scale Infrastructure Required** | $60 \to 69.7$ | $39.5 \to 49.5$ | $38.2 \to 48.2$ | $37.8 \to 47.7$ |
+| **🔴 🚫 Borderline Infeasible** | $69.7 \to 79.4$ | $49.5 \to 59.5$ | $48.2 \to 58.2$ | $47.7 \to 57.7$ |
+| **🔴 🚫 Infeasible** | $79.4 \to 256$ | $59.5 \to 256$ | $58.2 \to 256$ | $57.7 \to 256$ |
+
+
+
+**Context**: The scenarios represent increasing attack sophistication (e.g., *Ant Glance* is a quick, low-effort attack; *Owl Survey* is a comprehensive, resource-intensive one). As $\rho$ increases, so does the difficulty, shifting feasibility from trivial (e.g., a lone actor with a laptop) to infeasible (e.g., requiring nation-state-level resources).
+
+These thresholds reveal critical vulnerabilities in Cardano’s current consensus design. **Phalanx** aims to mitigate these risks. In the following section, we revisit the core computational model, introduce the proposed enhancements, and quantify how they shift the feasibility landscape in favor of security.
+
+#### 1.2 Phalanx Cost Amplification per Grinding Attempt
+
+In **Phalanx**, we introduce an additional parameter and **computational cost**, denoted $T_\Phi$, for each **grinding attempt**. This cost represents the total cumulative effort required to compute $i$ iterations of the $\Phi$ primitive. This additional cost directly impacts the total estimated **time per grinding attempt**, as originally defined in [CPD Section 3.3.4 - Total Estimated Time per Grinding Attempt](https://github.com/cardano-foundation/CIPs/tree/master/CPS-0021/CPD/README.md#334-total-estimated-time-per-grinding-attempt). The baseline grinding time in **Praos** is:
+
+```math
+T_{\text{grinding}}^{\text{Praos}} = \frac{\rho}{2} T_{\text{BLAKE2b}} + w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}}
+```
+
+With **Phalanx**, the total grinding time per attempt is updated to include $T_\Phi$:
+
+```math
+T_{\text{grinding}}^{\text{Phalanx}} = \frac{\rho}{2} T_{\text{BLAKE2b}} + w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}} + T_\Phi
+```
+Where:
+- $T_{\mathsf{VRF}}$ is the **VRF evaluation time**,
+- $T_{\text{eligibility}}$ is the **eligibility check time**,
+- $T_{\text{BLAKE2b}}$ is the time for the **hashing operation**,
+- $w_T$ is the **target window size** (seconds),
+- $\rho$ is the **grinding depth**,
+- $T_{\text{eval}}$ is the **nonce selection and evaluation time** (**attack-specific**).
+- $T_\Phi$ is the additional computational cost of **Phalanx**
+
+
+The introduction of $T_\Phi$ substantially increases the **computational burden** for adversaries, as they must **recompute** the $\Phi^i$ function for each of the $2^\rho$ possible **nonces** evaluated during a grinding attack. In contrast, for **honest participants**, this computation is **distributed** across the epoch, ensuring it remains **manageable and efficient**.
+
+
+#### 1.3 Phalanx Cost Amplification per Grinding Attack
+
+Building on the updated **grinding time formula** introduced in the previous section, which incorporates the additional **computational cost** $T_\Phi$, we can now revise the formula for a grinding attack from [CPD Section 3.4.1 - Formula](https://github.com/cardano-foundation/CIPs/tree/master/CPS-0021/CPS/CPD/README.md#341-formula), where we defined a total attack time that must fit within the **grinding opportunity window** $w_O$:
+
+```math
+\frac{2^{\rho} \cdot T_{\text{grinding}}^{\text{Phalanx}}}{N_{\text{CPU}}} \leq w_O
+```
+which leads to the lower bound on computational power ($N_\text{CPU}$) :
+
+```math
+N_{\text{CPU}} \geq \left \lceil \frac{2^{\rho} \cdot T_{\text{grinding}}^{\text{Phalanx}}}{w_O} \right \rceil
+```
+
+##### 1.3.1 Formula
+
+
+
+Expanding $T_{\text{grinding}}^{\text{Phalanx}}$
+
+
+
+From **Section 1.1**, the per-attempt grinding time under **Phalanx** is:
+
+```math
+T_{\text{grinding}}^{\text{Phalanx}} = \frac{\rho}{2} T_{\text{BLAKE2b}} + w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}} + T_{\Phi}
+```
+
+Substituting this into the inequality:
+
+```math
+N_{\text{CPU}} \geq \left \lceil \frac{2^{\rho} \cdot \left( \frac{\rho}{2} T_{\text{BLAKE2b}} + w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}} + T_{\Phi} \right)}{w_O} \right \rceil
+```
+
+
+
+Expanding $w_O$ in Terms of $\rho$ and $f$
+
+
+
+
+The grinding opportunity window is:
+
+```math
+\frac{X_A(w)}{f} \leq w_O \leq \frac{w}{f}
+```
+
+Assuming worst-case upper bound $w_O = \frac{w}{f}$ and noting $w < 2 \cdot \rho - 1$, we substitute:
+
+```math
+N_{\text{CPU}} \geq \left \lceil f \cdot \frac{2^{\rho} \cdot \left( \frac{\rho}{2} T_{\text{BLAKE2b}} + w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}} + T_{\Phi} \right)}{w} \right \rceil
+```
+
+Bounding $w < 2 \cdot \rho - 1$:
+
+```math
+N_{\text{CPU}} \geq \left \lceil f \cdot \frac{2^{\rho} \cdot \left( \frac{\rho}{2} T_{\text{BLAKE2b}} + w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}} + T_{\Phi} \right)}{2 \cdot \rho - 1} \right \rceil
+```
+
+Rewriting:
+
+```math
+N_{\text{CPU}} \geq \left \lceil f \cdot 2^{\rho} \cdot \left( \frac{\frac{\rho}{2} T_{\text{BLAKE2b}}}{2 \cdot \rho - 1} + \frac{w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} )}{2 \cdot \rho - 1} + \frac{T_{\text{eval}}}{2 \cdot \rho - 1} + \frac{T_{\Phi}}{2 \cdot \rho - 1} \right) \right \rceil
+```
+
+Approximating $2 \cdot \rho - 1 \approx 2 \rho$:
+
+```math
+N_{\text{CPU}} > \left \lceil \frac{f}{2 \rho} \cdot 2^{\rho} \cdot \left( \rho T_{\text{BLAKE2b}} + 2 w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + 2 T_{\text{eval}} + 2 T_{\Phi} \right) \right \rceil
+```
+
+Simplified:
+
+```math
+N_{\text{CPU}} > \left \lceil f \cdot 2^{\rho - 2} \cdot T_{\text{BLAKE2b}} + \frac{f \cdot 2^{\rho}}{2 \rho} \cdot \left( w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}} + T_{\Phi} \right) \right \rceil
+```
+
+Or grouped as:
+
+```math
+N_{\text{CPU}} > \left \lceil f \cdot 2^{\rho - 2} \cdot T_{\text{BLAKE2b}} + \frac{f}{\rho} \cdot 2^{\rho - 1} \cdot \left( w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}} + T_{\Phi} \right) \right \rceil
+```
+
+##### 1.3.2 Estimated Formula Using Mainnet Cardano Parameters
+
+Starting from the final expression at the end of the last section:
+
+```math
+N_{\text{CPU}} > \left \lceil f \cdot 2^{\rho-2} \cdot T_{\text{BLAKE2b}} + \frac{f}{\rho} \cdot 2^{\rho-1} \cdot \left( w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}} + T_{\Phi} \right) \right \rceil
+```
+
+Applying Cardano Mainnet Parameters
+
+
+Using Cardano’s mainnet values:
+
+* $T_{\mathsf{VRF}} = 10^{-6}$ seconds (1 microsecond) – Time to evaluate a Verifiable Random Function.
+* $T_{\text{BLAKE2b}} = 10^{-8}$ seconds (0.01 microseconds) – Time for a BLAKE2b-256 hash operation.
+* $f = \frac{1}{20} = 0.05$ – Active slot coefficient.
+* $k = 2160$
+* Slot duration = 1 second.
+
+Since the eligibility check is negligible, set \$T\_{\text{eligibility}} \approx 0\$:
+
+Substitute into the expression:
+
+* First term:
+
+ ```math
+ f \cdot 2^{\rho-2} \cdot T_{\text{BLAKE2b}} = 0.05 \cdot 2^{\rho-2} \cdot 10^{-8} = 5 \cdot 10^{-10} \cdot 2^{\rho-2}
+ ```
+
+* Second term:
+
+ ```math
+ \frac{f}{\rho} \cdot 2^{\rho-1} \cdot \left( w_T \cdot 10^{-6} + T_{\text{eval}} + T_{\Phi} \right)
+ = \frac{0.05 \cdot 2^{\rho-1}}{\rho} \cdot \left( 10^{-6} w_T + T_{\text{eval}} + T_{\Phi} \right)
+ ```
+
+The estimated number of CPUs required is:
+
+```math
+N_{\text{CPU}} > \left \lceil
+5 \cdot 10^{-10} \cdot 2^{\rho - 2} +
+\frac{5 \cdot 10^{-8} \cdot 2^{\rho - 1}}{\rho} \cdot w_T +
+\frac{5 \cdot 10^{-2} \cdot 2^{\rho - 1}}{\rho} \cdot T_{\text{eval}} +
+\frac{5 \cdot 10^{-2} \cdot 2^{\rho - 1}}{\rho} \cdot T_{\Phi}
+\right \rceil
+```
+
+##### 1.3.3 Impact of Tᵩ on Canonical Scenarios
+
+Now that we have an updated formula, we can evaluate how **Phalanx** directly affects the cost of grinding attempts when compared to the original CPD scenarios. As previously discussed, the goal is to strike a balance between the effort expected from honest **SPOs** during an epoch and the computational burden imposed on an adversary attempting to evaluate multiple $`\eta_e`$ candidates in preparation for an attack.
+
+To anchor this analysis, we introduce a baseline configuration denoted as $`\text{Phalanx}_\text{1/100}`$: an overhead equal to **1/100 of an epoch**, corresponding to $432{,}000 \div 100 = 4{,}320$ slots. This represents a **modest but meaningful choice** — substantial enough to raise the adversary’s cost significantly, yet conservative enough to avoid overloading honest participants. In contrast, imposing a full-epoch overhead would likely be excessive in practice, potentially destabilizing the protocol or placing undue demands on block producers. We may refer to that upper bound as $`\text{Phalanx}_{\text{max}}`$, and the present section aims to explore and recommend a viable configuration somewhere between this maximum and our conservative baseline.
+
+Since each slot lasts 1 second, the $`\text{Phalanx}_\text{1/100}`$ overhead equates to **4,320 seconds**, or exactly **1 hour and 12 minutes**.
+
+We now revisit the canonical scenarios from [CPD Section 3.5 – Scenarios](https://github.com/input-output-hk/ouroboros-anti-grinding-design/blob/main/CPS/Readme.md#35-scenarios), and extend each one with a **Phalanx-enhanced variant** that incorporates this fixed computational cost: $`T_{\Phi} = 4320 \, \text{seconds}`$. The resulting **$N_{\text{CPU}}$ formulas** are derived by substituting each scenario’s respective values for $`w_T`$ and $`T_{\text{eval}}`$ into the base expression from **Section 1.2.2**, now augmented with the constant Phalanx term $`T_{\Phi}`$.
+
+```math
+N_{\text{CPU}} > \left \lceil
+5 \cdot 10^{-10} \cdot 2^{\rho - 2} +
+\frac{5 \cdot 10^{-8} \cdot 2^{\rho - 1}}{\rho} \cdot w_T +
+\frac{5 \cdot 10^{-2} \cdot 2^{\rho - 1}}{\rho} \cdot T_{\text{eval}} +
+\frac{216 \cdot 2^{\rho - 1}}{\rho}
+\right \rceil \quad \text{(Phalanx}_\text{1/100}\text{)}
+```
+
+```math
+N_{\text{CPU}} > \left \lceil
+5 \cdot 10^{-10} \cdot 2^{\rho - 2} +
+\frac{5 \cdot 10^{-8} \cdot 2^{\rho - 1}}{\rho} \cdot w_T +
+\frac{5 \cdot 10^{-2} \cdot 2^{\rho - 1}}{\rho} \cdot T_{\text{eval}}
+\right \rceil \quad \text{(Praos)}
+```
+
+The table below summarizes the expressions for each scenario:
+
+
+
+| **Scenario** | $\text{Praos}$ | $\text{Phalanx}_\text{1/100}$ |
+|------------------------|---------------|--------------------|
+| **Ant Glance** | $5 \cdot 10^{-10} \cdot 2^{\rho-2}$ | $5 \cdot 10^{-10} \cdot 2^{\rho-2} + 216 \cdot \frac{2^{\rho-1}}{\rho}$|
+| **Ant Patrol** | $5 \cdot 10^{-10} \cdot 2^{\rho-2} + 2.16 \cdot 10^{-2} \cdot \frac{2^{\rho-1}}{\rho}$ |$5 \cdot 10^{-10} \cdot 2^{\rho-2} + 2.16 \cdot 10^{-2} \cdot \frac{2^{\rho-1}}{\rho} + 216 \cdot \frac{2^{\rho-1}}{\rho}$|
+| **Owl Stare** | $5 \cdot 10^{-10} \cdot 2^{\rho-2} + 5 \cdot 10^{-2} \cdot \frac{2^{\rho-1}}{\rho}$ | $5 \cdot 10^{-10} \cdot 2^{\rho-2} + 5 \cdot 10^{-2} \cdot \frac{2^{\rho-1}}{\rho} + 216 \cdot \frac{2^{\rho-1}}{\rho}$ |
+| **Owl Survey** | $5 \cdot 10^{-10} \cdot 2^{\rho-2} + 7.16 \cdot 10^{-2} \cdot \frac{2^{\rho-1}}{\rho}$ | $5 \cdot 10^{-10} \cdot 2^{\rho-2} + 7.16 \cdot 10^{-2} \cdot \frac{2^{\rho-1}}{\rho} + 216 \cdot \frac{2^{\rho-1}}{\rho}$ |
+
+
+
+The **graph below** presents the **logarithmic cost** (in **USD**) of executing **grinding attacks** as a function of the **grinding depth** ($`\rho`$), across both **Praos** and **$\text{Phalanx}_{1/100}$** scenarios.
+
+* **Solid lines** correspond to the original **Praos configurations** (*Ant Glance*, *Ant Patrol*, *Owl Stare*, and *Owl Survey*).
+* **Dashed lines** represent the respective **$\text{Phalanx}_\text{1/100}$ variants**, each incorporating a fixed additional computational overhead of $`T_{\Phi} = 4320 \, \text{seconds}`$.
+* The **shaded feasibility regions** reflect increasing **economic difficulty levels**, based on thresholds defined in [**CPD Section 3.6 – Grinding Power Computational Feasibility**](https://github.com/input-output-hk/ouroboros-anti-grinding-design/blob/main/CPS/Readme.md#36-grinding-power-computational-feasibility).
+
+
+
+

+
+
+✏️ **Note**: The Python script used to generate this graph is available here ➡️ [**scenario\_cost\_praos\_vs\_phalanx.py**](./graph/scenario_cost_praos_vs_phalanx.py)
+
+
+ Interpretation of the Graph
+
+
+The graph highlights how the **$\text{Phalanx}_\text{1/100}$ protocol** dramatically increases the **cost of grinding attacks** compared to **Praos**, using a logarithmic scale to represent costs in **USD** as a function of the grinding depth $`\rho`$:
+
+1. **Consistent Cost Increase Across All $\rho$ Values**
+ The differences (deltas) between **$\text{Phalanx}_\text{1/100}$** and **Praos** scenarios remain stable across all grinding depths due to the logarithmic scale. This allows us to make generalizable observations regardless of $\rho$.
+
+2. **Moderate Gap Between Scenarios Within $\text{Phalanx}_\text{1/100}$**
+ Variations between different **$\text{Phalanx}_\text{1/100}$** scenarios (e.g., Ant Glance vs Owl Survey) are relatively modest. For example:
+ - At $`\rho = 100`$, the cost difference between **Owl Survey ($\text{Phalanx}_\text{1/100}$)** and **Owl Survey (Praos)** is about **3.5** orders of magnitude in $`\log_{10}(\text{Cost})`$.
+
+3. **Significant Overhead Introduced by $\text{Phalanx}_\text{1/100}$**
+ The **computational burden** imposed by Phalanx is substantial.
+ - At $`\rho = 150`$, the cost delta between **Owl Survey ($\text{Phalanx}_\text{1/100}$)** and **Ant Glance (Praos)** reaches nearly **9.8**, representing a **10⁹.⁸×** increase in expected cost for the attacker.
+ - This effectively pushes grinding attacks into the **"infeasible" zone** for a wide range of strategies.
+
+4. **Strategic Uniformity Under $\text{Phalanx}_\text{1/100}$**
+ All **$\text{Phalanx}_\text{1/100}$** scenario curves tightly cluster together, showing minimal divergence across evaluation complexity ($T_{\text{eval}}$) and observation scope ($w_T$).
+ - This implies that **Phalanx equalizes grinding costs** across adversarial strategies.
+ - Practically, this means defenders (e.g., protocol designers) can reason about attack feasibility without considering specific adversarial tactics. One cost curve is sufficient.
+
+We can now **simplify and generalize** the grinding cost formulas for different **Phalanx configurations**, along with their **estimated order-of-magnitude improvements** over Praos:
+
+
+
+| **Configuration** | **Time Budget** | **Grinding Cost Formula** | **Cost Amplification** |
+| ------------------------------- | --------------- | ------------------------------------------------------- | -------------------------- |
+| $`\text{Phalanx}_{1/100}`$ | 2 hours | $`\frac{2.16 \cdot 10^{2} \cdot 2^{\rho - 1}}{\rho}`$ | $\boldsymbol{10^{10.2}}$× |
+| $`\text{Phalanx}_{1/10}`$ | 12 hours | $`\frac{2.16 \cdot 10^{3} \cdot 2^{\rho - 1}}{\rho}`$ | $\boldsymbol{10^{11.2}}$× |
+| $`\text{Phalanx}_{\text{max}}`$ | 5 days | $`\frac{2.16 \cdot 10^{4} \cdot 2^{\rho - 1}}{\rho}`$ | $\boldsymbol{10^{12.2}}$× |
+
+
+
+
+**N.B.** We can note that even with the use of ASICs, with a speed up of 3x to 10x, Phalanx would still add a significant term and reduce the cost amplification to still acceptable levels.
+
+
+

+
+
+✏️ **Note**: The Python script used to generate this graph is available here ➡️ [**scenario\_cost\_praos\_vs\_phalanx-full-scenarios.py**](./graph/scenario_cost_praos_vs_phalanx-full-scenarios.py).
+
+These results confirm that even the **minimal configuration** ($`\text{Phalanx}_{1/100}`$) yields a **$10^{10.6}$-fold increase** in the computational cost of a grinding attack — a formidable barrier for adversaries. More aggressive deployments such as $`\text{Phalanx}_{1/10}`$ and $`\text{Phalanx}_{\text{max}}`$ push this cost further, to $10^{11.6}$ and $10^{12.6}$ times that of Praos, respectively — while still remaining practical for honest participants.
+
+
+##### 1.3.4 Impact of Tᵩ on Feasibility Categories
+
+This **simplification** allows us to **revisit and improve** the **feasibility category table** presented in the **Problem Overview section** :
+
+
+

+
+
+✏️ **Note**: The **code** to generate this **graph** is available at ➡️ [**this link**](./graph/scenario-cost-cross-thresholds.py).
+
+The **tables below** present first the **original Praos feasibility intervals**, followed by the **adjusted categories under Phalanx** :
+
+
+
+| **Feasibility Category** | **🔵 Ant Glance** | **🟠 Ant Patrol** | **🟢 Owl Stare** | **🔴 Owl Survey** | **$`\text{Phalanx}_{1/100}`$** | **$`\text{Phalanx}_{1/10}`$** | **$`\text{Phalanx}_{max}`$** |
+| --------------------------------------------- | ------------------- | ------------------- | ------------------- | ------------------- | ----------------------- | ---------------------- | --------------------- |
+| **🟢 🌱 Trivial for Any Adversary** | $`0 \to 53.6`$ | $`0 \to 32.9`$ | $`0 \to 31.6`$ | $`0 \to 31.1`$ | $`0 \to 19.6`$ | $`0 \to 16.3`$ | $`0 \to 13.0`$ |
+| **🟡 💰 Feasible with Standard Resources** | $`53.6 \to 60.0`$ | $`32.9 \to 39.5`$ | $`31.6 \to 38.3`$ | $`31.1 \to 37.8`$ | $`19.6 \to 26.3`$ | $`16.3 \to 23.0`$ | $`13.0 \to 19.6`$ |
+| **🟠 🏭 Large-Scale Infrastructure Required** | $`60.0 \to 69.7`$ | $`39.5 \to 49.5`$ | $`38.3 \to 48.2`$ | $`37.8 \to 47.7`$ | $`26.3 \to 36.2`$ | $`23.0 \to 32.9`$ | $`19.6 \to 29.6`$ |
+| **🔴 🚫 Borderline Infeasible** | $`69.7 \to 79.4`$ | $`49.5 \to 59.5`$ | $`48.2 \to 58.2`$ | $`47.7 \to 57.7`$ | $`36.2 \to 46.2`$ | $`32.9 \to 42.9`$ | $`29.6 \to 39.5`$ |
+| **🔴 🚫 Infeasible** | $`79.4 \to 256`$ | $`59.5 \to 256`$ | $`58.2 \to 256`$ | $`57.7 \to 256`$ | $`46.2 \to 256`$ | $`42.9 \to 256`$ | $`39.5 \to 256`$ |
+
+
+
+The **Phalanx tables** include **delta improvements** for each **Praos scenario**. A **positive** $\Delta$ implies that **Phalanx forces infeasibility earlier**, i.e., at a lower $`\rho`$ value, thereby **increasing adversarial cost** :
+
+
+
+| **Scenario** | $`\Delta \text{Phalanx}_{1/100}`$ | $`\Delta \text{Phalanx}_{1/10}`$ | $`\Delta \text{Phalanx}_{max}`$ |
+| ----------------- | ------------------------- | ------------------------ | ------------------------------ |
+| **🔵 Ant Glance** | $`+34.0`$ | $`+36.5`$ | $`+39.9`$ |
+| **🟠 Ant Patrol** | $`+13.3`$ | $`+16.6`$ | $`+20.0`$ |
+| **🟢 Owl Stare** | $`+12.0`$ | $`+15.3`$ | $`+18.7`$ |
+| **🔴 Owl Survey** | $`+11.5`$ | $`+14.8`$ | $`+18.2`$ |
+
+
+
+#### 1.4 Conclusion: How Much Risk is Mitigated?
+
+To quantify the **security improvement**, we compute the **percentage reduction in the “Trivial for Any Adversary” interval** compared to Praos. This represents the portion of grinding attacks that are now **pushed into more difficult feasibility regions**.
+
+
+
+| **Scenario** | **Praos Trivial** | $`\Delta \text{Phalanx}_{1/100}`$ | **% Reduction** |$`\Delta \text{Phalanx}_{1/10}`$ | **% Reduction** | $`\Delta \text{Phalanx}_{max}`$ | **% Reduction** |
+| ----------------- | ----------------- | --------------------------- | --------------- | -------------------------- | --------------- | ------------------------- | --------------- |
+| 🔵 **Ant Glance** | 53.6 | 19.6 | **−63.4%** | 16.3 | **−69.6%** | 13.0 | **−75.7%** |
+| 🟠 **Ant Patrol** | 32.9 | 19.6 | **−40.4%** | 16.3 | **−50.5%** | 13.0 | **−60.5%** |
+| 🟢 **Owl Stare** | 31.6 | 19.6 | **−38.0%** | 16.3 | **−48.4%** | 13.0 | **−58.9%** |
+| 🔴 **Owl Survey** | 31.1 | 19.6 | **−37.0%** | 16.3 | **−47.6%** | 13.0 | **−58.2%** |
+
+
+
+These results show that **Phalanx makes low-effort grinding substantially harder**, reducing adversarial opportunity for trivial manipulation by up to **76%** in the most favorable configuration, and by **at least 37%** across all attack types and parameterizations.
+
+This concludes our **high-level assessment of feasibility mitigation** in security terms. In the next section, **“2. How Phalanx Improves CPS-17 – Settlement Speed?”**, we will examine how this risk reduction translates into a much more **tangible and practical benefit**: **faster and more reliable settlement times in Ouroboros**.
+
+### 2. How Phalanx Improves CPS-17 - Settlement Speed?
+
+Let us recall that, like **Bitcoin**, **Cardano** relies on **probabilistic** and **unbiased randomness** for **leader election**. As a result, both systems inherently provide **statistical consensus guarantees**. For **Stake Pool Operators (SPOs)**, being elected as a **slot leader** grants some **control** over the protocol. This control increases with **stake**—more skin in the game means more chances to be selected. However, due to the **randomized** nature of the leader election, SPOs cannot predict or influence exactly *when* they will be selected.
+
+This makes **undesirable events**—such as **regional concentrations** of slot leadership deviating from the expected distribution, or **control over multiple consecutive blocks**—**statistically quantifiable** and, in the absence of **grinding attacks**, **extremely unlikely**. These include risks like **rollbacks**, **$k$-common prefix violations**, or **private chain attacks**. This is precisely the **security model** Ouroboros **Praos** was designed around—and so far, it has held up well.
+
+However, if **adversaries** manage to control more than **20% of the stake**, they gain **significant** and *exponentially growing* **grinding power**. This power allows them to **bend** the **statistical distribution** of events in their favor. For example, achieving a **grinding depth** of **79.4** means they can select from among **$2^{79.4}$ (~ $10^{24}$)** possible distributions to **optimize** the **timing** and **nature** of their attacks. At that scale, they can deliberately **amplify** the probability of "**bad events**" and execute a variety of **targeted attacks** against the protocol.
+
+In this section, we narrow our focus to a specific class of such bad events: those that **bias or delay the confirmation time of transactions on Cardano**. We’ll show how this issue is **directly tied to adversarial grinding power**, and how reducing that power leads to **faster and more reliable settlement guarantees**, thereby directly addressing [CPS-0017 / Settlement Speed](https://github.com/cardano-foundation/CIPs/tree/master/CPS-0017).
+
+#### 2.1 Settlement times without grinding attacks
+
+In longest-chain consensus protocols like Ouroboros Praos, settlement time refers to the duration required for a transaction to be considered irreversibly included in the blockchain with high probability. Without grinding attacks, this is primarily determined by the risk of chain reorganizations (e.g., forks or common prefix violations), where an adversary might create a competing chain that overtakes the honest one. The goal is to compute the minimum number of confirmations (blocks appended after the transaction's block) needed to achieve a target security level, such as a failure probability below $2^{-30}$ or $2^{-60}$.
+
+The methodology for computing settlement bounds, as detailed in the paper ["Practical Settlement Bounds for Longest-Chain Consensus" (Gaži et al., 2022)](https://eprint.iacr.org/2022/1571.pdf), uses a phase-based analytical model that divides time into intervals separated by the maximum network delay $\Delta$ (e.g., 2-5 seconds for Cardano). It tracks metrics like "margin" (for PoW) or "reach" and "margin" (for PoS) to bound the probability of an adversary overtaking the honest chain.
+
+To obtain metrics, you can run the software from [https://github.com/renling/LCanalysis/](https://github.com/renling/LCanalysis/), which implements these evaluations in MATLAB. Clone the repo, open `PoSRandomWalk.m` (for PoS like Cardano), set parameters (e.g., honest ratio $\beta = 0.7$ (30% of stake adversary), network delay $\Delta = 5s$), and run to output failure probabilities vs. confirmations. Below is a representative graph:
+
+
+
+✏️ **Note**: The Python script used to generate this graph is available here ➡️ [**settlement-time-without-grinding.py**](./graph/settlement-time-without-grinding.py).
+
+A **60-bit confidence level** (failure probability ≤ **$2^{-60}$**) is a common threshold where events are considered negligible in practice. In the graph above, for example, this corresponds to a confirmation interval of **[438, 527]** blocks. Beyond this, the choice of confidence level and thus the number of confirmations required for transaction settlement, becomes **application-specific**, balancing security against efficiency.
+
+#### 2.2 How Grinding Power Affects Settlement Times
+
+What does it mean for settlement times when, in a scenario like the **Owl Survey Glance**, the adversary can observe a large portion of the candidate randomness distribution and perform an attack with a grinding power of $2^{57.7}$?
+
+A grinding power of $2^{57.7}$ / a grinding depth of **57.7 bits**, implies that:
+
+- The adversary can simulate approximately $2^{57.7}$ distinct randomness outcomes, derive the associated leader schedules for the next epoch, and select the most favorable one.
+- This drastically increases the likelihood of **bad events** (e.g., settlement failures) compared to a protocol with unbiased randomness.
+- More precisely, if a bad event occurs with probability $\varepsilon$ under honest randomness, then an adversary capable of evaluating $R$ different randomness candidates can amplify this probability up to $R \cdot \varepsilon$ (by the union bound).
+
+In practical terms, such grinding power **extends the number of confirmations required** to reach a desired security level. The stronger the adversary’s grinding capability, the longer it takes for a transaction to be considered truly settled.
+
+**For example**, assume that on mainnet, a rollback probability of $2^{-60}$ is achieved for a block at index $x$ after $y$ subsequent blocks are appended. If an adversary possesses grinding power of $2^{57.7}$, the effective risk increases to:
+
+```math
+2^{-60} \cdot 2^{57.7} = 2^{-2.3}
+```
+
+To preserve the original $2^{-60}$ confidence level *under adversarial grinding*, the protocol must instead target a baseline security of:
+
+```math
+2^{-(60 + 57.7)} = 2^{-117.7}
+```
+
+This implies that **many more blocks must be appended** before a block is considered settled, thereby **significantly increasing settlement times**.
+
+In the example above, we used the **Owl Survey Glance** scenario, which is the most computationally expensive in terms of grinding *cost*. However, when establishing a protocol-wide security threshold, it is more prudent to anchor on the **worst-case grinding *power*** — that is, the scenario with the **highest grinding depth**. In our analysis, this is the **Ant Glance** scenario, with a grinding depth of **79.4 bits**. To maintain the original $2^{-60}$ confidence level under such an adversary, the protocol must instead target:
+
+```math
+2^{-(60 + 79.4)} = 2^{-139.4}
+```
+
+This defines a **stricter baseline** and ensures security even against the most favorable conditions for the adversary. In our previous scenario (30% adversary and 5-second network delay), the effect can be visualized as follows:
+
+
+
+✏️ **Note**: The Python script used to generate this graph is available here ➡️ [**settlement-time-praos.py**](./graph/settlement-time-praos.py).
+
+Where the confirmation interval was **\[438, 527]** blocks in the absence of a grinding attack, it increases to **\[864, 1037]** blocks under grinding power $2^{57.7}$ in the **Owl Survey** scenario, and further to **\[1024, 1229]** blocks under the same grinding power in the **Ant Glance** scenario.
+
+Assuming a block is produced every 20 seconds, this extends the required confirmation window from approximately **\[2.43, 2.93] hours** to **\[4.80, 5.76] hours** in the Owl Survey case, and up to **\[5.69, 6.83] hours** in the Ant Glance case — more than doubling the settlement time.
+
+As discussed in [**Section 1: How Phalanx Addresses CPS-21 – Ouroboros Randomness Manipulation**](#1-how-phalanx-addresses-cps-21--ouroboros-randomness-manipulation), this is a key challenge in Praos: the presence of multiple attack scenarios with varying grinding power makes it difficult to define a single, consistent security threshold for settlement — a complexity that **Phalanx simplifies** by unifying the treatment of adversarial power across scenarios.
+
+#### 2.3 How Phalanx improves compared to Praos ?
+
+In the conclusion of [**Section 1.4: How Much Risk Is Mitigated?**](#14-conclusion-how-much-risk-is-mitigated), we quantified Phalanx's improvement over Praos in terms of **grinding depth reduction** as follows:
+
+
+
+| **Scenario** | $`\Delta \text{Phalanx}_{1/100}`$ | $`\Delta \text{Phalanx}_{1/10}`$ | $`\Delta \text{Phalanx}_{\text{max}}`$ |
+| ----------------- | ----------------------------------- | ---------------------------------- | ---------------------------------------- |
+| **🔵 Ant Glance** | $`+34.0`$ | $`+36.5`$ | $`+39.9`$ |
+
+
+
+In our previous examples, we are given that under **Praos**, the Ant Glance scenario results in a required security level of $`2^{-139.4}`$, which translate into the following threshold for the Phalanx configurations :
+
+
+
+| **Configuration** | **Computation** | **Resulting Security Level** |
+| ------------------------ | --------------------- | ---------------------------- |
+| $`\text{Phalanx}_{1/100}`$ | $2^{-139.4 + 34.0}$ | $2^{-105.4}$ |
+| $`\text{Phalanx}_{1/10}`$ | $2^{-139.4 + 36.5}$ | $2^{-102.9}$ |
+| $`\text{Phalanx}_{\text{max}}`$ | $2^{-139.4 + 39.9}$ | $2^{-99.5}$ |
+
+
+
+This can be visualized as follows:
+
+
+
+✏️ **Note**: The Python script used to generate this graph is available here ➡️ [**settlement-time-phalanx.py**](./graph/settlement-time-phalanx.py).
+
+In the absence of a grinding attack, the confirmation interval was **\[438, 527]** blocks. Under the actual version of **Praos**, accounting for a grinding depth of 79.4 bits in the **Ant Glance** scenario, this interval increases to **\[1024, 1229]** blocks.
+
+However, with Phalanx applied, the required confirmation windows are **significantly reduced**:
+
+
+
+| **Configuration** | **Confirmation Interval** | **Duration @ 20s/block** |
+| --------------------------------- | ------------------------- | ------------------------ |
+| $`\text{Phalanx}_{1/100}`$ | \[773, 928] | \~4.29 h → \~5.16 h |
+| $`\text{Phalanx}_{1/10}`$ | \[754, 906] | \~4.19 h → \~5.03 h |
+| $`\text{Phalanx}_{\text{max}}`$ | \[729, 876] | \~4.05 h → \~4.87 h |
+
+
+
+Compared to Praos' ~5.69 h → ~6.83 h (from blocks 1024 to 1229), these configurations reduce settlement time by approximately 20–30% while maintaining equivalent security.
+
+#### 2.4 Advocating for Peras: Phalanx as a Complementary Layer
+
+**[Ouroboros Peras](https://peras.cardano-scaling.org/)** is a recent protocol extension designed to accelerate settlement in Cardano by introducing **stake-weighted voting and certified blocks**. Built as a lightweight augmentation of Praos, it enables rapid finality—often within **1 to 2 minutes**—by allowing randomly selected committees to vote on blocks and issue certificates that elevate their importance in the chain selection rule ([Peras Intro](https://peras.cardano-scaling.org/docs/intro/)). Critically, Peras maintains full compatibility with Praos' security guarantees, reverting gracefully when quorum is not reached ([Peras FAQ](https://peras.cardano-scaling.org/docs/faq/)). Rather than replacing Praos, it overlays an additional mechanism for **fast, probabilistically final settlement**, offering a much-needed middle ground between immediate confirmation and the traditional **2160-block** security window.
+
+While Peras dramatically reduces settlement times compared to both Praos and Phalanx, it does so through a **certification mechanism** that depends on the timely participation of randomly selected committees. In practice, this mechanism offers fast settlement when quorum is achieved—but when participation conditions are not met (e.g., insufficient online stake or network asynchrony), **Peras gracefully falls back to standard Praos behavior** ([Peras Technical Report](https://peras.cardano-scaling.org/docs/reports/tech-report-2/)). This fallback mode retains the full settlement guarantees we've detailed in this CIP and in the accompanying [CPS-18: Ouroboros Randomness Manipulation](https://github.com/cardano-foundation/CIPs/pull/0000) and [CIP-Phalanx](https://github.com/input-output-hk/ouroboros-anti-grinding-design). In such scenarios, settlement times revert to those defined under grinding-aware Praos parameters—precisely where Phalanx becomes relevant as a **complementary defense layer**, ensuring that even in fallback conditions, the chain benefits from **stronger security guarantees** and **significantly improved settlement times** compared to unmodified Praos.
+
+Finally, a point of critical importance that we emphasized in the [CPS-21: Ouroboros Randomness Generation Sub-Protocol – The Coin-Flipping Problem](https://github.com/cardano-foundation/CIPs/tree/master/CPS-0021): **today, the protocol remains effectively blind to grinding attacks**. Within the *window of opportunity* defined in the CPD, detecting randomness manipulation is inherently difficult—both in terms of real-time monitoring and retrospective analysis. However, [Ouroboros Peras](https://peras.cardano-scaling.org/docs/intro/) introduces a meaningful defense: by reducing settlement times to **1–2 minutes** ([Peras FAQ](https://peras.cardano-scaling.org/docs/faq/)), it can **close the grinding window entirely**, provided it does **not fall back to Praos mode** during this period. If such a fallback *does* occur within the grinding window, it becomes a suspicion that a grinding attempt may be underway. In this case, examining which SPOs abstained from voting during the certification phase could provide actionable insights to **identify adversarial behavior**. In this light, Peras is not only a mechanism for faster settlement—it also contributes to **resilience against randomness manipulation**.
+
+We therefore **strongly recommend deploying both mechanisms in tandem**:
+
+* [**Peras**](https://peras.cardano-scaling.org/) for rapid probabilistic finality and real-time detection,
+* [**Phalanx**](./Readme.md) as a fallback that offers **quantifiable grinding resistance** even in worst-case epochs.
+
+**Note:** If Peras committee selection ultimately relies on randomness from the standard beacon in its production version, it too inherits vulnerability to grinding — especially when a **Praos epoch precedes a Peras epoch**. In such cases, **Phalanx mitigates the grinding risk at the source**, reducing the manipulation surface of the beacon and thereby **indirectly strengthening Peras**. This highlights the **complementarity** of the two systems: **each reinforces the other**.
+
+### 3. Why VDFs Were Chosen over other Cryptographic Primitives ?
+
+As shown previously in the CPS and CPD, Cardano’s randomness generation currently is biasable and this CIP aims at presenting solutions on top of the current Praos’ randomness generation algorithm to disincentivize adversaries from performing grinding attacks by increasing their computational cost. We do not intend to change the protocol in depth, as this would need a much greater initiative that may not bear fruits, but add an additional layer of security on top of the current protocol only.
+
+To argue about our decision, i.e. increasing the attack cost, we first list different ways to fix the last revealer attack as suggested in [1](https://eprint.iacr.org/2015/1249.pdf) that present a similar issue when combining different sources of randomness.
+- _Simultaneous lottery draws, so that all random nonces are revealed at once._ Unfortunately this solution is not possible in our context as nonces are revealed iteratively in block headers so that they can be easily extractable and verifiable from the blockchain directly.
+- _Using a slow function to generate the randomness on top of the revealed nonces, so that the adversary cannot decide in time whether to reveal their nonces or not._ In practice, time assumptions are delicate in cryptography for theoretical reasons (potential attacks, better algorithms) and practical ones (Moore’s law).
+- _Using a commitment, so that the revealed nonces are combined to some previously committed value._ This solution is not feasible as we would either need to rely on trusted parties, which is contrary to blockchain’s operandi, or to reveal the committed values, which is equivalent to RANDAO.
+- _Limiting the entropy of the last lottery draws, by combining it with sufficiently many low entropy - a single bit- randomness._ This solution is impractical as we would still have a revealer attack, but on the lone bits.
+
+As such, we should focus from now on using a weakened slow function, that is instead of solely relying on time based guarantees, we will principally count on computational costs: we will append to our existing protocol a computationally costly chain of computation that the adversary will have to process for each grinding attempt.
+
+#### 3.1 Requirements
+
+When choosing a cryptographic primitive, we need to balance several criteria. In particular, checking its _security strength and maturity_, _performance_, _deployability_ and _compliance_:
+- _Security strength & Maturity_: the primitive is resistant to known attacks and comprise a sufficient security margin. Furthermore, it has been extensively reviewed by the cryptographic community, has been developed transparently and has been accepted and standardized.
+- _Performance_: the primitive is efficient in terms of size (input, output and if applicable proof size), and computation (CPU cycles, memory footprint, and power consumption) with respect to the application and intended platform.
+- _Deployability_: the primitive should be easy to set up, upgrade and, in case of attacks and if possible, switch
+- _Compliance_: the primitive should be free of licensing restrictions and meet regulatory standards.
+
+We furthermore require the following properties for the Phalanx project. The cryptographic primitive must be an **_NP deterministic function_**. More precisely, a primitive whose verification time is fast, that for each input corresponds to a unique output and whose latter is fixed.
+
+We can either support a primitive which computation can be split in different iterations, each of which is verifiable, or which is finely tunable so that we can solve a challenge in less than a block time and can be used in cascade. Being able to generate and verify a single proof for the whole chain of computation would be another advantage in the context of syncing.
+
+#### 3.2 Primitive selection
+
+To ensure fast verification, we face a first choice: relying on a cryptographic primitive based on trapdoor assumptions, which present NP problems and by definition have fast verification, or combine a primitive without fast verification with an efficient proof system such as a Succinct Non-interactive ARgument of Knowledge (SNARK).
+
+##### 3.2.1 RSA solutions
+
+An RSA group is the multiplicative group of integers modulo $N$, where $N$ is the product of two large prime numbers $p$ and $q$, $N = p \cdot q$. This group is called RSA after the RSA cryptosystem by Rivest, Shamir and Adleman where the public encryption key is the group modulus $N$ and a small exponent $e$, while the corresponding decryption key is the number $d$ such that $d \cdot e \equiv 1\ (\text{mod }\Phi(N))$ where $\Phi(N) = (p−1)(q−1)$, where $p$ and $q$ remain private. To break the RSA cryptosystem, the adversary has to factorize $N$ into its prime $p$ and $q$ which can be done most efficiently with the General Number Field Sieve algorithm, based on the NFS [[2]](https://dl.acm.org/doi/pdf/10.1145/100216.100295), in sub-exponential time. To reach 128 bit of security, the modulus must be at least 2,048 bit long, and preferably at least 3,072 bit long, according to NIST [[3]](https://csrc.nist.gov/pubs/sp/800/78/5/final).
+
+###### 3.2.1.1 Designs
+
+Three problems defined on RSA groups satisfy the requirements: solving the RSA problem or the integer factorization, or using verifiable delayed functions (VDFs, [[6]](https://eprint.iacr.org/2018/601.pdf)).
+RSA problem. The setup consists in generating an RSA public key $(N,\ e)$ where $N$’s factorization is unknown and a ciphertext c. The challengers then have to find the plaintext corresponding to that ciphertext, that is finding the eth root the ciphertext modulo N, i.e. finding $m$ such that $c \equiv m \cdot e (\text{mod } N)$. The verification is straightforward, re-encrypting the plaintext and checking it equals the ciphertext.
+The most efficient method to solve this problem is by first factoring the modulus $N$, which cannot be done in polynomial time without a quantum computer (in which case we would use Shor’s algorithm). The best published algorithm to solve this problem with classical computers is the general number field sieve (GNFS), that is sub-exponential in time.
+Integer factorization. This is a simpler case to the RSA problem: only the group modulus is given and needs to be factorized, by the same algorithm.
+VDF. Similarly to the other problems, we first start by generating an unknown order group of modulus $N$ but also sample a random group element $g$. The challenge then consists in raising this element to a big exponent of the form $2^T$ where $T$ is set depending on the difficulty, the computation or time we want the challenger to need to solve the problem. The challengers eventually compute and output $y = x^{2^T} (\text{mod }N)$ by squaring the integer $x$ exactly $T$ times as well as generate an additional proof of this result. The verification consists in verifying the proof passes successfully together with the input, output and modulus.
+
+###### 3.2.1.2 Properties
+
+**Security Strength & Maturity.** RSA cryptography, since its introduction in 1977, has reached a high level of maturity and is widely considered one of the most reliable and well-understood public-key cryptographic systems. Its security is based on the computational difficulty of factoring large composite numbers, a problem that has remained challenging even with significant advances in both hardware and algorithmic techniques. Over the years, RSA has undergone extensive cryptanalysis, making it one of the most scrutinized cryptographic algorithms. Its applications have become deeply embedded in a wide range of security protocols, such as SSL/TLS for secure communications, digital signatures, and encryption. RSA is however vulnerable to quantum attacks; when large-scale quantum computers become practical, RSA’s security could be broken by quantum algorithms like Shor's algorithm, making it less future-proof compared to post-quantum cryptographic algorithms.
+
+**Performance.** One of the main drawbacks of the RSA cryptosystem relies on its inefficiency due to large modulus, making the group element large space-wise and operations computationally expensive.
+
+**Deployability.** As solving the RSA problem or integer factorization consists in breaking the group security, groups latter cannot be continuously reused in this scenario. More particularly, after finding the factorization of the group modulus, decrypting further ciphertexts in the same group becomes trivial. As for solving a VDF puzzle, the group can be reused safely as long as the modulus is of sufficient size, at least 2,048 bit-long. We can in that scenario choose a known secure modulus, whose factorization is unknown, such as an RSA challenge to create a group. Such trusted unknown moduli are however limited in numbers and we would have to generate new ones, in a trustless manner, when updating security parameters or in case of an, potentially post-quantum, attack.
+In our context, setting up RSA groups would be challenging to say the least, as we would need to generate groups of unknown order, that is the RSA modulus must be public while the underlying prime numbers must remain unknown. There is no known method to generate such groups, even inefficiently, which becomes especially critical if we have to do it repeatedly. Generating such a group might be achievable via multi-party computation (MPC) where the network would compute random numbers passing distributive primality tests. This would however be highly impractical.
+
+**Compliance.** RSA is compliant with a wide range of security standards and regulations. It is one of the most widely accepted public-key cryptosystems and has been incorporated into many cryptographic protocols, including SSL/TLS for secure web communication, digital signatures, and email encryption. RSA complies with industry standards such as FIPS 186-4, X.509, PKCS#1 and NIST guidelines.
+None of the methods, GNFS or VDFs, are proprietary and there exists open source code implementing these.
+
+##### 3.2.2 ECC solutions
+
+Elliptic Curve Cryptography (ECC) is a form of public-key cryptography based on the mathematical structure of elliptic curves over finite fields. More particularly, ECC relies on a safe subgroup of elliptic curves, usually defined on a prime field for security and efficiency. It provides strong security with smaller key sizes compared to traditional methods like RSA, needing 256 to 388 bit long prime only [[3]](https://csrc.nist.gov/pubs/sp/800/78/5/final), making it ideal for constrained environments. To break ECC, one has to compute the discrete logarithm of the group (ECDLP), which can be done most efficiently with Pollard's Rho algorithm that solves the discrete logarithm in $\mathcal{O}(n^{1/2})$ time and $\mathcal{O}(1)$ space.
+
+###### 3.2.2.1 Designs
+
+The main problem satisfying our requirements is solving the discrete logarithmic on a secure subgroup of an elliptic curve. In that case, the setup consists in generating a curve and generator $G$, and sampling a random point $P$ from its secure subgroup. The challengers then have to find the scalar a such that $P = a \cdot G$. Verification is also straightforward, as it consists in raising $G$ to the power $a$ and verifying it equals $P$.
+The most efficient methods to find this scalar include the Index Calculus and Pollard’s $\rho$.
+
+###### 3.2.2.2 Properties
+
+**Security Strength & Maturity.** Elliptic Curve Cryptography has reached a high level of maturity over the past few decades and is widely regarded as a modern, efficient alternative to traditional public-key cryptosystems like RSA. Its security is based on the hardness of the Elliptic Curve Discrete Logarithm Problem (ECDLP), which has been extensively analyzed, making ECC a trusted and well-understood cryptographic method. ECC is now widely adopted in industry standards, including TLS, SSH, Cardano, Bitcoin, and other blockchain technologies, where its efficiency and robustness are critical.
+ECC is also vulnerable to post-quantum attacks and can be broken in polynomial time with Pollard's Rho or the Index Calculus algorithm.
+
+**Performance.** ECC is known for its great performance, particularly in terms of computational efficiency and resource utilization. Compared to traditional public-key systems like RSA, ECC achieves the same level of security with much smaller key sizes, which translates into faster computation, reduced storage requirements, and lower power consumption.
+
+**Deployability.** To make sure that our elliptic curves are not known too long in advance, or are precomputed in sufficient numbers, to mitigate preprocessing [[12]](https://eprint.iacr.org/2017/1113.pdf) as much as possible, we would need to generate the curves on the fly. While RSA groups only rely on the generation of sufficiently large prime numbers, ECC has an array of attacks to look out for as described in safecurves website and paper [[7]](https://eprint.iacr.org/2024/1265.pdf). As such, generating a secure elliptic curve is a complex and challenging task. Nevertheless, there have been methods to generate efficiently safe elliptic curves ([[8]](https://core.ac.uk/download/pdf/11679572.pdf), [9](https://link.springer.com/content/pdf/10.1007/s00145-009-9037-2.pdf), [[10]](https://infoscience.epfl.ch/server/api/core/bitstreams/e2890c5e-2c1e-42e0-92d6-29c6d8d33acf/content)) on the fly but these methods still necessitate minutes worth of probabilistic computation that is not easily verifiable. As finding the discrete logarithm of a number on a curve that has already been broken is significantly easier, thanks to the costly precomputation in Pollard’s Rho algorithm that can be reused (also succinctly mentioned in [10, attacking multiple keys]), we would have to regularly change the elliptic curve which would make ensuring their number is sufficiently large an important yet difficult challenge to solve.
+
+
+**Compliance.** ECC is widely compliant with numerous industry standards and regulations, making it a trusted choice for modern cryptographic applications, including NIST guidelines, FIPS 186-4 and IETF standards for secure communication protocols.
+None of the methods, Index Calculus or Pollard’s $\rho$, are proprietary and there exists open source code implementing these.
+
+##### 3.2.3 Class group solutions
+
+The class group of a number field is the group of fractional ideals modulo principal ideals, whose security is partially determined by a parameter called a discriminant. Class group of binary quadratic forms [[14]](https://github.com/Chia-Network/vdf-competition/blob/master/classgroups.pdf) omits trusted setup as the group order, also called class number, is believed to be difficult to compute when the discriminant is sufficiently large - more particularly the class number grows linearly to the square root of the discriminant. For a class group to be secure, the group size and discriminant must be sufficiently long - respectively at least 1,900 and 3,800 bit-long for 128 bit of security [[4]](https://arxiv.org/pdf/2211.16128)- negative, square free and congruent to 0 or 1 modulo 4. Similarly to ECC, to break a class group security one has to find a class group discrete logarithm (CDLP) which can be done most efficiently with index calculus algorithms that reduce CDLP to integer factorization in sub-exponential time [[5]](https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=b1e2870db7c2f1cdeb916afe072d84e581ce68b5).
+
+###### 3.2.3.1 Design
+
+Similarly to previous solutions, class groups present two types of problems satisfying the requirements: breaking the discrete logarithm by finding the class order, or using verifiable delayed functions.
+CDLP. In that case, the setup consists in generating a discriminant and generator $G$, and sampling a random point P from its secure subgroup. The challengers then have to find the scalar a such that $P = a \cdot G$. Verification is also straightforward, as it consists in raising $G$ to the power $a$ and verifying it equals $P$.
+The most efficient methods to find this scalar include the Index Calculus algorithm.
+VDF. Similarly to the CLPD, we first start by generating a discriminant and sample a random group element $G$. The challenge then consists in raising this element to a big exponent of the form $2^T$ where $T$ is set depending on the difficulty, the computation or time we want the challenger to need to solve the problem. The challengers eventually compute and output $y = x^{2^T} (\text{mod} N)$ by squaring the integer $x$ exactly $T$ times as well as generate an additional proof of this result. The verification consists in verifying the proof passes successfully together with the input, output and modulus.
+
+###### 3.2.3.2 Properties
+
+**Security Strength & Maturity.** Class group-based cryptography has reached a moderate level of maturity in cryptographic research. While not as widely deployed as more traditional cryptographic methods like RSA or ECC, class group cryptography has gained attention due to its potential resistance to quantum computing attacks. The mathematical foundations, particularly the hardness of the class group discrete logarithm problem, are well-understood, and class group cryptosystems have been rigorously analyzed. However, practical deployment is still in the early stages, with ongoing efforts focused on optimizing efficiency, key management, and standardization.
+
+**Performance.** Class group-based cryptography is generally less efficient than RSA or ECC due to the size of their elements and the computational complexity of the composition of elements.
+More particularly, to achieve strong security, class groups’ discriminants must be several thousands bit long, and group elements half of this. Operations are thus costly, especially as composition in class groups rely on finding the greatest common denominator between such numbers that is particularly expensive.
+
+**Deployability.** Setting up class groups, even though their order is hidden, is much easier than previously discussed solutions as it consists in practice to generate a sufficiently long negative square-free random integer d, and such that d ≡ 1 mod 4. as discriminant. Generating a random element in a class group by hashing also is however more of a delicate but still feasible task as mentioned in [[11]](https://eprint.iacr.org/2024/034.pdf). Mysten Labs recently iterated on this work and published a more efficient and secure hash function [[38]](https://eprint.iacr.org/2024/295.pdf) to class groups. Interestingly, there exist algorithms that have been designed to reuse the underlying group such as cascaded and continuous VDFs [[13]](https://par.nsf.gov/servlets/purl/10159432).
+
+**Compliance.** Since class group-based cryptography is still being researched, it is not as broadly standardized or regulated as more established cryptographic techniques like ECC. That said, once formal standards and guidelines are developed and adopted, class group-based cryptography could achieve compliance with relevant legal and regulatory frameworks. None of the VDF proof generation algorithms are proprietary and there exists open source code implementing these.
+Other groups
+We mostly focused on commonly used groups, such as RSA and ECC, and class groups whose usage have been increasing lately, notably because of the popularity of VDF primitives. There exist however other groups such as lattices which are one of the main candidates for post quantum cryptography, supersingular isogenies, whose security is dubious at the moment since the attack on SIDH in 2022, and hyperelliptic Jacobians groups, which are still novel and need further time to get confidence in their security and for more protocols to be built upon, to cite a few.
+
+##### 3.2.4 OWF solutions
+
+To widen our spectrum of solutions, we are now exploring solutions based on well-established non-trapdoored cryptographic functions and pair them with efficient proof systems to enable fast verification.
+Hash-based approaches are generally more cost-effective than asymmetric cryptography, do not depend on potentially vulnerable trapdoors, and can be implemented using widely deployed primitives. They are well understood both cryptographically and economically, especially given the prevalence of hash farms.
+The main drawback of hash functions lies in their verification: traditionally, verification requires recomputing the hashes, which can be too time-consuming for our use case, especially when considering synching. To address this, we propose leveraging proof systems, such as Succinct Non-interactive Arguments of Knowledge (SNARKs) and Scalable Transparent ARguments of Knowledge (STARKs) to reduce verification time. This introduces a modest overhead in the form of small proof sizes—on the order of hundreds of bytes—which remains acceptable.
+Although SNARKs are relatively new and involve complex protocols, their adoption is growing, with some blockchains like Mina and Midnight fully built around them. While their use may raise concerns, it remains a practical choice. It is worth noting, however, that SNARKs are not quantum-resistant—unlike their hash-based counterpart, STARKs, which do offer quantum resistance.
+
+###### 3.2.4.1 Proofs of knowledge
+
+Proofs of knowledge have become an especially active and dynamic area of research in recent years. The foundations were laid in the 1990s with key contributions such as Bellare et al.'s work on Probabilistically Checkable Proofs (PCPs, [[18]](https://dl.acm.org/doi/pdf/10.1145/167088.167174)), Kilian’s results on interactive arguments of knowledge derived from PCPs [[17]], and Micali’s introduction of Computationally Sound Proofs (CS Proofs [[16]](https://people.csail.mit.edu/silvio/Selected%20Scientific%20Papers/Proof%20Systems/Computationally_Sound_Proofs.pdf)), which transformed interactive proofs into non-interactive ones using the Fiat-Shamir heuristic.
+In 2016, Groth introduced one of the most efficient PCP-based proof systems to date [[15]](https://eprint.iacr.org/2016/260.pdf), offering significant improvements in both verification time and proof size. Its main drawback, however, is its reliance on a lengthy trusted setup that cannot be reused across different applications.
+Subsequent advancements built on this foundation, with SNARKs compiling from interactive oracle proofs (IOPs) and polynomial commitment schemes (PCs) such as Plonk [[19]](https://eprint.iacr.org/2019/953.pdf) and Marlin [[20]](https://eprint.iacr.org/2019/1047.pdf). Researchers introduced novel techniques to optimize proving time—either by reducing asymptotic complexity, such as replacing FFTs with multivariate polynomials, or by enhancing circuit efficiency through the use of lookup tables [[23]](https://eprint.iacr.org/2020/315.pdf), custom gates [[24]](https://docs.zkproof.org/pages/standards/accepted-workshop3/proposal-turbo_plonk.pdf), and cryptographic primitives tailored for specific applications.
+More recently, proof aggregation has emerged as a promising paradigm. Techniques like folding and recursive proofs—exemplified by concepts such as Proof-Carrying Data (PCD, [[21]](https://eprint.iacr.org/2012/095.pdf)) and Incrementally Verifiable Computation (IVC, [[22]](https://g-city.sass.org.cn/_upload/article/files/b4/b1/dcb2f5064216b5751c14bc8366f8/e092766a-ddaa-4fa1-b052-8662bad2d2b6.pdf#page=12))—enable efficient step-by-step computation and verification.
+Despite ongoing debates about their security—particularly around the soundness of modeling a random oracle (RO) inside a SNARK—these systems are increasingly being integrated into blockchain technologies. Projects like ZCash, Mina, and Midnight blockchains leverage SNARKs for their powerful compression capabilities, and in some cases, for their privacy-preserving features as well.
+
+###### 3.2.4.2 OWFs
+
+**Non-Algebraic standard hashes.** SHA-2, SHA-3, and BLAKE2 are prominent cryptographic hash functions widely used today. SHA-2, standardized by NIST in 2001, remains the industry standard due to its strong security and broad adoption in applications like TLS and cryptocurrencies.
+Keccak [[25]](https://eprint.iacr.org/2015/389.pdf), selected through a NIST competition in 2015 as the new standard SHA-3, offers a fundamentally different sponge-based design, providing an alternative with enhanced flexibility and resilience at the cost of lower throughput.
+BLAKE2 [[26]], developed as a high-performance finalist in the same SHA-3 competition, is favored for its speed and security, often outperforming both SHA-2 and SHA-3 in practical settings. While not standardized by NIST, BLAKE2 is widely trusted and increasingly adopted in modern cryptographic implementations.
+Together, these functions represent a balance of security, performance, and diversity in cryptographic hashing today.
+
+While these hash functions are very efficient on CPU, they are very expensive to verify with classic SNARKs, as the latter are working on prime fields and not bits. Proving hash evaluation is several orders of magnitude higher than evaluating on CPU making this solution very impractical. Simple benchmarks demonstrate such results, with the generation of a proof asserting the evaluation of a few hundreds of hashes taking tens of seconds, while the evaluation itself is of the order of the microsecond. For instance, according to Figure 1, the a hundred evaluations of SHA-256 would take 32μs on CPU and require 300,000 gates. To generate a proof of these evaluations, we would require a circuit of size 219 , i.e. the smallest power of 2 above 300,000, which takes 6s to 18s depending on the commitment scheme, making this solution, combining standard hash functions and SNARKs, highly impractical.
+
+
+
+
+
+Figure 1, taken from Reinforced Concrete paper [[27]](https://dl.acm.org/doi/pdf/10.1145/3548606.3560686). Performance of various hash functions in the zero knowledge (preimage proof) and native (hashing 512 bits of data) settings on Intel i7-4790 CPU (3.6 GHz base frequency, 4 core, 8 threads).
+
+
+
+
+| $\text{log}_2(\text{gates})$ | #gates | Proving time - KZG (ms) | Proving time - IPA (ms) |
+| :--------------------------: | :-------------------: | :------------------------------: |:-------------------------------: |
+| $8$ | 256 | 43 | 77 |
+| $9$ | 512 | 58 | 105 |
+| $10$ | 1,024 | 75 | 153 |
+| $11$ | 2,048 | 100 | 210 |
+| $12$ | 4,096 | 157 | 330 |
+| $13$ | 8,192 | 218 | 500 |
+| $14$ | 16,384 | 342 | 856 |
+| $15$ | 32,768 | 540 | 1,432 |
+| $16$ | 65,536 | 917 | 2,590 |
+| $17$ | 131,072 | 1,646 | 4,779 |
+| $18$ | 262,144 | 3,028 | 9,199 |
+| $19$ | 524,288 | 6,231 | 18,496 |
+| $20$ | 1,048,576 | 12,743 | 37,287 |
+
+Table 2. Halo2 benchmarks, using KZG [[28]](https://www.cypherpunks.ca/~iang/pubs/PolyCommit-AsiaCrypt.pdf) and IPA [[29]](https://eprint.iacr.org/2017/1066.pdf) commitment schemes on Intel(R) Core(TM) i9-14900HX (2.2 GHz base frequency, 24 cores, 32 threads).
+
+
+
+**Memory-hard functions (MHFs).** are primitives relying on hash functions designed to resist attacks by requiring significant memory and computational effort, making them particularly interesting in our use case, where memory would become another bottleneck to an adversary attempting a grinding attack.
+Argon2, the winner of the Password Hashing Competition in 2015, is the current industry standard due to its strong security, configurability, and resistance to known attacks.
+Balloon Hashing offers a simpler design focused on provable security guarantees and ease of analysis but is less widely adopted.
+The MHF scrypt, introduced earlier and used notably in cryptocurrencies like Litecoin, was among the first practical memory-hard functions but has seen some theoretical attacks exploiting trade-offs between memory and computation.
+Of the three, only Argon2 is formally standardized in RFC 9106 and recommended for new applications, while scrypt remains popular in legacy systems and Balloon Hashing is still primarily academic.
+Unfortunately, these primitives are much more expensive than hashes on CPU as well as on SNARKs, where the memory requirements become even more prohibitive.
+
+**SNARK-friendly hashes.** A novel branch of research started with the adoption of SNARKs to design SNARK friendly hash functions. We can classify them in two categories: algebraic or not. Algebraic hashes include, but are not limited to, Poseidon [[30]](https://www.usenix.org/system/files/sec21-grassi.pdf), Anemoi [[31]](https://hal.science/hal-04276646v1/file/2022-840%281%29.pdf), Rescue [[32]]((https://eprint.iacr.org/2020/1143.pdf)) which are based on prime fields. Choosing carefully the fields can result in optimizations of 2 to 3 orders of magnitude in SNARKs, but with higher CPU time unfortunately. For instance, a hundred evaluations of Poseidon hash would take 1.9ms, compared to 32μs for SHA-256, on CPU, but the proof generation would take 1s to 3s, compared to 6s to 18s for SHA-256.
+Other, non algebraic, hash functions have also been created such as Reinforced Concrete [[27]](https://dl.acm.org/doi/pdf/10.1145/3548606.3560686) and Monolith [[33]](https://ojs.ub.ruhr-uni-bochum.de/index.php/ToSC/article/download/11810/11315) to minimize the cost of binary operations by making the most of lookup tables, which store binary operations on vectors of bits.
+The fact that these hash functions are less efficient on CPUs is not problematic as we are only interested in computational cost. Unfortunately, the ratio between CPU and prove generation time still remains too high for our usage. More novel techniques in SNARKs, such as IVC or folding, would be needed to make the “snarkification” of hash practical but these progresses have yet to reach maturity, be it in both theory and practice.
+Another caveat to using SNARK-friendly hashes would be that adversaries could afford specialised hardware such as CPUs with special instructions such as AVX2, or GPUs, FPGAs or ASICs to accelerate prime field operations and widen the gap between honest users and adversaries.
+
+###### 3.2.4.3 Design
+Using OWFs and SNARKs in the context of Phalanx is straightforward. To each iteration is associated a input that we have to recursively hash a number of times set by the total duration and number of iterations with the desired primitive. Once the result is computed, a SNARK proof can be generated proving the correctness of the computation. We can remark that IVC based solutions are particularly adapted as a choice for SNARK primitves as we can prove a batch of iterations per step of IVC. Both the hash output and the SNARK are then published.
+
+###### 3.2.4.4 Properties
+
+**Security Strength & Maturity.** While traditional hashes have strong security, more novel ones, especially the more usable with SNARKs, can be deemed too novel for adoption. SNARKs, and SNARKs friendly primitives, are very complex pieces of technology that have been broken before and are still evolving at a rapid pace. SNARKs are not postquantum resistant but STARKs are.
+
+**Performance.** While hash functions are extremely efficient on commodity hardware, the proof generation with current SNARKs is far too slow for this solution to be practical
+
+**Deployability.** SNARKs are difficult to deploy, they rely on different libraries that are not easy to update. Changing of SNARKs is also tedious as circuits would very likely need to be rewritten, adding further risk and complexity.
+
+**Compliance.** Hash functions are standardized and libraries are easily available. SNARK solutions are not copyrighted, there is however a limited number of available libraries, which can either be open source or proprietary (SP1, RISC0, STARKNET…).
+
+#### 3.3 Primitive recommendation
+
+The combination of OWFs and SNARKs, however elegant it may be for its modularity, is not practical for the proof generation overhead being prohibitive.
+Trapdoor based solutions seem to be the best candidates for anti-grinding solutions. Out of the ones considered, VDFs seem the most practical primitive thanks to the possibility of reusing the group, and class groups offer the simplest deployment. The main caveat of such a solution is in its relative novelty, regular assessment would need to be done to ensure correct and up to date parametrization.
+
+## Path to Active
+
+### Acceptance Criteria
+
+The proposal will be considered **Active** once the following criteria are met:
+
+- [ ] The revised `cardano-node` implementation passes all **node-level conformance test suites**.
+- [ ] A formal **security audit** is completed and its findings reviewed.
+- [ ] The solution demonstrates **stable and expected behavior in testnet environments**.
+- [ ] The **hard fork is successfully executed** and the protocol transition is secure.
+- [ ] The **community agrees on the initial Phalanx protocol parameters** and on a clear policy for their future updates.
+- [ ] The upcoming CIP introducing a **Consensus** category may define further acceptance criteria, which will be incorporated accordingly.
+
+### Implementation Plan
+
+To fulfill the above criteria, the following steps are planned:
+
+- [ ] Triage and scope confirmation by Intersect’s **Core Infrastructure** and **Consensus** teams.
+- [ ] Coordination with ongoing workstreams on consensus protocol enhancements:
+
+ - [ ] Compatibility with **Peras**
+ - [ ] Compatibility with **Leios**
+ - [ ] Compatibility with **Ouroboros Genesis**
+- [ ] Development and publication of a **community communication plan** covering:
+
+ * The initial values of Phalanx parameters
+ * The procedure for evaluating and updating these parameters
+- [ ] Integration of a **Wesolowski-style VDF library** into [`cardano-crypto-class`](https://github.com/IntersectMBO/cardano-base/blob/master/cardano-crypto-class/cardano-crypto-class.cabal)
+- [ ] Implementation of the **node-level logic**, including support for the hard fork mechanism
+- [ ] Construction and execution of a comprehensive **node-level conformance test suite**
+
+## References
+
+1. [Ouroboros Randomness Generation Sub-Protocol – The Coin-Flipping Problem](https://github.com/cardano-foundation/CIPs/tree/master/CPS-0021/CPD/README.md)
+2. [Cardano Disaster Recovery Plan](https://iohk.io/en/research/library/papers/cardano-disaster-recovery-plan)
+3. [Baigneres, Thomas, et al. "Trap Me If You Can--Million Dollar Curve." Cryptology ePrint Archive (2015).](https://eprint.iacr.org/2015/1249.pdf)
+4. [Lenstra, Arjen K., et al. "The number field sieve." Proceedings of the twenty-second annual ACM symposium on Theory of computing. 1990.](https://dl.acm.org/doi/pdf/10.1145/100216.100295)
+5. [National Institute of Standards and Technology (NIST). (April 2010). Special Publication 800-78-5: Cryptographic Algorithms and Key Sizes for Personal Identity Verification.](https://csrc.nist.gov/pubs/sp/800/78/5/final)
+6. [Dobson, Samuel, Steven Galbraith, and Benjamin Smith. "Trustless unknown-order groups." arXiv preprint arXiv:2211.16128 (2022).](https://arxiv.org/pdf/2211.16128)
+7. [Hamdy, Safuat, and Bodo Möller. "Security of cryptosystems based on class groups of imaginary quadratic orders." Advances in Cryptology—ASIACRYPT 2000: 6th International Conference on the Theory and Application of Cryptology and Information Security Kyoto, Japan, December 3–7, 2000 Proceedings 6. Springer Berlin Heidelberg, 2000.](https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=b1e2870db7c2f1cdeb916afe072d84e581ce68b5)
+8. [Boneh, Dan, et al. "Verifiable delay functions." Annual international cryptology conference. Cham: Springer International Publishing, 2018.](https://eprint.iacr.org/2018/601.pdf)
+9. [Bernstein, Daniel J., and Tanja Lange. "Safe curves for elliptic-curve cryptography." Cryptology ePrint Archive (2024).](https://eprint.iacr.org/2024/1265.pdf)
+10. [Baier, Harald. Efficient algorithms for generating elliptic curves over finite fields suitable for use in cryptography. Diss. Technische Universität, 2002.](https://core.ac.uk/download/pdf/11679572.pdf)
+11. [Konstantinou, Elisavet, et al. "On the efficient generation of prime-order elliptic curves." Journal of cryptology 23.3 (2010): 477-503.](https://link.springer.com/content/pdf/10.1007/s00145-009-9037-2.pdf)
+12. [Miele, Andrea, and Arjen K. Lenstra. "Efficient ephemeral elliptic curve cryptographic keys." Information Security: 18th International Conference, ISC 2015, Trondheim, Norway, September 9-11, 2015, Proceedings 18. Springer International Publishing, 2015.](https://infoscience.epfl.ch/server/api/core/bitstreams/e2890c5e-2c1e-42e0-92d6-29c6d8d33acf/content)
+13. [Seres, István András, Péter Burcsi, and Péter Kutas. "How (not) to hash into class groups of imaginary quadratic fields?." Cryptographers’ Track at the RSA Conference. Cham: Springer Nature Switzerland, 2025.](https://eprint.iacr.org/2024/034.pdf)
+14. [Corrigan-Gibbs, Henry, and Dmitry Kogan. "The discrete-logarithm problem with preprocessing." Advances in Cryptology–EUROCRYPT 2018: 37th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Tel Aviv, Israel, April 29-May 3, 2018 Proceedings, Part II 37. Springer International Publishing, 2018.](https://eprint.iacr.org/2017/1113.pdf)
+15. [Ephraim, Naomi, et al. "Continuous verifiable delay functions." Annual International Conference on the Theory and Applications of Cryptographic Techniques. Cham: Springer International Publishing, 2020.](https://par.nsf.gov/servlets/purl/10159432)
+16. [Long, Lipa. "Binary quadratic forms.", (2018)](https://github.com/Chia-Network/vdf-competition/blob/master/classgroups.pdf)
+17. [Groth, Jens. "On the size of pairing-based non-interactive arguments." Advances in Cryptology–EUROCRYPT 2016: 35th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Vienna, Austria, May 8-12, 2016, Proceedings, Part II 35. Springer Berlin Heidelberg, 2016.](https://eprint.iacr.org/2016/260.pdf)
+18. [Micali, Silvio. "CS proofs." Proceedings 35th Annual Symposium on Foundations of Computer Science. IEEE, 1994](https://people.csail.mit.edu/silvio/Selected%20Scientific%20Papers/Proof%20Systems/Computationally_Sound_Proofs.pdf)
+19. [Kilian, Joe. "A note on efficient zero-knowledge proofs and arguments." Proceedings of the twenty-fourth annual ACM symposium on Theory of computing. 1992.](https://dl.acm.org/doi/pdf/10.1145/129712.129782)
+20. [Bellare, Mihir, et al. "Efficient probabilistically checkable proofs and applications to approximations." Proceedings of the twenty-fifth annual ACM symposium on Theory of computing. 1993.](https://dl.acm.org/doi/pdf/10.1145/167088.167174)
+21. [Gabizon, Ariel, Zachary J. Williamson, and Oana Ciobotaru. "Plonk: Permutations over lagrange-bases for oecumenical noninteractive arguments of knowledge." Cryptology ePrint Archive (2019).](https://eprint.iacr.org/2019/953.pdf)
+22. [Chiesa, Alessandro, et al. "Marlin: Preprocessing zkSNARKs with universal and updatable SRS." Advances in Cryptology–EUROCRYPT 2020: 39th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Zagreb, Croatia, May 10–14, 2020, Proceedings, Part I 39. Springer International Publishing, 2020.](https://eprint.iacr.org/2019/1047.pdf)
+23. [Bitansky, Nir, et al. "Recursive composition and bootstrapping for SNARKS and proof-carrying data." Proceedings of the forty-fifth annual ACM symposium on Theory of computing. 2013.](https://eprint.iacr.org/2012/095.pdf)
+24. [Valiant, Paul. "Incrementally verifiable computation or proofs of knowledge imply time/space efficiency." Theory of Cryptography: Fifth Theory of Cryptography Conference, TCC 2008, New York, USA, March 19-21, 2008. Proceedings 5. Springer Berlin Heidelberg, 2008.](https://g-city.sass.org.cn/_upload/article/files/b4/b1/dcb2f5064216b5751c14bc8366f8/e092766a-ddaa-4fa1-b052-8662bad2d2b6.pdf#page=12)
+25. [Gabizon, Ariel, and Zachary J. Williamson. "plookup: A simplified polynomial protocol for lookup tables." Cryptology ePrint Archive (2020).](https://eprint.iacr.org/2020/315.pdf)
+26. [Gabizon, Ariel, and Zachary J. Williamson. "Proposal: The turbo-plonk program syntax for specifying snark programs.", 2020](https://docs.zkproof.org/pages/standards/accepted-workshop3/proposal-turbo_plonk.pdf)
+27. [Bertoni, Guido, et al. "Keccak." Annual international conference on the theory and applications of cryptographic techniques. Berlin, Heidelberg: Springer Berlin Heidelberg, 2013.](https://eprint.iacr.org/2015/389.pdf)
+28. [Aumasson, Jean-Philippe, et al. "BLAKE2: simpler, smaller, fast as MD5." International Conference on Applied Cryptography and Network Security. Berlin, Heidelberg: Springer Berlin Heidelberg, 2013.](https://eprint.iacr.org/2013/322.pdf)
+29. [Grassi, Lorenzo, et al. "Reinforced concrete: A fast hash function for verifiable computation." Proceedings of the 2022 ACM SIGSAC Conference on Computer and Communications Security. 2022.](https://dl.acm.org/doi/pdf/10.1145/3548606.3560686)
+30. [Kate, Aniket, Gregory M. Zaverucha, and Ian Goldberg. "Constant-size commitments to polynomials and their applications." International conference on the theory and application of cryptology and information security. Berlin, Heidelberg: Springer Berlin Heidelberg, 2010.](https://www.cypherpunks.ca/~iang/pubs/PolyCommit-AsiaCrypt.pdf)
+31. [Bünz, Benedikt, et al. "Bulletproofs: Short proofs for confidential transactions and more." 2018 IEEE symposium on security and privacy (SP). IEEE, 2018.](https://eprint.iacr.org/2017/1066.pdf)
+32. [Grassi, Lorenzo, et al. "Poseidon: A new hash function for {Zero-Knowledge} proof systems." 30th USENIX Security Symposium (USENIX Security 21). 2021.](https://www.usenix.org/system/files/sec21-grassi.pdf)
+33. [Bouvier, Clémence, et al. "New design techniques for efficient arithmetization-oriented hash functions: Anemoi permutations and Jive compression mode." Annual International Cryptology Conference. Cham: Springer Nature Switzerland, 2023.](https://hal.science/hal-04276646v1/file/2022-840%281%29.pdf)
+34. [Szepieniec, Alan, Tomer Ashur, and Siemen Dhooghe. "Rescue-prime: a standard specification (SoK)." Cryptology ePrint Archive (2020).](https://eprint.iacr.org/2020/1143.pdf)
+35. [Grassi, Lorenzo, et al. "Monolith: Circuit-friendly hash functions with new nonlinear layers for fast and constant-time implementations." IACR Transactions on Symmetric Cryptology 2024.3 (2024): 44-83.](https://ojs.ub.ruhr-uni-bochum.de/index.php/ToSC/article/download/11810/11315)
+36. [Wesolowski, Benjamin. "Efficient verifiable delay functions." Advances in Cryptology–EUROCRYPT 2019: 38th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Darmstadt, Germany, May 19–23, 2019, Proceedings, Part III 38. Springer International Publishing, 2019.](https://eprint.iacr.org/2018/623.pdf)
+37. [Pietrzak, Krzysztof. "Simple verifiable delay functions." 10th innovations in theoretical computer science conference (itcs 2019). Schloss Dagstuhl–Leibniz-Zentrum für Informatik, 2019.](https://drops.dagstuhl.de/storage/00lipics/lipics-vol124-itcs2019/LIPIcs.ITCS.2019.60/LIPIcs.ITCS.2019.60.pdf)
+38. [Chalkias, Kostas Kryptos, Jonas Lindstrøm, and Arnab Roy. "An efficient hash function for imaginary class groups." Cryptology ePrint Archive (2024).](https://eprint.iacr.org/2024/295.pdf)
+
+
+## Copyright
+This CIP is licensed under [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0).
+
+Portions of this document were prepared with the assistance of AI-based tools.The use of AI was limited to drafting, editing, and improving clarity of expression. All **technical ideas, specifications, and cryptographic designs** originate from the human authors, who take full responsibility for their novelty, correctness, and originality.
+
+The AI contribution is comparable to that of a copy-editor: it helped improve formatting, emphasis, and readability, but did not generate or propose the underlying concepts.
diff --git a/CIP-0161/graph/NhandNa.py b/CIP-0161/graph/NhandNa.py
new file mode 100644
index 0000000000..7112a597f5
--- /dev/null
+++ b/CIP-0161/graph/NhandNa.py
@@ -0,0 +1,30 @@
+import matplotlib.pyplot as plt
+
+# Adjusted data to ensure matching lengths
+s_a_values = [0.005, 0.01, 0.02, 0.05, 0.1, 0.2, 0.25, 0.3, 0.33, 0.4, 0.45, 0.49, 0.5]
+N_a_values = [269, 434, 730, 1537, 2794, 5204, 6384, 7554, 8252, 9872, 11024, 11942, 12171]
+N_h_values = [19645, 19541, 18713, 17680, 15618, 14590, 13563, 12949, 11517, 10498, 9685, 9482, 9482]
+
+# Plot
+plt.figure(figsize=(14, 6))
+
+# Left plot: Max #Adversarial blocks
+plt.subplot(1, 2, 1)
+plt.plot([x * 100 for x in s_a_values], N_a_values, marker='o', label="N_a")
+plt.title("Nₐ s.t. Pr(Xₐ < Nₐ) = 1 - 2⁻¹²⁸")
+plt.xlabel("Adversarial stake sₐ (%)")
+plt.ylabel("Max #Adversarial blocks")
+plt.grid(True)
+plt.legend()
+
+# Right plot: Min #Honest blocks
+plt.subplot(1, 2, 2)
+plt.plot([x * 100 for x in s_a_values], N_h_values, marker='o', color='orange', label="N_h")
+plt.title("Nₕ s.t. Pr(Xₕ > Nₕ) = 2⁻¹²⁸")
+plt.xlabel("Adversarial stake sₐ (%)")
+plt.ylabel("Min #Honest blocks")
+plt.grid(True)
+plt.legend()
+
+plt.tight_layout()
+plt.show()
diff --git a/CIP-0161/graph/extended_error_series_corrected.csv b/CIP-0161/graph/extended_error_series_corrected.csv
new file mode 100644
index 0000000000..e302b3d401
--- /dev/null
+++ b/CIP-0161/graph/extended_error_series_corrected.csv
@@ -0,0 +1,2501 @@
+Number of Blocks,ErrorUB,ErrorLB
+1.000000000000000000e+00,8.676736300353218301e-01,8.121889413522432877e-01
+2.000000000000000000e+00,7.665170928550861795e-01,6.876416416654815844e-01
+3.000000000000000000e+00,6.892413553587528607e-01,5.976483327753178143e-01
+4.000000000000000000e+00,6.233636971643735647e-01,5.254324374189145441e-01
+5.000000000000000000e+00,5.657163917284088184e-01,4.645063982661716273e-01
+6.000000000000000000e+00,5.148322413203135772e-01,4.123629938648500914e-01
+7.000000000000000000e+00,4.695420424714478180e-01,3.673985960267712181e-01
+8.000000000000000000e+00,4.289723410221071287e-01,3.283163309200732849e-01
+9.000000000000000000e+00,3.924626607691574232e-01,2.940989122957397006e-01
+1.000000000000000000e+01,3.594890215620014651e-01,2.639674748869408893e-01
+1.100000000000000000e+01,3.296227802996201661e-01,2.373151334994483552e-01
+1.200000000000000000e+01,3.025063659506418978e-01,2.136553563004263412e-01
+1.300000000000000000e+01,2.778369824982573344e-01,1.925895067761664026e-01
+1.400000000000000000e+01,2.553551459127302303e-01,1.737860346140847612e-01
+1.500000000000000000e+01,2.348363566176548400e-01,1.569659662586282423e-01
+1.600000000000000000e+01,2.160848560472271862e-01,1.418922602581049741e-01
+1.700000000000000000e+01,1.989288240817739251e-01,1.283618303959235818e-01
+1.800000000000000000e+01,1.832166088685094618e-01,1.161994704764356123e-01
+1.900000000000000000e+01,1.688137167962222018e-01,1.052531422355927476e-01
+2.000000000000000000e+01,1.556003746767336549e-01,9.539025430277556228e-02
+2.100000000000000000e+01,1.434695307720732504e-01,8.649467767079334346e-02
+2.200000000000000000e+01,1.323251978238009219e-01,7.846432047056445258e-02
+2.300000000000000000e+01,1.220810663595783691e-01,7.120913531665457041e-02
+2.400000000000000000e+01,1.126593342503926370e-01,6.464946639023633201e-02
+2.500000000000000000e+01,1.039897112177895072e-01,5.871466691555114747e-02
+2.600000000000000000e+01,9.600856630132027780e-02,5.334193434216964735e-02
+2.700000000000000000e+01,8.865819321256680763e-02,4.847532258446164699e-02
+2.800000000000000000e+01,8.188617370925678485e-02,4.406489953310156749e-02
+2.900000000000000000e+01,7.564482309177875119e-02,4.006602469376974868e-02
+3.000000000000000000e+01,6.989070498353891492e-02,3.643872686089284080e-02
+3.100000000000000000e+01,6.458420493919947436e-02,3.314716563020274342e-02
+3.200000000000000000e+01,5.968915429847634901e-02,3.015916359178368727e-02
+3.300000000000000000e+01,5.517249718980014178e-02,2.744579843693805907e-02
+3.400000000000000000e+01,5.100399477754492816e-02,2.498104611090950361e-02
+3.500000000000000000e+01,4.715596180550797600e-02,2.274146766216476184e-02
+3.600000000000000000e+01,4.360303126816341551e-02,2.070593366195472296e-02
+3.700000000000000000e+01,4.032194367801183316e-02,1.885538105912534790e-02
+3.800000000000000000e+01,3.729135792136072797e-02,1.717259814345728497e-02
+3.900000000000000000e+01,3.449168112865765023e-02,1.564203395380971487e-02
+4.000000000000000000e+01,3.190491534661680367e-02,1.424962901422541575e-02
+4.100000000000000000e+01,2.951451910164990325e-02,1.298266473472342065e-02
+4.200000000000000000e+01,2.730528219838205053e-02,1.182962919165776554e-02
+4.300000000000000000e+01,2.526321231197630260e-02,1.078009731938689951e-02
+4.400000000000000000e+01,2.337543211552886233e-02,9.824623811787223590e-03
+4.500000000000000000e+01,2.163008583947576002e-02,8.954647257799135812e-03
+4.600000000000000000e+01,2.001625429329978098e-02,8.162404226884963782e-03
+4.700000000000000000e+01,1.852387749448332691e-02,7.440852183785027531e-03
+4.800000000000000000e+01,1.714368414861848836e-02,6.783600251963899271e-03
+4.900000000000000000e+01,1.586712731031091408e-02,6.184846965458830857e-03
+5.000000000000000000e+01,1.468632562903479828e-02,5.639324252597921992e-03
+5.100000000000000000e+01,1.359400964907008479e-02,5.142246984816187423e-03
+5.200000000000000000e+01,1.258347268950024862e-02,4.689267501685235456e-03
+5.300000000000000000e+01,1.164852588011740242e-02,4.276434591051158501e-03
+5.400000000000000000e+01,1.078345697295671375e-02,3.900156462313562108e-03
+5.500000000000000000e+01,9.982992587887581926e-03,3.557167302609378062e-03
+5.600000000000000000e+01,9.242263584923427963e-03,3.244497051022335928e-03
+5.700000000000000000e+01,8.556773286253361449e-03,2.959444065796819259e-03
+5.800000000000000000e+01,7.922368297970843257e-03,2.699550394634019686e-03
+5.900000000000000000e+01,7.335211705481949236e-03,2.462579389117368431e-03
+6.000000000000000000e+01,6.791758438006847108e-03,2.246495431690643998e-03
+6.100000000000000000e+01,6.288732616743952786e-03,2.049445567855091507e-03
+6.200000000000000000e+01,5.823106718427300058e-03,1.869742857755303175e-03
+6.300000000000000000e+01,5.392082401407284446e-03,1.705851280427196854e-03
+6.400000000000000000e+01,4.993072855222790464e-03,1.556372040977922321e-03
+6.500000000000000000e+01,4.623686547095530452e-03,1.420031146110290734e-03
+6.600000000000000000e+01,4.281712250008304008e-03,1.295668126913478895e-03
+6.700000000000000000e+01,3.965105247171994696e-03,1.182225799908241063e-03
+6.800000000000000000e+01,3.671974616856372997e-03,1.078740968125501114e-03
+6.900000000000000000e+01,3.400571509858655965e-03,9.843359736577388802e-04
+7.000000000000000000e+01,3.149278339407649268e-03,8.982110217798201313e-04
+7.100000000000000000e+01,2.916598810127231638e-03,8.196372045025134608e-04
+7.200000000000000000e+01,2.701148718882467881e-03,7.479501583952578945e-04
+7.300000000000000000e+01,2.501647465970289769e-03,6.825442977817404444e-04
+7.400000000000000000e+01,2.316910220247161804e-03,6.228675700485773910e-04
+7.500000000000000000e+01,2.145840686461239401e-03,5.684166848811588119e-04
+7.600000000000000000e+01,1.987424427318343258e-03,5.187327738111813030e-04
+7.700000000000000000e+01,1.840722696700652179e-03,4.733974405802858173e-04
+7.800000000000000000e+01,1.704866744008957284e-03,4.320291665403725909e-04
+7.900000000000000000e+01,1.579052552845563659e-03,3.942800386652275946e-04
+8.000000000000000000e+01,1.462535980224324936e-03,3.598327707770982136e-04
+8.100000000000000000e+01,1.354628265210592502e-03,3.283979913287650822e-04
+8.200000000000000000e+01,1.254691878382670689e-03,2.997117735559348337e-04
+8.300000000000000000e+01,1.162136685786225795e-03,2.735333860527170411e-04
+8.400000000000000000e+01,1.076416403142931542e-03,2.496432438480028471e-04
+8.500000000000000000e+01,9.970253179921986699e-04,2.278410418938206635e-04
+8.600000000000000000e+01,9.234952592045346607e-04,2.079440545370082373e-04
+8.700000000000000000e+01,8.553927949202646619e-04,1.897855860497340099e-04
+8.800000000000000000e+01,7.923166414519593062e-04,1.732135586576801444e-04
+8.900000000000000000e+01,7.338952670522855921e-04,1.580892257406690067e-04
+9.000000000000000000e+01,6.797846757031186836e-04,1.442859990014865067e-04
+9.100000000000000000e+01,6.296663572346320381e-04,1.316883794155515521e-04
+9.200000000000000000e+01,5.832453911440827572e-04,1.201909826969317760e-04
+9.300000000000000000e+01,5.402486924603260672e-04,1.096976508538574256e-04
+9.400000000000000000e+01,5.004233888988434157e-04,1.001206421674617406e-04
+9.500000000000000000e+01,4.635353193798350240e-04,9.137989261820873854e-05
+9.600000000000000000e+01,4.293676447443481314e-04,8.340234241195210315e-05
+9.700000000000000000e+01,3.977195622058752158e-04,7.612132182768347897e-05
+9.800000000000000000e+01,3.684051157223930742e-04,6.947599112718068814e-05
+9.900000000000000000e+01,3.412520950705765247e-04,6.341082973775745586e-05
+1.000000000000000000e+02,3.161010169542193340e-04,5.787517034753198282e-05
+1.010000000000000000e+02,2.783656615421519322e-04,4.908285669368370733e-05
+1.020000000000000000e+02,2.573721555494425908e-04,4.468043086773172408e-05
+1.030000000000000000e+02,2.379619170166068492e-04,4.067287515445399792e-05
+1.040000000000000000e+02,2.200155406451512609e-04,3.702477216987910683e-05
+1.050000000000000000e+02,2.034226263272198565e-04,3.370388124827063115e-05
+1.060000000000000000e+02,1.880811000010410212e-04,3.068085351033337073e-05
+1.070000000000000000e+02,1.738965857254203039e-04,2.792897248802272495e-05
+1.080000000000000000e+02,1.607818251105035535e-04,2.542391801368935842e-05
+1.090000000000000000e+02,1.486561405333308977e-04,2.314355128689377848e-05
+1.100000000000000000e+02,1.374449388360737367e-04,2.106771921938543329e-05
+1.110000000000000000e+02,1.270792524538624964e-04,1.917807632911610813e-05
+1.120000000000000000e+02,1.174953151493856045e-04,1.745792260924828942e-05
+1.130000000000000000e+02,1.086341697443143250e-04,1.589205593930126273e-05
+1.140000000000000000e+02,1.004413054344506495e-04,1.446663773409608698e-05
+1.150000000000000000e+02,9.286632245748470632e-05,1.316907064315144119e-05
+1.160000000000000000e+02,8.586262205050443472e-05,1.198788721968015172e-05
+1.170000000000000000e+02,7.938711978998575555e-05,1.091264857528168679e-05
+1.180000000000000000e+02,7.339998055082120969e-05,9.933852124676141780e-06
+1.190000000000000000e+02,6.786437345394852403e-05,9.042847605159452947e-06
+1.200000000000000000e+02,6.274624529509438867e-05,8.231760628589381210e-06
+1.210000000000000000e+02,5.801411106084693111e-05,7.493423090281016541e-06
+1.220000000000000000e+02,5.363886024337790519e-05,6.821309819789910275e-06
+1.230000000000000000e+02,4.959357776233121385e-05,6.209480913724476720e-06
+1.240000000000000000e+02,4.585337839224565396e-05,5.652529240945109901e-06
+1.250000000000000000e+02,4.239525367696786955e-05,5.145532656219269717e-06
+1.260000000000000000e+02,3.919793038932129441e-05,4.684010500013269552e-06
+1.270000000000000000e+02,3.624173966532496843e-05,4.263883999981286858e-06
+1.280000000000000000e+02,3.350849600791715107e-05,3.881440224193544513e-06
+1.290000000000000000e+02,3.098138541585739183e-05,3.533299267534893367e-06
+1.300000000000000000e+02,2.864486194961174487e-05,3.216384381278597411e-06
+1.310000000000000000e+02,2.648455209792965916e-05,2.927894781850867439e-06
+1.320000000000000000e+02,2.448716635680832468e-05,2.665280898479465623e-06
+1.330000000000000000e+02,2.264041747690638410e-05,2.426221840973697176e-06
+1.340000000000000000e+02,2.093294487649407907e-05,2.208604888503897214e-06
+1.350000000000000000e+02,1.935424475495199775e-05,2.010506818109298187e-06
+1.360000000000000000e+02,1.789460547690147060e-05,1.830176907922226018e-06
+1.370000000000000000e+02,1.654504782947009879e-05,1.666021464896950666e-06
+1.380000000000000000e+02,1.529726978517621677e-05,1.516589740304674641e-06
+1.390000000000000000e+02,1.414359543063101258e-05,1.380561108520691817e-06
+1.400000000000000000e+02,1.307692774688567603e-05,1.256733395794292108e-06
+1.410000000000000000e+02,1.209070495094321574e-05,1.144012255855159235e-06
+1.420000000000000000e+02,1.117886012986327091e-05,1.041401498461520118e-06
+1.430000000000000000e+02,1.033578391914175012e-05,9.479942854171725012e-07
+1.440000000000000000e+02,9.556289995775807335e-06,8.629651162508121954e-07
+1.450000000000000000e+02,8.835583173738382760e-06,7.855625327298915475e-07
+1.460000000000000000e+02,8.169229905596965126e-06,7.151024777340425933e-07
+1.470000000000000000e+02,7.553131008811888262e-06,6.509622497960926564e-07
+1.480000000000000000e+02,6.983496448935681680e-06,5.925749998830102419e-07
+1.490000000000000000e+02,6.456822024588288959e-06,5.394247217812424903e-07
+1.500000000000000000e+02,5.969867810781543878e-06,4.910416918132189434e-07
+1.510000000000000000e+02,5.519638227983862993e-06,4.469983175828053094e-07
+1.520000000000000000e+02,5.103363614316324944e-06,4.069053590623843819e-07
+1.530000000000000000e+02,4.718483187518783867e-06,3.704084886248282669e-07
+1.540000000000000000e+02,4.362629291873415494e-06,3.371851596191301359e-07
+1.550000000000000000e+02,4.033612833178332707e-06,3.069417558152511936e-07
+1.560000000000000000e+02,3.729409812171819198e-06,2.794109965259691305e-07
+1.570000000000000000e+02,3.448148873565562427e-06,2.543495744730998643e-07
+1.580000000000000000e+02,3.188099794092476424e-06,2.315360055223674233e-07
+1.590000000000000000e+02,2.947662838751631882e-06,2.107686712836371323e-07
+1.600000000000000000e+02,2.725358919773287655e-06,1.918640372776853839e-07
+1.610000000000000000e+02,2.519820497765438816e-06,1.746550309222872992e-07
+1.620000000000000000e+02,2.329783169068632064e-06,1.589895650028257084e-07
+1.630000000000000000e+02,2.154077887567343715e-06,1.447291935783689828e-07
+1.640000000000000000e+02,1.991623773109122690e-06,1.317478884445826465e-07
+1.650000000000000000e+02,1.841421462291206318e-06,1.199309253402790319e-07
+1.660000000000000000e+02,1.702546960710990025e-06,1.091738700542873345e-07
+1.670000000000000000e+02,1.574145958861330386e-06,9.938165547220553085e-08
+1.680000000000000000e+02,1.455428576704084676e-06,9.046774140629903344e-08
+1.690000000000000000e+02,1.345664504592154460e-06,8.235334978341110323e-08
+1.700000000000000000e+02,1.244178510648704480e-06,7.496676843174332518e-08
+1.710000000000000000e+02,1.150346286966370785e-06,6.824271731361543448e-08
+1.720000000000000000e+02,1.063590609073743108e-06,6.212177160319057987e-08
+1.730000000000000000e+02,9.833777850433693248e-07,5.654983651052572371e-08
+1.740000000000000000e+02,9.092143723974497269e-07,5.147766921062733846e-08
+1.750000000000000000e+02,8.406441426146604487e-07,4.686044365248571483e-08
+1.760000000000000000e+02,7.772452745648214321e-07,4.265735440202204290e-08
+1.770000000000000000e+02,7.186277596063158125e-07,3.883125601785006228e-08
+1.780000000000000000e+02,6.644310023833055528e-07,3.534833477278048453e-08
+1.790000000000000000e+02,6.143216025636607207e-07,3.217780981985712666e-08
+1.800000000000000000e+02,5.679913038715634525e-07,2.929166116193395856e-08
+1.810000000000000000e+02,5.251550977979609679e-07,2.666438202068284959e-08
+1.820000000000000000e+02,4.855494703234889103e-07,2.427275341655537063e-08
+1.830000000000000000e+02,4.489307808683264632e-07,2.209563896751477326e-08
+1.840000000000000000e+02,4.150737634967932563e-07,2.011379809304058620e-08
+1.850000000000000000e+02,3.837701411566263280e-07,1.830971597256814844e-08
+1.860000000000000000e+02,3.548273444281777575e-07,1.666744875559394412e-08
+1.870000000000000000e+02,3.280673269017271221e-07,1.517248265546879308e-08
+1.880000000000000000e+02,3.033254698954861223e-07,1.381160568159779057e-08
+1.890000000000000000e+02,2.804495697765056736e-07,1.257279087646123465e-08
+1.900000000000000000e+02,2.592989016548043616e-07,1.144509002554582198e-08
+1.910000000000000000e+02,2.397433536908945878e-07,1.041853690083145727e-08
+1.920000000000000000e+02,2.216626266912393528e-07,9.484059182733264572e-09
+1.930000000000000000e+02,2.049454940678334475e-07,8.633398282095528261e-09
+1.940000000000000000e+02,1.894891176094164732e-07,7.859036353652232629e-09
+1.950000000000000000e+02,1.751984148551755258e-07,7.154129855924554516e-09
+1.960000000000000000e+02,1.619854741792354835e-07,6.512449070380760726e-09
+1.970000000000000000e+02,1.497690139877232306e-07,5.928323045349892307e-09
+1.980000000000000000e+02,1.384738827015775331e-07,5.396589478122675998e-09
+1.990000000000000000e+02,1.280305964491562209e-07,4.912549092315113344e-09
+2.000000000000000000e+02,1.183749116246884473e-07,4.471924107297723266e-09
+2.010000000000000000e+02,1.094474296830875316e-07,4.070820432657715450e-09
+2.020000000000000000e+02,1.011932317399602163e-07,3.705693253581938607e-09
+2.030000000000000000e+02,9.356154072898825187e-08,3.373315703016008423e-09
+2.040000000000000000e+02,8.650540903839294033e-08,3.070750343735317519e-09
+2.050000000000000000e+02,7.998142970492081770e-08,2.795323208296174046e-09
+2.060000000000000000e+02,7.394946938871825903e-08,2.544600167441266716e-09
+2.070000000000000000e+02,6.837242148644100636e-08,2.316365418111634552e-09
+2.080000000000000000e+02,6.321597786383453168e-08,2.108601900949663442e-09
+2.090000000000000000e+02,5.844841780356308297e-08,1.919473474229813436e-09
+2.100000000000000000e+02,5.404041286995998357e-08,1.747308686676473285e-09
+2.110000000000000000e+02,4.996484649029641383e-08,1.590586005758745555e-09
+2.120000000000000000e+02,4.619664714269129270e-08,1.447920370914976626e-09
+2.130000000000000000e+02,4.271263412448961927e-08,1.318050952869095916e-09
+2.140000000000000000e+02,3.949137495233019984e-08,1.199830010859861717e-09
+2.150000000000000000e+02,3.651305351667229472e-08,1.092212749307083357e-09
+2.160000000000000000e+02,3.375934817971471886e-08,9.942480842715522899e-10
+2.170000000000000000e+02,3.121331906680457741e-08,9.050702381058942182e-10
+2.180000000000000000e+02,2.885930385799229745e-08,8.238910880127282860e-10
+2.190000000000000000e+02,2.668282143867477073e-08,7.499932008894290543e-10
+2.200000000000000000e+02,2.467048281661966019e-08,6.827234929038114728e-10
+2.210000000000000000e+02,2.280990875736085888e-08,6.214874577662994116e-10
+2.220000000000000000e+02,2.108965363128705550e-08,5.657439126900469779e-10
+2.230000000000000000e+02,1.949913500395431520e-08,5.150002156056370424e-10
+2.240000000000000000e+02,1.802856853648727623e-08,4.688079113617631988e-10
+2.250000000000000000e+02,1.666890779559739633e-08,4.267587684345295510e-10
+2.260000000000000000e+02,1.541178860294939659e-08,3.884811711191840824e-10
+2.270000000000000000e+02,1.424947758153270722e-08,3.536368353197305825e-10
+2.280000000000000000e+02,1.317482458251117097e-08,3.219178189117093517e-10
+2.290000000000000000e+02,1.218121869989784345e-08,2.930438002567719322e-10
+2.300000000000000000e+02,1.126254760247123952e-08,2.667596008175093138e-10
+2.310000000000000000e+02,1.041315993275733993e-08,2.428329299782635043e-10
+2.320000000000000000e+02,9.627830541767491575e-09,2.210523321414332061e-10
+2.330000000000000000e+02,8.901728345628718890e-09,2.012253179564249117e-10
+2.340000000000000000e+02,8.230386606370657944e-09,1.831766631657031472e-10
+2.350000000000000000e+02,7.609675454047027393e-09,1.667468600337233936e-10
+2.360000000000000000e+02,7.035776481156220974e-09,1.517907076730289407e-10
+2.370000000000000000e+02,6.505159253074929436e-09,1.381760288092931058e-10
+2.380000000000000000e+02,6.014559590004494066e-09,1.257825016445264609e-10
+2.390000000000000000e+02,5.560959486828161671e-09,1.145005964948620555e-10
+2.400000000000000000e+02,5.141568547352446748e-09,1.042306078052926314e-10
+2.410000000000000000e+02,4.753806818722618942e-09,9.488177298664316127e-11
+2.420000000000000000e+02,4.395288920415250225e-09,8.637147028736558546e-11
+2.430000000000000000e+02,4.063809370174622932e-09,7.862448861122621936e-11
+2.440000000000000000e+02,3.757329016623287096e-09,7.157236282778799387e-11
+2.450000000000000000e+02,3.473962495084429824e-09,6.515276870139298642e-11
+2.460000000000000000e+02,3.211966629448694983e-09,5.930897209123766070e-11
+2.470000000000000000e+02,2.969729708737469259e-09,5.398932755476286106e-11
+2.480000000000000000e+02,2.745761572395814082e-09,4.914682192318937868e-11
+2.490000000000000000e+02,2.538684443322857824e-09,4.473865881547940566e-11
+2.500000000000000000e+02,2.347224452247686152e-09,4.072588041880008782e-11
+2.510000000000000000e+02,2.170203801311419778e-09,3.707302319292003322e-11
+2.520000000000000000e+02,2.006533518648580504e-09,3.374780445577120419e-11
+2.530000000000000000e+02,1.855206759396190090e-09,3.072083708032942545e-11
+2.540000000000000000e+02,1.715292611920784544e-09,2.796536978140364930e-11
+2.550000000000000000e+02,1.585930371161226870e-09,2.545705069707879759e-11
+2.560000000000000000e+02,1.466324243858949372e-09,2.317371217542729115e-11
+2.570000000000000000e+02,1.355738453103839569e-09,2.109517486450896286e-11
+2.580000000000000000e+02,1.253492712080669698e-09,1.920306937427496420e-11
+2.590000000000000000e+02,1.158958039172038170e-09,1.748067393428553002e-11
+2.600000000000000000e+02,1.071552888673715085e-09,1.591276661251695914e-11
+2.610000000000000000e+02,9.907395733199086004e-10,1.448549078921904121e-11
+2.620000000000000000e+02,9.160209566109420196e-10,1.318623269692764440e-11
+2.630000000000000000e+02,8.469373945957093238e-10,1.200350994437365236e-11
+2.640000000000000000e+02,7.830639082957389268e-10,1.092687003910134199e-11
+2.650000000000000000e+02,7.240075693766089755e-10,9.946798011974345753e-12
+2.660000000000000000e+02,6.694050829841796573e-10,9.054632327186913564e-12
+2.670000000000000000e+02,6.189205528761082704e-10,8.242488334621845455e-12
+2.680000000000000000e+02,5.722434151004485678e-10,7.503188588054389586e-12
+2.690000000000000000e+02,5.290865275100563133e-10,6.830199413378057654e-12
+2.700000000000000000e+02,4.891844033600834559e-10,6.217573166264628961e-12
+2.710000000000000000e+02,4.522915781222823322e-10,5.659895668951562539e-12
+2.720000000000000000e+02,4.181810994692809050e-10,5.152238361621432942e-12
+2.730000000000000000e+02,3.866431311397467878e-10,4.690114745503920780e-12
+2.740000000000000000e+02,3.574836620958498090e-10,4.269440732759634758e-12
+2.750000000000000000e+02,3.305233130322188974e-10,3.886498552731812865e-12
+2.760000000000000000e+02,3.055962328944229576e-10,3.537903895581929323e-12
+2.770000000000000000e+02,2.825490786187255862e-10,3.220576002936056691e-12
+2.780000000000000000e+02,2.612400718168268088e-10,2.931710441213536974e-12
+2.790000000000000000e+02,2.415381266026109420e-10,2.668754317018090776e-12
+2.800000000000000000e+02,2.233220431956003306e-10,2.429383715553615604e-12
+2.810000000000000000e+02,2.064797623404200538e-10,2.211483162673270904e-12
+2.820000000000000000e+02,1.909076759557261327e-10,2.013126929054463100e-12
+2.830000000000000000e+02,1.765099897719225758e-10,1.832562011272705874e-12
+2.840000000000000000e+02,1.631981340368405417e-10,1.668192639366859089e-12
+2.850000000000000000e+02,1.508902186642304700e-10,1.518566173979062097e-12
+2.860000000000000000e+02,1.395105294733311059e-10,1.382360268433168754e-12
+2.870000000000000000e+02,1.289890624205389078e-10,1.258371182294601375e-12
+2.880000000000000000e+02,1.192610929579354760e-10,1.145503143130931762e-12
+2.890000000000000000e+02,1.102667778695050065e-10,1.042758662456119166e-12
+2.900000000000000000e+02,1.019507871356777599e-10,9.492297202740980749e-13
+2.910000000000000000e+02,9.426196356154517669e-11,8.640897403137704252e-13
+2.920000000000000000e+02,8.715300807489939066e-11,7.865862850353204100e-13
+2.930000000000000000e+02,8.058018875815357934e-11,7.160344058488599620e-13
+2.940000000000000000e+02,7.450307182420372856e-11,6.518105897769469751e-13
+2.950000000000000000e+02,6.888427288128940086e-11,5.933472490636852840e-13
+2.960000000000000000e+02,6.368922695671221836e-11,5.401277050314880655e-13
+2.970000000000000000e+02,5.888597586467960426e-11,4.916816218545713130e-13
+2.980000000000000000e+02,5.444497161022884004e-11,4.475808498944690741e-13
+2.990000000000000000e+02,5.033889461984128329e-11,4.074356418623840791e-13
+3.000000000000000000e+02,4.654248568055842375e-11,3.708912083681716409e-13
+3.010000000000000000e+02,4.303239055374839246e-11,3.376245824150677857e-13
+3.020000000000000000e+02,3.978701630763673066e-11,3.073417651296667306e-13
+3.030000000000000000e+02,3.678639848480974731e-11,2.797751275021010506e-13
+3.040000000000000000e+02,3.401207828754608021e-11,2.546810451739068364e-13
+3.050000000000000000e+02,3.144698902546415306e-11,2.318377453706512016e-13
+3.060000000000000000e+02,2.907535112694859392e-11,2.110433469512621406e-13
+3.070000000000000000e+02,2.688257506850037616e-11,1.921140762526977949e-13
+3.080000000000000000e+02,2.485517162486633514e-11,1.748826429622099205e-13
+3.090000000000000000e+02,2.298066888783444736e-11,1.591967616637269563e-13
+3.100000000000000000e+02,2.124753554322415810e-11,1.449178059922958770e-13
+3.110000000000000000e+02,1.964510993409621605e-11,1.319195835024691444e-13
+3.120000000000000000e+02,1.816353447380391058e-11,1.200872204233483434e-13
+3.130000000000000000e+02,1.679369500541514249e-11,1.093161464441402334e-13
+3.140000000000000000e+02,1.552716473446605233e-11,9.951117055810621720e-14
+3.150000000000000000e+02,1.435615239013837187e-11,9.058563979754443823e-14
+3.160000000000000000e+02,1.327345429596635089e-11,8.246067342498990957e-14
+3.170000000000000000e+02,1.227241005522716294e-11,7.506446581268349015e-14
+3.180000000000000000e+02,1.134686157840695184e-11,6.833165184940058719e-14
+3.190000000000000000e+02,1.049111520069268449e-11,6.220272926632540885e-14
+3.200000000000000000e+02,9.699906656449891247e-12,5.662353277668812290e-14
+3.210000000000000000e+02,8.968368695220184632e-12,5.154475538179355363e-14
+3.220000000000000000e+02,8.292001140023642482e-12,4.692151261291072103e-14
+3.230000000000000000e+02,7.666643203774478818e-12,4.271294585794447297e-14
+3.240000000000000000e+02,7.088447893509771027e-12,3.888186126722826627e-14
+3.250000000000000000e+02,6.553858344974982350e-12,3.539440104721308303e-14
+3.260000000000000000e+02,6.059585941984042814e-12,3.221974423706036589e-14
+3.270000000000000000e+02,5.602590085952025097e-12,2.932983432370653354e-14
+3.280000000000000000e+02,5.180059491149050070e-12,2.669913128815573412e-14
+3.290000000000000000e+02,4.789394890610444315e-12,2.430438589167212839e-14
+3.300000000000000000e+02,4.428193046315229530e-12,2.212443420709200912e-14
+3.310000000000000000e+02,4.094231965269274206e-12,2.014001057939367318e-14
+3.320000000000000000e+02,3.785457230547161562e-12,1.833357736253735107e-14
+3.330000000000000000e+02,3.499969363206153865e-12,1.668916992784723230e-14
+3.340000000000000000e+02,3.236012137326689994e-12,1.519225557417411438e-14
+3.350000000000000000e+02,2.991961776297664548e-12,1.382960509293564292e-14
+3.360000000000000000e+02,2.766316963885514736e-12,1.258917585297064501e-14
+3.370000000000000000e+02,2.557689608638716012e-12,1.146000537195214346e-14
+3.380000000000000000e+02,2.364796304813175835e-12,1.043211443378017946e-14
+3.390000000000000000e+02,2.186450437289155871e-12,9.496418895739695149e-15
+3.400000000000000000e+02,2.021554881911756400e-12,8.644649406005761240e-15
+3.410000000000000000e+02,1.869095256349861128e-12,7.869278321987383052e-15
+3.420000000000000000e+02,1.728133679955195298e-12,7.163453183639622280e-15
+3.430000000000000000e+02,1.597803004234084951e-12,6.520936153804433686e-15
+3.440000000000000000e+02,1.477301478439831202e-12,5.936048890374471573e-15
+3.450000000000000000e+02,1.365887817470125109e-12,5.403622363080264784e-15
+3.460000000000000000e+02,1.262876641728946588e-12,4.918951171397600189e-15
+3.470000000000000000e+02,1.167634260900394234e-12,4.477751959854081519e-15
+3.480000000000000000e+02,1.079574775697717904e-12,4.076125563222481260e-15
+3.490000000000000000e+02,9.981564736067605138e-13,3.710522547054468842e-15
+3.500000000000000000e+02,9.228784964516931914e-13,3.377711839012846954e-15
+3.510000000000000000e+02,8.532777592829400023e-13,3.074752173777897988e-15
+3.520000000000000000e+02,7.889261016333859788e-13,2.798966099166958658e-15
+3.530000000000000000e+02,7.294276536183215621e-13,2.547916313743143879e-15
+3.540000000000000000e+02,6.744164006762431829e-13,2.319384126792618052e-15
+3.550000000000000000e+02,6.235539319696481943e-13,2.111349850307458055e-15
+3.560000000000000000e+02,5.765273585946841961e-13,1.921974949685400147e-15
+3.570000000000000000e+02,5.330473887932177664e-13,1.749585795400153900e-15
+3.580000000000000000e+02,4.928465483266429971e-13,1.592658872045684488e-15
+3.590000000000000000e+02,4.556775350637953998e-13,1.449807314036673508e-15
+3.600000000000000000e+02,4.213116976609075808e-13,1.319768648972782596e-15
+3.610000000000000000e+02,3.895376289749854006e-13,1.201393640346452247e-15
+3.620000000000000000e+02,3.601598655577332377e-13,1.093636130990316322e-15
+3.630000000000000000e+02,3.329976852297734988e-13,9.955437975038318011e-16
+3.640000000000000000e+02,3.078839953382095256e-13,9.062497339502524715e-16
+3.650000000000000000e+02,2.846643048584876654e-13,8.249647904433218070e-16
+3.660000000000000000e+02,2.631957740172573941e-13,7.509705989150201796e-16
+3.670000000000000000e+02,2.433463355898440497e-13,6.836132244283048996e-16
+3.680000000000000000e+02,2.249938824668294346e-13,6.222973859275503952e-16
+3.690000000000000000e+02,2.080255164919366369e-13,5.664811953515379836e-16
+3.700000000000000000e+02,1.923368539503161162e-13,5.156713686151740134e-16
+3.710000000000000000e+02,1.778313834348249981e-13,4.694188661362890043e-16
+3.720000000000000000e+02,1.644198721401191835e-13,4.273149243799097090e-16
+3.730000000000000000e+02,1.520198169322628681e-13,3.889874433482921604e-16
+3.740000000000000000e+02,1.405549368170311779e-13,3.540976980904944306e-16
+3.750000000000000000e+02,1.299547036847328907e-13,3.223373451690579333e-16
+3.760000000000000000e+02,1.201539084448605518e-13,2.934256976278966903e-16
+3.770000000000000000e+02,1.110922598815635728e-13,2.671072443785930827e-16
+3.780000000000000000e+02,1.027140137622447527e-13,2.431493920822219051e-16
+3.790000000000000000e+02,9.496762991767558242e-14,2.213404095703093025e-16
+3.800000000000000000e+02,8.780545518410757469e-14,2.014875566383699967e-16
+3.810000000000000000e+02,8.118343025693810763e-14,1.834153806750088746e-16
+3.820000000000000000e+02,7.506081865259841338e-14,1.669641660727338281e-16
+3.830000000000000000e+02,6.939995611132410899e-14,1.519885227169610314e-16
+3.840000000000000000e+02,6.416601889922209472e-14,1.383561010787239558e-16
+3.850000000000000000e+02,5.932680958430035986e-14,1.259464225555624650e-16
+3.860000000000000000e+02,5.485255896863040438e-14,1.146498147235207282e-16
+3.870000000000000000e+02,5.071574295819381803e-14,1.043664420903950633e-16
+3.880000000000000000e+02,4.689091324385659813e-14,9.500542378437239547e-17
+3.890000000000000000e+02,4.335454075188002996e-14,8.648403038047803374e-17
+3.900000000000000000e+02,4.008487090092414890e-14,7.872695276668838771e-17
+3.910000000000000000e+02,3.706178977513639318e-14,7.166563658817866564e-17
+3.920000000000000000e+02,3.426670039006491180e-14,6.523767638777581469e-17
+3.930000000000000000e+02,3.168240829022817401e-14,5.938626408822211321e-17
+3.940000000000000000e+02,2.929301577457243861e-14,5.405968694214436879e-17
+3.950000000000000000e+02,2.708382409912983833e-14,4.921087051276953526e-17
+3.960000000000000000e+02,2.504124305525896811e-14,4.479696264642345584e-17
+3.970000000000000000e+02,2.315270736722522709e-14,4.077895476009342460e-17
+3.980000000000000000e+02,2.140659939482471955e-14,3.712133709713741242e-17
+3.990000000000000000e+02,1.979217766554574828e-14,3.379178490439913207e-17
+4.000000000000000000e+02,1.829951079662058110e-14,3.076087275728118151e-17
+4.010000000000000000e+02,1.691941640047921700e-14,2.800181450807154600e-17
+4.020000000000000000e+02,1.564340459777049222e-14,2.549022655928535636e-17
+4.030000000000000000e+02,1.446362579046259225e-14,2.320391236990766420e-17
+4.040000000000000000e+02,1.337282237374018578e-14,2.112266629008122988e-17
+4.050000000000000000e+02,1.236428408964567590e-14,1.922809499059974655e-17
+4.060000000000000000e+02,1.143180674781580318e-14,1.750345490905839358e-17
+4.070000000000000000e+02,1.056965405937644031e-14,1.593350427607214782e-17
+4.080000000000000000e+02,9.772522349211190428e-15,1.450436841381648272e-17
+4.090000000000000000e+02,9.035507929524963293e-15,1.320341711644990690e-17
+4.100000000000000000e+02,8.354076933996353586e-15,1.201915302874537319e-17
+4.110000000000000000e+02,7.724037426947298854e-15,1.094111003646320256e-17
+4.120000000000000000e+02,7.141513615956397308e-15,9.959760770471758872e-18
+4.130000000000000000e+02,6.602922009279764520e-15,9.066432407172373860e-18
+4.140000000000000000e+02,6.104949371407503818e-15,8.253230021099326089e-18
+4.150000000000000000e+02,5.644532341146643059e-15,7.512966812314163293e-18
+4.160000000000000000e+02,5.218838586847297349e-15,6.839100591966203033e-18
+4.170000000000000000e+02,4.825249382844932366e-15,6.225675964702582975e-18
+4.180000000000000000e+02,4.461343499935846079e-15,5.667271696954629422e-18
+4.190000000000000000e+02,4.124882310784279658e-15,5.158952805960427139e-18
+4.200000000000000000e+02,3.813796018635554322e-15,4.696226946103343169e-18
+4.210000000000000000e+02,3.526170924618453319e-15,4.275004707123143723e-18
+4.220000000000000000e+02,3.260237655309339112e-15,3.891563473330277053e-18
+4.230000000000000000e+02,3.014360278138567802e-15,3.542514524422502762e-18
+4.240000000000000000e+02,2.787026237680052508e-15,3.224773087153346319e-18
+4.250000000000000000e+02,2.576837050916017807e-15,2.935531073178510642e-18
+4.260000000000000000e+02,2.382499704237044118e-15,2.672232262147648253e-18
+4.270000000000000000e+02,2.202818699254491345e-15,2.432549710717522925e-18
+4.280000000000000000e+02,2.036688698494138888e-15,2.214365187835981068e-18
+4.290000000000000000e+02,1.883087725729600503e-15,2.015750454552272243e-18
+4.300000000000000000e+02,1.741070879126135534e-15,1.834950222911780967e-18
+4.310000000000000000e+02,1.609764518520554211e-15,1.670366643331274987e-18
+4.320000000000000000e+02,1.488360891078907338e-15,1.520545183359958504e-18
+4.330000000000000000e+02,1.376113162271130362e-15,1.384161773027365309e-18
+4.340000000000000000e+02,1.272330821594711862e-15,1.260011103173310945e-18
+4.350000000000000000e+02,1.176375434784855179e-15,1.146995973344690621e-18
+4.360000000000000000e+02,1.087656716380389248e-15,1.044117595119293170e-18
+4.370000000000000000e+02,1.005628898484883901e-15,9.504667651610724053e-19
+4.380000000000000000e+02,9.297873733850346336e-16,8.652158299971301775e-19
+4.390000000000000000e+02,8.596655893727213059e-16,7.876113715041533509e-19
+4.400000000000000000e+02,7.948321806748285388e-16,7.169675484609506790e-19
+4.410000000000000000e+02,7.348883138352421440e-16,6.526600353222535030e-19
+4.420000000000000000e+02,6.794652342247726276e-16,5.941205046465811950e-19
+4.430000000000000000e+02,6.282219975859166315e-16,5.408316044159588989e-19
+4.440000000000000000e+02,5.808433726578047923e-16,4.923223858586301357e-19
+4.450000000000000000e+02,5.370379019788352256e-16,4.481641413675924180e-19
+4.460000000000000000e+02,4.965361089378206708e-16,4.079666157317983479e-19
+4.470000000000000000e+02,4.590888400439744034e-16,3.713745571963187484e-19
+4.480000000000000000e+02,4.244657322179028492e-16,3.380645778708282733e-19
+4.490000000000000000e+02,3.924537956749804067e-16,3.077422957398930402e-19
+4.500000000000000000e+02,3.628561036833754752e-16,2.801397330170644359e-19
+4.510000000000000000e+02,3.354905811366406863e-16,2.550129478503736640e-19
+4.520000000000000000e+02,3.101888844885329317e-16,2.321398784490756536e-19
+4.530000000000000000e+02,2.867953661597804850e-16,2.113183805787384675e-19
+4.540000000000000000e+02,2.651661170462175625e-16,1.923644410807981642e-19
+4.550000000000000000e+02,2.451680812380901216e-16,1.751105516282322150e-19
+4.560000000000000000e+02,2.266782375045670010e-16,1.594042283452191082e-19
+4.570000000000000000e+02,2.095828425082694579e-16,1.451066642076518619e-19
+4.580000000000000000e+02,1.937767310942723611e-16,1.320915023149315262e-19
+4.590000000000000000e+02,1.791626693492340269e-16,1.202437191916051724e-19
+4.600000000000000000e+02,1.656507564508707600e-16,1.094586082498913070e-19
+4.610000000000000000e+02,1.531578716281446131e-16,9.964085442925616968e-20
+4.620000000000000000e+02,1.416071628300720153e-16,9.070369183505629111e-20
+4.630000000000000000e+02,1.309275739576010560e-16,8.256813693172397466e-20
+4.640000000000000000e+02,1.210534077502374201e-16,7.516229051374793918e-20
+4.650000000000000000e+02,1.119239216384686229e-16,6.842070228548935184e-20
+4.660000000000000000e+02,1.034829540757764850e-16,6.228379243422993863e-20
+4.670000000000000000e+02,9.567857905158111059e-17,5.669732508450124359e-20
+4.680000000000000000e+02,8.846278665978478259e-17,5.161192898027381203e-20
+4.690000000000000000e+02,8.179118775787482315e-17,4.698266115896567128e-20
+4.700000000000000000e+02,7.562274089976372549e-17,4.276860976116253355e-20
+4.710000000000000000e+02,6.991949986252882302e-17,3.893253246583209775e-20
+4.720000000000000000e+02,6.464638021393651252e-17,3.544052735563736267e-20
+4.730000000000000000e+02,5.977094348474538318e-17,3.226173330358113428e-20
+4.740000000000000000e+02,5.526319761808487320e-17,2.936805723309391608e-20
+4.750000000000000000e+02,5.109541246834963798e-17,2.673392584119304925e-20
+4.760000000000000000e+02,4.724194921461499310e-17,2.433605959052098097e-20
+4.770000000000000000e+02,4.367910263917931811e-17,2.215326697289000230e-20
+4.780000000000000000e+02,4.038495530099230434e-17,2.016625722609965088e-20
+4.790000000000000000e+02,3.733924270688245255e-17,1.835746984888911742e-20
+4.800000000000000000e+02,3.452322865117067609e-17,1.671091940733164148e-20
+4.810000000000000000e+02,3.191958995679725857e-17,1.521205426112858927e-20
+4.820000000000000000e+02,2.951230990892607729e-17,1.384762796127161391e-20
+4.830000000000000000e+02,2.728657972547133423e-17,1.260558218253183906e-20
+4.840000000000000000e+02,2.522870745841924091e-17,1.147494015617484894e-20
+4.850000000000000000e+02,2.332603376554185159e-17,1.044570966109446761e-20
+4.860000000000000000e+02,2.156685403435624185e-17,9.508794716037600529e-21
+4.870000000000000000e+02,1.994034637926039625e-17,8.655915192483946120e-21
+4.880000000000000000e+02,1.843650506891136148e-17,7.879533637749706721e-21
+4.890000000000000000e+02,1.704607897431138249e-17,7.172788661600998199e-21
+4.900000000000000000e+02,1.576051465895407194e-17,6.529434297673149277e-21
+4.910000000000000000e+02,1.457190376094349867e-17,5.943784803791244227e-21
+4.920000000000000000e+02,1.347293434339478409e-17,5.410664413358102362e-21
+4.930000000000000000e+02,1.245684591384320242e-17,4.925361593728347186e-21
+4.940000000000000000e+02,1.151738783595482914e-17,4.483587407321400176e-21
+4.950000000000000000e+02,1.064878087770091395e-17,4.081437607482108318e-21
+4.960000000000000000e+02,9.845681659454763291e-18,3.715358134106553652e-21
+4.970000000000000000e+02,9.103149783306792585e-18,3.382113704094481000e-21
+4.980000000000000000e+02,8.416617441387696646e-18,3.078759219042100464e-21
+4.990000000000000000e+02,7.781861316242022456e-18,2.802613737486573544e-21
+5.000000000000000000e+02,7.194976600390618060e-18,2.551236781677338397e-21
+5.010000000000000000e+02,6.652352975260620939e-18,2.322406769482471713e-21
+5.020000000000000000e+02,6.150652401712690589e-18,2.114101380818094543e-21
+5.030000000000000000e+02,5.686788585539797799e-18,1.924479685086768240e-21
+5.040000000000000000e+02,5.257907991617408701e-18,1.751865871672837187e-21
+5.050000000000000000e+02,4.861372289909042752e-18,1.594734439711001291e-21
+5.060000000000000000e+02,4.494742125342039087e-18,1.451696716239977104e-21
+5.070000000000000000e+02,4.155762111710725998e-18,1.321488583593802984e-21
+5.080000000000000000e+02,3.842346957294277008e-18,1.202959307569350542e-21
+5.090000000000000000e+02,3.552568636839275290e-18,1.095061367637627848e-21
+5.100000000000000000e+02,3.284644530992978398e-18,9.968411993214926382e-22
+5.110000000000000000e+02,3.036926460224817104e-18,9.074307669244215606e-22
+5.120000000000000000e+02,2.807890545777119078e-18,8.260398921327813119e-22
+5.130000000000000000e+02,2.596127835272268847e-18,7.519492706946844787e-22
+5.140000000000000000e+02,2.400335635308776905e-18,6.845041154590903946e-22
+5.150000000000000000e+02,2.219309497727018050e-18,6.231083695946199208e-22
+5.160000000000000000e+02,2.051935810246688333e-18,5.672194388465630263e-22
+5.170000000000000000e+02,1.897184945896473447e-18,5.163433962774772114e-22
+5.180000000000000000e+02,1.754104929093024947e-18,4.700306171126865319e-22
+5.190000000000000000e+02,1.621815579405469775e-18,4.278718051128258502e-22
+5.200000000000000000e+02,1.499503096979682997e-18,3.894943753560176446e-22
+5.210000000000000000e+02,1.386415056313570838e-18,3.545591614618538494e-22
+5.220000000000000000e+02,1.281855777586961133e-18,3.227574181568771367e-22
+5.230000000000000000e+02,1.185182047071945341e-18,2.938080926911830235e-22
+5.240000000000000000e+02,1.095799160296989963e-18,2.674553409919576062e-22
+5.250000000000000000e+02,1.013157263623910369e-18,2.434662666025006965e-22
+5.260000000000000000e+02,9.367479717320510151e-19,2.216288624243357235e-22
+5.270000000000000000e+02,8.661012402017745203e-19,2.017501370721732044e-22
+5.280000000000000000e+02,8.007824739583490140e-19,1.836544092831638725e-22
+5.290000000000000000e+02,7.403898537882910566e-19,1.671817553069695394e-22
+5.300000000000000000e+02,6.845518644819430603e-19,1.521865955552730303e-22
+5.310000000000000000e+02,6.329250093960640257e-19,1.385364080199896731e-22
+5.320000000000000000e+02,5.851916973773309462e-19,1.261105570898352615e-22
+5.330000000000000000e+02,5.410582890477476776e-19,1.147992274147450823e-22
+5.340000000000000000e+02,5.002532904333314255e-19,1.045024533959854127e-22
+5.350000000000000000e+02,4.625256828239605606e-19,9.512923572495654924e-23
+5.360000000000000000e+02,4.276433785901960184e-19,8.659673716293761145e-23
+5.370000000000000000e+02,3.953917934577504842e-19,7.882955045437875828e-23
+5.380000000000000000e+02,3.655725264567947422e-19,7.175903190379053441e-23
+5.390000000000000000e+02,3.380021394254970229e-19,6.532269472663512011e-23
+5.400000000000000000e+02,3.125110285597854905e-19,5.946365681284690275e-23
+5.410000000000000000e+02,2.889423810674513117e-19,5.413013802252552183e-23
+5.420000000000000000e+02,2.671512105082603699e-19,4.927500257105970294e-23
+5.430000000000000000e+02,2.470034648858509031e-19,4.485534245945516859e-23
+5.440000000000000000e+02,2.283752020046704410e-19,4.083209826835565191e-23
+5.450000000000000000e+02,2.111518270190114762e-19,3.716971396447796750e-23
+5.460000000000000000e+02,1.952273874838436191e-19,3.383582266875153167e-23
+5.470000000000000000e+02,1.805039215707812946e-19,3.080096060909440327e-23
+5.480000000000000000e+02,1.668908554396697179e-19,2.803830672984185987e-23
+5.490000000000000000e+02,1.543044460586030247e-19,2.552344565658024482e-23
+5.500000000000000000e+02,1.426672660447792919e-19,2.323415192155877049e-23
+5.510000000000000000e+02,1.319077273571351971e-19,2.115019354273179486e-23
+5.520000000000000000e+02,1.219596409106419806e-19,1.925315322053750107e-23
+5.530000000000000000e+02,1.127618094031854888e-19,1.752626557220680637e-23
+5.540000000000000000e+02,1.042576508502241009e-19,1.595426896514088847e-23
+5.550000000000000000e+02,9.639485051133075464e-20,1.452327063990768024e-23
+5.560000000000000000e+02,8.912503906740157859e-20,1.322062393086546956e-23
+5.570000000000000000e+02,8.240349506877673964e-20,1.203481649932832131e-23
+5.580000000000000000e+02,7.618886982382821898e-20,1.095536859152037482e-23
+5.590000000000000000e+02,7.044293303563700502e-20,9.972740422155064771e-24
+5.600000000000000000e+02,6.513033762198293468e-20,9.078247865130319037e-24
+5.610000000000000000e+02,6.021840227191351339e-20,8.263985706241249074e-24
+5.620000000000000000e+02,5.567691040124568944e-20,7.522757779645491560e-24
+5.630000000000000000e+02,5.147792427023844027e-20,6.848013370652011949e-24
+5.640000000000000000e+02,4.759561311996099494e-20,6.233789322781879445e-24
+5.650000000000000000e+02,4.400609427009654134e-20,5.674657337465114313e-24
+5.660000000000000000e+02,4.068728620067826305e-20,5.165676000624951665e-24
+5.670000000000000000e+02,3.761877271396126755e-20,4.702347112178706539e-24
+5.680000000000000000e+02,3.478167734079757579e-20,4.280575932509145149e-24
+5.690000000000000000e+02,3.215854721890937441e-20,3.896634994579768954e-24
+5.700000000000000000e+02,2.973324572871552218e-20,3.547131161876926288e-24
+5.710000000000000000e+02,2.749085322624085791e-20,3.228975641049324194e-24
+5.720000000000000000e+02,2.541757526245591730e-20,2.939356684226151971e-24
+5.730000000000000000e+02,2.350065772443663341e-20,2.675714739767231294e-24
+5.740000000000000000e+02,2.172830837632606878e-20,2.435719831835396359e-24
+5.750000000000000000e+02,2.008962431744207358e-20,2.217250968880336939e-24
+5.760000000000000000e+02,1.857452491127620026e-20,2.018377399052598481e-24
+5.770000000000000000e+02,1.717368977278847810e-20,1.837341546890172231e-24
+5.780000000000000000e+02,1.587850143251483669e-20,1.672543480477617894e-24
+5.790000000000000000e+02,1.468099232477496541e-20,1.522526771804055875e-24
+5.800000000000000000e+02,1.357379577387279166e-20,1.385965625358890024e-24
+5.810000000000000000e+02,1.255010067676954755e-20,1.261653161211971461e-24
+5.820000000000000000e+02,1.160360960345523015e-20,1.148490749028490854e-24
+5.830000000000000000e+02,1.072850005726466663e-20,1.045478298755994961e-24
+5.840000000000000000e+02,9.919388656823938164e-21,9.517054221763016904e-25
+5.850000000000000000e+02,9.171298019288510854e-21,8.663433872109078513e-25
+5.860000000000000000e+02,8.479626141147410039e-21,7.886377938750845838e-25
+5.870000000000000000e+02,7.840118088236344185e-21,7.179019071530636801e-25
+5.880000000000000000e+02,7.248839820805325850e-21,6.535105878727938942e-25
+5.890000000000000000e+02,6.702153992620955105e-21,5.948947679432543905e-25
+5.900000000000000000e+02,6.196697575228572968e-21,5.415364211285706336e-25
+5.910000000000000000e+02,5.729361169725607890e-21,4.929639849122223327e-25
+5.920000000000000000e+02,5.297269878778704769e-21,4.487481929915174767e-25
+5.930000000000000000e+02,4.897765621216765016e-21,4.084982815712345097e-25
+5.940000000000000000e+02,4.528390780403913474e-21,3.718585359290926515e-25
+5.950000000000000000e+02,4.186873085803680998e-21,3.385051467327066095e-25
+5.960000000000000000e+02,3.871111634730376734e-21,3.081433483252891112e-25
+5.970000000000000000e+02,3.579163968297902415e-21,2.805048136892826266e-25
+5.980000000000000000e+02,3.309234122062285944e-21,2.553452830654567272e-25
+5.990000000000000000e+02,3.059661577848636164e-21,2.324424052701020428e-25
+6.000000000000000000e+02,2.828911048798541002e-21,2.115937726325640778e-25
+6.010000000000000000e+02,2.615563034798621630e-21,1.926151321866413093e-25
+6.020000000000000000e+02,2.418305090190258857e-21,1.753387573069212482e-25
+6.030000000000000000e+02,2.235923750042729094e-21,1.596119653991954838e-25
+6.040000000000000000e+02,2.067297065322661008e-21,1.452957685447686381e-25
+6.050000000000000000e+02,1.911387701038546028e-21,1.322636451735687952e-25
+6.060000000000000000e+02,1.767236554902778719e-21,1.204004219104937172e-25
+6.070000000000000000e+02,1.633956857254916097e-21,1.096012557131752765e-25
+6.080000000000000000e+02,1.510728715951226299e-21,9.977070730561773409e-26
+6.090000000000000000e+02,1.396794072662342935e-21,9.082189771906637715e-26
+6.100000000000000000e+02,1.291452039551771963e-21,8.267574048588668812e-26
+6.110000000000000000e+02,1.194054587648314314e-21,7.526024270086020242e-26
+6.120000000000000000e+02,1.104002560388406593e-21,6.850986877292404595e-26
+6.130000000000000000e+02,1.020741987805275393e-21,6.236496124439940163e-26
+6.140000000000000000e+02,9.437606786909165745e-22,5.677121355912744169e-26
+6.150000000000000000e+02,8.725850697669677265e-22,5.167919012000456155e-26
+6.160000000000000000e+02,8.067773124817589563e-22,4.704388939436728143e-26
+6.170000000000000000e+02,7.459325795124144058e-22,4.282434620609050281e-26
+6.180000000000000000e+02,6.896765744024574088e-22,3.898326969960720821e-26
+6.190000000000000000e+02,6.376632290151841182e-22,3.548671377629042585e-26
+6.200000000000000000e+02,5.895725746381424038e-22,3.230377709063892298e-26
+6.210000000000000000e+02,5.451087736425971235e-22,2.940632995492786980e-26
+6.220000000000000000e+02,5.039982995893488421e-22,2.676876573881134828e-26
+6.230000000000000000e+02,4.659882545854978005e-22,2.436777456682499615e-26
+6.240000000000000000e+02,4.308448135411648790e-22,2.218213731381287973e-26
+6.250000000000000000e+02,3.983517857557164585e-22,2.019253807767660429e-26
+6.260000000000000000e+02,3.683092849848260107e-22,1.838139347214827145e-26
+6.270000000000000000e+02,3.405324998071458186e-22,1.673269723093740626e-26
+6.280000000000000000e+02,3.148505567262072113e-22,1.523187874991373948e-26
+6.290000000000000000e+02,2.911054690138029211e-22,1.386567431717507902e-26
+6.300000000000000000e+02,2.691511648284567171e-22,1.262200989297239848e-26
+6.310000000000000000e+02,2.488525886302729169e-22,1.148989440354547905e-26
+6.320000000000000000e+02,2.300848703644206618e-22,1.045932260583385413e-26
+6.330000000000000000e+02,2.127325573022881049e-22,9.521186664618146453e-27
+6.340000000000000000e+02,1.966889038148986866e-22,8.667195660638541206e-27
+6.350000000000000000e+02,1.818552147094912170e-22,7.889802318333692497e-27
+6.360000000000000000e+02,1.681402380896795677e-22,7.182136305642968778e-27
+6.370000000000000000e+02,1.554596040042970877e-22,6.537943516400981923e-27
+6.380000000000000000e+02,1.437353054316654089e-22,5.951530798721409616e-27
+6.390000000000000000e+02,1.328952184064674152e-22,5.417715640900521387e-27
+6.400000000000000000e+02,1.228726583372326347e-22,4.931780370180334420e-27
+6.410000000000000000e+02,1.136059697850164964e-22,4.489430459597406154e-27
+6.420000000000000000e+02,1.050381471797549631e-22,4.086756574446589235e-27
+6.430000000000000000e+02,9.711648414105690777e-23,3.720200022940109814e-27
+6.440000000000000000e+02,8.979224924616662607e-23,3.386521305727105659e-27
+6.450000000000000000e+02,8.302038625054804353e-23,3.082771486324504756e-27
+6.460000000000000000e+02,7.675923691692613392e-23,2.806266129441938044e-27
+6.470000000000000000e+02,7.097028474774001957e-23,2.554561576875832009e-27
+6.480000000000000000e+02,6.561791804452757149e-23,2.325433351308031893e-27
+6.490000000000000000e+02,6.066921083665863012e-23,2.116856497148556092e-27
+6.500000000000000000e+02,5.609372033177270017e-23,1.926987684682308783e-27
+6.510000000000000000e+02,5.186329964189866517e-23,1.754148919361853873e-27
+6.520000000000000000e+02,4.795192463320684742e-23,1.596812712275156601e-27
+6.530000000000000000e+02,4.433553383424077754e-23,1.453588580729579809e-27
+6.540000000000000000e+02,4.099188041778614715e-23,1.323210759649413297e-27
+6.550000000000000000e+02,3.790039534582818830e-23,1.204527015184149278e-27
+6.560000000000000000e+02,3.504206083570691505e-23,1.096488461666424437e-27
+6.570000000000000000e+02,3.239929336907403702e-23,9.981402919251143341e-28
+6.580000000000000000e+02,2.995583552396844114e-23,9.086133390316000478e-28
+6.590000000000000000e+02,2.769665596458950275e-23,8.271163949046336662e-28
+6.600000000000000000e+02,2.560785697354511913e-23,7.529292178884031538e-28
+6.610000000000000000e+02,2.367658895774088554e-23,6.853961675072468550e-28
+6.620000000000000000e+02,2.189097140197793686e-23,6.239204101430504758e-28
+6.630000000000000000e+02,2.024001978399582504e-23,5.679586444272890616e-28
+6.640000000000000000e+02,1.871357800136411485e-23,5.170162997324002333e-28
+6.650000000000000000e+02,1.730225589453449093e-23,4.706431653285733329e-28
+6.660000000000000000e+02,1.599737148171949730e-23,4.284294115778262093e-28
+6.670000000000000000e+02,1.479089755024210845e-23,3.900019680021900285e-28
+6.680000000000000000e+02,1.367541227580729773e-23,3.550212262165158039e-28
+6.690000000000000000e+02,1.264405356592041927e-23,3.231780385876709775e-28
+6.700000000000000000e+02,1.169047684658758431e-23,2.941909860952268728e-28
+6.710000000000000000e+02,1.080881603261784383e-23,2.678038912480247449e-28
+6.720000000000000000e+02,9.993647441428348012e-24,2.437835540765637694e-28
+6.730000000000000000e+02,9.239956428361738041e-24,2.219176911927684246e-28
+6.740000000000000000e+02,8.543106538269224011e-24,2.020130597032086764e-28
+6.750000000000000000e+02,7.898810983588011286e-24,1.838937493955943777e-28
+6.760000000000000000e+02,7.303106273457548282e-24,1.673996281054931357e-28
+6.770000000000000000e+02,6.752327831648903552e-24,1.523849265239275899e-28
+6.780000000000000000e+02,6.243087453316530759e-24,1.387169499389167935e-28
+6.790000000000000000e+02,5.772252461895154264e-24,1.262749055257401409e-28
+6.800000000000000000e+02,5.336926437920486942e-24,1.149488348219605082e-28
+6.810000000000000000e+02,4.934431401225119104e-24,1.046386419527580002e-28
+6.820000000000000000e+02,4.562291336899898087e-24,9.525320901839847984e-29
+6.830000000000000000e+02,4.218216963677727722e-24,8.670959082591156264e-29
+6.840000000000000000e+02,3.900091651040660560e-24,7.893228184831719293e-29
+6.850000000000000000e+02,3.605958398416623250e-24,7.185254893303523878e-29
+6.860000000000000000e+02,3.334007796365943579e-24,6.540782386217423321e-29
+6.870000000000000000e+02,3.082566895699583371e-24,5.954115039638144642e-29
+6.880000000000000000e+02,2.850088916054830896e-24,5.420068091540111297e-29
+6.890000000000000000e+02,2.635143730619685658e-24,4.933921820683707603e-29
+6.900000000000000000e+02,2.436409068470863477e-24,4.491379835359523304e-29
+6.910000000000000000e+02,2.252662380404986792e-24,4.088531103372548644e-29
+6.920000000000000000e+02,2.082773318224735573e-24,3.721815387699649019e-29
+6.930000000000000000e+02,1.925696781214499932e-24,3.387991782352277592e-29
+6.940000000000000000e+02,1.780466487030214796e-24,3.084110070376462463e-29
+6.950000000000000000e+02,1.646189027453449921e-24,2.807484650861044566e-29
+6.960000000000000000e+02,1.522038372442641341e-24,2.555670804530773305e-29
+6.970000000000000000e+02,1.407250788672466599e-24,2.326443088167124193e-29
+6.980000000000000000e+02,1.301120141301775108e-24,2.117775666915091107e-29
+6.990000000000000000e+02,1.202993550068039761e-24,1.927824410659045514e-29
+7.000000000000000000e+02,1.112267372986320336e-24,1.754910596242087967e-29
+7.010000000000000000e+02,1.028383492945510211e-24,1.597506071494307944e-29
+7.020000000000000000e+02,9.508258843584797193e-25,1.454219749955357572e-29
+7.030000000000000000e+02,8.791174387451919835e-25,1.323785316935947426e-29
+7.040000000000000000e+02,8.128170297207880141e-25,1.205050038268994740e-29
+7.050000000000000000e+02,7.515167993335889386e-25,1.096964572845741215e-29
+7.060000000000000000e+02,6.948396490592838566e-25,9.985736989039548086e-30
+7.070000000000000000e+02,6.424369200168942526e-25,9.090078721101624389e-30
+7.080000000000000000e+02,5.939862481359099573e-25,8.274755408290804688e-30
+7.090000000000000000e+02,5.491895810802663766e-25,7.532561506655452889e-30
+7.100000000000000000e+02,5.077713447300301053e-25,6.856937764552788663e-30
+7.110000000000000000e+02,4.694767479415486523e-25,6.241913254263920478e-30
+7.120000000000000000e+02,4.340702151574873425e-25,5.682052603010124763e-30
+7.130000000000000000e+02,4.013339372247828841e-25,5.172407957018530245e-30
+7.140000000000000000e+02,3.710665315055253697e-25,4.708475254110659560e-30
+7.150000000000000000e+02,3.430818030383041219e-25,4.286154418367221950e-30
+7.160000000000000000e+02,3.172075991290576891e-25,3.901713125082318274e-30
+7.170000000000000000e+02,2.932847503252364084e-25,3.551753815775693893e-30
+7.180000000000000000e+02,2.711660912585500877e-25,3.233183671752102605e-30
+7.190000000000000000e+02,2.507155553328259536e-25,2.943187280845235977e-30
+7.200000000000000000e+02,2.318073376877828180e-25,2.679201755783622978e-30
+7.210000000000000000e+02,2.143251212896033220e-25,2.438894084284200140e-30
+7.220000000000000000e+02,1.981613613874145195e-25,2.220140510701030700e-30
+7.230000000000000000e+02,1.832166239339395046e-25,2.021007767011117084e-30
+7.240000000000000000e+02,1.693989739004832016e-25,1.839735987263954673e-30
+7.250000000000000000e+02,1.566234097233611439e-25,1.674723154498105604e-30
+7.260000000000000000e+02,1.448113404027062974e-25,1.524510942672408039e-30
+7.270000000000000000e+02,1.338901020369029409e-25,1.387771828487335375e-30
+7.280000000000000000e+02,1.237925108185596967e-25,1.263297359195753912e-30
+7.290000000000000000e+02,1.144564497421889480e-25,1.149987472717678937e-30
+7.300000000000000000e+02,1.058244864811495000e-25,1.046840775674169323e-30
+7.310000000000000000e+02,9.784352008317620867e-26,9.529456934207260372e-31
+7.320000000000000000e+02,9.046445431107550144e-26,8.674724138676056993e-31
+7.330000000000000000e+02,8.364189561908228797e-26,7.896655538890682610e-31
+7.340000000000000000e+02,7.733387390694729881e-26,7.188374835100032522e-31
+7.350000000000000000e+02,7.150158433390660279e-26,6.543622488712276402e-31
+7.360000000000000000e+02,6.610914860427599151e-26,5.956700402669607009e-31
+7.370000000000000000e+02,6.112339425617161910e-26,5.422421563647897577e-31
+7.380000000000000000e+02,5.651365059561083700e-26,4.936064201035921489e-31
+7.390000000000000000e+02,5.225156002065987073e-26,4.493330057568814760e-31
+7.400000000000000000e+02,4.831090357494380465e-26,4.090306402824713083e-31
+7.410000000000000000e+02,4.466743965739352845e-26,3.723431453873974297e-31
+7.420000000000000000e+02,4.129875489602096825e-26,3.389462897479709273e-31
+7.430000000000000000e+02,3.818412626834544164e-26,3.085449235660991000e-31
+7.440000000000000000e+02,3.530439362028842996e-26,2.808703701379828799e-31
+7.450000000000000000e+02,3.264184179931162332e-26,2.556780513828435504e-31
+7.460000000000000000e+02,3.018009167671905100e-26,2.327453263468592805e-31
+7.470000000000000000e+02,2.790399938873490286e-26,2.118695235798443518e-31
+7.480000000000000000e+02,2.579956317651467759e-26,1.928661499954339553e-31
+7.490000000000000000e+02,2.385383725200636131e-26,1.755672603853460954e-31
+7.500000000000000000e+02,2.205485215979065997e-26,1.598199731780079782e-31
+7.510000000000000000e+02,2.039154114499167188e-26,1.454851193243948761e-31
+7.520000000000000000e+02,1.885367207430114028e-26,1.324360123703590878e-31
+7.530000000000000000e+02,1.743178449131537455e-26,1.205573288458042966e-31
+7.540000000000000000e+02,1.611713141896919480e-26,1.097440890759431648e-31
+7.550000000000000000e+02,1.490162555105823422e-26,9.990072940743933023e-32
+7.560000000000000000e+02,1.377778950183393141e-26,9.094025765007047978e-32
+7.570000000000000000e+02,1.273870980762655328e-26,8.278348426998919569e-32
+7.580000000000000000e+02,1.177799439752814181e-26,7.535832254016313165e-32
+7.590000000000000000e+02,1.088973327150856008e-26,6.859915146294336761e-32
+7.600000000000000000e+02,1.006846214407176157e-26,6.244623583450753421e-32
+7.610000000000000000e+02,9.309128829797567593e-27,5.684519832589219466e-32
+7.620000000000000000e+02,8.607062163986219167e-27,5.174653891507052980e-32
+7.630000000000000000e+02,7.957943267214900499e-27,4.710519742296711277e-32
+7.640000000000000000e+02,7.357778977034973260e-27,4.288015528726525503e-32
+7.650000000000000000e+02,6.802877283371752727e-27,3.903407305461121377e-32
+7.660000000000000000e+02,6.289824616512912346e-27,3.553296038751120175e-32
+7.670000000000000000e+02,5.815464847968449300e-27,3.234587566954580383e-32
+7.680000000000000000e+02,5.376879875023699516e-27,2.944465255412432121e-32
+7.690000000000000000e+02,4.971371669546669072e-27,2.680365104010412385e-32
+7.700000000000000000e+02,4.596445680621073726e-27,2.439953087437715407e-32
+7.710000000000000000e+02,4.249795488903133118e-27,2.221104527882928694e-32
+7.720000000000000000e+02,3.929288618300589783e-27,2.021885317870063698e-32
+7.730000000000000000e+02,3.632953417692938516e-27,1.840534827289317675e-32
+7.740000000000000000e+02,3.358966931992657729e-27,1.675450343560273544e-32
+7.750000000000000000e+02,3.105643687935034968e-27,1.525172907415469856e-32
+7.760000000000000000e+02,2.871425325610165078e-27,1.388374419125525792e-32
+7.770000000000000000e+02,2.654871011953614807e-27,1.263845901215612873e-32
+7.780000000000000000e+02,2.454648577223166328e-27,1.150486813942850586e-32
+7.790000000000000000e+02,2.269526319935965075e-27,1.047295329108781641e-32
+7.800000000000000000e+02,2.098365429852634772e-27,9.533594762499862785e-33
+7.810000000000000000e+02,1.940112982397533743e-27,8.678490829602869654e-33
+7.820000000000000000e+02,1.793795461418650420e-27,7.900084381156442745e-33
+7.830000000000000000e+02,1.658512770441743457e-27,7.191496131620481342e-33
+7.840000000000000000e+02,1.533432695577767622e-27,6.546463824420789216e-33
+7.850000000000000000e+02,1.417785786021161554e-27,5.959286888303247640e-33
+7.860000000000000000e+02,1.310860620645815022e-27,5.424776057667376237e-33
+7.870000000000000000e+02,1.211999431580056254e-27,4.938207511640728818e-33
+7.880000000000000000e+02,1.120594057838637920e-27,4.495281126592849213e-33
+7.890000000000000000e+02,1.036082204119687768e-27,4.092082473137624661e-33
+7.900000000000000000e+02,9.579439817519414875e-28,3.725048221767651481e-33
+7.910000000000000000e+02,8.856987105134664822e-28,3.390934651386647628e-33
+7.920000000000000000e+02,8.189019616476471644e-28,3.086788982430492151e-33
+7.930000000000000000e+02,7.571428238860057530e-28,2.809923281228013901e-33
+7.940000000000000000e+02,7.000413756594964637e-28,2.557890704977956177e-33
+7.950000000000000000e+02,6.472463479479832273e-28,2.328463877402816079e-33
+7.960000000000000000e+02,5.984329633906771666e-28,2.119615203971930716e-33
+7.970000000000000000e+02,5.533009383644001096e-28,1.929498952725936403e-33
+7.980000000000000000e+02,5.115726357390943596e-28,1.756434942339581212e-33
+7.990000000000000000e+02,4.729913569470294004e-28,1.598893693263199479e-33
+8.000000000000000000e+02,4.373197628590379814e-28,1.455482910714366314e-33
+8.010000000000000000e+02,4.043384137535137394e-28,1.324935180060662212e-33
+8.020000000000000000e+02,3.738444193966295951e-28,1.206096765849905655e-33
+8.030000000000000000e+02,3.456501909294255508e-28,1.097917415497262405e-33
+8.040000000000000000e+02,3.195822868838699532e-28,9.994410775181379635e-34
+8.050000000000000000e+02,2.954803462289371829e-28,9.097974522776130617e-34
+8.060000000000000000e+02,2.731961018831380141e-28,8.281943005847824371e-34
+8.070000000000000000e+02,2.525924686250185724e-28,7.539104421583075754e-34
+8.080000000000000000e+02,2.335426997906919827e-28,6.862893820858182458e-34
+8.090000000000000000e+02,2.159296075707406840e-28,6.247335089501795808e-34
+8.100000000000000000e+02,1.996448421099938854e-28,5.686988133475150210e-34
+8.110000000000000000e+02,1.845882249754308957e-28,5.176900801212877579e-34
+8.120000000000000000e+02,1.706671328919567601e-28,4.712565118229160047e-34
+8.130000000000000000e+02,1.577959279549815979e-28,4.289877447206915639e-34
+8.140000000000000000e+02,1.458954308146524570e-28,3.905102221477595772e-34
+8.150000000000000000e+02,1.348924335909721896e-28,3.554838931382111445e-34
+8.160000000000000000e+02,1.247192495233881054e-28,3.235992071748699078e-34
+8.170000000000000000e+02,1.153132965844732933e-28,2.945743784894704610e-34
+8.180000000000000000e+02,1.066167124962129127e-28,2.681528957379859143e-34
+8.190000000000000000e+02,9.857599878061978581e-29,2.441012550425745742e-34
+8.200000000000000000e+02,9.114169165497305859e-29,2.222068963655056375e-34
+8.210000000000000000e+02,8.426805774716958938e-29,2.022763249774309772e-34
+8.220000000000000000e+02,7.791281275930591028e-29,1.841334014182595824e-34
+8.230000000000000000e+02,7.203686134881242879e-29,1.676177848378470151e-34
+8.240000000000000000e+02,6.660405662697999031e-29,1.525835159593215533e-34
+8.250000000000000000e+02,6.158097779537819721e-29,1.388977271417303110e-34
+8.260000000000000000e+02,5.693672455228066798e-29,1.264394681420365806e-34
+8.270000000000000000e+02,5.264272700433776333e-29,1.150986371989218221e-34
+8.280000000000000000e+02,4.867256991414386560e-29,1.047750079917082187e-34
+8.290000000000000000e+02,4.500183020252696075e-29,9.537734387497470339e-35
+8.300000000000000000e+02,4.160792670593298042e-29,8.682259156081464918e-35
+8.310000000000000000e+02,3.846998126465262808e-29,7.903514712275201795e-35
+8.320000000000000000e+02,3.556869028736526528e-29,7.194618783453109955e-35
+8.330000000000000000e+02,3.288620600189771820e-29,6.549306393878441583e-35
+8.340000000000000000e+02,3.040602666169606462e-29,5.961874497026431414e-35
+8.350000000000000000e+02,2.811289503259922733e-29,5.427131574042278005e-35
+8.360000000000000000e+02,2.599270453543227688e-29,4.940351752902059485e-35
+8.370000000000000000e+02,2.403241246704915250e-29,4.497233042799327313e-35
+8.380000000000000000e+02,2.221995976598263215e-29,4.093859314646003609e-35
+8.390000000000000000e+02,2.054419682912935427e-29,3.726665691685376028e-35
+8.400000000000000000e+02,1.899481492312007656e-29,3.392407044350459229e-35
+8.410000000000000000e+02,1.756228276843644666e-29,3.088129310937455179e-35
+8.420000000000000000e+02,1.623778790616700691e-29,2.811143390635441484e-35
+8.430000000000000000e+02,1.501318248670570874e-29,2.559001378188561350e-35
+8.440000000000000000e+02,1.388093314690481776e-29,2.329474930160254272e-35
+8.450000000000000000e+02,1.283407466734408576e-29,2.120535571608930342e-35
+8.460000000000000000e+02,1.186616712462816025e-29,1.930336769131661993e-35
+8.470000000000000000e+02,1.097125627513158468e-29,1.757197611844119066e-35
+8.480000000000000000e+02,1.014383692648236147e-29,1.599587956074451391e-35
+8.490000000000000000e+02,9.378819071458758403e-30,1.456114902485643287e-35
+8.500000000000000000e+02,8.671496575967033554e-30,1.325510486115536929e-35
+8.510000000000000000e+02,8.017518228476964169e-30,1.206620470543237802e-35
+8.520000000000000000e+02,7.412860972823704906e-30,1.098394147149039642e-35
+8.530000000000000000e+02,6.853805159711047916e-30,9.998750493169397887e-36
+8.540000000000000000e+02,6.336911664672461488e-30,9.101924995153059850e-36
+8.550000000000000000e+02,5.859000731727001833e-30,8.285539145514954632e-36
+8.560000000000000000e+02,5.417132412583876048e-30,7.542378009972413328e-36
+8.570000000000000000e+02,5.008588481062872492e-30,6.865873788805688541e-36
+8.580000000000000000e+02,4.630855711475978798e-30,6.250047772928058415e-36
+8.590000000000000000e+02,4.281610418103044176e-30,5.689457506133094526e-36
+8.600000000000000000e+02,3.958704160653992273e-30,5.179148686559455718e-36
+8.610000000000000000e+02,3.660150527782627915e-30,4.714611382293479012e-36
+8.620000000000000000e+02,3.384112917347747967e-30,4.291740174159290278e-36
+8.630000000000000000e+02,3.128893238250997222e-30,3.906797873451164519e-36
+8.640000000000000000e+02,2.892921464348054106e-30,3.556382493959390638e-36
+8.650000000000000000e+02,2.674745976172619131e-30,3.237397186399152257e-36
+8.660000000000000000e+02,2.473024631058900199e-30,2.947022869533005224e-36
+8.670000000000000000e+02,2.286516506728380528e-30,2.682693316111304678e-36
+8.680000000000000000e+02,2.114074267550971371e-30,2.442072473447957930e-36
+8.690000000000000000e+02,1.954637106519735833e-30,2.223033818199171963e-36
+8.700000000000000000e+02,1.807224219520790583e-30,2.023641562889310556e-36
+8.710000000000000000e+02,1.670928771754389933e-30,1.842133548094404125e-36
+8.720000000000000000e+02,1.544912319190239323e-30,1.676905669089801227e-36
+8.730000000000000000e+02,1.428399650740224776e-30,1.526497699330453716e-36
+8.740000000000000000e+02,1.320674019418931298e-30,1.389580385476281690e-36
+8.750000000000000000e+02,1.221072733155799623e-30,1.264943699913436125e-36
+8.760000000000000000e+02,1.128983078135034210e-30,1.151486146950928887e-36
+8.770000000000000000e+02,1.043838549585109339e-30,1.048205028184773518e-36
+8.780000000000000000e+02,9.651153668306986622e-31,9.541875809980239400e-37
+8.790000000000000000e+02,8.923292511691324550e-31,8.686029118822025415e-37
+8.800000000000000000e+02,8.250324467496990999e-31,7.906946532893442583e-37
+8.810000000000000000e+02,7.628109661293275618e-31,7.197742791186414593e-37
+8.820000000000000000e+02,7.052820435602809315e-31,6.552150197620942835e-37
+8.830000000000000000e+02,6.520917803431691339e-31,5.964463229326818285e-37
+8.840000000000000000e+02,6.029129677605065505e-31,5.429488113216523590e-37
+8.850000000000000000e+02,5.574430741980590666e-31,4.942496925224019445e-37
+8.860000000000000000e+02,5.154023840714831187e-31,4.499185806556108201e-37
+8.870000000000000000e+02,4.765322771095921522e-31,4.095636927684714212e-37
+8.880000000000000000e+02,4.405936374088601035e-31,3.728283863931978805e-37
+8.890000000000000000e+02,4.073653824723525165e-31,3.393880076648631979e-37
+8.900000000000000000e+02,3.766431031841064397e-31,3.089470221434478561e-37
+8.910000000000000000e+02,3.482378063525791409e-31,2.812364029832055107e-37
+8.920000000000000000e+02,3.219747520877356793e-31,2.560112533669569492e-37
+8.930000000000000000e+02,2.976923788596311747e-31,2.330486421931450719e-37
+8.940000000000000000e+02,2.752413096259103481e-31,2.121456338882895093e-37
+8.950000000000000000e+02,2.544834329141753876e-31,1.931174949329411926e-37
+8.960000000000000000e+02,2.352910532063760773e-31,1.757960612510807811e-37
+8.970000000000000000e+02,2.175461053986853652e-31,1.600282520344676550e-37
+8.980000000000000000e+02,2.011394285044300201e-31,1.456747168676926092e-37
+8.990000000000000000e+02,1.859700941322077993e-31,1.326086041976637655e-37
+9.000000000000000000e+02,1.719447856081609306e-31,1.207144402636736412e-37
+9.010000000000000000e+02,1.589772239229948045e-31,1.098871085804608351e-37
+9.020000000000000000e+02,1.469876369723544675e-31,1.000309209552585452e-37
+9.030000000000000000e+02,1.359022688255152126e-31,9.105877182882339483e-38
+9.040000000000000000e+02,1.256529260035410170e-31,8.289136846678040420e-38
+9.050000000000000000e+02,1.161765579758083117e-31,7.545653019801266059e-38
+9.060000000000000000e+02,1.074148692942175680e-31,6.868855050698459417e-38
+9.070000000000000000e+02,9.931396097908367412e-32,6.252761634240775257e-38
+9.080000000000000000e+02,9.182399895063747150e-32,5.691927951028429750e-38
+9.090000000000000000e+02,8.489890746641799606e-32,5.181397547970424757e-38
+9.100000000000000000e+02,7.849608567871422520e-32,4.716658534875305103e-38
+9.110000000000000000e+02,7.257614556839023892e-32,4.293603709934701399e-38
+9.120000000000000000e+02,6.710266964295809872e-32,3.908494261701392466e-38
+9.130000000000000000e+02,6.204198690834261001e-32,3.557926726773958565e-38
+9.140000000000000000e+02,5.736296573617618961e-32,3.238802911170748755e-38
+9.150000000000000000e+02,5.303682235243271281e-32,2.948302509568390983e-38
+9.160000000000000000e+02,4.903694376927127876e-32,2.683858180424183880e-38
+9.170000000000000000e+02,4.533872407083119257e-32,2.443132856704106088e-38
+9.180000000000000000e+02,4.191941304586618393e-32,2.223999091697112780e-38
+9.190000000000000000e+02,3.875797623604630185e-32,2.024520257380593790e-38
+9.200000000000000000e+02,3.583496553900497159e-32,1.842933429175423034e-38
+9.210000000000000000e+02,3.313239957011412386e-32,1.677633805831431770e-38
+9.220000000000000000e+02,3.063365304701727051e-32,1.527160526752046479e-38
+9.230000000000000000e+02,2.832335451644997599e-32,1.390183761416124558e-38
+9.240000000000000000e+02,2.618729179419979037e-32,1.265492956798291856e-38
+9.250000000000000000e+02,2.421232453649765919e-32,1.151986138922170199e-38
+9.260000000000000000e+02,2.238630340501769200e-32,1.048660173997595477e-38
+9.270000000000000000e+02,2.069799532820892006e-32,9.546019030728663967e-39
+9.280000000000000000e+02,1.913701439919413110e-32,8.689800718535038853e-39
+9.290000000000000000e+02,1.769375798514394401e-32,7.910379843657925574e-39
+9.300000000000000000e+02,1.635934765508817567e-32,7.200868155409146896e-39
+9.310000000000000000e+02,1.512557456277775160e-32,6.554995236184238852e-39
+9.320000000000000000e+02,1.398484894860657941e-32,5.967053085692284113e-39
+9.330000000000000000e+02,1.293015344994755589e-32,5.431845675634227522e-39
+9.340000000000000000e+02,1.195499993268439537e-32,4.944643029010886839e-39
+9.350000000000000000e+02,1.105338957837840392e-32,4.501139418231209030e-39
+9.360000000000000000e+02,1.021977598154368287e-32,4.097415312588765337e-39
+9.370000000000000000e+02,9.449031030014564437e-33,3.729902738812418844e-39
+9.380000000000000000e+02,8.736413358513810084e-33,3.395353748558774285e-39
+9.390000000000000000e+02,8.077539181359001593e-33,3.090811714174270663e-39
+9.400000000000000000e+02,7.468355324877764354e-33,2.813585199047896038e-39
+9.410000000000000000e+02,6.905114293638870231e-33,2.561224171630389232e-39
+9.420000000000000000e+02,6.384351217113014805e-33,2.331498352907031986e-39
+9.430000000000000000e+02,5.902862534947657785e-33,2.122377505967352743e-39
+9.440000000000000000e+02,5.457686289734612648e-33,1.932013493477149723e-39
+9.450000000000000000e+02,5.046083906038599333e-33,1.758723944483442367e-39
+9.460000000000000000e+02,4.665523343596199961e-33,1.600977386204772915e-39
+9.470000000000000000e+02,4.313663521050963525e-33,1.457379709407351128e-39
+9.480000000000000000e+02,3.988339914403457273e-33,1.326661847752433777e-39
+9.490000000000000000e+02,3.687551241583178968e-33,1.207668562229142603e-39
+9.500000000000000000e+02,3.409447151230518935e-33,1.099348231553852754e-39
+9.510000000000000000e+02,3.152316839953447933e-33,1.000743558306896967e-39
+9.520000000000000000e+02,2.914578528037206680e-33,9.109831086708804556e-40
+9.530000000000000000e+02,2.694769728864239262e-33,8.292736110015104642e-40
+9.540000000000000000e+02,2.491538252185408754e-33,7.548929451686845428e-40
+9.550000000000000000e+02,2.303633885897770859e-33,6.871837607098345049e-40
+9.560000000000000000e+02,2.129900705157450427e-33,6.255476673951398543e-40
+9.570000000000000000e+02,1.969269961516585235e-33,5.694399468626737697e-40
+9.580000000000000000e+02,1.820753508340124665e-33,5.183647385869608295e-40
+9.590000000000000000e+02,1.683437722058050316e-33,4.718706576360449506e-40
+9.600000000000000000e+02,1.556477881858702240e-33,4.295468054884350313e-40
+9.610000000000000000e+02,1.439092973248589277e-33,3.910191386547981467e-40
+9.620000000000000000e+02,1.330560883512426761e-33,3.559471630116792656e-40
+9.630000000000000000e+02,1.230213959517090408e-33,3.240209246328410711e-40
+9.640000000000000000e+02,1.137434900532728053e-33,2.949582705242024195e-40
+9.650000000000000000e+02,1.051652960805101525e-33,2.685023550538027927e-40
+9.660000000000000000e+02,9.723404385184094128e-34,2.444193700394029716e-40
+9.670000000000000000e+02,8.990094295501997828e-34,2.224964784330793408e-40
+9.680000000000000000e+02,8.312088260482992356e-34,2.025399333413758195e-40
+9.690000000000000000e+02,7.685215413661154724e-34,1.843733657576398440e-40
+9.700000000000000000e+02,7.105619442850117581e-34,1.678362258740587310e-40
+9.710000000000000000e+02,6.569734867400094168e-34,1.527823641982910864e-40
+9.720000000000000000e+02,6.074265104552259185e-34,1.390787399350543868e-40
+9.730000000000000000e+02,5.616162189964107472e-34,1.266042452178446558e-40
+9.740000000000000000e+02,5.192608027651664957e-34,1.152486347997170745e-40
+9.750000000000000000e+02,4.800997054005032438e-34,1.049115517441324658e-40
+9.760000000000000000e+02,4.438920209232391951e-34,9.550164050523578916e-41
+9.770000000000000000e+02,4.104150117629105159e-34,8.693573955931178385e-41
+9.780000000000000000e+02,3.794627385507292439e-34,7.913814645215695952e-41
+9.790000000000000000e+02,3.508447932494261528e-34,7.203994876710315443e-41
+9.800000000000000000e+02,3.243851278266548579e-34,6.557841510104508388e-41
+9.810000000000000000e+02,2.999209712663701248e-34,5.969644066610914388e-41
+9.820000000000000000e+02,2.773018282559234765e-34,5.434204261739696042e-41
+9.830000000000000000e+02,2.563885533892307176e-34,4.946790064667117179e-41
+9.840000000000000000e+02,2.370524951907461155e-34,4.503093878192809411e-41
+9.850000000000000000e+02,2.191747046945905683e-34,4.099194469693311917e-41
+9.860000000000000000e+02,2.026452037102916178e-34,3.731522316631791997e-41
+9.870000000000000000e+02,1.873623082737024864e-34,3.396828060358615540e-41
+9.880000000000000000e+02,1.732320031212615738e-34,3.092153789409649900e-41
+9.890000000000000000e+02,1.601673633395173984e-34,2.814806898513105893e-41
+9.900000000000000000e+02,1.480880196321207522e-34,2.562336292280520167e-41
+9.910000000000000000e+02,1.369196639147793313e-34,2.332510723277707171e-41
+9.920000000000000000e+02,1.265935921967728856e-34,2.123299073035876659e-41
+9.930000000000000000e+02,1.170462819369582923e-34,1.932852401732907959e-41
+9.940000000000000000e+02,1.082190012743406769e-34,1.759487607905881422e-41
+9.950000000000000000e+02,1.000574477292968590e-34,1.601672553785695053e-41
+9.960000000000000000e+02,9.251141415287310800e-35,1.458012524796127779e-41
+9.970000000000000000e+02,8.553447986919458913e-35,1.327237903551441394e-41
+9.980000000000000000e+02,7.908372511097795828e-35,1.208192949419239551e-41
+9.990000000000000000e+02,7.311946699147700090e-35,1.099825584486695818e-41
+1.000000000000000000e+03,6.760501538862802733e-35,1.001178095661731519e-41
+1.001000000000000000e+03,6.250644723968393326e-35,9.113786707377605693e-42
+1.002000000000000000e+03,5.779239785787638073e-35,8.296336936204469864e-42
+1.003000000000000000e+03,5.343386798734273050e-35,7.552207306246628279e-42
+1.004000000000000000e+03,4.940404540940232861e-35,6.874821458567440406e-42
+1.005000000000000000e+03,4.567814000274970368e-35,6.258192892571609275e-42
+1.006000000000000000e+03,4.223323124291523880e-35,5.696872059393802570e-42
+1.007000000000000000e+03,3.904812720286346753e-35,5.185898200681009183e-42
+1.008000000000000000e+03,3.610323418733888627e-35,4.720755507134884863e-42
+1.009000000000000000e+03,3.338043619900550636e-35,4.297333209359593072e-42
+1.010000000000000000e+03,3.086298349488691546e-35,3.911889248310771831e-42
+1.011000000000000000e+03,2.853538954754662363e-35,3.561017204279045056e-42
+1.012000000000000000e+03,2.638333577715015759e-35,3.241616192137177362e-42
+1.013000000000000000e+03,2.439358346834616703e-35,2.950863456795169159e-42
+1.014000000000000000e+03,2.255389233011711893e-35,2.686189426672462912e-42
+1.015000000000000000e+03,2.085294519760048870e-35,2.445255004717656520e-42
+1.016000000000000000e+03,1.928027841267392914e-35,2.225930896282209984e-42
+1.017000000000000000e+03,1.782621745502833229e-35,2.026278791154475206e-42
+1.018000000000000000e+03,1.648181742775415149e-35,1.844534233448141508e-42
+1.019000000000000000e+03,1.523880803132437187e-35,1.679091027954551990e-42
+1.020000000000000000e+03,1.408954268747771059e-35,1.528487045148018055e-42
+1.021000000000000000e+03,1.302695150002516939e-35,1.391391299393301732e-42
+1.022000000000000000e+03,1.204449776321202306e-35,1.266592186157457772e-42
+1.023000000000000000e+03,1.113613775008997282e-35,1.152986774270200066e-42
+1.024000000000000000e+03,1.029628353352834750e-35,1.049571058601775563e-42
+1.025000000000000000e+03,9.519768611155197109e-36,9.554310870146152215e-43
+1.026000000000000000e+03,8.801816122761713036e-36,8.697348831721796606e-43
+1.027000000000000000e+03,8.138009464655039267e-36,7.917250938214075538e-43
+1.028000000000000000e+03,7.524265120189315940e-36,7.207122955679180846e-43
+1.029000000000000000e+03,6.956807539335710927e-36,6.560689019918156983e-43
+1.030000000000000000e+03,6.432145912761310054e-36,5.972236172571005201e-43
+1.031000000000000000e+03,5.947052697536977159e-36,5.436563871977430254e-43
+1.032000000000000000e+03,5.498543762372166775e-36,4.948938032597342611e-43
+1.033000000000000000e+03,5.083860030237156132e-36,4.505049186809247109e-43
+1.034000000000000000e+03,4.700450505443042596e-36,4.100974399333655548e-43
+1.035000000000000000e+03,4.345956580769412490e-36,3.733142597695323249e-43
+1.036000000000000000e+03,4.018197528101134541e-36,3.398303012326004080e-43
+1.037000000000000000e+03,3.715157083318025444e-36,3.093496447393544902e-43
+1.038000000000000000e+03,3.434971042911981797e-36,2.816029128457928077e-43
+1.039000000000000000e+03,3.175915796030412905e-36,2.563448895829553354e-43
+1.040000000000000000e+03,2.936397721398185870e-36,2.333523533234267206e-43
+1.041000000000000000e+03,2.714943383892501636e-36,2.124221040262207027e-43
+1.042000000000000000e+03,2.510190470462547971e-36,1.933691674254787449e-43
+1.043000000000000000e+03,2.320879409635008348e-36,1.760251602922044574e-43
+1.044000000000000000e+03,2.145845623051570084e-36,1.602368023218454354e-43
+1.045000000000000000e+03,1.984012361371989080e-36,1.458645614962516184e-43
+1.046000000000000000e+03,1.834384080472249585e-36,1.327814209482224887e-43
+1.047000000000000000e+03,1.696040317189895265e-36,1.208717564305853117e-43
+1.048000000000000000e+03,1.568130026942346078e-36,1.100303144693099584e-43
+1.049000000000000000e+03,1.449866348385228169e-36,1.001612821698982602e-43
+1.050000000000000000e+03,1.340521762904296915e-36,9.117744045634221948e-44
+1.051000000000000000e+03,1.239423619164228407e-36,8.299939325924743137e-44
+1.052000000000000000e+03,1.145949995182454497e-36,7.555486584098360949e-44
+1.053000000000000000e+03,1.059525872473021200e-36,6.877806605668083973e-44
+1.054000000000000000e+03,9.796195987251581561e-37,6.260910290613306258e-44
+1.055000000000000000e+03,9.057396172559019734e-37,5.699345723795608937e-44
+1.056000000000000000e+03,8.374314431177779922e-37,5.188149992828817988e-44
+1.057000000000000000e+03,7.742748672593237584e-37,4.722805327584752699e-44
+1.058000000000000000e+03,7.158813715394728108e-37,4.299199173711936601e-44
+1.059000000000000000e+03,6.618917386938761010e-37,3.913587847309743079e-44
+1.060000000000000000e+03,6.119738425503172036e-37,3.562563449551996487e-44
+1.061000000000000000e+03,5.658206048995749158e-37,3.243023748862202422e-44
+1.062000000000000000e+03,5.231481064529283180e-37,2.952144764469198922e-44
+1.063000000000000000e+03,4.836938402656074424e-37,2.687355809047210397e-44
+1.064000000000000000e+03,4.472150968818212458e-37,2.446316769875000200e-44
+1.065000000000000000e+03,4.134874712673501194e-37,2.226897427733435889e-44
+1.066000000000000000e+03,3.823034823447559437e-37,2.027158630768487069e-44
+1.067000000000000000e+03,3.534712966391829254e-37,1.845335156941529315e-44
+1.068000000000000000e+03,3.268135481829441865e-37,1.679820113610669937e-44
+1.069000000000000000e+03,3.021662474193790013e-37,1.529150736372392481e-44
+1.070000000000000000e+03,2.793777723939404585e-37,1.391995461658209339e-44
+1.071000000000000000e+03,2.583079360265922263e-37,1.267142158838928891e-44
+1.072000000000000000e+03,2.388271237277760316e-37,1.153487417835569008e-44
+1.073000000000000000e+03,2.208154960527827717e-37,1.050026797564799748e-44
+1.074000000000000000e+03,2.041622514895489361e-37,9.558459490377897819e-45
+1.075000000000000000e+03,1.887649448448078103e-37,8.701125346618185579e-45
+1.076000000000000000e+03,1.745288570354904597e-37,7.920688723300671725e-45
+1.077000000000000000e+03,1.613664124086041343e-37,7.210252392905265454e-45
+1.078000000000000000e+03,1.491966400050889882e-37,6.563537766161831903e-45
+1.079000000000000000e+03,1.379446754535450240e-37,5.974829404061066144e-45
+1.080000000000000000e+03,1.275413004296550090e-37,5.438924506792123370e-45
+1.081000000000000000e+03,1.179225168481809575e-37,4.951086933206369238e-45
+1.082000000000000000e+03,1.090291531681471067e-37,4.507005344449021237e-45
+1.083000000000000000e+03,1.008065003892990739e-37,4.102755101845242844e-45
+1.084000000000000000e+03,9.320397550062392225e-38,3.734763582308372152e-45
+1.085000000000000000e+03,8.617481031057527507e-38,3.399778604738910769e-45
+1.086000000000000000e+03,7.967576374479889964e-38,3.094839688378993046e-45
+1.087000000000000000e+03,7.366685584149134574e-38,2.817251889112703188e-45
+1.088000000000000000e+03,6.811112180804567333e-38,2.564561982487170728e-45
+1.089000000000000000e+03,6.297438462600359019e-38,2.334536782967586942e-45
+1.090000000000000000e+03,5.822504480546260802e-38,2.125143407820066847e-45
+1.091000000000000000e+03,5.383388599558148529e-38,1.934531311200957977e-45
+1.092000000000000000e+03,4.977389525535184700e-38,1.761015929675914748e-45
+1.093000000000000000e+03,4.602009687901924390e-38,1.603063794634119426e-45
+1.094000000000000000e+03,4.254939875388994717e-38,1.459278980025829132e-45
+1.095000000000000000e+03,3.934045030537296728e-38,1.328390765653394699e-45
+1.096000000000000000e+03,3.637351115538501988e-38,1.209242406987852716e-45
+1.097000000000000000e+03,3.363032968614047661e-38,1.100780912263065569e-45
+1.098000000000000000e+03,3.109403076230267998e-38,1.002047736500578569e-45
+1.099000000000000000e+03,2.874901192079222031e-38,9.121703102224456452e-46
+1.100000000000000000e+03,2.658084738964973458e-38,8.303543279854836481e-46
+1.101000000000000000e+03,2.457619934551091144e-38,7.558767285860054775e-46
+1.102000000000000000e+03,2.272273586377374787e-38,6.880793048962855044e-46
+1.103000000000000000e+03,2.100905505672264293e-38,6.263628868588608935e-46
+1.104000000000000000e+03,1.942461493292646734e-38,5.701820462298343873e-46
+1.105000000000000000e+03,1.795966854643126668e-38,5.190402762737335447e-46
+1.106000000000000000e+03,1.660520403680829429e-38,4.724856038096364830e-46
+1.107000000000000000e+03,1.535288919119973446e-38,4.301065948293041810e-46
+1.108000000000000000e+03,1.419502018733182491e-38,3.915287183865013836e-46
+1.109000000000000000e+03,1.312447420217537208e-38,3.564110366227051206e-46
+1.110000000000000000e+03,1.213466559471968464e-38,3.244431916768754828e-46
+1.111000000000000000e+03,1.121950539331053406e-38,2.953426628505587689e-46
+1.112000000000000000e+03,1.037336383833276528e-38,2.688522697882086962e-46
+1.113000000000000000e+03,9.591035749810219352e-39,2.447378996066160806e-46
+1.114000000000000000e+03,8.867708506879308768e-39,2.227864378866624130e-46
+1.115000000000000000e+03,8.198932442154192336e-39,2.028038852421609469e-46
+1.116000000000000000e+03,7.580593468860451350e-39,1.846136428207504055e-46
+1.117000000000000000e+03,7.008887772349061563e-39,1.680549515846344886e-46
+1.118000000000000000e+03,6.480298410299635722e-39,1.529814715781114102e-46
+1.119000000000000000e+03,5.991573677667464604e-39,1.392599886259127329e-46
+1.120000000000000000e+03,5.539707103281025758e-39,1.267692370326490169e-46
+1.121000000000000000e+03,5.121918955036345778e-39,1.153988278787628974e-46
+1.122000000000000000e+03,4.735639139914676575e-39,1.050482734416285933e-46
+1.123000000000000000e+03,4.378491393628988366e-39,9.562609912000667354e-47
+1.124000000000000000e+03,4.048278662640779764e-39,8.704903501332066380e-47
+1.125000000000000000e+03,3.742969588621122079e-39,7.924128001123369364e-47
+1.126000000000000000e+03,3.460686012213266565e-39,7.213383188978340420e-47
+1.127000000000000000e+03,3.199691419224358624e-39,6.566387749372407347e-47
+1.128000000000000000e+03,2.958380258170345798e-39,5.977423761569817987e-47
+1.129000000000000000e+03,2.735268063460203845e-39,5.441286166628661367e-47
+1.130000000000000000e+03,2.528982323459830352e-39,4.953236766899180834e-47
+1.131000000000000000e+03,2.338254037259312273e-39,4.508962351480788545e-47
+1.132000000000000000e+03,2.161909908203531083e-39,4.104536577563663624e-47
+1.133000000000000000e+03,1.998865126163508089e-39,3.736385270776429989e-47
+1.134000000000000000e+03,1.848116694146955133e-39,3.401254837875425705e-47
+1.135000000000000000e+03,1.708737258196217619e-39,3.096183512619142232e-47
+1.136000000000000000e+03,1.579869402616714752e-39,2.818475180707874237e-47
+1.137000000000000000e+03,1.460720375442203246e-39,2.565675552463144416e-47
+1.138000000000000000e+03,1.350557211689787892e-39,2.335550472668623960e-47
+1.139000000000000000e+03,1.248702224404252854e-39,2.126066175883286538e-47
+1.140000000000000000e+03,1.154528835754555341e-39,1.935371312729657205e-47
+1.141000000000000000e+03,1.067457722536454658e-39,1.761780588311537219e-47
+1.142000000000000000e+03,9.869532523698185934e-40,1.603759868163815629e-47
+1.143000000000000000e+03,9.125201886673418545e-40,1.459912620105430705e-47
+1.144000000000000000e+03,8.437006441045345636e-40,1.328967572173608989e-47
+1.145000000000000000e+03,7.800712638500358924e-40,1.209767477564150542e-47
+1.146000000000000000e+03,7.212406212282063358e-40,1.101258887286633623e-47
+1.147000000000000000e+03,6.668468097930659571e-40,1.002482840148483803e-47
+1.148000000000000000e+03,6.165552170008657624e-40,9.125663877894433339e-48
+1.149000000000000000e+03,5.700564657855207087e-40,8.307148798673950809e-48
+1.150000000000000000e+03,5.270645113743677433e-40,7.562049412149997490e-48
+1.151000000000000000e+03,4.873148816363394431e-40,6.883780789014581877e-48
+1.152000000000000000e+03,4.505630501378289329e-40,6.266348627009864281e-48
+1.153000000000000000e+03,4.165829318978106003e-40,5.704296275368399098e-48
+1.154000000000000000e+03,3.851654925886431071e-40,5.192656510831264355e-48
+1.155000000000000000e+03,3.561174626267297615e-40,4.726907639056197828e-48
+1.156000000000000000e+03,3.292601482426768554e-40,4.302933533454721846e-48
+1.157000000000000000e+03,3.044283322169561332e-40,3.916987258296842885e-48
+1.158000000000000000e+03,2.814692575187993490e-40,3.565657954595743560e-48
+1.159000000000000000e+03,2.602416875960293560e-40,3.245840696122217641e-48
+1.160000000000000000e+03,2.406150375349817053e-40,2.954709049145916525e-48
+1.161000000000000000e+03,2.224685707457885200e-40,2.689690093397004971e-48
+1.162000000000000000e+03,2.056906562312361624e-40,2.448441683491326689e-48
+1.163000000000000000e+03,1.901780818701866208e-40,2.228831749864005861e-48
+1.164000000000000000e+03,1.758354194911236744e-40,2.028919456279728985e-48
+1.165000000000000000e+03,1.625744378299270487e-40,1.846938047397074051e-48
+1.166000000000000000e+03,1.503135597606433782e-40,1.681279234799040396e-48
+1.167000000000000000e+03,1.389773604602760513e-40,1.530478983499316984e-48
+1.168000000000000000e+03,1.284961034204872585e-40,1.393204573309965481e-48
+1.169000000000000000e+03,1.188053114519196199e-40,1.268242820723870376e-48
+1.170000000000000000e+03,1.098453700420707826e-40,1.154489357220772068e-48
+1.171000000000000000e+03,1.015611606267499383e-40,1.050938869242159647e-48
+1.172000000000000000e+03,9.390172151909528269e-41,9.566762135796647142e-49
+1.173000000000000000e+03,8.681993441031205741e-41,8.708683296575476033e-49
+1.174000000000000000e+03,8.027223451359380318e-41,7.927568772330335157e-49
+1.175000000000000000e+03,7.421834256811020741e-41,7.216515344488440799e-49
+1.176000000000000000e+03,6.862101705446532303e-41,6.569238970086990467e-49
+1.177000000000000000e+03,6.344582509731894028e-41,5.980019245586195412e-49
+1.178000000000000000e+03,5.866093064584860716e-41,5.443648851932122512e-49
+1.179000000000000000e+03,5.423689862900726534e-41,4.955387534080934686e-49
+1.180000000000000000e+03,5.014651388080951721e-41,4.510920208273368169e-49
+1.181000000000000000e+03,4.636461372172395160e-41,4.106318826824656938e-49
+1.182000000000000000e+03,4.286793316628395778e-41,3.738007663405119852e-49
+1.183000000000000000e+03,3.963496180467390731e-41,3.402731712013761238e-49
+1.184000000000000000e+03,3.664581147787849158e-41,3.097527920367248756e-49
+1.185000000000000000e+03,3.388209393237937795e-41,2.819699003473982034e-49
+1.186000000000000000e+03,3.132680770176356271e-41,2.566789605967338059e-49
+1.187000000000000000e+03,2.896423351938791925e-41,2.336564602528419240e-49
+1.188000000000000000e+03,2.677983761870530332e-41,2.126989344625771247e-49
+1.189000000000000000e+03,2.476018232639109931e-41,1.936211678999193048e-49
+1.190000000000000000e+03,2.289284339827068962e-41,1.762545578973020407e-49
+1.191000000000000000e+03,2.116633358952059010e-41,1.604456243938725513e-49
+1.192000000000000000e+03,1.957003198898002584e-41,1.460546535320736658e-49
+1.193000000000000000e+03,1.809411868285573873e-41,1.329544629151573040e-49
+1.194000000000000000e+03,1.672951434589494838e-41,1.210292776133701113e-49
+1.195000000000000000e+03,1.546782438841264787e-41,1.101737069853883096e-49
+1.196000000000000000e+03,1.430128731558071510e-41,1.002918132724698152e-49
+1.197000000000000000e+03,1.322272698130748805e-41,9.129626373390601447e-50
+1.198000000000000000e+03,1.222550844298574732e-41,8.310755883061585162e-50
+1.199000000000000000e+03,1.130349714554392308e-41,7.565332963586734405e-50
+1.200000000000000000e+03,1.045102118371395157e-41,6.886769826386334520e-50
+1.201000000000000000e+03,9.662836410366824656e-42,6.269069566389639054e-50
+1.202000000000000000e+03,8.934094176271687532e-42,5.706773163472366095e-50
+1.203000000000000000e+03,8.260311502827311821e-42,5.194911237535275516e-50
+1.204000000000000000e+03,7.637343504276291641e-42,4.728960130850896776e-50
+1.205000000000000000e+03,7.061357889753403644e-42,4.304801929548942513e-50
+1.206000000000000000e+03,6.528811388313783674e-42,3.918688070925625175e-50
+1.207000000000000000e+03,6.036427951913978885e-42,3.567206214949731258e-50
+1.208000000000000000e+03,5.581178602260014764e-42,3.247250087188091058e-50
+1.209000000000000000e+03,5.160262797545429561e-42,2.955992026631871362e-50
+1.210000000000000000e+03,4.771091204454247197e-42,2.690857995811972209e-50
+1.211000000000000000e+03,4.411269769448325635e-42,2.449504832350772243e-50
+1.212000000000000000e+03,4.078584991349915988e-42,2.229799540907893572e-50
+1.213000000000000000e+03,3.770990304622687558e-42,2.029800442508804614e-50
+1.214000000000000000e+03,3.486593489584656121e-42,1.847740014661312268e-50
+1.215000000000000000e+03,3.223645032105235821e-42,1.682009270606279604e-50
+1.216000000000000000e+03,2.980527361179367504e-42,1.531143539652189151e-50
+1.217000000000000000e+03,2.755744898171170466e-42,1.393809522924683849e-50
+1.218000000000000000e+03,2.547914856514354126e-42,1.268793510134789778e-50
+1.219000000000000000e+03,2.355758735271483920e-42,1.154990653229431911e-50
+1.220000000000000000e+03,2.178094454223595720e-42,1.051395202128384820e-50
+1.221000000000000000e+03,2.013829082107989290e-42,9.570916162548369746e-51
+1.222000000000000000e+03,1.861952113270282839e-42,8.712464733060750609e-51
+1.223000000000000000e+03,1.721529251371574234e-42,7.931011037570019468e-51
+1.224000000000000000e+03,1.591696661909674707e-42,7.219648860025850346e-51
+1.225000000000000000e+03,1.471655658198032864e-42,6.572091428842926260e-51
+1.226000000000000000e+03,1.360667788112228508e-42,5.982615856599344362e-51
+1.227000000000000000e+03,1.258050291379449365e-42,5.446012563147780272e-51
+1.228000000000000000e+03,1.163171899465423879e-42,4.957539235156965947e-51
+1.229000000000000000e+03,1.075448952221516062e-42,4.512878915195738464e-51
+1.230000000000000000e+03,9.943418074025931253e-43,4.108101849964106844e-51
+1.231000000000000000e+03,9.193515209683241579e-43,3.739630760500199872e-51
+1.232000000000000000e+03,8.500167777462988439e-43,3.404209227432248563e-51
+1.233000000000000000e+03,7.859110535752247631e-43,3.098872911876638707e-51
+1.234000000000000000e+03,7.266399914709318142e-43,2.820923357641669206e-51
+1.235000000000000000e+03,6.718389756740290894e-43,2.567904143209707465e-51
+1.236000000000000000e+03,6.211708886556355401e-43,2.337579172738094629e-51
+1.237000000000000000e+03,5.743240372830803646e-43,2.127912914221501551e-51
+1.238000000000000000e+03,5.310102353878950723e-43,1.937052410167941035e-51
+1.239000000000000000e+03,4.909630309408862943e-43,1.763310901804533722e-51
+1.240000000000000000e+03,4.539360669283184965e-43,1.605152922090087905e-51
+1.241000000000000000e+03,4.197015658459180569e-43,1.461180725791215455e-51
+1.242000000000000000e+03,3.880489284878391323e-43,1.330121936696038743e-51
+1.243000000000000000e+03,3.587834384107162071e-43,1.210818302795503026e-51
+1.244000000000000000e+03,3.317250641032248697e-43,1.102215460054932700e-51
+1.245000000000000000e+03,3.067073514924036303e-43,1.003353614311256939e-51
+1.246000000000000000e+03,2.835763999738429779e-43,9.133590589459735365e-52
+1.247000000000000000e+03,2.621899156666139653e-43,8.314364533697529730e-52
+1.248000000000000000e+03,2.424163360688972115e-43,7.568617940788981493e-52
+1.249000000000000000e+03,2.241340207294305842e-43,6.889760161641428367e-52
+1.250000000000000000e+03,2.072305029561341737e-43,6.271791687240720853e-52
+1.251000000000000000e+03,1.916017979586147365e-43,5.709251127077040059e-52
+1.252000000000000000e+03,1.771517631684955989e-43,5.197166943274293972e-52
+1.253000000000000000e+03,1.637915068024870637e-43,4.731013513867276565e-52
+1.254000000000000000e+03,1.514388410298371583e-43,4.306671136927821577e-52
+1.255000000000000000e+03,1.400177763802833194e-43,3.920389622071898638e-52
+1.256000000000000000e+03,1.294580542822324411e-43,3.568755147580800793e-52
+1.257000000000000000e+03,1.196947148555144624e-43,3.248660090231987940e-52
+1.258000000000000000e+03,1.106676972999231516e-43,2.957275561205242299e-52
+1.259000000000000000e+03,1.023214704212411902e-43,2.692026405347092362e-52
+1.260000000000000000e+03,9.460469102190492231e-44,2.450568442844858647e-52
+1.261000000000000000e+03,8.746988805481566755e-44,2.230767752180676731e-52
+1.262000000000000000e+03,8.087317059732645876e-44,2.030681811274867182e-52
+1.263000000000000000e+03,7.477395784896371030e-44,1.848542330151357935e-52
+1.264000000000000000e+03,6.913472949190194501e-44,1.682739623405645309e-52
+1.265000000000000000e+03,6.392079487851661300e-44,1.531808384364972627e-52
+1.266000000000000000e+03,5.910007962611599859e-44,1.394414735217291320e-52
+1.267000000000000000e+03,5.464292830606080351e-44,1.269344438663031470e-52
+1.268000000000000000e+03,5.052192201348428434e-44,1.155492166908083442e-52
+1.269000000000000000e+03,4.671170969535095370e-44,1.051851733160961942e-52
+1.270000000000000000e+03,4.318885219925665489e-44,9.575071993038706152e-53
+1.271000000000000000e+03,3.993167808359797827e-44,8.716247811500545882e-53
+1.272000000000000000e+03,3.692015030210835938e-44,7.934454797491153374e-53
+1.273000000000000000e+03,3.413574294264753279e-44,7.222783736181116027e-53
+1.274000000000000000e+03,3.156132726198529852e-44,6.574945126177788058e-53
+1.275000000000000000e+03,2.918106631549641723e-44,5.985213595098623184e-53
+1.276000000000000000e+03,2.698031753357369895e-44,5.448377300721100220e-53
+1.277000000000000000e+03,2.494554264543437434e-44,4.959691870532784835e-53
+1.278000000000000000e+03,2.306422439620381915e-44,4.514838472617038047e-53
+1.279000000000000000e+03,2.132478954494950452e-44,4.109885647318041212e-53
+1.280000000000000000e+03,1.971653766996974556e-44,3.741254562367558621e-53
+1.281000000000000000e+03,1.822957534337797361e-44,3.405687384409341734e-53
+1.282000000000000000e+03,1.685475527004149408e-44,3.100218487400875733e-53
+1.283000000000000000e+03,1.558362001647957372e-44,2.822148243441678492e-53
+1.284000000000000000e+03,1.440834998356095518e-44,2.569019164400298069e-53
+1.285000000000000000e+03,1.332171530294275445e-44,2.338594183488857202e-53
+1.286000000000000000e+03,1.231703136133834706e-44,2.128836884844533730e-53
+1.287000000000000000e+03,1.138811767901089799e-44,1.937893506394345657e-53
+1.288000000000000000e+03,1.052925988952803340e-44,1.764076556950311450e-53
+1.289000000000000000e+03,9.735174586890512657e-45,1.605849902749199357e-53
+1.290000000000000000e+03,9.000976823783862405e-45,1.461815191636386610e-53
+1.291000000000000000e+03,8.322150061016199367e-45,1.330699494915806048e-53
+1.292000000000000000e+03,7.694518383278864337e-45,1.211344057648596762e-53
+1.293000000000000000e+03,7.114220810311478314e-45,1.102694057979940083e-53
+1.294000000000000000e+03,6.577687545442037522e-45,1.003789284990230926e-53
+1.295000000000000000e+03,6.081618015391571671e-45,9.137556526848933069e-54
+1.296000000000000000e+03,5.622960566250150895e-45,8.317974751261874668e-54
+1.297000000000000000e+03,5.198893690722610766e-45,7.571904344376038102e-54
+1.298000000000000000e+03,4.806808671158826767e-45,6.892751795343421628e-54
+1.299000000000000000e+03,4.444293531594770180e-45,6.274514990076124085e-54
+1.300000000000000000e+03,4.109118200082974913e-45,5.711730166649419336e-54
+1.301000000000000000e+03,3.799220790035050512e-45,5.199423628473433318e-54
+1.302000000000000000e+03,3.512694916184958513e-45,4.733067788492317913e-54
+1.303000000000000000e+03,3.247777967144103590e-45,4.308541155943631572e-54
+1.304000000000000000e+03,3.002840262405280743e-45,3.922091912056335685e-54
+1.305000000000000000e+03,2.776375027093180119e-45,3.570304752780864131e-54
+1.306000000000000000e+03,2.566989122788811626e-45,3.250070705519639188e-54
+1.307000000000000000e+03,2.373394477407867574e-45,2.958559653107923980e-54
+1.308000000000000000e+03,2.194400161411823975e-45,2.693195322222563945e-54
+1.309000000000000000e+03,2.028905061607525684e-45,2.451632515174034203e-54
+1.310000000000000000e+03,1.875891107467048335e-45,2.231736383864824526e-54
+1.311000000000000000e+03,1.734417008297977891e-45,2.031563562744019949e-54
+1.312000000000000000e+03,1.603612462737872031e-45,1.849344994018416048e-54
+1.313000000000000000e+03,1.482672804951195220e-45,1.683470293334780193e-54
+1.314000000000000000e+03,1.370854054594082335e-45,1.532473517762965022e-54
+1.315000000000000000e+03,1.267468340096060838e-45,1.395020210301846341e-54
+1.316000000000000000e+03,1.171879667103986874e-45,1.269895606412423711e-54
+1.317000000000000000e+03,1.083500006057484028e-45,1.155993898351241448e-54
+1.318000000000000000e+03,1.001785674827648801e-45,1.052308462425928894e-54
+1.319000000000000000e+03,9.262339941663497032e-46,9.579229628050860846e-55
+1.320000000000000000e+03,8.563801953915297354e-46,8.720032532607820075e-55
+1.321000000000000000e+03,7.917945612856986155e-46,7.937900052742748780e-55
+1.322000000000000000e+03,7.320797826191916055e-46,7.225919973545034618e-55
+1.323000000000000000e+03,6.768685140366636077e-46,6.577800062629386506e-55
+1.324000000000000000e+03,6.258211142712555738e-46,5.987812461573601172e-55
+1.325000000000000000e+03,5.786235567850567365e-46,5.450743065097742570e-55
+1.326000000000000000e+03,5.349854979828576443e-46,4.961845440614078267e-55
+1.327000000000000000e+03,4.946384911153650339e-46,4.516798880906566190e-55
+1.328000000000000000e+03,4.573343348845781509e-46,4.111670219222636065e-55
+1.329000000000000000e+03,4.228435465923700593e-46,3.742879069313219056e-55
+1.330000000000000000e+03,3.909539504396405053e-46,3.407166183223613764e-55
+1.331000000000000000e+03,3.614693722917539860e-46,3.101564647193503626e-55
+1.332000000000000000e+03,3.342084328808113827e-46,2.823373661104852494e-55
+1.333000000000000000e+03,3.090034320210532669e-46,2.570134669749247345e-55
+1.334000000000000000e+03,2.856993169733744913e-46,2.339609634971996672e-55
+1.335000000000000000e+03,2.641527286127044591e-46,2.129761256668999854e-55
+1.336000000000000000e+03,2.442311195306107832e-46,1.938734967836920175e-55
+1.337000000000000000e+03,2.258119386479306316e-46,1.764842544554648053e-55
+1.338000000000000000e+03,2.087818773215172175e-46,1.606547186047412763e-55
+1.339000000000000000e+03,1.930361723073428250e-46,1.462449932975821732e-55
+1.340000000000000000e+03,1.784779612920446117e-46,1.331277303919722012e-55
+1.341000000000000000e+03,1.650176870283519305e-46,1.211870040792066466e-55
+1.342000000000000000e+03,1.525725464088505178e-46,1.103172863719101751e-55
+1.343000000000000000e+03,1.410659810889322907e-46,1.004225144843727348e-55
+1.344000000000000000e+03,1.304272065254634340e-46,9.141524186305613616e-56
+1.345000000000000000e+03,1.205907765339361220e-46,8.321586536435001509e-56
+1.346000000000000000e+03,1.114961806854188670e-46,7.575192174967157382e-56
+1.347000000000000000e+03,1.030874720666331993e-46,6.895744728056123121e-56
+1.348000000000000000e+03,9.531292311323675854e-47,6.277239475409079752e-56
+1.349000000000000000e+03,8.812470739914691073e-47,5.714210282656705742e-56
+1.350000000000000000e+03,8.147860542435452619e-47,5.201681293557986858e-56
+1.351000000000000000e+03,7.533373259134163426e-47,4.735122955113169485e-56
+1.352000000000000000e+03,6.965228769670992551e-47,4.310411986948797542e-56
+1.353000000000000000e+03,6.439932039080777895e-47,3.923794941199753045e-56
+1.354000000000000000e+03,5.954251617486800557e-47,3.571855030841960873e-56
+1.355000000000000000e+03,5.505199761301315055e-47,3.251481933316890078e-56
+1.356000000000000000e+03,5.090014053625741938e-47,2.959844302581918758e-56
+1.357000000000000000e+03,4.706140410785702652e-47,2.694364746658681887e-56
+1.358000000000000000e+03,4.351217370461645394e-47,2.452697049538834704e-56
+1.359000000000000000e+03,4.023061564762413914e-47,2.232705436142886148e-56
+1.360000000000000000e+03,3.719654288875814865e-47,2.032445697082437758e-56
+1.361000000000000000e+03,3.439129082671429490e-47,1.850148006413730093e-56
+1.362000000000000000e+03,3.179760248862060973e-47,1.684201280531386227e-56
+1.363000000000000000e+03,2.939952237090630420e-47,1.533138939971516784e-56
+1.364000000000000000e+03,2.718229828637987148e-47,1.395625948292457208e-56
+1.365000000000000000e+03,2.513229061370470602e-47,1.270447013486857600e-56
+1.366000000000000000e+03,2.323688839100846504e-47,1.156495847653479167e-56
+1.367000000000000000e+03,2.148443173746122826e-47,1.052765390009346456e-56
+1.368000000000000000e+03,1.986414012558785164e-47,9.583389068368253589e-57
+1.369000000000000000e+03,1.836604606306503898e-47,8.723818897095843988e-57
+1.370000000000000000e+03,1.698093377604204682e-47,7.941346803974099986e-57
+1.371000000000000000e+03,1.570028251678051013e-47,7.229057572708663633e-57
+1.372000000000000000e+03,1.451621414686270499e-47,6.580656238735762081e-57
+1.373000000000000000e+03,1.342144467351853033e-47,5.990412456514149555e-57
+1.374000000000000000e+03,1.240923944093580369e-47,5.453109856723637027e-57
+1.375000000000000000e+03,1.147337170090999613e-47,4.963999945806636737e-57
+1.376000000000000000e+03,1.060808430797071395e-47,4.518760140433717764e-57
+1.377000000000000000e+03,9.808054303347253323e-48,4.113455566014211996e-57
+1.378000000000000000e+03,9.068360169906327352e-48,3.744504281643335569e-57
+1.379000000000000000e+03,8.384451556623073819e-48,3.408645624153760747e-57
+1.380000000000000000e+03,7.752121286343354565e-48,3.102911391508265481e-57
+1.381000000000000000e+03,7.167479474636239665e-48,2.824599610862173029e-57
+1.382000000000000000e+03,6.626929600525300868e-48,2.571250659466748153e-57
+1.383000000000000000e+03,6.127146381894294299e-48,2.340625527378851998e-57
+1.384000000000000000e+03,5.665055319462647956e-48,2.130686029869107496e-57
+1.385000000000000000e+03,5.237813783494118616e-48,1.939576794654246496e-57
+1.386000000000000000e+03,4.842793526888851672e-48,1.765608864761902917e-57
+1.387000000000000000e+03,4.477564517085871688e-48,1.607244772116138772e-57
+1.388000000000000000e+03,4.139879987315075259e-48,1.463084949929165234e-57
+1.389000000000000000e+03,3.827662615239414157e-48,1.331855363816699392e-57
+1.390000000000000000e+03,3.538991743961969149e-48,1.212396252325021837e-57
+1.391000000000000000e+03,3.272091566787057168e-48,1.103651877362638232e-57
+1.392000000000000000e+03,3.025320203051039543e-48,1.004661193953888230e-57
+1.393000000000000000e+03,2.797159597821331610e-48,9.145493568577525519e-58
+1.394000000000000000e+03,2.586206183330110004e-48,8.325199889897588423e-58
+1.395000000000000000e+03,2.391162244694383875e-48,7.578481433182070709e-58
+1.396000000000000000e+03,2.210827936808032923e-48,6.898738960343675054e-58
+1.397000000000000000e+03,2.044093903295789042e-48,6.279965143752959703e-58
+1.398000000000000000e+03,1.889934452123652572e-48,5.716691475566219798e-58
+1.399000000000000000e+03,1.747401245884504507e-48,5.203939938953437172e-58
+1.400000000000000000e+03,1.615617467943244904e-48,4.737179014117148902e-58
+1.401000000000000000e+03,1.493772428554091370e-48,4.312283630295894980e-58
+1.402000000000000000e+03,1.381116577768255011e-48,3.925498709823102759e-58
+1.403000000000000000e+03,1.276956894453215258e-48,3.573405982056307891e-58
+1.404000000000000000e+03,1.180652623058466403e-48,3.252893773889746499e-58
+1.405000000000000000e+03,1.091611331901468471e-48,2.961129509869288447e-58
+1.406000000000000000e+03,1.009285268726065110e-48,2.695534678875798158e-58
+1.407000000000000000e+03,9.331679911137016395e-49,2.453762046139882795e-58
+1.408000000000000000e+03,8.627912510189602514e-49,2.233674909197489307e-58
+1.409000000000000000e+03,7.977221142641729779e-49,2.033328214456368650e-58
+1.410000000000000000e+03,7.375602972730167140e-49,1.850951367488715246e-58
+1.411000000000000000e+03,6.819357046598204932e-49,1.684932585133249756e-58
+1.412000000000000000e+03,6.305061525264656190e-49,1.533804651116013093e-58
+1.413000000000000000e+03,5.829552634614375742e-49,1.396231949303261431e-58
+1.414000000000000000e+03,5.389905202917500873e-49,1.270998659990197762e-58
+1.415000000000000000e+03,4.983414666151184107e-49,1.156998014909344752e-58
+1.416000000000000000e+03,4.607580430425400868e-49,1.053222515997371773e-58
+1.417000000000000000e+03,4.260090489165618546e-49,9.587550314775177367e-59
+1.418000000000000000e+03,3.938807200421195843e-49,8.727606905678319889e-59
+1.419000000000000000e+03,3.641754136806669030e-49,7.944795051834894780e-59
+1.420000000000000000e+03,3.367103927181423402e-49,7.232196534263213428e-59
+1.421000000000000000e+03,3.113167015273012136e-49,6.583513655035099440e-59
+1.422000000000000000e+03,2.878381266092019197e-49,5.993013580410005540e-59
+1.423000000000000000e+03,2.661302356199777895e-49,5.455477676044596547e-59
+1.424000000000000000e+03,2.460594888713386015e-49,4.966155386516712175e-59
+1.425000000000000000e+03,2.275024178390659791e-49,4.520722251568305350e-59
+1.426000000000000000e+03,2.103448656259065563e-49,4.115241688029294811e-59
+1.427000000000000000e+03,1.944812847065183629e-49,3.746130199664144336e-59
+1.428000000000000000e+03,1.798140876343761949e-49,3.410125707478550100e-59
+1.429000000000000000e+03,1.662530467164225001e-49,3.104258720598836112e-59
+1.430000000000000000e+03,1.537147389624728662e-49,2.825826092944563495e-59
+1.431000000000000000e+03,1.421220328948544621e-49,2.572367133763228659e-59
+1.432000000000000000e+03,1.314036140613509534e-49,2.341641860900978450e-59
+1.433000000000000000e+03,1.214935463325308388e-49,2.131611204619169322e-59
+1.434000000000000000e+03,1.123308662847219045e-49,1.940418987005003063e-59
+1.435000000000000000e+03,1.038592081734078501e-49,1.766375517716470949e-59
+1.436000000000000000e+03,9.602645719001744946e-50,1.607942661086821684e-59
+1.437000000000000000e+03,8.878442886903523932e-50,1.463720242616030400e-59
+1.438000000000000000e+03,8.208857267328438229e-50,1.332433674715622765e-59
+1.439000000000000000e+03,7.589769793391378783e-50,1.212922692346684704e-59
+1.440000000000000000e+03,7.017372045917267976e-50,1.104131099000871498e-59
+1.441000000000000000e+03,6.488142825319876346e-50,1.005097432402905678e-59
+1.442000000000000000e+03,5.998826490358508468e-50,9.149464674412612051e-60
+1.443000000000000000e+03,5.546412930521889177e-50,8.328814812330492909e-60
+1.444000000000000000e+03,5.128119048834488423e-50,7.581772119640349368e-60
+1.445000000000000000e+03,4.741371641174270100e-50,6.901734492770079900e-60
+1.446000000000000000e+03,4.383791566781444751e-50,6.282691995621710552e-60
+1.447000000000000000e+03,4.053179112579452624e-50,5.719173745845813747e-60
+1.448000000000000000e+03,3.747500461275785316e-50,5.206199565085520813e-60
+1.449000000000000000e+03,3.464875179997841823e-50,4.739235965891810583e-60
+1.450000000000000000e+03,3.203564652498493538e-50,4.314156086337595612e-60
+1.451000000000000000e+03,2.961961383770347187e-50,3.927203218247422219e-60
+1.452000000000000000e+03,2.738579111273571608e-50,3.574957606716044772e-60
+1.453000000000000000e+03,2.532043661945808042e-50,3.254306227504146776e-60
+1.454000000000000000e+03,2.341084498748841991e-50,2.962415275212370248e-60
+1.455000000000000000e+03,2.164526904749487237e-50,2.696705119094512864e-60
+1.456000000000000000e+03,2.001284756653701450e-50,2.454827505177922509e-60
+1.457000000000000000e+03,1.850353843339294937e-50,2.234644803211310551e-60
+1.458000000000000000e+03,1.710805688284643215e-50,2.034211115032103355e-60
+1.459000000000000000e+03,1.581781837891641105e-50,1.851755077394668112e-60
+1.460000000000000000e+03,1.462488580566123559e-50,1.685664207278121250e-60
+1.461000000000000000e+03,1.352192064069461539e-50,1.534470651321978301e-60
+1.462000000000000000e+03,1.250213781104999337e-50,1.396838213448525776e-60
+1.463000000000000000e+03,1.155926395367874734e-50,1.271550546026479565e-60
+1.464000000000000000e+03,1.068749882381875994e-50,1.157500400213542678e-60
+1.465000000000000000e+03,9.881479613827479681e-51,1.053679840476095574e-60
+1.466000000000000000e+03,9.136247962982000267e-51,9.591713368055317457e-61
+1.467000000000000000e+03,8.447219455302035691e-51,8.731396559068768402e-61
+1.468000000000000000e+03,7.810155417754594915e-51,7.948244796974654672e-61
+1.469000000000000000e+03,7.221136845355036155e-51,7.235336858800563690e-61
+1.470000000000000000e+03,6.676540292758427931e-51,6.586372312066188056e-61
+1.471000000000000000e+03,6.173015584035025576e-51,5.995615833751722202e-61
+1.472000000000000000e+03,5.707465203508299381e-51,5.457846523507019792e-61
+1.473000000000000000e+03,5.277025240873455249e-51,4.968311763150237618e-61
+1.474000000000000000e+03,4.879047773379045062e-51,4.522685214679852194e-61
+1.475000000000000000e+03,4.511084576691316462e-51,4.117028585604322240e-61
+1.476000000000000000e+03,4.170872064236504993e-51,3.747756823682224865e-61
+1.477000000000000000e+03,3.856317362373211150e-51,3.411606433477063368e-61
+1.478000000000000000e+03,3.565485435733045399e-51,3.105606634719311170e-61
+1.479000000000000000e+03,3.296587183530187463e-51,2.827053107583327150e-61
+1.480000000000000000e+03,3.047968433611395121e-51,2.573484092848954354e-61
+1.481000000000000000e+03,2.818099766541917916e-51,2.342658635729780515e-61
+1.482000000000000000e+03,2.605567107128392522e-51,2.132536781093453841e-61
+1.483000000000000000e+03,2.409063025501136138e-51,1.941261545047827886e-61
+1.484000000000000000e+03,2.227378694242437988e-51,1.767142503562911835e-61
+1.485000000000000000e+03,2.059396452084565577e-51,1.608640853091054545e-61
+1.486000000000000000e+03,1.904082928431241519e-51,1.464355811156227868e-61
+1.487000000000000000e+03,1.760482686407174904e-51,1.333012236725556852e-61
+1.488000000000000000e+03,1.627712345329914066e-51,1.213449360956199126e-61
+1.489000000000000000e+03,1.504955146447052201e-51,1.104610528724053091e-61
+1.490000000000000000e+03,1.391455928509534813e-51,1.005533860272950684e-61
+1.491000000000000000e+03,1.286516482272084734e-51,9.153437504559656371e-62
+1.492000000000000000e+03,1.189491255343323164e-51,8.332431304415336217e-62
+1.493000000000000000e+03,1.099783380963338938e-51,7.585064234962590697e-62
+1.494000000000000000e+03,1.016841006278812580e-51,6.904731325900269675e-62
+1.495000000000000000e+03,9.401538975288218218e-52,6.285420031528879589e-62
+1.496000000000000000e+03,8.692503012573004922e-52,5.721657093962970190e-62
+1.497000000000000000e+03,8.036940422434753214e-52,5.208460172379868264e-62
+1.498000000000000000e+03,7.430818402977705825e-52,4.741293810824604705e-62
+1.499000000000000000e+03,6.870408294168290652e-52,4.316029355426965602e-62
+1.500000000000000000e+03,6.352262640365598482e-52,3.928908466794111388e-62
+1.501000000000000000e+03,5.873193982726658903e-52,3.576509905113795610e-62
+1.502000000000000000e+03,5.430255251025220712e-52,3.255719294426465816e-62
+1.503000000000000000e+03,5.020721634260882031e-52,2.963701598853312528e-62
+1.504000000000000000e+03,4.642073818533017907e-52,2.697876067535255072e-62
+1.505000000000000000e+03,4.291982489063446063e-52,2.455893426853646414e-62
+1.506000000000000000e+03,3.968294001030916691e-52,2.235615118367229955e-62
+1.507000000000000000e+03,3.669017131068070893e-52,2.035094398976119516e-62
+1.508000000000000000e+03,3.392310827920914262e-52,1.852559136283161486e-62
+1.509000000000000000e+03,3.136472886917173973e-52,1.686396147103977737e-62
+1.510000000000000000e+03,2.899929478571913423e-52,1.535136940714840560e-62
+1.511000000000000000e+03,2.681225466914882705e-52,1.397444740842427981e-62
+1.512000000000000000e+03,2.479015457980439989e-52,1.272102671699639677e-62
+1.513000000000000000e+03,2.292055523393615518e-52,1.158003003660686680e-62
+1.514000000000000000e+03,2.119195548138735300e-52,1.054137363531764950e-62
+1.515000000000000000e+03,1.959372155436129691e-52,9.595878228993794317e-63
+1.516000000000000000e+03,1.811602165203817783e-52,8.735187857981882089e-63
+1.517000000000000000e+03,1.674976545862291259e-52,7.951696040043970522e-63
+1.518000000000000000e+03,1.548654822276108583e-52,7.238478546912129166e-63
+1.519000000000000000e+03,1.431859905431929203e-52,6.589232210367398079e-63
+1.520000000000000000e+03,1.323873312046550199e-52,5.998219217029378070e-63
+1.521000000000000000e+03,1.224030744698035024e-52,5.460216399557492376e-63
+1.522000000000000000e+03,1.131718005290029279e-52,4.970469076113887749e-63
+1.523000000000000000e+03,1.046367216710386286e-52,4.524649030138555658e-63
+1.524000000000000000e+03,9.674533294410798260e-53,4.118816259076287766e-63
+1.525000000000000000e+03,8.944908916290015699e-53,3.749384154003919408e-63
+1.526000000000000000e+03,8.270310627485160711e-53,3.413087802428165996e-63
+1.527000000000000000e+03,7.646588524845785982e-53,3.106955134123540842e-63
+1.528000000000000000e+03,7.069905678510520878e-53,2.828280655009547503e-63
+1.529000000000000000e+03,6.536714528397178363e-53,2.574601536934574572e-63
+1.530000000000000000e+03,6.043735060799478695e-53,2.343675852057014618e-63
+1.531000000000000000e+03,5.587934630838673078e-53,2.133462759466517159e-63
+1.532000000000000000e+03,5.166509306646478838e-53,1.942104468941619849e-63
+1.533000000000000000e+03,4.776866620513500024e-53,1.767909822445671825e-63
+1.534000000000000000e+03,4.416609620894486053e-53,1.609339348260327201e-63
+1.535000000000000000e+03,4.083522127164004251e-53,1.464991655669454113e-63
+1.536000000000000000e+03,3.775555096413717385e-53,1.333591049955461515e-63
+1.537000000000000000e+03,3.490814018425689510e-53,1.213976258252890348e-63
+1.538000000000000000e+03,3.227547261278799656e-53,1.105090166622599292e-63
+1.539000000000000000e+03,2.984135295894706284e-53,1.005970477646329840e-63
+1.540000000000000000e+03,2.759080733236544171e-53,9.157412059766862053e-64
+1.541000000000000000e+03,2.550999112871896043e-53,8.336049366833215378e-64
+1.542000000000000000e+03,2.358610386235219436e-53,7.588357779768793906e-64
+1.543000000000000000e+03,2.180731042196961002e-53,6.907729460298635615e-64
+1.544000000000000000e+03,2.016266826498706978e-53,6.288149251988950640e-64
+1.545000000000000000e+03,1.864206010266922875e-53,5.724141520386029566e-64
+1.546000000000000000e+03,1.723613166194968859e-53,5.210721761262808981e-64
+1.547000000000000000e+03,1.593623414107151575e-53,4.743352549303623876e-64
+1.548000000000000000e+03,1.473437100504986247e-53,4.317903437916796524e-64
+1.549000000000000000e+03,1.362314879366203121e-53,3.930614455784318255e-64
+1.550000000000000000e+03,1.259573163935168456e-53,3.578062877541903572e-64
+1.551000000000000000e+03,1.164579921525763776e-53,3.257132974922827527e-64
+1.552000000000000000e+03,1.076750785467482004e-53,2.964988481034703625e-64
+1.553000000000000000e+03,9.955454602771032945e-54,2.699047524418854736e-64
+1.554000000000000000e+03,9.204643979414875731e-54,2.456959811368078138e-64
+1.555000000000000000e+03,8.510457248651864709e-54,2.236585854847987913e-64
+1.556000000000000000e+03,7.868624005785416734e-54,2.035978066454766356e-64
+1.557000000000000000e+03,7.275195907274016409e-54,1.853363544305623215e-64
+1.558000000000000000e+03,6.726522381842221211e-54,1.687128404748664877e-64
+1.559000000000000000e+03,6.219228173386448506e-54,1.535803519420255758e-64
+1.560000000000000000e+03,5.750192577527716922e-54,1.398051531599353184e-64
+1.561000000000000000e+03,5.316530244081903805e-54,1.272655037113804130e-64
+1.562000000000000000e+03,4.915573427349502545e-54,1.158505825345564017e-64
+1.563000000000000000e+03,4.544855575036261955e-54,1.054595085250545204e-64
+1.564000000000000000e+03,4.202096154847967655e-54,9.600044898374969566e-65
+1.565000000000000000e+03,3.885186625418110686e-54,8.738980803131674562e-65
+1.566000000000000000e+03,3.592177465266525253e-54,7.955148781692812575e-65
+1.567000000000000000e+03,3.321266179994629903e-54,7.241621599190403707e-65
+1.568000000000000000e+03,3.070786213942712699e-54,6.592093350478079302e-65
+1.569000000000000000e+03,2.839196698096587206e-54,6.000823730733948849e-65
+1.570000000000000000e+03,2.625072971176505821e-54,5.462587304642332275e-65
+1.571000000000000000e+03,2.427097815597387989e-54,4.972627325813945990e-65
+1.572000000000000000e+03,2.244053354386363112e-54,4.526613698314260933e-65
+1.573000000000000000e+03,2.074813559210928952e-54,4.120604708781863089e-65
+1.574000000000000000e+03,1.918337323429052601e-54,3.751012190936127928e-65
+1.575000000000000000e+03,1.773662057549154822e-54,3.414569814611230032e-65
+1.576000000000000000e+03,1.639897767701334501e-54,3.108304219065841435e-65
+1.577000000000000000e+03,1.516221580692707208e-54,2.829508735454729116e-65
+1.578000000000000000e+03,1.401872681966466784e-54,2.575719466230535822e-65
+1.579000000000000000e+03,1.296147635325176527e-54,2.344693510074251564e-65
+1.580000000000000000e+03,1.198396055626421956e-54,2.134389139912747322e-65
+1.581000000000000000e+03,1.108016607830823807e-54,1.942947758845125518e-65
+1.582000000000000000e+03,1.024453307789971815e-54,1.768677474509459678e-65
+1.583000000000000000e+03,9.471921020177137678e-55,1.610038146726370222e-65
+1.584000000000000000e+03,8.757577054050265833e-55,1.465627776275623469e-65
+1.585000000000000000e+03,8.097106774248991011e-55,1.334170114514458153e-65
+1.586000000000000000e+03,7.486447188411077250e-55,1.214503384335988405e-65
+1.587000000000000000e+03,6.921841722911858313e-55,1.105570012786840130e-65
+1.588000000000000000e+03,6.399817113678487300e-55,1.006407284605270712e-65
+1.589000000000000000e+03,5.917162039830939908e-55,9.161388340783794076e-66
+1.590000000000000000e+03,5.470907368709414861e-55,8.339669000266461841e-66
+1.591000000000000000e+03,5.058307890762731597e-55,7.591652754680096160e-66
+1.592000000000000000e+03,4.676825431937211500e-55,6.910728896530599218e-66
+1.593000000000000000e+03,4.324113239677971593e-55,6.290879657515914585e-66
+1.594000000000000000e+03,3.998001546492049935e-55,5.726627025582879383e-66
+1.595000000000000000e+03,3.696484222264076732e-55,5.212984332160267889e-66
+1.596000000000000000e+03,3.417706433214464741e-55,4.745412181716589619e-66
+1.597000000000000000e+03,3.159953231582034065e-55,4.319778334160525864e-66
+1.598000000000000000e+03,2.921639005838888374e-55,3.932321185539778389e-66
+1.599000000000000000e+03,2.701297726538092818e-55,3.579616524293245711e-66
+1.600000000000000000e+03,2.497573927790810033e-55,3.258547269259838760e-66
+1.601000000000000000e+03,2.309214368893243044e-55,2.966275921998901546e-66
+1.602000000000000000e+03,2.135060324808761977e-55,2.700219489965932222e-66
+1.603000000000000000e+03,1.974040458078971843e-55,2.458026658922048897e-66
+1.604000000000000000e+03,1.825164228313632269e-55,2.237557012836656180e-66
+1.605000000000000000e+03,1.687515798717449869e-55,2.036862117634695269e-66
+1.606000000000000000e+03,1.560248402168250174e-55,1.854168301613757563e-66
+1.607000000000000000e+03,1.442579132188702423e-55,1.687860980350281109e-66
+1.608000000000000000e+03,1.333784126767482019e-55,1.536470387563761098e-66
+1.609000000000000000e+03,1.233194115402044093e-55,1.398658585833578175e-66
+1.610000000000000000e+03,1.140190301970316077e-55,1.273207642372999764e-66
+1.611000000000000000e+03,1.054200558103803061e-55,1.159008865362870126e-66
+1.612000000000000000e+03,9.746959036451152076e-56,1.055053005718758744e-66
+1.613000000000000000e+03,9.011872525389379172e-56,9.604213376984641641e-67
+1.614000000000000000e+03,8.332224041380371661e-56,8.742775395233465360e-67
+1.615000000000000000e+03,7.703832614161098787e-56,7.958603022572338227e-67
+1.616000000000000000e+03,7.122832589746359354e-56,7.244766016227318813e-67
+1.617000000000000000e+03,6.585649850217679597e-56,6.594955732937070148e-67
+1.618000000000000000e+03,6.088979826945106959e-56,6.003429375355942738e-67
+1.619000000000000000e+03,5.629767171985158674e-56,5.464959239208671978e-67
+1.620000000000000000e+03,5.205186962602084294e-56,4.974786512657440907e-67
+1.621000000000000000e+03,4.812627323287489645e-56,4.528579219577486383e-67
+1.622000000000000000e+03,4.449673358375370505e-56,4.122393935058334793e-67
+1.623000000000000000e+03,4.114092296411230659e-56,3.752640934785457330e-67
+1.624000000000000000e+03,3.803819754888766485e-56,3.416052470305363334e-67
+1.625000000000000000e+03,3.516947040858453120e-56,3.109653889800285038e-67
+1.626000000000000000e+03,3.251709409286857185e-56,2.830737349150155583e-67
+1.627000000000000000e+03,3.006475206935093286e-56,2.576837880947671025e-67
+1.628000000000000000e+03,2.779735834973529540e-56,2.345711609973413451e-67
+1.629000000000000000e+03,2.570096468586281887e-56,2.135315922606852306e-67
+1.630000000000000000e+03,2.376267476475000348e-56,1.943791414917382972e-67
+1.631000000000000000e+03,2.197056487478419614e-56,1.769445459898847858e-67
+1.632000000000000000e+03,2.031361055503548431e-56,1.610737248620787828e-67
+1.633000000000000000e+03,1.878161877645835580e-56,1.466264173094536437e-67
+1.634000000000000000e+03,1.736516523778590239e-56,1.334749430511715844e-67
+1.635000000000000000e+03,1.605553639037616788e-56,1.215030739304905038e-67
+1.636000000000000000e+03,1.484467583537724290e-56,1.106050067307270366e-67
+1.637000000000000000e+03,1.372513476345316902e-56,1.006844281232151864e-67
+1.638000000000000000e+03,1.269002613219799680e-56,9.165366348359303614e-68
+1.639000000000000000e+03,1.173298229935606381e-56,8.343290205396759117e-68
+1.640000000000000000e+03,1.084811585121256687e-56,7.594949160317035839e-68
+1.641000000000000000e+03,1.002998338519508449e-56,6.913729635161043096e-68
+1.642000000000000000e+03,9.273552023879569027e-57,6.293611248624704585e-68
+1.643000000000000000e+03,8.574168454410227118e-57,5.729113610022267298e-68
+1.644000000000000000e+03,7.927530302876345974e-57,5.215247885498945715e-68
+1.645000000000000000e+03,7.329659667544259945e-57,4.747472708451929747e-68
+1.646000000000000000e+03,6.776878648137413356e-57,4.321654044511249346e-68
+1.647000000000000000e+03,6.265786720622626455e-57,3.934028656381919028e-68
+1.648000000000000000e+03,5.793239818322576055e-57,3.581170845660419229e-68
+1.649000000000000000e+03,5.356330990669939440e-57,3.259962177703853286e-68
+1.650000000000000000e+03,4.952372520617942310e-57,2.967563921988707560e-68
+1.651000000000000000e+03,4.578879390704742986e-57,2.701391964397510773e-68
+1.652000000000000000e+03,4.233553996056246615e-57,2.459093969716757992e-68
+1.653000000000000000e+03,3.914272010288690162e-57,2.238528592516132708e-68
+1.654000000000000000e+03,3.619069317363759762e-57,2.037746552682399860e-68
+1.655000000000000000e+03,3.346129929002410759e-57,1.854973408359124215e-68
+1.656000000000000000e+03,3.093774813332929287e-57,1.688593874046790920e-68
+1.657000000000000000e+03,2.860451566047372013e-57,1.537137545271121462e-68
+1.658000000000000000e+03,2.644724860529904705e-57,1.399265903659588640e-68
+1.659000000000000000e+03,2.445267618206993837e-57,1.273760487581442586e-68
+1.660000000000000000e+03,2.260852844803484686e-57,1.159512123807474241e-68
+1.661000000000000000e+03,2.090346082284506581e-57,1.055511125022645009e-68
+1.662000000000000000e+03,1.932698430048358350e-57,9.608383665607860303e-69
+1.663000000000000000e+03,1.786940092441110587e-57,8.746571635001883023e-69
+1.664000000000000000e+03,1.652174412897742647e-57,7.962058763333084696e-69
+1.665000000000000000e+03,1.527572358010587052e-57,7.247911798615881478e-69
+1.666000000000000000e+03,1.412367417593287709e-57,6.597819358284192037e-69
+1.667000000000000000e+03,1.305850889366021343e-57,6.006036151386759859e-69
+1.668000000000000000e+03,1.207367519256296137e-57,5.467332203703217677e-69
+1.669000000000000000e+03,1.116311470494814086e-57,4.976946637051010368e-69
+1.670000000000000000e+03,1.032122596710115536e-57,4.530545594298397893e-69
+1.671000000000000000e+03,9.542829960955874050e-58,4.124183938242665179e-69
+1.672000000000000000e+03,8.823138254504411902e-58,3.754270385859075687e-69
+1.673000000000000000e+03,8.157723544966257095e-58,3.417535769790181942e-69
+1.674000000000000000e+03,7.542492423500700393e-58,3.111004146581408750e-69
+1.675000000000000000e+03,6.973660193923520132e-58,2.831966496327533119e-69
+1.676000000000000000e+03,6.447727590522822060e-58,2.577956781296609763e-69
+1.677000000000000000e+03,5.961459251744548439e-58,2.346730151946237982e-69
+1.678000000000000000e+03,5.511863817331177951e-58,2.136243107723372567e-69
+1.679000000000000000e+03,5.096175526472810399e-58,1.944635437317277405e-69
+1.680000000000000000e+03,4.711837203770891716e-58,1.770213778758670877e-69
+1.681000000000000000e+03,4.356484528351062456e-58,1.611436654075424347e-69
+1.682000000000000000e+03,4.027931489350426030e-58,1.466900846246211902e-69
+1.683000000000000000e+03,3.724156938310451780e-58,1.335328998056336265e-69
+1.684000000000000000e+03,3.443292155746905293e-58,1.215558323258956395e-69
+1.685000000000000000e+03,3.183609355412045225e-58,1.106530330274298327e-69
+1.686000000000000000e+03,2.943511055531929656e-58,1.007281467609272111e-69
+1.687000000000000000e+03,2.721520251631833177e-58,9.169346083243607901e-70
+1.688000000000000000e+03,2.516271330499119647e-58,8.346912982907037298e-70
+1.689000000000000000e+03,2.326501669387000596e-58,7.598246997301286515e-70
+1.690000000000000000e+03,2.151043868781320515e-58,6.916731676755880016e-70
+1.691000000000000000e+03,1.988818570949483387e-58,6.296344025829758905e-70
+1.692000000000000000e+03,1.838827820092007332e-58,5.731601274172488252e-70
+1.693000000000000000e+03,1.700148923252491731e-58,5.217512421705135982e-70
+1.694000000000000000e+03,1.571928774218817284e-58,4.749534129897702904e-70
+1.695000000000000000e+03,1.453378605498806061e-58,4.323530569322712051e-70
+1.696000000000000000e+03,1.343769136086616556e-58,3.935736868632753617e-70
+1.697000000000000000e+03,1.242426085169452946e-58,3.582725841936556384e-70
+1.698000000000000000e+03,1.148726024177708436e-58,3.261377700521617500e-70
+1.699000000000000000e+03,1.062092541660687912e-58,2.968852481246688403e-70
+1.700000000000000000e+03,9.819926973959802839e-59,2.702564947934400445e-70
+1.701000000000000000e+03,9.079337439195891342e-59,2.460161743953209899e-70
+1.702000000000000000e+03,8.394600953080298573e-59,2.239500594069648520e-70
+1.703000000000000000e+03,7.761505245662478434e-59,2.038631371764675833e-70
+1.704000000000000000e+03,7.176155723797656901e-59,1.855778864693559362e-70
+1.705000000000000000e+03,6.634951512913443029e-59,1.689327085976412182e-70
+1.706000000000000000e+03,6.134563305632484303e-59,1.537804992667982189e-70
+1.707000000000000000e+03,5.671912880986027305e-59,1.399873485191759962e-70
+1.708000000000000000e+03,5.244154168228815685e-59,1.274313572843250220e-70
+1.709000000000000000e+03,4.848655738761976708e-59,1.160015600774154985e-70
+1.710000000000000000e+03,4.482984618465104826e-59,1.055969443248602017e-70
+1.711000000000000000e+03,4.144891320852317264e-59,9.612555765031103133e-71
+1.712000000000000000e+03,3.832296008983084530e-59,8.750369523152870853e-71
+1.713000000000000000e+03,3.543275701001516054e-59,7.965516004626545025e-71
+1.714000000000000000e+03,3.276052440593934941e-59,7.251058946948539726e-71
+1.715000000000000000e+03,3.028982359596770947e-59,6.600684227058748115e-71
+1.716000000000000000e+03,2.800545565468830774e-59,6.008644059317333661e-71
+1.717000000000000000e+03,2.589336791420273079e-59,5.469706198573488457e-71
+1.718000000000000000e+03,2.394056751681673577e-59,4.979107699402035932e-71
+1.719000000000000000e+03,2.213504148731715508e-59,4.532512822847837316e-71
+1.720000000000000000e+03,2.046568283316949928e-59,4.125974718672435153e-71
+1.721000000000000000e+03,1.892222221801067386e-59,3.755900544463854747e-71
+1.722000000000000000e+03,1.749516478812330447e-59,3.419019713345033394e-71
+1.723000000000000000e+03,1.617573176327368299e-59,3.112354989663504682e-71
+1.724000000000000000e+03,1.495580643258640488e-59,2.833196177218346283e-71
+1.725000000000000000e+03,1.382788422325598611e-59,2.579076167488368143e-71
+1.726000000000000000e+03,1.278502653492219559e-59,2.347749136184813944e-71
+1.727000000000000000e+03,1.182081805571926877e-59,2.137170695437167141e-71
+1.728000000000000000e+03,1.092932729742457314e-59,1.945479826203928172e-71
+1.729000000000000000e+03,1.010507010692317600e-59,1.770982431233626607e-71
+1.730000000000000000e+03,9.342975929533607175e-60,1.612136363221998847e-71
+1.731000000000000000e+03,8.638356616649496401e-60,1.467537795850554255e-71
+1.732000000000000000e+03,7.986877585815961072e-60,1.335908817257620980e-71
+1.733000000000000000e+03,7.384531155829163365e-60,1.216086136297640526e-71
+1.734000000000000000e+03,6.827611892819437378e-60,1.107010801778497558e-71
+1.735000000000000000e+03,6.312693815662445824e-60,1.007718843819081437e-71
+1.736000000000000000e+03,5.836609320487909203e-60,9.173327546186208978e-72
+1.737000000000000000e+03,5.396429694639090689e-60,8.350537333479570912e-72
+1.738000000000000000e+03,4.989447100212797205e-60,7.601546266253929628e-72
+1.739000000000000000e+03,4.613157916344559691e-60,6.919735021880485835e-72
+1.740000000000000000e+03,4.265247337771122389e-60,6.299077989646453965e-72
+1.741000000000000000e+03,3.943575134921821685e-60,5.734090018502694705e-72
+1.742000000000000000e+03,3.646162487941454018e-60,5.219777941205910646e-72
+1.743000000000000000e+03,3.371179813652858310e-60,4.751596446442674855e-72
+1.744000000000000000e+03,3.116935510571980330e-60,4.325407908948317000e-72
+1.745000000000000000e+03,2.881865552741775505e-60,3.937445822613989622e-72
+1.746000000000000000e+03,2.664523868367055619e-60,3.584281513414508575e-72
+1.747000000000000000e+03,2.463573444064027372e-60,3.262793837979994703e-72
+1.748000000000000000e+03,2.277778100001464515e-60,2.970141600015856985e-72
+1.749000000000000000e+03,2.105994885335065906e-60,2.703738440797816157e-72
+1.750000000000000000e+03,1.947167047156494953e-60,2.461229981832778431e-72
+1.751000000000000000e+03,1.800317529702267702e-60,2.240473017680261194e-72
+1.752000000000000000e+03,1.664542963833746023e-60,2.039516575048161637e-72
+1.753000000000000000e+03,1.539008109812007646e-60,1.856584670768754110e-72
+1.754000000000000000e+03,1.422940719182080101e-60,1.690060616277230630e-72
+1.755000000000000000e+03,1.315626784158921884e-60,1.538472729880218790e-72
+1.756000000000000000e+03,1.216406145289889446e-60,1.400481330544676849e-72
+1.757000000000000000e+03,1.124668430374760118e-60,1.274866898262729322e-72
+1.758000000000000000e+03,1.039849299659877182e-60,1.160519296357863258e-72
+1.759000000000000000e+03,9.614269742085691563e-61,1.056427960482943825e-72
+1.760000000000000000e+03,8.889190260917737022e-61,9.616729676040101890e-73
+1.761000000000000000e+03,8.218794106524686083e-61,8.754169060401679746e-73
+1.762000000000000000e+03,7.598957225882469933e-61,7.968974747104500557e-73
+1.763000000000000000e+03,7.025866589716788609e-61,7.254207461818813816e-73
+1.764000000000000000e+03,6.495996736021197865e-61,6.603550339801028380e-73
+1.765000000000000000e+03,6.006088082594840023e-61,6.011253099639493121e-73
+1.766000000000000000e+03,5.553126875180902015e-61,5.472081224266578828e-73
+1.767000000000000000e+03,5.134326647859226496e-61,4.981269700117508869e-73
+1.768000000000000000e+03,4.747111081638908672e-61,4.534480905596291319e-73
+1.769000000000000000e+03,4.389098155804784939e-61,4.127766276684900146e-73
+1.770000000000000000e+03,4.058085494523266350e-61,3.757531410907230253e-73
+1.771000000000000000e+03,3.752036818561441595e-61,3.420504301249777801e-73
+1.772000000000000000e+03,3.469069418778838716e-61,3.113706419301330693e-73
+1.773000000000000000e+03,3.207442574329797705e-61,2.834426392054501982e-73
+1.774000000000000000e+03,2.965546844330511263e-61,2.580196039733758107e-73
+1.775000000000000000e+03,2.741894167117403919e-61,2.348768562881045158e-73
+1.776000000000000000e+03,2.535108706188539762e-61,2.138098685922927725e-73
+1.777000000000000000e+03,2.343918386517996805e-61,1.946324581736525398e-73
+1.778000000000000000e+03,2.167147069175301800e-61,1.771751417468675616e-73
+1.779000000000000000e+03,2.003707316111753394e-61,1.612836376192469815e-73
+1.780000000000000000e+03,1.852593700605520912e-61,1.468175022027686311e-73
+1.781000000000000000e+03,1.712876622212093581e-61,1.336488888224767230e-73
+1.782000000000000000e+03,1.583696588173515990e-61,1.216614178520360018e-73
+1.783000000000000000e+03,1.464258926106089532e-61,1.107491481910355180e-73
+1.784000000000000000e+03,1.353828895441420677e-61,1.008156409943950262e-73
+1.785000000000000000e+03,1.251727167548367410e-61,9.177310737937976039e-74
+1.786000000000000000e+03,1.157325646730081195e-61,8.354163257797880654e-74
+1.787000000000000000e+03,1.070043606389525474e-61,7.604846967797178512e-74
+1.788000000000000000e+03,9.893441165934664007e-62,6.922739671101261248e-74
+1.789000000000000000e+03,9.147307410589467878e-62,6.301813140589678023e-74
+1.790000000000000000e+03,8.457444832434346783e-62,5.736579843481591736e-74
+1.791000000000000000e+03,7.819609627513218053e-62,5.222044444427933457e-74
+1.792000000000000000e+03,7.229878046877827280e-62,4.753659658475240491e-74
+1.793000000000000000e+03,6.684622258995123386e-62,4.327286063742115775e-74
+1.794000000000000000e+03,6.180488032539963022e-62,3.939155518647920476e-74
+1.795000000000000000e+03,5.714374102286674168e-62,3.585837860387660394e-74
+1.796000000000000000e+03,5.283413091160704479e-62,3.264210590345684781e-74
+1.797000000000000000e+03,4.884953871094790703e-62,2.971431278538991096e-74
+1.798000000000000000e+03,4.516545254174120339e-62,2.704912443208762074e-74
+1.799000000000000000e+03,4.175920913748773773e-62,2.462298683556644731e-74
+1.800000000000000000e+03,3.860985442749338637e-62,2.241445863531360403e-74
+1.801000000000000000e+03,3.569801463442828104e-62,2.040402162699798811e-74
+1.802000000000000000e+03,3.300577709333322895e-62,1.857390826736676452e-74
+1.803000000000000000e+03,3.051658005888473800e-62,1.690794465087582713e-74
+1.804000000000000000e+03,2.821511082308149520e-62,1.539140757033584974e-74
+1.805000000000000000e+03,2.608721151658064234e-62,1.401089439832814556e-74
+1.806000000000000000e+03,2.411979201421662947e-62,1.275420463944087947e-74
+1.807000000000000000e+03,2.230074940893258256e-62,1.161023210653460492e-74
+1.808000000000000000e+03,2.061889355873638852e-62,1.056886676812143504e-74
+1.809000000000000000e+03,1.906387824869290245e-62,9.620905399422016397e-75
+1.810000000000000000e+03,1.762613754446624672e-62,8.757970247464868931e-75
+1.811000000000000000e+03,1.629682694588837612e-62,7.972434991418335864e-75
+1.812000000000000000e+03,1.506776897855436948e-62,7.257357343819664059e-75
+1.813000000000000000e+03,1.393140288872979673e-62,6.606417697050808100e-75
+1.814000000000000000e+03,1.288073813212456796e-62,6.013863272844598210e-75
+1.815000000000000000e+03,1.190931137039996131e-62,5.474457281230396006e-75
+1.816000000000000000e+03,1.101114671087097371e-62,4.983432639605163812e-75
+1.817000000000000000e+03,1.018071894481471021e-62,4.536449842914922896e-75
+1.818000000000000000e+03,9.412919558230805540e-63,4.129558612617934000e-75
+1.819000000000000000e+03,8.703025305973278932e-63,3.759162985496341713e-75
+1.820000000000000000e+03,8.046669155924411555e-63,3.421989533784006235e-75
+1.821000000000000000e+03,7.439813424472448489e-63,3.115058435749399988e-75
+1.822000000000000000e+03,6.878724938033476478e-63,2.835657141067686347e-75
+1.823000000000000000e+03,6.359952067813785380e-63,2.581316398243978574e-75
+1.824000000000000000e+03,5.880303496544898860e-63,2.349788432227187363e-75
+1.825000000000000000e+03,5.436828586565938884e-63,2.139027079355665343e-75
+1.826000000000000000e+03,5.026799228486735237e-63,1.947169704074160557e-75
+1.827000000000000000e+03,4.647693058771972568e-63,1.772520737608641270e-75
+1.828000000000000000e+03,4.297177943002775686e-63,1.613536693118670736e-75
+1.829000000000000000e+03,3.973097629366392522e-63,1.468812524897617050e-75
+1.830000000000000000e+03,3.673458484115443832e-63,1.337069211067171134e-75
+1.831000000000000000e+03,3.396417227399303898e-63,1.217142450026699129e-75
+1.832000000000000000e+03,3.140269594023422812e-63,1.107972370760522915e-75
+1.833000000000000000e+03,2.903439849378787344e-63,1.008594166066400039e-75
+1.834000000000000000e+03,2.684471096050053517e-63,9.181295659249060974e-76
+1.835000000000000000e+03,2.482016311469390577e-63,8.357790756544835701e-76
+1.836000000000000000e+03,2.294830061483768858e-63,7.608149102552650490e-76
+1.837000000000000000e+03,2.121760838860906358e-63,6.925745624984072177e-76
+1.838000000000000000e+03,1.961743979601188805e-63,6.304549479175255577e-76
+1.839000000000000000e+03,1.813795113481169421e-63,5.739070749578736545e-76
+1.840000000000000000e+03,1.677004108536569985e-63,5.224311931798649097e-76
+1.841000000000000000e+03,1.550529472235086110e-63,4.755723766384368373e-76
+1.842000000000000000e+03,1.433593174895466602e-63,4.329165034057818737e-76
+1.843000000000000000e+03,1.325475863508903701e-63,3.940865957056533679e-76
+1.844000000000000000e+03,1.225512436520096225e-63,3.587394883149120105e-76
+1.845000000000000000e+03,1.133087952344514118e-63,3.265627957885875053e-76
+1.846000000000000000e+03,1.047633846453609971e-63,2.972721517059313102e-76
+1.847000000000000000e+03,9.686244337557939749e-64,2.706086955388644209e-76
+1.848000000000000000e+03,8.955736747574160186e-64,2.463367849326355726e-76
+1.849000000000000000e+03,8.280321856104811176e-64,2.242419131806162196e-76
+1.850000000000000000e+03,7.655844736532359774e-64,2.041288134886369342e-76
+1.851000000000000000e+03,7.078463814383923699e-64,1.858197332749148988e-76
+1.852000000000000000e+03,6.544627235248562849e-64,1.691528632545674826e-76
+1.853000000000000000e+03,6.051051014955840116e-64,1.539809074254065685e-76
+1.854000000000000000e+03,5.594698837604385298e-64,1.401697813170856934e-76
+1.855000000000000000e+03,5.172763377160091631e-64,1.275974269991723098e-76
+1.856000000000000000e+03,4.782649027726051685e-64,1.161527343755979713e-76
+1.857000000000000000e+03,4.421955936242253024e-64,1.057345592322590403e-76
+1.858000000000000000e+03,4.088465239391505811e-64,9.625082935963261887e-77
+1.859000000000000000e+03,3.780125413894981632e-64,8.761773085058316828e-77
+1.860000000000000000e+03,3.495039656225868534e-64,7.975896738220620356e-77
+1.861000000000000000e+03,3.231454214108992386e-64,7.260508593545128936e-77
+1.862000000000000000e+03,2.987747598022740199e-64,6.609286299348842817e-77
+1.863000000000000000e+03,2.762420606337365883e-64,6.016474579424903571e-77
+1.864000000000000000e+03,2.554087102728360226e-64,5.476834369912423453e-77
+1.865000000000000000e+03,2.361465489128517160e-64,4.985596518272345529e-77
+1.866000000000000000e+03,2.183370821765618698e-64,4.538419635174541845e-77
+1.867000000000000000e+03,2.018707521784227880e-64,4.131351726809084939e-77
+1.868000000000000000e+03,1.866462635610675300e-64,3.760795268538889625e-77
+1.869000000000000000e+03,1.725699603601717434e-64,3.423475411227820858e-77
+1.870000000000000000e+03,1.595552498642264932e-64,3.116411039262692092e-77
+1.871000000000000000e+03,1.475220699251623288e-64,2.836888424490007623e-77
+1.872000000000000000e+03,1.363963964427627380e-64,2.582437243230026055e-77
+1.873000000000000000e+03,1.261097879931357662e-64,2.350808744415311873e-77
+1.874000000000000000e+03,1.165989647999821468e-64,2.139955875910224583e-77
+1.875000000000000000e+03,1.078054194585363305e-64,1.948015193376216737e-77
+1.876000000000000000e+03,9.967505701759663042e-65,1.773290391798610212e-77
+1.877000000000000000e+03,9.215786220545828141e-65,1.614237314132675180e-77
+1.878000000000000000e+03,8.520759175267516606e-65,1.469450304580574072e-77
+1.879000000000000000e+03,7.878148991894423573e-65,1.337649785894124751e-77
+1.880000000000000000e+03,7.284002547406437542e-65,1.217670950916146826e-77
+1.881000000000000000e+03,6.734664851504053776e-65,1.108453468419566566e-77
+1.882000000000000000e+03,6.226756562329167465e-65,1.009032112268873083e-77
+1.883000000000000000e+03,5.757153197883214316e-65,9.185282310870988573e-78
+1.884000000000000000e+03,5.322965915259707525e-65,8.361419830404551173e-78
+1.885000000000000000e+03,4.921523739447061269e-65,7.611452671143102895e-78
+1.886000000000000000e+03,4.550357132384514922e-65,6.928752884095815510e-78
+1.887000000000000000e+03,4.207182801188388584e-65,6.307287005918522345e-78
+1.888000000000000000e+03,3.889889652098553822e-65,5.741562737263242879e-78
+1.889000000000000000e+03,3.596525803734928176e-65,5.226580403745089227e-78
+1.890000000000000000e+03,3.325286579775473370e-65,4.757788770559197256e-78
+1.891000000000000000e+03,3.074503407191498481e-65,4.331044820249783978e-78
+1.892000000000000000e+03,2.842633551743414185e-65,3.942577138162401164e-78
+1.893000000000000000e+03,2.628250627596091865e-65,3.588952581992527627e-78
+1.894000000000000000e+03,2.430035822669751820e-65,3.267045940867497075e-78
+1.895000000000000000e+03,2.246769785748750840e-65,2.974012315819812557e-78
+1.896000000000000000e+03,2.077325125441026721e-65,2.707261977558657119e-78
+1.897000000000000000e+03,1.920659474842616376e-65,2.464437479343267354e-78
+1.898000000000000000e+03,1.775809079245376714e-65,2.243392822688216020e-78
+1.899000000000000000e+03,1.641882867440001084e-65,2.042174491774959955e-78
+1.900000000000000000e+03,1.518056970143707780e-65,1.859004188958272539e-78
+1.901000000000000000e+03,1.403569651832164954e-65,1.692263118789964487e-78
+1.902000000000000000e+03,1.297716624796839462e-65,1.540477681667524202e-78
+1.903000000000000000e+03,1.199846716602759415e-65,1.402306450673378899e-78
+1.904000000000000000e+03,1.109357864293247140e-65,1.276528316509933218e-78
+1.905000000000000000e+03,1.025693410699799497e-65,1.162031695760364463e-78
+1.906000000000000000e+03,9.483386800735019536e-66,1.057804707100832239e-78
+1.907000000000000000e+03,8.768178119716394106e-66,9.629262286451683858e-79
+1.908000000000000000e+03,8.106908339235366341e-66,8.765577573899202340e-79
+1.909000000000000000e+03,7.495509548669109520e-66,7.979359988163303536e-79
+1.910000000000000000e+03,6.930220627051925747e-66,7.263661211588684327e-79
+1.911000000000000000e+03,6.407564105917938075e-66,6.612156147235378111e-79
+1.912000000000000000e+03,5.924324777075983302e-66,6.019087019872195655e-79
+1.913000000000000000e+03,5.477529913725047913e-66,5.479212490760959424e-79
+1.914000000000000000e+03,5.064430983232161638e-66,4.987761336527142646e-79
+1.915000000000000000e+03,4.682486739078101860e-66,4.540390282746632276e-79
+1.916000000000000000e+03,4.329347587959377514e-66,4.133145619596519792e-79
+1.917000000000000000e+03,4.002841135874600665e-66,3.762428260342281319e-79
+1.918000000000000000e+03,3.700958824283758900e-66,3.424961933861056092e-79
+1.919000000000000000e+03,3.421843574127122133e-66,3.117764230095941554e-79
+1.920000000000000000e+03,3.163778361695438056e-66,2.838120242553352639e-79
+1.921000000000000000e+03,2.925175656074773801e-66,2.583558574903282060e-79
+1.922000000000000000e+03,2.704567653186304076e-66,2.351829499637841024e-79
+1.923000000000000000e+03,2.500597246346935912e-66,2.140885075761767247e-79
+1.924000000000000000e+03,2.312009677802399119e-66,1.948861049801924912e-79
+1.925000000000000000e+03,2.137644819876833334e-66,1.774060380183531062e-79
+1.926000000000000000e+03,1.976430038255632703e-66,1.614938239366430861e-79
+1.927000000000000000e+03,1.827373593497222332e-66,1.470088361196669382e-79
+1.928000000000000000e+03,1.689558540183978008e-66,1.338230612815119609e-79
+1.929000000000000000e+03,1.562137086180366439e-66,1.218199681288374014e-79
+1.930000000000000000e+03,1.444325377299026506e-66,1.108934774978216806e-79
+1.931000000000000000e+03,1.335398675292171719e-66,1.009470248633962158e-79
+1.932000000000000000e+03,1.234686899503831319e-66,9.189270693554555198e-80
+1.933000000000000000e+03,1.141570504757983578e-66,8.365050480060486263e-80
+1.934000000000000000e+03,1.055476670123458066e-66,7.614757674190691931e-80
+1.935000000000000000e+03,9.758757751113070049e-67,6.931761449002846308e-80
+1.936000000000000000e+03,9.022781416265010216e-67,6.310025721335747758e-80
+1.937000000000000000e+03,8.342310216319217647e-67,5.744055807005076271e-80
+1.938000000000000000e+03,7.713158119939752813e-67,5.228849860695071608e-80
+1.939000000000000000e+03,7.131454793758578832e-67,4.759854671388627901e-80
+1.940000000000000000e+03,6.593621793380202332e-67,4.332925422672031383e-80
+1.941000000000000000e+03,6.096350549987285911e-67,3.944289062287789605e-80
+1.942000000000000000e+03,5.636582017130898896e-67,3.590510957211243494e-80
+1.943000000000000000e+03,5.211487852500638698e-67,3.268464539557971077e-80
+1.944000000000000000e+03,4.818453018906940749e-67,2.975303675063923994e-80
+1.945000000000000000e+03,4.455059697447613669e-67,2.708437509940401202e-80
+1.946000000000000000e+03,4.119072413893738847e-67,2.465507573809102459e-80
+1.947000000000000000e+03,3.808424286799227505e-67,2.244366936360896713e-80
+1.948000000000000000e+03,3.521204312737966209e-67,2.043061233532497874e-80
+1.949000000000000000e+03,3.255645610448693045e-67,1.859811395516001030e-80
+1.950000000000000000e+03,3.010114551572911417e-67,1.692997923958776249e-80
+1.951000000000000000e+03,2.783100711119011372e-67,1.541146579400054166e-80
+1.952000000000000000e+03,2.573207575832454605e-67,1.402915352455164086e-80
+1.953000000000000000e+03,2.379143953313653352e-67,1.277082603603206681e-80
+1.954000000000000000e+03,2.199716029033373076e-67,1.162536266761698500e-80
+1.955000000000000000e+03,2.033820022385352952e-67,1.058264021233333747e-80
+1.956000000000000000e+03,1.880435396596784639e-67,9.633443451674376290e-81
+1.957000000000000000e+03,1.738618580727112340e-67,8.769383714704025870e-81
+1.958000000000000000e+03,1.607497165135427246e-67,7.982824741899524783e-81
+1.959000000000000000e+03,1.486264534707595373e-67,7.266815198544885651e-81
+1.960000000000000000e+03,1.374174906830074703e-67,6.615027241251640237e-81
+1.961000000000000000e+03,1.270538743584438552e-67,6.021700594679156940e-81
+1.962000000000000000e+03,1.174718509940519603e-67,5.481591644223873759e-81
+1.963000000000000000e+03,1.086124751854293279e-67,4.989927094777255438e-81
+1.964000000000000000e+03,1.004212470143377193e-67,4.542361786002326195e-81
+1.965000000000000000e+03,9.284777678344898602e-68,4.134940291318079932e-81
+1.966000000000000000e+03,8.584547503576192781e-68,3.764061961214484801e-81
+1.967000000000000000e+03,7.937126595183152286e-68,3.426449101964057322e-81
+1.968000000000000000e+03,7.338532236174528879e-68,3.119118008504348800e-81
+1.969000000000000000e+03,6.785082074166980858e-68,2.839352595489950887e-81
+1.970000000000000000e+03,6.273371468785794140e-68,2.584680393474926577e-81
+1.971000000000000000e+03,5.800252547454773153e-68,2.352850698087012064e-81
+1.972000000000000000e+03,5.362814840736059714e-68,2.141814679085290079e-81
+1.973000000000000000e+03,4.958367378096306253e-68,1.949707273510805703e-81
+1.974000000000000000e+03,4.584422133954289649e-68,1.774830702908616677e-81
+1.975000000000000000e+03,4.238678722180354649e-68,1.615639468952125603e-81
+1.976000000000000000e+03,3.919010244889488383e-68,1.470726694866235206e-81
+1.977000000000000000e+03,3.623450208476268714e-68,1.338811691939542046e-81
+1.978000000000000000e+03,3.350180426404402673e-68,1.218728641242955862e-81
+1.979000000000000000e+03,3.097519834330124295e-68,1.109416290527117995e-81
+1.980000000000000000e+03,2.863914148757139474e-68,1.009908575244181321e-81
+1.981000000000000000e+03,2.647926305603424083e-68,9.193260808051943972e-82
+1.982000000000000000e+03,2.448227619864025214e-68,8.368682706197353262e-82
+1.983000000000000000e+03,2.263589611984815588e-68,7.618064112318713325e-82
+1.984000000000000000e+03,2.092876450666789255e-68,6.934771320272357913e-82
+1.985000000000000000e+03,1.935037965612082946e-68,6.312765625942714576e-82
+1.986000000000000000e+03,1.789103187226884673e-68,5.746549959273755238e-82
+1.987000000000000000e+03,1.654174373541505989e-68,5.231120303075997987e-82
+1.988000000000000000e+03,1.529421487601714636e-68,4.761921469262270011e-82
+1.989000000000000000e+03,1.414077091358762382e-68,4.334806841679225794e-82
+1.990000000000000000e+03,1.307431624647374378e-68,3.946001729755552904e-82
+1.991000000000000000e+03,1.208829040208489087e-68,3.592070009099164084e-82
+1.992000000000000000e+03,1.117662767906117798e-68,3.269883754224460839e-82
+1.993000000000000000e+03,1.033371983310520989e-68,2.976595595034847370e-82
+1.994000000000000000e+03,9.554381576937240792e-69,2.709613552755262655e-82
+1.995000000000000000e+03,8.833818682143376966e-69,2.466578132925391424e-82
+1.996000000000000000e+03,8.167598486682851347e-69,2.245341473007914008e-82
+1.997000000000000000e+03,7.551622626634898131e-69,2.043948360326214701e-82
+1.998000000000000000e+03,6.982101824433152370e-69,1.860618952574567182e-82
+1.999000000000000000e+03,6.455532578496297159e-69,1.693733048190688589e-82
+2.000000000000000000e+03,5.968675610858992640e-69,1.541815767577628960e-82
+2.001000000000000000e+03,5.518535940215206786e-69,1.403524518630886783e-82
+2.002000000000000000e+03,5.102344457795731526e-69,1.277637131375931793e-82
+2.003000000000000000e+03,4.717540892736183206e-69,1.163041056855105754e-82
+2.004000000000000000e+03,4.361758062146191717e-69,1.058723534806717681e-82
+2.005000000000000000e+03,4.032807308992575948e-69,9.637626432419873407e-83
+2.006000000000000000e+03,3.728665038211920833e-69,8.773191508190590789e-83
+2.007000000000000000e+03,3.447460268231103685e-69,7.986291000081800460e-83
+2.008000000000000000e+03,3.187463121313747228e-69,7.269970555007721907e-83
+2.009000000000000000e+03,2.947074181930443803e-69,6.617899581938340651e-83
+2.010000000000000000e+03,2.724814657689756283e-69,6.024315304338002944e-83
+2.011000000000000000e+03,2.519317282301096244e-69,5.483971830749852281e-83
+2.012000000000000000e+03,2.329317904610170817e-69,4.992093793431127026e-83
+2.013000000000000000e+03,2.153647711963425058e-69,4.544334145313432195e-83
+2.014000000000000000e+03,1.991226040063175828e-69,4.136735742312225649e-83
+2.015000000000000000e+03,1.841053725082556504e-69,3.765696371463173345e-83
+2.016000000000000000e+03,1.702206957143209819e-69,3.427936915816902808e-83
+2.017000000000000000e+03,1.573831597346142070e-69,3.120472374742869634e-83
+2.018000000000000000e+03,1.455137923394581267e-69,2.840585483532133234e-83
+2.019000000000000000e+03,1.345395771486303577e-69,2.585802699156524523e-83
+2.020000000000000000e+03,1.243930044590313451e-69,2.353872339955415321e-83
+2.021000000000000000e+03,1.150116559475278048e-69,2.142744686056107649e-83
+2.022000000000000000e+03,1.063378206943223074e-69,1.950553864662228026e-83
+2.023000000000000000e+03,9.831814016465540468e-70,1.775601360118942341e-83
+2.024000000000000000e+03,9.090327996493041186e-70,1.616341003021822806e-83
+2.025000000000000000e+03,8.404762635403657475e-70,1.471365305709488758e-83
+2.026000000000000000e+03,7.770900564284111332e-70,1.339393023376978931e-83
+2.027000000000000000e+03,7.184842475577257137e-70,1.219257830879649707e-83
+2.028000000000000000e+03,6.642983135843699704e-70,1.109898015157079641e-83
+2.029000000000000000e+03,6.141989207572474467e-70,1.010347092182195103e-83
+2.030000000000000000e+03,5.678778743602308916e-70,9.197252655114606559e-84
+2.031000000000000000e+03,5.250502228012581343e-70,8.372316509499204691e-84
+2.032000000000000000e+03,4.854525046855121167e-70,7.621371986149868045e-84
+2.033000000000000000e+03,4.488411280888723029e-70,6.937782498471787259e-84
+2.034000000000000000e+03,4.149908720619355658e-70,6.315506720256146972e-84
+2.035000000000000000e+03,3.836935011459798845e-70,5.749045194539654915e-84
+2.036000000000000000e+03,3.547564843780078265e-70,5.233391731316056416e-84
+2.037000000000000000e+03,3.280018109047033533e-70,4.763989164569364512e-84
+2.038000000000000000e+03,3.032648949190882869e-70,4.336689077625692783e-84
+2.039000000000000000e+03,2.803935631837295277e-70,3.947715140888236812e-84
+2.040000000000000000e+03,2.592471189118229771e-70,3.593629737949904578e-84
+2.041000000000000000e+03,2.396954762475764065e-70,3.271303585134616823e-84
+2.042000000000000000e+03,2.216183600215659749e-70,2.977888075976228653e-84
+2.043000000000000000e+03,2.049045658580452050e-70,2.710790106225033771e-84
+2.044000000000000000e+03,1.894512760828493075e-70,2.467649156894032092e-84
+2.045000000000000000e+03,1.751634272234143014e-70,2.246316432812801505e-84
+2.046000000000000000e+03,1.619531252100607755e-70,2.044835872323182566e-84
+2.047000000000000000e+03,1.497391046810960007e-70,1.861426860286057481e-84
+2.048000000000000000e+03,1.384462290654376758e-70,1.694468491624147230e-84
+2.049000000000000000e+03,1.280050283675794655e-70,1.542485246326451626e-84
+2.050000000000000000e+03,1.183512718113879033e-70,1.404133949315430138e-84
+2.051000000000000000e+03,1.094255727138314486e-70,1.278191899932687827e-84
+2.052000000000000000e+03,1.011730231579835344e-70,1.163546066135653525e-84
+2.053000000000000000e+03,9.354285621784778030e-71,1.059183247907523786e-84
+2.054000000000000000e+03,8.648813365722246310e-71,9.641811229475950026e-85
+2.055000000000000000e+03,7.996545718135323927e-71,8.777000955076015369e-85
+2.056000000000000000e+03,7.393470146512596678e-71,7.989758763363834239e-85
+2.057000000000000000e+03,6.835876731549688999e-71,7.273127281572264374e-85
+2.058000000000000000e+03,6.320335344964189451e-71,6.620773169837179425e-85
+2.059000000000000000e+03,5.843674548494633838e-71,6.026931149341844288e-85
+2.060000000000000000e+03,5.402962084271876470e-71,5.486353050787156873e-85
+2.061000000000000000e+03,4.995486836548539275e-71,4.994261432896808242e-85
+2.062000000000000000e+03,4.618742153822361845e-71,4.546307361051404263e-85
+2.063000000000000000e+03,4.270410428752961082e-71,4.138531972917094170e-85
+2.064000000000000000e+03,3.948348841017252985e-71,3.767331491396584066e-85
+2.065000000000000000e+03,3.650576175394723457e-71,3.429425375700180377e-85
+2.066000000000000000e+03,3.375260633993447832e-71,3.121827329066926269e-85
+2.067000000000000000e+03,3.120708567642574245e-71,2.841818906912088607e-85
+2.068000000000000000e+03,2.885354057128020557e-71,2.586925492159438870e-85
+2.069000000000000000e+03,2.667749280181632174e-71,2.354894425435455455e-85
+2.070000000000000000e+03,2.466555604962295912e-71,2.143675096849368142e-85
+2.071000000000000000e+03,2.280535355240176782e-71,1.951400823415851804e-85
+2.072000000000000000e+03,2.108544196626812655e-71,1.776372351959846930e-85
+2.073000000000000000e+03,1.949524097011973248e-71,1.617042841707824335e-85
+2.074000000000000000e+03,1.802496817904323259e-71,1.472004193846866473e-85
+2.075000000000000000e+03,1.666557896634793142e-71,1.339974607236911711e-85
+2.076000000000000000e+03,1.540871082404990651e-71,1.219787250298118075e-85
+2.077000000000000000e+03,1.424663191951675579e-71,1.110379948958824706e-85
+2.078000000000000000e+03,1.317219353181694298e-71,1.010785799530589236e-85
+2.079000000000000000e+03,1.217878607518136786e-71,9.201246235495370605e-86
+2.080000000000000000e+03,1.126029843903819751e-71,8.375951890651345164e-86
+2.081000000000000000e+03,1.041108039450621673e-71,7.624681296307990958e-86
+2.082000000000000000e+03,9.625907836074461138e-72,6.940794984168227786e-86
+2.083000000000000000e+03,8.899950644650818427e-72,6.318249004792271245e-86
+2.084000000000000000e+03,8.228742974286048737e-72,5.751541513272703333e-86
+2.085000000000000000e+03,7.608155779780362786e-72,5.235664145843023781e-86
+2.086000000000000000e+03,7.034371416179460510e-72,4.766057757699859381e-86
+2.087000000000000000e+03,6.503860153898232470e-72,4.338572130866406922e-86
+2.088000000000000000e+03,6.013358465003859234e-72,3.949429296008975491e-86
+2.089000000000000000e+03,5.559848947084295633e-72,3.595190144057615676e-86
+2.090000000000000000e+03,5.140541761195943101e-72,3.272724032555836261e-86
+2.091000000000000000e+03,4.752857469708312597e-72,2.979181118131478329e-86
+2.092000000000000000e+03,4.394411168465495755e-72,2.711967170571294333e-86
+2.093000000000000000e+03,4.062997815652751882e-72,2.468720645916730039e-86
+2.094000000000000000e+03,3.756578667117302140e-72,2.247291815959428672e-86
+2.095000000000000000e+03,3.473268734694907495e-72,2.045723769690778495e-86
+2.096000000000000000e+03,3.211325190393642362e-72,1.862235118802836665e-86
+2.097000000000000000e+03,2.969136645098357045e-72,1.695204254397801884e-86
+2.098000000000000000e+03,2.745213235843314359e-72,1.543155015772604564e-86
+2.099000000000000000e+03,2.538177460673888121e-72,1.404743644623568209e-86
+2.100000000000000000e+03,2.346755704714395468e-72,1.278746909377954024e-86
+2.101000000000000000e+03,2.169770405315701097e-72,1.164051294698582031e-86
+2.102000000000000000e+03,2.006132808083215265e-72,1.059643160622450156e-86
+2.103000000000000000e+03,1.854836269223682771e-72,9.645997843631826224e-87
+2.104000000000000000e+03,1.714950063009496096e-72,8.780812056078732674e-87
+2.105000000000000000e+03,1.585613656264728005e-72,7.993228032398710906e-87
+2.106000000000000000e+03,1.466031414653079440e-72,7.276285378833019635e-87
+2.107000000000000000e+03,1.355467708201259400e-72,6.623648005489336023e-87
+2.108000000000000000e+03,1.253242385949210929e-72,6.029548130183319325e-87
+2.109000000000000000e+03,1.158726591889056780e-72,5.488735304784864521e-87
+2.110000000000000000e+03,1.071338896452870681e-72,4.996430013583099509e-87
+2.111000000000000000e+03,9.905417197525995392e-73,4.548281433588372014e-87
+2.112000000000000000e+03,9.158380245681933835e-73,4.140328983471437958e-87
+2.113000000000000000e+03,8.467682587407200466e-73,3.768967321322657107e-87
+2.114000000000000000e+03,7.829075281612989583e-73,3.430914481894209960e-87
+2.115000000000000000e+03,7.238629829643873584e-73,3.123182871731696618e-87
+2.116000000000000000e+03,6.692714008469059245e-73,2.843052865862429706e-87
+2.117000000000000000e+03,6.187969526459808568e-73,2.588048772695419964e-87
+2.118000000000000000e+03,5.721291364301564070e-73,2.355916954719889257e-87
+2.119000000000000000e+03,5.289808673954399380e-73,2.144605911640538205e-87
+2.120000000000000000e+03,4.890867118154252824e-73,1.952248149931184015e-87
+2.121000000000000000e+03,4.522012541818705691e-73,1.777143678576530339e-87
+2.122000000000000000e+03,4.180975874904184168e-73,1.617744985142308297e-87
+2.123000000000000000e+03,3.865659173846589223e-73,1.472643359398689822e-87
+2.124000000000000000e+03,3.574122715713391564e-73,1.340556443629022668e-87
+2.125000000000000000e+03,3.304573065676344348e-73,1.220316899598204087e-87
+2.126000000000000000e+03,3.055352044400691435e-73,1.110862092023241835e-87
+2.127000000000000000e+03,2.824926527479457232e-73,1.011224697372100133e-87
+2.128000000000000000e+03,2.611879014165278076e-73,9.205241549946346204e-88
+2.129000000000000000e+03,2.414898907379383935e-73,8.379588850338425672e-88
+2.130000000000000000e+03,2.232774451356324996e-73,7.627992043416323331e-88
+2.131000000000000000e+03,2.064385277328084896e-73,6.943808777929809540e-88
+2.132000000000000000e+03,1.908695511389438077e-73,6.320992480068259235e-88
+2.133000000000000000e+03,1.764747402148422767e-73,5.754038915943682413e-88
+2.134000000000000000e+03,1.631655428959756556e-73,5.237937547085456066e-88
+2.135000000000000000e+03,1.508600854497736413e-73,4.768127249043332344e-88
+2.136000000000000000e+03,1.394826688158249612e-73,4.340456001756002179e-88
+2.137000000000000000e+03,1.289633029305283912e-73,3.951144195440596407e-88
+2.138000000000000000e+03,1.192372761716494094e-73,3.596751227716169358e-88
+2.139000000000000000e+03,1.102447572740400254e-73,3.274145096756002661e-88
+2.140000000000000000e+03,1.019304272676889877e-73,2.980474721744455175e-88
+2.141000000000000000e+03,9.424313917393403425e-74,2.713144746016027343e-88
+2.142000000000000000e+03,8.713560336632362013e-74,2.469792600195558848e-88
+2.143000000000000000e+03,8.056409666066440773e-74,2.248267622631488267e-88
+2.144000000000000000e+03,7.448819334459964773e-74,2.046612052596220029e-88
+2.145000000000000000e+03,6.887051649213569043e-74,1.863043728277123568e-88
+2.146000000000000000e+03,6.367650803330356795e-74,1.695940336650363221e-88
+2.147000000000000000e+03,5.887421616444917311e-74,1.543825076042400371e-88
+2.148000000000000000e+03,5.443409879143244318e-74,1.405353604670284326e-88
+2.149000000000000000e+03,5.032884179653407097e-74,1.279302159816400437e-88
+2.150000000000000000e+03,4.653319101113066992e-74,1.164556742639040776e-88
+2.151000000000000000e+03,4.302379686050218417e-74,1.060103273038111841e-88
+2.152000000000000000e+03,3.977907072504305654e-74,9.650186275675961325e-89
+2.153000000000000000e+03,3.677905213430082631e-74,8.784624811916480200e-89
+2.154000000000000000e+03,3.400528597683052063e-74,7.996698807840702325e-89
+2.155000000000000000e+03,3.144070897051616545e-74,7.279444847385575001e-89
+2.156000000000000000e+03,2.906954469497036402e-74,6.626524089436979964e-89
+2.157000000000000000e+03,2.687720654026277854e-74,6.032166247355971499e-89
+2.158000000000000000e+03,2.485020797497842482e-74,5.491118593191622361e-89
+2.159000000000000000e+03,2.297607958158218658e-74,4.998599535898408119e-89
+2.160000000000000000e+03,2.124329234872896829e-74,4.550256363296112304e-89
+2.161000000000000000e+03,1.964118674864476538e-74,4.142126774313687163e-89
+2.162000000000000000e+03,1.815990716327027291e-74,3.770603861549895959e-89
+2.163000000000000000e+03,1.679034125579758365e-74,3.432404234679826022e-89
+2.164000000000000000e+03,1.552406391461851758e-74,3.124539002992823759e-89
+2.165000000000000000e+03,1.435328542485338498e-74,2.844287360615547663e-89
+2.166000000000000000e+03,1.327080354863232757e-74,2.589172540976012941e-89
+2.167000000000000000e+03,1.226995921933227622e-74,2.356939928001288687e-89
+2.168000000000000000e+03,1.134459557722840857e-74,2.145537130604918028e-89
+2.169000000000000000e+03,1.048902009454848858e-74,1.953095844368023673e-89
+2.170000000000000000e+03,9.697969556947467539e-75,1.777915340114458919e-89
+2.171000000000000000e+03,8.966577685971250869e-75,1.618447433457692017e-89
+2.172000000000000000e+03,8.290345203337778890e-75,1.473282802485499765e-89
+2.173000000000000000e+03,7.665112152882991908e-75,1.341138532662888286e-89
+2.174000000000000000e+03,7.087032309899219129e-75,1.220846778879656740e-89
+2.175000000000000000e+03,6.552549520448246298e-75,1.111344444441132887e-89
+2.176000000000000000e+03,6.058375825090365307e-75,1.011663785789385404e-89
+2.177000000000000000e+03,5.601471232456627860e-75,9.209238599221013796e-90
+2.178000000000000000e+03,5.179025018239449194e-75,8.383227389246342922e-90
+2.179000000000000000e+03,4.788438434554978114e-75,7.631304228099241772e-90
+2.180000000000000000e+03,4.427308723316002364e-75,6.946823880324120265e-90
+2.181000000000000000e+03,4.093414335266938781e-75,6.323737146600787463e-90
+2.182000000000000000e+03,3.784701263755178316e-75,5.756537403022928057e-90
+2.183000000000000000e+03,3.499270409169649705e-75,5.240211935471503848e-90
+2.184000000000000000e+03,3.235365896313994272e-75,4.770197638990070728e-90
+2.185000000000000000e+03,2.991364272850104672e-75,4.342340690649760078e-90
+2.186000000000000000e+03,2.765764522361724970e-75,3.952859839506512230e-90
+2.187000000000000000e+03,2.557178830603046385e-75,3.598312989219970739e-90
+2.188000000000000000e+03,2.364324048129978389e-75,3.275566778002744793e-90
+2.189000000000000000e+03,2.186013796793125121e-75,2.981768887058780967e-90
+2.190000000000000000e+03,2.021151171536529630e-75,2.714322832781005752e-90
+2.191000000000000000e+03,1.868721992604236409e-75,2.470865019932399189e-90
+2.192000000000000000e+03,1.727788566645339289e-75,2.249243853013009445e-90
+2.193000000000000000e+03,1.597483918338337367e-75,2.047500721207029317e-90
+2.194000000000000000e+03,1.477006457048381992e-75,1.863852688861414486e-90
+2.195000000000000000e+03,1.365615045710009722e-75,1.696676738520456746e-90
+2.196000000000000000e+03,1.262624441599524157e-75,1.544495427262031321e-90
+2.197000000000000000e+03,1.167401080950744132e-75,1.405963829570451372e-90
+2.198000000000000000e+03,1.079359181482771771e-75,1.279857651352596915e-90
+2.199000000000000000e+03,9.979571388629555664e-76,1.165062410052353094e-90
+2.200000000000000000e+03,9.226941949383257382e-76,1.060563585241282000e-90
+2.201000000000000000e+03,8.531073572387389239e-76,9.654376526398260693e-91
+2.202000000000000000e+03,7.887685508019169095e-76,8.788439223308314138e-91
+2.203000000000000000e+03,7.292819847995589957e-76,8.000171090343458095e-91
+2.204000000000000000e+03,6.742817177642936225e-76,7.282605687824954095e-91
+2.205000000000000000e+03,6.234294064402637176e-76,6.629401422221765114e-91
+2.206000000000000000e+03,5.764122244084551116e-76,6.034785501352867962e-91
+2.207000000000000000e+03,5.329409376831019069e-76,5.493502916456899305e-91
+2.208000000000000000e+03,4.927481254410150918e-76,5.000770000251885954e-91
+2.209000000000000000e+03,4.555865349379519957e-76,4.552232150547081160e-91
+2.210000000000000000e+03,4.212275604924972208e-76,4.143925345782772064e-91
+2.211000000000000000e+03,3.894598371802858765e-76,3.772241112386509568e-91
+2.212000000000000000e+03,3.600879405876201590e-76,3.433894634337592569e-91
+2.213000000000000000e+03,3.329311846258856407e-76,3.125895723105707411e-91
+2.214000000000000000e+03,3.078225100110536920e-76,2.845522391404257222e-91
+2.215000000000000000e+03,2.846074565708937390e-76,2.590296797213152420e-91
+2.216000000000000000e+03,2.631432130575575529e-76,2.357963345472578165e-91
+2.217000000000000000e+03,2.432977386205862125e-76,2.146468753918128020e-91
+2.218000000000000000e+03,2.249489505357117001e-76,1.953943906886016172e-91
+2.219000000000000000e+03,2.079839731927333017e-76,1.778687336718958718e-91
+2.220000000000000000e+03,1.922984437225437452e-76,1.619150186786267376e-91
+2.221000000000000000e+03,1.777958699915982450e-76,1.473922523227722245e-91
+2.222000000000000000e+03,1.643870370146080318e-76,1.341720874448285479e-91
+2.223000000000000000e+03,1.519894581337566929e-76,1.221376888242406694e-91
+2.224000000000000000e+03,1.405268675883458442e-76,1.111827006303464894e-91
+2.225000000000000000e+03,1.299287513533616142e-76,1.012103064865223916e-91
+2.226000000000000000e+03,1.201299133607330601e-76,9.213237384072134816e-92
+2.227000000000000000e+03,1.110700744349441962e-76,8.386867508060341758e-92
+2.228000000000000000e+03,1.026935014756853619e-76,7.634617850980531817e-92
+2.229000000000000000e+03,9.494866460644402864e-77,6.949840291919778636e-92
+2.230000000000000000e+03,8.778792017995205238e-77,6.326483004907477907e-92
+2.231000000000000000e+03,8.116721769037254722e-77,5.759036974981633025e-92
+2.232000000000000000e+03,7.504582878933315017e-77,5.242487311430095893e-92
+2.233000000000000000e+03,6.938609673873389770e-77,4.772268927929991491e-92
+2.234000000000000000e+03,6.415320475907804763e-77,4.344226197902623772e-92
+2.235000000000000000e+03,5.931496184829793382e-77,3.954576228529831235e-92
+2.236000000000000000e+03,5.484160475345674320e-77,3.599875428863146743e-92
+2.237000000000000000e+03,5.070561487717916804e-77,3.276989076564178799e-92
+2.238000000000000000e+03,4.688154899243403466e-77,2.983063614318525247e-92
+2.239000000000000000e+03,4.334588272430396270e-77,2.715501431088406453e-92
+2.240000000000000000e+03,4.007686583590457891e-77,2.471937905329429838e-92
+2.241000000000000000e+03,3.705438842818815759e-77,2.250220507287845037e-92
+2.242000000000000000e+03,3.425985723057612637e-77,2.048389775690569245e-92
+2.243000000000000000e+03,3.167608122137031234e-77,1.864662000708060649e-92
+2.244000000000000000e+03,2.928716587433214251e-77,1.697413460146961671e-92
+2.245000000000000000e+03,2.707841538087721588e-77,1.545166069557919880e-92
+2.246000000000000000e+03,2.503624224636681073e-77,1.406574319439152862e-92
+2.247000000000000000e+03,2.314808370438907243e-77,1.280413384091304663e-92
+2.248000000000000000e+03,2.140232443481716456e-77,1.165568297033750322e-92
+2.249000000000000000e+03,1.978822511024127908e-77,1.061024097318651171e-92
+2.250000000000000000e+03,1.829585633122095753e-77,9.658568596587869185e-93
+2.251000000000000000e+03,1.691603754393448142e-77,8.792255290972598898e-93
+2.252000000000000000e+03,1.564028056448477330e-77,8.003644880561821402e-93
+2.253000000000000000e+03,1.446073736242794218e-77,7.285767900747261268e-93
+2.254000000000000000e+03,1.337015178231249146e-77,6.632280004386327689e-93
+2.255000000000000000e+03,1.236181490623968684e-77,6.037405892667976633e-93
+2.256000000000000000e+03,1.142952378284031203e-77,5.495888275029732902e-93
+2.257000000000000000e+03,1.056754326879414506e-77,5.002941407052297467e-93
+2.258000000000000000e+03,9.770570748144341529e-78,4.554208795713374852e-93
+2.259000000000000000e+03,9.033703512376013287e-78,4.145724698217769200e-93
+2.260000000000000000e+03,8.352408600594417651e-78,3.773879074141269274e-93
+2.261000000000000000e+03,7.722494914262784444e-78,3.435385681148585369e-93
+2.262000000000000000e+03,7.140087434967211102e-78,3.127253032326213403e-93
+2.263000000000000000e+03,6.601603386596985730e-78,2.846757958461151760e-93
+2.264000000000000000e+03,6.103730195305224449e-78,2.591421541618567044e-93
+2.265000000000000000e+03,5.643405111661274183e-78,2.358987207326496461e-93
+2.266000000000000000e+03,5.217796369639679681e-78,2.147400781755619418e-93
+2.267000000000000000e+03,4.824285766543408334e-78,1.954792337645098630e-93
+2.268000000000000000e+03,4.460452556694896222e-78,1.779459668535621630e-93
+2.269000000000000000e+03,4.124058559818943408e-78,1.619853245260567830e-93
+2.270000000000000000e+03,3.813034392505422723e-78,1.474562521746003209e-93
+2.271000000000000000e+03,3.525466738054052321e-78,1.342303469094886513e-93
+2.272000000000000000e+03,3.259586576390461240e-78,1.221907227786288904e-93
+2.273000000000000000e+03,3.013758301645245817e-78,1.112309777701118870e-93
+2.274000000000000000e+03,2.786469660454151524e-78,1.012542534682431805e-93
+2.275000000000000000e+03,2.576322449080608226e-78,9.217237905253847571e-94
+2.276000000000000000e+03,2.382023912133575640e-78,8.390509207466918382e-94
+2.277000000000000000e+03,2.202378789969071541e-78,7.637932912685109969e-94
+2.278000000000000000e+03,2.036281965851859905e-78,6.952858013284864060e-94
+2.279000000000000000e+03,1.882711667647209562e-78,6.329230055505454734e-94
+2.280000000000000000e+03,1.740723182220094001e-78,5.761537632290539723e-94
+2.281000000000000000e+03,1.609443043875670188e-78,5.244763675389752884e-94
+2.282000000000000000e+03,1.488063661090682395e-78,4.774341116253719986e-94
+2.283000000000000000e+03,1.375838348480010111e-78,4.346112523870183001e-94
+2.284000000000000000e+03,1.272076733438117753e-78,3.956293362834249001e-94
+2.285000000000000000e+03,1.176140509197435721e-78,3.601438546940359323e-94
+2.286000000000000000e+03,1.087439508178424670e-78,3.278411992708165261e-94
+2.287000000000000000e+03,1.005428071476161326e-78,2.984358903767522328e-94
+2.288000000000000000e+03,9.296016921489117321e-79,2.716680541160193696e-94
+2.289000000000000000e+03,8.594939116603024433e-79,2.473011256588917350e-94
+2.290000000000000000e+03,7.946734503822447515e-79,2.251197585640183053e-94
+2.291000000000000000e+03,7.347415545067804545e-79,2.049279216214507315e-94
+2.292000000000000000e+03,6.793295430461221009e-79,1.865471663969691668e-94
+2.293000000000000000e+03,6.280965398302937676e-79,1.698150501668624723e-94
+2.294000000000000000e+03,5.807273765510347228e-79,1.545837003056367976e-94
+2.295000000000000000e+03,5.369306539516638570e-79,1.407185074391362337e-94
+2.296000000000000000e+03,4.964369492362268913e-79,1.280969358137184170e-94
+2.297000000000000000e+03,4.589971586706338490e-79,1.166074403678639344e-94
+2.298000000000000000e+03,4.243809651796464029e-79,1.061484809357067726e-94
+2.299000000000000000e+03,3.923754215133244637e-79,9.662762487035376729e-95
+2.300000000000000000e+03,3.627836402666897461e-79,8.796073015629012630e-95
+2.301000000000000000e+03,3.354235826942027037e-79,8.007120179150009114e-95
+2.302000000000000000e+03,3.101269388683297430e-79,7.288931486748037913e-95
+2.303000000000000000e+03,2.867380922930565783e-79,6.635159836472791904e-95
+2.304000000000000000e+03,2.651131626033019136e-79,6.040027421794793738e-95
+2.305000000000000000e+03,2.451191204609433309e-79,5.498274669359981953e-95
+2.306000000000000000e+03,2.266329692028580565e-79,5.005113756709148542e-95
+2.307000000000000000e+03,2.095409882065445136e-79,4.556186299167772988e-95
+2.308000000000000000e+03,1.937380333188532653e-79,4.147524831957550934e-95
+2.309000000000000000e+03,1.791268900443501732e-79,3.775517747122651027e-95
+2.310000000000000000e+03,1.656176755141932389e-79,3.436877375393612205e-95
+2.311000000000000000e+03,1.531272855568105238e-79,3.128610930909963017e-95
+2.312000000000000000e+03,1.415788834688009587e-79,2.847994062019247553e-95
+2.313000000000000000e+03,1.309014273412113608e-79,2.592546774404375282e-95
+2.314000000000000000e+03,1.210292330334905872e-79,2.360011513756136019e-95
+2.315000000000000000e+03,1.119015701065846122e-79,2.148333214293165251e-95
+2.316000000000000000e+03,1.034622882296036594e-79,1.955641136805056009e-95
+2.317000000000000000e+03,9.565947176174613624e-80,1.780232335709900824e-95
+2.318000000000000000e+03,8.844512038462482751e-80,1.620556609012999689e-95
+2.319000000000000000e+03,8.177485382037416376e-80,1.475202798160873079e-95
+2.320000000000000000e+03,7.560763881899642481e-80,1.342886316712563826e-95
+2.321000000000000000e+03,6.990553673554288704e-80,1.222437797611321084e-95
+2.322000000000000000e+03,6.463347014424513381e-80,1.112792758725141181e-95
+2.323000000000000000e+03,5.975900705391337354e-80,1.012982195323773713e-95
+2.324000000000000000e+03,5.525216139718190354e-80,9.221240163519568129e-96
+2.325000000000000000e+03,5.108520856623295954e-80,8.394152488151909301e-96
+2.326000000000000000e+03,4.723251486028974930e-80,7.641249413837303505e-96
+2.327000000000000000e+03,4.367037979565329850e-80,6.955877044988494597e-96
+2.328000000000000000e+03,4.037689030824667464e-80,6.331978298912788757e-96
+2.329000000000000000e+03,3.733178595177916046e-80,5.764039375421250629e-96
+2.330000000000000000e+03,3.451633426224434727e-80,5.247041027779776850e-96
+2.331000000000000000e+03,3.191321552207185849e-80,4.776414204351511411e-96
+2.332000000000000000e+03,2.950641621501131809e-80,4.347999668907688452e-96
+2.333000000000000000e+03,2.728113051633147757e-80,3.958011242743152626e-96
+2.334000000000000000e+03,2.522366921234213423e-80,3.603002343745990414e-96
+2.335000000000000000e+03,2.332137548892139890e-80,3.279835526703054546e-96
+2.336000000000000000e+03,2.156254707103183564e-80,2.985654755650053873e-96
+2.337000000000000000e+03,1.993636423423411705e-80,2.717860163218738748e-96
+2.338000000000000000e+03,1.843282324535782926e-80,2.474085073913005009e-96
+2.339000000000000000e+03,1.704267482288333877e-80,2.252175088254036846e-96
+2.340000000000000000e+03,1.575736723844957872e-80,2.050169042946351276e-96
+2.341000000000000000e+03,1.456899370948373327e-80,1.866281678798790625e-96
+2.342000000000000000e+03,1.347024375931643083e-80,1.698887863224445022e-96
+2.343000000000000000e+03,1.245435824557218622e-80,1.546508227883907120e-96
+2.344000000000000000e+03,1.151508778018785473e-80,1.407796094542262295e-96
+2.345000000000000000e+03,1.064665428526349867e-80,1.281525573595087380e-96
+2.346000000000000000e+03,9.843715448261257445e-81,1.166580730082334139e-96
+2.347000000000000000e+03,9.101331857883451867e-81,1.061945721443297255e-96
+2.348000000000000000e+03,8.414936618464863494e-81,9.666958198530615762e-97
+2.349000000000000000e+03,7.780307255959157357e-81,8.799892397996546207e-97
+2.350000000000000000e+03,7.193539742688172601e-81,8.010596986763430015e-97
+2.351000000000000000e+03,6.651024481070612162e-81,7.292096446423906670e-97
+2.352000000000000000e+03,6.149424098582743198e-81,6.638040919024269507e-97
+2.353000000000000000e+03,5.685652917359741794e-81,6.042650089227548468e-97
+2.354000000000000000e+03,5.256857972136378858e-81,5.500662099897073757e-97
+2.355000000000000000e+03,4.860401459758068846e-81,5.007287049631558428e-97
+2.356000000000000000e+03,4.493844512298758068e-81,4.558164661282698191e-97
+2.357000000000000000e+03,4.154932193959609896e-81,4.149325747341606505e-97
+2.358000000000000000e+03,3.841579629458776929e-81,3.777157131639695410e-97
+2.359000000000000000e+03,3.551859178575204728e-81,3.438369717353993904e-97
+2.360000000000000000e+03,3.283988577950143226e-81,3.129969419113043458e-97
+2.361000000000000000e+03,3.036319977199503610e-81,2.849230702311340268e-97
+2.362000000000000000e+03,2.807329801888395676e-81,2.593672495782491455e-97
+2.363000000000000000e+03,2.595609381011198484e-81,2.361036264954403291e-97
+2.364000000000000000e+03,2.399856281318158448e-81,2.149266051706369418e-97
+2.365000000000000000e+03,2.218866295181265769e-81,1.956490304525964254e-97
+2.366000000000000000e+03,2.051526032711984131e-81,1.781005338387514766e-97
+2.367000000000000000e+03,1.896806072558341003e-81,1.621260278176211573e-97
+2.368000000000000000e+03,1.753754629249351310e-81,1.475843352593082513e-97
+2.369000000000000000e+03,1.621491698128785200e-81,1.343469417411084438e-97
+2.370000000000000000e+03,1.499203641860590811e-81,1.222968597817425302e-97
+2.371000000000000000e+03,1.386138185204330311e-81,1.113275949466491474e-97
+2.372000000000000000e+03,1.281599787269037817e-81,1.013422046872166115e-97
+2.373000000000000000e+03,1.184945362778475558e-81,9.225244159624086024e-98
+2.374000000000000000e+03,1.095580326025366550e-81,8.397797350802408577e-98
+2.375000000000000000e+03,1.012954933178812384e-81,7.644567355062571736e-98
+2.376000000000000000e+03,9.365609004442493603e-82,6.958897387599242020e-98
+2.377000000000000000e+03,8.659282772712252997e-82,6.334727735647056767e-98
+2.378000000000000000e+03,8.006225553749212558e-82,5.766542204844919450e-98
+2.379000000000000000e+03,7.402419957863491586e-82,5.249319369029061198e-98
+2.380000000000000000e+03,6.844151574884623216e-82,4.778488192614331301e-98
+2.381000000000000000e+03,6.327986124353418080e-82,4.349887633371039647e-98
+2.382000000000000000e+03,5.850748328975064155e-82,3.959729868580518693e-98
+2.383000000000000000e+03,5.409502381376064727e-82,3.604566819574957252e-98
+2.384000000000000000e+03,5.001533883998115896e-82,3.281259678816940006e-98
+2.385000000000000000e+03,4.624333151031387219e-82,2.986951170210165576e-98
+2.386000000000000000e+03,4.275579769667425314e-82,2.719040297486197774e-98
+2.387000000000000000e+03,3.953128325694186865e-82,2.475159357504206071e-98
+2.388000000000000000e+03,3.654995205625946397e-82,2.253153015313754487e-98
+2.389000000000000000e+03,3.379346394175842146e-82,2.051059256053915447e-98
+2.390000000000000000e+03,3.124486192006695239e-82,1.867092045348119660e-98
+2.391000000000000000e+03,2.888846784356251661e-82,1.699625544953289897e-98
+2.392000000000000000e+03,2.670978596364152384e-82,1.547179744166949345e-98
+2.393000000000000000e+03,2.469541375772609768e-82,1.408407380006926056e-98
+2.394000000000000000e+03,2.283295948142289281e-82,1.282082030569766161e-98
+2.395000000000000000e+03,2.111096593865245178e-82,1.167087276340323906e-98
+2.396000000000000000e+03,1.951884000081374134e-82,1.062406833664263977e-98
+2.397000000000000000e+03,1.804678744139335049e-82,9.671155731864861669e-99
+2.398000000000000000e+03,1.668575268516285007e-82,8.803713438795498180e-99
+2.399000000000000000e+03,1.542736310130306960e-82,8.014075304056874218e-99
+2.400000000000000000e+03,1.426387749778184873e-82,7.295262780370921255e-99
+2.401000000000000000e+03,1.318813850012696720e-82,6.640923252583350206e-99
+2.402000000000000000e+03,1.219352852165011082e-82,6.045273895460678769e-99
+2.403000000000000000e+03,1.127392905426854279e-82,5.503050567091256871e-99
+2.404000000000000000e+03,1.042368302948592111e-82,5.009461286229391355e-99
+2.405000000000000000e+03,9.637560018000506642e-83,4.560143882431251776e-99
+2.406000000000000000e+03,8.910724053851566041e-83,4.151127444709099921e-99
+2.407000000000000000e+03,8.238703885172782147e-83,3.778797228001145687e-99
+2.408000000000000000e+03,7.617365468547331662e-83,3.439862707310783391e-99
+2.409000000000000000e+03,7.042886537752870374e-83,3.131328497191299005e-99
+2.410000000000000000e+03,6.511733090459162990e-83,2.850467879570648187e-99
+2.411000000000000000e+03,6.020637648226432833e-83,2.594798705965216174e-99
+2.412000000000000000e+03,5.566579156069879688e-83,2.362061461114558114e-99
+2.413000000000000000e+03,5.146764397940584568e-83,2.150199294171157312e-99
+2.414000000000000000e+03,4.758610813792841332e-83,1.957339840967746396e-99
+2.415000000000000000e+03,4.399730612539218008e-83,1.781778676714041836e-99
+2.416000000000000000e+03,4.067916083157536173e-83,1.621964252882724784e-99
+2.417000000000000000e+03,3.761126013590400934e-83,1.476484185163266697e-99
+2.418000000000000000e+03,3.477473133891832087e-83,1.344052771300416328e-99
+2.419000000000000000e+03,3.215212506372588252e-83,1.223499628504705361e-99
+2.420000000000000000e+03,2.972730791327590089e-83,1.113759350016295223e-99
+2.421000000000000000e+03,2.748536322309060754e-83,1.013862089410445827e-99
+2.422000000000000000e+03,2.541249929893000690e-83,9.229249894321472706e-100
+2.423000000000000000e+03,2.349596457490510336e-83,8.401443796104848597e-100
+2.424000000000000000e+03,2.172396917010143785e-83,7.647886736985785628e-100
+2.425000000000000000e+03,2.008561236117814083e-83,6.961919041686716547e-100
+2.426000000000000000e+03,1.857081552475983179e-83,6.337478366226775275e-100
+2.427000000000000000e+03,1.717026013711348511e-83,5.769046121033554269e-100
+2.428000000000000000e+03,1.587533044970945313e-83,5.251598699567280112e-100
+2.429000000000000000e+03,1.467806048801270010e-83,4.780563081432773836e-100
+2.430000000000000000e+03,1.357108504747393677e-83,4.351776417615795420e-100
+2.431000000000000000e+03,1.254759438525189944e-83,3.961449240670015112e-100
+2.432000000000000000e+03,1.160129232895096382e-83,3.606131974721897886e-100
+2.433000000000000000e+03,1.072635754467594824e-83,3.282684449318404174e-100
+2.434000000000000000e+03,9.917407726129344965e-84,2.988248147692351026e-100
+2.435000000000000000e+03,9.169466484464590536e-84,2.720220944185134237e-100
+2.436000000000000000e+03,8.477932735204482929e-84,2.476234107564839517e-100
+2.437000000000000000e+03,7.838552393906977628e-84,2.254131367003508504e-100
+2.438000000000000000e+03,7.247392206461588755e-84,2.051949855704852355e-100
+2.439000000000000000e+03,6.700815553023145562e-84,1.867902763770293814e-100
+2.440000000000000000e+03,6.195460076743793952e-84,1.700363546994279599e-100
+2.441000000000000000e+03,5.728216999677012695e-84,1.547851552032136398e-100
+2.442000000000000000e+03,5.296211998614530508e-84,1.409018930900636655e-100
+2.443000000000000000e+03,4.896787523212008766e-84,1.282638729166163387e-100
+2.444000000000000000e+03,4.527486447626493562e-84,1.167594042548005959e-100
+2.445000000000000000e+03,4.186036955100834223e-84,1.062868146106808978e-100
+2.446000000000000000e+03,3.870338562505390559e-84,9.675355087828631779e-101
+2.447000000000000000e+03,3.578449198868925192e-84,8.807536138745488666e-101
+2.448000000000000000e+03,3.308573258406817968e-84,8.017555131686319102e-101
+2.449000000000000000e+03,3.059050554554304922e-84,7.298430489186228108e-101
+2.450000000000000000e+03,2.828346107054415711e-84,6.643806837693619358e-101
+2.451000000000000000e+03,2.615040699271854007e-84,6.047898840988324473e-101
+2.452000000000000000e+03,2.417822147647313536e-84,5.505440071392352190e-101
+2.453000000000000000e+03,2.235477229582617193e-84,5.011636466912119045e-101
+2.454000000000000000e+03,2.066884220100705752e-84,4.562123962986178678e-101
+2.455000000000000000e+03,1.911005991369031098e-84,4.152929924399818382e-101
+2.456000000000000000e+03,1.766883632635356049e-84,3.780438036516309998e-101
+2.457000000000000000e+03,1.633630551329784037e-84,3.441356345545544375e-101
+2.458000000000000000e+03,1.510427019043477127e-84,3.132688165401039207e-101
+2.459000000000000000e+03,1.396515128833404607e-84,2.851705594030169809e-101
+2.460000000000000000e+03,1.291194132832510425e-84,2.595925405164648710e-101
+2.461000000000000000e+03,1.193816131482765592e-84,2.363087102429674245e-101
+2.462000000000000000e+03,1.103782087873960381e-84,2.151132941863286191e-101
+2.463000000000000000e+03,1.020538142668766681e-84,1.958189746290617972e-101
+2.464000000000000000e+03,9.435722069451753947e-85,1.782552350835327633e-101
+2.465000000000000000e+03,8.724108119968484606e-85,1.622668533265303065e-101
+2.466000000000000000e+03,8.066161967116960706e-85,1.477125295992239501e-101
+2.467000000000000000e+03,7.457836146120480318e-85,1.344636378490422257e-101
+2.468000000000000000e+03,6.895388439895466062e-85,1.224030889773170359e-101
+2.469000000000000000e+03,6.375358858182477846e-85,1.114242960465590960e-101
+2.470000000000000000e+03,5.894548352844227176e-85,1.014302323021601483e-101
+2.471000000000000000e+03,5.449999138389379126e-85,9.233257368367174065e-102
+2.472000000000000000e+03,5.038976496666276823e-85,8.405091824746919125e-102
+2.473000000000000000e+03,4.658951953790522584e-85,7.651207560232947299e-102
+2.474000000000000000e+03,4.307587725818570786e-85,6.964942007819985685e-102
+2.475000000000000000e+03,3.982722337483375737e-85,6.340230191169972089e-102
+2.476000000000000000e+03,3.682357325520127044e-85,5.771551124458720551e-102
+2.477000000000000000e+03,3.404644944789184425e-85,5.253879019823699073e-102
+2.478000000000000000e+03,3.147876801565307164e-85,4.782638871198144985e-102
+2.479000000000000000e+03,2.910473344070338237e-85,4.353666021998165308e-102
+2.480000000000000000e+03,2.690974145599350208e-85,3.963169359335900916e-102
+2.481000000000000000e+03,2.488028920463097621e-85,3.607697809481884439e-102
+2.482000000000000000e+03,2.300389217482440555e-85,3.284109838475771921e-102
+2.483000000000000000e+03,2.126900739933787871e-85,2.989545688340868440e-102
+2.484000000000000000e+03,1.966496244701379907e-85,2.721402103537899375e-102
+2.485000000000000000e+03,1.818188976954855771e-85,2.477309324297594148e-102
+2.486000000000000000e+03,1.681066599962946421e-85,2.255110143507807833e-102
+2.487000000000000000e+03,1.554285582703292195e-85,2.052840842067122120e-102
+2.488000000000000000e+03,1.437066010741412859e-85,1.868713834218208515e-102
+2.489000000000000000e+03,1.328686788457723766e-85,1.701101869486401233e-102
+2.490000000000000000e+03,1.228481203108644025e-85,1.548523651605990231e-102
+2.491000000000000000e+03,1.135832823432365500e-85,1.409630747338567619e-102
+2.492000000000000000e+03,1.050171707570100383e-85,1.283195669489121753e-102
+2.493000000000000000e+03,9.709708969740300550e-86,1.168101028800952154e-102
+2.494000000000000000e+03,8.977431747347091410e-86,1.063329658857931635e-102
+2.495000000000000000e+03,8.300380683854146342e-86,9.679556267213889847e-103
+2.496000000000000000e+03,7.674390787460626531e-86,8.811360498567188828e-103
+2.497000000000000000e+03,7.095611177596576698e-86,8.021036470307117564e-103
+2.498000000000000000e+03,6.560481395591216164e-86,7.301599573466398901e-103
+2.499000000000000000e+03,6.065709501922979449e-86,6.646691674898141132e-103
+2.500000000000000000e+03,5.608251825307414612e-86,6.050524926305528598e-103
diff --git a/CIP-0161/graph/scenario-cost-cross-thresholds.py b/CIP-0161/graph/scenario-cost-cross-thresholds.py
new file mode 100644
index 0000000000..aa805a349a
--- /dev/null
+++ b/CIP-0161/graph/scenario-cost-cross-thresholds.py
@@ -0,0 +1,137 @@
+import numpy as np
+import matplotlib.pyplot as plt
+from matplotlib.patches import Patch
+
+# Define the range for rho (Grinding Depth)
+rho = np.linspace(1, 256, 1000)
+f = 0.05
+cost_per_cpu_hour = 0.01
+w_O = 20 * (2 * rho - 1)
+w_O_hours = w_O / 3600
+epsilon = 1e-100 # Avoid log(0)
+
+# Praos cost functions
+def ant_glance_praos(rho): return 5e-10 * 2**(rho - 2)
+def ant_patrol_praos(rho): return 5e-10 * 2**(rho - 1) + 2.16e-2 * 2**(rho - 1) / rho
+def owl_stare_praos(rho): return 5e-10 * 2**(rho - 2) + 5e-2 * 2**(rho - 1) / rho
+def owl_survey_praos(rho): return 5e-10 * 2**(rho - 2) + 7.16e-2 * 2**(rho - 1) / rho
+
+# Phalanx cost function
+def phalanx_cost(rho, scale): return (scale * 2**(rho - 1)) / rho
+
+# Compute log10(Cost) from CPU count
+def log_cost(n_cpu): return np.log10(np.maximum(n_cpu * cost_per_cpu_hour * w_O_hours, epsilon))
+
+# Curves for Praos
+praos_curves = {
+ 'Ant Glance Praos': ('blue', log_cost(ant_glance_praos(rho))),
+ 'Ant Patrol Praos': ('orange', log_cost(ant_patrol_praos(rho))),
+ 'Owl Stare Praos': ('green', log_cost(owl_stare_praos(rho))),
+ 'Owl Survey Praos': ('red', log_cost(owl_survey_praos(rho))),
+}
+
+# Curves for Phalanx configurations
+phalanx_curves = {
+ 'Phalanx$_{1/100}$': ('#6A5ACD', log_cost(phalanx_cost(rho, 2.16e2))),
+ 'Phalanx$_{1/10}$': ('#228B22', log_cost(phalanx_cost(rho, 2.16e3))),
+ 'Phalanx$_{max}$': ('#B22222', log_cost(phalanx_cost(rho, 2.16e4))),
+}
+
+# Feasibility zones
+zones = [
+ (-10, 4, 'green', 'Trivial'),
+ (4, 6, 'yellow', 'Feasible'),
+ (6, 9, '#FFA07A', 'Possible'),
+ (9, 12, '#FF6347', 'Borderline Infeasible'),
+ (12, 90, 'red', 'Infeasible')
+]
+
+# Function to find crossing points and annotate
+def annotate_crossings(log_costs, color, threshold, position='above'):
+ # Find indices where the curve crosses the threshold
+ indices = np.where((log_costs[:-1] < threshold) & (log_costs[1:] >= threshold))[0]
+ if len(indices) > 0:
+ idx = indices[0]
+ rho_val = rho[idx]
+ plt.scatter(rho_val, threshold, color=color, marker='o', s=50, zorder=5)
+ # Position above or below based on the curve
+ if position == 'below':
+ plt.annotate(f'{rho_val:.1f}',
+ xy=(rho_val, threshold),
+ xytext=(rho_val + 1.1, threshold - 0.4),
+ fontsize=8, color=color)
+ elif position == 'green':
+ plt.annotate(f'{rho_val:.1f}',
+ xy=(rho_val, threshold),
+ xytext=(rho_val - 0.6, threshold - 0.9),
+ fontsize=8, color=color)
+ else:
+ plt.annotate(f'{rho_val:.1f}',
+ xy=(rho_val, threshold),
+ xytext=(rho_val - 1, threshold + 0.3),
+ fontsize=8, color=color)
+
+
+# # Annotate where curves cross threshold lines
+# def annotate_crossings(log_costs, color, threshold, position='above'):
+# indices = np.where((log_costs[:-1] < threshold) & (log_costs[1:] >= threshold))[0]
+# if len(indices) > 0:
+# idx = indices[0]
+# rho_val = rho[idx]
+# plt.scatter(rho_val, threshold, color=color, marker='o', s=50, zorder=5)
+# offset = {'above': (1, 0.5), 'below': (1.1, -0.4), 'green': (-0.6, -0.9)}.get(position, (1, 0.5))
+# plt.annotate(f'{rho_val:.1f}', xy=(rho_val, threshold),
+# xytext=(rho_val + offset[0], threshold + offset[1]),
+# fontsize=8, color=color)
+
+# Unified curve list for annotation logic
+curves = [
+ (praos_curves['Ant Glance Praos'][1], 'blue', 'above'),
+ (praos_curves['Ant Patrol Praos'][1], 'orange', 'below'),
+ (praos_curves['Owl Stare Praos'][1], 'green', 'green'),
+ (praos_curves['Owl Survey Praos'][1], 'red', 'above'),
+ (phalanx_curves['Phalanx$_{1/100}$'][1], '#6A5ACD', 'above'),
+ (phalanx_curves['Phalanx$_{1/10}$'][1], '#228B22', 'above'),
+ (phalanx_curves['Phalanx$_{max}$'][1], '#B22222', 'above')
+]
+
+# Plotting
+plt.figure(figsize=(12, 7))
+
+# Plot each Praos and Phalanx curve
+for label, (color, values) in praos_curves.items():
+ plt.plot(rho, values, label=label, color=color, linewidth=2)
+for label, (color, values) in phalanx_curves.items():
+ plt.plot(rho, values, label=label, color=color, linestyle='--', linewidth=2)
+
+# Add feasibility zones
+for y0, y1, color, label in zones:
+ plt.axhspan(y0, y1, color=color, alpha=0.1, label=label)
+
+# Annotate crossings
+for threshold, _, _, _ in zones:
+ for log_costs, color, position in curves:
+ annotate_crossings(log_costs, color, threshold, position)
+
+# Axis labels and title
+plt.xlabel(r'$\rho$ (Grinding Depth)', fontsize=14)
+plt.ylabel(r'$\log_{10}(\mathrm{Cost\ (USD)})$', fontsize=14)
+plt.title('Cost of Grinding Attacks Across Praos and Phalanx Scenarios', fontsize=16)
+plt.grid(True, linestyle='--', alpha=0.7)
+plt.xlim(0, 256)
+y_max = max(np.max(v[np.isfinite(v)]) for _, v in list(praos_curves.values()) + list(phalanx_curves.values())) + 5
+plt.ylim(-5, y_max)
+
+# Custom legend
+legend_elements = [
+ *[plt.Line2D([0], [0], color=color, lw=2, label=label) for label, (color, _) in praos_curves.items()],
+ *[plt.Line2D([0], [0], color=color, lw=2, linestyle='--', label=label) for label, (color, _) in phalanx_curves.items()],
+ *[Patch(facecolor=color, alpha=0.1, label=label) for _, _, color, label in zones]
+]
+plt.legend(handles=legend_elements, fontsize=10, loc='lower right',
+ bbox_to_anchor=(1, 0), ncol=2, handletextpad=0.5, columnspacing=1.5)
+
+# Final layout and save
+plt.subplots_adjust(left=0.1, right=0.95, top=0.9, bottom=0.2)
+
+plt.show()
diff --git a/CIP-0161/graph/scenario_cost_praos_vs_phalanx-full-scenarios.py b/CIP-0161/graph/scenario_cost_praos_vs_phalanx-full-scenarios.py
new file mode 100644
index 0000000000..5df2375b1b
--- /dev/null
+++ b/CIP-0161/graph/scenario_cost_praos_vs_phalanx-full-scenarios.py
@@ -0,0 +1,114 @@
+import numpy as np
+import matplotlib.pyplot as plt
+from matplotlib.patches import Patch
+
+# Range for rho (Grinding Depth)
+rho = np.linspace(1, 256, 1000)
+f = 0.05
+cost_per_cpu_hour = 0.01 # $0.01 per CPU-hour
+
+# Time window for computation (w_O)
+w_O = 20 * (2 * rho - 1)
+w_O_hours = w_O / 3600
+
+# PRAOS cost functions
+def ant_glance_praos(rho): return 5e-10 * 2**(rho - 2)
+def ant_patrol_praos(rho): return ant_glance_praos(rho) + 2.16e-2 * 2**(rho - 1) / rho
+def owl_stare_praos(rho): return ant_glance_praos(rho) + 5e-2 * 2**(rho - 1) / rho
+def owl_survey_praos(rho): return ant_glance_praos(rho) + 7.16e-2 * 2**(rho - 1) / rho
+
+# PHALANX curves (generalized)
+def phalanx_curve(multiplier):
+ return lambda rho: (multiplier * 2**(rho - 1)) / rho
+
+phalanx_1_100 = phalanx_curve(2.16e2)
+phalanx_1_10 = phalanx_curve(2.16e3)
+phalanx_max = phalanx_curve(2.16e4)
+
+# Convert to log10 cost
+def compute_log_cost(n_cpu):
+ return np.log10(np.maximum(n_cpu * cost_per_cpu_hour * w_O_hours, 1e-100))
+
+# Scenario definitions
+scenarios = {
+ "Ant Glance Praos": compute_log_cost(ant_glance_praos(rho)),
+ "Ant Patrol Praos": compute_log_cost(ant_patrol_praos(rho)),
+ "Owl Stare Praos": compute_log_cost(owl_stare_praos(rho)),
+ "Owl Survey Praos": compute_log_cost(owl_survey_praos(rho)),
+ "Phalanx$_{1/100}$": compute_log_cost(phalanx_1_100(rho)),
+ "Phalanx$_{1/10}$": compute_log_cost(phalanx_1_10(rho)),
+ "Phalanx$_{max}$": compute_log_cost(phalanx_max(rho)),
+}
+
+# Color map for plot lines
+color_map = {
+ "Ant Glance Praos": "blue",
+ "Ant Patrol Praos": "orange",
+ "Owl Stare Praos": "green",
+ "Owl Survey Praos": "red",
+ "Phalanx$_{1/100}$": '#6A5ACD',
+ "Phalanx$_{1/10}$": '#228B22',
+ "Phalanx$_{max}$": "#B22222"
+}
+
+# Feasibility zones
+zones = [
+ (-10, 4, 'green', 'Trivial'),
+ (4, 6, 'yellow', 'Feasible'),
+ (6, 9, '#FFA07A', 'Possible'),
+ (9, 12, '#FF6347', 'Borderline Infeasible'),
+ (12, 90, 'red', 'Infeasible')
+]
+
+# Plot
+plt.figure(figsize=(12, 7))
+
+# Draw curves
+for label, log_cost in scenarios.items():
+ style = "-" if "Praos" in label else "--"
+ plt.plot(rho, log_cost, label=label, color=color_map[label], linestyle=style, linewidth=2)
+
+# Draw feasibility zones
+for y0, y1, color_zone, label in zones:
+ plt.axhspan(y0, y1, color=color_zone, alpha=0.1, label=label)
+
+# Axis labels and title
+plt.xlabel(r'$\rho$ (Grinding Depth)', fontsize=14)
+plt.ylabel(r'$\log_{10}(\mathrm{Cost\ (USD)})$', fontsize=14)
+plt.title('Cost of Grinding Attacks: Praos vs Phalanx Configurations', fontsize=16)
+plt.grid(True, linestyle='--', alpha=0.7)
+plt.xlim(0, 256)
+y_max = max(np.max(v[np.isfinite(v)]) for v in scenarios.values()) + 5
+plt.ylim(-5, y_max)
+
+# Delta annotations
+def draw_delta(rho_val, praos_label, phalanx_label, x_offset=3):
+ idx = np.argmin(np.abs(rho - rho_val))
+ delta = scenarios[phalanx_label][idx] - scenarios[praos_label][idx]
+ mid = scenarios[phalanx_label][idx] - delta / 2
+ plt.annotate('', xy=(rho_val, scenarios[phalanx_label][idx]),
+ xytext=(rho_val, scenarios[praos_label][idx]),
+ arrowprops=dict(arrowstyle='<->', color='black', lw=1))
+ plt.text(rho_val + x_offset, mid, f'$\\Delta \\approx {delta:.1f}$', fontsize=12, color='black',
+ bbox=dict(facecolor='white', alpha=0.8, edgecolor='none'), verticalalignment='center')
+
+draw_delta(50, "Ant Glance Praos", "Phalanx$_{1/100}$")
+draw_delta(125, "Owl Survey Praos", "Phalanx$_{1/100}$")
+draw_delta(150, "Owl Survey Praos", "Phalanx$_{1/10}$")
+draw_delta(175, "Owl Survey Praos", "Phalanx$_{max}$")
+
+# Legend
+legend_elements = [
+ plt.Line2D([0], [0], color='blue', lw=2, label='Ant Glance Praos'),
+ plt.Line2D([0], [0], color='orange', lw=2, label='Ant Patrol Praos'),
+ plt.Line2D([0], [0], color='green', lw=2, label='Owl Stare Praos'),
+ plt.Line2D([0], [0], color='red', lw=2, label='Owl Survey Praos'),
+ plt.Line2D([0], [0], color='#6A5ACD', lw=2, linestyle='--', label='Phalanx$_{1/100}$'),
+ plt.Line2D([0], [0], color='#228B22', lw=2, linestyle='--', label='Phalanx$_{1/10}$'),
+ plt.Line2D([0], [0], color='#B22222', lw=2, linestyle='--', label='Phalanx$_{max}$'),
+ *[Patch(facecolor=color, alpha=0.1, label=label) for _, _, color, label in zones]
+]
+plt.legend(handles=legend_elements, fontsize=10, loc='lower right', bbox_to_anchor=(1, 0), ncol=2)
+
+plt.subplots_adjust(left=0.1, right=0.95, top=0.9, bottom=0.2)
+plt.show()
diff --git a/CIP-0161/graph/scenario_cost_praos_vs_phalanx.py b/CIP-0161/graph/scenario_cost_praos_vs_phalanx.py
new file mode 100644
index 0000000000..0719ec1cbb
--- /dev/null
+++ b/CIP-0161/graph/scenario_cost_praos_vs_phalanx.py
@@ -0,0 +1,113 @@
+import numpy as np
+import matplotlib.pyplot as plt
+from matplotlib.patches import Patch
+
+# Define the range for rho (Grinding Depth)
+rho = np.linspace(1, 256, 1000)
+f = 0.05
+cost_per_cpu_hour = 0.01 # $0.01 per CPU-hour
+
+# Compute w_O in seconds and hours
+w_O = 20 * (2 * rho - 1)
+w_O_hours = w_O / 3600
+
+# N_CPU functions with corrected Phalanx_{1/100} expressions
+def ant_glance_praos(rho):
+ return 5e-10 * 2**(rho - 2)
+
+def ant_glance_phalanx(rho):
+ return ant_glance_praos(rho) + 216 * 2**(rho - 1) / rho
+
+def ant_patrol_praos(rho):
+ return ant_glance_praos(rho) + 2.16e-2 * 2**(rho - 1) / rho
+
+def ant_patrol_phalanx(rho):
+ return ant_patrol_praos(rho) + 216 * 2**(rho - 1) / rho
+
+def owl_stare_praos(rho):
+ return ant_glance_praos(rho) + 5e-2 * 2**(rho - 1) / rho
+
+def owl_stare_phalanx(rho):
+ return owl_stare_praos(rho) + 216 * 2**(rho - 1) / rho
+
+def owl_survey_praos(rho):
+ return ant_glance_praos(rho) + 7.16e-2 * 2**(rho - 1) / rho
+
+def owl_survey_phalanx(rho):
+ return owl_survey_praos(rho) + 216 * 2**(rho - 1) / rho
+
+# Compute N_CPU and costs
+def compute_log_cost(n_cpu):
+ return np.log10(np.maximum(n_cpu * cost_per_cpu_hour * w_O_hours, 1e-100))
+
+scenarios = {
+ "Ant Glance Praos": compute_log_cost(ant_glance_praos(rho)),
+ "Ant Glance Phalanx$_{1/100}$": compute_log_cost(ant_glance_phalanx(rho)),
+ "Ant Patrol Praos": compute_log_cost(ant_patrol_praos(rho)),
+ "Ant Patrol Phalanx$_{1/100}$": compute_log_cost(ant_patrol_phalanx(rho)),
+ "Owl Stare Praos": compute_log_cost(owl_stare_praos(rho)),
+ "Owl Stare Phalanx$_{1/100}$": compute_log_cost(owl_stare_phalanx(rho)),
+ "Owl Survey Praos": compute_log_cost(owl_survey_praos(rho)),
+ "Owl Survey Phalanx$_{1/100}$": compute_log_cost(owl_survey_phalanx(rho)),
+}
+
+# Plot
+plt.figure(figsize=(12, 7))
+colors = {"Ant Glance": "blue", "Ant Patrol": "orange", "Owl Stare": "green", "Owl Survey": "red"}
+
+for label, log_cost in scenarios.items():
+ name = label.split()[0] + " " + label.split()[1]
+ style = "--" if "Phalanx" in label else "-"
+ plt.plot(rho, log_cost, label=label, color=colors[name], linestyle=style, linewidth=2)
+
+# Feasibility zones
+zones = [
+ (-10, 4, 'green', 'Trivial'),
+ (4, 6, 'yellow', 'Feasible'),
+ (6, 9, '#FFA07A', 'Possible'),
+ (9, 12, '#FF6347', 'Borderline Infeasible'),
+ (12, 90, 'red', 'Infeasible')
+]
+for y0, y1, color, label in zones:
+ plt.axhspan(y0, y1, color=color, alpha=0.1, label=label)
+
+# Labels and layout
+plt.xlabel('$\\rho$ (Grinding Depth)', fontsize=14)
+plt.ylabel('$\\log_{10}(\\text{Cost (USD)})$', fontsize=14)
+plt.title('Cost of Grinding Attacks: Praos vs Phalanx$_{1/100}$ Scenarios', fontsize=16)
+plt.grid(True, linestyle='--', alpha=0.7)
+plt.xlim(0, 256)
+y_max = max(np.max(v[np.isfinite(v)]) for v in scenarios.values()) + 5
+plt.ylim(-5, y_max)
+
+# Delta annotations
+def draw_delta(rho_val, praos_label, phalanx_label, x_offset=3):
+ idx = np.argmin(np.abs(rho - rho_val))
+ delta = scenarios[phalanx_label][idx] - scenarios[praos_label][idx]
+ mid = scenarios[phalanx_label][idx] - delta / 2
+ plt.annotate('', xy=(rho_val, scenarios[phalanx_label][idx]),
+ xytext=(rho_val, scenarios[praos_label][idx]),
+ arrowprops=dict(arrowstyle='<->', color='black', lw=1))
+ plt.text(rho_val + x_offset, mid, f'$\\Delta \\approx {delta:.1f}$', fontsize=12, color='black',
+ bbox=dict(facecolor='white', alpha=0.8, edgecolor='none'), verticalalignment='center')
+
+draw_delta(50,"Ant Glance Praos" , "Owl Survey Phalanx$_{1/100}$" )
+draw_delta(100, "Owl Survey Praos", "Owl Survey Phalanx$_{1/100}$" )
+
+# Legend
+legend_elements = [
+ plt.Line2D([0], [0], color='blue', lw=2, label='Ant Glance Praos'),
+ plt.Line2D([0], [0], color='blue', lw=2, linestyle='--', label='Ant Glance Phalanx$_{1/100}$'),
+ plt.Line2D([0], [0], color='orange', lw=2, label='Ant Patrol Praos'),
+ plt.Line2D([0], [0], color='orange', lw=2, linestyle='--', label='Ant Patrol Phalanx$_{1/100}$'),
+ plt.Line2D([0], [0], color='green', lw=2, label='Owl Stare Praos'),
+ plt.Line2D([0], [0], color='green', lw=2, linestyle='--', label='Owl Stare Phalanx$_{1/100}$'),
+ plt.Line2D([0], [0], color='red', lw=2, label='Owl Survey Praos'),
+ plt.Line2D([0], [0], color='red', lw=2, linestyle='--', label='Owl Survey Phalanx$_{1/100}$'),
+ *[Patch(facecolor=color, alpha=0.1, label=label) for _, _, color, label in zones]
+]
+plt.legend(handles=legend_elements, fontsize=10, loc='lower right',
+ bbox_to_anchor=(1, 0), ncol=2, handletextpad=0.5, columnspacing=1.5)
+
+plt.subplots_adjust(left=0.1, right=0.95, top=0.9, bottom=0.2)
+plt.show()
diff --git a/CIP-0161/graph/settlement-time-phalanx.py b/CIP-0161/graph/settlement-time-phalanx.py
new file mode 100644
index 0000000000..e72b02480c
--- /dev/null
+++ b/CIP-0161/graph/settlement-time-phalanx.py
@@ -0,0 +1,201 @@
+import numpy as np
+import matplotlib.pyplot as plt
+import matplotlib.ticker as ticker
+
+# Provided data
+K_data = np.array([i for i in range(1, 101)])
+ErrorUB_data = np.array([0.8676736300353218, 0.7665170928550862, 0.6892413553587529, 0.6233636971643736,
+ 0.5657163917284088, 0.5148322413203136, 0.4695420424714478, 0.42897234102210713,
+ 0.3924626607691574, 0.35948902156200147, 0.32962278029962017, 0.3025063659506419,
+ 0.27783698249825733, 0.25535514591273023, 0.23483635661765484, 0.2160848560472272,
+ 0.19892882408177393, 0.18321660886850946, 0.1688137167962222, 0.15560037467673365,
+ 0.14346953077207325, 0.13232519782380092, 0.12208106635957837, 0.11265933425039264,
+ 0.10398971121778951, 0.09600856630132028, 0.08865819321256681, 0.08188617370925678,
+ 0.07564482309177875, 0.06989070498353891, 0.06458420493919947, 0.05968915429847635,
+ 0.05517249718980014, 0.05100399477754493, 0.047155961805507976, 0.043603031268163416,
+ 0.04032194367801183, 0.03729135792136073, 0.03449168112865765, 0.031904915346616804,
+ 0.029514519101649903, 0.02730528219838205, 0.025263212311976303, 0.023375432115528862,
+ 0.02163008583947576, 0.02001625429329978, 0.018523877494483327, 0.01714368414861849,
+ 0.015867127310310914, 0.014686325629034798, 0.013594009649070085, 0.012583472689500249,
+ 0.011648525880117402, 0.010783456972956714, 0.009982992587887582, 0.009242263584923428,
+ 0.008556773286253361, 0.007922368297970843, 0.007335211705481949, 0.006791758438006847,
+ 0.006288732616743953, 0.0058231067184273, 0.0053920824014072844, 0.0049930728552227905,
+ 0.0046236865470955305, 0.004281712250008304, 0.003965105247171995, 0.003671974616856373,
+ 0.003400571509858656, 0.0031492783394076493, 0.0029165988101272316, 0.002701148718882468,
+ 0.0025016474659702898, 0.002316910220247162, 0.0021458406864612394, 0.0019874244273183433,
+ 0.0018407226967006522, 0.0017048667440089573, 0.0015790525528455637, 0.001462535980224325,
+ 0.0013546282652105925, 0.0012546918783826707, 0.0011621366857862258, 0.0010764164031429315,
+ 0.0009970253179921987, 0.0009234952592045347, 0.0008553927949202647, 0.0007923166414519593,
+ 0.0007338952670522856, 0.0006797846757031187, 0.000629666357234632, 0.0005832453911440828,
+ 0.0005402486924603261, 0.0005004233888988434, 0.000463535319379835, 0.00042936764474434813,
+ 0.0003977195622058752, 0.0003684051157223931, 0.0003412520950705765, 0.00031610101695421933])
+ErrorLB_data = np.array([0.8121889413522433, 0.6876416416654816, 0.5976483327753178, 0.5254324374189145,
+ 0.4645063982661716, 0.4123629938648501, 0.3673985960267712, 0.3283163309200733,
+ 0.2940989122957397, 0.2639674748869409, 0.23731513349944836, 0.21365535630042634,
+ 0.1925895067761664, 0.17378603461408476, 0.15696596625862824, 0.14189226025810497,
+ 0.12836183039592358, 0.11619947047643561, 0.10525314223559275, 0.09539025430277556,
+ 0.08649467767079334, 0.07846432047056445, 0.07120913531665457, 0.06464946639023633,
+ 0.05871466691555115, 0.05334193434216965, 0.04847532258446165, 0.04406489953310157,
+ 0.04006602469376975, 0.03643872686089284, 0.03314716563020274, 0.030159163591783687,
+ 0.02744579843693806, 0.024981046110909504, 0.022741467662164762, 0.020705933661954723,
+ 0.018855381059125348, 0.017172598143457285, 0.015642033953809715, 0.014249629014225416,
+ 0.01298266473472342, 0.011829629191657766, 0.0107800973193869, 0.009824623811787224,
+ 0.008954647257799136, 0.008162404226884964, 0.0074408521837850275, 0.006783600251963899,
+ 0.006184846965458831, 0.005639324252597922, 0.005142246984816187, 0.0046892675016852355,
+ 0.0042764345910511585, 0.003900156462313562, 0.003557167302609378, 0.003244497051022336,
+ 0.0029594440657968193, 0.0026995503946340197, 0.0024625793891173684, 0.002246495431690644,
+ 0.0020494455678550915, 0.0018697428577553032, 0.0017058512804271969, 0.0015563720409779223,
+ 0.0014200311461102907, 0.001295668126913479, 0.001182225799908241, 0.0010787409681255011,
+ 0.0009843359736577389, 0.0008982110217798201, 0.0008196372045025135, 0.0007479501583952579,
+ 0.0006825442977817404, 0.0006228675700485774, 0.0005684166848811588, 0.0005187327738111813,
+ 0.0004733974405802858, 0.0004320291665403726, 0.0003942800386652276, 0.0003598327707770982,
+ 0.0003283979913287651, 0.00029971177355593483, 0.00027353338605271704, 0.00024964324384800285,
+ 0.00022784104189382066, 0.00020794405453700824, 0.000189785586049734, 0.00017321355865768014,
+ 0.000158089225740669, 0.0001442859990014865, 0.00013168837941555155, 0.00012019098269693178,
+ 0.00010969765085385743, 0.00010012064216746174, 9.137989261820874e-05, 8.34023424119521e-05,
+ 7.612132182768348e-05, 6.947599112718069e-05, 6.341082973775746e-05, 5.787517034753198e-05])
+
+# Log-linear fit for ErrorUB (ln(y) = ln(a) - b * K)
+log_y_UB = np.log(ErrorUB_data)
+coeff_UB = np.polyfit(K_data, log_y_UB, 1) # slope = -b, intercept = ln(a)
+b_UB = -coeff_UB[0]
+a_UB = np.exp(coeff_UB[1])
+
+print(f"Fitted for ErrorUB: a={a_UB:.6f}, b={b_UB:.6f}")
+
+# Log-linear fit for ErrorLB
+log_y_LB = np.log(ErrorLB_data)
+coeff_LB = np.polyfit(K_data, log_y_LB, 1)
+b_LB = -coeff_LB[0]
+a_LB = np.exp(coeff_LB[1])
+
+print(f"Fitted for ErrorLB: a={a_LB:.6f}, b={b_LB:.6f}")
+
+# Generate extended K values (101 to 2500)
+K_extended = np.arange(101, 2501)
+
+# Extrapolate
+ErrorUB_extended = a_UB * np.exp(-b_UB * K_extended)
+ErrorLB_extended = a_LB * np.exp(-b_LB * K_extended)
+
+# Combine original and extended data
+K_all = np.concatenate((K_data, K_extended))
+ErrorUB_all = np.concatenate((ErrorUB_data, ErrorUB_extended))
+ErrorLB_all = np.concatenate((ErrorLB_data, ErrorLB_extended))
+
+# Save to CSV
+data = np.column_stack((K_all, ErrorUB_all, ErrorLB_all))
+np.savetxt('extended_error_series_corrected.csv', data, delimiter=',',
+ header='Number of Blocks,ErrorUB,ErrorLB', comments='')
+
+# Plot for verification with professional legend and power of 2 y-axis
+fig, ax = plt.subplots(figsize=(10, 6))
+ax.semilogy(K_all, ErrorUB_all, 'b-', label='Upper Bound')
+ax.semilogy(K_all, ErrorLB_all, 'k-', label='Lower Bound')
+
+# Set y-axis to base 2
+ax.set_yscale('log', base=2)
+
+# Formatter for y-ticks as 2^{exponent}
+def formatter(y, pos):
+ if y <= 0:
+ return '0'
+ exponent = np.log2(y)
+ return r'$2^{{{:.0f}}}$'.format(exponent)
+
+ax.yaxis.set_major_formatter(ticker.FuncFormatter(formatter))
+
+# Minor ticks for finer grid
+ax.yaxis.set_minor_locator(ticker.LogLocator(base=2.0, subs=np.arange(2, 10) * .1, numticks=100))
+
+ax.set_xlabel('Number of Blocks (K)', fontsize=12)
+ax.set_ylabel('Probability of Failure', fontsize=12)
+ax.set_title('Cardano PoS Settlement Failure (30% Adversary, 5s Delay)', fontsize=14)
+ax.legend(loc='upper right', fontsize=12)
+ax.grid(True, which='both', linestyle='--', linewidth=0.5)
+ax.set_ylim([2**(-150), 1]) # Adjusted to show down to 2^{-150}
+
+# Add horizontal line at 2^{-60}
+target_prob_60 = 2**(-60)
+ax.axhline(y=target_prob_60, color='r', linestyle='--', label='Without Grinding($2^{-60}$)')
+
+# Add horizontal line at 2^{-139.4}
+target_prob_1394 = 2**(-139.4)
+ax.axhline(y=target_prob_1394, color='m', linestyle='--', label='Praos($2^{-139.4}$)')
+
+# Add horizontal line at 2^{-105.4}
+target_prob_1054 = 2**(-105.4)
+ax.axhline(y=target_prob_1054, color='c', linestyle='--', label='$Phalanx_{1/100}$($2^{-105.4}$)')
+
+# Add horizontal line at 2^{-102.9}
+target_prob_1029 = 2**(-102.9)
+ax.axhline(y=target_prob_1029, color='orange', linestyle='--', label='$Phalanx_{1/100}$($2^{-102.9}$)')
+
+# Add horizontal line at 2^{-99.5}
+target_prob_995 = 2**(-99.5)
+ax.axhline(y=target_prob_995, color='purple', linestyle='--', label='$Phalanx_{max}$($2^{-99.5}$)')
+
+# Find approximate K where curves cross 2^{-60}
+K_UB_60 = np.interp(np.log(target_prob_60), np.log(ErrorUB_all)[::-1], K_all[::-1]) # Reverse for increasing log
+K_LB_60 = np.interp(np.log(target_prob_60), np.log(ErrorLB_all)[::-1], K_all[::-1])
+
+# Find approximate K where curves cross 2^{-139.4}
+K_UB_1394 = np.interp(np.log(target_prob_1394), np.log(ErrorUB_all)[::-1], K_all[::-1])
+K_LB_1394 = np.interp(np.log(target_prob_1394), np.log(ErrorLB_all)[::-1], K_all[::-1])
+
+# Find approximate K where curves cross 2^{-105.4}
+K_UB_1054 = np.interp(np.log(target_prob_1054), np.log(ErrorUB_all)[::-1], K_all[::-1])
+K_LB_1054 = np.interp(np.log(target_prob_1054), np.log(ErrorLB_all)[::-1], K_all[::-1])
+
+# Find approximate K where curves cross 2^{-102.9}
+K_UB_1029 = np.interp(np.log(target_prob_1029), np.log(ErrorUB_all)[::-1], K_all[::-1])
+K_LB_1029 = np.interp(np.log(target_prob_1029), np.log(ErrorLB_all)[::-1], K_all[::-1])
+
+# Find approximate K where curves cross 2^{-99.5}
+K_UB_995 = np.interp(np.log(target_prob_995), np.log(ErrorUB_all)[::-1], K_all[::-1])
+K_LB_995 = np.interp(np.log(target_prob_995), np.log(ErrorLB_all)[::-1], K_all[::-1])
+
+# Add vertical lines and annotations for 2^{-60}
+ax.axvline(x=K_UB_60, color='b', linestyle=':', alpha=0.5)
+ax.axvline(x=K_LB_60, color='k', linestyle=':', alpha=0.5)
+ax.annotate(f'Upper Bound K ≈ {K_UB_60:.0f}', xy=(K_UB_60, target_prob_60), xytext=(K_UB_60 + 150, target_prob_60 * 2**10),
+ arrowprops=dict(facecolor='blue', shrink=0.05, width=2, headwidth=8), fontsize=12, color='b', bbox=dict(facecolor='white', edgecolor='blue', boxstyle='round,pad=0.5'))
+ax.annotate(f'Lower Bound K ≈ {K_LB_60:.0f}', xy=(K_LB_60, target_prob_60), xytext=(K_LB_60 - 450, target_prob_60 / 2**10),
+ arrowprops=dict(facecolor='black', shrink=0.05, width=2, headwidth=8), fontsize=12, color='k', bbox=dict(facecolor='white', edgecolor='black', boxstyle='round,pad=0.5'))
+
+
+# Add vertical lines and annotations for 2^{-139.4}
+ax.axvline(x=K_UB_1394, color='b', linestyle=':', alpha=0.5)
+ax.axvline(x=K_LB_1394, color='k', linestyle=':', alpha=0.5)
+ax.annotate(f'Upper Bound K ≈ {K_UB_1394:.0f}', xy=(K_UB_1394, target_prob_1394), xytext=(K_UB_1394 + 50, target_prob_1394 * 2**10 ),
+ arrowprops=dict(facecolor='blue', shrink=0.05, width=2, headwidth=8), fontsize=12, color='b', bbox=dict(facecolor='white', edgecolor='blue', boxstyle='round,pad=0.5'))
+ax.annotate(f'Lower Bound K ≈ {K_LB_1394:.0f}', xy=(K_LB_1394, target_prob_1394), xytext=(K_LB_1394 - 450, target_prob_1394 / 2**10),
+ arrowprops=dict(facecolor='black', shrink=0.05, width=2, headwidth=8), fontsize=12, color='k', bbox=dict(facecolor='white', edgecolor='black', boxstyle='round,pad=0.5'))
+
+# Add vertical lines and annotations for 2^{-105.4}
+ax.axvline(x=K_UB_1054, color='b', linestyle=':', alpha=0.5)
+ax.axvline(x=K_LB_1054, color='k', linestyle=':', alpha=0.5)
+ax.annotate(f'Upper Bound K ≈ {K_UB_1054:.0f}', xy=(K_UB_1054, target_prob_1054), xytext=(K_UB_1054 + 150, target_prob_1054 * 2**3),
+ arrowprops=dict(facecolor='blue', shrink=0.05, width=2, headwidth=8), fontsize=12, color='b', bbox=dict(facecolor='white', edgecolor='blue', boxstyle='round,pad=0.5'))
+ax.annotate(f'Lower Bound K ≈ {K_LB_1054:.0f}', xy=(K_LB_1054, target_prob_1054), xytext=(K_LB_1054 - 450, target_prob_1054 / 2**15),
+ arrowprops=dict(facecolor='black', shrink=0.05, width=2, headwidth=8), fontsize=12, color='k', bbox=dict(facecolor='white', edgecolor='black', boxstyle='round,pad=0.5'))
+
+# Add vertical lines and annotations for 2^{-102.9}
+ax.axvline(x=K_UB_1029, color='b', linestyle=':', alpha=0.5)
+ax.axvline(x=K_LB_1029, color='k', linestyle=':', alpha=0.5)
+ax.annotate(f'Upper Bound K ≈ {K_UB_1029:.0f}', xy=(K_UB_1029, target_prob_1029), xytext=(K_UB_1029 + 150, target_prob_1029 * 2**10),
+ arrowprops=dict(facecolor='blue', shrink=0.05, width=2, headwidth=8), fontsize=12, color='b', bbox=dict(facecolor='white', edgecolor='blue', boxstyle='round,pad=0.5'))
+ax.annotate(f'Lower Bound K ≈ {K_LB_1029:.0f}', xy=(K_LB_1029, target_prob_1029), xytext=(K_LB_1029 - 450, target_prob_1029 / 2**10),
+ arrowprops=dict(facecolor='black', shrink=0.05, width=2, headwidth=8), fontsize=12, color='k', bbox=dict(facecolor='white', edgecolor='black', boxstyle='round,pad=0.5'))
+
+# Add vertical lines and annotations for 2^{-99.5}
+ax.axvline(x=K_UB_995, color='b', linestyle=':', alpha=0.5)
+ax.axvline(x=K_LB_995, color='k', linestyle=':', alpha=0.5)
+ax.annotate(f'Upper Bound K ≈ {K_UB_995:.0f}', xy=(K_UB_995, target_prob_995), xytext=(K_UB_995 + 150, target_prob_995 * 2**15),
+ arrowprops=dict(facecolor='blue', shrink=0.05, width=2, headwidth=8), fontsize=12, color='b', bbox=dict(facecolor='white', edgecolor='blue', boxstyle='round,pad=0.5'))
+ax.annotate(f'Lower Bound K ≈ {K_LB_995:.0f}', xy=(K_LB_995, target_prob_995), xytext=(K_LB_995 - 450, target_prob_995 / 2**3),
+ arrowprops=dict(facecolor='black', shrink=0.05, width=2, headwidth=8), fontsize=12, color='k', bbox=dict(facecolor='white', edgecolor='black', boxstyle='round,pad=0.5'))
+
+ax.legend(fontsize=12) # Update legend with the new lines
+
+plt.show()
\ No newline at end of file
diff --git a/CIP-0161/graph/settlement-time-praos.py b/CIP-0161/graph/settlement-time-praos.py
new file mode 100644
index 0000000000..e5f854b0b4
--- /dev/null
+++ b/CIP-0161/graph/settlement-time-praos.py
@@ -0,0 +1,169 @@
+import numpy as np
+import matplotlib.pyplot as plt
+import matplotlib.ticker as ticker
+
+# Provided data
+K_data = np.array([i for i in range(1, 101)])
+ErrorUB_data = np.array([0.8676736300353218, 0.7665170928550862, 0.6892413553587529, 0.6233636971643736,
+ 0.5657163917284088, 0.5148322413203136, 0.4695420424714478, 0.42897234102210713,
+ 0.3924626607691574, 0.35948902156200147, 0.32962278029962017, 0.3025063659506419,
+ 0.27783698249825733, 0.25535514591273023, 0.23483635661765484, 0.2160848560472272,
+ 0.19892882408177393, 0.18321660886850946, 0.1688137167962222, 0.15560037467673365,
+ 0.14346953077207325, 0.13232519782380092, 0.12208106635957837, 0.11265933425039264,
+ 0.10398971121778951, 0.09600856630132028, 0.08865819321256681, 0.08188617370925678,
+ 0.07564482309177875, 0.06989070498353891, 0.06458420493919947, 0.05968915429847635,
+ 0.05517249718980014, 0.05100399477754493, 0.047155961805507976, 0.043603031268163416,
+ 0.04032194367801183, 0.03729135792136073, 0.03449168112865765, 0.031904915346616804,
+ 0.029514519101649903, 0.02730528219838205, 0.025263212311976303, 0.023375432115528862,
+ 0.02163008583947576, 0.02001625429329978, 0.018523877494483327, 0.01714368414861849,
+ 0.015867127310310914, 0.014686325629034798, 0.013594009649070085, 0.012583472689500249,
+ 0.011648525880117402, 0.010783456972956714, 0.009982992587887582, 0.009242263584923428,
+ 0.008556773286253361, 0.007922368297970843, 0.007335211705481949, 0.006791758438006847,
+ 0.006288732616743953, 0.0058231067184273, 0.0053920824014072844, 0.0049930728552227905,
+ 0.0046236865470955305, 0.004281712250008304, 0.003965105247171995, 0.003671974616856373,
+ 0.003400571509858656, 0.0031492783394076493, 0.0029165988101272316, 0.002701148718882468,
+ 0.0025016474659702898, 0.002316910220247162, 0.0021458406864612394, 0.0019874244273183433,
+ 0.0018407226967006522, 0.0017048667440089573, 0.0015790525528455637, 0.001462535980224325,
+ 0.0013546282652105925, 0.0012546918783826707, 0.0011621366857862258, 0.0010764164031429315,
+ 0.0009970253179921987, 0.0009234952592045347, 0.0008553927949202647, 0.0007923166414519593,
+ 0.0007338952670522856, 0.0006797846757031187, 0.000629666357234632, 0.0005832453911440828,
+ 0.0005402486924603261, 0.0005004233888988434, 0.000463535319379835, 0.00042936764474434813,
+ 0.0003977195622058752, 0.0003684051157223931, 0.0003412520950705765, 0.00031610101695421933])
+ErrorLB_data = np.array([0.8121889413522433, 0.6876416416654816, 0.5976483327753178, 0.5254324374189145,
+ 0.4645063982661716, 0.4123629938648501, 0.3673985960267712, 0.3283163309200733,
+ 0.2940989122957397, 0.2639674748869409, 0.23731513349944836, 0.21365535630042634,
+ 0.1925895067761664, 0.17378603461408476, 0.15696596625862824, 0.14189226025810497,
+ 0.12836183039592358, 0.11619947047643561, 0.10525314223559275, 0.09539025430277556,
+ 0.08649467767079334, 0.07846432047056445, 0.07120913531665457, 0.06464946639023633,
+ 0.05871466691555115, 0.05334193434216965, 0.04847532258446165, 0.04406489953310157,
+ 0.04006602469376975, 0.03643872686089284, 0.03314716563020274, 0.030159163591783687,
+ 0.02744579843693806, 0.024981046110909504, 0.022741467662164762, 0.020705933661954723,
+ 0.018855381059125348, 0.017172598143457285, 0.015642033953809715, 0.014249629014225416,
+ 0.01298266473472342, 0.011829629191657766, 0.0107800973193869, 0.009824623811787224,
+ 0.008954647257799136, 0.008162404226884964, 0.0074408521837850275, 0.006783600251963899,
+ 0.006184846965458831, 0.005639324252597922, 0.005142246984816187, 0.0046892675016852355,
+ 0.0042764345910511585, 0.003900156462313562, 0.003557167302609378, 0.003244497051022336,
+ 0.0029594440657968193, 0.0026995503946340197, 0.0024625793891173684, 0.002246495431690644,
+ 0.0020494455678550915, 0.0018697428577553032, 0.0017058512804271969, 0.0015563720409779223,
+ 0.0014200311461102907, 0.001295668126913479, 0.001182225799908241, 0.0010787409681255011,
+ 0.0009843359736577389, 0.0008982110217798201, 0.0008196372045025135, 0.0007479501583952579,
+ 0.0006825442977817404, 0.0006228675700485774, 0.0005684166848811588, 0.0005187327738111813,
+ 0.0004733974405802858, 0.0004320291665403726, 0.0003942800386652276, 0.0003598327707770982,
+ 0.0003283979913287651, 0.00029971177355593483, 0.00027353338605271704, 0.00024964324384800285,
+ 0.00022784104189382066, 0.00020794405453700824, 0.000189785586049734, 0.00017321355865768014,
+ 0.000158089225740669, 0.0001442859990014865, 0.00013168837941555155, 0.00012019098269693178,
+ 0.00010969765085385743, 0.00010012064216746174, 9.137989261820874e-05, 8.34023424119521e-05,
+ 7.612132182768348e-05, 6.947599112718069e-05, 6.341082973775746e-05, 5.787517034753198e-05])
+
+# Log-linear fit for ErrorUB (ln(y) = ln(a) - b * K)
+log_y_UB = np.log(ErrorUB_data)
+coeff_UB = np.polyfit(K_data, log_y_UB, 1) # slope = -b, intercept = ln(a)
+b_UB = -coeff_UB[0]
+a_UB = np.exp(coeff_UB[1])
+
+print(f"Fitted for ErrorUB: a={a_UB:.6f}, b={b_UB:.6f}")
+
+# Log-linear fit for ErrorLB
+log_y_LB = np.log(ErrorLB_data)
+coeff_LB = np.polyfit(K_data, log_y_LB, 1)
+b_LB = -coeff_LB[0]
+a_LB = np.exp(coeff_LB[1])
+
+print(f"Fitted for ErrorLB: a={a_LB:.6f}, b={b_LB:.6f}")
+
+# Generate extended K values (101 to 2500)
+K_extended = np.arange(101, 2501)
+
+# Extrapolate
+ErrorUB_extended = a_UB * np.exp(-b_UB * K_extended)
+ErrorLB_extended = a_LB * np.exp(-b_LB * K_extended)
+
+# Combine original and extended data
+K_all = np.concatenate((K_data, K_extended))
+ErrorUB_all = np.concatenate((ErrorUB_data, ErrorUB_extended))
+ErrorLB_all = np.concatenate((ErrorLB_data, ErrorLB_extended))
+
+# Save to CSV
+data = np.column_stack((K_all, ErrorUB_all, ErrorLB_all))
+np.savetxt('extended_error_series_corrected.csv', data, delimiter=',',
+ header='Number of Blocks,ErrorUB,ErrorLB', comments='')
+
+# Plot for verification with professional legend and power of 2 y-axis
+fig, ax = plt.subplots(figsize=(10, 6))
+ax.semilogy(K_all, ErrorUB_all, 'b-', label='Upper Bound')
+ax.semilogy(K_all, ErrorLB_all, 'k-', label='Lower Bound')
+
+# Set y-axis to base 2
+ax.set_yscale('log', base=2)
+
+# Formatter for y-ticks as 2^{exponent}
+def formatter(y, pos):
+ if y <= 0:
+ return '0'
+ exponent = np.log2(y)
+ return r'$2^{{{:.0f}}}$'.format(exponent)
+
+ax.yaxis.set_major_formatter(ticker.FuncFormatter(formatter))
+
+# Minor ticks for finer grid
+ax.yaxis.set_minor_locator(ticker.LogLocator(base=2.0, subs=np.arange(2, 10) * .1, numticks=100))
+
+ax.set_xlabel('Number of Blocks (K)', fontsize=12)
+ax.set_ylabel('Probability of Failure', fontsize=12)
+ax.set_title('Cardano PoS Settlement Failure (30% Adversary, 5s Delay)', fontsize=14)
+ax.legend(loc='upper right', fontsize=10)
+ax.grid(True, which='both', linestyle='--', linewidth=0.5)
+ax.set_ylim([2**(-150), 1]) # Adjusted to show down to 2^{-150}
+
+
+# Add horizontal line at 2^{-60}
+target_prob_60 = 2**(-60)
+ax.axhline(y=target_prob_60, color='r', linestyle='--', label='Without Grinding($2^{-60}$)')
+
+# Add horizontal line at 2^{-117.7}
+target_prob_1177 = 2**(-117.7)
+ax.axhline(y=target_prob_1177, color='g', linestyle='--', label='Owl Survey Praos ($2^{-117.7}$)')
+
+# Add horizontal line at 2^{-139.4}
+target_prob_1394 = 2**(-139.4)
+ax.axhline(y=target_prob_1394, color='m', linestyle='--', label='Ant Glance($2^{-139.4}$)')
+
+# Find approximate K where curves cross 2^{-60}
+K_UB_60 = np.interp(np.log(target_prob_60), np.log(ErrorUB_all)[::-1], K_all[::-1]) # Reverse for increasing log
+K_LB_60 = np.interp(np.log(target_prob_60), np.log(ErrorLB_all)[::-1], K_all[::-1])
+
+# Find approximate K where curves cross 2^{-117.7}
+K_UB_1177 = np.interp(np.log(target_prob_1177), np.log(ErrorUB_all)[::-1], K_all[::-1])
+K_LB_1177 = np.interp(np.log(target_prob_1177), np.log(ErrorLB_all)[::-1], K_all[::-1])
+
+# Find approximate K where curves cross 2^{-139.4}
+K_UB_1394 = np.interp(np.log(target_prob_1394), np.log(ErrorUB_all)[::-1], K_all[::-1])
+K_LB_1394 = np.interp(np.log(target_prob_1394), np.log(ErrorLB_all)[::-1], K_all[::-1])
+
+# Add vertical lines and annotations for 2^{-60}
+ax.axvline(x=K_UB_60, color='b', linestyle=':', alpha=0.5)
+ax.axvline(x=K_LB_60, color='k', linestyle=':', alpha=0.5)
+ax.annotate(f'Upper Bound K ≈ {K_UB_60:.0f}', xy=(K_UB_60, target_prob_60), xytext=(K_UB_60 + 150, target_prob_60 * 2**10),
+ arrowprops=dict(facecolor='blue', shrink=0.05, width=2, headwidth=8), fontsize=12, color='b', bbox=dict(facecolor='white', edgecolor='blue', boxstyle='round,pad=0.5'))
+ax.annotate(f'Lower Bound K ≈ {K_LB_60:.0f}', xy=(K_LB_60, target_prob_60), xytext=(K_LB_60 - 300, target_prob_60 / 2**10),
+ arrowprops=dict(facecolor='black', shrink=0.05, width=2, headwidth=8), fontsize=12, color='k', bbox=dict(facecolor='white', edgecolor='black', boxstyle='round,pad=0.5'))
+
+# Add vertical lines and annotations for 2^{-117.7}
+ax.axvline(x=K_UB_1177, color='b', linestyle=':', alpha=0.5)
+ax.axvline(x=K_LB_1177, color='k', linestyle=':', alpha=0.5)
+ax.annotate(f'Upper Bound K ≈ {K_UB_1177:.0f}', xy=(K_UB_1177, target_prob_1177), xytext=(K_UB_1177 + 150, target_prob_1177 * 2**10),
+ arrowprops=dict(facecolor='blue', shrink=0.05, width=2, headwidth=8), fontsize=12, color='b', bbox=dict(facecolor='white', edgecolor='blue', boxstyle='round,pad=0.5'))
+ax.annotate(f'Lower Bound K ≈ {K_LB_1177:.0f}', xy=(K_LB_1177, target_prob_1177), xytext=(K_LB_1177 - 300, target_prob_1177 / 2**10),
+ arrowprops=dict(facecolor='black', shrink=0.05, width=2, headwidth=8), fontsize=12, color='k', bbox=dict(facecolor='white', edgecolor='black', boxstyle='round,pad=0.5'))
+
+# Add vertical lines and annotations for 2^{-139.4}
+ax.axvline(x=K_UB_1394, color='b', linestyle=':', alpha=0.5)
+ax.axvline(x=K_LB_1394, color='k', linestyle=':', alpha=0.5)
+ax.annotate(f'Upper Bound K ≈ {K_UB_1394:.0f}', xy=(K_UB_1394, target_prob_1394), xytext=(K_UB_1394 + 150, target_prob_1394 * 2**10),
+ arrowprops=dict(facecolor='blue', shrink=0.05, width=2, headwidth=8), fontsize=12, color='b', bbox=dict(facecolor='white', edgecolor='blue', boxstyle='round,pad=0.5'))
+ax.annotate(f'Lower Bound K ≈ {K_LB_1394:.0f}', xy=(K_LB_1394, target_prob_1394), xytext=(K_LB_1394 - 300, target_prob_1394 / 2**10),
+ arrowprops=dict(facecolor='black', shrink=0.05, width=2, headwidth=8), fontsize=12, color='k', bbox=dict(facecolor='white', edgecolor='black', boxstyle='round,pad=0.5'))
+
+ax.legend(fontsize=12) # Update legend with the new lines
+
+plt.show()
\ No newline at end of file
diff --git a/CIP-0161/graph/settlement-time-without-grinding.py b/CIP-0161/graph/settlement-time-without-grinding.py
new file mode 100644
index 0000000000..164f175e40
--- /dev/null
+++ b/CIP-0161/graph/settlement-time-without-grinding.py
@@ -0,0 +1,136 @@
+import numpy as np
+import matplotlib.pyplot as plt
+import matplotlib.ticker as ticker
+
+# Provided data
+K_data = np.array([i for i in range(1, 101)])
+ErrorUB_data = np.array([0.8676736300353218, 0.7665170928550862, 0.6892413553587529, 0.6233636971643736,
+ 0.5657163917284088, 0.5148322413203136, 0.4695420424714478, 0.42897234102210713,
+ 0.3924626607691574, 0.35948902156200147, 0.32962278029962017, 0.3025063659506419,
+ 0.27783698249825733, 0.25535514591273023, 0.23483635661765484, 0.2160848560472272,
+ 0.19892882408177393, 0.18321660886850946, 0.1688137167962222, 0.15560037467673365,
+ 0.14346953077207325, 0.13232519782380092, 0.12208106635957837, 0.11265933425039264,
+ 0.10398971121778951, 0.09600856630132028, 0.08865819321256681, 0.08188617370925678,
+ 0.07564482309177875, 0.06989070498353891, 0.06458420493919947, 0.05968915429847635,
+ 0.05517249718980014, 0.05100399477754493, 0.047155961805507976, 0.043603031268163416,
+ 0.04032194367801183, 0.03729135792136073, 0.03449168112865765, 0.031904915346616804,
+ 0.029514519101649903, 0.02730528219838205, 0.025263212311976303, 0.023375432115528862,
+ 0.02163008583947576, 0.02001625429329978, 0.018523877494483327, 0.01714368414861849,
+ 0.015867127310310914, 0.014686325629034798, 0.013594009649070085, 0.012583472689500249,
+ 0.011648525880117402, 0.010783456972956714, 0.009982992587887582, 0.009242263584923428,
+ 0.008556773286253361, 0.007922368297970843, 0.007335211705481949, 0.006791758438006847,
+ 0.006288732616743953, 0.0058231067184273, 0.0053920824014072844, 0.0049930728552227905,
+ 0.0046236865470955305, 0.004281712250008304, 0.003965105247171995, 0.003671974616856373,
+ 0.003400571509858656, 0.0031492783394076493, 0.0029165988101272316, 0.002701148718882468,
+ 0.0025016474659702898, 0.002316910220247162, 0.0021458406864612394, 0.0019874244273183433,
+ 0.0018407226967006522, 0.0017048667440089573, 0.0015790525528455637, 0.001462535980224325,
+ 0.0013546282652105925, 0.0012546918783826707, 0.0011621366857862258, 0.0010764164031429315,
+ 0.0009970253179921987, 0.0009234952592045347, 0.0008553927949202647, 0.0007923166414519593,
+ 0.0007338952670522856, 0.0006797846757031187, 0.000629666357234632, 0.0005832453911440828,
+ 0.0005402486924603261, 0.0005004233888988434, 0.000463535319379835, 0.00042936764474434813,
+ 0.0003977195622058752, 0.0003684051157223931, 0.0003412520950705765, 0.00031610101695421933])
+ErrorLB_data = np.array([0.8121889413522433, 0.6876416416654816, 0.5976483327753178, 0.5254324374189145,
+ 0.4645063982661716, 0.4123629938648501, 0.3673985960267712, 0.3283163309200733,
+ 0.2940989122957397, 0.2639674748869409, 0.23731513349944836, 0.21365535630042634,
+ 0.1925895067761664, 0.17378603461408476, 0.15696596625862824, 0.14189226025810497,
+ 0.12836183039592358, 0.11619947047643561, 0.10525314223559275, 0.09539025430277556,
+ 0.08649467767079334, 0.07846432047056445, 0.07120913531665457, 0.06464946639023633,
+ 0.05871466691555115, 0.05334193434216965, 0.04847532258446165, 0.04406489953310157,
+ 0.04006602469376975, 0.03643872686089284, 0.03314716563020274, 0.030159163591783687,
+ 0.02744579843693806, 0.024981046110909504, 0.022741467662164762, 0.020705933661954723,
+ 0.018855381059125348, 0.017172598143457285, 0.015642033953809715, 0.014249629014225416,
+ 0.01298266473472342, 0.011829629191657766, 0.0107800973193869, 0.009824623811787224,
+ 0.008954647257799136, 0.008162404226884964, 0.0074408521837850275, 0.006783600251963899,
+ 0.006184846965458831, 0.005639324252597922, 0.005142246984816187, 0.0046892675016852355,
+ 0.0042764345910511585, 0.003900156462313562, 0.003557167302609378, 0.003244497051022336,
+ 0.0029594440657968193, 0.0026995503946340197, 0.0024625793891173684, 0.002246495431690644,
+ 0.0020494455678550915, 0.0018697428577553032, 0.0017058512804271969, 0.0015563720409779223,
+ 0.0014200311461102907, 0.001295668126913479, 0.001182225799908241, 0.0010787409681255011,
+ 0.0009843359736577389, 0.0008982110217798201, 0.0008196372045025135, 0.0007479501583952579,
+ 0.0006825442977817404, 0.0006228675700485774, 0.0005684166848811588, 0.0005187327738111813,
+ 0.0004733974405802858, 0.0004320291665403726, 0.0003942800386652276, 0.0003598327707770982,
+ 0.0003283979913287651, 0.00029971177355593483, 0.00027353338605271704, 0.00024964324384800285,
+ 0.00022784104189382066, 0.00020794405453700824, 0.000189785586049734, 0.00017321355865768014,
+ 0.000158089225740669, 0.0001442859990014865, 0.00013168837941555155, 0.00012019098269693178,
+ 0.00010969765085385743, 0.00010012064216746174, 9.137989261820874e-05, 8.34023424119521e-05,
+ 7.612132182768348e-05, 6.947599112718069e-05, 6.341082973775746e-05, 5.787517034753198e-05])
+
+# Log-linear fit for ErrorUB (ln(y) = ln(a) - b * K)
+log_y_UB = np.log(ErrorUB_data)
+coeff_UB = np.polyfit(K_data, log_y_UB, 1) # slope = -b, intercept = ln(a)
+b_UB = -coeff_UB[0]
+a_UB = np.exp(coeff_UB[1])
+
+print(f"Fitted for ErrorUB: a={a_UB:.6f}, b={b_UB:.6f}")
+
+# Log-linear fit for ErrorLB
+log_y_LB = np.log(ErrorLB_data)
+coeff_LB = np.polyfit(K_data, log_y_LB, 1)
+b_LB = -coeff_LB[0]
+a_LB = np.exp(coeff_LB[1])
+
+print(f"Fitted for ErrorLB: a={a_LB:.6f}, b={b_LB:.6f}")
+
+# Generate extended K values (101 to 2500)
+K_extended = np.arange(101, 2501)
+
+# Extrapolate
+ErrorUB_extended = a_UB * np.exp(-b_UB * K_extended)
+ErrorLB_extended = a_LB * np.exp(-b_LB * K_extended)
+
+# Combine original and extended data
+K_all = np.concatenate((K_data, K_extended))
+ErrorUB_all = np.concatenate((ErrorUB_data, ErrorUB_extended))
+ErrorLB_all = np.concatenate((ErrorLB_data, ErrorLB_extended))
+
+# Save to CSV
+data = np.column_stack((K_all, ErrorUB_all, ErrorLB_all))
+np.savetxt('extended_error_series_corrected.csv', data, delimiter=',',
+ header='Number of Blocks,ErrorUB,ErrorLB', comments='')
+
+# Plot for verification with professional legend and power of 2 y-axis
+fig, ax = plt.subplots(figsize=(10, 6))
+ax.semilogy(K_all, ErrorUB_all, 'b-', label='Upper Bound')
+ax.semilogy(K_all, ErrorLB_all, 'k-', label='Lower Bound')
+
+# Set y-axis to base 2
+ax.set_yscale('log', base=2)
+
+# Formatter for y-ticks as 2^{exponent}
+def formatter(y, pos):
+ if y <= 0:
+ return '0'
+ exponent = np.log2(y)
+ return r'$2^{{{:.0f}}}$'.format(exponent)
+
+ax.yaxis.set_major_formatter(ticker.FuncFormatter(formatter))
+
+# Minor ticks for finer grid
+ax.yaxis.set_minor_locator(ticker.LogLocator(base=2.0, subs=np.arange(2, 10) * .1, numticks=100))
+
+ax.set_xlabel('Number of Blocks (K)', fontsize=12)
+ax.set_ylabel('Probability of Failure', fontsize=12)
+ax.set_title('Cardano PoS Settlement Failure (30% Adversary, 5s Delay)', fontsize=14)
+ax.legend(loc='upper right', fontsize=12)
+ax.grid(True, which='both', linestyle='--', linewidth=0.5)
+ax.set_ylim([2**(-100), 1]) # Adjust to show down to very low probabilities (e.g., 2^{-100})
+
+# Add horizontal line at 2^{-60}
+target_prob = 2**(-60)
+ax.axhline(y=target_prob, color='r', linestyle='--', label='$2^{-60}$')
+
+# Find approximate K where curves cross 2^{-60}
+K_UB_60 = np.interp(np.log(target_prob), np.log(ErrorUB_all)[::-1], K_all[::-1]) # Reverse for increasing log
+K_LB_60 = np.interp(np.log(target_prob), np.log(ErrorLB_all)[::-1], K_all[::-1])
+
+# Add vertical lines and annotations
+ax.axvline(x=K_UB_60, color='b', linestyle=':', alpha=0.5)
+ax.axvline(x=K_LB_60, color='k', linestyle=':', alpha=0.5)
+ax.annotate(f'Upper Bound K ≈ {K_UB_60:.0f}', xy=(K_UB_60, target_prob), xytext=(K_UB_60 + 150, target_prob * 2**10),
+ arrowprops=dict(facecolor='blue', shrink=0.05, width=2, headwidth=8), fontsize=12, color='b', bbox=dict(facecolor='white', edgecolor='blue', boxstyle='round,pad=0.5'))
+ax.annotate(f'Lower Bound K ≈ {K_LB_60:.0f}', xy=(K_LB_60, target_prob), xytext=(K_LB_60 - 300, target_prob / 2**10),
+ arrowprops=dict(facecolor='black', shrink=0.05, width=2, headwidth=8), fontsize=12, color='k', bbox=dict(facecolor='white', edgecolor='black', boxstyle='round,pad=0.5'))
+
+ax.legend(fontsize=12) # Update legend with the new line
+
+plt.show()
\ No newline at end of file
diff --git a/CIP-0161/graph/vdf_benches.py b/CIP-0161/graph/vdf_benches.py
new file mode 100644
index 0000000000..e8fd577494
--- /dev/null
+++ b/CIP-0161/graph/vdf_benches.py
@@ -0,0 +1,53 @@
+import secrets
+import time
+from statistics import stdev
+from tabulate import tabulate
+
+from chiavdf import create_discriminant, prove, verify_wesolowski
+
+
+def bench_prove_and_verify():
+ discriminant_challenge = secrets.token_bytes(10)
+
+ discriminant_sizes = [256, 512, 1024]
+ iterations = [100_000, 200_000, 500_000, 1_000_000, 2_000_000, 5_000_000, 10_000_000]
+ benches = 100
+ table = []
+
+ for d in discriminant_sizes:
+ for iters in iterations:
+ res_prove = []
+ res_verify = []
+ for b in range(benches):
+ discriminant = create_discriminant(discriminant_challenge, d)
+ form_size = 100
+ initial_el = b"\x08" + (b"\x00" * 99)
+
+ t1 = time.time()
+ result = prove(discriminant_challenge, initial_el, d, iters, "")
+ t2 = time.time()
+ res_prove.append(t2-t1)
+ result_y = result[:form_size]
+ proof = result[form_size : 2 * form_size]
+
+ tv_1 = time.time()
+ is_valid = verify_wesolowski(
+ str(discriminant),
+ initial_el,
+ result_y,
+ proof,
+ iters,
+ )
+ tv_2 = time.time()
+ res_verify.append(tv_2 - tv_1)
+ assert is_valid
+ proving_time = "{:.2E}".format(sum(res_prove)/len(res_prove))
+ proving_deviation = "{:.2E}".format(stdev(res_prove))
+ ips = "{:_.3f}".format(iters / (sum(res_prove) / len(res_prove)))
+ verification_time = "{:.2E}".format(1000 *(sum(res_verify)/len(res_verify)))
+ verification_deviation = "{:.2E}".format(1000 * stdev(res_verify))
+ table.append([d, ips, proving_time, proving_deviation, verification_time, verification_deviation ])
+ headers = ["Size Discriminant", "IPS", "Proving time (s)", "σ proving", "Verification time (ms)", "σ verification"]
+ print(tabulate(table, headers, tablefmt='orgtbl'))
+
+bench_prove_and_verify()
diff --git a/CIP-0161/image/Phalanx-Streams.png b/CIP-0161/image/Phalanx-Streams.png
new file mode 100644
index 0000000000..402ca2cb65
Binary files /dev/null and b/CIP-0161/image/Phalanx-Streams.png differ
diff --git a/CIP-0161/image/Praos-vs-Phalanx-Highl-Level.png b/CIP-0161/image/Praos-vs-Phalanx-Highl-Level.png
new file mode 100644
index 0000000000..9647462dda
Binary files /dev/null and b/CIP-0161/image/Praos-vs-Phalanx-Highl-Level.png differ
diff --git a/CIP-0161/image/grinding_depth_scenarios_cost_praos_vs_full_phalanx_scenarios.png b/CIP-0161/image/grinding_depth_scenarios_cost_praos_vs_full_phalanx_scenarios.png
new file mode 100644
index 0000000000..59e57e2382
Binary files /dev/null and b/CIP-0161/image/grinding_depth_scenarios_cost_praos_vs_full_phalanx_scenarios.png differ
diff --git a/CIP-0161/image/grinding_depth_scenarios_cost_praos_vs_phalanx.png b/CIP-0161/image/grinding_depth_scenarios_cost_praos_vs_phalanx.png
new file mode 100644
index 0000000000..6571738eb5
Binary files /dev/null and b/CIP-0161/image/grinding_depth_scenarios_cost_praos_vs_phalanx.png differ
diff --git a/CIP-0161/image/grinding_depth_scenarios_cost_with_feasibility_layers_gradient-phalanx.png b/CIP-0161/image/grinding_depth_scenarios_cost_with_feasibility_layers_gradient-phalanx.png
new file mode 100644
index 0000000000..9b0c035ed7
Binary files /dev/null and b/CIP-0161/image/grinding_depth_scenarios_cost_with_feasibility_layers_gradient-phalanx.png differ
diff --git a/CIP-0161/image/grinding_depth_scenarios_cost_with_feasibility_layers_gradient.png b/CIP-0161/image/grinding_depth_scenarios_cost_with_feasibility_layers_gradient.png
new file mode 100644
index 0000000000..6ac3dab41a
Binary files /dev/null and b/CIP-0161/image/grinding_depth_scenarios_cost_with_feasibility_layers_gradient.png differ
diff --git a/CIP-0161/image/hash_functions_comparison.png b/CIP-0161/image/hash_functions_comparison.png
new file mode 100644
index 0000000000..73b73fa2f2
Binary files /dev/null and b/CIP-0161/image/hash_functions_comparison.png differ
diff --git a/CIP-0161/image/intervals.png b/CIP-0161/image/intervals.png
new file mode 100644
index 0000000000..79ba301390
Binary files /dev/null and b/CIP-0161/image/intervals.png differ
diff --git a/CIP-0161/image/phalanx-soldiers.png b/CIP-0161/image/phalanx-soldiers.png
new file mode 100644
index 0000000000..5a1f8e6db7
Binary files /dev/null and b/CIP-0161/image/phalanx-soldiers.png differ
diff --git a/CIP-0161/image/settlement-times-30-2s-phalanx.png b/CIP-0161/image/settlement-times-30-2s-phalanx.png
new file mode 100644
index 0000000000..f5f8458d1f
Binary files /dev/null and b/CIP-0161/image/settlement-times-30-2s-phalanx.png differ
diff --git a/CIP-0161/image/settlement-times-30-2s-praos.png b/CIP-0161/image/settlement-times-30-2s-praos.png
new file mode 100644
index 0000000000..84c03d77f6
Binary files /dev/null and b/CIP-0161/image/settlement-times-30-2s-praos.png differ
diff --git a/CIP-0161/image/settlement-times-30-2s.png b/CIP-0161/image/settlement-times-30-2s.png
new file mode 100644
index 0000000000..29236ce704
Binary files /dev/null and b/CIP-0161/image/settlement-times-30-2s.png differ
diff --git a/CIP-0161/image/state-transition-diagram.png b/CIP-0161/image/state-transition-diagram.png
new file mode 100644
index 0000000000..9ea527153b
Binary files /dev/null and b/CIP-0161/image/state-transition-diagram.png differ
diff --git a/CIP-0161/image/structured-intervals.png b/CIP-0161/image/structured-intervals.png
new file mode 100644
index 0000000000..6d1f7431d7
Binary files /dev/null and b/CIP-0161/image/structured-intervals.png differ
diff --git a/CPS-0017/README.md b/CPS-0017/README.md
index 6ddeca75fe..8cd645ed2b 100644
--- a/CPS-0017/README.md
+++ b/CPS-0017/README.md
@@ -7,6 +7,10 @@ Authors:
- Arnaud Bailly
- Brian W. Bush
- Hans Lahe
+Proposed Solutions:
+ ["CIP-0140 : Ouroboros Peras - Faster Settlement"
+ ,"CIP-0161 : Ouroboros Phalanx - Breaking Grinding Incentives"
+ ]
Implementors: N/A
Discussions:
Created: 2024-09-30
diff --git a/CPS-0021/CPD/README.md b/CPS-0021/CPD/README.md
index 2794b36576..c6bed4398b 100644
--- a/CPS-0021/CPD/README.md
+++ b/CPS-0021/CPD/README.md
@@ -25,15 +25,15 @@ Rather than prescribing specific solutions, this CPD urges the **Cardano communi
### Summary of Findings
-This **CPD** undertakes a thorough examination of the *Randomness Generation Sub-Protocol* within the *Ouroboros framework*, focusing on the *Coin-Flipping Problem* and its implications for the **security** of the *Cardano blockchain*. The principal findings are as follows:
+This **CPD** undertakes a thorough examination of the *Randomness Generation Sub-Protocol* within the *Ouroboros Praos*, focusing on the *Coin-Flipping Problem* and its implications for the **security** of the *Cardano blockchain*. The principal findings are as follows:
- **Randomness Mechanism**: *Ouroboros Praos* utilizes **VRFs** for efficient randomness generation, yet this design exposes vulnerabilities to *grinding attacks*, wherein adversaries manipulate *nonce values* to influence **leader election** processes.
-- **Attack Feasibility**: The likelihood and impact of successful attacks rise significantly when an adversary controls **>20% of total stake** (~**4.36 billion ADA**, March 2025), while lesser stakes (e.g., **5%**) render such efforts statistically improbable over extended periods.
+- **Attack Feasibility**: The likelihood and impact of successful attacks rise significantly when an adversary controls **>20% of total stake** (~**4.36 billion ADA**, March 2025), while lesser stakes render such efforts statistically improbable over extended periods.
- **Economic Considerations**: Acquiring substantial stake entails a **significant financial commitment**—on the order of **billions of USD** for a 20% share—further complicated by potential **asset devaluation** if an attack undermines network integrity.
- **Computational Requirements**: Scenario analysis across varying grinding depths ($\rho$) reveals a spectrum of feasibility:
- - Minor attacks (e.g., **$\rho=20$**, costing ~**$56**) are readily achievable.
- - Significant manipulations (e.g., **$\rho=50$**, costing ~**$3.1 billion**) demand resources ranging from *feasible* to *borderline infeasible*, contingent upon adversary capabilities.
- - The cost disparity between the most resource-intensive scenario (*Owl Survey*) and the least (*Ant Glance*) is substantial, with a consistent **$\Delta \log_{10}(\text{Cost (USD)}) \sim 6.3$**, indicating *Owl Survey* costs approximately **$10^{6.3}$ times more** than *Ant Glance*, driven by the significant influence of **$T_{\text{eval}}$** (evaluation complexity) and **$w_T$** (target window scope).
+ - Minor attacks (e.g. manipulating **$\rho=20$** blocks costs ~**$56**) are readily achievable.
+ - Significant manipulations (e.g. **$\rho=50$** costs ~**$3.1 billion**) demand resources ranging from *feasible* to *borderline infeasible*, contingent upon adversary capabilities.
+ - The cost disparity between the most resource-intensive scenario (*Owl Survey*) and the least (*Ant Glance*) is substantial, with a consistent ratio of **$\Delta \log_{10}(\text{Cost (USD)}) \sim 6.3$**, indicating that the strongest attack here considered, the *Owl Survey* scenario, costs approximately **$10^{6.3}$ times more** than the base and weakest attack, *Ant Glance*, driven by the significant influence of the adversary's strategy evaluation, **$T_{\text{eval}}$** (simpled called the evaluation complexity), and their target window scope **$w_T$**.

@@ -42,13 +42,13 @@ This **CPD** undertakes a thorough examination of the *Randomness Generation Sub
The table below delineates the **$\rho$ values** at which each scenario transitions across feasibility categories, illustrating the computational and economic thresholds:
-| **Feasibility Category** | **🔵 Ant Glance** | **🟠 Ant Patrol** | **🟢 Owl Stare** | **🔴 Owl Survey** |
-|--------------------------------------------|-------------------|-------------------|------------------|-------------------|
-| **🟢 🌱 Trivial for Any Adversary** | $[0, 49)$ | $[0, 47)$ | $[0, 27)$ | $[0, 27)$ |
-| **🟡 💰 Feasible with Standard Resources** | $[49, 59)$ | $[47, 57)$ | $[27, 34)$ | $[27, 34)$ |
-| **🟠 🏭 Possible with Large-Scale Infrastructure** | $[59, 73)$ | $[57, 71)$ | $[34, 48)$ | $[34, 48)$ |
-| **🔴 🚫 Borderline Infeasible** | $[73, 87)$ | $[71, 85)$ | $[48, 62)$ | $[48, 62)$ |
-| **🔴 🚫 Infeasible** | $[87, 256)$ | $[85, 256)$ | $[62, 256)$ | $[62, 256)$ |
+| **Feasibility Category** | **🔵 Ant Glance** | **🟠 Ant Patrol** | **🟢 Owl Stare** | **🔴 Owl Survey** |
+|--------------------------------------------|---------------------|---------------------|--------------------|--------------------|
+| **🟢 🌱 Trivial for Any Adversary** | $0 \to 53.6$ | $0 \to 32.9$ | $0 \to 31.6$ | $0 \to 31.1$ |
+| **🟡 💰 Feasible with Standard Resources** | $53.6 \to 60$ | $32.9 \to 39.5$ | $31.6 \to 38.3$ | $31.1 \to 37.8$ |
+| **🟠 🏭 Large-Scale Infrastructure Required** | $60 \to 69.7$ | $39.5 \to 49.5$ | $38.2 \to 48.2$ | $37.8 \to 47.7$ |
+| **🔴 🚫 Borderline Infeasible** | $69.7 \to 79.4$ | $49.5 \to 59.5$ | $48.2 \to 58.2$ | $47.7 \to 57.7$ |
+| **🔴 🚫 Infeasible** | $79.4 \to 256$ | $59.5 \to 256$ | $58.2 \to 256$ | $57.7 \to 256$ |
✏️ **Note**: For a detailed explanation of these scenarios and their feasibility thresholds, refer to **[Section 3.5 - Scenarios](https://github.com/cardano-foundation/CIPs/pull/1009#35-scenarios)** within this CPD.
@@ -116,16 +116,15 @@ This document deliberately avoids advocating specific countermeasures, instead p
- [**4. References**](#4-references)
- [**5. Copyright**](#5-copyright)
-These entries can be integrated into your existing Table of Contents, replacing the unnumbered versions, to maintain consistency with the section headers in your document.
## 1. Preliminaries
-This section introduces the pertinent parts of the Cardano proof- of-stake consensus protocol. We focus on randomness generation and leader selection and omit irrelevant protocol details.
+This section introduces the pertinent parts of the Cardano proof-of-stake consensus protocol. We focus on the randomness generation and leader selection processes and omit irrelevant protocol details.
## 1.1 Fundamental Properties
-A protocol implements a robust transaction ledger if it maintains the ledger as a sequence of blocks, where each block is associated with a specific slot. Each slot can contain at most one ledger block, and this strict association ensures a well-defined and immutable ordering of transactions within the ledger.
+A consensus protocol implements a robust transaction ledger if it maintains the ledger as a sequence of blocks, where each block is associated with a specific slot. Each slot can contain at most one ledger block, and this strict association ensures a well-defined and immutable ordering of transactions within the ledger.
-The protocol must satisfy the following two critical properties (Persistence & Liveness), which ensure that blocks and transactions are securely committed and cannot be easily manipulated by adversaries. Persistence and liveness, can be derived to fundamental **chain properties** which are *used to explain how and why the leader election mechanism has been designed in this manner*.
+The protocol must satisfy the two critical properties of _**Persistence**_ and _**Liveness**_, which ensure that blocks and transactions are securely committed and cannot be easily manipulated by adversaries. These can be derived from fundamental **chain properties** which are *used to explain how and why the leader election mechanism has been designed in this manner*.
| **Chain Property** | **Description** |
|-----------------------------------------|------------------------------------------------------------------------------------------------------------------------------|
@@ -178,7 +177,7 @@ For example, if $\tau = 0.5$ and $s = 10$, then at least $\tau s = 0.5 \cdot 10
The **Coin-Flipping Problem** is a fundamental challenge in distributed systems that require a **fair, unbiased, and unpredictable** source of randomness—without allowing any single participant to manipulate the outcome.
### **1.2.1 Defining the Problem**
-Consider a scenario where multiple untrusted parties must **flip a coin** to reach a decision. The challenge is ensuring that:
+Consider a scenario where multiple untrusted parties must **flip a coin** and use the outcome, the concatenation of heads or tails, to reach a decision. The challenge is ensuring that:
1. 🎲 The outcome remains **random and unpredictable**.
2. 🔒 No participant can **bias or influence** the result in their favor.
@@ -191,33 +190,54 @@ Various cryptographic techniques exist to address the **coin-flipping problem**
| **Approach** | **Pros** | **Cons** |
|---------------------------|---------|---------|
-| **PVSS-Based Beacons**
_(Ouroboros Classic, RandHound, Scrape, HydRand)_ | ✔ Strong randomness guarantees—output is indistinguishable from uniform.
✔ Resistant to last-mover bias—commitments prevent selective reveals. | ❌ High communication complexity—requires O(n²) messages.
❌ Vulnerable to adaptive adversaries — who may corrupt committee members. |
-| **Threshold Signature-Based Beacons**
_(DFINITY)_ | ✔ Fast and non-interactive—requires only one round of communication.
✔ Resistant to last-mover bias—output is deterministic. | ❌ Group setup complexity—requires distributed key generation (DKG).
❌ No random number output in case of threshold signature generation failure. |
-| **Byzantine Agreement-Based Beacons**
_(Algorand)_ | ✔ Finality guarantees—randomness is confirmed before the next epoch.
✔ Less entropy loss than Praos. | ❌ Requires multi-round communication—higher latency.
❌ Not designed for eventual consensus—better suited for BA-based protocols. |
-| **"VRF"-Based Beacons**
_(Ethereum’s RANDAO Post-Merge, Ouroboros Praos, Genesis, Snow White)_ | ✔ Simple and efficient—low computational overhead.
✔ Fully decentralized—any participant can contribute randomness. | ❌ Vulnerable to last-revealer bias—the last participant can manipulate the final output. |
+| **PVSS-Based Beacons**
_(Ouroboros Classic, RandHound, Scrape, HydRand)_ | ✔ Strong randomness guarantees — output is indistinguishable from uniform.
✔ Resistant to last-mover bias — commitments prevent selective reveals. | ❌ High communication complexity — requires O(n²) messages.
❌ Vulnerable to adaptive adversaries — who may corrupt committee members. |
+| **Threshold Signature-Based Beacons**
_(DFINITY)_ | ✔ Fast and non-interactive — requires only one round of communication.
✔ Resistant to last-mover bias — output is deterministic. | ❌ Group setup complexity — requires distributed key generation (DKG).
❌ No random number output in case of threshold signature generation failure. |
+| **Byzantine Agreement-Based Beacons**
_(Algorand)_ | ✔ Finality guarantees — randomness is confirmed before the next epoch.
✔ Less entropy loss than Praos. | ❌ Requires multi-round communication — higher latency.
❌ Not designed for eventual consensus — better suited for BA-based protocols. |
+| **"VRF"-Based Beacons**
_(Ethereum’s RANDAO Post-Merge, Ouroboros Praos, Genesis, Snow White)_ | ✔ Simple and efficient — low computational overhead.
✔ Fully decentralized — any participant can contribute randomness. | ❌ Vulnerable to last-revealer bias — the last participant can manipulate the final output. |
### **1.2.3 The Historical Evolution of Ouroboros Randomness Generation**
The **Ouroboros family of protocols** has evolved over time to optimize **randomness generation** while balancing **security, efficiency, and decentralization**. Initially, **Ouroboros Classic** used a **secure multi-party computation (MPC) protocol** with **Publicly Verifiable Secret Sharing (PVSS)** to ensure **unbiased randomness**. While providing **strong security guarantees**, PVSS required **quadratic message exchanges** between committee members, introducing **significant communication overhead**. This **scalability bottleneck** limited participation and hindered the decentralization of Cardano's consensus process.
-Recognizing these limitations, **Ouroboros Praos** moved to a **VRF-based randomness generation** mechanism where each individual randomness contribution is generated with VRFs. Here, each block includes a **VRF value** computed from a _determinitic_ message. The randomn nonce for an epoch is then derived from the **concatenation and hashing** of all these values from a **specific section of the previous epoch’s chain**. This significantly **reduces communication complexity to linear in the number of block producers**, making randomness generation **scalable and practical** while maintaining **adequate security properties**.
+Recognizing these limitations, **Ouroboros Praos** moved to a **VRF-based randomness generation** mechanism where each individual randomness contribution is generated with Verifiable Random Functions (VRFs). Here, each block includes a **VRF value**, that is a veriable random value that gas been _deterministically_ computed from a fixed message. The random nonce for an epoch is then derived from the **concatenation and hashing** of all these values from a **specific section of the previous epoch’s chain**. This significantly **reduces the communication complexity**, which now becomes **linear in the number of block producers**, making randomness generation **scalable and practical** while maintaining **adequate security properties**.
-However, this efficiency gain comes at a cost: it introduces a **limited avenue for randomness manipulation**. Adversaries can attempt **grinding attacks**, evaluating multiple **potential nonces** and selectively influencing randomness outcomes. While constrained, this trade-off necessitates further countermeasures to **limit adversarial influence** while maintaining protocol scalability.
+However, this efficiency gain comes at a cost: the random nonce is now _biasable_ as this protocol change introduces a **limited avenue for randomness manipulation**. Adversaries can attempt **grinding attacks**, evaluating multiple **potential nonces** and selectively influencing randomness outcomes. While constrained, this trade-off necessitates further countermeasures to **limit adversarial influence** while maintaining protocol scalability.
+
+
+
+📌📌 More Details on VRFs – Expand to view the content.
+
+
+**Verifiable Random Functions (VRFs)** are cryptographic primitives that produce a pseudorandom output along with a proof that the output was correctly generated from a given input and secret key.
+
+**BLS Signatures** (Boneh–Lynn–Shacham) can be used as Verifiable Random Functions (VRFs) because they satisfy the core properties — Determinism, Pseudorandom and efficiently Verifiable - required of a VRF.
+
+A BLS signature is indistinguishable from random without knowledge of the secret key, their signature is efficient and the signature generation is determistic and secure under standard cryptographic assumptions.
+
+
### **1.2.4 Comparing Ouroboros Randomness Generation with Ethereum**
-Ethereum RANDAO protocol was first based on a **commit and reveal** approach where each block producer would commit to random values in a first period, i.e. publish the hash of a locally generated random value during block proposal, before revealing them in a second. As the latter period finished, all revealed values were combined, more specifically XORed, together to finally get the random nonce.
+Ethereum RANDAO protocol was first based on a **commit and reveal** approach where each block producer would commit to random values in a first period, i.e. publish the hash of a locally generated random value during block proposal, before revealing them afterwards. As the latter period finished, all revealed values were combined, more specifically XORed, together to finally get the random nonce.
-Ethereum's **Post-Merge RANDAO** protocol remains mostly the same, but instead of using a **commit-reveal** approach, each contributor generate randomness deterministically by using VRF, making these values verifiables. These values are finally, as before, sequentially aggregated using **XOR**, forming the final **randomness output** used in **validator shuffling** and **protocol randomness**.
+Ethereum's **Post-Merge RANDAO** protocol remains mostly the same, but instead of using a **commit-reveal** approach, each contributor generate randomness deterministically by using VRFs, making these values verifiable. These values are finally, as before, sequentially aggregated using **XOR**, forming the final **randomness output** used in **validator shuffling** and **protocol randomness**.
This version of the protocol is very similar to Ouroboros Praos' where hashing is used instead of XOR to combine contributors' randomness together, and does not rely on commitees.
-While **decentralized** and **computationally lightweight**, RANDAO still suffers from **last-revealer bias**, where the **final proposers** in an epoch can **withhold their reveals** to manipulate randomness. As such, Ethereum has spent some time studying Verifiable Delayed Functions (VDFs) to prevent the last revealer attack. Subsequently, Ethereum decided **against integrating Verifiable Delay Functions** due to feasibility concerns, including the difficulty of practical deployment and the risk of centralization stemming from specialized hardware dependencies. The instead opted for a **frequent reseeding mechanism** to strengthen the commitee selection in order to mitigate biases which, unfortunately does not fully eliminate **last-mover manipulation** concerns.
+While **decentralized** and **computationally lightweight**, RANDAO still suffers from **last-revealer bias**, where the **final proposers** in an epoch can **withhold their reveals** to manipulate randomness. As such, Ethereum has spent some time studying Verifiable Delayed Functions (VDFs) to prevent the last revealer attack by relying on its sequentiality property. Subsequently, Ethereum decided **against integrating Verifiable Delay Functions** due to feasibility concerns, including the difficulty of practical deployment and the risk of centralization stemming from specialized hardware dependencies. They instead opted for a **frequent reseeding mechanism** to strengthen the commitee selection in order to mitigate biases which, unfortunately does not fully eliminate last-revealer manipulation concerns.
-VDFs are designed to provide **unpredictable, verifiable randomness** by requiring a **sequential computation delay** before revealing the output. This makes them **resistant to grinding attacks** since adversaries cannot efficiently evaluate multiple outcomes. However, they introduce **significant computational costs**, require specialized **hardware for efficient verification**, and demand **additional synchronization mechanisms**.
+
+📌📌 More Details on VDFs – Expand to view the content.
+
+
+VDFs are designed to provide **unpredictable, verifiable randomness** by requiring a **sequential computation delay** before revealing the output.
+
+This makes them **resistant to grinding attacks** since adversaries cannot efficiently evaluate multiple outcomes. However, they introduce **significant computational costs**, require specialized **hardware for efficient verification**, and demand **additional synchronization mechanisms**.
+
+
### **1.2.5 Conclusion: The reasons behind Ouroboros Praos**
-Despite some **security trade-offs**, non-interactively combining **VRFs** was selected for Ouroboros Praos due to its **balance between efficiency, scalability, and security**. Unlike **PVSS**, we do not require a **multi-party commit-reveal process** or **quadratic communication overhead**.
+Despite some **security trade-offs**, non-interactively combining **VRFs** was selected for Ouroboros Praos due to its **balance between efficiency, scalability, and security**. Unlike **PVSS**, we do not require a **multi-party commit-reveal process** or have **quadratic communication overhead**.
However, ongoing research continues to explore potential enhancements to **mitigate grinding risks**, including **hybrid randomness beacons** that combine **VRFs with cryptographic delay mechanisms**.
@@ -225,8 +245,8 @@ However, ongoing research continues to explore potential enhancements to **mitig
### 1.3.1 Oblivious Leader Selection
-As Explained into [DGKR18 - Ouroboros Praos_ An adaptively-secure, semi-synchronous proof-of-stake blockchain](https://eprint.iacr.org/2017/573.pdf), Praos protocol possesses the following basic characteristics :
-- **Privacy**: Only the selected leader knows they have been chosen as slot leader until they reveal themselves, often by publishing a proof. This minimizes the risk of targeted attacks against the leader since other network participants are unaware of the leader's identity during the selection process.
+As Explained into [DGKR18 - Ouroboros Praos_ An adaptively-secure, semi-synchronous proof-of-stake blockchain](https://eprint.iacr.org/2017/573.pdf), Praos protocol presents the following basic characteristics :
+- **Slot Leader Privacy**: Only the selected leader knows they have been chosen as slot leader until they reveal themselves, often by publishing a proof. This minimizes the risk of targeted attacks against the leader since other network participants are unaware of the leader's identity during the selection process.
- **Verifiable Randomness**: The selection process uses verifiable randomness functions (VRFs) to ensure that the leader is chosen fairly, unpredictably, and verifiably. The VRF output acts as a cryptographic proof that the selection was both random and valid, meaning others can verify it without needing to know the leader in advance.
@@ -499,20 +519,23 @@ The structure of an epoch is often described by the ratio `3:3:4`:
- **Phase 2** also occupies **3** parts of the epoch (adjusted slightly to ensure the total reaches **10** parts in total.).
- **Phase 3** takes up the remaining **4** parts of the epoch.
+Note that the third phase is only longer than the first one to complete the epoch duration. Consequently, we can assume that the CG property is already reached at the ninth part of an epoch.
+
### 1.3.5 The Randomness Generation Sub-Protocol
-To select the slots leaders, which stake pool is eligible to produce and propose a slot's block, we need to rely on random numbers. As economic reward and transaction inclusion depends on these numbers, the generation of these number is of critical importance to the protocol and its security. We show in this section how these random numbers, or _random nonces_ are defined.
+To select the slots leaders, which stake pool is eligible to produce and propose a slot's block, we need to rely on random numbers. As economic reward and transaction inclusion depends on these numbers, the generation of these number is of critical importance to the protocol and its security. We show in this section how these random numbers, or _random nonces_ are defined.
#### **The $\eta^\text{evolving}$ Stream Definition**
-The random nonces $\eta$ are defined iteratively from a genesis value, as the hash of the previous epoch's nonce and the VRF outputs published between the Phase 2 of consecutive epochs. We thus talk about _evolving nonces_ $\eta^\text{evolving}$ as their value can be updated with the VRF output comprised in each block.
+Contrary to [Section 1.2.3](#123-the-historical-evolution-of-ouroboros-randomness-generation), where we first defined the random nonce as the hash of all VRF outputs, we adopt an iterative approach for the randomness generation in practice.
+More particularly, the random nonces $\eta$ are defined iteratively from a genesis value, as the hash of the previous epoch's nonce and the VRF outputs published between the Phase 2 of consecutive epochs. We thus talk about _evolving nonces_ $\eta^\text{evolving}$ as their value can be updated with the VRF output comprised in each block.
```math
\eta^{\text{evolving}}_{t+1} =
\begin{cases}
\text{ProtocolParameter}_\text{extraEntropy} & \text{when } t = 0, \\
- \eta^{\text{evolving}}_{t}\ ⭒ \mathsf{VRF}^\text{Output}_\text{t+1} & \text{when BlockProduced}(t) \\
+ \eta^{\text{evolving}}_{t}\ ⭒\ \ \mathsf{VRF}^\text{Output}_\text{t+1} & \text{when BlockProduced}(t) \\
\end{cases}
```
@@ -527,9 +550,9 @@ false & \text{otherwise.}
| **where** ||
|---------------|-----------------|
-| $\text{ProtocolParameter}_\text{extraEntropy} $ | The evolving nonce is initialized using the extraEntropy field defined in the protocol parameters.|
+| $\text{ProtocolParameter}_\text{extraEntropy} $ | The evolving nonce is initialized using the extra Entropy field defined in the protocol parameters.|
| $\mathsf{VRF}^\text{Output}_\text{i}$ | The **VRF output** generated by the $\text{slot}_\text{i}$ Leader and included in the block header |
-| $a⭒b$ | The concatenation of $a$ and $b$ , followed by a BLAKE2b-256 hash computation.
+| $a\ ⭒\ b$ | The concatenation of $a$ and $b$ , followed by a BLAKE2b-256 hash computation.
#### **The $`\eta^\text{candidates}`$**
@@ -548,7 +571,7 @@ false & \text{otherwise.}
- It originates from $`\eta_e^\text{candidate}`$ concatenated with $`\eta^\text{evolving}`$ of the last block of the previous epoch followed by a BLAKE2b-256 hash computation , which becomes stabilized at the conclusion of $`\text{epoch}_{e-1}`$ and transitions into $`\text{epoch}_e`$.
```math
-\eta_\text{e} = \eta^\text{candidate}_{e} ⭒ \eta^\text{evolving}_{T_{\text{end}}^{\text{epoch}_{e-2}}} , \quad \text{when } {\text{epoch}_e\text{ start}}
+\eta_\text{e} = \eta^\text{candidate}_{e}\ ⭒\ \eta^\text{evolving}_{T_{\text{end}}^{\text{epoch}_{e-2}}} , \quad \text{when } {\text{epoch}_e\text{ starts}}
```
As one of these fork will become the canonical main chain, so will the candidate nonce. Hence, the epoch nonce $\eta_e$ is the candidate nonce of the longest chain at Phase 2, which is determined once the chain stabilises.
@@ -572,12 +595,12 @@ The nonce aggregates randomness from the **entire epoch**, rather than a limited
This leads to the following iterative hashing process:
-$`\eta_e = \text{Hash}(\mathsf{VRF}_n || \text{Hash}(\mathsf{VRF}_{n-1} || \dots \text{Hash}(\eta_{e-1} || \mathsf{VRF}_1) \dots ))`$
-
+$`\eta_e = \text{Hash}\left( \mathsf{VRF}_n \,\|\, \text{Hash}\left( \mathsf{VRF}_{n-1} \,\|\, \dots \text{Hash}\left( \mathsf{VRF}_1 \,\|\, \eta^\text{evolving}_{T_{\text{end}}^{\text{epoch}_{e-2}}} \right) \dots \right) \right)`$
+
-This approach contrasts with a simpler method, where only the **VRF outputs of Phase 1 and 2 of epoch** $`e-1`$ are hashed together with $`\eta_{e-1}`$:
+This approach contrasts with the simpler method from the paper, where only the **VRF outputs of Phase 1 and 2 of epoch** $`e-1`$ are hashed together with $`\eta_{e-1}`$:
-$`\eta_e = \text{Hash}(\eta_{e-1} || \mathsf{VRF}_1 || \dots || \mathsf{VRF}_m)`$
+$`\eta_e = \text{Hash}(\eta_{e-1} \,\|\, \mathsf{VRF}_1 \,\|\, \dots \,\|\, \mathsf{VRF}_m)`$
@@ -634,7 +657,7 @@ blake2b_libsodium size input =
With **Ouroboros Praos**, as with [**Nakamoto consensus**](https://coinmarketcap.com/academy/article/what-is-the-nakamoto-consensus) in general, transaction **finality** is **probabilistic** rather than immediate. This means a transaction isn't **guaranteed** to be permanently stored in the **ledger** when it's first included in a **block**. Instead, each additional **block** added on top **strengthens its permanence**, gradually decreasing the likelihood of a **rollback**.
-**Ouroboros Praos** guarantees that after $k$ blocks have been produced, the likelihood of a **rollback** diminishes to the point where those blocks can be regarded as **secure** and **permanent** within the **ledger**. However, before these $k$ blocks are finalized, multiple versions of the **blockchain**—commonly referred to as "**forks**"—may coexist across the **network**. Each **fork** represents a potential **ledger state** until **finality** is ultimately achieved.
+**Ouroboros Praos** guarantees that after $k$ blocks have been produced, the likelihood of a **rollback** diminishes to the point where those blocks can be regarded as **secure** and **permanent** within the **ledger**. However, before these $k$ blocks are finalized, multiple versions of the **blockchain** — commonly referred to as "**forks**" — may coexist across the **network**. Each **fork** represents a potential **ledger state** until **finality** is ultimately achieved.
The **consensus layer** operates with a structure that resembles a branching **"tree" of blockchains** before **finality** stabilizes:
@@ -775,13 +798,13 @@ Both strategies undermine fairness in leader election, with **Preemptive Forking
#### 3.1.1 $\alpha$-Heavy and Heaviness
We define the heaviness of an interval as the percentage of blocks an adversary controls.
Let $X_A(w)$ be the **number of adversarial blocks** and similarly $X_H(w)$ the **number of honest blocks** in the an interval of $w$ blocks.
-The **heaviness** of an interval of size $w$ is thus the ratio $\frac{X_A(w)}{w}$. Heaviness thus vary between 0, where the interval only comprises honest blocks, and 1 where the adversary control them all.
+The **heaviness** of an interval of size $w$ is thus the ratio $\frac{X_A(w)}{w}$. Heaviness thus vary between 0, where the interval only comprises honest blocks, and 1, where the adversary control them all.
-We say that the interval is $\mathbf{\alpha}$**-heavy** if $\frac{X_A(w)}{w} > \alpha$. We furthermore say that the adversary _dominates_ the interval if $\alpha > 0.5$. We shall look from now on to the longest suffix the adversary dominates at the critical juncture, hence the longest interval $w_\text{max}$ where $\alpha > 0.5$.
+We say that the interval is $\mathbf{\alpha}$**-heavy** if $\frac{X_A(w)}{w} \geq \alpha$. We furthermore say that the adversary _dominates_ the interval if $\alpha \geq 0.5$. We shall look from now on to the longest suffix the adversary dominates at the critical juncture, hence the longest interval $w_\text{max}$ where $\alpha \geq 0.5$.
#### 3.1.2 Grinding Power g
-An **$\alpha$-heavy suffix** must be present at the critical juncture for a grinding attack to be considered. The heavier $w$ , for a fixed $w$, the greater the adversary’s grinding power.
+An **$\alpha$-heavy suffix** must be present at the critical juncture for a grinding attack to be considered. The heavier $w$, for a fixed $w$, the greater the adversary’s grinding power.
The **grinding power** $g$ of an adversary $A$ is the number of distinct values that $A$ can choose from when determining for the epoch nonce $\eta$. This quantifies the adversary's ability to manipulate randomness by selectively withholding, recomputing, or biasing values.
@@ -794,12 +817,12 @@ g_w(X_A) &= \sum_{i= w - X_A(w)}^{X_A(w)} \binom{X_A(w)}{i}\\
\end{align*}
```
-The grinding power for a given interval of size $w$ is the sum of $g_w(X)(X_A)$ when the adversary controls a majority of the blocks.
+The grinding power for a given interval of size $w$ is the sum of $g_w(X_A)$ when the adversary dominates the interval, that is the adverary controls a majority of the blocks.
```math
g_w = \sum_{X_A \geq \frac{w}{2}}^{w} g_w(X_A)
```
-Similarly, we define the **grinding depth**, $\rho$, as the logarithm of the grinding power: $\rho = \log_2 g$, and bound it by $0 \leq \rho \leq 256$. It determines the **entropy reduction** caused by an adversary's nonce manipulation, directly impacting the protocol's resistance to randomness biasing, that is the number of bits of randomness an adversary can manipulate.
+Similarly, we define the **grinding depth**, $\rho$, as the logarithm of the grinding power: $\rho = \log_2 g$, and bound it by $0 \leq \rho \leq 256$. It determines the **entropy reduction** caused by an adversary's nonce manipulation, directly impacting the protocol's resistance to randomness biasing, that is the number of bits of randomness an adversary can manipulate (we upper bound $g_w$ to 256 as the random nonce is 256-bit long).
In a simplified model where the multi-slot leader feature is not considered, the probability an adversary with $\text{stake}_A \in (0,1)$ stake controls $X_A$ out of $w$ blocks is:
@@ -829,17 +852,15 @@ In **Cardano mainnet**, the nonce size used in the randomness beacon is **256 bi
The **grinding opportunity window** $w_O$ is the time interval at the end of Phase 2 during which an adversary, dominating a suffix of size $w$, can compute and reveal one of $g$ possible $\eta_e^\text{candidate}$ nonces before the honest chain outpaces their chosen chain.
-Phase 2 spans $S_2 = \frac{6k}{f}$ slots (with $f = \frac{1}{20}$, $k = 2,160$, $S_2 = 259,200$), ending at slot $S_2$, where $\eta_e^\text{candidate}$ is sampled from $\eta^\text{evolving}$ based on the VRF outputs of blocks up to that point ([see Section 1.3.5](#135-the-randomness-generation-sub-protocol)).
+The end of Phase 2 happens after $S_2 = \frac{6k}{f}$ slots, where $\eta_e^\text{candidate}$ is sampled from $\eta^\text{evolving}$ based on the VRF outputs of blocks up to that point ([see Section 1.3.5](#135-the-randomness-generation-sub-protocol)). Given the protocol parameters $f = \frac{1}{20}$ and $k = 2,160$, we have $S_2 = 259,200$.
-Assuming the adversary controls the $X_A(w)$ slots (between slot numbered $S_2 - w + 1$ and $S_2$), they can manipulate $X_A(w)$ VRF outputs to generate up to $2^{X_A(w)}$ possible nonces by selectively revealing or withholding each output. After $S_2$, a chain with their chosen nonce —ranging in length from $X_H(w)$ (revealing no blocks, withholding all) to $w$ (revealing all)— is set.
-
-For simplicity, we consider that a honest block is produced at slot $S_2 + 1$. As such, the grinding oppotunity window is bounded by,
+Assuming the adversary controls the $X_A(w)$ slots (between slot numbered $S_2 - w $ and $S_2$), they can manipulate $X_A(w)$ VRF outputs to generate up to $2^{X_A(w)}$ possible nonces by selectively revealing or withholding each output. After $S_2$, a chain with their chosen nonce — ranging in length from $X_H(w)$ (revealing no blocks, withholding all) to $w$ (revealing all) — is set. As such, the grinding oppotunity window is bounded by :
```math
\frac{X_A(w)}{f} \leq w_O \leq \frac{w}{f} \text{ when w is A-heavy}
```
-**N.B.** Contrary to the grinding power that is upper-bounded by $2^{256}$, the grinding window is not.
+**N.B.** Contrary to the grinding power that is upper-bounded by $2^{256}$, the grinding window is bounded by $k$ of Chain Prefix (CP) property.
- **Parameters**:
- $f$: Active slot coefficient (e.g., $\frac{1}{20}$), the fraction of slots with a leader.
@@ -851,26 +872,72 @@ For simplicity, we consider that a honest block is produced at slot $S_2 + 1$. A
✏️ **Note**: The code to generate this graph is available at ➡️ [this link](./graph/window0_graph.py).
-Let's consider the worst case where the adversary controls all trailing slots ($g = 1 \Leftrightarrow w=X_A(w)$):
+Let's consider the worst case where the adversary controls all trailing slots ($`g = 1 \Leftrightarrow w = X_A(w)`$):
+
- **$w = 16$**:
- $w_O = \frac{16}{\frac{1}{20}} = 16 \cdot 20 = 320$ seconds (~5.3 minutes).
- - Starts at $S_2 - w + 1 = 259,200 - 16 + 1 = 259,185$, ends at $S_2 + \frac{1}{f} = 259,200 + 20 = 259,220$ (adjusted for reveal timing).
+ - Starts at $S_2 - w = 259,200 - 16 = 259,184$, ends at $S_2 + \frac{1}{f} = 259,200 + 20 = 259,220$ (adjusted for reveal timing).
+
- **$w = 32$**:
- $w_O = \frac{32}{\frac{1}{20}} = 32 \cdot 20 = 640$ seconds (~10.7 minutes).
- - Starts at $S_2 - w + 1 = 259,200 - 32 + 1 = 259,169$, ends at $259,200 + 20 = 259,220$.
+ - Starts at $S_2 - w = 259,200 - 32 = 259,168$, ends at $259,200 + 20 = 259,220$.
+
- **$w = 256$**:
- $w_O = \frac{256}{\frac{1}{20}} = 256 \cdot 20 = 5,120$ seconds (~85.3 minutes).
- - Starts at $S_2 - w + 1 = 259,200 - 256 + 1 = 258,945$, ends at $259,200 + 20 = 259,220$.
+ - Starts at $S_2 - w = 259,200 - 256 = 258,944$, ends at $259,200 + 20 = 259,220$.
This sizing ensures the adversary has time to act before honest chain growth threatens even a length-1 chain, providing a practical and conservative bound for grinding feasibility.
+We can moreover defined opportunity window with respect to the adversarial stake, $\text{stake}_A$. The expected opportunity window tends to,
+
+```math
+\mathbb{E}[w_O] \approx f^{-1} \cdot \left (\frac{2 \cdot \text{stake}_A}{1 - 2 \cdot \text{stake}_A} \right )
+```
+
+- **Parameters**:
+ - $f$: Active slot coefficient (e.g., $\frac{1}{20}$), the fraction of slots with a leader.
+ - $\text{stake}_A$ is the percentage of stake controlled by the adversary.
+ - Slot duration = 1 second.
+
+| $\text{stake}_A$ (%) | 0.5 | 1 | 2 | 5 | 10 | 20 | 25 | 30 | 33 | 40 | 45 | 49 |
+| :----------------------: | :-------: | :------: | :-------: | :--------: | :--------: | :--------: | :--------: | :---------: | :----------: | :--------: | :-------: | :-------: |
+| $\mathbb{E}[w_O]$ (s) | 2.02E-01 |4.08E-01 | 8.33E-01 | 2.22E00 | 5.00E00 | 13.33E00 | 2.00E01 | 3.00E01 | 3.88E01 | 8.00E01 | 1.80E02 | 9.79E02 |
+
+
+
+
+📌📌 More Details on the expectation's computation – Expand to view the content.
+
+To compute the expectation of the opportunity window, we need to find the earliest slot starting from the end of Phase 2, such that the adversary controls a majority of slots in that interval (and before the chain has been set, that is before $k$ slots).
+
+More particularly, if we define each slot as a Benoulli random variable $X_1, \dots, X_{S2}$ such that the slot is takes for value 1 — is owned by the adversary — with probability $p = \text{stake}_A$, we want to compute the expectation of the earliest position $P \in \{1, \dots, {S2}+1\}$ such that $\sum_{i=P}^{S2} X_i \geq \frac{{S2} - P + 1}{2}$.
+
+We can make the problem symmetric by defining $Y_i = 2 \cdot X_i -1$. In that case, $Y_i = 1$ wth probability $p$ and $Y_i = -1$ with probability $1-p$. We can rewrite the inequality then as,
+
+```math
+\begin{align*}
+\sum_{i=P}^{S2} X_i &\geq \frac{{S2} - P + 1}{2}\\
+\sum_{i=P}^{S2} \frac{Y_i - 1}{2} &\geq \frac{{S2} - P + 1}{2}\\
+\sum_{i=P}^{S2} Y_i &\geq 0
+\end{align*}
+```
+
+By re-indexing, with $T = {S2} - P + 1$ and $Z_j = Y_{k=j+1}$, we have,
+ $\sum_{j=1}^T Z_j \geq 0$.
+
+We can see this sum over $Z_i$ as finding the length of a Gambler's ruin problem with initial stake 0 and sole end condition that the stake becomes negative. As such, we have, $\mathbb{E}[T] = \frac{1}{1-2\cdot p} -1$ (we remove one as ruin is defined as the first time the stake equals $-1$).
+
+The position $P$ then becomes $\mathbb{E}[P] = {S2} + 1 - \mathbb{E}[T] \approx {S2} + 1 - \frac{2 \cdot p}{1 - 2 \cdot p}$ and the opportunity window is the duration of the interval from position $P$ to the end of the interval of size ${S2}$, hence $\mathbb{E}[w_O] = f^{-1} \cdot ({S2} - \mathbb{E}[p]) = f^{-1} \cdot \frac{2 \cdot p}{1 - 2 \cdot p}$.
+
+
+
+
##### 3.1.3.2 Target Window $w_T$
Once the adversary obtains a potential **candidate nonce** ($\eta_e^{\text{candidate}}$) for epoch $e$, they can compute their private **slot leader distribution** for the entire epoch, spanning:
```math
\frac{10k}{f} = \frac{10 \cdot 2,160}{0.05} = 432,000 \text{ slots} = 5 \text{ days}
-
```
We define the **grinding target window** $w_T$ as the slot interval an adversary targets based on their attack strategy, where $1 \leq w_T \leq 4.32 \cdot 10^5 \text{ slots}$.
@@ -1141,7 +1208,7 @@ Expanding each term:
Final expression:
```math
-T_{\text{grinding}} = \frac{\rho}{2} T_{\text{BLAKE2b}} + w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}}
+T_{\text{grinding}} = \frac{\rho}{2} \cdot T_{\text{BLAKE2b}} + w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}}
```
Where:
@@ -1184,13 +1251,13 @@ N_{\text{CPU}} \geq \left \lceil \frac{2^{\rho} \cdot T_{\text{grinding}}}{w_O}\
From **Section 3.3**, the per-attempt grinding time is:
```math
-T_{\text{grinding}} = \frac{\rho}{2} T_{\text{BLAKE2b}} + w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}}
+T_{\text{grinding}} = \frac{\rho}{2} \cdot T_{\text{BLAKE2b}} + w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}}
```
Substituting this into the inequality:
```math
-N_{\text{CPU}} \geq \left \lceil \frac{2^{\rho} \cdot \left( \frac{\rho}{2} T_{\text{BLAKE2b}} + w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}} \right)}{w_O} \right \rceil
+N_{\text{CPU}} \geq \left \lceil \frac{2^{\rho} \cdot \left( \frac{\rho}{2} \cdot T_{\text{BLAKE2b}} + w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}} \right)}{w_O} \right \rceil
```
@@ -1205,15 +1272,10 @@ Substituting this into our equation:
```math
\begin{align*}
-N_{\text{CPU}} &\geq \left \lceil f \cdot \frac{2^{\rho} \cdot \left( \frac{\rho}{2} T_{\text{BLAKE2b}} + w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}} \right)}{w} \right \rceil\\
-& \geq \left \lceil f \cdot \frac{2^{\rho} \cdot \left( \frac{\rho}{2} T_{\text{BLAKE2b}} + w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}} \right)}{2\cdot \rho - 1} \right \rceil \text{ as } w < 2 \cdot \rho - 1\\
-& > \left \lceil f \cdot 2^{\rho-1} \cdot T_{\text{BLAKE2b}} + \frac{f}{\rho} \cdot 2^{\rho-1} \cdot \left( w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}} \right) \right \rceil
-\end{align*}
-```
-We end up with this final expression :
-```math
-\begin{align*}
-N_{\text{CPU}} > \left \lceil f \cdot 2^{\rho-1} \cdot T_{\text{BLAKE2b}} + \frac{f}{\rho} \cdot 2^{\rho-1} \cdot \left( w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}} \right) \right \rceil
+N_{\text{CPU}} &\geq \left \lceil \frac{f \cdot 2^{\rho}}{w} \cdot \left( \frac{\rho}{2} \cdot T_{\text{BLAKE2b}} + w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}} \right) \right \rceil\\
+& \geq \left \lceil \frac{f \cdot 2^{\rho}}{2 \rho - 1} \cdot \left( \frac{\rho}{2} \cdot T_{\text{BLAKE2b}} + w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}} \right) \right \rceil \text{, as the interval is dominated, i.e. } w < 2 \cdot \rho - 1\\
+& \geq \left \lceil f \cdot 2^{\rho-2} \cdot \left ( T_{\text{BLAKE2b}} + 2 \rho^{-1} \cdot \left [ w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}} \right ] \right ) \right \rceil
+
\end{align*}
```
@@ -1222,7 +1284,7 @@ N_{\text{CPU}} > \left \lceil f \cdot 2^{\rho-1} \cdot T_{\text{BLAKE2b}} + \fr
Starting from the final expression at the end of the last section:
```math
-N_{\text{CPU}} > \left \lceil f \cdot 2^{\rho-1} \cdot T_{\text{BLAKE2b}} + \frac{f}{\rho} \cdot 2^{\rho-1} \cdot \left( w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}} \right) \right \rceil
+N_{\text{CPU}} \geq \left \lceil f \cdot 2^{\rho-2} \cdot \left ( T_{\text{BLAKE2b}} + 2 \rho^{-1} \cdot \left [ w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}} \right ] \right ) \right \rceil
```
#### Applying Cardano Mainnet Parameters
@@ -1232,30 +1294,23 @@ Using Cardano’s mainnet values:
- $f = \frac{1}{20} = 0.05$ – Active slot coefficient.
- Slot duration = 1 second.
-Since the eligibility check is negligible, set $T_{\text{eligibility}} \approx 0$:
-
-Substitute into the expression:
-
-- First term: $f \cdot 2^{\rho-1} \cdot T_{\text{BLAKE2b}} = 0.05 \cdot 2^{\rho-1} \cdot 10^{-8} = 5 \cdot 10^{-10} \cdot 2^{\rho-1}$,
-- Second term: $\frac{f}{\rho} \cdot 2^{\rho-1} \cdot \left( w_T \cdot ( T_{\mathsf{VRF}} + T_{\text{eligibility}} ) + T_{\text{eval}} \right) = \frac{0.05}{\rho} \cdot 2^{\rho-1} \cdot \left( w_T \cdot (10^{-6} + 0) + T_{\text{eval}} \right) = \frac{0.05 \cdot 2^{\rho-1}}{\rho} \cdot (10^{-6} w_T + T_{\text{eval}})$.
-
Thus, the expression becomes:
```math
-N_{\text{CPU}} > \left \lceil 5 \cdot 10^{-10} \cdot 2^{\rho-1} + \frac{5 \cdot 10^{-2} \cdot 2^{\rho-1}}{\rho} \cdot (10^{-6} w_T + T_{\text{eval}}) \right \rceil
+N_{\text{CPU}} \geq \left \lceil 5 \cdot 10^{-10} \cdot 2^{\rho-2} + 5 \cdot 10^{-8} \cdot w_T \cdot \rho^{-1} \cdot 2^{\rho-1} + 5 \cdot 10^{-2} \cdot T_{\text{eval}} \cdot \rho^{-1} \cdot 2^{\rho-1} \right \rceil
```
-Simplify:
+where each step contributes as follows,
+- **Nonce Generation:** : $5 \cdot 10^{-10} \cdot 2^{\rho-2}$
+- **Slot Leader Verification** : $5 \cdot 10^{-8} \cdot w_T \cdot \rho^{-1} \cdot 2^{\rho-1} $
+- **Strategic Evaluation** : $5 \cdot 10^{-2} \cdot T_{\text{eval}} \cdot \rho^{-1} \cdot 2^{\rho-1}$
-```math
-N_{\text{CPU}} > \left \lceil 5 \cdot 10^{-10} \cdot 2^{\rho-1} + \frac{5 \cdot 10^{-8} \cdot 2^{\rho-1}}{\rho} \cdot w_T + \frac{5 \cdot 10^{-2} \cdot 2^{\rho-1}}{\rho} \cdot T_{\text{eval}} \right \rceil
-```
#### Final Expression
The estimated number of CPUs required is:
```math
-N_{\text{CPU}} > \left \lceil 5 \cdot 10^{-10} \cdot 2^{\rho-1} + \frac{5 \cdot 10^{-14} \cdot 2^{\rho-1}}{\rho} \cdot w_T + \frac{5 \cdot 10^{-2} \cdot 2^{\rho-1}}{\rho} \cdot T_{\text{eval}} \right \rceil
+N_{\text{CPU}} \geq \left \lceil 5 \cdot 10^{-10} \cdot 2^{\rho-2} + 5 \cdot 10^{-8} \cdot \frac{w_T \cdot 2^{\rho-1}}{\rho} + 5 \cdot 10^{-2} \cdot \frac{T_{\text{eval}} \cdot 2^{\rho-1}}{\rho} \right \rceil
```
- $\rho$: The number of blocks controlled by the adversary.
@@ -1271,22 +1326,23 @@ Following the computational model from [Section 3.4.2 - Estimated Formula Using
| **Scenario** | **$T_{\text{eval}}$ (Complexity)** | **$w_T$ (Scope)** | **Description** |
|-----------------|--------------------------------------|---------------------|---------------------------------------------------------------------------------|
-| **Ant Glance** | 0 (Low) | 1h (3600 s) | An ant quickly glancing at a small spot, representing simple evaluation (low $T_{\text{eval}}$) with basic effort and a narrow observation scope (small $w_T$). |
-| **Ant Patrol** | 0 (Low) | 5d (432,000 s) | An ant patrolling a wide area over time with simple instincts, representing simple evaluation (low $T_{\text{eval}} $) with basic effort and a broad observation scope (large $w_T$). |
-| **Owl Stare** | 1 (High) | 1h (3600 s) | An owl staring intently at a small area with keen focus, representing complex evaluation (high $T_{\text{eval}} $) with advanced effort and a narrow observation scope (small $w_T$). |
-| **Owl Survey** | 1 (High) | 5d (432,000 s) | An owl surveying a wide range with strategic awareness, representing complex evaluation (high $T_{\text{eval}} $) with advanced effort and a broad observation scope (large $w_T$). |
+| **Ant Glance** | 0 (Low) | 0s | An ant quickly glancing at a small spot, representing simple evaluation (low $T_{\text{eval}}$) with basic effort and a narrow observation scope (minimal $w_T$). |
+| **Ant Patrol** | 0s (Low) | 5d (432,000 s) | An ant patrolling a wide area over time with simple instincts, representing simple evaluation (low $T_{\text{eval}} $) with basic effort and a broad observation scope (large $w_T$). |
+| **Owl Stare** | 1s (High) | 0s | An owl staring intently at a small area with keen focus, representing complex evaluation (high $T_{\text{eval}} $) with advanced effort and a narrow observation scope (minimal $w_T$). |
+| **Owl Survey** | 1s (High) | 5d (432,000 s) | An owl surveying a wide range with strategic awareness, representing complex evaluation (high $T_{\text{eval}} $) with advanced effort and a broad observation scope (large $w_T$). |
The $N_{\text{CPU}}$ formulas are derived by substituting the respective $w_T$ and $T_{\text{eval}}$ values from each scenario into the base expression :
```math
-N_{\text{CPU}} > \left \lceil 5 \cdot 10^{-10} \cdot 2^{\rho-1} + \frac{5 \cdot 10^{-14} \cdot 2^{\rho-1}}{\rho} \cdot w_T + \frac{5 \cdot 10^{-2} \cdot 2^{\rho-1}}{\rho} \cdot T_{\text{eval}} \right \rceil
+N_{\text{CPU}} \geq \left \lceil 5 \cdot 10^{-10} \cdot 2^{\rho-2} + 5 \cdot 10^{-8} \cdot \frac{w_T \cdot 2^{\rho-1}}{\rho} + 5 \cdot 10^{-2} \cdot \frac{T_{\text{eval}} \cdot 2^{\rho-1}}{\rho} \right \rceil
```
| **Scenario** | **$N_{\text{CPU}}$ Formula** |
|-----------------|-----------------------------------------------------------------------------------------------------------------|
-| **Ant Glance** | $5\cdot10^{-10}\cdot2^{\rho-1} + 1.8\cdot10^{-11}\cdot2^{\rho-1}$ |
-| **Ant Patrol** | $5\cdot10^{-10}\cdot2^{\rho-1} + 2.16\cdot10^{-9}\cdot2^{\rho-1}$ |
-| **Owl Stare** | $5\cdot10^{-10}\cdot2^{\rho-1} + 1.8\cdot10^{-11}\cdot2^{\rho-1} + 5\cdot10^{-2}\cdot\frac{2^{\rho-1}}{\rho}$ |
-| **Owl Survey** | $5\cdot10^{-10}\cdot2^{\rho-1} + 2.16\cdot10^{-9}\cdot2^{\rho-1} + 5\cdot10^{-2}\cdot\frac{2^{\rho-1}}{\rho}$ |
+| **Ant Glance** | $5 \cdot 10^{-10} \cdot 2^{\rho-2}$ |
+| **Ant Patrol** | $5 \cdot 10^{-10} \cdot 2^{\rho-2} + 2.16 \cdot 10^{-2} \cdot \frac{2^{\rho-1}}{\rho}$ |
+| **Owl Stare** | $5 \cdot 10^{-10} \cdot 2^{\rho-2} + 5 \cdot 10^{-2} \cdot \frac{2^{\rho-1}}{\rho}$ |
+| **Owl Survey** | $5 \cdot 10^{-10} \cdot 2^{\rho-2} + 7.16 \cdot 10^{-2} \cdot \frac{2^{\rho-1}}{\rho}$ |
+

@@ -1294,17 +1350,22 @@ N_{\text{CPU}} > \left \lceil 5 \cdot 10^{-10} \cdot 2^{\rho-1} + \frac{5 \cdot
✏️ **Note**: The code to generate this graph is available at ➡️ [this link](./graph/scenario_cpu_graph.py).
-The maximal delta $\Delta \log_{10}(N_{\text{CPU}})$ (Owl Survey minus Ant Glance) is $\sim 6.3$, matching the graph’s constant gap. This suggests $T_{\text{eval}}$ and $w_T$ drive a pre-exponential frame of $10^{6.3}$ CPUs, scaled exponentially by $2^{\rho}$. Note that the green line (Owl Stare) is not visible on the graph, likely due to its close alignment with the blue line (Ant Glance), as both share the same $w_T = 3600$ s, and the difference in $T_{\text{eval}}$ (0 for Ant Glance vs. 1 for Owl Stare) becomes negligible on the logarithmic scale for large $\rho$.
-
+The maximal delta $\Delta \log_{10}(N_{\text{CPU}})$ (**Owl Survey** minus **Ant Glance**) is now approximately $6.8$, reflecting a dramatic difference in computational requirements between the simplest and most complex scenarios. This illustrates that $T_{\text{eval}}$ and $w_T$ together form a pre-exponential amplification of up to $10^{6.8}$ CPUs, which is then further scaled by the exponential factor $2^{\rho}$. The yellow line (**Ant Patrol**) sits between the blue (**Ant Glance**) and red (**Owl Survey**) lines, with a delta of approximately $6.2$ from **Ant Glance**, confirming that its high $w_T = 432{,}000$ s causes a **~120x CPU increase** relative to **Ant Glance**, despite both having $T_{\text{eval}} = 0$.
+
+The green line (**Owl Stare**), lies below the red line (Owl Survey), with a delta of approximately 0.16 in $\log_{10}(N_{\text{CPU}})$.
+
+At $\rho = 50$:
+
+- **Ant Glance** ($T_{\text{eval}} = 0$, $w_T = 0$): $N_{\text{CPU}} \approx 5.36 \cdot 10^{7}$, $\log_{10}(N_{\text{CPU}}) \approx 5.16$
+- **Ant Patrol** ($T_{\text{eval}} = 0$, $w_T = 432{,}000$): $N_{\text{CPU}} \approx 6.32 \cdot 10^{9}$, $\log_{10}(N_{\text{CPU}}) \approx 11.40$
+- **Owl Stare** ($T_{\text{eval}} = 1$, $w_T = 0$): $N_{\text{CPU}} \approx 1.65 \cdot 10^{10}$, $\log_{10}(N_{\text{CPU}}) \approx 11.77$
+- **Owl Survey** ($T_{\text{eval}} = 1$, $w_T = 432{,}000$): $N_{\text{CPU}} \approx 2.37 \cdot 10^{11}$, $\log_{10}(N_{\text{CPU}}) \approx 11.92$
+
### 3.6 Grinding Power Computational Feasibility
-Building on the analysis in previous [Section 3.5](##35-scenarios), we assessed the feasibility of grinding attacks by examining the computational resources ($N_{\text{CPU}}$) required across different grinding depths ($\rho$). The scenarios (Ant Glance, Ant Patrol, Owl Stare, Owl Survey) show a consistent $\Delta \log_{10}(N_{\text{CPU}}) \sim 6.3$, meaning the most demanding scenario (Owl Survey) requires $10^{6.3}$ times more CPUs than the least demanding (Ant Glance).
+Building on the analysis in previous [Section 3.5](##35-scenarios), we assessed the feasibility of grinding attacks by examining the computational resources ($N_{\text{CPU}}$) required across different grinding depths ($\rho$). The scenarios (Ant Glance, Ant Patrol, Owl Stare, Owl Survey) show a consistent $\Delta \log_{10}(N_{\text{CPU}}) \sim 2.6$, meaning the most demanding scenario (Owl Survey) requires $10^{2.6}$ times more CPUs than the least demanding (Ant Glance).
To help readers understand the practicality of these attacks, we define feasibility thresholds based on economic and computational viability, as shown in the table below:
@@ -1322,22 +1383,22 @@ Costs are estimated assuming a CPU rental price of $0.01$ per CPU-hour, based on
The table below summarizes the feasibility for `Owl Survey` ($T_{\text{eval}} = 1$, $w_T = 432,000 \, \text{s}$), the most resource-intensive scenario, at different $\rho$ values, using the $0.01$ estimate for initial assessment:
-| $\rho$ | CPUs Required (Log₁₀ Scale) | Estimated Cost (USD, $w_O$ run) | Feasibility |
+| $\rho$ | CPUs Required (Log₁₀ Scale) | Estimated Cost (USD) | Feasibility |
|----------|-----------------------------|----------------------------------|-------------|
-| **20** | $10^4$ CPUs ($\sim 10^4$) | 56.74 | Trivial for any adversary |
-| **38** | $10^9$ CPUs ($\sim 10^9$) | 2.86 million | Feasible for well-funded adversaries |
-| **50** | $10^{13}$ CPUs ($\sim 10^{13}$) | 3.10 billion | Possible with large-scale infrastructure |
-| **70** | $10^{18}$ CPUs ($\sim 10^{18}$) | $9.80 \times 10^{16}$ | Borderline infeasible, requires massive resources |
-| **110** | $10^{31}$ CPUs ($\sim 10^{31}$) | $5.97 \times 10^{28}$ | Infeasible, exceeds global computing capacity |
-| **215** | $10^{62}$ CPUs ($\sim 10^{62}$) | $2.38 \times 10^{59}$ | Impossible, beyond planetary energy limits |
+| **31** | $10^6$ CPUs | 8,394.76 | Trivial for any adversary |
+| **37** | $10^8$ CPUs | 539,954 | Feasible with standard resources |
+| **47** | $10^{11}$ CPUs | 553.79 million | Possible with large-scale infrastructure |
+| **48** | $10^{11}$ CPUs | 1.107 billion | Borderline Infeasible, requires massive resources |
+| **58** | $10^{14}$ CPUs | 1.137 trillion | Infeasible, exceeds global computing capacity |
- **CPUs Required**: Computed for Owl Survey at each $\rho$, rounded to the nearest order of magnitude for readability (exact values approximated).
- **Cost**: Assumes $0.01$ per CPU-hour, scaled for the runtime $w_O = 20 (2\rho - 1)$ seconds.
- **Feasibility**: Assessed based on computational and economic viability, considering global computing resources (e.g., $\sim 10^{12}$ CPUs in modern data centers, $\sim 10^{15}$ CPUs globally as of March 11, 2025).
-
+
📌 Example Calculation for ρ = 50 (Owl Survey)
+
Let’s walk through the calculation for the Owl Survey scenario at $\rho=50$ to demonstrate how the values in the table are derived. The Owl Survey scenario has $T_{\text{eval}}=1$ (high complexity) and $w_T=432,000\,\text{s}$ (5 days), making it the most resource-intensive scenario.
@@ -1346,79 +1407,24 @@ Let’s walk through the calculation for the Owl Survey scenario at $\rho=50$ to
The formula for $N_{\text{CPU}}$ in the Owl Survey scenario, as given in [Section 3.5 - Scenarios](#35-scenarios), is:
```math
-N_{\text{CPU}} > \left \lceil 5 \times 10^{-10} \times 2^{\rho-1} + \frac{5 \times 10^{-14} \times 2^{\rho-1}}{\rho} \cdot w_T + \frac{5 \times 10^{-2} \times 2^{\rho-1}}{\rho} \cdot T_{\text{eval}} \right \rceil
+N_{\text{CPU}} \geq 5 \cdot 10^{-10} \cdot 2^{\rho-2} + 7.16 \cdot 10^{-2} \cdot \frac{2^{\rho-1}}{\rho}
```
-Substitute the values $\rho=50$, $w_T=432,000$, and $T_{\text{eval}}=1$:
+For $\rho=50$, the expression becomes:
```math
-N_{\text{CPU}} > \left \lceil 5 \times 10^{-10} \times 2^{50-1} + \frac{5 \times 10^{-14} \times 2^{50-1}}{50} \times 432,000 + \frac{5 \times 10^{-2} \times 2^{50-1}}{50} \times 1 \right \rceil
-```
-
-#### Compute $2^{49}$
-
-First, calculate $2^{50-1}=2^{49}$:
-
-```math
-2^{49} = 2^{40} \times 2^{9} = (2^{10})^4 \times 2^9 = 1024^4 \times 512
-```
-
-```math
-1024^4 = (1024^2)^2 = (1,048,576)^2 \approx 1.0995 \times 10^{12}
-```
-
-```math
-2^{49} \approx 1.0995 \times 10^{12} \times 512 \approx 5.629 \times 10^{14}
-```
-
-#### First Term: $5 \times 10^{-10} \times 2^{49}$
-
-```math
-5 \times 10^{-10} \times 5.629 \times 10^{14} = 5 \times 5.629 \times 10^{-10} \times 10^{14} = 28.145 \times 10^4 = 2.8145 \times 10^5
-```
-
-#### Second Term: $\frac{5 \times 10^{-14} \times 2^{49}}{50} \times 432,000$
-
-```math
-\frac{5 \times 10^{-14} \times 5.629 \times 10^{14}}{50} \times 432,000 = \frac{5 \times 5.629 \times 10^{-14} \times 10^{14}}{50} \times 432,000
-```
-
-```math
-= \frac{28.145}{50} \times 432,000 = 0.5629 \times 432,000 \approx 243,172.8
-```
-
-#### Third Term: $\frac{5 \times 10^{-2} \times 2^{49}}{50} \times 1$
-
-```math
-\frac{5 \times 10^{-2} \times 5.629 \times 10^{14}}{50} = \frac{5 \times 5.629 \times 10^{-2} \times 10^{14}}{50} = \frac{28.145 \times 10^{12}}{50}
-```
-
-```math
-= 0.5629 \times 10^{12} = 5.629 \times 10^{11}
-```
-
-#### Sum the Terms
-
-```math
-2.8145 \times 10^5 + 243,172.8 = 524,322.8
-```
-
-```math
-524,322.8 + 5.629 \times 10^{11} \approx 5.629 \times 10^{11}
-```
-
-```math
-N_{\text{CPU}} > \left \lceil 5.629 \times 10^{11} \right \rceil = 5.629 \times 10^{11}
+\begin{align*}
+N_{\text{CPU}} &\geq 5 \cdot 10^{-10} \cdot 2^{48} + 7.16 \cdot 10^{-2} \cdot \frac{2^{49}}{50}\\
+ &\geq 8.06 \cdot 10^{11}
+\end{align*}
```
In $\log_{10}$ scale:
```math
-\log_{10}(5.629 \times 10^{11}) = \log_{10}(5.629) + 11 \approx 0.7503 + 11 \approx 11.7503
+\log_{10}(5 \cdot 10^{-10} \cdot 2^{48} + 7.16 \cdot 10^{-2} \cdot \frac{2^{49}}{50}) \approx 11.906
```
-The table rounds this to $10^{13}$, which appears to be an error; the correct value is closer to $10^{11.75}$.
-
### Step 2: Compute the Estimated Cost in USD
The cost is calculated as:
@@ -1431,31 +1437,13 @@ The cost is calculated as:
- **Runtime**: $w_O = 20 \times (2\rho - 1)$ seconds, with $\rho=50$:
```math
-w_O = 20 \times (2 \times 50 - 1) = 20 \times 99 = 1,980\,\text{seconds}
+w_O = 20 \times (2 \cdot 50 - 1) = 1,980 \, \text{seconds}, \quad \text{runtime} = \frac{1,980}{3600} \approx 0.55 \, \text{hours}
```
-Convert to hours:
-
-```math
-w_O^{\text{hours}} = \frac{1,980}{3,600} = 0.55\,\text{hours}
-```
-
-- **$N_{\text{CPU}}$**: $5.629 \times 10^{11}$,
-
```math
-\text{Cost (USD)} = 5.629 \times 10^{11} \times 0.01 \times 0.55
+\text{Cost (USD)} = 8.06 \times 10^{11} \times 0.01 \times 0.55 \approx 4.43 \times 10^9 \approx 4.43 \, \text{billion}
```
-```math
-= 5.629 \times 0.0055 \times 10^{11} = 0.03096 \times 10^{11} = 3.096 \times 10^9
-```
-
-```math
-\text{Cost (USD)} \approx 3.10 \times 10^9 = 3.10\,\text{billion}
-```
-
-This matches the table value of 3.10 billion USD.
-
### Step 3: Determine Feasibility
The feasibility thresholds are:
@@ -1466,22 +1454,10 @@ The feasibility thresholds are:
- **Borderline Infeasible**: $1,000,000,000$ to $1,000,000,000,000$ ($\log_{10} 9$ to 12),
- **Infeasible**: > $1,000,000,000,000$ ($\log_{10} > 12$).
-For a cost of $3.10 \times 10^9$:
-
-```math
-\log_{10}(3.10 \times 10^9) = \log_{10}(3.10) + 9 \approx 0.4914 + 9 = 9.4914
-```
-
-This falls within $\log_{10} 9$ to 12, corresponding to **Borderline Infeasible**. The table lists it as "Possible," which appears to be a categorization error based on the defined thresholds.
+This scenario is thus **Borderline Infeasible**, as the cost of $4.43 \, \text{billion}$ falls between $1,000,000,000$ and $1,000,000,000,000$.
-
-#### References
-- [AWS EC2 Pricing Page Detailed Instance Pricing](https://aws.amazon.com/ec2/pricing/)
-- [Azure Virtual Machines Pricing Calculator Detailed VM Costs](https://azure.microsoft.com/en-us/pricing/calculator/)
-- [Google Compute Engine Pricing Detailed Compute Pricing](https://cloud.google.com/compute/pricing)
-- [iRender Pricing Information Competitive Cloud Rates](https://www.irender.com/pricing)
-
+

@@ -1489,15 +1465,18 @@ This falls within $\log_{10} 9$ to 12, corresponding to **Borderline Infeasible*
✏️ **Note**: The code to generate this graph is available at ➡️ [this link](./graph/scenario_cost-graph.py).
-The cost difference between the most expensive scenario (Owl Survey) and the cheapest (Ant Glance) is significant, with a consistent $\Delta \log_{10}(\text{Cost (USD)}) \sim 6.3$, meaning Owl Survey costs approximately $10^{6.3}$ times more than Ant Glance, reflecting the substantial impact of $T_{\text{eval}}$ and $w_T$ on resource demands. The table below shows the $\rho$ values where each scenario transitions across feasibility categories:
+The cost difference between the most expensive scenario (Owl Survey) and the cheapest (Ant Glance) is significant, with a consistent $\Delta \log_{10}(\text{Cost (USD)}) \sim 6.8$, meaning Owl Survey costs approximately $10^{6.8}$ times more than Ant Glance, reflecting the substantial impact of $T_{\text{eval}}$ and $w_T$ on resource demands.
+
+The table below shows the $\rho$ values where each scenario transitions across feasibility categories:
-| **Feasibility Category** | **🔵 Ant Glance** | **🟠 Ant Patrol** | **🟢 Owl Stare** | **🔴 Owl Survey** |
-|--------------------------------------------|-------------------|-------------------|------------------|-------------------|
-| **🟢 🌱 Trivial for Any Adversary** | $[0, 49)$ | $[0, 47)$ | $[0, 27)$ | $[0, 27)$ |
-| **🟡 💰 Feasible with Standard Resources** | $[49, 59)$ | $[47, 57)$ | $[27, 34)$ | $[27, 34)$ |
-| **🟠 🏭 Possible with Large-Scale Infrastructure** | $[59, 73)$ | $[57, 71)$ | $[34, 48)$ | $[34, 48)$ |
-| **🔴 🚫 Borderline Infeasible** | $[73, 87)$ | $[71, 85)$ | $[48, 62)$ | $[48, 62)$ |
-| **🔴 🚫 Infeasible** | $[87, 256)$ | $[85, 256)$ | $[62, 256)$ | $[62, 256)$ |
+
+| **Feasibility Category** | **🔵 Ant Glance** | **🟠 Ant Patrol** | **🟢 Owl Stare** | **🔴 Owl Survey** |
+|--------------------------------------------|---------------------|---------------------|--------------------|--------------------|
+| **🟢 🌱 Trivial for Any Adversary** | $0 \to 53.6$ | $0 \to 32.9$ | $0 \to 31.6$ | $0 \to 31.1$ |
+| **🟡 💰 Feasible with Standard Resources** | $53.6 \to 60$ | $32.9 \to 39.5$ | $31.6 \to 38.3$ | $31.1 \to 37.8$ |
+| **🟠 🏭 Large-Scale Infrastructure Required** | $60 \to 69.7$ | $39.5 \to 49.5$ | $38.2 \to 48.2$ | $37.8 \to 47.7$ |
+| **🔴 🚫 Borderline Infeasible** | $69.7 \to 79.4$ | $49.5 \to 59.5$ | $48.2 \to 58.2$ | $47.7 \to 57.7$ |
+| **🔴 🚫 Infeasible** | $79.4 \to 256$ | $59.5 \to 256$ | $58.2 \to 256$ | $57.7 \to 256$ |
## 4. References
@@ -1510,7 +1489,13 @@ The cost difference between the most expensive scenario (Owl Survey) and the che
- [Forking the RANDAO: Manipulating Ethereum's Distributed Randomness Beacon](https://eprint.iacr.org/2025/037)
- [Security of Proof-of-Stake Blockchains](https://search.worldcat.org/title/1336590866)
+- [AWS EC2 Pricing Page Detailed Instance Pricing](https://aws.amazon.com/ec2/pricing/)
+- [Azure Virtual Machines Pricing Calculator Detailed VM Costs](https://azure.microsoft.com/en-us/pricing/calculator/)
+- [Google Compute Engine Pricing Detailed Compute Pricing](https://cloud.google.com/compute/pricing)
+- [iRender Pricing Information Competitive Cloud Rates](https://www.irender.com/pricing)
+
## 5. Copyright
This CIP is licensed under [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0).
+READ
\ No newline at end of file
diff --git a/CPS-0021/CPD/graph/scenario_cost-graph.py b/CPS-0021/CPD/graph/scenario_cost-graph.py
index cb5a6bf458..a4113c5f6b 100644
--- a/CPS-0021/CPD/graph/scenario_cost-graph.py
+++ b/CPS-0021/CPD/graph/scenario_cost-graph.py
@@ -10,93 +10,125 @@
cost_per_cpu_hour = 0.01 # $0.01 per CPU-hour
# Compute w_O in seconds for each rho
-w_O = 20 * (2 * rho - 1) # w_O = (2 * rho - 1) / f, f = 0.05
+w_O = 20 * (2 * rho - 1) # w_O = 20 * (2 * rho - 1)
w_O_hours = w_O / 3600 # Convert to hours for cost calculation
-# Define N_CPU functions for each scenario based on the developed formulas
-def ant_glance(rho):
- return 5e-10 * 2**(rho - 1) + 1.8e-11 * 2**(rho - 1)
+# Define N_CPU functions for Praos scenarios
+def ant_glance_praos(rho):
+ return 5e-10 * 2**(rho - 2)
-def ant_patrol(rho):
- return 5e-10 * 2**(rho - 1) + 2.16e-9 * 2**(rho - 1)
+def ant_patrol_praos(rho):
+ return 5e-10 * 2**(rho - 1) + 2.16e-2 * 2**(rho - 1) / rho
-def owl_stare(rho):
- return 5e-10 * 2**(rho - 1) + 1.8e-11 * 2**(rho - 1) + 5e-2 * 2**(rho - 1) / rho
+def owl_stare_praos(rho):
+ return 5e-10 * 2**(rho - 2) + 5e-2 * 2**(rho - 1) / rho
-def owl_survey(rho):
- return 5e-10 * 2**(rho - 1) + 2.16e-9 * 2**(rho - 1) + 5e-2 * 2**(rho - 1) / rho
+def owl_survey_praos(rho):
+ return 5e-10 * 2**(rho - 2) + 7.16e-2 * 2**(rho - 1) / rho
-# Compute N_CPU for each scenario
-n_cpu_ant_glance = ant_glance(rho)
-n_cpu_ant_patrol = ant_patrol(rho)
-n_cpu_owl_stare = owl_stare(rho)
-n_cpu_owl_survey = owl_survey(rho)
+# Compute N_CPU for all Praos scenarios
+n_cpu_ant_glance_praos = ant_glance_praos(rho)
+n_cpu_ant_patrol_praos = ant_patrol_praos(rho)
+n_cpu_owl_stare_praos = owl_stare_praos(rho)
+n_cpu_owl_survey_praos = owl_survey_praos(rho)
-# Compute cost in USD for each scenario
-cost_ant_glance = n_cpu_ant_glance * cost_per_cpu_hour * w_O_hours
-cost_ant_patrol = n_cpu_ant_patrol * cost_per_cpu_hour * w_O_hours
-cost_owl_stare = n_cpu_owl_stare * cost_per_cpu_hour * w_O_hours
-cost_owl_survey = n_cpu_owl_survey * cost_per_cpu_hour * w_O_hours
+# Compute cost in USD for all Praos scenarios
+cost_ant_glance_praos = n_cpu_ant_glance_praos * cost_per_cpu_hour * w_O_hours
+cost_ant_patrol_praos = n_cpu_ant_patrol_praos * cost_per_cpu_hour * w_O_hours
+cost_owl_stare_praos = n_cpu_owl_stare_praos * cost_per_cpu_hour * w_O_hours
+cost_owl_survey_praos = n_cpu_owl_survey_praos * cost_per_cpu_hour * w_O_hours
-# Calculate log10(Cost) for each scenario, adding a small epsilon to avoid log of zero
+# Calculate log10(Cost) for all scenarios, adding a small epsilon to avoid log of zero
epsilon = 1e-100 # Small positive value to prevent log(0)
-log_cost_ant_glance = np.log10(np.maximum(cost_ant_glance, epsilon))
-log_cost_ant_patrol = np.log10(np.maximum(cost_ant_patrol, epsilon))
-log_cost_owl_stare = np.log10(np.maximum(cost_owl_stare, epsilon))
-log_cost_owl_survey = np.log10(np.maximum(cost_owl_survey, epsilon))
+log_cost_ant_glance_praos = np.log10(np.maximum(cost_ant_glance_praos, epsilon))
+log_cost_ant_patrol_praos = np.log10(np.maximum(cost_ant_patrol_praos, epsilon))
+log_cost_owl_stare_praos = np.log10(np.maximum(cost_owl_stare_praos, epsilon))
+log_cost_owl_survey_praos = np.log10(np.maximum(cost_owl_survey_praos, epsilon))
# Create the plot with improved aesthetics
plt.figure(figsize=(12, 7))
-plt.plot(rho, log_cost_ant_glance, label='Ant Glance', color='blue', linewidth=2)
-plt.plot(rho, log_cost_ant_patrol, label='Ant Patrol', color='orange', linewidth=2)
-plt.plot(rho, log_cost_owl_stare, label='Owl Stare', color='green', linewidth=2)
-plt.plot(rho, log_cost_owl_survey, label='Owl Survey', color='red', linewidth=2)
+# Plot Praos scenarios with solid lines
+plt.plot(rho, log_cost_ant_glance_praos, label='Ant Glance Praos', color='blue', linewidth=2)
+plt.plot(rho, log_cost_ant_patrol_praos, label='Ant Patrol Praos', color='orange', linewidth=2)
+plt.plot(rho, log_cost_owl_stare_praos, label='Owl Stare Praos', color='green', linewidth=2)
+plt.plot(rho, log_cost_owl_survey_praos, label='Owl Survey Praos', color='red', linewidth=2)
# Add feasibility threshold layers as horizontal spans based on log10(Cost USD)
-plt.axhspan(-10, 2, color='green', alpha=0.1) # Trivial (< $100)
-plt.axhspan(2, 6, color='yellow', alpha=0.1) # Feasible ($10,000 to $1M)
-plt.axhspan(6, 9, color='#FFA07A', alpha=0.1) # Possible ($1M to $1B) - Light salmon
-plt.axhspan(9, 12, color='#FF6347', alpha=0.1) # Borderline Infeasible ($1B to $1T) - Tomato
-plt.axhspan(12, 90, color='red', alpha=0.1) # Infeasible (> $1T) - Red
+plt.axhspan(-10, 4, color='green', alpha=0.1, label='Trivial') # Trivial (< $10,000)
+plt.axhspan(4, 6, color='yellow', alpha=0.1, label='Feasible') # Feasible ($10,000 to $1M)
+plt.axhspan(6, 9, color='#FFA07A', alpha=0.1, label='Possible') # Possible ($1M to $1B) - Light salmon
+plt.axhspan(9, 12, color='#FF6347', alpha=0.1, label='Borderline Infeasible') # Borderline Infeasible ($1B to $1T) - Tomato
+plt.axhspan(12, 90, color='red', alpha=0.1, label='Infeasible') # Infeasible (> $1T) - Red
# Add labels and title with larger font
plt.xlabel('$\\rho$ (Grinding Depth)', fontsize=14)
plt.ylabel('$\\log_{10}(\\text{Cost (USD)})$', fontsize=14)
-plt.title('Cost of Grinding Attacks Across Scenarios with Feasibility Thresholds', fontsize=16)
+plt.title('Cost of Grinding Attacks Across Praos Scenarios with Feasibility Thresholds', fontsize=16)
plt.grid(True, linestyle='--', alpha=0.7)
# Set axis limits to ensure full range is visible
plt.xlim(0, 256) # X-axis from 0 to 256
-# Compute y_max by taking the maximum of valid log cost values
+# Compute y_max considering all Praos scenarios
valid_log_costs = np.concatenate([
- log_cost_ant_glance[np.isfinite(log_cost_ant_glance)],
- log_cost_ant_patrol[np.isfinite(log_cost_ant_patrol)],
- log_cost_owl_stare[np.isfinite(log_cost_owl_stare)],
- log_cost_owl_survey[np.isfinite(log_cost_owl_survey)]
+ log_cost_ant_glance_praos[np.isfinite(log_cost_ant_glance_praos)],
+ log_cost_ant_patrol_praos[np.isfinite(log_cost_ant_patrol_praos)],
+ log_cost_owl_stare_praos[np.isfinite(log_cost_owl_stare_praos)],
+ log_cost_owl_survey_praos[np.isfinite(log_cost_owl_survey_praos)]
])
-y_max = np.max(valid_log_costs) + 5 if valid_log_costs.size > 0 else 90 # Fallback to 90 if no valid values
-plt.ylim(-5, y_max) # Y-axis starts at -5 to match the range of data
-
-# Add annotation for the delta at rho = 50 (where curves are more separated)
-rho_idx = np.argmin(np.abs(rho - 50)) # Index closest to rho = 50
-delta_log_cost = log_cost_owl_survey[rho_idx] - log_cost_ant_glance[rho_idx]
-mid_y = log_cost_owl_survey[rho_idx] - (delta_log_cost / 2) + 0.5 # Position slightly above mid-point
+y_max = np.max(valid_log_costs) + 5 if valid_log_costs.size > 0 else 90
+plt.ylim(-5, y_max) # Y-axis starts at -5
+
+# Function to find crossing points and annotate
+def annotate_crossings(log_costs, color, threshold, position='above'):
+ # Find indices where the curve crosses the threshold
+ indices = np.where((log_costs[:-1] < threshold) & (log_costs[1:] >= threshold))[0]
+ if len(indices) > 0:
+ idx = indices[0]
+ rho_val = rho[idx]
+ plt.scatter(rho_val, threshold, color=color, marker='o', s=50, zorder=5)
+ # Position above or below based on the curve
+ if position == 'below':
+ plt.annotate(f'{rho_val:.1f}',
+ xy=(rho_val, threshold),
+ xytext=(rho_val + 1.1, threshold - 0.4),
+ fontsize=8, color=color)
+ elif position == 'green':
+ plt.annotate(f'{rho_val:.1f}',
+ xy=(rho_val, threshold),
+ xytext=(rho_val - 0.6, threshold - 0.9),
+ fontsize=8, color=color)
+ else:
+ plt.annotate(f'{rho_val:.1f}',
+ xy=(rho_val, threshold),
+ xytext=(rho_val - 1, threshold + 0.5),
+ fontsize=8, color=color)
+
+# Annotate crossings for Praos curves
+thresholds = [
+ (4, "Trivial to Feasible"),
+ (6, "Feasible to Possible"),
+ (9, "Possible to Borderline"),
+ (12, "Borderline to Infeasible")
+]
-# Draw a thinner double-headed arrow in purple with smaller arrowheads
-plt.annotate('', xy=(50, log_cost_owl_survey[rho_idx]), xytext=(50, log_cost_ant_glance[rho_idx]),
- arrowprops=dict(arrowstyle='<->', color='purple', lw=1, shrinkA=0, shrinkB=0))
+curves = [
+ (log_cost_ant_glance_praos, 'blue', 'above'),
+ (log_cost_ant_patrol_praos, 'orange', 'below'),
+ (log_cost_owl_stare_praos, 'green', 'green'),
+ (log_cost_owl_survey_praos, 'red', 'above')
+]
-# Add the delta label in purple, slightly offset to the right
-plt.text(53, mid_y-3.5, f'$\\Delta \\log_{{10}}(\\text{{Cost (USD)}}) \\approx {delta_log_cost:.1f}$',
- fontsize=12, color='purple', bbox=dict(facecolor='white', alpha=0.8, edgecolor='none'),
- verticalalignment='center')
+# Annotate crossings
+for threshold, threshold_name in thresholds:
+ for log_costs, color, position in curves:
+ annotate_crossings(log_costs, color, threshold, position)
-# Create a custom legend with all labels, placed at bottom right
+# Create a custom legend with Praos labels and feasibility thresholds
legend_elements = [
- plt.Line2D([0], [0], color='blue', lw=2, label='Ant Glance'),
- plt.Line2D([0], [0], color='orange', lw=2, label='Ant Patrol'),
- plt.Line2D([0], [0], color='green', lw=2, label='Owl Stare'),
- plt.Line2D([0], [0], color='red', lw=2, label='Owl Survey'),
+ plt.Line2D([0], [0], color='blue', lw=2, label='Ant Glance Praos'),
+ plt.Line2D([0], [0], color='orange', lw=2, label='Ant Patrol Praos'),
+ plt.Line2D([0], [0], color='green', lw=2, label='Owl Stare Praos'),
+ plt.Line2D([0], [0], color='red', lw=2, label='Owl Survey Praos'),
Patch(facecolor='green', alpha=0.1, label='Trivial'),
Patch(facecolor='yellow', alpha=0.1, label='Feasible'),
Patch(facecolor='#FFA07A', alpha=0.1, label='Possible'),
@@ -106,9 +138,9 @@ def owl_survey(rho):
plt.legend(handles=legend_elements, fontsize=10, loc='lower right',
bbox_to_anchor=(1, 0), ncol=2, handletextpad=0.5, columnspacing=1.5)
-# Adjust layout to prevent overlap, with manual padding
+# Adjust layout to prevent overlap
plt.subplots_adjust(left=0.1, right=0.95, top=0.9, bottom=0.2)
-# Save the plot as an image with higher resolution
-plt.savefig('grinding_depth_scenarios_cost_with_feasibility_layers_gradient.png', dpi=300, bbox_inches='tight')
+# Save the plot
+plt.savefig('grinding_depth_scenarios_cost_praos_annotated.png', dpi=300, bbox_inches='tight')
plt.show()
\ No newline at end of file
diff --git a/CPS-0021/CPD/graph/scenario_cpu_graph.py b/CPS-0021/CPD/graph/scenario_cpu_graph.py
index 0406e772d9..393dbdfc24 100644
--- a/CPS-0021/CPD/graph/scenario_cpu_graph.py
+++ b/CPS-0021/CPD/graph/scenario_cpu_graph.py
@@ -4,18 +4,18 @@
# Define the range for rho (Grinding Depth), starting at 0.1 to avoid division by zero
rho = np.linspace(0.1, 256, 1000) # 1000 points for smooth curve
-# Define N_CPU functions for each scenario based on the developed formulas
+# Define N_CPU functions for each scenario based on the updated formulas
def ant_glance(rho):
- return 5e-10 * 2**(rho - 1) + 1.8e-11 * 2**(rho - 1)
+ return 5e-10 * 2**(rho - 2)
def ant_patrol(rho):
- return 5e-10 * 2**(rho - 1) + 2.16e-9 * 2**(rho - 1)
+ return 5e-10 * 2**(rho - 2) + 2.16e-2 * 2**(rho - 1) / rho
def owl_stare(rho):
- return 5e-10 * 2**(rho - 1) + 1.8e-11 * 2**(rho - 1) + 5e-2 * 2**(rho - 1) / rho
+ return 5e-10 * 2**(rho - 2) + 5e-2 * 2**(rho - 1) / rho
def owl_survey(rho):
- return 5e-10 * 2**(rho - 1) + 2.16e-9 * 2**(rho - 1) + 5e-2 * 2**(rho - 1) / rho
+ return 5e-10 * 2**(rho - 2) + 7.16e-2 * 2**(rho - 1) / rho
# Calculate log10(N_CPU) for each scenario
log_ant_glance = np.log10(ant_glance(rho))
@@ -55,5 +55,5 @@ def owl_survey(rho):
plt.tight_layout()
# Save the plot as an image with higher resolution
-plt.savefig('grinding_depth_scenarios_with_delta.png', dpi=300)
+plt.savefig('grinding_depth_scenarios_with_delta_updated.png', dpi=300)
plt.show()
\ No newline at end of file
diff --git a/CPS-0021/CPD/image/grinding-depth-vs-NCPU.png b/CPS-0021/CPD/image/grinding-depth-vs-NCPU.png
index 8eefc5ea5e..2bcced23c8 100644
Binary files a/CPS-0021/CPD/image/grinding-depth-vs-NCPU.png and b/CPS-0021/CPD/image/grinding-depth-vs-NCPU.png differ
diff --git a/CPS-0021/CPD/image/grinding_depth_scenarios_cost_with_feasibility_layers_gradient.png b/CPS-0021/CPD/image/grinding_depth_scenarios_cost_with_feasibility_layers_gradient.png
index 867033d4fb..6ac3dab41a 100644
Binary files a/CPS-0021/CPD/image/grinding_depth_scenarios_cost_with_feasibility_layers_gradient.png and b/CPS-0021/CPD/image/grinding_depth_scenarios_cost_with_feasibility_layers_gradient.png differ
diff --git a/CPS-0021/README.md b/CPS-0021/README.md
index 65c6b30824..03d5419b37 100644
--- a/CPS-0021/README.md
+++ b/CPS-0021/README.md
@@ -6,8 +6,8 @@ Status: Open
Authors:
- Nicolas Henin
- Raphael Toledo
- - Peter Gaži
-Proposed Solutions: []
+Proposed Solutions:
+ ["CIP-0161 : Ouroboros Phalanx - Breaking Grinding Incentives"]
Discussions:
- https://github.com/cardano-foundation/CIPs/pull/1009
Created: 2025-10-03
@@ -33,7 +33,7 @@ This **Cardano Problem Statement (CPS)** 📜 builds upon the foundational work
### Summary of Findings
-This **[**CPD**](./CPD/README.md)** examines the *Randomness Generation Sub-Protocol* within the *Ouroboros framework* ⚙️, highlighting its vulnerabilities and their implications for *Cardano’s* **security** 🔒. Key insights include:
+This **[**CPD**](./CPD/README.md)** examines the *Randomness Generation Sub-Protocol* within the *Ouroboros Praos* ⚙️, highlighting its vulnerabilities and their implications for *Cardano’s* **security** 🔒. Key insights include:
- **Randomness Vulnerability**: *Ouroboros Praos* employs **VRFs** for randomness generation, but this approach is susceptible to *grinding attacks*, where adversaries manipulate outcomes to influence **leader election**, threatening Cardano’s **fairness** ⚖️ and **integrity**.
- **Attack Likelihood**: Attacks become significantly more feasible when an adversary controls **over 20% of the total stake** (approximately **4.36 billion ADA**, as of March 2025), while smaller stakes (e.g., **5%**) make such attempts highly unlikely over extended periods.
@@ -44,15 +44,22 @@ This **[**CPD**](./CPD/README.md)** examines the *Randomness Generation Sub-Prot
- The intensity of these attacks scales with stake: the more stake an adversary holds, the greater their influence over **leader election**, amplifying their ability to manipulate randomness. In a simplistic view, this can be likened to manipulating a $256$-bits nonce—a value $\rho$ ranging from $0$ to $256$— where higher stake progressively grants more control, potentially allowing full manipulation of the nonce at the upper limit.
- The wide cost disparity reflects how the complexity of the attack—such as the scope of the targeted time window and the depth of evaluation—drastically increases resource needs, acting as a natural deterrent for more ambitious manipulations.
-To illustrate the **Computational Feasibility**, the table below (sourced from the **CPD**, Section [**3. The Cost of Grinding: Adversarial Effort and Feasibility**](./CPD/README.md#3-the-cost-of-grinding-adversarial-effort-and-feasibility)) maps attack feasibility across four scenarios—**Ant Glance**, **Ant Patrol**, **Owl Stare**, and **Owl Survey**—based on the nonce value $\rho$ (0 to 256 bits). Each scenario reflects different attack complexities, with feasibility shifting as computational and economic demands grow:
+To illustrate the **Computational Feasibility**, the graph below (sourced from the **CPD**, Section [**3. The Cost of Grinding: Adversarial Effort and Feasibility**](./CPD/README.md#3-the-cost-of-grinding-adversarial-effort-and-feasibility)) maps attack feasibility across four scenarios—**Ant Glance**, **Ant Patrol**, **Owl Stare**, and **Owl Survey**—based on the nonce value $\rho$ (0 to 256 bits). Each scenario reflects different attack complexities, with feasibility shifting as computational and economic demands grow:
+
+
+

+
+
+The table below delineates the **$\rho$ values** at which each scenario transitions across feasibility categories, illustrating the computational and economic thresholds:
+
+| **Feasibility Category** | **🔵 Ant Glance** | **🟠 Ant Patrol** | **🟢 Owl Stare** | **🔴 Owl Survey** |
+|--------------------------------------------|---------------------|---------------------|--------------------|--------------------|
+| **🟢 🌱 Trivial for Any Adversary** | $0 \to 53.6$ | $0 \to 32.9$ | $0 \to 31.6$ | $0 \to 31.1$ |
+| **🟡 💰 Feasible with Standard Resources** | $53.6 \to 60$ | $32.9 \to 39.5$ | $31.6 \to 38.3$ | $31.1 \to 37.8$ |
+| **🟠 🏭 Large-Scale Infrastructure Required** | $60 \to 69.7$ | $39.5 \to 49.5$ | $38.2 \to 48.2$ | $37.8 \to 47.7$ |
+| **🔴 🚫 Borderline Infeasible** | $69.7 \to 79.4$ | $49.5 \to 59.5$ | $48.2 \to 58.2$ | $47.7 \to 57.7$ |
+| **🔴 🚫 Infeasible** | $79.4 \to 256$ | $59.5 \to 256$ | $58.2 \to 256$ | $57.7 \to 256$ |
-| **Feasibility Category** | **🔵 Ant Glance** | **🟠 Ant Patrol** | **🟢 Owl Stare** | **🔴 Owl Survey** |
-|-------------------------------------------|-------------------|-------------------|------------------|-------------------|
-| **🟢 🌱 Trivial for Any Adversary** | $[0, 49)$ | $[0, 47)$ | $[0, 27)$ | $[0, 27)$ |
-| **🟡 💰 Feasible with Standard Resources**| $[49, 59)$ | $[47, 57)$ | $[27, 34)$ | $[27, 34)$ |
-| **🟠 🏭 Possible with Large-Scale Infrastructure** | $[59, 73)$ | $[57, 71)$ | $[34, 48)$ | $[34, 48)$ |
-| **🔴 🚫 Borderline Infeasible** | $[73, 87)$ | $[71, 85)$ | $[48, 62)$ | $[48, 62)$ |
-| **🔴 🚫 Infeasible** | $[87, 256)$ | $[85, 256)$ | $[62, 256)$ | $[62, 256)$ |
**Context**: The scenarios represent increasing attack sophistication (e.g., *Ant Glance* is a quick, low-effort attack; *Owl Survey* is a comprehensive, resource-intensive one). As $\rho$ increases, so does the difficulty, shifting feasibility from trivial (e.g., a lone actor with a laptop) to infeasible (e.g., requiring nation-state-level resources).