This is page 81 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/avoid-abi-encode-packed/report/SD.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 | avoid-abi-encode-packed:SD
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 | Density (a.u.)
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 | Average time (µs)
10 | </text>
11 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
12 | <text x="77" y="439" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
13 | 0.2
14 | </text>
15 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,439 86,439 "/>
16 | <text x="77" y="402" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
17 | 0.4
18 | </text>
19 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,402 86,402 "/>
20 | <text x="77" y="365" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
21 | 0.6
22 | </text>
23 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,365 86,365 "/>
24 | <text x="77" y="328" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
25 | 0.8
26 | </text>
27 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,328 86,328 "/>
28 | <text x="77" y="291" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
29 | 1
30 | </text>
31 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,291 86,291 "/>
32 | <text x="77" y="254" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
33 | 1.2
34 | </text>
35 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,254 86,254 "/>
36 | <text x="77" y="217" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
37 | 1.4
38 | </text>
39 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,217 86,217 "/>
40 | <text x="77" y="180" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
41 | 1.6
42 | </text>
43 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,180 86,180 "/>
44 | <text x="77" y="143" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
45 | 1.8
46 | </text>
47 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,143 86,143 "/>
48 | <text x="77" y="106" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
49 | 2
50 | </text>
51 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,106 86,106 "/>
52 | <text x="77" y="69" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
53 | 2.2
54 | </text>
55 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,69 86,69 "/>
56 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
57 | <text x="165" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
58 | 0.3
59 | </text>
60 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="165,473 165,478 "/>
61 | <text x="245" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
62 | 0.4
63 | </text>
64 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="245,473 245,478 "/>
65 | <text x="324" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
66 | 0.5
67 | </text>
68 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="324,473 324,478 "/>
69 | <text x="404" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
70 | 0.6
71 | </text>
72 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="404,473 404,478 "/>
73 | <text x="484" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
74 | 0.7
75 | </text>
76 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="484,473 484,478 "/>
77 | <text x="563" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
78 | 0.8
79 | </text>
80 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="563,473 563,478 "/>
81 | <text x="643" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
82 | 0.9
83 | </text>
84 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="643,473 643,478 "/>
85 | <text x="723" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
86 | 1
87 | </text>
88 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="723,473 723,478 "/>
89 | <text x="803" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
90 | 1.1
91 | </text>
92 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="803,473 803,478 "/>
93 | <text x="882" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
94 | 1.2
95 | </text>
96 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="882,473 882,478 "/>
97 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,472 88,472 90,471 92,471 93,470 95,469 97,468 98,467 100,466 102,464 103,463 105,461 107,460 109,458 110,456 112,454 114,452 115,449 117,447 119,444 120,441 122,438 124,435 125,431 127,428 129,424 131,420 132,416 134,412 136,407 137,403 139,398 141,393 142,388 144,383 146,378 147,373 149,368 151,362 153,357 154,352 156,346 158,341 159,336 161,331 163,326 164,321 166,316 168,311 169,307 171,303 173,299 175,295 176,292 178,289 180,286 181,284 183,282 185,280 186,279 188,278 190,277 191,277 193,277 195,277 197,278 198,279 200,281 202,282 203,284 205,287 207,290 208,293 210,296 212,299 214,303 215,307 217,311 219,315 220,320 222,324 224,329 225,333 227,338 229,343 230,347 232,352 234,356 236,360 237,364 239,367 241,371 242,374 244,376 246,379 247,380 249,382 251,382 252,382 254,382 256,381 258,380 259,377 261,375 263,371 264,367 266,363 268,357 269,352 271,345 273,338 274,331 276,324 278,316 280,308 281,299 283,291 285,283 286,274 288,266 290,258 291,250 293,243 295,236 296,230 298,224 300,219 302,215 303,211 305,208 307,206 308,205 310,204 312,204 313,205 315,207 317,210 318,213 320,217 322,222 324,227 325,233 327,239 329,246 330,253 332,260 334,268 335,276 337,283 339,291 341,298 342,306 344,313 346,320 347,326 349,332 351,337 352,342 354,347 356,350 357,353 359,356 361,358 363,359 364,359 366,359 368,358 369,357 371,355 373,353 374,350 376,347 378,344 379,341 381,337 383,334 385,330 386,326 388,323 390,320 391,317 393,314 395,312 396,310 398,308 400,306 401,305 403,304 405,303 407,302 408,301 410,300 412,299 413,298 415,297 417,295 418,293 420,290 422,286 423,282 425,278 427,272 429,266 430,258 432,251 434,242 435,233 437,223 439,213 440,202 442,191 444,180 445,169 447,159 449,148 451,138 452,129 454,121 456,113 457,107 459,101 461,97 462,94 464,92 466,92 468,93 469,95 471,98 473,102 474,107 476,113 478,119 479,126 481,132 483,139 484,146 486,153 488,159 490,164 491,168 493,172 495,174 496,176 498,176 500,176 501,174 503,171 505,167 506,163 508,157 510,151 512,145 513,139 515,132 517,126 518,120 520,115 522,110 523,106 525,103 527,102 528,101 530,102 532,104 534,107 535,111 537,117 539,123 540,130 542,139 544,147 545,157 547,166 549,176 550,185 552,195 554,204 556,212 557,220 559,228 561,234 562,240 564,245 566,250 567,253 569,256 571,258 573,259 574,260 576,261 578,261 579,260 581,260 583,259 584,259 586,258 588,258 589,257 591,256 593,256 595,255 596,255 598,254 600,253 601,253 603,251 605,250 606,249 608,247 610,244 611,242 613,239 615,236 617,233 618,229 620,226 622,222 623,219 625,216 627,212 628,210 630,207 632,206 633,204 635,203 637,203 639,203 640,204 642,206 644,207 645,209 647,212 649,214 650,217 652,219 654,222 655,224 657,227 659,228 661,230 662,231 664,232 666,233 667,233 669,233 671,233 672,233 674,233 676,233 677,234 679,234 681,235 683,236 684,238 686,240 688,242 689,246 691,249 693,253 694,257 696,262 698,267 700,272 701,277 703,283 705,288 706,293 708,298 710,303 711,307 713,312 715,315 716,319 718,322 720,326 722,328 723,331 725,333 727,335 728,337 730,339 732,341 733,342 735,344 737,345 738,346 740,347 742,348 744,349 745,350 747,351 749,351 750,352 752,353 754,353 755,353 757,354 759,354 760,354 762,355 764,355 766,355 767,356 769,356 771,357 772,358 774,358 776,359 777,360 779,361 781,362 782,364 784,365 786,366 788,367 789,368 791,369 793,370 794,371 796,373 798,374 799,375 801,376 803,377 804,378 806,379 808,380 810,382 811,383 813,385 815,386 816,388 818,390 820,392 821,393 823,395 825,398 827,400 828,402 830,404 832,406 833,408 835,410 837,412 838,413 840,415 842,417 843,418 845,420 847,421 849,422 850,424 852,425 854,426 855,427 857,428 859,429 860,430 862,430 864,431 865,432 867,433 869,433 871,434 872,434 874,435 876,436 877,436 879,437 881,437 882,438 884,438 886,439 887,439 889,440 891,440 893,441 894,441 896,442 898,443 899,443 901,444 903,444 904,445 906,445 908,446 909,446 911,447 913,448 915,448 916,449 918,449 920,450 921,451 923,451 925,452 926,452 928,453 930,454 932,454 "/>
98 | <polygon opacity="0.25" fill="#1F78B4" points="164,321 166,316 168,311 169,307 171,303 173,299 175,295 176,292 178,289 180,286 181,284 183,282 185,280 186,279 188,278 190,277 191,277 193,277 195,277 197,278 198,279 200,281 202,282 203,284 205,287 207,290 208,293 210,296 212,299 214,303 215,307 217,311 219,315 220,320 222,324 224,329 225,333 227,338 229,343 230,347 232,352 234,356 236,360 237,364 239,367 241,371 242,374 244,376 246,379 247,380 249,382 251,382 252,382 254,382 256,381 258,380 259,377 261,375 263,371 264,367 266,363 268,357 269,352 271,345 273,338 274,331 276,324 278,316 280,308 281,299 283,291 285,283 286,274 288,266 290,258 291,250 293,243 295,236 296,230 298,224 300,219 302,215 303,211 305,208 307,206 308,205 310,204 312,204 313,205 315,207 317,210 318,213 320,217 322,222 324,227 325,233 327,239 329,246 330,253 332,260 334,268 335,276 337,283 339,291 341,298 342,306 344,313 346,320 347,326 349,332 351,337 352,342 354,347 356,350 357,353 359,356 361,358 363,359 364,359 366,359 368,358 369,357 371,355 373,353 374,350 376,347 378,344 379,341 381,337 383,334 385,330 386,326 388,323 390,320 391,317 393,314 395,312 396,310 398,308 400,306 401,305 403,304 405,303 407,302 408,301 410,300 412,299 413,298 415,297 417,295 418,293 420,290 422,286 423,282 425,278 427,272 429,266 430,258 432,251 434,242 435,233 437,223 439,213 440,202 442,191 444,180 445,169 447,159 449,148 451,138 452,129 454,121 456,113 457,107 459,101 461,97 462,94 464,92 466,92 468,93 469,95 471,98 473,102 474,107 476,113 478,119 479,126 481,132 483,139 484,146 486,153 488,159 490,164 491,168 493,172 495,174 496,176 498,176 500,176 501,174 503,171 505,167 506,163 508,157 510,151 512,145 513,139 515,132 517,126 518,120 520,115 522,110 523,106 525,103 527,102 528,101 530,102 532,104 534,107 535,111 537,117 539,123 540,130 542,139 544,147 545,157 547,166 549,176 550,185 552,195 554,204 556,212 557,220 559,228 561,234 562,240 564,245 566,250 567,253 569,256 571,258 573,259 574,260 576,261 578,261 579,260 581,260 583,259 584,259 586,258 588,258 589,257 591,256 593,256 595,255 596,255 598,254 600,253 601,253 603,251 605,250 606,249 608,247 610,244 611,242 613,239 615,236 617,233 618,229 620,226 622,222 623,219 625,216 627,212 628,210 630,207 632,206 633,204 635,203 637,203 639,203 640,204 642,206 644,207 645,209 647,212 649,214 650,217 652,219 654,222 655,224 657,227 659,228 661,230 662,231 664,232 666,233 667,233 669,233 671,233 672,233 674,233 676,233 677,234 679,234 681,235 683,236 684,238 686,240 688,242 689,246 691,249 693,253 694,257 696,262 698,267 700,272 701,277 703,283 705,288 706,293 708,298 710,303 711,307 713,312 715,315 716,319 718,322 720,326 722,328 723,331 725,333 727,335 728,337 730,339 732,341 733,342 735,344 737,345 738,346 740,347 742,348 744,349 745,350 747,351 749,351 750,352 752,353 754,353 755,353 757,354 759,354 760,354 762,355 764,355 766,355 767,356 769,356 771,357 772,358 774,358 776,359 777,360 779,361 781,362 782,364 784,365 786,366 788,367 789,368 791,369 793,370 794,371 796,373 798,374 799,375 801,376 803,377 804,378 806,379 808,380 810,382 811,383 813,385 815,386 816,388 818,390 820,392 821,393 823,395 825,398 827,400 828,402 830,404 832,406 833,408 835,410 837,412 838,413 840,415 842,417 843,418 845,420 847,421 849,422 850,424 852,425 852,473 164,473 "/>
99 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="531,473 531,103 "/>
100 | <text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
101 | Bootstrap distribution
102 | </text>
103 | <text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
104 | Confidence interval
105 | </text>
106 | <text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
107 | Point estimate
108 | </text>
109 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
110 | <rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
111 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
112 | </svg>
113 |
```
--------------------------------------------------------------------------------
/benchmarks/unprotected-initializer/report/regression_small.svg:
--------------------------------------------------------------------------------
```
1 | <svg width="450" height="300" viewBox="0 0 450 300" xmlns="http://www.w3.org/2000/svg">
2 | <text x="15" y="130" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 15, 130)">
3 | Total sample time (ms)
4 | </text>
5 | <text x="255" y="285" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
6 | Iterations (x 10^3)
7 | </text>
8 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="136" y1="244" x2="136" y2="15"/>
9 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="200" y1="244" x2="200" y2="15"/>
10 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="265" y1="244" x2="265" y2="15"/>
11 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="330" y1="244" x2="330" y2="15"/>
12 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="395" y1="244" x2="395" y2="15"/>
13 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="220" x2="434" y2="220"/>
14 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="194" x2="434" y2="194"/>
15 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="168" x2="434" y2="168"/>
16 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="141" x2="434" y2="141"/>
17 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="115" x2="434" y2="115"/>
18 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="88" x2="434" y2="88"/>
19 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="62" x2="434" y2="62"/>
20 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="35" x2="434" y2="35"/>
21 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="74,15 74,244 "/>
22 | <text x="65" y="220" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
23 | 10.0
24 | </text>
25 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,220 74,220 "/>
26 | <text x="65" y="194" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
27 | 20.0
28 | </text>
29 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,194 74,194 "/>
30 | <text x="65" y="168" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
31 | 30.0
32 | </text>
33 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,168 74,168 "/>
34 | <text x="65" y="141" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
35 | 40.0
36 | </text>
37 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,141 74,141 "/>
38 | <text x="65" y="115" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
39 | 50.0
40 | </text>
41 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,115 74,115 "/>
42 | <text x="65" y="88" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
43 | 60.0
44 | </text>
45 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,88 74,88 "/>
46 | <text x="65" y="62" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
47 | 70.0
48 | </text>
49 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,62 74,62 "/>
50 | <text x="65" y="35" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
51 | 80.0
52 | </text>
53 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,35 74,35 "/>
54 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="75,245 434,245 "/>
55 | <text x="136" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
56 | 0.5
57 | </text>
58 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="136,245 136,250 "/>
59 | <text x="200" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
60 | 1
61 | </text>
62 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="200,245 200,250 "/>
63 | <text x="265" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
64 | 1.5
65 | </text>
66 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="265,245 265,250 "/>
67 | <text x="330" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
68 | 2
69 | </text>
70 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="330,245 330,250 "/>
71 | <text x="395" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
72 | 2.5
73 | </text>
74 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="395,245 395,250 "/>
75 | <circle cx="75" cy="244" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
76 | <circle cx="78" cy="242" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
77 | <circle cx="82" cy="236" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
78 | <circle cx="85" cy="236" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
79 | <circle cx="89" cy="234" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
80 | <circle cx="93" cy="232" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
81 | <circle cx="96" cy="229" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
82 | <circle cx="100" cy="228" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
83 | <circle cx="104" cy="225" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
84 | <circle cx="107" cy="223" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
85 | <circle cx="111" cy="219" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
86 | <circle cx="114" cy="215" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
87 | <circle cx="118" cy="215" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
88 | <circle cx="122" cy="210" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
89 | <circle cx="125" cy="209" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
90 | <circle cx="129" cy="206" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
91 | <circle cx="133" cy="205" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
92 | <circle cx="136" cy="202" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
93 | <circle cx="140" cy="200" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
94 | <circle cx="143" cy="198" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
95 | <circle cx="147" cy="196" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
96 | <circle cx="151" cy="194" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
97 | <circle cx="154" cy="192" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
98 | <circle cx="158" cy="189" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
99 | <circle cx="162" cy="188" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
100 | <circle cx="165" cy="185" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
101 | <circle cx="169" cy="182" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
102 | <circle cx="172" cy="180" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
103 | <circle cx="176" cy="178" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
104 | <circle cx="180" cy="173" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
105 | <circle cx="183" cy="171" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
106 | <circle cx="187" cy="171" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
107 | <circle cx="191" cy="167" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
108 | <circle cx="194" cy="165" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
109 | <circle cx="198" cy="164" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
110 | <circle cx="201" cy="160" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
111 | <circle cx="205" cy="157" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
112 | <circle cx="209" cy="155" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
113 | <circle cx="212" cy="152" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
114 | <circle cx="216" cy="141" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
115 | <circle cx="220" cy="134" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
116 | <circle cx="223" cy="136" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
117 | <circle cx="227" cy="133" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
118 | <circle cx="230" cy="138" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
119 | <circle cx="234" cy="135" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
120 | <circle cx="238" cy="132" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
121 | <circle cx="241" cy="130" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
122 | <circle cx="245" cy="121" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
123 | <circle cx="249" cy="119" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
124 | <circle cx="252" cy="123" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
125 | <circle cx="256" cy="116" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
126 | <circle cx="259" cy="114" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
127 | <circle cx="263" cy="106" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
128 | <circle cx="267" cy="110" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
129 | <circle cx="270" cy="104" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
130 | <circle cx="274" cy="104" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
131 | <circle cx="278" cy="107" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
132 | <circle cx="281" cy="99" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
133 | <circle cx="285" cy="96" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
134 | <circle cx="288" cy="98" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
135 | <circle cx="292" cy="97" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
136 | <circle cx="296" cy="95" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
137 | <circle cx="299" cy="100" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
138 | <circle cx="303" cy="99" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
139 | <circle cx="307" cy="94" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
140 | <circle cx="310" cy="90" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
141 | <circle cx="314" cy="80" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
142 | <circle cx="317" cy="78" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
143 | <circle cx="321" cy="82" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
144 | <circle cx="325" cy="44" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
145 | <circle cx="328" cy="61" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
146 | <circle cx="332" cy="77" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
147 | <circle cx="336" cy="69" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
148 | <circle cx="339" cy="77" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
149 | <circle cx="343" cy="66" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
150 | <circle cx="346" cy="68" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
151 | <circle cx="350" cy="37" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
152 | <circle cx="354" cy="56" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
153 | <circle cx="357" cy="68" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
154 | <circle cx="361" cy="60" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
155 | <circle cx="365" cy="60" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
156 | <circle cx="368" cy="15" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
157 | <circle cx="372" cy="31" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
158 | <circle cx="375" cy="39" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
159 | <circle cx="379" cy="21" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
160 | <circle cx="383" cy="46" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
161 | <circle cx="386" cy="46" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
162 | <circle cx="390" cy="39" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
163 | <circle cx="394" cy="37" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
164 | <circle cx="397" cy="32" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
165 | <circle cx="401" cy="24" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
166 | <circle cx="404" cy="27" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
167 | <circle cx="408" cy="29" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
168 | <circle cx="412" cy="34" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
169 | <circle cx="415" cy="35" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
170 | <circle cx="419" cy="34" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
171 | <circle cx="423" cy="31" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
172 | <circle cx="426" cy="26" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
173 | <circle cx="430" cy="25" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
174 | <circle cx="434" cy="23" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
175 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="75,245 434,15 "/>
176 | <polygon opacity="0.25" fill="#1F78B4" points="75,245 434,15 434,15 "/>
177 | </svg>
178 |
```
--------------------------------------------------------------------------------
/benchmarks/centralization-risk/report/pdf.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 | centralization-risk
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 | Iterations (x 10^3)
7 | </text>
8 | <text x="480" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
9 | Average Time (µs)
10 | </text>
11 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
12 | <text x="77" y="472" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
13 | 0
14 | </text>
15 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,472 86,472 "/>
16 | <text x="77" y="419" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
17 | 1
18 | </text>
19 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,419 86,419 "/>
20 | <text x="77" y="365" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
21 | 2
22 | </text>
23 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,365 86,365 "/>
24 | <text x="77" y="311" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
25 | 3
26 | </text>
27 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,311 86,311 "/>
28 | <text x="77" y="258" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
29 | 4
30 | </text>
31 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,258 86,258 "/>
32 | <text x="77" y="204" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
33 | 5
34 | </text>
35 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,204 86,204 "/>
36 | <text x="77" y="150" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
37 | 6
38 | </text>
39 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,150 86,150 "/>
40 | <text x="77" y="96" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
41 | 7
42 | </text>
43 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,96 86,96 "/>
44 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 872,473 "/>
45 | <text x="100" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
46 | 11
47 | </text>
48 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="100,473 100,478 "/>
49 | <text x="178" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
50 | 11.5
51 | </text>
52 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="178,473 178,478 "/>
53 | <text x="257" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
54 | 12
55 | </text>
56 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="257,473 257,478 "/>
57 | <text x="335" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
58 | 12.5
59 | </text>
60 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="335,473 335,478 "/>
61 | <text x="413" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
62 | 13
63 | </text>
64 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="413,473 413,478 "/>
65 | <text x="492" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
66 | 13.5
67 | </text>
68 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="492,473 492,478 "/>
69 | <text x="570" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
70 | 14
71 | </text>
72 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="570,473 570,478 "/>
73 | <text x="649" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
74 | 14.5
75 | </text>
76 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="649,473 649,478 "/>
77 | <text x="727" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
78 | 15
79 | </text>
80 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="727,473 727,478 "/>
81 | <text x="805" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
82 | 15.5
83 | </text>
84 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="805,473 805,478 "/>
85 | <text x="933" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(90, 933, 263)">
86 | Density (a.u.)
87 | </text>
88 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,53 873,473 "/>
89 | <text x="883" y="473" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
90 | 0
91 | </text>
92 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,473 878,473 "/>
93 | <text x="883" y="423" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
94 | 0.1
95 | </text>
96 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,423 878,423 "/>
97 | <text x="883" y="373" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
98 | 0.2
99 | </text>
100 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,373 878,373 "/>
101 | <text x="883" y="323" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
102 | 0.3
103 | </text>
104 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,323 878,323 "/>
105 | <text x="883" y="273" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
106 | 0.4
107 | </text>
108 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,273 878,273 "/>
109 | <text x="883" y="223" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
110 | 0.5
111 | </text>
112 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,223 878,223 "/>
113 | <text x="883" y="173" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
114 | 0.6
115 | </text>
116 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,173 878,173 "/>
117 | <text x="883" y="123" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
118 | 0.7
119 | </text>
120 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,123 878,123 "/>
121 | <text x="883" y="73" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
122 | 0.8
123 | </text>
124 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,73 878,73 "/>
125 | <polygon opacity="0.5" fill="#1F78B4" points="87,473 88,473 90,473 91,473 93,473 94,473 96,473 98,473 99,473 101,473 102,473 104,472 105,472 107,472 109,472 110,472 112,472 113,471 115,471 116,471 118,471 120,470 121,470 123,470 124,469 126,469 127,468 129,468 131,467 132,467 134,466 135,465 137,464 138,464 140,463 142,462 143,461 145,460 146,459 148,457 150,456 151,455 153,453 154,451 156,450 157,448 159,446 161,444 162,442 164,440 165,437 167,435 168,432 170,429 172,427 173,424 175,421 176,417 178,414 179,410 181,407 183,403 184,399 186,395 187,391 189,386 190,382 192,377 194,372 195,367 197,362 198,357 200,352 201,346 203,341 205,335 206,330 208,324 209,318 211,312 213,306 214,299 216,293 217,287 219,281 220,274 222,268 224,261 225,255 227,248 228,242 230,235 231,228 233,222 235,215 236,209 238,202 239,196 241,190 242,183 244,177 246,171 247,165 249,159 250,153 252,147 253,141 255,136 257,130 258,125 260,120 261,115 263,110 264,105 266,101 268,97 269,92 271,88 272,85 274,81 276,78 277,74 279,71 280,69 282,66 283,64 285,62 287,60 288,58 290,57 291,56 293,55 294,54 296,54 298,53 299,54 301,54 302,54 304,55 305,56 307,58 309,59 310,61 312,63 313,65 315,68 316,70 318,73 320,76 321,79 323,83 324,86 326,90 327,94 329,98 331,102 332,107 334,111 335,116 337,121 339,125 340,130 342,135 343,140 345,145 346,150 348,156 350,161 351,166 353,171 354,176 356,181 357,187 359,192 361,197 362,202 364,207 365,212 367,217 368,222 370,226 372,231 373,236 375,240 376,245 378,249 379,254 381,258 383,262 384,266 386,271 387,275 389,278 391,282 392,286 394,290 395,294 397,297 398,301 400,304 402,308 403,311 405,314 406,317 408,321 409,324 411,327 413,330 414,333 416,336 417,339 419,341 420,344 422,347 424,350 425,352 427,355 428,357 430,360 431,362 433,365 435,367 436,370 438,372 439,374 441,376 442,378 444,381 446,383 447,385 449,387 450,389 452,391 454,392 455,394 457,396 458,398 460,399 461,401 463,403 465,404 466,406 468,407 469,409 471,410 472,411 474,413 476,414 477,415 479,417 480,418 482,419 483,420 485,421 487,422 488,423 490,425 491,426 493,427 494,428 496,429 498,430 499,430 501,431 502,432 504,433 505,434 507,435 509,436 510,437 512,438 513,438 515,439 517,440 518,441 520,442 521,442 523,443 524,444 526,445 528,445 529,446 531,447 532,447 534,448 535,449 537,449 539,450 540,450 542,451 543,452 545,452 546,453 548,453 550,454 551,454 553,455 554,455 556,455 557,456 559,456 561,457 562,457 564,457 565,458 567,458 568,458 570,459 572,459 573,459 575,460 576,460 578,460 580,460 581,460 583,461 584,461 586,461 587,461 589,461 591,461 592,462 594,462 595,462 597,462 598,462 600,462 602,462 603,463 605,463 606,463 608,463 609,463 611,463 613,463 614,463 616,463 617,463 619,463 620,463 622,463 624,464 625,464 627,464 628,464 630,464 632,464 633,464 635,464 636,464 638,464 639,464 641,464 643,464 644,463 646,463 647,463 649,463 650,463 652,463 654,463 655,463 657,462 658,462 660,462 661,462 663,462 665,461 666,461 668,461 669,461 671,460 672,460 674,460 676,459 677,459 679,459 680,459 682,458 683,458 685,458 687,457 688,457 690,457 691,456 693,456 695,456 696,455 698,455 699,455 701,454 702,454 704,454 706,454 707,453 709,453 710,453 712,453 713,453 715,453 717,453 718,453 720,452 721,452 723,452 724,452 726,453 728,453 729,453 731,453 732,453 734,453 735,453 737,453 739,454 740,454 742,454 743,454 745,455 746,455 748,455 750,456 751,456 753,457 754,457 756,457 758,458 759,458 761,459 762,459 764,459 765,460 767,460 769,461 770,461 772,462 773,462 775,462 776,463 778,463 780,464 781,464 783,465 784,465 786,465 787,466 789,466 791,466 792,467 794,467 795,467 797,468 798,468 800,468 802,469 803,469 805,469 806,469 808,470 809,470 811,470 813,470 814,471 816,471 817,471 819,471 821,471 822,471 824,472 825,472 827,472 828,472 830,472 832,472 833,472 835,472 836,473 838,473 839,473 841,473 843,473 844,473 846,473 847,473 849,473 850,473 852,473 854,473 855,473 857,473 858,473 860,473 861,473 863,473 865,473 866,473 868,473 869,473 871,473 873,473 873,473 87,473 "/>
126 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="333,472 333,53 "/>
127 | <polyline fill="none" opacity="1" stroke="#FF7F00" stroke-width="1" points="134,472 134,53 "/>
128 | <polyline fill="none" opacity="1" stroke="#FF7F00" stroke-width="1" points="502,472 502,53 "/>
129 | <polyline fill="none" opacity="1" stroke="#E31A1C" stroke-width="1" points="87,472 87,53 "/>
130 | <polyline fill="none" opacity="1" stroke="#E31A1C" stroke-width="1" points="640,472 640,53 "/>
131 | <circle cx="540" cy="422" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
132 | <circle cx="609" cy="338" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
133 | <circle cx="717" cy="267" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
134 | <circle cx="745" cy="263" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
135 | <circle cx="708" cy="200" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
136 | <circle cx="540" cy="422" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
137 | <circle cx="609" cy="338" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
138 | <circle cx="717" cy="267" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
139 | <circle cx="745" cy="263" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
140 | <circle cx="708" cy="200" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
141 | <text x="776" y="228" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
142 | PDF
143 | </text>
144 | <text x="776" y="243" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
145 | Mean
146 | </text>
147 | <text x="776" y="258" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
148 | "Clean" sample
149 | </text>
150 | <text x="776" y="273" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
151 | Mild outliers
152 | </text>
153 | <text x="776" y="288" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
154 | Severe outliers
155 | </text>
156 | <rect x="746" y="228" width="20" height="10" opacity="0.5" fill="#1F78B4" stroke="none"/>
157 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="746,248 766,248 "/>
158 | <circle cx="756" cy="263" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
159 | <circle cx="756" cy="278" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
160 | <circle cx="756" cy="293" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
161 | </svg>
162 |
```
--------------------------------------------------------------------------------
/benchmarks/delegate-call-in-loop/report/pdf.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 | delegate-call-in-loop
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 | Iterations (x 10^3)
7 | </text>
8 | <text x="480" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
9 | Average Time (µs)
10 | </text>
11 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
12 | <text x="77" y="472" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
13 | 0
14 | </text>
15 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,472 86,472 "/>
16 | <text x="77" y="421" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
17 | 1
18 | </text>
19 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,421 86,421 "/>
20 | <text x="77" y="369" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
21 | 2
22 | </text>
23 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,369 86,369 "/>
24 | <text x="77" y="317" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
25 | 3
26 | </text>
27 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,317 86,317 "/>
28 | <text x="77" y="266" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
29 | 4
30 | </text>
31 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,266 86,266 "/>
32 | <text x="77" y="214" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
33 | 5
34 | </text>
35 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,214 86,214 "/>
36 | <text x="77" y="162" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
37 | 6
38 | </text>
39 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,162 86,162 "/>
40 | <text x="77" y="110" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
41 | 7
42 | </text>
43 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,110 86,110 "/>
44 | <text x="77" y="59" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
45 | 8
46 | </text>
47 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,59 86,59 "/>
48 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 872,473 "/>
49 | <text x="189" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
50 | 11
51 | </text>
52 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="189,473 189,478 "/>
53 | <text x="301" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
54 | 12
55 | </text>
56 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="301,473 301,478 "/>
57 | <text x="413" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
58 | 13
59 | </text>
60 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="413,473 413,478 "/>
61 | <text x="525" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
62 | 14
63 | </text>
64 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="525,473 525,478 "/>
65 | <text x="637" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
66 | 15
67 | </text>
68 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="637,473 637,478 "/>
69 | <text x="749" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
70 | 16
71 | </text>
72 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="749,473 749,478 "/>
73 | <text x="861" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
74 | 17
75 | </text>
76 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="861,473 861,478 "/>
77 | <text x="933" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(90, 933, 263)">
78 | Density (a.u.)
79 | </text>
80 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,53 873,473 "/>
81 | <text x="883" y="473" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
82 | 0
83 | </text>
84 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,473 878,473 "/>
85 | <text x="883" y="398" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
86 | 0.2
87 | </text>
88 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,398 878,398 "/>
89 | <text x="883" y="322" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
90 | 0.4
91 | </text>
92 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,322 878,322 "/>
93 | <text x="883" y="246" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
94 | 0.6
95 | </text>
96 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,246 878,246 "/>
97 | <text x="883" y="170" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
98 | 0.8
99 | </text>
100 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,170 878,170 "/>
101 | <text x="883" y="94" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
102 | 1
103 | </text>
104 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,94 878,94 "/>
105 | <polygon opacity="0.5" fill="#1F78B4" points="87,473 88,473 90,473 91,473 93,473 94,473 96,472 98,472 99,472 101,472 102,472 104,471 105,471 107,470 109,470 110,469 112,469 113,468 115,467 116,466 118,465 120,464 121,463 123,462 124,460 126,459 127,457 129,455 131,453 132,450 134,448 135,445 137,442 138,438 140,435 142,431 143,427 145,422 146,417 148,412 150,407 151,401 153,395 154,389 156,382 157,375 159,368 161,360 162,352 164,344 165,335 167,326 168,317 170,307 172,298 173,288 175,277 176,267 178,257 179,246 181,235 183,225 184,214 186,203 187,192 189,182 190,171 192,161 194,151 195,141 197,131 198,122 200,114 201,105 203,97 205,90 206,83 208,77 209,72 211,67 213,63 214,60 216,57 217,55 219,54 220,53 222,54 224,55 225,57 227,60 228,63 230,68 231,72 233,78 235,84 236,91 238,99 239,106 241,115 242,124 244,133 246,142 247,152 249,162 250,172 252,183 253,193 255,203 257,214 258,224 260,234 261,244 263,254 264,264 266,273 268,282 269,291 271,300 272,308 274,316 276,324 277,331 279,338 280,344 282,351 283,357 285,362 287,368 288,373 290,378 291,382 293,386 294,390 296,394 298,398 299,401 301,404 302,407 304,410 305,413 307,415 309,418 310,420 312,422 313,425 315,427 316,429 318,430 320,432 321,434 323,436 324,437 326,439 327,440 329,442 331,443 332,444 334,445 335,447 337,448 339,449 340,450 342,451 343,451 345,452 346,453 348,454 350,454 351,455 353,455 354,456 356,456 357,457 359,457 361,458 362,458 364,458 365,458 367,459 368,459 370,459 372,459 373,459 375,459 376,460 378,460 379,460 381,460 383,460 384,460 386,460 387,460 389,461 391,461 392,461 394,461 395,461 397,461 398,461 400,461 402,462 403,462 405,462 406,462 408,462 409,462 411,462 413,463 414,463 416,463 417,463 419,463 420,463 422,464 424,464 425,464 427,464 428,464 430,464 431,465 433,465 435,465 436,465 438,466 439,466 441,466 442,466 444,466 446,467 447,467 449,467 450,467 452,468 454,468 455,468 457,468 458,469 460,469 461,469 463,469 465,470 466,470 468,470 469,470 471,471 472,471 474,471 476,471 477,471 479,471 480,472 482,472 483,472 485,472 487,472 488,472 490,472 491,473 493,473 494,473 496,473 498,473 499,473 501,473 502,473 504,473 505,473 507,473 509,473 510,473 512,473 513,473 515,473 517,473 518,473 520,473 521,473 523,473 524,473 526,473 528,473 529,473 531,473 532,473 534,473 535,473 537,473 539,473 540,473 542,473 543,473 545,473 546,473 548,473 550,473 551,473 553,473 554,473 556,473 557,473 559,473 561,473 562,473 564,473 565,473 567,473 568,473 570,473 572,473 573,473 575,473 576,473 578,473 580,473 581,473 583,473 584,473 586,473 587,473 589,473 591,473 592,473 594,473 595,473 597,473 598,473 600,473 602,473 603,473 605,473 606,473 608,473 609,473 611,473 613,473 614,473 616,473 617,473 619,473 620,473 622,473 624,473 625,473 627,473 628,473 630,473 632,473 633,473 635,473 636,473 638,473 639,473 641,473 643,473 644,473 646,473 647,473 649,473 650,473 652,473 654,473 655,473 657,473 658,473 660,473 661,473 663,473 665,473 666,473 668,473 669,473 671,473 672,473 674,473 676,473 677,473 679,473 680,473 682,473 683,473 685,473 687,473 688,473 690,473 691,473 693,473 695,473 696,473 698,473 699,473 701,473 702,473 704,473 706,473 707,473 709,473 710,473 712,473 713,473 715,473 717,473 718,473 720,473 721,473 723,473 724,473 726,473 728,473 729,473 731,472 732,472 734,472 735,472 737,472 739,472 740,472 742,472 743,471 745,471 746,471 748,471 750,471 751,470 753,470 754,470 756,470 758,470 759,470 761,469 762,469 764,469 765,469 767,469 769,469 770,468 772,468 773,468 775,468 776,468 778,468 780,468 781,468 783,468 784,468 786,468 787,468 789,468 791,468 792,468 794,468 795,468 797,468 798,468 800,468 802,469 803,469 805,469 806,469 808,469 809,469 811,470 813,470 814,470 816,470 817,470 819,471 821,471 822,471 824,471 825,471 827,471 828,472 830,472 832,472 833,472 835,472 836,472 838,472 839,472 841,473 843,473 844,473 846,473 847,473 849,473 850,473 852,473 854,473 855,473 857,473 858,473 860,473 861,473 863,473 865,473 866,473 868,473 869,473 871,473 873,473 873,473 87,473 "/>
106 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="236,472 236,53 "/>
107 | <polyline fill="none" opacity="1" stroke="#FF7F00" stroke-width="1" points="167,472 167,53 "/>
108 | <polyline fill="none" opacity="1" stroke="#FF7F00" stroke-width="1" points="276,472 276,53 "/>
109 | <polyline fill="none" opacity="1" stroke="#E31A1C" stroke-width="1" points="126,472 126,53 "/>
110 | <polyline fill="none" opacity="1" stroke="#E31A1C" stroke-width="1" points="317,472 317,53 "/>
111 | <circle cx="368" cy="468" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
112 | <circle cx="784" cy="464" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
113 | <circle cx="288" cy="460" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
114 | <circle cx="292" cy="452" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
115 | <circle cx="283" cy="443" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
116 | <circle cx="301" cy="405" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
117 | <circle cx="290" cy="401" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
118 | <circle cx="435" cy="397" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
119 | <circle cx="311" cy="393" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
120 | <circle cx="393" cy="389" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
121 | <circle cx="296" cy="284" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
122 | <circle cx="328" cy="141" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
123 | <circle cx="288" cy="460" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
124 | <circle cx="292" cy="452" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
125 | <circle cx="283" cy="443" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
126 | <circle cx="301" cy="405" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
127 | <circle cx="290" cy="401" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
128 | <circle cx="311" cy="393" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
129 | <circle cx="296" cy="284" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
130 | <circle cx="368" cy="468" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
131 | <circle cx="784" cy="464" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
132 | <circle cx="435" cy="397" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
133 | <circle cx="393" cy="389" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
134 | <circle cx="328" cy="141" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
135 | <text x="776" y="228" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
136 | PDF
137 | </text>
138 | <text x="776" y="243" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
139 | Mean
140 | </text>
141 | <text x="776" y="258" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
142 | "Clean" sample
143 | </text>
144 | <text x="776" y="273" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
145 | Mild outliers
146 | </text>
147 | <text x="776" y="288" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
148 | Severe outliers
149 | </text>
150 | <rect x="746" y="228" width="20" height="10" opacity="0.5" fill="#1F78B4" stroke="none"/>
151 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="746,248 766,248 "/>
152 | <circle cx="756" cy="263" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
153 | <circle cx="756" cy="278" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
154 | <circle cx="756" cy="293" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
155 | </svg>
156 |
```
--------------------------------------------------------------------------------
/aderyn_core/src/detect/entrypoint.rs:
--------------------------------------------------------------------------------
```rust
1 | use std::{
2 | collections::{BTreeMap, HashMap, btree_map::Entry},
3 | error::Error,
4 | ops::Add,
5 | path::{Path, PathBuf},
6 | str::FromStr,
7 | };
8 |
9 | use crate::{
10 | ast::NodeID,
11 | context::workspace::WorkspaceContext,
12 | detect::detector::{IssueDetector, IssueSeverity},
13 | stats::When,
14 | };
15 | use rayon::iter::{IntoParallelIterator, IntoParallelRefIterator, ParallelIterator};
16 | use serde::Serialize;
17 |
18 | #[derive(Default, PartialEq)]
19 | pub struct Report {
20 | pub highs: Vec<Issue>,
21 | pub lows: Vec<Issue>,
22 | }
23 |
24 | #[derive(Default, PartialEq, Clone, Debug)]
25 | pub struct Issue {
26 | pub title: String,
27 | pub description: String,
28 | pub detector_name: String,
29 | // Keys are: [0] source file name, [1] line number, [2] character location of node.
30 | // Do not add items manually, use `capture!` to add nodes to this BTreeMap.
31 | // Value is ASTNode.src
32 | pub instances: BTreeMap<(String, usize, String), NodeID>,
33 | pub hints: BTreeMap<(String, usize, String), String>,
34 | }
35 |
36 | #[derive(Serialize, Default)]
37 | pub struct FilesSummary {
38 | pub total_source_units: usize,
39 | pub total_sloc: usize,
40 | }
41 |
42 | #[derive(Serialize, Default)]
43 | pub struct FilesDetails {
44 | pub files_details: Vec<FilesDetail>,
45 | }
46 |
47 | impl Add<&FilesDetails> for FilesDetails {
48 | type Output = FilesDetails;
49 | fn add(mut self, rhs: &FilesDetails) -> Self::Output {
50 | for fd in &rhs.files_details {
51 | if self.files_details.iter().all(|x| x.file_path != fd.file_path) {
52 | self.files_details.push(fd.clone());
53 | }
54 | }
55 | self
56 | }
57 | }
58 |
59 | #[derive(Serialize, Clone)]
60 | pub struct FilesDetail {
61 | pub file_path: String,
62 | pub n_sloc: usize,
63 | }
64 |
65 | #[derive(Serialize)]
66 | pub struct IssueCount {
67 | pub high: usize,
68 | pub low: usize,
69 | }
70 |
71 | #[derive(Serialize, Debug)]
72 | pub struct IssueInstance {
73 | pub contract_path: String,
74 | pub line_no: usize,
75 |
76 | /// byte_offset:byte_length
77 | pub src: String,
78 |
79 | /// char_offset:char_length
80 | /// Here, char_offset is counted from the beginning of the file
81 | pub src_char: String,
82 |
83 | /// char_offset:char_length
84 | /// Here, char_offset is counted from the beginning of the line_no
85 | #[serde(skip_serializing)]
86 | pub src_char2: String,
87 | #[serde(skip_serializing_if = "Option::is_none")]
88 | pub hint: Option<String>,
89 | }
90 |
91 | #[derive(Serialize)]
92 | pub struct IssueBody {
93 | pub title: String,
94 | pub description: String,
95 | pub detector_name: String,
96 | pub instances: Vec<IssueInstance>,
97 | }
98 |
99 | #[derive(Serialize)]
100 | pub struct HighIssues {
101 | pub issues: Vec<IssueBody>,
102 | }
103 |
104 | #[derive(Serialize)]
105 | pub struct LowIssues {
106 | pub issues: Vec<IssueBody>,
107 | }
108 |
109 | pub fn detect_issues(
110 | contexts: &[WorkspaceContext],
111 | root_rel_path: &Path,
112 | detectors: Vec<Box<dyn IssueDetector>>,
113 | ) -> Result<Report, Box<dyn Error>> {
114 | let mut ignore_lines = HashMap::new();
115 | for context in contexts {
116 | ignore_lines.extend(context.ignore_lines_stats.clone());
117 | }
118 |
119 | let mut report: Report = Report::default();
120 |
121 | let issues_collection: Vec<(Issue, IssueSeverity)> = detectors
122 | .par_iter()
123 | .flat_map(|detector| {
124 | let mut issue: Issue = Issue {
125 | title: detector.title(),
126 | description: detector.description(),
127 | detector_name: detector.name(),
128 | instances: Default::default(),
129 | hints: Default::default(),
130 | };
131 |
132 | let mut detectors_instances = BTreeMap::new();
133 | let mut detector_hints = BTreeMap::new();
134 |
135 | let collection_of_instances = contexts
136 | .into_par_iter()
137 | .map(|context| {
138 | let mut d = detector.skeletal_clone();
139 | if let Ok(found) = d.detect(context)
140 | && found
141 | {
142 | let instances = d.instances();
143 | let hints = d.hints();
144 | return (
145 | instances,
146 | hints,
147 | context.src_filepaths.clone(),
148 | context.included.clone(),
149 | );
150 | }
151 | (
152 | Default::default(),
153 | Default::default(),
154 | context.src_filepaths.clone(),
155 | context.included.clone(),
156 | )
157 | })
158 | .collect::<Vec<_>>();
159 |
160 | // Commit detector instances
161 | //
162 | // NOTE: Possible merge conflict here
163 | //
164 | // For a given detector D, in a file F,
165 | //
166 | // Context C1 captures instances A, B, C
167 | // Context C2 captures instances B, C, D
168 | //
169 | // This is a conflict!
170 | //
171 | // We need a strategy to resolve this and it depends on the detector
172 | //
173 | // For example, if the detector determines that A, B, C are immutable when considering
174 | // one set of files but B, C, D when considering another set of files, it is only safe
175 | // to conclude that the B, C are immutable.
176 | //
177 | // Such a technique to resolve this conflict would be called INTERSECTION strategy
178 | //
179 | // Alternative way would be UNION strategy
180 | //
181 |
182 | // NOTE: Intersection strategy logic
183 | #[allow(clippy::complexity)]
184 | let mut grouped_instances: BTreeMap<
185 | String,
186 | Vec<BTreeMap<(String, usize, String), i64>>,
187 | > = Default::default();
188 |
189 | for (instances, hints, src_filepaths, included) in collection_of_instances {
190 | let mut grouped_instances_context: BTreeMap<
191 | String,
192 | BTreeMap<(String, usize, String), i64>,
193 | > = BTreeMap::new();
194 |
195 | for (key, value) in instances {
196 | match grouped_instances_context.entry(key.0.clone()) {
197 | Entry::Vacant(v) => {
198 | let mut mini_btree = BTreeMap::new();
199 | mini_btree.insert(key, value);
200 | v.insert(mini_btree);
201 | }
202 | Entry::Occupied(mut o) => {
203 | o.get_mut().insert(key, value);
204 | }
205 | };
206 | }
207 |
208 | for key in src_filepaths {
209 | if let Entry::Vacant(v) = grouped_instances_context.entry(key) {
210 | v.insert(Default::default());
211 | }
212 | }
213 |
214 | for (key, value) in grouped_instances_context {
215 | if !included.contains(&PathBuf::from_str(&key).unwrap()) {
216 | continue;
217 | }
218 | match grouped_instances.entry(key.clone()) {
219 | Entry::Vacant(v) => {
220 | v.insert(vec![value]);
221 | }
222 | Entry::Occupied(mut o) => {
223 | o.get_mut().push(value);
224 | }
225 | }
226 | }
227 |
228 | detector_hints.extend(hints);
229 | }
230 |
231 | for (_filename, value) in grouped_instances {
232 | // Find the common instances across all the contexts' BTrees.
233 |
234 | let mut selected_instances = BTreeMap::new();
235 |
236 | for instances in &value {
237 | for instance in instances {
238 | if value.iter().all(|tree| tree.contains_key(&instance.0.clone())) {
239 | selected_instances.insert(instance.0.clone(), *instance.1);
240 | }
241 | }
242 | }
243 |
244 | detectors_instances.extend(selected_instances);
245 | }
246 | // NOTE: Union strategy would work something like this
247 | //
248 | // for (instances, hints, _src_filepaths) in collection_of_instances.into_iter() {
249 | // if instances.is_empty() {
250 | // continue;
251 | // }
252 | // detectors_instances.extend(instances);
253 | // detector_hints.extend(hints);
254 | // }
255 |
256 | if detectors_instances.is_empty() {
257 | return None;
258 | }
259 |
260 | issue.instances = detectors_instances
261 | .into_iter()
262 | .filter(|(instance, _)| {
263 | let Some(lines_to_ignore_in_file) = ignore_lines.get(
264 | &dunce::canonicalize(root_rel_path.join(&instance.0).as_path())
265 | .unwrap()
266 | .to_string_lossy()
267 | .to_string(),
268 | ) else {
269 | panic!(
270 | "File Not Found in Ignore stats: {}",
271 | &dunce::canonicalize(root_rel_path.join(&instance.0).as_path())
272 | .unwrap()
273 | .to_string_lossy()
274 | .to_string()
275 | );
276 | };
277 |
278 | if lines_to_ignore_in_file.is_empty() {
279 | return true;
280 | }
281 |
282 | for ignore_condition in lines_to_ignore_in_file.iter() {
283 | if ignore_condition.which == instance.1 {
284 | match &ignore_condition.when {
285 | When::Always => {
286 | return false;
287 | }
288 | When::ForDetectorsWithNames(names) => {
289 | if names.iter().any(|name| *name == detector.name()) {
290 | return false;
291 | }
292 | }
293 | }
294 | }
295 | }
296 | true
297 | })
298 | .collect();
299 |
300 | issue.hints = detector_hints;
301 |
302 | if issue.instances.is_empty() {
303 | return None;
304 | }
305 |
306 | Some((issue, detector.severity()))
307 | })
308 | .collect();
309 |
310 | for (issue, severity) in issues_collection {
311 | match severity {
312 | IssueSeverity::High => {
313 | report.highs.push(issue);
314 | }
315 | IssueSeverity::Low => {
316 | report.lows.push(issue);
317 | }
318 | }
319 | }
320 |
321 | Ok(report)
322 | }
323 |
324 | impl Report {
325 | pub fn issue_count(&self) -> IssueCount {
326 | IssueCount { high: self.highs.len(), low: self.lows.len() }
327 | }
328 |
329 | pub fn detailed_issues(&self, contexts: &[WorkspaceContext]) -> (HighIssues, LowIssues) {
330 | let file_contents = contexts
331 | .iter()
332 | .flat_map(|context| context.source_units())
333 | .map(|source_unit| {
334 | (
335 | source_unit.absolute_path.as_ref().unwrap().to_owned(),
336 | source_unit.source.as_ref().unwrap(),
337 | )
338 | })
339 | .collect::<HashMap<_, _>>();
340 |
341 | let high_issues = HighIssues { issues: extract_issue_bodies(&self.highs, &file_contents) };
342 | let low_issues = LowIssues { issues: extract_issue_bodies(&self.lows, &file_contents) };
343 | (high_issues, low_issues)
344 | }
345 | }
346 |
347 | fn extract_issue_bodies(
348 | issues: &[Issue],
349 | file_contents: &HashMap<String, &String>,
350 | ) -> Vec<IssueBody> {
351 | issues
352 | .iter()
353 | .map(|cr| {
354 | let all_instances: Vec<_> = cr
355 | .instances
356 | .keys()
357 | .map(|(contract_path, line_no, src_location)| {
358 | // Calculate character based offset & length position here
359 | let (byte_offset_str, byte_len_str) = src_location.split_once(':').unwrap();
360 | let byte_offset: usize = byte_offset_str.parse().unwrap();
361 | let byte_length: usize = byte_len_str.parse().unwrap();
362 | let content = *file_contents.get(contract_path).unwrap();
363 | let mut current_line_no = 0;
364 | let mut pre_line_char_offset = 0;
365 | let mut char_offset = 0;
366 | let mut stop_counting_preline_offset = false;
367 | for (byte_offset_so_far, c) in content.char_indices() {
368 | if byte_offset_so_far == byte_offset {
369 | break;
370 | }
371 | if c == '\n' {
372 | current_line_no += 1;
373 | if current_line_no == line_no - 1 {
374 | stop_counting_preline_offset = true;
375 | }
376 | }
377 | if !stop_counting_preline_offset {
378 | pre_line_char_offset += 1;
379 | }
380 | char_offset += 1;
381 | }
382 | let mut char_len = 0;
383 | for (byte_offset_so_far, _) in content.as_str()[byte_offset..].char_indices() {
384 | if byte_offset_so_far == byte_length {
385 | break;
386 | }
387 | char_len += 1;
388 | }
389 |
390 | let hint = cr.hints.get(&(
391 | contract_path.to_string(),
392 | *line_no,
393 | src_location.to_string(),
394 | ));
395 |
396 | IssueInstance {
397 | contract_path: contract_path.clone(),
398 | line_no: *line_no,
399 | src: src_location.clone(),
400 | src_char: format!("{}:{}", char_offset, char_len),
401 | src_char2: format!("{}:{}", char_offset - pre_line_char_offset, char_len),
402 | hint: hint.cloned(),
403 | }
404 | })
405 | .collect();
406 |
407 | IssueBody {
408 | title: cr.title.clone(),
409 | description: cr.description.clone(),
410 | instances: all_instances,
411 | detector_name: cr.detector_name.clone(),
412 | }
413 | })
414 | .collect()
415 | }
416 |
```