OVH Cloud OVH Cloud

Téléchargement de fichiers

17 réponses
Avatar
KiWin
Bonsoir à tous, et plus particulierement à JCB et à ceux que j'ai
rencontré ailleurs.
(j'aurai bien cité scraper mais il n'est pas là...)

Avant de me lancer ds un projet, j'aimerais savoir s'il y a moyen sur
une base JS+VBS (voir 100 % VB (sans S)) de télécharger un fichier pour
le placer ds un dossier donné ?

Merci d'avance.

KiWin

--
Attention ! Le gars qui vient de vous écrire
est atteint de complication aigüe !

10 réponses

1 2
Avatar
KiWin
Re,

Je précise que je pense à un téléchargement "propriétaire" ou
"autogéré", si vous voyez ce que je veux dire...

KiWin

--
Attention ! Le gars qui vient de vous écrire
est atteint de complication aigüe !
Avatar
ng
Salut,

En VB tu peux utiliser les sockets et implanter le protocole HTTP. Sinon tu
pourrais aussi utiliser l'API URDownloadToFile() plus pratique et simple à
mettre en place.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/




Bonsoir à tous, et plus particulierement à JCB et à ceux que j'ai
rencontré ailleurs.
(j'aurai bien cité scraper mais il n'est pas là...)

Avant de me lancer ds un projet, j'aimerais savoir s'il y a moyen sur
une base JS+VBS (voir 100 % VB (sans S)) de télécharger un fichier
pour le placer ds un dossier donné ?

Merci d'avance.

KiWin


Avatar
Jean-Claude BELLAMY
Dans le message news:% ,
ng s'est ainsi exprimé:
[...]
Bonsoir à tous, et plus particulierement à JCB et à ceux que j'ai
rencontré ailleurs.
(j'aurai bien cité scraper mais il n'est pas là...)

Avant de me lancer ds un projet, j'aimerais savoir s'il y a moyen sur
une base JS+VBS (voir 100 % VB (sans S)) de télécharger un fichier
pour le placer ds un dossier donné ?

KiWin
[...]

En VB tu peux utiliser les sockets et implanter le protocole HTTP.
Sinon tu pourrais aussi utiliser l'API URDownloadToFile() plus
pratique et simple à mettre en place.



C'est justement la fonction que j'utilise dans mon Contrôle ActiveX
"jcb.ocx" !
(cité dans un de mes précédents messages)


Private Declare Function URLDownloadToFile Lib "Urlmon" Alias
"URLDownloadToFileA" ( _
ByVal pCaller As Long, ByVal szURL As String, ByVal szfilename As
String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Public Function GetWebFile(ByVal URL As String, ByVal filename As String) As
Boolean
Dim result As Long
result = URLDownloadToFile(0, URL, filename, 0, 0)
GetWebFile = False
If result = 0 Then GetWebFile = True
End Function





--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
http://www.bellamyjc.org *



Avatar
ng
Salut,

Ok!

Petite optimisation au passage :

Private Declare Function URLDownloadToFile _
Lib "urlmon" _
Alias "URLDownloadToFileA" ( _
ByVal pCaller As Long, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long _
) As Long

Public Function GetWebFile(ByVal strURL As String, ByVal strFileName As
String) As Boolean
GetWebFile = (URLDownloadToFile(0, strURL, strFileName, 0, 0) = 0)
End Function



--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/




Dans le message news:% ,
ng s'est ainsi exprimé:
[...]
Bonsoir à tous, et plus particulierement à JCB et à ceux que j'ai
rencontré ailleurs.
(j'aurai bien cité scraper mais il n'est pas là...)

Avant de me lancer ds un projet, j'aimerais savoir s'il y a moyen
sur une base JS+VBS (voir 100 % VB (sans S)) de télécharger un
fichier pour le placer ds un dossier donné ?

KiWin
[...]

En VB tu peux utiliser les sockets et implanter le protocole HTTP.
Sinon tu pourrais aussi utiliser l'API URDownloadToFile() plus
pratique et simple à mettre en place.



C'est justement la fonction que j'utilise dans mon Contrôle ActiveX
"jcb.ocx" !
(cité dans un de mes précédents messages)


Private Declare Function URLDownloadToFile Lib "Urlmon" Alias
"URLDownloadToFileA" ( _
ByVal pCaller As Long, ByVal szURL As String, ByVal szfilename As
String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Public Function GetWebFile(ByVal URL As String, ByVal filename As
String) As Boolean
Dim result As Long
result = URLDownloadToFile(0, URL, filename, 0, 0)
GetWebFile = False
If result = 0 Then GetWebFile = True
End Function




Avatar
KiWin
Bonsoir,

C'est donc possible. Merci à tous les deux.

KiWin

--
Attention ! Le gars qui vient de vous répondre
est atteint de complication aigüe !
Avatar
Jacquouille
Bonjour,
Humour ON/
Un de ces matins, on va apprendre que jcb.ocx permet de
lancer la machine à café, à laver, à faire le ménage.
Humour OFF/
En tous cas, j'utilise jcb.ocx pour changer les images
de mon bureau et c'est génial (sous win xp).
J'ai un peu (beaucoup) changé le script d'appel pour
"automatiser" l'installation du dossier d'images.
A chaque démarrage du pc, j'ai une belle image .jpg
différente de la veille.
Il serait facile de faire pareil avec des images .bmp
car ... jcb.ocx prend en charge ce format.
Ce serait intéressant de savoir comment est organisé
l'ocx et connaitre d'un coup toutes ses entrées.
--
Jacques dit JACQUOUILLE
Avatar
ng
Salut,

Autre question juste comme ça, pourquoi utiliser un controle ocx et non
simplement une DLL COM ??

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/




Dans le message news:% ,
ng s'est ainsi exprimé:
[...]
Bonsoir à tous, et plus particulierement à JCB et à ceux que j'ai
rencontré ailleurs.
(j'aurai bien cité scraper mais il n'est pas là...)

Avant de me lancer ds un projet, j'aimerais savoir s'il y a moyen
sur une base JS+VBS (voir 100 % VB (sans S)) de télécharger un
fichier pour le placer ds un dossier donné ?

KiWin
[...]

En VB tu peux utiliser les sockets et implanter le protocole HTTP.
Sinon tu pourrais aussi utiliser l'API URDownloadToFile() plus
pratique et simple à mettre en place.



C'est justement la fonction que j'utilise dans mon Contrôle ActiveX
"jcb.ocx" !
(cité dans un de mes précédents messages)


Private Declare Function URLDownloadToFile Lib "Urlmon" Alias
"URLDownloadToFileA" ( _
ByVal pCaller As Long, ByVal szURL As String, ByVal szfilename As
String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Public Function GetWebFile(ByVal URL As String, ByVal filename As
String) As Boolean
Dim result As Long
result = URLDownloadToFile(0, URL, filename, 0, 0)
GetWebFile = False
If result = 0 Then GetWebFile = True
End Function




Avatar
Jean-Claude BELLAMY
Dans le message news:% ,
ng s'est ainsi exprimé:

Salut,

Autre question juste comme ça, pourquoi utiliser un controle ocx et
non simplement une DLL COM ??
???

C'est la même chose !
Un contrôle ActiveX avec un nom "toto.ocx" est un fichier dll (on pourrait
d'ailleurs lui donner l'extension .dll) répondant au "standard" COM.

"Shell32.dll" et "jcb.ocx", c'est la même famille ! ;+)

--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
http://www.bellamyjc.org *


Avatar
ng
Salut,

Bah pas tout à fait, un ocx est quand même censé implanter une interface (un
ou plusieurs controles). Alors qu'une DLL COM ne contient que des classes.
Mais tu as fait un ocx peut être parce que tu utilises la version gratuite
de VB5?

Et Shell32.dll c'est encore un peu différent, c'est nom seulement une DLL
COM mais implantant aussi des fonctions APIs classiques (ShellExecute,
SHFormatDrive, ExtratcIcon, SHCreateDirectoryEx, SHBrowseForFolder,
SHGetDiskFreeSpace, etc etc...) (dll de l'api windows donc)

Fin voila c'est juste que ca m'étonnait d'utiliser un OCX pour seulement des
classes & méthodes... C'est tout

Nicolas.


Dans le message news:% ,
ng s'est ainsi exprimé:

Salut,

Autre question juste comme ça, pourquoi utiliser un controle ocx et
non simplement une DLL COM ??
???

C'est la même chose !
Un contrôle ActiveX avec un nom "toto.ocx" est un fichier dll (on
pourrait d'ailleurs lui donner l'extension .dll) répondant au
"standard" COM.

"Shell32.dll" et "jcb.ocx", c'est la même famille ! ;+)



begin 666 wink.gif
M1TE&.#EA#P`/`+,``````+^_O___````````````````````````````````
M`````````````````````"'Y! $```$`+ `````/`````0T,$@):ITX5,'Y
MQ4 G>E,XC@`EF.MJIJSEQ>PI;C9:YZYGOQK?C12<R8C%7P;7^60TEA0F`@`[
`
end


Avatar
Jean-Claude BELLAMY
Dans le message news:40e3c637$0$10286$ ,
Jacquouille s'est ainsi exprimé:

Bonjour,
Humour ON/
Un de ces matins, on va apprendre que jcb.ocx permet de
lancer la machine à café, à laver, à faire le ménage.
Humour OFF/
:+)))))))) !


En tous cas, j'utilise jcb.ocx pour changer les images
de mon bureau et c'est génial (sous win xp).
J'ai un peu (beaucoup) changé le script d'appel pour
"automatiser" l'installation du dossier d'images.
A chaque démarrage du pc, j'ai une belle image .jpg
différente de la veille.
Il serait facile de faire pareil avec des images .bmp
car ... jcb.ocx prend en charge ce format.
Ce serait intéressant de savoir comment est organisé
l'ocx et connaitre d'un coup toutes ses entrées.


(presque) tous les jours je me dis que je devrais le faire, mais j'ai
toujours un truc à faire plus urgent ! ;+)

En vrac et succintement, en attendant une meilleure présentation plus
détaillée, voici la liste des fonctions publiques disponibles dans "jcb.ocx"



Function GetMsgFromErr(ByVal Err As Long) As String
Donne la chaine associée à un n° d'erreur d'API Windows

Function LoadHive(ByVal strKeyName As String, ByVal hive As String) As
Boolean
Charge dans la BDR (HKU) un fichier ruche de compte utilisateur

Function UnloadHive(ByVal strKeyName As String) As Boolean
Décharge une ruche précédemment chargée

Function OpenFile(ByVal initfile As String, ByVal Filter As String, _
ByVal defExt As String, ByVal Title As String) As String
Ouvre la boite de dialogue standard d'ouverture de fichier

Function msgBox3( _
Optional ByVal Info As String = "", _
Optional ByVal Prompt As String = "", _
Optional ByVal Title As String = "", _
Optional ByVal button1 As String = "Oui", _
Optional ByVal button2 As String = "Non", _
Optional ByVal button3 As String = "Annuler") As Integer
Ouvre une boite de dialogue à 3 boutons avec le libellé que
l'on veut sur les boutons, et une zone texte d'information
supplémentaire.

Ensemble de fonctions de gestion de boites de dialogue NON modales :
--------------------------------------------------------------------
Sub ShowDialog(Optional ByVal caption As String = "")
Affiche une boite non modale

Sub ShowProgressDialog(Optional ByVal caption As String = "")
Affiche une boite non modale avec barre de progression

Sub SetProgress(ByVal percent As Long)
Définit le pourcentage affiché dans la barre de progression

Sub WriteDialog(ByVal text As String)
Modifie le libellé dans la boite non modale

Sub SetCaption(ByVal caption As String)
Modifie le titre de la boite non modale

Sub CloseDialog()
Ferme la boite non modale

Sub FireEvent()
Crée un événement "WakeUp"

Sub FireQuitEvent()
Crée un événement "QuitNow"

Sub HandleEvent()
Dépile les messages Windows


Ces fonctions doivent être associée à des fonctions événements dans le
script qui les appelle :
Quand on charge jcb.ocx par
set tools= wscript.CreateObject("jcb.tools","event_")
le 2ème paramètre (ici "event_") est le préfixe qui sera utilisé dans le nom
de 2 fonctions "WakeUp" et "QuitNow"
Exemple (tiré de "IconFolder.vbs") :

dim quit
quitúlse
...
sub Event_WakeUp
if quit then
shell.Popup "Recherche interrompue...", 1,"Recherche d'icônes",16
tools.CloseDialog
exit sub
end if
...
tools.SetCaption("Ecriture de la liste d'icônes")
...
tools.HandleEvent
...
For i = 0 To n
tools.WriteDialog "Fichier " & Name(i)
tools.SetProgress Fix(i * 100/n)
tools.HandleEvent
...
next
tools.CloseDialog
end sub

sub event_QuitNow
' Liaison avec la boite de progression non modale
quit = true
end sub

---------------------------------------

Function Version() As String
Donne la version de Windows

Function PlatFormID() As Long
Donne l'ID de plate-forme
0 : WIn32S
1 : WIn 9X/ME
2 : Win NT/W2K/XP/W2K3

Function GetWinVer() As String
Identique à la précédente, mais sous forme de chaine

Function GetSysDir() As String
Retourne le dossier "System" de Windows
(%windir%system sous Win9x/ME, %systemroot%system32 sous NT)

Function GetMetrics(ByVal Index As Long) As Long
Donne la valeur d'un paramètre "géométrique" du système
(nbre de pixels X ou Y, nbre de boutons de la souris, hauteur/largeur
des icônes, hauteur des menus, ...)

Sub RefreshWindowMetrics()
Rafraichit l'affichage de l'écran après modif d'un paramètre


Function RegEnum(ByVal key As String) As Collection
Énumère les sous-clefs d'une clef donnée

Function RegRead(ByVal key As String, Optional ByVal ValueName As String
="", Optional ValueType As Variant = "REG_SZ") As Variant
Retourne la valeur d'une clef, mais à la différence de RegRead de
l'objet Shell, n'est pas limité dans les types, en particulier les
REG_BINARY (dans ce cas, retour d'une chaine hexadécimale avec tous les
octets)

Function RegWrite(ByVal key As String, ByVal ParamValueName As String, ByVal
storage As String, Optional ByVal vartype As String = "REG_SZ") As Boolean
Même remarques (permet d'écrire une REG_BINARY complète, et non pas
limitée à 1 seul octet)

Function KeyExists(ByVal key As String) As Boolean
teste l'existence d'une clef
(remplace l'ouverture de la clef avec shell.regread + test de
Err.number)

Function Search(ByVal key As String, ByVal searchtext As String, Optional
ByVal mode As Long = 7) As String
Recherche une clef, entrée ou valeur, à partir d'une chaien partielle
(ou non)
mode = 1 -> recherche de clef
mode = 2 -> recherche d'entrée
mode = 4 -> recherche de valeur
(on peut combiner : mode=1+2 =3 -> recherche de clef et/ou d'entrée)


Fonctions icônes
----------------
Public Function GetIconNumber(ByVal name As String) As Long
Retourne le nombre d'icônes contenues dans un fichier

Public Function PickIcon(ByVal path As String, Optional Index As Long = 0)
As String
Affiche la boite de dialogue de sélection d'icône dans un fichier
et retourne le nom du fichier suivi d'une virgule et de l'index
de l'icône choisie
(pratique pour créer des raccourcis)

Function LoadIcon(ByVal filename As String, ByVal Index As Integer) As
Integer
Charge en mémoire une icône donnée d'un fichier

Sub IconToClip()
Copie dans le presse-papier l'icône chargée par LoadIcon

Sub IconToFile(ByVal name As String)
Enregistre dans un fichier l'icône chargée par LoadIcon

------------------
Sub RefreshDesktop()
Rafraichit l'affichage du bureau

Sub RefreshExplorer()
Rafraichit l'affichage de l'explorateur de Windows

Function SetDesktop(ByVal filename As String)
Définit un fichier image comme fond d'écran

Function GetLongname(ByVal sShortName As String) As String
Retourne le nom long d'un fichier à partir de son nom court
(quand on sélectionne un fichier dans l'explorateur, pour le
transmettre à une appli quelconque, c'est le nom court qui
est transmis par l'explorateur)


Function GetWebFile(ByVal URL As String, ByVal filename As String) As
Boolean
Télécharge un fichier à partir d'un URL


Function GetTextFileType(ByVal filename As String) As Integer
Retourne le type d'un fichier texte :
0 : ASCII/ANSI
1 : UNICODE


Function GetFileOwner(ByVal Computer As String, ByVal filename As String) As
String
Retourne le nom du propriétaire d'un fichier sur un ordinateur donné

--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
http://www.bellamyjc.org *



begin 666 rofl.gif
M1TE&.#EA)P`/`)$"`````/__`````````"'_"TY%5%-#05!%,BXP`P$````A
M^00)! `"`"P`````)P`/```"1I0-F<?M_U*8<&+!:"YL])``ANYEB-
M:"9VOE"L<S1M7/CWL[Ss @ZE'(A81)45R&6R27-!&+U>-()79D+/;* ``
M(?D$"00``@`L`````"<`#P```D>4#YG'[?]2F'/!BP6HFP:0A4Q'D94HFI_W
MH9E:DJ +P5XWTP[.5J>^X_1*P.!',<P5$1R%I+5LR)S$J'3XLTI5%FW$Z644
M```A^00)! `"`"P`````)P`/```"1I0OH(KM#XT*E+*((["[!I"%2%>1EBB:
MG_>AF<J6KA:7'=[WB>7.#]7Z.H+!%!'(F'E_R0%HPD<1CUH=J2Y9G;1[
M* ``(?D$"00``@`L`````"<`#P```D>4;Z"*[03")2RB..TV^:/=)4(@*!H
M54%I8ANJKJW&Q8HW/^]MR[FSXXUOQ!G$2,6#T&A<ID8+3HLJ#&)LS:<JZH6
M./T:"@`A^00)! `"`"P`````)P`/```"191_H(KM#XT*E+*((ZB3YX]LE34"
M("B6Y9F)Z>BQD L'G2D_[LO9N6[IJ'"_4%"X*C9V2)]RR5DDG::A:KC7;#9
M!5=0```A^00)! `"`"P`````)P`/```"192/H(KM#XT*E+*((+5]
M(5B6%GEFJ3IVK6;!(S!#+^?)N?.RI7[ FM!$%'5ZK&1#Q40Z#U 8;@H47K&/
MQ65:```A^00)! `"`"P`````)P`/```"1)2/`KOI#]T*E+:((ZC<YH]LEAB(
M``B:I%6BF;!''G2C]W->L)C^7Z'H#!'#(TZ&V2R6)D<GY)>E+J+7;!9
M!K8``"'Y! D$``(`+ `````G`````)%E(&N^D/ $@
M*#)=8)Y82I:LJXVBW-+2V)&Y'N*M/, $;$@L!EF]I/)P:Z>QEZ*^HB-L!K&
M#U@``"'Y! D$``(`+ `````G`````)$E('N^D/$@
M*#)B99Y82I9!ZS[PRLXU=)?I;AMU2D"),,<J&G&SI#+!G#B?H>&4&HK2L!+5
MLP``(?D$"00``@`L`````"<`#P```D:4CPB[Z0_="I2VB".HW.:O5,#)
M= %@9NBDKJUFD=W&SL;X_IN4<%RO] J5BHF;"(.47E@!I-0XXKYK$:E%^UN
MI"P``"'Y! D$``(`+ `````G`````)'E()N^D/(P8`
M"(ID=Z*8.G6>"VV,;)IT;<:LOI/T9+%6,#2LE&9'Y$_9%"J7P*@39[2&J!?M
%0``(?D$"00``@`L`````"<`#P```D*4CRG K ^C8:%6)_,#ME-3E9#
M?6'&!61CGE#*>JV;P'('T-L]SKK(4_E^*9RJF/O5/,6A$MET/H-)Y2:*L496
MN@(`(?D$"00``@`L`````"<`#P```D>4CVG K _C`J%6)_.CM@>@A8O5,*2H
M<65SH9*ZLI+4?$ZTPIMWK"A!/T10V"$6#[;+QZE<CCY!4T[*1/JPQB.5
M6RO1"@`A^00)! `"`"P`````)P`/```"1Y2/><"L#Z-AH58GP.V7PU.5D-]
M8<8%9&.>4#JNK9MP,6J]*9Z:@G8*5*EV$PHN/F(R%I'J6LB;M"@=/J$6:]3
M)88[)+D*`"'Y! D$``(`+ `````G`````)%E(^)P*P/HV&A5B?S`[9?#4Y6
M0WUAQHVD>4*IMP9 ZK>E<ZTPKTPNSOD?+!@@G@#&@4^I&XI[#BA1^GK2142
M,5D>Z50``"'Y! D$``(`+ `````G`````)&E(^9P*P/HV&A5B?S`[9?#4Y6
@7J]*;:N. KN# .J4?$)$J$6='P7#(;#Y[S2 19JPN
MH!CMAA0J```A^00)! `"`"P`````)P`/```"1Y2/J<"L#Z-AH58GP.W!H
MXM1Y7SAF7]F J;1:)H>^"VBQM+WA.=BJZGF,<U1,1^P61B9=PYE;+<:?J4
M&;&+)8;;;8@*`"'Y! D$``(`+ `````G`````)'E(^I`MT+(VRAUB?S`M=9
MH(4&]WF7J)$E%8!HQ*D=Z[Y*;*VQO76YL^,E9#]/33CZK4Y(A.I).389Q19)
M.B7^IALBAMMU: H`(?D$"00``@`L`````"<`#P```D64CZD&W0LC;*'6)_,"
MME-,E?'?6'&E:1Y3J-'!4#KOE8TXKJR66N0ZAX/E90)%;0
M*)$4W1 Q6:TC4P``(?D$"00``@`L`````"<`#P```D>4CZD'W0LC;*'6)_,"
ME]L`:*+A>=U:N59II)[Q18%TK7.:B>X, Z,R #Q/+EC(]93+
MZ%&&JUH9SM!VY04```A^00)! `"`"P`````)P`/```"292/J0C="R-LH=8G
MP*6=@T:W&650*B-@;IR)QJQ97O!T4ZM:VX<SMZ1BKF2,X3,B 'F%29#KN
MG@?5T4I5XG2K;$^&7XÐ(`(?D$"00``@`L`````"<`#P```D>4CZD)W0LC
M;*'6)_,"-M"KA09GD1T@:J;<H[7"X1ZIVR%Z,H=+>/ Y@$A&
M:WELCD[&J%,<R6MX04```A^00)! `"`"P`````)P`/```"1Y2/J0K M"R-LH=8GP(VT*N%!F>1'2!JIM>!:41^+8>^&]M>M'VO)57C(7P_H#!!]#A<
MQ/*DV1T69="I(,K%.'X;+@"X*`"'Y! D$``(`+ `````G`````)%E(^I
M"]T+(VRAUB<SLQ=<#1H>-Y:A5HY<`)Q2N:ZMN[&QS=+U[>1ZHI+U9K]#T.(P
M%1&II')I1":14.#M4P4>,5F%4U$``"'Y! D(``(`+ `````G`````)'E(^I
M*^#.HDPN6 NGIK?C#0*8.'[@))(I%@"G1'JR^RZQW-$UAWOZ?D@]AH6D$<<
MFH[!$7')-,2>T&BC9[12;JV?%D%,% ``(?D$"00``@`L`````"<`#P```D64
MCZD+W0LC;*'6)S.S%UP-&AXWEJ%6CEP`G%*YKJV[L;'-TO7MY'JBDO5FOT/0
MXC 5$:FD<FE$)I%0X.U3!1XQ685340``(?D$"00``@`L`````"<`#P```D>4
MCZD*W0LC;*'6)_,"-M"KA09GD1T@:J;$?BV'OAO;7K1]KR55XR%/Z P
M0?0X7,?#RO$)-D=%F70J2#*Q3A^&RX N"@`A^00)! `"`"P`````)P`/```"
M1Y2/J0G="R-LH=8GP(VT*N%!F>1'2!JIM>!:;2VK/=.5SRCM<+A'JG;(7HR
MATMX#F 2$9K>6R.3L:H5."S7K$QS):WA!0``"'Y! D$``(`+ `````G```
M``))E(^I"-T+(VRAUB?S`I9V#1K<995 J(V!NG(G&K%E>'3Q3JUK;AS.WKQ
M&*N9(SA,R( >85)D.NZ>!]712E7B=*ML3X;Q?AV1`@`A^00)! `"`"P`````
M)P`/```"1Y2/J0?="R-LH=8GP*7VP!HHN%YWS5JY5FFDGF"K;O%%@72M?PY
MJ)[@P#HS( /$N6,B*&CR"3UE,OH48:K6AG.T';SE!0``"'Y! D$``(`+ ``
M```G`````)%E(^I!MT+(VRAUB?S`K9?#3)7QWUAQI6D>4ZC1P5 Z[Y6/-.*
MZLEEKD.H>#Y64"3KX8Z)E-+(%/Q6T"B1%-T0,5FM(U,``"'Y! D$``(`+ ``
M```G`````)'E(^I`MT+(VRAUB?S`M=9H(4&]WF7J)$E%8!HQ*D=Z[Y*;*VQ
MO76YL^,E9#]/33CZK4Y(A.I).389Q19).B7^IALBAMMU: H`(?D$"00``@`L
M`````"<`#P```D>4CZG K ^C8:%6)_,#M_$`:.+4>5X9E_9@*FT6B:'
ML;2]X3G8JO$.IYC'-43$?L%D8F7<.96RW&GZE!FQBR6&VVV("@`A^00)! `"
M`"P`````)P`/```"1I2/F<"L#Z-AH58GP.V7PU.5D-]8<8%9&.>4#JNK;MX
M%ZO2FVKC@*[@P#JE'Q"1*A%G1%PR&P^>T@$6:L+J 8[884*@``(?D$"00`
M`@`L`````"<`#P```D64CXG K ^C8:%6)_,#ME-3E9#?6'&C:1Y0JFW!D#K
MRMZ5SK3"O3"[.^1L&""> ,:!3ZD;BGL.*%'Z>M)%1(Q61[I5 ``(?D$"00`
M`@`L`````"<`#P```D>4CWG K ^C8:%6)_,#ME-3E9#?6'&!61CGE ZKJV;
M</#%JO2F>FH)V"E2I=A,*+CYB,A:1ZEK(F[0H'3ZA%FO4R6&.R2Y"@`A^00)
M! `"`"P`````)P`/```"1Y2/:<"L#^,"H58GZ.V!Z"%B]4PI*AQ97.ADKJR
MGPM13K3"GRW>L+Q"$$_1%#8(18/MLO'J5R./D%33LI$^K#&(Y5;*]$*`"'Y
M! D$``(`+ `````G`````)"E(IP*P/HV&A5B?S`[9?#
MRGJMF!R!]#;/<ZZR%/Y?BF<JIC[U3S%H1+9=#Z#2>4FBK%&5KH"`"'Y! D$
M``(`+ `````G`````)'E()N^D/(P8`"(ID=Z*8.G6>
M"VV,;)IT;<:LOI/T9+%6,#2LE&9'Y$_9%"J7P*@39[2&J!?%0``(?D$
M"00``@`L`````"<`#P```D:4CPB[Z0_="I2VB".HW.:O5,#)= %@9NBD
MKJUFD=W&SL;X_IN4<%RO] J5BHF;"(.47E@!I-0XXKYK$:E%^UNI"P``"'Y
M! D$``(`+ `````G`````)$E('N^D/$@*#)B99Y8
M2I9!ZS[PRLXU=)?I;AMU2D"),,<J&G&SI#+!G#B?H>&4&HK2L!+5LP``(?D$
M"00``@`L`````"<`#P```D64CP:[Z0_="I2VB".HW.:/;-;$`2 H,*
MEJRKC:+<TM+8D;D>XJTP 1L2"P&6;VDG!KSI[&7HKZB(VP&L8/6 ``(?D$
M"00``@`L`````"<`#P```D24CP*[Z0_="I2VB".HW.:/;)88B `(FJ15HIFZ
MEIX+P1QYTH_=S7K"8_E^AZ P1PR-.AMDLEB9')^27I2ZBUVP60:V```A^00)
M! `"`"P`````)P`/```"192/H(KM#XT*E+*((+5](5B6%GEFJ3IV
MK6;!(S!#+^?)N?.RI7[ FM!$%'5ZK&1#Q40Z#U 8;@H47K&/Q65:```A^00)
M! `"`"P`````)P`/```"191_H(KM#XT*E+*((ZB3YX]LE34"("B6Y9F)Z>BQ
MD L'G2D_[LO9N6[IJ'"_4%"X*C9V2)]RR5DDG::A:KC7;#9!5=0```A^00)
M! `"`"P`````)P`/```"1Y1OH(KM#Q,(E+*(X[3;YH]TE0B H&A506EB&ZJN
MK<;%BC<_[VW+N;/CC7R_$&<1(Q8/0:%,8FS-IRKJA8X_1H*`"'Y
M! D$``(`+ `````G`````)&E"^@BNT/+L&D(5(5Y&6*)J?]Z&9
MRI:N%I<=.#]WO>)Y<X/U?$4$<B8>7_) 6C"1SQ&/6AVI+EF=M'LH```A
M^00)! `"`"P`````)P`/```"1Y0/F<?M_U*8<&+!:B;!I"%3$>1E2B:G_>A
MF5J2H O!7C?3#LY6I[[C]$K X$<QS!41'(6DM6S(G,2H=/BS2E46;<3I910`
M`"'Y! 4$``(`+ `````G`````)&E V9Q^W_4IASP8L%H+SFSVR!5(D`"&[F
M6(UH)G;R^4*QS-&U<^/>SO-U=,"#J4<B%A$E17(9;))<T$ðL]LH
=```A^00%" `"`"P"``@`"P`"```"!82/$(E1`#L`
`
end

1 2