diff --git a/THING/THING.127/icons.inf b/THING/THING.127/icons.inf index 13d7e98..96a55ef 100644 --- a/THING/THING.127/icons.inf +++ b/THING/THING.127/icons.inf @@ -1,5 +1,5 @@ # Icon assignments for Thing (ICONS.INF) -# Created by ThingIcn on 11.09.2019, 15:09:02 +# Created by ThingIcn on 23.11.2022, 15:50:22 # # (The comments are, of course, not held in memory -- # so there is no harm keeping them in this file) @@ -81,7 +81,7 @@ IFIL "APP 68KEMU" 68KEMU.PRG IFIL "APP CONS" TOSWIN2.APP IFIL "APP RSM" RSM.APP IFIL "APP KEYEDIT" KEYEDIT.APP -IFIL "ZIP DIR/FILE" LZIP.APP +IFIL "ZIP DIR/FILE" LATZIP.APP IFLD "SYS" SYS IFLD "VAR" VAR IFLD "DHCP" DHCP diff --git a/THING/THING.127/thing.inf b/THING/THING.127/thing.inf index cb397a9..4f1d28a 100644 --- a/THING/THING.127/thing.inf +++ b/THING/THING.127/thing.inf @@ -1,8 +1,8 @@ # Thing general configuration (thing.inf) -# 01-10-2022 / 18:43 +# 24-11-2022 / 15:57 # VERS 127 -CONF 1 1 0 0 1 1 1 4 1 0 1 0 1 0 0 1 1 0 0 1 1 0 1 0 1 1 1 1 0 0 +CONF 1 1 0 0 1 1 1 4 1 1 1 0 1 0 0 1 1 0 0 1 1 0 1 0 1 1 1 1 0 0 CNFG 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 CBUF 4000 US3D 1 @@ -46,9 +46,9 @@ APPL "mxplay_cf.app" C:\tools\mxplay\mxplay_cf.app "" 1 "*.mp3" "" "" 0 1 0 0 0 AOPT 0 0 0 0 0 0 0 0 0 0 APPL "NetSurf" C:\tools\netsurf3\nsv4e.app "" 1 "*.htm*,*.php,http*" "" "" 0 1 0 0 0 0 0 0 0 0 0 AOPT 0 0 0 0 0 0 0 0 0 0 -APPL "synctmcf.prg" C:\tools\synctime\synctmcf.prg "" 1 "" "" "" 0 1 0 0 0 1 0 0 0 0 0 +APPL "cops.acc" C:\mint\mint_acc\cops.acc "" 1 "*.cpx" "" "" 0 1 0 1 0 0 0 0 0 0 0 AOPT 0 0 0 0 0 0 0 0 0 0 -WIXY 0 2328 1341 4703 7594 +WIXY 0 4937 1650 4703 7594 WIXY 1 2875 4721 6656 5000 WIXY 2 500 1560 6656 5000 WIXY 3 625 1729 6656 5000 @@ -65,3 +65,4 @@ WIXY 13 1875 3459 6656 5000 WIXY 14 2000 3638 6656 5000 WIXY 15 2125 3807 6656 5000 VTXY 0 0 10000 10000 +WOPN 256 1 0 0 * F:\ 0 "" 0 0 1 diff --git a/UPLOADS.TXT b/UPLOADS.TXT index fa8ff72..ff65fab 100644 --- a/UPLOADS.TXT +++ b/UPLOADS.TXT @@ -146,4 +146,6 @@ 08.11.2022 Lars: Moved /sources/ out of setup (one dir up) 20.11.2022 Lars: /mint/sys/bin/ cleaned + updated Corrected teradesk.inf, highwire.cfg - \ No newline at end of file +24.11.2022 Lars: Updated cops.acc and Vision -> 4.9b2 + Corrected thing.inf/icons.inf for thing 1.27 + \ No newline at end of file diff --git a/mint/mint_acc/COPS.ACC b/mint/mint_acc/COPS.ACC deleted file mode 100644 index 58b60ec..0000000 Binary files a/mint/mint_acc/COPS.ACC and /dev/null differ diff --git a/mint/mint_acc/cops.acc b/mint/mint_acc/cops.acc new file mode 100644 index 0000000..6d730c9 Binary files /dev/null and b/mint/mint_acc/cops.acc differ diff --git a/teradesk/teradesk.inf b/teradesk/teradesk.inf index 2717e48..6952c16 100644 --- a/teradesk/teradesk.inf +++ b/teradesk/teradesk.inf @@ -1422,6 +1422,23 @@ applications= } } } + app= + { + path=C:\mint\mint_acc\cops.acc + cmdl=%f + atype= + { + appt=2 + flag=0x2000 + } + doctypes= + { + dtype= + { + mask=*.cpx + } + } + } } windows= @@ -1452,8 +1469,8 @@ windows= { xpos=103 ypos=95 - winw=57 - winh=11 + winw=52 + winh=23 } pos= { diff --git a/tools/vision/HISTOIRE.TXT b/tools/vision/HISTOIRE.TXT deleted file mode 100644 index b73e6ca..0000000 --- a/tools/vision/HISTOIRE.TXT +++ /dev/null @@ -1,331 +0,0 @@ - V I S I O N - ----------- - -http://vision.atari.org ou http://jlusetti.free.fr -E-Mail : vision@atari.org ou jlusetti@free.fr - -Tous les details des dernieres mises a jour sont disponibles sur: -http://vision.atari.org/vhisto.htm - -Version 4.0e (Decembre 2003) ----------------------------- -* Correction du bug faisant planter VISION lorsque l'on cree une nouvelle - categorie depuis le formulaire d'informations sur l'album - - -Version 4.0a (Novembre 2000) ----------------------------- -* VISION devient modulaire ! -Un clic avec le bouton droit sur une image fait apparaitre un popup donnant -acces aux LDV (Librairies Dynamiques VISION). -Vous pouvez ensuite selectionner votre LDV, voir ses details et l'appliquer -sur l'image ou sur un bloc. -Un kit de developemment est egalement disponible sur le site WEB. -Les LDV sont basees sur les librairies dynamiques GEM (LDG), developpees -par Dominique Bereziat et Olivier Landemarre. Merci a eux ! -!!!! IMPORTANT !!!! -N'oubliez pas de copier LDG.PRG dans le dossier AUTO ! - -* Grosse refonte de l'interface - - - Bien plus respecteux du Multitache Magic ou Mint... - - On peut d‚placer les fenetres de progression et celles-ci - se redessinent bien... - - Plusieurs boites de dialogue sont devenues non modales: - . La roue True Color - . La s‚lection d'un index de la palette (fenetre redimensionnable - et librement positionnable) - . Le catalogue -enfin!- - . La vue du catalogue en vignettes -enfin!- - - Pleins de d‚tails du style, on peut iconiser, bouger, retailler les - fenetres alors qu'une boite modale est ouverte - -* Nouvelle fenetre : Image Browser - - Tres pratique, cette fenetre permet de visualiser tres rapidement les images - d'un dossier a la maniere du logiciel ACDSee sur PC (excellent logiciel par - ailleurs...). Cette fenetre est affichee au demarrage et donne acces aux fonctions - suivantes: - - - Chargement d'une image : L'image demandee sera affichee et laliste des images du - meme dossier sera memorisee - - Image precedente/suivante : Permet de visualiser l'image d'avant ou d'apres. Noter que - ( touches <- et -> ) vous pouvez, durant le chargement d'une image l'interrompre - et avec les touches de <- et -> enchainer sur le chargement - de l'image suivante / precedente. - - Edition : Permet d'ouvrir une fenetre classique d'image VISION - permettant la modification - - Impression : Cette fonction permet d'imprimer l'image courante - - Supression : Supprime le fichier image sur le disque - - Zoom : Popup permettant de selectionner le niveau de zoom desire - - Deplacement : Si l'image est trop grande pour etre affichee en totalite - dans une fenetre, vous pouvez vous deplacer dedans en - maintenant appuye le bouton gauche de la souris et en la - deplacant dans le fenetre de l'Image Browser - - -* Extension de l'id‚e de cat‚gorie par d‚faut dans l'album - Il est possible d'associer … la place d'une categorie par defaut un fichier INI qui - determine les 3 categories possibles suivants les repertoires ou l'image se trouve. - Ce fichier INI … indiquer dans la fenetre d'informations sur l'album est structure ainsi: - [Lookn] --> n est l'ordre de priorite de recherche (0 est le plus prioritaire) - Path=... --> Chemin et masque, si le fichier a ajouter entre dans Path, cette image - sera enregistree avec les categories suivantes - Catn=... --> Nom de la categorie n (1,2,3) de l'image. Si cette categorie n'existe pas, - elle sera creee (attention a la limite des 32 categories). Si une erreur - survient ou si Catn n'est pas indique, la categorie par defaut de l'album - sera utilisee. - - Ce fichier INI est tres puissant pour organiser vos images si vous avez l'habitude de les - rassembler dans des repertoires ! Par exemple, une fois fait, ce fichier vous permet d'ajouter - automatiquement d'un seul coup toutes vos images sans qu'il soit necessaire de reprendre - ensuite a la main les categories ! - -* Gestion du protocole VA_START - - - Si votre bureau (Thing, Magic, Mint,...) gere ce protocole, vous pouvez charger a - la suite une nouvelle image dans VISION sans qu'il soit necessaire de le relancer - -* Gestion des noms longs - ! IMPORTANT ! - Suivant les versions du systeme (Tos, Mint, Magic...), certaines fonctions - proposees par le systeme ne gerent pas les noms longs, cela peut entrainer - des erreurs notamment lors des conversions en serie ou de l'ajout d'images - dans un album. Pour palier a cela, VISION propose sa validation dans la - fenetre des preferences (cela remplace d'ailleurs l'option des popups a - defilement qui ne servait pas a grand chose...) - -* Sur clic droit dans la vue en fenetre du catalogue, apparition d'un - popup donnant accŠs a: - - Chargement de l'image sous la souris - - Information sur l'image - - Export en HTML de la vue en fenetre (avec possibilite de dupliquer les - images correspondant aux vignettes) - -* Pour les conversions en serie, on peut specifier la destruction des fichiers - sources, leur deplacement et l'ecrasement des fichiers existants - -* Plus rapide : le tri suivant criteres pour le catalogue (jusqu'a 30 fois !) - -* Les filtres peuvent maintenant etre traduits et integres (de la meme - facon que les langues) dans VISION (creer le repertoire du nom de la - langue dans VISION\FILTRES) - -* Lors d'une conversion en serie ou d'un ajout d'images dans un album, - la progression s'affiche de maniere globale et non plus sur chaque - image traitee - -* Dans la boite de dialogue des formes, on peut maintenant specifier un - type de debut et de fin differents pour une ligne - -* Lors de l'utilisation de l'outil lignes ou K-lignes, les coordonnees - s'affichent dans la barre d'info de la fenetre - -* Sur clic droit sur une image, on peut lancer un programme externe (en - parallele si un systeme Multitache (Mint, Magic...) est utilise) - -* La palette fait parite de la liste des actions possibles lors d'un clic - droit sur une image - -* Ajout de la cle SplashWindow dans vision.ini indiquant si la fenetre de - presentation doit etre affichee - -* Ajout de la cle DisplayToolBar dans vision.ini indiquant si la barre - d'outils doit etre affichee. Pour la reafficher, passer par les - preferences - -* Si VISION ne trouve pas VISION.INI au demarrage, il vous permet de le trouver - a sa place - -* Correction de bugs - ------------------ - - Sous NVDI5, les drivers d'imprimantes sont reconnus - - - Sur une machine necessitant l'utilisation du format VDI standard, la - fonction "Copier" dans le Presse Papier GEM ne prenait pas en compte - le format VDI standard et l'image copiee etait incorrecte. - - - Sur une machine necessitant l'utilisation du format VDI standard, les - conversions en serie ne pouvaient pas marcher dans certains cas - - - Suivant le nombre de fontes et la postion de la fonte systŠme dans la liste, - il etait possible que cetteliste soit mal affichee dans le formulaire de - parametrage du texte - - -Version 3.5a (Decembre 98) ------------- - -* Impl‚mentation du tramage en 256 couleurs (selection automatique) - -* Ajout de la fonction de recopie d'ecran (SnapShot), activable par les - touches '*' et '/' du pave numerique: - '*' : Propose le choix entre l'ecran entier et un bloc rectangulaire - '/' : Recopie avec les parametres presents dans la derniere configuration - -* Gestion du format JPEG en import sans DSP - Support du format 256 couleurs en niveaux de gris - Support du format progressif (entrelace) - -* Gestion du format JPEG en export sans DSP - Qualite de sauvegarde reglable - - (Le module import/export JPEG sans DSP est en grosse partie base - sur le travail effectue par le Independent JPEG Group) - -* Possibilite de decouper une image en n lignes et m colonnes afin de sauver - chaque bloc dans un fichier (pratique pour creer des tableaux d'images dans - une page HTML) - -* Gestion du format GIF entrelace en import - -* + Rapide : tramage en niveaux de gris accelere de 25 % a 35 % - -* La fenetre du catalogue est maintenant redimensionnable - -* Ajout d'un popup apparaissant sur un clic droit sur image permettant l'acces - aux fonctions suivantes : - agrandir, maximiser, informations, sauver, sauver sous et fermer - -* Possibilite d'activer un fichier journal au format VSS afin de generer - automatiquement un fichier diaporama en chargeant des images a la suite - -* Correction du bug provoquant systematiquement une allocation memoire pour - le undo lors d'une operation de correction gamma ou luminosite en True Color - -* Correction du bug en True Color lors du chargement d'une image monochrome - (affichage en rouge et blanc au lieu de noir et blanc) - -* Correction d'un bug pouvant empecher le chargement de la fin d'une image - TIFF compresse LZW - -* Correction du bug provoquant l'affichage d'une mauvaise palette en 256 - couleurs dans le cas ou seules les 16 premieres couleurs sont utilisees - -* Correction du bug generant un mauvais fichier lors de la sauvegarde - en GIF d'une image ayant moins de couleurs que la resoution graphique - -* Correction de bugs divers pouvant entrainer un plantage lors du chargement - d'une image GIF animee - - - -Version 3.0d ------------- - -* Correction du bug avec NVDI empechant la selection d'une couleur dans une image True Color - - -Version 3.0c ------------- - -* Gestion des modes TrueColor 16 bits (65K), seul le mode 24 bits n'est - pas encore gere - -* Detection automatique de l'organisation True Color et de - la necessite d'utiliser le format VDI standard - -* La fenetre du catalogue devient "presque" non modale - -* Les fleches de direction peuvent etre utilisees pour se deplacer dans - les fenetres d'image ou du catalogue - -* L'iconification marche sous Magic - -* Doc HTML On et Off Line consultable sur le site WEB de VISION: - http://www.mygale.org/01/jlusetti - -* Sauvegarde des parametres des outils (ligne, point,...) dans - VISION.INI - -* Correction d'un bug empechant la selection d'une couleur en True Color - -* Correction d'un bug amenant … un plantage lors d'un UNDO disque sur la - palette - -* Le temps d'attente ShareWare passe a 10 secondes - -* Les fichiers diaporama (.VSS) acceptent des commentaires en ligne - -* La traduction Anglaise a ete amelioree par Hallard TANGERAAS, merci a lui ! - - -Version 3.0b ------------- -* VISION devient SHAREWARE ! - Prix : 150 Frs (cheque a l'ordre de Jean LUSETTI, - coordonnes dans REGISTER.TXT) - - -* Ajout d'une fenetre de zoom (x 1,2,4,8,16) en TEMPS REEL - Les outils peuvent maintenant etre utilises avec une - precision inegalee. - - -* Ajout de la fonctionnalit‚ de diaporama (SlideShow) - Directement int‚gr‚ au catalogue ou pouvant etre cree "a la main" - en tant que fichier texte d'extension VSS - - -* Plus RAPIDE ! - Conversion indices --> format bitplan ATARI - Tramage - Decompactage LZW - - Exemple : Le chargement d'une image TIFF 256 compressee LZW en mode - 16 couleurs a ete divise par 2,3 ! - - -* Les informations d'une image comprennent maintenant un compte rendu sur - les performances de chargement : - Acces disque - Conversion indices --> bitplan - Decompression - Tramage - Transformation format graphique specifique <--> format ATARI standard - - -* Les buffers UNDO peuvent maintenant etre definis sur disque - --> Jusqu'a 99 niveaux d'annulation !!! - - -* TOUTES les operations deviennent annulables - Y compris rotation, luminosite (TC), correction Gamma (TC) conversion et - redimensionnement - - -* Compatibilite avec les cartes graphiques et emulateurs ST sur Mac/PC - Grace a une boite de dialogue permettant a VISION de detecter - l'organisation du mode True Color (detection automatique integree) - - NOTE: - Les modes True Color 16 et 32 bits ont pu etre testes. - Le mode 24 bits est present mais NON TESTE, faute de machine - et de carte video le permettant - En 16 bits, seul le mode 32K est utilise - - -* Les icones apparaissent en couleurs sur toutes les machines et non plus - uniquement sur FALCON. - - -* Gestion simplifiee de la langue utilisee - Choix dans la boite des preferences - La traduction de VISION dans n'importe quelle langue se limite a traduire - 3 fichiers de ressources. - - -* Le fichier de configuration (ex VISION.CFG) devient VISION.INI au format texte - Plus facile et plus souple a utiliser - - -* La roue True Color est sauvee dans le fichier tcwheel.dat - Le temps d'initialisation du mode True Color disparait - Correction du bug empechant la selection d'une couleur dans la roue TC - avec NVDI ou un emulateur. - - -* L'ensemble des messages est rassemble dans le fichier VMSG.RSC - Cela permet de reduire la taille des fichiers VISION.RSC et VISIONB.RSC - qui contenaient chacun une copie de ces messages. - diff --git a/tools/vision/LDV/BW.LDV b/tools/vision/LDV/BW.LDV deleted file mode 100644 index dcddb47..0000000 Binary files a/tools/vision/LDV/BW.LDV and /dev/null differ diff --git a/tools/vision/LDV/GAMMA.LDV b/tools/vision/LDV/GAMMA.LDV deleted file mode 100644 index 3a20601..0000000 Binary files a/tools/vision/LDV/GAMMA.LDV and /dev/null differ diff --git a/tools/vision/LDV/INVERT.LDV b/tools/vision/LDV/INVERT.LDV deleted file mode 100644 index 9d29d3b..0000000 Binary files a/tools/vision/LDV/INVERT.LDV and /dev/null differ diff --git a/tools/vision/LDV/LDG.LIB b/tools/vision/LDV/LDG.LIB deleted file mode 100644 index 1c546cf..0000000 Binary files a/tools/vision/LDV/LDG.LIB and /dev/null differ diff --git a/tools/vision/LDV/LDV.C b/tools/vision/LDV/LDV.C deleted file mode 100644 index d34fcec..0000000 --- a/tools/vision/LDV/LDV.C +++ /dev/null @@ -1,1202 +0,0 @@ -#include -#include -#include - -#include "..\tools\chkstack.h" -#include "..\tools\scalemem.h" -#include "..\tools\gwindows.h" -#include "..\tools\rasterop.h" -#include "..\tools\frecurse.h" -#include "..\tools\logging.h" -#include "..\tools\xfile.h" -#include "..\tools\ini.h" -#include "..\tools\cpupng.h" /* Workaround */ - -#include "actions.h" -#include "ldv\ldvcom.h" - -static LDV_MODULE *Modules ; -static int NbModules ; -static int NumModule ; -static short ListTypes[] = { TLDV_MODIFYIMG, TLDV_LOADIMG, TLDV_SAVEIMG } ; - -#define VAPI_LDVVERSION 0x0104 -static VAPI *Vapi = NULL ; -static GEM_WINDOW *LdvProg = NULL ; - - -void cdecl PrSetText(long no_line, char *text) -{ - if ( LdvProg && ( no_line >= 0 ) && ( no_line <= 2 ) ) - StdProgWText( LdvProg, (int)no_line, text ) ; -} - -void cdecl PrSetProg(long pc) -{ - if ( LdvProg ) LdvProg->ProgPc( LdvProg, (int)pc, NULL ) ; -} - -long cdecl PrSetProgEx(long pc) -{ - long ret = 0 ; - - if ( LdvProg ) ret = LdvProg->ProgPc( LdvProg, (int)pc, NULL ) ; - if ( ret != 0 ) LdvProg = NULL ; - - return( ret ) ; -} - -void cdecl PrOptimize(long mask) -{ - if ( LdvProg ) - { - StdProgDisplay030( LdvProg, (int)mask & 0x01 ) ; - StdProgDisplayDSP( LdvProg, (int)mask & 0x02 ) ; - StdProgDisplayFPU( LdvProg, (int)mask & 0x04 ) ; - } -} - -void cdecl RaImgWhite(MFDB *img) -{ - img_raz( img ) ; -} - -long cdecl RaIs15Bits(void) -{ - long is_15bits = 0 ; - - if ( nb_plane == 16 ) is_15bits = RVBOrg.Is15Bits ; - - return( is_15bits ) ; -} - -void cdecl RaTCConvert(MFDB *img) -{ - tc_convert( img ) ; -} - -void cdecl RaTCInvConvert(MFDB *img) -{ - tc_invconvert( img ) ; -} - -void cdecl RaInd2RasterInit(MFDB *out, long width) -{ - int raz_done = 0 ; - - i2r_init( out, (short)width, raz_done ) ; -} - -void cdecl RaInd2Raster(unsigned char *indexes, long nb_indexes) -{ - i2r_data = indexes ; - i2r_nb = nb_indexes ; - ind2raster() ; -} - -void cdecl RaRaster2Ind(short *pt_raster, long nb_pts, long nplans, unsigned char *out) -{ - raster2ind( (int*)pt_raster, out, nb_pts, (short)nplans ) ; -} - -unsigned char * cdecl RaGetTOS2VDIArray(long nplanes) -{ - return( get_pttos2vdi( (short)nplanes ) ) ; -} - -unsigned char * cdecl RaGetVDI2TOSArray(long nplanes) -{ - return( get_ptvdi2tos( (short)nplanes ) ) ; -} - -unsigned long cdecl RaGetImgSize(long width, long height, long nplanes) -{ - return( (unsigned long) img_size( (int)width, (int)height, (int)nplanes ) ) ; -} - -long cdecl RaRasterAlloc(MFDB *raster) -{ - size_t size ; - - size = img_size( raster->fd_w, raster->fd_h, raster->fd_nplanes ) ; - raster->fd_addr = Xalloc( size ) ; - if ( raster->fd_addr ) - { - raster->fd_wdwidth = raster->fd_w / 16 ; - if ( raster->fd_w % 16 ) raster->fd_wdwidth++ ; - - return( 0 ) ; - } - - return( -1 ) ; /* Erreur */ -} - -void cdecl RaRasterFree(MFDB *raster) -{ - if ( raster->fd_addr ) Xfree( raster->fd_addr ) ; - memset( raster, 0, sizeof(MFDB) ) ; -} - -void cdecl RaTC15RemapColors(REMAP_COLORS *rc) -{ - TC15RemapColors( rc ) ; -} - -void cdecl RaTC16RemapColors(REMAP_COLORS *rc) -{ - TC16RemapColors( rc ) ; -} - -void cdecl RaTC32RemapColors(REMAP_COLORS *rc) -{ - TC32RemapColors( rc ) ; -} - -void cdecl RaRasterRotateGetDstMFDB(MFDB *in, MFDB *out, long angle) -{ - float cosinus, sinus ; - - raster_rgetdstmfdb( (int)angle, in, out, &cosinus, &sinus ) ; -} - -long cdecl RaRasterRotate(MFDB *in, MFDB *out, long angle, long flags) -{ - LDV_STATUS status ; - int ret ; - - if ( flags & 0x01L ) /* Progression */ - ret = raster_rotate( in, out, (int) angle, LdvProg ) ; - else - ret = raster_rotate( in, out, (int) angle, NULL ) ; - - switch( ret ) - { - case 0 : status = ELDV_NOERROR ; - break ; - case -1 : status = ELDV_NOTENOUGHMEMORY ; - break ; - case 1 : status = ELDV_CANCELLED ; - break ; - default : status = ELDV_GENERALFAILURE ; - break ; - } - - return( (long)status ) ; -} - -void cdecl GEMMessageLoop(void *msg) -{ - EVENT event ; - - memcpy( &event.ev_mmgpbuf, msg, sizeof(event.ev_mmgpbuf) ) ; - GeneralMesagHandler( &event ) ; -} - -char* cdecl CoGetLDVPath(void) -{ - return( config.path_ldv ) ; -} - -char* cdecl CoGetCurrentLanguage(void) -{ - return( config.language ) ; -} - -unsigned long cdecl CoGetFunctionOptimizations(void *function) -{ - unsigned long code = 0 ; - - if ( MachineInfo.cpu >= 30L ) - { - if ( ( function == (void *)Vapi->MeSCopyMemory16 ) || - ( function == (void *)Vapi->MeSCopyMemory32 ) || - ( function == (void *)Vapi->RaRasterRotate ) || - ( function == (void *)Vapi->RaInd2Raster ) - ) code |= 0x01 ; - } - - return( code ) ; -} - -unsigned long cdecl CoGetProcessors(void) -{ - unsigned long pmask = 0 ; - - if ( (MachineInfo.cpu >= 30L) && ((config.ldv_options & LDVO_HIDE030) == 0) ) - pmask |= CO_HAS_030 ; - - if ( get_fpu() && ((config.ldv_options & LDVO_HIDEFPU) == 0) ) - pmask |= CO_HAS_FPU ; - - if ( DspInfo.type && ((config.ldv_options & LDVO_HIDEDSP) == 0) ) - pmask |= CO_HAS_DSP ; - - return pmask ; -} - -long cdecl InOpen(char *file) -{ - return( (long) OpenIni( file ) ) ; -} - -long cdecl InClose(HINI h_ini) -{ - return( CloseIni( h_ini ) ) ; -} - -long cdecl InSaveAndClose(HINI h_ini, char *new_name) -{ - return( SaveAndCloseIni( h_ini, new_name ) ) ; -} - -long cdecl InGetKey(HINI h_ini, char *section, char *key, char *val_key) -{ - return( GetIniKey( h_ini, section, key, val_key ) ) ; -} - -long cdecl InSetKey(HINI h_ini, char *section, char *key, char *val_key) -{ - return( SetIniKey( h_ini, section, key, val_key ) ) ; -} - -long cdecl InGetOrSetKey(HINI h_ini, char *section, char *key, char *val_default_key) -{ - return( GetOrSetIniKey( h_ini, section, key, val_default_key ) ) ; -} - -long cdecl InGetKeyFromFile(char *file, char *section, char *key, char *val_key) -{ - return GetIniKeyFromFile( file, section, key, val_key ) ; -} - -void cdecl MeSCopyMemory8(void *dst, void *src, unsigned long nb_elems_dst, unsigned long nb_elems_src) -{ - asm_smemcpy8( dst, src, nb_elems_dst, nb_elems_src ) ; -} - -void cdecl MeSCopyMemory16(void *dst, void *src, unsigned long nb_elems_dst, unsigned long nb_elems_src) -{ - asm_smemcpy16( dst, src, nb_elems_dst, nb_elems_src ) ; -} - -void cdecl MeSCopyMemory32(void *dst, void *src, unsigned long nb_elems_dst, unsigned long nb_elems_src) -{ - asm_smemcpy32( dst, src, nb_elems_dst, nb_elems_src ) ; -} - -void cdecl Me030SCopyMemory8(void *dst, void *src, unsigned long nb_elems_dst, unsigned long nb_elems_src) -{ - asm030_smemcpy8( dst, src, nb_elems_dst, nb_elems_src ) ; -} - -void cdecl Me030SCopyMemory16(void *dst, void *src, unsigned long nb_elems_dst, unsigned long nb_elems_src) -{ - asm030_smemcpy16( dst, src, nb_elems_dst, nb_elems_src ) ; -} - -void cdecl Me030SCopyMemory32(void *dst, void *src, unsigned long nb_elems_dst, unsigned long nb_elems_src) -{ - asm030_smemcpy32( dst, src, nb_elems_dst, nb_elems_src ) ; -} - -unsigned long cdecl LoGetLogLevel(void) -{ - return LoggingGetLevel() ; -} - -#ifdef __NO_LOGGING -#pragma warn -par -long cdecl LoDoLog(unsigned long level, char* format, ...) -{ - return 0 ; -} -#pragma warn +par -#else -long cdecl LoDoLog(unsigned long level, char* format, ...) -{ - va_list argp ; - long r ; - - va_start(argp, format) ; - r = LoggingvDo(level, format, argp) ; - va_end(argp) ; - - return r ; -} -#endif - -VAPI *LDVInitVAPI(void) -{ - if ( Vapi == NULL ) - { - Vapi = (VAPI *) Xcalloc( 1, sizeof(VAPI) ) ; - if ( Vapi ) - { - Vapi->Header.Version = VAPI_LDVVERSION ; - Vapi->Header.StrSize = sizeof(VAPI) ; - LoggingDo(LL_INFO, "VAPI Version: %02x.%02x", Vapi->Header.Version >> 8, Vapi->Header.Version & 0xFF) ; - LoggingDo(LL_INFO, "VAPI interface size:%d bytes", Vapi->Header.StrSize) ; - Vapi->Header.Global = _GemParBlk.global ; - Vapi->Header.GEMMessageLoop = GEMMessageLoop ; - - /* Progress Interface */ - Vapi->PrSetProg = PrSetProg ; - Vapi->PrOptimize = PrOptimize ; - Vapi->PrSetText = PrSetText ; - Vapi->PrSetProgEx = PrSetProgEx ; - - /* Raster Interface */ - Vapi->RaImgWhite = RaImgWhite ; - - Vapi->RaIs15Bits = RaIs15Bits ; - Vapi->RaTCInvConvert = RaTCInvConvert ; - Vapi->RaTCConvert = RaTCConvert ; - - Vapi->RaInd2RasterInit = RaInd2RasterInit ; - Vapi->RaInd2Raster = RaInd2Raster ; - Vapi->RaRaster2Ind = RaRaster2Ind ; - - Vapi->RaGetTOS2VDIArray = RaGetTOS2VDIArray ; - Vapi->RaGetVDI2TOSArray = RaGetVDI2TOSArray ; - - Vapi->RaGetImgSize = RaGetImgSize ; - Vapi->RaRasterAlloc = RaRasterAlloc ; - Vapi->RaRasterFree = RaRasterFree ; - - Vapi->RaTC15RemapColors = RaTC15RemapColors ; - Vapi->RaTC16RemapColors = RaTC16RemapColors ; - Vapi->RaTC32RemapColors = RaTC32RemapColors ; - - Vapi->RaRasterRotateGetDstMFDB = RaRasterRotateGetDstMFDB ; - Vapi->RaRasterRotate = RaRasterRotate ; - - /* Config Interface */ - Vapi->CoGetLDVPath = CoGetLDVPath ; - Vapi->CoGetCurrentLanguage = CoGetCurrentLanguage ; - Vapi->CoGetFunctionOptimizations = CoGetFunctionOptimizations ; - Vapi->CoGetProcessors = CoGetProcessors ; - - /* INI Interface */ - Vapi->InOpen = InOpen ; - Vapi->InClose = InClose ; - Vapi->InSaveAndClose = InSaveAndClose ; - Vapi->InGetKey = InGetKey ; - Vapi->InSetKey = InSetKey ; - Vapi->InGetOrSetKey = InGetOrSetKey ; - Vapi->InGetKeyFromFile = InGetKeyFromFile ; - - /* MEM Interface */ - if ( MachineInfo.cpu >= 30L ) - { - Vapi->MeSCopyMemory8 = Me030SCopyMemory8 ; - Vapi->MeSCopyMemory16 = Me030SCopyMemory16 ; - Vapi->MeSCopyMemory32 = Me030SCopyMemory32 ; - } - else - { - Vapi->MeSCopyMemory8 = MeSCopyMemory8 ; - Vapi->MeSCopyMemory16 = MeSCopyMemory16 ; - Vapi->MeSCopyMemory32 = MeSCopyMemory32 ; - } - - /* Logging Interface */ - Vapi->LoDoLog = LoDoLog ; - Vapi->LoGetLogLevel = LoGetLogLevel ; - } - } - - return( Vapi ) ; -} - -int LDVSetValueFromString(char *buf, int type, LDV_BASICPARAM *p) -{ - int set = 1 ; - - switch( type ) - { - case LDVT_SHORT : p->s = atoi( buf ) ; - break ; - - case LDVT_FLOAT : p->f = atof( buf ) ; - break ; - - default : set = 0 ; - break ; - } - - return( set ) ; -} - -int LDVGetIniSpec(char *base_path, LDV_MODULE *ldv_module) -{ - HINI hini ; - int err = 0 ; - int i, max_len ; - char name[PATH_MAX] ; - char *point ; - char short_name[16] ; - char long_name[32] ; - char description[80] ; - char buf[200] ; - - point = strrchr( ldv_module->FileName, '.' ) ; - if ( point ) *point = 0 ; - sprintf( name, "%s\\%s\\%s.INI", base_path, config.language, ldv_module->FileName ) ; - if ( !FileExist( name ) ) sprintf( name, "%s\\%s.INI", base_path, ldv_module->FileName ) ; - hini = OpenIni( name ) ; - if ( ( hini != NULL ) && FileExist( name ) ) - { - /* ShortName */ - buf[0] = 0 ; - GetIniKey( hini, "Informations", "ShortName", buf ) ; - max_len = (int) sizeof(short_name) - 1 ; - if ( strlen( buf ) > max_len ) buf[max_len] = 0 ; - strcpy( short_name, buf ) ; - - /* LongName */ - buf[0] = 0 ; - GetIniKey( hini, "Informations", "LongName", buf ) ; - max_len = (int) sizeof(long_name) - 1 ; - if ( strlen( buf ) > max_len ) buf[max_len] = 0 ; - strcpy( long_name, buf ) ; - - /* Description */ - buf[0] = 0 ; - GetIniKey( hini, "Informations", "Description", buf ) ; - max_len = (int) sizeof(description) - 1 ; - if ( strlen( buf ) > max_len ) buf[max_len] = 0 ; - strcpy( description, buf ) ; - - ldv_module->IniSpec.ShortName = NULL ; - ldv_module->IniSpec.LongName = NULL ; - ldv_module->IniSpec.Description = NULL ; - max_len = 1 + (int) strlen( short_name ) ; - max_len += 1 + (int) strlen( long_name ) ; - max_len += 1 + (int) strlen( description ) ; - ldv_module->IniSpec.ShortName = (char *) Xalloc( max_len ) ; - if ( ldv_module->IniSpec.ShortName ) - { - strcpy( ldv_module->IniSpec.ShortName, short_name ) ; - strcpy( ldv_module->IniSpec.ShortName + 1 + strlen( short_name ), long_name ) ; - strcpy( ldv_module->IniSpec.ShortName + 1 + strlen( short_name ) + 1 + strlen( long_name ), description ) ; - ldv_module->IniSpec.LongName = ldv_module->IniSpec.ShortName + 1 + strlen( short_name ) ; - ldv_module->IniSpec.Description = ldv_module->IniSpec.LongName + 1 + strlen( long_name ) ; - } - - /* Parameters */ - for ( i = 0; i < LDVNBMAX_PARAMETERS; i++ ) - { - /* Name */ - buf[0] = 0 ; - sprintf( name, "Parameter%d", 1 + i ) ; - GetIniKey( hini, name, "Name", buf ) ; - max_len = (int) sizeof(ldv_module->IniSpec.Params[i].Name) - 1 ; - if ( strlen( buf ) > max_len ) buf[max_len] = 0 ; - strcpy( ldv_module->IniSpec.Params[i].Name, buf ) ; - - /* Type */ - buf[0] = 0 ; - GetIniKey( hini, name, "Type", buf ) ; - ldv_module->IniSpec.Params[i].Type = atoi( buf ) ; - - /* MinValue */ - buf[0] = 0 ; - GetIniKey( hini, name, "MinValue", buf ) ; - LDVSetValueFromString( buf, ldv_module->IniSpec.Params[i].Type, &ldv_module->IniSpec.Params[i].MinValue ) ; - - /* DefaultValue */ - buf[0] = 0 ; - GetIniKey( hini, name, "DefaultValue", buf ) ; - LDVSetValueFromString( buf, ldv_module->IniSpec.Params[i].Type, &ldv_module->IniSpec.Params[i].DefaultValue ) ; - - /* MaxValue */ - buf[0] = 0 ; - GetIniKey( hini, name, "MaxValue", buf ) ; - LDVSetValueFromString( buf, ldv_module->IniSpec.Params[i].Type, &ldv_module->IniSpec.Params[i].MaxValue ) ; - - /* FloatIncrement */ - buf[0] = 0 ; - GetIniKey( hini, name, "FloatIncrement", buf ) ; - ldv_module->IniSpec.Params[i].FloatIncrement = atof( buf ) ; - - /* Verification de la validite */ - if ( ldv_module->IniSpec.Params[i].MinValue.s == ldv_module->IniSpec.Params[i].MaxValue.s ) - ldv_module->IniSpec.Params[i].Name[0] = 0 ; /* Ignorer ce parametre */ - } - - CloseIni( hini ) ; - } - else err = 1 ; - if ( point ) *point ='.' ; - - return( err ) ; -} - -void LDVReleaseInterface(LDV_MODULE *mod, int iid) -{ - void *old_interface = NULL ; - - if ( mod && ( mod->Infos.Type & iid ) ) - { - switch( iid ) - { - case TLDV_MODIFYIMG : old_interface = mod->IModifImg ; - mod->IModifImg = NULL ; - break ; - - case TLDV_LOADIMG : old_interface = mod->ILoadImg ; - mod->ILoadImg = NULL ; - break ; - - case TLDV_SAVEIMG : old_interface = mod->ISaveImg ; - mod->ISaveImg = NULL ; - break ; - } - } - - if ( old_interface ) - { - Xfree( old_interface ) ; - mod->NbReferences-- ; - } -} - -void *LDVGetInterface(LDV_MODULE *mod, int iid) -{ - LDG *ldg ; - void *interface = NULL ; - - if ( mod && ( mod->Infos.Type & iid ) ) - { - ldg = mod->Ldg ; - switch( iid ) - { - case TLDV_MODIFYIMG : if ( mod->IModifImg ) LDVReleaseInterface( mod, iid ) ; - mod->IModifImg = (ILDVModifImg *) Xcalloc( 1, sizeof(ILDVModifImg) ) ; - if ( mod->IModifImg ) - { - mod->IModifImg->PreRun = ldg_find( "PreRun", ldg ) ; - mod->IModifImg->Run = ldg_find( "Run", ldg ) ; - mod->IModifImg->Preview = ldg_find( "Preview", ldg ) ; - mod->IModifImg->GetParams = ldg_find( "GetParams", ldg ) ; - } - interface = mod->IModifImg ; - break ; - - case TLDV_LOADIMG : if ( mod->ILoadImg ) LDVReleaseInterface( mod, iid ) ; - mod->ILoadImg = (ILDVLoadImg *) Xcalloc( 1, sizeof(ILDVLoadImg) ) ; - if ( mod->ILoadImg ) - { - } - interface = mod->ILoadImg ; - break ; - - case TLDV_SAVEIMG : if ( mod->ISaveImg ) LDVReleaseInterface( mod, iid ) ; - mod->ISaveImg = (ILDVSaveImg *) Xcalloc( 1, sizeof(ILDVSaveImg) ) ; - if ( mod->ISaveImg ) - { - } - interface = mod->ISaveImg ; - break ; - } - } - - if ( interface ) mod->NbReferences++ ; - - return( interface ) ; -} - -void LDVReleaseAllInterfaces(LDV_MODULE *ldv_module) -{ - short index ; - - for ( index = 0; index < sizeof(ListTypes)/sizeof(short); index++ ) - LDVReleaseInterface( ldv_module, ListTypes[index] ) ; -} - -void LDVGetAllInterfaces(LDV_MODULE *ldv_module) -{ - short index ; - - for ( index = 0; index < sizeof(ListTypes)/sizeof(short); index++ ) - LDVGetInterface( ldv_module, ListTypes[index] ) ; -} - -void LDVUnloadFunctions(LDV_MODULE *ldv_module) -{ - LDVReleaseAllInterfaces( ldv_module ) ; - ldg_term( ap_id, ldv_module->Ldg ) ; - ldv_module->Ldg = NULL ; -} - -LDV_STATUS LDVInit(char *file, LDV_MODULE *ldv_module, int minimal_infos) -{ - LDV_INFOS *ldv_infos ; - LDG *ldg ; - LDV_STATUS err = ELDV_NOERROR ; -#if !defined(__NO_LOGGING) - short ver ; -#endif - char *slash, *lname = file ; - char base_path[PATH_MAX] ; - - if ( minimal_infos ) - { - if ( ldv_module->FileName ) Xfree( ldv_module->FileName ) ; - memset( ldv_module, 0, sizeof(LDV_MODULE) ) ; - } - - slash = strrchr( file, '\\' ) ; - if ( slash ) - { - *slash = 0 ; - strcpy( base_path, file ) ; - *slash = '\\' ; - lname = 1 + slash ; - } - - if ( ldv_module->FileName ) - { - if ( strlen( ldv_module->FileName ) < strlen( lname ) ) - { - Xfree( ldv_module->FileName ) ; - ldv_module->FileName = Xalloc( 1 + strlen( lname ) ) ; - if ( ldv_module->FileName == NULL ) return( ELDV_NOTENOUGHMEMORY ) ; - } - strcpy( ldv_module->FileName, lname ) ; - } - else - { - ldv_module->FileName = Xalloc( 1 + strlen( lname ) ) ; - if ( ldv_module->FileName == NULL ) return( ELDV_NOTENOUGHMEMORY ) ; - strcpy( ldv_module->FileName, lname ) ; - } - - /* Workaround for Mint/Aranym: if libpng is not closed, ldg_exec will freeze */ - cpu_png_terminate() ; - ldg = ldg_exec( ap_id, file ) ; - if ( ldg ) - { - ldv_module->Ldg = ldg ; - - ldv_module->GetLDVCapabilities = ldg_find( "GetLDVCapabilities", ldg ) ; - ldv_module->Infos.StrSize = sizeof(ldv_module->Infos) ; - if ( ldv_module->GetLDVCapabilities ) ldv_infos = ldv_module->GetLDVCapabilities( Vapi ) ; - else err = ELDV_GENERALFAILURE ; - if ( LDV_SUCCESS( err ) && ldv_infos ) - { - if ( ldv_infos->StrSize <= ldv_module->Infos.StrSize ) memcpy( &ldv_module->Infos, ldv_infos, ldv_infos->StrSize ) ; - else err = ELDV_GENERALFAILURE ; - } - else - err = ELDV_GENERALFAILURE ; - ldv_module->Version = ldg->vers ; -#if !defined(__NO_LOGGING) - ver = ldg->vers ; -#endif - } - else LoggingDo(LL_ERROR, "Failed to exec ldg %s", file); - - if ( !err ) - { - if ( minimal_infos ) - { - LDVGetIniSpec( base_path, ldv_module ) ; - LDVUnloadFunctions( ldv_module ) ; - } - else LDVGetAllInterfaces( ldv_module ) ; - } - - -#if !defined(__NO_LOGGING) - if (err) - LoggingDo(LL_INFO, "Loading LDV %12s returned %ld", lname, err) ; - else - LoggingDo(LL_INFO, "Loading LDV %12s(v%x.%02x)...OK", lname, ver >> 8, ver & 0xFF) ; -#endif - - return( err ) ; -} - -LDV_STATUS LDVLoadFunctions(char *path, LDV_MODULE *mod) -{ - char filename[PATH_MAX] ; - - sprintf( filename, "%s\\%s", path, mod->FileName ) ; - return( LDVInit( filename, mod, 0 ) ) ; -} - -LDV_CAPS *LDVGetNPlanesCaps(LDV_MODULE *mod, int nplanes) -{ - LDV_CAPS *caps ; - - caps = &mod->Infos.Caps[0] ; - while ( caps->NbPlanes ) - { - if ( caps->NbPlanes == nplanes ) break ; - else caps++ ; - } - - if ( caps->NbPlanes == 0 ) caps = NULL ; - - return( caps ) ; -} - -int add_ldv(FR_CDATA* fr_cdata) -{ - /* Should always be true */ - if ( NumModule < NbModules ) - if ( LDVInit( fr_cdata->filename, &Modules[NumModule], 1 ) == 0 ) NumModule++ ; - - return 0 ; -} - -LDV_MODULE *LDVGetModuleList(char *path, int *nb_ldv) -{ - FR_DATA fr_data ; - - fr_data.long_names = 0 ; /* Better not use long filenames here, old OSes would report no files */ - fr_data.path = path ; - fr_data.mask = "*.LDV" ; - fr_data.log_file = NULL ; - fr_data.user_func = NULL ; - fr_data.user_data = NULL ; - - Modules = NULL ; - NbModules = (int) count_files( 0, &fr_data ) ; - if ( NbModules > 0 ) - { - Vapi = LDVInitVAPI() ; - - /* Last module (not valid) will be zeroed */ - NumModule = 0 ; - Modules = (LDV_MODULE *) Xcalloc( 1+NbModules, sizeof(LDV_MODULE) ) ; - fr_data.long_names = 0 ; - fr_data.path = path ; - fr_data.mask = "*.LDV" ; - fr_data.log_file = NULL ; - fr_data.user_func = add_ldv ; - fr_data.user_data = NULL ; - if ( Modules ) find_files( &fr_data ) ; - else NbModules = 0 ; - } - - if ( nb_ldv ) *nb_ldv = NbModules ; - - return( Modules ) ; -} - -void LDVFreeModuleList(LDV_MODULE *module_list) -{ - LDV_MODULE *mod ; - int i ; - - mod = module_list ; - for ( i = 0; i < NbModules; i++, mod++ ) - { - if ( mod->IniSpec.ShortName ) Xfree( mod->IniSpec.ShortName ) ; - if ( mod->FileName ) Xfree( mod->FileName ) ; - if ( mod->Ldg ) LDVUnloadFunctions( mod ) ; - } - - Xfree( module_list ) ; - if ( Vapi ) Xfree( Vapi ) ; - Vapi = NULL ; -} - -LDV_MODULE *GetLdvByLdg(LDV_MODULE *ldv_list, LDG *ldg) -{ - LDV_MODULE *ldv_module = NULL ; - LDV_MODULE *cldv = ldv_list ; - - if ( ldv_list ) - { - while ( cldv->Ldg && ( ldv_module == NULL ) ) - { - if ( cldv->Ldg == ldg ) ldv_module = cldv ; - else cldv++ ; - } - } - - return( ldv_module ) ; -} - -LDV_STATUS LDVAlloc(LDV_IMAGE *img) -{ - LDV_STATUS err = ELDV_NOERROR ; - - if ( img->Raster.fd_w && img->Raster.fd_h ) - { - img->Raster.fd_addr = img_alloc( img->Raster.fd_w, img->Raster.fd_h,img->Raster.fd_nplanes ) ; - if ( img->Raster.fd_addr == NULL ) - err = ELDV_NOTENOUGHMEMORY ; - else - { - img->Raster.fd_wdwidth = img->Raster.fd_w / 16 ; - if ( img->Raster.fd_w % 16 ) img->Raster.fd_wdwidth++ ; - } - } - - if ( img->Palette.NbColors > 0 ) - { - img->Palette.Pal = Xcalloc( img->Palette.NbColors, sizeof(VDI_ELEMENTPAL) ) ; - if ( img->Palette.Pal == NULL ) err = ELDV_NOTENOUGHMEMORY ; - } - - return( err ) ; -} - -int GetBestImgFormat(LDV_CAPS *caps) -{ - int img_format ; - - switch( caps->NbPlanes ) - { - case 1 : - case 2 : - case 4 : - case 8 : if ( caps->Flags & LDVF_SPECFORMAT ) img_format = (int)LDVF_SPECFORMAT ; - else - if ( caps->Flags & LDVF_STDFORMAT ) img_format = (int)LDVF_STDFORMAT ; - else - if ( caps->Flags & LDVF_ATARIFORMAT ) img_format = (int)LDVF_ATARIFORMAT ; - else img_format = (int)LDVF_ATARIFORMAT ; - break ; - - case 16 : - case 24 : - case 32 : if ( caps->Flags & LDVF_SPECFORMAT ) img_format = (int)LDVF_SPECFORMAT ; - else - if ( caps->Flags & LDVF_ATARIFORMAT ) img_format = (int)LDVF_ATARIFORMAT ; - else img_format = (int)LDVF_ATARIFORMAT ; - break ; - - default : img_format = (int)LDVF_SPECFORMAT ; - break ; - } - - return( img_format ) ; -} - -LDV_STATUS FormatLdvImgFromSpec(LDV_IMAGE *ldv_img, int new_format) -{ - MFDB previous_img, std_img ; - LDV_STATUS err = ELDV_NOERROR ; - - /* ldv_img->raster doit valoir LDVF_SPECFORMAT */ - if ( ldv_img->RasterFormat != LDVF_SPECFORMAT ) return( ELDV_GENERALFAILURE ) ; - - memcpy( &previous_img, &ldv_img->Raster, sizeof(MFDB) ) ; - if ( ldv_img->RasterFormat != new_format ) - { - switch( new_format ) - { - case LDVF_STDFORMAT : if ( ldv_img->Raster.fd_nplanes <= 8 ) - { - memcpy( &std_img, &ldv_img->Raster, sizeof(MFDB) ) ; - std_img.fd_addr = img_alloc( std_img.fd_w, std_img.fd_h, std_img.fd_nplanes ) ; - if ( std_img.fd_addr == NULL ) err = ELDV_NOTENOUGHMEMORY ; - if ( LDV_SUCCESS( err ) ) - { - std_img.fd_stand = 1 ; - vr_trnfm( handle, &ldv_img->Raster, &std_img ) ; - Xfree( ldv_img->Raster.fd_addr ) ; - memcpy( &ldv_img->Raster, &std_img, sizeof(MFDB) ) ; - } - } - else - err = ELDV_GENERALFAILURE ; - break ; - - case LDVF_ATARIFORMAT : if ( ldv_img->Raster.fd_nplanes <= 8 ) - { - if ( MakeMFDBClassicAtari( &ldv_img->Raster, NULL ) != 0 ) - err = ELDV_NOTENOUGHMEMORY ; - } - else if ( UseStdVDI ) tc_invconvert( &ldv_img->Raster ) ; - break ; - - default : err = ELDV_GENERALFAILURE ; - break ; - } - if ( LDV_SUCCESS( err ) ) ldv_img->RasterFormat = (short)new_format ; - } - - return( err ) ; -} - -LDV_STATUS FormatLdvImgToSpec(LDV_IMAGE *ldv_img) -{ - MFDB img ; - LDV_STATUS err = ELDV_NOERROR ; - - switch( ldv_img->RasterFormat ) - { - case LDVF_SPECFORMAT : err = ELDV_NOERROR ; - break ; - - case LDVF_STDFORMAT : if ( ldv_img->Raster.fd_nplanes <= 8 ) - { - memcpy( &img, &ldv_img->Raster, sizeof(MFDB) ) ; - img.fd_addr = img_alloc( img.fd_w, img.fd_h, img.fd_nplanes ) ; - if ( img.fd_addr == NULL ) err = ELDV_NOTENOUGHMEMORY ; - if ( LDV_SUCCESS( err ) ) - { - img.fd_stand = 0 ; - vr_trnfm( handle, &ldv_img->Raster, &img ) ; - Xfree( ldv_img->Raster.fd_addr ) ; - memcpy( &ldv_img->Raster, &img, sizeof(MFDB) ) ; - } - } - else - err = ELDV_GENERALFAILURE ; - break ; - - case LDVF_ATARIFORMAT : if ( UseStdVDI && ( ldv_img->Raster.fd_nplanes <= 8 ) ) - { - memcpy( &img, &ldv_img->Raster, sizeof(MFDB) ) ; - img.fd_addr = img_alloc( img.fd_w, img.fd_h, img.fd_nplanes ) ; - if ( img.fd_addr ) - { - img.fd_stand = 1 ; - ClassicAtari2StdVDI( &ldv_img->Raster, &img ) ; - ldv_img->Raster.fd_stand = 0 ; - vr_trnfm( handle, &img, &ldv_img->Raster ) ; - Xfree( img.fd_addr ) ; - } - else - err = ELDV_NOTENOUGHMEMORY ; - } - else if ( UseStdVDI ) tc_convert( &ldv_img->Raster ) ; - break ; - - default : err = ELDV_GENERALFAILURE ; - break ; - } - - if ( LDV_SUCCESS( err ) ) ldv_img->RasterFormat = (int)LDVF_SPECFORMAT ; - - return( err ) ; -} - -LDV_STATUS LDVDo(LDV_MODULE *ldv, LDV_PARAMS *pldv_params, LDV_IMAGE *pldv_img, int preview, LDV_PERF *perfs) -{ - LDV_PARAMS ldv_params ; - LDV_CAPS *caps ; - ILDVModifImg *IModifImg = ldv->IModifImg ; - LDV_IMAGE *ldv_img, img_sel, out ; - LDV_STATUS err ; - size_t t0, t00 ; - int img_format ; - - if ( IModifImg == NULL ) return( ELDV_BADINTERFACE ) ; - if ( preview ) perfs = NULL ; - if ( perfs ) t00 = clock() ; - - ldv_img = pldv_img ; - memcpy( &ldv_params, pldv_params, sizeof(LDV_PARAMS) ) ; - caps = LDVGetNPlanesCaps( ldv, ldv_img->Raster.fd_nplanes ) ; - if ( caps == NULL ) return( ELDV_NBPLANESNOTSUPPORTED ) ; - - if ( - ( ( ldv_params.x1 != 0 ) || ( ldv_params.y1 != 0 ) || - ( ldv_params.x2 != ldv_img->Raster.fd_w -1 ) || ( ldv_params.y2 != ldv_img->Raster.fd_h -1 ) - ) && - ( caps->Flags & LDVF_NOSELECTION ) - ) - { - int xy[8] ; - - /* Dupliquer la selection, le LDV ne peut pas travailler sur une partie d'image */ - memcpy( &img_sel, ldv_img, sizeof(LDV_IMAGE) ) ; - img_sel.Raster.fd_w = 1 + ldv_params.x2 - ldv_params.x1 ; - img_sel.Raster.fd_h = 1 + ldv_params.y2 - ldv_params.y1 ; - RaRasterAlloc( &img_sel.Raster ) ; - if ( img_sel.Raster.fd_addr == NULL ) return( ELDV_NOTENOUGHMEMORY ) ; - xy[0] = ldv_params.x1 ; xy[1] = ldv_params.y1 ; - xy[2] = ldv_params.x2 ; xy[3] = ldv_params.y2 ; - xy[4] = xy[5] = 0 ; - xy[6] = img_sel.Raster.fd_w - 1 ; - xy[7] = img_sel.Raster.fd_h - 1 ; - vro_cpyfm( handle, S_ONLY, xy, &ldv_img->Raster, &img_sel.Raster ) ; - ldv_img = &img_sel ; - ldv_params.x1 = ldv_params.y1 = 0 ; - ldv_params.x2 = img_sel.Raster.fd_w - 1 ; - ldv_params.y2 = img_sel.Raster.fd_h - 1 ; - } - else memset( &img_sel, 0, sizeof(LDV_IMAGE) ) ; - - if ( perfs ) t0 = clock() ; - img_format = GetBestImgFormat( caps ) ; - err = FormatLdvImgFromSpec( ldv_img, img_format ) ; - if ( perfs ) perfs->pre_ldv_ms = (1000L * (clock() - t0) ) / CLK_TCK ; - if ( !LDV_SUCCESS( err ) ) return( err ) ; - - memset( &out, 0, sizeof(LDV_IMAGE) ) ; - out.Raster.fd_nplanes = caps->NbPlanesOut ; - out.RasterFormat = img_format ; - - if ( perfs ) t0 = clock() ; - err = IModifImg->PreRun( ldv_img, &ldv_params, &out ) ; - if ( perfs ) - { - perfs->prerun_ms = (1000L * (clock() - t0) ) / CLK_TCK ; - t0 = clock() ; - } - - if ( LDV_SUCCESS( err ) ) - { - if ( caps->Flags & LDVF_OPINPLACE ) - { - memcpy( &out, ldv_img, sizeof(LDV_IMAGE) ) ; - out.Raster.fd_nplanes = caps->NbPlanesOut ; - } - else - { - err = LDVAlloc( &out ) ; - if ( !LDV_SUCCESS( err ) ) RaRasterFree( &img_sel.Raster ) ; - } - } - - if ( perfs ) perfs->pre_ldv_ms += (1000L * (clock() - t0) ) / CLK_TCK ; - if ( LDV_SUCCESS( err ) ) - { -#if !defined(__NO_LOGGING) - int perf2log = ( LoggingGetLevel() >= LL_PERF ) ; - - if (perf2log) - { - char tmp[300], buf[100] ; - int n ; - - sprintf(tmp, "Running LDV with w=%d, h=%d", out.Raster.fd_w, out.Raster.fd_h) ; - for (n=0; n < ldv_params.NbParams; n++ ) - { - sprintf(buf, ", P%d=%d", n, ldv_params.Param[n].s) ; - strcat(tmp, buf) ; - } - LoggingDo(LL_DEBUG, tmp) ; - } -#endif - - if ( preview ) - { -#if !defined(__NO_LOGGING) - if (perf2log) t0 = clock() ; -#endif - if ( IModifImg->Preview ) err = IModifImg->Preview( ldv_img, &ldv_params, &out ) ; - else err = ELDV_PREVIEWNOTSUPPORTED ; -#if !defined(__NO_LOGGING) - if (perf2log) - LoggingDo(LL_PERF, "LDV Preview took %ldms", (1000L * (clock() - t0) ) / CLK_TCK) ; -#endif - } - else - { - if ( IModifImg->Run ) - { - int nflags ; - - if ( caps->Flags & LDVF_SUPPORTCANCEL ) nflags = 0 ; - else nflags = CLOSER ; /* Pas d'annulation possible par defaut */ - if ( ( caps->Flags & LDVF_SUPPORTPROG ) && ( LdvProg == NULL ) ) - LdvProg = DisplayStdProg( "", "", "", nflags ) ; - if ( LdvProg ) GWSetWindowCaption( LdvProg, "LDV ..." ) ; - if ( perfs ) t0 = clock() ; -#if !defined(__NO_LOGGING) - if ( perf2log ) t0 = clock() ; -#endif - err = IModifImg->Run( ldv_img, &ldv_params, &out ) ; - if ( perfs ) perfs->run_ms = (1000L * (clock() - t0) ) / CLK_TCK ; -#if !defined(__NO_LOGGING) - if (perf2log) - LoggingDo(LL_PERF, "LDV Run took %ldms", (1000L * (clock() - t0) ) / CLK_TCK) ; -#endif - if ( ( caps->Flags & LDVF_SUPPORTPROG ) && LdvProg ) - GWDestroyWindow( LdvProg ) ; - LdvProg = NULL ; - } - else - err = ELDV_RUNNOTSUPPORTED ; - } - - if ( LDV_SUCCESS( err ) ) - { - if ( perfs ) t0 = clock() ; - err = FormatLdvImgToSpec( &out ) ; - if ( LDV_SUCCESS( err ) ) - { - if ( img_sel.Raster.fd_addr ) - { - int xy[8] ; - int xs0, ys0, xd0, yd0, ws, hs, wd, hd, w, h ; - int mode = S_ONLY ; - - if (mode_vswr == MD_TRANS) mode = S_OR_D ; - else if (mode_vswr == MD_XOR) mode = S_XOR_D ; - else if (mode_vswr == MD_ERASE) mode = NOTS_AND_D ; - /* Replacer la selection dupliquee */ - /* Centrer le resultat sur le centre du bloc d'origine */ - wd = 1 + pldv_params->x2 - pldv_params->x1 ; - hd = 1 + pldv_params->y2 - pldv_params->y1 ; - ws = out.Raster.fd_w ; - hs = out.Raster.fd_h ; - if ( ws > wd ) - { - w = wd ; - xs0 = ( ws - w ) / 2 ; - xd0 = 0 ; - } - else - { - w = ws ; - xs0 = 0 ; - xd0 = ( wd - w ) / 2 ; - } - if ( hs > hd ) - { - h = hd ; - ys0 = ( hs - h ) / 2 ; - yd0 = 0 ; - } - else - { - h = hs ; - ys0 = 0 ; - yd0 = ( hd - h ) / 2 ; - } - - xy[0] = xs0 ; - xy[1] = ys0 ; - xy[2] = xy[0] + w - 1 ; - xy[3] = xy[1] + h - 1 ; - xy[4] = pldv_params->x1 + xd0 ; - xy[5] = pldv_params->y1 + yd0 ; - xy[6] = xy[4] + w - 1 ; - xy[7] = xy[5] + h - 1 ; - vro_cpyfm( handle, mode, xy, &out.Raster, &pldv_img->Raster ) ; - RaRasterFree( &img_sel.Raster ) ; - if ( ( caps->Flags & LDVF_OPINPLACE ) == 0 ) Xfree( out.Raster.fd_addr ) ; - } - else - { - if ( ( caps->Flags & LDVF_OPINPLACE ) == 0 ) Xfree( ldv_img->Raster.fd_addr ) ; - memcpy( &ldv_img->Raster, &out.Raster, sizeof(MFDB) ) ; - } - } - if ( perfs ) perfs->post_ldv_ms = (1000L * (clock() - t0) ) / CLK_TCK ; - } - else - { - if ( ( caps->Flags & LDVF_OPINPLACE ) == 0 ) Xfree( out.Raster.fd_addr ) ; - if ( out.Palette.Pal ) Xfree( out.Palette.Pal ) ; - } - } - - if ( perfs ) perfs->total_ms = (1000L * (clock() - t00) ) / CLK_TCK ; - - /* Run peut avoir modifie les valeurs des parametres */ - memcpy( &pldv_params->Param[0], &ldv_params.Param[0], LDVNBMAX_PARAMETERS*sizeof(LDV_BASICPARAM) ) ; - - return( err ) ; -} diff --git a/tools/vision/LDV/LDV.H b/tools/vision/LDV/LDV.H deleted file mode 100644 index 36f9295..0000000 --- a/tools/vision/LDV/LDV.H +++ /dev/null @@ -1,150 +0,0 @@ -#ifndef __LDV -#define __LDV - -#ifndef __LDG__ -#include -#endif - -#ifndef __VAPI -#include "ldv\vapi.h" -#endif - -/* Codes d'erreurs */ -typedef long LDV_STATUS ; /* Type de status retourne */ -#define ELDV_NOERROR 0x0 /* Pas d'erreur */ -#define ELDV_INVALIDPARAMETER 0x1 /* Au moins un parametre transmis est invalide */ -#define ELDV_NBPLANESNOTSUPPORTED 0x2 /* Nombre de plans non supporte */ -#define ELDV_NOTENOUGHMEMORY 0x3 /* Memoire insuffisante */ -#define ELDV_PREVIEWNOTSUPPORTED 0x4 /* Preview non supportee */ -#define ELDV_RUNNOTSUPPORTED 0x5 /* Run non supporte (!) */ -#define ELDV_BADVAPIVERSION 0x6 /* VAPI absent ou mauvaise version */ -#define ELDV_IMGFORMATMISMATCH 0x7 /* Format d'image incompatible */ -#define ELDV_CANCELLED 0x8 /* Operation annulee par l'utilisateur (GetParams par exemple) */ -#define ELDV_BADINTERFACE 0x9 /* Impossible : ce LDV ne possede pas la bonne interface */ -#define ELDV_GENERALFAILURE 0xF /* Echec general, raison non precisee */ - - -/* Pour finir, une petite macro pour tester si */ -/* Une fonction LDV a retourne une erreur */ -#define LDV_SUCCESS(x) ((x) == ELDV_NOERROR) - - -/* Types de LDV */ -#define TLDV_MODIFYIMG 0x01 /* Modificateur d'image : filtre, deformation, ... */ - /* Le nombre de plans de l'image reste inchange */ -#define TLDV_LOADIMG 0x02 /* Module de chargement d'image */ -#define TLDV_SAVEIMG 0x04 /* Module de sauvegarde d'image */ - -/* Structure de definition du LDV */ -/* Pour un nombre de plans defini */ -/* Masques de bits pour le champ Flags */ -#define LDVF_STDFORMAT 0x00000001UL /* Donnees image au format standard */ -#define LDVF_ATARIFORMAT 0x00000002UL /* Donnees image au format ATARI (Falcon) */ -#define LDVF_SPECFORMAT 0x00000004UL /* Donnees image au format specifique a la machine */ -#define LDVF_SUPPORTPREVIEW 0x00000008UL /* Support de la pre-visualisation */ -#define LDVF_AFFECTPALETTE 0x00000010UL /* Le module affecte la palette (si NbPlanes <= 8) */ -#define LDVF_SUPPORTPROG 0x00000020UL /* Le module appelera la fonction de progression */ -#define LDVF_OPINPLACE 0x00000040UL /* Le module modifie la source (param out ignore) */ -#define LDVF_REALTIMEPARAMS 0x00000080UL /* Le module supporte la modification en temps reel */ - /* Des parametres (mode Preview) */ -#define LDVF_SUPPORTCANCEL 0x00000100UL /* Le module gere l'annulation (voir PrSetProgEx) */ -#define LDVF_NOSELECTION 0x00000200UL /* Le module ne peut pas g‚rer la selection */ - -/* Cette structure definit ce que ce LDV sait faire, */ -/* Pour un nombre donne de plans en entree */ -typedef struct -{ - char NbPlanes ; /* Nombre de plans de l'image : */ - /* 0 : Fin de cette structure */ - /* 1, 2, 4, 8, 16, 24, ou 32 */ - - char NbPlanesOut ; /* Nombre de plans en sortie */ - - unsigned long Flags ; /* LDVF_... */ -} -LDV_CAPS ; - -/* Cette structure rassemble les infos du module qui sont */ -/* Suceptibles de pouvoir etre traduites dans d'autres langues */ -/* Un fichier .INI doit etre associe (voir SMP_LDV.INI pour exemple) */ - -#define LDVNBMAX_PARAMETERS 4 /* Nombre maximal de parametres pouvant etre gere */ - /* Depuis VISION et passes au travers de LDV_PARAMS */ - -typedef union -{ - short s ; - float f ; -} -LDV_BASICPARAM ; - -#define LDVT_SHORT 1 -#define LDVT_FLOAT 2 -typedef struct -{ - char Name[1+15] ; - char Type ; - LDV_BASICPARAM MinValue ; - LDV_BASICPARAM DefaultValue ; - LDV_BASICPARAM MaxValue ; - float FloatIncrement ; -} -LDV_DEF_PARAM ; - -typedef struct -{ - short StrSize ; /* Taille de la structure LDV_INFOS */ - short Type ; /* TLDV_... */ - char Authors[1+45] ; /* Liste du ou des auteurs */ - - LDV_CAPS Caps[10] ; /* Ce que ce LDV sait faire, pour */ - /* Chaque type d'image */ - /* Mettre cette structure a zero */ - /* Des que la liste est terminee */ - /* Un maximum de 9 elements utiles */ - /* Est donc disponible */ - - char RFU[16] ; /* Usage futur */ -} -LDV_INFOS ; - -typedef struct -{ - short Red ; /* 0...1000 */ - short Green ; /* 0...1000 */ - short Blue ; /* 0...1000 */ -} -VDI_ELEMENTPAL ; - -typedef struct -{ - short NbColors ; /* Nombre d'index dans cette palette */ - VDI_ELEMENTPAL *Pal ; /* ATTENTION : Palette indexee sur les indices VDI */ -} -LDV_PALETTE ; - -typedef struct -{ - short x1, y1, x2, y2 ; /* Rectangle definissant la partie du MFDB a traiter */ - short NbParams ; - LDV_BASICPARAM Param[LDVNBMAX_PARAMETERS] ; - void *UserParam ; /* Peut etre utilise avec GetParams */ -} -LDV_PARAMS ; - -/* Parametres d'entree de la fonction a effectuer par le LDV */ -typedef struct -{ - short RasterFormat ; /* LDVF_STDFORMAT, LDVF_ATARIFORMAT ou LDVF_SPECFORMAT */ - /* VISION choisit automatiquement le format optimal en */ - /* Fonction des capacites du LDV fournies par la */ - /* Fonction GetLDVCapabilities */ - - MFDB Raster ; /* Image */ - - LDV_PALETTE Palette ; /* Structure fournie si Raster.fd_nplanes > 8 */ -} -LDV_IMAGE ; - - -#endif diff --git a/tools/vision/LDV/LDVCOM.H b/tools/vision/LDV/LDVCOM.H deleted file mode 100644 index 4ff68c5..0000000 --- a/tools/vision/LDV/LDVCOM.H +++ /dev/null @@ -1,102 +0,0 @@ -#ifndef __LDVCOM -#define __LDVCOM - -#ifndef __LDV -#include "ldv\ldv.h" -#endif - -typedef struct -{ - char *ShortName ; /* Nom court du module (15 carac. max) */ - char *LongName ; /* Nom long du module (31 carac. max) */ - char *Description ; /* Description du module (79 carac. max) */ - - /* Definition des parametres pouvant etre applique */ - LDV_DEF_PARAM Params[LDVNBMAX_PARAMETERS] ; -} -LDV_INI_SPEC ; - -/* Interface pour la modification d'image */ -typedef struct -{ - /* Permet a VISION d'allouer les ressources */ - /* Necessaires a la fonction assuree par le LDV */ - /* Renvoyer dans out->Raster les dimensions */ - /* Voulues et/ou renseigner le champ out->Palette.NbColors */ - /* Renvoyer dans params, la totalite de la zone a envoyer */ - /* Dans le Undo */ - LDV_STATUS cdecl (*PreRun)(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) ; - - /* Effectue la fonction du LDV */ - /* VISION a deja alloue la memoire voulue grace a la fonction precedente */ - /* NE SURTOUT PAS ALLOUER OU LIBERER DE LA MEMOIRE QUI SERA UTILISEE PAR */ - /* VISION ! */ - LDV_STATUS cdecl (*Run)(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) ; - - /* Identique a la fonction precedente, mais en mode Preview */ - LDV_STATUS cdecl (*Preview)(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) ; - - /* Optionnel : Si cette fonction est presente, VISION l'appelera a la place */ - /* de la fonction interne pour parametrer le module */ - /* Si la valeur de retour est differente de ELDV_NOERROR, VISION consderera */ - /* Que la saisie a ete annulee (comme si vous aviez appuye sur "Cancel" dans */ - /* Le formulaire standard de saisie. */ - LDV_STATUS cdecl (*GetParams)(LDV_IMAGE *img, LDV_PARAMS *params, char *path) ; -} -ILDVModifImg ; - -typedef struct -{ - long RFU[10] ; -} -ILDVLoadImg ; - -typedef struct -{ - long RFU[10] ; -} -ILDVSaveImg ; - -typedef struct -{ - LDG *Ldg ; /* Le module LDG */ - - char *FileName ; /* Nom uniquement, sans le chemin */ - short Version ; /* Idem que Ldg->vers */ - - LDV_INFOS Infos ; /* Informations sur ce module */ - LDV_INI_SPEC IniSpec ; /* Specifique au .INI */ - - /* Indique a VISION ce que ce LDV sait faire */ - /* VISION fournit son interface de programmation vapi */ - LDV_INFOS * cdecl (*GetLDVCapabilities)(VAPI *vapi) ; - - int NbReferences ; /* Nombre de references en cours sur ce module */ - ILDVModifImg *IModifImg ; /* Interface pour le type TLDV_MODIFYIMG */ - ILDVLoadImg *ILoadImg ; /* Interface pour le type TLDV_LOADIMG */ - ILDVSaveImg *ISaveImg ; /* Interface pour le type TLDV_SAVEIMG */ - long RFUInterfaces[10] ; /* Interfaces de reserve */ -} -LDV_MODULE ; - -typedef struct -{ - unsigned long prerun_ms ; - unsigned long pre_ldv_ms ; - unsigned long run_ms ; - unsigned long post_ldv_ms ; - unsigned long total_ms ; -} -LDV_PERF ; - -LDV_CAPS *LDVGetNPlanesCaps(LDV_MODULE *mod, int nplanes) ; -LDV_MODULE *LDVGetModuleList(char *path, int *nb_ldv) ; -void LDVFreeModuleList(LDV_MODULE *module_list) ; -LDV_MODULE *GetLdvByLdg(LDV_MODULE *ldv_list, LDG *ldg) ; -LDV_STATUS LDVAlloc(LDV_IMAGE *img) ; -LDV_STATUS LDVDo(LDV_MODULE *ldv, LDV_PARAMS *ldv_params, LDV_IMAGE *ldv_img, int preview, LDV_PERF *perfs) ; - -LDV_STATUS LDVLoadFunctions(char *path, LDV_MODULE *mod) ; -void LDVUnloadFunctions(LDV_MODULE *mod) ; - -#endif diff --git a/tools/vision/LDV/LIGHT.LDV b/tools/vision/LDV/LIGHT.LDV deleted file mode 100644 index 8b35128..0000000 Binary files a/tools/vision/LDV/LIGHT.LDV and /dev/null differ diff --git a/tools/vision/LDV/PIXEL.LDV b/tools/vision/LDV/PIXEL.LDV deleted file mode 100644 index 446830f..0000000 Binary files a/tools/vision/LDV/PIXEL.LDV and /dev/null differ diff --git a/tools/vision/LDV/ROTATE.LDV b/tools/vision/LDV/ROTATE.LDV deleted file mode 100644 index 6b268c4..0000000 Binary files a/tools/vision/LDV/ROTATE.LDV and /dev/null differ diff --git a/tools/vision/LDV/SRC/BW/BW.LDV b/tools/vision/LDV/SRC/BW/BW.LDV deleted file mode 100644 index dcddb47..0000000 Binary files a/tools/vision/LDV/SRC/BW/BW.LDV and /dev/null differ diff --git a/tools/vision/LDV/SRC/INVERT/INVERT.LDV b/tools/vision/LDV/SRC/INVERT/INVERT.LDV deleted file mode 100644 index 9d29d3b..0000000 Binary files a/tools/vision/LDV/SRC/INVERT/INVERT.LDV and /dev/null differ diff --git a/tools/vision/LDV/SRC/PIXEL/PIXEL.LDV b/tools/vision/LDV/SRC/PIXEL/PIXEL.LDV deleted file mode 100644 index 446830f..0000000 Binary files a/tools/vision/LDV/SRC/PIXEL/PIXEL.LDV and /dev/null differ diff --git a/tools/vision/LDV/SRC/YPERSC/YPERSC.LDV b/tools/vision/LDV/SRC/YPERSC/YPERSC.LDV deleted file mode 100644 index b1a83ca..0000000 Binary files a/tools/vision/LDV/SRC/YPERSC/YPERSC.LDV and /dev/null differ diff --git a/tools/vision/LDV/SRC/bhole/bhole.ldv b/tools/vision/LDV/SRC/bhole/bhole.ldv deleted file mode 100644 index 3f923fa..0000000 Binary files a/tools/vision/LDV/SRC/bhole/bhole.ldv and /dev/null differ diff --git a/tools/vision/LDV/SRC/bhole/bhole.lst b/tools/vision/LDV/SRC/bhole/bhole.lst deleted file mode 100644 index 0ec1228..0000000 --- a/tools/vision/LDV/SRC/bhole/bhole.lst +++ /dev/null @@ -1,1054 +0,0 @@ - PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 1 -Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S - - 1 .IMPORT pre_cosin ; array of 2*ITRIGO_ARRAY_SIZE longs - 2 .IMPORT pre_loffset ; long* - 3 .EXPORT bh_xd, bh_yd, bh_rd2 ; long - 4 .EXPORT bh_xs, bh_ys, bh_ref ; long - 5 .EXPORT bh_xc, bh_yc ; long - 6 .EXPORT bh_out_w, bh_out_h ; short - 7 .EXPORT bh_in_w, bh_in_h ; short - 8 .EXPORT bh_out_x, bh_out_y ; short - 9 .EXPORT BHL32_68030,BHL16_68030,BHLInd_68030 - 10 .EXPORT BHL32_F68030,BHL16_F68030,BHLInd_F68030 - 11 .EXPORT lcosin_fpu - 12 - 13 ITRIGO_ARRAY_SIZE EQU (1 << 14) - 14 ITRIGO_ANGLE_MAX EQU (ITRIGO_ARRAY_SIZE-1) - 15 QUARTER EQU (ITRIGO_ARRAY_SIZE/4) - 16 - 17 ; The black hole transformation consists of: - 18 ; Rotate the destination pixel around the black hole center - 19 ; The closest we are to the black hole, the bigger the rotation angle is - 20 ; We have 2 or 3 parts of computation angle for black hole transformation: - 21 ; 1: Just before dividing the maximum possible angle (depending on LDV paramter Rotation angle) by: - 22 ; CPU: the square of distance to black hole center - 23 ; FPU: the distance to black hole center; here we need 68881 instruction FSQRT - 24 ; So there are 3 parts in macro calculations: - 25 ; 1. Before dividing by distance or its square - 26 ; 1a. (FPU only) Compute distance - 27 ; 3. Divide by either distance or its square and state if the resulting pixel is in source image - 28 ; Dividing by distance instead of its square gives better visual results - 29 MACRO BH_COMP_1 - 30 MOVE.L A6,D0 ; Remember A6=bh_xd - 31 ADD.L D0,D0 - 32 ADDQ.L #1,D0 - 33 MOVE.L A5,D1 ; Remember A5=bh_rd2 - 34 ADD.L D0,D1 ; bh_rd2(D1)=1+2*bh_xd(D0) - 35 MOVE.L bh_ref(PC),D2 - 36 MOVE.L D1,A5 ; Save bh_rd2, free D1 - 37 ADDQ.L #1,D1 ; We need bh_rd2+1 for divide - 38 ENDM - 39 - 40 MACRO BH_COMP_2 bail_out_addr - 41 DIVU.L D1,D2 ; alpha(D2)=bh_ref/(1+bh_rd2) - 42 ANDI.L #ITRIGO_ANGLE_MAX,D2 ; alpha &= ITRIGO_ANGLE_MAX - 43 - 44 LSL.L #3,D2 ; D2=offset for pre_cosin array - 45 MOVE.L A6,D0 ; D0=bh_xd - 46 MOVE.L bh_yd(PC),D1 ; D1=bh_yd - 47 MOVE.L 4(A2,D2.L),D3 ; A2->pre_cosin, D3.L=SIN(alpha) - 48 MOVE.L (A2,D2.L),D2 ; A2->pre_cosin, D2.L=COS(alpha) - 49 - 50 MOVEQ.L #16,D6 ; Prepare shifts/assume not in range - 51 - 52 MOVE.L D0,D4 - 53 MULS.L D2,D4 ; D4=bh_xd * pre_cos[alpha] - 54 MOVE.L D1,D5 - 55 MULS.L D3,D5 ; D5=bh_yd * pre_sin[alpha] - 56 SUB.L D5,D4 ; D4=bh_xd * pre_cos[alpha] - bh_yd * pre_sin[alpha] - PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 2 -Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S - - 57 ASR.L D6,D4 - 58 ADD.L bh_xc(PC),D4 ; D6=16, assume pixel not in range - 59 BLT.S bail_out_addr ; xs < 0: not in range - 60 CMP.W bh_in_w(PC),D4 - 61 BGE.S bail_out_addr ; xs >= bh_in_w: not in range - 62 MOVE.L D4,A3 ; A3=bh_xs= (D4 >> 16) - 63 - 64 MOVE.L D0,D4 - 65 MULS.L D3,D4 ; D4=bh_xd * pre_sin[alpha] - 66 MOVE.L D1,D5 - 67 MULS.L D2,D5 ; D5=bh_yd * pre_cos[alpha] - 68 ADD.L D5,D4 ; D4=bh_xd * pre_sin[alpha] + bh_yd * pre_cos[alpha] - 69 ASR.L D6,D4 - 70 ADD.L bh_yc(PC),D4 ; D4.L=bh_ys - 71 BLT.S bail_out_addr ; ys < 0: not in range - 72 CMP.W bh_in_h(PC),D4 - 73 BGE.S bail_out_addr ; ys >= bh_in_h: not in range - 74 MOVEQ.L #0,D6 ; pixel in range - 75 ENDM - 76 - 77 ; Macro for CPU 68030 - 78 MACRO BH_COMPUTE_CPU bail_out_addr - 79 BH_COMP_1 - 80 BH_COMP_2 bail_out_addr - 81 ENDM - 82 - 83 ; Macro for using FPU - 84 ; What we do with FPU is to compute the square root of D1 which - 85 ; Is then the distance to the back hole center instead of its square - 86 MACRO BH_COMPUTE_FPU bail_out_addr - 87 BH_COMP_1 - 88 FMOVE.L D1,FP0 - 89 FSQRT FP0 - 90 FMOVE.L FP0,D1 - 91 BH_COMP_2 bail_out_addr - 92 ENDM - 93 - 94 ; Init parameters valid for the entire call - 95 MACRO INIT_BHL - 96 LEA.L pre_cosin,A2 - 97 MOVE.L pre_loffset,A4 ; A4-->preoffset - 98 MOVE.L bh_rd2(PC),A5 ; A5=bh_rd2 - 99 MOVE.L bh_xd(PC),A6 ; A6=bh_xd - 100 MOVE.W bh_out_w(PC),D7 - 101 SUBQ.W #1,D7 ; For DBF - 102 ENDM - 103 - 104 MACRO INIT_BHL_SYM - 105 LEA.L pre_cosin,A2 - 106 MOVE.L pre_loffset,A4 ; A4-->preoffset - 107 MOVE.L bh_rd2(PC),A5 ; A5=bh_rd2 - 108 MOVE.L bh_xd(PC),A6 ; A6=bh_xd - 109 MOVE.W bh_out_w(PC),D7 - 110 LSR.W #1,D7 ; loop to bh_out_w/2 counts - 111 ADD.W A6,D7 ; starting from bh_xd - 112 MOVE.W D7,last_xd - PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 3 -Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S - - 113 ENDM - 114 - 115 ; Get pixel TC32 -->dest (Dx) - 116 ; A4-->pre_loffset - 117 MACRO GET_TCPIXEL32 p,x,y,dest - 118 MOVE.L (A4,y.L*4),dest - 119 ADD.L x,dest - 120 MOVE.L (p,dest.L*4),dest - 121 ENDM - 122 - 123 ; Set pixel TC32 val(Dx) -->dest - 124 ; A4-->pre_loffset - 125 ; scratch_Dx scratch variable - 126 MACRO SET_TCPIXEL32 p,x,y,val,scratch_Dx - 127 MOVE.L (A4,y.L*4),scratch_Dx - 128 ADD.L x,scratch_Dx - 129 MOVE.L val,(p,scratch_Dx.L*4) - 130 ENDM - 131 - 132 ; Get pixel TC16 -->dest (Dx) - 133 ; A4-->pre_loffset - 134 MACRO GET_TCPIXEL16 p,x,y,dest - 135 MOVE.L (A4,y.L*4),dest - 136 ADD.L x,dest - 137 MOVE.W (p,dest.L*2),dest - 138 ENDM - 139 - 140 ; Set pixel TC16 val(Dx) -->dest - 141 ; A4-->pre_loffset - 142 ; scratch_Dx scratch variable - 143 MACRO SET_TCPIXEL16 p,x,y,val,scratch_Dx - 144 MOVE.L (A4,y.L*4),scratch_Dx - 145 ADD.L x,scratch_Dx - 146 MOVE.W val,(p,scratch_Dx.L*2) - 147 ENDM - 148 - 149 ; Rotate 90 - 150 ; x,y,scratch_Dx : registers, y has to be Dx - 151 ; #define R90(x,y) { long _x=x; x=-y; y=_x; } - 152 MACRO R90 x,y,scratch_Dx - 153 MOVE.L x,scratch_Dx - 154 NEG.L y - 155 MOVE.L y,x - 156 MOVE.L scratch_Dx,y - 157 ENDM - 158 - 159 MACRO PIXINIMG x,y,w,h,bailout - 160 TST.W x - 161 BLT.S bailout - 162 TST.W y - 163 BLT.S bailout - 164 CMP.W w,x - 165 BGE.S bailout - 166 CMP.W h,y - 167 BGE.S bailout - 168 ENDM - PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 4 -Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S - - 169 - 170 ; On sample file 00_1480ms.jpg, Aranym 32bit: - 171 ; BHL32_68000 takes about 1450ms - 172 ; BHL32_68030 takes about 740ms - 173 - 174 ; 68030 routine for True Color 32bit - 175 ; BHL32_68030(short use_sym, void* in, void* out) - 176 ; D0, A0 A1 - 177 00000000' BHL32_68030: - 178 00000000' 48E7 FF3E MOVEM.L D0-D7/A2-A6,-(SP) ; Save context - 179 - 180 00000004' 4A40 TST.W D0 - 181 00000006' 6600 00AE BNE BHL32_68030_sym - 182 - 183 0000000A' 7E00 MOVEQ.L #0,D7 - 184 0000000C' 3E3A 0488 MOVE.W bh_out_x(PC),D7 - 185 00000010' E58F LSL.L #2,D7 - 186 00000012' D3C7 ADD.L D7,A1 ; A1-->&out[bh_out_x] - 187 INIT_BHL - 96 00000014' 45F9 00000000* + LEA.L pre_cosin,A2 - 97 0000001A' 2879 00000000* + MOVE.L pre_loffset,A4 ; A4-->preoffset - 98 00000020' 2A7A 0454 + MOVE.L bh_rd2(PC),A5 ; A5=bh_rd2 - 99 00000024' 2C7A 0448 + MOVE.L bh_xd(PC),A6 ; A6=bh_xd - 100 00000028' 3E3A 0464 + MOVE.W bh_out_w(PC),D7 - 101 0000002C' 5347 + SUBQ.W #1,D7 ; For DBF - 188 0000002E' bhl32_l030: - 189 BH_COMPUTE_CPU bhl32_tpir_030 ; -->D6=0:pixel in range - 30 0000002E' 200E + MOVE.L A6,D0 ; Remember A6=bh_xd - 31 00000030' D080 + ADD.L D0,D0 - 32 00000032' 5280 + ADDQ.L #1,D0 - 33 00000034' 220D + MOVE.L A5,D1 ; Remember A5=bh_rd2 - 34 00000036' D280 + ADD.L D0,D1 ; bh_rd2(D1)=1+2*bh_xd(D0) - 35 00000038' 243A 0448 + MOVE.L bh_ref(PC),D2 - 36 0000003C' 2A41 + MOVE.L D1,A5 ; Save bh_rd2, free D1 - 37 0000003E' 5281 + ADDQ.L #1,D1 ; We need bh_rd2+1 for divide - 41 00000040' 4C41 2002 + DIVU.L D1,D2 ; alpha(D2)=bh_ref/(1+bh_rd2) - 42 00000044' 0282 0000 3FFF + ANDI.L #ITRIGO_ANGLE_MAX,D2 ; alpha &= ITRIGO_ANGLE_MAX - 44 0000004A' E78A + LSL.L #3,D2 ; D2=offset for pre_cosin array - 45 0000004C' 200E + MOVE.L A6,D0 ; D0=bh_xd - 46 0000004E' 223A 0422 + MOVE.L bh_yd(PC),D1 ; D1=bh_yd - 47 00000052' 2632 2804 + MOVE.L 4(A2,D2.L),D3 ; A2->pre_cosin, D3.L=SIN(alpha) - 48 00000056' 2432 2800 + MOVE.L (A2,D2.L),D2 ; A2->pre_cosin, D2.L=COS(alpha) - 50 0000005A' 7C10 + MOVEQ.L #16,D6 ; Prepare shifts/assume not in range - 52 0000005C' 2800 + MOVE.L D0,D4 - 53 0000005E' 4C02 4800 + MULS.L D2,D4 ; D4=bh_xd * pre_cos[alpha] - 54 00000062' 2A01 + MOVE.L D1,D5 - 55 00000064' 4C03 5800 + MULS.L D3,D5 ; D5=bh_yd * pre_sin[alpha] - 56 00000068' 9885 + SUB.L D5,D4 ; D4=bh_xd * pre_cos[alpha] - bh_yd * pre_sin[alpha] - 57 0000006A' ECA4 + ASR.L D6,D4 - 58 0000006C' D8BA 0418 + ADD.L bh_xc(PC),D4 ; D6=16, assume pixel not in range - 59 00000070' 6D 26 + BLT.S bhl32_tpir_030 ; xs < 0: not in range - 60 00000072' B87A 041E + CMP.W bh_in_w(PC),D4 - 61 00000076' 6C 20 + BGE.S bhl32_tpir_030 ; xs >= bh_in_w: not in range - 62 00000078' 2644 + MOVE.L D4,A3 ; A3=bh_xs= (D4 >> 16) - 64 0000007A' 2800 + MOVE.L D0,D4 - 65 0000007C' 4C03 4800 + MULS.L D3,D4 ; D4=bh_xd * pre_sin[alpha] - PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 5 -Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S - - 66 00000080' 2A01 + MOVE.L D1,D5 - 67 00000082' 4C02 5800 + MULS.L D2,D5 ; D5=bh_yd * pre_cos[alpha] - 68 00000086' D885 + ADD.L D5,D4 ; D4=bh_xd * pre_sin[alpha] + bh_yd * pre_cos[alpha] - 69 00000088' ECA4 + ASR.L D6,D4 - 70 0000008A' D8BA 03FE + ADD.L bh_yc(PC),D4 ; D4.L=bh_ys - 71 0000008E' 6D 08 + BLT.S bhl32_tpir_030 ; ys < 0: not in range - 72 00000090' B87A 0402 + CMP.W bh_in_h(PC),D4 - 73 00000094' 6C 02 + BGE.S bhl32_tpir_030 ; ys >= bh_in_h: not in range - 74 00000096' 7C00 + MOVEQ.L #0,D6 ; pixel in range - 190 00000098' bhl32_tpir_030: - 191 00000098' 70FF MOVEQ.L #-1,D0 ; Assume out of range - 192 0000009A' 4A46 TST.W D6 - 193 0000009C' 66 0A BNE.S bhl32_setpix_030 - 194 0000009E' 2034 4C00 MOVE.L (A4,D4.L*4),D0 ; D4=bh_ys, D0=pre_loffset[bh_ys] - 195 000000A2' D08B ADD.L A3,D0 ; D0=pre_loffset[bh_ys] + bh_xs(A3) - 196 000000A4' 2030 0C00 MOVE.L (A0,D0.L*4),D0 ; D0=in_ptr[pre_loffset[bh_ys] + bh_xs] - 197 000000A8' bhl32_setpix_030: - 198 000000A8' 22C0 MOVE.L D0,(A1)+ - 199 000000AA' 528E ADD.L #1,A6 ; bh_xd++ - 200 000000AC' 51CF FF80 DBF D7,bhl32_l030 - 201 - 202 000000B0' 4CDF 7CFF MOVEM.L (SP)+,D0-D7/A2-A6 ; Restore context - 203 000000B4' 4E75 RTS - 204 - 205 000000B6' BHL32_68030_sym: - 206 INIT_BHL_SYM - 105 000000B6' 45F9 00000000* + LEA.L pre_cosin,A2 - 106 000000BC' 2879 00000000* + MOVE.L pre_loffset,A4 ; A4-->preoffset - 107 000000C2' 2A7A 03B2 + MOVE.L bh_rd2(PC),A5 ; A5=bh_rd2 - 108 000000C6' 2C7A 03A6 + MOVE.L bh_xd(PC),A6 ; A6=bh_xd - 109 000000CA' 3E3A 03C2 + MOVE.W bh_out_w(PC),D7 - 110 000000CE' E24F + LSR.W #1,D7 ; loop to bh_out_w/2 counts - 111 000000D0' DE4E + ADD.W A6,D7 ; starting from bh_xd - 112 000000D2' 33C7 00000000' + MOVE.W D7,last_xd - 207 000000D8' bhl32_l030_sym: - 208 BH_COMPUTE_CPU bhl32_tpir_030_sym ; -->D6=0:pixel in range - 30 000000D8' 200E + MOVE.L A6,D0 ; Remember A6=bh_xd - 31 000000DA' D080 + ADD.L D0,D0 - 32 000000DC' 5280 + ADDQ.L #1,D0 - 33 000000DE' 220D + MOVE.L A5,D1 ; Remember A5=bh_rd2 - 34 000000E0' D280 + ADD.L D0,D1 ; bh_rd2(D1)=1+2*bh_xd(D0) - 35 000000E2' 243A 039E + MOVE.L bh_ref(PC),D2 - 36 000000E6' 2A41 + MOVE.L D1,A5 ; Save bh_rd2, free D1 - 37 000000E8' 5281 + ADDQ.L #1,D1 ; We need bh_rd2+1 for divide - 41 000000EA' 4C41 2002 + DIVU.L D1,D2 ; alpha(D2)=bh_ref/(1+bh_rd2) - 42 000000EE' 0282 0000 3FFF + ANDI.L #ITRIGO_ANGLE_MAX,D2 ; alpha &= ITRIGO_ANGLE_MAX - 44 000000F4' E78A + LSL.L #3,D2 ; D2=offset for pre_cosin array - 45 000000F6' 200E + MOVE.L A6,D0 ; D0=bh_xd - 46 000000F8' 223A 0378 + MOVE.L bh_yd(PC),D1 ; D1=bh_yd - 47 000000FC' 2632 2804 + MOVE.L 4(A2,D2.L),D3 ; A2->pre_cosin, D3.L=SIN(alpha) - 48 00000100' 2432 2800 + MOVE.L (A2,D2.L),D2 ; A2->pre_cosin, D2.L=COS(alpha) - 50 00000104' 7C10 + MOVEQ.L #16,D6 ; Prepare shifts/assume not in range - 52 00000106' 2800 + MOVE.L D0,D4 - 53 00000108' 4C02 4800 + MULS.L D2,D4 ; D4=bh_xd * pre_cos[alpha] - 54 0000010C' 2A01 + MOVE.L D1,D5 - 55 0000010E' 4C03 5800 + MULS.L D3,D5 ; D5=bh_yd * pre_sin[alpha] - PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 6 -Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S - - 56 00000112' 9885 + SUB.L D5,D4 ; D4=bh_xd * pre_cos[alpha] - bh_yd * pre_sin[alpha] - 57 00000114' ECA4 + ASR.L D6,D4 - 58 00000116' D8BA 036E + ADD.L bh_xc(PC),D4 ; D6=16, assume pixel not in range - 59 0000011A' 6D 26 + BLT.S bhl32_tpir_030_sym ; xs < 0: not in range - 60 0000011C' B87A 0374 + CMP.W bh_in_w(PC),D4 - 61 00000120' 6C 20 + BGE.S bhl32_tpir_030_sym ; xs >= bh_in_w: not in range - 62 00000122' 2644 + MOVE.L D4,A3 ; A3=bh_xs= (D4 >> 16) - 64 00000124' 2800 + MOVE.L D0,D4 - 65 00000126' 4C03 4800 + MULS.L D3,D4 ; D4=bh_xd * pre_sin[alpha] - 66 0000012A' 2A01 + MOVE.L D1,D5 - 67 0000012C' 4C02 5800 + MULS.L D2,D5 ; D5=bh_yd * pre_cos[alpha] - 68 00000130' D885 + ADD.L D5,D4 ; D4=bh_xd * pre_sin[alpha] + bh_yd * pre_cos[alpha] - 69 00000132' ECA4 + ASR.L D6,D4 - 70 00000134' D8BA 0354 + ADD.L bh_yc(PC),D4 ; D4.L=bh_ys - 71 00000138' 6D 08 + BLT.S bhl32_tpir_030_sym ; ys < 0: not in range - 72 0000013A' B87A 0358 + CMP.W bh_in_h(PC),D4 - 73 0000013E' 6C 02 + BGE.S bhl32_tpir_030_sym ; ys >= bh_in_h: not in range - 74 00000140' 7C00 + MOVEQ.L #0,D6 ; pixel in range - 209 00000142' bhl32_tpir_030_sym: - 210 00000142' 70FF MOVEQ.L #-1,D0 ; Assume out of range - 211 00000144' 4A46 TST.W D6 - 212 00000146' 66 0A BNE.S bhl32_setpix_030_sym - 213 GET_TCPIXEL32 A0,A3,D4,D0 ; A0-->in_ptr, A3=bh_xs+bh_xc, D4=bh_ys+bh_yc - 118 00000148' 2034 4C00 + MOVE.L (A4,D4.L*4),D0 - 119 0000014C' D08B + ADD.L A3,D0 - 120 0000014E' 2030 0C00 + MOVE.L (A0,D0.L*4),D0 - 214 ; D0=GET_TCPIXEL(in_ptr, bh_xs+bh_xc, bh_ys+bh_yc) - 215 00000152' bhl32_setpix_030_sym: - 216 00000152' 2F0E MOVE.L A6,-(SP) ; Save bh_xd - 217 00000154' 243A 0330 MOVE.L bh_xc(PC),D2 ; D2=bh_xc - 218 00000158' 263A 0330 MOVE.L bh_yc(PC),D3 ; D3=bh_yc - 219 0000015C' DDC2 ADD.L D2,A6 ; A6=bh_xd+bh_xc - 220 0000015E' 2E3A 0312 MOVE.L bh_yd(PC),D7 - 221 00000162' DE83 ADD.L D3,D7 ; D7=bh_yd+bh_yc - 222 SET_TCPIXEL32 A1,A6,D7,D0,D5 ; SET_TCPIXEL(out_ptr, bh_xd+bh_xc, bh_yd+bh_yc, GET_TCPIXEL(in_ptr, bh_xs+bh_xc, bh_ys+bh_yc)) - 127 00000164' 2A34 7C00 + MOVE.L (A4,D7.L*4),D5 - 128 00000168' DA8E + ADD.L A6,D5 - 129 0000016A' 2380 5C00 + MOVE.L D0,(A1,D5.L*4) - 223 - 224 0000016E' 7202 MOVEQ.L #2,D1 ; 3 loops, -1 for DBF - 225 00000170' deduc32_030: - 226 00000170' 97C2 SUB.L D2,A3 ; We need now bh_xs(A3) and bh_ys(D4) relative to - 227 00000172' 9883 SUB.L D3,D4 ; Black Hole center to use R90 - 228 00000174' 9DC2 SUB.L D2,A6 ; We need now bh_xd(A6) and bh_yd(D7) relative to - 229 00000176' 9E83 SUB.L D3,D7 ; Black Hole center to use R90 - 230 - 231 R90 A6,D7,D0 ; Rotate (xd,yd) by PI/4 - 153 00000178' 200E + MOVE.L A6,D0 - 154 0000017A' 4487 + NEG.L D7 - 155 0000017C' 2C47 + MOVE.L D7,A6 - 156 0000017E' 2E00 + MOVE.L D0,D7 - 232 R90 A3,D4,D0 ; Rotate (xs,ys) by PI/4 - 153 00000180' 200B + MOVE.L A3,D0 - 154 00000182' 4484 + NEG.L D4 - 155 00000184' 2644 + MOVE.L D4,A3 - 156 00000186' 2800 + MOVE.L D0,D4 - PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 7 -Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S - - 233 - 234 00000188' D7C2 ADD.L D2,A3 ; Now we need coords in image raster - 235 0000018A' D883 ADD.L D3,D4 - 236 0000018C' DDC2 ADD.L D2,A6 - 237 0000018E' DE83 ADD.L D3,D7 - 238 - 239 PIXINIMG A6,D7,bh_in_w(PC),bh_in_h(PC),dnotinimg32_030 ; Check if pixel in dest is within bounds - 160 00000190' 4A4E + TST.W A6 - 161 00000192' 6D 3A + BLT.S dnotinimg32_030 - 162 00000194' 4A47 + TST.W D7 - 163 00000196' 6D 36 + BLT.S dnotinimg32_030 - 164 00000198' BCFA 02F8 + CMP.W bh_in_w(PC),A6 - 165 0000019C' 6C 30 + BGE.S dnotinimg32_030 - 166 0000019E' BE7A 02F4 + CMP.W bh_in_h(PC),D7 - 167 000001A2' 6C 2A + BGE.S dnotinimg32_030 - 240 000001A4' 70FF MOVEQ.L #-1,D0 ; Assume out of range - 241 PIXINIMG A3,D4,bh_in_w(PC),bh_in_h(PC),plotdest32_030 ; Check if pixel in src is within bounds - 160 000001A6' 4A4B + TST.W A3 - 161 000001A8' 6D 1A + BLT.S plotdest32_030 - 162 000001AA' 4A44 + TST.W D4 - 163 000001AC' 6D 16 + BLT.S plotdest32_030 - 164 000001AE' B6FA 02E2 + CMP.W bh_in_w(PC),A3 - 165 000001B2' 6C 10 + BGE.S plotdest32_030 - 166 000001B4' B87A 02DE + CMP.W bh_in_h(PC),D4 - 167 000001B8' 6C 0A + BGE.S plotdest32_030 - 242 GET_TCPIXEL32 A0,A3,D4,D0 ; A0-->in_ptr, A3=bh_xs+bh_xc, D4=bh_ys+bh_yc - 118 000001BA' 2034 4C00 + MOVE.L (A4,D4.L*4),D0 - 119 000001BE' D08B + ADD.L A3,D0 - 120 000001C0' 2030 0C00 + MOVE.L (A0,D0.L*4),D0 - 243 ; D0=GET_TCPIXEL(in_ptr, bh_xs+bh_xc, bh_ys+bh_yc) - 244 000001C4' plotdest32_030: - 245 SET_TCPIXEL32 A1,A6,D7,D0,D5 ; SET_TCPIXEL(out_ptr, bh_xd+bh_xc, bh_yd+bh_yc, GET_TCPIXEL(in_ptr, bh_xs+bh_xc, bh_ys+bh_yc)) - 127 000001C4' 2A34 7C00 + MOVE.L (A4,D7.L*4),D5 - 128 000001C8' DA8E + ADD.L A6,D5 - 129 000001CA' 2380 5C00 + MOVE.L D0,(A1,D5.L*4) - 246 000001CE' dnotinimg32_030: - 247 000001CE' 51C9 FFA0 DBF D1,deduc32_030 - 248 - 249 000001D2' 2C5F MOVE.L (SP)+,A6 ; Restore bh_xd - 250 000001D4' 528E ADD.L #1,A6 ; bh_xd++ - 251 000001D6' BCFA 02C2 CMP.W last_xd(PC),A6 - 252 000001DA' 6F00 FEFC BLE bhl32_l030_sym - 253 - 254 000001DE' 4CDF 7CFF MOVEM.L (SP)+,D0-D7/A2-A6 ; Restore context - 255 000001E2' 4E75 RTS - 256 - 257 ; 68030 routine for True Color 16bit - 258 ; BHL16_68030(short use_sym, void* in, void* out) - 259 ; D0, A0 A1 - 260 000001E4' BHL16_68030: - 261 000001E4' 48E7 FF3E MOVEM.L D0-D7/A2-A6,-(SP) ; Save context - 262 - 263 000001E8' 4A40 TST.W D0 - 264 000001EA' 6600 00AE BNE BHL16_68030_sym - 265 - 266 000001EE' 7E00 MOVEQ.L #0,D7 - PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 8 -Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S - - 267 000001F0' 3E3A 02A4 MOVE.W bh_out_x(PC),D7 - 268 000001F4' DE87 ADD.L D7,D7 - 269 000001F6' D3C7 ADD.L D7,A1 ; A1-->&out[bh_out_x] - 270 INIT_BHL - 96 000001F8' 45F9 00000000* + LEA.L pre_cosin,A2 - 97 000001FE' 2879 00000000* + MOVE.L pre_loffset,A4 ; A4-->preoffset - 98 00000204' 2A7A 0270 + MOVE.L bh_rd2(PC),A5 ; A5=bh_rd2 - 99 00000208' 2C7A 0264 + MOVE.L bh_xd(PC),A6 ; A6=bh_xd - 100 0000020C' 3E3A 0280 + MOVE.W bh_out_w(PC),D7 - 101 00000210' 5347 + SUBQ.W #1,D7 ; For DBF - 271 00000212' bhl16_l030: - 272 BH_COMPUTE_CPU bhl16_tpir_030 ; -->D6=0:pixel in range - 30 00000212' 200E + MOVE.L A6,D0 ; Remember A6=bh_xd - 31 00000214' D080 + ADD.L D0,D0 - 32 00000216' 5280 + ADDQ.L #1,D0 - 33 00000218' 220D + MOVE.L A5,D1 ; Remember A5=bh_rd2 - 34 0000021A' D280 + ADD.L D0,D1 ; bh_rd2(D1)=1+2*bh_xd(D0) - 35 0000021C' 243A 0264 + MOVE.L bh_ref(PC),D2 - 36 00000220' 2A41 + MOVE.L D1,A5 ; Save bh_rd2, free D1 - 37 00000222' 5281 + ADDQ.L #1,D1 ; We need bh_rd2+1 for divide - 41 00000224' 4C41 2002 + DIVU.L D1,D2 ; alpha(D2)=bh_ref/(1+bh_rd2) - 42 00000228' 0282 0000 3FFF + ANDI.L #ITRIGO_ANGLE_MAX,D2 ; alpha &= ITRIGO_ANGLE_MAX - 44 0000022E' E78A + LSL.L #3,D2 ; D2=offset for pre_cosin array - 45 00000230' 200E + MOVE.L A6,D0 ; D0=bh_xd - 46 00000232' 223A 023E + MOVE.L bh_yd(PC),D1 ; D1=bh_yd - 47 00000236' 2632 2804 + MOVE.L 4(A2,D2.L),D3 ; A2->pre_cosin, D3.L=SIN(alpha) - 48 0000023A' 2432 2800 + MOVE.L (A2,D2.L),D2 ; A2->pre_cosin, D2.L=COS(alpha) - 50 0000023E' 7C10 + MOVEQ.L #16,D6 ; Prepare shifts/assume not in range - 52 00000240' 2800 + MOVE.L D0,D4 - 53 00000242' 4C02 4800 + MULS.L D2,D4 ; D4=bh_xd * pre_cos[alpha] - 54 00000246' 2A01 + MOVE.L D1,D5 - 55 00000248' 4C03 5800 + MULS.L D3,D5 ; D5=bh_yd * pre_sin[alpha] - 56 0000024C' 9885 + SUB.L D5,D4 ; D4=bh_xd * pre_cos[alpha] - bh_yd * pre_sin[alpha] - 57 0000024E' ECA4 + ASR.L D6,D4 - 58 00000250' D8BA 0234 + ADD.L bh_xc(PC),D4 ; D6=16, assume pixel not in range - 59 00000254' 6D 26 + BLT.S bhl16_tpir_030 ; xs < 0: not in range - 60 00000256' B87A 023A + CMP.W bh_in_w(PC),D4 - 61 0000025A' 6C 20 + BGE.S bhl16_tpir_030 ; xs >= bh_in_w: not in range - 62 0000025C' 2644 + MOVE.L D4,A3 ; A3=bh_xs= (D4 >> 16) - 64 0000025E' 2800 + MOVE.L D0,D4 - 65 00000260' 4C03 4800 + MULS.L D3,D4 ; D4=bh_xd * pre_sin[alpha] - 66 00000264' 2A01 + MOVE.L D1,D5 - 67 00000266' 4C02 5800 + MULS.L D2,D5 ; D5=bh_yd * pre_cos[alpha] - 68 0000026A' D885 + ADD.L D5,D4 ; D4=bh_xd * pre_sin[alpha] + bh_yd * pre_cos[alpha] - 69 0000026C' ECA4 + ASR.L D6,D4 - 70 0000026E' D8BA 021A + ADD.L bh_yc(PC),D4 ; D4.L=bh_ys - 71 00000272' 6D 08 + BLT.S bhl16_tpir_030 ; ys < 0: not in range - 72 00000274' B87A 021E + CMP.W bh_in_h(PC),D4 - 73 00000278' 6C 02 + BGE.S bhl16_tpir_030 ; ys >= bh_in_h: not in range - 74 0000027A' 7C00 + MOVEQ.L #0,D6 ; pixel in range - 273 0000027C' bhl16_tpir_030: - 274 0000027C' 70FF MOVEQ.L #-1,D0 ; Assume out of range - 275 0000027E' 4A46 TST.W D6 - 276 00000280' 66 0A BNE.S bhl16_setpix_030 - 277 00000282' 2034 4C00 MOVE.L (A4,D4.L*4),D0 ; D4=bh_ys, D0=pre_loffset[bh_ys] - 278 00000286' D08B ADD.L A3,D0 ; D0=pre_loffset[bh_ys] + bh_xs(A3) - PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 9 -Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S - - 279 00000288' 3030 0A00 MOVE.W (A0,D0.L*2),D0 ; D0=in_ptr[pre_loffset[bh_ys] + bh_xs] - 280 0000028C' bhl16_setpix_030: - 281 0000028C' 32C0 MOVE.W D0,(A1)+ - 282 0000028E' 528E ADD.L #1,A6 ; bh_xd++ - 283 00000290' 51CF FF80 DBF D7,bhl16_l030 - 284 - 285 00000294' 4CDF 7CFF MOVEM.L (SP)+,D0-D7/A2-A6 ; Restore context - 286 00000298' 4E75 RTS - 287 - 288 0000029A' BHL16_68030_sym: - 289 INIT_BHL_SYM - 105 0000029A' 45F9 00000000* + LEA.L pre_cosin,A2 - 106 000002A0' 2879 00000000* + MOVE.L pre_loffset,A4 ; A4-->preoffset - 107 000002A6' 2A7A 01CE + MOVE.L bh_rd2(PC),A5 ; A5=bh_rd2 - 108 000002AA' 2C7A 01C2 + MOVE.L bh_xd(PC),A6 ; A6=bh_xd - 109 000002AE' 3E3A 01DE + MOVE.W bh_out_w(PC),D7 - 110 000002B2' E24F + LSR.W #1,D7 ; loop to bh_out_w/2 counts - 111 000002B4' DE4E + ADD.W A6,D7 ; starting from bh_xd - 112 000002B6' 33C7 00000000' + MOVE.W D7,last_xd - 290 000002BC' bhl16_l030_sym: - 291 BH_COMPUTE_CPU bhl16_tpir_030_sym ; -->D6=0:pixel in range - 30 000002BC' 200E + MOVE.L A6,D0 ; Remember A6=bh_xd - 31 000002BE' D080 + ADD.L D0,D0 - 32 000002C0' 5280 + ADDQ.L #1,D0 - 33 000002C2' 220D + MOVE.L A5,D1 ; Remember A5=bh_rd2 - 34 000002C4' D280 + ADD.L D0,D1 ; bh_rd2(D1)=1+2*bh_xd(D0) - 35 000002C6' 243A 01BA + MOVE.L bh_ref(PC),D2 - 36 000002CA' 2A41 + MOVE.L D1,A5 ; Save bh_rd2, free D1 - 37 000002CC' 5281 + ADDQ.L #1,D1 ; We need bh_rd2+1 for divide - 41 000002CE' 4C41 2002 + DIVU.L D1,D2 ; alpha(D2)=bh_ref/(1+bh_rd2) - 42 000002D2' 0282 0000 3FFF + ANDI.L #ITRIGO_ANGLE_MAX,D2 ; alpha &= ITRIGO_ANGLE_MAX - 44 000002D8' E78A + LSL.L #3,D2 ; D2=offset for pre_cosin array - 45 000002DA' 200E + MOVE.L A6,D0 ; D0=bh_xd - 46 000002DC' 223A 0194 + MOVE.L bh_yd(PC),D1 ; D1=bh_yd - 47 000002E0' 2632 2804 + MOVE.L 4(A2,D2.L),D3 ; A2->pre_cosin, D3.L=SIN(alpha) - 48 000002E4' 2432 2800 + MOVE.L (A2,D2.L),D2 ; A2->pre_cosin, D2.L=COS(alpha) - 50 000002E8' 7C10 + MOVEQ.L #16,D6 ; Prepare shifts/assume not in range - 52 000002EA' 2800 + MOVE.L D0,D4 - 53 000002EC' 4C02 4800 + MULS.L D2,D4 ; D4=bh_xd * pre_cos[alpha] - 54 000002F0' 2A01 + MOVE.L D1,D5 - 55 000002F2' 4C03 5800 + MULS.L D3,D5 ; D5=bh_yd * pre_sin[alpha] - 56 000002F6' 9885 + SUB.L D5,D4 ; D4=bh_xd * pre_cos[alpha] - bh_yd * pre_sin[alpha] - 57 000002F8' ECA4 + ASR.L D6,D4 - 58 000002FA' D8BA 018A + ADD.L bh_xc(PC),D4 ; D6=16, assume pixel not in range - 59 000002FE' 6D 26 + BLT.S bhl16_tpir_030_sym ; xs < 0: not in range - 60 00000300' B87A 0190 + CMP.W bh_in_w(PC),D4 - 61 00000304' 6C 20 + BGE.S bhl16_tpir_030_sym ; xs >= bh_in_w: not in range - 62 00000306' 2644 + MOVE.L D4,A3 ; A3=bh_xs= (D4 >> 16) - 64 00000308' 2800 + MOVE.L D0,D4 - 65 0000030A' 4C03 4800 + MULS.L D3,D4 ; D4=bh_xd * pre_sin[alpha] - 66 0000030E' 2A01 + MOVE.L D1,D5 - 67 00000310' 4C02 5800 + MULS.L D2,D5 ; D5=bh_yd * pre_cos[alpha] - 68 00000314' D885 + ADD.L D5,D4 ; D4=bh_xd * pre_sin[alpha] + bh_yd * pre_cos[alpha] - 69 00000316' ECA4 + ASR.L D6,D4 - 70 00000318' D8BA 0170 + ADD.L bh_yc(PC),D4 ; D4.L=bh_ys - 71 0000031C' 6D 08 + BLT.S bhl16_tpir_030_sym ; ys < 0: not in range - PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 10 -Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S - - 72 0000031E' B87A 0174 + CMP.W bh_in_h(PC),D4 - 73 00000322' 6C 02 + BGE.S bhl16_tpir_030_sym ; ys >= bh_in_h: not in range - 74 00000324' 7C00 + MOVEQ.L #0,D6 ; pixel in range - 292 00000326' bhl16_tpir_030_sym: - 293 00000326' 70FF MOVEQ.L #-1,D0 ; Assume out of range - 294 00000328' 4A46 TST.W D6 - 295 0000032A' 66 0A BNE.S bhl16_setpix_030_sym - 296 GET_TCPIXEL16 A0,A3,D4,D0 ; A0-->in_ptr, A3=bh_xs+bh_xc, D4=bh_ys+bh_yc - 135 0000032C' 2034 4C00 + MOVE.L (A4,D4.L*4),D0 - 136 00000330' D08B + ADD.L A3,D0 - 137 00000332' 3030 0A00 + MOVE.W (A0,D0.L*2),D0 - 297 ; D0=GET_TCPIXEL(in_ptr, bh_xs+bh_xc, bh_ys+bh_yc) - 298 00000336' bhl16_setpix_030_sym: - 299 00000336' 2F0E MOVE.L A6,-(SP) ; Save bh_xd - 300 00000338' 243A 014C MOVE.L bh_xc(PC),D2 ; D2=bh_xc - 301 0000033C' 263A 014C MOVE.L bh_yc(PC),D3 ; D3=bh_yc - 302 00000340' DDC2 ADD.L D2,A6 ; A6=bh_xd+bh_xc - 303 00000342' 2E3A 012E MOVE.L bh_yd(PC),D7 - 304 00000346' DE83 ADD.L D3,D7 ; D7=bh_yd+bh_yc - 305 SET_TCPIXEL16 A1,A6,D7,D0,D5 ; SET_TCPIXEL(out_ptr, bh_xd+bh_xc, bh_yd+bh_yc, GET_TCPIXEL(in_ptr, bh_xs+bh_xc, bh_ys+bh_yc)) - 144 00000348' 2A34 7C00 + MOVE.L (A4,D7.L*4),D5 - 145 0000034C' DA8E + ADD.L A6,D5 - 146 0000034E' 3380 5A00 + MOVE.W D0,(A1,D5.L*2) - 306 - 307 00000352' 7202 MOVEQ.L #2,D1 ; 3 loops, -1 for DBF - 308 00000354' deduc16_030: - 309 00000354' 97C2 SUB.L D2,A3 ; We need now bh_xs(A3) and bh_ys(D4) relative to - 310 00000356' 9883 SUB.L D3,D4 ; Black Hole center to use R90 - 311 00000358' 9DC2 SUB.L D2,A6 ; We need now bh_xd(A6) and bh_yd(D7) relative to - 312 0000035A' 9E83 SUB.L D3,D7 ; Black Hole center to use R90 - 313 - 314 R90 A6,D7,D0 ; Rotate (xd,yd) by PI/4 - 153 0000035C' 200E + MOVE.L A6,D0 - 154 0000035E' 4487 + NEG.L D7 - 155 00000360' 2C47 + MOVE.L D7,A6 - 156 00000362' 2E00 + MOVE.L D0,D7 - 315 R90 A3,D4,D0 ; Rotate (xs,ys) by PI/4 - 153 00000364' 200B + MOVE.L A3,D0 - 154 00000366' 4484 + NEG.L D4 - 155 00000368' 2644 + MOVE.L D4,A3 - 156 0000036A' 2800 + MOVE.L D0,D4 - 316 - 317 0000036C' D7C2 ADD.L D2,A3 ; Now we need coords in image raster - 318 0000036E' D883 ADD.L D3,D4 - 319 00000370' DDC2 ADD.L D2,A6 - 320 00000372' DE83 ADD.L D3,D7 - 321 - 322 PIXINIMG A6,D7,bh_in_w(PC),bh_in_h(PC),dnotinimg16_030 ; Check if pixel in dest is within bounds - 160 00000374' 4A4E + TST.W A6 - 161 00000376' 6D 3A + BLT.S dnotinimg16_030 - 162 00000378' 4A47 + TST.W D7 - 163 0000037A' 6D 36 + BLT.S dnotinimg16_030 - 164 0000037C' BCFA 0114 + CMP.W bh_in_w(PC),A6 - 165 00000380' 6C 30 + BGE.S dnotinimg16_030 - 166 00000382' BE7A 0110 + CMP.W bh_in_h(PC),D7 - 167 00000386' 6C 2A + BGE.S dnotinimg16_030 - PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 11 -Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S - - 323 00000388' 70FF MOVEQ.L #-1,D0 ; Assume out of range - 324 PIXINIMG A3,D4,bh_in_w(PC),bh_in_h(PC),plotdest16_030 ; Check if pixel in src is within bounds - 160 0000038A' 4A4B + TST.W A3 - 161 0000038C' 6D 1A + BLT.S plotdest16_030 - 162 0000038E' 4A44 + TST.W D4 - 163 00000390' 6D 16 + BLT.S plotdest16_030 - 164 00000392' B6FA 00FE + CMP.W bh_in_w(PC),A3 - 165 00000396' 6C 10 + BGE.S plotdest16_030 - 166 00000398' B87A 00FA + CMP.W bh_in_h(PC),D4 - 167 0000039C' 6C 0A + BGE.S plotdest16_030 - 325 GET_TCPIXEL16 A0,A3,D4,D0 ; A0-->in_ptr, A3=bh_xs+bh_xc, D4=bh_ys+bh_yc - 135 0000039E' 2034 4C00 + MOVE.L (A4,D4.L*4),D0 - 136 000003A2' D08B + ADD.L A3,D0 - 137 000003A4' 3030 0A00 + MOVE.W (A0,D0.L*2),D0 - 326 ; D0=GET_TCPIXEL(in_ptr, bh_xs+bh_xc, bh_ys+bh_yc) - 327 000003A8' plotdest16_030: - 328 SET_TCPIXEL16 A1,A6,D7,D0,D5 ; SET_TCPIXEL(out_ptr, bh_xd+bh_xc, bh_yd+bh_yc, GET_TCPIXEL(in_ptr, bh_xs+bh_xc, bh_ys+bh_yc)) - 144 000003A8' 2A34 7C00 + MOVE.L (A4,D7.L*4),D5 - 145 000003AC' DA8E + ADD.L A6,D5 - 146 000003AE' 3380 5A00 + MOVE.W D0,(A1,D5.L*2) - 329 000003B2' dnotinimg16_030: - 330 000003B2' 51C9 FFA0 DBF D1,deduc16_030 - 331 - 332 000003B6' 2C5F MOVE.L (SP)+,A6 ; Restore bh_xd - 333 000003B8' 528E ADD.L #1,A6 ; bh_xd++ - 334 000003BA' BCFA 00DE CMP.W last_xd(PC),A6 - 335 000003BE' 6F00 FEFC BLE bhl16_l030_sym - 336 - 337 000003C2' 4CDF 7CFF MOVEM.L (SP)+,D0-D7/A2-A6 ; Restore context - 338 000003C6' 4E75 RTS - 339 - 340 ; 68030 routine for bitplances images, converted to indexes - 341 ; BHLInd_68030(short use_sym, void* in, void* out) - 342 ; D0, A0 A1 - 343 000003C8' BHLInd_68030: - 344 000003C8' 48E7 FF3E MOVEM.L D0-D7/A2-A6,-(SP) ; Save context - 345 - 346 INIT_BHL - 96 000003CC' 45F9 00000000* + LEA.L pre_cosin,A2 - 97 000003D2' 2879 00000000* + MOVE.L pre_loffset,A4 ; A4-->preoffset - 98 000003D8' 2A7A 009C + MOVE.L bh_rd2(PC),A5 ; A5=bh_rd2 - 99 000003DC' 2C7A 0090 + MOVE.L bh_xd(PC),A6 ; A6=bh_xd - 100 000003E0' 3E3A 00AC + MOVE.W bh_out_w(PC),D7 - 101 000003E4' 5347 + SUBQ.W #1,D7 ; For DBF - 347 000003E6' bhlind_l030: - 348 BH_COMPUTE_CPU bhlind_tpir_030 ; -->D6=0:pixel in range - 30 000003E6' 200E + MOVE.L A6,D0 ; Remember A6=bh_xd - 31 000003E8' D080 + ADD.L D0,D0 - 32 000003EA' 5280 + ADDQ.L #1,D0 - 33 000003EC' 220D + MOVE.L A5,D1 ; Remember A5=bh_rd2 - 34 000003EE' D280 + ADD.L D0,D1 ; bh_rd2(D1)=1+2*bh_xd(D0) - 35 000003F0' 243A 0090 + MOVE.L bh_ref(PC),D2 - 36 000003F4' 2A41 + MOVE.L D1,A5 ; Save bh_rd2, free D1 - 37 000003F6' 5281 + ADDQ.L #1,D1 ; We need bh_rd2+1 for divide - 41 000003F8' 4C41 2002 + DIVU.L D1,D2 ; alpha(D2)=bh_ref/(1+bh_rd2) - 42 000003FC' 0282 0000 3FFF + ANDI.L #ITRIGO_ANGLE_MAX,D2 ; alpha &= ITRIGO_ANGLE_MAX - PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 12 -Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S - - 44 00000402' E78A + LSL.L #3,D2 ; D2=offset for pre_cosin array - 45 00000404' 200E + MOVE.L A6,D0 ; D0=bh_xd - 46 00000406' 223A 006A + MOVE.L bh_yd(PC),D1 ; D1=bh_yd - 47 0000040A' 2632 2804 + MOVE.L 4(A2,D2.L),D3 ; A2->pre_cosin, D3.L=SIN(alpha) - 48 0000040E' 2432 2800 + MOVE.L (A2,D2.L),D2 ; A2->pre_cosin, D2.L=COS(alpha) - 50 00000412' 7C10 + MOVEQ.L #16,D6 ; Prepare shifts/assume not in range - 52 00000414' 2800 + MOVE.L D0,D4 - 53 00000416' 4C02 4800 + MULS.L D2,D4 ; D4=bh_xd * pre_cos[alpha] - 54 0000041A' 2A01 + MOVE.L D1,D5 - 55 0000041C' 4C03 5800 + MULS.L D3,D5 ; D5=bh_yd * pre_sin[alpha] - 56 00000420' 9885 + SUB.L D5,D4 ; D4=bh_xd * pre_cos[alpha] - bh_yd * pre_sin[alpha] - 57 00000422' ECA4 + ASR.L D6,D4 - 58 00000424' D8BA 0060 + ADD.L bh_xc(PC),D4 ; D6=16, assume pixel not in range - 59 00000428' 6D 26 + BLT.S bhlind_tpir_030 ; xs < 0: not in range - 60 0000042A' B87A 0066 + CMP.W bh_in_w(PC),D4 - 61 0000042E' 6C 20 + BGE.S bhlind_tpir_030 ; xs >= bh_in_w: not in range - 62 00000430' 2644 + MOVE.L D4,A3 ; A3=bh_xs= (D4 >> 16) - 64 00000432' 2800 + MOVE.L D0,D4 - 65 00000434' 4C03 4800 + MULS.L D3,D4 ; D4=bh_xd * pre_sin[alpha] - 66 00000438' 2A01 + MOVE.L D1,D5 - 67 0000043A' 4C02 5800 + MULS.L D2,D5 ; D5=bh_yd * pre_cos[alpha] - 68 0000043E' D885 + ADD.L D5,D4 ; D4=bh_xd * pre_sin[alpha] + bh_yd * pre_cos[alpha] - 69 00000440' ECA4 + ASR.L D6,D4 - 70 00000442' D8BA 0046 + ADD.L bh_yc(PC),D4 ; D4.L=bh_ys - 71 00000446' 6D 08 + BLT.S bhlind_tpir_030 ; ys < 0: not in range - 72 00000448' B87A 004A + CMP.W bh_in_h(PC),D4 - 73 0000044C' 6C 02 + BGE.S bhlind_tpir_030 ; ys >= bh_in_h: not in range - 74 0000044E' 7C00 + MOVEQ.L #0,D6 ; pixel in range - 349 00000450' bhlind_tpir_030: - 350 00000450' 70FF MOVEQ.L #-1,D0 ; Assume out of range - 351 00000452' 4A46 TST.W D6 - 352 00000454' 66 0A BNE.S bhlind_setpix_030 - 353 00000456' 2034 4C00 MOVE.L (A4,D4.L*4),D0 ; D4=bh_ys, D0=pre_loffset[bh_ys] - 354 0000045A' D08B ADD.L A3,D0 ; D0=pre_loffset[bh_ys] + bh_xs(A3) - 355 0000045C' 1030 0800 MOVE.B (A0,D0.L),D0 ; D0=in_ptr[pre_loffset[bh_ys] + bh_xs] - 356 00000460' bhlind_setpix_030: - 357 00000460' 12C0 MOVE.B D0,(A1)+ - 358 00000462' 528E ADD.L #1,A6 ; bh_xd++ - 359 00000464' 51CF FF80 DBF D7,bhlind_l030 - 360 - 361 00000468' 4CDF 7CFF MOVEM.L (SP)+,D0-D7/A2-A6 ; Restore context - 362 0000046C' 4E75 RTS - 363 - 364 0000046E' .EVEN - 365 0000046E' bh_xd: - 366 0000046E' 0000 0000 DC.L 0 - 367 00000472' bh_yd: - 368 00000472' 0000 0000 DC.L 0 - 369 00000476' bh_rd2: - 370 00000476' 0000 0000 DC.L 0 - 371 0000047A' bh_xs: - 372 0000047A' 0000 0000 DC.L 0 - 373 0000047E' bh_ys: - 374 0000047E' 0000 0000 DC.L 0 - 375 00000482' bh_ref: - 376 00000482' 0000 0000 DC.L 0 - PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 13 -Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S - - 377 00000486' bh_xc: - 378 00000486' 0000 0000 DC.L 0 - 379 0000048A' bh_yc: - 380 0000048A' 0000 0000 DC.L 0 - 381 0000048E' bh_out_w: - 382 0000048E' 0000 DC.W 0 - 383 00000490' bh_out_h: - 384 00000490' 0000 DC.W 0 - 385 00000492' bh_in_w: - 386 00000492' 0000 DC.W 0 - 387 00000494' bh_in_h: - 388 00000494' 0000 DC.W 0 - 389 00000496' bh_out_x: - 390 00000496' 0000 DC.W 0 - 391 00000498' bh_out_y: - 392 00000498' 0000 DC.W 0 - 393 0000049A' last_xd: - 394 0000049A' 0000 DC.W 0 - 395 - 396 ; 68030/FPU routine for True Color 32bit - 397 ; BHL32_F68030(short use_sym, void* in, void* out) - 398 ; D0, A0 A1 - 399 0000049C' BHL32_F68030: - 400 0000049C' 48E7 FF3E MOVEM.L D0-D7/A2-A6,-(SP) ; Save context - 401 000004A0' F227 6800 FMOVE.X FP0,-(SP) - 402 - 403 INIT_BHL - 96 000004A4' 45F9 00000000* + LEA.L pre_cosin,A2 - 97 000004AA' 2879 00000000* + MOVE.L pre_loffset,A4 ; A4-->preoffset - 98 000004B0' 2A7A FFC4 + MOVE.L bh_rd2(PC),A5 ; A5=bh_rd2 - 99 000004B4' 2C7A FFB8 + MOVE.L bh_xd(PC),A6 ; A6=bh_xd - 100 000004B8' 3E3A FFD4 + MOVE.W bh_out_w(PC),D7 - 101 000004BC' 5347 + SUBQ.W #1,D7 ; For DBF - 404 000004BE' bhl32_lf030: - 405 BH_COMPUTE_FPU bhl32_tpir_f030 ; -->D6=0:pixel in range - 30 000004BE' 200E + MOVE.L A6,D0 ; Remember A6=bh_xd - 31 000004C0' D080 + ADD.L D0,D0 - 32 000004C2' 5280 + ADDQ.L #1,D0 - 33 000004C4' 220D + MOVE.L A5,D1 ; Remember A5=bh_rd2 - 34 000004C6' D280 + ADD.L D0,D1 ; bh_rd2(D1)=1+2*bh_xd(D0) - 35 000004C8' 243A FFB8 + MOVE.L bh_ref(PC),D2 - 36 000004CC' 2A41 + MOVE.L D1,A5 ; Save bh_rd2, free D1 - 37 000004CE' 5281 + ADDQ.L #1,D1 ; We need bh_rd2+1 for divide - 88 000004D0' F201 4000 + FMOVE.L D1,FP0 - 89 000004D4' F200 0004 + FSQRT FP0 - 90 000004D8' F201 6000 + FMOVE.L FP0,D1 - 41 000004DC' 4C41 2002 + DIVU.L D1,D2 ; alpha(D2)=bh_ref/(1+bh_rd2) - 42 000004E0' 0282 0000 3FFF + ANDI.L #ITRIGO_ANGLE_MAX,D2 ; alpha &= ITRIGO_ANGLE_MAX - 44 000004E6' E78A + LSL.L #3,D2 ; D2=offset for pre_cosin array - 45 000004E8' 200E + MOVE.L A6,D0 ; D0=bh_xd - 46 000004EA' 223A FF86 + MOVE.L bh_yd(PC),D1 ; D1=bh_yd - 47 000004EE' 2632 2804 + MOVE.L 4(A2,D2.L),D3 ; A2->pre_cosin, D3.L=SIN(alpha) - 48 000004F2' 2432 2800 + MOVE.L (A2,D2.L),D2 ; A2->pre_cosin, D2.L=COS(alpha) - 50 000004F6' 7C10 + MOVEQ.L #16,D6 ; Prepare shifts/assume not in range - 52 000004F8' 2800 + MOVE.L D0,D4 - 53 000004FA' 4C02 4800 + MULS.L D2,D4 ; D4=bh_xd * pre_cos[alpha] - PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 14 -Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S - - 54 000004FE' 2A01 + MOVE.L D1,D5 - 55 00000500' 4C03 5800 + MULS.L D3,D5 ; D5=bh_yd * pre_sin[alpha] - 56 00000504' 9885 + SUB.L D5,D4 ; D4=bh_xd * pre_cos[alpha] - bh_yd * pre_sin[alpha] - 57 00000506' ECA4 + ASR.L D6,D4 - 58 00000508' D8BA FF7C + ADD.L bh_xc(PC),D4 ; D6=16, assume pixel not in range - 59 0000050C' 6D 26 + BLT.S bhl32_tpir_f030 ; xs < 0: not in range - 60 0000050E' B87A FF82 + CMP.W bh_in_w(PC),D4 - 61 00000512' 6C 20 + BGE.S bhl32_tpir_f030 ; xs >= bh_in_w: not in range - 62 00000514' 2644 + MOVE.L D4,A3 ; A3=bh_xs= (D4 >> 16) - 64 00000516' 2800 + MOVE.L D0,D4 - 65 00000518' 4C03 4800 + MULS.L D3,D4 ; D4=bh_xd * pre_sin[alpha] - 66 0000051C' 2A01 + MOVE.L D1,D5 - 67 0000051E' 4C02 5800 + MULS.L D2,D5 ; D5=bh_yd * pre_cos[alpha] - 68 00000522' D885 + ADD.L D5,D4 ; D4=bh_xd * pre_sin[alpha] + bh_yd * pre_cos[alpha] - 69 00000524' ECA4 + ASR.L D6,D4 - 70 00000526' D8BA FF62 + ADD.L bh_yc(PC),D4 ; D4.L=bh_ys - 71 0000052A' 6D 08 + BLT.S bhl32_tpir_f030 ; ys < 0: not in range - 72 0000052C' B87A FF66 + CMP.W bh_in_h(PC),D4 - 73 00000530' 6C 02 + BGE.S bhl32_tpir_f030 ; ys >= bh_in_h: not in range - 74 00000532' 7C00 + MOVEQ.L #0,D6 ; pixel in range - 406 00000534' bhl32_tpir_f030: - 407 00000534' 70FF MOVEQ.L #-1,D0 ; Assume out of range - 408 00000536' 4A46 TST.W D6 - 409 00000538' 66 0A BNE.S bhl32_setpix_f030 - 410 0000053A' 2034 4C00 MOVE.L (A4,D4.L*4),D0 ; D4=bh_ys, D0=pre_loffset[bh_ys] - 411 0000053E' D08B ADD.L A3,D0 ; D0=pre_loffset[bh_ys] + bh_xs(A3) - 412 00000540' 2030 0C00 MOVE.L (A0,D0.L*4),D0 ; D0=in_ptr[pre_loffset[bh_ys] + bh_xs] - 413 00000544' bhl32_setpix_f030: - 414 00000544' 22C0 MOVE.L D0,(A1)+ - 415 00000546' 528E ADD.L #1,A6 ; bh_xd++ - 416 00000548' 51CF FF74 DBF D7,bhl32_lf030 - 417 - 418 0000054C' F21F 4800 FMOVE.X (SP)+,FP0 - 419 00000550' 4CDF 7CFF MOVEM.L (SP)+,D0-D7/A2-A6 ; Restore context - 420 00000554' 4E75 RTS - 421 - 422 ; 68030/FPU routine for True Color 16bit - 423 ; BHL16_F68030(short use_sym, void* in, void* out) - 424 ; D0, A0 A1 - 425 00000556' BHL16_F68030: - 426 00000556' 48E7 FF3E MOVEM.L D0-D7/A2-A6,-(SP) ; Save context - 427 0000055A' F227 6800 FMOVE.X FP0,-(SP) - 428 - 429 INIT_BHL - 96 0000055E' 45F9 00000000* + LEA.L pre_cosin,A2 - 97 00000564' 2879 00000000* + MOVE.L pre_loffset,A4 ; A4-->preoffset - 98 0000056A' 2A7A FF0A + MOVE.L bh_rd2(PC),A5 ; A5=bh_rd2 - 99 0000056E' 2C7A FEFE + MOVE.L bh_xd(PC),A6 ; A6=bh_xd - 100 00000572' 3E3A FF1A + MOVE.W bh_out_w(PC),D7 - 101 00000576' 5347 + SUBQ.W #1,D7 ; For DBF - 430 00000578' bhl16_lf030: - 431 BH_COMPUTE_FPU bhl16_tpir_f030 ; -->D6=0:pixel in range - 30 00000578' 200E + MOVE.L A6,D0 ; Remember A6=bh_xd - 31 0000057A' D080 + ADD.L D0,D0 - 32 0000057C' 5280 + ADDQ.L #1,D0 - 33 0000057E' 220D + MOVE.L A5,D1 ; Remember A5=bh_rd2 - PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 15 -Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S - - 34 00000580' D280 + ADD.L D0,D1 ; bh_rd2(D1)=1+2*bh_xd(D0) - 35 00000582' 243A FEFE + MOVE.L bh_ref(PC),D2 - 36 00000586' 2A41 + MOVE.L D1,A5 ; Save bh_rd2, free D1 - 37 00000588' 5281 + ADDQ.L #1,D1 ; We need bh_rd2+1 for divide - 88 0000058A' F201 4000 + FMOVE.L D1,FP0 - 89 0000058E' F200 0004 + FSQRT FP0 - 90 00000592' F201 6000 + FMOVE.L FP0,D1 - 41 00000596' 4C41 2002 + DIVU.L D1,D2 ; alpha(D2)=bh_ref/(1+bh_rd2) - 42 0000059A' 0282 0000 3FFF + ANDI.L #ITRIGO_ANGLE_MAX,D2 ; alpha &= ITRIGO_ANGLE_MAX - 44 000005A0' E78A + LSL.L #3,D2 ; D2=offset for pre_cosin array - 45 000005A2' 200E + MOVE.L A6,D0 ; D0=bh_xd - 46 000005A4' 223A FECC + MOVE.L bh_yd(PC),D1 ; D1=bh_yd - 47 000005A8' 2632 2804 + MOVE.L 4(A2,D2.L),D3 ; A2->pre_cosin, D3.L=SIN(alpha) - 48 000005AC' 2432 2800 + MOVE.L (A2,D2.L),D2 ; A2->pre_cosin, D2.L=COS(alpha) - 50 000005B0' 7C10 + MOVEQ.L #16,D6 ; Prepare shifts/assume not in range - 52 000005B2' 2800 + MOVE.L D0,D4 - 53 000005B4' 4C02 4800 + MULS.L D2,D4 ; D4=bh_xd * pre_cos[alpha] - 54 000005B8' 2A01 + MOVE.L D1,D5 - 55 000005BA' 4C03 5800 + MULS.L D3,D5 ; D5=bh_yd * pre_sin[alpha] - 56 000005BE' 9885 + SUB.L D5,D4 ; D4=bh_xd * pre_cos[alpha] - bh_yd * pre_sin[alpha] - 57 000005C0' ECA4 + ASR.L D6,D4 - 58 000005C2' D8BA FEC2 + ADD.L bh_xc(PC),D4 ; D6=16, assume pixel not in range - 59 000005C6' 6D 26 + BLT.S bhl16_tpir_f030 ; xs < 0: not in range - 60 000005C8' B87A FEC8 + CMP.W bh_in_w(PC),D4 - 61 000005CC' 6C 20 + BGE.S bhl16_tpir_f030 ; xs >= bh_in_w: not in range - 62 000005CE' 2644 + MOVE.L D4,A3 ; A3=bh_xs= (D4 >> 16) - 64 000005D0' 2800 + MOVE.L D0,D4 - 65 000005D2' 4C03 4800 + MULS.L D3,D4 ; D4=bh_xd * pre_sin[alpha] - 66 000005D6' 2A01 + MOVE.L D1,D5 - 67 000005D8' 4C02 5800 + MULS.L D2,D5 ; D5=bh_yd * pre_cos[alpha] - 68 000005DC' D885 + ADD.L D5,D4 ; D4=bh_xd * pre_sin[alpha] + bh_yd * pre_cos[alpha] - 69 000005DE' ECA4 + ASR.L D6,D4 - 70 000005E0' D8BA FEA8 + ADD.L bh_yc(PC),D4 ; D4.L=bh_ys - 71 000005E4' 6D 08 + BLT.S bhl16_tpir_f030 ; ys < 0: not in range - 72 000005E6' B87A FEAC + CMP.W bh_in_h(PC),D4 - 73 000005EA' 6C 02 + BGE.S bhl16_tpir_f030 ; ys >= bh_in_h: not in range - 74 000005EC' 7C00 + MOVEQ.L #0,D6 ; pixel in range - 432 000005EE' bhl16_tpir_f030: - 433 000005EE' 70FF MOVEQ.L #-1,D0 ; Assume out of range - 434 000005F0' 4A46 TST.W D6 - 435 000005F2' 66 0A BNE.S bhl16_setpix_f030 - 436 000005F4' 2034 4C00 MOVE.L (A4,D4.L*4),D0 ; D4=bh_ys, D0=pre_loffset[bh_ys] - 437 000005F8' D08B ADD.L A3,D0 ; D0=pre_loffset[bh_ys] + bh_xs(A3) - 438 000005FA' 3030 0A00 MOVE.W (A0,D0.L*2),D0 ; D0=in_ptr[pre_loffset[bh_ys] + bh_xs] - 439 000005FE' bhl16_setpix_f030: - 440 000005FE' 32C0 MOVE.W D0,(A1)+ - 441 00000600' 528E ADD.L #1,A6 ; bh_xd++ - 442 00000602' 51CF FF74 DBF D7,bhl16_lf030 - 443 - 444 00000606' F21F 4800 FMOVE.X (SP)+,FP0 - 445 0000060A' 4CDF 7CFF MOVEM.L (SP)+,D0-D7/A2-A6 ; Restore context - 446 0000060E' 4E75 RTS - 447 - 448 ; 68030/FPU routine for bitplances images, converted to indexes - 449 ; BHLInd_F68030(short use_sym, void* in, void* out) - 450 ; D0, A0 A1 - PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 16 -Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S - - 451 00000610' BHLInd_F68030: - 452 00000610' 48E7 FF3E MOVEM.L D0-D7/A2-A6,-(SP) ; Save context - 453 00000614' F227 6800 FMOVE.X FP0,-(SP) - 454 - 455 INIT_BHL - 96 00000618' 45F9 00000000* + LEA.L pre_cosin,A2 - 97 0000061E' 2879 00000000* + MOVE.L pre_loffset,A4 ; A4-->preoffset - 98 00000624' 2A7A FE50 + MOVE.L bh_rd2(PC),A5 ; A5=bh_rd2 - 99 00000628' 2C7A FE44 + MOVE.L bh_xd(PC),A6 ; A6=bh_xd - 100 0000062C' 3E3A FE60 + MOVE.W bh_out_w(PC),D7 - 101 00000630' 5347 + SUBQ.W #1,D7 ; For DBF - 456 00000632' bhlInd_lf030: - 457 BH_COMPUTE_FPU bhlInd_tpir_f030 ; -->D6=0:pixel in range - 30 00000632' 200E + MOVE.L A6,D0 ; Remember A6=bh_xd - 31 00000634' D080 + ADD.L D0,D0 - 32 00000636' 5280 + ADDQ.L #1,D0 - 33 00000638' 220D + MOVE.L A5,D1 ; Remember A5=bh_rd2 - 34 0000063A' D280 + ADD.L D0,D1 ; bh_rd2(D1)=1+2*bh_xd(D0) - 35 0000063C' 243A FE44 + MOVE.L bh_ref(PC),D2 - 36 00000640' 2A41 + MOVE.L D1,A5 ; Save bh_rd2, free D1 - 37 00000642' 5281 + ADDQ.L #1,D1 ; We need bh_rd2+1 for divide - 88 00000644' F201 4000 + FMOVE.L D1,FP0 - 89 00000648' F200 0004 + FSQRT FP0 - 90 0000064C' F201 6000 + FMOVE.L FP0,D1 - 41 00000650' 4C41 2002 + DIVU.L D1,D2 ; alpha(D2)=bh_ref/(1+bh_rd2) - 42 00000654' 0282 0000 3FFF + ANDI.L #ITRIGO_ANGLE_MAX,D2 ; alpha &= ITRIGO_ANGLE_MAX - 44 0000065A' E78A + LSL.L #3,D2 ; D2=offset for pre_cosin array - 45 0000065C' 200E + MOVE.L A6,D0 ; D0=bh_xd - 46 0000065E' 223A FE12 + MOVE.L bh_yd(PC),D1 ; D1=bh_yd - 47 00000662' 2632 2804 + MOVE.L 4(A2,D2.L),D3 ; A2->pre_cosin, D3.L=SIN(alpha) - 48 00000666' 2432 2800 + MOVE.L (A2,D2.L),D2 ; A2->pre_cosin, D2.L=COS(alpha) - 50 0000066A' 7C10 + MOVEQ.L #16,D6 ; Prepare shifts/assume not in range - 52 0000066C' 2800 + MOVE.L D0,D4 - 53 0000066E' 4C02 4800 + MULS.L D2,D4 ; D4=bh_xd * pre_cos[alpha] - 54 00000672' 2A01 + MOVE.L D1,D5 - 55 00000674' 4C03 5800 + MULS.L D3,D5 ; D5=bh_yd * pre_sin[alpha] - 56 00000678' 9885 + SUB.L D5,D4 ; D4=bh_xd * pre_cos[alpha] - bh_yd * pre_sin[alpha] - 57 0000067A' ECA4 + ASR.L D6,D4 - 58 0000067C' D8BA FE08 + ADD.L bh_xc(PC),D4 ; D6=16, assume pixel not in range - 59 00000680' 6D 26 + BLT.S bhlInd_tpir_f030 ; xs < 0: not in range - 60 00000682' B87A FE0E + CMP.W bh_in_w(PC),D4 - 61 00000686' 6C 20 + BGE.S bhlInd_tpir_f030 ; xs >= bh_in_w: not in range - 62 00000688' 2644 + MOVE.L D4,A3 ; A3=bh_xs= (D4 >> 16) - 64 0000068A' 2800 + MOVE.L D0,D4 - 65 0000068C' 4C03 4800 + MULS.L D3,D4 ; D4=bh_xd * pre_sin[alpha] - 66 00000690' 2A01 + MOVE.L D1,D5 - 67 00000692' 4C02 5800 + MULS.L D2,D5 ; D5=bh_yd * pre_cos[alpha] - 68 00000696' D885 + ADD.L D5,D4 ; D4=bh_xd * pre_sin[alpha] + bh_yd * pre_cos[alpha] - 69 00000698' ECA4 + ASR.L D6,D4 - 70 0000069A' D8BA FDEE + ADD.L bh_yc(PC),D4 ; D4.L=bh_ys - 71 0000069E' 6D 08 + BLT.S bhlInd_tpir_f030 ; ys < 0: not in range - 72 000006A0' B87A FDF2 + CMP.W bh_in_h(PC),D4 - 73 000006A4' 6C 02 + BGE.S bhlInd_tpir_f030 ; ys >= bh_in_h: not in range - 74 000006A6' 7C00 + MOVEQ.L #0,D6 ; pixel in range - 458 000006A8' bhlInd_tpir_f030: - 459 000006A8' 70FF MOVEQ.L #-1,D0 ; Assume out of range - PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 17 -Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S - - 460 000006AA' 4A46 TST.W D6 - 461 000006AC' 66 0A BNE.S bhlInd_setpix_f030 - 462 000006AE' 2034 4C00 MOVE.L (A4,D4.L*4),D0 ; D4=bh_ys, D0=pre_loffset[bh_ys] - 463 000006B2' D08B ADD.L A3,D0 ; D0=pre_loffset[bh_ys] + bh_xs - 464 000006B4' 1030 0800 MOVE.B (A0,D0.L),D0 ; D0=in_ptr[pre_loffset[bh_ys] + bh_xs] - 465 000006B8' bhlInd_setpix_f030: - 466 000006B8' 12C0 MOVE.B D0,(A1)+ - 467 000006BA' 528E ADD.L #1,A6 ; bh_xd++ - 468 000006BC' 51CF FF74 DBF D7,bhlInd_lf030 - 469 - 470 000006C0' F21F 4800 FMOVE.X (SP)+,FP0 - 471 000006C4' 4CDF 7CFF MOVEM.L (SP)+,D0-D7/A2-A6 ; Restore context - 472 000006C8' 4E75 RTS - 473 - 474 ; Pre-calculation of cosinus/sinus table using FPU - 475 ; void lcosin_fpu(long i, long* pcs) - 476 ; D0 A0 - 477 ; double angle = i*ANGLE_ADD ; - 478 ; pcs[0] = 65536.0 * cos( angle ) ; - 479 ; pcs[1] = 65536.0 * sin( angle ) ; - 480 000006CA' lcosin_fpu: - 481 000006CA' F227 E007 FMOVEM.X FP0-FP2,-(SP) - 482 - 483 000006CE' F200 5000 FMOVE D0,FP0 - 484 ; 3.8349519697141030742952189737299e-4=M_PI/2.0/(double)QUARTER - 485 ; For some reason, I did not manage to use EQU with floating point constants - 486 000006D2' F23C 4823 3FF3 0000 - 000006DA' C90F DAA2 2168 C234 FMUL.X #3.8349519697141030742952189737299e-4,FP0 - 487 000006E2' F200 0131 FSINCOS.X FP0,FP1:FP2 - 488 000006E6' F23C 48A3 400F 0000 - 000006EE' 8000 0000 0000 0000 FMUL.X #65536.0,FP1 - 489 000006F6' F23C 4923 400F 0000 - 000006FE' 8000 0000 0000 0000 FMUL.X #65536.0,FP2 - 490 00000706' F218 6080 FMOVE.L FP1,(A0)+ - 491 0000070A' F210 6100 FMOVE.L FP2,(A0) - 492 - 493 0000070E' F21F D0E0 FMOVEM.X (SP)+,FP0-FP2 - 494 00000712' 4E75 RTS - PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 18 -Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S - - - -Symbols: -======== - -Name Value Scope Relocation base - -BHL16_68030 000001E4 Global TEXT -BHL16_68030_sym 0000029A File TEXT -BHL16_F68030 00000556 Global TEXT -BHL32_68030 00000000 Global TEXT -BHL32_68030_sym 000000B6 File TEXT -BHL32_F68030 0000049C Global TEXT -BHLInd_68030 000003C8 Global TEXT -BHLInd_F68030 00000610 Global TEXT -ITRIGO_ANGLE_MAX 00003FFF File EQUATE -ITRIGO_ARRAY_SIZE 00004000 File EQUATE -QUARTER 00001000 File EQUATE -bh_in_h 00000494 Global TEXT -bh_in_w 00000492 Global TEXT -bh_out_h 00000490 Global TEXT -bh_out_w 0000048E Global TEXT -bh_out_x 00000496 Global TEXT -bh_out_y 00000498 Global TEXT -bh_rd2 00000476 Global TEXT -bh_ref 00000482 Global TEXT -bh_xc 00000486 Global TEXT -bh_xd 0000046E Global TEXT -bh_xs 0000047A Global TEXT -bh_yc 0000048A Global TEXT -bh_yd 00000472 Global TEXT -bh_ys 0000047E Global TEXT -bhl16_l030 00000212 File TEXT -bhl16_l030_sym 000002BC File TEXT -bhl16_lf030 00000578 File TEXT -bhl16_setpix_030 0000028C File TEXT -bhl16_setpix_030_sym 00000336 File TEXT -bhl16_setpix_f030 000005FE File TEXT -bhl16_tpir_030 0000027C File TEXT -bhl16_tpir_030_sym 00000326 File TEXT -bhl16_tpir_f030 000005EE File TEXT -bhl32_l030 0000002E File TEXT -bhl32_l030_sym 000000D8 File TEXT -bhl32_lf030 000004BE File TEXT -bhl32_setpix_030 000000A8 File TEXT -bhl32_setpix_030_sym 00000152 File TEXT -bhl32_setpix_f030 00000544 File TEXT -bhl32_tpir_030 00000098 File TEXT -bhl32_tpir_030_sym 00000142 File TEXT -bhl32_tpir_f030 00000534 File TEXT -bhlInd_lf030 00000632 File TEXT -bhlInd_setpix_f030 000006B8 File TEXT -bhlInd_tpir_f030 000006A8 File TEXT -bhlind_l030 000003E6 File TEXT -bhlind_setpix_030 00000460 File TEXT -bhlind_tpir_030 00000450 File TEXT -deduc16_030 00000354 File TEXT -deduc32_030 00000170 File TEXT -dnotinimg16_030 000003B2 File TEXT -dnotinimg32_030 000001CE File TEXT -last_xd 0000049A File TEXT -lcosin_fpu 000006CA Global TEXT -plotdest16_030 000003A8 File TEXT -plotdest32_030 000001C4 File TEXT -pre_cosin ******** External -pre_loffset ******** External diff --git a/tools/vision/LDV/SRC/gamma/GAMMA.LDV b/tools/vision/LDV/SRC/gamma/GAMMA.LDV deleted file mode 100644 index 3a20601..0000000 Binary files a/tools/vision/LDV/SRC/gamma/GAMMA.LDV and /dev/null differ diff --git a/tools/vision/LDV/SRC/light/LIGHT.LDV b/tools/vision/LDV/SRC/light/LIGHT.LDV deleted file mode 100644 index 8b35128..0000000 Binary files a/tools/vision/LDV/SRC/light/LIGHT.LDV and /dev/null differ diff --git a/tools/vision/LDV/SRC/puzzle/puzzle.ldv b/tools/vision/LDV/SRC/puzzle/puzzle.ldv deleted file mode 100644 index 4f3c35b..0000000 Binary files a/tools/vision/LDV/SRC/puzzle/puzzle.ldv and /dev/null differ diff --git a/tools/vision/LDV/SRC/rotate/ROTATE.LDV b/tools/vision/LDV/SRC/rotate/ROTATE.LDV deleted file mode 100644 index 6b268c4..0000000 Binary files a/tools/vision/LDV/SRC/rotate/ROTATE.LDV and /dev/null differ diff --git a/tools/vision/LDV/YPERSC.LDV b/tools/vision/LDV/YPERSC.LDV deleted file mode 100644 index b1a83ca..0000000 Binary files a/tools/vision/LDV/YPERSC.LDV and /dev/null differ diff --git a/tools/vision/LDV/bhole.ldv b/tools/vision/LDV/bhole.ldv deleted file mode 100644 index 3f923fa..0000000 Binary files a/tools/vision/LDV/bhole.ldv and /dev/null differ diff --git a/tools/vision/LDV/puzzle.ldv b/tools/vision/LDV/puzzle.ldv deleted file mode 100644 index 4f3c35b..0000000 Binary files a/tools/vision/LDV/puzzle.ldv and /dev/null differ diff --git a/tools/vision/VISION.PRG b/tools/vision/VISION.PRG deleted file mode 100644 index 9a91cb1..0000000 Binary files a/tools/vision/VISION.PRG and /dev/null differ diff --git a/tools/vision/cacert.pem b/tools/vision/cacert.pem new file mode 100644 index 0000000..0bf312f --- /dev/null +++ b/tools/vision/cacert.pem @@ -0,0 +1,3232 @@ +## +## Bundle of CA Root Certificates +## +## Certificate data from Mozilla as of: Tue Oct 26 03:12:05 2021 GMT +## +## This is a bundle of X.509 certificates of public Certificate Authorities +## (CA). These were automatically extracted from Mozilla's root certificates +## file (certdata.txt). This file can be found in the mozilla source tree: +## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt +## +## It contains the certificates in PEM format and therefore +## can be directly used with curl / libcurl / php_curl, or with +## an Apache+mod_ssl webserver for SSL client authentication. +## Just configure this file as the SSLCACertificateFile. +## +## Conversion done with mk-ca-bundle.pl version 1.28. +## SHA256: bb36818a81feaa4cca61101e6d6276cd09e972efcb08112dfed846918ca41d7f +## + + +GlobalSign Root CA +================== +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx +GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds +b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD +VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa +DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc +THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb +Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP +c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX +gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF +AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj +Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG +j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH +hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC +X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +GlobalSign Root CA - R2 +======================= +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 +ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp +s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN +S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL +TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C +ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i +YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN +BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp +9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu +01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 +9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- + +Entrust.net Premium 2048 Secure Server CA +========================================= +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u +ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp +bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV +BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx +NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 +d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl +MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u +ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL +Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr +hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW +nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi +VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ +KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy +T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT +J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e +nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- + +Baltimore CyberTrust Root +========================= +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE +ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li +ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC +SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs +dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME +uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB +UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C +G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 +XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr +l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI +VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB +BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh +cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 +hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa +Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H +RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +Entrust Root Certification Authority +==================================== +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw +b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG +A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 +MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu +MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu +Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v +dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz +A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww +Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 +j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN +rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 +MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH +hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM +Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa +v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS +W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 +tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +Comodo AAA Services root +======================== +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw +MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl +c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV +BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG +C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs +i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW +Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH +Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK +Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f +BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl +cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz +LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm +7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z +8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C +12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +QuoVadis Root CA 2 +================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +QuoVadis Root CA 3 +================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Security Communication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw +8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM +DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX +5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd +DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 +JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g +0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a +mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ +s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ +6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi +FL39vmwLAw== +-----END CERTIFICATE----- + +XRamp Global CA Root +==================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE +BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj +dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx +HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg +U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu +IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx +foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE +zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs +AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry +xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap +oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC +AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc +/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n +nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz +8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +Go Daddy Class 2 CA +=================== +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY +VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG +A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g +RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD +ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv +2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 +qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j +YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY +vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O +BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o +atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu +MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG +A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim +PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt +I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI +Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b +vZ8= +-----END CERTIFICATE----- + +Starfield Class 2 CA +==================== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc +U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo +MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG +A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG +SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY +bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ +JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm +epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN +F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF +MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f +hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo +bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g +QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs +afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM +PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD +KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 +QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +DigiCert Assured ID Root CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx +MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO +9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy +UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW +/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy +oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf +GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF +66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq +hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc +EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn +SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i +8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +DigiCert Global Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw +MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn +TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 +BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H +4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y +7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB +o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm +8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF +BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr +EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt +tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 +UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +DigiCert High Assurance EV Root CA +================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw +KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw +MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ +MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu +Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t +Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS +OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 +MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ +NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe +h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB +Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY +JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ +V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp +myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK +mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K +-----END CERTIFICATE----- + +SwissSign Gold CA - G2 +====================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +SwissSign Silver CA - G2 +======================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +SecureTrust CA +============== +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy +dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe +BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX +OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t +DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH +GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b +01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH +ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj +aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu +SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf +mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ +nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +Secure Global CA +================ +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH +bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg +MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg +Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx +YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ +bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g +8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV +HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi +0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn +oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA +MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ +OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn +CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 +3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +COMODO Certification Authority +============================== +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb +MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD +T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH ++7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww +xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV +4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA +1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI +rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k +b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC +AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP +OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc +IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN ++8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== +-----END CERTIFICATE----- + +Network Solutions Certificate Authority +======================================= +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG +EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr +IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx +MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx +jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT +aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT +crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc +/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB +AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv +bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA +A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q +4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ +GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD +ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +COMODO ECC Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix +GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X +4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni +wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG +FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA +U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +Certigna +======== +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw +EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 +MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI +Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q +XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH +GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p +ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg +DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf +Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ +tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ +BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J +SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA +hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ +ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu +PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY +1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +Cybertrust Global Root +====================== +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li +ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 +MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD +ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA ++Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW +0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL +AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin +89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT +8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 +MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G +A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO +lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi +5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 +hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T +X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----END CERTIFICATE----- + +ePKI Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG +EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx +MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq +MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs +IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi +lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv +qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX +12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O +WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ +ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao +lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ +vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi +Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi +MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 +1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq +KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV +xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP +NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r +GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE +xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx +gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy +sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD +BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +certSIGN ROOT CA +================ +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD +VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa +Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE +CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I +JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH +rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 +ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD +0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 +AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B +Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB +AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 +SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 +x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt +vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz +TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +NetLock Arany (Class Gold) FÅ‘tanúsítvány +======================================== +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G +A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 +dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB +cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx +MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO +ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 +c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu +0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw +/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk +H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw +fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 +neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW +qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta +YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna +NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu +dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +Hongkong Post Root CA 1 +======================= +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT +DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx +NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n +IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 +ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr +auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh +qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY +V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV +HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i +h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio +l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei +IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps +T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT +c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== +-----END CERTIFICATE----- + +SecureSign RootCA11 +=================== +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi +SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS +b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw +KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 +cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL +TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO +wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq +g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP +O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA +bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX +t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh +OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r +bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ +Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 +y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 +lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER +MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv +c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE +BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt +U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA +fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG +0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA +pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm +1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC +AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf +QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE +FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o +lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX +I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 +yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi +LXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +GlobalSign Root CA - R3 +======================= +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt +iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ +0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 +rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl +OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 +xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 +lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 +EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E +bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 +YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r +kpeDMdmztcpHWD9f +-----END CERTIFICATE----- + +Autoridad de Certificacion Firmaprofesional CIF A62634068 +========================================================= +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA +BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 +MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw +QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB +NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD +Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P +B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY +7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH +ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI +plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX +MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX +LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK +bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU +vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud +EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH +DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA +bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx +ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx +51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk +R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP +T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f +Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl +osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR +crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR +saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD +KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi +6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +Izenpe.com +========== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Go Daddy Root Certificate Authority - G2 +======================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu +MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G +A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq +9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD ++qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd +fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl +NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 +BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac +vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r +5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV +N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 +-----END CERTIFICATE----- + +Starfield Root Certificate Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 +eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw +DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg +VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB +dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv +W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs +bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk +N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf +ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU +JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol +TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx +4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw +F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ +c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +Starfield Services Root Certificate Authority - G2 +================================================== +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl +IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT +dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 +h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa +hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP +LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB +rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG +SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP +E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy +xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza +YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 +-----END CERTIFICATE----- + +AffirmTrust Commercial +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw +MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb +DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV +C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 +BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww +MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV +HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG +hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi +qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv +0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh +sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +AffirmTrust Networking +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw +MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE +Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI +dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 +/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb +h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV +HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu +UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 +12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 +WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 +/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +AffirmTrust Premium +=================== +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy +OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy +dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn +BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV +5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs ++7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd +GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R +p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI +S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 +6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 +/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo ++Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv +MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC +6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S +L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK ++4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV +BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg +IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 +g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb +zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== +-----END CERTIFICATE----- + +AffirmTrust Premium ECC +======================= +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV +BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx +MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U +cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ +N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW +BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK +BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X +57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM +eQ== +-----END CERTIFICATE----- + +Certum Trusted Network CA +========================= +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK +ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy +MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU +ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC +l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J +J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 +fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 +cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB +Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw +DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj +jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 +mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj +Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +TWCA Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ +VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG +EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB +IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx +QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC +oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP +4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r +y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG +9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC +mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW +QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY +T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny +Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +Security Communication RootCA2 +============================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC +SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy +aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ ++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R +3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV +spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K +EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 +QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB +CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj +u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk +3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q +tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 +mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +EC-ACC +====== +-----BEGIN CERTIFICATE----- +MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE +BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w +ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD +VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE +CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT +BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 +MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt +SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl +Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh +cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK +w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT +ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 +HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a +E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw +0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD +VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 +Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l +dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ +lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa +Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe +l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 +E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D +5EI= +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2011 +======================================================= +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT +O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y +aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT +AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo +IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI +1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa +71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u +8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH +3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ +MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 +MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu +b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt +XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD +/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N +7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +Actalis Authentication Root CA +============================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Buypass Class 2 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X +DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 +g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn +9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b +/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU +CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff +awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI +zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn +Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX +Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs +M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI +osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S +aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd +DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD +LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 +oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC +wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS +CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN +rJgWVqA= +-----END CERTIFICATE----- + +Buypass Class 3 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X +DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH +sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR +5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh +7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ +ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH +2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV +/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ +RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA +Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq +j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G +uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG +Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 +ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 +KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz +6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug +UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe +eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi +Cp/HuZc= +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 3 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx +MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK +9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU +NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF +iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W +0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr +AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb +fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT +ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h +P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe +Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE +LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD +ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA +BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv +KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z +p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC +AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ +4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y +eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw +MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G +PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw +OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm +2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV +dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph +X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 EV 2009 +================================= +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS +egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh +zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T +7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60 +sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35 +11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv +cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v +ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El +MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp +b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh +c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+ +PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX +ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA +NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv +w9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +CA Disig Root R2 +================ +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw +EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp +ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx +EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp +c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC +w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia +xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7 +A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S +GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV +g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa +5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE +koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A +Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i +Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u +Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV +sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je +dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8 +1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx +mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01 +utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0 +sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg +UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV +7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +ACCVRAIZ1 +========= +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB +SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1 +MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH +UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM +jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0 +RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD +aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ +0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG +WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7 +8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR +5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J +9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK +Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw +Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu +Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM +Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA +QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh +AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA +YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj +AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA +IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk +aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0 +dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2 +MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI +hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E +R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN +YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49 +nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ +TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3 +sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg +Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd +3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p +EfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +TWCA Global Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT +CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD +QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK +EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg +Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C +nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV +r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR +Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV +tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W +KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99 +sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p +yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn +kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI +zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g +cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M +8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg +/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg +lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP +A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m +i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8 +EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3 +zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= +-----END CERTIFICATE----- + +TeliaSonera Root CA v1 +====================== +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE +CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4 +MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW +VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+ +6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA +3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k +B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn +Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH +oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3 +F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ +oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7 +gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc +TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB +AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW +DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm +zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW +pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV +G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc +c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT +JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2 +qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6 +Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems +WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +E-Tugra Certification Authority +=============================== +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w +DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls +ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN +ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw +NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx +QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl +cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD +DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd +hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K +CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g +ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ +BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 +E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz +rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq +jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn +rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 +dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB +/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG +MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK +kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO +XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 +VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo +a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc +dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV +KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT +Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 +8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G +C7TbO6Orb1wdtn7os4I07QZcJA== +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 2 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx +MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ +SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F +vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970 +2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV +WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy +YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4 +r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf +vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR +3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== +-----END CERTIFICATE----- + +Atos TrustedRoot 2011 +===================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU +cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4 +MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG +A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV +hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr +54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+ +DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320 +HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR +z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R +l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ +bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h +k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh +TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9 +61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G +3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +QuoVadis Root CA 1 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE +PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm +PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6 +Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN +ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l +g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV +7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX +9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f +iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg +t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI +hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3 +GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct +Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP ++V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh +3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa +wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6 +O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0 +FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV +hMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +QuoVadis Root CA 2 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh +ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY +NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t +oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o +MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l +V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo +L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ +sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD +6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh +lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI +hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K +pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9 +x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz +dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X +U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw +mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD +zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN +JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr +O3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +QuoVadis Root CA 3 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286 +IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL +Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe +6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3 +I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U +VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7 +5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi +Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM +dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt +rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI +hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS +t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ +TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du +DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib +Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD +hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX +0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW +dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2 +PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +DigiCert Assured ID Root G2 +=========================== +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw +MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH +35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq +bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw +VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP +YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn +lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO +w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv +0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz +d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW +hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M +jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +DigiCert Assured ID Root G3 +=========================== +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD +VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ +BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb +RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs +KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF +UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy +YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy +1vUhZscv6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +DigiCert Global Root G2 +======================= +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx +MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ +kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO +3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV +BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM +UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB +o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu +5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr +F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U +WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH +QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/ +iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +DigiCert Global Root G3 +======================= +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD +VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw +MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k +aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C +AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O +YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp +Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y +3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34 +VOKa5Vt8sycX +-----END CERTIFICATE----- + +DigiCert Trusted Root G4 +======================== +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o +k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa +vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY +QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6 +MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm +mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7 +f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH +dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8 +oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY +ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr +yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy +7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah +ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN +5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb +/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa +5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK +G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP +82Z+ +-----END CERTIFICATE----- + +COMODO RSA Certification Authority +================================== +-----BEGIN CERTIFICATE----- +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 +LaZRfyHBNVOFBkpdn627G190 +-----END CERTIFICATE----- + +USERTrust RSA Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +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 +Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +USERTrust ECC Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2 +0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez +nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV +HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB +HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu +9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R4 +=========================== +-----BEGIN CERTIFICATE----- +MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl +OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P +AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV +MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF +JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q= +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R5 +=========================== +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6 +SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS +h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd +BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx +uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7 +yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +Staat der Nederlanden EV Root CA +================================ +-----BEGIN CERTIFICATE----- +MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M +MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl +cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk +SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW +O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r +0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8 +Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV +XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr +08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV +0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd +74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx +fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa +ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI +eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu +c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq +5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN +b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN +f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi +5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4 +WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK +DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy +eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg== +-----END CERTIFICATE----- + +IdenTrust Commercial Root CA 1 +============================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS +b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES +MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB +IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld +hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/ +mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi +1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C +XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl +3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy +NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV +WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg +xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix +uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI +hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg +ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt +ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV +YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX +feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro +kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe +2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz +Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R +cGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +IdenTrust Public Sector Root CA 1 +================================= +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv +ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV +UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS +b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy +P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6 +Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI +rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf +qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS +mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn +ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh +LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v +iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL +4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B +Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw +DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A +mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt +GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt +m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx +NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4 +Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI +ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC +ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ +3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +Entrust Root Certification Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy +bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug +b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw +HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT +DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx +OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP +/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz +HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU +s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y +TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx +AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6 +0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z +iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi +nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+ +vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO +e4pIb4tF9g== +-----END CERTIFICATE----- + +Entrust Root Certification Authority - EC1 +========================================== +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx +FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn +YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl +ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw +FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs +LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg +dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy +AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef +9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h +vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8 +kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- + +CFCA EV ROOT +============ +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE +CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB +IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw +MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD +DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV +BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD +7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN +uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW +ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7 +xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f +py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K +gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol +hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ +tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf +BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB +/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q +ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua +4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG +E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX +BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn +aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy +PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX +kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C +ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GB CA +=============================== +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG +EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw +MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds +b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX +scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP +rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk +9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o +Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg +GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI +hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD +dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0 +VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui +HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +SZAFIR ROOT CA2 +=============== +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG +A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV +BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ +BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD +VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q +qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK +DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE +2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ +ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi +ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P +AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC +AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5 +O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67 +oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul +4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6 ++/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw== +-----END CERTIFICATE----- + +Certum Trusted Network CA 2 +=========================== +-----BEGIN CERTIFICATE----- +MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE +BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1 +bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y +ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ +TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB +IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9 +7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o +CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b +Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p +uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130 +GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ +9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB +Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye +hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM +BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI +hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW +Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA +L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo +clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM +pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb +w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo +J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm +ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX +is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7 +zAYspsbiDrW5viSP +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2015 +======================================================= +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT +BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0 +aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl +YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx +MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg +QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV +BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw +MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv +bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh +iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+ +6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd +FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr +i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F +GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2 +fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu +iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI +hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+ +D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM +d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y +d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn +82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb +davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F +Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt +J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa +JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q +p/UsQu0yrbYhnr68 +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions ECC RootCA 2015 +=========================================================== +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0 +aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u +cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj +aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw +MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj +IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD +VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290 +Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP +dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK +Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O +BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA +GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn +dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE----- + +ISRG Root X1 +============ +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE +BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD +EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG +EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT +DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r +Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1 +3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K +b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN +Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ +4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf +1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu +hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH +usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r +OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G +A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY +9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV +0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt +hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw +TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx +e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA +JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD +YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n +JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ +m+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- + +AC RAIZ FNMT-RCM +================ +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT +AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw +MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD +TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf +qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr +btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL +j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou +08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw +WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT +tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ +47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC +ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa +i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o +dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s +D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ +j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT +Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW ++YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 +Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d +8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm +5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG +rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- + +Amazon Root CA 1 +================ +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD +VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1 +MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv +bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH +FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ +gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t +dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce +VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3 +DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM +CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy +8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa +2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2 +xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- + +Amazon Root CA 2 +================ +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD +VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1 +MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv +bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4 +kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp +N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9 +AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd +fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx +kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS +btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0 +Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN +c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+ +3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw +DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA +A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY ++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE +YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW +xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ +gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW +aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV +Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3 +KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi +JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw= +-----END CERTIFICATE----- + +Amazon Root CA 3 +================ +-----BEGIN CERTIFICATE----- +MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG +EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy +NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ +MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB +f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr +Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43 +rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc +eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw== +-----END CERTIFICATE----- + +Amazon Root CA 4 +================ +-----BEGIN CERTIFICATE----- +MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG +EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy +NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ +MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN +/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri +83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA +MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1 +AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA== +-----END CERTIFICATE----- + +TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 +============================================= +-----BEGIN CERTIFICATE----- +MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT +D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr +IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g +TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp +ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD +VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt +c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth +bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11 +IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8 +6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc +wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0 +3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9 +WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU +ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ +KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh +AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc +lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R +e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j +q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= +-----END CERTIFICATE----- + +GDCA TrustAUTH R5 ROOT +====================== +-----BEGIN CERTIFICATE----- +MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCQ04xMjAw +BgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8wHQYDVQQD +DBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVow +YjELMAkGA1UEBhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ +IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJjDp6L3TQs +AlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBjTnnEt1u9ol2x8kECK62p +OqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+uKU49tm7srsHwJ5uu4/Ts765/94Y9cnrr +pftZTqfrlYwiOXnhLQiPzLyRuEH3FMEjqcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ +9Cy5WmYqsBebnh52nUpmMUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQ +xXABZG12ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloPzgsM +R6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3GkL30SgLdTMEZeS1SZ +D2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeCjGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4 +oR24qoAATILnsn8JuLwwoC8N9VKejveSswoAHQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx +9hoh49pwBiFYFIeFd3mqgnkCAwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlR +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg +p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZmDRd9FBUb1Ov9 +H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5COmSdI31R9KrO9b7eGZONn35 +6ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ryL3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd ++PwyvzeG5LuOmCd+uh8W4XAR8gPfJWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQ +HtZa37dG/OaG+svgIHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBD +F8Io2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV09tL7ECQ +8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQXR4EzzffHqhmsYzmIGrv +/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrqT8p+ck0LcIymSLumoRT2+1hEmRSuqguT +aaApJUqlyyvdimYHFngVV3Eb7PVHhPOeMTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== +-----END CERTIFICATE----- + +TrustCor RootCert CA-1 +====================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYDVQQGEwJQQTEP +MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig +U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkx +MjMxMTcyMzE2WjCBpDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFu +YW1hIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUGA1UECwwe +VHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZUcnVzdENvciBSb290Q2Vy +dCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv463leLCJhJrMxnHQFgKq1mq +jQCj/IDHUHuO1CAmujIS2CNUSSUQIpidRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4 +pQa81QBeCQryJ3pS/C3Vseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0 +JEsq1pme9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CVEY4h +gLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorWhnAbJN7+KIor0Gqw +/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/DeOxCbeKyKsZn3MzUOcwHwYDVR0j +BBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwDQYJKoZIhvcNAQELBQADggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5 +mDo4Nvu7Zp5I/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf +ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZyonnMlo2HD6C +qFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djtsL1Ac59v2Z3kf9YKVmgenFK+P +3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdNzl/HHk484IkzlQsPpTLWPFp5LBk= +-----END CERTIFICATE----- + +TrustCor RootCert CA-2 +====================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +TrustCor ECA-1 +============== +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYDVQQGEwJQQTEP +MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig +U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3Mjgw +N1owgZwxCzAJBgNVBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5 +MSQwIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29y +IENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3IgRUNBLTEwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb3w9U73NjKYKtR8aja+3+XzP4Q1HpGjOR +MRegdMTUpwHmspI+ap3tDvl0mEDTPwOABoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23 +xFUfJ3zSCNV2HykVh0A53ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmc +p0yJF4OuowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/wZ0+ +fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZFZtS6mFjBAgMBAAGj +YzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAfBgNVHSMEGDAWgBREnkj1zG1I1KBL +f/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF +AAOCAQEABT41XBVwm8nHc2FvcivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u +/ukZMjgDfxT2AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F +hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50soIipX1TH0Xs +J5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BIWJZpTdwHjFGTot+fDz2LYLSC +jaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1WitJ/X5g== +-----END CERTIFICATE----- + +SSL.com Root Certification Authority RSA +======================================== +-----BEGIN CERTIFICATE----- +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 +WuuA8ShYIc2wBlX7Jz9TkHCpBB5XJ7k= +-----END CERTIFICATE----- + +SSL.com Root Certification Authority ECC +======================================== +-----BEGIN CERTIFICATE----- +MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMCVVMxDjAMBgNV +BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAv +BgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEy +MTgxNDAzWhcNNDEwMjEyMTgxNDAzWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO +BgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv +bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IA +BEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI7Z4INcgn64mMU1jrYor+ +8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPgCemB+vNH06NjMGEwHQYDVR0OBBYEFILR +hXMw5zUE044CkvvlpNHEIejNMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTT +jgKS++Wk0cQh6M0wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCW +e+0F+S8Tkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+gA0z +5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl +-----END CERTIFICATE----- + +SSL.com EV Root Certification Authority RSA R2 +============================================== +-----BEGIN CERTIFICATE----- +MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAlVTMQ4w +DAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9u +MTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy +MB4XDTE3MDUzMTE4MTQzN1oXDTQyMDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +DAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYD +VQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvqM0fNTPl9fb69LT3w23jh +hqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssufOePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7w +cXHswxzpY6IXFJ3vG2fThVUCAtZJycxa4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTO +Zw+oz12WGQvE43LrrdF9HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+ +B6KjBSYRaZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcAb9Zh +CBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQGp8hLH94t2S42Oim +9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQVPWKchjgGAGYS5Fl2WlPAApiiECto +RHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMOpgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+Slm +JuwgUHfbSguPvuUCYHBBXtSuUDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48 ++qvWBkofZ6aYMBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV +HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa49QaAJadz20Zp +qJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBWs47LCp1Jjr+kxJG7ZhcFUZh1 +++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nx +Y/hoLVUE0fKNsKTPvDxeH3jnpaAgcLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2G +guDKBAdRUNf/ktUM79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDz +OFSz/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXtll9ldDz7 +CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEmKf7GUmG6sXP/wwyc5Wxq +lD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKKQbNmC1r7fSOl8hqw/96bg5Qu0T/fkreR +rwU7ZcegbLHNYhLDkBvjJc40vG93drEQw/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1 +hlMYegouCRw2n5H9gooiS9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX +9hwJ1C07mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== +-----END CERTIFICATE----- + +SSL.com EV Root Certification Authority ECC +=========================================== +-----BEGIN CERTIFICATE----- +MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMCVVMxDjAMBgNV +BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xNDAy +BgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYw +MjEyMTgxNTIzWhcNNDEwMjEyMTgxNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx +EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NM +LmNvbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMAVIbc/R/fALhBYlzccBYy +3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1KthkuWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0O +BBYEFFvKXuXe0oGqzagtZFG22XKbl+ZPMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe +5d7SgarNqC1kUbbZcpuX5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJ +N+vp1RPZytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZgh5Mm +m7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== +-----END CERTIFICATE----- + +GlobalSign Root CA - R6 +======================= +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEgMB4GA1UECxMX +R2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds +b2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQxMjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9i +YWxTaWduIFJvb3QgQ0EgLSBSNjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFs +U2lnbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQss +grRIxutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1kZguSgMpE +3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxDaNc9PIrFsmbVkJq3MQbF +vuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJwLnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqM +PKq0pPbzlUoSB239jLKJz9CgYXfIWHSw1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+ +azayOeSsJDa38O+2HBNXk7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05O +WgtH8wY2SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/hbguy +CLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4nWUx2OVvq+aWh2IMP +0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpYrZxCRXluDocZXFSxZba/jJvcE+kN +b7gu3GduyYsRtYQUigAZcIN5kZeR1BonvzceMgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQE +AwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNV +HSMEGDAWgBSubAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN +nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGtIxg93eFyRJa0 +lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr6155wsTLxDKZmOMNOsIeDjHfrY +BzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLjvUYAGm0CuiVdjaExUd1URhxN25mW7xocBFym +Fe944Hn+Xds+qkxV/ZoVqW/hpvvfcDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr +3TsTjxKM4kEaSHpzoHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB1 +0jZpnOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfspA9MRf/T +uTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+vJJUEeKgDu+6B5dpffItK +oZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+t +JDfLRVpOoERIyNiwmcUVhAn21klJwGW45hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GC CA +=============================== +-----BEGIN CERTIFICATE----- +MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQswCQYDVQQGEwJD +SDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEo +MCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRa +Fw00MjA1MDkwOTU4MzNaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQL +ExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh +bCBSb290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4nieUqjFqdr +VCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4Wp2OQ0jnUsYd4XxiWD1Ab +NTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd +BgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7TrYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0E +AwMDaAAwZQIwJsdpW9zV57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtk +AjEA2zQgMgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 +-----END CERTIFICATE----- + +GTS Root R1 +=========== +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG +EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv +b3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAG +A1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx +9vaMf/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7wCl7r +aKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjwTcLCeoiKu7rPWRnW +r4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0PfyblqAj+lug8aJRT7oM6iCsVlgmy4HqM +LnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly +4cpk9+aCEI3oncKKiPo4Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr +06zqkUspzBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92 +wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70paDPvOmbsB4om +3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrNVjzRlwW5y0vtOUucxD/SVRNu +JLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEM +BQADggIBADiWCu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1 +d5iyfNm9dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6ZXPYfcX3v73sv +fuo21pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZRgyFmxhE+885H7pwoHyXa/6xm +ld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3d8t5/Wk6kjftbjhlRn7pYL15iJdfOBL07q9b +gsiG1eGZbYwE8na6SfZu6W0eX6DvJ4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdljUEn2NIVq +4BjFbkerQUIpm/ZgDdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0dzpqPJeaAcWEr +tXvM+SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwlfnuzCdyyF62ARPBo +pY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9SQ98POyDGCBDTtWTurQ0 +sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdwsE3PYJ/HQcu51OyLemGhmW/HGY0dVHLql +CFF1pkgl +-----END CERTIFICATE----- + +GTS Root R2 +=========== +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG +EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv +b3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAG +A1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTuk +k3LvCvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY6Dlo +7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAuMC6C/Pq8tBcKSOWI +m8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7kRXuJVfeKH2JShBKzwkCX44ofR5Gm +dFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbu +ak7MkogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscsz +cTJGr61K8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW +Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73Vululycsl +aVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy +5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEM +BQADggIBALZp8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JT +vhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiTz9D2PGcDFWEJ ++YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiApJiS4wGWAqoC7o87xdFtCjMw +c3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvbpxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3Da +WsYDQvTtN6LwG1BUSw7YhN4ZKJmBR64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5r +n/WkhLx3+WuXrD5RRaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56Gtmwfu +Nmsk0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC5AwiWVIQ +7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiFizoHCBy69Y9Vmhh1fuXs +gWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLnyOd/xCxgXS/Dr55FBcOEArf9LAhST4Ld +o/DUhgkC +-----END CERTIFICATE----- + +GTS Root R3 +=========== +-----BEGIN CERTIFICATE----- +MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV +UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg +UjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE +ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUU +Rout736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL24Cej +QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTB8Sa6oC2uhYHP +0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFukfCPAlaUs3L6JbyO5o91lAFJekazInXJ0 +glMLfalAvWhgxeG4VDvBNhcl2MG9AjEAnjWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOa +KaqW04MjyaR7YbPMAuhd +-----END CERTIFICATE----- + +GTS Root R4 +=========== +-----BEGIN CERTIFICATE----- +MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV +UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg +UjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE +ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa +6zzuhXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvRHYqj +QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSATNbrdP9JNqPV +2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0CMRw3J5QdCHojXohw0+WbhXRIjVhLfoI +N+4Zba3bssx9BzT1YBkstTTZbyACMANxsbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11x +zPKwTdb+mciUqXWi4w== +-----END CERTIFICATE----- + +UCA Global G2 Root +================== +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9MQswCQYDVQQG +EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBHbG9iYWwgRzIgUm9vdDAeFw0x +NjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0xCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlU +cnVzdDEbMBkGA1UEAwwSVUNBIEdsb2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxeYrb3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmT +oni9kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzmVHqUwCoV +8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/RVogvGjqNO7uCEeBHANBS +h6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDcC/Vkw85DvG1xudLeJ1uK6NjGruFZfc8o +LTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIjtm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/ +R+zvWr9LesGtOxdQXGLYD0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBe +KW4bHAyvj5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6DlNaBa +4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6iIis7nCs+dwp4wwc +OxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznPO6Q0ibd5Ei9Hxeepl2n8pndntd97 +8XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFIHEjMz15DD/pQwIX4wVZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo +5sOASD0Ee/ojL3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 +1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl1qnN3e92mI0A +Ds0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oUb3n09tDh05S60FdRvScFDcH9 +yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LVPtateJLbXDzz2K36uGt/xDYotgIVilQsnLAX +c47QN6MUPJiVAAwpBVueSUmxX8fjy88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHo +jhJi6IjMtX9Gl8CbEGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZk +bxqgDMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI+Vg7RE+x +ygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGyYiGqhkCyLmTTX8jjfhFn +RR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bXUB+K+wb1whnw0A== +-----END CERTIFICATE----- + +UCA Extended Validation Root +============================ +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQG +EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9u +IFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMxMDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8G +A1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrs +iWogD4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvSsPGP2KxF +Rv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aopO2z6+I9tTcg1367r3CTu +eUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dksHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR +59mzLC52LqGj3n5qiAno8geK+LLNEOfic0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH +0mK1lTnj8/FtDw5lhIpjVMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KR +el7sFsLzKuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/TuDv +B0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41Gsx2VYVdWf6/wFlth +WG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs1+lvK9JKBZP8nm9rZ/+I8U6laUpS +NwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQDfwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS +3H5aBZ8eNJr34RQwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQEL +BQADggIBADaNl8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR +ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQVBcZEhrxH9cM +aVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5c6sq1WnIeJEmMX3ixzDx/BR4 +dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb ++7lsq+KePRXBOy5nAliRn+/4Qh8st2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOW +F3sGPjLtx7dCvHaj2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwi +GpWOvpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2CxR9GUeOc +GMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmxcmtpzyKEC2IPrNkZAJSi +djzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbMfjKaiJUINlK73nZfdklJrX+9ZSCyycEr +dhh2n1ax +-----END CERTIFICATE----- + +Certigna Root CA +================ +-----BEGIN CERTIFICATE----- +MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAwWjELMAkGA1UE +BhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAwMiA0ODE0NjMwODEwMDAzNjEZ +MBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0xMzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjda +MFoxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYz +MDgxMDAwMzYxGTAXBgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sOty3tRQgX +stmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9MCiBtnyN6tMbaLOQdLNyz +KNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPuI9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8 +JXrJhFwLrN1CTivngqIkicuQstDuI7pmTLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16 +XdG+RCYyKfHx9WzMfgIhC59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq +4NYKpkDfePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3YzIoej +wpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWTCo/1VTp2lc5ZmIoJ +lXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1kJWumIWmbat10TWuXekG9qxf5kBdI +jzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp/ +/TBt2dzhauH8XwIDAQABo4IBGjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw +HQYDVR0OBBYEFBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of +1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczovL3d3d3cuY2Vy +dGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilodHRwOi8vY3JsLmNlcnRpZ25h +LmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYraHR0cDovL2NybC5kaGlteW90aXMuY29tL2Nl +cnRpZ25hcm9vdGNhLmNybDANBgkqhkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOIt +OoldaDgvUSILSo3L6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxP +TGRGHVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH60BGM+RFq +7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncBlA2c5uk5jR+mUYyZDDl3 +4bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdio2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd +8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS +6Cvu5zHbugRqh5jnxV/vfaci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaY +tlu3zM63Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayhjWZS +aX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw3kAP+HwV96LOPNde +E4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= +-----END CERTIFICATE----- + +emSign Root CA - G1 +=================== +-----BEGIN CERTIFICATE----- +MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYDVQQGEwJJTjET +MBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRl +ZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBHMTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgx +ODMwMDBaMGcxCzAJBgNVBAYTAklOMRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVk +aHJhIFRlY2hub2xvZ2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQzf2N4aLTN +LnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO8oG0x5ZOrRkVUkr+PHB1 +cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aqd7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHW +DV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhMtTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ +6DqS0hdW5TUaQBw+jSztOd9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrH +hQIDAQABo0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQDAgEG +MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31xPaOfG1vR2vjTnGs2 +vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjMwiI/aTvFthUvozXGaCocV685743Q +NcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6dGNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q ++Mri/Tm3R7nrft8EI6/6nAYH6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeih +U80Bv2noWgbyRQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx +iN66zB+Afko= +-----END CERTIFICATE----- + +emSign ECC Root CA - G3 +======================= +-----BEGIN CERTIFICATE----- +MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQGEwJJTjETMBEG +A1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEg +MB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4 +MTgzMDAwWjBrMQswCQYDVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11 +ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g +RzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0WXTsuwYc +58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xySfvalY8L1X44uT6EYGQIr +MgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuBzhccLikenEhjQjAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+D +CBeQyh+KTOgNG3qxrdWBCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7 +jHvrZQnD+JbNR6iC8hZVdyR+EhCVBCyj +-----END CERTIFICATE----- + +emSign Root CA - C1 +=================== +-----BEGIN CERTIFICATE----- +MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx +EzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNp +Z24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UE +BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQD +ExNlbVNpZ24gUm9vdCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+up +ufGZBczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZHdPIWoU/ +Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH3DspVpNqs8FqOp099cGX +OFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvHGPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4V +I5b2P/AgNBbeCsbEBEV5f6f9vtKppa+cxSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleooms +lMuoaJuvimUnzYnu3Yy1aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+ +XJGFehiqTbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQAD +ggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87/kOXSTKZEhVb3xEp +/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4kqNPEjE2NuLe/gDEo2APJ62gsIq1 +NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrGYQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9 +wC68AivTxEDkigcxHpvOJpkT+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQ +BmIMMMAVSKeoWXzhriKi4gp6D/piq1JM4fHfyr6DDUI= +-----END CERTIFICATE----- + +emSign ECC Root CA - C3 +======================= +-----BEGIN CERTIFICATE----- +MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQGEwJVUzETMBEG +A1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMxIDAeBgNVBAMTF2VtU2lnbiBF +Q0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UE +BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQD +ExdlbVNpZ24gRUNDIFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd +6bciMK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4OjavtisIGJAnB9 +SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0OBBYEFPtaSNCAIEDyqOkA +B2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMDA2gA +MGUCMQC02C8Cif22TGK6Q04ThHK1rt0c3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwU +ZOR8loMRnLDRWmFLpg9J0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== +-----END CERTIFICATE----- + +Hongkong Post Root CA 3 +======================= +-----BEGIN CERTIFICATE----- +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 +dBb9HxEGmpv0 +-----END CERTIFICATE----- + +Entrust Root Certification Authority - G4 +========================================= +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAwgb4xCzAJBgNV +BAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3Qu +bmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1 +dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eSAtIEc0MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYT +AlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 +L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eSAtIEc0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3D +umSXbcr3DbVZwbPLqGgZ2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV +3imz/f3ET+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j5pds +8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAMC1rlLAHGVK/XqsEQ +e9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73TDtTUXm6Hnmo9RR3RXRv06QqsYJn7 +ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNXwbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5X +xNMhIWNlUpEbsZmOeX7m640A2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV +7rtNOzK+mndmnqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8 +dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwlN4y6mACXi0mW +Hv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNjc0kCAwEAAaNCMEAwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9n +MA0GCSqGSIb3DQEBCwUAA4ICAQAS5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4Q +jbRaZIxowLByQzTSGwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht +7LGrhFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/B7NTeLUK +YvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uIAeV8KEsD+UmDfLJ/fOPt +jqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbwH5Lk6rWS02FREAutp9lfx1/cH6NcjKF+ +m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKW +RGhXxNUzzxkvFMSUHHuk2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjA +JOgc47OlIQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk5F6G ++TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuYn/PIjhs4ViFqUZPT +kcpG2om3PVODLAgfi49T3f+sHw== +-----END CERTIFICATE----- + +Microsoft ECC Root Certificate Authority 2017 +============================================= +-----BEGIN CERTIFICATE----- +MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV +UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQgRUND +IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4 +MjMxNjA0WjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw +NAYDVQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQ +BgcqhkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZRogPZnZH6 +thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYbhGBKia/teQ87zvH2RPUB +eMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIy5lycFIM ++Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlf +Xu5gKcs68tvWMoQZP3zVL8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaR +eNtUjGUBiudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= +-----END CERTIFICATE----- + +Microsoft RSA Root Certificate Authority 2017 +============================================= +-----BEGIN CERTIFICATE----- +MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG +EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQg +UlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIw +NzE4MjMwMDIzWjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u +MTYwNAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZNt9GkMml +7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0ZdDMbRnMlfl7rEqUrQ7e +S0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw7 +1VdyvD/IybLeS2v4I2wDwAW9lcfNcztmgGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+ +dkC0zVJhUXAoP8XFWvLJjEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49F +yGcohJUcaDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaGYaRS +MLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6W6IYZVcSn2i51BVr +lMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4KUGsTuqwPN1q3ErWQgR5WrlcihtnJ +0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH+FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJ +ClTUFLkqqNfs+avNJVgyeY+QW5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZCLgLNFgVZJ8og +6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OCgMNPOsduET/m4xaRhPtthH80 +dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk ++ONVFT24bcMKpBLBaYVu32TxU5nhSnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex +/2kskZGT4d9Mozd2TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDy +AmH3pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGRxpl/j8nW +ZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiAppGWSZI1b7rCoucL5mxAyE +7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKT +c0QWbej09+CVgI+WXTik9KveCjCHk9hNAHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D +5KbvtwEwXlGjefVwaaZBRA+GsCyRxj3qrg+E +-----END CERTIFICATE----- + +e-Szigno Root CA 2017 +===================== +-----BEGIN CERTIFICATE----- +MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNVBAYTAkhVMREw +DwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUt +MjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJvb3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZa +Fw00MjA4MjIxMjA3MDZaMHExCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UE +CgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3pp +Z25vIFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtvxie+RJCx +s1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+HWyx7xf58etqjYzBhMA8G +A1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSHERUI0arBeAyxr87GyZDv +vzAEwDAfBgNVHSMEGDAWgBSHERUI0arBeAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEA +tVfd14pVCzbhhkT61NlojbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxO +svxyqltZ+efcMQ== +-----END CERTIFICATE----- + +certSIGN Root CA G2 +=================== +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNVBAYTAlJPMRQw +EgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjAeFw0xNzAy +MDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJBgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lH +TiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAMDFdRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05 +N0IwvlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZuIt4Imfk +abBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhpn+Sc8CnTXPnGFiWeI8Mg +wT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKscpc/I1mbySKEwQdPzH/iV8oScLumZfNp +dWO9lfsbl83kqK/20U6o2YpxJM02PbyWxPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91Qqh +ngLjYl/rNUssuHLoPj1PrCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732 +jcZZroiFDsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fxDTvf +95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgyLcsUDFDYg2WD7rlc +z8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6CeWRgKRM+o/1Pcmqr4tTluCRVLERL +iohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1Ud +DgQWBBSCIS1mxteg4BXrzkwJd8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOB +ywaK8SJJ6ejqkX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC +b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQlqiCA2ClV9+BB +/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0OJD7uNGzcgbJceaBxXntC6Z5 +8hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+cNywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5 +BiKDUyUM/FHE5r7iOZULJK2v0ZXkltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklW +atKcsWMy5WHgUyIOpwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tU +Sxfj03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZkPuXaTH4M +NMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE1LlSVHJ7liXMvGnjSG4N +0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MXQRBdJ3NghVdJIgc= +-----END CERTIFICATE----- + +Trustwave Global Certification Authority +======================================== +-----BEGIN CERTIFICATE----- +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 +29FpHOTKyeC2nOnOcXHebD8WpHk= +-----END CERTIFICATE----- + +Trustwave Global ECC P256 Certification Authority +================================================= +-----BEGIN CERTIFICATE----- +MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYDVQQGEwJVUzER +MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI +b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy +dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1 +NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH77bOYj +43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoNFWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqm +P62jQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt +0UrrdaVKEJmzsaGLSvcwCgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjz +RM4q3wghDDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 +-----END CERTIFICATE----- + +Trustwave Global ECC P384 Certification Authority +================================================= +-----BEGIN CERTIFICATE----- +MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYDVQQGEwJVUzER +MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI +b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy +dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4 +NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuBBAAiA2IABGvaDXU1CDFH +Ba5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJj9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr +/TklZvFe/oyujUF5nQlgziip04pt89ZF1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNV +HQ8BAf8EBQMDBwYAMB0GA1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNn +ADBkAjA3AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsCMGcl +CrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVuSw== +-----END CERTIFICATE----- + +NAVER Global Root Certification Authority +========================================= +-----BEGIN CERTIFICATE----- +MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEMBQAwaTELMAkG +A1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRGT1JNIENvcnAuMTIwMAYDVQQD +DClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4 +NDJaFw0zNzA4MTgyMzU5NTlaMGkxCzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVT +UyBQTEFURk9STSBDb3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVAiQqrDZBb +UGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH38dq6SZeWYp34+hInDEW ++j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lEHoSTGEq0n+USZGnQJoViAbbJAh2+g1G7 +XNr4rRVqmfeSVPc0W+m/6imBEtRTkZazkVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2 +aacp+yPOiNgSnABIqKYPszuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4 +Yb8ObtoqvC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHfnZ3z +VHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaGYQ5fG8Ir4ozVu53B +A0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo0es+nPxdGoMuK8u180SdOqcXYZai +cdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3aCJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejy +YhbLgGvtPe31HzClrkvJE+2KAQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNV +HQ4EFgQU0p+I36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB +Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoNqo0hV4/GPnrK +21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatjcu3cvuzHV+YwIHHW1xDBE1UB +jCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bx +hYTeodoS76TiEJd6eN4MUZeoIUCLhr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTg +E34h5prCy8VCZLQelHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTH +D8z7p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8piKCk5XQ +A76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLRLBT/DShycpWbXgnbiUSY +qqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oG +I/hGoiLtk/bdmuYqh7GYVPEi92tF4+KOdh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmg +kpzNNIaRkPpkUZ3+/uul9XXeifdy +-----END CERTIFICATE----- + +AC RAIZ FNMT-RCM SERVIDORES SEGUROS +=================================== +-----BEGIN CERTIFICATE----- +MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQswCQYDVQQGEwJF +UzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgwFgYDVQRhDA9WQVRFUy1RMjgy +NjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1SQ00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4 +MTIyMDA5MzczM1oXDTQzMTIyMDA5MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQt +UkNNMQ4wDAYDVQQLDAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNB +QyBSQUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuBBAAiA2IA +BPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LHsbI6GA60XYyzZl2hNPk2 +LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oKUm8BA06Oi6NCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqG +SM49BAMDA2kAMGYCMQCuSuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoD +zBOQn5ICMQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJyv+c= +-----END CERTIFICATE----- + +GlobalSign Root R46 +=================== +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUAMEYxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJv +b3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAX +BgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08Es +CVeJOaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQGvGIFAha/ +r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud316HCkD7rRlr+/fKYIje +2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo0q3v84RLHIf8E6M6cqJaESvWJ3En7YEt +bWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSEy132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvj +K8Cd+RTyG/FWaha/LIWFzXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD4 +12lPFzYE+cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCNI/on +ccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzsx2sZy/N78CsHpdls +eVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqaByFrgY/bxFn63iLABJzjqls2k+g9 +vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEM +BQADggIBAHx47PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg +JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti2kM3S+LGteWy +gxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIkpnnpHs6i58FZFZ8d4kuaPp92 +CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRFFRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZm +OUdkLG5NrmJ7v2B0GbhWrJKsFjLtrWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qq +JZ4d16GLuc1CLgSkZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwye +qiv5u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP4vkYxboz +nxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6N3ec592kD3ZDZopD8p/7 +DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3vouXsXgxT7PntgMTzlSdriVZzH81Xwj3 +QEUxeCp6 +-----END CERTIFICATE----- + +GlobalSign Root E46 +=================== +-----BEGIN CERTIFICATE----- +MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYxCzAJBgNVBAYT +AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJvb3Qg +RTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNV +BAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkB +jtjqR+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGddyXqBPCCj +QjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQxCpCPtsad0kRL +gLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZk +vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+ +CAezNIm8BZ/3Hobui3A= +-----END CERTIFICATE----- + +GLOBALTRUST 2020 +================ +-----BEGIN CERTIFICATE----- +MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkGA1UEBhMCQVQx +IzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVT +VCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYxMDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAh +BgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAy +MDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWi +D59bRatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9ZYybNpyrO +VPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3QWPKzv9pj2gOlTblzLmM +CcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPwyJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCm +fecqQjuCgGOlYx8ZzHyyZqjC0203b+J+BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKA +A1GqtH6qRNdDYfOiaxaJSaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9OR +JitHHmkHr96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj04KlG +DfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9MedKZssCz3AwyIDMvU +clOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIwq7ejMZdnrY8XD2zHc+0klGvIg5rQ +mjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1Ud +IwQYMBaAFNwuH9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA +VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJCXtzoRlgHNQIw +4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd6IwPS3BD0IL/qMy/pJTAvoe9 +iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf+I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS +8cE54+X1+NZK3TTN+2/BT+MAi1bikvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2 +HcqtbepBEX4tdJP7wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxS +vTOBTI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6CMUO+1918 +oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn4rnvyOL2NSl6dPrFf4IF +YqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+IaFvowdlxfv1k7/9nR4hYJS8+hge9+6jl +gqispdNpQ80xiEmEU5LAsTkbOYMBMMTyqfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg== +-----END CERTIFICATE----- + +ANF Secure Server Root CA +========================= +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Certum EC-384 CA +================ +-----BEGIN CERTIFICATE----- +MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQswCQYDVQQGEwJQ +TDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2 +MDcyNDU0WhcNNDMwMzI2MDcyNDU0WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERh +dGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx +GTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATEKI6rGFtq +vm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7TmFy8as10CW4kjPMIRBSqn +iBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68KjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFI0GZnQkdjrzife81r1HfS+8EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNo +ADBlAjADVS2m5hjEfO/JUG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0 +QoSZ/6vnnvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= +-----END CERTIFICATE----- + +Certum Trusted Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIFwDCCA6igAwIBAgIQHr9ZULjJgDdMBvfrVU+17TANBgkqhkiG9w0BAQ0FADB6MQswCQYDVQQG +EwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0g +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0Ew +HhcNMTgwMzE2MTIxMDEzWhcNNDMwMzE2MTIxMDEzWjB6MQswCQYDVQQGEwJQTDEhMB8GA1UEChMY +QXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQDRLY67tzbqbTeRn06TpwXkKQMlzhyC93yZn0EGze2jusDbCSzBfN8p +fktlL5On1AFrAygYo9idBcEq2EXxkd7fO9CAAozPOA/qp1x4EaTByIVcJdPTsuclzxFUl6s1wB52 +HO8AU5853BSlLCIls3Jy/I2z5T4IHhQqNwuIPMqw9MjCoa68wb4pZ1Xi/K1ZXP69VyywkI3C7Te2 +fJmItdUDmj0VDT06qKhF8JVOJVkdzZhpu9PMMsmN74H+rX2Ju7pgE8pllWeg8xn2A1bUatMn4qGt +g/BKEiJ3HAVz4hlxQsDsdUaakFjgao4rpUYwBI4Zshfjvqm6f1bxJAPXsiEodg42MEx51UGamqi4 +NboMOvJEGyCI98Ul1z3G4z5D3Yf+xOr1Uz5MZf87Sst4WmsXXw3Hw09Omiqi7VdNIuJGmj8PkTQk +fVXjjJU30xrwCSss0smNtA0Aq2cpKNgB9RkEth2+dv5yXMSFytKAQd8FqKPVhJBPC/PgP5sZ0jeJ +P/J7UhyM9uH3PAeXjA6iWYEMspA90+NZRu0PqafegGtaqge2Gcu8V/OXIXoMsSt0Puvap2ctTMSY +njYJdmZm/Bo/6khUHL4wvYBQv3y1zgD2DGHZ5yQD4OMBgQ692IU0iL2yNqh7XAjlRICMb/gv1SHK +HRzQ+8S1h9E6Tsd2tTVItQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSM+xx1 +vALTn04uSNn5YFSqxLNP+jAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQENBQADggIBAEii1QAL +LtA/vBzVtVRJHlpr9OTy4EA34MwUe7nJ+jW1dReTagVphZzNTxl4WxmB82M+w85bj/UvXgF2Ez8s +ALnNllI5SW0ETsXpD4YN4fqzX4IS8TrOZgYkNCvozMrnadyHncI013nR03e4qllY/p0m+jiGPp2K +h2RX5Rc64vmNueMzeMGQ2Ljdt4NR5MTMI9UGfOZR0800McD2RrsLrfw9EAUqO0qRJe6M1ISHgCq8 +CYyqOhNf6DR5UMEQGfnTKB7U0VEwKbOukGfWHwpjscWpxkIxYxeU72nLL/qMFH3EQxiJ2fAyQOaA +4kZf5ePBAFmo+eggvIksDkc0C+pXwlM2/KfUrzHN/gLldfq5Jwn58/U7yn2fqSLLiMmq0Uc9Nneo +WWRrJ8/vJ8HjJLWG965+Mk2weWjROeiQWMODvA8s1pfrzgzhIMfatz7DP78v3DSk+yshzWePS/Tj +6tQ/50+6uaWTRRxmHyH6ZF5v4HaUMst19W7l9o/HuKTMqJZ9ZPskWkoDbGs4xugDQ5r3V7mzKWmT +OPQD8rv7gmsHINFSH5pkAnuYZttcTVoP0ISVoDwUQwbKytu4QTbaakRnh6+v40URFWkIsr4WOZck +bxJF0WddCajJFdr60qZfE2Efv4WstK2tBZQIgx51F9NxO5NQI1mg7TyRVJ12AMXDuDjb +-----END CERTIFICATE----- + +TunTrust Root CA +================ +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +HARICA TLS RSA Root CA 2021 +=========================== +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBsMQswCQYDVQQG +EwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u +cyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0EgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUz +OFoXDTQ1MDIxMzEwNTUzN1owbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRl +bWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNB +IFJvb3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569lmwVnlskN +JLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE4VGC/6zStGndLuwRo0Xu +a2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uva9of08WRiFukiZLRgeaMOVig1mlDqa2Y +Ulhu2wr7a89o+uOkXjpFc5gH6l8Cct4MpbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K +5FrZx40d/JiZ+yykgmvwKh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEv +dmn8kN3bLW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcYAuUR +0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqBAGMUuTNe3QvboEUH +GjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYqE613TBoYm5EPWNgGVMWX+Ko/IIqm +haZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHrW2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQ +CPxrvrNQKlr9qEgYRtaQQJKQCoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAUX15QvWiWkKQU +EapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3f5Z2EMVGpdAgS1D0NTsY9FVq +QRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxajaH6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxD +QpSbIPDRzbLrLFPCU3hKTwSUQZqPJzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcR +j88YxeMn/ibvBZ3PzzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5 +vZStjBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0/L5H9MG0 +qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pTBGIBnfHAT+7hOtSLIBD6 +Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79aPib8qXPMThcFarmlwDB31qlpzmq6YR/ +PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YWxw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnn +kf3/W9b3raYvAwtt41dU63ZTGI0RmLo= +-----END CERTIFICATE----- + +HARICA TLS ECC Root CA 2021 +=========================== +-----BEGIN CERTIFICATE----- +MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQswCQYDVQQGEwJH +UjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBD +QTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoX +DTQ1MDIxMzExMDEwOVowbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWlj +IGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJv +b3QgQ0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7KKrxcm1l +AEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9YSTHMmE5gEYd103KUkE+b +ECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW +0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAi +rcJRQO9gcS3ujwLEXQNwSaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/Qw +CZ61IygNnxS2PFOiTAZpffpskcYqSUXm7LcT4Tps +-----END CERTIFICATE----- diff --git a/tools/vision/DSP/CONVOL.LOD b/tools/vision/dsp/convol.lod similarity index 100% rename from tools/vision/DSP/CONVOL.LOD rename to tools/vision/dsp/convol.lod diff --git a/tools/vision/DSP/EXJPEGD.PRG b/tools/vision/dsp/exjpegd.prg similarity index 100% rename from tools/vision/DSP/EXJPEGD.PRG rename to tools/vision/dsp/exjpegd.prg diff --git a/tools/vision/DSP/JPEGD.PRG b/tools/vision/dsp/jpegd.prg similarity index 100% rename from tools/vision/DSP/JPEGD.PRG rename to tools/vision/dsp/jpegd.prg diff --git a/tools/vision/DSP/nfjpeg.prg b/tools/vision/dsp/nfjpeg.prg similarity index 100% rename from tools/vision/DSP/nfjpeg.prg rename to tools/vision/dsp/nfjpeg.prg diff --git a/tools/vision/FILTRES/BIDON.VCF b/tools/vision/filtres/bidon.vcf similarity index 100% rename from tools/vision/FILTRES/BIDON.VCF rename to tools/vision/filtres/bidon.vcf diff --git a/tools/vision/FILTRES/english/BIDON.VCF b/tools/vision/filtres/english/bidon.vcf similarity index 100% rename from tools/vision/FILTRES/english/BIDON.VCF rename to tools/vision/filtres/english/bidon.vcf diff --git a/tools/vision/FILTRES/FLOU1.VCF b/tools/vision/filtres/english/flou1.vcf similarity index 100% rename from tools/vision/FILTRES/FLOU1.VCF rename to tools/vision/filtres/english/flou1.vcf diff --git a/tools/vision/FILTRES/FLOU2.VCF b/tools/vision/filtres/english/flou2.vcf similarity index 100% rename from tools/vision/FILTRES/FLOU2.VCF rename to tools/vision/filtres/english/flou2.vcf diff --git a/tools/vision/FILTRES/FLOU3.VCF b/tools/vision/filtres/english/flou3.vcf similarity index 100% rename from tools/vision/FILTRES/FLOU3.VCF rename to tools/vision/filtres/english/flou3.vcf diff --git a/tools/vision/FILTRES/FLOU551.VCF b/tools/vision/filtres/english/flou551.vcf similarity index 100% rename from tools/vision/FILTRES/FLOU551.VCF rename to tools/vision/filtres/english/flou551.vcf diff --git a/tools/vision/FILTRES/FLOU552.VCF b/tools/vision/filtres/english/flou552.vcf similarity index 100% rename from tools/vision/FILTRES/FLOU552.VCF rename to tools/vision/filtres/english/flou552.vcf diff --git a/tools/vision/FILTRES/FLOU553.VCF b/tools/vision/filtres/english/flou553.vcf similarity index 100% rename from tools/vision/FILTRES/FLOU553.VCF rename to tools/vision/filtres/english/flou553.vcf diff --git a/tools/vision/FILTRES/FLOU554.VCF b/tools/vision/filtres/english/flou554.vcf similarity index 100% rename from tools/vision/FILTRES/FLOU554.VCF rename to tools/vision/filtres/english/flou554.vcf diff --git a/tools/vision/FILTRES/GRAD33E.VCF b/tools/vision/filtres/english/grad33e.vcf similarity index 100% rename from tools/vision/FILTRES/GRAD33E.VCF rename to tools/vision/filtres/english/grad33e.vcf diff --git a/tools/vision/FILTRES/GRAD33N.VCF b/tools/vision/filtres/english/grad33n.vcf similarity index 100% rename from tools/vision/FILTRES/GRAD33N.VCF rename to tools/vision/filtres/english/grad33n.vcf diff --git a/tools/vision/FILTRES/GRAD33NE.VCF b/tools/vision/filtres/english/grad33ne.vcf similarity index 100% rename from tools/vision/FILTRES/GRAD33NE.VCF rename to tools/vision/filtres/english/grad33ne.vcf diff --git a/tools/vision/FILTRES/GRAD33NO.VCF b/tools/vision/filtres/english/grad33no.vcf similarity index 100% rename from tools/vision/FILTRES/GRAD33NO.VCF rename to tools/vision/filtres/english/grad33no.vcf diff --git a/tools/vision/FILTRES/GRAD33O.VCF b/tools/vision/filtres/english/grad33o.vcf similarity index 100% rename from tools/vision/FILTRES/GRAD33O.VCF rename to tools/vision/filtres/english/grad33o.vcf diff --git a/tools/vision/FILTRES/GRAD33S.VCF b/tools/vision/filtres/english/grad33s.vcf similarity index 100% rename from tools/vision/FILTRES/GRAD33S.VCF rename to tools/vision/filtres/english/grad33s.vcf diff --git a/tools/vision/FILTRES/GRAD33SE.VCF b/tools/vision/filtres/english/grad33se.vcf similarity index 100% rename from tools/vision/FILTRES/GRAD33SE.VCF rename to tools/vision/filtres/english/grad33se.vcf diff --git a/tools/vision/FILTRES/GRAD33SO.VCF b/tools/vision/filtres/english/grad33so.vcf similarity index 100% rename from tools/vision/FILTRES/GRAD33SO.VCF rename to tools/vision/filtres/english/grad33so.vcf diff --git a/tools/vision/FILTRES/LAPLA331.VCF b/tools/vision/filtres/english/lapla331.vcf similarity index 100% rename from tools/vision/FILTRES/LAPLA331.VCF rename to tools/vision/filtres/english/lapla331.vcf diff --git a/tools/vision/FILTRES/LAPLA551.VCF b/tools/vision/filtres/english/lapla551.vcf similarity index 100% rename from tools/vision/FILTRES/LAPLA551.VCF rename to tools/vision/filtres/english/lapla551.vcf diff --git a/tools/vision/FILTRES/NET331.VCF b/tools/vision/filtres/english/net331.vcf similarity index 100% rename from tools/vision/FILTRES/NET331.VCF rename to tools/vision/filtres/english/net331.vcf diff --git a/tools/vision/FILTRES/OBRE3DE.VCF b/tools/vision/filtres/english/obre3de.vcf similarity index 100% rename from tools/vision/FILTRES/OBRE3DE.VCF rename to tools/vision/filtres/english/obre3de.vcf diff --git a/tools/vision/FILTRES/OBRE3DNE.VCF b/tools/vision/filtres/english/obre3dne.vcf similarity index 100% rename from tools/vision/FILTRES/OBRE3DNE.VCF rename to tools/vision/filtres/english/obre3dne.vcf diff --git a/tools/vision/FILTRES/OBRE3DNO.VCF b/tools/vision/filtres/english/obre3dno.vcf similarity index 100% rename from tools/vision/FILTRES/OBRE3DNO.VCF rename to tools/vision/filtres/english/obre3dno.vcf diff --git a/tools/vision/FILTRES/OBRE3DO.VCF b/tools/vision/filtres/english/obre3do.vcf similarity index 100% rename from tools/vision/FILTRES/OBRE3DO.VCF rename to tools/vision/filtres/english/obre3do.vcf diff --git a/tools/vision/FILTRES/OBRE3DSE.VCF b/tools/vision/filtres/english/obre3dse.vcf similarity index 100% rename from tools/vision/FILTRES/OBRE3DSE.VCF rename to tools/vision/filtres/english/obre3dse.vcf diff --git a/tools/vision/FILTRES/OBRE3DSO.VCF b/tools/vision/filtres/english/obre3dso.vcf similarity index 100% rename from tools/vision/FILTRES/OBRE3DSO.VCF rename to tools/vision/filtres/english/obre3dso.vcf diff --git a/tools/vision/FILTRES/PERSO331.VCF b/tools/vision/filtres/english/perso331.vcf similarity index 100% rename from tools/vision/FILTRES/PERSO331.VCF rename to tools/vision/filtres/english/perso331.vcf diff --git a/tools/vision/FILTRES/PERSO332.VCF b/tools/vision/filtres/english/perso332.vcf similarity index 100% rename from tools/vision/FILTRES/PERSO332.VCF rename to tools/vision/filtres/english/perso332.vcf diff --git a/tools/vision/FILTRES/PERSO333.VCF b/tools/vision/filtres/english/perso333.vcf similarity index 100% rename from tools/vision/FILTRES/PERSO333.VCF rename to tools/vision/filtres/english/perso333.vcf diff --git a/tools/vision/FILTRES/PERSO334.VCF b/tools/vision/filtres/english/perso334.vcf similarity index 100% rename from tools/vision/FILTRES/PERSO334.VCF rename to tools/vision/filtres/english/perso334.vcf diff --git a/tools/vision/FILTRES/XXX.VCF b/tools/vision/filtres/english/xxx.vcf similarity index 100% rename from tools/vision/FILTRES/XXX.VCF rename to tools/vision/filtres/english/xxx.vcf diff --git a/tools/vision/FILTRES/english/FLOU1.VCF b/tools/vision/filtres/flou1.vcf similarity index 100% rename from tools/vision/FILTRES/english/FLOU1.VCF rename to tools/vision/filtres/flou1.vcf diff --git a/tools/vision/FILTRES/english/FLOU2.VCF b/tools/vision/filtres/flou2.vcf similarity index 100% rename from tools/vision/FILTRES/english/FLOU2.VCF rename to tools/vision/filtres/flou2.vcf diff --git a/tools/vision/FILTRES/english/FLOU3.VCF b/tools/vision/filtres/flou3.vcf similarity index 100% rename from tools/vision/FILTRES/english/FLOU3.VCF rename to tools/vision/filtres/flou3.vcf diff --git a/tools/vision/FILTRES/english/FLOU551.VCF b/tools/vision/filtres/flou551.vcf similarity index 100% rename from tools/vision/FILTRES/english/FLOU551.VCF rename to tools/vision/filtres/flou551.vcf diff --git a/tools/vision/FILTRES/english/FLOU552.VCF b/tools/vision/filtres/flou552.vcf similarity index 100% rename from tools/vision/FILTRES/english/FLOU552.VCF rename to tools/vision/filtres/flou552.vcf diff --git a/tools/vision/FILTRES/english/FLOU553.VCF b/tools/vision/filtres/flou553.vcf similarity index 100% rename from tools/vision/FILTRES/english/FLOU553.VCF rename to tools/vision/filtres/flou553.vcf diff --git a/tools/vision/FILTRES/english/FLOU554.VCF b/tools/vision/filtres/flou554.vcf similarity index 100% rename from tools/vision/FILTRES/english/FLOU554.VCF rename to tools/vision/filtres/flou554.vcf diff --git a/tools/vision/FILTRES/francais/BIDON.VCF b/tools/vision/filtres/francais/bidon.vcf similarity index 100% rename from tools/vision/FILTRES/francais/BIDON.VCF rename to tools/vision/filtres/francais/bidon.vcf diff --git a/tools/vision/FILTRES/francais/FLOU1.VCF b/tools/vision/filtres/francais/flou1.vcf similarity index 100% rename from tools/vision/FILTRES/francais/FLOU1.VCF rename to tools/vision/filtres/francais/flou1.vcf diff --git a/tools/vision/FILTRES/francais/FLOU2.VCF b/tools/vision/filtres/francais/flou2.vcf similarity index 100% rename from tools/vision/FILTRES/francais/FLOU2.VCF rename to tools/vision/filtres/francais/flou2.vcf diff --git a/tools/vision/FILTRES/francais/FLOU3.VCF b/tools/vision/filtres/francais/flou3.vcf similarity index 100% rename from tools/vision/FILTRES/francais/FLOU3.VCF rename to tools/vision/filtres/francais/flou3.vcf diff --git a/tools/vision/FILTRES/francais/FLOU551.VCF b/tools/vision/filtres/francais/flou551.vcf similarity index 100% rename from tools/vision/FILTRES/francais/FLOU551.VCF rename to tools/vision/filtres/francais/flou551.vcf diff --git a/tools/vision/FILTRES/francais/FLOU552.VCF b/tools/vision/filtres/francais/flou552.vcf similarity index 100% rename from tools/vision/FILTRES/francais/FLOU552.VCF rename to tools/vision/filtres/francais/flou552.vcf diff --git a/tools/vision/FILTRES/francais/FLOU553.VCF b/tools/vision/filtres/francais/flou553.vcf similarity index 100% rename from tools/vision/FILTRES/francais/FLOU553.VCF rename to tools/vision/filtres/francais/flou553.vcf diff --git a/tools/vision/FILTRES/francais/FLOU554.VCF b/tools/vision/filtres/francais/flou554.vcf similarity index 100% rename from tools/vision/FILTRES/francais/FLOU554.VCF rename to tools/vision/filtres/francais/flou554.vcf diff --git a/tools/vision/FILTRES/francais/GRAD33E.VCF b/tools/vision/filtres/francais/grad33e.vcf similarity index 100% rename from tools/vision/FILTRES/francais/GRAD33E.VCF rename to tools/vision/filtres/francais/grad33e.vcf diff --git a/tools/vision/FILTRES/francais/GRAD33N.VCF b/tools/vision/filtres/francais/grad33n.vcf similarity index 100% rename from tools/vision/FILTRES/francais/GRAD33N.VCF rename to tools/vision/filtres/francais/grad33n.vcf diff --git a/tools/vision/FILTRES/francais/GRAD33NE.VCF b/tools/vision/filtres/francais/grad33ne.vcf similarity index 100% rename from tools/vision/FILTRES/francais/GRAD33NE.VCF rename to tools/vision/filtres/francais/grad33ne.vcf diff --git a/tools/vision/FILTRES/francais/GRAD33NO.VCF b/tools/vision/filtres/francais/grad33no.vcf similarity index 100% rename from tools/vision/FILTRES/francais/GRAD33NO.VCF rename to tools/vision/filtres/francais/grad33no.vcf diff --git a/tools/vision/FILTRES/francais/GRAD33O.VCF b/tools/vision/filtres/francais/grad33o.vcf similarity index 100% rename from tools/vision/FILTRES/francais/GRAD33O.VCF rename to tools/vision/filtres/francais/grad33o.vcf diff --git a/tools/vision/FILTRES/francais/GRAD33S.VCF b/tools/vision/filtres/francais/grad33s.vcf similarity index 100% rename from tools/vision/FILTRES/francais/GRAD33S.VCF rename to tools/vision/filtres/francais/grad33s.vcf diff --git a/tools/vision/FILTRES/francais/GRAD33SE.VCF b/tools/vision/filtres/francais/grad33se.vcf similarity index 100% rename from tools/vision/FILTRES/francais/GRAD33SE.VCF rename to tools/vision/filtres/francais/grad33se.vcf diff --git a/tools/vision/FILTRES/francais/GRAD33SO.VCF b/tools/vision/filtres/francais/grad33so.vcf similarity index 100% rename from tools/vision/FILTRES/francais/GRAD33SO.VCF rename to tools/vision/filtres/francais/grad33so.vcf diff --git a/tools/vision/FILTRES/francais/LAPLA331.VCF b/tools/vision/filtres/francais/lapla331.vcf similarity index 100% rename from tools/vision/FILTRES/francais/LAPLA331.VCF rename to tools/vision/filtres/francais/lapla331.vcf diff --git a/tools/vision/FILTRES/francais/LAPLA551.VCF b/tools/vision/filtres/francais/lapla551.vcf similarity index 100% rename from tools/vision/FILTRES/francais/LAPLA551.VCF rename to tools/vision/filtres/francais/lapla551.vcf diff --git a/tools/vision/FILTRES/francais/NET331.VCF b/tools/vision/filtres/francais/net331.vcf similarity index 100% rename from tools/vision/FILTRES/francais/NET331.VCF rename to tools/vision/filtres/francais/net331.vcf diff --git a/tools/vision/FILTRES/francais/OBRE3DE.VCF b/tools/vision/filtres/francais/obre3de.vcf similarity index 100% rename from tools/vision/FILTRES/francais/OBRE3DE.VCF rename to tools/vision/filtres/francais/obre3de.vcf diff --git a/tools/vision/FILTRES/francais/OBRE3DNE.VCF b/tools/vision/filtres/francais/obre3dne.vcf similarity index 100% rename from tools/vision/FILTRES/francais/OBRE3DNE.VCF rename to tools/vision/filtres/francais/obre3dne.vcf diff --git a/tools/vision/FILTRES/francais/OBRE3DNO.VCF b/tools/vision/filtres/francais/obre3dno.vcf similarity index 100% rename from tools/vision/FILTRES/francais/OBRE3DNO.VCF rename to tools/vision/filtres/francais/obre3dno.vcf diff --git a/tools/vision/FILTRES/francais/OBRE3DO.VCF b/tools/vision/filtres/francais/obre3do.vcf similarity index 100% rename from tools/vision/FILTRES/francais/OBRE3DO.VCF rename to tools/vision/filtres/francais/obre3do.vcf diff --git a/tools/vision/FILTRES/francais/OBRE3DSE.VCF b/tools/vision/filtres/francais/obre3dse.vcf similarity index 100% rename from tools/vision/FILTRES/francais/OBRE3DSE.VCF rename to tools/vision/filtres/francais/obre3dse.vcf diff --git a/tools/vision/FILTRES/francais/OBRE3DSO.VCF b/tools/vision/filtres/francais/obre3dso.vcf similarity index 100% rename from tools/vision/FILTRES/francais/OBRE3DSO.VCF rename to tools/vision/filtres/francais/obre3dso.vcf diff --git a/tools/vision/FILTRES/francais/PERSO331.VCF b/tools/vision/filtres/francais/perso331.vcf similarity index 100% rename from tools/vision/FILTRES/francais/PERSO331.VCF rename to tools/vision/filtres/francais/perso331.vcf diff --git a/tools/vision/FILTRES/francais/PERSO332.VCF b/tools/vision/filtres/francais/perso332.vcf similarity index 100% rename from tools/vision/FILTRES/francais/PERSO332.VCF rename to tools/vision/filtres/francais/perso332.vcf diff --git a/tools/vision/FILTRES/francais/PERSO333.VCF b/tools/vision/filtres/francais/perso333.vcf similarity index 100% rename from tools/vision/FILTRES/francais/PERSO333.VCF rename to tools/vision/filtres/francais/perso333.vcf diff --git a/tools/vision/FILTRES/francais/PERSO334.VCF b/tools/vision/filtres/francais/perso334.vcf similarity index 100% rename from tools/vision/FILTRES/francais/PERSO334.VCF rename to tools/vision/filtres/francais/perso334.vcf diff --git a/tools/vision/FILTRES/francais/XXX.VCF b/tools/vision/filtres/francais/xxx.vcf similarity index 100% rename from tools/vision/FILTRES/francais/XXX.VCF rename to tools/vision/filtres/francais/xxx.vcf diff --git a/tools/vision/FILTRES/english/GRAD33E.VCF b/tools/vision/filtres/grad33e.vcf similarity index 100% rename from tools/vision/FILTRES/english/GRAD33E.VCF rename to tools/vision/filtres/grad33e.vcf diff --git a/tools/vision/FILTRES/english/GRAD33N.VCF b/tools/vision/filtres/grad33n.vcf similarity index 100% rename from tools/vision/FILTRES/english/GRAD33N.VCF rename to tools/vision/filtres/grad33n.vcf diff --git a/tools/vision/FILTRES/english/GRAD33NE.VCF b/tools/vision/filtres/grad33ne.vcf similarity index 100% rename from tools/vision/FILTRES/english/GRAD33NE.VCF rename to tools/vision/filtres/grad33ne.vcf diff --git a/tools/vision/FILTRES/english/GRAD33NO.VCF b/tools/vision/filtres/grad33no.vcf similarity index 100% rename from tools/vision/FILTRES/english/GRAD33NO.VCF rename to tools/vision/filtres/grad33no.vcf diff --git a/tools/vision/FILTRES/english/GRAD33O.VCF b/tools/vision/filtres/grad33o.vcf similarity index 100% rename from tools/vision/FILTRES/english/GRAD33O.VCF rename to tools/vision/filtres/grad33o.vcf diff --git a/tools/vision/FILTRES/english/GRAD33S.VCF b/tools/vision/filtres/grad33s.vcf similarity index 100% rename from tools/vision/FILTRES/english/GRAD33S.VCF rename to tools/vision/filtres/grad33s.vcf diff --git a/tools/vision/FILTRES/english/GRAD33SE.VCF b/tools/vision/filtres/grad33se.vcf similarity index 100% rename from tools/vision/FILTRES/english/GRAD33SE.VCF rename to tools/vision/filtres/grad33se.vcf diff --git a/tools/vision/FILTRES/english/GRAD33SO.VCF b/tools/vision/filtres/grad33so.vcf similarity index 100% rename from tools/vision/FILTRES/english/GRAD33SO.VCF rename to tools/vision/filtres/grad33so.vcf diff --git a/tools/vision/FILTRES/english/LAPLA331.VCF b/tools/vision/filtres/lapla331.vcf similarity index 100% rename from tools/vision/FILTRES/english/LAPLA331.VCF rename to tools/vision/filtres/lapla331.vcf diff --git a/tools/vision/FILTRES/english/LAPLA551.VCF b/tools/vision/filtres/lapla551.vcf similarity index 100% rename from tools/vision/FILTRES/english/LAPLA551.VCF rename to tools/vision/filtres/lapla551.vcf diff --git a/tools/vision/FILTRES/english/NET331.VCF b/tools/vision/filtres/net331.vcf similarity index 100% rename from tools/vision/FILTRES/english/NET331.VCF rename to tools/vision/filtres/net331.vcf diff --git a/tools/vision/FILTRES/english/OBRE3DE.VCF b/tools/vision/filtres/obre3de.vcf similarity index 100% rename from tools/vision/FILTRES/english/OBRE3DE.VCF rename to tools/vision/filtres/obre3de.vcf diff --git a/tools/vision/FILTRES/english/OBRE3DNE.VCF b/tools/vision/filtres/obre3dne.vcf similarity index 100% rename from tools/vision/FILTRES/english/OBRE3DNE.VCF rename to tools/vision/filtres/obre3dne.vcf diff --git a/tools/vision/FILTRES/english/OBRE3DNO.VCF b/tools/vision/filtres/obre3dno.vcf similarity index 100% rename from tools/vision/FILTRES/english/OBRE3DNO.VCF rename to tools/vision/filtres/obre3dno.vcf diff --git a/tools/vision/FILTRES/english/OBRE3DO.VCF b/tools/vision/filtres/obre3do.vcf similarity index 100% rename from tools/vision/FILTRES/english/OBRE3DO.VCF rename to tools/vision/filtres/obre3do.vcf diff --git a/tools/vision/FILTRES/english/OBRE3DSE.VCF b/tools/vision/filtres/obre3dse.vcf similarity index 100% rename from tools/vision/FILTRES/english/OBRE3DSE.VCF rename to tools/vision/filtres/obre3dse.vcf diff --git a/tools/vision/FILTRES/english/OBRE3DSO.VCF b/tools/vision/filtres/obre3dso.vcf similarity index 100% rename from tools/vision/FILTRES/english/OBRE3DSO.VCF rename to tools/vision/filtres/obre3dso.vcf diff --git a/tools/vision/FILTRES/english/PERSO331.VCF b/tools/vision/filtres/perso331.vcf similarity index 100% rename from tools/vision/FILTRES/english/PERSO331.VCF rename to tools/vision/filtres/perso331.vcf diff --git a/tools/vision/FILTRES/english/PERSO332.VCF b/tools/vision/filtres/perso332.vcf similarity index 100% rename from tools/vision/FILTRES/english/PERSO332.VCF rename to tools/vision/filtres/perso332.vcf diff --git a/tools/vision/FILTRES/english/PERSO333.VCF b/tools/vision/filtres/perso333.vcf similarity index 100% rename from tools/vision/FILTRES/english/PERSO333.VCF rename to tools/vision/filtres/perso333.vcf diff --git a/tools/vision/FILTRES/english/PERSO334.VCF b/tools/vision/filtres/perso334.vcf similarity index 100% rename from tools/vision/FILTRES/english/PERSO334.VCF rename to tools/vision/filtres/perso334.vcf diff --git a/tools/vision/FILTRES/english/XXX.VCF b/tools/vision/filtres/xxx.vcf similarity index 100% rename from tools/vision/FILTRES/english/XXX.VCF rename to tools/vision/filtres/xxx.vcf diff --git a/tools/vision/LANGUES/BULLE.RSC b/tools/vision/langues/bulle.rsc similarity index 100% rename from tools/vision/LANGUES/BULLE.RSC rename to tools/vision/langues/bulle.rsc diff --git a/tools/vision/LANGUES/chkmsg.c b/tools/vision/langues/chkmsg.c similarity index 100% rename from tools/vision/LANGUES/chkmsg.c rename to tools/vision/langues/chkmsg.c diff --git a/tools/vision/LANGUES/chkmsg.prg b/tools/vision/langues/chkmsg.prg similarity index 100% rename from tools/vision/LANGUES/chkmsg.prg rename to tools/vision/langues/chkmsg.prg diff --git a/tools/vision/LANGUES/CHKMSG.PRJ b/tools/vision/langues/chkmsg.prj similarity index 100% rename from tools/vision/LANGUES/CHKMSG.PRJ rename to tools/vision/langues/chkmsg.prj diff --git a/tools/vision/LANGUES/DEUTSCH/vision.hrd b/tools/vision/langues/deutsch/vision.hrd similarity index 100% rename from tools/vision/LANGUES/DEUTSCH/vision.hrd rename to tools/vision/langues/deutsch/vision.hrd diff --git a/tools/vision/LANGUES/DEUTSCH/VISION.RSC b/tools/vision/langues/deutsch/vision.rsc similarity index 54% rename from tools/vision/LANGUES/DEUTSCH/VISION.RSC rename to tools/vision/langues/deutsch/vision.rsc index c633193..5722569 100644 Binary files a/tools/vision/LANGUES/DEUTSCH/VISION.RSC and b/tools/vision/langues/deutsch/vision.rsc differ diff --git a/tools/vision/LANGUES/DEUTSCH/visionb.hrd b/tools/vision/langues/deutsch/visionb.hrd similarity index 100% rename from tools/vision/LANGUES/DEUTSCH/visionb.hrd rename to tools/vision/langues/deutsch/visionb.hrd diff --git a/tools/vision/LANGUES/DEUTSCH/VISIONB.RSC b/tools/vision/langues/deutsch/visionb.rsc similarity index 100% rename from tools/vision/LANGUES/DEUTSCH/VISIONB.RSC rename to tools/vision/langues/deutsch/visionb.rsc diff --git a/tools/vision/LANGUES/DEUTSCH/vmsg.txt b/tools/vision/langues/deutsch/vmsg.txt similarity index 92% rename from tools/vision/LANGUES/DEUTSCH/vmsg.txt rename to tools/vision/langues/deutsch/vmsg.txt index 31458e0..77899e0 100644 --- a/tools/vision/LANGUES/DEUTSCH/vmsg.txt +++ b/tools/vision/langues/deutsch/vmsg.txt @@ -280,4 +280,12 @@ 280:Entfernen von Datens„tzen und Bilddateien aus dem katalog... 281: W„hlen Sie alle Obkekte aus 282: Aus Katalog entfernen... -283: Bilddateien entfernen... \ No newline at end of file +283: Bilddateien entfernen... +284:Aktualisierung der Datenbank der Bildmodule... +285:[Update %s verfgbar!|M”chtenSie es installieren?][Ja|Nein] +286:[Update abgeschlossen!|VISION wird jetzt beendet][OK] +287:[Internet scheint nicht zug„nglich zu sein|M”chtenSie die Update-Prfung deaktivieren?][Ja|Nein] +288:VISION aktualisieren... +289:[Aktualisierung fehlgeschlagen mit %d|Check VISION.LOG][OK] +290:Zus„tzliche Bildattribute +291:[Diese Funktion ist jetzt|bei Dither LDV verfgbar][OK] \ No newline at end of file diff --git a/tools/vision/LANGUES/ENGLISH/VISION.H b/tools/vision/langues/english/vision.h similarity index 100% rename from tools/vision/LANGUES/ENGLISH/VISION.H rename to tools/vision/langues/english/vision.h diff --git a/tools/vision/LANGUES/ENGLISH/vision.hrd b/tools/vision/langues/english/vision.hrd similarity index 100% rename from tools/vision/LANGUES/ENGLISH/vision.hrd rename to tools/vision/langues/english/vision.hrd diff --git a/tools/vision/LANGUES/ENGLISH/VISION.RSC b/tools/vision/langues/english/vision.rsc similarity index 54% rename from tools/vision/LANGUES/ENGLISH/VISION.RSC rename to tools/vision/langues/english/vision.rsc index 294437f..de63726 100644 Binary files a/tools/vision/LANGUES/ENGLISH/VISION.RSC and b/tools/vision/langues/english/vision.rsc differ diff --git a/tools/vision/LANGUES/ENGLISH/VISIONB.H b/tools/vision/langues/english/visionb.h similarity index 100% rename from tools/vision/LANGUES/ENGLISH/VISIONB.H rename to tools/vision/langues/english/visionb.h diff --git a/tools/vision/LANGUES/ENGLISH/visionb.hrd b/tools/vision/langues/english/visionb.hrd similarity index 100% rename from tools/vision/LANGUES/ENGLISH/visionb.hrd rename to tools/vision/langues/english/visionb.hrd diff --git a/tools/vision/LANGUES/ENGLISH/VISIONB.RSC b/tools/vision/langues/english/visionb.rsc similarity index 100% rename from tools/vision/LANGUES/ENGLISH/VISIONB.RSC rename to tools/vision/langues/english/visionb.rsc diff --git a/tools/vision/LANGUES/ENGLISH/vmsg.txt b/tools/vision/langues/english/vmsg.txt similarity index 93% rename from tools/vision/LANGUES/ENGLISH/vmsg.txt rename to tools/vision/langues/english/vmsg.txt index c7167c4..86d44de 100644 --- a/tools/vision/LANGUES/ENGLISH/vmsg.txt +++ b/tools/vision/langues/english/vmsg.txt @@ -280,4 +280,12 @@ 280:Removing records and image files from catalog... 281: Select all objects 282: Remove from catalog... -283: Remove image files... \ No newline at end of file +283: Remove image files... +284:Updating image modules database... +285:[Update %s available!|Would you like to install it?][Yes|No] +286:[Update done!|VISION will now exit][OK] +287:[Internet looks not accessible|Would you like to disable update check?][Yes|No] +288:Updating VISION... +289:[Update failed with %d|Check VISION.LOG][OK] +290:Additional image attributes +291:[This feature is now available|from Dither LDV][OK] diff --git a/tools/vision/LANGUES/FRANCAIS/VISION.H b/tools/vision/langues/francais/vision.h similarity index 98% rename from tools/vision/LANGUES/FRANCAIS/VISION.H rename to tools/vision/langues/francais/vision.h index e6e0c03..e4e44e7 100644 --- a/tools/vision/LANGUES/FRANCAIS/VISION.H +++ b/tools/vision/langues/francais/vision.h @@ -128,6 +128,7 @@ #define INFO_TOTAL 25 /* BOXTEXT dans l'arbre FORM_INFO */ #define INFO_OK 26 /* BUTTON dans l'arbre FORM_INFO */ #define INFO_CANCEL 27 /* BUTTON dans l'arbre FORM_INFO */ +#define INFO_PLUS 28 /* BUTTON dans l'arbre FORM_INFO */ #define FORM_TEXTE 4 /* Formulaire/Dialogue */ #define TEXTE_TNORMAL 3 /* TEXT dans l'arbre FORM_TEXTE */ @@ -905,5 +906,3 @@ #define LDVA_OK 38 /* BUTTON dans l'arbre FORM_LDVAPPLY */ #define LDVA_PREVIEW 39 /* BUTTON dans l'arbre FORM_LDVAPPLY */ #define LDVA_CANCEL 40 /* BUTTON dans l'arbre FORM_LDVAPPLY */ - -#define FORM_HEX 52 /* Formulaire/Dialogue */ diff --git a/tools/vision/LANGUES/FRANCAIS/VISION.HRD b/tools/vision/langues/francais/vision.hrd similarity index 97% rename from tools/vision/LANGUES/FRANCAIS/VISION.HRD rename to tools/vision/langues/francais/vision.hrd index 97436c8..eb1e186 100644 Binary files a/tools/vision/LANGUES/FRANCAIS/VISION.HRD and b/tools/vision/langues/francais/vision.hrd differ diff --git a/tools/vision/LANGUES/FRANCAIS/VISION.RSC b/tools/vision/langues/francais/vision.rsc similarity index 65% rename from tools/vision/LANGUES/FRANCAIS/VISION.RSC rename to tools/vision/langues/francais/vision.rsc index d4dbbbf..aa37f56 100644 Binary files a/tools/vision/LANGUES/FRANCAIS/VISION.RSC and b/tools/vision/langues/francais/vision.rsc differ diff --git a/tools/vision/LANGUES/FRANCAIS/VISIONB.H b/tools/vision/langues/francais/visionb.h similarity index 100% rename from tools/vision/LANGUES/FRANCAIS/VISIONB.H rename to tools/vision/langues/francais/visionb.h diff --git a/tools/vision/LANGUES/FRANCAIS/visionb.hrd b/tools/vision/langues/francais/visionb.hrd similarity index 100% rename from tools/vision/LANGUES/FRANCAIS/visionb.hrd rename to tools/vision/langues/francais/visionb.hrd diff --git a/tools/vision/LANGUES/FRANCAIS/VISIONB.RSC b/tools/vision/langues/francais/visionb.rsc similarity index 100% rename from tools/vision/LANGUES/FRANCAIS/VISIONB.RSC rename to tools/vision/langues/francais/visionb.rsc diff --git a/tools/vision/LANGUES/FRANCAIS/VMSG.H b/tools/vision/langues/francais/vmsg.h similarity index 92% rename from tools/vision/LANGUES/FRANCAIS/VMSG.H rename to tools/vision/langues/francais/vmsg.h index 31bd0f2..c77b5dd 100644 --- a/tools/vision/LANGUES/FRANCAIS/VMSG.H +++ b/tools/vision/langues/francais/vmsg.h @@ -283,4 +283,12 @@ #define MSG_WASALL 281 #define MSG_WADELICONS 282 #define MSG_WADELFILES 283 -#define MSG_ENDLIST 284 +#define MSG_UPTIMGMOD 284 +#define MSG_UPDATEAVAILABLE 285 +#define MSG_UPDATEDONE 286 +#define MSG_UPDATENOINTERNET 287 +#define MSG_VUPDATING 288 +#define MSG_UPDATEFAILED 289 +#define MSG_IMGADDPROP 290 +#define MSG_NOMORECONVERT 291 +#define MSG_ENDLIST 291 diff --git a/tools/vision/LANGUES/FRANCAIS/vmsg.txt b/tools/vision/langues/francais/vmsg.txt similarity index 93% rename from tools/vision/LANGUES/FRANCAIS/vmsg.txt rename to tools/vision/langues/francais/vmsg.txt index 5f930f9..c7181db 100644 --- a/tools/vision/LANGUES/FRANCAIS/vmsg.txt +++ b/tools/vision/langues/francais/vmsg.txt @@ -275,9 +275,17 @@ 275:Mise … jour du fichier catalogue... 276:[Impossible de mettre le catalogue … jour|code erreur=%d][OK] 277:[Supprimer %ld images du catalogue?|Les fichiers images ne seront pas supprim‚s][Oui|Non] -278:[Supprimer %ld images du catalogue?|Ainsi que les fichiers images?][Yes|No] +278:[Supprimer %ld images du catalogue?|Ainsi que les fichiers images?][Oui|Non] 279:Supression des enregistrements du catalogue... 280:Supression des enregistrements et fichiers images du catalogue... 281: Tout s‚lectionner 282: Supprimer du catalogue... -283: Supprimer les fichiers... \ No newline at end of file +283: Supprimer les fichiers... +284:Mise … jour de la base de donn‚es des modules images... +285:[Mise … jour %s disponible!|Voulez-vous l'installer?][Oui|Non] +286:[Fin de la mise … jour!|VISION va quitter maintenant][OK] +287:[La connexion Internet ne semble pas ˆtre disponible|Voulez-vous d‚-activer les mises … jour?][Oui|Non] +288:Mise … jour de VISION... +289:[Echec de la mise … jour %d|Voyez VISION.LOG][OK] +290:Attributs additionnels de l'image +291:[Cette fonction est maintenant|disponible depuis le LDV Dither][OK] diff --git a/tools/vision/LANGUES/italian/vision.hrd b/tools/vision/langues/italian/vision.hrd similarity index 100% rename from tools/vision/LANGUES/italian/vision.hrd rename to tools/vision/langues/italian/vision.hrd diff --git a/tools/vision/LANGUES/italian/VISION.RSC b/tools/vision/langues/italian/vision.rsc similarity index 52% rename from tools/vision/LANGUES/italian/VISION.RSC rename to tools/vision/langues/italian/vision.rsc index 94dc5ad..581fc60 100644 Binary files a/tools/vision/LANGUES/italian/VISION.RSC and b/tools/vision/langues/italian/vision.rsc differ diff --git a/tools/vision/LANGUES/italian/visionb.hrd b/tools/vision/langues/italian/visionb.hrd similarity index 100% rename from tools/vision/LANGUES/italian/visionb.hrd rename to tools/vision/langues/italian/visionb.hrd diff --git a/tools/vision/LANGUES/italian/VISIONB.RSC b/tools/vision/langues/italian/visionb.rsc similarity index 100% rename from tools/vision/LANGUES/italian/VISIONB.RSC rename to tools/vision/langues/italian/visionb.rsc diff --git a/tools/vision/LANGUES/italian/vmsg.txt b/tools/vision/langues/italian/vmsg.txt similarity index 93% rename from tools/vision/LANGUES/italian/vmsg.txt rename to tools/vision/langues/italian/vmsg.txt index e52cf63..09bbd04 100644 --- a/tools/vision/LANGUES/italian/vmsg.txt +++ b/tools/vision/langues/italian/vmsg.txt @@ -280,4 +280,12 @@ 280:Rimozione di record e file immagini dal catalogo... 281: Seleziona tutti gli oggetti 282: Rimuovi dal catalogo... -283: Rimuovi file immagine... \ No newline at end of file +283: Rimuovi file immagine... +284:Aggiornamento del database dei mduli immagine... +285:[Aggiornamento %s disponibile!|Vuoi installarlo?][Si|No] +286:[Aggiornamento eseguito!|VISION ora verr… chiuso][OK] +287:[Internet non Š accessibile|Desideri disabilatare il controllo degli aggiiornamenti?][Si|No] +288:Aggiornamento di VISION... +289:[Aggiornamento non riuscito con %d|Controllare VISION.LOG][OK] +290:Attributi di immagine aggiuntivi +291:[Questa funzione Š ora|disponibile da Dither LDV][OK] diff --git a/tools/vision/LANGUES/README.TXT b/tools/vision/langues/readme.txt similarity index 100% rename from tools/vision/LANGUES/README.TXT rename to tools/vision/langues/readme.txt diff --git a/tools/vision/LANGUES/svenska/vision.hrd b/tools/vision/langues/svenska/vision.hrd similarity index 100% rename from tools/vision/LANGUES/svenska/vision.hrd rename to tools/vision/langues/svenska/vision.hrd diff --git a/tools/vision/LANGUES/svenska/VISION.RSC b/tools/vision/langues/svenska/vision.rsc similarity index 53% rename from tools/vision/LANGUES/svenska/VISION.RSC rename to tools/vision/langues/svenska/vision.rsc index 27c818b..631c610 100644 Binary files a/tools/vision/LANGUES/svenska/VISION.RSC and b/tools/vision/langues/svenska/vision.rsc differ diff --git a/tools/vision/LANGUES/svenska/visionb.hrd b/tools/vision/langues/svenska/visionb.hrd similarity index 100% rename from tools/vision/LANGUES/svenska/visionb.hrd rename to tools/vision/langues/svenska/visionb.hrd diff --git a/tools/vision/LANGUES/svenska/VISIONB.RSC b/tools/vision/langues/svenska/visionb.rsc similarity index 100% rename from tools/vision/LANGUES/svenska/VISIONB.RSC rename to tools/vision/langues/svenska/visionb.rsc diff --git a/tools/vision/LANGUES/svenska/vmsg.txt b/tools/vision/langues/svenska/vmsg.txt similarity index 92% rename from tools/vision/LANGUES/svenska/vmsg.txt rename to tools/vision/langues/svenska/vmsg.txt index 70e09b6..cc1af30 100644 --- a/tools/vision/LANGUES/svenska/vmsg.txt +++ b/tools/vision/langues/svenska/vmsg.txt @@ -280,4 +280,12 @@ 280:Ta bort poster och bidfiler fr†n katalog... 281: V„lj alla objekt 282: Ta bort fr†n katalog... -283: Ta bort bildfiler... \ No newline at end of file +283: Ta bort bildfiler... +284:Uppdatering av bildmodulens databas... +285:[Uppdatering %s till„nglig!|Vill du installera det?][Ja|Nej] +286:[Uppdateringen har gjorts!|VISION kommer nu att avsluta][OK] +287:[Internet ser inte tillg„ngligt|Vill du inaktivera uppdateringskontroll?][Ja|Nej] +288:Uppdaterar VISION... +289:[Uppdateringen misslyckades med %d|Kontrollera VISION.LOG][OK] +290:Ytterligare bildattribut +291:[Den h„r funktionen „r nu|tillg„nglig fr†n Dither LDV][OK] \ No newline at end of file diff --git a/tools/vision/LDV/bhole.ini b/tools/vision/ldv/bhole.ini similarity index 100% rename from tools/vision/LDV/bhole.ini rename to tools/vision/ldv/bhole.ini diff --git a/tools/vision/ldv/bhole.ldv b/tools/vision/ldv/bhole.ldv new file mode 100644 index 0000000..c882bd1 Binary files /dev/null and b/tools/vision/ldv/bhole.ldv differ diff --git a/tools/vision/LDV/BW.INI b/tools/vision/ldv/bw.ini similarity index 100% rename from tools/vision/LDV/BW.INI rename to tools/vision/ldv/bw.ini diff --git a/tools/vision/ldv/bw.ldv b/tools/vision/ldv/bw.ldv new file mode 100644 index 0000000..8866145 Binary files /dev/null and b/tools/vision/ldv/bw.ldv differ diff --git a/tools/vision/ldv/cntcol.ini b/tools/vision/ldv/cntcol.ini new file mode 100644 index 0000000..0122a63 --- /dev/null +++ b/tools/vision/ldv/cntcol.ini @@ -0,0 +1,46 @@ +; This is a basic INI file used +; To setup a language for a LDV +; Module for VISION 4.0 or older +; For example, if your module is +; Named SOGOOD.LDV, you should create +; SOGOOD.INI (default file, this may be the English version) in LDV folder +; SOGOOD.INI in the FRANCAIS folder for the French version +; SOGOOD.INI in the ENGLISH folder for the English version +; SOGOOD.INI in the SVENSKA folder for the Swedish version +; ... and so on ... +; Now you just have to fill in the ShortName, LongName and Description fields +; Note that VISION will search for the INI file associated to the LDV file +; In the folder defined by the language setup (same as in LANGUES folder) + +[Informations] +; ShortName should not exceed 15 caracters +ShortName = Count Colors +; LongName should not exceed 31 caracters +LongName = Count Colors (per line/global) +; Description should not exceed 79 caracters +Description = Counts the number of colors on an image + +; Here comes the language parameters dependencies +[Parameter1] +Name = Method +; Method = 0: auto selection by LDV depending on image +; Method = 1: +; Per line: simple add to color array if color does not exist (quite slow if many colors) +; Globally: bitarray of max. # of colors +; Memory usage: 2MB max (32bit) + 1 line +; Method = 2: +; Per line: sort/reduce colors +; Globally: sort/reduce colors +; Memory usage: full image memory + 1 line +; Method = 3: (#1 and #2 mix) +; Per line: sort/reduce colors +; Globally: bitarray of max. # of colors +; Memory usage: 2MB max (32bit) + 1 line +Type = 1 +MinValue = 0 +DefaultValue = 0 +MaxValue = 3 + +[Parameter2] +Name = OutputFile +Type = 3 diff --git a/tools/vision/ldv/cntcol.ldv b/tools/vision/ldv/cntcol.ldv new file mode 100644 index 0000000..646d4e1 Binary files /dev/null and b/tools/vision/ldv/cntcol.ldv differ diff --git a/tools/vision/ldv/dither.ini b/tools/vision/ldv/dither.ini new file mode 100644 index 0000000..9754832 --- /dev/null +++ b/tools/vision/ldv/dither.ini @@ -0,0 +1,44 @@ +; This is a basic INI file used +; To setup a language for a LDV +; Module for VISION 4.0 or older +; For example, if your module is +; Named SOGOOD.LDV, you should create +; SOGOOD.INI (default file, this may be the English version) in LDV folder +; SOGOOD.INI in the FRANCAIS folder for the French version +; SOGOOD.INI in the ENGLISH folder for the English version +; SOGOOD.INI in the SVENSKA folder for the Swedish version +; ... and so on ... +; Now you just have to fill in the ShortName, LongName and Description fields +; Note that VISION will search for the INI file associated to the LDV file +; In the folder defined by the language setup (same as in LANGUES folder) + +[Informations] +; ShortName should not exceed 15 caracters +ShortName = Dither +; LongName should not exceed 31 caracters +LongName = Dithers an image +; Description should not exceed 79 caracters +Description = Reduces number of colors of an image with different methods + +; Here comes the language parameters dependencies +[Parameter1] +Name = Method +Type = 1 +MinValue = 0 +DefaultValue = 0 +MaxValue = 4 +Labels = Auto,Mono-Matrix,Greyscale,216 colors,Dual-Tone + +[Parameter2] +Name = Method param +Type = 1 +MinValue = -1 +DefaultValue = 50 +MaxValue = 100 + +[Parameter3] +Name = Output planes +Type = 1 +MinValue = 0 +DefaultValue = 0 +MaxValue = 32 diff --git a/tools/vision/ldv/dither.ldv b/tools/vision/ldv/dither.ldv new file mode 100644 index 0000000..b440a3c Binary files /dev/null and b/tools/vision/ldv/dither.ldv differ diff --git a/tools/vision/LDV/doc/defines.htm b/tools/vision/ldv/doc/defines.htm similarity index 100% rename from tools/vision/LDV/doc/defines.htm rename to tools/vision/ldv/doc/defines.htm diff --git a/tools/vision/LDV/doc/descrip.htm b/tools/vision/ldv/doc/descrip.htm similarity index 100% rename from tools/vision/LDV/doc/descrip.htm rename to tools/vision/ldv/doc/descrip.htm diff --git a/tools/vision/LDV/doc/english/defines.htm b/tools/vision/ldv/doc/english/defines.htm similarity index 100% rename from tools/vision/LDV/doc/english/defines.htm rename to tools/vision/ldv/doc/english/defines.htm diff --git a/tools/vision/LDV/doc/english/descrip.htm b/tools/vision/ldv/doc/english/descrip.htm similarity index 100% rename from tools/vision/LDV/doc/english/descrip.htm rename to tools/vision/ldv/doc/english/descrip.htm diff --git a/tools/vision/LDV/doc/english/hints.htm b/tools/vision/ldv/doc/english/hints.htm similarity index 100% rename from tools/vision/LDV/doc/english/hints.htm rename to tools/vision/ldv/doc/english/hints.htm diff --git a/tools/vision/LDV/doc/english/images/conc2.gif b/tools/vision/ldv/doc/english/images/conc2.gif similarity index 100% rename from tools/vision/LDV/doc/english/images/conc2.gif rename to tools/vision/ldv/doc/english/images/conc2.gif diff --git a/tools/vision/LDV/doc/english/images/cprev.jpg b/tools/vision/ldv/doc/english/images/cprev.jpg similarity index 100% rename from tools/vision/LDV/doc/english/images/cprev.jpg rename to tools/vision/ldv/doc/english/images/cprev.jpg diff --git a/tools/vision/LDV/doc/english/images/csom.jpg b/tools/vision/ldv/doc/english/images/csom.jpg similarity index 100% rename from tools/vision/LDV/doc/english/images/csom.jpg rename to tools/vision/ldv/doc/english/images/csom.jpg diff --git a/tools/vision/LDV/doc/english/images/csuiv.jpg b/tools/vision/ldv/doc/english/images/csuiv.jpg similarity index 100% rename from tools/vision/LDV/doc/english/images/csuiv.jpg rename to tools/vision/ldv/doc/english/images/csuiv.jpg diff --git a/tools/vision/LDV/doc/english/images/icointro.gif b/tools/vision/ldv/doc/english/images/icointro.gif similarity index 100% rename from tools/vision/LDV/doc/english/images/icointro.gif rename to tools/vision/ldv/doc/english/images/icointro.gif diff --git a/tools/vision/LDV/doc/english/images/icoprinc.gif b/tools/vision/ldv/doc/english/images/icoprinc.gif similarity index 100% rename from tools/vision/LDV/doc/english/images/icoprinc.gif rename to tools/vision/ldv/doc/english/images/icoprinc.gif diff --git a/tools/vision/LDV/doc/english/index.htm b/tools/vision/ldv/doc/english/index.htm similarity index 100% rename from tools/vision/LDV/doc/english/index.htm rename to tools/vision/ldv/doc/english/index.htm diff --git a/tools/vision/LDV/doc/english/intro.htm b/tools/vision/ldv/doc/english/intro.htm similarity index 100% rename from tools/vision/LDV/doc/english/intro.htm rename to tools/vision/ldv/doc/english/intro.htm diff --git a/tools/vision/LDV/doc/english/kitdev.htm b/tools/vision/ldv/doc/english/kitdev.htm similarity index 70% rename from tools/vision/LDV/doc/english/kitdev.htm rename to tools/vision/ldv/doc/english/kitdev.htm index c0e9e4d..ade46a8 100644 --- a/tools/vision/LDV/doc/english/kitdev.htm +++ b/tools/vision/ldv/doc/english/kitdev.htm @@ -1,9 +1,8 @@ - + VISION Documentation (LDV): Development kit -
@@ -18,7 +17,7 @@

-

Last update: 05/04/18

+

Last update: 03/28/20

@@ -241,26 +240,25 @@ as well as the sources (in PureC). Here are their characteristics:

Performs a pixelization on an image or part of it - Capacités + Capabilities True Color modes only (16 and 32 planes). ATARI. format - Type de - transformation + Transformation type In place - Utilise VAPI + Uses VAPI Yes (Progress Interface) - Fichier INI + INI file Yes (English / French) - Remarque + Comment Nice effect and good for learning: this LDV only considers True Color ATARI format and it will nevertheless run on your MagicPC ! It makes @@ -281,28 +279,27 @@ use of  VISION feature to deal with format handli Performs a perspective effect on an image or part of it - Capacités + Capabilities Any number of bitplans (1, 2, 4, 8, 16, 24 and 32). ATARI format. Does not change palette. - Type de - transformation + Transformation type Forces VISION to allocate memory for destination. - Utilise VAPI + Uses VAPI Oui (Progress Interface+ Raster Interface + MEM Interface) - Fichier INI + INI file Yes (English / French) - Remarque + Comment Nice perspective effect. When operating on selection, the allocation bloc is set thanks to LDVF_NOSELECTION flag (pretty painful to handle in bitplane mode). This LDV only gets an image and not bloc selection.MEM Interface function MeCopyMemoryxx is used to scale lines. @@ -321,26 +318,25 @@ use of  VISION feature to deal with format handli Change red, green, blue color spreading using a line (light) or a gamma curve (gamma). - Capacités + Capabilities Any number of bitplans (1, 2, 4, 8, 16, 24 and 32). Machine format. Modifies the palette. - Type de - transformation + Transformation type In place - Utilise VAPI + Uses VAPI Yes (Progress Interface+ Raster Interface) - Fichier INI + INI file Yes (English / French) - Remarque + Comment Smart replace for old embedded functions in VISION..In bitplane mode, palette is changed. Handles cancel.
These LDVs are pretty optimized for memory performances: they operate @@ -363,27 +359,26 @@ image.(true colro only).
Performs a rotation on the image or part of it. - Capacités + Capabilities Any number of bitplans (1, 2, 4, 8, 16, 24 and 32). Machine format. Does not change the palette. - Type de - transformation + Transformation type Forces VISION to allocate memory for destination. - Utilise VAPI + Uses VAPI Yes (Progress Interface+ Raster Interface) - Fichier INI + INI file Yes (English / French) - Remarque + Comment This LDV is very simple. Actually it just calls RaRasterRotateGetDstMFDB and RaRasterRotate functions in VAPI Raster interface .
Have a look how LDVF_NOSELECTION flag is used in order to not complicate things with blocs. @@ -391,7 +386,7 @@ image.(true colro only).
-

+

@@ -400,77 +395,147 @@ image.(true colro only).
- + - + - + - + - + - +
DescriptionMix image blocs to generate a puzzleMixes image blocs to generate a puzzle
CapacitésCapabilities Any number of bitplans (1, 2, 4, 8, 16, 24 and 32). Machine format. Does not change the palette.
Type de - transformationTransformation type Forces VISION to allocate memory for destination.
Utilise VAPIUses VAPI Yes (Progress Interface)
Fichier INIINI file Yes (English / French)
RemarqueComment Fun LDV easy to code. Smartest thing is entropy handling i.e. how much disorder there is in the mix.
-
- - - - - +


- + - + - + - + - + - +
BHOLE.LDVBHOLE.LDV
Description Simulates a black hole in an image. Consider it as a tribute to Stephen Hawking.
CapacitésCapabilities Any number of bitplans (1, 2, 4, 8, 16, 24 and 32). Machine format. Does not change the palette.
Type de - transformationTransformation type Forces VISION to allocate memory for destination.
Utilise VAPIUses VAPI Yes (Progress Interface+Config Interface+Logging Interface)
Fichier INIINI file Yes (English / French)
RemarqueComment Most complicated LDV so far. Has its own optimzations for 68030 and 68881. Uses black hole symetry to speed up computations.
-
+


+ + + + + + + + + + + + + + + + + + + + + + + +
CNTCOLLDV
DescriptionCount the number of different colors on each line and for the whole image
CapabilitiesAny number of bitplans (1, 2, 4, 8, 16 and 32). Machine format. Does not change the palette. Does not alter the image.
Transformation typeNo change on image. Generates cntcol.txt file in VISION's folder or the file specified by parameter#2
Uses VAPIYes (Progress + Interface+MEM Interface + Raster Interface +Logging Interface)
INI fileYes (English)
CommentInspired by http://www.atari-forum.com/viewtopic.php?f=27&t=38492


+ + + + + + + + + + + + + + + + + + + + + + + +
GENIMG.LDV
DescriptionGenerates as many different colors as possible on an image (tester for previous LDV)
CapabilitiesAny number of bitplans (1, 2, 4, 8, 16, and 32). Machine format. Does not change the palette.
Transformation typeForces VISION to + allocate memory for destination.
Uses VAPIYes (Progress + Interface+Raster Interface)
INI fileYes (English)
CommentUgly image generated.


+ + + + + + + + + + + + + + + + + + + + + + + +
DITHER.LDV
DescriptionDithers an image to any number of planes using different methods
CapabilitiesAny number of bitplans (1, 2, 4, 8, 16, and 32). ATARI format. Palette might be changed/created.
Transformation typeForces VISION to + allocate memory for destination.
Uses VAPIYes (Progress + Interface+Config Interface+Logging Interface + Image Interface)
INI fileYes (English)
CommentPretty simple as it basically calls ImDither function from Image Interface.









@@ -490,7 +555,7 @@ image.(true colro only).

-

Last update: 05/04/18

+

Last update: 03/28/20

diff --git a/tools/vision/LDV/doc/english/modele.htm b/tools/vision/ldv/doc/english/modele.htm similarity index 100% rename from tools/vision/LDV/doc/english/modele.htm rename to tools/vision/ldv/doc/english/modele.htm diff --git a/tools/vision/LDV/doc/english/notions.htm b/tools/vision/ldv/doc/english/notions.htm similarity index 100% rename from tools/vision/LDV/doc/english/notions.htm rename to tools/vision/ldv/doc/english/notions.htm diff --git a/tools/vision/LDV/doc/english/struct.htm b/tools/vision/ldv/doc/english/struct.htm similarity index 100% rename from tools/vision/LDV/doc/english/struct.htm rename to tools/vision/ldv/doc/english/struct.htm diff --git a/tools/vision/LDV/doc/english/vapi/co.htm b/tools/vision/ldv/doc/english/vapi/co.htm similarity index 97% rename from tools/vision/LDV/doc/english/vapi/co.htm rename to tools/vision/ldv/doc/english/vapi/co.htm index d5a6ab6..3022ff4 100644 --- a/tools/vision/LDV/doc/english/vapi/co.htm +++ b/tools/vision/ldv/doc/english/vapi/co.htm @@ -1,4 +1,4 @@ - + diff --git a/tools/vision/ldv/doc/english/vapi/fi.html b/tools/vision/ldv/doc/english/vapi/fi.html new file mode 100644 index 0000000..aea226d --- /dev/null +++ b/tools/vision/ldv/doc/english/vapi/fi.html @@ -0,0 +1,296 @@ + + + + +Documentation VISION (VAPI) : Configuration Interface + +
+ + + + + + + + + + + + + + +
Chapitre précédentRetour au sommaireChapitre suivant

+

Documentation VISION + (VAPI)

+

+

Last update : 04/12/20

+


+

FILE INTERFACE

+
 
+
+ +
+
+ + + + + + + + + + + + + + + + + +
Summary
Préfixe de l'interfaceFi
Nombre de fonctions7
DescriptionSet of functions to manage files
+
+ +

 

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl FiFileExist(char* file)
Paramètresfile: filename of the file to test against presence
RetourNon zero if file exists
DescriptionSelf explanatory
Remarques
Version VAPI1.09 or more
+
+ +

 

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl FiFolderExist(char* folder)
Paramètresfolder: folder to test against presence
RetourNon zero if folder exists
DescriptionSelf explanatory
Remarques
Version VAPI1.09 or more
+
+ +

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl FiCopyFile(char* src, char* dst)
Paramètressrc: name of source file
dst: name of destination file
RetourZero if success
DescriptionCopies +source file to destination file. Folder for destination must exist (see +next function if you wish to create all intermediate folders)
Remarques
Version VAPI1.09 or more
+
+ +

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl FiCopyFileR(char* src, char* dst)
Paramètressrc: name of source file
dst: name of destination file
RetourZero if success
DescriptionCopies +source file to destination file and create any intermediate folder if required.
Remarques
Version VAPI1.09 or more
+
+ +

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl FiMoveFile(char* src, char* dst)
Paramètressrc: name of source file
dst: name of destination file
RetourZero if success
DescriptionMoves source file to destination file.
Remarques
Version VAPI1.09 or more
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl FiCreateFolder(char* path)
Paramètrespath: path to create
RetourZero if success
DescriptionSelf explanatory
RemarquesReturns success (0) if folder already exists
Version VAPI1.09 or more
+
+ +

 
 

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl FiCmpFiles(char* f1, char* f2)
Paramètresf1: name of first file
f2: name of file to compare to
Retour1 if files are equal
DescriptionSelf explanatory
Remarques
Version VAPI1.09 or more
+
+ +


+ +
+
+ + + + + + + + + + + + + + +
Chapitre précédentRetour au sommaireChapitre suivant

+

Documentation VISION + (VAPI)

+

+


+

Télécharger la doc

+

FILE INTERFACE

+
 
+
+ \ No newline at end of file diff --git a/tools/vision/ldv/doc/english/vapi/im.htm b/tools/vision/ldv/doc/english/vapi/im.htm new file mode 100644 index 0000000..b530e00 --- /dev/null +++ b/tools/vision/ldv/doc/english/vapi/im.htm @@ -0,0 +1,297 @@ + + + + +Documentation VISION (VAPI) : Configuration Interface + +
+ + + + + + + + + + + + + + +
Chapitre précédentRetour au sommaireChapitre suivant

+

Documentation VISION + (VAPI)

+

+

Dernière + mise à jour : 02/12/20

+


+

IMAGE INTERFACE

+
 
+
+ +
+
+ + + + + + + + + + + + + + + + + +
Summary
Interface prefixIm
Number of functions7
DescriptionSet of functions to manage images files
+
+ +

 

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl ImGetInf(char* filename, void* ldv_img)
Parametersfilename: name of the image file
ldv_img: pointer to a LDV_IMAGE structure
ReturnLDV_STATUS
DescriptionReads +informatiuons from the file and fills in the LDV_IMAGE strucutre. Image +is not loaded (see next function) but all image caracteristics such as +width, height, number of planes, ... are fetched.
CommentsCall ImFree to free related resources
Version VAPI1.09 or more
+
+ +

 

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl ImLoad(void* ldv_img)
Parametersldv_img: pointer to LDV_IMAGE structure previously filled-in by ImGetInf
ReturnLDV_STATUS
DescriptionLoads the image into memory
CommentsImage data is read during this call
Version VAPI1.09 or more
+
+ +

 

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypevoid cdecl ImFree(void* ldv_img)
Parametersldv_img: pointer to LDV_IMAGE structure previously filled-in by ImGetInf
ReturnNone
DescriptionFrees resources allocated by ImGetInf and ImLoad
Comments.
Version VAPI1.09 or more
+

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl ImSave(char* filename, void* ldv_img, char* save_options) ;
Parametersfilename: name of file to save image
ldv_img:  LDV_IMAGE structure defining image to save
save_options: standard options, separated by '';',(option=<value>):
fmt = <3 characters defining image format>
quality=<quality 0...100>    (JPEG)
flipflop=<0 ou 2> (0: no flip-flop, 2: Y flip-flop)   (TGA)
compression=<none or lzw> (TIF)
byteorder=<motorola or intel>  (TIF)
ReturnLDV_STATUS
DescriptionSaves an image residing in memory to a file
CommentsExample
status = Vapi->ImSave( "h:\\test.tif", ldv_img, "fmt=TIF;compression=LZW;byteorder=motorola" ) ;
Some options depend on the format; they may be ignored by the driver in charge of saving
Check out opnsav.vcs script for an example on the options
Version VAPI1.09 or more
+
+ +

 

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl ImDither(long method, long param, void* ldv_img_in, void* ldv_img_out)
Parametersmethod: dither method to use:
  • 0: Auto, let VISION decide
  • 1: monochrome mattrix
  • 2: grey level
  • 3: 216 colors
  • 4: dual-tone
ldv_img_in: LDV_IMAGE structure usually provided by VISION
ldv_img_out: LDV_IMAGE structure holding dithered  image
ReturnLDV_STATUS
DescriptionRequest VISION to dither an image using a method
Output number of planes shall be stated in variable out->Raster.fd_nplanes (1,4,8,16 ou32)
Comments
Version VAPI1.09 or more
+
+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl ImGetStdData(void* ldv_img, char* query, char* out_data, long out_data_size) ;
Parametersldv_img: pointer to LDV_IMAGE structure previously filled-in by ImGetInf
query: string to request standard atribute which list follows:
  • filename: filename passed to ImGetInf
out_data: string holding value of the requested attribute
out_data_size: size, in bytes, of out_data buffer
ReturnLDV_STATUS
DescriptionRequests standard data on an image
CommentsSee optimg.ldv source code
Version VAPI1.09 or more
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl ImComputeHistogram(void* ldv_img, HISTO *histo) ;
Parametersldv_img:  LDV_IMAGE structure defining image to compute histograms
histo: pointeur to a HISTO structure containing the result
ReturnLDV_STATUS
DescriptionRequests VISION to compute histograms
Remarques.histo->norm shall be initialized to tell VISION what is the maximal value for the highest repetition frequency
See optimg.ldv source code
Version VAPI1.09 or more
+

+

+ +
+
+ + + + + + + + + + + + + + +
Chapitre précédentRetour au sommaireChapitre suivant

+

Documentation VISION + (VAPI)

+

+


+


+

IMAGE INTERFACE

+
 
+
+ \ No newline at end of file diff --git a/tools/vision/LDV/doc/english/vapi/in.htm b/tools/vision/ldv/doc/english/vapi/in.htm similarity index 97% rename from tools/vision/LDV/doc/english/vapi/in.htm rename to tools/vision/ldv/doc/english/vapi/in.htm index ecb0d54..f291b0e 100644 --- a/tools/vision/LDV/doc/english/vapi/in.htm +++ b/tools/vision/ldv/doc/english/vapi/in.htm @@ -1,4 +1,4 @@ - + diff --git a/tools/vision/LDV/doc/english/vapi/index.htm b/tools/vision/ldv/doc/english/vapi/index.htm similarity index 97% rename from tools/vision/LDV/doc/english/vapi/index.htm rename to tools/vision/ldv/doc/english/vapi/index.htm index 5285381..5d6bb80 100644 --- a/tools/vision/LDV/doc/english/vapi/index.htm +++ b/tools/vision/ldv/doc/english/vapi/index.htm @@ -1,4 +1,4 @@ - + diff --git a/tools/vision/LDV/doc/english/vapi/lo.htm b/tools/vision/ldv/doc/english/vapi/lo.htm similarity index 97% rename from tools/vision/LDV/doc/english/vapi/lo.htm rename to tools/vision/ldv/doc/english/vapi/lo.htm index c6535aa..2b4e883 100644 --- a/tools/vision/LDV/doc/english/vapi/lo.htm +++ b/tools/vision/ldv/doc/english/vapi/lo.htm @@ -1,4 +1,4 @@ - + diff --git a/tools/vision/LDV/doc/english/vapi/me.htm b/tools/vision/ldv/doc/english/vapi/me.htm similarity index 56% rename from tools/vision/LDV/doc/english/vapi/me.htm rename to tools/vision/ldv/doc/english/vapi/me.htm index ebb482f..beb251d 100644 --- a/tools/vision/LDV/doc/english/vapi/me.htm +++ b/tools/vision/ldv/doc/english/vapi/me.htm @@ -1,4 +1,4 @@ - + @@ -16,7 +16,7 @@

-

Last update : 08/04/18

+

Last update : 03/28/20

@@ -43,11 +43,11 @@ Nombre de fonctions - 3 + 8 Description - Set of functions allowing to manipulate memory areas, mostly image oriented + Set of functions allowing to manipulate memory areas, mostly image oriented + dynamic memory allocations with stats/boundchecks though vision.log @@ -170,6 +170,156 @@ will use automatically an optimzed routine. +

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypevoid* cdecl MeXcalloc(unsigned long size)
Parameters[IN] size : Number of bytes to allocate
ReturnPointer to allocated memory of size bytes, NULL if error
DescriptionSimilar to malloc 'C' function from stdlib
CommentsVISION will keep track of this allocation and check against leak or memory under/over flows.
VAPI Version1.05 or greater
+
+ +

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypevoid* cdecl MeXrealloc(void* ptr, unsigned long size)
Parameters[IN] ptr : Currently allocated pointer to adjust size
[IN] size : Number of bytes to allocate
ReturnPointer to allocated memory of size bytes, NULL if error
DescriptionSimilar to realloc 'C' function from stdlib
CommentsVISION will keep track of this allocation and check against leak or memory under/over flows.
VAPI Version1.05 or greater
+
+ +

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypevoid cdecl MeXfree(void* ptr)
Parameters[IN] ptr : Pointer to memory to be freed
ReturnNone
DescriptionSimilar to free 'C' function from stdlib
CommentsVISION will check pointer is valid and if under/over flows has occured
VAPI Version1.05 or greater
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypevoid* cdecl MeXcalloc(unsigned long nb_elems, unsigned long elem_size)
Parameters[IN] nb_elems : Number of elements to allocate
[IN] elem_size : Sze of an element in bytes
ReturnPointer to allocated memory of size bytes, NULL if error
DescriptionSimilar to calloc 'C' function from stdlib; like malloc but allocated memory is zeroed.
CommentsVISION will keep track of this allocation and check against leak or memory under/over flows.
VAPI Version1.05 or greater
+
+ +

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypechar* cdecl MeXstrdup(char* s)
Parameters[IN] s : Pointer to string to duplicate
ReturnPointer to duplicated string, NULL if error
DescriptionSimilar to strdup 'C' function from stdlib
CommentsVISION will keep track of this allocation and check against leak or memory under/over flows.
VAPI Version1.05 or greater
+
+

 


@@ -185,7 +335,7 @@ will use automatically an optimzed routine.

-

Last update : 08/04/18

+

Last update : 03/28/20

diff --git a/tools/vision/LDV/doc/english/vapi/modele.htm b/tools/vision/ldv/doc/english/vapi/modele.htm similarity index 100% rename from tools/vision/LDV/doc/english/vapi/modele.htm rename to tools/vision/ldv/doc/english/vapi/modele.htm diff --git a/tools/vision/LDV/doc/english/vapi/pr.htm b/tools/vision/ldv/doc/english/vapi/pr.htm similarity index 97% rename from tools/vision/LDV/doc/english/vapi/pr.htm rename to tools/vision/ldv/doc/english/vapi/pr.htm index fffc7f5..8ab086c 100644 --- a/tools/vision/LDV/doc/english/vapi/pr.htm +++ b/tools/vision/ldv/doc/english/vapi/pr.htm @@ -1,4 +1,4 @@ - + diff --git a/tools/vision/LDV/doc/english/vapi/ra.htm b/tools/vision/ldv/doc/english/vapi/ra.htm similarity index 97% rename from tools/vision/LDV/doc/english/vapi/ra.htm rename to tools/vision/ldv/doc/english/vapi/ra.htm index 8f9f47d..f0f0bfd 100644 --- a/tools/vision/LDV/doc/english/vapi/ra.htm +++ b/tools/vision/ldv/doc/english/vapi/ra.htm @@ -1,4 +1,4 @@ - + diff --git a/tools/vision/LDV/doc/english/vapi/struct.htm b/tools/vision/ldv/doc/english/vapi/struct.htm similarity index 97% rename from tools/vision/LDV/doc/english/vapi/struct.htm rename to tools/vision/ldv/doc/english/vapi/struct.htm index 3f213f0..53a2176 100644 --- a/tools/vision/LDV/doc/english/vapi/struct.htm +++ b/tools/vision/ldv/doc/english/vapi/struct.htm @@ -1,4 +1,4 @@ - + diff --git a/tools/vision/LDV/doc/hints.htm b/tools/vision/ldv/doc/hints.htm similarity index 100% rename from tools/vision/LDV/doc/hints.htm rename to tools/vision/ldv/doc/hints.htm diff --git a/tools/vision/LDV/doc/images/conc2.gif b/tools/vision/ldv/doc/images/conc2.gif similarity index 100% rename from tools/vision/LDV/doc/images/conc2.gif rename to tools/vision/ldv/doc/images/conc2.gif diff --git a/tools/vision/LDV/doc/images/cprev.jpg b/tools/vision/ldv/doc/images/cprev.jpg similarity index 100% rename from tools/vision/LDV/doc/images/cprev.jpg rename to tools/vision/ldv/doc/images/cprev.jpg diff --git a/tools/vision/LDV/doc/images/csom.jpg b/tools/vision/ldv/doc/images/csom.jpg similarity index 100% rename from tools/vision/LDV/doc/images/csom.jpg rename to tools/vision/ldv/doc/images/csom.jpg diff --git a/tools/vision/LDV/doc/images/csuiv.jpg b/tools/vision/ldv/doc/images/csuiv.jpg similarity index 100% rename from tools/vision/LDV/doc/images/csuiv.jpg rename to tools/vision/ldv/doc/images/csuiv.jpg diff --git a/tools/vision/LDV/doc/images/icointro.gif b/tools/vision/ldv/doc/images/icointro.gif similarity index 100% rename from tools/vision/LDV/doc/images/icointro.gif rename to tools/vision/ldv/doc/images/icointro.gif diff --git a/tools/vision/LDV/doc/images/icoprinc.gif b/tools/vision/ldv/doc/images/icoprinc.gif similarity index 100% rename from tools/vision/LDV/doc/images/icoprinc.gif rename to tools/vision/ldv/doc/images/icoprinc.gif diff --git a/tools/vision/LDV/doc/index.htm b/tools/vision/ldv/doc/index.htm similarity index 100% rename from tools/vision/LDV/doc/index.htm rename to tools/vision/ldv/doc/index.htm diff --git a/tools/vision/LDV/doc/intro.htm b/tools/vision/ldv/doc/intro.htm similarity index 100% rename from tools/vision/LDV/doc/intro.htm rename to tools/vision/ldv/doc/intro.htm diff --git a/tools/vision/LDV/doc/kitdev.htm b/tools/vision/ldv/doc/kitdev.htm similarity index 97% rename from tools/vision/LDV/doc/kitdev.htm rename to tools/vision/ldv/doc/kitdev.htm index 755bdf8..8059e68 100644 --- a/tools/vision/LDV/doc/kitdev.htm +++ b/tools/vision/ldv/doc/kitdev.htm @@ -1,4 +1,4 @@ - + diff --git a/tools/vision/LDV/doc/modele.htm b/tools/vision/ldv/doc/modele.htm similarity index 100% rename from tools/vision/LDV/doc/modele.htm rename to tools/vision/ldv/doc/modele.htm diff --git a/tools/vision/LDV/doc/notions.htm b/tools/vision/ldv/doc/notions.htm similarity index 100% rename from tools/vision/LDV/doc/notions.htm rename to tools/vision/ldv/doc/notions.htm diff --git a/tools/vision/LDV/doc/struct.htm b/tools/vision/ldv/doc/struct.htm similarity index 100% rename from tools/vision/LDV/doc/struct.htm rename to tools/vision/ldv/doc/struct.htm diff --git a/tools/vision/LDV/doc/vapi/co.htm b/tools/vision/ldv/doc/vapi/co.htm similarity index 97% rename from tools/vision/LDV/doc/vapi/co.htm rename to tools/vision/ldv/doc/vapi/co.htm index 56cee92..7c36eff 100644 --- a/tools/vision/LDV/doc/vapi/co.htm +++ b/tools/vision/ldv/doc/vapi/co.htm @@ -1,4 +1,4 @@ - + diff --git a/tools/vision/ldv/doc/vapi/fi.htm b/tools/vision/ldv/doc/vapi/fi.htm new file mode 100644 index 0000000..1288f59 --- /dev/null +++ b/tools/vision/ldv/doc/vapi/fi.htm @@ -0,0 +1,293 @@ + + + + +Documentation VISION (VAPI) : Configuration Interface + +
+ + + + + + + + + + + + + + +
Chapitre précédentRetour au sommaireChapitre suivant

+

Documentation VISION + (VAPI)

+

+

Last update : 04/12/20

+


+

FILE INTERFACE

+
 
+
+ +
+
+ + + + + + + + + + + + + + + + + +
Résumé
Préfixe de l'interfaceFi
Nombre de fonctions7
DescriptionEnsemble de fonctions permettant de manipuler des fichiers
+
+ +

 

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl FiFileExist(char* file)
Paramètresfile: nom du fichier sur lequel tester la présence
RetourNon nul si le fichier existe
Description
Remarques
Version VAPI1.09 ou mieux
+
+ +

 

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl FiFolderExist(char* folder)
Paramètresfolder: nom du dossier sur lequel tester l'existence
RetourNon nul si le fichier existe
Description
Remarques
Version VAPI1.09 ou mieux
+
+ +

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl FiCopyFile(char* src, char* dst)
Paramètressrc: nom du fichier source
dst: nom du fichier destination
RetourZero si succès
DescriptionCopie la source vers la desnitation. Le dossier de la destination doit exister (voyez la fonction suivante sinon).
Remarques
Version VAPI1.09 ou mieux
+
+ +

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl FiCopyFileR(char* src, char* dst)
Paramètressrc: nom du fichier source
dst: nom du fichier destination
RetourZero si succès
DescriptionCopie la source vers la destination et créee les dossiers intermédiaires si nécessaire.
Remarques
Version VAPI1.09 ou mieux
+
+ +

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl FiMoveFile(char* src, char* dst)
Paramètressrc: nom du fichier source
dst: nom du fichier destination
RetourZero si succès
DescriptionRenomme le fichier source vers la destination
Remarques
Version VAPI1.09 ou mieux
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl FiCreateFolder(char* path)
Paramètrespath: chemin du dossier à créer
RetourZero si succès
Description
RemarquesReturne succès (0) si le dossier existe déjà
Version VAPI1.09 ou mieux
+
+ +

 
 

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl FiCmpFiles(char* f1, char* f2)
Paramètresf1: nom du premier fichier
f2: nom du fichier à comparer
Retour1 si les fichiers sont identiques
Description
Remarques
Version VAPI1.09 ou mieux
+
+ +


+ +
+
+ + + + + + + + + + + + + + +
Chapitre précédentRetour au sommaireChapitre suivant

+

Documentation VISION + (VAPI)

+

+


+

Télécharger la doc

+

FILE INTERFACE

+
 
+
+ \ No newline at end of file diff --git a/tools/vision/ldv/doc/vapi/im.htm b/tools/vision/ldv/doc/vapi/im.htm new file mode 100644 index 0000000..4e3b567 --- /dev/null +++ b/tools/vision/ldv/doc/vapi/im.htm @@ -0,0 +1,298 @@ + + + + +Documentation VISION (VAPI) : Configuration Interface + +
+ + + + + + + + + + + + + + +
Chapitre précédentRetour au sommaireChapitre suivant

+

Documentation VISION + (VAPI)

+

+

Dernière + mise à jour : 02/12/20

+

Télécharger la doc

+

IMAGE INTERFACE

+
 
+
+ +
+
+ + + + + + + + + + + + + + + + + +
Summary
Préfixe de l'interfaceIm
Nombre de fonctions7
DescriptionEnsemble de fonctions permettant de manipuler des images
+
+ +

 

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl ImGetInf(char* filename, void* ldv_img)
Paramètresfilename: nom du fichier
ldv_img: pointeur sur une structure de type LDV_IMAGE
RetourLDV_STATUS
DescriptionRécupère +les informations image dans le fichier et remplit la structure +LDV_IMAGE en conséquence, ne charge pas l'image (fonction suivante) +mais renseigne ses caractéristiques comme sa largeur, hauteur, nombre +de plans...
RemarquesAppeler ImFree pour libérer les resources associées
Version VAPI1.09 ou supérieure
+
+ +

 

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl ImLoad(void* ldv_img)
Paramètresldv_img: structure remplie précédemment par ImGetInf
RetourLDV_STATUS
DescriptionCharge en mémoire l'image depuis le fichier
RemarquesLa lecture des données image est effectuée lors de cet appel..
Version VAPI1.09 ou supérieure
+
+ +

 

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypevoid cdecl ImFree(void* ldv_img)
Paramètresldv_img: structure remplie précédemment par ImGetInf
RetourAucun
DescriptionLibère les resources allouées par ImGetInf et ImLoad
Remarques.
Version VAPI1.09 ou supérieure
+

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl ImSave(char* filename, void* ldv_img, char* save_options) ;
Paramètresfilename: nom du fichier de sauvegarde
ldv_img: structure LDV_IMAGE définissant l'image à sauvegarder
save_options: options standard, séparées par ';', pour la sauvegarde (option=<valeur>):
fmt = <extension du fichier en 3 lettres>
quality=<qualite 0...100>    (JPEG)
flipflop=<0 ou 2> (0: pas d'inversion, 2: inversion Y)   (TGA)
compression=<none or lzw> (TIF)
byteorder=<motorola ou intel>  (TIF)
RetourLDV_STATUS
DescriptionSauvegarde une image en mémoire vers un fichier
RemarquesExemple d'appel:
status = Vapi->ImSave( "h:\\test.tif", ldv_img, "fmt=TIF;compression=LZW;byteorder=motorola" ) ;
Certaines options sont relatives au format, elles seront simplement ignorées par le driver de sauvergarde.
Voyez le script opnsav.vcs pour un exemple de ces options
Version VAPI1.09 ou supérieure
+
+ +

 

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl ImDither(long method, long param, void* ldv_img_in, void* ldv_img_out)
Paramètresmethod: méthode à utiliser pour le tramage:
  • 0: Automatique, laisser VISION décider
  • 1: matrice monochrome
  • 2: niveaux de gris
  • 3: 216 couleurs
  • 4: bichromie
ldv_img_in: structure généralement fournie par VISION
ldv_img_out: structure LDV_IMAGE contenant l'image tramée
RetourLDV_STATUS
DescriptionDemande à VISION de tramer l'image source selon la méthode choisie.
Le nombre de plans en sortie doit être précisé avant l'appel par la variable out->Raster.fd_nplanes (1,4,8,16 ou32)
Remarques
Version VAPI1.09 ou supérieure
+
+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl ImGetStdData(void* ldv_img, char* query, char* out_data, long out_data_size) ;
Paramètresldv_img: structure remplie précédemment par ImGetInf
query: chaine de caractères standard pour demander la valeur d'un des attributs suivants:
  • filename: nom du fichier chargé par ImGetInf
out_data: chaine contenant la valeur de l'attribut demandé
out_data_size: taille du buffer passé en paramètre
RetourLDV_STATUS
DescriptionRécupère des données 'standard' sur l'image
RemarquesVoyez l'exemple optimg.ldv
Version VAPI1.09 ou supérieure
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Prototypelong cdecl ImComputeHistogram(void* ldv_img, HISTO *histo) ;
Paramètresldv_img: structure LDV_IMAGE définissant l'image sur laquelle calculer les histogrammes
histo: pointeur sur la structure de type HISTO contenant le résultat du calcul
RetourLDV_STATUS
DescriptionDemande à VISION de calculer les histogrammes sur une image
Remarques.histo->norm doit être initialisé pour indiquer à VISION quelle est la valeur maximale pour la plus haute fréquence de répétition
Voyez l'exemple optimg.ldv
Version VAPI1.09 ou supérieure
+

+

+ +
+
+ + + + + + + + + + + + + + +
Chapitre précédentRetour au sommaireChapitre suivant

+

Documentation VISION + (VAPI)

+

+


+

Télécharger la doc

+

IMAGE INTERFACE

+
 
+
+ \ No newline at end of file diff --git a/tools/vision/LDV/doc/vapi/in.htm b/tools/vision/ldv/doc/vapi/in.htm similarity index 97% rename from tools/vision/LDV/doc/vapi/in.htm rename to tools/vision/ldv/doc/vapi/in.htm index 1404efd..6373d7a 100644 --- a/tools/vision/LDV/doc/vapi/in.htm +++ b/tools/vision/ldv/doc/vapi/in.htm @@ -1,4 +1,4 @@ - + diff --git a/tools/vision/LDV/doc/vapi/index.htm b/tools/vision/ldv/doc/vapi/index.htm similarity index 89% rename from tools/vision/LDV/doc/vapi/index.htm rename to tools/vision/ldv/doc/vapi/index.htm index 6b6dfed..5d9622d 100644 --- a/tools/vision/LDV/doc/vapi/index.htm +++ b/tools/vision/ldv/doc/vapi/index.htm @@ -1,9 +1,8 @@ - + Documentation VISION (VAPI) : Présentation -
@@ -18,9 +17,7 @@

Dernière - mise à jour : 18/03/18

+ mise à jour : 03/12/20

@@ -29,10 +26,7 @@

V A P I

-     - +   
@@ -138,8 +132,8 @@ non-exhaustive) des interfaces actuelles:

MEM Interface Logging Interface  -   -   + Image Interface  + File Interface  @@ -159,9 +153,7 @@ non-exhaustive) des interfaces actuelles:

Dernière - mise à jour : 18/03/18

+ mise à jour : 03/12/20

diff --git a/tools/vision/LDV/doc/vapi/lo.htm b/tools/vision/ldv/doc/vapi/lo.htm similarity index 97% rename from tools/vision/LDV/doc/vapi/lo.htm rename to tools/vision/ldv/doc/vapi/lo.htm index 92394f8..d24148e 100644 --- a/tools/vision/LDV/doc/vapi/lo.htm +++ b/tools/vision/ldv/doc/vapi/lo.htm @@ -1,4 +1,4 @@ - + diff --git a/tools/vision/LDV/doc/vapi/me.htm b/tools/vision/ldv/doc/vapi/me.htm similarity index 100% rename from tools/vision/LDV/doc/vapi/me.htm rename to tools/vision/ldv/doc/vapi/me.htm diff --git a/tools/vision/LDV/doc/vapi/modele.htm b/tools/vision/ldv/doc/vapi/modele.htm similarity index 100% rename from tools/vision/LDV/doc/vapi/modele.htm rename to tools/vision/ldv/doc/vapi/modele.htm diff --git a/tools/vision/LDV/doc/vapi/pr.htm b/tools/vision/ldv/doc/vapi/pr.htm similarity index 100% rename from tools/vision/LDV/doc/vapi/pr.htm rename to tools/vision/ldv/doc/vapi/pr.htm diff --git a/tools/vision/LDV/doc/vapi/ra.htm b/tools/vision/ldv/doc/vapi/ra.htm similarity index 100% rename from tools/vision/LDV/doc/vapi/ra.htm rename to tools/vision/ldv/doc/vapi/ra.htm diff --git a/tools/vision/LDV/doc/vapi/struct.htm b/tools/vision/ldv/doc/vapi/struct.htm similarity index 100% rename from tools/vision/LDV/doc/vapi/struct.htm rename to tools/vision/ldv/doc/vapi/struct.htm diff --git a/tools/vision/LDV/FRANCAIS/bhole.ini b/tools/vision/ldv/francais/bhole.ini similarity index 100% rename from tools/vision/LDV/FRANCAIS/bhole.ini rename to tools/vision/ldv/francais/bhole.ini diff --git a/tools/vision/LDV/FRANCAIS/BW.INI b/tools/vision/ldv/francais/bw.ini similarity index 100% rename from tools/vision/LDV/FRANCAIS/BW.INI rename to tools/vision/ldv/francais/bw.ini diff --git a/tools/vision/ldv/francais/cntcol.ini b/tools/vision/ldv/francais/cntcol.ini new file mode 100644 index 0000000..36efc00 --- /dev/null +++ b/tools/vision/ldv/francais/cntcol.ini @@ -0,0 +1,42 @@ +; This is a basic INI file used +; To setup a language for a LDV +; Module for VISION 4.0 or older +; For example, if your module is +; Named SOGOOD.LDV, you should create +; SOGOOD.INI (default file, this may be the English version) in LDV folder +; SOGOOD.INI in the FRANCAIS folder for the French version +; SOGOOD.INI in the ENGLISH folder for the English version +; SOGOOD.INI in the SVENSKA folder for the Swedish version +; ... and so on ... +; Now you just have to fill in the ShortName, LongName and Description fields +; Note that VISION will search for the INI file associated to the LDV file +; In the folder defined by the language setup (same as in LANGUES folder) + +[Informations] +; ShortName should not exceed 15 caracters +ShortName = Compte couleurs +; LongName should not exceed 31 caracters +LongName = Compte couleurs ligne/totalit‚ +; Description should not exceed 79 caracters +Description = Ce LDV compte les couleurs par ligne et en totalit‚ d'une image + +; Here comes the language parameters dependencies +[Parameter1] +Name = Method +; Method = 0: slection automatique par le LDV en fonction de l'image +; Method = 1: +; Par ligne: ajout au tableau des couleurs si non existante (lent si beaucoup de couleurs) +; Global: tableau de bits dimensionné au nombre max de couleurs +; Usage mémoire : 2MB max (32bit) + 1 ligne +; Method = 2: +; Par ligne: tri/reduction des couleurs +; Global: tri/reduction des couleurs +; Usage mémoire : image entière + 1 ligne +; Method = 3: (mix de #1 et #2) +; Par ligne: tri/reduction des couleurs +; Global: tableau de bits dimensionné au nombre max de couleurs +; Usage mémoire : 2MB max (32bit) + 1 ligne +Type = 1 +MinValue = 0 +DefaultValue = 0 +MaxValue = 3 \ No newline at end of file diff --git a/tools/vision/LDV/FRANCAIS/GAMMA.INI b/tools/vision/ldv/francais/gamma.ini similarity index 100% rename from tools/vision/LDV/FRANCAIS/GAMMA.INI rename to tools/vision/ldv/francais/gamma.ini diff --git a/tools/vision/ldv/francais/genimg.ini b/tools/vision/ldv/francais/genimg.ini new file mode 100644 index 0000000..a554e6f --- /dev/null +++ b/tools/vision/ldv/francais/genimg.ini @@ -0,0 +1,29 @@ +; This is a basic INI file used +; To setup a language for a LDV +; Module for VISION 4.0 or older +; For example, if your module is +; Named SOGOOD.LDV, you should create +; SOGOOD.INI (default file, this may be the English version) in LDV folder +; SOGOOD.INI in the FRANCAIS folder for the French version +; SOGOOD.INI in the ENGLISH folder for the English version +; SOGOOD.INI in the SVENSKA folder for the Swedish version +; ... and so on ... +; Now you just have to fill in the ShortName, LongName and Description fields +; Note that VISION will search for the INI file associated to the LDV file +; In the folder defined by the language setup (same as in LANGUES folder) + +[Informations] +; ShortName should not exceed 15 caracters +ShortName = GenŠre C.Image +; LongName should not exceed 31 caracters +LongName = GenŠre une image max couleurs +; Description should not exceed 79 caracters +Description = GenŠre une image avec le maximum de couleurs possibles + +; Here comes the language parameters dependencies +[Parameter1] +Name = Image Type +Type = 1 +MinValue = 1 +DefaultValue = 1 +MaxValue = 1 diff --git a/tools/vision/LDV/FRANCAIS/INVERT.INI b/tools/vision/ldv/francais/invert.ini similarity index 100% rename from tools/vision/LDV/FRANCAIS/INVERT.INI rename to tools/vision/ldv/francais/invert.ini diff --git a/tools/vision/LDV/FRANCAIS/LIGHT.INI b/tools/vision/ldv/francais/light.ini similarity index 100% rename from tools/vision/LDV/FRANCAIS/LIGHT.INI rename to tools/vision/ldv/francais/light.ini diff --git a/tools/vision/LDV/FRANCAIS/PIXEL.INI b/tools/vision/ldv/francais/pixel.ini similarity index 100% rename from tools/vision/LDV/FRANCAIS/PIXEL.INI rename to tools/vision/ldv/francais/pixel.ini diff --git a/tools/vision/LDV/FRANCAIS/puzzle.ini b/tools/vision/ldv/francais/puzzle.ini similarity index 100% rename from tools/vision/LDV/FRANCAIS/puzzle.ini rename to tools/vision/ldv/francais/puzzle.ini diff --git a/tools/vision/LDV/FRANCAIS/ROTATE.INI b/tools/vision/ldv/francais/rotate.ini similarity index 100% rename from tools/vision/LDV/FRANCAIS/ROTATE.INI rename to tools/vision/ldv/francais/rotate.ini diff --git a/tools/vision/LDV/FRANCAIS/XWAVE.INI b/tools/vision/ldv/francais/xwave.ini similarity index 100% rename from tools/vision/LDV/FRANCAIS/XWAVE.INI rename to tools/vision/ldv/francais/xwave.ini diff --git a/tools/vision/LDV/FRANCAIS/YPERSC.INI b/tools/vision/ldv/francais/ypersc.ini similarity index 100% rename from tools/vision/LDV/FRANCAIS/YPERSC.INI rename to tools/vision/ldv/francais/ypersc.ini diff --git a/tools/vision/LDV/FRANCAIS/YWAVE.INI b/tools/vision/ldv/francais/ywave.ini similarity index 100% rename from tools/vision/LDV/FRANCAIS/YWAVE.INI rename to tools/vision/ldv/francais/ywave.ini diff --git a/tools/vision/LDV/GAMMA.INI b/tools/vision/ldv/gamma.ini similarity index 100% rename from tools/vision/LDV/GAMMA.INI rename to tools/vision/ldv/gamma.ini diff --git a/tools/vision/ldv/gamma.ldv b/tools/vision/ldv/gamma.ldv new file mode 100644 index 0000000..c43a69f Binary files /dev/null and b/tools/vision/ldv/gamma.ldv differ diff --git a/tools/vision/ldv/genimg.ini b/tools/vision/ldv/genimg.ini new file mode 100644 index 0000000..d0502d7 --- /dev/null +++ b/tools/vision/ldv/genimg.ini @@ -0,0 +1,29 @@ +; This is a basic INI file used +; To setup a language for a LDV +; Module for VISION 4.0 or older +; For example, if your module is +; Named SOGOOD.LDV, you should create +; SOGOOD.INI (default file, this may be the English version) in LDV folder +; SOGOOD.INI in the FRANCAIS folder for the French version +; SOGOOD.INI in the ENGLISH folder for the English version +; SOGOOD.INI in the SVENSKA folder for the Swedish version +; ... and so on ... +; Now you just have to fill in the ShortName, LongName and Description fields +; Note that VISION will search for the INI file associated to the LDV file +; In the folder defined by the language setup (same as in LANGUES folder) + +[Informations] +; ShortName should not exceed 15 caracters +ShortName = GenImg +; LongName should not exceed 31 caracters +LongName = Generate Images +; Description should not exceed 79 caracters +Description = Generate test images + +; Here comes the language parameters dependencies +[Parameter1] +Name = Image Type +Type = 1 +MinValue = 1 +DefaultValue = 1 +MaxValue = 1 diff --git a/tools/vision/ldv/genimg.ldv b/tools/vision/ldv/genimg.ldv new file mode 100644 index 0000000..db2f06e Binary files /dev/null and b/tools/vision/ldv/genimg.ldv differ diff --git a/tools/vision/LDV/INVERT.INI b/tools/vision/ldv/invert.ini similarity index 100% rename from tools/vision/LDV/INVERT.INI rename to tools/vision/ldv/invert.ini diff --git a/tools/vision/ldv/invert.ldv b/tools/vision/ldv/invert.ldv new file mode 100644 index 0000000..911f6be Binary files /dev/null and b/tools/vision/ldv/invert.ldv differ diff --git a/tools/vision/LDV/LDG.H b/tools/vision/ldv/ldg.h similarity index 96% rename from tools/vision/LDV/LDG.H rename to tools/vision/ldv/ldg.h index 310bbe6..bea1bbd 100644 --- a/tools/vision/LDV/LDG.H +++ b/tools/vision/ldv/ldg.h @@ -1,186 +1,187 @@ -/* - * LDG : Gem Dynamical Libraries - * Copyright (c) 1997-2004 Olivier Landemarre, Dominique Bereziat & Arnaud Bercegeay - * - * Header file of LDG devel library, should be included after the AES header - * - * Current version is 2.31 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: ldg.h 102 2012-10-04 22:31:16Z vriviere $ - */ - -#ifndef __LDG__ -#define __LDG__ - - -#ifdef __PUREC__ -#define CDECL cdecl -#else -#include -#define CDECL __CDECL -#endif - -#ifdef __GEMLIB__ -#define ldg_global aes_global -#else -#ifdef __PUREC__ /* For Pure C users using PCGEMLIB */ -#define ldg_global _GemParBlk.global -#endif -#endif - -#define LDG_QUIT 0x4C4A /* ldg->client : a lib discharged */ -#define LDG_LOST_LIB 0x4C4D /* ldg->client : a lib lost */ -#define LDG_COOKIE 0x4C44474DL /* 'LDGM' */ -#define PATHLEN 128 - -/* - * Data structures - */ - -typedef struct entrie { - char *name; /* Function name */ - char *info; /* Describe the prototype of the function */ - void *func; /* Function address */ -} PROC; - -/* - * The LDG-library descriptor (private) - */ - -typedef struct ldg { - long magic; /* magic number ('LDGM') */ - short vers; /* library version */ - short id; /* AES-id of launcher */ - short num; /* count of avalaible functions */ - PROC *list; /* pointer to the functions list */ - char *infos; /* describe the library */ - void *baspag; /* basepage of library */ -/* from version 0.99 */ - unsigned short flags; /* library flags ( shared, resident, locked) */ -/* from version 0.99c */ - void (*close)(void); /* fonction launched by ldg_term() */ -/* from version 1.00 */ - short vers_ldg; /* LDG-protocol version */ - char path[PATHLEN]; /* real path of the lib */ - long user_ext; /* own library extension */ - long addr_ext; /* for future extension */ -} LDG; - -/* - * The LDG cookie - */ - -typedef struct { - short version; /* The cookie number version */ - char path[PATHLEN]; /* Path of LDG-libraries */ - short garbage; /* The garbage collector time */ - short idle; /* Obsolet : for backward compatibility */ - - LDG* CDECL (*ldg_open) ( const char *lib, short *gl); - /* Open a library */ - short CDECL (*ldg_close) ( LDG *ldg, short *gl); - /* Close a library */ - void* CDECL (*ldg_find) ( char *fnc, LDG *ldg); - /* Find a function in a library */ - LDG* CDECL (*ldg_open_ev)( char *lib, short *gl, void (*)(short*)); - /* Obsolet : for backward compatibility */ - short error; /* Last error occuring */ - void CDECL (*ldg_garbage)( short *gl); - /* Release unused libs */ - void CDECL (*ldg_reset)( short *gl); - /* Release all libs */ - void* internal; /* Reserved */ - short CDECL (*ldg_libpath)( char *, short *global); - /* Find the path of a library */ -} LDG_INFOS; - -/* - * This structure is used by ldg_init() to initiate the - * the LDG-protocol inside a LDG-library. - */ - -typedef struct ldglib { - short vers; /* library version */ - short num; /* count of avalaible functions */ - PROC *list; /* pointer to the functions list */ - char *infos; /* description of the lib */ - unsigned short flags; /* library flags (shared, locked, resident) */ - void (*close)(void); /* function executed by ldg_term()*/ - long user_ext; /* own library extension */ -} LDGLIB; - -/* value of the 'flag' field */ -#define LDG_NOT_SHARED 0x1 /* the library is unshareable */ -#define LDG_LOCKED 0x2 /* the library is locked */ -#define LDG_RESIDENT 0x4 /* the library is memory resident */ -#define LDG_STDCALL 0x100 /* a2/d2 are not scratch register - private */ - -/* Errors returned by ldg_error() */ -#define LDG_LIB_FULLED -1 -#define LDG_APP_FULLED -2 -#define LDG_ERR_EXEC -3 -#define LDG_BAD_FORMAT -4 -#define LDG_LIB_LOCKED -6 -#define LDG_NO_MANAGER -7 -#define LDG_NOT_FOUND -8 -#define LDG_BAD_LIB LDG_BAD_FORMAT -#define LDG_NO_MEMORY -9 -#define LDG_TIME_IDLE -10 -#define LDG_NO_TSR -11 -#define LDG_BAD_TSR -12 -#define LDG_NO_FUNC -13 - -/* Client functions */ -LDG* ldg_open ( const char *name, short *gl); -short ldg_close ( LDG *lib, short *gl); -short ldg_error ( void); -void* ldg_find ( char *name, LDG *ldg); -short ldg_libpath ( char *path, short *gl); - -/* Server functions */ -int ldg_init ( LDGLIB *libldg); -char *ldg_getpath ( void); - -/* Diverse functions */ -int ldg_cookie ( long, long *); -void ldg_debug ( char *, ...); -void* ldg_Malloc ( long size); -void* ldg_Calloc ( long count,long size); -int ldg_Free ( void *memory); -void* ldg_Realloc ( void *oldblk, long oldsize, long newsize); -#ifndef __mcoldfire__ -void ldg_cpush ( void); -#endif -long CDECL ldg_callback( void *f, ...); - -/* For backward compatibility */ -#define ldg_exec(a,b) ldg_open( b, ldg_global) -#define ldg_exec_evnt(a,b,c) ldg_open( b, ldg_global) -#define ldg_term(a,b) ldg_close( b, ldg_global) -#define ldg_libexec_evnt(a,b,c) ldg_open( a, b) -#define ldg_libexec(a,b) ldg_open( a, b) -#define ldg_libterm(a,b) ldg_close( a,b) - -/* C-library version (currently 1.20) */ -struct _ldg_version { - char *name; - short num; -}; - -extern struct _ldg_version ldg_version; - -#endif /* __LDG__ */ +/* + * LDG : Gem Dynamical Libraries + * Copyright (c) 1997-2004 Olivier Landemarre, Dominique Bereziat & Arnaud Bercegeay + * + * Header file of LDG devel library, should be included after the AES header + * + * Current version is 2.31 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id: ldg.h 102 2012-10-04 22:31:16Z vriviere $ + */ + +#ifndef __LDG__ +#define __LDG__ + + +#ifdef __PUREC__ +#define CDECL cdecl +#else +#include +#define CDECL __CDECL +#endif + +#ifdef __GEMLIB__ +#define ldg_global aes_global +#else +#ifdef __PUREC__ /* For Pure C users using PCGEMLIB */ +#define ldg_global ((short*)&_GemParBlk.global[0]) +/*#define ldg_global _GemParBlk.global*/ +#endif +#endif + +#define LDG_QUIT 0x4C4A /* ldg->client : a lib discharged */ +#define LDG_LOST_LIB 0x4C4D /* ldg->client : a lib lost */ +#define LDG_COOKIE 0x4C44474DL /* 'LDGM' */ +#define PATHLEN 128 + +/* + * Data structures + */ + +typedef struct entrie { + char *name; /* Function name */ + char *info; /* Describe the prototype of the function */ + void *func; /* Function address */ +} PROC; + +/* + * The LDG-library descriptor (private) + */ + +typedef struct ldg { + long magic; /* magic number ('LDGM') */ + short vers; /* library version */ + short id; /* AES-id of launcher */ + short num; /* count of avalaible functions */ + PROC *list; /* pointer to the functions list */ + char *infos; /* describe the library */ + void *baspag; /* basepage of library */ +/* from version 0.99 */ + unsigned short flags; /* library flags ( shared, resident, locked) */ +/* from version 0.99c */ + void (*close)(void); /* fonction launched by ldg_term() */ +/* from version 1.00 */ + short vers_ldg; /* LDG-protocol version */ + char path[PATHLEN]; /* real path of the lib */ + long user_ext; /* own library extension */ + long addr_ext; /* for future extension */ +} LDG; + +/* + * The LDG cookie + */ + +typedef struct { + short version; /* The cookie number version */ + char path[PATHLEN]; /* Path of LDG-libraries */ + short garbage; /* The garbage collector time */ + short idle; /* Obsolet : for backward compatibility */ + + LDG* CDECL (*ldg_open) ( const char *lib, short *gl); + /* Open a library */ + short CDECL (*ldg_close) ( LDG *ldg, short *gl); + /* Close a library */ + void* CDECL (*ldg_find) ( char *fnc, LDG *ldg); + /* Find a function in a library */ + LDG* CDECL (*ldg_open_ev)( char *lib, short *gl, void (*)(short*)); + /* Obsolet : for backward compatibility */ + short error; /* Last error occuring */ + void CDECL (*ldg_garbage)( short *gl); + /* Release unused libs */ + void CDECL (*ldg_reset)( short *gl); + /* Release all libs */ + void* internal; /* Reserved */ + short CDECL (*ldg_libpath)( char *, short *global); + /* Find the path of a library */ +} LDG_INFOS; + +/* + * This structure is used by ldg_init() to initiate the + * the LDG-protocol inside a LDG-library. + */ + +typedef struct ldglib { + short vers; /* library version */ + short num; /* count of avalaible functions */ + PROC *list; /* pointer to the functions list */ + char *infos; /* description of the lib */ + unsigned short flags; /* library flags (shared, locked, resident) */ + void (*close)(void); /* function executed by ldg_term()*/ + long user_ext; /* own library extension */ +} LDGLIB; + +/* value of the 'flag' field */ +#define LDG_NOT_SHARED 0x1 /* the library is unshareable */ +#define LDG_LOCKED 0x2 /* the library is locked */ +#define LDG_RESIDENT 0x4 /* the library is memory resident */ +#define LDG_STDCALL 0x100 /* a2/d2 are not scratch register - private */ + +/* Errors returned by ldg_error() */ +#define LDG_LIB_FULLED -1 +#define LDG_APP_FULLED -2 +#define LDG_ERR_EXEC -3 +#define LDG_BAD_FORMAT -4 +#define LDG_LIB_LOCKED -6 +#define LDG_NO_MANAGER -7 +#define LDG_NOT_FOUND -8 +#define LDG_BAD_LIB LDG_BAD_FORMAT +#define LDG_NO_MEMORY -9 +#define LDG_TIME_IDLE -10 +#define LDG_NO_TSR -11 +#define LDG_BAD_TSR -12 +#define LDG_NO_FUNC -13 + +/* Client functions */ +LDG* ldg_open ( const char *name, short *gl); +short ldg_close ( LDG *lib, short *gl); +short ldg_error ( void); +void* ldg_find ( char *name, LDG *ldg); +short ldg_libpath ( char *path, short *gl); + +/* Server functions */ +int ldg_init ( LDGLIB *libldg); +char *ldg_getpath ( void); + +/* Diverse functions */ +int ldg_cookie ( long, long *); +void ldg_debug ( char *, ...); +void* ldg_Malloc ( long size); +void* ldg_Calloc ( long count,long size); +int ldg_Free ( void *memory); +void* ldg_Realloc ( void *oldblk, long oldsize, long newsize); +#ifndef __mcoldfire__ +void ldg_cpush ( void); +#endif +long CDECL ldg_callback( void *f, ...); + +/* For backward compatibility */ +#define ldg_exec(a,b) ldg_open( b, ldg_global) +#define ldg_exec_evnt(a,b,c) ldg_open( b, ldg_global) +#define ldg_term(a,b) ldg_close( b, ldg_global) +#define ldg_libexec_evnt(a,b,c) ldg_open( a, b) +#define ldg_libexec(a,b) ldg_open( a, b) +#define ldg_libterm(a,b) ldg_close( a,b) + +/* C-library version (currently 1.20) */ +struct _ldg_version { + char *name; + short num; +}; + +extern struct _ldg_version ldg_version; + +#endif /* __LDG__ */ diff --git a/tools/vision/ldv/ldg.lib b/tools/vision/ldv/ldg.lib new file mode 100644 index 0000000..a9bd4a2 Binary files /dev/null and b/tools/vision/ldv/ldg.lib differ diff --git a/tools/vision/ldv/ldv.h b/tools/vision/ldv/ldv.h new file mode 100644 index 0000000..eb648dc --- /dev/null +++ b/tools/vision/ldv/ldv.h @@ -0,0 +1,150 @@ +#ifndef __LDV_H +#define __LDV_H + +#ifndef __LDG__ +#include "ldv\ldg.h" +#endif + +#ifndef __VAPI_H +#include "ldv\vapi.h" +#endif + +/* Error codes */ +typedef long LDV_STATUS ; +#define ELDV_NOERROR 0x0 /* No error */ +#define ELDV_INVALIDPARAMETER 0x1 /* At least one parameter is invalid */ +#define ELDV_NBPLANESNOTSUPPORTED 0x2 /* Unsupported number of planes */ +#define ELDV_NOTENOUGHMEMORY 0x3 /* Not enough memory */ +#define ELDV_PREVIEWNOTSUPPORTED 0x4 /* Preview is not supported */ +#define ELDV_RUNNOTSUPPORTED 0x5 /* Run is not supported (!) */ +#define ELDV_BADVAPIVERSION 0x6 /* No VAPI or wrong version */ +#define ELDV_IMGFORMATMISMATCH 0x7 /* Image format is not compatible */ +#define ELDV_CANCELLED 0x8 /* User cancelled the operation */ +#define ELDV_BADINTERFACE 0x9 /* LDV does not expose a proper interface */ +#define ELDV_GENERALFAILURE 0xF /* General failure, reason unknown */ + + +/* Macro aiming to test if a */ +/* LDV call was successful */ +#define LDV_SUCCESS(x) ((x) == ELDV_NOERROR) + + +/* LDV types */ +#define TLDV_MODIFYIMG 0x01 /* Modify image : filter, scaler, ... */ + +/* Flags field bitmask for */ +/* A given number of planes */ +#define LDVF_STDFORMAT 0x00000001UL /* Image is standard format */ +#define LDVF_ATARIFORMAT 0x00000002UL /* Image is ATARI format (Falcon) */ +#define LDVF_SPECFORMAT 0x00000004UL /* Image is specific format (video card/emulator)) */ +#define LDVF_SUPPORTPREVIEW 0x00000008UL /* Preview is supported */ +#define LDVF_AFFECTPALETTE 0x00000010UL /* Module changes palette (if NbPlanes <= 8) */ +#define LDVF_SUPPORTPROG 0x00000020UL /* Module wil call progress fonction */ +#define LDVF_OPINPLACE 0x00000040UL /* Module operate inplace and changes the source (out parameter is ignored) */ +#define LDVF_REALTIMEPARAMS 0x00000080UL /* Module supports real time parameter changes in preview mode */ +#define LDVF_SUPPORTCANCEL 0x00000100UL /* Module supports user cancellation (see PrSetProgEx) */ +#define LDVF_NOSELECTION 0x00000200UL /* Module can only operate on full image, not sub block */ +#define LDVF_NOCHANGE 0x00000400UL /* Module won't change any part of the image (e.g. report LDV) */ + +/* This struct reports what a LDV */ +/* Can do for each number of planes */ +typedef struct +{ + char NbPlanes ; /* Image number of planes : */ + /* 0 : ends this structure */ + /* 1, 2, 4, 8, 16, 24, or 32 */ + + char NbPlanesOut ; /* Number of planes after modification */ + + unsigned long Flags ; /* LDVF_... */ +} +LDV_CAPS ; + + +#define LDVNBMAX_PARAMETERS 4 /* Maximum 4 parameters can be passed by VISION */ + +typedef union +{ + short s ; + float f ; + void* str ; +} +LDV_BASICPARAM ; + +#define LDVT_SHORT 1 +#define LDVT_FLOAT 2 +#define LDVT_FILE 3 +typedef struct +{ + char Name[1+15] ; + char Type ; + LDV_BASICPARAM MinValue ; + LDV_BASICPARAM DefaultValue ; + LDV_BASICPARAM MaxValue ; +} +LDV_DEF_PARAM ; + +typedef struct +{ + short StrSize ; /* Size in bytes of LDV_INFOS */ + short Type ; /* TLDV_... */ + char Authors[1+45] ; /* Author(s) list */ + + LDV_CAPS Caps[10] ; /* What this LDV can do */ + /* For each number of planes */ + /* Last element is zeroed to */ + /* Mark the end */ + char RFU[16] ; /* Futur usage */ +} +LDV_INFOS ; + +typedef struct +{ + short Red ; /* 0...1000 */ + short Green ; /* 0...1000 */ + short Blue ; /* 0...1000 */ +} +VDI_ELEMENTPAL ; + +typedef struct +{ + short NbColors ; /* Number of colors for this palette */ + VDI_ELEMENTPAL* Pal ; /* Indexed from VDI */ +} +LDV_PALETTE ; + +typedef struct +{ + short x1, y1, x2, y2 ; /* Rectangle defining the sub block to work on */ + short NbParams ; + LDV_BASICPARAM Param[LDVNBMAX_PARAMETERS] ; + short ParamType[LDVNBMAX_PARAMETERS] ; /* A bit redundant but useful to free allocated memory for file name */ + + /* Since VAPI_LDVVERSION 0x0106 */ + /* LDV can return a text to be displayed by VISION */ + char ldv_txt_out[128] ; +} +LDV_PARAMS ; + +/* Image definition for the LDV to operate on */ +typedef struct +{ + short RasterFormat ; /* LDVF_STDFORMAT, LDVF_ATARIFORMAT or LDVF_SPECFORMAT */ + /* VISION selects the optimal format from */ + /* LDV capabilities reported via GetLDVCapabilities */ + + MFDB Raster ; /* Image */ + + LDV_PALETTE Palette ; /* Valid if Raster.fd_nplanes <= 8 */ + + void* Context ; /* Used by Image I/O interface */ +} +LDV_IMAGE ; + + +long cdecl ImGetInf(char* filename, void* ldv_img) ; +long cdecl ImLoad(void* ldv_img) ; +void cdecl ImFree(void* ldv_img) ; + + +#endif diff --git a/tools/vision/ldv/ldvcom.h b/tools/vision/ldv/ldvcom.h new file mode 100644 index 0000000..ae3cddd --- /dev/null +++ b/tools/vision/ldv/ldvcom.h @@ -0,0 +1,91 @@ +#ifndef __LDVCOM_H +#define __LDVCOM_H + +#include "ldv\ldv.h" + +typedef struct +{ + char* ShortName ; /* Module short name (15 chars max) */ + char* LongName ; /* Module long name (31 chars max) */ + char* Description ; /* Module description (79 chars max) */ + + /* Parameters that can apply */ + LDV_DEF_PARAM Params[LDVNBMAX_PARAMETERS] ; + char* ParamLabels[LDVNBMAX_PARAMETERS] ; /* Optional labels for parameters */ + /* Should be part of LDV_DEF_PARAM */ + /* But that would break compatibility with previous LDVs */ + +} +LDV_INI_SPEC ; + +/* Image Modification Interface */ +typedef struct +{ + /* Allows VISION to allocate required ressources for LDV to operate */ + /* You have to indicate in out->Raster the output image size */ + /* As well as in out->Palette.NbColors field */ + /* In params, you have to tell which zone has to be send to Undo buffer */ + LDV_STATUS cdecl (*PreRun)(LDV_IMAGE* in, LDV_PARAMS* params, LDV_IMAGE* out) ; + + /* Performs LDV operation */ + /* VISION already allocated required memory from previous call */ + /* DO NOT ALLOCATE OR FREE MEMORY THAT VISION WILL USE AFTER THIS CALL */ + LDV_STATUS cdecl (*Run)(LDV_IMAGE* in, LDV_PARAMS* params, LDV_IMAGE* out) ; + + /* Same as previous one, but in preview mode */ + LDV_STATUS cdecl (*Preview)(LDV_IMAGE* in, LDV_PARAMS* params, LDV_IMAGE* out) ; +} +ILDVModifImg ; + +typedef struct +{ + LDG* Ldg ; /* LDG Module */ + + char* FileName ; /* Only name, no path */ + short Version ; /* Same as Ldg->vers */ + + LDV_INFOS Infos ; /* Module informations */ + LDV_INI_SPEC IniSpec ; /* .INI specific */ + + /* Reports capabilities to VISION */ + /* VISION gives access to its Application Programmer Interface */ + LDV_INFOS* cdecl (*GetLDVCapabilities)(VAPI* vapi) ; + + int NbReferences ; /* How many times this module is referenced */ + ILDVModifImg* IModifImg ; /* TLDV_MODIFYIMG Interface */ +} +LDV_MODULE ; + +typedef struct +{ + unsigned long prerun_ms ; + unsigned long pre_ldv_ms ; + unsigned long run_ms ; + unsigned long post_ldv_ms ; + unsigned long total_ms ; +} +LDV_PERF ; + +/* Flags for LDVDo */ +#define LDVDOF_NONE 0 +#define LDVDOF_PREVIEW 1 +#define LDVDOF_PROGLFOUT 2 /* Progression Life Cycle (creation/destruction) is outside of LDVDo */ + + +LDV_CAPS* LDVGetNPlanesCaps(LDV_MODULE* mod, int nplanes) ; +LDV_MODULE* LDVGetModuleList(char* path, int* nb_ldv) ; +void LDVFreeModuleList(LDV_MODULE* module_list) ; +LDV_MODULE* GetLdvByLdg(LDV_MODULE* ldv_list, LDG* ldg) ; +LDV_STATUS LDVAlloc(LDV_IMAGE* img) ; +LDV_STATUS LDVDo(LDV_MODULE* ldv, LDV_PARAMS* ldv_params, LDV_IMAGE* ldv_img, int flags) ; +LDV_STATUS LDVAdapt2Planes(LDV_IMAGE* pldv_img, short nplanes) ; + +LDV_STATUS LDVLoadFunctions(char* path, LDV_MODULE* mod) ; +void LDVUnloadFunctions(LDV_MODULE* mod) ; +void LDVFreeDynParams(LDV_PARAMS* ldv_params) ; + +GEM_WINDOW* LDVGetProgWindow(void) ; +GEM_WINDOW* LDVCreateProgWindow(int ldvcap_flags) ; +void LDVDestroyProgWindow(void) ; + +#endif diff --git a/tools/vision/LDV/LIGHT.INI b/tools/vision/ldv/light.ini similarity index 100% rename from tools/vision/LDV/LIGHT.INI rename to tools/vision/ldv/light.ini diff --git a/tools/vision/ldv/light.ldv b/tools/vision/ldv/light.ldv new file mode 100644 index 0000000..ef811a2 Binary files /dev/null and b/tools/vision/ldv/light.ldv differ diff --git a/tools/vision/LDV/MT_AES.H b/tools/vision/ldv/mt_aes.h similarity index 100% rename from tools/vision/LDV/MT_AES.H rename to tools/vision/ldv/mt_aes.h diff --git a/tools/vision/LDV/MT_AES.LIB b/tools/vision/ldv/mt_aes.lib similarity index 100% rename from tools/vision/LDV/MT_AES.LIB rename to tools/vision/ldv/mt_aes.lib diff --git a/tools/vision/ldv/optimg.ini b/tools/vision/ldv/optimg.ini new file mode 100644 index 0000000..a3b8e17 --- /dev/null +++ b/tools/vision/ldv/optimg.ini @@ -0,0 +1,112 @@ +; This is a basic INI file used +; To setup a language for a LDV +; Module for VISION 4.0 or older +; For example, if your module is +; Named SOGOOD.LDV, you should create +; SOGOOD.INI (default file, this may be the English version) in LDV folder +; SOGOOD.INI in the FRANCAIS folder for the French version +; SOGOOD.INI in the ENGLISH folder for the English version +; SOGOOD.INI in the SVENSKA folder for the Swedish version +; ... and so on ... +; Now you just have to fill in the ShortName, LongName and Description fields +; Note that VISION will search for the INI file associated to the LDV file +; In the folder defined by the language setup (same as in LANGUES folder) + +[Informations] +; ShortName should not exceed 15 caracters +ShortName = OptImg +; LongName should not exceed 31 caracters +LongName = Image Optimization +; Description should not exceed 79 caracters +Description = Changes format/color arrangement according to image + +; Here comes the language parameters dependencies +; Profiles are defined as follows: +; [ProfileName] +; enforce_smaller = <0 or 1> : if VISION's optimization ends up with a bigger file, keep original +; 1 = fmt=,;.... : format then save options for #nplanes=1 +; 4 = fmt=,;.... : format then save options for #nplanes=4 +; 8 = fmt=,;.... : format then save options for #nplanes=8 +; 16 = fmt=,;.... : format then save options for #nplanes=16 +; 24 = fmt=,;.... : format then save options for #nplanes=24 +; 32 = fmt=,;.... : format then save options for #nplanes=32 +; Several profiles are already defined to cope with different machines/goals +; Feel free to create new ones +; ProfileName is to be passed as 3rd parameter to OPTIMG.LDV, see SCRIPTS/ldvopt.vcs +[ST] +limit_black = 5 +limit_white = 250 +diff_grey = 5 +1 = fmt=IMG +4 = fmt=IMG +8 = fmt=IMG +16 = fmt=TGA +24 = fmt=TGA +32 = fmt=TGA + +[TT] +limit_black = 5 +limit_white = 250 +diff_grey = 5 +1 = fmt=TIF;compression=lzw +4 = fmt=TIF;compression=lzw +8 = fmt=TIF;compression=lzw +16 = fmt=TGA +24 = fmt=TGA +32 = fmt=TGA + +[Falcon] +limit_black = 5 +limit_white = 250 +diff_grey = 5 +1 = fmt=TIF;compression=lzw +4 = fmt=TIF;compression=lzw +8 = fmt=TIF;compression=lzw +16 = fmt=JPG;quality=90 +24 = fmt=JPG;quality=90 +32 = fmt=JPG;quality=90 + +[Aranym] +enforce_smaller = 1 +limit_black = 5 +limit_white = 250 +diff_grey = 2 +1 = fmt=TIF;compression=lzw +4 = fmt=TIF;compression=lzw +8 = fmt=TIF;compression=lzw +16 = fmt=JPG;quality=90 +24 = fmt=JPG;quality=90 +32 = fmt=JPG;quality=90 + +[DualToneLikely] +enforce_smaller = 1 +limit_black = 50 +limit_white = 205 +diff_grey = 30 +1 = fmt=TIF;compression=lzw +4 = fmt=TIF;compression=lzw +8 = fmt=TIF;compression=lzw +16 = fmt=JPG;quality=90 +24 = fmt=JPG;quality=90 +32 = fmt=JPG;quality=90 + +[DualToneForced] +enforce_dither = 1 +dither_method = 4 +dither_outplanes = 1 +dither_param = 50 +1 = fmt=TIF;compression=lzw + +[TIFForceDither256c] +enforce_dither = 1 +dither_method = 3 +dither_outplanes = 8 +dither_param = 0 +8 = fmt=TIF;compression=lzw + +[IMGForceDither256c] +enforce_dither = 1 +dither_method = 3 +dither_outplanes = 8 +dither_param = 0 +8 = fmt=IMG diff --git a/tools/vision/ldv/optimg.ldv b/tools/vision/ldv/optimg.ldv new file mode 100644 index 0000000..7b3973c Binary files /dev/null and b/tools/vision/ldv/optimg.ldv differ diff --git a/tools/vision/LDV/PIXEL.INI b/tools/vision/ldv/pixel.ini similarity index 100% rename from tools/vision/LDV/PIXEL.INI rename to tools/vision/ldv/pixel.ini diff --git a/tools/vision/ldv/pixel.ldv b/tools/vision/ldv/pixel.ldv new file mode 100644 index 0000000..153de7b Binary files /dev/null and b/tools/vision/ldv/pixel.ldv differ diff --git a/tools/vision/LDV/puzzle.ini b/tools/vision/ldv/puzzle.ini similarity index 100% rename from tools/vision/LDV/puzzle.ini rename to tools/vision/ldv/puzzle.ini diff --git a/tools/vision/ldv/puzzle.ldv b/tools/vision/ldv/puzzle.ldv new file mode 100644 index 0000000..d0a670a Binary files /dev/null and b/tools/vision/ldv/puzzle.ldv differ diff --git a/tools/vision/LDV/ROTATE.INI b/tools/vision/ldv/rotate.ini similarity index 100% rename from tools/vision/LDV/ROTATE.INI rename to tools/vision/ldv/rotate.ini diff --git a/tools/vision/ldv/rotate.ldv b/tools/vision/ldv/rotate.ldv new file mode 100644 index 0000000..faf26fe Binary files /dev/null and b/tools/vision/ldv/rotate.ldv differ diff --git a/tools/vision/LDV/SMLLDV.H b/tools/vision/ldv/smlldv.h similarity index 100% rename from tools/vision/LDV/SMLLDV.H rename to tools/vision/ldv/smlldv.h diff --git a/tools/vision/LDV/SMP_LDV.INI b/tools/vision/ldv/smp_ldv.ini similarity index 100% rename from tools/vision/LDV/SMP_LDV.INI rename to tools/vision/ldv/smp_ldv.ini diff --git a/tools/vision/LDV/SRC/bhole/bhole.c b/tools/vision/ldv/src/bhole/bhole.c similarity index 95% rename from tools/vision/LDV/SRC/bhole/bhole.c rename to tools/vision/ldv/src/bhole/bhole.c index 92db7ff..bccb8ef 100644 --- a/tools/vision/LDV/SRC/bhole/bhole.c +++ b/tools/vision/ldv/src/bhole/bhole.c @@ -47,12 +47,12 @@ PROC Proc[] = { char Info[] = "LDV"; LDGLIB Ldg[] = { - 0x0100, /* LDV version */ + 0x0101, /* LDV version */ 4, /* Number of functions in the lib */ Proc, /* Pointers to LDV functions */ Info, /* Library Information */ 0x0, /* Lib flags, mandatory */ - OnClose, /* Closing, free VDIHandle */ + OnClose, /* Closing, free VDIHandle */ }; #define BP_CAPS (LDVF_ATARIFORMAT | LDVF_SUPPORTPREVIEW | LDVF_SUPPORTPROG | LDVF_REALTIMEPARAMS | LDVF_SUPPORTCANCEL | LDVF_NOSELECTION) @@ -207,7 +207,7 @@ void BHL16_68000(short use_sym, void* in, void* out) unsigned long save_bh_xd, save_bh_yd ; short n ; - for ( x = bh_out_x; x <= bh_out_x+bh_out_w/2; x++, bh_xd++ ) + for ( x = bh_out_x; x <= bh_out_x+(bh_out_w>>1); x++, bh_xd++ ) { /* Save bh_xd and bh_yd as they will change */ save_bh_xd = bh_xd ; @@ -262,7 +262,7 @@ void BHL32_68000(short use_sym, void* in, void* out) unsigned long save_bh_xd, save_bh_yd ; short n ; - for ( x = bh_out_x; x <= bh_out_x+bh_out_w/2; x++, bh_xd++ ) + for ( x = bh_out_x; x <= bh_out_x+(bh_out_w>>1); x++, bh_xd++ ) { /* Save bh_xd and bh_yd as they will change */ save_bh_xd = bh_xd ; @@ -444,7 +444,7 @@ char check_prog(short y, short ymax) if ( ( y & 0x0F ) == 0 ) { - int pc = (short) ( ( 100L * (long)y ) / (long)ymax ) ; + short pc = (short)((y*100L)/ymax) ; cancel = Vapi->PrSetProgEx( bh_pc+pc/bh_nrect ) ; } @@ -541,7 +541,7 @@ LDV_STATUS Run16(MFDB *in, long angle, short xc, short yc, MFDB *out, RECT* rect in_ptr = (unsigned int*) in->fd_addr ; out_ptr = (unsigned int*) out->fd_addr ; init_computation(xc, yc, angle, in, rect) ; - hy = bh_out_y+bh_out_h/2 ; + hy = bh_out_y+(bh_out_h>>1) ; if (!use_sym) { sizelout = (long) ALIGN16( out->fd_w ) ; @@ -572,7 +572,7 @@ LDV_STATUS Run32(MFDB *in, long angle, short xc, short yc, MFDB *out, RECT* rect in_ptr = (unsigned long*) in->fd_addr ; out_ptr = (unsigned long*) out->fd_addr ; init_computation(xc, yc, angle, in, rect) ; - hy = bh_out_y+bh_out_h/2 ; + hy = bh_out_y+(bh_out_h>>1) ; if (!use_sym) { sizelout = (long) ALIGN16( out->fd_w ) ; @@ -633,7 +633,7 @@ void SymmetrySplit(MFDB* img, short xc, short yc, BH_SPROPERTIES* sgProps) npts_total = (long)img->fd_w*(long)img->fd_h ; npts_insym = 4L*(long)sw*(long)sw ; - npts_to_compute = npts_total-((3L*npts_insym)/4L) ; + npts_to_compute = npts_total-((3L*npts_insym)>>2) ; sgProps->estdpc = (100L*npts_to_compute)/npts_total ; if ( sgProps->estdpc > 70 ) { @@ -736,7 +736,7 @@ short GetSymetryUsageFromIni(void) sprintf( filename, "%s\\%s\\BHOLE.INI", path_ldv, language ) ; if ( Vapi->LoDoLog ) Vapi->LoDoLog(LL_INFO,"Looking into %s to see symetry usage...", filename) ; - found = Vapi->InGetKeyFromFile( filename, "Private", "UseSym", val_key ) ; + found = Vapi->InGetKeyFromFile( filename, "Private", "UseSym", val_key ) ; if ( !found ) { sprintf( filename, "%s\\BHOLE.INI", path_ldv ) ; @@ -818,7 +818,7 @@ LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) bh_pc = (100*n)/sgProps.nrect ; /* For progression indicator as we may have multiple loops */ npix = (long)sgProps.rect[n].w * (long)sgProps.rect[n].h ; np += npix ; - if ( VapiLogLevel >= LL_PERF) + if ( VapiLogLevel >= LL_PERF ) { size_t t0, tms ; diff --git a/tools/vision/ldv/src/bhole/bhole.ldv b/tools/vision/ldv/src/bhole/bhole.ldv new file mode 100644 index 0000000..c882bd1 Binary files /dev/null and b/tools/vision/ldv/src/bhole/bhole.ldv differ diff --git a/tools/vision/LDV/SRC/bhole/bhole.prj b/tools/vision/ldv/src/bhole/bhole.prj similarity index 61% rename from tools/vision/LDV/SRC/bhole/bhole.prj rename to tools/vision/ldv/src/bhole/bhole.prj index e3df650..e85dd05 100644 --- a/tools/vision/LDV/SRC/bhole/bhole.prj +++ b/tools/vision/ldv/src/bhole/bhole.prj @@ -1,13 +1,15 @@ BHOLE.LDV -;.C[-Y- -G+] -;.L[-Y-] +.C [ ] +.S [ -2 -8 ] +.L [ ] + = + pcstart.o BHOLE.C -BHOLE.S +BHOLES.S pcgemlib.lib pcstdlib.lib pctoslib.lib pcfltlib.lib ..\..\ldg.lib -;..\..\mt_aes.lib \ No newline at end of file diff --git a/tools/vision/LDV/SRC/bhole/bhole.s b/tools/vision/ldv/src/bhole/bholes.s similarity index 100% rename from tools/vision/LDV/SRC/bhole/bhole.s rename to tools/vision/ldv/src/bhole/bholes.s diff --git a/tools/vision/LDV/SRC/bhole/perf_r51.txt b/tools/vision/ldv/src/bhole/perf_r51.txt similarity index 100% rename from tools/vision/LDV/SRC/bhole/perf_r51.txt rename to tools/vision/ldv/src/bhole/perf_r51.txt diff --git a/tools/vision/LDV/SRC/BW/BW.C b/tools/vision/ldv/src/bw/bw.c similarity index 74% rename from tools/vision/LDV/SRC/BW/BW.C rename to tools/vision/ldv/src/bw/bw.c index 6258955..0a462d5 100644 --- a/tools/vision/LDV/SRC/BW/BW.C +++ b/tools/vision/ldv/src/bw/bw.c @@ -44,7 +44,7 @@ PROC Proc[] = { char Info[] = "LDV"; LDGLIB Ldg[] = { - 0x0102, /* version de la lib, recommand‚ */ + 0x0104, /* version de la lib, recommand‚ */ 4, /* nombre de fonction dans la lib */ Proc, /* Pointeurs vers nos fonctions */ Info, /* Information sur la lib */ @@ -85,6 +85,30 @@ void OnClose(void) VDIHandle = -1 ; } +/* Helper function to call best progress routine depending on VAPI progress function availability */ +/* Return value: */ +/* 1: Cencel requested by user */ +/* 0: Progress update done */ +/* -1: Progress update not made to screen () */ +static short Prog(long current, long max) +{ + short status = 0 ; + + if ( Vapi->PrSetProgRange ) status = (short) Vapi->PrSetProgRange( current, max ) ; + else if ( max && ( ( current & 0x0F ) == 0 ) ) + { + short pc ; + + /* Call progress routine only once on 16 */ + pc = (short) ( ( 100L * ( current - max ) ) / max ) ; + if ( Vapi->PrSetProgEx ) status = Vapi->PrSetProgEx( pc ) ; + else Vapi->PrSetProg( pc ) ; + } + + return status ; +} +#define PROG_CANCEL(status) (status == 1) + /* * Fonctions de la librairie */ @@ -129,7 +153,7 @@ LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) VDI_ELEMENTPAL *vdi_epal ; short vdi_index ; short bw_value ; - short cancel = 0 ; + short status = 0 ; if ( in->Raster.fd_nplanes <= 8 ) { @@ -148,23 +172,24 @@ LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) else { MFDB *img = &in->Raster ; - long nb_pts_in_line ; - short x, y, pc ; + long nb_pts_in_line, ymax ; + short x, y ; - if ( Vapi == NULL ) return( ELDV_GENERALFAILURE ) ; + if ( Vapi == NULL ) return ELDV_GENERALFAILURE ; + ymax = params->y2 - params->y1 ; /* Convertir l'image au format True Color "standard" ATARI */ /* Format specifique --> format "ATARI True Color" */ Vapi->RaTCInvConvert( img ) ; nb_pts_in_line = img->fd_w ; - if ( nb_pts_in_line % 16 ) nb_pts_in_line = (16+nb_pts_in_line) & 0xFFF0 ; /* Toujours aligne sur 16 pixels ! */ + nb_pts_in_line = ALIGN16( nb_pts_in_line ) ; /* Toujours aligne sur 16 pixels ! */ if ( img->fd_nplanes == 16 ) { unsigned short *ptu, red, green, blue, ugris, val, ubr ; - for ( y = params->y1; !cancel && (y <= params->y2); y++ ) + for ( y = params->y1; !PROG_CANCEL(status) && (y <= params->y2); y++ ) { ptu = (unsigned short *) img->fd_addr ; ptu += nb_pts_in_line * y ; @@ -179,19 +204,7 @@ LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) ubr = ( ugris >> 1 ) ; *ptu++ = RVB16( ubr, ugris, ubr ) ; } - if ( ( y & 0x0F ) == 0x0F ) - { - /* Appelle la routine de progression une fois sur 16 */ - /* NB : en mode preview, VISION ignorera cet appel, */ - /* inutile donc de s'en soucier */ - pc = (short) ( ( 100L * ( y - params->y1 ) ) / ( params->y2 - params->y1 ) ) ; - if ( Vapi->PrSetProgEx ) - { - cancel = Vapi->PrSetProgEx( pc ) ; - } - else - Vapi->PrSetProg( pc ) ; - } + status = Prog( y - params->y1, ymax ) ; } } else if ( img->fd_nplanes == 24 ) /* NON teste ! */ @@ -199,7 +212,7 @@ LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) unsigned char *ptu ; unsigned short red, green, blue, ugris ; - for ( y = params->y1; !cancel && (y <= params->y2); y++ ) + for ( y = params->y1; !PROG_CANCEL(status) && (y <= params->y2); y++ ) { ptu = (unsigned char *) img->fd_addr ; ptu += 3 * nb_pts_in_line * y ; @@ -215,19 +228,7 @@ LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) *ptu-- = ugris ; ptu += 3 ; } - if ( ( y & 0x0F ) == 0x0F ) - { - /* Appelle la routine de progression une fois sur 16 */ - /* NB : en mode preview, VISION ignorera cet appel, */ - /* inutile donc de s'en soucier */ - pc = (short) ( ( 100L * ( y - params->y1 ) ) / ( params->y2 - params->y1 ) ) ; - if ( Vapi->PrSetProgEx ) - { - cancel = Vapi->PrSetProgEx( pc ) ; - } - else - Vapi->PrSetProg( pc ) ; - } + status = Prog( y - params->y1, ymax ) ; } } else if ( img->fd_nplanes == 32 ) @@ -235,7 +236,7 @@ LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) unsigned long *ptu, val ; unsigned short red, green, blue, ugris ; - for ( y = params->y1; !cancel && (y <= params->y2); y++ ) + for ( y = params->y1; !PROG_CANCEL(status) && (y <= params->y2); y++ ) { ptu = (unsigned long *)img->fd_addr ; ptu += nb_pts_in_line * y ; @@ -252,19 +253,7 @@ LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) ugris = ( R4[red] + G4[green] + B4[blue] ) ; *ptu++ = RVB32( ugris, ugris, ugris ) ; } - if ( ( y & 0x0F ) == 0x0F ) - { - /* Appelle la routine de progression une fois sur 16 */ - /* NB : en mode preview, VISION ignorera cet appel, */ - /* inutile donc de s'en soucier */ - pc = (short) ( ( 100L * ( y - params->y1 ) ) / ( params->y2 - params->y1 ) ) ; - if ( Vapi->PrSetProgEx ) - { - cancel = Vapi->PrSetProgEx( pc ) ; - } - else - Vapi->PrSetProg( pc ) ; - } + status = Prog( y - params->y1, ymax ) ; } } @@ -272,7 +261,7 @@ LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) Vapi->RaTCConvert( img ) ; } - return( cancel ? ELDV_CANCELLED : ELDV_NOERROR ) ; + return( PROG_CANCEL(status) ? ELDV_CANCELLED : ELDV_NOERROR ) ; } LDV_STATUS cdecl Preview(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) diff --git a/tools/vision/ldv/src/bw/bw.ldv b/tools/vision/ldv/src/bw/bw.ldv new file mode 100644 index 0000000..8866145 Binary files /dev/null and b/tools/vision/ldv/src/bw/bw.ldv differ diff --git a/tools/vision/LDV/SRC/BW/BW.PRJ b/tools/vision/ldv/src/bw/bw.prj similarity index 76% rename from tools/vision/LDV/SRC/BW/BW.PRJ rename to tools/vision/ldv/src/bw/bw.prj index f0abb07..77fdebb 100644 --- a/tools/vision/LDV/SRC/BW/BW.PRJ +++ b/tools/vision/ldv/src/bw/bw.prj @@ -1,6 +1,7 @@ bw.ldv -;.C[-Y- -G+] -;.L[-Y-] +.C [ ] +.S [ ] +.L [ ] = pcstart.o bw.c diff --git a/tools/vision/ldv/src/cntcol/cntcol.c b/tools/vision/ldv/src/cntcol/cntcol.c new file mode 100644 index 0000000..f25a365 --- /dev/null +++ b/tools/vision/ldv/src/cntcol/cntcol.c @@ -0,0 +1,856 @@ +#define PCGEMLIB 1 /* Set to 1 if PureC is used */ + +#if PCGEMLIB +#include +#include +#else +#include +#include +#endif + +#include +#include +#include +#include +#include "..\..\ldg.h" +#include "..\..\vapi.h" +#include "..\..\ldv.h" + +/* Prototypes */ +LDV_INFOS* cdecl GetLDVCapabilities(VAPI* vapi) ; +LDV_STATUS cdecl PreRun(LDV_IMAGE* in, LDV_PARAMS* params, LDV_IMAGE* out) ; +LDV_STATUS cdecl Run(LDV_IMAGE* in, LDV_PARAMS* params, LDV_IMAGE* out) ; + +/* Global variables */ +PROC Proc[] = { + "GetLDVCapabilities", "LDV capabilities", (void*)GetLDVCapabilities, + "PreRun", "Run initialization", (void*)PreRun, + "Run", "LDV operation", (void*)Run, + } ; + +char Info[] = "LDV" ; + +LDGLIB Ldg[] = { + 0x0107, /* Lib version */ + 3, /* Number of functions in lib */ + Proc, /* Pointers to our functions */ + Info, /* Lib information */ + 0x0, /* Lib flags */ + NULL, /* On exit, free VDI handle (unused) */ + } ; + +#define CAPS (LDVF_ATARIFORMAT | LDVF_SUPPORTPROG | LDVF_OPINPLACE | LDVF_SUPPORTCANCEL | LDVF_NOSELECTION | LDVF_NOCHANGE) + +LDV_INFOS LdvInfos = { + (short) sizeof(LDV_INFOS), /* size of this structure */ + TLDV_MODIFYIMG, /* LDV Type */ + "Jean Lusetti/Seedy", /* Authors */ + { + { 1, 1, CAPS }, /* 1 bitplane capabilities */ + { 2, 2, CAPS }, /* 2 bitplane capabilities */ + { 4, 4, CAPS }, /* 4 bitplane capabilities */ + { 8, 8, CAPS }, /* 8 bitplane capabilities */ + { 16, 16, CAPS }, /* 16 bitplane capabilities */ +/* Not yet { 24, 24, CAPS }, */ + { 32, 32, CAPS }, /* 32 bitplane capabilities */ + { 0, 0, 0UL } /* End of this list */ + }, + } ; + +VAPI* Vapi = NULL ; +unsigned char VapiLog = 0 ; +unsigned char UseVAlloc ; /* Use VISION's allocation routines if possible */ +unsigned char NbBitsIn[256] ; /* Number of bits set to 1 for every integer in [0;255] */ + +typedef struct _CNTCOL_DATA +{ + /* Input data */ + LDV_IMAGE* in ; + LDV_PARAMS* params ; + FILE* report_file ; + short method ; /* 0: auto, 1: bit array of colors, 2: sorted colors */ +} +CNTCOL_DATA, *PCNTCOL_DATA ; + +typedef struct _CC1_CONTEXT +{ + void* line_colors ; + unsigned long so_line_colors ; + unsigned char* unique_colors_bits ; + unsigned long so_unique_colors_bits ; + short nplanes ; + unsigned char* indexes ; /* Allocated only if nplanes <= 8 */ + unsigned long so_indexes ; + unsigned long used_bytes ; +} +CC1_CONTEXT, *PCC1_CONTEXT ; + +typedef struct _CC2_CONTEXT +{ + unsigned char* line_sorted ; + unsigned char* img_sorted ; + unsigned long nb_img_colors ; + unsigned long nb_img_colors_max ; + short nplanes ; + unsigned char* indexes ; /* Allocated only if nplanes <= 8 */ + unsigned long so_indexes ; + unsigned long used_bytes ; +} +CC2_CONTEXT, *PCC2_CONTEXT ; + +typedef struct _CC3_CONTEXT +{ + unsigned char* line_sorted ; + unsigned long so_line_colors ; + unsigned char* unique_colors_bits ; + unsigned long so_unique_colors_bits ; + short nplanes ; + unsigned char* indexes ; /* Allocated only if nplanes <= 8 */ + unsigned long so_indexes ; + unsigned long used_bytes ; +} +CC3_CONTEXT, *PCC3_CONTEXT ; + +typedef union _CC_CONTEXT +{ + /* Specific data for each method */ + CC1_CONTEXT c1 ; /* color table for a line and bitcolor array globally */ + CC2_CONTEXT c2 ; /* sort/reduce each line and globally */ + CC3_CONTEXT c3 ; /* sort/reduce each line and bitcolor array globally */ +} +CC_CONTEXT, *PCC_CONTEXT ; + +typedef struct _CC_INTERFACE +{ + LDV_STATUS (*Init)(CC_CONTEXT* vc, CNTCOL_DATA* data) ; + unsigned long (*CountColors)(CC_CONTEXT* vc, void* addr, unsigned long so_line) ; + unsigned long (*CountColorsEnd)(CC_CONTEXT* vc) ; + unsigned long (*Exit)(CC_CONTEXT* vc) ; +} +CC_INTERFACE, *PCC_INTERFACE ; + + +/* Helper function to call best progress routine depending on VAPI progress function availability */ +/* Return value: */ +/* 1: Cencel requested by user */ +/* 0: Progress update done */ +/* -1: Progress update not made to screen () */ +static short Prog(long current, long max) +{ + short status = 0 ; + + if ( Vapi->PrSetProgRange ) status = (short) Vapi->PrSetProgRange( current, max ) ; + else if ( max && ( ( current & 0x0F ) == 0 ) ) + { + short pc ; + + /* Call progress routine only once on 16 */ + pc = (short) ( ( 100L * ( current - max ) ) / max ) ; + if ( Vapi->PrSetProgEx ) status = Vapi->PrSetProgEx( pc ) ; + else Vapi->PrSetProg( pc ) ; + } + + return status ; +} + +/* Wrappers to abstract dynamic allocation routines */ +static void* localCalloc(unsigned long size) +{ + void* p ; + + if ( UseVAlloc ) p = Vapi->MeXcalloc( 1, size ) ; + else p = calloc( 1, size ) ; + + return p ; +} + +static void* localAlloc(unsigned long size) +{ + void* p ; + + if ( UseVAlloc ) p = Vapi->MeXalloc( size ) ; + else p = malloc( size ) ; + + return p ; +} + +static void localFree(void* p) +{ + if ( p ) + { + if ( UseVAlloc ) Vapi->MeXfree( p ) ; + else free( p ) ; + } +} + +LDV_INFOS* cdecl GetLDVCapabilities(VAPI* vapi) +{ + Vapi = vapi ; + VapiLog = Vapi && Vapi->LoDoLog ; + + return( &LdvInfos ) ; +} + +#pragma warn -par +LDV_STATUS cdecl PreRun(LDV_IMAGE* in, LDV_PARAMS* params, LDV_IMAGE* out) +{ + return ELDV_NOERROR ; +} +#pragma warn +par + +static FILE* CreateReportFile(CNTCOL_DATA* data) +{ + FILE* stream ; + char* filename ; + + if ( data->params->Param[1].str ) filename = data->params->Param[1].str ; + else filename = "cntcol.txt" ; + stream = fopen( filename, "wb" ) ; + if ( VapiLog ) + { + if ( stream ) Vapi->LoDoLog(LL_INFO, "cntcol.ldv will generate report file %s", filename) ; + else Vapi->LoDoLog(LL_ERROR, "cntcol.ldv failed to create report file %s", filename) ; + } + + if ( stream ) + { + fprintf( stream, "cntcol LDV running on image %dx%d, %d bitplanes:\r\n", data->in->Raster.fd_w, data->in->Raster.fd_h, data->in->Raster.fd_nplanes ) ; + fprintf( stream, "-------|--------------------\r\n" ) ; + fprintf( stream, "| Line | # unique colors |\r\n" ) ; + } + + return stream ; +} + +static unsigned long CountBits(unsigned char* pt, unsigned long nb_bytes) +{ + unsigned char* p = pt ; + unsigned long nb_bits = 0 ; + + while ( p < pt+nb_bytes ) + { + nb_bits += NbBitsIn[*p] ; + p++ ; + } + + return nb_bits ; +} + +static LDV_STATUS check_prog(short y, short ymax, unsigned long nb_unique_colors_on_line) +{ + short status ; + + status = Prog( y, ymax ) ; + if ( status == 0 ) /* GUI updated */ + { + if ( Vapi->PrSetText ) + { + char buf[128] ; + + sprintf( buf, "%lu unique colors on line %d", nb_unique_colors_on_line, y ) ; + Vapi->PrSetText( 1, buf ) ; + } + } + + return LDVPROG_CANCEL( status ) ? ELDV_CANCELLED:ELDV_NOERROR ; +} + +static short add_pixel_if_not_present16(unsigned short pixel, unsigned short* line_colors, unsigned long nb_colors) +{ + unsigned long i ; + + for ( i = 0; i < nb_colors; i++ ) + if ( line_colors[i] == pixel ) break ; + + if ( i == nb_colors ) { line_colors[nb_colors++] = pixel ; return 1 ; } + + return 0 ; +} + +static short add_pixel_if_not_present32(unsigned long pixel, unsigned long* line_colors, unsigned long nb_colors) +{ + unsigned long i ; + + for ( i = 0; i < nb_colors; i++ ) + if ( line_colors[i] == pixel ) break ; + + if ( i == nb_colors ) { line_colors[nb_colors++] = pixel ; return 1 ; } + + return 0 ; +} + +static unsigned long CC1(CC_CONTEXT* vc, void* addr, unsigned long so_line) +{ + CC1_CONTEXT* c = (CC1_CONTEXT*) &vc->c1 ; + unsigned char* line = (unsigned char*) addr ; + unsigned long offset, nb_colors = 0 ; + unsigned short bit ; + + if ( c->nplanes <= 8 ) /* Bit planes */ + { + unsigned char unique_colors_bits_line[256/8] ; /* 256 bits --> 256/8 bytes */ + unsigned short x ; + + memset( unique_colors_bits_line, 0, sizeof(unique_colors_bits_line) ) ; + Vapi->RaRaster2Ind( addr, c->so_indexes, c->nplanes, c->indexes ) ; + for ( x = 0; x < c->so_indexes; x++ ) + { + bit = c->indexes[x] & 0x07 ; + offset = c->indexes[x] >> 3 ; + c->unique_colors_bits[offset] |= (1 << bit) ; + unique_colors_bits_line[offset] |= (1 << bit) ; + } + nb_colors = CountBits( unique_colors_bits_line, sizeof(unique_colors_bits_line) ) ; + } + else if ( c->nplanes == 16 ) /* TC16 */ + { + unsigned short* p ; + unsigned short pixel ; + + for ( p = (unsigned short*)line; p < (unsigned short*) (line+so_line); p++ ) + { + pixel = *p ; + nb_colors += add_pixel_if_not_present16( pixel, c->line_colors, nb_colors ) ; + bit = pixel & 0x07 ; + offset = pixel >> 3 ; + c->unique_colors_bits[offset] |= (1 << bit) ; + } + } + else if ( c->nplanes == 32 ) /* TC32 */ + { + unsigned char* p ; + unsigned long pixel ; + + for ( p = line; p < line+so_line; p += 4 ) + { + pixel = p[0] ; + pixel |= ( (unsigned long)p[1] << 8 ) ; + pixel |= ( (unsigned long)p[2] << 16 ) ; + nb_colors += add_pixel_if_not_present32( pixel, c->line_colors, nb_colors ) ; + bit = (unsigned short)pixel & 0x07 ; + offset = pixel >> 3 ; + c->unique_colors_bits[offset] |= (1 << bit) ; + } + } + + return nb_colors ; +} + +static unsigned long CC1Exit(CC_CONTEXT* vc) +{ + CC1_CONTEXT* c = &vc->c1 ; + + localFree( c->unique_colors_bits ) ; + localFree( c->line_colors ) ; + localFree( c->indexes ) ; + + return c->used_bytes ; +} + +static unsigned long Getso_unique_colors_bits(MFDB* img) +{ + unsigned long so_unique_colors_bits ; + + if ( img->fd_nplanes > 8 ) + { + if ( img->fd_nplanes == 16 ) so_unique_colors_bits = 1UL << 16 ; + else so_unique_colors_bits = 1UL << 24 ; /* TC24 or TC32 */ + } + else so_unique_colors_bits = 256 ; + + so_unique_colors_bits >>= 3 ; /* #bits --> #bytes */ + if ( so_unique_colors_bits == 0 ) so_unique_colors_bits = 1 ; + + return so_unique_colors_bits ; +} + +static LDV_STATUS CC1Init(CC_CONTEXT* vc, CNTCOL_DATA* data) +{ + MFDB* img = &data->in->Raster ; + CC1_CONTEXT* c = &vc->c1 ; + + memset( c, 0, sizeof(*c) ) ; + c->nplanes = img->fd_nplanes ; + if ( img->fd_nplanes > 8 ) + { + /* True Color */ + /* Size of bit array for each unique color depending on the number of planes */ + c->so_line_colors = Vapi->RaGetImgSize( img->fd_w, 1, img->fd_nplanes ) ; + c->line_colors = localAlloc( c->so_line_colors ) ; + if ( c->line_colors == NULL ) return ELDV_NOTENOUGHMEMORY ; + } + else + { + /* Bit planes */ + c->so_indexes = 16*img->fd_wdwidth ; /* Max for 8 planes */ + c->indexes = (unsigned char*) localAlloc( c->so_indexes ) ; + c->so_line_colors = 0 ; + if ( c->indexes == NULL ) return ELDV_NOTENOUGHMEMORY ; + } + + c->so_unique_colors_bits = Getso_unique_colors_bits( img ) ; + c->unique_colors_bits = localCalloc( c->so_unique_colors_bits ) ; + if ( c->unique_colors_bits == NULL ) { CC1Exit( vc ) ; return ELDV_NOTENOUGHMEMORY ; } + + c->used_bytes = c->so_unique_colors_bits + c->so_line_colors + c->so_indexes ; + + return ELDV_NOERROR ; +} + +static unsigned long CC1End(CC_CONTEXT* vc) +{ + CC1_CONTEXT* c = &vc->c1 ; + + return CountBits( c->unique_colors_bits, c->so_unique_colors_bits ) ; +} + +static int cmp8(const void* a, const void* b) +{ + unsigned char* e1 = (unsigned char*) a ; + unsigned char* e2 = (unsigned char*) b ; + + return (int)( *e1 - *e2 ) ; +} + +static int cmp16(const void* a, const void* b) +{ + unsigned short* e1 = (unsigned short*) a ; + unsigned short* e2 = (unsigned short*) b ; + + return ( *e1 - *e2 ) ; +} + +static int cmp32(const void* a, const void* b) +{ + unsigned long* e1 = (unsigned long*) a ; + unsigned long* e2 = (unsigned long*) b ; + + if ( *e1 < *e2 ) return -1 ; + if ( *e1 == *e2 ) return 0 ; + return 1 ; +} + +static unsigned long reduce8(unsigned char* array, unsigned long nb_items) +{ + unsigned long nb_unique = 0 ; + unsigned char* pread ; + unsigned char* pwrite ; + unsigned char val ; + + pread = pwrite = array ; + while ( pread < array + nb_items ) + { + val = *pread++ ; + while ( (pread < array + nb_items) && (*pread == val) ) pread++ ; + nb_unique++ ; + *pwrite++ = val ; + } + + return nb_unique ; +} + +static unsigned long reduce16(unsigned short* array, unsigned long nb_items) +{ + unsigned long nb_unique = 0 ; + unsigned short* pread ; + unsigned short* pwrite ; + unsigned short val ; + + pread = pwrite = array ; + while ( pread < array + nb_items ) + { + val = *pread++ ; + while ( (pread < array + nb_items) && (*pread == val) ) pread++ ; + nb_unique++ ; + *pwrite++ = val ; + } + + return nb_unique ; +} + +static unsigned long reduce32(unsigned long* array, unsigned long nb_items) +{ + unsigned long nb_unique = 0 ; + unsigned long* pread ; + unsigned long* pwrite ; + unsigned long val ; + + pread = pwrite = array ; + while ( pread < array + nb_items ) + { + val = *pread++ ; + while ( (pread < array + nb_items) && (*pread == val) ) pread++ ; + nb_unique++ ; + *pwrite++ = val ; + } + + return nb_unique ; +} + +static unsigned long CC2(CC_CONTEXT* vc, void* addr, unsigned long so_line) +{ + CC2_CONTEXT* c = (CC2_CONTEXT*) &vc->c2 ; + unsigned long nb_colors = 0 ; + + if ( c->nplanes <= 8 ) /* Bit planes */ + { + Vapi->RaRaster2Ind( addr, c->so_indexes, c->nplanes, c->indexes ) ; + qsort( c->indexes, c->so_indexes, sizeof(unsigned char), cmp8 ) ; + nb_colors = reduce8( c->indexes, c->so_indexes ) ; + /* Add new line of unique colors to current image unique colors */ + memmove( c->img_sorted + c->nb_img_colors, c->indexes, nb_colors*sizeof(unsigned char) ) ; + c->nb_img_colors += nb_colors ; + } + else if ( c->nplanes == 16 ) /* TC16 */ + { + memmove( c->line_sorted, addr, so_line ) ; + qsort( c->line_sorted, so_line >> 1, sizeof(unsigned short), cmp16 ) ; + nb_colors = reduce16( (unsigned short*) c->line_sorted, so_line >> 1 ) ; + /* Add new line of unique colors to current image unique colors */ + memmove( c->img_sorted + 2*c->nb_img_colors, c->line_sorted, nb_colors*sizeof(unsigned short) ) ; + c->nb_img_colors += nb_colors ; + } + else if ( c->nplanes == 32 ) /* TC32 */ + { + memmove( c->line_sorted, addr, so_line ) ; + qsort( c->line_sorted, so_line >> 2, sizeof(unsigned long), cmp32 ) ; + nb_colors = reduce32( (unsigned long*) c->line_sorted, so_line >> 2 ) ; + /* Add new line of unique colors to current image unique colors */ + memmove( c->img_sorted + 4*c->nb_img_colors, c->line_sorted, nb_colors*sizeof(unsigned long) ) ; + c->nb_img_colors += nb_colors ; + } + + return nb_colors ; +} + +static unsigned long CC2Exit(CC_CONTEXT* vc) +{ + CC2_CONTEXT* c = &vc->c2 ; + + localFree( c->indexes ) ; + localFree( c->img_sorted ) ; + localFree( c->line_sorted ) ; + + return c->used_bytes ; +} + +static LDV_STATUS CC2Init(CC_CONTEXT* vc, CNTCOL_DATA* data) +{ + MFDB* img = &data->in->Raster ; + CC2_CONTEXT* c = &vc->c2 ; + short pixel_in_bytes ; + + memset( c, 0, sizeof(*c) ) ; + c->nplanes = img->fd_nplanes ; + + /* Use VISION's checked allocation routine for safety as VISION performs bounduary checks */ + /* Allocate memory to duplicate a line and sort it out */ + if ( img->fd_nplanes > 8 ) + { + c->line_sorted = (unsigned char*) localAlloc( Vapi->RaGetImgSize( img->fd_w, 1, img->fd_nplanes ) ) ; + if ( c->line_sorted == NULL ) return ELDV_NOTENOUGHMEMORY ; + if ( img->fd_nplanes == 16 ) pixel_in_bytes = 2 ; + else pixel_in_bytes = 4 ; + } + else + { + /* Bit planes: we need an index array */ + c->so_indexes = 16*img->fd_wdwidth ; /* Max for 8 planes */ + c->indexes = (unsigned char*) localAlloc( c->so_indexes ) ; + if ( c->indexes == NULL ) { CC2Exit( vc ) ; return ELDV_NOTENOUGHMEMORY ; } + pixel_in_bytes = 1 ; + } + + /* Allocate memory to store all colors used for all the image */ + /* There can't be more colors than pixels in the image, so let's go with that */ + c->nb_img_colors_max = (unsigned long)img->fd_w * (unsigned long)img->fd_h ; + c->img_sorted = (unsigned char*) localAlloc( c->nb_img_colors_max*pixel_in_bytes ) ; + if ( c->img_sorted == NULL ) { CC2Exit( vc ) ; return ELDV_NOTENOUGHMEMORY ; } + c->used_bytes = c->so_indexes + c->nb_img_colors_max*pixel_in_bytes ; + + return ELDV_NOERROR ; +} + +static unsigned long CC2End(CC_CONTEXT* vc) +{ + CC2_CONTEXT* c = &vc->c2 ; + + if ( c->nplanes <= 8 ) /* Bit planes */ + { + /* Sort the new array */ + qsort( c->img_sorted, c->nb_img_colors, sizeof(unsigned char), cmp8 ) ; + /* And reduce it */ + c->nb_img_colors = reduce8( c->img_sorted, c->nb_img_colors ) ; + } + else if ( c->nplanes == 16 ) /* TC16 */ + { + /* Sort the new array */ + qsort( c->img_sorted, c->nb_img_colors, sizeof(unsigned short), cmp16 ) ; + /* And reduce it */ + c->nb_img_colors = reduce16( (unsigned short*) c->img_sorted, c->nb_img_colors ) ; + } + else if ( c->nplanes == 32 ) /* TC32 */ + { + /* Sort the new array */ + qsort( c->img_sorted, c->nb_img_colors, sizeof(unsigned long), cmp32 ) ; + /* And reduce it */ + c->nb_img_colors = reduce32( (unsigned long*) c->img_sorted, c->nb_img_colors ) ; + } + + return c->nb_img_colors ; +} + +static unsigned long CC3Exit(CC_CONTEXT* vc) +{ + CC3_CONTEXT* c = &vc->c3 ; + + localFree( c->unique_colors_bits ) ; + localFree( c->line_sorted ) ; + localFree( c->indexes ) ; + + return c->used_bytes ; +} + +static LDV_STATUS CC3Init(CC_CONTEXT* vc, CNTCOL_DATA* data) +{ + MFDB* img = &data->in->Raster ; + CC3_CONTEXT* c = &vc->c3 ; + + memset( c, 0, sizeof(*c) ) ; + c->nplanes = img->fd_nplanes ; + if ( img->fd_nplanes > 8 ) + { + /* True Color */ + /* Size of bit array for each unique color depending on the number of planes */ + c->so_line_colors = Vapi->RaGetImgSize( img->fd_w, 1, img->fd_nplanes ) ; + /* Allocate memory for a line to get sorted */ + c->line_sorted = localAlloc( c->so_line_colors ) ; + if ( c->line_sorted == NULL ) return ELDV_NOTENOUGHMEMORY ; + } + else + { + /* Bit planes */ + c->so_indexes = 16*img->fd_wdwidth ; /* Max for 8 planes */ + c->indexes = (unsigned char*) localAlloc( c->so_indexes ) ; + if ( c->indexes == NULL ) return ELDV_NOTENOUGHMEMORY ; + } + + c->so_unique_colors_bits = Getso_unique_colors_bits( img ) ; + c->unique_colors_bits = localCalloc( c->so_unique_colors_bits ) ; + if ( c->unique_colors_bits == NULL ) { CC3Exit( vc ) ; return ELDV_NOTENOUGHMEMORY ; } + + c->used_bytes = c->so_line_colors + c->so_indexes + c->so_unique_colors_bits ; + + return ELDV_NOERROR ; +} + +static unsigned long CC3End(CC_CONTEXT* vc) +{ + CC3_CONTEXT* c = &vc->c3 ; + + return CountBits( c->unique_colors_bits, c->so_unique_colors_bits ) ; +} + +static unsigned long CC3(CC_CONTEXT* vc, void* addr, unsigned long so_line) +{ + CC3_CONTEXT* c = (CC3_CONTEXT*) &vc->c3 ; + unsigned char* line = (unsigned char*) addr ; + unsigned long offset, nb_colors = 0 ; + unsigned short bit ; + + if ( c->nplanes <= 8 ) /* Bit planes */ + { + unsigned short x ; + + /* Sort/reduce this line */ + Vapi->RaRaster2Ind( addr, c->so_indexes, c->nplanes, c->indexes ) ; + qsort( c->indexes, c->so_indexes, sizeof(unsigned char), cmp8 ) ; + nb_colors = reduce8( c->indexes, c->so_indexes ) ; + + /* Update global bitarray */ + for ( x = 0; x < c->so_indexes; x++ ) + { + bit = c->indexes[x] & 0x07 ; + offset = c->indexes[x] >> 3 ; + c->unique_colors_bits[offset] |= (1 << bit) ; + } + } + else if ( c->nplanes == 16 ) /* TC16 */ + { + unsigned short* p ; + unsigned short pixel ; + + /* Sort/reduce this line */ + memmove( c->line_sorted, addr, so_line ) ; + qsort( c->line_sorted, so_line >> 1, sizeof(unsigned short), cmp16 ) ; + nb_colors = reduce16( (unsigned short*) c->line_sorted, so_line >> 1 ) ; + + /* Update global bitarray */ + for ( p = (unsigned short*)line; p < (unsigned short*) (line+so_line); p++ ) + { + pixel = *p ; + bit = pixel & 0x07 ; + offset = pixel >> 3 ; + c->unique_colors_bits[offset] |= (1 << bit) ; + } + } + else if ( c->nplanes == 32 ) /* TC32 */ + { + unsigned char* p ; + unsigned long pixel ; + + /* Sort/reduce this line */ + memmove( c->line_sorted, addr, so_line ) ; + qsort( c->line_sorted, so_line >> 2, sizeof(unsigned long), cmp32 ) ; + nb_colors = reduce32( (unsigned long*) c->line_sorted, so_line >> 2 ) ; + + for ( p = line; p < line+so_line; p += 4 ) + { + pixel = p[0] ; + pixel |= ( (unsigned long)p[1] << 8 ) ; + pixel |= ( (unsigned long)p[2] << 16 ) ; + bit = (unsigned short)pixel & 0x07 ; + offset = pixel >> 3 ; + c->unique_colors_bits[offset] |= (1 << bit) ; + } + } + + return nb_colors ; +} + +static LDV_STATUS LDVOperation(CNTCOL_DATA* data) +{ + CC_INTERFACE cci ; + CC_CONTEXT c ; + LDV_STATUS status ; + MFDB* img = &data->in->Raster ; + unsigned char* line ; + unsigned long so_line ; + short method, l = 0 ; + unsigned long nb_unique_colors_on_line, used_ram ; + unsigned char* pt_after_img ; + + so_line = Vapi->RaGetImgSize( img->fd_w, 1, img->fd_nplanes ) ; + method = data->method ; + if ( method == 0 ) + { + /* Let me decide */ + if ( img->fd_nplanes <= 8 ) method = 1 ; /* qsort/reduce is too costy when there are not so many colors */ + else method = 3 ; + } + switch( method ) + { + case 1: cci.Init = CC1Init ; + cci.CountColors = CC1 ; + cci.CountColorsEnd = CC1End ; + cci.Exit = CC1Exit ; + break ; + + case 2: cci.Init = CC2Init ; + cci.CountColors = CC2 ; + cci.CountColorsEnd = CC2End ; + cci.Exit = CC2Exit ; + break ; + + default: cci.Init = CC3Init ; + cci.CountColors = CC3 ; + cci.CountColorsEnd = CC3End ; + cci.Exit = CC3Exit ; + method = 3 ; + break ; + } + if ( VapiLog ) + { + Vapi->LoDoLog(LL_DEBUG, "cntcol.ldv: Image is %dx%dx%d, wd_width=%d", img->fd_w, img->fd_h, img->fd_nplanes, img->fd_wdwidth ) ; + Vapi->LoDoLog(LL_DEBUG, "cntcol.ldv: using %s's memory allocation routines", UseVAlloc ? "VISION":"compiler" ) ; + Vapi->LoDoLog(LL_DEBUG, "cntcol.ldv: using method %d for counting colors", method ) ; + } + status = cci.Init( &c, data ) ; + if ( !LDV_SUCCESS( status ) ) return status ; + if ( VapiLog ) Vapi->LoDoLog(LL_DEBUG, "cntcol.ldv: init done" ) ; + + line = img->fd_addr ; + pt_after_img = line + (unsigned long)img->fd_h*so_line ; + while ( LDV_SUCCESS( status ) && (line < pt_after_img) ) + { + nb_unique_colors_on_line = cci.CountColors( &c, line, so_line ) ; + if ( nb_unique_colors_on_line > 0 ) + { + fprintf( data->report_file, "|%6d|%17lu|\r\n", l, nb_unique_colors_on_line ) ; + line += so_line ; + status = check_prog( l++, img->fd_h, nb_unique_colors_on_line ) ; + } + else status = ELDV_NOTENOUGHMEMORY ; + } + + if ( status == ELDV_CANCELLED ) fprintf( data->report_file, "---- Operation cancelled by user ----\r\n" ) ; + else if ( status == ELDV_NOTENOUGHMEMORY ) fprintf( data->report_file, "---- Not enough memory ----\r\n" ) ; + else + { + unsigned long nb_unique_colors ; + + if ( VapiLog ) Vapi->LoDoLog(LL_DEBUG, "cntcol.ldv: finishing counting..." ) ; + fprintf( data->report_file, "-------|------------------\r\n" ) ; + nb_unique_colors = cci.CountColorsEnd( &c ) ; + fprintf( data->report_file, "|Total |%17lu|\r\n", nb_unique_colors ) ; + if ( VapiLog ) Vapi->LoDoLog(LL_INFO, "cntcol.ldv: %lu unique colors on image", nb_unique_colors ) ; + if ( Vapi->Header.Version >= 0x0106 ) + { + /* LDV_PARAMS provides storage for returning */ + /* A free text to be displayed in VISION */ + if ( VapiLog ) Vapi->LoDoLog(LL_INFO, "cntcol.ldv: returning #unique colors to VISION" ) ; + sprintf( data->params->ldv_txt_out, "%lu unique colors", nb_unique_colors ) ; + } + } + + fprintf( data->report_file, "-------|------------------\r\n" ) ; + used_ram = cci.Exit( &c ) ; + fprintf( data->report_file, "RAM used: %lu KB\r\n", used_ram/1024UL ) ; + + return status ; +} + +#pragma warn -par +LDV_STATUS cdecl Run(LDV_IMAGE* in, LDV_PARAMS* params, LDV_IMAGE* out) +{ + CNTCOL_DATA data ; + LDV_STATUS status ; + clock_t t0 ; + + if ( (in->RasterFormat & CAPS) == 0 ) return ELDV_IMGFORMATMISMATCH ; + + UseVAlloc = Vapi && Vapi->MeXcalloc && Vapi->MeXfree ; + + data.in = in ; + data.params = params ; + data.method = data.params->Param[0].s ; + data.report_file = CreateReportFile( &data ) ; + if ( data.report_file == NULL ) return ELDV_GENERALFAILURE ; + + t0 = clock() ; + status = LDVOperation( &data ) ; + + fprintf( data.report_file, "Computation time: %lu ms\r\n", (1000L*(clock()-t0))/CLK_TCK ) ; + fclose( data.report_file ) ; + + return status ; +} +#pragma warn +par + +static void init_bit_counts(void) +{ + unsigned short i, mask ; + + for ( i = 0; i <= 255; i++ ) + for ( mask = 1; mask < 256; mask <<= 1 ) + if ( i & mask ) NbBitsIn[i]++ ; +} + +int main(void) +{ + ldg_init( Ldg ) ; + + init_bit_counts() ; + + return 0 ; +} diff --git a/tools/vision/ldv/src/cntcol/cntcol.ldv b/tools/vision/ldv/src/cntcol/cntcol.ldv new file mode 100644 index 0000000..646d4e1 Binary files /dev/null and b/tools/vision/ldv/src/cntcol/cntcol.ldv differ diff --git a/tools/vision/ldv/src/cntcol/cntcol.prj b/tools/vision/ldv/src/cntcol/cntcol.prj new file mode 100644 index 0000000..7d1b290 --- /dev/null +++ b/tools/vision/ldv/src/cntcol/cntcol.prj @@ -0,0 +1,12 @@ +CNTCOL.LDV +.C [ ] +.S [ ] +.L [ ] += +pcstart.o +CNTCOL.C +pcgemlib.lib +pcstdlib.lib +pctoslib.lib +..\..\ldg.lib +..\..\mt_aes.lib \ No newline at end of file diff --git a/tools/vision/ldv/src/dither/dither.c b/tools/vision/ldv/src/dither/dither.c new file mode 100644 index 0000000..ce86ce9 --- /dev/null +++ b/tools/vision/ldv/src/dither/dither.c @@ -0,0 +1,145 @@ +/* + * + * + * Version PureC / Gcc + */ + +#define PCGEMLIB 1 /* mettre 1 si les utilisateurs de Pure C + * utilise les librairies GEM Pure C */ + +/* Fichiers headers */ + +#include +#if PCGEMLIB +#include +#include +#else +#include +#include +#endif + +#include +#include +#include "..\..\ldg.h" +#include "..\..\vapi.h" +#include "..\..\ldv.h" +#include "..\..\mt_aes.h" + +/* Prototypages */ +LDV_INFOS* cdecl GetLDVCapabilities(VAPI *vapi) ; +LDV_STATUS cdecl PreRun(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) ; +LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) ; +LDV_STATUS cdecl Preview(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) ; + +void OnClose(void) ; + +/* Variables globales */ +PROC Proc[] = { + "GetLDVCapabilities", "LDV capabilties", (void *)GetLDVCapabilities, + "PreRun", "Before Run", (void *)PreRun, + "Run", "LDV routine", (void *)Run, + "Preview", "Preview", (void *)Preview, + } ; + +char Info[] = "LDV"; + +LDGLIB Ldg[] = { + 0x0100, /* version de la lib, recommand‚ */ + 4, /* nombre de fonction dans la lib */ + Proc, /* Pointeurs vers nos fonctions */ + Info, /* Information sur la lib */ + 0x0, /* Flags de la lib, obligatoire */ + NULL, + }; + +#define BP_CAPS (LDVF_ATARIFORMAT | LDVF_SUPPORTPREVIEW | LDVF_REALTIMEPARAMS | LDVF_NOSELECTION | LDVF_AFFECTPALETTE) +#define TC_CAPS (LDVF_ATARIFORMAT | LDVF_SUPPORTPREVIEW | LDVF_REALTIMEPARAMS | LDVF_NOSELECTION | LDVF_AFFECTPALETTE) + +LDV_INFOS LdvInfos = { + (short) sizeof(LDV_INFOS), /* Taille de cette structure */ + TLDV_MODIFYIMG, /* Type du LDV */ + "Jean Lusetti", /* Auteurs */ + { + { 1, 1, BP_CAPS }, /* Capacites pour 1 plan */ + { 4, 1, BP_CAPS }, /* Capacites pour 4 plans */ + { 8, 1, BP_CAPS }, /* Capacites pour 8 plans */ + { 16, 1, TC_CAPS }, /* Capacites pour 16 plans */ + { 32, 1, TC_CAPS }, /* Capacites pour 32 plans */ + { 0, 0, 0UL } /* Fin de la liste des capacites */ + }, + } ; + +VAPI* Vapi = NULL ; + +/* Petite macro de verification pour VAPI */ +#define CHECK_VAPI(vapi) if ( (vapi == NULL) || (vapi->Header.Version < 0x0109) ) return ELDV_BADVAPIVERSION ; + + +/* + * Fonctions de la librairie + */ + +LDV_INFOS* cdecl GetLDVCapabilities(VAPI* vapi) +{ + Vapi = vapi ; + + return( &LdvInfos ) ; +} + +#pragma warn -par +LDV_STATUS cdecl PreRun(LDV_IMAGE* in, LDV_PARAMS* params, LDV_IMAGE* out) +{ + return ELDV_NOERROR ; +} + +LDV_STATUS cdecl Run(LDV_IMAGE* in, LDV_PARAMS* params, LDV_IMAGE* out) +{ + LDV_STATUS status ; + short method, param, out_planes ; + + CHECK_VAPI( Vapi ) ; + + method = params->Param[0].s ; + param = params->Param[1].s ; + out_planes = params->Param[2].s ; + if ( out_planes <= 0 ) + { + SCREEN_INFO sinfo ; + + Vapi->CoGetScreenInfo( &sinfo ) ; + out_planes = sinfo.NPlanes ; + } + if ( (out_planes != 1) && (out_planes != 4) && (out_planes != 8) && (out_planes != 16) && (out_planes != 32) ) + { + if ( out_planes > 32 ) out_planes = 32 ; + else if ( out_planes > 14 ) out_planes = 16 ; /* TC15 or TC16 */ + else if ( out_planes > 8 ) out_planes = 8 ; + else if ( out_planes > 4 ) out_planes = 4 ; + else out_planes = 1 ; + if ( Vapi->LoDoLog ) Vapi->LoDoLog( LL_INFO, "LDVDither: nplanes %d not supported, changed to %d", params->Param[2].s, out_planes ) ; + } + out->Raster.fd_nplanes = out_planes ; + + status = (LDV_STATUS) Vapi->ImDither( method, param, in, out ) ; + if ( status != 0 ) + { + if ( Vapi->LoDoLog ) Vapi->LoDoLog( LL_WARNING, "LDVDither: ImDither returned %d", status ) ; + status = ELDV_GENERALFAILURE ; + } + + return status ; +} + +LDV_STATUS cdecl Preview(LDV_IMAGE* in, LDV_PARAMS* params, LDV_IMAGE* out) +{ + return( Run( in, params, out ) ) ; +} +#pragma warn +par + + +int main(void) +{ + ldg_init( Ldg ) ; + + return 0 ; +} diff --git a/tools/vision/ldv/src/dither/dither.ldv b/tools/vision/ldv/src/dither/dither.ldv new file mode 100644 index 0000000..b440a3c Binary files /dev/null and b/tools/vision/ldv/src/dither/dither.ldv differ diff --git a/tools/vision/ldv/src/dither/dither.prj b/tools/vision/ldv/src/dither/dither.prj new file mode 100644 index 0000000..19c20e4 --- /dev/null +++ b/tools/vision/ldv/src/dither/dither.prj @@ -0,0 +1,13 @@ +DITHER.LDV +.C [ ] +.S [ ] +.L [ ] += +pcstart.o +DITHER.C +pcgemlib.lib +pcstdlib.lib +pctoslib.lib +pcfltlib.lib +..\..\ldg.lib +..\..\mt_aes.lib \ No newline at end of file diff --git a/tools/vision/ldv/src/dither/testplan.xlsx b/tools/vision/ldv/src/dither/testplan.xlsx new file mode 100644 index 0000000..9c1af57 Binary files /dev/null and b/tools/vision/ldv/src/dither/testplan.xlsx differ diff --git a/tools/vision/LDV/SRC/gamma/GAMMA.C b/tools/vision/ldv/src/gamma/gamma.c similarity index 93% rename from tools/vision/LDV/SRC/gamma/GAMMA.C rename to tools/vision/ldv/src/gamma/gamma.c index af21a2a..f5c2265 100644 --- a/tools/vision/LDV/SRC/gamma/GAMMA.C +++ b/tools/vision/ldv/src/gamma/gamma.c @@ -42,7 +42,7 @@ PROC Proc[] = { char Info[] = "LDV"; LDGLIB Ldg[] = { - 0x0100, /* version de la lib, recommand‚ */ + 0x0101, /* version de la lib, recommand‚ */ 4, /* nombre de fonction dans la lib */ Proc, /* Pointeurs vers nos fonctions */ Info, /* Information sur la lib */ @@ -94,7 +94,7 @@ LDV_INFOS * cdecl GetLDVCapabilities(VAPI *vapi) #pragma warn -par LDV_STATUS cdecl PreRun(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) { - return( ELDV_NOERROR ) ; + return ELDV_NOERROR ; } double GammaFunc(double val, double val_max, double gamma) @@ -133,9 +133,9 @@ LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) bgamma = params->Param[3].s / 100.0 ; if ( in->Raster.fd_nplanes <= 8 ) { - if ( vdi_palette == NULL ) return( ELDV_GENERALFAILURE ) ; + if ( vdi_palette == NULL ) return ELDV_GENERALFAILURE ; vdi_epal = vdi_palette->Pal ; - if ( vdi_epal == NULL ) return( ELDV_GENERALFAILURE ) ; + if ( vdi_epal == NULL ) return ELDV_GENERALFAILURE ; for ( vdi_index = 0; vdi_index < vdi_palette->NbColors; vdi_index++, vdi_epal++ ) { vdi_epal->Red = (short) ( 0.5 + GammaFunc( vdi_epal->Red, 1000.0, rgamma ) ) ; @@ -150,7 +150,7 @@ LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) REMAP_COLORS rc ; MFDB *img = &in->Raster ; long *pt_line32, nb_pts_in_line ; - short *pt_line16, y, pc, is_15bits, cancel=0 ; + short *pt_line16, y, pc, is_15bits ; unsigned short nb_bits_red=8, nb_bits_green=8, nb_bits_blue=8 ; /* Sur 32 bits par defaut */ CHECK_VAPI(Vapi) ; diff --git a/tools/vision/ldv/src/gamma/gamma.ldv b/tools/vision/ldv/src/gamma/gamma.ldv new file mode 100644 index 0000000..c43a69f Binary files /dev/null and b/tools/vision/ldv/src/gamma/gamma.ldv differ diff --git a/tools/vision/LDV/SRC/gamma/GAMMA.PRJ b/tools/vision/ldv/src/gamma/gamma.prj similarity index 77% rename from tools/vision/LDV/SRC/gamma/GAMMA.PRJ rename to tools/vision/ldv/src/gamma/gamma.prj index 673407f..c883b92 100644 --- a/tools/vision/LDV/SRC/gamma/GAMMA.PRJ +++ b/tools/vision/ldv/src/gamma/gamma.prj @@ -1,6 +1,7 @@ GAMMA.LDV -;.C[-Y- -G+] -;.L[-Y-] +.C [ ] +.S [ ] +.L [ ] = pcstart.o GAMMA.C diff --git a/tools/vision/ldv/src/genimg/genimg.c b/tools/vision/ldv/src/genimg/genimg.c new file mode 100644 index 0000000..28f6034 --- /dev/null +++ b/tools/vision/ldv/src/genimg/genimg.c @@ -0,0 +1,173 @@ +#define PCGEMLIB 1 /* Set to 1 if PureC is used */ + +#if PCGEMLIB +#include +#include +#else +#include +#include +#endif + +#include +#include +#include +#include "..\..\ldg.h" +#include "..\..\vapi.h" +#include "..\..\ldv.h" + +/* Prototypes */ +LDV_INFOS* cdecl GetLDVCapabilities(VAPI* vapi) ; +LDV_STATUS cdecl PreRun(LDV_IMAGE* in, LDV_PARAMS* params, LDV_IMAGE* out) ; +LDV_STATUS cdecl Run(LDV_IMAGE* in, LDV_PARAMS* params, LDV_IMAGE* out) ; +LDV_STATUS cdecl Preview(LDV_IMAGE* in, LDV_PARAMS* params, LDV_IMAGE* out) ; + +/* Variables globales */ +PROC Proc[] = { + "GetLDVCapabilities", "LDV capabilities", (void *)GetLDVCapabilities, + "PreRun", "Run initialization", (void *)PreRun, + "Run", "LDV operation", (void *)Run, + "Preview", "Pre-Visu", (void *)Preview, + } ; + +char Info[] = "LDV" ; + +LDGLIB Ldg[] = { + 0x0100, /* Lib version */ + 4, /* Number of functions in lib */ + Proc, /* Pointers to our functions */ + Info, /* Lib information */ + 0x0, /* Lib flags */ + NULL, /* On exit, free VDI handle (unused) */ + } ; + +#define CAPS (LDVF_ATARIFORMAT | LDVF_SUPPORTPREVIEW | LDVF_OPINPLACE | LDVF_NOSELECTION) + +LDV_INFOS LdvInfos = { + (short) sizeof(LDV_INFOS), /* size of this structure */ + TLDV_MODIFYIMG, /* LDV Type */ + "Jean Lusetti", /* Authors */ + { + { 1, 1, CAPS }, /* 1 bitplane capabilities */ + { 2, 2, CAPS }, /* 2 bitplane capabilities */ + { 4, 4, CAPS }, /* 4 bitplane capabilities */ + { 8, 8, CAPS }, /* 8 bitplane capabilities */ + { 16, 16, CAPS }, /* 16 bitplane capabilities */ +/* Not yet { 24, 24, CAPS }, */ + { 32, 32, CAPS }, /* 32 bitplane capabilities */ + { 0, 0, 0UL } /* End of this list */ + }, + } ; + +VAPI* Vapi = NULL ; + + +LDV_INFOS* cdecl GetLDVCapabilities(VAPI* vapi) +{ + Vapi = vapi ; + + return( &LdvInfos ) ; +} + +static LDV_STATUS GenMaxColors(MFDB* img) +{ + unsigned long nb = ((unsigned long)img->fd_wdwidth << 4) * (unsigned long) img->fd_h ; + unsigned long n ; + + if ( img->fd_nplanes <= 8 ) + { + MFDB tmp ; + unsigned char* pt_img ; + unsigned char* pt_after_img ; + unsigned char indexes[256] ; /* Array of indexes: 256 as max for 8 bitplanes */ + short bitplanes[128] ; /* Transformation into bitplanes Atari */ + unsigned long so_line ; + unsigned short ncol = 1 << img->fd_nplanes ; + + memset( &tmp, 0, sizeof(MFDB) ) ; + tmp.fd_addr = bitplanes ; tmp.fd_nplanes = img->fd_nplanes ; + tmp.fd_w = ncol ; tmp.fd_h = 1 ; + for ( n = 0; n < 256; n++ ) indexes[n] = (unsigned char) n ; + Vapi->RaInd2RasterInit( &tmp, 256 ) ; + Vapi->RaInd2Raster( indexes, 256 ) ; + /* Fill in img MFDB with repetition of bitplanes buffer */ + pt_img = img->fd_addr ; + so_line = 16UL*img->fd_wdwidth ; + so_line *= (unsigned long)img->fd_nplanes ; + so_line >>= 3 ; /* Size of a line in bytes */ + pt_after_img = pt_img + so_line * (unsigned long)img->fd_h ; + Vapi->LoDoLog(LL_DEBUG, "genimg.ldv: pt_after_img=%p", pt_after_img ) ; + while ( pt_img < pt_after_img-256 ) + { + Vapi->LoDoLog(LL_DEBUG, "genimg.ldv: pt_img=%p", pt_img ) ; + memcpy( pt_img, bitplanes, 256 ) ; + pt_img += 256 ; + } + } + else if ( img->fd_nplanes == 16 ) + { + unsigned short* pt = img->fd_addr ; + unsigned short inc = (unsigned short) (nb / (1UL << 16)) ; + unsigned short val = 0 ; + + if ( inc < 1 ) inc = 1 ; + + for ( n = 0; n < nb; n++ ) + { + *pt++ = val ; + val += inc ; + } + } + else if ( img->fd_nplanes == 32 ) + { + unsigned long* pt = img->fd_addr ; + unsigned long inc = nb / (1UL << 24) ; + unsigned long val = 0 ; + + if ( inc < 1 ) inc = 1 ; + inc <<= 8 ; + + for ( n = 0; n < nb; n++ ) + { + *pt++ = val ; + val += inc ; + } + } + + return ELDV_NOERROR ; +} + +#pragma warn -par +LDV_STATUS cdecl PreRun(LDV_IMAGE* in, LDV_PARAMS* params, LDV_IMAGE* out) +{ + return ELDV_NOERROR ; +} + +LDV_STATUS cdecl Run(LDV_IMAGE* in, LDV_PARAMS* params, LDV_IMAGE* out) +{ + LDV_STATUS status ; + + switch( params->Param[0].s ) + { + case 1: /* Generate an image with as many colors as possible */ + status = GenMaxColors( &in->Raster ) ; + break ; + + default: status = ELDV_INVALIDPARAMETER ; + break ; + } + + return status ; +} +#pragma warn +par + +LDV_STATUS cdecl Preview(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) +{ + return( Run( in, params, out ) ) ; +} + +int main(void) +{ + ldg_init( Ldg ) ; + + return 0 ; +} diff --git a/tools/vision/ldv/src/genimg/genimg.ldv b/tools/vision/ldv/src/genimg/genimg.ldv new file mode 100644 index 0000000..db2f06e Binary files /dev/null and b/tools/vision/ldv/src/genimg/genimg.ldv differ diff --git a/tools/vision/ldv/src/genimg/genimg.prj b/tools/vision/ldv/src/genimg/genimg.prj new file mode 100644 index 0000000..7a3e792 --- /dev/null +++ b/tools/vision/ldv/src/genimg/genimg.prj @@ -0,0 +1,12 @@ +GENIMG.LDV +.C [ ] +.S [ ] +.L [ ] += +pcstart.o +GENIMG.C +pcgemlib.lib +pcstdlib.lib +pctoslib.lib +..\..\ldg.lib +..\..\mt_aes.lib \ No newline at end of file diff --git a/tools/vision/LDV/SRC/INVERT/INVERT.C b/tools/vision/ldv/src/invert/invert.c similarity index 95% rename from tools/vision/LDV/SRC/INVERT/INVERT.C rename to tools/vision/ldv/src/invert/invert.c index 0890e9a..321ca66 100644 --- a/tools/vision/LDV/SRC/INVERT/INVERT.C +++ b/tools/vision/ldv/src/invert/invert.c @@ -42,7 +42,7 @@ PROC Proc[] = { char Info[] = "LDV"; LDGLIB Ldg[] = { - 0x0100, /* version de la lib, recommand‚ */ + 0x0101, /* version de la lib, recommand‚ */ 4, /* nombre de fonction dans la lib */ Proc, /* Pointeurs vers nos fonctions */ Info, /* Information sur la lib */ diff --git a/tools/vision/ldv/src/invert/invert.ldv b/tools/vision/ldv/src/invert/invert.ldv new file mode 100644 index 0000000..911f6be Binary files /dev/null and b/tools/vision/ldv/src/invert/invert.ldv differ diff --git a/tools/vision/LDV/SRC/INVERT/INVERT.PRJ b/tools/vision/ldv/src/invert/invert.prj similarity index 75% rename from tools/vision/LDV/SRC/INVERT/INVERT.PRJ rename to tools/vision/ldv/src/invert/invert.prj index 46db0fd..58215c1 100644 --- a/tools/vision/LDV/SRC/INVERT/INVERT.PRJ +++ b/tools/vision/ldv/src/invert/invert.prj @@ -1,6 +1,7 @@ invert.ldv -;.C[-Y- -G+] -;.L[-Y-] +.C [ ] +.S [ ] +.L [ ] = pcstart.o invert.c diff --git a/tools/vision/LDV/SRC/light/LIGHT.C b/tools/vision/ldv/src/light/light.c similarity index 95% rename from tools/vision/LDV/SRC/light/LIGHT.C rename to tools/vision/ldv/src/light/light.c index 739c791..2545538 100644 --- a/tools/vision/LDV/SRC/light/LIGHT.C +++ b/tools/vision/ldv/src/light/light.c @@ -41,7 +41,7 @@ PROC Proc[] = { char Info[] = "LDV"; LDGLIB Ldg[] = { - 0x0101, /* version de la lib, recommand‚ */ + 0x0102, /* version de la lib, recommand‚ */ 4, /* nombre de fonction dans la lib */ Proc, /* Pointeurs vers nos fonctions */ Info, /* Information sur la lib */ @@ -151,7 +151,7 @@ LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) REMAP_COLORS rc ; MFDB *img = &in->Raster ; long *pt_line32, nb_pts_in_line ; - short *pt_line16, y, pc, is_15bits, cancel=0 ; + short *pt_line16, y, pc, is_15bits ; unsigned short nb_bits_red=8, nb_bits_green=8, nb_bits_blue=8 ; /* Sur 32 bits par defaut */ CHECK_VAPI(Vapi) ; diff --git a/tools/vision/ldv/src/light/light.ldv b/tools/vision/ldv/src/light/light.ldv new file mode 100644 index 0000000..ef811a2 Binary files /dev/null and b/tools/vision/ldv/src/light/light.ldv differ diff --git a/tools/vision/LDV/SRC/light/LIGHT.PRJ b/tools/vision/ldv/src/light/light.prj similarity index 77% rename from tools/vision/LDV/SRC/light/LIGHT.PRJ rename to tools/vision/ldv/src/light/light.prj index bcee124..4b77118 100644 --- a/tools/vision/LDV/SRC/light/LIGHT.PRJ +++ b/tools/vision/ldv/src/light/light.prj @@ -1,6 +1,7 @@ LIGHT.LDV -;.C[-Y- -G+] -;.L[-Y-] +.C [ ] +.S [ ] +.L [ ] = pcstart.o LIGHT.C diff --git a/tools/vision/ldv/src/optimg/optimg.c b/tools/vision/ldv/src/optimg/optimg.c new file mode 100644 index 0000000..96c04d9 --- /dev/null +++ b/tools/vision/ldv/src/optimg/optimg.c @@ -0,0 +1,552 @@ +/* + * + * + * Version PureC / Gcc + */ + +#define PCGEMLIB 1 /* mettre 1 si les utilisateurs de Pure C + * utilise les librairies GEM Pure C */ + +/* Fichiers headers */ + +#include +#include +#if PCGEMLIB +#include +#include +#else +#include +#include +#endif + +#include +#include +#include "..\..\ldg.h" +#include "..\..\vapi.h" +#include "..\..\ldv.h" +#include "..\..\mt_aes.h" + +/* Prototypages */ +LDV_INFOS* cdecl GetLDVCapabilities(VAPI *vapi) ; +LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) ; + +typedef struct _ANALYSIS_DATA +{ + /* Internal data during analysis */ + unsigned char* pixel ; /* Pixel under analysis */ + long add_pixel ; /* Offset to next pixel to analyze */ + + /* For indexes */ + short* pt_img ; + + long npixels_sofar ; + long npixels_add ; + long npixels_total ; +} +ANALYSIS_DATA, *PANALYSIS_DATA ; + +/* This is our structure to held image data */ +/* And analyze outcome */ +typedef struct _IMG_REPORT +{ + /* Inputs */ + LDV_IMAGE* in ; + char* profile ; + char save_options[6][32] ; /* 0: 1 plane, 1: 4 planes, 2:8 planes, 3:16 planes, 4:24 planes, 5:32 planes */ + unsigned char limit_black ; + unsigned char limit_white ; + unsigned char diff_grey ; + unsigned char enforce_smaller ; + short enforce_dither ; + short dither_method ; + short dither_outplanes ; + short dither_param ; + + ANALYSIS_DATA d ; + + /* Outcome */ + char is_dualtone ; + char is_grey ; + long ncolors ; +} +IMG_REPORT, *PIMG_REPORT ; + +/* Variables globales */ +PROC Proc[] = { + "GetLDVCapabilities", "LDV capabilties", (void *)GetLDVCapabilities, +/* No preRun "PreRun", "Before Run", (void *)PreRun, */ + "Run", "LDV routine", (void *)Run, +/* No preview "Preview", "Preview", (void *)Preview, */ + } ; + +char Info[] = "LDV"; + +LDGLIB Ldg[] = { + 0x0102, /* version de la lib, recommand‚ */ + 2, /* nombre de fonction dans la lib */ + Proc, /* Pointeurs vers nos fonctions */ + Info, /* Information sur la lib */ + 0x0, /* Flags de la lib, obligatoire */ + NULL, + }; + +#define CAPS (LDVF_ATARIFORMAT | LDVF_OPINPLACE | LDVF_SUPPORTPROG | LDVF_SUPPORTCANCEL | LDVF_NOSELECTION | LDVF_NOCHANGE) + +/* Note that for this LDV, no matter what is returned as #nplanes for output */ +/* As no LDV_IMAGE is returned, a file is generated */ +LDV_INFOS LdvInfos = { + (short) sizeof(LDV_INFOS), /* Taille de cette structure */ + TLDV_MODIFYIMG, /* Type du LDV */ + "Jean Lusetti", /* Auteurs */ + { + { 1, 1, CAPS }, /* Capacites pour 1 plan */ + { 4, 1, CAPS }, /* Capacites pour 4 plans */ + { 8, 1, CAPS }, /* Capacites pour 8 plans */ + { 16, 1, CAPS }, /* Capacites pour 16 plans */ + { 32, 1, CAPS }, /* Capacites pour 32 plans */ + { 0, 0, 0UL } /* Fin de la liste des capacites */ + }, + } ; + +VAPI* Vapi = NULL ; + +/* VAPI macro check */ +#define CHECK_VAPI(vapi) if ( (vapi == NULL) || (vapi->Header.Version < 0x0109) ) return ELDV_BADVAPIVERSION ; + +unsigned char u5bto8b[32] ; +unsigned char u6bto8b[64] ; + +/* + * Fonctions de la librairie + */ + +LDV_INFOS* cdecl GetLDVCapabilities(VAPI* vapi) +{ + Vapi = vapi ; + + return( &LdvInfos ) ; +} + +static void GetDefaultSaveOptions(IMG_REPORT* img_report) +{ + strcpy( &img_report->save_options[0][0], "fmt=TIF;compression=lzw" ) ; /* 1 Plane */ + strcpy( &img_report->save_options[1][0], "fmt=TIF;compression=lzw" ) ; /* 4 Planes */ + strcpy( &img_report->save_options[2][0], "fmt=TIF;compression=lzw" ) ; /* 8 Planes */ + strcpy( &img_report->save_options[3][0], "fmt=JPG;quality=90" ) ; /* 16 Planes */ + strcpy( &img_report->save_options[4][0], "fmt=JPG;quality=90" ) ; /* 24 Planes */ + strcpy( &img_report->save_options[5][0], "fmt=JPG;quality=90" ) ; /* 32 Planes */ +} + +static short LoadProfile(IMG_REPORT* img_report) +{ + long profile_found = 0 ; + short i ; + char* path_ldv ; + char* language ; + char* keys[] = { "1", "4", "8", "16", "24", "32" } ; + + if ( img_report->profile == NULL ) return -1 ; + + path_ldv = Vapi->CoGetLDVPath() ; + language = Vapi->CoGetCurrentLanguage() ; + if ( path_ldv && language ) + { + long found ; + char filename[256] ; + char buffer[128] ; + + sprintf( filename, "%s\\%s\\OPTIMG.INI", path_ldv, language ) ; + Vapi->LoDoLog(LL_INFO,"optimg.ldv: Looking into %s to find profile %s", filename, img_report->profile) ; + for ( i = 0; i < ARRAY_SIZE(keys); i++ ) + if ( !profile_found ) profile_found = Vapi->InGetKeyFromFile( filename, img_report->profile, keys[i], &img_report->save_options[i][0] ) ; + if ( !profile_found ) + { + sprintf( filename, "%s\\OPTIMG.INI", path_ldv ) ; + Vapi->LoDoLog(LL_INFO,"optimg.ldv: Looking into %s to find profile %s", filename, img_report->profile) ; + Vapi->LoDoLog(LL_INFO,"optimg.ldv: Looking into non language specific %s to find profile %s ...", filename, img_report->profile) ; + for ( i = 0; i < ARRAY_SIZE(keys); i++ ) + profile_found = Vapi->InGetKeyFromFile( filename, img_report->profile, keys[i], &img_report->save_options[i][0] ) ; + } + found = Vapi->InGetKeyFromFile( filename, img_report->profile, "limit_black", buffer ) ; + if ( found ) img_report->limit_black = (unsigned char) atoi( buffer ) ; + else img_report->limit_black = 0 ; + found = Vapi->InGetKeyFromFile( filename, img_report->profile, "limit_white", buffer ) ; + if ( found ) img_report->limit_white = (unsigned char) atoi( buffer ) ; + else img_report->limit_white = 255 ; + found = Vapi->InGetKeyFromFile( filename, img_report->profile, "diff_grey", buffer ) ; + if ( found ) img_report->diff_grey = (unsigned char) atoi( buffer ) ; + else img_report->diff_grey = 0 ; + found = Vapi->InGetKeyFromFile( filename, img_report->profile, "enforce_smaller", buffer ) ; + if ( found ) img_report->enforce_smaller = (unsigned char) atoi( buffer ) ; + else img_report->enforce_smaller = 0 ; + + /* Keys to enforce dither method */ + found = Vapi->InGetKeyFromFile( filename, img_report->profile, "enforce_dither", buffer ) ; + if ( found ) img_report->enforce_dither = (short) atoi( buffer ) ; + else img_report->enforce_dither = 0 ; + if ( img_report->enforce_dither ) + { + found = Vapi->InGetKeyFromFile( filename, img_report->profile, "dither_method", buffer ) ; + if ( found ) img_report->dither_method = (short) atoi( buffer ) ; + else img_report->dither_method = 0 ; + found = Vapi->InGetKeyFromFile( filename, img_report->profile, "dither_outplanes", buffer ) ; + if ( found ) img_report->dither_outplanes = (short) atoi( buffer ) ; + else img_report->dither_outplanes = 0 ; + found = Vapi->InGetKeyFromFile( filename, img_report->profile, "dither_param", buffer ) ; + if ( found ) img_report->dither_param = (short) atoi( buffer ) ; + else img_report->dither_param = 0 ; + } + } + else Vapi->LoDoLog(LL_WARNING,"optimg.ldv: Can't access LDV (%s) or language path (%s)!", path_ldv, language) ; + + return !profile_found ; /* 0 if found */ +} + +static long md_grey(long abs_diff, long max_diff) +{ + if ( abs_diff > max_diff ) return abs_diff ; + else return max_diff ; +} + +static void fast_isgrey(IMG_REPORT* img_report) +{ + /* Quick check to see if all pixels in diagonal are grey */ + MFDB* in = &img_report->in->Raster ; + long add_pixel = (in->fd_nplanes >> 3) ; + unsigned char* pixel = in->fd_addr ; + unsigned short pix16, diff_grey = img_report->diff_grey ; + short h ; + unsigned char r, g, b ; + + add_pixel += add_pixel*16L*(long)in->fd_wdwidth ; /* Offset to next pixel in diagonal */ + for( h = 0 ; img_report->is_grey && (h < in->fd_h-1); h++, pixel += add_pixel ) + { + if ( in->fd_nplanes == 16 ) + { + pix16 = *pixel ; /* RRRRRGGGGGGBBBBB*/ + r = u5bto8b[pix16 >> 11] ; /* Value on 5 bits remapped to 8 bits */ + g = u6bto8b[(pix16 >> 5) & 0x1F] ; /* Value on 6 bits remapped to 8 bits */ + b = u5bto8b[pix16 & 0x1F] ; /* Value on 5 bits remapped to 8 bits */ + } + else + { + r = pixel[0] ; + g = pixel[1] ; + b = pixel[2] ; + } + if ( abs( r-g ) > diff_grey ) img_report->is_grey = 0 ; + else if ( abs( r-b ) > diff_grey ) img_report->is_grey = 0 ; + else if ( abs( g-b ) > diff_grey ) img_report->is_grey = 0 ; + } + + if ( !img_report->is_grey ) + { + if ( in->fd_nplanes == 16 ) Vapi->LoDoLog(LL_INFO,"optimg.ldv: fast_isgrey, not grey: %d %d %d (%X)", (short)r, (short)g, (short)b, pix16) ; + else Vapi->LoDoLog(LL_INFO,"optimg.ldv: fast_isgrey, not grey: %d %d %d", (short)r, (short)g, (short)b) ; + } +} + +static short AnalyzeFromVISION(IMG_REPORT* img_report) +{ + HISTO histo ; + short status ; + + Vapi->LoDoLog(LL_INFO,"optimg.ldv: Requesting VISION to compute histogram...") ; + Vapi->PrSetText( 1, "Requesting histograms to VISION..." ) ; + histo.norm = 256 ; /* Normalize stats to 0...256 scale */ + status = Vapi->ImComputeHistogram( img_report->in, &histo ) ; + Vapi->LoDoLog(LL_INFO,"optimg.ldv: histogram done with status %d", status) ; + if ( status == 0 ) + { + long max_diff_grey = 0 ; + long r, g, b, ref_diff_grey ; + short i, grey1 = 0 ; + + ref_diff_grey = img_report->diff_grey ; + for ( i = 0; img_report->is_grey && (i < HISTO_SIZE); i++ ) + { + r = histo.red[i] ; + g = histo.green[i] ; + b = histo.blue[i] ; + max_diff_grey = md_grey( labs( r-g ), max_diff_grey ) ; + max_diff_grey = md_grey( labs( r-b ), max_diff_grey ) ; + max_diff_grey = md_grey( labs( g-b ), max_diff_grey ) ; + if ( max_diff_grey > ref_diff_grey ) img_report->is_grey = 0 ; + } + Vapi->LoDoLog(LL_INFO,"optimg.ldv: max difference grey=%ld", max_diff_grey) ; + + /* As histogram will report "perfect grey" if image has colors fully aligned (i.e. full 16M picture), let's make a fast check on grey levels */ + if ( img_report->is_grey && (img_report->in->Raster.fd_nplanes > 8) ) + { + fast_isgrey( img_report ) ; + if ( img_report->is_grey ) grey1 = 1 ; + } + if ( !img_report->is_grey ) + { + i-- ; + Vapi->LoDoLog(LL_INFO,"optimg.ldv: image is not grey level and so not dual-tone") ; + if ( grey1 ) Vapi->LoDoLog(LL_INFO,"optimg.ldv: RGB[%d]=%ld,%ld,%ld", i, r, g, b) ; + img_report->is_dualtone = 0 ; + } + else if ( img_report->limit_black < img_report->limit_white ) + { + for ( i = img_report->limit_black; img_report->is_dualtone && (i < img_report->limit_white); i++ ) + { + if ( histo.grey[i] > ref_diff_grey ) img_report->is_dualtone = 0 ; + } + if ( !img_report->is_dualtone ) + { + i-- ; + Vapi->LoDoLog(LL_INFO,"optimg.ldv: image is not dual tone") ; + Vapi->LoDoLog(LL_INFO,"optimg.ldv: Grey[%d]=%ld", i, histo.grey[i]) ; + } + } + img_report->ncolors = histo.nb_colors_used ; + } + + return status ; +} + +static LDV_STATUS ImgAnalyze(IMG_REPORT* img_report) +{ + LDV_IMAGE* in = img_report->in ; + short status ; + + img_report->is_dualtone = 1 ; + img_report->is_grey = 1 ; + + if ( LoadProfile( img_report ) != 0 ) + { + /* For some reason, profile is not found */ + /* Let's defaut to TIF/JPEG outputs */ + Vapi->LoDoLog(LL_INFO, "optimg.ldv: getting hard-coded default profile") ; + GetDefaultSaveOptions( img_report ) ; + } + + if ( in->Raster.fd_nplanes == 1 ) return 1 ; + + Vapi->LoDoLog(LL_INFO, "optimg.ldv: image is %dx%dx%d", in->Raster.fd_w, in->Raster.fd_h, in->Raster.fd_nplanes) ; + Vapi->LoDoLog(LL_INFO, "optimg.ldv: ImgAnalyze enforce_smaller = %d", (short)img_report->enforce_smaller) ; + Vapi->LoDoLog(LL_INFO, "optimg.ldv: ImgAnalyze limit_black = %d", (short)img_report->limit_black) ; + Vapi->LoDoLog(LL_INFO, "optimg.ldv: ImgAnalyze limit_white = %d", (short)img_report->limit_white) ; + Vapi->LoDoLog(LL_INFO, "optimg.ldv: ImgAnalyze diff_grey = %d", (short)img_report->diff_grey) ; + Vapi->LoDoLog(LL_INFO, "optimg.ldv: ImgAnalyze enforce_dither = %d", (short)img_report->enforce_dither) ; + if ( img_report->enforce_dither ) + { + Vapi->LoDoLog(LL_INFO, "optimg.ldv: ImgAnalyze method = %d", (short)img_report->dither_method) ; + Vapi->LoDoLog(LL_INFO, "optimg.ldv: ImgAnalyze outplanes = %d", (short)img_report->dither_outplanes) ; + Vapi->LoDoLog(LL_INFO, "optimg.ldv: ImgAnalyze param = %d", (short)img_report->dither_param) ; + } + + if ( img_report->enforce_dither ) + { + Vapi->LoDoLog(LL_INFO,"optimg.ldv: profile enforces dither method=%d, outplanes=%d, param=%d", img_report->dither_method, img_report->dither_outplanes, img_report->dither_param ) ; + status = 1 ; + } + else + { + status = ( AnalyzeFromVISION( img_report ) == 0 ) ; + if ( img_report->is_grey ) { Vapi->LoDoLog(LL_INFO,"optimg.ldv: image is grey level") ; status = 1 ; } + if ( img_report->is_dualtone ) { Vapi->LoDoLog(LL_INFO,"optimg.ldv: image is dual tone") ; status = 1 ; } + Vapi->LoDoLog(LL_INFO,"optimg.ldv: %ld colors found", img_report->ncolors) ; + } + + return status ; +} + +static char* GetSaveOptions(IMG_REPORT* img_report, short nplanes) +{ + short planes[] = { 1, 4, 8, 16, 24, 32 } ; + short i ; + char* save_options = NULL ; + + for ( i = 0; (save_options == NULL) && (i < ARRAY_SIZE(planes)); i++ ) + if ( planes[i] == nplanes ) save_options = &img_report->save_options[i][0] ; + + Vapi->LoDoLog(LL_INFO, "optimg.ldv: GetSaveOptions(%d planes): %s", nplanes, save_options ? save_options:NULL) ; + return save_options ; +} + +static char* GetBestImgMatch(IMG_REPORT* img_report, long* method, long* param, LDV_IMAGE* out) +{ + LDV_IMAGE* in = img_report->in ; + + out->Raster.fd_nplanes = in->Raster.fd_nplanes ; + *method = -1 ; + *param = 0 ; + + if ( img_report->enforce_dither ) + { + out->Raster.fd_nplanes = img_report->dither_outplanes ; + *method = img_report->dither_method ; + *param = img_report->dither_param ; + } + else if ( img_report->is_dualtone ) + { + out->Raster.fd_nplanes = 1 ; + *method = 4 ; + *param = 50 ; + } + else if ( img_report->is_grey ) + { + out->Raster.fd_nplanes = (img_report->ncolors <= 16L) ? 4:8 ; + *method = 2 ; + } + else if ( img_report->ncolors < 2048L ) + { + if ( in->Raster.fd_nplanes > 8 ) + { + out->Raster.fd_nplanes = 8 ; + *method = 3 ; + } + } + + return GetSaveOptions( img_report, out->Raster.fd_nplanes ) ; +} + +static long file_size(char* name) +{ + FILE* stream = fopen( name, "rb" ) ; + long size ; + + if ( stream == NULL ) return -1 ; + + fseek( stream, 0, SEEK_END ) ; + size = ftell( stream ) ; + fclose( stream ) ; + + return size ; +} + +LDV_STATUS cdecl Run(LDV_IMAGE* in, LDV_PARAMS* params, LDV_IMAGE* out) +{ + LDV_STATUS status = ELDV_NOERROR ; + IMG_REPORT img_report ; + short copy_file = 1 ; /* In case we don't find a better choice than the current one */ + char in_file[256] ; + char out_file[256] ; + char buf[256] ; + char* pout_file ; + char* profile ; + + CHECK_VAPI( Vapi ) ; + + pout_file = params->Param[0].str ; + profile = params->Param[1].str ; + Vapi->LoDoLog(LL_INFO, "optimg.ldv: dest:%s, profile=%s", pout_file ? pout_file:"", profile ? profile:"") ; + if ( pout_file == NULL ) return ELDV_INVALIDPARAMETER ; + + status = Vapi->ImGetStdData( in, "filename", in_file, sizeof(in_file) ) ; + if ( !LDV_SUCCESS( status ) ) return status ; + + strcpy( out_file, pout_file ) ; + if ( Vapi->FiFolderExist( pout_file ) ) + { + char* last_slash = strrchr( in_file, '\\' ) ; + + Vapi->LoDoLog(LL_INFO, "optimg.ldv: %s is a folder", pout_file ) ; + if ( last_slash ) strcat( out_file, last_slash ) ; /* Just copy filename without folder before */ + else strcat( out_file, in_file ) ; + } + + sprintf( buf, "Analyzing %s...", in_file ) ; + Vapi->PrSetText( 0, buf ) ; + Vapi->PrSetText( 1, "Requesting histograms to VISION..." ) ; + if ( LDVPROG_CANCEL( Vapi->PrSetProgEx( 0 ) ) ) { Vapi->LoDoLog(LL_INFO, "optimg.ldv: user requested cancel") ; return ELDV_CANCELLED ; } + memset( &img_report, 0, sizeof(img_report) ) ; + img_report.in = in ; + img_report.profile = profile ; + if ( ImgAnalyze( &img_report ) == 1 ) + { + long method, param ; + char* save_options ; + + save_options = GetBestImgMatch( &img_report, &method, ¶m, out ) ; + if ( save_options ) + { + Vapi->LoDoLog(LL_INFO,"optimg.ldv: dither method=%ld", method) ; + sprintf( buf, "Optimizing %s...", in_file ) ; + Vapi->PrSetText( 0, buf ) ; + Vapi->PrSetText( 1, "Requesting dithering to VISION..." ) ; + if ( LDVPROG_CANCEL( Vapi->PrSetProgEx( 33 ) ) ) status = ELDV_CANCELLED ; + else if ( method != -1 ) status = Vapi->ImDither( method, param, in, out ) ; + if ( LDV_SUCCESS( status ) ) + { + char local_outfile[256] ; /* As we have to set the format as extension */ + char buffer[128] ; + char out_ext[16] ; + char* c ; + char* ext ; + + if ( method != -1 ) Vapi->ImFree( in ) ; /* We just dither the image sucessfully, let's free the original one */ + else memcpy( out, in, sizeof(LDV_IMAGE) ) ; + if ( sscanf( save_options, "fmt=%s", buffer ) == 1 ) /* format is the first field returned by GetBestImgMatch */ + { + c = strchr( buffer, ';' ) ; + if ( c ) { *c = 0 ; strcpy( out_ext, buffer ) ; } + else strcpy( out_ext, buffer ) ; + strcpy( local_outfile, out_file ) ; + c = strrchr( local_outfile, '\\' ) ; + if ( c ) ext = strrchr( 1+c, '.' ) ; + else ext = strrchr( local_outfile, '.' ) ; + if ( ext ) *(1+ext) = 0 ; + if ( c ) strcat( 1+c, out_ext ) ; + Vapi->LoDoLog(LL_INFO, "optimg.ldv: optimizing image file %s to %s with options: %s", in_file, local_outfile, save_options ) ; + Vapi->PrSetText( 1, "Requesting saving to VISION..." ) ; + if ( LDVPROG_CANCEL( Vapi->PrSetProgEx( 66 ) ) ) status = ELDV_CANCELLED ; + else status = Vapi->ImSave( local_outfile, out, save_options ) ; + if ( LDV_SUCCESS( status ) ) + { + if ( img_report.enforce_smaller ) + { + long l1, l2 ; + + l1 = file_size( in_file ) ; + l2 = file_size( local_outfile ) ; + if ( (l2 > 0) && (l1 > l2) ) copy_file = 0 ; + else { unlink( local_outfile ) ; Vapi->LoDoLog(LL_INFO, "optimg.ldv: optimized file is bigger (%ldKB vs %ldKB), keeping original one", l1>>10, l2>>10 ) ; } + } + else copy_file = 0 ; + } + else { Vapi->LoDoLog(LL_ERROR, "optimg.ldv: ImSave returned %ld", status ) ; status = ELDV_GENERALFAILURE ; } + } + else { Vapi->LoDoLog(LL_ERROR, "optimg.ldv: image format not found in save options %s", save_options ) ; status = ELDV_GENERALFAILURE ; } + } + else Vapi->LoDoLog(LL_ERROR, "optimg.ldv: ImDither returned %ld", status ) ; + } + else Vapi->LoDoLog(LL_INFO, "optimg.ldv: can't find a better setting" ) ; + } + else Vapi->LoDoLog(LL_INFO, "optimg.ldv: ImgAnalyze did not identify a possible optimization" ) ; + + if ( status == ELDV_CANCELLED ) Vapi->LoDoLog(LL_INFO, "optimg.ldv: user requested cancel") ; + else if ( copy_file ) + { + Vapi->LoDoLog(LL_INFO, "optimg.ldv: duplicating image file %s to %s", in_file, out_file ) ; + Vapi->PrSetText( 1, "Duplicating original file..." ) ; + Vapi->PrSetProgEx( 85 ) ; + status = Vapi->FiCopyFileR( in_file, out_file ) ; + if ( !LDV_SUCCESS( status ) ) + { + Vapi->LoDoLog(LL_ERROR, "optimg.ldv: FiCopyFileR returned %ld", status ) ; + status = ELDV_GENERALFAILURE ; + } + } + Vapi->PrSetText( 1, "" ) ; + + return status ; +} + +static void uinit() +{ + short i ; + + for ( i = 0; i < 32; i++ ) u5bto8b[i] = (unsigned char) (0.5+(i*256.0)/32.0) ; + for ( i = 0; i < 64; i++ ) u6bto8b[i] = (unsigned char) (0.5+(i*256.0)/64.0) ; +} + +int main(void) +{ + ldg_init( Ldg ) ; + + return 0 ; +} diff --git a/tools/vision/ldv/src/optimg/optimg.ldv b/tools/vision/ldv/src/optimg/optimg.ldv new file mode 100644 index 0000000..7b3973c Binary files /dev/null and b/tools/vision/ldv/src/optimg/optimg.ldv differ diff --git a/tools/vision/ldv/src/optimg/optimg.prj b/tools/vision/ldv/src/optimg/optimg.prj new file mode 100644 index 0000000..a0e9cef --- /dev/null +++ b/tools/vision/ldv/src/optimg/optimg.prj @@ -0,0 +1,13 @@ +OPTIMG.LDV +.C [ ] +.S [ ] +.L [ ] += +pcstart.o +OPTIMG.C +pcgemlib.lib +pcstdlib.lib +pctoslib.lib +pcfltlib.lib +..\..\ldg.lib +..\..\mt_aes.lib \ No newline at end of file diff --git a/tools/vision/LDV/SRC/PIXEL/PIXEL.C b/tools/vision/ldv/src/pixel/pixel.c similarity index 94% rename from tools/vision/LDV/SRC/PIXEL/PIXEL.C rename to tools/vision/ldv/src/pixel/pixel.c index 11b314d..14b6dfb 100644 --- a/tools/vision/LDV/SRC/PIXEL/PIXEL.C +++ b/tools/vision/ldv/src/pixel/pixel.c @@ -29,7 +29,6 @@ LDV_INFOS * cdecl GetLDVCapabilities(VAPI *vapi) ; LDV_STATUS cdecl PreRun(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) ; LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) ; LDV_STATUS cdecl Preview(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) ; -LDV_STATUS cdecl GetParams(LDV_IMAGE *in, LDV_PARAMS *params, char *path) ; /* Variables globales */ PROC Proc[] = { @@ -42,7 +41,7 @@ PROC Proc[] = { char Info[] = "LDV"; LDGLIB Ldg[] = { - 0x0100, /* version de la lib, recommand‚ */ + 0x0101, /* version de la lib, recommand‚ */ 4, /* nombre de fonction dans la lib */ Proc, /* Pointeurs vers nos fonctions */ Info, /* Information sur la lib */ @@ -165,7 +164,7 @@ LDV_STATUS Run16(LDV_IMAGE *in, LDV_PARAMS *params) power = params->Param[0].s ; po2 = power * power ; nb_lpts = in->Raster.fd_w ; - if ( nb_lpts % 16 ) nb_lpts++ ; + if ( nb_lpts & 0x0F ) nb_lpts++ ; yoffset = nb_lpts * (long)(params->y1) ; for ( y = params->y1; !cancel && (y < params->y2); y += power, yoffset += nb_lpts*power ) { @@ -256,7 +255,7 @@ LDV_STATUS Run32(LDV_IMAGE *in, LDV_PARAMS *params) power = params->Param[0].s ; po2 = power * power ; nb_lpts = in->Raster.fd_w ; - if ( nb_lpts % 16 ) nb_lpts++ ; + if ( nb_lpts & 0x0F ) nb_lpts++ ; yoffset = nb_lpts * (long)(params->y1) ; for ( y = params->y1; !cancel && (y < params->y2); y += power, yoffset += nb_lpts*power ) { diff --git a/tools/vision/ldv/src/pixel/pixel.ldv b/tools/vision/ldv/src/pixel/pixel.ldv new file mode 100644 index 0000000..153de7b Binary files /dev/null and b/tools/vision/ldv/src/pixel/pixel.ldv differ diff --git a/tools/vision/LDV/SRC/PIXEL/PIXEL.PRJ b/tools/vision/ldv/src/pixel/pixel.prj similarity index 76% rename from tools/vision/LDV/SRC/PIXEL/PIXEL.PRJ rename to tools/vision/ldv/src/pixel/pixel.prj index 7fea599..e995c2d 100644 --- a/tools/vision/LDV/SRC/PIXEL/PIXEL.PRJ +++ b/tools/vision/ldv/src/pixel/pixel.prj @@ -1,6 +1,7 @@ PIXEL.LDV -;.C[-Y- -G+] -;.L[-Y-] +.C [ ] +.S [ ] +.L [ ] = pcstart.o PIXEL.C diff --git a/tools/vision/LDV/SRC/PIXEL/PIXEL.S b/tools/vision/ldv/src/pixel/pixel.s similarity index 100% rename from tools/vision/LDV/SRC/PIXEL/PIXEL.S rename to tools/vision/ldv/src/pixel/pixel.s diff --git a/tools/vision/LDV/SRC/puzzle/puzzle.c b/tools/vision/ldv/src/puzzle/puzzle.c similarity index 86% rename from tools/vision/LDV/SRC/puzzle/puzzle.c rename to tools/vision/ldv/src/puzzle/puzzle.c index bc84493..a8fd33f 100644 --- a/tools/vision/LDV/SRC/puzzle/puzzle.c +++ b/tools/vision/ldv/src/puzzle/puzzle.c @@ -44,7 +44,7 @@ PROC Proc[] = { char Info[] = "LDV"; LDGLIB Ldg[] = { - 0x0100, /* version de la lib, recommand‚ */ + 0x0102, /* version de la lib, recommand‚ */ 4, /* nombre de fonction dans la lib */ Proc, /* Pointeurs vers nos fonctions */ Info, /* Information sur la lib */ @@ -105,7 +105,7 @@ int vdihandle(void) return( i ) ; } -void SetMixedArray(short Nw, short Nh, short entropy) +short* SetMixedArray(short Nw, short Nh, short entropy) { short nb = Nw * Nh ; @@ -125,25 +125,44 @@ void SetMixedArray(short Nw, short Nh, short entropy) ToBeMixed[j] = ToBeMixed[k] ; ToBeMixed[k] = l ; } - } + } + + return ToBeMixed ; } -#pragma warn -par -LDV_STATUS cdecl PreRun(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) +LDV_STATUS UpdateMixedArray(LDV_PARAMS *params) { + short old_nw = Nw ; + short old_nh = Nh ; + short old_entropy = Entropy ; + Nw = params->Param[0].s ; Nh = params->Param[1].s ; Entropy = params->Param[2].s ; + if ( (old_nw != Nw) || (old_nh != Nh) || (old_entropy != Entropy) ) + if ( SetMixedArray( Nw, Nh, Entropy ) == NULL ) return ELDV_NOTENOUGHMEMORY ; + + return ELDV_NOERROR ; +} + +LDV_STATUS cdecl PreRun(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) +{ + LDV_STATUS status ; + + status = UpdateMixedArray( params ) ; + if ( !LDV_SUCCESS(status) ) return status ; + out->Raster.fd_w = in->Raster.fd_w ; out->Raster.fd_h = in->Raster.fd_h ; - return( ELDV_NOERROR ) ; + return ELDV_NOERROR ; } +#pragma warn -par LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) { - LDV_STATUS status = ELDV_NOERROR ; + LDV_STATUS status ; long cancel, pc ; short *src_num = ToBeMixed ; short dst_num ; @@ -151,7 +170,8 @@ LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) int x, y, w, h ; int nw, nh, mw, mh ; - if ( ToBeMixed == NULL ) return( ELDV_NOTENOUGHMEMORY ) ; + status = UpdateMixedArray( params ) ; + if ( !LDV_SUCCESS(status) ) return status ; if ( VDIHandle == -1 ) VDIHandle = vdihandle() ; @@ -203,15 +223,12 @@ LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) return( status ) ; } +#pragma warn +par LDV_STATUS cdecl Preview(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) { - SetMixedArray( Nw, Nh, Entropy ) ; - if ( ToBeMixed == NULL ) return( ELDV_NOTENOUGHMEMORY ) ; - return( Run( in, params, out ) ) ; } -#pragma warn +par int main(void) diff --git a/tools/vision/ldv/src/puzzle/puzzle.ldv b/tools/vision/ldv/src/puzzle/puzzle.ldv new file mode 100644 index 0000000..d0a670a Binary files /dev/null and b/tools/vision/ldv/src/puzzle/puzzle.ldv differ diff --git a/tools/vision/LDV/SRC/puzzle/puzzle.prj b/tools/vision/ldv/src/puzzle/puzzle.prj similarity index 75% rename from tools/vision/LDV/SRC/puzzle/puzzle.prj rename to tools/vision/ldv/src/puzzle/puzzle.prj index 7deb25b..1f85ca6 100644 --- a/tools/vision/LDV/SRC/puzzle/puzzle.prj +++ b/tools/vision/ldv/src/puzzle/puzzle.prj @@ -1,6 +1,7 @@ PUZZLE.LDV -;.C[-Y- -G+] -;.L[-Y-] +.C [ ] +.S [ ] +.L [ ] = pcstart.o PUZZLE.C diff --git a/tools/vision/LDV/SRC/rotate/ROTATE.C b/tools/vision/ldv/src/rotate/rotate.c similarity index 95% rename from tools/vision/LDV/SRC/rotate/ROTATE.C rename to tools/vision/ldv/src/rotate/rotate.c index f619a6b..0f37c61 100644 --- a/tools/vision/LDV/SRC/rotate/ROTATE.C +++ b/tools/vision/ldv/src/rotate/rotate.c @@ -44,7 +44,7 @@ PROC Proc[] = { char Info[] = "LDV"; LDGLIB Ldg[] = { - 0x0100, /* version de la lib, recommand‚ */ + 0x0101, /* version de la lib, recommand‚ */ 4, /* nombre de fonction dans la lib */ Proc, /* Pointeurs vers nos fonctions */ Info, /* Information sur la lib */ diff --git a/tools/vision/ldv/src/rotate/rotate.ldv b/tools/vision/ldv/src/rotate/rotate.ldv new file mode 100644 index 0000000..faf26fe Binary files /dev/null and b/tools/vision/ldv/src/rotate/rotate.ldv differ diff --git a/tools/vision/LDV/SRC/rotate/ROTATE.PRJ b/tools/vision/ldv/src/rotate/rotate.prj similarity index 77% rename from tools/vision/LDV/SRC/rotate/ROTATE.PRJ rename to tools/vision/ldv/src/rotate/rotate.prj index 563afb9..7a1448d 100644 --- a/tools/vision/LDV/SRC/rotate/ROTATE.PRJ +++ b/tools/vision/ldv/src/rotate/rotate.prj @@ -1,6 +1,7 @@ ROTATE.LDV -;.C[-Y- -G+] -;.L[-Y-] +.C [ ] +.S [ ] +.L [ ] = pcstart.o ROTATE.C diff --git a/tools/vision/LDV/SRC/XWAVE/XWAVE.C b/tools/vision/ldv/src/xwave/xwave.c similarity index 95% rename from tools/vision/LDV/SRC/XWAVE/XWAVE.C rename to tools/vision/ldv/src/xwave/xwave.c index 0ad6af2..76fa85d 100644 --- a/tools/vision/LDV/SRC/XWAVE/XWAVE.C +++ b/tools/vision/ldv/src/xwave/xwave.c @@ -44,7 +44,7 @@ PROC Proc[] = { char Info[] = "LDV"; LDGLIB Ldg[] = { - 0x0101, /* version de la lib, recommand‚ */ + 0x0102, /* version de la lib, recommand‚ */ 4, /* nombre de fonction dans la lib */ Proc, /* Pointeurs vers nos fonctions */ Info, /* Information sur la lib */ diff --git a/tools/vision/LDV/XWAVE.LDV b/tools/vision/ldv/src/xwave/xwave.ldv similarity index 50% rename from tools/vision/LDV/XWAVE.LDV rename to tools/vision/ldv/src/xwave/xwave.ldv index c45e179..1f2117c 100644 Binary files a/tools/vision/LDV/XWAVE.LDV and b/tools/vision/ldv/src/xwave/xwave.ldv differ diff --git a/tools/vision/LDV/SRC/XWAVE/XWAVE.PRJ b/tools/vision/ldv/src/xwave/xwave.prj similarity index 77% rename from tools/vision/LDV/SRC/XWAVE/XWAVE.PRJ rename to tools/vision/ldv/src/xwave/xwave.prj index ce2fc3b..88b8c69 100644 --- a/tools/vision/LDV/SRC/XWAVE/XWAVE.PRJ +++ b/tools/vision/ldv/src/xwave/xwave.prj @@ -1,6 +1,7 @@ xwave.ldv -;.C[-Y- -G+] -;.L[-Y-] +.C [ ] +.S [ ] +.L [ ] = pcstart.o xwave.c diff --git a/tools/vision/LDV/SRC/YPERSC/YPERSC.C b/tools/vision/ldv/src/ypersc/ypersc.c similarity index 96% rename from tools/vision/LDV/SRC/YPERSC/YPERSC.C rename to tools/vision/ldv/src/ypersc/ypersc.c index a01efae..37ba8d8 100644 --- a/tools/vision/LDV/SRC/YPERSC/YPERSC.C +++ b/tools/vision/ldv/src/ypersc/ypersc.c @@ -44,7 +44,7 @@ PROC Proc[] = { char Info[] = "LDV"; LDGLIB Ldg[] = { - 0x0100, /* version de la lib, recommand‚ */ + 0x0101, /* version de la lib, recommand‚ */ 4, /* nombre de fonction dans la lib */ Proc, /* Pointeurs vers nos fonctions */ Info, /* Information sur la lib */ @@ -175,7 +175,7 @@ LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) /* pt16_... est utilise pour le mode 16 bits et le mode bit-plan (avec reajustement) */ if ( in->Raster.fd_nplanes <= 8 ) { - size_t win, wout ; + size_t win ; win = ALIGN16( in->Raster.fd_w ) ; wout = ALIGN16( out->Raster.fd_w ) ; diff --git a/tools/vision/ldv/src/ypersc/ypersc.ldv b/tools/vision/ldv/src/ypersc/ypersc.ldv new file mode 100644 index 0000000..a0af340 Binary files /dev/null and b/tools/vision/ldv/src/ypersc/ypersc.ldv differ diff --git a/tools/vision/LDV/SRC/YPERSC/YPERSC.PRJ b/tools/vision/ldv/src/ypersc/ypersc.prj similarity index 77% rename from tools/vision/LDV/SRC/YPERSC/YPERSC.PRJ rename to tools/vision/ldv/src/ypersc/ypersc.prj index fbcb512..f3103cc 100644 --- a/tools/vision/LDV/SRC/YPERSC/YPERSC.PRJ +++ b/tools/vision/ldv/src/ypersc/ypersc.prj @@ -1,6 +1,7 @@ YPERSC.LDV -;.C[-Y- -G+] -;.L[-Y-] +.C [ ] +.S [ ] +.L [ ] = pcstart.o YPERSC.C diff --git a/tools/vision/LDV/SRC/YWAVE/YWAVE.C b/tools/vision/ldv/src/ywave/ywave.c similarity index 95% rename from tools/vision/LDV/SRC/YWAVE/YWAVE.C rename to tools/vision/ldv/src/ywave/ywave.c index 503f90f..3191ffa 100644 --- a/tools/vision/LDV/SRC/YWAVE/YWAVE.C +++ b/tools/vision/ldv/src/ywave/ywave.c @@ -44,7 +44,7 @@ PROC Proc[] = { char Info[] = "LDV"; LDGLIB Ldg[] = { - 0x0100, /* version de la lib, recommand‚ */ + 0x0101, /* version de la lib, recommand‚ */ 4, /* nombre de fonction dans la lib */ Proc, /* Pointeurs vers nos fonctions */ Info, /* Information sur la lib */ diff --git a/tools/vision/LDV/SRC/YWAVE/YWAVE.LDV b/tools/vision/ldv/src/ywave/ywave.ldv similarity index 50% rename from tools/vision/LDV/SRC/YWAVE/YWAVE.LDV rename to tools/vision/ldv/src/ywave/ywave.ldv index 303d101..546b0f5 100644 Binary files a/tools/vision/LDV/SRC/YWAVE/YWAVE.LDV and b/tools/vision/ldv/src/ywave/ywave.ldv differ diff --git a/tools/vision/LDV/SRC/YWAVE/YWAVE.PRJ b/tools/vision/ldv/src/ywave/ywave.prj similarity index 77% rename from tools/vision/LDV/SRC/YWAVE/YWAVE.PRJ rename to tools/vision/ldv/src/ywave/ywave.prj index ad5372b..fa46655 100644 --- a/tools/vision/LDV/SRC/YWAVE/YWAVE.PRJ +++ b/tools/vision/ldv/src/ywave/ywave.prj @@ -1,6 +1,7 @@ ywave.ldv -;.C[-Y- -G+] -;.L[-Y-] +.C [ ] +.S [ ] +.L [ ] = pcstart.o ywave.c diff --git a/tools/vision/LDV/VAPI.H b/tools/vision/ldv/vapi.h similarity index 61% rename from tools/vision/LDV/VAPI.H rename to tools/vision/ldv/vapi.h index 0015a6e..783bf3e 100644 --- a/tools/vision/LDV/VAPI.H +++ b/tools/vision/ldv/vapi.h @@ -1,10 +1,14 @@ -#ifndef __VAPI -#define __VAPI +#ifndef __VAPI_H +#define __VAPI_H #ifndef __VDI__ #include #endif +#ifndef ARRAY_SIZE +#define ARRAY_SIZE(v) sizeof(v)/sizeof((v)[0]) +#endif + typedef struct { unsigned short Version ; /* 0x0100 for example */ @@ -20,14 +24,14 @@ typedef struct VAPI_HEADER ; /* For RaTCxxRemapColors */ -#ifndef __RASTEROP /* Dont worry, it's for VISION's compile */ +#ifndef __RASTEROP_H /* Dont worry, it's for VISION's compile */ typedef struct { - unsigned char *red ; - unsigned char *green ; - unsigned char *blue ; - void *pt_img ; - long nb_pts ; + unsigned char* red ; + unsigned char* green ; + unsigned char* blue ; + void* pt_img ; + long nb_pts ; } REMAP_COLORS ; @@ -79,9 +83,39 @@ REMAP_COLORS ; #define CO_HAS_FPU 0x20 #define CO_HAS_DSP 0x200 +/* For CoGetScreenInfo */ +typedef struct +{ + short Width ; + short Height ; + short NPlanes ; + short UseStdVDI ; + short RFU[120] ; +} +SCREEN_INFO ; + +/* From image_io.h, make sure */ +/* Same definition is shared */ +#ifndef HISTO_SIZE +#define HISTO_SIZE 256 +typedef struct _HISTO +{ + unsigned long red[HISTO_SIZE] ; + unsigned long green[HISTO_SIZE] ; + unsigned long blue[HISTO_SIZE] ; + unsigned long grey[HISTO_SIZE] ; + unsigned long index[HISTO_SIZE] ; + unsigned long nb_colors ; + unsigned long norm ; /* Must be set by caller */ + unsigned long nb_colors_used ; +} +HISTO, *PHISTO ; +#endif + #ifndef __INI_H typedef void* HINI ; #endif + typedef struct { VAPI_HEADER Header ; @@ -91,7 +125,8 @@ typedef struct void cdecl (*PrOptimize)(long mask) ; void cdecl (*PrSetText)(long no_line, char *text) ; long cdecl (*PrSetProgEx)(long pc) ; - long PrRFU[8] ; + long cdecl (*PrSetProgRange)(long current, long max) ; + long PrRFU[7] ; /* Raster Interface */ void cdecl (*RaImgWhite)(MFDB *img) ; @@ -116,9 +151,10 @@ typedef struct /* Config Interface */ char* cdecl (*CoGetLDVPath)(void) ; char* cdecl (*CoGetCurrentLanguage)(void) ; - unsigned long cdecl (*CoGetFunctionOptimizations)(void *function) ; + unsigned long cdecl (*CoGetFunctionOptimizations)(void* function) ; unsigned long cdecl (*CoGetProcessors)(void) ; - long CoRFU[18] ; + void cdecl (*CoGetScreenInfo)(SCREEN_INFO* sinfo) ; + long CoRFU[17] ; /* INI Interface */ long cdecl (*InOpen)(char *file) ; @@ -131,18 +167,47 @@ typedef struct long InRFU[19] ; /* MEM Interface */ - void cdecl (*MeSCopyMemory8)(void *dst, void *src, unsigned long nb_elems_dst, unsigned long nb_elems_src) ; - void cdecl (*MeSCopyMemory16)(void *dst, void *src, unsigned long nb_elems_dst, unsigned long nb_elems_src) ; - void cdecl (*MeSCopyMemory32)(void *dst, void *src, unsigned long nb_elems_dst, unsigned long nb_elems_src) ; - long MeRFU[30] ; + void cdecl (*MeSCopyMemory8)(void *dst, void *src, unsigned long nb_elems_dst, unsigned long nb_elems_src) ; + void cdecl (*MeSCopyMemory16)(void *dst, void *src, unsigned long nb_elems_dst, unsigned long nb_elems_src) ; + void cdecl (*MeSCopyMemory32)(void *dst, void *src, unsigned long nb_elems_dst, unsigned long nb_elems_src) ; + void* cdecl (*MeXalloc)(unsigned long size) ; + void* cdecl (*MeXrealloc)(void* ptr, unsigned long size) ; + void cdecl (*MeXfree)(void* ptr) ; + void* cdecl (*MeXcalloc)(unsigned long nb_elems, unsigned long elem_size) ; + char* cdecl (*MeXstrdup)(char* s) ; + long MeRFU[25] ; /* Logging Interface */ long cdecl (*LoDoLog)(unsigned long level, char* format, ...) ; unsigned long cdecl (*LoGetLogLevel)(void) ; long LoRFU[8] ; + /* Image I/O interface */ + /* ldv_img must point to a LDV_IMG structure */ + long cdecl (*ImGetInf)(char* filename, void* ldv_img) ; + long cdecl (*ImLoad)(void* ldv_img) ; + void cdecl (*ImFree)(void* ldv_img) ; + long cdecl (*ImSave)(char* filename, void* ldv_img, char* save_options) ; + /* 0: auto, 1: matrixmono, 2: grey level, 3: 216 colors, 4: dual-tone */ + long cdecl (*ImDither)(long method, long param, void* ldv_img_in, void* ldv_img_out) ; + long cdecl (*ImGetStdData)(void* ldv_img, char* query, char* out_data, long out_data_size) ; + long cdecl (*ImComputeHistogram)(void* ldv_img, HISTO *histo) ; /* histo->norm must be set by caller */ + long ImRFU[9] ; + + /* File Interface */ + long cdecl (*FiFileExist)(char* file) ; + long cdecl (*FiFolderExist)(char* folder) ; + long cdecl (*FiCopyFile)(char* src, char* dst) ; + long cdecl (*FiCopyFileR)(char* src, char* dst) ; + long cdecl (*FiMoveFile)(char* src, char* dst) ; + long cdecl (*FiCreateFolder)(char* path) ; + long cdecl (*FiCmpFiles)(char* f1, char* f2) ; + long FiRFU[9] ; + /* More interfaces to come ! */ } VAPI ; +#define LDVPROG_CANCEL(status) (status == 1) + #endif diff --git a/tools/vision/LDV/XWAVE.INI b/tools/vision/ldv/xwave.ini similarity index 100% rename from tools/vision/LDV/XWAVE.INI rename to tools/vision/ldv/xwave.ini diff --git a/tools/vision/LDV/SRC/XWAVE/XWAVE.LDV b/tools/vision/ldv/xwave.ldv similarity index 50% rename from tools/vision/LDV/SRC/XWAVE/XWAVE.LDV rename to tools/vision/ldv/xwave.ldv index c45e179..1f2117c 100644 Binary files a/tools/vision/LDV/SRC/XWAVE/XWAVE.LDV and b/tools/vision/ldv/xwave.ldv differ diff --git a/tools/vision/LDV/YPERSC.INI b/tools/vision/ldv/ypersc.ini similarity index 100% rename from tools/vision/LDV/YPERSC.INI rename to tools/vision/ldv/ypersc.ini diff --git a/tools/vision/ldv/ypersc.ldv b/tools/vision/ldv/ypersc.ldv new file mode 100644 index 0000000..a0af340 Binary files /dev/null and b/tools/vision/ldv/ypersc.ldv differ diff --git a/tools/vision/LDV/YWAVE.INI b/tools/vision/ldv/ywave.ini similarity index 100% rename from tools/vision/LDV/YWAVE.INI rename to tools/vision/ldv/ywave.ini diff --git a/tools/vision/LDV/YWAVE.LDV b/tools/vision/ldv/ywave.ldv similarity index 50% rename from tools/vision/LDV/YWAVE.LDV rename to tools/vision/ldv/ywave.ldv index 303d101..546b0f5 100644 Binary files a/tools/vision/LDV/YWAVE.LDV and b/tools/vision/ldv/ywave.ldv differ diff --git a/tools/vision/png.txt b/tools/vision/png.txt index e4ddbf9..609e9fb 100644 --- a/tools/vision/png.txt +++ b/tools/vision/png.txt @@ -1,5 +1,5 @@ png.txt for VISION -VISION support PNG image format through popular libpng (http://www.libpng.org/pub/png/libpng.html) +VISION supports PNG image format through popular libpng (http://www.libpng.org/pub/png/libpng.html) libpng is made availabe to Atari systems via a Shared Library (SLB). This SLB is available for Mint and Magic Atari Oses. - Download latest zlib and libpng libs available from http://tho-otto.de/download/zlib1211.zip and http://tho-otto.de/download/png1635.tbz diff --git a/tools/vision/readme.txt b/tools/vision/readme.txt deleted file mode 100644 index b456376..0000000 --- a/tools/vision/readme.txt +++ /dev/null @@ -1,42 +0,0 @@ -********************************* -* readme.txt for VISION sources * -********************************* -In early 2005, I decided to make the source code of VISION freely available on my website http://vision.atari.org -VISION is an image editor/manager/album and more lotta stuff for all ATARI platforms. -This is the release 4.1a, with a lot of improvements compared to 4.0f, see http://vision.atari.org/vhistoe.htm for details. - -********************** -* So, what's in it ? * -********************** -This archive contains the following objects: - -xaes.h Modified (compatible) version of AES.H for Falcon "new" features. Copy it to your INCLUDE folder -PCFLTLIB.LIB Modified floating point library for MAC emulator compatibility. Copy it to your LIB folder - -TOOLS\ This is the main folder for my personal library -+-JPEG\ JPEG encoder/decoder source files - -VISION\ Well, all the VISION specific stuff -+-DSP\ Contains the Brainstorm JPEG decoder for Falcon and nfjpeg.prg (native JPEG decoding for Aranym) - And the 56001 binary I did for image filtering -+-FILTRES\ Convolution filters files -+-FORMS\ Source files for all VISION's dialog boxes -+-LANGUES\ Resource files for all languages currently supported by VISION: - (one folder per language) - DEUTSCH, ENGLISH, FRANCAIS, ITALIAN, SVENSKA -+-LDV\ Source files for VISION's modules based on LDGs - -VISION is developped using PURE_C. - - -************* -* Copyright * -************* -See license.txt: MIT basically says: do whatever you want with sources. - -Well, here we are, I really enjoyed developing VISION on ATARI, I hope someone will continue... - -If you need more details on source code (I have to admit that it is not so well commented...), -you can contact me at: vision.support@free.fr - -Have fun ! \ No newline at end of file diff --git a/tools/vision/scripts/bcon.vcs b/tools/vision/scripts/bcon.vcs new file mode 100644 index 0000000..ee509b8 --- /dev/null +++ b/tools/vision/scripts/bcon.vcs @@ -0,0 +1,2 @@ +; Batch Conversion sample +bconv_do bconv.ini \ No newline at end of file diff --git a/tools/vision/scripts/bconv.ini b/tools/vision/scripts/bconv.ini new file mode 100644 index 0000000..1677500 --- /dev/null +++ b/tools/vision/scripts/bconv.ini @@ -0,0 +1,49 @@ +; INI file for Batch Conversion script sample +; All parameters shall be in BatchConv section +[BatchConv] +; SrcPath: Folder where source files are hold +SrcPath=H:\PURE_C\PROJECTS\VISION\IMGTEST\BYPLANES + +; SrcMask: mask for files of interest +SrcMask=*.* + +; SrcRecurse (0 or 1) if files of interst are to be searched in sub-folders +SrcRecurse=1 + +; OutputFormat: the 3 letter code for output format (e.g. DEG,GIF,TIF,JPG,PNG,...) +OutputFormat=TIF + +; DstPath: folder whare files will be converted to +DstPath=H:\PURE_C\PROJECTS\VISION\TEMP + +; ManageSrc: what to do with source file once successfully converted +; 0: Do nothing +; 1: Remove source +; 2: Move source to folder specified by DstMovePath +ManageSrc=0 + +; DstMovePath: if ManageSrc=2, move source files to this folder +DstMovePath= + +; ManageDst: what to do if destination file already exists +; 0: Over-write destination file +; 1: Cancel conversion +ManageDst=0 + +; NotCompatibleBehavior: what to do if destination format cannot handle the request (e.g. number of plans not supported) +; 0: Dither +; 1: Cancel +NotCompatibleBehavior=0 + +; Resize: resize source if width or height is exceeded +; 0: Don't resize +; 1: Resize as soon width or height is exceeded +Resize=0 + +; ResizeWidth: Width from which VISION will resize the image (keeping it proportional) +; Only used if Resize=1 +ResizeWidth=0 + +; ResizeHeight: Height from which VISION will resize the image (keeping it proportional) +; Only used if Resize=1 +ResizeHeight=0 diff --git a/tools/vision/scripts/buggy.vcs b/tools/vision/scripts/buggy.vcs new file mode 100644 index 0000000..fc323c9 --- /dev/null +++ b/tools/vision/scripts/buggy.vcs @@ -0,0 +1,12 @@ +; This script leads to issues on second pass +; VISION starts to report incorrect frees/leaks and crashes on exit +; The root cause is SPEC512.LDG failing on 3d_512.sps +; Fixed now from lp in a private message on http://www.atari-forum.com +iprio_set 1,3,2 +Loop 2 +cat_create H:\My_Documents\Documents\stimg.vic +cat_addfolder H:\My_Documents\Documents\stimg.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\*.* recurse +cat_openwicon H:\My_Documents\Documents\stimg.vic +wait 3000 +close H:\My_Documents\Documents\stimg.vic +Endloop \ No newline at end of file diff --git a/tools/vision/scripts/clip.vcs b/tools/vision/scripts/clip.vcs new file mode 100644 index 0000000..3dec88d --- /dev/null +++ b/tools/vision/scripts/clip.vcs @@ -0,0 +1,24 @@ +; LDV script sample +; Demonstrates how to use clip commands from VCS + +; Open a sample picture for demonstration +open H:\PURE_C\PROJECTS\VISION\IMGTEST\MARBLES.TIF + +; Select a block on this picture +clip_sel H:\PURE_C\PROJECTS\VISION\IMGTEST\MARBLES.TIF 16 16 256 192 + +; Copy that block into clipboard +clip_copy + +; Paste clipboard to new page (TGA extension does not matter, just specify some format here) +clip_pasten H:\PURE_C\PROJECTS\VISION\IMGTEST\CRAP.TGA + +; We don't need loaded picture anymore +close H:\PURE_C\PROJECTS\VISION\IMGTEST\MARBLES.TIF nosave + +; Save new image to disk +save H:\PURE_C\PROJECTS\VISION\IMGTEST\CRAP.TGA H:\PURE_C\PROJECTS\VISION\IMGTEST\CRAP.JPG + +; We don't need this image window anymore +; Note that image identifier did not change in spite of giving a different name for saving +close H:\PURE_C\PROJECTS\VISION\IMGTEST\CRAP.TGA nosave \ No newline at end of file diff --git a/tools/vision/scripts/clip_loop.vcs b/tools/vision/scripts/clip_loop.vcs new file mode 100644 index 0000000..45b2dd1 --- /dev/null +++ b/tools/vision/scripts/clip_loop.vcs @@ -0,0 +1,42 @@ +; LDV script sample +; Demonstrates automate image operations from a folder +; This script take each image from a folder, extract a block +; And saves that block as an image file + +; Inside the loop: +; current file is accessible via $LFCurrentFile global variable +; start folder (parameter#1 of Loop_Folder) is accessible via $LFStartFolder global variable +; Global function LFAdjustDest() allows to build destination file +; In such a way that it respects original folder hierachy, e.g.: +; Assuming LFStartFolder=H:\IMAGES +; And $LFCurrentFile=H:\IMAGES\BYPLANES\32\TC32.JPG +; Then LFAdjustDest($LFStartFolder,$LFCurrentFile,H:\OPTIMAL) will be H:\OPTIMAL\BYPLANES\32 + +; Starts the loop on a folder (not recursing) +Loop_Folder H:\PURE_C\PROJECTS\VISION\IMGTEST + +; Open current image file +open $LFCurrentFile + +; Select a block on this picture +clip_sel $LFCurrentFile 16 16 256 192 + +; Copy that block into clipboard +clip_copy + +; Paste clipboard to new page using same filename +clip_pasten LFAdjustDest($LFStartFolder,$LFCurrentFile,H:\PURE_C\PROJECTS\VISION\IMGTEST\TEMP) + +; We don't need loaded picture anymore +close $LFCurrentFile + +; Save new image to disk (same window name and filename) +; Note quality=90;compression=lzw +; This is to force JPEG quality to 90 and compression to LZW (TIFF) +save LFAdjustDest($LFStartFolder,$LFCurrentFile,H:\PURE_C\PROJECTS\VISION\IMGTEST\TEMP) LFAdjustDest($LFStartFolder,$LFCurrentFile,H:\PURE_C\PROJECTS\VISION\IMGTEST\TEMP) quality=90;compression=lzw + +; We don't need this image window anymore +close LFAdjustDest($LFStartFolder,$LFCurrentFile,H:\PURE_C\PROJECTS\VISION\IMGTEST\TEMP) + +; Proceed with next file in the folder +Endloop_Folder diff --git a/tools/vision/scripts/clip_paste.vcs b/tools/vision/scripts/clip_paste.vcs new file mode 100644 index 0000000..4f72371 --- /dev/null +++ b/tools/vision/scripts/clip_paste.vcs @@ -0,0 +1,25 @@ +; LDV script sample +; Demonstrates how to use clip command (copy/paste) from VCS + +; Open a sample picture for demonstration +open H:\PURE_C\PROJECTS\VISION\IMGTEST\MARBLES.TIF + +; Select a block on this picture +clip_sel H:\PURE_C\PROJECTS\VISION\IMGTEST\MARBLES.TIF 16 16 256 192 + +; Copy that block into clipboard +clip_copy + +; Paste clipboard to image at various locations +clip_paste H:\PURE_C\PROJECTS\VISION\IMGTEST\MARBLES.TIF 128 128 +clip_paste H:\PURE_C\PROJECTS\VISION\IMGTEST\MARBLES.TIF 512 512 +clip_paste H:\PURE_C\PROJECTS\VISION\IMGTEST\MARBLES.TIF 1280 800 + +; Save image to disk with new name +save H:\PURE_C\PROJECTS\VISION\IMGTEST\MARBLES.TIF H:\PURE_C\PROJECTS\VISION\IMGTEST\CRAP.TIF + +; We don't need this image window anymore +close H:\PURE_C\PROJECTS\VISION\IMGTEST\MARBLES.TIF nosave + +; Open saved picture to check it's OK +open H:\PURE_C\PROJECTS\VISION\IMGTEST\CRAP.TIF \ No newline at end of file diff --git a/tools/vision/scripts/ddualton.vcs b/tools/vision/scripts/ddualton.vcs new file mode 100644 index 0000000..0e98eb5 --- /dev/null +++ b/tools/vision/scripts/ddualton.vcs @@ -0,0 +1,17 @@ +; LDV script sample +; Using dither.ldv to dither files in a folder to dual tone +; Param1: method; auto, 1: matrixmono, 2: grey level, 3: 216 colors, 4: dual tone +; Param2: method parameter (only required as threshold for dual tone), -1: default or a number for the percent of max value +; Param3: number of planes for output (0 for current resolution) +Loop_Folder H:\PURE_C\PROJECTS\VISION\IMGTEST +open $LFCurrentFile +ldv_do $LFCurrentFile dither.ldv 4 -1 0 +sleep 800 +close $LFCurrentFile nosave +EndLoop_Folder +Loop_Folder I:\2020\10 +open $LFCurrentFile +ldv_do $LFCurrentFile dither.ldv 3 -1 0 +sleep 800 +close $LFCurrentFile nosave +EndLoop_Folder \ No newline at end of file diff --git a/tools/vision/scripts/dfixpal.vcs b/tools/vision/scripts/dfixpal.vcs new file mode 100644 index 0000000..271dede --- /dev/null +++ b/tools/vision/scripts/dfixpal.vcs @@ -0,0 +1,16 @@ +; LDV script sample +; Demonstrates how to optimize images using optimg.ldv +; This scripts loops over a folder and recursively start optimg.ldv +; On each image found to analyze it and find a better output format +; Based on its colors characteristics (e.g. a monochrome image saved +; As True Color will end up with a monochrome file, LZW compressed) + +; These images are stored in TC mode but have less than 256 colors +; They will be saved as images with fixed palette +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\rgb.tif optimg.ldv H:\PURE_C\PROJECTS\VISION\TEMP\rgb.tif Falcon +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\17c.tif optimg.ldv H:\PURE_C\PROJECTS\VISION\TEMP\17c.tif Falcon +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\rgbtc16.tif optimg.ldv H:\PURE_C\PROJECTS\VISION\TEMP\rgbtc16.tif Falcon +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\17ctc16.tif optimg.ldv H:\PURE_C\PROJECTS\VISION\TEMP\17ctc16.tif Falcon +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\marbles.tif optimg.ldv H:\PURE_C\PROJECTS\VISION\TEMP\marbles.tif Falcon +; Next one will fail as image has more than 256 colors +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\marbles.tif optimg.ldv H:\PURE_C\PROJECTS\VISION\TEMP\marbles.tif TIFForceDitherFixedPal256c \ No newline at end of file diff --git a/tools/vision/scripts/ibrowser.vcs b/tools/vision/scripts/ibrowser.vcs new file mode 100644 index 0000000..dfa0e45 --- /dev/null +++ b/tools/vision/scripts/ibrowser.vcs @@ -0,0 +1,10 @@ +; Image Browser Scripting +ibrw_open I:\tmp\1DSC00629.png +Loop 25 +ibrw_next +wait 300 +Endloop +Loop 25 +ibrw_prev +wait 300 +Endloop diff --git a/tools/vision/scripts/img_prio.vcs b/tools/vision/scripts/img_prio.vcs new file mode 100644 index 0000000..6a4ece6 --- /dev/null +++ b/tools/vision/scripts/img_prio.vcs @@ -0,0 +1,38 @@ +; Image Priorities control +iprio_set 1,3,2 +cat_create H:\My_Documents\Documents\stimg132.vic +cat_addfolder H:\My_Documents\Documents\stimg12.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\others\*.* recurse +cat_openwicon H:\My_Documents\Documents\stimg12.vic +wait 3000 + +iprio_set 3,2,1 +cat_create H:\My_Documents\Documents\stimg321.vic +cat_addfolder H:\My_Documents\Documents\stimg21.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\others\*.* recurse +cat_openwicon H:\My_Documents\Documents\stimg21.vic +wait 3000 + +iprio_set 3 +cat_create H:\My_Documents\Documents\stimg3.vic +cat_addfolder H:\My_Documents\Documents\stimg2.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\others\*.* recurse +cat_openwicon H:\My_Documents\Documents\stimg2.vic +wait 3000 + +iprio_set 2 +cat_create H:\My_Documents\Documents\stimg2.vic +cat_addfolder H:\My_Documents\Documents\stimg2.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\others\*.* recurse +cat_openwicon H:\My_Documents\Documents\stimg2.vic +wait 3000 + +iprio_set 1 +cat_create H:\My_Documents\Documents\stimg1.vic +cat_addfolder H:\My_Documents\Documents\stimg1.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\others\*.* recurse +cat_openwicon H:\My_Documents\Documents\stimg1.vic + +wait 60000 + + +close H:\My_Documents\Documents\stimg1.vic +close H:\My_Documents\Documents\stimg2.vic +close H:\My_Documents\Documents\stimg3.vic +close H:\My_Documents\Documents\stimg321.vic +close H:\My_Documents\Documents\stimg132.vic \ No newline at end of file diff --git a/tools/vision/scripts/ldv.vcs b/tools/vision/scripts/ldv.vcs new file mode 100644 index 0000000..04d3ab8 --- /dev/null +++ b/tools/vision/scripts/ldv.vcs @@ -0,0 +1,10 @@ +; LDV script sample +open H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_3mbmb.png +ldv_do H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_3mbmb.png rotate.ldv 45 +ldv_do H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_3mbmb.png bhole.ldv 250 50 50 +ldv_do H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_3mbmb.png gamma.ldv 150 50 100 +ldv_do H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_3mbmb.png pixel.ldv 3 +ldv_do H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_3mbmb.png xwave.ldv 80 60 +ldv_do H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_3mbmb.png ywave.ldv 100 80 +ldv_do H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_3mbmb.png ypersc.ldv 300 50 +ldv_do H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_3mbmb.png bw.ldv \ No newline at end of file diff --git a/tools/vision/scripts/ldvcnt.vcs b/tools/vision/scripts/ldvcnt.vcs new file mode 100644 index 0000000..d22bbb1 --- /dev/null +++ b/tools/vision/scripts/ldvcnt.vcs @@ -0,0 +1,20 @@ +; LDV script sample for CNTCOL.LDV +open H:\PURE_C\PROJECTS\VISION\IMGTEST\TGA\MARBLES.TGA +ldv_do H:\PURE_C\PROJECTS\VISION\IMGTEST\TGA\MARBLES.TGA cntcol.ldv 1 H:\marbles1.txt +ldv_do H:\PURE_C\PROJECTS\VISION\IMGTEST\TGA\MARBLES.TGA cntcol.ldv 2 H:\marbles2.txt +ldv_do H:\PURE_C\PROJECTS\VISION\IMGTEST\TGA\MARBLES.TGA cntcol.ldv 3 H:\marbles3.txt + +open H:\PURE_C\PROJECTS\VISION\IMGTEST\TGA\rwhite.TGA +ldv_do H:\PURE_C\PROJECTS\VISION\IMGTEST\TGA\rwhite.TGA cntcol.ldv 1 H:\rwhite1.txt +ldv_do H:\PURE_C\PROJECTS\VISION\IMGTEST\TGA\rwhite.TGA cntcol.ldv 2 H:\rwhite2.txt +ldv_do H:\PURE_C\PROJECTS\VISION\IMGTEST\TGA\rwhite.TGA cntcol.ldv 3 H:\rwhite3.txt + +open H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_10mbmb.png +ldv_do H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_10mbmb.png cntcol.ldv 1 H:\spng1.txt +ldv_do H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_10mbmb.png cntcol.ldv 2 H:\spng2.txt +ldv_do H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_10mbmb.png cntcol.ldv 3 H:\spng3.txt + +open H:\PURE_C\PROJECTS\VISION\IMGTEST\BYPLANES\32\16m.tif +ldv_do H:\PURE_C\PROJECTS\VISION\IMGTEST\BYPLANES\32\16m.tif cntcol.ldv 1 H:\16m1.txt +ldv_do H:\PURE_C\PROJECTS\VISION\IMGTEST\BYPLANES\32\16m.tif cntcol.ldv 2 H:\16m2.txt +ldv_do H:\PURE_C\PROJECTS\VISION\IMGTEST\BYPLANES\32\16m.tif cntcol.ldv 3 H:\16m3.txt diff --git a/tools/vision/scripts/ldvcntf.vcs b/tools/vision/scripts/ldvcntf.vcs new file mode 100644 index 0000000..0f4a66a --- /dev/null +++ b/tools/vision/scripts/ldvcntf.vcs @@ -0,0 +1,20 @@ +; LDV script sample for CNTCOL.LDV +; This one is working directly from the image file +; So it does not depend on the number of planes of the screen +; Remember VISION always works with images wih same number of planes than the screen +; As soon image is displayed/grapihcal tools used +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\TGA\MARBLES.TGA cntcol.ldv 1 H:\marbles1.txt +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\TGA\MARBLES.TGA cntcol.ldv 2 H:\marbles2.txt +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\TGA\MARBLES.TGA cntcol.ldv 3 H:\marbles3.txt + +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\TGA\rwhite.TGA cntcol.ldv 1 H:\rwhite1.txt +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\TGA\rwhite.TGA cntcol.ldv 2 H:\rwhite2.txt +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\TGA\rwhite.TGA cntcol.ldv 3 H:\rwhite3.txt + +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_10mbmb.png cntcol.ldv 1 H:\spng1.txt +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_10mbmb.png cntcol.ldv 2 H:\spng2.txt +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_10mbmb.png cntcol.ldv 3 H:\spng3.txt + +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\BYPLANES\32\16m.tif cntcol.ldv 1 H:\16m1.txt +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\BYPLANES\32\16m.tif cntcol.ldv 2 H:\16m2.txt +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\BYPLANES\32\16m.tif cntcol.ldv 3 H:\16m3.txt diff --git a/tools/vision/scripts/ldvf.vcs b/tools/vision/scripts/ldvf.vcs new file mode 100644 index 0000000..88d57bd --- /dev/null +++ b/tools/vision/scripts/ldvf.vcs @@ -0,0 +1,10 @@ +; LDV script sample +; Dummy test as -f: instructs LDV will work from the original file so no display +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_3mbmb.png rotate.ldv 45 +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_3mbmb.png bhole.ldv 250 50 50 +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_3mbmb.png gamma.ldv 150 50 100 +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_3mbmb.png pixel.ldv 3 +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_3mbmb.png xwave.ldv 80 60 +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_3mbmb.png ywave.ldv 100 80 +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_3mbmb.png ypersc.ldv 300 50 +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_3mbmb.png bw.ldv \ No newline at end of file diff --git a/tools/vision/scripts/ldvini.vcs b/tools/vision/scripts/ldvini.vcs new file mode 100644 index 0000000..715a8e7 --- /dev/null +++ b/tools/vision/scripts/ldvini.vcs @@ -0,0 +1,6 @@ +; LDV script sample +open H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_1mbmb.png +ldv_doip H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_1mbmb.png rotate.ldv protate.ini +ldv_doip H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_1mbmb.png puzzle.ldv ppuzzle.ini +ldv_doip H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_1mbmb.png invert.ldv pinvert.ini +ldv_doip H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_1mbmb.png light.ldv plight.ini \ No newline at end of file diff --git a/tools/vision/scripts/ldvopt.vcs b/tools/vision/scripts/ldvopt.vcs new file mode 100644 index 0000000..49b5be5 --- /dev/null +++ b/tools/vision/scripts/ldvopt.vcs @@ -0,0 +1,33 @@ +; LDV script sample +; Demonstrates how to optimize images using optimg.ldv +; This scripts loops over a folder and recursively start optimg.ldv +; On each image found to analyze it and find a better output format +; Based on its colors characteristics (e.g. a monochrome image saved +; As True Color will end up with a monochrome file, LZW compressed) + +; Inside the loop: +; current file is accessible via $LFCurrentFile global variable +; start folder (parameter#1 of Loop_Folder) is accessible via $LFStartFolder global variable +; Global function LFAdjustDest() allows to build destination file +; In such a way that it respects original folder hierachy, e.g.: +; Assuming LFStartFolder=H:\IMAGES +; And $LFCurrentFile=H:\IMAGES\BYPLANES\32\TC32.JPG +; Then LFAdjustDest($LFStartFolder,$LFCurrentFile,H:\OPTIMAL) will be H:\OPTIMAL\BYPLANES\32 + +; Call optimg.ldv as follows: +; ldv_do -f: optimg.ldv +; : filename of the file (full path recommended) +; : if folder, LDV will build filename based on original file name extension decided by profile +; if file, only extension will be changed +;Loop_Folder H:\PURE_C\PROJECTS\VISION\IMGTEST recurse +Loop_Folder H:\tmp\axa\05 recurse +;ldv_do -f:$LFCurrentFile optimg.ldv LFAdjustDest($LFStartFolder,$LFCurrentFile,H:\PURE_C\PROJECTS\VISION\TEMP\Aranym) DualToneLikely +ldv_do -f:$LFCurrentFile optimg.ldv LFAdjustDest($LFStartFolder,$LFCurrentFile,H:\tmp\axa\opt\05) DualToneLikely +Endloop_Folder + + +; Other examples: +;ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\MARBLES.TIF optimg.ldv H:\PURE_C\PROJECTS\VISION\TEMP\Falcon Falcon +;ldv_do -f:H:\tmp\z\39\aquila-002.tif optimg.ldv H:\PURE_C\PROJECTS\VISION\TEMP\aquila-002.tif DualToneLikely +;ldv_do -f:H:\tmp\z\39\aquila-003.tif optimg.ldv H:\PURE_C\PROJECTS\VISION\TEMP\aquila-003.tif DualToneLikely +; --> Will generate H:\PURE_C\PROJECTS\VISION\TEMP\ST\MARBLES.JPG (assuming MARBLES.TIF is a TC24 image) diff --git a/tools/vision/scripts/ldvopt256c.vcs b/tools/vision/scripts/ldvopt256c.vcs new file mode 100644 index 0000000..1063acb --- /dev/null +++ b/tools/vision/scripts/ldvopt256c.vcs @@ -0,0 +1,5 @@ +; LDV Dither to 256 colors using optimg.ldv +; We are using optimg.ldv and not dither.ldv because +; dither.ldv can't save the file +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_5mbmb.png optimg.ldv H:\PURE_C\PROJECTS\VISION\TEMP\SamplePNGImage_5mbmb.tif TIFForceDither256c +ldv_do -f:H:\PURE_C\PROJECTS\VISION\IMGTEST\PNG\3\SamplePNGImage_3mbmb.png optimg.ldv H:\PURE_C\PROJECTS\VISION\TEMP\SamplePNGImage_3mbmb.img IMGForceDither256c \ No newline at end of file diff --git a/tools/vision/scripts/lloopfol.vcs b/tools/vision/scripts/lloopfol.vcs new file mode 100644 index 0000000..d6b2aa9 --- /dev/null +++ b/tools/vision/scripts/lloopfol.vcs @@ -0,0 +1,21 @@ +; Load/close images from a folder +; Command: +; Loop_Folder [] [recurse] +; Inside the loop: +; current file is accessible via $LFCurrentFile global variable +; start folder (parameter#1 of Loop_Folder) is accessible via $LFStartFolder global variable +; Global function LFAdjustDest() allows to build destination file +; In such a way that it respect original folder hierachy, e.g.: +; LFStartFolder=H:\IMAGES +; $LFCurrentFile=H:\IMAGES\BYPLANES\32\TC32.JPG +; LFAdjustDest($LFStartFolder,$LFCurrentFile,H:\OPTIMAL) will be H:\OPTIMAL\BYPLANES\32 + +form_silent +prog_silent +Loop_Folder H:\PURE_C\PROJECTS\VISION\IMGTEST recurse +open $LFCurrentFile +sleep 100 +close $LFCurrentFile +Endloop_Folder +form_silent 0 +prog_silent 0 diff --git a/tools/vision/scripts/loadloop.vcs b/tools/vision/scripts/loadloop.vcs new file mode 100644 index 0000000..baaff14 --- /dev/null +++ b/tools/vision/scripts/loadloop.vcs @@ -0,0 +1,13 @@ +; Image Priorities control +form_silent +iprio_set 1,3,2 +Loop 200 +open H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\gem_image\img\04\yel.img +open H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\gem_image\sttt\teststtt.img +open H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\gem_image\ventura\16color.img +close H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\gem_image\img\04\yel.img +close H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\gem_image\ventura\16color.img +;close H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\gem_image\timg\fsnap32k.img +close H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\gem_image\sttt\teststtt.img +Endloop +form_silent 0 \ No newline at end of file diff --git a/tools/vision/scripts/main.vcs b/tools/vision/scripts/main.vcs new file mode 100644 index 0000000..6c41277 --- /dev/null +++ b/tools/vision/scripts/main.vcs @@ -0,0 +1,67 @@ +; This is a VISION Command Script example +; Used to automate actions in VISION +; Global Syntax: +; - Each line represents a command to execute +; - A command may or may not have parameters +; - Some parameters are mandatory (between <>) or optional (between []) +; - if has a space character, surround it par quote character " +; Available commands are: +; ';' : Comment line, ignored for processing +; 'open' : opens a file just as File->Open menu +; Syntax: open +; Comment: +; 'close' : closes a window (image or catalog) +; Syntax: close [nosave] +; Comment: +; 'wait' : Wait some time before running the next command +; Syntax: wait +; Comment: Don't expect much accuracy here sleep keyword can be used also +; 'loop': start a loop +; Syntax: loop +; Comment: +; 'endloop': ends a loop +; Syntax: endloop +; Comment: +; 'quit' : Quit VISION just as File->Quit +; Syntax: quit +; Comment: exit keyword can also be used +; 'run_script' : runs a new script from the current one +; Syntax: run_script +; Comment: filename can be a full pathname or relative to the path or the current script +; 'cat_create' : Create a new catalog file and opens it +; Syntax: cat_create +; Comment: +; 'cat_addfile' : Adds an image file to an existing catalog +; Syntax: cat_create +; Comment: must have been created/opened previously with cat_create or open +; 'cat_addfolder' : Adds a folder of image files to an existing catalog +; Syntax: cat_addfolder [recurse] +; Comment: must have been created/opened previously with cat_create or open +; recurse is an optional parameter, if present all images files into sub-folders will be added +; 'cat_openwicon' : Opens the window icon album from the album window dialog +; Syntax: cat_openwicon +; Comment: must have been created/opened previously with cat_create or open +; This window can be closed by using command close Walb_ +; 'cat_setini' : Associates an INI file to a catalog et applies it +; Syntax: cat_setini +; Comment: must have been created/opened previously with cat_create or open +; 'ibrw_open' : Opens a file into Image Browser to nagigate through its folder +; Syntax: ibrw_open +; Comment: +; 'ibrw_next' : Opens next file in Image Browser folder +; Syntax: ibrw_next +; Comment: +; 'ibrw_prev' : Opens previous file in Image Browser folder +; Syntax: ibrw_prev +; Comment: + +cat_create H:\My_Documents\Documents\stest.vic +cat_setini H:\My_Documents\Documents\stest.vic H:\My_Documents\Documents\photos.ini +cat_addfolder H:\My_Documents\Documents\stest.vic I:\2019\03\*.* +cat_addfolder H:\My_Documents\Documents\stest.vic I:\2017\2017-10\*.* recurse +cat_openwicon H:\My_Documents\Documents\stest.vic +;wait 2000 +;close Walb_H:\My_Documents\Documents\stest.vic +;wait 1000 +;close H:\My_Documents\Documents\stest.vic + diff --git a/tools/vision/scripts/muchram.vcs b/tools/vision/scripts/muchram.vcs new file mode 100644 index 0000000..f1fd0a9 --- /dev/null +++ b/tools/vision/scripts/muchram.vcs @@ -0,0 +1,25 @@ +; muchram.vcs +; Load many modules to have some RAM usage for them and +; Try to load a BIG picture to check modules are unloaded +; Do not try all folders under ST-Picture-Formats\samples +; As IMG.LDG module has a bug, don't go through gem_images +cat_create H:\My_Documents\Documents\tst.vic +cat_addfolder H:\My_Documents\Documents\tst.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\degas\*.* recurse +cat_addfolder H:\My_Documents\Documents\tst.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\deluxe_paint\*.* recurse +cat_addfolder H:\My_Documents\Documents\tst.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\apex_media\*.* recurse +cat_addfolder H:\My_Documents\Documents\tst.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\falcon_tc\*.* recurse +cat_addfolder H:\My_Documents\Documents\tst.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\crackart\*.* recurse +cat_addfolder H:\My_Documents\Documents\tst.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\gfa_raytrace\*.* recurse +cat_addfolder H:\My_Documents\Documents\tst.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\imagelab\*.* recurse +cat_addfolder H:\My_Documents\Documents\tst.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\neochrome\*.* recurse +cat_addfolder H:\My_Documents\Documents\tst.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\misc\*.* recurse +cat_addfolder H:\My_Documents\Documents\tst.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\pixart\*.* recurse +cat_addfolder H:\My_Documents\Documents\tst.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\spectrum\*.* recurse +cat_addfolder H:\My_Documents\Documents\tst.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\computereyes\*.* recurse +cat_addfolder H:\My_Documents\Documents\tst.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\TGA\*.* recurse +cat_addfolder H:\My_Documents\Documents\tst.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\BYPLANES\*.* recurse +cat_openwicon H:\My_Documents\Documents\tst.vic +wait 3000 +close Walb_H:\My_Documents\Documents\tst.vic +open I:\Demoscene.jpg +open I:\Demoscene1.jpg \ No newline at end of file diff --git a/tools/vision/scripts/muchram2.vcs b/tools/vision/scripts/muchram2.vcs new file mode 100644 index 0000000..d7e7615 --- /dev/null +++ b/tools/vision/scripts/muchram2.vcs @@ -0,0 +1,13 @@ +; muchram2.vcs +; Load many modules to have some RAM usage for them and +; Try to load a BIG picture to check modules are unloaded +; Assuming IMG.LDG module does not corrupt memory when ientifying fsnap32k.img +cat_create H:\My_Documents\Documents\tst.vic +cat_addfolder H:\My_Documents\Documents\tst.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\*.* recurse +cat_addfolder H:\My_Documents\Documents\tst.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\TGA\*.* recurse +cat_addfolder H:\My_Documents\Documents\tst.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\BYPLANES\*.* recurse +cat_openwicon H:\My_Documents\Documents\tst.vic +wait 3000 +close Walb_H:\My_Documents\Documents\tst.vic +open I:\Demoscene.jpg +open I:\Demoscene1.jpg \ No newline at end of file diff --git a/tools/vision/scripts/opnsav.vcs b/tools/vision/scripts/opnsav.vcs new file mode 100644 index 0000000..948ad7d --- /dev/null +++ b/tools/vision/scripts/opnsav.vcs @@ -0,0 +1,8 @@ +; LDV script sample +; Demonstrates how to open/save images with saving options +open H:\PURE_C\PROJECTS\VISION\IMGTEST\MARBLES.TIF +save H:\PURE_C\PROJECTS\VISION\IMGTEST\MARBLES.TIF H:\PURE_C\PROJECTS\VISION\IMGTEST\mtest.tga +save H:\PURE_C\PROJECTS\VISION\IMGTEST\MARBLES.TIF H:\PURE_C\PROJECTS\VISION\IMGTEST\mtest.tif compression=lzw;byteorder=intel +; next line does not support all these options, you will see some info in vision.log about that but file is still saved +save H:\PURE_C\PROJECTS\VISION\IMGTEST\MARBLES.TIF H:\PURE_C\PROJECTS\VISION\IMGTEST\mtest2.tga quality=80;flipflop=2;byteorder=motorola +save H:\PURE_C\PROJECTS\VISION\IMGTEST\MARBLES.TIF H:\PURE_C\PROJECTS\VISION\IMGTEST\mtest.jpg quality=50 diff --git a/tools/vision/scripts/photos.ini b/tools/vision/scripts/photos.ini new file mode 100644 index 0000000..93fab91 --- /dev/null +++ b/tools/vision/scripts/photos.ini @@ -0,0 +1,87 @@ +; First start with categories that won't stop processing +; Cont = 1 means if match continue with other Lookxx +; There can be up to 50 Lookxx from Look00 to Look49 +[Look0] +Path=[corse] +Cat2=Corse +Continue=1 + +[Look1] +Path=[paris] +Cat2=Paris +Continue=1 + +[Look3] +Path=[hawai] +Cat2=Hawai +Continue=1 + +[Look4] +Path=[mazamet] +Cat2=Mazamet +Continue=1 + +[Look5] +Path=[rome] +Cat2=Rome +Continue=1 + +[Look6] +Path=[old] +Cat2=Ancien +Continue=1 + +[Look7] +Path=[imgtest] +Cat2=TestSample +Continue=1 + +; Then those for which when there is a match +; Procesing will stop there as these categories are exclusive +[Look10] +Path=I:\200?\*.* +Cat1=2005-2009 + +[Look11] +Path=I:\2010\*.* +Cat1=2010-2015 + +[Look12] +Path=I:\2011\*.* +Cat1=2010-2015 + +[Look13] +Path=I:\2012\*.* +Cat1=2010-2015 + +[Look14] +Path=I:\2013\*.* +Cat1=2010-2015 + +[Look15] +Path=I:\2014\*.* +Cat1=2010-2015 + +[Look16] +Path=I:\2015\*.* +Cat1=2010-2015 + +[Look17] +Path=I:\2016\*.* +Cat1=2016-2020 + +[Look18] +Path=I:\2017\*.* +Cat1=2016-2020 + +[Look19] +Path=I:\2018\*.* +Cat1=2016-2020 + +[Look20] +Path=I:\2019\*.* +Cat1=2016-2020 + +[Look21] +Path=I:\2020\*.* +Cat1=2016-2020 diff --git a/tools/vision/scripts/pinvert.ini b/tools/vision/scripts/pinvert.ini new file mode 100644 index 0000000..1907e63 --- /dev/null +++ b/tools/vision/scripts/pinvert.ini @@ -0,0 +1,5 @@ +[LDVParams] +x1=70% +x2=90% +y1=10% +y2=30% diff --git a/tools/vision/scripts/plight.ini b/tools/vision/scripts/plight.ini new file mode 100644 index 0000000..386e2f7 --- /dev/null +++ b/tools/vision/scripts/plight.ini @@ -0,0 +1,10 @@ +[LDVParams] +x1=70% +x2=95% +y1=65% +y2=90% + +Parameter1=100 +Parameter2=100 +Parameter3=50 +Parameter4=110 diff --git a/tools/vision/scripts/ppuzzle.ini b/tools/vision/scripts/ppuzzle.ini new file mode 100644 index 0000000..eb4c389 --- /dev/null +++ b/tools/vision/scripts/ppuzzle.ini @@ -0,0 +1,9 @@ +[LDVParams] +x1=10% +x2=30% +y1=70% +y2=90% + +Parameter1=20 +Parameter2=15 +Parameter3=20 diff --git a/tools/vision/scripts/protate.ini b/tools/vision/scripts/protate.ini new file mode 100644 index 0000000..66e6c1e --- /dev/null +++ b/tools/vision/scripts/protate.ini @@ -0,0 +1,7 @@ +[LDVParams] +x1=40% +x2=60% +y1=40% +y2=60% + +Parameter1=45 diff --git a/tools/vision/scripts/readme.txt b/tools/vision/scripts/readme.txt new file mode 100644 index 0000000..e54c9d6 --- /dev/null +++ b/tools/vision/scripts/readme.txt @@ -0,0 +1,2 @@ +Please take these scripts as educational samples; they are very depending on my own configuration. +This is just to give you an idea of how VISION scripting works, they are not intended to be working in general as image file location is surely not identical. \ No newline at end of file diff --git a/tools/vision/scripts/s0.vcs b/tools/vision/scripts/s0.vcs new file mode 100644 index 0000000..ba3de1a --- /dev/null +++ b/tools/vision/scripts/s0.vcs @@ -0,0 +1,6 @@ +; Catalog all ST images +cat_create H:\My_Documents\Documents\s0.vic +cat_addfile H:\My_Documents\Documents\s0.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\BYPLANES\32\XING_B32.TGA +cat_openwicon H:\My_Documents\Documents\s0.vic +wait 5000 +close H:\My_Documents\Documents\s0.vic diff --git a/tools/vision/scripts/s1.vcs b/tools/vision/scripts/s1.vcs new file mode 100644 index 0000000..a11d591 --- /dev/null +++ b/tools/vision/scripts/s1.vcs @@ -0,0 +1,8 @@ +; Catalog all ST images +Loop 2 +cat_create H:\My_Documents\Documents\stimg.vic +cat_addfolder H:\My_Documents\Documents\stimg.vic H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\*.* recurse +cat_openwicon H:\My_Documents\Documents\stimg.vic +wait 3000 +close H:\My_Documents\Documents\stimg.vic +Endloop \ No newline at end of file diff --git a/tools/vision/scripts/spec512.vcs b/tools/vision/scripts/spec512.vcs new file mode 100644 index 0000000..d531ac7 --- /dev/null +++ b/tools/vision/scripts/spec512.vcs @@ -0,0 +1,5 @@ +iprio_set 1,3,2 +Loop 2000 +open H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\spectrum\unispec\3d_512.sps +close H:\PURE_C\PROJECTS\VISION\IMGTEST\ST-Picture-Formats\samples\spectrum\unispec\3d_512.sps +Endloop \ No newline at end of file diff --git a/tools/vision/TCW128.DAT b/tools/vision/tcw128.dat similarity index 98% rename from tools/vision/TCW128.DAT rename to tools/vision/tcw128.dat index 6f05dd5..5e10422 100644 Binary files a/tools/vision/TCW128.DAT and b/tools/vision/tcw128.dat differ diff --git a/tools/vision/TCW64.DAT b/tools/vision/tcw64.dat similarity index 100% rename from tools/vision/TCW64.DAT rename to tools/vision/tcw64.dat diff --git a/tools/vision/VISION.IMG b/tools/vision/vision.img similarity index 100% rename from tools/vision/VISION.IMG rename to tools/vision/vision.img diff --git a/tools/vision/vision.ini b/tools/vision/vision.ini index 3f1a49a..83b5e7a 100644 --- a/tools/vision/vision.ini +++ b/tools/vision/vision.ini @@ -2,15 +2,14 @@ ; Image Modules. There are 2 modules managed by VISION: ; 1: Internal modules (in VISION's prg file) ; 2: zView LDG modules +; 3: zView IM modules +; 4: zView SLB modules ; Global defines a generic rule for all image formats -; Some examples: +; Some example: ; Global=2,1 -; --> Prefer zView plugins to load images -; Global=1 -; --> Only use VISION's internal modules to load images -; By default VISION will prefer its own modules and fall back to zView plugin if not supported +; By default VISION will prefer its own modules and fall back to zView IM then LDG plugin if not supported: [Img Priorities] -Global = 1,2 +Global = 1,3,2 [SlideShow] DisplayProg = 1 @@ -35,14 +34,15 @@ HandleLock = 0 UseDSP = 0 [Folders] -zvLDG = -LDV = -Album = -Filters = -DSP = -Images = -Temp = -Languages = +zvLDG = C:\tools\vision\zvLDG +LDV = C:\tools\vision\LDV +Album = C:\tools\vision +Filters = C:\tools\vision\FILTRES +DSP = C:\tools\vision\DSP +Images = C:\tools\vision +Temp = C:\tools\vision\TEMP +Languages = C:\tools\vision\LANGUES +ImgMod = C:\GEMSYS\IMGMOD [Logging] ; LoggingFlags: @@ -61,7 +61,7 @@ Languages = ; TMP2 $000008 ; TMP1 $000004 ; Unsed bits can be set to 0 or 1 -LoggingFlags = 1ff900f +LoggingFlags = 1ff9000 LoggingFile = vision.log ; FlushFreq is used to avoid flushing log to disk ; For every log request: @@ -76,8 +76,6 @@ LoggingFlushFreq = 1 PreviewDstSize = 640 ; PreviewSrcSize to 0 will simply show only result of LDV PreviewSrcSize = 0 -MePriority = 0 -ShowPerf = 0 ; You can hide processors to LDV (e.g. for testing) Hide030 = 0 HideFPU = 0 @@ -88,12 +86,6 @@ SnapKeyDirect = 652f SnapKeyViaConfig = 662a SnapFlags = 1 -[Log] -; Pretty misnamed here, it's just a facility to generate a slide show file (.vss) -; By loading pictures -LogFlags = 0 -LogFile = - [Graphics] PColor = 1 PHeight = 16 @@ -124,6 +116,8 @@ TWCar = 7 MaskOutside = 0 EraserForm = 0 WriteMode = 1 +; Here is the thickness list mapped to Control-1 to Control-9 +Thickness = 1,4,7,10,14,18,22,26,30 [Real Time Zoom] RTHeight = 128 @@ -154,7 +148,7 @@ FullScreen = 0 DisplayToolBar = 1 SplashWindow = 0 DitherAuto = 1 -HelpBubbles = 1 +HelpBubbles = 0 Language = ENGLISH ; RSRC choice for loading resources ; -1: Auto (default) @@ -162,3 +156,19 @@ Language = ENGLISH ; 1: Use regular rsrc provided by AES ; -1 should work always but TC32 on a Falcon+Radeon card RsrcChoice = -1 +HexDumpOnError = 1 +ShowIBrowser = 1 + +[Update] +Choice = 1 +LastCheck = 0 +MinCheck = 604800 +TrustedCAFile = +; TrustedCAFile must be filled-in only if https is enforced (yes http://vision2.atari.org redirects to a https website) +; cacert.pem must be in VISION's folder, cacert.pem can be found at https://curl.se/docs/caextract.html or https://github.com/freemint/git/releases/download/v2.11.0-m68k/certs.tar.bz2 +; TrustedCAFile must point to a file which contains RootCA for Let's Encrypt +; If TrustedCAFile is empty, curl can still use https but in "insecure mode" (curl does not check against server certificate) +; By default, wget (http only) is defined +Enabled = 1 +Updater = wget +URL = http://vision.atari.org/vupdate/staging/ diff --git a/tools/vision/vision.prg b/tools/vision/vision.prg new file mode 100644 index 0000000..3db2e6a Binary files /dev/null and b/tools/vision/vision.prg differ diff --git a/tools/vision/vision.ver b/tools/vision/vision.ver new file mode 100644 index 0000000..d77b59f --- /dev/null +++ b/tools/vision/vision.ver @@ -0,0 +1,324 @@ +Version = 4.9b2 +cacert.pem 208065 ae31ecb3c6e9ff3154cb7a55f017090448f88482f0e94ac927c0c67a1f33b9cf +dsp\convol.lod 3317 1737051a7c3778e869a45af36b42b1b1b6d3f6bae83a89f3045ab7001459ff04 +dsp\exjpegd.prg 10640 65733cdd3adc51c34bb5ba51425771d00bd3f7f0ab81470ded1813976b330026 +dsp\jpegd.prg 10640 f5a7b46c4b76a0d2480e3362b6bc299d93308f57ac309323d9c5f7a740096108 +dsp\nfjpeg.prg 3132 1965f30e520dce312bdfc4d83333ab4962624b1db058e133a3ca7613f6bdd087 +filtres\bidon.vcf 95 5a0536e46f43588de2acdb63af65171fe425d86ff85cb2758971c2dda6f3f62c +filtres\english\bidon.vcf 95 5a0536e46f43588de2acdb63af65171fe425d86ff85cb2758971c2dda6f3f62c +filtres\english\flou1.vcf 95 f6c01a0ad3c50f311ec0a7e7b0d732967cfd5e1744f8060f11cc0e86eaeae9e6 +filtres\english\flou2.vcf 95 77ca64a156a7590ab0e076eaca49acec92f563fb42d6208ed2300a17d11806f6 +filtres\english\flou3.vcf 95 fad6c9509267cb77adb207cb2cc2e88ef7833108a0fbc4e8b4c995054d08fb56 +filtres\english\flou551.vcf 111 df82ceeeb4b8c2e9e6d8c038690bae8bd4bcd77fc53dd201409d8ba6d4640502 +filtres\english\flou552.vcf 111 5930ad0a3052a168447a445b602090fd0a11f56f1d832df6200c94fe7b3f7d46 +filtres\english\flou553.vcf 111 62b9519fb5aa5626a479b3681a02e5b64a41e55af3db1d0b1557e9b036fac2cc +filtres\english\flou554.vcf 111 0496f73d4e10ef761026c1074cc3a22ab9a678b3b8b42f7a1c319c10015666ca +filtres\english\grad33e.vcf 95 efe2921bb4aae7082152334cca4702a636eb6325f4d7204a81a2c9e813af69ab +filtres\english\grad33n.vcf 95 d74fbf28d899356ffd169da07095059fa3f1c44b55e7d6ee8e36793222f5d45a +filtres\english\grad33ne.vcf 95 99d4c9fb5692f7b140134a99a6f2a134b505c3f2acdddae639563add26ffc778 +filtres\english\grad33no.vcf 95 42c31b748bd9100393fb232552d3d0cc4392d364d48efb2dd745216b58d7da88 +filtres\english\grad33o.vcf 95 6565a16e944b4f22fa881cdad32e22f12ef7811a2e60a1f2a07eff2d347c3140 +filtres\english\grad33s.vcf 95 8329d93032c150cb4f33b9ad4d4d50626db3022f2bd45a4f6977e69f16794fae +filtres\english\grad33se.vcf 95 1ce396f47f1558c838894a238265c8c25f6c6501b37cc5807329205c104da654 +filtres\english\grad33so.vcf 95 a51cd5079b2a02c9bf3dcbc9c473cb09d349894115cab1023540c64970a82c8a +filtres\english\lapla331.vcf 95 bbcc66770daa9a367e8a8a203c7067ba5d837484594719621322794637fbe949 +filtres\english\lapla551.vcf 111 845ae796b308c133e0c4f95d6c22a853c93963e386e22ee23aa0b6a831260058 +filtres\english\net331.vcf 95 86e94ff16b1f63d7884460ea715dc6cc329bee962b5723fcbb1a6b8dce094a6a +filtres\english\obre3de.vcf 95 37023885dbacba0e64ba2f19187db16fe0b4f4780f3fc8d496e150b87fcaaa88 +filtres\english\obre3dne.vcf 95 517206d698043ca38f6261c3ce8a1c916b15cf00a0740847259544005f7eebab +filtres\english\obre3dno.vcf 95 b7b598955bd88edde5a3e40e00e34339413d8a0b35de9fd0b7063a90e6e4f7df +filtres\english\obre3do.vcf 95 27c9a4ad730ce4398de3b9ea6d1f04039199ce87d5d91c38ad15c42abf20d629 +filtres\english\obre3dse.vcf 95 9131d2ecf9fdc215f705ef8482162aa6b35c12c39ab4c84f7c68d15281b7f6c5 +filtres\english\obre3dso.vcf 95 b80b25900fc4fef3c31f6070b82c6a0d103ed92ba034c8f81b38a9de9c456227 +filtres\english\perso331.vcf 95 6605160ae1374aeed5c33616c01b0825eec0d7bfd5b489fb270152e1a959f227 +filtres\english\perso332.vcf 95 10436d4abcd4b10689ff41ba74762682b77f5b0084f0409908e19d22662eeaf3 +filtres\english\perso333.vcf 95 98baf4815d51dbb11bc5308418281877ee7a60c63665bcb105b43005f793244c +filtres\english\perso334.vcf 95 c7de7deaf17847492de2538b209e38138be361f1da1df69ebba0da7c3d487c23 +filtres\english\xxx.vcf 95 f888f206d1e735a61d7d568acce9c81bd4a432d2911a0e8eb00884028af4abc4 +filtres\flou1.vcf 95 f6c01a0ad3c50f311ec0a7e7b0d732967cfd5e1744f8060f11cc0e86eaeae9e6 +filtres\flou2.vcf 95 77ca64a156a7590ab0e076eaca49acec92f563fb42d6208ed2300a17d11806f6 +filtres\flou3.vcf 95 fad6c9509267cb77adb207cb2cc2e88ef7833108a0fbc4e8b4c995054d08fb56 +filtres\flou551.vcf 111 df82ceeeb4b8c2e9e6d8c038690bae8bd4bcd77fc53dd201409d8ba6d4640502 +filtres\flou552.vcf 111 5930ad0a3052a168447a445b602090fd0a11f56f1d832df6200c94fe7b3f7d46 +filtres\flou553.vcf 111 62b9519fb5aa5626a479b3681a02e5b64a41e55af3db1d0b1557e9b036fac2cc +filtres\flou554.vcf 111 0496f73d4e10ef761026c1074cc3a22ab9a678b3b8b42f7a1c319c10015666ca +filtres\francais\bidon.vcf 95 c63dfeb18899af3ab0135b33dee0a742d507f9dc2f638f8a770c32293a5fb113 +filtres\francais\flou1.vcf 95 b7c75fb64e8c07f8f5a2bd89ac24a13b3b710711b1e46f03d81e4661b3b85428 +filtres\francais\flou2.vcf 95 c5c41646ac823f7653a3eaedf78407a9199d4c94f692abca4468328c731e8522 +filtres\francais\flou3.vcf 95 7eeec8b27558634d0ea66585b6d8746c341f4c6eac2f109265fb815cfeac6965 +filtres\francais\flou551.vcf 111 402862a9b0ae431e1a95e9b667fc0be5c67e2e12a68a412310850f5db2451641 +filtres\francais\flou552.vcf 111 18bfef3e46d0f8c135362193bea660cc9da7f621700afb170c848a011b146206 +filtres\francais\flou553.vcf 111 6840a519f1814b4f6101bde93a1c1109a9e041c08ef637dbc4a0ffd4137d61b1 +filtres\francais\flou554.vcf 111 09648a789a5f18cfba6bdef8ed8dce1974f7a40c88c960ab02087dd645116505 +filtres\francais\grad33e.vcf 95 79364a59318fb464ace590cd8bdc2ed648b4bacc3efddd193106928bed94bdec +filtres\francais\grad33n.vcf 95 c6810d9106bc73aa20cf65244442188a5cf89194ee4e75f4975e5304826c7b1e +filtres\francais\grad33ne.vcf 95 878b5c2f091aa6905d8a0be0490ddcf9f9196795ca7e7d65e097e5b58d98b5aa +filtres\francais\grad33no.vcf 95 ff8bc6625fe522106b97b957228eed67b2c1b54c085f4a1ca88bcc0d1669019e +filtres\francais\grad33o.vcf 95 70b4201557e237c16624ce1edc313ac236a57303e546f1c0d540b0e7db541cf2 +filtres\francais\grad33s.vcf 95 359f51313a49e23b747ff08c5a2848c41599ff007f0392e6d768e0005c5b10b9 +filtres\francais\grad33se.vcf 95 289f55c8cace2d70c81b7f987f15c00e3e33a990b3576c85743e3495acdb583f +filtres\francais\grad33so.vcf 95 ab0e8ea9acfd2f4935604627fdd1ad5662c64b3e5176374f8dc41ce34685b9a2 +filtres\francais\lapla331.vcf 95 95667e2cb49672546ca58565f088ef268345045741c6875257f1cb5e65e2bac1 +filtres\francais\lapla551.vcf 111 10a4cf60772dcc3853fec9eb4055cc9108618b2dad60b51e1fba94f340e39269 +filtres\francais\net331.vcf 95 88ab11b98092fc264d14656cf601ce821aa083bd5e59faeb5d24cfdedc08878c +filtres\francais\obre3de.vcf 95 ba63c3328d8853da2e098ebcbbdbf674c12b7f40048d63d9e66b319683974c70 +filtres\francais\obre3dne.vcf 95 878b5c2f091aa6905d8a0be0490ddcf9f9196795ca7e7d65e097e5b58d98b5aa +filtres\francais\obre3dno.vcf 95 b5646a9708ac0aaeb6d1cb81766caedd0e01e18f10da7e9cd10b72bc839fe3b9 +filtres\francais\obre3do.vcf 95 ae2db5f23a9a12a5ed7fa82d6d3e8e6a1a42ecbd8d9e759a85c6bd04eb22a898 +filtres\francais\obre3dse.vcf 95 d899fe27b92be61c5cd75c57e9c8978e2400d086449d14983d4fdbf4d1b8aeec +filtres\francais\obre3dso.vcf 95 a581cd014cd65c3fe7a75592a1f99fd85e305b5fcf711f660188986c73d095f1 +filtres\francais\perso331.vcf 95 904b71281a121f77f5aeea3f2f29399aebbe9ae6f4190bae95209b4496851f2c +filtres\francais\perso332.vcf 95 8f9668675fb66aacafe2af5176d563f39430b164f09c36747aaf8159e7ffcab6 +filtres\francais\perso333.vcf 95 522be3f39c3d4c231712621bc119e8f736865c939582ece5c8762c106be8db74 +filtres\francais\perso334.vcf 95 1fd7d578be92e0711a3ecd9a60ddc9bb459fa45744c3f25b66ce0fb9d4b6ce7c +filtres\francais\xxx.vcf 95 46282cf8422d736f5a34c9e87c472c54fc6106a69c3b4996f934dd85d1d7bae0 +filtres\grad33e.vcf 95 efe2921bb4aae7082152334cca4702a636eb6325f4d7204a81a2c9e813af69ab +filtres\grad33n.vcf 95 d74fbf28d899356ffd169da07095059fa3f1c44b55e7d6ee8e36793222f5d45a +filtres\grad33ne.vcf 95 99d4c9fb5692f7b140134a99a6f2a134b505c3f2acdddae639563add26ffc778 +filtres\grad33no.vcf 95 42c31b748bd9100393fb232552d3d0cc4392d364d48efb2dd745216b58d7da88 +filtres\grad33o.vcf 95 6565a16e944b4f22fa881cdad32e22f12ef7811a2e60a1f2a07eff2d347c3140 +filtres\grad33s.vcf 95 8329d93032c150cb4f33b9ad4d4d50626db3022f2bd45a4f6977e69f16794fae +filtres\grad33se.vcf 95 1ce396f47f1558c838894a238265c8c25f6c6501b37cc5807329205c104da654 +filtres\grad33so.vcf 95 a51cd5079b2a02c9bf3dcbc9c473cb09d349894115cab1023540c64970a82c8a +filtres\lapla331.vcf 95 bbcc66770daa9a367e8a8a203c7067ba5d837484594719621322794637fbe949 +filtres\lapla551.vcf 111 845ae796b308c133e0c4f95d6c22a853c93963e386e22ee23aa0b6a831260058 +filtres\net331.vcf 95 86e94ff16b1f63d7884460ea715dc6cc329bee962b5723fcbb1a6b8dce094a6a +filtres\obre3de.vcf 95 37023885dbacba0e64ba2f19187db16fe0b4f4780f3fc8d496e150b87fcaaa88 +filtres\obre3dne.vcf 95 517206d698043ca38f6261c3ce8a1c916b15cf00a0740847259544005f7eebab +filtres\obre3dno.vcf 95 b7b598955bd88edde5a3e40e00e34339413d8a0b35de9fd0b7063a90e6e4f7df +filtres\obre3do.vcf 95 27c9a4ad730ce4398de3b9ea6d1f04039199ce87d5d91c38ad15c42abf20d629 +filtres\obre3dse.vcf 95 9131d2ecf9fdc215f705ef8482162aa6b35c12c39ab4c84f7c68d15281b7f6c5 +filtres\obre3dso.vcf 95 b80b25900fc4fef3c31f6070b82c6a0d103ed92ba034c8f81b38a9de9c456227 +filtres\perso331.vcf 95 6605160ae1374aeed5c33616c01b0825eec0d7bfd5b489fb270152e1a959f227 +filtres\perso332.vcf 95 10436d4abcd4b10689ff41ba74762682b77f5b0084f0409908e19d22662eeaf3 +filtres\perso333.vcf 95 98baf4815d51dbb11bc5308418281877ee7a60c63665bcb105b43005f793244c +filtres\perso334.vcf 95 c7de7deaf17847492de2538b209e38138be361f1da1df69ebba0da7c3d487c23 +filtres\xxx.vcf 95 f888f206d1e735a61d7d568acce9c81bd4a432d2911a0e8eb00884028af4abc4 +langues\bulle.rsc 8800 4154ef2ab9a0f7872c0677f483209bf5fcc4678e83913fa682b9940b111b80e6 +langues\chkmsg.c 4287 74251f0b5ba51d5c3b3b7a52181d1023ad6a1671c3ef75743da7e31c55904ac5 +langues\chkmsg.prg 8268 983356754ccd5568eb91559ac71b322fcf8520abe934f76005bd484a2e509839 +langues\chkmsg.prj 274 e130ffb1e789b487d82cb496849302a5475cee6b163b842ccf881b337cf9b4e1 +langues\deutsch\vision.hrd 682 f4baaaf205216344848650efeecdc9283f28b53cfc145b1c1119502508e5ecb8 +langues\deutsch\vision.rsc 125004 11e66d879270eb71a7f13e7b695d00c9f98dae11785d269fecd7228c8c342704 +langues\deutsch\visionb.hrd 682 f4baaaf205216344848650efeecdc9283f28b53cfc145b1c1119502508e5ecb8 +langues\deutsch\visionb.rsc 123876 9b23e3c5f4a032a2ef194f1d5650cd0e1bc59241ab91902013f859f4c50c7cb3 +langues\deutsch\vmsg.txt 10743 ba368f40269de20f3996a210d2cc5d79809384203ddc6e058a26c690c1542873 +langues\english\vision.h 51338 65358c54e03625f48c3f060bdff58db8ec5aae6a1d0111505952b6f1e03a0a4e +langues\english\vision.hrd 682 f4baaaf205216344848650efeecdc9283f28b53cfc145b1c1119502508e5ecb8 +langues\english\vision.rsc 124982 5852c53bbdab25e7f62d87f32260d715946fccc9bce22e1810f6b4e6069e2701 +langues\english\visionb.h 48589 14e292ed13c17025a45b80a49430eb804b93fa49b8fce5db497d874f8c5b13fb +langues\english\visionb.hrd 682 f4baaaf205216344848650efeecdc9283f28b53cfc145b1c1119502508e5ecb8 +langues\english\visionb.rsc 123704 32e0ecc6fb43904d08db266701a70b437d84cbf55b7b8013b69aaf647ea1d1ff +langues\english\vmsg.txt 10498 2cfacc65209d9f54e01ff571e1bd1d911c8efb4167bc1aa6d0e28922e733f38d +langues\francais\vision.h 52771 948ca376d8e5303835b32f4ad044c5735708bfb6d6640225e477e66788c2752e +langues\francais\vision.hrd 15278 b26b976a3b21ffd2425b9952a6c5cc061469ff5a7db5b1243322525508a839b6 +langues\francais\vision.rsc 126204 654c92c91b2094b78645c7b39869c65153535fc181c7d6ca784b0eacbd1cfeaf +langues\francais\visionb.h 50559 20699bf195e73ecdcf4739fd0662faeeaf0cf67d324aa4a4f980ad5c18449315 +langues\francais\visionb.hrd 682 f4baaaf205216344848650efeecdc9283f28b53cfc145b1c1119502508e5ecb8 +langues\francais\visionb.rsc 124934 a637a3034fa6cb7aed38426dfe03dbd740c9c802c8a3539be7b96f49c330d1a1 +langues\francais\vmsg.h 7700 d9268e6ccb4ef85439b3351de20957af2e998f726918132aa74df77216c8daba +langues\francais\vmsg.txt 12786 40d50840aa05cf49a507db780581e047e470235cff6c27b3af7fd957766b733a +langues\italian\vision.hrd 682 f4baaaf205216344848650efeecdc9283f28b53cfc145b1c1119502508e5ecb8 +langues\italian\vision.rsc 125374 20a958ccbfa7833ced33116547095e6fad2f443bd4817753bd70245a52d58f81 +langues\italian\visionb.hrd 682 f4baaaf205216344848650efeecdc9283f28b53cfc145b1c1119502508e5ecb8 +langues\italian\visionb.rsc 124382 e39b2ab396d75430c00575634e8d6601cc4e859a43b183d37b8725b11a449365 +langues\italian\vmsg.txt 11788 df53e8c9795db566944c407f6050b9e0b552612403ff7baceeb3c68610456308 +langues\readme.txt 1288 c5bf73b2cdbeac236f49475979dda7265e1983e911bfbe703721510dcd75bd95 +langues\svenska\vision.hrd 682 f4baaaf205216344848650efeecdc9283f28b53cfc145b1c1119502508e5ecb8 +langues\svenska\vision.rsc 124742 503e0e2ebb07ddc4c655664b1a607c4c6ae426190193fb351c3ad5ff012e25f5 +langues\svenska\visionb.hrd 682 f4baaaf205216344848650efeecdc9283f28b53cfc145b1c1119502508e5ecb8 +langues\svenska\visionb.rsc 123888 a355db60032990a8643040dc72dd4954af40de20ce2c026eddb246fbe0d14f9f +langues\svenska\vmsg.txt 10825 068be801f0102f5a1ab25c3afb2c68b59eeec52972de5522bcfa0d0d7c67b441 +ldv\bhole.ini 1540 3fbacbbebbc8039d0c950cc0bb03fd862f7afb55ea1efcf86e8d53f6d742a219 +ldv\bhole.ldv 20060 59c297d518204bd154dff27d6d642db31098cbb47998973cd51c471940b60456 +ldv\bw.ini 1137 d03f21e6df8bb54d4c836cdc09e27a0b6786f9b0f1562b6ef59e26dea71095d4 +ldv\bw.ldv 5382 a7a0c9d7908db772e474609c91a29ff852823e1e32bbacf6ef6d79b625ef2903 +ldv\cntcol.ini 1666 d54f1a9eb4597405af22c94f4e4b2f9965e0fe070b7bd5a336cb3ac0d0dfaf03 +ldv\cntcol.ldv 12061 8527fbe855ee0b9b78bd9db4fe869a3fcd80881a6eee274dbab1488ab292a923 +ldv\dither.ini 1343 32f2e41ff10caa57d66eb063952bf37a79b6b971c1dd0c2036d8021e35ce1620 +ldv\dither.ldv 2538 01078d8a893457983ae12be38fb3298c3a28710efe46c8f24057488229be3cea +ldv\doc\defines.htm 13417 d991068988db239324fc0ab2ef5f410f626f048770dad310f791da5d40efe269 +ldv\doc\descrip.htm 22190 757ad152fbee16ec047c1b13c57bc572614485e9faca44ec823735821c217dfe +ldv\doc\english\defines.htm 11455 ff113ce78363c7fc66a096602aa67296f8ced7d518d751656310494458e9874b +ldv\doc\english\descrip.htm 17446 5f6569cfbb33abe228a29855d7f226be6783122d05ac99941c6584be89ad9b82 +ldv\doc\english\hints.htm 13491 ed1affb9460f6cc46a7c644ab41039e43003998c16db46e16a92b5e50b471bec +ldv\doc\english\images\conc2.gif 8385 f2054314a609bae3329efa2487748e030eda183fb2a83250b01dc369eed20ca3 +ldv\doc\english\images\cprev.jpg 726 ed552d311677cdecb1c4b49a16a92c5896a4e730251a3f16f1389a10041e196e +ldv\doc\english\images\csom.jpg 518 b76d0fb3cc23f6b3aed8220eb2ae0ab20d03f9d3289ad276db686a959fab0202 +ldv\doc\english\images\csuiv.jpg 703 1fce01d6b96ae2cff4229db3209455970c9a5a9f6905c223b512c688986c7549 +ldv\doc\english\images\icointro.gif 492 48856898e6f008494997e942327dae52910664efda84aa5953c076e85f3e366c +ldv\doc\english\images\icoprinc.gif 413 3805372ea73877dc615a6a91208efe298c12ee052102cfd9b1c8c14f4480b19c +ldv\doc\english\index.htm 6081 36718607e781673db438deaef54766ce956d9cb5bc3adea8e188445cb07e57fe +ldv\doc\english\intro.htm 6745 1f64a34f4123b64cb0ebe46f8413e2dbbdc4084620e62f3c3d92a898eeada369 +ldv\doc\english\kitdev.htm 26152 ece16f26f591df3ce647cf0eac2846ba55fd9019e230399b9fa80336eeac2000 +ldv\doc\english\modele.htm 4002 343bd4ca8e5f44adb682144e3f9cf64885ded4c88c83ddeb5429a042264e1959 +ldv\doc\english\notions.htm 9016 3c569730ac231f54ac500f46878a73229eaba7ba18c24a9127a82c009c5132f0 +ldv\doc\english\struct.htm 17347 fb2690b2d64875955e9b85d2ff5050dec4b3c17a93fe75c08ee4716ccc183f38 +ldv\doc\english\vapi\co.htm 9939 3b1a2b1c2e637747714b837d917dc1092fd1a57ba5732bf6770772e65ca23bee +ldv\doc\english\vapi\fi.html 11292 5c629d2e57088ad044ac4f92cb2b5430e313e8e18b12241b772a27f4e6e1dffe +ldv\doc\english\vapi\im.htm 14177 1e74dcbeba4b924e591a191e41a0426db8defb5be0dbf114822fa988009be814 +ldv\doc\english\vapi\in.htm 15507 d6041167c077c41f9869048c13f1e6c7b2b377308c6e2a049a41b0fe7fb0c35b +ldv\doc\english\vapi\index.htm 7291 7dfa8b99f069077213d674ade965e31e259ec345053e9255627fe37fc004afa1 +ldv\doc\english\vapi\lo.htm 7284 46aa926c44000dec3fc74a578d925eb6dc69c5c11143903e558fe0082d9c1808 +ldv\doc\english\vapi\me.htm 15448 c92f915b119516985136be0d76d965a79ca1b3504720cb9f2321d94deef3ede0 +ldv\doc\english\vapi\modele.htm 4038 ce4cea3d331fc0365b51cfebae8616cb3ed697a0a97b20ee935c75be8b553176 +ldv\doc\english\vapi\pr.htm 9351 7aac6b7789b42ddf4220d72883bd8aa0e8d28fea4e99e8bad1d00eab840e793a +ldv\doc\english\vapi\ra.htm 31733 56b48643a36f291913ea18b9272d44301d215cb51d7988dc8f2358d2ae13a518 +ldv\doc\english\vapi\struct.htm 8001 b296aef72b87d15363300917476df7c1b51080476caadffbcbefebb387f709ce +ldv\doc\hints.htm 15537 a22f1547ffe1000357899cde265c42a71d2b412ee9da7fd204840d2f591f3a7d +ldv\doc\images\conc2.gif 8385 f2054314a609bae3329efa2487748e030eda183fb2a83250b01dc369eed20ca3 +ldv\doc\images\cprev.jpg 726 ed552d311677cdecb1c4b49a16a92c5896a4e730251a3f16f1389a10041e196e +ldv\doc\images\csom.jpg 518 b76d0fb3cc23f6b3aed8220eb2ae0ab20d03f9d3289ad276db686a959fab0202 +ldv\doc\images\csuiv.jpg 703 1fce01d6b96ae2cff4229db3209455970c9a5a9f6905c223b512c688986c7549 +ldv\doc\images\icointro.gif 492 48856898e6f008494997e942327dae52910664efda84aa5953c076e85f3e366c +ldv\doc\images\icoprinc.gif 413 3805372ea73877dc615a6a91208efe298c12ee052102cfd9b1c8c14f4480b19c +ldv\doc\index.htm 6211 92cb41eb085c71883621378191a3a46f367f518f300ee65325d3cc98c1e459e8 +ldv\doc\intro.htm 7477 8462c74f1aedb0a5528899b0ada238a7529c3aa70255be00b225c67ad982a022 +ldv\doc\kitdev.htm 22334 7deabba8fb582ce5e36060916ac58a0fde7ebf55e0e8d276db40d3dcceb7ea77 +ldv\doc\modele.htm 4036 c747f981a06ad8f7981d39858825a240852e75b4d3a9927261a07153acdc5f4e +ldv\doc\notions.htm 9414 0b34332921518c6b9d3ee244d59dbd4b73b8b21f428cf73c104f69572c126666 +ldv\doc\struct.htm 19158 6e93975c8684cbe4f7c0daa7c8bcf80b3ffb1d3146d5cae9790a91e87df1fe3b +ldv\doc\vapi\co.htm 10899 85d8648a0895659e5f91d6e115559dcfbdeeeb8d2d1b4ab6b688eeb533ed149b +ldv\doc\vapi\fi.htm 11310 91d605e444b6401acfc453cbf3d3fe92032c4780bb5c31f5d07c04e641c302fa +ldv\doc\vapi\im.htm 14368 6d97f5db4a5f08c218090b687e50e28a6d6f8f3a6ad1f2d183197f88736891e8 +ldv\doc\vapi\in.htm 16375 8e7e8089e4ecffe6a9f3eb37e291294b4ed3e1fd1b0bfc2e6c4425bee7fe5a5e +ldv\doc\vapi\index.htm 7784 57bc8231f833a0b2fb29964b5638bbd748c2904b865333c6c350a028a6766e2b +ldv\doc\vapi\lo.htm 7667 0eaf924267ccca41dd34f4d11597688e1a2e5a9925f94535641f923f8c8871ac +ldv\doc\vapi\me.htm 10811 a9a3f46f8e3525edef984fff13e688c465953511679fb0212b0f4367356dbfc1 +ldv\doc\vapi\modele.htm 4071 50efe71aafbe4d7a3a43958c22cec2a13286710d7a05583c92ad41c161b7b3b2 +ldv\doc\vapi\pr.htm 10725 8ace3fdf5501c67722f287f86f9f7e0aaaf9351ceda85e1dcab5437e86cc6975 +ldv\doc\vapi\ra.htm 34585 197600d399036b8c119c1ee8d2caf08c14fdd84a3bdc21b80b9eda5057b598a7 +ldv\doc\vapi\struct.htm 9051 fa696f4cae608b2dba77b8c7f4ef2e7841b422176c2fa5c0b5654240acf3ea58 +ldv\francais\bhole.ini 1536 8f0585fc40ba621277088b7294c48fc9f4b2bf9b83521f2c5f780e69e3dbf1bf +ldv\francais\bw.ini 1139 f64e140a517066341ab6076b54e65164e569cbc1450324642aca8c3fa12f2da7 +ldv\francais\cntcol.ini 1740 136e5f7b7345f8c89cd0951c40d568dff42054bf60a23472e3961b355b278ec1 +ldv\francais\gamma.ini 1377 5c8efe023365e38103ac01ce262cf8f469ebbc6dbaaef99290885babab3737a9 +ldv\francais\genimg.ini 1113 cc7c02eed8b589e841992ae60fa8fb902de22710c0fc3474b2b2c845b5c8a00e +ldv\francais\invert.ini 1226 93e088a0aaedbf9560a003f332eb266efb026dddab06ca7c11295540df1b7534 +ldv\francais\light.ini 1355 3fa6b8a42b77f543ecffcf6a8755c74392052d0177b237301248bb8b0551bdc6 +ldv\francais\pixel.ini 1070 34da91d9a77467c552cc47d78aee1078a78ea47d64a2f20ff4e9571c97541846 +ldv\francais\puzzle.ini 1251 30ec45abc20a44a6986be1861ef2e62790606f299aaa4c5b9da8361317cea353 +ldv\francais\rotate.ini 1074 7c1792e33b600acbcea1aa72276d0d1bb06e9c3258dab2e7ec5f4543bf5baff8 +ldv\francais\xwave.ini 1195 e3016c9fff5867922669ca72ae3039b3215b7afa84f9b1b06d0c85b2b2e7267d +ldv\francais\ypersc.ini 1185 c7efe551fb0af02ac843a2d6e35d736a8f1f12ceb2519e0aa61b471419cadb37 +ldv\francais\ywave.ini 1195 24fdab1e7764b296733fbf8c4d0b4bc96b79e3dace287e0553429b7aefc923fb +ldv\gamma.ini 1357 df8c3c30f969e2bb2abd729a3be7abc60432ee8118bf4adc2947744712ab3687 +ldv\gamma.ldv 9560 4cae0078bf64fdde9437b9b9831144b3a63269dbc920ed215d86331121ddf727 +ldv\genimg.ini 1057 bb1b18b01e9c8dc4fde34722b9fe0cf3f05eebbb21966d87fed61b8a967f2b19 +ldv\genimg.ldv 3402 785ead5fe4df608434364ed3b1787cfaf1ec2ddbf3d266541af3ee3fc2b6c528 +ldv\invert.ini 1112 f1f9144b69e6ddeb43177899276acb2d1c9bdb379319839518faf3ccbe5ab7db +ldv\invert.ldv 3209 6a157a1f108083fb42e9b34195df2a4f1cd69912792e80c920837d21baa1b44d +ldv\ldg.h 5802 9c5c6ca6b36c97498890d3cfcb49a94ea2ae719986e193505fb2928974c92266 +ldv\ldg.lib 3036 12fdae214aa3476fde562f6b273fe9f969211de819bbb26b679dab2aec62fedd +ldv\ldv.h 5648 f27dc140d4cf9ef9362e2b90a686f5aa7d5ba59e63d841e0545c0655a92359b1 +ldv\ldvcom.h 3349 466a6f7a1c60309d7740ef08844e75bdeef36a33c91f47017e5522d628a67eb5 +ldv\light.ini 1358 c7674365255b435fd41a1f4f58ff20918c1a336695ffe5d507667de4815d6deb +ldv\light.ldv 3182 0b2828f91b728ffa2de87b59eb4bbd2eab267760c5a10609953433f69ef4caf8 +ldv\mt_aes.h 9594 a5d303b2c187c6393dfe274c4b6c076ac700f6acc604f4130c2bb9132a93aae6 +ldv\mt_aes.lib 12068 cfa72009b79dc206ecb10550ee35d1018e289f59ec6ec1fa005963aa1ea83ec5 +ldv\optimg.ini 3356 829c696949df2478b0d19f90be6c4a238df35c3023138c42af3cfc7a3cc81936 +ldv\optimg.ldv 15195 0793c890a6e7603de3ce6ef9c568168eb90e949abe0414247a60312386310aa3 +ldv\pixel.ini 1069 05e361a82b975cfc5fd1ae02b1c74f7d2e7c059ae0dd6a2c62eda95f8f19142d +ldv\pixel.ldv 3972 b9d3a9160effbe11372085f85b0c8d912595115025192ec50ca88c2b2cf72fc5 +ldv\puzzle.ini 1232 f3acfbb35397e326f1623a0d8c00f3940952cc934fd22f126d69b5dd03394136 +ldv\puzzle.ldv 4076 7b5c4b14c4885bf489f1f249849ec291955d053f133e0a55cc4656aaf10aee39 +ldv\rotate.ini 1053 ca5f0946b982b138a61917308f6d142242e9768b64202243c4a486d2b9e2fabc +ldv\rotate.ldv 2359 551cb6c89e180f97461ee1e4400cc733bb3b462578ab3d1ae3f6471b33fa5015 +ldv\smlldv.h 13441 dac0973aac3142ec7d6d741a68fa8e6f5cdf6bae8a5daac2fd929d4f47da5a61 +ldv\smp_ldv.ini 873 fe5a69342e950b14f81d723829974b44c83e9327d9eb251495e99aea96a8f601 +ldv\src\bhole\bhole.c 29306 3726a29eb712a7399f2c4e430dc8dfeb3d9aa48586c625e769b0b63d1098366a +ldv\src\bhole\bhole.ldv 20060 59c297d518204bd154dff27d6d642db31098cbb47998973cd51c471940b60456 +ldv\src\bhole\bhole.prj 149 2ef938b63747714e12aee9a3ac536967e6696912303e83b8680cbeed2bc263ad +ldv\src\bhole\bholes.s 22860 591c346095b94d82e84b75dcd387b85324baaca5db32291757aaeb10fa0bde3c +ldv\src\bhole\perf_r51.txt 5408 16f6b9bc608de0aeaa2d3cad3d6cca97257d3ce4cfb6c4e28b167318161a05bd +ldv\src\bw\bw.c 8891 deeb8bf61b49967a0d777018e3ffa7626198816e57b97b85c0f09c8012937cfb +ldv\src\bw\bw.ldv 5382 a7a0c9d7908db772e474609c91a29ff852823e1e32bbacf6ef6d79b625ef2903 +ldv\src\bw\bw.prj 139 d96e3ac347088a6d04ffc0989483560ba331ba08b90e5f3774f9ec33f56d1440 +ldv\src\cntcol\cntcol.c 27031 0cae678a5553f0a78226c9fdf28e23c4641d01eccf07001b03dea49782aea6f6 +ldv\src\cntcol\cntcol.ldv 12061 8527fbe855ee0b9b78bd9db4fe869a3fcd80881a6eee274dbab1488ab292a923 +ldv\src\cntcol\cntcol.prj 133 80fc0e31eed58d4b90e8f3c1942da166c0169ba02c0dc1e16796e2f65b4889d9 +ldv\src\dither\dither.c 4426 725e45e8e349d97a241f5eea3918d2629597fb7f544f00c0e9d016677c6b71a5 +ldv\src\dither\dither.ldv 2538 01078d8a893457983ae12be38fb3298c3a28710efe46c8f24057488229be3cea +ldv\src\dither\dither.prj 147 1999dc2705896d2753fd366ad22dbabc17420f5a97c88495f680697ead6ec827 +ldv\src\dither\testplan.xlsx 15378 c9ae3783c1faac249d32a9f225f35e0d429501e5797871246f7226b5e6088a1b +ldv\src\gamma\gamma.c 7441 1d79aed9ff1b8822381f46628a7e345d593fdc543685c99b741b759632a23ac4 +ldv\src\gamma\gamma.ldv 9560 4cae0078bf64fdde9437b9b9831144b3a63269dbc920ed215d86331121ddf727 +ldv\src\gamma\gamma.prj 145 8985edcf229caef78ad28079dde5d992a52490c4a2a0425d0b8f9941ae4d1aa9 +ldv\src\genimg\genimg.c 5392 f20eb06ad848e25f6887f095baf79d66b128bb3b28a6d4dd685684413c034cb1 +ldv\src\genimg\genimg.ldv 3402 785ead5fe4df608434364ed3b1787cfaf1ec2ddbf3d266541af3ee3fc2b6c528 +ldv\src\genimg\genimg.prj 133 1d482bd2d2917b720a68a29fb71d70020ea1046d886041d22cd3bf054ec08e29 +ldv\src\invert\invert.c 4426 8215b4d20b9d512b0525236978eb120db0da0359a725656bd4450bd830c9fbb4 +ldv\src\invert\invert.ldv 3209 6a157a1f108083fb42e9b34195df2a4f1cd69912792e80c920837d21baa1b44d +ldv\src\invert\invert.prj 133 6dabaa4fc7d159550ac12907bb2740c5c304f30951d8de89cc6f7b62d4a2db11 +ldv\src\light\light.c 7656 d9f61969f6f7b248785950a06d155561411087730c20f082846d9e55f5181322 +ldv\src\light\light.ldv 3182 0b2828f91b728ffa2de87b59eb4bbd2eab267760c5a10609953433f69ef4caf8 +ldv\src\light\light.prj 145 2760c8105435189fa4df6b951f13ecbccd70aa174463fa194ad3eddfcdd4b4ba +ldv\src\optimg\optimg.c 21320 cd0d368cd9b205613ec3f4761a4fced5265ce63f15b3dbc169f1b1d335bf1fb3 +ldv\src\optimg\optimg.ldv 15195 0793c890a6e7603de3ce6ef9c568168eb90e949abe0414247a60312386310aa3 +ldv\src\optimg\optimg.prj 147 3f285d583b917575a508d18c6aaa7624f56bf46b602a69c28b86783637f6ced2 +ldv\src\pixel\pixel.c 9916 68895e7a303675eed1dad0fbfa2c32bbd92665e55ebe5f0d1997ed4669269131 +ldv\src\pixel\pixel.ldv 3972 b9d3a9160effbe11372085f85b0c8d912595115025192ec50ca88c2b2cf72fc5 +ldv\src\pixel\pixel.prj 141 d6388ac7254203f35a21112e12a89ad49c881db3d6c90a145cf1aabf26ba15fb +ldv\src\pixel\pixel.s 1891 38b17fc12353beef0204560ba5b323fff0d043dd0d13cf73e770480f923d8b08 +ldv\src\puzzle\puzzle.c 6695 8529641c49644aa39396373fa98f6b873c91a4179606be261eb678416bd2b06f +ldv\src\puzzle\puzzle.ldv 4076 7b5c4b14c4885bf489f1f249849ec291955d053f133e0a55cc4656aaf10aee39 +ldv\src\puzzle\puzzle.prj 133 c1e47f70ae6bcb9bbcf17760fe42e4ded1e22b3d8394157d8d9f7cb7cce6f2a7 +ldv\src\rotate\rotate.c 3793 eeeda5f03cdd75eab12ad8c8102bb8571c5e0c167c65a3ff65345881f3c17c72 +ldv\src\rotate\rotate.ldv 2359 551cb6c89e180f97461ee1e4400cc733bb3b462578ab3d1ae3f6471b33fa5015 +ldv\src\rotate\rotate.prj 147 7220810cbef9624e559b5618b5629a149728069cdeda042ce94407919260f3aa +ldv\src\xwave\xwave.c 5789 c1ccea334afe15078ede22c6335f697f770037d2368fcfd82b03017857535e5f +ldv\src\xwave\xwave.ldv 8949 ddcecae558c557b717e9da59a6372b79be2c852c24b6e4158e22ca38c44b5e65 +ldv\src\xwave\xwave.prj 145 6c287e3396e2da2ea8e09ee2f9bef607ec5902539912bb5c5920145ef20f9c04 +ldv\src\ypersc\ypersc.c 8784 3213d2e14bb4736cef9f64f7d1f04f57c41fd9bfe47f426c77c260832209891e +ldv\src\ypersc\ypersc.ldv 5291 ce98c59c590a011daa155be772bb8ec297eb8e7d20f636cba201194bc7f7cf4b +ldv\src\ypersc\ypersc.prj 147 7d3c7749084f033764beea7716cb0acc9146ae90ee7845ac9f8a6acf535e8abf +ldv\src\ywave\ywave.c 5778 28c573e6cbf7c405d92f49cf299248f5a5ac0fe67930724d5edf57a669d94f68 +ldv\src\ywave\ywave.ldv 8955 435ea840e97f8b52ac8cb47151432b20a18369e10d578b5f18d68a57d0fe1eba +ldv\src\ywave\ywave.prj 145 0556931fe4a2fead5ac5022e9012e5b2293b818593682edbba496cb7b6ed8abf +ldv\vapi.h 7916 894ebf28a2a8b052af8a3ff071e399f704cae29495fb2460ee174e9c8ac508ba +ldv\xwave.ini 1181 5011d48395d4011aa9ab02819f5e207974dfa0a7f0bd5c648a2bddabadef6232 +ldv\xwave.ldv 8949 ddcecae558c557b717e9da59a6372b79be2c852c24b6e4158e22ca38c44b5e65 +ldv\ypersc.ini 1177 84c2463f1696325339966b5fe88a03d91586f2e3e15a5235355d920e1b9a231d +ldv\ypersc.ldv 5291 ce98c59c590a011daa155be772bb8ec297eb8e7d20f636cba201194bc7f7cf4b +ldv\ywave.ini 1181 4392ccf33be793ea6d68dfc55096ccdc83776e5aead9a2d8a58084c03707bf55 +ldv\ywave.ldv 8955 435ea840e97f8b52ac8cb47151432b20a18369e10d578b5f18d68a57d0fe1eba +license.txt 1113 05ad0b2204c9c194f678d53546d5597263d02a0d129b652e6125636575d409a3 +png.txt 903 cf4a5607eec16234d0493316e793e748cd5894e76b515d160f351226eeb2bf84 +scripts\bcon.vcs 45 8b3a3479c0e85a4a6d596c4871a0e8ae6b566998581bf088e15074be19b41f8b +scripts\bconv.ini 1632 529e69c32b3bc1c4877ff82669f02cba34daa45a45ade5dfdf7097906f4885d2 +scripts\buggy.vcs 551 e392a774af6db457fecc177441e2b95b83b091727ba4fb6b7560cb4d31be1a4e +scripts\clip.vcs 887 6b17287a00287b0df1c0bdbe4bca68d6ada2ec048ff932d309d53ece2cdea691 +scripts\clip_loop.vcs 1745 b175215a7b6eb73b0bf47a3f06caf25dca1acc8fb0eda35623f5a6fe95cbd960 +scripts\clip_paste.vcs 909 b8d729be940e782ecc60c1077c5d0cf45c9ecec9ef3164d9eef3e455530f87d1 +scripts\ddualton.vcs 661 b494dae174e45e44eef820bac82fd116c24be0332ffc4faea3419cf16f370f43 +scripts\dfixpal.vcs 1241 5b8d9276a09d8ab4827edc324c9d0fce7d997d6067a019a53160bf8d0c484cff +scripts\ibrowser.vcs 137 5c594a43412d9fd35d875de5c651894e31e42e6776d8b0f49516fd5f0156c504 +scripts\img_prio.vcs 1526 3bf973e8d4a8f7315daefe68001ac18bf9f851a44723ae1cd0e5d84f18021a81 +scripts\ldv.vcs 799 b60a1c3f88b6483ba1fbe562e69e92b993896786b59145343ffc2e762c3a624b +scripts\ldvcnt.vcs 1362 043460157fd21b901426a4596dd2b3175ce9d4fdd84e3fce485c0291e8013fc5 +scripts\ldvcntf.vcs 1407 bb359b2bf4a94b5df43c137796eebd9b0bccf74e4adce8486f77d85c1f93380b +scripts\ldvf.vcs 834 2d4db21ca3db780156b2e5d5c9401cf76523c9d337013d631e6c8e6f0a418f86 +scripts\ldvini.vcs 481 f3505db72beabcbd7bd434a0fc372e93487cb42c2122ea754ad0475ec2f360df +scripts\ldvopt.vcs 2061 7cfffeb7172902bd314c3c0dcb3ba34f6cf9b2dfdb62d55d2c5acaaab9bc3727 +scripts\ldvopt256c.vcs 455 ced2afa42d18f5e614feb8e06586a0dddcade1e1e6ffffd562a7af78f70dd41e +scripts\lloopfol.vcs 789 f669e48a06bbef67c95d0b3a598a3c4e18e5eb247ff27fc8baa38533f92c3696 +scripts\loadloop.vcs 758 d6197237ac3d2f322f5fcb6f2345b19c71b5bd98e3630c8219380c266512d9d5 +scripts\main.vcs 3144 2a78ce96ca41d642e1868036196fdef47ce8eaef7c8ddc12a411dc42f75c9045 +scripts\muchram.vcs 2229 ad8a3f9dcdd6689143008a14d307f1dd2a8f0ff8d702f0f7648df8e308f9b89e +scripts\muchram2.vcs 734 c403dccbbbf063f6a503a2c817fcf912dc17c143ae17ac496ef685882adeb3dd +scripts\opnsav.vcs 723 f2b5dbcbbddbdb71c7ef6f9d0abd29afd805973b71e6a4916ddcd9cba6675f8f +scripts\photos.ini 1176 7cdfe70095dfd5b8f37d73fa9dc5fd0a53bacae187597c13358768cdd316533c +scripts\pinvert.ini 45 faf3f6d46c63f6e1da90cdef92e4debd7573de6c552e67b150ad175303a5c7d2 +scripts\plight.ini 110 7dd5cbde06fc10059337b654080ecfc0872cf1782cde280d283b62e38d49b365 +scripts\ppuzzle.ini 92 e3aa044e35bffcf7ae5f94a198b76d7b901c036222465e84a1c2938179d4166d +scripts\protate.ini 62 702b32c2da63049eae879571b55e6dedb7811fe7271f588c4ff6e0f6d8c4b0bd +scripts\readme.txt 258 d3627e8c8046a12955d1d149e52bfbf85a812a30970255ce0f85371c9642692b +scripts\s0.vcs 274 010484801d66b15f2b88ebb15551eb32720404519b8cd23cdeabbf56b1b48999 +scripts\s1.vcs 317 56a757b307929f51487327ad9fed60d9972e5c7c23beeb12f6f2638ae4e9921d +scripts\spec512.vcs 226 32b74868242f3d6a03e5afa6d9c263f7eb823b82cf4dc2eaa4c89920b0f0a7f0 +tcw128.dat 154515 e0078a4db445954de5c413cd06e68a595a3094c68c03f77ca7f0cafcdd94d92d +tcw64.dat 38703 4ecd0eccd0e92e5d3271afbebb501c14e867e60384246a7b114c02d6c0ccfe9d +vision.img 21060 fabf2b6d4f797fe4a819992142017df3d020e4792b42ca51c74d5f2704f69732 +vision.ini 3861 2c0129b74593d17be2568066b71f4aff6c8ddc5182e59d428ad28fa0ebe60372 +vision.prg 521728 20cb864b739eeabdecdba99fb81866379f744d7b3fd4bc729554822999b62df2 +visionl.prg 363101 16502ff84de472b9f54631f0f324f34e171196480bcdb8783a00a7ee42934c9c diff --git a/tools/vision/visionl.prg b/tools/vision/visionl.prg new file mode 100644 index 0000000..1f6a41f Binary files /dev/null and b/tools/vision/visionl.prg differ