This is page 95 of 103. Use http://codebase.md/cyfrin/aderyn?lines=true&page={x} to view the full context.
# Directory Structure
```
├── .cargo
│ └── config.toml
├── .git-blame-ignore-revs
├── .gitattributes
├── .github
│ ├── images
│ │ ├── aderyn_logo.png
│ │ ├── poweredbycyfrinblack.png
│ │ └── poweredbycyfrinblue.png
│ ├── ISSUE_TEMPLATE
│ │ ├── bug_report.md
│ │ ├── false_positive_issue.md
│ │ └── feature_request.md
│ └── workflows
│ ├── cargo.yml
│ ├── dependencies.yml
│ ├── release.yml
│ ├── reports.yml
│ └── toml.yml
├── .gitignore
├── .gitmodules
├── .vscode
│ └── settings.json
├── aderyn
│ ├── Cargo.toml
│ ├── oranda.json
│ ├── README.md
│ ├── src
│ │ ├── birdsong.rs
│ │ ├── completions.rs
│ │ ├── lib.rs
│ │ ├── lsp.rs
│ │ ├── main.rs
│ │ ├── mcp.rs
│ │ └── panic.rs
│ └── templates
│ └── aderyn.toml
├── aderyn_core
│ ├── .gitignore
│ ├── Cargo.toml
│ ├── README.md
│ ├── src
│ │ ├── ast
│ │ │ ├── ast_nodes.rs
│ │ │ ├── ast.rs
│ │ │ ├── impls
│ │ │ │ ├── ctx
│ │ │ │ │ ├── utils.rs
│ │ │ │ │ └── workspace.rs
│ │ │ │ ├── ctx.rs
│ │ │ │ ├── disp
│ │ │ │ │ ├── blocks.rs
│ │ │ │ │ ├── contracts.rs
│ │ │ │ │ ├── enumerations.rs
│ │ │ │ │ ├── errors.rs
│ │ │ │ │ ├── events.rs
│ │ │ │ │ ├── expressions.rs
│ │ │ │ │ ├── functions.rs
│ │ │ │ │ ├── identifiers.rs
│ │ │ │ │ ├── literals.rs
│ │ │ │ │ ├── modifiers.rs
│ │ │ │ │ ├── statements.rs
│ │ │ │ │ ├── structures.rs
│ │ │ │ │ ├── types.rs
│ │ │ │ │ ├── user_defined_value_types.rs
│ │ │ │ │ ├── using_for_directives.rs
│ │ │ │ │ └── variables.rs
│ │ │ │ ├── disp.rs
│ │ │ │ ├── node
│ │ │ │ │ ├── blocks.rs
│ │ │ │ │ ├── contracts.rs
│ │ │ │ │ ├── documentation.rs
│ │ │ │ │ ├── enumerations.rs
│ │ │ │ │ ├── errors.rs
│ │ │ │ │ ├── events.rs
│ │ │ │ │ ├── expressions.rs
│ │ │ │ │ ├── functions.rs
│ │ │ │ │ ├── identifiers.rs
│ │ │ │ │ ├── import_directives.rs
│ │ │ │ │ ├── literals.rs
│ │ │ │ │ ├── modifiers.rs
│ │ │ │ │ ├── pragma_directives.rs
│ │ │ │ │ ├── source_units.rs
│ │ │ │ │ ├── statements.rs
│ │ │ │ │ ├── structures.rs
│ │ │ │ │ ├── types.rs
│ │ │ │ │ ├── user_defined_value_types.rs
│ │ │ │ │ ├── using_for_directives.rs
│ │ │ │ │ └── variables.rs
│ │ │ │ ├── node.rs
│ │ │ │ ├── own
│ │ │ │ │ ├── hashing.rs
│ │ │ │ │ ├── node_id.rs
│ │ │ │ │ ├── source_units.rs
│ │ │ │ │ └── utils.rs
│ │ │ │ └── own.rs
│ │ │ ├── impls.rs
│ │ │ ├── macros.rs
│ │ │ ├── magic.rs
│ │ │ ├── node_type.rs
│ │ │ └── yul.rs
│ │ ├── ast.rs
│ │ ├── audit
│ │ │ ├── attack_surface.rs
│ │ │ ├── auditor.rs
│ │ │ ├── entrypoint.rs
│ │ │ └── public_functions_no_sender.rs
│ │ ├── audit.rs
│ │ ├── context
│ │ │ ├── browser
│ │ │ │ ├── ancestral_line.rs
│ │ │ │ ├── closest_ancestor.rs
│ │ │ │ ├── external_calls.rs
│ │ │ │ ├── extractor.rs
│ │ │ │ ├── immediate_children.rs
│ │ │ │ ├── location.rs
│ │ │ │ ├── macros.rs
│ │ │ │ ├── parent.rs
│ │ │ │ ├── peek_over.rs
│ │ │ │ ├── peek_under.rs
│ │ │ │ ├── peek.rs
│ │ │ │ ├── siblings.rs
│ │ │ │ ├── sort_nodes.rs
│ │ │ │ └── storage_vars.rs
│ │ │ ├── browser.rs
│ │ │ ├── capturable.rs
│ │ │ ├── flow
│ │ │ │ ├── display.rs
│ │ │ │ ├── error.rs
│ │ │ │ ├── kind.rs
│ │ │ │ ├── primitives.rs
│ │ │ │ ├── reducibles.rs
│ │ │ │ ├── tests.rs
│ │ │ │ ├── utils.rs
│ │ │ │ ├── visualizer.rs
│ │ │ │ └── voids.rs
│ │ │ ├── flow.rs
│ │ │ ├── graph
│ │ │ │ ├── callgraph
│ │ │ │ │ ├── legacy.rs
│ │ │ │ │ ├── new.rs
│ │ │ │ │ ├── tests.rs
│ │ │ │ │ ├── utils.rs
│ │ │ │ │ └── visit.rs
│ │ │ │ ├── callgraph.rs
│ │ │ │ ├── preprocess
│ │ │ │ │ ├── legacy.rs
│ │ │ │ │ └── new.rs
│ │ │ │ ├── preprocess.rs
│ │ │ │ ├── traits.rs
│ │ │ │ └── utils.rs
│ │ │ ├── graph.rs
│ │ │ ├── macros.rs
│ │ │ ├── mcp
│ │ │ │ ├── callgraph
│ │ │ │ │ ├── render.rs
│ │ │ │ │ ├── tool.rs
│ │ │ │ │ └── utils.rs
│ │ │ │ ├── callgraph.rs
│ │ │ │ ├── contract_surface
│ │ │ │ │ ├── render.rs
│ │ │ │ │ ├── tool.rs
│ │ │ │ │ └── util.rs
│ │ │ │ ├── contract_surface.rs
│ │ │ │ ├── list_contracts
│ │ │ │ │ ├── render.rs
│ │ │ │ │ └── tool.rs
│ │ │ │ ├── list_contracts.rs
│ │ │ │ ├── node_finder
│ │ │ │ │ ├── render.rs
│ │ │ │ │ ├── tool.rs
│ │ │ │ │ └── utils.rs
│ │ │ │ ├── node_finder.rs
│ │ │ │ ├── node_summarizer
│ │ │ │ │ ├── render.rs
│ │ │ │ │ ├── tool.rs
│ │ │ │ │ └── utils.rs
│ │ │ │ ├── node_summarizer.rs
│ │ │ │ ├── project_overview
│ │ │ │ │ ├── render.rs
│ │ │ │ │ └── tool.rs
│ │ │ │ ├── project_overview.rs
│ │ │ │ ├── tool_guide
│ │ │ │ │ └── tool.rs
│ │ │ │ └── tool_guide.rs
│ │ │ ├── mcp.rs
│ │ │ ├── router
│ │ │ │ ├── external_calls.rs
│ │ │ │ ├── internal_calls.rs
│ │ │ │ ├── modifier_calls.rs
│ │ │ │ └── tests.rs
│ │ │ ├── router.rs
│ │ │ └── workspace.rs
│ │ ├── context.rs
│ │ ├── detect
│ │ │ ├── detector.rs
│ │ │ ├── entrypoint.rs
│ │ │ ├── helpers.rs
│ │ │ ├── high
│ │ │ │ ├── _template.rs
│ │ │ │ ├── abi_encode_packed_hash_collision.rs
│ │ │ │ ├── arbitrary_transfer_from.rs
│ │ │ │ ├── const_func_changes_state.rs
│ │ │ │ ├── contract_locks_ether.rs
│ │ │ │ ├── dangerous_unary_operator.rs
│ │ │ │ ├── delegate_call_unchecked_address.rs
│ │ │ │ ├── delete_nested_mapping.rs
│ │ │ │ ├── dynamic_array_length_assignment.rs
│ │ │ │ ├── enumerable_loop_removal.rs
│ │ │ │ ├── eth_send_unchecked_address.rs
│ │ │ │ ├── experimental_encoder.rs
│ │ │ │ ├── function_selector_collision.rs
│ │ │ │ ├── incorrect_caret_operator.rs
│ │ │ │ ├── incorrect_erc20_interface.rs
│ │ │ │ ├── incorrect_erc721_interface.rs
│ │ │ │ ├── incorrect_shift_order.rs
│ │ │ │ ├── misused_boolean.rs
│ │ │ │ ├── msg_value_in_loops.rs
│ │ │ │ ├── multiple_constructors.rs
│ │ │ │ ├── nested_struct_in_mapping.rs
│ │ │ │ ├── out_of_order_retryable.rs
│ │ │ │ ├── pre_declared_variable_usage.rs
│ │ │ │ ├── reentrancy_state_change.rs
│ │ │ │ ├── reused_contract_name.rs
│ │ │ │ ├── rtlo.rs
│ │ │ │ ├── selfdestruct.rs
│ │ │ │ ├── signed_integer_storage_array.rs
│ │ │ │ ├── state_variable_shadowing.rs
│ │ │ │ ├── storage_array_memory_edit.rs
│ │ │ │ ├── strict_equality_contract_balance.rs
│ │ │ │ ├── tautological_compare.rs
│ │ │ │ ├── tautology_or_contradiction.rs
│ │ │ │ ├── tx_origin_used_for_auth.rs
│ │ │ │ ├── unchecked_low_level_call.rs
│ │ │ │ ├── unchecked_send.rs
│ │ │ │ ├── unprotected_initializer.rs
│ │ │ │ ├── unsafe_casting.rs
│ │ │ │ ├── weak_randomness.rs
│ │ │ │ └── yul_return.rs
│ │ │ ├── high.rs
│ │ │ ├── low
│ │ │ │ ├── _template.rs
│ │ │ │ ├── assert_state_change.rs
│ │ │ │ ├── block_timestamp_deadline.rs
│ │ │ │ ├── boolean_equality.rs
│ │ │ │ ├── builtin_symbol_shadowing.rs
│ │ │ │ ├── centralization_risk.rs
│ │ │ │ ├── constant_function_contains_assembly.rs
│ │ │ │ ├── costly_loop.rs
│ │ │ │ ├── dead_code.rs
│ │ │ │ ├── delegatecall_in_loop.rs
│ │ │ │ ├── deprecated_oz_function.rs
│ │ │ │ ├── division_before_multiplication.rs
│ │ │ │ ├── ecrecover.rs
│ │ │ │ ├── empty_block.rs
│ │ │ │ ├── empty_require_revert.rs
│ │ │ │ ├── function_initializing_state.rs
│ │ │ │ ├── function_pointer_in_constructor.rs
│ │ │ │ ├── inconsistent_type_names.rs
│ │ │ │ ├── incorrect_modifier.rs
│ │ │ │ ├── internal_function_used_once.rs
│ │ │ │ ├── large_numeric_literal.rs
│ │ │ │ ├── literal_instead_of_constant.rs
│ │ │ │ ├── local_variable_shadowing.rs
│ │ │ │ ├── missing_inheritance.rs
│ │ │ │ ├── modifier_used_only_once.rs
│ │ │ │ ├── multiple_placeholders.rs
│ │ │ │ ├── non_reentrant_not_first.rs
│ │ │ │ ├── push_0_opcode.rs
│ │ │ │ ├── redundant_statement.rs
│ │ │ │ ├── require_revert_in_loop.rs
│ │ │ │ ├── return_bomb.rs
│ │ │ │ ├── solmate_safe_transfer_lib.rs
│ │ │ │ ├── state_change_without_event.rs
│ │ │ │ ├── state_no_address_check.rs
│ │ │ │ ├── state_variable_could_be_constant.rs
│ │ │ │ ├── state_variable_could_be_immutable.rs
│ │ │ │ ├── state_variable_read_external.rs
│ │ │ │ ├── storage_array_length_not_cached.rs
│ │ │ │ ├── todo.rs
│ │ │ │ ├── unchecked_return.rs
│ │ │ │ ├── uninitialized_local_variable.rs
│ │ │ │ ├── unsafe_erc20_operation.rs
│ │ │ │ ├── unsafe_oz_erc721_mint.rs
│ │ │ │ ├── unspecific_solidity_pragma.rs
│ │ │ │ ├── unused_error.rs
│ │ │ │ ├── unused_import.rs
│ │ │ │ ├── unused_public_function.rs
│ │ │ │ ├── unused_state_variable.rs
│ │ │ │ └── void_constructor.rs
│ │ │ ├── low.rs
│ │ │ └── test_utils.rs
│ │ ├── detect.rs
│ │ ├── lib.rs
│ │ ├── stats
│ │ │ ├── cloc.rs
│ │ │ ├── dbg_tips.txt
│ │ │ ├── ignore.rs
│ │ │ ├── token.rs
│ │ │ └── util.rs
│ │ ├── stats.rs
│ │ ├── test_utils
│ │ │ └── load_source_unit.rs
│ │ ├── test_utils.rs
│ │ ├── visitor
│ │ │ ├── ast_visitor.rs
│ │ │ ├── macros.rs
│ │ │ └── workspace_visitor.rs
│ │ └── visitor.rs
│ ├── templates
│ │ └── mcp-tool-response
│ │ ├── callgraph.md
│ │ ├── contract_surface.md
│ │ ├── list_contracts.md
│ │ ├── node_finder_get_all.md
│ │ ├── node_finder_grep.md
│ │ ├── node_finder_search.md
│ │ ├── node_summarizer.md
│ │ ├── project_overview.md
│ │ └── tool_guide.md
│ └── tests
│ ├── common
│ │ ├── ancestral_line.rs
│ │ ├── closest_ancestor.rs
│ │ ├── immediate_children.rs
│ │ ├── immediate_parent.rs
│ │ ├── mod.rs
│ │ ├── new_ast_nodes.rs
│ │ ├── peek_over.rs
│ │ └── sibling.rs
│ └── traversal.rs
├── aderyn_driver
│ ├── .gitignore
│ ├── benches
│ │ └── detectors.rs
│ ├── Cargo.toml
│ ├── README.md
│ ├── src
│ │ ├── compile.rs
│ │ ├── config.rs
│ │ ├── display.rs
│ │ ├── driver.rs
│ │ ├── interface
│ │ │ ├── json.rs
│ │ │ ├── lsp.rs
│ │ │ ├── markdown.rs
│ │ │ ├── mod.rs
│ │ │ ├── sarif.rs
│ │ │ ├── tables.rs
│ │ │ └── util.rs
│ │ ├── lib.rs
│ │ ├── mcp.rs
│ │ ├── process.rs
│ │ └── runner.rs
│ └── tests
│ └── astgen.rs
├── bacon.toml
├── benchmarks
│ ├── aderyn
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── iteration_times.svg
│ │ │ └── pdf.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── iteration_times_small.svg
│ │ ├── iteration_times.svg
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── relative_iteration_times_small.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── SD.svg
│ │ └── typical.svg
│ ├── arbitrary-transfer-from
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── avoid-abi-encode-packed
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── block-timestamp-deadline
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── centralization-risk
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── constants-instead-of-literals
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── delegate-call-in-loop
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── deprecated-oz-functions
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── ecrecover
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── empty-block
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── hello_world
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── inconsistent-type-names
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── large-numeric-literal
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── non-reentrant-before-others
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── push-zero-opcode
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── report
│ │ └── index.html
│ ├── require-with-string
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── solmate-safe-transfer-lib
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── unindexed-events
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── unprotected-initializer
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── unsafe-erc20-functions
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── unsafe-oz-erc721-mint
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── unspecific-solidity-pragma
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── useless-internal-function
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── useless-modifier
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ ├── useless-public-function
│ │ ├── base
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ ├── change
│ │ │ └── estimates.json
│ │ ├── new
│ │ │ ├── benchmark.json
│ │ │ ├── estimates.json
│ │ │ ├── sample.json
│ │ │ └── tukey.json
│ │ └── report
│ │ ├── both
│ │ │ ├── pdf.svg
│ │ │ └── regression.svg
│ │ ├── change
│ │ │ ├── mean.svg
│ │ │ ├── median.svg
│ │ │ └── t-test.svg
│ │ ├── index.html
│ │ ├── MAD.svg
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ ├── pdf_small.svg
│ │ ├── pdf.svg
│ │ ├── regression_small.svg
│ │ ├── regression.svg
│ │ ├── relative_pdf_small.svg
│ │ ├── relative_regression_small.svg
│ │ ├── SD.svg
│ │ ├── slope.svg
│ │ └── typical.svg
│ └── zero-address-check
│ ├── base
│ │ ├── benchmark.json
│ │ ├── estimates.json
│ │ ├── sample.json
│ │ └── tukey.json
│ ├── change
│ │ └── estimates.json
│ ├── new
│ │ ├── benchmark.json
│ │ ├── estimates.json
│ │ ├── sample.json
│ │ └── tukey.json
│ └── report
│ ├── both
│ │ ├── pdf.svg
│ │ └── regression.svg
│ ├── change
│ │ ├── mean.svg
│ │ ├── median.svg
│ │ └── t-test.svg
│ ├── index.html
│ ├── MAD.svg
│ ├── mean.svg
│ ├── median.svg
│ ├── pdf_small.svg
│ ├── pdf.svg
│ ├── regression_small.svg
│ ├── regression.svg
│ ├── relative_pdf_small.svg
│ ├── relative_regression_small.svg
│ ├── SD.svg
│ ├── slope.svg
│ └── typical.svg
├── Cargo.lock
├── Cargo.toml
├── cli
│ ├── benchmarks.sh
│ └── reportgen.sh
├── CODEOWNERS
├── CONTRIBUTING.md
├── cyfrinup
│ ├── dynamic_script
│ └── why.md
├── deny.toml
├── dist-workspace.toml
├── funding.json
├── LICENSE
├── Makefile
├── package-lock.json
├── package.json
├── README.md
├── RELEASE_CHECKLIST.md
├── reports
│ ├── adhoc-sol-files-highs-only-report.json
│ ├── adhoc-sol-files-report.md
│ ├── ccip-functions-report.md
│ ├── empty_report.md
│ ├── hardhat-playground-report.md
│ ├── nft-report-icm.md
│ ├── nft-report.md
│ ├── prb-math-report.md
│ ├── report.json
│ ├── report.md
│ ├── report.sarif
│ ├── sablier-aderyn-toml-nested-root.md
│ ├── templegold-report.md
│ └── uniswap_profile.md
├── rust-toolchain.toml
├── rustfmt.toml
├── tests
│ ├── adhoc-sol-files
│ │ ├── aderyn.toml
│ │ ├── Counter.sol
│ │ ├── DemoASTNodes.sol
│ │ ├── Helper.sol
│ │ ├── InconsistentUints.sol
│ │ ├── inheritance
│ │ │ ├── ExtendedInheritance.sol
│ │ │ ├── IContractInheritance.sol
│ │ │ └── InheritanceBase.sol
│ │ ├── InternalFunctions.sol
│ │ ├── lib
│ │ │ └── ThisShouldBeExcluded.sol
│ │ ├── multiple-versions
│ │ │ ├── 0.4
│ │ │ │ ├── A.sol
│ │ │ │ └── B.sol
│ │ │ ├── 0.5
│ │ │ │ ├── A.sol
│ │ │ │ └── B.sol
│ │ │ ├── 0.6
│ │ │ │ ├── A.sol
│ │ │ │ └── B.sol
│ │ │ ├── 0.7
│ │ │ │ ├── A.sol
│ │ │ │ └── B.sol
│ │ │ └── 0.8
│ │ │ ├── A.sol
│ │ │ └── B.sol
│ │ ├── OnceModifierExample.sol
│ │ └── StateVariables.sol
│ ├── ast
│ │ ├── abstract_contract.json
│ │ ├── address_payable.json
│ │ ├── array_type_name.json
│ │ ├── ast-erc4626.json
│ │ ├── base_constructor_call.json
│ │ ├── bit_not.json
│ │ ├── call.json
│ │ ├── constructor.json
│ │ ├── contract_dep_order.json
│ │ ├── do_while.json
│ │ ├── documentation_1.json
│ │ ├── documentation_2.json
│ │ ├── documentation_3.json
│ │ ├── documentation_local_variable.json
│ │ ├── documentation_on_statements.json
│ │ ├── documentation_triple.json
│ │ ├── empty_block.json
│ │ ├── enum_value_declaration.json
│ │ ├── enum_value.json
│ │ ├── event_definition.json
│ │ ├── experimental_encoder_pragma.json
│ │ ├── fallback_and_reveice_ether.json
│ │ ├── fallback_payable.json
│ │ ├── fallback.json
│ │ ├── function_type.json
│ │ ├── function.json
│ │ ├── global_enum.json
│ │ ├── global_struct.json
│ │ ├── inheritance_specifier.json
│ │ ├── leave.json
│ │ ├── license.json
│ │ ├── long_type_name_binary_operation.json
│ │ ├── long_type_name_identifier.json
│ │ ├── loop.json
│ │ ├── mappings.json
│ │ ├── modifier_definition.json
│ │ ├── modifier_invocation.json
│ │ ├── mutability.json
│ │ ├── nested_functions.json
│ │ ├── non_utf8.json
│ │ ├── override.json
│ │ ├── placeholder_statement.json
│ │ ├── receive_ether.json
│ │ ├── short_type_name_ref.json
│ │ ├── short_type_name.json
│ │ ├── slot_offset.json
│ │ ├── smoke.json
│ │ ├── source_location.json
│ │ ├── string.json
│ │ ├── stringlit.json
│ │ ├── switch_default.json
│ │ ├── switch.json
│ │ ├── try_catch.json
│ │ ├── two_base_functions.json
│ │ ├── unicode.json
│ │ ├── used_errors.json
│ │ ├── userDefinedValueType.json
│ │ ├── using_for_directive.json
│ │ ├── var_access.json
│ │ └── yul_hex_literal.json
│ ├── contract-playground
│ │ ├── .github
│ │ │ └── workflows
│ │ │ └── test.yml
│ │ ├── .gitignore
│ │ ├── dot
│ │ │ └── .gitkeep
│ │ ├── foundry.toml
│ │ ├── README.md
│ │ ├── script
│ │ │ └── Counter.s.sol
│ │ ├── src
│ │ │ ├── AbstractContract.sol
│ │ │ ├── AderynIgnoreCustomDetectors.sol
│ │ │ ├── AdminContract.sol
│ │ │ ├── ArbitraryTransferFrom.sol
│ │ │ ├── AssemblyExample.sol
│ │ │ ├── AssertStateChange.sol
│ │ │ ├── auditor_mode
│ │ │ │ ├── ExternalCalls.sol
│ │ │ │ └── PublicFunctionsWithoutSenderCheck.sol
│ │ │ ├── BooleanEquality.sol
│ │ │ ├── BuiltinSymbolShadow.sol
│ │ │ ├── CacheArrayLength.sol
│ │ │ ├── CallGraphTests.sol
│ │ │ ├── Casting.sol
│ │ │ ├── cloc
│ │ │ │ ├── AnotherHeavilyCommentedContract.sol
│ │ │ │ ├── EmptyContractFile.sol
│ │ │ │ └── HeavilyCommentedContract.sol
│ │ │ ├── CompilerBugStorageSignedIntegerArray.sol
│ │ │ ├── ConstantFuncsAssembly.sol
│ │ │ ├── ConstantsLiterals.sol
│ │ │ ├── ConstFuncChangeState.sol
│ │ │ ├── ContractLocksEther.sol
│ │ │ ├── ContractWithTodo.sol
│ │ │ ├── control_flow
│ │ │ │ └── SimpleProgram.sol
│ │ │ ├── CostlyOperationsInsideLoops.sol
│ │ │ ├── Counter.sol
│ │ │ ├── CrazyPragma.sol
│ │ │ ├── DangerousStrictEquality1.sol
│ │ │ ├── DangerousStrictEquality2.sol
│ │ │ ├── DangerousUnaryOperator.sol
│ │ │ ├── DeadCode.sol
│ │ │ ├── DelegateCallWithoutAddressCheck.sol
│ │ │ ├── DeletionNestedMappingStructureContract.sol
│ │ │ ├── DeprecatedOZFunctions.sol
│ │ │ ├── DivisionBeforeMultiplication.sol
│ │ │ ├── DynamicArrayLengthAssignment.sol
│ │ │ ├── EmitAfterExternalCall.sol
│ │ │ ├── EmptyBlocks.sol
│ │ │ ├── EnumerableSetIteration.sol
│ │ │ ├── eth2
│ │ │ │ └── DepositContract.sol
│ │ │ ├── ExperimentalEncoder.sol
│ │ │ ├── ExternalCalls.sol
│ │ │ ├── FunctionInitializingState.sol
│ │ │ ├── FunctionPointers.sol
│ │ │ ├── FunctionSignatureCollision.sol
│ │ │ ├── HugeConstants.sol
│ │ │ ├── IgnoreEverything.sol
│ │ │ ├── InconsistentUints.sol
│ │ │ ├── IncorrectCaretOperator.sol
│ │ │ ├── IncorrectERC20.sol
│ │ │ ├── IncorrectERC721.sol
│ │ │ ├── IncorrectModifier.sol
│ │ │ ├── IncorrectShift.sol
│ │ │ ├── inheritance
│ │ │ │ ├── ExtendedInheritance.sol
│ │ │ │ ├── IContractInheritance.sol
│ │ │ │ └── InheritanceBase.sol
│ │ │ ├── InternalFunctions.sol
│ │ │ ├── KeccakContract.sol
│ │ │ ├── LocalVariableShadow.sol
│ │ │ ├── MissingInheritance.sol
│ │ │ ├── MisusedBoolean.sol
│ │ │ ├── MsgValueInLoop.sol
│ │ │ ├── MultipleConstructorSchemes.sol
│ │ │ ├── MultiplePlaceholders.sol
│ │ │ ├── nested
│ │ │ │ ├── 1
│ │ │ │ │ └── Nested.sol
│ │ │ │ └── 2
│ │ │ │ └── Nested.sol
│ │ │ ├── nested_mappings
│ │ │ │ ├── LaterVersion.sol
│ │ │ │ └── NestedMappings.sol
│ │ │ ├── OnceModifierExample.sol
│ │ │ ├── OnlyLibrary.sol
│ │ │ ├── OutOfOrderRetryable.sol
│ │ │ ├── parent_chain
│ │ │ │ └── ParentChainContract.sol
│ │ │ ├── PragmaRange.sol
│ │ │ ├── PreDeclaredVarUsage.sol
│ │ │ ├── PublicFunction.sol
│ │ │ ├── PublicVariableReadInExternalContext.sol
│ │ │ ├── RedundantStatements.sol
│ │ │ ├── ReturnBomb.sol
│ │ │ ├── reused_contract_name
│ │ │ │ ├── ContractA.sol
│ │ │ │ └── ContractB.sol
│ │ │ ├── RevertsAndRequriesInLoops.sol
│ │ │ ├── router
│ │ │ │ ├── ExternalCalls.sol
│ │ │ │ ├── FallbackAndReceiveOverrides.sol
│ │ │ │ ├── InternalCalls.sol
│ │ │ │ ├── ModifierCalls.sol
│ │ │ │ └── VarOverridesFunction.sol
│ │ │ ├── RTLO.sol
│ │ │ ├── SendEtherNoChecks.sol
│ │ │ ├── SendEtherNoChecksLibImport.sol
│ │ │ ├── StateChangeAfterExternalCall.sol
│ │ │ ├── StateShadowing.sol
│ │ │ ├── StateVariableCouldBeDeclaredConstant.sol
│ │ │ ├── StateVariableCouldBeDeclaredImmutable.sol
│ │ │ ├── StateVariables.sol
│ │ │ ├── StateVariablesChangesWithoutEvents.sol
│ │ │ ├── StateVariablesManipulation.sol
│ │ │ ├── StorageConditionals.sol
│ │ │ ├── StorageParameters.sol
│ │ │ ├── T11sTranferer.sol
│ │ │ ├── TautologicalCompare.sol
│ │ │ ├── TautologyOrContradiction.sol
│ │ │ ├── TestERC20.sol
│ │ │ ├── TransientKeyword.sol
│ │ │ ├── Trump.sol
│ │ │ ├── TxOriginUsedForAuth.sol
│ │ │ ├── U2.sol
│ │ │ ├── U3.sol
│ │ │ ├── U4.sol
│ │ │ ├── U5.sol
│ │ │ ├── UncheckedCalls.sol
│ │ │ ├── UncheckedReturn.sol
│ │ │ ├── UncheckedSend.sol
│ │ │ ├── UninitializedLocalVariables.sol
│ │ │ ├── UninitializedStateVariable.sol
│ │ │ ├── uniswap
│ │ │ │ ├── UniswapV2Swapper.sol
│ │ │ │ └── UniswapV3Swapper.sol
│ │ │ ├── UnprotectedInitialize.sol
│ │ │ ├── UnsafeERC721Mint.sol
│ │ │ ├── UnusedError.sol
│ │ │ ├── UnusedImport.sol
│ │ │ ├── UnusedStateVariables.sol
│ │ │ ├── UsingSelfdestruct.sol
│ │ │ ├── VoidConstructor.sol
│ │ │ ├── WeakRandomness.sol
│ │ │ ├── WrongOrderOfLayout.sol
│ │ │ ├── YulReturn.sol
│ │ │ └── ZeroAddressCheck.sol
│ │ └── test
│ │ └── Counter.t.sol
│ ├── foundry-nft-f23
│ │ ├── .github
│ │ │ └── workflows
│ │ │ └── test.yml
│ │ ├── .gitignore
│ │ ├── foundry.lock
│ │ ├── foundry.toml
│ │ ├── README.md
│ │ ├── remappings.txt
│ │ └── src
│ │ ├── BasicNft.sol
│ │ ├── F1.sol
│ │ ├── F2.sol
│ │ ├── Initializer.sol
│ │ └── inner-core-modules
│ │ └── ICM.sol
│ ├── foundry-nft-f23-icm
│ │ ├── .github
│ │ │ └── workflows
│ │ │ └── test.yml
│ │ ├── .gitignore
│ │ ├── aderyn.toml
│ │ ├── foundry.toml
│ │ ├── README.md
│ │ ├── remappings.txt
│ │ └── src
│ │ ├── BasicNft.sol
│ │ ├── F1.sol
│ │ ├── F2.sol
│ │ ├── Initializer.sol
│ │ └── inner-core-modules
│ │ └── ICM.sol
│ ├── hardhat-js-playground
│ │ ├── .gitignore
│ │ ├── artifacts
│ │ │ ├── build-info
│ │ │ │ └── cee6fe9a9a2f03f7ff10a27ab2746af6.json
│ │ │ └── contracts
│ │ │ ├── Counter.sol
│ │ │ │ ├── Counter.dbg.json
│ │ │ │ └── Counter.json
│ │ │ ├── ExtendedInheritance.sol
│ │ │ │ ├── ExtendedInheritance.dbg.json
│ │ │ │ └── ExtendedInheritance.json
│ │ │ ├── IContractInheritance.sol
│ │ │ │ ├── IContractInheritance.dbg.json
│ │ │ │ └── IContractInheritance.json
│ │ │ ├── InheritanceBase.sol
│ │ │ │ ├── InheritanceBase.dbg.json
│ │ │ │ └── InheritanceBase.json
│ │ │ ├── KeccakContract.sol
│ │ │ │ ├── KeccakContract.dbg.json
│ │ │ │ └── KeccakContract.json
│ │ │ ├── Lock.sol
│ │ │ │ ├── Lock.dbg.json
│ │ │ │ └── Lock.json
│ │ │ └── StateVariables.sol
│ │ │ ├── StateVariables.dbg.json
│ │ │ └── StateVariables.json
│ │ ├── contracts
│ │ │ ├── Counter.sol
│ │ │ ├── ExtendedInheritance.sol
│ │ │ ├── IContractInheritance.sol
│ │ │ ├── InheritanceBase.sol
│ │ │ ├── KeccakContract.sol
│ │ │ ├── Lock.sol
│ │ │ └── StateVariables.sol
│ │ ├── hardhat.config.js
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── scripts
│ │ │ └── deploy.js
│ │ ├── test
│ │ │ └── Lock.js
│ │ └── yarn.lock
│ ├── no-sol-files
│ │ ├── extra
│ │ │ └── HelloAgain.md
│ │ ├── Hello.txt
│ │ └── Hello.yul
│ └── toml
│ ├── nested_project1
│ │ ├── aderyn.toml
│ │ ├── folder1
│ │ │ └── hardhat.config.ts
│ │ ├── folder2
│ │ │ └── hardhat.config.ts
│ │ └── folder3
│ │ └── file.txt
│ └── nested_project2
│ ├── aderyn.toml
│ ├── folder1
│ │ └── foundry.toml
│ └── folder2
│ └── file1.txt
├── tools
│ └── xtask
│ ├── Cargo.toml
│ └── src
│ ├── blesspr.rs
│ ├── cut_release.rs
│ ├── flags.rs
│ ├── main.rs
│ ├── reportgen.rs
│ └── tomlgen.rs
└── typos.toml
```
# Files
--------------------------------------------------------------------------------
/benchmarks/ecrecover/report/regression.svg:
--------------------------------------------------------------------------------
```
1 | <svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
2 | <text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
3 | ecrecover
4 | </text>
5 | <text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
6 | Total sample time (ms)
7 | </text>
8 | <text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
9 | Iterations (x 10^3)
10 | </text>
11 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="165" y1="472" x2="165" y2="53"/>
12 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="252" y1="472" x2="252" y2="53"/>
13 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="339" y1="472" x2="339" y2="53"/>
14 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="426" y1="472" x2="426" y2="53"/>
15 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="513" y1="472" x2="513" y2="53"/>
16 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="601" y1="472" x2="601" y2="53"/>
17 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="688" y1="472" x2="688" y2="53"/>
18 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="775" y1="472" x2="775" y2="53"/>
19 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="862" y1="472" x2="862" y2="53"/>
20 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="436" x2="932" y2="436"/>
21 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="397" x2="932" y2="397"/>
22 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="359" x2="932" y2="359"/>
23 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="320" x2="932" y2="320"/>
24 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="281" x2="932" y2="281"/>
25 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="243" x2="932" y2="243"/>
26 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="204" x2="932" y2="204"/>
27 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="166" x2="932" y2="166"/>
28 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="127" x2="932" y2="127"/>
29 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="88" x2="932" y2="88"/>
30 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
31 | <text x="77" y="436" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
32 | 20.0
33 | </text>
34 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,436 86,436 "/>
35 | <text x="77" y="397" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
36 | 40.0
37 | </text>
38 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,397 86,397 "/>
39 | <text x="77" y="359" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
40 | 60.0
41 | </text>
42 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,359 86,359 "/>
43 | <text x="77" y="320" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
44 | 80.0
45 | </text>
46 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,320 86,320 "/>
47 | <text x="77" y="281" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
48 | 100.0
49 | </text>
50 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,281 86,281 "/>
51 | <text x="77" y="243" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
52 | 120.0
53 | </text>
54 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,243 86,243 "/>
55 | <text x="77" y="204" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
56 | 140.0
57 | </text>
58 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,204 86,204 "/>
59 | <text x="77" y="166" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
60 | 160.0
61 | </text>
62 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,166 86,166 "/>
63 | <text x="77" y="127" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
64 | 180.0
65 | </text>
66 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,127 86,127 "/>
67 | <text x="77" y="88" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
68 | 200.0
69 | </text>
70 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,88 86,88 "/>
71 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
72 | <text x="165" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
73 | 2
74 | </text>
75 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="165,473 165,478 "/>
76 | <text x="252" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
77 | 4
78 | </text>
79 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="252,473 252,478 "/>
80 | <text x="339" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
81 | 6
82 | </text>
83 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="339,473 339,478 "/>
84 | <text x="426" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
85 | 8
86 | </text>
87 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="426,473 426,478 "/>
88 | <text x="513" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
89 | 10
90 | </text>
91 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="513,473 513,478 "/>
92 | <text x="601" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
93 | 12
94 | </text>
95 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="601,473 601,478 "/>
96 | <text x="688" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
97 | 14
98 | </text>
99 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="688,473 688,478 "/>
100 | <text x="775" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
101 | 16
102 | </text>
103 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="775,473 775,478 "/>
104 | <text x="862" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
105 | 18
106 | </text>
107 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="862,473 862,478 "/>
108 | <circle cx="87" cy="472" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
109 | <circle cx="95" cy="471" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
110 | <circle cx="104" cy="467" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
111 | <circle cx="112" cy="467" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
112 | <circle cx="121" cy="465" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
113 | <circle cx="129" cy="463" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
114 | <circle cx="138" cy="461" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
115 | <circle cx="146" cy="460" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
116 | <circle cx="155" cy="458" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
117 | <circle cx="163" cy="456" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
118 | <circle cx="172" cy="454" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
119 | <circle cx="180" cy="452" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
120 | <circle cx="189" cy="450" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
121 | <circle cx="197" cy="448" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
122 | <circle cx="206" cy="447" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
123 | <circle cx="215" cy="445" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
124 | <circle cx="223" cy="444" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
125 | <circle cx="232" cy="441" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
126 | <circle cx="240" cy="440" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
127 | <circle cx="249" cy="438" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
128 | <circle cx="257" cy="436" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
129 | <circle cx="266" cy="434" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
130 | <circle cx="274" cy="432" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
131 | <circle cx="283" cy="430" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
132 | <circle cx="291" cy="428" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
133 | <circle cx="300" cy="426" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
134 | <circle cx="308" cy="425" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
135 | <circle cx="317" cy="423" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
136 | <circle cx="325" cy="420" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
137 | <circle cx="334" cy="420" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
138 | <circle cx="343" cy="417" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
139 | <circle cx="351" cy="415" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
140 | <circle cx="360" cy="414" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
141 | <circle cx="368" cy="412" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
142 | <circle cx="377" cy="409" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
143 | <circle cx="385" cy="405" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
144 | <circle cx="394" cy="407" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
145 | <circle cx="402" cy="405" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
146 | <circle cx="411" cy="404" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
147 | <circle cx="419" cy="403" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
148 | <circle cx="428" cy="398" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
149 | <circle cx="436" cy="395" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
150 | <circle cx="445" cy="393" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
151 | <circle cx="454" cy="390" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
152 | <circle cx="462" cy="384" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
153 | <circle cx="471" cy="378" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
154 | <circle cx="479" cy="377" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
155 | <circle cx="488" cy="376" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
156 | <circle cx="496" cy="374" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
157 | <circle cx="505" cy="366" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
158 | <circle cx="513" cy="376" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
159 | <circle cx="522" cy="374" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
160 | <circle cx="530" cy="373" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
161 | <circle cx="539" cy="371" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
162 | <circle cx="547" cy="370" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
163 | <circle cx="556" cy="366" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
164 | <circle cx="564" cy="363" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
165 | <circle cx="573" cy="359" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
166 | <circle cx="582" cy="357" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
167 | <circle cx="590" cy="355" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
168 | <circle cx="599" cy="357" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
169 | <circle cx="607" cy="353" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
170 | <circle cx="616" cy="351" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
171 | <circle cx="624" cy="351" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
172 | <circle cx="633" cy="348" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
173 | <circle cx="641" cy="346" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
174 | <circle cx="650" cy="344" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
175 | <circle cx="658" cy="342" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
176 | <circle cx="667" cy="339" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
177 | <circle cx="675" cy="339" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
178 | <circle cx="684" cy="243" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
179 | <circle cx="693" cy="342" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
180 | <circle cx="701" cy="331" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
181 | <circle cx="710" cy="334" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
182 | <circle cx="718" cy="330" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
183 | <circle cx="727" cy="325" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
184 | <circle cx="735" cy="317" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
185 | <circle cx="744" cy="319" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
186 | <circle cx="752" cy="320" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
187 | <circle cx="761" cy="320" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
188 | <circle cx="769" cy="317" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
189 | <circle cx="778" cy="323" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
190 | <circle cx="786" cy="316" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
191 | <circle cx="795" cy="314" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
192 | <circle cx="803" cy="309" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
193 | <circle cx="812" cy="309" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
194 | <circle cx="821" cy="306" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
195 | <circle cx="829" cy="304" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
196 | <circle cx="838" cy="302" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
197 | <circle cx="846" cy="305" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
198 | <circle cx="855" cy="296" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
199 | <circle cx="863" cy="282" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
200 | <circle cx="872" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
201 | <circle cx="880" cy="285" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
202 | <circle cx="889" cy="293" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
203 | <circle cx="897" cy="291" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
204 | <circle cx="906" cy="277" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
205 | <circle cx="914" cy="261" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
206 | <circle cx="923" cy="270" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
207 | <circle cx="932" cy="281" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
208 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,473 932,271 "/>
209 | <polygon opacity="0.25" fill="#1F78B4" points="87,473 932,280 932,255 "/>
210 | <text x="132" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
211 | Sample
212 | </text>
213 | <text x="132" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
214 | Linear regression
215 | </text>
216 | <text x="132" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
217 | Confidence interval
218 | </text>
219 | <circle cx="112" cy="73" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
220 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="2" points="102,88 122,88 "/>
221 | <rect x="102" y="98" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
222 | </svg>
223 |
```
--------------------------------------------------------------------------------
/benchmarks/deprecated-oz-functions/report/regression.svg:
--------------------------------------------------------------------------------
```
1 | <svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
2 | <text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
3 | deprecated-oz-functions
4 | </text>
5 | <text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
6 | Total sample time (ms)
7 | </text>
8 | <text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
9 | Iterations
10 | </text>
11 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="185" y1="472" x2="185" y2="53"/>
12 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="291" y1="472" x2="291" y2="53"/>
13 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="398" y1="472" x2="398" y2="53"/>
14 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="505" y1="472" x2="505" y2="53"/>
15 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="611" y1="472" x2="611" y2="53"/>
16 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="718" y1="472" x2="718" y2="53"/>
17 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="825" y1="472" x2="825" y2="53"/>
18 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="932" y1="472" x2="932" y2="53"/>
19 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="440" x2="932" y2="440"/>
20 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="404" x2="932" y2="404"/>
21 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="367" x2="932" y2="367"/>
22 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="331" x2="932" y2="331"/>
23 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="295" x2="932" y2="295"/>
24 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="259" x2="932" y2="259"/>
25 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="223" x2="932" y2="223"/>
26 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="186" x2="932" y2="186"/>
27 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="150" x2="932" y2="150"/>
28 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="114" x2="932" y2="114"/>
29 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="78" x2="932" y2="78"/>
30 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
31 | <text x="77" y="440" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
32 | 10.0
33 | </text>
34 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,440 86,440 "/>
35 | <text x="77" y="404" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
36 | 20.0
37 | </text>
38 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,404 86,404 "/>
39 | <text x="77" y="367" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
40 | 30.0
41 | </text>
42 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,367 86,367 "/>
43 | <text x="77" y="331" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
44 | 40.0
45 | </text>
46 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,331 86,331 "/>
47 | <text x="77" y="295" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
48 | 50.0
49 | </text>
50 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,295 86,295 "/>
51 | <text x="77" y="259" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
52 | 60.0
53 | </text>
54 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,259 86,259 "/>
55 | <text x="77" y="223" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
56 | 70.0
57 | </text>
58 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,223 86,223 "/>
59 | <text x="77" y="186" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
60 | 80.0
61 | </text>
62 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,186 86,186 "/>
63 | <text x="77" y="150" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
64 | 90.0
65 | </text>
66 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,150 86,150 "/>
67 | <text x="77" y="114" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
68 | 100.0
69 | </text>
70 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,114 86,114 "/>
71 | <text x="77" y="78" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
72 | 110.0
73 | </text>
74 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,78 86,78 "/>
75 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
76 | <text x="185" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
77 | 50
78 | </text>
79 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="185,473 185,478 "/>
80 | <text x="291" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
81 | 100
82 | </text>
83 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="291,473 291,478 "/>
84 | <text x="398" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
85 | 150
86 | </text>
87 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="398,473 398,478 "/>
88 | <text x="505" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
89 | 200
90 | </text>
91 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="505,473 505,478 "/>
92 | <text x="611" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
93 | 250
94 | </text>
95 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="611,473 611,478 "/>
96 | <text x="718" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
97 | 300
98 | </text>
99 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="718,473 718,478 "/>
100 | <text x="825" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
101 | 350
102 | </text>
103 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="825,473 825,478 "/>
104 | <text x="932" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
105 | 400
106 | </text>
107 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="932,473 932,478 "/>
108 | <circle cx="87" cy="472" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
109 | <circle cx="95" cy="468" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
110 | <circle cx="104" cy="463" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
111 | <circle cx="112" cy="461" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
112 | <circle cx="121" cy="456" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
113 | <circle cx="129" cy="453" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
114 | <circle cx="138" cy="449" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
115 | <circle cx="146" cy="445" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
116 | <circle cx="155" cy="443" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
117 | <circle cx="163" cy="438" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
118 | <circle cx="172" cy="433" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
119 | <circle cx="180" cy="431" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
120 | <circle cx="189" cy="426" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
121 | <circle cx="197" cy="422" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
122 | <circle cx="206" cy="419" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
123 | <circle cx="215" cy="415" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
124 | <circle cx="223" cy="411" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
125 | <circle cx="232" cy="408" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
126 | <circle cx="240" cy="405" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
127 | <circle cx="249" cy="403" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
128 | <circle cx="257" cy="397" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
129 | <circle cx="266" cy="382" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
130 | <circle cx="274" cy="388" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
131 | <circle cx="283" cy="384" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
132 | <circle cx="291" cy="380" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
133 | <circle cx="300" cy="375" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
134 | <circle cx="308" cy="364" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
135 | <circle cx="317" cy="331" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
136 | <circle cx="325" cy="344" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
137 | <circle cx="334" cy="331" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
138 | <circle cx="343" cy="338" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
139 | <circle cx="351" cy="189" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
140 | <circle cx="360" cy="309" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
141 | <circle cx="368" cy="332" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
142 | <circle cx="377" cy="335" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
143 | <circle cx="385" cy="338" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
144 | <circle cx="394" cy="331" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
145 | <circle cx="402" cy="331" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
146 | <circle cx="411" cy="323" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
147 | <circle cx="419" cy="331" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
148 | <circle cx="428" cy="327" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
149 | <circle cx="436" cy="321" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
150 | <circle cx="445" cy="312" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
151 | <circle cx="454" cy="313" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
152 | <circle cx="462" cy="309" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
153 | <circle cx="471" cy="304" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
154 | <circle cx="479" cy="301" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
155 | <circle cx="488" cy="293" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
156 | <circle cx="496" cy="284" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
157 | <circle cx="505" cy="286" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
158 | <circle cx="513" cy="284" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
159 | <circle cx="522" cy="279" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
160 | <circle cx="530" cy="186" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
161 | <circle cx="539" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
162 | <circle cx="547" cy="271" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
163 | <circle cx="556" cy="269" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
164 | <circle cx="564" cy="267" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
165 | <circle cx="573" cy="253" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
166 | <circle cx="582" cy="257" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
167 | <circle cx="590" cy="252" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
168 | <circle cx="599" cy="236" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
169 | <circle cx="607" cy="246" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
170 | <circle cx="616" cy="225" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
171 | <circle cx="624" cy="138" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
172 | <circle cx="633" cy="192" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
173 | <circle cx="641" cy="224" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
174 | <circle cx="650" cy="192" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
175 | <circle cx="658" cy="204" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
176 | <circle cx="667" cy="197" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
177 | <circle cx="675" cy="210" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
178 | <circle cx="684" cy="215" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
179 | <circle cx="693" cy="205" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
180 | <circle cx="701" cy="203" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
181 | <circle cx="710" cy="201" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
182 | <circle cx="718" cy="196" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
183 | <circle cx="727" cy="191" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
184 | <circle cx="735" cy="185" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
185 | <circle cx="744" cy="179" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
186 | <circle cx="752" cy="184" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
187 | <circle cx="761" cy="183" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
188 | <circle cx="769" cy="179" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
189 | <circle cx="778" cy="172" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
190 | <circle cx="786" cy="179" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
191 | <circle cx="795" cy="165" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
192 | <circle cx="803" cy="159" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
193 | <circle cx="812" cy="173" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
194 | <circle cx="821" cy="163" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
195 | <circle cx="829" cy="156" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
196 | <circle cx="838" cy="158" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
197 | <circle cx="846" cy="147" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
198 | <circle cx="855" cy="147" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
199 | <circle cx="863" cy="140" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
200 | <circle cx="872" cy="144" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
201 | <circle cx="880" cy="135" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
202 | <circle cx="889" cy="131" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
203 | <circle cx="897" cy="92" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
204 | <circle cx="906" cy="118" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
205 | <circle cx="914" cy="117" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
206 | <circle cx="923" cy="119" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
207 | <circle cx="932" cy="111" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
208 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,473 932,93 "/>
209 | <polygon opacity="0.25" fill="#1F78B4" points="87,473 932,101 932,81 "/>
210 | <text x="132" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
211 | Sample
212 | </text>
213 | <text x="132" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
214 | Linear regression
215 | </text>
216 | <text x="132" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
217 | Confidence interval
218 | </text>
219 | <circle cx="112" cy="73" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
220 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="2" points="102,88 122,88 "/>
221 | <rect x="102" y="98" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
222 | </svg>
223 |
```
--------------------------------------------------------------------------------
/benchmarks/inconsistent-type-names/report/regression.svg:
--------------------------------------------------------------------------------
```
1 | <svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
2 | <text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
3 | inconsistent-type-names
4 | </text>
5 | <text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
6 | Total sample time (ms)
7 | </text>
8 | <text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
9 | Iterations
10 | </text>
11 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="163" y1="472" x2="163" y2="53"/>
12 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="249" y1="472" x2="249" y2="53"/>
13 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="334" y1="472" x2="334" y2="53"/>
14 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="419" y1="472" x2="419" y2="53"/>
15 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="505" y1="472" x2="505" y2="53"/>
16 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="590" y1="472" x2="590" y2="53"/>
17 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="675" y1="472" x2="675" y2="53"/>
18 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="761" y1="472" x2="761" y2="53"/>
19 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="846" y1="472" x2="846" y2="53"/>
20 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="932" y1="472" x2="932" y2="53"/>
21 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="435" x2="932" y2="435"/>
22 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="394" x2="932" y2="394"/>
23 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="353" x2="932" y2="353"/>
24 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="313" x2="932" y2="313"/>
25 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="272" x2="932" y2="272"/>
26 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="232" x2="932" y2="232"/>
27 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="191" x2="932" y2="191"/>
28 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="150" x2="932" y2="150"/>
29 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="110" x2="932" y2="110"/>
30 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="69" x2="932" y2="69"/>
31 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
32 | <text x="77" y="435" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
33 | 20.0
34 | </text>
35 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,435 86,435 "/>
36 | <text x="77" y="394" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
37 | 40.0
38 | </text>
39 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,394 86,394 "/>
40 | <text x="77" y="353" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
41 | 60.0
42 | </text>
43 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,353 86,353 "/>
44 | <text x="77" y="313" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
45 | 80.0
46 | </text>
47 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,313 86,313 "/>
48 | <text x="77" y="272" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
49 | 100.0
50 | </text>
51 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,272 86,272 "/>
52 | <text x="77" y="232" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
53 | 120.0
54 | </text>
55 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,232 86,232 "/>
56 | <text x="77" y="191" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
57 | 140.0
58 | </text>
59 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,191 86,191 "/>
60 | <text x="77" y="150" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
61 | 160.0
62 | </text>
63 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,150 86,150 "/>
64 | <text x="77" y="110" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
65 | 180.0
66 | </text>
67 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,110 86,110 "/>
68 | <text x="77" y="69" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
69 | 200.0
70 | </text>
71 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,69 86,69 "/>
72 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
73 | <text x="163" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
74 | 10
75 | </text>
76 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="163,473 163,478 "/>
77 | <text x="249" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
78 | 20
79 | </text>
80 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="249,473 249,478 "/>
81 | <text x="334" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
82 | 30
83 | </text>
84 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="334,473 334,478 "/>
85 | <text x="419" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
86 | 40
87 | </text>
88 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="419,473 419,478 "/>
89 | <text x="505" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
90 | 50
91 | </text>
92 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="505,473 505,478 "/>
93 | <text x="590" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
94 | 60
95 | </text>
96 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="590,473 590,478 "/>
97 | <text x="675" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
98 | 70
99 | </text>
100 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="675,473 675,478 "/>
101 | <text x="761" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
102 | 80
103 | </text>
104 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="761,473 761,478 "/>
105 | <text x="846" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
106 | 90
107 | </text>
108 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="846,473 846,478 "/>
109 | <text x="932" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
110 | 100
111 | </text>
112 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="932,473 932,478 "/>
113 | <circle cx="87" cy="472" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
114 | <circle cx="95" cy="468" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
115 | <circle cx="104" cy="466" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
116 | <circle cx="112" cy="462" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
117 | <circle cx="121" cy="460" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
118 | <circle cx="129" cy="457" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
119 | <circle cx="138" cy="456" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
120 | <circle cx="146" cy="451" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
121 | <circle cx="155" cy="449" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
122 | <circle cx="163" cy="447" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
123 | <circle cx="172" cy="445" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
124 | <circle cx="180" cy="442" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
125 | <circle cx="189" cy="439" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
126 | <circle cx="197" cy="436" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
127 | <circle cx="206" cy="433" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
128 | <circle cx="215" cy="429" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
129 | <circle cx="223" cy="425" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
130 | <circle cx="232" cy="426" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
131 | <circle cx="240" cy="370" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
132 | <circle cx="249" cy="405" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
133 | <circle cx="257" cy="407" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
134 | <circle cx="266" cy="404" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
135 | <circle cx="274" cy="407" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
136 | <circle cx="283" cy="387" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
137 | <circle cx="291" cy="408" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
138 | <circle cx="300" cy="405" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
139 | <circle cx="308" cy="398" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
140 | <circle cx="317" cy="400" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
141 | <circle cx="325" cy="396" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
142 | <circle cx="334" cy="391" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
143 | <circle cx="343" cy="383" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
144 | <circle cx="351" cy="368" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
145 | <circle cx="360" cy="304" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
146 | <circle cx="368" cy="309" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
147 | <circle cx="377" cy="118" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
148 | <circle cx="385" cy="335" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
149 | <circle cx="394" cy="344" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
150 | <circle cx="402" cy="324" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
151 | <circle cx="411" cy="298" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
152 | <circle cx="419" cy="351" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
153 | <circle cx="428" cy="327" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
154 | <circle cx="436" cy="349" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
155 | <circle cx="445" cy="277" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
156 | <circle cx="454" cy="331" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
157 | <circle cx="462" cy="319" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
158 | <circle cx="471" cy="326" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
159 | <circle cx="479" cy="329" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
160 | <circle cx="488" cy="328" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
161 | <circle cx="496" cy="325" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
162 | <circle cx="505" cy="334" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
163 | <circle cx="513" cy="331" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
164 | <circle cx="522" cy="326" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
165 | <circle cx="530" cy="212" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
166 | <circle cx="539" cy="264" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
167 | <circle cx="547" cy="288" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
168 | <circle cx="556" cy="293" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
169 | <circle cx="564" cy="284" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
170 | <circle cx="573" cy="275" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
171 | <circle cx="582" cy="286" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
172 | <circle cx="590" cy="273" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
173 | <circle cx="599" cy="279" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
174 | <circle cx="607" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
175 | <circle cx="616" cy="233" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
176 | <circle cx="624" cy="223" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
177 | <circle cx="633" cy="203" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
178 | <circle cx="641" cy="274" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
179 | <circle cx="650" cy="273" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
180 | <circle cx="658" cy="264" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
181 | <circle cx="667" cy="240" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
182 | <circle cx="675" cy="228" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
183 | <circle cx="684" cy="205" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
184 | <circle cx="693" cy="218" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
185 | <circle cx="701" cy="235" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
186 | <circle cx="710" cy="245" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
187 | <circle cx="718" cy="235" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
188 | <circle cx="727" cy="238" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
189 | <circle cx="735" cy="236" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
190 | <circle cx="744" cy="231" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
191 | <circle cx="752" cy="228" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
192 | <circle cx="761" cy="185" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
193 | <circle cx="769" cy="221" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
194 | <circle cx="778" cy="213" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
195 | <circle cx="786" cy="225" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
196 | <circle cx="795" cy="186" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
197 | <circle cx="803" cy="166" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
198 | <circle cx="812" cy="217" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
199 | <circle cx="821" cy="210" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
200 | <circle cx="829" cy="213" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
201 | <circle cx="838" cy="179" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
202 | <circle cx="846" cy="186" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
203 | <circle cx="855" cy="129" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
204 | <circle cx="863" cy="116" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
205 | <circle cx="872" cy="197" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
206 | <circle cx="880" cy="211" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
207 | <circle cx="889" cy="189" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
208 | <circle cx="897" cy="142" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
209 | <circle cx="906" cy="130" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
210 | <circle cx="914" cy="182" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
211 | <circle cx="923" cy="192" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
212 | <circle cx="932" cy="190" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
213 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,473 932,138 "/>
214 | <polygon opacity="0.25" fill="#1F78B4" points="87,473 932,151 932,124 "/>
215 | <text x="132" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
216 | Sample
217 | </text>
218 | <text x="132" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
219 | Linear regression
220 | </text>
221 | <text x="132" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
222 | Confidence interval
223 | </text>
224 | <circle cx="112" cy="73" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
225 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="2" points="102,88 122,88 "/>
226 | <rect x="102" y="98" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
227 | </svg>
228 |
```
--------------------------------------------------------------------------------
/aderyn_core/src/visitor/ast_visitor.rs:
--------------------------------------------------------------------------------
```rust
1 | use eyre::Result;
2 |
3 | use crate::ast::*;
4 |
5 | pub trait ASTConstVisitor {
6 | fn visit_array_type_name(&mut self, node: &ArrayTypeName) -> Result<bool> {
7 | self.visit_node(node)
8 | }
9 | fn end_visit_array_type_name(&mut self, node: &ArrayTypeName) -> Result<()> {
10 | self.end_visit_node(node)
11 | }
12 |
13 | fn visit_assignment(&mut self, node: &Assignment) -> Result<bool> {
14 | self.visit_node(node)
15 | }
16 | fn end_visit_assignment(&mut self, node: &Assignment) -> Result<()> {
17 | self.end_visit_node(node)
18 | }
19 |
20 | fn visit_binary_operation(&mut self, node: &BinaryOperation) -> Result<bool> {
21 | self.visit_node(node)
22 | }
23 | fn end_visit_binary_operation(&mut self, node: &BinaryOperation) -> Result<()> {
24 | self.end_visit_node(node)
25 | }
26 |
27 | fn visit_block(&mut self, node: &Block) -> Result<bool> {
28 | self.visit_node(node)
29 | }
30 | fn end_visit_block(&mut self, node: &Block) -> Result<()> {
31 | self.end_visit_node(node)
32 | }
33 |
34 | fn visit_unchecked_block(&mut self, node: &UncheckedBlock) -> Result<bool> {
35 | self.visit_node(node)
36 | }
37 | fn end_visit_unchecked_block(&mut self, node: &UncheckedBlock) -> Result<()> {
38 | self.end_visit_node(node)
39 | }
40 |
41 | fn visit_conditional(&mut self, node: &Conditional) -> Result<bool> {
42 | self.visit_node(node)
43 | }
44 | fn end_visit_conditional(&mut self, node: &Conditional) -> Result<()> {
45 | self.end_visit_node(node)
46 | }
47 |
48 | fn visit_contract_definition(&mut self, node: &ContractDefinition) -> Result<bool> {
49 | self.visit_node(node)
50 | }
51 | fn end_visit_contract_definition(&mut self, node: &ContractDefinition) -> Result<()> {
52 | self.end_visit_node(node)
53 | }
54 |
55 | fn visit_elementary_type_name(&mut self, node: &ElementaryTypeName) -> Result<bool> {
56 | self.visit_node(node)
57 | }
58 | fn end_visit_elementary_type_name(&mut self, node: &ElementaryTypeName) -> Result<()> {
59 | self.end_visit_node(node)
60 | }
61 |
62 | fn visit_elementary_type_name_expression(
63 | &mut self,
64 | node: &ElementaryTypeNameExpression,
65 | ) -> Result<bool> {
66 | self.visit_node(node)
67 | }
68 | fn end_visit_elementary_type_name_expression(
69 | &mut self,
70 | node: &ElementaryTypeNameExpression,
71 | ) -> Result<()> {
72 | self.end_visit_node(node)
73 | }
74 |
75 | fn visit_emit_statement(&mut self, node: &EmitStatement) -> Result<bool> {
76 | self.visit_node(node)
77 | }
78 | fn end_visit_emit_statement(&mut self, node: &EmitStatement) -> Result<()> {
79 | self.end_visit_node(node)
80 | }
81 |
82 | fn visit_enum_definition(&mut self, node: &EnumDefinition) -> Result<bool> {
83 | self.visit_node(node)
84 | }
85 | fn end_visit_enum_definition(&mut self, node: &EnumDefinition) -> Result<()> {
86 | self.end_visit_node(node)
87 | }
88 |
89 | fn visit_enum_value(&mut self, node: &EnumValue) -> Result<bool> {
90 | self.visit_node(node)
91 | }
92 | fn end_visit_enum_value(&mut self, node: &EnumValue) -> Result<()> {
93 | self.end_visit_node(node)
94 | }
95 |
96 | fn visit_event_definition(&mut self, node: &EventDefinition) -> Result<bool> {
97 | self.visit_node(node)
98 | }
99 | fn end_visit_event_definition(&mut self, node: &EventDefinition) -> Result<()> {
100 | self.end_visit_node(node)
101 | }
102 |
103 | fn visit_error_definition(&mut self, node: &ErrorDefinition) -> Result<bool> {
104 | self.visit_node(node)
105 | }
106 | fn end_visit_error_definition(&mut self, node: &ErrorDefinition) -> Result<()> {
107 | self.end_visit_node(node)
108 | }
109 |
110 | fn visit_expression_statement(&mut self, node: &ExpressionStatement) -> Result<bool> {
111 | self.visit_node(node)
112 | }
113 | fn end_visit_expression_statement(&mut self, node: &ExpressionStatement) -> Result<()> {
114 | self.end_visit_node(node)
115 | }
116 |
117 | fn visit_function_call(&mut self, node: &FunctionCall) -> Result<bool> {
118 | self.visit_node(node)
119 | }
120 | fn end_visit_function_call(&mut self, node: &FunctionCall) -> Result<()> {
121 | self.end_visit_node(node)
122 | }
123 |
124 | fn visit_function_call_options(&mut self, node: &FunctionCallOptions) -> Result<bool> {
125 | self.visit_node(node)
126 | }
127 | fn end_visit_function_call_options(&mut self, node: &FunctionCallOptions) -> Result<()> {
128 | self.end_visit_node(node)
129 | }
130 |
131 | fn visit_function_definition(&mut self, node: &FunctionDefinition) -> Result<bool> {
132 | self.visit_node(node)
133 | }
134 | fn end_visit_function_definition(&mut self, node: &FunctionDefinition) -> Result<()> {
135 | self.end_visit_node(node)
136 | }
137 |
138 | fn visit_function_type_name(&mut self, node: &FunctionTypeName) -> Result<bool> {
139 | self.visit_node(node)
140 | }
141 | fn end_visit_function_type_name(&mut self, node: &FunctionTypeName) -> Result<()> {
142 | self.end_visit_node(node)
143 | }
144 |
145 | fn visit_for_statement(&mut self, node: &ForStatement) -> Result<bool> {
146 | self.visit_node(node)
147 | }
148 | fn end_visit_for_statement(&mut self, node: &ForStatement) -> Result<()> {
149 | self.end_visit_node(node)
150 | }
151 |
152 | fn visit_identifier(&mut self, node: &Identifier) -> Result<bool> {
153 | self.visit_node(node)
154 | }
155 | fn end_visit_identifier(&mut self, node: &Identifier) -> Result<()> {
156 | self.end_visit_node(node)
157 | }
158 |
159 | fn visit_identifier_path(&mut self, node: &IdentifierPath) -> Result<bool> {
160 | self.visit_node(node)
161 | }
162 | fn end_visit_identifier_path(&mut self, node: &IdentifierPath) -> Result<()> {
163 | self.end_visit_node(node)
164 | }
165 |
166 | fn visit_if_statement(&mut self, node: &IfStatement) -> Result<bool> {
167 | self.visit_node(node)
168 | }
169 | fn end_visit_if_statement(&mut self, node: &IfStatement) -> Result<()> {
170 | self.end_visit_node(node)
171 | }
172 |
173 | fn visit_import_directive(&mut self, node: &ImportDirective) -> Result<bool> {
174 | self.visit_node(node)
175 | }
176 | fn end_visit_import_directive(&mut self, node: &ImportDirective) -> Result<()> {
177 | self.end_visit_node(node)
178 | }
179 |
180 | fn visit_index_access(&mut self, node: &IndexAccess) -> Result<bool> {
181 | self.visit_node(node)
182 | }
183 | fn end_visit_index_access(&mut self, node: &IndexAccess) -> Result<()> {
184 | self.end_visit_node(node)
185 | }
186 |
187 | fn visit_index_range_access(&mut self, node: &IndexRangeAccess) -> Result<bool> {
188 | self.visit_node(node)
189 | }
190 | fn end_visit_index_range_access(&mut self, node: &IndexRangeAccess) -> Result<()> {
191 | self.end_visit_node(node)
192 | }
193 |
194 | fn visit_inheritance_specifier(&mut self, node: &InheritanceSpecifier) -> Result<bool> {
195 | self.visit_node(node)
196 | }
197 | fn end_visit_inheritance_specifier(&mut self, node: &InheritanceSpecifier) -> Result<()> {
198 | self.end_visit_node(node)
199 | }
200 |
201 | fn visit_inline_assembly(&mut self, node: &InlineAssembly) -> Result<bool> {
202 | self.visit_node(node)
203 | }
204 | fn end_visit_inline_assembly(&mut self, node: &InlineAssembly) -> Result<()> {
205 | self.end_visit_node(node)
206 | }
207 |
208 | fn visit_literal(&mut self, node: &Literal) -> Result<bool> {
209 | self.visit_node(node)
210 | }
211 | fn end_visit_literal(&mut self, node: &Literal) -> Result<()> {
212 | self.end_visit_node(node)
213 | }
214 |
215 | fn visit_member_access(&mut self, node: &MemberAccess) -> Result<bool> {
216 | self.visit_node(node)
217 | }
218 | fn end_visit_member_access(&mut self, node: &MemberAccess) -> Result<()> {
219 | self.end_visit_node(node)
220 | }
221 |
222 | fn visit_new_expression(&mut self, node: &NewExpression) -> Result<bool> {
223 | self.visit_node(node)
224 | }
225 | fn end_visit_new_expression(&mut self, node: &NewExpression) -> Result<()> {
226 | self.end_visit_node(node)
227 | }
228 |
229 | fn visit_mapping(&mut self, node: &Mapping) -> Result<bool> {
230 | self.visit_node(node)
231 | }
232 | fn end_visit_mapping(&mut self, node: &Mapping) -> Result<()> {
233 | self.end_visit_node(node)
234 | }
235 |
236 | fn visit_modifier_definition(&mut self, node: &ModifierDefinition) -> Result<bool> {
237 | self.visit_node(node)
238 | }
239 | fn end_visit_modifier_definition(&mut self, node: &ModifierDefinition) -> Result<()> {
240 | self.end_visit_node(node)
241 | }
242 |
243 | fn visit_modifier_invocation(&mut self, node: &ModifierInvocation) -> Result<bool> {
244 | self.visit_node(node)
245 | }
246 | fn end_visit_modifier_invocation(&mut self, node: &ModifierInvocation) -> Result<()> {
247 | self.end_visit_node(node)
248 | }
249 |
250 | fn visit_override_specifier(&mut self, node: &OverrideSpecifier) -> Result<bool> {
251 | self.visit_node(node)
252 | }
253 | fn end_visit_override_specifier(&mut self, node: &OverrideSpecifier) -> Result<()> {
254 | self.end_visit_node(node)
255 | }
256 |
257 | fn visit_parameter_list(&mut self, node: &ParameterList) -> Result<bool> {
258 | self.visit_node(node)
259 | }
260 | fn end_visit_parameter_list(&mut self, node: &ParameterList) -> Result<()> {
261 | self.end_visit_node(node)
262 | }
263 |
264 | fn visit_pragma_directive(&mut self, node: &PragmaDirective) -> Result<bool> {
265 | self.visit_node(node)
266 | }
267 | fn end_visit_pragma_directive(&mut self, node: &PragmaDirective) -> Result<()> {
268 | self.end_visit_node(node)
269 | }
270 |
271 | fn visit_return(&mut self, node: &Return) -> Result<bool> {
272 | self.visit_node(node)
273 | }
274 | fn end_visit_return(&mut self, node: &Return) -> Result<()> {
275 | self.end_visit_node(node)
276 | }
277 |
278 | fn visit_revert_statement(&mut self, node: &RevertStatement) -> Result<bool> {
279 | self.visit_node(node)
280 | }
281 | fn end_visit_revert_statement(&mut self, node: &RevertStatement) -> Result<()> {
282 | self.end_visit_node(node)
283 | }
284 |
285 | fn visit_source_unit(&mut self, node: &SourceUnit) -> Result<bool> {
286 | self.visit_node(node)
287 | }
288 | fn end_visit_source_unit(&mut self, node: &SourceUnit) -> Result<()> {
289 | self.end_visit_node(node)
290 | }
291 |
292 | fn visit_struct_definition(&mut self, node: &StructDefinition) -> Result<bool> {
293 | self.visit_node(node)
294 | }
295 | fn end_visit_struct_definition(&mut self, node: &StructDefinition) -> Result<()> {
296 | self.end_visit_node(node)
297 | }
298 |
299 | fn visit_structured_documentation(&mut self, node: &StructuredDocumentation) -> Result<bool> {
300 | self.visit_node(node)
301 | }
302 | fn end_visit_structured_documentation(&mut self, node: &StructuredDocumentation) -> Result<()> {
303 | self.end_visit_node(node)
304 | }
305 |
306 | fn visit_try_statement(&mut self, node: &TryStatement) -> Result<bool> {
307 | self.visit_node(node)
308 | }
309 | fn end_visit_try_statement(&mut self, node: &TryStatement) -> Result<()> {
310 | self.end_visit_node(node)
311 | }
312 |
313 | fn visit_try_catch_clause(&mut self, node: &TryCatchClause) -> Result<bool> {
314 | self.visit_node(node)
315 | }
316 | fn end_visit_try_catch_clause(&mut self, node: &TryCatchClause) -> Result<()> {
317 | self.end_visit_node(node)
318 | }
319 |
320 | fn visit_tuple_expression(&mut self, node: &TupleExpression) -> Result<bool> {
321 | self.visit_node(node)
322 | }
323 | fn end_visit_tuple_expression(&mut self, node: &TupleExpression) -> Result<()> {
324 | self.end_visit_node(node)
325 | }
326 |
327 | fn visit_unary_operation(&mut self, node: &UnaryOperation) -> Result<bool> {
328 | self.visit_node(node)
329 | }
330 | fn end_visit_unary_operation(&mut self, node: &UnaryOperation) -> Result<()> {
331 | self.end_visit_node(node)
332 | }
333 |
334 | fn visit_user_defined_type_name(&mut self, node: &UserDefinedTypeName) -> Result<bool> {
335 | self.visit_node(node)
336 | }
337 | fn end_visit_user_defined_type_name(&mut self, node: &UserDefinedTypeName) -> Result<()> {
338 | self.end_visit_node(node)
339 | }
340 |
341 | fn visit_user_defined_value_type_definition(
342 | &mut self,
343 | node: &UserDefinedValueTypeDefinition,
344 | ) -> Result<bool> {
345 | self.visit_node(node)
346 | }
347 | fn end_visit_user_defined_value_type_definition(
348 | &mut self,
349 | node: &UserDefinedValueTypeDefinition,
350 | ) -> Result<()> {
351 | self.end_visit_node(node)
352 | }
353 |
354 | fn visit_using_for_directive(&mut self, node: &UsingForDirective) -> Result<bool> {
355 | self.visit_node(node)
356 | }
357 | fn end_visit_using_for_directive(&mut self, node: &UsingForDirective) -> Result<()> {
358 | self.end_visit_node(node)
359 | }
360 |
361 | fn visit_variable_declaration(&mut self, node: &VariableDeclaration) -> Result<bool> {
362 | self.visit_node(node)
363 | }
364 | fn end_visit_variable_declaration(&mut self, node: &VariableDeclaration) -> Result<()> {
365 | self.end_visit_node(node)
366 | }
367 |
368 | fn visit_variable_declaration_statement(
369 | &mut self,
370 | node: &VariableDeclarationStatement,
371 | ) -> Result<bool> {
372 | self.visit_node(node)
373 | }
374 | fn end_visit_variable_declaration_statement(
375 | &mut self,
376 | node: &VariableDeclarationStatement,
377 | ) -> Result<()> {
378 | self.end_visit_node(node)
379 | }
380 |
381 | fn visit_while_statement(&mut self, node: &WhileStatement) -> Result<bool> {
382 | self.visit_node(node)
383 | }
384 | fn end_visit_while_statement(&mut self, node: &WhileStatement) -> Result<()> {
385 | self.end_visit_node(node)
386 | }
387 |
388 | fn visit_do_while_statement(&mut self, node: &DoWhileStatement) -> Result<bool> {
389 | self.visit_node(node)
390 | }
391 | fn end_do_visit_while_statement(&mut self, node: &DoWhileStatement) -> Result<()> {
392 | self.end_visit_node(node)
393 | }
394 |
395 | fn visit_continue_statement(&mut self, node: &Continue) -> Result<bool> {
396 | self.visit_node(node)
397 | }
398 | fn end_visit_continue_statement(&mut self, node: &Continue) -> Result<()> {
399 | self.end_visit_node(node)
400 | }
401 |
402 | fn visit_placeholder_statement(&mut self, node: &PlaceholderStatement) -> Result<bool> {
403 | self.visit_node(node)
404 | }
405 | fn end_visit_placeholder_statement(&mut self, node: &PlaceholderStatement) -> Result<()> {
406 | self.end_visit_node(node)
407 | }
408 |
409 | fn visit_break_statement(&mut self, node: &Break) -> Result<bool> {
410 | self.visit_node(node)
411 | }
412 | fn end_visit_break_statement(&mut self, node: &Break) -> Result<()> {
413 | self.end_visit_node(node)
414 | }
415 |
416 | fn visit_yul_block(&mut self, node: &YulBlock) -> Result<bool> {
417 | self.visit_node(node)
418 | }
419 | fn end_visit_yul_block(&mut self, node: &YulBlock) -> Result<()> {
420 | self.end_visit_node(node)
421 | }
422 |
423 | fn visit_yul_statement(&mut self, node: &YulStatement) -> Result<bool> {
424 | self.visit_node(node)
425 | }
426 | fn end_visit_yul_statement(&mut self, node: &YulStatement) -> Result<()> {
427 | self.end_visit_node(node)
428 | }
429 |
430 | fn visit_yul_expression(&mut self, node: &YulExpression) -> Result<bool> {
431 | self.visit_node(node)
432 | }
433 | fn end_visit_yul_expression(&mut self, node: &YulExpression) -> Result<()> {
434 | self.end_visit_node(node)
435 | }
436 |
437 | fn visit_yul_literal(&mut self, node: &YulLiteral) -> Result<bool> {
438 | self.visit_node(node)
439 | }
440 | fn end_visit_yul_literal(&mut self, node: &YulLiteral) -> Result<()> {
441 | self.end_visit_node(node)
442 | }
443 |
444 | fn visit_yul_identifier(&mut self, node: &YulIdentifier) -> Result<bool> {
445 | self.visit_node(node)
446 | }
447 | fn end_visit_yul_identifier(&mut self, node: &YulIdentifier) -> Result<()> {
448 | self.end_visit_node(node)
449 | }
450 |
451 | fn visit_yul_function_call(&mut self, node: &YulFunctionCall) -> Result<bool> {
452 | self.visit_node(node)
453 | }
454 | fn end_visit_yul_function_call(&mut self, node: &YulFunctionCall) -> Result<()> {
455 | self.end_visit_node(node)
456 | }
457 |
458 | fn visit_yul_if(&mut self, node: &YulIf) -> Result<bool> {
459 | self.visit_node(node)
460 | }
461 | fn end_visit_yul_if(&mut self, node: &YulIf) -> Result<()> {
462 | self.end_visit_node(node)
463 | }
464 |
465 | fn visit_yul_switch(&mut self, node: &YulSwitch) -> Result<bool> {
466 | self.visit_node(node)
467 | }
468 | fn end_visit_yul_switch(&mut self, node: &YulSwitch) -> Result<()> {
469 | self.end_visit_node(node)
470 | }
471 |
472 | fn visit_yul_case(&mut self, node: &YulCase) -> Result<bool> {
473 | self.visit_node(node)
474 | }
475 | fn end_visit_yul_case(&mut self, node: &YulCase) -> Result<()> {
476 | self.end_visit_node(node)
477 | }
478 |
479 | fn visit_yul_for_loop(&mut self, node: &YulForLoop) -> Result<bool> {
480 | self.visit_node(node)
481 | }
482 | fn end_visit_yul_for_loop(&mut self, node: &YulForLoop) -> Result<()> {
483 | self.end_visit_node(node)
484 | }
485 |
486 | fn visit_yul_assignment(&mut self, node: &YulAssignment) -> Result<bool> {
487 | self.visit_node(node)
488 | }
489 | fn end_visit_yul_assignment(&mut self, node: &YulAssignment) -> Result<()> {
490 | self.end_visit_node(node)
491 | }
492 |
493 | fn visit_yul_variable_declaration(&mut self, node: &YulVariableDeclaration) -> Result<bool> {
494 | self.visit_node(node)
495 | }
496 | fn end_visit_yul_variable_declaration(&mut self, node: &YulVariableDeclaration) -> Result<()> {
497 | self.end_visit_node(node)
498 | }
499 |
500 | fn visit_yul_typed_name(&mut self, node: &YulTypedName) -> Result<bool> {
501 | self.visit_node(node)
502 | }
503 | fn end_visit_yul_typed_name(&mut self, node: &YulTypedName) -> Result<()> {
504 | self.end_visit_node(node)
505 | }
506 |
507 | fn visit_yul_expression_statement(&mut self, node: &YulExpressionStatement) -> Result<bool> {
508 | self.visit_node(node)
509 | }
510 | fn end_visit_yul_expression_statement(&mut self, node: &YulExpressionStatement) -> Result<()> {
511 | self.end_visit_node(node)
512 | }
513 |
514 | fn visit_yul_function_definition(&mut self, node: &YulFunctionDefinition) -> Result<bool> {
515 | self.visit_node(node)
516 | }
517 | fn end_visit_yul_function_definition(&mut self, node: &YulFunctionDefinition) -> Result<()> {
518 | self.end_visit_node(node)
519 | }
520 |
521 | fn visit_node(&mut self, _node: &impl Node) -> Result<bool> {
522 | Ok(true)
523 | }
524 | fn end_visit_node(&mut self, _node: &impl Node) -> Result<()> {
525 | Ok(())
526 | }
527 |
528 | fn visit_immediate_children(
529 | &mut self,
530 | _node_id: NodeID,
531 | _node_children_ids: Vec<NodeID>,
532 | ) -> Result<()> {
533 | Ok(())
534 | }
535 |
536 | fn visit_node_id(&mut self, _node_id: Option<NodeID>) -> Result<()> {
537 | Ok(())
538 | }
539 | }
540 |
541 | pub trait Node {
542 | /// [`Node::accept`] is designed to propagate
543 | fn accept(&self, _visitor: &mut impl ASTConstVisitor) -> Result<()> {
544 | Ok(())
545 | }
546 | /// [`Node::accept_metadata`] is designed to propagate into the AST subtree
547 | /// although it doesn't happen by itself. [`Node::accept`] triggers the propagation
548 | fn accept_metadata(&self, _visitor: &mut impl ASTConstVisitor) -> Result<()> {
549 | Ok(())
550 | }
551 | /// [`Node::accept_id`] is not designed to propagate into the AST subtree
552 | fn accept_id(&self, _visitor: &mut impl ASTConstVisitor) -> Result<()> {
553 | Ok(())
554 | }
555 | }
556 |
557 | pub fn list_accept(list: &Vec<impl Node>, visitor: &mut impl ASTConstVisitor) -> Result<()> {
558 | for elem in list {
559 | elem.accept(visitor)?;
560 | }
561 | Ok(())
562 | }
563 |
```
--------------------------------------------------------------------------------
/aderyn_core/src/context/router/tests.rs:
--------------------------------------------------------------------------------
```rust
1 | #[cfg(test)]
2 | mod mir_router {
3 | use crate::{
4 | ast::ASTNode,
5 | context::{
6 | browser::ExtractFunctionCalls,
7 | router::{ECDest, Router},
8 | workspace::WorkspaceContext,
9 | },
10 | test_utils::load_solidity_source_unit,
11 | };
12 |
13 | // Utility function to help debug router.
14 | #[allow(dead_code)]
15 | pub fn display(router: &Router, context: &WorkspaceContext) {
16 | println!("Internal calls");
17 | println!("==============");
18 | for (base_contract_id, ic) in &router.internal_calls {
19 | let Some(ASTNode::ContractDefinition(c)) = context.nodes.get(base_contract_id) else {
20 | eprintln!("Couldn't resolve contract with ID {}", base_contract_id);
21 | return;
22 | };
23 | println!("Base contract - {}", c.name);
24 | for (start_lookup, lookup) in &ic.routes {
25 | let Some(ASTNode::ContractDefinition(s)) = context.nodes.get(start_lookup) else {
26 | eprintln!("Couldn't resolve contract with ID {}", start_lookup);
27 | return;
28 | };
29 | println!("Start lookup - {}", s.name);
30 | for (func_selectorish, def_id) in lookup {
31 | let Some(ASTNode::FunctionDefinition(f)) = context.nodes.get(def_id) else {
32 | eprintln!("Couldn't resolve contract with ID {}", def_id);
33 | return;
34 | };
35 | println!(
36 | "{} - {} - {:?}",
37 | func_selectorish,
38 | f.name,
39 | context.get_node_sort_key_from_capturable(&f.clone().into())
40 | );
41 | }
42 | }
43 | println!("-------------");
44 | }
45 | }
46 |
47 | fn get_ic_router_ctx() -> (Router, WorkspaceContext) {
48 | let context =
49 | load_solidity_source_unit("../tests/contract-playground/src/router/InternalCalls.sol");
50 |
51 | (Router::build(&context), context)
52 | }
53 |
54 | fn get_mc_router_ctx() -> (Router, WorkspaceContext) {
55 | let context =
56 | load_solidity_source_unit("../tests/contract-playground/src/router/ModifierCalls.sol");
57 |
58 | (Router::build(&context), context)
59 | }
60 |
61 | fn get_ec_router_ctx() -> (Router, WorkspaceContext) {
62 | let context =
63 | load_solidity_source_unit("../tests/contract-playground/src/router/ExternalCalls.sol");
64 |
65 | (Router::build(&context), context)
66 | }
67 |
68 | fn get_ec_router_ctx_2() -> (Router, WorkspaceContext) {
69 | let context = load_solidity_source_unit(
70 | "../tests/contract-playground/src/router/FallbackAndReceiveOverrides.sol",
71 | );
72 |
73 | (Router::build(&context), context)
74 | }
75 |
76 | #[test]
77 | pub fn resolves_internal_calls_3() {
78 | let (router, context) = get_ic_router_ctx();
79 |
80 | let basic3_top_contract = context.find_contract_by_name("Basic3Top");
81 | let basic3_right_contract = context.find_contract_by_name("Basic3Right");
82 | let basic3_left_contract = context.find_contract_by_name("Basic3Left");
83 | let basic3_down2_contract = context.find_contract_by_name("Basic3Down2");
84 | let basic2_contract = context.find_contract_by_name("Basic2");
85 | let basic2_child_contract = context.find_contract_by_name("Basic2Child");
86 |
87 | let basic3_top_function = basic3_top_contract.find_function_by_name("help");
88 | let basic3_top_live = basic3_top_contract.find_function_by_name("live");
89 | let basic3_left_function = basic3_left_contract.find_function_by_name("help");
90 | let basic2_child_gcall_function = basic2_child_contract.find_function_by_name("gcall");
91 | let basic2_g_function = basic2_contract.find_function_by_name("g");
92 | let basic2_child_g_function = basic2_child_contract.find_function_by_name("g");
93 | let basic3_right_function = basic3_right_contract.find_function_by_name("help");
94 | let basic3_down2_function = basic3_down2_contract.find_function_by_name("help");
95 | let basic3_down2_live = basic3_down2_contract.find_function_by_name("live");
96 |
97 | let basic3_top_function_calls = ExtractFunctionCalls::from(basic3_top_function).extracted;
98 | let basic3_right_function_calls =
99 | ExtractFunctionCalls::from(basic3_right_function).extracted;
100 | let basic3_left_function_calls = ExtractFunctionCalls::from(basic3_left_function).extracted;
101 | let basic3_down2_function_calls =
102 | ExtractFunctionCalls::from(basic3_down2_function).extracted;
103 | let basic2_child_gcall_function_calls =
104 | ExtractFunctionCalls::from(basic2_child_gcall_function).extracted;
105 |
106 | let a = router
107 | ._resolve_internal_call(
108 | &context,
109 | basic3_down2_contract,
110 | &basic3_down2_function_calls[0],
111 | )
112 | .unwrap();
113 | assert_eq!(a.id, basic3_right_function.id);
114 |
115 | let b = router
116 | ._resolve_internal_call(&context, basic3_down2_contract, &basic3_top_function_calls[0])
117 | .unwrap();
118 | assert_eq!(b.id, basic3_down2_live.id);
119 |
120 | let c = router
121 | ._resolve_internal_call(
122 | &context,
123 | basic3_down2_contract,
124 | &basic3_down2_function_calls[1],
125 | )
126 | .unwrap();
127 | assert_eq!(c.id, basic3_top_live.id);
128 |
129 | let d = router
130 | ._resolve_internal_call(
131 | &context,
132 | basic3_down2_contract,
133 | &basic3_down2_function_calls[2],
134 | )
135 | .unwrap();
136 | assert_eq!(d.id, basic3_left_function.id);
137 |
138 | let e = router
139 | ._resolve_internal_call(
140 | &context,
141 | basic3_down2_contract,
142 | &basic3_right_function_calls[0],
143 | )
144 | .unwrap();
145 | assert_eq!(e.id, basic3_left_function.id);
146 |
147 | let f = router
148 | ._resolve_internal_call(&context, basic3_down2_contract, &basic3_left_function_calls[0])
149 | .unwrap();
150 | assert_eq!(f.id, basic3_top_function.id);
151 |
152 | let g = router
153 | ._resolve_internal_call(
154 | &context,
155 | basic3_right_contract,
156 | &basic3_right_function_calls[0],
157 | )
158 | .unwrap();
159 | assert_eq!(g.id, basic3_top_function.id);
160 |
161 | assert_eq!(basic2_child_g_function.selectorish(), basic2_g_function.selectorish());
162 | let h = router
163 | ._resolve_internal_call(
164 | &context,
165 | basic2_child_contract,
166 | &basic2_child_gcall_function_calls[1],
167 | )
168 | .unwrap();
169 | assert_eq!(h.id, basic2_child_g_function.id);
170 | }
171 |
172 | #[test]
173 | pub fn resolves_internal_calls_4() {
174 | let (router, context) = get_ic_router_ctx();
175 |
176 | let contract = context.find_contract_by_name("Basic4");
177 | let main = contract.find_function_by_name("main");
178 | let priv_func = contract.find_function_by_name("priv");
179 |
180 | let library = context.find_contract_by_name("Basic4Lib");
181 | let lib_help1 = library.find_function_by_name("help1");
182 |
183 | let func_calls = ExtractFunctionCalls::from(main).extracted;
184 |
185 | // internal calls
186 | assert_eq!(func_calls[0].is_internal_call(), Some(true));
187 | assert_eq!(func_calls[1].is_internal_call(), Some(true));
188 | assert_eq!(func_calls[2].is_internal_call(), Some(true));
189 | assert_eq!(func_calls[3].is_internal_call(), Some(true));
190 | assert_eq!(func_calls[4].is_internal_call(), Some(true));
191 |
192 | // external calls
193 | assert_eq!(func_calls[5].is_internal_call(), Some(false));
194 | assert_eq!(func_calls[6].is_internal_call(), Some(false));
195 | assert_eq!(func_calls[7].is_internal_call(), Some(false));
196 |
197 | let f0 = router._resolve_internal_call(&context, contract, &func_calls[0]);
198 | let f1 = router._resolve_internal_call(&context, contract, &func_calls[1]);
199 | let f2 = router._resolve_internal_call(&context, contract, &func_calls[2]);
200 | let f3 = router._resolve_internal_call(&context, contract, &func_calls[3]);
201 | let f4 = router._resolve_internal_call(&context, contract, &func_calls[4]);
202 |
203 | // Lib calls
204 | assert_eq!(f0.unwrap().id, lib_help1.id);
205 | assert_eq!(f1.unwrap().id, lib_help1.id);
206 | assert_eq!(f2.unwrap().id, lib_help1.id);
207 | assert_eq!(f3.unwrap().id, lib_help1.id);
208 |
209 | // Private funcs
210 | assert_eq!(f4.unwrap().id, priv_func.id);
211 | }
212 |
213 | #[test]
214 | pub fn resolves_internal_calls_5() {
215 | let (router, context) = get_ic_router_ctx();
216 |
217 | let free_func = context.find_free_function_by_name("free");
218 | let basic6_contract = context.find_contract_by_name("Basic6");
219 | let basic6_function = basic6_contract.find_function_by_name("main");
220 | let basic6_function_calls = ExtractFunctionCalls::from(basic6_function).extracted;
221 |
222 | let a = router
223 | ._resolve_internal_call(&context, basic6_contract, &basic6_function_calls[0])
224 | .unwrap();
225 | assert_eq!(a.id, free_func.id);
226 |
227 | let basic7_contract = context.find_contract_by_name("Basic7");
228 | let basic7_function = basic7_contract.find_function_by_name("main");
229 | let basic7_function_calls = ExtractFunctionCalls::from(basic7_function).extracted;
230 |
231 | let b = router
232 | ._resolve_internal_call(&context, basic7_contract, &basic7_function_calls[0])
233 | .unwrap();
234 | assert_eq!(b.id, free_func.id);
235 |
236 | let basic8_contract = context.find_contract_by_name("Basic8");
237 | let basic8_function = basic8_contract.find_function_by_name("main");
238 | let basic8_free = basic8_contract.find_function_by_name("free");
239 | let basic8_function_calls = ExtractFunctionCalls::from(basic8_function).extracted;
240 |
241 | let c = router
242 | ._resolve_internal_call(&context, basic8_contract, &basic8_function_calls[0])
243 | .unwrap();
244 | assert_eq!(c.id, basic8_free.id);
245 |
246 | let basic9_contract = context.find_contract_by_name("Basic9");
247 | let basic9_function = basic9_contract.find_function_by_name("help");
248 | let basic9_function_calls = ExtractFunctionCalls::from(basic9_function).extracted;
249 |
250 | let d = router
251 | ._resolve_internal_call(&context, basic9_contract, &basic9_function_calls[0])
252 | .unwrap();
253 | assert_eq!(d.id, basic8_free.id);
254 | }
255 |
256 | #[test]
257 | pub fn resolve_modifier_calls_1() {
258 | let (router, context) = get_mc_router_ctx();
259 |
260 | let a_contract = context.find_contract_by_name("A");
261 | let b_contract = context.find_contract_by_name("B");
262 | let c_contract = context.find_contract_by_name("C");
263 | let d_library = context.find_contract_by_name("D");
264 |
265 | let a_func = a_contract.find_function_by_name("geez");
266 | let b_func = b_contract.find_function_by_name("tree");
267 | let c_func = c_contract.find_function_by_name("main");
268 | let show_func = d_library.find_function_by_name("show");
269 |
270 | let a_modifier_call = &a_func.modifiers[0];
271 | let b_modifier_call = &b_func.modifiers[0];
272 | let c_modifier_call_1 = &c_func.modifiers[0];
273 | let c_modifier_call_2 = &c_func.modifiers[1];
274 | let show_modifier = &show_func.modifiers[0];
275 |
276 | let a = router._resolve_modifier_call(&context, b_contract, a_modifier_call).unwrap();
277 | assert_eq!(a.id, b_contract.find_modifier_by_name("modify").id);
278 |
279 | let b = router._resolve_modifier_call(&context, c_contract, c_modifier_call_1).unwrap();
280 | assert_eq!(b.id, b_contract.find_modifier_by_name("modify").id);
281 |
282 | let c = router._resolve_modifier_call(&context, c_contract, c_modifier_call_2).unwrap();
283 | assert_eq!(c.id, c_contract.find_modifier_by_name("modify").id);
284 |
285 | let d = router._resolve_modifier_call(&context, b_contract, b_modifier_call).unwrap();
286 | assert_eq!(d.id, b_contract.find_modifier_by_name("modify").id);
287 |
288 | let e = router._resolve_modifier_call(&context, c_contract, show_modifier).unwrap();
289 | assert_eq!(e.id, d_library.find_modifier_by_name("modify").id);
290 | }
291 |
292 | #[test]
293 | pub fn resolves_internal_from_library_calls() {
294 | let (router, context) = get_ic_router_ctx();
295 |
296 | let basic4_contract = context.find_contract_by_name("Basic4");
297 | let basic4_lib = context.find_contract_by_name("Basic4Lib");
298 | let basic4_aux_lib = context.find_contract_by_name("Basic4AuxLib");
299 | let help1_func = basic4_lib.find_function_by_name("help1");
300 | let ext2_func = basic4_lib.find_function_by_name("ext2");
301 | let aux2 = basic4_aux_lib.find_function_by_name("aux2");
302 | let func_calls = ExtractFunctionCalls::from(help1_func).extracted;
303 |
304 | assert!(func_calls[0].is_internal_call().unwrap());
305 | assert!(!func_calls[1].is_internal_call().unwrap());
306 | assert!(func_calls[2].is_internal_call().unwrap());
307 |
308 | let a = router._resolve_internal_call(&context, basic4_contract, &func_calls[0]).unwrap();
309 | assert_eq!(a.id, ext2_func.id);
310 |
311 | let b = router._resolve_internal_call(&context, basic4_contract, &func_calls[2]).unwrap();
312 | assert_eq!(b.id, aux2.id);
313 |
314 | // external calls return none
315 | let c = router._resolve_internal_call(&context, basic4_contract, &func_calls[1]);
316 | assert!(c.is_none());
317 | }
318 |
319 | #[test]
320 | pub fn resolve_ext_calls_1() {
321 | let (router, context) = get_ec_router_ctx();
322 |
323 | let test_contract = context.find_contract_by_name("TestA");
324 | let test_func = test_contract.find_function_by_name("test");
325 | let func_calls = ExtractFunctionCalls::from(test_func).extracted;
326 |
327 | assert_eq!(func_calls[0].is_internal_call(), Some(false));
328 |
329 | let b_contract = context.find_contract_by_name("B");
330 | let out = router._resolve_external_call(&context, b_contract, &func_calls[0]).unwrap();
331 | assert!(matches!(out, ECDest::PseudoExtFn(_)));
332 |
333 | let e_contract = context.find_contract_by_name("E");
334 | let e_func = e_contract.find_function_by_name("abc");
335 | let out = router._resolve_external_call(&context, e_contract, &func_calls[0]).unwrap();
336 | assert_eq!(out, ECDest::RealExtFn(e_func.id));
337 |
338 | let f_contract = context.find_contract_by_name("F");
339 | let f_func = f_contract.find_function_by_name("abc");
340 | let out = router._resolve_external_call(&context, f_contract, &func_calls[0]).unwrap();
341 | assert_eq!(out, ECDest::PublicFn(f_func.id));
342 |
343 | let y_contract = context.find_contract_by_name("Y");
344 | let out = router._resolve_external_call(&context, y_contract, &func_calls[0]).unwrap();
345 | assert_eq!(out, ECDest::PublicFn(f_func.id));
346 | }
347 |
348 | #[test]
349 | pub fn resolve_ext_calls_2() {
350 | let (router, context) = get_ec_router_ctx();
351 |
352 | let test_contract = context.find_contract_by_name("TestD");
353 | let test_func = test_contract.find_function_by_name("test");
354 | let func_calls = ExtractFunctionCalls::from(test_func).extracted;
355 |
356 | assert_eq!(func_calls[0].is_internal_call(), Some(false));
357 |
358 | let d_contract = context.find_contract_by_name("D");
359 | let out = router._resolve_external_call(&context, d_contract, &func_calls[0]).unwrap();
360 | assert!(matches!(out, ECDest::PseudoExtFn(_)));
361 | }
362 |
363 | #[test]
364 | pub fn resolve_ext_calls_3() {
365 | let (router, context) = get_ec_router_ctx_2();
366 |
367 | let test_contract = context.find_contract_by_name("TestIt");
368 | let test_func = test_contract.find_function_by_name("test");
369 | let func_calls = ExtractFunctionCalls::from(test_func).extracted;
370 |
371 | assert_eq!(func_calls[0].is_internal_call(), Some(false));
372 |
373 | let a_contract = context.find_contract_by_name("A");
374 | let b_contract = context.find_contract_by_name("B");
375 | let c_contract = context.find_contract_by_name("C");
376 |
377 | let a_fallback = a_contract.find_fallback_function();
378 | let b_fallback = b_contract.find_fallback_function();
379 |
380 | // resolve fallback functions
381 | let out = router._resolve_external_call(&context, a_contract, &func_calls[0]).unwrap();
382 | assert_eq!(out, ECDest::Fallback(a_fallback.id));
383 |
384 | let out = router._resolve_external_call(&context, b_contract, &func_calls[0]).unwrap();
385 | assert_eq!(out, ECDest::Fallback(b_fallback.id));
386 |
387 | let out = router._resolve_external_call(&context, c_contract, &func_calls[0]).unwrap();
388 | assert_eq!(out, ECDest::Fallback(a_fallback.id));
389 | }
390 |
391 | #[test]
392 | pub fn resolve_ext_calls_4() {
393 | let (router, context) = get_ec_router_ctx_2();
394 |
395 | let a_contract = context.find_contract_by_name("A");
396 | let b_contract = context.find_contract_by_name("B");
397 | let c_contract = context.find_contract_by_name("C");
398 |
399 | let a_fallback = a_contract.find_fallback_function();
400 | let a_receive = a_contract.find_receive_function();
401 | let b_fallback = b_contract.find_fallback_function();
402 |
403 | // resolve fallback functions
404 | let out = router._resolve_fallback_function(&context, a_contract).unwrap();
405 | assert_eq!(out.id, a_fallback.id);
406 |
407 | let out = router._resolve_fallback_function(&context, b_contract).unwrap();
408 | assert_eq!(out.id, b_fallback.id);
409 |
410 | let out = router._resolve_fallback_function(&context, c_contract).unwrap();
411 | assert_eq!(out.id, a_fallback.id);
412 |
413 | // resolve receive
414 | let out = router._resolve_receive_function(&context, a_contract).unwrap();
415 | assert_eq!(out.id, a_receive.id);
416 |
417 | let out = router._resolve_receive_function(&context, b_contract).unwrap();
418 | assert_eq!(out.id, a_receive.id);
419 |
420 | let out = router._resolve_receive_function(&context, c_contract).unwrap();
421 | assert_eq!(out.id, a_receive.id);
422 | }
423 |
424 | #[test]
425 | pub fn resolve_ext_calls_5() {
426 | let (_, context) = get_ec_router_ctx_2();
427 |
428 | let a_contract = context.find_contract_by_name("A");
429 | let b_contract = context.find_contract_by_name("B");
430 | let c_contract = context.find_contract_by_name("C");
431 |
432 | let a_funcs = context.entrypoint_functions(a_contract).unwrap();
433 | let b_funcs = context.entrypoint_functions(b_contract).unwrap();
434 | let c_funcs = context.entrypoint_functions(c_contract).unwrap();
435 |
436 | assert_eq!(a_funcs.len(), 2);
437 | assert_eq!(b_funcs.len(), 2);
438 | assert_eq!(c_funcs.len(), 2);
439 | }
440 |
441 | #[test]
442 | pub fn resolve_ext_calls_6() {
443 | let (_, context) = get_ec_router_ctx();
444 |
445 | let b_contract = context.find_contract_by_name("B");
446 | let e_contract = context.find_contract_by_name("E");
447 | let f_contract = context.find_contract_by_name("F");
448 | let y_contract = context.find_contract_by_name("Y");
449 | let d_contract = context.find_contract_by_name("D");
450 |
451 | let b_funcs = context.entrypoint_functions(b_contract).unwrap();
452 | let e_funcs = context.entrypoint_functions(e_contract).unwrap();
453 | let f_funcs = context.entrypoint_functions(f_contract).unwrap();
454 | let y_funcs = context.entrypoint_functions(y_contract).unwrap();
455 | let d_funcs = context.entrypoint_functions(d_contract).unwrap();
456 |
457 | assert_eq!(b_funcs.len(), 0);
458 | assert_eq!(e_funcs.len(), 1);
459 | assert_eq!(f_funcs.len(), 1);
460 | assert_eq!(y_funcs.len(), 1);
461 | assert_eq!(d_funcs.len(), 0);
462 | }
463 | }
464 |
```