
Der Mechanismus zur Entwicklung von Benutzeranwendungen und deren Ladeprozess in das Modul ist sowohl fĂŒr das Betriebssystem Linux als auch fĂŒr Windows verfĂŒgbar. In diesem Artikel werden wir ausfĂŒhrlich untersuchen, wie man anhand der Beispiele aus dem bereitgestellten SDK vorgeht. eine benutzerdefinierte Anwendung in das Modul kompilieren und laden.
Vor dem Schreiben dieses Artikels bat ein Bekannter von mir, der mit der Entwicklung unter Linux nicht vertraut ist, darum, den Prozess der Entwicklung einer eigenen Anwendung fĂŒr das Modul SIM7600E-H so detailliert wie möglich zu beschreiben. Das Kriterium fĂŒr die VerstĂ€ndlichkeit des Materials war die Aussage: "so dass ich es verstehe".
Ich lade Sie ein, sich anzusehen, was dabei herausgekommen ist.
Der Artikel wird regelmĂ€Ăig ergĂ€nzt und aktualisiert.
EinfĂŒhrung
Normalerweise werden Mobilfunksmodule nur fĂŒr die DatenĂŒbertragung, Sprachkommunikation, SMS-Versand und Ăhnliches verwendet. All dies geschieht ĂŒber AT-Befehle, die von einem externen Steuer-Mikrocontroller gesendet werden. Es gibt jedoch eine Kategorie von Modulen, die die AusfĂŒhrung von benutzerdefiniertem Code von externen Quellen ermöglichen. In einigen FĂ€llen reduziert dies das Gesamtbudget des GerĂ€ts erheblich, da ein einfacherer (und damit gĂŒnstigerer) Mikrocontroller auf die Platine gesetzt werden kann oder ganz darauf verzichtet wird. Mit dem Aufkommen von LTE-Modulen, die von Android oder Linux betrieben werden und ĂŒber leistungsstarke Ressourcen verfĂŒgen, können alle Aufgaben gelöst werden, die auch mit beliebten Prozessoren möglich sind. In diesem Artikel geht es um das SIM7600E-H, das von Linux gesteuert wird. Wir werden untersuchen, wie man eine ausfĂŒhrbare Anwendung hochlĂ€dt und ausfĂŒhrt.
Das Material basiert gröĂtenteils auf dem Dokument "SIM7600 Open Linux Development Guide", aber einige ErgĂ€nzungen, insbesondere die russische Version, werden nĂŒtzlich sein. Der Artikel hilft denen, die gerade erst beginnen, sich mit dem Modul vertraut zu machen, bis hin zur Installation der Demoversion und vermittelt die notwendigen FĂ€higkeiten fĂŒr die weitere Arbeit.
Kurz gesagt, wer ist SIM7600E-H
SIM7600E-H ist ein Modul, das auf dem ARM Cortex-A7 1,3 GHz Prozessor von Qualcomm basiert und ein internes Linux-Betriebssystem (Kernel 3.18.20) hat. Es kann mit europĂ€ischen (einschlieĂlich russischen) 2G/3G/LTE-Frequenzbereichen arbeiten, unterstĂŒtzt Cat.4 und bietet eine maximale Downloadgeschwindigkeit von bis zu 150 Mbps und eine Uploadgeschwindigkeit von bis zu 50 Mbps. Eine reiche Peripherie, ein industrieller Temperaturbereich und die integrierte GPS/GLONASS-Navigation erfĂŒllen alle Anforderungen an moderne modulare Lösungen im M2M-Bereich.
Ăberblick ĂŒber das System
Das Modul SIM7600E-H basiert auf dem Linux-Betriebssystem (Kernel 3.18.20). Die Dateisystemstruktur beruht auf dem journalisierenden Dateisystem UBIFS (Unsorted Block Image File System).
Wichtige Merkmale dieses Dateisystems sind:
- Es arbeitet mit Partitionen und ermöglicht das Erstellen, Löschen oder Ăndern ihrer GröĂe;
- Es sorgt fĂŒr die Ausrichtung der Daten ĂŒber den gesamten Speicher;
- Es arbeitet mit fehlerhaften Blöcken;
- Es minimiert die Wahrscheinlichkeit von Datenverlust bei plötzlichem Stromausfall oder anderen Störungen;
- Protokollierung.
Die Beschreibung stammt , wo detaillierter ĂŒber dieses Dateisystem berichtet wird.
Das heiĂt, dieser Typ von Dateisystem ist ideal fĂŒr raue Betriebsbedingungen des Moduls und mögliche Stromprobleme geeignet. Das bedeutet aber nicht, dass instabile StromverhĂ€ltnisse als der erwartete Betriebsmodus des Moduls betrachtet werden; es spricht lediglich fĂŒr die höhere LebensfĂ€higkeit des GerĂ€ts.
Speicher
Die Verteilung der Speicherbereiche ist wie folgt aufgebaut:

Es sind drei Hauptbereiche zu ĐČŃЎДлierenden:
ubi0:rootfs â ist nur schreibgeschĂŒtzt verfĂŒgbar und enthĂ€lt den Linux-Kernel selbst
ubi0:usrfs â wird hauptsĂ€chlich fĂŒr die Benutzeranwendungen und die Datenspeicherung verwendet
ubi0:cachefs â ist fĂŒr FOTA-Updates reserviert. Wenn der verfĂŒgbare Speicherplatz nicht ausreicht, um das Update herunterzuladen, entfernt das System nicht verwendete Dateien und gibt so Platz frei. Aus SicherheitsgrĂŒnden sollten dort jedoch keine eigenen Dateien gespeichert werden.
Alle drei Partitionen sind wie folgt verteilt:
Dateisystem
Size
Verwendet
VerfĂŒgbar
Verwendung%
EingehÀngt auf
ubi0:rootfs
40,7M
36,2M
4,4M
89%
/
ubi0:usrfs
10,5M
360K
10,1M
3%
/data
ubi0:cachefs
50,3M
20K
47,7M
0%
/cache
VerfĂŒgbare Funktionen
Wie bereits erwĂ€hnt, basiert das Modul auf dem Cortex A7-Chipsatz von Qualcomm. Es wĂ€re falsch, so einen leistungsstarken Kern fĂŒr die Verarbeitung der Benutzeranwendung und die Entlastung des Hauptprozessors des GerĂ€ts nicht zur VerfĂŒgung zu stellen, indem man einen Teil der Anwendung dem Modul ĂŒbertrĂ€gt.
FĂŒr die Benutzeranwendung stehen uns die folgenden Betriebsmodi der Peripherie zur VerfĂŒgung:
Pin Nr.
Name
Sys GPIO Nr.
Standardaktion
Funktion1
Funktion2
Pull
Wakeup-Interrupt
6
SPI_CLK
â
UART1_RTS
â
â
B-PD
â
7
SPI_MISO
â
UART1_Rx
â
â
B-PD
â
8
SPI_MOSI
â
UART1_Tx
â
â
B-PD
â
9
SPI_CS
â
UART1_CTS
â
â
B-PD
â
21
SD_CMD
â
SD-Karte
â
â
B-PD
â
22
SD_DATA0
â
SD-Karte
â
â
B-PD
â
23
SD_DATA1
â
SD-Karte
â
â
B-PD
â
24
SD_DATA2
â
SD-Karte
â
â
B-PD
â
25
SD_DATA3
â
SD-Karte
â
â
B-PD
â
26
SD_CLK
â
SD-Karte
â
â
B-PN
â
27
SDIO_DATA1
â
WLAN
â
â
B-PD
â
28
SDIO_DATA2
â
WLAN
â
â
B-PD
â
29
SDIO_CMD
â
WLAN
â
â
B-PD
â
30
SDIO_DATA0
â
WLAN
â
â
B-PD
â
31
SDIO_DATA3
â
WLAN
â
â
B-PD
â
32
SDIO_CLK
â
WLAN
â
â
B-PN
â
33
GPIO3
GPIO_1020
MIFI_POWER_EN
GPIO
MIFI_POWER_EN
B-PU
â
34
GPIO6
GPIO_1023
MIFI_SLEEP_CLK
GPIO
MIFI_SLEEP_CLK
B-PD
â
46
ADC2
â
ADC
â
â
â
â
47
ADC1
â
ADC
â
â
B-PU
â
48
SD_DET
GPIO_26
GPIO
GPIO
SD_DET
B-PD
X
49
STATUS
GPIO_52
Status
GPIO
Status
B-PD
X
50
GPIO43
GPIO_36
MIFI_COEX
GPIO
MIFI_COEX
B-PD
â
52
GPIO41
GPIO_79
BT
GPIO
BT
B-PD
X
55
SCL
â
I2C_SCL
â
â
B-PD
â
56
SDA
â
I2C_SDA
â
â
B-PU
â
66
diese Steuer nicht zahlen mĂŒssen. Ăbrigens gibt es bei Nichtzahlung eine Strafe von bis zu 5000 Franken, was einen auf besondere Weise nĂŒchtern macht. Obwohl ich von ein paar Beispielen weiĂ, wo jemand diese Steuer aus Prinzip mehrere Jahre nicht gezahlt hat und nicht bestraft wurde.
â
UART2_RTS
â
â
B-PD
â
67
CTS
â
UART2_CTS
â
â
B-PD
â
68
RxD
â
UART2_Rx
â
â
B-PD
â
69
RI
â
GPIO(RI)
â
â
B-PD
â
70
DCD
â
GPIO
â
â
B-PD
â
71
TxD
â
UART2_Tx
â
â
B-PD
â
72
DTR
â
GPIO(DTR)
â
â
B-PD
X
73
PCM_OUT
â
PCM
â
â
B-PD
â
74
PCM_IN
â
PCM
â
â
B-PD
â
75
PCM_SYNC
â
PCM
â
â
B-PD
â
76
PCM_CLK
â
PCM
â
â
B-PU
â
87
GPIO77
GPIO77
BT
GPIO
BT
B-PD
â
Zustimmen Sie, die Liste ist beeindruckend und beachten Sie: Ein Teil der Peripherie wird verwendet, um das Modul als Router zu betreiben. Das heiĂt, auf Basis eines solchen Moduls kann ein kleiner Router gebaut werden, der Internet ĂŒber WLAN bereitstellt. Ăbrigens gibt es bereits eine fertige Lösung, die SIM7600E-H-MIFI heiĂt und eine miniPCIe-Karte darstellt, mit einem fest verlöteten Modul SIM7600E-H und mehreren AntennenausgĂ€ngen, von denen einer die WLAN-Antenne ist. Das ist jedoch ein Thema fĂŒr ein separates Dokument.
Umgebung (nicht Wochentag)
ermöglichen es Entwicklern, die am besten vertraute Entwicklungsumgebung unter Linux oder Windows selbst auszuwĂ€hlen. Wenn es sich um eine einzelne ausfĂŒhrbare Anwendung auf dem Modul handelt, ist es besser, Windows zu wĂ€hlen, da dies schneller und einfacher geht. FĂŒr komplexe Anwendungsarchitekturen und spĂ€tere Upgrades ist es besser, Linux zu verwenden. AuĂerdem benötigen wir Linux, um ausfĂŒhrbare Dateien zum spĂ€teren Hochladen in das Modul zu kompilieren; dafĂŒr reicht eine virtuelle Maschine aus.
Von dem, was Sie benötigen und nicht frei heruntergeladen werden kann, ist das SDK, das Sie bei Ihrem Distributor anfordern können.
Installation von Tools fĂŒr die Arbeit mit dem Modul
Hier und in der Folge werden wir auf Windows arbeiten, da dies das bekannteste Betriebssystem fĂŒr die meisten Benutzer ist.
Wir mĂŒssen in wenigen einfachen Schritten die notwendige Software installieren, um das Modul zu erlernen:
- GNU/Linux
- Cygwin
- Treiber
- ADB
Installation GNU/Linux
Um die Anwendung zu erstellen, kann jeder mit ARM-Linux kompatible Compiler verwendet werden. Wir nutzen SourceryCodeBenchLiteARM GNU/Linux-Ăbersetzer, der zum Download verfĂŒgbar ist unter .
Um sicherzustellen, dass alle Komponenten korrekt installiert sind, werde ich einige Screenshots des Installationsprozesses bereitstellen. Im Grunde genommen gibt es nichts Schwieriges an der Installation.
Um sicherzustellen, dass alle Komponenten korrekt installiert sind, werde ich einige Screenshots des Installationsprozesses bereitstellen. Im Grunde genommen gibt es nichts Schwieriges an der Installation.
- Akzeptieren Sie die Lizenzvereinbarung

- Geben Sie den Installationsordner an

- Die erforderlichen Komponenten lassen wir unverÀndert

- Lassen Sie es so wie es ist

- Ein paar Mal auf âWeiterâ, âInstallierenâ und das war's

Installation von Cygwin
FĂŒr die Entwicklung benötigen Sie eine Sammlung von Bibliotheken und Utilities aus dem bereitgestellten Paket . Hier ist alles einfach, die aktuelle Version von Cygwin kann kostenlos von der offiziellen Projektwebsite heruntergeladen werden. Zum Zeitpunkt des Schreibens war Version 3.1.5 verfĂŒgbar, die wir bei der Vorbereitung des Materials verwendet haben.
Es gibt nichts Schwieriges bei der Installation von Cygwin, das Einzige, das Sie auswĂ€hlen mĂŒssen, ist der Spiegel, von dem der Installer die notwendigen Dateien herunterladen wird. WĂ€hlen Sie einen beliebigen aus und installieren Sie es, sowie das Set von Utilities und Bibliotheken; lassen Sie alle verfĂŒgbaren Bibliotheken und Utilities ausgewĂ€hlt.
Installation der Treiber
Nachdem das Modul mit dem PC verbunden ist, mĂŒssen die Treiber installiert werden. Sie können sie von Ihrem Distributor anfordern (empfohlen). Ich empfehle nicht, sie selbst im Internet zu suchen, da dies viel Zeit in Anspruch nehmen kann, um die Ursache des GerĂ€tkonflikts zu finden.

Unter den angegebenen Ports sehen wir folgende:
Windows
Linux
Beschreibung
SimTech HS-USB-Diagnose
USB-Serie
Diagnoseschnittstelle
SimTech HS-USB NMEA
USB-Serie
GPS NMEA-Schnittstelle
SimTech HS-USB AT-Port
USB-Serie
AT-Port-Schnittstelle
SimTech HS-USB Modem
USB-Serie
Modem-Port-Schnittstelle
SimTech HS-USB Audio
USB-Serie
USB Audio-Schnittstelle
SimTech HS-USB WWAN-Adapter
USB-Netz
NDIS wwan-Schnittstelle
Android Composite ADB-Schnittstelle
USB ADB
Android fĂŒgt den Debug-Port hinzu
Wie Sie sicherlich bemerkt haben, ist unter den Ports im Screenshot kein USB ADB vorhanden. Das liegt daran, dass der ADB-Port im Modul standardmĂ€Ăig geschlossen ist und aktiviert werden muss, indem der Befehl âAT+CUSBADB=1â an den AT-Port des Moduls gesendet wird, gefolgt von einem Neustart (dies kann mit dem Befehl âAT+CRESETâ durchgefĂŒhrt werden).
Letztendlich erhalten wir die gewĂŒnschte Schnittstelle im GerĂ€te-Manager:

Die Treiberinstallation ist abgeschlossen, wir kommen zu ADB.
Installation von ADB
Gehen Sie zur offiziellen Website von Android Developer unter . Wir werden nicht das umfangreiche Android Studio herunterladen, die Befehlszeile reicht aus, die unter dem Link âDownload SDK Platform-Tools for Windowsâ verfĂŒgbar ist.

Laden Sie das Archiv herunter und entpacken Sie es ins Wurzelverzeichnis von Laufwerk C.
Umgebungsvariablen
Nach der Installation von Cygwin muss der Pfad Cygwin/bin/ zu den Umgebungsvariablen des Entwicklungsumfelds hinzugefĂŒgt werden (Systemsteuerung â System â Erweiterte Systemeinstellungen â Erweitert â Umgebungsvariablen â Systemvariablen â Path â Bearbeiten), wie im Screenshot unten gezeigt:

Ebenso fĂŒgen wir den Pfad zum heruntergeladenen und entpackten ADB-Archiv im Wurzelverzeichnis von Laufwerk C hinzu.

Wir klicken mehrmals auf OK und starten den Computer neu.
Nach dem Neustart kann leicht ĂŒberprĂŒft werden, ob ADB korrekt funktioniert, indem wir die Eingabeaufforderung öffnen (Win+R â cmd) und den Befehl âadb versionâ eingeben. Wir erhalten etwa folgendes Ergebnis:

SchlieĂen Sie das Modul an den PC an (falls es getrennt wurde) und ĂŒberprĂŒfen Sie mit dem Befehl âadb devicesâ, ob ADB es sieht:

Fertig, damit ist die Verbindung zum Modul eingerichtet und wir können die Shell fĂŒr die Arbeit mit dem Modul starten.

Entpacken und Kompilieren des SDK
Nachdem wir Zugriff auf die Shell erhalten haben und mit der Eingabeaufforderung des Moduls arbeiten können, versuchen wir, unser erstes Programm fĂŒr die Ăbertragung auf das Modul zu kompilieren.
Damit haben viele Schwierigkeiten! Da das Modul unter dem Betriebssystem Linux lĂ€uft, ist es am besten, in der nativen Umgebung â Linux â zu kompilieren, um Probleme bei der Codekompilierung unter Windows zu vermeiden.
Wir werden nicht im Detail darauf eingehen, wie man ohne Linux und den Wunsch, es auf dem eigenen Rechner zu installieren, es in einer virtuellen Umgebung installieren kann. Wir nutzen VirtualBox, installieren Ubuntu in der Version 20.04 (aktuelle Version zum Zeitpunkt des Schreibens) und beginnen unter dieser Version mit der Arbeit mit Compilern, SDK usw.
Wir wechseln zur Linux-Umgebung und entpacken das vom Distributor erhaltene Archiv.
simcom@VirtualBox:~/Desktop/OpenLinux$ sudo tar -xzf MDM9x07_OL_2U_22_V1.12_191227.tar.gz Wir wechseln in das Verzeichnis sim_open_sdk und fĂŒgen die Umgebung hinzu:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ cd sim_open_sdk
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ source sim_crosscompile/sim-crosscompile-env-init Wir bleiben in demselben Ordner und fĂŒhren die folgenden Befehle aus, wĂ€hrend wir uns darin befinden.
Wir installieren die Bibliothek libncurses5-dev, falls sie noch nicht installiert wurde:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ sudo apt-get update && sudo apt-get install libncurses5-dev -yPython, falls dies ebenfalls nicht installiert wurde:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ sudo apt-get install python -yund gcc:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ sudo apt-get install gccKompilierung:
Jetzt mĂŒssen wir einige Dateien kompilieren, indem wir die folgenden Befehle nacheinander ausfĂŒhren.
Wenn wĂ€hrend der Kompilierung ein Fenster zur Kernelkonfiguration angezeigt wird, wĂ€hlen Sie einfach Exit und kehren Sie zur Konsole zurĂŒck, wir mĂŒssen das Kernel jetzt nicht konfigurieren.
FĂŒhren Sie aus:
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ makeKompilieren des Bootloaders:
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make abootKompilieren des Kernels:
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make kernel_menuconfig
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make kernel
Kompilieren des Root-Dateisystems:
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make rootfsFĂŒr Linux-Nutzer wird es relevant sein, das Modul zu kompilieren:
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make kernel_moduleKompilieren der Demo:
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make demoDanach erscheinen mehrere neue Dateien im Verzeichnis sim_open_sdk\/output:
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ ls output\/\nappsboot.mbn boot.img demo_app helloworld system.img
Demo
Lassen Sie uns die Demo in unser Modul laden und sehen, was dabei herauskommt.
Booten
Im Verzeichnis sim_open_sdk können wir die Datei demo_app sehen. Wir kopieren sie und verschieben sie in das Wurzelverzeichnis von Laufwerk C auf dem PC, an den das Modul angeschlossen ist. Danach starten wir die Eingabeaufforderung von Windows (Win+R -> cmd) und geben ein:
C:>adb push C:demo_app \/data\/Die Konsole zeigt uns an:
C:demo_app: 1 Datei ĂŒbertragen, 0 ĂŒbersprungen. 151.4 MB\/s (838900 Bytes in 0.005s)Das bedeutet, dass die Datei erfolgreich an das Modul ĂŒbertragen wurde und wir sie nur noch starten mĂŒssen. Lassen Sie uns keine Zeit verlieren.
FĂŒhren Sie aus:
C:>adb shellErweiterung der Berechtigungen der geladenen Datei:
/ # cdhmod 777 /data/demo_appUnd starten:
/ # /data/demo_appIn derselben Konsole wird uns das Modul Folgendes mitteilen:
SDK_VER : SIM_SDK_VER_20191205
DEMO_VER: SIM_SDK_VER_20191205
Bitte wĂ€hlen Sie eine Option zum Testen aus den aufgefĂŒhrten Punkten.
1. WIFI 2. SPRACHANRUF
3. DATENANRUF 4. SMS
5. WDS(APN) 6. NAS
7. AT 8. OTA
9. TTS 10. GPIO
11. GPS 12. Bluetooth
13. TCP\/UDP 14. Timer
15. ADC 16. I2C
17. UIM(SimCard) 18. DMS(IMEI,MEID)
19. UART 20. SPI
21. Version 22. Ethernet
23. FTP 24. SSL
25. HTTP(S) 26. FTP(S)
27. MQTT(S) 28. ALSA
29. DEV 30. AUDIO
31. JSON 32. LBS
99. BEENDEN
Option >
Lassen Sie uns die IMEI des Moduls ansehen, geben wir 7 ein (Wechsel in den Befehlsmodus) und danach 5:
Bitte wĂ€hlen Sie eine Option zum Testen aus den folgenden aufgefĂŒhrten Elementen aus.
1. WIFI 2. Sprachanruf
3. Datenanruf 4. SMS
5. WDS(APN) 6. NAS
7. AT 8. OTA
9. TTS 10. GPIO
11. GPS 12. Bluetooth
13. TCP/UDP 14. Timer
15. ADC 16. I2C
17. UIM(SimCard) 18. DMS(IMEI,MEID)
19. UART 20. SPI
21. Version 22. Ethernet
23. FTP 24. SSL
25. HTTP(S) 26. FTP(S)
27. MQTT(S) 28. ALSA
29. DEV 30. AUDIO
31. JSON 32. LBS
99. EXIT
Option > 7
Bitte wĂ€hlen Sie eine Option zum Testen aus den folgenden aufgefĂŒhrten Elementen aus.
1. Moduls Version abrufen 2. CSQ abrufen
3. CREG abrufen 4. ICCID abrufen
5. IMEI abrufen 6. CIMI abrufen
99. zurĂŒck
Option > 5
IMEI: 867584030090489
Bitte wĂ€hlen Sie eine Option zum Testen aus den folgenden aufgefĂŒhrten Elementen aus.
1. Moduls Version abrufen 2. CSQ abrufen
3. CREG abrufen 4. ICCID abrufen
5. IMEI abrufen 6. CIMI abrufen
99. zurĂŒck
Option >
Auf diese Weise werden wir die IMEI des Moduls sehen.
Als Fazit
Ich hoffe, wir konnten einen allgemeinen Ăberblick darĂŒber geben, wie man mit dem Modul anfĂ€ngt. In den kommenden Artikeln werden wir die Möglichkeiten, die die Plattform SIM7600E-H bietet, sowie die Möglichkeiten, das eigene Programm im Modul aus der Ferne zu aktualisieren, nĂ€her beleuchten.
Ich lade dazu ein, Fragen in den Kommentaren zu stellen und anzugeben, welcher Aspekt der Möglichkeiten des Moduls in den kommenden Artikeln behandelt werden soll.
Quelle: habr.com





