From 61d086d799abfca2856fdc6b0f7efb25f51fb1ac Mon Sep 17 00:00:00 2001 From: Fabio Lovato Date: Fri, 16 Feb 2018 19:22:38 +0100 Subject: [PATCH 01/11] Ri-aggiunto sconto ore di lavoro in fattura --- CHANGELOG.md | 47 +++++++++++++++++++++++++++++++++++-- modules/fatture/actions.php | 4 ++-- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 28546116c..3c28a4343 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,12 @@ Tutti i maggiori cambiamenti di questo progetto saranno documentati in questo fi Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://keepachangelog.com/), e il progetto segue il [Semantic Versioning](http://semver.org/) per definire le versioni delle release. -- [2.3 (In sviluppo)](#23-in-sviluppo) +- [2.3.1 (2018-02-16)](#231) + - [Aggiunto (Added)](#aggiunto-added) + - [Modificato (Changed)](#modificato-changed) + - [Rimosso (Removed)](#rimosso-removed) + - [Fixed](#fixed) +- [2.3 (2018-01-27)](#23-in-sviluppo) - [Aggiunto (Added)](#aggiunto-added) - [Modificato (Changed)](#modificato-changed) - [Deprecato (Deprecated)](#deprecato-deprecated) @@ -19,7 +24,45 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k - [Modificato (Changed)](#modificato-changed) - [Fixed](#fixed) -## 2.3 (In sviluppo) + +## 2.3.1 (2018-02-16) + +### Aggiunto (Added) + - Aggiunti i seriali in stampa + - Aggiunta la zona nelle attività (in sola lettura dall'anagrafica) + - Aggiunta tramite flag la possibilità di inserire la descrizione dell'intervento in fattura + - Aggiunta esportazione bulk in zip dei pdf degli interventi selezionati + - Aggiunte informazioni del cliente e fornitore nelle relative stampe ordini + +### Modificato (Changed) + - Migliorati i widget di "Crediti da clienti" e "Debiti verso fornitori", con calcolo parziale del rimanente + - Disabilitato di default il modulo "Viste" + - Migliorata la gestione della pianificazione attività sui contratti, con la possibilità di eliminare tutte le pianificazioni + o di creare direttamente un intervento collegato + - Modificato l'inserimento di interventi in fattura raggruppando per costo orario nel caso ci siano più costi orari + - Spostato il conto "Perdite e profitti" nello stato patrimoniale + +### Fixed + - Corretti diversi problemi in fase di installazione + - Modifica e miglioramento dell'arrotondamento iva in fattura, sia a video che in stampa + - Corretto il caricamento di menu a tendina per gli utenti con permessi limitati + - Corretti i permessi per la stampa fattura per utenti con permessi limitati + - Corretto e migliorato il funzionamento delle viste + - Corretto il calcolo dello sconto incondizionato in percentuale nei principali moduli + - Corretta la stampa consuntivo del preventivo + - Corrette alcune funzioni dello scadenzario, in quanto sparivano delle scadenze in fase di modifica prima nota + - Corretto il cambio di stato automatico di ddt dopo la fatturazione + - Migliorato il caricamento dinamico del calendario via ajax in quanto a volte si bloccava + - Correzioni varie sulla gestione viste + - Corretto il piano dei conti per arrotondare gli importi come negli altri moduli + - Corretto il calcolo iva nei contratti + - Corretto il salvataggio delle sessioni tecnico nei propri interventi + - Corretto un problema nel salvataggio firma intervento su alcuni tablet + - Corretto ordinamento voci di menu laterale + - Altre correzioni minori e strutturali + + +## 2.3 (2018-02-16) ### Aggiunto (Added) diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index 3c0f72df0..7a8c68f0e 100755 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -295,7 +295,7 @@ switch (post('op')) { $codice = $rs[0]['codice']; //Fatturo le ore di lavoro raggruppate per costo orario - $rst = $dbo->fetchArray('SELECT SUM( ROUND( TIMESTAMPDIFF( MINUTE, orario_inizio, orario_fine ) / 60, '.get_var('Cifre decimali per quantità').' ) ) AS tot_ore, SUM(prezzo_ore_consuntivo) AS tot_prezzo_ore_consuntivo, prezzo_ore_unitario FROM in_interventi_tecnici WHERE idintervento='.prepare($idintervento).' GROUP BY prezzo_ore_unitario'); + $rst = $dbo->fetchArray('SELECT SUM( ROUND( TIMESTAMPDIFF( MINUTE, orario_inizio, orario_fine ) / 60, '.get_var('Cifre decimali per quantità').' ) ) AS tot_ore, SUM(prezzo_ore_consuntivo) AS tot_prezzo_ore_consuntivo, SUM(sconto) AS tot_sconto, prezzo_ore_unitario FROM in_interventi_tecnici WHERE idintervento='.prepare($idintervento).' GROUP BY prezzo_ore_unitario'); //Aggiunta riga intervento sul documento if( sizeof($rst) == 0 ){ @@ -310,7 +310,7 @@ switch (post('op')) { $query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva); $rs = $dbo->fetchArray($query); - $sconto = $rst[$i]['sconto']; + $sconto = $rst[$i]['tot_sconto']; $subtot = $rst[$i]['tot_prezzo_ore_consuntivo']; $iva = ($subtot - $sconto) / 100 * $rs[0]['percentuale']; $iva_indetraibile = $iva / 100 * $rs[0]['indetraibile']; From c174c57d472df8360d56d702ce8f85b20e421562 Mon Sep 17 00:00:00 2001 From: Fabio Lovato Date: Sat, 17 Feb 2018 16:08:10 +0100 Subject: [PATCH 02/11] =?UTF-8?q?Separati=20indirizzo=20e=20citt=C3=A0=20n?= =?UTF-8?q?ell'intestazione=20delle=20stampe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- templates/base/header.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/templates/base/header.php b/templates/base/header.php index a107d958a..f5c8619a2 100644 --- a/templates/base/header.php +++ b/templates/base/header.php @@ -16,7 +16,8 @@ return '

'.$f_ragionesociale.'

-

'.$f_indirizzo.' '.$f_citta_full.'

+

'.$f_indirizzo.'

+

'.$f_citta_full.'

'.(!empty($f_piva) ? tr('P.Iva').': '.$f_piva : '').'

'.(!empty($f_codicefiscale) ? tr('C.F.').': '.$f_codicefiscale : '').'

'.(!empty($f_capsoc) ? tr('Cap.Soc.').': '.$f_capsoc : '').'

From 7ba66b75d6db3a46f612d853c8266670983a65a6 Mon Sep 17 00:00:00 2001 From: loviuz <1647128+loviuz@users.noreply.github.com> Date: Sat, 17 Feb 2018 16:32:26 +0100 Subject: [PATCH 03/11] Aggiornamento changelog con link corretto e nuova data 2.3.1 --- CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c28a4343..45b276402 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ Tutti i maggiori cambiamenti di questo progetto saranno documentati in questo fi Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://keepachangelog.com/), e il progetto segue il [Semantic Versioning](http://semver.org/) per definire le versioni delle release. -- [2.3.1 (2018-02-16)](#231) +- [2.3.1 (2018-02-19)](#231-2018-02-19) - [Aggiunto (Added)](#aggiunto-added) - [Modificato (Changed)](#modificato-changed) - [Rimosso (Removed)](#rimosso-removed) @@ -25,7 +25,7 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k - [Fixed](#fixed) -## 2.3.1 (2018-02-16) +## 2.3.1 (2018-02-19) ### Aggiunto (Added) - Aggiunti i seriali in stampa @@ -33,7 +33,7 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k - Aggiunta tramite flag la possibilità di inserire la descrizione dell'intervento in fattura - Aggiunta esportazione bulk in zip dei pdf degli interventi selezionati - Aggiunte informazioni del cliente e fornitore nelle relative stampe ordini - + ### Modificato (Changed) - Migliorati i widget di "Crediti da clienti" e "Debiti verso fornitori", con calcolo parziale del rimanente - Disabilitato di default il modulo "Viste" From 98766b4f6497dd1b7ea08f11a6af164da32654fc Mon Sep 17 00:00:00 2001 From: Luca Date: Mon, 19 Feb 2018 18:18:31 +0100 Subject: [PATCH 04/11] Fix margine stampa preventivi --- modules/aggiornamenti/edit.php | 4 ++-- templates/preventivi/settings.php | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 templates/preventivi/settings.php diff --git a/modules/aggiornamenti/edit.php b/modules/aggiornamenti/edit.php index 8c84d6046..a350d68b4 100644 --- a/modules/aggiornamenti/edit.php +++ b/modules/aggiornamenti/edit.php @@ -136,7 +136,7 @@ foreach ($modules as $module) { $compatible = ''; $class = 'success'; } else { - $compatible = ''; + $compatible = ''; $class = 'danger'; } @@ -200,7 +200,7 @@ foreach ($modules as $module) { $compatible = ''; $class = 'success'; } else { - $compatible = ''; + $compatible = ''; $class = 'danger'; } diff --git a/templates/preventivi/settings.php b/templates/preventivi/settings.php new file mode 100644 index 000000000..fb250224b --- /dev/null +++ b/templates/preventivi/settings.php @@ -0,0 +1,6 @@ + 35, + 'footer-height' => 25, +]; From f773f57a723c8add83e59f91774e8c1b307ba923 Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 20 Feb 2018 10:55:00 +0100 Subject: [PATCH 05/11] Firma anche per contratti --- modules/preventivi/edit.php | 8 ++++---- templates/contratti/footer.php | 17 +++++++++++++++++ templates/contratti/settings.php | 5 +++++ templates/preventivi/settings.php | 3 +-- 4 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 templates/contratti/footer.php create mode 100644 templates/contratti/settings.php diff --git a/modules/preventivi/edit.php b/modules/preventivi/edit.php index 6096e66dd..667e08888 100644 --- a/modules/preventivi/edit.php +++ b/modules/preventivi/edit.php @@ -120,9 +120,9 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
-
+
@@ -148,9 +148,9 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica']; } ?> -
+

diff --git a/templates/contratti/footer.php b/templates/contratti/footer.php new file mode 100644 index 000000000..6bad627b8 --- /dev/null +++ b/templates/contratti/footer.php @@ -0,0 +1,17 @@ + + + + + + +
+ lì, ___________________________ + + FIRMA PER ACCETTAZIONE

+ _____________________________________ +
+
+ + \ No newline at end of file diff --git a/templates/contratti/settings.php b/templates/contratti/settings.php new file mode 100644 index 000000000..888b0d27f --- /dev/null +++ b/templates/contratti/settings.php @@ -0,0 +1,5 @@ + 30, +]; diff --git a/templates/preventivi/settings.php b/templates/preventivi/settings.php index fb250224b..888b0d27f 100644 --- a/templates/preventivi/settings.php +++ b/templates/preventivi/settings.php @@ -1,6 +1,5 @@ 35, - 'footer-height' => 25, + 'footer-height' => 30, ]; From 752195dbb094411ac3dcc5716e18ef846546cf7f Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 20 Feb 2018 12:05:10 +0100 Subject: [PATCH 06/11] Stampe preventivi e contratti, firma in fondo alla pagina --- templates/contratti/body.php | 16 ++++++++++++++++ templates/contratti/footer.php | 14 -------------- templates/contratti/settings.php | 2 +- templates/preventivi/body.php | 16 ++++++++++++++++ templates/preventivi/footer.php | 14 -------------- templates/preventivi/settings.php | 2 +- 6 files changed, 34 insertions(+), 30 deletions(-) diff --git a/templates/contratti/body.php b/templates/contratti/body.php index 1fe8df860..0a12335ee 100644 --- a/templates/contratti/body.php +++ b/templates/contratti/body.php @@ -292,3 +292,19 @@ echo ' echo '

'.tr('Il tutto S.E. & O.').'

'.tr("In attesa di un Vostro Cortese riscontro, colgo l'occasione per porgere Cordiali Saluti").'

'; + + +//Firma +echo '
+ + + + + +
+ lì, ___________________________ + + FIRMA PER ACCETTAZIONE

+ _____________________________________ +
+
'; diff --git a/templates/contratti/footer.php b/templates/contratti/footer.php index 6bad627b8..f8bab89ab 100644 --- a/templates/contratti/footer.php +++ b/templates/contratti/footer.php @@ -1,17 +1,3 @@ - - - - - - -
- lì, ___________________________ - - FIRMA PER ACCETTAZIONE

- _____________________________________ -
-
- \ No newline at end of file diff --git a/templates/contratti/settings.php b/templates/contratti/settings.php index 888b0d27f..0f521bee5 100644 --- a/templates/contratti/settings.php +++ b/templates/contratti/settings.php @@ -1,5 +1,5 @@ 30, + 'footer-height' => 35, ]; diff --git a/templates/preventivi/body.php b/templates/preventivi/body.php index c35117aa0..2c6154161 100644 --- a/templates/preventivi/body.php +++ b/templates/preventivi/body.php @@ -344,3 +344,19 @@ echo ' // Conclusione echo '

'.tr("In attesa di un Vostro Cortese riscontro, colgo l'occasione per porgere Cordiali Saluti").'

'; + + +//Firma +echo '
+ + + + + +
+ lì, ___________________________ + + FIRMA PER ACCETTAZIONE

+ _____________________________________ +
+
'; \ No newline at end of file diff --git a/templates/preventivi/footer.php b/templates/preventivi/footer.php index 6bad627b8..f8bab89ab 100644 --- a/templates/preventivi/footer.php +++ b/templates/preventivi/footer.php @@ -1,17 +1,3 @@ - - - - - - -
- lì, ___________________________ - - FIRMA PER ACCETTAZIONE

- _____________________________________ -
-
- \ No newline at end of file diff --git a/templates/preventivi/settings.php b/templates/preventivi/settings.php index 888b0d27f..0f521bee5 100644 --- a/templates/preventivi/settings.php +++ b/templates/preventivi/settings.php @@ -1,5 +1,5 @@ 30, + 'footer-height' => 35, ]; From c2115730c38021044baced07b9e7ca2f6c76b3a1 Mon Sep 17 00:00:00 2001 From: Fabio Lovato Date: Tue, 20 Feb 2018 14:50:09 +0100 Subject: [PATCH 07/11] Aggiunto "Nessuna zona" come filtro di default --- modules/dashboard/edit.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/dashboard/edit.php b/modules/dashboard/edit.php index a499cd391..ee01917a6 100644 --- a/modules/dashboard/edit.php +++ b/modules/dashboard/edit.php @@ -37,6 +37,9 @@ if (!isset($_SESSION['dashboard']['idzone'])) { $rs = $dbo->fetchArray('SELECT id, descrizione FROM an_zone'); $_SESSION['dashboard']['idzone'] = ["'-1'"]; + + //"Nessuna zona" di default + $_SESSION['dashboard']['idzone'][] = "'0'"; for ($i = 0; $i < count($rs); ++$i) { $_SESSION['dashboard']['idzone'][] = "'".$rs[$i]['id']."'"; @@ -238,7 +241,7 @@ $checks = ''; $count = 0; $total = 0; -$rs = $dbo->fetchArray('SELECT id, descrizione FROM an_zone ORDER BY descrizione ASC'); +$rs = $dbo->fetchArray('(SELECT \'0\' AS id, \'Nessuna zona\' AS descrizione) UNION (SELECT id, descrizione FROM an_zone) ORDER BY descrizione ASC'); $total = count($rs); for ($i = 0; $i < count($rs); ++$i) { From 669b21d9d4829b05d9fba85fe36b95538cb36657 Mon Sep 17 00:00:00 2001 From: Fabio Lovato Date: Tue, 20 Feb 2018 14:57:24 +0100 Subject: [PATCH 08/11] Spostato "Nessuna zona" fisso come prima voce --- modules/dashboard/edit.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/dashboard/edit.php b/modules/dashboard/edit.php index ee01917a6..ed0c3be45 100644 --- a/modules/dashboard/edit.php +++ b/modules/dashboard/edit.php @@ -241,7 +241,7 @@ $checks = ''; $count = 0; $total = 0; -$rs = $dbo->fetchArray('(SELECT \'0\' AS id, \'Nessuna zona\' AS descrizione) UNION (SELECT id, descrizione FROM an_zone) ORDER BY descrizione ASC'); +$rs = $dbo->fetchArray('(SELECT 0 AS ordine, \'0\' AS id, \'Nessuna zona\' AS descrizione) UNION (SELECT 1 AS ordine, id, descrizione FROM an_zone) ORDER BY ordine, descrizione ASC'); $total = count($rs); for ($i = 0; $i < count($rs); ++$i) { From 2dd4b77e5fe86743a68d10a219d6c1bed4b3e7f4 Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 20 Feb 2018 16:42:59 +0100 Subject: [PATCH 09/11] Fix idstatointervento al posto di codice per pianificazione da contratto --- modules/interventi/add.php | 2 +- templates/contratti/body.php | 2 +- templates/preventivi/body.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/interventi/add.php b/modules/interventi/add.php index 8fd15c93b..560e09ac0 100644 --- a/modules/interventi/add.php +++ b/modules/interventi/add.php @@ -71,7 +71,7 @@ elseif (!empty($idcontratto) && !empty($idcontratto_riga)) { $idimpianto = implode(',', array_column($rs, 'idimpianto')); // Seleziono "In programmazione" come stato - $rs = $dbo->fetchArray("SELECT * FROM in_statiintervento WHERE codice='WIP'"); + $rs = $dbo->fetchArray("SELECT * FROM in_statiintervento WHERE idstatointervento='WIP'"); $idstatointervento = $rs[0]['idstatointervento']; } diff --git a/templates/contratti/body.php b/templates/contratti/body.php index 0a12335ee..5461ddf7d 100644 --- a/templates/contratti/body.php +++ b/templates/contratti/body.php @@ -303,7 +303,7 @@ echo '
FIRMA PER ACCETTAZIONE

- _____________________________________ + _____________________________________________ diff --git a/templates/preventivi/body.php b/templates/preventivi/body.php index 2c6154161..2bc7f1720 100644 --- a/templates/preventivi/body.php +++ b/templates/preventivi/body.php @@ -355,7 +355,7 @@ echo '
FIRMA PER ACCETTAZIONE

- _____________________________________ + _____________________________________________ From 07968489c56aed1e01d75c1c8a8e6bc7801b942f Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 20 Feb 2018 17:51:05 +0100 Subject: [PATCH 10/11] Fix per chiamate https api google --- modules/anagrafiche/edit.php | 2 +- plugins/sedi/edit.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/anagrafiche/edit.php b/modules/anagrafiche/edit.php index 7d260b18a..f4ff2a700 100644 --- a/modules/anagrafiche/edit.php +++ b/modules/anagrafiche/edit.php @@ -9,7 +9,7 @@ $google = Settings::get('Google Maps API key'); if (!empty($google)) { echo ' -'; +'; } if (!$cliente) { diff --git a/plugins/sedi/edit.php b/plugins/sedi/edit.php index c2b24d0c9..51da4725b 100644 --- a/plugins/sedi/edit.php +++ b/plugins/sedi/edit.php @@ -7,7 +7,7 @@ $google = Settings::get('Google Maps API key'); /* if (!empty($google)) { echo ' -'; +'; } */ From 7c342ee54f758dec4c7574b0f3b06f3f67b89b01 Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 20 Feb 2018 19:00:51 +0100 Subject: [PATCH 11/11] =?UTF-8?q?Aggiunta=20possibilit=C3=A0=20di=20specif?= =?UTF-8?q?icare=20un=20logo=20per=20tutte=20le=20stampe,=20ampliato=20cam?= =?UTF-8?q?po=20query=20prevista=20per=20il=20modulo=20viste?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/viste/edit.php | 19 ++++++++++--------- templates/base/header.php | 8 +++++++- templates/base/logo_azienda.jpg | Bin 0 -> 4348 bytes 3 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 templates/base/logo_azienda.jpg diff --git a/modules/viste/edit.php b/modules/viste/edit.php index 7bb5ff112..b027ad5c9 100644 --- a/modules/viste/edit.php +++ b/modules/viste/edit.php @@ -136,16 +136,17 @@ if (!empty($options) && $options != 'custom') {
-
+
{[ "type": "text", "label": "'.tr('Nome').'", "name": "name['.$key.']", "value": "'.$field['name'].'"'; if (!$editable) { echo ', "readonly": "1"'; } echo ', "help": "'.tr('Nome con cui il campo viene identificato e visualizzato nella tabella').'" ]}
- -
- {[ "type": "text", "label": "'.tr('Query prevista').'", "name": "query['.$key.']", "value": "'.$field['query'].'"'; +
+
+
+ {[ "type": "textarea", "label": "'.tr('Query prevista').'", "name": "query['.$key.']", "value": "'.$field['query'].'"'; if (!$editable) { echo ', "readonly": "1"'; } @@ -279,13 +280,13 @@ if (!empty($options) && $options != 'custom') {
- -
+
{[ "type": "text", "label": "'.tr('Nome').'", "name": "name[-id-]" ]}
- -
- {[ "type": "text", "label": "'.tr('Query prevista').'", "name": "query[-id-]" ]} +
+
+
+ {[ "type": "textarea", "label": "'.tr('Query prevista').'", "name": "query[-id-]" ]}
diff --git a/templates/base/header.php b/templates/base/header.php index f5c8619a2..cb85b0f20 100644 --- a/templates/base/header.php +++ b/templates/base/header.php @@ -9,10 +9,16 @@ * La personalizzazione specifica dell'header deve comunque seguire lo standard della cartella custom: anche se il file header.php non esiste nella stampa originaria, se si vuole personalizzare l'header bisogna crearlo all'interno della cartella custom. */ +$logo_dir = 'base'; +if (file_exists(DOCROOT.'/templates/'.$ptype.'/logo_azienda.jpg')) { + $logo_dir = $ptype; +} + + return '
- Logo + Logo

'.$f_ragionesociale.'

diff --git a/templates/base/logo_azienda.jpg b/templates/base/logo_azienda.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3fd3914522510a5f6af55ca002d656131577943f GIT binary patch literal 4348 zcmcIG2UJtpwl@VrCxoJO0wL0+iU>%N7AX=0X-XSViqaGWl->m-1e5`!S7|~75d=X3 zN^z7RHAo$0C`u6!6#_qDW_+&y)_d>IU-Qnn>)hSXzWeNb_t_uYp8?>f4KM}(2m}J0 zs1w+q08Rn)P&#@#C_OzLJq$+AzyxPvVq|3EVq<54AL2TE_z)Kl51*j8Fdx5|01uCd zjEETeh@_MxuduAVtc1L{gro$`2nYs)F)=W4GBI&V@bU0T{N=IV32-m~J|H;=hyws~ zfFK;8{VsqX009uHw;YHsSymH+?*e`4T3wM!=3P%0DwPvc>F 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 pzkP8z7RFBv