all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe35:61f2
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: f51defdf-d17d-4e0d-a494-ebb429f8831b
        host_id: 0d3d02185f810c959252bd1d303ec55040bf5bb0b401cceef814c3a7
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe35:61f2
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.99
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.103
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe35:61f2
        region: null
        slot: null
      tox_environment:
        NOSE_HTML_OUT_FILE: nose_results.html
        NOSE_WITH_HTML_OUTPUT: 1
        NOSE_WITH_XUNIT: 1
      tox_envlist: check
  vars:
    tox_environment:
      NOSE_HTML_OUT_FILE: nose_results.html
      NOSE_WITH_HTML_OUTPUT: 1
      NOSE_WITH_XUNIT: 1
    tox_envlist: check
    zuul:
      _inheritance_path:
      - '<Job base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-config/zuul.d/jobs.yaml@main#2>'
      - '<Job unittests explicit: None implied: {MatchAny:{ImpliedBranchMatcher:master}}
        source: osism/openinfra-zuul-jobs/zuul.d/general-jobs.yaml@master#9>'
      - '<Job tox explicit: None implied: {MatchAny:{ImpliedBranchMatcher:master}}
        source: osism/openinfra-zuul-jobs/zuul.d/python-jobs.yaml@master#1>'
      - '<Job cfg-generics-tox-check explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/generics/.zuul.yaml@main#95>'
      - '<Job cfg-generics-tox-check explicit: None implied: None source: osism/generics/.zuul.yaml@main#117>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 8cf9dd0e49f9417ba74398c360b1f8d0
      build_refs:
      - branch: main
        change: '587'
        change_message: "chore(deps): update dependency packaging to v26.1\n\nThis
          PR contains the following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
          | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n|
          [packaging](https://redirect.github.com/pypa/packaging) | `==26.0` \u2192
          `==26.1` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/packaging/26.1?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/packaging/26.0/26.1?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pypa/packaging (packaging)</summary>\n\n###
          [`v26.1`](https://redirect.github.com/pypa/packaging/releases/tag/26.1)\n\n[Compare
          Source](https://redirect.github.com/pypa/packaging/compare/26.0...26.1)\n\nFeatures:\n\n-
          PEP 783: add handling for Emscripten wheel tags by [@&#8203;hoodmane](https://redirect.github.com/hoodmane)
          in [#&#8203;804](https://redirect.github.com/pypa/packaging/pull/804)\n-
          PEP 803: add handling for the `abi3.abi3t` free-threading tag by [@&#8203;ngoldbaum](https://redirect.github.com/ngoldbaum)
          in [#&#8203;1099](https://redirect.github.com/pypa/packaging/pull/1099)\n-
          PEP 723: add `packaging.dependency_groups` module, based on the `dependency-groups`
          package by [@&#8203;sirosen](https://redirect.github.com/sirosen) in [#&#8203;1065](https://redirect.github.com/pypa/packaging/pull/1065)\n-
          Add the `packaging.direct_url` module by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;944](https://redirect.github.com/pypa/packaging/pull/944)\n-
          Add the `packaging.errors` module by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1071](https://redirect.github.com/pypa/packaging/pull/1071)\n-
          Add `SpecifierSet.is_unsatisfiable` using ranges (new internals that will
          be expanded in future versions) by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1119](https://redirect.github.com/pypa/packaging/pull/1119)\n-
          Add `create_compatible_tags_selector` to select compatible tags by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1110](https://redirect.github.com/pypa/packaging/pull/1110)\n-
          Add a `key` argument to `SpecifierSet.filter()` by [@&#8203;frostming](https://redirect.github.com/frostming)
          in [#&#8203;1068](https://redirect.github.com/pypa/packaging/pull/1068)\n-
          Support `&` and `|` for `Marker`'s by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1146](https://redirect.github.com/pypa/packaging/pull/1146)\n-
          Normalize `Version.__replace__` and add `Version.from_parts` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1078](https://redirect.github.com/pypa/packaging/pull/1078)\n-
          Add an option to validate compressed tag set sort order in `parse_wheel_filename`
          by [@&#8203;r266-tech](https://redirect.github.com/r266-tech) in [#&#8203;1150](https://redirect.github.com/pypa/packaging/pull/1150)\n\nBehavior
          adaptations:\n\n- Narrow exclusion of pre-releases for `<V.postN` to match
          spec by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1140](https://redirect.github.com/pypa/packaging/pull/1140)\n-
          Narrow exclusion of post-releases for `>V` to match spec by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1141](https://redirect.github.com/pypa/packaging/pull/1141)\n-
          Rename `format_full_version` to `_format_full_version` to make it visibly
          private by [@&#8203;r266-tech](https://redirect.github.com/r266-tech) in
          [#&#8203;1125](https://redirect.github.com/pypa/packaging/pull/1125)\n-
          Restrict local version to ASCII by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1102](https://redirect.github.com/pypa/packaging/pull/1102)\n\nPylock
          (PEP 751) updates:\n\n- Add pylock `select` function by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1092](https://redirect.github.com/pypa/packaging/pull/1092)\n-
          Document pylock `select()` method and `PylockSelectError` by [@&#8203;r266-tech](https://redirect.github.com/r266-tech)
          in [#&#8203;1153](https://redirect.github.com/pypa/packaging/pull/1153)\n-
          Add `filename` property to `PackageSdist` and `PackageWheel`, more validation
          by [@&#8203;sbidoul](https://redirect.github.com/sbidoul) in [#&#8203;1095](https://redirect.github.com/pypa/packaging/pull/1095)\n-
          Give preference to path over url by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1128](https://redirect.github.com/pypa/packaging/pull/1128)\n-
          Validate name/version consistency in file names by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1114](https://redirect.github.com/pypa/packaging/pull/1114)\n\nFixes:\n\n-
          Fix `>` comparison for versions with dev+local segments by [@&#8203;veeceey](https://redirect.github.com/veeceey)
          in [#&#8203;1097](https://redirect.github.com/pypa/packaging/pull/1097)\n-
          Fix incorrect self-comparison for `InfinityType` and `NegativeInfinityType`
          by [@&#8203;bysiber](https://redirect.github.com/bysiber) in [#&#8203;1093](https://redirect.github.com/pypa/packaging/pull/1093)\n-
          Canonicalize when deduplicating specifiers in `SpecifierSet` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1109](https://redirect.github.com/pypa/packaging/pull/1109)\n-
          Fix charset error message formatting by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1121](https://redirect.github.com/pypa/packaging/pull/1121)\n-
          Handle the `key` parameter in `SpecifierSet.filter` when specifiers are
          empty and prerelease is `False` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1096](https://redirect.github.com/pypa/packaging/pull/1096)\n-
          Standardize inner components of `repr` output by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1090](https://redirect.github.com/pypa/packaging/pull/1090)\n-
          `Specifier`'s `===` uses original string, not normalized, when available
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1124](https://redirect.github.com/pypa/packaging/pull/1124)\n-
          Propagate int-max-str-digits `ValueError` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1155](https://redirect.github.com/pypa/packaging/pull/1155)\n\nPerformance:\n\n-
          Add fast path for parsing simple versions (digits and dots only) by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1082](https://redirect.github.com/pypa/packaging/pull/1082)\n-
          Add fast path for `Version` to `Version` comparison by skipping `_key` property
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1083](https://redirect.github.com/pypa/packaging/pull/1083)\n-
          Cache `Version` hash value in dedicated slot by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1118](https://redirect.github.com/pypa/packaging/pull/1118)\n-
          Overhaul `_cmpkey` to remove use of custom objects by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1116](https://redirect.github.com/pypa/packaging/pull/1116)\n-
          Skip `__replace__` in Specifier comparison if not needed by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1081](https://redirect.github.com/pypa/packaging/pull/1081)\n-
          `SpecifierSet` use `tuple` instead of `frozenset` for `_specs` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1108](https://redirect.github.com/pypa/packaging/pull/1108)\n-
          Speed up complex `SpecifierSet` filtering by implementing cost-based ordering
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1105](https://redirect.github.com/pypa/packaging/pull/1105)\n-
          Speed up wildcard comparison by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1111](https://redirect.github.com/pypa/packaging/pull/1111)\n-
          Stream PEP440 filtering in `SpecifierSet.filter` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1076](https://redirect.github.com/pypa/packaging/pull/1076)\n-
          Add `__slots__` to `Marker` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1147](https://redirect.github.com/pypa/packaging/pull/1147)\n-
          Simply `Specifier` regex by [@&#8203;sirosen](https://redirect.github.com/sirosen)
          in [#&#8203;1106](https://redirect.github.com/pypa/packaging/pull/1106)\n-
          Skip using the hash property internally by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1115](https://redirect.github.com/pypa/packaging/pull/1115)\n\nInternal:\n\n-
          Add downstream testing by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1049](https://redirect.github.com/pypa/packaging/pull/1049)\n-
          Benchmarking suite by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1059](https://redirect.github.com/pypa/packaging/pull/1059)\n-
          Benchmark variance reduction by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1107](https://redirect.github.com/pypa/packaging/pull/1107)\n-
          Add property-based tests for PEP 440 by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1144](https://redirect.github.com/pypa/packaging/pull/1144)\n-
          Clean up a few `collections.namedtuple` in tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1070](https://redirect.github.com/pypa/packaging/pull/1070)\n-
          Do not reload the tags module in tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1152](https://redirect.github.com/pypa/packaging/pull/1152)\n-
          Limit `dir()` / tab-completion in REPL by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1011](https://redirect.github.com/pypa/packaging/pull/1011)\n-
          Add more `__all__`/`__dir__` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1069](https://redirect.github.com/pypa/packaging/pull/1069)\n-
          Cleanup pre-commit a bit by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1080](https://redirect.github.com/pypa/packaging/pull/1080)\n-
          Pin pre-commit file, use dependabot by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1133](https://redirect.github.com/pypa/packaging/pull/1133)\n-
          Remove sphinx-toolbox by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1135](https://redirect.github.com/pypa/packaging/pull/1135)\n-
          Use docs group, faster readthedocs by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1061](https://redirect.github.com/pypa/packaging/pull/1061)\n-
          Add free-threaded Python to CI by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1098](https://redirect.github.com/pypa/packaging/pull/1098)\n-
          Simplify combining `SpecifierSet.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1073](https://redirect.github.com/pypa/packaging/pull/1073)\n-
          Use direct operator methods in `_compare_compatible` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1100](https://redirect.github.com/pypa/packaging/pull/1100)\n-
          Remove unnecessary if statement in `Specifier.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1074](https://redirect.github.com/pypa/packaging/pull/1074)\n-
          Remove unneeded nesting in `Specifier.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1072](https://redirect.github.com/pypa/packaging/pull/1072)\n\nDocumentation:\n\n-
          Fix documentation: grammar, typos, formatting, and outdated references by
          [@&#8203;DimitriPapadopoulos](https://redirect.github.com/DimitriPapadopoulos)
          in [#&#8203;1084](https://redirect.github.com/pypa/packaging/pull/1084)\n-
          Fix versionadded for `Version.from_parts()` by [@&#8203;Jackenmen](https://redirect.github.com/Jackenmen)
          in [#&#8203;1134](https://redirect.github.com/pypa/packaging/pull/1134)\n-
          Document `&` and `|` operators for combining `Marker` objects by [@&#8203;r266-tech](https://redirect.github.com/r266-tech)
          in [#&#8203;1151](https://redirect.github.com/pypa/packaging/pull/1151)\n-
          Expand and clean up `Version` documentation by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1089](https://redirect.github.com/pypa/packaging/pull/1089)\n-
          Move license docs inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1131](https://redirect.github.com/pypa/packaging/pull/1131)\n-
          Move markers inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1104](https://redirect.github.com/pypa/packaging/pull/1104)\n-
          Move tags docs to inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1130](https://redirect.github.com/pypa/packaging/pull/1130)\n-
          Move utilities inline, like other modules by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1103](https://redirect.github.com/pypa/packaging/pull/1103)\n\n####
          Benchmarks\n\nPerformance improvements since 26.0, from the new integrated
          benchmark suite:\n\n```\nuv run asv run 26.0..HEAD\n```\n\n<img width=\"908\"
          height=\"965\" alt=\"Screenshot 2026-04-13 at 11 32 14\u202FPM\" src=\"https://github.com/user-attachments/assets/3bf63569-dbbf-4f34-9660-ede3cef1745d\"
          />\n\n<img width=\"908\" height=\"479\" alt=\"Screenshot 2026-04-13 at 11
          32 43\u202FPM\" src=\"https://github.com/user-attachments/assets/f7906800-f6d9-4af6-a3f3-369b654b73e3\"
          />\n\n#### New Contributors\n\n- [@&#8203;veeceey](https://redirect.github.com/veeceey)
          made their first contribution in [#&#8203;1097](https://redirect.github.com/pypa/packaging/pull/1097)\n-
          [@&#8203;bysiber](https://redirect.github.com/bysiber) made their first
          contribution in [#&#8203;1093](https://redirect.github.com/pypa/packaging/pull/1093)\n-
          [@&#8203;sirosen](https://redirect.github.com/sirosen) made their first
          contribution in [#&#8203;1106](https://redirect.github.com/pypa/packaging/pull/1106)\n-
          [@&#8203;Jackenmen](https://redirect.github.com/Jackenmen) made their first
          contribution in [#&#8203;1134](https://redirect.github.com/pypa/packaging/pull/1134)\n-
          [@&#8203;ngoldbaum](https://redirect.github.com/ngoldbaum) made their first
          contribution in [#&#8203;1099](https://redirect.github.com/pypa/packaging/pull/1099)\n-
          [@&#8203;r266-tech](https://redirect.github.com/r266-tech) made their first
          contribution in [#&#8203;1151](https://redirect.github.com/pypa/packaging/pull/1151)\n-
          [@&#8203;hoodmane](https://redirect.github.com/hoodmane) made their first
          contribution in [#&#8203;804](https://redirect.github.com/pypa/packaging/pull/804)\n\n**Full
          Changelog**: <https://github.com/pypa/packaging/compare/26.0...26.1>\n\n</details>\n\n---\n\n###
          Configuration\n\n\U0001F4C5 **Schedule**: (UTC)\n\n- Branch creation\n  -
          At any time (no schedule defined)\n- Automerge\n  - At any time (no schedule
          defined)\n\n\U0001F6A6 **Automerge**: Disabled by config. Please merge this
          manually once you are satisfied.\n\n\u267B **Rebasing**: Whenever PR becomes
          conflicted, or you tick the rebase/retry checkbox.\n\n\U0001F515 **Ignore**:
          Close this PR and you won't be reminded about this update again.\n\n---\n\n
          - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this
          box\n\n---\n\nThis PR was generated by [Mend Renovate](https://mend.io/renovate/).
          View the [repository job log](https://developer.mend.io/github/osism/generics).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMTAuMiIsInVwZGF0ZWRJblZlciI6IjQzLjExMC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
        change_url: https://github.com/osism/generics/pull/587
        commit_id: cf31de6c01b3d787583de265d9bbfd0b429a1f5e
        patchset: cf31de6c01b3d787583de265d9bbfd0b429a1f5e
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/generics
          name: osism/generics
          short_name: generics
        src_dir: src/github.com/osism/generics
        topic: null
      buildset: d2dd8490d3584f5db198e962463bbfd2
      buildset_refs:
      - branch: main
        change: '587'
        change_message: "chore(deps): update dependency packaging to v26.1\n\nThis
          PR contains the following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
          | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n|
          [packaging](https://redirect.github.com/pypa/packaging) | `==26.0` \u2192
          `==26.1` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/packaging/26.1?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/packaging/26.0/26.1?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pypa/packaging (packaging)</summary>\n\n###
          [`v26.1`](https://redirect.github.com/pypa/packaging/releases/tag/26.1)\n\n[Compare
          Source](https://redirect.github.com/pypa/packaging/compare/26.0...26.1)\n\nFeatures:\n\n-
          PEP 783: add handling for Emscripten wheel tags by [@&#8203;hoodmane](https://redirect.github.com/hoodmane)
          in [#&#8203;804](https://redirect.github.com/pypa/packaging/pull/804)\n-
          PEP 803: add handling for the `abi3.abi3t` free-threading tag by [@&#8203;ngoldbaum](https://redirect.github.com/ngoldbaum)
          in [#&#8203;1099](https://redirect.github.com/pypa/packaging/pull/1099)\n-
          PEP 723: add `packaging.dependency_groups` module, based on the `dependency-groups`
          package by [@&#8203;sirosen](https://redirect.github.com/sirosen) in [#&#8203;1065](https://redirect.github.com/pypa/packaging/pull/1065)\n-
          Add the `packaging.direct_url` module by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;944](https://redirect.github.com/pypa/packaging/pull/944)\n-
          Add the `packaging.errors` module by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1071](https://redirect.github.com/pypa/packaging/pull/1071)\n-
          Add `SpecifierSet.is_unsatisfiable` using ranges (new internals that will
          be expanded in future versions) by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1119](https://redirect.github.com/pypa/packaging/pull/1119)\n-
          Add `create_compatible_tags_selector` to select compatible tags by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1110](https://redirect.github.com/pypa/packaging/pull/1110)\n-
          Add a `key` argument to `SpecifierSet.filter()` by [@&#8203;frostming](https://redirect.github.com/frostming)
          in [#&#8203;1068](https://redirect.github.com/pypa/packaging/pull/1068)\n-
          Support `&` and `|` for `Marker`'s by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1146](https://redirect.github.com/pypa/packaging/pull/1146)\n-
          Normalize `Version.__replace__` and add `Version.from_parts` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1078](https://redirect.github.com/pypa/packaging/pull/1078)\n-
          Add an option to validate compressed tag set sort order in `parse_wheel_filename`
          by [@&#8203;r266-tech](https://redirect.github.com/r266-tech) in [#&#8203;1150](https://redirect.github.com/pypa/packaging/pull/1150)\n\nBehavior
          adaptations:\n\n- Narrow exclusion of pre-releases for `<V.postN` to match
          spec by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1140](https://redirect.github.com/pypa/packaging/pull/1140)\n-
          Narrow exclusion of post-releases for `>V` to match spec by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1141](https://redirect.github.com/pypa/packaging/pull/1141)\n-
          Rename `format_full_version` to `_format_full_version` to make it visibly
          private by [@&#8203;r266-tech](https://redirect.github.com/r266-tech) in
          [#&#8203;1125](https://redirect.github.com/pypa/packaging/pull/1125)\n-
          Restrict local version to ASCII by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1102](https://redirect.github.com/pypa/packaging/pull/1102)\n\nPylock
          (PEP 751) updates:\n\n- Add pylock `select` function by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1092](https://redirect.github.com/pypa/packaging/pull/1092)\n-
          Document pylock `select()` method and `PylockSelectError` by [@&#8203;r266-tech](https://redirect.github.com/r266-tech)
          in [#&#8203;1153](https://redirect.github.com/pypa/packaging/pull/1153)\n-
          Add `filename` property to `PackageSdist` and `PackageWheel`, more validation
          by [@&#8203;sbidoul](https://redirect.github.com/sbidoul) in [#&#8203;1095](https://redirect.github.com/pypa/packaging/pull/1095)\n-
          Give preference to path over url by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1128](https://redirect.github.com/pypa/packaging/pull/1128)\n-
          Validate name/version consistency in file names by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1114](https://redirect.github.com/pypa/packaging/pull/1114)\n\nFixes:\n\n-
          Fix `>` comparison for versions with dev+local segments by [@&#8203;veeceey](https://redirect.github.com/veeceey)
          in [#&#8203;1097](https://redirect.github.com/pypa/packaging/pull/1097)\n-
          Fix incorrect self-comparison for `InfinityType` and `NegativeInfinityType`
          by [@&#8203;bysiber](https://redirect.github.com/bysiber) in [#&#8203;1093](https://redirect.github.com/pypa/packaging/pull/1093)\n-
          Canonicalize when deduplicating specifiers in `SpecifierSet` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1109](https://redirect.github.com/pypa/packaging/pull/1109)\n-
          Fix charset error message formatting by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1121](https://redirect.github.com/pypa/packaging/pull/1121)\n-
          Handle the `key` parameter in `SpecifierSet.filter` when specifiers are
          empty and prerelease is `False` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1096](https://redirect.github.com/pypa/packaging/pull/1096)\n-
          Standardize inner components of `repr` output by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1090](https://redirect.github.com/pypa/packaging/pull/1090)\n-
          `Specifier`'s `===` uses original string, not normalized, when available
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1124](https://redirect.github.com/pypa/packaging/pull/1124)\n-
          Propagate int-max-str-digits `ValueError` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1155](https://redirect.github.com/pypa/packaging/pull/1155)\n\nPerformance:\n\n-
          Add fast path for parsing simple versions (digits and dots only) by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1082](https://redirect.github.com/pypa/packaging/pull/1082)\n-
          Add fast path for `Version` to `Version` comparison by skipping `_key` property
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1083](https://redirect.github.com/pypa/packaging/pull/1083)\n-
          Cache `Version` hash value in dedicated slot by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1118](https://redirect.github.com/pypa/packaging/pull/1118)\n-
          Overhaul `_cmpkey` to remove use of custom objects by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1116](https://redirect.github.com/pypa/packaging/pull/1116)\n-
          Skip `__replace__` in Specifier comparison if not needed by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1081](https://redirect.github.com/pypa/packaging/pull/1081)\n-
          `SpecifierSet` use `tuple` instead of `frozenset` for `_specs` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1108](https://redirect.github.com/pypa/packaging/pull/1108)\n-
          Speed up complex `SpecifierSet` filtering by implementing cost-based ordering
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1105](https://redirect.github.com/pypa/packaging/pull/1105)\n-
          Speed up wildcard comparison by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1111](https://redirect.github.com/pypa/packaging/pull/1111)\n-
          Stream PEP440 filtering in `SpecifierSet.filter` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1076](https://redirect.github.com/pypa/packaging/pull/1076)\n-
          Add `__slots__` to `Marker` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1147](https://redirect.github.com/pypa/packaging/pull/1147)\n-
          Simply `Specifier` regex by [@&#8203;sirosen](https://redirect.github.com/sirosen)
          in [#&#8203;1106](https://redirect.github.com/pypa/packaging/pull/1106)\n-
          Skip using the hash property internally by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1115](https://redirect.github.com/pypa/packaging/pull/1115)\n\nInternal:\n\n-
          Add downstream testing by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1049](https://redirect.github.com/pypa/packaging/pull/1049)\n-
          Benchmarking suite by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1059](https://redirect.github.com/pypa/packaging/pull/1059)\n-
          Benchmark variance reduction by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1107](https://redirect.github.com/pypa/packaging/pull/1107)\n-
          Add property-based tests for PEP 440 by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1144](https://redirect.github.com/pypa/packaging/pull/1144)\n-
          Clean up a few `collections.namedtuple` in tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1070](https://redirect.github.com/pypa/packaging/pull/1070)\n-
          Do not reload the tags module in tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1152](https://redirect.github.com/pypa/packaging/pull/1152)\n-
          Limit `dir()` / tab-completion in REPL by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1011](https://redirect.github.com/pypa/packaging/pull/1011)\n-
          Add more `__all__`/`__dir__` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1069](https://redirect.github.com/pypa/packaging/pull/1069)\n-
          Cleanup pre-commit a bit by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1080](https://redirect.github.com/pypa/packaging/pull/1080)\n-
          Pin pre-commit file, use dependabot by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1133](https://redirect.github.com/pypa/packaging/pull/1133)\n-
          Remove sphinx-toolbox by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1135](https://redirect.github.com/pypa/packaging/pull/1135)\n-
          Use docs group, faster readthedocs by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1061](https://redirect.github.com/pypa/packaging/pull/1061)\n-
          Add free-threaded Python to CI by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1098](https://redirect.github.com/pypa/packaging/pull/1098)\n-
          Simplify combining `SpecifierSet.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1073](https://redirect.github.com/pypa/packaging/pull/1073)\n-
          Use direct operator methods in `_compare_compatible` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1100](https://redirect.github.com/pypa/packaging/pull/1100)\n-
          Remove unnecessary if statement in `Specifier.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1074](https://redirect.github.com/pypa/packaging/pull/1074)\n-
          Remove unneeded nesting in `Specifier.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1072](https://redirect.github.com/pypa/packaging/pull/1072)\n\nDocumentation:\n\n-
          Fix documentation: grammar, typos, formatting, and outdated references by
          [@&#8203;DimitriPapadopoulos](https://redirect.github.com/DimitriPapadopoulos)
          in [#&#8203;1084](https://redirect.github.com/pypa/packaging/pull/1084)\n-
          Fix versionadded for `Version.from_parts()` by [@&#8203;Jackenmen](https://redirect.github.com/Jackenmen)
          in [#&#8203;1134](https://redirect.github.com/pypa/packaging/pull/1134)\n-
          Document `&` and `|` operators for combining `Marker` objects by [@&#8203;r266-tech](https://redirect.github.com/r266-tech)
          in [#&#8203;1151](https://redirect.github.com/pypa/packaging/pull/1151)\n-
          Expand and clean up `Version` documentation by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1089](https://redirect.github.com/pypa/packaging/pull/1089)\n-
          Move license docs inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1131](https://redirect.github.com/pypa/packaging/pull/1131)\n-
          Move markers inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1104](https://redirect.github.com/pypa/packaging/pull/1104)\n-
          Move tags docs to inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1130](https://redirect.github.com/pypa/packaging/pull/1130)\n-
          Move utilities inline, like other modules by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1103](https://redirect.github.com/pypa/packaging/pull/1103)\n\n####
          Benchmarks\n\nPerformance improvements since 26.0, from the new integrated
          benchmark suite:\n\n```\nuv run asv run 26.0..HEAD\n```\n\n<img width=\"908\"
          height=\"965\" alt=\"Screenshot 2026-04-13 at 11 32 14\u202FPM\" src=\"https://github.com/user-attachments/assets/3bf63569-dbbf-4f34-9660-ede3cef1745d\"
          />\n\n<img width=\"908\" height=\"479\" alt=\"Screenshot 2026-04-13 at 11
          32 43\u202FPM\" src=\"https://github.com/user-attachments/assets/f7906800-f6d9-4af6-a3f3-369b654b73e3\"
          />\n\n#### New Contributors\n\n- [@&#8203;veeceey](https://redirect.github.com/veeceey)
          made their first contribution in [#&#8203;1097](https://redirect.github.com/pypa/packaging/pull/1097)\n-
          [@&#8203;bysiber](https://redirect.github.com/bysiber) made their first
          contribution in [#&#8203;1093](https://redirect.github.com/pypa/packaging/pull/1093)\n-
          [@&#8203;sirosen](https://redirect.github.com/sirosen) made their first
          contribution in [#&#8203;1106](https://redirect.github.com/pypa/packaging/pull/1106)\n-
          [@&#8203;Jackenmen](https://redirect.github.com/Jackenmen) made their first
          contribution in [#&#8203;1134](https://redirect.github.com/pypa/packaging/pull/1134)\n-
          [@&#8203;ngoldbaum](https://redirect.github.com/ngoldbaum) made their first
          contribution in [#&#8203;1099](https://redirect.github.com/pypa/packaging/pull/1099)\n-
          [@&#8203;r266-tech](https://redirect.github.com/r266-tech) made their first
          contribution in [#&#8203;1151](https://redirect.github.com/pypa/packaging/pull/1151)\n-
          [@&#8203;hoodmane](https://redirect.github.com/hoodmane) made their first
          contribution in [#&#8203;804](https://redirect.github.com/pypa/packaging/pull/804)\n\n**Full
          Changelog**: <https://github.com/pypa/packaging/compare/26.0...26.1>\n\n</details>\n\n---\n\n###
          Configuration\n\n\U0001F4C5 **Schedule**: (UTC)\n\n- Branch creation\n  -
          At any time (no schedule defined)\n- Automerge\n  - At any time (no schedule
          defined)\n\n\U0001F6A6 **Automerge**: Disabled by config. Please merge this
          manually once you are satisfied.\n\n\u267B **Rebasing**: Whenever PR becomes
          conflicted, or you tick the rebase/retry checkbox.\n\n\U0001F515 **Ignore**:
          Close this PR and you won't be reminded about this update again.\n\n---\n\n
          - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this
          box\n\n---\n\nThis PR was generated by [Mend Renovate](https://mend.io/renovate/).
          View the [repository job log](https://developer.mend.io/github/osism/generics).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMTAuMiIsInVwZGF0ZWRJblZlciI6IjQzLjExMC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
        change_url: https://github.com/osism/generics/pull/587
        commit_id: cf31de6c01b3d787583de265d9bbfd0b429a1f5e
        patchset: cf31de6c01b3d787583de265d9bbfd0b429a1f5e
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/generics
          name: osism/generics
          short_name: generics
        src_dir: src/github.com/osism/generics
        topic: null
      change: '587'
      change_message: "chore(deps): update dependency packaging to v26.1\n\nThis PR
        contains the following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
        | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n|
        [packaging](https://redirect.github.com/pypa/packaging) | `==26.0` \u2192
        `==26.1` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/packaging/26.1?slim=true)
        | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/packaging/26.0/26.1?slim=true)
        |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pypa/packaging (packaging)</summary>\n\n###
        [`v26.1`](https://redirect.github.com/pypa/packaging/releases/tag/26.1)\n\n[Compare
        Source](https://redirect.github.com/pypa/packaging/compare/26.0...26.1)\n\nFeatures:\n\n-
        PEP 783: add handling for Emscripten wheel tags by [@&#8203;hoodmane](https://redirect.github.com/hoodmane)
        in [#&#8203;804](https://redirect.github.com/pypa/packaging/pull/804)\n- PEP
        803: add handling for the `abi3.abi3t` free-threading tag by [@&#8203;ngoldbaum](https://redirect.github.com/ngoldbaum)
        in [#&#8203;1099](https://redirect.github.com/pypa/packaging/pull/1099)\n-
        PEP 723: add `packaging.dependency_groups` module, based on the `dependency-groups`
        package by [@&#8203;sirosen](https://redirect.github.com/sirosen) in [#&#8203;1065](https://redirect.github.com/pypa/packaging/pull/1065)\n-
        Add the `packaging.direct_url` module by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
        in [#&#8203;944](https://redirect.github.com/pypa/packaging/pull/944)\n- Add
        the `packaging.errors` module by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1071](https://redirect.github.com/pypa/packaging/pull/1071)\n-
        Add `SpecifierSet.is_unsatisfiable` using ranges (new internals that will
        be expanded in future versions) by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1119](https://redirect.github.com/pypa/packaging/pull/1119)\n-
        Add `create_compatible_tags_selector` to select compatible tags by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
        in [#&#8203;1110](https://redirect.github.com/pypa/packaging/pull/1110)\n-
        Add a `key` argument to `SpecifierSet.filter()` by [@&#8203;frostming](https://redirect.github.com/frostming)
        in [#&#8203;1068](https://redirect.github.com/pypa/packaging/pull/1068)\n-
        Support `&` and `|` for `Marker`'s by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1146](https://redirect.github.com/pypa/packaging/pull/1146)\n-
        Normalize `Version.__replace__` and add `Version.from_parts` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1078](https://redirect.github.com/pypa/packaging/pull/1078)\n-
        Add an option to validate compressed tag set sort order in `parse_wheel_filename`
        by [@&#8203;r266-tech](https://redirect.github.com/r266-tech) in [#&#8203;1150](https://redirect.github.com/pypa/packaging/pull/1150)\n\nBehavior
        adaptations:\n\n- Narrow exclusion of pre-releases for `<V.postN` to match
        spec by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in
        [#&#8203;1140](https://redirect.github.com/pypa/packaging/pull/1140)\n- Narrow
        exclusion of post-releases for `>V` to match spec by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1141](https://redirect.github.com/pypa/packaging/pull/1141)\n-
        Rename `format_full_version` to `_format_full_version` to make it visibly
        private by [@&#8203;r266-tech](https://redirect.github.com/r266-tech) in [#&#8203;1125](https://redirect.github.com/pypa/packaging/pull/1125)\n-
        Restrict local version to ASCII by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1102](https://redirect.github.com/pypa/packaging/pull/1102)\n\nPylock
        (PEP 751) updates:\n\n- Add pylock `select` function by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
        in [#&#8203;1092](https://redirect.github.com/pypa/packaging/pull/1092)\n-
        Document pylock `select()` method and `PylockSelectError` by [@&#8203;r266-tech](https://redirect.github.com/r266-tech)
        in [#&#8203;1153](https://redirect.github.com/pypa/packaging/pull/1153)\n-
        Add `filename` property to `PackageSdist` and `PackageWheel`, more validation
        by [@&#8203;sbidoul](https://redirect.github.com/sbidoul) in [#&#8203;1095](https://redirect.github.com/pypa/packaging/pull/1095)\n-
        Give preference to path over url by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
        in [#&#8203;1128](https://redirect.github.com/pypa/packaging/pull/1128)\n-
        Validate name/version consistency in file names by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
        in [#&#8203;1114](https://redirect.github.com/pypa/packaging/pull/1114)\n\nFixes:\n\n-
        Fix `>` comparison for versions with dev+local segments by [@&#8203;veeceey](https://redirect.github.com/veeceey)
        in [#&#8203;1097](https://redirect.github.com/pypa/packaging/pull/1097)\n-
        Fix incorrect self-comparison for `InfinityType` and `NegativeInfinityType`
        by [@&#8203;bysiber](https://redirect.github.com/bysiber) in [#&#8203;1093](https://redirect.github.com/pypa/packaging/pull/1093)\n-
        Canonicalize when deduplicating specifiers in `SpecifierSet` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1109](https://redirect.github.com/pypa/packaging/pull/1109)\n-
        Fix charset error message formatting by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1121](https://redirect.github.com/pypa/packaging/pull/1121)\n-
        Handle the `key` parameter in `SpecifierSet.filter` when specifiers are empty
        and prerelease is `False` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1096](https://redirect.github.com/pypa/packaging/pull/1096)\n-
        Standardize inner components of `repr` output by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1090](https://redirect.github.com/pypa/packaging/pull/1090)\n-
        `Specifier`'s `===` uses original string, not normalized, when available by
        [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1124](https://redirect.github.com/pypa/packaging/pull/1124)\n-
        Propagate int-max-str-digits `ValueError` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1155](https://redirect.github.com/pypa/packaging/pull/1155)\n\nPerformance:\n\n-
        Add fast path for parsing simple versions (digits and dots only) by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1082](https://redirect.github.com/pypa/packaging/pull/1082)\n-
        Add fast path for `Version` to `Version` comparison by skipping `_key` property
        by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1083](https://redirect.github.com/pypa/packaging/pull/1083)\n-
        Cache `Version` hash value in dedicated slot by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1118](https://redirect.github.com/pypa/packaging/pull/1118)\n-
        Overhaul `_cmpkey` to remove use of custom objects by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1116](https://redirect.github.com/pypa/packaging/pull/1116)\n-
        Skip `__replace__` in Specifier comparison if not needed by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1081](https://redirect.github.com/pypa/packaging/pull/1081)\n-
        `SpecifierSet` use `tuple` instead of `frozenset` for `_specs` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1108](https://redirect.github.com/pypa/packaging/pull/1108)\n-
        Speed up complex `SpecifierSet` filtering by implementing cost-based ordering
        by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1105](https://redirect.github.com/pypa/packaging/pull/1105)\n-
        Speed up wildcard comparison by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1111](https://redirect.github.com/pypa/packaging/pull/1111)\n-
        Stream PEP440 filtering in `SpecifierSet.filter` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1076](https://redirect.github.com/pypa/packaging/pull/1076)\n-
        Add `__slots__` to `Marker` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1147](https://redirect.github.com/pypa/packaging/pull/1147)\n-
        Simply `Specifier` regex by [@&#8203;sirosen](https://redirect.github.com/sirosen)
        in [#&#8203;1106](https://redirect.github.com/pypa/packaging/pull/1106)\n-
        Skip using the hash property internally by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1115](https://redirect.github.com/pypa/packaging/pull/1115)\n\nInternal:\n\n-
        Add downstream testing by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1049](https://redirect.github.com/pypa/packaging/pull/1049)\n-
        Benchmarking suite by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1059](https://redirect.github.com/pypa/packaging/pull/1059)\n-
        Benchmark variance reduction by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1107](https://redirect.github.com/pypa/packaging/pull/1107)\n-
        Add property-based tests for PEP 440 by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1144](https://redirect.github.com/pypa/packaging/pull/1144)\n-
        Clean up a few `collections.namedtuple` in tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1070](https://redirect.github.com/pypa/packaging/pull/1070)\n-
        Do not reload the tags module in tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1152](https://redirect.github.com/pypa/packaging/pull/1152)\n-
        Limit `dir()` / tab-completion in REPL by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1011](https://redirect.github.com/pypa/packaging/pull/1011)\n-
        Add more `__all__`/`__dir__` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1069](https://redirect.github.com/pypa/packaging/pull/1069)\n-
        Cleanup pre-commit a bit by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1080](https://redirect.github.com/pypa/packaging/pull/1080)\n-
        Pin pre-commit file, use dependabot by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1133](https://redirect.github.com/pypa/packaging/pull/1133)\n-
        Remove sphinx-toolbox by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1135](https://redirect.github.com/pypa/packaging/pull/1135)\n-
        Use docs group, faster readthedocs by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1061](https://redirect.github.com/pypa/packaging/pull/1061)\n-
        Add free-threaded Python to CI by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1098](https://redirect.github.com/pypa/packaging/pull/1098)\n-
        Simplify combining `SpecifierSet.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1073](https://redirect.github.com/pypa/packaging/pull/1073)\n-
        Use direct operator methods in `_compare_compatible` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1100](https://redirect.github.com/pypa/packaging/pull/1100)\n-
        Remove unnecessary if statement in `Specifier.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1074](https://redirect.github.com/pypa/packaging/pull/1074)\n-
        Remove unneeded nesting in `Specifier.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1072](https://redirect.github.com/pypa/packaging/pull/1072)\n\nDocumentation:\n\n-
        Fix documentation: grammar, typos, formatting, and outdated references by
        [@&#8203;DimitriPapadopoulos](https://redirect.github.com/DimitriPapadopoulos)
        in [#&#8203;1084](https://redirect.github.com/pypa/packaging/pull/1084)\n-
        Fix versionadded for `Version.from_parts()` by [@&#8203;Jackenmen](https://redirect.github.com/Jackenmen)
        in [#&#8203;1134](https://redirect.github.com/pypa/packaging/pull/1134)\n-
        Document `&` and `|` operators for combining `Marker` objects by [@&#8203;r266-tech](https://redirect.github.com/r266-tech)
        in [#&#8203;1151](https://redirect.github.com/pypa/packaging/pull/1151)\n-
        Expand and clean up `Version` documentation by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1089](https://redirect.github.com/pypa/packaging/pull/1089)\n-
        Move license docs inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1131](https://redirect.github.com/pypa/packaging/pull/1131)\n-
        Move markers inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1104](https://redirect.github.com/pypa/packaging/pull/1104)\n-
        Move tags docs to inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1130](https://redirect.github.com/pypa/packaging/pull/1130)\n-
        Move utilities inline, like other modules by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1103](https://redirect.github.com/pypa/packaging/pull/1103)\n\n####
        Benchmarks\n\nPerformance improvements since 26.0, from the new integrated
        benchmark suite:\n\n```\nuv run asv run 26.0..HEAD\n```\n\n<img width=\"908\"
        height=\"965\" alt=\"Screenshot 2026-04-13 at 11 32 14\u202FPM\" src=\"https://github.com/user-attachments/assets/3bf63569-dbbf-4f34-9660-ede3cef1745d\"
        />\n\n<img width=\"908\" height=\"479\" alt=\"Screenshot 2026-04-13 at 11
        32 43\u202FPM\" src=\"https://github.com/user-attachments/assets/f7906800-f6d9-4af6-a3f3-369b654b73e3\"
        />\n\n#### New Contributors\n\n- [@&#8203;veeceey](https://redirect.github.com/veeceey)
        made their first contribution in [#&#8203;1097](https://redirect.github.com/pypa/packaging/pull/1097)\n-
        [@&#8203;bysiber](https://redirect.github.com/bysiber) made their first contribution
        in [#&#8203;1093](https://redirect.github.com/pypa/packaging/pull/1093)\n-
        [@&#8203;sirosen](https://redirect.github.com/sirosen) made their first contribution
        in [#&#8203;1106](https://redirect.github.com/pypa/packaging/pull/1106)\n-
        [@&#8203;Jackenmen](https://redirect.github.com/Jackenmen) made their first
        contribution in [#&#8203;1134](https://redirect.github.com/pypa/packaging/pull/1134)\n-
        [@&#8203;ngoldbaum](https://redirect.github.com/ngoldbaum) made their first
        contribution in [#&#8203;1099](https://redirect.github.com/pypa/packaging/pull/1099)\n-
        [@&#8203;r266-tech](https://redirect.github.com/r266-tech) made their first
        contribution in [#&#8203;1151](https://redirect.github.com/pypa/packaging/pull/1151)\n-
        [@&#8203;hoodmane](https://redirect.github.com/hoodmane) made their first
        contribution in [#&#8203;804](https://redirect.github.com/pypa/packaging/pull/804)\n\n**Full
        Changelog**: <https://github.com/pypa/packaging/compare/26.0...26.1>\n\n</details>\n\n---\n\n###
        Configuration\n\n\U0001F4C5 **Schedule**: (UTC)\n\n- Branch creation\n  -
        At any time (no schedule defined)\n- Automerge\n  - At any time (no schedule
        defined)\n\n\U0001F6A6 **Automerge**: Disabled by config. Please merge this
        manually once you are satisfied.\n\n\u267B **Rebasing**: Whenever PR becomes
        conflicted, or you tick the rebase/retry checkbox.\n\n\U0001F515 **Ignore**:
        Close this PR and you won't be reminded about this update again.\n\n---\n\n
        - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this
        box\n\n---\n\nThis PR was generated by [Mend Renovate](https://mend.io/renovate/).
        View the [repository job log](https://developer.mend.io/github/osism/generics).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMTAuMiIsInVwZGF0ZWRJblZlciI6IjQzLjExMC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
      change_url: https://github.com/osism/generics/pull/587
      child_jobs: []
      commit_id: cf31de6c01b3d787583de265d9bbfd0b429a1f5e
      event_id: 57fc2860-3848-11f1-8585-f98f20b6ea80
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/8cf9dd0e49f9417ba74398c360b1f8d0/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/8cf9dd0e49f9417ba74398c360b1f8d0/work/logs
        result_data_file: /var/lib/zuul/builds/8cf9dd0e49f9417ba74398c360b1f8d0/work/results.json
        src_root: /var/lib/zuul/builds/8cf9dd0e49f9417ba74398c360b1f8d0/work/src
        work_root: /var/lib/zuul/builds/8cf9dd0e49f9417ba74398c360b1f8d0/work
      include_vars: []
      items:
      - branch: main
        change: '587'
        change_message: "chore(deps): update dependency packaging to v26.1\n\nThis
          PR contains the following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
          | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n|
          [packaging](https://redirect.github.com/pypa/packaging) | `==26.0` \u2192
          `==26.1` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/packaging/26.1?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/packaging/26.0/26.1?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pypa/packaging (packaging)</summary>\n\n###
          [`v26.1`](https://redirect.github.com/pypa/packaging/releases/tag/26.1)\n\n[Compare
          Source](https://redirect.github.com/pypa/packaging/compare/26.0...26.1)\n\nFeatures:\n\n-
          PEP 783: add handling for Emscripten wheel tags by [@&#8203;hoodmane](https://redirect.github.com/hoodmane)
          in [#&#8203;804](https://redirect.github.com/pypa/packaging/pull/804)\n-
          PEP 803: add handling for the `abi3.abi3t` free-threading tag by [@&#8203;ngoldbaum](https://redirect.github.com/ngoldbaum)
          in [#&#8203;1099](https://redirect.github.com/pypa/packaging/pull/1099)\n-
          PEP 723: add `packaging.dependency_groups` module, based on the `dependency-groups`
          package by [@&#8203;sirosen](https://redirect.github.com/sirosen) in [#&#8203;1065](https://redirect.github.com/pypa/packaging/pull/1065)\n-
          Add the `packaging.direct_url` module by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;944](https://redirect.github.com/pypa/packaging/pull/944)\n-
          Add the `packaging.errors` module by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1071](https://redirect.github.com/pypa/packaging/pull/1071)\n-
          Add `SpecifierSet.is_unsatisfiable` using ranges (new internals that will
          be expanded in future versions) by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1119](https://redirect.github.com/pypa/packaging/pull/1119)\n-
          Add `create_compatible_tags_selector` to select compatible tags by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1110](https://redirect.github.com/pypa/packaging/pull/1110)\n-
          Add a `key` argument to `SpecifierSet.filter()` by [@&#8203;frostming](https://redirect.github.com/frostming)
          in [#&#8203;1068](https://redirect.github.com/pypa/packaging/pull/1068)\n-
          Support `&` and `|` for `Marker`'s by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1146](https://redirect.github.com/pypa/packaging/pull/1146)\n-
          Normalize `Version.__replace__` and add `Version.from_parts` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1078](https://redirect.github.com/pypa/packaging/pull/1078)\n-
          Add an option to validate compressed tag set sort order in `parse_wheel_filename`
          by [@&#8203;r266-tech](https://redirect.github.com/r266-tech) in [#&#8203;1150](https://redirect.github.com/pypa/packaging/pull/1150)\n\nBehavior
          adaptations:\n\n- Narrow exclusion of pre-releases for `<V.postN` to match
          spec by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1140](https://redirect.github.com/pypa/packaging/pull/1140)\n-
          Narrow exclusion of post-releases for `>V` to match spec by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1141](https://redirect.github.com/pypa/packaging/pull/1141)\n-
          Rename `format_full_version` to `_format_full_version` to make it visibly
          private by [@&#8203;r266-tech](https://redirect.github.com/r266-tech) in
          [#&#8203;1125](https://redirect.github.com/pypa/packaging/pull/1125)\n-
          Restrict local version to ASCII by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1102](https://redirect.github.com/pypa/packaging/pull/1102)\n\nPylock
          (PEP 751) updates:\n\n- Add pylock `select` function by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1092](https://redirect.github.com/pypa/packaging/pull/1092)\n-
          Document pylock `select()` method and `PylockSelectError` by [@&#8203;r266-tech](https://redirect.github.com/r266-tech)
          in [#&#8203;1153](https://redirect.github.com/pypa/packaging/pull/1153)\n-
          Add `filename` property to `PackageSdist` and `PackageWheel`, more validation
          by [@&#8203;sbidoul](https://redirect.github.com/sbidoul) in [#&#8203;1095](https://redirect.github.com/pypa/packaging/pull/1095)\n-
          Give preference to path over url by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1128](https://redirect.github.com/pypa/packaging/pull/1128)\n-
          Validate name/version consistency in file names by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1114](https://redirect.github.com/pypa/packaging/pull/1114)\n\nFixes:\n\n-
          Fix `>` comparison for versions with dev+local segments by [@&#8203;veeceey](https://redirect.github.com/veeceey)
          in [#&#8203;1097](https://redirect.github.com/pypa/packaging/pull/1097)\n-
          Fix incorrect self-comparison for `InfinityType` and `NegativeInfinityType`
          by [@&#8203;bysiber](https://redirect.github.com/bysiber) in [#&#8203;1093](https://redirect.github.com/pypa/packaging/pull/1093)\n-
          Canonicalize when deduplicating specifiers in `SpecifierSet` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1109](https://redirect.github.com/pypa/packaging/pull/1109)\n-
          Fix charset error message formatting by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1121](https://redirect.github.com/pypa/packaging/pull/1121)\n-
          Handle the `key` parameter in `SpecifierSet.filter` when specifiers are
          empty and prerelease is `False` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1096](https://redirect.github.com/pypa/packaging/pull/1096)\n-
          Standardize inner components of `repr` output by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1090](https://redirect.github.com/pypa/packaging/pull/1090)\n-
          `Specifier`'s `===` uses original string, not normalized, when available
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1124](https://redirect.github.com/pypa/packaging/pull/1124)\n-
          Propagate int-max-str-digits `ValueError` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1155](https://redirect.github.com/pypa/packaging/pull/1155)\n\nPerformance:\n\n-
          Add fast path for parsing simple versions (digits and dots only) by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1082](https://redirect.github.com/pypa/packaging/pull/1082)\n-
          Add fast path for `Version` to `Version` comparison by skipping `_key` property
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1083](https://redirect.github.com/pypa/packaging/pull/1083)\n-
          Cache `Version` hash value in dedicated slot by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1118](https://redirect.github.com/pypa/packaging/pull/1118)\n-
          Overhaul `_cmpkey` to remove use of custom objects by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1116](https://redirect.github.com/pypa/packaging/pull/1116)\n-
          Skip `__replace__` in Specifier comparison if not needed by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1081](https://redirect.github.com/pypa/packaging/pull/1081)\n-
          `SpecifierSet` use `tuple` instead of `frozenset` for `_specs` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1108](https://redirect.github.com/pypa/packaging/pull/1108)\n-
          Speed up complex `SpecifierSet` filtering by implementing cost-based ordering
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1105](https://redirect.github.com/pypa/packaging/pull/1105)\n-
          Speed up wildcard comparison by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1111](https://redirect.github.com/pypa/packaging/pull/1111)\n-
          Stream PEP440 filtering in `SpecifierSet.filter` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1076](https://redirect.github.com/pypa/packaging/pull/1076)\n-
          Add `__slots__` to `Marker` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1147](https://redirect.github.com/pypa/packaging/pull/1147)\n-
          Simply `Specifier` regex by [@&#8203;sirosen](https://redirect.github.com/sirosen)
          in [#&#8203;1106](https://redirect.github.com/pypa/packaging/pull/1106)\n-
          Skip using the hash property internally by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1115](https://redirect.github.com/pypa/packaging/pull/1115)\n\nInternal:\n\n-
          Add downstream testing by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1049](https://redirect.github.com/pypa/packaging/pull/1049)\n-
          Benchmarking suite by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1059](https://redirect.github.com/pypa/packaging/pull/1059)\n-
          Benchmark variance reduction by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1107](https://redirect.github.com/pypa/packaging/pull/1107)\n-
          Add property-based tests for PEP 440 by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1144](https://redirect.github.com/pypa/packaging/pull/1144)\n-
          Clean up a few `collections.namedtuple` in tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1070](https://redirect.github.com/pypa/packaging/pull/1070)\n-
          Do not reload the tags module in tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1152](https://redirect.github.com/pypa/packaging/pull/1152)\n-
          Limit `dir()` / tab-completion in REPL by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1011](https://redirect.github.com/pypa/packaging/pull/1011)\n-
          Add more `__all__`/`__dir__` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1069](https://redirect.github.com/pypa/packaging/pull/1069)\n-
          Cleanup pre-commit a bit by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1080](https://redirect.github.com/pypa/packaging/pull/1080)\n-
          Pin pre-commit file, use dependabot by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1133](https://redirect.github.com/pypa/packaging/pull/1133)\n-
          Remove sphinx-toolbox by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1135](https://redirect.github.com/pypa/packaging/pull/1135)\n-
          Use docs group, faster readthedocs by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1061](https://redirect.github.com/pypa/packaging/pull/1061)\n-
          Add free-threaded Python to CI by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1098](https://redirect.github.com/pypa/packaging/pull/1098)\n-
          Simplify combining `SpecifierSet.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1073](https://redirect.github.com/pypa/packaging/pull/1073)\n-
          Use direct operator methods in `_compare_compatible` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1100](https://redirect.github.com/pypa/packaging/pull/1100)\n-
          Remove unnecessary if statement in `Specifier.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1074](https://redirect.github.com/pypa/packaging/pull/1074)\n-
          Remove unneeded nesting in `Specifier.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1072](https://redirect.github.com/pypa/packaging/pull/1072)\n\nDocumentation:\n\n-
          Fix documentation: grammar, typos, formatting, and outdated references by
          [@&#8203;DimitriPapadopoulos](https://redirect.github.com/DimitriPapadopoulos)
          in [#&#8203;1084](https://redirect.github.com/pypa/packaging/pull/1084)\n-
          Fix versionadded for `Version.from_parts()` by [@&#8203;Jackenmen](https://redirect.github.com/Jackenmen)
          in [#&#8203;1134](https://redirect.github.com/pypa/packaging/pull/1134)\n-
          Document `&` and `|` operators for combining `Marker` objects by [@&#8203;r266-tech](https://redirect.github.com/r266-tech)
          in [#&#8203;1151](https://redirect.github.com/pypa/packaging/pull/1151)\n-
          Expand and clean up `Version` documentation by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1089](https://redirect.github.com/pypa/packaging/pull/1089)\n-
          Move license docs inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1131](https://redirect.github.com/pypa/packaging/pull/1131)\n-
          Move markers inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1104](https://redirect.github.com/pypa/packaging/pull/1104)\n-
          Move tags docs to inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1130](https://redirect.github.com/pypa/packaging/pull/1130)\n-
          Move utilities inline, like other modules by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1103](https://redirect.github.com/pypa/packaging/pull/1103)\n\n####
          Benchmarks\n\nPerformance improvements since 26.0, from the new integrated
          benchmark suite:\n\n```\nuv run asv run 26.0..HEAD\n```\n\n<img width=\"908\"
          height=\"965\" alt=\"Screenshot 2026-04-13 at 11 32 14\u202FPM\" src=\"https://github.com/user-attachments/assets/3bf63569-dbbf-4f34-9660-ede3cef1745d\"
          />\n\n<img width=\"908\" height=\"479\" alt=\"Screenshot 2026-04-13 at 11
          32 43\u202FPM\" src=\"https://github.com/user-attachments/assets/f7906800-f6d9-4af6-a3f3-369b654b73e3\"
          />\n\n#### New Contributors\n\n- [@&#8203;veeceey](https://redirect.github.com/veeceey)
          made their first contribution in [#&#8203;1097](https://redirect.github.com/pypa/packaging/pull/1097)\n-
          [@&#8203;bysiber](https://redirect.github.com/bysiber) made their first
          contribution in [#&#8203;1093](https://redirect.github.com/pypa/packaging/pull/1093)\n-
          [@&#8203;sirosen](https://redirect.github.com/sirosen) made their first
          contribution in [#&#8203;1106](https://redirect.github.com/pypa/packaging/pull/1106)\n-
          [@&#8203;Jackenmen](https://redirect.github.com/Jackenmen) made their first
          contribution in [#&#8203;1134](https://redirect.github.com/pypa/packaging/pull/1134)\n-
          [@&#8203;ngoldbaum](https://redirect.github.com/ngoldbaum) made their first
          contribution in [#&#8203;1099](https://redirect.github.com/pypa/packaging/pull/1099)\n-
          [@&#8203;r266-tech](https://redirect.github.com/r266-tech) made their first
          contribution in [#&#8203;1151](https://redirect.github.com/pypa/packaging/pull/1151)\n-
          [@&#8203;hoodmane](https://redirect.github.com/hoodmane) made their first
          contribution in [#&#8203;804](https://redirect.github.com/pypa/packaging/pull/804)\n\n**Full
          Changelog**: <https://github.com/pypa/packaging/compare/26.0...26.1>\n\n</details>\n\n---\n\n###
          Configuration\n\n\U0001F4C5 **Schedule**: (UTC)\n\n- Branch creation\n  -
          At any time (no schedule defined)\n- Automerge\n  - At any time (no schedule
          defined)\n\n\U0001F6A6 **Automerge**: Disabled by config. Please merge this
          manually once you are satisfied.\n\n\u267B **Rebasing**: Whenever PR becomes
          conflicted, or you tick the rebase/retry checkbox.\n\n\U0001F515 **Ignore**:
          Close this PR and you won't be reminded about this update again.\n\n---\n\n
          - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this
          box\n\n---\n\nThis PR was generated by [Mend Renovate](https://mend.io/renovate/).
          View the [repository job log](https://developer.mend.io/github/osism/generics).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMTAuMiIsInVwZGF0ZWRJblZlciI6IjQzLjExMC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
        change_url: https://github.com/osism/generics/pull/587
        commit_id: cf31de6c01b3d787583de265d9bbfd0b429a1f5e
        patchset: cf31de6c01b3d787583de265d9bbfd0b429a1f5e
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/generics
          name: osism/generics
          short_name: generics
          src_dir: src/github.com/osism/generics
        topic: null
      job: cfg-generics-tox-check
      jobtags: []
      max_attempts: 3
      message: Y2hvcmUoZGVwcyk6IHVwZGF0ZSBkZXBlbmRlbmN5IHBhY2thZ2luZyB0byB2MjYuMQoKVGhpcyBQUiBjb250YWlucyB0aGUgZm9sbG93aW5nIHVwZGF0ZXM6Cgp8IFBhY2thZ2UgfCBDaGFuZ2UgfCBbQWdlXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8IFtDb25maWRlbmNlXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8CnwtLS18LS0tfC0tLXwtLS18CnwgW3BhY2thZ2luZ10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nKSB8IGA9PTI2LjBgIOKGkiBgPT0yNi4xYCB8ICFbYWdlXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvYWdlL3B5cGkvcGFja2FnaW5nLzI2LjE/c2xpbT10cnVlKSB8ICFbY29uZmlkZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubWVuZC5pby9hcGkvbWMvYmFkZ2VzL2NvbmZpZGVuY2UvcHlwaS9wYWNrYWdpbmcvMjYuMC8yNi4xP3NsaW09dHJ1ZSkgfAoKLS0tCgojIyMgUmVsZWFzZSBOb3RlcwoKPGRldGFpbHM+CjxzdW1tYXJ5PnB5cGEvcGFja2FnaW5nIChwYWNrYWdpbmcpPC9zdW1tYXJ5PgoKIyMjIFtgdjI2LjFgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcmVsZWFzZXMvdGFnLzI2LjEpCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9jb21wYXJlLzI2LjAuLi4yNi4xKQoKRmVhdHVyZXM6CgotIFBFUCA3ODM6IGFkZCBoYW5kbGluZyBmb3IgRW1zY3JpcHRlbiB3aGVlbCB0YWdzIGJ5IFtAJiM4MjAzO2hvb2RtYW5lXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaG9vZG1hbmUpIGluIFsjJiM4MjAzOzgwNF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvODA0KQotIFBFUCA4MDM6IGFkZCBoYW5kbGluZyBmb3IgdGhlIGBhYmkzLmFiaTN0YCBmcmVlLXRocmVhZGluZyB0YWcgYnkgW0AmIzgyMDM7bmdvbGRiYXVtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbmdvbGRiYXVtKSBpbiBbIyYjODIwMzsxMDk5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDk5KQotIFBFUCA3MjM6IGFkZCBgcGFja2FnaW5nLmRlcGVuZGVuY3lfZ3JvdXBzYCBtb2R1bGUsIGJhc2VkIG9uIHRoZSBgZGVwZW5kZW5jeS1ncm91cHNgIHBhY2thZ2UgYnkgW0AmIzgyMDM7c2lyb3Nlbl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3Npcm9zZW4pIGluIFsjJiM4MjAzOzEwNjVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNjUpCi0gQWRkIHRoZSBgcGFja2FnaW5nLmRpcmVjdF91cmxgIG1vZHVsZSBieSBbQCYjODIwMztzYmlkb3VsXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vc2JpZG91bCkgaW4gWyMmIzgyMDM7OTQ0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NDQpCi0gQWRkIHRoZSBgcGFja2FnaW5nLmVycm9yc2AgbW9kdWxlIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwNzFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNzEpCi0gQWRkIGBTcGVjaWZpZXJTZXQuaXNfdW5zYXRpc2ZpYWJsZWAgdXNpbmcgcmFuZ2VzIChuZXcgaW50ZXJuYWxzIHRoYXQgd2lsbCBiZSBleHBhbmRlZCBpbiBmdXR1cmUgdmVyc2lvbnMpIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTExOV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTExOSkKLSBBZGQgYGNyZWF0ZV9jb21wYXRpYmxlX3RhZ3Nfc2VsZWN0b3JgIHRvIHNlbGVjdCBjb21wYXRpYmxlIHRhZ3MgYnkgW0AmIzgyMDM7c2JpZG91bF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3NiaWRvdWwpIGluIFsjJiM4MjAzOzExMTBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMTApCi0gQWRkIGEgYGtleWAgYXJndW1lbnQgdG8gYFNwZWNpZmllclNldC5maWx0ZXIoKWAgYnkgW0AmIzgyMDM7ZnJvc3RtaW5nXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vZnJvc3RtaW5nKSBpbiBbIyYjODIwMzsxMDY4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDY4KQotIFN1cHBvcnQgYCZgIGFuZCBgfGAgZm9yIGBNYXJrZXJgJ3MgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTE0Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTE0NikKLSBOb3JtYWxpemUgYFZlcnNpb24uX19yZXBsYWNlX19gIGFuZCBhZGQgYFZlcnNpb24uZnJvbV9wYXJ0c2AgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA3OF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA3OCkKLSBBZGQgYW4gb3B0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGFnIHNldCBzb3J0IG9yZGVyIGluIGBwYXJzZV93aGVlbF9maWxlbmFtZWAgYnkgW0AmIzgyMDM7cjI2Ni10ZWNoXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcjI2Ni10ZWNoKSBpbiBbIyYjODIwMzsxMTUwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTUwKQoKQmVoYXZpb3IgYWRhcHRhdGlvbnM6CgotIE5hcnJvdyBleGNsdXNpb24gb2YgcHJlLXJlbGVhc2VzIGZvciBgPFYucG9zdE5gIHRvIG1hdGNoIHNwZWMgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMTQwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTQwKQotIE5hcnJvdyBleGNsdXNpb24gb2YgcG9zdC1yZWxlYXNlcyBmb3IgYD5WYCB0byBtYXRjaCBzcGVjIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTE0MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTE0MSkKLSBSZW5hbWUgYGZvcm1hdF9mdWxsX3ZlcnNpb25gIHRvIGBfZm9ybWF0X2Z1bGxfdmVyc2lvbmAgdG8gbWFrZSBpdCB2aXNpYmx5IHByaXZhdGUgYnkgW0AmIzgyMDM7cjI2Ni10ZWNoXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcjI2Ni10ZWNoKSBpbiBbIyYjODIwMzsxMTI1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTI1KQotIFJlc3RyaWN0IGxvY2FsIHZlcnNpb24gdG8gQVNDSUkgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTEwMl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTEwMikKClB5bG9jayAoUEVQIDc1MSkgdXBkYXRlczoKCi0gQWRkIHB5bG9jayBgc2VsZWN0YCBmdW5jdGlvbiBieSBbQCYjODIwMztzYmlkb3VsXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vc2JpZG91bCkgaW4gWyMmIzgyMDM7MTA5Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA5MikKLSBEb2N1bWVudCBweWxvY2sgYHNlbGVjdCgpYCBtZXRob2QgYW5kIGBQeWxvY2tTZWxlY3RFcnJvcmAgYnkgW0AmIzgyMDM7cjI2Ni10ZWNoXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcjI2Ni10ZWNoKSBpbiBbIyYjODIwMzsxMTUzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTUzKQotIEFkZCBgZmlsZW5hbWVgIHByb3BlcnR5IHRvIGBQYWNrYWdlU2Rpc3RgIGFuZCBgUGFja2FnZVdoZWVsYCwgbW9yZSB2YWxpZGF0aW9uIGJ5IFtAJiM4MjAzO3NiaWRvdWxdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9zYmlkb3VsKSBpbiBbIyYjODIwMzsxMDk1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDk1KQotIEdpdmUgcHJlZmVyZW5jZSB0byBwYXRoIG92ZXIgdXJsIGJ5IFtAJiM4MjAzO3NiaWRvdWxdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9zYmlkb3VsKSBpbiBbIyYjODIwMzsxMTI4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTI4KQotIFZhbGlkYXRlIG5hbWUvdmVyc2lvbiBjb25zaXN0ZW5jeSBpbiBmaWxlIG5hbWVzIGJ5IFtAJiM4MjAzO3NiaWRvdWxdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9zYmlkb3VsKSBpbiBbIyYjODIwMzsxMTE0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTE0KQoKRml4ZXM6CgotIEZpeCBgPmAgY29tcGFyaXNvbiBmb3IgdmVyc2lvbnMgd2l0aCBkZXYrbG9jYWwgc2VnbWVudHMgYnkgW0AmIzgyMDM7dmVlY2VleV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3ZlZWNlZXkpIGluIFsjJiM4MjAzOzEwOTddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwOTcpCi0gRml4IGluY29ycmVjdCBzZWxmLWNvbXBhcmlzb24gZm9yIGBJbmZpbml0eVR5cGVgIGFuZCBgTmVnYXRpdmVJbmZpbml0eVR5cGVgIGJ5IFtAJiM4MjAzO2J5c2liZXJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ieXNpYmVyKSBpbiBbIyYjODIwMzsxMDkzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDkzKQotIENhbm9uaWNhbGl6ZSB3aGVuIGRlZHVwbGljYXRpbmcgc3BlY2lmaWVycyBpbiBgU3BlY2lmaWVyU2V0YCBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzExMDldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMDkpCi0gRml4IGNoYXJzZXQgZXJyb3IgbWVzc2FnZSBmb3JtYXR0aW5nIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTEyMV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTEyMSkKLSBIYW5kbGUgdGhlIGBrZXlgIHBhcmFtZXRlciBpbiBgU3BlY2lmaWVyU2V0LmZpbHRlcmAgd2hlbiBzcGVjaWZpZXJzIGFyZSBlbXB0eSBhbmQgcHJlcmVsZWFzZSBpcyBgRmFsc2VgIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTA5Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA5NikKLSBTdGFuZGFyZGl6ZSBpbm5lciBjb21wb25lbnRzIG9mIGByZXByYCBvdXRwdXQgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA5MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA5MCkKLSBgU3BlY2lmaWVyYCdzIGA9PT1gIHVzZXMgb3JpZ2luYWwgc3RyaW5nLCBub3Qgbm9ybWFsaXplZCwgd2hlbiBhdmFpbGFibGUgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMTI0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTI0KQotIFByb3BhZ2F0ZSBpbnQtbWF4LXN0ci1kaWdpdHMgYFZhbHVlRXJyb3JgIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTE1NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTE1NSkKClBlcmZvcm1hbmNlOgoKLSBBZGQgZmFzdCBwYXRoIGZvciBwYXJzaW5nIHNpbXBsZSB2ZXJzaW9ucyAoZGlnaXRzIGFuZCBkb3RzIG9ubHkpIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTA4Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA4MikKLSBBZGQgZmFzdCBwYXRoIGZvciBgVmVyc2lvbmAgdG8gYFZlcnNpb25gIGNvbXBhcmlzb24gYnkgc2tpcHBpbmcgYF9rZXlgIHByb3BlcnR5IGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTA4M10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA4MykKLSBDYWNoZSBgVmVyc2lvbmAgaGFzaCB2YWx1ZSBpbiBkZWRpY2F0ZWQgc2xvdCBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzExMThdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMTgpCi0gT3ZlcmhhdWwgYF9jbXBrZXlgIHRvIHJlbW92ZSB1c2Ugb2YgY3VzdG9tIG9iamVjdHMgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMTE2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTE2KQotIFNraXAgYF9fcmVwbGFjZV9fYCBpbiBTcGVjaWZpZXIgY29tcGFyaXNvbiBpZiBub3QgbmVlZGVkIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTA4MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA4MSkKLSBgU3BlY2lmaWVyU2V0YCB1c2UgYHR1cGxlYCBpbnN0ZWFkIG9mIGBmcm96ZW5zZXRgIGZvciBgX3NwZWNzYCBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzExMDhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMDgpCi0gU3BlZWQgdXAgY29tcGxleCBgU3BlY2lmaWVyU2V0YCBmaWx0ZXJpbmcgYnkgaW1wbGVtZW50aW5nIGNvc3QtYmFzZWQgb3JkZXJpbmcgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMTA1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTA1KQotIFNwZWVkIHVwIHdpbGRjYXJkIGNvbXBhcmlzb24gYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMTExXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTExKQotIFN0cmVhbSBQRVA0NDAgZmlsdGVyaW5nIGluIGBTcGVjaWZpZXJTZXQuZmlsdGVyYCBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzEwNzZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNzYpCi0gQWRkIGBfX3Nsb3RzX19gIHRvIGBNYXJrZXJgIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzExNDddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExNDcpCi0gU2ltcGx5IGBTcGVjaWZpZXJgIHJlZ2V4IGJ5IFtAJiM4MjAzO3Npcm9zZW5dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9zaXJvc2VuKSBpbiBbIyYjODIwMzsxMTA2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTA2KQotIFNraXAgdXNpbmcgdGhlIGhhc2ggcHJvcGVydHkgaW50ZXJuYWxseSBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzExMTVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMTUpCgpJbnRlcm5hbDoKCi0gQWRkIGRvd25zdHJlYW0gdGVzdGluZyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDQ5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDQ5KQotIEJlbmNobWFya2luZyBzdWl0ZSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDU5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDU5KQotIEJlbmNobWFyayB2YXJpYW5jZSByZWR1Y3Rpb24gYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMTA3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTA3KQotIEFkZCBwcm9wZXJ0eS1iYXNlZCB0ZXN0cyBmb3IgUEVQIDQ0MCBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzExNDRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExNDQpCi0gQ2xlYW4gdXAgYSBmZXcgYGNvbGxlY3Rpb25zLm5hbWVkdHVwbGVgIGluIHRlc3RzIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwNzBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNzApCi0gRG8gbm90IHJlbG9hZCB0aGUgdGFncyBtb2R1bGUgaW4gdGVzdHMgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTE1Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTE1MikKLSBMaW1pdCBgZGlyKClgIC8gdGFiLWNvbXBsZXRpb24gaW4gUkVQTCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDExXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDExKQotIEFkZCBtb3JlIGBfX2FsbF9fYC9gX19kaXJfX2AgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA2OV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA2OSkKLSBDbGVhbnVwIHByZS1jb21taXQgYSBiaXQgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA4MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA4MCkKLSBQaW4gcHJlLWNvbW1pdCBmaWxlLCB1c2UgZGVwZW5kYWJvdCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMTMzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTMzKQotIFJlbW92ZSBzcGhpbngtdG9vbGJveCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMTM1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTM1KQotIFVzZSBkb2NzIGdyb3VwLCBmYXN0ZXIgcmVhZHRoZWRvY3MgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA2MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA2MSkKLSBBZGQgZnJlZS10aHJlYWRlZCBQeXRob24gdG8gQ0kgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA5OF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA5OCkKLSBTaW1wbGlmeSBjb21iaW5pbmcgYFNwZWNpZmllclNldC5wcmVyZWxlYXNlc2AgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMDczXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDczKQotIFVzZSBkaXJlY3Qgb3BlcmF0b3IgbWV0aG9kcyBpbiBgX2NvbXBhcmVfY29tcGF0aWJsZWAgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMTAwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTAwKQotIFJlbW92ZSB1bm5lY2Vzc2FyeSBpZiBzdGF0ZW1lbnQgaW4gYFNwZWNpZmllci5wcmVyZWxlYXNlc2AgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMDc0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDc0KQotIFJlbW92ZSB1bm5lZWRlZCBuZXN0aW5nIGluIGBTcGVjaWZpZXIucHJlcmVsZWFzZXNgIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTA3Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA3MikKCkRvY3VtZW50YXRpb246CgotIEZpeCBkb2N1bWVudGF0aW9uOiBncmFtbWFyLCB0eXBvcywgZm9ybWF0dGluZywgYW5kIG91dGRhdGVkIHJlZmVyZW5jZXMgYnkgW0AmIzgyMDM7RGltaXRyaVBhcGFkb3BvdWxvc10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL0RpbWl0cmlQYXBhZG9wb3Vsb3MpIGluIFsjJiM4MjAzOzEwODRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwODQpCi0gRml4IHZlcnNpb25hZGRlZCBmb3IgYFZlcnNpb24uZnJvbV9wYXJ0cygpYCBieSBbQCYjODIwMztKYWNrZW5tZW5dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9KYWNrZW5tZW4pIGluIFsjJiM4MjAzOzExMzRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMzQpCi0gRG9jdW1lbnQgYCZgIGFuZCBgfGAgb3BlcmF0b3JzIGZvciBjb21iaW5pbmcgYE1hcmtlcmAgb2JqZWN0cyBieSBbQCYjODIwMztyMjY2LXRlY2hdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9yMjY2LXRlY2gpIGluIFsjJiM4MjAzOzExNTFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExNTEpCi0gRXhwYW5kIGFuZCBjbGVhbiB1cCBgVmVyc2lvbmAgZG9jdW1lbnRhdGlvbiBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDg5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDg5KQotIE1vdmUgbGljZW5zZSBkb2NzIGlubGluZSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMTMxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTMxKQotIE1vdmUgbWFya2VycyBpbmxpbmUgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTEwNF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTEwNCkKLSBNb3ZlIHRhZ3MgZG9jcyB0byBpbmxpbmUgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTEzMF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTEzMCkKLSBNb3ZlIHV0aWxpdGllcyBpbmxpbmUsIGxpa2Ugb3RoZXIgbW9kdWxlcyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMTAzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTAzKQoKIyMjIyBCZW5jaG1hcmtzCgpQZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgc2luY2UgMjYuMCwgZnJvbSB0aGUgbmV3IGludGVncmF0ZWQgYmVuY2htYXJrIHN1aXRlOgoKYGBgCnV2IHJ1biBhc3YgcnVuIDI2LjAuLkhFQUQKYGBgCgo8aW1nIHdpZHRoPSI5MDgiIGhlaWdodD0iOTY1IiBhbHQ9IlNjcmVlbnNob3QgMjAyNi0wNC0xMyBhdCAxMSAzMiAxNOKAr1BNIiBzcmM9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy8zYmY2MzU2OS1kYmJmLTRmMzQtOTY2MC1lZGUzY2VmMTc0NWQiIC8+Cgo8aW1nIHdpZHRoPSI5MDgiIGhlaWdodD0iNDc5IiBhbHQ9IlNjcmVlbnNob3QgMjAyNi0wNC0xMyBhdCAxMSAzMiA0M+KAr1BNIiBzcmM9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9mNzkwNjgwMC1mNmQ5LTRhZjYtYTNmMy0zNjliNjU0YjczZTMiIC8+CgojIyMjIE5ldyBDb250cmlidXRvcnMKCi0gW0AmIzgyMDM7dmVlY2VleV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3ZlZWNlZXkpIG1hZGUgdGhlaXIgZmlyc3QgY29udHJpYnV0aW9uIGluIFsjJiM4MjAzOzEwOTddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwOTcpCi0gW0AmIzgyMDM7YnlzaWJlcl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2J5c2liZXIpIG1hZGUgdGhlaXIgZmlyc3QgY29udHJpYnV0aW9uIGluIFsjJiM4MjAzOzEwOTNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwOTMpCi0gW0AmIzgyMDM7c2lyb3Nlbl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3Npcm9zZW4pIG1hZGUgdGhlaXIgZmlyc3QgY29udHJpYnV0aW9uIGluIFsjJiM4MjAzOzExMDZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMDYpCi0gW0AmIzgyMDM7SmFja2VubWVuXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vSmFja2VubWVuKSBtYWRlIHRoZWlyIGZpcnN0IGNvbnRyaWJ1dGlvbiBpbiBbIyYjODIwMzsxMTM0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTM0KQotIFtAJiM4MjAzO25nb2xkYmF1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25nb2xkYmF1bSkgbWFkZSB0aGVpciBmaXJzdCBjb250cmlidXRpb24gaW4gWyMmIzgyMDM7MTA5OV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA5OSkKLSBbQCYjODIwMztyMjY2LXRlY2hdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9yMjY2LXRlY2gpIG1hZGUgdGhlaXIgZmlyc3QgY29udHJpYnV0aW9uIGluIFsjJiM4MjAzOzExNTFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExNTEpCi0gW0AmIzgyMDM7aG9vZG1hbmVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ob29kbWFuZSkgbWFkZSB0aGVpciBmaXJzdCBjb250cmlidXRpb24gaW4gWyMmIzgyMDM7ODA0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC84MDQpCgoqKkZ1bGwgQ2hhbmdlbG9nKio6IDxodHRwczovL2dpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvY29tcGFyZS8yNi4wLi4uMjYuMT4KCjwvZGV0YWlscz4KCi0tLQoKIyMjIENvbmZpZ3VyYXRpb24KCvCfk4UgKipTY2hlZHVsZSoqOiAoVVRDKQoKLSBCcmFuY2ggY3JlYXRpb24KICAtIEF0IGFueSB0aW1lIChubyBzY2hlZHVsZSBkZWZpbmVkKQotIEF1dG9tZXJnZQogIC0gQXQgYW55IHRpbWUgKG5vIHNjaGVkdWxlIGRlZmluZWQpCgrwn5qmICoqQXV0b21lcmdlKio6IERpc2FibGVkIGJ5IGNvbmZpZy4gUGxlYXNlIG1lcmdlIHRoaXMgbWFudWFsbHkgb25jZSB5b3UgYXJlIHNhdGlzZmllZC4KCuKZuyAqKlJlYmFzaW5nKio6IFdoZW5ldmVyIFBSIGJlY29tZXMgY29uZmxpY3RlZCwgb3IgeW91IHRpY2sgdGhlIHJlYmFzZS9yZXRyeSBjaGVja2JveC4KCvCflJUgKipJZ25vcmUqKjogQ2xvc2UgdGhpcyBQUiBhbmQgeW91IHdvbid0IGJlIHJlbWluZGVkIGFib3V0IHRoaXMgdXBkYXRlIGFnYWluLgoKLS0tCgogLSBbIF0gPCEtLSByZWJhc2UtY2hlY2sgLS0+SWYgeW91IHdhbnQgdG8gcmViYXNlL3JldHJ5IHRoaXMgUFIsIGNoZWNrIHRoaXMgYm94CgotLS0KClRoaXMgUFIgd2FzIGdlbmVyYXRlZCBieSBbTWVuZCBSZW5vdmF0ZV0oaHR0cHM6Ly9tZW5kLmlvL3Jlbm92YXRlLykuIFZpZXcgdGhlIFtyZXBvc2l0b3J5IGpvYiBsb2ddKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vZ2l0aHViL29zaXNtL2dlbmVyaWNzKS4KPCEtLXJlbm92YXRlLWRlYnVnOmV5SmpjbVZoZEdWa1NXNVdaWElpT2lJME15NHhNVEF1TWlJc0luVndaR0YwWldSSmJsWmxjaUk2SWpRekxqRXhNQzR5SWl3aWRHRnlaMlYwUW5KaGJtTm9Jam9pYldGcGJpSXNJbXhoWW1Wc2N5STZXeUp5Wlc1dmRtRjBaU0pkZlE9PS0tPgo=
      patchset: cf31de6c01b3d787583de265d9bbfd0b429a1f5e
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 4f450aa36c28b035ce97359a888edbd7599eaf31
          trusted/project_1/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 397240f42127868e42e86e6aeb120c2cb092d117
          untrusted/project_0/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 397240f42127868e42e86e6aeb120c2cb092d117
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 4f450aa36c28b035ce97359a888edbd7599eaf31
        playbooks:
        - path: untrusted/project_0/github.com/osism/openinfra-zuul-jobs/playbooks/tox/run.yaml
          roles:
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_0/zuul-config
            link_target: untrusted/project_1/github.com/osism/zuul-config
            role_path: ansible/playbook_0/role_0/zuul-config/roles
          - checkout: master
            checkout_description: playbook branch
            link_name: ansible/playbook_0/role_1/openinfra-zuul-jobs
            link_target: untrusted/project_0/github.com/osism/openinfra-zuul-jobs
            role_path: ansible/playbook_0/role_1/openinfra-zuul-jobs/roles
      post_review: false
      post_timeout: null
      pre_timeout: null
      project:
        canonical_hostname: github.com
        canonical_name: github.com/osism/generics
        name: osism/generics
        short_name: generics
        src_dir: src/github.com/osism/generics
      projects:
        github.com/osism/generics:
          canonical_hostname: github.com
          canonical_name: github.com/osism/generics
          checkout: main
          checkout_description: zuul branch
          commit: 54170b49a6cac35b32518a7a38bdc9a1946a1c46
          name: osism/generics
          required: false
          short_name: generics
          src_dir: src/github.com/osism/generics
      ref: refs/pull/587/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
