Skip to content

deps(deps): Bump the python-minor-and-patch group with 6 updates#342

Open
dependabot[bot] wants to merge 1 commit into
devfrom
dependabot/uv/python-minor-and-patch-63a40aa574
Open

deps(deps): Bump the python-minor-and-patch group with 6 updates#342
dependabot[bot] wants to merge 1 commit into
devfrom
dependabot/uv/python-minor-and-patch-63a40aa574

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jun 8, 2026

Copy link
Copy Markdown
Contributor

Bumps the python-minor-and-patch group with 6 updates:

Package From To
pygad 3.6.0 3.7.0
djangoql-iplweb 0.27.0 0.27.2
tqdm 4.67.3 4.68.1
beautifulsoup4 4.14.3 4.15.0
ruff 0.15.15 0.15.16
djlint 1.36.4 1.39.0

Updates pygad from 3.6.0 to 3.7.0

Release notes

Sourced from pygad's releases.

PyGAD-3.7.0

  1. Validation logic is applied to validate the num_generations parameter.
  2. The num_generations parameter must be assigned a positive integer. Previously, any number (positive/negative, int/float) was accepted.
  3. A new script called activation.py is added into the pygad.helper module to include the activation function used by the cnn and nn modules.
  4. In the pygad.parent_selection.ParentSelection class, the stochastic_universal_selection() method now calls the wheel_cumulative_probs() method instead of repeating the code of calculating the probabilities used for parent selection.
  5. The wheel_cumulative_probs() method in the pygad.parent_selection.ParentSelection class is refactored to reduce its computational time.
  6. Use numpy.where() to decide which the source parent of each gene within the uniform_crossover() method in the utils/crossover.py script. The same was already applied to the scattered_crossover() method.
  7. Add tests for the following modules:
    1. nn
    2. cnn
    3. gacnn
    4. kerasga
    5. torchga
  8. Fix a bug in the visualize/plot.py script where the labels parameter of boxplot() has been renamed tick_labels in Matplotlib.
  9. Fix a bug where the best_solutions_fitness list (instance attribute to pygad.GA) has the fitness of the last generation duplicated when an early stop happens inside the on_generation() callback. This made its size incompatible with the best_solutions list.
  10. The documentation is refactored to solve many language issues and the Furo theme is applied. For easy navigation, the index is reformatted to only show the main sections. At each page, its index is shown at the right side. A new theme toggle button to change theme between light and dark.
  11. Support of multi-objective optimization using the Non-Dominated Sorting Genetic Algorithm III (NSGA-III). NSGA-III replaces the crowding distance of NSGA-II with niching against a structured grid of reference points, so it scales better to problems with 4 or more objectives. The new NSGA3 class lives in the new pygad/utils/nsga3.py script and is mixed into the pygad.GA class the same way NSGA2 is.
  12. Two new parent selection methods are added to support NSGA-III: 1) nsga3_selection() for plain NSGA-III selection, and 2) tournament_selection_nsga3() for the tournament variant. Use them by setting parent_selection_type to 'nsga3' or 'tournament_nsga3'.
  13. A new parameter nsga3_num_divisions is added to the pygad.GA constructor. It is required when parent_selection_type is 'nsga3' or 'tournament_nsga3' and sets the number of divisions per objective axis used to build the structured reference points (the p parameter from Deb & Jain 2014). The total number of reference points is C(M + p - 1, p) where M is the number of objectives.
  14. When sol_per_pop is smaller than the number of NSGA-III reference points, PyGAD raises a warning and grows the population to match before the generational loop starts.
  15. A new crossover operator: Simulated Binary Crossover (SBX). Use it by setting crossover_type='sbx'. The shape of the spread is controlled by the new sbx_crossover_eta parameter (default 30).
  16. A new mutation operator: polynomial mutation. Use it by setting mutation_type='polynomial'. The size of the change is controlled by the new polynomial_mutation_eta parameter (default 20).
  17. Two new stop criteria: time_<seconds> stops the run when the time inside run() is at least the given number of seconds; evaluations_<N> stops the run when the number of fitness function calls reaches the given count. New instance attribute num_fitness_evaluations counts the calls.
  18. A new submodule pygad.utils.quality_indicators with four functions to measure the quality of a Pareto front: hypervolume, inverted_generational_distance, generational_distance, and spacing.
  19. A new submodule pygad.benchmarks with built-in benchmark problems. pygad.benchmarks.classic has Sphere, Rastrigin, Rosenbrock, Griewank, Schwefel, Ackley, and Himmelblau. pygad.benchmarks.zdt has the ZDT family (ZDT1, ZDT2, ZDT3, ZDT4, ZDT6). pygad.benchmarks.dtlz has DTLZ1, DTLZ2, DTLZ3, and DTLZ4. pygad.benchmarks.knapsack has the 0/1 Knapsack problem. Each class is callable with the PyGAD fitness signature and returns negated values (for the minimization-style problems) so PyGAD can maximize toward the original minimum.
  20. Update the documentation to reflect the recent additions and changes to the library structure.
  21. A new benchmark pygad.benchmarks.tsp with a TSP class for the Travelling Salesman Problem. The class accepts either 2D coordinates or a precomputed distance_matrix, exposes gene_space, gene_type, and allow_duplicate_genes for the permutation encoding, and returns the negative tour length as the fitness.
  22. Two new example folders under /examples: examples/benchmarks/ has one runnable example per benchmark (classic, ZDT, DTLZ, knapsack, and TSP), and examples/quality_indicators/ has one runnable example per quality indicator (hypervolume, IGD, GD, and spacing).
  23. plot_pareto_front_curve() now also supports 3 objectives (3D scatter). M >= 4 still raises and points to the new high-dimensional plots.
  24. Seven new plot methods on pygad.GA. The first three work on the final population (no extra flag needed): plot_pareto_front_pcp() (parallel coordinates, any M >= 2), plot_pareto_front_scatter_matrix() (M-by-M pairwise scatter, best for M >= 4), and plot_pareto_front_heatmap() (solutions-by-objectives heatmap). The other four require save_solutions=True: plot_fitness_band() (per-generation min / mean / max with a shaded band), plot_non_dominated_hypervolume() (hypervolume of the non-dominated set per generation), plot_population_diversity() (mean pairwise distance per generation), and plot_pareto_front_evolution() (non-dominated set overlaid every k generations).
  25. Fix a latent divide-by-zero in NSGA3.nsga3_normalize_fitness(). The safeguard for near-zero denominators used to collapse to 0 for tiny negative values (the realistic case under PyGAD-max), which silently produced wrong normalized values. The safeguard now keeps the negative sign.
  26. Refactor the NSGA classes to keep each script focused. A new module pygad/utils/nsga.py hosts the NSGA mixin with non_dominated_sorting() and get_non_dominated_set(), which are shared between NSGA-II and NSGA-III. nsga2.py now only carries NSGA-II specific code (crowding_distance, sort_solutions_nsga2). nsga3.py now only carries the NSGA-III algorithm primitives. The nsga3_selection() and tournament_selection_nsga3() methods have moved to pygad/utils/parent_selection.py next to their NSGA-II counterparts. The engine-time helpers _bootstrap_nsga3_reference_points(), _nsga3_grow_population(), _nsga3_generate_extra_random_solutions(), and _nsga3_generate_single_random_gene() now live in pygad/utils/engine.py.
  27. Rename NSGA-III novel names to start with nsga3_ so the algorithm-specific surface is easy to spot. Algorithm primitives become nsga3_generate_reference_points, nsga3_compute_ideal_point, nsga3_find_extreme_points, nsga3_compute_intercepts, nsga3_normalize_fitness, nsga3_associate_to_reference_points, and nsga3_niching_select. Module-level helpers gain the same prefix (_nsga3_pick_target_reference_point, _nsga3_pick_candidate_at_reference, _nsga3_enumerate_compositions, _nsga3_validate_multi_objective_fitness, _nsga3_accumulate_fronts). The constants are renamed NSGA3_ASF_EPSILON and NSGA3_INTERCEPT_NEAR_ZERO. Names that already had NSGA-II parallels (tournament_selection_nsga3, pareto_fronts, non_dominated_sorting) keep their original spelling.
  28. Spell every name and docstring in American English (normalize, maximize, behavior, color, optimization, ...) so the library stays consistent.
  29. Expand abbreviated names introduced by the NSGA-III refactor: fl_indices to critical_front_indices, fl_assoc to critical_front_associations, fl_dist to critical_front_distances, st_indices to selection_pool_indices, st_fitness to selection_pool_fitness, accepted_assoc to accepted_associations, K to num_to_select (in nsga3_niching_select).
  30. The NSGA-III population auto-growth path now respects every initial-population rule: init_range_low/init_range_high, gene_space, gene_type (single dtype or nested per-gene [type, precision]), gene_constraint, and allow_duplicate_genes=False. Previously, only the gene-space / init-range sampling step was applied; gene constraints and duplicate resolution were skipped, which could leave the grown rows in an invalid state.
  31. A new Report mixin in pygad/utils/report.py adds ga_instance.generate_report(filename, ...) to build a PDF report of the run. The report bundles a configuration table, a run-summary table, the best solution, and every applicable plot (auto-selected based on the run's properties: SOO vs MOO, number of objectives, save_solutions, save_best_solutions). The report uses reportlab and matplotlib, both available through the new optional dependency extra pip install pygad[report].
  32. A new example examples/example_generate_report.py shows how to build a PDF report after running a multi-objective GA.
  33. The pygad.md, releases.md, visualize.md, and utils.md documentation pages were updated to reflect the new module layout, the renamed methods, the new generate_report() entry point, and the new NSGA-III instance attributes (nsga3_num_divisions, nsga3_reference_points). The "Other Instance Attributes & Methods" section in pygad.md is now grouped by area (Lifecycle, Population, Fitness, Parent Selection, NSGA-II, NSGA-III, Crossover, Mutation, Elitism, Gene Constraints, Saving) so each method or attribute appears under its topic.
  34. Fix issue ahmedfgad/GeneticAlgorithmPython#351 by updating the documentation to clarify what the solution has.
  35. Version changed in the following modules: 1. A new submodule pygad.benchmarks is added with the version 1.0.0. 2. The version of the pygad.utils submodule is upgraded from 1.4.0 to 1.5.0. 3. The version of the pygad.helper submodule is upgraded from 1.3.0 to 1.4.0. 4. The version of the pygad.visualize submodule is upgraded from 1.1.1 to 1.2.0. 5. The version of the pygad.nn submodule is upgraded from 1.2.2 to 1.2.3. 6. The version of the pygad.cnn submodule is upgraded from 1.1.1 to 1.1.2. 7. The version of the pygad.kerasga submodule is upgraded from 1.3.1 to 1.3.2. 8. The version of the pygad.torchga submodule is upgraded from 1.4.1 to 1.4.2. 9. The version of the pygad.gann submodule is upgraded from 1.0.0 to 1.0.1.

... (truncated)

Commits

Updates djangoql-iplweb from 0.27.0 to 0.27.2

Commits
  • 7e6c1fb Bump version 0.27.1 -> 0.27.2
  • c523b75 Test djangojs catalog compilation
  • 5c3e520 Fix localized syntax help language handling
  • c1f4747 Fix logical operator precedence
  • 38a3c6e Bump version 0.27.0 -> 0.27.1
  • 31a2349 feat(i18n): localize "Syntax Help" completion-popup link
  • See full diff in compare view

Updates tqdm from 4.67.3 to 4.68.1

Release notes

Sourced from tqdm's releases.

tqdm v4.68.1 stable

tqdm v4.68.0 stable

  • utils: simplify terminal size detection (#1760)
  • contrib
    • itertools (#1760)
      • add chain, permutations, combinations, combinations_with_replacement, batched
      • add product(repeat=1) keyword argument (#1428)
    • fix discord, telegram error handling
    • fix discord, slack, telegram format for total=None
  • soft-deprecate tqdm.utils.envwrap -> envwrap
  • benchmarks: fix asv
  • misc linting
  • misc framework updates
    • CI: migrate manual job to pre-commit.ci
    • bump workflow actions & pre-commit hooks
Commits
  • 67cf355 Merge pull request #1751 from jaltmayerpizzorno/fix-atexit-monitor-deadlock
  • cfa4a85 minor docstring updates
  • f83290c Fix TMonitor deadlock at interpreter shutdown
  • 59029c3 Set name for tqdm monitor thread (#1752)
  • ef4a142 bump version, merge pull request #1760 from tqdm/devel
  • 17f246b lint warning suppression
  • c682c7b benchmarks: fix asv
  • fc69588 CI: migrate to pre-commit.ci
  • a31d97f more contrib.itertools
  • e4d9742 soft-deprecate tqdm.utils.envwrap -> envwrap
  • Additional commits viewable in compare view

Updates beautifulsoup4 from 4.14.3 to 4.15.0

Updates ruff from 0.15.15 to 0.15.16

Release notes

Sourced from ruff's releases.

0.15.16

Release Notes

Released on 2026-06-04.

Preview features

  • [flake8-async] Implement yield-in-context-manager-in-async-generator (ASYNC119) (#24644)
  • [pylint] Narrow diagnostic range and exclude cases without exception handlers (PLW0717) (#25440)
  • [ruff] Treat yield before break from a terminal loop as terminal (RUF075) (#25447)

Bug fixes

  • [eradicate] Avoid flagging ruff:ignore comments as code (ERA001) (#25537)
  • [eradicate] Fix ERA001/RUF100 conflict when noqa is on commented-out code (#25414)
  • [pyflakes] Avoid removing the format call when it would change behavior (F523) (#25320)
  • [pylint] Avoid syntax errors in invalid character replacements in f-strings before Python 3.12 (PLE2510, PLE2512, PLE2513, PLE2514, PLE2515) (#25544)
  • [pyupgrade] Avoid converting format calls with more kinds of side effects (UP032) (#25484)

Rule changes

  • [flake8-pytest-style] Avoid fixes for ambiguous argnames and argvalues combinations (PT006) (#24776)

Performance

  • Drop excess capacity from statement suites during parsing (#25368)

Documentation

  • [pydocstyle] Improve discoverability of rules enabled for each convention (#24973)
  • [ruff] Restore example code for Python versions before 3.15 (RUF017) (#25439)
  • Fix typo bin/activebin/activate in tutorial (#25473)

Other changes

  • Shrink additional parser AST collections (#25465)

Contributors

... (truncated)

Changelog

Sourced from ruff's changelog.

0.15.16

Released on 2026-06-04.

Preview features

  • [flake8-async] Implement yield-in-context-manager-in-async-generator (ASYNC119) (#24644)
  • [pylint] Narrow diagnostic range and exclude cases without exception handlers (PLW0717) (#25440)
  • [ruff] Treat yield before break from a terminal loop as terminal (RUF075) (#25447)

Bug fixes

  • [eradicate] Avoid flagging ruff:ignore comments as code (ERA001) (#25537)
  • [eradicate] Fix ERA001/RUF100 conflict when noqa is on commented-out code (#25414)
  • [pyflakes] Avoid removing the format call when it would change behavior (F523) (#25320)
  • [pylint] Avoid syntax errors in invalid character replacements in f-strings before Python 3.12 (PLE2510, PLE2512, PLE2513, PLE2514, PLE2515) (#25544)
  • [pyupgrade] Avoid converting format calls with more kinds of side effects (UP032) (#25484)

Rule changes

  • [flake8-pytest-style] Avoid fixes for ambiguous argnames and argvalues combinations (PT006) (#24776)

Performance

  • Drop excess capacity from statement suites during parsing (#25368)

Documentation

  • [pydocstyle] Improve discoverability of rules enabled for each convention (#24973)
  • [ruff] Restore example code for Python versions before 3.15 (RUF017) (#25439)
  • Fix typo bin/activebin/activate in tutorial (#25473)

Other changes

  • Shrink additional parser AST collections (#25465)

Contributors

Commits

Updates djlint from 1.36.4 to 1.39.0

Release notes

Sourced from djlint's releases.

v1.39.0

Feature

  • Add preserve_class_newlines / --preserve-class-newlines to keep authored line breaks inside multiline class attributes. #495

Fix

  • Fix Django 6.0 {% partialdef %} block indentation so {% endpartialdef %} aligns with its opener. #1556
  • Preserve multiline Django/Jinja control-flow blocks instead of condensing short bodies onto one line. #1597
  • Preserve single-line inline HTML and template tag bodies during expansion, even when they exceed max_line_length.

v1.38.2

  • Fix python -m djlint not working due to mypyc compilation.

v1.38.1

Fix

  • Match exclude paths on path boundaries. #1028

v1.38.0

Feature

  • Add support for .djlint.toml project and global config files. #1181

Fix

  • Preserve single-line inline HTML tag bodies when they fit within max_line_length. #637 #2041
  • Avoid evaluating template expressions while formatting tag contents. #784 #828 #1030 #1158

Packaging

  • Fix npm publish workflow.

v1.37.0

This release was not published on npm, as I am waiting for the owner to set up trusted publishing.

Feature

  • Add --format-attribute-js-json for formatting JavaScript and JSON inside HTML attributes. It also supports format_attribute_js_json_pattern and format_attribute_js_json_min_props for tuning which attributes are formatted. Thanks, @​oliverhaas.
  • Add --github-output for GitHub Actions annotations. Thanks, @​iloveitaly.

Fix

  • Fix ignore_blocks matching when ignored blocks are indented. Thanks, @​tdryer.
  • Use relative paths for --exclude and --use-gitignore matching so path filters work consistently from nested directories. Thanks, @​satya-waylit.
  • Stop D018/J018 from flagging root links such as href="/". Thanks, @​SAY-5.
  • Do not treat soft hyphen entities as text for H023. Thanks, @​kotutuloro.
  • Fix Handlebars {{#unless}} indentation. Thanks, @​S1mplePixels.
  • Fix formatting when /> appears inside an HTML attribute value. Thanks, @​novucs.
  • Improve CPU count handling for worker setup.

... (truncated)

Changelog

Sourced from djlint's changelog.

[1.39.0] - 2026-06-05

Feature

  • Add preserve_class_newlines / --preserve-class-newlines to keep authored line breaks inside multiline class attributes.

Fix

  • Fix Django 6.0 {% partialdef %} block indentation so {% endpartialdef %} aligns with its opener.
  • Preserve multiline Django/Jinja control-flow blocks instead of condensing short bodies onto one line.
  • Preserve single-line inline HTML and template tag bodies during expansion, even when they exceed max_line_length.

[1.38.2] - 2026-06-05

Fix

  • Fix python -m djlint not working due to mypyc compilation.

[1.38.1] - 2026-06-04

Fix

  • Match exclude paths on path boundaries.

[1.38.0] - 2026-06-04

Feature

  • Add support for .djlint.toml project and global config files.

Fix

  • Preserve single-line inline HTML tag bodies when they fit within max_line_length.
  • Avoid evaluating template expressions while formatting tag contents.

Packaging

  • Fix npm publish workflow.

[1.37.0] - 2026-06-04

Feature

  • Add --format-attribute-js-json for formatting JavaScript and JSON inside HTML attributes. It also supports format_attribute_js_json_pattern and format_attribute_js_json_min_props for tuning which attributes are formatted. Thanks, @​oliverhaas.
  • Add --github-output for GitHub Actions annotations. Thanks, @​iloveitaly.

Fix

  • Fix ignore_blocks matching when ignored blocks are indented. Thanks, @​tdryer.
  • Use relative paths for --exclude and --use-gitignore matching so path filters work consistently from nested directories. Thanks, @​satya-waylit.

... (truncated)

Commits
  • cc4a310 v1.39.0
  • cbe1778 feat(formatter): preserve multiline class attribute breaks
  • 1d10cd8 fix: preserve multiline template control blocks
  • 4a29553 Fix Django partialdef indentation
  • dbfcf6d chore: reformat
  • d2ce695 fix(formatter): preserve single-line inline bodies during expansion
  • 24eea19 chore(deps): lock file maintenance (#2051)
  • 506da77 Fix python -m djlint not working due to mypyc compilation
  • 854c897 chore(deps): lock file maintenance (#2049)
  • 3f5a83a docs: update config options
  • Additional commits viewable in compare view

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore <dependency name> major version will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
  • @dependabot ignore <dependency name> minor version will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
  • @dependabot ignore <dependency name> will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
  • @dependabot unignore <dependency name> will remove all of the ignore conditions of the specified dependency
  • @dependabot unignore <dependency name> <ignore condition> will remove the ignore condition of the specified dependency and ignore conditions

Bumps the python-minor-and-patch group with 6 updates:

| Package | From | To |
| --- | --- | --- |
| [pygad](https://github.com/ahmedfgad/GeneticAlgorithmPython) | `3.6.0` | `3.7.0` |
| [djangoql-iplweb](https://github.com/iplweb/djangoql-iplweb) | `0.27.0` | `0.27.2` |
| [tqdm](https://github.com/tqdm/tqdm) | `4.67.3` | `4.68.1` |
| [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/) | `4.14.3` | `4.15.0` |
| [ruff](https://github.com/astral-sh/ruff) | `0.15.15` | `0.15.16` |
| [djlint](https://github.com/djlint/djLint) | `1.36.4` | `1.39.0` |


Updates `pygad` from 3.6.0 to 3.7.0
- [Release notes](https://github.com/ahmedfgad/GeneticAlgorithmPython/releases)
- [Commits](ahmedfgad/GeneticAlgorithmPython@3.6.0...3.7.0)

Updates `djangoql-iplweb` from 0.27.0 to 0.27.2
- [Release notes](https://github.com/iplweb/djangoql-iplweb/releases)
- [Changelog](https://github.com/iplweb/djangoql-iplweb/blob/master/CHANGES.rst)
- [Commits](iplweb/djangoql-iplweb@v0.27.0...0.27.2)

Updates `tqdm` from 4.67.3 to 4.68.1
- [Release notes](https://github.com/tqdm/tqdm/releases)
- [Commits](tqdm/tqdm@v4.67.3...v4.68.1)

Updates `beautifulsoup4` from 4.14.3 to 4.15.0

Updates `ruff` from 0.15.15 to 0.15.16
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](astral-sh/ruff@0.15.15...0.15.16)

Updates `djlint` from 1.36.4 to 1.39.0
- [Release notes](https://github.com/djlint/djLint/releases)
- [Changelog](https://github.com/djlint/djLint/blob/master/CHANGELOG.md)
- [Commits](djlint/djLint@v1.36.4...v1.39.0)

---
updated-dependencies:
- dependency-name: pygad
  dependency-version: 3.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python-minor-and-patch
- dependency-name: djangoql-iplweb
  dependency-version: 0.27.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-minor-and-patch
- dependency-name: tqdm
  dependency-version: 4.68.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python-minor-and-patch
- dependency-name: beautifulsoup4
  dependency-version: 4.15.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python-minor-and-patch
- dependency-name: ruff
  dependency-version: 0.15.16
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: python-minor-and-patch
- dependency-name: djlint
  dependency-version: 1.39.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: python-minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file python Pull requests that update Python code labels Jun 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file python Pull requests that update Python code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants