{
  "openapi": "3.0.1",
  "info": {
    "title": "X (Twitter) Content Publisher – Post, Reply, Quote & Manage",
    "description": "Publish and manage X (Twitter) content from your own account in bulk. Create posts, replies, and quotes with media, like, retweet, bookmark, follow, update your profile, manage lists, and post to communities. Safe pacing, action limits, and per-action results. Bring your auth token and proxy.",
    "version": "0.0",
    "x-build-id": "xHQJRO39yW3VtZalw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/b2b_leads~X-Content-Publisher/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-b2b_leads-X-Content-Publisher",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/b2b_leads~X-Content-Publisher/runs": {
      "post": {
        "operationId": "runs-sync-b2b_leads-X-Content-Publisher",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/b2b_leads~X-Content-Publisher/run-sync": {
      "post": {
        "operationId": "run-sync-b2b_leads-X-Content-Publisher",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "authToken": {
            "title": "X auth token",
            "type": "string",
            "description": "Your X account login token (the 'auth_token' cookie). Required — the Actor acts on your account. HOW TO GET IT: 1) Log in to x.com in Chrome. 2) Press F12 → open the 'Application' tab → Cookies → https://x.com. 3) Copy the value of the cookie named 'auth_token'. Easier option: install the free 'Cookie-Editor' or 'EditThisCookie' Chrome extension, click it on x.com, and copy the 'auth_token' value. Treated as a secret and never logged."
          },
          "proxyHost": {
            "title": "Proxy host",
            "type": "string",
            "description": "Your proxy server address, e.g. proxy.example.com or 123.45.67.89. From your proxy provider's dashboard."
          },
          "proxyPort": {
            "title": "Proxy port",
            "type": "string",
            "description": "Your proxy port number, e.g. 8080. From your proxy provider's dashboard."
          },
          "proxyUsername": {
            "title": "Proxy username",
            "type": "string",
            "description": "The username/login for your proxy. From your proxy provider's dashboard."
          },
          "proxyPassword": {
            "title": "Proxy password",
            "type": "string",
            "description": "The password for your proxy. From your proxy provider's dashboard. Treated as a secret and never logged."
          },
          "userProxy": {
            "title": "Full proxy string (advanced — optional)",
            "type": "string",
            "description": "Advanced: instead of the four fields above, paste a full proxy string in host:port@user:pass format (e.g. proxy.example.com:8080@myuser:mypass). If set, this overrides the separate fields."
          },
          "maxActions": {
            "title": "Max actions per run",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on how many actions this run will attempt. Extra actions are marked 'skipped'. Set 0 for unlimited (not recommended). Protects against accidental bulk writes.",
            "default": 50
          },
          "delayBetweenActionsMs": {
            "title": "Delay between actions (ms)",
            "minimum": 0,
            "type": "integer",
            "description": "Pause added after each action to space out writes for account safety. 0 disables pacing.",
            "default": 1500
          },
          "stopOnAuthOrProxyError": {
            "title": "Stop on session/proxy error",
            "type": "boolean",
            "description": "If a session (expired token) or proxy error occurs, stop the rest of the run instead of hammering a dead session. Remaining actions are marked 'skipped'.",
            "default": true
          },
          "includeRaw": {
            "title": "Include raw response (debugging)",
            "type": "boolean",
            "description": "Attach the raw response object to each result row. Useful for debugging; increases dataset size.",
            "default": false
          },
          "maxRetries": {
            "title": "Max retries",
            "minimum": 0,
            "type": "integer",
            "description": "Retries for transient failures (rate limits / temporary server errors). Content-creating actions are never retried after dispatch, to avoid duplicate posts.",
            "default": 3
          },
          "retryBaseDelayMs": {
            "title": "Retry base delay (ms)",
            "minimum": 100,
            "type": "integer",
            "description": "Base backoff delay for retries. Grows exponentially and honors any Retry-After hint.",
            "default": 2000
          },
          "retryMaxDelayMs": {
            "title": "Retry max delay (ms)",
            "minimum": 1000,
            "type": "integer",
            "description": "Maximum backoff delay between retries.",
            "default": 30000
          },
          "enablePosts": {
            "title": "Enable Posts",
            "type": "boolean",
            "description": "Master switch for everything in the Posts sections (create, reply, quote, delete). Leave OFF if you don't want to post.",
            "default": false
          },
          "postText": {
            "title": "New post — text",
            "type": "string",
            "description": "Text of a single post to publish. This is the simple way to post — just type here. For posting many at once, use 'Advanced: bulk create posts' below.",
            "default": ""
          },
          "postMediaUrls": {
            "title": "New post — image/video URLs",
            "type": "array",
            "description": "Optional. Public URLs of up to 4 images/videos to attach to the post above.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "postReplyOptionMode": {
            "title": "New post — who can reply",
            "enum": [
              "everyone",
              "accounts_you_follow",
              "accounts_you_follow_and_followed",
              "mentioned_accounts",
              "verified_accounts"
            ],
            "type": "string",
            "description": "Optional. Restrict who can reply to the post above. Leave as default for everyone.",
            "default": "everyone"
          },
          "postDisableLinkPreview": {
            "title": "New post — hide link preview",
            "type": "boolean",
            "description": "Optional. Turn off the large link preview card for the post above.",
            "default": false
          },
          "createPosts": {
            "title": "Advanced: bulk create posts (JSON)",
            "type": "array",
            "description": "Advanced — publish many posts at once. Each item: { \"text\": \"...\", \"mediaUrls\": [\"https://...\"], \"replyOptionMode\": \"everyone\", \"disableLinkPreview\": false }. 'text' is required; up to 4 media items. These are added on top of the single 'New post' above.",
            "default": []
          },
          "replyToTweet": {
            "title": "Reply — to post (ID or URL)",
            "type": "string",
            "description": "The post you want to reply to — paste its ID or full x.com URL. Leave empty if not replying.",
            "default": ""
          },
          "replyText": {
            "title": "Reply — text",
            "type": "string",
            "description": "Text of your reply to the post above.",
            "default": ""
          },
          "replyMediaUrls": {
            "title": "Reply — image/video URLs",
            "type": "array",
            "description": "Optional. Public URLs of up to 4 images/videos to attach to your reply.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "replies": {
            "title": "Advanced: bulk replies (JSON)",
            "type": "array",
            "description": "Advanced — publish many replies at once. Each item: { \"tweetId\": \"...\" (or \"tweetUrl\"), \"text\": \"...\", \"mediaUrls\": [\"https://...\"] }. Added on top of the single 'Reply' above.",
            "default": []
          },
          "quoteTweet": {
            "title": "Quote — post to quote (ID or URL)",
            "type": "string",
            "description": "The post you want to quote — paste its ID or full x.com URL. Leave empty if not quoting.",
            "default": ""
          },
          "quoteUsername": {
            "title": "Quote — author handle (optional)",
            "type": "string",
            "description": "Optional. The @handle of the quoted post's author. Helps build the correct quote link; the leading @ is optional.",
            "default": ""
          },
          "quoteText": {
            "title": "Quote — your text",
            "type": "string",
            "description": "Your comment added on top of the quoted post above.",
            "default": ""
          },
          "quoteMediaUrls": {
            "title": "Quote — image/video URLs",
            "type": "array",
            "description": "Optional. Public URLs of up to 4 images/videos to attach to your quote post.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "quotes": {
            "title": "Advanced: bulk quote posts (JSON)",
            "type": "array",
            "description": "Advanced — publish many quote posts at once. Each item: { \"tweetId\": \"...\" (or \"tweetUrl\"), \"quotedUsername\": \"handle\" (optional), \"text\": \"...\", \"mediaUrls\": [\"https://...\"] }. Added on top of the single 'Quote' above.",
            "default": []
          },
          "deleteTweetIds": {
            "title": "Delete post IDs",
            "type": "array",
            "description": "IDs of your own posts to delete. This is irreversible.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "deleteTweetUrls": {
            "title": "Delete post URLs",
            "type": "array",
            "description": "URLs of your own posts to delete (IDs are extracted automatically). This is irreversible.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "enableEngagement": {
            "title": "Engagement",
            "type": "boolean",
            "description": "Like/unlike, retweet/undo, bookmark/remove, and follow/unfollow. Enable to use the fields below.",
            "default": false
          },
          "likeTweetIds": {
            "title": "Like — post IDs",
            "type": "array",
            "description": "IDs of posts to like.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "likeTweetUrls": {
            "title": "Like — post URLs",
            "type": "array",
            "description": "URLs of posts to like (IDs extracted automatically).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "unlikeTweetIds": {
            "title": "Unlike — post IDs",
            "type": "array",
            "description": "IDs of posts to unlike.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "unlikeTweetUrls": {
            "title": "Unlike — post URLs",
            "type": "array",
            "description": "URLs of posts to unlike (IDs extracted automatically).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "retweetTweetIds": {
            "title": "Retweet — post IDs",
            "type": "array",
            "description": "IDs of posts to retweet.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "retweetTweetUrls": {
            "title": "Retweet — post URLs",
            "type": "array",
            "description": "URLs of posts to retweet (IDs extracted automatically).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "unretweetTweetIds": {
            "title": "Undo retweet — post IDs",
            "type": "array",
            "description": "IDs of posts to un-retweet.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "unretweetTweetUrls": {
            "title": "Undo retweet — post URLs",
            "type": "array",
            "description": "URLs of posts to un-retweet (IDs extracted automatically).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "bookmarkTweetIds": {
            "title": "Bookmark — post IDs",
            "type": "array",
            "description": "IDs of posts to bookmark.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "bookmarkTweetUrls": {
            "title": "Bookmark — post URLs",
            "type": "array",
            "description": "URLs of posts to bookmark (IDs extracted automatically).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "unbookmarkTweetIds": {
            "title": "Remove bookmark — post IDs",
            "type": "array",
            "description": "IDs of posts to remove from bookmarks.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "unbookmarkTweetUrls": {
            "title": "Remove bookmark — post URLs",
            "type": "array",
            "description": "URLs of posts to remove from bookmarks (IDs extracted automatically).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "followUserIds": {
            "title": "Follow — user IDs",
            "type": "array",
            "description": "Numeric user IDs to follow.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "followUsernames": {
            "title": "Follow — usernames",
            "type": "array",
            "description": "@handles to follow (resolved to IDs automatically). The leading @ is optional.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "unfollowUserIds": {
            "title": "Unfollow — user IDs",
            "type": "array",
            "description": "Numeric user IDs to unfollow.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "unfollowUsernames": {
            "title": "Unfollow — usernames",
            "type": "array",
            "description": "@handles to unfollow (resolved to IDs automatically). The leading @ is optional.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "enableProfile": {
            "title": "Profile",
            "type": "boolean",
            "description": "Update your profile fields, avatar, and banner. Enable to use the fields below.",
            "default": false
          },
          "profileName": {
            "title": "Display name",
            "type": "string",
            "description": "New display name. Leave empty to keep the current one.",
            "default": ""
          },
          "profileBio": {
            "title": "Bio",
            "type": "string",
            "description": "New bio/description. Leave empty to keep the current one.",
            "default": ""
          },
          "profileLocation": {
            "title": "Location",
            "type": "string",
            "description": "New location. Leave empty to keep the current one.",
            "default": ""
          },
          "profileWebsite": {
            "title": "Website",
            "type": "string",
            "description": "New website URL. Leave empty to keep the current one.",
            "default": ""
          },
          "avatarUrl": {
            "title": "Avatar image URL",
            "type": "string",
            "description": "Public URL of the new profile picture. Leave empty to keep the current one.",
            "default": ""
          },
          "bannerUrl": {
            "title": "Banner image URL",
            "type": "string",
            "description": "Public URL of the new header/banner image. Leave empty to keep the current one.",
            "default": ""
          },
          "enableLists": {
            "title": "Enable Lists",
            "type": "boolean",
            "description": "Master switch for everything in the Lists sections (create a list, add members, remove members). Leave OFF to skip lists.",
            "default": false
          },
          "newListName": {
            "title": "New list — name",
            "type": "string",
            "description": "Name of a single list to create. Leave empty if not creating a list.",
            "default": ""
          },
          "newListDescription": {
            "title": "New list — description",
            "type": "string",
            "description": "Optional description for the new list above.",
            "default": ""
          },
          "newListPrivate": {
            "title": "New list — private",
            "type": "boolean",
            "description": "If ticked, the new list above is private (only you can see it).",
            "default": true
          },
          "createLists": {
            "title": "Advanced: bulk create lists (JSON)",
            "type": "array",
            "description": "Advanced — create many lists at once. Each item: { \"name\": \"...\", \"description\": \"...\", \"isPrivate\": true }. 'name' is required. Added on top of the single 'New list' above.",
            "default": []
          },
          "addMembersListId": {
            "title": "Add members — list ID",
            "type": "string",
            "description": "The list ID you want to add members to. Leave empty if not adding members.",
            "default": ""
          },
          "addMemberUsernames": {
            "title": "Add members — usernames",
            "type": "array",
            "description": "@handles to add to the list above (the leading @ is optional).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "addListMembers": {
            "title": "Advanced: bulk add list members (JSON)",
            "type": "array",
            "description": "Advanced — add members to any list(s). Each item: { \"listId\": \"...\", \"userId\": \"...\" } or { \"listId\": \"...\", \"username\": \"handle\" }. Added on top of the simple fields above.",
            "default": []
          },
          "removeMembersListId": {
            "title": "Remove members — list ID",
            "type": "string",
            "description": "The list ID you want to remove members from. Leave empty if not removing members.",
            "default": ""
          },
          "removeMemberUsernames": {
            "title": "Remove members — usernames",
            "type": "array",
            "description": "@handles to remove from the list above (the leading @ is optional).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "removeListMembers": {
            "title": "Advanced: bulk remove list members (JSON)",
            "type": "array",
            "description": "Advanced — remove members from any list(s). Each item: { \"listId\": \"...\", \"userId\": \"...\" } or { \"listId\": \"...\", \"username\": \"handle\" }. Added on top of the simple fields above.",
            "default": []
          },
          "enableCommunities": {
            "title": "Enable Communities",
            "type": "boolean",
            "description": "Master switch for everything in the Communities sections (post in a community, join, leave). Leave OFF to skip communities.",
            "default": false
          },
          "communityId": {
            "title": "Community post — community ID",
            "type": "string",
            "description": "The community ID you want to post in. Leave empty if not posting to a community.",
            "default": ""
          },
          "communityPostText": {
            "title": "Community post — text",
            "type": "string",
            "description": "Text of a single post to publish in the community above.",
            "default": ""
          },
          "communityPostMediaUrls": {
            "title": "Community post — image/video URLs",
            "type": "array",
            "description": "Optional. Public URLs of up to 4 images/videos to attach to the community post above.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "communityPosts": {
            "title": "Advanced: bulk community posts (JSON)",
            "type": "array",
            "description": "Advanced — publish many community posts at once. Each item: { \"communityId\": \"...\", \"text\": \"...\", \"mediaUrls\": [\"https://...\"] }. Added on top of the single 'Community post' above.",
            "default": []
          },
          "communityReplies": {
            "title": "Advanced: community replies (JSON)",
            "type": "array",
            "description": "Advanced — community replies. Each item: { \"communityId\": \"...\", \"tweetId\": \"...\" (or \"tweetUrl\"), \"text\": \"...\", \"mediaUrls\": [\"https://...\"] }.",
            "default": []
          },
          "communityQuotes": {
            "title": "Advanced: community quotes (JSON)",
            "type": "array",
            "description": "Advanced — community quote posts. Each item: { \"communityId\": \"...\", \"tweetId\": \"...\" (or \"tweetUrl\"), \"quotedUsername\": \"handle\" (optional), \"text\": \"...\" }.",
            "default": []
          },
          "joinCommunityIds": {
            "title": "Join community IDs",
            "type": "array",
            "description": "IDs of communities to join.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "leaveCommunityIds": {
            "title": "Leave community IDs",
            "type": "array",
            "description": "IDs of communities to leave.",
            "default": [],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}