diff --git a/pvm/src/machine_state.rs b/pvm/src/machine_state.rs index 5d29275dae..2595dbbb8d 100644 --- a/pvm/src/machine_state.rs +++ b/pvm/src/machine_state.rs @@ -1139,11 +1139,8 @@ mod tests { handle_system_call( machine, - &mut state.outbox, + &mut state.tezos, &mut state.system_state, - &mut state.status, - &mut state.reveal_request, - &state.level, StdoutDebugHooks, ) }); diff --git a/pvm/src/pvm.rs b/pvm/src/pvm.rs index 9f2d590d9e..667825ed2a 100644 --- a/pvm/src/pvm.rs +++ b/pvm/src/pvm.rs @@ -14,3 +14,4 @@ mod reveals; mod tezos; pub use common::*; +pub use tezos::Tezos; diff --git a/pvm/src/pvm/common.rs b/pvm/src/pvm/common.rs index 0e82da123c..0ad9fbfc61 100644 --- a/pvm/src/pvm/common.rs +++ b/pvm/src/pvm/common.rs @@ -55,12 +55,11 @@ use tezos_smart_rollup_constants::riscv::SbiError; use super::durable_storage::DurableStorage; use super::errors::OperationalError; use super::linux; -use super::outbox::Outbox; use super::outbox::OutboxProof; use super::outbox::OutboxProofError; use super::outbox::Output; use super::outbox::OutputInfo; -use super::reveals::RevealRequest; +use super::tezos::Tezos; use crate::default::ConstDefault; use crate::machine_state; use crate::machine_state::csregisters::CSRegister; @@ -126,13 +125,8 @@ pub struct Pvm { pub(crate) system_state: linux::SupervisorState, pub(crate) machine_state: machine_state::MachineState, pub(crate) durable_storage: DS, - pub(crate) outbox: Outbox, - pub(crate) reveal_request: RevealRequest, + pub(crate) tezos: Tezos, version: Atom, - pub(crate) tick: Atom, - pub(crate) message_counter: Atom, - pub(crate) level: Atom, M>, - pub(crate) status: Atom, } impl, DS: DurableStorage, M: Mode> Pvm { @@ -183,7 +177,7 @@ impl, DS: DurableStorage, M: Mode> Pvm // When the status is WaitingForReveal during evaluation, we know that // nothing has been returned by the rollup node and the reveal request // is invalid. - if let PvmStatus::WaitingForReveal = self.status.read() { + if let PvmStatus::WaitingForReveal = self.tezos.status.read() { self.provide_reveal_error_response(); return 1; } @@ -193,18 +187,15 @@ impl, DS: DurableStorage, M: Mode> Pvm .step_max_handle(step_bounds, |machine_state| { handle_system_call( machine_state, - &mut self.outbox, + &mut self.tezos, &mut self.system_state, - &mut self.status, - &mut self.reveal_request, - &self.level, &mut hooks, ) }) .steps; - let tick = self.tick.read().wrapping_add(steps as u64); - self.tick.write(tick); + let tick = self.tezos.tick.read().wrapping_add(steps as u64); + self.tezos.tick.write(tick); steps } @@ -232,7 +223,7 @@ impl, DS: DurableStorage, M: Mode> Pvm M: AtomMode + DataSpaceMode + VectorMode, { if !tezos::provide_input( - &mut self.status, + &mut self.tezos.status, &mut self.machine_state.core, level, counter, @@ -241,11 +232,11 @@ impl, DS: DurableStorage, M: Mode> Pvm return false; } - let tick = self.tick.read().wrapping_add(1u64); - self.tick.write(tick); + let tick = self.tezos.tick.read().wrapping_add(1u64); + self.tezos.tick.write(tick); - self.message_counter.write(counter as u64); - self.level.write(Some(level)); + self.tezos.message_counter.write(counter as u64); + self.tezos.level.write(Some(level)); true } @@ -256,15 +247,15 @@ impl, DS: DurableStorage, M: Mode> Pvm M: AtomMode + DataSpaceMode + VectorMode, { if !tezos::provide_reveal_response( - &mut self.status, + &mut self.tezos.status, &mut self.machine_state.core, reveal_data, ) { return false; } - let tick = self.tick.read().wrapping_add(1u64); - self.tick.write(tick); + let tick = self.tezos.tick.read().wrapping_add(1u64); + self.tezos.tick.write(tick); true } @@ -274,7 +265,7 @@ impl, DS: DurableStorage, M: Mode> Pvm where M: AtomMode, { - self.reveal_request.to_vec() + self.tezos.reveal_request.to_vec() } /// Provide a reveal error response to the PVM @@ -288,10 +279,10 @@ impl, DS: DurableStorage, M: Mode> Pvm .xregisters .write(a0, SbiError::InvalidParam as u64); - let tick = self.tick.read().wrapping_add(1u64); - self.tick.write(tick); + let tick = self.tezos.tick.read().wrapping_add(1u64); + self.tezos.tick.write(tick); - self.status.write(PvmStatus::Evaluating); + self.tezos.status.write(PvmStatus::Evaluating); } /// Get the current machine status. @@ -299,7 +290,7 @@ impl, DS: DurableStorage, M: Mode> Pvm where M: AtomMode, { - self.status.read() + self.tezos.status.read() } /// Construct an [`InputRequest`] based on the PVM's current status and level. @@ -307,16 +298,16 @@ impl, DS: DurableStorage, M: Mode> Pvm where M: AtomMode, { - match self.status.read() { + match self.tezos.status.read() { PvmStatus::Evaluating => InputRequest::NoInputRequired, PvmStatus::WaitingForReveal => { InputRequest::NeedsReveal(self.reveal_request().into_boxed_slice()) } PvmStatus::WaitingForInput => { - if let Some(level) = self.level.read() { + if let Some(level) = self.tezos.level.read() { InputRequest::FirstAfter { level, - counter: self.message_counter.read(), + counter: self.tezos.message_counter.read(), } } else { InputRequest::Initial @@ -334,13 +325,8 @@ impl, DS: DurableStorage, M: Mode> Pvm system_state: self.system_state.clone(), machine_state: self.machine_state.clone(), durable_storage: self.durable_storage.try_clone()?, - outbox: self.outbox.clone(), - reveal_request: self.reveal_request.clone(), + tezos: self.tezos.clone(), version: self.version.clone(), - tick: self.tick.clone(), - message_counter: self.message_counter.clone(), - level: self.level.clone(), - status: self.status.clone(), }) } @@ -354,13 +340,8 @@ impl, DS: DurableStorage, M: Mode> Pvm machine_state: self.machine_state.clone_state(), // TODO: RV-911: Does the durable storage need a `try_clone_state`? durable_storage: self.durable_storage.try_clone()?, - outbox: self.outbox.clone_state(), - reveal_request: self.reveal_request.clone_state(), + tezos: self.tezos.clone_state(), version: self.version.clone_state(), - tick: self.tick.clone_state(), - message_counter: self.message_counter.clone_state(), - level: self.level.clone_state(), - status: self.status.clone_state(), }) } } @@ -390,7 +371,7 @@ where &self, output_info: OutputInfo, ) -> Result { - let proof_output = self.get_outbox_message(output_info)?; + let proof_output = self.tezos.get_outbox_message(output_info)?; let proof = MerkleProof::from_foldable(self); Ok(OutboxProof { @@ -409,16 +390,11 @@ where { fn default() -> Self { Self { + system_state: linux::SupervisorState::default(), machine_state: machine_state::MachineState::default(), durable_storage: DS::default(), - outbox: Outbox::::default(), - reveal_request: RevealRequest::default(), - system_state: linux::SupervisorState::default(), + tezos: Tezos::default(), version: Atom::new(INITIAL_VERSION), - status: Atom::default(), - tick: Atom::default(), - message_counter: Atom::default(), - level: Atom::default(), } } } @@ -430,16 +406,11 @@ impl<'normal, MC: MemoryConfig, PC: PageCache, DS: Provable<'normal> fn start_proof(&'normal self) -> Self::Prover { Pvm { + system_state: self.system_state.start_proof(), machine_state: self.machine_state.start_proof(), durable_storage: self.durable_storage.start_proof(), - outbox: self.outbox.start_proof(), - reveal_request: self.reveal_request.start_proof(), - system_state: self.system_state.start_proof(), + tezos: self.tezos.start_proof(), version: self.version.start_proof(), - tick: self.tick.start_proof(), - message_counter: self.message_counter.start_proof(), - level: self.level.start_proof(), - status: self.status.start_proof(), } } } @@ -452,25 +423,17 @@ where F: Fold, machine_state::MachineState: Foldable, DS: Foldable, - Outbox: Foldable, - RevealRequest: Foldable, + Tezos: Foldable, linux::SupervisorState: Foldable, - Atom: Foldable, - Atom, M>: Foldable, Atom: Foldable, { fn fold(&self, builder: F) -> F::Folded { let mut builder = builder.into_node_fold(); + builder.add(&self.system_state); builder.add(&self.machine_state); builder.add(&self.durable_storage); - builder.add(&self.outbox); - builder.add(&self.reveal_request); - builder.add(&self.system_state); + builder.add(&self.tezos); builder.add(&self.version); - builder.add(&self.tick); - builder.add(&self.message_counter); - builder.add(&self.level); - builder.add(&self.status); builder.done() } } @@ -483,28 +446,18 @@ where fn unfold(src: U) -> Result { let mut src = src.into_node()?; + let system_state = src.next_branch()?; let machine_state = src.next_branch()?; let durable_storage = src.next_branch()?; - let outbox = src.next_branch()?; - let reveal_request = src.next_branch()?; - let system_state = src.next_branch()?; + let tezos = src.next_branch()?; let version = src.next_branch()?; - let tick = src.next_branch()?; - let message_counter = src.next_branch()?; - let level = src.next_branch()?; - let status = src.next_branch()?; src.done(Self { + system_state, machine_state, durable_storage, - outbox, - reveal_request, - system_state, + tezos, version, - tick, - message_counter, - level, - status, }) } } @@ -513,28 +466,18 @@ impl FromProof for Pvm(proof: D) -> SuspendedResult { let proof = proof.into_node()?; + let (proof, system_state) = proof.next_branch()?; let (proof, machine_state) = proof.next_branch()?; let (proof, durable_storage) = proof.next_branch()?; - let (proof, outbox) = proof.next_branch()?; - let (proof, reveal_request) = proof.next_branch()?; - let (proof, system_state) = proof.next_branch()?; + let (proof, tezos) = proof.next_branch()?; let (proof, version) = proof.next_branch()?; - let (proof, tick) = proof.next_branch()?; - let (proof, message_counter) = proof.next_branch()?; - let (proof, level) = proof.next_branch()?; - let (proof, status) = proof.next_branch()?; proof.done(Self { + system_state, machine_state, durable_storage, - outbox, - reveal_request, - system_state, + tezos, version, - tick, - message_counter, - level, - status, }) } } @@ -547,16 +490,11 @@ where M: EncodeAtomMode + EncodeDataSpaceMode + EncodeVectorMode, { fn encode(&self, encoder: &mut E) -> Result<(), EncodeError> { + self.system_state.encode(encoder)?; self.machine_state.encode(encoder)?; self.durable_storage.encode(encoder)?; - self.outbox.encode(encoder)?; - self.reveal_request.encode(encoder)?; - self.system_state.encode(encoder)?; + self.tezos.encode(encoder)?; self.version.encode(encoder)?; - self.tick.encode(encoder)?; - self.message_counter.encode(encoder)?; - self.level.encode(encoder)?; - self.status.encode(encoder)?; Ok(()) } } @@ -570,16 +508,11 @@ where { fn decode>(decoder: &mut D) -> Result { Ok(Self { + system_state: Decode::decode(decoder)?, machine_state: Decode::decode(decoder)?, durable_storage: Decode::decode(decoder)?, - outbox: Decode::decode(decoder)?, - reveal_request: Decode::decode(decoder)?, - system_state: Decode::decode(decoder)?, + tezos: Decode::decode(decoder)?, version: Decode::decode(decoder)?, - tick: Decode::decode(decoder)?, - message_counter: Decode::decode(decoder)?, - level: Decode::decode(decoder)?, - status: Decode::decode(decoder)?, }) } } @@ -608,7 +541,8 @@ impl Pvm { catch_not_found(move || { let (pvm, _): (Self, _) = proof_tree::deserialise(proof_tree)?; - pvm.get_outbox_message(outbox_proof.info) + pvm.tezos + .get_outbox_message(outbox_proof.info) .map_err(ProofVerificationFailure::from) })? } @@ -631,11 +565,8 @@ pub enum InputRequest { /// Handle a system call in the PVM. pub(crate) fn handle_system_call( machine: &mut machine_state::MachineState, - outbox: &mut Outbox, + tezos_state: &mut Tezos, system_state: &mut linux::SupervisorState, - status: &mut Atom, - reveal_request: &mut RevealRequest, - level: &Atom, M>, hooks: impl PvmHooks, ) -> ControlFlow<()> where @@ -644,9 +575,9 @@ where M: AtomMode + DataSpaceMode + VectorMode, { system_state.handle_system_call(machine, hooks, |core| { - tezos::handle_tezos(core, outbox, status, reveal_request, level); + tezos::handle_tezos(core, tezos_state); - if status.read() == PvmStatus::Evaluating { + if tezos_state.status.read() == PvmStatus::Evaluating { ControlFlow::Continue(()) } else { ControlFlow::Break(()) @@ -694,11 +625,8 @@ mod tests { { handle_system_call( &mut self.machine_state, - &mut self.outbox, + &mut self.tezos, &mut self.system_state, - &mut self.status, - &mut self.reveal_request, - &self.level, hooks, ) .is_continue() @@ -900,7 +828,7 @@ mod tests { assert_eq!(pvm.status(), PvmStatus::WaitingForReveal); // After ECALL the reveal_request field should be set correctly - assert_eq!(pvm.reveal_request.to_vec(), buffer); + assert_eq!(pvm.tezos.reveal_request.to_vec(), buffer); const REVEAL_DATA_SIZE: usize = 1000; let reveal_data = [1u8; REVEAL_DATA_SIZE]; @@ -972,7 +900,7 @@ mod tests { assert_eq!(pvm.status(), PvmStatus::WaitingForReveal); // After ECALL the reveal_request field should be set correctly - assert_eq!(pvm.reveal_request.to_vec(), buffer); + assert_eq!(pvm.tezos.reveal_request.to_vec(), buffer); const REVEAL_DATA_SIZE: usize = 1000; let reveal_data = [1u8; REVEAL_DATA_SIZE]; @@ -1011,11 +939,11 @@ mod tests { // Setup PVM let mut pvm = Pvm::::default(); - pvm.level.write(Some(level)); + pvm.tezos.level.write(Some(level)); // Write messages to the outbox at level `level` for message in &messages { - prop_assert!(pvm.outbox.write_message(message.clone(), level).is_ok()); + prop_assert!(pvm.tezos.outbox.write_message(message.clone(), level).is_ok()); } // Produce and verify an outbox proof for every message written in the outbox diff --git a/pvm/src/pvm/node_pvm.rs b/pvm/src/pvm/node_pvm.rs index ef9a989cec..344014c237 100644 --- a/pvm/src/pvm/node_pvm.rs +++ b/pvm/src/pvm/node_pvm.rs @@ -109,21 +109,21 @@ impl, DS: DurableStorage> NodePvm where M: AtomMode, { - self.with_backend(|pvm| pvm.tick.read()) + self.with_backend(|pvm| pvm.tezos.tick.read()) } pub fn get_current_level(&self) -> Option where M: AtomMode, { - self.with_backend(|pvm| pvm.level.read()) + self.with_backend(|pvm| pvm.tezos.level.read()) } pub fn get_message_counter(&self) -> u64 where M: AtomMode, { - self.with_backend(|pvm| pvm.message_counter.read()) + self.with_backend(|pvm| pvm.tezos.message_counter.read()) } /// Get the reveal request from the PVM state @@ -250,7 +250,7 @@ impl, DS: DurableStorage> NodePv /// Get the outbox messages for the specified level pub fn get_outbox_messages(&self, level: u32) -> Option> { - self.with_backend(|pvm| pvm.get_outbox_messages(level)) + self.with_backend(|pvm| pvm.tezos.get_outbox_messages(level)) } } diff --git a/pvm/src/pvm/outbox.rs b/pvm/src/pvm/outbox.rs index 9d9d4a0804..8007456bf3 100644 --- a/pvm/src/pvm/outbox.rs +++ b/pvm/src/pvm/outbox.rs @@ -66,12 +66,10 @@ pub use self::output::OutboxMessageError; pub use self::output::Output; pub use self::output::OutputInfo; use super::Pvm; -use super::durable_storage::DurableStorage; +use super::Tezos; use super::durable_storage::DurableStorageDummy; use super::node_pvm::NodePvmMemConfig; -use crate::machine_state::memory::MemoryConfig; use crate::machine_state::page_cache::EmptyPageCache; -use crate::machine_state::page_cache::PageCache; /// Small outbox size for testing pub const TEST_OUTBOX_SIZE: usize = 16; @@ -271,7 +269,7 @@ impl Decode for Outbox { } } -impl, DS: DurableStorage, M: Mode> Pvm { +impl Tezos { /// Get the outbox message at the given level and index. This is the state transition /// captured in outbox proofs. pub fn get_outbox_message(&self, info: OutputInfo) -> Result @@ -309,9 +307,7 @@ impl, DS: DurableStorage, M: Mode> Pvm } } -impl, DS: DurableStorage> - Pvm -{ +impl Tezos { /// Retrieves the outbox messages for a given level. Returns None if the level is /// not in the outbox pub(crate) fn get_outbox_messages(&self, level: u32) -> Option> { @@ -758,15 +754,15 @@ pub(crate) mod tests { // Getting a message from an uninitialised outbox fails let info = OutputInfo { level: 0, index: 0 }; - let output = pvm.get_outbox_message(info); + let output = pvm.tezos.get_outbox_message(info); prop_assert_eq!(output, Err(OutboxProofError::LevelNotFound { level: info.level })); - prop_assert!(pvm.get_outbox_messages(0).is_none()); + prop_assert!(pvm.tezos.get_outbox_messages(0).is_none()); - pvm.level.write(Some(write_level)); + pvm.tezos.level.write(Some(write_level)); // Write messages at write_level for message in &messages { - prop_assert!(pvm.outbox.write_message(message.clone(), write_level).is_ok()); + prop_assert!(pvm.tezos.outbox.write_message(message.clone(), write_level).is_ok()); } // Getting a message at a future level fails @@ -774,9 +770,9 @@ pub(crate) mod tests { level: write_level + 1, index: 0, }; - let output = pvm.get_outbox_message(info); + let output = pvm.tezos.get_outbox_message(info); prop_assert_eq!(output, Err(OutboxProofError::LevelNotFound { level: info.level })); - prop_assert!(pvm.get_outbox_messages(write_level + 1).is_none()); + prop_assert!(pvm.tezos.get_outbox_messages(write_level + 1).is_none()); }) } @@ -792,22 +788,22 @@ pub(crate) mod tests { let mut pvm = Pvm::::default(); - pvm.level.write(Some(write_level)); + pvm.tezos.level.write(Some(write_level)); // Write messages at write_level for message in &messages { - prop_assert!(pvm.outbox.write_message(message.clone(), write_level).is_ok()); + prop_assert!(pvm.tezos.outbox.write_message(message.clone(), write_level).is_ok()); } // Read messages back at write_level - let all_outputs = pvm.get_outbox_messages(write_level).unwrap(); + let all_outputs = pvm.tezos.get_outbox_messages(write_level).unwrap(); prop_assert_eq!(all_outputs.len(), messages.len()); for (i, message) in messages.iter().enumerate() { let info = OutputInfo { level: write_level, index: i as u32, }; - let output = pvm.get_outbox_message(info).unwrap(); + let output = pvm.tezos.get_outbox_message(info).unwrap(); prop_assert_eq!(&output.message, message); prop_assert_eq!(output.info, info); prop_assert_eq!(&all_outputs[i].message, message); @@ -816,16 +812,16 @@ pub(crate) mod tests { // Also verify we can read with current_level up to write_level + TEST_OUTBOX_SIZE - 1 let future_level = write_level + (TEST_OUTBOX_SIZE as u32) - 1; - pvm.level.write(Some(future_level)); + pvm.tezos.level.write(Some(future_level)); - let all_outputs = pvm.get_outbox_messages(write_level).unwrap(); + let all_outputs = pvm.tezos.get_outbox_messages(write_level).unwrap(); prop_assert_eq!(all_outputs.len(), messages.len()); for (i, message) in messages.iter().enumerate() { let info = OutputInfo { level: write_level, index: i as u32, }; - let output = pvm.get_outbox_message(info).unwrap(); + let output = pvm.tezos.get_outbox_message(info).unwrap(); prop_assert_eq!(&output.message, message); prop_assert_eq!(&all_outputs[i].message, message); prop_assert_eq!(all_outputs[i].info, info); @@ -851,17 +847,17 @@ pub(crate) mod tests { // Write M messages at write_level for message in &first_messages { - prop_assert!(pvm.outbox.write_message(message.clone(), write_level).is_ok()); + prop_assert!(pvm.tezos.outbox.write_message(message.clone(), write_level).is_ok()); } // Write N messages at write_level + TEST_OUTBOX_SIZE (where N < M) let wrapped_level = write_level + TEST_OUTBOX_SIZE as u32; for message in &second_messages { - prop_assert!(pvm.outbox.write_message(message.clone(), wrapped_level).is_ok()); + prop_assert!(pvm.tezos.outbox.write_message(message.clone(), wrapped_level).is_ok()); } // Set up PVM level at the wrapped level - pvm.level.write(Some(wrapped_level)); + pvm.tezos.level.write(Some(wrapped_level)); // Reading at old level should fail for i in 0..m { @@ -869,20 +865,20 @@ pub(crate) mod tests { level: write_level, index: i as u32, }; - let output = pvm.get_outbox_message(info); + let output = pvm.tezos.get_outbox_message(info); prop_assert_eq!(output, Err(OutboxProofError::LevelNotFound { level: info.level })) } - prop_assert!(pvm.get_outbox_messages(write_level).is_none()); + prop_assert!(pvm.tezos.get_outbox_messages(write_level).is_none()); // Reading at wrapped level for indices 0..N should work - let all_outputs = pvm.get_outbox_messages(wrapped_level).unwrap(); + let all_outputs = pvm.tezos.get_outbox_messages(wrapped_level).unwrap(); prop_assert_eq!(all_outputs.len(), second_messages.len()); for (i, message) in second_messages.iter().enumerate() { let info = OutputInfo { level: wrapped_level, index: i as u32, }; - let output = pvm.get_outbox_message(info).unwrap(); + let output = pvm.tezos.get_outbox_message(info).unwrap(); prop_assert_eq!(&output.message, message); prop_assert_eq!(&all_outputs[i].message, message); prop_assert_eq!(all_outputs[i].info, info); @@ -894,7 +890,7 @@ pub(crate) mod tests { level: wrapped_level, index: i as u32, }; - let output = pvm.get_outbox_message(info); + let output = pvm.tezos.get_outbox_message(info); prop_assert_eq!(output, Err(OutboxProofError::MessageNotFound { info })); } }); diff --git a/pvm/src/pvm/tezos.rs b/pvm/src/pvm/tezos.rs index ce5a555dbc..7e2d268f73 100644 --- a/pvm/src/pvm/tezos.rs +++ b/pvm/src/pvm/tezos.rs @@ -7,6 +7,12 @@ use std::cmp::min; +use bincode::Decode; +use bincode::Encode; +use bincode::de::Decoder; +use bincode::enc::Encoder; +use bincode::error::DecodeError; +use bincode::error::EncodeError; use ed25519_dalek::Signature; use ed25519_dalek::Signer; use ed25519_dalek::SigningKey; @@ -14,7 +20,31 @@ use ed25519_dalek::VerifyingKey; use libsecp256k1::Message; use libsecp256k1::PublicKey; use libsecp256k1::Signature as SecpSig; +use octez_riscv_data::clone::CloneState; use octez_riscv_data::components::atom::Atom; +use octez_riscv_data::components::atom::CloneAtomMode; +use octez_riscv_data::components::atom::EncodeAtomMode; +use octez_riscv_data::components::data_space::DataSpaceMode; +use octez_riscv_data::components::vector::CloneVectorMode; +use octez_riscv_data::components::vector::EncodeVectorMode; +use octez_riscv_data::components::vector::VectorMode; +use octez_riscv_data::foldable::Fold; +use octez_riscv_data::foldable::Foldable; +use octez_riscv_data::foldable::NodeFold; +use octez_riscv_data::foldable::NodeUnfold; +use octez_riscv_data::foldable::Unfold; +use octez_riscv_data::foldable::UnfoldError; +use octez_riscv_data::foldable::Unfoldable; +use octez_riscv_data::merkle_proof::Deserialiser; +use octez_riscv_data::merkle_proof::DeserialiserNode; +use octez_riscv_data::merkle_proof::FromProof; +use octez_riscv_data::merkle_proof::SuspendedResult; +use octez_riscv_data::mode::Mode; +use octez_riscv_data::mode::Normal; +use octez_riscv_data::mode::Provable; +use octez_riscv_data::mode::Prove; +use octez_riscv_data::mode::Verify; +use perfect_derive::perfect_derive; use sha3::Digest; use sha3::Keccak256; use tezos_smart_rollup_constants::core::MAX_INPUT_MESSAGE_SIZE; @@ -35,8 +65,6 @@ use tezos_smart_rollup_constants::riscv::SbiError; pub const MAX_PVM_MEMORY_ACCESS: usize = 4096; use octez_riscv_data::components::atom::AtomMode; -use octez_riscv_data::components::data_space::DataSpaceMode; -use octez_riscv_data::components::vector::VectorMode; use super::PvmStatus; use super::outbox::Outbox; @@ -53,6 +81,151 @@ use crate::machine_state::registers::a2; use crate::machine_state::registers::a3; use crate::machine_state::registers::a6; +/// Tezos-specific fields of the PVM. +#[perfect_derive(Clone, PartialEq, Eq)] +pub struct Tezos { + pub(crate) outbox: Outbox, + pub(crate) reveal_request: RevealRequest, + pub(crate) tick: Atom, + pub(crate) message_counter: Atom, + pub(crate) level: Atom, M>, + pub(crate) status: Atom, +} + +impl Default for Tezos { + fn default() -> Self { + Self { + outbox: Outbox::::default(), + reveal_request: RevealRequest::default(), + tick: Atom::default(), + message_counter: Atom::default(), + level: Atom::default(), + status: Atom::default(), + } + } +} + +impl<'normal> Provable<'normal> for Tezos { + type Prover = Tezos>; + + fn start_proof(&'normal self) -> Self::Prover { + Tezos { + outbox: self.outbox.start_proof(), + reveal_request: self.reveal_request.start_proof(), + tick: self.tick.start_proof(), + message_counter: self.message_counter.start_proof(), + level: self.level.start_proof(), + status: self.status.start_proof(), + } + } +} + +impl CloneState for Tezos { + fn clone_state(&self) -> Self { + Self { + outbox: self.outbox.clone_state(), + reveal_request: self.reveal_request.clone_state(), + tick: self.tick.clone_state(), + message_counter: self.message_counter.clone_state(), + level: self.level.clone_state(), + status: self.status.clone_state(), + } + } +} + +impl Foldable for Tezos +where + M: Mode, + F: Fold, + Outbox: Foldable, + RevealRequest: Foldable, + Atom: Foldable, + Atom, M>: Foldable, + Atom: Foldable, +{ + fn fold(&self, builder: F) -> F::Folded { + let mut builder = builder.into_node_fold(); + + builder.add(&self.outbox); + builder.add(&self.reveal_request); + builder.add(&self.tick); + builder.add(&self.message_counter); + builder.add(&self.level); + builder.add(&self.status); + + builder.done() + } +} + +impl Unfoldable for Tezos { + fn unfold(src: U) -> Result { + let mut src = src.into_node()?; + + let outbox = src.next_branch()?; + let reveal_request = src.next_branch()?; + let tick = src.next_branch()?; + let message_counter = src.next_branch()?; + let level = src.next_branch()?; + let status = src.next_branch()?; + + src.done(Self { + outbox, + reveal_request, + tick, + message_counter, + level, + status, + }) + } +} + +impl FromProof for Tezos { + fn from_proof(proof: D) -> SuspendedResult { + let proof = proof.into_node()?; + + let (proof, outbox) = proof.next_branch()?; + let (proof, reveal_request) = proof.next_branch()?; + let (proof, tick) = proof.next_branch()?; + let (proof, message_counter) = proof.next_branch()?; + let (proof, level) = proof.next_branch()?; + let (proof, status) = proof.next_branch()?; + + proof.done(Self { + outbox, + reveal_request, + tick, + message_counter, + level, + status, + }) + } +} + +impl Encode for Tezos { + fn encode(&self, encoder: &mut E) -> Result<(), EncodeError> { + self.outbox.encode(encoder)?; + self.reveal_request.encode(encoder)?; + self.tick.encode(encoder)?; + self.message_counter.encode(encoder)?; + self.level.encode(encoder)?; + self.status.encode(encoder)?; + Ok(()) + } +} + +impl Decode for Tezos { + fn decode>(decoder: &mut D) -> Result { + Ok(Self { + outbox: Decode::decode(decoder)?, + reveal_request: Decode::decode(decoder)?, + tick: Decode::decode(decoder)?, + message_counter: Decode::decode(decoder)?, + level: Decode::decode(decoder)?, + status: Decode::decode(decoder)?, + }) + } +} + /// Write the SBI error code as the return value. #[inline] fn sbi_return_error(xregisters: &mut XRegisters, code: SbiError) { @@ -384,13 +557,8 @@ where } /// Handle a Tezos SBI call. -pub(super) fn handle_tezos( - machine: &mut MachineCoreState, - outbox: &mut Outbox, - status: &mut Atom, - reveal_request: &mut RevealRequest, - level: &Atom, M>, -) where +pub(super) fn handle_tezos(machine: &mut MachineCoreState, tezos: &mut Tezos) +where MC: MemoryConfig, M: AtomMode + DataSpaceMode + VectorMode, { @@ -400,14 +568,18 @@ pub(super) fn handle_tezos( let sbi_function = machine.hart.xregisters.read(a6); match sbi_function { - SBI_TEZOS_INBOX_NEXT => handle_tezos_inbox_next(status), - SBI_TEZOS_WRITE_OUTPUT => handle_tezos_write_output(machine, outbox, level), + SBI_TEZOS_INBOX_NEXT => handle_tezos_inbox_next(&mut tezos.status), + SBI_TEZOS_WRITE_OUTPUT => { + handle_tezos_write_output(machine, &mut tezos.outbox, &tezos.level) + } SBI_TEZOS_ED25519_SIGN => sbi_wrap(machine, handle_tezos_ed25519_sign), SBI_TEZOS_ED25519_VERIFY => sbi_wrap(machine, handle_tezos_ed25519_verify), SBI_TEZOS_BLAKE2B_HASH256 => sbi_wrap(machine, handle_tezos_blake2b_hash256), SBI_TEZOS_SECP256K1_VERIFY => sbi_wrap(machine, handle_tezos_secp256k1_verify), SBI_TEZOS_KECCAK256_HASH => sbi_wrap(machine, handle_tezos_keccak256_hash), - SBI_TEZOS_REVEAL => handle_tezos_reveal(machine, reveal_request, status), + SBI_TEZOS_REVEAL => { + handle_tezos_reveal(machine, &mut tezos.reveal_request, &mut tezos.status) + } _ => handle_not_supported(&mut machine.hart.xregisters), } } diff --git a/pvm/src/stepper/pvm.rs b/pvm/src/stepper/pvm.rs index e30be499e6..bcdb625fee 100644 --- a/pvm/src/stepper/pvm.rs +++ b/pvm/src/stepper/pvm.rs @@ -469,7 +469,7 @@ impl< /// Get the current level of the PVM pub fn level(&self) -> Option { - self.pvm.level.read() + self.pvm.tezos.level.read() } } diff --git a/pvm/tests/expected/dummy-no-std/state_hash_final b/pvm/tests/expected/dummy-no-std/state_hash_final index 45979a1571..957645cb1e 100644 --- a/pvm/tests/expected/dummy-no-std/state_hash_final +++ b/pvm/tests/expected/dummy-no-std/state_hash_final @@ -1 +1 @@ -7e519f5fcd3015bf4bdd5cd2c7356a87c3ae08c6a47bde49787e36a8af17284c +acad3c75f33af7eb756bf1f78cc47328edca4139b4347576d413fa118754a397 diff --git a/pvm/tests/expected/dummy-no-std/state_hash_initial b/pvm/tests/expected/dummy-no-std/state_hash_initial index c07a5a09b7..d0d755583a 100644 --- a/pvm/tests/expected/dummy-no-std/state_hash_initial +++ b/pvm/tests/expected/dummy-no-std/state_hash_initial @@ -1 +1 @@ -5cd81454b65a0c3f9f5d02e00b053d799b5a2a5e48091e1023db49ff6d098ed2 +9fed829316e2fb7d4ed40abf83c61bbc9bd833dae877d94d4a26e31707b62a66 diff --git a/pvm/tests/expected/dummy/outbox_proof b/pvm/tests/expected/dummy/outbox_proof index 7fff4a695c..08afc53fe5 100644 --- a/pvm/tests/expected/dummy/outbox_proof +++ b/pvm/tests/expected/dummy/outbox_proof @@ -1 +1 @@ -12000000000000000002c8ba90a905a832581193b371397f9ecb4727534613be52751d0136bda84e644c02af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f32620000031000000000000000000002386920ed3667eedb00ae8dc34e0bc2e7a9fb2489e4848bdd8ae9e80d743770630256f94b36cf6da580c377c2bc735470751893e9ba1d00c1c6afac1253b87f7ca800000364000000000000000000000003001000000000000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101026c3812f50acc5d9f5273abcfeb969230b961e955512ecf4881166b3f4e3d6b54026c3812f50acc5d9f5273abcfeb969230b961e955512ecf4881166b3f4e3d6b54026c3812f50acc5d9f5273abcfeb969230b961e955512ecf4881166b3f4e3d6b5402c9f895d634d4993ed7d6d0e00f59b301f206e6ec71b0a123a204afa60c5209c602c9f895d634d4993ed7d6d0e00f59b301f206e6ec71b0a123a204afa60c5209c602c9f895d634d4993ed7d6d0e00f59b301f206e6ec71b0a123a204afa60c5209c602e099a652c72569e6b9c1c41e3dfba46775b55ae6caac1e890ad18fe0329b7d1c02e099a652c72569e6b9c1c41e3dfba46775b55ae6caac1e890ad18fe0329b7d1c02e099a652c72569e6b9c1c41e3dfba46775b55ae6caac1e890ad18fe0329b7d1c0235ef1c93c880148d5bb88b4eeb96cdddb7526acd07fec30660eec91e64b7b8af031200000002aacb3b28397d9a56765ef051b2caf639bdb600019c5c215b3b985a3bc9a880a702f625046a212d6b5f135c46224403dd09d25659d1d7949c89590f603d6a8128140255aa64035cafad9fbe715019033a1bce77c9e2565f605a561900153be699353d028d50b77f16d497ef3d0df6a6ed8bc46328d55f5524e604f5577134e46c9fc4ca02ce88c99cc00efc09f817ec7232a94d51686b9b40a0fe8dd6dd2cb0f8ea9deb7c021816c416b9fc35a7f23c144e65284d334cfc49a88e9e7f22caaf124d81833db40271e0a99173564931c0b8acc52d2685a8e39c64dc52e3d02390fdac2a12b155cb02d701df1869ad5b18463400ba35cc7649e110010bbc75576b8946031793591cb402ea21c7b3c885cf2fb547bb51016c8bbbaca21db264cc9f332769ad8dd895f0a303011200000002c610e85212d0697cb161d4ba431ba603f273feee7dcb7927c9ff5d74ae6cbfa3 +120000000000000000021816c416b9fc35a7f23c144e65284d334cfc49a88e9e7f22caaf124d81833db402c8ba90a905a832581193b371397f9ecb4727534613be52751d0136bda84e644c02af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262000000031000000000000000000002386920ed3667eedb00ae8dc34e0bc2e7a9fb2489e4848bdd8ae9e80d743770630256f94b36cf6da580c377c2bc735470751893e9ba1d00c1c6afac1253b87f7ca800000364000000000000000000000003001000000000000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101026c3812f50acc5d9f5273abcfeb969230b961e955512ecf4881166b3f4e3d6b54026c3812f50acc5d9f5273abcfeb969230b961e955512ecf4881166b3f4e3d6b54026c3812f50acc5d9f5273abcfeb969230b961e955512ecf4881166b3f4e3d6b5402c9f895d634d4993ed7d6d0e00f59b301f206e6ec71b0a123a204afa60c5209c602c9f895d634d4993ed7d6d0e00f59b301f206e6ec71b0a123a204afa60c5209c602c9f895d634d4993ed7d6d0e00f59b301f206e6ec71b0a123a204afa60c5209c602e099a652c72569e6b9c1c41e3dfba46775b55ae6caac1e890ad18fe0329b7d1c02e099a652c72569e6b9c1c41e3dfba46775b55ae6caac1e890ad18fe0329b7d1c02e099a652c72569e6b9c1c41e3dfba46775b55ae6caac1e890ad18fe0329b7d1c0235ef1c93c880148d5bb88b4eeb96cdddb7526acd07fec30660eec91e64b7b8af031200000002aacb3b28397d9a56765ef051b2caf639bdb600019c5c215b3b985a3bc9a880a702f625046a212d6b5f135c46224403dd09d25659d1d7949c89590f603d6a8128140255aa64035cafad9fbe715019033a1bce77c9e2565f605a561900153be699353d028d50b77f16d497ef3d0df6a6ed8bc46328d55f5524e604f5577134e46c9fc4ca02ce88c99cc00efc09f817ec7232a94d51686b9b40a0fe8dd6dd2cb0f8ea9deb7c02d701df1869ad5b18463400ba35cc7649e110010bbc75576b8946031793591cb402ea21c7b3c885cf2fb547bb51016c8bbbaca21db264cc9f332769ad8dd895f0a303011200000002c610e85212d0697cb161d4ba431ba603f273feee7dcb7927c9ff5d74ae6cbfa30271e0a99173564931c0b8acc52d2685a8e39c64dc52e3d02390fdac2a12b155cb diff --git a/pvm/tests/expected/dummy/state_hash_final b/pvm/tests/expected/dummy/state_hash_final index 9ce1888417..9d6d616326 100644 --- a/pvm/tests/expected/dummy/state_hash_final +++ b/pvm/tests/expected/dummy/state_hash_final @@ -1 +1 @@ -53ba6ce85e9fe77b2ead7d558a2a01e110b580aa1028616d92de1a21c3169785 +7a2884425c8452f09b91ac2d8d854cd384e5179945b22996048796bdfbb6ccc1 diff --git a/pvm/tests/expected/dummy/state_hash_initial b/pvm/tests/expected/dummy/state_hash_initial index f7b78b7238..e52650cfae 100644 --- a/pvm/tests/expected/dummy/state_hash_initial +++ b/pvm/tests/expected/dummy/state_hash_initial @@ -1 +1 @@ -b1a6495c6f56b46ebaacf38dae911d2e5a340546f3458e146cbde6e88d3ea453 +6c40fbfab89671c95544be25210f8f41420cf1aa81a4f859f49158ea4287ac90 diff --git a/pvm/tests/expected/etherlink/proof_initial b/pvm/tests/expected/etherlink/proof_initial index 6cb8d7e9e5..7b329d8e41 100644 --- a/pvm/tests/expected/etherlink/proof_initial +++ b/pvm/tests/expected/etherlink/proof_initial @@ -1 +1 @@ -6e19e5d34ba0195e014ff70fb7e788a420b3141e39adf5800c8a1cbbef3cebc2000000030000000000000000d8fdff03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bdc73c75432532814ec2d008761b965a6d8e4193f4e2a3cf4ff2d9701c6c607c02b6a51568f98781dc5dcba462353babe8afe52c41a8d0360217e3a8f41cd910b303b8d30200000000000273919af90e1fee9f2c6585e4534a6fa9e04931c0090b9c7ab9e631b16d8c8da00000030000000400000000000000000002042efafbc3f9688dc15b23117f10541c9ed31eaf464f88efcebb845c09cf566f02f3dee3ad11168f2439d85ff80920e2ca11bf750509436c64cae88214f7168765000208635de52136e424e01db919bbf578ed2d9ba2d58bbb53cd058690837a4e5f29025057c96a32f62d5824556bc2c92956999af61aaa5640a8efe0da04d565b0461f021a0d6f7f58660df42ef0682482f44483ce86213f570d4cebcc39907240298e55000295b5d148d8a212d4012a37d0574b20019dca69259db51fb68e426d488889e43d030010000000000000a2f800012330a4f82334b4f82338c4f8233cd4f8130804f897d53600930804f997d6360097d761000945233004fc130604fd9385e5e8938606e793874762233804fd233cb4fc233014ff2334d4fe2330f4fa2334a4fa2338c4fa233ca4fa130504faba8597000000e780c0c5397106fc22f8800017d561008545233004fe2146130545762330a4fc2334b4fc2338c4fc233c04fc17d5610093054575130504fc97000000e78000c2411106e422e0000897000000e780c015411106e422e0000897000000e780c01a411106e422e0000897000000e780c01f397106fc22f88000aa8517d561000546233004fea1461305e5712330a4fc2334c4fc2338d4fc233c04fc130504fc97000000e780a0bb397106fc22f88000aa8517d561000546233004fea1461305856f2330a4fc2334c4fc2338d4fc233c04fc130504fc97000000e78040b8411106e422e00008aa862e85b68597000000e780a01d411106e422e0000897c03600e780e090397106fc22f88000aa8517d561000546233004fea146130545372330a4fc2334c4fc2338d4fc233c04fc130504fc97000000e78080b2397106fc22f88000aa8517e561000546233004fea146130565862330a4fc2334c4fc2338d4fc233c04fc130504fc97000000e78020af397106fc22f88000aa8517e561000546233004fea146130505842330a4fc2334c4fc2338d4fc233c04fc130504fc97000000e780c0ab597186f4a2f080182338a4f8233cb4f8130504f997e56100930684f917e7610083b585aa8947233004fc2338a4fc233cb4fc2330d4fe2334b4fe130504fd930587802330b4fa2334f4fa2338a4fa233cf4fa130504fab28597000000e780c0a5597186f4a2f080182338a4f8233cb4f8130504f997e56100930684f917d7610083b585a48947233004fc2338a4fc233cb4fc2330d4fe2334b4fe130504fd9305877c2330b4fa2334f4fa2338a4fa233cf4fa130504fab28597000000e780c09f597186f4a2f080182338a4f8233cb4f8130504f997e56100930684f917d7610083b5859e8947233004fc2338a4fc233cb4fc2330d4fe2334b4fe130504fd930587782330b4fa2334f4fa2338a4fa233cf4fa130504fab28597000000e780c099597186f4a2f080182338a4f8233cb4f8130804f997e56100930684f917d761008d4783b58598233004fc130504fd233804fd233cb4fc2330d4fe2334b4fe8945930687742330d4fa2334f4fa2338a4fa233cb4fa130504fab28597000000e780a09301112ae406ec97103600e780a00597103600e780400517e361000333c3a40293226597603600e780a0b497f161009381c1150a8593050000137101ff09a00c4113068500814717e761000337c79197e6610083b6c69f17e5610003354586171336006700a3e997f761009387479203c7070029eb05472380e70097e7610083b7078985c7411106e417e561000335a5be829797e7610083b787a895c3a26017f555001305c5fb4101828797e7610083b707a789cb17f55500130565fa8287a26041018280828097f761009387578c03c7070005e305472380e70097e7610083b7078581cb9385c18017f55500130525f782878280757106e522e1a6fccaf8cef4d2f08346860105476390e602946198659c69846d0c6214e118e51ce904ed638c052c08668e05bda003ca850163000a080547631aea0e0948033306000466006a83489601bb06d8400348a6018342b6010347c6018347d6012330650004e500e9230cd5008346e6010346f601a30c1501230d0501a30d5500230ee500a30ef500230fd500a30fc5009061630606268865931536002146aa600a64e6744679a679067a496117530f006700a3dfb5ce2a89846188659469006218661c6a26ec2af036f422f83afcbee063f0840a08620c66106a93090102aae4aee8b2ec0a85ac00300897003100e780c00c91c803b5090093953400214697500f00e78080da05456314aa10826502e81145054a63e1a51022658e052146214497500f00e78060d802e022e4eda0c1d69469186a6390e60618669c6593943600b3069040e1142697a6976388061084630063a1066117e117e38984feb3b6840033379400b306d7407d57639de602e5a8886190658c6993098103aae4b2e8aeec0a85ac00101897003100e7800003a28435f095bfb3b7e600b336d7009d8e7d576383e60c93f6f60f05476392e608aa84886194658c6918621c66106a2af836fcaee0bae4bee8b2ec28080c18b00097003100e780001fa66581c946658e05214697500f00e78060cc0545631faa0ce26502f41145054a63eca50c02758e052146214497500f00e78040ca02ec22f0c1a0426511e1054a0265a26542662330a9002334b9002338c900230c4901c9a80547a1471462233005001ce52338050018ede38806e408668e0621462e84b68597500f00e78080c5a28525bd93b61600fd167d57e391e6f4aa8408621466106a98619c658c692af836fcb2e0bae4bee8aeec28080c18b00097003100e7808013a66581c946658e05214697500f00e780e0c013751a0015cde26502f41145054463e0a50402758e052146214997500f00e780c0be02ec4af025a0227511e1054a62658275227688e08ce490e8238c440105a0227519e1054421a009453304454162658275227688e08ce490e8238c8400aa600a64e6744679a679067a4961828026642a8909e42da026642a8915c0466509a82a8909e429a82a89268491c803b5090093153400214697500f00e78000b74a8597503500e780c0b9597186f4a2f0a6eccae8cee4d2e056fc03c685012a8421ca83ba050003ba8500054513098102631da604214502f02af402f817f55b009305054e081097803100e78000be227585450ce10275227608e010e40ce8230c040063810a2493953a00214652853da490619465886932f036f42af859c9a2759061050690e15dca09aa8469214502f02af402f817f55b0093058548081097803100e78080b8227585450ce12279639db40003350a0083350900631cb51201458279631e000035aa13b5140093b5240093c515003385a5408279630405121375f50f85456314b50e56f052f426f80810854597003100e780a03f4276827522756304061289460ce008e410e8230cd40041a2027511e917f55b0093056547081097803100e78060b022752330050005452af8a2759061050690e125e20546630cc500a1050e0561159061050690e131e66115a10575f90275c274639ba40017f55b0093056544081097803100e780e0ab2275939534002e9585450ce185048275227585e0054981c98e05214697500f00e780c09d8145214531a0c27482752275f5d001490ce008e404e8230c2401a30c0400230d0400a30d0400230e0400a30e0400230f0400a30f0400e9a856f052f426f828000c1097100000e780a0d1626525c581442265c26562662af02ef432f895a83336b50033b5a500118d8279e31005ee0545a145233004000ce42338040008ece38809e49395390021464a8597500f00e780a09435bd0546a1462330040014e42338040010eca1cd8e05214697500f00e780a092a9a02145a26502f02af402f8854481c942658e05214697500f00e780c0900275a2754276a30c0400230d0400a30d0400230e040008e00ce410e8230c9400a30e0400230f0400a30f0400638a09009395390021464a8597500f00e780c08ca6700674e6644669a669066ae27a6561828082792a84638e0904227999a02a8421a082752a8481e5639d090299a022758e05214697500f00e7800089639309020da809a082752a8489c9033509008e05214697500f00e7802087d6895289638a0a009395390021464a8597500f00e780a085228597503500e7806088397106fc22f826f44af083c6850185442a8463889600034586010dc90547631fe504280097100000e780e0cea265114502ec63e7a50242658e052146214997500f00e780a08002e44ae819a88dca8144280097100000e78000cc626511e185442265c265626608e00ce410e8230c9400e2704274a274027921618280e9da8944280097100000e78000c9626571f9c1bf797106f422f026ec4ae84ee4b289ae842a842e85b28597003100e7804039886090649468986c83b5090008e010e414e818ec99cd03b589008e052146a2700274e2644269a269456117430f0067000377a2700274e2644269a269456182808c602a8989e983b5090085e14a8597403500e780207888648e05214697400f00e780e07383b50900f5d103b589008e05214697400f00e78080724a8597403500e78040751d7186eca2e8a6e4cae04efcae898c692a898dcd08102146ce8597403100e780e07ac27513d6150029c62275aa95fd152a9683c60500034705002300d5002380e5000505fd15e316c5fe25a017d561000335e51f0340050005458545054497400f00e780006b79c52300050022f02af422f80275a27542742ae42ee822ec25c4c26403850400635d0504930500f86310b502138514009305f4ff99c5034605000505fd157dda21a003c5890115c92265631ca40017f55b00930565fb280097603600e7804008c26413851400a685228697403600e780403323800400050422ec03c589010dc12265c26562662330a9002334b9002338c900e6604664a6640669e27925618280426522957d15854521a07d147d1569d8034605009346f6ff85892300d500f5d5bb05c0402300b50093351600f9bf0545854597f0ffffe780e0d8a2652a8499c54265054697400f00e780c05c228597403500e780805f5d7186e4a2e026fc4af84ef452f056ecaa894dc23284ae8403850500634f050a634b041a17d561000335a50c034005008545054a228597400f00e780c057630d05182a89a685228697403600e78000e11305f4ff15c1935514004a95ca954a8683460500034706002300d6002300e50005067d15e316b6fe0a85a146ca85228697403100e780c04905464a85a28597400f00e780c052426582652266b336a000850623b0b90023b4c90023b8a900238cd90019a80545a14523b0090023b4b90023b8090023bca900a6600664e2744279a279027ae26a616182806349041017d56100833a050103c00a008545054a228597400f00e780204c7dc92a89a685228697403600e78080d5330524017d150546a28521a0fd157d1585c18346050013c7f6ff058a2300e50075d63b06d0402300c50013b61600f9bf03c00a008545228597400f00e78020474dcdaa84ca85228697403600e78080d01305f4ff15c1935514002695a695268683460500034706002300d6002300e50005067d15e316b6fe0a85a146a685228697403100e780403905462685a28597400f00e780404242658265a26605461337150023b0b90023b4d90023b8a900238ce9004a85a285a6600664e2744279a279027ae26a616117430f006700c33e014a17155c00130665b55285a28597f0ffffe780a0b6014a17155c00130605b45285a28597f0ffffe78040b517155c001306c5b20545a28597f0ffffe78000b40000aa8905462685a28597400f00e780a03905464a85a28597400f00e780c0384e8597403500e780803b09a0aa8905464a85a28597400f00e78000374e8597403500e780c039797106f422f026ec2a84240063c00504b5c9214502e02ae402e817f55b00930585cf0a8597703100e780803f226585450ce1023b747d26e91280a6a7b40b1e7793d1b4213b99c793f9e856ac19f253592f0db5023053fb90ca2f391b0944dcf6851dd516f479b804f48bcafdc7c2448a64dd808102f61e3ee5de196089479d9c32a0bf564f4c31d67ae3d182221cf025b71dd21c9302cd6b3dd021a40662d86db64357c6c90c3154b7ce3124e4f4218f102be47b6aab0244980c1d43301b4cc9117e16ceb0056b17f25448d0976f6fd31286523d39b06702d37f1bb4dc4acca6a95d8d5d1f7a4573378f0c0901cb7a30ffcff187aa1af845022c9d2e47ff6d8d5ab7490b3a00f9f983dd4d90213eeacd2deb62081eee25d73602e42028f7e0570e5c74e1f756eb93269e6a95ba9b856887a4d6862bf23f0c1db402c0aed19a514df5213cda479149873fece82415c994e3ec973a85f7ba058d20ae024bab8aef63433d98649bcd969d4ed89c3ea8a5a01afabf7d27f93521320cf4de0263b4749ed36920fb4bf883b37c226f079adf08a097c631ad5f7457b061716abd0263b4749ed36920fb4bf883b37c226f079adf08a097c631ad5f7457b061716abd020f9f279211af86568756a1c86f1082001544f2ddfc11619bd90772d1814c2f34020f9f279211af86568756a1c86f1082001544f2ddfc11619bd90772d1814c2f34020fbbf77d868a1f64900e25de5a4ac42737cf0daaf9972a41f0f693fffd467c520280654ad60c28e2055f609c34347e275515ffedbf92de7739d4315e4a3d2d434900030040000000000000000000000002c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b702c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b700026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f1111026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f1111026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f111100022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e2130300022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e213022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e21302c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b70245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a68916380273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a68916380273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a68916380245dd9031b56dab226d90e7db1535dac5ec818f43abbf60d5809633da4b8add9c02337bf1607964d76140de57e0f2cc4d800789764d72c049d9a9c42a9adec0094502337bf1607964d76140de57e0f2cc4d800789764d72c049d9a9c42a9adec00945021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e59602740d82632f6a94268cea42f4126b2c89df51fdf8d6256a4b21d4ddf76031387002740d82632f6a94268cea42f4126b2c89df51fdf8d6256a4b21d4ddf76031387000030040000000000000000000000002c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b702f52a690920af7bc0203a3c426b5a15d6f62f4e05ba9056d5d951b667928d9338000297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b280297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b280297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b28000248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b03010248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b0248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b02f52a690920af7bc0203a3c426b5a15d6f62f4e05ba9056d5d951b667928d933802b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db02b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db02b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db0225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a510225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a510225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a5102df9e79c5bc6e42e2e94fa50032cba37c15a1c2304ec8f3b47e25a348125aadf702337bf1607964d76140de57e0f2cc4d800789764d72c049d9a9c42a9adec0094502337bf1607964d76140de57e0f2cc4d800789764d72c049d9a9c42a9adec00945021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e596021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e596021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e5960256411da161dfbcbcb503b5c5275b312d01d4646192e27edb571db36c3270ae81023270b212802a14bfaa964c19e4da70aa359dc6ed0d09613b15a37a6ec5805bab02af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f32620277f9e73414be4b172693bb474564e7f6e38543aeaffb16282cab97dd9c7c2955026878c573f5a8c2ebfc3bf3a7420fbfbd9dd7ba98be3be785b7441152b0f3ccc2029d561bc91b02315d61a6c10fdcb9cb3fefb4fb5d414b717ad14b34a8e8fc9a180271e0a99173564931c0b8acc52d2685a8e39c64dc52e3d02390fdac2a12b155cb0300000000000000000271e0a99173564931c0b8acc52d2685a8e39c64dc52e3d02390fdac2a12b155cb022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e2130300000000 +8cef6db70ba577ca242c13b6e37f84cdeadfc2a2ca0f672452c1289d265e4ba400029d561bc91b02315d61a6c10fdcb9cb3fefb4fb5d414b717ad14b34a8e8fc9a180000030000000000000000d8fdff03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bdc73c75432532814ec2d008761b965a6d8e4193f4e2a3cf4ff2d9701c6c607c02b6a51568f98781dc5dcba462353babe8afe52c41a8d0360217e3a8f41cd910b303b8d30200000000000273919af90e1fee9f2c6585e4534a6fa9e04931c0090b9c7ab9e631b16d8c8da00000030000000400000000000000000002042efafbc3f9688dc15b23117f10541c9ed31eaf464f88efcebb845c09cf566f02f3dee3ad11168f2439d85ff80920e2ca11bf750509436c64cae88214f7168765000208635de52136e424e01db919bbf578ed2d9ba2d58bbb53cd058690837a4e5f29025057c96a32f62d5824556bc2c92956999af61aaa5640a8efe0da04d565b0461f021a0d6f7f58660df42ef0682482f44483ce86213f570d4cebcc39907240298e55000295b5d148d8a212d4012a37d0574b20019dca69259db51fb68e426d488889e43d030010000000000000a2f800012330a4f82334b4f82338c4f8233cd4f8130804f897d53600930804f997d6360097d761000945233004fc130604fd9385e5e8938606e793874762233804fd233cb4fc233014ff2334d4fe2330f4fa2334a4fa2338c4fa233ca4fa130504faba8597000000e780c0c5397106fc22f8800017d561008545233004fe2146130545762330a4fc2334b4fc2338c4fc233c04fc17d5610093054575130504fc97000000e78000c2411106e422e0000897000000e780c015411106e422e0000897000000e780c01a411106e422e0000897000000e780c01f397106fc22f88000aa8517d561000546233004fea1461305e5712330a4fc2334c4fc2338d4fc233c04fc130504fc97000000e780a0bb397106fc22f88000aa8517d561000546233004fea1461305856f2330a4fc2334c4fc2338d4fc233c04fc130504fc97000000e78040b8411106e422e00008aa862e85b68597000000e780a01d411106e422e0000897c03600e780e090397106fc22f88000aa8517d561000546233004fea146130545372330a4fc2334c4fc2338d4fc233c04fc130504fc97000000e78080b2397106fc22f88000aa8517e561000546233004fea146130565862330a4fc2334c4fc2338d4fc233c04fc130504fc97000000e78020af397106fc22f88000aa8517e561000546233004fea146130505842330a4fc2334c4fc2338d4fc233c04fc130504fc97000000e780c0ab597186f4a2f080182338a4f8233cb4f8130504f997e56100930684f917e7610083b585aa8947233004fc2338a4fc233cb4fc2330d4fe2334b4fe130504fd930587802330b4fa2334f4fa2338a4fa233cf4fa130504fab28597000000e780c0a5597186f4a2f080182338a4f8233cb4f8130504f997e56100930684f917d7610083b585a48947233004fc2338a4fc233cb4fc2330d4fe2334b4fe130504fd9305877c2330b4fa2334f4fa2338a4fa233cf4fa130504fab28597000000e780c09f597186f4a2f080182338a4f8233cb4f8130504f997e56100930684f917d7610083b5859e8947233004fc2338a4fc233cb4fc2330d4fe2334b4fe130504fd930587782330b4fa2334f4fa2338a4fa233cf4fa130504fab28597000000e780c099597186f4a2f080182338a4f8233cb4f8130804f997e56100930684f917d761008d4783b58598233004fc130504fd233804fd233cb4fc2330d4fe2334b4fe8945930687742330d4fa2334f4fa2338a4fa233cb4fa130504fab28597000000e780a09301112ae406ec97103600e780a00597103600e780400517e361000333c3a40293226597603600e780a0b497f161009381c1150a8593050000137101ff09a00c4113068500814717e761000337c79197e6610083b6c69f17e5610003354586171336006700a3e997f761009387479203c7070029eb05472380e70097e7610083b7078985c7411106e417e561000335a5be829797e7610083b787a895c3a26017f555001305c5fb4101828797e7610083b707a789cb17f55500130565fa8287a26041018280828097f761009387578c03c7070005e305472380e70097e7610083b7078581cb9385c18017f55500130525f782878280757106e522e1a6fccaf8cef4d2f08346860105476390e602946198659c69846d0c6214e118e51ce904ed638c052c08668e05bda003ca850163000a080547631aea0e0948033306000466006a83489601bb06d8400348a6018342b6010347c6018347d6012330650004e500e9230cd5008346e6010346f601a30c1501230d0501a30d5500230ee500a30ef500230fd500a30fc5009061630606268865931536002146aa600a64e6744679a679067a496117530f006700a3dfb5ce2a89846188659469006218661c6a26ec2af036f422f83afcbee063f0840a08620c66106a93090102aae4aee8b2ec0a85ac00300897003100e780c00c91c803b5090093953400214697500f00e78080da05456314aa10826502e81145054a63e1a51022658e052146214497500f00e78060d802e022e4eda0c1d69469186a6390e60618669c6593943600b3069040e1142697a6976388061084630063a1066117e117e38984feb3b6840033379400b306d7407d57639de602e5a8886190658c6993098103aae4b2e8aeec0a85ac00101897003100e7800003a28435f095bfb3b7e600b336d7009d8e7d576383e60c93f6f60f05476392e608aa84886194658c6918621c66106a2af836fcaee0bae4bee8b2ec28080c18b00097003100e780001fa66581c946658e05214697500f00e78060cc0545631faa0ce26502f41145054a63eca50c02758e052146214497500f00e78040ca02ec22f0c1a0426511e1054a0265a26542662330a9002334b9002338c900230c4901c9a80547a1471462233005001ce52338050018ede38806e408668e0621462e84b68597500f00e78080c5a28525bd93b61600fd167d57e391e6f4aa8408621466106a98619c658c692af836fcb2e0bae4bee8aeec28080c18b00097003100e7808013a66581c946658e05214697500f00e780e0c013751a0015cde26502f41145054463e0a50402758e052146214997500f00e780c0be02ec4af025a0227511e1054a62658275227688e08ce490e8238c440105a0227519e1054421a009453304454162658275227688e08ce490e8238c8400aa600a64e6744679a679067a4961828026642a8909e42da026642a8915c0466509a82a8909e429a82a89268491c803b5090093153400214697500f00e78000b74a8597503500e780c0b9597186f4a2f0a6eccae8cee4d2e056fc03c685012a8421ca83ba050003ba8500054513098102631da604214502f02af402f817f55b009305054e081097803100e78000be227585450ce10275227608e010e40ce8230c040063810a2493953a00214652853da490619465886932f036f42af859c9a2759061050690e15dca09aa8469214502f02af402f817f55b0093058548081097803100e78080b8227585450ce12279639db40003350a0083350900631cb51201458279631e000035aa13b5140093b5240093c515003385a5408279630405121375f50f85456314b50e56f052f426f80810854597003100e780a03f4276827522756304061289460ce008e410e8230cd40041a2027511e917f55b0093056547081097803100e78060b022752330050005452af8a2759061050690e125e20546630cc500a1050e0561159061050690e131e66115a10575f90275c274639ba40017f55b0093056544081097803100e780e0ab2275939534002e9585450ce185048275227585e0054981c98e05214697500f00e780c09d8145214531a0c27482752275f5d001490ce008e404e8230c2401a30c0400230d0400a30d0400230e0400a30e0400230f0400a30f0400e9a856f052f426f828000c1097100000e780a0d1626525c581442265c26562662af02ef432f895a83336b50033b5a500118d8279e31005ee0545a145233004000ce42338040008ece38809e49395390021464a8597500f00e780a09435bd0546a1462330040014e42338040010eca1cd8e05214697500f00e780a092a9a02145a26502f02af402f8854481c942658e05214697500f00e780c0900275a2754276a30c0400230d0400a30d0400230e040008e00ce410e8230c9400a30e0400230f0400a30f0400638a09009395390021464a8597500f00e780c08ca6700674e6644669a669066ae27a6561828082792a84638e0904227999a02a8421a082752a8481e5639d090299a022758e05214697500f00e7800089639309020da809a082752a8489c9033509008e05214697500f00e7802087d6895289638a0a009395390021464a8597500f00e780a085228597503500e7806088397106fc22f826f44af083c6850185442a8463889600034586010dc90547631fe504280097100000e780e0cea265114502ec63e7a50242658e052146214997500f00e780a08002e44ae819a88dca8144280097100000e78000cc626511e185442265c265626608e00ce410e8230c9400e2704274a274027921618280e9da8944280097100000e78000c9626571f9c1bf797106f422f026ec4ae84ee4b289ae842a842e85b28597003100e7804039886090649468986c83b5090008e010e414e818ec99cd03b589008e052146a2700274e2644269a269456117430f0067000377a2700274e2644269a269456182808c602a8989e983b5090085e14a8597403500e780207888648e05214697400f00e780e07383b50900f5d103b589008e05214697400f00e78080724a8597403500e78040751d7186eca2e8a6e4cae04efcae898c692a898dcd08102146ce8597403100e780e07ac27513d6150029c62275aa95fd152a9683c60500034705002300d5002380e5000505fd15e316c5fe25a017d561000335e51f0340050005458545054497400f00e780006b79c52300050022f02af422f80275a27542742ae42ee822ec25c4c26403850400635d0504930500f86310b502138514009305f4ff99c5034605000505fd157dda21a003c5890115c92265631ca40017f55b00930565fb280097603600e7804008c26413851400a685228697403600e780403323800400050422ec03c589010dc12265c26562662330a9002334b9002338c900e6604664a6640669e27925618280426522957d15854521a07d147d1569d8034605009346f6ff85892300d500f5d5bb05c0402300b50093351600f9bf0545854597f0ffffe780e0d8a2652a8499c54265054697400f00e780c05c228597403500e780805f5d7186e4a2e026fc4af84ef452f056ecaa894dc23284ae8403850500634f050a634b041a17d561000335a50c034005008545054a228597400f00e780c057630d05182a89a685228697403600e78000e11305f4ff15c1935514004a95ca954a8683460500034706002300d6002300e50005067d15e316b6fe0a85a146ca85228697403100e780c04905464a85a28597400f00e780c052426582652266b336a000850623b0b90023b4c90023b8a900238cd90019a80545a14523b0090023b4b90023b8090023bca900a6600664e2744279a279027ae26a616182806349041017d56100833a050103c00a008545054a228597400f00e780204c7dc92a89a685228697403600e78080d5330524017d150546a28521a0fd157d1585c18346050013c7f6ff058a2300e50075d63b06d0402300c50013b61600f9bf03c00a008545228597400f00e78020474dcdaa84ca85228697403600e78080d01305f4ff15c1935514002695a695268683460500034706002300d6002300e50005067d15e316b6fe0a85a146a685228697403100e780403905462685a28597400f00e780404242658265a26605461337150023b0b90023b4d90023b8a900238ce9004a85a285a6600664e2744279a279027ae26a616117430f006700c33e014a17155c00130665b55285a28597f0ffffe780a0b6014a17155c00130605b45285a28597f0ffffe78040b517155c001306c5b20545a28597f0ffffe78000b40000aa8905462685a28597400f00e780a03905464a85a28597400f00e780c0384e8597403500e780803b09a0aa8905464a85a28597400f00e78000374e8597403500e780c039797106f422f026ec2a84240063c00504b5c9214502e02ae402e817f55b00930585cf0a8597703100e780803f226585450ce1023b747d26e91280a6a7b40b1e7793d1b4213b99c793f9e856ac19f253592f0db5023053fb90ca2f391b0944dcf6851dd516f479b804f48bcafdc7c2448a64dd808102f61e3ee5de196089479d9c32a0bf564f4c31d67ae3d182221cf025b71dd21c9302cd6b3dd021a40662d86db64357c6c90c3154b7ce3124e4f4218f102be47b6aab0244980c1d43301b4cc9117e16ceb0056b17f25448d0976f6fd31286523d39b06702d37f1bb4dc4acca6a95d8d5d1f7a4573378f0c0901cb7a30ffcff187aa1af845022c9d2e47ff6d8d5ab7490b3a00f9f983dd4d90213eeacd2deb62081eee25d73602e42028f7e0570e5c74e1f756eb93269e6a95ba9b856887a4d6862bf23f0c1db402c0aed19a514df5213cda479149873fece82415c994e3ec973a85f7ba058d20ae024bab8aef63433d98649bcd969d4ed89c3ea8a5a01afabf7d27f93521320cf4de0263b4749ed36920fb4bf883b37c226f079adf08a097c631ad5f7457b061716abd0263b4749ed36920fb4bf883b37c226f079adf08a097c631ad5f7457b061716abd020f9f279211af86568756a1c86f1082001544f2ddfc11619bd90772d1814c2f34020f9f279211af86568756a1c86f1082001544f2ddfc11619bd90772d1814c2f34020fbbf77d868a1f64900e25de5a4ac42737cf0daaf9972a41f0f693fffd467c520280654ad60c28e2055f609c34347e275515ffedbf92de7739d4315e4a3d2d434900030040000000000000000000000002c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b702c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b700026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f1111026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f1111026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f111100022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e2130300022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e213022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e21302c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b70245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a68916380273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a68916380273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a68916380245dd9031b56dab226d90e7db1535dac5ec818f43abbf60d5809633da4b8add9c02337bf1607964d76140de57e0f2cc4d800789764d72c049d9a9c42a9adec0094502337bf1607964d76140de57e0f2cc4d800789764d72c049d9a9c42a9adec00945021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e59602740d82632f6a94268cea42f4126b2c89df51fdf8d6256a4b21d4ddf76031387002740d82632f6a94268cea42f4126b2c89df51fdf8d6256a4b21d4ddf76031387000030040000000000000000000000002c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b702f52a690920af7bc0203a3c426b5a15d6f62f4e05ba9056d5d951b667928d9338000297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b280297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b280297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b28000248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b03010248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b0248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b02f52a690920af7bc0203a3c426b5a15d6f62f4e05ba9056d5d951b667928d933802b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db02b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db02b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db0225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a510225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a510225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a5102df9e79c5bc6e42e2e94fa50032cba37c15a1c2304ec8f3b47e25a348125aadf702337bf1607964d76140de57e0f2cc4d800789764d72c049d9a9c42a9adec0094502337bf1607964d76140de57e0f2cc4d800789764d72c049d9a9c42a9adec00945021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e596021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e596021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e5960256411da161dfbcbcb503b5c5275b312d01d4646192e27edb571db36c3270ae81023270b212802a14bfaa964c19e4da70aa359dc6ed0d09613b15a37a6ec5805bab02af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262000277f9e73414be4b172693bb474564e7f6e38543aeaffb16282cab97dd9c7c2955026878c573f5a8c2ebfc3bf3a7420fbfbd9dd7ba98be3be785b7441152b0f3ccc20300000000000000000271e0a99173564931c0b8acc52d2685a8e39c64dc52e3d02390fdac2a12b155cb022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e21303000000000271e0a99173564931c0b8acc52d2685a8e39c64dc52e3d02390fdac2a12b155cb diff --git a/pvm/tests/expected/etherlink/state_hash_final b/pvm/tests/expected/etherlink/state_hash_final index 596149dac9..72ff26c3ba 100644 --- a/pvm/tests/expected/etherlink/state_hash_final +++ b/pvm/tests/expected/etherlink/state_hash_final @@ -1 +1 @@ -951c88850550b49dbb54f38aad48e5617ff1d3815d2c605000cf57e910757894 +b8875d0186bb608977ed559bc1215a96434b1220f65e77a3837b96e69c3a0ba6 diff --git a/pvm/tests/expected/etherlink/state_hash_initial b/pvm/tests/expected/etherlink/state_hash_initial index 5130c11186..e977ffec4f 100644 --- a/pvm/tests/expected/etherlink/state_hash_initial +++ b/pvm/tests/expected/etherlink/state_hash_initial @@ -1 +1 @@ -1338afb2149acdccd4bc2ee6599925475cb6586d4f25e1068e88e2f5d1fedcad +15497087b22f17db87edc83576238bd549cf5acc8c271f5f9ae43e8e642c214b diff --git a/pvm/tests/expected/jstz/proof_initial b/pvm/tests/expected/jstz/proof_initial index 97376a3cb2..41daccc2d3 100644 --- a/pvm/tests/expected/jstz/proof_initial +++ b/pvm/tests/expected/jstz/proof_initial @@ -1 +1 @@ -6d3f9a64ca57d5b24fe955d04ecd4b54ef8d0b4a62f3866bfa4b89331b3e04e3000000030000000000000000d8fdff03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bdc73c75432532814ec2d008761b965a6d8e4193f4e2a3cf4ff2d9701c6c607c02b6a51568f98781dc5dcba462353babe8afe52c41a8d0360217e3a8f41cd910b303569a0300000000000273919af90e1fee9f2c6585e4534a6fa9e04931c0090b9c7ab9e631b16d8c8da00000030000000400000000000000000002042efafbc3f9688dc15b23117f10541c9ed31eaf464f88efcebb845c09cf566f02bb58c3bf498a76411e653a8d3a38fcb3841d3f2648d85a58fdb202f51b3e3fb9028a75a3d8f89ffcaae3052a6dd270c3ff5cd834de076ba37896a7ff7e9a8cc71900027f44821963d2d6d95cd8004ec306c4639ba4f7ed470478701973a9793167df74023ea8ab3d9aa896591dd325312955e3675cedf6b85f0a94b7539c254c1ef2c0a200027a036f53837575ab1b51117294ee446c2858eb3a084cf8ea60dcb50d9e4910960300100000000000002388b7050040af2605106398c6022f27b51875fb9305450005462fa0c502aa841305200613061008854697406b00e7802085aa852685e35db0f8e2604264a2640561828017c593001305a56e97d5bf00138645339305400297000000e7800045397106fc22f826f4800019c90c6110652330050013b515007d15b374c50011a0814417f5bf001305654197606b00e780001c10610c652334c4fc2338b4fc854614e104e51dc6233cc4fc2330b4fe6312d604a1c17d552fb5a5028545631bb502130504fe0f00300297706700e78020460da017f5bf001305653c97606b00e780001797f56800938505ef97f06800e780c0f2e2704274a27421618280aa84130584fc97f06600e780800a268597406a00e780609d411106e422e0000897a06900e780802e7d567e1605066316c500a26002644101828017d6bf001306267a97000000e780e00c011106ec22e800103a88b6872330b4fe2334c4fe97d5bf0013866579930504fe930684fe328797000000e780e04e5d7186e4a2e026fc4af880082e966367b6062a89086193141500637a9604a14563fb950463cc040401c9833589002334b4fc233ca4fc05452338a4fc130504fb8545930684fc268697a06b00e78040b6033504fb0ded033584fb2334a90023309900a6600664e274427961618280b284a145e3e9c5faa144e3d804fa014517e6bf001306663797000000e7802001033584fb833504fce5b7411106e422e0000811e5328597a06b00e78020a397000000e7808000411106e422e000082a862e85b28597400300e7800036597186f4a2f08018930604f0c8ea17f5bf000335453497c26b00e782620217e5bf001305c54597c26b00e782a2ff97000000e780401c597186f4a2f08018930604f0c8ea17f5bf000335e53097c26b00e78202ff17e5bf001305654597c26b00e78242fc97000000e780e018597186f4a2f08018930604f0c8ea17f5bf000335852d97c26b00e782a2fb17e5bf001305054597c26b00e782e2f897000000e7808015597186f4a2f08018930604f0c8ea17f5bf000335252a97c26b00e78242f817e5bf001305a54497c26b00e78282f597000000e7802012411106e422e0000897406c00e78080561d7186eca2e880109705c00003b6a5a1aa851305f4fe233ca4fc2330c4fe17f5bf001305c5932334a4fa05452338a4fa233404fc130684fd233cc4fa2330a4fc130584fa97000000e780600c1d7186eca2e880109705c00003b665beaa851305f4fe233ca4fc2330c4fe17f5bf00130505902334a4fa05452338a4fa233404fc130684fd233cc4fa2330a4fc130584fa97000000e780a007411106e422e000082a8617559400130525fe9305b00297000000e780400d1d7186eca2e880102330a4fa2334b4fa130504fa2330a4fe17556c001305254e2334a4fe17956c00130585982338a4fa0545233ca4fa233804fc930504fe2330b4fc2334a4fc130504fbb28597000000e7808000797106f422f00018233ca4fc2330b4fe05452314a4fe130584fd97b06800e780601e1d7186eca2e88010147518712338d4fc2334e4fc146d18691c6508612330d4fc233ce4fa2338f4fa2334a4fa130584fa233ca4fc2330c4fe230404fea304b4fe130584fd97b06800e780a019000097000000e78060115d7186e4a2e080082330a4fe2334b4fe130504fe2338a4fa0545233ca4fa233804fc21452330a4fc233404fc130504fbb28597000000e78060f55d7186e4a2e080082330a4fe2334b4fe130504fe2338a4fa0545233ca4fa233804fc21452330a4fc233404fc17f5bf0013062580130504fb814597000000e78060f35d7186e4a2e080082330a4fe2334b4fe130504fe2338a4fa0545233ca4fa233804fc21452330a4fc233404fc17e5bf001306857d130504fb854597000000e78040ef597186f4a2f08018930604f0c8ea1705c0000335c593ccee930584f9eceae8ee930504f9ecf2e8f617e5bf001305257bc8f20945c8f6233004fc930504fdccfac8fe130504fab28597000000e78020e8411106e422e00008175594001305e5e39305600297000000e78080f1411106e422e0000817559400130585e49305400297000000e780e0f3011106ec22e80010b2872330a4fe2334b4fe17e5bf001306057617e5bf0013088518930504fe930684fe0145328797000000e780e003011106ec22e80010b2872330a4fe2334b4fe17e5bf001306a57417f5bf001308a58e930504fe930684fe0145328797000000e7808000517186f5a2f1a6edcae98019c2842338b4f0930504f090ed94f198f509c98545631fb500175594001305a5dc29a0175594001305e5db2338a4f2094501a817559400130525db2338a4f21d458c63233ca4f295ed130504f3130604f028fa17556c001305e52128fe130504f148e217556c001305c50748e6930504f24cea48ee17e5bf001305656c48fa0d45b9a8130504f413060003130904f4be8597506b00e780400d130504f3130604f028fa17556c009705c00083b5c5811305e51c28fe233024f94ce6130504f148ea17556c001305e50148ee930504f24cf248f617e5bf001305856948fa1145130604f048fe233804fc930504f76ce268e6130504fba68597000000e78040cd197186fca2f800012330a4f82334b4f82338c4f8233cd4f8130504f82338a4fc17556c0013052515233ca4fc130504f92330a4fe17556c001305c5fa2334a4fe17e5bf001305c5682330a4fa09452334a4fa233004fc930504fd2338b4fa233ca4fa130504faba8597000000e78040c6397106fc22f8800017e5bf001305457e2330a4fc05452334a4fc233004fe21452338a4fc233c04fc17e5bf009305457d130504fc97000000e78080c2411106e422e0000897506c00e780c00d411106e422e0000897506c00e780c012411106e422e0000897506c00e780c017397106fc22f88000aa8517e5bf001305e5792330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e78020bc597186f4a2f080182338a4f817f5bf000335e562233cb4f8930584f92338b4fc233ca4fc930504f92330b4fe2334a4fe17e5bf00130525752330a4fa0d452334a4fa233004fc130504fd2338a4fa0945233ca4fa130504fab28597000000e78000b6397106fc22f88000aa8517e5bf00130565772330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e780a0b2411106e422e0000897306c00e78060cb397106fc22f88000aa8517e5bf00130585312330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e78040ae397106fc22f88000aa8517f5bf001305a5992330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e780e0aa397106fc22f88000aa8517f5bf00130545972330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e78080a7397106fc22f88000aa8517f5bf001305e5942330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e78020a4397106fc22f88000aa8517f5bf00130585922330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e780c0a001112ae406ec97f06a00e780404c97f06a00e780e04b17f3bf00033363140293226597706b00e78020359701c000938121000a8593050000137101ff09a00c4113068500814717f7bf000337e7e597f6bf0083b6e60817f5bf000335e5c617f36a00670003309717c0009387678203c7070029eb05472380e70097f7bf0083b7a7cd85c7411106e417f5bf000335c554829797f7bf0083b7272695c3a2601705a600130565ad4101828797f7bf0083b7a72489cb1705a600130505ac8287a2604101828082809707c0009387777c03c7070015e305472380e70097f7bf0083b7a7cf91cb9705c0009385057b1705a600130585a882878280411106e4086197700000e780200d0145a26041018280411106e4086197700000e780c00b0145a26041018280797106f422f026ec2a840a8597106c00e780004022e81795ae009304a5530a850c08268697f06b00e780001b130514002ae80a850c08268697f06b00e780c019130524002ae80a850c08268697f06b00e7808018130534002ae80a850c08268697f06b00e7804017130544002ae80a850c08268697f06b00e7800016130554002ae80a850c08268697f06b00e780c014130564002ae80a850c08268697f06b00e7808013130574002ae80a850c08268697f06b00e7804012130584002ae80a850c08268697f06b00e7800011130594002ae80a850c08268697f06b00e780c00f1305a4002ae80a850c08268697f06b00e780800e1305b4002ae80a850c08268697f06b00e780400d1305c4002ae80a850c08268697f06b00e780000c1305d4002ae80a850c08268697f06b00e780c00a1305e4002ae80a850c08268697f06b00e78080091305f4002ae80a850c08268697f06b00e7804008130504012ae80a850c08268697f06b00e7800007130514012ae80a850c08268697f06b00e780c005130524012ae80a850c08268697f06b00e7808004130534012ae80a850c08268697f06b00e7804003130544012ae80a850c08268697f06b00e7800002130554012ae80a850c08268697f06b00e780c000130564012ae80a850c08268697f06b00e78080ff130574012ae80a850c08268697f06b00e78040fe130584012ae80a850c08268697f06b00e78000fd130594012ae80a850c08268697f06b00e780c0fb1305a4012ae80a850c08268697f06b00e78080fa1305b4012ae80a850c08268697f06b00e78040f91305c4012ae80a850c08268697f06b00e78000f81305d4012ae80a850c08268697f06b00e780c0f61305e4012ae80a850c08268697f06b00e78080f57d0422e80a850c08268697f06b00e78060f40a8597f06b00e780c00aa2700274e26445618280130101d52334112a2330812a233c9128233821292334312923304129233c5127233861272334712723308127be8b03c487073a89b68ab2892e8a2a8b19c405456316a40003c59b0789a881a817f5bf00033525e483b40b080340050013050002a14597300300e780a0716301055a2a8c886018619064946893858401a813029703350120fe755e76be76233cac002338bc002334cc002330dc0083b58b0823008110a300a11062e6986103b60b0983b68b0993850b0aa813029703350120aaea7e75de753e7683b68b0aaae6aee232fe986203b60b0b83b68b0b93850b0ca813029703350120fe755e76aae83e75aee4b2e092652afc326503968b0c2ee4b6652ae8727596662ef45667a2752aec36f03af8231cc1048dcd027597801900e780800811466396c50283451500034605008346250003053500a205d18dc2066205558d4d8db775747a9b85a536630cb5047d557e155d0505052334ab000d452330ab00280097c00000e78040c65e8597d00000e780a0c58330812a0334012a833481290339012983398128033a0128833a8127033b0127833b8126033c01261301012b8280a66581e50345810041cd83568105066541667d366385c60289ce63feb6003306d500030606001307f0fb6357c744b68539a03de591a163010544639fd54213b61500b1462e966384d504a546639ad50497756c009385e52b97406b00e780007221e10280b6f75a2bea0c33112f87a6eb58db6ff85a8f29041b631be53bd83c4afe2cb602dcd1c5cec6edd3cfcef01afddbe24a07cb2d45eea5942fba7a424fd42ca63fbb020a2b75bfd79a0016b5606691dcf2c6593fe2507955137092f760ea80c69cdee302b77df55b263c71b71d7d22e20b8d01364cffbb97eaef56b999b9166d6713c8bb02e7192ed2ac673c11a3ddd28c1911d13e2589f00822d98613e7370bf12d22650d02e3507100d8b1fe8329c0d8af3353bfa724bd3c02571136542544d4ea89f2b35202ec6b0f562b8dd5d5b418aff56b34cc793be8876dd074766a98f2c25749234bfc024bfa7fbceb10218cc72660233af7a233ecefa92b67649a66f238ccd45b6ab84f023e8010f256959082421270b8bac54c87c7e9f9597ebd51070bedc7bbfbdd2782023d6d44419d67fb3624a9e3dfc8e738f7ee52f343e51e1a091e74b8c1b86362ef025411c1ca2b3e4297db8cb49ce13522de8e1429863a9580c1ec8277ab01f0a7cd02ac3e38f9cc37a9fa7bd4e2cb4d35d74b476cd6ca05cad0d204e69e663e350340020f9f279211af86568756a1c86f1082001544f2ddfc11619bd90772d1814c2f34020f9f279211af86568756a1c86f1082001544f2ddfc11619bd90772d1814c2f3402991bb6a78e28ed74c7049d50afbb554cf9869919aa44b25824e8a9ef74e2113c02f82d1b66a75f40984a61e730fb75ce8c19eaaa067a8dd0eb4d451de4bce2481900030040000000000000000000000002c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b702c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b702c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b700026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f1111026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f111100022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e2130300022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e213022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e213026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f11110245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a68916380273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a68916380273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a689163802337bf1607964d76140de57e0f2cc4d800789764d72c049d9a9c42a9adec00945027e858d3bdbef0f9f0431f8fcb9637d6224101f9a920669d0c42106d6313e67790247157db0bbc6b8055627a14dddd6e7fd1e8c35aeae7e5f6085aa3cacce88bf2c021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e59602740d82632f6a94268cea42f4126b2c89df51fdf8d6256a4b21d4ddf76031387002740d82632f6a94268cea42f4126b2c89df51fdf8d6256a4b21d4ddf76031387000030040000000000000000000000002c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b702f52a690920af7bc0203a3c426b5a15d6f62f4e05ba9056d5d951b667928d933802f52a690920af7bc0203a3c426b5a15d6f62f4e05ba9056d5d951b667928d9338000297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b280297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b28000248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b03010248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b0248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b0297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b2802b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db02b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db02b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db0225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a510225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a510225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a510251d8722f7637aa28fd105a527910526c1a4d25d1a484d26b8c79efb134250e9a02e0c5e67e68e3e4c91e3ee720d5895f3a03c240082a52cc05c15ecbe124d18fdb02100ea89b87d6ec8eeef59f75f6b991a17b92c3bc64e5f63117e115be72f958c8021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e596021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e596021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e596025481f202be2719721790ba5b00514ded7e07d53f4f23253c490e98e79fa385be0230c85028d866289ef5653373849167731e618b456b9e2a369443e3e828733f9702af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f32620277f9e73414be4b172693bb474564e7f6e38543aeaffb16282cab97dd9c7c2955026878c573f5a8c2ebfc3bf3a7420fbfbd9dd7ba98be3be785b7441152b0f3ccc202216a07ab92c06d198e67a62f51eea1be4f1106127387935bec6b6ae4acaa6cde0271e0a99173564931c0b8acc52d2685a8e39c64dc52e3d02390fdac2a12b155cb0300000000000000000271e0a99173564931c0b8acc52d2685a8e39c64dc52e3d02390fdac2a12b155cb022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e2130300000000 +9eac0b8513dcdafbd7891fd7b4ada0b63ac8afc7008b84f3a46bee48e1ec00460002216a07ab92c06d198e67a62f51eea1be4f1106127387935bec6b6ae4acaa6cde0000030000000000000000d8fdff03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bdc73c75432532814ec2d008761b965a6d8e4193f4e2a3cf4ff2d9701c6c607c02b6a51568f98781dc5dcba462353babe8afe52c41a8d0360217e3a8f41cd910b303569a0300000000000273919af90e1fee9f2c6585e4534a6fa9e04931c0090b9c7ab9e631b16d8c8da00000030000000400000000000000000002042efafbc3f9688dc15b23117f10541c9ed31eaf464f88efcebb845c09cf566f02bb58c3bf498a76411e653a8d3a38fcb3841d3f2648d85a58fdb202f51b3e3fb9028a75a3d8f89ffcaae3052a6dd270c3ff5cd834de076ba37896a7ff7e9a8cc71900027f44821963d2d6d95cd8004ec306c4639ba4f7ed470478701973a9793167df74023ea8ab3d9aa896591dd325312955e3675cedf6b85f0a94b7539c254c1ef2c0a200027a036f53837575ab1b51117294ee446c2858eb3a084cf8ea60dcb50d9e4910960300100000000000002388b7050040af2605106398c6022f27b51875fb9305450005462fa0c502aa841305200613061008854697406b00e7802085aa852685e35db0f8e2604264a2640561828017c593001305a56e97d5bf00138645339305400297000000e7800045397106fc22f826f4800019c90c6110652330050013b515007d15b374c50011a0814417f5bf001305654197606b00e780001c10610c652334c4fc2338b4fc854614e104e51dc6233cc4fc2330b4fe6312d604a1c17d552fb5a5028545631bb502130504fe0f00300297706700e78020460da017f5bf001305653c97606b00e780001797f56800938505ef97f06800e780c0f2e2704274a27421618280aa84130584fc97f06600e780800a268597406a00e780609d411106e422e0000897a06900e780802e7d567e1605066316c500a26002644101828017d6bf001306267a97000000e780e00c011106ec22e800103a88b6872330b4fe2334c4fe97d5bf0013866579930504fe930684fe328797000000e780e04e5d7186e4a2e026fc4af880082e966367b6062a89086193141500637a9604a14563fb950463cc040401c9833589002334b4fc233ca4fc05452338a4fc130504fb8545930684fc268697a06b00e78040b6033504fb0ded033584fb2334a90023309900a6600664e274427961618280b284a145e3e9c5faa144e3d804fa014517e6bf001306663797000000e7802001033584fb833504fce5b7411106e422e0000811e5328597a06b00e78020a397000000e7808000411106e422e000082a862e85b28597400300e7800036597186f4a2f08018930604f0c8ea17f5bf000335453497c26b00e782620217e5bf001305c54597c26b00e782a2ff97000000e780401c597186f4a2f08018930604f0c8ea17f5bf000335e53097c26b00e78202ff17e5bf001305654597c26b00e78242fc97000000e780e018597186f4a2f08018930604f0c8ea17f5bf000335852d97c26b00e782a2fb17e5bf001305054597c26b00e782e2f897000000e7808015597186f4a2f08018930604f0c8ea17f5bf000335252a97c26b00e78242f817e5bf001305a54497c26b00e78282f597000000e7802012411106e422e0000897406c00e78080561d7186eca2e880109705c00003b6a5a1aa851305f4fe233ca4fc2330c4fe17f5bf001305c5932334a4fa05452338a4fa233404fc130684fd233cc4fa2330a4fc130584fa97000000e780600c1d7186eca2e880109705c00003b665beaa851305f4fe233ca4fc2330c4fe17f5bf00130505902334a4fa05452338a4fa233404fc130684fd233cc4fa2330a4fc130584fa97000000e780a007411106e422e000082a8617559400130525fe9305b00297000000e780400d1d7186eca2e880102330a4fa2334b4fa130504fa2330a4fe17556c001305254e2334a4fe17956c00130585982338a4fa0545233ca4fa233804fc930504fe2330b4fc2334a4fc130504fbb28597000000e7808000797106f422f00018233ca4fc2330b4fe05452314a4fe130584fd97b06800e780601e1d7186eca2e88010147518712338d4fc2334e4fc146d18691c6508612330d4fc233ce4fa2338f4fa2334a4fa130584fa233ca4fc2330c4fe230404fea304b4fe130584fd97b06800e780a019000097000000e78060115d7186e4a2e080082330a4fe2334b4fe130504fe2338a4fa0545233ca4fa233804fc21452330a4fc233404fc130504fbb28597000000e78060f55d7186e4a2e080082330a4fe2334b4fe130504fe2338a4fa0545233ca4fa233804fc21452330a4fc233404fc17f5bf0013062580130504fb814597000000e78060f35d7186e4a2e080082330a4fe2334b4fe130504fe2338a4fa0545233ca4fa233804fc21452330a4fc233404fc17e5bf001306857d130504fb854597000000e78040ef597186f4a2f08018930604f0c8ea1705c0000335c593ccee930584f9eceae8ee930504f9ecf2e8f617e5bf001305257bc8f20945c8f6233004fc930504fdccfac8fe130504fab28597000000e78020e8411106e422e00008175594001305e5e39305600297000000e78080f1411106e422e0000817559400130585e49305400297000000e780e0f3011106ec22e80010b2872330a4fe2334b4fe17e5bf001306057617e5bf0013088518930504fe930684fe0145328797000000e780e003011106ec22e80010b2872330a4fe2334b4fe17e5bf001306a57417f5bf001308a58e930504fe930684fe0145328797000000e7808000517186f5a2f1a6edcae98019c2842338b4f0930504f090ed94f198f509c98545631fb500175594001305a5dc29a0175594001305e5db2338a4f2094501a817559400130525db2338a4f21d458c63233ca4f295ed130504f3130604f028fa17556c001305e52128fe130504f148e217556c001305c50748e6930504f24cea48ee17e5bf001305656c48fa0d45b9a8130504f413060003130904f4be8597506b00e780400d130504f3130604f028fa17556c009705c00083b5c5811305e51c28fe233024f94ce6130504f148ea17556c001305e50148ee930504f24cf248f617e5bf001305856948fa1145130604f048fe233804fc930504f76ce268e6130504fba68597000000e78040cd197186fca2f800012330a4f82334b4f82338c4f8233cd4f8130504f82338a4fc17556c0013052515233ca4fc130504f92330a4fe17556c001305c5fa2334a4fe17e5bf001305c5682330a4fa09452334a4fa233004fc930504fd2338b4fa233ca4fa130504faba8597000000e78040c6397106fc22f8800017e5bf001305457e2330a4fc05452334a4fc233004fe21452338a4fc233c04fc17e5bf009305457d130504fc97000000e78080c2411106e422e0000897506c00e780c00d411106e422e0000897506c00e780c012411106e422e0000897506c00e780c017397106fc22f88000aa8517e5bf001305e5792330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e78020bc597186f4a2f080182338a4f817f5bf000335e562233cb4f8930584f92338b4fc233ca4fc930504f92330b4fe2334a4fe17e5bf00130525752330a4fa0d452334a4fa233004fc130504fd2338a4fa0945233ca4fa130504fab28597000000e78000b6397106fc22f88000aa8517e5bf00130565772330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e780a0b2411106e422e0000897306c00e78060cb397106fc22f88000aa8517e5bf00130585312330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e78040ae397106fc22f88000aa8517f5bf001305a5992330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e780e0aa397106fc22f88000aa8517f5bf00130545972330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e78080a7397106fc22f88000aa8517f5bf001305e5942330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e78020a4397106fc22f88000aa8517f5bf00130585922330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e780c0a001112ae406ec97f06a00e780404c97f06a00e780e04b17f3bf00033363140293226597706b00e78020359701c000938121000a8593050000137101ff09a00c4113068500814717f7bf000337e7e597f6bf0083b6e60817f5bf000335e5c617f36a00670003309717c0009387678203c7070029eb05472380e70097f7bf0083b7a7cd85c7411106e417f5bf000335c554829797f7bf0083b7272695c3a2601705a600130565ad4101828797f7bf0083b7a72489cb1705a600130505ac8287a2604101828082809707c0009387777c03c7070015e305472380e70097f7bf0083b7a7cf91cb9705c0009385057b1705a600130585a882878280411106e4086197700000e780200d0145a26041018280411106e4086197700000e780c00b0145a26041018280797106f422f026ec2a840a8597106c00e780004022e81795ae009304a5530a850c08268697f06b00e780001b130514002ae80a850c08268697f06b00e780c019130524002ae80a850c08268697f06b00e7808018130534002ae80a850c08268697f06b00e7804017130544002ae80a850c08268697f06b00e7800016130554002ae80a850c08268697f06b00e780c014130564002ae80a850c08268697f06b00e7808013130574002ae80a850c08268697f06b00e7804012130584002ae80a850c08268697f06b00e7800011130594002ae80a850c08268697f06b00e780c00f1305a4002ae80a850c08268697f06b00e780800e1305b4002ae80a850c08268697f06b00e780400d1305c4002ae80a850c08268697f06b00e780000c1305d4002ae80a850c08268697f06b00e780c00a1305e4002ae80a850c08268697f06b00e78080091305f4002ae80a850c08268697f06b00e7804008130504012ae80a850c08268697f06b00e7800007130514012ae80a850c08268697f06b00e780c005130524012ae80a850c08268697f06b00e7808004130534012ae80a850c08268697f06b00e7804003130544012ae80a850c08268697f06b00e7800002130554012ae80a850c08268697f06b00e780c000130564012ae80a850c08268697f06b00e78080ff130574012ae80a850c08268697f06b00e78040fe130584012ae80a850c08268697f06b00e78000fd130594012ae80a850c08268697f06b00e780c0fb1305a4012ae80a850c08268697f06b00e78080fa1305b4012ae80a850c08268697f06b00e78040f91305c4012ae80a850c08268697f06b00e78000f81305d4012ae80a850c08268697f06b00e780c0f61305e4012ae80a850c08268697f06b00e78080f57d0422e80a850c08268697f06b00e78060f40a8597f06b00e780c00aa2700274e26445618280130101d52334112a2330812a233c9128233821292334312923304129233c5127233861272334712723308127be8b03c487073a89b68ab2892e8a2a8b19c405456316a40003c59b0789a881a817f5bf00033525e483b40b080340050013050002a14597300300e780a0716301055a2a8c886018619064946893858401a813029703350120fe755e76be76233cac002338bc002334cc002330dc0083b58b0823008110a300a11062e6986103b60b0983b68b0993850b0aa813029703350120aaea7e75de753e7683b68b0aaae6aee232fe986203b60b0b83b68b0b93850b0ca813029703350120fe755e76aae83e75aee4b2e092652afc326503968b0c2ee4b6652ae8727596662ef45667a2752aec36f03af8231cc1048dcd027597801900e780800811466396c50283451500034605008346250003053500a205d18dc2066205558d4d8db775747a9b85a536630cb5047d557e155d0505052334ab000d452330ab00280097c00000e78040c65e8597d00000e780a0c58330812a0334012a833481290339012983398128033a0128833a8127033b0127833b8126033c01261301012b8280a66581e50345810041cd83568105066541667d366385c60289ce63feb6003306d500030606001307f0fb6357c744b68539a03de591a163010544639fd54213b61500b1462e966384d504a546639ad50497756c009385e52b97406b00e780007221e10280b6f75a2bea0c33112f87a6eb58db6ff85a8f29041b631be53bd83c4afe2cb602dcd1c5cec6edd3cfcef01afddbe24a07cb2d45eea5942fba7a424fd42ca63fbb020a2b75bfd79a0016b5606691dcf2c6593fe2507955137092f760ea80c69cdee302b77df55b263c71b71d7d22e20b8d01364cffbb97eaef56b999b9166d6713c8bb02e7192ed2ac673c11a3ddd28c1911d13e2589f00822d98613e7370bf12d22650d02e3507100d8b1fe8329c0d8af3353bfa724bd3c02571136542544d4ea89f2b35202ec6b0f562b8dd5d5b418aff56b34cc793be8876dd074766a98f2c25749234bfc024bfa7fbceb10218cc72660233af7a233ecefa92b67649a66f238ccd45b6ab84f023e8010f256959082421270b8bac54c87c7e9f9597ebd51070bedc7bbfbdd2782023d6d44419d67fb3624a9e3dfc8e738f7ee52f343e51e1a091e74b8c1b86362ef025411c1ca2b3e4297db8cb49ce13522de8e1429863a9580c1ec8277ab01f0a7cd02ac3e38f9cc37a9fa7bd4e2cb4d35d74b476cd6ca05cad0d204e69e663e350340020f9f279211af86568756a1c86f1082001544f2ddfc11619bd90772d1814c2f34020f9f279211af86568756a1c86f1082001544f2ddfc11619bd90772d1814c2f3402991bb6a78e28ed74c7049d50afbb554cf9869919aa44b25824e8a9ef74e2113c02f82d1b66a75f40984a61e730fb75ce8c19eaaa067a8dd0eb4d451de4bce2481900030040000000000000000000000002c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b702c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b702c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b700026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f1111026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f111100022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e2130300022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e213022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e213026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f11110245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a68916380273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a68916380273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a689163802337bf1607964d76140de57e0f2cc4d800789764d72c049d9a9c42a9adec00945027e858d3bdbef0f9f0431f8fcb9637d6224101f9a920669d0c42106d6313e67790247157db0bbc6b8055627a14dddd6e7fd1e8c35aeae7e5f6085aa3cacce88bf2c021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e59602740d82632f6a94268cea42f4126b2c89df51fdf8d6256a4b21d4ddf76031387002740d82632f6a94268cea42f4126b2c89df51fdf8d6256a4b21d4ddf76031387000030040000000000000000000000002c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b702f52a690920af7bc0203a3c426b5a15d6f62f4e05ba9056d5d951b667928d933802f52a690920af7bc0203a3c426b5a15d6f62f4e05ba9056d5d951b667928d9338000297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b280297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b28000248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b03010248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b0248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b0297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b2802b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db02b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db02b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db0225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a510225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a510225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a510251d8722f7637aa28fd105a527910526c1a4d25d1a484d26b8c79efb134250e9a02e0c5e67e68e3e4c91e3ee720d5895f3a03c240082a52cc05c15ecbe124d18fdb02100ea89b87d6ec8eeef59f75f6b991a17b92c3bc64e5f63117e115be72f958c8021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e596021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e596021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e596025481f202be2719721790ba5b00514ded7e07d53f4f23253c490e98e79fa385be0230c85028d866289ef5653373849167731e618b456b9e2a369443e3e828733f9702af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262000277f9e73414be4b172693bb474564e7f6e38543aeaffb16282cab97dd9c7c2955026878c573f5a8c2ebfc3bf3a7420fbfbd9dd7ba98be3be785b7441152b0f3ccc20300000000000000000271e0a99173564931c0b8acc52d2685a8e39c64dc52e3d02390fdac2a12b155cb022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e21303000000000271e0a99173564931c0b8acc52d2685a8e39c64dc52e3d02390fdac2a12b155cb diff --git a/pvm/tests/expected/jstz/state_hash_final b/pvm/tests/expected/jstz/state_hash_final index 4fad897d0b..eef05993b5 100644 --- a/pvm/tests/expected/jstz/state_hash_final +++ b/pvm/tests/expected/jstz/state_hash_final @@ -1 +1 @@ -ec1cf0f28ab8a1bded683ffb414094ef27baaf9e4b5d205b4da1dd6726c04efa +6b1645df3d3100c580ac2ac52141d7500e09d63cceadce46a05d3fc3d4cb48e4 diff --git a/pvm/tests/expected/jstz/state_hash_initial b/pvm/tests/expected/jstz/state_hash_initial index 0e2bc65e97..404f1b9d3a 100644 --- a/pvm/tests/expected/jstz/state_hash_initial +++ b/pvm/tests/expected/jstz/state_hash_initial @@ -1 +1 @@ -67d68eab9339ea12b2211a23c40211b7ee62fba6fa6095d44b17b78cca1ce971 +b0c239591381b7e5fd9f075a587cca70f5a4ba9115266958a93c2c77028c5752