Initial commit

This commit is contained in:
2019-11-20 07:44:43 +01:00
commit 5bf49c4a81
41188 changed files with 5459177 additions and 0 deletions

View File

@@ -0,0 +1,93 @@
<?php
/**
* NOTICE OF LICENSE
*
* This source file is subject to a commercial license from Common-Services Co., Ltd.
* Use, copy, modification or distribution of this source file without written
* license agreement from the SARL SMC is strictly forbidden.
* In order to obtain a license, please contact us: contact@common-services.com
* ...........................................................................
* INFORMATION SUR LA LICENCE D'UTILISATION
*
* L'utilisation de ce fichier source est soumise a une licence commerciale
* concedee par la societe Common-Services Co., Ltd.
* Toute utilisation, reproduction, modification ou distribution du present
* fichier source sans contrat de licence ecrit de la part de la Common-Services Co. Ltd. est
* expressement interdite.
* Pour obtenir une licence, veuillez contacter Common-Services Co., Ltd. a l'adresse: contact@common-services.com
* ...........................................................................
*
* @package SoNice Retour
* @author Alexandre D.
* @copyright Copyright (c) 2011-2015 Common Services Co Ltd - 90/25 Sukhumvit 81 - 10260 Bangkok - Thailand
* @license Commercial license
* Support by mail : support.sonice@common-services.com
*/
if (isset($_SERVER['DropBox']) && $_SERVER['DropBox']) {
require_once(readlink(dirname($_SERVER['SCRIPT_FILENAME']).'/../../../config/config.inc.php'));
} else {
require_once(dirname(__FILE__).'/../../../config/config.inc.php');
}
if (Tools::getValue('token') !== md5(_COOKIE_IV_)) {
header('HTTP/1.0 401 Unauthorized');
echo 'Wrong token';
die;
}
class StateChanger extends Module
{
public function changeState()
{
ob_start();
$status = false;
// OCARAT modif pour envoi de mail
if (Tools::getValue('id') && Tools::getValue('state')) {
$id_order_return = Tools::getValue('id');
$state = Tools::getValue('state');
$orderReturn = new OrderReturn($id_order_return);
$order = new Order($orderReturn->id_order);
$customer = new Customer($orderReturn->id_customer);
$orderReturn->state = $state;
if ($orderReturn->save()) {
$orderReturnState = new OrderReturnState($orderReturn->state);
$vars = array(
'{lastname}' => $customer->lastname,
'{firstname}' => $customer->firstname,
'{id_order_return}' => $id_order_return,
'{state_order_return}' => (isset($orderReturnState->name[(int)$order->id_lang]) ?
$orderReturnState->name[(int)$order->id_lang] :
$orderReturnState->name[(int)Configuration::get('PS_LANG_DEFAULT')]),
);
Mail::Send((int)$order->id_lang, 'order_return_state',
Mail::l('Your order return status has changed', $order->id_lang),
$vars, $customer->email, $customer->firstname . ' ' . $customer->lastname, null, null, null,
null, _PS_MAIL_DIR_, true, (int)$order->id_shop);
$status = true;
}
}
$result = ob_get_clean();
if ($result) {
$output = $result;
} else {
$output = null;
}
$json = array(
'output' => $output,
'status' => $status
);
die(Tools::jsonEncode($json));
}
}
$state_changer = new StateChanger();
$state_changer->changeState();

View File

@@ -0,0 +1,191 @@
<?php
/**
* NOTICE OF LICENSE
*
* This source file is subject to a commercial license from Common-Services Co., Ltd.
* Use, copy, modification or distribution of this source file without written
* license agreement from the SARL SMC is strictly forbidden.
* In order to obtain a license, please contact us: contact@common-services.com
* ...........................................................................
* INFORMATION SUR LA LICENCE D'UTILISATION
*
* L'utilisation de ce fichier source est soumise a une licence commerciale
* concedee par la societe Common-Services Co., Ltd.
* Toute utilisation, reproduction, modification ou distribution du present
* fichier source sans contrat de licence ecrit de la part de la Common-Services Co. Ltd. est
* expressement interdite.
* Pour obtenir une licence, veuillez contacter Common-Services Co., Ltd. a l'adresse: contact@common-services.com
* ...........................................................................
*
* @package SoNice Retour
* @author Alexandre D.
* @copyright Copyright (c) 2011-2015 Common Services Co Ltd - 90/25 Sukhumvit 81 - 10260 Bangkok - Thailand
* @license Commercial license
* Support by mail : support.sonice@common-services.com
*/
if (isset($_SERVER['DropBox']) && $_SERVER['DropBox']) {
require_once readlink(dirname($_SERVER['SCRIPT_FILENAME']).'/../../../config/config.inc.php');
require_once(readlink(_PS_MODULE_DIR_.'sonice_retour'.DIRECTORY_SEPARATOR.'sonice_retour.php'));
require_once(readlink(_PS_MODULE_DIR_.'sonice_retour'.DIRECTORY_SEPARATOR.'classes/SoNiceRetourPDF.php'));
/*
require_once(readlink(dirname($_SERVER['SCRIPT_FILENAME']).'/../../../config/config.inc.php'));
require_once(readlink(_PS_MODULE_DIR_.'sonice_etiquetage'.DIRECTORY_SEPARATOR.'sonice_retour.php'));
require_once(readlink(_PS_MODULE_DIR_.'sonice_etiquetage'.DIRECTORY_SEPARATOR.'classes/SoNiceRetourPDF.php'));
*/
} else {
require_once(dirname(__FILE__).'/../../../config/config.inc.php');
require_once(dirname(__FILE__).'/../sonice_retour.php');
require_once(dirname(__FILE__).'/../classes/SoNiceRetourPDF.php');
}
if (Tools::getValue('token') !== md5(_COOKIE_IV_)) {
header('HTTP/1.0 401 Unauthorized');
echo 'Wrong token';
die;
}
class SoNiceEtiquetageCheckLogin extends SoNice_Retour
{
public function __construct()
{
parent::__construct();
if (Tools::getValue('debug')) {
$this->debug = true;
}
if ($this->debug) {
@ini_set('display_errors', 'on');
@define('_PS_DEBUG_SQL_', true);
@error_reporting(E_ALL | E_STRICT);
}
}
public function checkThat()
{
ob_start();
$login = Tools::getValue('return_info');
if (!is_array($login) && !count($login)) {
die($this->l('Impossible to retrieve the login informations.'));
}
$id_order = (int)Db::getInstance()->getValue('SELECT `id_order` FROM `'._DB_PREFIX_.'orders` ORDER BY `id_order` DESC');
$info = new stdClass();
$pdf = new SoNiceRetourPDF($id_order, null);
if (!$pdf instanceof SoNiceRetourPDF) {
$info->status = false;
$info->errorID = 'SoNice';
$info->error = $this->l('An error occured while initialising SoNiceRetourPDF class.');
} else {
$params = array(
'contractNumber' => $login['ContractNumber'],
'password' => $login['Password'],
'outputFormat' => array(
'x' => 0,
'y' => 0,
'outputPrintingType' => 'PDF_A4_300dpi',
),
'letter' => array(
'service' => array(
'productCode' => 'CORE',
'depositDate' => date('Y-m-d'),
'transportationAmount' => 0,
'totalAmount' => null,
'orderNumber' => 42,
'commercialName' => 'Test',
'returnTypeChoice' => null,
),
'parcel' => array(
'weight' => 0.3,
'nonMachinable' => false,
'instructions' => null,
'pickupLocationId' => null,
),
'sender' => array(
'senderParcelRef' => 'EXP4242',
'address' => array(
'companyName' => null,
'lastName' => 'Doe',
'firstName' => 'John',
'line0' => null,
'line1' => null,
'line2' => '51 avenue Paul Doumer',
'line3' => null,
'countryCode' => 'FR',
'city' => 'Paris',
'zipCode' => '75116',
'phoneNumber' => null,
'mobileNumber' => null,
'doorCode1' => null,
'doorCode2' => null,
'email' => 'toto@mytest.fr',
'intercom' => null,
'language' => 'FR',
)
),
'addressee' => array(
'addresseeParcelRef' => 'ABCD123',
'address' => array(
'companyName' => 'Test',
'lastName' => null,
'firstName' => null,
'line0' => null,
'line1' => null,
'line2' => '13 rue de la Loge',
'line3' => null,
'countryCode' => 'FR',
'city' => 'Marseille',
'zipCode' => '13000',
'phoneNumber' => null,
'mobileNumber' => null,
'doorCode1' => null,
'doorCode2' => null,
'email' => 'test@mytest.fr',
'intercom' => null
)
)
)
);
$call = $pdf->callWS($login['ContractNumber'], $login['Password'], $params);
if ($call) {
$response = $pdf->getFormattedResponse();
if (!is_null($response['errorID']) && $response['errorID'] >= 30000 && $response['errorID'] <= 30008) {
$info->status = false;
$info->errorID = $response['errorID'];
$info->error = $response['error'];
} else {
$info->status = true;
$info->errorID = 0;
$info->error = '';
}
} else {
$info->status = false;
$info->errorID = 'SoNice';
$info->error = $this->l('Error with the web service call.');
}
}
$callback = Tools::getValue('callback');
$output = ob_get_clean();
die($callback.'('.Tools::jsonEncode(array(
'console' => $output,
'info' => $info,
'request' => '<pre>'.$pdf->xmlpp($pdf->origin_request, true).'</pre>',
'response' => '<pre>'.$pdf->xmlpp($pdf->response->asXML(), true).'</pre>'
)).')');
}
}
$login = new SoNiceEtiquetageCheckLogin();
$login->checkThat();

View File

@@ -0,0 +1,20 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:generateLabelResponse xmlns:ns2="http://sls.ws.coliposte.fr">
<return>
<messages>
<id>0</id>
<messageContent>La requête a été traitée avec succès</messageContent>
<type>INFOS</type>
</messages>
<labelResponse>
<label>
<xop:Include href="cid:ba63815d-25be-4ab2-9c5f-33e2232bbf3c-326@cxf.apache.org" xmlns:xop="http://www.w3.org/2004/08/xop/include"/>
</label>
<parcelNumber>8R28280687469</parcelNumber>
<pdfUrl>https://10.36.211.129/sls-ws/GetLabel?parcelNumber=8R28280687469&amp;includeCustomsDeclarations=false&amp;signature=6817d6904ed1456974d2ad27da57554c74fc2671b97a917ffcc1fd85e963f5ca</pdfUrl>
</labelResponse>
</return>
</ns2:generateLabelResponse>
</soap:Body>
</soap:Envelope>

Binary file not shown.

View File

@@ -0,0 +1,52 @@
<?php
/**
* NOTICE OF LICENSE
*
* This source file is subject to a commercial license from Common-Services Co., Ltd.
* Use, copy, modification or distribution of this source file without written
* license agreement from the SARL SMC is strictly forbidden.
* In order to obtain a license, please contact us: contact@common-services.com
* ...........................................................................
* INFORMATION SUR LA LICENCE D'UTILISATION
*
* L'utilisation de ce fichier source est soumise a une licence commerciale
* concedee par la societe Common-Services Co., Ltd.
* Toute utilisation, reproduction, modification ou distribution du present
* fichier source sans contrat de licence ecrit de la part de la Common-Services Co. Ltd. est
* expressement interdite.
* Pour obtenir une licence, veuillez contacter Common-Services Co., Ltd. a l'adresse: contact@common-services.com
* ...........................................................................
*
* @package SoNice Retour
* @author Alexandre D.
* @copyright Copyright (c) 2011-2015 Common Services Co Ltd - 90/25 Sukhumvit 81 - 10260 Bangkok - Thailand
* @license Commercial license
* Support by mail : support.sonice@common-services.com
*/
if (isset($_SERVER['DropBox']) && $_SERVER['DropBox']) {
require_once(readlink(dirname($_SERVER['SCRIPT_FILENAME']).'/../../../config/config.inc.php'));
} else {
require_once(dirname(__FILE__).'/../../../config/config.inc.php');
}
require_once(_PS_MODULE_DIR_.'sonice_retour'.DIRECTORY_SEPARATOR.'sonice_retour.php');
class SoColissimoDownload extends SoNice_retour
{
public function action()
{
$file = $_REQUEST['file'];
if (!file_exists($this->download_folder.$file)) {
die('File not found');
}
header('Content-Disposition: attachment; filename="'.date('Ymd-His').'.pdf"');
echo Tools::file_get_contents($this->download_folder.$file);
}
}
$so_colissimo_download = new SoColissimoDownload();
$so_colissimo_download->action();

View File

@@ -0,0 +1,254 @@
<?php
/**
* NOTICE OF LICENSE
*
* This source file is subject to a commercial license from Common-Services Co., Ltd.
* Use, copy, modification or distribution of this source file without written
* license agreement from the SARL SMC is strictly forbidden.
* In order to obtain a license, please contact us: contact@common-services.com
* ...........................................................................
* INFORMATION SUR LA LICENCE D'UTILISATION
*
* L'utilisation de ce fichier source est soumise a une licence commerciale
* concedee par la societe Common-Services Co., Ltd.
* Toute utilisation, reproduction, modification ou distribution du present
* fichier source sans contrat de licence ecrit de la part de la Common-Services Co. Ltd. est
* expressement interdite.
* Pour obtenir une licence, veuillez contacter Common-Services Co., Ltd. a l'adresse: contact@common-services.com
* ...........................................................................
*
* @package SoNice Retour
* @author Alexandre D.
* @copyright Copyright (c) 2011-2015 Common Services Co Ltd - 90/25 Sukhumvit 81 - 10260 Bangkok - Thailand
* @license Commercial license
* Support by mail : support.sonice@common-services.com
*/
if (isset($_SERVER['DropBox']) && $_SERVER['DropBox']) {
require_once(readlink(dirname($_SERVER['SCRIPT_FILENAME']).'/../../../config/config.inc.php'));
require_once(readlink(_PS_MODULE_DIR_.'sonice_retour'.DIRECTORY_SEPARATOR.'sonice_retour.php'));
require_once(readlink(_PS_MODULE_DIR_.'sonice_retour'.DIRECTORY_SEPARATOR.'classes/SoNiceRetourPDF.php'));
require_once(readlink(_PS_MODULE_DIR_.'sonice_retour'.DIRECTORY_SEPARATOR.'classes/SoNiceRetourTools.php'));
} else {
require_once(dirname(__FILE__).'/../../../config/config.inc.php');
require_once(dirname(__FILE__).'/../sonice_retour.php');
require_once(dirname(__FILE__).'/../classes/SoNiceRetourPDF.php');
require_once(dirname(__FILE__).'/../classes/SoNiceRetourTools.php');
}
if (Tools::getValue('token') !== md5(_COOKIE_IV_)) {
header('HTTP/1.0 401 Unauthorized');
echo 'Wrong token';
die;
}
class SoNiceEtiquetageGetLabel extends SoNice_Retour
{
public $config;
public function __construct()
{
parent::__construct();
if (Tools::getValue('debug')) {
$this->debug = true;
}
if ($this->debug) {
@ini_set('display_errors', 'on');
@define('_PS_DEBUG_SQL_', true);
@error_reporting(E_ALL | E_STRICT);
}
$this->config = unserialize(Configuration::get('ETIQUETAGE_RETURN_CONF'));
if (!is_array($this->config)) {
$this->config = array();
}
}
public function getLabelPDF()
{
ob_start();
$id_order = Tools::getValue('id_order');
$id_order_details = Tools::getValue('id_order_details');
$id_order_details_quantity = Tools::getValue('id_order_details_quantity');
$id_return = Tools::getValue('id_return', null);
if (!Validate::isInt($id_order)) {
die($this->l('Impossible to retrieve the id order array.'));
}
$pdfs = array();
SoNiceRetourTools::cleanup();
$colissimo = new SoNiceRetourPDF($id_order, $id_order_details);
if (!$colissimo instanceof SoNiceRetourPDF) {
die(printf('Order %d : $colissimo is not an instance of class SoNiceRetourPDF.<br><br>', $id_order));
}
$call = $colissimo->callWS();
if (!$call) {
die(printf('Order %d : An error occured.<br>-> %s<br>-> %s<br><br>', $id_order, $colissimo->error->errorID, $colissimo->error->error));
}
$pdfs[$id_order] = $colissimo->getFormattedResponse();
if (!$pdfs[$id_order]['errorID'] && isset($pdfs[$id_order]['parcelNumber']) && Tools::strlen($pdfs[$id_order]['parcelNumber']) >= 10) {
$date = new DateTime();
$id_label = Db::getInstance()->getValue('SELECT `id_label` FROM `'._DB_PREFIX_.'so_return_label` WHERE `id_return` = '.(int)$id_return);
if (!$id_return) {
$order_return = new OrderReturn();
$order_return->id_customer = $colissimo->customer->id;
$order_return->id_order = $colissimo->order->id;
$order_return->state = 2;
$order_return->question = 'SoNice Retour - Commande '.(int)$colissimo->order->id;
if ($order_return->save()) {
$id_return = $order_return->id ? $order_return->id : Db::getInstance()->Insert_ID();
// OrderReturnDetails
$product_quantity_list = array();
foreach (array_keys($id_order_details) as $key) {
$product_quantity_list[$key] = $id_order_details_quantity[$key];
}
$order_return->addReturnDetail($id_order_details, $product_quantity_list, null, null);
// Send mail to customer
if (isset($this->config['email_to_customer']) && $this->config['email_to_customer']) {
$orderReturnState = new OrderReturnState($order_return->state);
$vars = array(
'{lastname}' => $colissimo->customer->lastname,
'{firstname}' => $colissimo->customer->firstname,
'{id_order_return}' => $id_return,
'{state_order_return}' => (
isset($orderReturnState->name[(int)$colissimo->order->id_lang]) ?
$orderReturnState->name[(int)$colissimo->order->id_lang] : $orderReturnState->name[(int)Configuration::get('PS_LANG_DEFAULT')]
)
);
Mail::Send(
(int)$colissimo->order->id_lang,
$this->config['email_to_customer'],
Mail::l('Your order return status has changed', $colissimo->order->id_lang),
$vars,
$colissimo->customer->email,
$colissimo->customer->firstname.' '.$colissimo->customer->lastname,
null,
null,
null,
null,
_PS_MAIL_DIR_,
true,
(int)$colissimo->order->id_shop
);
}
}
} else {
// DUPLICATE - TODO optimize
$order_return = new OrderReturn($id_return);
$order_return->state = 2;
if ($order_return->save()) {
// Send mail to customer
if (isset($this->config['email_to_customer']) && $this->config['email_to_customer']) {
$orderReturnState = new OrderReturnState($order_return->state);
$vars = array(
'{lastname}' => $colissimo->customer->lastname,
'{firstname}' => $colissimo->customer->firstname,
'{id_order_return}' => $id_return,
'{state_order_return}' => (
isset($orderReturnState->name[(int)$colissimo->order->id_lang]) ?
$orderReturnState->name[(int)$colissimo->order->id_lang] : $orderReturnState->name[(int)Configuration::get('PS_LANG_DEFAULT')]
)
);
Mail::Send(
(int)$colissimo->order->id_lang,
$this->config['email_to_customer'],
Mail::l('Your order return status has changed', $colissimo->order->id_lang),
$vars,
$colissimo->customer->email,
$colissimo->customer->firstname.' '.$colissimo->customer->lastname,
null,
null,
null,
null,
_PS_MAIL_DIR_,
true,
(int)$colissimo->order->id_shop
);
}
}
}
$pdfs[$id_order]['id_return'] = $id_return;
$pdfs[$id_order]['date'] = $date->format('Y-m-d H:i:s');
$state_infos = Db::getInstance()->getRow('
SELECT DISTINCT
orsl.`name`,
ors.`color`
FROM
`'._DB_PREFIX_.'order_return_state_lang` AS orsl,
`'._DB_PREFIX_.'order_return_state` AS ors
WHERE
ors.`id_order_return_state` = 2
AND ors.`id_order_return_state` = orsl.`id_order_return_state`
AND orsl.`id_lang` = 1
');
$pdfs[$id_order]['state'] = $state_infos['name'];
$pdfs[$id_order]['color'] = $state_infos['color'];
$sql = 'REPLACE INTO `'._DB_PREFIX_.'so_return_label` (`id_label`, `id_return`, `id_coliposte`, `date_add`, `date_upd`)
VALUES (
'.(int)$id_label.',
'.(int)$id_return.',
"'.pSQL($pdfs[$id_order]['parcelNumber']).'",
"'.$date->format('Y-m-d H:i:s').'",
"'.$date->format('Y-m-d H:i:s').'"
)';
Db::getInstance()->execute($sql);
// Set server link to PDF
if (!$colissimo->demo) {
$pdfs[$id_order]['PdfUrl'] = $this->url.'download/'.$pdfs[$id_order]['parcelNumber'].'.pdf';
} else {
@copy($this->path.'functions/demo_retour.pdf', $this->path.'download/'.$pdfs[$id_order]['parcelNumber'].'.pdf');
}
} else {
echo '<details><summary>'.$this->l('More details').'</summary><pre>'.$colissimo->xmlpp($colissimo->request, true).'</pre></details><br>';
printf('Web Service<br><pre>==> errorID -> %s<br>==> error -> %s</pre><br><br>', $pdfs[$id_order]['errorID'], $pdfs[$id_order]['error']);
printf(
$this->l('Order').' %d: %s<br>==> id_order -> %d<br>==> parcelNumer -> %s<br>==> PdfUrl -> %s<br>%s<br><br>',
$id_order,
$this->l('It seems like the datas we try to insert in the database are wrong. Values are :'),
$id_order,
isset($pdfs[$id_order]['parcelNumber']) && Tools::strlen($pdfs[$id_order]['parcelNumber']) < 10 ?
('<strong>'.$pdfs[$id_order]['parcelNumber'].'</strong>') : $this->l('Missing'),
isset($pdfs[$id_order]['PdfUrl']) && Tools::strlen($pdfs[$id_order]['PdfUrl']) <= 110 ?
('<strong>'.$pdfs[$id_order]['PdfUrl'].'</strong>') : $this->l('Missing'),
$this->l('The label was not saved, please try again later.')
);
}
$callback = Tools::getValue('callback');
$output = ob_get_clean();
// Delete parasite
if (Tools::strlen($output) < 5) {
$output = '';
}
die($callback.'('.Tools::jsonEncode(array('console' => $output, 'pdfs' => $pdfs)).')');
}
}
$label = new SoNiceEtiquetageGetLabel();
$label->getLabelPDF();

View File

@@ -0,0 +1,11 @@
<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Location: ../");
exit;

View File

@@ -0,0 +1,24 @@
HTTP/1.1 200 OK
Date: Wed, 21 Oct 2015 10:48:00 GMT
Server: Apache-Coyote/1.1
Content-Type: multipart/related; type="application/xop+xml"; boundary="uuid:54455e20-d118-43b0-8a6a-6ab8631d3b36"; start="<root.message@cxf.apache.org>"; start-info="text/xml"
Vary: User-Agent
Keep-Alive: timeout=15, max=200
Connection: Keep-Alive
Transfer-Encoding: chunked
--uuid:54455e20-d118-43b0-8a6a-6ab8631d3b36
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml";
Content-Transfer-Encoding: binary
Content-ID: <root.message@cxf.apache.org>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:generateLabelResponse xmlns:ns2="http://sls.ws.coliposte.fr"><return><messages><id>0</id><messageContent>La requête a été traitée avec succès</messageContent><type>INFOS</type></messages><labelResponse><label><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:ba63815d-25be-4ab2-9c5f-33e2232bbf3c-326@cxf.apache.org"/></label><parcelNumber>8R28280687469</parcelNumber><pdfUrl>https://10.36.211.129/sls-ws/GetLabel?parcelNumber=8R28280687469&amp;includeCustomsDeclarations=false&amp;signature=6817d6904ed1456974d2ad27da57554c74fc2671b97a917ffcc1fd85e963f5ca</pdfUrl></labelResponse></return></ns2:generateLabelResponse></soap:Body></soap:Envelope>
--uuid:54455e20-d118-43b0-8a6a-6ab8631d3b36
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-ID: <ba63815d-25be-4ab2-9c5f-33e2232bbf3c-326@cxf.apache.org>
%PDF-1.4
%âãÏÓ
3 0 obj <</Length 1573/Filter/FlateDecode>>stream
xœµXËn7¼ÏWðo ÈÁŽ<C381>S(<11>CàÃ>“R9€üû©ækfvײ,!Xx4ä<34>ÝÅîb±é{e´1Fùì5Ç #<23>²Q¯zǧƒúMý=MWonÿúG½þéÍt¯œÍÚF£,{<7B>“S”²ÎLÊ<06>¼éSîEÒ!Yeð“o.<2E>L<EFBFBD>jw§ÔÕÏÛFýðQ]OÓµz+.¦LÚQT.xí3)6N OµÙ<¼¾ãiJ¤nö°ë]i`qj~|úcºz÷ñæ<C3B1>QäʲoŽÓw† kœñ&˜ˆ÷„wùçL6ôn¿W7¦·7Ó¿ÓõZÎ:˜ Õ@1iæšg£SZÒd|…–,² hlfh;³€ƒ90