Commit Graph
21580 Commits
Author SHA1 Message Date
Noah Talerman efc67f8d09 Remove automation for audit-logs.md (#39937)
- Instead, changes to activity will be specified as a PR to
`audit-logs.md` in the reference doc release branch just like API and
YAML (GitOps) changes
2026-02-18 09:16:57 -05:00
73dba23392 Allow MySQL IAM authentication when a custom TLS CA/TLS config is set (#39808)
# Checklist for submitter

If some of the following don't apply, delete the relevant line.

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.


## Testing

- [x] Added/updated automated tests

- [x] QA'd all new/changed functionality manually

For unreleased bug fixes in a release candidate, one of:

- [x] Confirmed that the fix is not expected to adversely impact load
test results


Note: this solves https://github.com/fleetdm/fleet/issues/39832

---------

Co-authored-by: Scott Gress <scott@fleetdm.com>
Co-authored-by: Scott Gress <scottmgress@gmail.com>
2026-02-18 08:15:29 -06:00
Juan Fernandez 6db4b642da Refactored query used when bulk deleting Apple MDM profiles to rely only on primary keys. (#39705)
**Related issue:** Resolves #38955 

The query that was causing the lock contention was identified as `DELETE
FROM host_mdm_apple_profiles WHERE ( profile_identifier , host_uuid ) IN
( (...) /* , ... */ )` which corresponds to the query we use to delete
the Apple profiles in Bulk. The query was refactored to utilize the
primary key: (profile_uuid, host_uuid), which removes any kind of table
scanning.
2026-02-18 10:13:47 -04:00
Scott Gress c9e7a7a13a Fix enroll secrets UI (#40004)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #39260

# Details

Fixes the banner displayed when a team has no enroll secrets to match
similar, non-dismissible warning banners, and corrects the padding
between text and button in the "Add enroll secret" modal empty state.

<img width="773" height="221" alt="image"
src="https://github.com/user-attachments/assets/490f49f1-ccaa-47c7-8ba3-a7de2896d932"
/>

---

<img width="662" height="380" alt="image"
src="https://github.com/user-attachments/assets/0f73b9b8-d625-4f40-ac8d-edb71e9f2a22"
/>


# Checklist for submitter

If some of the following don't apply, delete the relevant line.

- [X] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.

## Testing

- [ ] Added/updated automated tests
n/a, styling only
- [X] QA'd all new/changed functionality manually
See screenshots above
2026-02-18 08:11:33 -06:00
fleet-releaseandmostlikelee 3bcfab5bbd Update Fleet-maintained apps (#39993)
Automated ingestion of latest Fleet-maintained app data.

Co-authored-by: mostlikelee <16102903+mostlikelee@users.noreply.github.com>
2026-02-18 07:56:54 -06:00
Lucas Manuel Rodriguez 6ba40a3571 Fix technician permissions to access enroll secrets (#39959)
## Testing

- [X] Added/updated automated tests
- [X] QA'd all new/changed functionality manually

For unreleased bug fixes in a release candidate, one of:

- [X] Confirmed that the fix is not expected to adversely impact load
test results
2026-02-18 09:42:25 -03:00
Gabriel Hernandez 0f38559203 fix whitespace wrapping on status table in mdm card on dashboard page (#39955)
**Related issue:** Resolves #38654

# Checklist for submitter

This fixes an issue where the status name was wrapping at smaller
viewport sizes on the mdm card of the dashboard page.

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
- [x] QA'd all new/changed functionality manually
2026-02-18 12:00:17 +00:00
Scott Gress 54b51fce6c Revert moving to fleet_id prematurely in API requests (#40005)
Until backend updates are merged, we can't send `fleet_id` as a query
parameter in API calls. This PR reverts the code that switched to
`fleet_id` so that the front end will continue to work while we finalize
back-end changes in https://github.com/fleetdm/fleet/pull/39873.

On current main branch, switching between fleets in the dropdown on the
Hosts page does nothing (always shows Unassigned hosts). With this fix
it switches between fleets as expected.
2026-02-18 00:25:23 -06:00
Victor Lyuboslavsky 5d93ac2d6e Fixed false negative CVE-2026-20841 on Windows Notepad. (#39931)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #39745

Needed to add a custom matching rule because the Notepad CPE does not
exist in NVD (yet?).

# Checklist for submitter

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.

## Testing

- [x] Added/updated automated tests
- [x] QA'd all new/changed functionality manually


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Bug Fixes**
* Added detection and resolution tracking for CVE-2026-20841 affecting
Windows Notepad, resolved in version 11.2510.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-02-17 19:54:36 -06:00
Brock Walters 21b51d5038 Linux provisioning gap article (#39953)
Clarified language regarding the gap in Linux MDM and improved
readability in sections discussing enterprise Linux deployments and
management approaches.

part 2 of Linux series documented here:
https://docs.google.com/document/d/1hX9mphs_fKvd4rghtD_-kL91jaFXFZp2x9-3p0nYhAo/edit?tab=t.0

cc @akuthiala
2026-02-17 20:50:19 -05:00
Eric 2109e87690 Website: fix broken links (#40000)
Changes:
- Fixed a broken link on /customers
(`/announcements/articles/global-workforce-management-company-achieves-compliance-and-clarity-with-fleet`
»
`/announcements/global-workforce-management-company-achieves-compliance-and-clarity-with-fleet`)
- Added a redirect for the security handbook page
- Fixed two broken links in articles
2026-02-17 18:08:11 -06:00
Eric be54839d3c Website: upgrade jsforce dependency (#39999)
Changes:
- upgraded the version of jsforce used by the website (`1.11.1` »
`3.10.14`)
- Updated the error handling in the updateOrCreateContactAndAccount
helper to work with the updated version of jsforce
2026-02-17 17:17:24 -06:00
Konstantin Sykulev 3d4a3e1b87 Added deny list for checking external user submitted urls (#39947)
This PR changes 3 things.
1. Validate `admin_url` + all URLs for HTTPS/non-private
2. Add custom `DialContext` hook in fleethttp.NewClient(), this is
needed for DNS-rebinding protection at connection time
3. Validate Smallstep SCEP challenge endpoint 

# **IMPORTANT**
There are two validations occurring.
1. `CheckURLForSSRF`
2. `SSRFDialContext`

## Why?
`CheckURLForSSRF` checks the hostname. It resolves DNS, validates the
ip, and then returns an error to the user. It protects certificate
authority create/update API endpoints. But then
`GetSmallstepSCEPChallenge` calls `http.NewRequest(http.MethodPost,
ca.ChallengeURL, ...)` with the original hostname
This is where `SSRFDialContext` comes into play. It fires when an actual
HTTP request is attempted. Meaning Fleet would first build the request,
encode the body, set up TLS, etc., before being blocked at the dial.
`CheckURLForSSRF` stops the operation before any of that work happens.
`SSRFDialContext` protects the actual challenge fetch that happens later
at enrollment time. They're not always called together. The dial-time
check is the only thing protecting the enrollment request and DNS
rebinding.

## Should we remove `CheckURLForSSRF`
This is debatable and I don't have a strong opinion. Removing
`CheckURLForSSRF` would still provide the same protection. However, it
would return a generic connection error from the HTTP client which would
make it slightly hard to diagnose why it is broken.

## What's next
I implemented this for certificate authorities. I am sure there are
other places in the code base that take user submitted urls and could
also use this check. That is outside the scope of this particular PR.
But worthy to investigate in the near future.

If some of the following don't apply, delete the relevant line.

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.


## Testing

- [x] Added/updated automated tests
- [x] QA'd all new/changed functionality manually

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Security**
* Added SSRF protections for validating external URLs and blocking
private/IP-metadata ranges; dev mode can bypass checks for local testing
* **New Features**
* Introduced an SSRF-protected HTTP transport and an option to supply a
custom transport per client
* **Tests**
* Added comprehensive tests covering SSRF validation, dialing behavior,
and resolution edge cases
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-02-17 17:09:52 -06:00
melpike f437c13f19 Update Chrome security warning instructions (#39978) 2026-02-17 16:18:37 -06:00
Isabell Reedy 7c15712e44 Remove SMB AE role (#39976) 2026-02-17 22:18:30 +00:00
Victor Lyuboslavsky 898dbf2b66 Updating scope of engineering-initiated stories. (#39969) 2026-02-17 15:53:54 -06:00
Noah Talerman a79da99ad4 Engineering handbook: Remove outdated bit (#39960) 2026-02-17 15:46:51 -06:00
Lucas Manuel Rodriguez 89425cb441 Fix template and while we're at it, typos (#39956) 2026-02-17 15:45:59 -06:00
Victor Lyuboslavsky abaeeec6b8 Change Datastore.logger type to *logging.Logger (#39938)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #38889

This is preparatory work before incrementally converting datastore/mysql
files to directly use *slog.Logger.
This will be done by using `logger.SlogLogger()` to get the underlying
`*slog.Logger`

# Checklist for submitter

- [ ] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
  - Changes file already exists from previous PR

## Testing

- [x] Added/updated automated tests
- [x] QA'd all new/changed functionality manually


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
* Updated internal logging infrastructure to use a standardized platform
logging package across database and utility components. This
consolidates logging dependencies and improves system consistency
without affecting user-facing functionality.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-02-17 15:29:52 -06:00
Scott Gress cd18ced3e9 Rename teams and queries to fleets and reports in UI (#39572) 2026-02-17 15:19:33 -06:00
Robert Fairburn 0f9c05577b Firehose resources were in us-east-1 (#39991) 2026-02-17 14:52:19 -06:00
Noah Talerman b8d9f14793 #g-mdm Product Designer: Mel Pike (#39982)
Starting next sprint (2026-02-23)
2026-02-17 15:28:59 -05:00
Robert FairburnandJorge Falcon dac2ef18f0 Ensure terraform docker compatibility with github actions (#39988)
Co-authored-by: Jorge Falcon <22119513+BCTBB@users.noreply.github.com>
2026-02-17 15:09:50 -05:00
Zay HanlonandSam Pfluger b99c5cf432 Update Customer Success Manager section since GTM link is broken (#39766)
Co-authored-by: Sam Pfluger <108141731+Sampfluger88@users.noreply.github.com>
2026-02-17 14:03:50 -06:00
Marko Lisica 5871cb2b19 Add offline unlock instructions for iOS/iPadOS hosts (#39977)
Related to:
- #39251
2026-02-17 13:28:01 -05:00
Noah Talerman 694b9d4fcf Update quick wins definition with PR handling (#39979)
Clarify process for handling quick wins in the sprint workflow.
2026-02-17 13:23:34 -05:00
Juan Fernandez 43d70e82a8 Label validation not catching invalid platform (#39964)
Resolves #39083 

Updated validation rules around the creation of labels to make sure only valid platforms can be used.
2026-02-17 14:04:07 -04:00
Eric b83aed2537 Website: Create admin page for resetting Fleet Premium trials (#39980)
Changes:
- Added /admin/reset-trial, a page where website admins can reset local
Fleet Premium trials.
- Added a link to the reset trial page to the navigation on admin pages.
2026-02-17 11:59:30 -06:00
Juan Fernandez aec1f1e304 Fixed bug with Host detail software tab page title (#39941)
Resolves #39613

Fixed an issue where the App component incorrectly reset the page title
when navigating to the Software tab on the Host detail page.
2026-02-17 13:20:24 -04:00
Robert Fairburn f9ca19dc09 Update version of geolite2 module (#39973) 2026-02-17 10:55:28 -06:00
Scott Gress e14bfd60fe Add renameto tags to prepare for deprecating team and query API params (#39847)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** For #39344

# Details

As a first step to deprecating API params like `team_id` in favor of
`fleet_id` and `query_id` in favor of `report_id`, this PR adds
`renameto` tags to all deprecated keys. There is no logic in this PR to
actually use these tags in any way. The logic and test fixes will be in
the next PR, but in the interest of keeping things manageable I'm
pushing this out first.

There were definitely params with "query" in them that we don't want to
change (mainly osquery-related), and I think I kept them all out but
it's worth double-checking here. The team -> fleet changes are pretty
safe in comparison.

# Checklist for submitter

If some of the following don't apply, delete the relevant line.

- [ ] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.
Deferring changelog to PR with logic changes

## Testing

- [ ] Added/updated automated tests
This should be a no-op.  All existing tests shoud pass.
- [X] QA'd all new/changed functionality manually
2026-02-17 10:00:59 -06:00
fleet-releaseandmostlikelee 1c93a5aef3 Update Fleet-maintained apps (#39958)
Automated ingestion of latest Fleet-maintained app data.

Co-authored-by: mostlikelee <16102903+mostlikelee@users.noreply.github.com>
2026-02-17 09:44:27 -06:00
Victor Lyuboslavsky 6fc7132350 Trigger vuln processing when it runs on a separate server (#39612)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #35239

Docs PR: #39770

## Remote trigger approach
When FLEET_VULNERABILITIES_DISABLE_SCHEDULE=true, the main Fleet server
registers a RemoteTriggerSchedule instead of the real vulnerability
schedule. When a user runs fleetctl trigger --name=vulnerabilities:
1. Main server: RemoteTriggerSchedule.Trigger() inserts a cron_stats
record with status=queued.
2. Worker server: The vulnerability schedule runs with
WithTriggerPollInterval(60s), which starts a poll goroutine that checks
the DB every 60s for queued records.
3. Pickup: When the poll goroutine finds a queued record, it sends the
stats ID on the trigger channel (non-blocking).
4. Execution: The trigger handler acquires the lock, claims the record
via ClaimCronStats (updating status to pending and instance to the
actual worker ID), runs all jobs, and marks it completed.

Key details:
- The trigger channel carries an int: 0 for in-process triggers, >0 for
DB-polled stats IDs. This lets runWithStats reuse the existing record
instead of inserting a new one.
- Both Schedule.Trigger() and RemoteTriggerSchedule.Trigger() treat
pending and queued as conflicts to prevent duplicate runs.
- Queued records expire after 2 hours via CleanupCronStats, same as
pending records.
- The poll goroutine only signals; it doesn't modify DB state. The
handler claims when ready.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added support for remote trigger execution in vulnerability scheduling
workflows.
* Implemented periodic polling mechanism to detect and process
externally triggered vulnerability scans.

* **Bug Fixes**
* Enhanced trigger status tracking to properly handle queued scan jobs.

* **Improvements**
* Strengthened scheduling system with improved timeout and cancellation
management capabilities.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-02-17 09:18:03 -06:00
Tim Lee a3bafe8818 Jetbrains override query (#39800) 2026-02-17 08:00:36 -07:00
RachelElysia d808fc88f5 Fleet UI: Update setup page styling (#39846) 2026-02-17 09:35:00 -05:00
Jordan Montgomery a19ecbb93b Ignore kiloconnect PRs in oncall script (#39957)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** None

Well hello there neighbor. If I may make a gentle suggestion, I think we
should ignore Kiloconnect in the oncall script. Its contributions are
valued but I assume another friendly neighbor initiated each wonderful
PR it opens and we can be more kind to the oncall engineer by not
showing these.

In all seriousness I just assume someone else at fleet initiated any
Kiloconnect PR so we need not return them in the oncall script, but we
also shouldn't add it to the list of humans
2026-02-17 09:28:21 -05:00
Victor Lyuboslavsky 42d5f1fda6 Improve error handling on AWS DB failover (#39841)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #39228 

Manually tested by triggering a failover on loadtest.

# Checklist for submitter

If some of the following don't apply, delete the relevant line.

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.

## Testing

- [x] Added/updated automated tests
- [x] QA'd all new/changed functionality manually


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* Health checks now detect a primary DB becoming read-only and report
failure so the service restarts and reconnects to a writable primary.
* Write failures due to DB read-only state now trigger immediate fatal
handling to prompt graceful shutdown and recovery.
* Improved detection and handling of read-only DB conditions to increase
stability during failovers.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-02-17 07:10:52 -06:00
Harrison Ravazzolo ffca20142b Enable firehose logging in Dogfood (#39954)
Reenable firehose log shipping in dogfood. Created new hoses and role in
SC account
2026-02-16 21:29:44 -08:00
kiloconnect[bot]andBrock Walters 8cd853f3af Add article: Why work laptops don't work on plane wifi (#39814)
## New article: Why work laptops don't work on plane wifi

This article explores why work laptops often fail to connect properly on
plane wifi, and proposes that IT teams should consider making employee
laptops work on plane wifi by default.

### Key topics covered:
- Common frustrations with work laptops on inflight wifi
- Technical causes: VPN conflicts, DNS filtering, captive portal
blocking, certificate errors
- UX challenges: employees can't diagnose or fix issues mid-flight
- Potential solutions: split-tunnel VPNs, captive portal detection,
graceful security degradation
- References a LinkedIn discussion thread on this topic

### Article details:
- **Author:** Mike McNeil (mikermcneil)
- **Category:** articles
- **Word count:** ~750 words
- **File:** `articles/why-work-laptops-dont-work-on-plane-wifi.md`

---

Built for
[mikermcneil](https://fleetdm.slack.com/archives/D0AFASLRHNU/p1770982271436629)
by [Kilo for Slack](https://kilo.ai/features/slack-integration)

Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>
Co-authored-by: Brock Walters <153771548+nonpunctual@users.noreply.github.com>
2026-02-16 23:12:16 -05:00
fleet-releaseandmostlikelee fdb1c7290f Update Fleet-maintained apps (#39942)
Automated ingestion of latest Fleet-maintained app data.

Co-authored-by: mostlikelee <16102903+mostlikelee@users.noreply.github.com>
2026-02-16 20:35:34 -06:00
jacobshandling fc31741a19 Dynamically alphabetize vitals on the host details page (#39946)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #39794 

Before –> After
<img width="2015" height="479" alt="Screenshot 2026-02-16 at 1 28 11 PM"
src="https://github.com/user-attachments/assets/5f54b3d0-94d4-4881-8364-d22398289f18"
/>


- [x] Changes file added for user-visible changes in `changes/
- [x] QA'd all new/changed functionality manually
2026-02-16 15:31:20 -08:00
Mike Thomas 37bd3b1321 Update testimonials.ejs (#39908)
Updated case study cards. Related to
https://github.com/fleetdm/fleet/pull/39907/
2026-02-16 17:14:48 -06:00
Eric a9647053fe Website: Update handbook styles (#39949)
Closes: https://github.com/fleetdm/fleet/issues/38740

Changes:
- Reduced the padding between H2 and H3 headings on handbook pages
- Updated the link and chevron icons used on handbook pages to be green
2026-02-16 16:24:31 -06:00
Victor Lyuboslavsky 44c6aee5c7 Converted osquery_utils to slog (#39883)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #38889 

Plan was to convert `osquery_utils` package to slog. Picked up some
additional code that was related.

# Checklist for submitter

- [ ] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
  - Already have changes

## Testing

- [x] Added/updated automated tests
- [x] QA'd all new/changed functionality manually


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

# Release Notes

## Refactor
* Updated internal logging infrastructure to use improved system-level
logging utilities

## Tests
* Updated test suite to align with internal logging changes

---

**Note:** This release contains internal infrastructure improvements
with no user-facing changes or new features.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-02-16 15:43:59 -06:00
Noah Talerman 01e49d5a69 Eng handbook: Outdated engineering-initiated story (#39918) 2026-02-16 15:32:21 -06:00
Eric baada0741f Website: Update GitHub webhook exits (#39940)
Changes:
- Added a new exit to the receive-from-github webhook that is used when
a provided `botSignature` does not match the `githubBotWebhookSecret`
config variable
2026-02-16 15:07:30 -06:00
Victor Lyuboslavsky 988f0bbcc6 Transitioned activity bounded context to slog. (#39773)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #38889 

# Checklist for submitter

- [ ] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
  - Changes file already exists

## Testing

- [x] Added/updated automated tests
- [x] QA'd all new/changed functionality manually


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
* Updated internal logging infrastructure across activity service
modules to enhance code consistency and maintainability.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-02-16 14:23:36 -06:00
Eric 0e729604ed Website: Update user record (#39664)
Changes:
- Added a new attribute to the user record:
`fleetPremiumTrialEmailSentAt` - A JS timestamp representing when a user
was sent an email about their Fleet Premium trial
- Updated the `deliver-expired-local-trial-emails` and
`manage-fleet-premium-trial-instances` scripts to set this value when
users are sent an email about their expired trial.
2026-02-16 14:22:22 -06:00
Noah Talerman a5e37582d5 Controls > OS settings > Disk encryption: Consistent padding/styles (#39802)
For the following quick win:
- https://github.com/fleetdm/fleet/issues/39803
2026-02-16 15:21:05 -05:00
Martin Angers 81b5d7b04e Website: return 404 if Android enterprise application is not found (#39935) 2026-02-16 15:14:29 -05:00