Les bases de données - Episode 1 - 13/06/2000
Le Palm est une machine fabuleuse (vous le saviez) et utile de surcroît quand on voit le nombre considérable d'informations qu'il est capable de stocker malgré sa petite taille. Les programmeurs ont rapidement compris l'intérêt de développer des petits systèmes de bases de données, soit spécifiques et non modifiables (par exemple une liste des éléments chimiques périodiques), soit plus généralistes (modification des données et des types de données depuis le Palm), soit des outils de programmation à base de formulaires de type RAD ( "rapide application designer" ) orientés base de données comme Pendragon Forms ou Satellite Forms. Ce mois-ci nous allons dresser une liste de ces programmes avec leurs caractéristiques, et la prochaine fois nous embrayerons sur l'étude de cas et l'utilisation proprement dite.
I- Quelques rappels généraux sur les bases de données
Qu'est-ce qu'une base de données ? Un fichier constitué d'enregistrements qui ont une structure définie et immuable. Pendant l'exploitation, seules les données changent. Les enregistrements qui se suivent sont un assemblage de champs, et à l'intérieur des champs on y trouve des caractères, symboles, bits. Prenons un exemple, soit le classique répertoire d'adresse constitué de la manière suivante :
I.1. La
structure
nom : texte 20 caractères
prénom : texte 20 caractères
adresse : texte 100 caractères
code postal : entier 5 caractères
La structure
d'un enregistrement est donc composée de 20+20+100+5=145 caractères.
Si votre base de données contient 2 enregistrements, votre fichier "
pèsera " 290 caractères (+ l'en-tête du fichier qui définit
la structure).
I.2. Les données
| Nom | Prénom | Adresse | code postal |
| Durand | damien | 54 rue des palmiers villecool | 20540 |
| Dupond | eric | 64 ch des cototiers vilosoleil | 21566 |
| Xxx | Xxx | Xxx | Xxx |
Dans le fichier, les données sont à la queue leu leu et se présentent comme suit :
" nom,c,20,prenom,c,20,adresse,c,100,codepostal,n,5,durand,damiens,54 rue des palmiers villecool,20540,dupond,eric,64 ch des cototiers vilosoleil,21566 "
La structure régulière des informations à l'intérieur des fichiers permet de traiter des données en très grande quantité à l'opposé des tableurs (limités en colonnes et lignes). D'autre part, le fichier n'est pas chargé en mémoire avant exploitation. Dès le moment où l'en-tête du fichier définit la taille de la structure, il est facile pour le programme d'accéder au 243éme enregistrement (243+1 x taille de la structure). Ca, c'est bien sûr en théorie, car les puissants Systèmes de Gestion de Base de Données (SGBD) tels Oracle, Sybase, Dbase, Access, 4D et Filemaker ont développé chacun leur propre "moteur" (engine en anglais) pour toujours accéder plus vite aux données et les traiter plus rapidement.
I.3. Les différents types de champs dans la nature des SGBD
Parmi les fonctionnalités defertes par les SGBD, on doit pouvoir trier des enregistrements, filtrer des valeurs et faire des calculs. Nous verrons que ce n'est pas si utopique de voir ces fonctions implantées dans les programmes pour le Palm.
Au niveau de l'affichage des données 2 vue fondamentale se présente le mode " feuille " ou " tableau " qui fait apparaître autant d'enregistrement (mais pas tout les champs) que l'écran ne le permet, et le mode " fiche " ou un seul enregistrement est visible mais plus de champs si ce n'est pas la totalité.
II- Les logiciels référencés sur la plate-forme Palm
Les bases
de données - Episode 2 - 20/06/2000
La majorité des applis qui portent le nom de SGBD ou du moins qui
réalisent les services d'une base de donnée possédent
la faculté de transferer les fichiers vers ou depuis votre machine
de bureau soit en CSV, [un format de donnée organisé en
"data1";"data2"; ... commun à bcp de programmes PC (access,
excel, word ...) ou MAC. Les données sont entre guillemets et
espacée soit par un point virgule (excel) ou une vigule (CSV=Comma
Separate Value et "comma"="virgule" en anglais).] ou plus élaborés
directement vers des applis comme Access ou Filemaker (ou encore Oracle)
avec des conduits qui permettent une fusion des données au niveau
enregistrement ou au niveau du fichier de façon directe et transparente
ou de façon indirecte (sauver/exporter/importer) dans ce dernier cas
la fusion de 2 bases l'une sur le palm, l'autre sur la machine de bureau
est impossible, il y forcement ecrassement des données de l'une des
2 plate-fomes. Comme justement l'interêt d'une base de donnée
et de pouvoir modifier des enregistrements sur les 2 plateformes sans soucis,
il faut bien choisir la solution correcte pour limiter les manipulations.
| Base de donnée Palm | Format | Conduit | Base de donnée PC/MAC |
Notes |
|---|---|---|---|---|
| JFile |
CSV |
livré |
Excel/Access/Filemaker |
Synchro par import/export pas de fusion des enregistrements possible. Ecrassement des données d'une des 2 plateformes. |
| HanDBase |
CSV |
livré |
Excel/Access |
Synchro par import/export
pas de fusion des enregistrements possible. Ecrassement des données
d'une des 2 plateformes. HanDBase desktop pour les conversions/editions depuis PC Autres plateformes dispo sur MAC, Unix etc... |
| MobileDB | CSV/HTML |
livré |
Excel/Access |
Synchro par import/export pas de fusion des enregistrements possible. Ecrassement des données d'une des 2 plateformes. |
Voilà un tableau que je vais mettre à jour avec les futurs épisodes à mesure que je parlerai des autres programmes palm.
II.1. JFile http://www.land-j.com/
JFile est
sans aucun doute le plus connu et le programme le plus courant pour les bases
de données "standard" sur Palm. Il est également sortit avant
HandDBase, MobileDB et ThinkDB, ce qui peut en partie expliquer son succès
(et mon achat également). Jfile Pro ne gère pas (encore) le relationnel
mais si on en croit les prévisions de son auteur John Lehett rapportées
sur son site, la prochaine version devrais inclure cette capacité à
ce programme déjà puissant et surtout très stable.
| Ecran d'accueil | Caractéristiques | Types de champs |
|---|---|---|
![]() |
Dernière
version distribuée Jfile 5.0 Auteur/Editeur John Lehett / Land-J Technologies Ressources : compatible toute machines OS 2.x et supérieur (les Pilot 1000 / 5000 devront resté sur Jfile 2.3f) 30 databases maximum (1 dans la version non enregistrée) 50 champs par database 20 caractères pour le nom des champs 4000 caractères par champs |
|
| Voici en
vrac les caractérisques supplémentaires du programme données
dans la documentation: - Calcul de la somme des valeurs d'un champ (avec prise en compte du filtrage) - Fonction recherche du palm étendue au valeur dans les champs - Edition des champs dans l'affichage en colonne - Vérouillage de la base de en lecture seule - Mot de passe pour proteger l'acces à une base de donnée - Exportation d'enregistrement vers le MemoPad - Duplication des enregistrements |
||
La navigation entre les enregistrements se fait soit à partir du menu :aller au 1er, au dernier enregistrement ou aller à l'enregistrement n° #, soit avec les boutons haut et bas du pilot pour faire défiler par paquet de 10 enregistrements en mode liste mais également d'enregistrement en enregistrement dans le mode fiche..
La fonction trie des enregistrements implantée s'effectue sur 1, 2 ou 3 champs en même temps, sens A-Z ou Z-A
Le filtre, c'est à dire l'affichage uniquement des enregistrements correspondant a un critére peut se faire soit sur la tout les champs en même temps soit sur un seul champs. Quant à la valeur recherchée ou exclu, elle peut être numérique, alpha-numérique et inclure des jockers.
Au niveau affichage, il est possible d'ajuster la largeur de chaque colonne en nombre de pixel, notez au passage que J-file ne demande pas la taille des champs au moment de la création, on sait seulement qu'il sont fixés à 500 maximum.
JFile
peut-être logé en flash-rom avec flash-pro ou flash-builder
(à partir de la version 2.10) tout comme les bases de données
qui passent ainsi en lecture seule.
JFile est livré avec des utilitaires de conversion CSV <=> JFile
(DOS et Windows) mais de nombreux développeurs tierces ont également
ajouté a cette panoplie des outils de conversions Access <=>
J-file pour PC, en voici une liste pour PC:
JFTrans http://home.ica.net/~shawkins/jftrans.htm JFTrans est un frontale de base de donnée JFile sur PC, parmis les caractéristiques: transfert automatique dans le format Access, chargement dans une grille editable avec modification possible et création de nouvelles tables, plus filtres, tries etc ...24.95$
JFEdit et JFEdit pro http://www.hugoland.de est une application windows pour editer/modifier des bases Jfile et Jfilepro.
JetFile Plus http://www.consult-us.cc/default_usa.htm cette macro Access permet de consulter modifier et réecrire les bases vers Jfile de façon transparente malheuresement je n'ai pas trouvé de mise à jour avec Jfilepro, c'est l'ancienne version de format jfile qui est utilisé.
Palm File Converter http://www.fmsync.com/pfc pour convertir, texte, csv, jfile et mobileDB entre-eux.
PocketReport http://www.palmlife.com/pocketreport/
P-refer: conversion en différents formats: http://www.geocities.com/ResearchTriangle/Lab/1059/pilot.html
Outils de conversion pour MAC :
Résumé des applis compatibles et convertisseurs http://www.land-j.com/jfileu.html
Je rajoute
que grâce au langage " basic " dédié au pilot, il est
possible d'écrire un frontal (une interface de commande) pour piloter
les tables, émuler la fonction relationnelle entre plusieurs tables,
réaliser des calculs sur les enregistrements, faire des tableaux
d'extractions, etc.... (cbaspad contient déjà les commandes
alors que pour le " C " il faut tout écrire) -
(prochainement sur la page developpement des exemples concrets
réalisés avec mes 10 doigts)
Voici pour preuve un extrait de la doc de cbaspad qui explique les
commandes:
op "dbrd", JBas:DBNAME",n
=> read the JFile database DBNAME - record# n into s$(). limit de 20
fields.
op "dbwr!", JBas:DBNAME",n
=> write the JFile database DBNAME - record# n from s$(). writes 20
fields.
HOTPAW (cbaspad pro)
http://www.hotpaw.com/rhn/hotpaw/
ou cbaspad standard:
http://www.nicholson.com/rhn/pilot.html
(gratuit j'usque la
version 0.97b4
)
Un dernier
point, le prix de J-File est passé de $19.95 à $24.95 ma note
pour ce soft et de : * * * * (/6)
II.2. HanDBase
http://www.handbase.com/
28/06/2000
HanDBase est
le second plus important programme de base de donnée sur Palm, comme
JFile vous pouvez créer, modifier une base au niveau de la structure
et aussi au niveau des données depuis le Palm mais encore obtenir
des etats . Les + par rapports à son prédeceseur sont sans
nul doute l'introduction du relationnel, de champs calculés, de champs
binaire (image par exemple), champs mémo (note), de fonction
de filtre/trie et affichage d'etat, de statistique on fond un programme (presque)
complet.
| Ecran d'accueil | Caractéristiques | Type de Champs |
|---|---|---|
![]() |
Pour
PalmPilot Perso: Nombre maxi de Databases: 30 Nombre maxi de champs par database: 30 Nombre maxi d'enregistrements par database: 65000 Taille maxi champ texte: 255 Taille maxi champ note: 2000 Nombre maxi de valeurs dans un Popup: 30 Nombre maxi de niveau de liens: 3 Databases Nombre maxi de DB popups dans un groupe: 2
Pour PalmPilot
Pro, Palm III, IIIx, IIIe, IIIc, IIIxe, V, Vx, VII, Workpad, et Symbol SPT
1500: |
|
Voici en
vrac les caractérisques supplémentaires du programme données
dans la documentation:
|
||
HanDBase
peut-être logé en flash-rom avec flash-pro, tout comme les bases
de données qui passent ainsi en lecture seule.
le nombre de convertisseur Palm <=> PC ou Mac est lui aussi honorable,
http://www.handbase.com/knowledgebase.html?read=68
la documentation fait état d'activeX OCX pour les programmeurs, de
DBX pour Access de programmes pour Mac, Linux et même un convertisseur
en SQL ...
La synchro avec Access est essentiellement lié à l'utilisation
des programmes Handjet
(http://www.consult-us.cc/html/handjet_us.htm)
et
DBX de nixdev
(http://www.nixdev.com/)
tout 2 payant (69$ et 18$)
Comme Handbase est "relationnel" j'en ai profiter pour creer une petite base
triple de façon à démontrer son efficacité: alors
soit les fameuses classiques bases: - de commande, - de client et - d'article.
Voilà la structure super simple
|
|
pgClient | pgCommande | pgArticle |
|---|---|---|---|
|
date(date) |
|||
|
(texte) client => |
<= clientcom (DBpopup) |
||
|
(DBpopup) articlecom => |
<= article (texte) |
||
|
telechargement => |
L'ajout ou
le retrait/modif des articles et clients peut se faire dans leur base respectives
mais aussi dans la base de commande au moment de la selection, malheureusement
la réplication ( la modification du champs dans la base commande ne
modifie pas la base d'origine) ne semble pas fonctionner dommage. Pourquoi
passer par une base exterieure plutôt que par un simple champ "popup":
parce que la base exterieure peut déjà exister sous un autre
format et être issue d'une importation via le desktop, mais surtout
qu'elle n'est pas limité en nombre d'enregistrements alors que le
popup oui : 60 maxi. De plus la base "esclave" peut servir à d'autres
bases comme par exemple une base fournisseur liée à la base
article et une base prospect liée à la base client. Bref les
fonctions primaires d'un SGBD sont là. Reste à vous d'en exploiter
les ficéles.
Beaucoup sur Mailing-liste et NewsGroupe reclament des programmes pour gerer
leur comptes, leur courses, ou les matchs sportif ... un temps soit peu de
patience et de refléxion peut facilement aboutir à un resultat
correct c'est d'ailleur ce que je me propose de faire pour vous ce week-end
et mettre ici les résultats de mes investigations dés la semaine
prochaine. L'économie est d'autant plus un argument car pour 19.95$
vous avez la porte ouverte à differentes applications, au lieu d'acheter
les 3 programmes su-cités - Le Palm à aussi cela comme attrait,
c'est qu'il est ouvert et ne reste pas figé à tout jamais,
se procurer quelques softs généric (basic, sgbd, doc ..) et
hop on se fabrique ses propres programme. Certe on met un "peu les mains
dans la graisse" alors attention de ne pas se salir la cravate sinon votre
femme va râler à moins que vous soyez une femme ... Le Palm
comme Pierre (citation plus bas) me rappel moi aussi les débuts kaotique
de l'informatique ZX81, AmstradCPC128, Vic20, Ti57, toute ma jeunesse...
ou avec un bout de listing recopier dans micro-systéme on se faisait
des heures de bidouille pas trés ergonomique ( peek(x) et poke(x,x)
) mais fonctionnel est ssttttaaaabbbbbllllleeeeee ! à l'inverse de
winx!xows. Vraiment le plaisir de créer ses softs et toujours un moment
passionnant.
Pour rappel,
où trouver le Basic du Palm compatible avec Jfile, Jfile-pro, List,
HanDBase, DB, MobileDB.
HOTPAW (cbaspad pro)
http://www.hotpaw.com/rhn/hotpaw/
ou cbaspad standard:
http://www.nicholson.com/rhn/pilot.html
(gratuit j'usque la
version 0.97b4
)
Un petit témoignage de mon ami Pierre Brothier (déjà contributeur d'un article sur Les formats des bases de données):
" Bonjour. Je
mets à profit mon week-end pour rédiger un autre petit mot
sur mes programmes favoris. Cette semaine, je vous propose la découverte
de HandDBase de DDH Software qui est un programme de gestion de bases de
données que j'ai découvert voici un mois. On ne peut certes
pas dire qu'il soit un vrai SGDB, mais il permet de créer des liens
entre différentes bases. Avant toute chose, je tiens à dire
que j'étais utilisateur du très bon J-File (dont on trouve
un essai dans ce remarquable site et auquel il faut vous reporter pour tout
ce qui manque ici...) depuis près de 2 ans. Le produit est certes
excellent, mais il me manquait les champs calculés et un peu de
relationnel pour mieux vivre dans ce monde de brutes..
HandDBase vous offre tout ce que vous offre J-File avec en plus :
des types de champs plus nombreux comme par exemple : heure, index, note, dessin que vous saisissez vous même avec un mini éditeur, champs liés, popup vers d'autres bases ... etc.
des champs liés à d'autres bases : vous pouvez par exemple créer un fichier "clients", le lier à un fichier "commandes" qui sera lui-même lié par un "popup" à un fichier "articles". Il n'y a pas de langage de programmation et, je le répète, ce n'est pas vraiment du relationnel, mais c'est mieux que sur mon TRS 80 à mes débuts...
Avec tout ça, vous avez droit à une application pour PC qui permet une manipulation aisée des bases (lecture / écriture) sur le desktop sans avoir à débourser quoi que ce soit, ce qui n'est pas le cas pour J-File. Si vous voulez un comparatif exaustif de tout ce qui se fait comme gestionnaires de BdD sur le Pilot, faites un tour à http://www.the-gadgeteer.com/databases-review.html "
Comme promis voilà une version de " je_gére_mon_budget_comme_un_grand.pdb " à charger sur votre Palm, en plus bien sûre d' HanDBase. Il est claire que cette base de donnée est un point de départ, que c'est modifiable, configurable à volonté voir même extensible avec cbasbad. Les dépenses sont bien sûre à précéder d'un signe " - ".
![]() |
![]() |
![]() |
|
téléchargement => |
II.3. MobileDB
http://www.mobilegeneration.com/products/mobiledb/
06/07/2000
Mobiledb est encore une alternative à JFile, mais de facon très
limitèe car la structure des champs est reduite au minimum à
savoir de type texte exclusivement. L'interet est somme toute réduit
à son plus bas niveau.
Parmis les fonctions de traitements proposè figure des fonctions de
trie (sur 3 champs maxi - alphanumerique - croissant ou decroissant ) et
de filtrage.
|
Ecran
d'accueil
|
Caractéristiques | Type de Champs |
|---|---|---|
![]() |
- 20
bases maxi - 20 champs par bases - 200 caracteres par champs.
|
Texte uniquement. |
|
Caractérisques
supplémentaires
Filtrage des enregistrements, et fonction de trie sur 3 niveaux. |
||
Le deplacement
entre les enregistrement est assure par les boutons du palm.
MobileDB est livrè avec un convertisseur CSV et HTML (table) et un
desktop PC peut aussi être telechargè pour creer et modifier
des tables.
II.4 ThinkDB V2.5 http://www.thinkingbytes.com (18/09/2001)
Il n'y aurait pas trop de surprise si je disais que c'est le meilleur dans sa catégorie !, si on reprend les caractéristiques des précedants programmes la majorité de celles-ci sont reprises: trie, filtre, calcul mais en plus la possibilité d'avoir un éditeur de formulaire pour la saisie des données en mode fiche- bref un must avec comme cerise sur le gateau un convertisseur-desktop pour PC en standart, pas de chance pour les Mac.
Consulter
ma page dédié à mes productions Thinkdb2
| Ecran d'accueil | Caractéristiques | Type de champs |
|---|---|---|
![]() |
Dernière
version distribuée: 2.5 Limites 100 databases avec 80 champs chacune. 29.95 $ mérité ! |
|
| Les plus:
Trie, Filtre, impression directe avec IrPrint, export vers bloc-note contructeur
de liste, constructeur de formulaire, écran de statistique pour les valeurs numérique (somme, maxi, mini, moyenne) protection des bases par mots de passe. Recherche locale ou globale. |
||
|
Voilà
la version sur ThinkDB,
les
catégories sont restée à |
mode liste | mode fiche |
![]() |
![]() |
|
| telecharger pg_budget.pdb |
(30/09/2k) Depuis la parution de cette série d'articles, les choses ont
un peu bougé puisque la version 2 en phase béta de thinkdb est
dispo en téléchargement, cette version à encore plus d'option
que la précédente, reste à savoir si le desktop lui aussi
va s'amméliorer. Pour l'heure vous pouvez dejà tester ce programme
ici sur http://www.egroups.fr/group/ThinkDB
dans la section " fichier "
Je retourne le tester sur mon Palm (beaucoup de nouveaux champs), je lis la
doc et je poursuis l'article ici dans la foulée.
20/12/2000: ThinkDB 2.0
Il est enfin sortit en version final (aprés plusieurs mois de version
beta que je l'utilisais mais bugé) en grosse nouveauté déjà
marketing: la version Palm est GRATUITE, mais ce qui devient payant est la partie
que l'on met sur le PC
(1) soit pour creer, modifier ses bases et importer/exporter vers d'autres gestionnaire
de bases de données (Access, Foxpro, Oracle ... ou à defaut Excel
(CSV) : ThinkDB desktop,
(2) soit synchroniser directement avec ACCESS et là c'est ThinkDB conduit
qu'il faut. Les 2 programmes sont séparé mais peuvent se completer
voir utiliser tout les 2.
pour le telecharger:
ThinkDB 2 pour Palm : http://www.thinkingbytes.com/
(1) ThinkDB 2 Desktop PC : http://www.thinkingbytes.com/thinkdb/desktop.html
(2) ThinkDB 2 conduit : http://www.thinkingbytes.com/thinkdb/dbsync.html
ThinkDB 2 Desktop et conduit : Complements d'installation microsoft jet : http://www.thinkingbytes.com/product_installation.htm
Consulter ma page dédié à mes productions Thinkdb2
Depuis le 12/06/2001, il est possible d'imprimer directement depuis ThinkDB
vers une imprimante Irda avec PrintBoy
La dernière
version que je posséde actuellement est la ThinkDB 2.04.
Thinkinbytes a introduit la possibilité d'ajouter des modules plug'in
au programme afin d'etendre les fonctions comme l'acquisition de signaux GPS,
l'export memo, l'export todo etc etc voir http://www.pdabytes.com/
qui propose un bundle de 21 plug'in
Ce qu'il y a de neuf sur le
thinkDB 2.5 pour Palm:
La version 2,5 de ThinkDB apporte un nouveau type de champs: "expressions avançées". Les expressions avançées supporte non seulement des parenthèses et priorité d'opérateur, mais fonctionne également comme Sqr, rond, signe, date et temps, texte et fonctions conditionnelles comme SI et SEL. Color est également supporté. Le constructeur avançé d'expression permet l'édition complète. L'expression actuelle de types de champs et les expressions conditionnelles continueront à être supportées pour la compatibilité en arrière.
Le support des cartes d'extension
m émoire. Les utilisateurs peuvent déplacer et copier des bases
de données de thinkDB à et de la carte en utilisant le thinkDB.
Cette fonctionnalité est supportée de la série de la Palm
m500, du Handera 330 et du Sony Clies.
II.6 DB (Pilot-DB) http://pilot-db.sourceforge.net/ 14/09/2001
DB ou Pilot-DB (le véritable
nom du projet) est la seule SGDB avec List a être Open-Source, elle est donc
gratuite sans aucune limitation. Elle est toujours en cours de développement
mais les versions stables sont entièrement fonctionnelles. La dernière version
est actuellement la 0.3.2, la prochaine version 0.3.3 devrait voir le jour d'ici
décembre.
Comme ses concurrentes elle permet de créer ses propres bases en choisissant
le type des différents champs, de faire des tris et filtres des enregistrements.
Le plus: elle intègre la possibilité d'ajouter des plugins comme l'utilisation
des bases MobileDB ou (certaines de) JFile. D'autres devraient voir le jour.
| Ecran d'accueil | Caractéristiques | Type de Champs |
|---|---|---|
![]() |
Pour PalmPilot
Pro, Palm III, IIIx, IIIe, IIIc, IIIxe, V, Vx, VII, Workpad, et Symbol SPT
1500: Nombre maxi de Databases: plus de 32 Nombre maxi de champs par database: 32 Nombre maxi d'enregistrements par database: 65000 Nombre maxi de vue rapide des enregistrements: > 10 Taille maxi champ texte: 255 Taille maxi champ note: > 3000 Nombre maxi de champ note: 1 Nombre maxi de valeurs dans un Popup: (prochaine version) 30 Nombre maxi de niveau de liens: (prochaine version) 32 databases |
|
Voici en vrac
les caractérisques supplémentaires du programme données
dans la documentation:
|
||
En gros Pilot-DB n'est pas
encore au niveau de HandBase ou JFile sur certains points, mais c'est une application
totalement gratuite et l'équipe est motivé pour venir titiller les plus grands.
|
25/09/2001:
Création d'une liste francophone de ThinkDB par Eric : http://fr.groups.yahoo.com/group/thinkdb-fr
pour vous inscrire et discuter exclusivement des bases de données
sur Palm.
|
dossier à suivre .../...
|
La derniere
version ?
|
goto Observatoire ! | ||
|
|
|||