late-sdk 0.0.122 → 0.0.124

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/openapi.yaml CHANGED
@@ -100,7 +100,7 @@ x-documentation:
100
100
  | Twitter/X | Yes | - | Yes | Yes |
101
101
  | Instagram | Yes | Yes | Yes | Yes |
102
102
  | Facebook | Yes | Stories | Yes | Yes |
103
- | LinkedIn | Yes | - | Yes | - |
103
+ | LinkedIn | Yes | - | Partial | - |
104
104
  | TikTok | Yes | - | Yes | - |
105
105
  | YouTube | Yes | Shorts | Yes | Yes |
106
106
  | Pinterest | Yes | - | Yes | - |
@@ -111,6 +111,8 @@ x-documentation:
111
111
  | Telegram | Yes | - | - | - |
112
112
  | Snapchat | Yes | - | - | - |
113
113
 
114
+ > **LinkedIn Analytics Note:** For personal LinkedIn accounts, analytics are only available for posts published through Zernio. This is a LinkedIn API limitation: the `memberCreatorPostAnalytics` endpoint only returns metrics for posts authored by the authenticated user. Company/organization page analytics are not affected and work for all posts.
115
+
114
116
  ## Rate Limits
115
117
 
116
118
  | Plan | Requests/min | Posts/month |
@@ -1985,11 +1987,31 @@ components:
1985
1987
 
1986
1988
  TikTokPlatformData:
1987
1989
  type: object
1988
- description: Photo carousels up to 35 images. Video titles up to 2200 chars, photo titles truncated to 90 chars. privacyLevel must match creator_info options. Both camelCase and snake_case accepted.
1990
+ description: |
1991
+ Photo carousels up to 35 images. Video titles up to 2200 chars, photo titles truncated to 90 chars.
1992
+ privacyLevel must match creator_info options. Both camelCase and snake_case accepted.
1993
+
1994
+ **Creator Inbox (draft mode):** Set `draft: true` to send content to the TikTok Creator Inbox
1995
+ instead of publishing immediately. The creator receives an inbox notification and completes
1996
+ the post using TikTok's editing flow. This maps to TikTok's `post_mode: "MEDIA_UPLOAD"` internally.
1997
+
1998
+ **Important:** The field `publish_type` is NOT supported. Use `draft: true` for Creator Inbox flow.
1999
+
2000
+ **Photo drafts** use the `/v2/post/publish/content/init/` endpoint with `post_mode: "MEDIA_UPLOAD"`.
2001
+ **Video drafts** use the dedicated `/v2/post/publish/inbox/video/init/` endpoint.
2002
+
2003
+ When `draft: true`, the `video.upload` scope is required. When `draft` is false or omitted
2004
+ (direct post), the `video.publish` scope is required. For Creator Inbox, TikTok app version
2005
+ must be 31.8 or higher.
1989
2006
  properties:
1990
2007
  draft:
1991
2008
  type: boolean
1992
- description: When true, sends the post to the TikTok Creator Inbox as a draft instead of publishing immediately.
2009
+ description: |
2010
+ When true, sends the post to the TikTok Creator Inbox as a draft instead of publishing
2011
+ immediately. The creator receives an inbox notification to complete posting via TikTok's
2012
+ editing flow. Maps to TikTok API `post_mode: "MEDIA_UPLOAD"` (photos) or the dedicated
2013
+ inbox endpoint (videos). When false or omitted, publishes directly via `post_mode: "DIRECT_POST"`.
2014
+ Note: `publish_type` is not a supported field. Use this field instead.
1993
2015
  privacyLevel:
1994
2016
  type: string
1995
2017
  description: One of the values returned by the TikTok creator info API for the account
@@ -2186,7 +2208,9 @@ components:
2186
2208
  type: object
2187
2209
  properties:
2188
2210
  _id: { type: string }
2189
- platform: { type: string }
2211
+ platform:
2212
+ type: string
2213
+ enum: [tiktok, instagram, facebook, youtube, linkedin, twitter, threads, pinterest, reddit, bluesky, googlebusiness, telegram, snapchat, whatsapp, linkedinads, metaads, pinterestads, tiktokads, xads, googleads]
2190
2214
  profileId:
2191
2215
  oneOf:
2192
2216
  - type: string
@@ -2204,11 +2228,29 @@ components:
2204
2228
  type: string
2205
2229
  format: date-time
2206
2230
  description: Last time follower count was updated (only included if user has analytics add-on)
2231
+ parentAccountId:
2232
+ type: string
2233
+ nullable: true
2234
+ description: |
2235
+ Reference to the parent posting SocialAccount. Set for ads accounts that share
2236
+ or derive from a posting account's OAuth token. null for standalone ads (Google Ads)
2237
+ and all posting accounts.
2238
+ enabled:
2239
+ type: boolean
2240
+ description: |
2241
+ Whether the user explicitly activated this account. false means the account was
2242
+ created as a side effect (e.g., posting account auto-created when user connected
2243
+ ads first). Posting UI and scheduler ignore accounts with enabled: false.
2207
2244
  adsStatus:
2208
2245
  type: string
2209
2246
  enum: [connected, not_connected, not_available]
2247
+ deprecated: true
2210
2248
  description: |
2211
- Ads connection status for this account.
2249
+ **Deprecated.** With the new ads account model, ads accounts are separate SocialAccount
2250
+ documents. Check for accounts with ads platform values (metaads, linkedinads, pinterestads,
2251
+ tiktokads, xads, googleads) instead.
2252
+
2253
+ Legacy behavior:
2212
2254
  - `connected`: Ads are ready to use (same-token platforms like Meta/LinkedIn, or separate ads token is present).
2213
2255
  - `not_connected`: Platform supports ads but requires a separate ads OAuth. Use `GET /v1/connect/{platform}/ads` to connect.
2214
2256
  - `not_available`: Platform does not support ads (e.g., YouTube, Reddit, Bluesky).
@@ -3325,6 +3367,8 @@ paths:
3325
3367
  Returns analytics for posts. With postId, returns a single post. Without it, returns a paginated list with overview stats.
3326
3368
  Accepts both Zernio Post IDs and External Post IDs (auto-resolved). fromDate defaults to 90 days ago if omitted, max range 366 days.
3327
3369
  Single post lookups may return 202 (sync pending) or 424 (all platforms failed). For follower stats, use /v1/accounts/follower-stats.
3370
+
3371
+ **LinkedIn personal accounts:** Analytics are only available for posts published through Zernio. LinkedIn's API only returns metrics for posts authored by the authenticated user. Organization/company page analytics work for all posts.
3328
3372
  parameters:
3329
3373
  - name: postId
3330
3374
  in: query
@@ -5394,7 +5438,12 @@ paths:
5394
5438
  - "Don't miss our essential guide!"
5395
5439
  - "Our most popular guide, updated!"
5396
5440
  tiktokPhotoCarousel:
5397
- summary: TikTok photo carousel with draft mode
5441
+ summary: TikTok photo carousel (Creator Inbox draft)
5442
+ description: |
5443
+ Sends photos to TikTok Creator Inbox as a draft. The creator receives an inbox
5444
+ notification and completes the post via TikTok's editing flow. Uses draft: true
5445
+ which maps to TikTok API post_mode MEDIA_UPLOAD. Note: publish_type is not a
5446
+ supported field; use draft instead.
5398
5447
  value:
5399
5448
  content: "Check out these photos!"
5400
5449
  mediaItems:
@@ -5409,6 +5458,30 @@ paths:
5409
5458
  draft: true
5410
5459
  privacyLevel: "PUBLIC_TO_EVERYONE"
5411
5460
  allowComment: true
5461
+ photoCoverIndex: 0
5462
+ autoAddMusic: false
5463
+ contentPreviewConfirmed: true
5464
+ expressConsentGiven: true
5465
+ tiktokPhotoDirect:
5466
+ summary: TikTok photo carousel (direct publish)
5467
+ description: |
5468
+ Publishes photos directly to TikTok. With draft omitted or false, the post is
5469
+ published immediately via TikTok API post_mode DIRECT_POST.
5470
+ value:
5471
+ content: "Check out these photos!"
5472
+ mediaItems:
5473
+ - type: image
5474
+ url: "https://example.com/photo1.jpg"
5475
+ - type: image
5476
+ url: "https://example.com/photo2.jpg"
5477
+ platforms:
5478
+ - platform: tiktok
5479
+ accountId: "64e1f0a9e2b5af0012ab34cd"
5480
+ tiktokSettings:
5481
+ privacyLevel: "PUBLIC_TO_EVERYONE"
5482
+ allowComment: true
5483
+ photoCoverIndex: 0
5484
+ autoAddMusic: false
5412
5485
  contentPreviewConfirmed: true
5413
5486
  expressConsentGiven: true
5414
5487
  tiktokVideo:
@@ -5429,6 +5502,25 @@ paths:
5429
5502
  commercialContentType: "none"
5430
5503
  contentPreviewConfirmed: true
5431
5504
  expressConsentGiven: true
5505
+ tiktokVideoDraft:
5506
+ summary: TikTok video post (Creator Inbox draft)
5507
+ description: |
5508
+ Sends a video to TikTok Creator Inbox as a draft. Video drafts use a dedicated
5509
+ TikTok endpoint (/v2/post/publish/inbox/video/init/) that only accepts source_info,
5510
+ so post_info fields (privacyLevel, allowComment, etc.) are set by the creator
5511
+ during TikTok's editing flow.
5512
+ value:
5513
+ content: "New video draft!"
5514
+ mediaItems:
5515
+ - type: video
5516
+ url: "https://example.com/video.mp4"
5517
+ platforms:
5518
+ - platform: tiktok
5519
+ accountId: "64e1f0a9e2b5af0012ab34cd"
5520
+ tiktokSettings:
5521
+ draft: true
5522
+ contentPreviewConfirmed: true
5523
+ expressConsentGiven: true
5432
5524
  multiPlatform:
5433
5525
  summary: Multi-platform post (Twitter + LinkedIn)
5434
5526
  value:
@@ -6636,32 +6728,27 @@ paths:
6636
6728
  operationId: disconnectAds
6637
6729
  tags: [Accounts]
6638
6730
  summary: Disconnect ads from an account
6731
+ deprecated: true
6639
6732
  description: |
6640
- Disconnects ads from a social account without removing the posting connection.
6733
+ **Deprecated.** Ads accounts are now standalone SocialAccount documents. Use `DELETE /v1/accounts/{accountId}` instead, passing the ads account's own ID.
6641
6734
 
6642
- **Same-token platforms** (metaads, linkedinads, pinterestads): Sets an `adsOptOut` flag. The posting account and OAuth token are preserved. Reconnecting ads clears the flag.
6643
-
6644
- **Separate-token platforms** (tiktokads, xads): Clears the ads-specific metadata (marketing API tokens). The posting account stays intact.
6645
-
6646
- **Standalone platforms** (googleads): Do not use this endpoint. Use `DELETE /v1/accounts/{accountId}` instead, since Google Ads accounts are standalone.
6735
+ This endpoint is kept for backward compatibility. It soft-deletes the ads SocialAccount identified by `accountId` (which must be an ads account, not a posting account). The parent posting account is left untouched.
6647
6736
  parameters:
6648
6737
  - name: accountId
6649
6738
  in: path
6650
6739
  required: true
6651
6740
  schema: { type: string }
6652
- description: The SocialAccount ID (parent posting account for same-token/separate-token platforms)
6741
+ description: The ads SocialAccount ID to disconnect
6653
6742
  requestBody:
6654
- required: true
6655
6743
  content:
6656
6744
  application/json:
6657
6745
  schema:
6658
6746
  type: object
6659
- required: [adsPlatform]
6660
6747
  properties:
6661
6748
  adsPlatform:
6662
6749
  type: string
6663
6750
  enum: [metaads, linkedinads, pinterestads, tiktokads, xads]
6664
- description: The ads platform to disconnect
6751
+ description: The ads platform (optional, used for logging only)
6665
6752
  example:
6666
6753
  adsPlatform: "tiktokads"
6667
6754
  security:
@@ -7249,15 +7336,15 @@ paths:
7249
7336
  tags: [Connect]
7250
7337
  summary: Connect ads for a platform
7251
7338
  description: |
7252
- Unified ads connection endpoint. Handles all platforms through a single route:
7339
+ Unified ads connection endpoint. Creates a dedicated ads SocialAccount for the specified platform.
7253
7340
 
7254
- **Same-token platforms** (facebook, instagram, linkedin, pinterest): If a posting account already exists, returns `alreadyConnected: true` immediately (no extra OAuth needed). If not, starts the normal OAuth flow, and the resulting account supports both posting and ads.
7341
+ **Same-token platforms** (facebook, instagram, linkedin, pinterest): Creates an ads SocialAccount (`metaads`, `linkedinads`, `pinterestads`) with a copied OAuth token from the parent posting account. If the ads account already exists, returns `alreadyConnected: true`. No extra OAuth needed.
7255
7342
 
7256
- **Separate-token platforms** (tiktok, twitter): Requires an existing posting account (`accountId` param). If ads are already connected, returns `alreadyConnected: true`. Otherwise, starts the platform-specific marketing API OAuth flow.
7343
+ **Separate-token platforms** (tiktok, twitter): Starts the platform-specific marketing API OAuth flow and creates an ads SocialAccount (`tiktokads`, `xads`) with its own token. Requires an existing posting account (`accountId` param). If the ads account already exists, returns `alreadyConnected: true`.
7257
7344
 
7258
- **Ads-only platforms** (googleads): If a Google Ads account exists, returns `alreadyConnected: true`. Otherwise, starts the Google Ads OAuth flow.
7345
+ **Standalone platforms** (googleads): Starts the Google Ads OAuth flow and creates a standalone ads SocialAccount (`googleads`) with no parent. If the account already exists, returns `alreadyConnected: true`.
7259
7346
 
7260
- Use the `adsStatus` field from `GET /v1/accounts` to check which accounts need ads connection.
7347
+ Ads accounts appear as regular SocialAccount documents with ads platform values (e.g., `metaads`, `tiktokads`) in `GET /v1/accounts`.
7261
7348
  parameters:
7262
7349
  - name: platform
7263
7350
  in: path
@@ -7274,7 +7361,7 @@ paths:
7274
7361
  - name: accountId
7275
7362
  in: query
7276
7363
  schema: { type: string }
7277
- description: Existing SocialAccount ID. Required for separate-token platforms (tiktok, twitter). Ignored for same-token and ads-only platforms.
7364
+ description: Existing SocialAccount ID. Required for separate-token platforms (tiktok, twitter). Ignored for same-token and standalone platforms.
7278
7365
  - name: redirect_url
7279
7366
  in: query
7280
7367
  schema: { type: string, format: uri }
@@ -9809,7 +9896,7 @@ paths:
9809
9896
  operationId: getLinkedInAggregateAnalytics
9810
9897
  tags: [Analytics]
9811
9898
  summary: Get LinkedIn aggregate stats
9812
- description: Returns aggregate analytics across all posts for a LinkedIn personal account. Org accounts should use /v1/analytics instead. Requires r_member_postAnalytics scope.
9899
+ description: Returns aggregate analytics across all posts for a LinkedIn personal account. Only includes posts published through Zernio (LinkedIn API limitation). Org accounts should use /v1/analytics instead. Requires r_member_postAnalytics scope.
9813
9900
  parameters:
9814
9901
  - name: accountId
9815
9902
  in: path
@@ -46,10 +46,10 @@ describe 'AccountsApi' do
46
46
 
47
47
  # unit tests for disconnect_ads
48
48
  # Disconnect ads from an account
49
- # Disconnects ads from a social account without removing the posting connection. **Same-token platforms** (metaads, linkedinads, pinterestads): Sets an `adsOptOut` flag. The posting account and OAuth token are preserved. Reconnecting ads clears the flag. **Separate-token platforms** (tiktokads, xads): Clears the ads-specific metadata (marketing API tokens). The posting account stays intact. **Standalone platforms** (googleads): Do not use this endpoint. Use `DELETE /v1/accounts/{accountId}` instead, since Google Ads accounts are standalone.
50
- # @param account_id The SocialAccount ID (parent posting account for same-token/separate-token platforms)
51
- # @param disconnect_ads_request
49
+ # **Deprecated.** Ads accounts are now standalone SocialAccount documents. Use `DELETE /v1/accounts/{accountId}` instead, passing the ads account's own ID. This endpoint is kept for backward compatibility. It soft-deletes the ads SocialAccount identified by `accountId` (which must be an ads account, not a posting account). The parent posting account is left untouched.
50
+ # @param account_id The ads SocialAccount ID to disconnect
52
51
  # @param [Hash] opts the optional parameters
52
+ # @option opts [DisconnectAdsRequest] :disconnect_ads_request
53
53
  # @return [DeleteAccountGroup200Response]
54
54
  describe 'disconnect_ads test' do
55
55
  it 'should work' do
@@ -34,7 +34,7 @@ describe 'AnalyticsApi' do
34
34
 
35
35
  # unit tests for get_analytics
36
36
  # Get post analytics
37
- # Returns analytics for posts. With postId, returns a single post. Without it, returns a paginated list with overview stats. Accepts both Zernio Post IDs and External Post IDs (auto-resolved). fromDate defaults to 90 days ago if omitted, max range 366 days. Single post lookups may return 202 (sync pending) or 424 (all platforms failed). For follower stats, use /v1/accounts/follower-stats.
37
+ # Returns analytics for posts. With postId, returns a single post. Without it, returns a paginated list with overview stats. Accepts both Zernio Post IDs and External Post IDs (auto-resolved). fromDate defaults to 90 days ago if omitted, max range 366 days. Single post lookups may return 202 (sync pending) or 424 (all platforms failed). For follower stats, use /v1/accounts/follower-stats. **LinkedIn personal accounts:** Analytics are only available for posts published through Zernio. LinkedIn's API only returns metrics for posts authored by the authenticated user. Organization/company page analytics work for all posts.
38
38
  # @param [Hash] opts the optional parameters
39
39
  # @option opts [String] :post_id Returns analytics for a single post. Accepts both Zernio Post IDs and External Post IDs. Zernio IDs are auto-resolved to External Post analytics.
40
40
  # @option opts [String] :platform Filter by platform (default \"all\")
@@ -178,7 +178,7 @@ describe 'AnalyticsApi' do
178
178
 
179
179
  # unit tests for get_linked_in_aggregate_analytics
180
180
  # Get LinkedIn aggregate stats
181
- # Returns aggregate analytics across all posts for a LinkedIn personal account. Org accounts should use /v1/analytics instead. Requires r_member_postAnalytics scope.
181
+ # Returns aggregate analytics across all posts for a LinkedIn personal account. Only includes posts published through Zernio (LinkedIn API limitation). Org accounts should use /v1/analytics instead. Requires r_member_postAnalytics scope.
182
182
  # @param account_id The ID of the LinkedIn personal account
183
183
  # @param [Hash] opts the optional parameters
184
184
  # @option opts [String] :aggregation TOTAL (default, lifetime totals) or DAILY (time series). MEMBERS_REACHED not available with DAILY.
@@ -46,11 +46,11 @@ describe 'ConnectApi' do
46
46
 
47
47
  # unit tests for connect_ads
48
48
  # Connect ads for a platform
49
- # Unified ads connection endpoint. Handles all platforms through a single route: **Same-token platforms** (facebook, instagram, linkedin, pinterest): If a posting account already exists, returns `alreadyConnected: true` immediately (no extra OAuth needed). If not, starts the normal OAuth flow, and the resulting account supports both posting and ads. **Separate-token platforms** (tiktok, twitter): Requires an existing posting account (`accountId` param). If ads are already connected, returns `alreadyConnected: true`. Otherwise, starts the platform-specific marketing API OAuth flow. **Ads-only platforms** (googleads): If a Google Ads account exists, returns `alreadyConnected: true`. Otherwise, starts the Google Ads OAuth flow. Use the `adsStatus` field from `GET /v1/accounts` to check which accounts need ads connection.
49
+ # Unified ads connection endpoint. Creates a dedicated ads SocialAccount for the specified platform. **Same-token platforms** (facebook, instagram, linkedin, pinterest): Creates an ads SocialAccount (`metaads`, `linkedinads`, `pinterestads`) with a copied OAuth token from the parent posting account. If the ads account already exists, returns `alreadyConnected: true`. No extra OAuth needed. **Separate-token platforms** (tiktok, twitter): Starts the platform-specific marketing API OAuth flow and creates an ads SocialAccount (`tiktokads`, `xads`) with its own token. Requires an existing posting account (`accountId` param). If the ads account already exists, returns `alreadyConnected: true`. **Standalone platforms** (googleads): Starts the Google Ads OAuth flow and creates a standalone ads SocialAccount (`googleads`) with no parent. If the account already exists, returns `alreadyConnected: true`. Ads accounts appear as regular SocialAccount documents with ads platform values (e.g., `metaads`, `tiktokads`) in `GET /v1/accounts`.
50
50
  # @param platform Platform to connect ads for. Only platforms with ads support are accepted.
51
51
  # @param profile_id Your Zernio profile ID
52
52
  # @param [Hash] opts the optional parameters
53
- # @option opts [String] :account_id Existing SocialAccount ID. Required for separate-token platforms (tiktok, twitter). Ignored for same-token and ads-only platforms.
53
+ # @option opts [String] :account_id Existing SocialAccount ID. Required for separate-token platforms (tiktok, twitter). Ignored for same-token and standalone platforms.
54
54
  # @option opts [String] :redirect_url Custom redirect URL after OAuth completes (same-token platforms only)
55
55
  # @option opts [Boolean] :headless Enable headless mode (same-token platforms only)
56
56
  # @return [ConnectAds200Response]
@@ -36,6 +36,10 @@ describe Late::AccountWithFollowerStats do
36
36
  describe 'test attribute "platform"' do
37
37
  it 'should work' do
38
38
  # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
39
+ # validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["tiktok", "instagram", "facebook", "youtube", "linkedin", "twitter", "threads", "pinterest", "reddit", "bluesky", "googlebusiness", "telegram", "snapchat", "whatsapp", "linkedinads", "metaads", "pinterestads", "tiktokads", "xads", "googleads"])
40
+ # validator.allowable_values.each do |value|
41
+ # expect { instance.platform = value }.not_to raise_error
42
+ # end
39
43
  end
40
44
  end
41
45
 
@@ -81,6 +85,18 @@ describe Late::AccountWithFollowerStats do
81
85
  end
82
86
  end
83
87
 
88
+ describe 'test attribute "parent_account_id"' do
89
+ it 'should work' do
90
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
91
+ end
92
+ end
93
+
94
+ describe 'test attribute "enabled"' do
95
+ it 'should work' do
96
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
97
+ end
98
+ end
99
+
84
100
  describe 'test attribute "ads_status"' do
85
101
  it 'should work' do
86
102
  # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
@@ -36,6 +36,10 @@ describe Late::SocialAccount do
36
36
  describe 'test attribute "platform"' do
37
37
  it 'should work' do
38
38
  # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
39
+ # validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["tiktok", "instagram", "facebook", "youtube", "linkedin", "twitter", "threads", "pinterest", "reddit", "bluesky", "googlebusiness", "telegram", "snapchat", "whatsapp", "linkedinads", "metaads", "pinterestads", "tiktokads", "xads", "googleads"])
40
+ # validator.allowable_values.each do |value|
41
+ # expect { instance.platform = value }.not_to raise_error
42
+ # end
39
43
  end
40
44
  end
41
45
 
@@ -81,6 +85,18 @@ describe Late::SocialAccount do
81
85
  end
82
86
  end
83
87
 
88
+ describe 'test attribute "parent_account_id"' do
89
+ it 'should work' do
90
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
91
+ end
92
+ end
93
+
94
+ describe 'test attribute "enabled"' do
95
+ it 'should work' do
96
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
97
+ end
98
+ end
99
+
84
100
  describe 'test attribute "ads_status"' do
85
101
  it 'should work' do
86
102
  # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
Binary file