Commit Graph

5637 Commits

Author SHA1 Message Date
Nik Clayton c0ff447415
chore: Prepare release 2.7.1 (versionCode 19) (#861) 2024-07-31 15:10:18 +02:00
Nik Clayton ff8b71a2d8
fix: Correctly position preview card images, show card description (#860)
Byline changes inadvertently changed how the preview image is laid out,
breaking the "Image at start, info at end" variant.

Previous code did not always show the card description if the text was
present, fix that.
2024-07-31 12:32:14 +02:00
Nik Clayton a0b3b1ffac
chore: Prepare release 2.7.0 (versionCode 18) (#841) 2024-07-29 16:25:24 +02:00
Nik Clayton e61de1c5f2
fix: Reduce preview cards to minimum height required (#840)
Previous code set a min-height, which is no longer necessary after the
other layout changes. But it meant that a preview card with a one-line
title, no synopsis, and a URL, was taking up too much vertical space.
2024-07-29 14:48:35 +02:00
Nik Clayton 6b5f816b28
feat: Remove preview card placeholder icon (#839)
Previous code displayed a large placeholder icon if there was no preview
image for a preview card.

This reduces the amount of space available for the actual preview text
(i.e., title and description) and did not convey additional information
in the limited space available on the timeline.

So remove it.

While I'm here simplify the PreviewCard layout and migrate to
ConstraintLayout.
2024-07-28 16:24:20 +02:00
Ricky From Hong Kong 48cd938618 fix(l10n): Update Chinese (Traditional) translations
Currently translated at 100.0% (14 of 14 strings)

Translation: Pachli/Core/Ui : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/coreui-main/zh_Hant/
2024-07-28 15:57:29 +02:00
Ricky From Hong Kong 8ac59f82ed fix(l10n): Update Chinese (Simplified) (zh_MO) translations
Currently translated at 78.5% (11 of 14 strings)

Translation: Pachli/Core/Ui : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/coreui-main/zh_MO/
2024-07-28 15:57:29 +02:00
Ricky From Hong Kong ded28ad467 fix(l10n): Update Chinese (Traditional, Hong Kong) translations
Currently translated at 92.8% (13 of 14 strings)

Translation: Pachli/Core/Ui : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/coreui-main/zh_Hant_HK/
2024-07-28 15:57:29 +02:00
Ricky From Hong Kong a228273ef5 fix(l10n): Update English (United Kingdom) translations
Currently translated at 21.4% (3 of 14 strings)

Translation: Pachli/Core/Ui : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/coreui-main/en_GB/
2024-07-28 15:57:29 +02:00
Ricky From Hong Kong e8e2b0d99b fix(l10n): Update Chinese (Traditional) translations
Currently translated at 14.5% (9 of 62 strings)

Translation: Pachli/Feature/About : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/featureabout-main/zh_Hant/
2024-07-28 15:57:29 +02:00
Ricky From Hong Kong c25d80a14f fix(l10n): Update Chinese (Simplified) (zh_MO) translations
Currently translated at 11.2% (7 of 62 strings)

Translation: Pachli/Feature/About : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/featureabout-main/zh_MO/
2024-07-28 15:57:29 +02:00
Ricky From Hong Kong ad7058f4ad fix(l10n): Update Chinese (Traditional, Hong Kong) translations
Currently translated at 14.5% (9 of 62 strings)

Translation: Pachli/Feature/About : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/featureabout-main/zh_Hant_HK/
2024-07-28 15:57:29 +02:00
Ricky From Hong Kong 1f90fc9157 fix(l10n): Update Chinese (Simplified) translations
Currently translated at 24.1% (15 of 62 strings)

Translation: Pachli/Feature/About : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/featureabout-main/zh_Hans/
2024-07-28 15:57:29 +02:00
Ricky From Hong Kong d81fdcd24f fix(l10n): Update English (United Kingdom) translations
Currently translated at 3.2% (2 of 62 strings)

Translation: Pachli/Feature/About : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/featureabout-main/en_GB/
2024-07-28 15:57:29 +02:00
Ricky From Hong Kong 8457d92581 fix(l10n): Update Chinese (Traditional) translations
Currently translated at 61.7% (435 of 704 strings)

Translation: Pachli/App : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/app-main/zh_Hant/
2024-07-28 15:57:29 +02:00
Ricky From Hong Kong 05aed67e1e fix(l10n): Update Chinese (Simplified) (zh_MO) translations
Currently translated at 41.7% (294 of 704 strings)

Translation: Pachli/App : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/app-main/zh_MO/
2024-07-28 15:57:29 +02:00
Ricky From Hong Kong f594749c5f fix(l10n): Update Chinese (Traditional, Hong Kong) translations
Currently translated at 53.4% (376 of 704 strings)

Translation: Pachli/App : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/app-main/zh_Hant_HK/
2024-07-28 15:57:29 +02:00
Ricky From Hong Kong b041f9f787 fix(l10n): Update Chinese (Traditional) translations
Currently translated at 94.1% (16 of 17 strings)

Translation: Pachli/Feature/Login
Translate-URL: https://hosted.weblate.org/projects/pachli/featurelogin/zh_Hant/
2024-07-28 15:57:29 +02:00
Ricky From Hong Kong 2858882787 fix(l10n): Update Chinese (Simplified) (zh_MO) translations
Currently translated at 64.7% (11 of 17 strings)

Translation: Pachli/Feature/Login
Translate-URL: https://hosted.weblate.org/projects/pachli/featurelogin/zh_MO/
2024-07-28 15:57:29 +02:00
Ricky From Hong Kong f0dd53e533 fix(l10n): Update Chinese (Traditional, Hong Kong) translations
Currently translated at 64.7% (11 of 17 strings)

Translation: Pachli/Feature/Login
Translate-URL: https://hosted.weblate.org/projects/pachli/featurelogin/zh_Hant_HK/
2024-07-28 15:57:29 +02:00
Ricky From Hong Kong 5e16d10dd0 fix(l10n): Update Chinese (Simplified) translations
Currently translated at 100.0% (17 of 17 strings)

Translation: Pachli/Feature/Login
Translate-URL: https://hosted.weblate.org/projects/pachli/featurelogin/zh_Hans/
2024-07-28 15:57:29 +02:00
Ricky From Hong Kong f1f0999ead fix(l10n): Update English (United Kingdom) translations
Currently translated at 47.0% (8 of 17 strings)

Translation: Pachli/Feature/Login
Translate-URL: https://hosted.weblate.org/projects/pachli/featurelogin/en_GB/
2024-07-28 15:57:29 +02:00
Ricky From Hong Kong 0c48d4089e fix(l10n): Update Chinese (Traditional) translations
Currently translated at 92.8% (13 of 14 strings)

Translation: Pachli/Core/Ui : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/coreui-main/zh_Hant/
2024-07-28 15:57:29 +02:00
Ricky From Hong Kong 5acf26f675 fix(l10n): Update Chinese (Traditional, Hong Kong) translations
Currently translated at 85.7% (12 of 14 strings)

Translation: Pachli/Core/Ui : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/coreui-main/zh_Hant_HK/
2024-07-28 15:57:29 +02:00
Ricky From Hong Kong eca77b3af8 fix(l10n): Update English (United Kingdom) translations
Currently translated at 14.2% (2 of 14 strings)

Translation: Pachli/Core/Ui : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/coreui-main/en_GB/
2024-07-28 15:57:29 +02:00
Kalle Kniivilä 8888a46fb1 fix(l10n): Update Finnish translations
Currently translated at 100.0% (7 of 7 strings)

Translation: Pachli/Core/Data : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/coredata-main/fi/
2024-07-27 19:17:30 +02:00
Aindriú Mac Giolla Eoin 60fc806e12 fix(l10n): Update Irish translations
Currently translated at 100.0% (7 of 7 strings)

Translation: Pachli/Core/Data : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/coredata-main/ga/
2024-07-27 19:17:30 +02:00
Aindriú Mac Giolla Eoin f94a2eccfe fix(l10n): Update Irish translations
Currently translated at 100.0% (11 of 11 strings)

Translation: Pachli/Core/Network : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/corenetwork-main/ga/
2024-07-27 19:17:30 +02:00
Kalle Kniivilä 22ce5c08f2 fix(l10n): Update Finnish translations
Currently translated at 100.0% (704 of 704 strings)

Translation: Pachli/App : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/app-main/fi/
2024-07-27 19:17:30 +02:00
Nik Clayton 63809b5868 fix(l10n): Update Latvian translations
Currently translated at 12.9% (8 of 62 strings)

Translation: Pachli/Feature/About : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/featureabout-main/lv/
2024-07-27 19:17:30 +02:00
Kalle Kniivilä 0dfb949207 fix(l10n): Update Finnish translations
Currently translated at 100.0% (611 of 611 strings)

Translation: Pachli/App : Main
Translate-URL: https://hosted.weblate.org/projects/pachli/app-main/fi/
2024-07-27 19:17:30 +02:00
Nik Clayton b1d5cb548f
fix: Don't crash due to Filters/ServerRepository race condition (#837)
The `canFilter()` implementation could crash if `server` (marked
`lateinit`) hadn't been initialised at the point of use.

Fix this by removing it and adjusting the two callers to use the
`filters` flow and take appropriate action on error.
2024-07-25 18:43:34 +02:00
Nik Clayton 01831474dc
feat: Toggle display of search operators with toolbar action (#836)
Default to hiding the search operators, and provide a new toolbar icon
(always visible) to show them.

The toolbar icon is displayed with a badge if any operators are present.

Adjust the operator display to three horizontal scrolling rows, to
further limit the maximum amount of vertical space the operators use.
2024-07-24 18:51:00 +02:00
Nik Clayton 5d574d4d76
feat: Include pre-set date search options (#835)
When selecting a search date range show the user a dialog with some
pre-set options, and a button that allows them to pick a custom date
range.
2024-07-24 17:57:19 +02:00
Nik Clayton bad502e6c3
fix: Use show()/hide() to ensure animation is delayed (#834) 2024-07-24 17:20:44 +02:00
Nik Clayton e4a305f608
refactor: Shorten search operator chip label strings (#833)
Improves the information density when selecting search operators.
2024-07-23 15:48:08 +02:00
Nik Clayton 11444bd27d
feat: Search whenever one of the search operators changes (#832) 2024-07-23 15:02:54 +02:00
Nik Clayton ae8584422c
fix: Ensure trending tag name is fully visible (#831)
Previously re-binding the tag's text wouldn't re-measure the layout when
the text changed. So scrolling down a longer tag could be placed in a
textview that previously held a shorter tag.

Then it was cut off and the user couldn't see what the tag was. Use
`wrap_content` so size is measured when the content changes.
2024-07-22 17:27:52 +02:00
Nik Clayton 71e006b0d2
feat: Provide a UI to edit different search operators (#829)
Mastodon supports in-query search operators, such as `has:image`,
`language:en`, or `in:library`. Previously the user had to enter them in
to the query directly.

This provides a chip-based UI that allows the user to set values for
these operators.

## Server

- Add new search capabilities to record the faceted search features the
server reports.
- Update definitions for Mastodon, Friendica, and GoToSocial to specify
which versions of the operations they support.

## SearchOperator / SearchOperatorViewData

- Represents each supported operator and associated viewdata.

## SearchActivity / activity_search.xml

- Conditionally display a chip for each facet depending on the server's
level of support.
- Implement the UI for each chip. They display dialogs of varying levels
of complexity depending on the underlying operation.

## FragmentSearch

- Display the progress as a LinearProgressIndicator instead of an
indeterminate ProgressBar. This makes it more visible under the search
facets.
2024-07-22 17:11:08 +02:00
Nik Clayton e063ae69e6
fix: Support same capabilities on Glitch as Mastodon (#828)
The Glitch fork reports the same version number as stock Mastodon and is
supposed to have the same baseline capabilities as stock Mastodon at
that version number.
2024-07-22 16:37:26 +02:00
Nik Clayton c4bc7f81da
refactor: Use withStyledAttributes in FontFamilyDialogFragment (#827)
Ensures it is not possible to forget to recycle the attribute array.
2024-07-22 16:29:53 +02:00
Nik Clayton 526ee27a6a
fix: Enable server filtering on GoToSocial 0.16+ (#826)
Previous code had the version test in the wrong order, so the check for
>= 0.15.0 took precedence.
2024-07-22 16:22:01 +02:00
Nik Clayton 92e5304b84
fix: Use colorPrimary for checked/selected dialog items (#825)
RadioButton and CheckBox color the selected radio button or check box
using `colorPrimary`. For some reason Material dialogs don't, and use
`colorSecondary` for this (and only this), which leads to visual
inconstencices through the app.

Fix this by setting `colorSecondary` to `colorPrimary` to force it.
2024-07-22 16:19:08 +02:00
Nik Clayton 6b55d107c1
feat: Edit a matching filter directly from the timeline (#819)
Previously, if a status was filtered with "WARN" and was shown in the
timeline with the name of the filter, and the user then decided to
change
that filter, they had to:

1. Open the left navigation menu
2. Navigate to "Account preferences"
3. Open "Filters"
4. Find the filter they want to edit, tap it
5. Make the change, and save
6. "Back" to the list of filters
7. "Back" to "Account preferences"
8. "Back" to the timeline

That's a lot of clicks for a simple action.

Change this. Now the filtered status includes an "Edit filter" button
that takes the user directly to step 5, and when they press "Back" they
return directly to the timeline.

To do this create a new filter action, `onEditFilterById`. Update the
listeners to launch `EditFilterActivity` if appropriate.

Modify `item_status_filtered.xml` to show the new button.

Update the accessibility delegate to show just the "Show anyway" and
"Edit filter" actions. Modify `FilterableStatusViewHolder` to expose
the information it needs to do this.
2024-07-19 13:45:24 +02:00
Nik Clayton 7ef692c2c8
fix: Don't focus search query when returning to the results list (#824)
Previous code always focused the search query. This meant that if the
user:

1. Searched for something
2. Opened a result (post, hashtag, account)
3. Navigated back to the search results

then because the query was focused the soft-keyboard would open,
obscuring the list of results. The user had to press "Back" again to
dismiss the keyboard.

New code only focuses the search query view if it is empty. This allows
the user to come back to the list of results and immediately open a new
result.
2024-07-15 09:02:07 +02:00
Nik Clayton b757765383
change: Remove copyWithCollapsed helper (#823)
Holdover from when Java interoperability was required.
2024-07-15 00:00:36 +02:00
Nik Clayton e560868749
feat: Animate filter keywords when added or removed (#817)
This makes it a little easier to see what's been changed.
2024-07-14 23:43:20 +02:00
Nik Clayton b878211891
feat: Show a specific message if requests are rate-limited (#818) 2024-07-14 23:43:10 +02:00
Nik Clayton af11e3d3a1
refactor: Replace `getOrElse { null }` with get() (#820)
`getOrElse { null }` is synonymous with `get()` when using
kotlin-result.
2024-07-14 23:42:59 +02:00
renovate[bot] 8aa521890f
chore(deps): update kotlin (#800)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [com.google.devtools.ksp](https://goo.gle/ksp)
([source](https://togithub.com/google/ksp)) | `2.0.0-1.0.22` ->
`2.0.0-1.0.23` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.devtools.ksp/2.0.0-1.0.23?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.google.devtools.ksp/2.0.0-1.0.23?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.google.devtools.ksp/2.0.0-1.0.22/2.0.0-1.0.23?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.devtools.ksp/2.0.0-1.0.22/2.0.0-1.0.23?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin](https://goo.gle/ksp)
([source](https://togithub.com/google/ksp)) | `2.0.0-1.0.22` ->
`2.0.0-1.0.23` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin/2.0.0-1.0.23?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin/2.0.0-1.0.23?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin/2.0.0-1.0.22/2.0.0-1.0.23?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin/2.0.0-1.0.22/2.0.0-1.0.23?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[org.jetbrains.kotlinx:kotlinx-coroutines-play-services](https://togithub.com/Kotlin/kotlinx.coroutines)
| `1.4.1` -> `1.8.1` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlinx:kotlinx-coroutines-play-services/1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlinx:kotlinx-coroutines-play-services/1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlinx:kotlinx-coroutines-play-services/1.4.1/1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlinx:kotlinx-coroutines-play-services/1.4.1/1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>google/ksp (com.google.devtools.ksp)</summary>

###
[`v2.0.0-1.0.23`](https://togithub.com/google/ksp/compare/2.0.0-1.0.22...2.0.0-1.0.23)

[Compare
Source](https://togithub.com/google/ksp/compare/2.0.0-1.0.22...2.0.0-1.0.23)

</details>

<details>
<summary>Kotlin/kotlinx.coroutines
(org.jetbrains.kotlinx:kotlinx-coroutines-play-services)</summary>

###
[`v1.8.1`](https://togithub.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-181)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.8.0...1.8.1)

- Remove the `@ExperimentalTime` annotation from usages of `TimeSource`
([#&#8203;4046](https://togithub.com/Kotlin/kotlinx.coroutines/issues/4046)).
Thanks, [@&#8203;hfhbd](https://togithub.com/hfhbd)!
- Introduce a workaround for an Android bug that caused an occasional
`NullPointerException` when setting the `StateFlow` value on old Android
devices
([#&#8203;3820](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3820)).
- No longer use `kotlin.random.Random` as part of `Dispatchers.Default`
and `Dispatchers.IO` initialization
([#&#8203;4051](https://togithub.com/Kotlin/kotlinx.coroutines/issues/4051)).
- `Flow.timeout` throws the exception with which the channel was closed
([#&#8203;4071](https://togithub.com/Kotlin/kotlinx.coroutines/issues/4071)).
-   Small tweaks and documentation fixes.

##### Changelog relative to version 1.8.1-Beta

- `Flow.timeout` throws the exception with which the channel was closed
([#&#8203;4071](https://togithub.com/Kotlin/kotlinx.coroutines/issues/4071)).
-   Small documentation fixes.

###
[`v1.8.0`](https://togithub.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-180)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.7.3...1.8.0)

- Implement the library for the Web Assembly (Wasm) for JavaScript
([#&#8203;3713](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3713)).
Thanks [@&#8203;igoriakovlev](https://togithub.com/igoriakovlev)!
-   Major Kotlin version update: was 1.8.20, became 1.9.21.
- On Android, ensure that `Dispatchers.Main !=
Dispatchers.Main.immediate`
([#&#8203;3545](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3545),
[#&#8203;3963](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3963)).
- Fixed a bug that caused `Flow` operators that limit cancel the
upstream flow to forget that they were already finished if there is
another such operator upstream
([#&#8203;4035](https://togithub.com/Kotlin/kotlinx.coroutines/issues/4035),
[#&#8203;4038](https://togithub.com/Kotlin/kotlinx.coroutines/issues/4038))
- `kotlinx-coroutines-debug` is published with the correct Java 9 module
info
([#&#8203;3944](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3944)).
- `kotlinx-coroutines-debug` no longer requires manually setting
`DebugProbes.enableCoroutineCreationStackTraces` to `false`, it's the
default
([#&#8203;3783](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3783)).
- `kotlinx-coroutines-test`: set the default timeout of `runTest` to 60
seconds, added the ability to configure it on the JVM with the
`kotlinx.coroutines.test.default_timeout=10s`
([#&#8203;3800](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3800)).
- `kotlinx-coroutines-test`: fixed a bug that could lead to not all
uncaught exceptions being reported after some tests failed
([#&#8203;3800](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3800)).
- `delay(Duration)` rounds nanoseconds up to whole milliseconds and not
down
([#&#8203;3920](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3920)).
Thanks [@&#8203;kevincianfarini](https://togithub.com/kevincianfarini)!
- `Dispatchers.Default` and the default thread for background work are
guaranteed to use the same context classloader as the object containing
it them
([#&#8203;3832](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3832)).
- It is guaranteed that by the time `SharedFlow.collect` suspends for
the first time, it's registered as a subscriber for that `SharedFlow`
([#&#8203;3885](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3885)).
Before, it was also true, but not documented.
- Atomicfu version is updated to 0.23.1, and Kotlin/Native atomic
transformations are enabled, reducing the footprint of coroutine-heavy
code
([#&#8203;3954](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3954)).
- Added a workaround for miscompilation of `withLock` on JS
([#&#8203;3881](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3881)).
Thanks [@&#8203;CLOVIS-AI](https://togithub.com/CLOVIS-AI)!
-   Small tweaks and documentation fixes.

##### Changelog relative to version 1.8.0-RC2

- `kotlinx-coroutines-debug` no longer requires manually setting
`DebugProbes.enableCoroutineCreationStackTraces` to `false`, it's the
default
([#&#8203;3783](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3783)).
- Fixed a bug that caused `Flow` operators that limit cancel the
upstream flow to forget that they were already finished if there is
another such operator upstream
([#&#8203;4035](https://togithub.com/Kotlin/kotlinx.coroutines/issues/4035),
[#&#8203;4038](https://togithub.com/Kotlin/kotlinx.coroutines/issues/4038))
-   Small documentation fixes.

###
[`v1.7.3`](https://togithub.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-173)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.7.2...1.7.3)

- Disabled the publication of the multiplatform library metadata for the
old (1.6 and earlier) KMP Gradle plugin
([#&#8203;3809](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3809)).
- Fixed a bug introduced in 1.7.2 that disabled the coroutine debugger
in IDEA
([#&#8203;3822](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3822)).

###
[`v1.7.2`](https://togithub.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-172)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.7.1...1.7.2)

##### Bug fixes and improvements

- Coroutines debugger no longer keeps track of coroutines with empty
coroutine context
([#&#8203;3782](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3782)).
- `CopyableThreadContextElement` now properly copies an element when
crossing the coroutine boundary in `flowOn`
([#&#8203;3787](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3787)).
Thanks [@&#8203;wanyingd1996](https://togithub.com/wanyingd1996)!
- Coroutine timeouts no longer prevent K/N `newSingleThreadContext` from
closing
([#&#8203;3768](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3768)).
- A non-linearizability in `Mutex` during `tryLock`/`unlock` sequence
with owners is fixed
([#&#8203;3745](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3745)).
-   Atomicfu version is updated to 0.21.0.

###
[`v1.7.1`](https://togithub.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-171)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.7.0...1.7.1)

##### Bug fixes and improvements

- Special characters in coroutine names in JSON dumps are supported
([#&#8203;3747](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3747))
- The binary compatibility of the experimental overload of `runTest` is
restored
([#&#8203;3673](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3673))
- Channels that don't use `onUndeliveredElement` now allocate less
memory
([#&#8203;3646](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3646))

###
[`v1.7.0`](https://togithub.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-170)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.6.4...1.7.0)

##### Core API significant improvements

- New `Channel` implementation with significant performance improvements
across the API
([#&#8203;3621](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3621)).
- New `select` operator implementation: faster, more lightweight, and
more robust
([#&#8203;3020](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3020)).
- `Mutex` and `Semaphore` now share the same underlying data structure
([#&#8203;3020](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3020)).
- `Dispatchers.IO` is added to K/N
([#&#8203;3205](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3205))
- `newFixedThreadPool` and `Dispatchers.Default` implementations on K/N
were wholly rewritten to support graceful growth under load
([#&#8203;3595](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3595)).
-   `kotlinx-coroutines-test` rework:
- Add the `timeout` parameter to `runTest` for the whole-test timeout,
10 seconds by default
([#&#8203;3270](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3270)).
This replaces the configuration of quiescence timeouts, which is now
deprecated
([#&#8203;3603](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3603)).
- The `withTimeout` exception messages indicate if the timeout used the
virtual time
([#&#8203;3588](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3588)).
- `TestCoroutineScheduler`, `runTest`, and `TestScope` API are promoted
to stable
([#&#8203;3622](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3622)).
- `runTest` now also fails if there were uncaught exceptions in
coroutines not inherited from the test coroutine
([#&#8203;1205](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1205)).

##### Breaking changes

- Old K/N memory model is no longer supported
([#&#8203;3375](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3375)).
- New generic upper bounds were added to reactive integration API where
the language since 1.8.0 dictates
([#&#8203;3393](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3393)).
- `kotlinx-coroutines-core` and `kotlinx-coroutines-jdk8` artifacts were
merged into a single artifact
([#&#8203;3268](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3268)).
- Artificial stackframes in stacktrace recovery no longer contain the
`\b` symbol and are now navigable in IDE and supplied with proper
documentation
([#&#8203;2291](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2291)).
- `CoroutineContext.isActive` returns `true` for contexts without any
job in them
([#&#8203;3300](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3300)).

##### Bug fixes and improvements

-   Kotlin version is updated to 1.8.20
-   Atomicfu version is updated to 0.20.2.
- `JavaFx` version is updated to 17.0.2 in `kotlinx-coroutines-javafx`
([#&#8203;3671](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3671))..
- JPMS is supported
([#&#8203;2237](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2237)).
Thanks [@&#8203;lion7](https://togithub.com/lion7)!
- `BroadcastChannel` and all the corresponding API are deprecated
([#&#8203;2680](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2680)).
- Added all supported K/N targets
([#&#8203;3601](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3601),
[#&#8203;812](https://togithub.com/Kotlin/kotlinx.coroutines/issues/812),
[#&#8203;855](https://togithub.com/Kotlin/kotlinx.coroutines/issues/855)).
- K/N `Dispatchers.Default` is backed by the number of threads equal to
the number of available cores
([#&#8203;3366](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3366)).
- Fixed an issue where some coroutines' internal exceptions were not
properly serializable
([#&#8203;3328](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3328)).
- Introduced `Job.parent` API
([#&#8203;3201](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3201)).
- Fixed a bug when `TestScheduler` leaked cancelled jobs
([#&#8203;3398](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3398)).
- `TestScope.timeSource` now provides comparable time marks
([#&#8203;3617](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3617)).
Thanks [@&#8203;hfhbd](https://togithub.com/hfhbd)!
- Fixed an issue when cancelled `withTimeout` handles were preserved in
JS runtime
([#&#8203;3440](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3440)).
- Ensure `awaitFrame` only awaits a single frame when used from the main
looper
([#&#8203;3432](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3432)).
Thanks [@&#8203;pablobaxter](https://togithub.com/pablobaxter)!
- Obsolete `Class-Path` attribute was removed from
`kotlinx-coroutines-debug.jar` manifest
([#&#8203;3361](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3361)).
- Fixed a bug when `updateThreadContext` operated on the parent context
([#&#8203;3411](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3411)).
- Added new `Flow.filterIsInstance` extension
([#&#8203;3240](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3240)).
- `Dispatchers.Default` thread name prefixes are now configurable with
system property
([#&#8203;3231](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3231)).
- Added `Flow.timeout` operator as `@FlowPreview`
([#&#8203;2624](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2624)).
Thanks [@&#8203;pablobaxter](https://togithub.com/pablobaxter)!
- Improved the performance of the `future` builder in case of exceptions
([#&#8203;3475](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3475)).
Thanks [@&#8203;He-Pin](https://togithub.com/He-Pin)!
- `Mono.awaitSingleOrNull` now waits for the `onComplete` signal
([#&#8203;3487](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3487)).
- `Channel.isClosedForSend` and `Channel.isClosedForReceive` are
promoted from experimental to delicate
([#&#8203;3448](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3448)).
- Fixed a data race in native `EventLoop`
([#&#8203;3547](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3547)).
- `Dispatchers.IO.limitedParallelism(valueLargerThanIOSize)` no longer
creates an additional wrapper
([#&#8203;3442](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3442)).
Thanks [@&#8203;dovchinnikov](https://togithub.com/dovchinnikov)!
- Various `@FlowPreview` and `@ExperimentalCoroutinesApi` are promoted
to experimental and stable respectively
([#&#8203;3542](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3542),
[#&#8203;3097](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3097),
[#&#8203;3548](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3548)).
- Performance improvements in `Dispatchers.Default` and `Dispatchers.IO`
([#&#8203;3416](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3416),
[#&#8203;3418](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3418)).
- Fixed a bug when internal `suspendCancellableCoroutineReusable` might
have hanged
([#&#8203;3613](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3613)).
- Introduced internal API to process events in the current system
dispatcher
([#&#8203;3439](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3439)).
- Global `CoroutineExceptionHandler` is no longer invoked in case of
unprocessed `future` failure
([#&#8203;3452](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3452)).
- Performance improvements and reduced thread-local pressure for the
`withContext` operator
([#&#8203;3592](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3592)).
- Improved performance of `DebugProbes`
([#&#8203;3527](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3527)).
- Fixed a bug when the coroutine debugger might have detected the state
of a coroutine incorrectly
([#&#8203;3193](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3193)).
- `CoroutineDispatcher.asExecutor()` runs tasks without dispatching if
the dispatcher is unconfined
([#&#8203;3683](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3683)).
Thanks [@&#8203;odedniv](https://togithub.com/odedniv)!
- `SharedFlow.toMutableList` and `SharedFlow.toSet` lints are introduced
([#&#8203;3706](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3706)).
- `Channel.invokeOnClose` is promoted to stable API
([#&#8203;3358](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3358)).
- Improved lock contention in `Dispatchers.Default` and `Dispatchers.IO`
during the startup phase
([#&#8203;3652](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3652)).
- Fixed a bug that led to threads oversubscription in
`Dispatchers.Default`
([#&#8203;3642](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3642)).
- Fixed a bug that allowed `limitedParallelism` to perform dispatches
even after the underlying dispatcher was closed
([#&#8203;3672](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3672)).
- Fixed a bug that prevented stacktrace recovery when the exception's
constructor from `cause` was selected
([#&#8203;3714](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3714)).
- Improved sanitizing of stracktrace-recovered traces
([#&#8203;3714](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3714)).
- Introduced an internal flag to disable uncaught exceptions reporting
in tests as a temporary migration mechanism
([#&#8203;3736](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3736)).
-   Various documentation improvements and fixes.

Changelog for previous versions may be found in
[CHANGES_UP_TO\_1.7.md](CHANGES_UP_TO\_1.7.md)

###
[`v1.6.4`](https://togithub.com/Kotlin/kotlinx.coroutines/releases/tag/1.6.4)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.6.3...1.6.4)

- Added `TestScope.backgroundScope` for launching coroutines that
perform work in the background and need to be cancelled at the end of
the test
([#&#8203;3287](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3287)).
- Fixed the POM of `kotlinx-coroutines-debug` having an incorrect
reference to `kotlinx-coroutines-bom`, which cause the builds of Maven
projects using the debug module to break
([#&#8203;3334](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3334)).
- Fixed the `Publisher.await` functions in `kotlinx-coroutines-reactive`
not ensuring that the `Subscriber` methods are invoked serially
([#&#8203;3360](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3360)).
Thank you, [@&#8203;EgorKulbachka](https://togithub.com/EgorKulbachka)!
- Fixed a memory leak in `withTimeout` on K/N with the new memory model
([#&#8203;3351](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3351)).
- Added the guarantee that all `Throwable` implementations in the core
library are serializable
([#&#8203;3328](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3328)).
- Moved the documentation to
<https://kotlinlang.org/api/kotlinx.coroutines/>
([#&#8203;3342](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3342)).
-   Various documentation improvements.

###
[`v1.6.3`](https://togithub.com/Kotlin/kotlinx.coroutines/releases/tag/1.6.3)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.6.2...1.6.3)

- Updated atomicfu version to 0.17.3
([#&#8203;3321](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3321)),
fixing the projects using this library with JS IR failing to build
([#&#8203;3305](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3305)).

###
[`v1.6.2`](https://togithub.com/Kotlin/kotlinx.coroutines/releases/tag/1.6.2)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.6.1...1.6.2)

- Fixed a bug with `ThreadLocalElement` not being correctly updated when
the most outer `suspend` function was called directly without
`kotlinx.coroutines`
([#&#8203;2930](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2930)).
- Fixed multiple data races: one that might have been affecting
`runBlocking` event loop, and a benign data race in `Mutex`
([#&#8203;3250](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3250),
[#&#8203;3251](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3251)).
- Obsolete `TestCoroutineContext` is removed, which fixes the
`kotlinx-coroutines-test` JPMS package being split between
`kotlinx-coroutines-core` and `kotlinx-coroutines-test`
([#&#8203;3218](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3218)).
- Updated the ProGuard rules to further shrink the size of the resulting
DEX file with coroutines
([#&#8203;3111](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3111),
[#&#8203;3263](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3263)).
Thanks, [@&#8203;agrieve](https://togithub.com/agrieve)!
- Atomicfu is updated to `0.17.2`, which includes a more efficient and
robust JS IR transformer
([#&#8203;3255](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3255)).
- Kotlin is updated to `1.6.21`, Gradle version is updated to `7.4.2`
([#&#8203;3281](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3281)).
Thanks,
[@&#8203;wojtek-kalicinski](https://togithub.com/wojtek-kalicinski)!
-   Various documentation improvements.

###
[`v1.6.1`](https://togithub.com/Kotlin/kotlinx.coroutines/releases/tag/1.6.1)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.6.0...1.6.1)

- Rollback of time-related functions dispatching on `Dispatchers.Main`.
This behavior was introduced in 1.6.0 and then found inconvenient and
erroneous
([#&#8203;3106](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3106),
[#&#8203;3113](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3113)).
- Reworked the newly-introduced `CopyableThreadContextElement` to solve
issues uncovered after the initial release
([#&#8203;3227](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3227)).
- Fixed a bug with `ThreadLocalElement` not being properly updated in
racy scenarios
([#&#8203;2930](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2930)).
- Reverted eager loading of default `CoroutineExceptionHandler` that
triggered ANR on some devices
([#&#8203;3180](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3180)).
- New API to convert a `CoroutineDispatcher` to a Rx scheduler
([#&#8203;968](https://togithub.com/Kotlin/kotlinx.coroutines/issues/968),
[#&#8203;548](https://togithub.com/Kotlin/kotlinx.coroutines/issues/548)).
Thanks [@&#8203;recheej](https://togithub.com/recheej)!
- Fixed a memory leak with the very last element emitted from `flow`
builder being retained in memory
([#&#8203;3197](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3197)).
- Fixed a bug with `limitedParallelism` on K/N with new memory model
throwing `ClassCastException`
([#&#8203;3223](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3223)).
- `CoroutineContext` is added to the exception printed to the default
`CoroutineExceptionHandler` to improve debuggability
([#&#8203;3153](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3153)).
- Static memory consumption of `Dispatchers.Default` was significantly
reduced
([#&#8203;3137](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3137)).
- Updated slf4j version in `kotlinx-coroutines-slf4j` from 1.7.25 to
1.7.32.

###
[`v1.6.0`](https://togithub.com/Kotlin/kotlinx.coroutines/releases/tag/1.6.0)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.5.2...1.6.0)

Note that this is a full changelog relative to the 1.5.2 version.
Changelog relative to 1.6.0-RC3 can be found at the end.

##### kotlinx-coroutines-test rework

- `kotlinx-coroutines-test` became a multiplatform library usable from
K/JVM, K/JS, and K/N.
- Its API was completely reworked to address long-standing issues with
consistency, structured concurrency and correctness
([#&#8203;1203](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1203),
[#&#8203;1609](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1609),
[#&#8203;2379](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2379),
[#&#8203;1749](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1749),
[#&#8203;1204](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1204),
[#&#8203;1390](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1390),
[#&#8203;1222](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1222),
[#&#8203;1395](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1395),
[#&#8203;1881](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1881),
[#&#8203;1910](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1910),
[#&#8203;1772](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1772),
[#&#8203;1626](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1626),
[#&#8203;1742](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1742),
[#&#8203;2082](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2082),
[#&#8203;2102](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2102),
[#&#8203;2405](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2405),
[#&#8203;2462](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2462)
    ).
- The old API is deprecated for removal, but the new API is based on the
similar concepts ([README](kotlinx-coroutines-test/README.md)), and the
migration path is designed to be graceful: [migration
guide](kotlinx-coroutines-test/MIGRATION.md).

##### Dispatchers

- Introduced `CoroutineDispatcher.limitedParallelism` that allows
obtaining a view of the original dispatcher with limited parallelism
([#&#8203;2919](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2919)).
- `Dispatchers.IO.limitedParallelism` usages ignore the bound on the
parallelism level of `Dispatchers.IO` itself to avoid starvation
([#&#8203;2943](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2943)).
- Introduced new `Dispatchers.shutdown` method for containerized
environments
([#&#8203;2558](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2558)).
- `newSingleThreadContext` and `newFixedThreadPoolContext` are promoted
to delicate API
([#&#8203;2919](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2919)).

##### Breaking changes

- When racing with cancellation, the `future` builder no longer reports
unhandled exceptions into the global `CoroutineExceptionHandler`. Thanks
[@&#8203;vadimsemenov](https://togithub.com/vadimsemenov)!
([#&#8203;2774](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2774),
[#&#8203;2791](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2791)).
- `Mutex.onLock` is deprecated for removal
([#&#8203;2794](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2794)).
- `Dispatchers.Main` is now used as the default source of time for
`delay` and `withTimeout` when present
([#&#8203;2972](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2972)).
- To opt-out from this behaviour, `kotlinx.coroutines.main.delay` system
property can be set to `false`.
- Java target of coroutines build is now 8 instead of 6
([#&#8203;1589](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1589)).
- **Source-breaking change**: extension `collect` no longer resolves
when used with a non-in-place argument of a functional type. This is a
candidate for a fix, uncovered after 1.6.0, see
[#&#8203;3107](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3107)
for the additional details.

##### Bug fixes and improvements

-   Kotlin is updated to 1.6.0.
- Kotlin/Native [new memory
model](https://blog.jetbrains.com/kotlin/2021/08/try-the-new-kotlin-native-memory-manager-development-preview/)
is now supported in regular builds of coroutines conditionally depending
on whether `kotlin.native.binary.memoryModel` is enabled
([#&#8203;2914](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2914)).
- Introduced `CopyableThreadContextElement` for mutable context elements
shared among multiple coroutines. Thanks
[@&#8203;yorickhenning](https://togithub.com/yorickhenning)!
([#&#8203;2893](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2893)).
- `transformWhile`, `awaitClose`, `ProducerScope`, `merge`,
`runningFold`, `runingReduce`, and `scan` are promoted to stable API
([#&#8203;2971](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2971)).
- `SharedFlow.subscriptionCount` no longer conflates incoming updates
and gives all subscribers a chance to observe a short-lived subscription
([#&#8203;2488](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2488),
[#&#8203;2863](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2863),
[#&#8203;2871](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2871)).
- `Flow` exception transparency mechanism is improved to be more
exception-friendly
([#&#8203;3017](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3017),
[#&#8203;2860](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2860)).
- Cancellation from `flat*` operators that leverage multiple coroutines
is no longer propagated upstream
([#&#8203;2964](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2964)).
- `SharedFlow.collect` now returns `Nothing`
([#&#8203;2789](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2789),
[#&#8203;2502](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2502)).
- `DisposableHandle` is now `fun interface`, and corresponding inline
extension is removed
([#&#8203;2790](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2790)).
- `FlowCollector` is now `fun interface`, and corresponding inline
extension is removed
([#&#8203;3047](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3047)).
- Deprecation level of all previously deprecated signatures is raised
([#&#8203;3024](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3024)).
- The version file is shipped with each JAR as a resource
([#&#8203;2941](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2941)).
- Unhandled exceptions on K/N are passed to the standard library
function `processUnhandledException`
([#&#8203;2981](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2981)).
- A direct executor is used for `Task` callbacks in
`kotlinx-coroutines-play-services`
([#&#8203;2990](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2990)).
- Metadata of coroutines artifacts leverages Gradle platform to have all
versions of dependencies aligned
([#&#8203;2865](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2865)).
- Default `CoroutineExceptionHandler` is loaded eagerly and does not
invoke `ServiceLoader` on its exception-handling path
([#&#8203;2552](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2552)).
- Fixed the R8 rules for `ServiceLoader` optimization
([#&#8203;2880](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2880)).
- Fixed BlockHound integration false-positives
([#&#8203;2894](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2894),
[#&#8203;2866](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2866),
[#&#8203;2937](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2937)).
- Fixed the exception handler being invoked several times on Android,
thanks to [@&#8203;1zaman](https://togithub.com/1zaman)
([#&#8203;3056](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3056)).
- `SendChannel.trySendBlocking` is now available on Kotlin/Native
([#&#8203;3064](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3064)).
- The exception recovery mechanism now uses `ClassValue` when available
([#&#8203;2997](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2997)).
- JNA is updated to 5.9.0 to support Apple M1
([#&#8203;3001](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3001)).
- Obsolete method on internal `Delay` interface is deprecated
([#&#8203;2979](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2979)).
-   Support of deprecated `CommonPool` is removed.
- `@ExperimentalTime` is no longer needed for methods that use
`Duration`
([#&#8203;3041](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3041)).
- JDK 1.6 is no longer required for building the project
([#&#8203;3043](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3043)).
- New version of Dokka is used, fixing the memory leak when building the
coroutines and providing brand new reference visuals
(https://kotlin.github.io/kotlinx.coroutines/)
([#&#8203;3051](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3051),
[#&#8203;3054](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3054)).

###
[`v1.5.2`](https://togithub.com/Kotlin/kotlinx.coroutines/releases/tag/1.5.2)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.5.1...1.5.2)

-   Kotlin is updated to 1.5.30.
-   New native targets for Apple Silicon are introduced.
- Fixed a bug when `onUndeliveredElement` was incorrectly called on
properly received elements on JS
([#&#8203;2826](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2826)).
- Fixed `Dispatchers.Default` on React Native, it now fully relies on
`setTimeout` instead of stub `process.nextTick`. Thanks to
[@&#8203;Legion2](https://togithub.com/Legion2)
([#&#8203;2843](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2843)).
- Optimizations of `Mutex` implementation
([#&#8203;2581](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2581)).
- `Mutex` implementation is made completely lock-free as stated
([#&#8203;2590](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2590)).
- Various documentation and guides improvements. Thanks to
[@&#8203;MasoodFallahpoor](https://togithub.com/MasoodFallahpoor) and
[@&#8203;Pihanya](https://togithub.com/Pihanya).

###
[`v1.5.1`](https://togithub.com/Kotlin/kotlinx.coroutines/releases/tag/1.5.1)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.5.0...1.5.1)

- Atomic `update`, `getAndUpdate`, and `updateAndGet` operations of
`MutableStateFlow`
([#&#8203;2720](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2720)).
- `Executor.asCoroutineDispatcher` implementation improvements
([#&#8203;2601](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2601)):
- If the target executor is `ScheduledExecutorService`, then its
`schedule` API is used for time-related coroutine operations.
    -   `RemoveOnCancelPolicy` is now part of the public contract.
- Introduced overloads for `Task.asDeferred` and `Task.await` that
accept `CancellationTokenSource` for bidirectional cancellation
([#&#8203;2527](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2527)).
- Reactive streams are updated to `1.0.3`
([#&#8203;2740](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2740)).
- `CopyableThrowable` is allowed to modify the exception message during
stacktrace recovery
([#&#8203;1931](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1931)).
- `CoroutineDispatcher.releaseInterceptedContinuation` is now a `final`
method
([#&#8203;2785](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2785)).
- Closing a Handler underlying `Handler.asCoroutineDispatcher` now
causes the dispatched coroutines to be canceled on `Dispatchers.IO
(#&#8203;2778)`.
-   Kotlin is updated to 1.5.20.
- Fixed a spurious `ClassCastException` in
`releaseInterceptedContinuation` and `IllegalStateException` from
`tryReleaseClaimedContinuation`
([#&#8203;2736](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2736),
[#&#8203;2768](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2768)).
- Fixed inconsistent exception message during stacktrace recovery for
non-suspending channel iterators
([#&#8203;2749](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2749)).
- Fixed linear stack usage for `CompletableFuture.asDeferred` when the
target future has a long chain of listeners
([#&#8203;2730](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2730)).
- Any exceptions from `CoroutineDispatcher.isDispatchNeeded` are now
considered as fatal and are propagated to the caller
([#&#8203;2733](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2733)).
- Internal `DebugProbesKt` (used in the debugger implementation) are
moved from `debug` to `core` module.

###
[`v1.5.0`](https://togithub.com/Kotlin/kotlinx.coroutines/releases/tag/1.5.0)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.4.3...1.5.0)

Note that this is a full changelog relative to 1.4.3 version. Changelog
relative to 1.5.0-RC can be found in the end.

##### Channels API

- Major channels API rework
([#&#8203;330](https://togithub.com/Kotlin/kotlinx.coroutines/issues/330),
[#&#8203;974](https://togithub.com/Kotlin/kotlinx.coroutines/issues/974)).
Existing `offer`, `poll`, and `sendBlocking` methods are deprecated,
internal `receiveCatching` and `onReceiveCatching` removed,
`receiveOrNull` and `onReceiveOrNull` are completely deprecated.
Previously deprecated `SendChannel.isFull` declaration is removed.
Channel operators deprecated with `ERROR` are now `HIDDEN`.
- New methods `receiveCatching`, `onReceiveCatching` `trySend`,
`tryReceive`, and `trySendBlocking` along with the new result type
`ChannelResult` are introduced. They provide better type safety, are
less error-prone, and have a consistent future-proof naming scheme. The
full rationale behind this change can be found
[here](https://togithub.com/Kotlin/kotlinx.coroutines/issues/974#issuecomment-806569582).
- `BroadcastChannel` and `ConflatedBroadcastChannel` are marked as
`ObsoleteCoroutinesApi` in the favor or `SharedFlow` and `StateFlow`.
The migration scheme can be found in their documentation. These classes
will be deprecated in the next major release.
-   `callbackFlow` and `channelFlow` are promoted to stable API.

##### Reactive integrations

- All existing API in modules `kotlinx-coroutines-rx2`,
`kotlinx-coroutines-rx3`, `kotlinx-coroutines-reactive`,
`kotlinx-coroutines-reactor`, and `kotlinx-coroutines-jdk9` were
revisited and promoted to stable
([#&#8203;2545](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2545)).
- `publish` is no longer allowed to emit `null` values
([#&#8203;2646](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2646)).
- Misleading `awaitSingleOr*` functions on `Publisher` type are
deprecated
([#&#8203;2591](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2591)).
- `MaybeSource.await` is deprecated in the favor of `awaitSingle`,
additional lint functions for `Mono` are added in order to prevent
ambiguous `Publisher` usages
([#&#8203;2628](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2628),
[#&#8203;1587](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1587)).
- `ContextView` support in `kotlinx-coroutines-reactor`
([#&#8203;2575](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2575)).
- All reactive builders no longer ignore inner cancellation exceptions
preventing their completion
([#&#8203;2262](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2262),
[#&#8203;2646](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2646)).
- `MaybeSource.collect` and `Maybe.collect` properly finish when they
are completed without a value
([#&#8203;2617](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2617)).
- All exceptions are now consistently handled according to reactive
specification, whether they are considered 'fatal' or not by reactive
frameworks
([#&#8203;2646](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2646)).

##### Other improvements

- Kotlin version is upgraded to 1.5.0 and JVM target is updated to 1.8.
- `Flow.last` and `Flow.lastOrNull` operators
([#&#8203;2246](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2246)).
- `Flow.runningFold` operator
([#&#8203;2641](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2641)).
- `CoroutinesTimeout` rule for JUnit5
([#&#8203;2197](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2197)).
- Internals of `Job` and `AbstractCoroutine` was reworked, resulting in
smaller code size, less memory footprint, and better performance
([#&#8203;2513](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2513),
[#&#8203;2512](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2512)).
- `CancellationException` from Kotlin standard library is used for
cancellation on Koltin/JS and Kotlin/Native
([#&#8203;2638](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2638)).
- Introduced new `DelicateCoroutinesApi` annotation that warns users
about potential target API pitfalls and suggests studying API's
documentation first. The only delicate API right now is `GlobalScope`
([#&#8203;2637](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2637)).
- Fixed bug introduced in `1.4.3` when `kotlinx-coroutines-core.jar`
triggered IDEA debugger failure
([#&#8203;2619](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2619)).
- Fixed memory leak of `ChildHandlerNode` with reusable continuations
([#&#8203;2564](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2564)).
- Various documentation improvements
([#&#8203;2555](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2555),
[#&#8203;2589](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2589),
[#&#8203;2592](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2592),
[#&#8203;2583](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2583),
[#&#8203;2437](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2437),
[#&#8203;2616](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2616),
[#&#8203;2633](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2633),
[#&#8203;2560](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2560)).

##### Changelog relative to version 1.5.0-RC

- Fail-fast during `emitAll` called from cancelled `onCompletion`
operator
([#&#8203;2700](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2700)).
- Flows returned by `stateIn`/`shareIn` keep strong reference to sharing
job
([#&#8203;2557](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2557)).
- Rename internal `TimeSource` to `AbstractTimeSource` due to import
issues
([#&#8203;2691](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2691)).
- Reverted the change that triggered IDEA coroutines debugger crash
([#&#8203;2695](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2695),
reverted
[#&#8203;2291](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2291)).
- `watchosX64` target support for Kotlin/Native
([#&#8203;2524](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2524)).
-   Various documentation fixes and improvements.

###
[`v1.4.3`](https://togithub.com/Kotlin/kotlinx.coroutines/releases/tag/1.4.3)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.4.2...1.4.3)

##### General changes

- Thread context is properly preserved and restored for coroutines
without `ThreadContextElement`
([#&#8203;985](https://togithub.com/Kotlin/kotlinx.coroutines/issues/985))
- `ThreadContextElement`s are now restored in the opposite order from
update
([#&#8203;2195](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2195))
- Improved performance of combine with 4 parameters, thanks to
[@&#8203;alexvanyo](https://togithub.com/alexvanyo)
([#&#8203;2419](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2419))
- Debug agent sanitizer leaves at least one frame with source location
([#&#8203;1437](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1437))
- Update Reactor version in `kotlinx-coroutines-reactor` to `3.4.1`,
thanks to [@&#8203;sokomishalov](https://togithub.com/sokomishalov)
([#&#8203;2432](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2432))
- `callsInPlace` contract added to `ReceiveChannel.consume`
([#&#8203;941](https://togithub.com/Kotlin/kotlinx.coroutines/issues/941))
- `CoroutineStart.UNDISPATCHED` promoted to stable API
([#&#8203;1393](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1393))
-   Kotlin updated to 1.4.30
-   `kotlinx.coroutines` are now released directly to MavenCentral
-   Reduced the size of `DispatchedCoroutine` by a field
- Internal class `TimeSource` renamed to `SchedulerTimeSource` to
prevent wildcard import issues
([#&#8203;2537](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2537))

##### Bug fixes

- Fixed the problem that prevented implementation via delegation for
`Job` interface
([#&#8203;2423](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2423))
- Fixed incorrect ProGuard rules that allowed shrinking volatile felds
([#&#8203;1564](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1564))
- Fixed `await`/`asDeferred` for `MinimalStage` implementations in jdk8
module
([#&#8203;2456](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2456))
- Fixed bug when `onUndeliveredElement` wasn't called for unlimited
channels
([#&#8203;2435](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2435))
- Fixed a bug when `ListenableFuture.isCancelled` returned from
`asListenableFuture` could have thrown an exception, thanks to
[@&#8203;vadimsemenov](https://togithub.com/vadimsemenov)
([#&#8203;2421](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2421))
- Coroutine in `callbackFlow` and `produce` is properly cancelled when
the channel was closed separately
([#&#8203;2506](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2506))

###
[`v1.4.2`](https://togithub.com/Kotlin/kotlinx.coroutines/releases/tag/1.4.2)

[Compare
Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.4.1...1.4.2)

- Fixed `StackOverflowError` in `Job.toString` when `Job` is observed in
its intermediate state
([#&#8203;2371](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2371)).
- Improved liveness and latency of `Dispatchers.Default` and
`Dispatchers.IO` in low-loaded mode
([#&#8203;2381](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2381)).
- Improved performance of consecutive `Channel.cancel` invocations
([#&#8203;2384](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2384)).
- `SharingStarted` is now `fun` interface
([#&#8203;2397](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2397)).
- Additional lint settings for `SharedFlow` to catch programmatic errors
early
([#&#8203;2376](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2376)).
- Fixed bug when mutex and semaphore were not released during
cancellation
([#&#8203;2390](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2390),
thanks to [@&#8203;Tilps](https://togithub.com/Tilps) for reproducing).
- Some corner cases in cancellation propagation between coroutines and
listenable futures are repaired
([#&#8203;1442](https://togithub.com/Kotlin/kotlinx.coroutines/issues/1442),
thanks to [@&#8203;vadimsemenov](https://togithub.com/vadimsemenov)).
- Fixed unconditional cast to `CoroutineStackFrame` in exception
recovery that triggered failures of instrumented code
([#&#8203;2386](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2386)).
- Platform-specific dependencies are removed from
`kotlinx-coroutines-javafx`
([#&#8203;2360](https://togithub.com/Kotlin/kotlinx.coroutines/issues/2360)).

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/pachli/pachli-android).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjEuOSIsInVwZGF0ZWRJblZlciI6IjM3LjQzMS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-14 23:00:07 +02:00