[{"data":1,"prerenderedAt":196},["ShallowReactive",2],{"seo-verification":3,"blog-تثبيت-triggerdev-على-خادم-vps-أتمتة-ذاتية-الاستضافة-ma-ar":6,"promo-bar-likely":195},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-تثبيت-triggerdev-على-خادم-vps-أتمتة-ذاتية-الاستضافة-ma-ar",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":32,"intro":35,"sections":36,"ctaTitle":137,"ctaBody":138,"ctaButton":139,"ctaUrl":140,"relatedPosts":141},32,"تثبيت-triggerdev-على-خادم-vps-أتمتة-ذاتية-الاستضافة",{"fr":12,"en":13,"ar":10,"es":14},"installer-trigger-dev-vps","installing-triggerdev-on-a-vps-self-hosted-automation","instalar-trigger-dev-en-un-vps","تثبيت Trigger.dev على VPS: دليل الاستضافة الذاتية الكامل","دليل كامل لتثبيت Trigger.dev على خادم VPS: Docker ووكيل عكسي وأسرار وعمال ومعالجة الأخطاء — مجاني تمامًا دون قيود SaaS.",9,0,false,"2026-05-19T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},2,"الأتمتة","automatisation","bg-brand-action\u002F10 text-brand-action",[28],{"id":23,"name":24,"slug":25,"color":26,"icon":25},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Finstaller-trigger-dev-vps-poster.svg",{"categorySlug":33,"appSlug":34},"الأتمتة-وسير-العمل","trigger-dev","‎Trigger.dev منصة تنسيق مهام الخلفية مُصمَّمة للمطوّرين: مهام دائمة، وإعادات محاولة تلقائية، ولوحة تحكم في الزمن الحقيقي. باستضافتها ذاتيًا على خادم VPS، تحصل على تثبيت مجاني تمامًا وغير محدود — دون اشتراك ‎SaaS، ودون حصص تنفيذ. يغطي هذا الدليل الإعداد الكامل من الألف إلى الياء: المتطلبات، وتوليد الأسرار، والوكيل العكسي ‎HTTPS، وربط أول مشروع ‎TypeScript، ومعالجة الأخطاء الأكثر شيوعًا.",[37,41,52,88,91,113,116,119,123,126,135],{"type":38,"title":39,"body":40},"h2","لماذا تستضيف Trigger.dev ذاتيًا على خادم VPS","يستبدل ‎Trigger.dev الطوابير المصنوعة يدويًا (‎BullMQ، و‎cron هشّة، و‎Lambda التي تنتهي مهلتها) بمنصة موحّدة: مهام دائمة، وإعادات محاولة تلقائية، وإدارة للتزامن، ولوحة تحكم في الزمن الحقيقي. تفرض النسخة السحابية رسومًا حسب عدد عمليات التنفيذ وتحدّ من مدة المهام، وهو ما يصبح مُقيِّدًا سريعًا لمعالجة ‎ETL أو إرسال رسائل بريد إلكتروني بالجملة أو استدعاءات ‎API بطيئة.\n\nوبالاستضافة الذاتية على خادم ‎VPS، تُبقي ‎workers لديك عندك: لا تمرّ مفاتيح ‎API الطرف الثالث (‎OpenAI، و‎Stripe، و‎Resend) عبر أي طرف ثالث، ويمكن أن تعمل مهامك 10 دقائق أو عدة ساعات دون أن تُقطع. تعتمد الحزمة على ‎PostgreSQL و‎Redis و‎Docker، ما يجعلها قابلة لإعادة الإنتاج وسهلة النسخ الاحتياطي. التثبيت **مجاني تمامًا**: لا ترخيص، لا اشتراك — تدفع فقط تكلفة خادم ‎VPS.",{"type":42,"title":43,"items":44},"ul","ما الذي تكسبه بالاستضافة الذاتية",[45,46,47,48,49,50,51],"لا حدّ على مدة أو عدد عمليات تنفيذ مهامك في الخلفية.","تبقى أسرارك (مفاتيح ‎API، رموز) في بنيتك التحتية، وليس على خدمة ‎SaaS طرف ثالث أبدًا.","تكلفة ثابتة قابلة للتوقّع: خادم ‎VPS واحد بدلًا من فاتورة ترتفع مع الحجم.","لا مرور عبر الشبكة العمومية إن كانت ‎workers لديك تعمل بجوار قاعدة بياناتك وتطبيقك.","تحكّم كامل في الإصدارات ومتغيرات البيئة ومدة الاحتفاظ بالسجلات.","إمكانية إطلاق المهام من ‎webhooks الداخلية لديك دون كشف أي خدمة خارجية.","تحديث في الوقت الذي تختاره: أنت تقرر متى تنتقل إلى إصدار جديد من ‎Trigger.dev.",{"type":53,"title":54,"headers":55,"rows":59},"comparison","Trigger.dev ذاتي الاستضافة مقابل السحابة: ما الذي يتغير فعلًا",[56,57,58],"المعيار","‏السحابة (SaaS)","‏VPS ذاتي الاستضافة",[60,64,68,72,76,80,84],[61,62,63],"المدة القصوى لمهمة","محدودة (دقائق)","غير محدودة",[65,66,67],"التكلفة بالحجم","ترتفع مع عمليات التنفيذ","ثابتة (خادم VPS شهريًا)",[69,70,71],"الأسرار \u002F مفاتيح API","تمر عبر السحابة","تبقى في بنيتك التحتية",[73,74,75],"التحديثات","تلقائية، مفروضة","في الوقت الذي تختاره",[77,78,79],"الوصول للشبكة الداخلية","مستحيل بدون نفق","مباشر دون كمون عمومي",[81,82,83],"الاحتفاظ بالسجلات","محدود بالخطة","تتحكم فيه بنفسك",[85,86,87],"الإعداد المبدئي","صفر إعداد","~30 دقيقة (هذا الدليل)",{"type":38,"title":89,"body":90},"المتطلبات العتادية والبرمجية","‎Trigger.dev حزمة كثيفة الاستهلاك نسبيًا لأنها تجمع بين تطبيق الويب و‎workers و‎PostgreSQL و‎Redis. خصّص خادم ‎VPS بـ **4 غيغابايت ‎RAM على الأقل و‎2 vCPU** كحدّ أدنى لاستخدام إنتاجي خفيف؛ واستهدف 8 غيغابايت ‎RAM و4 vCPU إن كنت تشغّل عددًا كبيرًا من المهام المتزامنة أو عمليات معالجة ثقيلة. احسب 40 غيغابايت من قرص ‎SSD لقاعدة البيانات والسجلات وصور ‎Docker.\n\nعلى الصعيد البرمجي: **‎Docker Engine 24+** وإضافة ‎Docker Compose v2‏ (تحقّق بـ `docker compose version`)، واسم نطاق يشير إلى عنوان ‎IP الخاص بالخادم (مثل `trigger.mydomain.com`)، والمنفذ 443 مفتوحًا لـ ‎HTTPS. سرّان لا غنى عنهما: `MAGIC_LINK_SECRET` (المصادقة بدون كلمة مرور) و`ENCRYPTION_KEY` (32 محرفًا سِتّ عشريًا، يُشفّر متغيرات البيئة للمشاريع). ولّدهما قبل أن تبدأ — لا يمكن إعادة توليدهما دون كسر البيانات الموجودة.",{"type":92,"title":93,"steps":94},"steps","تثبيت Trigger.dev باستخدام Docker في 6 خطوات",[95,98,101,104,107,110],{"title":96,"body":97},"تحضير الخادم VPS وتثبيت Docker","اتصل عبر ‎SSH بمستخدم ‎sudo، وحدّث النظام (`apt update && apt upgrade -y`) ثم ثبّت ‎Docker بأمر واحد: `curl -fsSL https:\u002F\u002Fget.docker.com | sh`. أضف مستخدمك إلى مجموعة ‎docker‏ (`usermod -aG docker $USER`) لتجنّب استخدام `sudo` دائمًا. أنشئ مجلدًا مخصّصًا: `mkdir -p \u002Fopt\u002Ftrigger && cd \u002Fopt\u002Ftrigger`. تحقّق من توفّر ‎Compose v2 بـ `docker compose version` — يجب أن تُظهر النتيجة `v2.x.x` كحدّ أدنى.",{"title":99,"body":100},"الحصول على حزمة الاستضافة الذاتية الرسمية","استنسخ المستودع الرسمي: `git clone https:\u002F\u002Fgithub.com\u002Ftriggerdotdev\u002Ftrigger.dev \u002Fopt\u002Ftrigger\u002Fsrc`. انتقل إلى المجلد الفرعي للنشر: `cd \u002Fopt\u002Ftrigger\u002Fsrc\u002Fdocker`. يحتوي هذا المجلد على `docker-compose.yml` الذي ينسّق تطبيق الويب (`webapp`) و‎workers و‎PostgreSQL و‎Redis. انسخ ملف المثال إلى إعداداتك: `cp .env.example .env`. لا تشغّل أي شيء قبل إعداد `.env` — ستُرفض الحزمة بالبدء بالقيم الافتراضية.",{"title":102,"body":103},"توليد الأسرار وضبط النطاق","افتح `.env` في محرّرك واضبط هذه المتغيرات كحدّ أدنى:\n\n- `ENCRYPTION_KEY`: `openssl rand -hex 16` (16 بايت = 32 حرف سِتّ عشري)\n- `MAGIC_LINK_SECRET`: `openssl rand -hex 16` (بالمثل)\n- `LOGIN_ORIGIN`: `https:\u002F\u002Ftrigger.mydomain.com`\n- `APP_ORIGIN`: `https:\u002F\u002Ftrigger.mydomain.com`\n- `POSTGRES_PASSWORD`: كلمة مرور قوية (`openssl rand -base64 24`)\n- `REDIS_PASSWORD`: بالمثل\n\naترك `DATABASE_URL` و`REDIS_URL` كما هما إن كنت تستخدم خدمات ‎Compose الداخلية — فهي تُحيل إلى أسماء خدمات ‎Docker. اضبط أيضًا `SESSION_SECRET` بـ `openssl rand -hex 32`.",{"title":105,"body":106},"تشغيل الحزمة وإنشاء أول حساب","شغّل المجموعة كلها في الخلفية: `docker compose up -d`. تابع عمليات ترحيل قاعدة البيانات في الزمن الحقيقي: `docker compose logs -f webapp`. انتظر رسالة `Listening on port 3030` قبل المتابعة — قد تستغرق عمليات الترحيل 30 إلى 60 ثانية في التشغيل الأول. بمجرد انطلاق التطبيق، يظهر ‎magic link التسجيل في السجلات: انسخه وافتحه في متصفّحك لإنشاء أول حساب مسؤول. إن فاتك الرابط: `docker compose logs webapp | grep magic`.",{"title":108,"body":109},"الكشف عبر وكيل عكسي بـ HTTPS","ضع ‎Caddy أمام التطبيق لإدارة ‎TLS تلقائيًا. أنشئ `\u002Fetc\u002Fcaddy\u002FCaddyfile` بهذا المحتوى الأدنى:\n\n```\ntrigger.mydomain.com {\n    reverse_proxy localhost:3030\n}\n```\n\nأعد تشغيل ‎Caddy‏ (`systemctl reload caddy`): تُصدر ‎Let's Encrypt الشهادة في ثوانٍ. مع ‎nginx، أنشئ ‎vhost يُوكّل إلى `http:\u002F\u002F127.0.0.1:3030` وفعّل شهادة عبر `certbot --nginx`. تحقّق بعد ذلك من أن `https:\u002F\u002Ftrigger.mydomain.com` يستجيب بشكل صحيح قبل المتابعة.",{"title":111,"body":112},"ربط أول مشروع TypeScript","في مشروع ‎Node.js الخاص بك، ثبّت الـ ‎SDK‏: `npm install @trigger.dev\u002Fsdk`. صادق الـ ‎CLI على نسختك: `npx trigger.dev@latest login --api-url https:\u002F\u002Ftrigger.mydomain.com`. ثم أنشئ أول مشروع في لوحة التحكم، واسترجع مفتاح المشروع السري (`sk_...`) وأضفه في ملف `.env` المحلي: `TRIGGER_SECRET_KEY=sk_...`. هيّئ الإعدادات بـ `npx trigger.dev@latest init` وانشر أول مهمة بـ `npx trigger.dev@latest deploy`.",{"type":38,"title":114,"body":115},"معالجة الأخطاء: المشكلات الشائعة وحلولها","فيما يلي أكثر خمسة أخطاء شيوعًا عند تثبيت ‎Trigger.dev بالاستضافة الذاتية.\n\n**`Error: ENCRYPTION_KEY must be 32 characters`** — استخدمت `openssl rand -base64 16` بدلًا من `openssl rand -hex 16`. تُنتج صيغة ‎base64 محارف خارج نطاق السِّتّ عشري. أعد التوليد بـ `-hex 16` (32 حرفًا بالضبط).\n\n**`webapp exited with code 1` عند التشغيل** — تحقّق من السجلات الكاملة بـ `docker compose logs webapp`. السبب الأكثر شيوعًا: `DATABASE_URL` خاطئة أو ‎PostgreSQL لم يكتمل تشغيله بعد. انتظر 10 ثوانٍ وأعد التشغيل بـ `docker compose restart webapp`.\n\n**لا يظهر ‎magic link لإنشاء الحساب** — ربما انطلق التطبيق قبل انتهاء عمليات الترحيل. شغّل `docker compose restart webapp` وراقب السجلات من البداية. إن ظلّ الرابط غائبًا، تحقّق من أن `LOGIN_ORIGIN` يطابق نطاقك تمامًا (بدون شرطة مائلة في النهاية).\n\n**`Failed to connect` في الـ ‎CLI عند `login`** — الوكيل العكسي ليس نشطًا بعد أو ‎DNS لم ينتشر إلى خادمك. اختبر محليًا بـ `curl http:\u002F\u002F127.0.0.1:3030\u002Fhealthcheck` من الخادم: إن استجاب، المشكلة في جهة الوكيل أو ‎DNS.\n\n**المهمة تُنشر لكنها لا تُنفَّذ** — تحقّق من أن ‎workers تعمل: `docker compose ps` يجب أن يُظهر خدمة `worker` بحالة `running`. إن توقّف الـ ‎worker، أعد تشغيله بـ `docker compose up -d worker`. تحقّق أيضًا من أن `TRIGGER_SECRET_KEY` في مشروعك يطابق مفتاح المشروع الصحيح في لوحة التحكم.",{"type":38,"title":117,"body":118},"تأمين النسخة وصيانتها","تعرض نسخة ‎Trigger.dev لوحة التحكم و‎API على النطاق ذاته. بعض الاحتياطات تُقلّص سطح الهجوم دون تعقيد العمليات.\n\n**جدار الحماية**: احجب جميع المنافذ باستثناء 22 (‎SSH) و80 و443. يجب ألا يكون المنفذ 3030 متاحًا مباشرةً من الخارج — فهو مُخصَّص للوكيل العكسي المحلي.\n\n**تدوير الأسرار**: يمكن تدوير `MAGIC_LINK_SECRET` دون كسر البيانات. أما `ENCRYPTION_KEY` فيُشفّر متغيرات البيئة للمشاريع — تدويره يستلزم ترحيل بيانات. احفظهما في مدير أسرار (‎Bitwarden أو ‎1Password أو ‎HashiCorp Vault).\n\n**التحديثات**: يُصدر ‎Trigger.dev إصداراته على ‎GitHub. للتحديث: اسحب الإصدار الجديد (`git pull` في `\u002Fopt\u002Ftrigger\u002Fsrc`)، وأعد بناء الصور (`docker compose pull`)، وأعد التشغيل (`docker compose up -d`). تُطبَّق عمليات ترحيل قاعدة البيانات تلقائيًا عند بدء `webapp`.\n\n**النسخ الاحتياطية**: جدوِل تفريغًا يوميًا لـ ‎PostgreSQL نحو تخزين خارجي. `cron` بسيط: `0 3 * * * docker exec trigger-postgres-1 pg_dump -U postgres trigger | gzip > \u002Fopt\u002Fbackups\u002Ftrigger-$(date +%F).sql.gz`.",{"type":120,"title":121,"body":122},"tip","التوسّع الأفقي للعمال","اعزل ‎workers عن تطبيق الويب في حاويات منفصلة، وحُدّ من تزامنها عبر المتغير `WORKER_CONCURRENCY` (الافتراضي: 10). وبالنسبة للمهام الشديدة الاستهلاك للمعالج، أضف خادم ‎VPS ثانيًا مخصّصًا للـ ‎workers يشير إلى نفس ‎PostgreSQL و‎Redis: بذلك تتوسّع أفقيًا دون المساس بلوحة التحكم. الـ ‎workers عديمة الحالة — تحتاج فقط إلى `DATABASE_URL` و`REDIS_URL` و`ENCRYPTION_KEY` للانضمام إلى الأسطول. على ‎VPS صغير، ابدأ بـ `WORKER_CONCURRENCY=3` لتجنّب إشباع الذاكرة خلال ذروة المهام.",{"type":38,"title":124,"body":125},"كتابة ونشر أول مهمة Trigger.dev","مهمة ‎Trigger.dev هي دالة ‎TypeScript مُصدَّرة من ملف `trigger\u002F` في مشروعك. إليك مثالًا أدنى لإرسال بريد إلكتروني مؤجَّل:\n\n```typescript\nimport { task } from \"@trigger.dev\u002Fsdk\u002Fv3\";\n\nexport const sendWelcomeEmail = task({\n  id: \"send-welcome-email\",\n  run: async (payload: { userId: string; email: string }) => {\n    \u002F\u002F منطق الإرسال هنا\n    await sendEmail(payload.email, \"مرحبًا!\");\n    return { sent: true };\n  },\n});\n```\n\nانشر بـ `npx trigger.dev@latest deploy`. تُظهر لوحة التحكم مهمتك تحت تبويب **Tasks**. أطلق تشغيلًا تجريبيًا من لوحة التحكم أو من كودك: `await sendWelcomeEmail.trigger({ userId: \"u1\", email: \"test@example.com\" })`. تُطبَّق إعادات المحاولة التلقائية عند الخطأ — قابلة للتهيئة بالخيار `retry` في `task()`.\n\nللمهام الطويلة (استيراد CSV، معالجة صور)، استخدم `wait.for()` لتعليق التنفيذ وعدم حجب ‎worker خلال فترات الانتظار الشبكية: يستأنف ‎Trigger.dev المهمة من حيث توقّفت، حتى بعد إعادة تشغيل الحاوية.",{"type":42,"title":127,"items":128},"حالات الاستخدام الأكثر ملاءمة للاستضافة الذاتية",[129,130,131,132,133,134],"**معالجة ETL**: استيراد وتحويل وتحميل أحجام كبيرة من البيانات دون انتهاء مهلة.","**الإرسال المعاملاتي الضخم**: حملات بريد إلكتروني أو إشعارات مع تحكّم في التدفّق.","**مسارات الذكاء الاصطناعي**: استدعاءات متسلسلة لـ OpenAI وAnthropic وHugging Face مع إدارة إعادات المحاولة عند تجاوز الحصة.","**مزامنة تكاملات الطرف الثالث**: Stripe webhooks وShopify وHubSpot — دون الاعتماد على SaaS وسيط.","**المهام المجدولة الحرجة**: استبدال cron هشّة بمهام تمتلك سجل تنفيذ وتنبيهات.","**توليد تقارير PDF أو تصديرات ثقيلة**: مهام تستغرق دقائق عدة دون حدّ للمدة.",{"type":120,"body":136},"‎Trigger.dev **مجاني تمامًا عند الاستضافة الذاتية**: لا يُشترط أي ترخيص تجاري للاستخدام الخاص أو المهني على بنيتك التحتية الخاصة. تُغطّي رخصة ‎MIT الكود مفتوح المصدر. الكود المملوك فقط لنسخة ‎Enterprise (‎SAML SSO، سجلات التدقيق المتقدمة) مستثنى — وللغالبية العظمى من الفرق، تكفي النسخة المجتمعية ذاتية الاستضافة تمامًا.","انشر Trigger.dev في بضع دقائق","يتيح لك خادم VPS Cloud من ServOrbit، المُعدّ مسبقًا مع Docker ونطاق وشهادة SSL جاهزة، إطلاق منسّق المهام ذاتي الاستضافة دون إعداد نظام مُرهِق.","اطلب خادم VPS Cloud الخاص بي","\u002Fapplications\u002Fالأتمتة-وسير-العمل\u002Ftrigger-dev",[142,161,179],{"id":143,"slug":144,"slugs":145,"title":149,"excerpt":150,"readTime":151,"views":152,"isPinned":19,"noindex":19,"publishedAt":153,"updatedAt":154,"category":155,"categories":156,"featuredImage":29,"bgImage":30,"posterImage":158,"relatedSolution":159},3,"تثبيت-n8n-على-vps-مع-docker-دليل-شامل-2026",{"fr":146,"en":147,"ar":144,"es":148},"installer-n8n-vps","install-n8n-on-vps-with-docker-complete-2026-guide","instalar-n8n-en-vps-con-docker","تثبيت n8n على VPS مع Docker: دليل شامل 2026","انشر n8n على VPS مع Docker والوكيل العكسي وHTTPS. يشمل عطل V8، خطأ 502، الانتقال من npm وأمان التنفيذ (تنبيه GHSA-vrv8-j27g-g7cr، أغسطس 2026).",19,4,"2026-06-05T00:00:00+00:00","2026-11-09T20:55:18+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[157],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Finstaller-n8n-vps-poster.svg",{"categorySlug":33,"appSlug":160},"n8n",{"id":162,"slug":163,"slugs":164,"title":168,"excerpt":169,"readTime":152,"views":170,"isPinned":19,"noindex":19,"publishedAt":171,"updatedAt":172,"category":173,"categories":174,"featuredImage":29,"bgImage":30,"posterImage":176,"relatedSolution":177},24,"تثبيت-node-red-على-خادم-vps-أتمتة-ذاتية-الاستضافة",{"fr":165,"en":166,"ar":163,"es":167},"installer-node-red-vps","installing-node-red-on-a-vps-self-hosted-automation","instalar-node-red-en-un-vps","تثبيت Node-RED على خادم VPS: أتمتة ذاتية الاستضافة","ثبّت Node-RED على خادم VPS لأتمتة مسارات عملك القائمة على التدفّق (flow)، وربط واجهات API وأجهزة إنترنت الأشياء IoT، كل ذلك ذاتي الاستضافة وآمن.",1,"2026-05-27T00:00:00+00:00","2026-11-04T16:30:24+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[175],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Finstaller-node-red-vps-poster.svg",{"categorySlug":33,"appSlug":178},"node-red",{"id":180,"slug":181,"slugs":182,"title":186,"excerpt":187,"readTime":143,"views":18,"isPinned":19,"noindex":19,"publishedAt":188,"updatedAt":172,"category":189,"categories":190,"featuredImage":29,"bgImage":30,"posterImage":192,"relatedSolution":193},25,"تثبيت-huginn-على-خادم-vps-أتمتة-ذاتية-الاستضافة",{"fr":183,"en":184,"ar":181,"es":185},"installer-huginn-vps","installing-huginn-on-a-vps-self-hosted-automation","instalar-huginn-en-un-vps","تثبيت Huginn على خادم VPS: أتمتة ذاتية الاستضافة","ثبّت Huginn على خادم VPS لإنشاء وكلاء يراقبون الويب ويستخرجون محتوى الصفحات ويطلقون إجراءات، بأتمتة ذاتية الاستضافة بالكامل.","2026-05-26T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[191],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Finstaller-huginn-vps-poster.svg",{"categorySlug":33,"appSlug":194},"huginn",true,1794270270845]