# BLACK MONEY — راهنمای نقطه‌به‌نقطه استقرار روی cPanel

> **دامنه اصلی این نصب:** `https://hasandamane.s12.telviprobot.top`
> Backend و Frontend در یک پروسه Node.js (Next.js 16 App Router) اجرا می‌شوند؛ APIها زیر مسیر `/api` هستند.
> پنل مدیریت: `https://hasandamane.s12.telviprobot.top/admin` (صفحه ورود: `/admin/login`)

## 🔐 مسیر ورود به پنل مدیریت (خلاصه)

| راه | آدرس / مسیر |
|---|---|
| مستقیم در مرورگر | `https://hasandamane.s12.telviprobot.top/admin` → اگر نشست نداشتی به `/admin/login` می‌رود |
| از داخل مینی‌اپ | تب **پروفایل** → دکمه **«ورود مدیران»** |
| از داخل مینی‌اپ | منوی سه‌نقطه کارت پروفایل (صفحه خانه) → **«ورود مدیران»** |
| از داخل مینی‌اپ | پایین صفحه خانه → لینک **«ورود به پنل مدیریت»** |
| از ربات تلگرام | `/start` → دکمه شیشه‌ای؛ فقط برای نقش‌های `ADMIN_TELEGRAM_ID` / Admin / Super Admin دکمه «ورود به پنل مدیریت» می‌آید |

**روش‌های احراز هویت پنل:** ۱) رمز عبور `ADMIN_PASSWORD` ۲) احراز هویت تلگرام (نقش admin/superadmin).
اگر هر دو روش رد شد، ورود مدیر بسته است و باید متغیر محیطی را تنظیم و اپ را Restart کنی.

> این سند بر اساس پروژه‌ی موجود در همین مخزن نوشته شده است. پروژه یک اپلیکیشن **Next.js 16 (App Router)** است:
> رابط کاربری Mini App و پنل مدیریت از صفحات Next.js و **Backend از Route Handlers داخل `src/app/api`** تشکیل شده است.
> بنابراین Frontend و Backend در یک پروسه Node.js اجرا می‌شوند و نیازی به دو Application جدا در cPanel نیست.
> اگر می‌خواهید نام پوشه را `backend` بگذارید، فقط **Application Root** را روی همان پوشه‌ای که `package.json` قرار دارد تنظیم کنید
> (نام پوشه در اجرا اهمیتی ندارد).

---

## ۰) پیش‌نیازهای واقعی هاست (بدون آن‌ها اجرا ممکن نیست)

| مورد | وضعیت لازم |
|---|---|
| Node.js | نسخه **22.x** از بخش `Setup Node.js App` در cPanel (شما 22.33.4 دارید ✅) |
| PostgreSQL | فعال و قابل ساخت دیتابیس/کاربر (بخش `PostgreSQL Databases`) |
| SSL | فعال برای دامنه (Let's Encrypt در cPanel) — تلگرام فقط HTTPS را برای Mini App می‌پذیرد |
| حافظه | حداقل ~700MB برای Build و ~250MB برای اجرا (Next.js نیاز به حافظه بیشتری از PHP دارد) |
| ترمینال/SSH | برای اجرای `drizzle-kit push` لازم است (یا از «Run JS script» در Node.js App استفاده کنید) |
| اجرای دائمی پروسه | cPanel از Passenger استفاده می‌کند؛ پروسه Node باید همیشه بالا بماند. هاست‌هایی که فقط «Static/HTML» هستند مناسب نیستند. |

> **محدودیت مهم:** اگر هاست اشتراکی شما در cPanel گزینه `Setup Node.js App` ندارد یا بعد از Build، اپ 503 می‌دهد،
> Next.js روی آن هاست اجرا نمی‌شود (این محدودیت هاست است نه کد). راه‌حل: فعال‌سازی Node.js App از پشتیبانی هاست،
> یا استفاده از زیردامنه با Node runtime، یا انتقال Backend به VPS/سرویس مدیریت‌شده. این پروژه Docker/VPS اجباری ندارد.

---

## ۱) چه فایل‌هایی باید آپلود شود؟

در File Manager، داخل شاخه‌ای که به عنوان Application Root انتخاب می‌کنید (مثلاً `blackmoney` در `home/USERNAME/`)، این موارد را آپلود کنید:

```
package.json
package-lock.json
next.config.ts
postcss.config.mjs
tsconfig.json
eslint.config.mjs
drizzle.config.json
server.mjs                ← Startup File
scripts/seed.mjs
src/                      ← کل کد Frontend + API
DEPLOY-CPANEL.md
```

**آپلود نکنید:** `node_modules/`، `.next/`، `.git/`، فایل `.env` محلی، `.env.local`، `npm-debug.log`.
(روی سرور یک `.env` جداگانه با مقادیر واقعی می‌سازید.)

روش پیشنهادی: فایل ZIP بدون `node_modules` و `.next` بسازید، در File Manager آپلود و Extract کنید.

---

## ۲) ساخت پایگاه داده PostgreSQL

1. cPanel → **PostgreSQL Databases**
2. `Create New Database` → مثلاً `blackmoney` (cPanel پیشوند کاربر را اضافه می‌کند: `cpuser_blackmoney`)
3. `Add New User` → نام کاربری و رمز قوی (مثلاً `cpuser_bmuser`)
4. `Add User To Database` → کاربر را به دیتابیس وصل کنید و **ALL PRIVILEGES** بدهید.

رشته اتصال (برای `DATABASE_URL`):

```
postgresql://cpuser_bmuser:YOUR_DB_PASSWORD@localhost:5432/cpuser_blackmoney
```

> اگر رمز شامل کاراکترهای `@ : / # ?` است، آن‌ها را URL-encode کنید (`@` → `%40`).
> این مقدار فقط در `.env` سرور قرار می‌گیرد و در کد/Frontend نوشته نمی‌شود.

---

## ۳) ایجاد Node.js Application در cPanel (برای دامنه شما)

ابتدا در cPanel → **Domains / Subdomains** مطمئن شو زیردامنه `hasandamane.s12.telviprobot.top` ساخته شده و **Document Root** آن را یادداشت کن (مثلاً `/home/USERNAME/hasandamane.s12.telviprobot.top`).

سپس cPanel → **Setup Node.js App** → `Create Application`:

| فیلد | مقدار دقیق برای شما |
|---|---|
| Node.js version | **22.x** |
| Application mode | **Production** |
| Application root | پوشه‌ای که `package.json` در آن است؛ مثلاً `blackmoney` یا `hasandamane.s12.telviprobot.top` |
| Application URL | **`hasandamane.s12.telviprobot.top`** |
| Application startup file | **`server.mjs`** |
| Passenger log file | پیش‌فرض |

> اگر می‌خواهی پروژه داخل Document Root همان زیردامنه باشد، `Application root` را همان مسیر (`hasandamane.s12.telviprobot.top`) بگذار و فایل‌ها را داخل همان پوشه آپلود کن.
> اگر پوشه جدا (`blackmoney`) انتخاب کردی، مهم نیست؛ cPanel از طریق Application URL همان دامنه را به این پروسه وصل می‌کند — فقط نباید در Document Root آن زیردامنه یک `index.html` یا `.htaccess` مزاحم باشد.

بعد از ساخت، در همان صفحه `Add Variable` و متغیرهای بخش ۵ را وارد کن، سپس **Restart**.

### SSL (الزامی برای تلگرام)

cPanel → **SSL/TLS Status** → روی `hasandamane.s12.telviprobot.top` → **Run AutoSSL**.
تا وقتی `https://hasandamane.s12.telviprobot.top` بدون هشدار گواهی باز نشود، دکمه شیشه‌ای مینی‌اپ در تلگرام کار نمی‌کند.

## ۴) نصب پکیج‌ها، Build و اسکیمای دیتابیس

در همان صفحه Node.js App → دکمه **Enter to the virtual environment** (یا Terminal cPanel) و دستورات زیر را **به ترتیب** اجرا کنید:

```bash
cd ~/blackmoney

# ۱) نصب دقیق وابستگی‌ها بر اساس package-lock
npm ci

# ۲) بررسی متغیرهای محیطی (DATABASE_URL باید مقدار داشته باشد)
node -e "console.log(process.env.DATABASE_URL ? 'DB URL OK' : 'DB URL MISSING')"

# ۳) اعمال اسکیمای Drizzle روی PostgreSQL (بدون فایل migration)
npx drizzle-kit push

# ۴) Build تولیدی Next.js
npm run build

# ۵) مقدارهای اولیه فروشگاه (فقط تعرفه‌های پیش‌فرض؛ بدون داده ساختگی)
node scripts/seed.mjs
```

بعد از پایان، در cPanel روی **Restart** اپ بزنید.

بررسی اجرا:

```bash
curl -s https://hasandamane.s12.telviprobot.top/api/health
```

پاسخ سالم:

```json
{"ok":true,"app":"BLACK MONEY","database":true,"env":{...},"runtime":{"node":"v22.x.x"}}
```

اگر `ok:false` یا `database:false` بود، `DATABASE_URL` و دسترسی کاربر دیتابیس را بررسی کنید. لاگ خطا در
`~/logs/` یا بخش `stderr.log` اپ در cPanel موجود است.

### اعمال تغییرات بعدی روی کد

```bash
cd ~/blackmoney
npm ci            # فقط اگر وابستگی‌ها تغییر کرده
npx drizzle-kit push
npm run build
# سپس Restart از cPanel
```

---

## ۵) متغیرهای محیطی (Environment Variables)

فایل `.env.example` در ریشه پروژه موجود است. حداقل مقادیر الزامی:

| متغیر | الزامی | توضیح |
|---|---|---|
| `DATABASE_URL` | ✅ | رشته اتصال PostgreSQL (بخش ۲) |
| `AUTH_SECRET` | ✅ | کلید امضای کوکی نشست — `openssl rand -hex 32` |
| `ADMIN_PASSWORD` | ✅ | رمز ورود `/admin/login` (در دیتابیس ذخیره نمی‌شود) |
| `ADMIN_TELEGRAM_ID` | توصیه‌شده | آیدی عددی تلگرام مدیر ارشد؛ هنگام ورود با رمز، کاربر superadmin ساخته می‌شود |
| `NEXT_PUBLIC_APP_URL` | ✅ | `https://hasandamane.s12.telviprobot.top` (بدون `/` انتهایی) |
| `NEXT_PUBLIC_API_URL` | خالی | API همان دامنه است؛ خالی بگذارید |
| `TELEGRAM_BOT_TOKEN` | برای ربات | توکن BotFather — فقط روی سرور |
| `TELEGRAM_BOT_USERNAME` | برای ربات | یوزرنیم ربات بدون `@` |
| `TELEGRAM_WEBHOOK_SECRET` | توصیه‌شده | مقدار تصادفی؛ هدر `X-Telegram-Bot-Api-Secret-Token` را اعتبارسنجی می‌کند |
| `TELEGRAM_AUTH_REQUIRED` | ✅ | در تولید `true` |
| `ALLOW_DEMO_AUTH` | ✅ | در تولید حتماً `false` (درب پشتی آزمایشی) |
| `CRON_SECRET` | برای صف پیام | محافظت از `/api/cron/broadcast` |
| `PASARGUARD_MODE` | اختیاری | `off` یا `marzban-compatible` |
| `DATABASE_POOL_MAX` | اختیاری | پیش‌فرض ۵ (مناسب هاست اشتراکی) |
| `DATABASE_SSL` | اختیاری | برای PostgreSQL محلی cPanel معمولاً `false` |
| `NODE_ENV` | ✅ | `production` |

ساخت مقادیر تصادفی:

```bash
openssl rand -hex 32   # AUTH_SECRET
openssl rand -hex 24   # CRON_SECRET
openssl rand -hex 20   # TELEGRAM_WEBHOOK_SECRET
```

---

## ۶) اتصال ربات تلگرام به Mini App

### ۶-۱) ساخت ربات
1. در تلگرام به `@BotFather` پیام دهید → `/newbot` → نام و یوزرنیم → **توکن** را کپی کنید.
2. `TELEGRAM_BOT_TOKEN` و `TELEGRAM_BOT_USERNAME` را در محیط cPanel ست و اپ را Restart کنید.
3. `/setmenubutton` یا `/newapp` در BotFather: آدرس `https://hasandamane.s12.telviprobot.top` را به عنوان Web App معرفی کنید.

### ۶-۲) ثبت Webhook
از پنل مدیریت: `/admin` → **ربات تلگرام** → دکمه «ثبت / بروزرسانی وب‌هوک».
یا با ترمینال:

```bash
curl -s "https://api.telegram.org/bot<TELEGRAM_BOT_TOKEN>/setWebhook" \
  -d "url=https://hasandamane.s12.telviprobot.top/api/telegram/webhook" \
  -d "secret_token=<TELEGRAM_WEBHOOK_SECRET>" \
  -d "allowed_updates=[\"message\",\"callback_query\"]"
```

بررسی:

```bash
curl -s "https://api.telegram.org/bot<TELEGRAM_BOT_TOKEN>/getWebhookInfo"
```

### ۶-۳) تست دستورات
در ربات `/start` بزنید: پیام خوشامدگویی فارسی + دکمه شیشه‌ای «ورود به BLACK MONEY» باید ارسال شود.
`/id` شناسه تلگرام را نشان می‌دهد. احراز هویت Mini App با اعتبارسنجی HMAC واقعی `initData` انجام می‌شود
(امضا با `TELEGRAM_BOT_TOKEN`، بررسی `auth_date`) و Cookie نشست فقط `HttpOnly` است.

> اگر توکن ندارید، بخش ورود Mini App کار نمی‌کند؛ اما `/admin` با `ADMIN_PASSWORD` قابل استفاده است و
> پیام‌های تلگرام با خطای صریح «TELEGRAM_BOT_TOKEN تنظیم نشده» گزارش می‌شوند (هیچ ارسال ساختگی انجام نمی‌شود).

---

## ۷) Cron Job ها (اختیاری اما توصیه‌شده)

cPanel → **Cron Jobs** → هر دقیقه:

```bash
curl -s "https://hasandamane.s12.telviprobot.top/api/cron/broadcast?secret=CRON_SECRET&limit=15" >/dev/null
```

هر ۵ دقیقه (مانیتورینگ واقعی سرورها):

```bash
curl -s "https://hasandamane.s12.telviprobot.top/api/cron/broadcast?secret=CRON_SECRET&monitor=1&limit=1" >/dev/null
```

بدون این Cron هم امکان ارسال/ادامه صف و اجرای مانیتور از داخل پنل مدیریت وجود دارد.

---

## ۸) اتصال پنل‌های VPN

`/admin` → **پنل‌های VPN** → «پنل جدید»:

| پنل | فیلدها |
|---|---|
| **Marzban** | `baseUrl` پنل + username/password. در `extra`: `{"proxies":{"vless":{"flow":""}},"inbounds":{"vless":["VLESS TCP REALITY"]}}` |
| **PasarGuard** | مثل Marzban (سازگار)؛ `PASARGUARD_MODE=marzban-compatible` |
| **3x-ui** | `baseUrl` کامل (شامل مسیر پنل) + username/password. در `extra`: `{"inboundId":1,"address":"server-domain","sni":"...","flow":"xtls-rprx-vision"}` |
| **Hiddify** | `baseUrl` + API Key در فیلد رمز (یا `extra.apiKey`) — هدر `Hiddify-API-Key` |
| **تانل مستقیم / Xray / سفارشی** | `extra` را کامل تعریف کنید: `{"createPath":"/api/users","createMethod":"POST","createPayload":{"username":"{{username}}","days":"{{days}}","gb":"{{gb}}"},"responseMap":{"id":"data.id","link":"data.link","subscription":"data.sub"},"getPath":"/api/users/{{username}}","deletePath":"/api/users/{{username}}","usagePath":"/api/users/{{username}}","usageMap":{"used":"data.used","total":"data.total","status":"data.status"}}` |

بعد از ذخیره، دکمه **تست اتصال** وضعیت واقعی API را برمی‌گرداند؛ سپس در بخش **سرورها** سرور بسازید،
هاست/پورت واقعی و پنل را به آن وصل کنید. تا وقتی یک سرور فعال با پنل متصل وجود ندارد، فروشگاه عمداً
خرید را غیرفعال و پیام صریح نشان می‌دهد (هیچ کانفیگ ساختگی تحویل داده نمی‌شود).

فرآیند خرید: کسر اتمیک موجودی با `SELECT ... FOR UPDATE` → ساخت کاربر در پنل → دریافت لینک/اشتراک →
ساخت QR → ثبت سفارش. در صورت خطای پنل، مبلغ در همان تراکنش برگشت داده می‌شود و سفارش `refunded` می‌شود.
کلید idempotency از خرید تکراری جلوگیری می‌کند.

---

## ۹) پنل مدیریت

`https://hasandamane.s12.telviprobot.top/admin`

- ورود با رمز: مقدار `ADMIN_PASSWORD`.
- ورود تلگرامی: اگر `ADMIN_TELEGRAM_ID` برابر آیدی عددی شما باشد و صفحه را از داخل مینی‌اپ باز کنید.
- نقش‌ها: `user | agent | admin | superadmin` (از بخش کاربران/نمایندگان).
- تمام عملیات مدیر در `audit_logs` با IP ثبت می‌شود.

---

## ۱۰) امنیت پیاده‌سازی‌شده

- احراز هویت Telegram WebApp با HMAC-SHA256 و بررسی `auth_date` (بدون اعتماد به داده کلاینت).
- کوکی نشست امضاشده (HttpOnly، SameSite=Lax، Secure در تولید) — بدون ذخیره توکن در `localStorage`.
- `requireUser` / `requireAdmin` سمت سرور روی همه APIهای حساس.
- Rate Limit روی ورود، خرید، شارژ کیف پول و API مدیریت.
- اعتبارسنجی ورودی‌ها با Zod + کوئری‌های پارامتری Drizzle (ضد SQL Injection).
- رمزها/توکن‌ها فقط در `process.env`؛ در پاسخ‌های مدیریتی ماسک می‌شوند.
- Webhook تلگرام با secret token و مقایسه امن.
- عملیات مالی در تراکنش دیتابیس با قفل ردیف و ثبت `balanceAfter`.
- بازگشت خودکار وجه در خطای ساخت کانفیگ + جلوگیری از بازگشت دوباره.

---

## ۱۱) عیب‌یابی

| خطا | علت / راه‌حل |
|---|---|
| `503 Service Unavailable` | Build انجام نشده یا پروسه crash کرده؛ `npm run build` و Restart. لاگ Passenger را ببینید. |
| `EADDRINUSE` | دو اپ روی یک پورت؛ از cPanel یک Application فعال نگه دارید و `server.mjs` را Startup File کنید. |
| `DATABASE_URL is required` | متغیر در Node.js App اضافه نشده؛ بعد از افزودن، Restart کنید. |
| `password authentication failed` | رمز/نام کاربری دیتابیس یا encode کاراکترهای خاص در URL. |
| `relation "users" does not exist` | `npx drizzle-kit push` اجرا نشده است. |
| `نشست تلگرام شناسایی نشد` | Mini App را از داخل تلگرام باز کنید؛ `TELEGRAM_BOT_TOKEN` را ست و Webhook را ثبت کنید. |
| `initData منقضی شده` | ساعت سرور را با NTP همگام کنید. |
| ارسال پیام همگانی انجام نمی‌شود | `TELEGRAM_BOT_TOKEN` ست نیست یا Cron/دکمه «ادامه ارسال» اجرا نشده است. |
| `Forbidden` در تلگرام برای Mini App | دامنه باید HTTPS معتبر باشد و در BotFather ثبت شده باشد. |
| Build با کمبود حافظه متوقف شد | `NODE_OPTIONS=--max-old-space-size=1024 npm run build` یا Build محلی و آپلود `.next`. |

---

## ۱۲) چک‌لیست تست نهایی

| مورد | نحوه تست | نیاز به اطلاعات بیرونی |
|---|---|---|
| اجرای Backend | `curl /api/health` → `ok:true` | — |
| اتصال دیتابیس | همان پاسخ `database:true` | — |
| باز شدن Frontend | `https://hasandamane.s12.telviprobot.top` | — |
| ورود واقعی کاربر | باز کردن Mini App از ربات و `/start` | `TELEGRAM_BOT_TOKEN` |
| اجرای `/start` و پیام فارسی | ارسال `/start` در ربات | توکن ربات |
| دکمه شیشه‌ای Mini App | کلیک روی دکمه در پیام ربات | دامنه HTTPS |
| اتصال پنل VPN | `/admin` → پنل‌ها → تست اتصال | آدرس/رمز پنل واقعی (Marzban/3x-ui/...) |
| ساخت کانفیگ | خرید یک سرویس با موجودی کافی | پنل VPN معتبر + سرور |
| مانیتورینگ واقعی | `/admin` → مانیتورینگ → اجرای بررسی | هاست/پورت واقعی سرور |
| کیف پول و تراکنش | شارژ دستی از پنل + تأیید | اطلاعات کارت (اختیاری) |
| پیام همگانی | `/admin` → پیام همگانی → پیش‌نمایش و ارسال | توکن ربات |

موارد وابسته به توکن/پنل، در این محیط بدون اطلاعات واقعی قابل تست نبودند و به‌صورت صریح «تنظیم نشده»
گزارش می‌دهند؛ هیچ داده‌ی نمایشی یا Ping تصادفی تولید نمی‌شود.


---

## ۱۳) بلوک آماده متغیرهای محیطی (کپی کن در cPanel → Node.js App → Environment Variables)

```env
DATABASE_URL=postgresql://CPUSER_BMUSER:YOUR_DB_PASSWORD@localhost:5432/CPUSER_BLACKMONEY
DATABASE_POOL_MAX=5
DATABASE_SSL=false

AUTH_SECRET=PASTE_OUTPUT_OF__openssl_rand_hex_32
ADMIN_PASSWORD=YOUR_STRONG_ADMIN_PASSWORD
ADMIN_TELEGRAM_ID=YOUR_NUMERIC_TELEGRAM_ID
CRON_SECRET=PASTE_OUTPUT_OF__openssl_rand_hex_24

TELEGRAM_BOT_TOKEN=YOUR_BOTFATHER_TOKEN
TELEGRAM_BOT_USERNAME=YOUR_BOT_USERNAME_WITHOUT_AT
TELEGRAM_WEBHOOK_SECRET=PASTE_OUTPUT_OF__openssl_rand_hex_20
TELEGRAM_AUTH_REQUIRED=true
ALLOW_DEMO_AUTH=false

NEXT_PUBLIC_APP_URL=https://hasandamane.s12.telviprobot.top
NEXT_PUBLIC_API_URL=
PASARGUARD_MODE=off
NODE_ENV=production
```

> `PORT` را دستی تنظیم نکن؛ cPanel/Passenger خودش تزریق می‌کند و `server.mjs` آن را می‌خواند.

---

## ۱۴) چک‌لیست سریع همین دامنه (به ترتیب انجام بده)

```bash
# ۱) در ترمینال cPanel
cd ~/blackmoney          # همان Application root
npm ci
npx drizzle-kit push
npm run build
node scripts/seed.mjs

# ۲) بعد از Restart در cPanel
curl -s https://hasandamane.s12.telviprobot.top/api/health
# انتظار: {"ok":true,...,"database":true}

# ۳) ورود مدیر
#    مرورگر: https://hasandamane.s12.telviprobot.top/admin
#    یا از مینی‌اپ: تب پروفایل → «ورود مدیران»

# ۴) ثبت وب‌هوک ربات
curl -s "https://api.telegram.org/bot<TELEGRAM_BOT_TOKEN>/setWebhook" \
  -d "url=https://hasandamane.s12.telviprobot.top/api/telegram/webhook" \
  -d "secret_token=<TELEGRAM_WEBHOOK_SECRET>" \
  -d 'allowed_updates=["message","callback_query"]'

# ۵) Cron پیشنهادی (cPanel → Cron Jobs)
#    هر دقیقه:
curl -s "https://hasandamane.s12.telviprobot.top/api/cron/broadcast?secret=CRON_SECRET&limit=15" >/dev/null
#    هر ۵ دقیقه:
curl -s "https://hasandamane.s12.telviprobot.top/api/cron/broadcast?secret=CRON_SECRET&monitor=1&limit=1" >/dev/null
```

**آدرس‌های نهایی که باید کار کنند:**

| مسیر | توضیح |
|---|---|
| `https://hasandamane.s12.telviprobot.top` | مینی‌اپ مشتری |
| `https://hasandamane.s12.telviprobot.top/admin` | پنل مدیریت |
| `https://hasandamane.s12.telviprobot.top/admin/login` | صفحه ورود مدیر |
| `https://hasandamane.s12.telviprobot.top/api/health` | تست سلامت دیتابیس/سرور |
| `https://hasandamane.s12.telviprobot.top/api/telegram/webhook` | وب‌هوک ربات |
| `https://hasandamane.s12.telviprobot.top/docs` | راهنمای آنلاین استقرار |
