@aztec/noir-protocol-circuits-types 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/README.md +1 -0
  2. package/dest/index.d.ts +69 -0
  3. package/dest/index.d.ts.map +1 -0
  4. package/dest/index.js +268 -0
  5. package/dest/scripts/generate_ts_from_abi.d.ts +2 -0
  6. package/dest/scripts/generate_ts_from_abi.d.ts.map +1 -0
  7. package/dest/scripts/generate_ts_from_abi.js +180 -0
  8. package/dest/target/private_kernel_init.json +1 -0
  9. package/dest/target/private_kernel_init_simulated.json +1 -0
  10. package/dest/target/private_kernel_inner.json +1 -0
  11. package/dest/target/private_kernel_inner_simulated.json +1 -0
  12. package/dest/target/private_kernel_tail.json +1 -0
  13. package/dest/target/private_kernel_tail_simulated.json +1 -0
  14. package/dest/target/public_kernel_app_logic.json +1 -0
  15. package/dest/target/public_kernel_app_logic_simulated.json +1 -0
  16. package/dest/target/public_kernel_setup.json +1 -0
  17. package/dest/target/public_kernel_setup_simulated.json +1 -0
  18. package/dest/target/rollup_base.json +1 -0
  19. package/dest/target/rollup_base_simulated.json +1 -0
  20. package/dest/target/rollup_merge.json +1 -0
  21. package/dest/target/rollup_root.json +1 -0
  22. package/dest/type_conversion.d.ts +574 -0
  23. package/dest/type_conversion.d.ts.map +1 -0
  24. package/dest/type_conversion.js +1115 -0
  25. package/dest/types/private_kernel_init_types.d.ts +232 -0
  26. package/dest/types/private_kernel_init_types.d.ts.map +1 -0
  27. package/dest/types/private_kernel_init_types.js +3 -0
  28. package/dest/types/private_kernel_inner_types.d.ts +233 -0
  29. package/dest/types/private_kernel_inner_types.d.ts.map +1 -0
  30. package/dest/types/private_kernel_inner_types.js +3 -0
  31. package/dest/types/private_kernel_tail_types.d.ts +182 -0
  32. package/dest/types/private_kernel_tail_types.d.ts.map +1 -0
  33. package/dest/types/private_kernel_tail_types.js +3 -0
  34. package/dest/types/public_kernel_app_logic_types.d.ts +212 -0
  35. package/dest/types/public_kernel_app_logic_types.d.ts.map +1 -0
  36. package/dest/types/public_kernel_app_logic_types.js +3 -0
  37. package/dest/types/public_kernel_setup_types.d.ts +212 -0
  38. package/dest/types/public_kernel_setup_types.d.ts.map +1 -0
  39. package/dest/types/public_kernel_setup_types.js +3 -0
  40. package/dest/types/rollup_base_types.d.ts +220 -0
  41. package/dest/types/rollup_base_types.d.ts.map +1 -0
  42. package/dest/types/rollup_base_types.js +3 -0
  43. package/dest/types/rollup_merge_types.d.ts +71 -0
  44. package/dest/types/rollup_merge_types.d.ts.map +1 -0
  45. package/dest/types/rollup_merge_types.js +3 -0
  46. package/dest/types/rollup_root_types.d.ts +92 -0
  47. package/dest/types/rollup_root_types.d.ts.map +1 -0
  48. package/dest/types/rollup_root_types.js +3 -0
  49. package/package.json +60 -0
  50. package/src/fixtures/nested-call-private-kernel-init.hex +1 -0
  51. package/src/fixtures/nested-call-private-kernel-inner.hex +1 -0
  52. package/src/fixtures/nested-call-private-kernel-ordering.hex +1 -0
  53. package/src/index.ts +438 -0
  54. package/src/scripts/generate_ts_from_abi.ts +233 -0
  55. package/src/target/private_kernel_init.json +1 -0
  56. package/src/target/private_kernel_init_simulated.json +1 -0
  57. package/src/target/private_kernel_inner.json +1 -0
  58. package/src/target/private_kernel_inner_simulated.json +1 -0
  59. package/src/target/private_kernel_tail.json +1 -0
  60. package/src/target/private_kernel_tail_simulated.json +1 -0
  61. package/src/target/public_kernel_app_logic.json +1 -0
  62. package/src/target/public_kernel_app_logic_simulated.json +1 -0
  63. package/src/target/public_kernel_setup.json +1 -0
  64. package/src/target/public_kernel_setup_simulated.json +1 -0
  65. package/src/target/rollup_base.json +1 -0
  66. package/src/target/rollup_base_simulated.json +1 -0
  67. package/src/target/rollup_merge.json +1 -0
  68. package/src/target/rollup_root.json +1 -0
  69. package/src/type_conversion.ts +1673 -0
  70. package/src/types/private_kernel_init_types.ts +272 -0
  71. package/src/types/private_kernel_inner_types.ts +273 -0
  72. package/src/types/private_kernel_tail_types.ts +214 -0
  73. package/src/types/public_kernel_app_logic_types.ts +250 -0
  74. package/src/types/public_kernel_setup_types.ts +250 -0
  75. package/src/types/rollup_base_types.ts +259 -0
  76. package/src/types/rollup_merge_types.ts +85 -0
  77. package/src/types/rollup_root_types.ts +109 -0
@@ -0,0 +1 @@
1
+ { "noir_version": "0.23.0+5f5843e35052b9d3599b8ab4f7633db0a225e82f", "hash": 15496946236088334197, "abi": { "parameters": [{ "name": "input", "type": { "kind": "struct", "path": "public_kernel_lib::public_kernel_setup::PublicKernelSetupCircuitPrivateInputs", "fields": [{ "name": "previous_kernel", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::kernel_data::PublicKernelData", "fields": [{ "name": "public_inputs", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::kernel_circuit_public_inputs::PublicKernelCircuitPublicInputs", "fields": [{ "name": "aggregation_object", "type": { "kind": "struct", "path": "public_kernel_lib::types::mocked::AggregationObject", "fields": [] } }, { "name": "end_non_revertible", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::combined_accumulated_data::AccumulatedNonRevertibleData", "fields": [{ "name": "new_commitments", "type": { "kind": "array", "length": 8, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::side_effect::SideEffect", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "new_nullifiers", "type": { "kind": "array", "length": 8, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::side_effect::SideEffectLinkedToNoteHash", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "note_hash", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "public_call_stack", "type": { "kind": "array", "length": 2, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::call_request::CallRequest", "fields": [{ "name": "hash", "type": { "kind": "field" } }, { "name": "caller_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "caller_context", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::call_request::CallerContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }, { "name": "start_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }, { "name": "end_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }] } }, { "name": "end", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::combined_accumulated_data::CombinedAccumulatedData", "fields": [{ "name": "read_requests", "type": { "kind": "array", "length": 128, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::side_effect::SideEffect", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "nullifier_key_validation_requests", "type": { "kind": "array", "length": 4, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::nullifier_key_validation_request::NullifierKeyValidationRequestContext", "fields": [{ "name": "public_key", "type": { "kind": "struct", "path": "public_kernel_lib::types::grumpkin_point::GrumpkinPoint", "fields": [{ "name": "x", "type": { "kind": "field" } }, { "name": "y", "type": { "kind": "field" } }] } }, { "name": "secret_key", "type": { "kind": "struct", "path": "public_kernel_lib::types::grumpkin_private_key::GrumpkinPrivateKey", "fields": [{ "name": "high", "type": { "kind": "field" } }, { "name": "low", "type": { "kind": "field" } }] } }, { "name": "contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } } }, { "name": "new_commitments", "type": { "kind": "array", "length": 64, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::side_effect::SideEffect", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "new_nullifiers", "type": { "kind": "array", "length": 64, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::side_effect::SideEffectLinkedToNoteHash", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "note_hash", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "private_call_stack", "type": { "kind": "array", "length": 8, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::call_request::CallRequest", "fields": [{ "name": "hash", "type": { "kind": "field" } }, { "name": "caller_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "caller_context", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::call_request::CallerContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }, { "name": "start_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }, { "name": "end_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "public_call_stack", "type": { "kind": "array", "length": 8, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::call_request::CallRequest", "fields": [{ "name": "hash", "type": { "kind": "field" } }, { "name": "caller_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "caller_context", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::call_request::CallerContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }, { "name": "start_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }, { "name": "end_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "encrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "unencrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "encrypted_log_preimages_length", "type": { "kind": "field" } }, { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } }, { "name": "new_contracts", "type": { "kind": "array", "length": 1, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::new_contract_data::NewContractData", "fields": [{ "name": "contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "contract_class_id", "type": { "kind": "struct", "path": "public_kernel_lib::types::contract_class::ContractClassId", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } } }, { "name": "public_data_update_requests", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::public_data_update_request::PublicDataUpdateRequest", "fields": [{ "name": "leaf_slot", "type": { "kind": "field" } }, { "name": "new_value", "type": { "kind": "field" } }] } } }, { "name": "public_data_reads", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::public_data_read::PublicDataRead", "fields": [{ "name": "leaf_slot", "type": { "kind": "field" } }, { "name": "value", "type": { "kind": "field" } }] } } }] } }, { "name": "constants", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::combined_constant_data::CombinedConstantData", "fields": [{ "name": "historical_header", "type": { "kind": "struct", "path": "public_kernel_lib::types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "state", "type": { "kind": "struct", "path": "public_kernel_lib::types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "partial", "type": { "kind": "struct", "path": "public_kernel_lib::types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "nullifier_tree", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "contract_tree", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "public_data_tree", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }] } }] } }, { "name": "global_variables", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::global_variables::GlobalVariables", "fields": [{ "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }, { "name": "block_number", "type": { "kind": "field" } }, { "name": "timestamp", "type": { "kind": "field" } }, { "name": "coinbase", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "tx_context", "type": { "kind": "struct", "path": "public_kernel_lib::types::transaction::context::TxContext", "fields": [{ "name": "is_fee_payment_tx", "type": { "kind": "boolean" } }, { "name": "is_rebate_payment_tx", "type": { "kind": "boolean" } }, { "name": "is_contract_deployment_tx", "type": { "kind": "boolean" } }, { "name": "contract_deployment_data", "type": { "kind": "struct", "path": "public_kernel_lib::types::contrakt::deployment_data::ContractDeploymentData", "fields": [{ "name": "public_key", "type": { "kind": "struct", "path": "public_kernel_lib::types::grumpkin_point::GrumpkinPoint", "fields": [{ "name": "x", "type": { "kind": "field" } }, { "name": "y", "type": { "kind": "field" } }] } }, { "name": "initialization_hash", "type": { "kind": "field" } }, { "name": "contract_class_id", "type": { "kind": "struct", "path": "public_kernel_lib::types::contract_class::ContractClassId", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "contract_address_salt", "type": { "kind": "field" } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }, { "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }] } }] } }, { "name": "is_private", "type": { "kind": "boolean" } }] } }, { "name": "proof", "type": { "kind": "struct", "path": "public_kernel_lib::types::mocked::Proof", "fields": [] } }, { "name": "vk", "type": { "kind": "struct", "path": "public_kernel_lib::types::mocked::VerificationKey", "fields": [] } }, { "name": "vk_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }, { "name": "vk_path", "type": { "kind": "array", "length": 3, "type": { "kind": "field" } } }] } }, { "name": "public_call", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::public_call_data::PublicCallData", "fields": [{ "name": "call_stack_item", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::public_call_stack_item::PublicCallStackItem", "fields": [{ "name": "contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "public_inputs", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs", "fields": [{ "name": "call_context", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::call_context::CallContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "function_selector", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::function_selector::FunctionSelector", "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "is_delegate_call", "type": { "kind": "boolean" } }, { "name": "is_static_call", "type": { "kind": "boolean" } }, { "name": "is_contract_deployment", "type": { "kind": "boolean" } }, { "name": "start_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "args_hash", "type": { "kind": "field" } }, { "name": "return_values", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } }, { "name": "contract_storage_update_requests", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "public_kernel_lib::types::contrakt::storage_update_request::StorageUpdateRequest", "fields": [{ "name": "storage_slot", "type": { "kind": "field" } }, { "name": "new_value", "type": { "kind": "field" } }] } } }, { "name": "contract_storage_reads", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "public_kernel_lib::types::contrakt::storage_read::StorageRead", "fields": [{ "name": "storage_slot", "type": { "kind": "field" } }, { "name": "current_value", "type": { "kind": "field" } }] } } }, { "name": "public_call_stack_hashes", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } }, { "name": "new_commitments", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::side_effect::SideEffect", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "new_nullifiers", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::side_effect::SideEffectLinkedToNoteHash", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "note_hash", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "unencrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } }, { "name": "historical_header", "type": { "kind": "struct", "path": "public_kernel_lib::types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "state", "type": { "kind": "struct", "path": "public_kernel_lib::types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "partial", "type": { "kind": "struct", "path": "public_kernel_lib::types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "nullifier_tree", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "contract_tree", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "public_data_tree", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }] } }] } }, { "name": "global_variables", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::global_variables::GlobalVariables", "fields": [{ "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }, { "name": "block_number", "type": { "kind": "field" } }, { "name": "timestamp", "type": { "kind": "field" } }, { "name": "coinbase", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "prover_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }, { "name": "function_data", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::function_data::FunctionData", "fields": [{ "name": "selector", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::function_selector::FunctionSelector", "fields": [{ "name": "inner", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "is_internal", "type": { "kind": "boolean" } }, { "name": "is_private", "type": { "kind": "boolean" } }, { "name": "is_constructor", "type": { "kind": "boolean" } }] } }, { "name": "is_execution_request", "type": { "kind": "boolean" } }] } }, { "name": "public_call_stack", "type": { "kind": "array", "length": 4, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::call_request::CallRequest", "fields": [{ "name": "hash", "type": { "kind": "field" } }, { "name": "caller_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "caller_context", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::call_request::CallerContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }, { "name": "start_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }, { "name": "end_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "proof", "type": { "kind": "struct", "path": "public_kernel_lib::types::mocked::Proof", "fields": [] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "bytecode_hash", "type": { "kind": "field" } }] } }] }, "visibility": "private" }], "param_witnesses": { "input": [{ "start": 0, "end": 1074 }] }, "return_type": { "abi_type": { "kind": "struct", "path": "public_kernel_lib::types::abis::kernel_circuit_public_inputs::PublicKernelCircuitPublicInputs", "fields": [{ "name": "aggregation_object", "type": { "kind": "struct", "path": "public_kernel_lib::types::mocked::AggregationObject", "fields": [] } }, { "name": "end_non_revertible", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::combined_accumulated_data::AccumulatedNonRevertibleData", "fields": [{ "name": "new_commitments", "type": { "kind": "array", "length": 8, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::side_effect::SideEffect", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "new_nullifiers", "type": { "kind": "array", "length": 8, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::side_effect::SideEffectLinkedToNoteHash", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "note_hash", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "public_call_stack", "type": { "kind": "array", "length": 2, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::call_request::CallRequest", "fields": [{ "name": "hash", "type": { "kind": "field" } }, { "name": "caller_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "caller_context", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::call_request::CallerContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }, { "name": "start_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }, { "name": "end_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }] } }, { "name": "end", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::combined_accumulated_data::CombinedAccumulatedData", "fields": [{ "name": "read_requests", "type": { "kind": "array", "length": 128, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::side_effect::SideEffect", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "nullifier_key_validation_requests", "type": { "kind": "array", "length": 4, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::nullifier_key_validation_request::NullifierKeyValidationRequestContext", "fields": [{ "name": "public_key", "type": { "kind": "struct", "path": "public_kernel_lib::types::grumpkin_point::GrumpkinPoint", "fields": [{ "name": "x", "type": { "kind": "field" } }, { "name": "y", "type": { "kind": "field" } }] } }, { "name": "secret_key", "type": { "kind": "struct", "path": "public_kernel_lib::types::grumpkin_private_key::GrumpkinPrivateKey", "fields": [{ "name": "high", "type": { "kind": "field" } }, { "name": "low", "type": { "kind": "field" } }] } }, { "name": "contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } } }, { "name": "new_commitments", "type": { "kind": "array", "length": 64, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::side_effect::SideEffect", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "new_nullifiers", "type": { "kind": "array", "length": 64, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::side_effect::SideEffectLinkedToNoteHash", "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "note_hash", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "private_call_stack", "type": { "kind": "array", "length": 8, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::call_request::CallRequest", "fields": [{ "name": "hash", "type": { "kind": "field" } }, { "name": "caller_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "caller_context", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::call_request::CallerContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }, { "name": "start_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }, { "name": "end_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "public_call_stack", "type": { "kind": "array", "length": 8, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::call_request::CallRequest", "fields": [{ "name": "hash", "type": { "kind": "field" } }, { "name": "caller_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "caller_context", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::call_request::CallerContext", "fields": [{ "name": "msg_sender", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "storage_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }, { "name": "start_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }, { "name": "end_side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } } }, { "name": "new_l2_to_l1_msgs", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "encrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "unencrypted_logs_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "encrypted_log_preimages_length", "type": { "kind": "field" } }, { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } }, { "name": "new_contracts", "type": { "kind": "array", "length": 1, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::new_contract_data::NewContractData", "fields": [{ "name": "contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "contract_class_id", "type": { "kind": "struct", "path": "public_kernel_lib::types::contract_class::ContractClassId", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } } }, { "name": "public_data_update_requests", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::public_data_update_request::PublicDataUpdateRequest", "fields": [{ "name": "leaf_slot", "type": { "kind": "field" } }, { "name": "new_value", "type": { "kind": "field" } }] } } }, { "name": "public_data_reads", "type": { "kind": "array", "length": 16, "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::public_data_read::PublicDataRead", "fields": [{ "name": "leaf_slot", "type": { "kind": "field" } }, { "name": "value", "type": { "kind": "field" } }] } } }] } }, { "name": "constants", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::combined_constant_data::CombinedConstantData", "fields": [{ "name": "historical_header", "type": { "kind": "struct", "path": "public_kernel_lib::types::header::Header", "fields": [{ "name": "last_archive", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "body_hash", "type": { "kind": "array", "length": 2, "type": { "kind": "field" } } }, { "name": "state", "type": { "kind": "struct", "path": "public_kernel_lib::types::state_reference::StateReference", "fields": [{ "name": "l1_to_l2_message_tree", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "partial", "type": { "kind": "struct", "path": "public_kernel_lib::types::partial_state_reference::PartialStateReference", "fields": [{ "name": "note_hash_tree", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "nullifier_tree", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "contract_tree", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }, { "name": "public_data_tree", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot", "fields": [{ "name": "root", "type": { "kind": "field" } }, { "name": "next_available_leaf_index", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }] } }] } }] } }, { "name": "global_variables", "type": { "kind": "struct", "path": "public_kernel_lib::types::abis::global_variables::GlobalVariables", "fields": [{ "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }, { "name": "block_number", "type": { "kind": "field" } }, { "name": "timestamp", "type": { "kind": "field" } }, { "name": "coinbase", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "fee_recipient", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::AztecAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }] } }, { "name": "tx_context", "type": { "kind": "struct", "path": "public_kernel_lib::types::transaction::context::TxContext", "fields": [{ "name": "is_fee_payment_tx", "type": { "kind": "boolean" } }, { "name": "is_rebate_payment_tx", "type": { "kind": "boolean" } }, { "name": "is_contract_deployment_tx", "type": { "kind": "boolean" } }, { "name": "contract_deployment_data", "type": { "kind": "struct", "path": "public_kernel_lib::types::contrakt::deployment_data::ContractDeploymentData", "fields": [{ "name": "public_key", "type": { "kind": "struct", "path": "public_kernel_lib::types::grumpkin_point::GrumpkinPoint", "fields": [{ "name": "x", "type": { "kind": "field" } }, { "name": "y", "type": { "kind": "field" } }] } }, { "name": "initialization_hash", "type": { "kind": "field" } }, { "name": "contract_class_id", "type": { "kind": "struct", "path": "public_kernel_lib::types::contract_class::ContractClassId", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }, { "name": "contract_address_salt", "type": { "kind": "field" } }, { "name": "portal_contract_address", "type": { "kind": "struct", "path": "public_kernel_lib::types::address::EthAddress", "fields": [{ "name": "inner", "type": { "kind": "field" } }] } }] } }, { "name": "chain_id", "type": { "kind": "field" } }, { "name": "version", "type": { "kind": "field" } }] } }] } }, { "name": "is_private", "type": { "kind": "boolean" } }] }, "visibility": "public" }, "return_witnesses": [1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2354, 2355, 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385, 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422, 2423, 2424, 2425, 2426, 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, 2435, 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, 2444, 2445, 2446, 2447, 2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2472, 2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2527, 2528, 2529, 2530, 2531, 2532, 2533, 2534, 2535, 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2545, 2546, 2547, 2548, 2549, 2550, 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2558, 2559, 2560, 2561, 2562, 2563, 2564, 2565, 2566, 2567, 2568, 2569, 2570, 2571, 2572, 2573, 2574, 2575, 2576, 2577, 2578, 2579, 2580, 2581, 2582, 2583, 2584, 2585, 2586, 2587, 2588, 2589, 2590, 2591, 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603, 2604, 2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2618, 2619, 2620, 2621, 2622, 2623, 2624, 2625, 2626, 2627, 2628, 2629, 2630, 2631, 2632, 2633, 2634, 2635, 2636, 2637, 2638, 2639, 2640, 2641, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675, 2676, 2677, 2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, 2686, 2687, 2688, 2689, 2690, 2691, 2692, 2693, 2694, 2695, 2696, 2697, 2698, 2699, 2700, 2701, 2702, 2703, 2704, 2705, 2706, 2707, 2708, 2709, 2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2722, 2723, 2724, 2725, 2726, 2727, 2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735, 2736, 2737, 2738, 2739, 2740, 2741, 2742, 2743, 2744, 2745, 2746, 2747, 2748, 2749, 2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2758, 2759, 2760, 2761, 2762, 2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2772, 2773, 2774, 2775] }, "bytecode": "H4sIAAAAAAAA/+ydB5gV1fnGZ5GmF0RAsCCyCIgN2F16k5XOwgJL79Xee+8lxtg1RZOoSYxJ1ERj7EmMLcaW3pup/yT23gv+z9z9vuy7354LXDPncg++8zzfs+e899w5v/PON+fOnTsz+7utkmTeFkl+Sf+sbiwmFS62SZovFfK3Vv5W/W9LdYbrqgrFWBEBY6sIGLeIgLF1BIxtImBsGwFjuwgY20fAuGUEjFtFwJiLgLFDBIwdI2DcOgLGThkypmzbJ82XrHm3icDTzhEwdomAsWsEjNtGwNgtAsbuETBuFwHj9hEw7hAB444RMPaIgHGnCBh7RsC4cwSMvSJgrIyAsXcEjLtEwNgnAsa+ETD2i4Bx1wgY+2fImLJ1SJovWfPuFoGnu0fAuEcEjHtGwLhXBIwDImAcGAHjoAgYqyJgrI6AsSYCxsFJtp/d/wUMxDskAk+HRsA4LALG4REwjoiAcWQEjKMiYBwdAeOYCBjHRsC4dwSM4yJgrI2AcZ8IGMdHwDghAsaJETBOioBxcgSMUyJgnBoB47QIGOsiYJweAeOMCBjrI2CcGQHjrAgYZ0fA2BAB45wIGOdGwDgvAsb5ETAuiIBxYQSMiyJgXBwB45IIGJdGwLgsAsblETCuiIBxZQSMqyJgXB0B45oIGNdGwLhvBIz7RcC4fwSMB0TAeGAEjAdFwHhwBIyHRMB4aASMh0XAeHgEjEdEwHhkBIxHRcB4dASMx0TAeGwEjMdFwHh8BIwnRMB4YgSMJ0XAeHIEjKdEwHhqBIynRcB4egSMZ0TAeGYEjGdFwHh2BIznRMB4bgSM50XA+IkIGM+PgPGTETBeEAHjpyJgvDACxosiYLw4AsZLImC8NALGyyJgvDwCxisiYLwyAsZPR8D4mQgYPxsB4+ciYLwqAsarI2D8fASMX4iA8YsRMF4TAeO1ETBeFwHjlyJg/HIEjF+JgPH6CBi/GgHjDREwfi0Cxq9HwPiNCBhvjIDxpggYb46A8ZsRMH4rAsZbImC8NQLGb0fAeFsEjN+JgPH2CBjviIDxzggY74qA8e4IGO+JgPHeCBi/GwHj9yJg/H4EjPdFwPiDCBjvj4DxgQgYH4yA8aEIGB+OgPGHETA+EgHjjyJgfDQCxsciYHw8AsYnImB8MgLGH0fA+JMIGH8aAePPImD8eQSMv4iA8ZcRMP4qAsZfR8D4mwgYfxsB4+8iYPx9BIx/iIDxjxEw/ikCxj9HwPhUBIx/iYDxrxEw/i0Cxr9HwPiPCBj/GQHj/0XA+K8IGP8dAeN/ImB8OgLGZyJgfDYCxuciYHw+AsYXImB8MQLGlyJgfDkCxlciYHw1AsbXImB8PQLGNyJgfDMCxrciYHw7AsZ3ImB8NwLG9yJgfD8Cxg8iYFwXAeOHETCmKyx3xooIGFtFwLhFBIytI2BsEwFj2wgY20XA2D4Cxi0jYNwqAsZcBIwdImDsGAHj1hEwdoqAcZsIGDtHwNglAsauETBuGwFjtwgYu0fAuF0EjNtHwLhDBIw7RsDYIwLGnSJg7BkB484RMPaKgLEyAsbeETDuEgFjnwgY+0bA2C8Cxl0jYOwfAeNuETDuHgHjHhEw7hkB414RMA6IgHFgBIyDImCsioCxOgLGmggYB2fImLJtmzRfsuYdEoGnQyNgHBYB4/AIGEdEwDgyAsZRETCOjoBxTASMYyNg3DsCxnERMNZGwLhPBIzjI2CcEAHjxAgYJ0XAODkCxikZf7c5M2m+ZM07NQJPp0XAWBcB4/QIGGdEwFgfAePMCBhnRcA4OwLGhggY50TAODcCxnkRMM6PgHFBBIwLI2BcFAHj4ggYl0TAuDQCxmURMC6PgHFFBIwrI2BcFQHj6ggY10TAuDYCxn0jYNwvAsb9I2A8IALGAyNgPCgCxoMjYDwkAsZDI2A8LALGwyNgPCICxiMjYDwqAsajI2A8JgLGYyNgPC4CxuMjYDwhAsYTI2A8KQLGkyNgPCUCxlMjYDwtAsbTI2A8IwLGMyNgPCsCxrMjYDwnAsZzI2A8LwLGT0TAeH4EjJ+MgPGCCBg/FQHjhREwXhQB48URMF4SAeOlETBeFgHj5REwXhEB45URMH46AsbPRMD42QgYPxcB41URMF4dAePnI2D8QgSMX4yA8ZoIGK+NgPG6CBi/FAHjlyNg/EoEjNdHwPjVCBhviIDxaxEwfj0Cxm9EwHhjBIw3RcB4cwSM34yA8VsRMN4SAeOtETB+OwLG2yJg/E4EjLdHwHhHBIx3RsB4VwSMd0fAeE8EjPdGwPjdCBi/FwHj9yNgvC8Cxh9EwHh/BIwPRMD4YASMD0XA+HAEjD+MgPGRCBh/FAHjoxkypmwPJM2XrHkfi8DTxyNgfCICxicjYPxxBIw/iYDxpxEw/iwCxp9HwPiLCBh/GQHjryJg/HUEjL+JgPG3ETD+LgLG30fA+IcIGP8YAeOfImD8cwSMT0XA+JcIGP8aAePfImD8ewSM/4iA8Z8RMP5fBIz/ioDx3xEw/icCxqcjYHwmAsZnI2B8LgLG5yNgfCECxhcjYHwpAsaXI2B8JQLGVyNgfC0CxtcjYHwjAsY3I2B8KwLGtyNgfCcCxncjYHwvAsb3I2D8IALGdREwfhgBY9Kq/BkrImBsFQHjFhEwto6AsU0EjG0jYGwXAWP7CBi3jIBxqwgYcxEwdoiAsWMEjFtHwNgpAsZtImDsHAFjlwgYu0bAuG0EjN0iYOweAeN2ETBuHwHjDhEw7hgBY48IGHeKgLFnBIw7R8DYKwLGyggYe0fAuEsEjH0iYOwbAWO/CBh3jYCxfwSMu0XAuHsEjHtEwLhnBIx7RcA4IALGgREwDoqAsSoCxuoIGGsiYBwcAeOQCBiHRsA4LALG4REwjoiAcWQEjKMiYBwdAeOYCBjHRsC4dwSM4yJgrI2AcZ8IGMdHwDghAsaJETBOioBxcgSMUyJgnBoB47QIGOsiYJweAeOMCBjrI2CcGQHjrAgYZ0fA2BAB45wIGOdGwDgvAsb5ETAuiIBxYQSMiyJgXBwB45IIGJdGwLgsAsblETCuiIBxZQSMqyJgXB0B45oIGNdGwLhvBIz7RcC4fwSMB0TAeGAEjAdFwHhwBIyHRMB4aASMh0XAeHgEjEdEwHhkBIxHRcB4dASMx0TAeGwEjMdFwHh8BIwnRMB4YgSMJ0XAeHIEjKdEwHhqBIynRcB4egSMZ0TAeGYEjGdFwHh2BIznRMB4bgSM50XA+IkIGM/PkDFl+y9oIN5PRuDpBREwfioCxgsjYLwoAsaLI2C8JALGSyNgvCwCxssjYLwiAsYrI2D8dASMn4mA8bMRMH4uAsarImC8OgLGz0fA+IUIGL8YAeM1ETBeGwHjdREwfikCxi9HwPiVCBivj4DxqxEw3hAB49ciYPx6BIzfiIDxxggYb4qA8eYIGL8ZAeO3ImC8JQLGWyNg/HYEjLdFwPidCBhvj4DxjggY74yA8a4IGO/OkLEUv2XfE4Gn90bA+N0IGL8XAeP3I2C8LwLGH0TAeH8EjA9EwPhgBIwPRcD4cASMP4yA8ZEIGH8UAeOjETA+FgHj4xEwPhEB45MRMP44AsafRMD40wgYfxYB488jYPxFBIy/jIDxVxEw/joCxt9EwPjbCBh/FwHj7yNg/EMEjH+MgPFPETD+OQLGpyJg/EsEjH+NgPFvETD+PQLGf0TA+M8IGP8vAsZ/RcD47wgY/5MhY8rWKmm+ZM37dASePhOZp89G4OlzkXn6fASevhCAMQTni5FwvpRxjm6RhM3RlyPI0VciYHw14+1emYTd7q9F4OnrETC+EQHjmxEwvhUB49sRML4TAeO7ETC+FwHj+xEwfhAB47oIGD+MgDE9WC13xooIGFtFwLhFBIytI2BsEwFj2wgY20XA2D4Cxi0jYNwqAsZcBIwdImDsGAHj1hEwdoqAcZsIGDtHwNglQ8ZSnIvsGoGn20bA2C0Cxu4RMG4XAeP2ETDuEAHjjhEw9oiAcacIGHtGwLhzBIy9ImCsjICxdwSMu0TA2CcCxr4RMPaLgHHXCBj7R8C4WwSMu0fAuEcEjHtGwLhXBIwDImAcGAHjoAgYqyJgrI6AsSYAYwjOwZFwDsn43G6rpPmSNe/QCHJ0WCTbfngknCMi4RwZCeeoSDhHR8I5JhLOsZFw7h0J57hIOGsj4dwnEs7xkXBOiIRzYiSckyLhnBwJ55RIOKdGwjktEs66SDinR8I5IxLO+kg4Z0bCOSsSztmRcDZEwjknEs65GZ9bDP3sgnkRnFucHwHjgkjyc2EknIsi4VwcCeeSSDiXRsK5LBLO5ZFwroiEc2UknKsyPg5pnTRfsuZdHcFn/JoIGNdGwLhvZPdW7ReBp/tHwHhABIwHRsB4UASMB0fAeEgEjIdGwHhYBIyHR8B4RASMR0bAeFQEjEdHwHhMBIzHRsB4XASMx0fAeEIEjCdGwHhSBIwnR8B4SgSMp0bAeFoEjKdHwHhGBIxnRsB4VgSMZ0fAeE4EjOdGdi7yvAg8/UQEjOdHwPjJCBgviIDxUxEwXhgB40URMF4cAeMlETBeGgHjZREwXh4B4xURMF4ZAeOnI2D8TASMn42A8XMRMF4VAePVETB+PgLGL0TA+MUIGK+JgPHaCBivi4DxSxEwfjkCxq9EwHh9BIxfjeya3Rsi8PRrETB+PQLGb0R2nvzGCDy9KQLGmyNg/GYEjN+KgPGWCBhvjYDx2xEw3hYB43ciYLw9AsY7ImC8MwLGuyJgvDsCxnsiYLw3AsbvRsD4vQgYvx8B430RMP4gAsb7I2B8IALGByNgfCgCxocjYPxhBIyPRMD4owgYH42A8bGMz0U2exBHAN7HI/D0iQgYn4yA8ccRMP4kAsafRsD4swgYfx4B4y8iYPxlBIy/ioDx1xEw/iYCxt9GwPi7CBh/HwHjHyJg/GMEjH+KgPHPETA+FQHjXyJg/GsEjH+LgPHvETD+IwLGf0bA+H8RMP4rAsZ/R8D4nwgYn46A8ZkIGJ+NgPG5CBifj4DxhQgYX4yA8aUIGF+OgPGVCBhfjYDxtQgYX4+A8Y0IGN+MgPGtCBjfzvi37FZJ8yVr3nci8PTdyDx9LwJP3w/AGILzg0g410XC+WFk+1J602vWvmbNWNE6jm3fKhLOLSLhbB0JZ5tIONtGwtkuEs72kXBuGQnnVpFw5iLh7BAJZ8dIOLeOhLNTJJzbRMLZORLOLpFwdo2Ec9tIOLtFwtk9Es7tMuRM2bZPmi9Z824fwXf4HSJg3DECxh4RMO4UAWPPCBh3joCxVwSMlREw9o6AcZcIGPtEwNg3AsZ+ETDuGgFj/wgYd4uAcfcIGPeIgHHPCBj3ioBxQASMAyNgHBTJOYGqSDirM+SsAsZtpFzj1j/YxRAXQ10MczHcxQgXI12McjHaxRgXY13s7WJcyuRin9aN69LzIeNdfYKLiS4muZjsYoqLqS6muahzMd3FDBf1Lma6mOVitosGF3NczHUxz8V8FwtcLHSxyMVi6auD9LXE1Ze6WOZiuYsVLla6WOVitYs1Lta62NfFfvJe3Tj7u/oBLg50cZCLg10c4uJQF4e5ONzFES6OdHGUi6NdHOPiWBfHuTjexQkuTnRxkouTXZzi4lQXp7k43cUZLs50cZaLs12c4+JcF+e5+ISL81180sUFLj7l4kIXF7m42MUlLi51cZmLy11c4eJKF5928RkXn3XxORdXubjaxeddfMHFF11c4+JaF9e5+JKLL7v4iovrXXzVxQ0uvubi6y6+4eJGFze5uNnFN118y8UtLm518W0Xt7n4jovbXdzh4k4Xd7m428U9Lu518V0X33PxfRf3ufiBi/tdPODiQRcPuXjYxQ9dPOLiRy4edfGYi8ddPOHiSRc/dvETFz918TMXP3fxCxe/dPErF7928RsXv3XxOxe/d/EHF3908ScXf3bxlIu/uPiri7+5+LuLf7j4p4v/c/EvF/928R8XT7t4xsWzLp5z8byLF1y86OIlFy+7eMXFqy5ec/G6izdcvOniLRdvu3jHxbsu3nPxvosPXKxz8aGLpI1LORetXGzhorWLNi7aumjnor2LLV1s5SLnooOLji62dtHJxTYuOrvo4qKri21ddHPR3cV2LrZ3sYOLHV30cLGTi54udnbRy0Wli94udnHRx0VfF/1c7Oqiv4vdXOzuYg8Xe7rYy8UAFwNdDHJR5aLaRY2LwS6GuBjqYpiL4S5GuBjpYpSL0S7GuBjrYm8X41zUutjHxXgXE1xMdDHJxWQXU1xMdTHNRZ2L6S5muKh3MdPFLBezXTS4mONirot5Lua7WOBioYtFLha7WOJiqYtlLpa7WOFipYtVLla7WONirYt9XezXpnEa2Fbmkf1d/QAXB7o4yMXBLg5xcaiLw1wc7uIIF0e6OMrF0S6OcXGsi+NcHO/iBBcnujhJ1n2mrPtkVz/FxakuTnNxuoszXJzp4iwXZ7s4x8W5Ls5z8QkX57v4pIsLXHzKxYUuLnJxsYtLXFzq4jIXl7u4wsWVLj7t4jMuPuvicy6ucnG1i8+7+IKLL7q4xsW1Lq5z8SUXX3bxFRfXu/iqixtcfM3F1118w8WNLm5ycbOLb7r4lotbXNzq4tsubnPxHRe3u7jDxZ0u7nJxt4t7XNzr4rsuvufi+y7uc/EDF/e7eMDFgy4ecvGwix+6eMTFj1w86uIxF4+7eMLFky5+7OInLn7q4mcufu7iFy5+6eJXLn7t4jcufuvidy5+7+IPLv7o4k8u/uziKRd/cfFXF39z8XcX/3DxTxf/5+JfLv7t4j8unnbxjItnXTzn4nkXL7h40cVLLl528YqLV1285uJ1F2+4eNPFWy7edvFOm8ZceEBy4V1Xf8/F+y4+cLHOxYcukraunYtWLrZw0dpFGxdtXbRz0d7Fli62cpFz0cFFRxdbu+jkYhsXnV10cdHVxbYuurno7mI7F9u72MHFji56uNjJRU8XO7vo5aLSRW8Xu7jo46Kvi34udnXR38VuLnZ3sYeLPV3s5WKAi4EuBrmoclHtosbFYBdDXAx1MczFcBcjXIx0McrFaBdjXIx1sbeLcS5qXezjYryLCS4mupjkYrKLKS6mupjmos7FdBczXNS7mOlilovZLhpczHEx18U8F/NdLHCx0MUiF4tdLHGx1MUyF8tdrHCx0sUqF6tdrHGx1sW+LvZzsb+LA1wc6OIgFwe7OMTFoS4Oc3G4iyNcHOniKBdHuzjGxbEujnNxvIsTXJzo4iQXJ7s4xcWpLk5zcbqLM1yc6eIsF2e7OMfFuS7Oc/EJF+e7+KSLC1x8ysWFLi5ycbGLS1xc6uIyF5e7uMLFlS4+7eIzLj7r4nMurnJxtYvPu/iCiy+6uMbFtS6uc/ElF1928RUX17v4qosbXHzNxdddfMPFjS5ucnGzi2+6+JaLW1zc6uLbLm5z8R0Xt7u4w8WdLu5ycbeLe1zc27ZxX9Djz++6+vdcfN/FfS5+4OJ+Fw+4eNDFQy4edvFDF4+4+JGLR1085uJxF0+4eNLFj138xMVPXfzMxc9d/MLFL138ysWvXfzGxW9d/M7F7138wcUfXfzJxZ9dPOXiLy7+6uJvLv7u4h8u/uni/1z8y8W/XfzHxdMunjFjedbVn3PxvIsXXLzo4iUXL7t4xcWrLl5z8bqLN1y86eItF2+7eMfFuy7ec/G+iw9crHPxoYuknevHRSsXW7ho7aKNi7Yu2rlo72JLF1u5yLno4KKji61ddHKxjYvOLrq46OpiWxfdXHR3sZ2L7V3s0K5xLHpN8o6u3sNoO7l6T6Pt7Oq92jWWK+Vvb2mzhbTZxdX7uOgreqXo/Vx9Vxf9XezmYncXe7jY08VeLga4GOhikIsqF9UualwMdjHExVAXw1wMdzHCxUgXo1yMdjHGxVgXe7sY56LWxT4uxruY4GKiYZnk6pNdTHEx1cU0F3UupruY4aLexUwXs1zMdtHgYo6LuS7muZjvYoGLhS4WuVjsYomLpS6WuVjuYoWLlS5WuVjtYo2LtS72Fd/2k7/7G48PcPUD5bWD5O/B8vcQ+Xuo/D1M/h4uf4+Qv0fK36Pk79Hy9xj5e6z8PU7+Hi9/T5C/J8rfk+TvyfL3FPl7qvw9Tf6eLn/PkL9nyt+z5O/Z8vcc+Xuu+/vU6Y3l9knTUplk9J13zYj0o+i//wiqpnXSbEm9rhBN/1aKvoXUtzB6G6m3MXo7qbcz+pZS39LoOannjN5R6h2N3knqnYzeRepdjN5N6t2Mvr3Utzd6D6n3MPrOUt/Z6L2l3tvofaXe1+j9pd7f6HtJfS+jD5D6AKPXmG2p+mCpDzb6UKkPNfpwqQ83+kipjzT6aKmPNvpYqY81+jipjzP6PlLfx+gTpD7B6JOkPsnoU6Q+xejTpD7N6NOlPt3o9VKvN/osqc8yeoPUG4w+V+pzjT5f6vONvlDqC42+WOqLjb5U6kuNvlzqy42+Uuorjb5a6quNvlbqa42+n9T3M/oBUj/A6AdJ/SCjHyL1Q4x+mNQPM/oRUj/C6EdJ/SijHyP1Y4x+nNSPM/oJUj/B6CdJ/SSjnyL1U4x+mtRPM/oZUj/D6GdJ/SyjnyP1c4x+ntTPM/r5Uj/f6BdI/QKjXyj1C41+sdQvNvqlUr/U6JdL/XKjXyn1K43+Gal/xuifk/rnjH611K82+hek/gWjXyP1a4x+ndSvM/qXpf5lo18v9euNfoPUbzD616X+daPfKPUbjX6z1G82+rek/i2j3yr1W41+m9RvM/rtUr/d6HdK/U6j3y31u41+r9TvNfr3pP49o98n9fuMfr/U7zf6g1J/0OgPS/1hoz8i9UeM/qjUHzX641J/3OhPSv1Jo/9E6j8x+s+k/jOj/0LqvzD6r6T+K6P/Ruq/MfrvpP47o/9B6n8w+p+k/iejPyX1p4z+V6n/1eh/l/rfjf5Pqf/T6P+S+r+M/h+p/8foz0j9GaM/J/XnjP6C1F8w+ktSf8nor0j9FaO/JvXXjP6G1N8w+ltSf8vo70j9HaO/J/X3jP6B1D8w+odS/9Do6fnwBP6qvoXUtzB6G6m3MXo7qbcz+pZS39LoOannjN5R6h2N3knqnYzeWeqdjd5V6l2N3k3q3Yy+ndS3M/oOUt/B6D2k3sPoPaXe0+i9pN7L6L2l3tvofaTex+j9pN7P6P2l3t/ou0t9d6PvKfU9jT5A6gOMPkjqg4xeLfVqow+W+mCjT5P6NKNPl/p0o9dLvd7os6Q+y+gNUm8w+lypzzX6fKnPN/pCqS80+mKpLzb6UqkvNfpyqS83+kqprzT6aqmvNvpaqa81+n5S38/oB0j9AKMfJPWDjH6I1A8x+mFSP8zoR0j9CKMfJfWjjH6M1I8x+nFSP87oJ0j9BKOfJPWTjH6K1E8x+mlSP83oZ0j9DKOfJfWzjH6O1M8x+nlSP8/o50v9fKNfIPULjH6h1C80+sVSv9jol0r9UqNfLvXLjX6l1K80+mek/hmjf07qnzP61VK/2uhfkPoXjH6N1K8x+nVSv87oX5b6l41+vdSvN/oNUr/B6F+X+teNfqPUbzT6zVK/2ejfkvq3jH6r1G81+m1Sv83ot0v9dqPfKfU7jX631O82+r1Sv9fo35P694x+n9TvM/r9Ur/f6A9K/UGjPyz1h43+iNQfMfqjUn/U6E9I/Qmj/0TqPzH6z6X+c6P/Suq/Mvpvpf5bo/9B6n8w+p+l/mej/1XqfzX6P6T+D6P/S+r/MvrTUn/a6M9J/Tmjvyj1F43+itRfMfrrUn/d6G9J/S2jvyv1d43+gdQ/MHrStrGuf1XfQupbGL2t1NsafUupb2n0DlLvYPROUu9k9C5S72L0blLvZvTtpb690XtIvYfRd5b6zkbvLfXeRu8r9b5G7y/1/kbfQ+p7GH2A1AcYvUrqVUYfLPXBRh8m9WFGHyn1kUYfI/UxRh8n9XFGHy/18UafJPVJRp8q9alGny716UafKfWZRm+QeoPR50l9ntEXSn2h0ZdIfYnRl0t9udFXSX2V0ddKfa3R95f6/kY/SOoHGf1QqR9q9COkfoTRj5b60UY/TurHGf1EqZ9o9FOkforRT5f66UY/S+pnGf1cqZ9r9POlfr7RL5L6RUa/WOoXG/0KqV9h9CulfqXRr5L6VUa/WupXG/1aqV9r9Oukfp3Rvyr1rxr9BqnfYPSbpH6T0W+W+s1G/7bUv23026R+m9HvkvpdRr9b6ncb/ftS/77R75P6fUZ/SOoPGf1hqT9s9Mek/pjRH5f640b/qdR/avSfSf1nRv+11H9t9N9I/TdG/6PU/2j0P0n9T0b/m9T/ZvS/S/3vRv+31P9t9P9I/T9GHyK/tepf1UdIfYTRR0l9lNHHSH2M0feW+t5Gr5V6rdGnSF3/Vog+VepTjT5N6tOMPkfqc4w+V+pzTb9Lpb7U6MukvsysZ7nUlxt9hdRXGH2l1Fea9d8k9ZuM/k2pf9Pot0j9FqN/W+rfNvp3pP4do98h9TuMfpfU7zL6PVK/x+jflfp3jf59qX/f6D+Q+g+M/oDUHzD6Q1J/yOg/lPoPjf4jqf/I6I9J/TGjPyn1J43+U6n/1Oi/kPovjP5rqf/a6L+T+u+M/kep/9HoT0n9KaP/Tep/M/o/pf5Po/9b6v82+jNSf8boz0v9eaO/JPWXjP6q1F81+htSf8Pob0v9baN/KPUPjb6FXPChf1VvI/U2Rm8n9XZG31LqWxo9J/Wc0btKvavRt5W6/tX9upvUuxm9u9S7G307qW9n9J2kvpPpt6fUexp9F6nvYvQ+Uu9j9N2kvpvRd5f67kYfKPWBRh8k9UGgt5fXtF4r5ar/ZRlSVZWud4us15s+xy357yU/GfJW53nbBOJtmzlvzYh0ve0C8bbPnHfwkHSdWwbi3Srr9Q5t5M0F4u2QOe+QfD50DMS7dea8a/O8nQLxbpP1eoeNyPN2DsTbJXPeNXneroF4t82cd788b7dAvN2z512drne7QLzbZ8+7Nl3vDgF40zlyR1nXi/JBl2o9RHtJtLT/nTIf1/75z+2eAcaVrnfn7HkHp+vtFYi3Muv1Dq/O8/YOlDe7yLoGt2vKmz6i6TmNtP++mY9r8NB0vf0CjWtXWddwGFd/0UaAtptoI0HbXbRRoO0h2mjQ9hRtDGh7iTYWtAGi7Q3aQNHGgTZItFrQ9D6YfUCrFm08aDWiTQBtsGgTQRsi2iTQhoo2GbRhok0BbbhoU0EbIdo00EaKVgfaKNGmgzZatBmgjRGtHrSxos0EbW/RZoE2TrTZoNWK1gDaPqLNAW28aHMh5yeIVplklfND88e0E7Ner+T8JFnXQhjXZNEWgTZFtMWgTRVtCWjTRFsKWp1oy0CbLtpy0GaItgK0etFWgjZTtFXg+6ys/Rk+LD83z856vTLnN2TPm58b5wTinZs574g877xAvPMz512d510QiHdh9rwj0/UuCsS7OHPetXneJYF4l2bOu3+ed1kg3uXZ865J17siAG86J6+UdX0A8/Qq0daBtlq0D2HuXpM104jG85hrs16vjHVfWVer9k3j2k+0LUDbX7TWoB0gWhvQDhStLWgHidYOtINFaw/aIaJtCdqhom0F2mGi5UA7XLQOoB0hWkfQjhRta9COEq0TaEeLtg1ox4jWGbRjResC2nGidQXteNG2Be0E0bqBdqJo3UE7STQ955/+OVm0yiSrPKvOn/84Jev1Sp6dquuCcZ0mWrX+9uLirVZNYxyf+RgH1wQ5rq1qPHc/KXvv8s8D12PYtrJu7UfHkfatx7QVGW437LtCQvtRvTWWZdsl0C5dVFbu9NzzRE87LI837+kIr0/0jLsy43FPApZKqGt/6e8071Q0cWSfq0NC5eoI5qqbrwvkqv6ut7nlarug8+rQ1WFytWotc9WxFchV/U13c8vVbkFzddiwILlaXcVjALcMLJCrcoi32eVqn5C5OjJQrlZVD2GuunPtBXJVr+XY3HK1OmiuDg90DDCC86pb6grkql7Hs7nl6rigubp/oFxdy1x1y6ICuarXcG1uuVofMldXrwmUq4OZq27Zv0Cu6vV7m1uuLg2aq/sxVzd+KTpXjy2Qq3rt5uaWqweFzNU11aHOWdUwV5Pk7AK5qtftbm65ekLYXF3LXN3opehcvaxAruo125tbrp4XNlf3Y65u9FJ0rl5bIFf1ev3NLVevlPGm1wtUys1Qeq1/Wu0tWg/gzT6nawL9Fls1mDmdJLcUyGm9V2Nzy+nrg86/NUPD5GoNv4O55fsFclXv09nccvW2oLk6hLm68UvRufpEgVytlL+bW67eD8cK+8lxwS5Jk7a/aH2AN/ucHjacx78bvRSd038skNN95e/mltM/g5w+SPJ316RJO1i0/qAdItpuoB0q2u6gHSbaHqAdLtqeoB0h2l6gHSnaANCOEm0gaEeLNgi0Y0SrAu1Y0apBO060GtCOF20waCeINgS0E0UbCtpJog0D7WTRhoN2imgjQDtVtJGgnSbaKNBOF200aGeINga0M0UbC9pZou0N2tmijQPtHNFqQTtXtH1ES3+/qJGLbubKQ1DS6tPyemWSbS7rcx903VrX/kL23cn03amEfXc2fXcuYd9dTd9dS9h3N9N3txL2vZ3pe7sS9r2D6XuHEvbd0/Tds4R99zJ99yph371N371L2Hc/03e/EvY92/Q9u4R9zzF9zylh3/NM3/NK2PcC0/eCEva9yPS9qIR9LzF9Lylh38tM38tK2PcK0/eKEva91vS9toR9n2L6PsXT9zPZ912Tgz50qTD1Sig/AzzPBuJ5pgieZ4HnuUA8zxbB8xzwPB+I57kieJ4Hnhey58nfS/p8ETwvAM+LgXheKILnReB5KRDPi0XwvAQ8L2fPk8+fl4rgeRl4Xgnkz8tF8LwCPK8G4nmlCJ5Xgee1QDyvFsHzGvC8HojntSJ4XgeeNwLxvF4EzxvA82YgnjeK4HkTeN7Knie/v79ZBM9bwPN2IH/eKoLnbeB5JxDP20XwvAM87wbieacInneB573sefL5824RPO8Bz/uB/HmvCJ73geeDQDzvF8HzAfCsC8TzQRE864Dnw0A864rg+RB4tGGGPPl8/rAIHn0x5anInifvjwVYH08F8LQKxFNRBE8r4NkiEE+rIni2AJ7WgXi2KIKnNfC0CcTTugieNsDTNhBPmyJ42gJPu0A8bYvgaQc87QPNP+2K4GkPPFsG8qd9ETxbAs9WgXi2LIJnK+DJBeLZqgieHPB0CMSTK4KnA/B0DMTToQiejsCzdSCejkXwbA08nQLxbF0ETyfg2SbQ/NOpCJ5tgKdzIH+2KYKnM/B0CcTTuQieLsDTNdD26lIET1fg2TYQT9cieLYFnm6Btte2RfB0A57ugXi6FcHTHXi2C7S9uhfBsx3wbB/In+2K4NkeeHYIxLN9ETw7AM+OgXh2KIJnR+DpEYhnxyJ4egDPToHyuUcRPDsBT89A/uxUBE9P4Nk5EE/PInh2Bp5egXh2LoKnF/BUBsqfXkXwVAJP70D+VBbB0xt4dgnE07sInl2Ap08gnl2K4OkDPH0D8fQpgqcv8PQLxNO3CJ5+wLNroP2rXxE8uwJP/0D+7FoET3/g2S0QT/8ieHYDnt0D8exWBM/uwLNHIJ7di+DZA3j2DMSzRxE8ewLPXoF49iyCZy/gGRCIZ68ieAYAz8BAPAOK4BkIPIMC8QwsgmcQ8FQF4hlUBE8V8FQH4qkqgqcaeGoC8VQXwVMDPIMD8dQUwTMYeIYE4hlcBM8Q4BkaiGdIETxDgWdYIJ6hRfAMA57hgXiGFcEzHHhGBOIZXgTPCOAZGYhnRBE8I4FnVCCekUXwjAKe0YF4RhXBMxp4xgTiGV0EzxjgGRuIZ0wRPGOBZ+9APGOL4NkbeMYF4tm7CJ5xwFMbiGdcETy1wLNPIJ7aInj2AZ7xgXj2KYJnfGCedJWF7mUuRd+F7mUuRd+F7mUuRd+F7mUuRd+F7mUuRd+F7mUuRd+F7mUuRd+F7mUuRd+F7mUuRd+9Td+9S9h3oXuZse+JmfddXZWDPnRZ3xw/EXgmBPAizDjl///IetdluN50HZPBMPVSx9ARXp8E3k0OlEcTK5pvN61PDtt33ocpG/BhiodlSol9QMaN5Z0UGS/9pb/0l/7SX/pLf+lvjP6mPE8b1hy0w2ehbEpG1SaAZ1Mz56kekTM86WKq+f50mRp4G4YZZ+P3iGkwMB3zVPB8mme/mhYoB6aaHNA6Mm6uvJPpL3kT5gN5mQ/k3TAv84G8zAfyFuJlPpCX+UDeQrzlkA8pzzOGNQft8Jm3m5JRtSngWV32PGtzhiddTDXfny51gbdhoHHmzztNh4HpmOvA8+me/Wp6oByoMzmgdWQkL3k/Cu9k8gblZf6Sl/PDx4s35XnWsOagHf5vgk3JqNo08GxG1jzVVVU5w5MupprvT5cZgbdhkHFWNR431sPAdMwzwPN6zzxQHygHZpgc0Doybizv5Mh46S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lvwn9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9Tegv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9LX9e+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0t/QvPSX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0t+E/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/ib0l/76eVOe5wxrDtrpa5uaUbXpoD0v75kE2gse7cWkpd8zMx9L9RD0TRdTzfeny8zA2z/MOKuq0nXMgoHpmGeC57M8++SsQPkz0+SP1pGRvOQlL3nJS17ykpe85CUveT+OvCnPS4Y1B+30tU3NqBqeB3g5ae5jqr3i0V71aK95tNc92htGS32YnbkPI6rQc11MNd+fLrMD506YcTaeL2iAgemYZ4PnDZ79oyFQ7s02uad1ZNxY3smR8dJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S38T+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+pvQX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tLfzcXflOdNw5qDdvrapmZUDZ9B/Za8B58P/bZHeydp6feczMeytgp908VU8/3pMifw9g8zzsZnRs+FgemY54Dncz375NxA+TPH5I/WkXFz5Z1Mf8mbMB/Iy3wg74Z5mQ/kZT6QtxAv84G8zAfyFuJlPpCX+UDeQrzMB/IyH8hbiJf5QF7mA3kL8TIfyMt8IG8hXuYDeZkP5C3Ey3wgL/OBvIV4mQ/kZT6QtxAv84G8zAfyFuJlPpCX+UDeQrzMB/IyH8hbiJf5QF7mA3kL8TIfyMt8IG8hXuYDeZkP5C3Ey3wgL/OBvIV4mQ/kZT6QtxAv84G8zAfyFuJlPpCX+UDeQrzMB/IyH8hbiJf5QF7mA3kL8TIfyMt8IG8hXuYDeZkP5C3Ey3wgL/OBvIV4mQ/kZT6QtxAv84G8zAfyFuJlPpCX+UDeQrzMB/IyH8hbiJf5QF7mA3kL8TIfyMt8IG8h3nLIh5TnXcOag3b62qZmVK0BtPfkPZNAe9+jfeDR1omG22Be5uMbXIVe6mKq+f50mRc4J8KMs6oqXcd8GJiOeR54Pt+zn84PlFPzTE5pHRnJS96PwjuZvEF5mb/k5fxA3kK8zF/ycn4gbyFe5i95OT+QtxAv85e8nB/IW4iX+Utezg/kLcTL/CUv5wfyFuJl/pKX88PHizfl+dCw5qCdvrapGVXDa2sSk6epVuHRWnm0LTxaa4/WxmyrVGvr2X4LMvem8Roc9AaG3MwvXRYEzqcw42y8BmchDEzHvAA8X+iZkxYGyscFJh+1jozkJe9H4Z1M3qC8zF/ycn4gbyFe5i95OT+QtxAv85e8nB/IW4iX+Utezg/kLcTL/CUv5wfyFuJl/pKX8wN5C/Eyf8nL+eHjxZvytKtozpqDdu3KhFE1vC6nvcnTVNvSo23l0XIerYNH62i2Vapt7dl+i7L3pga3gy6mmu9Pl0WBt1WgceavwVkMA9MxLwLPF3vmpMWB8nGRyUetI2NMvClPJzMP5aBdpzJhXOTZ77fx7JOdPd4uCbT/LSpi/1sS2MdA48zvf0thYDrmJeD5Uo/nSwPlyhKTK1pHxph4U54uZo7IQbsuZcK4xOyTKc+yQPvVkiL2q2WB/Qk0zvx+tRwGpmNeBp4v9+Tp8kA5sMzkgNaRMSbelKer2fdz0K5rmTAu8+xr23o+17p5vF2RPffgnOFOl/XtfysC+xhonPn9byUMTMe8Ajxf6fF8ZaBcWWFyRevISN5wvClPdzOn5aBd9zJhXOGZQ7bzzBfbe7QdPNqOnm2wKvPx1VShl7qsb15ZFdjvMONsnFdWw8B0zKvA89Uez1cHyqlVJqe0jozkJS95yUte8pKXvOQlL3nJS17ykpe85CUveclL3g3zpjw9Kpqz5qBdjzJhVA1/W9jJ+JhqPT3azh6/12Q+lsbfDHAs6WKq+f50WRPY2zDjbPzNYC0MTMe8Bjxf6/F8baD8WWPyR+vISF7ykpe85CUveclLXvKSl7zkJS95yUte8pKXvOTdMG/K06uiOWsO2vUqE0bV8HeESuNjqvX2aLt4tD5S3iVp0vqK1ge0fqL1TVp606/MvOkH3LuKtito/UXrD9puou0G2u6i7Q7aHqLtAdqeou0J2l6i7QXaANEGgDZQtIGgDRJtEGhVolWBVi1aNWg1otWANli0waANEW0IaENFGwraMNGGgTZctOGgjRBtBGgjRRsJ2ijRRoE2WrTRoI0RbQxoY0UbC9reou0N2jjRxoFWK1qtaPg7UkWS3e9IaV/7mLku5H7RMWlaKqG+tgR9dzJ9dyph351N351L2HdX03fXEvbdzfTdrYR9b2f63q6Efe9g+t6hhH33NH33LGHfvUzfvUrYd2/Td+8S9r0x89q+AfrOJc2PW9PFVPP96bIvHH/4jmf3LbE/+5ZB36mHpyfNvWjjonOXJjY9fl2XGduQKjxObOviDODQ/lpDm++e3sTWDdjWlNg37a9D0vK4Nsy9t9X563pWF5HnK4FnVQB/woyzqgqfXbAuw/Wm68BncaiXeC2Xvh76+QwVSfP7/Cuhvjxs33kflm3Ah2UelmUl9gEZN5Z3RWS89Jf+0l/6S3/pL/2lvzH6m/I8bVhz0E5f29SMqq0Cz7J/9mH1iJzhSRdTzfeny9LA2zDMOBu/R+AzJ3XMvudf4n61JFAOLDU5oHVk3Fx5l9Nf8ibMB/IyH8i7YV7mA3mZD+QtxMt8IC/zgbyFeMshH1KeZwxrDtrpa5uaUTX8nxsB/pfN2pzhSRdTzfeny+LA2zDQOPPnnfB/COmYff/3CPerRYFyYLHJAa0jI3nJ+1F4l5M3KC/zl7ycHz5evCnPs4Y1B+30tU3NqBr+D8TM/wdpdVVVzvCki6nm+9NlYeBtGGScVY3Hjfi/X3XMvv+Ji/PAgkA5sNDkgNaRcWN5l0fGS3/pL/2lv/SX/tJf+qsL/aW/9Jf+/q+89Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7S34T+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+JvSX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+lj8v/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0N6G/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/Cf2lv/SX/tJf+lscb8rznGHNQTt9bVMzqrYItOflPStAe8GjvZi09Ht+5mOpHoK+6WKq+f50mR94+4cZZ1VVuo55MDAd83zwfJ5nn5wXKH/mm/zROjKSl7zkJS95yUte8pKXvOQl78eRN+V5ybDmoJ2+tqkZVcPzAC8nzX1MtVc82qse7TWP9rpHe8OjvSlah6SlX2+WmV8dk6a/b0l5Dbz2tmd874iG50jmZj6WtVXomy6mmu9Pl7mB95cw42w8RzIHBqZjnguez/HMCXMC5c9ckz9aR8bNlXc5/SVvwnwgL/OBvBvmZT6Ql/lA3kK8zAfyMh/IW4iX+UBe5gN5C/EyH8jLfCBvIV7mA3mZD+QtxMt8IC/zgbyFeJkP5GU+kLcQL/OBvMwH8hbiZT6Ql/lA3kK8zAfyMh/IW4iX+UBe5gN5C/EyH8jLfCBvIV7mA3mZD+QtxMt8IC/zgbyFeJkP5GU+kLcQL/OBvMwH8hbiZT6Ql/lA3kK8zAfyMh/IW4iX+UBe5gN5C/EyH8jLfCBvIV7mA3mZD+QtxMt8IC/zgbyFeJkP5GU+kLcQL/OBvMwH8hbiZT6Ql/lA3kK8zAfyMh/IW4iX+UBe5gN5C/EyH8jLfCBvIV7mA3mZD+QtxMt8IC/zgbyFeMshH1Kedw1rDtrpa5uaUbV5oL0n71kB2vse7QOPtk403AYNmY9vcBV6qYup5vvTpSFwToQZZ1VVuo7ZMDAdcwN4Ptuzn84OlFMNJqe0jozkJe9H4V1O3qC8zF/ycn4gbyFe5i95OT+QtxAv85e8nB/IW4iX+Utezg/kLcTL/CUv5wfyFuJl/pKX8wN5C/Eyf8nL+eHjxZvyfGhYc9BOX9vUjKrhtTWJydNUq/BorTzaFh6ttUdrY7ZVqrX1bL9ZmXvTeA0OegNDbuaXLrMC51OYcTZegzMTBqZjngWez/TMSTMD5eMsk49aR0bykvej8C4nb1Be5i95OT+QtxAv85e8nB/IW4iX+Utezg/kLcTL/CUv5wfyFuJl/pKX8wN5C/Eyf8nL+YG8hXiZv+Tl/PDx4k152lU0Z81Bu3ZlwqgaXpfT3uRpqm3p0bbyaDmP1sGjdTTbKtW29my/+uy9qcHtoIup5vvTpT7wtgo0zvw1ODNgYDrmevB8hmdOmhEoH+tNPmodGWPiTXk6mXkoB+06lQljvWe/38azT3b2eDs90P5XX8T+Nz2wj4HGmd//6mBgOubp4Hmdx/O6QLky3eSK1pExJt6Up4uZI3LQrkuZME43+2TKMy3QfjW9iP1qWmB/Ao0zv19NhYHpmKeB51M9eTo1UA5MMzmgdWSMiTfl6Wr2/Ry061omjNM8+9q2ns+1bh5vp2TPPThnuNNlffvflMA+Bhpnfv+bDAPTMU8Bzyd7PJ8cKFemmFzROjKSNxxvytPdzGk5aNe9TBineOaQ7TzzxfYebQePtqNnG0zKfHw1VeilLuubVyYF9jvMOBvnlYkwMB3zJPB8osfziYFyapLJKa0jI3nJS17ykpe85CUveclLXvKSl7zkJS95yUte8pJ3w7wpT4+K5qw5aNejTBhVw98WdjI+plpPj7azx+8JmY+l8TcDHEu6mGq+P10mBPY2zDgbfzMYDwPTMU8Az8d7PB8fKH8mmPzROjKSl7zkJS95yUte8pKXvOQlL3nJS17ykpe85CUveTfMm/L0qmjOmoN2vcqEUTX8HaHS+JhqvT3aLh6tj5R3SZq0vqL1Aa2faH2Tlt70KzNv+gH3rqLtClp/0fqDtptou4G2u2i7g7aHaHuAtqdoe4K2l2h7gTZAtAGgDRRtIGiDRBsEWpVoVaBVi1YNWo1oNaANFm0waENEGwLaUNGGgjZMtGGgDRdtOGgjRBsB2kjRRoI2SrRRoI0WbTRoY0QbA9pY0caCtrdoe4M2TrRxoNWKVisa/o5UkWT3O1La1z5mrgu5X3RKmpZKqI+HvvcN0HcuaT6/q4+J4dFl3w3M+/uW2J99y6Dv1MMzkuZetHHxZM8mtlWir8uMbUh+Klkt620rDMqh/bWGNhef3sT2M2BbXWLftL8OUMY8X5E5T3X+9+9VReQ55vTKAP6EGWdVVbre5ZnnWuPv6svAsFVm3+8Ir+PzepYFyq0V5jhC68vC9p33YekGfFjqYVlaYh+QcWN5l0fGS3/pL/2lv/SX/tJf+hujvynP04Y1B+30tU3NqNpK8GxJ5jzVI3KGJ11MNd+fLksCb8Mw42z8HrEYBqZjXgKeL/bsV4sD5cASkwNaR8bNlXcZ/SVvwnwgL/OBvBvmZT6Ql/lA3kK8zAfyMh/IW4i3HPIh5XnGsOagnb62qRlVWwqeLcqeZ23O8KSLqeb702VR4G0YaJz5804LYWA65kXg+ULPfrUwUA4sMjmgdWQkL3k/Cu8y8gblZf6Sl/PDx4s35XnWsOagnb62qRlVWwyeLciap7qqKmd40sVU8/3psiDwNgwyzqrG48b5MDAd8wLwfL5nHpgfKAcWmBzQOjJuLO+yyHjpL/2lv/SX/tJf+kt/i+Wlv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+JvSX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/Q3ob/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/S3/HnpL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/Cf2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/1N6C/9pb/0l/7SX/pLf+kv/c2GN+V5zrDmoJ2+tqkZVVsI2vPynuWgveDRXkxa+j0v87FUD0HfdDHVfH+6zAu8/cOMs6oqXcdcGJiOeR54PtezT84NlD/zTP5oHRnJS17ykpe85CUveclLXvKS9+PIm/K8ZFhz0E5f29SMquF5gJeT5j6m2ise7VWP9ppHe92jveHR3hStQ9LSrzfLzK+OSdPft6S8Bl572zO+d0RbBtq7om3tGfO7ZTbmTjDm96S8Gtq97xnzBx5tnfEhHd+czMc3uAq91MVU8/3pMifwvBFmnI3nihpgYDrmOeB5g2dubAiUU3NMTmkdGclL3o/Cu4y8QXmZv+Tl/EDeQrzMX/JyfiBvIV7mL3k5P5C3EC/zl7ycH8hbiJf5S17OD+QtxMv8JS/nB/IW4mX+kpfzw8eLN+X50LDmoJ2+tqkZVcNraxKTp6lW4dFaebQtPFprj9bGbKtUa+vZfrMz96bxGhz0BobczC9dZgfOpzDjbLwGZxYMTMc8Gzyf5ZmTZgXKx9kmH7WOjOQl70fhXUbeoLzMX/JyfiBvIV7mL3k5P5C3EC/zl7ycH8hbiJf5S17OD+QtxMv8JS/nB/IW4mX+kpfzA3kL8TJ/ycv54ePFm/K0q2jOmoN27cqEUbUG0NqbPE21LT3aVh4t59E6eLSOZlul2tae7Tcze29qcDvoYqr5/nSZGXhbBRpn/hqcehiYjnkmeF7vmZPqA+XjTJOPWkfGmHhTnk5mHspBu05lwjjTs99v49knO3u8nRFo/5tZxP43I7CPgcaZ3/+mw8B0zDPA8+kez6cHypUZJle0jowx8aY8XcwckYN2XcqEcYbZJ1OeukD71Ywi9qu6wP4EGmd+v5oGA9Mx14Hn0zx5Oi1QDtSZHNA6MsbEm/J0Nft+Dtp1LRPGOs++tq3nc62bx9up2XMPzhnudFnf/jc1sI+Bxpnf/6bAwHTMU8HzKR7PpwTKlakmV7SOjOQNx5vydDdzWg7adS8TxqmeOWQ7z3yxvUfbwaPt6NkGkzMfX00VeqnL+uaVyYH9DjPOxnllEgxMxzwZPJ/k8XxSoJyabHJK68hIXvKSl7zkJS95yUte8pKXvOQlL3nJS17ykpe85N0wb8rTo6I5aw7a9SgTRtXwt4WdjI+p1tOj7ezxe2LmY2n8zQDHki6mmu9Pl4mBvQ0zzsbfDCbAwHTME8HzCR7PJwTKn4kmf7SOjOQlL3nJS17ykpe85CUveclLXvKSl7zkJS95yUveDfOmPL0qmrPmoF2vMmFUDX9HqDQ+plpvj7aLR+sj5V2SJq2vaH1A6yda36SlN/3KzJt+wL2raLuC1l+0/qDtJtpuoO0u2u6g7SHaHqDtKdqeoO0l2l6gDRBtAGgDRRsI2iDRBoFWJVoVaNWiVYNWI1oNaINFGwzaENGGgDZUtKGgDRNtGGjDRRsO2gjRRoA2UrSRoI0SbRRoo0UbDdoY0caANla0saDtLdreoI0TbRxotaLVioa/I1Uk2f2OlPa1j5nrQu4XnZOmpRLqE6DvtQH6ziXN53f1MTE8uqzdwLy/tsT+rC2DvlMPz0yae9Em1XZtYlsp+rrs2PK76ipZb1sXZwCH9tca2ow/vYntXGBbVWLftL8OUMY8X545T3X+9++VReQ55vSKAP6EGWdVVbreZdnnWv7jaikYttLs+x3hdXxez9JAubXcHEdofWnYvvM+LNmAD0s8LEtK7AMybizvssh46S/9pb/0l/7SX/pLf2P0N+V52rDmoJ2+tqkZVVsBni3OnKd6RM7wpIup5vvTZXHgbRhmnI3fIxbBwHTMi8HzRZ79alGgHFhsckDryLi58i6lv+RNmA/kZT6Qd8O8zAfyMh/IW4iX+UBe5gN5C/GWQz6kPM8Y1hy009c2NaNqS8CzhdnzrM0ZnnQx1Xx/uiwMvA0DjTN/3mkBDEzHvBA8X+DZrxYEyoGFJge0jozkJe9H4V1K3qC8zF/ycn74ePGmPM8a1hy009c2NaNqi8Cz+VnzVFdV5QxPuphqvj9d5gfehkHGWdV43DgPBqZjng+ez/PMA/MC5cB8kwNaR8aN5V0aGS/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/Q3ob/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb8J/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/lz0t/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/1N6C/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+nvR1voL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9/Z95U57nDGsO2ulrm5pRtQWgPS/vWQbaCx7txaSl33MzH0v1EPRNF1PN96fL3MDbP8w4q6rSdcyBgemY54Lnczz75JxA+TPX5I/WkZG85CUveclLXvKSl7zkJS95P468Kc9LhjUH7fS1Tc2oGp4HeDlp7mOqveLRXvVor3m01z3aGx7tTdE6JC39erPM/OqYNP19S8pr4LW3PeN7R7SloL0r2taeMb9bZmPuBGN+T8qrod37njF/4NHWeXz4ULRtPD58WGY+dAYf9OTTKmhXUdFyzK082hYerbVHa1PR0q+2Rku9acjcm8FVuB10MdV8f7o0BJ57w4yz8XzbbBiYjrkBPJ/t+XyZHSgfG0w+ah0ZyUvej8K7lLxBeZm/5OX8QN5CvMxf8nJ+IG8hXuYveTk/kLcQL/OXvJwfyFuIl/lLXs4P5C3Ey/wlL+cH8hbiZf6Sl/PDx4s35WlX0Zw1B+3alQmjanhdTnuTp6m2pUfbyqPlPFoHj9bRbKtU29qz/WZl700NbgddTDXfny6zAm+rQOPMX4MzEwamY54Fns/0zEkzA+XjLJOPWkfGmHhTnk5mHspBu05lwjjLs99v49knO3u8rQ+0/80qYv+rD+xjoHHm978ZMDAdcz14PsPj+YxAuVJvckXryBgTb8rTxcwROWjXpUwY680+mfJMD7Rf1RexX00P7E+gceb3qzoYmI55Onhe58nTukA5MN3kgNaRMSbelKer2fdz0K5rmTBO9+xr23o+17p5vJ2WPffgnOFOl/Xtf9MC+xhonPn9byoMTMc8DTyf6vF8aqBcmWZyRevISN5wvClPdzOn5aBd9zJhnOaZQ7bzzBfbe7QdPNqOnm0wJfPx1VShl7qsb16ZEtjvMONsnFcmw8B0zFPA88kezycHyqkpJqe0jozkJS95yUte8pKXvOQlL3nJS17ykpe85CUveclL3g3zpjw9Kpqz5qBdjzJhVA1/W9jJ+JhqPT3azh6/J2U+lsbfDHAs6WKq+f50mRTY2zDjbPzNYCIMTMc8CTyf6PF8YqD8mWTyR+vISF7ykpe85CUveclLXvKSl7zkJS95yUte8pKXvOTdMG/K06uiOWsO2vUqE0bV8HeESuNjqvX2aLt4tD5S3iVp0vqK1ge0fqL1TVp606/MvOkH3LuKtito/UXrD9puou0G2u6i7Q7aHqLtAdqeou0J2l6i7QXaANEGgDZQtIGgDRJtEGhVolWBVi1aNWg1otWANli0waANEW0IaENFGwraMNGGgTZctOGgjRBtBGgjRRsJ2ijRRoE2WrTRoI0RbQxoY0UbC9reou0N2jjRxoFWK1qtaPg7UkWS3e9IaV/7mLku5H7RNWlaKqE+EfoeH6DvXNJ8flcfE8Ojy/gNzPvjS+zP+DLoO/XwrKS5F21cHDmwiW2F6OuyY8vvqitlvW1dnAEc2l9raPPWaU1sxwLbyhL7pv11gDLm+bLMearzv3+vKCLPMaeXB/AnzDirqtL1Ls0+1/IfV0vAsBVm3+8Ir+PzepYEyq1l5jhC60vC9p33YfEGfFjsYVlcYh+QcWN5l0bGS3/pL/2lv/SX/tJf+hujvynP04Y1B+30tU3NqNpy8GxR5jzVI3KGJ11MNd+fLosCb8Mw42z8HrEQBqZjXgSeL/TsVwsD5cAikwNaR8bNlXcJ/SVvwnwgL/OBvBvmZT6Ql/lA3kK8zAfyMh/IW4i3HPIh5XnGsOagnb62qRlVWwyeLcieZ23O8KSLqeb702VB4G0YaJz5807zYWA65gXg+XzPfjU/UA4sMDmgdWQkL3k/Cu8S8gblZf6Sl/PDx4s35XnWsOagnb62qRlVWwiezcuap7qqKmd40sVU8/3pMi/wNgwyzqrG48a5MDAd8zzwfK5nHpgbKAfmmRzQOjJuLO+SyHjpL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/Cf2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/N36hv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6m9Bf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6W/689Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7S34T+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0N1PelOc5w5qDdvrapmZUbT5oz8t7loL2gkd7MWnp95zMx1I9BH3TxVTz/ekyJ/D2DzPOqqp0HQ0wMB3zHPC8wbNPNgTKnzkmf7SOjOQlL3nJS17ykpe85CUvecn7ceRNeV4yrDlop69takbV8DzAy0lzH1PtFY/2qkd7zaO97tHe8GhvitYhaenXm2XmV8ek6e9bUl4Dr73tGd87oi0B7V3RtvaM+d0yG3MnGPN7Ul4N7d73jPkDj7bO48OHom3j8eHDMvOhM/igJ59WQbuKipZjbuXRtvBorT1am4qWfrX1aO2k3CVp6WG7MpkTVeuaNGntRVsJ7bb0+LCVR8t5tA4eraPHr62NlnozO3tvanA76GKq+f50mR14WwUaZ/6c5SwYmI55Nng+y/MZPStQPs42+ah1ZIyJN+XpVNGcNQftOpUJ42zPfr+NZ5/s7PF2ZqD9b3YR+9/MwD4GGmd+/6uHgemYZ4Ln9R7P6wPlykyTK1pHxph4U54uZo7IQbsuZcI40+yTKc+MQPvVzCL2qxmB/Qk0zvx+NR0GpmOeAZ5P9+Tp9EA5MMPkgNaRMSbelKer2fdz0K5rmTDO8Oxr23o+17p5vK3LnntwznCny/r2v7rAPgYaZ37/mwYD0zHXgefTPJ5PC5QrdSZXtI6M5A3Hm/J0N3NaDtp1LxPGOs8csp1nvtjeo+3g0Xb0bIOpmY+vpgq91GV988rUwH6HGWfjvDIFBqZjngqeT/F4PiVQTk01OaV1ZCQveclLXvKSl7zkJS95yUte8pKXvOQlL3nJS17ybpg35elR0Zw1B+16lAmjavjbwk7Gx1Tr6dF29vg9OfOxNP5mgGNJF1PN96fL5MDehhln428Gk2BgOubJ4Pkkj+eTAuXPZJM/WkdG8pKXvOQlL3nJS17ykpe85CUveclLXvKSl7zkJe+GeVOeXhXNWXPQrleZMKqGvyNUGh9TrbdH28Wj9ZHyLkmT1le0PqD1E61v0tKbfmXmTT/g3lW0XUHrL1p/0HYTbTfQdhdtd9D2EG0P0PYUbU/Q9hJtL9AGiDYAtIGiDQRtkGiDQKsSrQq0atGqQasRrQa0waINBm2IaENAGyraUNCGiTYMtOGiDQdthGgjQBsp2kjQRok2CrTRoo0GbYxoY0AbK9pY0PYWbW/Qxok2DrRa0WpFw9+RKpLsfkdK+9rHzHUh94tuSdNSCfVJ0PeEAH3nkubzu/qYGB5dJmxg3p9QYn8mlEHfqYdnJ829aOPiC0Ob2JaLvi47tvwUsULW29bFGcCh/bWGNn8/rYntOmBbUWLftL8OUMY8X5o5T3X+9+/lReQ55vSyAP6EGWdVVbreJdnnWv7jajEYttzs+x3hdXxez+JAubXUHEdofXHYvvM+LNqAD4s8LItK7AMybizvksh46S/9pb/0l/7SX/pLf2P0N+V52rDmoJ2+tqkZVVsGni3MnKd6RM7wpIup5vvTZWHgbRhmnI3fIxbAwHTMC8HzBZ79akGgHFhockDryLi58i6mv+RNmA/kZT6Qd8O8zAfyMh/IW4iX+UBe5gN5C/GWQz6kPM8Y1hy009c2NaNqi8Cz+dnzrM0ZnnQx1Xx/uswPvA0DjTN/3gn/P7eOGf+n+DzPfjUvUA7MNzmgdWQkL3k/Cu9i8gblZf6Sl/PDx4s35XnWsOagnb62qRlVWwCezc2ap7qqKmd40sVU8/3pMjfwNgwyzqrG40b8H4k6Zvy/tHM888CcQDkw1+SA1pFxY3kXR8ZLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9Tegv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+lvQn/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+lv+fPSX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/E/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/qb0F/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/q7aXhTnucMaw7a6WubmlG1eaA9L+9ZAtoLHu3FpKXfDZmPpXoI+qaLqeb706Uh8PYPM86qqnQds2FgOuYG8Hy2Z5+cHSh/Gkz+aB0ZyUte8pKXvOQlL3nJS17ykvfjyJvyvGRYc9BOX9vUjKrheYCXk+Y+ptorHu1Vj/aaR3vdo73h0d4UrUPS0q83y8yvjknT37ekvAZee9szvndEWwzau6Jt7Rnzu2U25k4w5vekvBrave8Z8wcebZ3Hhw9F28bjw4dl5kNn8EFPPq2CdhUVLcfcyqNt4dFae7Q2FS39auvR2km5S9LSw3ZlMieq1jVp0tqLthLabenxYSuPlvNoHTxaR49fW3u0TlLeNmnpYacy87Bb0qRtI9oKaNfZ83k4K3vumpzhThdTzfeny6zAPgYaZ/6c7EwYmI55Fng+0+P5zEC5MsvkitaRMSbelKdLRXPWHLTrUiaMs8w+mfLUB9qvZhWxX9UH9ifQOPP71QwYmI65Hjyf4cnTGYFyoN7kgNaRMSbelKer2fdz0K5rmTDWe/a1bT2f5d083k7PnntwznCny/r2v+mBfQw0zvz+VwcD0zFPB8/rPJ7XBcqV6SZXtI6M5A3Hm/J0N3NaDtp1LxPG6Z45ZDvPfLG9R9vBo+3o2QbTMh9fTRV6qcv65pVpgf0OM87GeWUqDEzHPA08n+rxfGqgnJpmckrryEhe8pKXvOQlL3nJS17ykpe85CUveclLXvKSl7zk3TBvytOjojlrDtr1KBNG1fC3hZ2Mj6nW06Pt7PF7SuZjafzNAMeSLqaa70+XKYG9DTPOxt8MJsPAdMxTwPPJHs8nB8qfKSZ/tI6M5CUveclLXvKSl7zkJS95yUte8pKXvOQlL3nJS94N86Y8vSqas+agXa8yYVQNf0eoND6mWm+PtotH6yPlXZImra9ofUDrJ1rfpKU3/crMm37Avatou4LWX7T+oO0m2m6g7S7a7qDtIdoeoO0p2p6g7SXaXqANEG0AaANFGwjaINEGgVYlWhVo1aJVg1YjWg1og0UbDNoQ0YaANlS0oaANE20YaMNFGw7aCNFGgDZStJGgjRJtFGijRRsN2hjRxoA2VrSxoO0t2t6gjRNtHGi1otWKhr8jVSTZ/Y6U9rWPmetC7he9kqalEuqToe+JAfrOJc3nd/UxMTy6TNzAvD+xxP5MLIO+Uw/PSZp70cbFvWOa2JaJvi4ztur8VLJc1tvWxRnAof21hjb3n9bEdh+wLS+xb9pfByhjni/JnKc6//v3siLyHHN6aQB/woyzqipd7+LMc63xd/VFYNgys+93hNfxGc6LAuXWEnMcofVFYfvO+7BwAz4s9LAsLLEPyLixvIsj46W/9Jf+0l/6S3/pL/2N0d+U52nDmoN2+tqmZlRtKXi2IHOe6hE5w5MupprvT5cFgbdhmHE2fo+YDwPTMS8Az+d79qv5gXJggckBrSPj5sq7iP6SN2E+kJf5QN4N8zIfyMt8IG8hXuYDeZkP5C3EWw75kPI8Y1hz0E5f29SMqi0Ez+Zlz7M2Z3jSxVTz/ekyL/A2DDTO/Hkn/P/HOmb8n81zPfvV3EA5MM/kgNaRkbzk/Si8i8gblJf5S17ODx8v3pTnWcOag3b62qZmVG0+eDYna57qqqqc4UkXU833p8ucwNswyDirGo8bG2BgOmb8v58NnnmgIVAOzDE5oHVk3FjeRZHx0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLfxP6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6m9Bf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6W/689Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7S34T+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+JvSX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+bhrelOc5w5qDdvrapmZUbS5oz8t7FoP2gkd7MWnp9+zMx1I9BH3TxVTz/ekyO/D2DzPOqqp0HbNgYDrm2eD5LM8+OStQ/sw2+aN1ZCQveclLXvKSl7zkJS95yUvejyNvyvOSYc1BO31tUzOqhucBXk6a+5hqr3i0Vz3aax7tdY/2hkd7U7QOSUu/3iwzvzomTX/fkvIaeO1tz/jeEW0RaO+KtrVnzO+W2Zg7wZjfk/JqaPe+Z8wfeLR1Hh8+FG0bjw8flpkPncEHPfm0CtpVVLQccyuPtoVHa+3R2lS09KutR2sn5S5JSw/blcmcqFrXpElrL9pKaLelx4etPFrOo3XwaB09fm3t0TpJedukpYedyszDbkmTto1oK6BdZ8/n4czsuWtyhjtdTDXfny4zA/sYaJz5c7L1MDAd80zwvN7jeX2gXJlpckXryBgTb8rTpaI5aw7adSkTxplmn0x5ZgTar2YWsV/NCOxPoHHm96vpMDAd8wzwfLonT6cHyoEZJge0jowx8aY8Xc2+n4N2XcuEcYZnX9vW81nezeNtXfbcg3OGO13Wt//VBfYx0Djz+980GJiOuQ48n+bxfFqgXKkzuaJ1ZCRvON6Up7uZ03LQrnuZMNZ55pDtPPPF9h5tB4+2o0frIeWdk5Y+9CgzH3olTdpOoi2Hdj0949vZk3dTMx9LTVXOjCVdTDXfny5TA3sbZpyNc+kUGJiOeSp4PsXj+ZRA+TPV5I/WkZG85CUveclLXvKSl7zkJS95yUte8pKXvOQlL3nJu2HelKdXRXPWHLTrVSaMquHvCJXGx1Tr7dF28Wh9pLxL0qT1Fa0PaP1E65u09KZfmXnTD7h3FW1X0PqL1h+03UTbDbTdRdsdtD1E2wO0PUXbE7S9RNsLtAGiDQBtoGgDQRsk2iDQqkSrAq1atGrQakSrAW2waINBGyLaENCGijYUtGGiDQNtuGjDQRsh2gjQRoo2ErRRoo0CbbRoo0EbI9oY0MaKNha0vUXbG7Rxoo0DrVa0WtHwd6SKJLvfkdK+9jFzXcj9onfStFRCfQr0PSlA37mk+fyuPiaGR5dJG5j3J5XYn0ll0Hfq4blJcy/auJgzoYltqejrMmOrzk8ly2S9bV2cARzaX2toc81pTWwLgG1ZiX3T/jpAGfN8ceY81fnfv5cWkeeY00sC+BNmnFVV6XoXZZ5rjb+rLwTDlpp9vyO8js+gWBgotxab4witLwzbd96HBRvwYYGHZUGJfUDGjeVdFBkv/aW/9Jf+0l/6S3/pb4z+pjxPG9YctNPXNjWjakvAs/mZ81SPyBmedDHVfH+6zA+8DcOMs/F7xDwYmI55Png+z7NfzQuUA/NNDmgdGTdX3oX0l7wJ84G8zAfybpiX+UBe5gN5C/EyH8jLfCBvId5yyIeU5xnDmoN2+tqmZlRtAXg2N3uetTnDky6mmu9Pl7mBt2GgcebPO+H/b9Ax4/+cmOPZr+YEyoG5Jge0jozkJe9H4V1I3qC8zF/ycn74ePGmPM8a1hy009c2NaNq88Czhqx5qquqcoYnXUw1358uDYG3YZBxVjUeN+IzZnXM+Nzy2Z55YHagHGgwOaB1ZNxY3oWR8dJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S38T+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+pvQX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+lv+vPSX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0t+E/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/ib0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pb/nw0l/6S38/Xv6mPM8Z1hy009c2NaNqc0B7Xt6zCLQXPNqLSUu/Z2U+luoh6JsupprvT5dZgbd/mHFWVaXrmAkD0zHPAs9nevbJmYHyZ5bJH60jI3nJS17ykpe85CUveclLXvJ+HHlTnpcMaw7a6WubmlE1PA/wctLcx1R7xaO96tFe82ive7Q3PNqbonVIWvr1Zpn51TFp+vuWlNfAa297xveOaAtBe1e0rT1jfrfMxtwJxvyelFdDu/c9Y/7Ao63z+PChaNt4fPiwzHzoDD7oyadV0K6iouWYW3m0LTxaa4/WpqKlX209Wjspd0laetiuTOZE1bomTVp70VZCuy09Pmzl0XIerYNH6+jxa2uP1knK2yYtPexUZh52S5q0bURbAe06e3zoIuXunvF1KbPxbZc08dRnz1OTMzzpYqr5/nSpD+xPoHHmzyXPgIHpmOvB8xkmV9qDliFLPgfqTQ5oHRlj4k15ulY0Z81Bu65lwljv2de2lfKOSZPWzePt9Oy5B+cMd7qsb/+bHtjHQOPM7391MDAd83TYDnUez+sC5cp0kytaR0byhuNNebqbOS0H7bqXCeN0zxyynfEx1bb3aDt4tB09Wg8p75y09KFHmfnQK2nSdhJtObTr6Rnfzh6tF4zFjrlXmY25N4y5UrRl0K63Z3y7eLQ+Ut4F1tdXtD6g9ROtr8ebfmXmTT/g3lW0XUHrL1p/0HYTbTfQdhdtd9D2EG0P0PYUbU/Q9hJtL9AGiDYAtIGiDQRtkGiDQKsSrQq0atGqQasRrQa0waINBm2IaENAGyraUNCGiTYMtOGiDQdthGgjQBsp2kjQRok2CrTRoo0GbYxoY0AbK9pY0PYWbW/Qxok2DrRa0WpFw2OKiiS7Y4q0r33M51zI/aJn0rRUQr0O+p4WoO9c0vyzXX1MDI8u0zbwmT+txP5MK4O+Uw/PS5p70cbF4mlNbEtEX5cx21JZb1sXZwCH9tca2hx1WhPbcmBbWmLftL8OUMY8X5Q5T3VVDjzRZX15jjm9OIA/YcZZVZWud2H2uZb/uFoAhi0x+35HeB2vUVwQKLcWmeMIrS8I23feh/kb8GG+h2V+iX1Axo3lXRgZL/2lv/SX/tJf+kt/6W+M/qY8TxvWHLTT1zY1o2qLwbN5mfNUj8gZnnQx1Xx/uswLvA3DjLPxe8RcGJiOeR54PtezX80NlAPzTA5oHRk3V94F9Je8CfOBvMwH8m6Yl/lAXuYDeQvxMh/Iy3wgbyHecsiHlOcZw5qDdvrapmZUbT54Nid7nrU5w5MupprvT5c5gbdhoHHmzzs1wMB0zPhMogbPftUQKAfmmBzQOjKSl7wfhXcBeYPyMn/Jy/nh48Wb8jxrWHPQTl/b1IyqzQXPMn8+YXVVVc7wpIup5vvTZXbgbRhknFWNx414L6+OGZ9rMcszD8wKlAOzTQ5oHRk3lndBZLz0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tLfhP7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/4m9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/6WPy/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/Q3ob/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb8J/aW/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb+bhjflec6w5qCdvrapGVVrAO15ec9C0F7waC8mLf2emflYqoegb7qYar4/XWYG3v5hxllVla6jHgamY54Jntd79sn6QPkz0+SP1pGRvOQlL3nJS17ykpe85CUveT+OvCnPS4Y1B+30tU3NqBqeB3g5ae5jqr3i0V71aK95tNc92hse7U3ROiQt/XqzzPzqmDT9fUvKa+C1tz3je0e0BaC9K9rWnjG/W2Zj7gRjfk/Kq6Hd+54xf+DR1nl8+FC0bTw+fFhmPnQGH/Tk0ypoV1HRcsytPNoWHq21R2tT0dKvth6tnZS7JC09bFcmc6JqXZMmrb1oK6Hdlh4ftvJoOY/WwaN19Pi1tUfrJOVtk5YediozD7slTdo2oq2Adp09PnSRcnfP+LqU2fi2S5p4ZmTPU5MzPOliqvn+dJkR2J9A48yfS54OA9MxzwDPp5tcaQ9ahiz5HJhhckDryBgTb8rTtaI5aw7adS0TxhmefW1bKe+YNGndPPNGdynvlLQcX/cyG19PGMt2oi2Fdtt7xreDR9vRo/WQ8s5JSx96lJkPvcCHnURbDu16esa3s0frBWOxY+5VZmPuDWOuFG0ZtOvtGd8uHq2PlHeB9fUVrQ9o/UTr6/GmX5l50w+4dxVtV9D6i9YftN1E2w203UXbHbQ9RNsDtD1F2xO0vUTbC7QBog0AbaBoA0EbJNog0KpEqwKtWrRq0GpEqwFtsGiDQRsi2hDQhoo2FLRhog0Dbbhow0EbIdoI0EaKNhK0UaKNAm20aKNBGyPaGNDGijYWtL1F2xu0caKNA61WtFrR8BikIsnuGCTtax/zOR5yv5idNC2VUJ9egr7nmL7nlLDveabveSXse4Hpe0EJ+15k+l5Uwr6XmL6XlLDvZabvZSXse4Xpe0UJ+15r+l5bwr5PMX2fUsK+Oa9xXitV35zXym9eq4ByG6nPkDZ6XNUa2hw6q/FvJ7OetM0k0RbCuqeZdU+vaLlubXMkrLsV6MfJevU8/1TPe7HPKabPqZ4+tc1x0KfvvScmhd974gbee8J63nuK8XEKtDktaTmmyWbdUzxj0jZnwLrbg16ZZJtb+puVrlvrkyGvQ/XdyfTdqYR9dzZ9dy5h311N311L2Hc303e3Eva9nel7uxL2vYPpe4cS9t3T9N2zhH33Mn33KmHfvU3fvUvYdz/Td78S9l3oeLwUfRc6Hi9F34WOx0vRd6Hj8VL0Xeh4vBR9FzoeL0XfhY7HS9F3oePxUvRd6Hi8FH0XOs+wuR8zbajv9DeWT4i2EI6zb53VxDZB9HXZseVP5Y+X9bZ1cQZwTIDjem2z6rQmtts9bBUZ+zYevEiL+6yH7W74ztEB9PawfSdJuTY7zvzPNRNlvbpu7Vv7awXlicCQMk0JxDQZtmst9DMJttVU46++B/3VNg8Yf1VvBzlcZ7SQ5xXqwPNKqGt/KaN+N68DTctbgqbv2Qo0/V6bA02vM+gA2n+vnwRNrz3dGrTZnnyck/0+nf+JsAG2sfY7B3JxrpQbTC7Ozz4X8z8rzoO+a6H/+eDFwszzZHB+P1gE+0ElsCyEHNc2vzHnRBZBjmm+z4NtqtfZLfKMozbJ+DjNzDF2HGnfSwJ5uNR4qCxLwENt85TxcKnHw0Xg4eKK5u1wHLWZjaOqpsKw1IKHS6Dv5YE8XGE8VJbl4KG2+ZfxcIXHw6XgoV4PssIzjtrMxlE1uMKw1IKHy6HvVYE8XG08VJZV4KG2ecF4uNrj4QrwUK/VXQ3jWBNoHGsLzElrYBza5jVzLnVtAKYwY238LNoXxjTNM059/W0ZZ3os8q6Uc7A98Fhly9ktX9fFVPPj0WUtbNv9sx9vftseYLat9oN9Hwifzxn1XY19V0hoPweA31puDyd6DvTsG/vDvrFfRct2WF5t3tMRXt/PM+7KjMe9P7BUQv1AyJkPIL80f8LMVY15v5/Hn3ngj75eB/6E2LcroC/7+b0W8kLbbCPe6HyzX6D5Zm0g3/eHMa3yjFNf7ybjTPNhO5hP9jWfA+nru3pe12V9803g3M9v24PMtvXtdwcHmm8OMvON9nMQ+K3lfjDfHOzZNw6E+UbnKGyH5X3NezrC6wd4xl2Z8bgPNPPNgYY3zZkdIb92hfkm1OfsAR5/FoE/+jr+7o7zZi20x+8UBwSakw4s8DmJn1XaZqCZkw4MwBRmrI3bBveHNZ5x6uuDIWeGwpyj89e+kF8TPa/rsr456UDYtocEmpMONdv2kIqWfR8WaE461MxJ2s+h4LeWJ8CcdJhn/zkE5iTdt7Edltea93SE1w/2jLsy43EfYuakQwxvmjMjIL8mwpy0XwAmHDf6s79nzsbrsw8yc9L+njkp+3m9cU46xOTtQWb7tYY2M8ycdEgAplCfYek6cH/YzzNOfb0BcmYuzDk6f62F/FrjeV2X9c1Jh8C2PTzQnHSE2baHV7Ts+8hAc9IRZk7Sfo4Av7W8GuakIz37z+EwJ+m+je2wfIB5T0d4/TDPuCszHvfhZk463PCmObMA8msNzEkhviviuNGfgzxzdj1ss0PNnHSQZ07Kfl5vnJMON3l7qNl+raHNwWZOOjwAU6jPsHQduD8c6Bmnvn4E5MxRMOfY7wDp62d6XtdlfXPS4bBtjwo0Jx1ttu1RFS37PibQnHS0mZO0n6PBby2fAXPSMZ795yiYk3TfxnZYPti8pyO8fqRn3JUZj/soMycdZXjTnDkW8utMmJMCHC9X47jRn0M9c/ZM2GZHmDnpUM+clP283jgnHWXy9giz/VpDm0+aOemoAEyhPsPSdeD+cIhnnPr6xZAzl8KcY78DpK9f63ldl/XNSUfBtj020Jx0nNm2x1a07Pv4QHPScWZO0n6OA7+1fA3MScd79p9jYU7SfRvbYfkw856O8PoxnnFXZjzuY82cdKzhTXPmCsiva2FOCnC8XI3jRn+O8MzZ+JytduYzO81v3T/aBZ2Xmn+m6bqPNvtrR9DwmFivyWgATa8PqQNNrw/Be9H1+hB8lodeH4LPpeho5nB8Xs8s8OboQN4Uuq736BL0Xei63lL0Xei63lL0Xei63lL0Xei63lL0Xei63lL0Xei63lL0Xei63lL0Xei63lL0Xei63lL0zXmN81qp+ua89vGa1zi3cG4pVd+cW8pvbknPN5wkWs+Gxr/p9+//wPmb8+V1ffZAqn1SypNBu0DKU0D7lJSngnahlKeBdpGU60C7WMrTQbtEyjNAu1TK9aBdJuWZoF0u5VmgXSHl2aBdKeUG0D4t5TmgfUbKc0H7rJTngfY5Kc8H7SopLwDtaikvBO3zUl4E2hekvBi0L0p5CWjXSHkpaNdKeRlo10l5OWhfkvIK0L4s5ZWgfUXKq0C7XsqrQfuqlNeAdoOU14L2NSnvC9rXpbwfaN+Q8v6g3SjlA0C7ScoHgnazlA8C7ZtSPhi0b0n5ENBukfKhoN0q5cNA+7aUDwftNikfAdp3pHwkaLdL+SjQ7pDy0aDdKeVjQLtLyseCdreUjwPtHikfD9q9Uj4BtO9K+UTQvidlnTfyvyFI0qZz2YoSH6vgPQGh+i50rFKKvgsdq5Si70LHKqXou9CxSin6LnSsUoq+Cx2rlKLvQscqpei70LFKKfrm3MK5pVR9c24pz7lleYC+c0nz+wnTxVTz/emC9xguDcSzvAge3z2rWfMsLYIH72NdFIhnSRE8vvuis+ZZVAQPXhszPxDPwiJ48P73eYF45hfBMw945gbimVcEz1zgmROIZ24RPHOApyF7nvz/b5lTBE8D8MwOxNNQBM9s4JkViKeY/5WO11XMDMQzqwge/N/t9YF4ivn/P/XAE+r/EdUXwRP4Ofo1+L8sNoYHn49bF4hnehE8eK/wtEDzYV0RPNOAZ2ognmlF8EwFnimBeKYWwTMFeCYHyp8pRfDgs84mBfJnchE8k4BnYiCeSUXwTASeCYF4JhbBMwF4xgfimVAEz3jgWRWIZ3wRPKuAZ3UgnlVF8IR9dkwjTzHPO1kDPGsD8awpggefgbJvIJ5i7oXeF3j2C8TzUZ8XsX8gnv2K4NkfeA4IxLN/ETz4bIcDA/EUc98q3s9+UCCeA4vgOQh4Dg7Ec1ARPHjf+yGBeIq5pw/v9T00EM8hRfDgPV56HlSvGUk1PRc5BTQ9HzgVND0nNw00PS9WB5qem5oOmp4fmgGanqOpB03Pk+g1I4HuPRmSS5rfb5su6/MQ75UMcV9qqHvS0/Xq/TQZPv+zKl0H3k+oXvruAT8CvNtU94CTl7zImPLoOVBlzUG7OWXCqBo+R+GozHlqqnKGJ13WNx8eFdifMONsnLfw/j0dM94nfrQnT0NdG3qUyQGtIyN5yUte8pKXvOQlL3nJS17ykpe85CUveclLXvKSd8O8KU9DRXPWHLRrKBNG1cI+q7TxvD/ypIup5vvT5ZjA/oQZZ+N5f3z+oY75GPD8WE+eHhsoB44xOaB1ZCQveclLXvKSl7zkJS95yUte8pKXvOQlL3nJS17ybpg35dFneihrDtrNLhNG+//RUp7jsucZkjM86WKq+f50OS6wP4HGmT/vj/+DScd8HHh+vCdPQ/0PpuNMDmi90P+MIu/HmzflmWXm1hy0m1UmjMeZuSzlOSFznsbfK48rYt46IbA/YcbZOG+dCAPTMZ8Anp/oydMTA+XACSYHtH5i2L7zPpy0AR9O8rCcVGIfkHFjeY+IjJf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/7SX/qblLW/Kc/MiuasOWg3s0wYVTseeE7OnGdwVc7wpIup5vvT5eTA/oQZZ+N59FNgYDrmk8HzUzz71SmBcuBkkwNaR8bNlfdE+kvehPlAXuYDeTfMy3wgL/OBvIV4mQ/kZT6QtxAv84G8zAfyFuJlPpCX+UDeQrzMB/IyH8hbiJf5QF7mA3kL8ZZDPqQ89RXNWXPQrr5MGFU7CXhOzZ6nJmd40sVU8/3pcmpgfwKNM3/dy2kwMB3zqeD5aZ796rRAOXCqyQGtI2NMvCnPDLPv56DdjDJhPNXsaynP6YH2q1OL2K9OD+xPoHHm96szYGA65tPB8zM8eXpGoBw43eSA1pExJt6UZ7rZ93PQbnqZMJ7u2dfqjI+pNs2jTfUcH5wZaJ88vYh98szA3gYaZ36fPAsGpmM+Ezw/y5PjZwXKnzNN/mgdGWPiTXmmmHkjB+2mlAnjmZ79dLJn/5tk9r9Um+hpN8HTbryn3SpPu9Wedms87dZ62u3rabefp93+Hu0Aj3agRzvIox3s0Q4xWrrdz28sJpOSJu2TUp4M2gVSngLap6Q8FbQLpTwNtIukXAfaxVKeDtolUp4B2qVSrgftMinPlL9prp6dfa4Owf1CF1PN96fL2YH3nUDjzM+558DAdMxnQ+6c45nDzgk0P5xt5getIyN5yXsOzGOXG9ZUu0K0s4Dx3MwZG5/ndXYR88S5gT0LM87GeeI8GJiO+VzIi/M8eXFeoLw41+SF1pGRvOQlL3nJS17ykpe85CUveclLXvKSl7zkJS95ybth3vQ895WGNdU+Ldo5wPiJzBkbz7MjY7qYar4/XT4R2LMw42w8z34+DEzH/AnIi/M9eXF+oLz4hMkLrSMjeclLXvKSl7zkJS95yUte8pKXvOQlL3nJS17yknfDvOl57s8Y1lT7rGjnAeMns2fM3/eCjOliqvn+dPlkYM8CjTN/nv0CGJiO+ZOQFxd48uKCQHnxSZMXWkdG8pL3ApgTPmdYU+0q0c4Hxk9lztj4e9wni5gnPhXYszDjbJwnLoSB6Zg/BXlxoScvLgyUF58yeaF1ZNxY3hMj46W/9Jf+0l/6S3/pL/2lv/SX/tJf+kt/6S/9pb/0l/4m9DdD3vQ899WGNdU+L9oFwHhR5oyN/98dGdPFVPP96XJRYM/CjLPxPPvFMDAd80WQFxd78vjiQHlxkckLrSPj5sp7Iv0lb8J8IC/zgbwb5mU+kJf5QN5CvMwH8jIfyFuIl/lAXuYDeQvxMh/Iy3wgbyFe5gN5mQ/kLcTLfCAv84G8hXjLIR/S6zy+YFhT7YuiXQiMl2TPmP8fs8iYLqaa70+XSwJ7Fmic+etMLoWB6Zgvgby41JPHlwbKi0tMXmgdGWPiTfPoGsOaateKdjEwXhYojy8pIo8vC+xZoHHm8/hyGJiO+TLIi8s9eXF5oLy4zOSF1pExJt40j64zrKn2JdEw37+cNOdOta94tOtFw8+bKwLtA5cVsQ9cEdjvQOPM7wNXwsB0zFdATl3pyakrA+XUFSantI6MMfGmefRVw5pqN4iG+8rXkubcqfZ10U4E7Ruedjd62t3kaXezp903Pe2+5Wl3i6fdrZ523/a0u82jfcej3e7R7vBod3q0uzza3aIdlzRp90j5eNDulfIJoH1XxyZ/cR9M/9SKXvW/LdVpX9+Tden627g4c2FTvytC5W/StFRCfUVF+L4/bfr+dAn7/qzp+7Ml7Psq0/dVJez786bvz5ew7y+avr9Ywr6vNX1fW8K+v2T6/lIJ+77B9H2D6bsVlHWuXCf6ctHvMfpS0e81+hLRvwt6Orb52Y8t/4y1RfDZmy6mmu9Pl/ng9cJAx2cBxpk/PpsHA9Mxz4fjHX0d82leoHyab453tI6MG8u7PDLepZHxLikD3kD7xep0vXMDzCtbu3VsCb7ONf7iuOaU+JhsTgn6LnRMVoq+Cx2TlaLvQsdkpei70DFZKfoudExWir4LHZOVou8vmb6/VMK+Cx2TlaJvzi2cW0rVN+eW8pxbGrLvO3++XPvQxVTz/enSADyzMudZsyYHfWwMzyzgmR1g24QZZ1VVut6Zst51SbbfO+srWm6vWfA9Q1+fCd7VB8rrWRXNt5vWkZG85CUveclLXvKSl7zkJS95yUte8pKXvOQlL3nJS17ykpe85CUveclLXvKSl7zkJS95yUte8pKXvOQlL3nJS17ykreWvOQlL3nJS17ykpe85CUveclLXvKSl7zkJS95yUte8pKXvOQlL3nJS17ykpe85CUveclLXvKSl7zkJS95yUte8pKXvOQlL3nJS17ykpe85CUveclLXvKSl7zkJS95yUte8pKXvOQlL3nJS97NnDflmVPRnDUH7eaUCaNqswPz5AxPuphqvj9dfIy4XWcEYqwvgnHGenKvFbx+obRfJ/p00S8yep3oFxt9muiXGH2q6JeCno7h+0lzljYu/rSksZx6t7yiqX2ttK3635YR6SpXyHrbujgDOLS/1tCm1WlNbH8Vtg7w+hzYZ5Z69pklgfaZpWaf0br21wHGsxS0pWbfCsm43DAuN4zYd212fY9I1zs/8zGtWZOuci7kTiXwz4fc0TbPS750krHODcAUZqxV1ek6GmBMyz3j1NdfkXGm+8hrUk73h0Xy+grYv1stbfm6Luubw+ZCzszMfrxV6SpnmG2r/WDfOidWJNnuKzNgvRXQzwzw+79tljb5Mh1MW2Hm9nR/189LbIflReY9HeH12Z5xV2Y87plmjphpeNOceRPyS/MnZVoYKO9ne/xZAv7o65clTZrO+Yvg86DB83kwP5CPDcbHBrO/dgRtIfA0ZP8ZOxKPhRo8xx5LS+DHQuPHQuNHyL6vSJr3rXX23VTOMN+q0n3tPtNXOldsD3NFgGPJIekq7bGkcviOJR8/tYltJ2HbnI4lcR5cAWNZ4hnLokBjWWLGssTMyx1BW+7xNsP82BfnwSUbmAcXBdovfpA0H3+aewOC7hfVVb79Qjl8+8VM2C+qgW1FIE/ul3XhcemQTeDJ/evx5FenNLGN8HhSmWS731yVNC2VUF8B+7uWZ1W09KpUPLjPLg0wp2MfOH7fvlqbZPv9A+euWuDQ/lolLY9Ha5Pmn6vZMTV+310IOVsL/SzyHENWJNn6MRf2T2TB76XaZqrsI+G+a68/L/E74txA89YDpq/Ul3qYG0LsD755SzmWeuatz8O81bCBY5xyOi7A4xk87lmykcc4izxjWRhoLIvMWLS+EBgXmXkLj0WWe45FlpTgWOTBpLnnaY6s3gSfu8rh+9zdGfJ3vxIcizwk68JjkQM3gScPrceTz57cxHZoCY5Frk2alkqob6pjkUI8gY9FarAPHD+PRcr7WOTUEh2LFMrLUhyLPGz6Sn05K+yxSI1v3lIO37HIcpi3zuOxSJCxlOpYpDJj7kLnvBaVoO8vJc371nq59L0w0GcZ5spykyc4V9Um2c7d881nmXLMhc8yLc83n2WzA32WNZjPstmGCa8dyfqzbKb5LFMW/K1R21xvPstmljgv8VqamdnnZf6z7Iemr9SXb4T97cD7WaYcvmPwvvBZ9s3N8LeDTX0dysJAc8+SAnPPQph7Fhqe2iTUfNg498w3c89Cz9wzO/u5p9nv1Dr3KMtsyHltcx/MPa1AX2R8yv7ahEaf6sCnSuh/OrBqm4fMPFkXgCnMWBuveZgGY1ruGae+/ujSpu33OFzLo3Mnnsf4ved1XUw1Px5d6iAPp2Q/3vx+OdlsW+0H+54UaB+YDOutgH4mg99a/h1c6zMJTFOfp8CcqtdZYjsszzTv6QivT/WMuzLjcU8x8/AUw5vmzI8hv34Pn8EhrqPFcaM/eM2Kvv7lpIllevbHA832wXRZZPZB/K43Ez7r6zyf9VMDbb86s/3qTO50BA2vOdbvetNA8/0GXheI+4akObfW68J6VoPbRxdTzfenC+6DkzPnqR6SS5rn+4Z4Joedh6vDjLOqCuewLL8rpOuYWNFye02GvJ5o5rT2oFUmYT5HdN1aR0bykpe85CUveclLXvKSl7zk/Tjy4vkJZc1Bu7oyYVRtSmCenOFJF1PN96eLjxG364RAjBOLYJywntxrBa9fL+31XvRHkuZt0/OPs5Y1ja1UvwEqh+83wL+c1MQ2V9jwN8A6yOmlnpwu198Affun7/4hHMvH4P6hGtzPlnjyemkJ/Cj022kprlUpdN6WfYe7RvtHpq/8Nb+bYB5UDt88eAPMg0dyHgwyljKaB4cUMw8GuM6xpthnVfiuacuQZ3UuaX5/+4Z48LqOEPd+BxpnFV7PnfXvOPiMB3v9Cz7joQG8mx1oX5tr9jWtIyN5yUte8pKXvBvixXsulDUH7RaVCaO95j4UT87wpIup5vvTxceI23VmIMbZRTDOXE/utYLXvy7t9TzXo0nztul3qPs3wfc75fB9v1sJ3+8e9ny/w2ds+e7bKdfvd7790/f9zncvTmVSmu93eN9WKc9zzTVeYl4vhbxWvhuTJo5U1znkZqNrnn/L6Lp/3Ap6qOtMK5LC59FmgLczsvc2f07nsaR5X+l+9cew+/wI3z6vHL59vgL2+b9wnw8yljLa51dv7D4f0o9C++RC2I5axmth55eYB+9fxLK9bwiPTWqzY6tKV9kA/dYCx0zPMUcDMOD18tkxVeefS4PPa62FfvCeQf2dtyLJ1o9pMJciy1SY27TNezKf6b1B00qcP9PAj2mBPmMeT5r3lfqSLG/qN8QcgvOzfsYoxxLYDtrmsROb2FoLG3832PS/G+D5fXxere/8/qa8RzTAb27DsA8cPx4PhLovfqGZ05XDd1/8QjOnZ39ffOOcHst98TvL/GHvi896Xn1C1oVsvWFeDXDsPixdpT12Vw7fsfvRMK/2+wjz6qZ6xsf/Oq8u8oylHJ6z4ptXy/X6kQ5QnlUCHzd0zI/H9xk+c20I9oHjx3OfDYHm+blmnrfPrsLzJHPNPJ/994nGe+tnm3nefnfA7w1Zz/MzzDxv/0cC/q+F8Wae3xzPDz2ZNO8r9WVK0GP3xs96e+yuHL5j95HwGTPd8xnD558UZizm2LY2yXZfW1Jg7tmY5wiW6vkn9nlQ5fL8k2Uw9+AcbY/Fy+H5J6vNPLm5Pv9k/+VN2+9AKRd6/skJntd1MdX8eHTh80+ayscvb/Ll4/D8k0Mgv06Az+BN/fyTu5ImllI8/2Sh2Qf5/JOPzj3DcM/w7OubV981a8LMnWvWbO3WsWXSci6p88wjAe7ZGvxR79kKNa8FGmf+Gt0JMDDffXL6+vlJ0xgnBMrjiSaPtY6MG8s7ryIu3qllwBsmz6pr0vWOD7Cf6jyhvo43/qL3q+C4Z4F5vTW8/mU4xk714+X918Mxw9fheGkFrGOSaJOTJk1f/xqsF9eRP76X9t+GPm6EPhbhMZtoi0HT178Jfdj3TRFtUtLyfbcatofDnvuusr4tkzJ+h8Znja80r6d/9HtsK6mv77n9FUm2x/WL4VgSWdBvbXOP2SaLPdtymed931vP+3RbrvS87wfreZ9ue31/+tJCM5bFnrFom4fWkycB9u/8nDU7aVoqoT6+Inzfc0zfc0rY9zzT97wS9r3A9L2ghH0vMn0vKmHfS0zfS0rY9zLT97IS9r3C9L2ihH2vNX2vLWHfp5i+TzF9d4Dy0/IaPitBtZDnMwods00CxgnmuKcDlJ8B7slGC3Tuq9n5J123fd5Gh6TlOakOUH4WuKcaLeT1XVMNt9anAaOOYSpoWn4OuOuMFurcakVS+LzJdGDUMdSBpuXnkyZN3/MCaHpO4UXQ9PzKSzDmWUYLef/LLDNmrc+G8ek5hFmgafllGIu+5xXQ9Bzdq6DpObDXQNPfNF4HTb9/vgGa/g7xZtLk10KjhbxOoND/68brBPS7ke/63LdgLPqet0HTY8d3QNNj43dhzMuMht8zKjMe8zIzZvtdA38nXAaalt+Dseh73gdNv3d8AJoel68DTb9ffgg+rDFa6sPaQD6sMT5ofS2MebWU14D23/eBpu+pAG1fKbcCbT8pbwHa/lJuDdoBUm4D2oFSbgvaQVJuV9Hk4SFGSz08NJCHhxgPtX4oMB4s5UNA03J70PQ9W4J2mJS3Au1wHStoR2gZtCOl3BG0o6S8NWhHS7kTeHis0VIPjwvk4bHGQ60fB4zHSPlY0LS8DWj6ns6gHS/lLjC+E42Wju+kQOM70YxP6ycB4wlSPhE0LXcF7pONlnKfEoj7ZMOt9VOAUcdwMmha3hY0fU830E6VcncY3+lGS8d3RqDxnW7Gp/UzgPE0KZ8Ompa3A03fsz1oZ0p5B9DOkvKOoJ0t5R7gw7lGS304L5AP5xoftH4eMJ4j5XNB0/JOoOl7eoL2CSnvDNr5Uu4FY77AaOmYPxVozBeYMWv9U8D4SSlfAJqWK0HT9/QG7UIp7wLaRVLuA9rFUu4L2iVS7gfeXGa01JvLA3lzmfFG65cD46VSvgw0Le8Kmr6nP2hXSHk30K6U8u6gfVrKe4D2GSnvCdpnpbwXaJ+T8gDQrpLyQNCulvIg0D4v5SrQviDlatC+KOUa0K6R8mDQrpXyENCuk/JQ0L4k5WGgfVnKw0H7ipRHgHa9lEeC9lUpjwLtBimPBu1rUh4D2telPBa0b0h5b9BulPI40G6Scq38TX/T0vMi4yGnb5YynjP5ZqCcvtnktNa/CYyq4bMs9bzIRA/3M2XGPQk0PS8y2cP9bJlx43VBel5kqof7uTLjxutKnpf31IGm50rwWho9V4LXqeh5kXrPmF8qszHj8y/0XMks0PRcCd5/redK8PomPVcyBzQ9V4LPd9FzJfNA0/Mi8z1+vVlmfi0ATc+V4L0jeq4E79PTcyWLQdPzIks8Y363zMaM/29Yz5UsA03PleD9MnquZAVoeq5kJWh6XmSVx4cPy8yH1aDpuZI1oOm5krWg6bmSfUHTcyX7gabnSvYHTc+VHACanis5EDQ9L3KQx0M8Z1IOHh4Mmp4rOQQ0PVdyKGh6ruQw0PRcyeGg6bmSI0DTcyVHgqbnSo4CTc+LHO3xsFOZeXgMaHqu5FjQ9FzJcaDpeZHjPePrUmbjOwE0PS9yooe7a5lxnwSanis5GTQ9V3IKaHpe5FTP+LqX2fhOA03PlZwOmp4rOQM0PVdyJmh6ruQs0PS8yNkeH3qUmQ/ngKbnSs4FTc+VnAeaniv5BGh6XuR8z5h7ldmYPwmaniu5ADQ9V/Ip0PRcyYWg6bmSi0DTcyUXg6bnRS7xeNOvzLy5FDQ9V3IZaHqu5HLQ9FzJFaDpuZIrQdNzJZ8GbU8pfwY0PVfyWdD0XMnnQNNzJVeBpudKrgZNz5V8HjQ9V/IF0PRcyRdB03Ml14Cm50quBU3PlVwHmp4r+RJoeq7ky6DpuZKvgKbnSq4HTc+VfBU0PVdyA2h6ruRroOm5kq+DpudKvgGaniu5ETQ9V3IT5KrmS/qntrH4P1+rmPa1j6z35hLsF4Wu1ftmCfoudK1eKfoudK1eKfoudK1eKfoudK1eKfoudK1eKfoudK1eKfoudK1eKfoudK1eKfoudK1eKfrmvMZ5rVR9c14rv3ktvQdiumiDVzb+Te9/OGdlE9umvB4+1P+E0z50MdV8f7pM8PBkec9QR+DBviYFGnsx/w9vkocn6+N43/94nFzinJtcBn2n2+bHomkepPvipJUtt0GGz9LJf+XV/vRZOsoxCeYJbdMVnqUzTdjwWv3xFSF5G++xm+jhQlZ9fabw6XNFQv1fzkKfbRMD51Wx+/OG/rfqlECMxdxzPsXDk/Wc4/sfqVNLnBtTy6DvdNv8RDR8jshKmHOy/8xrnHMmmTlHOfDeZW3zzxOa2NZ65pyJJZhzxm9gztHXDzRzzqa8hzPUnFPM8RPOOeM555RkzimUG1PLoO902/xUNJxzToI5Z2KJ5hzlmOiZc34Ac85pZX6cczbMOaX6/rahe0w/7t/fJpbY94ll0He6bX5mfE/z8bKg+3bVEN93mJ8ZNtyHjoF9+9OeY53KEvmm/RWaVzbHHCp0/rMc8ndzHXeh8/yl6LvQ8UAp+i50nn9z396FzjWVou+NORcSqu9C5/lL0Xeh8/yl6LvQeX7OqeV7Hj3rY1CezyvNd+tCOTe1DPpOt83PRcPv1o94vg9mffxtv1srB5430zZL4Pj7cfhubZ9zGGr/Xd+85Xv+M57f852f/Jk55xdiH0+37S8MV+rfL0vw3Wq82bbKMdHjzx+Pb2L7bZmchyiH52y1h7zCzw7fuQOdz2qz4212/kvXrRzaXysoTwIGnNMyZMpfzjoFcqsW+sHfZOsCfG6k67L/h9E+jxmf3f8vs49PD/TZOq2Iz1a8J9M+AwsZs56Hfmn6T/17Hvb1KYHmoalmHlKOKbC9tM0NxzWxvew5f4vP2plktJDXAeA+WJn4nxVnfyfBZ8rhc3X0PfhcHfUiB9p/n+cG2n/v+wVNc2dryKt2Zn5K/Zru8WtGIL+mG7+0jvceqzYetPbmWALvs8N7zLcy/uN9dnhPt3qHz+tX7/Ae6q3Xsx9WZuxNofM600vQd6HzOqXou9B5nVL0XegYvBR9FzqvU4q+C53XKUXfhc7rlKLvQud1StF3ofM6pei70LFtKfoeb+Z8rZdLngf4rKvBz1VdTDXfny74v/1mZs4zOH+cN6MIHvy/6fUBtk2YcVZVpevVZ39k/fv97IqW2wufPaKv4/8uDfVM2Zlmn9I6MsbEG6jv/HZr2IAPDR6WhhL7gIwbyzuLvEF5mQ/kZT6QtxAv84G8zAfyFuJlPpCX+UDeQrzMB/IyH8hbiJf5QF7mA3kL8TIfyMt8IG8hXuYDeZkP5C3EWw75gNd7KmsO2k0vE0bV6gPz5AxPuphqvj9dfIyYh3MCMTYUwThnA/vK3ECMc4pgxP/vM8fDOC8Q49wiGPH/Dc01+3C6rl8lzbnTa+WT1U1jyP66qMbnsCiDXsdvOVpDm9ePbWJrLWz4f62nw3jqPXNAqOvS680cUG/mJPx/3PWg1Zv5Ff8HeQNoev34HND0OvO5ML5Q9xoW+h/kU8ugb7yn4b2mpv+9Xh/b4vyL9zRlxJvPZ7wfthY4tL9WScv7PGqT5s8cyY5pSJ5pIuxjtUnL5wfhHFWRZOvHeJhPkGUe7N/aZqfVjX/1vqr5gebNYp4ZNB/mzfGGHRmzvq/q16b/1L8+MB9nfz9X43w808zHyjEdtpe2mQTzcX+YjzWv9f+44T3y+L/dQj1jZ6KZM7SOz9jR3J8Impbxf9/re/B/3+N90+nSEcaFz3Cd6hnztEBjnmrGrHW8H2mq2e9TTedMvL9Jx4/3S+n48X+J6vjHl+BzoND9TeXwHLuQfRe6v6kcnjEQsu9C9zeVw7NSQ/Zd6P6mUvRd6P6mUvRd6P6mUvRd6P6mUvRd6B7gUvTNOZVzaqn65pz68ZpTNybXAhwL1+Bxty6mmu9Pl2nAk/19pDVVH/U5Hvisk+x4Gu+dDHC/bBWeX8v63kk8v6Ze4vNO7Pm2UPedViSFn0FRH7bvvA8zN+CD73eGmSX2ARk3lndGZLz0l/7SX/pLf+kv/aW/9Jf+0l/6S3/pL/2lv/SX/tLfpKz9xethlBWfuzi1TBhVqwvMU+wzJ32MmIezAjHOLIJx1gb2ldmBGGcVwTgbGO01wum6fpM0506vtftwddMYsv/NpfE6QGXQ6wAtR2to8/1jmti2WNNYxuub8X+S1Hn2r1DXxNWZ/avO7O94vXUdaHVm7sLrrWeCptfM4bX+oZ4VP8OMReuTy6BvvObzraamza5tmeyZx7K/3rmq2fXOum7l0P5aJS3/X3Rt0nxOyI5pSLProPUa7NmGCe+3qUiy9aMB5g5kmQP7srbZUfZfvQY71P01DUXMkXh/TYNhR8asr8H+rek/9a/3mqZ+S3VPjHL47okZCXNvP5h7Na/flPfide+qhZwzCj23G+cM+39O8drqt5MmTd/zjmgdYQz4/2aneMYX6vqWKWZ8U8znWkfQ8JppnR/xGmwdK/7PCh0rzu9TAo2l0HWAU0rQd6HrAEvRd6HrAEvRd6HrAEvRd6Frs0rRd6HrAEvRd6HrAEvRd6HrAEvRd6HrAEvRd6Frq0vR9wQzR2u9FH1zTuWcWqq+Oad+vObUjfE8wHFvDR5j62Kq+f50wXM8dYF4irnWG889hDjnFGicVWHu9228phjP7aiXdfA9RF8vxXMUCp2vQ8aYePE7oO8c6JQyYbTnRUPx5AxPuqxvf/Ux4natD8Q4owjG+vXkXrqu3yXNtfQ8zelwDmla9vt1TQX0p+eQlEP7aw1tGo5oYjsbziFNN3mK8y3mbqhzSIXuacdzSNPM/oXPA8Fz+pNN3uMzQCoz5p5muLU+qQz6xmcfbANt8Zy57x5UPTdVmx1v/lwnfkerBQ7tr1XS8v9i1ybNfwfNkCm/7+BvX7XQDz7nQM+/ViTZ+oHPX0KW2bDfapurzLn6hkDzYTG/Z+IzxWYZdmTM+lz9703/qX/XwTxbH2ienWnmWeWoh+2lbT44vIntephnNa87wTw7yWgh59n/9f9Qd4Zt3snsqzlYD44l1HejyWYsk83nVUfQ8Hy7zoX4zJPOnnk71DYodL6oFL/vFjpfVIq+C50vKkXfhc4XlaLvQueLStF3ofNFpei70LmLUvRd6HxRKfoudL6oFH0XOgdfir439Dvwpp7XAnwO1eBnni6mmu9PF/wulf15qcZnEBRz3g7PA4T4/TzQ+bcqPP+W9XkyvDZSvcRnq/mu0wz1f8kLfcdDRvKSl7zkJS95yUte8pKXvOQlL3nJS17ykpe85CXvhnnxN2O8FkrbTS4TRnstVCiej/pMY2TE7RrqWsPpRTDO2EDuleu1hnWQj39ImmvpdSb7rm0ag+ZF1veran96DYxyaH+toc1xcA3MgcKG99zj/8+Z4tm/Ql03V+h+TrzexV77iM8AwGcKTDL7Jt6Pi9cfhvr/R4Wum5xQBn3j9U47QVv8ndh3n1aAa/2aPedC160c2l+rpOVza2qTUM8KqG52DaB9VsBM8KNUzwpQFt+zAs6Q/ZfPCkiSP5r+U/8+AXNvqZ4VoBy+ZwW8elgT26dg7tX9rQfMvZOMtqmvP5zomY+13BM0fc/OkAc9zByEny04vnJ4VgBef6jzI16n2NP40BHGymcF8L7WrPvmfa3Nr1Pkfa2b57MCCv3P0HKZWzb/+3kbr1Pk/bwffUnXwft5yUte8pKXvOQlL3nJS17ykpe85CUveclLXvKSd/Pj5fMGm/N83J43iNdJZc1YXwQj/m+oesOYrutPSXMtvR6lft+mMWT/TMTGa2W0P71WRjl8z0Q8GK6VaRC2zf2ZiHhNDf6PtomBxlLomuaJZdA3XnNUCW3xeYUTjc8hr1PE6yNrgcN3nSI+q5HXKSbJgbL/8jrFJPmz6T/17wiYe0t1naJy+K5T/M+hTWzHwNyred0L5t5JRivn6xR7e+beXSAPepn9F6/PwPGV23WKOj/i/znqbXzoCGPldYq8TjHrvnmdIq9TLFXfm/I6xR1M3zuUsO9NeY0k53PO56Xqm/P5x2s+39C48T7Pp+U1vAdatUDXC6/3fAWez7H/zx7PBT0D3NONFvJ88HTDrXU852TPteJ5tmeBu95ooc53ViTNz3dWQh3//7eOoR40LT8H3LOMhudkKjPmnmW47f9g6ABjmAWalp9PmjR9zwug6bmKF0HT8xYvwZjnGS0d8/xQn5FmzFqfD+PT8x3zQNPyyzAWfc8roC0Q7VXQFor2GmiLRHsdtMWivQHaEtHwfzMvM1rq1/JQnzHGL60vB2+WSnkZaFp+C8ai78H/17xCtHdAWynauzDm1UZLx7wm0JhXmzFrfQ2Mb5WUV4Om5fdgLPqe90FbK9oHoO0r2jrQ9hPtQ/DhAKOlPhwYyIcDjA9aPxDGvL+UDwDtv+8DTd9TAdpBUm4F2sFS3gK0Q6TcGrRDpdwGtMOk3Ba0w6XcrqLJwyONlnp4VCAPjzQeav0oYDxCykeCpuX2oOl7tgTtaClvBdoxOlbQjtUyaMdJuSNox0t5a9BOkDL+z5mTjJZ6eHIgD08yHmr9ZGA8UcongablbUDT93QG7RQpd4HxnWa0dHynBxrfaWZ8Wj8dGE+V8mmgaXlb0PQ93WEsZxotHctZgcZyphmL1s8CxjOkfCZoWt4ONH3P9qCdLeUdQDtHyjuCdq6U8TkFnzBa6sP5gXz4hPFB6+cD43lS/gRoWt4JNH0PPrvgk1LeGbQLpNwHtE9JuS9oF0q5H3hzsdFSby4J5M3FxhutXwKMF0n5YtC0vCto+p7+oF0q5d1Au0zKu4N2uZT3AO0KKe8J2pVS3gu0T0t5AGifkfJA0D4r5UGgfU7KVaBdJeVq0K6Wcg1on5fyYNC+IOUhoH1RykNBu0bKw0C7VsrDQbtOyiNA+5KUR4L2ZSmPAu0rUh4N2vVSHgPaV6U8FrQbpLw3aF+T8jjQvi7lWtC+IeV9IH9v0nZJtvfj3pz9fpHfxN+U9baVdSu/9tca2ozbr/FvJ+n/m7BPbS9/bwJ/bqxo3q49lIv4/bZ6QwOpAN50HGd5+m4NbSbBONDb2iS7bYbe6rpvNN5iuaKAX7cU75ddWviXruNbst4tgOEW6Pfb2XuSv1/9tkB5/B2Tx8p/G2x/bTPL5PF3PHn8bcjjWyuat2sP5azz+DaTx7bv1tBmvsnj2wLl8XdMHt9qvMVyhYc5XW6HfLvNk293BsqLuwrMb3eCn9pmucmLu4B/ufzF+e2Oiubt2kM567y40+SF7bs1tFlr8uLOQHlxl8mLO4y3WK7wMKfL3ZAXd3ry4t5AefHdAvPFveCntjnE5MV3PXmB88U9Fc3btYdy1nlxr8kL23draHOUyYt7A+XFd01e3GO8xXKFhzldvgd5ca8nL+4LkBfpd5LvA4Py4VIJ5fuA5/7MeYbkr4e7rwie+4HnB9n7Ux1mnI3Htw8Ae1brTdfxYEXL7aVj6AivY/8PBvCuAvrVdWsdGclLXvKSl7zkJS95yUte8pKXvOQlL3nJS17ykpe85CUveclLXvKSl7zkJS95yUte8pKXvOQlL3nJS96PK2/Ko9dzK2sO2n2/TBhV+wEwPiXv0ftN0meNnrd/E69eM1+bHW/+Vk68n6AWOLQ/vJ9gwCFNbBcIW3r/w/eMvzl4D3p+TyDP7zWea137Sxn1XoN7gefeQDzfNTy+vu/OvO/G/1eLXqSLqeb70+XuwNsmzDiHVG0t69G8u9v4W5k0jeuuQNv4HrONte67N2xT9B3iHrB0vXcEyNt0lbfDPFQJ/HfAPKRtrpO5R+/Puh380By4E/Z99UXbtYLyXeAT3ueZnW+D87e43wFzYy30j/eYhroH99ZA2+wWs82U/1bYZtrmRrPNbvFsM7yn7raK5u1aQfk2s82+lf02y4/vVrPNtH/tL/1j7/m+w3iA95tneU93usqbwP99gAXv5dc2t4P/gZ5bUJOu98ZAuXafyTXlvxHGqm3uMbl2nyfX8L5e9es+yLX7jJe1SfP77LLzrSY/P9xocu0+c4yY/rnf5No3jQd4X13WufagyTVleQD81zYPmVx7MPtcG5yu96FAufawybX/jgvGqm0eNbn2sCfXHoRcU78ehlx72HhZK779MPtcy4/vIZNr2v8PIdceMbl2v/Eg5ftRoFx71OSasvwI/Nc2vzC59mj2uTYkXe9jgXLtcZNryv8YjFXb/Nbk2uOeXHsUck39ehxy7XHjZa349kTmvlXn57XHTK5p/09Arj1pcu0R40HK9+NAufYTk2vK8mPwX9v8zeTaT7LPtaHpen8aKNd+ZnJN+X8KY9U2/zK59jNPrv0Eck39+hnk2s+Ml7Xi28+zz7X8+H5qck37/znk2i9Mrj1pPEj5fhko135lck1Zfgn+a5uXTK79KvtcG5au99eBcu03JteU/9cwVm3zusm133hy7VeQa+rXbyDXfmO8rBXffpu9b/l57dcm17T/30Ku/c7k2i+MBynf7wPl2h9MrinL78F/bbPO5NofsvdseLrePwbKtT+ZXFP+P8JYtc0WBzSNNQE9XTTX/gC5pn79CXLtT8bL2qRxe//RbO/fmfemHvw50PZ+ymxvZfkzeKBtcuBBe9Ark2y3y1/MdtF94ylg0jadzHb5i2e7/Ba2i47rL7Bd/mLGXJs0bpenzL6q7fDcy9+yz/mR6Xr/Hsjbfxhvlf/v4K222d54+w+Pt38Db/9a0bxdKyj/1Xj7d+OttsNzJP80+8VThjX16f8C7Rf/MvuFsvwf+KRtepv94l/Z58TqdL3/DpQT/zE5ofz/hrFqm11NTvzHkxP/gpxQv/4DOfEf42Vt0ri9/21yQtvhuYynTU7807CmPj0TKCeeNTmhLM+AT9pmkMmJZ7PPiTXpep8LlBPPm5xQ/udgrNpmiMmJ5z058SzkhPr1POTE88bL2qRxez9nckLb4TmHF0xOPG1YU59eDJQTL5mcUJYXwSdtM9bkxEvZ58TadL0vB8qJV0xOKP/LMFZtM97kxCuenHgJckL9egVy4hXjZW3SuL1fNjmh7fDcwKsmJ14wrKlPrwXKiddNTijLa+CTtplucuL17HNi33S9bwTKiTdNTij/GzBWbTPb5MSbnpx4HXJC/XoTcuJN42Vt0ri93zA5oe3wO/xbJideNaypT28Hyol3TE4oy9vgk7ZZbHLinexzYr90ve8Gyon3TE4o/7swVm2zwuTEe56ceAdyQv16D3LiPeNlbdK4vd81OaHt8Lv2+yYn3jKsqU8fBMqJdSYnlOUD8EnbHGByYl32ObF/ut4PA+VEfkMlTTmh/B/CWLXNoSYnVE8XzYl1kBPql7ZrBeUPTE58aLb3++a9qQcVUs56e7cCD/YBFu2vNbQ51mxv1SuTbLfLFma76HzZCpi0zYlmu2zh2S4/h+2i49oCtouW9bXapHG7aH+6r2o7/K7dBt5Tm2ThQXX+Ooe2gbxtZ7xV/rbgrbY5y3jbzuOtvj/1tnWr5u1aQbm18bat8Vbb4Xft9tBf2qaVYU192jLQfrGV2S+UZUvwSdt8yuwXW2WfE/nrEXKBcqKDyQnlz8FYtc2lJic6eHJiK8gJ9asD5EQH42Vt0ri9cyYntB1+1+5ocqK9YU192jpQTnQyOaEsW4NP2uYqkxOdss+J/HUD2wTKic4mJ5R/GxirtrnG5ERnT050gpxQvzpDTnQ2XtYmjdt7G5MT2g6/a3cxOdHRsKY+dQ2UE9uanFCWruCTtvmayYlts8+J/O/73QLlRHeTE8rfDcaqbW42OdHdkxPbQk6oX90hJ7obL2uTxu3dzeSEtsPv2tuZnOhiWFOftg+UEzuYnFCW7cEnbXOHyYkdss+J/O/wOwbKiR4mJ5R/RxirtrnX5EQPT07sADmhfvWAnOhhvKxNGrf3jiYntB1+197J5MR2hjX1qWegnNjZ5ISy9ASftM1DJid2zj4n8r+X9wqUE5UmJ5S/F4xV2zxqcqLSkxM7Q06oX5WQE5XGy9qkcXv3Mjmh7fC7dm+TEzsZ1tSnXQLlRB+TE8qyC/ikbX5ucqJP9jmR/127b6Cc6GdyQvn7wli1zW9MTvTz5EQfyAn1qx/kRD/jZW3SuL37mu3d27w39WDXQNu7v9neyrIreKBtnjLbu3+g7bKb2S76GdofmLTN38122c2zXZ6A79o6rt1gu+xmxlybNG6X/mZf1Xb4XXuP7HM+/7v2noG83ct4q/x7grfa5lnj7V4eb/eAnN+9VfN2raC8u/F2T+OttsPv2gPMftHfsKY+DQy0Xwwy+4WyDASftM1rZr8YlH1O5H/XrgqUE9UmJ5S/Csaqbd42OVHtyYlBkBPqVzXkRLXxsjZp3N5VJie0HX7XrjE5McCwpj4NDpQTQ0xOKMtg8EnbVBzY5FN70GuTzHIi/7v20EA5MczkhPIPhbH+tw2MNQE9XTQnhkBOqF/DICeGGS9rk8btPdTkhLbD79rDTU7UGNbUpxGBcmKkyQllGQE+aZtOJidGZp8T+d+1RwXKidEmJ5R/FIxV22xrcmK0JydGQk6oX6MhJ0YbL2uTxu09yuSEtsPv2mNMTgw3rKlPYwPlxN4mJ5RlLPikbXqanNg7+5zI/649LlBO1JqcUP5xMFZts4vJiVpPTuwNOaF+1UJO1Bova5PG7T3O5IS2w+/a+5icGGNYU5/GB8qJCSYnlGU8+KRt9jQ5MSH7nMj/rj0xUE5MMjmh/BNhrNqmyuTEJE9OTICcUL8mQU5MMl7WJo3be6LJCW2H37Unm5zYx7CmPk0JlBNTTU4oyxTwSduMNDkxNfucyP+uPS1QTtSZnFD+aTBWbbO3yYk6T05MhZxQv+ogJ+qMl7VJ4/aeZrb3ZPPe1IPpgbb3DLO9lWU6eKBtJpvtPSPz7VJVnYO+daloXs33p8sM8GjG/+5RC56OwDMD9t2/yPq/LXDp81HqD2xiyX5fqKm2OVsLHFM9Ofv2QU1sDcLWAV6fDrmp79d7CNbJeqd42mBOa65+aN6Hc6auYzK8T+eyvq2av2+Cpw32N97so/o+/BydYObedMHP9R7yd6X8Tbfx08oq40i3sX4G62t4LFSZZJdjeKyg69a69tcRtKkVTdoz8p5pHu5nyoy7DriflfdM93A/W2bcM4D7OXlPvYf7uTLjngncz8t7ZoH2gmizQXtRtAbQXhJtjmfML5XZmOcC98vynnmgvSLafNBeFW0BaK+JthC010VbBNoboi0G7U3Rlnj8erPM/FoK3G/Je5aB9rZoy0F7R7QVoL0r2krPmN8tszGvAu735D2rQXtftDWgfSDaWtD0s2df0D4UbT+PDx+WmQ/7A7ceZB0AWoWUDwStlZQPAm0LKR8MWmspHwJaGykfClpbKR8GWjspH+7xUF8rFw+PAO72Uj4StC2lfBRoW0n5aNByUj4GtA5SPha0jlI+DrStpXw8aJ2kfILHw05l5uGJwL2NlE8CrbOUTwati5RP8YyvS5mN71TgGZs9T03O8KRLRfNqvj9dxrYK60+gcVal68BzqDrmseC5vj4JxjgmUA6MNTmgdWTcWN59yoA35ela0Zw1B+26VpQH41jPvratsJ0Gc0Q3KddCu+6inV7Rcnzdy2x8Z8BYtpPymaBtL+WzQNtBymeDtqOUzwGth5TP9fjQo8x8OA+4d5LyJ0DrKeXzQdtZyp8ErZeUx3vG3KvMxjwRuCulPAG03lKeBNouUp4MWh8pXwBaXyl/CrR+Ur7Q402/MvPmIuDeVcoXg9ZfypeAtpuULwVtdylfBtoeUr4ctD2lfAVoe0n5StAGSPnToA2U8mdAGyTlz4JWJeXPgVYt5atAq5Hy1aANlvLnQRsi5S+ANlTKXwRtmJSvAW24lK8FbYSUrwNtpJS/BNooKX8ZtNFS/gpoY6R8PWhjpfxV0PaW8g2gjZPy10CrlfLXQdtHyt+A/B0bKH/1nJyuW+t4rBWq7zrTd10J+55h+p5Rwr5nmr5nlrDvuabvuSXse6npe2kJ+15l+l5Vwr73N33vX8K+jzB9H1HCvk80fZ9Ywr5PNX2fWsK+zzB9n1HCvs8zfZ9Xwr4nmr4nlrDvi0zfF5Wwb36G8jO0VH3zM5SfoaXqm5+hH6/PUM6pnFNL1TfnVM6ppeqbcyrn1FL1zTmVc2qp+ua5nsLnekZn33cN/raoS0Xzar4/XUYDT4jfHwONM3+9yigYp45Z++oIr+P1KqMCbW+837ES6si4sbz7lAFvDjS8bl9fnwqa3teJ18nrPZx1oOk9mXhdut7fOwM0vY8XrwPX+4lngqb3DuO103ov8FzQ9L5yvGZY7x9fCprex47X2eo966tA03vQ8TpUfZ7B/qDpcwvwWkt9fsIRoOmzEvB6Qn32xImg6fMQ8Lo8fYbFqaDpc0TGwrbUZ5WMAU2fS3IavFefRVIL7SqljNf19BLtDND0GTl43UtP0c4DTZ9vg9eK6LOSJoKmz0S6ADR9NtOnQNPnMOH1FfpcpYtA02d0XQyaPovrEtD0mWCXgqbP/7oMNH2e1+Wg6bPhrgBNnwF3JWj6LLpPg6bPnfsMaPocuc+Cps8k/Bxo+uzBq0DTZyBeDZo+7/DzoOnzC78Amj4L84ug6TMvrwFNn715LWj6nM3rQNPnln4JNH2W5pdB0+effgW0RLTrQdPn3H4VNH2m7Q2g6XNsvwaaPu/466Dpc42/gXyNxf/Og/lxiIbzZGvRRoLWRrQRoLUVbTho7UQbBlp70fBZCFuKNgS0rUQbDFpOtBrQOohWDVpH0fAZHPp/oAeBpvdkDgRtG9EGgNZZtL1A6yIaPvulq2h7gLataLuD1k203UDrLho+p2c70XYFbXvR+oG2g2h9QNtRtF1A0/vXeoO2k2iVoPUUDZ/vtbNoO4PWS7SeOJ+KthNovUXrgfOzaPhcuT6i7QBaX9G2B62faNuBtqto3UHrLxo+z3A30bYFbXfRuoK2h2hdQNtTtM6g7SUaPkdzgGidQBso2tagDRKtI2hVonUArVo0fH5rjWhbgTZYtC1BGyJae9CGitYOtGGi4XODh4vWBrQRorUGbaRoW4A2SjR8xvNo0SpAG5NowyZtrEjrYL7aW7QPQBsn2vug1Yr2Hmj7iKbzYDrf+O5nTbWpRksXvJdV36Pt0vlMj8Frk2zvM9f7XiuS5vf86727+NyD0M94UBZ87oG2qTi48W+npPmzCvReY30vflcZb8b2EbhbjAO52xgW37Mp2gJ3yqTHhZUZbsd8/kEu6ZhxqYRyLXiU/XNOGr+zBrh3owrPN2S4TVvcu6Fe4jX89pk0ob7vV0C/um6tF7p3g7zkJW958I6nv+QlL3nJS17ykpe85CUveclLXvKSl7xlx4tt9Hm7+nuCnivHZ5BfCuf0E7N+Hau+P/29Z4IZfyso62vrkubXtGX4nNgaHGv6R39rwmuYRnnYxsC2Gfm/c3l/AxoBvuNvQCPBd21ztfktZXjm+dL4W8oI8CVdKppXm/2WMhw8GhYgf9P1Zv8/Kxp/8xgC49QxD4V9dIhnHx0SaB8davZRrSMjeclL3vLjHU9/yUte8pKXvOQlL3nJS17ykpe85CUvecuOF9vY3zz0nHZraNP7kMa/+pvHUM9Y8TePkWb8raCMvyWkHmTw/6dbeGDHOrhVS+4aYNO2U+B1/F/d+vtIDWxPvX+nGrZn9v/LvHF7VgFLul69PwfvNVRN29r/+3dPReZs+Ud+6/+YbCXrfUrWrf2lfev/IqzMru8R6ZjvkPXqsr7far4NPLdlz1MdaJz532puhYHpmLWvjvD6N2GMtwYYYwX0q+vWOjJuLO+3IuP9TmS8t0fGe1dkvHdHxvvdyHi/Vwa8oT6/KqAPPQa713jRGtosMsdgPg/1/ekx2J3rGUdtkq2HyFLrGUfa942BjgFuhr7TxVTz/elyI/DcFOgYIMA488cA98HAdMw3wj5zn+cY4L5A+8yNZp/ROjJuLO+3IuP9TmS8t0fGe1dkvHdHxvvdyHi/Vwa8oT6/KqAPPQa41XjRGtqcZ44BfB7eCscAt3jGkbmH1Y3PZgj1+f4D40eqPWC0tP8HA+RG2tf94HG6mGq+P10eAMaHpHwnMP4we8b8dbSPmBzSfh6Avn9U0cSfUd/V2HeFhPbzCOSvlq85pKntj+D1deDXfbC+R6XcStr8yNPmYSjjeh6FDYVl3Z4/hLlGX8d1PbQBvvbwvsokW09/aOajH5oxpef2LjukieOh7Dlq0NvWsm7Np4fCelCF+aE5bbdR2vdjgXL6RyantR/MWS3fLtshgXbpcr/ZZh3At8dgnvDtq48FzquKpHleoY+F2uA+9Nh69qd0nI9UtGy3Pm86wuuPbGQ/+J6HSuDdo2affNSMMd0nvwT75A8DcTxoOB40vmBO3ej5PMLPzIcDMKZ94TZMF1PN96fLQ8Cont4Sdnvm55fHzfziy6UnAs0vj5v5Rft5HOYXLT8On5lPmM+kR81nUvrnSSnrZ+YTnjY4v+F6noQNhWW7P3eE13Fdj26Arz28rzLJ1tPHzH7xmBlTun9+H/bPAJ9bNeitfmba45FAHlRhfmhO222U9v3jQDn9hMlp7QdzVst/hc/MH3vy7En4LFHffgzzhG9f/XHgvNLPw8cMz/ra4D704/XsT+k4H69o2W593nSE1x/fyH7wPY+WwLsnzT75pBljuk/+GPbJUJ/dDxuOh40v7cHDDPuuwVzVxVTz/enyOPD8KHOe6vz9jY8XwYPzRojvOmHG2Xg+4klgz2q96TqeqGi5vX4E+9cTZj/F44jKJMz3FF33j8ycS17ykpe85CUveclLXvL+L7x4zlVZc9DusTJhVA2/46pWmx1P/vvUX5Pm2yz9TltzaNB+878b69j0fyBYjtbQ5txDm9iGSRnPreDvEY94tmWoc9mPmG2pdfwtwf6e2B7KWfMUyi1f37VJtnn0t6R5X+m2qj205TbIrt/qFr8d1wLHDyGPtM1UyKOJwBbg3oL89rgXtkdt0vLeghxo94Jv5+3fWMbfor4P73nYaIF+Q13vuaeHIMfV64c9PLVJtttb+7D3a+C5VP1NKevnfT0AubYPsDwIuaZt5kp+6f98edDkgr73b0kT9wOBuO833MryAHBrm0XA3R70yiTb7fgDYKoEH+4HJm2zDJgS0NPlUeNjBxjXDyAnsr/2akgV7uM6DvX2PhiHtlljvL03AFOYsTbek3YPjOmHnnHq6wfAPHuQlPFaKPyMONHzui6mmh+PLvfCtr0j+/Hmt+1tZtva69TxmvSKJNt59zZYbwX0cxv4reUTDm3yBe8HUJ/vgLlar+fCdlj+gXlPR3j9Ts+4KzMe9x3m88beX5HmzKGQXyfC5/j9AZhw3OjPg+DPnWY+TbXvmzkoze97PJ/boa4Jvcf4eI/ZXzuCdr+HpzYgT7revyXNefAY8h7Y1rUbON6/z2hh5tXGMdxnPL3PzAd4vH8fHKdoGY+B7WdHqv3VeJKO5c5A8wt6jCx3eubzS82xzB1mXlRuvOZQ21xhPrvv8MxP+v4O0OcdQeeaxmOQWwuMw3f/0lXms/vWAEyh5tV0HbfAmH5U0XKc+vo1MLdeB5/Nuj3wGs5bPK/rYqr58eiC93TdlP1489v2RrNttR/s+/FA+9aN5rNb+8Fr4rX8Lfjsxt+21eebYG7Ra+SxHZbvMO/pCK/f7Bl3ZcbjvsnMjzcZ3jRnvgL5dQt8doe4px3Hjf7oft4RXvfd71+bsT+3mM9AO9+0B54M+252r6bt+2bPvpj190/cF/cBlps8+8O9MM+2gjY/MJ+dNxb47LwJ9r3HzWfcjZ7POG3zA/MZ90SBzwb8zqxtHjSfcXhO/H7PZ5z2+QR4n/01TI2fcT8x41Dvfwzj0DaPms+4nwT6jAtxvVa6jp/CmG7zjFNf/zHMQT+Fz7AnzLFH+vpTntd1MdX8eHT5CWzbn2c/3vy2/YXZtv/f3lmA1XF0b/yS0jYV6q7UvY00beq3IQQIBAmQEALB4wlpQqxJ06bu7u7u7u7u7m5f/avL/93LnfJyGGjZns0/p9+9z/M+LLs7O+d3dubM7OzsrsuH8342ojbuGdHGuXyeIX+75depjXvWE4+fpjbuqbSO+/HyoyJNBm1/ysOdqcz9tGjjnhb2BmXmGSpfb1AbF8XcYeZm/1xF/nlKtMN8H8ztH5RvVz8ejjQutfrxSeHHJ0V9zaB1j5GNLo5eSf7uQ9eIxcn1JXT8IiqTryfX5VL5LUwuL5H83x2jiGxxxysk3xREVLeGiLpVIPJOp32+pLI2elJHP6xLvisU63rScTKVGQrF+XX/D6G6XiS4lqblTFrn0qxH65xP1qd1g0Xa4JdDy267KwMB/8CI+PMEv/t/IPl+gH7eiTm7Aynv4Cf+TeTnfgOojLt0+VRmBnjsHhqRzwYIn7n/h5KNbl1exPYsJez5Kz/6bMwlG0sjsnFoN2wsJRtdukFkY1lENpZ2w8YystGly07+7UHbXR2OJ20fltb2f1zH9sTzMOWUd5zyH0Z+q1D3W59E/25E8riuf+dsqaB2wO2zSjL2u2uQEeRkV5/LKVYOT2u/H3PEY7r1mm2JeziCvEdG5MMq4UNny0jyodtnHeHDKo8PR5APK9Pa79eDlnPIl2mUnytHVZ5yVBORD2qFD5wtNeQDt8/G5IOetF7TpmhYW/vCdcRU5OF027dIcgb9pq2Sy0Gsqk5ud/2nYPvOnu3u11Usq6Vz26DPmzi3jeLcunw476a0NluV8u7Neacl5fJpJH+75Z0mtfmliZzm/NxA9ao+reN+vFwt0mTQ9noPd6YydwPZkkn/N1GZ6UXly5WfwKZREZX7eo9/RpJ/3PbhdM7qRFwe6YnL9RHFpAZRbuvE+UunfQaKmNQQgU3RsLaeG64PozycbnselZl8ijkuflVT+ar0bHe/rmJSA53b0RHFpDHi3I5O65j32Ihi0hgRk1w+Y8jfbnkExaSxnvozmmKSq9u8Hy/XiDQZtL3Jw52pzD1axKTRwt6gzBRS+aqkmFQbgU3Mzf6p88TsSlq3rmizg/Lt6se6kcal9m2aO3ajqK8ZtK6W1rkxh0Ja58YrhtA6N15RQOdlNJ0L12fRfp94MXG5a6ci8rFbx/2e5sbW5aDP6vq/ryX3iyftdde48ZjudZe7vnf9ZZc/X1NnR9Q2DRTxy9mSTTHE7bOHuGbgsZfS5N88iiPuenughyMe0y3LA0X7LjmiGYNq9WGh8KGzZQD50O0zW/iw0OPDgeTDLFHXmEOx3vTiPNLp3A2gfIsjaseKRDtWLJj5+mY+xfUvKJbk6sfIxPhiPp0fZyP/MmmZ62teBDE7Is7Euc8mMBl/Mmh7dqyNMTsCxjTK1x07V9Tl7tg7KNIY+vfsjea89d4+ojH9PsvEWu8P5Yv4LbmC+OTiw2BiLdKP8e3irDu2y7uI2k95nyWetKlE3abWOQfFFPvjlH8J+aM0org5lPovbEspxU23z2nU7ixN63OoX1Qu1vFYc6ay7eWizrj/h1HZcuPPPJZbLsrb0pSmgNa5a3++B1ch0gblxY1xVojyMlK/DCf6epWUdzzWcYw2mnGT1n5KjeinOFtGUXlx+1wmxiGiGK+NcoyolpjKPJxu+9XUn7iWxhncmDXXsXs8291P/Jvgcb8aOrcRXMt5x5hcPpx3Y0RxqIGOm0b5NJC/3fLdNA7B15/Oz/VUX931M+/Hy1UiDV+v1nm4M5W560UMqxf2BmXmBipf91B/tTqicl/n8Q+POdR5+iaj9GNdwj+1or2W8WZBjrnWirLCZfLRf9GYa7WH021/isriM54x1Soqt2+nxlw7+JrzdrGuqzHXtzoZc3V+/reNuT5P5ettinV1EZV735grj1O67VmeeKM95sjtUrmnXcoR7XFQr1x55f72/9d9vAxax+PWg0WbFqxz/exhtM71s4dTeeDxmbyI/M7jM268No987Nblk11DkmO9f2cO5avJdTlU7y3PofyZ6ugekzv6YU3yXaFYtzDPoVyL1rk0a9M655N1aF2+SBv8eC6j2+7KQMA/KCL+zsaQePwqSz/vxBjnIMo7+Il/E/m5XxaVcZduMJWZLI/dUc2hzBI+c//z/ES3Ljdie5YS9vyVH302cjuwsM6h5OuGhXUOpRuv5DmUrg7HY6k5lMFvvWTs982hdPU5NYey6zmUmwkfVnl8+HfnUOaRL9NiduZQ9iYf/JvnUG6X5Az6Tf2Ty53NoczxbHe/rmJZag5l2/KgyW1++V+YQ7kTlS9XflJzKINf9+dQFomY9G+dQ1lGZWYYxRzfHMomz3b36yompcbz2pYbKSb9L8yhHEHlq4liUm0ENjE3++ev5lCuKdpsnkO5ZqRx6Z/NoXRjDjyH0o1X8BxKN17Bcyj3oHOxIOZQumsnnkPp1nG/58CG1uWgz+r6v68k94sn7eVnhZTsTVx3uet71192+fM1tf5cmda2KUvEL2fLQIohbp+54pqBxwxKkn9zKY646+0sD0c8pluWs0T7LjmiGf/zz6HMEnWB51DuL3xY6PFhFvlwgKhrzBHlHMpswbCwzKE8nOL6TxRLcvRjZGJ8cTCdH2cj/zJpmetrBHMde0fEmTj3PAdZxh9+5pznUEb1TH6OaJdyRF3ulr2RxtC/Z2805611DmUU4+puDuVgEb8lF9+v4Of8F9QcSpd3ag7lX8+hvJDaHZ5DOYj6ReVi3cI8h5Kf1XBp8mmdu/bneZUVIm1qDmXr/745lDeKcYh/6xzK26g/cQeNM/jmUD7u2e5+4t8Ej/ul5lC2LT9G4xD/C3Mo76by9Tj1V/+/51AO9MSbuLJ/akV7vbDOoXzhXzTm2tUcylepLL7uGVPlOZSfpcZcO/ia83axrqsx1087GXP9t86hfIvK12cU6/6/51AO8MSbBT2HcpBoj3kOJfe3F7Y5lHmiTQvWuX42z6F0/WyeQ8njM7kR+Z3HZ9x4bS752K0bTHY1Jsd6eQ5eER2Hx+1eFsdMI1Y3h1LO98ug4xXQuc2JKCYNFjEpR+SdzvzNbX4Y0tzRD8uS7wrEup50nExlhgJRPt3//KzcEMHFcyOXo3UuzfK0LkfsF/z4OVy33Z3viMZWunznJI+TR/XOye7M8+N3Trp0vndOst3FEfmss3dOFpONvndORmFPd9856bOR53SWRGRjcTdsLCEbi0W71IO2u/oRj0U21zMxTuKu2V0fz+XPY1tun42ScczdUykjUFdeSygWuGvNMuJzy/yOj4jGvxJ8wwWfnGuZTvtsSXw9ab2mTVGN9QXH4DmcQzycbntvapv6Jpd5Tm0hteEDPNvdr6tyPpzqXaU+b+L6ZKQ4ty4fzrsqor7ASNEXcPnwHFC3vHtzm194PMv5uZLqjBun5P14uVSkyaDtIzzcmcrclaJ9kPNVE9+kpfLlyk9gU3lE5X6Exz8859tt5/n0y4o4F5RvVz+4HxbVuHyF8GOFqK8ZtK6c1rl+VQGtc/0v7nsPIb9HcB874Xe+T+TaqyHkT7eO48lZ9a3LQVvg2oyXkvvFY5Hd0020BYNEvJDvhOF3Gg0TbR0//zIy+Zfvg+SJtjyia7FenEc65cv9nIERxbxsEfMGCmaezzCKYsC4qW1+cj6Le3y3G/UTcjspG9kRlQ35jjP5Hht+x1mTKBsDPWWD5+d09Y6zzJjudUd33nUf7XvP6hLfwc7uhj08fhTFNWFE13u9OMb2jOnWdY6xzpd8vSjHRHrSusxYbIFcGxZ6+jQpe1P2puxN2ZuyN2Vvyt6UvSl7U/am7E3Zm7I3ZW/K3pS9KXtT9qbsTdkbT9mbsjdlb8relL0pe1P2puxN2ZuyN2Vvyt6UvSl7U/am7E3Zm7I3ZW/K3pS9KXtT9qbsTdmbsjdlb8relL0pe1P2puxN2ZuyN2Vvyt6UvSl7U/am7E3Zm7I3ZW/K3pS9KXtT9qbsTdmbsjdlb8relL0pe1P2puxN2ZuyN2Vvyt6UvSl7U/am7E3Zm7I3ZW/K3pS9KXtT9qbsTdmbsjdlb8relL0pe1P2puxN2ZuyN2Vvyt6UvSl7U/am7F2A9gb2uO/5OVv5m9gDFxIb3bqsiO3p7vfACz32aH6LM8PjjyCvqL6FXtQNdv4WepEo08Gx3hE+Cr7TGZvaxjBE31/90ii/4Dube5MdLr902ueUqW22pXu+ITqQeHI9dWJQRHUiV9QJ97/Lj79pyt9lzY3Injxhz8KWd7Z63n168Tl3v67qQ3bE5SIazrpeyySPky/aAT6fjisronM8SJzjQZ54PyCimJfVjXM8wGOP5jevM8ieAQugrRuykLV1Qwy1dT4b4zE9fwQ2vivyD9qpjakNzVfPt3cv2YbGyY58Txs6idrQzakNdduLqM3KF/0Ebse4HrrY04PScDvA8aJQxKvgmC6GDfbU13hM7xwFh+TvYcdjHfv8PWId+9PxpE0l+jYlvjVeLM6fy7+E/FGaXE6L6cbyoVRW2ZZSKjtunx2S5WXZ5Hlz63Oo31Uu1gW2D4uoHSoX7ZD7fxiVrbLkcjmtKxflbWlKU0Drhov9grJRkVweLsrGSH3GRNmoorKRSfmPpPPj9hlE56cnrde0KSLW3sExqompzMPptudTDBuSXA7K3ojkdi7TVZ7t7if+TfC4XxWV3xp93kQsqhXn1uXDeddFVO9r6bhplE8t+dstj5za5pc6cprzcw3VmVFpHffj5REiTQZtH+XhzlTmrhExo0bYG5SZYipfVdR+V0ZU7kd5/FNB/nHbB5F/XL3Q7M8Gx6gmW8pFHQxscXF9BMX8Kk/MHxXR+asS569KlJ0MWldJ61wMr6Z1BaK9CM73ODrfeRH5OJ8YXkr+zSN/unX5ZNe8+tZl7qvxmGSeft9kdBrZ4OKPy8f1Mfk69x/4qbdcERxyIMXH3WMdr3nTaZ8W0fYNVC9/fRI2DRAxW449pdM+s8imWKz9WKXr/+ZT7OyqL8o+Xpry4354sScd93dLaNmVIb5WcuWphGxyMb6IylqZelnrnShrso9b5ilr5RGVtWGirDlbyum8un0OFGVNv3/bWtaGi7JWKuJVOu1zqChrwz1lrZTOq+MaTmVmuGB2ZW2Yp6xVeNIN87RjwW+op00rEu1IkE+lyCfwbdU/P9/tfzj7wTFGkv0u3yqyL0u0fYEto/RjbKJN4zY3OK4r76OoTXDrqqlNcGMLAYOrz+/QcXrGIhkD7NfdsVY+n/pjoq1jrRFwJspJsaceZVE5cdtzYm2MUYyBpcXa179M+r/Y0wb8lb35abbsnRuzZW+eMf8OWgjsjSpepcXaj7EFxy4UvkinfW4SbanPh4XUbg3xcKj7EO1WNP5pvXdWIvwRrCv1tMdlEZSNIK+h5OPgJ/5N5Od+pWSj66vwtdBwfRsT/bEKUYZcPqWUt+vPpMV0604FHTct1nGcIJ2Wn5ratu8I2v47+auYjuf6Pz2S+4zw7DOMlvk4lXSieNmdz+EUa9x2Plb5X9jXMxbNuEtarH0fOZP+d/kFfax7aTygXN+OPuzb9Fj7fn55tD7oxeXDlWl5joK8R0ZUpkeIMu3y4TLrlj+gMciRnnJWSfFYjlsFccJXV6MYx+ZylRZrX67Yj53tw3VoZBf1KeCU9wL+yjcZtL3ib+bDacoXgO8qRZ2sFIxBnXyW6uTwiOwoE3aUCb9w3nG9vBNt8Xux9nkFzJ8Sc6F6vq3jDfI+pLOjkOqj2+cbGiP/Itp5Yr3ZhuD3TvLv352/1oPs5nu4abGO984dM7c/uRHFvyFkK9uSS/52+/xIfdJgVbaI285uvm/r9vlF9GezPfXdpef+bDbFGjk2ye1hPKbbJvF1Qpzydvn1oOUssiGaOlnXYXwwHus4fhb8qRDnc5jnfP7Zh5zW+tfdS3freQ5jpVj3/xl3AxtHeNraSlEulqY0PJekSuwXnEM3llUlzmGtOmPrOawTdcblz/c83T4r0vnpGYvifmRdr2hYW+NlPTGN8HC67aslOYMyu0ZyOSh7o0Q/Idi+mWe7+4l/EzzuV0flt1GfN3Fum8S5dflw3qMjiuNNdNw0yqeJ/O2WN53W5pfR5DTn50aqMw1pHffj5VEiTQZtb/BwZypzN4qY0SjsDcrM2lS+XPkJbIpgTkVv5mb/8D1ft53HC1y90O6z1JMtlaIO8rMcPM5f54n5DRGdvzpx/upE2eG5GTxfw8XwelpXJNoLtjseod3BcV3fpYH86NbxvI5Pab6j7A/GiCGory8m1w2muu36Z0vE2s+VKyI/uOPxfNOo+o/5Iu7Iscl02md3qoc3T+voh+9jbb4rFOt60nEylRkKRRl0//N9cTmHl+dA/BBrW+fS/EjrnE9+onWDRNrgx/fJ3fYXiT+qufQFgt/9H/Fc+j5h59LzvVG+/vI98zU0Ip919gzaUE+MKojYnu4+g+azkec9l0ZkY5jx9QxKx/ezoroHUNoNG8vIRpfOzT/rQdtdHY7H2s/ViMd0x3D52jRO+fM4aoW63/p4x3CdLXxvwO0zlq5rYrH28zRcfea50u76doSHIx7TrdcjRLsuOaK5/m31oZxnPUL0Z3ie9RThwyqPD33zWqqojLhlfsYgLdZ+Xkqc9uNypN937u+dj+xsqSEfuH1mievj2ghsivI6oY6Yijycbvte1G/am65/3TUFP+tzpGe7+3UVy2rp3EbQ10+c20Zxbl0+nDdfxyrl3e46MS0pl08j+dstH0HXx03kNOfnBqpX7vqD9+PlapEmg7bXe7gzlbkbRD+lQdgblJl9qXwdSdfHUcyfZm72D8/vdtt5XFNeb430xOX6iGJSgyi3deL8pdM+J4qY1BCBTdGwtp4brg+jPJxu+2lUZs6gmOPiF88RvNyz3f26ikkRjx8lzu0YcW59Y1djI4pJY0RMcvmMIX+75csoJo311J/RFJNc3eb9eLlGpMmg7U0e7kxl7tEiJo0W9gZl5mwqX5dTTIpqrLrJ4586T8zm+9jfi/2D8u3qB49b1Efkx87GPnlMrFG0scE6N+bA70tx4xX5tM6NV+TSebmZzoXrs2iPWfJcN3ftVEQ+duu437Nefety0Gd1/d8XkvvFk/a6a9x4TPe6y13fu/6yy5+vqXPUy0DrNcMgEb+cLTkUQ9w+94lrBn4menjyLz976q63B3k4NJ/j5zzSKV9+lmtgRDE4W8TggYKZ72E/RjFp95Y22wbr1+8+3X3XApe1ggjiTUScvfg8x2Id6w4/78fz23MiYEyjfN2xB4uy2B178yKt/3/P3ojO27bBcSN4Z02f4N0yS5BfBwn/8vhadidxPiuiOD9QxHmXP483R/Bejw7jzXGyhecI6Y8tt7YxpaKNkWPd6bTP+6KNKfW0MTxPw92r4ufC3DI/H6L/vF9r/3+o8KvLu4zOdZngjceiGsdtfZdKOfk7Hut6HFe7PeT5fmwLj+O6fb4S84fc+lzqq1WKdQvz/CG+3+fS8P0+Nw7Kc4qqRdqgvMh7/vGkL2tE/BjliR/61wp9vGMYzhbfGMYfkY9h9FlgYxgjPJx/bk/24YKyvlhyOSiz7lqJ68LKnu3uJ/5N8LhfagyjbXmllja/8HiE83N3xjBqRZqFcQxjCSpfK9P1QhTvFWFu9g/PmXHbc+icNYr2r8bTr9Afm26NSaNFuW0U5y+d9lk76T8Xk0ZHYFNU4/DBMbg+1Hk43fb1qcxsSDHHxa9aKl99Pdvdr6uYNJrO7biIYtJ4cW7HpXXMe0JEMWm8iEkun/Hkb7fch2LSBE/9GUcxydVt3o+X60WaDNo+1sOdqcw9TsSkccLeoMxsQuWrL8WkKOb3MTf7p9ETs0s88UZ7XHEM2VIp6mBgS67oKwT1ypXX3IWgTfHNrQ3W5Ys2l98ZzvfVXL+1isoDj2MVROR3Hsdy1+oF5GO3jp9F+aOudZnn2fE1ML9X8nmRPvjjzpebJynn9PHcJ997gbVj0iARk+Q7c3mcdgjV0a9aOvrh51ib73LFuojGZf72O6bzBRfPf/wl1rbOpfmV1jmf/EbrBlKZdOuyxPGCH8+hddufJ59ENQ+wSPjE/T+UylQE8+n6aMynK6Y6WOqxuywin5UKn8kxF55PVxSxPRpz/ngef3lENpZ1w8ZystGl4zmowyKysbwbNg4jG+W7UKN6pnapWPv3Q/2Vjfz8sUvnxvR70HYXZ+Kx9u9fiMfUbO8bHJLfdxWP+edF6o+t9fXOTezqHbCz6VotFms/N9HFnApqH+TcROaIx3RjD9sS93BEM++p1Yc1wofyvZHptM984cMajw+ryIdurLHGwxGP6bU7acKWOPkw2nentvqwXvhQztXg5woPET6s9/iQ3xvrrvnqqZ65ZfnMdp2oi/Weuqg/ltDgHTfxjSe4fY6JfNykYYGNm+R7ON32E6nPfDKNi7jrJH4m/yLPdvcT/yZ43C81btK2fGEn4ybOz90ZN2kQaRbGcZPTqHxdRNfMETxL3GHcpEHEOB43qaRzNkbE5TpP26Y/dtEak8aJcjtGnL902ucqEZPGRWBTVOM0wTG4PjR6ON3266nM3Egxx8WvBipfD3i2u19XMWkcnduJEcWkSeLcTkzrmPfkiGLSJBGTXD6TyN9u+X6KSZM99WcixSRXt3k/Xm4SaTJo+wQPd6Yy90QRkyYKe4MycwuVrwcoJkXxrD1zs3/GeGJ2NZ2z8SImjfHEJP243hqTJopyO16cv3Ta5wkRkyZGYFNUbVhwDK4Poz2cbvuzVGaep5gj750G29/zbHe/rmLSRDq3zRHFpCni3Dandcx7j4hi0hQRk1w+U8jfbvldikl7eOpPM8UkV7d5P14eK9Jk0PbJHu5MZe5mEZOahb1BmXmJytd7FJMi6C/3Zm72z3hPzK6ldT+L/YPy7eoHj6NH1d+cJPw4SdTXDFrHfWI33p1L69z4+SBa58bPs2mdGz8fSOfqKzo/7toqynemuXGyfPK7W8fXZxvUtS4H19buOv255H7xWPt3vMX17E2MsbnxZndd7/LnMV79+bStYxt5IqY5WwZTXHH7/CLGNvhbZyOSf3memhv/zfNwaM/lzyN7CwQDz4XWjsu5Ii7LedjptM8i01v/BuXtnOlttg3Rr/OJezX8TIuzkX+ZtMxlrSiCGBQRZy8+z7FYx7rD38DhufwRzE9v925Dd2w5V7879hZEWv//nr0Rnbftg+PmRVDu3Vx++T56yRXE2txO4vygiOJ8jojz8l42P3OkmHe7Z47csZ0t/L4t/ffttLYxZaKNke/U5O/erZWMi66NKfO0Mfx+TnffvczDEY/plas0YUucfMjvBh0WkQ/lN3Hk/HyeI7+h8OFwjw/LyIfynZ48r57f5xXB+0/avWPUHdvlzfceKwRvPNb+/eB6NvXu8G6ZOOVfSf6oiqhPwe98Zluq6Fy7fXrRueZnCLi/O0qsi+r9Immx9u/HzKT/+Z6XG6sZRetGifK2NKXh73K5a6qhtM6NOfPzPPXieEEZcmNy9VRmgsVGEZcbPHF5TET1eqyo184Wvgfl9onTuY5mrLlvr2hYW6/LxhFTtYfTbc+mfnJOcpnHqLl+DPNsdz/xb4LH/SK+x+MdC/TdX5oUUQyZSMdNo3wmkr/dcvn0Nr/wOIHz8wSqV26cg/fj5SaRhscVxnu4M5W5J4j4M0HYG5SZwVS+htF1WFRj2OM9/uH5yG47v3NznGgT3f7cXxsfUUyaIMrtOHH+0mmfUSImTYjApmhYW88N14fRHk63vYHKTBPFHBe/eAy7xbPd/bqKSRHf40mc22Zxbn33l6ZEFJOaRUxy+TSTv93yNIpJUzz1ZzLFJFe3eT9eHiPSZND2SR7uTGXuySImTRb2BmVmLJWvFopJUd1PnuTxzzhPzM6iczZRxKRxnpikH9dbY9JkUW4nivOXTvvMFTFpcgQ2RdWGBcfg+jDWw+m2z6cysx/FHBe/xlD5Otaz3f26ikkR3+NJnNup4tz67i9NiygmTRUxyeUzlfztlo+hmDTNU3/2oJjk6jbvx8vjRZoM2j7Fw52pzL2HiEl7CHuDMnMgla9jKSZFdT95isc/Ez0xu9wTb7TvIfF9x1GiDvLzT87OoF658pq/ELQpvrkj/IwW389119f83K67vuZ7mO76mt8tz/cxFsS7udxYLb+by63jd3PF6lqX+Vkgvl/F76p6NrmO2zp37e+e5XLHyCF/+N5VNSCiOCXfGTVA5M3vjLqC6u2LMzr6YXHy3SCxjp9Hy1RmGCTKrPufx3NzBBc/t9WT1rk0S9A655MlaZ27plqK1v35zg1a5+61ZNA6d89gGVpXKGwJfvw8ltvuyhS/nyczpuvPOW3ZJo7t/ufn6Ev08+72vcUSqjMu3Z7JbfwN1mjfK9TqsxJRBt3/Qz3x0PkzKnuWEvb8lR99NvJ7XBamd+izPZr3+rlt4rwW1mfg2MaF9Rk4tnFhfQaObayIyMbh3bCxIlp7EuVc3gfj+13a7CO6wc7vo5XfY+5B210bGI+1v18Wj6nZvl1wSPntAN+zffrP1/XuHxxSPl/nbPE9X/epuC/Lz7S59pDfG7aAnq/rnRbr+Hyd5Ijm+bpWH3bn+bpvhA/rPT7s6vk65ojH9PpEacKWOPkw2u8AtvpQfgdQvveEv8X3s/Bhk8eH9eRD+f5+5oircbTOkWnqxIeNlPeYiHwo78XK5w14PK7HjPY+HOvxYRP5UL5XhTniahy9tk0TtsTJh2Mo7/ER+VDeO5Lzo/ne0ZLChxM8PhxLPpTPyDFHXI2jV780YUucfBjtPcxWH8qxbnkPk8e6VxA+nOzxId+/lc/09KDlIvJlGuXn2tXJnnZVf0y4r3dM2NmyB/nA7bMG+aAnrde0KaLx78T41jRiyvFwuu3rJjkT755PLgd9NzeWx+/M7+XZ7n7i3wSP+02lcztdnzdxbmeIc+vy4bxnprXZqpR3b847LSmXzwzyt1veZkabX2aS05yfp1O9aknruB8vN4s0GbS9xcOdqcw9nWzJpP9nUpnZkMqXKz9RjWEzN/uHx9jddn62b5qIy25/7qe2RBSTpotyO02cv3Tap7+ISdMjsCka1tZzw/VhiofTbd+FysxuFHNc/Gqm8lXo2e5+XcWk6XRuZ0UUk2aLczsrrWPee0YUk2aLmOTymU3+dstDKCbt6ak/sygmubrN+/HyHiJNBm2f6eHOVOaeJWLSLGFvUGYGUPkqpJg0NQKbmJv9M80Ts2vpnM0QMWmaJybpx/XWmDRLlNsZ4vyl0z7DREyaFYFNUbVhwTG4Pkz1cLrtI6nMVFPMcfGLnx2d6Nnufl3FpFl0budEFJPminM7J61j3ntFFJPmipjk8plL/nbLEygm7eWpP3MoJrm6zfvxcotIk0Hb9/RwZypzzxExaY6wNygztVS+JlJMiqC/3Ju52T8zPDG7gc7ZbBGTZnhikn5cb41Jc0S5nS3OXzrt0yJi0pwIbIqqDQuOwfVhuofTbZ9NZWYOxRx5DRBsP9Sz3f26iklz6NzOiygm7S3O7by0jnnvE1FM2lvEJJfP3uRvt3wIxaR9PPVnHsUkV7d5P16eKdJk0Pa9PNyZytzzREyaJ+wNysw8Kl+HUkyKoL/cm7nZP7M9MXs0nbO5IibN9sQk/bjeGpPmiXI7V5y/dNrnWBGT5kVgU1RtWHAMrg+zPJxu+0lUZk6hmCOvAYLtF3u2u19XMWkendv5EcWkfcW5nZ/WMe/9IopJ+4qY5PLZl/ztli+imLSfp/7Mp5jk6jbvx8t7ijQZtH0fD3emMvd8EZPmC3uDMnM6la+LKSZF0F/uzdzsn7memD2OztneIibN9cQk/bjeGpPmi3K7tzh/6bTP1SImzY/ApqjasOAYXB/meDjd9huozNxEMUdeAwTbH/Rsd7+uYtJ8Orf7RxSTDhDndv+0jnkfGFFMOkDEJJfPAeRvt/wAxaQDPfVnf4pJrm7zfry8l0iTQdv383BnKnPvL2LS/sLeoMzcSuXrQYpJEfSXezM3+2dvT8zmee6LizY7KN+ufiweaVxq36a5Y+8r6msGreM+sZsTy++FcvNz+b1Qbn7uAFrn5ufyN03d/Fz+foabn1tA69z8XP6Wx4t0biP4fnDi3PK3Kdxcpxw6Z24d35f7vKZ1uQfxP5PcLx6LbP51Yl6A/G7zAHFu+Hsgb4n7yjx3uzz5l7+pKb9hzBxRfrd5oGDoGWv/TialfBP1IkfEVfn+Fr5/+xHFmWEz22zTf8dK13PBB3jOh2Leibng/I0c55+YsMf9OA64dDwXXL4bht/Hk6nss2wR57I98cut47ngUdizlLDnr/zos5HngudEZOOgbtiY47FHey64s4fzyouIPbcb7Hl0fnI9Ng6OyMa8btjIbW2ex8b8iGwc3A0bue33fWe8ICIb87thY0G09vTi5w05r8KI2Id0g72Qzs8QYWMP2i77OBF8szwxF1y+S9PlH+2zRa3z9uQ3y+V3ufib5ask+wS+b5a79pDfpeme9yn1cMRjuu0i2xKP+b8vVh6RD4cJHzpbysmHbp91hA+HeXzI74TyfdO8XN+HfdJiHd9pViQ4onlupNWHI4QPnS38PXW3z8bChyM8PhxGPvR9/ymC98L1TRO2xMmH/DzMyIh8KL895WzxfXtqa+HDKo8PR5AP5fMpvBwc19X1gZ68+lJe/ExNZkw3BhS3mZY4drGwM8q8h4q8hy7AvMtE3mULMO9hIu9hCzDvCpF3xQLMu1LkXbkA864SeVctwLxHibxHLcC8G0TeDQsw787GKjqLh67NGUTpOA67eOre7xz8W039QI7nIymPUZ48cmh7jS+PtLY8akUe8l2XwR/37NcSIk015VNP+bg+Snasbd2f34MTsZ/n+8ST+/f6Z7/E+XH5LSoYGtI62lRONsmxLv6OrpZ9wTF4vMldV7i8lqJ1A4jjWRp3deMlTyf3i8ciGzNJjLvmir5EtihL/I74GtGX4DEHN+7K78uQ35Pm93zwWGye/rnoJRmcLXlULgeL8u97j4qzk985XhBR2c6n46bFOn4rgL/5Nz55LoLy0zyzzb/Zon8W5T0GLuvZHt85G7isN3vGm7Xt4rFKV48GUB18Wtic+F4U1UE3VvlUcr94rP0YdVzP3sS4wECK1XHKP9tzDjNjutcSsv4P7KL+79lF/XfXEgOprg8S9Z854jHdusO2xD0c0YxrtvowX/gwt4t6u6/wYb7HhxwvXbzK93DE1ThaxwXyO/FhtN9baPVhofChs2UI+dDtc6jwYaHHh/nkQxdHCz0ccTWO1nGBwk58yN8wKY7IhyXCh3J8ka/fjxU+LPH4kN937sY3Sjwc8Zhun6SkEx/yOGlpRD6U34OQY5vcDz5V+LDM40N+P7wboyzzcMTVOFqfES/rxIfRvvOn1Yfd+R7EucKHwz0+7Op7EMyh3X8cTva6PPgeY4VnO/cvR1C7zn6poGNU0jEKhJ+CH19LFontwZ8qkYc73kjaR15vym82BD6M4JsLiblm7rpz0eSxXT5DyT55rSq/wRD8qevkOOW0T704jjuu7x0naTHd/gdf76ZRPnz97Pa5gfrut1Lf3fX7fPMitPvIA6mMyf4mz3/g7+PdugCun7PILtf/5uvnp4TNgV1He66fn0zuF0/am6UfZxN9Jtl39813yFWvW32838dztuRSmXP7PCDiLN+LLxF+5ndd5nk44jHdupPXSVvF1w35EfmwQPhQ9rc5Lj8hfFjg8WEe+VB+K437ojz+MUS/LvWSDC4PHkMs9Gzn7zwUiXjqjldI+7g+mRtDcXxFFEscq+8+t3YcLhFxeKjIm/vAr1IcfsszhsJxOGsBxGEZOzqLw28tgDjMYygulnIcflLYHNg12xOHn0juF4+1H/OJ69mbuO7K6iQOD4g0Dvu/U5rVRRz+tIs47L5/lrWQxOGsBRKH+3Y7Dn/TRRweIfzqi8PMEY/p9gcKOvEhj98URuTDIuFDOe7B1xA/Cx8WeXzI7dYQEdd5TIDbsuKI2jJmyBExPfiV0PbBYju3A64tc8fj8Ywy9fPSeg1USjEyk3xZRvaVC/vke4SDP8NEWyvn7XBby/OIKiJqa4eLtlZ+B5Gv85ec1eaDZZPLnd2viOq+QJanreXnPAaK9pdtjbIPwG2tay+zqK19Qtgc2FXjuV/xeHK/eKz9XPB4TDfGZYu2NssTBxbUNU92F23tGslz52trhwuf/n+3tdkLpK3t/jXP+sKHBR4f/t1rHq7jC+Kax53PiL8f3ovbExfjB4v2MvhTLGK873qqRMT4AtGWcZzitqs0ohg/VMT4UpF3Ou3Ti2J8P4rxvnGtQQsglsq4xNdTHEv7UYyParyN2x4Xp7Mpxj8ubA7syq5p86Ebzx1KaSrEumjmPifn4JH9mfR/OdVzN/ZcQesqRD3gMfwhtK5U7Bf8+D6Q2/5Y8v+gDhWLdfFYVM859N6W66uLm8Ui1vF93hwRN/ne6ihRp/nbLfkUI/JFXYvHonqGqD4xTC3nAuSL9pDnAhQSXzTtfX19NKyt9ZHnN1R6ON32Uopp5cnloO65c87f+230bHc/8W+Cx/24zY/gOchE+zRQnFtffyMrojZkoGhDskR/gJ+VbZjV5heOmSNF3Ob5JVlp/jQFIk1GzN9XzYooZnb2DCfH+AoqX43UDkXxDB5zs3/4ObZBok/C37QpoLYnx9P25EXkxxzhR9lPz6B1/NygfCaDnwMr99it3eaz3a6NyiMfunU5VB5yqluX+bvzgynNSLEummd1Wv0+Uvh9pKd9rxZxkPsqgzz9AL7HNFzsF/z4e0Fu+6PJ/4M2sVSsi8eiavN7bdfdb4lF/fxjVM9wBsfg/ons1/AznlfH2hjzIyp3BaLcyTjVHXuvMWbvtcbsvc6Yvdcbs/eGhcDeqOJrWqzjNVWp8AVfU53RxTWV8yE/U1siOPiaip+tjeb6pfWaMUfwufx5vNLtc764popgzve20bC2H3sJmKo9nG77JdTnvcxzzcRzxm4NeU3F874jeK9N4pqqVpxblw/n7eaepcV062wtHTeN8qklf7vlW+iaqo6c5vzM70py1ya8Hy8XiDQZtD3Lw52pzD1AxKoBwt6gzFxJ5etWuqaKaizBd83J11RuO39rVo6T8zt2uG+fG5EfO7s2zSUb3Tq+znJ99ZG0zvXpKzx2Rzm+664BcsmHbh2P765H11Ty+onHUdnvwyPye2fjqMOpDnY1jsrXVC4NX1OViv2Cn28c9ZHk/zyO6tbFY5G1+XW+Nr+rcdQXIxxHXRja/Df+RW1+ZRdt/rsUk9//i3HUb1Ntfgdfd7fN/6aTNn/kv7TN/4jK17cLUZtf+C9q8ys8bf7wBdzmuzaK23y3jtv8mGcctYLSyLHMwP7KiPze2ThqJdXBrsZRSz19A27zCsR+wS/fUz4fTv4ftIl5Yl08Ftm9kP58v8D9xL+J/NyPY0oE98N6R8SZGEflWJUjYiTPP7g41sYY1XtXs0S5k/MwumPv8GjbVnV7L43ZsrfcmH8vj9myt8SYf6+M2bK3cCHwb1TtVxrlIedMuvz4HTPbzm79u2wXPuQ5k7mCowct83MKEfWxE4esF3yyj83vVdqJ+HrSek2borqeCI7RQEzVHk63PZ7kTHzrM7kc9GXcOedx6hLPdvcT/yZ43K+eym6TPm/imnW0OLcuH857TFqbrUp59+a805Jy+Ywmf7vl4tltfhlDTnN+bqI6456v5v14OUukyaDtjR7uTGXuJhGrmoS9ifmdVL5c+Qlsqo2o3Dd6/MPX9G47Xw9WiDgXlG9XP/jaKapr/wbhxwZRXzNoXS2tc9dCPE7trpkqPXZrX7Oy3e4aq4586NY1UHl4NfmCx/+Fa9bhYr/g55v781Dy/6BNLBHr4rHIxkv6dPc96zyPMooxp4g4270nLxbrOFbNc+sujLUx5kRU7nJFuZPv5OuOvdwn/f+yN6rymRbreJ+hRPiC7zPsKfqkPh/yu4oKBEcPWpZzJyLocydCpexzy+sP7nPPF33SCK5B6iJiTbQXPIZf7eF02w+kPsPB1Od055z7pCd5trtfV7GMr6ci6Nv34nbdndv6tI55L+h39fB1gVs+kfqk3H9yfq6nOuPad96Pl3NFGu5z+d5RlKnMXS9iVb2wNygzh1H5Oon6pFGMwzI3+4ffIeq2F9C6ChHngvLt6gf3jaKa118r/Fgr6msGreNnD/5unzSq54zZbteH4n69W1dL5eEuT5/0r+ajL6x9Up474dLw3Ak5xyL48fvo3PYHk/8HbWK5WBdP+qAkoja/WMTNctF2p9M+14k2n+eyn5/8y8/vufLJz6m65eGizS9Q5+v+M3a3ijY/PwKbomFtrY95njafOd32uygm30NteomnzX/as939xL8JHvfjub4R9JUTbX62OLcun3xP7NNu87NFmy/fecdzVZ6iNj/L0+bnUJ3JTeu4Hy+XeNo033t1omqrOnt2ip9Bu5/K19PU5kfxDAtzs3/4+Xa3vZTWDRZxjr8n53s3e6ayH/OEH/NEfeXv1PGcj67mS1Z67NZu89lu10YVkA/dujwqDxNTbf6fP7f9geT/3Oa7dfFYZPWlT3fjOI95FEdwTiLiTIxDFXjiAtclt/3cWBtjVPW9UJS7QlHfu2Nv1gKIT39lb1TlMy3W8X0y5cIX/D6Zn0Sf1OdDX5/U7deDlmWfVH/ctbf3Gykuf997EdxLq6N7L0Jrn3RBvBeh2sP557PKSc6gvVg8uRzEKnfOuU+6ime7+3UVy7h/tKDn83LeC8N83pXdy9Bjf/0Mj+vHdjaft1Ck4XGWbA93pjL335nPuySVL1d+ornG6zjHVMZOnhfr65O6/XmeI/eNFob3Ivje8fBXfdIF8V4E14fi9yK4dfxehCJPn5TfhSTfj7Qw90n5XUguDb8LabjYL/j57o3en/yf34vg1sVjkfUB+3B/Qz63y+9Zdvv0oTYxFmvfBpyV/Ot7breQ2vxC0TeIx6KKB63vQhos+ORzRfye0R1Emz84ApuijH2+cSjmdNt3pZgcpza92NPmF3m2u5/4N8Hjfhw3oxqHGiTOrS9m83iRUt69OW/X5rt8BpG//3wHD7X52Z423zcOxfvxcrFIw21axO+f6rKt4mc2sqh8FVGbH9X4a67HP3z95rbzc7vyffI8DsVtT1TvauhsHIrbd9/YVJGnzR/iafPzI2rz2W7XRuWTD906Hoe6eGTrcmdtfqXH71G9C6lS+N33jK6vH1DpafMr/kGbf1/yf27z3bp4bOFp8yd00eafkfxruc2f+i9q80d20ebPpJg8+y/a/INTbX4HX3e3zT/of6zNn0vl6+BUm+/14z9t8ys9bX7FAm7zXRvFbb5bx23+/GSbH8R/V+bvTe4XT9o7ktoDJXsT35Dh7+TFKf+RkfYvWr/dIb+ZWC3OE39L4QzRtvL9qtOSf6s9fZDhHo54TLessi1xD0eQd2lEPpTfP5VzzPnbTxcIH5Z4fMjvZJHzbJgjHtPtZ5V04kP+dmdU35CR93Jkv4zv5VwhfFjg8SHPKZZzefheDn83ht/jUkTMg/XjVN/gGDzPv9DTL4jgGxDtvmXhji3nsveg5TyyIbBJ/9serX1gnlMej/m/4c3vc9bJu/38oEWTx3a28Hui3T63i/53BO/t7xW0Ue8nj8W23UX9lOoIymRwyFF0HvYmO6rJF26f56kPdV9y+d8wTj7E0wcbRSwL0/V/Bq2r9vTB8j19MF+/QrsPxna7fhQ/U+bWVVL5HvsX4y4jF6Df/+k7qMOMu/AzaW67q3/8HJpbF49Fdp+vb3fvmed52ktFe3pHxJmY/5PraYf5XmauiB/RzK/o+pqLbfy79pYbs7dgIbA3qvqUFus4n6dE+ILn83wr+rg+H/r6uL4+HF8vcB8uM6bbh5PzrF3+PN7k9vm5k36Upk3RsLb/fi7fu2ROt/0P6iOlzWld5nEcHsdczrPd/bqKvTx3ZkHPV/LN20mL6dbZ7sxXWnZOm1/+6TuH80SahfH9g+lz2pZd+YloPLvD+wdl7ORnDHhe/VAR54Ly7eoH9+UGReTHgcKPA0V95XlIPGbd1b3LCo/dUX6j2/X5BpEP3Tr+Rre7RuRxzHuS+8VjkY1jJsaP/n/GMft0exxzo2Q98Y1jnpL8+781jtmn2+OYWwkflnh82NU4Jl/PlFP98X2Tj8cdFetYn+AYfL/Q5cvPMkTwve52453u2M4O3/ujC8gG7p/q2dTxPnQ81vF+D7crim18wh+5FMPYFp4X7vbZmcoeXytoj8F9kDwW27YbtbERjMEl4qgcg3N2+Mbgyqj9z0oup8bgFq4xuGJP/2FBj8HdE2tv81K0jsfg6v7Hx+B8c59c/eO5T25dPBbZmFef7r6HfrCn3VK0p3dEnIkxOL7edcz8TcU8ET8iGqfpzW2PO7b7n238u/aWLAT2RlU+0ygPOTdvMLVVbp9m0Wf0+ZDn5smxwh60LOfm6V/vtvaJ5PytPE+/xO0zQ/RLohhni/La3vcdLeZ02+dQn2MvGrMaLNrpYPvhnu3u11Usi/g7uYk+p3zPl+8bvTz2pJR3u7GdtKRcPgPI3275MBrTqiWnOT9nUZ1xYwG8Hy8PFmn4nUEDPdyZytydvUu5lsrMPlS+Dqf+dlTfkhno8Q/fn3Dbfd8m5vcTuPrBfaOo3v/X2Tc1uppz2Z0xLXecKL+p4fpQOeRDt47nPez2F9c1/4vz8e9O/s99UrcuHotsPn7iufTuzMe/WLT5fE/5pORfy/PxrxJt/r91Pv71FJNvpDbdNx//Ac929xP/JnjcLzUfv235fmrz/xfm499C5esBavNT8/Hb/PhvmI9/d6y9zUvROp6PP8QzH/+u5H7xWOo+VvB7tYv7WCck/6buY3V9H+vdLu5jnSD86ruPxX0Wvl9VrF+X+jAD21BM+Rbon8+ETwvF+ezq/UiFZAP3ifRsau2n8Ts747GO3znka0bFtrzdHHp3v8r3rVW3z1eijxjB+00S96s+TB6Lbfv2/+F+lbPDd7+q59w2235I3a+KhOWf3q8q9fQTFvT9KtfW8/0qt47vV237P36/itsrt93VvyAmF4t18VjqflWvf/gLjvFvvV9VvhDYuyDvVxULX3C7vUGyrerqfpXvG/C++1XyG/ALw/2qzYnv33y/ahvqc/ROLnd2vyru2e5+XcWy1P2qtuXd5rb5he89/VvvV21L5cuVn9T9qvZ+/Dfcr3J9KL5f5dbxWKa75uKxqzuT+8VjqbGr4Fcu2lYeLzou+Tc1dtX12FW18GGJx4epsavU2JX0R3fGriaIPmJUY1cfJY/Ftk2mtnRBjV05O3xjV/tROz81uZwau0qNXcWE3a6t57Ert47HrrZKjV39+XPbXf3jsSu3Lh5LjV31+oe/4Bipsavo7F1Yxq7O/JePXV3wPzJ2dSn1OS7/i7Gr21JjVx18zXmnxf567OrW/7Gxq6uofN2WGrvy+vHfMHbl+lA8duXW8djV5H/Rdc1ffe+kQuwX/Hzf4Lsj+X/QJpaLdfGkDyL47m5irnV3vrv7kmjzee7tMcm/C893dzuOg2TGuv7u7puizY9i/nc0rK31cbCnzWdOt/09iskfUJvu++7ud57t7if+TfC4Hz/TH0GsT7T5OeLcunw4b54TrZR3uznHrs0fJGI2f1PuW2rzB3na/FyqM66t4v14ucTTDgwS7Vw0/dVW7lwRM+U7uIIy8zGVr++ozY/qu7t5Hv/wM/Fue6mnzefv7g72tD1Rfdeys+s8nlctv8PWne+dRPXdXbbbtVH83V23bjCVh9VCjEP929v825P/c5vv1sVjkdWX/v9L393N8cQFrktu+8GxNsao+vidfceWbfy79h5izN5DjdnL98gs2JtvzN7BxuzNM2Zv7kJgb1TtV1qsY7/f911ut0+/vVr/LtuFD33XrG6/HrQsr1mjeKdscMiBgk8+z8jvf92Z+HrSek2bomFt/75PvmZlTrd99yRn4j1kyeXOvss91LPd/cS/CR73i3jMNHHNWifOrW+8tj6tzValvHtz3mlJuXzqyN9uuWSvNr/Uk9Ocn2upzrixbd6PlwtFmgzaPsDDnanMXStiVa2wNygzg6h8ufIT1XU0c7N/eLzXbfdds/J3uV394GunqJ6z7my8P5tslPddunPNGsG3Tjq8U9hdY2WTD926LCoPr1W2Lgfx352LA5P7xWPtY21cz97t2M9ujuUAT4zQL5d9vWNq8nxy2zqmi7Z1OeHTpWMd72swh+Z8L86D73X6GCaJ9jM3ojLIvnHlKJfK4IHCh4l7Z0Wty0E5cHXngOR+8aS9I/TLYOJbApWiDLr8R9C5G64fZxJ5DxNlUM7NTad9ZokyOIz8vFbyL4/tuPGXYR6OeEw3XrIt8Zh/jnFZRD4sFT50tpSRD90++wgflnp8OIx8WC7aJuaI63H0SRO2xMmHZZR3SUQ+lPfGnC2+e2MHCx8We3zI7yGS7/pgDu1YyO9NcnlUkH1Fnu3uHAd/+F1J7Bce4xxCx5Bj68GfAnEMd8whxJ9H+8d1+BP1MJ+Omxbr+A4Tvgd4PPUDT0ku8/gvj12MiKit4LmeMu7yfQGe63kK9VkrI7KLx85dO1RJbdgBwubArhF5rcvBea9Krt8/uV9c2BuP6caOkaINqxJ+W5DPqsj5rvysyvkidvD9gkzh06AsjvC0IwvqWRXJEeRdHpEPy4QPh4vYlE77XC58WObxIT+rMszTjpRHFH+5zS0X9Tn4lXq2D6OYNVTEzjJP+1scUewsEbHT5TPU02bcSLHzNoqdrt5xv39BxChZ33mMlGPUbRQ7R0ZkVxXZ5eLfSIqd+wubE+MQWa3LwXl3Y2P7JfeLx6J9zq9KxE55T5Tbv8yYbr2vEPW+StSZdNrnQVHvuV+zjvAp37Ot8HDEY7p1p0LETskR5D0sIh+WCx/K6x6ONU8KH5Z7fMjPacg4zBzasZNj/TBRn4NfmWf7cIpZpSJ2lnvifklEsXOoiJ0lIm5zX/llip1vUOyU335bUDFK1neeZ8Qx6g2KnVUR2VVNdrn4V0Wxcz9hc+J9jzu3Lgfn3Y1Z75vcLy7szYxF0+90dW+U8Bu/C/VDUfe4/Vop+XcU1T1fHI7A7704D743U+WJm9r1plLUmxGCOZ32+YLqzbdUb5zPsqP1U4fyKc81z93m8vkt1ZvqiOwaRXa5sl9N9WZfYXNg12n9WpeDelOTXD8/uV9c2BvXszcx7j1K9DlqhN849mWq5d067l3ZSZ31lbnfRZ3l9mgF4VPu/1Z6OOKxaOqOO/aCeT9DX+81r+xr8TXvYvPa+3C4x4c8bruArnn7pMU6XvOOEhzRXPP27fY17zLCh2UeH/7da964Gkfr2GlZJz7kPuPQiHwo33HhbPFds64ifFji8WEZ+VCOATNHXI2j9dmMkk58yPd6iyLyoXwHv3yPB7+Dfx3hw0KPD33fki70cMTVOHr1S4t1fDfHKMERzRzvVh/KZ0+cLb5x542FD/M9PiwkH7px83wPh3Y/kN/XXyD6N8FvsGc79w35mV/2C88l53eDDBN+Cn58P1e+XyX4M0jk4Y7Hz2lki33ksxaBD6P6vjXPLcikfHjcrkHY5+zNon0aOznOENqnSRzHHbeROMfQ/vGYCmei/zGajptG+TTR+XP77DCvjWXX5HJQtl2/j+c7LIg+suxv8vOi3Ed2tvak9dp21ZBd82PtbViK1tWQXVO2bl0Oznttcv0+yf3iwt64nr2JvnsNlbk45T+KzqH+9XZrnJXX2zUiRvH1dp6Is3y9vZzw6V9db8djunVnpGirJEc0Y659vWOu8r4jj7mWCB9WeHzI96sW0Jhrn7RYxzHXGsERzZhr326PuY4QPiz3+PDvjrnG1Tha++7lnfiQ58yURuTDocKHcq4Jj5nWCR8O9fiQ53bL6wDmiKtxtPbdh3biQ989u0xlHxYJH8q5Jum0zzjhwyKPD4eSD7t6n19cjaO1717UiQ95zsyQiHxYIHxYJPpZ3NfdQ/iwwONDfm5QXgcwh3bfna81hoj+TfDL92zn8dfB1K6zX/j6hL/xNVz4Kfhx375MbA/+5Ig83PH4/YSyfy+/3x7Nsw+tfXd+f0Um5cP3jQYI+5y9/K2vhk6OU0j7NIrjuOM2ECf3seMxFc5E/6OJjptG+TTS+XP77E9990Oo7+76fVlk74LoI8v+Js9F5z7yIdR3r4nIrlqya59YexuWonW1ZNc+G7cuB+fdPYOxd3K/uLA3HtNt72upzMUp/xo6h9XqdashUbeqRJytFTEqnfY5XsRZHoNYRviU7wFVeTjiMd26UyXaKsnBc14ylX04QvhQ3m9Ip31OFz4c4fEhz5fwzfuOar7eiE58yPdNhkfkQznnXN5v4HGp84UPh3l8OIJ82NWcc+32nq81RgmG4Mf3EUaK7cGfMtH+uONFO27f2s6WivbR+Y3nUZQI+3xz4Yoiah+LRftYJPoBPB/8Gmofb6T20cVWfu5tQbRDMqbzM2bcDt1I7WNtRHbVkV2ujaul9nFvYXNg12Nrty4H5909t5c09c/2sTaiuFQn2sd64Tfu42Sq5d0/USeqRVyqE/0cnptxj4hL3M9fWviUx1mrPRzxmG7dqRaxXXJEc2+/v/fevhzT43v7jwgfVnp8yN8N6OrevnZs5/a8RjBEc1+/V7v+hYvLjrmC4uFwEZcrPf2G8oji8jARl8u7aLufp7j8CsVlV6f5OmtBxD8ZSzLIBo5/r1BcrovILn5m28XWOorL84TNgV3LJ29OUtLWX1zRMPfroXzsPultx+rba7ttt23avk9T776963r12aG+f79e2/ar365/7/69+/Xv19inf9++Tf237b/9DvU7bN9rh97b9m3qPbrfDn1HJw92wOK6lT0q5r6KzAcaYd5WkfkgI8z9FJkPNsK8nSLzIUaYt1dkPtQIc39F5sOMMO+gyHy4EeYdFZmPMMK8kyLzkUaYd1ZkPsoI8y6KzEcbYd5VkfkYI8y7KTIfa4Q5rsh8nBHm3RWZjzfCPECR+QQjzFmKzCcaYR6oyHySEeZsReaTjTAPUmQ+xQhzjiLzqUaYcxWZTzPCnKfIfLoR5sGKzGcYYc5XZD7TCHOBIvNZRpiHKDKfbYS5UJH5HCPMRYrM5xphLlZkPs8Ic4ki8/lGmIcqMl9ghLlUkflCI8xliswXGWEuV2S+2AjzMEXmS4wwD1dkvtQIc4Ui82VGmEcoMl9uhLlSkfkKI8wjFZmvNMJcpch8lRHmakXmq40wj1JkvsYIc40i87VGmGsVma8zwlynyHy9EeZ6ReYbjDA3KDLfaIS5UZH5JiPMTYrMNxthHq3IfIsR5jGKzLcaYR6ryHybEeZxisy3G2Eer8h8hxHmCYrMdxphnqjIfJcR5kmKzHcbYZ6syHyPEeZmReZ7jTBPUWS+zwjzHorM9xthnqrI/IAR5mmKzA8aYW5RZH7ICPN0ReaHjTDPUGR+xAjzTEXmR40wz1JkfswI82xF5seNMO+pyPyEEeY5isxPGmGeq8j8lBHmvRSZnzbCPE+R+RkjzHsrMj9rhHkfRebnjDDPV2R+3gjzvorMLxhh3k+R+UUjzPsrMr9khPkAReaXjTAfqMj8ihHmgxSZXzXCfLAi82tGmA9RZH7dCPOhisxvGGE+TJH5TSPMhysyv2WE+QhF5reNMB+pyPyOEeajFJnfNcJ8tCLze0aYj1Fkft8I87GKzB8YYT5OkflDI8zHKzJ/ZIT5BEXmj40wn6jI/IkR5pMUmT81wnyyIvNnRphPUWT+3AjzqYrM/zHCfJoi8xdGmE9XZP7SCPMZisxfGWE+U5H5ayPMZykyf2OE+WxF5m+NMJ+jyPydEeZzFZn/a4T5PEXm740wn6/I/IMR5gsUmX80wnyhIvNPRpgvUmT+2QjzxYrMvxhhvkSR+VcjzJcqMv9mhPkyRebfjTBfrsj8hxHmKxSZg6/aWmC+UpE5zQjzVYrMPYwwX63IvIgR5msUmdONMF+ryLyoEebrFJkXM8J8vSLz4kaYb1Bk7mmE+UZF5iWMMN+kyLykEeabFZmXMsJ8iyLz0kaYb1VkzjDCfJsi8zJGmG9XZF7WCPMdiszLGWG+U5F5eSPMdykyr2CE+W5F5hWNMN+jyLySEeZ7FZlXNsJ8nyLzKkaY71dkXtUI8wOKzKsZYX5QkXl1I8wPKTKvYYT5YUXmNY0wP6LIvJYR5kcVmdc2wvyYIvM6RpgfV2Re1wjzE4rMmUaYn1RkXs8I81OKzOsbYX5akXkDI8zPKDJvaIT5WUXmjYwwP6fIvLER5ucVmTcxwvyCIvOmRphfVGTezAjzS4rMmxthflmReQsjzK8oMm9phPlVReatjDC/psi8tRHm1xWZtzHC/IYicy8jzG8qMvc2wvyWInMfI8xvKzL3NcL8jiLztkaY31Vk7meE+T1F5u2MML+vyLy9EeYPFJn7G2H+UJF5ByPMHyky72iE+WNF5p2MMH+iyLyzEeZPFZl3McL8mSLzrkaYP1dk3s0I838UmeNGmL9QZN7dCPOXiswDjDB/pcicZYT5a0XmgUaYv1FkzjbC/K0i8yAjzN8pMucYYf6vInOuEebvFZnzjDD/oMg82Ajzj4rM+UaYf1JkLjDC/LMi8xAjzL8oMhcaYf5VkbnICPNviszFRph/V2QuMcL8hyLzUCPMsUX1mEuNMKcpMpcZYe6hyFxuhHkRReZhRpjTFZmHG2FeVJG5wgjzYorMI4wwL67IXGmEuaci80gjzEsoMlcZYV5SkbnaCPNSisyjjDAvrchcY4Q5Q5G51gjzMorMdUaYl1VkrjfCvJwic4MR5uUVmRuNMK+gyNxkhHlFRebRRphXUmQeY4R5ZUXmsUaYV1FkHmeEeVVF5vFGmFdTZJ5ghHl1ReaJRpjXUGSeZIR5TUXmyUaY11JkbjbCvLYi8xQjzOsoMu9hhHldReapRpgzFZmnGWFeT5G5xQjz+orM040wb6DIPMMI84aKzDONMG+kyDzLCPPGisyzjTBvosi8pxHmTRWZ5xhh3kyRea4R5s0VmfcywryFIvM8I8xbKjLvbYR5K0XmfYwwb63IPN8I8zaKzPsaYe6lyLyfEebeisz7G2Huo8h8gBHmvorMBxph3laR+SAjzP0UmQ82wrydIvMhRpi3V2Q+1Ahzf0Xmw4ww76DIfLgR5h0VmY8wwryTIvORRph3VmQ+ygjzLorMRxth3lWR+RgjzLspMh9rhDmuyHycEebdFZmPN8I8QJH5BCPMWYrMJxphHqjIfJIR5mxF5pONMA9SZD7FCHOOIvOpRphzFZlPM8Kcp8h8uhHmwYrMZxhhzldkPtMIc4Ei81lGmIcoMp9thLlQkfkcI8xFisznGmEuVmQ+zwhziSLz+UaYhyoyX2CEuVSR+UIjzGWKzBcZYS5XZL7YCPMwReZLjDAPV2S+1AhzhSLzZUaYRygyX26EuVKR+QojzCMVma80wlylyHyVEeZqRearjTCPUmS+xghzjSLztUaYaxWZrzPCXKfIfL0R5npF5huMMDcoMt9ohLlRkfkmI8xNisw3G2Eerch8ixHmMYrMtxphHqvIfJsR5nGKzLcbYR6vyHyHEeYJisx3GmGeqMh8lxHmSYrMdxthnqzIfI8R5mZF5nuNME9RZL7PCPMeisz3G2Geqsj8gBHmaYrMDxphblFkfsgI83RF5oeNMM9QZH7ECPNMReZHjTDPUmR+zAjzbEXmx40w76nI/IQR5jmKzE8aYZ6ryPyUEea9FJmfNsI8T5H5GSPMeysyP2uEeR9F5ueMMM9XZH7eCPO+iswvGGHeT5H5RSPM+ysyv2SE+QBF5peNMB+oyPyKEeaDFJlfNcJ8sCLza0aYD1Fkft0I86GKzG8YYT5MkflNI8yHKzK/ZYT5CEXmt40wH6nI/I4R5qMUmd81wny0IvN7RpiPUWR+3wjzsYrMHxhhPk6R+UMjzMcrMn9khPkEReaPjTCfqMj8iRHmkxSZPzXCfLIi82dGmE9RZP7cCPOpisz/McJ8miLzF0aYT1dk/tII8xmKzF8ZYT5TkflrI8xnKTJ/Y4T5bEXmb40wn6PI/J0R5nMVmf9rhPk8RebvjTCfr8j8gxHmCxSZfzTCfKEi809GmC9SZP7ZCPPFisy/GGG+RJH5VyPMlyoy/2aE+TJF5t+NMF+uyPyHEeYrFJljS9hgvlKROc0I81WKzD2MMF+tyLyIEeZrFJnTjTBfq8i8qBHm6xSZFzPCfL0i8+JGmG9QZO5phPlGReYljDDfpMi8pBHmmxWZlzLCfIsi89JGmG9VZM4wwnybIvMyRphvV2Re1gjzHYrMyxlhvlOReXkjzHcpMq9ghPluReYVjTDfo8i8khHmexWZVzbCfJ8i8ypGmO9XZF7VCPMDisyrGWF+UJF5dSPMDykyr2GE+WFF5jWNMD+iyLyWEeZHFZnXNsL8mCLzOkaYH1dkXtcI8xOKzJlGmJ9UZF7PCPNTiszrG2F+WpF5AyPMzygyb2iE+VlF5o2MMD+nyLyxEebnFZk3McL8giLzpkaYX1Rk3swI80uKzJsbYX5ZkXkLI8yvKDJvaYT5VUXmrYwwv6bIvLUR5tcVmbcxwvyGInMvI8xvKjL3NsL8liJzHyPMbysy9zXC/I4i87ZGmN9VZO5nhPk9RebtjDC/r8i8vRHmDxSZ+xth/lCReQcjzB8pMu9ohPljReadjDB/osi8sxHmTxWZdzHC/Jki865GmD9XZN7NCPN/FJnjRpi/UGTe3Qjzl4rMA4wwf6XInGWE+WtF5oFGmL9RZM42wvytIvMgI8zfKTLnGGH+ryJzrhHm7xWZ84ww/6DIPNgI84+KzPlGmH9SZC4wwvyzIvMQI8y/KDIXGmH+VZG5yAjzb4rMxUaYf1dkLjHC/Ici81AjzLHF9JhLjTCnKTKXGWHuochcboR5EUXmYUaY0xWZhxthXlSRucII82KKzCOMMC+uyFxphLmnIvNII8xLKDJXGWFeUpG52gjzUorMo4wwL63IXGOEOUORudYI8zKKzHVGmJdVZK43wrycInODEeblFZkbjTCvoMjcZIR5RUXm0UaYV1JkHmOEeWVF5rFGmFdRZB5nhHlVRebxRphXU2SeYIR5dUXmiUaY11BknmSEeU1F5slGmNdSZG42wry2IvMUI8zrKDLvYYR5XUXmqUaYMxWZpxlhXk+RucUI8/qKzNONMG+gyDzDCPOGiswzjTBvpMg8ywjzxorMs40wb6LIvKcR5k0VmecYYd5MkXmuEebNFZn3MsK8hSLzPCPMWyoy722EeStF5n2MMG+tyDzfCPM2isz7GmHupci8nxHm3orM+xth7qPIfIAR5r6KzAcaYd5WkfkgI8z9FJkPNsK8nSLzIUaYt1dkPtQIc39F5sOMMO+gyHy4EeYdFZmPMMK8kyLzkUaYd1ZkPsoI8y6KzEcbYd5VkfkYI8y7KTIfa4Q5rsh8nBHm3RWZjzfCPECR+QQjzFmKzCcaYR6oyHySEeZsReaTjTAPUmQ+xQhzjiLzqUaYcxWZTzPCnKfIfLoR5sGKzGcYYc5XZD7TCHOBIvNZRpiHKDKfbYS5UJH5HCPMRYrM5xphLlZkPs8Ic4ki8/lGmIcqMl9ghLlUkflCI8xliswXGWEuV2S+2AjzMEXmS4wwD1dkvtQIc4Ui82VGmEcoMl9uhLlSkfkKI8wjFZmvNMJcpch8lRHmakXmq40wj1JkvsYIc40i87VGmGsVma8zwlynyHy9EeZ6ReYbjDA3KDLfaIS5UZH5JiPMTYrMNxthHq3IfIsR5jGKzLcaYR6ryHybEeZxisy3G2Eer8h8hxHmCYrMdxphnqjIfJcR5kmKzHcbYZ6syHyPEeZmReZ7jTBPUWS+zwjzHorM9xthnqrI/IAR5mmKzA8aYW5RZH7ICPN0ReaHjTDPUGR+xAjzTEXmR40wz1JkfswI82xF5seNMO+pyPyEEeY5isxPGmGeq8j8lBHmvRSZnzbCPE+R+RkjzHsrMj9rhHkfRebnjDDPV2R+3gjzvorMLxhh3k+R+UUjzPsrMr9khPkAReaXjTAfqMj8ihHmgxSZXzXCfLAi82tGmA9RZH7dCPOhisxvGGE+TJH5TSPMhysyv2WE+QhF5reNMB+pyPyOEeajFJnfNcJ8tCLze0aYj1Fkft8I87GKzB8YYT5OkflDI8zHKzJ/ZIT5BEXmj40wn6jI/IkR5pMUmT81wnyyIvNnRphPUWT+3AjzqYrM/zHCfJoi8xdGmE9XZP7SCPMZisxfGWE+U5H5ayPMZykyf2OE+WxF5m+NMJ+jyPydEeZzFZn/a4T5PEXm740wn6/I/IMR5gsUmX80wnyhIvNPRpgvUmT+2QjzxYrMvxhhvkSR+VcjzJcqMv9mhPkyRebfjTBfrsj8hxHmKxSZY0vaYL5SkTnNCPNVisw9jDBfrci8iBHmaxSZ040wX6vIvKgR5usUmRczwny9IvPiRphvUGTuaYT5RkXmJYww36TIvKQR5psVmZcywnyLIvPSRphvVWTOMMJ8myLzMkaYb1dkXtYI8x2KzMsZYb5TkXl5I8x3KTKvYIT5bkXmFY0w36PIvJIR5nsVmVc2wnyfIvMqRpjvV2Re1QjzA4rMqxlhflCReXUjzA8pMq9hhPlhReY1jTA/osi8lhHmRxWZ1zbC/Jgi8zpGmB9XZF7XCPMTisyZRpifVGRezwjzU4rM6xthflqReQMjzM8oMm9ohPlZReaNjDA/p8i8sRHm5xWZNzHC/IIi86ZGmF9UZN7MCPNLisybG2F+WZF5CyPMrygyb2mE+VVF5q2MML+myLy1EebXFZm3McL8hiJzLyPMbyoy9zbC/JYicx8jzG8rMvc1wvyOIvO2RpjfVWTuZ4T5PUXm7Ywwv6/IvL0R5g8UmfsbYf5QkXkHI8wfKTLvaIT5Y0XmnYwwf6LIvLMR5k8VmXcxwvyZIvOuRpg/V2TezQjzfxSZ40aYv1Bk3t0I85eKzAOMMH+lyJxlhPlrReaBRpi/UWTONsL8rSLzICPM3yky5xhh/q8ic64R5u8VmfOMMP+gyDzYCPOPisz5Rph/UmQuMML8syLzECPMvygyFxph/lWRucgI82+KzMVGmH9XZC4xwvyHIvNQI8yxxfWYS40wpykylxlh7qHIXG6EeRFF5mFGmNMVmYcbYV5UkbnCCPNiiswjjDAvrshcaYS5pyLzSCPMSygyVxlhXlKRudoI81KKzKOMMC+tyFxjhDlDkbnWCPMyisx1RpiXVWSuN8K8nCJzgxHm5RWZG40wr6DI3GSEeUVF5tFGmFdSZB5jhHllReaxRphXUWQeZ4R5VUXm8UaYV1NknmCEeXVF5olGmNdQZJ5khHlNRebJRpjXUmRuNsK8tiLzFCPM6ygy72GEeV1F5qlGmDMVmacZYV5PkbnFCPP6iszTjTBvoMg8wwjzhorMM40wb6TIPMsI88aKzLONMG+iyLynEeZNFZnnGGHeTJF5rhHmzRWZ9zLCvIUi8zwjzFsqMu9thHkrReZ9jDBvrcg83wjzNorM+xph7qXIvJ8R5t6KzPsbYe6jyHyAEea+iswHGmHeVpH5ICPM/RSZDzbCvJ0i8yFGmLdXZD7UCHN/RebDjDDvoMh8uBHmHRWZjzDCvJMi85FGmHdWZD7KCPMuisxHG2HeVZH5GCPMuykyH2uEOa7IfJwR5t0VmY83wjxAkfkEI8xZiswnGmEeqMh8khHmbEXmk40wD1JkPsUIc44i86lGmHMVmU8zwpynyHy6EebBisxnGGHOV2Q+0whzgSLzWUaYhygyn22EuVCR+RwjzEWKzOcaYS5WZD7PCHOJIvP5RpiHKjJfYIS5VJH5QiPMZYrMFxlhLldkvtgI8zBF5kuMMA9XZL7UCHOFIvNlRphHKDJfboS5UpH5CiPMIxWZrzTCXKXIfJUR5mpF5quNMI9SZL7GCHONIvO1RphrFZmvM8Jcp8h8vRHmekXmG4wwNygy32iEuVGR+SYjzE2KzDcbYR6tyHyLEeYxisy3GmEeq8h8mxHmcYrMtxthHq/IfIcR5gmKzHcaYZ6oyHyXEeZJisx3G2GerMh8jxHmZkXme40wT1Fkvs8I8x6KzPcbYZ6qyPyAEeZpiswPGmFuUWR+yAjzdEXmh40wz1BkfsQI80xF5keNMM9SZH7MCPNsRebHjTDvqcj8hBHmOYrMTxphnqvI/JQR5r0UmZ82wjxPkfkZI8x7KzI/a4R5H0Xm54wwz1dkft4I876KzC8YYd5PkflFI8z7KzK/pMichmMskjxWn/Q2/rSkD4JtwepFocUgYMR6QktAMCO2FLQ0lAEtAy0LLQctD60ArQitBK0MrQKtCq0GrQ6tAa0JrQWtDa0DrQtlQutB60MbQBtCG0EbQ5tAm0KbQZtDW0BbQltBW0PbBD6Begc8ga+hbaF+0HbQ9lB/aAdoR2gnaGdoF2hXaLfkOd8dGgBlQQOhbGgQlAPlQnnQYCgfKoCGQIVQEVQMlUBDoVKoDCqHhkHDoQpoBFQJjYSqoGpoFFQD1UJ1UD3UADVCTdBoaAw0FhoHjYcmQBOhSdBkqBmaAu0BTYWmQS3QdGgGNBOaBc2G9oTmQHOhvaB50N7QPtB8aF9oP2h/6ADoQOgg6GDoEOhQ6DDocOgI6EjoKOho6BjoWOg46HjoBOhE6CToZOgU6FToNOh06AzoTOgs6GzoHOhc6DzofOgC6ELoIuhi6BLoUugy6HLoCuhK6Croauga6FroOuh66AboRugm6GboFuhW6DbodugO6E7oLuhu6B7oXug+6H7oAehB6CHoYegR6FHoMehx6AnoSegp6GnoGehZ6DnoeegF6EXoJehl6BXoVeg16HXoDehN6C3obegd6F3oPeh96APoQ+gj6GPoE+hT6DPoc+g/0BfQl9BX0NfQN9C30HfQf6HvoR+gH6GfoJ+hX6Bfod+g36E/oKDyp0E9oEWgdGhRaDFocagntAS0JLQUtDSUAS0DLQstBy0PrQCtCK0ErQytAq0KrQatDq0BrQmtBa0NrQOtC2VC60HrQxtAG0IbQRtDm0CbQptBm0NbQFtCW0FbQ9tAQVDrDfWB+kLbQv2g7aDtof7QDtCO0E7QztAu0K7QblAc2h0aAGVBA6FsaBCUA+VCedBgKB8qgIZAhVARVAyVQEOhUqgMKoeGQcOhCmgEVAmNhKqgamgUVAPVQnVQPdQANUJN0GhoDDQWGgeNhyZAE6FJ0GSoGZoC7QFNhaZBLdB0aAY0E5oFzYb2hOZAc6G9oHnQ3tA+0HxoX2g/aH/oAOhA6CDoYOgQ6FDoMOhw6AjoSOgo6GjoGOhY6DjoeOgE6EToJOhk6BToVOg06HToDOhM6CzobOgc6FzoPOh86ALoQugi6GLoEuhS6DLocugK6EroKuhq6BroWug66HroBuhG6CboZugW6FboNuh26A7oTugu6G7oHuhe6D7ofugB6EHoIehh6BHoUegx6HHoCehJ6CnoaegZ6FnoOeh56AXoRegl6GXoFehV6DXodegN6E3oLeht6B3oXeg96H3oA+hD6CPoY+gT6FPoM+hz6D/QF9CX0FfQ19A30LfQd9B/oe+hH6AfoZ+gn6FfoF+h36DfoT+goOFPg3pAi0Dp0KLQYtDiUE9oCWhJaCloaSgDWgZaFloOWh5aAVoRWglaGVoFWhVaDVodWgNaE1oLWhtaB1oXyoTWg9aHNoA2hDaCNoY2gTaFNoM2h7aAtoS2graGtoF6Qb2hPlBfaFuoH7QdtD3UH9oB2hHaCdoZ2gXaFdoNikO7QwOgLGgglA0NgnKgXCgPGgzlQwXQEKgQKoKKoRJoKFQKlUHl0DBoOFQBjYAqoZFQFVQNjYJqoFqoDqqHGqBGqAkaDY2BxkLjoPHQBGgiNAmaDDVDU6A9oKnQNKgFmg7NgGZCs6DZ0J7QHGgutBc0D9ob2geaD+0L7QftDx0AHQgdBB0MHQIdCh0GHQ4dAR0JHQUdDR0DHQsdBx0PnQCdCJ0EnQydAp0KnQadDp0BnQmdBZ0NnQOdC50HnQ9dAF0IXQRdDF0CXQpdBl0OXQFdCV0FXQ1dA10LXQddD90A3QjdBN0M3QLdCt0G3Q7dAd0J3QXdDd0D3QvdB90PPQA9CD0EPQw9Aj0KPQY9Dj0BPQk9BT0NPQM9Cz0HPQ+9AL0IvQS9DL0CvQq9Br0OvQG9Cb0FvQ29A70LvQe9D30AfQh9BH0MfQJ9Cn0GfQ79B/oC+hL6Cvoa+gb6FvoO+i/0PfQD9CP0E/Qz9Av0K/Qb9Dv0BxR0+tOgHtAiUDq0KLQYtDjUE1oCWhJaCloayoCWgZaFloOWh1aAVoRWglaGVoFWhVaDVofWgNaE1oLWhtaB1oUyofWg9aENoA2hjaCNoU2gTaHNoM2hLaAtoa2graFtoF5Qb6gP1BfaFuoHbQdtD/WHdoB2hHaCdoZ2gXaFdoPi0O7QACgLGghlQ4OgHCgXyoMGQ/lQATQEKoSKoGKoBBoKlUJlUDk0DBoOVUAjoEpoJFQFVUOjoBqoFqqD6qEGqBFqgkZDY6Cx0DhoPDQBmghNgiZDzdAUaA9oKjQNaoGmQzOgmdAsaDa0JzQHmgvtBc2D9ob2geZD+0L7QftDB0AHQgdBB0OHQIdCh0GHQ0dAR0JHQUdDx0DHQsdBx0MnQCdCJ0EnQ6dAp0KnQadDZ0BnQmdBZ0PnQOdC50HnQxdAF0IXQRdDl0CXQpdBl0NXQFdCV0FXQ9dA10LXQddDN0A3QjdBN0O3QLdCt0G3Q3dAd0J3QXdD90D3QvdB90MPQA9CD0EPQ49Aj0KPQY9DT0BPQk9BT0PPQM9Cz0HPQy9AL0IvQS9Dr0CvQq9Br0NvQG9Cb0FvQ+9A70LvQe9DH0AfQh9BH0OfQJ9Cn0GfQ/+BvoC+hL6Cvoa+gb6FvoP+C30P/QD9CP0E/Qz9Av0K/Qb9Dv0BBRf8aVAPaBEoHVoUWgxaHOoJLQEtCS0FLQ1lQMtAy0LLQctDK0ArQitBK0OrQKtCq0GrQ2tAa0JrQWtD60DrQpnQetD60AbQhtBG0MbQJtCm0GbQ5tAW0JbQVtDW0DZQL6g3jWUEdTD4HYDBiwOhg6CDoUOgQ6HDoMOhI6AjoaOgo6FjoGOh46DjoROgE6GToJOhU6BTodOg06EzoDOhs6CzoXOgc6HzoPOhC6ALoYugi6FLoEuhy6DLoSugK6GroKuha6Broeug66EboBuhm6CboVugW6HboNuhO6A7obugu6F7oHuh+6D7oQegB6GHoIehR6BHocegx6EnoCehp6CnoWegZ6HnoOehF6AXoZegl6FXoFeh16DXoTegN6G3oLehd6B3ofeg96EPoA+hj6CPoU+gT6HPoM+h/0BfQF9CX0FfQ99A30LfQf+Fvod+gH6EfoJ+hn6BfoV+g36H/oCCQao0qAe0CJQOLQotBi0O9YSWgJaEloKWhjKgZaBloeWg5aEVoBWhlaCVoVWgVaHVoNWhNaA1obWgtaF1oHWhTGg9aH1oA2hDaCNoY2gTaFNoM2hzaAtoS2graGtoG6gX1BvqA/WFtoX6QdtB20P9oR2gHaGdoJ2hXaBdod2gOLQ7NADKggZC2dAgKAfKhfKgwVA+VAANgQqhIqgYKoGGQqVQGVQODYOGQxXQCKgSGglVQdXQKKgGqoXqoHqoAWqEmqDR0BhoLDQOGg9NgCZCk6DJUDM0BdoDmgpNg1qg6dAMaCY0C5oN7QnNgeZCe0HzoL2hfaD50L7QftD+0AHQgdBB0MHQIdCh0GHQ4dAR0JHQUdDR0DHQsdBx0PHQCdCJ0EnQydAp0KnQadDp0BnQmdBZ0NnQOdC50HnQ+dAF0IXQRdDF0CXQpdBl0OXQFdCV0FXQ1dA10LXQddD10A3QjdBN0M3QLdCt0G3Q7dAd0J3QXdDd0D3QvdB90P3QA9CD0EPQw9Aj0KPQY9Dj0BPQk9BT0NPQM9Cz0HPQ89AL0IvQS9DL0CvQq9Br0OvQG9Cb0FvQ29A70LvQe9D70AfQh9BH0MfQJ9Cn0GfQ59B/oC+gL6GvoK+hb6Bvoe+g/0LfQz9AP0I/QT9Dv0C/Qr9Bv0N/QMEAdRrUA1oESocWhRaDFod6QktAS0JLQUtDGdAy0LLQctDy0ArQitBK0MrQKtCq0GrQ6tAa0JrQWtDa0DrQulAmtB60PrQBtCG0EbQxtAm0KbQZtDm0BbQltBW0NbQN1AvqDfWB+kLbQv2g7aDtof7QDtCO0E7QztAu0K7QblAc2h0aAGVBA6FsaBCUA+VCedBgKB8qgIZAhVARVAyVQEOhUqgMKoeGQcOhCmgEVAmNhKqgamgUVAPVQnVQPdQANUJN0GhoDDQWGgeNhyZAE6FJ0GSoGZoC7QFNhaZBLdB0aAY0E5oFzYb2hOZAc6G9oHnQ3tA+0HxoX2g/aH/oAOhA6CDoYOgQ6FDoMOhw6AjoSOgo6GjoGOhY6DjoeOgE6EToJOhk6BToVOg06HToDOhM6CzobOgc6FzoPOh86ALoQugi6GLoEuhS6DLocugK6EroKuhq6BroWug66HroBuhG6CboZugW6FboNuh26A7oTugu6G7oHuhe6D7ofugB6EHoIehh6BHoUegx6HHoCehJ6CnoaegZ6FnoOeh56AXoRegl6GXoFehV6DXodegN6E3oLeht6B3oXeg96H3oA+hD6CPoY+gT6FPoM+hz6D/QF9CX0FfQ19A30LfQd9B/oe+hH6AfoZ+gn6FfoF+h36DfoT+g4OZUGtQDWgRKhxaFFoMWh3pCS0BLQktBS0MZ0DLQstBy0PLQCtCK0ErQytAq0KrQatDq0BrQmtBa0NrQOtC6UCa0HrQ+tAG0IbQRtDG0CbQptBm0ObQFtCW0FbQ1tA3UC+oN9YH6QttC/aDtoO2h/tAO0I7QTtDO0C7QrtBuwf1BaHdoAJQFDYSyoUFQDpQL5UGDoXyoABoCFUJFUDFUAg2FSqEyqBwaBg2HKqARUCU0EqqCqqFRUA1UC9VB9VAD1Ag1QaOhMdBYaBw0HpoATYQmQZOhZmgKFHwfPvheevD98OB72sH3pYPvLQffHw6+xxt8nzb4Xmvw/dLge57B9y2D7z0G3z8MvgcYfB8v+F5c8P204Htiwfe1gu9NBd9fCr5HFHyfJ/heTfD9luB7JsH3PYLvXQTffwi+hxB8HyB4X37w/vjgferB+8WD920H758O3sccvJ84eF9v8P7a4H2uwftNg/d9Bu+/DN4HGbwfMXhfYPD+vOB9csH71YL3jQXv3wreRxW8nyl4X1Hw/p7gfTbB+12C950E7/8I3ocRvB8ieF9C8P6A4Hn64Pny4Hnr4Pnj4Hnc4PnU4HnN4PnF4Hm+4Pm24Hmv4Pmn4Hmg4PmY4HmR4PmJ4HmCYH59MN88mH8dzEcO5ucG81WD+ZvBfMZgfl8w3y2Y/xXMhwrmBwXzZYL5I8F8imB+QXC/Pbj/HNyPSd4q+vM3oaj17zbJ/7OaJ7dMrWtoyWxsmjKxefakpsktmQ11kyc3t2TWN2XWZU6ZXj9xXEPm6OmTG1rGNU/mQzUnD7WuPFRdY+PUpmnT6Dh7Nk1t5qQtyaTrJf8flDx85rRxYybXtUyf2tRF4pnJxJu05TutZer0hpbmqZynsHwaH2LP5CHi7hCtqZpmNTVMb0lgTx03ow5LLnXmzHEtYzNbxv552AlNUyc3TcxsGDe1Yfq4Fj72vOSx10r+P2B2S1NDc2NT5ti6aWO7wLoxmW5A8v/iqU0zxjVPn+aymjR9WitX0rSZY5smZ46bDKPGTRNWzWiaOk2crOeTR189+f/uU6fWzUbyxqZZmc3TWzKbR2fWN0+f3NjOTa+HSfR+mESfh0n0TZhEyxaHSLRVmET5YRKNC5PooDCJPqsMkShnZOtfV+ebZrU0TW6sGT21eVJNXeIAnSadEz7pueGT3p5MukLy/ynTUQk73fuekSF88nNVaOvWrg6ddPfwSUdWd8cntdUhfHJ2MtG05P8NdRMbpk9E2GpMhqqa1lBVM27ylOkt02oSsbGxuWlaZhAdJ9W1NIxFoGueMa6xyxR1LYmY3NI8JTAjWERGEzOntdQ1TGBzLkias3ny/0nTxtRMg7uapv4ZVqc1TRydObp5KshakFHdxMSh2kFdljzKzm1Qybwy6YCCItgJaxtE48jHvTJ53KyOx52GRq1uTNOfTao4eNOsKU0NgVO7OvxNycP3psMnLUKhoRapadKUltkJHzQ2TWwaEzQyHXxwa/Jg+d3xwZ9m0i5dZ3NHMpthei75ixzvSeY41OWITkjQF5JHSZSXtuycNd3MbUhN69+tk/9PbppZ09A8adK4lqAHNu3PUtl2SgDfgha+w5HGJI+0FR1p8vSJE8eNHodeQDcOND95oHjy/8LmNihHOX1KY4AztWmP6U3TYGYdOmo4TvNM+LurYz+ZPPb2fDr/PMrEpsljWjpU/6A2/3kyW3dp181IHnKj5P8c/xLxqKmxZkZTQ+chas26f3iA1ev/4QFO+qcHmNfwDw8wpvEfHmDXpqQvkv//rcZhYDLRmsn/E6WhpTmzbtq0pqktNZPqZtXUj2upmTZuzyZOVhgmr7JweVWFyas+XF7jw+Q1JVxeZ44OkdfFYRJdm0zkLoPqWlqCGJSwsbGx9XqqGRcqoxE92rVWYTK7J2RmD4bJ7OmQmb0QJrO3Qmb2fpjMvgiZ2bdhMvstZGY9xoTIbMkx4TJbJkxmq4ZJlBnSwo3CZLZ1yMz6hsls55CZ7R4ms8EhMysKk1lFyMyqw2Q2OmRmE8JkNi1kZjPDZLZPmESHhLTwyDCZnRQys9PDZHZByMwuDZPZdSEzuzlMZveEzOzBMJk9FTKz58Nk9nrIzN4Ok9knYRJ9E9LCH8Jklnj8KURmi44NkdkyITNbMUxma4XMbL0wmW0eMrNtwmTWP2Rmu4TJLDtkZonn6WJtN44o3bTp9a2DFZ2XrmTiFZP/53Vt45HjQ4Cd/E8MzJwQIsfhYRLtHybR0Imdsk2aPrFl3JSJsztnG55M3N0zPnJiCEvrwiQ6MpnobxaPY8LkcVKYRDeHdN0d3QO6O4xtD4ZJtPKkEInWDpNoozCJssIkmhIm0awwiU5NJvp7t28uDZPFI2ESZU4OkWjTMIl6hUlUGCbRnDCJ9guT6IJkor93Vm8Ik8XzYRJt2Bwi0RZhEpWHSdQYJlH/qd3xdfbUEFlMSyYK1Q+YGSbHA/5JjoeEyfHGMIl+SCb6m43Sz2HyWDR52/nvnd8VpoXIYkyYRM1hEs0Mk+iEMInuDZPovTCJvuzWCfo9TBZrtYRINCtMon3CJDo4TKKjwyS6Mkyix8Mk+jlMojWnh0i0QZhE2yQT/b1Ct1uYLKrDJJoTJtEnYRJ9HSbRT2ESpc0IkWiJMImWD5No9TCJtg+TqDxMomlhEh0TJtFVYRK9GSbRyjNDJFo7TKKNwiTaKkyiPslE7q1kNEvJN6GNZ70kduBjFSePtUzy/3GTZ9RNHNeYnD/Ge5b97T1HhYGaHSbR/DCJDgmT6JgwiU4Jk+icMInuD5Po8TCJPgmT6OswiX4Kk2j1WSESrRcm0aAwiYaESXR6mETnhUn0QphEr4dJ1Hd2iEQ7hkk0O0yifcIkujZMolvCJPoxTKI/wiTqvWeIRP3DJBofJtEeYRKdHibR+WESXR4m0W3JRCGm2H8TJr+fwiTacE6IRFuGSbTTnNDumBwmv+lhEl0UJtGVYRK9EibRO2ESfRne8evPDZHfZmESlYVJVBUm0fi5od1xRpj8zg+T6MUwid4Ik2jbvUIk2ilMotFhEk1MJhqY/L84+fgiPzjS7hmFxHONrU9ijps8JjPxhKN47LLd8GgYo/YOk+igMInOC5PosjCJHgiT6IkwiT4Ik+i3MIkWnRciUUaYRCuHSbR2mEQbhUmUGyZRcZhEFWES1YZJNDZMoilhEh0XJtFpYRKdFybR3WESPfx3E8X+D1GVwU9gaxsA", "debug_symbols": "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nrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWsjxrWZ61LM9almct68PVuzxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXvWsj1r2Z61bM9a9oerd3vWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/Gs5XjWcjxrOZ61nA9X7/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezlsuzlsuzlsuzlsuzluvD1Xt51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ51nJ71nJ71nJ71nJ71nJ/uHpvz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1puz1oez1oez1oez1oez1qeD1fv41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL41nL61nL61nL61nL61nL++HqfT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reT1reTlr+b5Oq/f7Oq3e7+u0er+v0+r983XeJK3e7+u0er+v0+r9vk6r9/s6r96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnLN8mrN2ct3ySv3py1fJO8enPW8k3y6s1ZyzfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnLN8mrN2ct3ySv3py1fJO8enPW8k3y6s1ZyzfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnL9x1evTlr+b7DqzdnLX++w5vk1Zuzlu87vHpz1jI/nLV8k7x6c9byTfLqzVnLN8mrN2ct3ySv3py1fJO8enPW8v1zr96ctXz/3Ks3Zy3fP/fqzVnL98+9enPW8v1zrt7hWcvwrGV41jI8axkfrt7hWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ts5bpWcv0rGV61jI/XL3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qWZy3Ls5blWcvyrGV9uHqXZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrVsz1q2Zy3bs5btWcv+cPVuz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWs5nrUcz1qOZy3Hs5bz4eo9nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyedZyedZyedZyedZyfbh6L89aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9aLs9abs9abs9abs9abs9a7g9X7+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+1Zy+NZy+NZy+NZy+NZy/Ph6n08a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k8a3k9a3k9a3k9a3k9a3k/XL2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy2vZy0vZy3rw1nLN0mr95uk1ftN0ur9Jmn1fpO0er9JWr3fJK3eb5JW7zfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnLN8mrN2ct3ySv3py1fJO8enPW8k3y6s1ZyzfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnLN8mrN2ct3ySv3py1fJO8enPW8k3y6s1ZyzfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnLN8mrN2ct3ySv3py1fJO8enPW8k3y6s1ZyzfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnLN8mrN2ct3ySu3uFZy/CsZXjWMjxrGR+u3uFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLdOzlulZy/SsZXrWMj9cvdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWpZnLcuzluVZy/KsZX24epdnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metWzPWrZnLduzlu1Zy/5w9W7PWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9azmetRzPWo5nLcezlvPh6j2etRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nJ51nJ51nJ51nJ51nJ9uHovz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1puz1puz1puz1puz1ruD1fv7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL7VnL41nL41nL41nL41nL8+HqfTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreTxreT1reT1reT1reT1reT9cva9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLS9nLfvDWcs3Sav3m6TV+03S6v0mafV+k7R6v0lavd8krd5vklbvN8mrN2ct3ySv3py1fJO8enPW8k3y6s1ZyzfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnLN8mrN2ct3ySv3py1fJO8enPW8k3y6s1ZyzfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnLN8mrN2ct3ySv3py1fJO8enPW8k3y6s1ZyzfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnLN8mrN2ct3ySv3py1fJO8enPW8k3y6s1ZyzfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK7e4VnL8KxleNYyPGsZH67e4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmct07OW6VnL9KxletYyP1y907OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9almcty7OW5VnL8qxlfbh6l2cty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61bM9atmct27OW7VnL/nD1bs9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1rOZ61HM9ajmctx7OW8+HqPZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcnnWcnnWcnnWcnnWcn24ei/PWi7PWi7PWi7PWi7PWi7PWi7PWi7PWi7PWi7PWq6vW8sT8evTZ/qfTfqXn46bf/9w3Pr92X1/r19/9Pr9R68/f/T6+yev/zoh/dddH/L6/KcPx/pH6/OPXk/3/i/X073/y/V0c3J9fu84/2B90c35y/V2c/5qPdScX5PKm9TeJCi3vyZBDf01CfqL8K9J0N9uf02C/vj4+6SG/kz4NQkK/a9JXr3bq3d79W6v3u3Vu716t1fv9uo9Xr3Hq/d49R6v3uPVe7x6j1fv8eo9Xr3Hq/fy6r28ei+v3sur9/Lqvbx6L6/ey6v38uq9vHpvr97bq/f26r29em+v3tur9/bqvb16b6/e26v38ep9vHofr97Hq/fx6n28eh+v3ser9/Hqfbx6X6/e16v39ep9vXpfr97Xq/f16n29el+v3per9/5w9d4frt77w9V7f7h67w9X7/3h6r0/XL33h6v3/nD13h+v3uHVO7x6h1fv8OodXr0lTvlrkldvCT7+muTVWyKKf58kucNfk7x6S0Lw1ySv3unVW8KRvyZ59U6v3unVW8Kef58kCc5fk7x6e9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9Zye9byeNbyeNbyeNbyeNbyfLh6H89aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aHs9aXs9aXs9aXs9aXs9a3g9X7+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy+tZy8tZy/lw1vJN0ur9Jmn1fpO0er9JWr3fJK3eb5JW7zdJq/ebpNX7TfLqzVnLN8mrN2ct3ySv3py1fJO8enPW8k3y6s1ZyzfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnLN8mrN2ct3ySv3py1fJO8enPW8k3y6s1ZyzfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnLN8mrN2ct3ySv3py1fJO8enPW8k3y6s1ZyzfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnLN8mrN2ct3ySv3py1fJO8enPW8k3y6s1ZyzfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3iat3eNYyPGsZnrUMz1rGh6t3eNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL9KxletYyPWuZnrXMD1fv9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW5VnL8qxledayPGtZH67e5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almct27OW7VnL9qxle9ayP1y927OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9ajmctx7OW41nL8azlfLh6j2ctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61XJ61XJ61XJ61XJ61XB+u3suzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzlsuzltuzltuzltuzltuzlvvD1Xt71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71nJ71vJ41vJ41vJ41vJ41vJ8uHofz1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1oez1pez1pez1pez1pez1reD1fv61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nL61nLy1nL9eGs5Zuk1ftN0ur9Jmn1fpO0er9JWr3fJK3eb5JW7zdJq/eb5NWbs5Zvkldvzlq+SV69OWv5Jnn15qzlm+TVm7OWb5JXb85avklevTlr+SZ59eas5Zvk1Zuzlm+SV2/OWr5JXr05a/kmefXmrOWb5NWbs5Zvkldvzlq+SV69OWv5Jnn15qzlm+TVm7OWb5JXb85avklevTlr+SZ59eas5Zvk1Zuzlm+SV2/OWr5JXr05a/kmefXmrOWb5NWbs5Zvkldvzlq+SV69OWv5Jnn15qzlm+TVm7OWb5JXb85avklevTlr+SZ59eas5Zvk1Zuzlm+SV2/OWr5JXr05a/kmefXmrOWb5NWbs5Zvkldvzlq+SV69OWv5Jnn15qzlm+TVm7OWb5JXb85avklevTlr+SZ59eas5Zvk1Zuzlm8SV+/wrGV41jI8axmetYwPV+/wrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bpWcv0rGV61jI9a5kfrt7pWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ls5blWcvyrGV51rI+XL3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1q2Zy3bs5btWcv2rGV/uHq3Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrUcz1qOZy3Hs5bjWcv5cPUez1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGu5PGu5PGu5PGu5PGu5Ply9l2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctl2ctt2ctt2ctt2ctt2ct94er9/as5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fas5fGs5fGs5fGs5fGs5flw9T6etTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetTyetbyetbyetbyetbyetbwfrt7Xs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5bXs5aXs5b7w1nLN0mr95uk1ftN0ur9Jmn1fpO0er9JWr3fJK3eb5JW7zfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnLN8mrN2ct3ySv3py1fJO8enPW8k3y6s1ZyzfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnLN8mrN2ct3ySv3py1fJO8enPW8k3y6s1ZyzfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnLN8mrN2ct3ySv3py1fJO8enPW8k3y6s1ZyzfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnLN8mrN2ct3ySu3uFZy/CsZXjWMjxrGR+u3uFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLdOzlulZy/SsZXrWMj9cvdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWpZnLcuzluVZy/KsZX24epdnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metWzPWrZnLduzlu1Zy/5w9W7PWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9azmetRzPWo5nLcezlvPh6j2etRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nJ51nJ51nJ51nJ51nJ9uHovz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1ouz1qu71vLu399+tb9Z5P+5afj5t8/HLd+f3bf3+vPH73+/snrv489/1XXxx+9Pv/o9SWvz39qZqx/tL7/6PV07/9yPd37v1pfdHNyfX7vOP9oPd2cv1xvN+ev1kPN+TVpvEnLmwTl9tckqKG/JkF/Ef77pIb+dvtrEvTHx69J0J8JvyZBof81yat3e/Vur97t1bu9erdX7/HqPV69x6v3ePUer97j1Xu8eo9X7/HqPV69l1fv5dV7efVeXr2XV+/l1Xt59V5evZdX7+XVe3v13l69t1fv7dV7e/XeXr23V+/t1Xt79d5evY9X7+PV+3j1Pl69j1fv49X7ePU+Xr2PV+/j1ft69b5eva9X7+vV+3r1vl69r1fv69X7evW+XL33h6v3/nD13h+u3vvD1Xt/uHrvD1fv/eHqvT9cvfeHq/f+ePUOr97h1Tu8eodX7/DqHV69w6u3xCl/TfLqLcHHv0+SNOOvSV69JXf4a5JXb0kI/prk1Tu9eks48tckr97p1bu8ekvY89ckr94Sy/w1yau3Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy23Zy2PZy2PZy2PZy2PZy3Ph6v38azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl8azl9azl9azl9azl9azl/XD1vp61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJ61vJy1PB/OWr5JWr3fJK3eb5JW7zdJq/ebpNX7TdLq/SZp9X6TtHq/SV69OWv5Jnn15qzlm+TVm7OWb5JXb85avklevTlr+SZ59eas5Zvk1Zuzlm+SV2/OWr5JXr05a/kmefXmrOWb5NWbs5Zvkldvzlq+SV69OWv5Jnn15qzlm+TVm7OWb5JXb85avklevTlr+SZ59eas5Zvk1Zuzlm+SV2/OWr5JXr05a/kmefXmrOWb5NWbs5Zvkldvzlq+SV69OWv5Jnn15qzlm+TVm7OWb5JXb85avklevTlr+SZ59eas5Zvk1Zuzlm+SV2/OWr5JXr05a/kmefXmrOWb5NWbs5Zvkldvzlq+SV69OWv5Jnn15qzlm+TVm7OWb5JXb85avklevTlr+SZ59eas5Zvk1Zuzlm+SV2/OWr5JXr05a/kmcfUOz1qGZy3Ds5bhWcv4cPUOz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGuZnrVMz1qmZy3Ts5b54eqdnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletayPGtZnrUsz1qWZy3rw9W7PGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxle9ayPWvZnrVsz1r2h6t3e9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL8azleNZyPGs5nrWcD1fv8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OWy7OWy7OWy7OWy7OW68PVe3nWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnnWcnvWcnvWcnvWcnvWcn+4em/PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWm7PWh7PWh7PWh7PWh7PWp4PV+/jWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvjWcvrWcvrWcvrWcvrWcv74ep9PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5PWt5OWt5P5y1fJO0er9JWr3fJK3eb5JW7zdJq/ebpNX7TdLq/SZp9X6TvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnLN8mrN2ct3ySv3py1fJO8enPW8k3y6s1ZyzfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnLN8mrN2ct3ySv3py1fJO8enPW8k3y6s1ZyzfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnLN8mrN2ct3ySv3py1fJO8enPW8k3y6s1ZyzfJqzdnLd8kr96ctXyTvHpz1vJN8urNWcs3yas3Zy3fJK/enLV8k7x6c9byTfLqzVnLN8mrN2ct3ySv3py1fJO8enPW8k3i6h2etQzPWoZnLcOzlvHh6h2etQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI8axmetQzPWoZnLcOzluFZy/CsZXjWMjxrGZ61DM9ahmctw7OW4VnL8KxleNYyPGsZnrUMz1qGZy3Ds5bhWcvwrGV41jI9a5metUzPWqZnLfPD1Ts9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV61jI9a5metUzPWqZnLdOzlulZy/SsZXrWMj1rmZ61TM9apmct07OW6VnL9KxletYyPWuZnrVMz1qmZy3Ts5bpWcv0rGV51rI8a1metSzPWtaHq3d51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcvyrGV51rI8a1metSzPWpZnLcuzluVZy/KsZXnWsjxrWZ61LM9almcty7OW5VnL8qxledayPGtZnrUsz1qWZy3Ls5blWcv2rGV71rI9a9metewPV+/2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5btWcv2rGV71rI9a9metWzPWrZnLduzlu1Zy/asZXvWsj1r2Z61bM9atmct27OW7VnL9qxle9ayPWvZnrVsz1q2Zy3bs5bjWcvxrOV41nI8azkfrt7jWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy3Hs5bjWcvxrOV41nI8azmetRzPWo5nLcezluNZy/Gs5XjWcjxrOZ61HM9ajmctx7OW41nL8azleNZyPGs5nrUcz1qOZy2XZy2XZy2XZy2XZy3Xh6v38qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl8qzl9qzl9qzl9qzl9qzl/nD13p613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J613J61PJ61PJ61PJ61PJ61PB+u3sezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlsezlufr1vKeX5PqU/XPJv3LT8fNv3847j99dt/f6/cfvf780evvn7z+6y70X3d9/NHrU16fEb++OtY/Wl9/9Hq693+5nu79X61fdHNyfX7vOP9oPd2cv1xvN+ev1kPN+TWpvUnjTYJy+2sS1NBfk6C/CP+aBP3t9u+TNvTHx69J0J8JvyZBof81yav39uq9vXpvr97bq/f26r29eh+v3ser9/Hqfbx6H6/ex6v38ep9vHofr97Hq/f16n29el+v3ter9/Xqfb16X6/e16v39ep9uXrfD1fv++HqfT9cve+Hq/f9cPW+H67e98PV+364et8PV+/78eodXr3Dq3d49Q6v3uHVO7x6h1fv8OodXr3Dq3d69U6v3unVO716p1fv9OqdXr3Tq3d69U6v3uXVu7x6l1fv8updXr3Lq3d59S6v3uXVu7x6t1fv9urdXr3bq3d79W6v3hKn/DXJq7cEH39N8uotEcVfk7x6S5jw1ySv3uPVe7x6Szjy1ySv3uPVe7x6S9jz1ySv3hLL/DXJq7dnLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLa9nLS9nLePz4bDlzyat3z+btID/bNIK/rNJS/jPJq3hP5u0iP9s0ir+s0nL+M8msOMcu/zZBHacg5c/m8COc/TyZxPYcQ5f/mwCO87xy59NYMc5gPmzCew4RzB/NoEd5xDmzyaw4xzD/NkEdpyDmD+bwI5zFPNnE9hxDmP+bAI7znHMn01gxzmQ+bMJ7DhHMn82gR3nUObPJrDj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51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg51yg59yg59yg59yg59yg59wfr+Mb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9Jwb9JwH9JwH9JwH9JwH9Jzn43X8gJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgJ7zgp7zgp7zgp7zgp7zfryOX9BzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBzXtBz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B/ScA3rOAT3ngJ5zQM85oOcc0HMO6DkH9JwDes4BPeeAnnNAzzmg5xzQcw7oOQf0nAN6zgE954Cec0DPOaDnHNBzDug5B/ScA3rOAT3nAj3nAj3nAj3nAj3n+ngdX6DnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDnXKDn3KDn3KDn3KDn3KDn3B+v4xv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nBv0nAf0nAf0nAf0nAf0nOfjdfyAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOAnvOA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reg31JrKUis1ot9QaypLrdSGfkOtqSy1UhP6DbWmstRKLeg31JrKUis1oN9QaypLrdR+fkOtpSzVVmo+v6HWUpZqpnrPm6ne87apKbWWslQz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveTPWeN1O9581U73kz1XveLPWey2ap93xXayhL7WoNZaldraEstatVU2oNZaldraEstas1lKV2tYay1K7WVJay1Hu+qzWVpSz1nu9qTWUpS73nu1pTWcpS7/mu1lSWstR7vqs1laUs9Z7vak1lKUu957taU1nKUu/5rtZUlrLUe76rNZWlLPWe72pNZSlLvee7WlNZylLv+a7WVJay1Hu+qzWVpSz1nu9qTWUpS73nu1pTWcpS7/mu1lSWstR7vqs1laUs9Z7vak1lKUu957taU1nKUu/5rtZUlrLUe76rNZWlLPWe72pNZSlLvee7WlNZylLv+a7WVJay1Hu+qzWVpSz1nu9qTWUpS73nu1pTWcpS7/mu1lSWstR7vqs1laUs9Z7vak1lKUu957taU1nKUu/5rtZUlrLUe76rNZWlLPWe72pNZSlLvee7WlNZylLv+a7WVJay1Hu+qzWVpSz1nu9qTWUpS73nu1pTWcpS7/mu1lSWstR7vqs1laUs9Z7vak1lKUu957taU1nKUu/5rtZUlrLUe76rtZSlxFTvuZjqPRdTvediqvdcNjWl1lKWElO952Kq91xM9Z6Lqd5zMdV7LqZ6z8VU77mY6j0XU73nYqr3XEz1noup3nMx1XsupnrPxVTvuZjqPRdTvediqvdcTPWei6neczHVey6mes/FVO+5mOo9F1O952Kq91xM9Z6Lqd5zMdV7LqZ6z8VU77mY6j0XU73nYqr3XEz1noup3nMx1XsupnrPxVTvuZjqPRdTvediqvdcTPWei6neczHVey6mes/FVO+5mOo9F1O952Kq91xM9Z6Lqd5zMdV7LqZ6z8VU77mY6j0XU73nYqr3XEz1noup3nMx1XsupnrPxVTvuZjqPRdTvediqvdcTPWei6neczHVey6mes/FVO+5mOo9F1O952Kq91xM9Z6Lqd5zMdV7LqZ6z8VU77mY6j0XU73nYqr3XEz1noup3nMx1XsupnrPxVTvuZjqPRdTvediqvdcTPWei6neczHVey6mes+Dqd7zYKr3PJjqPQ+mes/DpqbUWspSwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5M9Z4HU73nwVTveTDVex5N9Z5HU73n0VTveTTVex43NaXWUpaKpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6ne82iq9zya6j2PpnrPo6neczXVe66mes/VVO+5muo9101NqbWUpdRU77ma6j1XU73naqr3XE31nqup3nM11XuupnrP1VTvuZrqPVdTvedqqvdcTfWeq6neczXVe66mes/VVO+5muo9V1O952qq91xN9Z6rqd5zNdV7rqZ6z9VU77ma6j1XU73naqr3XE31nqup3nM11XuupnrP1VTvuZrqPVdTvedqqvdcTfWeq6neczXVe66mes/VVO+5muo9V1O952qq91xN9Z6rqd5zNdV7rqZ6z9VU77ma6j1XU73naqr3XE31nqup3nM11XuupnrP1VTvuZrqPVdTvedqqvdcTfWeq6neczXVe66mes/VVO+5muo9V1O952qq91xN9Z6rqd5zNdV7rqZ6z9VU77ma6j1XU73naqr3XE31nqup3nM11XuupnrP1VTvuZrqPVdTvedqqvdcTfWeq6neczXVe66mes/VVO+5muo9V1O952qq91xN9Z6rqd7zZKr3PJnqPU+mes+Tqd7ztKkptZayVDLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z4nU73nyVTveTLVe55M9Z5nU73n2VTveTbVe55N9Z7nTU2ptZSlsqne82yq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42m4Z40/i65vjafhrjWehrvWeBruWqNuTc8aT8NdazwNd63xNNy1xtNw1xpPwz1r/Fl0fWs8DXet8TTctcbTcNcadWt61nga7lrjabhrjafhrjWehrvWeBruWePPoutb42m4a42n4a41noa71qhb07PG03DXGk/DXWs8DXet8TTctcbTcM8afxZd3xpPw11rPA13rfE03LVG3ZqeNZ6Gu9Z4Gu5a42m4a42n4a41noZ71viz6PrWeBruWuNpuGuNp+GuNerW9KzxNNy1xtNw1xpPw11rPA13rfE03LPGn0XXt8bTcNcaT8NdazwNd61Rt6ZnjafhrjWehrvWeBruWuNpuGuNp+GeNf4sur41noa71nga7lrjabhrjbo1PWs8DXet8TTctcbTcNcaT8NdazwNd6yp/iy6vjWehrvWeBruWuNpuGuNujU9azwNd63xNNy1xtNw1xpPw11rPA33rPFn0fWt8TTctcbTcNcaT8Nda9St6VnjabhrjafhrjWehrvWeBruWuNpuGeNP4uub42n4a41noa71nga7lqjbk3PGk/DXWs8DXet8TTctcbTcNcaT8M9a/xZdH1rPA13rfE03LXG03DXGnVretZ4Gu5a42m4a42n4a41noa71nga7lnjz6LrW+NpuGuNp+GuNZ6Gu9aoW9OzxtNw1xpPw11rPA13rfE03LXG03DPGn8WXd8aT8NdazwNd63xNNy1Rt2anjWehrvWeBruWuNpuGuNp+GuNZ6Ge9b4s+j61nga7lrjabhrjafhrjXq1vSs8TTctcbTcNcaT8NdazwNd63xNNyzxp9F17fG03DXGk/DXWs8DXetUbemZ42n4a41noa71nga7lrjabhrjafhnjX+LLq+NZ6Gu9Z4Gu5a42m4a426NT1rPA13rfE03LXG03DXGk/DXWs8Dfes8WfR9a3xNNy1xtNw1xpPw11r1K3pWeNpuGuNp+GuNZ6Gu9Z4Gu5a42m4Y03zZ9H1rfE03LXG03DXGk/DXWvUrelZ42m4a42n4a41noa71nga7lrjabhnjT+Lrm+Np+GuNZ6Gu9Z4Gu5ao25NzxpPw11rPA13rfE03LXG03DXGk/DPWv8WXR9azwNd63xNNy1xtNw1xp1a3rWeBruWuNpuGuNp+GuNZ6Gu9Z4Gu5Z48+i61vjabhrjafhrjWehrvWqFvTs8bTcNca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99w/yX3ec3XPH/fc76HPe+730Oc993vo8577PfSG5yEcNoZvEk89ryL/vLZ++2pO09tyv4Y+bbk/Rvt5y/0S+rjlfgd93HK/gj5uubrlT1vuF9DHLff75+OW+/Xzccv99vm45X77fNpyf+j585b77fNxy/32+bjlfvt83HJ1y5+23G+fj1vut8/HLffb5+OW++3zccv99vmw5cUfUf+85X77fNxyv30+brnfPh+3XN3ypy332+fjlvvt83HL/fb5uOV++3zccr99Pm25+O3zccv99vm45X77fNxyv30+brm65U9b7rfPxy332+fjlvvt83HL/fb5uOV++3za8uC3z8ct99vn45b77fNxy/32+bjl6pY/bbnfPh+33G+fj1vut8/HLffb5+OW++3zacuj3z4ft9xvn49b7rfPxy332+fjlqtb/rTlfvt83HK/fT5uud8+H7fcb5+PW+63z6ctV799jrY8v17bvv27embG1fNZi3qEH/3b0e347ejn387l4xaLqv96yL8eD01/8ddz9VCBoh6w0L8eD2PkX0/y4Ib+9fhXDOhfj38dgf71+L0H/etR//WQfz3+lQj61+Nfn6B/Pf6pAfrX458aoH89/qkB+deT/VMD9K/HPzUY/Otph3ctX3wbV+vr+4Qm3/5VPXP56ou77J8v/L1f5C7p9dKvn/tnv0j/JOLv/SJli68/X5Aty5/+KtV/lX/vVynb8e9KrH/6q/RPOJ76VR6W+6cWT1tePKyPtlyOE+c//vOS4mEd/etR//X8vV/P5VW3+ApH/3p83aN/Pf4lBfrX419SoH89/iUF+ddT/d6D/vX4vQf96/GvHtC/Hv9CAf3rUf/1kH89/qkB+tfjnxqgfz3+qQH61+OfGvzRr+fw0a/3Q3xsfg+/4+O2vX2sn8dFDK+/Z4khnEyA5lfrpx332/LTjvsFeLDjIvryQ6RsZ56rez7a83oIDJucee5X1ec99/vn8577pfI3PZd65rnfFJ/33G+VT3teN7+BPu+530Gf99xvoc977vfQ0Z5f/U123dQ9f9xzz4rPe+5Z8XHPxXfoaM+vvrGs4jv0ec99hz7vuX+W+7zn/lnu8577Z7nPe+75/HnPPZ8/7nnwz3Kf99w/y33ec7+HPu+530Of91zd88c993voHc9rPGyU/N3zw0e/W47x0e+Ld3xM9e3jBVBy+bec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Rce/INha0oJXEv+CYGtJC14e/AuCrSUteM3vLwi2lrTghby/INha0oJX5/6CYGtJC15y+wuCrSUteCHtLwi2lrTg9bG/INha0oKXvf6CYGtJC17i+guCrSUteI3rLwi2lrTgRa6/INha0oJXuf6CYGtJC17m+guCrSUteJ3rLwi2lrTgha6/INha0oJXuv6CYGtJC17q+guCrSUteK3rLwi2lrTgxa6/INha0oJXu/6CYGtJC17u+guCrSUteL3rLwi2lrTgBa+/INha0oJXvP6CYGtJC17y+guCrSUteM3rLwi2lrSataQFb7b9BcFqTbC1pNWsJS16e/F4wdaSFr0XebTgTC9RHi/YWNLK9Hrm8YKNJa28qTXBxpJWxldKDxdsLGnlzVjSypu1pIWvIx8u2FrSwhedDxdsLWnBK9R/QbC1pAUvZ/8FwdaSFrz2/RcEW0ta1jris7WO+GytIz5b64jP1jris7WO+GytIz5b64jP1jris7WO+GytIz5b64jP1jris7WO+GytIz5b64jP1jris7WO+GytIz5b64jP1jris7WO+GytIz5b64jP1jris7WO+GytIz5b64jP1jris7WO+GytIz5b64jP1jris7WO+GytIz5b64jP1jris7WO+GytIz5b64jP1jris7WO+GytIz5b64jP1jris7WO+GytIz5b64jP1jris7WO+GytIz5b64jP1jris7WO+GytIz5b64jP1jris7WO+GytIz5b64jP1jris7WO+GytIz5b64jP1jris7WO+GytIz5b64jP1jris7WO+GytIz5b64jP1jris7WO+GytIz5b64jP1jris7WO+GytIz5b64gv1jrii7WO+GKtI75Y64gvm1oTbCxpFWsd8cVaR3yx1hFfrHXEF2sd8cVaR3yx1hFfrHXEF2sd8cVaR3yx1hFfrHXEF2sd8cVaR3yx1hFfrHXEF2sd8cVaR3yx1hFfrHXEF2sd8cVaR3yx1hFfrHXEF2sd8cVaR3yx1hFfrHXEF2sd8cVaR3yx1hFfrHXEF2sd8cVaR3yx1hFfrHXEF2sd8cVaR3yx1hFfrHXEF2sd8cVaR3yx1hFfrHXEF2sd8cVaR3yx1hFfrHXEF2sd8cVaR3yx1hFfrHXEF2sd8cVaR3yx1hFfrHXEF2sd8cVaR3yx1hFfrHXEF2sd8cVaR3yx1hFf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X2kBLj921x2xu+6I3XVH7K47YnfdLXbX3WJ33S12191id13zhRfg8mN33S12191id90tdtfdYnfdPXbX3WN33T12191jd13zbSng8mN33d13133Rd3MXkePh8amIZXmC8d3P3wjGt1N4FZj9eLj05Tcw/35auw6u7r7tysteXO3JsJy9uNri2wi9CEwZ4/Hwh5VVXlz1eLh9+tH2370Q2+LbuXng3drjYSnLj3n7tpq+Xt9/8j4g+ja8r3/3rL9EnYGRjGA+/trj4VbGORjfJv2NYJLa//YEs52DSWn/Wzvsvyz1HExO+/98xcjSzsHE9PSP8ktM532UH9MTHOX77tzKj9pa8d1f1fJ9d0G1fN9vyWr5vt84tfKtV/18DOCOAcDSmla+MgD++L/Y5Uvs8tfY5ffY5Y/Y5W+xy99Dl2+9aAldfoldfuyu22J3XevlRejyY3fdFrvrtthdt8Xuui1215XYXVdid12J3XUldte13nyFLj9215XYXVdid12J3XUldtddY3fdNXbXXWN33TV217XeO4YuP3bXXWN33TV2111jd901dtftsbtuj911e+yu22N3Xeu9Y+jyY3fdHrvr9thdt8fuuj121x2xu+7w3XXf9rvFNnz38zeC8e0UIvygs1kvbPPy4lJ/0Dl8G6HpftA5fDu36X7QOXxbzRg/6By+De/7ftA5fFvp9/1ucfNt0t8IJqn9V3/QuaW0/zd+0LnltP/6Dzqt10GCwBzlx3TeR/kxPcFRvu/Orf2obffdX9XyfXdBtXzfb8lq+b7fONXyrSPdtj/Kr3vbtfK1AbD1fjZ0+Xvk8sV6gRm6/BK7/Bq7/Ba7fIld/hq7/B67/NBdV5bQXVeW2F23xO66JXbXLbG7bondda1XR6HLj911S+yuW2J33RK765bYXbfG7ro1dtetvrvuiz63kX48LPvzA61tfXLx3c7fx0UyclmXh76yynbKxbcBednrZXly2U+5+HY2r3q99P54uC/llItvy/Q+Lr692Ov/O+rL+fuub5OnfJAtzbfJU8uP6QaO8n03beWjVGm+e6tavu8WqJbv+x1ZLd/3G6dWvvmurO2ZGLf1pxcDivmuLHD5Erv8NXb5PXb5I3b5W+zy99Dlm+/KApdfYpcfu+uusbuu+a4scPmxu+4au+uusbvuGrvrrr677mvGdx+ff//zrJx/ONB9N/N3UfHtEV5E5fiETfZ+SsW39XgXFd+O5lX/BfWDyjilIiGpHOX7Nkpq+b5btVq+71atDUaH756qlu+7+anl+34/Vsv3/cZ5Wf7Hv/yf//if/+0//st//6//6+P/4eNf//f//R///x//8/8B", "file_map": { "2": { "source": "// docs:start:eq-trait\ntrait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\nimpl Eq for Field { fn eq(self, other: Field) -> bool { self == other } }\n\nimpl Eq for u1 { fn eq(self, other: u1) -> bool { self == other } }\nimpl Eq for u8 { fn eq(self, other: u8) -> bool { self == other } }\nimpl Eq for u32 { fn eq(self, other: u32) -> bool { self == other } }\nimpl Eq for u64 { fn eq(self, other: u64) -> bool { self == other } }\n\nimpl Eq for i8 { fn eq(self, other: i8) -> bool { self == other } }\nimpl Eq for i32 { fn eq(self, other: i32) -> bool { self == other } }\nimpl Eq for i64 { fn eq(self, other: i64) -> bool { self == other } }\n\nimpl Eq for () { fn eq(_self: Self, _other: ()) -> bool { true } }\nimpl Eq for bool { fn eq(self, other: bool) -> bool { self == other } }\n\nimpl<T, N> Eq for [T; N] where T: Eq {\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0 .. self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl<N> Eq for str<N> {\n fn eq(self, other: str<N>) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl<A, B> Eq for (A, B) where A: Eq, B: Eq {\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl<A, B, C> Eq for (A, B, C) where A: Eq, B: Eq, C: Eq {\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl<A, B, C, D> Eq for (A, B, C, D) where A: Eq, B: Eq, C: Eq, D: Eq {\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl<A, B, C, D, E> Eq for (A, B, C, D, E) where A: Eq, B: Eq, C: Eq, D: Eq, E: Eq {\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3) & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\nstruct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n// docs:start:ord-trait\ntrait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else {\n if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n }\n}\n\nimpl<T, N> Ord for [T; N] where T: Ord {\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0 .. self.len() {\n if result == Ordering::equal() {\n let result_i = self[i].cmp(other[i]);\n\n if result_i == Ordering::less() {\n result = result_i;\n } else if result_i == Ordering::greater() {\n result = result_i;\n }\n }\n }\n result\n }\n}\n\nimpl<A, B> Ord for (A, B) where A: Ord, B: Ord {\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl<A, B, C> Ord for (A, B, C) where A: Ord, B: Ord, C: Ord {\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl<A, B, C, D> Ord for (A, B, C, D) where A: Ord, B: Ord, C: Ord, D: Ord {\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl<A, B, C, D, E> Ord for (A, B, C, D, E) where A: Ord, B: Ord, C: Ord, D: Ord, E: Ord {\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n", "path": "std/cmp.nr" }, "3": { "source": "struct BoundedVec<T, MaxLen> {\n storage: [T; MaxLen],\n // TODO: change this to return a u64 as Noir now\n // uses u64 for indexing\n len: Field,\n empty_value: T,\n}\n\nimpl<T, MaxLen> BoundedVec<T, MaxLen> {\n pub fn new(initial_value: T) -> Self {\n BoundedVec { storage: [initial_value; MaxLen], len: 0, empty_value: initial_value }\n }\n\n pub fn get(mut self: Self, index: Field) -> T {\n assert(index as u64 < self.len as u64);\n self.storage[index]\n }\n\n pub fn get_unchecked(mut self: Self, index: Field) -> T {\n self.storage[index]\n }\n\n pub fn push(&mut self, elem: T) {\n assert(self.len as u64 < MaxLen as u64, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n pub fn len(self) -> Field {\n self.len\n }\n\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> Field {\n MaxLen\n }\n\n // This is a intermediate method, while we don't have an\n // .extend method\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n pub fn extend_from_array<Len>(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len as u64 <= MaxLen as u64, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n pub fn extend_from_bounded_vec<Len>(&mut self, vec: BoundedVec<T, Len>) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len as u64 <= MaxLen as u64, \"extend_from_bounded_vec out of bounds\");\n\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + (i as Field)] = vec.get_unchecked(i as Field);\n }\n }\n self.len = new_len;\n }\n\n pub fn pop(&mut self) -> T {\n assert(self.len as u64 > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = self.empty_value;\n elem\n }\n\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if (!exceeded_len) {\n ret |= predicate(self.storage[i]);\n }\n }\n ret\n }\n}", "path": "std/collections/bounded_vec.nr" }, "19": { "source": "mod bn254;\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n pub fn to_le_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_le_bits(bit_size)\n }\n \n pub fn to_be_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_be_bits(bit_size)\n }\n\n #[builtin(to_le_bits)]\n fn __to_le_bits(self, _bit_size: u32) -> [u1] {}\n \n #[builtin(to_be_bits)]\n fn __to_be_bits(self, bit_size: u32) -> [u1] {}\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n pub fn assert_max_bit_size(self: Self, bit_size: u32) {\n crate::assert_constant(bit_size);\n assert(bit_size < modulus_num_bits() as u32);\n self.__assert_max_bit_size(bit_size);\n }\n\n pub fn to_le_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_le_radix(256, byte_size)\n }\n\n pub fn to_be_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_be_radix(256, byte_size)\n }\n\n\n pub fn to_le_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_le_radix(radix, result_len)\n }\n\n pub fn to_be_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_be_radix(radix, result_len)\n }\n\n\n\n // decompose `_self` into a `_result_len` vector over the `_radix` basis\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32, result_len: u32) -> [u8] {}\n \n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32, result_len: u32) -> [u8] {}\n\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b = exponent.to_le_bits(32);\n\n for i in 1..33 {\n r *= r;\n r = (b[32-i] as Field) * (r * self) + (1 - b[32-i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x ∈ {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n\n}\n\n#[builtin(modulus_num_bits)]\npub fn modulus_num_bits() -> Field {}\n\n#[builtin(modulus_be_bits)]\npub fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub fn modulus_le_bytes() -> [u8] {}\n// Convert a 32 byte array to a field element\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n let num_bytes = (modulus_num_bits() as u32 + 7) / 8;\n let x_bytes = x.to_le_bytes(num_bytes);\n let y_bytes = y.to_le_bytes(num_bytes);\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..num_bytes {\n if (!done) {\n let x_byte = x_bytes[num_bytes - 1 - i] as u8;\n let y_byte = y_bytes[num_bytes - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n}\n\n", "path": "std/field.nr" }, "40": { "source": "use crate::ops::{Add, Sub, Mul, Div, Rem, BitOr, BitAnd, BitXor, Shl, Shr};\nuse crate::cmp::{Eq, Ord, Ordering};\n\nglobal pow64 : Field = 18446744073709551616; //2^64;\n\nstruct U128 {\n lo: Field,\n hi: Field,\n}\n\nimpl U128 {\n\n pub fn from_u64s_le(lo: u64, hi: u64) -> U128 {\n // in order to handle multiplication, we need to represent the product of two u64 without overflow\n assert(crate::field::modulus_num_bits() as u32 > 128);\n U128 {\n lo: lo as Field,\n hi: hi as Field,\n }\n }\n\n pub fn from_u64s_be(hi: u64, lo: u64) -> U128 {\n U128::from_u64s_le(lo,hi)\n }\n\n pub fn from_le_bytes(bytes: [u8; 16]) -> U128 {\n let mut lo = 0;\n let mut base = 1;\n for i in 0..8 {\n lo += (bytes[i] as Field)*base;\n base *= 256;\n }\n let mut hi = 0;\n base = 1;\n for i in 8..16 {\n hi += (bytes[i] as Field)*base;\n base *= 256;\n }\n U128 {\n lo,\n hi,\n }\n }\n\n pub fn to_be_bytes(self: Self) -> [u8; 16] {\n let lo = self.lo.to_be_bytes(8);\n let hi = self.hi.to_be_bytes(8);\n let mut bytes = [0;16];\n for i in 0..8 {\n bytes[i] = hi[i];\n bytes[i+8] = lo[i];\n }\n bytes\n }\n\n pub fn to_le_bytes(self: Self) -> [u8; 16] {\n let lo = self.lo.to_le_bytes(8);\n let hi = self.hi.to_le_bytes(8);\n let mut bytes = [0;16];\n for i in 0..8 {\n bytes[i] = lo[i];\n bytes[i+8] = hi[i];\n }\n bytes\n }\n\n pub fn from_hex<N>(hex: str<N>) -> U128 {\n let N = N as u32;\n let bytes = hex.as_bytes();\n // string must starts with \"0x\"\n assert((bytes[0] == 48) & (bytes[1] == 120), \"Invalid hexadecimal string\");\n assert(N < 35, \"Input does not fit into a U128\");\n\n let mut lo = 0;\n let mut hi = 0;\n let mut base = 1; \n if N <= 18 {\n for i in 0..N-2 {\n lo += U128::decode_ascii(bytes[N-i-1])*base;\n base = base*16;\n }\n } else {\n for i in 0..16 {\n lo += U128::decode_ascii(bytes[N-i-1])*base;\n base = base*16;\n }\n base = 1;\n for i in 17..N-1 { \n hi += U128::decode_ascii(bytes[N-i])*base;\n base = base*16;\n }\n }\n U128 {\n lo: lo as Field,\n hi: hi as Field,\n }\n }\n\n fn decode_ascii(ascii: u8) -> Field {\n if ascii < 58 {\n ascii - 48\n } else {\n if ascii < 71 {\n ascii - 55\n } else {\n ascii - 87\n }\n \n } as Field\n }\n\n unconstrained fn unconstrained_div(self: Self, b: U128) -> (U128, U128) {\n if self < b {\n (U128::from_u64s_le(0, 0), self)\n } else {\n //TODO check if this can overflow?\n let (q,r) = self.unconstrained_div(b * U128::from_u64s_le(2,0));\n let q_mul_2 = q * U128::from_u64s_le(2,0);\n if r < b {\n (q_mul_2, r)\n } else {\n (q_mul_2 + U128::from_u64s_le(1,0), r - b)\n }\n\n } \n }\n\n pub fn from_integer<T>(i: T) -> U128 {\n let f = crate::as_field(i);\n // Reject values which would overflow a u128\n f.assert_max_bit_size(128);\n let lo = f as u64 as Field;\n let hi = (f-lo) / pow64;\n U128 {\n lo,\n hi,\n }\n }\n\n pub fn to_integer<T>(self) -> T {\n crate::from_field(self.lo+self.hi*pow64)\n }\n\n fn wrapping_mul(self: Self, b: U128) -> U128 {\n let low = self.lo*b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64;\n let high = if crate::field::modulus_num_bits() as u32 > 196 {\n (self.lo+self.hi)*(b.lo+b.hi) - low + carry\n } else {\n self.lo*b.hi + self.hi*b.lo + carry\n };\n let hi = high as u64 as Field;\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Add for U128 {\n fn add(self: Self, b: U128) -> U128 {\n let low = self.lo + b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64; \n let high = self.hi + b.hi + carry;\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to add with overflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Sub for U128 {\n fn sub(self: Self, b: U128) -> U128 {\n let low = pow64 + self.lo - b.lo;\n let lo = low as u64 as Field;\n let borrow = (low == lo) as Field;\n let high = self.hi - b.hi - borrow;\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to subtract with overflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Mul for U128 {\n fn mul(self: Self, b: U128) -> U128 {\n assert(self.hi*b.hi == 0, \"attempt to multiply with overflow\");\n let low = self.lo*b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64;\n let high = if crate::field::modulus_num_bits() as u32 > 196 {\n (self.lo+self.hi)*(b.lo+b.hi) - low + carry\n } else {\n self.lo*b.hi + self.hi*b.lo + carry\n };\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to multiply with overflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Div for U128 {\n fn div(self: Self, b: U128) -> U128 {\n let (q,r) = self.unconstrained_div(b);\n let a = b * q + r;\n assert_eq(self, a);\n assert(r < b);\n q\n }\n}\n\nimpl Rem for U128 {\n fn rem(self: Self, b: U128) -> U128 {\n let (q,r) = self.unconstrained_div(b);\n let a = b * q + r;\n assert_eq(self, a);\n assert(r < b);\n r\n }\n}\n\nimpl Eq for U128 {\n fn eq(self: Self, b: U128) -> bool {\n (self.lo == b.lo) & (self.hi == b.hi)\n }\n}\n\nimpl Ord for U128 {\n fn cmp(self, other: Self) -> Ordering {\n let hi_ordering = (self.hi as u64).cmp((other.hi as u64));\n let lo_ordering = (self.lo as u64).cmp((other.lo as u64));\n \n if hi_ordering == Ordering::equal() {\n lo_ordering\n } else {\n hi_ordering\n }\n }\n}\n\nimpl BitOr for U128 { \n fn bitor(self, other: U128) -> U128 {\n U128 {\n lo: ((self.lo as u64) | (other.lo as u64)) as Field,\n hi: ((self.hi as u64) | (other.hi as u64))as Field\n }\n }\n}\n\nimpl BitAnd for U128 {\n fn bitand(self, other: U128) -> U128 { \n U128 {\n lo: ((self.lo as u64) & (other.lo as u64)) as Field,\n hi: ((self.hi as u64) & (other.hi as u64)) as Field\n }\n }\n}\n\nimpl BitXor for U128 {\n fn bitxor(self, other: U128) -> U128 { \n U128 {\n lo: ((self.lo as u64) ^ (other.lo as u64)) as Field,\n hi: ((self.hi as u64) ^ (other.hi as u64)) as Field\n }\n }\n}\n\nimpl Shl for U128 { \n fn shl(self, other: U128) -> U128 { \n assert(other < U128::from_u64s_le(128,0), \"attempt to shift left with overflow\");\n let exp_bits = other.lo.to_be_bits(7);\n\n let mut r: Field = 2;\n let mut y: Field = 1;\n for i in 1..8 {\n y = (exp_bits[7-i] as Field) * (r * y) + (1 - exp_bits[7-i] as Field) * y;\n r *= r;\n }\n self.wrapping_mul(U128::from_integer(y))\n } \n}\n\nimpl Shr for U128 { \n fn shr(self, other: U128) -> U128 { \n assert(other < U128::from_u64s_le(128,0), \"attempt to shift right with overflow\");\n let exp_bits = other.lo.to_be_bits(7);\n\n let mut r: Field = 2;\n let mut y: Field = 1;\n for i in 1..8 {\n y = (exp_bits[7-i] as Field) * (r * y) + (1 - exp_bits[7-i] as Field) * y;\n r *= r;\n }\n self / U128::from_integer(y)\n } \n}\n", "path": "std/uint128.nr" }, "43": { "source": "global ARGS_LENGTH: Field = 16;\nglobal RETURN_VALUES_LENGTH: Field = 4;\n\n/**\n * Convention for constant array lengths are mainly divided in 2 classes:\n * - FUNCTION CALL\n * - TRANSACTION\n *\n * Agreed convention is to use MAX_XXX_PER_CALL resp. MAX_XXX_PER_TX, where XXX denotes a type of element such as\n * commitment, or nullifier, e.g.,:\n * - MAX_NEW_NULLIFIERS_PER_CALL\n * - MAX_NEW_COMMITMENTS_PER_TX\n *\n * In the kernel circuits, we accumulate elements such as commitments and the nullifiers from all functions calls in a\n * transaction. Therefore, we always must have:\n * MAX_XXX_PER_TX ≥ MAX_XXX_PER_CALL\n *\n * For instance:\n * MAX_NEW_COMMITMENTS_PER_TX ≥ MAX_NEW_COMMITMENTS_PER_CALL\n * MAX_NEW_NULLIFIERS_PER_TX ≥ MAX_NEW_NULLIFIERS_PER_CALL\n *\n */\n\n// docs:start:constants\n// \"PER CALL\" CONSTANTS\nglobal MAX_NEW_COMMITMENTS_PER_CALL: Field = 16;\nglobal MAX_NEW_NULLIFIERS_PER_CALL: Field = 16;\nglobal MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL: Field = 4;\nglobal MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL: Field = 4;\nglobal MAX_NEW_L2_TO_L1_MSGS_PER_CALL: Field = 2;\nglobal MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL: Field = 16;\nglobal MAX_PUBLIC_DATA_READS_PER_CALL: Field = 16;\nglobal MAX_READ_REQUESTS_PER_CALL: Field = 32;\nglobal MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL: Field = 1;\n\n// \"PER TRANSACTION\" CONSTANTS\nglobal MAX_NEW_COMMITMENTS_PER_TX: Field = 64;\nglobal MAX_NEW_NULLIFIERS_PER_TX: Field = 64;\nglobal MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX: Field = 8;\nglobal MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX: Field = 8;\nglobal MAX_NEW_L2_TO_L1_MSGS_PER_TX: Field = 2;\nglobal MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX: Field = 16;\nglobal MAX_PUBLIC_DATA_READS_PER_TX: Field = 16;\nglobal MAX_NEW_CONTRACTS_PER_TX: Field = 1;\nglobal MAX_READ_REQUESTS_PER_TX: Field = 128;\nglobal MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_TX: Field = 4;\nglobal NUM_ENCRYPTED_LOGS_HASHES_PER_TX: Field = 1;\nglobal NUM_UNENCRYPTED_LOGS_HASHES_PER_TX: Field = 1;\n\nglobal MAX_NEW_COMMITMENTS_PER_TX_META: Field = 8;\nglobal MAX_NEW_NULLIFIERS_PER_TX_META: Field = 8;\nglobal MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX_META: Field = 2;\n// docs:end:constants\n\n// ROLLUP CONTRACT CONSTANTS - constants used only in l1-contracts\nglobal NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP: Field = 16;\n\n// TREES RELATED CONSTANTS\nglobal VK_TREE_HEIGHT: Field = 3;\nglobal FUNCTION_TREE_HEIGHT: Field = 5;\nglobal CONTRACT_TREE_HEIGHT: Field = 16;\nglobal NOTE_HASH_TREE_HEIGHT: Field = 32;\nglobal PUBLIC_DATA_TREE_HEIGHT: Field = 40;\nglobal NULLIFIER_TREE_HEIGHT: Field = 20;\nglobal L1_TO_L2_MSG_TREE_HEIGHT: Field = 16;\nglobal ROLLUP_VK_TREE_HEIGHT: Field = 8;\nglobal ARTIFACT_FUNCTION_TREE_MAX_HEIGHT = 5;\n\n// SUB-TREES RELATED CONSTANTS\nglobal CONTRACT_SUBTREE_HEIGHT: Field = 0;\nglobal CONTRACT_SUBTREE_SIBLING_PATH_LENGTH: Field = 16;\nglobal NOTE_HASH_SUBTREE_HEIGHT: Field = 6;\nglobal NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH: Field = 26;\nglobal NULLIFIER_SUBTREE_HEIGHT: Field = 6;\nglobal PUBLIC_DATA_SUBTREE_HEIGHT: Field = 4;\nglobal ARCHIVE_HEIGHT: Field = 16;\nglobal NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH: Field = 14;\nglobal PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH: Field = 36;\nglobal L1_TO_L2_MSG_SUBTREE_HEIGHT: Field = 4;\nglobal L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH: Field = 12;\n\n// MISC CONSTANTS\nglobal FUNCTION_SELECTOR_NUM_BYTES: Field = 4;\nglobal MAPPING_SLOT_PEDERSEN_SEPARATOR: Field = 4;\n// sha256 hash is stored in two fields to accommodate all 256-bits of the hash\nglobal NUM_FIELDS_PER_SHA256: Field = 2;\nglobal ARGS_HASH_CHUNK_LENGTH: u32 = 32;\nglobal ARGS_HASH_CHUNK_COUNT: u32 = 32;\n\n// CONTRACT CLASS CONSTANTS\n// This should be around 8192 (assuming 2**15 instructions packed at 8 bytes each),\n// but it's reduced to speed up build times, otherwise the ClassRegisterer takes over 5 mins to compile.\n// We are not using 1024 so we can squeeze in a few more args to methods that consume packed public bytecode,\n// such as the ClassRegisterer.register, and still land below the 32 * 32 max args limit for hashing.\nglobal MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS: Field = 1000;\n// Bytecode size for private functions is per function, not for the entire contract.\n// Note that private functions bytecode includes a mix of acir and brillig.\nglobal MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS: Field = 500;\n// Same for unconstrained functions: the size is per function.\nglobal MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS: Field = 500;\n// Since we are not yet emitting selectors we'll use this magic value to identify events emitted by the ClassRegisterer.\n// This is just a stopgap until we implement proper selectors.\n// sha224sum 'struct ContractClassRegistered {contract_class_id: ContractClassId, version: Field, artifact_hash: Field, private_functions_root: Field, packed_public_bytecode: [Field; MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS] }'\nglobal REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE = 0x6999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f8;\n// sha224sum 'struct ClassPrivateFunctionBroadcasted'\nglobal REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE = 0x1b70e95fde0b70adc30496b90a327af6a5e383e028e7a43211a07bcd;\n// sha224sum 'struct ClassUnconstrainedFunctionBroadcasted'\nglobal REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99;\n\n// CONTRACT INSTANCE CONSTANTS\n// sha224sum 'struct ContractInstanceDeployed'\nglobal DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631;\n\n// NOIR CONSTANTS - constants used only in yarn-packages/noir-contracts\n// Some are defined here because Noir doesn't yet support globals referencing other globals yet.\n// Move these constants to a noir file once the issue below is resolved:\n// https://github.com/noir-lang/noir/issues/1734\nglobal L1_TO_L2_MESSAGE_LENGTH: Field = 8;\nglobal L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH: Field = 25;\nglobal MAX_NOTE_FIELDS_LENGTH: Field = 20;\n// GET_NOTE_ORACLE_RETURN_LENGT = MAX_NOTE_FIELDS_LENGTH + 1 + 2\n// The plus 1 is 1 extra field for nonce.\n// + 2 for EXTRA_DATA: [number_of_return_notes, contract_address]\nglobal GET_NOTE_ORACLE_RETURN_LENGTH: Field = 23;\nglobal MAX_NOTES_PER_PAGE: Field = 10;\n// VIEW_NOTE_ORACLE_RETURN_LENGTH = MAX_NOTES_PER_PAGE * (MAX_NOTE_FIELDS_LENGTH + 1) + 2;\nglobal VIEW_NOTE_ORACLE_RETURN_LENGTH: Field = 212;\nglobal CALL_CONTEXT_LENGTH: Field = 8;\nglobal GLOBAL_VARIABLES_LENGTH: Field = 6;\nglobal PARTIAL_STATE_REFERENCE_LENGTH: Field = 8;\nglobal STATE_REFERENCE_LENGTH: Field = 10; // 2 for snap + 8 for partial\nglobal HEADER_LENGTH: Field = 20; // 2 for last_archive, 2 for body hash, 10 for state reference, 6 for global vars\nglobal FUNCTION_DATA_LENGTH: Field = 4;\nglobal CONTRACT_DEPLOYMENT_DATA_LENGTH: Field = 6;\n// Change this ONLY if you have changed the PrivateCircuitPublicInputs structure.\n// In other words, if the structure/size of the public inputs of a function call changes then we should change this\n// constant as well PRIVATE_CALL_STACK_ITEM_LENGTH\nglobal PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH: Field = 207;\nglobal PRIVATE_CALL_STACK_ITEM_LENGTH: Field = 212;\nglobal CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH: Field = 2;\nglobal CONTRACT_STORAGE_READ_LENGTH: Field = 2;\n// Change this ONLY if you have changed the PublicCircuitPublicInputs structure.\nglobal PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH: Field = 187;\nglobal GET_NOTES_ORACLE_RETURN_LENGTH: Field = 674;\nglobal COMMITMENTS_NUM_BYTES_PER_BASE_ROLLUP: Field = 2048;\nglobal NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP: Field = 2048;\nglobal PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP: Field = 1024;\nglobal CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP: Field = 32;\nglobal CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP: Field = 64;\nglobal CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED: Field = 52;\nglobal L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP: Field = 64;\nglobal LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP: Field = 64;\n\n/**\n * Enumerate the hash_indices which are used for pedersen hashing.\n * We start from 1 to avoid the default generators. The generator indices are listed\n * based on the number of elements each index hashes. The following conditions must be met:\n *\n * +-----------+-------------------------------+----------------------+\n * | Hash size | Number of elements hashed (n) | Condition to use |\n * |-----------+-------------------------------+----------------------|\n * | LOW | n ≤ 8 | 0 < hash_index ≤ 32 |\n * | MID | 8 < n ≤ 16 | 32 < hash_index ≤ 40 |\n * | HIGH | 16 < n ≤ 48 | 40 < hash_index ≤ 48 |\n * +-----------+-------------------------------+----------------------+\n *\n * Note: When modifying, modify `GeneratorIndexPacker` in packer.hpp accordingly.\n */\n// Indices with size ≤ 8\nglobal GENERATOR_INDEX__COMMITMENT = 1;\nglobal GENERATOR_INDEX__COMMITMENT_NONCE = 2;\nglobal GENERATOR_INDEX__UNIQUE_COMMITMENT = 3;\nglobal GENERATOR_INDEX__SILOED_COMMITMENT = 4;\nglobal GENERATOR_INDEX__NULLIFIER = 5;\nglobal GENERATOR_INDEX__INITIALIZATION_NULLIFIER = 6;\nglobal GENERATOR_INDEX__OUTER_NULLIFIER = 7;\nglobal GENERATOR_INDEX__PUBLIC_DATA_READ = 8;\nglobal GENERATOR_INDEX__PUBLIC_DATA_UPDATE_REQUEST = 9;\nglobal GENERATOR_INDEX__FUNCTION_DATA = 10;\nglobal GENERATOR_INDEX__FUNCTION_LEAF = 11;\nglobal GENERATOR_INDEX__CONTRACT_DEPLOYMENT_DATA = 12;\nglobal GENERATOR_INDEX__CONSTRUCTOR = 13;\nglobal GENERATOR_INDEX__CONSTRUCTOR_ARGS = 14;\nglobal GENERATOR_INDEX__CONTRACT_ADDRESS = 15;\nglobal GENERATOR_INDEX__CONTRACT_LEAF = 16;\nglobal GENERATOR_INDEX__CALL_CONTEXT = 17;\nglobal GENERATOR_INDEX__CALL_STACK_ITEM = 18;\nglobal GENERATOR_INDEX__CALL_STACK_ITEM_2 = 19;\nglobal GENERATOR_INDEX__L1_TO_L2_MESSAGE_SECRET = 20;\nglobal GENERATOR_INDEX__L2_TO_L1_MSG = 21;\nglobal GENERATOR_INDEX__TX_CONTEXT = 22;\nglobal GENERATOR_INDEX__PUBLIC_LEAF_INDEX = 23;\nglobal GENERATOR_INDEX__PUBLIC_DATA_LEAF = 24;\nglobal GENERATOR_INDEX__SIGNED_TX_REQUEST = 25;\nglobal GENERATOR_INDEX__GLOBAL_VARIABLES = 26;\nglobal GENERATOR_INDEX__PARTIAL_ADDRESS = 27;\nglobal GENERATOR_INDEX__BLOCK_HASH = 28;\nglobal GENERATOR_INDEX__SIDE_EFFECT = 29;\nglobal GENERATOR_INDEX__FEE_PAYLOAD = 30;\n// Indices with size ≤ 16\nglobal GENERATOR_INDEX__TX_REQUEST = 33;\nglobal GENERATOR_INDEX__SIGNATURE_PAYLOAD = 34;\n// Indices with size ≤ 44\nglobal GENERATOR_INDEX__VK = 41;\nglobal GENERATOR_INDEX__PRIVATE_CIRCUIT_PUBLIC_INPUTS = 42;\nglobal GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS = 43;\nglobal GENERATOR_INDEX__FUNCTION_ARGS = 44;\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/constants.nr" }, "44": { "source": "use crate::{\n abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot, constants::PARTIAL_STATE_REFERENCE_LENGTH,\n traits::{Deserialize, Empty, Hash, Serialize}\n};\n\nstruct PartialStateReference {\n note_hash_tree: AppendOnlyTreeSnapshot,\n nullifier_tree: AppendOnlyTreeSnapshot,\n contract_tree: AppendOnlyTreeSnapshot,\n public_data_tree: AppendOnlyTreeSnapshot,\n}\n\nimpl Eq for PartialStateReference {\n fn eq(self, other: PartialStateReference) -> bool {\n self.note_hash_tree.eq(other.note_hash_tree) &\n self.nullifier_tree.eq(other.nullifier_tree) &\n self.contract_tree.eq(other.contract_tree) &\n self.public_data_tree.eq(other.public_data_tree)\n }\n}\n\nimpl Serialize<PARTIAL_STATE_REFERENCE_LENGTH> for PartialStateReference {\n fn serialize(self) -> [Field; PARTIAL_STATE_REFERENCE_LENGTH] {\n let serialized_note_hash_tree = self.note_hash_tree.serialize();\n let serialized_nullifier_tree = self.nullifier_tree.serialize();\n let serialized_contract_tree = self.contract_tree.serialize();\n let serialized_public_data_tree = self.public_data_tree.serialize();\n\n [\n serialized_note_hash_tree[0],\n serialized_note_hash_tree[1],\n serialized_nullifier_tree[0],\n serialized_nullifier_tree[1],\n serialized_contract_tree[0],\n serialized_contract_tree[1],\n serialized_public_data_tree[0],\n serialized_public_data_tree[1],\n ]\n }\n}\n\nimpl Deserialize<PARTIAL_STATE_REFERENCE_LENGTH> for PartialStateReference {\n fn deserialize(serialized: [Field; PARTIAL_STATE_REFERENCE_LENGTH]) -> PartialStateReference {\n PartialStateReference {\n note_hash_tree: AppendOnlyTreeSnapshot::deserialize(\n [serialized[0], serialized[1]]\n ),\n nullifier_tree: AppendOnlyTreeSnapshot::deserialize(\n [serialized[2], serialized[3]]\n ),\n contract_tree: AppendOnlyTreeSnapshot::deserialize(\n [serialized[4], serialized[5]]\n ),\n public_data_tree: AppendOnlyTreeSnapshot::deserialize(\n [serialized[6], serialized[7]]\n ),\n }\n }\n}\n\nimpl Empty for PartialStateReference {\n fn empty() -> Self {\n Self {\n note_hash_tree: AppendOnlyTreeSnapshot::zero(),\n nullifier_tree: AppendOnlyTreeSnapshot::zero(),\n contract_tree: AppendOnlyTreeSnapshot::zero(),\n public_data_tree: AppendOnlyTreeSnapshot::zero(),\n }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let partial: PartialStateReference = dep::std::unsafe::zeroed();\n let _serialized = partial.serialize();\n let _deserialized = PartialStateReference::deserialize(_serialized);\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/partial_state_reference.nr" }, "45": { "source": "use crate::{\n abis::append_only_tree_snapshot::{AppendOnlyTreeSnapshot, APPEND_ONLY_TREE_SNAPSHOT_LENGTH},\n constants::{PARTIAL_STATE_REFERENCE_LENGTH, STATE_REFERENCE_LENGTH},\n partial_state_reference::PartialStateReference, traits::{Deserialize, Empty, Hash, Serialize},\n utils::{arr_copy_slice}\n};\n\nstruct StateReference {\n l1_to_l2_message_tree: AppendOnlyTreeSnapshot,\n partial: PartialStateReference,\n}\n\nimpl Eq for StateReference {\n fn eq(self, other: StateReference) -> bool {\n self.l1_to_l2_message_tree.eq(other.l1_to_l2_message_tree) &\n self.partial.eq(other.partial)\n }\n}\n\nimpl Serialize<STATE_REFERENCE_LENGTH> for StateReference {\n fn serialize(self) -> [Field; STATE_REFERENCE_LENGTH] {\n let mut fields: BoundedVec<Field, STATE_REFERENCE_LENGTH> = BoundedVec::new(0);\n\n fields.extend_from_array(self.l1_to_l2_message_tree.serialize());\n fields.extend_from_array(self.partial.serialize());\n\n fields.storage\n }\n}\n\nimpl Deserialize<STATE_REFERENCE_LENGTH> for StateReference {\n fn deserialize(serialized: [Field; STATE_REFERENCE_LENGTH]) -> StateReference {\n let mut offset = 0;\n\n let l1_to_l2_message_tree_fields = arr_copy_slice(serialized, [0; APPEND_ONLY_TREE_SNAPSHOT_LENGTH], offset);\n offset = offset + APPEND_ONLY_TREE_SNAPSHOT_LENGTH;\n\n let partial_fields = arr_copy_slice(serialized, [0; PARTIAL_STATE_REFERENCE_LENGTH], offset);\n\n StateReference {\n l1_to_l2_message_tree: AppendOnlyTreeSnapshot::deserialize(l1_to_l2_message_tree_fields),\n partial: PartialStateReference::deserialize(partial_fields),\n }\n }\n}\n\nimpl Empty for StateReference {\n fn empty() -> Self {\n Self {\n l1_to_l2_message_tree: AppendOnlyTreeSnapshot::zero(),\n partial: PartialStateReference::empty(),\n }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let state: StateReference = dep::std::unsafe::zeroed();\n let _serialized = state.serialize();\n let _deserialized = StateReference::deserialize(_serialized);\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/state_reference.nr" }, "48": { "source": "use crate::{\n abis::{\n append_only_tree_snapshot::{AppendOnlyTreeSnapshot, APPEND_ONLY_TREE_SNAPSHOT_LENGTH},\n global_variables::{GlobalVariables, GLOBAL_VARIABLES_LENGTH}\n},\n constants::{GENERATOR_INDEX__BLOCK_HASH, HEADER_LENGTH, NUM_FIELDS_PER_SHA256, STATE_REFERENCE_LENGTH},\n hash::pedersen_hash, state_reference::StateReference, traits::{Deserialize, Empty, Hash, Serialize},\n utils::{arr_copy_slice}\n};\n\n// docs:start:header\nstruct Header {\n last_archive: AppendOnlyTreeSnapshot,\n body_hash: [Field; NUM_FIELDS_PER_SHA256],\n state: StateReference,\n global_variables: GlobalVariables,\n}\n// docs:end:header\n\nimpl Eq for Header {\n fn eq(self, other: Self) -> bool {\n self.last_archive.eq(other.last_archive) &\n (self.body_hash == other.body_hash) &\n self.state.eq(other.state) &\n self.global_variables.eq(other.global_variables)\n }\n}\n\nimpl Serialize<HEADER_LENGTH> for Header {\n fn serialize(self) -> [Field; HEADER_LENGTH] {\n let mut fields: BoundedVec<Field, HEADER_LENGTH> = BoundedVec::new(0);\n\n fields.extend_from_array(self.last_archive.serialize());\n fields.extend_from_array(self.body_hash);\n fields.extend_from_array(self.state.serialize());\n fields.extend_from_array(self.global_variables.serialize());\n\n fields.storage\n }\n}\n\nimpl Deserialize<HEADER_LENGTH> for Header {\n fn deserialize(serialized: [Field; HEADER_LENGTH]) -> Self {\n let mut offset = 0;\n\n let last_archive_fields = arr_copy_slice(serialized, [0; APPEND_ONLY_TREE_SNAPSHOT_LENGTH], offset);\n offset = offset + APPEND_ONLY_TREE_SNAPSHOT_LENGTH;\n\n let body_hash = arr_copy_slice(serialized, [0; NUM_FIELDS_PER_SHA256], offset);\n offset = offset + NUM_FIELDS_PER_SHA256;\n\n let state_fields = arr_copy_slice(serialized, [0; STATE_REFERENCE_LENGTH], offset);\n offset = offset + STATE_REFERENCE_LENGTH;\n\n let global_variables_fields = arr_copy_slice(serialized, [0; GLOBAL_VARIABLES_LENGTH], offset);\n\n Header {\n last_archive: AppendOnlyTreeSnapshot::deserialize(last_archive_fields),\n body_hash,\n state: StateReference::deserialize(state_fields),\n global_variables: GlobalVariables::deserialize(global_variables_fields),\n }\n }\n}\n\nimpl Empty for Header {\n fn empty() -> Self {\n Self {\n last_archive: AppendOnlyTreeSnapshot::zero(),\n body_hash: [0; NUM_FIELDS_PER_SHA256],\n state: StateReference::empty(),\n global_variables: GlobalVariables::empty(),\n }\n }\n}\n\nimpl Hash for Header {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__BLOCK_HASH)\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let header: Header = dep::std::unsafe::zeroed();\n let serialized = header.serialize();\n let deserialized = Header::deserialize(serialized);\n assert(header.eq(deserialized));\n}\n\n#[test]\nfn hash_smoke() {\n let header: Header = dep::std::unsafe::zeroed();\n let _hashed = header.hash();\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/header.nr" }, "49": { "source": "use crate::address::{AztecAddress, EthAddress};\nuse crate::mocked::VerificationKey;\nuse crate::abis::function_selector::FunctionSelector;\nuse crate::abis::function_leaf_preimage::{ContractClassFunctionLeafPreimage, FunctionLeafPreimage};\nuse crate::contract_class::ContractClassId;\nuse crate::abis::new_contract_data::NewContractData as ContractLeafPreimage;\nuse crate::abis::function_data::FunctionData;\nuse crate::abis::side_effect::{SideEffect};\nuse crate::utils::uint256::U256;\nuse crate::constants::{\n ARGS_HASH_CHUNK_COUNT, ARGS_HASH_CHUNK_LENGTH, CONTRACT_TREE_HEIGHT, FUNCTION_TREE_HEIGHT,\n NOTE_HASH_TREE_HEIGHT, NUM_FIELDS_PER_SHA256, GENERATOR_INDEX__SILOED_COMMITMENT,\n GENERATOR_INDEX__OUTER_NULLIFIER, GENERATOR_INDEX__VK, GENERATOR_INDEX__CONSTRUCTOR,\n GENERATOR_INDEX__PARTIAL_ADDRESS, GENERATOR_INDEX__CONTRACT_ADDRESS,\n GENERATOR_INDEX__COMMITMENT_NONCE, GENERATOR_INDEX__UNIQUE_COMMITMENT,\n GENERATOR_INDEX__FUNCTION_ARGS\n};\n\nuse dep::std::hash::{pedersen_hash_with_separator, sha256};\n\npub fn sha256_to_field<N>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = sha256(bytes_to_hash);\n\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (sha256_hashed[15 - i] as Field) * v;\n low = low + (sha256_hashed[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n let hash_in_a_field = low + high * v;\n\n hash_in_a_field\n}\n\npub fn hash_args<N>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n let mut chunks_hashes = [0; ARGS_HASH_CHUNK_COUNT];\n for i in 0..ARGS_HASH_CHUNK_COUNT {\n let mut chunk_hash = 0;\n let start_chunk_index = i * ARGS_HASH_CHUNK_LENGTH;\n if start_chunk_index < (args.len() as u32) {\n let mut chunk_args = [0; ARGS_HASH_CHUNK_LENGTH];\n for j in 0..ARGS_HASH_CHUNK_LENGTH {\n let item_index = i * ARGS_HASH_CHUNK_LENGTH + j;\n if item_index < (args.len() as u32) {\n chunk_args[j] = args[item_index];\n }\n }\n chunk_hash = pedersen_hash(chunk_args, GENERATOR_INDEX__FUNCTION_ARGS);\n }\n chunks_hashes[i] = chunk_hash;\n }\n pedersen_hash(chunks_hashes, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n// Checks that `value` is a member of a merkle tree with root `root` at position `index`\n// The witness being the `sibling_path`\npub fn assert_check_membership<N>(value: Field, index: Field, sibling_path: [Field; N], root: Field) {\n let calculated_root = root_from_sibling_path(value, index, sibling_path);\n assert(calculated_root == root, \"membership check failed\");\n}\n\n// Calculate the Merkle tree root from the sibling path and leaf.\n//\n// The leaf is hashed with its sibling, and then the result is hashed\n// with the next sibling etc in the path. The last hash is the root.\n//\n// TODO(David/Someone): The cpp code is using a uint256, whereas its\n// TODO a bit simpler in Noir to just have a bit array.\n// TODO: I'd generally like to avoid u256 for algorithms like \n// this because it means we never even need to consider cases where \n// the index is greater than p.\npub fn root_from_sibling_path<N>(leaf: Field, leaf_index: Field, sibling_path: [Field; N]) -> Field {\n let mut node = leaf;\n let indices = leaf_index.to_le_bits(N);\n\n for i in 0..N {\n let (hash_left, hash_right) = if indices[i] == 1 {\n (sibling_path[i], node)\n } else {\n (node, sibling_path[i])\n };\n node = merkle_hash(hash_left, hash_right);\n }\n node\n}\n\n// Calculate the function tree root from the sibling path and leaf preimage.\n//\n// TODO: The cpp code passes in components of the FunctionLeafPreimage and then \n// builds it up. We should build it up and then pass the leaf preimage as a parameter.\n// We can then choose to have a general method that takes in anything hashable\n// and deduplicate the logic in `contract_tree_root_from_siblings`\npub fn function_tree_root_from_siblings(\n selector: FunctionSelector,\n is_internal: bool,\n is_private: bool,\n vk_hash: Field,\n acir_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = FunctionLeafPreimage { selector, is_internal, is_private, vk_hash, acir_hash };\n\n let function_leaf = function_leaf_preimage.hash();\n\n let function_tree_root = root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path);\n\n function_tree_root\n}\n\n// Calculate the contract tree root from the sibling path and leaf preimage.\npub fn contract_tree_root_from_siblings(\n contract_class_id: ContractClassId,\n storage_contract_address: AztecAddress,\n portal_contract_address: EthAddress,\n contract_leaf_index: Field,\n contract_leaf_sibling_path: [Field; CONTRACT_TREE_HEIGHT]\n) -> Field {\n //TODO(Kev): if we use shorthand syntax here, we get an error as expected,\n // since variable name is `storage_contract_address` but the span is incorrect.\n let contract_leaf_preimage = ContractLeafPreimage { contract_address: storage_contract_address, portal_contract_address, contract_class_id };\n\n let contract_leaf = contract_leaf_preimage.hash();\n\n let computed_contract_tree_root = root_from_sibling_path(contract_leaf, contract_leaf_index, contract_leaf_sibling_path);\n\n computed_contract_tree_root\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\npub fn read_request_root_from_siblings(\n read_request: Field,\n leaf_index: Field,\n sibling_path: [Field; NOTE_HASH_TREE_HEIGHT]\n) -> Field {\n root_from_sibling_path(read_request, leaf_index, sibling_path)\n}\n\npub fn silo_commitment(address: AztecAddress, inner_commitment: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n inner_commitment\n ],\n GENERATOR_INDEX__SILOED_COMMITMENT\n )\n}\n\npub fn silo_nullifier(address: AztecAddress, nullifier: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\nfn merkle_hash(left: Field, right: Field) -> Field {\n pedersen_hash([left, right], 0)\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\n// TODO CPP uses blake2s for this\npub fn compute_new_contract_address_hash(new_contract_address: AztecAddress) -> Field {\n dep::std::hash::pedersen_hash([new_contract_address.to_field()])\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n rollup_version_id: Field,\n portal_contract_address: EthAddress,\n chain_id: Field,\n content: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new(0);\n\n let inputs = [\n contract_address.to_field(), rollup_version_id, portal_contract_address.to_field(), chain_id, content\n ];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes = inputs[i].to_be_bytes(32);\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\npub fn compute_constructor_hash(\n function_data: FunctionData,\n args_hash: Field,\n constructor_vk_hash: Field\n) -> Field {\n let function_data_hash = function_data.hash();\n\n pedersen_hash(\n [\n function_data_hash,\n args_hash,\n constructor_vk_hash\n ],\n GENERATOR_INDEX__CONSTRUCTOR\n )\n}\n\n// Computes sha256 hash of 2 input hashes stored in 4 fields.\n// \n// This method is bn254 specific. Two fields is needed in order to \n// encode the sha256 output. It can be abstracted away with any 4-2 hash function.\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\n// Returning a Field would be desirable because then this can be replaced with \n// poseidon without changing the rest of the code\n//\npub fn accumulate_sha256(input: [U128; 4]) -> [Field; NUM_FIELDS_PER_SHA256] {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually \n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field \n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n //\n // Concatenate 4 u128 bit integers into a byte array.\n let mut hash_input_flattened = [0; 64];\n for offset in 0..4 {\n let input_as_bytes = input[offset].to_be_bytes();\n for byte_index in 0..16 {\n hash_input_flattened[offset * 16 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n let sha_digest = dep::std::hash::sha256(hash_input_flattened);\n\n U256::from_bytes32(sha_digest).to_u128_limbs()\n}\n\npub fn compute_logs_hash(\n previous_log_hash: [Field; 2],\n current_log_hash: [Field; 2]\n) -> [Field; NUM_FIELDS_PER_SHA256] {\n accumulate_sha256(\n [\n U128::from_integer(previous_log_hash[0]),\n U128::from_integer(previous_log_hash[1]),\n U128::from_integer(current_log_hash[0]),\n U128::from_integer(current_log_hash[1])\n ]\n )\n}\n\npub fn compute_commitment_nonce(first_nullifier: Field, commitment_index: Field) -> Field {\n pedersen_hash(\n [\n first_nullifier,\n commitment_index\n ],\n GENERATOR_INDEX__COMMITMENT_NONCE\n )\n}\n\npub fn compute_unique_siloed_commitment(nonce: Field, siloed_commitment: Field) -> Field {\n pedersen_hash(\n [\n nonce,\n siloed_commitment\n ],\n GENERATOR_INDEX__UNIQUE_COMMITMENT\n )\n}\n\npub fn compute_unique_siloed_commitments<N>(\n first_nullifier: Field,\n siloed_commitments: [SideEffect; N]\n) -> [SideEffect; N] {\n let mut unique_siloed_commitments = [SideEffect::empty(); N];\n for i in 0..N {\n let siloed_commitment = siloed_commitments[i];\n if siloed_commitment.value != 0 {\n let nonce = compute_commitment_nonce(first_nullifier, i);\n unique_siloed_commitments[i] = SideEffect {\n value: compute_unique_siloed_commitment(nonce, siloed_commitment.value),\n counter: siloed_commitment.counter\n };\n }\n }\n unique_siloed_commitments\n}\n\npub fn pedersen_hash<N>(inputs: [Field; N], hash_index: u32) -> Field {\n dep::std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/hash.nr" }, "66": { "source": "use crate::{\n constants::{GENERATOR_INDEX__CONTRACT_ADDRESS, GENERATOR_INDEX__PARTIAL_ADDRESS, GENERATOR_INDEX__CONSTRUCTOR},\n hash::pedersen_hash, contract_class::ContractClassId, utils, grumpkin_point::GrumpkinPoint\n};\nuse dep::std::cmp::Eq;\nuse crate::traits::{Empty, ToField, Serialize, Deserialize};\nuse crate::type_serialization::{ETH_ADDRESS_SERIALIZED_LEN, AZTEC_ADDRESS_SERIALIZED_LEN};\n\n// Aztec address\nstruct AztecAddress {\n inner : Field\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other : Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self {\n inner : 0\n }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_SERIALIZED_LEN> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_SERIALIZED_LEN] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_SERIALIZED_LEN> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_SERIALIZED_LEN]) -> Self {\n AztecAddress::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute_from_public_key(\n pub_key: GrumpkinPoint,\n contract_class_id: ContractClassId,\n salt: Field,\n initialization_hash: Field,\n portal_contract_address: EthAddress\n ) -> AztecAddress {\n AztecAddress::compute(\n PublicKeysHash::compute(pub_key),\n PartialAddress::compute(\n contract_class_id,\n salt,\n initialization_hash,\n portal_contract_address\n )\n )\n }\n\n pub fn compute(pub_keys_hash: PublicKeysHash, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n pedersen_hash(\n [pub_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS\n )\n )\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n\nstruct EthAddress{\n inner : Field\n}\n\nimpl Eq for EthAddress {\n fn eq(self, other : Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for EthAddress {\n fn empty() -> Self {\n Self {\n inner : 0\n }\n }\n}\n\nimpl ToField for EthAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<ETH_ADDRESS_SERIALIZED_LEN> for EthAddress {\n fn serialize(self: Self) -> [Field; ETH_ADDRESS_SERIALIZED_LEN] {\n [self.inner]\n }\n}\n\nimpl Deserialize<ETH_ADDRESS_SERIALIZED_LEN> for EthAddress {\n fn deserialize(fields: [Field; ETH_ADDRESS_SERIALIZED_LEN]) -> Self {\n Self {\n inner: fields[0]\n }\n }\n}\n\nimpl EthAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n\n// Partial address\nstruct PartialAddress {\n inner : Field\n}\n\nimpl ToField for PartialAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl PartialAddress {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(\n contract_class_id: ContractClassId,\n salt: Field,\n initialization_hash: Field,\n portal_contract_address: EthAddress\n ) -> Self {\n PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n SaltedInitializationHash::compute(salt, initialization_hash, portal_contract_address)\n )\n }\n\n pub fn compute_from_salted_initialization_hash(\n contract_class_id: ContractClassId,\n salted_initialization_hash: SaltedInitializationHash\n ) -> Self {\n PartialAddress::from_field(\n pedersen_hash(\n [\n contract_class_id.to_field(),\n salted_initialization_hash.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n\n// Salted initialization hash. Used in the computation of a partial address.\nstruct SaltedInitializationHash {\n inner: Field\n}\n\nimpl ToField for SaltedInitializationHash {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl SaltedInitializationHash {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(salt: Field, initialization_hash: Field, portal_contract_address: EthAddress) -> Self {\n SaltedInitializationHash::from_field(\n pedersen_hash(\n [\n salt,\n initialization_hash,\n portal_contract_address.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n\n// Public keys hash. Used in the computation of an address.\nstruct PublicKeysHash {\n inner: Field\n}\n\nimpl ToField for PublicKeysHash {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<1> for PublicKeysHash {\n fn serialize(self: Self) -> [Field; 1] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<1> for PublicKeysHash {\n fn deserialize(fields: [Field; 1]) -> Self {\n PublicKeysHash::from_field(fields[0])\n }\n}\n\nimpl PublicKeysHash {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(public_key: GrumpkinPoint) -> Self {\n PublicKeysHash::from_field(\n pedersen_hash(\n [\n public_key.x,\n public_key.y\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n\npub fn compute_initialization_hash(selector: Field, args_hash: Field) -> Field {\n pedersen_hash(\n [\n selector,\n args_hash\n ],\n GENERATOR_INDEX__CONSTRUCTOR\n )\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/address.nr" }, "73": { "source": "use crate::{\n constants::{CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH, GENERATOR_INDEX__PUBLIC_DATA_UPDATE_REQUEST},\n hash::pedersen_hash, traits::{Deserialize, Hash, Empty, Serialize}\n};\nuse dep::std::cmp::Eq;\n\nstruct StorageUpdateRequest{\n storage_slot : Field,\n new_value : Field,\n}\n\nimpl Eq for StorageUpdateRequest {\n fn eq(self, request: Self) -> bool {\n (request.storage_slot == self.storage_slot)\n & (request.new_value == self.new_value)\n }\n}\n\nimpl Empty for StorageUpdateRequest {\n fn empty() -> Self {\n StorageUpdateRequest {\n storage_slot: 0,\n new_value: 0,\n }\n }\n}\n\nimpl Hash for StorageUpdateRequest {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__PUBLIC_DATA_UPDATE_REQUEST)\n }\n}\n\nimpl Serialize<CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH> for StorageUpdateRequest {\n fn serialize(self) -> [Field; CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH] {\n [self.storage_slot, self.new_value]\n }\n}\n\nimpl Deserialize<CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH> for StorageUpdateRequest {\n fn deserialize(serialized: [Field; CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH]) -> Self {\n StorageUpdateRequest {\n storage_slot: serialized[0],\n new_value: serialized[1],\n }\n }\n}\n\nimpl StorageUpdateRequest {\n pub fn is_empty(self) -> bool {\n self.storage_slot == 0\n }\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/contrakt/storage_update_request.nr" }, "74": { "source": "use crate::{\n constants::{CONTRACT_STORAGE_READ_LENGTH, GENERATOR_INDEX__PUBLIC_DATA_READ}, hash::pedersen_hash,\n traits::{Deserialize, Hash, Empty, Serialize}\n};\n\nstruct StorageRead {\n storage_slot: Field,\n current_value: Field,\n}\n\nimpl Eq for StorageRead {\n fn eq(self, other: Self) -> bool {\n (self.storage_slot == other.storage_slot) & (self.current_value == other.current_value)\n }\n}\n\nimpl Empty for StorageRead { \n fn empty() -> Self {\n Self {\n storage_slot: 0,\n current_value: 0,\n }\n }\n}\n\nimpl Hash for StorageRead {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__PUBLIC_DATA_READ)\n }\n}\n\nimpl Serialize<CONTRACT_STORAGE_READ_LENGTH> for StorageRead {\n fn serialize(self) -> [Field; CONTRACT_STORAGE_READ_LENGTH] {\n [self.storage_slot, self.current_value]\n }\n}\n\nimpl Deserialize<CONTRACT_STORAGE_READ_LENGTH> for StorageRead {\n fn deserialize(serialized: [Field; CONTRACT_STORAGE_READ_LENGTH]) -> Self {\n Self {\n storage_slot: serialized[0],\n current_value: serialized[1],\n }\n }\n}\n\nimpl StorageRead {\n pub fn is_empty(self) -> bool {\n self.storage_slot == 0\n }\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/contrakt/storage_read.nr" }, "76": { "source": "use dep::std::cmp::Eq;\n\n// Trait: is_empty\n//\n// The general is_empty trait checks if a data type is is empty,\n// and it defines empty for the basic data types as 0.\n//\n// If a Field is equal to zero, then it is regarded as zero.\n// We will go with this definition for now, however it can be problematic \n// if a value can actually be zero. In a future refactor, we can \n// use the optional type for safety. Doing it now would lead to a worse devex\n// and would make it harder to sync up with the cpp code.\n// Preferred over Default trait to convey intent, as default doesn't necessarily mean empty.\ntrait Empty {\n fn empty() -> Self;\n}\n\nimpl Empty for Field { fn empty() -> Self {0} }\n\nimpl Empty for u1 { fn empty() -> Self {0} }\nimpl Empty for u8 { fn empty() -> Self {0} }\nimpl Empty for u16 { fn empty() -> Self {0} }\nimpl Empty for u32 { fn empty() -> Self {0} }\nimpl Empty for u64 { fn empty() -> Self {0} }\n\npub fn is_empty<T>(item: T) -> bool where T: Empty + Eq {\n item.eq(T::empty())\n}\n\npub fn is_empty_array<T, N>(array: [T; N]) -> bool where T: Empty + Eq {\n array.all(|elem| is_empty(elem))\n}\n\ntrait Hash {\n fn hash(self) -> Field;\n}\n\ntrait ToField {\n fn to_field(self) -> Field;\n}\n\nimpl ToField for Field {\n fn to_field(self) -> Field {\n self\n }\n}\n\n// docs:start:serialize\ntrait Serialize<N> {\n fn serialize(self) -> [Field; N];\n}\n// docs:end:serialize\n\n// docs:start:deserialize\ntrait Deserialize<N> {\n fn deserialize(fields: [Field; N]) -> Self;\n}\n// docs:end:deserialize", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/traits.nr" }, "79": { "source": "use dep::std::array;\nuse dep::std::cmp::Eq;\nuse crate::traits::{Empty, is_empty};\n\npub fn array_to_bounded_vec<T, N>(array: [T; N]) -> BoundedVec<T, N> where T: Empty + Eq {\n let mut len = 0;\n for elem in array {\n if !is_empty(elem) {\n len += 1;\n }\n }\n\n BoundedVec { storage: array, len, empty_value: T::empty() }\n}\n\n// Routine which validates that all zero values of an array form a contiguous region at the end, i.e.,\n// of the form: [*,*,*...,0,0,0,0] where any * is non-zero. Note that a full array of non-zero values is\n// valid.\npub fn validate_array<T, N>(array: [T; N]) where T: Empty + Eq {\n let array_length = array.len();\n\n let mut first_zero_pos = array_length;\n let mut last_non_zero_pos = 0;\n\n for i in 0..array_length {\n let is_empty = is_empty(array[i]);\n if !is_empty {\n last_non_zero_pos = i;\n } else if is_empty & (first_zero_pos == array_length) {\n first_zero_pos = i;\n }\n }\n assert((last_non_zero_pos as u64) <= (first_zero_pos as u64), \"invalid array\");\n}\n\n// Helper method to determine the number of non-zero/empty elements in a validated array (ie, validate_array(array) \n// should be true).\npub fn array_length<T, N>(array: [T; N]) -> Field where T: Empty + Eq {\n let mut length = 0;\n let mut end = false;\n for elem in array {\n end |= is_empty(elem);\n if !end {\n length += 1;\n }\n }\n length\n}\n\npub fn array_eq<T, N, S>(array: [T; N], expected: [T; S]) -> bool where T: Empty + Eq {\n let mut eq = array_length(array) == S;\n\n for i in 0..S {\n eq &= array[i].eq(expected[i]);\n }\n\n eq\n}\n\n#[test]\nfn smoke_validate_array() {\n let valid_array = [];\n validate_array(valid_array);\n\n let valid_array = [0];\n validate_array(valid_array);\n\n let valid_array = [1, 2, 3];\n validate_array(valid_array);\n\n let valid_array = [1, 2, 3, 0];\n validate_array(valid_array);\n\n let valid_array = [1, 2, 3, 0, 0];\n validate_array(valid_array);\n}\n\n#[test(should_fail_with = \"invalid array\")]\nfn smoke_validate_array_invalid() {\n let invalid_array = [0, 1];\n validate_array(invalid_array);\n}\n\n#[test(should_fail_with = \"invalid array\")]\nfn smoke_validate_array_invalid_case2() {\n let invalid_array = [0, 0, 0, 0, 1];\n validate_array(invalid_array);\n}\n\n#[test]\nfn test_empty_array_length() {\n assert_eq(array_length([]), 0);\n assert_eq(array_length([0]), 0);\n assert_eq(array_length([0, 0, 0]), 0);\n}\n\n#[test]\nfn test_array_length() {\n assert_eq(array_length([123]), 1);\n assert_eq(array_length([123, 456]), 2);\n assert_eq(array_length([123, 456, 0]), 2);\n assert_eq(array_length([123, 0, 456]), 1);\n assert_eq(array_length([0, 123, 0, 456]), 0);\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/utils/arrays.nr" }, "81": { "source": "// This is a quick struct made to pack 32 bytes into 4 u64s\n// and then pack those into two u128s.\n//\n// Creating a u256 was made for convenience.\n//\n// This is needed because in the cpp code, we have accumulate_sha256\n// which returns 2 field elements, one for the high and low limb.\nstruct U256 {\n // This is in big-endian order, typically because\n // sha256 is usually in big endian order.\n // Note: this means that inner[0] has the most significant 64 bits.\n inner : [u64; 4]\n}\n\nimpl U256 {\n pub fn from_bytes32(bytes: [u8; 32]) -> U256 {\n // We use addition rather than a bitwise OR as the bitshifts ensure that none of the bytes overlap each other.\n let high_0 = ((bytes[0] as u64) << 56)\n + ((bytes[1] as u64) << 48)\n + ((bytes[2] as u64) << 40)\n + ((bytes[3] as u64) << 32)\n + ((bytes[4] as u64) << 24)\n + ((bytes[5] as u64) << 16)\n + ((bytes[6] as u64) << 8)\n + (bytes[7] as u64);\n\n let high_1 = ((bytes[8] as u64) << 56)\n + ((bytes[9] as u64) << 48)\n + ((bytes[10] as u64) << 40)\n + ((bytes[11] as u64) << 32)\n + ((bytes[12] as u64) << 24)\n + ((bytes[13] as u64) << 16)\n + ((bytes[14] as u64) << 8)\n + (bytes[15] as u64);\n\n let low_0 = ((bytes[16] as u64) << 56)\n + ((bytes[17] as u64) << 48)\n + ((bytes[18] as u64) << 40)\n + ((bytes[19] as u64) << 32)\n + ((bytes[20] as u64) << 24)\n + ((bytes[21] as u64) << 16)\n + ((bytes[22] as u64) << 8)\n + (bytes[23] as u64);\n\n let low_1 = ((bytes[24] as u64) << 56)\n + ((bytes[25] as u64) << 48)\n + ((bytes[26] as u64) << 40)\n + ((bytes[27] as u64) << 32)\n + ((bytes[28] as u64) << 24)\n + ((bytes[29] as u64) << 16)\n + ((bytes[30] as u64) << 8)\n + (bytes[31] as u64);\n\n U256 { inner: [high_0, high_1, low_0, low_1] }\n }\n\n // We cannot represent u128 in the type system\n // so we cannot return a u128 type.\n // \n // This as conversion assumes that Field can store 128 bits of information\n // or else the conversion is lossy.\n //\n // TODO: Add a test for this.\n pub fn to_u128_limbs(self) -> [Field; 2] {\n let two_pow_64 = 2.pow_32(64);\n\n let high = (self.inner[0] as Field) * two_pow_64 + self.inner[1] as Field;\n let low = (self.inner[2] as Field) * two_pow_64 + self.inner[3] as Field;\n\n [high, low]\n }\n}\n\n#[test]\nfn smoke_u256_from_bytes32_all_zeroes() {\n let input = [0; 32];\n let result = U256::from_bytes32(input);\n assert(result.inner[0] == 0);\n assert(result.inner[1] == 0);\n assert(result.inner[2] == 0);\n assert(result.inner[3] == 0);\n}\n\n#[test]\nfn smoke_u256_from_bytes32_one_zero_zero_zero() {\n // We want to output [1,0,0,0]\n let input = [\n 0, 0, 0, 0, 0, 0, 0, 1,\n 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0\n ];\n let result = U256::from_bytes32(input);\n\n assert(result.inner[0] == 1);\n assert(result.inner[1] == 0);\n assert(result.inner[2] == 0);\n assert(result.inner[3] == 0);\n}\n\n#[test]\nfn smoke_u256_from_bytes32_test() {\n /*\n input: [ 0xAA, 0xBB, 0xCC, 0xDD, \n 0xEE, 0xFF, 0x00, 0x11, \n 0x22, 0x33, 0x44, 0x55, \n 0x66, 0x77, 0x88, 0x99, \n 0x11, 0x22, 0x33, 0x44, \n 0x55, 0x66, 0x77, 0x88, \n 0x99, 0xAA, 0xBB, 0xCC, \n 0xDD, 0xEE, 0xFF, 0x00\n ]\n output: inner[0]: 0xAABBCCDDEEFF0011\n inner[1]: 0x2233445566778899\n inner[2]: 0x1122334455667788\n inner[3]: 0x99AABBCCDDEEFF00\n */\n let input : [u8;32] = [\n 0xAA, 0xBB, 0xCC, 0xDD,\n 0xEE, 0xFF, 0x00, 0x11,\n 0x22, 0x33, 0x44, 0x55,\n 0x66, 0x77, 0x88, 0x99,\n 0x11, 0x22, 0x33, 0x44,\n 0x55, 0x66, 0x77, 0x88,\n 0x99, 0xAA, 0xBB, 0xCC,\n 0xDD, 0xEE, 0xFF, 0x00\n ];\n let result = U256::from_bytes32(input);\n\n assert(result.inner[0] == 0xAABBCCDDEEFF0011);\n assert(result.inner[1] == 0x2233445566778899);\n assert(result.inner[2] == 0x1122334455667788);\n assert(result.inner[3] == 0x99AABBCCDDEEFF00);\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/utils/uint256.nr" }, "85": { "source": "use crate::constants::{GENERATOR_INDEX__SIDE_EFFECT};\nuse dep::std::cmp::Eq;\nuse crate::traits::{Empty, Hash, Serialize, Deserialize};\n\ntrait Ordered {\n fn counter(self) -> u32;\n}\n\nstruct SideEffect{\n value: Field,\n counter: u32,\n}\n\nimpl Ordered for SideEffect {\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl Eq for SideEffect {\n fn eq(self, side_effect: SideEffect) -> bool {\n (self.value == side_effect.value)\n & (self.counter == side_effect.counter)\n }\n}\n\nimpl Empty for SideEffect {\n fn empty() -> Self {\n SideEffect {\n value: 0,\n counter: 0,\n }\n }\n}\n\nimpl Hash for SideEffect {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator(\n self.serialize() , GENERATOR_INDEX__SIDE_EFFECT)\n }\n}\n\nimpl Serialize<2> for SideEffect {\n fn serialize(self) -> [Field; 2] {\n [self.value, self.counter as Field]\n }\n}\n\nimpl Deserialize<2> for SideEffect {\n fn deserialize(values: [Field; 2]) -> Self {\n Self {\n value: values[0],\n counter: values[1] as u32,\n }\n }\n}\n\nstruct SideEffectLinkedToNoteHash{\n value: Field,\n note_hash: Field,\n counter: u32,\n}\n\nimpl Ordered for SideEffectLinkedToNoteHash {\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl Eq for SideEffectLinkedToNoteHash {\n fn eq(self, side_effect: SideEffectLinkedToNoteHash) -> bool {\n (self.value == side_effect.value)\n & (self.note_hash == side_effect.note_hash) \n & (self.counter == side_effect.counter)\n }\n}\n\nimpl Empty for SideEffectLinkedToNoteHash {\n fn empty() -> Self {\n SideEffectLinkedToNoteHash {\n value: 0,\n note_hash: 0,\n counter: 0,\n }\n }\n}\n\nimpl Hash for SideEffectLinkedToNoteHash {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator(\n self.serialize(),\n GENERATOR_INDEX__SIDE_EFFECT)\n }\n}\n\nimpl Serialize<3> for SideEffectLinkedToNoteHash {\n fn serialize(self) -> [Field; 3] {\n [self.value, self.note_hash, self.counter as Field]\n }\n}\n\nimpl Deserialize<3> for SideEffectLinkedToNoteHash {\n fn deserialize(values: [Field; 3]) -> Self {\n Self {\n value: values[0],\n note_hash: values[1],\n counter: values[2] as u32,\n }\n }\n}\n\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/abis/side_effect.nr" }, "88": { "source": "use crate::abis::{function_data::FunctionData, public_circuit_public_inputs::PublicCircuitPublicInputs};\nuse crate::address::AztecAddress;\nuse crate::constants::GENERATOR_INDEX__CALL_STACK_ITEM;\nuse crate::traits::Hash;\n\nstruct PublicCallStackItem {\n contract_address: AztecAddress,\n public_inputs: PublicCircuitPublicInputs,\n function_data: FunctionData,\n // True if this call stack item represents a request to execute a function rather than a\n // fulfilled execution. Used when enqueuing calls from private to public functions.\n is_execution_request: bool,\n}\n\nimpl Hash for PublicCallStackItem {\n fn hash(self) -> Field {\n let item = if self.is_execution_request {\n self.as_execution_request()\n } else {\n self\n };\n\n dep::std::hash::pedersen_hash_with_separator([\n item.contract_address.to_field(),\n item.function_data.hash(),\n item.public_inputs.hash(),\n ], GENERATOR_INDEX__CALL_STACK_ITEM)\n }\n}\n\nimpl PublicCallStackItem {\n fn as_execution_request(self) -> Self {\n let public_inputs = self.public_inputs;\n let mut request_public_inputs: PublicCircuitPublicInputs = dep::std::unsafe::zeroed();\n request_public_inputs.call_context = public_inputs.call_context;\n request_public_inputs.args_hash = public_inputs.args_hash;\n\n let call_stack_item = PublicCallStackItem {\n contract_address: self.contract_address,\n function_data: self.function_data,\n is_execution_request: true,\n public_inputs: request_public_inputs\n };\n call_stack_item\n }\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/abis/public_call_stack_item.nr" }, "89": { "source": "use crate::constants::GENERATOR_INDEX__PUBLIC_DATA_UPDATE_REQUEST;\nuse dep::std::cmp::Eq;\nuse crate::traits::{Empty, Hash};\n\nstruct PublicDataUpdateRequest {\n leaf_slot : Field,\n new_value : Field\n}\n\nimpl Eq for PublicDataUpdateRequest {\n fn eq(self, update_request: PublicDataUpdateRequest) -> bool {\n (update_request.leaf_slot == self.leaf_slot)\n & (update_request.new_value == self.new_value)\n }\n}\n\nimpl Empty for PublicDataUpdateRequest {\n fn empty() -> Self {\n Self {\n leaf_slot : 0,\n new_value : 0\n }\n }\n}\n\nimpl Hash for PublicDataUpdateRequest {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator([\n self.leaf_slot,\n self.new_value\n ], GENERATOR_INDEX__PUBLIC_DATA_UPDATE_REQUEST)\n }\n}\n\nimpl PublicDataUpdateRequest {\n pub fn is_empty(self) -> bool {\n (self.leaf_slot == 0) & (self.new_value == 0)\n }\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/abis/public_data_update_request.nr" }, "90": { "source": "use crate::{\n abis::{call_context::CallContext, side_effect::{SideEffect, SideEffectLinkedToNoteHash}},\n address::AztecAddress,\n constants::{\n MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_NULLIFIERS_PER_CALL, MAX_NEW_COMMITMENTS_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL,\n MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, NUM_FIELDS_PER_SHA256, RETURN_VALUES_LENGTH,\n GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS, PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH\n},\n contrakt::{storage_read::StorageRead, storage_update_request::StorageUpdateRequest},\n hash::pedersen_hash, header::Header, traits::{Hash, Serialize, Deserialize}, utils::reader::Reader\n};\n\nstruct PublicCircuitPublicInputs{\n call_context: CallContext,\n\n args_hash: Field,\n return_values: [Field; RETURN_VALUES_LENGTH],\n\n contract_storage_update_requests: [StorageUpdateRequest; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL],\n contract_storage_reads: [StorageRead; MAX_PUBLIC_DATA_READS_PER_CALL],\n\n // todo: add sideeffect ranges for the input to these hashes\n public_call_stack_hashes: [Field; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_commitments: [SideEffect; MAX_NEW_COMMITMENTS_PER_CALL],\n new_nullifiers: [SideEffectLinkedToNoteHash; MAX_NEW_NULLIFIERS_PER_CALL],\n new_l2_to_l1_msgs: [Field; MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n\n unencrypted_logs_hash: [Field; NUM_FIELDS_PER_SHA256],\n\n // Here so that the gas cost of this request can be measured by circuits, without actually needing to feed in the\n // variable-length data.\n unencrypted_log_preimages_length: Field,\n\n // Header of a block whose state is used during public execution. Set by sequencer to be a header of a block\n // previous to the one in which the tx is included.\n historical_header: Header,\n\n prover_address: AztecAddress,\n}\n\nimpl Eq for PublicCircuitPublicInputs {\n fn eq(self, other: Self) -> bool {\n self.serialize() == other.serialize()\n }\n}\n\nimpl Serialize<PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH> for PublicCircuitPublicInputs {\n fn serialize(self) -> [Field; PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH] {\n let mut fields: BoundedVec<Field, PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH> = BoundedVec::new(0); \n fields.extend_from_array(self.call_context.serialize()); \n fields.push(self.args_hash);\n fields.extend_from_array(self.return_values);\n for i in 0..MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL {\n fields.extend_from_array(self.contract_storage_update_requests[i].serialize());\n }\n for i in 0..MAX_PUBLIC_DATA_READS_PER_CALL {\n fields.extend_from_array(self.contract_storage_reads[i].serialize());\n }\n fields.extend_from_array(self.public_call_stack_hashes);\n\n for i in 0..MAX_NEW_COMMITMENTS_PER_CALL{\n fields.extend_from_array(self.new_commitments[i].serialize());\n }\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL{\n fields.extend_from_array(self.new_nullifiers[i].serialize());\n }\n fields.extend_from_array(self.new_l2_to_l1_msgs);\n fields.extend_from_array(self.unencrypted_logs_hash);\n fields.push(self.unencrypted_log_preimages_length);\n fields.extend_from_array(self.historical_header.serialize());\n fields.push(self.prover_address.to_field());\n fields.storage\n }\n}\n\nimpl Deserialize<PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH> for PublicCircuitPublicInputs {\n fn deserialize(serialized: [Field; PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH]) -> Self {\n // TODO(#4390): This should accept a reader ^ to avoid copying data.\n let mut reader = Reader::new(serialized);\n let inputs = PublicCircuitPublicInputs {\n call_context: reader.read_struct(CallContext::deserialize),\n args_hash: reader.read(),\n return_values: reader.read_array([0; RETURN_VALUES_LENGTH]),\n contract_storage_update_requests: reader.read_struct_array(StorageUpdateRequest::deserialize, [StorageUpdateRequest::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL]),\n contract_storage_reads: reader.read_struct_array(StorageRead::deserialize, [StorageRead::empty(); MAX_PUBLIC_DATA_READS_PER_CALL]),\n public_call_stack_hashes: reader.read_array([0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL]),\n new_commitments: reader.read_struct_array(SideEffect::deserialize, [SideEffect::empty(); MAX_NEW_COMMITMENTS_PER_CALL]),\n new_nullifiers: reader.read_struct_array(SideEffectLinkedToNoteHash::deserialize, [SideEffectLinkedToNoteHash::empty(); MAX_NEW_NULLIFIERS_PER_CALL]),\n new_l2_to_l1_msgs: reader.read_array([0; MAX_NEW_L2_TO_L1_MSGS_PER_CALL]),\n unencrypted_logs_hash: reader.read_array([0; NUM_FIELDS_PER_SHA256]),\n unencrypted_log_preimages_length: reader.read(),\n historical_header: reader.read_struct(Header::deserialize),\n prover_address: reader.read_struct(AztecAddress::deserialize),\n };\n\n reader.finish();\n inputs\n }\n}\n\nimpl Hash for PublicCircuitPublicInputs {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS)\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let pcpi: PublicCircuitPublicInputs = dep::std::unsafe::zeroed();\n let serialized = pcpi.serialize();\n let deserialized = PublicCircuitPublicInputs::deserialize(serialized);\n assert(pcpi.eq(deserialized));\n}\n\n#[test]\nfn hash_smoke() {\n let pcpi: PublicCircuitPublicInputs = dep::std::unsafe::zeroed();\n let _hashed = pcpi.hash();\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/abis/public_circuit_public_inputs.nr" }, "96": { "source": "use crate::{\n abis::function_selector::FunctionSelector,\n constants::{GENERATOR_INDEX__FUNCTION_DATA, FUNCTION_DATA_LENGTH}, hash::pedersen_hash,\n traits::{Serialize, Hash, Deserialize}\n};\n\nstruct FunctionData {\n // First four bytes of the abi encoding \n // of a function. \n selector : FunctionSelector,\n is_internal : bool,\n is_private : bool,\n is_constructor : bool,\n}\n\nimpl Eq for FunctionData {\n fn eq(self, other: Self) -> bool {\n self.selector.eq(other.selector) &\n self.is_internal == other.is_internal &\n self.is_private == other.is_private &\n self.is_constructor == other.is_constructor\n }\n}\n\nimpl Serialize<FUNCTION_DATA_LENGTH> for FunctionData {\n // A field is ~256 bits\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3057): Since, function data can fit into a Field,\n // This method will simply return a bit packed Field instead of hashing\n fn serialize(self) -> [Field; FUNCTION_DATA_LENGTH] {\n [\n self.selector.to_field(),\n self.is_internal as Field,\n self.is_private as Field,\n self.is_constructor as Field,\n ]\n }\n}\n\nimpl Deserialize<FUNCTION_DATA_LENGTH> for FunctionData {\n fn deserialize(serialized: [Field; FUNCTION_DATA_LENGTH]) -> Self {\n Self {\n selector: FunctionSelector::from_field(serialized[0]),\n is_internal: serialized[1] as bool,\n is_private: serialized[2] as bool,\n is_constructor: serialized[3] as bool,\n }\n }\n}\n\nimpl Hash for FunctionData {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__FUNCTION_DATA)\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let data: FunctionData = dep::std::unsafe::zeroed();\n let serialized = data.serialize();\n let deserialized = FunctionData::deserialize(serialized);\n assert(data.eq(deserialized));\n}\n\n#[test]\nfn empty_hash() {\n let data: FunctionData = dep::std::unsafe::zeroed();\n let hash = data.hash();\n\n // Value from function_data.test.ts \"computes empty item hash\" test\n assert_eq(hash, 0x200569267c0f73ac89aaa414239398db9445dd4ad3a8cf37015cd55b8d4c5e8d);\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/abis/function_data.nr" }, "97": { "source": "use dep::std::cmp::Eq;\n\nstruct AppendOnlyTreeSnapshot {\n root : Field,\n next_available_leaf_index : u32\n}\n\nglobal APPEND_ONLY_TREE_SNAPSHOT_LENGTH: Field = 2;\n\nimpl AppendOnlyTreeSnapshot {\n pub fn serialize(self) -> [Field; APPEND_ONLY_TREE_SNAPSHOT_LENGTH] {\n [self.root, self.next_available_leaf_index as Field]\n }\n\n pub fn deserialize(serialized: [Field; APPEND_ONLY_TREE_SNAPSHOT_LENGTH]) -> AppendOnlyTreeSnapshot {\n AppendOnlyTreeSnapshot { root: serialized[0], next_available_leaf_index: serialized[1] as u32 }\n }\n\n pub fn zero() -> Self {\n Self { root: 0, next_available_leaf_index: 0 }\n }\n}\n\nimpl Eq for AppendOnlyTreeSnapshot {\n fn eq(self, other : AppendOnlyTreeSnapshot) -> bool {\n (self.root == other.root) & (self.next_available_leaf_index == other.next_available_leaf_index)\n }\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/abis/append_only_tree_snapshot.nr" }, "100": { "source": "use crate::address::AztecAddress;\nuse dep::std::cmp::Eq;\nuse crate::traits::Empty;\n\nstruct CallerContext {\n msg_sender: AztecAddress,\n storage_contract_address: AztecAddress,\n}\n\nimpl Eq for CallerContext {\n fn eq(self, caller_context: CallerContext) -> bool {\n caller_context.msg_sender.eq(self.msg_sender)\n & caller_context.storage_contract_address.eq(self.storage_contract_address)\n }\n}\n\nimpl Empty for CallerContext {\n fn empty() -> Self {\n CallerContext {\n msg_sender: AztecAddress::zero(),\n storage_contract_address: AztecAddress::zero(),\n }\n }\n}\n\nimpl CallerContext {\n pub fn is_empty(self) -> bool {\n self.msg_sender.is_zero() & self.storage_contract_address.is_zero()\n }\n}\n\nstruct CallRequest {\n hash: Field,\n caller_contract_address: AztecAddress,\n caller_context: CallerContext,\n start_side_effect_counter: u32,\n end_side_effect_counter: u32,\n}\n\nimpl Eq for CallRequest {\n fn eq(self, call_request: CallRequest) -> bool {\n (call_request.hash == self.hash)\n & (call_request.caller_contract_address.eq(self.caller_contract_address))\n & (call_request.caller_context.eq(self.caller_context))\n & (call_request.start_side_effect_counter == self.start_side_effect_counter)\n & (call_request.end_side_effect_counter == self.end_side_effect_counter)\n }\n}\n\nimpl Empty for CallRequest {\n fn empty() -> Self {\n CallRequest {\n hash: 0,\n caller_contract_address: AztecAddress::zero(),\n caller_context: CallerContext::empty(),\n start_side_effect_counter: 0,\n end_side_effect_counter: 0,\n }\n }\n}\n\nimpl CallRequest {\n pub fn is_empty(self) -> bool {\n self.hash == 0\n }\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/abis/call_request.nr" }, "101": { "source": "use crate::{\n abis::function_selector::FunctionSelector, address::{EthAddress, AztecAddress},\n constants::{CALL_CONTEXT_LENGTH, GENERATOR_INDEX__CALL_CONTEXT}, hash::pedersen_hash,\n traits::{Deserialize, Hash, Serialize}\n};\n\n// docs:start:call-context\nstruct CallContext {\n msg_sender : AztecAddress,\n storage_contract_address : AztecAddress,\n portal_contract_address : EthAddress,\n\n function_selector : FunctionSelector,\n\n is_delegate_call : bool,\n is_static_call : bool,\n is_contract_deployment : bool,\n\n start_side_effect_counter : u32,\n}\n// docs:end:call-context\n\nimpl CallContext {\n fn assert_is_zero(self) {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595)\n assert(self.msg_sender.to_field() == 0);\n assert(self.storage_contract_address.to_field() == 0);\n assert(self.portal_contract_address.to_field() == 0);\n assert(self.function_selector.to_field() == 0);\n assert(self.is_delegate_call == false);\n assert(self.is_static_call == false);\n assert(self.is_contract_deployment == false);\n assert(self.start_side_effect_counter == 0);\n }\n}\n\nimpl Eq for CallContext {\n fn eq(self, call_context: CallContext) -> bool {\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3595)\n call_context.msg_sender.eq(self.msg_sender)\n & call_context.storage_contract_address.eq(self.storage_contract_address)\n & call_context.portal_contract_address.eq(self.portal_contract_address)\n & call_context.function_selector.eq(self.function_selector)\n & (call_context.is_delegate_call == self.is_delegate_call)\n & (call_context.is_static_call == self.is_static_call)\n & (call_context.is_contract_deployment == self.is_contract_deployment)\n & (call_context.start_side_effect_counter == self.start_side_effect_counter)\n }\n}\n\nimpl Hash for CallContext {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__CALL_CONTEXT)\n }\n}\n\nimpl Serialize<CALL_CONTEXT_LENGTH> for CallContext {\n fn serialize(self) -> [Field; CALL_CONTEXT_LENGTH] {\n [\n self.msg_sender.to_field(),\n self.storage_contract_address.to_field(),\n self.portal_contract_address.to_field(),\n self.function_selector.to_field(),\n self.is_delegate_call as Field,\n self.is_static_call as Field,\n self.is_contract_deployment as Field,\n self.start_side_effect_counter as Field,\n ]\n }\n}\n\nimpl Deserialize<CALL_CONTEXT_LENGTH> for CallContext {\n fn deserialize(serialized: [Field; CALL_CONTEXT_LENGTH]) -> CallContext {\n CallContext {\n msg_sender: AztecAddress::from_field(serialized[0]),\n storage_contract_address: AztecAddress::from_field(serialized[1]),\n portal_contract_address: EthAddress::from_field(serialized[2]),\n function_selector: FunctionSelector::from_field(serialized[3]),\n is_delegate_call: serialized[4] as bool,\n is_static_call: serialized[5] as bool,\n is_contract_deployment: serialized[6] as bool,\n start_side_effect_counter: serialized[7] as u32,\n }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let context: CallContext = dep::std::unsafe::zeroed();\n let serialized = context.serialize();\n let deserialized = CallContext::deserialize(serialized);\n assert(context.eq(deserialized));\n}\n\n#[test]\nfn hash_smoke() {\n let context: CallContext = dep::std::unsafe::zeroed();\n let _hashed = context.hash();\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/abis/call_context.nr" }, "104": { "source": "use crate::constants::GENERATOR_INDEX__PUBLIC_DATA_READ;\nuse dep::std::cmp::Eq;\nuse crate::traits::{Empty, Hash};\n\nstruct PublicDataRead {\n leaf_slot : Field,\n value : Field,\n}\n\nimpl Eq for PublicDataRead {\n fn eq(self, public_data_read: PublicDataRead) -> bool {\n (public_data_read.leaf_slot == self.leaf_slot) & (public_data_read.value == self.value)\n }\n}\n\nimpl Empty for PublicDataRead {\n fn empty() -> Self {\n Self {\n leaf_slot : 0,\n value : 0,\n }\n }\n}\n\nimpl Hash for PublicDataRead {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator([\n self.leaf_slot,\n self.value,\n ], GENERATOR_INDEX__PUBLIC_DATA_READ)\n }\n}\n\nimpl PublicDataRead {\n pub fn is_empty(self) -> bool {\n (self.leaf_slot == 0) & (self.value == 0)\n }\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/abis/public_data_read.nr" }, "105": { "source": "use crate::abis::{\n combined_accumulated_data::{\n CombinedAccumulatedData, FinalAccumulatedData, AccumulatedNonRevertibleData,\n CombinedAccumulatedDataBuilder\n},\n combined_constant_data::CombinedConstantData\n};\nuse crate::mocked::AggregationObject;\n\nstruct PrivateKernelInnerCircuitPublicInputs {\n aggregation_object: AggregationObject,\n max_non_revertible_side_effect_counter: u32,\n end: CombinedAccumulatedData,\n constants: CombinedConstantData,\n is_private: bool,\n}\n\nstruct PrivateKernelTailCircuitPublicInputs {\n aggregation_object: AggregationObject,\n end_non_revertible: AccumulatedNonRevertibleData,\n end: FinalAccumulatedData,\n constants: CombinedConstantData,\n is_private: bool,\n}\n\nstruct PublicKernelCircuitPublicInputs {\n aggregation_object: AggregationObject,\n end_non_revertible: AccumulatedNonRevertibleData,\n end: CombinedAccumulatedData,\n constants: CombinedConstantData,\n is_private: bool,\n}\n\nstruct PrivateKernelCircuitPublicInputsBuilder {\n aggregation_object: AggregationObject,\n max_non_revertible_side_effect_counter: u32,\n end: CombinedAccumulatedDataBuilder,\n constants: CombinedConstantData,\n is_private: bool,\n}\n\nimpl PrivateKernelCircuitPublicInputsBuilder {\n pub fn to_inner(self) -> PrivateKernelInnerCircuitPublicInputs {\n PrivateKernelInnerCircuitPublicInputs {\n aggregation_object: self.aggregation_object,\n max_non_revertible_side_effect_counter: self.max_non_revertible_side_effect_counter,\n end: self.end.finish(),\n constants: self.constants,\n is_private: self.is_private\n }\n }\n\n pub fn to_tail(\n self,\n end_non_revertible: AccumulatedNonRevertibleData\n ) -> PrivateKernelTailCircuitPublicInputs {\n PrivateKernelTailCircuitPublicInputs {\n aggregation_object: self.aggregation_object,\n end_non_revertible,\n end: self.end.to_final(),\n constants: self.constants,\n is_private: self.is_private\n }\n }\n}\n\nstruct PublicKernelCircuitPublicInputsBuilder {\n aggregation_object: AggregationObject,\n end_non_revertible: AccumulatedNonRevertibleData,\n end: CombinedAccumulatedDataBuilder,\n constants: CombinedConstantData,\n is_private: bool,\n}\n\nimpl PublicKernelCircuitPublicInputsBuilder {\n pub fn to_inner(self) -> PublicKernelCircuitPublicInputs {\n PublicKernelCircuitPublicInputs {\n aggregation_object: self.aggregation_object,\n end_non_revertible: self.end_non_revertible,\n end: self.end.finish(),\n constants: self.constants,\n is_private: self.is_private\n }\n }\n}\n\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/abis/kernel_circuit_public_inputs.nr" }, "107": { "source": "use crate::utils::field::field_from_bytes;\nuse dep::std::cmp::Eq;\nuse crate::traits::{Serialize, Deserialize};\n\nglobal SELECTOR_SIZE = 4;\n\nstruct FunctionSelector {\n // 1st 4-bytes of abi-encoding of function.\n inner: u32,\n}\n\nimpl Eq for FunctionSelector {\n fn eq(self, function_selector: FunctionSelector) -> bool {\n function_selector.inner == self.inner\n }\n}\n\nimpl Serialize<1> for FunctionSelector {\n fn serialize(self: Self) -> [Field; 1] {\n [self.inner as Field]\n }\n}\n\nimpl Deserialize<1> for FunctionSelector {\n fn deserialize(fields: [Field; 1]) -> Self {\n Self {\n inner: fields[0] as u32\n }\n }\n}\n\nimpl FunctionSelector {\n fn to_field(self) -> Field {\n self.inner as Field\n }\n\n pub fn from_u32(value: u32) -> Self {\n Self { inner: value }\n }\n\n pub fn from_field(value: Field) -> Self {\n Self { inner: value as u32 }\n }\n\n pub fn from_signature<N>(signature: str<N>) -> Self {\n let bytes = signature.as_bytes();\n let hash = dep::std::hash::keccak256(bytes, bytes.len() as u32);\n\n let mut selector_be_bytes = [0; SELECTOR_SIZE];\n for i in 0..SELECTOR_SIZE {\n selector_be_bytes[i] = hash[i];\n }\n\n FunctionSelector::from_field(field_from_bytes(selector_be_bytes, true))\n }\n\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/abis/function_selector.nr" }, "108": { "source": "use crate::address::{AztecAddress, EthAddress};\nuse crate::contract_class::ContractClassId;\nuse crate::constants::GENERATOR_INDEX__CONTRACT_LEAF;\nuse dep::std::cmp::Eq;\nuse crate::traits::{Empty, Hash};\n\nstruct NewContractData {\n contract_address: AztecAddress,\n portal_contract_address: EthAddress,\n contract_class_id: ContractClassId,\n}\n\nimpl Eq for NewContractData {\n fn eq(self, data: NewContractData) -> bool {\n data.contract_address.eq(self.contract_address)\n & data.portal_contract_address.eq(self.portal_contract_address)\n & data.contract_class_id.eq(self.contract_class_id)\n }\n}\n\nimpl Empty for NewContractData {\n fn empty() -> Self {\n Self {\n contract_address : AztecAddress::empty(),\n portal_contract_address : EthAddress::empty(),\n contract_class_id: ContractClassId::from_field(0),\n }\n }\n}\n\nimpl Hash for NewContractData {\n fn hash(self) -> Field {\n if self.is_empty() {\n 0 // We want to return 0 here since the contract_address is zero\n } else {\n dep::std::hash::pedersen_hash_with_separator([\n self.contract_address.to_field(),\n self.portal_contract_address.to_field(),\n self.contract_class_id.to_field(),\n ], GENERATOR_INDEX__CONTRACT_LEAF)\n }\n }\n}\n\nimpl NewContractData {\n pub fn is_empty(self) -> bool {\n (self.contract_address.to_field() == 0)\n & (self.portal_contract_address.to_field() == 0)\n & (self.contract_class_id.to_field() == 0)\n }\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/abis/new_contract_data.nr" }, "110": { "source": "use crate::abis::{\n function_data::FunctionData, private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_circuit_public_inputs::PublicCircuitPublicInputs\n};\nuse crate::address::AztecAddress;\nuse crate::constants::{GENERATOR_INDEX__CONTRACT_LEAF};\nuse crate::traits::Hash;\n\nstruct ContractClassId {\n inner: Field\n}\n\nimpl Eq for ContractClassId {\n fn eq(self, other: ContractClassId) -> bool {\n other.inner == self.inner\n }\n}\n\nimpl ContractClassId {\n pub fn compute(\n artifact_hash: Field,\n private_functions_root: Field,\n public_bytecode_commitment: Field\n ) -> Self {\n let hash = dep::std::hash::pedersen_hash_with_separator(\n [\n artifact_hash,\n private_functions_root,\n public_bytecode_commitment\n ],\n GENERATOR_INDEX__CONTRACT_LEAF\n ); // TODO(@spalladino): Update generator index\n\n ContractClassId::from_field(hash)\n }\n\n fn to_field(self) -> Field {\n self.inner as Field\n }\n\n pub fn from_field(value: Field) -> Self {\n Self { inner: value }\n }\n\n pub fn serialize(self: Self) -> [Field; 1] {\n [self.inner]\n }\n\n pub fn deserialize(fields: [Field; 1]) -> Self {\n Self { inner: fields[0] }\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/types/src/contract_class.nr" }, "123": { "source": "use dep::types::{address::AztecAddress, constants::GENERATOR_INDEX__PUBLIC_LEAF_INDEX};\n\npub fn compute_public_data_tree_index(contract_address: AztecAddress, storage_slot: Field) -> Field {\n dep::std::hash::pedersen_hash_with_separator(\n [\n contract_address.to_field(),\n storage_slot\n ],\n GENERATOR_INDEX__PUBLIC_LEAF_INDEX\n )\n}\n\npub fn compute_public_data_tree_value(value: Field) -> Field {\n // as it's a public value, it doesn't require hashing.\n // leaving this function here in case we decide to change this.\n value\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/public-kernel-lib/src/hash.nr" }, "125": { "source": "use crate::common;\nuse dep::types::abis::{\n kernel_circuit_public_inputs::{\n PrivateKernelTailCircuitPublicInputs, PublicKernelCircuitPublicInputs,\n PublicKernelCircuitPublicInputsBuilder\n},\n kernel_data::PublicKernelData, public_call_data::PublicCallData\n};\nuse dep::std::unsafe;\n\nstruct PublicKernelSetupCircuitPrivateInputs {\n // Note: One might think that our previous_kernel ought to be\n // a PrivateKernelTailData. However, we instead supply a PublicKernelData.\n // This is because PrivateKernelTailData is a subset of PublicKernelData.\n // And we just initialize the missing values to zero in TS before passing it to the circuit.\n // This is a bit of a hack, but it allows us to reuse the setup circuit until\n // the setup phase of the public kernel is complete. Maybe in a perfect world we would \n // have a SetupInit, SetupInner, etc, but this will change anyway once the public VM is able to \n // consume entire enqueued public calls.\n previous_kernel: PublicKernelData,\n public_call: PublicCallData,\n}\n\nimpl PublicKernelSetupCircuitPrivateInputs {\n fn validate_inputs(self) {\n let private_call_stack = self.previous_kernel.public_inputs.end.private_call_stack;\n for i in 0..private_call_stack.len() {\n let private_call = private_call_stack[i];\n assert(\n private_call.is_empty(), \"Private call stack must be empty when executing in the public kernel\"\n );\n }\n\n let previous_call_is_private = self.previous_kernel.public_inputs.is_private;\n assert(\n previous_call_is_private == true, \"Previous kernel must be private when in this public kernel version\"\n );\n }\n\n fn public_kernel_setup(self) -> PublicKernelCircuitPublicInputs {\n // construct the circuit outputs\n let mut public_inputs: PublicKernelCircuitPublicInputsBuilder = unsafe::zeroed();\n\n // initialise the end state with our provided previous kernel state\n common::initialize_end_values(self.previous_kernel, &mut public_inputs);\n\n // validate the inputs common to all invocation circumstances\n common::validate_inputs(self.public_call);\n\n // validate the inputs unique to having a previous private kernel\n self.validate_inputs();\n\n // Pops the item from the call stack and validates it against the current execution.\n let call_request = public_inputs.end.public_call_stack.pop();\n common::validate_call_against_request(self.public_call, call_request);\n\n common::update_public_end_values(self.public_call, &mut public_inputs);\n\n common::accumulate_unencrypted_logs(\n self.public_call,\n self.previous_kernel.public_inputs.end.unencrypted_logs_hash,\n self.previous_kernel.public_inputs.end.unencrypted_log_preimages_length,\n &mut public_inputs\n );\n\n public_inputs.to_inner()\n }\n}\n\nmod tests {\n use crate::{\n public_kernel_setup::PublicKernelSetupCircuitPrivateInputs,\n utils::{\n assert_eq_call_requests, assert_eq_new_contracts, assert_eq_public_data_reads,\n assert_eq_public_data_update_requests, compute_public_data_reads,\n compute_public_data_update_requests\n }\n };\n use dep::types::{\n abis::{\n call_request::CallRequest, function_selector::FunctionSelector,\n kernel_circuit_public_inputs::PublicKernelCircuitPublicInputs,\n new_contract_data::NewContractData, public_data_read::PublicDataRead,\n public_data_update_request::PublicDataUpdateRequest\n },\n address::{AztecAddress, EthAddress}, contract_class::ContractClassId,\n contrakt::storage_read::StorageRead, hash::compute_logs_hash,\n tests::{kernel_data_builder::PreviousKernelDataBuilder, public_call_data_builder::PublicCallDataBuilder},\n utils::{arrays::{array_eq, array_length}}\n };\n use dep::types::constants::{\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL,\n MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL\n };\n\n struct PublicKernelSetupCircuitPrivateInputsBuilder {\n previous_kernel: PreviousKernelDataBuilder,\n public_call: PublicCallDataBuilder,\n }\n\n impl PublicKernelSetupCircuitPrivateInputsBuilder {\n pub fn new() -> Self {\n let previous_kernel = PreviousKernelDataBuilder::new();\n let public_call = PublicCallDataBuilder::new();\n\n PublicKernelSetupCircuitPrivateInputsBuilder { previous_kernel, public_call }\n }\n\n pub fn is_delegate_call(&mut self) -> Self {\n let _ = self.public_call.is_delegate_call();\n *self\n }\n\n pub fn is_internal_call(&mut self) -> Self {\n let _ = self.public_call.is_internal_call();\n self.previous_kernel.contract_address = self.public_call.contract_address;\n *self\n }\n\n pub fn get_current_public_data_reads(self) -> [PublicDataRead; MAX_PUBLIC_DATA_READS_PER_CALL] {\n let read_requests = self.public_call.public_inputs.contract_storage_reads.storage;\n compute_public_data_reads(self.public_call.contract_address, read_requests)\n }\n\n pub fn get_current_public_data_update_requests(self) -> [PublicDataUpdateRequest; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL] {\n compute_public_data_update_requests(\n self.public_call.contract_address,\n self.public_call.public_inputs.contract_storage_update_requests.storage\n )\n }\n\n pub fn execute(&mut self) -> PublicKernelCircuitPublicInputs {\n let public_call = self.public_call.finish();\n // Adjust the call stack item hash for the current call in the previous iteration.\n let hash = public_call.call_stack_item.hash();\n let is_delegate_call = public_call.call_stack_item.public_inputs.call_context.is_delegate_call;\n self.previous_kernel.push_public_call_request(hash, is_delegate_call);\n let previous_kernel = self.previous_kernel.to_public_kernel_data();\n\n let kernel = PublicKernelSetupCircuitPrivateInputs { previous_kernel, public_call };\n\n kernel.public_kernel_setup()\n }\n\n pub fn succeeded(&mut self) {\n let _ = self.execute();\n }\n\n pub fn failed(&mut self) {\n let _ = self.execute();\n }\n }\n\n #[test]\n fn only_valid_public_data_reads_should_be_propagated() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n builder.public_call.append_read_requests(1);\n builder.public_call.append_empty_read_requests(1);\n builder.public_call.append_read_requests(1);\n let public_data_reads = builder.get_current_public_data_reads();\n\n let public_inputs = builder.execute();\n\n // Only the 2 valid reads should have been propagated.\n let expected = [public_data_reads[0], public_data_reads[2]];\n assert_eq_public_data_reads(public_inputs.end.public_data_reads, expected);\n }\n\n #[test]\n fn only_valid_update_requests_should_be_propagated() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n builder.public_call.append_update_requests(1);\n builder.public_call.append_empty_update_requests(1);\n builder.public_call.append_update_requests(1);\n let public_data_update_requests = builder.get_current_public_data_update_requests();\n\n let public_inputs = builder.execute();\n\n // Only the 2 valid reads should have been propagated.\n let expected = [public_data_update_requests[0], public_data_update_requests[2]];\n assert_eq_public_data_update_requests(public_inputs.end.public_data_update_requests, expected);\n }\n\n #[test(should_fail_with=\"Constructors cannot be public functions\")]\n fn constructor_should_fail() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n builder.public_call.function_data.is_constructor = true;\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"Contract deployment cannot be a public function\")]\n fn constructor_should_fail_2() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n builder.public_call.public_inputs.call_context.is_contract_deployment = true;\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"Bytecode hash cannot be zero\")]\n fn no_bytecode_hash_should_fail() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n builder.public_call.bytecode_hash = 0;\n\n builder.failed();\n }\n\n #[test]\n fn internal_call_succeeds() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new().is_internal_call();\n builder.succeeded();\n }\n\n #[test(should_fail_with=\"msg_sender must be self for internal calls\")]\n fn invalid_is_internal() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new().is_internal_call();\n\n // Tweak the (storage) contract_address to be different to msg_sender.\n let msg_sender = builder.public_call.public_inputs.call_context.msg_sender.to_field();\n builder.public_call.contract_address = AztecAddress::from_field(msg_sender + 1);\n builder.public_call.public_inputs.call_context.storage_contract_address = AztecAddress::from_field(msg_sender + 1);\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"Contract address cannot be zero\")]\n fn contract_address_must_be_valid() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n builder.public_call.contract_address = AztecAddress::zero();\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"Function signature cannot be zero\")]\n fn function_selector_must_be_valid() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n builder.public_call.function_data.selector = FunctionSelector::zero();\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"Cannot execute a private function with the public kernel circuit\")]\n fn private_call_should_fail() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n builder.public_call.function_data.is_private = true;\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"calculated public_kernel_inputs_hash does not match provided public_kernel_inputs_hash at the top of the call stack\")]\n fn inconsistent_call_hash_should_fail() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n let public_call = builder.public_call.finish();\n\n let hash = public_call.call_stack_item.hash();\n // Tweak the call stack item hash.\n builder.previous_kernel.push_public_call_request(hash + 1, false);\n let previous_kernel = builder.previous_kernel.to_public_kernel_data();\n\n let kernel = PublicKernelSetupCircuitPrivateInputs { previous_kernel, public_call };\n\n let _ = kernel.public_kernel_setup();\n }\n\n #[test(should_fail_with=\"call stack msg_sender does not match caller contract address\")]\n fn incorrect_msg_sender_fails_for_regular_calls() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n\n // Set the msg_sender to a wrong value.\n builder.public_call.public_inputs.call_context.msg_sender.inner += 1;\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"call stack storage address does not match expected contract address\")]\n fn incorrect_storage_contract_address_fails_for_regular_calls() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n\n // Set the storage contract address to a wrong value.\n builder.public_call.public_inputs.call_context.storage_contract_address.inner += 1;\n\n builder.failed();\n }\n\n #[test]\n fn delegate_call_succeeds() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new().is_delegate_call();\n builder.succeeded();\n }\n\n #[test(should_fail_with=\"caller context cannot be empty for delegate calls\")]\n fn empty_caller_context_for_delegate_calls_fails() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new().is_delegate_call();\n let public_call = builder.public_call.finish();\n\n let hash = public_call.call_stack_item.hash();\n // Caller context is empty for regular calls.\n let is_delegate_call = false;\n builder.previous_kernel.push_public_call_request(hash, is_delegate_call);\n let previous_kernel = builder.previous_kernel.to_public_kernel_data();\n\n let kernel = PublicKernelSetupCircuitPrivateInputs { previous_kernel, public_call };\n\n let _ = kernel.public_kernel_setup();\n }\n\n #[test(should_fail_with=\"call stack msg_sender does not match expected msg_sender for delegate calls\")]\n fn incorrect_msg_sender_for_delegate_calls_fails() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new().is_delegate_call();\n\n // Set the msg_sender to be the caller contract.\n builder.public_call.public_inputs.call_context.msg_sender = builder.previous_kernel.contract_address;\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"call stack storage address does not match expected contract address for delegate calls\")]\n fn public_kernel_circuit_fails_on_incorrect_storage_contract_in_delegate_call() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new().is_delegate_call();\n\n // Set the storage contract address to be the contract address.\n builder.public_call.public_inputs.call_context.storage_contract_address = builder.public_call.contract_address;\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"curent contract address must not match storage contract address for delegate calls\")]\n fn previous_private_kernel_fails_if_incorrect_storage_contract_on_delegate_call() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new().is_delegate_call();\n\n builder.public_call.contract_address = builder.public_call.public_inputs.call_context.storage_contract_address;\n\n builder.failed();\n }\n\n #[test(should_fail_with = \"call requests length does not match the expected length\")]\n fn incorrect_call_requests_length_fails() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n\n builder.public_call.append_public_call_requests(2, false);\n // Remove one call request.\n let _ = builder.public_call.public_call_stack.pop();\n\n builder.failed();\n }\n\n #[test(should_fail_with = \"call stack hash does not match call request hash\")]\n fn incorrect_call_request_hash_fails() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n\n builder.public_call.append_public_call_requests(2, false);\n let mut call_request = builder.public_call.public_call_stack.pop();\n // Change the hash to be a different value.\n call_request.hash += 1;\n builder.public_call.public_call_stack.push(call_request);\n\n builder.failed();\n }\n\n #[test(should_fail_with = \"invalid caller\")]\n fn incorrect_caller_address_for_call_request_fails() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n\n builder.public_call.append_public_call_requests(1, false);\n let mut call_request = builder.public_call.public_call_stack.pop();\n // Change the caller contract address to be a different value.\n call_request.caller_contract_address.inner += 1;\n builder.public_call.public_call_stack.push(call_request);\n\n builder.failed();\n }\n\n #[test(should_fail_with = \"invalid caller\")]\n fn incorrect_caller_context_for_delegate_call_request_fails() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n\n builder.public_call.append_public_call_requests(1, true);\n let mut call_request = builder.public_call.public_call_stack.pop();\n // Change the storage contract to be a different value.\n call_request.caller_context.storage_contract_address.inner += 1;\n builder.public_call.public_call_stack.push(call_request);\n\n builder.failed();\n }\n\n #[test]\n fn public_kernel_circuit_with_private_previous_kernel_should_succeed() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n builder.succeeded();\n }\n\n #[test]\n fn circuit_outputs_should_be_correctly_populated_with_previous_private_kernel() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n let new_contracts = [\n NewContractData {\n contract_address: AztecAddress::from_field(123),\n portal_contract_address: EthAddress::from_field(456),\n contract_class_id: ContractClassId::from_field(78)\n }\n ];\n builder.previous_kernel.end.new_contracts.extend_from_array(new_contracts);\n\n builder.public_call.append_public_call_requests_for_regular_calls(2);\n let storage = builder.public_call.public_call_stack.storage;\n let public_call_stack = [storage[0], storage[1]];\n\n builder.public_call.append_update_requests(2);\n let storage = builder.get_current_public_data_update_requests();\n let update_requests = [storage[0], storage[1]];\n\n builder.public_call.append_read_requests(3);\n let storage = builder.get_current_public_data_reads();\n let read_requests = [storage[0], storage[1], storage[2]];\n\n let public_inputs = builder.execute();\n\n assert_eq_new_contracts(public_inputs.end.new_contracts, new_contracts);\n assert_eq_call_requests(public_inputs.end.private_call_stack, []);\n assert_eq_call_requests(public_inputs.end.public_call_stack, public_call_stack);\n assert_eq_public_data_update_requests(\n public_inputs.end.public_data_update_requests,\n update_requests\n );\n assert_eq_public_data_reads(public_inputs.end.public_data_reads, read_requests);\n }\n\n #[test(should_fail_with=\"Private call stack must be empty when executing in the public kernel\")]\n fn private_previous_kernel_non_empty_private_call_stack_should_fail() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n builder.previous_kernel.push_private_call_request(1, false);\n\n builder.failed();\n }\n\n // TODO: Find another way to test this. Currently it will crash because we are popping from an empty array:\n // The application panicked (crashed). Message: Expected array index to fit in u64\n // #[test(should_fail_with=\"Public call stack can not be empty\")]\n // fn private_previous_kernel_empty_public_call_stack_should_fail() {\n // let builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n // let previous_kernel = builder.previous_kernel.finish();\n // let kernel = PublicKernelSetupCircuitPrivateInputs {\n // previous_kernel,\n // public_call: builder.public_call.finish(),\n // };\n\n // let _ = kernel.public_kernel_setup();\n // }\n\n #[test(should_fail_with=\"Previous kernel must be private when in this public kernel version\")]\n fn private_previous_kernel_non_private_previous_kernel_should_fail() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n builder.previous_kernel.is_private = false;\n\n builder.failed();\n }\n\n #[test(should_fail_with=\"No contract storage update requests are allowed for static calls\")]\n fn previous_private_kernel_fails_if_contract_storage_update_requests_on_static_call() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n builder.public_call.public_inputs.call_context.is_static_call = true;\n builder.public_call.append_update_requests(1);\n\n builder.failed();\n }\n\n #[test]\n fn logs_are_handled_as_expected() {\n let mut builder = PublicKernelSetupCircuitPrivateInputsBuilder::new();\n\n // Logs for the current call stack.\n let unencrypted_logs_hash = [26, 47];\n let unencrypted_log_preimages_length = 50;\n builder.public_call.set_unencrypted_logs(unencrypted_logs_hash, unencrypted_log_preimages_length);\n\n // Logs for the previous call stack.\n let prev_encrypted_logs_hash = [80, 429];\n let prev_encrypted_log_preimages_length = 13;\n let prev_unencrypted_logs_hash = [956, 112];\n let prev_unencrypted_log_preimages_length = 24;\n builder.previous_kernel.set_encrypted_logs(prev_encrypted_logs_hash, prev_encrypted_log_preimages_length);\n builder.previous_kernel.set_unencrypted_logs(\n prev_unencrypted_logs_hash,\n prev_unencrypted_log_preimages_length\n );\n\n let public_inputs = builder.execute();\n\n assert_eq(public_inputs.end.encrypted_log_preimages_length, prev_encrypted_log_preimages_length);\n assert_eq(\n public_inputs.end.unencrypted_log_preimages_length, unencrypted_log_preimages_length + prev_unencrypted_log_preimages_length\n );\n\n assert_eq(public_inputs.end.encrypted_logs_hash, prev_encrypted_logs_hash);\n\n let expected_unencrypted_logs_hash = compute_logs_hash(prev_unencrypted_logs_hash, unencrypted_logs_hash);\n assert_eq(public_inputs.end.unencrypted_logs_hash, expected_unencrypted_logs_hash);\n }\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/public-kernel-lib/src/public_kernel_setup.nr" }, "127": { "source": "use dep::types::{\n abis::{\n call_request::CallRequest, public_call_stack_item::PublicCallStackItem,\n combined_accumulated_data::{CombinedAccumulatedData, CombinedAccumulatedDataBuilder},\n kernel_circuit_public_inputs::PublicKernelCircuitPublicInputsBuilder,\n new_contract_data::NewContractData, kernel_data::{PrivateKernelTailData, PublicKernelData},\n public_call_data::PublicCallData, public_circuit_public_inputs::PublicCircuitPublicInputs,\n public_data_read::PublicDataRead, public_data_update_request::PublicDataUpdateRequest,\n side_effect::{SideEffect, SideEffectLinkedToNoteHash}\n},\n address::AztecAddress,\n contrakt::{storage_read::StorageRead, storage_update_request::StorageUpdateRequest},\n constants::{\n MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_COMMITMENTS_PER_CALL, MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,\n MAX_PUBLIC_DATA_READS_PER_CALL, NUM_FIELDS_PER_SHA256\n},\n hash::{silo_commitment, silo_nullifier, compute_l2_to_l1_hash, accumulate_sha256},\n utils::{arrays::{array_length, array_to_bounded_vec}}, traits::is_empty_array\n};\nuse crate::hash::{compute_public_data_tree_index, compute_public_data_tree_value};\n\n// Validates inputs to the kernel circuit that are common to all invocation scenarios.\npub fn validate_inputs(public_call: PublicCallData) {\n // Validates commons inputs for all type of kernel inputs\n let this_call_stack_item: PublicCallStackItem = public_call.call_stack_item;\n assert(\n this_call_stack_item.public_inputs.call_context.is_contract_deployment == false, \"Contract deployment cannot be a public function\"\n );\n assert(\n !this_call_stack_item.contract_address.eq(AztecAddress::zero()), \"Contract address cannot be zero\"\n );\n assert(this_call_stack_item.function_data.selector.to_field() != 0, \"Function signature cannot be zero\");\n assert(\n this_call_stack_item.function_data.is_constructor == false, \"Constructors cannot be public functions\"\n );\n assert(\n this_call_stack_item.function_data.is_private == false, \"Cannot execute a private function with the public kernel circuit\"\n );\n assert(public_call.bytecode_hash != 0, \"Bytecode hash cannot be zero\");\n}\n\npub fn initialize_end_values(\n previous_kernel: PublicKernelData,\n circuit_outputs: &mut PublicKernelCircuitPublicInputsBuilder\n) {\n // Initialises the circuit outputs with the end state of the previous iteration\n circuit_outputs.constants = previous_kernel.public_inputs.constants;\n\n // Ensure the arrays are the same as previously, before we start pushing more data onto them in other\n // functions within this circuit:\n let start = previous_kernel.public_inputs.end;\n\n circuit_outputs.end.new_commitments = array_to_bounded_vec(start.new_commitments);\n circuit_outputs.end.new_nullifiers = array_to_bounded_vec(start.new_nullifiers);\n\n circuit_outputs.end.private_call_stack = array_to_bounded_vec(start.private_call_stack);\n circuit_outputs.end.public_call_stack = array_to_bounded_vec(start.public_call_stack);\n circuit_outputs.end.new_l2_to_l1_msgs = array_to_bounded_vec(start.new_l2_to_l1_msgs);\n\n circuit_outputs.end.public_data_update_requests = array_to_bounded_vec(start.public_data_update_requests);\n circuit_outputs.end.public_data_reads = array_to_bounded_vec(start.public_data_reads);\n\n // Public kernel does not modify encrypted logs values --> we just copy them to output\n circuit_outputs.end.encrypted_logs_hash = start.encrypted_logs_hash;\n circuit_outputs.end.encrypted_log_preimages_length = start.encrypted_log_preimages_length;\n\n circuit_outputs.end.new_contracts = array_to_bounded_vec(previous_kernel.public_inputs.end.new_contracts);\n}\n\nfn perform_static_call_checks(public_call: PublicCallData) {\n let public_inputs = public_call.call_stack_item.public_inputs;\n if public_inputs.call_context.is_static_call {\n // No state changes are allowed for static calls:\n let new_commitments_length = array_length(public_inputs.new_commitments);\n assert(new_commitments_length == 0, \"new_commitments must be empty for static calls\");\n\n let new_nullifiers_length = array_length(public_inputs.new_nullifiers);\n assert(new_nullifiers_length == 0, \"new_nullifiers must be empty for static calls\");\n\n let update_requests_length = array_length(public_inputs.contract_storage_update_requests);\n assert(\n update_requests_length == 0, \"No contract storage update requests are allowed for static calls\"\n );\n }\n}\n\nfn is_valid_caller(request: CallRequest, public_call: PublicCallData) -> bool {\n let call_context = public_call.call_stack_item.public_inputs.call_context;\n let valid_caller_context = request.caller_context.msg_sender.eq(call_context.msg_sender)\n & request.caller_context.storage_contract_address.eq(call_context.storage_contract_address);\n request.caller_contract_address.eq(public_call.call_stack_item.contract_address)\n & (request.caller_context.is_empty() | valid_caller_context)\n}\n\nfn validate_call_requests<N>(\n call_requests: BoundedVec<CallRequest, N>,\n hashes: [Field; N],\n public_call: PublicCallData\n) {\n assert_eq(\n array_length(hashes), call_requests.len(), \"call requests length does not match the expected length\"\n );\n for i in 0..N {\n let hash = hashes[i];\n if hash != 0 {\n let request = call_requests.get_unchecked(i);\n assert_eq(request.hash, hash, \"call stack hash does not match call request hash\");\n assert(is_valid_caller(request, public_call), \"invalid caller\");\n }\n }\n}\n\npub fn update_public_end_values(public_call: PublicCallData, circuit_outputs: &mut PublicKernelCircuitPublicInputsBuilder) {\n // Updates the circuit outputs with new state changes, call stack etc\n circuit_outputs.is_private = false;\n\n // If this call is a static call, certain operations are disallowed, such as creating new state.\n perform_static_call_checks(public_call);\n\n // Update public call stack.\n let public_call_requests = array_to_bounded_vec(public_call.public_call_stack);\n let hashes = public_call.call_stack_item.public_inputs.public_call_stack_hashes;\n validate_call_requests(public_call_requests, hashes, public_call);\n circuit_outputs.end.public_call_stack.extend_from_bounded_vec(public_call_requests);\n\n propagate_new_nullifiers(public_call, circuit_outputs);\n propagate_new_commitments(public_call, circuit_outputs);\n\n propagate_new_l2_to_l1_messages(public_call, circuit_outputs);\n\n propagate_valid_public_data_update_requests(public_call, circuit_outputs);\n\n propagate_valid_public_data_reads(public_call, circuit_outputs);\n}\n\nfn propagate_valid_public_data_update_requests(\n public_call: PublicCallData,\n circuit_outputs: &mut PublicKernelCircuitPublicInputsBuilder\n) {\n let contract_address = public_call.call_stack_item.contract_address;\n let update_requests = public_call.call_stack_item.public_inputs.contract_storage_update_requests;\n\n let mut public_data_update_requests : BoundedVec<PublicDataUpdateRequest, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX> = BoundedVec::new(PublicDataUpdateRequest::empty());\n\n for i in 0..MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX {\n let update_request = update_requests[i];\n if (!update_request.is_empty()) {\n let public_data_update_request = PublicDataUpdateRequest {\n leaf_slot: compute_public_data_tree_index(contract_address, update_request.storage_slot),\n new_value: compute_public_data_tree_value(update_request.new_value)\n };\n\n public_data_update_requests.push(public_data_update_request);\n }\n }\n circuit_outputs.end.public_data_update_requests.extend_from_bounded_vec(public_data_update_requests);\n}\n\nfn propagate_valid_public_data_reads(public_call: PublicCallData, circuit_outputs: &mut PublicKernelCircuitPublicInputsBuilder) {\n let contract_address = public_call.call_stack_item.contract_address;\n let read_requests = public_call.call_stack_item.public_inputs.contract_storage_reads;\n\n let mut public_data_reads : BoundedVec<PublicDataRead, MAX_PUBLIC_DATA_READS_PER_CALL> = BoundedVec::new(PublicDataRead::empty());\n\n for i in 0..MAX_PUBLIC_DATA_READS_PER_CALL {\n let read_request: StorageRead = read_requests[i];\n if !read_request.is_empty() {\n let public_data_read = PublicDataRead {\n leaf_slot: compute_public_data_tree_index(contract_address, read_request.storage_slot),\n value: compute_public_data_tree_value(read_request.current_value)\n };\n public_data_reads.push(public_data_read);\n }\n }\n circuit_outputs.end.public_data_reads.extend_from_bounded_vec(public_data_reads);\n}\n\nfn propagate_new_commitments(\n public_call: PublicCallData,\n circuit_outputs: &mut PublicKernelCircuitPublicInputsBuilder\n) {\n let public_call_public_inputs = public_call.call_stack_item.public_inputs;\n\n let new_commitments = public_call.call_stack_item.public_inputs.new_commitments;\n let storage_contract_address = public_call_public_inputs.call_context.storage_contract_address;\n\n let mut siloed_new_commitments : BoundedVec<SideEffect, MAX_NEW_COMMITMENTS_PER_CALL> = BoundedVec::new(SideEffect::empty());\n for i in 0..MAX_NEW_COMMITMENTS_PER_CALL {\n let new_commitment = new_commitments[i].value;\n if new_commitment != 0 {\n let siloed_new_commitment = silo_commitment(storage_contract_address, new_commitment);\n siloed_new_commitments.push(SideEffect { value: siloed_new_commitment, counter: new_commitments[i].counter });\n }\n }\n circuit_outputs.end.new_commitments.extend_from_bounded_vec(siloed_new_commitments);\n}\n\nfn propagate_new_nullifiers(\n public_call: PublicCallData,\n circuit_outputs: &mut PublicKernelCircuitPublicInputsBuilder\n) {\n let new_nullifiers = public_call.call_stack_item.public_inputs.new_nullifiers;\n let storage_contract_address = public_call.call_stack_item.public_inputs.call_context.storage_contract_address;\n\n // Enhance commitments and nullifiers with domain separation whereby domain is the contract.\n let mut siloed_new_nullifiers : BoundedVec<SideEffectLinkedToNoteHash,MAX_NEW_NULLIFIERS_PER_CALL> = BoundedVec::new(SideEffectLinkedToNoteHash::empty());\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL {\n let new_nullifier = new_nullifiers[i].value;\n if new_nullifier != 0 {\n let siloed_new_nullifier = silo_nullifier(storage_contract_address, new_nullifier);\n siloed_new_nullifiers.push(\n SideEffectLinkedToNoteHash {\n value: siloed_new_nullifier,\n counter: new_nullifiers[i].counter,\n note_hash: new_nullifiers[i].note_hash\n }\n );\n }\n }\n\n circuit_outputs.end.new_nullifiers.extend_from_bounded_vec(siloed_new_nullifiers);\n}\n\nfn propagate_new_l2_to_l1_messages(public_call: PublicCallData, public_inputs: &mut PublicKernelCircuitPublicInputsBuilder) {\n // new l2 to l1 messages\n let public_call_public_inputs = public_call.call_stack_item.public_inputs;\n let portal_contract_address = public_call.portal_contract_address;\n let storage_contract_address = public_call_public_inputs.call_context.storage_contract_address;\n\n let new_l2_to_l1_msgs = public_call_public_inputs.new_l2_to_l1_msgs;\n let mut new_l2_to_l1_msgs_to_insert : BoundedVec<Field, MAX_NEW_L2_TO_L1_MSGS_PER_CALL> = BoundedVec::new(0);\n for i in 0..MAX_NEW_L2_TO_L1_MSGS_PER_CALL {\n let msg_is_zero = new_l2_to_l1_msgs[i] == 0;\n if msg_is_zero == false {\n let new_l2_to_l1_msgs = compute_l2_to_l1_hash(\n storage_contract_address,\n public_inputs.constants.tx_context.version,\n portal_contract_address,\n public_inputs.constants.tx_context.chain_id,\n new_l2_to_l1_msgs[i]\n );\n new_l2_to_l1_msgs_to_insert.push(new_l2_to_l1_msgs)\n }\n }\n public_inputs.end.new_l2_to_l1_msgs.extend_from_bounded_vec(new_l2_to_l1_msgs_to_insert);\n}\n\n/**\n * @brief Accumulates unencrypted logs hashes and lengths.\n * @param The type of kernel input\n * @param public_kernel_inputs The inputs to this iteration of the kernel circuit\n * @param circuit_outputs The circuit outputs to be populated\n * @note See the following thread if not clear:\n * https://discourse.aztec.network/t/proposal-forcing-the-sequencer-to-actually-submit-data-to-l1/426\n * @note Used by public kernels which had previous iterations.\n */\npub fn accumulate_unencrypted_logs(\n public_call: PublicCallData,\n previous_unencrypted_logs_hash: [Field; NUM_FIELDS_PER_SHA256],\n previous_unencrypted_log_preimages_length: Field,\n public_inputs: &mut PublicKernelCircuitPublicInputsBuilder\n) {\n let public_call_public_inputs = public_call.call_stack_item.public_inputs;\n\n let current_unencrypted_logs_hash = public_call_public_inputs.unencrypted_logs_hash;\n public_inputs.end.unencrypted_logs_hash = accumulate_sha256([\n U128::from_integer(previous_unencrypted_logs_hash[0]), \n U128::from_integer(previous_unencrypted_logs_hash[1]),\n U128::from_integer(current_unencrypted_logs_hash[0]),\n U128::from_integer(current_unencrypted_logs_hash[1])\n ]);\n\n // Add log preimages lengths from current iteration to accumulated lengths\n let current_unencrypted_log_preimages_length = public_call_public_inputs.unencrypted_log_preimages_length;\n public_inputs.end.unencrypted_log_preimages_length =\n previous_unencrypted_log_preimages_length + current_unencrypted_log_preimages_length;\n}\n\n/**\n * @brief Validates that the call stack item for this circuit iteration is at the top of the call stack\n * @param builder The circuit builder\n * @param public_kernel_inputs The inputs to this iteration of the kernel circuit\n */\npub fn validate_call_against_request(public_call: PublicCallData, request: CallRequest) {\n // TODO: this logic might need to change to accommodate the weird edge 3 initial txs (the 'main' tx, the 'fee' tx,\n // and the 'gas rebate' tx).\n let call_stack_item = public_call.call_stack_item;\n\n assert(\n request.hash == call_stack_item.hash(), \"calculated public_kernel_inputs_hash does not match provided public_kernel_inputs_hash at the top of the call stack\"\n );\n\n let call_context = call_stack_item.public_inputs.call_context;\n\n if (call_stack_item.function_data.is_internal) {\n assert(\n call_stack_item.contract_address.eq(call_context.msg_sender), \"msg_sender must be self for internal calls\"\n );\n }\n\n if call_context.is_delegate_call {\n let caller_context = request.caller_context;\n assert(!caller_context.is_empty(), \"caller context cannot be empty for delegate calls\");\n assert(\n call_context.msg_sender.eq(caller_context.msg_sender), \"call stack msg_sender does not match expected msg_sender for delegate calls\"\n );\n assert(\n call_context.storage_contract_address.eq(caller_context.storage_contract_address), \"call stack storage address does not match expected contract address for delegate calls\"\n );\n assert(\n !call_stack_item.contract_address.eq(call_context.storage_contract_address), \"curent contract address must not match storage contract address for delegate calls\"\n );\n } else {\n let caller_contract_address = request.caller_contract_address;\n assert(\n call_context.msg_sender.eq(caller_contract_address), \"call stack msg_sender does not match caller contract address\"\n );\n assert(\n call_context.storage_contract_address.eq(call_stack_item.contract_address), \"call stack storage address does not match expected contract address\"\n );\n }\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/public-kernel-lib/src/common.nr" }, "129": { "source": "use dep::public_kernel_lib::PublicKernelSetupCircuitPrivateInputs;\nuse dep::types::PublicKernelCircuitPublicInputs;\n\nunconstrained fn main(input: PublicKernelSetupCircuitPrivateInputs) -> distinct pub PublicKernelCircuitPublicInputs {\n input.public_kernel_setup()\n}\n", "path": "/usr/src/noir-projects/noir-protocol-circuits/src/crates/public-kernel-setup-simulated/src/main.nr" } } }