all:
  children:
    tempest:
      hosts:
        controller: null
    zuul_unreachable:
      hosts: {}
  hosts:
    controller:
      ansible_connection: ssh
      ansible_host: 199.19.213.201
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      configure_swap_size: 8192
      devstack_local_conf:
        post-config:
          $NEUTRON_CONF:
            DEFAULT:
              global_physnet_mtu: '{{ external_bridge_mtu }}'
          /etc/magnum/magnum.conf:
            cluster_template:
              kubernetes_allowed_network_drivers: calico,cilium
              kubernetes_default_network_driver: calico
            nova_client:
              api_version: 2.15
          /etc/manila/manila.conf:
            generic:
              connect_share_server_to_tenant_network: true
              driver_handles_share_servers: true
      devstack_localrc:
        ADMIN_PASSWORD: secretadmin
        DATABASE_PASSWORD: secretdatabase
        DEBUG_LIBVIRT_COREDUMPS: true
        DISABLE_AMP_IMAGE_BUILD: true
        ENABLE_SYSCTL_MEM_TUNING: true
        ENABLE_SYSCTL_NET_TUNING: true
        ENABLE_ZSWAP: true
        ERROR_ON_CLONE: true
        FIXED_RANGE: 10.1.0.0/20
        FLOATING_RANGE: 172.24.5.0/24
        GIT_BASE: https://github.com
        HOST_IP: '{{ hostvars[''controller''][''nodepool''][''private_ipv4''] }}'
        IPV4_ADDRS_SAFE_TO_USE: 10.1.0.0/20
        LIBVIRT_TYPE: '{{ devstack_libvirt_type | default("qemu") }}'
        LOGFILE: /opt/stack/logs/devstacklog.txt
        LOG_COLOR: false
        MAGNUM_GUEST_IMAGE_URL: '{{ image_url }}'
        MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS: snapshot_support=True create_share_from_snapshot_support=True
        MANILA_ENABLED_BACKENDS: generic
        MANILA_USE_SERVICE_INSTANCE_PASSWORD: true
        NETWORK_GATEWAY: 10.1.0.1
        NOVA_LIBVIRT_TB_CACHE_SIZE: 128
        NOVA_VNC_ENABLED: true
        OCTAVIA_NODE: api
        OVN_DBS_LOG_LEVEL: dbg
        PUBLIC_BRIDGE_MTU: '{{ external_bridge_mtu }}'
        PUBLIC_NETWORK_GATEWAY: 172.24.5.1
        RABBIT_PASSWORD: secretrabbit
        SERVICE_HOST: '{{ hostvars[''controller''][''nodepool''][''private_ipv4'']
          }}'
        SERVICE_PASSWORD: secretservice
        SWIFT_HASH: 1234123412341234
        SWIFT_REPLICAS: 1
        SWIFT_START_ALL_SERVICES: false
        VERBOSE: true
        VERBOSE_NO_TIMESTAMP: true
      devstack_plugins:
        barbican: https://github.com/openstack/barbican
        magnum: https://review.opendev.org/openstack/magnum
        magnum-cluster-api: https://github.com/vexxhost/magnum-cluster-api
        manila: https://github.com/openstack/manila
        octavia: https://github.com/openstack/octavia
        ovn-octavia-provider: https://github.com/openstack/ovn-octavia-provider
      devstack_services:
        base: false
        c-api: true
        c-bak: true
        c-sch: true
        c-vol: true
        dstat: false
        etcd3: true
        file_tracker: true
        g-api: true
        horizon: false
        key: true
        memory_tracker: true
        mysql: true
        n-api: true
        n-api-meta: true
        n-cond: true
        n-cpu: true
        n-novnc: true
        n-sch: true
        o-api: true
        o-da: true
        o-hk: true
        octavia: true
        openstack-cli-server: true
        ovn-controller: true
        ovn-northd: true
        ovs-vswitchd: true
        ovsdb-server: true
        placement-api: true
        q-ovn-agent: true
        q-svc: true
        rabbit: true
        s-account: false
        s-container: false
        s-object: false
        s-proxy: false
        tempest: false
        tls-proxy: true
      extensions_to_txt:
        auto: true
        conf: true
        localrc: true
        log: true
        stackenv: true
      image_url: https://github.com/vexxhost/capo-image-elements/releases/latest/download/ubuntu-22.04-{{
        kube_tag }}.qcow2
      kube_tag: v1.35.1
      network_driver: calico
      nodepool:
        az: nova
        cloud: public
        external_id: 476292ec-c89a-4d3a-8fb7-a5155b342798
        host_id: 7b8a4cf3090e32af994f4889a62f1003a5f74592d8295d185d35c3b9
        interface_ip: 199.19.213.201
        label: ubuntu-noble-16
        node_properties: {}
        private_ipv4: 199.19.213.201
        private_ipv6: null
        provider: yul1
        public_ipv4: 199.19.213.201
        public_ipv6: 2604:e100:1:0:f816:3eff:fe31:659
        region: ca-ymq-1
        slot: null
      zuul_copy_output:
        /etc/ceph: logs
        /etc/glusterfs/glusterd.vol: logs
        /etc/libvirt: logs
        /etc/lvm: logs
        /etc/resolv.conf: logs
        /etc/sudoers: logs
        /etc/sudoers.d: logs
        /var/log/ceph: logs
        /var/log/glusterfs: logs
        /var/log/libvirt: logs
        /var/log/mysql: logs
        /var/log/openvswitch: logs
        /var/log/postgresql: logs
        /var/log/rabbitmq: logs
        /var/log/unbound.log: logs
        '{{ devstack_conf_dir }}/.localrc.auto': logs
        '{{ devstack_conf_dir }}/.stackenv': logs
        '{{ devstack_conf_dir }}/local.conf': logs
        '{{ devstack_conf_dir }}/localrc': logs
        '{{ devstack_full_log}}': logs
        '{{ devstack_log_dir }}/atop': logs
        '{{ devstack_log_dir }}/devstacklog.txt': logs
        '{{ devstack_log_dir }}/devstacklog.txt.summary': logs
        '{{ devstack_log_dir }}/dstat-csv.log': logs
        '{{ devstack_log_dir }}/qemu.coredump': logs
        '{{ devstack_log_dir }}/tcpdump.pcap': logs
        '{{ devstack_log_dir }}/worlddump-latest.txt': logs
        '{{ stage_dir }}/apache': logs
        '{{ stage_dir }}/apache_config': logs
        '{{ stage_dir }}/audit.log': logs
        '{{ stage_dir }}/core': logs
        '{{ stage_dir }}/deprecations.log': logs
        '{{ stage_dir }}/df.txt': logs
        '{{ stage_dir }}/dpkg-l.txt': logs
        '{{ stage_dir }}/etc': logs
        '{{ stage_dir }}/iptables.txt': logs
        '{{ stage_dir }}/listen53.txt': logs
        '{{ stage_dir }}/mount.txt': logs
        '{{ stage_dir }}/performance.json': logs
        '{{ stage_dir }}/pip2-freeze.txt': logs
        '{{ stage_dir }}/pip3-freeze.txt': logs
        '{{ stage_dir }}/rpm-qa.txt': logs
        '{{ stage_dir }}/services.txt': logs
        '{{ stage_dir }}/verify_tempest_conf.log': logs
      zuul_node:
        az: nova
        cloud: public
        external_id: 476292ec-c89a-4d3a-8fb7-a5155b342798
        host_id: 7b8a4cf3090e32af994f4889a62f1003a5f74592d8295d185d35c3b9
        interface_ip: 199.19.213.201
        label: ubuntu-noble-16
        node_properties: {}
        private_ipv4: 199.19.213.201
        private_ipv6: null
        provider: yul1
        public_ipv4: 199.19.213.201
        public_ipv6: 2604:e100:1:0:f816:3eff:fe31:659
        region: ca-ymq-1
        slot: null
        uuid: null
  vars:
    configure_swap_size: 8192
    devstack_local_conf:
      post-config:
        $NEUTRON_CONF:
          DEFAULT:
            global_physnet_mtu: '{{ external_bridge_mtu }}'
        /etc/magnum/magnum.conf:
          cluster_template:
            kubernetes_allowed_network_drivers: calico,cilium
            kubernetes_default_network_driver: calico
          nova_client:
            api_version: 2.15
        /etc/manila/manila.conf:
          generic:
            connect_share_server_to_tenant_network: true
            driver_handles_share_servers: true
    devstack_localrc:
      ADMIN_PASSWORD: secretadmin
      DATABASE_PASSWORD: secretdatabase
      DEBUG_LIBVIRT_COREDUMPS: true
      DISABLE_AMP_IMAGE_BUILD: true
      ENABLE_SYSCTL_MEM_TUNING: true
      ENABLE_SYSCTL_NET_TUNING: true
      ENABLE_ZSWAP: true
      ERROR_ON_CLONE: true
      FIXED_RANGE: 10.1.0.0/20
      FLOATING_RANGE: 172.24.5.0/24
      GIT_BASE: https://github.com
      HOST_IP: '{{ hostvars[''controller''][''nodepool''][''private_ipv4''] }}'
      IPV4_ADDRS_SAFE_TO_USE: 10.1.0.0/20
      LIBVIRT_TYPE: '{{ devstack_libvirt_type | default("qemu") }}'
      LOGFILE: /opt/stack/logs/devstacklog.txt
      LOG_COLOR: false
      MAGNUM_GUEST_IMAGE_URL: '{{ image_url }}'
      MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS: snapshot_support=True create_share_from_snapshot_support=True
      MANILA_ENABLED_BACKENDS: generic
      MANILA_USE_SERVICE_INSTANCE_PASSWORD: true
      NETWORK_GATEWAY: 10.1.0.1
      NOVA_LIBVIRT_TB_CACHE_SIZE: 128
      NOVA_VNC_ENABLED: true
      OCTAVIA_NODE: api
      OVN_DBS_LOG_LEVEL: dbg
      PUBLIC_BRIDGE_MTU: '{{ external_bridge_mtu }}'
      PUBLIC_NETWORK_GATEWAY: 172.24.5.1
      RABBIT_PASSWORD: secretrabbit
      SERVICE_HOST: '{{ hostvars[''controller''][''nodepool''][''private_ipv4''] }}'
      SERVICE_PASSWORD: secretservice
      SWIFT_HASH: 1234123412341234
      SWIFT_REPLICAS: 1
      SWIFT_START_ALL_SERVICES: false
      VERBOSE: true
      VERBOSE_NO_TIMESTAMP: true
    devstack_plugins:
      barbican: https://github.com/openstack/barbican
      magnum: https://review.opendev.org/openstack/magnum
      magnum-cluster-api: https://github.com/vexxhost/magnum-cluster-api
      manila: https://github.com/openstack/manila
      octavia: https://github.com/openstack/octavia
      ovn-octavia-provider: https://github.com/openstack/ovn-octavia-provider
    devstack_services:
      base: false
      c-api: true
      c-bak: true
      c-sch: true
      c-vol: true
      dstat: false
      etcd3: true
      file_tracker: true
      g-api: true
      horizon: false
      key: true
      memory_tracker: true
      mysql: true
      n-api: true
      n-api-meta: true
      n-cond: true
      n-cpu: true
      n-novnc: true
      n-sch: true
      o-api: true
      o-da: true
      o-hk: true
      octavia: true
      openstack-cli-server: true
      ovn-controller: true
      ovn-northd: true
      ovs-vswitchd: true
      ovsdb-server: true
      placement-api: true
      q-ovn-agent: true
      q-svc: true
      rabbit: true
      s-account: false
      s-container: false
      s-object: false
      s-proxy: false
      tempest: false
      tls-proxy: true
    extensions_to_txt:
      auto: true
      conf: true
      localrc: true
      log: true
      stackenv: true
    image_url: https://github.com/vexxhost/capo-image-elements/releases/latest/download/ubuntu-22.04-{{
      kube_tag }}.qcow2
    kube_tag: v1.35.1
    network_driver: calico
    zuul:
      _inheritance_path:
      - '<Job base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: zuul-config/zuul.d/jobs.yaml@main#1>'
      - '<Job openstack-multinode-fips explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: zuul-config/zuul.d/jobs.yaml@main#17>'
      - '<Job devstack-base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:master}}
        source: openstack/devstack/.zuul.yaml@master#426>'
      - '<Job devstack-minimal explicit: None implied: {MatchAny:{ImpliedBranchMatcher:master}}
        source: openstack/devstack/.zuul.yaml@master#558>'
      - '<Job devstack explicit: None implied: {MatchAny:{ImpliedBranchMatcher:master}}
        source: openstack/devstack/.zuul.yaml@master#601>'
      - '<Job magnum-cluster-api-devstack explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/magnum-cluster-api/zuul.d/jobs.yaml@main#1>'
      - '<Job magnum-cluster-api-sonobuoy explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/magnum-cluster-api/zuul.d/jobs.yaml@main#60>'
      - '<Job magnum-cluster-api-sonobuoy-v1.35.1 explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/magnum-cluster-api/zuul.d/jobs.yaml@main#126>'
      - '<Job magnum-cluster-api-sonobuoy-v1.35.1-calico explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/magnum-cluster-api/zuul.d/jobs.yaml@main#132>'
      - '<Job magnum-cluster-api-sonobuoy-v1.35.1-calico explicit: None implied: None
        source: vexxhost/magnum-cluster-api/zuul.d/project.yaml@main#1>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: f5045bafb6cc44468e8cf8621b85551f
      build_refs:
      - branch: main
        change: '837'
        change_message: "fix(deps): update pyo3\n\nThis PR contains the following
          updates:\n\n| Package | Type | Update | Change |\n|---|---|---|---|\n| [pyo3](https://redirect.github.com/pyo3/pyo3)
          | dependencies | minor | `0.26.0` \u2192 `0.28.0` |\n| [pyo3-async-runtimes](https://redirect.github.com/PyO3/pyo3-async-runtimes)
          | dependencies | minor | `0.26.0` \u2192 `0.28.0` |\n| [pyo3-log](https://redirect.github.com/vorner/pyo3-log)
          | dependencies | patch | `0.13.1` \u2192 `0.13.2` |\n| [pythonize](https://redirect.github.com/davidhewitt/pythonize)
          | dependencies | minor | `0.26.0` \u2192 `0.27.0` |\n\n---\n\n### Release
          Notes\n\n<details>\n<summary>pyo3/pyo3 (pyo3)</summary>\n\n### [`v0.28.1`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0281---2026-02-14)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.28.0...v0.28.1)\n\n#####
          Fixed\n\n- Fix `*args` / `**kwargs` support in` experimental-async` feature
          (regressed in 0.28.0). [#&#8203;5771](https://redirect.github.com/PyO3/pyo3/pull/5771)\n-
          Fix `clippy::declare_interior_mutable_const` warning inside `#[pyclass]`
          generated code on enums. [#&#8203;5772](https://redirect.github.com/PyO3/pyo3/pull/5772)\n-
          Fix `ambiguous_associated_items` compilation error when deriving `FromPyObject`
          or using `#[pyclass(from_py_object)]` macro on enums with `Error` variant.
          [#&#8203;5784](https://redirect.github.com/PyO3/pyo3/pull/5784)\n- Fix `__qualname__`
          for complex `#[pyclass]` enum variants to include the enum name. [#&#8203;5796](https://redirect.github.com/PyO3/pyo3/pull/5796)\n\n###
          [`v0.28.0`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0280---2026-02-01)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.2...v0.28.0)\n\n#####
          Packaging\n\n- Bump MSRV to Rust 1.83. [#&#8203;5531](https://redirect.github.com/PyO3/pyo3/pull/5531)\n-
          Bump minimum supported `quote` version to 1.0.37. [#&#8203;5531](https://redirect.github.com/PyO3/pyo3/pull/5531)\n-
          Bump supported GraalPy version to 25.0. [#&#8203;5542](https://redirect.github.com/PyO3/pyo3/pull/5542)\n-
          Drop `memoffset` dependency. [#&#8203;5545](https://redirect.github.com/PyO3/pyo3/pull/5545)\n-
          Support for free-threaded Python is now opt-out rather than opt-in. [#&#8203;5564](https://redirect.github.com/PyO3/pyo3/pull/5564)\n-
          Bump `target-lexicon` dependency to 0.13.3. [#&#8203;5571](https://redirect.github.com/PyO3/pyo3/pull/5571)\n-
          Drop `indoc` and `unindent` dependencies. [#&#8203;5608](https://redirect.github.com/PyO3/pyo3/pull/5608)\n\n#####
          Added\n\n- Add `__init__` support in `#[pymethods]`. [#&#8203;4951](https://redirect.github.com/PyO3/pyo3/pull/4951)\n-
          Expose `PySuper` on PyPy, GraalPy and ABI3 [#&#8203;4951](https://redirect.github.com/PyO3/pyo3/pull/4951)\n-
          Add `PyString::from_fmt` and `py_format!` macro. [#&#8203;5199](https://redirect.github.com/PyO3/pyo3/pull/5199)\n-
          Add `#[pyclass(new = \"from_fields\")]` option. [#&#8203;5421](https://redirect.github.com/PyO3/pyo3/pull/5421)\n-
          Add `pyo3::buffer::PyUntypedBuffer`, a type-erased form of `PyBuffer<T>`.
          [#&#8203;5458](https://redirect.github.com/PyO3/pyo3/pull/5458)\n- Add `PyBytes::new_with_writer`
          [#&#8203;5517](https://redirect.github.com/PyO3/pyo3/pull/5517)\n- Add `PyClass::NAME`.
          [#&#8203;5579](https://redirect.github.com/PyO3/pyo3/pull/5579)\n- Add `pyo3_build_config::add_libpython_rpath_link_args`.
          [#&#8203;5624](https://redirect.github.com/PyO3/pyo3/pull/5624)\n- Add `PyBackedStr::clone_ref`
          and `PyBackedBytes::clone_ref` methods. [#&#8203;5654](https://redirect.github.com/PyO3/pyo3/pull/5654)\n-
          Add `PyCapsule::new_with_pointer` and `PyCapsule::new_with_pointer_and_destructor`
          for creating capsules with raw pointers. [#&#8203;5689](https://redirect.github.com/PyO3/pyo3/pull/5689)\n-
          Add `#[deleter]` attribute to implement property deleters in `#[methods]`.
          [#&#8203;5699](https://redirect.github.com/PyO3/pyo3/pull/5699)\n- Add `IntoPyObject`
          and `FromPyObject` implementations for `uuid::NonNilUuid`. [#&#8203;5707](https://redirect.github.com/PyO3/pyo3/pull/5707)\n-
          Add `PyBackedStr::as_str` and `PyBackedStr::as_py_str` methods. [#&#8203;5723](https://redirect.github.com/PyO3/pyo3/pull/5723)\n-
          Add support for subclassing native types (`PyDict`, exceptions, ...) when
          building for abi3 on Python 3.12+. [#&#8203;5733](https://redirect.github.com/PyO3/pyo3/pull/5733)\n-
          Add support for subclassing `PyList` when building for Python 3.12+. [#&#8203;5734](https://redirect.github.com/PyO3/pyo3/pull/5734)\n-
          FFI definitions:\n  - Add FFI definitions `PyEval_GetFrameBuiltins`, `PyEval_GetFrameGlobals`
          and `PyEval_GetFrameLocals` on Python 3.13 and up. [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
          \ - Add FFI definitions `PyObject_New`, `PyObject_NewVar`, `PyObject_GC_Resize`,
          `PyObject_GC_New`, and `PyObject_GC_NewVar`. [#&#8203;5591](https://redirect.github.com/PyO3/pyo3/pull/5591)\n
          \ - Added FFI definitions and an unsafe Rust API wrapping `Py_BEGIN_CRITICAL_SECTION_MUTEX`
          and `Py_BEGIN_CRITICAL_SECTION_MUTEX2`. [#&#8203;5642](https://redirect.github.com/PyO3/pyo3/pull/5642)\n
          \ - Add FFI definition `PyDict_GetItemStringRef` on Python 3.13 and up.
          [#&#8203;5659](https://redirect.github.com/PyO3/pyo3/pull/5659)\n  - Add
          FFI definition `PyIter_NextItem` on Python 3.14 and up, and `compat::PyIter_NextItem`
          for older versions. [#&#8203;5661](https://redirect.github.com/PyO3/pyo3/pull/5661)\n
          \ - Add FFI definitions `PyThreadState_GetInterpreter` and `PyThreadState_GetID`
          on Python 3.9+, `PyThreadState_EnterTracing` and `PyThreadState_LeaveTracing`
          on Python 3.11+, `PyThreadState_GetUnchecked` on Python 3.13+, and `compat::PyThreadState_GetUnchecked`.
          [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n  - Add
          FFI definitions `PyImport_ImportModuleAttr` and `PyImport_ImportModuleAttrString`
          on Python 3.14+. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n
          \ - Add FFI definitions for the `PyABIInfo` and `PyModExport` APIs available
          in Python 3.15. [#&#8203;5746](https://redirect.github.com/PyO3/pyo3/pull/5746)\n-
          `experimental-inspect`:\n  - Emit base classes. [#&#8203;5331](https://redirect.github.com/PyO3/pyo3/pull/5331)\n
          \ - Emit `@typing.final` on final classes. [#&#8203;5552](https://redirect.github.com/PyO3/pyo3/pull/5552)\n
          \ - Generate nested classes for complex enums. [#&#8203;5708](https://redirect.github.com/PyO3/pyo3/pull/5708)\n
          \ - Emit `async` keyword for async functions. [#&#8203;5731](https://redirect.github.com/PyO3/pyo3/pull/5731)\n\n#####
          Changed\n\n- Call `sys.unraisablehook` instead of `PyErr_Print` if panicking
          on null FFI pointer in `Bound`, `Borrowed` and `Py` constructors. [#&#8203;5496](https://redirect.github.com/PyO3/pyo3/pull/5496)\n-
          Use PEP-489 multi-phase initialization for `#[pymodule]`. [#&#8203;5525](https://redirect.github.com/PyO3/pyo3/pull/5525)\n-
          Deprecate implicit by-value implementation of `FromPyObject` for `#[pyclass]`.
          [#&#8203;5550](https://redirect.github.com/PyO3/pyo3/pull/5550)\n- Deprecate
          `PyTypeInfo::NAME` and `PyTypeInfo::MODULE`. [#&#8203;5579](https://redirect.github.com/PyO3/pyo3/pull/5579)\n-
          Deprecate `Py<T>::from_{owned,borrowed}[or_{err,opt}]` constructors from
          raw pointer. [#&#8203;5585](https://redirect.github.com/PyO3/pyo3/pull/5585)\n-
          Deprecate FFI definitions `PyEval_AcquireLock` and `PyEval_ReleaseLock`.
          [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n- Relax
          `'py: 'a` bound in `Py::extract`. [#&#8203;5594](https://redirect.github.com/PyO3/pyo3/pull/5594)\n-
          Add a `T: PyTypeCheck` bound to the `IntoPyObject` implementations on `Bound<T>`,
          `Borrowed<T>` and `Py<T>`. [#&#8203;5640](https://redirect.github.com/PyO3/pyo3/pull/5640)\n-
          The `with_critical_section` and `with_critical_section2` functions are moved
          to `pyo3::sync::critical_section`. [#&#8203;5642](https://redirect.github.com/PyO3/pyo3/pull/5642)\n-
          Use `PyIter_NextItem` in `PyIterator::next` implementation. [#&#8203;5661](https://redirect.github.com/PyO3/pyo3/pull/5661)\n-
          `IntoPyObject` for simple enums now uses a singleton value, allowing identity
          (python `is`) comparisons. [#&#8203;5665](https://redirect.github.com/PyO3/pyo3/pull/5665)\n-
          Allow any `Sequence[int]` in `FromPyObject` on `Cow<[u8]>` and change the
          error type to `PyErr`. [#&#8203;5667](https://redirect.github.com/PyO3/pyo3/pull/5667)\n-
          `async` pymethods now borrow `self` only for the duration of awaiting the
          future, not the entire method call. [#&#8203;5684](https://redirect.github.com/PyO3/pyo3/pull/5684)\n-
          Change `CastError` formatted message to directly describe the \"is not an
          instance of\" failure condition. [#&#8203;5693](https://redirect.github.com/PyO3/pyo3/pull/5693)\n-
          Add `#[inline]` hints to many methods on `PyBackedStr`. [#&#8203;5723](https://redirect.github.com/PyO3/pyo3/pull/5723)\n-
          Remove redundant internal counters from `BoundSetIterator` and `BoundFrozenSetIterator`.
          [#&#8203;5725](https://redirect.github.com/PyO3/pyo3/pull/5725)\n- Implement
          `PyIterator::size_hint` on abi3 builds (previously was only on unlimited
          API builds). [#&#8203;5727](https://redirect.github.com/PyO3/pyo3/pull/5727)\n-
          Deprecate FFI definition `PyImport_ImportModuleNoBlock` (deprecated in Python
          3.13). [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n-
          `#[new]` can now return arbitrary Python objects. [#&#8203;5739](https://redirect.github.com/PyO3/pyo3/pull/5739)\n-
          `experimental-inspect`:\n  - Introduce `TypeHint` and make use of it to
          encode type hint annotations. [#&#8203;5438](https://redirect.github.com/PyO3/pyo3/pull/5438)\n
          \ - Rename `PyType{Info,Check}::TYPE_INFO` into `PyType{Info,Check}::TYPE_HINT`.
          [#&#8203;5438](https://redirect.github.com/PyO3/pyo3/pull/5438) [#&#8203;5619](https://redirect.github.com/PyO3/pyo3/pull/5619)
          [#&#8203;5641](https://redirect.github.com/PyO3/pyo3/pull/5641)\n  - Fill
          annotations on function arguments and return values for all types supported
          natively by PyO3. [#&#8203;5634](https://redirect.github.com/PyO3/pyo3/pull/5634)
          [#&#8203;5637](https://redirect.github.com/PyO3/pyo3/pull/5637) [#&#8203;5639](https://redirect.github.com/PyO3/pyo3/pull/5639)\n
          \ - Use `_typeshed.Incomplete` instead of `typing.Any` as default type hint,
          to make it easier to spot incomplete trait implementations. [#&#8203;5744](https://redirect.github.com/PyO3/pyo3/pull/5744)\n
          \ - Use general Python expression syntax for type hints. [#&#8203;5671](https://redirect.github.com/PyO3/pyo3/pull/5671)\n\n#####
          Removed\n\n- Remove all functionality deprecated in PyO3 0.25 and 0.26.
          [#&#8203;5740](https://redirect.github.com/PyO3/pyo3/pull/5740)\n- FFI definitions:\n
          \ - Remove FFI definition `PyEval_GetCallStats` (removed from CPython in
          Python 3.7). [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
          \ - Remove FFI definitions `PyEval_AcquireLock` and `PyEval_ReleaseLock`
          on Python 3.13 and up. [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
          \ - Remove private FFI definitions `_PyObject_New`, `_PyObject_NewVar`,
          `_PyObject_GC_Resize`, `_PyObject_GC_New`, and `_PyObject_GC_NewVar`. [#&#8203;5591](https://redirect.github.com/PyO3/pyo3/pull/5591)\n
          \ - Remove private FFI definitions `_PyDict_SetItem_KnownHash`, `_PyDict_Next`,
          `_PyDict_NewPresized`, `_PyDict_Contains_KnownHash`, and `_PyDict_Contains`.
          [#&#8203;5659](https://redirect.github.com/PyO3/pyo3/pull/5659)\n  - Remove
          private FFI definitions `_PyFrameEvalFunction`, `_PyInterpreterState_GetEvalFrameFunc`
          and `_PyInterpreterState_SetEvalFrameFunc`. [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n
          \ - Remove private FFI definitions `_PyImport_IsInitialized`, `_PyImport_SetModule`,
          `_PyImport_SetModuleString`, `_PyImport_AcquireLock`, `_PyImport_ReleaseLock`,
          `_PyImport_FindBuiltin`, `_PyImport_FindExtensionObject`, `_PyImport_FixupBuiltin`,
          and `_PyImport_FixupExtensionObject`. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n\n#####
          Fixed\n\n- Fix `PyModuleMethods::add_submodule()` to use the last segment
          of the submodule name as the attribute name on the parent module instead
          of using the full name. [#&#8203;5375](https://redirect.github.com/PyO3/pyo3/pull/5375)\n-
          Link with libpython for Cygwin extension modules. [#&#8203;5571](https://redirect.github.com/PyO3/pyo3/pull/5571)\n-
          Link against the limited API DLL for Cygwin when abi3 is used. [#&#8203;5574](https://redirect.github.com/PyO3/pyo3/pull/5574)\n-
          Handle errors in `PyIterator` when calling `size_hint` [#&#8203;5604](https://redirect.github.com/PyO3/pyo3/pull/5604)\n-
          Link with libpython for iOS extension modules. [#&#8203;5605](https://redirect.github.com/PyO3/pyo3/pull/5605)\n-
          Correct `IntoPyObject` output type of `PyBackedStr` to be `PyString`, not
          `PyAny`. [#&#8203;5655](https://redirect.github.com/PyO3/pyo3/pull/5655)\n-
          Fix `async` functions to return `None` rather than empty tuple `()`. [#&#8203;5685](https://redirect.github.com/PyO3/pyo3/pull/5685)\n-
          Fix compile error when using references to `#[pyclass]` types (e.g. `&MyClass`)
          as arguments to async `#[pyfunction]`s. [#&#8203;5725](https://redirect.github.com/PyO3/pyo3/pull/5725)\n-
          FFI definitions:\n  - Fix FFI definition `PyMemberDescrObject.d_member`
          to use `PyMemberDef` for Python 3.11+ (was incorrectly `PyGetSetDef`). [#&#8203;5647](https://redirect.github.com/PyO3/pyo3/pull/5647)\n
          \ - Mark FFI definition `PyThreadState_GetFrame` available with abi3 in
          3.10+. [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n
          \ - Fix FFI definition `PyImport_GetModule` on PyPy. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n-
          `experimental-inspect`:\n  - fix `__new__` return type to be the built object
          type and not `None`. [#&#8203;5555](https://redirect.github.com/PyO3/pyo3/pull/5555)\n
          \ - fix imports of decorators. [#&#8203;5618](https://redirect.github.com/PyO3/pyo3/pull/5618)\n
          \ - fix the return type annotation of `PyResult<()>` (must be `None` and
          not `tuple`) [#&#8203;5674](https://redirect.github.com/PyO3/pyo3/pull/5674)\n\n###
          [`v0.27.2`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0272---2025-11-30)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.1...v0.27.2)\n\n#####
          Changed\n\n- Disable subclassing `PyDict` on GraalPy (unsupported for now,
          may crash at runtime). [#&#8203;5653](https://redirect.github.com/PyO3/pyo3/pull/5653)\n\n#####
          Fixed\n\n- Fix crash when compiling on Rust 1.92+ with both debug assertions
          and optimizations enabled. [#&#8203;5638](https://redirect.github.com/PyO3/pyo3/pull/5638)\n-
          Fix FFI definition of `PyDictObject` on PyPy. [#&#8203;5653](https://redirect.github.com/PyO3/pyo3/pull/5653)\n\n###
          [`v0.27.1`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0271---2025-10-21)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.0...v0.27.1)\n\n#####
          Fixed\n\n- Fix `clippy:declare_interior_mutable_const` warning from `#[pyfunction]`.
          [#&#8203;5538](https://redirect.github.com/PyO3/pyo3/pull/5538)\n- Expose
          `pyo3::types::PySendResult` in public API. [#&#8203;5539](https://redirect.github.com/PyO3/pyo3/pull/5539)\n\n###
          [`v0.27.0`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0270---2025-10-19)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.26.0...v0.27.0)\n\n#####
          Packaging\n\n- Extend range of supported versions of `hashbrown` optional
          dependency to include version 0.16. [#&#8203;5428](https://redirect.github.com/PyO3/pyo3/pull/5428)\n-
          Bump optional `num-bigint` dependency minimum version to 0.4.4. [#&#8203;5471](https://redirect.github.com/PyO3/pyo3/pull/5471)\n-
          Test against Python 3.14 final release. [#&#8203;5499](https://redirect.github.com/PyO3/pyo3/pull/5499)\n-
          Drop support for PyPy 3.9 and 3.10. [#&#8203;5516](https://redirect.github.com/PyO3/pyo3/pull/5516)\n-
          Provide a better error message when building an outdated PyO3 for a too-new
          Python version. [#&#8203;5519](https://redirect.github.com/PyO3/pyo3/pull/5519)\n\n#####
          Added\n\n- Add `FromPyObjectOwned` as convenient trait bound for `FromPyObject`
          when the data is not borrowed from Python. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n-
          Add `Borrowed::extract`, same as `PyAnyMethods::extract`, but does not restrict
          the lifetime by deref. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n-
          `experimental-inspect`: basic support for `#[derive(IntoPyObject)]` (no
          struct fields support yet). [#&#8203;5365](https://redirect.github.com/PyO3/pyo3/pull/5365)\n-
          `experimental-inspect`: support `#[pyo3(get, set)]` and `#[pyclass(get_all,
          set_all)]`. [#&#8203;5370](https://redirect.github.com/PyO3/pyo3/pull/5370)\n-
          Add `PyTypeCheck::classinfo_object` that returns an object that can be used
          as parameter in `isinstance` or `issubclass`. [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n-
          Implement `PyTypeInfo` on `datetime.*` types even when the limited API is
          enabled. [#&#8203;5388](https://redirect.github.com/PyO3/pyo3/pull/5388)\n-
          Implement `PyTypeInfo` on `PyIterator`, `PyMapping` and `PySequence`. [#&#8203;5402](https://redirect.github.com/PyO3/pyo3/pull/5402)\n-
          Implement `PyTypeInfo` on `PyCode` when using the stable ABI. [#&#8203;5403](https://redirect.github.com/PyO3/pyo3/pull/5403)\n-
          Implement `PyTypeInfo` on `PyWeakrefReference` when using the stable ABI.
          [#&#8203;5404](https://redirect.github.com/PyO3/pyo3/pull/5404)\n- Add `pyo3::sync::RwLockExt`
          trait, analogous to `pyo3::sync::MutexExt` for readwrite locks. [#&#8203;5435](https://redirect.github.com/PyO3/pyo3/pull/5435)\n-
          Add `PyString::from_bytes`. [#&#8203;5437](https://redirect.github.com/PyO3/pyo3/pull/5437)\n-
          Implement `AsRef<[u8]>` for `PyBytes`. [#&#8203;5445](https://redirect.github.com/PyO3/pyo3/pull/5445)\n-
          Add `CastError` and `CastIntoError`. [#&#8203;5468](https://redirect.github.com/PyO3/pyo3/pull/5468)\n-
          Add `PyCapsuleMethods::pointer_checked` and `PyCapsuleMethods::is_valid_checked`.
          [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n- Add `Borrowed::cast`,
          `Borrowed::cast_exact` and `Borrowed::cast_unchecked`. [#&#8203;5475](https://redirect.github.com/PyO3/pyo3/pull/5475)\n-
          Add conversions for `jiff::civil::ISOWeekDate`. [#&#8203;5478](https://redirect.github.com/PyO3/pyo3/pull/5478)\n-
          Add conversions for `&Cstr`, `Cstring` and `Cow<Cstr>`. [#&#8203;5482](https://redirect.github.com/PyO3/pyo3/pull/5482)\n-
          add `#[pyclass(skip_from_py_object)]` option, to opt-out of the `FromPyObject:
          PyClass + Clone` blanket impl. [#&#8203;5488](https://redirect.github.com/PyO3/pyo3/pull/5488)\n-
          Add `PyErr::add_note`. [#&#8203;5489](https://redirect.github.com/PyO3/pyo3/pull/5489)\n-
          Add `FromPyObject` impl for `Cow<Path>` & `Cow<OsStr>`. [#&#8203;5497](https://redirect.github.com/PyO3/pyo3/pull/5497)\n-
          Add `#[pyclass(from_py_object)]` pyclass option, to opt-in to the extraction
          of pyclasses by value (requires `Clone`). [#&#8203;5506](https://redirect.github.com/PyO3/pyo3/pull/5506)\n\n#####
          Changed\n\n- Rework `FromPyObject` trait for flexibility and performance:
          [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n  - Add
          a second lifetime to `FromPyObject`, to allow borrowing data from Python
          objects (e.g. `&str` from Python `str`).\n  - Replace `extract_bound` with
          `extract`, which takes `Borrowed<'a, 'py, PyAny>`.\n- Optimize `FromPyObject`
          implementations for `Vec<u8>` and `[u8; N]` from `bytes` and `bytearray`.
          [#&#8203;5244](https://redirect.github.com/PyO3/pyo3/pull/5244)\n- Deprecate
          `#[pyfn]` attribute. [#&#8203;5384](https://redirect.github.com/PyO3/pyo3/pull/5384)\n-
          Fetch type name dynamically on cast errors instead of using `PyTypeCheck::NAME`.
          [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n- Deprecate
          `PyTypeCheck::NAME` in favour of `PyTypeCheck::classinfo_object` which provides
          the type information at runtime. [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n-
          `PyClassGuard(Mut)` and `PyRef(Mut)` extraction now returns an opaque Rust
          error [#&#8203;5413](https://redirect.github.com/PyO3/pyo3/pull/5413)\n-
          Fetch type name dynamically when exporting types implementing `PyTypeInfo`
          with `#[pymodule_use]`. [#&#8203;5414](https://redirect.github.com/PyO3/pyo3/pull/5414)\n-
          Improve `Debug` representation of `PyBuffer<T>`. [#&#8203;5442](https://redirect.github.com/PyO3/pyo3/pull/5442)\n-
          `experimental-inspect`: change the way introspection data is emitted in
          the binaries to avoid a pointer indirection and simplify parsing. [#&#8203;5450](https://redirect.github.com/PyO3/pyo3/pull/5450)\n-
          Optimize `Py<T>::drop` for the case when attached to the Python interpreter.
          [#&#8203;5454](https://redirect.github.com/PyO3/pyo3/pull/5454)\n- Replace
          `DowncastError` and `DowncastIntoError` with `CastError` and `CastIntoError`.
          [#&#8203;5468](https://redirect.github.com/PyO3/pyo3/pull/5468)\n- Enable
          fast-path for 128-bit integer conversions on `GraalPy`. [#&#8203;5471](https://redirect.github.com/PyO3/pyo3/pull/5471)\n-
          Deprecate `PyAnyMethods::downcast` functions in favour of `Bound::cast`
          functions. [#&#8203;5472](https://redirect.github.com/PyO3/pyo3/pull/5472)\n-
          Make `PyTypeCheck` an `unsafe trait`. [#&#8203;5473](https://redirect.github.com/PyO3/pyo3/pull/5473)\n-
          Deprecate unchecked `PyCapsuleMethods`: `pointer()`, `reference()`, and
          `is_valid()`. [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n-
          Reduce lifetime of return value in `PyCapsuleMethods::reference`. [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n-
          `PyCapsuleMethods::name` now returns `CapsuleName` wrapper instead of `&CStr`.
          [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n- Deprecate
          `import_exception_bound` in favour of `import_exception`. [#&#8203;5480](https://redirect.github.com/PyO3/pyo3/pull/5480)\n-
          `PyList::get_item_unchecked`, `PyTuple::get_item_unchecked`, and `PyTuple::get_borrowed_item_unchecked`
          no longer check for null values at the provided index. [#&#8203;5494](https://redirect.github.com/PyO3/pyo3/pull/5494)\n-
          Allow converting naive datetime into chrono `DateTime<Local>`. [#&#8203;5507](https://redirect.github.com/PyO3/pyo3/pull/5507)\n\n#####
          Removed\n\n- Removed `FromPyObjectBound` trait. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n\n#####
          Fixed\n\n- Fix compilation failure on `wasm32-wasip2`. [#&#8203;5368](https://redirect.github.com/PyO3/pyo3/pull/5368)\n-
          Fix `OsStr` conversion for non-utf8 strings on Windows. [#&#8203;5444](https://redirect.github.com/PyO3/pyo3/pull/5444)\n-
          Fix issue with `cargo vendor` caused by gitignored build artifact `emscripten/pybuilddir.txt`.
          [#&#8203;5456](https://redirect.github.com/PyO3/pyo3/pull/5456)\n- Stop
          leaking `PyMethodDef` instances inside `#[pyfunction]` macro generated code.
          [#&#8203;5459](https://redirect.github.com/PyO3/pyo3/pull/5459)\n- Don't
          export definition of FFI struct `PyObjectObFlagsAndRefcnt` on 32-bit Python
          3.14 (doesn't exist). [#&#8203;5499](https://redirect.github.com/PyO3/pyo3/pull/5499)\n-
          Fix failure to build for `abi3` interpreters on Windows using maturin's
          built-in sysconfig in combination with the `generate-import-lib` feature.
          [#&#8203;5503](https://redirect.github.com/PyO3/pyo3/pull/5503)\n- Fix FFI
          definitions `PyModule_ExecDef` and `PyModule_FromDefAndSpec2` on PyPy. [#&#8203;5529](https://redirect.github.com/PyO3/pyo3/pull/5529)\n\n</details>\n\n<details>\n<summary>PyO3/pyo3-async-runtimes
          (pyo3-async-runtimes)</summary>\n\n### [`v0.28.0`](https://redirect.github.com/PyO3/pyo3-async-runtimes/blob/HEAD/CHANGELOG.md#0280---2026-02-03)\n\n[Compare
          Source](https://redirect.github.com/PyO3/pyo3-async-runtimes/compare/v0.27.0...v0.28.0)\n\n-
          Bump to pyo3 0.28. [#&#8203;76](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/76)\n-
          Check for awaitable instead of coroutine in stream glue [#&#8203;73](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/73)\n-
          Bump MSRV to 1.83.\n- Fix handling of full buffer in `into_stream` functions\n\n###
          [`v0.27.0`](https://redirect.github.com/PyO3/pyo3-async-runtimes/blob/HEAD/CHANGELOG.md#0270---2025-10-20)\n\n[Compare
          Source](https://redirect.github.com/PyO3/pyo3-async-runtimes/compare/v0.26.0...v0.27.0)\n\n-
          Avoid attaching to the runtime when cloning TaskLocals by using std::sync::Arc.
          [#&#8203;62](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/62)\n-
          **Breaking**: Finalize the future without holding GIL inside async-std/tokio
          runtime.\n  Trait `Runtime` now requires `spawn_blocking` function,\n  `future_into_py`
          functions now require future return type to be `Send`.\n  [#&#8203;60](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/60)\n-
          Change pyo3 `downcast` calls to `cast` calls [#&#8203;65](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/65)\n-
          Use `pyo3::intern!` for method calls and `getattr` calls [#&#8203;66](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/66)\n-
          Fix missing LICENSE file in macros crate by [@&#8203;musicinmybrain](https://redirect.github.com/musicinmybrain)
          in [#&#8203;63](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/63)\n-
          Bump to pyo3 0.27. [#&#8203;68](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/68)\n\n</details>\n\n<details>\n<summary>vorner/pyo3-log
          (pyo3-log)</summary>\n\n### [`v0.13.2`](https://redirect.github.com/vorner/pyo3-log/blob/HEAD/CHANGELOG.md#0132)\n\n[Compare
          Source](https://redirect.github.com/vorner/pyo3-log/compare/v0.13.1...v0.13.2)\n\n-
          Support for pyo3 0.27 ([#&#8203;72](https://redirect.github.com/vorner/pyo3-log/issues/72)).\n\n</details>\n\n<details>\n<summary>davidhewitt/pythonize
          (pythonize)</summary>\n\n### [`v0.27.0`](https://redirect.github.com/davidhewitt/pythonize/blob/HEAD/CHANGELOG.md#0270---2025-11-07)\n\n[Compare
          Source](https://redirect.github.com/davidhewitt/pythonize/compare/v0.26.0...v0.27.0)\n\n-
          Update to PyO3 0.27\n\n</details>\n\n---\n\n### Configuration\n\n\U0001F4C5
          **Schedule**: Branch creation - At any time (no schedule defined), Automerge
          - 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 is behind base branch, or you tick the rebase/retry
          checkbox.\n\n\U0001F47B **Immortal**: This PR will be recreated if closed
          unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions)
          if that's undesired.\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/vexxhost/magnum-cluster-api).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNDMuMSIsInVwZGF0ZWRJblZlciI6IjQzLjguNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->\n"
        change_url: https://github.com/vexxhost/magnum-cluster-api/pull/837
        commit_id: c6ab00092f19904b8889c7ec71d5d6f44b5d98ae
        patchset: c6ab00092f19904b8889c7ec71d5d6f44b5d98ae
        project:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/magnum-cluster-api
          name: vexxhost/magnum-cluster-api
          short_name: magnum-cluster-api
        src_dir: src/github.com/vexxhost/magnum-cluster-api
        topic: null
      buildset: 4c909505282e4392955cb639518b09f0
      buildset_refs:
      - branch: main
        change: '837'
        change_message: "fix(deps): update pyo3\n\nThis PR contains the following
          updates:\n\n| Package | Type | Update | Change |\n|---|---|---|---|\n| [pyo3](https://redirect.github.com/pyo3/pyo3)
          | dependencies | minor | `0.26.0` \u2192 `0.28.0` |\n| [pyo3-async-runtimes](https://redirect.github.com/PyO3/pyo3-async-runtimes)
          | dependencies | minor | `0.26.0` \u2192 `0.28.0` |\n| [pyo3-log](https://redirect.github.com/vorner/pyo3-log)
          | dependencies | patch | `0.13.1` \u2192 `0.13.2` |\n| [pythonize](https://redirect.github.com/davidhewitt/pythonize)
          | dependencies | minor | `0.26.0` \u2192 `0.27.0` |\n\n---\n\n### Release
          Notes\n\n<details>\n<summary>pyo3/pyo3 (pyo3)</summary>\n\n### [`v0.28.1`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0281---2026-02-14)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.28.0...v0.28.1)\n\n#####
          Fixed\n\n- Fix `*args` / `**kwargs` support in` experimental-async` feature
          (regressed in 0.28.0). [#&#8203;5771](https://redirect.github.com/PyO3/pyo3/pull/5771)\n-
          Fix `clippy::declare_interior_mutable_const` warning inside `#[pyclass]`
          generated code on enums. [#&#8203;5772](https://redirect.github.com/PyO3/pyo3/pull/5772)\n-
          Fix `ambiguous_associated_items` compilation error when deriving `FromPyObject`
          or using `#[pyclass(from_py_object)]` macro on enums with `Error` variant.
          [#&#8203;5784](https://redirect.github.com/PyO3/pyo3/pull/5784)\n- Fix `__qualname__`
          for complex `#[pyclass]` enum variants to include the enum name. [#&#8203;5796](https://redirect.github.com/PyO3/pyo3/pull/5796)\n\n###
          [`v0.28.0`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0280---2026-02-01)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.2...v0.28.0)\n\n#####
          Packaging\n\n- Bump MSRV to Rust 1.83. [#&#8203;5531](https://redirect.github.com/PyO3/pyo3/pull/5531)\n-
          Bump minimum supported `quote` version to 1.0.37. [#&#8203;5531](https://redirect.github.com/PyO3/pyo3/pull/5531)\n-
          Bump supported GraalPy version to 25.0. [#&#8203;5542](https://redirect.github.com/PyO3/pyo3/pull/5542)\n-
          Drop `memoffset` dependency. [#&#8203;5545](https://redirect.github.com/PyO3/pyo3/pull/5545)\n-
          Support for free-threaded Python is now opt-out rather than opt-in. [#&#8203;5564](https://redirect.github.com/PyO3/pyo3/pull/5564)\n-
          Bump `target-lexicon` dependency to 0.13.3. [#&#8203;5571](https://redirect.github.com/PyO3/pyo3/pull/5571)\n-
          Drop `indoc` and `unindent` dependencies. [#&#8203;5608](https://redirect.github.com/PyO3/pyo3/pull/5608)\n\n#####
          Added\n\n- Add `__init__` support in `#[pymethods]`. [#&#8203;4951](https://redirect.github.com/PyO3/pyo3/pull/4951)\n-
          Expose `PySuper` on PyPy, GraalPy and ABI3 [#&#8203;4951](https://redirect.github.com/PyO3/pyo3/pull/4951)\n-
          Add `PyString::from_fmt` and `py_format!` macro. [#&#8203;5199](https://redirect.github.com/PyO3/pyo3/pull/5199)\n-
          Add `#[pyclass(new = \"from_fields\")]` option. [#&#8203;5421](https://redirect.github.com/PyO3/pyo3/pull/5421)\n-
          Add `pyo3::buffer::PyUntypedBuffer`, a type-erased form of `PyBuffer<T>`.
          [#&#8203;5458](https://redirect.github.com/PyO3/pyo3/pull/5458)\n- Add `PyBytes::new_with_writer`
          [#&#8203;5517](https://redirect.github.com/PyO3/pyo3/pull/5517)\n- Add `PyClass::NAME`.
          [#&#8203;5579](https://redirect.github.com/PyO3/pyo3/pull/5579)\n- Add `pyo3_build_config::add_libpython_rpath_link_args`.
          [#&#8203;5624](https://redirect.github.com/PyO3/pyo3/pull/5624)\n- Add `PyBackedStr::clone_ref`
          and `PyBackedBytes::clone_ref` methods. [#&#8203;5654](https://redirect.github.com/PyO3/pyo3/pull/5654)\n-
          Add `PyCapsule::new_with_pointer` and `PyCapsule::new_with_pointer_and_destructor`
          for creating capsules with raw pointers. [#&#8203;5689](https://redirect.github.com/PyO3/pyo3/pull/5689)\n-
          Add `#[deleter]` attribute to implement property deleters in `#[methods]`.
          [#&#8203;5699](https://redirect.github.com/PyO3/pyo3/pull/5699)\n- Add `IntoPyObject`
          and `FromPyObject` implementations for `uuid::NonNilUuid`. [#&#8203;5707](https://redirect.github.com/PyO3/pyo3/pull/5707)\n-
          Add `PyBackedStr::as_str` and `PyBackedStr::as_py_str` methods. [#&#8203;5723](https://redirect.github.com/PyO3/pyo3/pull/5723)\n-
          Add support for subclassing native types (`PyDict`, exceptions, ...) when
          building for abi3 on Python 3.12+. [#&#8203;5733](https://redirect.github.com/PyO3/pyo3/pull/5733)\n-
          Add support for subclassing `PyList` when building for Python 3.12+. [#&#8203;5734](https://redirect.github.com/PyO3/pyo3/pull/5734)\n-
          FFI definitions:\n  - Add FFI definitions `PyEval_GetFrameBuiltins`, `PyEval_GetFrameGlobals`
          and `PyEval_GetFrameLocals` on Python 3.13 and up. [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
          \ - Add FFI definitions `PyObject_New`, `PyObject_NewVar`, `PyObject_GC_Resize`,
          `PyObject_GC_New`, and `PyObject_GC_NewVar`. [#&#8203;5591](https://redirect.github.com/PyO3/pyo3/pull/5591)\n
          \ - Added FFI definitions and an unsafe Rust API wrapping `Py_BEGIN_CRITICAL_SECTION_MUTEX`
          and `Py_BEGIN_CRITICAL_SECTION_MUTEX2`. [#&#8203;5642](https://redirect.github.com/PyO3/pyo3/pull/5642)\n
          \ - Add FFI definition `PyDict_GetItemStringRef` on Python 3.13 and up.
          [#&#8203;5659](https://redirect.github.com/PyO3/pyo3/pull/5659)\n  - Add
          FFI definition `PyIter_NextItem` on Python 3.14 and up, and `compat::PyIter_NextItem`
          for older versions. [#&#8203;5661](https://redirect.github.com/PyO3/pyo3/pull/5661)\n
          \ - Add FFI definitions `PyThreadState_GetInterpreter` and `PyThreadState_GetID`
          on Python 3.9+, `PyThreadState_EnterTracing` and `PyThreadState_LeaveTracing`
          on Python 3.11+, `PyThreadState_GetUnchecked` on Python 3.13+, and `compat::PyThreadState_GetUnchecked`.
          [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n  - Add
          FFI definitions `PyImport_ImportModuleAttr` and `PyImport_ImportModuleAttrString`
          on Python 3.14+. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n
          \ - Add FFI definitions for the `PyABIInfo` and `PyModExport` APIs available
          in Python 3.15. [#&#8203;5746](https://redirect.github.com/PyO3/pyo3/pull/5746)\n-
          `experimental-inspect`:\n  - Emit base classes. [#&#8203;5331](https://redirect.github.com/PyO3/pyo3/pull/5331)\n
          \ - Emit `@typing.final` on final classes. [#&#8203;5552](https://redirect.github.com/PyO3/pyo3/pull/5552)\n
          \ - Generate nested classes for complex enums. [#&#8203;5708](https://redirect.github.com/PyO3/pyo3/pull/5708)\n
          \ - Emit `async` keyword for async functions. [#&#8203;5731](https://redirect.github.com/PyO3/pyo3/pull/5731)\n\n#####
          Changed\n\n- Call `sys.unraisablehook` instead of `PyErr_Print` if panicking
          on null FFI pointer in `Bound`, `Borrowed` and `Py` constructors. [#&#8203;5496](https://redirect.github.com/PyO3/pyo3/pull/5496)\n-
          Use PEP-489 multi-phase initialization for `#[pymodule]`. [#&#8203;5525](https://redirect.github.com/PyO3/pyo3/pull/5525)\n-
          Deprecate implicit by-value implementation of `FromPyObject` for `#[pyclass]`.
          [#&#8203;5550](https://redirect.github.com/PyO3/pyo3/pull/5550)\n- Deprecate
          `PyTypeInfo::NAME` and `PyTypeInfo::MODULE`. [#&#8203;5579](https://redirect.github.com/PyO3/pyo3/pull/5579)\n-
          Deprecate `Py<T>::from_{owned,borrowed}[or_{err,opt}]` constructors from
          raw pointer. [#&#8203;5585](https://redirect.github.com/PyO3/pyo3/pull/5585)\n-
          Deprecate FFI definitions `PyEval_AcquireLock` and `PyEval_ReleaseLock`.
          [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n- Relax
          `'py: 'a` bound in `Py::extract`. [#&#8203;5594](https://redirect.github.com/PyO3/pyo3/pull/5594)\n-
          Add a `T: PyTypeCheck` bound to the `IntoPyObject` implementations on `Bound<T>`,
          `Borrowed<T>` and `Py<T>`. [#&#8203;5640](https://redirect.github.com/PyO3/pyo3/pull/5640)\n-
          The `with_critical_section` and `with_critical_section2` functions are moved
          to `pyo3::sync::critical_section`. [#&#8203;5642](https://redirect.github.com/PyO3/pyo3/pull/5642)\n-
          Use `PyIter_NextItem` in `PyIterator::next` implementation. [#&#8203;5661](https://redirect.github.com/PyO3/pyo3/pull/5661)\n-
          `IntoPyObject` for simple enums now uses a singleton value, allowing identity
          (python `is`) comparisons. [#&#8203;5665](https://redirect.github.com/PyO3/pyo3/pull/5665)\n-
          Allow any `Sequence[int]` in `FromPyObject` on `Cow<[u8]>` and change the
          error type to `PyErr`. [#&#8203;5667](https://redirect.github.com/PyO3/pyo3/pull/5667)\n-
          `async` pymethods now borrow `self` only for the duration of awaiting the
          future, not the entire method call. [#&#8203;5684](https://redirect.github.com/PyO3/pyo3/pull/5684)\n-
          Change `CastError` formatted message to directly describe the \"is not an
          instance of\" failure condition. [#&#8203;5693](https://redirect.github.com/PyO3/pyo3/pull/5693)\n-
          Add `#[inline]` hints to many methods on `PyBackedStr`. [#&#8203;5723](https://redirect.github.com/PyO3/pyo3/pull/5723)\n-
          Remove redundant internal counters from `BoundSetIterator` and `BoundFrozenSetIterator`.
          [#&#8203;5725](https://redirect.github.com/PyO3/pyo3/pull/5725)\n- Implement
          `PyIterator::size_hint` on abi3 builds (previously was only on unlimited
          API builds). [#&#8203;5727](https://redirect.github.com/PyO3/pyo3/pull/5727)\n-
          Deprecate FFI definition `PyImport_ImportModuleNoBlock` (deprecated in Python
          3.13). [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n-
          `#[new]` can now return arbitrary Python objects. [#&#8203;5739](https://redirect.github.com/PyO3/pyo3/pull/5739)\n-
          `experimental-inspect`:\n  - Introduce `TypeHint` and make use of it to
          encode type hint annotations. [#&#8203;5438](https://redirect.github.com/PyO3/pyo3/pull/5438)\n
          \ - Rename `PyType{Info,Check}::TYPE_INFO` into `PyType{Info,Check}::TYPE_HINT`.
          [#&#8203;5438](https://redirect.github.com/PyO3/pyo3/pull/5438) [#&#8203;5619](https://redirect.github.com/PyO3/pyo3/pull/5619)
          [#&#8203;5641](https://redirect.github.com/PyO3/pyo3/pull/5641)\n  - Fill
          annotations on function arguments and return values for all types supported
          natively by PyO3. [#&#8203;5634](https://redirect.github.com/PyO3/pyo3/pull/5634)
          [#&#8203;5637](https://redirect.github.com/PyO3/pyo3/pull/5637) [#&#8203;5639](https://redirect.github.com/PyO3/pyo3/pull/5639)\n
          \ - Use `_typeshed.Incomplete` instead of `typing.Any` as default type hint,
          to make it easier to spot incomplete trait implementations. [#&#8203;5744](https://redirect.github.com/PyO3/pyo3/pull/5744)\n
          \ - Use general Python expression syntax for type hints. [#&#8203;5671](https://redirect.github.com/PyO3/pyo3/pull/5671)\n\n#####
          Removed\n\n- Remove all functionality deprecated in PyO3 0.25 and 0.26.
          [#&#8203;5740](https://redirect.github.com/PyO3/pyo3/pull/5740)\n- FFI definitions:\n
          \ - Remove FFI definition `PyEval_GetCallStats` (removed from CPython in
          Python 3.7). [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
          \ - Remove FFI definitions `PyEval_AcquireLock` and `PyEval_ReleaseLock`
          on Python 3.13 and up. [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
          \ - Remove private FFI definitions `_PyObject_New`, `_PyObject_NewVar`,
          `_PyObject_GC_Resize`, `_PyObject_GC_New`, and `_PyObject_GC_NewVar`. [#&#8203;5591](https://redirect.github.com/PyO3/pyo3/pull/5591)\n
          \ - Remove private FFI definitions `_PyDict_SetItem_KnownHash`, `_PyDict_Next`,
          `_PyDict_NewPresized`, `_PyDict_Contains_KnownHash`, and `_PyDict_Contains`.
          [#&#8203;5659](https://redirect.github.com/PyO3/pyo3/pull/5659)\n  - Remove
          private FFI definitions `_PyFrameEvalFunction`, `_PyInterpreterState_GetEvalFrameFunc`
          and `_PyInterpreterState_SetEvalFrameFunc`. [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n
          \ - Remove private FFI definitions `_PyImport_IsInitialized`, `_PyImport_SetModule`,
          `_PyImport_SetModuleString`, `_PyImport_AcquireLock`, `_PyImport_ReleaseLock`,
          `_PyImport_FindBuiltin`, `_PyImport_FindExtensionObject`, `_PyImport_FixupBuiltin`,
          and `_PyImport_FixupExtensionObject`. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n\n#####
          Fixed\n\n- Fix `PyModuleMethods::add_submodule()` to use the last segment
          of the submodule name as the attribute name on the parent module instead
          of using the full name. [#&#8203;5375](https://redirect.github.com/PyO3/pyo3/pull/5375)\n-
          Link with libpython for Cygwin extension modules. [#&#8203;5571](https://redirect.github.com/PyO3/pyo3/pull/5571)\n-
          Link against the limited API DLL for Cygwin when abi3 is used. [#&#8203;5574](https://redirect.github.com/PyO3/pyo3/pull/5574)\n-
          Handle errors in `PyIterator` when calling `size_hint` [#&#8203;5604](https://redirect.github.com/PyO3/pyo3/pull/5604)\n-
          Link with libpython for iOS extension modules. [#&#8203;5605](https://redirect.github.com/PyO3/pyo3/pull/5605)\n-
          Correct `IntoPyObject` output type of `PyBackedStr` to be `PyString`, not
          `PyAny`. [#&#8203;5655](https://redirect.github.com/PyO3/pyo3/pull/5655)\n-
          Fix `async` functions to return `None` rather than empty tuple `()`. [#&#8203;5685](https://redirect.github.com/PyO3/pyo3/pull/5685)\n-
          Fix compile error when using references to `#[pyclass]` types (e.g. `&MyClass`)
          as arguments to async `#[pyfunction]`s. [#&#8203;5725](https://redirect.github.com/PyO3/pyo3/pull/5725)\n-
          FFI definitions:\n  - Fix FFI definition `PyMemberDescrObject.d_member`
          to use `PyMemberDef` for Python 3.11+ (was incorrectly `PyGetSetDef`). [#&#8203;5647](https://redirect.github.com/PyO3/pyo3/pull/5647)\n
          \ - Mark FFI definition `PyThreadState_GetFrame` available with abi3 in
          3.10+. [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n
          \ - Fix FFI definition `PyImport_GetModule` on PyPy. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n-
          `experimental-inspect`:\n  - fix `__new__` return type to be the built object
          type and not `None`. [#&#8203;5555](https://redirect.github.com/PyO3/pyo3/pull/5555)\n
          \ - fix imports of decorators. [#&#8203;5618](https://redirect.github.com/PyO3/pyo3/pull/5618)\n
          \ - fix the return type annotation of `PyResult<()>` (must be `None` and
          not `tuple`) [#&#8203;5674](https://redirect.github.com/PyO3/pyo3/pull/5674)\n\n###
          [`v0.27.2`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0272---2025-11-30)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.1...v0.27.2)\n\n#####
          Changed\n\n- Disable subclassing `PyDict` on GraalPy (unsupported for now,
          may crash at runtime). [#&#8203;5653](https://redirect.github.com/PyO3/pyo3/pull/5653)\n\n#####
          Fixed\n\n- Fix crash when compiling on Rust 1.92+ with both debug assertions
          and optimizations enabled. [#&#8203;5638](https://redirect.github.com/PyO3/pyo3/pull/5638)\n-
          Fix FFI definition of `PyDictObject` on PyPy. [#&#8203;5653](https://redirect.github.com/PyO3/pyo3/pull/5653)\n\n###
          [`v0.27.1`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0271---2025-10-21)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.0...v0.27.1)\n\n#####
          Fixed\n\n- Fix `clippy:declare_interior_mutable_const` warning from `#[pyfunction]`.
          [#&#8203;5538](https://redirect.github.com/PyO3/pyo3/pull/5538)\n- Expose
          `pyo3::types::PySendResult` in public API. [#&#8203;5539](https://redirect.github.com/PyO3/pyo3/pull/5539)\n\n###
          [`v0.27.0`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0270---2025-10-19)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.26.0...v0.27.0)\n\n#####
          Packaging\n\n- Extend range of supported versions of `hashbrown` optional
          dependency to include version 0.16. [#&#8203;5428](https://redirect.github.com/PyO3/pyo3/pull/5428)\n-
          Bump optional `num-bigint` dependency minimum version to 0.4.4. [#&#8203;5471](https://redirect.github.com/PyO3/pyo3/pull/5471)\n-
          Test against Python 3.14 final release. [#&#8203;5499](https://redirect.github.com/PyO3/pyo3/pull/5499)\n-
          Drop support for PyPy 3.9 and 3.10. [#&#8203;5516](https://redirect.github.com/PyO3/pyo3/pull/5516)\n-
          Provide a better error message when building an outdated PyO3 for a too-new
          Python version. [#&#8203;5519](https://redirect.github.com/PyO3/pyo3/pull/5519)\n\n#####
          Added\n\n- Add `FromPyObjectOwned` as convenient trait bound for `FromPyObject`
          when the data is not borrowed from Python. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n-
          Add `Borrowed::extract`, same as `PyAnyMethods::extract`, but does not restrict
          the lifetime by deref. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n-
          `experimental-inspect`: basic support for `#[derive(IntoPyObject)]` (no
          struct fields support yet). [#&#8203;5365](https://redirect.github.com/PyO3/pyo3/pull/5365)\n-
          `experimental-inspect`: support `#[pyo3(get, set)]` and `#[pyclass(get_all,
          set_all)]`. [#&#8203;5370](https://redirect.github.com/PyO3/pyo3/pull/5370)\n-
          Add `PyTypeCheck::classinfo_object` that returns an object that can be used
          as parameter in `isinstance` or `issubclass`. [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n-
          Implement `PyTypeInfo` on `datetime.*` types even when the limited API is
          enabled. [#&#8203;5388](https://redirect.github.com/PyO3/pyo3/pull/5388)\n-
          Implement `PyTypeInfo` on `PyIterator`, `PyMapping` and `PySequence`. [#&#8203;5402](https://redirect.github.com/PyO3/pyo3/pull/5402)\n-
          Implement `PyTypeInfo` on `PyCode` when using the stable ABI. [#&#8203;5403](https://redirect.github.com/PyO3/pyo3/pull/5403)\n-
          Implement `PyTypeInfo` on `PyWeakrefReference` when using the stable ABI.
          [#&#8203;5404](https://redirect.github.com/PyO3/pyo3/pull/5404)\n- Add `pyo3::sync::RwLockExt`
          trait, analogous to `pyo3::sync::MutexExt` for readwrite locks. [#&#8203;5435](https://redirect.github.com/PyO3/pyo3/pull/5435)\n-
          Add `PyString::from_bytes`. [#&#8203;5437](https://redirect.github.com/PyO3/pyo3/pull/5437)\n-
          Implement `AsRef<[u8]>` for `PyBytes`. [#&#8203;5445](https://redirect.github.com/PyO3/pyo3/pull/5445)\n-
          Add `CastError` and `CastIntoError`. [#&#8203;5468](https://redirect.github.com/PyO3/pyo3/pull/5468)\n-
          Add `PyCapsuleMethods::pointer_checked` and `PyCapsuleMethods::is_valid_checked`.
          [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n- Add `Borrowed::cast`,
          `Borrowed::cast_exact` and `Borrowed::cast_unchecked`. [#&#8203;5475](https://redirect.github.com/PyO3/pyo3/pull/5475)\n-
          Add conversions for `jiff::civil::ISOWeekDate`. [#&#8203;5478](https://redirect.github.com/PyO3/pyo3/pull/5478)\n-
          Add conversions for `&Cstr`, `Cstring` and `Cow<Cstr>`. [#&#8203;5482](https://redirect.github.com/PyO3/pyo3/pull/5482)\n-
          add `#[pyclass(skip_from_py_object)]` option, to opt-out of the `FromPyObject:
          PyClass + Clone` blanket impl. [#&#8203;5488](https://redirect.github.com/PyO3/pyo3/pull/5488)\n-
          Add `PyErr::add_note`. [#&#8203;5489](https://redirect.github.com/PyO3/pyo3/pull/5489)\n-
          Add `FromPyObject` impl for `Cow<Path>` & `Cow<OsStr>`. [#&#8203;5497](https://redirect.github.com/PyO3/pyo3/pull/5497)\n-
          Add `#[pyclass(from_py_object)]` pyclass option, to opt-in to the extraction
          of pyclasses by value (requires `Clone`). [#&#8203;5506](https://redirect.github.com/PyO3/pyo3/pull/5506)\n\n#####
          Changed\n\n- Rework `FromPyObject` trait for flexibility and performance:
          [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n  - Add
          a second lifetime to `FromPyObject`, to allow borrowing data from Python
          objects (e.g. `&str` from Python `str`).\n  - Replace `extract_bound` with
          `extract`, which takes `Borrowed<'a, 'py, PyAny>`.\n- Optimize `FromPyObject`
          implementations for `Vec<u8>` and `[u8; N]` from `bytes` and `bytearray`.
          [#&#8203;5244](https://redirect.github.com/PyO3/pyo3/pull/5244)\n- Deprecate
          `#[pyfn]` attribute. [#&#8203;5384](https://redirect.github.com/PyO3/pyo3/pull/5384)\n-
          Fetch type name dynamically on cast errors instead of using `PyTypeCheck::NAME`.
          [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n- Deprecate
          `PyTypeCheck::NAME` in favour of `PyTypeCheck::classinfo_object` which provides
          the type information at runtime. [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n-
          `PyClassGuard(Mut)` and `PyRef(Mut)` extraction now returns an opaque Rust
          error [#&#8203;5413](https://redirect.github.com/PyO3/pyo3/pull/5413)\n-
          Fetch type name dynamically when exporting types implementing `PyTypeInfo`
          with `#[pymodule_use]`. [#&#8203;5414](https://redirect.github.com/PyO3/pyo3/pull/5414)\n-
          Improve `Debug` representation of `PyBuffer<T>`. [#&#8203;5442](https://redirect.github.com/PyO3/pyo3/pull/5442)\n-
          `experimental-inspect`: change the way introspection data is emitted in
          the binaries to avoid a pointer indirection and simplify parsing. [#&#8203;5450](https://redirect.github.com/PyO3/pyo3/pull/5450)\n-
          Optimize `Py<T>::drop` for the case when attached to the Python interpreter.
          [#&#8203;5454](https://redirect.github.com/PyO3/pyo3/pull/5454)\n- Replace
          `DowncastError` and `DowncastIntoError` with `CastError` and `CastIntoError`.
          [#&#8203;5468](https://redirect.github.com/PyO3/pyo3/pull/5468)\n- Enable
          fast-path for 128-bit integer conversions on `GraalPy`. [#&#8203;5471](https://redirect.github.com/PyO3/pyo3/pull/5471)\n-
          Deprecate `PyAnyMethods::downcast` functions in favour of `Bound::cast`
          functions. [#&#8203;5472](https://redirect.github.com/PyO3/pyo3/pull/5472)\n-
          Make `PyTypeCheck` an `unsafe trait`. [#&#8203;5473](https://redirect.github.com/PyO3/pyo3/pull/5473)\n-
          Deprecate unchecked `PyCapsuleMethods`: `pointer()`, `reference()`, and
          `is_valid()`. [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n-
          Reduce lifetime of return value in `PyCapsuleMethods::reference`. [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n-
          `PyCapsuleMethods::name` now returns `CapsuleName` wrapper instead of `&CStr`.
          [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n- Deprecate
          `import_exception_bound` in favour of `import_exception`. [#&#8203;5480](https://redirect.github.com/PyO3/pyo3/pull/5480)\n-
          `PyList::get_item_unchecked`, `PyTuple::get_item_unchecked`, and `PyTuple::get_borrowed_item_unchecked`
          no longer check for null values at the provided index. [#&#8203;5494](https://redirect.github.com/PyO3/pyo3/pull/5494)\n-
          Allow converting naive datetime into chrono `DateTime<Local>`. [#&#8203;5507](https://redirect.github.com/PyO3/pyo3/pull/5507)\n\n#####
          Removed\n\n- Removed `FromPyObjectBound` trait. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n\n#####
          Fixed\n\n- Fix compilation failure on `wasm32-wasip2`. [#&#8203;5368](https://redirect.github.com/PyO3/pyo3/pull/5368)\n-
          Fix `OsStr` conversion for non-utf8 strings on Windows. [#&#8203;5444](https://redirect.github.com/PyO3/pyo3/pull/5444)\n-
          Fix issue with `cargo vendor` caused by gitignored build artifact `emscripten/pybuilddir.txt`.
          [#&#8203;5456](https://redirect.github.com/PyO3/pyo3/pull/5456)\n- Stop
          leaking `PyMethodDef` instances inside `#[pyfunction]` macro generated code.
          [#&#8203;5459](https://redirect.github.com/PyO3/pyo3/pull/5459)\n- Don't
          export definition of FFI struct `PyObjectObFlagsAndRefcnt` on 32-bit Python
          3.14 (doesn't exist). [#&#8203;5499](https://redirect.github.com/PyO3/pyo3/pull/5499)\n-
          Fix failure to build for `abi3` interpreters on Windows using maturin's
          built-in sysconfig in combination with the `generate-import-lib` feature.
          [#&#8203;5503](https://redirect.github.com/PyO3/pyo3/pull/5503)\n- Fix FFI
          definitions `PyModule_ExecDef` and `PyModule_FromDefAndSpec2` on PyPy. [#&#8203;5529](https://redirect.github.com/PyO3/pyo3/pull/5529)\n\n</details>\n\n<details>\n<summary>PyO3/pyo3-async-runtimes
          (pyo3-async-runtimes)</summary>\n\n### [`v0.28.0`](https://redirect.github.com/PyO3/pyo3-async-runtimes/blob/HEAD/CHANGELOG.md#0280---2026-02-03)\n\n[Compare
          Source](https://redirect.github.com/PyO3/pyo3-async-runtimes/compare/v0.27.0...v0.28.0)\n\n-
          Bump to pyo3 0.28. [#&#8203;76](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/76)\n-
          Check for awaitable instead of coroutine in stream glue [#&#8203;73](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/73)\n-
          Bump MSRV to 1.83.\n- Fix handling of full buffer in `into_stream` functions\n\n###
          [`v0.27.0`](https://redirect.github.com/PyO3/pyo3-async-runtimes/blob/HEAD/CHANGELOG.md#0270---2025-10-20)\n\n[Compare
          Source](https://redirect.github.com/PyO3/pyo3-async-runtimes/compare/v0.26.0...v0.27.0)\n\n-
          Avoid attaching to the runtime when cloning TaskLocals by using std::sync::Arc.
          [#&#8203;62](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/62)\n-
          **Breaking**: Finalize the future without holding GIL inside async-std/tokio
          runtime.\n  Trait `Runtime` now requires `spawn_blocking` function,\n  `future_into_py`
          functions now require future return type to be `Send`.\n  [#&#8203;60](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/60)\n-
          Change pyo3 `downcast` calls to `cast` calls [#&#8203;65](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/65)\n-
          Use `pyo3::intern!` for method calls and `getattr` calls [#&#8203;66](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/66)\n-
          Fix missing LICENSE file in macros crate by [@&#8203;musicinmybrain](https://redirect.github.com/musicinmybrain)
          in [#&#8203;63](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/63)\n-
          Bump to pyo3 0.27. [#&#8203;68](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/68)\n\n</details>\n\n<details>\n<summary>vorner/pyo3-log
          (pyo3-log)</summary>\n\n### [`v0.13.2`](https://redirect.github.com/vorner/pyo3-log/blob/HEAD/CHANGELOG.md#0132)\n\n[Compare
          Source](https://redirect.github.com/vorner/pyo3-log/compare/v0.13.1...v0.13.2)\n\n-
          Support for pyo3 0.27 ([#&#8203;72](https://redirect.github.com/vorner/pyo3-log/issues/72)).\n\n</details>\n\n<details>\n<summary>davidhewitt/pythonize
          (pythonize)</summary>\n\n### [`v0.27.0`](https://redirect.github.com/davidhewitt/pythonize/blob/HEAD/CHANGELOG.md#0270---2025-11-07)\n\n[Compare
          Source](https://redirect.github.com/davidhewitt/pythonize/compare/v0.26.0...v0.27.0)\n\n-
          Update to PyO3 0.27\n\n</details>\n\n---\n\n### Configuration\n\n\U0001F4C5
          **Schedule**: Branch creation - At any time (no schedule defined), Automerge
          - 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 is behind base branch, or you tick the rebase/retry
          checkbox.\n\n\U0001F47B **Immortal**: This PR will be recreated if closed
          unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions)
          if that's undesired.\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/vexxhost/magnum-cluster-api).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNDMuMSIsInVwZGF0ZWRJblZlciI6IjQzLjguNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->\n"
        change_url: https://github.com/vexxhost/magnum-cluster-api/pull/837
        commit_id: c6ab00092f19904b8889c7ec71d5d6f44b5d98ae
        patchset: c6ab00092f19904b8889c7ec71d5d6f44b5d98ae
        project:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/magnum-cluster-api
          name: vexxhost/magnum-cluster-api
          short_name: magnum-cluster-api
        src_dir: src/github.com/vexxhost/magnum-cluster-api
        topic: null
      change: '837'
      change_message: "fix(deps): update pyo3\n\nThis PR contains the following updates:\n\n|
        Package | Type | Update | Change |\n|---|---|---|---|\n| [pyo3](https://redirect.github.com/pyo3/pyo3)
        | dependencies | minor | `0.26.0` \u2192 `0.28.0` |\n| [pyo3-async-runtimes](https://redirect.github.com/PyO3/pyo3-async-runtimes)
        | dependencies | minor | `0.26.0` \u2192 `0.28.0` |\n| [pyo3-log](https://redirect.github.com/vorner/pyo3-log)
        | dependencies | patch | `0.13.1` \u2192 `0.13.2` |\n| [pythonize](https://redirect.github.com/davidhewitt/pythonize)
        | dependencies | minor | `0.26.0` \u2192 `0.27.0` |\n\n---\n\n### Release
        Notes\n\n<details>\n<summary>pyo3/pyo3 (pyo3)</summary>\n\n### [`v0.28.1`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0281---2026-02-14)\n\n[Compare
        Source](https://redirect.github.com/pyo3/pyo3/compare/v0.28.0...v0.28.1)\n\n#####
        Fixed\n\n- Fix `*args` / `**kwargs` support in` experimental-async` feature
        (regressed in 0.28.0). [#&#8203;5771](https://redirect.github.com/PyO3/pyo3/pull/5771)\n-
        Fix `clippy::declare_interior_mutable_const` warning inside `#[pyclass]` generated
        code on enums. [#&#8203;5772](https://redirect.github.com/PyO3/pyo3/pull/5772)\n-
        Fix `ambiguous_associated_items` compilation error when deriving `FromPyObject`
        or using `#[pyclass(from_py_object)]` macro on enums with `Error` variant.
        [#&#8203;5784](https://redirect.github.com/PyO3/pyo3/pull/5784)\n- Fix `__qualname__`
        for complex `#[pyclass]` enum variants to include the enum name. [#&#8203;5796](https://redirect.github.com/PyO3/pyo3/pull/5796)\n\n###
        [`v0.28.0`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0280---2026-02-01)\n\n[Compare
        Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.2...v0.28.0)\n\n#####
        Packaging\n\n- Bump MSRV to Rust 1.83. [#&#8203;5531](https://redirect.github.com/PyO3/pyo3/pull/5531)\n-
        Bump minimum supported `quote` version to 1.0.37. [#&#8203;5531](https://redirect.github.com/PyO3/pyo3/pull/5531)\n-
        Bump supported GraalPy version to 25.0. [#&#8203;5542](https://redirect.github.com/PyO3/pyo3/pull/5542)\n-
        Drop `memoffset` dependency. [#&#8203;5545](https://redirect.github.com/PyO3/pyo3/pull/5545)\n-
        Support for free-threaded Python is now opt-out rather than opt-in. [#&#8203;5564](https://redirect.github.com/PyO3/pyo3/pull/5564)\n-
        Bump `target-lexicon` dependency to 0.13.3. [#&#8203;5571](https://redirect.github.com/PyO3/pyo3/pull/5571)\n-
        Drop `indoc` and `unindent` dependencies. [#&#8203;5608](https://redirect.github.com/PyO3/pyo3/pull/5608)\n\n#####
        Added\n\n- Add `__init__` support in `#[pymethods]`. [#&#8203;4951](https://redirect.github.com/PyO3/pyo3/pull/4951)\n-
        Expose `PySuper` on PyPy, GraalPy and ABI3 [#&#8203;4951](https://redirect.github.com/PyO3/pyo3/pull/4951)\n-
        Add `PyString::from_fmt` and `py_format!` macro. [#&#8203;5199](https://redirect.github.com/PyO3/pyo3/pull/5199)\n-
        Add `#[pyclass(new = \"from_fields\")]` option. [#&#8203;5421](https://redirect.github.com/PyO3/pyo3/pull/5421)\n-
        Add `pyo3::buffer::PyUntypedBuffer`, a type-erased form of `PyBuffer<T>`.
        [#&#8203;5458](https://redirect.github.com/PyO3/pyo3/pull/5458)\n- Add `PyBytes::new_with_writer`
        [#&#8203;5517](https://redirect.github.com/PyO3/pyo3/pull/5517)\n- Add `PyClass::NAME`.
        [#&#8203;5579](https://redirect.github.com/PyO3/pyo3/pull/5579)\n- Add `pyo3_build_config::add_libpython_rpath_link_args`.
        [#&#8203;5624](https://redirect.github.com/PyO3/pyo3/pull/5624)\n- Add `PyBackedStr::clone_ref`
        and `PyBackedBytes::clone_ref` methods. [#&#8203;5654](https://redirect.github.com/PyO3/pyo3/pull/5654)\n-
        Add `PyCapsule::new_with_pointer` and `PyCapsule::new_with_pointer_and_destructor`
        for creating capsules with raw pointers. [#&#8203;5689](https://redirect.github.com/PyO3/pyo3/pull/5689)\n-
        Add `#[deleter]` attribute to implement property deleters in `#[methods]`.
        [#&#8203;5699](https://redirect.github.com/PyO3/pyo3/pull/5699)\n- Add `IntoPyObject`
        and `FromPyObject` implementations for `uuid::NonNilUuid`. [#&#8203;5707](https://redirect.github.com/PyO3/pyo3/pull/5707)\n-
        Add `PyBackedStr::as_str` and `PyBackedStr::as_py_str` methods. [#&#8203;5723](https://redirect.github.com/PyO3/pyo3/pull/5723)\n-
        Add support for subclassing native types (`PyDict`, exceptions, ...) when
        building for abi3 on Python 3.12+. [#&#8203;5733](https://redirect.github.com/PyO3/pyo3/pull/5733)\n-
        Add support for subclassing `PyList` when building for Python 3.12+. [#&#8203;5734](https://redirect.github.com/PyO3/pyo3/pull/5734)\n-
        FFI definitions:\n  - Add FFI definitions `PyEval_GetFrameBuiltins`, `PyEval_GetFrameGlobals`
        and `PyEval_GetFrameLocals` on Python 3.13 and up. [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
        \ - Add FFI definitions `PyObject_New`, `PyObject_NewVar`, `PyObject_GC_Resize`,
        `PyObject_GC_New`, and `PyObject_GC_NewVar`. [#&#8203;5591](https://redirect.github.com/PyO3/pyo3/pull/5591)\n
        \ - Added FFI definitions and an unsafe Rust API wrapping `Py_BEGIN_CRITICAL_SECTION_MUTEX`
        and `Py_BEGIN_CRITICAL_SECTION_MUTEX2`. [#&#8203;5642](https://redirect.github.com/PyO3/pyo3/pull/5642)\n
        \ - Add FFI definition `PyDict_GetItemStringRef` on Python 3.13 and up. [#&#8203;5659](https://redirect.github.com/PyO3/pyo3/pull/5659)\n
        \ - Add FFI definition `PyIter_NextItem` on Python 3.14 and up, and `compat::PyIter_NextItem`
        for older versions. [#&#8203;5661](https://redirect.github.com/PyO3/pyo3/pull/5661)\n
        \ - Add FFI definitions `PyThreadState_GetInterpreter` and `PyThreadState_GetID`
        on Python 3.9+, `PyThreadState_EnterTracing` and `PyThreadState_LeaveTracing`
        on Python 3.11+, `PyThreadState_GetUnchecked` on Python 3.13+, and `compat::PyThreadState_GetUnchecked`.
        [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n  - Add FFI
        definitions `PyImport_ImportModuleAttr` and `PyImport_ImportModuleAttrString`
        on Python 3.14+. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n
        \ - Add FFI definitions for the `PyABIInfo` and `PyModExport` APIs available
        in Python 3.15. [#&#8203;5746](https://redirect.github.com/PyO3/pyo3/pull/5746)\n-
        `experimental-inspect`:\n  - Emit base classes. [#&#8203;5331](https://redirect.github.com/PyO3/pyo3/pull/5331)\n
        \ - Emit `@typing.final` on final classes. [#&#8203;5552](https://redirect.github.com/PyO3/pyo3/pull/5552)\n
        \ - Generate nested classes for complex enums. [#&#8203;5708](https://redirect.github.com/PyO3/pyo3/pull/5708)\n
        \ - Emit `async` keyword for async functions. [#&#8203;5731](https://redirect.github.com/PyO3/pyo3/pull/5731)\n\n#####
        Changed\n\n- Call `sys.unraisablehook` instead of `PyErr_Print` if panicking
        on null FFI pointer in `Bound`, `Borrowed` and `Py` constructors. [#&#8203;5496](https://redirect.github.com/PyO3/pyo3/pull/5496)\n-
        Use PEP-489 multi-phase initialization for `#[pymodule]`. [#&#8203;5525](https://redirect.github.com/PyO3/pyo3/pull/5525)\n-
        Deprecate implicit by-value implementation of `FromPyObject` for `#[pyclass]`.
        [#&#8203;5550](https://redirect.github.com/PyO3/pyo3/pull/5550)\n- Deprecate
        `PyTypeInfo::NAME` and `PyTypeInfo::MODULE`. [#&#8203;5579](https://redirect.github.com/PyO3/pyo3/pull/5579)\n-
        Deprecate `Py<T>::from_{owned,borrowed}[or_{err,opt}]` constructors from raw
        pointer. [#&#8203;5585](https://redirect.github.com/PyO3/pyo3/pull/5585)\n-
        Deprecate FFI definitions `PyEval_AcquireLock` and `PyEval_ReleaseLock`. [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n-
        Relax `'py: 'a` bound in `Py::extract`. [#&#8203;5594](https://redirect.github.com/PyO3/pyo3/pull/5594)\n-
        Add a `T: PyTypeCheck` bound to the `IntoPyObject` implementations on `Bound<T>`,
        `Borrowed<T>` and `Py<T>`. [#&#8203;5640](https://redirect.github.com/PyO3/pyo3/pull/5640)\n-
        The `with_critical_section` and `with_critical_section2` functions are moved
        to `pyo3::sync::critical_section`. [#&#8203;5642](https://redirect.github.com/PyO3/pyo3/pull/5642)\n-
        Use `PyIter_NextItem` in `PyIterator::next` implementation. [#&#8203;5661](https://redirect.github.com/PyO3/pyo3/pull/5661)\n-
        `IntoPyObject` for simple enums now uses a singleton value, allowing identity
        (python `is`) comparisons. [#&#8203;5665](https://redirect.github.com/PyO3/pyo3/pull/5665)\n-
        Allow any `Sequence[int]` in `FromPyObject` on `Cow<[u8]>` and change the
        error type to `PyErr`. [#&#8203;5667](https://redirect.github.com/PyO3/pyo3/pull/5667)\n-
        `async` pymethods now borrow `self` only for the duration of awaiting the
        future, not the entire method call. [#&#8203;5684](https://redirect.github.com/PyO3/pyo3/pull/5684)\n-
        Change `CastError` formatted message to directly describe the \"is not an
        instance of\" failure condition. [#&#8203;5693](https://redirect.github.com/PyO3/pyo3/pull/5693)\n-
        Add `#[inline]` hints to many methods on `PyBackedStr`. [#&#8203;5723](https://redirect.github.com/PyO3/pyo3/pull/5723)\n-
        Remove redundant internal counters from `BoundSetIterator` and `BoundFrozenSetIterator`.
        [#&#8203;5725](https://redirect.github.com/PyO3/pyo3/pull/5725)\n- Implement
        `PyIterator::size_hint` on abi3 builds (previously was only on unlimited API
        builds). [#&#8203;5727](https://redirect.github.com/PyO3/pyo3/pull/5727)\n-
        Deprecate FFI definition `PyImport_ImportModuleNoBlock` (deprecated in Python
        3.13). [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n-
        `#[new]` can now return arbitrary Python objects. [#&#8203;5739](https://redirect.github.com/PyO3/pyo3/pull/5739)\n-
        `experimental-inspect`:\n  - Introduce `TypeHint` and make use of it to encode
        type hint annotations. [#&#8203;5438](https://redirect.github.com/PyO3/pyo3/pull/5438)\n
        \ - Rename `PyType{Info,Check}::TYPE_INFO` into `PyType{Info,Check}::TYPE_HINT`.
        [#&#8203;5438](https://redirect.github.com/PyO3/pyo3/pull/5438) [#&#8203;5619](https://redirect.github.com/PyO3/pyo3/pull/5619)
        [#&#8203;5641](https://redirect.github.com/PyO3/pyo3/pull/5641)\n  - Fill
        annotations on function arguments and return values for all types supported
        natively by PyO3. [#&#8203;5634](https://redirect.github.com/PyO3/pyo3/pull/5634)
        [#&#8203;5637](https://redirect.github.com/PyO3/pyo3/pull/5637) [#&#8203;5639](https://redirect.github.com/PyO3/pyo3/pull/5639)\n
        \ - Use `_typeshed.Incomplete` instead of `typing.Any` as default type hint,
        to make it easier to spot incomplete trait implementations. [#&#8203;5744](https://redirect.github.com/PyO3/pyo3/pull/5744)\n
        \ - Use general Python expression syntax for type hints. [#&#8203;5671](https://redirect.github.com/PyO3/pyo3/pull/5671)\n\n#####
        Removed\n\n- Remove all functionality deprecated in PyO3 0.25 and 0.26. [#&#8203;5740](https://redirect.github.com/PyO3/pyo3/pull/5740)\n-
        FFI definitions:\n  - Remove FFI definition `PyEval_GetCallStats` (removed
        from CPython in Python 3.7). [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
        \ - Remove FFI definitions `PyEval_AcquireLock` and `PyEval_ReleaseLock` on
        Python 3.13 and up. [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
        \ - Remove private FFI definitions `_PyObject_New`, `_PyObject_NewVar`, `_PyObject_GC_Resize`,
        `_PyObject_GC_New`, and `_PyObject_GC_NewVar`. [#&#8203;5591](https://redirect.github.com/PyO3/pyo3/pull/5591)\n
        \ - Remove private FFI definitions `_PyDict_SetItem_KnownHash`, `_PyDict_Next`,
        `_PyDict_NewPresized`, `_PyDict_Contains_KnownHash`, and `_PyDict_Contains`.
        [#&#8203;5659](https://redirect.github.com/PyO3/pyo3/pull/5659)\n  - Remove
        private FFI definitions `_PyFrameEvalFunction`, `_PyInterpreterState_GetEvalFrameFunc`
        and `_PyInterpreterState_SetEvalFrameFunc`. [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n
        \ - Remove private FFI definitions `_PyImport_IsInitialized`, `_PyImport_SetModule`,
        `_PyImport_SetModuleString`, `_PyImport_AcquireLock`, `_PyImport_ReleaseLock`,
        `_PyImport_FindBuiltin`, `_PyImport_FindExtensionObject`, `_PyImport_FixupBuiltin`,
        and `_PyImport_FixupExtensionObject`. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n\n#####
        Fixed\n\n- Fix `PyModuleMethods::add_submodule()` to use the last segment
        of the submodule name as the attribute name on the parent module instead of
        using the full name. [#&#8203;5375](https://redirect.github.com/PyO3/pyo3/pull/5375)\n-
        Link with libpython for Cygwin extension modules. [#&#8203;5571](https://redirect.github.com/PyO3/pyo3/pull/5571)\n-
        Link against the limited API DLL for Cygwin when abi3 is used. [#&#8203;5574](https://redirect.github.com/PyO3/pyo3/pull/5574)\n-
        Handle errors in `PyIterator` when calling `size_hint` [#&#8203;5604](https://redirect.github.com/PyO3/pyo3/pull/5604)\n-
        Link with libpython for iOS extension modules. [#&#8203;5605](https://redirect.github.com/PyO3/pyo3/pull/5605)\n-
        Correct `IntoPyObject` output type of `PyBackedStr` to be `PyString`, not
        `PyAny`. [#&#8203;5655](https://redirect.github.com/PyO3/pyo3/pull/5655)\n-
        Fix `async` functions to return `None` rather than empty tuple `()`. [#&#8203;5685](https://redirect.github.com/PyO3/pyo3/pull/5685)\n-
        Fix compile error when using references to `#[pyclass]` types (e.g. `&MyClass`)
        as arguments to async `#[pyfunction]`s. [#&#8203;5725](https://redirect.github.com/PyO3/pyo3/pull/5725)\n-
        FFI definitions:\n  - Fix FFI definition `PyMemberDescrObject.d_member` to
        use `PyMemberDef` for Python 3.11+ (was incorrectly `PyGetSetDef`). [#&#8203;5647](https://redirect.github.com/PyO3/pyo3/pull/5647)\n
        \ - Mark FFI definition `PyThreadState_GetFrame` available with abi3 in 3.10+.
        [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n  - Fix FFI
        definition `PyImport_GetModule` on PyPy. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n-
        `experimental-inspect`:\n  - fix `__new__` return type to be the built object
        type and not `None`. [#&#8203;5555](https://redirect.github.com/PyO3/pyo3/pull/5555)\n
        \ - fix imports of decorators. [#&#8203;5618](https://redirect.github.com/PyO3/pyo3/pull/5618)\n
        \ - fix the return type annotation of `PyResult<()>` (must be `None` and not
        `tuple`) [#&#8203;5674](https://redirect.github.com/PyO3/pyo3/pull/5674)\n\n###
        [`v0.27.2`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0272---2025-11-30)\n\n[Compare
        Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.1...v0.27.2)\n\n#####
        Changed\n\n- Disable subclassing `PyDict` on GraalPy (unsupported for now,
        may crash at runtime). [#&#8203;5653](https://redirect.github.com/PyO3/pyo3/pull/5653)\n\n#####
        Fixed\n\n- Fix crash when compiling on Rust 1.92+ with both debug assertions
        and optimizations enabled. [#&#8203;5638](https://redirect.github.com/PyO3/pyo3/pull/5638)\n-
        Fix FFI definition of `PyDictObject` on PyPy. [#&#8203;5653](https://redirect.github.com/PyO3/pyo3/pull/5653)\n\n###
        [`v0.27.1`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0271---2025-10-21)\n\n[Compare
        Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.0...v0.27.1)\n\n#####
        Fixed\n\n- Fix `clippy:declare_interior_mutable_const` warning from `#[pyfunction]`.
        [#&#8203;5538](https://redirect.github.com/PyO3/pyo3/pull/5538)\n- Expose
        `pyo3::types::PySendResult` in public API. [#&#8203;5539](https://redirect.github.com/PyO3/pyo3/pull/5539)\n\n###
        [`v0.27.0`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0270---2025-10-19)\n\n[Compare
        Source](https://redirect.github.com/pyo3/pyo3/compare/v0.26.0...v0.27.0)\n\n#####
        Packaging\n\n- Extend range of supported versions of `hashbrown` optional
        dependency to include version 0.16. [#&#8203;5428](https://redirect.github.com/PyO3/pyo3/pull/5428)\n-
        Bump optional `num-bigint` dependency minimum version to 0.4.4. [#&#8203;5471](https://redirect.github.com/PyO3/pyo3/pull/5471)\n-
        Test against Python 3.14 final release. [#&#8203;5499](https://redirect.github.com/PyO3/pyo3/pull/5499)\n-
        Drop support for PyPy 3.9 and 3.10. [#&#8203;5516](https://redirect.github.com/PyO3/pyo3/pull/5516)\n-
        Provide a better error message when building an outdated PyO3 for a too-new
        Python version. [#&#8203;5519](https://redirect.github.com/PyO3/pyo3/pull/5519)\n\n#####
        Added\n\n- Add `FromPyObjectOwned` as convenient trait bound for `FromPyObject`
        when the data is not borrowed from Python. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n-
        Add `Borrowed::extract`, same as `PyAnyMethods::extract`, but does not restrict
        the lifetime by deref. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n-
        `experimental-inspect`: basic support for `#[derive(IntoPyObject)]` (no struct
        fields support yet). [#&#8203;5365](https://redirect.github.com/PyO3/pyo3/pull/5365)\n-
        `experimental-inspect`: support `#[pyo3(get, set)]` and `#[pyclass(get_all,
        set_all)]`. [#&#8203;5370](https://redirect.github.com/PyO3/pyo3/pull/5370)\n-
        Add `PyTypeCheck::classinfo_object` that returns an object that can be used
        as parameter in `isinstance` or `issubclass`. [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n-
        Implement `PyTypeInfo` on `datetime.*` types even when the limited API is
        enabled. [#&#8203;5388](https://redirect.github.com/PyO3/pyo3/pull/5388)\n-
        Implement `PyTypeInfo` on `PyIterator`, `PyMapping` and `PySequence`. [#&#8203;5402](https://redirect.github.com/PyO3/pyo3/pull/5402)\n-
        Implement `PyTypeInfo` on `PyCode` when using the stable ABI. [#&#8203;5403](https://redirect.github.com/PyO3/pyo3/pull/5403)\n-
        Implement `PyTypeInfo` on `PyWeakrefReference` when using the stable ABI.
        [#&#8203;5404](https://redirect.github.com/PyO3/pyo3/pull/5404)\n- Add `pyo3::sync::RwLockExt`
        trait, analogous to `pyo3::sync::MutexExt` for readwrite locks. [#&#8203;5435](https://redirect.github.com/PyO3/pyo3/pull/5435)\n-
        Add `PyString::from_bytes`. [#&#8203;5437](https://redirect.github.com/PyO3/pyo3/pull/5437)\n-
        Implement `AsRef<[u8]>` for `PyBytes`. [#&#8203;5445](https://redirect.github.com/PyO3/pyo3/pull/5445)\n-
        Add `CastError` and `CastIntoError`. [#&#8203;5468](https://redirect.github.com/PyO3/pyo3/pull/5468)\n-
        Add `PyCapsuleMethods::pointer_checked` and `PyCapsuleMethods::is_valid_checked`.
        [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n- Add `Borrowed::cast`,
        `Borrowed::cast_exact` and `Borrowed::cast_unchecked`. [#&#8203;5475](https://redirect.github.com/PyO3/pyo3/pull/5475)\n-
        Add conversions for `jiff::civil::ISOWeekDate`. [#&#8203;5478](https://redirect.github.com/PyO3/pyo3/pull/5478)\n-
        Add conversions for `&Cstr`, `Cstring` and `Cow<Cstr>`. [#&#8203;5482](https://redirect.github.com/PyO3/pyo3/pull/5482)\n-
        add `#[pyclass(skip_from_py_object)]` option, to opt-out of the `FromPyObject:
        PyClass + Clone` blanket impl. [#&#8203;5488](https://redirect.github.com/PyO3/pyo3/pull/5488)\n-
        Add `PyErr::add_note`. [#&#8203;5489](https://redirect.github.com/PyO3/pyo3/pull/5489)\n-
        Add `FromPyObject` impl for `Cow<Path>` & `Cow<OsStr>`. [#&#8203;5497](https://redirect.github.com/PyO3/pyo3/pull/5497)\n-
        Add `#[pyclass(from_py_object)]` pyclass option, to opt-in to the extraction
        of pyclasses by value (requires `Clone`). [#&#8203;5506](https://redirect.github.com/PyO3/pyo3/pull/5506)\n\n#####
        Changed\n\n- Rework `FromPyObject` trait for flexibility and performance:
        [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n  - Add a
        second lifetime to `FromPyObject`, to allow borrowing data from Python objects
        (e.g. `&str` from Python `str`).\n  - Replace `extract_bound` with `extract`,
        which takes `Borrowed<'a, 'py, PyAny>`.\n- Optimize `FromPyObject` implementations
        for `Vec<u8>` and `[u8; N]` from `bytes` and `bytearray`. [#&#8203;5244](https://redirect.github.com/PyO3/pyo3/pull/5244)\n-
        Deprecate `#[pyfn]` attribute. [#&#8203;5384](https://redirect.github.com/PyO3/pyo3/pull/5384)\n-
        Fetch type name dynamically on cast errors instead of using `PyTypeCheck::NAME`.
        [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n- Deprecate
        `PyTypeCheck::NAME` in favour of `PyTypeCheck::classinfo_object` which provides
        the type information at runtime. [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n-
        `PyClassGuard(Mut)` and `PyRef(Mut)` extraction now returns an opaque Rust
        error [#&#8203;5413](https://redirect.github.com/PyO3/pyo3/pull/5413)\n- Fetch
        type name dynamically when exporting types implementing `PyTypeInfo` with
        `#[pymodule_use]`. [#&#8203;5414](https://redirect.github.com/PyO3/pyo3/pull/5414)\n-
        Improve `Debug` representation of `PyBuffer<T>`. [#&#8203;5442](https://redirect.github.com/PyO3/pyo3/pull/5442)\n-
        `experimental-inspect`: change the way introspection data is emitted in the
        binaries to avoid a pointer indirection and simplify parsing. [#&#8203;5450](https://redirect.github.com/PyO3/pyo3/pull/5450)\n-
        Optimize `Py<T>::drop` for the case when attached to the Python interpreter.
        [#&#8203;5454](https://redirect.github.com/PyO3/pyo3/pull/5454)\n- Replace
        `DowncastError` and `DowncastIntoError` with `CastError` and `CastIntoError`.
        [#&#8203;5468](https://redirect.github.com/PyO3/pyo3/pull/5468)\n- Enable
        fast-path for 128-bit integer conversions on `GraalPy`. [#&#8203;5471](https://redirect.github.com/PyO3/pyo3/pull/5471)\n-
        Deprecate `PyAnyMethods::downcast` functions in favour of `Bound::cast` functions.
        [#&#8203;5472](https://redirect.github.com/PyO3/pyo3/pull/5472)\n- Make `PyTypeCheck`
        an `unsafe trait`. [#&#8203;5473](https://redirect.github.com/PyO3/pyo3/pull/5473)\n-
        Deprecate unchecked `PyCapsuleMethods`: `pointer()`, `reference()`, and `is_valid()`.
        [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n- Reduce
        lifetime of return value in `PyCapsuleMethods::reference`. [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n-
        `PyCapsuleMethods::name` now returns `CapsuleName` wrapper instead of `&CStr`.
        [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n- Deprecate
        `import_exception_bound` in favour of `import_exception`. [#&#8203;5480](https://redirect.github.com/PyO3/pyo3/pull/5480)\n-
        `PyList::get_item_unchecked`, `PyTuple::get_item_unchecked`, and `PyTuple::get_borrowed_item_unchecked`
        no longer check for null values at the provided index. [#&#8203;5494](https://redirect.github.com/PyO3/pyo3/pull/5494)\n-
        Allow converting naive datetime into chrono `DateTime<Local>`. [#&#8203;5507](https://redirect.github.com/PyO3/pyo3/pull/5507)\n\n#####
        Removed\n\n- Removed `FromPyObjectBound` trait. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n\n#####
        Fixed\n\n- Fix compilation failure on `wasm32-wasip2`. [#&#8203;5368](https://redirect.github.com/PyO3/pyo3/pull/5368)\n-
        Fix `OsStr` conversion for non-utf8 strings on Windows. [#&#8203;5444](https://redirect.github.com/PyO3/pyo3/pull/5444)\n-
        Fix issue with `cargo vendor` caused by gitignored build artifact `emscripten/pybuilddir.txt`.
        [#&#8203;5456](https://redirect.github.com/PyO3/pyo3/pull/5456)\n- Stop leaking
        `PyMethodDef` instances inside `#[pyfunction]` macro generated code. [#&#8203;5459](https://redirect.github.com/PyO3/pyo3/pull/5459)\n-
        Don't export definition of FFI struct `PyObjectObFlagsAndRefcnt` on 32-bit
        Python 3.14 (doesn't exist). [#&#8203;5499](https://redirect.github.com/PyO3/pyo3/pull/5499)\n-
        Fix failure to build for `abi3` interpreters on Windows using maturin's built-in
        sysconfig in combination with the `generate-import-lib` feature. [#&#8203;5503](https://redirect.github.com/PyO3/pyo3/pull/5503)\n-
        Fix FFI definitions `PyModule_ExecDef` and `PyModule_FromDefAndSpec2` on PyPy.
        [#&#8203;5529](https://redirect.github.com/PyO3/pyo3/pull/5529)\n\n</details>\n\n<details>\n<summary>PyO3/pyo3-async-runtimes
        (pyo3-async-runtimes)</summary>\n\n### [`v0.28.0`](https://redirect.github.com/PyO3/pyo3-async-runtimes/blob/HEAD/CHANGELOG.md#0280---2026-02-03)\n\n[Compare
        Source](https://redirect.github.com/PyO3/pyo3-async-runtimes/compare/v0.27.0...v0.28.0)\n\n-
        Bump to pyo3 0.28. [#&#8203;76](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/76)\n-
        Check for awaitable instead of coroutine in stream glue [#&#8203;73](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/73)\n-
        Bump MSRV to 1.83.\n- Fix handling of full buffer in `into_stream` functions\n\n###
        [`v0.27.0`](https://redirect.github.com/PyO3/pyo3-async-runtimes/blob/HEAD/CHANGELOG.md#0270---2025-10-20)\n\n[Compare
        Source](https://redirect.github.com/PyO3/pyo3-async-runtimes/compare/v0.26.0...v0.27.0)\n\n-
        Avoid attaching to the runtime when cloning TaskLocals by using std::sync::Arc.
        [#&#8203;62](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/62)\n-
        **Breaking**: Finalize the future without holding GIL inside async-std/tokio
        runtime.\n  Trait `Runtime` now requires `spawn_blocking` function,\n  `future_into_py`
        functions now require future return type to be `Send`.\n  [#&#8203;60](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/60)\n-
        Change pyo3 `downcast` calls to `cast` calls [#&#8203;65](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/65)\n-
        Use `pyo3::intern!` for method calls and `getattr` calls [#&#8203;66](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/66)\n-
        Fix missing LICENSE file in macros crate by [@&#8203;musicinmybrain](https://redirect.github.com/musicinmybrain)
        in [#&#8203;63](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/63)\n-
        Bump to pyo3 0.27. [#&#8203;68](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/68)\n\n</details>\n\n<details>\n<summary>vorner/pyo3-log
        (pyo3-log)</summary>\n\n### [`v0.13.2`](https://redirect.github.com/vorner/pyo3-log/blob/HEAD/CHANGELOG.md#0132)\n\n[Compare
        Source](https://redirect.github.com/vorner/pyo3-log/compare/v0.13.1...v0.13.2)\n\n-
        Support for pyo3 0.27 ([#&#8203;72](https://redirect.github.com/vorner/pyo3-log/issues/72)).\n\n</details>\n\n<details>\n<summary>davidhewitt/pythonize
        (pythonize)</summary>\n\n### [`v0.27.0`](https://redirect.github.com/davidhewitt/pythonize/blob/HEAD/CHANGELOG.md#0270---2025-11-07)\n\n[Compare
        Source](https://redirect.github.com/davidhewitt/pythonize/compare/v0.26.0...v0.27.0)\n\n-
        Update to PyO3 0.27\n\n</details>\n\n---\n\n### Configuration\n\n\U0001F4C5
        **Schedule**: Branch creation - At any time (no schedule defined), Automerge
        - 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 is behind base branch, or you tick the rebase/retry checkbox.\n\n\U0001F47B
        **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions)
        if that's undesired.\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/vexxhost/magnum-cluster-api).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNDMuMSIsInVwZGF0ZWRJblZlciI6IjQzLjguNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->\n"
      change_url: https://github.com/vexxhost/magnum-cluster-api/pull/837
      child_jobs: []
      commit_id: c6ab00092f19904b8889c7ec71d5d6f44b5d98ae
      event_id: d5ee6020-0ba3-11f1-9934-c0c4764633f7
      executor:
        hostname: 3a2793d2bd32
        inventory_file: /var/lib/zuul/builds/f5045bafb6cc44468e8cf8621b85551f/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/f5045bafb6cc44468e8cf8621b85551f/work/logs
        result_data_file: /var/lib/zuul/builds/f5045bafb6cc44468e8cf8621b85551f/work/results.json
        src_root: /var/lib/zuul/builds/f5045bafb6cc44468e8cf8621b85551f/work/src
        work_root: /var/lib/zuul/builds/f5045bafb6cc44468e8cf8621b85551f/work
      include_vars: []
      items:
      - branch: main
        change: '837'
        change_message: "fix(deps): update pyo3\n\nThis PR contains the following
          updates:\n\n| Package | Type | Update | Change |\n|---|---|---|---|\n| [pyo3](https://redirect.github.com/pyo3/pyo3)
          | dependencies | minor | `0.26.0` \u2192 `0.28.0` |\n| [pyo3-async-runtimes](https://redirect.github.com/PyO3/pyo3-async-runtimes)
          | dependencies | minor | `0.26.0` \u2192 `0.28.0` |\n| [pyo3-log](https://redirect.github.com/vorner/pyo3-log)
          | dependencies | patch | `0.13.1` \u2192 `0.13.2` |\n| [pythonize](https://redirect.github.com/davidhewitt/pythonize)
          | dependencies | minor | `0.26.0` \u2192 `0.27.0` |\n\n---\n\n### Release
          Notes\n\n<details>\n<summary>pyo3/pyo3 (pyo3)</summary>\n\n### [`v0.28.1`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0281---2026-02-14)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.28.0...v0.28.1)\n\n#####
          Fixed\n\n- Fix `*args` / `**kwargs` support in` experimental-async` feature
          (regressed in 0.28.0). [#&#8203;5771](https://redirect.github.com/PyO3/pyo3/pull/5771)\n-
          Fix `clippy::declare_interior_mutable_const` warning inside `#[pyclass]`
          generated code on enums. [#&#8203;5772](https://redirect.github.com/PyO3/pyo3/pull/5772)\n-
          Fix `ambiguous_associated_items` compilation error when deriving `FromPyObject`
          or using `#[pyclass(from_py_object)]` macro on enums with `Error` variant.
          [#&#8203;5784](https://redirect.github.com/PyO3/pyo3/pull/5784)\n- Fix `__qualname__`
          for complex `#[pyclass]` enum variants to include the enum name. [#&#8203;5796](https://redirect.github.com/PyO3/pyo3/pull/5796)\n\n###
          [`v0.28.0`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0280---2026-02-01)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.2...v0.28.0)\n\n#####
          Packaging\n\n- Bump MSRV to Rust 1.83. [#&#8203;5531](https://redirect.github.com/PyO3/pyo3/pull/5531)\n-
          Bump minimum supported `quote` version to 1.0.37. [#&#8203;5531](https://redirect.github.com/PyO3/pyo3/pull/5531)\n-
          Bump supported GraalPy version to 25.0. [#&#8203;5542](https://redirect.github.com/PyO3/pyo3/pull/5542)\n-
          Drop `memoffset` dependency. [#&#8203;5545](https://redirect.github.com/PyO3/pyo3/pull/5545)\n-
          Support for free-threaded Python is now opt-out rather than opt-in. [#&#8203;5564](https://redirect.github.com/PyO3/pyo3/pull/5564)\n-
          Bump `target-lexicon` dependency to 0.13.3. [#&#8203;5571](https://redirect.github.com/PyO3/pyo3/pull/5571)\n-
          Drop `indoc` and `unindent` dependencies. [#&#8203;5608](https://redirect.github.com/PyO3/pyo3/pull/5608)\n\n#####
          Added\n\n- Add `__init__` support in `#[pymethods]`. [#&#8203;4951](https://redirect.github.com/PyO3/pyo3/pull/4951)\n-
          Expose `PySuper` on PyPy, GraalPy and ABI3 [#&#8203;4951](https://redirect.github.com/PyO3/pyo3/pull/4951)\n-
          Add `PyString::from_fmt` and `py_format!` macro. [#&#8203;5199](https://redirect.github.com/PyO3/pyo3/pull/5199)\n-
          Add `#[pyclass(new = \"from_fields\")]` option. [#&#8203;5421](https://redirect.github.com/PyO3/pyo3/pull/5421)\n-
          Add `pyo3::buffer::PyUntypedBuffer`, a type-erased form of `PyBuffer<T>`.
          [#&#8203;5458](https://redirect.github.com/PyO3/pyo3/pull/5458)\n- Add `PyBytes::new_with_writer`
          [#&#8203;5517](https://redirect.github.com/PyO3/pyo3/pull/5517)\n- Add `PyClass::NAME`.
          [#&#8203;5579](https://redirect.github.com/PyO3/pyo3/pull/5579)\n- Add `pyo3_build_config::add_libpython_rpath_link_args`.
          [#&#8203;5624](https://redirect.github.com/PyO3/pyo3/pull/5624)\n- Add `PyBackedStr::clone_ref`
          and `PyBackedBytes::clone_ref` methods. [#&#8203;5654](https://redirect.github.com/PyO3/pyo3/pull/5654)\n-
          Add `PyCapsule::new_with_pointer` and `PyCapsule::new_with_pointer_and_destructor`
          for creating capsules with raw pointers. [#&#8203;5689](https://redirect.github.com/PyO3/pyo3/pull/5689)\n-
          Add `#[deleter]` attribute to implement property deleters in `#[methods]`.
          [#&#8203;5699](https://redirect.github.com/PyO3/pyo3/pull/5699)\n- Add `IntoPyObject`
          and `FromPyObject` implementations for `uuid::NonNilUuid`. [#&#8203;5707](https://redirect.github.com/PyO3/pyo3/pull/5707)\n-
          Add `PyBackedStr::as_str` and `PyBackedStr::as_py_str` methods. [#&#8203;5723](https://redirect.github.com/PyO3/pyo3/pull/5723)\n-
          Add support for subclassing native types (`PyDict`, exceptions, ...) when
          building for abi3 on Python 3.12+. [#&#8203;5733](https://redirect.github.com/PyO3/pyo3/pull/5733)\n-
          Add support for subclassing `PyList` when building for Python 3.12+. [#&#8203;5734](https://redirect.github.com/PyO3/pyo3/pull/5734)\n-
          FFI definitions:\n  - Add FFI definitions `PyEval_GetFrameBuiltins`, `PyEval_GetFrameGlobals`
          and `PyEval_GetFrameLocals` on Python 3.13 and up. [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
          \ - Add FFI definitions `PyObject_New`, `PyObject_NewVar`, `PyObject_GC_Resize`,
          `PyObject_GC_New`, and `PyObject_GC_NewVar`. [#&#8203;5591](https://redirect.github.com/PyO3/pyo3/pull/5591)\n
          \ - Added FFI definitions and an unsafe Rust API wrapping `Py_BEGIN_CRITICAL_SECTION_MUTEX`
          and `Py_BEGIN_CRITICAL_SECTION_MUTEX2`. [#&#8203;5642](https://redirect.github.com/PyO3/pyo3/pull/5642)\n
          \ - Add FFI definition `PyDict_GetItemStringRef` on Python 3.13 and up.
          [#&#8203;5659](https://redirect.github.com/PyO3/pyo3/pull/5659)\n  - Add
          FFI definition `PyIter_NextItem` on Python 3.14 and up, and `compat::PyIter_NextItem`
          for older versions. [#&#8203;5661](https://redirect.github.com/PyO3/pyo3/pull/5661)\n
          \ - Add FFI definitions `PyThreadState_GetInterpreter` and `PyThreadState_GetID`
          on Python 3.9+, `PyThreadState_EnterTracing` and `PyThreadState_LeaveTracing`
          on Python 3.11+, `PyThreadState_GetUnchecked` on Python 3.13+, and `compat::PyThreadState_GetUnchecked`.
          [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n  - Add
          FFI definitions `PyImport_ImportModuleAttr` and `PyImport_ImportModuleAttrString`
          on Python 3.14+. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n
          \ - Add FFI definitions for the `PyABIInfo` and `PyModExport` APIs available
          in Python 3.15. [#&#8203;5746](https://redirect.github.com/PyO3/pyo3/pull/5746)\n-
          `experimental-inspect`:\n  - Emit base classes. [#&#8203;5331](https://redirect.github.com/PyO3/pyo3/pull/5331)\n
          \ - Emit `@typing.final` on final classes. [#&#8203;5552](https://redirect.github.com/PyO3/pyo3/pull/5552)\n
          \ - Generate nested classes for complex enums. [#&#8203;5708](https://redirect.github.com/PyO3/pyo3/pull/5708)\n
          \ - Emit `async` keyword for async functions. [#&#8203;5731](https://redirect.github.com/PyO3/pyo3/pull/5731)\n\n#####
          Changed\n\n- Call `sys.unraisablehook` instead of `PyErr_Print` if panicking
          on null FFI pointer in `Bound`, `Borrowed` and `Py` constructors. [#&#8203;5496](https://redirect.github.com/PyO3/pyo3/pull/5496)\n-
          Use PEP-489 multi-phase initialization for `#[pymodule]`. [#&#8203;5525](https://redirect.github.com/PyO3/pyo3/pull/5525)\n-
          Deprecate implicit by-value implementation of `FromPyObject` for `#[pyclass]`.
          [#&#8203;5550](https://redirect.github.com/PyO3/pyo3/pull/5550)\n- Deprecate
          `PyTypeInfo::NAME` and `PyTypeInfo::MODULE`. [#&#8203;5579](https://redirect.github.com/PyO3/pyo3/pull/5579)\n-
          Deprecate `Py<T>::from_{owned,borrowed}[or_{err,opt}]` constructors from
          raw pointer. [#&#8203;5585](https://redirect.github.com/PyO3/pyo3/pull/5585)\n-
          Deprecate FFI definitions `PyEval_AcquireLock` and `PyEval_ReleaseLock`.
          [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n- Relax
          `'py: 'a` bound in `Py::extract`. [#&#8203;5594](https://redirect.github.com/PyO3/pyo3/pull/5594)\n-
          Add a `T: PyTypeCheck` bound to the `IntoPyObject` implementations on `Bound<T>`,
          `Borrowed<T>` and `Py<T>`. [#&#8203;5640](https://redirect.github.com/PyO3/pyo3/pull/5640)\n-
          The `with_critical_section` and `with_critical_section2` functions are moved
          to `pyo3::sync::critical_section`. [#&#8203;5642](https://redirect.github.com/PyO3/pyo3/pull/5642)\n-
          Use `PyIter_NextItem` in `PyIterator::next` implementation. [#&#8203;5661](https://redirect.github.com/PyO3/pyo3/pull/5661)\n-
          `IntoPyObject` for simple enums now uses a singleton value, allowing identity
          (python `is`) comparisons. [#&#8203;5665](https://redirect.github.com/PyO3/pyo3/pull/5665)\n-
          Allow any `Sequence[int]` in `FromPyObject` on `Cow<[u8]>` and change the
          error type to `PyErr`. [#&#8203;5667](https://redirect.github.com/PyO3/pyo3/pull/5667)\n-
          `async` pymethods now borrow `self` only for the duration of awaiting the
          future, not the entire method call. [#&#8203;5684](https://redirect.github.com/PyO3/pyo3/pull/5684)\n-
          Change `CastError` formatted message to directly describe the \"is not an
          instance of\" failure condition. [#&#8203;5693](https://redirect.github.com/PyO3/pyo3/pull/5693)\n-
          Add `#[inline]` hints to many methods on `PyBackedStr`. [#&#8203;5723](https://redirect.github.com/PyO3/pyo3/pull/5723)\n-
          Remove redundant internal counters from `BoundSetIterator` and `BoundFrozenSetIterator`.
          [#&#8203;5725](https://redirect.github.com/PyO3/pyo3/pull/5725)\n- Implement
          `PyIterator::size_hint` on abi3 builds (previously was only on unlimited
          API builds). [#&#8203;5727](https://redirect.github.com/PyO3/pyo3/pull/5727)\n-
          Deprecate FFI definition `PyImport_ImportModuleNoBlock` (deprecated in Python
          3.13). [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n-
          `#[new]` can now return arbitrary Python objects. [#&#8203;5739](https://redirect.github.com/PyO3/pyo3/pull/5739)\n-
          `experimental-inspect`:\n  - Introduce `TypeHint` and make use of it to
          encode type hint annotations. [#&#8203;5438](https://redirect.github.com/PyO3/pyo3/pull/5438)\n
          \ - Rename `PyType{Info,Check}::TYPE_INFO` into `PyType{Info,Check}::TYPE_HINT`.
          [#&#8203;5438](https://redirect.github.com/PyO3/pyo3/pull/5438) [#&#8203;5619](https://redirect.github.com/PyO3/pyo3/pull/5619)
          [#&#8203;5641](https://redirect.github.com/PyO3/pyo3/pull/5641)\n  - Fill
          annotations on function arguments and return values for all types supported
          natively by PyO3. [#&#8203;5634](https://redirect.github.com/PyO3/pyo3/pull/5634)
          [#&#8203;5637](https://redirect.github.com/PyO3/pyo3/pull/5637) [#&#8203;5639](https://redirect.github.com/PyO3/pyo3/pull/5639)\n
          \ - Use `_typeshed.Incomplete` instead of `typing.Any` as default type hint,
          to make it easier to spot incomplete trait implementations. [#&#8203;5744](https://redirect.github.com/PyO3/pyo3/pull/5744)\n
          \ - Use general Python expression syntax for type hints. [#&#8203;5671](https://redirect.github.com/PyO3/pyo3/pull/5671)\n\n#####
          Removed\n\n- Remove all functionality deprecated in PyO3 0.25 and 0.26.
          [#&#8203;5740](https://redirect.github.com/PyO3/pyo3/pull/5740)\n- FFI definitions:\n
          \ - Remove FFI definition `PyEval_GetCallStats` (removed from CPython in
          Python 3.7). [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
          \ - Remove FFI definitions `PyEval_AcquireLock` and `PyEval_ReleaseLock`
          on Python 3.13 and up. [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
          \ - Remove private FFI definitions `_PyObject_New`, `_PyObject_NewVar`,
          `_PyObject_GC_Resize`, `_PyObject_GC_New`, and `_PyObject_GC_NewVar`. [#&#8203;5591](https://redirect.github.com/PyO3/pyo3/pull/5591)\n
          \ - Remove private FFI definitions `_PyDict_SetItem_KnownHash`, `_PyDict_Next`,
          `_PyDict_NewPresized`, `_PyDict_Contains_KnownHash`, and `_PyDict_Contains`.
          [#&#8203;5659](https://redirect.github.com/PyO3/pyo3/pull/5659)\n  - Remove
          private FFI definitions `_PyFrameEvalFunction`, `_PyInterpreterState_GetEvalFrameFunc`
          and `_PyInterpreterState_SetEvalFrameFunc`. [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n
          \ - Remove private FFI definitions `_PyImport_IsInitialized`, `_PyImport_SetModule`,
          `_PyImport_SetModuleString`, `_PyImport_AcquireLock`, `_PyImport_ReleaseLock`,
          `_PyImport_FindBuiltin`, `_PyImport_FindExtensionObject`, `_PyImport_FixupBuiltin`,
          and `_PyImport_FixupExtensionObject`. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n\n#####
          Fixed\n\n- Fix `PyModuleMethods::add_submodule()` to use the last segment
          of the submodule name as the attribute name on the parent module instead
          of using the full name. [#&#8203;5375](https://redirect.github.com/PyO3/pyo3/pull/5375)\n-
          Link with libpython for Cygwin extension modules. [#&#8203;5571](https://redirect.github.com/PyO3/pyo3/pull/5571)\n-
          Link against the limited API DLL for Cygwin when abi3 is used. [#&#8203;5574](https://redirect.github.com/PyO3/pyo3/pull/5574)\n-
          Handle errors in `PyIterator` when calling `size_hint` [#&#8203;5604](https://redirect.github.com/PyO3/pyo3/pull/5604)\n-
          Link with libpython for iOS extension modules. [#&#8203;5605](https://redirect.github.com/PyO3/pyo3/pull/5605)\n-
          Correct `IntoPyObject` output type of `PyBackedStr` to be `PyString`, not
          `PyAny`. [#&#8203;5655](https://redirect.github.com/PyO3/pyo3/pull/5655)\n-
          Fix `async` functions to return `None` rather than empty tuple `()`. [#&#8203;5685](https://redirect.github.com/PyO3/pyo3/pull/5685)\n-
          Fix compile error when using references to `#[pyclass]` types (e.g. `&MyClass`)
          as arguments to async `#[pyfunction]`s. [#&#8203;5725](https://redirect.github.com/PyO3/pyo3/pull/5725)\n-
          FFI definitions:\n  - Fix FFI definition `PyMemberDescrObject.d_member`
          to use `PyMemberDef` for Python 3.11+ (was incorrectly `PyGetSetDef`). [#&#8203;5647](https://redirect.github.com/PyO3/pyo3/pull/5647)\n
          \ - Mark FFI definition `PyThreadState_GetFrame` available with abi3 in
          3.10+. [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n
          \ - Fix FFI definition `PyImport_GetModule` on PyPy. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n-
          `experimental-inspect`:\n  - fix `__new__` return type to be the built object
          type and not `None`. [#&#8203;5555](https://redirect.github.com/PyO3/pyo3/pull/5555)\n
          \ - fix imports of decorators. [#&#8203;5618](https://redirect.github.com/PyO3/pyo3/pull/5618)\n
          \ - fix the return type annotation of `PyResult<()>` (must be `None` and
          not `tuple`) [#&#8203;5674](https://redirect.github.com/PyO3/pyo3/pull/5674)\n\n###
          [`v0.27.2`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0272---2025-11-30)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.1...v0.27.2)\n\n#####
          Changed\n\n- Disable subclassing `PyDict` on GraalPy (unsupported for now,
          may crash at runtime). [#&#8203;5653](https://redirect.github.com/PyO3/pyo3/pull/5653)\n\n#####
          Fixed\n\n- Fix crash when compiling on Rust 1.92+ with both debug assertions
          and optimizations enabled. [#&#8203;5638](https://redirect.github.com/PyO3/pyo3/pull/5638)\n-
          Fix FFI definition of `PyDictObject` on PyPy. [#&#8203;5653](https://redirect.github.com/PyO3/pyo3/pull/5653)\n\n###
          [`v0.27.1`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0271---2025-10-21)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.0...v0.27.1)\n\n#####
          Fixed\n\n- Fix `clippy:declare_interior_mutable_const` warning from `#[pyfunction]`.
          [#&#8203;5538](https://redirect.github.com/PyO3/pyo3/pull/5538)\n- Expose
          `pyo3::types::PySendResult` in public API. [#&#8203;5539](https://redirect.github.com/PyO3/pyo3/pull/5539)\n\n###
          [`v0.27.0`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0270---2025-10-19)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.26.0...v0.27.0)\n\n#####
          Packaging\n\n- Extend range of supported versions of `hashbrown` optional
          dependency to include version 0.16. [#&#8203;5428](https://redirect.github.com/PyO3/pyo3/pull/5428)\n-
          Bump optional `num-bigint` dependency minimum version to 0.4.4. [#&#8203;5471](https://redirect.github.com/PyO3/pyo3/pull/5471)\n-
          Test against Python 3.14 final release. [#&#8203;5499](https://redirect.github.com/PyO3/pyo3/pull/5499)\n-
          Drop support for PyPy 3.9 and 3.10. [#&#8203;5516](https://redirect.github.com/PyO3/pyo3/pull/5516)\n-
          Provide a better error message when building an outdated PyO3 for a too-new
          Python version. [#&#8203;5519](https://redirect.github.com/PyO3/pyo3/pull/5519)\n\n#####
          Added\n\n- Add `FromPyObjectOwned` as convenient trait bound for `FromPyObject`
          when the data is not borrowed from Python. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n-
          Add `Borrowed::extract`, same as `PyAnyMethods::extract`, but does not restrict
          the lifetime by deref. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n-
          `experimental-inspect`: basic support for `#[derive(IntoPyObject)]` (no
          struct fields support yet). [#&#8203;5365](https://redirect.github.com/PyO3/pyo3/pull/5365)\n-
          `experimental-inspect`: support `#[pyo3(get, set)]` and `#[pyclass(get_all,
          set_all)]`. [#&#8203;5370](https://redirect.github.com/PyO3/pyo3/pull/5370)\n-
          Add `PyTypeCheck::classinfo_object` that returns an object that can be used
          as parameter in `isinstance` or `issubclass`. [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n-
          Implement `PyTypeInfo` on `datetime.*` types even when the limited API is
          enabled. [#&#8203;5388](https://redirect.github.com/PyO3/pyo3/pull/5388)\n-
          Implement `PyTypeInfo` on `PyIterator`, `PyMapping` and `PySequence`. [#&#8203;5402](https://redirect.github.com/PyO3/pyo3/pull/5402)\n-
          Implement `PyTypeInfo` on `PyCode` when using the stable ABI. [#&#8203;5403](https://redirect.github.com/PyO3/pyo3/pull/5403)\n-
          Implement `PyTypeInfo` on `PyWeakrefReference` when using the stable ABI.
          [#&#8203;5404](https://redirect.github.com/PyO3/pyo3/pull/5404)\n- Add `pyo3::sync::RwLockExt`
          trait, analogous to `pyo3::sync::MutexExt` for readwrite locks. [#&#8203;5435](https://redirect.github.com/PyO3/pyo3/pull/5435)\n-
          Add `PyString::from_bytes`. [#&#8203;5437](https://redirect.github.com/PyO3/pyo3/pull/5437)\n-
          Implement `AsRef<[u8]>` for `PyBytes`. [#&#8203;5445](https://redirect.github.com/PyO3/pyo3/pull/5445)\n-
          Add `CastError` and `CastIntoError`. [#&#8203;5468](https://redirect.github.com/PyO3/pyo3/pull/5468)\n-
          Add `PyCapsuleMethods::pointer_checked` and `PyCapsuleMethods::is_valid_checked`.
          [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n- Add `Borrowed::cast`,
          `Borrowed::cast_exact` and `Borrowed::cast_unchecked`. [#&#8203;5475](https://redirect.github.com/PyO3/pyo3/pull/5475)\n-
          Add conversions for `jiff::civil::ISOWeekDate`. [#&#8203;5478](https://redirect.github.com/PyO3/pyo3/pull/5478)\n-
          Add conversions for `&Cstr`, `Cstring` and `Cow<Cstr>`. [#&#8203;5482](https://redirect.github.com/PyO3/pyo3/pull/5482)\n-
          add `#[pyclass(skip_from_py_object)]` option, to opt-out of the `FromPyObject:
          PyClass + Clone` blanket impl. [#&#8203;5488](https://redirect.github.com/PyO3/pyo3/pull/5488)\n-
          Add `PyErr::add_note`. [#&#8203;5489](https://redirect.github.com/PyO3/pyo3/pull/5489)\n-
          Add `FromPyObject` impl for `Cow<Path>` & `Cow<OsStr>`. [#&#8203;5497](https://redirect.github.com/PyO3/pyo3/pull/5497)\n-
          Add `#[pyclass(from_py_object)]` pyclass option, to opt-in to the extraction
          of pyclasses by value (requires `Clone`). [#&#8203;5506](https://redirect.github.com/PyO3/pyo3/pull/5506)\n\n#####
          Changed\n\n- Rework `FromPyObject` trait for flexibility and performance:
          [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n  - Add
          a second lifetime to `FromPyObject`, to allow borrowing data from Python
          objects (e.g. `&str` from Python `str`).\n  - Replace `extract_bound` with
          `extract`, which takes `Borrowed<'a, 'py, PyAny>`.\n- Optimize `FromPyObject`
          implementations for `Vec<u8>` and `[u8; N]` from `bytes` and `bytearray`.
          [#&#8203;5244](https://redirect.github.com/PyO3/pyo3/pull/5244)\n- Deprecate
          `#[pyfn]` attribute. [#&#8203;5384](https://redirect.github.com/PyO3/pyo3/pull/5384)\n-
          Fetch type name dynamically on cast errors instead of using `PyTypeCheck::NAME`.
          [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n- Deprecate
          `PyTypeCheck::NAME` in favour of `PyTypeCheck::classinfo_object` which provides
          the type information at runtime. [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n-
          `PyClassGuard(Mut)` and `PyRef(Mut)` extraction now returns an opaque Rust
          error [#&#8203;5413](https://redirect.github.com/PyO3/pyo3/pull/5413)\n-
          Fetch type name dynamically when exporting types implementing `PyTypeInfo`
          with `#[pymodule_use]`. [#&#8203;5414](https://redirect.github.com/PyO3/pyo3/pull/5414)\n-
          Improve `Debug` representation of `PyBuffer<T>`. [#&#8203;5442](https://redirect.github.com/PyO3/pyo3/pull/5442)\n-
          `experimental-inspect`: change the way introspection data is emitted in
          the binaries to avoid a pointer indirection and simplify parsing. [#&#8203;5450](https://redirect.github.com/PyO3/pyo3/pull/5450)\n-
          Optimize `Py<T>::drop` for the case when attached to the Python interpreter.
          [#&#8203;5454](https://redirect.github.com/PyO3/pyo3/pull/5454)\n- Replace
          `DowncastError` and `DowncastIntoError` with `CastError` and `CastIntoError`.
          [#&#8203;5468](https://redirect.github.com/PyO3/pyo3/pull/5468)\n- Enable
          fast-path for 128-bit integer conversions on `GraalPy`. [#&#8203;5471](https://redirect.github.com/PyO3/pyo3/pull/5471)\n-
          Deprecate `PyAnyMethods::downcast` functions in favour of `Bound::cast`
          functions. [#&#8203;5472](https://redirect.github.com/PyO3/pyo3/pull/5472)\n-
          Make `PyTypeCheck` an `unsafe trait`. [#&#8203;5473](https://redirect.github.com/PyO3/pyo3/pull/5473)\n-
          Deprecate unchecked `PyCapsuleMethods`: `pointer()`, `reference()`, and
          `is_valid()`. [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n-
          Reduce lifetime of return value in `PyCapsuleMethods::reference`. [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n-
          `PyCapsuleMethods::name` now returns `CapsuleName` wrapper instead of `&CStr`.
          [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n- Deprecate
          `import_exception_bound` in favour of `import_exception`. [#&#8203;5480](https://redirect.github.com/PyO3/pyo3/pull/5480)\n-
          `PyList::get_item_unchecked`, `PyTuple::get_item_unchecked`, and `PyTuple::get_borrowed_item_unchecked`
          no longer check for null values at the provided index. [#&#8203;5494](https://redirect.github.com/PyO3/pyo3/pull/5494)\n-
          Allow converting naive datetime into chrono `DateTime<Local>`. [#&#8203;5507](https://redirect.github.com/PyO3/pyo3/pull/5507)\n\n#####
          Removed\n\n- Removed `FromPyObjectBound` trait. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n\n#####
          Fixed\n\n- Fix compilation failure on `wasm32-wasip2`. [#&#8203;5368](https://redirect.github.com/PyO3/pyo3/pull/5368)\n-
          Fix `OsStr` conversion for non-utf8 strings on Windows. [#&#8203;5444](https://redirect.github.com/PyO3/pyo3/pull/5444)\n-
          Fix issue with `cargo vendor` caused by gitignored build artifact `emscripten/pybuilddir.txt`.
          [#&#8203;5456](https://redirect.github.com/PyO3/pyo3/pull/5456)\n- Stop
          leaking `PyMethodDef` instances inside `#[pyfunction]` macro generated code.
          [#&#8203;5459](https://redirect.github.com/PyO3/pyo3/pull/5459)\n- Don't
          export definition of FFI struct `PyObjectObFlagsAndRefcnt` on 32-bit Python
          3.14 (doesn't exist). [#&#8203;5499](https://redirect.github.com/PyO3/pyo3/pull/5499)\n-
          Fix failure to build for `abi3` interpreters on Windows using maturin's
          built-in sysconfig in combination with the `generate-import-lib` feature.
          [#&#8203;5503](https://redirect.github.com/PyO3/pyo3/pull/5503)\n- Fix FFI
          definitions `PyModule_ExecDef` and `PyModule_FromDefAndSpec2` on PyPy. [#&#8203;5529](https://redirect.github.com/PyO3/pyo3/pull/5529)\n\n</details>\n\n<details>\n<summary>PyO3/pyo3-async-runtimes
          (pyo3-async-runtimes)</summary>\n\n### [`v0.28.0`](https://redirect.github.com/PyO3/pyo3-async-runtimes/blob/HEAD/CHANGELOG.md#0280---2026-02-03)\n\n[Compare
          Source](https://redirect.github.com/PyO3/pyo3-async-runtimes/compare/v0.27.0...v0.28.0)\n\n-
          Bump to pyo3 0.28. [#&#8203;76](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/76)\n-
          Check for awaitable instead of coroutine in stream glue [#&#8203;73](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/73)\n-
          Bump MSRV to 1.83.\n- Fix handling of full buffer in `into_stream` functions\n\n###
          [`v0.27.0`](https://redirect.github.com/PyO3/pyo3-async-runtimes/blob/HEAD/CHANGELOG.md#0270---2025-10-20)\n\n[Compare
          Source](https://redirect.github.com/PyO3/pyo3-async-runtimes/compare/v0.26.0...v0.27.0)\n\n-
          Avoid attaching to the runtime when cloning TaskLocals by using std::sync::Arc.
          [#&#8203;62](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/62)\n-
          **Breaking**: Finalize the future without holding GIL inside async-std/tokio
          runtime.\n  Trait `Runtime` now requires `spawn_blocking` function,\n  `future_into_py`
          functions now require future return type to be `Send`.\n  [#&#8203;60](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/60)\n-
          Change pyo3 `downcast` calls to `cast` calls [#&#8203;65](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/65)\n-
          Use `pyo3::intern!` for method calls and `getattr` calls [#&#8203;66](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/66)\n-
          Fix missing LICENSE file in macros crate by [@&#8203;musicinmybrain](https://redirect.github.com/musicinmybrain)
          in [#&#8203;63](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/63)\n-
          Bump to pyo3 0.27. [#&#8203;68](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/68)\n\n</details>\n\n<details>\n<summary>vorner/pyo3-log
          (pyo3-log)</summary>\n\n### [`v0.13.2`](https://redirect.github.com/vorner/pyo3-log/blob/HEAD/CHANGELOG.md#0132)\n\n[Compare
          Source](https://redirect.github.com/vorner/pyo3-log/compare/v0.13.1...v0.13.2)\n\n-
          Support for pyo3 0.27 ([#&#8203;72](https://redirect.github.com/vorner/pyo3-log/issues/72)).\n\n</details>\n\n<details>\n<summary>davidhewitt/pythonize
          (pythonize)</summary>\n\n### [`v0.27.0`](https://redirect.github.com/davidhewitt/pythonize/blob/HEAD/CHANGELOG.md#0270---2025-11-07)\n\n[Compare
          Source](https://redirect.github.com/davidhewitt/pythonize/compare/v0.26.0...v0.27.0)\n\n-
          Update to PyO3 0.27\n\n</details>\n\n---\n\n### Configuration\n\n\U0001F4C5
          **Schedule**: Branch creation - At any time (no schedule defined), Automerge
          - 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 is behind base branch, or you tick the rebase/retry
          checkbox.\n\n\U0001F47B **Immortal**: This PR will be recreated if closed
          unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions)
          if that's undesired.\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/vexxhost/magnum-cluster-api).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNDMuMSIsInVwZGF0ZWRJblZlciI6IjQzLjguNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->\n"
        change_url: https://github.com/vexxhost/magnum-cluster-api/pull/837
        commit_id: c6ab00092f19904b8889c7ec71d5d6f44b5d98ae
        patchset: c6ab00092f19904b8889c7ec71d5d6f44b5d98ae
        project:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/magnum-cluster-api
          name: vexxhost/magnum-cluster-api
          short_name: magnum-cluster-api
          src_dir: src/github.com/vexxhost/magnum-cluster-api
        topic: null
      job: magnum-cluster-api-sonobuoy-v1.35.1-calico
      jobtags: []
      max_attempts: 3
      message: Zml4KGRlcHMpOiB1cGRhdGUgcHlvMwoKVGhpcyBQUiBjb250YWlucyB0aGUgZm9sbG93aW5nIHVwZGF0ZXM6Cgp8IFBhY2thZ2UgfCBUeXBlIHwgVXBkYXRlIHwgQ2hhbmdlIHwKfC0tLXwtLS18LS0tfC0tLXwKfCBbcHlvM10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5bzMvcHlvMykgfCBkZXBlbmRlbmNpZXMgfCBtaW5vciB8IGAwLjI2LjBgIOKGkiBgMC4yOC4wYCB8CnwgW3B5bzMtYXN5bmMtcnVudGltZXNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMtYXN5bmMtcnVudGltZXMpIHwgZGVwZW5kZW5jaWVzIHwgbWlub3IgfCBgMC4yNi4wYCDihpIgYDAuMjguMGAgfAp8IFtweW8zLWxvZ10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3Zvcm5lci9weW8zLWxvZykgfCBkZXBlbmRlbmNpZXMgfCBwYXRjaCB8IGAwLjEzLjFgIOKGkiBgMC4xMy4yYCB8CnwgW3B5dGhvbml6ZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2RhdmlkaGV3aXR0L3B5dGhvbml6ZSkgfCBkZXBlbmRlbmNpZXMgfCBtaW5vciB8IGAwLjI2LjBgIOKGkiBgMC4yNy4wYCB8CgotLS0KCiMjIyBSZWxlYXNlIE5vdGVzCgo8ZGV0YWlscz4KPHN1bW1hcnk+cHlvMy9weW8zIChweW8zKTwvc3VtbWFyeT4KCiMjIyBbYHYwLjI4LjFgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlvMy9weW8zL2Jsb2IvSEVBRC9DSEFOR0VMT0cubWQjMDI4MS0tLTIwMjYtMDItMTQpCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weW8zL3B5bzMvY29tcGFyZS92MC4yOC4wLi4udjAuMjguMSkKCiMjIyMjIEZpeGVkCgotIEZpeCBgKmFyZ3NgIC8gYCoqa3dhcmdzYCBzdXBwb3J0IGluYCBleHBlcmltZW50YWwtYXN5bmNgIGZlYXR1cmUgKHJlZ3Jlc3NlZCBpbiAwLjI4LjApLiBbIyYjODIwMzs1NzcxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTc3MSkKLSBGaXggYGNsaXBweTo6ZGVjbGFyZV9pbnRlcmlvcl9tdXRhYmxlX2NvbnN0YCB3YXJuaW5nIGluc2lkZSBgI1tweWNsYXNzXWAgZ2VuZXJhdGVkIGNvZGUgb24gZW51bXMuIFsjJiM4MjAzOzU3NzJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NzcyKQotIEZpeCBgYW1iaWd1b3VzX2Fzc29jaWF0ZWRfaXRlbXNgIGNvbXBpbGF0aW9uIGVycm9yIHdoZW4gZGVyaXZpbmcgYEZyb21QeU9iamVjdGAgb3IgdXNpbmcgYCNbcHljbGFzcyhmcm9tX3B5X29iamVjdCldYCBtYWNybyBvbiBlbnVtcyB3aXRoIGBFcnJvcmAgdmFyaWFudC4gWyMmIzgyMDM7NTc4NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU3ODQpCi0gRml4IGBfX3F1YWxuYW1lX19gIGZvciBjb21wbGV4IGAjW3B5Y2xhc3NdYCBlbnVtIHZhcmlhbnRzIHRvIGluY2x1ZGUgdGhlIGVudW0gbmFtZS4gWyMmIzgyMDM7NTc5Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU3OTYpCgojIyMgW2B2MC4yOC4wYF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5bzMvcHlvMy9ibG9iL0hFQUQvQ0hBTkdFTE9HLm1kIzAyODAtLS0yMDI2LTAyLTAxKQoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlvMy9weW8zL2NvbXBhcmUvdjAuMjcuMi4uLnYwLjI4LjApCgojIyMjIyBQYWNrYWdpbmcKCi0gQnVtcCBNU1JWIHRvIFJ1c3QgMS44My4gWyMmIzgyMDM7NTUzMV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU1MzEpCi0gQnVtcCBtaW5pbXVtIHN1cHBvcnRlZCBgcXVvdGVgIHZlcnNpb24gdG8gMS4wLjM3LiBbIyYjODIwMzs1NTMxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTUzMSkKLSBCdW1wIHN1cHBvcnRlZCBHcmFhbFB5IHZlcnNpb24gdG8gMjUuMC4gWyMmIzgyMDM7NTU0Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU1NDIpCi0gRHJvcCBgbWVtb2Zmc2V0YCBkZXBlbmRlbmN5LiBbIyYjODIwMzs1NTQ1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTU0NSkKLSBTdXBwb3J0IGZvciBmcmVlLXRocmVhZGVkIFB5dGhvbiBpcyBub3cgb3B0LW91dCByYXRoZXIgdGhhbiBvcHQtaW4uIFsjJiM4MjAzOzU1NjRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTY0KQotIEJ1bXAgYHRhcmdldC1sZXhpY29uYCBkZXBlbmRlbmN5IHRvIDAuMTMuMy4gWyMmIzgyMDM7NTU3MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU1NzEpCi0gRHJvcCBgaW5kb2NgIGFuZCBgdW5pbmRlbnRgIGRlcGVuZGVuY2llcy4gWyMmIzgyMDM7NTYwOF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU2MDgpCgojIyMjIyBBZGRlZAoKLSBBZGQgYF9faW5pdF9fYCBzdXBwb3J0IGluIGAjW3B5bWV0aG9kc11gLiBbIyYjODIwMzs0OTUxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNDk1MSkKLSBFeHBvc2UgYFB5U3VwZXJgIG9uIFB5UHksIEdyYWFsUHkgYW5kIEFCSTMgWyMmIzgyMDM7NDk1MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzQ5NTEpCi0gQWRkIGBQeVN0cmluZzo6ZnJvbV9mbXRgIGFuZCBgcHlfZm9ybWF0IWAgbWFjcm8uIFsjJiM4MjAzOzUxOTldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81MTk5KQotIEFkZCBgI1tweWNsYXNzKG5ldyA9ICJmcm9tX2ZpZWxkcyIpXWAgb3B0aW9uLiBbIyYjODIwMzs1NDIxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQyMSkKLSBBZGQgYHB5bzM6OmJ1ZmZlcjo6UHlVbnR5cGVkQnVmZmVyYCwgYSB0eXBlLWVyYXNlZCBmb3JtIG9mIGBQeUJ1ZmZlcjxUPmAuIFsjJiM4MjAzOzU0NThdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDU4KQotIEFkZCBgUHlCeXRlczo6bmV3X3dpdGhfd3JpdGVyYCBbIyYjODIwMzs1NTE3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTUxNykKLSBBZGQgYFB5Q2xhc3M6Ok5BTUVgLiBbIyYjODIwMzs1NTc5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTU3OSkKLSBBZGQgYHB5bzNfYnVpbGRfY29uZmlnOjphZGRfbGlicHl0aG9uX3JwYXRoX2xpbmtfYXJnc2AuIFsjJiM4MjAzOzU2MjRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NjI0KQotIEFkZCBgUHlCYWNrZWRTdHI6OmNsb25lX3JlZmAgYW5kIGBQeUJhY2tlZEJ5dGVzOjpjbG9uZV9yZWZgIG1ldGhvZHMuIFsjJiM4MjAzOzU2NTRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NjU0KQotIEFkZCBgUHlDYXBzdWxlOjpuZXdfd2l0aF9wb2ludGVyYCBhbmQgYFB5Q2Fwc3VsZTo6bmV3X3dpdGhfcG9pbnRlcl9hbmRfZGVzdHJ1Y3RvcmAgZm9yIGNyZWF0aW5nIGNhcHN1bGVzIHdpdGggcmF3IHBvaW50ZXJzLiBbIyYjODIwMzs1Njg5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTY4OSkKLSBBZGQgYCNbZGVsZXRlcl1gIGF0dHJpYnV0ZSB0byBpbXBsZW1lbnQgcHJvcGVydHkgZGVsZXRlcnMgaW4gYCNbbWV0aG9kc11gLiBbIyYjODIwMzs1Njk5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTY5OSkKLSBBZGQgYEludG9QeU9iamVjdGAgYW5kIGBGcm9tUHlPYmplY3RgIGltcGxlbWVudGF0aW9ucyBmb3IgYHV1aWQ6Ok5vbk5pbFV1aWRgLiBbIyYjODIwMzs1NzA3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTcwNykKLSBBZGQgYFB5QmFja2VkU3RyOjphc19zdHJgIGFuZCBgUHlCYWNrZWRTdHI6OmFzX3B5X3N0cmAgbWV0aG9kcy4gWyMmIzgyMDM7NTcyM10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU3MjMpCi0gQWRkIHN1cHBvcnQgZm9yIHN1YmNsYXNzaW5nIG5hdGl2ZSB0eXBlcyAoYFB5RGljdGAsIGV4Y2VwdGlvbnMsIC4uLikgd2hlbiBidWlsZGluZyBmb3IgYWJpMyBvbiBQeXRob24gMy4xMisuIFsjJiM4MjAzOzU3MzNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NzMzKQotIEFkZCBzdXBwb3J0IGZvciBzdWJjbGFzc2luZyBgUHlMaXN0YCB3aGVuIGJ1aWxkaW5nIGZvciBQeXRob24gMy4xMisuIFsjJiM4MjAzOzU3MzRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NzM0KQotIEZGSSBkZWZpbml0aW9uczoKICAtIEFkZCBGRkkgZGVmaW5pdGlvbnMgYFB5RXZhbF9HZXRGcmFtZUJ1aWx0aW5zYCwgYFB5RXZhbF9HZXRGcmFtZUdsb2JhbHNgIGFuZCBgUHlFdmFsX0dldEZyYW1lTG9jYWxzYCBvbiBQeXRob24gMy4xMyBhbmQgdXAuIFsjJiM4MjAzOzU1OTBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTkwKQogIC0gQWRkIEZGSSBkZWZpbml0aW9ucyBgUHlPYmplY3RfTmV3YCwgYFB5T2JqZWN0X05ld1ZhcmAsIGBQeU9iamVjdF9HQ19SZXNpemVgLCBgUHlPYmplY3RfR0NfTmV3YCwgYW5kIGBQeU9iamVjdF9HQ19OZXdWYXJgLiBbIyYjODIwMzs1NTkxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTU5MSkKICAtIEFkZGVkIEZGSSBkZWZpbml0aW9ucyBhbmQgYW4gdW5zYWZlIFJ1c3QgQVBJIHdyYXBwaW5nIGBQeV9CRUdJTl9DUklUSUNBTF9TRUNUSU9OX01VVEVYYCBhbmQgYFB5X0JFR0lOX0NSSVRJQ0FMX1NFQ1RJT05fTVVURVgyYC4gWyMmIzgyMDM7NTY0Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU2NDIpCiAgLSBBZGQgRkZJIGRlZmluaXRpb24gYFB5RGljdF9HZXRJdGVtU3RyaW5nUmVmYCBvbiBQeXRob24gMy4xMyBhbmQgdXAuIFsjJiM4MjAzOzU2NTldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NjU5KQogIC0gQWRkIEZGSSBkZWZpbml0aW9uIGBQeUl0ZXJfTmV4dEl0ZW1gIG9uIFB5dGhvbiAzLjE0IGFuZCB1cCwgYW5kIGBjb21wYXQ6OlB5SXRlcl9OZXh0SXRlbWAgZm9yIG9sZGVyIHZlcnNpb25zLiBbIyYjODIwMzs1NjYxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTY2MSkKICAtIEFkZCBGRkkgZGVmaW5pdGlvbnMgYFB5VGhyZWFkU3RhdGVfR2V0SW50ZXJwcmV0ZXJgIGFuZCBgUHlUaHJlYWRTdGF0ZV9HZXRJRGAgb24gUHl0aG9uIDMuOSssIGBQeVRocmVhZFN0YXRlX0VudGVyVHJhY2luZ2AgYW5kIGBQeVRocmVhZFN0YXRlX0xlYXZlVHJhY2luZ2Agb24gUHl0aG9uIDMuMTErLCBgUHlUaHJlYWRTdGF0ZV9HZXRVbmNoZWNrZWRgIG9uIFB5dGhvbiAzLjEzKywgYW5kIGBjb21wYXQ6OlB5VGhyZWFkU3RhdGVfR2V0VW5jaGVja2VkYC4gWyMmIzgyMDM7NTcxMV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU3MTEpCiAgLSBBZGQgRkZJIGRlZmluaXRpb25zIGBQeUltcG9ydF9JbXBvcnRNb2R1bGVBdHRyYCBhbmQgYFB5SW1wb3J0X0ltcG9ydE1vZHVsZUF0dHJTdHJpbmdgIG9uIFB5dGhvbiAzLjE0Ky4gWyMmIzgyMDM7NTczN10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU3MzcpCiAgLSBBZGQgRkZJIGRlZmluaXRpb25zIGZvciB0aGUgYFB5QUJJSW5mb2AgYW5kIGBQeU1vZEV4cG9ydGAgQVBJcyBhdmFpbGFibGUgaW4gUHl0aG9uIDMuMTUuIFsjJiM4MjAzOzU3NDZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NzQ2KQotIGBleHBlcmltZW50YWwtaW5zcGVjdGA6CiAgLSBFbWl0IGJhc2UgY2xhc3Nlcy4gWyMmIzgyMDM7NTMzMV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzUzMzEpCiAgLSBFbWl0IGBAdHlwaW5nLmZpbmFsYCBvbiBmaW5hbCBjbGFzc2VzLiBbIyYjODIwMzs1NTUyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTU1MikKICAtIEdlbmVyYXRlIG5lc3RlZCBjbGFzc2VzIGZvciBjb21wbGV4IGVudW1zLiBbIyYjODIwMzs1NzA4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTcwOCkKICAtIEVtaXQgYGFzeW5jYCBrZXl3b3JkIGZvciBhc3luYyBmdW5jdGlvbnMuIFsjJiM4MjAzOzU3MzFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NzMxKQoKIyMjIyMgQ2hhbmdlZAoKLSBDYWxsIGBzeXMudW5yYWlzYWJsZWhvb2tgIGluc3RlYWQgb2YgYFB5RXJyX1ByaW50YCBpZiBwYW5pY2tpbmcgb24gbnVsbCBGRkkgcG9pbnRlciBpbiBgQm91bmRgLCBgQm9ycm93ZWRgIGFuZCBgUHlgIGNvbnN0cnVjdG9ycy4gWyMmIzgyMDM7NTQ5Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0OTYpCi0gVXNlIFBFUC00ODkgbXVsdGktcGhhc2UgaW5pdGlhbGl6YXRpb24gZm9yIGAjW3B5bW9kdWxlXWAuIFsjJiM4MjAzOzU1MjVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTI1KQotIERlcHJlY2F0ZSBpbXBsaWNpdCBieS12YWx1ZSBpbXBsZW1lbnRhdGlvbiBvZiBgRnJvbVB5T2JqZWN0YCBmb3IgYCNbcHljbGFzc11gLiBbIyYjODIwMzs1NTUwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTU1MCkKLSBEZXByZWNhdGUgYFB5VHlwZUluZm86Ok5BTUVgIGFuZCBgUHlUeXBlSW5mbzo6TU9EVUxFYC4gWyMmIzgyMDM7NTU3OV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU1NzkpCi0gRGVwcmVjYXRlIGBQeTxUPjo6ZnJvbV97b3duZWQsYm9ycm93ZWR9W29yX3tlcnIsb3B0fV1gIGNvbnN0cnVjdG9ycyBmcm9tIHJhdyBwb2ludGVyLiBbIyYjODIwMzs1NTg1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTU4NSkKLSBEZXByZWNhdGUgRkZJIGRlZmluaXRpb25zIGBQeUV2YWxfQWNxdWlyZUxvY2tgIGFuZCBgUHlFdmFsX1JlbGVhc2VMb2NrYC4gWyMmIzgyMDM7NTU5MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU1OTApCi0gUmVsYXggYCdweTogJ2FgIGJvdW5kIGluIGBQeTo6ZXh0cmFjdGAuIFsjJiM4MjAzOzU1OTRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTk0KQotIEFkZCBhIGBUOiBQeVR5cGVDaGVja2AgYm91bmQgdG8gdGhlIGBJbnRvUHlPYmplY3RgIGltcGxlbWVudGF0aW9ucyBvbiBgQm91bmQ8VD5gLCBgQm9ycm93ZWQ8VD5gIGFuZCBgUHk8VD5gLiBbIyYjODIwMzs1NjQwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTY0MCkKLSBUaGUgYHdpdGhfY3JpdGljYWxfc2VjdGlvbmAgYW5kIGB3aXRoX2NyaXRpY2FsX3NlY3Rpb24yYCBmdW5jdGlvbnMgYXJlIG1vdmVkIHRvIGBweW8zOjpzeW5jOjpjcml0aWNhbF9zZWN0aW9uYC4gWyMmIzgyMDM7NTY0Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU2NDIpCi0gVXNlIGBQeUl0ZXJfTmV4dEl0ZW1gIGluIGBQeUl0ZXJhdG9yOjpuZXh0YCBpbXBsZW1lbnRhdGlvbi4gWyMmIzgyMDM7NTY2MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU2NjEpCi0gYEludG9QeU9iamVjdGAgZm9yIHNpbXBsZSBlbnVtcyBub3cgdXNlcyBhIHNpbmdsZXRvbiB2YWx1ZSwgYWxsb3dpbmcgaWRlbnRpdHkgKHB5dGhvbiBgaXNgKSBjb21wYXJpc29ucy4gWyMmIzgyMDM7NTY2NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU2NjUpCi0gQWxsb3cgYW55IGBTZXF1ZW5jZVtpbnRdYCBpbiBgRnJvbVB5T2JqZWN0YCBvbiBgQ293PFt1OF0+YCBhbmQgY2hhbmdlIHRoZSBlcnJvciB0eXBlIHRvIGBQeUVycmAuIFsjJiM4MjAzOzU2NjddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NjY3KQotIGBhc3luY2AgcHltZXRob2RzIG5vdyBib3Jyb3cgYHNlbGZgIG9ubHkgZm9yIHRoZSBkdXJhdGlvbiBvZiBhd2FpdGluZyB0aGUgZnV0dXJlLCBub3QgdGhlIGVudGlyZSBtZXRob2QgY2FsbC4gWyMmIzgyMDM7NTY4NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU2ODQpCi0gQ2hhbmdlIGBDYXN0RXJyb3JgIGZvcm1hdHRlZCBtZXNzYWdlIHRvIGRpcmVjdGx5IGRlc2NyaWJlIHRoZSAiaXMgbm90IGFuIGluc3RhbmNlIG9mIiBmYWlsdXJlIGNvbmRpdGlvbi4gWyMmIzgyMDM7NTY5M10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU2OTMpCi0gQWRkIGAjW2lubGluZV1gIGhpbnRzIHRvIG1hbnkgbWV0aG9kcyBvbiBgUHlCYWNrZWRTdHJgLiBbIyYjODIwMzs1NzIzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTcyMykKLSBSZW1vdmUgcmVkdW5kYW50IGludGVybmFsIGNvdW50ZXJzIGZyb20gYEJvdW5kU2V0SXRlcmF0b3JgIGFuZCBgQm91bmRGcm96ZW5TZXRJdGVyYXRvcmAuIFsjJiM4MjAzOzU3MjVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NzI1KQotIEltcGxlbWVudCBgUHlJdGVyYXRvcjo6c2l6ZV9oaW50YCBvbiBhYmkzIGJ1aWxkcyAocHJldmlvdXNseSB3YXMgb25seSBvbiB1bmxpbWl0ZWQgQVBJIGJ1aWxkcykuIFsjJiM4MjAzOzU3MjddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NzI3KQotIERlcHJlY2F0ZSBGRkkgZGVmaW5pdGlvbiBgUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9ja2AgKGRlcHJlY2F0ZWQgaW4gUHl0aG9uIDMuMTMpLiBbIyYjODIwMzs1NzM3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTczNykKLSBgI1tuZXddYCBjYW4gbm93IHJldHVybiBhcmJpdHJhcnkgUHl0aG9uIG9iamVjdHMuIFsjJiM4MjAzOzU3MzldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NzM5KQotIGBleHBlcmltZW50YWwtaW5zcGVjdGA6CiAgLSBJbnRyb2R1Y2UgYFR5cGVIaW50YCBhbmQgbWFrZSB1c2Ugb2YgaXQgdG8gZW5jb2RlIHR5cGUgaGludCBhbm5vdGF0aW9ucy4gWyMmIzgyMDM7NTQzOF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0MzgpCiAgLSBSZW5hbWUgYFB5VHlwZXtJbmZvLENoZWNrfTo6VFlQRV9JTkZPYCBpbnRvIGBQeVR5cGV7SW5mbyxDaGVja306OlRZUEVfSElOVGAuIFsjJiM4MjAzOzU0MzhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDM4KSBbIyYjODIwMzs1NjE5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTYxOSkgWyMmIzgyMDM7NTY0MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU2NDEpCiAgLSBGaWxsIGFubm90YXRpb25zIG9uIGZ1bmN0aW9uIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlcyBmb3IgYWxsIHR5cGVzIHN1cHBvcnRlZCBuYXRpdmVseSBieSBQeU8zLiBbIyYjODIwMzs1NjM0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTYzNCkgWyMmIzgyMDM7NTYzN10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU2MzcpIFsjJiM4MjAzOzU2MzldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NjM5KQogIC0gVXNlIGBfdHlwZXNoZWQuSW5jb21wbGV0ZWAgaW5zdGVhZCBvZiBgdHlwaW5nLkFueWAgYXMgZGVmYXVsdCB0eXBlIGhpbnQsIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNwb3QgaW5jb21wbGV0ZSB0cmFpdCBpbXBsZW1lbnRhdGlvbnMuIFsjJiM4MjAzOzU3NDRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NzQ0KQogIC0gVXNlIGdlbmVyYWwgUHl0aG9uIGV4cHJlc3Npb24gc3ludGF4IGZvciB0eXBlIGhpbnRzLiBbIyYjODIwMzs1NjcxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTY3MSkKCiMjIyMjIFJlbW92ZWQKCi0gUmVtb3ZlIGFsbCBmdW5jdGlvbmFsaXR5IGRlcHJlY2F0ZWQgaW4gUHlPMyAwLjI1IGFuZCAwLjI2LiBbIyYjODIwMzs1NzQwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTc0MCkKLSBGRkkgZGVmaW5pdGlvbnM6CiAgLSBSZW1vdmUgRkZJIGRlZmluaXRpb24gYFB5RXZhbF9HZXRDYWxsU3RhdHNgIChyZW1vdmVkIGZyb20gQ1B5dGhvbiBpbiBQeXRob24gMy43KS4gWyMmIzgyMDM7NTU5MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU1OTApCiAgLSBSZW1vdmUgRkZJIGRlZmluaXRpb25zIGBQeUV2YWxfQWNxdWlyZUxvY2tgIGFuZCBgUHlFdmFsX1JlbGVhc2VMb2NrYCBvbiBQeXRob24gMy4xMyBhbmQgdXAuIFsjJiM4MjAzOzU1OTBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTkwKQogIC0gUmVtb3ZlIHByaXZhdGUgRkZJIGRlZmluaXRpb25zIGBfUHlPYmplY3RfTmV3YCwgYF9QeU9iamVjdF9OZXdWYXJgLCBgX1B5T2JqZWN0X0dDX1Jlc2l6ZWAsIGBfUHlPYmplY3RfR0NfTmV3YCwgYW5kIGBfUHlPYmplY3RfR0NfTmV3VmFyYC4gWyMmIzgyMDM7NTU5MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU1OTEpCiAgLSBSZW1vdmUgcHJpdmF0ZSBGRkkgZGVmaW5pdGlvbnMgYF9QeURpY3RfU2V0SXRlbV9Lbm93bkhhc2hgLCBgX1B5RGljdF9OZXh0YCwgYF9QeURpY3RfTmV3UHJlc2l6ZWRgLCBgX1B5RGljdF9Db250YWluc19Lbm93bkhhc2hgLCBhbmQgYF9QeURpY3RfQ29udGFpbnNgLiBbIyYjODIwMzs1NjU5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTY1OSkKICAtIFJlbW92ZSBwcml2YXRlIEZGSSBkZWZpbml0aW9ucyBgX1B5RnJhbWVFdmFsRnVuY3Rpb25gLCBgX1B5SW50ZXJwcmV0ZXJTdGF0ZV9HZXRFdmFsRnJhbWVGdW5jYCBhbmQgYF9QeUludGVycHJldGVyU3RhdGVfU2V0RXZhbEZyYW1lRnVuY2AuIFsjJiM4MjAzOzU3MTFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NzExKQogIC0gUmVtb3ZlIHByaXZhdGUgRkZJIGRlZmluaXRpb25zIGBfUHlJbXBvcnRfSXNJbml0aWFsaXplZGAsIGBfUHlJbXBvcnRfU2V0TW9kdWxlYCwgYF9QeUltcG9ydF9TZXRNb2R1bGVTdHJpbmdgLCBgX1B5SW1wb3J0X0FjcXVpcmVMb2NrYCwgYF9QeUltcG9ydF9SZWxlYXNlTG9ja2AsIGBfUHlJbXBvcnRfRmluZEJ1aWx0aW5gLCBgX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb25PYmplY3RgLCBgX1B5SW1wb3J0X0ZpeHVwQnVpbHRpbmAsIGFuZCBgX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uT2JqZWN0YC4gWyMmIzgyMDM7NTczN10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU3MzcpCgojIyMjIyBGaXhlZAoKLSBGaXggYFB5TW9kdWxlTWV0aG9kczo6YWRkX3N1Ym1vZHVsZSgpYCB0byB1c2UgdGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgc3VibW9kdWxlIG5hbWUgYXMgdGhlIGF0dHJpYnV0ZSBuYW1lIG9uIHRoZSBwYXJlbnQgbW9kdWxlIGluc3RlYWQgb2YgdXNpbmcgdGhlIGZ1bGwgbmFtZS4gWyMmIzgyMDM7NTM3NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzUzNzUpCi0gTGluayB3aXRoIGxpYnB5dGhvbiBmb3IgQ3lnd2luIGV4dGVuc2lvbiBtb2R1bGVzLiBbIyYjODIwMzs1NTcxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTU3MSkKLSBMaW5rIGFnYWluc3QgdGhlIGxpbWl0ZWQgQVBJIERMTCBmb3IgQ3lnd2luIHdoZW4gYWJpMyBpcyB1c2VkLiBbIyYjODIwMzs1NTc0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTU3NCkKLSBIYW5kbGUgZXJyb3JzIGluIGBQeUl0ZXJhdG9yYCB3aGVuIGNhbGxpbmcgYHNpemVfaGludGAgWyMmIzgyMDM7NTYwNF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU2MDQpCi0gTGluayB3aXRoIGxpYnB5dGhvbiBmb3IgaU9TIGV4dGVuc2lvbiBtb2R1bGVzLiBbIyYjODIwMzs1NjA1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTYwNSkKLSBDb3JyZWN0IGBJbnRvUHlPYmplY3RgIG91dHB1dCB0eXBlIG9mIGBQeUJhY2tlZFN0cmAgdG8gYmUgYFB5U3RyaW5nYCwgbm90IGBQeUFueWAuIFsjJiM4MjAzOzU2NTVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NjU1KQotIEZpeCBgYXN5bmNgIGZ1bmN0aW9ucyB0byByZXR1cm4gYE5vbmVgIHJhdGhlciB0aGFuIGVtcHR5IHR1cGxlIGAoKWAuIFsjJiM4MjAzOzU2ODVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81Njg1KQotIEZpeCBjb21waWxlIGVycm9yIHdoZW4gdXNpbmcgcmVmZXJlbmNlcyB0byBgI1tweWNsYXNzXWAgdHlwZXMgKGUuZy4gYCZNeUNsYXNzYCkgYXMgYXJndW1lbnRzIHRvIGFzeW5jIGAjW3B5ZnVuY3Rpb25dYHMuIFsjJiM4MjAzOzU3MjVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NzI1KQotIEZGSSBkZWZpbml0aW9uczoKICAtIEZpeCBGRkkgZGVmaW5pdGlvbiBgUHlNZW1iZXJEZXNjck9iamVjdC5kX21lbWJlcmAgdG8gdXNlIGBQeU1lbWJlckRlZmAgZm9yIFB5dGhvbiAzLjExKyAod2FzIGluY29ycmVjdGx5IGBQeUdldFNldERlZmApLiBbIyYjODIwMzs1NjQ3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTY0NykKICAtIE1hcmsgRkZJIGRlZmluaXRpb24gYFB5VGhyZWFkU3RhdGVfR2V0RnJhbWVgIGF2YWlsYWJsZSB3aXRoIGFiaTMgaW4gMy4xMCsuIFsjJiM4MjAzOzU3MTFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NzExKQogIC0gRml4IEZGSSBkZWZpbml0aW9uIGBQeUltcG9ydF9HZXRNb2R1bGVgIG9uIFB5UHkuIFsjJiM4MjAzOzU3MzddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NzM3KQotIGBleHBlcmltZW50YWwtaW5zcGVjdGA6CiAgLSBmaXggYF9fbmV3X19gIHJldHVybiB0eXBlIHRvIGJlIHRoZSBidWlsdCBvYmplY3QgdHlwZSBhbmQgbm90IGBOb25lYC4gWyMmIzgyMDM7NTU1NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU1NTUpCiAgLSBmaXggaW1wb3J0cyBvZiBkZWNvcmF0b3JzLiBbIyYjODIwMzs1NjE4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTYxOCkKICAtIGZpeCB0aGUgcmV0dXJuIHR5cGUgYW5ub3RhdGlvbiBvZiBgUHlSZXN1bHQ8KCk+YCAobXVzdCBiZSBgTm9uZWAgYW5kIG5vdCBgdHVwbGVgKSBbIyYjODIwMzs1Njc0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTY3NCkKCiMjIyBbYHYwLjI3LjJgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlvMy9weW8zL2Jsb2IvSEVBRC9DSEFOR0VMT0cubWQjMDI3Mi0tLTIwMjUtMTEtMzApCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weW8zL3B5bzMvY29tcGFyZS92MC4yNy4xLi4udjAuMjcuMikKCiMjIyMjIENoYW5nZWQKCi0gRGlzYWJsZSBzdWJjbGFzc2luZyBgUHlEaWN0YCBvbiBHcmFhbFB5ICh1bnN1cHBvcnRlZCBmb3Igbm93LCBtYXkgY3Jhc2ggYXQgcnVudGltZSkuIFsjJiM4MjAzOzU2NTNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NjUzKQoKIyMjIyMgRml4ZWQKCi0gRml4IGNyYXNoIHdoZW4gY29tcGlsaW5nIG9uIFJ1c3QgMS45Misgd2l0aCBib3RoIGRlYnVnIGFzc2VydGlvbnMgYW5kIG9wdGltaXphdGlvbnMgZW5hYmxlZC4gWyMmIzgyMDM7NTYzOF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU2MzgpCi0gRml4IEZGSSBkZWZpbml0aW9uIG9mIGBQeURpY3RPYmplY3RgIG9uIFB5UHkuIFsjJiM4MjAzOzU2NTNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NjUzKQoKIyMjIFtgdjAuMjcuMWBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weW8zL3B5bzMvYmxvYi9IRUFEL0NIQU5HRUxPRy5tZCMwMjcxLS0tMjAyNS0xMC0yMSkKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5bzMvcHlvMy9jb21wYXJlL3YwLjI3LjAuLi52MC4yNy4xKQoKIyMjIyMgRml4ZWQKCi0gRml4IGBjbGlwcHk6ZGVjbGFyZV9pbnRlcmlvcl9tdXRhYmxlX2NvbnN0YCB3YXJuaW5nIGZyb20gYCNbcHlmdW5jdGlvbl1gLiBbIyYjODIwMzs1NTM4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTUzOCkKLSBFeHBvc2UgYHB5bzM6OnR5cGVzOjpQeVNlbmRSZXN1bHRgIGluIHB1YmxpYyBBUEkuIFsjJiM4MjAzOzU1MzldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTM5KQoKIyMjIFtgdjAuMjcuMGBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weW8zL3B5bzMvYmxvYi9IRUFEL0NIQU5HRUxPRy5tZCMwMjcwLS0tMjAyNS0xMC0xOSkKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5bzMvcHlvMy9jb21wYXJlL3YwLjI2LjAuLi52MC4yNy4wKQoKIyMjIyMgUGFja2FnaW5nCgotIEV4dGVuZCByYW5nZSBvZiBzdXBwb3J0ZWQgdmVyc2lvbnMgb2YgYGhhc2hicm93bmAgb3B0aW9uYWwgZGVwZW5kZW5jeSB0byBpbmNsdWRlIHZlcnNpb24gMC4xNi4gWyMmIzgyMDM7NTQyOF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0MjgpCi0gQnVtcCBvcHRpb25hbCBgbnVtLWJpZ2ludGAgZGVwZW5kZW5jeSBtaW5pbXVtIHZlcnNpb24gdG8gMC40LjQuIFsjJiM4MjAzOzU0NzFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDcxKQotIFRlc3QgYWdhaW5zdCBQeXRob24gMy4xNCBmaW5hbCByZWxlYXNlLiBbIyYjODIwMzs1NDk5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ5OSkKLSBEcm9wIHN1cHBvcnQgZm9yIFB5UHkgMy45IGFuZCAzLjEwLiBbIyYjODIwMzs1NTE2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTUxNikKLSBQcm92aWRlIGEgYmV0dGVyIGVycm9yIG1lc3NhZ2Ugd2hlbiBidWlsZGluZyBhbiBvdXRkYXRlZCBQeU8zIGZvciBhIHRvby1uZXcgUHl0aG9uIHZlcnNpb24uIFsjJiM4MjAzOzU1MTldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTE5KQoKIyMjIyMgQWRkZWQKCi0gQWRkIGBGcm9tUHlPYmplY3RPd25lZGAgYXMgY29udmVuaWVudCB0cmFpdCBib3VuZCBmb3IgYEZyb21QeU9iamVjdGAgd2hlbiB0aGUgZGF0YSBpcyBub3QgYm9ycm93ZWQgZnJvbSBQeXRob24uIFsjJiM4MjAzOzQzOTBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC80MzkwKQotIEFkZCBgQm9ycm93ZWQ6OmV4dHJhY3RgLCBzYW1lIGFzIGBQeUFueU1ldGhvZHM6OmV4dHJhY3RgLCBidXQgZG9lcyBub3QgcmVzdHJpY3QgdGhlIGxpZmV0aW1lIGJ5IGRlcmVmLiBbIyYjODIwMzs0MzkwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNDM5MCkKLSBgZXhwZXJpbWVudGFsLWluc3BlY3RgOiBiYXNpYyBzdXBwb3J0IGZvciBgI1tkZXJpdmUoSW50b1B5T2JqZWN0KV1gIChubyBzdHJ1Y3QgZmllbGRzIHN1cHBvcnQgeWV0KS4gWyMmIzgyMDM7NTM2NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzUzNjUpCi0gYGV4cGVyaW1lbnRhbC1pbnNwZWN0YDogc3VwcG9ydCBgI1tweW8zKGdldCwgc2V0KV1gIGFuZCBgI1tweWNsYXNzKGdldF9hbGwsIHNldF9hbGwpXWAuIFsjJiM4MjAzOzUzNzBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81MzcwKQotIEFkZCBgUHlUeXBlQ2hlY2s6OmNsYXNzaW5mb19vYmplY3RgIHRoYXQgcmV0dXJucyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBhcyBwYXJhbWV0ZXIgaW4gYGlzaW5zdGFuY2VgIG9yIGBpc3N1YmNsYXNzYC4gWyMmIzgyMDM7NTM4N10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzUzODcpCi0gSW1wbGVtZW50IGBQeVR5cGVJbmZvYCBvbiBgZGF0ZXRpbWUuKmAgdHlwZXMgZXZlbiB3aGVuIHRoZSBsaW1pdGVkIEFQSSBpcyBlbmFibGVkLiBbIyYjODIwMzs1Mzg4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTM4OCkKLSBJbXBsZW1lbnQgYFB5VHlwZUluZm9gIG9uIGBQeUl0ZXJhdG9yYCwgYFB5TWFwcGluZ2AgYW5kIGBQeVNlcXVlbmNlYC4gWyMmIzgyMDM7NTQwMl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0MDIpCi0gSW1wbGVtZW50IGBQeVR5cGVJbmZvYCBvbiBgUHlDb2RlYCB3aGVuIHVzaW5nIHRoZSBzdGFibGUgQUJJLiBbIyYjODIwMzs1NDAzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQwMykKLSBJbXBsZW1lbnQgYFB5VHlwZUluZm9gIG9uIGBQeVdlYWtyZWZSZWZlcmVuY2VgIHdoZW4gdXNpbmcgdGhlIHN0YWJsZSBBQkkuIFsjJiM4MjAzOzU0MDRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDA0KQotIEFkZCBgcHlvMzo6c3luYzo6UndMb2NrRXh0YCB0cmFpdCwgYW5hbG9nb3VzIHRvIGBweW8zOjpzeW5jOjpNdXRleEV4dGAgZm9yIHJlYWR3cml0ZSBsb2Nrcy4gWyMmIzgyMDM7NTQzNV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0MzUpCi0gQWRkIGBQeVN0cmluZzo6ZnJvbV9ieXRlc2AuIFsjJiM4MjAzOzU0MzddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDM3KQotIEltcGxlbWVudCBgQXNSZWY8W3U4XT5gIGZvciBgUHlCeXRlc2AuIFsjJiM4MjAzOzU0NDVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDQ1KQotIEFkZCBgQ2FzdEVycm9yYCBhbmQgYENhc3RJbnRvRXJyb3JgLiBbIyYjODIwMzs1NDY4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ2OCkKLSBBZGQgYFB5Q2Fwc3VsZU1ldGhvZHM6OnBvaW50ZXJfY2hlY2tlZGAgYW5kIGBQeUNhcHN1bGVNZXRob2RzOjppc192YWxpZF9jaGVja2VkYC4gWyMmIzgyMDM7NTQ3NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0NzQpCi0gQWRkIGBCb3Jyb3dlZDo6Y2FzdGAsIGBCb3Jyb3dlZDo6Y2FzdF9leGFjdGAgYW5kIGBCb3Jyb3dlZDo6Y2FzdF91bmNoZWNrZWRgLiBbIyYjODIwMzs1NDc1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ3NSkKLSBBZGQgY29udmVyc2lvbnMgZm9yIGBqaWZmOjpjaXZpbDo6SVNPV2Vla0RhdGVgLiBbIyYjODIwMzs1NDc4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ3OCkKLSBBZGQgY29udmVyc2lvbnMgZm9yIGAmQ3N0cmAsIGBDc3RyaW5nYCBhbmQgYENvdzxDc3RyPmAuIFsjJiM4MjAzOzU0ODJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDgyKQotIGFkZCBgI1tweWNsYXNzKHNraXBfZnJvbV9weV9vYmplY3QpXWAgb3B0aW9uLCB0byBvcHQtb3V0IG9mIHRoZSBgRnJvbVB5T2JqZWN0OiBQeUNsYXNzICsgQ2xvbmVgIGJsYW5rZXQgaW1wbC4gWyMmIzgyMDM7NTQ4OF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0ODgpCi0gQWRkIGBQeUVycjo6YWRkX25vdGVgLiBbIyYjODIwMzs1NDg5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ4OSkKLSBBZGQgYEZyb21QeU9iamVjdGAgaW1wbCBmb3IgYENvdzxQYXRoPmAgJiBgQ293PE9zU3RyPmAuIFsjJiM4MjAzOzU0OTddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDk3KQotIEFkZCBgI1tweWNsYXNzKGZyb21fcHlfb2JqZWN0KV1gIHB5Y2xhc3Mgb3B0aW9uLCB0byBvcHQtaW4gdG8gdGhlIGV4dHJhY3Rpb24gb2YgcHljbGFzc2VzIGJ5IHZhbHVlIChyZXF1aXJlcyBgQ2xvbmVgKS4gWyMmIzgyMDM7NTUwNl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU1MDYpCgojIyMjIyBDaGFuZ2VkCgotIFJld29yayBgRnJvbVB5T2JqZWN0YCB0cmFpdCBmb3IgZmxleGliaWxpdHkgYW5kIHBlcmZvcm1hbmNlOiBbIyYjODIwMzs0MzkwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNDM5MCkKICAtIEFkZCBhIHNlY29uZCBsaWZldGltZSB0byBgRnJvbVB5T2JqZWN0YCwgdG8gYWxsb3cgYm9ycm93aW5nIGRhdGEgZnJvbSBQeXRob24gb2JqZWN0cyAoZS5nLiBgJnN0cmAgZnJvbSBQeXRob24gYHN0cmApLgogIC0gUmVwbGFjZSBgZXh0cmFjdF9ib3VuZGAgd2l0aCBgZXh0cmFjdGAsIHdoaWNoIHRha2VzIGBCb3Jyb3dlZDwnYSwgJ3B5LCBQeUFueT5gLgotIE9wdGltaXplIGBGcm9tUHlPYmplY3RgIGltcGxlbWVudGF0aW9ucyBmb3IgYFZlYzx1OD5gIGFuZCBgW3U4OyBOXWAgZnJvbSBgYnl0ZXNgIGFuZCBgYnl0ZWFycmF5YC4gWyMmIzgyMDM7NTI0NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzUyNDQpCi0gRGVwcmVjYXRlIGAjW3B5Zm5dYCBhdHRyaWJ1dGUuIFsjJiM4MjAzOzUzODRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81Mzg0KQotIEZldGNoIHR5cGUgbmFtZSBkeW5hbWljYWxseSBvbiBjYXN0IGVycm9ycyBpbnN0ZWFkIG9mIHVzaW5nIGBQeVR5cGVDaGVjazo6TkFNRWAuIFsjJiM4MjAzOzUzODddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81Mzg3KQotIERlcHJlY2F0ZSBgUHlUeXBlQ2hlY2s6Ok5BTUVgIGluIGZhdm91ciBvZiBgUHlUeXBlQ2hlY2s6OmNsYXNzaW5mb19vYmplY3RgIHdoaWNoIHByb3ZpZGVzIHRoZSB0eXBlIGluZm9ybWF0aW9uIGF0IHJ1bnRpbWUuIFsjJiM4MjAzOzUzODddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81Mzg3KQotIGBQeUNsYXNzR3VhcmQoTXV0KWAgYW5kIGBQeVJlZihNdXQpYCBleHRyYWN0aW9uIG5vdyByZXR1cm5zIGFuIG9wYXF1ZSBSdXN0IGVycm9yIFsjJiM4MjAzOzU0MTNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDEzKQotIEZldGNoIHR5cGUgbmFtZSBkeW5hbWljYWxseSB3aGVuIGV4cG9ydGluZyB0eXBlcyBpbXBsZW1lbnRpbmcgYFB5VHlwZUluZm9gIHdpdGggYCNbcHltb2R1bGVfdXNlXWAuIFsjJiM4MjAzOzU0MTRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDE0KQotIEltcHJvdmUgYERlYnVnYCByZXByZXNlbnRhdGlvbiBvZiBgUHlCdWZmZXI8VD5gLiBbIyYjODIwMzs1NDQyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ0MikKLSBgZXhwZXJpbWVudGFsLWluc3BlY3RgOiBjaGFuZ2UgdGhlIHdheSBpbnRyb3NwZWN0aW9uIGRhdGEgaXMgZW1pdHRlZCBpbiB0aGUgYmluYXJpZXMgdG8gYXZvaWQgYSBwb2ludGVyIGluZGlyZWN0aW9uIGFuZCBzaW1wbGlmeSBwYXJzaW5nLiBbIyYjODIwMzs1NDUwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ1MCkKLSBPcHRpbWl6ZSBgUHk8VD46OmRyb3BgIGZvciB0aGUgY2FzZSB3aGVuIGF0dGFjaGVkIHRvIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIuIFsjJiM4MjAzOzU0NTRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDU0KQotIFJlcGxhY2UgYERvd25jYXN0RXJyb3JgIGFuZCBgRG93bmNhc3RJbnRvRXJyb3JgIHdpdGggYENhc3RFcnJvcmAgYW5kIGBDYXN0SW50b0Vycm9yYC4gWyMmIzgyMDM7NTQ2OF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0NjgpCi0gRW5hYmxlIGZhc3QtcGF0aCBmb3IgMTI4LWJpdCBpbnRlZ2VyIGNvbnZlcnNpb25zIG9uIGBHcmFhbFB5YC4gWyMmIzgyMDM7NTQ3MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0NzEpCi0gRGVwcmVjYXRlIGBQeUFueU1ldGhvZHM6OmRvd25jYXN0YCBmdW5jdGlvbnMgaW4gZmF2b3VyIG9mIGBCb3VuZDo6Y2FzdGAgZnVuY3Rpb25zLiBbIyYjODIwMzs1NDcyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ3MikKLSBNYWtlIGBQeVR5cGVDaGVja2AgYW4gYHVuc2FmZSB0cmFpdGAuIFsjJiM4MjAzOzU0NzNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDczKQotIERlcHJlY2F0ZSB1bmNoZWNrZWQgYFB5Q2Fwc3VsZU1ldGhvZHNgOiBgcG9pbnRlcigpYCwgYHJlZmVyZW5jZSgpYCwgYW5kIGBpc192YWxpZCgpYC4gWyMmIzgyMDM7NTQ3NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0NzQpCi0gUmVkdWNlIGxpZmV0aW1lIG9mIHJldHVybiB2YWx1ZSBpbiBgUHlDYXBzdWxlTWV0aG9kczo6cmVmZXJlbmNlYC4gWyMmIzgyMDM7NTQ3NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0NzQpCi0gYFB5Q2Fwc3VsZU1ldGhvZHM6Om5hbWVgIG5vdyByZXR1cm5zIGBDYXBzdWxlTmFtZWAgd3JhcHBlciBpbnN0ZWFkIG9mIGAmQ1N0cmAuIFsjJiM4MjAzOzU0NzRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDc0KQotIERlcHJlY2F0ZSBgaW1wb3J0X2V4Y2VwdGlvbl9ib3VuZGAgaW4gZmF2b3VyIG9mIGBpbXBvcnRfZXhjZXB0aW9uYC4gWyMmIzgyMDM7NTQ4MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0ODApCi0gYFB5TGlzdDo6Z2V0X2l0ZW1fdW5jaGVja2VkYCwgYFB5VHVwbGU6OmdldF9pdGVtX3VuY2hlY2tlZGAsIGFuZCBgUHlUdXBsZTo6Z2V0X2JvcnJvd2VkX2l0ZW1fdW5jaGVja2VkYCBubyBsb25nZXIgY2hlY2sgZm9yIG51bGwgdmFsdWVzIGF0IHRoZSBwcm92aWRlZCBpbmRleC4gWyMmIzgyMDM7NTQ5NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0OTQpCi0gQWxsb3cgY29udmVydGluZyBuYWl2ZSBkYXRldGltZSBpbnRvIGNocm9ubyBgRGF0ZVRpbWU8TG9jYWw+YC4gWyMmIzgyMDM7NTUwN10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU1MDcpCgojIyMjIyBSZW1vdmVkCgotIFJlbW92ZWQgYEZyb21QeU9iamVjdEJvdW5kYCB0cmFpdC4gWyMmIzgyMDM7NDM5MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzQzOTApCgojIyMjIyBGaXhlZAoKLSBGaXggY29tcGlsYXRpb24gZmFpbHVyZSBvbiBgd2FzbTMyLXdhc2lwMmAuIFsjJiM4MjAzOzUzNjhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81MzY4KQotIEZpeCBgT3NTdHJgIGNvbnZlcnNpb24gZm9yIG5vbi11dGY4IHN0cmluZ3Mgb24gV2luZG93cy4gWyMmIzgyMDM7NTQ0NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0NDQpCi0gRml4IGlzc3VlIHdpdGggYGNhcmdvIHZlbmRvcmAgY2F1c2VkIGJ5IGdpdGlnbm9yZWQgYnVpbGQgYXJ0aWZhY3QgYGVtc2NyaXB0ZW4vcHlidWlsZGRpci50eHRgLiBbIyYjODIwMzs1NDU2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ1NikKLSBTdG9wIGxlYWtpbmcgYFB5TWV0aG9kRGVmYCBpbnN0YW5jZXMgaW5zaWRlIGAjW3B5ZnVuY3Rpb25dYCBtYWNybyBnZW5lcmF0ZWQgY29kZS4gWyMmIzgyMDM7NTQ1OV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0NTkpCi0gRG9uJ3QgZXhwb3J0IGRlZmluaXRpb24gb2YgRkZJIHN0cnVjdCBgUHlPYmplY3RPYkZsYWdzQW5kUmVmY250YCBvbiAzMi1iaXQgUHl0aG9uIDMuMTQgKGRvZXNuJ3QgZXhpc3QpLiBbIyYjODIwMzs1NDk5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ5OSkKLSBGaXggZmFpbHVyZSB0byBidWlsZCBmb3IgYGFiaTNgIGludGVycHJldGVycyBvbiBXaW5kb3dzIHVzaW5nIG1hdHVyaW4ncyBidWlsdC1pbiBzeXNjb25maWcgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgYGdlbmVyYXRlLWltcG9ydC1saWJgIGZlYXR1cmUuIFsjJiM4MjAzOzU1MDNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTAzKQotIEZpeCBGRkkgZGVmaW5pdGlvbnMgYFB5TW9kdWxlX0V4ZWNEZWZgIGFuZCBgUHlNb2R1bGVfRnJvbURlZkFuZFNwZWMyYCBvbiBQeVB5LiBbIyYjODIwMzs1NTI5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTUyOSkKCjwvZGV0YWlscz4KCjxkZXRhaWxzPgo8c3VtbWFyeT5QeU8zL3B5bzMtYXN5bmMtcnVudGltZXMgKHB5bzMtYXN5bmMtcnVudGltZXMpPC9zdW1tYXJ5PgoKIyMjIFtgdjAuMjguMGBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMtYXN5bmMtcnVudGltZXMvYmxvYi9IRUFEL0NIQU5HRUxPRy5tZCMwMjgwLS0tMjAyNi0wMi0wMykKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy1hc3luYy1ydW50aW1lcy9jb21wYXJlL3YwLjI3LjAuLi52MC4yOC4wKQoKLSBCdW1wIHRvIHB5bzMgMC4yOC4gWyMmIzgyMDM7NzZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMtYXN5bmMtcnVudGltZXMvcHVsbC83NikKLSBDaGVjayBmb3IgYXdhaXRhYmxlIGluc3RlYWQgb2YgY29yb3V0aW5lIGluIHN0cmVhbSBnbHVlIFsjJiM4MjAzOzczXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zLWFzeW5jLXJ1bnRpbWVzL3B1bGwvNzMpCi0gQnVtcCBNU1JWIHRvIDEuODMuCi0gRml4IGhhbmRsaW5nIG9mIGZ1bGwgYnVmZmVyIGluIGBpbnRvX3N0cmVhbWAgZnVuY3Rpb25zCgojIyMgW2B2MC4yNy4wYF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy1hc3luYy1ydW50aW1lcy9ibG9iL0hFQUQvQ0hBTkdFTE9HLm1kIzAyNzAtLS0yMDI1LTEwLTIwKQoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zLWFzeW5jLXJ1bnRpbWVzL2NvbXBhcmUvdjAuMjYuMC4uLnYwLjI3LjApCgotIEF2b2lkIGF0dGFjaGluZyB0byB0aGUgcnVudGltZSB3aGVuIGNsb25pbmcgVGFza0xvY2FscyBieSB1c2luZyBzdGQ6OnN5bmM6OkFyYy4gWyMmIzgyMDM7NjJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMtYXN5bmMtcnVudGltZXMvcHVsbC82MikKLSAqKkJyZWFraW5nKio6IEZpbmFsaXplIHRoZSBmdXR1cmUgd2l0aG91dCBob2xkaW5nIEdJTCBpbnNpZGUgYXN5bmMtc3RkL3Rva2lvIHJ1bnRpbWUuCiAgVHJhaXQgYFJ1bnRpbWVgIG5vdyByZXF1aXJlcyBgc3Bhd25fYmxvY2tpbmdgIGZ1bmN0aW9uLAogIGBmdXR1cmVfaW50b19weWAgZnVuY3Rpb25zIG5vdyByZXF1aXJlIGZ1dHVyZSByZXR1cm4gdHlwZSB0byBiZSBgU2VuZGAuCiAgWyMmIzgyMDM7NjBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMtYXN5bmMtcnVudGltZXMvcHVsbC82MCkKLSBDaGFuZ2UgcHlvMyBgZG93bmNhc3RgIGNhbGxzIHRvIGBjYXN0YCBjYWxscyBbIyYjODIwMzs2NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy1hc3luYy1ydW50aW1lcy9wdWxsLzY1KQotIFVzZSBgcHlvMzo6aW50ZXJuIWAgZm9yIG1ldGhvZCBjYWxscyBhbmQgYGdldGF0dHJgIGNhbGxzIFsjJiM4MjAzOzY2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zLWFzeW5jLXJ1bnRpbWVzL3B1bGwvNjYpCi0gRml4IG1pc3NpbmcgTElDRU5TRSBmaWxlIGluIG1hY3JvcyBjcmF0ZSBieSBbQCYjODIwMzttdXNpY2lubXlicmFpbl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL211c2ljaW5teWJyYWluKSBpbiBbIyYjODIwMzs2M10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy1hc3luYy1ydW50aW1lcy9wdWxsLzYzKQotIEJ1bXAgdG8gcHlvMyAwLjI3LiBbIyYjODIwMzs2OF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy1hc3luYy1ydW50aW1lcy9wdWxsLzY4KQoKPC9kZXRhaWxzPgoKPGRldGFpbHM+CjxzdW1tYXJ5PnZvcm5lci9weW8zLWxvZyAocHlvMy1sb2cpPC9zdW1tYXJ5PgoKIyMjIFtgdjAuMTMuMmBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS92b3JuZXIvcHlvMy1sb2cvYmxvYi9IRUFEL0NIQU5HRUxPRy5tZCMwMTMyKQoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vdm9ybmVyL3B5bzMtbG9nL2NvbXBhcmUvdjAuMTMuMS4uLnYwLjEzLjIpCgotIFN1cHBvcnQgZm9yIHB5bzMgMC4yNyAoWyMmIzgyMDM7NzJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS92b3JuZXIvcHlvMy1sb2cvaXNzdWVzLzcyKSkuCgo8L2RldGFpbHM+Cgo8ZGV0YWlscz4KPHN1bW1hcnk+ZGF2aWRoZXdpdHQvcHl0aG9uaXplIChweXRob25pemUpPC9zdW1tYXJ5PgoKIyMjIFtgdjAuMjcuMGBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9kYXZpZGhld2l0dC9weXRob25pemUvYmxvYi9IRUFEL0NIQU5HRUxPRy5tZCMwMjcwLS0tMjAyNS0xMS0wNykKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2RhdmlkaGV3aXR0L3B5dGhvbml6ZS9jb21wYXJlL3YwLjI2LjAuLi52MC4yNy4wKQoKLSBVcGRhdGUgdG8gUHlPMyAwLjI3Cgo8L2RldGFpbHM+CgotLS0KCiMjIyBDb25maWd1cmF0aW9uCgrwn5OFICoqU2NoZWR1bGUqKjogQnJhbmNoIGNyZWF0aW9uIC0gQXQgYW55IHRpbWUgKG5vIHNjaGVkdWxlIGRlZmluZWQpLCBBdXRvbWVyZ2UgLSBBdCBhbnkgdGltZSAobm8gc2NoZWR1bGUgZGVmaW5lZCkuCgrwn5qmICoqQXV0b21lcmdlKio6IERpc2FibGVkIGJ5IGNvbmZpZy4gUGxlYXNlIG1lcmdlIHRoaXMgbWFudWFsbHkgb25jZSB5b3UgYXJlIHNhdGlzZmllZC4KCuKZuyAqKlJlYmFzaW5nKio6IFdoZW5ldmVyIFBSIGlzIGJlaGluZCBiYXNlIGJyYW5jaCwgb3IgeW91IHRpY2sgdGhlIHJlYmFzZS9yZXRyeSBjaGVja2JveC4KCvCfkbsgKipJbW1vcnRhbCoqOiBUaGlzIFBSIHdpbGwgYmUgcmVjcmVhdGVkIGlmIGNsb3NlZCB1bm1lcmdlZC4gR2V0IFtjb25maWcgaGVscF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3Jlbm92YXRlYm90L3Jlbm92YXRlL2Rpc2N1c3Npb25zKSBpZiB0aGF0J3MgdW5kZXNpcmVkLgoKLS0tCgogLSBbIF0gPCEtLSByZWJhc2UtY2hlY2sgLS0+SWYgeW91IHdhbnQgdG8gcmViYXNlL3JldHJ5IHRoaXMgUFIsIGNoZWNrIHRoaXMgYm94CgotLS0KClRoaXMgUFIgd2FzIGdlbmVyYXRlZCBieSBbTWVuZCBSZW5vdmF0ZV0oaHR0cHM6Ly9tZW5kLmlvL3Jlbm92YXRlLykuIFZpZXcgdGhlIFtyZXBvc2l0b3J5IGpvYiBsb2ddKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vZ2l0aHViL3ZleHhob3N0L21hZ251bS1jbHVzdGVyLWFwaSkuCjwhLS1yZW5vdmF0ZS1kZWJ1ZzpleUpqY21WaGRHVmtTVzVXWlhJaU9pSTBNUzR4TkRNdU1TSXNJblZ3WkdGMFpXUkpibFpsY2lJNklqUXpMamd1TlNJc0luUmhjbWRsZEVKeVlXNWphQ0k2SW0xaGFXNGlMQ0pzWVdKbGJITWlPbHRkZlE9PS0tPgo=
      override_checkout: master
      patchset: c6ab00092f19904b8889c7ec71d5d6f44b5d98ae
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/vexxhost.dev/zuul-config:
            canonical_name: vexxhost.dev/zuul-config
            checkout: main
            commit: 9052b5a7781b3346e4cffd452a54448cbff54d8b
          trusted/project_1/opendev.org/zuul/zuul-jobs:
            canonical_name: opendev.org/zuul/zuul-jobs
            checkout: master
            commit: 571c0efa3491d12ecb8fc1169c510716d55c0fc2
          trusted/project_2/github.com/vexxhost/zuul-jobs:
            canonical_name: github.com/vexxhost/zuul-jobs
            checkout: main
            commit: a6e68243e02ef030ce5e75f8b67630880c475f33
          untrusted/project_0/opendev.org/openstack/devstack:
            canonical_name: opendev.org/openstack/devstack
            checkout: master
            commit: ea0fdd2c806cf93e48a698e68165306da45314a2
          untrusted/project_1/opendev.org/openstack/openstack-zuul-jobs:
            canonical_name: opendev.org/openstack/openstack-zuul-jobs
            checkout: master
            commit: 61be4bf603478e22c2b8b334279a74fd1421b58b
          untrusted/project_2/vexxhost.dev/zuul-config:
            canonical_name: vexxhost.dev/zuul-config
            checkout: main
            commit: 9052b5a7781b3346e4cffd452a54448cbff54d8b
          untrusted/project_3/opendev.org/zuul/zuul-jobs:
            canonical_name: opendev.org/zuul/zuul-jobs
            checkout: master
            commit: 571c0efa3491d12ecb8fc1169c510716d55c0fc2
          untrusted/project_4/github.com/vexxhost/zuul-jobs:
            canonical_name: github.com/vexxhost/zuul-jobs
            checkout: main
            commit: a6e68243e02ef030ce5e75f8b67630880c475f33
          untrusted/project_5/github.com/vexxhost/magnum-cluster-api:
            canonical_name: github.com/vexxhost/magnum-cluster-api
            checkout: main
            commit: c6ab00092f19904b8889c7ec71d5d6f44b5d98ae
        playbooks:
        - path: untrusted/project_5/github.com/vexxhost/magnum-cluster-api/zuul.d/playbooks/sonobuoy/run.yml
          roles:
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/playbook_0/role_1/devstack
            link_target: untrusted/project_0/opendev.org/openstack/devstack
            role_path: ansible/playbook_0/role_1/devstack/roles
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/playbook_0/role_2/openstack-zuul-jobs
            link_target: untrusted/project_1/opendev.org/openstack/openstack-zuul-jobs
            role_path: ansible/playbook_0/role_2/openstack-zuul-jobs/roles
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/playbook_0/role_4/zuul-jobs
            link_target: untrusted/project_3/opendev.org/zuul/zuul-jobs
            role_path: ansible/playbook_0/role_4/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_5/zuul-jobs
            link_target: untrusted/project_4/github.com/vexxhost/zuul-jobs
            role_path: ansible/playbook_0/role_5/zuul-jobs/roles
      post_review: false
      post_timeout: null
      pre_timeout: null
      project:
        canonical_hostname: github.com
        canonical_name: github.com/vexxhost/magnum-cluster-api
        name: vexxhost/magnum-cluster-api
        short_name: magnum-cluster-api
        src_dir: src/github.com/vexxhost/magnum-cluster-api
      projects:
        github.com/novnc/novnc:
          canonical_hostname: github.com
          canonical_name: github.com/novnc/novnc
          checkout: master
          checkout_description: job override ref
          commit: 8e1ebdffba02e651c399dacef841f8941f6ad6e4
          name: novnc/novnc
          required: true
          short_name: novnc
          src_dir: src/github.com/novnc/novnc
        github.com/vexxhost/magnum-cluster-api:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/magnum-cluster-api
          checkout: main
          checkout_description: zuul branch
          commit: c6ab00092f19904b8889c7ec71d5d6f44b5d98ae
          name: vexxhost/magnum-cluster-api
          required: false
          short_name: magnum-cluster-api
          src_dir: src/github.com/vexxhost/magnum-cluster-api
        opendev.org/openstack/barbican:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/barbican
          checkout: master
          checkout_description: job override ref
          commit: 317e70e98c39c39ce44f22b303cd3aaa739abafd
          name: openstack/barbican
          required: true
          short_name: barbican
          src_dir: src/opendev.org/openstack/barbican
        opendev.org/openstack/cinder:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/cinder
          checkout: master
          checkout_description: job override ref
          commit: 143c5c12fb60ef7130ddff0fc9b9ec23bc452d49
          name: openstack/cinder
          required: true
          short_name: cinder
          src_dir: src/opendev.org/openstack/cinder
        opendev.org/openstack/devstack:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/devstack
          checkout: master
          checkout_description: job override ref
          commit: ea0fdd2c806cf93e48a698e68165306da45314a2
          name: openstack/devstack
          required: true
          short_name: devstack
          src_dir: src/opendev.org/openstack/devstack
        opendev.org/openstack/glance:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/glance
          checkout: master
          checkout_description: job override ref
          commit: ad36aa0fd6e1d5786782a35e5eee153045126268
          name: openstack/glance
          required: true
          short_name: glance
          src_dir: src/opendev.org/openstack/glance
        opendev.org/openstack/keystone:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/keystone
          checkout: master
          checkout_description: job override ref
          commit: 7b5702f994139140ce195acbe15598dfcf4c8b98
          name: openstack/keystone
          required: true
          short_name: keystone
          src_dir: src/opendev.org/openstack/keystone
        opendev.org/openstack/magnum:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/magnum
          checkout: master
          checkout_description: job override ref
          commit: 47e025175c2c902ddbf9b23ae494fcc58994d6af
          name: openstack/magnum
          required: true
          short_name: magnum
          src_dir: src/opendev.org/openstack/magnum
        opendev.org/openstack/manila:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/manila
          checkout: master
          checkout_description: job override ref
          commit: 9e631a614aae0a1d77a65e63d28ab33dc0c02343
          name: openstack/manila
          required: true
          short_name: manila
          src_dir: src/opendev.org/openstack/manila
        opendev.org/openstack/neutron:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/neutron
          checkout: master
          checkout_description: job override ref
          commit: d209de7ffaa2e1f6ea8b036fe5303ad284ae0257
          name: openstack/neutron
          required: true
          short_name: neutron
          src_dir: src/opendev.org/openstack/neutron
        opendev.org/openstack/nova:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/nova
          checkout: master
          checkout_description: job override ref
          commit: f3d9188a937518e9dbfa434436ba336bc2107fc2
          name: openstack/nova
          required: true
          short_name: nova
          src_dir: src/opendev.org/openstack/nova
        opendev.org/openstack/octavia:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/octavia
          checkout: master
          checkout_description: job override ref
          commit: 2c4f284c1089b5a6d534f082d50cd520e09214c7
          name: openstack/octavia
          required: true
          short_name: octavia
          src_dir: src/opendev.org/openstack/octavia
        opendev.org/openstack/os-test-images:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/os-test-images
          checkout: master
          checkout_description: job override ref
          commit: 5d0367e03788764f41da8effffa14e3eac513201
          name: openstack/os-test-images
          required: true
          short_name: os-test-images
          src_dir: src/opendev.org/openstack/os-test-images
        opendev.org/openstack/ovn-octavia-provider:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/ovn-octavia-provider
          checkout: master
          checkout_description: job override ref
          commit: 0f370ad761133c14d73917d5fdd392e684b4b512
          name: openstack/ovn-octavia-provider
          required: true
          short_name: ovn-octavia-provider
          src_dir: src/opendev.org/openstack/ovn-octavia-provider
        opendev.org/openstack/placement:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/placement
          checkout: master
          checkout_description: job override ref
          commit: 97a81217ba4c586d6148b4c30f6a30f17bffd0dd
          name: openstack/placement
          required: true
          short_name: placement
          src_dir: src/opendev.org/openstack/placement
        opendev.org/openstack/python-magnumclient:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/python-magnumclient
          checkout: master
          checkout_description: job override ref
          commit: 86936ec8421488ca03635962e8a6ccfe070b0756
          name: openstack/python-magnumclient
          required: true
          short_name: python-magnumclient
          src_dir: src/opendev.org/openstack/python-magnumclient
        opendev.org/openstack/requirements:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/requirements
          checkout: master
          checkout_description: job override ref
          commit: dcd4a1b8c38e9a0b82bb496dff62ae02bcc952ac
          name: openstack/requirements
          required: true
          short_name: requirements
          src_dir: src/opendev.org/openstack/requirements
        opendev.org/openstack/swift:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/swift
          checkout: master
          checkout_description: job override ref
          commit: 2c980ac94682e8baed89c7f3c3b5af824514e8c3
          name: openstack/swift
          required: true
          short_name: swift
          src_dir: src/opendev.org/openstack/swift
      ref: refs/pull/837/head
      resources: {}
      tenant: oss
      timeout: 7200
      topic: null
      voting: true
    zuul_copy_output:
      /etc/ceph: logs
      /etc/glusterfs/glusterd.vol: logs
      /etc/libvirt: logs
      /etc/lvm: logs
      /etc/resolv.conf: logs
      /etc/sudoers: logs
      /etc/sudoers.d: logs
      /var/log/ceph: logs
      /var/log/glusterfs: logs
      /var/log/libvirt: logs
      /var/log/mysql: logs
      /var/log/openvswitch: logs
      /var/log/postgresql: logs
      /var/log/rabbitmq: logs
      /var/log/unbound.log: logs
      '{{ devstack_conf_dir }}/.localrc.auto': logs
      '{{ devstack_conf_dir }}/.stackenv': logs
      '{{ devstack_conf_dir }}/local.conf': logs
      '{{ devstack_conf_dir }}/localrc': logs
      '{{ devstack_full_log}}': logs
      '{{ devstack_log_dir }}/atop': logs
      '{{ devstack_log_dir }}/devstacklog.txt': logs
      '{{ devstack_log_dir }}/devstacklog.txt.summary': logs
      '{{ devstack_log_dir }}/dstat-csv.log': logs
      '{{ devstack_log_dir }}/qemu.coredump': logs
      '{{ devstack_log_dir }}/tcpdump.pcap': logs
      '{{ devstack_log_dir }}/worlddump-latest.txt': logs
      '{{ stage_dir }}/apache': logs
      '{{ stage_dir }}/apache_config': logs
      '{{ stage_dir }}/audit.log': logs
      '{{ stage_dir }}/core': logs
      '{{ stage_dir }}/deprecations.log': logs
      '{{ stage_dir }}/df.txt': logs
      '{{ stage_dir }}/dpkg-l.txt': logs
      '{{ stage_dir }}/etc': logs
      '{{ stage_dir }}/iptables.txt': logs
      '{{ stage_dir }}/listen53.txt': logs
      '{{ stage_dir }}/mount.txt': logs
      '{{ stage_dir }}/performance.json': logs
      '{{ stage_dir }}/pip2-freeze.txt': logs
      '{{ stage_dir }}/pip3-freeze.txt': logs
      '{{ stage_dir }}/rpm-qa.txt': logs
      '{{ stage_dir }}/services.txt': logs
      '{{ stage_dir }}/verify_tempest_conf.log': logs
