Lolly
ऐप खोलें

डेटा ट्रांसफ़र - lolly-backup बंडल

Lolly उपयोगकर्ता जो कुछ भी जमा करता है वह उसके डिवाइस पर रहता है - कोई अकाउंट नहीं, कोई क्लाउड नहीं। डेटा-ट्रांसफ़र बंडल इसी मूल्य को हिलाने का तरीका है: इसे एक इंस्टॉल पर एक्सपोर्ट करें, फ़ाइल को किसी भी माध्यम से ले जाएँ (USB, AirDrop, ईमेल-टू-सेल्फ़, एक नेटवर्क शेयर) और दूसरे पर इम्पोर्ट करें। फ़ाइल ही परिवहन है। लक्ष्य डिवाइस ऑफ़लाइन हो या ऑनलाइन। इससे कोई फ़र्क़ नहीं पड़ता, क्योंकि कभी किसी सर्वर से बात नहीं होती।

वे दो बटन जो पूरी इंस्टॉल को स्थानांतरित करते हैं: Export my data एक zip लिखता है, Import data उसे वापस पढ़ता है signed by Lollyvector SVG9 paths~4.9k nodes11 groups56 KBखुद जाँचेंसाइन की हुई फ़ाइल पाएँवे दो बटन जो पूरी इंस्टॉल को स्थानांतरित करते हैं: Export my data एक zip लिखता है, Import data उसे वापस पढ़ता है signed by Lollyvector SVG9 paths~4.9k nodes11 groups56 KBखुद जाँचेंसाइन की हुई फ़ाइल पाएँ

यह पृष्ठ फ़ॉर्मैट स्पेक है। अंतिम-उपयोगकर्ता वॉकथ्रू के लिए देखें अपना काम खोजें और वापस पाएँ → अपना काम किसी दूसरे डिवाइस पर ले जाएँ। कार्यान्वयन है shells/web/src/data-transfer.ts, और tests/data-transfer.test.ts राउंड-ट्रिप कॉन्ट्रैक्ट को पिन करता है।

दायरा। एक बंडल उपयोगकर्ता डेटा ले जाता है, कैटलॉग टूल नहीं। कैटलॉग टूल और कैटलॉग एसेट्स अलग से सिंक होते हैं और मान लिया जाता है कि वे लक्ष्य पर पहले से मौजूद हैं (सबसे बुरी स्थिति में एक ऊँचे वर्शन पर); उपयोगकर्ता के अपने बनाए टूल profile.json के भीतर यात्रा करते हैं। इम्पोर्ट कभी कोई कैटलॉग टूल इंस्टॉल या अपग्रेड नहीं करता।

लक्ष्य

एनवेलप

एक बंडल एक सादा .zip है। डाउनलोड का नाम उस व्यक्ति के नाम पर रखा जाता है जिसका यह है - LollyTools-<First>-<Last>-<YYYY-MM-DD>-<n>.zip (उदाहरण के लिए LollyTools-Ada-Lovelace-2026-06-26-1.zip) - ताकि बैकअप्स से भरा Downloads फ़ोल्डर पठनीय बना रहे। पहला और अंतिम भाग प्रोफ़ाइल से आते हैं और सेट न होने पर छोड़ दिए जाते हैं। कोई प्रोफ़ाइल न होने पर LollyTools-2026-06-26-1.zip मिलता है, और अकेला पहला नाम होने पर LollyTools-Ada-2026-06-26-1.zip मिलता है। हर भाग को एक फ़ाइलनाम-सुरक्षित टोकन में सैनिटाइज़ किया जाता है (Unicode अक्षर/अंक रखे जाते हैं, स्पेस/विराम चिह्न हटा दिए जाते हैं, अधिकतम 32 वर्ण)। <n> एक प्रति-दिन, प्रति-डिवाइस क्रम है, ताकि एक ही दिन के बार-बार एक्सपोर्ट टकराएँ नहीं और क्रम में रहें। shells/web/src/data-transfer.ts में backupFilename() यह नाम बनाता है। नाम चाहे जो भी हो, zip की सामग्री समान रहती है। अंदर:

पथआवश्यकसामग्री
manifest.jsonहाँफ़ॉर्मैट id, वर्शन, गिनतियाँ और प्रति-भाग इंटीग्रिटी। पहली चीज़ जो एक रीडर देखता है।
profile.jsonसेट होने परउपयोगकर्ता का पूरा me रिकॉर्ड: नाम, संपर्क, हेडशॉट संदर्भ और फ़्लैग, साथ ही फ़ोल्डर, Trash, प्रोजेक्ट ब्लूप्रिंट, यूज़र टेम्पलेट और यूज़र-निर्मित टूल, फ़ेवरिट, छुपाए गए टूल, भाषा और इमोजी चुनाव। host.profile के ज़रिए पढ़ा जाता है।
sessions.jsonहाँहर सेव किया गया सेशन: स्लॉट, टूल id/वर्शन, लेबल, थंबनेल (data-URL) और पूरा इनपुट डेटा। host.state के ज़रिए पढ़ा जाता है।
assets.jsonहाँहर अपलोड की गई एसेट (इमेज, फ़ॉन्ट, ब्रांड टोकन, लोगो, डाउनलोड की सेव की गई कॉपी) का मेटाडेटा, हर एक assets/blobs/ के तहत अपने बाइट्स की ओर इशारा करता है।
assets/blobs/<n>.<ext>प्रति एसेटकच्चे एसेट बाइट्स (इमेज और फ़ॉन्ट फ़ाइलें)। असंपीड़ित संग्रहीत (पहले से संपीड़ित फ़ॉर्मैट्स)। एक्सटेंशन केवल दिखावटी है। assets.json में MIME ही प्रामाणिक है।
assets/blobs/<n>.c2paमौजूद होने परएसेट रिकॉर्ड में _credentialFile द्वारा संदर्भित, असली बाइनरी बाइट्स के रूप में निकाले गए Content Credentials। ये डिवाइस साइनिंग कीज़ नहीं हैं।
design-systems.jsonमौजूद होने परइस इंस्टॉल पर बनाए या जोड़े गए डिज़ाइन सिस्टम, { active, records } के रूप में। इम्पोर्ट पर id से मर्ज किया जाता है; बंडल की सक्रिय पसंद तभी लागू होती है जब लक्ष्य के पास अपना कोई डिज़ाइन सिस्टम न हो।
file-history.jsonवैकल्पिकवर्शन वाले एसेट स्नैपशॉट, टर्मिनल फ़ाइल-ऑपरेशन रिपोर्ट और पूरे बैच मैनिफ़ेस्ट। हिस्ट्री भाग का अपना वर्शन है; शेल के अंतर्गत fileHistory बैकअप अडैप्टर द्वारा प्रदान किया जाता है।
revision-history.jsonवैकल्पिक, मैनुअल बैकअपस्थायी क्रिएशन ID, रखे गए चेकपॉइंट, थंबनेल और चलती हुई रिकवरी ड्राफ़्ट। जहाँ समर्थित हो वहाँ host.state.history.backup द्वारा प्रदान किया जाता है।
file-history/versions/प्रति स्नैपशॉटपुराने एसेट बाइट्स और निकाले गए क्रेडेंशियल, इससे बेपरवाह कि मौजूदा एसेट अभी भी मौजूद है या नहीं।
file-history/results/प्रति पूर्ण ऑपरेशनअसली आउटपुट बाइट्स। कन्वर्ज़न के लिए चुनी गई कोई मूल फ़ाइल रखी या शामिल नहीं की जाती।
prefs.jsonहाँउपयोगकर्ता-स्वामित्व वाली स्थानीय प्राथमिकताएँ: theme, sidebarWidth और ct-metrics गतिविधि गणना।
lolly.txtहाँबंडल का एक मानव-पठनीय सारांश (गिनतियाँ, प्रोफ़ाइल, फ़ाइलनाम) उस किसी के लिए जो Lolly के बिना zip खोलता है। हर एक्सपोर्ट पर फिर से बनाया जाता है और इम्पोर्ट पर पहचाना जाता है, इसलिए यह कभी छूटे हुए भाग के रूप में नहीं गिना जाता। यह इंटीग्रिटी मैप के बाद लिखा जाता है, इसलिए यह उससे बाहर रहता है।

बंडल जानबूझकर एक सादा zip है: यह किसी भी परिवहन में बरकरार बचता है, और कोई भी अनज़िप टूल इसका निरीक्षण कर सकता है।

profile.json सबसे छोटा भाग है और वह जिसे ऐप में एक रीडर सबसे पहले देखता है: वे विवरण जिन्हें एक निर्माता एक बार भरता है, साथ ही वह ऑप्ट-इन जो टूल को उनका उपयोग करने देता है।

प्रोफ़ाइल विवरण फ़ॉर्म जो profile.json बन जाता है: नाम, संपर्क विवरण और हेडशॉट signed by Lollyvector SVG15 paths~1.2k nodes30 groups1 image40 KBखुद जाँचेंसाइन की हुई फ़ाइल पाएँ

manifest.json

{
  "format": "lolly-backup",
  "formatVersion": 3,
  "minReader": 1,
  "app": "lolly",
  "exportedAt": "2026-06-22T09:30:00.000Z",
  "counts": { "profile": true, "sessions": 2, "userAssets": 4, "prefs": 3, "assetVersions": 1, "fileOperations": 1 },
  "integrity": {
    "profile.json": "sha256-…",
    "sessions.json": "sha256-…",
    "assets.json": "sha256-…",
    "assets/blobs/0.bin": "sha256-…",
    "file-history.json": "sha256-…",
    "file-history/versions/0.bin": "sha256-…",
    "file-history/results/0.bin": "sha256-…",
    "prefs.json": "sha256-…"
  }
}
फ़ील्डअर्थ
formatहमेशा lolly-backup। इसके बिना फ़ाइल "not a Lolly backup" के रूप में अस्वीकार कर दी जाती है।
formatVersionवह लेआउट जिसके साथ यह बंडल लिखा गया था। भाग-समूह या आकारों में किसी भी बदलाव पर बढ़ाया जाता है। रीडर इस पर गेट नहीं करते।
minReaderन्यूनतम रीडर वर्शन जो इस बंडल को सुरक्षित रूप से इम्पोर्ट करने के लिए आवश्यक है। यही वह फ़ील्ड है जिस पर रीडर गेट करते हैं।
appनिर्माण करने वाला ऐप id, निदान के लिए।
exportedAtबंडल बनाए जाने का ISO टाइमस्टैम्प।
countsलेखक ने क्या डाला, प्रदर्शन और सैनिटी-चेकिंग के लिए।
integrityवैकल्पिक। manifest.json को छोड़कर हर भाग को उसके असंपीड़ित बाइट्स के SRI-शैली sha256-<base64> डाइजेस्ट से मैप करता है।

वर्शन नीति (फ़ॉरवर्ड संगतता)

formatVersion और minReader के बीच का विभाजन ही वह चीज़ है जो फ़ॉर्मैट को पुराने इंस्टॉल्स को अनाथ किए बिना बढ़ने देती है:

लेखकों के लिए अंगूठे का नियम: यदि हर मौजूदा रीडर आपके जोड़े को अनदेखा करके भी सही काम करता रहेगा, तो यह additive है - formatVersion बढ़ाएँ, minReader छोड़ दें। अन्यथा minReader बढ़ाएँ।

इंटीग्रिटी

जब manifest.integrity मौजूद होता है, तो एक रीडर कुछ भी लिखने से पहले हर सूचीबद्ध भाग का SHA-256 सत्यापित करता है। कोई बेमेल ("failed its integrity check") या कोई गायब भाग ("incomplete") पूरे इम्पोर्ट को रद्द कर देता है - कोई आंशिक रीस्टोर नहीं होता। यह उस भ्रष्टाचार को पकड़ता है जो एक फ़ाइल परिवहन ला सकता है (एक कटा हुआ AirDrop, एक ईमेल गेटवे जिसने अटैचमेंट को फिर से एनकोड किया, एक खराब USB सेक्टर)।

इंटीग्रिटी डिज़ाइन से ही बेस्ट-एफ़र्ट है: यह केवल वहीं लिखी जाती है जहाँ Web Crypto उपलब्ध है (हर सुरक्षित ब्राउज़र संदर्भ और आधुनिक Node), और केवल तभी सत्यापित होती है जब मैप और Web Crypto दोनों मौजूद हों। बिना मैप वाला बंडल - उदाहरण के लिए इंटीग्रिटी अस्तित्व में आने से पहले का कोई बंडल - बिना बदलाव के इम्पोर्ट हो जाता है। "Cannot verify" को कभी "corrupt" के रूप में नहीं लिया जाता।

मैनिफ़ेस्ट न तो अपने आप को सूचीबद्ध करता है और न ही फिर से बनाए गए lolly.txt README को। डाइजेस्ट उन्हीं भागों को कवर करते हैं जिनकी मैनिफ़ेस्ट गारंटी देता है।

इम्पोर्ट सिमेंटिक्स

इम्पोर्ट एक मर्ज है, कभी सब कुछ बदलना नहीं:

सेव किए गए सेशन अपने-आप अपनी इमेज से फिर से जुड़ जाते हैं: एसेट संदर्भ id से रखे जाते हैं, और अपलोड की गई इमेज रीस्टोर होने के बाद ब्रिज उन्हें फिर से हल करता है (इसे वैसे भी करना ही होता है, क्योंकि blob: URLs रीलोड में नहीं बचते)।

इम्पोर्ट सारांश { profile, sessions, userAssets, prefs, skipped, failedAssets } रिपोर्ट करता है। failedAssets उन अपलोड की गई एसेट्स की गिनती करता है जिन्हें रीस्टोर नहीं किया जा सका (जैसे डिवाइस स्टोरेज भरा होना)। यह skipped से अलग है, जो एक फ़ॉरवर्ड-संगत नए लेखक के उन भागों की गिनती करता है जिन्हें इस बिल्ड ने नहीं पहचाना। UI skipped को सामने लाता है ("… · N newer items skipped"), ताकि रीस्टोर इस बारे में ईमानदार रहे कि उसने क्या पीछे छोड़ा।

जब फ़ाइल हिस्ट्री मौजूद हो, तो सारांश assetVersions, fileOperations और failedHistory भी ले जाता है। स्टोरेज खत्म होना या अपरिवर्तनीय-ID टकराव आंशिक रीस्टोर का कारण बन सकते हैं; UI उपयोगकर्ता को सोर्स बैकअप रखने के लिए कहता है। आंशिक या असमर्थित रीस्टोर के बाद Cloud sync अपना लागू किया गया रिविज़न आगे नहीं बढ़ाता, इसलिए स्नैपशॉट फिर से कोशिश करने के लिए उपलब्ध रहता है। रीस्टोर सभी प्रोफ़ाइल/सेशन/एसेट/हिस्ट्री स्टोर में एक इकलौता ट्रांज़ैक्शन नहीं है।

क्रिएशन हिस्ट्री (v3)

एक हिस्ट्री-सक्षम वेब होस्ट से मैनुअल बैकअप में अपना { version: 1, documents, revisions, recoveries } स्कीमा रखने वाला revision-history.json शामिल होता है। यह रखी गई ID, कैनॉनिकल इनपुट स्नैपशॉट, वर्शन स्टैम्प, रास्टर प्रीव्यू और अलग राइटर ड्राफ़्ट साथ ले जाता है। हिस्ट्री अडैप्टर मौजूदा सेशन और उनके हेड्स को एक ही रीड ट्रांज़ैक्शन में कैप्चर करता है; sessions.json पुराने रीडर के लिए वही मौजूदा स्नैपशॉट इस्तेमाल करता है।

रीस्टोर आर्काइव को एक ट्रांज़ैक्शन में कमिट करने से पहले पेलोड SHA-256 और बाइट काउंट, यूनीक पहचान, दस्तावेज़/हेड संबंध, वंशावली, टाइमस्टैंप, प्रीव्यू प्रकार और सीमाएँ जाँचता है। कॉम्पैक्ट किए गए पैरेंट संदर्भ अनुपस्थित हो सकते हैं। मौजूदा वर्तमान काम कभी चुपचाप नहीं बदला जाता: जब कोई क्रिएशन दोनों तरफ़ हो, तो जो पक्ष वर्तमान के रूप में नहीं रखा जाता वह एक protected draft बन जाता है। आर्काइव की 384 MiB ट्रांसफ़र सीमा स्पष्ट रूप से जाँची जाती है, और स्टोरेज सीमाओं को रखे गए चेकपॉइंट को काटे बिना लागू किया जाता है। पूरा बैकअप अब भी एक इन-मेमोरी ZIP कार्यान्वयन इस्तेमाल करता है और यह कोई स्ट्रीमिंग आर्काइव नहीं है।

सारांश में revisions और recoveryDrafts जुड़ जाते हैं, जो सिर्फ़ यह गिनते हैं कि इस इम्पोर्ट ने क्या जोड़ा, और added, kept, replaced, copies व hidden यह बताने के लिए कि हर क्रिएशन कैसे मर्ज हुई। इस क्षमता के बिना एक शेल सामान्य सेशन रीस्टोर करता है और हिस्ट्री भाग को छूटा हुआ रिपोर्ट करता है। नेटिव फ़ाइलसिस्टम हिस्ट्री तब तक असमर्थित रहती है जब तक इसका अडैप्टर टिकाऊ हिस्ट्री ट्रांज़ैक्शन नहीं देता। P2P गेस्ट स्टेट के पास कोई टिकाऊ हिस्ट्री या रिकवरी आर्काइव नहीं है।

व्यक्तिगत स्नैपशॉट सिंक क्रिएशन हिस्ट्री को स्पष्ट रूप से बाहर रखता है। किसी हिस्ट्री रखने वाले लोकल दस्तावेज़ पर स्नैपशॉट लागू करना उसकी पिछली कार्यकारी स्थिति को एक अलग रिकवरी ड्राफ़्ट के रूप में सुरक्षित रखता है और किसी भी खुले एडिटर का राइट टोकन अमान्य कर देता है। इसके अपरिवर्तनीय चेकपॉइंट डिवाइस पर बने रहते हैं। यह स्नैपशॉट बदलने के दौरान लोकल हिस्ट्री की रक्षा करता है; यह समवर्ती डिवाइस हिस्ट्री को मर्ज नहीं करता।

पुराने एसेट संदर्भ बनाए रखे जाते हैं, जबकि रेंडरिंग अब भी एसेट को लक्ष्य की मौजूदा लाइब्रेरी के ज़रिए हल करती है। यह आर्काइव अभी तक असली पुराने एसेट बाइट्स या पुराने टूल रेंडर की गारंटी नहीं देता। एसेट-वर्शन और फ़ाइल-रिज़ल्ट बाइट्स अपने मौजूदा अलग बैकअप भाग के ज़रिए यात्रा करना जारी रखते हैं।

सेव किए गए वर्शन और फ़ाइल परिणाम (v2)

वैकल्पिक हिस्ट्री भाग में { version: 2, assetVersions: [...], operations: [...], batches: [...] } होता है; रीडर बिना बैच वाले पुराने history-v1 आकार को भी स्वीकार करते हैं। हर स्नैपशॉट स्थायी एसेट ID और असली वर्शन, उसका सेव समय, बाइट लंबाई और हेक्स SHA-256, साथ ही एक एसेट रिकॉर्ड पहचानता है जिसका _file और वैकल्पिक _credentialFile बाइनरी भागों की ओर इशारा करता है। ऑपरेशन मूल फ़ाइल फ़ैक्ट्स, रिक्वेस्ट, रिपोर्ट, टाइमस्टैंप और वैकल्पिक रिज़ल्ट _file ले जाते हैं; स्टोरेज बैकएंड नाम, OPFS हैंडल और एग्ज़िक्यूशन लीज़ यात्रा नहीं करते। पुराने केवल-history-v1 रीडर इम्पोर्ट करने से पहले नए हिस्ट्री वर्शन को अस्वीकार करते हैं, चुपचाप बैच सदस्यता गिराने के बजाय।

बैच मैनिफ़ेस्ट प्रोसेसिंग से पहले हर चुने गए सोर्स को रिकॉर्ड करते हैं, जिनमें कभी न पढ़ी गई फ़ाइलें, रद्द किए गए सदस्य, रिज़ल्ट स्पेस रिज़र्व करने में विफलता और बाधित काम शामिल हैं। हर सदस्य के पास एक स्थायी ऑपरेशन ID, सोर्स संदर्भ/फ़ैक्ट्स, माँगा गया आउटपुट नाम और टर्मिनल रिपोर्ट होती है। एक न पढ़ी गई सोर्स के पास घोषित फ़ैक्ट्स होते हैं, कोई मनगढ़ंत डाइजेस्ट नहीं। इम्पोर्ट सदस्य की पहचान और किसी भी ले जाई गई ऑपरेशन रिपोर्ट के साथ स्थिरता जाँचता है। बैच रिपोर्ट तब भी उपलब्ध रहती हैं जब अलग-अलग रिज़ल्ट को स्पष्ट रूप से हटा दिया गया हो, लेकिन एक रसीद का मतलब यह नहीं कि उसके आउटपुट बाइट्स अब भी संग्रहीत हैं।

पुराने रीडर अब भी v2 एनवेलप (minReader: 1) स्वीकार करते हैं और परिचित भाग रीस्टोर करते हैं, असमर्थित हिस्ट्री भाग को छूटा हुआ गिनते हैं। पूरी हिस्ट्री रिकवरी के लिए fileHistory अडैप्टर वाला शेल चाहिए; यह एक शेल-आंतरिक सीम है, कोई नई टूल-फ़ेसिंग HostV1 क्षमता नहीं। असली टू-डिवाइस रीस्टोर लोकल Chromium गेट से कवर होता है; इंस्टॉल किए गए Tauri/iOS/Android रिकवरी की स्वीकृति अलग बनी रहती है।

क्या यात्रा नहीं करता

स्टोरेज मीटर उसी विभाजन को वस्तुओं में बाँटता है। सेव किए गए सेशन, My images और फ़ाइल रिज़ल्ट व वर्शन एक बंडल में सवार होते हैं। एसेट कैश, टूल प्रीव्यू और नीचे के ऑफ़लाइन पिन सभी फिर से व्युत्पन्न किए जा सकते हैं, इसलिए वे पीछे रह जाते हैं।

स्टोरेज मीटर इस डिवाइस के डेटा को नामित श्रेणियों में तोड़ते हुए, जिसमें Saved sessions और My images को Asset cache से अलग ट्रैक किया गया है, यहाँ एक नए इंस्टॉल पर जहाँ हर श्रेणी अभी भी खाली है signed by Lollyvector SVG37 paths~4.9k nodes85 groups65 KBखुद जाँचेंसाइन की हुई फ़ाइल पाएँस्टोरेज मीटर इस डिवाइस के डेटा को नामित श्रेणियों में तोड़ते हुए, जिसमें Saved sessions और My images को Asset cache से अलग ट्रैक किया गया है, यहाँ एक नए इंस्टॉल पर जहाँ हर श्रेणी अभी भी खाली है signed by Lollyvector SVG37 paths~4.9k nodes85 groups65 KBखुद जाँचेंसाइन की हुई फ़ाइल पाएँ

क्रॉस-शेल गारंटी

data-transfer.ts केवल कैपेबिलिटी ब्रिज (host.profile, host.state, host.assets) और साझा localStorage प्रेफ़्स के माध्यम से पढ़ता और लिखता है। यही मॉड्यूल वेब और Tauri पर सामान्य एनवेलप को पढ़ता और लिखता है, IndexedDB या फ़ाइलसिस्टम स्टोरेज पर। वैकल्पिक हिस्ट्री भाग केवल वहीं दिखते हैं जहाँ संगत अडैप्टर उपलब्ध हो; इम्पोर्ट पर एक असमर्थित भाग को छूटा हुआ रिपोर्ट किया जाता है। हेडलेस सूट सामान्य भागों को एक इन-मेमोरी ब्रिज के विरुद्ध चलाता है, जबकि हिस्ट्री ट्रांज़ैक्शन के लिए असली-ब्राउज़र टेस्ट भी हैं।

दो शेल उस गारंटी से बाहर हैं, अलग-अलग वजहों से:

सुरक्षित एक्सटेंशन पॉइंट

एनवेलप जानबूझकर एक मेनिफ़ेस्ट और नामित भागों का एक सेट है, ताकि नए तरह का पोर्टेबल डेटा बाद में बिना किसी ब्रेकिंग बदलाव के इस पर सवार हो सके। ये अतिरिक्त भागों के रूप में शामिल होते हैं (नया formatVersion, वही minReader), और आज का रीडर जो नहीं पहचानता उसे छोड़ देता है। ये अभी तक नहीं बनाए गए हैं। नाम यहाँ सुरक्षित रखे गए हैं ताकि जब ये आएँ तो फ़ॉर्मैट सुसंगत बना रहे।

इन सुरक्षित नामों और ऊपर दिए गए भागों के अलावा कुछ भी रीडर के लिए एक अज्ञात भाग है: बिना छेड़े छोड़ दिया जाता है और skipped में गिना जाता है।

संदर्भ