# Dubai Property Investment Analyzer — Yield & Deal Score (`malikgen/dubai-property-analyzer`) Actor

Turn Dubai/UAE property listings into investment intelligence: gross rental yield, median price/sqft, per-listing deal score (under/over market), off-plan vs ready premium, and developer benchmarks by area. The analytics layer no raw scraper offers.

- **URL**: https://apify.com/malikgen/dubai-property-analyzer.md
- **Developed by:** [Malikgen](https://apify.com/malikgen) (community)
- **Categories:** Real estate
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $5.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Dubai Property Investment Analyzer — Yield, Price/Sqft & Deal Score

Turn Dubai/UAE property listings into **investment intelligence**. Enter an area (e.g. *Dubai Marina*) and get what raw scrapers don't: **gross rental yield**, **median price/sqft** (with percentiles), a per-listing **Deal Score** (under/over market), **off-plan vs ready premium**, and **developer/tower benchmarks** — plus every analyzed listing with its score. Clean JSON for spreadsheets, dashboards, or AI pipelines.

> Built for investors, buyer's agents, and PropTech teams who need market context before committing capital.

---

### Why this is different

Most UAE scrapers dump raw listings. This one **computes the analytics on top**:

| | Raw listing scrapers | **This analyzer** |
|---|:---:|:---:|
| Listings (price, beds, area, agent) | ✅ | ✅ |
| **Gross rental yield** (rent ÷ sale, per bedroom) | ❌ | ✅ |
| **Median price/sqft + p25/p75** | ❌ | ✅ |
| **Per-listing Deal Score** (under/over market) | ❌ | ✅ |
| **Off-plan vs ready premium** | ❌ | ✅ |
| **Developer / tower benchmarks** | ❌ | ✅ |
| Reliable (no browser, pure API) | varies | ✅ |

---

### Quick start

1. Enter an **Area / community** (e.g. `Dubai Marina`, `Business Bay`, `JVC`, `Downtown Dubai`) — or several in **Areas**.
2. Pick **Property type** (apartments / villas / townhouses / penthouses) and **Max listings per area** (default 200).
3. Click **Start**. You get one **area_insights** rollup per area + every analyzed sale listing (with its deal score).

If an area name doesn't resolve, pass the exact **locationSlug** (e.g. `/dubai/dubai-marina`).

---

### Output

Two record types in one dataset (the **All data** view shows everything; use **Listings only** / **Area insights only** for focused tables):

**`area_insights`** (one per area): `medianSalePrice`, `medianPricePerSqft` (+`pricePerSqftP25/P75`), `medianAnnualRent`, **`grossRentalYieldPct`** (+ `yieldBasis`), per-`bedroomBreakdown` (count, median price, price/sqft, gross yield, `sampleReliability`), `offplanPremiumPct` (+`readyCount`/`offplanCount`), `topTowers`, `verifiedListingsPct`, `furnishedRentalsPct`, `saleSampleCoveragePct`/`rentSampleCoveragePct`, `methodology`.

**`listing`** (one per analyzed sale listing): `price`, `areaSqft`, `pricePerSqft`, `bedrooms`, `bathrooms`, `status` (ready/off-plan), **`dealScorePct`** + `dealLabel` + `underpriced`, `tower`, `developer`, `project`, `furnishingStatus`, `isVerified`, `agencyName`, `coordinates`, `url`, `title`. All fields always present (`null` when unavailable).

Sample: [`docs/example-output.json`](docs/example-output.json).

---

### ⚠️ Methodology & honest caveats (read before using the numbers)

These are **estimates from public asking-price listings** for market research — **not financial advice**, and not official transaction data.

- **Asking prices, not actuals.** Both the rent and sale figures are Bayut **asking** prices, not DLD-registered sale prices or RERA-contracted rents (Dubai asking rents often run 5–15% above contracted). `grossRentalYieldPct` is therefore an **asking yield**.
- **Gross, pre-all-costs.** Yield is **pre-vacancy, pre-service-charge, pre-agency-fee, pre-finance, pre-tax** (see `yieldBasis`). Net yields are materially lower.
- **Sample bias.** Metrics use up to `maxListings` listings out of potentially thousands (see `saleSampleCoveragePct`). Bayut's default sort over-represents featured listings, so the "market median" baseline reflects the **sampled set**. Increase `maxListings` for a fuller picture.
- **Thin bedroom buckets.** Per-bedroom yields are omitted (`null`, with a `yieldNote`) when a bucket has fewer than 5 sale or rent listings; each carries a `sampleReliability` (low/medium/high).
- **Off-plan premium is not risk-adjusted.** `offplanPremiumPct` is an asking price/sqft difference; it ignores developer/construction risk. Check `offplanCount`/`readyCount` for sub-sample size.
- **`verifiedListingsPct` = Bayut TruCheck** (agent visited the property) — it is **not** DLD/title verification or a price-accuracy guarantee.
- **Webhook envelope:** payloads are wrapped as `{ source, timestamp, data }` — unwrap `body.data` in n8n/Make.

> **Roadmap:** DLD actual-sold transaction enrichment (Dubai Pulse) to add "asking vs actual" and historical trends.

---

### How it works
Reliable **pure-HTTP** — no browser, no captcha. Pulls listings from Bayut's own search API using browser-grade TLS/headers over an Apify **residential (UAE)** proxy, then computes the analytics in-actor. Leave the default proxy on.

### Run via API
```bash
curl -X POST "https://api.apify.com/v2/acts/malikgen~dubai-property-analyzer/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"location":"Dubai Marina","propertyType":"apartments","maxListings":200}'
````

### Pricing

Pay per result. Headline **≈ $6 / 1,000 results** — the only investment-analytics actor for Dubai (raw listing scrapers are $0.0008–0.003 but compute none of this).

### Changelog

- **0.1** — Initial release. Area → per-listing deal scores + per-area rollup (yield, price/sqft, off-plan premium, developer/tower benchmarks). Pure-HTTP Bayut data source.

***

*Not affiliated with Bayut, Dubai Land Department, or any portal. Produces estimates from publicly available listing data for research. Respect each site's Terms of Service and applicable laws.*

# Actor input Schema

## `location` (type: `string`):

A Dubai/UAE area to analyze, e.g. "Dubai Marina", "Business Bay", "JVC", "Downtown Dubai". (Or use Areas for several.)

## `areas` (type: `array`):

Analyze several areas in one run (each becomes one insights record). Overrides Area.

## `emirate` (type: `string`):

Used to build the location path.

## `propertyType` (type: `string`):

Which property category to analyze.

## `maxListings` (type: `integer`):

How many sale (and rent) listings to sample per area for the analytics. Higher = more accurate, more cost.

## `minPrice` (type: `integer`):

Filter out sale listings below this price.

## `maxPrice` (type: `integer`):

Filter out sale listings above this price.

## `minBeds` (type: `integer`):

Only analyze listings with at least this many bedrooms.

## `includeRentalYield` (type: `boolean`):

Also fetch rentals to compute gross rental yield (median annual rent ÷ median sale price).

## `includeDealScore` (type: `boolean`):

Score each sale listing's price/sqft vs the area median (under/over market).

## `includeListings` (type: `boolean`):

Output every analyzed sale listing (with deal score). Turn off for area-summary records only.

## `locationSlug` (type: `string`):

Override the auto-built path, e.g. "/dubai/dubai-marina". Use if an area name doesn't resolve.

## `webhookUrl` (type: `string`):

POST the full result set here when the run finishes (n8n / Make / Zapier).

## `proxyConfiguration` (type: `object`):

Bayut requires UAE residential proxies. Leave the default.

## Actor input object example

```json
{
  "location": "Dubai Marina",
  "emirate": "dubai",
  "propertyType": "apartments",
  "maxListings": 200,
  "includeRentalYield": true,
  "includeDealScore": true,
  "includeListings": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AE"
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Key identity, price, rating, and location per listing

## `full` (type: `string`):

All fields including amenities, images, host info, and price breakdown

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "location": "Dubai Marina",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "AE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("malikgen/dubai-property-analyzer").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "location": "Dubai Marina",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "AE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("malikgen/dubai-property-analyzer").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "location": "Dubai Marina",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AE"
  }
}' |
apify call malikgen/dubai-property-analyzer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=malikgen/dubai-property-analyzer",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Dubai Property Investment Analyzer — Yield & Deal Score",
        "description": "Turn Dubai/UAE property listings into investment intelligence: gross rental yield, median price/sqft, per-listing deal score (under/over market), off-plan vs ready premium, and developer benchmarks by area. The analytics layer no raw scraper offers.",
        "version": "0.0",
        "x-build-id": "cAoj4St4VKVdY0fb7"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/malikgen~dubai-property-analyzer/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-malikgen-dubai-property-analyzer",
                "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/malikgen~dubai-property-analyzer/runs": {
            "post": {
                "operationId": "runs-sync-malikgen-dubai-property-analyzer",
                "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/malikgen~dubai-property-analyzer/run-sync": {
            "post": {
                "operationId": "run-sync-malikgen-dubai-property-analyzer",
                "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": {
                    "location": {
                        "title": "Area / community",
                        "type": "string",
                        "description": "A Dubai/UAE area to analyze, e.g. \"Dubai Marina\", \"Business Bay\", \"JVC\", \"Downtown Dubai\". (Or use Areas for several.)"
                    },
                    "areas": {
                        "title": "Areas (multiple)",
                        "type": "array",
                        "description": "Analyze several areas in one run (each becomes one insights record). Overrides Area.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "emirate": {
                        "title": "Emirate",
                        "enum": [
                            "dubai",
                            "abu-dhabi",
                            "sharjah",
                            "ajman",
                            "ras-al-khaimah",
                            "fujairah",
                            "umm-al-quwain"
                        ],
                        "type": "string",
                        "description": "Used to build the location path.",
                        "default": "dubai"
                    },
                    "propertyType": {
                        "title": "Property type",
                        "enum": [
                            "apartments",
                            "villas",
                            "townhouses",
                            "penthouses"
                        ],
                        "type": "string",
                        "description": "Which property category to analyze.",
                        "default": "apartments"
                    },
                    "maxListings": {
                        "title": "Max listings per area",
                        "minimum": 50,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "How many sale (and rent) listings to sample per area for the analytics. Higher = more accurate, more cost.",
                        "default": 200
                    },
                    "minPrice": {
                        "title": "Min price (AED)",
                        "type": "integer",
                        "description": "Filter out sale listings below this price."
                    },
                    "maxPrice": {
                        "title": "Max price (AED)",
                        "type": "integer",
                        "description": "Filter out sale listings above this price."
                    },
                    "minBeds": {
                        "title": "Min bedrooms",
                        "type": "integer",
                        "description": "Only analyze listings with at least this many bedrooms."
                    },
                    "includeRentalYield": {
                        "title": "Compute rental yield",
                        "type": "boolean",
                        "description": "Also fetch rentals to compute gross rental yield (median annual rent ÷ median sale price).",
                        "default": true
                    },
                    "includeDealScore": {
                        "title": "Add per-listing deal score",
                        "type": "boolean",
                        "description": "Score each sale listing's price/sqft vs the area median (under/over market).",
                        "default": true
                    },
                    "includeListings": {
                        "title": "Output individual listings",
                        "type": "boolean",
                        "description": "Output every analyzed sale listing (with deal score). Turn off for area-summary records only.",
                        "default": true
                    },
                    "locationSlug": {
                        "title": "Exact location slug (advanced)",
                        "type": "string",
                        "description": "Override the auto-built path, e.g. \"/dubai/dubai-marina\". Use if an area name doesn't resolve."
                    },
                    "webhookUrl": {
                        "title": "Webhook URL (optional)",
                        "type": "string",
                        "description": "POST the full result set here when the run finishes (n8n / Make / Zapier)."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Bayut requires UAE residential proxies. Leave the default.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "AE"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
