diff --git a/noir-projects/noir-protocol-circuits/crates/blob/src/blob.nr b/noir-projects/noir-protocol-circuits/crates/blob/src/blob.nr index 3591145f8afb..997d254f6a16 100644 --- a/noir-projects/noir-protocol-circuits/crates/blob/src/blob.nr +++ b/noir-projects/noir-protocol-circuits/crates/blob/src/blob.nr @@ -482,11 +482,14 @@ mod tests { assert_eq(lhs, rhs); } + // TODO: After reverting some noir changes (see PR#10341) the below no longer works in unconstrained + // This happened previously in commit 893f1eca422d952d672eec75e3c9ff8f149a9ae8 but a sync fixed it. + // It works and passes in constrained, just takes a min longer. #[test] - unconstrained fn test_base() { + fn test_base() { let mut tx_data = FixtureBuilder::new(); // Add some random bits of state - tx_data.append_note_hashes_with_logs(50); + tx_data.append_note_hashes(50); tx_data.set_first_nullifier(); tx_data.append_nullifiers(50); tx_data.append_l2_to_l1_msgs(5); diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/private_base_rollup.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/private_base_rollup.nr index 05eae7394dc2..3aeb7191f62d 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/private_base_rollup.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/private_base_rollup.nr @@ -849,7 +849,7 @@ mod tests { array_concat([TX_FEE_PREFIX, 0], (0).to_be_bytes::<29>()), true, ); - tx_effects[2] = field_from_bytes([NOTES_PREFIX, 0, 50 as u8], true); + tx_effects[2] = encode_blob_prefix(NOTES_PREFIX, 50); for i in 0..50 { tx_effects[i + 3] = builder.tube_data.note_hashes.storage()[i].value(); } diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/public_base_rollup.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/public_base_rollup.nr index ac7e8f9ca1cd..bf927c8f90c4 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/public_base_rollup.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/public_base_rollup.nr @@ -1019,7 +1019,7 @@ mod tests { array_concat([TX_FEE_PREFIX, 0], (0).to_be_bytes::<29>()), true, ); - tx_effects[2] = field_from_bytes([NOTES_PREFIX, 0, 50 as u8], true); + tx_effects[2] = encode_blob_prefix(NOTES_PREFIX, 50); for i in 0..50 { tx_effects[i + 3] = builder.avm_data.note_hashes.storage()[i].value(); } diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/block_root/block_root_rollup_inputs.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/block_root/block_root_rollup_inputs.nr index 8cfecfe55d8d..4f328d31e410 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/block_root/block_root_rollup_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/block_root/block_root_rollup_inputs.nr @@ -156,7 +156,7 @@ impl BlockRootRollupInputs { previous_block_hash: self.previous_block_hash, end_block_hash: block_hash, // current newest block hash = this block hash start_global_variables: left.constants.global_variables, // we have asserted that left.constants == right.constants => ... - end_global_variables: left.constants.global_variables, // with a current block range of 1, we only have 1 set of constants + end_global_variables: left.constants.global_variables, // ...with a current block range of 1, we only have 1 set of constants out_hash: content_commitment.out_hash, fees: fee_arr, vk_tree_root: left.constants.vk_tree_root, diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction.rs b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction.rs index f606fffbf91e..2cd6ca543bfc 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction.rs @@ -315,7 +315,12 @@ pub(crate) enum Instruction { /// else_value /// } /// ``` - IfElse { then_condition: ValueId, then_value: ValueId, else_value: ValueId }, + IfElse { + then_condition: ValueId, + then_value: ValueId, + else_condition: ValueId, + else_value: ValueId, + }, /// Creates a new array or slice. /// @@ -608,11 +613,14 @@ impl Instruction { assert_message: assert_message.clone(), } } - Instruction::IfElse { then_condition, then_value, else_value } => Instruction::IfElse { - then_condition: f(*then_condition), - then_value: f(*then_value), - else_value: f(*else_value), - }, + Instruction::IfElse { then_condition, then_value, else_condition, else_value } => { + Instruction::IfElse { + then_condition: f(*then_condition), + then_value: f(*then_value), + else_condition: f(*else_condition), + else_value: f(*else_value), + } + } Instruction::MakeArray { elements, typ } => Instruction::MakeArray { elements: elements.iter().copied().map(f).collect(), typ: typ.clone(), @@ -671,9 +679,10 @@ impl Instruction { | Instruction::RangeCheck { value, .. } => { f(*value); } - Instruction::IfElse { then_condition, then_value, else_value } => { + Instruction::IfElse { then_condition, then_value, else_condition, else_value } => { f(*then_condition); f(*then_value); + f(*else_condition); f(*else_value); } Instruction::MakeArray { elements, typ: _ } => { @@ -836,7 +845,7 @@ impl Instruction { None } } - Instruction::IfElse { then_condition, then_value, else_value } => { + Instruction::IfElse { then_condition, then_value, else_condition, else_value } => { let typ = dfg.type_of_value(*then_value); if let Some(constant) = dfg.get_numeric_constant(*then_condition) { @@ -855,11 +864,13 @@ impl Instruction { if matches!(&typ, Type::Numeric(_)) { let then_condition = *then_condition; + let else_condition = *else_condition; let result = ValueMerger::merge_numeric_values( dfg, block, then_condition, + else_condition, then_value, else_value, ); diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction/call.rs b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction/call.rs index 67222d06ea8d..cea10cd3cdf9 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction/call.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction/call.rs @@ -455,8 +455,12 @@ fn simplify_slice_push_back( let mut value_merger = ValueMerger::new(dfg, block, &mut slice_sizes, unknown, None, call_stack); - let new_slice = - value_merger.merge_values(len_not_equals_capacity, set_last_slice_value, new_slice); + let new_slice = value_merger.merge_values( + len_not_equals_capacity, + len_equals_capacity, + set_last_slice_value, + new_slice, + ); SimplifyResult::SimplifiedToMultiple(vec![new_slice_length, new_slice]) } diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/printer.rs b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/printer.rs index 6bebd21fe61e..24dc4dc8b7ce 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/printer.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/printer.rs @@ -209,11 +209,15 @@ fn display_instruction_inner( Instruction::RangeCheck { value, max_bit_size, .. } => { writeln!(f, "range_check {} to {} bits", show(*value), *max_bit_size,) } - Instruction::IfElse { then_condition, then_value, else_value } => { + Instruction::IfElse { then_condition, then_value, else_condition, else_value } => { let then_condition = show(*then_condition); let then_value = show(*then_value); + let else_condition = show(*else_condition); let else_value = show(*else_value); - writeln!(f, "if {then_condition} then {then_value} else {else_value}") + writeln!( + f, + "if {then_condition} then {then_value} else if {else_condition} then {else_value}" + ) } Instruction::MakeArray { elements, typ } => { write!(f, "make_array [")?; diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs index 5d114672a556..a2b8e20d20f5 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs @@ -447,16 +447,6 @@ impl<'f> Context<'f> { }; self.condition_stack.push(cond_context); self.insert_current_side_effects_enabled(); - - // We disallow this case as it results in the `else_destination` block - // being inlined before the `then_destination` block due to block deduplication in the work queue. - // - // The `else_destination` block then gets treated as if it were the `then_destination` block - // and has the incorrect condition applied to it. - assert_ne!( - self.branch_ends[if_entry], *then_destination, - "ICE: branches merge inside of `then` branch" - ); vec![self.branch_ends[if_entry], *else_destination, *then_destination] } @@ -570,6 +560,7 @@ impl<'f> Context<'f> { let instruction = Instruction::IfElse { then_condition: cond_context.then_branch.condition, then_value: then_arg, + else_condition: cond_context.else_branch.as_ref().unwrap().condition, else_value: else_arg, }; let call_stack = cond_context.call_stack.clone(); @@ -665,6 +656,11 @@ impl<'f> Context<'f> { } let then_condition = then_branch.condition; + let else_condition = if let Some(branch) = else_branch { + branch.condition + } else { + self.inserter.function.dfg.make_constant(FieldElement::zero(), Type::bool()) + }; let block = self.inserter.function.entry_block(); // Merging must occur in a separate loop as we cannot borrow `self` as mutable while `value_merger` does @@ -673,6 +669,7 @@ impl<'f> Context<'f> { let instruction = Instruction::IfElse { then_condition, then_value: *then_case, + else_condition, else_value: *else_case, }; let dfg = &mut self.inserter.function.dfg; @@ -921,7 +918,7 @@ impl<'f> Context<'f> { mod test { use std::sync::Arc; - use acvm::{acir::AcirField, FieldElement}; + use acvm::acir::AcirField; use crate::ssa::{ function_builder::FunctionBuilder, @@ -961,9 +958,11 @@ mod test { v1 = not v0 enable_side_effects u1 1 v3 = cast v0 as Field - v5 = mul v3, Field -1 - v7 = add Field 4, v5 - return v7 + v4 = cast v1 as Field + v6 = mul v3, Field 3 + v8 = mul v4, Field 4 + v9 = add v6, v8 + return v9 } "; @@ -1028,10 +1027,11 @@ mod test { store v2 at v1 enable_side_effects u1 1 v6 = cast v0 as Field - v7 = sub Field 5, v2 - v8 = mul v6, v7 - v9 = add v2, v8 - store v9 at v1 + v7 = cast v4 as Field + v8 = mul v6, Field 5 + v9 = mul v7, v2 + v10 = add v8, v9 + store v10 at v1 return } "; @@ -1070,9 +1070,11 @@ mod test { store Field 6 at v1 enable_side_effects u1 1 v8 = cast v0 as Field - v10 = mul v8, Field -1 - v11 = add Field 6, v10 - store v11 at v1 + v9 = cast v4 as Field + v10 = mul v8, Field 5 + v11 = mul v9, Field 6 + v12 = add v10, v11 + store v12 at v1 return } "; @@ -1115,84 +1117,123 @@ mod test { // b7 b8 // ↘ ↙ // b9 - let src = " - acir(inline) fn main f0 { - b0(v0: u1, v1: u1): - v2 = allocate -> &mut Field - store Field 0 at v2 - v4 = load v2 -> Field - // call v1(Field 0, v4) - jmp b1() - b1(): - store Field 1 at v2 - v6 = load v2 -> Field - // call v1(Field 1, v6) - jmpif v0 then: b2, else: b3 - b2(): - store Field 2 at v2 - v8 = load v2 -> Field - // call v1(Field 2, v8) - jmp b4() - b4(): - v12 = load v2 -> Field - // call v1(Field 4, v12) - jmpif v1 then: b5, else: b6 - b5(): - store Field 5 at v2 - v14 = load v2 -> Field - // call v1(Field 5, v14) - jmp b7() - b7(): - v18 = load v2 -> Field - // call v1(Field 7, v18) - jmp b9() - b9(): - v22 = load v2 -> Field - // call v1(Field 9, v22) - v23 = load v2 -> Field - return v23 - b6(): - store Field 6 at v2 - v16 = load v2 -> Field - // call v1(Field 6, v16) - jmp b7() - b3(): - store Field 3 at v2 - v10 = load v2 -> Field - // call v1(Field 3, v10) - jmp b8() - b8(): - v20 = load v2 -> Field - // call v1(Field 8, v20) - jmp b9() - } - "; + let main_id = Id::test_new(0); + let mut builder = FunctionBuilder::new("main".into(), main_id); - let ssa = Ssa::from_str(src).unwrap(); - let ssa = ssa.flatten_cfg().mem2reg(); + let b1 = builder.insert_block(); + let b2 = builder.insert_block(); + let b3 = builder.insert_block(); + let b4 = builder.insert_block(); + let b5 = builder.insert_block(); + let b6 = builder.insert_block(); + let b7 = builder.insert_block(); + let b8 = builder.insert_block(); + let b9 = builder.insert_block(); + + let c1 = builder.add_parameter(Type::bool()); + let c4 = builder.add_parameter(Type::bool()); + + let r1 = builder.insert_allocate(Type::field()); + + let store_value = |builder: &mut FunctionBuilder, value: u128| { + let value = builder.field_constant(value); + builder.insert_store(r1, value); + }; + + let test_function = Id::test_new(1); + + let call_test_function = |builder: &mut FunctionBuilder, block: u128| { + let block = builder.field_constant(block); + let load = builder.insert_load(r1, Type::field()); + builder.insert_call(test_function, vec![block, load], Vec::new()); + }; + + let switch_store_and_test_function = + |builder: &mut FunctionBuilder, block, block_number: u128| { + builder.switch_to_block(block); + store_value(builder, block_number); + call_test_function(builder, block_number); + }; + + let switch_and_test_function = + |builder: &mut FunctionBuilder, block, block_number: u128| { + builder.switch_to_block(block); + call_test_function(builder, block_number); + }; + + store_value(&mut builder, 0); + call_test_function(&mut builder, 0); + builder.terminate_with_jmp(b1, vec![]); + + switch_store_and_test_function(&mut builder, b1, 1); + builder.terminate_with_jmpif(c1, b2, b3); + + switch_store_and_test_function(&mut builder, b2, 2); + builder.terminate_with_jmp(b4, vec![]); + + switch_store_and_test_function(&mut builder, b3, 3); + builder.terminate_with_jmp(b8, vec![]); + + switch_and_test_function(&mut builder, b4, 4); + builder.terminate_with_jmpif(c4, b5, b6); + + switch_store_and_test_function(&mut builder, b5, 5); + builder.terminate_with_jmp(b7, vec![]); + + switch_store_and_test_function(&mut builder, b6, 6); + builder.terminate_with_jmp(b7, vec![]); + + switch_and_test_function(&mut builder, b7, 7); + builder.terminate_with_jmp(b9, vec![]); + + switch_and_test_function(&mut builder, b8, 8); + builder.terminate_with_jmp(b9, vec![]); + + switch_and_test_function(&mut builder, b9, 9); + let load = builder.insert_load(r1, Type::field()); + builder.terminate_with_return(vec![load]); + + let ssa = builder.finish().flatten_cfg().mem2reg(); // Expected results after mem2reg removes the allocation and each load and store: - let expected = " - acir(inline) fn main f0 { - b0(v0: u1, v1: u1): - v2 = allocate -> &mut Field - enable_side_effects v0 - v3 = mul v0, v1 - enable_side_effects v3 - v4 = not v1 - v5 = mul v0, v4 - enable_side_effects v0 - v6 = cast v3 as Field - v8 = mul v6, Field -1 - v10 = add Field 6, v8 - v11 = not v0 - enable_side_effects u1 1 - v13 = cast v0 as Field - v15 = sub v10, Field 3 - v16 = mul v13, v15 - v17 = add Field 3, v16 - return v17 - }"; + // + // fn main f0 { + // b0(v0: u1, v1: u1): + // call test_function(Field 0, Field 0) + // call test_function(Field 1, Field 1) + // enable_side_effects v0 + // call test_function(Field 2, Field 2) + // call test_function(Field 4, Field 2) + // v29 = and v0, v1 + // enable_side_effects v29 + // call test_function(Field 5, Field 5) + // v32 = not v1 + // v33 = and v0, v32 + // enable_side_effects v33 + // call test_function(Field 6, Field 6) + // enable_side_effects v0 + // v36 = mul v1, Field 5 + // v37 = mul v32, Field 2 + // v38 = add v36, v37 + // v39 = mul v1, Field 5 + // v40 = mul v32, Field 6 + // v41 = add v39, v40 + // call test_function(Field 7, v42) + // v43 = not v0 + // enable_side_effects v43 + // store Field 3 at v2 + // call test_function(Field 3, Field 3) + // call test_function(Field 8, Field 3) + // enable_side_effects Field 1 + // v47 = mul v0, v41 + // v48 = mul v43, Field 1 + // v49 = add v47, v48 + // v50 = mul v0, v44 + // v51 = mul v43, Field 3 + // v52 = add v50, v51 + // call test_function(Field 9, v53) + // return v54 + // } let main = ssa.main(); let ret = match main.dfg[main.entry_block()].terminator() { @@ -1201,12 +1242,7 @@ mod test { }; let merged_values = get_all_constants_reachable_from_instruction(&main.dfg, ret); - assert_eq!( - merged_values, - vec![FieldElement::from(3u128), FieldElement::from(6u128), -FieldElement::from(1u128)] - ); - - assert_normalized_ssa_equals(ssa, expected); + assert_eq!(merged_values, vec![3, 5, 6]); } #[test] @@ -1287,7 +1323,7 @@ mod test { fn get_all_constants_reachable_from_instruction( dfg: &DataFlowGraph, value: ValueId, - ) -> Vec { + ) -> Vec { match dfg[value] { Value::Instruction { instruction, .. } => { let mut values = vec![]; @@ -1305,7 +1341,7 @@ mod test { values.dedup(); values } - Value::NumericConstant { constant, .. } => vec![constant], + Value::NumericConstant { constant, .. } => vec![constant.to_u128()], _ => Vec::new(), } } @@ -1536,23 +1572,4 @@ mod test { _ => unreachable!("Should have terminator instruction"), } } - - #[test] - #[should_panic = "ICE: branches merge inside of `then` branch"] - fn panics_if_branches_merge_within_then_branch() { - //! This is a regression test for https://github.com/noir-lang/noir/issues/6620 - - let src = " - acir(inline) fn main f0 { - b0(v0: u1): - jmpif v0 then: b2, else: b1 - b2(): - return - b1(): - jmp b2() - } - "; - let merged_ssa = Ssa::from_str(src).unwrap(); - let _ = merged_ssa.flatten_cfg(); - } } diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg/value_merger.rs b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg/value_merger.rs index 8ea26d4e96d4..bee58278aa81 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg/value_merger.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg/value_merger.rs @@ -45,7 +45,7 @@ impl<'a> ValueMerger<'a> { /// Merge two values a and b from separate basic blocks to a single value. /// If these two values are numeric, the result will be - /// `then_condition * (then_value - else_value) + else_value`. + /// `then_condition * then_value + else_condition * else_value`. /// Otherwise, if the values being merged are arrays, a new array will be made /// recursively from combining each element of both input arrays. /// @@ -54,6 +54,7 @@ impl<'a> ValueMerger<'a> { pub(crate) fn merge_values( &mut self, then_condition: ValueId, + else_condition: ValueId, then_value: ValueId, else_value: ValueId, ) -> ValueId { @@ -69,14 +70,15 @@ impl<'a> ValueMerger<'a> { self.dfg, self.block, then_condition, + else_condition, then_value, else_value, ), typ @ Type::Array(_, _) => { - self.merge_array_values(typ, then_condition, then_value, else_value) + self.merge_array_values(typ, then_condition, else_condition, then_value, else_value) } typ @ Type::Slice(_) => { - self.merge_slice_values(typ, then_condition, then_value, else_value) + self.merge_slice_values(typ, then_condition, else_condition, then_value, else_value) } Type::Reference(_) => panic!("Cannot return references from an if expression"), Type::Function => panic!("Cannot return functions from an if expression"), @@ -84,11 +86,12 @@ impl<'a> ValueMerger<'a> { } /// Merge two numeric values a and b from separate basic blocks to a single value. This - /// function would return the result of `if c { a } else { b }` as `c * (a-b) + b`. + /// function would return the result of `if c { a } else { b }` as `c*a + (!c)*b`. pub(crate) fn merge_numeric_values( dfg: &mut DataFlowGraph, block: BasicBlockId, then_condition: ValueId, + else_condition: ValueId, then_value: ValueId, else_value: ValueId, ) -> ValueId { @@ -111,38 +114,31 @@ impl<'a> ValueMerger<'a> { // We must cast the bool conditions to the actual numeric type used by each value. let then_condition = dfg .insert_instruction_and_results( - Instruction::Cast(then_condition, Type::field()), + Instruction::Cast(then_condition, then_type), block, None, call_stack.clone(), ) .first(); - - let then_field = Instruction::Cast(then_value, Type::field()); - let then_field_value = - dfg.insert_instruction_and_results(then_field, block, None, call_stack.clone()).first(); - - let else_field = Instruction::Cast(else_value, Type::field()); - let else_field_value = - dfg.insert_instruction_and_results(else_field, block, None, call_stack.clone()).first(); - - let diff = Instruction::binary(BinaryOp::Sub, then_field_value, else_field_value); - let diff_value = - dfg.insert_instruction_and_results(diff, block, None, call_stack.clone()).first(); - - let conditional_diff = Instruction::binary(BinaryOp::Mul, then_condition, diff_value); - let conditional_diff_value = dfg - .insert_instruction_and_results(conditional_diff, block, None, call_stack.clone()) + let else_condition = dfg + .insert_instruction_and_results( + Instruction::Cast(else_condition, else_type), + block, + None, + call_stack.clone(), + ) .first(); - let merged_field = - Instruction::binary(BinaryOp::Add, else_field_value, conditional_diff_value); - let merged_field_value = dfg - .insert_instruction_and_results(merged_field, block, None, call_stack.clone()) - .first(); + let mul = Instruction::binary(BinaryOp::Mul, then_condition, then_value); + let then_value = + dfg.insert_instruction_and_results(mul, block, None, call_stack.clone()).first(); + + let mul = Instruction::binary(BinaryOp::Mul, else_condition, else_value); + let else_value = + dfg.insert_instruction_and_results(mul, block, None, call_stack.clone()).first(); - let merged = Instruction::Cast(merged_field_value, then_type); - dfg.insert_instruction_and_results(merged, block, None, call_stack).first() + let add = Instruction::binary(BinaryOp::Add, then_value, else_value); + dfg.insert_instruction_and_results(add, block, None, call_stack).first() } /// Given an if expression that returns an array: `if c { array1 } else { array2 }`, @@ -152,6 +148,7 @@ impl<'a> ValueMerger<'a> { &mut self, typ: Type, then_condition: ValueId, + else_condition: ValueId, then_value: ValueId, else_value: ValueId, ) -> ValueId { @@ -166,6 +163,7 @@ impl<'a> ValueMerger<'a> { if let Some(result) = self.try_merge_only_changed_indices( then_condition, + else_condition, then_value, else_value, actual_length, @@ -195,7 +193,12 @@ impl<'a> ValueMerger<'a> { let then_element = get_element(then_value, typevars.clone()); let else_element = get_element(else_value, typevars); - merged.push_back(self.merge_values(then_condition, then_element, else_element)); + merged.push_back(self.merge_values( + then_condition, + else_condition, + then_element, + else_element, + )); } } @@ -208,6 +211,7 @@ impl<'a> ValueMerger<'a> { &mut self, typ: Type, then_condition: ValueId, + else_condition: ValueId, then_value_id: ValueId, else_value_id: ValueId, ) -> ValueId { @@ -265,7 +269,12 @@ impl<'a> ValueMerger<'a> { let else_element = get_element(else_value_id, typevars, else_len * element_types.len()); - merged.push_back(self.merge_values(then_condition, then_element, else_element)); + merged.push_back(self.merge_values( + then_condition, + else_condition, + then_element, + else_element, + )); } } @@ -314,6 +323,7 @@ impl<'a> ValueMerger<'a> { fn try_merge_only_changed_indices( &mut self, then_condition: ValueId, + else_condition: ValueId, then_value: ValueId, else_value: ValueId, array_length: usize, @@ -397,7 +407,8 @@ impl<'a> ValueMerger<'a> { let then_element = get_element(then_value, typevars.clone()); let else_element = get_element(else_value, typevars); - let value = self.merge_values(then_condition, then_element, else_element); + let value = + self.merge_values(then_condition, else_condition, then_element, else_element); array = self.insert_array_set(array, index, value, Some(condition)).first(); } diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/remove_if_else.rs b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/remove_if_else.rs index 8e25c3f0a35a..e79517b67827 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/remove_if_else.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/remove_if_else.rs @@ -66,9 +66,10 @@ impl Context { for instruction in instructions { match &function.dfg[instruction] { - Instruction::IfElse { then_condition, then_value, else_value } => { + Instruction::IfElse { then_condition, then_value, else_condition, else_value } => { let then_condition = *then_condition; let then_value = *then_value; + let else_condition = *else_condition; let else_value = *else_value; let typ = function.dfg.type_of_value(then_value); @@ -84,7 +85,12 @@ impl Context { call_stack, ); - let value = value_merger.merge_values(then_condition, then_value, else_value); + let value = value_merger.merge_values( + then_condition, + else_condition, + then_value, + else_value, + ); let _typ = function.dfg.type_of_value(value); let results = function.dfg.instruction_results(instruction); diff --git a/yarn-project/end-to-end/src/fixtures/dumps/epoch_proof_result.json b/yarn-project/end-to-end/src/fixtures/dumps/epoch_proof_result.json index e63211405d3d..894bd6b3b79b 100644 --- a/yarn-project/end-to-end/src/fixtures/dumps/epoch_proof_result.json +++ b/yarn-project/end-to-end/src/fixtures/dumps/epoch_proof_result.json @@ -1 +1 @@ -{"proof":"0x00008b640000045b0000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000000114dbb5ceb242d62d79cdf71705a6e56dfbc7678c4050f694f49d2d37cb6b4325000000000000000000000000000000000000000000000000000000000000000224ea389a21363dc394add32d7d09d1d5a6af047848d9f0c756c7af2358f745b4000000000000000000000000000000000000000000000000000000000000000408768eaa02a2ea49ecf02c4486e40089e18da9574903f3cd171d2d3fe401222c05a8128b8d55768d8850d24611497beed9bb0e33fc43a2135fcc79f028653002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f1d59ed909d79632cc0baec79289c060cebe98ab8024bb4259620a96b7c7d0e21055565154d81bf243f21a818fc3265eb3a0fb1564f3a932e8e87808c52da2900000000000000000000000000000000000000000000000000000000000000000ac4f3ee53aedc4865073ae7fb664e7401d10eadbe3bbcc266c35059f14826bb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac4f3ee53aedc4865073ae7fb664e7401d10eadbe3bbcc266c35059f14826bb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bf4d18b6005ccb3a2000000000000000000000000000000000000000000000000ef9262e09bddf4b0000000000000000000000000000000000000000000000006605e504418ee9f500000000000000000000000000000000000000000000000000001d5432c6f2dba00000000000000000000000000000000000000000000000ef798991ee0c2326300000000000000000000000000000000000000000000000355cec386790a611c00000000000000000000000000000000000000000000000711db5ce013fa95d500000000000000000000000000000000000000000000000000027682aff48e65000000000000000000000000000000000000000000000003e7b506b207827a7b00000000000000000000000000000000000000000000000824a721ca94f7a73e0000000000000000000000000000000000000000000000090adb989409c730c9000000000000000000000000000000000000000000000000000215bb71612c47000000000000000000000000000000000000000000000001aa3d969538df9c5f000000000000000000000000000000000000000000000001af7fc9463eca7d3000000000000000000000000000000000000000000000000d31962aa8daeab74a00000000000000000000000000000000000000000000000000004e60e5ddda600000000000000000000000000000003881e09d48ce069505f5c274f9139a37630000000000000000000000000000000000015dffc6374595fc1268f978430853000000000000000000000000000000b0f90e22b5f89a6ea5ba1769edde0c90d5000000000000000000000000000000000008d897ccd64e66252e7ff214e8510c000000000000000000000000000000c9a9e524481d2353f71f9aa3884d2afb3d0000000000000000000000000000000000152a0a0d10f6ccc8e8cb42dc397cde00000000000000000000000000000019eea60ba36735e6e953685448380b59c6000000000000000000000000000000000013e3f2d8f08a6548f8620263f22a76000000000000000000000000000000b6baa864359e74a2f081c1a9bd38068b8e0000000000000000000000000000000000176c8004fdb73d19aaca9ee5ebcc24000000000000000000000000000000d811da28b24015c0609cd0371b19e4fdda000000000000000000000000000000000004e45d40802f7e8caaf5332af4503500000000000000000000000000000096650cbf350fd79e4e21a3a53f084e5359000000000000000000000000000000000025e86237c45eeb6939f852e4019e10000000000000000000000000000000870ec61adc23bc1294a793de7d329135e300000000000000000000000000000000000d59e4f667228b55d76d57b80cbb4a000000000000000000000000000000dfa123d263c27f5e0a447510bbbf014a24000000000000000000000000000000000014c0e9197abcac09fcca8aa3f56231000000000000000000000000000000693200aaa7a1cf111060bfd9649742812e00000000000000000000000000000000000a64ac6619042e406467e1ef5c7d8000000000000000000000000000000095b549de30dc82f274db63243fba94e243000000000000000000000000000000000014e04c1390602b6d827cd67dfbb50c000000000000000000000000000000c47931eace96522cfca0855a0dcc2d063600000000000000000000000000000000000124dfb4127245da26c767e834b5b5000000000000000000000000000000e281e1087a3aef1ea1ce93da4d22b585eb00000000000000000000000000000000001e22e7394257edb372960c386a8e210000000000000000000000000000001c0af0cd9d8946a3033d650d975877813800000000000000000000000000000000000ec2cf6820125d25214b46ab55dfbc000000000000000000000000000000467905e76a34283a277b9b8dcce71e2c210000000000000000000000000000000000042ed60453407583ebbcfc0b1c208d000000000000000000000000000000b818dbeb8214b760156c4147058f789ed6000000000000000000000000000000000019c726591df8b21de05b78c1dc01890ebf7c2015626f39e22ee0984e9ffd43d474958e46dc3026707c9030e1e89aab21a4d252cbcf30efd621651e32e15b1953bf52ba32dd406ad36565630e1765562d6c83554e7dee09c993a3cf5522f32a471d308aa9377a242d51266463452ff5184df8379db0c24e3fa6db44a230a0ef8c50cc31c786c23eb4f3107acafb2ed302c14ef2963f79fb73ec7a14335b72c5f3a3362ad9fd04f5c03fd112f2688ca31632fe68ff6cbf53f02216388d7400a4c35e94fa428c3ac12bcf31607808eccd2aeb3981606b0de38c361be86f332a5515eadc3a58e0b1e628153159bac15d5f286578cae521e1b324668c7a28565456c4e528044f7dd42e0dc2e84074c5c76420219a06960e0b86c8a29f58068495c0882514774361ddf19db896949371d2b104322bf95dc39248944d18c189bcffea2e9eafdd5592f02a4e2a6469f77e08f5192f890af67ff92cc79e33d6fcf2198c125821442fa0b639e4023bcb42842cb227e35fc6eb976891d5010d30f397097d875b4429f7e324768f41afae275c6bff1a14e5a29a2da7ede94f506e01018c6eee8d51248dd066a0c3e67a0103859809031eeb55792051f00c3c938dded7cfef22ab2436b2b45fb43c380c3fbc373976222daa0102d0701a0a3bddfd896347cd9a27bfd36d68eac931c196b86bd5b80e1a37616d845b6d773b65eb4103779d6aa86456cc52ca3c91f2f8d5ed6603851f04a82221ad1025939a048acb2e9b4b6e65d04046cb6352e32dffcb7b46a21ee0075891c58cae50fe087829032b13a3e4ded5a8465b31c6d81e7250fa2f1bc74809e52d380fa33ddfee9a3afe86f8a8d2a149f7ca466a0a3e481fdeef0bd91b6e1f6098c0cf670e65225994f2be34a8c4ebc1cc1553cfec73f589906bb7147b5d2fddcf937edae310fc23ba11cc5f0359fa520484b794e52fc1c4ec2ac957da1103fdf85477937a9c426ad1aec91426c27ad8118a7db49b9c1057596f841edeb9165df84a7affe038a67aa1c935582084473d516ff4833cb991d224baa2dad2071edfe1626a256f30dd0acf17a0db3ad72f385c671481b48de4dc3c1fda7ad7461632e9699716a7c81460e7e431938d4a9182b483fd7304bc9d74198ac13bd9bb139e6acac639cc6218c7da7ab7aabb2d688c5baf38800b43784e24f054dc9dd91d1b291c25b6fea13b0e5ad769d71f6259d98efc1bd1d143070d815ec8d8e2cb2253b0f66fb893accfce56f8f6e8a1b945b26fa92dce86e6d85a0e821b823e361c1b370474995727b1c7b19c4cc8003c3b39917f2f11617c7d6f7bbaacfbff422010d8d90bf542f08bb8e95bd7f85c25f720355ff92d6d61af0a7ee7e9450fbf0b00f0a4ad1c64a4d19f44530cc7b9da741157725d3cd9ff875051c6b53f6dbd192445d0b96d553d93464421ca24dc02c8c743a40a29f8fa1c8779f6fcbc31b92885197e4635c3522894c2e31c7945636c86cea6c61f664c6ae645901222077625fa8f58f239dfb76df3f174a0ad17c43f5aac24ed79d3b53933ca78134bd5b407f64a634d8c3f43178929a8e0829cb24ca3e9f27b8ff2cded419249edf6aa1c2c07a1ac0a569d5c517831f16a955f554b3686d63ad3efbda024cf159a54d5de0ddc92367e3d90ba1a207b3434973c0cc344120e1b93fdb1110f43b1f5ab3b3b1f75ce2998d2b2af19df12f7b23fac6b72bd5666af45c2d8d7d7a4d4338c01ca07b77d6a79f8eec071d445e2e174e2bf539934cc248e70e46d1092e5d2184d8c2ecb27add0f026b40612ee87cee96091bf1d85401d98f5eaf06f4cdc663d9d432293e53dbc291fc3718626aae099a03c932f28b30ebd46bdcfc381986315d82109674745aa74e8e23cb5bc2678648d4d81bc59f4b73ec32a8dd88925253c9b7e01622987830d9c80972221cde7f1922c5b23195a2afd5e910db191b23d172d1c035e9160dc81bf970d1aea0476ca4c21ad3168e1c0c55336a0fe9ffcddcf2770150f492f7858c0336d0a836e941b6fcafd78c9aaabbb2124d1811234eacd70f226f05a75ba4ef2a9b8ef821bc48048609c9977b743ef128fdc9f95eddd09dbd529269043ea04f89cf7b3b019e97da982fdfa8f8990d8a6ea14c3423e14fa2795092003766b094875f25ffcfd6a18502c9962db38ed571dd68708aea70743e18f1d638e11c6a8ef91c74cd6e5781f87323f77ff1ad99fd68859fb1499d26d23300ee32c7a031bedbb6f00b358f9752c03544b10a6e323cdb2d528abd64ab3c08b23307c8f432383a6cacd20f909c095960c266c9440282469621268885214264d1716398689af521b71b5de0e76936f4541ffa3b8a6586430df95222b2895d65707c1e0df55ad7a1ebfeebe6ccb5d0d3f45759caee877fb6944f907dfb2992c1e15d15146aee835cff72479218c8cbaa8df635ec4ca9eeb0701e3172dba19b88f1d9e401b0ce7832f8b1c497ad28beae79681d99925b8c980c2d9e4a509a777031d737db510005f61bb8d2950e414dc7d18e92b1b112a94dd42ba1f0696d332ba1d54776349272d16a41f80db79f2de041f8539125baad71db7f8b8f47ea7393203abadc7f04bcf4c520b888dccee1ddf0a3efa93052ab7337f1c081743a061bb0f2a01967e92b317e3c7ea9df8edebcbd1a6bce0a55283dd0d47e73a3ecab06d14fe5c6bbd183d3739d5e1776e601dd5f7595d07a8c1731a5e1d6f709c324d13019fd2cb10cf9d032bad466b229601e139b18aed346e9242b46fb557b1e31f3706b6d52c200d82035e3f9ef375cccd0d704703aa6c6722cdf54b25eac522c25123661a4a10dce48b3859e792ebdf6615a85c23284fbd495ed562a5cf5e96fa86216e832085aa56d406e33320b4a4b5321678fba57b704e305b133ca7e388c8e328c293494ae5cd99da731f3daaa6c64b2eaba8b2e9f3916576250a12238bda4c0f5e126a548941abdd3570338b504aaac7360d4e5afc1ed796b94216bfa8c506037b51d45ba9409987b1964b55bc6349641c54d663d8540760ef2f75009d54a922d472d8734705df8d52e1940d8b4cd5aff91bfc0a16c5b97ad7fcd2fb660ad826fb732aa56a6af348599318b3005da2cb16f6d421870a479e7d305d013a7b1d1ba9c3e0aa098337feda0d3dccfc9aceb72989e16f879b94e52efcf10f2fff520b9b37960af6126a493ee8eae8ad4d9ec2f88022b24eb83924014df7fb9825621716a43e80903885fb85ce81dbbe0de4119757bfe02f85846c01dc9dd005c41d18555e69f6413f89eebfdc6b3f4ec5f761f69f0e1ae5d80a8084ddafc1a9001c2128dbbd55afb83e26a4f9b6bf2ed2f73e806ffd6691cf7ec32c5dcb9ca484902e051c2bb3265eb5f8d43a43cbe546e7a5b942bc7dabd333369a71a6f74834412cf1775e9a610b2f590e4bc9c72f6dea39ed0fa4418ef7301c69c1a088e7c79c22f1366e4dfb75c6e420868c05e05e8083eff65c886e060aa2eac6e47371d90b2008941ed16b003229463db9d62debc5921bd99eea329b92ddd9ba3a7cec96900f55528f14355a4041fac36d2067e8bb2a1a230db43a0863bd9d1bf1545c27501b24bbb5bc87de60d5008fb7c548b1ecb3caea56a56eba690f2a8409306489c70eb589d34125f0cbae1189174019dc541ddd8b26b56b00883f9a6127733898b00b534460c0df55ef3374fdb94cc98b6c78aec584c364f985e7333a72e8662f481726b49d1af6722eb0785a76c7398b7a9e0b4438165960e82669377715b99edc11609c6c4de2a03e206a953ce9a409413c413433badb0db86a1534f5e282d6060fd5e6df3a66bb250fb68002e268c0a56d2e8cf88f172642deb574d4cb2362812beb06f823ba4a30762a8abc1681e4f40e95caf7a9e37c0e5a7b6a54780d914f1aa25d18502323cac07f1de6d0f5f6ae752e80813449e7e9c195d896e58b45d82969bc686b5bb5db6e5182ccbd6fc9fb7b729f1b7da4a6a9c58b5b97ac32726428661f62d8c2f75db7780650fb672f5c62b242915815d6457fb74963bbf2cde82492c5cf0f6f359ec16cd0f105f2f004180254d4352130de71b129794b06fb841a781eb84ec75ec2b3b46db37296d129a4e0f559d7536f3c4efd65b92b2a793f139b348ab8bbb357f582ab0e85368179dad3ade6d40410afd59fde8a3c4f36db1786a8775e413a3ed3146650241267bf5dacf4f2eedccfe42a62a02e834550ab03dcc265784b9974ddc9c8c33f01a0ac36923ff07f7ec7ffe251a8e43159a6d9179806af8b63ad7682b57dbbfde3a6d04eba9310e9edbe02dc6d162d8f7716ef0bffbc77681262f6e25c3f7cf4e35aba4c8b634cafcb80bbd0a756831d17bee2027c9be9534da55e57fc6be7d9aa9a17532df06e115b17394b38f9549a8643b51b7413f7a6707a4a50dcbf4d71213f8f73123e4b919a3ffd9584e8ea5a68f06312b80201d1ed155c23af21e79a206ea4b552af4c4a645075fe7f45ea3e4063a52f3cf36b837c595d056cbc9dbce1bb14516288f9e9345db44cc2375c0af8171316fd6dd4e1725fcddafb64c43f75250e7cc93cff4f8eaae2439184a0f68ca9de2255768cfc5b49e8dc08bae43286a51a4040cc195613981f7b001dd8dc7a1cf5233702b3d574c6875590d7f109fbbca491974f5d8020607745956ecdf01d78ef041a29fb300217c9f22b33db2d36ef3fd6a330d877e33991a8fdeea37e7110ed2d750f031539065a24eba3a82da7895121d066eb239031c827e9fb130478a37c0b2cf720f9ce2f15c88c8afe46767f145bdea7e50178121bb3ddca3cf12a64c922360c6799ddee28a08e85d43855792f498779f9f055b5e523239b4aaae41d76080ea3111514b01a63e31ccceeeaec7f8db118bc1abe11a78bc2b98b0319b22f14a4768c9930eb063a35080496d3815cf9f3925213900516048c3a5e96862e2c1caeb3b8638258702134dbaa916b670ac2925968680cd08ea4e47c8f67b20ae5159b1d9acb13d2b82857193dd25bce2e0f68f0d955fb5f618d99cacfa72b591f1dd38aa7aa2caef1dd137658ae07fc8a94cba5e17187e220ab528096e6e627b503d8c7d3efec7bb330483f9c5bc2e67cc64ef733c8c72a8e85fd01c61cc084ba1db48fa6a574411aec4c9df8250b26edebc361ba2ec5a75d44e1f2834745b361080ed8d279cbd05987dfcc71e0dd48a9e57ce074270a8e537f5e3d33199ff038229b72773bfce6c4cb832b9ac7cc18119398beb630d3cee30979092173d38bf32de7601a64bdd94d21545252d17605fee20b12bb46bd063573a5b6dc9f3a930f27447580bd32bdbcdf510d7a2b3d308b52ea92b01abf3064d25d5bdac5f9ccfd06fa482f133a871370e76f57df8cc0432f47cc2d154fe04d21579c5896b394630221675932ad8ef0d97b6705b89c2ba37e4d43611bab2963e540483ae9bebc3b1ff1666f16f45000245a87069b7725e8cbcb949e0960f8dec0502168a315ab34099650c65e377d2fab6fe0d62b21cf15bd766c5da9dfe91349f648b07f7031de0d98b666adf75e8f069940b17969859fe0e030c3fe6d8b2e4325599cbf5157482d5909bebfb5b6476140c00917169967781f1e5e8fed2a1bcb85602451f8a21918849ef9d2a3d0351fa581b93ca39abe903175f389413ddd06e15f109c9647982e13690feb43fef4995dc8cf62f8c395028041df7eb0ff53a5b8bb033ed236bc13dc496016ccb578a8b4b4d1ae9765332099308b0f384f6beff9ef72794cb439207e87fbff3ed6ae9973c706d1cc5065dfff460a3080bd4c27ff8c7f8fa2a23d292054d3843ed224490d1ad2db8c1748ae47eb2e03db5015aac13509ae4a77660547d8985d99242d41db57ce4012fa9979c6e56ad450e53893ca95ae004ee9351f5db5f3b194e83f91592427cdb10323b5e037ccdfaad04783693873b5b09efc14ef7522dce11ce561f34f79f72e3bfaf815dbfa06e854ce9b468064af1be0e51202101cab2017db00bf75ebcf2cacefb8596e5394144952f8e537cc1ce18ac71b1b9e6d6fad81a5e4c7514a3094d1a9256f60e586b79576c0eebf622b1d888e13f379a1d947465b974e33de0d96c698dae6faea4ea0b14839ac973b48b6a4ba1967f00ebb912687d2f0cfbe17007d9fd22a91107d8a67067834fff1858947912a04a3d80b818e0bc8fcd9f6f84c1e05e0a578dcf7389d5cd620d2e3b5eb0d300fa18308b3e162b5dbecb38f8978f84e27f42823cf5d669f4e96e7ec4caabc680a600ca35b16355f5b9fc391360a47bc5b6ab880d487041f7a8b6decbb72b562088f2805e62cfb0109e034a7eee7c2017ce7bd5aea40e60ca04f00d86243a4d907dbdc7c5e09bdaa178a74b7eeb1975069968ea9f82b20253c9556b56f6ca31b0f46d44623bbb48ca54daef6bfee1bf0f52c5a4b8c15df7e6a82f15bb186952f1735f17a8b826a8d0f0d247f7748ef2f8740e3b3f06a6213eac42bf7432cb659211e7ecc328fa12616f2584dae9ddbbdd2eb60394d7f6e99fd5dd92ade7eb3902a9ffabda6577edae9e6729041ed0ae5aef5d92db684de80cd5c8eed6115c5c4124ff358d03c8d800584211691af4233f6eb1d5584fd7687d6b0b150f561b5be002b65fa81171ea2f3fe151b444eea88e2cbfa69631bc15ea5dbb905b98943bb17374ea620d6a82eefd52eb7207bcaff037914c8af137566e24e8cbb31549ae91b9df2af90d0be4eb251236325515727857969a26488dc5d2259fa656babe9bc03dee80280c6ca4642c4a2fdba8bbbb0d64be0b961244b2e649b1d7babae0720126d8d5fc79b4a5aae22208076fe670d52b0d466b60d45e57e6219ad89f27bc90daa8f898c1141d12278eee12d968f56a16cdd5342ea4fe12cc39cea85b1272a003e1a8a9b57ec6c016b9598822bdf09dbe295a533e2d2a270bc6d5577229acd1bfaa3e6cb073b023410c48f234118587f3e6146a879b39e7493fd298df1d73c04e57cd9f3923e049fda0ab9eb764b8f1b2d789981d568c17fa949cb0db4dcdd05db42c0908275ab2f28d21c3d1ce33c14c496f205dd8af0febcb967c9044bc51ea730cf6410bb84134da764be717c97b7d078fe51dc84ee4ab264b35f54199c18aa86f3f6f3c9e82f4566a83b53f3d1b43336274debcd97722fbabcf838cddf030e679effd5bf0782e28b6ae887a569a8914568e22a3d7557c416a77b25a750231bd6a2fcf8c79714b1fd1bffbb61ca4b29f8cf759fc2fb3932a9d8bc21f92902fb3c5678bdae9ef7b9a8f0b4746a2b501dafaab0fb1f4eb284c82dfc457c5819ef777792550c46ea7bcda7dcd4b3bed1a3d2ca18e8839296ef35685941760614836cfef499eddc5af68cbbcf8e53f43a857932c5b6866f596bb5269badad4d1ab56af0a2fdd6a295233bbb26fb3444f98a8ac3b93f635f4b8eba2dc17844b001ad2920792d5e366536184e4f4e89a5f5f49188c1149a1481cd2ba41e0735bf210ac3ceca83a58fb6d49bf73a9a824684d48772a98ff262179a051098f135782828ffee17746df4686b557030a85986ea45ecc2d53a84d659acd7a64c61f9281bf69d7403ad462c44c21ab3bfbd5c75d31720aced104162869d6dd07ee475fc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018a77d8f23ee64256fa991ecf2ef7cf7b8857750f6db4bc9627fe336859f639c2d4e389c6d1a6d0a76583275e62d08ebf32c42e354a2a85edfda363de767c040292fd36a9fa8e17a8e574bc728fb1d79fd829281f010f7f82fdf56959e0044a21d624952150e449f38351913815f2aeb7debac25ad4f8fbc07167a92ea16ae772abafa7246219c93404b81154d2d0a687c87d4ac2bae76a397a53194eed47daa0a87e8d4d03ef827aec7c2716ad43a9de5021c8cf7087e991072a0ae476bb06b25d5873ed9016c695cf24c6c185bf005103cc7e87a9ad9bc03889ab543c3f08b150d22d7f53df142ef3be602a20cc678c6f27da3bfbe8398b357ea0fbefc65d50133c7a5b7aae3efe5033423c2b4ad96eb26105cfa441c1c9f5f6a296d0e16a605e22fda0af00a7f20c78c43545ea5c07da77eb3a9600ebade3acfbd8d74315a153ffe79767d1648298cd2b302a85df47b1067d3950153c1d5cbea7cb129c5db1ddd768a51e51619cdd9bf31f034c865e27c3e44d5d10dd3d98ff0d63fe6b5e61bde897abd22a714eb37de3342ba4c908bd35980e8d5862326954d18aec22adc1d64e6150213daba54cb5728e8d499343c0934ea40386d2362e415624289f4850fe8a56998dedbf234efdf1747767f47f2db1c51a6bcdf4b384dc3cb2560239d20361949a7651df7046638d720e5bf1285fb04e5673640ba5e00851c2b6e769f15f15d8f0e1d1e1ba2fc0c7033c78b042034d7e55e0708a6b0a6ed48358a126e29571785a35eab92e8ff205c5da10125d1dbf1d43705f1b64d62a8354184bcf0069a69839093a9f66e5d82c48d004927268b02ea653417ba9145ceaac828e23d0198e6935af6e3f27679f3fdf0c33114641acba33630ab08bfbec34ee7695fe408fb33c5dfbfaf3267223f2d529bc74fc7cfcfd837a7cab181e50f2663ddcabd2335fed79b240b3ee6ced1dac179e0a9b680fccf6c73c0bbe52643eaa2789a670a1a4f737a89591623d922b27fad79fd43ea784695c6148975bac44187ad09a302b0f74fce10c370e5fc8508a826135098130ee02190fcd8646b225bd3fadfe021d38d6e3f5748688cb8dc30039fc6309f2b1dd32333b30a72ff9ce166bb4cbc1e506cca82f66b40775e35eb499c9908bd2734b4dc4cf9be5a06373e622aa3992edfcb188e81859a4b8b5f0b710aa6b6a1986b5518da6df241ac4d7e2a8dd3a6225e5806884c0e7d21500da6717473d9a43bf5fcb98f64dfb8e842cd0c3d0d502c5a8841ff4222b86eb4d40b454b2c9adc575b4d8619bbff18b88c32536d698e044d35a0f95a70f7e63a016ccb83f895010d86070e4971b0724662c4593e2f741cc1f28a4b52e577343050d5653928878ad2b394c672a2d229200e592801157d24b9cc15953ad1442969dd3536e6ee260e3b9802569120d47abc24becab782b32902aee2bdc0d2f11573852964c802c31ca004dd84d432c1458acb9b922e86ac00fcb309f0a07f6622023210b2cf52d9cf88f13f3f0b0870590f270ade569de01869a93e1803f199f02c5fdf92cfc9018b163e46acd00347f4a1db7891f44e8827795fcb4e3274c85b8529df5c8e58cfb93283e781da2db6d9d8854a28831eba1e3f58fc4ea59e0e7bdfbba608836e794cf29ab765e21efad0a64acd8dc833e91ff7031857b9372099218b1bf6f6b2b519df1e7668cf3d8ad53e39e08dbf5a4f16180aeeefbc58ff9b2955ee21066967401d54023f0772be26374a9625e32da9291503d5a554d86fc16db84ccb601661abe87b4b9ab757fb698c1edc0132361a0d994607c22141a9e2d2ecf93503aa2fad296a640e3c403f66789089d3a4099c18bde1733c0817b68cacbdb4dc797c7ba2103a881e8e2343426a59f18090844425a378cb6d649068828473e7be18ce85626e3d9be1103aa3923187df498d6a93170d80f45080ef1f43794d533197fe0a31fbcc6de6924563c98b6e53ea4bddf8000000000000000000000000000000b2cedb34b2899f5680c65f0514d1efb77600000000000000000000000000000000001935098d62c5442e2729b3c26a5fcd000000000000000000000000000000b99b81eb0cacaf88e9f6932accd9c4cb48000000000000000000000000000000000023927e0e5fcb969dfe2ea8efbecd920000000000000000000000000000001b9be05ecb77a8b2dd9126839e6ddf6889000000000000000000000000000000000023f281f1583750190b199b590077430000000000000000000000000000002673c9fc59990813cc911976b7bab9197d000000000000000000000000000000000003f1c280f107fd8b4b06b5efb7e78c00000000000000000000000000000082d280869deecd6278d0abe57014132f570000000000000000000000000000000000147b254c325347c0b8bc08440e19bd0000000000000000000000000000003d02ae4f7087893935fb3d6993dceda41200000000000000000000000000000000002e00546c98e5c239ae72edc84d504700000000000000000000000000000045620f83af2c12038310bcd83c366077be000000000000000000000000000000000015f5c058523cb9bf5b82b044278973000000000000000000000000000000107e1f3cf9f08c249be37c22b39d82f03300000000000000000000000000000000000ebec9723151c25dcc7374fff5b55000000000000000000000000000000003cb9b30b753db009b94a41b201543e8ea00000000000000000000000000000000002ab0cd1ff2f1e0dd8e9b27ef90f888000000000000000000000000000000d0fc92522ea6e6ed25a2a835f88618decf000000000000000000000000000000000017a42ba19c2b73009166a8244c399600000000000000000000000000000026804c5925d71dad97ee457de18323708f00000000000000000000000000000000001113b200086b34e30486e6b727c2a000000000000000000000000000000084471adb2cfea0ab7cc8328ea9b0a2621000000000000000000000000000000000001aa76913e57f86fc5119b328271b0a00000000000000000000000000000003777f354ba12d4fee964aaa0a1de9dfcd00000000000000000000000000000000000d99fb85c26eee94d83e5cca238ce20000000000000000000000000000005485b32c57ba643047d320b6813648e8d20000000000000000000000000000000000249056b3fc6c3c9930c0b20e0cfe3800000000000000000000000000000016311301dc139b60f97ace1d47727826e800000000000000000000000000000000002c5f8084e25cdc897608ad7ab4cc990000000000000000000000000000003ce8b4c3ad0b03f3195b682880c486117100000000000000000000000000000000000f52fa2cf65a3e870d9b62b9e686dc000000000000000000000000000000f936d1ad2cbe15971799fd251ff908814f0000000000000000000000000000000000181a4de97296503f3a3489b746e4c5000000000000000000000000000000b7914b231969c164f7bd2ac4ac7921b118000000000000000000000000000000000030444f0670e9baa6936a8adf3690c60000000000000000000000000000003b8f0093b438cff0dcbe555fb3bf70f26b0000000000000000000000000000000000034bd566eeba1a210bed517279aeec000000000000000000000000000000db8775f1ed80415adc114386a18eea9b7a00000000000000000000000000000000000310b48157ba9982bc7700e8660d59000000000000000000000000000000374b0bb0ec6e1c034126b8d2592d290a5100000000000000000000000000000000000d1e8f7fcc970ca5e4671a3d7b27430000000000000000000000000000001d720d610bfe20005eac0be4a2a94709e0000000000000000000000000000000000000517b22ef55ef1b34149ac03b95ed00000000000000000000000000000026c08495a0041161bb65157f43d69ad2700000000000000000000000000000000000107fcdbe5e58af309ce9fe8b525d76000000000000000000000000000000b62a86dc7d30ab2b04a55f198f1c3b76e90000000000000000000000000000000000299b874a8894a011a230af0fae119e000000000000000000000000000000dd50cf37dbb2c1353fe436a91431708fad000000000000000000000000000000000027a1b29d0f910fa8266fea588083fe000000000000000000000000000000a5b38f67140d91b7e5d6f16a9dc9eab4a90000000000000000000000000000000000052e79626c1df766b2a1950a756a52000000000000000000000000000000243a70d7309b2cecaca04bd3f4d1eb4c4e000000000000000000000000000000000006fa44a72f74315cc76979ffbf15b50000000000000000000000000000006c6df0c8866c4d850832fbc660369b141e000000000000000000000000000000000000cbea0b465052ca5025320de4c20500000000000000000000000000000036b3d0e0f45d028e1f0d61616d34d3fe6800000000000000000000000000000000002752a19769d73d7bb0c35431731b30000000000000000000000000000000fa89d8c0bc4ccc0157b5443f7097b58405000000000000000000000000000000000005f05ab75ae3444fb9907b60d3e252000000000000000000000000000000984616597864e26047d7986290d88fb53f00000000000000000000000000000000001c2588a780305a1ac9be3d177452bb00000000000000000000000000000085d0f3b99cfe57a9d74f2bac689f66ca4600000000000000000000000000000000000ceae21e8043357e772b53090200d80000000000000000000000000000001a9ca81dfad27a323b0daf1a18a91651ef00000000000000000000000000000000001f44ca5f270b5b59351517f735002a000000000000000000000000000000eed9e52dab011a4fd1295f53e584a1e49100000000000000000000000000000000000a599af4857cb6fe9613db542429d40000000000000000000000000000001b19efd46df90dad3e0c2457f846534acb00000000000000000000000000000000002bcad869c62ecdcd598b1e4a1d25330000000000000000000000000000003dbfd7cd751739ba633590a71fa94587ab000000000000000000000000000000000009dfd2079e42656ff3afd3e754d51a00000000000000000000000000000066580a75718c82157f79ed62229636310c00000000000000000000000000000000000ac78fd2b40e5dc0ea5b1f549511400000000000000000000000000000007caf6ac302b2b2dd94c636fa61fc14a5760000000000000000000000000000000000251eac68d72c1135fdb1542b9ff54f0000000000000000000000000000002cb2a4a6137c7705631be29aa95b6af73f0000000000000000000000000000000000085ecbc294b9b1047ebcddfea9873f0000000000000000000000000000003b07c3a1951317ae6783d7db78df1f2e0500000000000000000000000000000000002ba3b3ec2731d3c1b15971c512c71f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000262f475c368407718d383be1fab7bc1516588adedee3d7cf431bb7eee02984db1d36733e9e64f21a16e5d8194a8e27e7641d4a651262da73ffdbc663d1f0f35322c0e2b8822c2ecf60a47bc051c4e515a6acac653a2218f42fccaa37e02da7e009dcce76f4dc093360f7427dd56f7c787a8c11f4c6631f576a04b612531e1e4f275d3106b0e90c0ebd25925ffae0932259b672f882267ff8ad61de864a2517e40984aa1d4c395fc2c928a07af2ee89e7642b2af88785e304d255a3c797346f370e344be29ef35d80675e61625c701fd7f5e681f82eade8f8efc753a65af6c1342be917cb233432533bfb4f17fc1e3fc1c008bfa8bb43bafba8222e2103df40912174cef9b89158b4125e5725271f4a73502fe1769aa67170fd7c73cd2c85c47d1bb5314c16039a869b3e06912708fca87abcb0b672831679dcb2b29570451e8c062f66c895773b48abe886a95bc8c2313a91b849e1e78f2e8f9ecab0d61de5ad21b8dc61d3430e8fb06d7b10e022a9d5fbf216bd14a5a33b3296bb63e3920d3a1a35bb9443526390a0294a764cfdef81742468ad50449f638f903d5626e7537414a196972c71dc18d677239939b38a2532b771dad37c34cfa9c91a2a29c7cf211726d59daa651ac9f68a0c83aaef155e47e93886d649804b1015caaa18b52743265e3c4612a2637074128201a6262dec632e4fbaad2d66f11730433f102e61c221661adbf39ab638709622be11fc6b0e215a591e84657e20258fa2d41386c6d305d15c75900d2a388e8c78ef46e1eb8cd13a6cbed12d05f310054e63c3c4ef8a235637be0e0881ab5fc20ec36c249f0f811a9697733f29bc17fdb79e42d731140d04923074a64e1549d7ce2f7d89f4e24bd1770ab15c7730add96f57b9c611c32f97609508e7a2f7ec54f13eb8b6b5732e9da2d5ddb19c208da9c7147086f34900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d8095b7de0db38fa041cce794232fd648000000000000000000000000000000000022bf9dcd587e50f241614e94f9cdab00000000000000000000000000000017315e2b91cd284744c8ada06c3fdd2a8b00000000000000000000000000000000002e4027680072a4f13080eed01be18800000000000000000000000000000066a4c3726025049f7cd7f6c511716b179800000000000000000000000000000000000995b17133e48b2ad279020822b6c300000000000000000000000000000004cd92cc17a85b7a22b884bf31386a42ac00000000000000000000000000000000000a7d9776e628dfa9573d75473bb5040000029c","publicInputs":"0x14dbb5ceb242d62d79cdf71705a6e56dfbc7678c4050f694f49d2d37cb6b43250000000224ea389a21363dc394add32d7d09d1d5a6af047848d9f0c756c7af2358f745b40000000408768eaa02a2ea49ecf02c4486e40089e18da9574903f3cd171d2d3fe401222c05a8128b8d55768d8850d24611497beed9bb0e33fc43a2135fcc79f028653002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f1d59ed909d79632cc0baec79289c060cebe98ab8024bb4259620a96b7c7d0e21055565154d81bf243f21a818fc3265eb3a0fb1564f3a932e8e87808c52da2900000000000000000000000000000000000000000000000000000000000000000ac4f3ee53aedc4865073ae7fb664e7401d10eadbe3bbcc266c35059f14826bb000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac4f3ee53aedc4865073ae7fb664e7401d10eadbe3bbcc266c35059f14826bb000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"} \ No newline at end of file +{"proof":"0x00008b640000045b0000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000029c00000000000000000000000000000000000000000000000000000000000000011cb6dc9b8c6041726c30d6a662f304689224a8892ad7f74f16c745bf376d804300000000000000000000000000000000000000000000000000000000000000022de2da46306bc0b0e5fdbb6056987d6fc5404cfa5109f44d1b7bf367c55402da00000000000000000000000000000000000000000000000000000000000000041c5492e4dcb2d47218f5e64963e5d6e25bd0a4d60a139d80a9eec6c98a6918eb2c79f28a7380543755cb2c2ebae754a7c5cdc02c57b89e76ccd21b8d83353ebd000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001085acf60fccf9388034ce3753ffc9f4acd347ce11ad60ca76342f5dfa1afce221055565154d81bf243f21a818fc3265eb3a0fb1564f3a932e8e87808c52da2900000000000000000000000000000000000000000000000000000000000000000ac4f3ee53aedc4865073ae7fb664e7401d10eadbe3bbcc266c35059f14826bb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac4f3ee53aedc4865073ae7fb664e7401d10eadbe3bbcc266c35059f14826bb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fda971aff682f662000000000000000000000000000000000000000000000008c6e3dd5a1ceadc61000000000000000000000000000000000000000000000001bd66462859a29b61000000000000000000000000000000000000000000000000000206ed7d0535b3000000000000000000000000000000000000000000000000c5402a36a1950cf5000000000000000000000000000000000000000000000006d106e04cdf42146a0000000000000000000000000000000000000000000000073fd9c45c7b90c8c000000000000000000000000000000000000000000000000000008586cbf0077600000000000000000000000000000000000000000000000ec3b531a1f028717e00000000000000000000000000000000000000000000000e25c20594d5d9d7a000000000000000000000000000000000000000000000000554fd7174969c475c0000000000000000000000000000000000000000000000000002d369e6797d0d00000000000000000000000000000000000000000000000bf996eee6e6864dca00000000000000000000000000000000000000000000000b0b1a19598b9fc64300000000000000000000000000000000000000000000000b873cf36fb4b78d730000000000000000000000000000000000000000000000000000f2bb025e6789000000000000000000000000000000d2e1280ea44c5be78e36d57ed2a794aa50000000000000000000000000000000000010897c52c6b538b4f2645cdbedfffb00000000000000000000000000000019beddf9128532f445bf99a1f13f36f94b00000000000000000000000000000000002d0435dbb0d5168de1a9f97e668a84000000000000000000000000000000a3b5a92b9dc2f98d5381de1ad51a5af5f600000000000000000000000000000000000b23e39fcf1c54ed90786eed97fdfc000000000000000000000000000000c0327a29a7471f1fbf50d12d501563d258000000000000000000000000000000000005b891f04e9e7cc14d35ad4a86f3ea0000000000000000000000000000000499f01c296c5ecf2f8c902269770e6231000000000000000000000000000000000002abc47f50c3bf37109395994a14000000000000000000000000000000006924d70a9782f5d8fcef8fd057c2f7c74d00000000000000000000000000000000000ea77916d624997462c1f5d02b3ff900000000000000000000000000000096650cbf350fd79e4e21a3a53f084e5359000000000000000000000000000000000025e86237c45eeb6939f852e4019e10000000000000000000000000000000870ec61adc23bc1294a793de7d329135e300000000000000000000000000000000000d59e4f667228b55d76d57b80cbb4a000000000000000000000000000000dfa123d263c27f5e0a447510bbbf014a24000000000000000000000000000000000014c0e9197abcac09fcca8aa3f56231000000000000000000000000000000693200aaa7a1cf111060bfd9649742812e00000000000000000000000000000000000a64ac6619042e406467e1ef5c7d8000000000000000000000000000000002f887e187a17149cc3840cc54456f0d0b0000000000000000000000000000000000050b6e2e9777314762168eb32828ea0000000000000000000000000000006b7f7a21352bc0d8ae2a09f071660cf408000000000000000000000000000000000022a6d5e2ee7d6256a9ca5b4c5533e4000000000000000000000000000000c007e7c3061827663dac710d8ed656262c00000000000000000000000000000000002029e904eb1c47a33f71100a9089e70000000000000000000000000000005619681483ff29613a2b7baf9b1f75a0c600000000000000000000000000000000001434bd46dc12aa8e7d0533f01d5925000000000000000000000000000000dec477c16948ff2f2ade1cec0f47339a6f00000000000000000000000000000000002271e140e1dbade448bcd1c30076e4000000000000000000000000000000d8949f59a77dc37ed99f3828392d4168c3000000000000000000000000000000000002e0e5f3b1bb40273c6db775f7b72d12697f91862f93255aeb4859c03027e0ee0fdde997272bff99fb814161f45e781dfacee15b020d045d64fd5cc151307c3a240a5ee2924491a9e674528e0ba18911a62e14c5b6bca959fc52707c3201b16090efbc2efddba531fea062318a778911198578801d807c96463268156e760d444fcba91146a196b652ec66584b7312119c3813acc8b9e5bc839b6b32980d9a5f47a3871233531f42b74850e1b12699042ab0e7f2b678f120a6e911bf0d251fc0ce9185b69fbc8596696771601927a021c7dd7f61538674e039a7698eb693eb61507d7f6a00e7d36775f08843cd697f1ed7f3278e40c69f2d4241ec832d8b810054a4d0dccf9635b627e4ef5c981c822d7b49ab18b807253253d3401acf7e055bf2b2f6a5ab61e90b11d4e90326ae901130f4f5b397343e2810dfdc4339ace5e9590063c34db25d7b8a93b702fc5b5c1ae524e652b8bb517fc505f239a6eb6c3ab0c4e77ae6c654e8b7bd556b8b0a0a202b75a4c8ff5d982eedd8f789dd84302c7e7e50d7e3b7439e3520d4cb4572a52d988d63de1e13054d548172deda25206eede6cd83c9f64fd10c24c8724d93da0fa186e12e30d40c553aad642af80004eb0147fb4a850c1359fd6a894e5a1ac701a88a0748e2d025ddf03ed6a0251a71b80c139e49421491370c9f28811775c02dae6c0627cf517a07ac6fdc4709b74c55387fe1d6e0229dc5cce44635e7225e108367903b60e0f57a56b7c31f466afec2aa099092cc527c51ac9b13b8651d1b168a43ba3d5729e73ebe882a65b6ce4f65aae63e346a5bebccc4421af7afbd092a79ab6d58183011bf5e0ed406321535b2ea486d48519624abbdbbe1db80b3d627317aba0383ded867fe52f6f8cab764fc3e4e17641753662293d720b4d10e821b7e50c61cbc1f26d49864b7e078562064baf7ce68d2179a902790a98a4f478b2045790ee2ad663436de67d1efe78bb66dbf2679ee5aa0c502d0980dd1391ddb02c4703dcba0e8d6d77107ec39050f8a27f8dbc82b7c37c92e06f01dd5a1b92c15a217725c4175af821ac105950e1482a5d5d64d7f883fa4e8f09d13a1b0334d0e71d16996788714b5a9dbf460975e4e3d3d261ead72c683dfb2855e79c1066a1905c5cda4070f1bc3e19a238e0cc2427de1e9997f63ec8fec61abf1a0c914952d1b48ea8b03334ca9fc88fd80838ab6bbf443608dc69918d8bc573e72d6b66c0373e57752056f5a004512ae4cdb0162990e5d839d4789bf8d5eb48d625bbb7916a162b386ef2f291fc65e965aa4fd9418619d963f255c1938ac3e4d6f6a60651fec0d60736231b8041eebb1ab39cba319860fbef2b153795d5ea4411bf50c6e0ffc1da7c8a493307694ec14b9cceab90b685455270941758c82d621f62a7bd3096fc4917e1ef910f3c40904a969a0379ce399da9c4ee80ab6ef5bc6eca4bfb42593940120b729847ae45371a0e0e046d20c528d66e41c97b0db38d2a750fba015bf09bbd83b961d481e2801fa1022d3edfe454d5f0ebe5baa80f031bd74abe6236e04203d765b8cede87cad8eb47efcdf8ff4bee8884c041c243b0b82d315281d2710c63775e0249b141f090ccd8db86093793a5dd6818f0ec616e7bf5f77ff2b7aafaac250e2bca749c309bd5c786e340b8e1dee067f2a016d9cf8140fc05a1230498d2fc13ff1488961a1ff27b4694399603b34af6b49fac75d48edd3dada128537d4a8bf3f4526aa70953c1d0da52e03c9af5251f4fbd060f8a29c58e35901b06fed58881864719ca9f565735db2313f04834da4178124c9282cb7eef2b21fce3c744599f3dab25bbbbec78c79f291ec2888a25dc58413dd00e44771b85e0921bbdb428f06317ab06253d9ab5290bd990fbcf1441e7cad9dbba8f04926e0154d639a424bd2a94454ad4361b3eb3b3b364fd56a0930687d093f317a8cf5e4049ffad3c1bac81ab4cdc0342c0de88b02c010679730f9a97d067fcb8bcb0ebc174925e001191a85a4e891e01e46f0172b519e42db3ef950912f95411bbad23f13047685a4713724a8aa619ce6b1b7bcbbc13083700570403c6572ec812004a22278b0341d7a31c19dd4fc19fe0342baecfb9de84388e5ced8196d9ebeaf0a3c287b9400ecc26cb0caac557d28dcd00cca17ee4d3b59551b62b9e722bc9da53a2488f5e528fb82397d6f4bb75a1f8c7a40862675ca5f8e754bc68d6098962a4415590480341e630cf749e33a1f5cb3b73d80f376f886816f2de2a4fe57bf61c50d36f169a36a52ea7ec081eae0535effd7717f917b2509fa5a328c6435491e12213f7f93c80b93edb55d065c34fed804ba2e0cf4e2bdb6c39d67749f87d50de11a1ca3f31b69daa433c865a0bcd5b346de4a5e34e7a840351b3c6d4e8bb33bcf296902682a1fca2415aed340a4b020de814499478f5a03a0446a61ab1cde81f60a869d03c3bb7308dee840e960fff7864326310f0a56973696b72dfb28f92bc4200fe8f7bc4cc7249486b1377769f0516cfc1cb17c94655e4487d3d33d57cf33168ba1d1c6180db4a63fa30b9e9870f70d2f6254c51a5932645f8252605b2dd72bf4eb6467e482fd55fa86f656ac6df5d7cefb39c29baa00ae4e1a9a698b82cb0cfaf93dc3292ba4316fa65c311597314b517ac6ab9c2200887b208e28cd8b7f16e95becba2e54b5a32924c99e87c737f8668169d6bb865d61d166a3a80a07a110e7c67d02220169b619b6d33ad8723ca27915553f11602a610f6a09c0928dec2a8dc9dfea79ca268d1d49103e652d62cf148ba93bfb188d9092bb5a588743b4270e5f6ffccbd315eafad28d2558f9ac73dff67ab8293f9c372809ff2903cb84061c48ff2f8ceaa747077e197f050a3f3b4fd5ce182b687d76f4a98b3204613523ae0e43d834ce7223718bea5605077c9d0aec77aac79ce46a87c35b9bec09eb141d764a9066e3cb3ffd99958819d095e67b89d7829f44a45d6f3f29dda509e62d6bea5e97e618c4dc5ae0439fce8945cb85779bfd95494d3bfe4067076357cc1e67101193a67fa9529b5524eea7c12fc65d2f92d3efd15a3a3231fbb3cd976b0cc5a0b1b66b0e0ee23c7b9347d43fce523d3b37e52bd2962e593ee7e203babf1ed031febfda1f1c937ddfa518ac95f14b2094d2f2333955a28a2d763ff0e5d300c776032ef13ee2c7fea30f15b4998c5a90d6c38811850cd89646de4ddd6c2509f214e93a567692cb300e106343bf2b6fa5eeeb68c9f6b0d7ac4c5fc73aa86409d5e31e6e249425eef86d381c734b49f1ed908f6252f1abfb449972773f425023dee968453943b3a6f288526746ef87f5e084375c4432f46821ffe9428d684e2931afacee292472390de72f91682615570818fef376ffc7ae96ad414a411a2f1d1dcdfe7a597428a7888dd7a380b8669c5d3526a1f3c1dc323ca01578bec79b0ffdf15882fe7b1747d42b716b48de868fe3d434039ba196005de43125b9677613b75c03167ac86e8c1db22afb8f05bcae39030d0da95f6556b5df333c7a4f1529899bace5b4ff2c4c34e76f50e1dd91a33c42ebbca09866b5f86a2066be00160d183860d57c55b97859c83b3486b9183a236825542d5dbf0f4ceb43ddcec78802b900f182c9980a26bca6465fdfbdb1de0d78c12a0b2410c2d117d0340c567c16af5dd9ff8ab7e73717e1a23ebe79ea33b9d7bfe07c4cfc7133431be836b592138b55b9bebbfeb8b73b9d74bab2756be436678f0373660eeab0d4b70028e42a04b31da4dc6e5831862306c0d698c8fba58a08386e1853ae448dfa8e484614f402ff34ac5e214e78c35e67e5446795bf8a2f2e2ce94ebe5acf1e847f53d7f1c81d1e187b99024c9655adfcf5fa454e404133146b40840d3ffb702259a9bf8f962e91ce50780029f8e85008d86f79c16b0efacb4e163e3ee55229f1766b7caf722f0b61405ab1b7c8af5bbb579fb50b1b2a87e3ba2ef78c8f8550d0b3168d6496154043088ec1a28162a2b234bb5f5d6653bf94702abd18be060e9d1c52e2b8cb2ba567b58837924fc23e692de349af7c0fb3a5d668478eb2e03a07f9fb50681102d0f28ef54f2b376e9bd90a7db163d74cc553fe860b424048b3c9bf56f22da022f5eb856d1eec1ceeb5e32da66e8e117b0db76510263326a0d61c9bb6575ae108ab854bc3b7cb2c0df399d57e2621f04740a872ecd19c174f23a94d5311e5990803f1b7a5e055438ab3ab55bf5410d2fa07564234cc01fb21ab605f36fb72c62e847cae3d6214b432a010544b3176676c0125c29692ff97a353568bd43aceea194c7b05fcb449a6fd5bea5cb961dfd9d67a23579d548d40dda96e29a93c0c170e45a1fcb2782f1e091eb01eabe83f8b3817ca58d9edc6c7f8878edb488666d6121cb6fa496488d49c75cb72060cfbb8e9f9eceb8c48dc56319cd0386723b1d41e41ce54c5a64261116a567fa62fef8c1ad4f63b11d3182b0fb449ef956bc5e72578605e66cfe961bd8a5c17b9128347648c89673c6419702f0a04de3f39864a277c484ff702b962ce63e041f0004996860ed1bef1f4a3a9b91afba43438e392256127e3c07997d9c851e86a31d9b95d76531779ca3daf172ce2ebe212bcd61e26c7e1d2cf7ca31acc4c62673e3e1246bd05f08f09ca9126e5208d74d8ffa4781de9f5e0a2306fd9508a27112cebedb7636b1d04dc156befbb6909b086c322141bfd74104af1663111e5920827517172bc0fed4638b0f8f833869d18975fa5f22c0865245a8d5e04b7bfdba0e0ca2ff5f50c398c33e683be51180aa4136eae1306747ec180934b3b98bf3c5200945b44fbfd2519bcbff091a5d044b9d0e44c490fe88d34d6927b2c4e04ed12558c79ea8637d0ba7c150d66ff9b5b60b5d0301325aa52d35f22a64f1c495b4fd891ddb69ccc1915b6ee03a1ae5a0b599fee55b52e5f64a0af51432c50dde50c126f1caf75d7e86a892e8483b14ab6f2ce5a87d9088fde007ff6797ef902406e62e0779c07cad39128a9862591084818fcdeecf607c18316ffa841daf9250ea5d33c36ad36bd207ac5c2ba43c023db239c7a7e621e4c90abd2dd270974e02de06f40fd253570e9a339b3d08bf05c89e1cc861a361cccbb76d0270db3f713f7beb8d6149e2097e71caec775723d1134153590ee970f9e5855f62f801ff625074b5a718285799a66e3f4665b6456927ee5732af80f151e126e4e8538a44ef38f98fa45b0616cb894d92209fb355bb463fa8a65826915ebcbe42bbbd350679a0c36ba9fb53206881d3ee0fbb7e01cffea1a93dbc5b417e23651ee23f22f51646b1b276f38534b7980c5a48832ae2c8873baa083f58526e6d1d0b36c4504c45dc673e126bdd1655d8c3bf9de3bedc505f2f1d67442d00417afa69278796eb6729ad3fa1a1e6a8609279c997c5c7d7a17736be9917cd42abe4e2b2cb6d92f5a4c6661369f7c3f4b2ade580730733313bb23163fa29cba1388fa2bb80ef502b5b2189be1f472ab28b8872652a020f3b517a557d403c4f82a3ac5e3a2152de5287df06cfb15e5be61e4172a3f6a8e3b827f2307d611cdc92378f8789a953039ee4960384cba0bf0502b94bac4696b31dc10f67ee883874217c687bdbc6f3710b0ff11bcc618c000991a4a03805692b8afd5696bde8af14d2257fa9d91e3d72380979ef7aa3b465e306a40f9c536fd40b184c93c874be52a2c5ca890a741e792b9810a3c752b1d9fc4468566f7b30b5e53ca5faa9bc6201712bcf3548110e3c9bfbd1103ba1ded20874b51ddb6359a5b2ee3f51ead3dbb431bd96fb22d058c2b86e09329fc0964e80fd2f4b772a345e35019436b36e532d911a208e05d495275ad116644de47cc5e7047ddc3c58fe34f30016f97e07026a713fac03b6b2fe858405abfb02a9e4ff513668c0913ab08e7261df98d3c4041cf0e17e04c68cc34c6073bc443123b0aa6e30c9c1ae0a4b0709d98f7f8a374f3f42a4caf0c1cfbc8965d6a1f870fcd8be7e644b87829406c4e67fe5ce2fdc4a59f18a3437975458a474d86ccbfea9c84eb1c609cc0db3483879512bec854f8793203dcbb69a04678624cf15dc28bfbb59d877473e6db7a90a0666fb939654d2ec216dfd20c0c059a7e58f4d63f382d97c1f0e718dc8162cccd254635a606f72c571a013189fa06cba96a9372f6373bc67c0d524be969d167f6cb654fc450c079c6211f24fe4eec58b74e01506895dbb38fbc8a64dd3c4b8fb220416ad4f11c61d908435ecd46d2753a3dda90074d57c5249072546a82e0feee0c2540903a54e2ee2a1b38ab686fc78a15f99637e4e06eff3de43a9c2315b04e4ed7fa0b1b68a7591976e2e27b0b5a2a36a32cac0e63d569c9faf09c912eb59e8e011f923f47aa01181bf2cf4ae5aa51881184784585977aed5e8203ce3b357648e703a2f03217450d9533bdeb60011bb80ab8959bdb1ec7129ba5c610d22ccf1b3b282b8a32068010da65ff06abc962d49647f84fe091c883731426a63f1a52ea58b6a8928506cd29b7b18de968cd26d6e5e27fe2106eac8aa5c864ac7ff3409852650ffcb4c9c413e53c1795624b48c110e3ed59389972123bea6f0ef958088068988d537acfba1771ce69cfa3c9aee2cfd4f932319a4ad53a7379096626b897daefde6bff80b001a3af77a1465931da1f5b16ffde6381a94fbd4331395a62ff9815dfbdbcd663094c515f2218541bd1f3df371975cecfffbecae8c30e745eb283a22914b757e71340986d1477bff3de383012b24a359d11e474d400ed5debe040c729796df5d00d94d9d1de42d09f5c5006fe19f2a8bc1b2e4c1d48ea53918a605f319b2198360d6f7881515fb1722eb405c1f6936b80b1f5b54523ba3a2ace7d061f984c724807d744500356db9858b504651eb58750901a648a2393d5e861cb486780b3a9231f808428dc0e97fb780845a8e0adb0741c130d27e7a2abb9df1a632055366a16258d7bc15723853bec85b090d5e019f31977f5ba0bd24379e25481431eb3995c0348a300eeff8c1f00ed64d4f16b944c94b33511974c3fc32eb49c60d97dfc51199a1a190dfa6b6736543ebd58819c99f29b451d277c62a99de72a4877251e881fc2c526a93413aaf903eaf77d67ed24a973fb0873240247e8d26cd7575d3cb1170f6ed4ef4d0bdd6a8c9c55572889c843bb128a3ef6a4adb495ae30450c5ce920ad0d90528bce589f91a7eadc612960b438df52ea567ffb67e7ba232d8f42561d7637a3c5bfa3d69b343ed69dacdb4d27527b8c420dd79e0ba23a19284d7fa41f98d2450b92c0f54c5d3ed74180f2613e46211513d30beef146ff86e850cd290b0d5b8dee41843e5b270e49549985420ca0c292711dac4050c8be9f89788eaa26927efb50fdbc4e3d29db46b8e780646b88bf8157de14b120b9c32901cb9c6d185a36a21360b3f3d8c26d5fa07fb0736a4f72531ec9addc74e422cc017031590191bbbfa9ae4a040e43b104dc5afbbf447e902326c8972c493cc80acda58e371dc71b3d090507d7a4a9989581b90cc846920edd53b281292a264a30a7c767db2df3083fc4f1089651674b9ac5f5902b5596a9ea8002b00b8901d5a46991efd9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001322ecdb755ecbb53b27d1eeb73808129e0f4664d0cbcc8a445f091e118ffd9d16fad2b1347b165cfb679a1c7f19d588ddec571f8787884b8f9ec29f2e2812ea1f35bf47893bc4878005f54d27c13a63cd14ac8390dbb995edfb0096a345d6a3178bb0c62924f8ea19032dfb26fd422520846f999904b1b22035d6dd71c68760219178016c63124230c9176d3ed6c492ffdcba837209b2cb358394eeb71cdd182887284534e30022cac3dce53a3abca979b226e1abb84a7734d61f785814bbfd147033397eccefe4e9ac555593614db19f503448bd4ec9f4ea702ee2f1f0305e04a04b7152914e0dc45ea03986562400cd85d7bc3331ce2fa1f0de432b409dfb0611de5c69b38a665f8ebcab085a8868fb0aeee6689c11c571e4661f91f278752403b7a6f22e7b20550cc96d94589e6e1b4e8786ba803f096e20cbfbfb00cd972001bc0ee95f6b2eff6f4d9242bd8c0303bbf418a4a9c4c58c5fdb4cb629321c268dab1ed18ffe420c220f6717ed21778e2956937cf0075203d33110111d832b2e0b2577a46fab8fccaa27b4d94f2afba2fdb94a14fc183b681eea30d45dd71707706c6cf45d2d205c4827f451fe25a31a8c422cc2bfad7baff413b2d2de6295184ea91e3101edcff27a526874827d848ef3c3e912025c8fae313f06e5ceb7832e141ac9aa2ab186e3cb80f50bfa6cce41ddee9008ea5a774388c0302e31808102deb96fa41de6847909a8aef78a99b12f73d0ed6c51c237872b96bc3fcd3dd107ade012c1c00625c7751009b04d90298dfb675076d1e8c7beea28b29eb444d312c566ba1b05af21d3c15b6fdd209760fb0c9ceac2d0b074a4d6e109f813a5ba07c40e64ae9c26c7c9a4d834dd33293179ffc56c818bc0704b2eef4ef9484af31a36977b7e5204a92c9fa764dd3665daebe5c26142da9ce83824809b31c9d8c9203bbf9e6315689a7275e23ca49187d2fee7ed95007c84c2e05b5ac569e2cc561aa1821d6b7fa9829c8ecd078570a896d6eb792e4925961d3e8ecfb4f7a1149f21e485b0149086ccd86db2fafcd26a22d20cfb858f0b7881894d3b8fbd9fcc7c220dd5f6f02b3c655e73e002a4495a7fc1b6b6e7ebf5a0297edc562b2dcdad16305bd168edd8ae4ccbd146ed7e901248b32e08a729ab10f581de14f0aee5480122e51e55e6fa8ff15a8eac2544b903d5df85d99c889f6c9ca920598100be6d3a11dd9fbc38d87fad13db3d4027aaf6a8bd172ed55c5ea19e7a3fcd51f71e7d87187e2543fe3c87e132df4366f88c40698765f73fecad1b779260dc7ce0f4e9af1998bcae2e1cf071dc3bd5264787dce5b56828860b3c1b5ff4f5dbaa453b37400b0b8771f6f9beabc11adef42f57b0b177e93c22522738e2386c923165fc227e164cc9de544a3c71fdfc88072f6915f7507122d8664cf2b53a32990a997de60110e283d74320cca87003544cf8c58775440cb2e41a3a248eb4ae0d54c4e100ca214805f08d52e2fc4d6d29127f03eeaa7b6545bdcbbbddcd2c0493ee6100a0fe1cdd084c2385d0e93d7758cc2c3efb52a99b975ac396e0a91160f385bc399a16062f7c8f76ab6249dab7636a964edfc9342e488a8969364220a9fc08b25393f516c085909a143e5ad70a07cacb676417fa7e58ccc1f7482c3caedc4e3cc71c9b02290536bcc562342e7cb72eaad3c660a47b86f213168a1887d65e070c9a1bfb254767e637e982ec609743553cb0fff455745be85dab68d4f62982f4c92ebc562e42465017da201e743da4cad5935e45e4a7b418e4583c52bf2285a9f78b80d702ef5cd1306699195678658d548fc82b18d5afd7e1e0a01eb7f03b5ca993a5d02a35679d0212e0f3c73d1021209be2169870ca71dfc779b54a7e8597fb1551bf2b052a9d127df2fcead507d8d81cebf2cf66c6986d2bd92f64a6c3a00fe03eba103eac25065ea0ee0897beebdf6f6537760efabf0295cf91006591d796c59de3000000000000000000000000000000e2626cb0323f6a28b6268b2e92dc5375b1000000000000000000000000000000000009c6d15ecd7c7a880471e4fb1baea300000000000000000000000000000054c23b0ddac08f08bd7e55d3106a924be700000000000000000000000000000000001ad59bfc407d5ca07bbfa82464d33200000000000000000000000000000049cbe927b406a63cadb643f8adc806bda200000000000000000000000000000000000673e222d43cb2149a2f13bf4b76e30000000000000000000000000000004d19ab8acfe4af1a3aec4020a84183c56b00000000000000000000000000000000000e56560bd97323bb4cae377cb9937a00000000000000000000000000000031ca9511a16eaa80ec955423fdd681c1c4000000000000000000000000000000000005534fc172ad5ce4827ca4b746086400000000000000000000000000000054dd52a46d4cfdc1d98b7c6b78d294ad6100000000000000000000000000000000000a8a7f3ccbb7939b6d3552b0cb8c3a000000000000000000000000000000e368c6cecbdbc85b3abf1dbc19705f17a60000000000000000000000000000000000080dc9e251a7e076d5d65b9177e1ea0000000000000000000000000000000e9d2d233628103364f2a55b5406f510f8000000000000000000000000000000000027d58264cf9558c717854016f1154c000000000000000000000000000000734182b8a4b987f749a4a027817a2732d2000000000000000000000000000000000023efd016ddadbd09bec21cbd3b3802000000000000000000000000000000fdabccbbdd25e872092634793a8faf5b8f00000000000000000000000000000000000c418b9db676fcdf8d6c87333f6d60000000000000000000000000000000a581169577917bb2815a2375857658c0d200000000000000000000000000000000001c2b805ffa42ffe1a46f92448eaafa00000000000000000000000000000078aecbdb107f77bf97f6f3a8ad28f65ec70000000000000000000000000000000000005457970c63cfd5ed2a438df2f133000000000000000000000000000000bf27715b2bae2ace82ee12ee3b7ba1255c00000000000000000000000000000000000d63ea13106e0d6349376c9a75b50c000000000000000000000000000000c14bc135398db76af2427a4c0c0188f01d00000000000000000000000000000000002fdf0706210780e71968259037abdf00000000000000000000000000000035aea0398fb8e4b3f60f06c580a4ebd167000000000000000000000000000000000003f8886991c519121032f0c0a9b003000000000000000000000000000000d9c86e6f9ea0502e09e8121d3519c613bd00000000000000000000000000000000001e69ef27810c50e98b67e0ab343b77000000000000000000000000000000c966ae7fdcc25ff83a76aa8a7cce35fc45000000000000000000000000000000000028bb460f3471b7cc877feea861a4e8000000000000000000000000000000bb9242d6d27d47b27211295f13fdb3ed0600000000000000000000000000000000000a9d15606130d0e2377a4da09c324f000000000000000000000000000000c7946c01ecbd3549fbb797cb7d3002404200000000000000000000000000000000002485b0f96d2aef0f339d14e89195cc000000000000000000000000000000155b5d6914f5e824e9cc9c4b8feb5140ee0000000000000000000000000000000000026c8f2ee86717d989415a27eb8de700000000000000000000000000000077fd6a85ef6f7b70f86f03d7b54cbdae92000000000000000000000000000000000027141e3f964fb6ddf0e140647eaa60000000000000000000000000000000047d7f023a0199c8ca239d1eddacd14cc3000000000000000000000000000000000022ac1addcb85d1008f22fcfbfc422c000000000000000000000000000000fbe79ecf3d8c9179c21fa2f0cf442449ab00000000000000000000000000000000000156c0384e866da014ca51ec61c4b30000000000000000000000000000007ce6827458e253edf8da4a33b1586225a900000000000000000000000000000000001bab9d68558bc45e7323bd3e230c85000000000000000000000000000000e3132208b04b9fe8ad58b8fbd32d2cbd5d00000000000000000000000000000000001b309db69080351d0a6a7ef9c12380000000000000000000000000000000dab39aa1911af136d4f3b3d7b55e4ee20b0000000000000000000000000000000000111367e5d48b2924fd0fcec82cf556000000000000000000000000000000787ee109d6b1143228780a4caea6987d9e00000000000000000000000000000000002ad6d31c5935e0530c825b523c32a80000000000000000000000000000006ac41b4e06bddeca7e33ab98835b392f87000000000000000000000000000000000029e28e6a593f7616c2783191e9b8650000000000000000000000000000006228b0f5c29ab99b8b65894e1bea0c849a00000000000000000000000000000000002b4fb1bccf3ef7451248568246f060000000000000000000000000000000e9bbd8ffafb278057441b6bdce77fbf09100000000000000000000000000000000001817e00822b5bb8f6681a24892d1e500000000000000000000000000000031e66c8172b6340c10f1924346b92baa5d00000000000000000000000000000000002c2a63e7ac78f2f4a76d66598aa0300000000000000000000000000000000f516d1a8312b6a69bcfd1aab63c38214c0000000000000000000000000000000000009b25a9522194257de67c70aa46be000000000000000000000000000000149192d38f68bc41c5bbba5c4b258fbbfb000000000000000000000000000000000028cbea8f8d5b8c7f2ca76cd1ff5b040000000000000000000000000000003f3e837166fd34a04baae049c2d56226700000000000000000000000000000000000098690e8c56c24e8404dc12d2d35ae0000000000000000000000000000002dfcde187cfd0a1e5ad8c0afb8efdeb15e000000000000000000000000000000000029bdbb3ddda1f2cd8814dce28913bb000000000000000000000000000000dad43f88b82dd9ca3ca07d8b0b27d12c6300000000000000000000000000000000002a3157130ac2f280c7acdbebf7e14b000000000000000000000000000000529a7292575808abd711164b32eeaa423e000000000000000000000000000000000017440beba4f7128ca9a14990d0ae380000000000000000000000000000005bee7521fd428f7043e8c7d413e7b54865000000000000000000000000000000000005cfb2b1f9ac0410006afaa4f3727d000000000000000000000000000000a57437f40d59b53415ec2b7cc5793f20290000000000000000000000000000000000115a1e7b8f8e9ca658829896d5cb91000000000000000000000000000000413600764f32f34507f6069a5912ed074700000000000000000000000000000000001f2596918873c79b804cf105b991a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000027f1bafb0a0a7acaa4723284ac5483e9ecc0f1c7e3fa160b3eb29ddeb2762dfb16ebfe29861c974c5afb55359107e964e6d340230dee8a3f68d1d3a6aad1603a28da221a944ae0b472ace41ce982230732566655cc37c5941c1fce7ca145f6f01c29a1acf6c6a1dd3dde5ddfa46ed8eb05f7c35a0e3704e1eed23cebe26df4c607ac1964550464bdadfe142a43fa6a8cfd2c63be53ae097d3ce63e293b8f0123021812a02447317542da6303b352b6632c53495c494f0bba537e4eecea3eebce2d497e0ff0ce7a82829eb9bee545ba3a0a3efc61dc27d75ae71ba61bd2e902830ff4c137a645efbe95acc264f820ce1dec29244ae18fafeee2dff89c6e18efdb2c44f8340f59fab85b4182fa693ddee38618bbeb4c171b6724db85f57f97383507729338553eabc0a042616a5b7a7b7aee8e8d6d7dd492beee0e5dbf58c4b9c51e825b4ef03df362103e3547f53bf3c258900d773f85e6f30cdd4befef1655260576f17264694064b4a6542ead7f2a74acb17a934ba74168cd7f805cf6463269160374176f2ad3a13691811d82fc4afb2f2da6a55d4bb6c63224aaa33aa170d50381489f318b81a9e8fa7ec880d171b45b0a7a4d8b41cfc1898a04819059fb52116b0b4efe883e11977c5dfada67ff9e05b19051c5f92cef670de3a22c99dd7130592c25968c7785caa85540bc1378a3db0ac6ed7737d619e3cfcbb691b4e62f212bc81d35f3526dbe8289180379bfcc1cf5709cac4dfbaec5c6c1b9ac6a58602d77b3547fa4e79ad367884cdde81f3c1a4730e40e8a76c292fc2d3290d5d35a256218e6c02eff30b897db18a9d8970028f0249071f9d10c15e808750c88b9e02e35ba0767015fe4d5207d223f2b148306891b9806a720d0248046ef3229d3f90baf9527c07f38a3cfa5674b574a57097977cfc72545e65d2d60a17cd0cfbca00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b37b0ae19eef97ede78d41e51ee1fe11f200000000000000000000000000000000000433e135f69793c87cfb404ad2a6b5000000000000000000000000000000abb49b04bc0d360cd1f3487333b95c456600000000000000000000000000000000000b46d3269d654647f452db5d3775fe00000000000000000000000000000059504a5183b9c97f4c5356ba1d81d340410000000000000000000000000000000000249ca92da29d6e057eba0715b87e4a000000000000000000000000000000ecfd9da508a7efc1d8d72f8f99780ccbb800000000000000000000000000000000002be43dc89f51eefafeec2d0a548ace0000029c","publicInputs":"0x1cb6dc9b8c6041726c30d6a662f304689224a8892ad7f74f16c745bf376d8043000000022de2da46306bc0b0e5fdbb6056987d6fc5404cfa5109f44d1b7bf367c55402da000000041c5492e4dcb2d47218f5e64963e5d6e25bd0a4d60a139d80a9eec6c98a6918eb2c79f28a7380543755cb2c2ebae754a7c5cdc02c57b89e76ccd21b8d83353ebd000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001085acf60fccf9388034ce3753ffc9f4acd347ce11ad60ca76342f5dfa1afce221055565154d81bf243f21a818fc3265eb3a0fb1564f3a932e8e87808c52da2900000000000000000000000000000000000000000000000000000000000000000ac4f3ee53aedc4865073ae7fb664e7401d10eadbe3bbcc266c35059f14826bb000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac4f3ee53aedc4865073ae7fb664e7401d10eadbe3bbcc266c35059f14826bb000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"} \ No newline at end of file