From 520820c1243e4ba032f9540f06b89f5046097543 Mon Sep 17 00:00:00 2001 From: Tiemo Bang Date: Fri, 12 Jul 2024 20:28:22 +0000 Subject: [PATCH] More versions of by name for benchmarking --- .../tpcc/benches/byname.rs | 533 ++++--- .../tpcc/benches/byname_max.rs | 2 +- .../tpcc/generate_dbsp.sh | 18 +- .../tpcc/graphs/byname_sql_constargs.rs.png | Bin 0 -> 97747 bytes .../byname_sql_constargs_inlined.rs.png | Bin 0 -> 93683 bytes .../byname_sql_incremental_constargs.rs.png | Bin 0 -> 85748 bytes ...e_sql_incremental_constargs_inlined.rs.png | Bin 0 -> 84617 bytes ...emental_constargs_inlined_minimized.rs.png | Bin 0 -> 70320 bytes .../byname_sql_constargs.rs.handles.txt | 1 + ...yname_sql_constargs_inlined.rs.handles.txt | 1 + ...e_sql_incremental_constargs.rs.handles.txt | 1 + ...cremental_constargs_inlined.rs.handles.txt | 1 + ...constargs_inlined_minimized.rs.handles.txt | 1 + .../tpcc/sql/byname_constargs.sql | 17 + .../tpcc/sql/byname_constargs_inlined.sql | 14 + .../byname_constargs_inlined_minimized.sql | 25 + .../tpcc/sql/stock_level.sql | 24 + .../tpcc/src/byname_sql.rs | 1249 +++++++++++++++-- .../tpcc/src/byname_sql_constargs.rs | 822 +++++++++++ .../tpcc/src/byname_sql_constargs_inlined.rs | 815 +++++++++++ .../tpcc/src/byname_sql_incremental.rs | 1249 +++++++++++++++-- .../src/byname_sql_incremental_constargs.rs | 821 +++++++++++ ...yname_sql_incremental_constargs_inlined.rs | 814 +++++++++++ .../tpcc/src/datatypes.rs | 28 + incremental_transactions/tpcc/src/lib.rs | 38 +- 25 files changed, 5863 insertions(+), 611 deletions(-) create mode 100644 incremental_transactions/tpcc/graphs/byname_sql_constargs.rs.png create mode 100644 incremental_transactions/tpcc/graphs/byname_sql_constargs_inlined.rs.png create mode 100644 incremental_transactions/tpcc/graphs/byname_sql_incremental_constargs.rs.png create mode 100644 incremental_transactions/tpcc/graphs/byname_sql_incremental_constargs_inlined.rs.png create mode 100644 incremental_transactions/tpcc/graphs/byname_sql_incremental_constargs_inlined_minimized.rs.png create mode 100644 incremental_transactions/tpcc/handles/byname_sql_constargs.rs.handles.txt create mode 100644 incremental_transactions/tpcc/handles/byname_sql_constargs_inlined.rs.handles.txt create mode 100644 incremental_transactions/tpcc/handles/byname_sql_incremental_constargs.rs.handles.txt create mode 100644 incremental_transactions/tpcc/handles/byname_sql_incremental_constargs_inlined.rs.handles.txt create mode 100644 incremental_transactions/tpcc/handles/byname_sql_incremental_constargs_inlined_minimized.rs.handles.txt create mode 100644 incremental_transactions/tpcc/sql/byname_constargs.sql create mode 100644 incremental_transactions/tpcc/sql/byname_constargs_inlined.sql create mode 100644 incremental_transactions/tpcc/sql/byname_constargs_inlined_minimized.sql create mode 100644 incremental_transactions/tpcc/sql/stock_level.sql create mode 100644 incremental_transactions/tpcc/src/byname_sql_constargs.rs create mode 100644 incremental_transactions/tpcc/src/byname_sql_constargs_inlined.rs create mode 100644 incremental_transactions/tpcc/src/byname_sql_incremental_constargs.rs create mode 100644 incremental_transactions/tpcc/src/byname_sql_incremental_constargs_inlined.rs create mode 100644 incremental_transactions/tpcc/src/datatypes.rs diff --git a/incremental_transactions/tpcc/benches/byname.rs b/incremental_transactions/tpcc/benches/byname.rs index 26acc7937..7db6620c0 100644 --- a/incremental_transactions/tpcc/benches/byname.rs +++ b/incremental_transactions/tpcc/benches/byname.rs @@ -9,22 +9,53 @@ use dbsp::{ utils::{Tup10, Tup2}, }; use tpcc::{ - byname_sql::{self, Tup21}, - byname_sql_incremental, + byname_sql, byname_sql_constargs, byname_sql_constargs_inlined, byname_sql_incremental, + byname_sql_incremental_constargs, byname_sql_incremental_constargs_inlined, + byname_sql_incremental_constargs_inlined_minimized, datatypes::*, }; +#[derive(Clone, Copy, Debug)] +enum ByNameImplementation { + Plain, + PlainConstArgs, + PlainConstArgsInlined, + Incremental, + IncrementalConstArgs, + IncrementalConstArgsInlined, + IncrementalConstArgsInlinedMinimized, +} + +impl std::fmt::Display for ByNameImplementation { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + ByNameImplementation::Plain => write!(f, "Plain"), + ByNameImplementation::PlainConstArgs => write!(f, "PlainConstArgs"), + ByNameImplementation::PlainConstArgsInlined => write!(f, "PlainConstArgsInlined"), + ByNameImplementation::Incremental => write!(f, "Incremental"), + ByNameImplementation::IncrementalConstArgs => write!(f, "IncrementalConstArgs"), + ByNameImplementation::IncrementalConstArgsInlined => { + write!(f, "IncrementalConstArgsInlined") + } + ByNameImplementation::IncrementalConstArgsInlinedMinimized => { + write!(f, "IncrementalConstArgsInlinedMinimized") + } + } + } +} + #[derive(Clone, Copy)] struct ExperimentInput { base_size: i32, updates_size: i32, + implementation: ByNameImplementation, } impl std::fmt::Display for ExperimentInput { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!( f, - "Base Size={}, Updates Size={}", - self.base_size, self.updates_size + "{} Base Size={}, Updates Size={}", + self.implementation, self.base_size, self.updates_size ) } } @@ -33,19 +64,35 @@ fn byname(c: &mut Criterion) { let num_workers = 1; // Input the initial size of the customer relation and the number of updates let base_size = 3000; // Number of customers per district - let update_sizes = vec![1, 2, 4, 8, 16, 32, 64, 128, 256, 512]; + //let update_sizes = vec![0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512]; + let update_sizes = vec![0, 1, 2, 4, 8, 16]; + let implementations = vec![ + ByNameImplementation::Plain, + ByNameImplementation::PlainConstArgs, + ByNameImplementation::PlainConstArgsInlined, + ByNameImplementation::Incremental, + ByNameImplementation::IncrementalConstArgs, + ByNameImplementation::IncrementalConstArgsInlined, + ]; let inputs: Vec<_> = update_sizes .into_iter() - .map(|updates_size| ExperimentInput { + //.zip(implementations.into_iter()) + .flat_map(|update_size| { + implementations + .iter() + .map(move |&implementation| (update_size, implementation)) + }) + .map(|(updates_size, implementation)| ExperimentInput { base_size, updates_size, + implementation, }) .collect(); let mut group = c.benchmark_group("Byname"); byname_plain(&mut group, inputs.clone(), num_workers); - byname_incremental(&mut group, inputs.clone(), num_workers); + //byname_incremental(&mut group, inputs.clone(), num_workers); group.finish(); } @@ -54,204 +101,11 @@ fn byname_plain( group: &mut BenchmarkGroup, inputs: Vec, num_workers: usize, -) { - for input in inputs { - group.throughput(criterion::Throughput::Elements(input.updates_size as u64)); - group.bench_with_input(BenchmarkId::new("Plain", input), &input, |b, input| { - /* - c_id INT, - c_d_id INT, - c_w_id INT, - c_first VARCHAR(16), - c_middle CHAR(2), - c_last VARCHAR(16), - */ - let c_d_id = 1; - let c_w_id = 1; - //let c_first = "first_name".to_string(); - let c_middle = "".to_string(); - let c_last = "last_name".to_string(); - let weight = 1; - - let base_vals: Vec< - Tup2, _>, - > = (0..input.base_size) - .into_iter() - .map(|i| { - ( - ( - Some(i), // c_id - Some(c_d_id), - Some(c_w_id), - Some(i.to_string()), // first name - Some(c_middle.clone()), - Some(c_last.clone()), - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - ) - .into(), - weight, - ) - .into() - }) - .collect(); - - let update_vals: Vec< - Tup2, _>, - > = (0..input.updates_size) - .into_iter() - .map(|i| { - ( - ( - Some(i), // c_id - Some(c_d_id), - Some(c_w_id), - Some((input.base_size + i).to_string()), // first name - Some(c_middle.clone()), - Some(c_last.clone()), - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - ) - .into(), - weight, - ) - .into() - }) - .collect(); - - let txn_id = 1; - let transaction_paramters: Tup10<_, _, _, _, _, _, _, _, _, _> = ( - Some(txn_id), - None, - None, - None, - Some(c_w_id), - Some(c_d_id), - Some(c_last), - None, - None, - None, - ) - .into(); - - // Create references to be passed into the benchmark - let base_vals = RefCell::new(base_vals); - let base_vals_mut_ref = base_vals.borrow_mut(); - let update_vals = RefCell::new(update_vals); - let update_vals_mut_ref = update_vals.borrow_mut(); - let transaction_paramters = RefCell::new(transaction_paramters); - let transaction_paramters_ref = transaction_paramters.borrow(); - - b.iter_batched( - || { - // Initialize a new circuit - let cconf = CircuitConfig::with_workers(num_workers); - let (circuit, handles) = byname_sql::circuit(cconf).unwrap(); - let ( - _in_warehouse_static, - _in_warehouse, - _in_district_static, - _in_district_next_id, - _in_district_ytd, - in_customer, - in_transaction_parameters, - _out_cust_agg, - out_cust_med, - ) = handles; - - // Return the relevant handles and references to the data - ( - circuit, - in_customer, - in_transaction_parameters, - out_cust_med, - base_vals_mut_ref.clone(), - update_vals_mut_ref.clone(), - transaction_paramters_ref.clone(), - ) - }, - |( - mut circuit, - in_customer, - in_transaction_parameters, - out_cust_max_order_by, - mut base_vals, - mut update_vals, - transaction_paramters, - )| { - // Do the initial load - // Send the base data - in_customer.append(base_vals.as_mut()); - - // Send the transaction parameters - in_transaction_parameters.push(transaction_paramters.clone(), 1); - - // Execute the circuit on these inputs - circuit.step().unwrap(); - - // Get output - let out = out_cust_max_order_by.consolidate(); - - let result: Vec<_> = out.iter().collect(); - black_box(result); - - // Repeat the initial input for the for the non-incremental circuit - in_customer.append(base_vals.as_mut()); - in_transaction_parameters.push(transaction_paramters.clone(), 1); - - // Send the updates - in_customer.append(update_vals.as_mut()); - - // Execute the circuit on the updated inputs - circuit.step().unwrap(); - - // Get output - let out = out_cust_max_order_by.consolidate(); - - let result: Vec<_> = out.iter().collect(); - black_box(result); - }, - BatchSize::SmallInput, - ); - }); - } -} - -fn byname_incremental( - group: &mut BenchmarkGroup, - inputs: Vec, - num_workers: usize, ) { for input in inputs { group.throughput(criterion::Throughput::Elements(input.updates_size as u64)); group.bench_with_input( - BenchmarkId::new("Incremental", input), + BenchmarkId::new(format!("{}", input.implementation), input), &input, |b, input| { /* @@ -262,40 +116,15 @@ fn byname_incremental( c_middle CHAR(2), c_last VARCHAR(16), */ - let c_d_id = 1; - let c_w_id = 1; + let c_d_id = 43; + let c_w_id = 44; //let c_first = "first_name".to_string(); let c_middle = "".to_string(); - let c_last = "last_name".to_string(); + let c_last = "lastname".to_string(); let weight = 1; let base_vals: Vec< - Tup2< - byname_sql_incremental::Tup21< - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - >, - _, - >, + Tup2, _>, > = (0..input.base_size) .into_iter() .map(|i| { @@ -331,32 +160,7 @@ fn byname_incremental( .collect(); let update_vals: Vec< - Tup2< - byname_sql_incremental::Tup21< - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - >, - _, - >, + Tup2, _>, > = (0..input.updates_size) .into_iter() .map(|i| { @@ -365,7 +169,7 @@ fn byname_incremental( Some(i), // c_id Some(c_d_id), Some(c_w_id), - Some((input.base_size + i).to_string()), + Some((input.base_size + i).to_string()), // first name Some(c_middle.clone()), Some(c_last.clone()), None, @@ -418,26 +222,161 @@ fn byname_incremental( || { // Initialize a new circuit let cconf = CircuitConfig::with_workers(num_workers); - //let (circuit, handles) = byname_sql::circuit(cconf).unwrap(); - let (circuit, handles) = byname_sql_incremental::circuit(cconf).unwrap(); - let ( - _in_warehouse_static, - _in_warehouse, - _in_district_static, - _in_district_next_id, - _in_district_ytd, - in_customer, - in_transaction_parameters, - _out_cust_agg, - out_cust_max_order_by, - ) = handles; + + // Choose the implementation + let (circuit, (in_customer, in_transaction_parameters, out_cust_med)) = + match input.implementation { + ByNameImplementation::Plain => { + let (circuit, handles) = byname_sql::circuit(cconf).unwrap(); + let ( + _in_warehouse_static, + _in_warehouse, + _in_district_static, + _in_district_next_id, + _in_district_ytd, + in_customer, + in_transaction_parameters, + _out_cust_agg, + out_cust_med, + ) = handles; + + ( + circuit, + (in_customer, in_transaction_parameters, out_cust_med), + ) + } + ByNameImplementation::PlainConstArgs => { + let (circuit, handles) = + byname_sql_constargs::circuit(cconf).unwrap(); + let ( + _in_warehouse_static, + _in_warehouse, + _in_district_static, + _in_district_next_id, + _in_district_ytd, + in_customer, + in_transaction_parameters, + _out_cust_agg, + out_cust_med, + ) = handles; + + ( + circuit, + (in_customer, in_transaction_parameters, out_cust_med), + ) + } + ByNameImplementation::PlainConstArgsInlined => { + let (circuit, handles) = + byname_sql_constargs_inlined::circuit(cconf).unwrap(); + let ( + _in_warehouse_static, + _in_warehouse, + _in_district_static, + _in_district_next_id, + _in_district_ytd, + in_customer, + in_transaction_parameters, + //_out_cust_agg, + out_cust_med, + ) = handles; + + ( + circuit, + (in_customer, in_transaction_parameters, out_cust_med), + ) + } + ByNameImplementation::Incremental => { + let (circuit, handles) = + byname_sql_incremental::circuit(cconf).unwrap(); + let ( + _in_warehouse_static, + _in_warehouse, + _in_district_static, + _in_district_next_id, + _in_district_ytd, + in_customer, + in_transaction_parameters, + _out_cust_agg, + out_cust_med, + ) = handles; + + ( + circuit, + (in_customer, in_transaction_parameters, out_cust_med), + ) + } + ByNameImplementation::IncrementalConstArgs => { + let (circuit, handles) = + byname_sql_incremental_constargs::circuit(cconf).unwrap(); + let ( + _in_warehouse_static, + _in_warehouse, + _in_district_static, + _in_district_next_id, + _in_district_ytd, + in_customer, + in_transaction_parameters, + _out_cust_agg, + out_cust_med, + ) = handles; + + ( + circuit, + (in_customer, in_transaction_parameters, out_cust_med), + ) + } + ByNameImplementation::IncrementalConstArgsInlined => { + let (circuit, handles) = + byname_sql_incremental_constargs_inlined::circuit(cconf) + .unwrap(); + + let ( + _in_warehouse_static, + _in_warehouse, + _in_district_static, + _in_district_next_id, + _in_district_ytd, + in_customer, + in_transaction_parameters, + //_out_cust_agg, + out_cust_med, + ) = handles; + + ( + circuit, + (in_customer, in_transaction_parameters, out_cust_med), + ) + } + ByNameImplementation::IncrementalConstArgsInlinedMinimized => { + let (circuit, handles) = + byname_sql_incremental_constargs_inlined_minimized::circuit(cconf) + .unwrap(); + + let ( + _in_warehouse_static, + _in_warehouse, + _in_district_static, + _in_district_next_id, + _in_district_ytd, + in_customer, + in_transaction_parameters, + //_out_cust_agg, + out_cust_med, + ) = handles; + + ( + circuit, + (in_customer, in_transaction_parameters, out_cust_med), + ) + } + }; // Return the relevant handles and references to the data ( circuit, in_customer, in_transaction_parameters, - out_cust_max_order_by, + out_cust_med, base_vals_mut_ref.clone(), update_vals_mut_ref.clone(), transaction_paramters_ref.clone(), @@ -452,11 +391,20 @@ fn byname_incremental( mut update_vals, transaction_paramters, )| { + // Do the initial load // Send the base data in_customer.append(base_vals.as_mut()); - // Send the transaction parameters - in_transaction_parameters.push(transaction_paramters.clone(), 1); + // Send the transaction parameters as needed + match input.implementation { + ByNameImplementation::Incremental | ByNameImplementation::Plain => { + in_transaction_parameters.push(transaction_paramters.clone(), 1); + } + ByNameImplementation::PlainConstArgs + | ByNameImplementation::PlainConstArgsInlined + | ByNameImplementation::IncrementalConstArgs + | ByNameImplementation::IncrementalConstArgsInlined => {} + } // Execute the circuit on these inputs circuit.step().unwrap(); @@ -467,21 +415,29 @@ fn byname_incremental( let result: Vec<_> = out.iter().collect(); black_box(result); - // Repeat the initial input for the for the non-incremental circuit - in_customer.append(base_vals.as_mut()); - in_transaction_parameters.push(transaction_paramters.clone(), 1); - - // Send the updates - in_customer.append(update_vals.as_mut()); - - // Execute the circuit on the updated inputs - circuit.step().unwrap(); - - // Get output - let out = out_cust_max_order_by.consolidate(); - - let result: Vec<_> = out.iter().collect(); - black_box(result); + if update_vals.len() > 0 { + // Repeat the initial input for the for the non-incremental circuit + match input.implementation { + ByNameImplementation::Plain => { + in_customer.append(base_vals.as_mut()); + in_transaction_parameters + .push(transaction_paramters.clone(), 1); + } + _ => {} + } + + // Send the updates + in_customer.append(update_vals.as_mut()); + + // Execute the circuit on the updated inputs + circuit.step().unwrap(); + + // Get output + let out = out_cust_max_order_by.consolidate(); + + let result: Vec<_> = out.iter().collect(); + black_box(result); + } }, BatchSize::SmallInput, ); @@ -494,7 +450,6 @@ fn byname_incremental( criterion_group! { name = benches; config = Criterion::default().measurement_time(std::time::Duration::from_secs(30)); - //targets = byname_plain, byname_incremental targets = byname } criterion_main!(benches); diff --git a/incremental_transactions/tpcc/benches/byname_max.rs b/incremental_transactions/tpcc/benches/byname_max.rs index da2d361b6..c610ea5ed 100644 --- a/incremental_transactions/tpcc/benches/byname_max.rs +++ b/incremental_transactions/tpcc/benches/byname_max.rs @@ -33,7 +33,7 @@ fn byname(c: &mut Criterion) { let num_workers = 1; // Input the initial size of the customer relation and the number of updates let base_size = 3000; // Number of customers per district - let update_sizes = vec![1, 2, 4, 8, 16, 32, 64, 128, 256, 512]; + let update_sizes = vec![0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512]; let inputs: Vec<_> = update_sizes .into_iter() .map(|updates_size| ExperimentInput { diff --git a/incremental_transactions/tpcc/generate_dbsp.sh b/incremental_transactions/tpcc/generate_dbsp.sh index f62538393..921148126 100755 --- a/incremental_transactions/tpcc/generate_dbsp.sh +++ b/incremental_transactions/tpcc/generate_dbsp.sh @@ -40,6 +40,11 @@ compile() { # Concatenate the schema and payment files on the fly and hand to the compiler args="--alltables --handles ${DO_INCREMENTAL}" ${SQL_COMPILER} <(cat "${SCHEMA}" "${VIEWS_FILE}") ${args} -o ${OUTPUT} + # Check if the compiler failed and exit + if [ $? -ne 0 ]; then + echo "Compilation failed" + exit 1 + fi # Remove the allocator code from the output remove_allocator "${OUTPUT}" @@ -64,9 +69,14 @@ compile() { # compile "${THIS_ABS_DIR}/sql/payment.sql" "${THIS_ABS_DIR}/src/payment_sql.rs" 0 1 # compile "${THIS_ABS_DIR}/sql/payment.sql" "${THIS_ABS_DIR}/src/payment_sql_incremental.rs" 1 1 -compile "${THIS_ABS_DIR}/sql/byname.sql" "${THIS_ABS_DIR}/src/byname_sql.rs" 0 1 -compile "${THIS_ABS_DIR}/sql/byname.sql" "${THIS_ABS_DIR}/src/byname_sql_incremental.rs" 1 1 -compile "${THIS_ABS_DIR}/sql/byname_max.sql" "${THIS_ABS_DIR}/src/byname_max_sql.rs" 0 1 -compile "${THIS_ABS_DIR}/sql/byname_max.sql" "${THIS_ABS_DIR}/src/byname_max_sql_incremental.rs" 1 1 +#compile "${THIS_ABS_DIR}/sql/byname.sql" "${THIS_ABS_DIR}/src/byname_sql.rs" 0 1 +#compile "${THIS_ABS_DIR}/sql/byname.sql" "${THIS_ABS_DIR}/src/byname_sql_incremental.rs" 1 1 +#compile "${THIS_ABS_DIR}/sql/byname_constargs.sql" "${THIS_ABS_DIR}/src/byname_sql_constargs.rs" 0 1 +#compile "${THIS_ABS_DIR}/sql/byname_constargs_inlined.sql" "${THIS_ABS_DIR}/src/byname_sql_constargs_inlined.rs" 0 1 +compile "${THIS_ABS_DIR}/sql/byname_constargs_inlined_minimized.sql" "${THIS_ABS_DIR}/src/byname_sql_incremental_constargs_inlined_minimized.rs" 1 1 +#compile "${THIS_ABS_DIR}/sql/byname_constargs.sql" "${THIS_ABS_DIR}/src/byname_sql_incremental_constargs.rs" 1 1 +#compile "${THIS_ABS_DIR}/sql/byname_constargs_inlined.sql" "${THIS_ABS_DIR}/src/byname_sql_incremental_constargs_inlined.rs" 1 1 +#compile "${THIS_ABS_DIR}/sql/byname_max.sql" "${THIS_ABS_DIR}/src/byname_max_sql.rs" 0 1 +#compile "${THIS_ABS_DIR}/sql/byname_max.sql" "${THIS_ABS_DIR}/src/byname_max_sql_incremental.rs" 1 1 #compile "${THIS_ABS_DIR}/sql/warehouse_ytd.sql" "${THIS_ABS_DIR}/src/warehouse_ytd_sql.rs" 0 1 #compile "${THIS_ABS_DIR}/sql/warehouse_ytd.sql" "${THIS_ABS_DIR}/src/warehouse_ytd_sql_incremental.rs" 1 1 diff --git a/incremental_transactions/tpcc/graphs/byname_sql_constargs.rs.png b/incremental_transactions/tpcc/graphs/byname_sql_constargs.rs.png new file mode 100644 index 0000000000000000000000000000000000000000..337a3dea7953762cd1fb61e8c341898fba603a32 GIT binary patch literal 97747 zcmcG$2UJzr7A<%!ODz+WB}N3a1d*(uBuPdD6qFzt6eLMfa>h_f2?`1Vl2MXm$r((D zfMfy5DmhD*+;gL1{ombxbdUbctM}@`J@=d)R+ww9xzF8m(&8J}?OaEpP&P`OJ|Rn? ztl^+ge((HaHU6@*R;C93TCF7|euA<{{u7!P!~cwpPM%I2K~F6sd;MeA740}|NQgBzkeJR`#t=$l-TawJ6Ey% z_GIq~b{cQ3Cz5hktQNWWtwP3)Le7rP?<&fFH#DH8XQfx(pWW5$cTkyqs~g7frm|2@`CTMex(?-(AVqYb!9>nTW{v6 zfXqyOkGO4=Pmj-ZbNN{KaA}%6d~<6JHT@3y!NxSH5bowk^&G1^i_SteHtnBT#@mE! zI`UnZs}e^)Jrrf=*g`MlFqY&nZRRl;@P4IDN39F<6m8fdAH9&x*H71`9^TE|pr@k3 z#LTQW@z-?+{dW)c(3^%Sr|7!gy*pxa@3#K_JiCeH z`Ib}zxgcSC-ZE~-*+~Tp3k&~lDh83b2r1ty6~V%S&I`F5tr%RiVSNIt{Idtf4Lo|~ zJ<(CYC4V--{%XS|HaE5PipsGJPF>;+NYg4@$Hd6k^KGO(+i5=Abt^~Ax-G0dcbS7L zy<|k9XNPhsCN=a#ne7GslF6|e9IufPZO9uMZ*s6|^5W?aK4NX+-gJ}EajL~yCEdtx za-bn>{Wi}1{QOExl8?@vIPp(kZEV!)jXR%N^j2GC43-WxXN56I`RKP~TMAzL^3Tm% zw-h2Iw^$B*JTD_M9d68U&&{poW0H1?y5j3Q8xNazy=T{Co_b&(7g#KuKM-J=U-jnh zW-Ja1osi9e8l42StfyT0-;UkAdv|7}h{1BK>#R4svaE;D=)X^&K9zrR?Dm%FXf3KSob0I$F#>zD@*h8yApN1(dZalI$& z&1N_~+9^Hpnk)C~O+*c!uC%QjD*Dyo5}x5Ajx+l83F-!ok`fXlr={Ny*_-L)l(Fq9 zW}9>$4pJ8p9+f1wFJW_`qLamiHA34k7mTKaBD|vAGQ{;l4E^?AG@-GZlG^@bA>K3m#ZG8004C$`_j?2y_&s~+52M%-JM$R;~<=JO^ zX>VtexKGP>!OScf_egVIbmGv+ReJK|$xczH+{iP2TJ^KlqQ{OOH+RsSVN8cZGws_a z=^3M#n9$MDvEk&csWxX#^=ymtpI_acc)5l_zsQ|V^2{0e#fAAaTr500kU|X3c-oUm zid8^Bc{qPIfsuukRkFCa*kH9?UBw~%G3`oibx&0oj|0QrQ}-&HObg=oo%PqB=&Nl^ zGxXict`sWi&1&%KpS67-lfqO*;DS44&YU^pZ`G7x$|d11V6N-mt(vO;@JW1NIr%(U;G%PHo*(GJPC(J{4Rxrz@xm|K-&Br5iULvKmmDM~vvJd~z#)VWxk>uz*F+17ch^ zSFLB=v*)O$!^mw(U(Wc}JbObdnN{KAhN;oPjJ7LCXFCt+KX97v+(x2-Y5sJiNpt4I z_8*SeoK=zS->=?VntVLO-+D&AI4SUfhP3&0n7M+m-FRhU!9vVbtG$ebgoH}+<-1t8 zh)sJ>?ccZWZGzRiwfTOVU1?aJc640kP)$Em-NF!eCXoMNY3EihjkxE}4rpSi*$uCqFihp7`mAgS*O*Hilac zGVD(LrlE27-aUDk6JpI?i7N5S4;xgUpye}>Ptq!U^!V{Jgx1W?u~O>UNS^kY z!0=$Hoc2u3K1+dQj-7{nEv#m(EfRM9^%ogvlNFmpif&oSBu}nIujiL9Ul=7SL}ue) ztHvkgh*L6u_sN#SLuWan+7&#fW*&^2`A21G2ksZh*A(0t<;^!EX78RM;Qzxb2X(RF zI}cxZL`5(3Y^Wut$=xHet5`e4J-w4{`h)sxJo8w3>}+sYvqq|r{bbxe>A+{*!S3vvmjq&?(6ZUe6MY9-n{8~_i(SjuzmWKy13|1pDuc{DoD1!y)Sp} z+_^iQDUx0Nb@BNB4>TM`3U@UzPVwJqZf}Z|2}uxVaFoAx?b^DvYm2WB7P8?kKH7*XV2QZ~c#0Cm^q->Xz*!4!zZ_Fu`(r*8R-viW$j-D48-<$CwTq z>F3FMRJ$b>78Zcw&Lg#K*|jTf4ZV#RnE(vihf`fr`dz2MOV<7SPhYxp$<@Q7erBRy zxK#r-dPwWd9}?DXKGEy76%*8|9v{>`WYWyvVqPIk?@_pE=%b1GO7St*uy%WK-;8ax zg?ytW5B40V*}63nF=ntS1E^^;v$XuwP)o~f|AIrZsUUZP@2&u;oc_#^%kR^B;vMU2 zv&^nueLj>kEMnZ0e%6JWp*%V0q}x^&A)#iDgWYd@J2vBm9hhIaCflDOSD4;+NMq9zgPO>lyhe`!DZHLs>?>QcWVh)Ls%A54_qSJM z=jjXBjq4vatUI%D=b?9Ieu(yx+4g>gAI|La+R0}U$EKLj12p$ODgNu%tHR@z$7ecy zHOGq>oWpI6XD0_q2s?J{SgLuqv|m}*hD6cHkJ>xxvb2k+R{j3_$MSHM9IJS_f z*VH4_42@?8O$Y9}uUF{01;*y5-XDC(K-OQ%p(9l|D|zVs+-NBm*>-@EIIF=%o$Pxd zAt4&Jom+Am$1S&Us-1Ii$PIR!R0gVGFEd=Vj;1o-aaKM-O`yq~TI5?Oxn*y*54-YH zWR_<(BVPp4rG}CivWlke@8CJbl{fA=H$QK#HW{DMnrs{vt?=yJQ8sFFd$wu(1M(5y3w`L#gUN3Iq`=NA0ps+wG=c@>N-EzqBp6mXO_pT z<=Z1SCL404^R)EovS0x*z~c!-`IxJpUl{~bZ`dGjW0Q$2)oD@1Eo^p7rL|=3g`-E0 z+I0t6cfi~aYQOCP&ZEi`W%iqRjnE?x+qLYiX3CqNY)bDg@?c2x;ZThfIP$V)u^=U| zfmr3}cdN8sWy{22+Ubp`K0my;kjQAzoOvzVyxV;+4ffUxl-t*k5+$zv&TTd_tldt$ zyLw1)NbiHqd)nEABV8pk;}0%mZ-+kRnLhP1{8_V8J9kD z=qt9pn=_iu?2)Kj7=N-wJpxIpW&ed7tzyZU z{!@BU;vV!WDZ2Ni26gsva!RwXun3r(IDF;9xx0TcJ$m#gye3K}C&IYD8}?bTxJWj}CyXvERoh*>!c6@^J_ZnRlvNkrCA-UPjt-$u{4 ziirG*$87LILF*xQ2`kOIHv#iEga_t19a!pXqPl_rvHb!s4)5B{rkJQvdv`OlJnEke zb*F&92M;qcYK!RY&!F(BZF63XSJZS=;4^KtuniKJc)eHLU7nqx2=G~NP5cU_7q(16iL9>q2cj~tROCWeO z_s%BfXj2Wi3q&QFS?mg^9UT(V=wwlL^eBH{6S#vpJ6p4nHi~Qf#!v}$@OFg;c+p6{RxcdZ($5ap6cw`Y!1 zNh?WElAT3WWHHn%aQn`kzRxZUR^R4_(yfOzBucLGOuT=@rK#b`oj2~vbLGRcCtnKP z3`sm}D=0vD=kMV{`^^aA%=segMRjb{pgzh#Bkg)pv$(ONm9~>-S4w7%Ebp3QyL6I zTEZ7?zkYgosNhwFiEUWMCPWm?l8N!?tCy)Bw5A!>TYP%40s;LrisyPbP|HqQftNP( zvr~$as3dGjLMl;GN>j z)yVRl!^4SSJbFDu7b=my!$}GUE+3WLFs;+}{)$?NcU;%^7?Iv{-?3iZyfZX(_ry?( zD$2hUy$b2EMp8bZr0qfWusZ(6eI!kL^H5h0e_g}1M4qD9W|pYoDsNl=u=W#*lTzYe z#&3&M1{GD492O2ZdD;^NpdMSf{n*E-6yxbDA`?DwB8q$8rkJp)xC0#!%-2^JAJCp$ zC$(4CN`k*%_)~&rfr(-c1}Te7in_<(NMXHQMdphaVyddq>(?M;RE$?E0NX3#8lzRW zFT|^`?A|S=nqg9lMH_VOE)P0F%H_kzO2}nB_xW1ijr#Hi@EXh3#wgSX4NONU>kg-g zB+smR+mNEiB(XRqy6DwD^ZL~*MhSem^qR8$KmYs#aD58f3d|LN5cwhVnsy!#KVX=n zJ70?Rr1_}4(4<+>WXJw~Yu$>ez->y4Z4dW~_rc5jMV<50OqO-PNF1GZvvH6S7XcixN$uIDvI`<2`$vot@7H3Dz3>UQPX*d3!}g zh0Jj7nER{OuhYyrB^@Ul^sEZ%8=SsPcZbx&F%rQ0^r5Je?=10FpWc>RUNy*@c+J9L z*nRr?-gj(or|SzAB7mU#ft&2+C+f*fz|Ooe9PD;+Q&n1!9e3qLY zqE0nE<*WG@Nl~@PGdm=#og?xMYW78GyG#iP=35szyr_A{HpFxB1?9Gjiy>G6@E4|$ zzVx@v19#Nx@%dVHUlT2UY+R+f1UrDa`l`ZQP#TEL^z4D`+G%X+uE)ej!?F0Sox1SN8~uTgNq)f+5B*T)fP;}i z#ZogjJyr{M2I4x2D0lGSLC;6+Ww+&|oOiq(pSov=Iu9fD^z^g<-$rU@lRpeC5qX1z zY-MFc=Rrrt(|!YZN-+|hc$)+^Bu&5S7>eKzz!L)t3_@jg71v>Yotbf#JNoSz8xksl zYN88tQv^y4ZP%b2v+S?)=QZ|EH*HH0Fz@Q|(+jQww>du3pV-7X*v=7rugH6_c#FG3 zh3$>Q-5(M)MPFOhKRdry!g}ne6{+Y^HZ_&cnEjr`tk)5oOPmx0dK z(7NK~m2BPPb(4jUp-aFK&=Xj975Yh7YE2`H6s=`wbBf}Gx1DL5E z!Lw!SUV)d^Cr+KZ(o^|_u%<=BQ7K@Mj6XgrcREq+3pd}cfUA7sMM>rN?9~M{IyZJYu z%tL%9&Z;YYOwsd*k&pKL{HX*6I1U6t+{a+Sqo+q-!g~0mFG7GeJ5oJi4dh8^nHwn* zbolnXWzmI^LoKt?Do@8cxwZRqRESf_HRb;Mx^mkT_4wb3IE)eF@v_N@_m^S3R*<~Dt4EO0Jh zj8;jzvhI&Ru3n)V8lq1AQX28z7uc@{G^&~H5dc_wg)6O z!5%>>;?nb92}B?(N7xsnqbGnSeQ+{T?*wja>TgbJ>Cy!(RS%-(cg^*52Ij13z2;~) z`97lMT62ZBaaDbnXK$9EqBIvH;|WaP3q0u>28Ym9>$g7BEO3%8((CNm^|4labJjz| z340&w2^;U&fob{{0a82bS2*?RFV)URM3u6%g@!hm($89mtLA&k1dU>+>7PZLZ_L;c)X2-thr~&uSPh99_QMTnTF4)JbW|UhEI>e$- z+>gG<5vzg9$-yR`T&M1GI+9IM%$$#0lmZXH)UdezAwtXiY}=wwp;px+7P)~1QK4v< zC$_R;18TVgtj#JBzDM|77v*p))MOXu~!l718FLI`EvLm z`}$Y{Du8zEy8QIGH*7Z>{iy9xtd*n>W@E>?m3#K=iP6Z*E)N!tt&LUGvvEYxvu^$R znlKL$|K4n5TejYzvucCFmf1kk#Q)*+a4bfbg>4c`+;!qAk|ZaF+cZVzzTN`&&ZFM- z_C774!@wq1H}6->ws+1?)+y}+`;WfRiO69v-SSAc+|6eiwUT;JgD6wk#MjOug$T}= z3QP#ta?=;{G!yUs2OTQ|k5LNd4 zfOvSO%^n~JO|ML$UdE}*9?f1;h}XwqboKbu$SXeXLyUqHILPPu=;j@2dJb>v4slK( zG||YL%_esZQRqraOJAsoJWI-)oYwZH zpD`lq-UGIGYYnDL(szR2Ws!?~CU)bu^xv-YaQC}pAkks9Hqr@xm{fy@-Py3?@7^ID ztwfEyK8t|XPw%Y)>iGdGbVNSwAC*+e_f*W?lQD>)TVkDg+&H!9+kX{|BK@blj zP=3YYZ@~+HKemsO6LvdpmIjjz@24td|$iGL2ig#o&4=aJ0(Jc=oaWERw zHQ-D;pLRt7tzg!&QOsy3kM2EA&HOl0Fde4CK|u;pnA}BzCiA8n3G`EZ55#S z-6$Vy9+ey_W*hQhm^>?9G!fl!#Mi3+ny6y>NzD+cY(d5H_iTx|Ps78**{K`t-MHuj zu6ln5vqORiS|CP({i7Oqq%AHNSnw_ft%LLxu6!Pj**P4V#Zj%Ea;=kHHg%UJ>g`az zz(jh+^KM`Zyn4AP^!5V>%lr?QPEG-trCl!m3y8EI=##Mj$U{$nfCVfmW7r1Lpdb~8 z?O2zN%{;god2kRDb7K{T;0Qg3TD93GI`<=mq=6?rG&~Ewwl>#x>`(=`)idZkdJGEA zUEokjtqhm&surqG(UWP)qb3bO2IskhuV<4-fl2xRRv%hS9cmgMrscl;FFMLPvpL|Y zcQ_T+WteI`I&r`sCg8U7`hCv4oBE6`*amEW5#{IiRX z?iuOgw>@GTQP+Y;Cw;chQ&5$hgVf-| z%Uf$mCtmpLiKhGad8a60n!gC7G^b5b0qeZJ?aP-{J`@0Rsnh8c3 zlkW^|3#&%*!b+pWH6&=QublEY9EUz1TBsj4R5$}W8gLr+>2C;bsUXa}bG*rTMmwQbAztP1Yje}wkvrg62gY}O zY-mm)1!d#txRW-w-yz%4jtygX<9_fB3GE8O1IJ}ktb@C{yO~oO0=ooIUAhnWChW3K z(TF}eYQ&&FtoGsI+$Z;uOkr*}VVGH2r*59(0MB8?M()2uRI-u>Ki0UX*xCbgNl)Ev zDAry0Yk2Z0)Aih9AWJcmPqEPbw04&kuA*dZwq5mAJzpvHcZZ{2lo>pE8YZ7;2+XuG?2e{dSt8p!=V>g~gS@FPv6UuA4qFy_5K9^!fj03DN)G zdZiW0c@G{x?kVG^e9J^RAqTd9(uTH!zC!_OuyM&F1IMoqk6jQ6)m$}7J-UuEdG^J@ z*1jVvC_8j~Z>6xSz<)pNeMxzjSK`YxTs6TUXz_3J%FKTq|G2(oo|R&~7n&|N$IVyY zKRxM&M#SG?uPKyp?PMkPtzox*E|d&<{C=EjnW1_1Qze(VvmEDP@-=8!M9D=-M_+t- z(?nC0La|j6n))f$deH4S(;L8-z1AjtO?-{0Nm%5}9fTRgnYf|YN4duGfzdS$fqQls0-`Q$J(DCvk!#26`2s-_s zjT#{iDQfzSvYYGknV(8C+q&MGD1{`gllONC$i8-=o{|gz+nYI*H>E+wr(r;iJMRwu zDLA_>gd#(_F~>TQsH#xAB&O~_4UQDw1F;6HYI>Yv#S3;|!b$S-}=KXbVnJk-;r_jBGq6rSJ zqv|<7X%`#Ta}o-V+waVs!W9%T&KG_^^>d>>d~FVLXcgPF-{;$KUmLvp3;@CeVjJzw zH55wL3ca7=y>~qMvqMKns|1aC1rK`RdsN~wLL>hW!59z^EgjUH`RxB$#4vQQA^h+G zjWe{__ws!Y4@JmFEXI4zlV0m7mz9+3iC=y#;T=#seT1->9WEH&yh=)fNU`W0z8)=m zeDHP8ISS>g!LrV>!;YlmQ}?z%!8~iD<%)W)8ljI_iws*9bVLzxoJVjMh2pSvS!|fq z3Z4_Qay9_nb;`x_Xo1tb1&|=p`Maf?EC0Ir6}VRlq%EXCByH)QtK9olQlBA^#(n&# z1Zim4>lKt2%zo_SoEelg4Kxg&V4xAYbEjeW7r;DLJ)uxO87@mF-vtrj98gWH!}O?1mRUsA z=MH^9>nm;fc}{a9;@(`EtxJz!8d(-!iX|LEAD8Zk)fp5cyn-}2C~i(|+O!Gmtk2Tz z&41nAlE7PlJwT*O#KNmSe=KZk(?q>l6DVMA(OI%(Y0^>WmR-9)7i2$?Sb@vXwb)P9 z3w;(?K~Nu;E%s9=-)NRanr7bU))~CKxr*o!@UQz+MSD)V(wz6@R3`)UE7M)Nx87s0 z|Ajrff2`>XdQgv`Vihl53`MVi)vNfj#c8S|;EITX4;;GM(xQ=VJ}UIfN)Hp+6av&0 zloVOX7g;0}V&q|n_i1Qp4VT8X;n%os0|WJ;`Ed?8g(S?d*ViPVZX$v{v=X-yix#=D z92L|qp-9ZO9g74mHn!N$Y1opThCF!4yz5NZabgh5Yx8LgEK?+Gg|w?#FT_2r`keWm ztmf=geRGz%<DgIYI`^i3Zr>(|kHiOTLDgpp<>G#?Lan6jbU#(Im%BiU#;Byl5J3x?Ron3` zM~HarIv$FrI?daGp?yW{=YZs|wLH)aVEY7-lK=G%7gEn6iXOi7>i1iJkHwLy3C%v& z`}YqE(op^*!oB|4YPdC?xFt$xlntJYSOZg{duX+3-{{RE_x95t!pwq#Dr5>yGri19 zYjS_F4OTd-o~>K?Rs>d-O2PlXV7{6F7D zKaLco3y@I2vQ`Nb;jDw z`}CoS!zLZtFE~s)M@&8U)ny6CK|FTphu#ZH3S|8q zba!NSK)y&y26$R5+8ao>r(7OIK>OTtV-5XR6??=hUq+JgshvdwvT*X1N78zpvB1rH#$ zG<@Cuy!+BWP##}coT)E3esOM~_z`e;kJo&J~3-hl|KKZJ=>7ruSV%EVN-WX{`{&H2-7i0gX1F+QYg*t%LD58jkFK} zGT|<x1Ekyi(zPpKzE*?8<0P1VWzEzj)`?}gw2os@3y!~@78NUuRWSvGT;WcR{ zs>vNBm6#m=x#910z`byI6_W~4C#MXxEI>OLvJnsllh}{@t|KqU*iiuKH=xut8WS+!!R#PoZzPGTfR+ zWbHpJF-L0_C`ti6ega5m(4!^Uj3|>JdmJ5`Eja!V^Yt#&0-IGkpu$xRFWAX{H59NQ z9OnYI(@|j|jxH|*lhfk7^?bMJ;(4?RQq)a4-aWih8F~Z$5OwVKy3Wj2!l{9kuO?+V zbFj@ZB5*@r;u)+G?8L{RZ#Z2M58AIEe>?{P2o1|E{#&>=gv_WtY^jzNIMSf zdrH4qqWj0Cz7)}nf@&g~Q7BW8VNW4nruQc&0NwaN;{v$H*uvrOeeuoM5D< z(#zbv!v%|Vn6vS)l=Isj6jFz5zFq{^u^*HskIgRon7&L}E<$VK84gSkBw&7uXpum} z9)?gH0Z|4BuO6v5MO_^76NIyI&~Z|pP`Gfq6>8ZBq9v7}bcc$L)vfR;R8W0MMf53o zi-@uYU*gqs(g|In{dR+TuFZK!2kOw{A*RX1#H6!R4ha7chyqZml1HqE9w7m}4)Nx4 z#VMc2vjG-8m3x+!m+9B?PF9IC^rFHe!V2N!1vIQrXWLtKAV5x39;YT9St2wi&VpVy zI_Eaw#(MX*A3R1lUs44_lE`}KkUWBQ6*?K13k@AzQ19#=YK8=mQ7q`(foHBomrXv` z<{FpyuoG4_6*}f{;Hsq%%efp0zda-2Gp$~u1_Y!$y09Lpm(+*lWQ4sxbH_nT9LUIW z@L<(m<0INoT8)m4$>BgzwGab>0`8}e)QMWs;?5K)ja2v8dBX~TswRq=LwXP)mrAdi zUzIptC~T`q3KM7Ba*O;ie4 zSR#KU?QkT214z^f=mlvQ3uteDI1;P7R3TdSJ%Vy#9CEyVxP>nxG;&7?$%;aK9P*?7 z(aus5xri2>NOWNb@Y&U}ohbB)v&n9U3bIpifVWDUpC2>){LV z=|ebAM^vpu=`S)rE=O2s0GtPmgUwky$ImFMTk$6T3#WwlSb)@Ca>`5l;QR*#|M-q{ zc8kKI^B7q~L|Q+c{i^=UpUH@7U#f)%IoZ=_tOcI#dyeBSLPM+49>KA~3; zyi}m zXF$AtxF=K%-eeITaQtTxND_g;T=-#Z|NYDbWdb=|Md-1m?=k)Qo(qx4pyfptk5p#Y z*_YGbbs-Zl`zqNM(HN^XDP}JJB1}83!D!{s8zJ_JuU6+13m~q;ch}xKH>uF$5yK$B^z^NtQ18=8__jR2(|xLy z(@Q7mW`OX zR6fSq3@tNzs_VD1SMK!?I`)#A+GezvnQ#gyH(JPk{~E@1_Lj_R#{rihy2+?|^5QIx zS`mT4JiLD?RBl|h3}xb#P)0_AdjuWP91g!EeRniCm!LE4^4ce-UVQl*kc}DynYanx zT8R1Nj-a15u?xFG!YO?5|%VP(mMy zv{WDs1d44Q06SQZ*p&!&N6r|mY zUKh%fon{b@lU2oKH0Wv8GG_5g|leP9o(0 ze64b>O%jUt50PhS!;atBMqCOxyD`f=in!D$%m2vTw4Fl*i{k=kf%{NS*(k&INWp;f ziXVw-P0Re^Y#uPui8v^s3hu6cKK%hnpU5GIRD9{eKbQB_GaUOJd&ZC34gxG}&*~l= z>>^Yy@*u$?yBU@%88Mt3P{DxhCI?tVMX6}J#Ia_Cr^4ynGce`X#LK2Pgi-%+$Qhhi znSf`-01aT`D~aj@RG%zyQ8K$7|Ksem;iwW2+~k09xni;ZfD#18L`;Y*U$Hc3@n5r> zZbsxMN5~Mt5n&ZNX<^sj-wWU%h5$=^6+#MPm>qk68q;+L6DasR!%3eT`C~m!8HS>q z0u@uYbpJnoF3Ro@)#n#)kUc{|1!H%36MFO(Ier=>;@G%!>2k%nn}HyINUw_{EYN8v)UH9ljIkCA7AKAtooNX`=z5nF~qQG^x6r28L=(;pP1 z`SuKYJff*WwMj?~F?#XkOI;QgW=%<3gq)Ls&ATAe$zYGp|40U-{68I8OoRr;g@;FL z7rB!GY(u3Cg>fGUnx(P6{x!2ofOjGZjz(*pTw4F+_?j(T3yTdoV>YpUcFuE&j;B^{ z+919wdDq|f&s}@RxwY$&`niN{h3opdl>9ZuuH5pO*jS)aV!7bg`hG6PFLZ}agpQ7n z+>?Ee1jOpsR*9Xbd9?Rx-LQuv|FwM`y8|7|KTkUdO={} zRJ(RELTW|mw#`e84Kc3CDA9Qq94RpxLVttiYV%zX@MwbttAaX#7E*}I(QMzTgr z*itSRdooIBYim1!z|aF1>?dq*b(`(?P`>?J*cPOg7@;0Z@?rP&l~kuajZ(^Z1rUPJ zcYURXg2Z02ECB8o^vA}&hLZmhm=3B zTha5`BqrKo>Ao+r$8a8ncX5oTLdXlO$`L@!vaPB{4~Lx>XQ#gvi3Wq#lz)EA?k3s? zx(GcLIECR4XVHV{mo;Jc&%G?6^l-3$XOHqemVB1=WLM8VBr)pYJhwMwwz)gGcwfL} zoHd>w4O; zC?*mx#SM4n=EfHTIqrJbD-Qa?zX2^QZ%-#57?7)lon3xh+dh>1X6_u)M ze>~Sdwvt-{KHxK$-jv|R`ZVezsISp5hIxJODVg&$7@iUv28y3bw>$-XTZAk<2m{p> z{}e7knP*;hxZc8snh$T*9#g2Qaab4&sqoDokC0bLoA(;U zezTt2M9I7V^C5Llbg&}n4Y~o%7By$1@pDmU{1BLJ6Ol2$ig1`+;WsI+JozWCl%BIc zClS9(<${7j1X`$Bm@+rC66+LC$;h#Kn?a7%_24*_!6qAfv{Mal{d^1vY~DrlX!#P3 zjAl5#6KF3gcHvW7N3JrFm6!GjxF6Ar* z;8*ei(as;E_u^{VPYOHt!eHxT$AYd z^%leX3#!Hnz1);KrRe>xPpeOoeH2sVpZogSe5{O5F?+*><4g-iy$hkt0o*#0Cto>T zPwUwCT}1F)V+Ws!n(I>~Qw?7YI|JNZb42jM)M1?xnkjK=dz{VWp%xxLSJ=t&;@(Vs{R`#@4EC-6S=4GcOQzF%TBV-M{6XBVeg(B!w4O|^!i3+S%@Gaa4Af%i>l{c(|+WS4UlqprGXm#HFyD4iR zxpWjEB>i!d_f(Npld&(u+^04D9sc!-e62RxW7cgz(UQI^D`Wro?p>P`@+KRb?fTtzpHtO=QZuV?oDV9{lCjw*=w6KFvXuT&7|4fh(wY0Kdtk=Dj+QJ{6NnVFe1 zv$){PsDm3WxzKS#(Uayh0C3EG^8Dq3`AOCOqSZ=m-`C{gVRUWzq5{n%appX;#MXu0 zP9MQy%!b4XMTm)WW`4RkkTaZb zEGTLp_H=*s$B&Om@bmpmjQRUYTs%x?KaeCq?C#TzHCFt35a!^>%0SIfIvn&6QePR? zH9tWz+>N~SLBewi>u;P6RTF~id!C9z9`U8K+K4-d?~dFcuXmZhKd6k}|4?ST`vzKG zcIR)e8O+}9&f!&DeZDVelb5E-yD3xmudvg-&r`X+urwZcbCZ|nu zN8ZkLFpKtHZ3Q3?fl{rY>>E7DXK`wAp{+?n#b-zdM-!qEm9Thqx=r|BA6O91(jQ(L z4{}p!eg0&c!-$*adxSY(9D6%N4$mM^R9`x`j?!}byXD)g$2(Yxo#*SFJMm(ha^Uc~ zp6zYWvf~a-9mg4F&gC>E<_u-SzBqf^3YjoJ6fb7%* zGbGS{kB8fNVUAtt`EIE0HJ0*pTuOO~`;nnKcA34~GhLhLRuXALb!Nmm{XSDDlzcpO;I&1dvl1nGfVVVT< zn036{ns(;#fjtrel^V8lIHKD7A#LTj%@PoZV+L$gyhqEIP%}$sQF*j*EpuQcI%xd~ zY@Rd_#Hhs2)6&wq(OEYqW#Z^~Q_BL^;wV=kG^}noFYsImowN~1ySG5a$?i$R9Ar^_ zrQWvZiOW_A*Vj}>;%s2zt~fTd1-!fQ!*G7kUv9^#g;T$cg)FM&PBt1AZc$V_&&ZPh z^)^>3|680IS7Br+7w8VuLSMfSOsN}5lh0yeSf!5)rt)_05^=DpDsW!Zf;gWOdYe`) z#DhZMLpQ9^{7H3n^^u&md6Tq$F4w1z5ysC)i>fB{&Y!0_c@U6OD>goz)ssfT6+QaQ zZ>>}L87i|0@w4qnUhI=N{i}t2J$as{5D`FSZahkqW9QDDuGsHw==ZZiVU%2=V)t4& zb<`5xLObZrVAu1ctUJ5i{fH|Xyj!t7;%-@Z#Re-{bn-@7oj!$$P7|?TK#Q@V98}(g z#VAZ~GEqge$apM@zV4TxVF$e=T_JDa=V2&-kRWynic|&vAgi4SN}XsPftfNf5~kGa`|l%u4D=vZ}l)y zMix-i`6_9Nl{Lpo5&XWuKsbO@-GIMBZ9d=L=89Tzo1%uTP8FCWEyVl6>If-C+k2Ll z&I746(uHUFT0TT;Pu{WD@9gi{pPGxKajN$`V56sH--n16*bbmo#N|l?sgb!`77~-% zc}>l>eW_&2)EQX-85vTyJ1rXyj-mM`E<56xr<@{ka^(r*S zq(T)RU$Ipp!La8A!NL&G2;&U6CHTIAw?$bUo>HUHGLEdYM$eB%O@hH!^R$=|a6x>x zcdLMI)xg@Jlq2IkL>Q{~?$ZkkTDRKj1!zO&B}4!>lRL=B(o@f9UKw<-6elpCf8_~Sfw_vUlH8qp3x>WhMm{lHKllJ(?<#!LPeCL9Aja2}xNv7P| zj*Mb!)oR-<1P>&I!x+x8G6ZABJQ>YqQm5Q^`2pFmz~Sxex2>+c^#h5n%xJYU+{&r; z7>buPo4RJWy%(eAY-7ED5&C2;LkIB&s=IT2iUlPkZ1j$qCKYa#D5+o_xVMq7`FUYC z9xtz`7zKdI@isO#R#iy*fCRZ+O1U5#nrNk`XpKKOI3kwYd3K-;XlkC1(}roPMUlw8 zrzWNt*>1)!rJ{83G+Yv9O~x6PnTy%EqU7Ooxo^t*2B#{)NvJv`#KuZ_b{QI=WFT1! zuenO4-Iw^x5M<^ZcD2j{_wV1|!GHClo3rL4$p|6H#UwmYGN*ksg-osi-yny5x?oi@ z3f`g(EBmH8}E+XSkh`k1hEV?En z)~zVcK7@39#{bY#`A3%K5HD}!epfZvyo4tL{lHkY6j$1j{J-`4N@j8zaR#N$tQ?qE zu(_^g$fLH3cIXK#mgH-=x53mDiv6Pj(;(AG`oNKZ#-Rc}AYjx5OPGe} zGzai1mZ{4?z)KnAEN=rNu(-r1LZU@x8!{5fhg-Fsr%N@t5wSKfh~#GNea?r-ljq4; zfZDFnXm-%lIe>Bc#Tt>yp?u-N1tq$?UV1^;nb%xOfYoi#BnP4Su?d)Vp|er~EAL}J zloeH$Zt6VSgwSW4Y}An4l?3r2Hz0$B(|8y|Cn{(Iuo?l#6a+(PmMZ>M$@2p}(PiNX zP0GvFv>j~=gKZZChH;9l1TU9+OrRqgJhtGUc&>eULkyk3NdH?&mhsuyf(YRy>$!3t zfNKOk8QlyjI~|C_ZIQRQ5#&D9)^>hz;~Mg8Wb6EA zv-CTvBLfeH9lDQ@z`$+VnwvXbEj5iq;%n;Iui9W%%3B`vkgxt{*hp~XR z_Z`Jva&mHB;mwXX6ZcWgqUvOWK~zvO%C#<_#Bu~49=z2Gm3L|^*S1jTbn&AkL-P4{ zXgYTegKH?-CefHnCD;?nYfe%*-kOrn-yfH9!S+4c05p6p7IGt|i<72>0P%`QP1}Gk z*wJ590N~mft56RBR390MNRjeb#L+Hb1oo1F{IpQ1JBM6lM^Y& zh#2O&_|0Q+fBsx27heV4L9G*GS$H*%#!^-!^Zychi;5Mkh;!rM<-UD&5mjr(gJKsu zdC~LunYNSARQUo)02dmzDr9H?H%r4L)i4)`wcA!xy(P2Smg7G5Jw>7m*8;Ldri*2) zY#dLXPu;Ot50u%}F1+xqy%2{d-AG940YQb9uRV?EY(s@BqDrFe0=l#o;oGmk#78-f8wR^Tyb73h5ouwn-Xs};e7V$Yku5F7L zA5WS*%^*7s7(@ysuabmU#;o4R09G}L;UvWW4!nQvJ+zN?B_om2LH=l%Wz0Ifwk(@J zzr%2rUWLJ1GJ=G9QqF=;Qj+6Srr%0#^?y|ehSuzp2@VAQCaEN=J6H-8xnjXgt)%Zs z>gopjXY#Cho&B_J-%i!5Qz(WCXCuCAeC&d2q>pd_j;chIhOX%!5SG8&9r#O90S*(fGq*$@%OYG^mWHS|ROU_g!wL2QKVRB0gLaT$2y!pZOTzVMqkN+CX#wjYB;m%CKbB`{O#vB4?=TqgcRn@xw7tG%xrlAmA@uX=c=c&j$?&BW=>Ys z?m8*9Hg4P~$kCgG)%*3G12}WUScNI+{C7$(Fr{Auez6mee$M)x!01`AB(L$LKdZm? zMa&OoV9lQ@)iq>RBj~p_GB54(b^42SamvS}>{5{s^}c}d~HX^e57r<+~LdSke)9w z7YC~_Ht`=TdEepFN(TLmrsVyufhY^2qetE_+j0JPXWp6Q4Ej9XuW}Crsvg)Cfr00* zS>?CH(P22tJM|El?J`Jrj<@7g7(p)z3J}IrT)-%v?oY;Ba0$1>*Ir;otR|G!7EDhF znANU|+S=L%low-39*%K06<#)?ND5)}`FB<5#vit{mlyyLP34>|f)4b4W|9%It1#WL zgal3r_D$=>Xn(kz?j+tY_~FBc@W{x03=3af#vXb&gjX}YRC)3r>kDWA|B#I11ni(% z+Ggr9SkZHB! z!^tU?O#h3IVq#i>(6a9a)iwLdp0yZQfM?meTbJh!M()MHFEYKk?28r>i$U;sgifE~9q0qIRc z6RA=}q$b7^MU)MKbd@I31O%jORC-YmkglPFfPyq>cP>ieIpcogj{EO(oH0%kVej{S z$|`fsH5d9t05{jU1lttx@U^cwYUbP{?`x&_Ek3ke9z-dbej&bfhu<0m@<1=t0o{8z=;-aqm zYud3@hu~K#K||uj7Gs0OBc-XH+^HR8nPC$K${ccp5T)3le)qw*<2C>S-1xzsuBgy5 zv@=0m$emUVSY8Q=V?j|N=eHZ=c@zR;O?t6LyA?1_De}JRzctWDUku?5nFRf39%XRXz5wfdNf}F(lEiTt2-Yb4IG)f#q z#KI6%>+7t;3%@#?O!X6A@lG8 zV!Z=&iej{K+aT{Y0iI9>2A{fSJyH)GqV-!*mmC6Z@0KsNzv{Y}{COuXdge&V0 zold;pm~+d9<^syr6Toce^R&kTc0h2aLNo|seJSvkD88*dk`z0*f^Qd%C)N@!ch+C#7o2MJ2&*K+6LAc$5wuN#)TgfQ4b^xF) zrfmY^#!0B3C;C^idUX4XXx~J}Z~P>@T_2y5M0GIqIF>QD1^Xx>07xJG``REX8ma!d zpd{!(J+T(xZ6&bk_rPn?!TzR-dpm87gz9*=X!~u0fbtY@c{=o`hxCQuinH(urM6|F zEgnezchKkA(*3%yT%-VniUCNk=ZbOb)vD(V+}Z<4?DV(4FB^bw=cT74Xs-c?2G7+k zz~Ge!8-U4nfOFsqK+20=9e)9R0%x+P?2fHoW|QZmV}Xj0S)KJtcj^Hc=&)L0-g>PS z0Ho8364U{^a=@lq)1<8?cglWn82hn}XXj2W6_v_go1v@9V7dYuI{P3Vn(EmvI(|NI z>5)WEo3FMpx`O!faGirC`m>Tt1(5xRz=pPiFk+e<2Q<4D22INYvctT6XX zyf}ww^jgPpu0q^!TP%$c%Dc6v!mbB|zB&i8$2O)Of@qPBo>M%pR}UrhjU;EFiuLAi zTdXQ;m%i+Q0|)e+dQ(uf*hYJI***@T>rD_XA`=q@fWDZ2G%r$)em&9f>i>vQ>JJ~D zxiQmKL|eR5ukot3M*KfLN8rp@hA5qs8o-UnvCd|Gul|QiphaqJ{exs7(zgKjtc~pW zkBWP|0L_D+0#NK1CSvG77qp{AoXuB%otx2IUPpCOa6sV4I5kn^3GChBHoc>LC8|=w z!or$R+Co8fBn9DI>YIKP7<38NMKy2+CBtS`ciAhg|MF7XSE;H~;n*VY+PwlyjQ}`! zL6AvRof#<10O7d>Q;Xl~GaYGd%XA}4WU1{P+VKy6t*wPC$jQE@Ax|6u_z!O?;E^8_ zL8%LXE`!pTSMOZmk_)k_+8&c_JKYKi8-v|x_k101hhDO6V;zEtJLr-TL|9)UjcA*& zN7VKtEmB>^>zm6&>dn2;ttEVev?rpH_g#$`r(n@(?ii(` zw#-d2782WF;AySkV3REw1ZA~7+*_dtJ6-kb6tJh8R<47Aj;QV-QMpO3RsVB^pAAAW z6Re6DnS+k%nwpLWG4VyH1N%^An{qu!ov@IO@e`GU3O+&31BJRa!3gfx3!gqt7+4T| zh9k){BfW+UCkotiB1)h?IsOkn9=1*G+W*C%uVEAx5qM zSsNAC$KVFYgFebMBy$@GKg%z}VSgO9IF*oevhfJq{poEeWf&BaS&PUGJJf#f8h;Ts z)Q8HDRGVop3l5}?B&a^>x}?V*NJ&X?Rbi|9ZU!=W8G+jTZQ%So=;w2m`uysKF?_*{ zYru}QUD{w-!0D$`@#~bPN$@SIkfehHl#KIc{A~H|5;BO0>A7fCkdH`*TQ%qK4Ucuo zNC!|YnXnwFYu_*jAqFpLYlB9lQw`n(jRwD`*&Q}A{D2ihdEaiN>ZpC0y@gJ>UQp5(KijG5ek1hpXgMTVIZ(+`a zMet!(XQq~myxB}YG*v!5CSCjMHNJtnD_yuLE_20!Yljp3aN4Z~ta&qAjvu+?IzN17 zh2y)i2WMG^aMqLkV<*NS>Ei zT)ESe{VGT>5oS82Bn0-wMMg#*^5bJ;Fr!adopGj2Q)4-T;B%~2eB%Ra&g^{t%=avU z`cd7Fw&RhcG#f!hz%!+c8^o+A1Ns>RYEC2(5L_CbkwpwD9L9E}Imexg=d#-dLxj|@?tZi#@om`l+5mfRLp?^jckGZ- z?6cD+8o^gc0pwsY8+9Y`(%87>i?726kcm1li^S~p!;i~@kB2;9hb|Zkb4ZLkKOyil zne*cLtSmA$Rpd{=XTGy$fX&W-_1%aL09}IfKaoeN(rm`Uw%3n;Z496|p)Z~hYC*mgbO)axZ4#!Ty zVo=})w8!onkf7%C(c`yYvW8}|quFP2U;3j~lGGP(ckCoI;4<(-c~=!=u@*b#z{rbT zj|^Rs?p0P`Sz_g87ko7r{+sglTgoabbPU$auH~_l`(>+l&uz`VFMd)*TRY}|f6Vvt z;yc2#OFr{x@)j0xw0>Xy9xb8P{9}B>r`Zf3gBEgbGiQG9IugGB{TZCfe?I5`I5m4S^T7<+!nW_||siho}ndnohe=G?@Q@S>do@=KR>_5XgvS}L=?fx;dCBg5>O zEsL4E*AH_L5)0WN!X>66dfODcdwP-~V6_Jr0XabtYz@I16e**0*yRiYK&)NiLj~Hw zx$o081dVj8IxXiG2oy%}bEPe4AEm;*Hx)eb-eRbUZCB-rwZ%V^9a@IR$Ah}_5B#>$ zd2|1{d^~SM;-A#7N5b$yQ&X!Is zd=l-@+%>REBwmjEiDUqH&V9C_F~<(QO!?wiX1oDvIshtK!izWLWr!@e9}fGIch=nz3Gxy5 zj@9~P(aI9SSC^{)M;E4aui2dGyOT*22BQBQ^?Q2$#OQ~2=^)_@0B4a#WjoGJ?9;Ea zWwcXI|Ggup+K`%-0_K2C>+u4Rnp?s7vKW`Jvv2mka&T|gWy{t(z>;MJ>2>YzOo`;` z@|<4#EzC=t zC7B9xNd~OXj6kmS{;i)Qd*k?I2eKJXTJK@%$~OJEOAm~ zq>B~)#TeOE%T@TC5tWu)Zo*>sHk@YM;PMYPbY^+8CY&S&r$cN;M{Y5uHI@u93ZF60 zD%zZ2EpPstJ*KCQk(To!s7$9mQGPIIc+KGFaQ5njjZ}=AGp}Y$c~&&DDb(h~a37;4 zyy1|eChO9z_9?3(jvJX=V%ysI3!XA_ZnwHKq-6!Ot3KxXwq9UvloLF`SL5v?u_Hg6 z{kCgPaErWR`hn!3o_ngVf7#upQ1Yjhl9@@oMJ7X9VZco#CuenJID2ZD`DdNxPv?aS z7c+-TA4q6O7+ml75lEPW|fziU6P%kQe&sBJz zF&@sIwb6TEsL{(%gC)%n+sf?i_FEBq;NRmCdmw?~f6GRu?a8gY%aQDNB&*A$ZbVE> z{whPAvvx<}%@k`?qQwihGPx4+8idnR-DCx~6_y7|S^3)JxBtkqB=rW@ z*vX=rp%xzr4OuhmjVGvrICrT}aGVn^l;n|)Iy2}K+VeQ6RC&dqad^W5QR%|peKI-R zf^E`TJask7J$ynr#hh2?KjtswXMT=iKiB8odTB*_88dy^KzD4Da;n*{evu>kBH87# zHkPbl<-Rx0R;(M_#J0EfOsN*VGne^Ed8+9$SC?Na2akir)ULvTNHK4f6;f-XCR}_2 z^md3JjEdW(c66-vo=kWaqyK8++Q9ZQMH?HIg-V}$Bct#nkF>g-QL(b#=V5mrx6B-# zC3S1Jnd+G8_1H=W4+tqQ*%j>eE6dM&PnDhSB9^(A&F=SRF{66oNg4KWA2e8rJk1i5 ztoQx{f(7FV#|H(>esR-v?g)-^u+P1gmf@z>DHkkx>x;8jTg$VAW2^V^sD`$YoU`r0 zK{ngo+K+Vz@s%s43w_w2t5dEY*p#OA;*6ex*dIZDt%}U1Tdm$a`Z8wujIo2P8?k4q ztSpKnM^>ja`?sd?=r@ljyLxsk;Bjzr6>ZyVt6KhO!Wni*C!jULM?&~Am)NehHY4xW zM?M$IrKgpWR5;=&_I4b)Ti&f>45#o3xw2xF6|rtLpK=^n z<7y9jh8Z%E6S`7$cCjt2pnz7{9i?V2eJU!hhr5^YNIQJ`?BkZ8!je1v;N1qEW-ERD z7b6v3RdG9*#=CWE7BMXq#x{O-ExOxO;u9*Faj!ltd9db%LsRW}^^weTG2>Cm_QQr> z97-d7`E)a@L!BvRML)kPy6SV_x?&`|dDcxEhpK6Lu{{!kd>1_Ib;}3k`xjN_WUBO) zHSo1PX_J%>9g!1j9d9{mn;SUr!=sM4i*@Qo&wMgptG$+zYBSNu$?dW|P#MGD7GEx* zvLaA?Adn#u#cnq&pT1#uA}iaoW@p4iY^f{H&g@Ly!aQaU%Vt~aVy2X@;e|-s=Gz0= zXOv@FJWkh{ghfs&9u-@aBihDaH_RSvc(5q9=6PgGv+uxUs%)j$4Mj2MsTV)#HFsCr zA1;#pQ9o#4B=hg{R!7o%9;TF)>DShcmesUQgjI|+-}fAxoF z?dsCx**Tu^mp#vACyax==(8y4y2=W{+@JwvZ$JB!lCl9!W)hAKXXN|SM6#v5TR-_o z2#zNxMFgvOw_ab7D%=`clOiq^(AwnVc42(5ob%)+MX{S&KRTWLMT)OYy5zd0aE@cq zf~pHVI}-yV#T-&?J>Kz1XAXL;C`)vTDL){-u350KVTEVn_TcEA;mDB-TBVJQw(+F- z=a+Dr5}v%?WEm`pq+s5h_Pn_rIT9MTD|O4N+T7r=apCOd>Wf34Owa4r6&hH)`XrUm zHCfGArm|v8&9&_9^T=L(ZBz5J+sdm#jCdRlrJ9^&eG@ENJ?&>R(m5SDvBCVd&CRiv zG$nnfrxpi_nw1QSg5x685-ta{m!3Yaf7_;D4{sZP&gwx0tGcQ4OFEh!R&_k^@jKdE zb2>}BSNg(0T&$(;avo`+WW^%g3vm{&yKPN6(uU9G4hoA+2TUEdic(-Ru z$1QDpV~*IItQPtePyN6EJpN&3@W0 z66-kE4`f!joSEa_8tvof=)AqqkEIi8)9Fxh)K>9G(t)D#+gXgZzBoUY^UlIFWt;$0 z82t}EnVcqe*0GnB`|bq=+bpST;c?)Uy4@N+A@oP@(UrTiH$7f+W2}}Tq%xJ$&MCID z&3briTzjvt&AB0S*0{2s@>#q=M+2jt6Mo=3$CE|D3F?s(f$|FJ_3`3u5oh&}*toLR zs;u~{PtNAhwgd}{ZgbrZhNBEih1K9?v!q4e+nKBFVSg`{K4v`FVR*u9U_)H@RF_;Z z+snY&)Ta9PWR~;p!fc+MjgLlzl?m~EdKz9+2y zMQ4_Tj^EEk6aKy&{qHg(#x&B38>9NIr-I&WFH~3F*~lN;-8HO`8Nte%JlUtiT<#k9 zBX3t+v+HE9mA~|)h2A$tt~*{HW#xFkmanjGYzpq!(G}J#RX^xp`;4*N_fx86f|pjt zCE^_PK)W@8g2XWvoA!L-hFnzO>NFh53lEJP-tvw z+`xz)unOfEukX;AvVI>_QhviMq%un^eT{N;&$cMB1#H|$&GXj9SUSzN^1i)^`8ccD z+0AQ{7smattx!?fL^Jc+PKkS*!WF$0kNjR}T3b2WJDL1l=o}DQ6D#GWaIxpCK=&!> zuTrPQdQPOXvH5BiBjcL+gE>b>uHJm4P_gh@azmkF#$-co;=PBwyk$MZeO2Mo9-%kw zbkeap{V+o7duuXKcxL61;=nd>ay&Vtb5NGxd*V zaCHeVjX3SSKHahO`^_yQ|DUhbiJM^r;-R0MX|4J3tI&zwTl#~80aYE4(yDzpugXcO zX2kp>(i>`At(YMK(Lev+^H=}8&D;Bb(Tk0oimC$oR=_p4NbbD<(dM8hw*H}Ej=%VJ zC3Sime7keoxzbQ+{l30F8u|%EBi?fFz#6dqTHD(r!2;C|x#-sdEp}@=pE)^EYjMng zJC7C`nj%Sq#ZbtH?CQlq86!}5?}fO2HicXbnD)9!;&_(5@vF*m|D3@Bp)^W!bsz-L zh2NtPeF}V{Xa3fJU zH--ES>2+6m;pdYs0_>al!<{q?Wo=AiBqf--40|&#e%?wb>+El8YQlV=o#km@8(jP< zVy=(yYB(ws_W^)F;inQUE0AM5VIRKmU0YiOMiD>-Ko;d+=~&N2B;PT=3Eav*{O|*{ zTAN~;``kck8Zl-cyRhoczD1-;kEFW_4f>Y$&;)VM{Ci#vmRk_g86@jQGEL~6AgPQv zPeXrD*JxBP4PYMbYm5OP-#oJin!f@ToB4C~50Wsqs5{Qj&rjNUDr&ZS7glK4OK?lv0IZK*CmE_b&~e=K?h8KwBhP99MJiSN|-L4{Za) zvep~Wz(feIX>b&t9D=MMiAaGy(c0f%u5cWJgw~HGd1qg7DOHQU*b8pnl;-@B#PA>f7Dmn~^??LTl}_4nW3#S}zMj+kTIdRdR5xkxHf*&xTy z9Lyt^>*w^Z?;I1w1OyrqL+Wc#Se`x3OM?Mq9mCyG#n(a7D-zrp4Gv&)dw-CaGnB`^ zJ_z+L40;0#4!f}XVw+?qdiY7ufK%KncoOuOV_jiF+{fjCW>XZ8moUQj5aqmvGRTf$JU8f*$QrAMTU(v0I)# zdv*Z*Pj?kUrBEe37Sn>&`!KJ|BMRAuVUiciTSt?o7c5wyCbQk9FL&BC8&xlw0=LoS zlM?hIX3p1>KNIJT?Fu85HA!c0Vq)TvRkPI6VrM!u=yEXy506IK&8&XVy7|>-$E=0l zNjV4gZEjFQp?Zr^2SHVdSF`ZU_fhyHbpsliIP-+t4$W)06q8&o9*iVEA7OG8Tgp^ZQ#^AZp9ZfX)X93Wjtr--eF{ZkjzGytKhkM z#%Atn(0B8X$?L^p-9w2tnsi+-X$rGgAg5_$&l@!avPc)^5>=scMsGa(m z0V9yEnW(nBB*|_F-awq|uWk(mE7Wmlsi3xLKl#~y_80g6^NT4a(EL^xS*7FbP`_Skn^;sIQM{^43 zZo7NWACJ8`vPX`PU<>KB!V7GNauwvglEv2~y@cS&^-a=xm`!r^>eU%1V7)M2ZBEK( z?<=%S2n=<;Isnxs@&Q#)l#1E<^9Gtk4cRmj6oKr}PEH}%VD6Y zM^`t+X~c4A@&0hg)RC?cG-igu~0e(9%=OTSxvAUPVoYyb$~RAx&xniSrejpE#ND$*(~E;$*_l zlhhJwsrPWpX+Q#mFx3tplH!JTG-+?ao^wE55~E^R;TRlCgVAWB!i#U9E_Cwn{AtWQ zDkt|E#X_2IUAQg`!yxSY8Z?)zV5j{=kF^lqPzePD^~7H%3Zm~bajrlh{)ECgSPfNr z8j5`WuR|#>)JKh$iaq&hR28C#0rG}c?`V20gYZlA+KL_CzhzA zJX9S7tlsjhgRd$do;-k%NfALpsa=f`TsO=_{!g%S>HjRqw;lqt{T>3EWoK+rk%8!o z0(A9h9BXpcb>6FA?cTkc4k9i&DH`L?M&g;Q3akC|^iMYr0j_3NXtPIfJb zGFjn*Mn(7WgJgS2qKVYA&!dKZJa(P5rOj7RsVC7fG~;Xs;deY<7GL7>>6OfyD8xS( zy-FLpr2X(u_~TwFhWYg%nTEliA7#NX+zJZfwX(7zF=-Mn0-+??IrZltSx98TQ;;S- z##P4%(?aW`Xa%H(+%bKrn6G)Eg6MWSUVPRF!>ZDa6!Wv`n z&H>@Jsr?^zv@mXa=f9~M9b949L`{xG1;;fsG;(h3e$V^IR@+CL7OB7vO`WiKH>F74 z6|Z|>>C&YvflKN?J0Ci9h=#`db`;!D-}m*hWyupxT9YKgua=-^;kZICO&=PHi<2;5 z;IaBYcGtb-98|z#J>B=0m6pnbVv!<_$eP>m&D^ulcRW#^w_5aXyz?I7|B}DrHSth_ z??h{5B*Kyc+;Wn@2J1ED{LpD!Y-cW9JdlypVOB8zA_29m2Q-}pGPlr6yw&9hMaEqw zW$dJ1r>Cb!6U->QxpL)-T=~yT3WZ_qTf4gh;`(hc1dHZk)+Fes-5~W-kwCsmOrH#^ zaB)Q_q**5KLFj~IyhJ-~;NAT(n6Rgk7cJHmbZ+WPipD0Y%gc$3SBE+qjNSN$6C7>P#F`(TKO z-0o>yV3KV`0Wt>VR>K~r_szNbh!B;ah>1zCT@AV(=I3zdDkr73X)am*Q#g1;r%5!( zcV(^0cRf=hYVkVJST>2W+7vTCistZoT_Ci42F-_Ry^5!ynh%S8O-@?nSkKfA8yh~2 z5je$#v$@>nm5UcI_P=xI4!cV`ek%{OspollksB}!ZWnkyyEks!$o2EjPo>aFaAs@a zuG6o%pCv-p%7oz$rV)SRD9CXqNVuD%*e&-!F!J2FbGM;$E7f=oF0_AtDK~u3gC8h?T3!F>*e<;NF5S$trJu6FZ~tlK%9Xa@M>-W{xJ|nn zB-hH}LZ%9?Udg(P+K1HMP-`+SAVsOLPtltmS|7L%4N%hJVy;q$doQ-dnhM57ty=7IlH*rg7?CC zjojei;GmA*q=6DhEyhQ|=4CLEPZxjEn2{5$&!^cel%;@N^#J}jV=N>jWNq)Qz7hBjqE3jOJk030c;dCCnqOYV>%V2mo;I% zMts($`!!>W5&VXO8FUyGQ9+OxEhhfFMY&S?L?Wm5@)BM$1DKt_&aH;3TDIIj0q}` z#~CHCTnJQ3@R66PQMEltq(-X(cg(%_lQ6 zlad~qMgwBUh|g|(z*>Hto4L7ezP11%B4EghkOrf-N(sWgj{u99hqmZXfA#~bObV1+ zgApHLc{Jp6GQk;h>l5wwR+RE8HBQb|2-y?;_U#F>DcJ9&-+c25>TULaKmP{e=S9WE zvPka$0$f1wc-=0aCKzgH+{R8sK{fdP!9RbXY1!xr=8K4otn0u67rW+Qg9uYO52}3| za0mG82f#;QtxCLm-X0k^-zZxFipLOW<)mOgFffqOGFG|t34YD+TmmE+S>d=qb@>AZ zjV2DRmhl=aKtLbt?7J=y2_bc3q_@M(QE^ozA*TMryalAk{mco!F2pJUK?gGZIG=s)Yi^$S@DH z{C_#Q-`BBE?LT0(RUQ!}p6RQRZ@>P!Ac^rg8#M8CJ9qB1#W~B|D3loyA&~dRTx1Xg z5koUeEyrXe;C3xYDi5=2fr4dxM7HJ+#}>Ka+LbH6;1HBqzXyu89ueM;YuEZ&HZ(Uk z9}$EPlHKk4_Q`^+g`?x+COe#dlHupOUN~-_i!^5t-lgz)etvzvjkeZC$@8y|2qJz? zz0o$3ky|+tq<5{^Hr2lWe%qa}_JwR3TtV}2%VmU~{QCO(n6z>X1NdIy)()W=xvp6s z2_(%)pFi$lde~N=iy{HoEGC$HbUr*y5HQ%^2_9($Bz*78Wo| z->`BxG$sq#Sf42L2OMcqCG5woOm|Idd;2QvdO%qD#7D==rsaYYE$3j)?SW0%86e%Q zMyt@RcefGt9zA-r0wA1FRtFAxZiGny@Xi=48KouAZMX4h_G)X(m`0n&5JG`dxQD|- zZo7dgvceGn8=u>0!E52^Gu<<#FlhVPmFrcq>rAC>EpW z1eDUdnB3AXuCIpdTlL<-KiOR(!5`{!)yGXhf_Wbd^{zZ!9i0lv1Vt9&r&QS?@Q)<%Wb{FZoFX5@w^2?a21kxuVVENH7*0fP z$3&Wu5ME#YbRrBK*(1ss9S7SxGIHxDf~MAgaEf(eV`KkuE}ykNg&=|zjypQ8VJz`< ziW?Vkss}n3N0lQpy(?Tt^)YE$$3$+2Djv?}Q~DzgP18dMjcL3l8eru}I4*wBs2y7% znD-`m?H|C7CrSGn6%vdepd4RD->a4PDpO#QifeZ3KT z6x&Zxf~(vv@fxoj36RBP-R?Z@J$rO2rh6ZZhY=zHum%&@G~$zuI4wGKw1y{qfl?u% zCo~sr3deE2;GG#=o@w23h%OK@RbHoALdczBCnhJCJ#sEG8_Vvq?MALsb6}-pIMSGi z@ev%DLo^$KCJ-S%u9FJ!>ye5Yv~`+^07d!d($lx!;f2Cro(@1){}{&8ChP^9a&jI((g~%7P&_wgjc+~d@o?=g zZlnl{A3jPND>lJ=I}pqJF;alhmEQ=)oVc|qmW^6SsA~WiL?h?u!O$@Pc`gw|WE@LJ zuyYF2MoH@z^N6DXh|&OW8wZCPH2tY=t{qfyjUNx9p;71`j>jn_Q8{t9sjPUN^m{Oy zUC7-@Mtjotp>k8gIEr|^DJL3HFMIOsj6>bK5y_z7zJ2?|KFdLI7tPxKh`%pDuvh>& zcI5GBrcxe$qnfhJWs>={O;EyO;EZn(@^ z$l+f42w6~nq&7zDz}>C6E|5ol3Y|Z15XekT=aME-ogwwg(a;#_%Q%+5B#dLJZGp8?_y?pFozDw@!%E>1t%~!h$83gpkk$ zO@AK9weYAu@NtA5VNzDpoXbTpBNRXW@Zm2lSERo>`&x&Mt@w|6kHXgW&Y6v1OaFu} z=_9P_cwMtItlw9!UAqm*0Pw9bPl@~N`=C}#u`j|wf;`mn3zc!^fbq4-SxE^3aycA%i(Pmv+Y>>v^tl4X-i_QUksk0fk1QL- zX+l-Es3y87LP<;bI)_B{-D?|Gtsp~q^B)9e;0Q!^9szlTs3(*1S#gC(5Q}4xSe!;U zr6#lQ`=^N3*c^YG!%a7@92*@yMKj2;AXQ3&!Wg}Ax!F_%;|Y=3LdCiVWwWGO^Pi+$ zv#JuUm&A@c<>LcHCDdbPff+WoT(VzK-m2?fxA(VSac+Y+=F1nfYX5f@QRgA6nI|l& z>Ym--JDp-kEl?tl^IWj%F&wrQ$ATl5g}-6r=AHY6y&>ah;G+t<{kM0X&}2f4PMiT( z_THU`@&{fc{*LoxW6~69m}3I=_EBCV?y2%io(9L=BS$dH3}Rg5_7K--a9~GPeFw(# z%u^iuPxgnumZ1vu3Mo&V=fc(_2vZr+xaMoNA^uzZ=iJua`I<}&Dg~bq6wBajp`w#? zo&K_8z9x6wR_P3t2Sk?;j@RGs_bPQ9@218+F zzv`_ghQ+HQbhyQpm z{u8FhMoBHWfJ(5U4Lwi?yBUpghvo8RZ0_^rX;-Usnq! zp$aWRF~~W!IhGvhK#5?cLL~s?dBJ>|Y`q_boQB~6*SLeEAH|%r$QWs@M1P)#bGHrQ zkoABWA0XwDQKiHt@n2i!?oApFpU?<>0BuW^Q1-&2?*)H@NbPF*I7Ex*%OX$y%my$+ zIUsQTEe0Ma>zt(*3;*ZEZeP20jVuI;WE5qp<^Sd_l-G#^{69}rgArpG^QM!K^Z5b4 zUKYMlH1Y9cQ4HoL?DF50x&u@50MQ}M8jJN@xNQwOd6@tGSp~?0X{-VjsE}3Q_$$nw zsriVAjah-7^aw;DW+0Z+e8#FXv)^E?H-D%e1_J4$ISTkbEsn(s+!(`$y`D8=UoN=2 zE^rWGB%?Ilgl22wvkb}eB8Vt5PS)gDjLY}S{K|(5*>xVHvNxTG)2AQchYw;BSh_Ia z_SvVTJKD7h>FB&F@&teb& z>pnPtJoiRYQ3FH4P|$qc&29YyRl?ygV19te&I8Bpa=0nVNM}9acw(SATGB0Qy$~{w zG>|Lyzkih1zVqci)aNUZ3`5Etwf0qKpuVqyHTa(om7rNE$aU|cScyeAq=7OBzkZG! zJ)rme13uwUjn~mcxrT;Zra1KL#kAbHLgiA_|7Ysx|E`IHFs8!LxC&aiqerh+ojLX& zSWpGl%q#!8Yn>I)d#2|zVLsqzhho`Vx zl>0e~IW+q2e}3|Xak42i>IiB>Inxa5_bbg}!1e*)Ft*1iyc6HgALrIORH^S1q6?Kp ziXCD-FYNEetP$38VsZUjUGFPIS4eA1OBkYXT&Ih#v0@A|%Wq5O-^5yxDq5(Gx}Z%F z$#SyzilujvniT+q0>VCHo!6X65ub5lPtMbv5Zq0iPtkD53LXb0`%wJSGc(MVgc!aU z*`?E%0R#}u%$~7o3o?V7H*Vahg0XbJIQNw_r42sP#QxhSKVyDFG-}9d`P{4EMj~K0 zPT^XSX~(g+612xr8H4U}|LfOT;oyUy3|ig2&iz0l`44XDhztY1M>DGdr75AF5a;>F z{=WecP;F=S*U!z5uO5JShRY|E?M)$qfx0GWLrcFQ`^omt`bJ}#NGE&)4dBJ*e~pZ& z3#Vwt;EDbFQ!sV<&`Pd>mLLs(guQqQmw6O?CHVP7acBlU{D(m>(14Cpq&t$t@Ialr z<;ic5^H83T^v~GUu*^aN-u9*~$l;hOQd6;u7 zd*i>XZU~krqO6JZYBfee;{RgcJx(_~PQ<082@po-JyF*rVG`f8w6v_Otkmk6Zjwd`17haUP&6(6 z%g%b0^yDXRXJ==_C#n2V^Ee__#;KmUA%j_nin$ihy{k<6Y*B6CTjY#+{E zes@2T-U_(+s{2Y?Cn4NRGqaAPd5<_i7_b^lV~3G()OSQhMs}l>+Z!v1K3}(JVDmKh z5*_>ZVN}d!kCzXF4mpZ-M3h1=&a(qZvZ&HW0T@9y>E4y!`yfq)`79Zj%)I4`2%lyt z6SIiaCS(t9rWvPkxVzne%vAsm00}(~A6>jI3?YL8tdyF}A1~;7xzDfmW(f1L7{HWw zK6A>+$zg?K6c!*1^!Il{Y#y1XGUoKYZ$SyW8^eugj3KZJSr*1!#sNH}p{!_gKMror z6vQqb0OG@t!9Ya4+jj3xo0vF1)@>Ql2J>e>HQ|U-c;aS*1+_Lq-KsPp(o5hluCywg z#bma=+oUSFgo|Bozeb(w_)H-crsUdOY`F9fz(FW{+aV(Owx1^AAfdvOq}{NnO*+H^ z9R zYv4h^3Cv0~5V$qri;_~$_G(F@gmNAlG7O$)@kfDLVtCZEtEa5LBTNFTRZG$OoShmm zhI_@B?YnyHk)>F_8VWGlb5-HPApg4 zvD*yR=bZ*V*N?#=dHy)d4tAgL3}90?QS2sjK!Yd|${&NV|AbcVf_2_)4j+bxeTjKM z;WS3tXt8`yN6B`$exH1 zavdl!V0>GWd*xHF=g*%X`GHc2IR;TfAd-*Mh%adl9ypfLa*Bnph?1Ex`1vZT8?lePZJGgh)(kR3o zGw>8Df_*apz}dfVlmGY*8GV$AtMoT3(xW5w@eXrzZwMB<9jv3==@B zfHhY|Movse7}IVv!_vgGfZbN{_}il_gd=Eoq@`1ssL-z{PK z`(?VT;*9RXUaQ_e_Va;nrk!Boi50ql>q3~A>%?R1r9C8=W};4wxnSg`86;6_0Co&P zV~B!dU@BGkSF+3WtQZQMR4$y?3D}P)9Yats?gCIvn+fK`1KfNpuAaZIy+5;F*#B&C z4a!B65Mx&bfXQfV`riNcZEjQ=vmwk0yOhxS?wwa}KTVqjjHL?+;AWcFI6jJ{p<&t> zIvq`QBO-)350=_V9ON{8|0Yq~aUh)R5M(os!pgBiLqnxT-!58j0AlbJa}%ZtZqp2? zJW7!R6LDGLM}glaUSpkrBE%qka^U61NM5t%(r-I{1Th#_t?|rt-0+UMh_ApFnGp*W z`me{|Ad-1x*QHDz5X3Ti7L298L$lqWhNXlG7e$Vt{k^?>Or!_Kms+B(N0g2c+lZ6F zFqG)Wp?ROV+X3^lb760Zae^@YZ@WPRP4|)M&{Ec5Y0Yvu-y_W=$1$Eovjwr4Du~f4 zU2*`8(-6+%$B%o;{-my6BjVkW)VSH@+YVb) zuqpjyn+croW&`_hpixSwHVlBmh7JoJwEo+{P^dXFE1-z_-hk|_k7>F?d&zoc(Zgo~ z@&G8QO}wQ+dU_(6Xw0x4-I&V3%FJ}i7+H&nPe7l$$?Kpz7!7u842D%u_}Xg=zA6Bz zD4=i{^~d#0NDxJ?9ZbBihUcJBB;KCo(TPlmJFd)&O4eVt|=qblXqFSM6;3MclUgaEVmb zzzZO0NdMN>TqKaF3@E*T2Ws{i6$nEQ8VW4zG;GdfUA}xdD?7WbyPJ%MU3uZeWA1a7h&cY14#85fpv~g*9&3SF)gJ9RUcC zO#BvWw%P2^U57AIj1mnx*|07QylSR0yrfGO0za0e^xAwb<&8UeG;kg3WYzSIfk@Zj4qk>L{rJ}d~)kZj?ir&VP z2#G2ohqDDdJcOoiq$`2Z!SC)66cl`x4*c>iX}~lNNIUdxR*1{_c&lulMVutw!55Sv%QL_l8 zS`N)kf`2*>-7<35Gy)n3W+l=Gx{Tv-O8u$;NoW8zd`q~Kh>yd=F=U>|C-Cz| z9Pjd#57Y}yBTm3 z!#2mq!RVv-h@wSEMc6r_27yuqCoD-vVG7%THtuN(?)~zgb`?lbDFc|h#_gqQqi_kF ze-br+?~M0Bmgt8g_z3Qtj5}_=4IcQ`2&_^!{1ed- zcHs?{ulr>$o@H1&IC2cfg-{Z1Yy%AREhH;|(IXK!YT*nPc=vz5dUXVuYt|=_-HgwD z)rP9fsnASN0LMOmegF$iU=Yzp$rd0?#?bbb_k%Pnm_jogze)h~=&d+}AE!HCL5xFG zsUwSj!SHHi*L!i!RS*cHoF8W={ai6K!W{SQ(gXq_?7?gJvG-|hi`j#L=u=>cGG1*c zM__H4;VKJ+K+15Hm5oP1aTeVfC;%7|AvXfsIO2VgeeF*s32LJ{z_ipyLu$2r6V(bfC8 z@QQmO!RpxJQ;7X2YeNi=tj(N`b53t7uN>H^I|EC7`y3Mr+|>FWQl3G@{Ms?tF@twj zzs)?&s_&(wq_lEfv#SK$bwF`U7GJpZB~dAmOWT$A0|hFJyG@NWGk-+=5Gg9LW+G*d zdD^V|!qprcMDVIYfr60BC;KSb#~*eDTohE$k|qP7o&H;U{o^xXz}s7V%9|wMIN_@A z5m}hy1wYDi*e?Y34nZAPY8RN`6XQU?DVRf|M8BR*8r=_Io_m~!z;F$Ma84$M?jGH} zk)2)Vgg;mk@xUoh!6yTV+5cN`jnaQJx=dqQ-cUT)IBlG#l)R{HJE$nAIL`osEB=^8 zPuQd~?c3dfZ09sDi0+zUeMDpWH=Y8~gvdfIqYR;Fx)Xc#KH zpgbp28$kH8xlXdALd|9W9fYHJatAZtky-lt`g(?NSRV$3B#a_1#R zg9di(K*H_E|wkBDo&wRh9mYHV~@NT@CQ*FRxVvyq}0BP;!gw* z;jlZzU0(yoVO)&yj|{3 zXsFpa6OmS4cXwf6w;-el02)Vds(%*l0#Pg8G1`2%p2ni@4AX*a>Vf~qQ2>4^^) z7}2l?!;Y}Qf_e85%}|{b3E(bl0F#9xiH890c{&x4VRhTMlf$RWo3itVoTsNZ<>q=9 ziJK~|XNi?uT3Ko;6*_u5rTv(IZJpfpldcN>&+?=+Htn)~!*%((Kp6WascUVIPcAXP z2PA$Jm?g>%kXsQM)?nkWzy@U7Bmk@ubxFKoLFBn+N-l4gW&7FO2M&?G-nt0txvf@~o z;-)4&R4}W7*w};TkNWeTm)Ta08Jx+ryveme2_JdE#7}HRDOMGA7R0aox{s}&CK-R~ zd_|!*tsDNM!ip6u9sm}Fbm|WOQsd<)mL{cwv7D5cNNic7_qf9}V3@E^tDLdJIA)0@ z;PRtGr(nPZNjjsjwpL808Wd8RlTMLi@^x?vbqP&IV%fK25GRM&Wfw1BE=CF6)6h%ZeCJMD*b66d4i0Bt~A~)*e(=Hp560{RctGBM(JP zFh>-0D8eZW}lqb}$>b)OwG z{nkq@$9YUAAHhF^i9d(d%P5z{@5Lk!W}3tWF zPDFZQMPlg7Oot%)Dkx1rPyqOZB1{^ek}4d_P+sdiAh96gi(F!uq8SiE}I{!m@wXHT4J1>YSkQ1^k$@-Nhv9}0s{j9 z2U4P@Gp$`#Q1FtNM>uswuoQrw2%x37u_s||*IBO-*lyHTuD5n}awC1gj;aX=2#AGv z`TIwMy-0_U(!SRB?_+V$&0w({T>P-J+W}aCBIhfxX;Ucs;@;Q%Aaa6TStv$$Kc_??{}}BD@tihPEZdF9N86e}Cvv`{oVJ`=w5Z8E_D1 zl|n@Z;oU_gC9kPYhDsqwDB|^#Fg@FtzH!?9hR|6qkz}8=NNH7G+Cew zWU!lMXJ=C-u_K^OVWdc}0%XA>2!h0&M;{_Vz~0?MJWGHBVyoB0n$f8Q3`q4{B&MG+ z_Q@Vy6tKGTfL5wW1=C;>Hi)uix?9L&|HSq`LW7o=s3hAhtd-Y!Ikb-nr~`7zKJ5(xG$k;2$vl13~@hOr_cnat|qw zQ#U|8Is3|pEX~}!`(vj^$Hux)$e=?<2oyXA4};Mf&mmb>Rz|qpClGe2j#&r57UFRB zSY>dcCVm^h(rBSlScguuoV;bfqA>CRtW-F+I2aXlBOihttN?~D3=af2h%bNr4Xlq3 z17+Qv+PjTFIBM(cybsQ2G}v)TNkvmF)I3;#J`317$M&w8gizQ4VdIi@_Hf9^*In1gnaHW3MekBN(jF^QgAV$j?e>dD|is`c{U?qY5;^rM3 z984o1XwmWDzLqt-`8PJzz>`qGLfNXNr6u}{svz?lM!ue~N2N!bfU4oF&9oKZ?h+Q* z+SL_}$fT&cTBN=Xj6XA^Ktx}}^E1$ZLmVr8=Z_aL!jT7=&t{n@Ta-Z2AxP~An18ZQ ztZAp&_)Cf0NX5_)14=4vbe&MnsI9AefD51QdI=}C3Wz;lE|-l80x#riJ9v5JcBsV` z*m5j2M($4rYH$49?YWvl4`V23+SiZ{!7___{Bsu$xL7p^VoGH3R+%)NYgtaLYJ$R% zy2^2RBV4%E`xA^NhQ6vmX*8EILn>@gr!vBnDe$L_wKI)Ne=1J(CclOQ**1>Yr=!5z z%j+c1y#@6BoeKvG;1G-2 zSTA_5iUa?>8_d24#5Y zB1#be}sJ?LZ`t{PY*MUExBoYqGMD7Ed_HGy}40z=gq|MKkcc2iULkJz< z5u(SN+oDkQlepb|g!w5*o0w_KN{Aka3jo)V%02>C>?_pqC@KHl^*?J6I4R-pNx=Y6 zbNg+541Gtaoq&?q%=QEKMup+T*tLZY6dpoiSQrQ4D3E~1{W>pHm8PaPA+f`NMY1N8 zdT;tXcq}Upx&TP@i-&mi*q&@P<(v}{cpCzPu^L|mK0AuZ^_`-Nm08KnvbcQYB0)!W zJa-O>^p^T8(3-UqCwy#t zyax;;v3LnQF;P*#B&P?X3Iy1A&>#pj=tbq5Zkw2dL=ReSDalB|B?cOz6;cmTP3LUC z@6Yx(5dwYnca#dwVLpL z+rg_C$F6!ZZo z9UGC~um=i=gJ@l$!ig za@jLpggFFN0XbC$AgPYpi z;r6TI5)vJs6_7luAa)3G8P-G!(nCyX{42VnA5iZOQtIp;lO)uoQ69JtCneU7lq?FV z{V5Ov9J2F+gMxw#1^szz2dNpGR`7jqZySn3aG++`SfacbkrK2$dIen&B2#sjot^zS zP+S)bn-B~v{b|p+heo{^I1q*AXk<@4sL?%&1%hCj`j_nF zT_*`TBit53ysH~kp6FhzBB;`PaJ+zg{;uBx&!1*)t92qj39;&xa)Z!#49eC=aFu?d;=^lwV@#gtxxyX#qEv_3PKyiXR?qDYI0jJg))`EDUB>SJzP{^A-LXX+;p9U!h@A(9ZKT?r#9d@*@S&OnHbwH0zE{7t|pR;H7js}Uw%!TG_PQ^12B-~!OXpt~T zz`)qcIz_qjh^c`qCs~so>sgp{l-|gxR!rM_H}L?b z1cCi0%<_pJT)Cykye#(pMOw4}&ANPrWMD6LbWLZNBr~|Uy5T7=hQvL@mR*lKxq$77 z?wlE1B}=#*Xx%`-c^6-sD7keIPgvDFJ>>u(s0g4O-nN}OilCsd13Xn6kgGRt)DQ_2 z(RB>+Q<`3A)C=VdR1EnrMBO9+7YhfG>ifi1`Hb#zRdgO+UnlTaQd4!c8s4l1zf13o zviL!Q6FoeL-2hU&5bB`}?TxUlI3!)LMhFFKC`N?_2kQA|Fp;&@A}ACfAGmt$TJcaL z{!17#>~8v5q@_SRNd5&6fBM7Qr@mX>2a^*=C{4BDk@3WK5;D@n>%$i58J61nhj8-G(-kzLOt^hpUMj1s}3MyPxuYtX-nTmOfKhKon_0 zT&KoNB!TVP*w`qelt9HFQn^9eTzYo+SHxFCDAk`PUmvv-I?F-_Z-Lbf1c<6@0joRAa&oL z`}29fulIGG*Lj|oO~4p=GK!t#5$%jq31#0+@=ODsdds+r#Wb;nhIOq_V~gAj=GOqz zUA`Y?Z6d}loN!aP|KGgqz{xU&;(bq>1uLB!vUxLu-o};v+)0<@q$CTpLrr278xc%m z;j(U>9i1FuprouUn~tt_PRzzRJtrU1eSLB4o9a3eC8^=1Oj3K=)6(RtA_rvI#aZ}u{(X6u1|Wfk6!R_`Fhrhx=eTn&Pm0tb2{EHzWu zPEy0^7#h}mmfL#GpkX6M==A7eM3Zm$rQLldNq2=5V==Jn?PK#{PMl(9&un0_#3348 zx}4?apQdv8QY-2*(c-+Yg0J-4uCxMkTMz=<$MZPoWa~wJhjM^$W2-(u8%(UAcva>> zvK^&jm7EAxu}J&G*+7UeYNI}mF8pdmyZ@fP<}IN(hHW_w(nHD=T^PD&NL0V^aIx>?txPrvkkd zV!643!%Im={UMvor?06Zq8xS|;7T6ZjFZ=F@Tv%NCv%%OsISNky$&2W!=ZEM_U*C1 z|Nc8kzt8H@?9-%isYTl&gaF2a8Y>j}DTie-HUr#29>k73@Odl}u znyv=hk+h4ts=BcXqU++8BZJv7O>6ncysUkAgyW8M?{V@#UW#(aa(i2rCuI zu`(6%QkWUl_fMZJqb|}h1|-wDmwi(>!@?M&u#$pAY|+Lv_YvMAn26vddC6b8eSCP; zC7gKKSDB)7(_1xQ*hkEFxVxJXSkj@aH%T)5mLXVm0R-9jw6t*3SAv%KP3*yclJ5KY z`T4w}cXxQ9va<6i%{KA`&Jb1i8e;E1uMLhB3isC_{55yjSgR4U<7yn*eIfWP1)GlaMysW5+;0 zaudP;Yfw^|_UL5FV0ZN(PYHszZ6taSty{G;*hUzHu&|mZYrTbv^qqQMJQp7Vn1`M4nv4Y&vcrst}l#I=$!Ik7aRcx zqthtlTkP$A*hForq9z{z>>(;WOS1ev7uJPXgd5?b78dq&x|nD6|M=_0;^IAgtM0AqkSQ0=Z)2-FE zm@+;VH(@|3E=9(vyPP`PqbKIyySy2t@V^az03Z(&@Hs+GwGJ1fj0qU85Tc4Q-?PlF!S-gWY@N{#Pwp zn6cPdB80oCQoDbk8GAp(a%lZ^Zm&;&6}NXXLn(A#3{UaMeK;0ALS|=Q#}#P@W{~vu zp=t)O`ES28(a30v;Dh|q^sjj*j()V%yWFStmh6>v#IIe-<=nsi&{DMSuJk*qs;cU6;B)N_f{xJ}6G980=MHy)c(JbW=FM+> zBM=lxThYko7HN+@{fzz)OqNB2V6JX3^?n7Y#Az0J{U+^PpZY1b|A&Jg%E4l)+TQqz zrL1(DdJ-AwT54!<+hg^1P(L~SJ$mN=PSewb-T(FizeA%BCa3Rcxb{M%^Q&b}osZmK z%M?H-3iBG;nY?`)@SOCcW15Mp#()29(%0S~(sZ=>mkAez{IaX#;8av}JKd)~#Vcj` z2eO0oDCgzMCpfhsd@62VCp|4b_xbkm5M2OMoS-nXE*D9o8&m{<&04uGn>Xxs;Jy5d znRBP{+=b7^kD8N2+~-8$SmO54>fJ zEgO65(Z2hG%4CNEXHkq#2%N?{uJ5J{#JLlmgSC`lD^Td8c}-R8s?ZCzA6G z(EoD&DGKjXJSMu&1N573AI+_yPhLSaS;Dx=ttl%fd`_(b#xFL16vukvRjEC;A^zOI z>f#vCU9lxl4i=A*WX`dpd?a5iIkg@KCONwzSw{{ zOOQqQ3EB*{^$V*Z;3=-`IMX))Q9&>%)^iy7(yRe)(&^JDsc4P%=Pa5Jtm0K4-Y%BN zjR%dX*k}Q{>ga4d{*^+}yo>8!^=mF}E3YH~I)@G@n-}z$)*U+rk?;jP`{y$!gk*G7 zM3|m3WqZgOy;18bp4Tt(394(+b|XXV4W&tR{a{m&Li$dgJQ;FB5%`=@?9C15ASRH& zXZ<)tjUM@a1U2(w95H$}DeGl6j} z;2dkb9jl3#IY>O;<-Xt)^{)6or-S6@OIZMy@by=!h-3N-=T0b3g`Hw|-R(0`IgkXM zU^~?C0gPfdOEW8;T{Uk*g?Gx7Z-uA?Pi=~*q-FD6@4l&F!;Eg}=;$~Ns;PJ%f!r%; z_=M@!JPK$^tn=NpmF}DduH5~$?RiPU#Wdo#zdolE*-;jj!H=pt)&ACv8$ZcD7P%bC zCP=7aO+p?c)TER*8Wwy;X}v>z-08jm*`(1a@a5+z0bA=YN);#FZrIz~%M~=VfaDfI zR}jq{@tUO=(0$}oz9Ern$FB`$_KFRXv4xc{nmPw z#oxDY7lW>)(ajfcC!9QSL2R#n_Wn05S_mmk3~-4HeiX(f^l=1!QYHi%KdE-&_VaLv zWLXN8nC&6;v&-7Gy)`v|p($b%t82G zGYKpv*f{-)Qy4-ZD-uHWF87(e@$f7WH&QNcr+e8wC{5-72`QjS%1rO|w#L`mH2sw6 zPjF>J=~;;fittm`QpL*BB~j?0es(%|!VVsj_;~~b7)%$IElrg{uC?nMSH>~b%J3R} z>Cz>+5c*Dn0SnuUs=_C{|C=Y&Ja1`u`9ANnpdX+Y+e8$D1pfiD57+$B7yxhlmxoAH zuK<4%dt7QLqj9<^l2Fn7p)Ew1QoGIaqRsG@vRj#r8a!>hm{x3Pm`{?s2^E1Tr$bzY zqBK;0?tjFhC;^@Z?acxD6OLB1pQMQi*knS8rbtjIb`NXF=oEny&3y9#UCk)|EdE5| zKgQbO!7X4iy%KT#EDgcx4fzc+!#> zA1Fr+s|VeWD$+xJHU*jni0-ey;QT+3lHAq{1 z&861k3iKWFw#h2RW9_s&&hNfU2W{TvZhMLusm9bAso23eB+j7;;r2__(D~ODP`9MA zRz6c@%T*b^@}AT?)=RKQz4)(S4@u%q(V8t{T_UxFA*L`!u}bs% z)~&q)^j0Io6k3o7Meg8QcEpKya30sNdK4}}=I4(!WCk=4#hFh?3bYDabRIU}>FSS_ zcn24eol8^{Ha&M=cqhY$XB92NerYP{5AS?})nei)q#IaLi$K4ngLeb(Vnta)NzEh$ z+FeIDuV6(@6dayaGabXi1dDxvIkYDw=2+g{Jex#-@~f+{PpC;ipE;3;^uNuDq{ z0r5nXEh9g^9(Kf0z!EAdQ zoh95d9@)Q&Zi>*4rCWPB0{N5SIsuHxy?KM|_7}!*L+&sxbcLr|B41*F9VkjbO zkW*AjQ|aKZJ5)Hvy@Q?+JEh;#KdKfE^t&+sMiWtOWZpIEzTJm{GGP_$rer|WnW6`v z{apG`3lMMqAl2n-x1yL7=??IQH)mjBBq<1~ThLc~^AFRIr9U7&+<<4P+m2Z;v%Cq2 zY$gT?Vt5a~QDE3OM;>_V){PI`56fMH%QKS}@VTw;w1x~8wry&go$NB=N>3UY_BlI@ zTKB1o9BgmqY|Xa7*%0Obksp(Jd@Ev9pZLglY-gW?=1(^=`r9y*ha^tZYiR|CAKYLu zdkwibVy#CH;IV8UbQ6@+2|1tfx7>%DZm;5Z7XCzmOcDICWG<~4x|=?)CLc2B)vw>#pW~}giXeOgGcC6u-YPgS%Ys9GU$X*7^RlyGIh18i$| z0;Ywsr`yJtC)zlkf1%%}xrO>#$}p$KW6194^0)t` zH*5YUD7Jv9xZH^%j;zxGhjpl)`0fbz|Ji;T8`2D3^6{f7RxTU5XAj3^ zuD3Zl@_z zQDVl#VXfwcP~rL_)jEG|ipr>j>aPrE05E0is~q`)w6@SN*!OHdSPC55(@?W2qjQPk z1pnmo@7P_GlY1Dh;;}TFel>PoLK;CC^q=arnbo*e1}T0CiPEJv+;`Dzio~=0Ay$==U_q#HSiRbeDuD)jYUh&Do+VtzVAN{Z@IcMa6j(~_Oy6>sIqf9%HmhpZm+ zzjdacn%_a3Vy&}bBTHUMJB5lvl*%N8&%wkgX2o`%ZwmFe;^m{6&_&}jM?mcw*O+m) zj{F~-LnwgJol8VB%lX`kL$`sq&0-i#iOOJ=k*`0D07`%wIAWY{pynqw;n^7KH_+ZA z7%xcAR}w4{>RH8kG`suo5Miuj{S6gCjt-8|@t#1aCxpolMOeJZ#3>99 zmPHUPL_i4fK@da1TLGn$E7u9RZFd8TqiCMPJ9r&Bw5-=o>Gjjj%F2NE$hMp;L`cTq z$T}y{7LGWpdMagB_`!7ZdleBD=rn~@0pirzQMj01OTT%f41cg-MPGXd9BHy)h0H{` z&zLZwg2zz&Y_L5DSwyCJK#9$+zFG4PjZnIpChwxM=!^;uC0%dO_^euwA~rrWr9vtoMaN z)|6-Cn$pmRr)CVx)mL|+luL!H5LQROs&E!w6a`-Gw}X#MQf1)VQel-hV8^Hxtg4fV~Kmc&x`^*$;a( z3)m#*%F6DshUB%csycTaMbrKGBgV>lu`12G5-A>4X%&v*Z6At8L_>j7`JHl8)CU zY#b_?GD)LWPHvM*=%x3841kjmZ$GrRBTco6aQ49hg9`ll?|MyBUoNvWcFJz@3G6s> zPnU9)^j?ldlv+@;&Puh0lbsoB@;+fC;USuoQ#8qiM>Pm6Tl7VAtv)>6(eEtNBp)Yo_D18v`E#jt z?=FMvetMA;HPaKVx$oHuNrlO`i4>tkH#rxmj$jzwy>vG@c`_RkxplZS+@vn2&dZ84 z{=M0r85a^kQ-*!5IC7=GUvW%5Wny$+o{PBbvNQ_pHgKP1dIha%Aux%VF=&q%dI@w4 zloh}7-Ba!<-cXwOClt|C1Je(hbuoxUD;Oj{E+?nv_Y9NEQQgQ>LS+7vbOK&|Xdxib zAc_$&=8{asnpX83%75vWkm{WzwMc+=OY@4}{9z=2>76Sh51&bW`PWmL@{T)W-lm%P zgbxgNdiih$DRemejib=5aw~Fxq2FfN9!C4OF%@2dwXN+*is}+%yY~SN7H5S{i;Nyy z3XUj}ea?Cb*S+DckIU*@ZvwnF*mkyox4%XWK(f6dJ}lz3SENjQIJY&n%xW>EK9g@TC(xHOLPUG55l?}a$#d`vZmPGNdHY`c#WA2dwWx+Pid^)^m z>zG!^(GzB^2M4=o4E%nI)x)}Gwd?Bav&MgGvFGZ%%>3UkUbD*&ZHBC zy6@@9gO<5j5O$ReD^7D-4HNrCzx9*@ncTnxJwwsHxF!TCSpjY3k;~Wh9{Rdn4uMh_ z3sQK)xa<%~#}Y_|tkD$FJ(GNk|0W=YTpGmJAPhU(tN$h>()ESGoL>Tw zv(|*_E^={%ac}^q!$TFd9;vouJ7CFtbCCYPT7j3`Eai2SUtK4kyL?#;_GFTjxQ}qi zrSSBO{Uv5<#3rz8i>UdX_iK@?JNUvWdWp8A8I86UmH?DnO#H^xWB%`A!t-LR!9Gr%Rmp)TeKiTWd?2*vjAj^*9WSF zWAb2D-k%=ozJt3!@tUHQRc_ob8#iv(W`2dg85tQp=X?iiP8Xdq>4S87m^2ea3mM*fYg}#M zLUvNG+VdLv?C(v!kdLM*;jsRzeGi@T{_34ObC%m?O}HcpvxCDx{SRZNAbpXGH2(C4 znO8Pw6i62msE@U{i1xfZJNDCYK<8N*!t#G|zw#`*2s-KkA;(21RAW6@lyaZ=kYq3= zG(9?wSbc`#Uit<$`?tCXK|f8eb-iwZ=vqGBZkJ4((rRW?Ns zgI+~`8?X?a@@I|DX0!%#Mr{VGl_O=CMO`E27S5&FvxlpNlT4ATc|ngxP-4HREyD5! zHYBHo!6|B7AD4Y>E7s3&hrIFdr^Td`?|~P@zu8H#x3vBC0k!jkFFif z#OKgMtTk*9{+=oLjS@g>+(4x-fkstk6Gh&##*L<^+UcTk!lg$6Ri!ZNB}~x#64R2+ zn>S;*qH7sHWXb*U?(S-p-Sg4xon}O=Jk?K6HYVzkL88dC?w^{{d-j!c)D>bpNFoVY zqVVYYm!gyBd{@h#t8k0;J&4%0L%jnL5PJgc9W7%xdo0k>WHC;dvrl?)q-IiJn;b2N zc4|tS=v7HBd5b6+z>75;mME?-)ZDI`b4@Pc%~)v}oL|im*gf9Rt5{1PKy35u5f5Y(BXm94_JxClWRM zi)gIShyAavA80k@l^G>- znj7j<0SyneX8K#=c@VJBmpz&(+H2oQDXQ-)vK+47qybF!%ki?u%1|wwel+e+Vf(jc z!JC9lEF+zG9$mWxsE(sGw^&TeSk3w{)es9H-l=>419!D?ox$Fm7AcYr!&lZyO#emOWW-pR4wb+tv^s$}HxoQ}^2+a&~eO@%07f>2#j-W!_vtNos4VF9O$9N7iP9 zSW#Qf6e1cwAZ{3>05T&TtI2=5o%~W^pgHB8QO|})QMMmE5f*ced!gRIf%oxI=sfZB zyp6(pp`)a}qo#7IU{^4+*>@sulubjbBP^%BMRV~BlBiLeE43KH7V4x zKr$Ex^tH5#3#vG*#GeilIX`;vTiZW6>*Omcm3|s zpeA1X_wO%WL&Yeh$I(A_bp}11MjF_~IHhbgbMQ>D)$1|&&>2LdMRNEs5QD=<$m;)X zRbwWt`xvfVItk<+a79rUjeFl)(RKN6s*&eUT8=j{nFd+K8}{+4t3*?gwt^>qH-X14 zvLyf=VJ3%98{X5(%4!jdf{)IH*K1JVbK)-OkYN|isHa2{QFMy zmqA43lo(z$Q1N8tO;s9qJ>Uth71XAdZRXNpWI>E;?sHuot5S2(nC;p%Sa&lWL%D+> z0E-&pAJ0&j7DPLt;!50-;*Um#L_}2l%GS5Zjj5iL-D1&1)jEsxdB}6E&#o{0U6ryw zX_zkYofGFg` zg+ak~(k+HLBYGrE8pQMUr{d4LW^Qjh<_&(N^+ABmqOc?|^ z16SFfZnV0xl{i=o=Tkz%PIpf&X$MRFOszhU#SgO9~rA2WBkMo$i~q z-XfS&j&Ke^QP=RK503}SAII{$L#X~{7vni-84jNnrx#QAWwU0s)eix<_*}vPhTf~! zDdHlD7^HL=MeXAnNpNoCb}rEJFa$A?ql+fB&G?joQE0*;ssASWjWbydglNL8+as9| zrKB!>spz`(U*)g95D(Y9J^~6OTCCA6RAfn#o>c-yllfY$yQZml^5zq6;8F4*D~q6K z&fOY{M5b%Af4$-ac|{5_d?A+cir2e0E+mDA&KIA5eu~&&-|`zp)u*QD=+Fw;H8gcN z;-m^U_*r%SkY1Z{o{G&6@b3+Xv~J^6tYz+ArnrL&Qwv37M`YTszxo$Mu!Qc685J`V z=DG;4RHJ2M4(c}hB_#SxBERS$|HnUuu+W%C@U`WwCZjb9775))z6^%Z6Qt4-E{VvP zAd&@;PQ=skBVho!`jZ%NCe#?sD`L4L97}?}(E<}6c-nJ8*dB9SScD|QHDY$F(hmWu zD&>f@cW}+@gKlx?v=d}Qb_CQRJnbBeXgGVGUKL6O$-*sbr1U%K% z)qRxwgkipP#{v(z6m($VZ{eYmN{I6$8H>=zNGLn*KlTj2EO`>gv&^P z!Cf}I-7~W0?KH8T6TT?qE0J0w$o`o;?ppdon)8&z0vU)&hotdX^r9&+lk|+Z+~rP* z@D+vn1UP2d+$U?*D2woNU7nwGks)YVjmTsjinobiQp8Sif0nHwy&+CtCAba|M6z?v z3d;Q`$t#SfvNlA37`!P^le55tHmN5?rH|7Lc_!633*p+!ZmA7jueO8`- z3Cl(f|MXQthmVP=8HWYXa}Ni(Db8_5|Iu97n+M2kOgMQ$~vo*m>?Df}=IK8s(| zZHG`$86n;CHoeeR1;2WE^{&-GppM~P&tttD!%b8{SUgarPx0AjRA&ODr|pS40Ru@f0fSj_f|5(U8a173FMGOOQ6V zhlfYh#x5cAV&=lLk+~~4O67dKy_eFVgzQglwxjNDP08*^9mMo}!K#n^gXeKJf=y(B z42;n{IBex#4)&}_&tyoY(OYcMl{sC(Gc4#V=(FY{Sy(kyGD=+f-WYlL#P&S}aM|p#5UiM-Y0n zev8Eh8{SC$mAA6SV zo7h9Je#&*9s!KMLN7Y;)SH3_LoR}#pGLmit)E7IC;CeN))^{12+%0Ls&?>TbHu+$} zKu*EcEG!|JR(?>Z2CrQDDR!%=5;PZ6gxTUOMx+U1)`Quj55_}xSYSkd6i)RKcq_f} zTNOt-)YccQ6WYoUc_DRLN5i^2UZ?X_uKa+qYdx`$?Dz!HMRp%?JB`xlw{Vj@1i7O5 zV2<0W*i5hVb=E`eRv-S;FCsyb3+F_8T3%9@VQ0njG=< zoq57h7#^DH25b7KMaZ}(AUomQ!TGT6l-?`}qoYX&N4d_0P~~@5Km{H`3PD+_QJFgn z-Yfc2klMG9^UXIL_ST+)$4r}k%Vi#y@lf0Tk4WE*|;qG<*L~+8*>WY$ZKk(Aqs#8-fOq*~n{>#vwkoRa-hR-5P-?--NkAhkgJR%fC`D6UTRgHrP5&&j-HT^WovI`mk*;*z8q(PL-H=@E2DAMRh%YzfotfaEU2=xb-wQL)i;JE>7#29WaA7O$IAaB1b~A z$HT3O5MZ9+t!+5-d*Q|?;f;rEX7}vrQ_Y;mdh0yw_EZb##1E!%V4%6&!Lby~VJ)du zX+*~C3wXvSINi-|xxDs^9hM+sur(J;&duamHPNvN)J$g3MLU__)XM66Y{FC~$%xOG ztUziW0WHM1SvL0J4e$KYXE{2DhrC>xRPG3eWo@Q`*rjvTc>h$6SoX?(quK!5n7!g5 zNb9m}N2@MOT9#9a8!uC` zmm>Eg$&hpeBL$4Bx^d*oSXa;$U+a*FQ_dxAFIBEP`@$xvG`v6DKo5#g-7mtyejHr&Us=U7Z#ttBVh#wY9i>R#p6&OOf(7rGnG z0#Dh|$baRpVtFP?WT^lu55^jVXPWJK4Aqma>sqEOi_=RHfVbd`ThzKJBR`0qnWGj7 zeJHhyoeT&R**!B$^Djb+i-i zz?3LHT#1mSxRr|uy&s-zRudg0eEIQ6?M1MW z6%e`7Wxa5SO@^{nR#}-z;)Le*7}<)g&N?$35OT^c3g`{Gv@|C&{dwVirXwiHq-4j; zrof%tWBrB=0^<26JMvzVBuM{X#7%!TZ!?vfCSpKVK1WqTSO)we8E#4FPlr;=w^3CT zlbH)6RpUd+*xUwrxuUC@FxH3;734p`a7slsONiAi^yT zuhb#)&|Rgo-*$0s@})HeRX&vuGX_iVDZD=?jTG@EVgkj-lwof&fl~~OCHg@OU^akr!;v3-`)Ya9O zu73YG>80Z@NqPp$N6ihLJsgjkzn_}}_2Cb?e`4iZ<}`uZ({tEce1L^$tz)UjE|wCV zA(V-$Q!3^X6Bkxg5@$?2)9nU0U(Fp^ei@8>$mRQU5dwkhrQ>E5{0#E3WN_ZvZvXwBEm5ycb}# zJts~H`(La~v2VLocJ%!2-IIOF_In2`0v7>LZj9Ci<}LZ$7XMsHd{^PF6Kt zY3ca9G?2s1bJ^Wq(f)8Pb=&kpnJN-7q}sxr7g-&ZPWVBcD52)!I3$tRY>sAl$jl3m*(^1*zM*uIY7ejUwtYq z^jPf^W3(Nr%B;l$fh^aXoHKv8xce$OMphrzI`C_uY5i^vvmdugc^&*p;T2Y!E>Bp5;!L?k7+CyB+mRu#lws>0_59 zDL7?%?wd&4!yC*z?U&iT?=NyocmzO>K2#mv#k(VpIM`jz$JDsTx^?Rqxi`5oyR>4p znnNFrE`(OGpW`gGG2en6@ML^i(+-nu7)M%M9neKDx$QFMd1@{OEb}Y19ck0|tK1zC zoA1uHk34Kp@K<5TsP2iSgI%ZI`A~hS%6AkSeQ)t>A^^X16ihtWy&6T&UrT%y;m|UP zjVA97++#WuTVSGS_E8j^0vqEWWMa4H%cZBEJ$trPV`$xr$msF!PtlT=K8}ELNv@Y4 zxqcQ$6hsZ`jcF%LnWeRlW#8AO*|3b$>D!3gDw)?zw(R=jXTNc2)>!S$XV9xCcat2& zU|#by$)}HUbeh%RW=SvVU9ge#`7DH_E?z?eSN*9;^O|ms7`e{4Vb7n??Ik%ar}QJ2 zu<$&yeQ|+Wax#3H;{7jjb)qc7t926-E6)N}o^ZSzOr;|O0Hr#E8ha_CfG{meQewEw zfJt~mAd%sTqCG*EvaI}}yejHIpTb2p1O23NH@Ljqtl;IhNeAcczC(s{!M+ zESyir-o8!iWn@}L5Xg#*M3mrvddFLc>uFSif|pzE-?hGHf%|<+*HFU=tzu0v};P{)rCFO`iBx-LZvwWl9oxe!^>St4E?fn3k)#%8m$2&-dsqlBxzG5oX`xQ zq$)wbC)0QY6H0i<1`)VkOqNCI$czM3bH+4cQt2BBS4f;O%qoZaO_V_=GS!48oA?Qe z>QAP*i=XDSLxOn$fyxjdS^CsblBS3!gtUTZe6{}h>64h(4)E`?&!&1Rw^sdi4?oJ4q1;uQ6ry1uZhGr3T2^l(H(I=f@BiVqe{fPWp7b`i3(FOZFLz~rr4 z=9fyMC?VvLN+wE|$~k+}S-iWjeD-a<{lXO#QFL1Yt$$?fa4_YcJj#4vF z5*+w~iLVc{2d>VG+asJfki#G$l(PkeAq4UzYFxBpf2XSZgWgKL_Ct?}GRlEYtBm&o z3e_Gq?EU!u1Db#9tjc}=MneJf!+0ilVvfM5`UCPKoXTOj0( ziR!uqcYXOZ&w&dGoB}i=nQ09_1NNR}i1_Lxz%8&t{swF(34B}cao>q9_I1JG5+VM5zVvx47Ead)DQmpgfE)6Hic|1+%t0T+TY8+<(E19GYAMXF4m?oSjKKo z6DMNX9^B>Q^rWORl(}2t97(Td198SvMw1DD$5RS9BD$~70TwAGKG>+- zjYzC%-KTsLHW<>5=ZEeKHtlpEDz7}}xQYuP!AgwKIgJv`*2UpsP@qA6n#ze>I$Upv zPMO`FJa)EJ0o3U(nRjnw&j;ofD=yhyoH!lS3*8gPnpi$6{n4(hq;lcNw!-RHe#NyB zCMyGMg)@qAwx0f7by*jJp}@}TW!@xWH2Ialibyazspp>;hhEVF>g(&LwGEAk2lf&t zVURQJneB8x%kH8oGvWqwNkP)-1?rhFY0?mV_g^8Ai@3!y z(5%@9jKGdB8a4z6S20}9l3jxA_bP!PWKg)Wi~IwC0*CcaHkUe zF66(<+IwkV;gTjUpX3IWS}{p;#+FuOST0{IDnevi_}wgZ>YTSw@MmzTo4RLh=XQVX z+F&rsHNH02fdnXLj6l zi3@{p5lR~+nplF~!|6|mN74rsqtCb=syhw=_b70O^#9Rn{f~dUK~DoXD;0=B9ImlF z8a+gXk-`G)AX83hZHQxmylL3)4VeuKF8a5II+*iV!UmkEqXmT?L7 z21^Pz-A0a+B5s<@L6!+mz$Sx)9J1rnCoMYwP-4fr`#=$=yx=DP`Y?r$As4{jlCf!> zxJMpe{Oc`K<>8X^9~`;ip|C*Ktr(=z(AbyI3ruOLcyc}iD@c(fFhwhaV>*2Ooblu1 zx=;L~s}41%wbSQ$DpN^C#6(J%Hk~`$LzQuE2^PYZ>ZIPZ@(IdzQIpbG?AU+48~m=) z$U~L$o^@vAIWtIP@Q;Z))}>KcKYOo6@a*kwQMi)UDOqv#vEJ-Hmpd%Bo*E z|0eJ%BU={INFQaXeqK@L)ff(Vej%hI9}un4;QkGwK?n6_mqkh^B5f9vDkrs2%lN0-~NlDQz)Z^K-@BDgYtxo$yQRKP7Xp&W%%aS50Jk+zUi;x?=s8; z?xLC4yb(KZn;rjBPUpEy9U75$XMYTnSR9lzCGF3XTVyF85m7yh)tOGL5zVSZOm|;J;i9=UManvHISHgi%~+ z>6J`@n~qaa*LMF};xo6jP!EC$qBK#{nzxNiVw&9W_NnVPj&M7kN_Ub(+OYcvX zhPbfdGVMj3nzBccH+M=S=T%X5knBQ6lgMxpDmN>{Ydx`PC5w}?mc=;kMyuGQHhvn#!XTax-E(80PK^EBvUjVPl8Vu_pns=i(hRwU6!+Y(ox}<0 z8L%c#%>TM;LZd`Lk!Q!NqyRKtlp$;*Ms!jyJdXn7OKD|_C=hx0_uR2H>s6!%uIMp7 z;lVNp@5dkiD$?G4k%A?dbVq1KU#e-?6UcUVXz*6&ZdK(1O`ISBT|!Vo^jK@{bRhOF zd8k;D38q6D4HDZ<#gD|Oz{kU*E7)Q*ep4Tahqg`!W-o>PD6VT{Q2}%j2@=nEiWq`5(*Jf4L$MukQT z=TOY>q>CiOHgJoUPrnb)NND!rivfHtOUvMomrS&%|2o%==f%g6Je^^$LlNe6RF601 z?1z=GOLT5@PqNuAWo;XYuZrt!X_xUSO~7T)c5u!w6dy>b98koiat`cb|Ehh`Q@Ta9 zhZ-$?Dpr*^FL1|JqE?rA9SB;qmS%+s3?y;oYR^xxOW_Rb>nJ>asW$f4Wsd{a zM>)a)hQN^!8yhPZ*W=U0Jy`~HJJ_*6NM4hK$d$6v;XYuEpzM?>zMHh%#{KIpD#f%6 z>|VNOv%+nDJyA|Bok`C1?f7?3#QC}WJz%QPoB3!HUmnP?TkZWD7@Kkt6i&p&gg3iHy5eZT?%0y+KX99@QFB2!)4Ja1A?D4tByiYOS zO_w};@7c3wrCgKr3XoK6USNIXW8eoc(oubYrSyg=tP+r0(=d__()QN9M8(87R}1=S zrl{a{xqsdD)s9brbo3BWdrPAMyg@JOV0IatN$9(fynepXYP9>muC1+@*hqtzbd-q=UJT}2l?#N`yZ4IVAH z@dc-w#$zpwY@yKj^3!U_9z&B)oQsF%t{DR(gZohPCX$=YO4xU^IBYqLc)CWB&s;E} zkP(^ij=>Xs4j!D-;zU!AF8{i%S+AiFh{$_7%KW5|1#{-iK^ky`PC$E)(p=IYN&5)e zHu|=GC(%Hk3GT-P`pJ`Gn|h4;_v@sf2QkSEJU(%buMkTqCR?V2Sph^3`Nl^O1;#hf zk{1_HqN&5b%#6awR_4f%Xo9uSF@i(P7>WgK`D4?xoE);;kTQxCVe;_w)44y=FuSz* z3y)`?!na$q6>MOYd^0`)BR@ z^meWYY}ybyOD%D1m&6D@YCu4qW#7Ja%rM>kaP8g7*t)Cw%;lt%i8$GXrL>4oJhe5PDkA#C_xhz795FySp^uG5p@ufRf4!6wCN=r2v ze~=;XJ1I8CHC(Z#F$SlHS*@X$T>*=SLsfEk`k$T!F?H23@VZlXb{g83b8!-2fgatm zC644i-Zxu}(8Unc1>SHO>9j4ji~s`LG6_Waty;Pv&+h~fOB{}#8< zJh>&*)HQv~zO>)@^LcY!pGcgC`MMVI^HC3S%RJbHIe8KANq%|)9cB7O5E-G@mZq((6eEppG*F|nZ`b9oP1)|LFf*#qq#oO?^f2*+Xe zt9>N5X5SQh9;Xr#li%F+T$zq$nxL@n$!>Q)NS*{Zg8Mp*zJmiKRaJbVeg1kJO z7h2+2Wg{JsQFT?x{_5sEWNXU%hO{zoGNWN*YZ`{?Fe+o!4&b0Q@!Z*QaPL2V?nVig2-ZDK zyY*E5A6Sr>*M5gwFm5ay*00& z5Q!Fs7xd$v0`$004bOUc=x?zhGG;`|%_Zd`nb+h9tg<;<$6Sx$#z{XtV_>Sk<_veI zkk>^4yL(hEn3tw;Whk8WF*DIk3%aDMBS2r6LJ9fWKQ+G9g1VUdwm3 z=YsS5Xhs)wsr{$RRNc1Ibld9eKKzozef#YNlZcC&@fNlRz30`I`C6Qt{}Y6NKb~Mu zW6ozUSY^Y&qY{^IEcX`^S4<#bbXfX~Q8OGw+ve1n5=O!&0U4wLdSAt;OkQE*n;rA= z{~ zimC<1@f2^J(-}kYfR)A*7-&3jg&YZ2397@<&XjXeJ&nDibS^uEw2>LTKOZ%3p}(jeF&#-O zG zPSr@ng+6Oo@|`ROUrq1dGJR*fSbb)3=99lexhs!)8dGjeTjJC!<@>Z!N$!i_()iCIbzI{W5s2JxXs)zh!Cc2%SwjDEEA@*L0gc7t!KdDo|p zPns1SaJ+l^YTfIE!z{F+#seMl;_h6+hS=gvLEx?v|y|09mf z?-z6~&u|{m;uNKG1qjc{J3v9{=_ zButwZ?jH7Z+Y6K+eg-ZM`BOrT!zhhpXJ@U-oD-~`712wCGPTA_a@DH{se!E3boUpy zAteKP=wT<|PUX^yZcDl7ap|Ol) zX~xFKk}*X+u2~kaWWu$tR**gT!$_G~5=CD#{L!)~YYJ?O%gg34#^Mm~m=E%oOv*jI z!@gySdoBmANHy-MWqi^35^#jXG)bb|nY}dC>&x~3sehbqyBr8vg)?J5%#gI0#9~S8 zHoBbtGyWE&j9oEP&I`S}!@5%--vvx?ygR(m3dw2&d5q5PH8}?=gbdDMV+9jraE7IB zTgSgU*ya&0rrai=@M{gzq?=q!4MT}Xdmb4_Cs=b_IJ0+VG`ovr(D_6)fPU8dib zUHNBA>m9c_XanwC+1x^3n;@A$B{`7jeU%`IWBnr|!|ukRQKgYD7^hKHmF#+GoQ8`g z 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 literal 0 HcmV?d00001 diff --git a/incremental_transactions/tpcc/graphs/byname_sql_constargs_inlined.rs.png b/incremental_transactions/tpcc/graphs/byname_sql_constargs_inlined.rs.png new file mode 100644 index 0000000000000000000000000000000000000000..0e676127b837cae3e5b3fdacc5871a33beb2479a GIT binary patch literal 93683 zcmc$`cRbg7A3px6PIcO+p&?W!MP`(}+CteY8I>)g>`kZPRHCesRUw;XlhIKmD?2_$ zLiWlE;d{NDaNpncc>MnP{@nNdxKp3cd%VW;c|EV|dcN+;N{eq;OS_grp=^*idrF={ zSXzpL>R$I3`z~;wIaIuUj}K4H zsSmUT{GAhSQ~|A|kQpaE;ej;jq;{EI$i&!Fi};D&%=ihb<~piQqAJ^RJjAabZMKOc zg8%Wm4c|fbWefjE*?CVwYVjA!o$oT!?*?<{;^~E~cWz!s*|UR|Ho76@s)J6;@bIvp zRgaJO_=X=|*8L53I=RU$$I9BG9QRhlFSlX+zV=H%Pjyu2Y6jc9{nL7Mu8kkP3(s3x zCX0`+qg*?8r)`H6ZLuGF(%G+XZ?5*V^yD>Z2s^*awCd&g-T8B348m`Qhqg7CF$kMC z=X)Ed*bSu%?P;fB5Oy3%G_L3Nqz`akVcTBo#^kv>bdHZf*mmg4_31}9x-3=H)D9dx zs5idFHB0u?sau7`2Gx;|Uc7iAthw>ht*nJ+~xBKShMwD*JNkNgslL@b@VlD?lqbJ9FZ%PTNcO1_4$+J-xhzn#Qc95 z$p5!r`#w?a;V{+{&VDg9QolU7r#9|lW?iXX(sp*WFrKTmUGMI0{TRTPz@ii#me%5Y zF~z9nqxIZaPfb;ZMW?*Tj;&imxphB&o*k%)@Z>dZj65H}8)ZBEHMKM1e89^KNqY6O z&T}&pW3?B}>SsmmzK3brwywPG=61E>#pzvsb3fWVd$C4#$WGGI82QiicBhmX0cG8R3E7rwpC_MV}^ysIPo4UIrLTZnc3x`e*=C+J$>WeWs2yBrF;5D)Q zF?2a=A}F;?UnwN8ej-r7;&t3QuVj}wXLgND#VqUoN({=jojW7HzQ51P#&!;aB_AYc zwT+h6$fiDr?ZAQ4_jhpCs%SZddo#(f96l`T%c`P0J>EZ7a-{sT$J?$hg9kgg{w#K? ziMyzBM6cw-sFnGqjKYupjcvs_bF&T)=!KLcq=PDRoTj-OzhSthz6F?V+r2yHq}#^s zf(N@<PPmkdxa+`pW7kg%tgA2LDn$r8qSu5&KbD%wGRJ_Rzui zI^2htna>`O@>9fL)kG_?Dn%<6#ZNR}a1&`_(D6x%qZ857C>o1T)xGfie5r;>w6BQ3 zzWo;-EMwb#e|(@R#;UjWkf^Ap%j{&tUw{3zZTt3@*xpf?^(c>z zaTy)0lA+Ez|7dj^d%r`A`S9Vx#r=#?^5K$dsmA^a{XK<}j)Bn3%Sn)l5ut8SEQ3e569Iuc#?;_Uxyt3E6%<8PA^W zeP38eot+)X8XRqQ7_8UOJHw?jI@z?L@MY+Xy?#MueDH)+adW1@JJrgXslgAblPxZD zHCttb9~rr5IS${BR*Lb{^_P>Ad&*~~nYpvkE zEtA=_K12+NnjT>lH}AKw8vAVFBOagZe)n#LANxgarzT_G7@NW7r~KDnsHK_4ndQzX zvnt1anwe-xz)ClonHsD2OVlmizJXp)(W^R9TO7gb<7^i4_uR+4d=6)S&iIaZf$fSx>Rq$d2O2QeHiE2?_7sox(+oCI*_+ zk_{eV29Fw5GoOEY6iXo7>9>_Db*FQZC5#bg?>%_n%czu~sd4x2-R^@M4$1__Vi7Cd zUQ1KS6yo>-5ucftSGg(6rtanWfa=%_NBZlN3R9i#ZaLud-8fVPR3qK!EUNEPcYYzh>mYZa!%hW$Uq`3MYM)9oWqX-qp`fuBJI8e=5Xj z+~2zIGuhl@gDqMr@#=CqI$=+FO`w0Yp%qD9KDoB!FA6g$tcYJ zoUDmaNjT@(S|W@oypSV3ux}#W%fYcCN+F^;Muqcyu&_YWEk`x15?UT3A2N;zlLpwu zv|LwiZQLUoi#^btHJBqc5q#^`Z&qEOj;~z1P4?V5_ngUZyKmpQ(^JaVQtd%6)OU|7 zbWnG&Ia@8uI?jH)FRHE3GsbCpoL1QORlHViaKFP~Y<{rmrbfGx%%{B?hQ+T>1Uz+U zP%KIee5h=#?YfmoI#MA*TJZYUTL+~BBY*s`W!HS8ip^a8?D)-XG&H&@0`0%Gl&rbE zZin)fD=+*wG+4UFHz^l*&31pI_DMs9woV z>aB3b(qNH`A9P%j67z|!Zr9dkHM#72$}K-^fU-jZVdJx*h5;Ht{DqfC6t#1X&c%EPGnhVc~qYc zE$}LsX&1Y{1a~ARG z#DSiP=0jN{N?sEU50hW-j>rfNVHR*!7o?5wg(HsWFAYp^c)3cHc^NkvPkl^W(}(YOF?y^>z3W-Y-3DVX!7H+Dy=>e|}c zl#=w$PfkbVe6BX;Wj%QC3=ONY&!~$pRnuR?%OVQ^>kShuCZmUe*UBXrvD_5;zIeJtv+hM}mA$&aCRy|Ip?1`vT=C{&-2mq)UnGjJHg_rKj zmoHaLHjt}{*SL5@zbu(vDC4-IqL1@r$BxpcJW`&bQ<2M8tWbKbBXRo78J4|!_co3D z9~eo?BX-}(JIr`&q%tLQ^VbU3rza<) z3@TnkYvtyAEAbCSPP>W+>uJf&Me@;@KK$Av-M(Z>GCpEHF}2%Dzk02|ey@bx_jWnF z2L|j}Ufwa0p}ZCM+}#zi)PWFANPlP*c#D@g_V(>twH(I`V4cq4@AtN|M8n;@j?2gX3ch*mJh6(H*a3MaicP}we##` zr)7dC)(qmHr*FocNsYkS-Yrb zX8-w5Qn_f%?94RlfddDcZbk8xI|-`!aeh-UD;luic_G$2E>V0r|4x)#=$UAQhnH02 zhGdD#e%xz0`+nU)f}d5u4$#^T<->=%^_J@=@{%gaaCef|2iI$lEvv#2Fx zGvHHiEIl#hEhFl08X{!f_b@j%w_h?kjKQ6}-W3yD{5 zV|nP*<=`PgjP82&^?0*Rmwgy+E9B8HqXQg~Flk6Gy0%+POe}k(Ovu`|yB8}V0x2v8 zFoOkoE4uD`M{z`m%j^aGWtxaewBjL=sjkpn16PN?z9&iL9u2FXNk%)v^dkqymZ8>s zf<+I>1Pj-jP7fFEq4snIG1zzQ!>&OMq7WtB{u9q9Xx{!eEwAwtBY`crGmlAwqRY(K z<5bh89>2LZq+}Ia+jL&DX5$IYwCs8YodSRDT7UJyyPpp_%7^8BY}z6-mpey*w>_w)En^i&4A4{ZU9r$em4l;sFZ&wf_ zQ~#Os{?mT4aBFyS3GX8|I`@^ICQO?i4mXg@2t0+3wp8ih5j_Td1a-^+RqF5mrfy zeG@-K#d{?5fYx5_<};0SoctbDo1NBtk}Xu)Yb--(@W{8dz=kTCcBj4iG;7}l^xqKa zo8fRgR9E%#TQG0UNB_V}gFE*gK}M-9@@7&>ymC5?J@>ry*>bAYSP@eQsZgxOdX&bx ztHk+C8?V`g)TiX1yt7{J`H9=f*W1pRe13Jj#c3jlKoABI`*ihGK7Iu=i{;|q?}g4d zh^N`Cv^yYT*5UhD(_RA4UiWCfc=DyU%Oxs-qmBY;ZD0`QZ(`vc@Vn?)>aJ6pU}MSF zA3x%JrslL6UDg0CYnpMrJd#u$(CTP0XKt8-6H>cL8rq>! zd$31LGv95K%8lhKUpJ;+YyHQ|r*(!65q6J603k z``J4Qdj!l+O@8mFa+w_oQJl`S9e#nW8jT9}tXF^Yni%D{*Q|a*2$$X9CzNGnAAa;@ z?HrnJ>W>I<_6oD)Qz$rfJ5GynO z+PS=T@Nk-t?a(vEDB0&HNU4G(AwaP416rO+Ebe~IzjRPdtzEOGXjH{y*S?9*ZjBZ; zuVy7PfjFar(>UbhU!1yYId}+5GK@Mgb!|uQnqt7d@F^N+W$JDX@jwARC$c8~dBk;0 z4ZyV`Sj3?kV4ge`f`Iu||ICFn~t*zO{ZGoAOa+#a;3d6KEFvPQM z?lJMGr8X8+%w}g5tQh|@VQ0P$x8a9}`#yRzd5TW=9U;RpQZ6>1y0K;K58TP>_*@dJ z72;n~P&pttsIRCoT9DWqpJ;yUm}|4+$oUIw+mV1-Ypx=PC2Z%^j0GJ)-LP4xpswtE zdO+xms{V9#Szv;BL|=}$N`axr_*M-84*I)QI~tDJ1WSz|c@gsGfCP(H&Knc+=73Jo zAogOFk*GAC@eJCE5G!g}$EW8fYfwFi48Pl2Z+caOmMio?YwUz8X5pzuM{Vo{1*A|? z?euTa>J@4G{;l*XYj4@zo9XH4>mSFXY6?ODrxze=+j@IP``};#Fn#yW$r0=K-dHn5c8x1xcdKsgzlYC?U9nM71kvhPo+vqS`Ao4A~)nygc_#myz<49bizsTQ4OhLvFw z1Yc#^U(#5`sFmZ`-K?J-Q3F)cxcxrjc$#U`>!9^T_tF|}y7QZtyzG$52s%A?Kt%ec`cWjl%_$eRC?2j7q^4$ zdkzJOxoCz<`l259RiE7PrmVs~fXd&HYg1^Ox4E6BP58%`n?0WsLrG-2v0}9m9{t|m ze-Eim+TRcZ~*iYe>Hyib6-v!MVFK-2Ufqp;D^x zg{&*)g*!j{qN?UcRh`<>+c(K#^J>DuQaA9MfmnraTjitqw4(2PEnI9Ml2s+%0BMhw z&ouDo%nT1IHR{!7;fZd^3pqYA*-FyZAu*e0E~K4Pi&srN!6Xx`7$WM_*N}ruLn`kV zp`j@lUybx@$0Z~rNWIqoEZL^p70?h1O@Zt#kSUDe!8?E7utCYdAaZ=L#cbMFS6yBG zW$_U;{pN6L?s|uB{`!_6Ay5SIR_z>!r9<>oLDo?UJG(jVLeiP}Qem*TYgIA+p?ut> ztgoO1g))lf((lMX_C8lY7Xn2R=_-r!S>5C8a7qg(f~e{#~d1#-`gedN6um=gdK1^&6X`MaJd)+x?LP1YdiT-=^3&0myI}k zaamPdEQ}W_ARrhx%Ny0Y=-f{WiAwCE6l9^Sgr~lNW)4k34vs;;LP>Cfx!;kN(3rNP z;?sA_7#^3s>t1K_EUPSBfVwBGFlg+hbdVsyXk-fmB}FU8sipRl#NumjXenytllDE8 zZ#v0q_d#}Sf7HX_oA;m5u|0754C)#ln*nuFq9Cs;fLR&qiAnf)C6SqhMbhhacE(Up zB}e{~@!;#Ao_y<#l^q@5km(`?=!VO2q(qt-rXiq_ z9X$WE3lm7of9;ux;U2SL9pU(DCKdkgBAu&h0~HVjEyv-gPVX8eOlMjfDeb=*Zh0_n92J$ys7rZ`T&{cEKORc~}wDDC>{Ue0whGczVq^7Z)_ zt=?%A#&UkMZ>Y}lJfiKIj93~29@hW~f~?M$G9mH6R+;Q)%>NqvebXkDmK-Om{stb; z78!lio>O@JnglH|iAvzuvVM`U&BxNhmm)J$ z?m9ev)^&DbDm^a}JP&Blvqp@4FXm(gWbLhut0L6{3P>=+4!U=X1FxC>(?r)_C|EUU z)#2!Sgl>kRiAUNZIi#!WdbdGf&ZkwGLSkowdp%n&m~GjzWfX|~DppmreE2<+-Dcq0 z#IuibhuGggVn+?=RM7}dZhWnKKVCiK1z(Hfks95|o2xc>F`f?*Z5nUHjrAO~05`U6 z-uxV_KbR}=06w!?@jXsDLU+4AaEsPT`~^TdGu4~0cK!NuRwt{4n6@L4g#$!H2xYuB zs$tQ{wpRlDRgIntMY-c;+H#+Ri;Ih@dT$43{D%)`3FnhLH*2C z`lM^8h3P~c`Kcyxd{472%-=U0(@RS(L!j@=43R?sAAPq~#-K6%dQW3U67~z&^(Xz) zv5hkV8MHEL1JN=bKqI@F*!cNKRe3=7jrw0>Drpxq#$6B|`adV01QBQx?fCEFr~*k) z9U-&Fms#!vK*Yz~e?+F-iL6MkP0f2*luv1cFG$m0- zE#AYo>SKsluApVt-lY0i8PUm8gbzgC3-l=eSi$uwrt_frp8%TU#)CbREGqRQBAFI} z-;Bj7g4-%9=5vRQ^DA?4m&RQrQFy#|JP=|ZL#O{eHDWr6Lq;v<`$yJY95e>miC4>m zMNG@D_7$f2^-sP_!Tr}zgo;ICvqPdQZHQ1xDX{=~-?Vugf z#068n>t9b{mtH;tvV>;_2~5d?cJCFtErbm?ZJJI9Lytd zB~?DN=IUE(w#v`2WEfVxlstR()r`rE``kqCTsYNjOhA0_=Hp!$YAij;%qG4>w+gFw z_1d+M%|%R%1`HMGI|jIp0R%GE`zhMc2<#Klii`mkPyFYff0D8KJ=yw&oqyT_*A$QE zzkYtwjRl$lQh-(Ot@H>|f$Tc*E7TYu8pHEh(b7Q;Juw@BX3QdcX6aa1km{5o(rw&PV#!Qw$o6SWIj`1$#39+-zy zCpuX{zK!=&BT(z>{g_3_q2W;HZz>IA-+sR=L@dP6txnKkZYY0~(3F|Ln1CHOL(!43 zBF);tNq|i?sE>E3f&AA`6hG#y1AI5jTFVkaiZI1Dw%1KsazvW+GawR3RDvW5XmvX~bB34}us1B2xaV6mD6@ccdu#pvNE@KHG9kYU@z{ip=etinT z3=HvDUs5?r-!s&LbR32+3>*C8_Pt66Qv3i~_2PYkdXKmHz-_OYmsux3|3 zgoRs9htPBD{Ovs5&v$@{i4fX@Z$>-_I|w%PL+i{1rWL^Yx&ck4U1P{^;TK(Ok^1es z!yj`u*`WL+(y&H``RNwt={SwyC+7}Qbql=@p7(lxC9&5jn51T_?#k1T9z7yeqX(V9 zi}rRMjU2}dgkXlOhmCxp6zuON;h|%h6BAG^oSmIX4Vp7Eeo@2aX|2YB7vPPpoLY%pt_RUN1P{PWLb(N>UD?P+Rleva*fM*8Tqbr@}ohvFmnlL~7+a z3qr@`(8`Gg;4nh;S-WXd9TDJK9f*p6U6kdxTmR>)r)cJrPCRFr;yg*U)z_NSdm z^P3AGE-O$>ja5o<8iG&W*c7YDo$A5wP%@=PSl~&M=(Jc+;Y9iY$0&1A!~dwESI$%q zQ8guy|E!I2+iwLbs9@_PAWUUig%GOc)#d!7SKj??DfKhOu<8sH+e-f<`bVw%RMY%= zS!_^3|AP{mwe3dVLltvr&Fg7dt%O8#VR9%WRWeCh3(*Vw#tH)~FEG z5cN$w_}qseL!z!f6`46D?jfb$HhP=))7HtiAGgj7m)MRpMr0L#_jT-HukSE18`nSY zcQjmFT%1Tj(k;6UehjtlnqB?{1W+|Z5xr>#(EMs|Y!k6DttP+g0$fBxMX+ysz!xZZ z!>;2a4H1vAC_Z7RsMTr z{{l-AB2`}<%d#1)txwX|O;lAxJ%zgMJkn{&&|Y2$n`vetInx6|{mt1I3I9r%Ux$GV zanQ*2$kjyaYqBU8NuAIcoog5osL%JejRi{(3Y8XC(xNe@iG@vjf>1%Y?>{p z!I^s{rY8pLpwDCRas-JuC}WkesKf^nX%MLHkXiE^f0whn{{H)K&^x!eXKs7OG^Cou zK#e}c!t$|oVt|?^18M#fqL^h{!3H8Q7*&Sdg}fPfSrqOWdvFic$%YDJT^0G^=|v*# z3=Z!L3Zl(gau{~U3Q(QRnlhD;=1YcBK+=cPp2g=*qLwT+cOjCTt*vcz=SBwMNQjL_ zkOm3qsFo6KKic)YrzVC|XNedn1YK1S3EITiNmUXz|0k$#*9vvSCy@W2?rhj?2?2>r4smxNl>sF2{Z-FKKNZx7LYYo#?Y`C5TZ+1J?kK_7bH;t=qk%~%R4>(P zt1EU2I~hyL13wVv8PihM?WFVG|GI0^jJ-IJq3B?zu}jHCZ3$NWp4?FFj^r`keu27V z)O$|{GB%0*ludZ^{a%&!C4GzXzgDj6V=1mGd{CrQ3A|JJfQg$Vg!=h}0HHp^JG<>D z2z?N|isb?gGM4S>mK|>btio3nC7C?S)|M0hep6_wZTtiC_^Vg16pKskryDzi)DIQ^ z?P$~?*_0STr#~_d9zW1@Ym(RdAG#S-CiZ3R(mBG0YubOy5j0$rH|=O=zU)}pDa~b$ zk2$5)mgkh!5vR|9Z%tVE<>LG$FO{p#7m@$)QXTX9`CudE+GF=xAL$r}i2-|*)7gJ) zpil&Mn6S7CHT4U$n$FEFllhXqoRXLJi8o*6u;E?xo6~$0$`^*@D9V6kTIa2-nYq=% zH`-t?YdJw(ul4r(t3|^RW&QiG153Z1W{#abOfip#sTVr++4j0c~qW(bv4CR{gS}Mf}iV} z$|US9Rx?vpU}c*^I~<4Ju3if|2~3o*+C~Z`W7*<}4uBtM{M26LJqC*kp~x86Ss_P) z;Hm;FO>v&F_w-vyIVN4WICTTGNqVL72nAMspShY`=4LbxC4rUzhW`W&kY?x3E?@3t zln<9x8MgmBYk5trkTstkzWkS_%ZydRc~!|u+|Sp?C+zN4Ci}Q^6pA_RqWP?m#*b4g z9&AAr0+c2@9|TzVFP@Vm{Po?M1iuYtP5M9-JU>B zSWpOnIoW2=l$nCUo;a%@%+b=WqfkU|Eq&M&@+6UN5+K{|qQ6J{C}ClY=L7jGx@0Mo zp+o8mt9!4C!|?kZRzOxT2JNQ5$7qN!N6J;y;?G{aIvkq6jFPv5O@G0tcP!o)-V~zz zfD+?;GxS$Q>sc=^Z*Lj~hIlyO3=nD0xUHbLa$Z{e#=uy^)dWLKkmR{@J|Q84jqF$3 z3LY52ONeQR0Hw2&9&6x?_R<$f;8lv0B`%k`n1mc7Oa5-WwHg*{L#|6MipU2WS5qka z*(ZWRw*PWly6z@sm*>x)8`Z@JRXo=*_}*S5DJfYAbKZlED=C!x#r?duPQYm@`CEBN zg7eH&QA8@@+=9`>%MHn|DaYY2`N0 ze}4VqsyFxTu8JszzX_o8jN6sRNIqa0lzW=8(!i@-w&bT!cK)^KCCwLkSah2f7cGG+0|8M4)kG)fJ!OfZR575jgq<|RglQV8#eL&uU z<~t8|x*E%Se!>#IE`D4f`27_*NW}0b#>0fTliov$c)DN>>2Jx^0^*ooM10r6e}!b% zKu)YTfF{|w*_j6$-|M0_RF;?bg0IKGl9@uW-Jr4%p+5`*7Vc=>+B94U5p9s#^qvjZ!jP!b|ZSB zC$Gm~>5=k}=qpc;8eSpOWxHi*a^sQ5qfrqPGa>;Iq50Rdu=H8??K=*rrE=-gGqT{m z94el1_xN|kQ7D0=Y9X-$APB>``G0=jr5t1)M)Ygwjn!b}7`=;hEcqEW|F7%$3m4la z1PSu9SG=b({C=u&{R;?*tPuLoxV3Si9zvO-0#pC zzABn>2&Gn|U2>C?lZKFi&$uB4Ni7@5)urR1`NL14nnfW3s^vOo!xdsV^6fnJDhMP+ zkkmISmQlV4F0GWE$W4`mc7{9|dUE(4m=*GjPRpeR+o_|oGs4Hm=UiHr-N;MSIoUgRVaOK&j4Rz` zOce=#*pOy;-4WPl4Zyk(91kKJ_O{vC*(sQK-~9I%DIxm20W?qoAWD%;j)kG5TkKbZ z)Dwo7#DcZ5%T$}&pOh_};;SgG(`3BnfATs>Sqw_@A&PAGjqm@!wpN7sXKK7Zptbkc z@H`F$ICDC;{r>wamVf;FJ<3DhLI#I(*qFp`RPlVLDa^}6p@Gw$XiC%(l);&n-Ck?A zF<-i5NuluT3M}sRAwvSy$GkAgIH*gZ9;u~w#~qS~7y};iDel@J|+(->WyS zeR2B!XpM?ilxpIYsdjG}_l-rJ7}v5c49ta#Wef3}5@Lx86-?g+E$7K_5OJ3c*baIZ zefr)?D}8f?Yx%{pMI_`%)OBL|$o}#5{u#GFC5U$zUN9LkBCVpP+R5OSAdEsq&oX5h z<#SOB7Tmu-d*e`~7(#=bLPgWjS(vh8oKR-&8(l`<Z$VMj62qQWdbg=oeTkpuP)yVcAhfC za*}~qUx|H;b^`+&M-qr(&LKXbNa&(OKUuq-EfPDUhd3YxnV6ZG>tsY%P=uML$9@4n zO5Tbyo(yq-V$l-b2a$&5Acmz9wj(0gUJ_hiiDee1mKh!d>;93^?keCVKM*|8TMkIV zsekOo@=WKM%%))?jd_KEQp#!pG|sxdfNCfS&`X|>77L_+k2>7D=sgNcf`n8EIfUvQ zqG&TR-8~rKL1HwT>$ZV_JW%vJ=EyS2wWUTQ+otsEZHjR9fyS!sk`?|2+^+)a_*+@f z)jIP8kI$$u7^8?>4ax=zKJm4pd>b2RqQ>iLAhEH-bOo!|S=c*`xcw_d&`0tBeNC7D z`OW{_K_cA&7^P0YrmNXCNc=&7@-*mVz#bHU~e15PJ+L|2pc&JfUn%> ztVVGSbX{CrnpSWykrjo+FT zLZ~O$mah0s8`QrJM^Hl~+$Vvteu_W$595`oG*ZxD2}}0u*fJ657O4{vVPRqSCK3x7 z6hNtn&WtJ$8wa?q3Q+HGESsR@(ch^6=$*u_& zjzWnU4VVO0ULLYSie2jX+;Wi#^~@M0bZnfKkT*7t75`{m0LVdL!wyZ` zeKjNd_U(&S&v;F?&&=%fV0ZHbGM5AEDT?dcrMKq6G(2X6s$KKttgt?IG4YMzGLL&^ z-HD>dxM3IfyYWW&sRCK{qnXDGcIgVs1R73Fb@=z1YpRGR0R224jd^>a`kl8aKi4}W z0G_hWa&W9VjFXZ#v9#S;3AK7YNRV)U)o>SG1&pmi$WffQlPn54f?0xe5AXkk{ zAVC&Au-~>FJ01@>fgMmns}8c$*A!LU#BK2=3^o9Vr%#_IeH5?Rwbpi`Rwsf0AwxBt zCv{0+Af*|hTPi}ud+#y@4^6dSBTg6q`Yx7=@`Ok&y@k zfW=qg{w6vBLi)pj=0F6Pb&Gjb*c2XLqI1w}-h3HAaH33TP{&rL7;;ub!vJdQ*G-+n z5I{d6z!@=)Bc;{3gWlkh_e*?y z%ozgQcZoXTG||K)@l?zu2mgeTJA}9bzNs76e+a%2hJBOi0Kj%qH^aLL!b+1QZ7lKw zO*!S?@UcjMlW5p=G6!>}N1^cblClOtm8irLm0-84-uu+QPNKLrz9)^CXI2AZke|I1 z5GhIdf(Je7GV6#6>mKe1fM)D{^}{ZhoJbbDPD@8|Y&MTi1GFGNU*xXV##SKo5{Fsn zNnA_xUdQEMm$a?M=B|EmdL5?r{d|7*Tq<7~MiBW(V;AE0VN!2@$xmOPFI)?ORL*Rm zJxcQ4JkI%XIDUZ%`?49-Wet3RF_1O?y`{$@Yh!x~0tAxH%g$hjvVU*cwpcNn+Mqf@ z6N4mdyWIZgNEJ(Qq+5g&*Rr5-biZA_ry8ANh*21m)nAsrOnkk)_c?Pu;n~_d3$3=| z-yKGG&JP2HlCA{f9`Ryqq!*mWDIfMNMFHN<@{l^ja;%`|3$RY$x5X9KsE5Ew=gsLOn3Z%aN3^Z5v8c@?4h}hw36}<{*8Ao(v-Ye);gym+P^8d0^24 znRgy*aS?Y&EhU3062~-^6SD`7mKYi0uxpTJjX;n+Fz4CPT!xT6`k`m3wuU z?3a~@MarNaV0A)~3J&$oVkD8CM4_7kyY>b;{!jSmfz$W4$zjNeZ404^Al~*r8>@b` z)4D1kJwDH!osts!Idrq)dER~WnA)J1QX0yPEPycKV;%}E(R!}=L{lLI9#jT`-YQ!2 zikt0w+26l^-|aFt9rE+1>ZeVVFWifGpP!JTQ%Hmv_~0;Ya2a%9LNm< zqW5+#a(b@Xz+B;oU4{dV89kq#-^BIzqH&=DQ7^?|!W2Mb{uPXiC)Z#*&HuO|$tWXH z8MWkO;}wp9U9JUO1dDc%On3Y8C7^8zsaFpAS%K%C1US1vD6WTWc@iC+2RW8e;+Hn= zIEg<5_aT;`f^p14C)nt}d%2nHIDw@d^{NOSj-L?dqY(kLe$j)+HZE4Ru56?+mo&J5Siu$)CFO4qT9t|2E_ZI0N|?(3*jU^E zSY*w?)KA(;_%JB10O%uub;%pezvE$QQMsD@NfDVx=u{OC>xG~ywrGOTQPs} zB^s2Q2aR<=qUS)(U<}(S*bjb;PB6Ex5?@aFV7M5R9zI8cLPMwYiq#vzceejA(d>}W z>^yBkaxLxt5e_Qd$txAI|eMrLLrO>pQTnZN$N#qfVj5RUWL2&7>EG9O5& z*l7L)TcsQQ#+5s?9G}D4LN-U<#D7qbEa&*&(m(mJio)-@n1I4~F&Lo2B$1kV@s5|U z2IWtj_zO{nWR-{iQG^DNoeqC$h0h^{YOqD2`NucHTC#NpbKa0?6+>plara`b_#p;3 z`wOOG$}`9&NH(GJVz2MQ+RH0kDo`Xy%|yf=^ggH}m-7hHwQoT{Rzf5Awyj&WNup_4 zqUlTnum%{r`_o!@`M0zmgmw25>E(tmlC{KWphj9(a69y5@LrIB;_ z(?{*v)s)m>Up2d?-nBl<)walPmSv9oTUX)O4dspX5dI*r~mXC_kLfh1;a7YUkKit$Ert>D)&W~ZlfCt1X0pGilRJ;elxe^W?Iii5}d(ZbeLwew>GLij{!j(cVVE#@7zVrm9VA~VqbcZJ!DY83c z7jN4RHmWvcc9e;@GT^}aTRM>cIeY?FL1mC4tlxI%N?Nmh4A2(wC$X@yN)h-bT3#$MRqW=18IVwtW#Y!8OO`8~m4FvX4@^}~UOP;unu5J{X7#eNmvzhKgm{p8;UbaZr(i0!3#`ND;l#>H1Cu7fWY-{&0+F=Y+S zXBT!IF|+G-@WH4_ucSmuF)wI_d#(dBLfEu*U-{c__xOvEHm(LQ@q>S9oalsYWifpN6aO}}rU1=6L(7orxm8+Ra7B^r0B)AyeRx&3qMqK% z_uyEmOZOhe4YKA0Fkn#C2rYw(z>tf^vGjAIwy&4hpKkfB92_&i6@Wvc9!u|v_xByu zxLl9J7D&SuAn)tIwK-j#Vsjbjsp;e3xPR{+?vhuyv;!ej%7XaEYZxJolE;L&MNRyY zPs$vm94RlX5)tL)D=3bhRo1`Ox@{V1c)=bgo ziM9JW<+@xKa9WvgFU>ovP$fy8Kc7Nh^b}b*3c)Z{o8ro|QQJL{{+CIhnU#k}31k%h zVFx3s1SvnZMEbVBhG$~LP&6I|E~Ro&^86Ne%dxmGxj||3swkdc(7Mk+NHUuXJ|gO7 z4*#j483$~cvHMy-PoTVcO&?w>K(~>)nUW{CI902E_UVfy(J$jq5E@9&xBiXddfGX4 zfxg814w)>(AM*0Ci>n&HT%uWIqwrhI;{4$k)zb?|6~E-MEZhyhP?Q%3AHTf1w=jG7 z#Z~G5>#by&Xm;$lN^l|MPKXEFASI&@s0Y}x4)KgtID!ONkue`~1i+_HvIHPNxT-_j zs*ZcqP#`!c6&U8cu)pLHi86>*sw>mu`Lk6MY0pLW_GISI*P2@LYRFfJvEl#5=S-7I#1vyP*2q8s3nq!0ji!U zG`ee=&LUA*HCfdeg0~^0IT5dcPR_%i2eB`76tCe>(gOGZ1uz^Z_#6X)8Dky~;uMTy z*Nee~907Qn5fs35T`x)y0qwR+8|=|DDQ6S)H&9WCroO}K0T!Fai=*Iz7G}j&P#;Ekf?%g3NOZ$D_4>OP*9TBkT{K6Svm82RlrVdMK!hP%1U{voa}w> zBS(0grYs?G1lcr0fzWk7G(nnr$#EHIHaG7yhF9Sq3$U`?Pc!K$$LN()L^#PJ!eUYL zdGu(X1msAm3~g}UwK(dAP{oMCQeKwub7aGco{3(Pnm2Y9o|7mBV4Y^R2?8Mqzwi(7 zr1jv;NJR~gJ&(?ZKTu;Dpz40grG1Ccu&eht$|82{Fb^1$B&|#RRDGdUM)lCtc(A!N zEJ}IQpcdS=06$<=%2TIk+n3Q9Tt#?!XfsdU*FfJ`Sj>?Y1W%*>h1D*rF%clYxb+(I z!Gi@Nsg9H8h_TEZ9PuARcxf@VWs-oi?AEo1oSPsf?IJ#*<@ak^lVZuI}6BV;=P3DnUkP>aH4?90tf zB%KQg2u$^A%|(+O4fnz;6esP$a}ZG^y-3o}YMGHnW|M=yjA4yHs5`{O)cIEu9lAmZ zfd~Z9VJV2dxg9fKcjSHoMMXqxLo6ch0!7;a6uj6hjR~X&3$cv&b+EP|xsv88BGW>@ zRK%zvtVa>|ftXlJn;O!Eq=ZDp!+j?Sb+U5xYSKAXE*Ax=z8o`YOixr3ySb-Xy#8a&9*;e^Jnm_PzePYG?$fm@`U5aIq7$6dc|hQn zm@oqv{(YUDm6iQ)s>(}DFAoFeJ_kai1XSnw%a@<~i#Vk2I(*3$ z8hguS~%Wnvkwl?~o8PO`I>Wzv$<9TJBhS0m7s^ z;|SW_`~w5&ynTIjgPq1Nv~_ms>yPBcO3mnrg#q78aNAANqczpY*!fKCm&lJinhM__>9MV1FO%5xCwpsyjN zcs;#fbux~o!6`X*CFLb0N3k!DfYIS2mT?^E!8bQE=u(?>bxm_~Q~Wlvu!AKt_+C%dK>D#xP%<1B7&#g+1Dx zu?kLG&+FRmcB2*I4;V*qM3&N&T_-EMOC+>2y&|szHJKr=uXG?l4(}YSjSF~$_HnI2 zu4a7A;ysOutvfLhA(%aDOxe11>v^EWqT=F_ot_UK@OYKLIsA<)2a@~#qIU%a%DoI_ z*`6OIi{S~dbuWZ#OX46aYq1ErpZNC|v1w#hYY)JceqL5qHly;pO74{JBOOhLejd+Z zY}hC03aEk?!E?B}TG8gNlA4;4^H_|QKO*I;h6y#lmK{>X=)ZrD*ju6TlU8A-@;jcH z3p*9_nyVIqxM#M%2r5Uos*uN%1AP z28Kauvf+LShKbkqV@48{m@VONsW_rdySRlLRTZ{N2oi5AS2N-jVH$DrLLH!fV;i*Y zD#Qhc?8$Ed_wL_Uu(nQx<%e^i!0`iARUWhwV>Or0WM}?CPFyq1nbhMk{`^X<6QYuo zd`ig8?tVmzp_NMsQ=CW|(<=)+BtcpZi=8y_ z*sLXT<3|LXfBsn6B(4kNvT*b2RjVYurZv~DTjz^{63|0YRnNDBML|_H^35Az6muxi zO4@ea+31!(!&a4?eAIIU?^=U)I3y4WT+%yaPwuL?Xe>FDtumvP2hLR-tKn>#Ead&KLo_bflWHQ}xVYGU1^~D*!q$z=Ii~mz?A&{O@Dy zwX;MoSLn6_!Xgw+;b+9SJ-T{&EWEt6+0k*lfTik{b8#=(E#Nan&t*j8Pv}6=>FKJ_ zXV`4|KnKsaSgWh|F-)U7_bA*I*~109iHqj1n>TSXSeI04<@U}A9HwP}CRem7Nrr>h z@DByH_S?-@z>FHDa?Yezz3NSO)=J74{X!kk6Nnj<;&?2Dw(S>WK*%u?_4V~ng>2$y zzdz1p#@Q*Lk*}3+LMIwd`11)0iUZ%l%+7uur7sZGbL4?=gl&U{WW())U0;7pPhZ8s z0)qCVk-@fK*T8jng0$wqU@!_0u4J!?jLzUVbey!XU~Frl$&*vj$mv8dE~VJ6p6i5$ zTh;McD;`+;DiR5hj!({yuj_C)n{v8tU+je>!bx5<%Z6z(PF_@EF#*IY1%L{xs`Gq^dpP|f`jEm) zW)Tq$GEGVPo`65(bOY#=H8XoSs*jpYnJzn)t^e=RcBKU`afPG3P8P^a4@3PDYwaL2 z^M~J7t$K>W!~(S?aZxDSmSGK)AQYX$o3B~F{wSa?FQITI$sR7%fLHjDVrwtVL2=g2 z_l!ZuH-crKZV3Pt=(jrrCWA?ICTf`e^mO?d%2n_rHkQqzklyAAvgi{))GB~wi(>Y) zCtxXBMA87>2g*H=NsytxfxkJ77d%2DIzRtsb%*{GJ^Wsi=}EXE^?2yh%Jwb=Pt4o+ znr%a;?H$JZxB$AiP`c;^Be)M3uZ#H2ErgM+`$J32b1I4fI~-gch**m%8=p2k@m4l`v_ zQ$xe3yB;3A0JKAP2^VB#FX3FOE2f#<2e;zHHq;bk%m^H^1G5w3Q+zS!qV9YSUnjVO z^5#@@{*$%5&E&LL{BS%%mP4_o_~R#Eb>Ki#Rxj+p#G=;EJXQ;Nk5PhD=7H`149{eZ z8hy>`xW-SIC2;UsudgmYCX#e(A+?dK{U6HVy!$0M25zIATq-Nb%AubkZI z)+Vk+dL#RrKo}}bV3$QQMD&wuksppAoCalpQzw*y%abjYtLFp;7NTJ~)|Nj@~ z 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%0A6NSF{ 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 literal 0 HcmV?d00001 diff --git a/incremental_transactions/tpcc/graphs/byname_sql_incremental_constargs_inlined_minimized.rs.png b/incremental_transactions/tpcc/graphs/byname_sql_incremental_constargs_inlined_minimized.rs.png new file mode 100644 index 0000000000000000000000000000000000000000..649577d502b171bb08baa1bda1b904ed45a0b38e GIT binary patch literal 70320 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

|rFh*6o(b$Kb6X9optiX@s+O(*&B8eu z5jm=f`9zB7)u#wYx%7fWDTsDe@-_#D+dUn+zfdl4ycN1@uBz$8FL1?OYl`#F<CsO1ZmP1v+LJkpcTGq7ok9*s> z7G1k$t$LWTz>1}$e7?(a=DNE>4lNjE_Ed3~f=-7F+r|F#)lFxwUcK73q`b0HN9i); z+r7}#ffS;RLSg9$`vsA!4mwi!k=(!8hN@iG98ctkp@aIQ(;lYt9YiJ{b?45VPB*}K zAFu>vu26BU3SZWpbxXV5-MxFa`Qb85tN`hBa8||ctGPRigm3hdF@vm=&LmxQnx(8c zIYu{SbVbkJNPkq)Gp+A1NWWit#sKY{ZO(i4)juw_a;U(4K^88#Uf9C;=n6SyzG}%v z+j`Q{9Dajvu4^}6BB&}p_{EI&`qiyH*)RdD=p+3%Zp!iAwqUYTcIL9X8)$lPBB<^g zfZ7fMv4D#@w0MR1C*a|6D0t~0yR@SU(VuER=MW90{&92J`;aoh0?xMSLn#ZD9a_zf z*mK@VnS0E~Z~&8}+3(oN{_;rwaEIQbFR@9nd^6o!rZxYYZv+?7_E}={oCYHMA1SRV zCxQil#-Plw5Y?5FWAsumbPxe%^PsE+IlGNskIC8Akhjfy1PVnS>;PKngc<;fzJJv@ zAM!TyQzJgVzIgFsstW&JH_t~@B*Aq{KmNt>wom;&ZqL2wio2m3*|N$}Gm0c&mI@;f z=b~tE8{vtQmMsc4xQXXhvuLba>b^nU#u=@Z9$(SP$%G!6#wpe(h-FsX2*Klrq|xCzPW=PGj=pTlcDOMgv_dyF3bNUO?1Pkt4l1kwcv)Lsk(7JDuhLk`Ma7qs~ z_N2i~_A6WZ(XCT)97i%8yzzF^YX`5ITctYp)>a(YWe%o<(&+O2>(Z#fmIlp|h?#^q zBiS%vRRq$&Iwx z=7=_$(z>@#stOf{5WeWB?_bAJAcKmkL-!&;xwZD` z`2ntBgfXJI9Ma7#5W~IV9|)_)?X=%}meXTyrLUaL_sjq-q%n^_3Aw*iYv2zA+O6je zz^~$%q2dA$p7)(()Q3K;42or$r?HNv1rIt%J)uiz1eBV+d`Y)n4r{vpr8mSQ*8jOn zW1V>}g)AH)g-c75pOVqIGRH++TvpfKOT1Boov@587GX67VGdGCKxR?xj34h;db%&s zl3&Ms)y?t~@EZnFuu+Uz2w{ozm+oKDql^%k%8BW_ZqlC{{L(#&$}8pJkfH9-W(c|f zb(KL@_9pC|_~3TIk-R%sdc1}{1gL>TJ!K((Bl5hsr}VR=iB-Brz?!*C#?h(#Tqvi9oTwG9 zy4S**SadP$tUaN}FK5llp^OHC*cJU#@RagP_Tz|c0%gxh{6@yR@)l?EI)>WKANT0V zljKHk)xM`+LheC!F>1=A{d^<@>(s)RZjS?9r_Y=!Q9`>kaoj~<}k zWA4~0aT4Tsm+_OL^(!cglu|^5K!7hh_dotfPJEf{Ys--A1p0^qChT~9MLsa%fbV=z zbH4nX=SUM4Za_rd)PnSy47cSU&u-`a^2(US6ei>u#_i3YzWVyj*0Zl#X@pv-(cx9G zXU?4IYWIuh)`l-TKkcBg%098>TAM%h|HAH*@BOEI%cz?Wt@t`;#G)4So`MDPM?cM$ z^e^;NUaLVGkLmGWqz>d=:o_id-20 AND s_w_id=:w_id AND +s_i_id=ol_i_id AND s_quantity < :threshold; +*/ + + +SELECT d_next_o_id AS o_id_max, d_next_o_id-20 AS o_id_min +FROM district +WHERE d_w_id=:w_id AND d_id=:d_id; + +CREATE VIEW stock_level_district AS +SELECT COUNT(DISTINCT (s_i_id)) AS stock_count +FROM order_line, stock +WHERE ol_w_id=44 AND -- set warehouse here +ol_d_id=43 AND ol_o_id=o_id_min AND s_w_id=44 AND -- set warehouse here +s_i_id=ol_i_id AND s_quantity < 100; -- set threshold here \ No newline at end of file diff --git a/incremental_transactions/tpcc/src/byname_sql.rs b/incremental_transactions/tpcc/src/byname_sql.rs index f300da257..275b8f042 100644 --- a/incremental_transactions/tpcc/src/byname_sql.rs +++ b/incremental_transactions/tpcc/src/byname_sql.rs @@ -6,91 +6,66 @@ #![allow(unused_variables)] #![allow(unused_mut)] #![allow(unconditional_panic)] - #![allow(non_camel_case_types)] -#[cfg(test)] -use hashing::*; +use crate::datatypes::*; +use ::serde::{Deserialize, Serialize}; +use compare::{Compare, Extract}; +use core::cmp::Ordering; +use dbsp::declare_tuples; use dbsp::{ - algebra::{ZSet, MulByRef, F32, F64, Semigroup, SemigroupValue, ZRingValue, - UnimplementedSemigroup, DefaultSemigroup, HasZero, AddByRef, NegByRef, - AddAssignByRef, + algebra::{ + AddAssignByRef, AddByRef, DefaultSemigroup, HasZero, MulByRef, NegByRef, Semigroup, + SemigroupValue, UnimplementedSemigroup, ZRingValue, ZSet, F32, F64, }, circuit::{checkpointer::Checkpoint, Circuit, CircuitConfig, Stream}, + dynamic::{DynData, DynDataTyped}, + indexed_zset, operator::{ - Generator, - FilterMap, - Fold, - time_series::{RelRange, RelOffset, OrdPartitionedIndexedZSet}, - MaxSemigroup, - MinSemigroup, - CmpFunc, + time_series::{OrdPartitionedIndexedZSet, RelOffset, RelRange}, + CmpFunc, FilterMap, Fold, Generator, MaxSemigroup, MinSemigroup, }, - OrdIndexedZSet, OrdZSet, - TypedBox, utils::*, - zset, - indexed_zset, - DBWeight, - DBData, - DBSPHandle, - Error, - Runtime, - NumEntries, - MapHandle, ZSetHandle, OutputHandle, - dynamic::{DynData,DynDataTyped}, + zset, DBData, DBSPHandle, DBWeight, Error, MapHandle, NumEntries, OrdIndexedZSet, OrdZSet, + OutputHandle, Runtime, TypedBox, ZSetHandle, }; use dbsp_adapters::Catalog; +#[cfg(test)] +use hashing::*; +use json::*; use pipeline_types::{deserialize_table_record, serialize_table_record}; +#[cfg(test)] +use readers::*; +use rust_decimal::Decimal; use size_of::*; -use ::serde::{Deserialize,Serialize}; -use compare::{Compare, Extract}; +use sqllib::{ + aggregates::*, array::*, binary::*, casts::*, geopoint::*, interval::*, operators::*, + string::*, timestamp::*, *, +}; +use sqlvalue::*; +#[cfg(test)] +use sqlx::{any::AnyRow, AnyConnection, Row}; use std::{ collections::BTreeMap, convert::identity, - ops::Neg, fmt::{Debug, Formatter, Result as FmtResult}, - path::Path, marker::PhantomData, + ops::Neg, + path::Path, }; -use core::cmp::Ordering; -use rust_decimal::Decimal; -use dbsp::declare_tuples; -use json::*; -use sqllib::{ - *, - array::*, - casts::*, - binary::*, - geopoint::*, - timestamp::*, - interval::*, - string::*, - operators::*, - aggregates::*, -}; -use sqlvalue::*; -#[cfg(test)] -use readers::*; -#[cfg(test)] -use sqlx::{AnyConnection, any::AnyRow, Row}; - - #[derive(Clone)] pub struct Semigroup1(PhantomData<(T0, TS0)>); -impl Semigroup> for Semigroup1 +impl Semigroup> for Semigroup1 where - TS0: Semigroup + TS0: Semigroup, { - fn combine(left: &Tup1, right:&Tup1) -> Tup1 { - Tup1::new( - TS0::combine(&left.0, &right.0), - ) + fn combine(left: &Tup1, right: &Tup1) -> Tup1 { + Tup1::new(TS0::combine(&left.0, &right.0)) } } -declare_tuples! { +/* declare_tuples! { Tup21, Tup22, Tup14, @@ -104,16 +79,120 @@ sqlvalue::to_sql_row_impl! { Tup21, Tup22, Tup14, -} - - -pub fn circuit(cconf: CircuitConfig) -> Result<(DBSPHandle, (ZSetHandle, Option, Option, Option, Option, Option, Option, Option>>, ZSetHandle, Option>>, ZSetHandle, Option, Option, Option, Option, Option, Option, Option, Option>>, ZSetHandle, Option, Option>>, ZSetHandle, Option, Option>>, ZSetHandle, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>, ZSetHandle, Option, Option, Option, Option, Option, Option, Option, Option, Option>>, OutputHandle>>>>, OutputHandle, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>>, )), Error> { +} */ +pub fn circuit( + cconf: CircuitConfig, +) -> Result< + ( + DBSPHandle, + ( + ZSetHandle< + Tup8< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option>>, + ZSetHandle< + Tup9< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option, Option>>, + ZSetHandle, Option, Option>>, + ZSetHandle< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle< + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + OutputHandle>>>>, + OutputHandle< + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + >, + ), + ), + Error, +> { let (circuit, streams) = Runtime::init_circuit(cconf, |circuit| { // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) // DBSPSourceMultisetOperator 49 // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) - let (stream49, handle49) = circuit.add_input_zset::, Option, Option, Option, Option, Option, Option, Option>>(); + let (stream49, handle49) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); // CREATE TABLE `WAREHOUSE` (`W_ID` INTEGER PRIMARY KEY, `W_YTD` DECIMAL(12, 2)) // DBSPSourceMultisetOperator 67 @@ -123,98 +202,454 @@ pub fn circuit(cconf: CircuitConfig) -> Result<(DBSPHandle, (ZSetHandle, Option, Option, Option, Option, Option, Option, Option, Option>>(); + let (stream120, handle120) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) // DBSPSourceMultisetOperator 143 // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) - let (stream143, handle143) = circuit.add_input_zset::, Option, Option>>(); + let (stream143, handle143) = + circuit.add_input_zset::, Option, Option>>(); // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) // DBSPSourceMultisetOperator 166 // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) - let (stream166, handle166) = circuit.add_input_zset::, Option, Option>>(); + let (stream166, handle166) = + circuit.add_input_zset::, Option, Option>>(); // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) // DBSPSourceMultisetOperator 279 // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) - let (stream279, handle279) = circuit.add_input_zset::, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>(); + let (stream279, handle279) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) // DBSPSourceMultisetOperator 337 // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) - let (stream337, handle337) = circuit.add_input_zset::, Option, Option, Option, Option, Option, Option, Option, Option, Option>>(); + let (stream337, handle337) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); // rel#83:LogicalJoin.(left=LogicalTableScan#1,right=LogicalTableScan#3,condition=AND(=($5, $27), =($1, $26), =($2, $25)),joinType=inner) // DBSPFilterOperator 405 - let stream405: Stream<_, WSet, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream279.filter(move |t_1: &Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - bool { - (!or_b_b(or_b_b((*t_1).1.is_none(), (*t_1).2.is_none()), (*t_1).5.is_none())) - }); + let stream405: Stream< + _, + WSet< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.filter( + move |t_1: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> bool { + (!or_b_b( + or_b_b((*t_1).1.is_none(), (*t_1).2.is_none()), + (*t_1).5.is_none(), + )) + }, + ); // rel#83:LogicalJoin.(left=LogicalTableScan#1,right=LogicalTableScan#3,condition=AND(=($5, $27), =($1, $26), =($2, $25)),joinType=inner) // DBSPFilterOperator 430 - let stream430: Stream<_, WSet, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream337.filter(move |t_2: &Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - bool { - (!or_b_b(or_b_b((*t_2).4.is_none(), (*t_2).5.is_none()), (*t_2).6.is_none())) - }); + let stream430: Stream< + _, + WSet< + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream337.filter( + move |t_2: &Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> bool { + (!or_b_b( + or_b_b((*t_2).4.is_none(), (*t_2).5.is_none()), + (*t_2).6.is_none(), + )) + }, + ); // rel#83:LogicalJoin.(left=LogicalTableScan#1,right=LogicalTableScan#3,condition=AND(=($5, $27), =($1, $26), =($2, $25)),joinType=inner) // DBSPMapIndexOperator 672 - let stream672: Stream<_, IndexedWSet, Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream405.map_index(move |t_3: &Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - (Tup3, Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, ) { - (Tup3::new(cast_to_s_sN((*t_3).5.clone(), 16, false), cast_to_i32_i32N((*t_3).1), cast_to_i32_i32N((*t_3).2)), Tup21::new((*t_3).0, (*t_3).1, (*t_3).2, (*t_3).3.clone(), (*t_3).4.clone(), (*t_3).5.clone(), (*t_3).6.clone(), (*t_3).7.clone(), (*t_3).8.clone(), (*t_3).9.clone(), (*t_3).10.clone(), (*t_3).11.clone(), (*t_3).12, (*t_3).13.clone(), (*t_3).14.clone(), (*t_3).15.clone(), (*t_3).16.clone(), (*t_3).17.clone(), (*t_3).18, (*t_3).19, (*t_3).20.clone()), ) - }); + let stream672: Stream< + _, + IndexedWSet< + Tup3, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream405.map_index( + move |t_3: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup3, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup3::new( + cast_to_s_sN((*t_3).5.clone(), 16, false), + cast_to_i32_i32N((*t_3).1), + cast_to_i32_i32N((*t_3).2), + ), + Tup21::new( + (*t_3).0, + (*t_3).1, + (*t_3).2, + (*t_3).3.clone(), + (*t_3).4.clone(), + (*t_3).5.clone(), + (*t_3).6.clone(), + (*t_3).7.clone(), + (*t_3).8.clone(), + (*t_3).9.clone(), + (*t_3).10.clone(), + (*t_3).11.clone(), + (*t_3).12, + (*t_3).13.clone(), + (*t_3).14.clone(), + (*t_3).15.clone(), + (*t_3).16.clone(), + (*t_3).17.clone(), + (*t_3).18, + (*t_3).19, + (*t_3).20.clone(), + ), + ) + }, + ); // rel#83:LogicalJoin.(left=LogicalTableScan#1,right=LogicalTableScan#3,condition=AND(=($5, $27), =($1, $26), =($2, $25)),joinType=inner) // DBSPMapIndexOperator 717 - let stream717: Stream<_, IndexedWSet, Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream430.map_index(move |t_4: &Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - (Tup3, Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, ) { - (Tup3::new(cast_to_s_sN((*t_4).6.clone(), 16, false), cast_to_i32_i32N((*t_4).5), cast_to_i32_i32N((*t_4).4)), Tup10::new((*t_4).0, (*t_4).1, (*t_4).2, (*t_4).3, (*t_4).4, (*t_4).5, (*t_4).6.clone(), (*t_4).7.clone(), (*t_4).8, (*t_4).9), ) - }); + let stream717: Stream< + _, + IndexedWSet< + Tup3, + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream430.map_index( + move |t_4: &Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup3, + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup3::new( + cast_to_s_sN((*t_4).6.clone(), 16, false), + cast_to_i32_i32N((*t_4).5), + cast_to_i32_i32N((*t_4).4), + ), + Tup10::new( + (*t_4).0, + (*t_4).1, + (*t_4).2, + (*t_4).3, + (*t_4).4, + (*t_4).5, + (*t_4).6.clone(), + (*t_4).7.clone(), + (*t_4).8, + (*t_4).9, + ), + ) + }, + ); // rel#83:LogicalJoin.(left=LogicalTableScan#1,right=LogicalTableScan#3,condition=AND(=($5, $27), =($1, $26), =($2, $25)),joinType=inner) // DBSPStreamJoinOperator 3078(801) - let stream3078: Stream<_, WSet, Option>>> = stream672.stream_join(&stream717, move |t_5: &Tup3, t_3: &Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, t_4: &Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - Tup2, Option> { - Tup2::new(plus_i32N_i32N(plus_i32N_i32N((*t_3).0, (*t_3).2), (*t_3).1), (*t_3).3.clone().clone()) - }); + let stream3078: Stream<_, WSet, Option>>> = stream672.stream_join( + &stream717, + move |t_5: &Tup3, + t_3: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + t_4: &Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> Tup2, Option> { + Tup2::new( + plus_i32N_i32N(plus_i32N_i32N((*t_3).0, (*t_3).2), (*t_3).1), + (*t_3).3.clone().clone(), + ) + }, + ); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPMapIndexOperator 3080(862) - let stream3080: Stream<_, IndexedWSet, Option>>> = stream3078.map_index(move |t_8: &Tup2, Option>, | -> + let stream3080: Stream<_, IndexedWSet, Option>>> = stream3078.map_index(move |t_8: &Tup2, Option>, | -> (Tup0, Tup2, Option>, ) { (Tup0::new(), Tup2::new((*t_8).0, (*t_8).1.clone()), ) }); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPStreamAggregateOperator 14148(867) - let stream14148: Stream<_, IndexedWSet>>>> = stream3080.stream_aggregate(Fold::<_, _, Semigroup1>, ConcatSemigroup>>>, _, _>::with_output(Tup1::new(vec!( - )), move |t_32: &mut Tup1>>, t_9: &Tup2, Option>, t_34: Weight, | { - (*t_32) = Tup1::new(array_agg(&mut (*t_32).0, (*t_9).0, t_34, false)) - }, move |t_33: Tup1>>, | -> - Tup1>> { - Tup1::new(t_33.0) - })); + let stream14148: Stream<_, IndexedWSet>>>> = + stream3080.stream_aggregate(Fold::< + _, + _, + Semigroup1>, ConcatSemigroup>>>, + _, + _, + >::with_output( + Tup1::new(vec![]), + move |t_32: &mut Tup1>>, + t_9: &Tup2, Option>, + t_34: Weight| { + (*t_32) = Tup1::new(array_agg(&mut (*t_32).0, (*t_9).0, t_34, false)) + }, + move |t_33: Tup1>>| -> Tup1>> { Tup1::new(t_33.0) }, + )); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPMapOperator 14150(884) - let stream14150: Stream<_, WSet>>>> = stream14148.map(move |t_11: (&Tup0, &Tup1>>, ), | -> - Tup1>> { - Tup1::new((*t_11.1).0.clone()) - }); + let stream14150: Stream<_, WSet>>>> = stream14148.map( + move |t_11: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new((*t_11.1).0.clone()) + }, + ); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPMapOperator 14155(897) - let stream14155: Stream<_, WSet>>>> = stream14148.map(move |t_11: (&Tup0, &Tup1>>, ), | -> - Tup1>> { - Tup1::new(vec!( - )) - }); + let stream14155: Stream<_, WSet>>>> = stream14148.map( + move |t_11: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new(vec![]) + }, + ); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPNegateOperator 14160(900) let stream14160: Stream<_, WSet>>>> = stream14155.neg(); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) - let stream906 = circuit.add_source(Generator::new(|| if Runtime::worker_index() == 0 {zset!( - Tup1::new(vec!( - )) => 1, - )} else {zset!( - )})); + let stream906 = circuit.add_source(Generator::new(|| { + if Runtime::worker_index() == 0 { + zset!( + Tup1::new(vec!( + )) => 1, + ) + } else { + zset!() + } + })); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPSumOperator 14162(910) - let stream14162: Stream<_, WSet>>>> = stream906.sum([&stream14160, &stream14150]); + let stream14162: Stream<_, WSet>>>> = + stream906.sum([&stream14160, &stream14150]); // CREATE VIEW `CUST_AGG` AS // SELECT ARRAY_AGG(`EXPR$0`.`C_ID` + `EXPR$0`.`C_W_ID` + `EXPR$0`.`C_D_ID` ORDER BY `EXPR$0`.`C_FIRST`) AS `CUST_ARRAY` // FROM (SELECT `C`.`C_ID`, `C`.`C_W_ID`, `C`.`C_D_ID`, `C`.`C_FIRST` @@ -227,46 +662,566 @@ pub fn circuit(cconf: CircuitConfig) -> Result<(DBSPHandle, (ZSetHandle, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream279.map_index(move |t_13: &Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - (Tup0, Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, ) { - (Tup0::new(), Tup21::new((*t_13).0, (*t_13).1, (*t_13).2, (*t_13).3.clone(), (*t_13).4.clone(), (*t_13).5.clone(), (*t_13).6.clone(), (*t_13).7.clone(), (*t_13).8.clone(), (*t_13).9.clone(), (*t_13).10.clone(), (*t_13).11.clone(), (*t_13).12, (*t_13).13.clone(), (*t_13).14.clone(), (*t_13).15.clone(), (*t_13).16.clone(), (*t_13).17.clone(), (*t_13).18, (*t_13).19, (*t_13).20.clone()), ) - }); + let stream1201: Stream< + _, + IndexedWSet< + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.map_index( + move |t_13: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup0::new(), + Tup21::new( + (*t_13).0, + (*t_13).1, + (*t_13).2, + (*t_13).3.clone(), + (*t_13).4.clone(), + (*t_13).5.clone(), + (*t_13).6.clone(), + (*t_13).7.clone(), + (*t_13).8.clone(), + (*t_13).9.clone(), + (*t_13).10.clone(), + (*t_13).11.clone(), + (*t_13).12, + (*t_13).13.clone(), + (*t_13).14.clone(), + (*t_13).15.clone(), + (*t_13).16.clone(), + (*t_13).17.clone(), + (*t_13).18, + (*t_13).19, + (*t_13).20.clone(), + ), + ) + }, + ); // rel#186:LogicalJoin.(left=LogicalTableScan#90,right=LogicalTableScan#92,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) // DBSPMapIndexOperator 14166(1218) - let stream14166: Stream<_, IndexedWSet>>>> = stream14162.map_index(move |t_14: &Tup1>>, | -> - (Tup0, Tup1>>, ) { - (Tup0::new(), Tup1::new((*t_14).0.clone()), ) - }); + let stream14166: Stream<_, IndexedWSet>>>> = stream14162 + .map_index( + move |t_14: &Tup1>>| -> (Tup0, Tup1>>) { + (Tup0::new(), Tup1::new((*t_14).0.clone())) + }, + ); // rel#186:LogicalJoin.(left=LogicalTableScan#90,right=LogicalTableScan#92,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) // DBSPStreamJoinOperator 14170(1228) - let stream14170: Stream<_, WSet, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>>> = stream1201.stream_join(&stream14166, move |t_16: &Tup0, t_13: &Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, t_14: &Tup1>>, | -> - Tup22, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>> { - Tup22::new((*t_13).0, (*t_13).1, (*t_13).2, (*t_13).3.clone(), (*t_13).4.clone(), (*t_13).5.clone(), (*t_13).6.clone(), (*t_13).7.clone(), (*t_13).8.clone(), (*t_13).9.clone(), (*t_13).10.clone(), (*t_13).11.clone(), (*t_13).12, (*t_13).13.clone(), (*t_13).14.clone(), (*t_13).15.clone(), (*t_13).16.clone(), (*t_13).17.clone(), (*t_13).18, (*t_13).19, (*t_13).20.clone(), (*t_14).0.clone()) - }); + let stream14170: Stream< + _, + WSet< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream1201.stream_join( + &stream14166, + move |t_16: &Tup0, + t_13: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + t_14: &Tup1>>| + -> Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + > { + Tup22::new( + (*t_13).0, + (*t_13).1, + (*t_13).2, + (*t_13).3.clone(), + (*t_13).4.clone(), + (*t_13).5.clone(), + (*t_13).6.clone(), + (*t_13).7.clone(), + (*t_13).8.clone(), + (*t_13).9.clone(), + (*t_13).10.clone(), + (*t_13).11.clone(), + (*t_13).12, + (*t_13).13.clone(), + (*t_13).14.clone(), + (*t_13).15.clone(), + (*t_13).16.clone(), + (*t_13).17.clone(), + (*t_13).18, + (*t_13).19, + (*t_13).20.clone(), + (*t_14).0.clone(), + ) + }, + ); // rel#186:LogicalJoin.(left=LogicalTableScan#90,right=LogicalTableScan#92,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) // DBSPFilterOperator 14175(1230) - let stream14175: Stream<_, WSet, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>>> = stream14170.filter(move |t_15: &Tup22, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>, | -> - bool { - wrap_bool(eq_i32N_i32N(plus_i32N_i32N(plus_i32N_i32N((*t_15).0, (*t_15).2), (*t_15).1), index__N_((*t_15).21.clone(), cast_to_u_i32(plus_i32_i32(div_i32_i32(cardinality((*t_15).21.clone()), 2i32), 1i32)) - 1))) - }); + let stream14175: Stream< + _, + WSet< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream14170.filter( + move |t_15: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >| + -> bool { + wrap_bool(eq_i32N_i32N( + plus_i32N_i32N(plus_i32N_i32N((*t_15).0, (*t_15).2), (*t_15).1), + index__N_( + (*t_15).21.clone(), + cast_to_u_i32(plus_i32_i32( + div_i32_i32(cardinality((*t_15).21.clone()), 2i32), + 1i32, + )) - 1, + ), + )) + }, + ); // rel#189:LogicalJoin.(left=LogicalJoin#186,right=LogicalTableScan#96,condition=true,joinType=inner) // DBSPMapIndexOperator 14178(1498) - let stream14178: Stream<_, IndexedWSet, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>>> = stream14175.map_index(move |t_18: &Tup22, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>, | -> - (Tup0, Tup22, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>, ) { - (Tup0::new(), Tup22::new((*t_18).0, (*t_18).1, (*t_18).2, (*t_18).3.clone(), (*t_18).4.clone(), (*t_18).5.clone(), (*t_18).6.clone(), (*t_18).7.clone(), (*t_18).8.clone(), (*t_18).9.clone(), (*t_18).10.clone(), (*t_18).11.clone(), (*t_18).12, (*t_18).13.clone(), (*t_18).14.clone(), (*t_18).15.clone(), (*t_18).16.clone(), (*t_18).17.clone(), (*t_18).18, (*t_18).19, (*t_18).20.clone(), (*t_18).21.clone()), ) - }); + let stream14178: Stream< + _, + IndexedWSet< + Tup0, + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream14175.map_index( + move |t_18: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >| + -> ( + Tup0, + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + ) { + ( + Tup0::new(), + Tup22::new( + (*t_18).0, + (*t_18).1, + (*t_18).2, + (*t_18).3.clone(), + (*t_18).4.clone(), + (*t_18).5.clone(), + (*t_18).6.clone(), + (*t_18).7.clone(), + (*t_18).8.clone(), + (*t_18).9.clone(), + (*t_18).10.clone(), + (*t_18).11.clone(), + (*t_18).12, + (*t_18).13.clone(), + (*t_18).14.clone(), + (*t_18).15.clone(), + (*t_18).16.clone(), + (*t_18).17.clone(), + (*t_18).18, + (*t_18).19, + (*t_18).20.clone(), + (*t_18).21.clone(), + ), + ) + }, + ); // rel#189:LogicalJoin.(left=LogicalJoin#186,right=LogicalTableScan#96,condition=true,joinType=inner) // DBSPMapIndexOperator 1543 - let stream1543: Stream<_, IndexedWSet, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream337.map_index(move |t_19: &Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - (Tup0, Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, ) { - (Tup0::new(), Tup10::new((*t_19).0, (*t_19).1, (*t_19).2, (*t_19).3, (*t_19).4, (*t_19).5, (*t_19).6.clone(), (*t_19).7.clone(), (*t_19).8, (*t_19).9), ) - }); + let stream1543: Stream< + _, + IndexedWSet< + Tup0, + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream337.map_index( + move |t_19: &Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup0, + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup0::new(), + Tup10::new( + (*t_19).0, + (*t_19).1, + (*t_19).2, + (*t_19).3, + (*t_19).4, + (*t_19).5, + (*t_19).6.clone(), + (*t_19).7.clone(), + (*t_19).8, + (*t_19).9, + ), + ) + }, + ); // rel#189:LogicalJoin.(left=LogicalJoin#186,right=LogicalTableScan#96,condition=true,joinType=inner) // DBSPStreamJoinOperator 14182(1668) - let stream14182: Stream<_, WSet, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream14178.stream_join(&stream1543, move |t_21: &Tup0, t_18: &Tup22, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>, t_19: &Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - Tup14, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option> { - Tup14::new((*t_18).3.clone().clone(), (*t_18).4.clone().clone(), (*t_18).0, (*t_18).6.clone().clone(), (*t_18).7.clone().clone(), (*t_18).8.clone().clone(), (*t_18).9.clone().clone(), (*t_18).10.clone().clone(), (*t_18).11.clone().clone(), (*t_18).13.clone().clone(), (*t_18).14.clone().clone(), (*t_18).15.clone().clone(), (*t_18).16.clone().clone(), (*t_18).12) - }); + let stream14182: Stream< + _, + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream14178.stream_join( + &stream1543, + move |t_21: &Tup0, + t_18: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + t_19: &Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + > { + Tup14::new( + (*t_18).3.clone().clone(), + (*t_18).4.clone().clone(), + (*t_18).0, + (*t_18).6.clone().clone(), + (*t_18).7.clone().clone(), + (*t_18).8.clone().clone(), + (*t_18).9.clone().clone(), + (*t_18).10.clone().clone(), + (*t_18).11.clone().clone(), + (*t_18).13.clone().clone(), + (*t_18).14.clone().clone(), + (*t_18).15.clone().clone(), + (*t_18).16.clone().clone(), + (*t_18).12, + ) + }, + ); // CREATE VIEW `CUST_BYNAME` AS // SELECT `C`.`C_FIRST`, `C`.`C_MIDDLE`, `C`.`C_ID`, `C`.`C_STREET_1`, `C`.`C_STREET_2`, `C`.`C_CITY`, `C`.`C_STATE`, `C`.`C_ZIP`, `C`.`C_PHONE`, `C`.`C_CREDIT`, `C`.`C_CREDIT_LIM`, `C`.`C_DISCOUNT`, `C`.`C_BALANCE`, `C`.`C_SINCE` // FROM `schema`.`CUSTOMER` AS `C`, @@ -276,9 +1231,17 @@ pub fn circuit(cconf: CircuitConfig) -> Result<(DBSPHandle, (ZSetHandle(PhantomData<(T0, TS0)>); + +impl Semigroup> for Semigroup1 +where + TS0: Semigroup, +{ + fn combine(left: &Tup1, right: &Tup1) -> Tup1 { + Tup1::new(TS0::combine(&left.0, &right.0)) + } +} +/* declare_tuples! { + Tup21, + Tup22, + Tup14, +} + +pipeline_types::deserialize_without_context!(Tup21, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20); +pipeline_types::deserialize_without_context!(Tup22, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21); +pipeline_types::deserialize_without_context!(Tup14, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13); + +sqlvalue::to_sql_row_impl! { + Tup21, + Tup22, + Tup14, +} */ + +pub fn circuit( + cconf: CircuitConfig, +) -> Result< + ( + DBSPHandle, + ( + ZSetHandle< + Tup8< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option>>, + ZSetHandle< + Tup9< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option, Option>>, + ZSetHandle, Option, Option>>, + ZSetHandle< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle< + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + OutputHandle>>>>, + OutputHandle< + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + >, + ), + ), + Error, +> { + let (circuit, streams) = Runtime::init_circuit(cconf, |circuit| { + // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) + // DBSPSourceMultisetOperator 49 + // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) + let (stream49, handle49) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `WAREHOUSE` (`W_ID` INTEGER PRIMARY KEY, `W_YTD` DECIMAL(12, 2)) + // DBSPSourceMultisetOperator 67 + // CREATE TABLE `WAREHOUSE` (`W_ID` INTEGER PRIMARY KEY, `W_YTD` DECIMAL(12, 2)) + let (stream67, handle67) = circuit.add_input_zset::, Option>>(); + + // CREATE TABLE `DISTRICT_STATIC` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NAME` VARCHAR(10), `D_STREET_1` VARCHAR(20), `D_STREET_2` VARCHAR(20), `D_CITY` VARCHAR(20), `D_STATE` CHAR(2), `D_ZIP` CHAR(9), `D_TAX` DECIMAL(4, 4), PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 120 + // CREATE TABLE `DISTRICT_STATIC` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NAME` VARCHAR(10), `D_STREET_1` VARCHAR(20), `D_STREET_2` VARCHAR(20), `D_CITY` VARCHAR(20), `D_STATE` CHAR(2), `D_ZIP` CHAR(9), `D_TAX` DECIMAL(4, 4), PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream120, handle120) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 143 + // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream143, handle143) = + circuit.add_input_zset::, Option, Option>>(); + + // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 166 + // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream166, handle166) = + circuit.add_input_zset::, Option, Option>>(); + + // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) + // DBSPSourceMultisetOperator 279 + // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) + let (stream279, handle279) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) + // DBSPSourceMultisetOperator 337 + // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) + let (stream337, handle337) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // rel#60:LogicalFilter.(input=LogicalTableScan#1,condition=AND(=(CAST($5):VARCHAR(20), 'lastname'), =($1, 43), =($2, 44))) + // DBSPFilterOperator 416 + let stream416: Stream< + _, + WSet< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.filter( + move |t_1: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> bool { + wrap_bool(and_bN_bN( + and_bN_bN( + eq_sN_s( + cast_to_sN_sN((*t_1).5.clone(), 20, false), + String::from("lastname"), + ), + eq_i32N_i32((*t_1).1, 43i32), + ), + eq_i32N_i32((*t_1).2, 44i32), + )) + }, + ); + // rel#62:LogicalProject.(input=LogicalFilter#60,exprs=[+(+($0, 44), 43), $3]) + // DBSPMapOperator 475 + let stream475: Stream<_, WSet, Option>>> = stream416.map( + move |t_2: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> Tup2, Option> { + Tup2::new( + plus_i32N_i32(plus_i32N_i32((*t_2).0, 44i32), 43i32), + (*t_2).3.clone(), + ) + }, + ); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapIndexOperator 536 + let stream536: Stream<_, IndexedWSet, Option>>> = stream475.map_index(move |t_3: &Tup2, Option>, | -> + (Tup0, Tup2, Option>, ) { + (Tup0::new(), Tup2::new((*t_3).0, (*t_3).1.clone()), ) + }); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPStreamAggregateOperator 5043(541) + let stream5043: Stream<_, IndexedWSet>>>> = + stream536.stream_aggregate(Fold::< + _, + _, + Semigroup1>, ConcatSemigroup>>>, + _, + _, + >::with_output( + Tup1::new(vec![]), + move |t_22: &mut Tup1>>, + t_4: &Tup2, Option>, + t_24: Weight| { + (*t_22) = Tup1::new(array_agg(&mut (*t_22).0, (*t_4).0, t_24, false)) + }, + move |t_23: Tup1>>| -> Tup1>> { Tup1::new(t_23.0) }, + )); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapOperator 5045(558) + let stream5045: Stream<_, WSet>>>> = stream5043.map( + move |t_6: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new((*t_6.1).0.clone()) + }, + ); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapOperator 5050(571) + let stream5050: Stream<_, WSet>>>> = stream5043.map( + move |t_6: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new(vec![]) + }, + ); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPNegateOperator 5055(574) + let stream5055: Stream<_, WSet>>>> = stream5050.neg(); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + let stream580 = circuit.add_source(Generator::new(|| { + if Runtime::worker_index() == 0 { + zset!( + Tup1::new(vec!( + )) => 1, + ) + } else { + zset!() + } + })); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPSumOperator 5057(584) + let stream5057: Stream<_, WSet>>>> = + stream580.sum([&stream5055, &stream5045]); + // CREATE VIEW `CUST_AGG` AS + // SELECT ARRAY_AGG(`EXPR$0`.`C_ID` + `EXPR$0`.`C_W_ID` + `EXPR$0`.`C_D_ID` ORDER BY `EXPR$0`.`C_FIRST`) AS `CUST_ARRAY` + // FROM (SELECT `C`.`C_ID`, `C`.`C_W_ID`, `C`.`C_D_ID`, `C`.`C_FIRST` + // FROM `schema`.`CUSTOMER` AS `C` + // WHERE `C`.`C_LAST` = 'lastname' AND `C`.`C_D_ID` = 43 AND `C`.`C_W_ID` = 44 + // ORDER BY `C_FIRST`) AS `EXPR$0` + // DBSPSinkOperator 5059(598) + let handle5059 = stream5057.output(); + + // rel#132:LogicalJoin.(left=LogicalTableScan#67,right=LogicalTableScan#69,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPMapIndexOperator 875 + let stream875: Stream< + _, + IndexedWSet< + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.map_index( + move |t_8: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup0::new(), + Tup21::new( + (*t_8).0, + (*t_8).1, + (*t_8).2, + (*t_8).3.clone(), + (*t_8).4.clone(), + (*t_8).5.clone(), + (*t_8).6.clone(), + (*t_8).7.clone(), + (*t_8).8.clone(), + (*t_8).9.clone(), + (*t_8).10.clone(), + (*t_8).11.clone(), + (*t_8).12, + (*t_8).13.clone(), + (*t_8).14.clone(), + (*t_8).15.clone(), + (*t_8).16.clone(), + (*t_8).17.clone(), + (*t_8).18, + (*t_8).19, + (*t_8).20.clone(), + ), + ) + }, + ); + // rel#132:LogicalJoin.(left=LogicalTableScan#67,right=LogicalTableScan#69,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPMapIndexOperator 5061(892) + let stream5061: Stream<_, IndexedWSet>>>> = stream5057 + .map_index( + move |t_9: &Tup1>>| -> (Tup0, Tup1>>) { + (Tup0::new(), Tup1::new((*t_9).0.clone())) + }, + ); + // rel#132:LogicalJoin.(left=LogicalTableScan#67,right=LogicalTableScan#69,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPStreamJoinOperator 5065(902) + let stream5065: Stream< + _, + WSet< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream875.stream_join( + &stream5061, + move |t_11: &Tup0, + t_8: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + t_9: &Tup1>>| + -> Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + > { + Tup22::new( + (*t_8).0, + (*t_8).1, + (*t_8).2, + (*t_8).3.clone(), + (*t_8).4.clone(), + (*t_8).5.clone(), + (*t_8).6.clone(), + (*t_8).7.clone(), + (*t_8).8.clone(), + (*t_8).9.clone(), + (*t_8).10.clone(), + (*t_8).11.clone(), + (*t_8).12, + (*t_8).13.clone(), + (*t_8).14.clone(), + (*t_8).15.clone(), + (*t_8).16.clone(), + (*t_8).17.clone(), + (*t_8).18, + (*t_8).19, + (*t_8).20.clone(), + (*t_9).0.clone(), + ) + }, + ); + // rel#132:LogicalJoin.(left=LogicalTableScan#67,right=LogicalTableScan#69,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPFilterOperator 5070(904) + let stream5070: Stream< + _, + WSet< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream5065.filter( + move |t_10: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >| + -> bool { + wrap_bool(eq_i32N_i32N( + plus_i32N_i32N(plus_i32N_i32N((*t_10).0, (*t_10).2), (*t_10).1), + index__N_( + (*t_10).21.clone(), + cast_to_u_i32(plus_i32_i32( + div_i32_i32(cardinality((*t_10).21.clone()), 2i32), + 1i32, + )) - 1, + ), + )) + }, + ); + // rel#134:LogicalProject.(input=LogicalJoin#132,exprs=[$3, $4, $0, $6, $7, $8, $9, $10, $11, $13, $14, $15, $16, $12]) + // DBSPMapOperator 5073(1010) + let stream5073: Stream< + _, + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream5070.map( + move |t_13: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >| + -> Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + > { + Tup14::new( + (*t_13).3.clone(), + (*t_13).4.clone(), + (*t_13).0, + (*t_13).6.clone(), + (*t_13).7.clone(), + (*t_13).8.clone(), + (*t_13).9.clone(), + (*t_13).10.clone(), + (*t_13).11.clone(), + (*t_13).13.clone(), + (*t_13).14.clone(), + (*t_13).15.clone(), + (*t_13).16.clone(), + (*t_13).12, + ) + }, + ); + // CREATE VIEW `CUST_BYNAME` AS + // SELECT `C`.`C_FIRST`, `C`.`C_MIDDLE`, `C`.`C_ID`, `C`.`C_STREET_1`, `C`.`C_STREET_2`, `C`.`C_CITY`, `C`.`C_STATE`, `C`.`C_ZIP`, `C`.`C_PHONE`, `C`.`C_CREDIT`, `C`.`C_CREDIT_LIM`, `C`.`C_DISCOUNT`, `C`.`C_BALANCE`, `C`.`C_SINCE` + // FROM `schema`.`CUSTOMER` AS `C`, + // `schema`.`CUST_AGG` AS `A` + // WHERE `C`.`C_ID` + `C`.`C_W_ID` + `C`.`C_D_ID` = `A`.`CUST_ARRAY`[ARRAY_LENGTH(`A`.`CUST_ARRAY`) / 2 + 1] + // DBSPSinkOperator 5076(1050) + let handle5076 = stream5073.output(); + + Ok(( + handle49, handle67, handle120, handle143, handle166, handle279, handle337, handle5059, + handle5076, + )) + })?; + Ok((circuit, streams)) +} diff --git a/incremental_transactions/tpcc/src/byname_sql_constargs_inlined.rs b/incremental_transactions/tpcc/src/byname_sql_constargs_inlined.rs new file mode 100644 index 000000000..11d221381 --- /dev/null +++ b/incremental_transactions/tpcc/src/byname_sql_constargs_inlined.rs @@ -0,0 +1,815 @@ +// Automatically-generated file +#![allow(dead_code)] +#![allow(non_snake_case)] +#![allow(unused_imports)] +#![allow(unused_parens)] +#![allow(unused_variables)] +#![allow(unused_mut)] +#![allow(unconditional_panic)] +#![allow(non_camel_case_types)] + +use crate::datatypes::*; +use ::serde::{Deserialize, Serialize}; +use compare::{Compare, Extract}; +use core::cmp::Ordering; +use dbsp::declare_tuples; +use dbsp::{ + algebra::{ + AddAssignByRef, AddByRef, DefaultSemigroup, HasZero, MulByRef, NegByRef, Semigroup, + SemigroupValue, UnimplementedSemigroup, ZRingValue, ZSet, F32, F64, + }, + circuit::{checkpointer::Checkpoint, Circuit, CircuitConfig, Stream}, + dynamic::{DynData, DynDataTyped}, + indexed_zset, + operator::{ + time_series::{OrdPartitionedIndexedZSet, RelOffset, RelRange}, + CmpFunc, FilterMap, Fold, Generator, MaxSemigroup, MinSemigroup, + }, + utils::*, + zset, DBData, DBSPHandle, DBWeight, Error, MapHandle, NumEntries, OrdIndexedZSet, OrdZSet, + OutputHandle, Runtime, TypedBox, ZSetHandle, +}; +use dbsp_adapters::Catalog; +#[cfg(test)] +use hashing::*; +use json::*; +use pipeline_types::{deserialize_table_record, serialize_table_record}; +#[cfg(test)] +use readers::*; +use rust_decimal::Decimal; +use size_of::*; +use sqllib::{ + aggregates::*, array::*, binary::*, casts::*, geopoint::*, interval::*, operators::*, + string::*, timestamp::*, *, +}; +use sqlvalue::*; +#[cfg(test)] +use sqlx::{any::AnyRow, AnyConnection, Row}; +use std::{ + collections::BTreeMap, + convert::identity, + fmt::{Debug, Formatter, Result as FmtResult}, + marker::PhantomData, + ops::Neg, + path::Path, +}; + +#[derive(Clone)] +pub struct Semigroup1(PhantomData<(T0, TS0)>); + +impl Semigroup> for Semigroup1 +where + TS0: Semigroup, +{ + fn combine(left: &Tup1, right: &Tup1) -> Tup1 { + Tup1::new(TS0::combine(&left.0, &right.0)) + } +} +/* declare_tuples! { + Tup21, + Tup22, + Tup14, +} + +pipeline_types::deserialize_without_context!(Tup21, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20); +pipeline_types::deserialize_without_context!(Tup22, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21); +pipeline_types::deserialize_without_context!(Tup14, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13); + +sqlvalue::to_sql_row_impl! { + Tup21, + Tup22, + Tup14, +} */ + +pub fn circuit( + cconf: CircuitConfig, +) -> Result< + ( + DBSPHandle, + ( + ZSetHandle< + Tup8< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option>>, + ZSetHandle< + Tup9< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option, Option>>, + ZSetHandle, Option, Option>>, + ZSetHandle< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle< + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + OutputHandle< + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + >, + ), + ), + Error, +> { + let (circuit, streams) = Runtime::init_circuit(cconf, |circuit| { + // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) + // DBSPSourceMultisetOperator 49 + // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) + let (stream49, handle49) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `WAREHOUSE` (`W_ID` INTEGER PRIMARY KEY, `W_YTD` DECIMAL(12, 2)) + // DBSPSourceMultisetOperator 67 + // CREATE TABLE `WAREHOUSE` (`W_ID` INTEGER PRIMARY KEY, `W_YTD` DECIMAL(12, 2)) + let (stream67, handle67) = circuit.add_input_zset::, Option>>(); + + // CREATE TABLE `DISTRICT_STATIC` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NAME` VARCHAR(10), `D_STREET_1` VARCHAR(20), `D_STREET_2` VARCHAR(20), `D_CITY` VARCHAR(20), `D_STATE` CHAR(2), `D_ZIP` CHAR(9), `D_TAX` DECIMAL(4, 4), PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 120 + // CREATE TABLE `DISTRICT_STATIC` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NAME` VARCHAR(10), `D_STREET_1` VARCHAR(20), `D_STREET_2` VARCHAR(20), `D_CITY` VARCHAR(20), `D_STATE` CHAR(2), `D_ZIP` CHAR(9), `D_TAX` DECIMAL(4, 4), PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream120, handle120) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 143 + // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream143, handle143) = + circuit.add_input_zset::, Option, Option>>(); + + // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 166 + // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream166, handle166) = + circuit.add_input_zset::, Option, Option>>(); + + // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) + // DBSPSourceMultisetOperator 279 + // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) + let (stream279, handle279) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) + // DBSPSourceMultisetOperator 337 + // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) + let (stream337, handle337) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // rel#110:LogicalFilter.(input=LogicalTableScan#1,condition=AND(=(CAST($5):VARCHAR(20), 'lastname'), =($1, 43), =($2, 44))) + // DBSPFilterOperator 416 + let stream416: Stream< + _, + WSet< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.filter( + move |t_1: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> bool { + wrap_bool(and_bN_bN( + and_bN_bN( + eq_sN_s( + cast_to_sN_sN((*t_1).5.clone(), 20, false), + String::from("lastname"), + ), + eq_i32N_i32((*t_1).1, 43i32), + ), + eq_i32N_i32((*t_1).2, 44i32), + )) + }, + ); + // rel#112:LogicalProject.(input=LogicalFilter#110,exprs=[+(+($0, 44), 43), $3]) + // DBSPMapOperator 475 + let stream475: Stream<_, WSet, Option>>> = stream416.map( + move |t_2: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> Tup2, Option> { + Tup2::new( + plus_i32N_i32(plus_i32N_i32((*t_2).0, 44i32), 43i32), + (*t_2).3.clone(), + ) + }, + ); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapIndexOperator 536 + let stream536: Stream<_, IndexedWSet, Option>>> = stream475.map_index(move |t_3: &Tup2, Option>, | -> + (Tup0, Tup2, Option>, ) { + (Tup0::new(), Tup2::new((*t_3).0, (*t_3).1.clone()), ) + }); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPStreamAggregateOperator 4942(541) + let stream4942: Stream<_, IndexedWSet>>>> = + stream536.stream_aggregate(Fold::< + _, + _, + Semigroup1>, ConcatSemigroup>>>, + _, + _, + >::with_output( + Tup1::new(vec![]), + move |t_22: &mut Tup1>>, + t_4: &Tup2, Option>, + t_24: Weight| { + (*t_22) = Tup1::new(array_agg(&mut (*t_22).0, (*t_4).0, t_24, false)) + }, + move |t_23: Tup1>>| -> Tup1>> { Tup1::new(t_23.0) }, + )); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapOperator 4944(558) + let stream4944: Stream<_, WSet>>>> = stream4942.map( + move |t_6: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new((*t_6.1).0.clone()) + }, + ); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapOperator 4949(571) + let stream4949: Stream<_, WSet>>>> = stream4942.map( + move |t_6: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new(vec![]) + }, + ); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPNegateOperator 4954(574) + let stream4954: Stream<_, WSet>>>> = stream4949.neg(); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + let stream580 = circuit.add_source(Generator::new(|| { + if Runtime::worker_index() == 0 { + zset!( + Tup1::new(vec!( + )) => 1, + ) + } else { + zset!() + } + })); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPSumOperator 4956(584) + let stream4956: Stream<_, WSet>>>> = + stream580.sum([&stream4954, &stream4944]); + // rel#116:LogicalJoin.(left=LogicalTableScan#1,right=LogicalAggregate#114,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPMapIndexOperator 861 + let stream861: Stream< + _, + IndexedWSet< + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.map_index( + move |t_8: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup0::new(), + Tup21::new( + (*t_8).0, + (*t_8).1, + (*t_8).2, + (*t_8).3.clone(), + (*t_8).4.clone(), + (*t_8).5.clone(), + (*t_8).6.clone(), + (*t_8).7.clone(), + (*t_8).8.clone(), + (*t_8).9.clone(), + (*t_8).10.clone(), + (*t_8).11.clone(), + (*t_8).12, + (*t_8).13.clone(), + (*t_8).14.clone(), + (*t_8).15.clone(), + (*t_8).16.clone(), + (*t_8).17.clone(), + (*t_8).18, + (*t_8).19, + (*t_8).20.clone(), + ), + ) + }, + ); + // rel#116:LogicalJoin.(left=LogicalTableScan#1,right=LogicalAggregate#114,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPMapIndexOperator 4958(878) + let stream4958: Stream<_, IndexedWSet>>>> = stream4956 + .map_index( + move |t_9: &Tup1>>| -> (Tup0, Tup1>>) { + (Tup0::new(), Tup1::new((*t_9).0.clone())) + }, + ); + // rel#116:LogicalJoin.(left=LogicalTableScan#1,right=LogicalAggregate#114,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPStreamJoinOperator 4962(888) + let stream4962: Stream< + _, + WSet< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream861.stream_join( + &stream4958, + move |t_11: &Tup0, + t_8: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + t_9: &Tup1>>| + -> Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + > { + Tup22::new( + (*t_8).0, + (*t_8).1, + (*t_8).2, + (*t_8).3.clone(), + (*t_8).4.clone(), + (*t_8).5.clone(), + (*t_8).6.clone(), + (*t_8).7.clone(), + (*t_8).8.clone(), + (*t_8).9.clone(), + (*t_8).10.clone(), + (*t_8).11.clone(), + (*t_8).12, + (*t_8).13.clone(), + (*t_8).14.clone(), + (*t_8).15.clone(), + (*t_8).16.clone(), + (*t_8).17.clone(), + (*t_8).18, + (*t_8).19, + (*t_8).20.clone(), + (*t_9).0.clone(), + ) + }, + ); + // rel#116:LogicalJoin.(left=LogicalTableScan#1,right=LogicalAggregate#114,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPFilterOperator 4967(890) + let stream4967: Stream< + _, + WSet< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream4962.filter( + move |t_10: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >| + -> bool { + wrap_bool(eq_i32N_i32N( + plus_i32N_i32N(plus_i32N_i32N((*t_10).0, (*t_10).2), (*t_10).1), + index__N_( + (*t_10).21.clone(), + cast_to_u_i32(plus_i32_i32( + div_i32_i32(cardinality((*t_10).21.clone()), 2i32), + 1i32, + )) - 1, + ), + )) + }, + ); + // rel#118:LogicalProject.(input=LogicalJoin#116,exprs=[$3, $4, $0, $6, $7, $8, $9, $10, $11, $13, $14, $15, $16, $12]) + // DBSPMapOperator 4970(996) + let stream4970: Stream< + _, + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream4967.map( + move |t_13: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >| + -> Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + > { + Tup14::new( + (*t_13).3.clone(), + (*t_13).4.clone(), + (*t_13).0, + (*t_13).6.clone(), + (*t_13).7.clone(), + (*t_13).8.clone(), + (*t_13).9.clone(), + (*t_13).10.clone(), + (*t_13).11.clone(), + (*t_13).13.clone(), + (*t_13).14.clone(), + (*t_13).15.clone(), + (*t_13).16.clone(), + (*t_13).12, + ) + }, + ); + // CREATE VIEW `CUST_BYNAME_INLINED` AS + // SELECT `C`.`C_FIRST`, `C`.`C_MIDDLE`, `C`.`C_ID`, `C`.`C_STREET_1`, `C`.`C_STREET_2`, `C`.`C_CITY`, `C`.`C_STATE`, `C`.`C_ZIP`, `C`.`C_PHONE`, `C`.`C_CREDIT`, `C`.`C_CREDIT_LIM`, `C`.`C_DISCOUNT`, `C`.`C_BALANCE`, `C`.`C_SINCE` + // FROM `schema`.`CUSTOMER` AS `C`, + // (SELECT ARRAY_AGG(`EXPR$0`.`C_ID` + `EXPR$0`.`C_W_ID` + `EXPR$0`.`C_D_ID` ORDER BY `EXPR$0`.`C_FIRST`) AS `CUST_ARRAY` + // FROM (SELECT `C`.`C_ID`, `C`.`C_W_ID`, `C`.`C_D_ID`, `C`.`C_FIRST` + // FROM `schema`.`CUSTOMER` AS `C` + // WHERE `C`.`C_LAST` = 'lastname' AND `C`.`C_D_ID` = 43 AND `C`.`C_W_ID` = 44 + // ORDER BY `C_FIRST`) AS `EXPR$0`) AS `A` + // WHERE `C`.`C_ID` + `C`.`C_W_ID` + `C`.`C_D_ID` = `A`.`CUST_ARRAY`[ARRAY_LENGTH(`A`.`CUST_ARRAY`) / 2 + 1] + // DBSPSinkOperator 4973(1036) + let handle4973 = stream4970.output(); + + Ok(( + handle49, handle67, handle120, handle143, handle166, handle279, handle337, handle4973, + )) + })?; + Ok((circuit, streams)) +} diff --git a/incremental_transactions/tpcc/src/byname_sql_incremental.rs b/incremental_transactions/tpcc/src/byname_sql_incremental.rs index 108da885b..c74bfdc4e 100644 --- a/incremental_transactions/tpcc/src/byname_sql_incremental.rs +++ b/incremental_transactions/tpcc/src/byname_sql_incremental.rs @@ -6,91 +6,67 @@ #![allow(unused_variables)] #![allow(unused_mut)] #![allow(unconditional_panic)] - #![allow(non_camel_case_types)] -#[cfg(test)] -use hashing::*; +use ::serde::{Deserialize, Serialize}; +use compare::{Compare, Extract}; +use core::cmp::Ordering; +use dbsp::declare_tuples; use dbsp::{ - algebra::{ZSet, MulByRef, F32, F64, Semigroup, SemigroupValue, ZRingValue, - UnimplementedSemigroup, DefaultSemigroup, HasZero, AddByRef, NegByRef, - AddAssignByRef, + algebra::{ + AddAssignByRef, AddByRef, DefaultSemigroup, HasZero, MulByRef, NegByRef, Semigroup, + SemigroupValue, UnimplementedSemigroup, ZRingValue, ZSet, F32, F64, }, circuit::{checkpointer::Checkpoint, Circuit, CircuitConfig, Stream}, + dynamic::{DynData, DynDataTyped}, + indexed_zset, operator::{ - Generator, - FilterMap, - Fold, - time_series::{RelRange, RelOffset, OrdPartitionedIndexedZSet}, - MaxSemigroup, - MinSemigroup, - CmpFunc, + time_series::{OrdPartitionedIndexedZSet, RelOffset, RelRange}, + CmpFunc, FilterMap, Fold, Generator, MaxSemigroup, MinSemigroup, }, - OrdIndexedZSet, OrdZSet, - TypedBox, utils::*, - zset, - indexed_zset, - DBWeight, - DBData, - DBSPHandle, - Error, - Runtime, - NumEntries, - MapHandle, ZSetHandle, OutputHandle, - dynamic::{DynData,DynDataTyped}, + zset, DBData, DBSPHandle, DBWeight, Error, MapHandle, NumEntries, OrdIndexedZSet, OrdZSet, + OutputHandle, Runtime, TypedBox, ZSetHandle, }; use dbsp_adapters::Catalog; +#[cfg(test)] +use hashing::*; +use json::*; use pipeline_types::{deserialize_table_record, serialize_table_record}; +#[cfg(test)] +use readers::*; +use rust_decimal::Decimal; use size_of::*; -use ::serde::{Deserialize,Serialize}; -use compare::{Compare, Extract}; +use sqllib::{ + aggregates::*, array::*, binary::*, casts::*, geopoint::*, interval::*, operators::*, + string::*, timestamp::*, *, +}; +use sqlvalue::*; +#[cfg(test)] +use sqlx::{any::AnyRow, AnyConnection, Row}; use std::{ collections::BTreeMap, convert::identity, - ops::Neg, fmt::{Debug, Formatter, Result as FmtResult}, - path::Path, marker::PhantomData, + ops::Neg, + path::Path, }; -use core::cmp::Ordering; -use rust_decimal::Decimal; -use dbsp::declare_tuples; -use json::*; -use sqllib::{ - *, - array::*, - casts::*, - binary::*, - geopoint::*, - timestamp::*, - interval::*, - string::*, - operators::*, - aggregates::*, -}; -use sqlvalue::*; -#[cfg(test)] -use readers::*; -#[cfg(test)] -use sqlx::{AnyConnection, any::AnyRow, Row}; - - #[derive(Clone)] pub struct Semigroup1(PhantomData<(T0, TS0)>); -impl Semigroup> for Semigroup1 +impl Semigroup> for Semigroup1 where - TS0: Semigroup + TS0: Semigroup, { - fn combine(left: &Tup1, right:&Tup1) -> Tup1 { - Tup1::new( - TS0::combine(&left.0, &right.0), - ) + fn combine(left: &Tup1, right: &Tup1) -> Tup1 { + Tup1::new(TS0::combine(&left.0, &right.0)) } } -declare_tuples! { + +use crate::datatypes::*; +/* declare_tuples! { Tup21, Tup22, Tup14, @@ -104,16 +80,120 @@ sqlvalue::to_sql_row_impl! { Tup21, Tup22, Tup14, -} - - -pub fn circuit(cconf: CircuitConfig) -> Result<(DBSPHandle, (ZSetHandle, Option, Option, Option, Option, Option, Option, Option>>, ZSetHandle, Option>>, ZSetHandle, Option, Option, Option, Option, Option, Option, Option, Option>>, ZSetHandle, Option, Option>>, ZSetHandle, Option, Option>>, ZSetHandle, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>, ZSetHandle, Option, Option, Option, Option, Option, Option, Option, Option, Option>>, OutputHandle>>>>, OutputHandle, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>>, )), Error> { +} */ +pub fn circuit( + cconf: CircuitConfig, +) -> Result< + ( + DBSPHandle, + ( + ZSetHandle< + Tup8< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option>>, + ZSetHandle< + Tup9< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option, Option>>, + ZSetHandle, Option, Option>>, + ZSetHandle< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle< + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + OutputHandle>>>>, + OutputHandle< + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + >, + ), + ), + Error, +> { let (circuit, streams) = Runtime::init_circuit(cconf, |circuit| { // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) // DBSPSourceMultisetOperator 49 // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) - let (stream49, handle49) = circuit.add_input_zset::, Option, Option, Option, Option, Option, Option, Option>>(); + let (stream49, handle49) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); // CREATE TABLE `WAREHOUSE` (`W_ID` INTEGER PRIMARY KEY, `W_YTD` DECIMAL(12, 2)) // DBSPSourceMultisetOperator 67 @@ -123,101 +203,457 @@ pub fn circuit(cconf: CircuitConfig) -> Result<(DBSPHandle, (ZSetHandle, Option, Option, Option, Option, Option, Option, Option, Option>>(); + let (stream120, handle120) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) // DBSPSourceMultisetOperator 143 // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) - let (stream143, handle143) = circuit.add_input_zset::, Option, Option>>(); + let (stream143, handle143) = + circuit.add_input_zset::, Option, Option>>(); // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) // DBSPSourceMultisetOperator 166 // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) - let (stream166, handle166) = circuit.add_input_zset::, Option, Option>>(); + let (stream166, handle166) = + circuit.add_input_zset::, Option, Option>>(); // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) // DBSPSourceMultisetOperator 279 // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) - let (stream279, handle279) = circuit.add_input_zset::, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>(); + let (stream279, handle279) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) // DBSPSourceMultisetOperator 337 // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) - let (stream337, handle337) = circuit.add_input_zset::, Option, Option, Option, Option, Option, Option, Option, Option, Option>>(); + let (stream337, handle337) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); // rel#83:LogicalJoin.(left=LogicalTableScan#1,right=LogicalTableScan#3,condition=AND(=($5, $27), =($1, $26), =($2, $25)),joinType=inner) // DBSPFilterOperator 1858(1771) - let stream1858: Stream<_, WSet, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream279.filter(move |t_1: &Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - bool { - (!or_b_b(or_b_b((*t_1).1.is_none(), (*t_1).2.is_none()), (*t_1).5.is_none())) - }); + let stream1858: Stream< + _, + WSet< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.filter( + move |t_1: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> bool { + (!or_b_b( + or_b_b((*t_1).1.is_none(), (*t_1).2.is_none()), + (*t_1).5.is_none(), + )) + }, + ); // rel#83:LogicalJoin.(left=LogicalTableScan#1,right=LogicalTableScan#3,condition=AND(=($5, $27), =($1, $26), =($2, $25)),joinType=inner) // DBSPFilterOperator 1863(1774) - let stream1863: Stream<_, WSet, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream337.filter(move |t_2: &Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - bool { - (!or_b_b(or_b_b((*t_2).4.is_none(), (*t_2).5.is_none()), (*t_2).6.is_none())) - }); + let stream1863: Stream< + _, + WSet< + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream337.filter( + move |t_2: &Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> bool { + (!or_b_b( + or_b_b((*t_2).4.is_none(), (*t_2).5.is_none()), + (*t_2).6.is_none(), + )) + }, + ); // rel#83:LogicalJoin.(left=LogicalTableScan#1,right=LogicalTableScan#3,condition=AND(=($5, $27), =($1, $26), =($2, $25)),joinType=inner) // DBSPMapIndexOperator 1868(1777) - let stream1868: Stream<_, IndexedWSet, Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream1858.map_index(move |t_3: &Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - (Tup3, Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, ) { - (Tup3::new(cast_to_s_sN((*t_3).5.clone(), 16, false), cast_to_i32_i32N((*t_3).1), cast_to_i32_i32N((*t_3).2)), Tup21::new((*t_3).0, (*t_3).1, (*t_3).2, (*t_3).3.clone(), (*t_3).4.clone(), (*t_3).5.clone(), (*t_3).6.clone(), (*t_3).7.clone(), (*t_3).8.clone(), (*t_3).9.clone(), (*t_3).10.clone(), (*t_3).11.clone(), (*t_3).12, (*t_3).13.clone(), (*t_3).14.clone(), (*t_3).15.clone(), (*t_3).16.clone(), (*t_3).17.clone(), (*t_3).18, (*t_3).19, (*t_3).20.clone()), ) - }); + let stream1868: Stream< + _, + IndexedWSet< + Tup3, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream1858.map_index( + move |t_3: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup3, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup3::new( + cast_to_s_sN((*t_3).5.clone(), 16, false), + cast_to_i32_i32N((*t_3).1), + cast_to_i32_i32N((*t_3).2), + ), + Tup21::new( + (*t_3).0, + (*t_3).1, + (*t_3).2, + (*t_3).3.clone(), + (*t_3).4.clone(), + (*t_3).5.clone(), + (*t_3).6.clone(), + (*t_3).7.clone(), + (*t_3).8.clone(), + (*t_3).9.clone(), + (*t_3).10.clone(), + (*t_3).11.clone(), + (*t_3).12, + (*t_3).13.clone(), + (*t_3).14.clone(), + (*t_3).15.clone(), + (*t_3).16.clone(), + (*t_3).17.clone(), + (*t_3).18, + (*t_3).19, + (*t_3).20.clone(), + ), + ) + }, + ); // rel#83:LogicalJoin.(left=LogicalTableScan#1,right=LogicalTableScan#3,condition=AND(=($5, $27), =($1, $26), =($2, $25)),joinType=inner) // DBSPMapIndexOperator 1874(1781) - let stream1874: Stream<_, IndexedWSet, Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream1863.map_index(move |t_4: &Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - (Tup3, Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, ) { - (Tup3::new(cast_to_s_sN((*t_4).6.clone(), 16, false), cast_to_i32_i32N((*t_4).5), cast_to_i32_i32N((*t_4).4)), Tup10::new((*t_4).0, (*t_4).1, (*t_4).2, (*t_4).3, (*t_4).4, (*t_4).5, (*t_4).6.clone(), (*t_4).7.clone(), (*t_4).8, (*t_4).9), ) - }); + let stream1874: Stream< + _, + IndexedWSet< + Tup3, + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream1863.map_index( + move |t_4: &Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup3, + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup3::new( + cast_to_s_sN((*t_4).6.clone(), 16, false), + cast_to_i32_i32N((*t_4).5), + cast_to_i32_i32N((*t_4).4), + ), + Tup10::new( + (*t_4).0, + (*t_4).1, + (*t_4).2, + (*t_4).3, + (*t_4).4, + (*t_4).5, + (*t_4).6.clone(), + (*t_4).7.clone(), + (*t_4).8, + (*t_4).9, + ), + ) + }, + ); // rel#83:LogicalJoin.(left=LogicalTableScan#1,right=LogicalTableScan#3,condition=AND(=($5, $27), =($1, $26), =($2, $25)),joinType=inner) // DBSPJoinOperator 3427(1787) - let stream3427: Stream<_, WSet, Option>>> = stream1868.join(&stream1874, move |t_5: &Tup3, t_3: &Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, t_4: &Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - Tup2, Option> { - Tup2::new(plus_i32N_i32N(plus_i32N_i32N((*t_3).0, (*t_3).2), (*t_3).1), (*t_3).3.clone().clone()) - }); + let stream3427: Stream<_, WSet, Option>>> = stream1868.join( + &stream1874, + move |t_5: &Tup3, + t_3: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + t_4: &Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> Tup2, Option> { + Tup2::new( + plus_i32N_i32N(plus_i32N_i32N((*t_3).0, (*t_3).2), (*t_3).1), + (*t_3).3.clone().clone(), + ) + }, + ); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPMapIndexOperator 3429(1790) - let stream3429: Stream<_, IndexedWSet, Option>>> = stream3427.map_index(move |t_8: &Tup2, Option>, | -> + let stream3429: Stream<_, IndexedWSet, Option>>> = stream3427.map_index(move |t_8: &Tup2, Option>, | -> (Tup0, Tup2, Option>, ) { (Tup0::new(), Tup2::new((*t_8).0, (*t_8).1.clone()), ) }); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPAggregateOperator 13452(1794) - let stream13452: Stream<_, IndexedWSet>>>> = stream3429.aggregate(Fold::<_, _, Semigroup1>, ConcatSemigroup>>>, _, _>::with_output(Tup1::new(vec!( - )), move |t_32: &mut Tup1>>, t_9: &Tup2, Option>, t_34: Weight, | { - (*t_32) = Tup1::new(array_agg(&mut (*t_32).0, (*t_9).0, t_34, false)) - }, move |t_33: Tup1>>, | -> - Tup1>> { - Tup1::new(t_33.0) - })); + let stream13452: Stream<_, IndexedWSet>>>> = + stream3429.aggregate(Fold::< + _, + _, + Semigroup1>, ConcatSemigroup>>>, + _, + _, + >::with_output( + Tup1::new(vec![]), + move |t_32: &mut Tup1>>, + t_9: &Tup2, Option>, + t_34: Weight| { + (*t_32) = Tup1::new(array_agg(&mut (*t_32).0, (*t_9).0, t_34, false)) + }, + move |t_33: Tup1>>| -> Tup1>> { Tup1::new(t_33.0) }, + )); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPMapOperator 13454(1796) - let stream13454: Stream<_, WSet>>>> = stream13452.map(move |t_11: (&Tup0, &Tup1>>, ), | -> - Tup1>> { - Tup1::new((*t_11.1).0.clone()) - }); + let stream13454: Stream<_, WSet>>>> = stream13452.map( + move |t_11: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new((*t_11.1).0.clone()) + }, + ); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPMapOperator 13459(1801) - let stream13459: Stream<_, WSet>>>> = stream13452.map(move |t_11: (&Tup0, &Tup1>>, ), | -> - Tup1>> { - Tup1::new(vec!( - )) - }); + let stream13459: Stream<_, WSet>>>> = stream13452.map( + move |t_11: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new(vec![]) + }, + ); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPNegateOperator 13464(1804) let stream13464: Stream<_, WSet>>>> = stream13459.neg(); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) - let stream906 = circuit.add_source(Generator::new(|| if Runtime::worker_index() == 0 {zset!( - Tup1::new(vec!( - )) => 1, - )} else {zset!( - )})); + let stream906 = circuit.add_source(Generator::new(|| { + if Runtime::worker_index() == 0 { + zset!( + Tup1::new(vec!( + )) => 1, + ) + } else { + zset!() + } + })); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPDifferentiateOperator 1915(906) let stream1915: Stream<_, WSet>>>> = stream906.differentiate(); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPSumOperator 13466(1806) - let stream13466: Stream<_, WSet>>>> = stream1915.sum([&stream13464, &stream13454]); + let stream13466: Stream<_, WSet>>>> = + stream1915.sum([&stream13464, &stream13454]); // CREATE VIEW `CUST_AGG` AS // SELECT ARRAY_AGG(`EXPR$0`.`C_ID` + `EXPR$0`.`C_W_ID` + `EXPR$0`.`C_D_ID` ORDER BY `EXPR$0`.`C_FIRST`) AS `CUST_ARRAY` // FROM (SELECT `C`.`C_ID`, `C`.`C_W_ID`, `C`.`C_D_ID`, `C`.`C_FIRST` @@ -230,45 +666,562 @@ pub fn circuit(cconf: CircuitConfig) -> Result<(DBSPHandle, (ZSetHandle, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream279.map_index(move |t_13: &Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - (Tup0, Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, ) { - (Tup0::new(), Tup21::new((*t_13).0, (*t_13).1, (*t_13).2, (*t_13).3.clone(), (*t_13).4.clone(), (*t_13).5.clone(), (*t_13).6.clone(), (*t_13).7.clone(), (*t_13).8.clone(), (*t_13).9.clone(), (*t_13).10.clone(), (*t_13).11.clone(), (*t_13).12, (*t_13).13.clone(), (*t_13).14.clone(), (*t_13).15.clone(), (*t_13).16.clone(), (*t_13).17.clone(), (*t_13).18, (*t_13).19, (*t_13).20.clone()), ) - }); + let stream1934: Stream< + _, + IndexedWSet< + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.map_index( + move |t_13: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup0::new(), + Tup21::new( + (*t_13).0, + (*t_13).1, + (*t_13).2, + (*t_13).3.clone(), + (*t_13).4.clone(), + (*t_13).5.clone(), + (*t_13).6.clone(), + (*t_13).7.clone(), + (*t_13).8.clone(), + (*t_13).9.clone(), + (*t_13).10.clone(), + (*t_13).11.clone(), + (*t_13).12, + (*t_13).13.clone(), + (*t_13).14.clone(), + (*t_13).15.clone(), + (*t_13).16.clone(), + (*t_13).17.clone(), + (*t_13).18, + (*t_13).19, + (*t_13).20.clone(), + ), + ) + }, + ); // rel#186:LogicalJoin.(left=LogicalTableScan#90,right=LogicalTableScan#92,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) // DBSPMapIndexOperator 13470(1823) - let stream13470: Stream<_, IndexedWSet>>>> = stream13466.map_index(move |t_14: &Tup1>>, | -> - (Tup0, Tup1>>, ) { - (Tup0::new(), Tup1::new((*t_14).0.clone()), ) - }); + let stream13470: Stream<_, IndexedWSet>>>> = stream13466 + .map_index( + move |t_14: &Tup1>>| -> (Tup0, Tup1>>) { + (Tup0::new(), Tup1::new((*t_14).0.clone())) + }, + ); // rel#186:LogicalJoin.(left=LogicalTableScan#90,right=LogicalTableScan#92,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) // DBSPJoinFilterMap 14116(1829) - let stream14116: Stream<_, WSet, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>>> = stream1934.join_flatmap(&stream13470, move |t_16: &Tup0, t_13: &Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, t_14: &Tup1>>, | -> - Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>> { - let tmp: Tup22, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>> = Tup22::new((*t_13).0, (*t_13).1, (*t_13).2, (*t_13).3.clone(), (*t_13).4.clone(), (*t_13).5.clone(), (*t_13).6.clone(), (*t_13).7.clone(), (*t_13).8.clone(), (*t_13).9.clone(), (*t_13).10.clone(), (*t_13).11.clone(), (*t_13).12, (*t_13).13.clone(), (*t_13).14.clone(), (*t_13).15.clone(), (*t_13).16.clone(), (*t_13).17.clone(), (*t_13).18, (*t_13).19, (*t_13).20.clone(), (*t_14).0.clone()); - (if wrap_bool(eq_i32N_i32N(plus_i32N_i32N(plus_i32N_i32N((*&tmp).0, (*&tmp).2), (*&tmp).1), index__N_((*&tmp).21.clone(), cast_to_u_i32(plus_i32_i32(div_i32_i32(cardinality((*&tmp).21.clone()), 2i32), 1i32)) - 1))) { - Some(tmp) - } else { - None::, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>> - }) - }); + let stream14116: Stream< + _, + WSet< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream1934.join_flatmap( + &stream13470, + move |t_16: &Tup0, + t_13: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + t_14: &Tup1>>| + -> Option< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + > { + let tmp: Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + > = Tup22::new( + (*t_13).0, + (*t_13).1, + (*t_13).2, + (*t_13).3.clone(), + (*t_13).4.clone(), + (*t_13).5.clone(), + (*t_13).6.clone(), + (*t_13).7.clone(), + (*t_13).8.clone(), + (*t_13).9.clone(), + (*t_13).10.clone(), + (*t_13).11.clone(), + (*t_13).12, + (*t_13).13.clone(), + (*t_13).14.clone(), + (*t_13).15.clone(), + (*t_13).16.clone(), + (*t_13).17.clone(), + (*t_13).18, + (*t_13).19, + (*t_13).20.clone(), + (*t_14).0.clone(), + ); + (if wrap_bool(eq_i32N_i32N( + plus_i32N_i32N(plus_i32N_i32N((*&tmp).0, (*&tmp).2), (*&tmp).1), + index__N_( + (*&tmp).21.clone(), + cast_to_u_i32(plus_i32_i32( + div_i32_i32(cardinality((*&tmp).21.clone()), 2i32), + 1i32, + )) - 1, + ), + )) { + Some(tmp) + } else { + None::< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + > + }) + }, + ); // rel#189:LogicalJoin.(left=LogicalJoin#186,right=LogicalTableScan#96,condition=true,joinType=inner) // DBSPMapIndexOperator 14194(1832) - let stream14194: Stream<_, IndexedWSet, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>>> = stream14116.map_index(move |t_18: &Tup22, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>, | -> - (Tup0, Tup22, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>, ) { - (Tup0::new(), Tup22::new((*t_18).0, (*t_18).1, (*t_18).2, (*t_18).3.clone(), (*t_18).4.clone(), (*t_18).5.clone(), (*t_18).6.clone(), (*t_18).7.clone(), (*t_18).8.clone(), (*t_18).9.clone(), (*t_18).10.clone(), (*t_18).11.clone(), (*t_18).12, (*t_18).13.clone(), (*t_18).14.clone(), (*t_18).15.clone(), (*t_18).16.clone(), (*t_18).17.clone(), (*t_18).18, (*t_18).19, (*t_18).20.clone(), (*t_18).21.clone()), ) - }); + let stream14194: Stream< + _, + IndexedWSet< + Tup0, + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream14116.map_index( + move |t_18: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >| + -> ( + Tup0, + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + ) { + ( + Tup0::new(), + Tup22::new( + (*t_18).0, + (*t_18).1, + (*t_18).2, + (*t_18).3.clone(), + (*t_18).4.clone(), + (*t_18).5.clone(), + (*t_18).6.clone(), + (*t_18).7.clone(), + (*t_18).8.clone(), + (*t_18).9.clone(), + (*t_18).10.clone(), + (*t_18).11.clone(), + (*t_18).12, + (*t_18).13.clone(), + (*t_18).14.clone(), + (*t_18).15.clone(), + (*t_18).16.clone(), + (*t_18).17.clone(), + (*t_18).18, + (*t_18).19, + (*t_18).20.clone(), + (*t_18).21.clone(), + ), + ) + }, + ); // rel#189:LogicalJoin.(left=LogicalJoin#186,right=LogicalTableScan#96,condition=true,joinType=inner) // DBSPMapIndexOperator 1961(1836) - let stream1961: Stream<_, IndexedWSet, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream337.map_index(move |t_19: &Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - (Tup0, Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, ) { - (Tup0::new(), Tup10::new((*t_19).0, (*t_19).1, (*t_19).2, (*t_19).3, (*t_19).4, (*t_19).5, (*t_19).6.clone(), (*t_19).7.clone(), (*t_19).8, (*t_19).9), ) - }); + let stream1961: Stream< + _, + IndexedWSet< + Tup0, + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream337.map_index( + move |t_19: &Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup0, + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup0::new(), + Tup10::new( + (*t_19).0, + (*t_19).1, + (*t_19).2, + (*t_19).3, + (*t_19).4, + (*t_19).5, + (*t_19).6.clone(), + (*t_19).7.clone(), + (*t_19).8, + (*t_19).9, + ), + ) + }, + ); // rel#189:LogicalJoin.(left=LogicalJoin#186,right=LogicalTableScan#96,condition=true,joinType=inner) // DBSPJoinOperator 14302(1842) - let stream14302: Stream<_, WSet, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream14194.join(&stream1961, move |t_21: &Tup0, t_18: &Tup22, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>, t_19: &Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - Tup14, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option> { - Tup14::new((*t_18).3.clone().clone(), (*t_18).4.clone().clone(), (*t_18).0, (*t_18).6.clone().clone(), (*t_18).7.clone().clone(), (*t_18).8.clone().clone(), (*t_18).9.clone().clone(), (*t_18).10.clone().clone(), (*t_18).11.clone().clone(), (*t_18).13.clone().clone(), (*t_18).14.clone().clone(), (*t_18).15.clone().clone(), (*t_18).16.clone().clone(), (*t_18).12) - }); + let stream14302: Stream< + _, + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream14194.join( + &stream1961, + move |t_21: &Tup0, + t_18: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + t_19: &Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + > { + Tup14::new( + (*t_18).3.clone().clone(), + (*t_18).4.clone().clone(), + (*t_18).0, + (*t_18).6.clone().clone(), + (*t_18).7.clone().clone(), + (*t_18).8.clone().clone(), + (*t_18).9.clone().clone(), + (*t_18).10.clone().clone(), + (*t_18).11.clone().clone(), + (*t_18).13.clone().clone(), + (*t_18).14.clone().clone(), + (*t_18).15.clone().clone(), + (*t_18).16.clone().clone(), + (*t_18).12, + ) + }, + ); // CREATE VIEW `CUST_BYNAME` AS // SELECT `C`.`C_FIRST`, `C`.`C_MIDDLE`, `C`.`C_ID`, `C`.`C_STREET_1`, `C`.`C_STREET_2`, `C`.`C_CITY`, `C`.`C_STATE`, `C`.`C_ZIP`, `C`.`C_PHONE`, `C`.`C_CREDIT`, `C`.`C_CREDIT_LIM`, `C`.`C_DISCOUNT`, `C`.`C_BALANCE`, `C`.`C_SINCE` // FROM `schema`.`CUSTOMER` AS `C`, @@ -278,9 +1231,17 @@ pub fn circuit(cconf: CircuitConfig) -> Result<(DBSPHandle, (ZSetHandle(PhantomData<(T0, TS0)>); + +impl Semigroup> for Semigroup1 +where + TS0: Semigroup, +{ + fn combine(left: &Tup1, right: &Tup1) -> Tup1 { + Tup1::new(TS0::combine(&left.0, &right.0)) + } +} +/* declare_tuples! { + Tup21, + Tup22, + Tup14, +} + +pipeline_types::deserialize_without_context!(Tup21, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20); +pipeline_types::deserialize_without_context!(Tup22, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21); +pipeline_types::deserialize_without_context!(Tup14, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13); + +sqlvalue::to_sql_row_impl! { + Tup21, + Tup22, + Tup14, +} */ + +pub fn circuit( + cconf: CircuitConfig, +) -> Result< + ( + DBSPHandle, + ( + ZSetHandle< + Tup8< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option>>, + ZSetHandle< + Tup9< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option, Option>>, + ZSetHandle, Option, Option>>, + ZSetHandle< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle< + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + OutputHandle>>>>, + OutputHandle< + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + >, + ), + ), + Error, +> { + let (circuit, streams) = Runtime::init_circuit(cconf, |circuit| { + // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) + // DBSPSourceMultisetOperator 49 + // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) + let (stream49, handle49) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `WAREHOUSE` (`W_ID` INTEGER PRIMARY KEY, `W_YTD` DECIMAL(12, 2)) + // DBSPSourceMultisetOperator 67 + // CREATE TABLE `WAREHOUSE` (`W_ID` INTEGER PRIMARY KEY, `W_YTD` DECIMAL(12, 2)) + let (stream67, handle67) = circuit.add_input_zset::, Option>>(); + + // CREATE TABLE `DISTRICT_STATIC` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NAME` VARCHAR(10), `D_STREET_1` VARCHAR(20), `D_STREET_2` VARCHAR(20), `D_CITY` VARCHAR(20), `D_STATE` CHAR(2), `D_ZIP` CHAR(9), `D_TAX` DECIMAL(4, 4), PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 120 + // CREATE TABLE `DISTRICT_STATIC` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NAME` VARCHAR(10), `D_STREET_1` VARCHAR(20), `D_STREET_2` VARCHAR(20), `D_CITY` VARCHAR(20), `D_STATE` CHAR(2), `D_ZIP` CHAR(9), `D_TAX` DECIMAL(4, 4), PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream120, handle120) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 143 + // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream143, handle143) = + circuit.add_input_zset::, Option, Option>>(); + + // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 166 + // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream166, handle166) = + circuit.add_input_zset::, Option, Option>>(); + + // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) + // DBSPSourceMultisetOperator 279 + // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) + let (stream279, handle279) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) + // DBSPSourceMultisetOperator 337 + // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) + let (stream337, handle337) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // rel#60:LogicalFilter.(input=LogicalTableScan#1,condition=AND(=(CAST($5):VARCHAR(20), 'lastname'), =($1, 43), =($2, 44))) + // DBSPFilterOperator 1171(1107) + let stream1171: Stream< + _, + WSet< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.filter( + move |t_1: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> bool { + wrap_bool(and_bN_bN( + and_bN_bN( + eq_sN_s( + cast_to_sN_sN((*t_1).5.clone(), 20, false), + String::from("lastname"), + ), + eq_i32N_i32((*t_1).1, 43i32), + ), + eq_i32N_i32((*t_1).2, 44i32), + )) + }, + ); + // rel#62:LogicalProject.(input=LogicalFilter#60,exprs=[+(+($0, 44), 43), $3]) + // DBSPMapOperator 1176(1110) + let stream1176: Stream<_, WSet, Option>>> = stream1171.map( + move |t_2: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> Tup2, Option> { + Tup2::new( + plus_i32N_i32(plus_i32N_i32((*t_2).0, 44i32), 43i32), + (*t_2).3.clone(), + ) + }, + ); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapIndexOperator 1181(1113) + let stream1181: Stream<_, IndexedWSet, Option>>> = stream1176.map_index(move |t_3: &Tup2, Option>, | -> + (Tup0, Tup2, Option>, ) { + (Tup0::new(), Tup2::new((*t_3).0, (*t_3).1.clone()), ) + }); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPAggregateOperator 4700(1117) + let stream4700: Stream<_, IndexedWSet>>>> = + stream1181.aggregate(Fold::< + _, + _, + Semigroup1>, ConcatSemigroup>>>, + _, + _, + >::with_output( + Tup1::new(vec![]), + move |t_22: &mut Tup1>>, + t_4: &Tup2, Option>, + t_24: Weight| { + (*t_22) = Tup1::new(array_agg(&mut (*t_22).0, (*t_4).0, t_24, false)) + }, + move |t_23: Tup1>>| -> Tup1>> { Tup1::new(t_23.0) }, + )); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapOperator 4702(1119) + let stream4702: Stream<_, WSet>>>> = stream4700.map( + move |t_6: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new((*t_6.1).0.clone()) + }, + ); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapOperator 4707(1124) + let stream4707: Stream<_, WSet>>>> = stream4700.map( + move |t_6: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new(vec![]) + }, + ); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPNegateOperator 4712(1127) + let stream4712: Stream<_, WSet>>>> = stream4707.neg(); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + let stream580 = circuit.add_source(Generator::new(|| { + if Runtime::worker_index() == 0 { + zset!( + Tup1::new(vec!( + )) => 1, + ) + } else { + zset!() + } + })); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPDifferentiateOperator 1207(580) + let stream1207: Stream<_, WSet>>>> = stream580.differentiate(); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPSumOperator 4714(1129) + let stream4714: Stream<_, WSet>>>> = + stream1207.sum([&stream4712, &stream4702]); + // CREATE VIEW `CUST_AGG` AS + // SELECT ARRAY_AGG(`EXPR$0`.`C_ID` + `EXPR$0`.`C_W_ID` + `EXPR$0`.`C_D_ID` ORDER BY `EXPR$0`.`C_FIRST`) AS `CUST_ARRAY` + // FROM (SELECT `C`.`C_ID`, `C`.`C_W_ID`, `C`.`C_D_ID`, `C`.`C_FIRST` + // FROM `schema`.`CUSTOMER` AS `C` + // WHERE `C`.`C_LAST` = 'lastname' AND `C`.`C_D_ID` = 43 AND `C`.`C_W_ID` = 44 + // ORDER BY `C_FIRST`) AS `EXPR$0` + // DBSPSinkOperator 4716(598) + let handle4716 = stream4714.output(); + + // rel#132:LogicalJoin.(left=LogicalTableScan#67,right=LogicalTableScan#69,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPMapIndexOperator 1226(1142) + let stream1226: Stream< + _, + IndexedWSet< + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.map_index( + move |t_8: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup0::new(), + Tup21::new( + (*t_8).0, + (*t_8).1, + (*t_8).2, + (*t_8).3.clone(), + (*t_8).4.clone(), + (*t_8).5.clone(), + (*t_8).6.clone(), + (*t_8).7.clone(), + (*t_8).8.clone(), + (*t_8).9.clone(), + (*t_8).10.clone(), + (*t_8).11.clone(), + (*t_8).12, + (*t_8).13.clone(), + (*t_8).14.clone(), + (*t_8).15.clone(), + (*t_8).16.clone(), + (*t_8).17.clone(), + (*t_8).18, + (*t_8).19, + (*t_8).20.clone(), + ), + ) + }, + ); + // rel#132:LogicalJoin.(left=LogicalTableScan#67,right=LogicalTableScan#69,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPMapIndexOperator 4718(1146) + let stream4718: Stream<_, IndexedWSet>>>> = stream4714 + .map_index( + move |t_9: &Tup1>>| -> (Tup0, Tup1>>) { + (Tup0::new(), Tup1::new((*t_9).0.clone())) + }, + ); + // rel#132:LogicalJoin.(left=LogicalTableScan#67,right=LogicalTableScan#69,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPJoinFlatmapOperator 4722(1152) + let stream4722: Stream< + _, + WSet< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream1226.join_flatmap( + &stream4718, + move |t_11: &Tup0, + t_8: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + t_9: &Tup1>>| + -> Option< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + > { + let tmp: Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + > = Tup22::new( + (*t_8).0, + (*t_8).1, + (*t_8).2, + (*t_8).3.clone(), + (*t_8).4.clone(), + (*t_8).5.clone(), + (*t_8).6.clone(), + (*t_8).7.clone(), + (*t_8).8.clone(), + (*t_8).9.clone(), + (*t_8).10.clone(), + (*t_8).11.clone(), + (*t_8).12, + (*t_8).13.clone(), + (*t_8).14.clone(), + (*t_8).15.clone(), + (*t_8).16.clone(), + (*t_8).17.clone(), + (*t_8).18, + (*t_8).19, + (*t_8).20.clone(), + (*t_9).0.clone(), + ); + (if wrap_bool(eq_i32N_i32N( + plus_i32N_i32N(plus_i32N_i32N(tmp.0, tmp.2), tmp.1), + index__N_( + tmp.21.clone(), + cast_to_u_i32(plus_i32_i32( + div_i32_i32(cardinality(tmp.21.clone()), 2i32), + 1i32, + )) - 1, + ), + )) { + Some(tmp) + } else { + None::< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + > + }) + }, + ); + // rel#134:LogicalProject.(input=LogicalJoin#132,exprs=[$3, $4, $0, $6, $7, $8, $9, $10, $11, $13, $14, $15, $16, $12]) + // DBSPMapOperator 4724(1155) + let stream4724: Stream< + _, + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream4722.map( + move |t_13: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >| + -> Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + > { + Tup14::new( + (*t_13).3.clone(), + (*t_13).4.clone(), + (*t_13).0, + (*t_13).6.clone(), + (*t_13).7.clone(), + (*t_13).8.clone(), + (*t_13).9.clone(), + (*t_13).10.clone(), + (*t_13).11.clone(), + (*t_13).13.clone(), + (*t_13).14.clone(), + (*t_13).15.clone(), + (*t_13).16.clone(), + (*t_13).12, + ) + }, + ); + // CREATE VIEW `CUST_BYNAME` AS + // SELECT `C`.`C_FIRST`, `C`.`C_MIDDLE`, `C`.`C_ID`, `C`.`C_STREET_1`, `C`.`C_STREET_2`, `C`.`C_CITY`, `C`.`C_STATE`, `C`.`C_ZIP`, `C`.`C_PHONE`, `C`.`C_CREDIT`, `C`.`C_CREDIT_LIM`, `C`.`C_DISCOUNT`, `C`.`C_BALANCE`, `C`.`C_SINCE` + // FROM `schema`.`CUSTOMER` AS `C`, + // `schema`.`CUST_AGG` AS `A` + // WHERE `C`.`C_ID` + `C`.`C_W_ID` + `C`.`C_D_ID` = `A`.`CUST_ARRAY`[ARRAY_LENGTH(`A`.`CUST_ARRAY`) / 2 + 1] + // DBSPSinkOperator 4727(1050) + let handle4727 = stream4724.output(); + + Ok(( + handle49, handle67, handle120, handle143, handle166, handle279, handle337, handle4716, + handle4727, + )) + })?; + Ok((circuit, streams)) +} diff --git a/incremental_transactions/tpcc/src/byname_sql_incremental_constargs_inlined.rs b/incremental_transactions/tpcc/src/byname_sql_incremental_constargs_inlined.rs new file mode 100644 index 000000000..0082d77f6 --- /dev/null +++ b/incremental_transactions/tpcc/src/byname_sql_incremental_constargs_inlined.rs @@ -0,0 +1,814 @@ +// Automatically-generated file +#![allow(dead_code)] +#![allow(non_snake_case)] +#![allow(unused_imports)] +#![allow(unused_parens)] +#![allow(unused_variables)] +#![allow(unused_mut)] +#![allow(unconditional_panic)] +#![allow(non_camel_case_types)] + +use crate::datatypes::*; +use ::serde::{Deserialize, Serialize}; +use compare::{Compare, Extract}; +use core::cmp::Ordering; +use dbsp::declare_tuples; +use dbsp::{ + algebra::{ + AddAssignByRef, AddByRef, DefaultSemigroup, HasZero, MulByRef, NegByRef, Semigroup, + SemigroupValue, UnimplementedSemigroup, ZRingValue, ZSet, F32, F64, + }, + circuit::{checkpointer::Checkpoint, Circuit, CircuitConfig, Stream}, + dynamic::{DynData, DynDataTyped}, + indexed_zset, + operator::{ + time_series::{OrdPartitionedIndexedZSet, RelOffset, RelRange}, + CmpFunc, FilterMap, Fold, Generator, MaxSemigroup, MinSemigroup, + }, + utils::*, + zset, DBData, DBSPHandle, DBWeight, Error, MapHandle, NumEntries, OrdIndexedZSet, OrdZSet, + OutputHandle, Runtime, TypedBox, ZSetHandle, +}; +use dbsp_adapters::Catalog; +#[cfg(test)] +use hashing::*; +use json::*; +use pipeline_types::{deserialize_table_record, serialize_table_record}; +#[cfg(test)] +use readers::*; +use rust_decimal::Decimal; +use size_of::*; +use sqllib::{ + aggregates::*, array::*, binary::*, casts::*, geopoint::*, interval::*, operators::*, + string::*, timestamp::*, *, +}; +use sqlvalue::*; +#[cfg(test)] +use sqlx::{any::AnyRow, AnyConnection, Row}; +use std::{ + collections::BTreeMap, + convert::identity, + fmt::{Debug, Formatter, Result as FmtResult}, + marker::PhantomData, + ops::Neg, + path::Path, +}; + +#[derive(Clone)] +pub struct Semigroup1(PhantomData<(T0, TS0)>); + +impl Semigroup> for Semigroup1 +where + TS0: Semigroup, +{ + fn combine(left: &Tup1, right: &Tup1) -> Tup1 { + Tup1::new(TS0::combine(&left.0, &right.0)) + } +} +/* declare_tuples! { + Tup21, + Tup22, + Tup14, +} + +pipeline_types::deserialize_without_context!(Tup21, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20); +pipeline_types::deserialize_without_context!(Tup22, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21); +pipeline_types::deserialize_without_context!(Tup14, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13); + +sqlvalue::to_sql_row_impl! { + Tup21, + Tup22, + Tup14, +} */ + +pub fn circuit( + cconf: CircuitConfig, +) -> Result< + ( + DBSPHandle, + ( + ZSetHandle< + Tup8< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option>>, + ZSetHandle< + Tup9< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option, Option>>, + ZSetHandle, Option, Option>>, + ZSetHandle< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle< + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + OutputHandle< + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + >, + ), + ), + Error, +> { + let (circuit, streams) = Runtime::init_circuit(cconf, |circuit| { + // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) + // DBSPSourceMultisetOperator 49 + // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) + let (stream49, handle49) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `WAREHOUSE` (`W_ID` INTEGER PRIMARY KEY, `W_YTD` DECIMAL(12, 2)) + // DBSPSourceMultisetOperator 67 + // CREATE TABLE `WAREHOUSE` (`W_ID` INTEGER PRIMARY KEY, `W_YTD` DECIMAL(12, 2)) + let (stream67, handle67) = circuit.add_input_zset::, Option>>(); + + // CREATE TABLE `DISTRICT_STATIC` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NAME` VARCHAR(10), `D_STREET_1` VARCHAR(20), `D_STREET_2` VARCHAR(20), `D_CITY` VARCHAR(20), `D_STATE` CHAR(2), `D_ZIP` CHAR(9), `D_TAX` DECIMAL(4, 4), PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 120 + // CREATE TABLE `DISTRICT_STATIC` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NAME` VARCHAR(10), `D_STREET_1` VARCHAR(20), `D_STREET_2` VARCHAR(20), `D_CITY` VARCHAR(20), `D_STATE` CHAR(2), `D_ZIP` CHAR(9), `D_TAX` DECIMAL(4, 4), PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream120, handle120) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 143 + // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream143, handle143) = + circuit.add_input_zset::, Option, Option>>(); + + // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 166 + // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream166, handle166) = + circuit.add_input_zset::, Option, Option>>(); + + // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) + // DBSPSourceMultisetOperator 279 + // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) + let (stream279, handle279) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) + // DBSPSourceMultisetOperator 337 + // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) + let (stream337, handle337) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // rel#110:LogicalFilter.(input=LogicalTableScan#1,condition=AND(=(CAST($5):VARCHAR(20), 'lastname'), =($1, 43), =($2, 44))) + // DBSPFilterOperator 1137(1084) + let stream1137: Stream< + _, + WSet< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.filter( + move |t_1: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> bool { + wrap_bool(and_bN_bN( + and_bN_bN( + eq_sN_s( + cast_to_sN_sN((*t_1).5.clone(), 20, false), + String::from("lastname"), + ), + eq_i32N_i32((*t_1).1, 43i32), + ), + eq_i32N_i32((*t_1).2, 44i32), + )) + }, + ); + // rel#112:LogicalProject.(input=LogicalFilter#110,exprs=[+(+($0, 44), 43), $3]) + // DBSPMapOperator 1142(1087) + let stream1142: Stream<_, WSet, Option>>> = stream1137.map( + move |t_2: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> Tup2, Option> { + Tup2::new( + plus_i32N_i32(plus_i32N_i32((*t_2).0, 44i32), 43i32), + (*t_2).3.clone(), + ) + }, + ); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapIndexOperator 1147(1090) + let stream1147: Stream<_, IndexedWSet, Option>>> = stream1142.map_index(move |t_3: &Tup2, Option>, | -> + (Tup0, Tup2, Option>, ) { + (Tup0::new(), Tup2::new((*t_3).0, (*t_3).1.clone()), ) + }); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPAggregateOperator 4596(1094) + let stream4596: Stream<_, IndexedWSet>>>> = + stream1147.aggregate(Fold::< + _, + _, + Semigroup1>, ConcatSemigroup>>>, + _, + _, + >::with_output( + Tup1::new(vec![]), + move |t_22: &mut Tup1>>, + t_4: &Tup2, Option>, + t_24: Weight| { + (*t_22) = Tup1::new(array_agg(&mut (*t_22).0, (*t_4).0, t_24, false)) + }, + move |t_23: Tup1>>| -> Tup1>> { Tup1::new(t_23.0) }, + )); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapOperator 4598(1096) + let stream4598: Stream<_, WSet>>>> = stream4596.map( + move |t_6: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new((*t_6.1).0.clone()) + }, + ); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapOperator 4603(1101) + let stream4603: Stream<_, WSet>>>> = stream4596.map( + move |t_6: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new(vec![]) + }, + ); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPNegateOperator 4608(1104) + let stream4608: Stream<_, WSet>>>> = stream4603.neg(); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + let stream580 = circuit.add_source(Generator::new(|| { + if Runtime::worker_index() == 0 { + zset!( + Tup1::new(vec!( + )) => 1, + ) + } else { + zset!() + } + })); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPDifferentiateOperator 1173(580) + let stream1173: Stream<_, WSet>>>> = stream580.differentiate(); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPSumOperator 4610(1106) + let stream4610: Stream<_, WSet>>>> = + stream1173.sum([&stream4608, &stream4598]); + // rel#116:LogicalJoin.(left=LogicalTableScan#1,right=LogicalAggregate#114,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPMapIndexOperator 1181(1108) + let stream1181: Stream< + _, + IndexedWSet< + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.map_index( + move |t_8: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup0::new(), + Tup21::new( + (*t_8).0, + (*t_8).1, + (*t_8).2, + (*t_8).3.clone(), + (*t_8).4.clone(), + (*t_8).5.clone(), + (*t_8).6.clone(), + (*t_8).7.clone(), + (*t_8).8.clone(), + (*t_8).9.clone(), + (*t_8).10.clone(), + (*t_8).11.clone(), + (*t_8).12, + (*t_8).13.clone(), + (*t_8).14.clone(), + (*t_8).15.clone(), + (*t_8).16.clone(), + (*t_8).17.clone(), + (*t_8).18, + (*t_8).19, + (*t_8).20.clone(), + ), + ) + }, + ); + // rel#116:LogicalJoin.(left=LogicalTableScan#1,right=LogicalAggregate#114,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPMapIndexOperator 4612(1112) + let stream4612: Stream<_, IndexedWSet>>>> = stream4610 + .map_index( + move |t_9: &Tup1>>| -> (Tup0, Tup1>>) { + (Tup0::new(), Tup1::new((*t_9).0.clone())) + }, + ); + // rel#116:LogicalJoin.(left=LogicalTableScan#1,right=LogicalAggregate#114,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPJoinFlatmapOperator 4616(1118) + let stream4616: Stream< + _, + WSet< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream1181.join_flatmap( + &stream4612, + move |t_11: &Tup0, + t_8: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + t_9: &Tup1>>| + -> Option< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + > { + let tmp: Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + > = Tup22::new( + (*t_8).0, + (*t_8).1, + (*t_8).2, + (*t_8).3.clone(), + (*t_8).4.clone(), + (*t_8).5.clone(), + (*t_8).6.clone(), + (*t_8).7.clone(), + (*t_8).8.clone(), + (*t_8).9.clone(), + (*t_8).10.clone(), + (*t_8).11.clone(), + (*t_8).12, + (*t_8).13.clone(), + (*t_8).14.clone(), + (*t_8).15.clone(), + (*t_8).16.clone(), + (*t_8).17.clone(), + (*t_8).18, + (*t_8).19, + (*t_8).20.clone(), + (*t_9).0.clone(), + ); + (if wrap_bool(eq_i32N_i32N( + plus_i32N_i32N(plus_i32N_i32N(tmp.0, tmp.2), tmp.1), + index__N_( + tmp.21.clone(), + cast_to_u_i32(plus_i32_i32( + div_i32_i32(cardinality(tmp.21.clone()), 2i32), + 1i32, + )) - 1, + ), + )) { + Some(tmp) + } else { + None::< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + > + }) + }, + ); + // rel#118:LogicalProject.(input=LogicalJoin#116,exprs=[$3, $4, $0, $6, $7, $8, $9, $10, $11, $13, $14, $15, $16, $12]) + // DBSPMapOperator 4618(1121) + let stream4618: Stream< + _, + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream4616.map( + move |t_13: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >| + -> Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + > { + Tup14::new( + (*t_13).3.clone(), + (*t_13).4.clone(), + (*t_13).0, + (*t_13).6.clone(), + (*t_13).7.clone(), + (*t_13).8.clone(), + (*t_13).9.clone(), + (*t_13).10.clone(), + (*t_13).11.clone(), + (*t_13).13.clone(), + (*t_13).14.clone(), + (*t_13).15.clone(), + (*t_13).16.clone(), + (*t_13).12, + ) + }, + ); + // CREATE VIEW `CUST_BYNAME_INLINED` AS + // SELECT `C`.`C_FIRST`, `C`.`C_MIDDLE`, `C`.`C_ID`, `C`.`C_STREET_1`, `C`.`C_STREET_2`, `C`.`C_CITY`, `C`.`C_STATE`, `C`.`C_ZIP`, `C`.`C_PHONE`, `C`.`C_CREDIT`, `C`.`C_CREDIT_LIM`, `C`.`C_DISCOUNT`, `C`.`C_BALANCE`, `C`.`C_SINCE` + // FROM `schema`.`CUSTOMER` AS `C`, + // (SELECT ARRAY_AGG(`EXPR$0`.`C_ID` + `EXPR$0`.`C_W_ID` + `EXPR$0`.`C_D_ID` ORDER BY `EXPR$0`.`C_FIRST`) AS `CUST_ARRAY` + // FROM (SELECT `C`.`C_ID`, `C`.`C_W_ID`, `C`.`C_D_ID`, `C`.`C_FIRST` + // FROM `schema`.`CUSTOMER` AS `C` + // WHERE `C`.`C_LAST` = 'lastname' AND `C`.`C_D_ID` = 43 AND `C`.`C_W_ID` = 44 + // ORDER BY `C_FIRST`) AS `EXPR$0`) AS `A` + // WHERE `C`.`C_ID` + `C`.`C_W_ID` + `C`.`C_D_ID` = `A`.`CUST_ARRAY`[ARRAY_LENGTH(`A`.`CUST_ARRAY`) / 2 + 1] + // DBSPSinkOperator 4621(1036) + let handle4621 = stream4618.output(); + + Ok(( + handle49, handle67, handle120, handle143, handle166, handle279, handle337, handle4621, + )) + })?; + Ok((circuit, streams)) +} diff --git a/incremental_transactions/tpcc/src/datatypes.rs b/incremental_transactions/tpcc/src/datatypes.rs new file mode 100644 index 000000000..7112f8a24 --- /dev/null +++ b/incremental_transactions/tpcc/src/datatypes.rs @@ -0,0 +1,28 @@ +#![allow(non_snake_case)] + +use dbsp::declare_tuples; +use sqlvalue::*; + +declare_tuples! { + Tup21, + Tup22, + Tup14, +} + +pipeline_types::deserialize_without_context!( + Tup21, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, + T19, T20 +); +pipeline_types::deserialize_without_context!( + Tup22, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, + T19, T20, T21 +); +pipeline_types::deserialize_without_context!( + Tup14, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 +); + +sqlvalue::to_sql_row_impl! { + Tup21, + Tup22, + Tup14, +} diff --git a/incremental_transactions/tpcc/src/lib.rs b/incremental_transactions/tpcc/src/lib.rs index 4c37cf959..ff5da0091 100644 --- a/incremental_transactions/tpcc/src/lib.rs +++ b/incremental_transactions/tpcc/src/lib.rs @@ -1,5 +1,13 @@ +pub mod byname_max_sql; +pub mod byname_max_sql_incremental; pub mod byname_sql; +pub mod byname_sql_constargs; +pub mod byname_sql_constargs_inlined; pub mod byname_sql_incremental; +pub mod byname_sql_incremental_constargs; +pub mod byname_sql_incremental_constargs_inlined; +pub mod byname_sql_incremental_constargs_inlined_minimized; +pub mod datatypes; pub mod payment_sql; pub mod payment_sql_incremental; @@ -79,36 +87,6 @@ mod test { out_cust_agg, out_cust_byname, ) = handles; - in_customer.push( - ( - Some(1), - Some(43), - Some(44), - Some("Alice"), - None, - Some("Public"), - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - ) - .into(), - 1, - ); - circuit.step().unwrap(); } - - fn customer(id: i32, w_id: i32, }