Version Notes
test release
Download this release
Release Info
Developer | Sebastian Ertner |
Extension | Expercash_payment |
Version | 15.05.06 |
Comparing to | |
See all releases |
Version 15.05.06
- app/code/community/Expercash/Expercash/Block/Expercash.php +100 -0
- app/code/community/Expercash/Expercash/Block/Form.php +65 -0
- app/code/community/Expercash/Expercash/Block/Form/Expercash.php +29 -0
- app/code/community/Expercash/Expercash/Block/Info.php +56 -0
- app/code/community/Expercash/Expercash/Block/Info/Expercash.php +79 -0
- app/code/community/Expercash/Expercash/Block/Masterpass/Form.php +95 -0
- app/code/community/Expercash/Expercash/Block/Masterpass/Fullcheckout/Cc.php +62 -0
- app/code/community/Expercash/Expercash/Block/Masterpass/Fullcheckout/Shortcut.php +260 -0
- app/code/community/Expercash/Expercash/Helper/Data.php +187 -0
- app/code/community/Expercash/Expercash/Helper/Masterpass.php +539 -0
- app/code/community/Expercash/Expercash/Helper/Payment.php +650 -0
- app/code/community/Expercash/Expercash/Model/Api/Abstract.php +191 -0
- app/code/community/Expercash/Expercash/Model/Api/Api.php +86 -0
- app/code/community/Expercash/Expercash/Model/Api/Capture.php +158 -0
- app/code/community/Expercash/Expercash/Model/Api/Masterpass/Capture.php +83 -0
- app/code/community/Expercash/Expercash/Model/Api/Masterpass/Epi.php +85 -0
- app/code/community/Expercash/Expercash/Model/Config.php +221 -0
- app/code/community/Expercash/Expercash/Model/Directory/Region.php +57 -0
- app/code/community/Expercash/Expercash/Model/Entity/Setup.php +46 -0
- app/code/community/Expercash/Expercash/Model/Expercash.php +236 -0
- app/code/community/Expercash/Expercash/Model/Expercashcc.php +100 -0
- app/code/community/Expercash/Expercash/Model/Expercashelv.php +99 -0
- app/code/community/Expercash/Expercash/Model/Expercashgp.php +80 -0
- app/code/community/Expercash/Expercash/Model/Expercashmp.php +98 -0
- app/code/community/Expercash/Expercash/Model/Expercashmpf.php +233 -0
- app/code/community/Expercash/Expercash/Model/Expercashpc.php +88 -0
- app/code/community/Expercash/Expercash/Model/Expercashpp.php +77 -0
- app/code/community/Expercash/Expercash/Model/Expercashso.php +80 -0
- app/code/community/Expercash/Expercash/Model/Masterpass/Config.php +204 -0
- app/code/community/Expercash/Expercash/Model/Observer.php +178 -0
- app/code/community/Expercash/Expercash/Model/Request/Iframe.php +171 -0
- app/code/community/Expercash/Expercash/Model/Request/Masterpass/Epi.php +124 -0
- app/code/community/Expercash/Expercash/Model/Request/Token.php +192 -0
- app/code/community/Expercash/Expercash/Model/Request/Token/Iframe.php +180 -0
- app/code/community/Expercash/Expercash/Model/Resource/Directory/Region.php +54 -0
- app/code/community/Expercash/Expercash/Model/Source/Paymenttypecc.php +40 -0
- app/code/community/Expercash/Expercash/Model/Source/Paymenttypeelv.php +40 -0
- app/code/community/Expercash/Expercash/Model/Source/Paymenttypegp.php +36 -0
- app/code/community/Expercash/Expercash/Model/Source/Paymenttypemp.php +38 -0
- app/code/community/Expercash/Expercash/Model/Source/Paymenttypempf.php +42 -0
- app/code/community/Expercash/Expercash/Model/Source/Paymenttypeso.php +36 -0
- app/code/community/Expercash/Expercash/Test/Block/ExpercashTest.php +144 -0
- app/code/community/Expercash/Expercash/Test/Block/ExpercashTest/expectations/orders.yaml +2 -0
- app/code/community/Expercash/Expercash/Test/Block/ExpercashTest/fixtures/orders.yaml +42 -0
- app/code/community/Expercash/Expercash/Test/Block/Masterpass/FormTest.php +108 -0
- app/code/community/Expercash/Expercash/Test/Block/Masterpass/Fullcheckout/ShortcutTest.php +182 -0
- app/code/community/Expercash/Expercash/Test/Controller/ExpercashControllerTest.php +182 -0
- app/code/community/Expercash/Expercash/Test/Controller/ExpercashControllerTest/expectations/orders.yaml +1 -0
- app/code/community/Expercash/Expercash/Test/Controller/ExpercashControllerTest/fixtures/orders.yaml +81 -0
- app/code/community/Expercash/Expercash/Test/Helper/DataTest.php +25 -0
- app/code/community/Expercash/Expercash/Test/Helper/MasterpassTest.php +43 -0
- app/code/community/Expercash/Expercash/Test/Helper/PaymentTest.php +356 -0
- app/code/community/Expercash/Expercash/Test/Helper/PaymentTest/fixtures/orders.yaml +50 -0
- app/code/community/Expercash/Expercash/Test/Model/Api/AbstractTest.php +145 -0
- app/code/community/Expercash/Expercash/Test/Model/Api/ApiTest.php +66 -0
- app/code/community/Expercash/Expercash/Test/Model/Api/ApiTest/TestFiles/FailedTransaction.xml +7 -0
- app/code/community/Expercash/Expercash/Test/Model/Api/ApiTest/TestFiles/ResponseParamsMissing.xml +6 -0
- app/code/community/Expercash/Expercash/Test/Model/Api/ApiTest/TestFiles/SuccessFullResponse.xml +7 -0
- app/code/community/Expercash/Expercash/Test/Model/Api/CaptureTest.php +140 -0
- app/code/community/Expercash/Expercash/Test/Model/Api/CaptureTest/fixtures/.gitkeep +0 -0
- app/code/community/Expercash/Expercash/Test/Model/Api/CaptureTest/fixtures/orders.yaml +57 -0
- app/code/community/Expercash/Expercash/Test/Model/ConfigTest.php +187 -0
- app/code/community/Expercash/Expercash/Test/Model/ExpercashTest.php +361 -0
- app/code/community/Expercash/Expercash/Test/Model/ExpercashTest/fixtures/.gitkeep +0 -0
- app/code/community/Expercash/Expercash/Test/Model/ExpercashccTest.php +141 -0
- app/code/community/Expercash/Expercash/Test/Model/ExpercashccTest/fixtures/.gitkeep +0 -0
- app/code/community/Expercash/Expercash/Test/Model/ExpercashelvTest.php +143 -0
- app/code/community/Expercash/Expercash/Test/Model/ExpercashelvTest/fixtures/.gitkeep +0 -0
- app/code/community/Expercash/Expercash/Test/Model/ExpercashgpTest.php +102 -0
- app/code/community/Expercash/Expercash/Test/Model/ExpercashgpTest/fixtures/.gitkeep +0 -0
- app/code/community/Expercash/Expercash/Test/Model/ExpercashmpTest.php +141 -0
- app/code/community/Expercash/Expercash/Test/Model/ExpercashmpfTest.php +204 -0
- app/code/community/Expercash/Expercash/Test/Model/ExpercashmpfTest/fixtures/quote.yaml +95 -0
- app/code/community/Expercash/Expercash/Test/Model/ExpercashpcTest.php +91 -0
- app/code/community/Expercash/Expercash/Test/Model/ExpercashpcTest/fixtures/.gitkeep +0 -0
- app/code/community/Expercash/Expercash/Test/Model/ExpercashpcTest/fixtures/quote.yaml +92 -0
- app/code/community/Expercash/Expercash/Test/Model/ExpercashppTest.php +86 -0
- app/code/community/Expercash/Expercash/Test/Model/ExpercashsoTest.php +109 -0
- app/code/community/Expercash/Expercash/Test/Model/Request/IframeTest.php +242 -0
- app/code/community/Expercash/Expercash/Test/Model/Request/IframeTest/fixtures/order.yaml +72 -0
- app/code/community/Expercash/Expercash/Test/Model/Request/Token/IframeTest.php +266 -0
- app/code/community/Expercash/Expercash/Test/Model/Request/Token/IframeTest/fixtures/order.yaml +71 -0
- app/code/community/Expercash/Expercash/Test/Model/Request/TokenTest.php +266 -0
- app/code/community/Expercash/Expercash/Test/Model/Request/TokenTest/fixtures/order.yaml +71 -0
- app/code/community/Expercash/Expercash/Test/var/expectations/orders.yaml +1 -0
- app/code/community/Expercash/Expercash/Test/var/fixtures/orders.yaml +53 -0
- app/code/community/Expercash/Expercash/Test/var/fixtures/quote.yaml +96 -0
- app/code/community/Expercash/Expercash/controllers/Checkout/OnepageController.php +113 -0
- app/code/community/Expercash/Expercash/controllers/ExpercashController.php +185 -0
- app/code/community/Expercash/Expercash/controllers/FullcheckoutController.php +143 -0
- app/code/community/Expercash/Expercash/etc/config.xml +363 -0
- app/code/community/Expercash/Expercash/etc/system.xml +861 -0
- app/code/community/Expercash/Expercash/sql/expercash_setup/mysql4-install-1.0.0.php +56 -0
- app/design/adminhtml/default/default/template/expercash/info/expercash.phtml +53 -0
- app/design/adminhtml/default/default/template/expercash/info/pdf/expercash.phtml +23 -0
- app/design/frontend/base/default/layout/expercash.xml +121 -0
- app/design/frontend/base/default/template/expercash/checkout/ce15/onepage.phtml +49 -0
- app/design/frontend/base/default/template/expercash/checkout/onepage.phtml +56 -0
- app/design/frontend/base/default/template/expercash/checkout/onepage/js.phtml +40 -0
- app/design/frontend/base/default/template/expercash/expercash.phtml +25 -0
- app/design/frontend/base/default/template/expercash/expercasherror.phtml +26 -0
- app/design/frontend/base/default/template/expercash/form/expercashiframe.phtml +26 -0
- app/design/frontend/base/default/template/expercash/info/expercash.phtml +24 -0
- app/design/frontend/base/default/template/expercash/info/pdf/expercash.phtml +23 -0
- app/design/frontend/base/default/template/expercash/masterpass/fullcheckout/checkout.phtml +62 -0
- app/design/frontend/base/default/template/expercash/masterpass/fullcheckout/shortcut.phtml +119 -0
- app/design/frontend/base/default/template/expercash/payment/logo/logo.phtml +38 -0
- app/design/frontend/base/default/template/expercash/payment/masterpass/cc.phtml +17 -0
- app/design/frontend/rwd/default/template/expercash/checkout/onepage.phtml +45 -0
- app/etc/modules/Expercash_Expercash.xml +34 -0
- app/locale/de_DE/Expercash_Expercash.csv +115 -0
- app/locale/en_US/Expercash_Expercash.csv +30 -0
- app/skin/frontend/base/default/images/expercash/masterpass.png +0 -0
- doc/Expercash_Expercash/.gitkeep +0 -0
- doc/Expercash_Expercash/Benutzerdokumentation.pdf +6953 -0
- doc/Expercash_Expercash/ChangeLog.pdf +860 -0
- package.xml +2 -0
- skin/frontend/base/default/css/expercash.css +167 -0
- skin/frontend/base/default/images/expercash/mp_buy_with_button.png +0 -0
- skin/frontend/base/default/images/expercash/mp_ident.png +0 -0
- skin/frontend/base/default/js/expercashopc.js +127 -0
app/code/community/Expercash/Expercash/Block/Expercash.php
ADDED
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
class Expercash_Expercash_Block_Expercash extends Mage_Core_Block_Template
|
24 |
+
{
|
25 |
+
|
26 |
+
protected function _construct()
|
27 |
+
{
|
28 |
+
parent::_construct();
|
29 |
+
$this->setTemplate('expercash/expercash.phtml');
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* get iframe css class from config
|
34 |
+
*
|
35 |
+
* @return string
|
36 |
+
*/
|
37 |
+
protected function getIframeCssClass()
|
38 |
+
{
|
39 |
+
return $this->getConfig()->getIframeCssClass($this->getStoreId());
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* get iframe width from config
|
44 |
+
*
|
45 |
+
* @return string
|
46 |
+
*/
|
47 |
+
protected function getIframeWidth()
|
48 |
+
{
|
49 |
+
return $this->getConfig()->getIframeWidth($this->getStoreId());
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* get iframe height from config
|
54 |
+
*
|
55 |
+
* @return string
|
56 |
+
*/
|
57 |
+
protected function getIframeHeight()
|
58 |
+
{
|
59 |
+
return $this->getConfig()->getIframeHeight($this->getStoreId());
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* @return string
|
64 |
+
*/
|
65 |
+
protected function getIframeUrl()
|
66 |
+
{
|
67 |
+
$iframeModel = $this->getIframeModel();
|
68 |
+
$iframeModel->setOrderDataToSession();
|
69 |
+
$iframeUrl = $iframeModel->getIframeUrl();
|
70 |
+
Mage::helper('expercash/data')->log(sprintf("Create iframe-url:\n%s", $iframeUrl));
|
71 |
+
|
72 |
+
return $iframeUrl;
|
73 |
+
}
|
74 |
+
|
75 |
+
/**
|
76 |
+
* getter for iframe model
|
77 |
+
*
|
78 |
+
* @return Expercash_Expercash_Model_Request_Iframe
|
79 |
+
*/
|
80 |
+
protected function getIframeModel()
|
81 |
+
{
|
82 |
+
return Mage::getModel('expercash/request_iframe');
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* getter for config model
|
87 |
+
*
|
88 |
+
* @return Expercash_Expercash_Model_Config
|
89 |
+
*/
|
90 |
+
protected function getConfig()
|
91 |
+
{
|
92 |
+
return Mage::getModel('expercash/config');
|
93 |
+
}
|
94 |
+
|
95 |
+
protected function getStoreId()
|
96 |
+
{
|
97 |
+
return $this->getIframeModel()->getOrder()->getStoreId();
|
98 |
+
}
|
99 |
+
|
100 |
+
}
|
app/code/community/Expercash/Expercash/Block/Form.php
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
class Expercash_Expercash_Block_Form extends Mage_Core_Block_Template
|
24 |
+
{
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Retrieve payment method model
|
28 |
+
*
|
29 |
+
* @return Mage_Payment_Model_Method_Abstract
|
30 |
+
*/
|
31 |
+
public function getMethod()
|
32 |
+
{
|
33 |
+
$method = $this->getData('method');
|
34 |
+
|
35 |
+
if (!($method instanceof Mage_Payment_Model_Method_Abstract)) {
|
36 |
+
Mage::throwException(
|
37 |
+
$this->__('Can not retrieve payment method model object.')
|
38 |
+
);
|
39 |
+
}
|
40 |
+
return $method;
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Retrieve payment method code
|
45 |
+
*
|
46 |
+
* @return string
|
47 |
+
*/
|
48 |
+
public function getMethodCode()
|
49 |
+
{
|
50 |
+
return $this->getMethod()->getCode();
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Retrieve field value data from payment info object
|
55 |
+
*
|
56 |
+
* @param string $field
|
57 |
+
* @return mixed
|
58 |
+
*/
|
59 |
+
public function getInfoData($field)
|
60 |
+
{
|
61 |
+
return $this->htmlEscape(
|
62 |
+
$this->getMethod()->getInfoInstance()->getData($field)
|
63 |
+
);
|
64 |
+
}
|
65 |
+
}
|
app/code/community/Expercash/Expercash/Block/Form/Expercash.php
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
class Expercash_Expercash_Block_Form_Expercash extends Mage_Payment_Block_Form
|
23 |
+
{
|
24 |
+
protected function _construct()
|
25 |
+
{
|
26 |
+
parent::_construct();
|
27 |
+
$this->setTemplate('expercash/form/expercashiframe.phtml');
|
28 |
+
}
|
29 |
+
}
|
app/code/community/Expercash/Expercash/Block/Info.php
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
class Expercash_Expercash_Block_Info extends Mage_Core_Block_Template
|
23 |
+
{
|
24 |
+
|
25 |
+
protected function _construct()
|
26 |
+
{
|
27 |
+
parent::_construct();
|
28 |
+
$this->setTemplate('expercash/info/default.phtml');
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Retrieve info model
|
33 |
+
*
|
34 |
+
* @return Mage_Payment_Model_Info
|
35 |
+
*/
|
36 |
+
public function getInfo()
|
37 |
+
{
|
38 |
+
$info = $this->getData('info');
|
39 |
+
if (!($info instanceof Mage_Payment_Model_Info)) {
|
40 |
+
Mage::throwException(
|
41 |
+
$this->__('Can not retrieve payment info model object.')
|
42 |
+
);
|
43 |
+
}
|
44 |
+
return $info;
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Retrieve payment method model
|
49 |
+
*
|
50 |
+
* @return Mage_Payment_Model_Method_Abstract
|
51 |
+
*/
|
52 |
+
public function getMethod()
|
53 |
+
{
|
54 |
+
return $this->getInfo()->getMethodInstance();
|
55 |
+
}
|
56 |
+
}
|
app/code/community/Expercash/Expercash/Block/Info/Expercash.php
ADDED
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
class Expercash_Expercash_Block_Info_Expercash extends Mage_Payment_Block_Info
|
24 |
+
{
|
25 |
+
protected $_expercashStack = false;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Init default template for block
|
29 |
+
*/
|
30 |
+
protected function _construct()
|
31 |
+
{
|
32 |
+
parent::_construct();
|
33 |
+
$this->setTemplate('expercash/info/expercash.phtml');
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Retrieve info model
|
38 |
+
*
|
39 |
+
* @return Mage_Sofortueberweisung_Model_Info
|
40 |
+
*/
|
41 |
+
public function getInfo()
|
42 |
+
{
|
43 |
+
$info = $this->getData('info');
|
44 |
+
|
45 |
+
if (!($info instanceof Mage_Payment_Model_Info)) {
|
46 |
+
Mage::throwException(
|
47 |
+
$this->__('Can not retrieve payment info model object.')
|
48 |
+
);
|
49 |
+
}
|
50 |
+
return $info;
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Retrieve payment method model
|
55 |
+
*
|
56 |
+
* @return Mage_Payment_Model_Method_Abstract
|
57 |
+
*/
|
58 |
+
public function getMethod()
|
59 |
+
{
|
60 |
+
return $this->getInfo()->getMethodInstance();
|
61 |
+
}
|
62 |
+
|
63 |
+
public function toPdf()
|
64 |
+
{
|
65 |
+
$this->setTemplate('expercash/info/pdf/expercash.phtml');
|
66 |
+
return $this->toHtml();
|
67 |
+
}
|
68 |
+
|
69 |
+
public function getExperCashInfo($string)
|
70 |
+
{
|
71 |
+
if ($this->_expercashStack === false):
|
72 |
+
$this->_expercashStack = Mage::helper('expercash/payment')
|
73 |
+
->getExperCashData($this->getInfo()->getOrder()->getQuoteId());
|
74 |
+
endif;
|
75 |
+
$test = isset($this->_expercashStack[0][$string]) ? $this->_expercashStack[0][$string] : false;
|
76 |
+
|
77 |
+
return $test;
|
78 |
+
}
|
79 |
+
}
|
app/code/community/Expercash/Expercash/Block/Masterpass/Form.php
ADDED
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
/**
|
24 |
+
* PayPal Standard payment "form"
|
25 |
+
*/
|
26 |
+
class Expercash_Expercash_Block_Masterpass_Form extends Mage_Payment_Block_Form
|
27 |
+
{
|
28 |
+
/**
|
29 |
+
* Payment method code
|
30 |
+
*
|
31 |
+
* @var string
|
32 |
+
*/
|
33 |
+
protected $_methodCode = "expercashmp";
|
34 |
+
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Set template and add logo if needed
|
38 |
+
*/
|
39 |
+
protected function _construct()
|
40 |
+
{
|
41 |
+
$this->setTemplate('expercash/form/expercashiframe.phtml');
|
42 |
+
$logo = $this->handleLogoDisplay();
|
43 |
+
if ($logo !== null) {
|
44 |
+
$this->setTemplate('expercash/form/expercashiframe.phtml')
|
45 |
+
->setMethodTitle('')
|
46 |
+
->setMethodLabelAfterHtml($logo->toHtml());
|
47 |
+
}
|
48 |
+
|
49 |
+
return parent::_construct();
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Payment method code getter
|
54 |
+
*
|
55 |
+
* @return string
|
56 |
+
*/
|
57 |
+
public function getMethodCode()
|
58 |
+
{
|
59 |
+
return $this->_methodCode;
|
60 |
+
}
|
61 |
+
|
62 |
+
|
63 |
+
|
64 |
+
/**
|
65 |
+
* handles the display of Masterpass Logo based on config setting
|
66 |
+
*
|
67 |
+
* @return null|object
|
68 |
+
*/
|
69 |
+
protected function handleLogoDisplay()
|
70 |
+
{
|
71 |
+
$config = $this->getMasterpassConfig();
|
72 |
+
$mark = null;
|
73 |
+
if ($config->showMasterpassLogoInCheckout() == true) {
|
74 |
+
$mark = Mage::app()->getLayout()->createBlock('core/template');
|
75 |
+
$mark->setTemplate('expercash/payment/logo/logo.phtml')
|
76 |
+
->setPaymentAcceptanceMarkHref($config->getMasterpassLearnMoreUrl(Mage::app()->getLocale()))
|
77 |
+
->setPaymentAcceptanceMarkSrc($config->getMasterPassCheckoutLogo());
|
78 |
+
}
|
79 |
+
|
80 |
+
return $mark;
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* get masterpass config model
|
85 |
+
*
|
86 |
+
* @return Expercash_Expercash_Model_Masterpass_Config
|
87 |
+
*/
|
88 |
+
protected function getMasterpassConfig()
|
89 |
+
{
|
90 |
+
return Mage::getModel('expercash/masterpass_config');
|
91 |
+
}
|
92 |
+
|
93 |
+
|
94 |
+
|
95 |
+
}
|
app/code/community/Expercash/Expercash/Block/Masterpass/Fullcheckout/Cc.php
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
class Expercash_Expercash_Block_Masterpass_Fullcheckout_Cc extends Expercash_Expercash_Block_Masterpass_Form
|
23 |
+
{
|
24 |
+
protected function _construct()
|
25 |
+
{
|
26 |
+
parent::_construct();
|
27 |
+
|
28 |
+
if ($this->getMasterpassConfig()->isShowCCDataInCheckoutEnabled()) {
|
29 |
+
$this->setTemplate('expercash/payment/masterpass/cc.phtml');
|
30 |
+
}
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* get quote from session
|
35 |
+
*
|
36 |
+
* @return Mage_Sales_Model_Quote
|
37 |
+
*/
|
38 |
+
public function getQuote()
|
39 |
+
{
|
40 |
+
return Mage::getModel('checkout/session')->getQuote();
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* get masked cc number from payment
|
45 |
+
*
|
46 |
+
* @return string
|
47 |
+
*/
|
48 |
+
public function getMaskedPan()
|
49 |
+
{
|
50 |
+
return $this->getQuote()->getPayment()->getAdditionalInformation('maskedPan');
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* get card name from payment
|
55 |
+
*
|
56 |
+
* @return string
|
57 |
+
*/
|
58 |
+
public function getCardSchema()
|
59 |
+
{
|
60 |
+
return $this->getQuote()->getPayment()->getAdditionalInformation('cardScheme');
|
61 |
+
}
|
62 |
+
}
|
app/code/community/Expercash/Expercash/Block/Masterpass/Fullcheckout/Shortcut.php
ADDED
@@ -0,0 +1,260 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
class Expercash_Expercash_Block_Masterpass_Fullcheckout_Shortcut extends Mage_Core_Block_Template
|
23 |
+
{
|
24 |
+
/**
|
25 |
+
* layout name for cart top button
|
26 |
+
*/
|
27 |
+
const LAYOUTNAME_TOP = 'checkout.cart.methods.masterpass_fullcheckout.top';
|
28 |
+
|
29 |
+
/**
|
30 |
+
* layout name for cart bottom button
|
31 |
+
*/
|
32 |
+
const LAYOUTNAME_BOTTOM = 'checkout.cart.methods.masterpass_fullcheckout.bottom';
|
33 |
+
|
34 |
+
/**
|
35 |
+
* layout name for mini cart button
|
36 |
+
*/
|
37 |
+
const LAYOUTNAME_SIDEBAR = 'expercash.cart_sidebar.shortcut';
|
38 |
+
|
39 |
+
const LAYOUTNAME_MINI_CART ="expercash.masterpass.mini_cart.shortcut";
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Whether the block should be eventually rendered
|
43 |
+
*
|
44 |
+
* @var bool
|
45 |
+
*/
|
46 |
+
protected $_shouldRender = true;
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Payment method code
|
50 |
+
*
|
51 |
+
* @var string
|
52 |
+
*/
|
53 |
+
protected $_paymentMethodCode = 'expercashmpf';
|
54 |
+
|
55 |
+
|
56 |
+
/**
|
57 |
+
* setter for shouldRender property
|
58 |
+
*
|
59 |
+
* @param $var
|
60 |
+
*/
|
61 |
+
public function setShouldRender($var)
|
62 |
+
{
|
63 |
+
$this->_shouldRender = $var;
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* getter for shouldRender property
|
68 |
+
*
|
69 |
+
* @return bool
|
70 |
+
*/
|
71 |
+
public function getShouldRender()
|
72 |
+
{
|
73 |
+
return $this->_shouldRender;
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* determine if masterpass button should be displayed and set shouldrender accordingly
|
78 |
+
*
|
79 |
+
* @return Mage_Core_Block_Abstract
|
80 |
+
*/
|
81 |
+
protected function _beforeToHtml()
|
82 |
+
{
|
83 |
+
$result = parent::_beforeToHtml();
|
84 |
+
$nameInLayout = $this->getNameInLayout();
|
85 |
+
$quote = Mage::getSingleton('checkout/session')->getQuote();
|
86 |
+
$config = $this->getMasterpassConfig();
|
87 |
+
|
88 |
+
// check if full checkout is disabled
|
89 |
+
if (!$config->getConfigData('active', $this->_paymentMethodCode)) {
|
90 |
+
$this->setShouldRender(false);
|
91 |
+
return $result;
|
92 |
+
}
|
93 |
+
|
94 |
+
//check if customer is logged in, do not render block if customer is logged in
|
95 |
+
if ($this->isCustomerLoggedIn()) {
|
96 |
+
$this->setShouldRender(false);
|
97 |
+
return $result;
|
98 |
+
}
|
99 |
+
|
100 |
+
if ($this->isMiniCart() && !$config->showButtonInMiniCart()) {
|
101 |
+
$this->setShouldRender(false);
|
102 |
+
return $result;
|
103 |
+
}
|
104 |
+
|
105 |
+
// check visibility on cart and mini cart
|
106 |
+
if (($this->isCartBottom()|| $this->isCartTop())
|
107 |
+
&& !$config->showButtonInCart()
|
108 |
+
) {
|
109 |
+
$this->setShouldRender(false);
|
110 |
+
return $result;
|
111 |
+
}
|
112 |
+
|
113 |
+
if ($nameInLayout === self::LAYOUTNAME_SIDEBAR && !$config->showButtonInMiniCart()) {
|
114 |
+
$this->setShouldRender(false);
|
115 |
+
return $result;
|
116 |
+
|
117 |
+
}
|
118 |
+
|
119 |
+
|
120 |
+
|
121 |
+
// validate minimum quote amount and validate quote for zero grandtotal
|
122 |
+
if (null !== $quote && (!$quote->validateMinimumAmount()
|
123 |
+
|| (!$quote->getGrandTotal()))
|
124 |
+
) {
|
125 |
+
$this->setShouldRender(false);
|
126 |
+
return $result;
|
127 |
+
}
|
128 |
+
|
129 |
+
|
130 |
+
if (false === Mage::helper('checkout')->isAllowedGuestCheckout($quote)) {
|
131 |
+
$this->setShouldRender(false);
|
132 |
+
return $result;
|
133 |
+
}
|
134 |
+
|
135 |
+
// check payment method availability
|
136 |
+
$methodInstance = Mage::helper('payment')->getMethodInstance($this->_paymentMethodCode);
|
137 |
+
if (!$methodInstance) {
|
138 |
+
$this->setShouldRender(false);
|
139 |
+
return $result;
|
140 |
+
}
|
141 |
+
|
142 |
+
return $result;
|
143 |
+
}
|
144 |
+
|
145 |
+
/**
|
146 |
+
* Render the block if needed
|
147 |
+
*
|
148 |
+
* @return string
|
149 |
+
*/
|
150 |
+
protected function _toHtml()
|
151 |
+
{
|
152 |
+
if (!$this->getShouldRender()) {
|
153 |
+
return '';
|
154 |
+
}
|
155 |
+
return parent::_toHtml();
|
156 |
+
}
|
157 |
+
|
158 |
+
|
159 |
+
/**
|
160 |
+
* getter for masterpass config model
|
161 |
+
*
|
162 |
+
* @return Expercash_Expercash_Model_Masterpass_Config
|
163 |
+
*/
|
164 |
+
public function getMasterpassConfig()
|
165 |
+
{
|
166 |
+
return Mage::getModel('expercash/masterpass_config');
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* get image url for masterpass full checkout
|
171 |
+
*
|
172 |
+
* @return string
|
173 |
+
*/
|
174 |
+
public function getImageUrl()
|
175 |
+
{
|
176 |
+
return $this->getMasterpassConfig()->getFullCheckoutImageUrl();
|
177 |
+
}
|
178 |
+
|
179 |
+
/**
|
180 |
+
* getter for masterpass full checkout url
|
181 |
+
*
|
182 |
+
* @return string
|
183 |
+
*/
|
184 |
+
public function getCheckoutUrl()
|
185 |
+
{
|
186 |
+
return $this->getMasterpassConfig()->getMasterpassFullCheckoutUrl();
|
187 |
+
}
|
188 |
+
|
189 |
+
/**
|
190 |
+
* returns show more link if enabled for masterpass full checkout
|
191 |
+
*
|
192 |
+
* @return null|string
|
193 |
+
*/
|
194 |
+
public function getLearnMoreLink()
|
195 |
+
{
|
196 |
+
$result = null;
|
197 |
+
$locale = Mage::app()->getLocale();
|
198 |
+
if ($this->getMasterpassConfig()->showMasterPassFullCheckoutLearnMoreLink()) {
|
199 |
+
$result = $this->getMasterpassConfig()->getMasterpassLearnMoreUrl($locale);
|
200 |
+
}
|
201 |
+
|
202 |
+
return $result;
|
203 |
+
}
|
204 |
+
|
205 |
+
/**
|
206 |
+
* check if actual layout name is cart top
|
207 |
+
*
|
208 |
+
* @return bool
|
209 |
+
*/
|
210 |
+
public function isCartTop()
|
211 |
+
{
|
212 |
+
if ($this->getNameInLayout() === self::LAYOUTNAME_TOP) {
|
213 |
+
return true;
|
214 |
+
}
|
215 |
+
}
|
216 |
+
|
217 |
+
/**
|
218 |
+
* check if actual layout name is mini cart
|
219 |
+
*
|
220 |
+
* @return bool
|
221 |
+
*/
|
222 |
+
public function isMiniCart()
|
223 |
+
{
|
224 |
+
if ($this->getNameInLayout() === self::LAYOUTNAME_MINI_CART) {
|
225 |
+
return true;
|
226 |
+
}
|
227 |
+
|
228 |
+
}
|
229 |
+
|
230 |
+
/**
|
231 |
+
* check if actual layout name is cart bottom
|
232 |
+
*
|
233 |
+
* @return bool
|
234 |
+
*/
|
235 |
+
public function isCartBottom()
|
236 |
+
{
|
237 |
+
if ($this->getNameInLayout() === self::LAYOUTNAME_BOTTOM) {
|
238 |
+
return true;
|
239 |
+
}
|
240 |
+
|
241 |
+
}
|
242 |
+
|
243 |
+
|
244 |
+
/**
|
245 |
+
* check if customer is logged in
|
246 |
+
*
|
247 |
+
* @return bool
|
248 |
+
*/
|
249 |
+
protected function isCustomerLoggedIn()
|
250 |
+
{
|
251 |
+
$result = false;
|
252 |
+
$customer = Mage::getModel('customer/session');
|
253 |
+
if ($customer->isLoggedIn()) {
|
254 |
+
$result = true;
|
255 |
+
}
|
256 |
+
|
257 |
+
return $result;
|
258 |
+
}
|
259 |
+
|
260 |
+
}
|
app/code/community/Expercash/Expercash/Helper/Data.php
ADDED
@@ -0,0 +1,187 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
class Expercash_Expercash_Helper_Data extends Mage_Core_Helper_Abstract
|
24 |
+
{
|
25 |
+
/**
|
26 |
+
* log request type string
|
27 |
+
*/
|
28 |
+
const LOG_TYPE_REQUEST = "REQUEST";
|
29 |
+
|
30 |
+
/**
|
31 |
+
* log response type string
|
32 |
+
*/
|
33 |
+
const LOG_TYPE_RESPONSE = "RESPONSE";
|
34 |
+
|
35 |
+
const ENV_NAME = "Magento";
|
36 |
+
|
37 |
+
/**
|
38 |
+
* log to a separate log file
|
39 |
+
*
|
40 |
+
* @param string $message
|
41 |
+
* @param int $level
|
42 |
+
* @param bool $force
|
43 |
+
* @return Expercash_Expercash_Helper_Data
|
44 |
+
*/
|
45 |
+
public function log($message, $level = null)
|
46 |
+
{
|
47 |
+
//Reformat message for better log-visibility
|
48 |
+
$message = sprintf("\n=====================\n%s\n=====================", $message);
|
49 |
+
Mage::log($message, $level, 'expercash.log', true);
|
50 |
+
return $this;
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* refill cart
|
55 |
+
*
|
56 |
+
* @param Mage_Sales_Model_Order $order
|
57 |
+
*
|
58 |
+
* @return void
|
59 |
+
*/
|
60 |
+
public function refillCart($order)
|
61 |
+
{
|
62 |
+
//Get cart singleton
|
63 |
+
$cart = Mage::getSingleton('checkout/cart');
|
64 |
+
|
65 |
+
if (0 < $cart->getQuote()->getItemsCollection()->count()) {
|
66 |
+
//cart is not empty, so refilling it is not required
|
67 |
+
return;
|
68 |
+
}
|
69 |
+
foreach ($order->getItemsCollection() as $item) {
|
70 |
+
try {
|
71 |
+
$cart->addOrderItem($item);
|
72 |
+
} catch (Exception $e) {
|
73 |
+
Mage::log($e->getMessage());
|
74 |
+
}
|
75 |
+
}
|
76 |
+
$cart->save();
|
77 |
+
|
78 |
+
// add coupon code
|
79 |
+
$coupon = $order->getCouponCode();
|
80 |
+
$session = Mage::getSingleton('checkout/session');
|
81 |
+
if (false === is_null($coupon)) {
|
82 |
+
$session->getQuote()->setCouponCode($coupon)->save();
|
83 |
+
}
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* returns the modul version from config.xml
|
88 |
+
*
|
89 |
+
* @return string
|
90 |
+
*/
|
91 |
+
public function getVersion()
|
92 |
+
{
|
93 |
+
return (string) Mage::getConfig()->getNode('modules')
|
94 |
+
->children()
|
95 |
+
->Expercash_Expercash->version;
|
96 |
+
}
|
97 |
+
|
98 |
+
/**
|
99 |
+
* returns the Magento versions number
|
100 |
+
*
|
101 |
+
* @return string
|
102 |
+
*/
|
103 |
+
public function getMagentoVersion()
|
104 |
+
{
|
105 |
+
return (string) Mage::getVersion();
|
106 |
+
}
|
107 |
+
|
108 |
+
/**
|
109 |
+
* returns the shopsystem Name
|
110 |
+
*
|
111 |
+
* @return string
|
112 |
+
*/
|
113 |
+
public function getEnvName()
|
114 |
+
{
|
115 |
+
return self::ENV_NAME;
|
116 |
+
}
|
117 |
+
|
118 |
+
/**
|
119 |
+
* get the additional payment params from the config.xml
|
120 |
+
*
|
121 |
+
* @return array
|
122 |
+
*/
|
123 |
+
public function getAdditionalPaymentParams()
|
124 |
+
{
|
125 |
+
return explode(",", Mage::getModel('expercash/config')->getAdditionalPaymentParams());
|
126 |
+
}
|
127 |
+
|
128 |
+
/**
|
129 |
+
* log client response and request
|
130 |
+
*
|
131 |
+
* @param string $logType
|
132 |
+
* @param mixed $logValues
|
133 |
+
*/
|
134 |
+
public function clientLog($logType, $logValues)
|
135 |
+
{
|
136 |
+
$message = "";
|
137 |
+
if ($logType === self::LOG_TYPE_REQUEST) {
|
138 |
+
$message = "Request to Expercash with following params:\n%s";
|
139 |
+
}
|
140 |
+
|
141 |
+
if ($logType === self::LOG_TYPE_RESPONSE) {
|
142 |
+
$message = "Gateway gave following response:\n%s";;
|
143 |
+
}
|
144 |
+
$this->log(sprintf($message, Zend_Json::encode($logValues)));
|
145 |
+
}
|
146 |
+
|
147 |
+
/**
|
148 |
+
* Add request parameter into url
|
149 |
+
*
|
150 |
+
* @param $url string
|
151 |
+
* @param $param array( 'key' => value )
|
152 |
+
* @return string
|
153 |
+
*/
|
154 |
+
public function addRequestParam($url, $param)
|
155 |
+
{
|
156 |
+
$startDelimiter = (false === strpos($url,'?'))? '?' : '&';
|
157 |
+
|
158 |
+
$arrQueryParams = array();
|
159 |
+
foreach ($param as $key => $value) {
|
160 |
+
if (is_numeric($key) || is_object($value)) {
|
161 |
+
continue;
|
162 |
+
}
|
163 |
+
|
164 |
+
if (is_array($value)) {
|
165 |
+
// $key[]=$value1&$key[]=$value2 ...
|
166 |
+
$arrQueryParams[] = $key . '[]=' . implode('&' . $key . '[]=', $value);
|
167 |
+
} elseif (is_null($value)) {
|
168 |
+
$arrQueryParams[] = $key;
|
169 |
+
} else {
|
170 |
+
$arrQueryParams[] = $key . '=' . $value;
|
171 |
+
}
|
172 |
+
}
|
173 |
+
$url .= $startDelimiter . implode('&', $arrQueryParams);
|
174 |
+
|
175 |
+
return $url;
|
176 |
+
}
|
177 |
+
|
178 |
+
public function isBelowCE17()
|
179 |
+
{
|
180 |
+
$result = false;
|
181 |
+
if (Mage::getVersion() < '1.7.0') {
|
182 |
+
$result = true;
|
183 |
+
}
|
184 |
+
|
185 |
+
return $result;
|
186 |
+
}
|
187 |
+
}
|
app/code/community/Expercash/Expercash/Helper/Masterpass.php
ADDED
@@ -0,0 +1,539 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
class Expercash_Expercash_Helper_Masterpass extends Expercash_Expercash_Helper_Payment
|
24 |
+
{
|
25 |
+
const MASTERPASS_SESSION_KEY = 'masterpass';
|
26 |
+
|
27 |
+
const SESSION_LIFETIME_MAX = 3600;
|
28 |
+
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Save MasterPass data to customer session.
|
32 |
+
*
|
33 |
+
* @param string $key
|
34 |
+
* @param string $value
|
35 |
+
*/
|
36 |
+
public function saveDataToMasterpassSession($key, $value)
|
37 |
+
{
|
38 |
+
$sessionData = $this->getCustomerSession()->getData(self::MASTERPASS_SESSION_KEY);
|
39 |
+
$sessionData[$key] = $value;
|
40 |
+
$this->getCustomerSession()->setData(self::MASTERPASS_SESSION_KEY, $sessionData);
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Check if MasterPass session is not yet timed out.
|
45 |
+
*
|
46 |
+
* @param string[] $sessionData
|
47 |
+
*
|
48 |
+
* @return bool
|
49 |
+
*/
|
50 |
+
protected function isSessionLifeTimeValid($sessionData)
|
51 |
+
{
|
52 |
+
$result = false;
|
53 |
+
if (is_array($sessionData) && isset($sessionData['timestamp'])) {
|
54 |
+
$initialTimeStamp = $sessionData['timestamp'];
|
55 |
+
$now = time();
|
56 |
+
$timeDiff = $now - $initialTimeStamp;
|
57 |
+
if ($timeDiff <= self::SESSION_LIFETIME_MAX) {
|
58 |
+
$result = true;
|
59 |
+
}
|
60 |
+
}
|
61 |
+
|
62 |
+
return $result;
|
63 |
+
}
|
64 |
+
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Check if MasterPass session is valid.
|
68 |
+
*
|
69 |
+
* @param string[] $sessionData
|
70 |
+
* @param Mage_Sales_Model_Quote $quote
|
71 |
+
*
|
72 |
+
* @return bool
|
73 |
+
*/
|
74 |
+
public function isSessionValid($sessionData, Mage_Sales_Model_Quote $quote)
|
75 |
+
{
|
76 |
+
$result = false;
|
77 |
+
if ($this->isSessionLifeTimeValid($sessionData)
|
78 |
+
&& $this->isBillingAddressValid($sessionData, $quote)
|
79 |
+
) {
|
80 |
+
$result = true;
|
81 |
+
}
|
82 |
+
|
83 |
+
return $result;
|
84 |
+
}
|
85 |
+
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Check if current billing address is unchanged.
|
89 |
+
*
|
90 |
+
* @param string[] $sessionData
|
91 |
+
* @param Mage_Sales_Model_Quote $quote
|
92 |
+
*
|
93 |
+
* @return bool
|
94 |
+
*/
|
95 |
+
protected function isBillingAddressValid($sessionData, Mage_Sales_Model_Quote $quote)
|
96 |
+
{
|
97 |
+
$result = false;
|
98 |
+
if (is_array($sessionData) && isset($sessionData['billingAddress'])) {
|
99 |
+
$quoteBillingAddressArray = $this->getBillingArray($quote->getBillingAddress());
|
100 |
+
$quoteBillingAddressHash = $this->getArrayHash($quoteBillingAddressArray);
|
101 |
+
if ($sessionData['billingAddress'] === $quoteBillingAddressHash) {
|
102 |
+
$result = true;
|
103 |
+
}
|
104 |
+
}
|
105 |
+
|
106 |
+
return $result;
|
107 |
+
}
|
108 |
+
|
109 |
+
/**
|
110 |
+
* Clear all MasterPass related data from customer session.
|
111 |
+
*
|
112 |
+
* @return void
|
113 |
+
*/
|
114 |
+
public function clearMasterpassSessionData()
|
115 |
+
{
|
116 |
+
$customerSession = $this->getCustomerSession();
|
117 |
+
$customerSession->unsetData(self::MASTERPASS_SESSION_KEY);
|
118 |
+
}
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Init session validation.
|
122 |
+
*
|
123 |
+
* @param Mage_Sales_Model_Quote $quote
|
124 |
+
*
|
125 |
+
* @return string[] Current session data if still valid.
|
126 |
+
* @throws Mage_Core_Exception
|
127 |
+
*/
|
128 |
+
public function validMasterpassSession(Mage_Sales_Model_Quote $quote)
|
129 |
+
{
|
130 |
+
$masterPassSessionData = $this->getCustomerSession()->getData(self::MASTERPASS_SESSION_KEY);
|
131 |
+
if (!$this->isSessionValid($masterPassSessionData, $quote)) {
|
132 |
+
Mage::throwException('Session data not valid or session timed out');
|
133 |
+
}
|
134 |
+
|
135 |
+
return $masterPassSessionData;
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Retrieve customer session object.
|
140 |
+
*
|
141 |
+
* @return Mage_Customer_Model_Session
|
142 |
+
*/
|
143 |
+
protected function getCustomerSession()
|
144 |
+
{
|
145 |
+
return Mage::getModel('customer/session');
|
146 |
+
}
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Validate notificationSignature query param when returning from MasterPass wallet.
|
150 |
+
*
|
151 |
+
* @param string[] $params
|
152 |
+
*
|
153 |
+
* @throws Mage_Core_Exception
|
154 |
+
*/
|
155 |
+
public function validateParams($params)
|
156 |
+
{
|
157 |
+
$notificationSignature = null;
|
158 |
+
|
159 |
+
if (isset($params['notificationSignature'])) {
|
160 |
+
$notificationSignature = $params['notificationSignature'];
|
161 |
+
unset($params['notificationSignature']);
|
162 |
+
}
|
163 |
+
|
164 |
+
$queryParams = http_build_query($params, '', '&');
|
165 |
+
|
166 |
+
$computed = md5($queryParams . $this->getAuthorizationKey());
|
167 |
+
|
168 |
+
if ($computed !== $notificationSignature) {
|
169 |
+
Mage::throwException('Validate params: Signature and build hash do not match!');
|
170 |
+
}
|
171 |
+
}
|
172 |
+
|
173 |
+
/**
|
174 |
+
* Validate GuTID2 query param when returning from MasterPass wallet.
|
175 |
+
*
|
176 |
+
* @param $params
|
177 |
+
*
|
178 |
+
* @throws Mage_Core_Exception
|
179 |
+
*/
|
180 |
+
public function validateAndSaveGutId($params)
|
181 |
+
{
|
182 |
+
$guTID2 = null;
|
183 |
+
$guTID2Hash = null;
|
184 |
+
|
185 |
+
if (isset($params['GuTID2']) && isset($params['GuTID2Hash'])) {
|
186 |
+
$guTID2 = $params['GuTID2'];
|
187 |
+
$guTID2Hash = $params['GuTID2Hash'];
|
188 |
+
}
|
189 |
+
|
190 |
+
$calculatedGutid2Hash = md5($this->getAuthorizationKey() . $guTID2);
|
191 |
+
|
192 |
+
if ($guTID2Hash != $calculatedGutid2Hash) {
|
193 |
+
Mage::throwException('Validate GutId: GutId2Hash and build hash do not match!');
|
194 |
+
}
|
195 |
+
|
196 |
+
//save billing in masterpass session
|
197 |
+
$this->saveDataToMasterpassSession('GuTID2', $params['GuTID2']);
|
198 |
+
|
199 |
+
}
|
200 |
+
|
201 |
+
/**
|
202 |
+
* Obtain MasterPass config model.
|
203 |
+
*
|
204 |
+
* @return Expercash_Expercash_Model_Masterpass_Config
|
205 |
+
*/
|
206 |
+
protected function getMasterpassConfig()
|
207 |
+
{
|
208 |
+
return Mage::getModel('expercash/masterpass_config');
|
209 |
+
}
|
210 |
+
|
211 |
+
/**
|
212 |
+
* Obtain pkey (GatewayKey) from configuration.
|
213 |
+
*
|
214 |
+
* @return string
|
215 |
+
*/
|
216 |
+
protected function getAuthorizationKey()
|
217 |
+
{
|
218 |
+
$storeId = Mage::app()->getStore()->getId();
|
219 |
+
return $this->getMasterpassConfig()->getAuthorizationkey($storeId);
|
220 |
+
}
|
221 |
+
|
222 |
+
/**
|
223 |
+
* Save billing data to quote when returning from MasterPass wallet.
|
224 |
+
*
|
225 |
+
* @param string[] $params
|
226 |
+
*/
|
227 |
+
public function setBillingDataToQuoteAndSession($params)
|
228 |
+
{
|
229 |
+
$quote = Mage::getSingleton('checkout/session')->getQuote();
|
230 |
+
$billingAddress = $quote->getBillingAddress();
|
231 |
+
$params = new Varien_Object($params);
|
232 |
+
|
233 |
+
$billingAddress->setStreetFull($params->getData('customer_address1'));
|
234 |
+
$billingAddress->setCity($params->getData('customer_city'));
|
235 |
+
$billingAddress->setCountryId($params->getData('customer_country'));
|
236 |
+
$billingAddress->setRegion($params->getData('customer_country_subdivision'));
|
237 |
+
$region = Mage::getModel('expercash/directory_region')->loadByName(
|
238 |
+
$billingAddress->getRegion(), $billingAddress->getCountryId()
|
239 |
+
);
|
240 |
+
|
241 |
+
$billingAddress->setRegionId($region->getId());
|
242 |
+
$billingAddress->setEmail($params->getData('customer_email'));
|
243 |
+
$billingAddress->setFirstname($params->getData('customer_prename'));
|
244 |
+
$billingAddress->setLastname($params->getData('customer_name'));
|
245 |
+
$billingAddress->setTelephone($params->getData('customer_telephone'));
|
246 |
+
$billingAddress->setPostcode($params->getData('customer_zip'));
|
247 |
+
$billingAddress->save();
|
248 |
+
|
249 |
+
|
250 |
+
$billingAddressHash = $this->getArrayHash($this->getBillingArray($billingAddress));
|
251 |
+
$this->saveDataToMasterpassSession('billingAddress', $billingAddressHash);
|
252 |
+
}
|
253 |
+
|
254 |
+
/**
|
255 |
+
* Calculate hash from given data.
|
256 |
+
*
|
257 |
+
* @param mixed $dataArray
|
258 |
+
*
|
259 |
+
* @return string
|
260 |
+
*/
|
261 |
+
public function getArrayHash($dataArray)
|
262 |
+
{
|
263 |
+
return md5(json_encode($dataArray));
|
264 |
+
}
|
265 |
+
|
266 |
+
/**
|
267 |
+
* Obtain billing address properties as array.
|
268 |
+
*
|
269 |
+
* @param Mage_Customer_Model_Address_Abstract $billingAddress
|
270 |
+
*
|
271 |
+
* @return string[]
|
272 |
+
*/
|
273 |
+
public function getBillingArray($billingAddress)
|
274 |
+
{
|
275 |
+
$billingAddressArray = $billingAddress->toArray(
|
276 |
+
array(
|
277 |
+
'street',
|
278 |
+
'city',
|
279 |
+
'country_id',
|
280 |
+
'region',
|
281 |
+
'region_id',
|
282 |
+
'email',
|
283 |
+
'firstname',
|
284 |
+
'lastname',
|
285 |
+
'telephone',
|
286 |
+
'postcode',
|
287 |
+
)
|
288 |
+
);
|
289 |
+
|
290 |
+
unset($billingAddressArray['items']);
|
291 |
+
unset($billingAddressArray['totals']);
|
292 |
+
unset($billingAddressArray['rates']);
|
293 |
+
|
294 |
+
return $billingAddressArray['email'];
|
295 |
+
}
|
296 |
+
|
297 |
+
/**
|
298 |
+
* Save shipping data on quote.
|
299 |
+
*
|
300 |
+
* @param mixed[] $params
|
301 |
+
*
|
302 |
+
* @return void
|
303 |
+
*/
|
304 |
+
public function setShippingDataToQuote($params)
|
305 |
+
{
|
306 |
+
$quote = Mage::getSingleton('checkout/session')->getQuote();
|
307 |
+
$shippingAddress = $quote->getShippingAddress();
|
308 |
+
$params = new Varien_Object($params);
|
309 |
+
|
310 |
+
// master data
|
311 |
+
$deliveryFirstname = '';
|
312 |
+
$deliveryLastname = '';
|
313 |
+
$deliveryFullname = $params->getData('delivery_fullname');
|
314 |
+
if ($deliveryFullname) {
|
315 |
+
$deliveryFullname = explode(' ', $deliveryFullname);
|
316 |
+
$deliveryLastname = array_pop($deliveryFullname);
|
317 |
+
$deliveryFirstname = empty($deliveryFullname) ? '' : implode($deliveryFullname);
|
318 |
+
}
|
319 |
+
$shippingAddress->setFirstname($deliveryFirstname);
|
320 |
+
$shippingAddress->setLastname($deliveryLastname);
|
321 |
+
$shippingAddress->setTelephone($params->getData('delivery_telephone'));
|
322 |
+
|
323 |
+
// address data
|
324 |
+
$shippingAddress->setStreetFull($params->getData('delivery_address1'));
|
325 |
+
$shippingAddress->setCity($params->getData('delivery_city'));
|
326 |
+
$shippingAddress->setCountryId($params->getData('delivery_country'));
|
327 |
+
$shippingAddress->setRegion($params->getData('delivery_country_subdivision'));
|
328 |
+
$region = Mage::getModel('expercash/directory_region')->loadByName(
|
329 |
+
$shippingAddress->getRegion(), $shippingAddress->getCountryId()
|
330 |
+
);
|
331 |
+
$shippingAddress->setRegionId($region->getId());
|
332 |
+
$shippingAddress->setPostcode($params->getData('delivery_zip'));
|
333 |
+
|
334 |
+
$shippingAddress->save();
|
335 |
+
}
|
336 |
+
|
337 |
+
/**
|
338 |
+
* Set MasterPass Full Checkout payment method in quote.
|
339 |
+
*
|
340 |
+
* @return void
|
341 |
+
*/
|
342 |
+
public function setPaymentInfoToQuote()
|
343 |
+
{
|
344 |
+
$expercashCode = Mage::getModel('expercash/expercashmpf')->getCode();
|
345 |
+
$quote = Mage::getSingleton('checkout/session')->getQuote();
|
346 |
+
|
347 |
+
if ($quote->isVirtual()) {
|
348 |
+
$quote->getBillingAddress()->setPaymentMethod($expercashCode);
|
349 |
+
} else {
|
350 |
+
$quote->getShippingAddress()->setPaymentMethod($expercashCode);
|
351 |
+
}
|
352 |
+
|
353 |
+
// shipping totals may be affected by payment method
|
354 |
+
if (!$quote->isVirtual() && $quote->getShippingAddress()) {
|
355 |
+
$quote->getShippingAddress()->setCollectShippingRates(true);
|
356 |
+
}
|
357 |
+
|
358 |
+
$payment = $quote->getPayment();
|
359 |
+
$payment->importData(array('method' => $expercashCode));
|
360 |
+
$quote->save();
|
361 |
+
}
|
362 |
+
|
363 |
+
/**
|
364 |
+
* Set guest method and selected payment method to onepage checkout.
|
365 |
+
*
|
366 |
+
* @return void
|
367 |
+
*/
|
368 |
+
public function initOnePageCheckout()
|
369 |
+
{
|
370 |
+
$this->setPaymentInfoToQuote();
|
371 |
+
$quote = Mage::getSingleton('checkout/session')->getQuote();
|
372 |
+
}
|
373 |
+
|
374 |
+
/**
|
375 |
+
* Obtain current onepage checkout object.
|
376 |
+
*
|
377 |
+
* @return Mage_Checkout_Model_Type_Onepage
|
378 |
+
*/
|
379 |
+
protected function getOnePage()
|
380 |
+
{
|
381 |
+
return Mage::getSingleton('checkout/type_onepage');
|
382 |
+
}
|
383 |
+
|
384 |
+
/**
|
385 |
+
* Save query params to payment's additional information when returning from MasterPass wallet.
|
386 |
+
*
|
387 |
+
* @param string[] $params
|
388 |
+
*
|
389 |
+
* @return bool
|
390 |
+
*/
|
391 |
+
public function saveEpiResponseOnPayment($params)
|
392 |
+
{
|
393 |
+
$quote = $this->getOnePage()->getQuote();
|
394 |
+
$payment = $quote->getPayment()->getMethodInstance();
|
395 |
+
//Save additional payment information to order-payment
|
396 |
+
$payment->setAdditionalPaymentInfo($quote->getPayment(), $params);
|
397 |
+
$quote->save();
|
398 |
+
}
|
399 |
+
|
400 |
+
/**
|
401 |
+
* Check and handle MasterPass Full ChecKout API response data.
|
402 |
+
*
|
403 |
+
* @param string[] $response
|
404 |
+
* @param Mage_Sales_Model_Order $order
|
405 |
+
*
|
406 |
+
* @return bool
|
407 |
+
*/
|
408 |
+
public function orderAndTransactionHandling($response, $order)
|
409 |
+
{
|
410 |
+
$storeId = $order->getStoreId();
|
411 |
+
$payment = $order->getPayment();
|
412 |
+
|
413 |
+
if (is_array($response) && isset($response['rc']) && $response['rc'] == '100') {
|
414 |
+
/* @var $expercash Expercash_Expercash_Model_Expercash */
|
415 |
+
$expercash = $order->getPayment()->getMethodInstance();
|
416 |
+
|
417 |
+
$this->setExpercashRef($response, $expercash, $order);
|
418 |
+
$this->setTxData($response, $expercash, $order, $storeId);
|
419 |
+
$this->setPaymentStatus($payment);
|
420 |
+
|
421 |
+
$payment->setAdditionalInformation('transactionId', $response['taid']);
|
422 |
+
$payment->setTransactionId($response['taid']);
|
423 |
+
$payment->setIsTransactionClosed(false);
|
424 |
+
|
425 |
+
//Save additional payment information to order-payment
|
426 |
+
$order->addStatusHistoryComment(
|
427 |
+
$response['rctext'],
|
428 |
+
$payment->getConfigData('order_status', $storeId)
|
429 |
+
);
|
430 |
+
|
431 |
+
if (false == $order->getEmailSent()) {
|
432 |
+
$order->sendNewOrderEmail();
|
433 |
+
}
|
434 |
+
|
435 |
+
$status = true;
|
436 |
+
$this->updateOrder($payment, $order);
|
437 |
+
|
438 |
+
} else {
|
439 |
+
$this->cancelOrder($order);
|
440 |
+
$status = false;
|
441 |
+
}
|
442 |
+
|
443 |
+
$order->save();
|
444 |
+
|
445 |
+
return $status;
|
446 |
+
}
|
447 |
+
|
448 |
+
/**
|
449 |
+
* Save transaction reference to quote payment:
|
450 |
+
* - sales_flat_quote_payment.expercash_gutid
|
451 |
+
*
|
452 |
+
* @param string[] $response
|
453 |
+
* @param Expercash_Expercash_Model_Expercashmpf $expercash
|
454 |
+
* @param Mage_Sales_Model_Order $order
|
455 |
+
*/
|
456 |
+
public function setExpercashRef($response, $expercash, $order)
|
457 |
+
{
|
458 |
+
$expRefType = 'expercash_gutid';
|
459 |
+
$expercash->setExperCashData(
|
460 |
+
$order->getQuoteId(), $expRefType, $response["taid"]
|
461 |
+
);
|
462 |
+
}
|
463 |
+
|
464 |
+
/**
|
465 |
+
* Save transaction info to quote payment:
|
466 |
+
* - sales_flat_quote_payment.expercash_request_type
|
467 |
+
* - sales_flat_quote_payment.expercash_transaction_id
|
468 |
+
* - sales_flat_quote_payment.expercash_paymenttype
|
469 |
+
*
|
470 |
+
* @param string[] $response
|
471 |
+
* @param Expercash_Expercash_Model_Expercashmpf $expercash
|
472 |
+
* @param Mage_Sales_Model_Order $order
|
473 |
+
*/
|
474 |
+
public function setTxData($response, $expercash, $order)
|
475 |
+
{
|
476 |
+
if ($expercash instanceof Expercash_Expercash_Model_Expercashmpf) {
|
477 |
+
$expPaymentType = $expercash->getExpercashPaymentType($order->getPayment(), $order->getStoreId());
|
478 |
+
$expercash->setExperCashData($order->getQuoteId(), 'expercash_request_type', $expPaymentType);
|
479 |
+
}
|
480 |
+
|
481 |
+
$expercash->setExperCashData($order->getQuoteId(), 'expercash_transaction_id', $response["taid"]);
|
482 |
+
$expercash->setExperCashData($order->getQuoteId(), 'expercash_paymenttype', 'CC');
|
483 |
+
}
|
484 |
+
|
485 |
+
/**
|
486 |
+
* Check if MasterPass Full Checkout is currently selected as payment method.
|
487 |
+
*
|
488 |
+
* @return bool
|
489 |
+
*/
|
490 |
+
public function isFullCheckout()
|
491 |
+
{
|
492 |
+
$payment = $this->getOnePage()->getQuote()->getPayment();
|
493 |
+
if (!$payment->getMethod()) {
|
494 |
+
return false;
|
495 |
+
}
|
496 |
+
|
497 |
+
if (!$payment->getMethodInstance() instanceof Expercash_Expercash_Model_Expercashmpf) {
|
498 |
+
return false;
|
499 |
+
}
|
500 |
+
|
501 |
+
return true;
|
502 |
+
}
|
503 |
+
|
504 |
+
/**
|
505 |
+
* Obtain the frontend template to be used in one page checkout.
|
506 |
+
*
|
507 |
+
* In case MasterPass Full Checkout is selected as payment method, return
|
508 |
+
* a customized template including additional JS, Otherwise, return the
|
509 |
+
* template as defined via layout xml files.
|
510 |
+
*
|
511 |
+
* @return string
|
512 |
+
*/
|
513 |
+
public function getOpcTemplate()
|
514 |
+
{
|
515 |
+
$template = Mage::getSingleton('core/layout')->getBlock('checkout.onepage')->getTemplate();
|
516 |
+
|
517 |
+
if ($this->isFullCheckout()) {
|
518 |
+
$template = 'expercash/checkout/onepage.phtml';
|
519 |
+
}
|
520 |
+
|
521 |
+
if ($this->isCE15()) {
|
522 |
+
$template = 'expercash/checkout/ce15/onepage.phtml';
|
523 |
+
}
|
524 |
+
|
525 |
+
return $template;
|
526 |
+
}
|
527 |
+
|
528 |
+
protected function isCE15()
|
529 |
+
{
|
530 |
+
$result = false;
|
531 |
+
if (Mage::getVersion() == '1.5.0.1') {
|
532 |
+
$result = true;
|
533 |
+
}
|
534 |
+
|
535 |
+
return $result;
|
536 |
+
}
|
537 |
+
|
538 |
+
|
539 |
+
}
|
app/code/community/Expercash/Expercash/Helper/Payment.php
ADDED
@@ -0,0 +1,650 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
class Expercash_Expercash_Helper_Payment extends Mage_Core_Helper_Abstract
|
23 |
+
{
|
24 |
+
|
25 |
+
protected $_expercashStack = false;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* @var $dataHelper Expercash_Expercash_Helper_Data
|
29 |
+
*/
|
30 |
+
private $dataHelper = null;
|
31 |
+
|
32 |
+
|
33 |
+
/**
|
34 |
+
* the required params that must be in the reponse
|
35 |
+
*
|
36 |
+
* @var array $requiredParam
|
37 |
+
*/
|
38 |
+
private $requiredParams
|
39 |
+
= array('amount', 'currency', 'paymentMethod', 'transactionId', 'GuTID',
|
40 |
+
'exportKey');
|
41 |
+
|
42 |
+
/**
|
43 |
+
* setter for data helper
|
44 |
+
*
|
45 |
+
* @param null $dataHelper
|
46 |
+
*/
|
47 |
+
public function setDataHelper($dataHelper)
|
48 |
+
{
|
49 |
+
$this->dataHelper = $dataHelper;
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* getter for data helper
|
54 |
+
*
|
55 |
+
* @return Expercash_Expercash_Helper_Data
|
56 |
+
*/
|
57 |
+
public function getHelper()
|
58 |
+
{
|
59 |
+
if (null === $this->dataHelper) {
|
60 |
+
$this->dataHelper = Mage::helper('expercash/data');
|
61 |
+
}
|
62 |
+
|
63 |
+
return $this->dataHelper;
|
64 |
+
}
|
65 |
+
|
66 |
+
|
67 |
+
public function createExperCashOrderId()
|
68 |
+
{
|
69 |
+
$orderId = date('Ymd') . '_ED' . substr(rand(0, 1000000), 0, 8);
|
70 |
+
|
71 |
+
// $this->setExperCashOrderId($orderId);
|
72 |
+
|
73 |
+
return $orderId;
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* save expercash data in db
|
78 |
+
*
|
79 |
+
* @param integer $id QuoteId
|
80 |
+
* @param string $key
|
81 |
+
* @param string $value
|
82 |
+
*/
|
83 |
+
public function setExperCashData($id, $key, $value)
|
84 |
+
{
|
85 |
+
$resources = Mage::getSingleton('core/resource');
|
86 |
+
$connWrite = $resources->getConnection('core_write');
|
87 |
+
$query = $connWrite->update(
|
88 |
+
$resources->getTableName('sales_flat_quote_payment'),
|
89 |
+
array($key => $value), "`quote_id` = " . $id
|
90 |
+
);
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* return expercash payment data from sales_flat_quote_payment based on payment id
|
95 |
+
*
|
96 |
+
* @param integer $id QuoteId
|
97 |
+
*
|
98 |
+
* @return array
|
99 |
+
*/
|
100 |
+
public function getExperCashData($id)
|
101 |
+
{
|
102 |
+
$resources = Mage::getSingleton('core/resource');
|
103 |
+
$connRead = $resources->getConnection('core_read');
|
104 |
+
|
105 |
+
$query = $connRead->select()
|
106 |
+
->from(
|
107 |
+
$resources->getTableName('sales_flat_quote_payment'), array(
|
108 |
+
'expercash_request_type',
|
109 |
+
'expercash_epi_payment_id',
|
110 |
+
'expercash_gutid_capture',
|
111 |
+
'expercash_gutid',
|
112 |
+
'expercash_transaction_id',
|
113 |
+
'expercash_paymenttype'
|
114 |
+
)
|
115 |
+
)
|
116 |
+
->where("`quote_id` = " . $id);
|
117 |
+
|
118 |
+
return $connRead->fetchAll($query);
|
119 |
+
}
|
120 |
+
|
121 |
+
/**
|
122 |
+
* get expercash info
|
123 |
+
*
|
124 |
+
* @param $string
|
125 |
+
* @param $id
|
126 |
+
*
|
127 |
+
* @return bool
|
128 |
+
*/
|
129 |
+
public function getExperCashInfo($string, $id)
|
130 |
+
{
|
131 |
+
if ($this->_expercashStack === false) {
|
132 |
+
$this->_expercashStack = $this->getExperCashData($id);
|
133 |
+
}
|
134 |
+
|
135 |
+
return isset($this->_expercashStack[0][$string])
|
136 |
+
? $this->_expercashStack[0][$string] : false;
|
137 |
+
}
|
138 |
+
|
139 |
+
/**
|
140 |
+
* send invoice to customer if that was configured by the merchant
|
141 |
+
*
|
142 |
+
* @param Mage_Sales_Model_Order_Invoice $invoice Invoice to be sent
|
143 |
+
*
|
144 |
+
* @return void
|
145 |
+
*/
|
146 |
+
public function sendInvoiceToCustomer(
|
147 |
+
Mage_Sales_Model_Order_Invoice $invoice
|
148 |
+
) {
|
149 |
+
$code = $invoice->getOrder()->getPayment()->getMethod();
|
150 |
+
$storeId = $invoice->getOrder()->getStoreId();
|
151 |
+
if (false == $invoice->getEmailSent()
|
152 |
+
&& Mage::getModel('expercash/config')->getConfigData(
|
153 |
+
'sendinvoicemail', $code, $storeId
|
154 |
+
)
|
155 |
+
) {
|
156 |
+
$invoice->sendEmail($notifyCustomer = true);
|
157 |
+
}
|
158 |
+
}
|
159 |
+
|
160 |
+
/**
|
161 |
+
* check and handle the response data
|
162 |
+
*
|
163 |
+
* @param $response array
|
164 |
+
*
|
165 |
+
* @return bool
|
166 |
+
*/
|
167 |
+
public function checkReturnedData($response)
|
168 |
+
{
|
169 |
+
|
170 |
+
if (!$this->checkResponseParams($response)) {
|
171 |
+
Mage::throwException(
|
172 |
+
$this->getHelper()->__('Response is not correct.')
|
173 |
+
);
|
174 |
+
}
|
175 |
+
$order = $this->getOrder($response['transactionId']);
|
176 |
+
if (!$this->checkOrderDependentConditions($order, $response)) {
|
177 |
+
Mage::throwException(
|
178 |
+
$this->getHelper()->__('Response is not correct.')
|
179 |
+
);
|
180 |
+
}
|
181 |
+
$storeId = $order->getStoreId();
|
182 |
+
$checksum = $this->getCheckSum($response, $storeId, $order);
|
183 |
+
$this->getHelper()->log(
|
184 |
+
sprintf(
|
185 |
+
"Check Hash of response from ExperCash:\n" .
|
186 |
+
"Module-Checksum: %s\nExperCash-Checksum: %s",
|
187 |
+
$checksum,
|
188 |
+
$response["exportKey"]
|
189 |
+
)
|
190 |
+
);
|
191 |
+
$payment = $order->getPayment();
|
192 |
+
if ($checksum == $response["exportKey"]) {
|
193 |
+
/* @var $expercash Expercash_Expercash_Model_Expercash */
|
194 |
+
$expercash = $order->getPayment()->getMethodInstance();
|
195 |
+
|
196 |
+
$this->setExpercashRef($response, $expercash, $order);
|
197 |
+
$this->setTxData($response, $expercash, $order, $storeId);
|
198 |
+
$this->setPaymentStatus($payment);
|
199 |
+
//Save additional payment information to order-payment
|
200 |
+
$expercash->setAdditionalPaymentInfo($payment, $response);
|
201 |
+
$this->setOrderStatus($response, $expercash, $order);
|
202 |
+
|
203 |
+
if (false == $order->getEmailSent()) {
|
204 |
+
$order->sendNewOrderEmail();
|
205 |
+
$order->save();
|
206 |
+
}
|
207 |
+
|
208 |
+
$this->createInvoice($expercash, $order, $response);
|
209 |
+
$status = true;
|
210 |
+
$this->updateOrder($payment, $order);
|
211 |
+
} else {
|
212 |
+
$this->cancelOrder($order);
|
213 |
+
$status = false;
|
214 |
+
}
|
215 |
+
|
216 |
+
return $status;
|
217 |
+
}
|
218 |
+
|
219 |
+
/**
|
220 |
+
* build and return the checksum from the response params
|
221 |
+
*
|
222 |
+
* @param $response
|
223 |
+
* @param $storeId
|
224 |
+
*
|
225 |
+
* @return string
|
226 |
+
*/
|
227 |
+
protected function getCheckSum($response, $storeId, $order)
|
228 |
+
{
|
229 |
+
$result = $response["amount"]
|
230 |
+
. $response["currency"]
|
231 |
+
. $response["paymentMethod"]
|
232 |
+
. $response["transactionId"]
|
233 |
+
. $response["GuTID"];
|
234 |
+
|
235 |
+
// if payment is barzahlen include paymentStatus param in checksum
|
236 |
+
if ($order->getPayment()->getMethod()
|
237 |
+
== Expercash_Expercash_Model_Expercashpc::PAYMENT_METHOD_NAME
|
238 |
+
) {
|
239 |
+
$result .= $response["paymentStatus"];
|
240 |
+
}
|
241 |
+
|
242 |
+
return md5(
|
243 |
+
$result . Mage::getModel('expercash/config')->getAuthorizationkey(
|
244 |
+
$storeId
|
245 |
+
)
|
246 |
+
);
|
247 |
+
}
|
248 |
+
|
249 |
+
/**
|
250 |
+
* check if response has all the required params
|
251 |
+
*
|
252 |
+
* @param array $params
|
253 |
+
*
|
254 |
+
* @return bool
|
255 |
+
*/
|
256 |
+
private function checkResponseParams(array $params)
|
257 |
+
{
|
258 |
+
$result = true;
|
259 |
+
$requiredKeys = $this->getRequiredParams();
|
260 |
+
foreach ($requiredKeys as $key) {
|
261 |
+
if (!array_key_exists($key, $params)) {
|
262 |
+
$result = false;
|
263 |
+
}
|
264 |
+
}
|
265 |
+
|
266 |
+
return $result;
|
267 |
+
}
|
268 |
+
|
269 |
+
|
270 |
+
/**
|
271 |
+
* check if the order dependent params exist
|
272 |
+
*
|
273 |
+
* @param Mage_Sales_Model_Order $order
|
274 |
+
* @param array $params
|
275 |
+
*
|
276 |
+
* @return bool
|
277 |
+
*/
|
278 |
+
private function checkOrderDependentConditions(
|
279 |
+
Mage_Sales_Model_Order $order, array $params
|
280 |
+
) {
|
281 |
+
$result = true;
|
282 |
+
$payment = $order->getPayment();
|
283 |
+
if (!$this->validateNonPcExpercashPayments($payment)
|
284 |
+
|| !$this->getBarzahlenParameterExists($payment, $params)
|
285 |
+
|| !$this->validatePcExpercashPayment($payment, $order, $params)
|
286 |
+
) {
|
287 |
+
$result = false;
|
288 |
+
}
|
289 |
+
return $result;
|
290 |
+
}
|
291 |
+
|
292 |
+
/**
|
293 |
+
* check if the param paymenStatus exists if payment method was barzahlen
|
294 |
+
*
|
295 |
+
* @param $payment Mage_Sales_Model_Order_Payment
|
296 |
+
* @param $params array
|
297 |
+
*
|
298 |
+
* @return bool
|
299 |
+
*/
|
300 |
+
private function getBarzahlenParameterExists($payment, $params)
|
301 |
+
{
|
302 |
+
$result = true;
|
303 |
+
if ($payment->getMethod() == Expercash_Expercash_Model_Expercashpc::PAYMENT_METHOD_NAME
|
304 |
+
&& !array_key_exists('paymentStatus', $params)
|
305 |
+
) {
|
306 |
+
$result = false;
|
307 |
+
}
|
308 |
+
return $result;
|
309 |
+
}
|
310 |
+
|
311 |
+
/**
|
312 |
+
* check if notifyActionCounter is not above 1 for non barzahlen payment method
|
313 |
+
*
|
314 |
+
* @param $payment Mage_Sales_Model_Order_Payment
|
315 |
+
*
|
316 |
+
* @return bool
|
317 |
+
*/
|
318 |
+
private function validateNonPcExpercashPayments($payment)
|
319 |
+
{
|
320 |
+
$result = true;
|
321 |
+
if ($payment->getMethod() != Expercash_Expercash_Model_Expercashpc::PAYMENT_METHOD_NAME
|
322 |
+
&& $payment->getAdditionalInformation('notifyActionCounter') >= 1
|
323 |
+
) {
|
324 |
+
$result = false;
|
325 |
+
}
|
326 |
+
return $result;
|
327 |
+
}
|
328 |
+
|
329 |
+
/**
|
330 |
+
* If payment method was barzahlen and the paymenStatus is paid, the notifyCounter should be max 2
|
331 |
+
*
|
332 |
+
* @param $payment Mage_Sales_Model_Order_Payment
|
333 |
+
*
|
334 |
+
* @return bool
|
335 |
+
*/
|
336 |
+
private function validatePcExpercashPayment($payment, $order, $params)
|
337 |
+
{
|
338 |
+
$result = true;
|
339 |
+
if ($payment->getMethod() == Expercash_Expercash_Model_Expercashpc::PAYMENT_METHOD_NAME
|
340 |
+
&& $payment->getAdditionalInformation('paymentStatus')
|
341 |
+
== Expercash_Expercash_Model_Expercashpc::BARZAHLEN_STATUS_PAID
|
342 |
+
&& !$this->validateBarzahlenSecondCall($order)
|
343 |
+
) {
|
344 |
+
$result = false;
|
345 |
+
}
|
346 |
+
|
347 |
+
if ($payment->getMethod() == Expercash_Expercash_Model_Expercashpc::PAYMENT_METHOD_NAME
|
348 |
+
&& $payment->getAdditionalInformation('paymentStatus')
|
349 |
+
== Expercash_Expercash_Model_Expercashpc::BARZAHLEN_STATUS_OPEN
|
350 |
+
&& $params['paymentStatus'] != Expercash_Expercash_Model_Expercashpc::BARZAHLEN_STATUS_PAID
|
351 |
+
) {
|
352 |
+
$result = false;
|
353 |
+
}
|
354 |
+
return $result;
|
355 |
+
}
|
356 |
+
|
357 |
+
/**
|
358 |
+
* check if the second call to the notify action was not older then 14 days past order creation date
|
359 |
+
*
|
360 |
+
* @param $order Mage_Sales_Model_Order
|
361 |
+
*
|
362 |
+
* @return bool
|
363 |
+
*/
|
364 |
+
private function validateBarzahlenSecondCall($order)
|
365 |
+
{
|
366 |
+
$result = false;
|
367 |
+
$orderDate = strtotime($order->getCreatedAt());
|
368 |
+
$allowedDate = time();
|
369 |
+
if (round(($allowedDate - $orderDate) / (3600 * 24)) <= 14) {
|
370 |
+
$result = true;
|
371 |
+
}
|
372 |
+
return $result;
|
373 |
+
}
|
374 |
+
|
375 |
+
/**
|
376 |
+
* get the required params
|
377 |
+
*
|
378 |
+
* @return array
|
379 |
+
*/
|
380 |
+
private function getRequiredParams()
|
381 |
+
{
|
382 |
+
return $this->requiredParams;
|
383 |
+
}
|
384 |
+
|
385 |
+
/**
|
386 |
+
* load and return the order based on increment id
|
387 |
+
*
|
388 |
+
* @param $orderIncrementId
|
389 |
+
*
|
390 |
+
* @return null|Mage_Sales_Model_Order
|
391 |
+
*/
|
392 |
+
public function getOrder($orderIncrementId)
|
393 |
+
{
|
394 |
+
$order = Mage::getModel('sales/order')->loadByIncrementId(
|
395 |
+
$orderIncrementId
|
396 |
+
);
|
397 |
+
if (null === $order->getId()) {
|
398 |
+
Mage::throwException(
|
399 |
+
$this->getHelper()->__('Could not load order.')
|
400 |
+
);
|
401 |
+
}
|
402 |
+
|
403 |
+
return $order;
|
404 |
+
}
|
405 |
+
|
406 |
+
/**
|
407 |
+
* Save invoice for order
|
408 |
+
*
|
409 |
+
* @param Mage_Sales_Model_Order $order
|
410 |
+
*
|
411 |
+
* @return boolean Can save invoice or not
|
412 |
+
*/
|
413 |
+
public function saveInvoice(Mage_Sales_Model_Order $order)
|
414 |
+
{
|
415 |
+
if ($order->canInvoice()) {
|
416 |
+
Mage::helper('expercash/data')->log(
|
417 |
+
sprintf(
|
418 |
+
"Save invoice for order '%s'",
|
419 |
+
$order->getIncrementId()
|
420 |
+
)
|
421 |
+
);
|
422 |
+
|
423 |
+
$invoice = $order->prepareInvoice();
|
424 |
+
$invoice->register();
|
425 |
+
$transaction = Mage::getModel('core/resource_transaction')
|
426 |
+
->addObject($invoice)
|
427 |
+
->addObject($invoice->getOrder())
|
428 |
+
->save();
|
429 |
+
$this->sendInvoiceToCustomer($invoice);
|
430 |
+
|
431 |
+
return true;
|
432 |
+
}
|
433 |
+
return false;
|
434 |
+
}
|
435 |
+
|
436 |
+
/**
|
437 |
+
* set the expercash payment reference based on payment type
|
438 |
+
*
|
439 |
+
* @param $response array
|
440 |
+
* @param $expercash Mage_Sales_Model_Order_Payment
|
441 |
+
* @param $order Mage_Sales_Model_Order
|
442 |
+
*/
|
443 |
+
public function setExpercashRef($response, $expercash, $order)
|
444 |
+
{
|
445 |
+
$storeId = $order->getStoreId();
|
446 |
+
$expRefType = 'expercash_gutid';
|
447 |
+
if (in_array($expercash->getConfigData('paymenttype', $storeId), $this->getBuyTypes())
|
448 |
+
) {
|
449 |
+
$expRefType = 'expercash_epi_payment_id';
|
450 |
+
}
|
451 |
+
$expercash->setExperCashData(
|
452 |
+
$order->getQuoteId(), $expRefType, $response["GuTID"]
|
453 |
+
);
|
454 |
+
}
|
455 |
+
|
456 |
+
/**
|
457 |
+
* return the payment types
|
458 |
+
*
|
459 |
+
* @return array
|
460 |
+
*/
|
461 |
+
private function getBuyTypes()
|
462 |
+
{
|
463 |
+
return array(
|
464 |
+
Expercash_Expercash_Model_Expercashcc::PAYMENT_TYPE_CC_BUY,
|
465 |
+
Expercash_Expercash_Model_Expercashelv::PAYMENT_TYPE_ELV_BUY,
|
466 |
+
Expercash_Expercash_Model_Expercashmp::PAYMENT_TYPE_MP_BUY,
|
467 |
+
Expercash_Expercash_Model_Expercashmpf::PAYMENT_TYPE_MPF_BUY,
|
468 |
+
);
|
469 |
+
}
|
470 |
+
|
471 |
+
/**
|
472 |
+
* set the expercash payment data on the payment object
|
473 |
+
*
|
474 |
+
* @param $response array
|
475 |
+
* @param $expercash Mage_Sales_Model_Order_Payment
|
476 |
+
* @param $order Mage_Sales_Model_Order
|
477 |
+
*/
|
478 |
+
public function setTxData($response, $expercash, $order)
|
479 |
+
{
|
480 |
+
$storeId = $order->getStoreId();
|
481 |
+
$expercash->setExperCashData(
|
482 |
+
$order->getQuoteId(),
|
483 |
+
'expercash_request_type',
|
484 |
+
$expercash->getConfigData('paymenttype', $storeId)
|
485 |
+
);
|
486 |
+
|
487 |
+
$expercash->setExperCashData(
|
488 |
+
$order->getQuoteId(), 'expercash_transaction_id',
|
489 |
+
$response["transactionId"]
|
490 |
+
);
|
491 |
+
$expercash->setExperCashData(
|
492 |
+
$order->getQuoteId(), 'expercash_paymenttype',
|
493 |
+
$response["paymentMethod"]
|
494 |
+
);
|
495 |
+
}
|
496 |
+
|
497 |
+
/**
|
498 |
+
* set payment status to payment
|
499 |
+
*
|
500 |
+
* @param $payment Mage_Sales_Model_Order_Payment
|
501 |
+
*/
|
502 |
+
public function setPaymentStatus($payment)
|
503 |
+
{
|
504 |
+
$payment->setStatus(
|
505 |
+
ExperCash_ExperCash_Model_ExperCash::STATUS_APPROVED
|
506 |
+
);
|
507 |
+
$payment->setStatusDescription(
|
508 |
+
Mage::helper('expercash')->__('Successful.')
|
509 |
+
);
|
510 |
+
}
|
511 |
+
|
512 |
+
/**
|
513 |
+
* set the order status
|
514 |
+
*
|
515 |
+
* @param $response array
|
516 |
+
* @param $expercash Mage_Sales_Model_Order_Payment
|
517 |
+
* @param $order Mage_Sales_Model_Order
|
518 |
+
*/
|
519 |
+
public function setOrderStatus($response, $expercash, $order)
|
520 |
+
{
|
521 |
+
$storeId = $order->getStoreId();
|
522 |
+
$status = $expercash->getConfigData('order_status', $storeId);;
|
523 |
+
$message = Mage::helper('expercash')->__(
|
524 |
+
'Authorization was successful.'
|
525 |
+
);
|
526 |
+
if (in_array($expercash->getConfigData('paymenttype', $storeId), $this->getBuyTypes())
|
527 |
+
|| $this->isBarzahlenStatusPaid($response, $expercash, $storeId)
|
528 |
+
) {
|
529 |
+
$message = Mage::helper('expercash')->__('Buy was successful.');
|
530 |
+
} elseif ($expercash->getConfigData('paymenttype', $storeId)
|
531 |
+
== Expercash_Expercash_Model_Expercashpc::PAYMENT_TYPE_PC
|
532 |
+
) {
|
533 |
+
$status = Mage_Sales_Model_Order::STATE_PENDING_PAYMENT;
|
534 |
+
$message = Mage::helper('expercash')->__('Awaiting Barzahlen Payment.');
|
535 |
+
|
536 |
+
}
|
537 |
+
$order->addStatusToHistory(
|
538 |
+
$status,
|
539 |
+
$message
|
540 |
+
);
|
541 |
+
}
|
542 |
+
|
543 |
+
/**
|
544 |
+
* auto create invoice if config option is set to true
|
545 |
+
*
|
546 |
+
* @param $expercash Mage_Sales_Model_Order_Payment
|
547 |
+
* @param $order Mage_Sales_Model_Order
|
548 |
+
*/
|
549 |
+
public function createInvoice($expercash, $order, $response)
|
550 |
+
{
|
551 |
+
$storeId = $order->getStoreId();
|
552 |
+
if (($expercash->isDirectSaleEnabled() || $this->isBarzahlenStatusPaid($response, $expercash, $storeId))
|
553 |
+
&& $expercash->getConfigData('createinvoice', $storeId) == 1
|
554 |
+
) {
|
555 |
+
if ($this->saveInvoice($order)) {
|
556 |
+
$order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true);
|
557 |
+
}
|
558 |
+
}
|
559 |
+
}
|
560 |
+
|
561 |
+
/**
|
562 |
+
* cancel order and set history comment about it
|
563 |
+
*
|
564 |
+
* @param $order Mage_Sales_Model_Order
|
565 |
+
*/
|
566 |
+
public function cancelOrder($order)
|
567 |
+
{
|
568 |
+
$order->cancel();
|
569 |
+
$order->addStatusToHistory(
|
570 |
+
$order->getStatus(),
|
571 |
+
Mage::helper('expercash')->__(
|
572 |
+
'Customer was rejected by ExperCash'
|
573 |
+
)
|
574 |
+
);
|
575 |
+
$order->save();
|
576 |
+
}
|
577 |
+
|
578 |
+
/**
|
579 |
+
* update the order with its payment and increase notifyActionCounter for each call
|
580 |
+
*
|
581 |
+
* @param $payment Mage_Sales_Model_Order_Payment
|
582 |
+
* @param $order Mage_Sales_Model_Order
|
583 |
+
*/
|
584 |
+
public function updateOrder($payment, $order)
|
585 |
+
{
|
586 |
+
$notifyActionCounter = (int)$payment->getAdditionalInformation(
|
587 |
+
'notifyActionCounter'
|
588 |
+
);
|
589 |
+
$payment->setAdditionalInformation(
|
590 |
+
'notifyActionCounter', ++$notifyActionCounter
|
591 |
+
);
|
592 |
+
$order->setPayment($payment);
|
593 |
+
$order->save();
|
594 |
+
}
|
595 |
+
|
596 |
+
/**
|
597 |
+
* check if payment status for barzahlen is status paid
|
598 |
+
*
|
599 |
+
* @param $response array
|
600 |
+
* @param $expercash Mage_Sales_Model_Order_Payment
|
601 |
+
* @param $storeId int
|
602 |
+
*
|
603 |
+
* @return bool
|
604 |
+
*/
|
605 |
+
private function isBarzahlenStatusPaid($response, $expercash, $storeId)
|
606 |
+
{
|
607 |
+
return $expercash->getConfigData('paymenttype', $storeId)
|
608 |
+
== Expercash_Expercash_Model_Expercashpc::PAYMENT_TYPE_PC
|
609 |
+
&& $response['paymentStatus']
|
610 |
+
== Expercash_Expercash_Model_Expercashpc::BARZAHLEN_STATUS_PAID;
|
611 |
+
}
|
612 |
+
|
613 |
+
|
614 |
+
public function saveTransactionData($payment, $responseArray, $transactionType)
|
615 |
+
{
|
616 |
+
$payment->setTransactionId($responseArray['taid']);
|
617 |
+
foreach ($responseArray as $key => $value) {
|
618 |
+
$payment->setTransactionAdditionalInfo($key, $value);
|
619 |
+
}
|
620 |
+
}
|
621 |
+
|
622 |
+
public function getPaymentReferenceId($payment)
|
623 |
+
{
|
624 |
+
$result = $payment->getMethodInstance()->getExperCashInfo('expercash_gutid');
|
625 |
+
if ($payment->getMethodInstance() instanceof Expercash_Expercash_Model_Expercashmpf) {
|
626 |
+
$result = $payment->getAdditionalInformation('GuTID');
|
627 |
+
$authTransAction = $payment->getAuthorizationTransaction();
|
628 |
+
if ($authTransAction) {
|
629 |
+
$result = $authTransAction->getTxnId();
|
630 |
+
}
|
631 |
+
|
632 |
+
}
|
633 |
+
|
634 |
+
return $result;
|
635 |
+
}
|
636 |
+
|
637 |
+
/**
|
638 |
+
* remove payment method from quote
|
639 |
+
*
|
640 |
+
* @param Mage_Sales_Model_Order $quote
|
641 |
+
*/
|
642 |
+
public function removePaymentFromQuote(Mage_Sales_Model_Quote $quote)
|
643 |
+
{
|
644 |
+
$payment = $quote->getPayment();
|
645 |
+
$payment->setMethod(null);
|
646 |
+
$quote->setDataChanges(true);
|
647 |
+
$quote->save();
|
648 |
+
|
649 |
+
}
|
650 |
+
}
|
app/code/community/Expercash/Expercash/Model/Api/Abstract.php
ADDED
@@ -0,0 +1,191 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
abstract class Expercash_Expercash_Model_Api_Abstract
|
24 |
+
{
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Max. amount of redirections to follow
|
28 |
+
*/
|
29 |
+
const MAXREDIRECTS = 2;
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Timeout in seconds before closing the connection
|
33 |
+
*/
|
34 |
+
const TIMEOUT = 30;
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Transport layer for SSL
|
38 |
+
*/
|
39 |
+
const SSLTRANSPORT = 'tcp';
|
40 |
+
|
41 |
+
|
42 |
+
/**
|
43 |
+
* @var string the client uri
|
44 |
+
*/
|
45 |
+
protected $urlToCall = null;
|
46 |
+
|
47 |
+
/**
|
48 |
+
* @var Expercash_Expercash_Model_Config
|
49 |
+
*/
|
50 |
+
protected $config = null;
|
51 |
+
|
52 |
+
/**
|
53 |
+
* set the client uri
|
54 |
+
*
|
55 |
+
* @param string $url
|
56 |
+
*/
|
57 |
+
public function setUrlToCall($url)
|
58 |
+
{
|
59 |
+
$this->urlToCall = $url;
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* setter for config object
|
64 |
+
*
|
65 |
+
* @param Expercash_Expercash_Model_Config $config
|
66 |
+
*/
|
67 |
+
public function setConfig($config)
|
68 |
+
{
|
69 |
+
$this->config = $config;
|
70 |
+
}
|
71 |
+
|
72 |
+
|
73 |
+
/**
|
74 |
+
* get a Varien_Http_Client
|
75 |
+
*
|
76 |
+
* @return Varien_Http_Client
|
77 |
+
*/
|
78 |
+
public function getClient()
|
79 |
+
{
|
80 |
+
return new Varien_Http_Client();
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* get the config object
|
85 |
+
*
|
86 |
+
* @return Expercash_Expercash_Model_Config|
|
87 |
+
*/
|
88 |
+
public function getConfig()
|
89 |
+
{
|
90 |
+
if (null === $this->config) {
|
91 |
+
$this->config = Mage::getModel('expercash/config');
|
92 |
+
}
|
93 |
+
return $this->config;
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* return the client uri to call
|
98 |
+
*
|
99 |
+
* @param int $storeId
|
100 |
+
*
|
101 |
+
* @return string
|
102 |
+
*/
|
103 |
+
public function getUrlToCall($storeId)
|
104 |
+
{
|
105 |
+
if (null === $this->urlToCall) {
|
106 |
+
$this->urlToCall = $this->getConfig()->getEpiUrl($storeId);
|
107 |
+
}
|
108 |
+
return $this->urlToCall;
|
109 |
+
}
|
110 |
+
|
111 |
+
/**
|
112 |
+
* send request via POST to epi gateway
|
113 |
+
*
|
114 |
+
* @param array $request
|
115 |
+
* @param int storeId
|
116 |
+
*
|
117 |
+
* @return xml
|
118 |
+
* @throws Mage_Core_Exception - on errors
|
119 |
+
*/
|
120 |
+
protected function _postRequest(array $request, $storeId = null)
|
121 |
+
{
|
122 |
+
$client = $this->getClient();
|
123 |
+
$client->setUri($this->getUrlToCall($storeId));
|
124 |
+
$client->setConfig(
|
125 |
+
array(
|
126 |
+
'maxredirects' => self::MAXREDIRECTS,
|
127 |
+
'timeout' => self::TIMEOUT,
|
128 |
+
'ssltransport' => self::SSLTRANSPORT,
|
129 |
+
)
|
130 |
+
);
|
131 |
+
|
132 |
+
$client->setParameterPost($request);
|
133 |
+
$client->setMethod(Zend_Http_Client::POST);
|
134 |
+
$this->getDataHelper()->clientLog(Expercash_Expercash_Helper_Data::LOG_TYPE_REQUEST, $request);
|
135 |
+
|
136 |
+
try {
|
137 |
+
$response = $client->request();
|
138 |
+
$responseBody = $response->getBody();
|
139 |
+
$this->getDataHelper()->clientLog(Expercash_Expercash_Helper_Data::LOG_TYPE_RESPONSE, $responseBody);
|
140 |
+
return $responseBody;
|
141 |
+
|
142 |
+
} catch (Exception $e) {
|
143 |
+
Mage::throwException(
|
144 |
+
$this->getDataHelper()->__('Gateway request error: %s', $e->getMessage())
|
145 |
+
);
|
146 |
+
}
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Parse the bodytext into simpleXML object and returns it
|
151 |
+
*
|
152 |
+
* @param xml $bodytext
|
153 |
+
*
|
154 |
+
* @return SimpleXMLElement
|
155 |
+
* @throws Exception
|
156 |
+
*/
|
157 |
+
public function parseResponse($bodyText)
|
158 |
+
{
|
159 |
+
try {
|
160 |
+
libxml_use_internal_errors(true);
|
161 |
+
$simpleXMLResponse = simplexml_load_string($bodyText);
|
162 |
+
|
163 |
+
if (false === $simpleXMLResponse
|
164 |
+
|| true === is_null($simpleXMLResponse)
|
165 |
+
|| !$simpleXMLResponse instanceof SimpleXMLElement
|
166 |
+
) {
|
167 |
+
Mage::throwException(
|
168 |
+
$this->getDataHelper()->__('Error while transforming response to simple xml.')
|
169 |
+
);
|
170 |
+
}
|
171 |
+
|
172 |
+
return $simpleXMLResponse;
|
173 |
+
|
174 |
+
} catch (Exception $e) {
|
175 |
+
throw $e;
|
176 |
+
}
|
177 |
+
}
|
178 |
+
|
179 |
+
|
180 |
+
/**
|
181 |
+
* get expercash data helper
|
182 |
+
*
|
183 |
+
* @return Expercash_Expercash_Helper_Data
|
184 |
+
*/
|
185 |
+
protected function getDataHelper()
|
186 |
+
{
|
187 |
+
$dataHelper = Mage::helper('expercash/data');
|
188 |
+
/**@var $dataHelper Expercash_Expercash_Helper_Data * */
|
189 |
+
return $dataHelper;
|
190 |
+
}
|
191 |
+
}
|
app/code/community/Expercash/Expercash/Model/Api/Api.php
ADDED
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
class Expercash_Expercash_Model_Api_Api extends Expercash_Expercash_Model_Api_Abstract
|
24 |
+
{
|
25 |
+
|
26 |
+
const TRANSACTION_SUCCESSFUL = 100;
|
27 |
+
|
28 |
+
const TRANSACTION_ERROR = 900;
|
29 |
+
|
30 |
+
/**
|
31 |
+
* call the expercash api to get the iframe token
|
32 |
+
*
|
33 |
+
* @param array $requestParams
|
34 |
+
* @return string $iframeToken
|
35 |
+
*/
|
36 |
+
public function getIframeToken(array $requestParams)
|
37 |
+
{
|
38 |
+
$this->setUrlToCall($this->getConfig()->getIframeTokenUrl());
|
39 |
+
$response = $this->_postRequest($requestParams, null);
|
40 |
+
$responseArray = $this->parseResponse($response);
|
41 |
+
$this->validateResponse($responseArray);
|
42 |
+
$iframeToken = $responseArray['sessionId'];
|
43 |
+
return $iframeToken;
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* validate the response and return the token
|
48 |
+
*
|
49 |
+
* @param string $response
|
50 |
+
*
|
51 |
+
* @throws Mage_Core_Exception - in case of invalid response or errors
|
52 |
+
* @return mixed string
|
53 |
+
*/
|
54 |
+
protected function validateResponse($responseArray)
|
55 |
+
{
|
56 |
+
$this->getDataHelper()->log(Zend_Json::encode($responseArray));
|
57 |
+
if (!array_key_exists('rc',$responseArray) || $responseArray['rc'] != self::TRANSACTION_SUCCESSFUL
|
58 |
+
|| !array_key_exists('sessionId', $responseArray))
|
59 |
+
Mage::throwException('invalid response from expercash');
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* get core data helper
|
64 |
+
*
|
65 |
+
* @return Mage_Core_Helper_Abstract|Mage_Core_Helper_Data
|
66 |
+
*/
|
67 |
+
protected function getCoreDataHelper()
|
68 |
+
{
|
69 |
+
$coreDataHelper = Mage::helper('core/data');
|
70 |
+
/**@var $coreDataHelper Mage_Core_Helper_Data **/
|
71 |
+
return $coreDataHelper;
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* @param $response
|
76 |
+
*
|
77 |
+
* @return array
|
78 |
+
*/
|
79 |
+
public function parseResponse($response)
|
80 |
+
{
|
81 |
+
$simpleXmlResponse = parent::parseResponse($response);
|
82 |
+
$responseArray = $this->getCoreDataHelper()->xmlToAssoc($simpleXmlResponse);
|
83 |
+
return $responseArray;
|
84 |
+
}
|
85 |
+
}
|
86 |
+
|
app/code/community/Expercash/Expercash/Model/Api/Capture.php
ADDED
@@ -0,0 +1,158 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
class Expercash_Expercash_Model_Api_Capture extends Expercash_Expercash_Model_Api_Abstract
|
23 |
+
{
|
24 |
+
/**
|
25 |
+
* Trigger the capture process of the Expercash gateway
|
26 |
+
*
|
27 |
+
* @param Mage_Sales_Model_Order_Payment $payment
|
28 |
+
* @param float $amount
|
29 |
+
* @param string $capture_type
|
30 |
+
*
|
31 |
+
* @return void
|
32 |
+
*/
|
33 |
+
public function capture($payment, $amount, $capture_type)
|
34 |
+
{
|
35 |
+
$storeId = $payment->getOrder()->getStoreId();
|
36 |
+
if ($amount > 0) {
|
37 |
+
$requestParameters = $this->getRequestParams($payment, $amount, $capture_type);
|
38 |
+
$responseBody = $this->_postRequest($requestParameters, $storeId);
|
39 |
+
$this->validateAndSaveResponse($responseBody, $payment);
|
40 |
+
|
41 |
+
$parsedXML = $this->parseResponse($responseBody);
|
42 |
+
$responseArray = Mage::helper('core/data')->xmlToAssoc($parsedXML);
|
43 |
+
|
44 |
+
Mage::helper('expercash/payment')->saveTransactionData(
|
45 |
+
$payment,
|
46 |
+
$responseArray,
|
47 |
+
Mage_Sales_Model_Order_Payment_Transaction::TYPE_CAPTURE
|
48 |
+
);
|
49 |
+
}
|
50 |
+
}
|
51 |
+
|
52 |
+
protected function getRequestParams($payment, $amount, $captureType)
|
53 |
+
{
|
54 |
+
$storeId = $payment->getOrder()->getStoreId();
|
55 |
+
/** @var Mage_Sales_Model_Order $order */
|
56 |
+
$order = $payment->getOrder();
|
57 |
+
|
58 |
+
/** @var $config Expercash_Expercash_Model_Config */
|
59 |
+
$config = Mage::getModel('expercash/config');
|
60 |
+
|
61 |
+
$requestParameters = array(
|
62 |
+
"pid" => $config->getProjectId($storeId),
|
63 |
+
"pkey" => $config->getGatewayKey($storeId),
|
64 |
+
"cref" => $order->getIncrementId(),
|
65 |
+
"amount" => round($amount * 100),
|
66 |
+
"action" => $captureType,
|
67 |
+
"reference" => Mage::helper('expercash/payment')->getPaymentReferenceId($payment),
|
68 |
+
);
|
69 |
+
|
70 |
+
return $requestParameters;
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Check the response for validity and save the reponse data
|
75 |
+
*
|
76 |
+
* @param string $response
|
77 |
+
* @param Mage_Sales_Model_Payment $payment
|
78 |
+
* @return void
|
79 |
+
* @throws Mage_Core_Exception
|
80 |
+
*/
|
81 |
+
public function validateAndSaveResponse($response, $payment)
|
82 |
+
{
|
83 |
+
try {
|
84 |
+
$xmlResponse = $this->parseResponse($response);
|
85 |
+
|
86 |
+
if ($xmlResponse->rc != 100) {
|
87 |
+
Mage::throwException(
|
88 |
+
Mage::helper('expercash/data')->__('Response status is not correct: %s', $xmlResponse->rc)
|
89 |
+
);
|
90 |
+
}
|
91 |
+
|
92 |
+
$payment->setStatus(Expercash_Expercash_Model_Expercash::STATUS_SUCCESS);
|
93 |
+
$this->saveExperCashData($payment, $xmlResponse);
|
94 |
+
$this->saveOrderHistory($payment);
|
95 |
+
$payment->getOrder()->save();
|
96 |
+
} catch (Exception $e) {
|
97 |
+
//Reload order to avoid that the order items were marked as invoiced
|
98 |
+
$order = Mage::getModel("sales/order")->load(
|
99 |
+
$payment->getOrder()->getId()
|
100 |
+
);
|
101 |
+
|
102 |
+
$order->addStatusToHistory(
|
103 |
+
$order->getStatus(),
|
104 |
+
Mage::helper('expercash/data')->__('Capture-attempt failed with message: %s', $e->getMessage())
|
105 |
+
);
|
106 |
+
$order->save();
|
107 |
+
|
108 |
+
Mage::throwException(
|
109 |
+
Mage::helper('expercash/data')->__('Error during capture: %s', $e->getMessage())
|
110 |
+
);
|
111 |
+
}
|
112 |
+
}
|
113 |
+
|
114 |
+
/**
|
115 |
+
* saves the expercash order history
|
116 |
+
*
|
117 |
+
* @param Mage_Sales_Model_Order_Payment $payment
|
118 |
+
* @return void
|
119 |
+
*/
|
120 |
+
public function saveOrderHistory($payment)
|
121 |
+
{
|
122 |
+
$payment->setStatusDescription(
|
123 |
+
Mage::helper('expercash/data')->__(
|
124 |
+
'Capture was successful. Captured amount: %s %s',
|
125 |
+
$payment->getAmount(),
|
126 |
+
$payment->getOrder()->getOrderCurrencyCode()
|
127 |
+
)
|
128 |
+
);
|
129 |
+
|
130 |
+
$payment->getOrder()->addStatusToHistory(
|
131 |
+
$payment->getOrder()->getStatus(),
|
132 |
+
Mage::helper('expercash/data')->__('Capture was successful.')
|
133 |
+
);
|
134 |
+
}
|
135 |
+
|
136 |
+
/**
|
137 |
+
* saves the expercash response in Sales_Flat_Quote_Payment
|
138 |
+
*
|
139 |
+
* @param Mage_Sales_Model_Order_Payment $payment
|
140 |
+
* @param SimpleXMLElement $response
|
141 |
+
* @return void
|
142 |
+
*/
|
143 |
+
public function saveExperCashData($payment, $response)
|
144 |
+
{
|
145 |
+
$paymentHelper = Mage::helper('expercash/payment');
|
146 |
+
$paymentHelper->setExperCashData(
|
147 |
+
$payment->getOrder()->getQuoteId(),
|
148 |
+
'expercash_gutid_capture',
|
149 |
+
$response->taid
|
150 |
+
);
|
151 |
+
|
152 |
+
$paymentHelper->setExperCashData(
|
153 |
+
$payment->getOrder()->getQuoteId(),
|
154 |
+
'expercash_epi_payment_id',
|
155 |
+
$response->epi_payment_id
|
156 |
+
);
|
157 |
+
}
|
158 |
+
}
|
app/code/community/Expercash/Expercash/Model/Api/Masterpass/Capture.php
ADDED
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
class Expercash_Expercash_Model_Api_Masterpass_Capture extends Expercash_Expercash_Model_Api_Capture
|
24 |
+
{
|
25 |
+
/**
|
26 |
+
* Trigger the capture process of the Expercash gateway
|
27 |
+
*
|
28 |
+
* @param Mage_Sales_Model_Order_Payment $payment
|
29 |
+
* @param float $amount
|
30 |
+
* @param string $capture_type
|
31 |
+
*
|
32 |
+
* @return void
|
33 |
+
*/
|
34 |
+
public function capture($payment, $amount, $capture_type)
|
35 |
+
{
|
36 |
+
|
37 |
+
$storeId = $payment->getOrder()->getStoreId();
|
38 |
+
if ($amount > 0) {
|
39 |
+
$requestParameters = $this->getRequestParams($payment, $amount, $capture_type);
|
40 |
+
$responseBody = $this->_postRequest($requestParameters, $storeId);
|
41 |
+
$this->validateAndSaveResponse($responseBody, $payment);
|
42 |
+
|
43 |
+
$xmlResponse = $this->parseResponse($responseBody);
|
44 |
+
$responseArray = Mage::helper('core/data')->xmlToAssoc($xmlResponse);
|
45 |
+
|
46 |
+
Mage::helper('expercash/payment')->saveTransactionData(
|
47 |
+
$payment,
|
48 |
+
$responseArray,
|
49 |
+
Mage_Sales_Model_Order_Payment_Transaction::TYPE_CAPTURE
|
50 |
+
);
|
51 |
+
|
52 |
+
$checkOrderHandling = Mage::helper('expercash/masterpass')->orderAndTransactionHandling(
|
53 |
+
$responseArray,
|
54 |
+
$payment->getOrder()
|
55 |
+
);
|
56 |
+
|
57 |
+
if (false === $checkOrderHandling) {
|
58 |
+
Mage::throwException('Error occurred while trying to capture.');
|
59 |
+
}
|
60 |
+
}
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* get params for capture request
|
65 |
+
*
|
66 |
+
* @param $payment
|
67 |
+
* @param $amount
|
68 |
+
* @param $captureType
|
69 |
+
*
|
70 |
+
* @return array
|
71 |
+
*/
|
72 |
+
protected function getRequestParams($payment, $amount, $captureType)
|
73 |
+
{
|
74 |
+
$requestParameters = Mage::getModel('expercash/request_masterpass_epi')->getPlaceOrderParams(
|
75 |
+
$payment->getOrder(),
|
76 |
+
$captureType
|
77 |
+
);
|
78 |
+
|
79 |
+
return $requestParameters;
|
80 |
+
}
|
81 |
+
|
82 |
+
|
83 |
+
}
|
app/code/community/Expercash/Expercash/Model/Api/Masterpass/Epi.php
ADDED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
class Expercash_Expercash_Model_Api_Masterpass_Epi extends Expercash_Expercash_Model_Api_Abstract
|
24 |
+
{
|
25 |
+
/**
|
26 |
+
* code for successful transaction
|
27 |
+
*/
|
28 |
+
const TRANSACTION_SUCCESSFUL = 100;
|
29 |
+
|
30 |
+
const TRANSACTION_ERROR = 900;
|
31 |
+
|
32 |
+
|
33 |
+
public function doEpiRequest(array $requestParams)
|
34 |
+
{
|
35 |
+
$this->setUrlToCall($this->getConfig()->getEpiUrl());
|
36 |
+
$response = $this->_postRequest($requestParams, null);
|
37 |
+
$responseArray = $this->parseResponse($response);
|
38 |
+
$this->validateResponse($responseArray);
|
39 |
+
return $responseArray;
|
40 |
+
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* validate the response and return the token
|
45 |
+
*
|
46 |
+
* @param string $response
|
47 |
+
*
|
48 |
+
* @throws Mage_Core_Exception - in case of invalid response or errors
|
49 |
+
* @return mixed string
|
50 |
+
*/
|
51 |
+
public function validateResponse($responseArray)
|
52 |
+
{
|
53 |
+
if (!array_key_exists('rc',$responseArray) ||
|
54 |
+
$responseArray['rc'] != self::TRANSACTION_SUCCESSFUL
|
55 |
+
)
|
56 |
+
{
|
57 |
+
Mage::throwException('Invalid response from expercash.');
|
58 |
+
}
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* get core data helper
|
63 |
+
*
|
64 |
+
* @return Mage_Core_Helper_Abstract|Mage_Core_Helper_Data
|
65 |
+
*/
|
66 |
+
protected function getCoreDataHelper()
|
67 |
+
{
|
68 |
+
$coreDataHelper = Mage::helper('core/data');
|
69 |
+
/**@var $coreDataHelper Mage_Core_Helper_Data **/
|
70 |
+
return $coreDataHelper;
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* @param $response
|
75 |
+
*
|
76 |
+
* @return array
|
77 |
+
*/
|
78 |
+
public function parseResponse($response)
|
79 |
+
{
|
80 |
+
$simpleXmlResponse = parent::parseResponse($response);
|
81 |
+
$responseArray = $this->getCoreDataHelper()->xmlToAssoc($simpleXmlResponse);
|
82 |
+
return $responseArray;
|
83 |
+
}
|
84 |
+
}
|
85 |
+
|
app/code/community/Expercash/Expercash/Model/Config.php
ADDED
@@ -0,0 +1,221 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
class Expercash_Expercash_Model_Config
|
25 |
+
{
|
26 |
+
|
27 |
+
/*
|
28 |
+
* the payment service path
|
29 |
+
*/
|
30 |
+
const PAYMENT_SERVICE_PATH = 'payment_services/expercash/';
|
31 |
+
|
32 |
+
|
33 |
+
/*
|
34 |
+
* expercash token config path
|
35 |
+
*/
|
36 |
+
const TOKEN_REGISTRY_KEY = 'expercash_token';
|
37 |
+
|
38 |
+
/**
|
39 |
+
* get the epi url from the config.xml
|
40 |
+
*
|
41 |
+
* @return string
|
42 |
+
*/
|
43 |
+
public function getEpiUrl($storeId = null)
|
44 |
+
{
|
45 |
+
return Mage::getStoreConfig('epi_url/url', $storeId);
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* generic getter for config values
|
50 |
+
*
|
51 |
+
* @param string $field
|
52 |
+
* @param string $code
|
53 |
+
* @param int $storeId
|
54 |
+
*
|
55 |
+
* @return mixed
|
56 |
+
*/
|
57 |
+
public function getConfigData($field, $code, $storeId = null)
|
58 |
+
{
|
59 |
+
$path = 'payment/' . $code . '/' . $field;
|
60 |
+
$config = Mage::getStoreConfig($path, $storeId);
|
61 |
+
return $config;
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* returns the additional payment params that are configured in config.xml
|
66 |
+
*
|
67 |
+
* @param null $storeId
|
68 |
+
*
|
69 |
+
* @return mixed
|
70 |
+
*/
|
71 |
+
public function getAdditionalPaymentParams($storeId = null)
|
72 |
+
{
|
73 |
+
return Mage::getStoreConfig('additionalPaymentParams/params', $storeId);
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* @param int $storeId
|
78 |
+
*
|
79 |
+
* @return string
|
80 |
+
*/
|
81 |
+
public function getPopupId($storeId = null)
|
82 |
+
{
|
83 |
+
return Mage::getStoreConfig(self::PAYMENT_SERVICE_PATH . 'popup_id', $storeId);
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* returns the profil id
|
88 |
+
*
|
89 |
+
* @param int $storeId
|
90 |
+
*
|
91 |
+
* @return string
|
92 |
+
*/
|
93 |
+
public function getProfilId($storeId = null)
|
94 |
+
{
|
95 |
+
return Mage::getStoreConfig(self::PAYMENT_SERVICE_PATH . 'profil_id', $storeId);
|
96 |
+
}
|
97 |
+
|
98 |
+
/**
|
99 |
+
* returns the expercash authorization key
|
100 |
+
*
|
101 |
+
* @param int $storeId
|
102 |
+
*
|
103 |
+
* @return string
|
104 |
+
*/
|
105 |
+
public function getAuthorizationkey($storeId = null)
|
106 |
+
{
|
107 |
+
return Mage::getStoreConfig(self::PAYMENT_SERVICE_PATH . 'authorization_key', $storeId);
|
108 |
+
}
|
109 |
+
|
110 |
+
/**
|
111 |
+
* returns the expercash gateway key
|
112 |
+
*
|
113 |
+
* @param int $storeId
|
114 |
+
*
|
115 |
+
* @return string
|
116 |
+
*/
|
117 |
+
public function getGatewayKey($storeId = null)
|
118 |
+
{
|
119 |
+
return Mage::getStoreConfig(self::PAYMENT_SERVICE_PATH . 'gateway_key', $storeId);
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* returns the project id
|
124 |
+
*
|
125 |
+
* @param int $storeId
|
126 |
+
*
|
127 |
+
* @return string
|
128 |
+
*/
|
129 |
+
public function getProjectId($storeId = null)
|
130 |
+
{
|
131 |
+
return Mage::getStoreConfig(self::PAYMENT_SERVICE_PATH . 'project_id', $storeId);
|
132 |
+
}
|
133 |
+
|
134 |
+
/**
|
135 |
+
* returns the iframe css class
|
136 |
+
*
|
137 |
+
* @param null $storeId
|
138 |
+
*
|
139 |
+
* @return mixed
|
140 |
+
*/
|
141 |
+
public function getIframeCssClass($storeId = null)
|
142 |
+
{
|
143 |
+
return Mage::getStoreConfig(self::PAYMENT_SERVICE_PATH . 'iframe_css_class', $storeId);
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* returns the iframe width
|
148 |
+
*
|
149 |
+
* @param int $storeId
|
150 |
+
*
|
151 |
+
* @return string
|
152 |
+
*/
|
153 |
+
public function getIframeWidth($storeId = null)
|
154 |
+
{
|
155 |
+
return Mage::getStoreConfig(self::PAYMENT_SERVICE_PATH . 'iframe_width', $storeId);
|
156 |
+
}
|
157 |
+
|
158 |
+
/**
|
159 |
+
* returns the iframe height
|
160 |
+
*
|
161 |
+
* @param int $storeId
|
162 |
+
*
|
163 |
+
* @return string
|
164 |
+
*/
|
165 |
+
public function getIframeHeight($storeId = null)
|
166 |
+
{
|
167 |
+
return Mage::getStoreConfig(self::PAYMENT_SERVICE_PATH . 'iframe_height', $storeId);
|
168 |
+
}
|
169 |
+
|
170 |
+
/**
|
171 |
+
* returns the css url
|
172 |
+
*
|
173 |
+
* @param int $storeId
|
174 |
+
*
|
175 |
+
* @return string
|
176 |
+
*/
|
177 |
+
public function getCssUrl($storeId = null)
|
178 |
+
{
|
179 |
+
return Mage::getStoreConfig(self::PAYMENT_SERVICE_PATH . 'css_url', $storeId);
|
180 |
+
}
|
181 |
+
|
182 |
+
/**
|
183 |
+
* get the iframe token url from config
|
184 |
+
* there is no need to support multistore for this, as the url should be the same for all stores
|
185 |
+
*
|
186 |
+
* @return string
|
187 |
+
*/
|
188 |
+
public function getIframeTokenUrl()
|
189 |
+
{
|
190 |
+
return Mage::getStoreConfig('iframe_token_url/url');
|
191 |
+
}
|
192 |
+
|
193 |
+
/**
|
194 |
+
* get the iframe url from config
|
195 |
+
* there is no need to support multistore for this, as the url should be the same for all stores
|
196 |
+
*
|
197 |
+
* @return string
|
198 |
+
*/
|
199 |
+
public function getIframeUrl()
|
200 |
+
{
|
201 |
+
return Mage::getStoreConfig('iframe_url/url');
|
202 |
+
}
|
203 |
+
|
204 |
+
/**
|
205 |
+
* return the params for shopEnvironment
|
206 |
+
*
|
207 |
+
* @return array
|
208 |
+
*/
|
209 |
+
public function getShopEnvironmentParams()
|
210 |
+
{
|
211 |
+
$params = array(
|
212 |
+
'envSystemName' => Mage::helper('expercash/data')->getEnvName(),
|
213 |
+
'envSystemVersion' => Mage::helper('expercash/data')->getMagentoVersion(),
|
214 |
+
'envPaymentModulVersion' => Mage::helper('expercash/data')->getVersion()
|
215 |
+
);
|
216 |
+
|
217 |
+
return json_encode($params);
|
218 |
+
}
|
219 |
+
|
220 |
+
|
221 |
+
}
|
app/code/community/Expercash/Expercash/Model/Directory/Region.php
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
class Expercash_Expercash_Model_Directory_Region
|
24 |
+
{
|
25 |
+
|
26 |
+
/**
|
27 |
+
* check if directory modul version is above 1.6.0
|
28 |
+
*
|
29 |
+
* @return bool
|
30 |
+
*/
|
31 |
+
public function isLegacyInstallation()
|
32 |
+
{
|
33 |
+
$directoryVersion = Mage::getConfig()->getModuleConfig('Mage_Directory')->version;
|
34 |
+
return version_compare($directoryVersion, '1.6.0.0', '<=');
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* load region by name
|
39 |
+
*
|
40 |
+
* @param $regionName
|
41 |
+
* @param $countryId
|
42 |
+
*
|
43 |
+
* @return $this|Mage_Directory_Model_Region
|
44 |
+
*/
|
45 |
+
public function loadByName($regionName, $countryId)
|
46 |
+
{
|
47 |
+
$region = Mage::getModel('directory/region');
|
48 |
+
|
49 |
+
if ($this->isLegacyInstallation()) {
|
50 |
+
Mage::getResourceModel('expercash/directory_region')->loadByName($region, $regionName, $countryId);
|
51 |
+
return $region;
|
52 |
+
}
|
53 |
+
|
54 |
+
return $region->loadByName($regionName, $countryId);
|
55 |
+
}
|
56 |
+
|
57 |
+
}
|
app/code/community/Expercash/Expercash/Model/Entity/Setup.php
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
class Expercash_Expercash_Model_Entity_Setup extends Mage_Eav_Model_Entity_Setup
|
23 |
+
{
|
24 |
+
|
25 |
+
public function getDefaultEntities()
|
26 |
+
{
|
27 |
+
return array(
|
28 |
+
'order_payment' => array(
|
29 |
+
'entity_model' => 'sales/order_payment',
|
30 |
+
'table' => 'sales/order_entity',
|
31 |
+
'attributes' => array(
|
32 |
+
'parent_id' => array(
|
33 |
+
'type' => 'static',
|
34 |
+
'backend' =>'sales_entity/order_attribute_backend_child'
|
35 |
+
),
|
36 |
+
'expercash_gutid' => array('type' => 'varchar'),
|
37 |
+
'expercash_transaction_id' => array('type' => 'varchar'),
|
38 |
+
'expercash_gutid_capture' => array('type' => 'varchar'),
|
39 |
+
'expercash_paymenttype' => array('type' => 'varchar'),
|
40 |
+
'expercash_epi_payment_id' => array('type' => 'varchar'),
|
41 |
+
'expercash_request_type' => array('type' => 'varchar'),
|
42 |
+
),
|
43 |
+
),
|
44 |
+
);
|
45 |
+
}
|
46 |
+
}
|
app/code/community/Expercash/Expercash/Model/Expercash.php
ADDED
@@ -0,0 +1,236 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
class Expercash_Expercash_Model_Expercash extends Mage_Payment_Model_Method_Abstract
|
25 |
+
{
|
26 |
+
|
27 |
+
/**
|
28 |
+
* the payment failed message string
|
29 |
+
*/
|
30 |
+
const PAYMENT_FAILED_MESSAGE = "Please select another payment method!";
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Availability options
|
34 |
+
*/
|
35 |
+
protected $_code = 'expercash';
|
36 |
+
protected $_paymentMethod = 'expercash';
|
37 |
+
protected $_formBlockType = 'expercash/form_expercash';
|
38 |
+
protected $_infoBlockType = 'expercash/info_expercash';
|
39 |
+
protected $_isGateway = false;
|
40 |
+
protected $_canAuthorize = true;
|
41 |
+
protected $_canCapture = true;
|
42 |
+
protected $_canCapturePartial = true;
|
43 |
+
protected $_canRefund = false;
|
44 |
+
protected $_canVoid = false;
|
45 |
+
protected $_canUseInternal = false;
|
46 |
+
protected $_canUseCheckout = true;
|
47 |
+
protected $_canUseForMultishipping = false;
|
48 |
+
protected $_expercashStack = false;
|
49 |
+
|
50 |
+
|
51 |
+
/**
|
52 |
+
* authorize payment
|
53 |
+
*
|
54 |
+
* get token from expercash and save it in session
|
55 |
+
* if something goes wrong jump to section before payment in checkout
|
56 |
+
*
|
57 |
+
* @param Varien_Object $payment
|
58 |
+
* @param float $amount
|
59 |
+
*
|
60 |
+
* @throws Exception
|
61 |
+
* @throws Mage_Checkout_Exception
|
62 |
+
*/
|
63 |
+
public function authorize(Varien_Object $payment, $amount)
|
64 |
+
{
|
65 |
+
parent::authorize($payment, $amount);
|
66 |
+
$order = $this->getInfoInstance()->getOrder();
|
67 |
+
$section = $this->getSection($order);
|
68 |
+
|
69 |
+
try {
|
70 |
+
$requestParams = Mage::getModel('expercash/request_token_iframe')->getTokenParams($order);
|
71 |
+
|
72 |
+
$token = Mage::getModel('expercash/api_api')->getIframeToken($requestParams);
|
73 |
+
if (!$token) {
|
74 |
+
throw new Mage_Checkout_Exception('No Expercash token.');
|
75 |
+
}
|
76 |
+
$this->getCheckoutSession()->setData(Expercash_Expercash_Model_Config::TOKEN_REGISTRY_KEY, $token);
|
77 |
+
|
78 |
+
$payment->setTransactionId($requestParams['transactionId']);
|
79 |
+
$payment->setIsTransactionClosed(false);
|
80 |
+
|
81 |
+
|
82 |
+
}
|
83 |
+
catch (Mage_Checkout_Exception $ce) {
|
84 |
+
$this->getDataHelper()->log($ce->getMessage());
|
85 |
+
Mage::getSingleton('checkout/type_onepage')->getCheckout()->setGotoSection($section);
|
86 |
+
throw $ce;
|
87 |
+
}
|
88 |
+
catch (Exception $e) {
|
89 |
+
$this->getDataHelper()->log($e->getMessage());
|
90 |
+
Mage::getSingleton('checkout/type_onepage')->getCheckout()->setGotoSection($section);
|
91 |
+
Mage::throwException(sprintf('%s', $this->getDataHelper()->__(self::PAYMENT_FAILED_MESSAGE)));
|
92 |
+
}
|
93 |
+
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* get the expercash data helper
|
98 |
+
*
|
99 |
+
* @return Expercash_Expercash_Helper_Data
|
100 |
+
*/
|
101 |
+
protected function getDataHelper()
|
102 |
+
{
|
103 |
+
return Mage::helper('expercash/data');
|
104 |
+
}
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Get redirect URL
|
108 |
+
*
|
109 |
+
* @return Mage_Payment_Helper_Data
|
110 |
+
*/
|
111 |
+
public function getOrderPlaceRedirectUrl()
|
112 |
+
{
|
113 |
+
return Mage::getUrl('expercash/expercash/reset');
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Calc Amount
|
118 |
+
*
|
119 |
+
* @return amount
|
120 |
+
*/
|
121 |
+
protected function calcCentAmount($amount)
|
122 |
+
{
|
123 |
+
return number_format($amount * 100, 0, '.', '');
|
124 |
+
}
|
125 |
+
|
126 |
+
/**
|
127 |
+
* refund the amount with transaction id
|
128 |
+
*
|
129 |
+
* @access public
|
130 |
+
*
|
131 |
+
* @param string $payment Varien_Object object
|
132 |
+
*
|
133 |
+
* @return Mage_Payment_Model_Abstract
|
134 |
+
*/
|
135 |
+
public function refund(Varien_Object $payment, $amount)
|
136 |
+
{
|
137 |
+
$payment->setStatusDescription(Mage::helper('expercash')->__('Error in refunding the payment'));
|
138 |
+
return $this;
|
139 |
+
}
|
140 |
+
|
141 |
+
/**
|
142 |
+
* Retrieve information from payment configuration
|
143 |
+
*
|
144 |
+
* @param string $field
|
145 |
+
* @param null|int $storeId
|
146 |
+
*
|
147 |
+
* @return mixed
|
148 |
+
*/
|
149 |
+
public function getConfigData($field, $storeId = null)
|
150 |
+
{
|
151 |
+
return Mage::getModel('expercash/config')->getConfigData($field, $this->getCode(), $storeId);
|
152 |
+
}
|
153 |
+
|
154 |
+
/**
|
155 |
+
*
|
156 |
+
* @param integer $id QuoteId
|
157 |
+
* @param string $key
|
158 |
+
* @param string $value
|
159 |
+
*/
|
160 |
+
public function setExperCashData($id, $key, $value)
|
161 |
+
{
|
162 |
+
Mage::helper('expercash/payment')->setExperCashData($id, $key, $value);
|
163 |
+
}
|
164 |
+
|
165 |
+
/**
|
166 |
+
* wrapps the payment helper function getExperCashInfo
|
167 |
+
*
|
168 |
+
* @return string
|
169 |
+
*/
|
170 |
+
public function createExperCashOrderId()
|
171 |
+
{
|
172 |
+
return Mage::helper('expercash/payment')->createExperCashOrderId();
|
173 |
+
}
|
174 |
+
|
175 |
+
/**
|
176 |
+
* wrapps the payment helper function getExperCashInfo
|
177 |
+
*
|
178 |
+
* @param type $string
|
179 |
+
*
|
180 |
+
* @return string
|
181 |
+
*/
|
182 |
+
public function getExperCashInfo($string)
|
183 |
+
{
|
184 |
+
$id = $this->getInfoInstance()->getOrder()->getQuoteId();
|
185 |
+
return Mage::helper('expercash/payment')->getExperCashInfo($string, $id);
|
186 |
+
}
|
187 |
+
|
188 |
+
/**
|
189 |
+
* set additional data on the payment
|
190 |
+
*
|
191 |
+
* @param Mage_Payment_Model_Info $payment
|
192 |
+
* @param array $responseParams
|
193 |
+
*/
|
194 |
+
public function setAdditionalPaymentInfo(Mage_Payment_Model_Info $payment, $responseParams)
|
195 |
+
{
|
196 |
+
foreach (Mage::helper('expercash/data')->getAdditionalPaymentParams() as $key) {
|
197 |
+
if (array_key_exists($key, $responseParams)) {
|
198 |
+
$payment->setAdditionalInformation($key, $responseParams[$key]);
|
199 |
+
}
|
200 |
+
}
|
201 |
+
}
|
202 |
+
|
203 |
+
/**
|
204 |
+
* get the checkout section
|
205 |
+
*
|
206 |
+
* @param Mage_Sales_Model_Order $order
|
207 |
+
*/
|
208 |
+
protected function getSection($order)
|
209 |
+
{
|
210 |
+
$section = 'shipping_method';
|
211 |
+
if (false === ($order->getShippingAddress() instanceof Mage_Sales_Model_Order_Address)
|
212 |
+
|| 0 == strlen($order->getShippingAddress()->getPostcode())
|
213 |
+
) {
|
214 |
+
$section = 'billing';
|
215 |
+
}
|
216 |
+
return $section;
|
217 |
+
}
|
218 |
+
|
219 |
+
/**
|
220 |
+
* getter for the checkout session
|
221 |
+
*
|
222 |
+
* @return Mage_Checkout_Model_Session
|
223 |
+
*/
|
224 |
+
protected function getCheckoutSession()
|
225 |
+
{
|
226 |
+
return Mage::getSingleton('checkout/session');
|
227 |
+
}
|
228 |
+
|
229 |
+
/**
|
230 |
+
* @return bool
|
231 |
+
*/
|
232 |
+
public function isDirectSaleEnabled()
|
233 |
+
{
|
234 |
+
return false;
|
235 |
+
}
|
236 |
+
}
|
app/code/community/Expercash/Expercash/Model/Expercashcc.php
ADDED
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
class Expercash_Expercash_Model_Expercashcc extends Expercash_Expercash_Model_Expercash
|
25 |
+
{
|
26 |
+
const PAYMENT_TYPE_CC_BUY = 'cc_buy';
|
27 |
+
const PAYMENT_TYPE_CC_AUTH = 'cc_authorize';
|
28 |
+
const PAYMENT_TYPE_CC_CAPTURE = 'cc_capture';
|
29 |
+
/**
|
30 |
+
* Availability options
|
31 |
+
*/
|
32 |
+
protected $_code = 'expercashcc';
|
33 |
+
protected $_paymentMethod = 'expercashcc';
|
34 |
+
protected $_formBlockType = 'expercash/form_expercash';
|
35 |
+
protected $_infoBlockType = 'expercash/info_expercash';
|
36 |
+
protected $_isGateway = false;
|
37 |
+
protected $_canAuthorize = true;
|
38 |
+
protected $_canRefund = false;
|
39 |
+
protected $_canVoid = false;
|
40 |
+
protected $_canUseInternal = false;
|
41 |
+
protected $_canUseCheckout = true;
|
42 |
+
protected $_canUseForMultishipping = false;
|
43 |
+
|
44 |
+
public function isAvailable($quote = null)
|
45 |
+
{
|
46 |
+
$available = parent::isAvailable($quote);
|
47 |
+
if (!$available) {
|
48 |
+
return false;
|
49 |
+
}
|
50 |
+
if (in_array($quote->getQuoteCurrencyCode(), $this->getCurrenciesArray($quote->getStoreId()))) {
|
51 |
+
return true;
|
52 |
+
} else {
|
53 |
+
return false;
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
57 |
+
public function getCurrenciesArray($storeId = null)
|
58 |
+
{
|
59 |
+
return explode(',', $this->getConfigData('allowed_currency', $storeId));
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Check capture availability
|
64 |
+
*
|
65 |
+
* @return bool
|
66 |
+
*/
|
67 |
+
public function canCapture()
|
68 |
+
{
|
69 |
+
if ($this->getExperCashInfo('expercash_request_type') == self::PAYMENT_TYPE_CC_AUTH) {
|
70 |
+
return parent::canCapture();
|
71 |
+
}
|
72 |
+
return false;
|
73 |
+
}
|
74 |
+
|
75 |
+
/**
|
76 |
+
* capture the amount with transaction id
|
77 |
+
*
|
78 |
+
* @access public
|
79 |
+
* @param string $payment Varien_Object object
|
80 |
+
* @return Mage_Payment_Model_Abstract
|
81 |
+
*/
|
82 |
+
public function capture(Varien_Object $payment, $amount)
|
83 |
+
{
|
84 |
+
Mage::getModel('expercash/api_capture')->capture(
|
85 |
+
$payment,
|
86 |
+
$amount,
|
87 |
+
self::PAYMENT_TYPE_CC_CAPTURE
|
88 |
+
);
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* @return bool
|
93 |
+
*/
|
94 |
+
public function isDirectSaleEnabled()
|
95 |
+
{
|
96 |
+
return $this->getConfigData('paymenttype') == self::PAYMENT_TYPE_CC_BUY;
|
97 |
+
}
|
98 |
+
|
99 |
+
|
100 |
+
}
|
app/code/community/Expercash/Expercash/Model/Expercashelv.php
ADDED
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
class Expercash_Expercash_Model_Expercashelv extends Expercash_Expercash_Model_Expercash
|
24 |
+
{
|
25 |
+
const PAYMENT_TYPE_ELV_BUY = 'elv_buy';
|
26 |
+
const PAYMENT_TYPE_ELV_AUTH = 'elv_authorize';
|
27 |
+
const PAYMENT_TYPE_ELV_CAPTURE = 'elv_capture';
|
28 |
+
/**
|
29 |
+
* Availability options
|
30 |
+
*/
|
31 |
+
protected $_code = 'expercashelv';
|
32 |
+
protected $_paymentMethod = 'expercashelv';
|
33 |
+
protected $_formBlockType = 'expercash/form_expercash';
|
34 |
+
protected $_infoBlockType = 'expercash/info_expercash';
|
35 |
+
protected $_isGateway = true;
|
36 |
+
protected $_canAuthorize = true;
|
37 |
+
protected $_canRefund = false;
|
38 |
+
protected $_canCapturePartial = false;
|
39 |
+
protected $_canVoid = false;
|
40 |
+
protected $_canUseInternal = false;
|
41 |
+
protected $_canUseCheckout = true;
|
42 |
+
protected $_canUseForMultishipping = false;
|
43 |
+
|
44 |
+
public function isAvailable($quote = null)
|
45 |
+
{
|
46 |
+
$available = parent::isAvailable($quote);
|
47 |
+
if (!$available) {
|
48 |
+
return false;
|
49 |
+
}
|
50 |
+
if (in_array($quote->getQuoteCurrencyCode(), $this->getCurrenciesArray($quote->getStoreId()))) {
|
51 |
+
return true;
|
52 |
+
} else {
|
53 |
+
return false;
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
57 |
+
public function getCurrenciesArray($storeId = null)
|
58 |
+
{
|
59 |
+
return explode(',', $this->getConfigData('allowed_currency', $storeId));
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Check capture availability
|
64 |
+
*
|
65 |
+
* @return bool
|
66 |
+
*/
|
67 |
+
public function canCapture()
|
68 |
+
{
|
69 |
+
if ($this->getExperCashInfo('expercash_request_type') == self::PAYMENT_TYPE_ELV_AUTH) {
|
70 |
+
return parent::canCapture();
|
71 |
+
}
|
72 |
+
return false;
|
73 |
+
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* capture the amount with transaction id
|
78 |
+
*
|
79 |
+
* @access public
|
80 |
+
* @param string $payment Varien_Object object
|
81 |
+
* @return Mage_Payment_Model_Abstract
|
82 |
+
*/
|
83 |
+
public function capture(Varien_Object $payment, $amount)
|
84 |
+
{
|
85 |
+
Mage::getModel('expercash/Api_Capture')->capture(
|
86 |
+
$payment,
|
87 |
+
$amount,
|
88 |
+
self::PAYMENT_TYPE_ELV_CAPTURE
|
89 |
+
);
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* @return bool
|
94 |
+
*/
|
95 |
+
public function isDirectSaleEnabled()
|
96 |
+
{
|
97 |
+
return $this->getConfigData('paymenttype') == self::PAYMENT_TYPE_ELV_BUY;
|
98 |
+
}
|
99 |
+
}
|
app/code/community/Expercash/Expercash/Model/Expercashgp.php
ADDED
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
class Expercash_Expercash_Model_Expercashgp extends Expercash_Expercash_Model_Expercash
|
25 |
+
{
|
26 |
+
const PAYMENT_TYPE_GP = 'giropay';
|
27 |
+
/**
|
28 |
+
* Availability options
|
29 |
+
*/
|
30 |
+
protected $_code = 'expercashgp';
|
31 |
+
protected $_paymentMethod = 'expercashgp';
|
32 |
+
protected $_formBlockType = 'expercash/form_expercash';
|
33 |
+
protected $_infoBlockType = 'expercash/info_expercash';
|
34 |
+
protected $_isGateway = false;
|
35 |
+
protected $_canAuthorize = true;
|
36 |
+
protected $_canCapture = false;
|
37 |
+
protected $_canCapturePartial = false;
|
38 |
+
protected $_canRefund = false;
|
39 |
+
protected $_canVoid = false;
|
40 |
+
protected $_canUseInternal = false;
|
41 |
+
protected $_canUseCheckout = true;
|
42 |
+
protected $_canUseForMultishipping = false;
|
43 |
+
|
44 |
+
public function isAvailable($quote = null)
|
45 |
+
{
|
46 |
+
$available = parent::isAvailable($quote);
|
47 |
+
if (!$available) {
|
48 |
+
return false;
|
49 |
+
}
|
50 |
+
|
51 |
+
if (in_array($quote->getQuoteCurrencyCode(), $this->getCurrenciesArray($quote->getStoreId()))) {
|
52 |
+
return true;
|
53 |
+
} else {
|
54 |
+
return false;
|
55 |
+
}
|
56 |
+
}
|
57 |
+
|
58 |
+
public function getCurrenciesArray($storeId = null)
|
59 |
+
{
|
60 |
+
return explode(',', $this->getConfigData('allowed_currency', $storeId));
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Check capture availability
|
65 |
+
*
|
66 |
+
* @return bool
|
67 |
+
*/
|
68 |
+
public function canCapture()
|
69 |
+
{
|
70 |
+
return $this->_canCapture;
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* @return bool
|
75 |
+
*/
|
76 |
+
public function isDirectSaleEnabled()
|
77 |
+
{
|
78 |
+
return $this->getConfigData('paymenttype') == Expercash_Expercash_Model_Expercashgp::PAYMENT_TYPE_GP;
|
79 |
+
}
|
80 |
+
}
|
app/code/community/Expercash/Expercash/Model/Expercashmp.php
ADDED
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
class Expercash_Expercash_Model_Expercashmp extends Expercash_Expercash_Model_Expercash
|
23 |
+
{
|
24 |
+
const PAYMENT_TYPE_MP_BUY = 'masterpass_buy';
|
25 |
+
const PAYMENT_TYPE_MP_AUTH = 'masterpass_authorize';
|
26 |
+
const PAYMENT_TYPE_MP_CAPTURE = 'masterpass_capture';
|
27 |
+
/**
|
28 |
+
* Availability options
|
29 |
+
*/
|
30 |
+
protected $_code = 'expercashmp';
|
31 |
+
protected $_paymentMethod = 'expercashmp';
|
32 |
+
protected $_formBlockType = 'expercash/masterpass_form';
|
33 |
+
protected $_infoBlockType = 'expercash/info_expercash';
|
34 |
+
protected $_isGateway = false;
|
35 |
+
protected $_canAuthorize = true;
|
36 |
+
protected $_canRefund = false;
|
37 |
+
protected $_canVoid = false;
|
38 |
+
protected $_canUseInternal = false;
|
39 |
+
protected $_canUseCheckout = true;
|
40 |
+
protected $_canUseForMultishipping = false;
|
41 |
+
|
42 |
+
public function isAvailable($quote = null)
|
43 |
+
{
|
44 |
+
$available = parent::isAvailable($quote);
|
45 |
+
if (!$available) {
|
46 |
+
return false;
|
47 |
+
}
|
48 |
+
if (in_array($quote->getQuoteCurrencyCode(), $this->getCurrenciesArray($quote->getStoreId()))) {
|
49 |
+
return true;
|
50 |
+
} else {
|
51 |
+
return false;
|
52 |
+
}
|
53 |
+
}
|
54 |
+
|
55 |
+
public function getCurrenciesArray($storeId = null)
|
56 |
+
{
|
57 |
+
return explode(',', $this->getConfigData('allowed_currency', $storeId));
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Check capture availability
|
62 |
+
*
|
63 |
+
* @return bool
|
64 |
+
*/
|
65 |
+
public function canCapture()
|
66 |
+
{
|
67 |
+
if ($this->getExperCashInfo('expercash_request_type') == self::PAYMENT_TYPE_MP_AUTH) {
|
68 |
+
return parent::canCapture();
|
69 |
+
}
|
70 |
+
return false;
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* capture the amount with transaction id
|
75 |
+
*
|
76 |
+
* @access public
|
77 |
+
* @param string $payment Varien_Object object
|
78 |
+
* @return Mage_Payment_Model_Abstract
|
79 |
+
*/
|
80 |
+
public function capture(Varien_Object $payment, $amount)
|
81 |
+
{
|
82 |
+
Mage::getModel('expercash/api_capture')->capture(
|
83 |
+
$payment,
|
84 |
+
$amount,
|
85 |
+
self::PAYMENT_TYPE_MP_CAPTURE
|
86 |
+
);
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* @return bool
|
91 |
+
*/
|
92 |
+
public function isDirectSaleEnabled()
|
93 |
+
{
|
94 |
+
return $this->getConfigData('paymenttype') == self::PAYMENT_TYPE_MP_BUY;
|
95 |
+
}
|
96 |
+
|
97 |
+
|
98 |
+
}
|
app/code/community/Expercash/Expercash/Model/Expercashmpf.php
ADDED
@@ -0,0 +1,233 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
class Expercash_Expercash_Model_Expercashmpf extends Expercash_Expercash_Model_Expercash
|
24 |
+
{
|
25 |
+
const PAYMENT_TYPE_MPF_BUY = 'cc_buy';
|
26 |
+
const PAYMENT_TYPE_MPF_AUTH = 'cc_authorize';
|
27 |
+
const PAYMENT_TYPE_MPF_CAPTURE = 'cc_capture';
|
28 |
+
const CODE = 'expercashmpf';
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Availability options
|
32 |
+
*/
|
33 |
+
protected $_code = self::CODE;
|
34 |
+
protected $_paymentMethod = self::CODE;
|
35 |
+
protected $_formBlockType = 'expercash/masterpass_fullcheckout_cc';
|
36 |
+
protected $_infoBlockType = 'expercash/info_expercash';
|
37 |
+
protected $_isGateway = false;
|
38 |
+
protected $_canAuthorize = true;
|
39 |
+
protected $_canCapture = true;
|
40 |
+
protected $_canRefund = false;
|
41 |
+
protected $_canVoid = false;
|
42 |
+
protected $_canUseInternal = false;
|
43 |
+
protected $_canUseCheckout = true;
|
44 |
+
protected $_canUseForMultishipping = false;
|
45 |
+
|
46 |
+
public function isAvailable($quote = null)
|
47 |
+
{
|
48 |
+
$available = parent::isAvailable($quote);
|
49 |
+
|
50 |
+
if (!$available) {
|
51 |
+
return false;
|
52 |
+
}
|
53 |
+
if (in_array($quote->getQuoteCurrencyCode(), $this->getCurrenciesArray($quote->getStoreId()))) {
|
54 |
+
return true;
|
55 |
+
} else {
|
56 |
+
return false;
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
public function getCurrenciesArray($storeId = null)
|
61 |
+
{
|
62 |
+
return explode(',', $this->getConfigData('allowed_currency', $storeId));
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Map Magento payment action to Expercash payment action.
|
67 |
+
*
|
68 |
+
* @param Varien_Object $payment
|
69 |
+
* @param int $storeId
|
70 |
+
*
|
71 |
+
* @return null|string
|
72 |
+
*/
|
73 |
+
public function getExpercashPaymentType($payment, $storeId)
|
74 |
+
{
|
75 |
+
$configType = $this->getConfigData('payment_action', $storeId);
|
76 |
+
$expercashType = null;
|
77 |
+
|
78 |
+
/* @var $payment Mage_Sales_Model_Order_Payment */
|
79 |
+
if (Mage::app()->getStore()->isAdmin() && $payment->getAuthorizationTransaction()) {
|
80 |
+
// backend invoice creation
|
81 |
+
$expercashType = self::PAYMENT_TYPE_MPF_CAPTURE;
|
82 |
+
} elseif ($configType === Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE) {
|
83 |
+
// frontend authorize action
|
84 |
+
$expercashType = self::PAYMENT_TYPE_MPF_AUTH;
|
85 |
+
} elseif ($configType === Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE_CAPTURE) {
|
86 |
+
// frontend authorize_capture action
|
87 |
+
$expercashType = self::PAYMENT_TYPE_MPF_BUY;
|
88 |
+
}
|
89 |
+
|
90 |
+
return $expercashType;
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* capture the amount with transaction id
|
95 |
+
*
|
96 |
+
* @access public
|
97 |
+
*
|
98 |
+
* @param Varien_Object $payment
|
99 |
+
* @param string $amount
|
100 |
+
*
|
101 |
+
* @return void
|
102 |
+
*/
|
103 |
+
public function capture(Varien_Object $payment, $amount)
|
104 |
+
{
|
105 |
+
$paymentType = $this->getExpercashPaymentType(
|
106 |
+
$payment,
|
107 |
+
$this->getInfoInstance()->getOrder()->getStoreId()
|
108 |
+
);
|
109 |
+
|
110 |
+
try {
|
111 |
+
Mage::getModel('expercash/api_masterpass_capture')->capture($payment, $amount, $paymentType);
|
112 |
+
} catch (Exception $e) {
|
113 |
+
// if its a capture while in frontend i.e. if payment method is configured as directsale
|
114 |
+
// we have to remove payment method from quote in error case
|
115 |
+
if (false === Mage::app()->getStore()->isAdmin()) {
|
116 |
+
$onepage = Mage::getSingleton('checkout/type_onepage');
|
117 |
+
$quote = $onepage->getQuote();
|
118 |
+
$this->getPaymentHelper()->removePaymentFromQuote($quote);
|
119 |
+
$this->getDataHelper()->log($e->getMessage());
|
120 |
+
$onepage->getCheckout()->setGotoSection('payment');
|
121 |
+
$onepage->getCheckout()->setUpdateSection('payment-method');
|
122 |
+
}
|
123 |
+
|
124 |
+
Mage::throwException(sprintf('%s', $this->getDataHelper()->__(self::PAYMENT_FAILED_MESSAGE)));
|
125 |
+
}
|
126 |
+
}
|
127 |
+
|
128 |
+
public function authorize(Varien_Object $payment, $amount)
|
129 |
+
{
|
130 |
+
$order = $this->getInfoInstance()->getOrder();
|
131 |
+
try {
|
132 |
+
$requestParams = Mage::getModel('expercash/request_masterpass_epi')->getPlaceOrderParams(
|
133 |
+
$order,
|
134 |
+
self::PAYMENT_TYPE_MPF_AUTH
|
135 |
+
);
|
136 |
+
$epiClient = Mage::getModel('expercash/api_masterpass_epi');
|
137 |
+
$response = $epiClient->doEpiRequest($requestParams);
|
138 |
+
$checkOrderHandling = Mage::helper('expercash/masterpass')->orderAndTransactionHandling($response, $order);
|
139 |
+
|
140 |
+
if (!$checkOrderHandling) {
|
141 |
+
Mage::throwException('Error occurred while trying to authorize.');
|
142 |
+
}
|
143 |
+
|
144 |
+
} catch (Exception $e) {
|
145 |
+
// remove payment method from quote and save quote, so customer can choose another payment method
|
146 |
+
// otherwise he is stuck in checkout in error case
|
147 |
+
$onepage = Mage::getSingleton('checkout/type_onepage');
|
148 |
+
$this->getPaymentHelper()->removePaymentFromQuote($order->getQuote());
|
149 |
+
$this->getDataHelper()->log($e->getMessage());
|
150 |
+
$onepage->getCheckout()->setGotoSection('payment');
|
151 |
+
$onepage->getCheckout()->setUpdateSection('payment-method');
|
152 |
+
|
153 |
+
Mage::throwException(sprintf('%s', $this->getDataHelper()->__(self::PAYMENT_FAILED_MESSAGE)));
|
154 |
+
}
|
155 |
+
}
|
156 |
+
|
157 |
+
/***
|
158 |
+
* getter for expercash payment helper
|
159 |
+
*
|
160 |
+
* @return Expercash_Expercash_Helper_Payment
|
161 |
+
*/
|
162 |
+
protected function getPaymentHelper()
|
163 |
+
{
|
164 |
+
return Mage::helper('expercash/payment');
|
165 |
+
}
|
166 |
+
|
167 |
+
/**
|
168 |
+
* use parent validate and add custom error message to session
|
169 |
+
*
|
170 |
+
* @overrides \Mage_Payment_Model_Method_Abstract::validate
|
171 |
+
* @return Mage_Payment_Model_Abstract|void
|
172 |
+
*/
|
173 |
+
public function validate()
|
174 |
+
{
|
175 |
+
try {
|
176 |
+
parent::validate();
|
177 |
+
} catch (Exception $e) {
|
178 |
+
|
179 |
+
// incase of error remove payment method from quote
|
180 |
+
$this->getPaymentHelper()->removePaymentFromQuote($this->getInfoInstance()->getQuote());
|
181 |
+
Mage::getSingleton('core/session')->addError(
|
182 |
+
Mage::helper('expercash/data')->__(
|
183 |
+
'Masterpass FullCheckout is not allowed for billing country. Please choose another payment method.'
|
184 |
+
)
|
185 |
+
);
|
186 |
+
}
|
187 |
+
|
188 |
+
return $this;
|
189 |
+
}
|
190 |
+
|
191 |
+
/**
|
192 |
+
* Get redirect URL
|
193 |
+
*
|
194 |
+
* @return Mage_Payment_Helper_Data
|
195 |
+
*/
|
196 |
+
public function getOrderPlaceRedirectUrl()
|
197 |
+
{
|
198 |
+
return null;
|
199 |
+
}
|
200 |
+
|
201 |
+
/**
|
202 |
+
*
|
203 |
+
*
|
204 |
+
* @return bool
|
205 |
+
*/
|
206 |
+
public function isDirectSaleEnabled()
|
207 |
+
{
|
208 |
+
return $this->getConfigData('payment_action') == Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE_CAPTURE;
|
209 |
+
}
|
210 |
+
|
211 |
+
/**
|
212 |
+
* set additional data on the payment
|
213 |
+
*
|
214 |
+
* @param Mage_Payment_Model_Info $payment
|
215 |
+
* @param array $responseParams
|
216 |
+
*/
|
217 |
+
public function setAdditionalPaymentInfo(Mage_Payment_Model_Info $payment, $responseParams)
|
218 |
+
{
|
219 |
+
$params = array(
|
220 |
+
"currency" => $payment->getQuote()->getQuoteCurrencyCode(),
|
221 |
+
"paymentMethod" => $payment->getMethodInstance()->getCode(),
|
222 |
+
"GuTID" => $responseParams['GuTID'],
|
223 |
+
"maskedPan" => $responseParams['masked_pan'],
|
224 |
+
"validThru" => $responseParams['valid_thru'],
|
225 |
+
"owner" => $responseParams['owner'],
|
226 |
+
"cardScheme" => $responseParams['card_scheme'],
|
227 |
+
);
|
228 |
+
|
229 |
+
foreach ($params as $key => $value) {
|
230 |
+
$payment->setAdditionalInformation($key, $value);
|
231 |
+
}
|
232 |
+
}
|
233 |
+
}
|
app/code/community/Expercash/Expercash/Model/Expercashpc.php
ADDED
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
class Expercash_Expercash_Model_Expercashpc extends Expercash_Expercash_Model_Expercash
|
25 |
+
{
|
26 |
+
|
27 |
+
/**
|
28 |
+
* payment type name
|
29 |
+
*/
|
30 |
+
const PAYMENT_TYPE_PC = 'barzahlen';
|
31 |
+
|
32 |
+
const PAYMENT_METHOD_NAME = 'expercashpc';
|
33 |
+
|
34 |
+
const ALLOWED_MAX_AMOUNT = 1000;
|
35 |
+
|
36 |
+
const BARZAHLEN_STATUS_PAID = 'PAID';
|
37 |
+
|
38 |
+
const BARZAHLEN_STATUS_OPEN = 'OPEN';
|
39 |
+
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Availability options
|
43 |
+
*/
|
44 |
+
protected $_code = 'expercashpc';
|
45 |
+
protected $_canCapture = false;
|
46 |
+
protected $_canCapturePartial = false;
|
47 |
+
|
48 |
+
|
49 |
+
/**
|
50 |
+
* overwrite isAvailable and add checks for currency code, country code and allowed max amount
|
51 |
+
*
|
52 |
+
* @param Mage_Sales_Model_Quote $quote
|
53 |
+
*
|
54 |
+
* @return bool
|
55 |
+
*/
|
56 |
+
public function isAvailable($quote = null)
|
57 |
+
{
|
58 |
+
$result = false;
|
59 |
+
$available = parent::isAvailable($quote);
|
60 |
+
|
61 |
+
if ($available
|
62 |
+
&& $quote instanceof Mage_Sales_Model_Quote
|
63 |
+
&& $quote->getQuoteCurrencyCode() === parent::getConfigData('allowed_currency')
|
64 |
+
&& $quote->getBillingAddress()->getCountryId() === parent::getConfigData('specificcountry')
|
65 |
+
&& $quote->getGrandTotal() < self::ALLOWED_MAX_AMOUNT
|
66 |
+
) {
|
67 |
+
$result = true;
|
68 |
+
}
|
69 |
+
return $result;
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* return the paymenttype or the other config values based on field value
|
74 |
+
*
|
75 |
+
* @param string $field
|
76 |
+
* @param int $storeId
|
77 |
+
*
|
78 |
+
* @return string
|
79 |
+
*/
|
80 |
+
public function getConfigData($field, $storeId = null)
|
81 |
+
{
|
82 |
+
if ($field == 'paymenttype') {
|
83 |
+
return self::PAYMENT_TYPE_PC;
|
84 |
+
}
|
85 |
+
return parent::getConfigData($field, $storeId);
|
86 |
+
}
|
87 |
+
|
88 |
+
}
|
app/code/community/Expercash/Expercash/Model/Expercashpp.php
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
class Expercash_Expercash_Model_Expercashpp extends Expercash_Expercash_Model_Expercash
|
25 |
+
{
|
26 |
+
const PAYMENT_TYPE_PP = 'PayPal';
|
27 |
+
/**
|
28 |
+
* Availability options
|
29 |
+
*/
|
30 |
+
protected $_code = 'expercashpp';
|
31 |
+
protected $_paymentMethod = 'expercashpp';
|
32 |
+
protected $_formBlockType = 'expercash/form_expercash';
|
33 |
+
protected $_infoBlockType = 'expercash/info_expercash';
|
34 |
+
protected $_isGateway = false;
|
35 |
+
protected $_canAuthorize = true;
|
36 |
+
protected $_canCapture = true;
|
37 |
+
protected $_canCapturePartial = false;
|
38 |
+
protected $_canRefund = false;
|
39 |
+
protected $_canVoid = false;
|
40 |
+
protected $_canUseInternal = false;
|
41 |
+
protected $_canUseCheckout = true;
|
42 |
+
protected $_canUseForMultishipping = false;
|
43 |
+
|
44 |
+
public function isAvailable($quote = null)
|
45 |
+
{
|
46 |
+
$available = parent::isAvailable($quote);
|
47 |
+
if (!$available) {
|
48 |
+
return false;
|
49 |
+
}
|
50 |
+
if (in_array($quote->getQuoteCurrencyCode(), $this->getCurrenciesArray($quote->getStoreId()))) {
|
51 |
+
return true;
|
52 |
+
} else {
|
53 |
+
return false;
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
57 |
+
public function getCurrenciesArray($storeId = null)
|
58 |
+
{
|
59 |
+
return explode(
|
60 |
+
',', $this->getConfigData(
|
61 |
+
'allowed_currency', $storeId
|
62 |
+
)
|
63 |
+
);
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Check capture availability
|
68 |
+
*
|
69 |
+
* @return bool
|
70 |
+
*/
|
71 |
+
public function canCapture()
|
72 |
+
{
|
73 |
+
return false;
|
74 |
+
}
|
75 |
+
|
76 |
+
|
77 |
+
}
|
app/code/community/Expercash/Expercash/Model/Expercashso.php
ADDED
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
class Expercash_Expercash_Model_Expercashso extends Expercash_Expercash_Model_Expercash
|
25 |
+
{
|
26 |
+
const PAYMENT_TYPE_SO = 'sofortueberweisung';
|
27 |
+
/**
|
28 |
+
* Availability options
|
29 |
+
*/
|
30 |
+
protected $_code = 'expercashso';
|
31 |
+
protected $_paymentMethod = 'expercashso';
|
32 |
+
protected $_formBlockType = 'expercash/form_expercash';
|
33 |
+
protected $_infoBlockType = 'expercash/info_expercash';
|
34 |
+
protected $_isGateway = false;
|
35 |
+
protected $_canAuthorize = true;
|
36 |
+
protected $_canCapture = false;
|
37 |
+
protected $_canCapturePartial = false;
|
38 |
+
protected $_canRefund = false;
|
39 |
+
protected $_canVoid = false;
|
40 |
+
protected $_canUseInternal = false;
|
41 |
+
protected $_canUseCheckout = true;
|
42 |
+
protected $_canUseForMultishipping = false;
|
43 |
+
|
44 |
+
public function isAvailable($quote = null)
|
45 |
+
{
|
46 |
+
$available = parent::isAvailable($quote);
|
47 |
+
if (!$available)
|
48 |
+
return false;
|
49 |
+
|
50 |
+
if (in_array($quote->getQuoteCurrencyCode(), $this->getCurrenciesArray($quote->getStoreId())))
|
51 |
+
return true;
|
52 |
+
else
|
53 |
+
return false;
|
54 |
+
}
|
55 |
+
|
56 |
+
public function getCurrenciesArray($storeId = null)
|
57 |
+
{
|
58 |
+
return explode(
|
59 |
+
',', $this->getConfigData('allowed_currency', $storeId)
|
60 |
+
);
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Check capture availability
|
65 |
+
*
|
66 |
+
* @return bool
|
67 |
+
*/
|
68 |
+
public function canCapture()
|
69 |
+
{
|
70 |
+
return $this->_canCapture;
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* @return bool
|
75 |
+
*/
|
76 |
+
public function isDirectSaleEnabled()
|
77 |
+
{
|
78 |
+
return $this->getConfigData('paymenttype') == Expercash_Expercash_Model_Expercashso::PAYMENT_TYPE_SO;
|
79 |
+
}
|
80 |
+
}
|
app/code/community/Expercash/Expercash/Model/Masterpass/Config.php
ADDED
@@ -0,0 +1,204 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
class Expercash_Expercash_Model_Masterpass_Config extends Expercash_Expercash_Model_Config
|
24 |
+
{
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Start fullcheckout action
|
28 |
+
*
|
29 |
+
* @var string
|
30 |
+
*/
|
31 |
+
protected $_startAction = 'expercash/fullcheckout/start';
|
32 |
+
|
33 |
+
/**
|
34 |
+
* store id
|
35 |
+
*
|
36 |
+
* @var null
|
37 |
+
*/
|
38 |
+
protected $storeId = null;
|
39 |
+
|
40 |
+
|
41 |
+
/**
|
42 |
+
* set store id for config object in constructor
|
43 |
+
*/
|
44 |
+
public function __construct()
|
45 |
+
{
|
46 |
+
$this->storeId = Mage::app()->getStore()->getId();
|
47 |
+
}
|
48 |
+
|
49 |
+
|
50 |
+
/**
|
51 |
+
* get route for masterpass full checkout
|
52 |
+
*
|
53 |
+
* @return string
|
54 |
+
*/
|
55 |
+
protected function getMasterPassFullCheckoutStartAction()
|
56 |
+
{
|
57 |
+
return $this->_startAction;
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* show master Full Checkout Button in Mini Cart
|
62 |
+
*
|
63 |
+
* @return bool
|
64 |
+
*/
|
65 |
+
public function showButtonInMiniCart()
|
66 |
+
{
|
67 |
+
return Mage::getStoreConfigFlag('payment/expercashmpf/show_button_in_mini_cart', $this->storeId);
|
68 |
+
}
|
69 |
+
|
70 |
+
|
71 |
+
/**
|
72 |
+
* show masterpass full checkout button in cart
|
73 |
+
*
|
74 |
+
* @return bool
|
75 |
+
*/
|
76 |
+
public function showButtonInCart()
|
77 |
+
{
|
78 |
+
return Mage::getStoreConfigFlag('payment/expercashmpf/show_button_in_cart', $this->storeId);
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* show masterpass learn more link (checkout method)
|
83 |
+
*
|
84 |
+
* @return bool
|
85 |
+
*/
|
86 |
+
public function showMasterPassLearnMoreLink()
|
87 |
+
{
|
88 |
+
return Mage::getStoreConfigFlag('payment/expercashmp/show_learn_more_link', $this->storeId);
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* show masterpass learn more link ( full checkout method)
|
93 |
+
*
|
94 |
+
* @return bool
|
95 |
+
*/
|
96 |
+
public function showMasterPassFullCheckoutLearnMoreLink()
|
97 |
+
{
|
98 |
+
return Mage::getStoreConfigFlag('payment/expercashmpf/show_learn_more_link', $this->storeId);
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* get image url for masterpass full checkout image
|
103 |
+
*
|
104 |
+
* @return string
|
105 |
+
*/
|
106 |
+
public function getFullCheckoutImageUrl()
|
107 |
+
{
|
108 |
+
return Mage::getDesign()->getSkinUrl('images/expercash/mp_buy_with_button.png');
|
109 |
+
}
|
110 |
+
|
111 |
+
/**
|
112 |
+
* get masterpass full checkout url (route)
|
113 |
+
*
|
114 |
+
* @return string
|
115 |
+
*/
|
116 |
+
public function getMasterpassFullCheckoutUrl()
|
117 |
+
{
|
118 |
+
return Mage::getUrl($this->getMasterPassFullCheckoutStartAction());
|
119 |
+
}
|
120 |
+
|
121 |
+
|
122 |
+
/**
|
123 |
+
* show masterpass logo in checkout
|
124 |
+
*
|
125 |
+
* @return bool
|
126 |
+
*/
|
127 |
+
public function showMasterpassLogoInCheckout()
|
128 |
+
{
|
129 |
+
return Mage::getStoreConfigFlag('payment/expercashmp/show_logo', $this->storeId);
|
130 |
+
}
|
131 |
+
/**
|
132 |
+
* get masterpass learn more basis url from config
|
133 |
+
*
|
134 |
+
* @return string
|
135 |
+
*/
|
136 |
+
public function getMasterLearnMoreBaseUrl()
|
137 |
+
{
|
138 |
+
return Mage::getStoreConfig('payment/expercashmp/mp_learnmore_url');
|
139 |
+
}
|
140 |
+
|
141 |
+
|
142 |
+
/**
|
143 |
+
* get logo for masterpass checkout payment method
|
144 |
+
*
|
145 |
+
* @return string
|
146 |
+
*/
|
147 |
+
public function getMasterPassCheckoutLogo()
|
148 |
+
{
|
149 |
+
return Mage::getDesign()->getSkinUrl('images/expercash/mp_ident.png');
|
150 |
+
}
|
151 |
+
|
152 |
+
/**
|
153 |
+
* Get Masterpass Learn More Url based on locale.
|
154 |
+
* Will use Magento default locale (en_US) if parameter is null
|
155 |
+
*
|
156 |
+
* @param Mage_Core_Model_Locale $locale
|
157 |
+
*
|
158 |
+
* @return string
|
159 |
+
*/
|
160 |
+
public function getMasterpassLearnMoreUrl(Mage_Core_Model_Locale $locale = null)
|
161 |
+
{
|
162 |
+
if (null === $locale) {
|
163 |
+
$locale = Mage::getModel('core/locale')->getLocale();
|
164 |
+
}
|
165 |
+
|
166 |
+
$shouldEmulate = (null !== $this->storeId) && (Mage::app()->getStore()->getId() != $this->storeId);
|
167 |
+
if ($shouldEmulate) {
|
168 |
+
$locale->emulate($this->storeId);
|
169 |
+
}
|
170 |
+
$language = $locale->getLocale()->getLanguage();
|
171 |
+
$countryCode = $locale->getLocale()->getRegion();
|
172 |
+
if ($shouldEmulate) {
|
173 |
+
$locale->revert();
|
174 |
+
}
|
175 |
+
|
176 |
+
return $this->getMasterLearnMoreBaseUrl() . DS . strtolower($language) . DS . $countryCode;
|
177 |
+
}
|
178 |
+
|
179 |
+
/**
|
180 |
+
* get masterpass fullcheckout text
|
181 |
+
*
|
182 |
+
* @return string
|
183 |
+
*/
|
184 |
+
public function getCheckoutText()
|
185 |
+
{
|
186 |
+
return Mage::getStoreConfig('payment/expercashmpf/checkout_text');
|
187 |
+
}
|
188 |
+
|
189 |
+
/**
|
190 |
+
* getter for show checkout text
|
191 |
+
*
|
192 |
+
* @return bool
|
193 |
+
*/
|
194 |
+
public function isShowCheckoutTextEnabled()
|
195 |
+
{
|
196 |
+
return Mage::getStoreConfigFlag('payment/expercashmpf/show_checkout_text');
|
197 |
+
}
|
198 |
+
|
199 |
+
public function isShowCCDataInCheckoutEnabled()
|
200 |
+
{
|
201 |
+
return Mage::getStoreConfigFlag('payment/expercashmpf/show_creditcard_data_in_checkout');
|
202 |
+
}
|
203 |
+
|
204 |
+
}
|
app/code/community/Expercash/Expercash/Model/Observer.php
ADDED
@@ -0,0 +1,178 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
class Expercash_Expercash_Model_Observer
|
25 |
+
{
|
26 |
+
|
27 |
+
/**
|
28 |
+
* set step data for masterpass fullcheckout
|
29 |
+
*
|
30 |
+
* @param Varien_Event_Observer $observer
|
31 |
+
*/
|
32 |
+
public function setStepData(Varien_Event_Observer $observer)
|
33 |
+
{
|
34 |
+
$checkout = Mage::getModel('checkout/session');
|
35 |
+
|
36 |
+
if (!$checkout->getQuote()->getPayment()->getMethod()) {
|
37 |
+
return;
|
38 |
+
}
|
39 |
+
|
40 |
+
$paymentMethod = $checkout->getQuote()->getPayment()->getMethodInstance();
|
41 |
+
|
42 |
+
|
43 |
+
if ($paymentMethod instanceof Expercash_Expercash_Model_Expercashmpf) {
|
44 |
+
$checkout
|
45 |
+
->setStepData('login', 'allow', true)
|
46 |
+
->setStepData('billing', 'allow', true)
|
47 |
+
->setStepData('billing', 'complete', true)
|
48 |
+
->setStepData('shipping', 'allow', true)
|
49 |
+
->setStepData('shipping', 'complete', true);
|
50 |
+
}
|
51 |
+
}
|
52 |
+
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Disable MasterPass Full Checkout in case it was not already set via API
|
56 |
+
* calls. Disable all other payment methods in case MasterPass Full Checkout
|
57 |
+
* was already selected via API calls.
|
58 |
+
*
|
59 |
+
* @see Expercash_Expercash_Helper_Masterpass::setPaymentInfoToQuote()
|
60 |
+
*
|
61 |
+
* @param Varien_Event_Observer $observer
|
62 |
+
*/
|
63 |
+
public function setPaymentAvailable(Varien_Event_Observer $observer)
|
64 |
+
{
|
65 |
+
$quote = $observer->getQuote();
|
66 |
+
$checkResult = $observer->getResult();
|
67 |
+
$checkoutPaymentMethod = $observer->getMethodInstance();
|
68 |
+
|
69 |
+
if (!$quote instanceof Mage_Sales_Model_Quote) {
|
70 |
+
return;
|
71 |
+
}
|
72 |
+
|
73 |
+
if (!$checkResult->isAvailable) {
|
74 |
+
return;
|
75 |
+
}
|
76 |
+
|
77 |
+
$quotePaymentMethod = $observer->getQuote()->getPayment()->getMethod();
|
78 |
+
$mpfCode = Mage::getModel('expercash/expercashmpf')->getCode();
|
79 |
+
|
80 |
+
// Full checkout should not be available if it was not set yet.
|
81 |
+
if (($checkoutPaymentMethod instanceof Expercash_Expercash_Model_Expercashmpf)
|
82 |
+
&& ($quotePaymentMethod !== $mpfCode)
|
83 |
+
) {
|
84 |
+
$checkResult->isAvailable = false;
|
85 |
+
}
|
86 |
+
|
87 |
+
// Other payment methods should not be available if Full Checkout is already set.
|
88 |
+
if ((!$checkoutPaymentMethod instanceof Expercash_Expercash_Model_Expercashmpf)
|
89 |
+
&& ($quotePaymentMethod === Mage::getModel('expercash/expercashmpf')->getCode())
|
90 |
+
) {
|
91 |
+
$checkResult->isAvailable = false;
|
92 |
+
}
|
93 |
+
}
|
94 |
+
|
95 |
+
/***
|
96 |
+
*
|
97 |
+
* Validate Masterpass session before place order process starts.
|
98 |
+
* Validations fails if session lifetime is exceed or customer changed billing address.
|
99 |
+
*
|
100 |
+
* @event sales_order_place_before
|
101 |
+
* @param Varien_Event_Observer $observer
|
102 |
+
* @return $this
|
103 |
+
*/
|
104 |
+
public function validateMasterpassSession(Varien_Event_Observer $observer)
|
105 |
+
{
|
106 |
+
/** @var $quote Mage_Sales_Model_Quote */
|
107 |
+
$quote = Mage::getModel('checkout/session')->getQuote();
|
108 |
+
$methodInstance = $quote->getPayment()->getMethodInstance();
|
109 |
+
|
110 |
+
if ($methodInstance instanceof Expercash_Expercash_Model_Expercashmpf) {
|
111 |
+
|
112 |
+
try {
|
113 |
+
|
114 |
+
Mage::helper('expercash/masterpass')->validMasterpassSession($quote);
|
115 |
+
|
116 |
+
} catch (Exception $e) {
|
117 |
+
Mage::helper('expercash/masterpass')->clearMasterpassSessionData();
|
118 |
+
// clear payment method
|
119 |
+
$this->getPaymentHelper()->removePaymentFromQuote($quote);
|
120 |
+
$this->getOnepage()->getCheckout()->setGotoSection('login');
|
121 |
+
Mage::throwException(
|
122 |
+
Mage::helper('expercash/data')->__(
|
123 |
+
'Session timed out or session data invalid. ' .
|
124 |
+
'Either checkout with Masterpass Full Checkout again or use another payment method.'
|
125 |
+
)
|
126 |
+
);
|
127 |
+
}
|
128 |
+
}
|
129 |
+
|
130 |
+
return $this;
|
131 |
+
}
|
132 |
+
|
133 |
+
/**
|
134 |
+
* Invalidate masterpass session and remove payment method from quote
|
135 |
+
* if payment method is masterpass fullcheckout and customer goes to cart
|
136 |
+
* after he already was in checkout process
|
137 |
+
*
|
138 |
+
* @event checkout_cart_save_after
|
139 |
+
* @param Varien_Event_Observer $observer
|
140 |
+
*
|
141 |
+
* @return $this
|
142 |
+
*/
|
143 |
+
public function invalidateMasterpassSession(Varien_Event_Observer $observer)
|
144 |
+
{
|
145 |
+
$quote = $observer->getCart()->getQuote();
|
146 |
+
$paymentMethod = $quote->getPayment()->getMethod();
|
147 |
+
|
148 |
+
if ($paymentMethod === Expercash_Expercash_Model_Expercashmpf::CODE) {
|
149 |
+
// clear payment method
|
150 |
+
$this->getPaymentHelper()->removePaymentFromQuote($quote);
|
151 |
+
Mage::helper('expercash/masterpass')->clearMasterpassSessionData();
|
152 |
+
|
153 |
+
}
|
154 |
+
|
155 |
+
return $this;
|
156 |
+
}
|
157 |
+
|
158 |
+
|
159 |
+
/***
|
160 |
+
* getter for expercash payment helper
|
161 |
+
*
|
162 |
+
* @return Expercash_Expercash_Helper_Payment
|
163 |
+
*/
|
164 |
+
protected function getPaymentHelper()
|
165 |
+
{
|
166 |
+
return Mage::helper('expercash/payment');
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* Get one page checkout model
|
171 |
+
*
|
172 |
+
* @return Mage_Checkout_Model_Type_Onepage
|
173 |
+
*/
|
174 |
+
protected function getOnepage()
|
175 |
+
{
|
176 |
+
return Mage::getSingleton('checkout/type_onepage');
|
177 |
+
}
|
178 |
+
}
|
app/code/community/Expercash/Expercash/Model/Request/Iframe.php
ADDED
@@ -0,0 +1,171 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
class Expercash_Expercash_Model_Request_Iframe
|
24 |
+
{
|
25 |
+
|
26 |
+
protected $order = null;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* get the params for the token
|
30 |
+
*
|
31 |
+
* @param Mage_Sales_Model_Order $order
|
32 |
+
*
|
33 |
+
* @return array
|
34 |
+
*/
|
35 |
+
public function getIframeParams(Mage_Sales_Model_Order $order)
|
36 |
+
{
|
37 |
+
$iFrameParams = array(
|
38 |
+
'preparedSession' => $this->getTokenSessionId(),
|
39 |
+
'sessionKey' => $this->buildSessionKeyHash($order)
|
40 |
+
);
|
41 |
+
return $iFrameParams;
|
42 |
+
}
|
43 |
+
|
44 |
+
/**
|
45 |
+
* build the hash for the sessionKeyParam
|
46 |
+
*
|
47 |
+
* @param Mage_Sales_Model_Order $order
|
48 |
+
*
|
49 |
+
* @return string
|
50 |
+
*/
|
51 |
+
public function buildSessionKeyHash(Mage_Sales_Model_Order $order)
|
52 |
+
{
|
53 |
+
$sessionKeyHash = sha1(
|
54 |
+
$this->getTokenSessionId()
|
55 |
+
. $this->getJobId($order)
|
56 |
+
. $this->getConfig()->getAuthorizationkey($order->getStoreId())
|
57 |
+
);
|
58 |
+
return $sessionKeyHash;
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* get the expercash job id which is the order increment id
|
63 |
+
*
|
64 |
+
* @param Mage_Sales_Model_Order $order
|
65 |
+
*
|
66 |
+
* @return string
|
67 |
+
*/
|
68 |
+
protected function getJobId(Mage_Sales_Model_Order $order)
|
69 |
+
{
|
70 |
+
return $order->getIncrementId();
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* return the saved token session id
|
75 |
+
*
|
76 |
+
* @return string
|
77 |
+
*/
|
78 |
+
protected function getTokenSessionId()
|
79 |
+
{
|
80 |
+
return $this->getCheckoutSession()->getData(Expercash_Expercash_Model_Config::TOKEN_REGISTRY_KEY);
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* getter for config model
|
85 |
+
*
|
86 |
+
* @return Expercash_Expercash_Model_Config
|
87 |
+
*/
|
88 |
+
protected function getConfig()
|
89 |
+
{
|
90 |
+
return Mage::getModel('expercash/config');
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* get the order from checkout
|
95 |
+
*
|
96 |
+
* @return Mage_Sales_Model_Order
|
97 |
+
*/
|
98 |
+
public function getOrder()
|
99 |
+
{
|
100 |
+
$session = $this->getCheckoutSession();
|
101 |
+
if (null == $this->order) {
|
102 |
+
$this->order = Mage::getModel('sales/order')->load($session->getLastOrderId());
|
103 |
+
}
|
104 |
+
return $this->order;
|
105 |
+
}
|
106 |
+
|
107 |
+
/**
|
108 |
+
* get store id from order
|
109 |
+
*
|
110 |
+
* @return string
|
111 |
+
*/
|
112 |
+
protected function getStoreId()
|
113 |
+
{
|
114 |
+
return $this->getOrder()->getStoreId();
|
115 |
+
}
|
116 |
+
|
117 |
+
/**
|
118 |
+
* get the checkout session
|
119 |
+
*
|
120 |
+
* @return Mage_Checkout_Model_Session
|
121 |
+
*/
|
122 |
+
protected function getCheckoutSession()
|
123 |
+
{
|
124 |
+
return Mage::getSingleton('checkout/session');
|
125 |
+
}
|
126 |
+
|
127 |
+
/**
|
128 |
+
* set the order and quote data to the checkout session
|
129 |
+
*
|
130 |
+
* @param $paymentObject
|
131 |
+
*/
|
132 |
+
public function setOrderDataToSession()
|
133 |
+
{
|
134 |
+
$paymentObject = $this->getOrder()->getPayment()->getMethodInstance();
|
135 |
+
$session = $this->getCheckoutSession();
|
136 |
+
$session->setExpercashOrderId($paymentObject->createExperCashOrderId());
|
137 |
+
$session->setExpercashRealOrderId($session->getLastRealOrderId());
|
138 |
+
$session->setExpercashQuoteId($session->getQuoteId());
|
139 |
+
}
|
140 |
+
|
141 |
+
/**
|
142 |
+
* return the generated iframe url and unset the session data
|
143 |
+
*
|
144 |
+
* @return string
|
145 |
+
*/
|
146 |
+
public function getIframeUrl()
|
147 |
+
{
|
148 |
+
$iframeParams = $this->getIframeParams($this->getOrder());
|
149 |
+
$iframeUrl = $this->getDataHelper()->addRequestParam($this->getConfig()->getIframeUrl(), $iframeParams);
|
150 |
+
$this->getCheckoutSession()->unsetData(Expercash_Expercash_Model_Config::TOKEN_REGISTRY_KEY);
|
151 |
+
|
152 |
+
return $iframeUrl;
|
153 |
+
}
|
154 |
+
|
155 |
+
/**
|
156 |
+
* get the mage core url helper
|
157 |
+
*
|
158 |
+
* @return Mage_Core_Helper_Url
|
159 |
+
*/
|
160 |
+
protected function getCoreUrlHelper()
|
161 |
+
{
|
162 |
+
return Mage::helper('core/url');
|
163 |
+
}
|
164 |
+
|
165 |
+
protected function getDataHelper()
|
166 |
+
{
|
167 |
+
return Mage::helper('expercash/data');
|
168 |
+
}
|
169 |
+
|
170 |
+
|
171 |
+
}
|
app/code/community/Expercash/Expercash/Model/Request/Masterpass/Epi.php
ADDED
@@ -0,0 +1,124 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
class Expercash_Expercash_Model_Request_Masterpass_Epi
|
25 |
+
{
|
26 |
+
const MASTERPASS_ACTION = 'masterpass';
|
27 |
+
|
28 |
+
/**
|
29 |
+
* default locale string
|
30 |
+
*/
|
31 |
+
const DEFAULT_LOCALE = 'en';
|
32 |
+
|
33 |
+
/**
|
34 |
+
* the locale codes that are supported by expercash
|
35 |
+
*
|
36 |
+
* @var array
|
37 |
+
*/
|
38 |
+
protected $_supportedLocales = array('en', 'de', 'fr', 'es', 'it', 'du');
|
39 |
+
|
40 |
+
/**
|
41 |
+
* @param Mage_Sales_Model_Order $order
|
42 |
+
*
|
43 |
+
* @return array
|
44 |
+
*/
|
45 |
+
public function getEpiParams(Mage_Sales_Model_Quote $quote)
|
46 |
+
{
|
47 |
+
$config = $this->getConfig();
|
48 |
+
$storeId = $quote->getStoreId();
|
49 |
+
|
50 |
+
$params = Array(
|
51 |
+
'pid' => $config->getProjectId($storeId),
|
52 |
+
'pkey' => $config->getGatewayKey($storeId),
|
53 |
+
'action' => self::MASTERPASS_ACTION,
|
54 |
+
'amount' => $this->calcCentAmount($quote->getGrandTotal()),
|
55 |
+
'currency' => $quote->getQuoteCurrencyCode(),
|
56 |
+
'cref' => $quote->getReservedOrderId(),
|
57 |
+
'bc_ref' => $quote->getReservedOrderId(),
|
58 |
+
'return_url' => Mage::getUrl('expercash/fullcheckout/success', array('_secure' => true)),
|
59 |
+
'notify_url' => Mage::getUrl('expercash/fullcheckout/notify', array('_secure' => true)),
|
60 |
+
'error_url' => Mage::getUrl('expercash/fullcheckout/error', array('_secure' => true)),
|
61 |
+
'shopEnvironment' => $this->getConfig()->getShopEnvironmentParams(),
|
62 |
+
);
|
63 |
+
|
64 |
+
return $params;
|
65 |
+
}
|
66 |
+
|
67 |
+
public function getPlaceOrderParams(Mage_Sales_Model_Order $order, $captureType)
|
68 |
+
{
|
69 |
+
$config = $this->getConfig();
|
70 |
+
$storeId = $order->getStoreId();
|
71 |
+
|
72 |
+
$params = Array(
|
73 |
+
'pid' => $config->getProjectId($storeId),
|
74 |
+
'pkey' => $config->getGatewayKey($storeId),
|
75 |
+
'action' => $captureType,
|
76 |
+
'reference' => Mage::helper('expercash/payment')->getPaymentReferenceId($order->getPayment()),
|
77 |
+
'amount' => $this->calcCentAmount($order->getGrandTotal()),
|
78 |
+
'currency' => $order->getOrderCurrencyCode(),
|
79 |
+
'cref' => $order->getIncrementId(),
|
80 |
+
'bc_ref' => $order->getIncrementId(),
|
81 |
+
'cip' => $order->getRemoteIp() ? $order->getRemoteIp() : '10.10.10.10',
|
82 |
+
'cid' => $order->getCustomerId() ? $order->getCustomerId() : 'Guest',
|
83 |
+
'shopEnvironment' => $this->getConfig()->getShopEnvironmentParams(),
|
84 |
+
);
|
85 |
+
|
86 |
+
return $params;
|
87 |
+
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* get locale
|
92 |
+
*
|
93 |
+
* @return mixed null|string
|
94 |
+
*/
|
95 |
+
protected function getLocale()
|
96 |
+
{
|
97 |
+
$result = self::DEFAULT_LOCALE;
|
98 |
+
$locale = substr(Mage::app()->getLocale()->getLocaleCode(), 0, 2);
|
99 |
+
if (in_array($locale, $this->_supportedLocales)) {
|
100 |
+
$result = $locale;
|
101 |
+
}
|
102 |
+
return $result;
|
103 |
+
}
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Calc Amount
|
107 |
+
*
|
108 |
+
* @return amount
|
109 |
+
*/
|
110 |
+
protected function calcCentAmount($amount)
|
111 |
+
{
|
112 |
+
return number_format($amount * 100, 0, '.', '');
|
113 |
+
}
|
114 |
+
|
115 |
+
/**
|
116 |
+
* getter for masterpass config model
|
117 |
+
*
|
118 |
+
* @return Expercash_Expercash_Model_Masterpass_Config
|
119 |
+
*/
|
120 |
+
protected function getConfig()
|
121 |
+
{
|
122 |
+
return Mage::getModel('expercash/masterpass_config');
|
123 |
+
}
|
124 |
+
}
|
app/code/community/Expercash/Expercash/Model/Request/Token.php
ADDED
@@ -0,0 +1,192 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
class Expercash_Expercash_Model_Request_Token
|
25 |
+
{
|
26 |
+
/**
|
27 |
+
* default locale string
|
28 |
+
*/
|
29 |
+
const DEFAULT_LOCALE = 'en';
|
30 |
+
|
31 |
+
/**
|
32 |
+
* the locale codes that are supported by expercash
|
33 |
+
*
|
34 |
+
* @var array
|
35 |
+
*/
|
36 |
+
protected $_supportedLocales = array('en', 'de', 'fr', 'es', 'it', 'du');
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @param Mage_Sales_Model_Order $order
|
40 |
+
*
|
41 |
+
* @return array
|
42 |
+
*/
|
43 |
+
public function getTokenParams($order)
|
44 |
+
{
|
45 |
+
$config = $this->getConfig();
|
46 |
+
$paymentObject = $order->getPayment()->getMethodInstance();
|
47 |
+
$code = $paymentObject->getCode();
|
48 |
+
|
49 |
+
$params = Array(
|
50 |
+
'popupId' => $config->getPopupId($order->getStoreId()),
|
51 |
+
'jobId' => $order->getIncrementId(),
|
52 |
+
'transactionId' => $order->getIncrementId(),
|
53 |
+
'amount' => $this->calcCentAmount($order->getGrandTotal()),
|
54 |
+
'currency' => $order->getOrderCurrencyCode(),
|
55 |
+
'paymentMethod' => $config->getConfigData('paymenttype', $code, $order->getStoreId()),
|
56 |
+
'returnUrl' => Mage::getUrl('expercash/expercash/success', array('_secure' => true)),
|
57 |
+
'errorUrl' => Mage::getUrl('expercash/expercash/error', array('_secure' => true)),
|
58 |
+
'notifyUrl' => Mage::getUrl('expercash/expercash/notify', array('_secure' => true)),
|
59 |
+
'profile' => $config->getProfilId($order->getStoreId()),
|
60 |
+
);
|
61 |
+
|
62 |
+
if ($paymentObject instanceof Expercash_Expercash_Model_Expercashpc) {
|
63 |
+
$params = array_merge($params, $this->getBarzahlenParams($order));
|
64 |
+
}
|
65 |
+
$params['popupKey'] = $this->getPopupKey($order, $params);
|
66 |
+
$additionalParams = $this->getNonHashedParams($order);
|
67 |
+
$params = array_merge($params, $additionalParams);
|
68 |
+
$params = $this->removeEmptyParams($params);
|
69 |
+
|
70 |
+
return $params;
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* return the additional params that are not included in the hash building process
|
75 |
+
*
|
76 |
+
* @param Mage_Sales_Model_Order $order
|
77 |
+
*
|
78 |
+
* @return array
|
79 |
+
*/
|
80 |
+
protected function getNonHashedParams(Mage_Sales_Model_Order $order)
|
81 |
+
{
|
82 |
+
$params = array(
|
83 |
+
'cssUrl' => $this->getConfig()->getCssUrl($order->getStoreId()),
|
84 |
+
'language' => $this->getLocale(),
|
85 |
+
'shopEnvironment' => json_encode($this->getShopEnvironmentParams())
|
86 |
+
);
|
87 |
+
return $params;
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* remove empty params from param array
|
92 |
+
*
|
93 |
+
* @param array $params
|
94 |
+
*
|
95 |
+
* @return array
|
96 |
+
*/
|
97 |
+
protected function removeEmptyParams(array $params)
|
98 |
+
{
|
99 |
+
foreach ($params as $key => $value) {
|
100 |
+
if (empty($value)) {
|
101 |
+
unset($params[$key]);
|
102 |
+
}
|
103 |
+
}
|
104 |
+
return $params;
|
105 |
+
}
|
106 |
+
|
107 |
+
/**
|
108 |
+
* build and return the popupKey value
|
109 |
+
*
|
110 |
+
* @param Mage_Sales_Model_Order $order
|
111 |
+
* @param array $params
|
112 |
+
*
|
113 |
+
* @return string
|
114 |
+
*/
|
115 |
+
protected function getPopupKey(Mage_Sales_Model_Order $order, array $params)
|
116 |
+
{
|
117 |
+
$popupKey = implode('', $params) . $this->getConfig()->getAuthorizationkey($order->getStoreId());
|
118 |
+
return md5($popupKey);
|
119 |
+
}
|
120 |
+
|
121 |
+
/**
|
122 |
+
* get the Barzahlen params
|
123 |
+
*
|
124 |
+
* @param Mage_Sales_Model_Order $order
|
125 |
+
*
|
126 |
+
* @return array
|
127 |
+
*/
|
128 |
+
protected function getBarzahlenParams(Mage_Sales_Model_Order $order)
|
129 |
+
{
|
130 |
+
/** @var $billingAddress Mage_Sales_Model_Order_Address */
|
131 |
+
$billingAddress = $order->getBillingAddress();
|
132 |
+
return array(
|
133 |
+
'customerPrename' => $billingAddress->getFirstname(),
|
134 |
+
'customerName' => $billingAddress->getLastname(),
|
135 |
+
'customerAddress1' => $billingAddress->getStreetFull(),
|
136 |
+
'customerZip' => $billingAddress->getPostcode(),
|
137 |
+
'customerCity' => $billingAddress->getCity(),
|
138 |
+
'customerCountry' => $billingAddress->getCountry(),
|
139 |
+
'customerEmail' => $billingAddress->getEmail(),
|
140 |
+
'updateUrl' => Mage::getUrl('expercash/expercash/notify', array('_secure' => true))
|
141 |
+
);
|
142 |
+
}
|
143 |
+
|
144 |
+
/**
|
145 |
+
* return the params for shopEnvironment
|
146 |
+
*
|
147 |
+
* @return array
|
148 |
+
*/
|
149 |
+
protected function getShopEnvironmentParams()
|
150 |
+
{
|
151 |
+
return array(
|
152 |
+
'envSystemName' => Mage::helper('expercash/data')->getEnvName(),
|
153 |
+
'envSystemVersion' => Mage::helper('expercash/data')->getMagentoVersion(),
|
154 |
+
'envPaymentModulVersion' => Mage::helper('expercash/data')->getVersion()
|
155 |
+
);
|
156 |
+
}
|
157 |
+
|
158 |
+
/**
|
159 |
+
* get locale
|
160 |
+
*
|
161 |
+
* @return mixed null|string
|
162 |
+
*/
|
163 |
+
protected function getLocale()
|
164 |
+
{
|
165 |
+
$result = self::DEFAULT_LOCALE;
|
166 |
+
$locale = substr(Mage::app()->getLocale()->getLocaleCode(), 0, 2);
|
167 |
+
if (in_array($locale, $this->_supportedLocales)) {
|
168 |
+
$result = $locale;
|
169 |
+
}
|
170 |
+
return $result;
|
171 |
+
}
|
172 |
+
|
173 |
+
/**
|
174 |
+
* Calc Amount
|
175 |
+
*
|
176 |
+
* @return amount
|
177 |
+
*/
|
178 |
+
protected function calcCentAmount($amount)
|
179 |
+
{
|
180 |
+
return number_format($amount * 100, 0, '.', '');
|
181 |
+
}
|
182 |
+
|
183 |
+
/**
|
184 |
+
* getter for config model
|
185 |
+
*
|
186 |
+
* @return Expercash_Expercash_Model_Config
|
187 |
+
*/
|
188 |
+
protected function getConfig()
|
189 |
+
{
|
190 |
+
return Mage::getModel('expercash/config');
|
191 |
+
}
|
192 |
+
}
|
app/code/community/Expercash/Expercash/Model/Request/Token/Iframe.php
ADDED
@@ -0,0 +1,180 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
class Expercash_Expercash_Model_Request_Token_Iframe
|
25 |
+
{
|
26 |
+
/**
|
27 |
+
* default locale string
|
28 |
+
*/
|
29 |
+
const DEFAULT_LOCALE = 'en';
|
30 |
+
|
31 |
+
/**
|
32 |
+
* the locale codes that are supported by expercash
|
33 |
+
*
|
34 |
+
* @var array
|
35 |
+
*/
|
36 |
+
protected $_supportedLocales = array('en', 'de', 'fr', 'es', 'it', 'du');
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @param Mage_Sales_Model_Order $order
|
40 |
+
*
|
41 |
+
* @return array
|
42 |
+
*/
|
43 |
+
public function getTokenParams($order)
|
44 |
+
{
|
45 |
+
$config = $this->getConfig();
|
46 |
+
$paymentObject = $order->getPayment()->getMethodInstance();
|
47 |
+
$code = $paymentObject->getCode();
|
48 |
+
|
49 |
+
$params = Array(
|
50 |
+
'popupId' => $config->getPopupId($order->getStoreId()),
|
51 |
+
'jobId' => $order->getIncrementId(),
|
52 |
+
'transactionId' => $order->getIncrementId(),
|
53 |
+
'amount' => $this->calcCentAmount($order->getGrandTotal()),
|
54 |
+
'currency' => $order->getOrderCurrencyCode(),
|
55 |
+
'paymentMethod' => $config->getConfigData('paymenttype', $code, $order->getStoreId()),
|
56 |
+
'returnUrl' => Mage::getUrl('expercash/expercash/success', array('_secure' => true)),
|
57 |
+
'errorUrl' => Mage::getUrl('expercash/expercash/error', array('_secure' => true)),
|
58 |
+
'notifyUrl' => Mage::getUrl('expercash/expercash/notify', array('_secure' => true)),
|
59 |
+
'profile' => $config->getProfilId($order->getStoreId()),
|
60 |
+
);
|
61 |
+
|
62 |
+
if ($paymentObject instanceof Expercash_Expercash_Model_Expercashpc) {
|
63 |
+
$params = array_merge($params, $this->getBarzahlenParams($order));
|
64 |
+
}
|
65 |
+
$params['popupKey'] = $this->getPopupKey($order, $params);
|
66 |
+
$additionalParams = $this->getNonHashedParams($order);
|
67 |
+
$params = array_merge($params, $additionalParams);
|
68 |
+
$params = $this->removeEmptyParams($params);
|
69 |
+
|
70 |
+
return $params;
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* return the additional params that are not included in the hash building process
|
75 |
+
*
|
76 |
+
* @param Mage_Sales_Model_Order $order
|
77 |
+
*
|
78 |
+
* @return array
|
79 |
+
*/
|
80 |
+
protected function getNonHashedParams(Mage_Sales_Model_Order $order)
|
81 |
+
{
|
82 |
+
$params = array(
|
83 |
+
'cssUrl' => $this->getConfig()->getCssUrl($order->getStoreId()),
|
84 |
+
'language' => $this->getLocale(),
|
85 |
+
'shopEnvironment' => $this->getConfig()->getShopEnvironmentParams(),
|
86 |
+
);
|
87 |
+
return $params;
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* remove empty params from param array
|
92 |
+
*
|
93 |
+
* @param array $params
|
94 |
+
*
|
95 |
+
* @return array
|
96 |
+
*/
|
97 |
+
protected function removeEmptyParams(array $params)
|
98 |
+
{
|
99 |
+
foreach ($params as $key => $value) {
|
100 |
+
if (empty($value)) {
|
101 |
+
unset($params[$key]);
|
102 |
+
}
|
103 |
+
}
|
104 |
+
return $params;
|
105 |
+
}
|
106 |
+
|
107 |
+
/**
|
108 |
+
* build and return the popupKey value
|
109 |
+
*
|
110 |
+
* @param Mage_Sales_Model_Order $order
|
111 |
+
* @param array $params
|
112 |
+
*
|
113 |
+
* @return string
|
114 |
+
*/
|
115 |
+
protected function getPopupKey(Mage_Sales_Model_Order $order, array $params)
|
116 |
+
{
|
117 |
+
$popupKey = implode('', $params) . $this->getConfig()->getAuthorizationkey($order->getStoreId());
|
118 |
+
return md5($popupKey);
|
119 |
+
}
|
120 |
+
|
121 |
+
/**
|
122 |
+
* get the Barzahlen params
|
123 |
+
*
|
124 |
+
* @param Mage_Sales_Model_Order $order
|
125 |
+
*
|
126 |
+
* @return array
|
127 |
+
*/
|
128 |
+
protected function getBarzahlenParams(Mage_Sales_Model_Order $order)
|
129 |
+
{
|
130 |
+
/** @var $billingAddress Mage_Sales_Model_Order_Address */
|
131 |
+
$billingAddress = $order->getBillingAddress();
|
132 |
+
return array(
|
133 |
+
'customerPrename' => $billingAddress->getFirstname(),
|
134 |
+
'customerName' => $billingAddress->getLastname(),
|
135 |
+
'customerAddress1' => $billingAddress->getStreetFull(),
|
136 |
+
'customerZip' => $billingAddress->getPostcode(),
|
137 |
+
'customerCity' => $billingAddress->getCity(),
|
138 |
+
'customerCountry' => $billingAddress->getCountry(),
|
139 |
+
'customerEmail' => $billingAddress->getEmail(),
|
140 |
+
'updateUrl' => Mage::getUrl('expercash/expercash/notify', array('_secure' => true))
|
141 |
+
);
|
142 |
+
}
|
143 |
+
|
144 |
+
|
145 |
+
|
146 |
+
/**
|
147 |
+
* get locale
|
148 |
+
*
|
149 |
+
* @return mixed null|string
|
150 |
+
*/
|
151 |
+
protected function getLocale()
|
152 |
+
{
|
153 |
+
$result = self::DEFAULT_LOCALE;
|
154 |
+
$locale = substr(Mage::app()->getLocale()->getLocaleCode(), 0, 2);
|
155 |
+
if (in_array($locale, $this->_supportedLocales)) {
|
156 |
+
$result = $locale;
|
157 |
+
}
|
158 |
+
return $result;
|
159 |
+
}
|
160 |
+
|
161 |
+
/**
|
162 |
+
* Calc Amount
|
163 |
+
*
|
164 |
+
* @return amount
|
165 |
+
*/
|
166 |
+
protected function calcCentAmount($amount)
|
167 |
+
{
|
168 |
+
return number_format($amount * 100, 0, '.', '');
|
169 |
+
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* getter for config model
|
173 |
+
*
|
174 |
+
* @return Expercash_Expercash_Model_Config
|
175 |
+
*/
|
176 |
+
protected function getConfig()
|
177 |
+
{
|
178 |
+
return Mage::getModel('expercash/config');
|
179 |
+
}
|
180 |
+
}
|
app/code/community/Expercash/Expercash/Model/Resource/Directory/Region.php
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
class Expercash_Expercash_Model_Resource_Directory_Region extends Mage_Directory_Model_Mysql4_Region
|
25 |
+
{
|
26 |
+
|
27 |
+
/**
|
28 |
+
* load region by name
|
29 |
+
*
|
30 |
+
* @overrites \Mage_Directory_Model_Mysql4_Region::loadByName
|
31 |
+
*
|
32 |
+
* @param Mage_Directory_Model_Region $region
|
33 |
+
* @param $regionName
|
34 |
+
* @param $countryId
|
35 |
+
*
|
36 |
+
* @return $this
|
37 |
+
*/
|
38 |
+
public function loadByName(Mage_Directory_Model_Region $region, $regionName, $countryId)
|
39 |
+
{
|
40 |
+
$locale = Mage::app()->getLocale()->getLocaleCode();
|
41 |
+
|
42 |
+
$select = $this->_read->select()
|
43 |
+
->from(array('region'=>$this->_regionTable))
|
44 |
+
->where('region.country_id=?', $countryId)
|
45 |
+
->where('region.default_name=?', $regionName)
|
46 |
+
->joinLeft(array('rname'=>$this->_regionNameTable),
|
47 |
+
'rname.region_id=region.region_id AND rname.locale=\''.$locale.'\'',
|
48 |
+
array('name'));
|
49 |
+
|
50 |
+
|
51 |
+
$region->setData($this->_read->fetchRow($select));
|
52 |
+
return $this;
|
53 |
+
}
|
54 |
+
}
|
app/code/community/Expercash/Expercash/Model/Source/Paymenttypecc.php
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
class Expercash_Expercash_Model_Source_Paymenttypecc
|
25 |
+
{
|
26 |
+
|
27 |
+
public function toOptionArray()
|
28 |
+
{
|
29 |
+
return array(
|
30 |
+
array(
|
31 |
+
'value' => Expercash_Expercash_Model_Expercashcc::PAYMENT_TYPE_CC_BUY,
|
32 |
+
'label' => Mage::helper('expercash')->__('CCBUY')
|
33 |
+
),
|
34 |
+
array(
|
35 |
+
'value' => Expercash_Expercash_Model_Expercashcc::PAYMENT_TYPE_CC_AUTH,
|
36 |
+
'label' => Mage::helper('expercash')->__('CCAUTH')
|
37 |
+
),
|
38 |
+
);
|
39 |
+
}
|
40 |
+
}
|
app/code/community/Expercash/Expercash/Model/Source/Paymenttypeelv.php
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
class Expercash_Expercash_Model_Source_Paymenttypeelv
|
25 |
+
{
|
26 |
+
|
27 |
+
public function toOptionArray()
|
28 |
+
{
|
29 |
+
return array(
|
30 |
+
array(
|
31 |
+
'value' => Expercash_Expercash_Model_Expercashelv::PAYMENT_TYPE_ELV_BUY,
|
32 |
+
'label' => Mage::helper('expercash')->__('ELVBUY')
|
33 |
+
),
|
34 |
+
array(
|
35 |
+
'value' => Expercash_Expercash_Model_Expercashelv::PAYMENT_TYPE_ELV_AUTH,
|
36 |
+
'label' => Mage::helper('expercash')->__('ELVAUTH')
|
37 |
+
),
|
38 |
+
);
|
39 |
+
}
|
40 |
+
}
|
app/code/community/Expercash/Expercash/Model/Source/Paymenttypegp.php
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
class Expercash_Expercash_Model_Source_Paymenttypegp
|
25 |
+
{
|
26 |
+
|
27 |
+
public function toOptionArray()
|
28 |
+
{
|
29 |
+
return array(
|
30 |
+
array(
|
31 |
+
'value' => Expercash_Expercash_Model_Expercashgp::PAYMENT_TYPE_GP,
|
32 |
+
'label' => Mage::helper('expercash')->__('GPBUY')
|
33 |
+
),
|
34 |
+
);
|
35 |
+
}
|
36 |
+
}
|
app/code/community/Expercash/Expercash/Model/Source/Paymenttypemp.php
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
class Expercash_Expercash_Model_Source_Paymenttypemp
|
23 |
+
{
|
24 |
+
|
25 |
+
public function toOptionArray()
|
26 |
+
{
|
27 |
+
return array(
|
28 |
+
array(
|
29 |
+
'value' => Expercash_Expercash_Model_Expercashmp::PAYMENT_TYPE_MP_BUY,
|
30 |
+
'label' => Mage::helper('expercash')->__('MPBUY')
|
31 |
+
),
|
32 |
+
array(
|
33 |
+
'value' => Expercash_Expercash_Model_Expercashmp::PAYMENT_TYPE_MP_AUTH,
|
34 |
+
'label' => Mage::helper('expercash')->__('MPAUTH')
|
35 |
+
),
|
36 |
+
);
|
37 |
+
}
|
38 |
+
}
|
app/code/community/Expercash/Expercash/Model/Source/Paymenttypempf.php
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
class Expercash_Expercash_Model_Source_Paymenttypempf
|
23 |
+
{
|
24 |
+
/**
|
25 |
+
* Prepare payment action list as optional array
|
26 |
+
*
|
27 |
+
* @return array
|
28 |
+
*/
|
29 |
+
public function toOptionArray()
|
30 |
+
{
|
31 |
+
return array(
|
32 |
+
array(
|
33 |
+
'value' => Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE_CAPTURE,
|
34 |
+
'label' => Mage::helper('adminhtml')->__('Yes')
|
35 |
+
),
|
36 |
+
array(
|
37 |
+
'value' => Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE,
|
38 |
+
'label' => Mage::helper('adminhtml')->__('No')
|
39 |
+
),
|
40 |
+
);
|
41 |
+
}
|
42 |
+
}
|
app/code/community/Expercash/Expercash/Model/Source/Paymenttypeso.php
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
|
24 |
+
class Expercash_Expercash_Model_Source_Paymenttypeso
|
25 |
+
{
|
26 |
+
|
27 |
+
public function toOptionArray()
|
28 |
+
{
|
29 |
+
return array(
|
30 |
+
array(
|
31 |
+
'value' => Expercash_Expercash_Model_Expercashso::PAYMENT_TYPE_SO,
|
32 |
+
'label' => Mage::helper('expercash')->__('SOBUY')
|
33 |
+
),
|
34 |
+
);
|
35 |
+
}
|
36 |
+
}
|
app/code/community/Expercash/Expercash/Test/Block/ExpercashTest.php
ADDED
@@ -0,0 +1,144 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Magento
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
* If you did not receive a copy of the license and are unable to
|
13 |
+
* obtain it through the world-wide-web, please send an email
|
14 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
15 |
+
*
|
16 |
+
* @category Expercash
|
17 |
+
* @package Expercash_Expercash
|
18 |
+
* @copyright Copyright (c) 2008-2011 bjoern hahnefeld IT
|
19 |
+
* @copyright Copyright (c) 2013 Netresearch App Factory AG
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
class Expercash_Expercash_Test_Block_ExpercashTest extends EcomDev_PHPUnit_Test_Case
|
23 |
+
{
|
24 |
+
|
25 |
+
|
26 |
+
public function testGetIframeHeight()
|
27 |
+
{
|
28 |
+
$checkoutSessionMock = $this->getModelMock('checkout/session', array('init', 'start'));
|
29 |
+
$this->replaceByMock('model', 'checkout/session', $checkoutSessionMock);
|
30 |
+
|
31 |
+
$configMock = $this->getModelMock('expercash/config', array('getIframeHeight'));
|
32 |
+
$configMock->expects($this->any())
|
33 |
+
->method('getIframeHeight')
|
34 |
+
->will($this->returnValue(150));
|
35 |
+
$this->replaceByMock('model', 'expercash/config', $configMock);
|
36 |
+
|
37 |
+
$blockMock = $this->getBlockMock('expercash/expercash', array('getStoreId', 'getConfig'));
|
38 |
+
$blockMock->expects($this->any())
|
39 |
+
->method('getStoreId')
|
40 |
+
->will($this->returnValue(1));
|
41 |
+
|
42 |
+
$this->replaceByMock('block', 'expercash/expercash', $blockMock);
|
43 |
+
|
44 |
+
$this->assertEquals(150, $this->invokeMethod('getIframeHeight', array()));
|
45 |
+
}
|
46 |
+
|
47 |
+
public function testGetIframeWidth()
|
48 |
+
{
|
49 |
+
$checkoutSessionMock = $this->getModelMock('checkout/session', array('init', 'start'));
|
50 |
+
$this->replaceByMock('model', 'checkout/session', $checkoutSessionMock);
|
51 |
+
|
52 |
+
$configMock = $this->getModelMock('expercash/config', array('getIframeWidth'));
|
53 |
+
$configMock->expects($this->any())
|
54 |
+
->method('getIframeWidth')
|
55 |
+
->will($this->returnValue(250));
|
56 |
+
$this->replaceByMock('model', 'expercash/config', $configMock);
|
57 |
+
|
58 |
+
$blockMock = $this->getBlockMock('expercash/expercash', array('getStoreId', 'getConfig'));
|
59 |
+
$blockMock->expects($this->any())
|
60 |
+
->method('getStoreId')
|
61 |
+
->will($this->returnValue(1));
|
62 |
+
|
63 |
+
$this->replaceByMock('block', 'expercash/expercash', $blockMock);
|
64 |
+
|
65 |
+
$this->assertEquals(250, $this->invokeMethod('getIframeWidth', array()));
|
66 |
+
}
|
67 |
+
|
68 |
+
public function testGetIframeCssClass()
|
69 |
+
{
|
70 |
+
$checkoutSessionMock = $this->getModelMock('checkout/session', array('init', 'start'));
|
71 |
+
$this->replaceByMock('model', 'checkout/session', $checkoutSessionMock);
|
72 |
+
|
73 |
+
$configMock = $this->getModelMock('expercash/config', array('getIframeCssClass'));
|
74 |
+
$configMock->expects($this->any())
|
75 |
+
->method('getIframeCssClass')
|
76 |
+
->will($this->returnValue('cssClassFoobar'));
|
77 |
+
$this->replaceByMock('model', 'expercash/config', $configMock);
|
78 |
+
|
79 |
+
$blockMock = $this->getBlockMock('expercash/expercash', array('getStoreId', 'getConfig'));
|
80 |
+
$blockMock->expects($this->any())
|
81 |
+
->method('getStoreId')
|
82 |
+
->will($this->returnValue(1));
|
83 |
+
|
84 |
+
$this->replaceByMock('block', 'expercash/expercash', $blockMock);
|
85 |
+
|
86 |
+
$this->assertEquals('cssClassFoobar', $this->invokeMethod('getIframeCssClass', array()));
|
87 |
+
}
|
88 |
+
|
89 |
+
|
90 |
+
public function testGetStoreId()
|
91 |
+
{
|
92 |
+
$order = new Varien_Object();
|
93 |
+
$order->setStoreId(1);
|
94 |
+
|
95 |
+
$iframeMock = $this->getModelMock('expercash/request_iframe', array('getOrder'));
|
96 |
+
$iframeMock->expects($this->any())
|
97 |
+
->method('getOrder')
|
98 |
+
->will($this->returnValue($order));
|
99 |
+
$this->replaceByMock('model', 'expercash/request_iframe', $iframeMock);
|
100 |
+
|
101 |
+
$this->assertEquals(1, $this->invokeMethod('getStoreId', array()));
|
102 |
+
}
|
103 |
+
|
104 |
+
public function testGetIframeModel()
|
105 |
+
{
|
106 |
+
$this->assertTrue(
|
107 |
+
$this->invokeMethod('getIframeModel', array()) instanceof Expercash_Expercash_Model_Request_Iframe
|
108 |
+
);
|
109 |
+
}
|
110 |
+
|
111 |
+
public function testGetConfig()
|
112 |
+
{
|
113 |
+
$this->assertTrue($this->invokeMethod('getConfig', array()) instanceof Expercash_Expercash_Model_Config);
|
114 |
+
}
|
115 |
+
|
116 |
+
public function testGetIframeUrl()
|
117 |
+
{
|
118 |
+
$checkoutSessionMock = $this->getModelMock('checkout/session', array('init', 'start'));
|
119 |
+
$this->replaceByMock('model', 'checkout/session', $checkoutSessionMock);
|
120 |
+
$iframeMock = $this->getModelMock('expercash/request_iframe', array('setOrderDataToSession'));
|
121 |
+
$this->replaceByMock('model', 'expercash/request_iframe', $iframeMock);
|
122 |
+
$this->assertEquals(
|
123 |
+
$this->invokeMethod('getIframeUrl', array()), Mage::getModel('expercash/request_iframe')->getIframeUrl()
|
124 |
+
);
|
125 |
+
}
|
126 |
+
|
127 |
+
/**
|
128 |
+
* Call protected/private method of a class.
|
129 |
+
*
|
130 |
+
* @param object $object Instantiated object that we will run method on.
|
131 |
+
* @param string $methodName Method name to call
|
132 |
+
* @param array $parameters Array of parameters to pass into method.
|
133 |
+
*
|
134 |
+
* @return mixed Method return.
|
135 |
+
*/
|
136 |
+
public function invokeMethod($methodName, array $parameters = array())
|
137 |
+
{
|
138 |
+
$object = new Expercash_Expercash_Block_Expercash();
|
139 |
+
$reflection = new \ReflectionClass(get_class($object));
|
140 |
+
$method = $reflection->getMethod($methodName);
|
141 |
+
$method->setAccessible(true);
|
142 |
+
return $method->invokeArgs($object, $parameters);
|
143 |
+
}
|
144 |
+
}
|
app/code/community/Expercash/Expercash/Test/Block/ExpercashTest/expectations/orders.yaml
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
1 |
+
url:'https://epi.expercash.net/epi_popup2.php?popupId=&jobId=1700000031&transactionId=1700000031&amount=47999¤cy=EUR&paymentMethod=cc_authorize&returnUrl=http%3A%2F%2Fahe-ce-1620.magento.nrdev.de%2Fexpercash%2Fexpercash%2Fsuccess%2F&errorUrl=http%3A%2F%2Fahe-ce-1620.magento.nrdev.de%2Fexpercash%2Fexpercash%2Ferror%2F¬ifyUrl=http%3A%2F%2Fahe-ce-1620.magento.nrdev.de%2Fexpercash%2Fexpercash%2Fnotify%2F&profile=&popupKey=2ffa6676dbb450ecc3f6831b07c81b56&cssUrl=&language=de&shopEnvironment=%7B%22envSystemName%22%3A%22Magento%22%2C%22envSystemVersion%22%3A%221.7.0.2%22%2C%22envPaymentModulVersion%22%3A%2213.03.28%22%7D'
|
2 |
+
|
app/code/community/Expercash/Expercash/Test/Block/ExpercashTest/fixtures/orders.yaml
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
tables:
|
2 |
+
sales/order:
|
3 |
+
|
4 |
+
- entity_id: 11
|
5 |
+
increment_id: 1700000031
|
6 |
+
shipping_address_id: 42
|
7 |
+
base_grand_total: 479.99
|
8 |
+
grand_total: 479.99
|
9 |
+
currency: 'EUR'
|
10 |
+
customer_gender: 1
|
11 |
+
shipping_method: 'flatrate_flatrate'
|
12 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
13 |
+
state: 'pending_payment'
|
14 |
+
status: 'pending_payment'
|
15 |
+
order_currency_code: 'EUR'
|
16 |
+
|
17 |
+
- entity_id: 2
|
18 |
+
increment_id: 100000055
|
19 |
+
quote_id: 2
|
20 |
+
shipping_address_id: 42
|
21 |
+
base_grand_total: 119.00
|
22 |
+
grand_total: 119.00
|
23 |
+
currency: 'EUR'
|
24 |
+
customer_gender: 1
|
25 |
+
shipping_method: 'flatrate_flatrate'
|
26 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
27 |
+
|
28 |
+
- entity_id: 3
|
29 |
+
increment_id: 100000055
|
30 |
+
quote_id: 3
|
31 |
+
shipping_address_id: 42
|
32 |
+
base_grand_total: 119.00
|
33 |
+
grand_total: 119.00
|
34 |
+
currency: 'EUR'
|
35 |
+
customer_gender: 1
|
36 |
+
shipping_method: 'flatrate_flatrate'
|
37 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
38 |
+
|
39 |
+
sales/order_payment:
|
40 |
+
- entity_id: 11
|
41 |
+
parent_id: 11
|
42 |
+
method: 'expercashcc'
|
app/code/community/Expercash/Expercash/Test/Block/Masterpass/FormTest.php
ADDED
@@ -0,0 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Magento
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
* If you did not receive a copy of the license and are unable to
|
13 |
+
* obtain it through the world-wide-web, please send an email
|
14 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
15 |
+
*
|
16 |
+
* @category Expercash
|
17 |
+
* @package Expercash_Expercash
|
18 |
+
* @copyright Copyright (c) 2008-2011 bjoern hahnefeld IT
|
19 |
+
* @copyright Copyright (c) 2013 Netresearch App Factory AG
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
class Expercash_Expercash_Test_Block_Masterpass_FormTest extends EcomDev_PHPUnit_Test_Case
|
23 |
+
{
|
24 |
+
|
25 |
+
|
26 |
+
|
27 |
+
public function testGetMethodName()
|
28 |
+
{
|
29 |
+
$block = new Expercash_Expercash_Block_Masterpass_Form();
|
30 |
+
|
31 |
+
$this->assertEquals('expercashmp', $block->getMethodCode());
|
32 |
+
}
|
33 |
+
|
34 |
+
public function testGetMasterpassConfig()
|
35 |
+
{
|
36 |
+
$configModel = $this->invokeMethod('getMasterpassConfig');
|
37 |
+
$this->assertTrue($configModel instanceof Expercash_Expercash_Model_Masterpass_Config);
|
38 |
+
}
|
39 |
+
|
40 |
+
public function testHandleLogoDisplayFalse()
|
41 |
+
{
|
42 |
+
$configModelMock = $this->getModelMock('expercash/masterpass_config', array(
|
43 |
+
'showMasterpassLogoInCheckout',
|
44 |
+
)
|
45 |
+
);
|
46 |
+
$configModelMock->expects($this->any())
|
47 |
+
->method('showMasterpassLogoInCheckout')
|
48 |
+
->will($this->returnValue(false));
|
49 |
+
|
50 |
+
$this->replaceByMock('model', 'expercash/masterpass_config', $configModelMock);
|
51 |
+
|
52 |
+
$this->assertEquals(null, $this->invokeMethod('handleLogoDisplay'));
|
53 |
+
}
|
54 |
+
|
55 |
+
|
56 |
+
public function testHandleLogoDisplayTrue()
|
57 |
+
{
|
58 |
+
// $this->markTestIncomplete();
|
59 |
+
|
60 |
+
// needs fix , mocking block singleton doesnt work somehow
|
61 |
+
|
62 |
+
$configModelMock = $this->getModelMock('expercash/masterpass_config', array(
|
63 |
+
'showMasterpassLogoInCheckout',
|
64 |
+
)
|
65 |
+
);
|
66 |
+
$configModelMock->expects($this->any())
|
67 |
+
->method('showMasterpassLogoInCheckout')
|
68 |
+
->will($this->returnValue(true));
|
69 |
+
|
70 |
+
$this->replaceByMock('model', 'expercash/masterpass_config', $configModelMock);
|
71 |
+
|
72 |
+
$markMock = $this->getBlockMock('core/template', array(
|
73 |
+
'setPaymentAcceptanceMarkHref',
|
74 |
+
'setPaymentAcceptanceMarkSrc'
|
75 |
+
)
|
76 |
+
);
|
77 |
+
|
78 |
+
$markMock->expects($this->any())
|
79 |
+
->method('setPaymentAcceptanceMarkHref')
|
80 |
+
->will($this->returnSelf());
|
81 |
+
|
82 |
+
$this->replaceByMock('block', 'core/template', $markMock);
|
83 |
+
|
84 |
+
$this->assertInstanceOf(get_class($markMock), $this->invokeMethod('handleLogoDisplay'));
|
85 |
+
}
|
86 |
+
|
87 |
+
|
88 |
+
|
89 |
+
/**
|
90 |
+
* Call protected/private method of a class.
|
91 |
+
*
|
92 |
+
* @param object $object Instantiated object that we will run method on.
|
93 |
+
* @param string $methodName Method name to call
|
94 |
+
* @param array $parameters Array of parameters to pass into method.
|
95 |
+
*
|
96 |
+
* @return mixed Method return.
|
97 |
+
*/
|
98 |
+
public function invokeMethod($methodName, array $parameters = array())
|
99 |
+
{
|
100 |
+
$object = new Expercash_Expercash_Block_Masterpass_Form();
|
101 |
+
$reflection = new \ReflectionClass(get_class($object));
|
102 |
+
$method = $reflection->getMethod($methodName);
|
103 |
+
$method->setAccessible(true);
|
104 |
+
return $method->invokeArgs($object, $parameters);
|
105 |
+
}
|
106 |
+
|
107 |
+
|
108 |
+
}
|
app/code/community/Expercash/Expercash/Test/Block/Masterpass/Fullcheckout/ShortcutTest.php
ADDED
@@ -0,0 +1,182 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Magento
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
* If you did not receive a copy of the license and are unable to
|
13 |
+
* obtain it through the world-wide-web, please send an email
|
14 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
15 |
+
*
|
16 |
+
* @category Expercash
|
17 |
+
* @package Expercash_Expercash
|
18 |
+
* @copyright Copyright (c) 2008-2011 bjoern hahnefeld IT
|
19 |
+
* @copyright Copyright (c) 2013 Netresearch App Factory AG
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
class Expercash_Expercash_Test_Block_Masterpass_Fullcheckout_ShortcutTest extends EcomDev_PHPUnit_Test_Case
|
23 |
+
{
|
24 |
+
|
25 |
+
|
26 |
+
|
27 |
+
public function testIsCustomerNotLoggedIn()
|
28 |
+
{
|
29 |
+
$customerSessionMock = $this->getModelMock('customer/session', array('init', 'start', 'isLoggedIn'));
|
30 |
+
$customerSessionMock->expects($this->any())
|
31 |
+
->method('isLoggedIn')
|
32 |
+
->will($this->returnValue(false));
|
33 |
+
$this->replaceByMock('model', 'customer/session', $customerSessionMock);
|
34 |
+
|
35 |
+
$block = new Expercash_Expercash_Block_Masterpass_Fullcheckout_Shortcut();
|
36 |
+
|
37 |
+
$this->assertFalse(
|
38 |
+
$this->invokeMethod('isCustomerLoggedIn', array()),
|
39 |
+
Mage::getModel('customer/session')->isLoggedIn()
|
40 |
+
);
|
41 |
+
}
|
42 |
+
|
43 |
+
|
44 |
+
public function testIsCustomerLoggedIn()
|
45 |
+
{
|
46 |
+
$customerSessionMock = $this->getModelMock('customer/session', array('init', 'start', 'isLoggedIn'));
|
47 |
+
$customerSessionMock->expects($this->any())
|
48 |
+
->method('isLoggedIn')
|
49 |
+
->will($this->returnValue(true));
|
50 |
+
$this->replaceByMock('model', 'customer/session', $customerSessionMock);
|
51 |
+
|
52 |
+
$this->assertTrue(
|
53 |
+
$this->invokeMethod('isCustomerLoggedIn', array()),
|
54 |
+
Mage::getModel('customer/session')->isLoggedIn()
|
55 |
+
);
|
56 |
+
}
|
57 |
+
|
58 |
+
|
59 |
+
public function testGetMasterpassConfig()
|
60 |
+
{
|
61 |
+
$configModel = $this->invokeMethod('getMasterpassConfig');
|
62 |
+
$this->assertTrue($configModel instanceof Expercash_Expercash_Model_Masterpass_Config);
|
63 |
+
}
|
64 |
+
|
65 |
+
|
66 |
+
public function testGetLearnMoreLink()
|
67 |
+
{
|
68 |
+
$configModelMock = $this->getModelMock('expercash/masterpass_config', array(
|
69 |
+
'showMasterPassFullCheckoutLearnMoreLink',
|
70 |
+
'getMasterpassLearnMoreUrl'
|
71 |
+
)
|
72 |
+
);
|
73 |
+
$configModelMock->expects($this->any())
|
74 |
+
->method('showMasterPassFullCheckoutLearnMoreLink')
|
75 |
+
->will($this->returnValue(true));
|
76 |
+
|
77 |
+
$configModelMock->expects($this->any())
|
78 |
+
->method('getMasterpassLearnMoreUrl')
|
79 |
+
->will($this->returnValue('www.masterpass.com/learnmore/De/de'));
|
80 |
+
$this->replaceByMock('model', 'expercash/masterpass_config', $configModelMock);
|
81 |
+
|
82 |
+
$block = new Expercash_Expercash_Block_Masterpass_Fullcheckout_Shortcut();
|
83 |
+
$this->assertEquals('www.masterpass.com/learnmore/De/de', $block->getLearnMoreLink());
|
84 |
+
|
85 |
+
}
|
86 |
+
|
87 |
+
public function testGetLearnMoreLinkDisabled()
|
88 |
+
{
|
89 |
+
$configModelMock = $this->getModelMock('expercash/masterpass_config', array(
|
90 |
+
'showMasterPassFullCheckoutLearnMoreLink',
|
91 |
+
)
|
92 |
+
);
|
93 |
+
$configModelMock->expects($this->any())
|
94 |
+
->method('showMasterPassFullCheckoutLearnMoreLink')
|
95 |
+
->will($this->returnValue(false));
|
96 |
+
$this->replaceByMock('model', 'expercash/masterpass_config', $configModelMock);
|
97 |
+
|
98 |
+
$block = new Expercash_Expercash_Block_Masterpass_Fullcheckout_Shortcut();
|
99 |
+
$this->assertNull($block->getLearnMoreLink());
|
100 |
+
|
101 |
+
}
|
102 |
+
|
103 |
+
|
104 |
+
public function testGetImageUrl()
|
105 |
+
{
|
106 |
+
$configModelMock = $this->getModelMock('expercash/masterpass_config', array('getFullCheckoutImageUrl'));
|
107 |
+
$configModelMock->expects($this->any())
|
108 |
+
->method('getFullCheckoutImageUrl')
|
109 |
+
->will($this->returnValue('www.myImage.de'));
|
110 |
+
$this->replaceByMock('model', 'expercash/masterpass_config', $configModelMock);
|
111 |
+
|
112 |
+
$block = new Expercash_Expercash_Block_Masterpass_Fullcheckout_Shortcut();
|
113 |
+
|
114 |
+
$this->assertEquals('www.myImage.de', $block->getImageUrl());
|
115 |
+
$this->assertNotEquals('www.notMyImage.de', $block->getImageUrl());
|
116 |
+
|
117 |
+
}
|
118 |
+
|
119 |
+
|
120 |
+
public function testGetCheckoutUrl()
|
121 |
+
{
|
122 |
+
$configModelMock = $this->getModelMock('expercash/masterpass_config', array('getMasterpassFullCheckoutUrl'));
|
123 |
+
$configModelMock->expects($this->any())
|
124 |
+
->method('getMasterpassFullCheckoutUrl')
|
125 |
+
->will($this->returnValue('www.myImage.de/fullcheckout/start'));
|
126 |
+
$this->replaceByMock('model', 'expercash/masterpass_config', $configModelMock);
|
127 |
+
|
128 |
+
$block = new Expercash_Expercash_Block_Masterpass_Fullcheckout_Shortcut();
|
129 |
+
|
130 |
+
$this->assertEquals('www.myImage.de/fullcheckout/start', $block->getCheckoutUrl());
|
131 |
+
$this->assertNotEquals('www.myImage.de/fullcheckout/foo', $block->getCheckoutUrl());
|
132 |
+
|
133 |
+
}
|
134 |
+
|
135 |
+
|
136 |
+
public function testToHtmlShouldRender()
|
137 |
+
{
|
138 |
+
$this->assertEquals('', $this->invokeMethod('_toHtml'));
|
139 |
+
|
140 |
+
}
|
141 |
+
|
142 |
+
public function testToHtmlShouldNotRender()
|
143 |
+
{
|
144 |
+
|
145 |
+
$sessionMock = $this->getModelMock('customer/session', array('init', 'start'));
|
146 |
+
$this->replaceByMock('model', 'customer/session', $sessionMock);
|
147 |
+
|
148 |
+
$sessionMock = $this->getModelMock('checkout/session', array('init', 'start'));
|
149 |
+
$this->replaceByMock('model', 'checkout/session', $sessionMock);
|
150 |
+
|
151 |
+
$blockMock = $this->getBlockMock('expercash/masterpass_fullcheckout_shortcut', array(
|
152 |
+
'_beforeToHtml',
|
153 |
+
|
154 |
+
)
|
155 |
+
);
|
156 |
+
|
157 |
+
$blockMock->setShouldRender(false);
|
158 |
+
$this->assertEquals('', $blockMock->toHtml());
|
159 |
+
|
160 |
+
}
|
161 |
+
|
162 |
+
|
163 |
+
/**
|
164 |
+
* Call protected/private method of a class.
|
165 |
+
*
|
166 |
+
* @param object $object Instantiated object that we will run method on.
|
167 |
+
* @param string $methodName Method name to call
|
168 |
+
* @param array $parameters Array of parameters to pass into method.
|
169 |
+
*
|
170 |
+
* @return mixed Method return.
|
171 |
+
*/
|
172 |
+
public function invokeMethod($methodName, array $parameters = array())
|
173 |
+
{
|
174 |
+
$object = new Expercash_Expercash_Block_Masterpass_Fullcheckout_Shortcut();
|
175 |
+
$reflection = new \ReflectionClass(get_class($object));
|
176 |
+
$method = $reflection->getMethod($methodName);
|
177 |
+
$method->setAccessible(true);
|
178 |
+
return $method->invokeArgs($object, $parameters);
|
179 |
+
}
|
180 |
+
|
181 |
+
|
182 |
+
}
|
app/code/community/Expercash/Expercash/Test/Controller/ExpercashControllerTest.php
ADDED
@@ -0,0 +1,182 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* To change this template, choose Tools | Templates
|
5 |
+
* and open the template in the editor.
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Description of ExpercashControllerTest
|
10 |
+
*
|
11 |
+
* @author sebastian
|
12 |
+
*/
|
13 |
+
class Expercash_Expercash_Test_Controller_ExpercashControllerTest
|
14 |
+
extends EcomDev_PHPUnit_Test_Case_Controller
|
15 |
+
{
|
16 |
+
|
17 |
+
protected $store;
|
18 |
+
|
19 |
+
public function setUp()
|
20 |
+
{
|
21 |
+
$this->store = Mage::app()->getStore(0)->load(0);
|
22 |
+
parent::setup();
|
23 |
+
}
|
24 |
+
|
25 |
+
|
26 |
+
/**
|
27 |
+
* @loadFixture orders
|
28 |
+
* @loadExpectation orders
|
29 |
+
*/
|
30 |
+
public function testCheckReturnedDataTrue()
|
31 |
+
{
|
32 |
+
|
33 |
+
if (Mage::helper('expercash/data')->isBelowCE17()) {
|
34 |
+
$this->markTestSkipped('Magento Version not supported by Ecom Dev');
|
35 |
+
return;
|
36 |
+
}
|
37 |
+
|
38 |
+
$helperMock = $this->getHelperMock(
|
39 |
+
'expercash/payment', array('checkReturnedData')
|
40 |
+
);
|
41 |
+
$helperMock->expects($this->any())
|
42 |
+
->method('checkReturnedData')
|
43 |
+
->will($this->returnValue(true));
|
44 |
+
$this->replaceByMock('helper', 'expercash/payment', $helperMock);
|
45 |
+
$order = Mage::getModel('sales/order')->load(11);
|
46 |
+
$this->assertEquals(0, $order->getEmailSent());
|
47 |
+
Mage::app()->getRequest()->setParams($this->getResponseParams());
|
48 |
+
|
49 |
+
$this->dispatch('expercash/expercash/notify', array('_store' => 'default'));
|
50 |
+
|
51 |
+
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* @loadFixture orders
|
56 |
+
* @loadExpectation orders
|
57 |
+
*/
|
58 |
+
public function testCheckReturnedDataNoRoute()
|
59 |
+
{
|
60 |
+
|
61 |
+
if (Mage::helper('expercash/data')->isBelowCE17()) {
|
62 |
+
$this->markTestSkipped('Magento Version not supported by Ecom Dev');
|
63 |
+
return;
|
64 |
+
}
|
65 |
+
|
66 |
+
$helperMock = $this->getHelperMock(
|
67 |
+
'expercash/payment', array('checkReturnedData')
|
68 |
+
);
|
69 |
+
$helperMock->expects($this->any())
|
70 |
+
->method('checkReturnedData')
|
71 |
+
->will($this->returnValue(true));
|
72 |
+
$this->replaceByMock('helper', 'expercash/payment', $helperMock);
|
73 |
+
|
74 |
+
Mage::app()->getRequest()->setMethod('POST');
|
75 |
+
Mage::app()->getRequest()->setParams($this->getResponseParams());
|
76 |
+
$this->dispatch('expercash/expercash/notify');
|
77 |
+
|
78 |
+
}
|
79 |
+
|
80 |
+
|
81 |
+
|
82 |
+
/**
|
83 |
+
* @loadFixture orders.yaml
|
84 |
+
*/
|
85 |
+
public function testBarzahlenPaid()
|
86 |
+
{
|
87 |
+
|
88 |
+
if (Mage::helper('expercash/data')->isBelowCE17()) {
|
89 |
+
$this->markTestSkipped('Magento Version not supported by Ecom Dev');
|
90 |
+
return;
|
91 |
+
}
|
92 |
+
|
93 |
+
$helperMock = $this->getHelperMock('expercash/payment', array('setExperCashData', 'getCheckSum'));
|
94 |
+
$helperMock->expects($this->any())
|
95 |
+
->method('getCheckSum')
|
96 |
+
->will($this->returnValue('3c564b7cd1cd16ab30460e835163ead7'));
|
97 |
+
$this->replaceByMock('helper', 'expercash/payment', $helperMock);
|
98 |
+
|
99 |
+
Mage::app()->getRequest()->setParams($this->getBarzahlenPaidCallParams());
|
100 |
+
/** @var $order Mage_Sales_Model_Order */
|
101 |
+
$order = Mage::getModel('sales/order')->load(12);
|
102 |
+
$this->assertEquals(1, $order->getEmailSent());
|
103 |
+
$this->dispatch('expercash/expercash/notify');
|
104 |
+
$order = Mage::getModel('sales/order')->load(12);
|
105 |
+
$this->assertEquals(1, $order->getEmailSent());
|
106 |
+
$this->assertEquals(Expercash_Expercash_Model_Expercashpc::BARZAHLEN_STATUS_PAID, $order->getPayment()->getAdditionalInformation('paymentStatus'));
|
107 |
+
|
108 |
+
|
109 |
+
}
|
110 |
+
|
111 |
+
/**
|
112 |
+
* @loadFixture orders.yaml
|
113 |
+
* @expectedException Mage_Core_Exception
|
114 |
+
* @expectedExceptionMessage Response is not correct.
|
115 |
+
*/
|
116 |
+
public function testBarzahlenSecondCallToOld()
|
117 |
+
{
|
118 |
+
if (Mage::helper('expercash/data')->isBelowCE17()) {
|
119 |
+
$this->markTestSkipped('Magento Version not supported by Ecom Dev');
|
120 |
+
return;
|
121 |
+
}
|
122 |
+
|
123 |
+
$helperMock = $this->getHelperMock('expercash/payment', array('setExperCashData', 'getCheckSum'));
|
124 |
+
$helperMock->expects($this->any())
|
125 |
+
->method('getCheckSum')
|
126 |
+
->will($this->returnValue('3c564b7cd1cd16ab30460e835163ead7'));
|
127 |
+
$this->replaceByMock('helper', 'expercash/payment', $helperMock);
|
128 |
+
|
129 |
+
Mage::app()->getRequest()->setParams($this->getBarzahlenOpenParams());
|
130 |
+
$this->dispatch('expercash/expercash/notify');
|
131 |
+
}
|
132 |
+
|
133 |
+
|
134 |
+
protected function getResponseParams()
|
135 |
+
{
|
136 |
+
return array(
|
137 |
+
'transactionId' => 100000005,
|
138 |
+
'amount' => 3500,
|
139 |
+
'currency' => 'EUR',
|
140 |
+
'paymentMethod' => 'foo',
|
141 |
+
'GuTID' => 'CC1724106675000',
|
142 |
+
'exportKey' => '972f10a9ef67f0583bc0c9e33709670d'
|
143 |
+
);
|
144 |
+
}
|
145 |
+
|
146 |
+
protected function getBarzahlenPaidCallParams()
|
147 |
+
{
|
148 |
+
$params = array(
|
149 |
+
'epi' => '1',
|
150 |
+
'transactionId' => '100000100',
|
151 |
+
'amount' => '3500',
|
152 |
+
'currency' => 'EUR',
|
153 |
+
'paymentMethod' => 'BZ',
|
154 |
+
'GuTID' => 'BZ2006472637000',
|
155 |
+
'exportKey' => '3c564b7cd1cd16ab30460e835163ead7',
|
156 |
+
'GuTID2' => '316235217',
|
157 |
+
'GuTID2Hash' => 'b8bc23da725e115530a11bd62b429af2',
|
158 |
+
'owner' => 'SEBASTIAN ERTNER',
|
159 |
+
'paymentStatus' => 'PAID'
|
160 |
+
);
|
161 |
+
return $params;
|
162 |
+
}
|
163 |
+
|
164 |
+
protected function getBarzahlenOpenParams()
|
165 |
+
{
|
166 |
+
$params = array(
|
167 |
+
'epi' => '1',
|
168 |
+
'transactionId' => '100000101',
|
169 |
+
'amount' => '3500',
|
170 |
+
'currency' => 'EUR',
|
171 |
+
'paymentMethod' => 'BZ',
|
172 |
+
'GuTID' => 'BZ2006472637000',
|
173 |
+
'exportKey' => '3c564b7cd1cd16ab30460e835163ead7',
|
174 |
+
'GuTID2' => '316235217',
|
175 |
+
'GuTID2Hash' => 'b8bc23da725e115530a11bd62b429af2',
|
176 |
+
'owner' => 'SEBASTIAN ERTNER',
|
177 |
+
'paymentStatus' => 'PAID'
|
178 |
+
);
|
179 |
+
return $params;
|
180 |
+
}
|
181 |
+
|
182 |
+
}
|
app/code/community/Expercash/Expercash/Test/Controller/ExpercashControllerTest/expectations/orders.yaml
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
url:"https://epi.expercash.net/epi_popup2.php?popupId=foo&jobId=11&transactionId=11&amount=11900¤cy=&paymentMethod=foo&returnUrl=http%3A%2F%2Fser-dev.magento.nrdev.de%2Findex.php%2Fexpercash%2Fexpercash%2Fsuccess%2F&errorUrl=http%3A%2F%2Fser-dev.magento.nrdev.de%2Findex.php%2Fexpercash%2Fexpercash%2Ferror%2F¬ifyUrl=http%3A%2F%2Fser-dev.magento.nrdev.de%2Findex.php%2Fexpercash%2Fexpercash%2Fnotify%2F&profile=foo&popupKey=fdb64dabed0a4894bed2ec718da2856d&cssUrl=foo&language=en"
|
app/code/community/Expercash/Expercash/Test/Controller/ExpercashControllerTest/fixtures/orders.yaml
ADDED
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
tables:
|
2 |
+
sales/order:
|
3 |
+
|
4 |
+
- entity_id: 11
|
5 |
+
increment_id: 100000005
|
6 |
+
shipping_address_id: 42
|
7 |
+
base_grand_total: 119.00
|
8 |
+
grand_total: 119.00
|
9 |
+
currency: 'EUR'
|
10 |
+
customer_gender: 1
|
11 |
+
shipping_method: 'flatrate_flatrate'
|
12 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
13 |
+
state: 'pending_payment'
|
14 |
+
status: 'pending_payment'
|
15 |
+
email_sent: 0
|
16 |
+
|
17 |
+
- entity_id: 12
|
18 |
+
increment_id: 100000100
|
19 |
+
shipping_address_id: 42
|
20 |
+
base_grand_total: 119.00
|
21 |
+
grand_total: 119.00
|
22 |
+
currency: 'EUR'
|
23 |
+
customer_gender: 1
|
24 |
+
shipping_method: 'flatrate_flatrate'
|
25 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
26 |
+
state: 'pending_payment'
|
27 |
+
status: 'pending_payment'
|
28 |
+
email_sent: 1
|
29 |
+
|
30 |
+
- entity_id: 13
|
31 |
+
increment_id: 100000101
|
32 |
+
shipping_address_id: 42
|
33 |
+
base_grand_total: 119.00
|
34 |
+
grand_total: 119.00
|
35 |
+
currency: 'EUR'
|
36 |
+
customer_gender: 1
|
37 |
+
shipping_method: 'flatrate_flatrate'
|
38 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
39 |
+
state: 'pending_payment'
|
40 |
+
status: 'pending_payment'
|
41 |
+
created_at: '2013-12-03 11:46:08'
|
42 |
+
email_sent: 0
|
43 |
+
|
44 |
+
- entity_id: 2
|
45 |
+
increment_id: 100000055
|
46 |
+
quote_id: 2
|
47 |
+
shipping_address_id: 42
|
48 |
+
base_grand_total: 119.00
|
49 |
+
grand_total: 119.00
|
50 |
+
currency: 'EUR'
|
51 |
+
customer_gender: 1
|
52 |
+
shipping_method: 'flatrate_flatrate'
|
53 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
54 |
+
email_sent: 0
|
55 |
+
|
56 |
+
- entity_id: 3
|
57 |
+
increment_id: 100000055
|
58 |
+
quote_id: 3
|
59 |
+
shipping_address_id: 42
|
60 |
+
base_grand_total: 119.00
|
61 |
+
grand_total: 119.00
|
62 |
+
currency: 'EUR'
|
63 |
+
customer_gender: 1
|
64 |
+
shipping_method: 'flatrate_flatrate'
|
65 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
66 |
+
email_sent: 0
|
67 |
+
|
68 |
+
sales/order_payment:
|
69 |
+
- entity_id: 11
|
70 |
+
parent_id: 11
|
71 |
+
method: 'expercashcc'
|
72 |
+
|
73 |
+
- entity_id: 12
|
74 |
+
parent_id: 12
|
75 |
+
method: 'expercashpc'
|
76 |
+
additional_information: a:3:{s:5:"owner";s:16:"SEBASTIAN ERTNER";s:13:"paymentStatus";s:4:"OPEN";s:19:"notifyActionCounter";i:1;}
|
77 |
+
|
78 |
+
- entity_id: 13
|
79 |
+
parent_id: 13
|
80 |
+
method: 'expercashpc'
|
81 |
+
additional_information: a:3:{s:5:"owner";s:16:"SEBASTIAN ERTNER";s:13:"paymentStatus";s:4:"PAID";s:19:"notifyActionCounter";i:1;}
|
app/code/community/Expercash/Expercash/Test/Helper/DataTest.php
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Expercash_Expercash_Test_Helper_DataTest extends EcomDev_PHPUnit_Test_Case_Controller
|
4 |
+
{
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Test for getAdditionalPaymentParams
|
8 |
+
*/
|
9 |
+
public function testGetAdditionalPaymentParams()
|
10 |
+
{
|
11 |
+
$paymentParams = array(
|
12 |
+
'owner',
|
13 |
+
'maskedPan',
|
14 |
+
'cardScheme',
|
15 |
+
'validThru',
|
16 |
+
'panCountry',
|
17 |
+
'ipCountry',
|
18 |
+
'attemptsTotal',
|
19 |
+
'attemptsSameAction',
|
20 |
+
'3dsStatus',
|
21 |
+
'paymentStatus'
|
22 |
+
);
|
23 |
+
$this->assertEquals($paymentParams, Mage::helper('expercash/data')->getAdditionalPaymentParams());
|
24 |
+
}
|
25 |
+
}
|
app/code/community/Expercash/Expercash/Test/Helper/MasterpassTest.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Expercash_Expercash_Test_Helper_MasterpassTest
|
25 |
+
*
|
26 |
+
* @category Expercash
|
27 |
+
* @package Expercash_Expercash
|
28 |
+
*/
|
29 |
+
class Expercash_Expercash_Test_Helper_MasterpassTest extends EcomDev_PHPUnit_Test_Case
|
30 |
+
{
|
31 |
+
/**
|
32 |
+
* @test
|
33 |
+
* @expectedException Mage_Core_Exception
|
34 |
+
* @expectedExceptionMessage Validate params: Signature and build hash do not match!
|
35 |
+
*/
|
36 |
+
public function validateParamsTypeCheck()
|
37 |
+
{
|
38 |
+
$helper = Mage::helper('expercash/masterpass');
|
39 |
+
$helper->validateParams(array(
|
40 |
+
'notificationSignature' => true,
|
41 |
+
));
|
42 |
+
}
|
43 |
+
}
|
app/code/community/Expercash/Expercash/Test/Helper/PaymentTest.php
ADDED
@@ -0,0 +1,356 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Expercash_Expercash_Test_Helper_PaymentTest
|
4 |
+
extends EcomDev_PHPUnit_Test_Case
|
5 |
+
{
|
6 |
+
private $_helper;
|
7 |
+
private $store;
|
8 |
+
|
9 |
+
public function setUp()
|
10 |
+
{
|
11 |
+
parent::setup();
|
12 |
+
$this->_helper = Mage::helper('expercash/payment');
|
13 |
+
$this->store = Mage::app()->getStore(1)->load(1);
|
14 |
+
$this->store->resetConfig();
|
15 |
+
}
|
16 |
+
|
17 |
+
/**
|
18 |
+
* send no invoice mail if it is denied by configuration
|
19 |
+
*/
|
20 |
+
public function testSendNoInvoiceToCustomerIfDenied()
|
21 |
+
{
|
22 |
+
$this->store->setConfig('payment/expercashcc/sendinvoicemail', 0);
|
23 |
+
$this->assertFalse(
|
24 |
+
(bool)Mage::getModel('expercash/config')->getConfigData(
|
25 |
+
'sendinvoicemail', 'expercashcc'
|
26 |
+
)
|
27 |
+
);
|
28 |
+
$payment = Mage::getModel('sales/order_payment');
|
29 |
+
$payment->setMethod('expercashcc');
|
30 |
+
$order = Mage::getModel('sales/order');
|
31 |
+
$order->setPayment($payment);
|
32 |
+
|
33 |
+
$sentInvoice = $this->getModelMock(
|
34 |
+
'sales/order_invoice', array(
|
35 |
+
'getEmailSent',
|
36 |
+
'sendEmail',
|
37 |
+
'getOrder'
|
38 |
+
)
|
39 |
+
);
|
40 |
+
|
41 |
+
$sentInvoice->expects($this->any())
|
42 |
+
->method('getOrder')
|
43 |
+
->will($this->returnValue($order));
|
44 |
+
|
45 |
+
|
46 |
+
$sentInvoice->expects($this->any())
|
47 |
+
->method('getEmailSent')
|
48 |
+
->will($this->returnValue(false));
|
49 |
+
|
50 |
+
$sentInvoice->expects($this->never())
|
51 |
+
->method('sendEmail');
|
52 |
+
|
53 |
+
$this->_helper->sendInvoiceToCustomer($sentInvoice);
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* send no invoice mail if it was already sent
|
58 |
+
*/
|
59 |
+
public function testSendNoInvoiceToCustomerIfAlreadySent()
|
60 |
+
{
|
61 |
+
$this->store->setConfig('payment/expercashcc/sendinvoicemail', 1);
|
62 |
+
$this->assertTrue(
|
63 |
+
(bool)Mage::getModel('expercash/config')->getConfigData(
|
64 |
+
'sendinvoicemail', 'expercashcc', $this->store->getId()
|
65 |
+
)
|
66 |
+
);
|
67 |
+
$payment = Mage::getModel('sales/order_payment');
|
68 |
+
$payment->setMethod('expercashcc');
|
69 |
+
$order = Mage::getModel('sales/order');
|
70 |
+
$order->setPayment($payment);
|
71 |
+
|
72 |
+
$someInvoice = $this->getModelMock(
|
73 |
+
'sales/order_invoice', array(
|
74 |
+
'getEmailSent',
|
75 |
+
'sendEmail',
|
76 |
+
'getOrder'
|
77 |
+
)
|
78 |
+
);
|
79 |
+
|
80 |
+
$someInvoice->expects($this->any())
|
81 |
+
->method('getOrder')
|
82 |
+
->will($this->returnValue($order));
|
83 |
+
|
84 |
+
$someInvoice->expects($this->any())
|
85 |
+
->method('getEmailSent')
|
86 |
+
->will($this->returnValue(true));
|
87 |
+
$someInvoice->expects($this->never())
|
88 |
+
->method('sendEmail');
|
89 |
+
$this->_helper->sendInvoiceToCustomer($someInvoice);
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* send invoice mail
|
94 |
+
*/
|
95 |
+
public function testSendInvoiceToCustomerIfEnabled()
|
96 |
+
{
|
97 |
+
$this->store->setConfig('payment/expercashcc/sendinvoicemail', 1);
|
98 |
+
$this->assertTrue(
|
99 |
+
(bool)Mage::getModel('expercash/config')->getConfigData(
|
100 |
+
'sendinvoicemail', 'expercashcc', $this->store->getId()
|
101 |
+
)
|
102 |
+
);
|
103 |
+
$payment = Mage::getModel('sales/order_payment');
|
104 |
+
$payment->setMethod('expercashcc');
|
105 |
+
$order = Mage::getModel('sales/order');
|
106 |
+
$order->setPayment($payment);
|
107 |
+
|
108 |
+
|
109 |
+
$anotherInvoice = $this->getModelMock(
|
110 |
+
'sales/order_invoice', array(
|
111 |
+
'getEmailSent',
|
112 |
+
'sendEmail',
|
113 |
+
'getOrder'
|
114 |
+
)
|
115 |
+
);
|
116 |
+
|
117 |
+
$anotherInvoice->expects($this->any())
|
118 |
+
->method('getOrder')
|
119 |
+
->will($this->returnValue($order));
|
120 |
+
|
121 |
+
$anotherInvoice->expects($this->any())
|
122 |
+
->method('getEmailSent')
|
123 |
+
->will($this->returnValue(false));
|
124 |
+
$anotherInvoice->expects($this->any())
|
125 |
+
->method('sendEmail')
|
126 |
+
->with($this->equalTo(true));
|
127 |
+
$this->_helper->sendInvoiceToCustomer($anotherInvoice);
|
128 |
+
}
|
129 |
+
|
130 |
+
|
131 |
+
/**
|
132 |
+
* @expectedException Mage_Core_Exception
|
133 |
+
* @expectedExceptionMessage Response is not correct.
|
134 |
+
*/
|
135 |
+
public function testCheckReturnedDataResponseParamsWrong()
|
136 |
+
{
|
137 |
+
Mage::helper('expercash/payment')->checkReturnedData(
|
138 |
+
array('test', 'test2')
|
139 |
+
);
|
140 |
+
|
141 |
+
}
|
142 |
+
|
143 |
+
/**
|
144 |
+
* @loadFixture orders.yaml
|
145 |
+
* @expectedException Mage_Core_Exception
|
146 |
+
* @expectedExceptionMessage Response is not correct.
|
147 |
+
*/
|
148 |
+
public function testCheckReturnedDataDependentParamMissing()
|
149 |
+
{
|
150 |
+
$order = Mage::getModel('sales/order')->load(11);
|
151 |
+
$this->store->setConfig('payment/expercashpc/active', 1);
|
152 |
+
|
153 |
+
$paymentHelperMock = $this->getHelperMock(
|
154 |
+
'expercash/payment', array('getOrder')
|
155 |
+
);
|
156 |
+
$paymentHelperMock->expects($this->any())
|
157 |
+
->method('getOrder')
|
158 |
+
->will($this->returnValue($order));
|
159 |
+
$this->replaceByMock('helper', 'expercash/payment', $paymentHelperMock);
|
160 |
+
|
161 |
+
$paymentHelperMock->checkReturnedData($this->getResponseParams());
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* @loadFixture orders.yaml
|
166 |
+
*/
|
167 |
+
public function testCheckReturnedDataSuccess()
|
168 |
+
{
|
169 |
+
$order = Mage::getModel('sales/order')->load(11);
|
170 |
+
$this->store->setConfig('payment/expercashpc/active', 1);
|
171 |
+
|
172 |
+
$paymentHelperMock = $this->getHelperMock(
|
173 |
+
'expercash/payment', array(
|
174 |
+
'getOrder',
|
175 |
+
'setExperCashData'
|
176 |
+
)
|
177 |
+
);
|
178 |
+
$paymentHelperMock->expects($this->any())
|
179 |
+
->method('getOrder')
|
180 |
+
->will($this->returnValue($order));
|
181 |
+
$this->replaceByMock('helper', 'expercash/payment', $paymentHelperMock);
|
182 |
+
|
183 |
+
$params = $this->getResponseParams();
|
184 |
+
$params['paymentStatus'] = 'paid';
|
185 |
+
$this->assertTrue($paymentHelperMock->checkReturnedData($params));
|
186 |
+
$order = Mage::getModel('sales/order')->load(11);
|
187 |
+
$this->assertEquals(1, $order->getEmailSent());
|
188 |
+
|
189 |
+
|
190 |
+
}
|
191 |
+
|
192 |
+
/**
|
193 |
+
* @loadFixture orders.yaml
|
194 |
+
*/
|
195 |
+
public function testCheckReturnedDataFailed()
|
196 |
+
{
|
197 |
+
$order = Mage::getModel('sales/order')->load(11);
|
198 |
+
$this->store->setConfig('payment/expercashpc/active', 1);
|
199 |
+
|
200 |
+
$paymentHelperMock = $this->getHelperMock(
|
201 |
+
'expercash/payment', array(
|
202 |
+
'getOrder',
|
203 |
+
'setExperCashData',
|
204 |
+
'getChecksum'
|
205 |
+
)
|
206 |
+
);
|
207 |
+
$paymentHelperMock->expects($this->any())
|
208 |
+
->method('getOrder')
|
209 |
+
->will($this->returnValue($order));
|
210 |
+
|
211 |
+
$paymentHelperMock->expects($this->any())
|
212 |
+
->method('getChecksum')
|
213 |
+
->will($this->returnValue('4711'));
|
214 |
+
|
215 |
+
$params = $this->getResponseParams();
|
216 |
+
$params['paymentStatus'] = 'paid';
|
217 |
+
$this->assertFalse($paymentHelperMock->checkReturnedData($params));
|
218 |
+
/** @var Mage_Sales_Model_Order $order */
|
219 |
+
$order = Mage::getModel('sales/order')->load(11);
|
220 |
+
$this->assertTrue($order->isCanceled());
|
221 |
+
|
222 |
+
|
223 |
+
}
|
224 |
+
|
225 |
+
public function testValidateNonPcExpercashPayments()
|
226 |
+
{
|
227 |
+
$payment = Mage::getModel('sales/order_payment');
|
228 |
+
$payment->setMethod('expercashcc');
|
229 |
+
$payment->setAdditionalInformation('notifyActionCounter', 2);
|
230 |
+
$this->assertFalse($this->invokeMethod('validateNonPcExpercashPayments', array($payment)));
|
231 |
+
$payment->setMethod('expercashpc');
|
232 |
+
$payment->setAdditionalInformation('notifyActionCounter', 1);
|
233 |
+
$this->assertTrue($this->invokeMethod('validateNonPcExpercashPayments', array($payment)));
|
234 |
+
|
235 |
+
}
|
236 |
+
|
237 |
+
public function testValidateBarzahlenSecondCall()
|
238 |
+
{
|
239 |
+
$order = Mage::getModel('sales/order');
|
240 |
+
$now = new DateTime();
|
241 |
+
$date = $now->sub(new DateInterval('P5D'))->format('Y-m-d');
|
242 |
+
$order->setCreatedAt($date);
|
243 |
+
$this->assertTrue($this->invokeMethod('validateBarzahlenSecondCall', array($order)));
|
244 |
+
$date = $now->sub(new DateInterval('P15D'))->format('Y-m-d');
|
245 |
+
$order->setCreatedAt($date);
|
246 |
+
$this->assertFalse($this->invokeMethod('validateBarzahlenSecondCall', array($order)));
|
247 |
+
|
248 |
+
}
|
249 |
+
|
250 |
+
|
251 |
+
/**
|
252 |
+
* Call protected/private method of a class.
|
253 |
+
*
|
254 |
+
* @param object $object Instantiated object that we will run method on.
|
255 |
+
* @param string $methodName Method name to call
|
256 |
+
* @param array $parameters Array of parameters to pass into method.
|
257 |
+
*
|
258 |
+
* @return mixed Method return.
|
259 |
+
*/
|
260 |
+
public function invokeMethod($methodName, array $parameters = array()
|
261 |
+
) {
|
262 |
+
$object = Mage::helper('expercash/payment');
|
263 |
+
$reflection = new \ReflectionClass(get_class($object));
|
264 |
+
$method = $reflection->getMethod($methodName);
|
265 |
+
$method->setAccessible(true);
|
266 |
+
return $method->invokeArgs($object, $parameters);
|
267 |
+
}
|
268 |
+
|
269 |
+
public function testCheckResponseParams()
|
270 |
+
{
|
271 |
+
$params = array ('Foo' => 1);
|
272 |
+
$this->assertFalse($this->invokeMethod('checkResponseParams',array($params)));
|
273 |
+
$correctParams = $this->getResponseParams();
|
274 |
+
$this->assertTrue($this->invokeMethod('checkResponseParams',array($correctParams)));
|
275 |
+
}
|
276 |
+
|
277 |
+
|
278 |
+
public function testCheckOrderDependentConditions()
|
279 |
+
{
|
280 |
+
|
281 |
+
$order = Mage::getModel('sales/order');
|
282 |
+
$payment = Mage::getModel('sales/order_payment');
|
283 |
+
$payment->setMethod('foo');
|
284 |
+
$order->setPayment($payment);
|
285 |
+
$params = $this->getResponseParams();
|
286 |
+
$this->assertTrue($this->invokeMethod('checkOrderDependentConditions', array($order,$params)));
|
287 |
+
$payment->setMethod('expercashpc');
|
288 |
+
$order->setPayment($payment);
|
289 |
+
$this->assertFalse($this->invokeMethod('checkOrderDependentConditions', array($order,$params)));
|
290 |
+
|
291 |
+
}
|
292 |
+
|
293 |
+
public function testSetExpercashRef()
|
294 |
+
{
|
295 |
+
$order = Mage::getModel('sales/order');
|
296 |
+
$order->setStoreId(0);
|
297 |
+
$params = array('GuTID' => 1234);
|
298 |
+
$order->setQuoteId(5);
|
299 |
+
$modelMock = $this->getModelMock('expercash/expercashpc', array('getConfigData'));
|
300 |
+
$modelMock->expects($this->any())
|
301 |
+
->method('getConfigData')
|
302 |
+
->will($this->returnValue(Expercash_Expercash_Model_Expercashcc::PAYMENT_TYPE_CC_BUY));
|
303 |
+
$this->replaceByMock('Model', 'expercash/expercashpc', $modelMock);
|
304 |
+
|
305 |
+
$this->invokeMethod('setExpercashRef', array($params,$modelMock, $order));
|
306 |
+
$experCashData = Mage::helper('expercash/payment')->getExperCashData(5);
|
307 |
+
// $this->assertEquals('expercash_gutid',
|
308 |
+
// );
|
309 |
+
|
310 |
+
|
311 |
+
|
312 |
+
}
|
313 |
+
|
314 |
+
/**
|
315 |
+
* @loadFixture orders.yaml
|
316 |
+
*/
|
317 |
+
public function testCreateInvoiceForBarzahlen()
|
318 |
+
{
|
319 |
+
$order = Mage::getModel('sales/order')->load(11);
|
320 |
+
|
321 |
+
$paymentHelperMock = $this->getHelperMock('expercash/payment', array('saveInvoice'));
|
322 |
+
$paymentHelperMock->expects($this->any())
|
323 |
+
->method('saveInvoice')
|
324 |
+
->will($this->returnValue(true));
|
325 |
+
$this->replaceByMock('helper', 'expercash/payment', $paymentHelperMock);
|
326 |
+
|
327 |
+
$paymentModelMock = $this->getModelMock('expercash/expercashpc', array('getConfigData'));
|
328 |
+
$paymentModelMock->expects($this->any())
|
329 |
+
->method('getConfigData')
|
330 |
+
->will($this->returnValue(true));
|
331 |
+
$this->replaceByMock('model', 'expercash/expercashpc', $paymentModelMock);
|
332 |
+
|
333 |
+
$response = $this->getResponseParams();
|
334 |
+
$response['paymentStatus'] = 'PAID';
|
335 |
+
|
336 |
+
$this->invokeMethod('createInvoice', array($paymentModelMock, $order, $response));
|
337 |
+
$this->assertEquals(Mage_Sales_Model_Order::STATE_PROCESSING , $order->getState());
|
338 |
+
|
339 |
+
|
340 |
+
|
341 |
+
|
342 |
+
}
|
343 |
+
|
344 |
+
protected function getResponseParams()
|
345 |
+
{
|
346 |
+
return array(
|
347 |
+
'transactionId' => 100000005,
|
348 |
+
'amount' => 3500,
|
349 |
+
'currency' => 'EUR',
|
350 |
+
'paymentMethod' => 'expercashpc',
|
351 |
+
'GuTID' => 'CC1724106675000',
|
352 |
+
'exportKey' => '2dd0b4a21e99868e73b91865a2c3fb96',
|
353 |
+
);
|
354 |
+
}
|
355 |
+
|
356 |
+
}
|
app/code/community/Expercash/Expercash/Test/Helper/PaymentTest/fixtures/orders.yaml
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
tables:
|
2 |
+
sales/order:
|
3 |
+
|
4 |
+
- entity_id: 11
|
5 |
+
increment_id: 100000005
|
6 |
+
shipping_address_id: 42
|
7 |
+
base_grand_total: 119.00
|
8 |
+
grand_total: 119.00
|
9 |
+
currency: 'EUR'
|
10 |
+
customer_gender: 1
|
11 |
+
shipping_method: 'flatrate_flatrate'
|
12 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
13 |
+
state: 'pending_payment'
|
14 |
+
status: 'pending_payment'
|
15 |
+
store_id: 1
|
16 |
+
|
17 |
+
- entity_id: 2
|
18 |
+
increment_id: 100000055
|
19 |
+
quote_id: 2
|
20 |
+
shipping_address_id: 42
|
21 |
+
base_grand_total: 119.00
|
22 |
+
grand_total: 119.00
|
23 |
+
currency: 'EUR'
|
24 |
+
customer_gender: 1
|
25 |
+
shipping_method: 'flatrate_flatrate'
|
26 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
27 |
+
|
28 |
+
- entity_id: 3
|
29 |
+
increment_id: 100000055
|
30 |
+
quote_id: 3
|
31 |
+
shipping_address_id: 42
|
32 |
+
base_grand_total: 119.00
|
33 |
+
grand_total: 119.00
|
34 |
+
currency: 'EUR'
|
35 |
+
customer_gender: 1
|
36 |
+
shipping_method: 'flatrate_flatrate'
|
37 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
38 |
+
|
39 |
+
sales/order_item:
|
40 |
+
- item_id: 11
|
41 |
+
order_id: 11
|
42 |
+
qty_ordered: 3.0000
|
43 |
+
qty_canceled: 0.0000
|
44 |
+
qty_to_invoice: 3
|
45 |
+
|
46 |
+
|
47 |
+
sales/order_payment:
|
48 |
+
- entity_id: 11
|
49 |
+
parent_id: 11
|
50 |
+
method: 'expercashpc'
|
app/code/community/Expercash/Expercash/Test/Model/Api/AbstractTest.php
ADDED
@@ -0,0 +1,145 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Expercash_Expercash_Test_Model_Api_AbstractTest extends EcomDev_PHPUnit_Test_Case_Config
|
3 |
+
{
|
4 |
+
public function test_PostRequest()
|
5 |
+
{
|
6 |
+
$configModelMock = $this->getModelMock('expercash/config',array(
|
7 |
+
'getEpiUrl'
|
8 |
+
)
|
9 |
+
);
|
10 |
+
$configModelMock->expects($this->once())
|
11 |
+
->method('getEpiUrl')
|
12 |
+
->will($this->returnValue('http://test.gateway.com'));
|
13 |
+
$this->replaceByMock('model', 'expercash/config', $configModelMock);
|
14 |
+
|
15 |
+
$urlArray = Array(
|
16 |
+
"pid" => 11,
|
17 |
+
"pkey" => 12,
|
18 |
+
"cref" => 123456,
|
19 |
+
'amount' => 45000,
|
20 |
+
"action" => 'cc_authorize',
|
21 |
+
"reference" => 55555
|
22 |
+
);
|
23 |
+
|
24 |
+
$fakeResponse = new Varien_Object();
|
25 |
+
$fakeResponse->setBody('test me');
|
26 |
+
$fakeClient = $this->getMock('Varien_Http_Client', array('request'));
|
27 |
+
$fakeClient->expects($this->any())
|
28 |
+
->method('request')
|
29 |
+
->will($this->returnValue($fakeResponse));
|
30 |
+
|
31 |
+
$clientMock = $this->getModelMock('expercash/api_capture', array(
|
32 |
+
'getClient'
|
33 |
+
)
|
34 |
+
);
|
35 |
+
$clientMock->expects($this->once())
|
36 |
+
->method('getClient')
|
37 |
+
->will($this->returnValue($fakeClient));
|
38 |
+
$this->replaceByMock('model', 'expercash/api_capture', $clientMock);
|
39 |
+
|
40 |
+
$reflectionClass = new ReflectionClass('Expercash_Expercash_Model_Api_Capture');
|
41 |
+
$method = $reflectionClass->getMethod('_postRequest');
|
42 |
+
$method->setAccessible(true);
|
43 |
+
$captureClass = Mage::getModel('expercash/api_capture');
|
44 |
+
|
45 |
+
$this->assertEquals('test me', $method->invoke($captureClass, $urlArray));
|
46 |
+
}
|
47 |
+
|
48 |
+
|
49 |
+
public function test_PostRequestWithException()
|
50 |
+
{
|
51 |
+
$configModelMock = $this->getModelMock('expercash/config',array(
|
52 |
+
'getEpiUrl'
|
53 |
+
)
|
54 |
+
);
|
55 |
+
$configModelMock->expects($this->once())
|
56 |
+
->method('getEpiUrl')
|
57 |
+
->will($this->returnValue('http://test.gateway.com'));
|
58 |
+
$this->replaceByMock('model', 'expercash/config', $configModelMock);
|
59 |
+
|
60 |
+
$urlArray = Array(
|
61 |
+
"pid" => 11,
|
62 |
+
"pkey" => 12,
|
63 |
+
"cref" => 123456,
|
64 |
+
'amount' => 45000,
|
65 |
+
"action" => 'cc_authorize',
|
66 |
+
"reference" => 55555
|
67 |
+
);
|
68 |
+
|
69 |
+
$fakeResponse = new Varien_Object();
|
70 |
+
$fakeResponse->setBody('test me');
|
71 |
+
$fakeClient = $this->getMock('Varien_Http_Client', array('request'));
|
72 |
+
$fakeClient->expects($this->any())
|
73 |
+
->method('request')
|
74 |
+
->will($this->throwException(new Mage_Core_Exception()));
|
75 |
+
|
76 |
+
$clientMock = $this->getModelMock('expercash/api_capture', array(
|
77 |
+
'getClient'
|
78 |
+
)
|
79 |
+
);
|
80 |
+
$clientMock->expects($this->once())
|
81 |
+
->method('getClient')
|
82 |
+
->will($this->returnValue($fakeClient));
|
83 |
+
$this->replaceByMock('model', 'expercash/api_capture', $clientMock);
|
84 |
+
|
85 |
+
$reflectionClass = new ReflectionClass('Expercash_Expercash_Model_Api_Capture');
|
86 |
+
$method = $reflectionClass->getMethod('_postRequest');
|
87 |
+
$method->setAccessible(true);
|
88 |
+
$captureClass = Mage::getModel('expercash/api_capture');
|
89 |
+
|
90 |
+
// assertion that a Mage_Core_Exception is thrown
|
91 |
+
$this->setExpectedException('Mage_Core_Exception');
|
92 |
+
|
93 |
+
$method->invoke($captureClass, $urlArray);
|
94 |
+
}
|
95 |
+
|
96 |
+
public function testParseResponse()
|
97 |
+
{
|
98 |
+
$bodyText = '<?xml version="1.0" encoding="iso-8859-1"?>
|
99 |
+
<!DOCTYPE epixml PUBLIC "easyDebit/epi/DTD" "https://epi.expercash.net/epi.dtd">
|
100 |
+
|
101 |
+
<epixml>
|
102 |
+
<rc>100</rc>
|
103 |
+
<rctext>Transaction successfull</rctext>
|
104 |
+
<timestamp>2013-04-15 15:47:18</timestamp>
|
105 |
+
<taid>00000000000256943810</taid>
|
106 |
+
<epi_payment_id>CC1752647744000</epi_payment_id>
|
107 |
+
</epixml>';
|
108 |
+
|
109 |
+
$captureModel = Mage::getModel('expercash/api_capture');
|
110 |
+
$simpleXML = simplexml_load_string($bodyText);
|
111 |
+
$this->assertEquals($simpleXML, $captureModel->parseResponse($bodyText));
|
112 |
+
$this->assertNotEquals($bodyText, $captureModel->parseResponse($bodyText));
|
113 |
+
|
114 |
+
try {
|
115 |
+
$sampleXml = '<foo>fff';
|
116 |
+
$captureModel->parseResponse($sampleXml);
|
117 |
+
} catch (Exception $e) {
|
118 |
+
$this->assertEquals(
|
119 |
+
Mage::helper('expercash/data')->__('Error while transforming response to simple xml.'),
|
120 |
+
$e->getMessage()
|
121 |
+
);
|
122 |
+
}
|
123 |
+
try {
|
124 |
+
$sampleXml = '';
|
125 |
+
$captureModel->parseResponse($sampleXml);
|
126 |
+
} catch (Exception $e) {
|
127 |
+
$this->assertEquals(Mage::helper('expercash/data')->__('Error while transforming response to simple xml.'),$e->getMessage());
|
128 |
+
}
|
129 |
+
}
|
130 |
+
|
131 |
+
public function testGetClient()
|
132 |
+
{
|
133 |
+
$client = Mage::getModel('expercash/api_api')->getClient();
|
134 |
+
$this->assertTrue($client instanceof Varien_Http_Client);
|
135 |
+
}
|
136 |
+
|
137 |
+
public function testSetConfig()
|
138 |
+
{
|
139 |
+
$model = Mage::getModel('expercash/api_api');
|
140 |
+
$config = Mage::getModel('expercash/config');
|
141 |
+
$model->setConfig($config);
|
142 |
+
$this->assertTrue($model->getConfig() instanceof Expercash_Expercash_Model_Config);
|
143 |
+
}
|
144 |
+
}
|
145 |
+
|
app/code/community/Expercash/Expercash/Test/Model/Api/ApiTest.php
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
class Expercash_Expercash_Test_Model_Api_ApiTest extends EcomDev_PHPUnit_Test_Case_Config
|
5 |
+
{
|
6 |
+
|
7 |
+
public function testGetIframeTokenSuccess()
|
8 |
+
{
|
9 |
+
$rawBody = $this->getXml('SuccessFullResponse.xml');
|
10 |
+
$clientMock = $this->getModelMock('expercash/api_api', array('_postRequest'));
|
11 |
+
$clientMock->expects($this->once())
|
12 |
+
->method('_postRequest')
|
13 |
+
->will($this->returnValue($rawBody));
|
14 |
+
|
15 |
+
$token = $clientMock->getIframeToken(array());
|
16 |
+
$this->assertEquals('1234567', $token);
|
17 |
+
|
18 |
+
}
|
19 |
+
|
20 |
+
/**
|
21 |
+
* @expectedException Mage_Core_Exception
|
22 |
+
* @expectedExceptionMessage invalid response from expercash
|
23 |
+
*/
|
24 |
+
public function testGetIframeTokenFailedTransaction()
|
25 |
+
{
|
26 |
+
$rawBody = $this->getXml('FailedTransaction.xml');
|
27 |
+
$clientMock = $this->getModelMock('expercash/api_api', array('_postRequest'));
|
28 |
+
$clientMock->expects($this->once())
|
29 |
+
->method('_postRequest')
|
30 |
+
->will($this->returnValue($rawBody));
|
31 |
+
|
32 |
+
$clientMock->getIframeToken(array());
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* @expectedException Mage_Core_Exception
|
37 |
+
* @expectedExceptionMessage invalid response from expercash
|
38 |
+
*/
|
39 |
+
public function testGetIframeTokenResponseParamsMissing()
|
40 |
+
{
|
41 |
+
$rawBody = $this->getXml('ResponseParamsMissing.xml');
|
42 |
+
$clientMock = $this->getModelMock('expercash/api_api', array('_postRequest'));
|
43 |
+
$clientMock->expects($this->once())
|
44 |
+
->method('_postRequest')
|
45 |
+
->will($this->returnValue($rawBody));
|
46 |
+
|
47 |
+
$clientMock->getIframeToken(array());
|
48 |
+
}
|
49 |
+
|
50 |
+
|
51 |
+
|
52 |
+
protected function getXml($fileName)
|
53 |
+
{
|
54 |
+
$fileName
|
55 |
+
= __DIR__ . DS . 'ApiTest' . DS . 'TestFiles' . DS . $fileName;
|
56 |
+
if (!file_exists($fileName)) {
|
57 |
+
throw new Exception($fileName . ' does not exist!');
|
58 |
+
}
|
59 |
+
if (!is_readable($fileName)) {
|
60 |
+
throw new Exception($fileName . ' is not readable!');
|
61 |
+
}
|
62 |
+
return file_get_contents($fileName);
|
63 |
+
}
|
64 |
+
|
65 |
+
}
|
66 |
+
|
app/code/community/Expercash/Expercash/Test/Model/Api/ApiTest/TestFiles/FailedTransaction.xml
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2 |
+
<iFrameXml>
|
3 |
+
<timestamp>2008‐12‐14T20:11:56+02:00</timestamp>
|
4 |
+
<rc>900</rc>
|
5 |
+
<rcText>Transaction failed</rcText>
|
6 |
+
<sessionId>54321</sessionId>
|
7 |
+
</iFrameXml>
|
app/code/community/Expercash/Expercash/Test/Model/Api/ApiTest/TestFiles/ResponseParamsMissing.xml
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2 |
+
<iFrameXml>
|
3 |
+
<timestamp>2008‐12‐14T20:11:56+02:00</timestamp>
|
4 |
+
<rcText>Transaction successful</rcText>
|
5 |
+
<sessionId>1234567</sessionId>
|
6 |
+
</iFrameXml>
|
app/code/community/Expercash/Expercash/Test/Model/Api/ApiTest/TestFiles/SuccessFullResponse.xml
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2 |
+
<iFrameXml>
|
3 |
+
<timestamp>2008‐12‐14T20:11:56+02:00</timestamp>
|
4 |
+
<rc>100</rc>
|
5 |
+
<rcText>Transaction successful</rcText>
|
6 |
+
<sessionId>1234567</sessionId>
|
7 |
+
</iFrameXml>
|
app/code/community/Expercash/Expercash/Test/Model/Api/CaptureTest.php
ADDED
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
class Expercash_Expercash_Test_Model_Api_CaptureTest extends EcomDev_PHPUnit_Test_Case_Config
|
5 |
+
{
|
6 |
+
/**
|
7 |
+
* @loadFixture orders
|
8 |
+
*/
|
9 |
+
public function testCapture()
|
10 |
+
{
|
11 |
+
$this->markTestIncomplete("No assertion given.");
|
12 |
+
|
13 |
+
$order = Mage::getModel('sales/order')->load(11);
|
14 |
+
$payment = $order->getPayment();
|
15 |
+
$amount = 100;
|
16 |
+
$capture_type = 'expercashcc';
|
17 |
+
|
18 |
+
$urlArray = Array(
|
19 |
+
"pid" => 1234,
|
20 |
+
"pkey" => 52345,
|
21 |
+
"cref" => 123456,
|
22 |
+
'amount' => round($amount * 100),
|
23 |
+
"action" => 'cc_capture',
|
24 |
+
"reference" => 55555
|
25 |
+
);
|
26 |
+
|
27 |
+
$captureMock = $this->getModelMock('expercash/api_capture',array(
|
28 |
+
'_postRequest',
|
29 |
+
'validateAndSaveResponse'
|
30 |
+
)
|
31 |
+
);
|
32 |
+
$captureMock->expects($this->once())
|
33 |
+
->method('_postRequest');
|
34 |
+
|
35 |
+
$captureMock->expects($this->once())
|
36 |
+
->method('validateAndSaveResponse');
|
37 |
+
|
38 |
+
$this->replaceByMock('model', 'expercash/api_capture', $captureMock);
|
39 |
+
$captureMock->capture($payment, $amount, $capture_type);
|
40 |
+
}
|
41 |
+
|
42 |
+
|
43 |
+
/**
|
44 |
+
* @loadFixture orders
|
45 |
+
*/
|
46 |
+
public function testSaveExperCashData()
|
47 |
+
{
|
48 |
+
// can test this method yet because setExperCashData in the payment helper
|
49 |
+
// does an update on the database
|
50 |
+
$this->markTestIncomplete();
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* @loadFixture ../../../../var/fixtures/orders
|
55 |
+
*/
|
56 |
+
public function testValidateAndSaveResponse()
|
57 |
+
{
|
58 |
+
$quote = Mage::getModel('sales/order')->load(11);
|
59 |
+
$payment = $quote->getPayment();
|
60 |
+
$response = $response = new Varien_Object();
|
61 |
+
$response->rc = '100';
|
62 |
+
|
63 |
+
$captureModelMock = $this->getModelMock('expercash/api_capture', array(
|
64 |
+
'parseResponse',
|
65 |
+
'saveExperCashData',
|
66 |
+
'saveOrderHistory'
|
67 |
+
)
|
68 |
+
);
|
69 |
+
|
70 |
+
$captureModelMock->expects($this->once())
|
71 |
+
->method('parseResponse')
|
72 |
+
->will($this->returnValue($response));
|
73 |
+
|
74 |
+
$captureModelMock->validateAndSaveResponse($response, $payment);
|
75 |
+
$this->assertEquals(Expercash_Expercash_Model_Expercash::STATUS_SUCCESS, $payment->getStatus());
|
76 |
+
|
77 |
+
}
|
78 |
+
|
79 |
+
|
80 |
+
/**
|
81 |
+
* @loadFixture ../../../../var/fixtures/orders
|
82 |
+
*/
|
83 |
+
public function testValidateAndSaveResponseWithInvalidResponse()
|
84 |
+
{
|
85 |
+
$quote = Mage::getModel('sales/order')->load(11);
|
86 |
+
$payment = $quote->getPayment();
|
87 |
+
$response = $response = new Varien_Object();
|
88 |
+
$response->rc = '101';
|
89 |
+
|
90 |
+
$captureModelMock = $this->getModelMock('expercash/api_capture', array(
|
91 |
+
'parseResponse',
|
92 |
+
'saveExperCashData',
|
93 |
+
'saveOrderHistory'
|
94 |
+
)
|
95 |
+
);
|
96 |
+
|
97 |
+
$captureModelMock->expects($this->once())
|
98 |
+
->method('parseResponse')
|
99 |
+
->will($this->returnValue($response));
|
100 |
+
$this->setExpectedException('Mage_Core_Exception');
|
101 |
+
$captureModelMock->validateAndSaveResponse($response, $payment);
|
102 |
+
}
|
103 |
+
|
104 |
+
/**
|
105 |
+
* @loadFixture ../../../../var/fixtures/orders
|
106 |
+
*/
|
107 |
+
public function testValidateAndSaveResponseThrowsException()
|
108 |
+
{
|
109 |
+
$quote = Mage::getModel('sales/order')->load(11);
|
110 |
+
$payment = $quote->getPayment();
|
111 |
+
$response = $response = new Varien_Object();
|
112 |
+
$response->rc = '101';
|
113 |
+
|
114 |
+
$captureModelMock = $this->getModelMock('expercash/api_capture', array(
|
115 |
+
'parseResponse',
|
116 |
+
'saveExperCashData',
|
117 |
+
'saveOrderHistory'
|
118 |
+
)
|
119 |
+
);
|
120 |
+
$exception = new Mage_Core_Exception();
|
121 |
+
$exception->setMessage('test message');
|
122 |
+
$captureModelMock->expects($this->once())
|
123 |
+
->method('parseResponse')
|
124 |
+
->will($this->throwException($exception));
|
125 |
+
$message = '';
|
126 |
+
try {
|
127 |
+
$captureModelMock->validateAndSaveResponse($response, $payment);
|
128 |
+
} catch (Exception $e) {
|
129 |
+
$this->assertEquals(
|
130 |
+
Mage::helper('expercash/data')->__(
|
131 |
+
'Error during capture: %s',
|
132 |
+
$exception->getMessage()
|
133 |
+
),
|
134 |
+
$e->getMessage()
|
135 |
+
);
|
136 |
+
}
|
137 |
+
|
138 |
+
}
|
139 |
+
}
|
140 |
+
|
app/code/community/Expercash/Expercash/Test/Model/Api/CaptureTest/fixtures/.gitkeep
ADDED
File without changes
|
app/code/community/Expercash/Expercash/Test/Model/Api/CaptureTest/fixtures/orders.yaml
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
tables:
|
2 |
+
sales/order:
|
3 |
+
|
4 |
+
- entity_id: 11
|
5 |
+
increment_id: 100000011
|
6 |
+
shipping_address_id: 42
|
7 |
+
base_grand_total: 119.00
|
8 |
+
grand_total: 119.00
|
9 |
+
currency: 'EUR'
|
10 |
+
customer_gender: 1
|
11 |
+
shipping_method: 'flatrate_flatrate'
|
12 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
13 |
+
state: 'pending_payment'
|
14 |
+
status: 'pending_payment'
|
15 |
+
quote_id: 20
|
16 |
+
id: 11
|
17 |
+
|
18 |
+
- entity_id: 2
|
19 |
+
increment_id: 100000055
|
20 |
+
quote_id: 2
|
21 |
+
shipping_address_id: 42
|
22 |
+
base_grand_total: 119.00
|
23 |
+
grand_total: 119.00
|
24 |
+
currency: 'EUR'
|
25 |
+
customer_gender: 1
|
26 |
+
shipping_method: 'flatrate_flatrate'
|
27 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
28 |
+
|
29 |
+
- entity_id: 3
|
30 |
+
increment_id: 100000055
|
31 |
+
quote_id: 3
|
32 |
+
shipping_address_id: 42
|
33 |
+
base_grand_total: 119.00
|
34 |
+
grand_total: 119.00
|
35 |
+
currency: 'EUR'
|
36 |
+
customer_gender: 1
|
37 |
+
shipping_method: 'flatrate_flatrate'
|
38 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
39 |
+
|
40 |
+
sales/quote:
|
41 |
+
- entity_id: 20
|
42 |
+
parent_id: 11
|
43 |
+
id: 20
|
44 |
+
|
45 |
+
sales/order_payment:
|
46 |
+
- entity_id: 11
|
47 |
+
parent_id: 11
|
48 |
+
method: 'expercashcc'
|
49 |
+
|
50 |
+
sales/quote_payment:
|
51 |
+
- id: 20
|
52 |
+
entity_id: 20
|
53 |
+
parent_id: 20
|
54 |
+
quote_id: 20
|
55 |
+
order_id: 11
|
56 |
+
method: 'expercashcc'
|
57 |
+
expercash_request_type: 'cc_authorize'
|
app/code/community/Expercash/Expercash/Test/Model/ConfigTest.php
ADDED
@@ -0,0 +1,187 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Expercash_Expercash_Test_Model_ConfigTest extends EcomDev_PHPUnit_Test_Case_Config
|
4 |
+
{
|
5 |
+
|
6 |
+
/**
|
7 |
+
* @var Mage_Core_Model_Store
|
8 |
+
*/
|
9 |
+
protected $store;
|
10 |
+
|
11 |
+
/**
|
12 |
+
* @var Mage_Core_Model_Store
|
13 |
+
*/
|
14 |
+
protected $storeTwo;
|
15 |
+
/**
|
16 |
+
* @var Expercash_Expercash_Model_Config
|
17 |
+
*/
|
18 |
+
protected $config;
|
19 |
+
|
20 |
+
public function setUp()
|
21 |
+
{
|
22 |
+
parent::setUp();
|
23 |
+
$this->config = Mage::getModel('expercash/config');
|
24 |
+
$this->store = Mage::app()->getStore(0)->load(0);
|
25 |
+
$this->storeTwo = Mage::app()->getStore(1)->load(1);
|
26 |
+
|
27 |
+
}
|
28 |
+
|
29 |
+
public function testGetEpiUrl()
|
30 |
+
{
|
31 |
+
$path = 'epi_url/url';
|
32 |
+
|
33 |
+
$this->store->resetConfig();
|
34 |
+
$this->store->setConfig($path, 'https://testgateway.com');
|
35 |
+
$this->assertTrue(is_string($this->config->getEpiUrl($this->store->getId())));
|
36 |
+
$this->assertEquals('https://testgateway.com', $this->config->getEpiUrl($this->store->getId()));
|
37 |
+
}
|
38 |
+
|
39 |
+
public function testGetConfigData()
|
40 |
+
{
|
41 |
+
$path = 'payment/' . 'expercashcc' . '/' . 'active';
|
42 |
+
$this->store->resetConfig();
|
43 |
+
$this->store->setConfig($path, true);
|
44 |
+
$this->assertTrue((bool)$this->config->getConfigData('active', 'expercashcc', 0));
|
45 |
+
|
46 |
+
$this->storeTwo->setConfig($path, false);
|
47 |
+
$this->assertEquals(false, $this->config->getConfigData('active', 'expercashcc', 1));
|
48 |
+
}
|
49 |
+
|
50 |
+
public function testGetPopupId()
|
51 |
+
{
|
52 |
+
$path = Expercash_Expercash_Model_Config::PAYMENT_SERVICE_PATH.'popup_id';
|
53 |
+
$this->store->resetConfig();
|
54 |
+
$this->store->setConfig($path, '11');
|
55 |
+
$this->assertEquals('11',$this->config->getPopupId(0));
|
56 |
+
$this->assertNotEquals('1',$this->config->getPopupId(0));
|
57 |
+
|
58 |
+
$this->storeTwo->setConfig($path, '15');
|
59 |
+
$this->assertEquals('15', $this->config->getPopupId(1));
|
60 |
+
$this->assertNotEquals('1',$this->config->getPopupId(0));
|
61 |
+
}
|
62 |
+
|
63 |
+
public function testGetProfilId()
|
64 |
+
{
|
65 |
+
$path = Expercash_Expercash_Model_Config::PAYMENT_SERVICE_PATH.'profil_id';
|
66 |
+
$this->store->resetConfig();
|
67 |
+
$this->store->setConfig($path, '11');
|
68 |
+
$this->assertEquals('11',$this->config->getProfilId(0));
|
69 |
+
$this->assertNotEquals('1',$this->config->getProfilId(0));
|
70 |
+
|
71 |
+
$this->storeTwo->setConfig($path, '15');
|
72 |
+
$this->assertEquals('15', $this->config->getProfilId(1));
|
73 |
+
$this->assertNotEquals('1',$this->config->getProfilId(1));
|
74 |
+
}
|
75 |
+
|
76 |
+
public function testGetAuthorizationkey()
|
77 |
+
{
|
78 |
+
$path = Expercash_Expercash_Model_Config::PAYMENT_SERVICE_PATH.'authorization_key';
|
79 |
+
$this->store->resetConfig();
|
80 |
+
$this->store->setConfig($path, '11');
|
81 |
+
$this->assertEquals('11',$this->config->getAuthorizationkey(0));
|
82 |
+
$this->assertNotEquals('1',$this->config->getAuthorizationkey(0));
|
83 |
+
|
84 |
+
$this->storeTwo->setConfig($path, '15');
|
85 |
+
$this->assertEquals('15', $this->config->getAuthorizationkey(1));
|
86 |
+
$this->assertNotEquals('1',$this->config->getAuthorizationkey(1));
|
87 |
+
}
|
88 |
+
|
89 |
+
public function testGetGatewayKey()
|
90 |
+
{
|
91 |
+
$path = Expercash_Expercash_Model_Config::PAYMENT_SERVICE_PATH.'gateway_key';
|
92 |
+
$this->store->resetConfig();
|
93 |
+
$this->store->setConfig($path, '11');
|
94 |
+
$this->assertEquals('11',$this->config->getGatewayKey(0));
|
95 |
+
$this->assertNotEquals('1',$this->config->getGatewayKey(0));
|
96 |
+
|
97 |
+
$this->storeTwo->setConfig($path, '15');
|
98 |
+
$this->assertEquals('15', $this->config->getGatewayKey(1));
|
99 |
+
$this->assertNotEquals('1',$this->config->getGatewayKey(1));
|
100 |
+
}
|
101 |
+
|
102 |
+
public function testGetProjectId()
|
103 |
+
{
|
104 |
+
$path = Expercash_Expercash_Model_Config::PAYMENT_SERVICE_PATH.'project_id';
|
105 |
+
$this->store->resetConfig();
|
106 |
+
$this->store->setConfig($path, '11');
|
107 |
+
$this->assertEquals('11',$this->config->getProjectId(0));
|
108 |
+
$this->assertNotEquals('1',$this->config->getProjectId(0));
|
109 |
+
|
110 |
+
$this->storeTwo->setConfig($path, '15');
|
111 |
+
$this->assertEquals('15', $this->config->getProjectId(1));
|
112 |
+
$this->assertNotEquals('1',$this->config->getProjectId(1));
|
113 |
+
}
|
114 |
+
|
115 |
+
public function testGetIframeCssClass()
|
116 |
+
{
|
117 |
+
$path = Expercash_Expercash_Model_Config::PAYMENT_SERVICE_PATH.'iframe_css_class';
|
118 |
+
$this->store->resetConfig();
|
119 |
+
$this->store->setConfig($path, 'example.css');
|
120 |
+
$this->assertEquals('example.css',$this->config->getIframeCssClass(0));
|
121 |
+
$this->assertNotEquals('1',$this->config->getIframeCssClass(0));
|
122 |
+
|
123 |
+
$this->storeTwo->setConfig($path, 'example2.css');
|
124 |
+
$this->assertEquals('example2.css', $this->config->getIframeCssClass(1));
|
125 |
+
$this->assertNotEquals('1',$this->config->getIframeCssClass(1));
|
126 |
+
}
|
127 |
+
|
128 |
+
public function testGetIframeWidth()
|
129 |
+
{
|
130 |
+
$path = Expercash_Expercash_Model_Config::PAYMENT_SERVICE_PATH.'iframe_width';
|
131 |
+
$this->store->resetConfig();
|
132 |
+
$this->store->setConfig($path, '500');
|
133 |
+
$this->assertEquals('500',$this->config->getIframeWidth(0));
|
134 |
+
$this->assertNotEquals('1',$this->config->getIframeWidth(0));
|
135 |
+
|
136 |
+
$this->storeTwo->setConfig($path, '300');
|
137 |
+
$this->assertEquals('300', $this->config->getIframeWidth(1));
|
138 |
+
$this->assertNotEquals('1',$this->config->getIframeWidth(1));
|
139 |
+
}
|
140 |
+
|
141 |
+
|
142 |
+
public function testGetIframeHeight()
|
143 |
+
{
|
144 |
+
$path = Expercash_Expercash_Model_Config::PAYMENT_SERVICE_PATH.'iframe_height';
|
145 |
+
$this->store->resetConfig();
|
146 |
+
$this->store->setConfig($path, '800');
|
147 |
+
$this->assertEquals('800',$this->config->getIframeHeight(0));
|
148 |
+
$this->assertNotEquals('1',$this->config->getIframeHeight(0));
|
149 |
+
|
150 |
+
$this->storeTwo->setConfig($path, '200');
|
151 |
+
$this->assertEquals('200', $this->config->getIframeHeight(1));
|
152 |
+
$this->assertNotEquals('1',$this->config->getIframeHeight(1));
|
153 |
+
}
|
154 |
+
|
155 |
+
public function testGetCssUrl()
|
156 |
+
{
|
157 |
+
$path = Expercash_Expercash_Model_Config::PAYMENT_SERVICE_PATH.'css_url';
|
158 |
+
$this->store->resetConfig();
|
159 |
+
$this->store->setConfig($path, 'www.test.de');
|
160 |
+
$this->assertEquals('www.test.de',$this->config->getCssUrl(0));
|
161 |
+
$this->assertNotEquals('1',$this->config->getCssUrl(0));
|
162 |
+
|
163 |
+
$this->storeTwo->setConfig($path, 'www.test2.de');
|
164 |
+
$this->assertEquals('www.test2.de', $this->config->getCssUrl(1));
|
165 |
+
$this->assertNotEquals('1',$this->config->getCssUrl(1));
|
166 |
+
}
|
167 |
+
|
168 |
+
public function testGetIframeTokenUrl()
|
169 |
+
{
|
170 |
+
$path = 'iframe_token_url/url';
|
171 |
+
$url = 'https://epi.expercash.net/iframe/post/v25/';
|
172 |
+
$this->store->resetConfig();
|
173 |
+
$this->store->setConfig($path,$url);
|
174 |
+
$this->assertEquals($url,$this->config->getIframeTokenUrl());
|
175 |
+
$this->assertNotEquals('https://www.google.de',$this->config->getIframeTokenUrl());
|
176 |
+
}
|
177 |
+
|
178 |
+
public function testGetIframeUrl()
|
179 |
+
{
|
180 |
+
$path = 'iframe_url/url';
|
181 |
+
$url = 'https://epi.expercash.net/epi_popup2.php';
|
182 |
+
$this->store->resetConfig();
|
183 |
+
$this->store->setConfig($path,$url);
|
184 |
+
$this->assertEquals($url,$this->config->getIframeUrl());
|
185 |
+
$this->assertNotEquals('https://www.google.de',$this->config->getIframeTokenUrl());
|
186 |
+
}
|
187 |
+
}
|
app/code/community/Expercash/Expercash/Test/Model/ExpercashTest.php
ADDED
@@ -0,0 +1,361 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Expercash_Expercash_Test_Model_ExpercashTest extends EcomDev_PHPUnit_Test_Case_Controller
|
4 |
+
{
|
5 |
+
/**
|
6 |
+
* @var Mage_Core_Model_Store
|
7 |
+
*/
|
8 |
+
protected $store;
|
9 |
+
|
10 |
+
public function setUp()
|
11 |
+
{
|
12 |
+
parent::setUp();
|
13 |
+
$this->store = Mage::app()->getStore(0)->load(0);
|
14 |
+
}
|
15 |
+
|
16 |
+
/**
|
17 |
+
* if token is emtpy then a Mage_Checkout_Exception is thrown
|
18 |
+
*
|
19 |
+
* @loadFixture ../../../var/fixtures/orders.yaml
|
20 |
+
*
|
21 |
+
* @expectedException Mage_Checkout_Exception
|
22 |
+
* @expectedExceptionMessage No Expercash token.
|
23 |
+
*/
|
24 |
+
public function testAuthorizeGetTokenFailed()
|
25 |
+
{
|
26 |
+
$order = Mage::getModel('sales/order')->load(11);
|
27 |
+
$payment = $order->getPayment();
|
28 |
+
$amount = $order->getBaseGrandTotal();
|
29 |
+
$infoInstance = new Varien_Object();
|
30 |
+
$infoInstance->setOrder($order);
|
31 |
+
|
32 |
+
$requestMock = $this->getModelMock('expercash/request_token_iframe', array('getTokenParams'));
|
33 |
+
$requestMock->expects($this->once())
|
34 |
+
->method('getTokenParams')
|
35 |
+
->will($this->returnValue(array()));
|
36 |
+
$this->replaceByMock('model','expercash/request_token_iframe',$requestMock);
|
37 |
+
|
38 |
+
$tokenModelMock = $this->getModelMock('expercash/api_api', array('getIframeToken'));
|
39 |
+
$tokenModelMock->expects($this->once())
|
40 |
+
->method('getIframeToken')
|
41 |
+
->will($this->returnValue(null));
|
42 |
+
$this->replaceByMock('model','expercash/api_api',$tokenModelMock);
|
43 |
+
|
44 |
+
$paymentModelMock = $this->getModelMock('expercash/expercash', array('getInfoInstance', 'cancel'));
|
45 |
+
$paymentModelMock->expects($this->any())
|
46 |
+
->method('getInfoInstance')
|
47 |
+
->will($this->returnValue($infoInstance));
|
48 |
+
$paymentModelMock->expects($this->any())
|
49 |
+
->method('cancel')
|
50 |
+
->will($this->returnValue(null));
|
51 |
+
$this->replaceByMock('model', 'expercash/expercash', $paymentModelMock);
|
52 |
+
$paymentModelMock->authorize($payment, $amount);
|
53 |
+
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* @loadFixture ../../../var/fixtures/orders.yaml
|
58 |
+
*
|
59 |
+
* @expectedException Mage_Core_Exception
|
60 |
+
* @expectedExceptionMessage Please select another payment method!
|
61 |
+
*/
|
62 |
+
public function testAuthorizeGetTokenParamsFailed()
|
63 |
+
{
|
64 |
+
$order = Mage::getModel('sales/order')->load(11);
|
65 |
+
$payment = $order->getPayment();
|
66 |
+
$amount = $order->getBaseGrandTotal();
|
67 |
+
$infoInstance = new Varien_Object();
|
68 |
+
$infoInstance->setOrder($order);
|
69 |
+
|
70 |
+
$requestMock = $this->getModelMock('expercash/request_token_iframe', array('getTokenParams'));
|
71 |
+
$requestMock->expects($this->any())
|
72 |
+
->method('getTokenParams')
|
73 |
+
->will($this->throwException(new Mage_Core_Exception('Please select another payment method!')));
|
74 |
+
$this->replaceByMock('model','expercash/request_token_iframe',$requestMock);
|
75 |
+
|
76 |
+
|
77 |
+
$paymentModelMock = $this->getModelMock('expercash/expercash', array('getInfoInstance', 'cancel'));
|
78 |
+
$paymentModelMock->expects($this->any())
|
79 |
+
->method('getInfoInstance')
|
80 |
+
->will($this->returnValue($infoInstance));
|
81 |
+
$paymentModelMock->expects($this->any())
|
82 |
+
->method('cancel')
|
83 |
+
->will($this->returnValue(null));
|
84 |
+
$this->replaceByMock('model', 'expercash/expercash', $paymentModelMock);
|
85 |
+
$paymentModelMock->authorize($payment, $amount);
|
86 |
+
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* @loadFixture ../../../var/fixtures/orders.yaml
|
91 |
+
*
|
92 |
+
*/
|
93 |
+
public function testAuthorizeGetTokenParamsSuccess()
|
94 |
+
{
|
95 |
+
$order = Mage::getModel('sales/order')->load(11);
|
96 |
+
$payment = $order->getPayment();
|
97 |
+
$amount = $order->getBaseGrandTotal();
|
98 |
+
$infoInstance = new Varien_Object();
|
99 |
+
$infoInstance->setOrder($order);
|
100 |
+
$checkoutSession = new Varien_Object();
|
101 |
+
|
102 |
+
$tokenModelMock = $this->getModelMock('expercash/api_api', array('getIframeToken'));
|
103 |
+
$tokenModelMock->expects($this->once())
|
104 |
+
->method('getIframeToken')
|
105 |
+
->will($this->returnValue('foo'));
|
106 |
+
$this->replaceByMock('model','expercash/api_api',$tokenModelMock);
|
107 |
+
|
108 |
+
$paymentModelMock = $this->getModelMock('expercash/expercash', array(
|
109 |
+
'getInfoInstance',
|
110 |
+
'cancel',
|
111 |
+
'getCheckoutSession'
|
112 |
+
)
|
113 |
+
);
|
114 |
+
$paymentModelMock->expects($this->any())
|
115 |
+
->method('getInfoInstance')
|
116 |
+
->will($this->returnValue($infoInstance));
|
117 |
+
|
118 |
+
$paymentModelMock->expects($this->any())
|
119 |
+
->method('cancel')
|
120 |
+
->will($this->returnValue(null));
|
121 |
+
|
122 |
+
$paymentModelMock->expects($this->any())
|
123 |
+
->method('getCheckoutSession')
|
124 |
+
->will($this->returnValue($checkoutSession));
|
125 |
+
|
126 |
+
$this->replaceByMock('model', 'expercash/expercash', $paymentModelMock);
|
127 |
+
$paymentModelMock->authorize($payment, $amount);
|
128 |
+
$this->assertEquals('foo', $checkoutSession->getData(Expercash_Expercash_Model_Config::TOKEN_REGISTRY_KEY));
|
129 |
+
|
130 |
+
}
|
131 |
+
|
132 |
+
/**
|
133 |
+
* @test
|
134 |
+
* test for getOrderPlaceRedirectUrl
|
135 |
+
*/
|
136 |
+
public function testGetOrderPlaceRedirectUrl()
|
137 |
+
{
|
138 |
+
$url = Mage::getUrl('expercash/expercash/reset');
|
139 |
+
$this->assertEquals(
|
140 |
+
$url, Mage::getModel('expercash/expercash')->getOrderPlaceRedirectUrl()
|
141 |
+
);
|
142 |
+
$this->assertNotEquals(
|
143 |
+
'foo', Mage::getModel('expercash/expercash')->getOrderPlaceRedirectUrl()
|
144 |
+
);
|
145 |
+
}
|
146 |
+
|
147 |
+
/**
|
148 |
+
* @loadFixture ../../../var/fixtures/orders.yaml
|
149 |
+
*/
|
150 |
+
public function testSetAdditionalPaymentInfo()
|
151 |
+
{
|
152 |
+
//load order with fixture
|
153 |
+
$order = Mage::getModel('sales/order')->load(11);
|
154 |
+
|
155 |
+
// array to be returned by helper mock
|
156 |
+
$paymentParams = array(
|
157 |
+
'owner',
|
158 |
+
'maskedPan',
|
159 |
+
'cardScheme',
|
160 |
+
'validThru',
|
161 |
+
'panCountry',
|
162 |
+
'ipCountry',
|
163 |
+
'attemptsTotal',
|
164 |
+
'attemptsSameAction',
|
165 |
+
'3dsStatus'
|
166 |
+
);
|
167 |
+
|
168 |
+
// create a array with response params
|
169 |
+
$responseParams = array(
|
170 |
+
'owner' => 'Max Muster',
|
171 |
+
'maskedPan' => 'xxxx.xxxx.xxxx.1234',
|
172 |
+
'cardScheme' => 'VISA',
|
173 |
+
'validThru' => '201905',
|
174 |
+
'panCountry' => 'Germany',
|
175 |
+
'ipCountry' => 'Belgien',
|
176 |
+
'attemptsTotal' => '3',
|
177 |
+
'attemptsSameAction' => '2',
|
178 |
+
'3dsStatus' => '2'
|
179 |
+
);
|
180 |
+
|
181 |
+
// mock helper function getAdditionalPaymentParams
|
182 |
+
$helperMock = $this->getHelperMock('expercash/data', array(
|
183 |
+
'getAdditionalPaymentParams',
|
184 |
+
)
|
185 |
+
);
|
186 |
+
|
187 |
+
$helperMock->expects($this->once())
|
188 |
+
->method('getAdditionalPaymentParams')
|
189 |
+
->will($this->returnValue($paymentParams));
|
190 |
+
$this->replaceByMock('helper', 'expercash/data', $helperMock);
|
191 |
+
|
192 |
+
Mage::getModel('expercash/Expercash')->setAdditionalPaymentInfo($order->getPayment(), $responseParams);
|
193 |
+
|
194 |
+
// assertion that there is a array returned
|
195 |
+
$this->assertTrue(is_array($order->getPayment()->getAdditionalInformation()));
|
196 |
+
|
197 |
+
// assertion that each response param exist as key in the returned array
|
198 |
+
foreach ($paymentParams as $key) {
|
199 |
+
$this->assertTrue(array_key_exists($key, $order->getPayment()->getAdditionalInformation()));
|
200 |
+
}
|
201 |
+
|
202 |
+
// assertions that the values we permitted are the same that get returned
|
203 |
+
$this->assertEquals('Max Muster',$order->getPayment()->getAdditionalInformation('owner'));
|
204 |
+
$this->assertEquals('xxxx.xxxx.xxxx.1234',$order->getPayment()->getAdditionalInformation('maskedPan'));
|
205 |
+
$this->assertEquals('VISA',$order->getPayment()->getAdditionalInformation('cardScheme'));
|
206 |
+
$this->assertEquals('201905',$order->getPayment()->getAdditionalInformation('validThru'));
|
207 |
+
$this->assertEquals('Germany',$order->getPayment()->getAdditionalInformation('panCountry'));
|
208 |
+
$this->assertEquals('Belgien',$order->getPayment()->getAdditionalInformation('ipCountry'));
|
209 |
+
$this->assertEquals('3',$order->getPayment()->getAdditionalInformation('attemptsTotal'));
|
210 |
+
$this->assertEquals('2',$order->getPayment()->getAdditionalInformation('attemptsSameAction'));
|
211 |
+
$this->assertEquals('2',$order->getPayment()->getAdditionalInformation('3dsStatus'));
|
212 |
+
|
213 |
+
}
|
214 |
+
|
215 |
+
|
216 |
+
/**
|
217 |
+
* @loadFixture ../../../var/fixtures/orders.yaml
|
218 |
+
*/
|
219 |
+
public function testSetAdditionalPaymentInfoMissingResponseParam()
|
220 |
+
{
|
221 |
+
//load order with fixture
|
222 |
+
$order = Mage::getModel('sales/order')->load(11);
|
223 |
+
|
224 |
+
// array to be returned by helper mock
|
225 |
+
$paymentParams = array(
|
226 |
+
'owner',
|
227 |
+
'maskedPan',
|
228 |
+
'cardScheme',
|
229 |
+
'validThru',
|
230 |
+
'panCountry',
|
231 |
+
'ipCountry',
|
232 |
+
'attemptsTotal',
|
233 |
+
'attemptsSameAction',
|
234 |
+
'3dsStatus'
|
235 |
+
);
|
236 |
+
|
237 |
+
// create a array with response params without cardScheme
|
238 |
+
$responseParams = array(
|
239 |
+
'owner' => 'Max Muster',
|
240 |
+
'maskedPan' => 'xxxx.xxxx.xxxx.1234',
|
241 |
+
'validThru' => '201905',
|
242 |
+
'panCountry' => 'Germany',
|
243 |
+
'ipCountry' => 'Belgien',
|
244 |
+
'attemptsTotal' => '3',
|
245 |
+
'attemptsSameAction' => '2',
|
246 |
+
'3dsStatus' => '2'
|
247 |
+
);
|
248 |
+
|
249 |
+
// mock helper function getAdditionalPaymentParams
|
250 |
+
$helperMock = $this->getHelperMock('expercash/data', array(
|
251 |
+
'getAdditionalPaymentParams',
|
252 |
+
)
|
253 |
+
);
|
254 |
+
|
255 |
+
$helperMock->expects($this->once())
|
256 |
+
->method('getAdditionalPaymentParams')
|
257 |
+
->will($this->returnValue($paymentParams));
|
258 |
+
$this->replaceByMock('helper', 'expercash/data', $helperMock);
|
259 |
+
|
260 |
+
Mage::getModel('expercash/Expercash')->setAdditionalPaymentInfo($order->getPayment(), $responseParams);
|
261 |
+
|
262 |
+
// cardScheme is missing from responseParams
|
263 |
+
$this->assertFalse(array_key_exists('cardScheme', $order->getPayment()->getAdditionalInformation()));
|
264 |
+
|
265 |
+
// assertions that the values we permitted are the same that get returned
|
266 |
+
$this->assertEquals('Max Muster',$order->getPayment()->getAdditionalInformation('owner'));
|
267 |
+
$this->assertEquals('xxxx.xxxx.xxxx.1234',$order->getPayment()->getAdditionalInformation('maskedPan'));
|
268 |
+
$this->assertEquals('201905',$order->getPayment()->getAdditionalInformation('validThru'));
|
269 |
+
$this->assertEquals('Germany',$order->getPayment()->getAdditionalInformation('panCountry'));
|
270 |
+
$this->assertEquals('Belgien',$order->getPayment()->getAdditionalInformation('ipCountry'));
|
271 |
+
$this->assertEquals('3',$order->getPayment()->getAdditionalInformation('attemptsTotal'));
|
272 |
+
$this->assertEquals('2',$order->getPayment()->getAdditionalInformation('attemptsSameAction'));
|
273 |
+
$this->assertEquals('2',$order->getPayment()->getAdditionalInformation('3dsStatus'));
|
274 |
+
}
|
275 |
+
|
276 |
+
/**
|
277 |
+
* @loadFixture ../../../var/fixtures/orders.yaml
|
278 |
+
*/
|
279 |
+
public function testSetAdditionalPaymentInfoMissingResponseParams()
|
280 |
+
{
|
281 |
+
//load order with fixture
|
282 |
+
$order = Mage::getModel('sales/order')->load(11);
|
283 |
+
|
284 |
+
// array to be returned by helper mock
|
285 |
+
$paymentParams = array(
|
286 |
+
'owner',
|
287 |
+
'maskedPan',
|
288 |
+
'cardScheme',
|
289 |
+
'validThru',
|
290 |
+
'panCountry',
|
291 |
+
'ipCountry',
|
292 |
+
'attemptsTotal',
|
293 |
+
'attemptsSameAction',
|
294 |
+
'3dsStatus'
|
295 |
+
);
|
296 |
+
|
297 |
+
// create a empty array for response
|
298 |
+
$responseParams = array();
|
299 |
+
|
300 |
+
// mock helper function getAdditionalPaymentParams
|
301 |
+
$helperMock = $this->getHelperMock('expercash/data', array(
|
302 |
+
'getAdditionalPaymentParams',
|
303 |
+
)
|
304 |
+
);
|
305 |
+
|
306 |
+
$helperMock->expects($this->once())
|
307 |
+
->method('getAdditionalPaymentParams')
|
308 |
+
->will($this->returnValue($paymentParams));
|
309 |
+
$this->replaceByMock('helper', 'expercash/data', $helperMock);
|
310 |
+
|
311 |
+
Mage::getModel('expercash/Expercash')->setAdditionalPaymentInfo($order->getPayment(), $responseParams);
|
312 |
+
|
313 |
+
//assertion that there is a array returned
|
314 |
+
$this->assertTrue(is_array($order->getPayment()->getAdditionalInformation()));
|
315 |
+
|
316 |
+
//assertion that the size of array is 0, since there where no response params
|
317 |
+
$this->assertTrue(0 === sizeof($order->getPayment()->getAdditionalInformation()));
|
318 |
+
}
|
319 |
+
|
320 |
+
|
321 |
+
public function testRefund()
|
322 |
+
{
|
323 |
+
$payment = new Varien_Object();
|
324 |
+
$amount = 19.90;
|
325 |
+
Mage::getModel('expercash/expercash')->refund($payment, $amount);
|
326 |
+
|
327 |
+
$this->assertEquals('Error in refunding the payment',$payment->getStatusDescription());
|
328 |
+
|
329 |
+
}
|
330 |
+
|
331 |
+
public function testCalcCentAmount()
|
332 |
+
{
|
333 |
+
$amount = 33.30;
|
334 |
+
$centAmount = $this->invokeMethod('calcCentAmount', array($amount));
|
335 |
+
$this->assertEquals(3330, $centAmount);
|
336 |
+
}
|
337 |
+
|
338 |
+
/**
|
339 |
+
* Call protected/private method of a class.
|
340 |
+
*
|
341 |
+
* @param object $object Instantiated object that we will run method on.
|
342 |
+
* @param string $methodName Method name to call
|
343 |
+
* @param array $parameters Array of parameters to pass into method.
|
344 |
+
*
|
345 |
+
* @return mixed Method return.
|
346 |
+
*/
|
347 |
+
public function invokeMethod($methodName, array $parameters = array())
|
348 |
+
{
|
349 |
+
$object = Mage::getModel('expercash/expercash');
|
350 |
+
$reflection = new \ReflectionClass(get_class($object));
|
351 |
+
$method = $reflection->getMethod($methodName);
|
352 |
+
$method->setAccessible(true);
|
353 |
+
return $method->invokeArgs($object, $parameters);
|
354 |
+
}
|
355 |
+
|
356 |
+
public function testGetCheckoutSession()
|
357 |
+
{
|
358 |
+
$checkoutSession = $this->invokeMethod('getCheckoutSession');
|
359 |
+
$this->assertTrue($checkoutSession instanceof Mage_Checkout_Model_Session);
|
360 |
+
}
|
361 |
+
}
|
app/code/community/Expercash/Expercash/Test/Model/ExpercashTest/fixtures/.gitkeep
ADDED
File without changes
|
app/code/community/Expercash/Expercash/Test/Model/ExpercashccTest.php
ADDED
@@ -0,0 +1,141 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Expercash_Expercash_Test_Model_ExpercashccTest extends EcomDev_PHPUnit_Test_Case_Controller
|
4 |
+
{
|
5 |
+
/**
|
6 |
+
* @var Mage_Core_Model_Store
|
7 |
+
*/
|
8 |
+
protected $store;
|
9 |
+
|
10 |
+
public function setUp()
|
11 |
+
{
|
12 |
+
parent::setUp();
|
13 |
+
$this->store = Mage::app()->getStore(0)->load(0);
|
14 |
+
}
|
15 |
+
|
16 |
+
public function testExpercashccCodeProperty()
|
17 |
+
{
|
18 |
+
$expercashcc = Mage::getModel('expercash/expercashcc');
|
19 |
+
$this->assertEquals('expercashcc', $expercashcc->getCode());
|
20 |
+
$this->assertNotEquals('expercash', $expercashcc->getCode());
|
21 |
+
}
|
22 |
+
|
23 |
+
public function testExpercashIsGatewayProperty()
|
24 |
+
{
|
25 |
+
$expercashcc = Mage::getModel('expercash/expercashcc');
|
26 |
+
$this->assertEquals(false, $expercashcc->isGateway());
|
27 |
+
$this->assertNotEquals(true, $expercashcc->isGateway());
|
28 |
+
}
|
29 |
+
|
30 |
+
public function testExpercashCanAuthorizeProperty()
|
31 |
+
{
|
32 |
+
$expercashcc = Mage::getModel('expercash/expercashcc');
|
33 |
+
$this->assertEquals(true, $expercashcc->canAuthorize());
|
34 |
+
$this->assertNotEquals(false, $expercashcc->canAuthorize());
|
35 |
+
}
|
36 |
+
|
37 |
+
public function testExpercashCanCapturePartialProperty()
|
38 |
+
{
|
39 |
+
$expercashcc = Mage::getModel('expercash/expercashcc');
|
40 |
+
$this->assertEquals(true, $expercashcc->canCapturePartial());
|
41 |
+
$this->assertNotEquals(false, $expercashcc->canCapturePartial());
|
42 |
+
}
|
43 |
+
|
44 |
+
public function testExpercashCanRefundProperty()
|
45 |
+
{
|
46 |
+
$expercashcc = Mage::getModel('expercash/expercashcc');
|
47 |
+
$this->assertEquals(false, $expercashcc->canRefund());
|
48 |
+
$this->assertNotEquals(true, $expercashcc->canRefund());
|
49 |
+
}
|
50 |
+
|
51 |
+
public function testExpercashVoidProperty()
|
52 |
+
{
|
53 |
+
$expercashcc = Mage::getModel('expercash/expercashcc');
|
54 |
+
$payment = new Varien_Object();
|
55 |
+
$this->assertEquals(false, $expercashcc->canVoid($payment));
|
56 |
+
$this->assertNotEquals(true, $expercashcc->canVoid($payment));
|
57 |
+
}
|
58 |
+
|
59 |
+
public function testExpercashUseInternalProperty()
|
60 |
+
{
|
61 |
+
$expercashcc = Mage::getModel('expercash/expercashcc');
|
62 |
+
$this->assertEquals(false, $expercashcc->canUseInternal());
|
63 |
+
$this->assertNotEquals(true, $expercashcc->canUseInternal());
|
64 |
+
}
|
65 |
+
|
66 |
+
public function testExpercashUseCheckoutProperty()
|
67 |
+
{
|
68 |
+
$expercashcc = Mage::getModel('expercash/expercashcc');
|
69 |
+
$this->assertEquals(true, $expercashcc->canUseCheckout());
|
70 |
+
$this->assertNotEquals(false, $expercashcc->canUseCheckout());
|
71 |
+
}
|
72 |
+
|
73 |
+
public function testExpercashUseMultishippingProperty()
|
74 |
+
{
|
75 |
+
$expercashcc = Mage::getModel('expercash/expercashcc');
|
76 |
+
$this->assertEquals(false, $expercashcc->canUseForMultishipping());
|
77 |
+
$this->assertNotEquals(true, $expercashcc->canUseForMultishipping());
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Test for canCapture in authorization mode
|
82 |
+
*/
|
83 |
+
public function testCanCaptureAuthorize()
|
84 |
+
{
|
85 |
+
$expercashccMock = $this->getModelMock('expercash/expercashcc', array(
|
86 |
+
'getExperCashInfo'
|
87 |
+
)
|
88 |
+
);
|
89 |
+
$expercashccMock->expects($this->once())
|
90 |
+
->method('getExperCashInfo')
|
91 |
+
->with($this->equalTo('expercash_request_type'))
|
92 |
+
->will($this->returnValue('cc_authorize'));
|
93 |
+
|
94 |
+
$this->assertTrue($expercashccMock->canCapture());
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Test for canCapture in direct sale mode
|
99 |
+
*/
|
100 |
+
public function testCanCaptureCCBuy()
|
101 |
+
{
|
102 |
+
$expercashccMock = $this->getModelMock('expercash/expercashcc', array(
|
103 |
+
'getExperCashInfo'
|
104 |
+
)
|
105 |
+
);
|
106 |
+
|
107 |
+
$expercashccMock->expects($this->once())
|
108 |
+
->method('getExperCashInfo')
|
109 |
+
->with($this->equalTo('expercash_request_type'))
|
110 |
+
->will($this->returnValue('cc_buy'));
|
111 |
+
|
112 |
+
$this->assertFalse($expercashccMock->canCapture());
|
113 |
+
}
|
114 |
+
|
115 |
+
public function testIsDirectSaleEnabled()
|
116 |
+
{
|
117 |
+
$expercashccMock = $this->getModelMock('expercash/expercashcc', array(
|
118 |
+
'getConfigData'
|
119 |
+
)
|
120 |
+
);
|
121 |
+
|
122 |
+
$expercashccMock->expects($this->any())
|
123 |
+
->method('getConfigData')
|
124 |
+
->will($this->returnValue(Expercash_Expercash_Model_Expercashcc::PAYMENT_TYPE_CC_BUY));
|
125 |
+
|
126 |
+
$this->assertTrue($expercashccMock->isDirectSaleEnabled());
|
127 |
+
|
128 |
+
$expercashccMock = $this->getModelMock('expercash/expercashcc', array(
|
129 |
+
'getConfigData'
|
130 |
+
)
|
131 |
+
);
|
132 |
+
|
133 |
+
$expercashccMock->expects($this->any())
|
134 |
+
->method('getConfigData')
|
135 |
+
->will($this->returnValue(Expercash_Expercash_Model_Expercashcc::PAYMENT_TYPE_CC_AUTH));
|
136 |
+
|
137 |
+
$this->assertFalse($expercashccMock->isDirectSaleEnabled());
|
138 |
+
}
|
139 |
+
|
140 |
+
|
141 |
+
}
|
app/code/community/Expercash/Expercash/Test/Model/ExpercashccTest/fixtures/.gitkeep
ADDED
File without changes
|
app/code/community/Expercash/Expercash/Test/Model/ExpercashelvTest.php
ADDED
@@ -0,0 +1,143 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Expercash_Expercash_Test_Model_ExpercashelvTest extends EcomDev_PHPUnit_Test_Case
|
4 |
+
{
|
5 |
+
/**
|
6 |
+
* @var Mage_Core_Model_Store
|
7 |
+
*/
|
8 |
+
protected $store;
|
9 |
+
|
10 |
+
public function setUp()
|
11 |
+
{
|
12 |
+
parent::setUp();
|
13 |
+
$this->store = Mage::app()->getStore(0)->load(0);
|
14 |
+
}
|
15 |
+
|
16 |
+
public function testExpercashelvCodeProperty()
|
17 |
+
{
|
18 |
+
$expercashelv = Mage::getModel('expercash/expercashelv');
|
19 |
+
$this->assertEquals('expercashelv', $expercashelv->getCode());
|
20 |
+
$this->assertNotEquals('expercash', $expercashelv->getCode());
|
21 |
+
}
|
22 |
+
|
23 |
+
public function testExpercashIsGatewayProperty()
|
24 |
+
{
|
25 |
+
$expercashelv = Mage::getModel('expercash/expercashelv');
|
26 |
+
$this->assertEquals(true, $expercashelv->isGateway());
|
27 |
+
$this->assertNotEquals(false, $expercashelv->isGateway());
|
28 |
+
}
|
29 |
+
|
30 |
+
public function testExpercashCanAuthorizeProperty()
|
31 |
+
{
|
32 |
+
$expercashelv = Mage::getModel('expercash/expercashelv');
|
33 |
+
$this->assertEquals(true, $expercashelv->canAuthorize());
|
34 |
+
$this->assertNotEquals(false, $expercashelv->canAuthorize());
|
35 |
+
}
|
36 |
+
|
37 |
+
public function testExpercashCanCapturePartialProperty()
|
38 |
+
{
|
39 |
+
$expercashelv = Mage::getModel('expercash/expercashelv');
|
40 |
+
$this->assertEquals(false, $expercashelv->canCapturePartial());
|
41 |
+
$this->assertNotEquals(true, $expercashelv->canCapturePartial());
|
42 |
+
}
|
43 |
+
|
44 |
+
public function testExpercashCanRefundProperty()
|
45 |
+
{
|
46 |
+
$expercashelv = Mage::getModel('expercash/expercashelv');
|
47 |
+
$this->assertEquals(false, $expercashelv->canRefund());
|
48 |
+
$this->assertNotEquals(true, $expercashelv->canRefund());
|
49 |
+
}
|
50 |
+
|
51 |
+
public function testExpercashVoidProperty()
|
52 |
+
{
|
53 |
+
$expercashelv = Mage::getModel('expercash/expercashelv');
|
54 |
+
$payment = new Varien_Object();
|
55 |
+
$this->assertEquals(false, $expercashelv->canVoid($payment));
|
56 |
+
$this->assertNotEquals(true, $expercashelv->canVoid($payment));
|
57 |
+
}
|
58 |
+
|
59 |
+
public function testExpercashUseInternalProperty()
|
60 |
+
{
|
61 |
+
$expercashelv = Mage::getModel('expercash/expercashelv');
|
62 |
+
$this->assertEquals(false, $expercashelv->canUseInternal());
|
63 |
+
$this->assertNotEquals(true, $expercashelv->canUseInternal());
|
64 |
+
}
|
65 |
+
|
66 |
+
public function testExpercashUseCheckoutProperty()
|
67 |
+
{
|
68 |
+
$expercashelv = Mage::getModel('expercash/expercashelv');
|
69 |
+
$this->assertEquals(true, $expercashelv->canUseCheckout());
|
70 |
+
$this->assertNotEquals(false, $expercashelv->canUseCheckout());
|
71 |
+
}
|
72 |
+
|
73 |
+
public function testExpercashUseMultishippingProperty()
|
74 |
+
{
|
75 |
+
$expercashelv = Mage::getModel('expercash/expercashelv');
|
76 |
+
$this->assertEquals(false, $expercashelv->canUseForMultishipping());
|
77 |
+
$this->assertNotEquals(true, $expercashelv->canUseForMultishipping());
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Test for canCapture in authorization mode
|
82 |
+
*/
|
83 |
+
public function testCanCaptureElvAuthorize()
|
84 |
+
{
|
85 |
+
$expercashccMock = $this->getModelMock('expercash/expercashelv', array(
|
86 |
+
'getExperCashInfo'
|
87 |
+
)
|
88 |
+
);
|
89 |
+
$expercashccMock->expects($this->once())
|
90 |
+
->method('getExperCashInfo')
|
91 |
+
->with($this->equalTo('expercash_request_type'))
|
92 |
+
->will($this->returnValue('elv_authorize'));
|
93 |
+
|
94 |
+
$this->assertTrue($expercashccMock->canCapture());
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Test for canCapture in direct sale mode
|
99 |
+
*/
|
100 |
+
public function testCanCaptureElvBuy()
|
101 |
+
{
|
102 |
+
$expercashelvMock = $this->getModelMock('expercash/expercashelv', array(
|
103 |
+
'getExperCashInfo'
|
104 |
+
)
|
105 |
+
);
|
106 |
+
|
107 |
+
$expercashelvMock->expects($this->once())
|
108 |
+
->method('getExperCashInfo')
|
109 |
+
->with($this->equalTo('expercash_request_type'))
|
110 |
+
->will($this->returnValue('elv_buy'));
|
111 |
+
|
112 |
+
$this->assertFalse($expercashelvMock->canCapture());
|
113 |
+
}
|
114 |
+
|
115 |
+
public function testIsDirectSaleEnabled()
|
116 |
+
{
|
117 |
+
$expercashelvMock = $this->getModelMock('expercash/expercashelv', array(
|
118 |
+
'getConfigData'
|
119 |
+
)
|
120 |
+
);
|
121 |
+
|
122 |
+
$expercashelvMock->expects($this->any())
|
123 |
+
->method('getConfigData')
|
124 |
+
->will($this->returnValue(Expercash_Expercash_Model_Expercashelv::PAYMENT_TYPE_ELV_BUY));
|
125 |
+
|
126 |
+
$this->assertTrue($expercashelvMock->isDirectSaleEnabled());
|
127 |
+
|
128 |
+
$expercashelvMock = $this->getModelMock('expercash/expercashelv', array(
|
129 |
+
'getConfigData'
|
130 |
+
)
|
131 |
+
);
|
132 |
+
|
133 |
+
$expercashelvMock->expects($this->any())
|
134 |
+
->method('getConfigData')
|
135 |
+
->will($this->returnValue(Expercash_Expercash_Model_Expercashelv::PAYMENT_TYPE_ELV_AUTH));
|
136 |
+
|
137 |
+
$this->assertFalse($expercashelvMock->isDirectSaleEnabled());
|
138 |
+
|
139 |
+
|
140 |
+
|
141 |
+
|
142 |
+
}
|
143 |
+
}
|
app/code/community/Expercash/Expercash/Test/Model/ExpercashelvTest/fixtures/.gitkeep
ADDED
File without changes
|
app/code/community/Expercash/Expercash/Test/Model/ExpercashgpTest.php
ADDED
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Expercash_Expercash_Test_Model_ExpercashgpTest extends EcomDev_PHPUnit_Test_Case_Controller
|
4 |
+
{
|
5 |
+
/**
|
6 |
+
* @var Mage_Core_Model_Store
|
7 |
+
*/
|
8 |
+
protected $store;
|
9 |
+
|
10 |
+
public function setUp()
|
11 |
+
{
|
12 |
+
parent::setUp();
|
13 |
+
$this->store = Mage::app()->getStore(0)->load(0);
|
14 |
+
}
|
15 |
+
|
16 |
+
public function testExpercashccCodeProperty()
|
17 |
+
{
|
18 |
+
$expercashgp = Mage::getModel('expercash/expercashgp');
|
19 |
+
$this->assertEquals('expercashgp', $expercashgp->getCode());
|
20 |
+
$this->assertNotEquals('expercash', $expercashgp->getCode());
|
21 |
+
}
|
22 |
+
|
23 |
+
public function testExpercashIsGatewayProperty()
|
24 |
+
{
|
25 |
+
$expercashgp = Mage::getModel('expercash/expercashgp');
|
26 |
+
$this->assertEquals(false, $expercashgp->isGateway());
|
27 |
+
$this->assertNotEquals(true, $expercashgp->isGateway());
|
28 |
+
}
|
29 |
+
|
30 |
+
public function testExpercashCanAuthorizeProperty()
|
31 |
+
{
|
32 |
+
$expercashgp = Mage::getModel('expercash/expercashgp');
|
33 |
+
$this->assertEquals(true, $expercashgp->canAuthorize());
|
34 |
+
$this->assertNotEquals(false, $expercashgp->canAuthorize());
|
35 |
+
}
|
36 |
+
|
37 |
+
public function testExpercashCanCaptureProperty()
|
38 |
+
{
|
39 |
+
$expercashgp = Mage::getModel('expercash/expercashgp');
|
40 |
+
$this->assertFalse($expercashgp->canCapture());
|
41 |
+
$this->assertNotEquals(true, $expercashgp->canCapture());
|
42 |
+
|
43 |
+
}
|
44 |
+
|
45 |
+
public function testExpercashCanCapturePartialProperty()
|
46 |
+
{
|
47 |
+
$expercashgp = Mage::getModel('expercash/expercashgp');
|
48 |
+
$this->assertEquals(false, $expercashgp->canCapturePartial());
|
49 |
+
$this->assertNotEquals(true, $expercashgp->canCapturePartial());
|
50 |
+
}
|
51 |
+
|
52 |
+
public function testExpercashCanRefundProperty()
|
53 |
+
{
|
54 |
+
$expercashgp = Mage::getModel('expercash/expercashgp');
|
55 |
+
$this->assertEquals(false, $expercashgp->canRefund());
|
56 |
+
$this->assertNotEquals(true, $expercashgp->canRefund());
|
57 |
+
}
|
58 |
+
|
59 |
+
public function testExpercashVoidProperty()
|
60 |
+
{
|
61 |
+
$expercashgp = Mage::getModel('expercash/expercashgp');
|
62 |
+
$payment = new Varien_Object();
|
63 |
+
$this->assertEquals(false, $expercashgp->canVoid($payment));
|
64 |
+
$this->assertNotEquals(true, $expercashgp->canVoid($payment));
|
65 |
+
}
|
66 |
+
|
67 |
+
public function testExpercashUseInternalProperty()
|
68 |
+
{
|
69 |
+
$expercashgp = Mage::getModel('expercash/expercashgp');
|
70 |
+
$this->assertEquals(false, $expercashgp->canUseInternal());
|
71 |
+
$this->assertNotEquals(true, $expercashgp->canUseInternal());
|
72 |
+
}
|
73 |
+
|
74 |
+
public function testExpercashUseCheckoutProperty()
|
75 |
+
{
|
76 |
+
$expercashgp = Mage::getModel('expercash/expercashgp');
|
77 |
+
$this->assertEquals(true, $expercashgp->canUseCheckout());
|
78 |
+
$this->assertNotEquals(false, $expercashgp->canUseCheckout());
|
79 |
+
}
|
80 |
+
|
81 |
+
public function testExpercashUseMultishippingProperty()
|
82 |
+
{
|
83 |
+
$expercashgp = Mage::getModel('expercash/expercashgp');
|
84 |
+
$this->assertEquals(false, $expercashgp->canUseForMultishipping());
|
85 |
+
$this->assertNotEquals(true, $expercashgp->canUseForMultishipping());
|
86 |
+
}
|
87 |
+
|
88 |
+
public function testExpercashGpDirectSaleEnabled()
|
89 |
+
{
|
90 |
+
$this->assertFalse(Mage::getModel('expercash/expercashgp')->isDirectSaleEnabled());
|
91 |
+
|
92 |
+
$expercashgpMock = $this->getModelMock('expercash/expercashgp', array(
|
93 |
+
'getConfigData'
|
94 |
+
)
|
95 |
+
);
|
96 |
+
|
97 |
+
$expercashgpMock->expects($this->any())
|
98 |
+
->method('getConfigData')
|
99 |
+
->will($this->returnValue(Expercash_Expercash_Model_Expercashgp::PAYMENT_TYPE_GP));
|
100 |
+
$this->assertTrue($expercashgpMock->isDirectSaleEnabled());
|
101 |
+
}
|
102 |
+
}
|
app/code/community/Expercash/Expercash/Test/Model/ExpercashgpTest/fixtures/.gitkeep
ADDED
File without changes
|
app/code/community/Expercash/Expercash/Test/Model/ExpercashmpTest.php
ADDED
@@ -0,0 +1,141 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Expercash_Expercash_Test_Model_ExpercashmpTest extends EcomDev_PHPUnit_Test_Case_Controller
|
4 |
+
{
|
5 |
+
/**
|
6 |
+
* @var Mage_Core_Model_Store
|
7 |
+
*/
|
8 |
+
protected $store;
|
9 |
+
|
10 |
+
public function setUp()
|
11 |
+
{
|
12 |
+
parent::setUp();
|
13 |
+
$this->store = Mage::app()->getStore(0)->load(0);
|
14 |
+
}
|
15 |
+
|
16 |
+
public function testExpercashccCodeProperty()
|
17 |
+
{
|
18 |
+
$expercashmpf = Mage::getModel('expercash/expercashmp');
|
19 |
+
$this->assertEquals('expercashmp', $expercashmpf->getCode());
|
20 |
+
$this->assertNotEquals('expercash', $expercashmpf->getCode());
|
21 |
+
}
|
22 |
+
|
23 |
+
public function testExpercashIsGatewayProperty()
|
24 |
+
{
|
25 |
+
$expercashmpf = Mage::getModel('expercash/expercashmp');
|
26 |
+
$this->assertEquals(false, $expercashmpf->isGateway());
|
27 |
+
$this->assertNotEquals(true, $expercashmpf->isGateway());
|
28 |
+
}
|
29 |
+
|
30 |
+
public function testExpercashCanAuthorizeProperty()
|
31 |
+
{
|
32 |
+
$expercashmpf = Mage::getModel('expercash/expercashmp');
|
33 |
+
$this->assertEquals(true, $expercashmpf->canAuthorize());
|
34 |
+
$this->assertNotEquals(false, $expercashmpf->canAuthorize());
|
35 |
+
}
|
36 |
+
|
37 |
+
public function testExpercashCanCapturePartialProperty()
|
38 |
+
{
|
39 |
+
$expercashmpf = Mage::getModel('expercash/expercashmp');
|
40 |
+
$this->assertEquals(true, $expercashmpf->canCapturePartial());
|
41 |
+
$this->assertNotEquals(false, $expercashmpf->canCapturePartial());
|
42 |
+
}
|
43 |
+
|
44 |
+
public function testExpercashCanRefundProperty()
|
45 |
+
{
|
46 |
+
$expercashmpf = Mage::getModel('expercash/expercashmp');
|
47 |
+
$this->assertEquals(false, $expercashmpf->canRefund());
|
48 |
+
$this->assertNotEquals(true, $expercashmpf->canRefund());
|
49 |
+
}
|
50 |
+
|
51 |
+
public function testExpercashVoidProperty()
|
52 |
+
{
|
53 |
+
$expercashmpf = Mage::getModel('expercash/expercashmp');
|
54 |
+
$payment = new Varien_Object();
|
55 |
+
$this->assertEquals(false, $expercashmpf->canVoid($payment));
|
56 |
+
$this->assertNotEquals(true, $expercashmpf->canVoid($payment));
|
57 |
+
}
|
58 |
+
|
59 |
+
public function testExpercashUseInternalProperty()
|
60 |
+
{
|
61 |
+
$expercashmpf = Mage::getModel('expercash/expercashmp');
|
62 |
+
$this->assertEquals(false, $expercashmpf->canUseInternal());
|
63 |
+
$this->assertNotEquals(true, $expercashmpf->canUseInternal());
|
64 |
+
}
|
65 |
+
|
66 |
+
public function testExpercashUseCheckoutProperty()
|
67 |
+
{
|
68 |
+
$expercashmpf = Mage::getModel('expercash/expercashmp');
|
69 |
+
$this->assertEquals(true, $expercashmpf->canUseCheckout());
|
70 |
+
$this->assertNotEquals(false, $expercashmpf->canUseCheckout());
|
71 |
+
}
|
72 |
+
|
73 |
+
public function testExpercashUseMultishippingProperty()
|
74 |
+
{
|
75 |
+
$expercashmpf = Mage::getModel('expercash/expercashmp');
|
76 |
+
$this->assertEquals(false, $expercashmpf->canUseForMultishipping());
|
77 |
+
$this->assertNotEquals(true, $expercashmpf->canUseForMultishipping());
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Test for canCapture in authorization mode
|
82 |
+
*/
|
83 |
+
public function testCanCaptureAuthorize()
|
84 |
+
{
|
85 |
+
$expercashmpfMock = $this->getModelMock('expercash/expercashmp', array(
|
86 |
+
'getExperCashInfo'
|
87 |
+
)
|
88 |
+
);
|
89 |
+
$expercashmpfMock->expects($this->once())
|
90 |
+
->method('getExperCashInfo')
|
91 |
+
->with($this->equalTo('expercash_request_type'))
|
92 |
+
->will($this->returnValue('masterpass_authorize'));
|
93 |
+
|
94 |
+
$this->assertTrue($expercashmpfMock->canCapture());
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Test for canCapture in direct sale mode
|
99 |
+
*/
|
100 |
+
public function testCanCaptureMpBuy()
|
101 |
+
{
|
102 |
+
$expercashmpfMock = $this->getModelMock('expercash/expercashmp', array(
|
103 |
+
'getExperCashInfo'
|
104 |
+
)
|
105 |
+
);
|
106 |
+
|
107 |
+
$expercashmpfMock->expects($this->once())
|
108 |
+
->method('getExperCashInfo')
|
109 |
+
->with($this->equalTo('expercash_request_type'))
|
110 |
+
->will($this->returnValue('masterpass_buy'));
|
111 |
+
|
112 |
+
$this->assertFalse($expercashmpfMock->canCapture());
|
113 |
+
}
|
114 |
+
|
115 |
+
public function testIsDirectSaleEnabled()
|
116 |
+
{
|
117 |
+
$expercashmpfMock = $this->getModelMock('expercash/expercashmp', array(
|
118 |
+
'getConfigData'
|
119 |
+
)
|
120 |
+
);
|
121 |
+
|
122 |
+
$expercashmpfMock->expects($this->any())
|
123 |
+
->method('getConfigData')
|
124 |
+
->will($this->returnValue(Expercash_Expercash_Model_Expercashmp::PAYMENT_TYPE_MP_BUY));
|
125 |
+
|
126 |
+
$this->assertTrue($expercashmpfMock->isDirectSaleEnabled());
|
127 |
+
|
128 |
+
$expercashmpfMock = $this->getModelMock('expercash/expercashmp', array(
|
129 |
+
'getConfigData'
|
130 |
+
)
|
131 |
+
);
|
132 |
+
|
133 |
+
$expercashmpfMock->expects($this->any())
|
134 |
+
->method('getConfigData')
|
135 |
+
->will($this->returnValue(Expercash_Expercash_Model_Expercashmp::PAYMENT_TYPE_MP_AUTH));
|
136 |
+
|
137 |
+
$this->assertFalse($expercashmpfMock->isDirectSaleEnabled());
|
138 |
+
}
|
139 |
+
|
140 |
+
|
141 |
+
}
|
app/code/community/Expercash/Expercash/Test/Model/ExpercashmpfTest.php
ADDED
@@ -0,0 +1,204 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Expercash_Expercash_Test_Model_ExpercashmpfTest extends EcomDev_PHPUnit_Test_Case_Controller
|
4 |
+
{
|
5 |
+
/**
|
6 |
+
* @var Mage_Core_Model_Store
|
7 |
+
*/
|
8 |
+
protected $store;
|
9 |
+
|
10 |
+
public function setUp()
|
11 |
+
{
|
12 |
+
parent::setUp();
|
13 |
+
$this->config = Mage::getModel('expercash/config');
|
14 |
+
$this->store = Mage::app()->getStore(0)->load(1);
|
15 |
+
}
|
16 |
+
|
17 |
+
public function testExpercashccCodeProperty()
|
18 |
+
{
|
19 |
+
$expercashmpf = Mage::getModel('expercash/expercashmpf');
|
20 |
+
$this->assertEquals('expercashmpf', $expercashmpf->getCode());
|
21 |
+
$this->assertNotEquals('expercash', $expercashmpf->getCode());
|
22 |
+
}
|
23 |
+
|
24 |
+
public function testExpercashIsGatewayProperty()
|
25 |
+
{
|
26 |
+
$expercashmpf = Mage::getModel('expercash/expercashmpf');
|
27 |
+
$this->assertEquals(false, $expercashmpf->isGateway());
|
28 |
+
$this->assertNotEquals(true, $expercashmpf->isGateway());
|
29 |
+
}
|
30 |
+
|
31 |
+
public function testExpercashCanAuthorizeProperty()
|
32 |
+
{
|
33 |
+
$expercashmpf = Mage::getModel('expercash/expercashmpf');
|
34 |
+
$this->assertEquals(true, $expercashmpf->canAuthorize());
|
35 |
+
$this->assertNotEquals(false, $expercashmpf->canAuthorize());
|
36 |
+
}
|
37 |
+
|
38 |
+
public function testExpercashCanCapturePartialProperty()
|
39 |
+
{
|
40 |
+
$expercashmpf = Mage::getModel('expercash/expercashmpf');
|
41 |
+
$this->assertEquals(true, $expercashmpf->canCapturePartial());
|
42 |
+
$this->assertNotEquals(false, $expercashmpf->canCapturePartial());
|
43 |
+
}
|
44 |
+
|
45 |
+
public function testExpercashCanRefundProperty()
|
46 |
+
{
|
47 |
+
$expercashmpf = Mage::getModel('expercash/expercashmpf');
|
48 |
+
$this->assertEquals(false, $expercashmpf->canRefund());
|
49 |
+
$this->assertNotEquals(true, $expercashmpf->canRefund());
|
50 |
+
}
|
51 |
+
|
52 |
+
public function testExpercashVoidProperty()
|
53 |
+
{
|
54 |
+
$expercashmpf = Mage::getModel('expercash/expercashmpf');
|
55 |
+
$payment = new Varien_Object();
|
56 |
+
$this->assertEquals(false, $expercashmpf->canVoid($payment));
|
57 |
+
$this->assertNotEquals(true, $expercashmpf->canVoid($payment));
|
58 |
+
}
|
59 |
+
|
60 |
+
public function testExpercashUseInternalProperty()
|
61 |
+
{
|
62 |
+
$expercashmpf = Mage::getModel('expercash/expercashmpf');
|
63 |
+
$this->assertEquals(false, $expercashmpf->canUseInternal());
|
64 |
+
$this->assertNotEquals(true, $expercashmpf->canUseInternal());
|
65 |
+
}
|
66 |
+
|
67 |
+
public function testExpercashUseCheckoutProperty()
|
68 |
+
{
|
69 |
+
$expercashmpf = Mage::getModel('expercash/expercashmpf');
|
70 |
+
$this->assertEquals(true, $expercashmpf->canUseCheckout());
|
71 |
+
$this->assertNotEquals(false, $expercashmpf->canUseCheckout());
|
72 |
+
}
|
73 |
+
|
74 |
+
public function testExpercashUseMultishippingProperty()
|
75 |
+
{
|
76 |
+
$expercashmpf = Mage::getModel('expercash/expercashmpf');
|
77 |
+
$this->assertEquals(false, $expercashmpf->canUseForMultishipping());
|
78 |
+
$this->assertNotEquals(true, $expercashmpf->canUseForMultishipping());
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* Test for canCapture in authorization mode
|
83 |
+
*/
|
84 |
+
public function testCanCaptureAuthorize()
|
85 |
+
{
|
86 |
+
$expercashmpfMock = $this->getModelMock('expercash/expercashmpf', array(
|
87 |
+
'getExperCashInfo'
|
88 |
+
));
|
89 |
+
|
90 |
+
$expercashmpfMock->expects($this->any())
|
91 |
+
->method('getExperCashInfo')
|
92 |
+
->with($this->equalTo('expercash_request_type'))
|
93 |
+
->will($this->returnValue('masterpass_authorize'));
|
94 |
+
|
95 |
+
$this->assertTrue($expercashmpfMock->canCapture());
|
96 |
+
}
|
97 |
+
|
98 |
+
/**
|
99 |
+
* Test for canCapture in direct sale mode
|
100 |
+
*/
|
101 |
+
public function testCanCaptureMpBuy()
|
102 |
+
{
|
103 |
+
$expercashmpfMock = $this->getModelMock('expercash/expercashmpf', array(
|
104 |
+
'getExperCashInfo'
|
105 |
+
));
|
106 |
+
|
107 |
+
$expercashmpfMock->expects($this->any())
|
108 |
+
->method('getExperCashInfo')
|
109 |
+
->with($this->equalTo('expercash_request_type'))
|
110 |
+
->will($this->returnValue('masterpass_buy'));
|
111 |
+
|
112 |
+
$this->assertTrue($expercashmpfMock->canCapture());
|
113 |
+
}
|
114 |
+
|
115 |
+
/**
|
116 |
+
* Check if payment model enables direct depending on given payment type.
|
117 |
+
*/
|
118 |
+
public function testIsDirectSaleEnabled()
|
119 |
+
{
|
120 |
+
$mock = $this->getModelMock('expercash/expercashmpf', array('getConfigData'));
|
121 |
+
$mock
|
122 |
+
->expects($this->any())
|
123 |
+
->method('getConfigData')
|
124 |
+
->with($this->equalTo('payment_action'))
|
125 |
+
->will($this->onConsecutiveCalls(
|
126 |
+
Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE_CAPTURE,
|
127 |
+
Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE
|
128 |
+
))
|
129 |
+
;
|
130 |
+
$this->replaceByMock('model', 'expercash/expercashmpf', $mock);
|
131 |
+
|
132 |
+
|
133 |
+
$payment = Mage::getModel('expercash/expercashmpf');
|
134 |
+
|
135 |
+
$this->assertTrue($payment->isDirectSaleEnabled());
|
136 |
+
$this->assertFalse($payment->isDirectSaleEnabled());
|
137 |
+
}
|
138 |
+
|
139 |
+
/**
|
140 |
+
* @loadFixture quote.yaml
|
141 |
+
*
|
142 |
+
*/
|
143 |
+
public function testIsAvailable()
|
144 |
+
{
|
145 |
+
$customerSession = $this->getModelMock(
|
146 |
+
'customer/session', array('init', 'save')
|
147 |
+
);
|
148 |
+
$this->replaceByMock('model', 'customer/session', $customerSession);
|
149 |
+
$quote = Mage::getModel('sales/quote')->load(1);
|
150 |
+
$this->store->setConfig('payment/expercashmpf/active', 1);
|
151 |
+
$this->assertTrue(Mage::getModel('expercash/expercashmpf')->isAvailable($quote));
|
152 |
+
|
153 |
+
$quote = Mage::getModel('sales/quote')->load(2);
|
154 |
+
$this->store->resetConfig();
|
155 |
+
$this->store->setConfig('payment/expercashmpf/active', 0);
|
156 |
+
|
157 |
+
$this->assertFalse(Mage::getModel('expercash/expercashmpf')->isAvailable($quote));
|
158 |
+
|
159 |
+
|
160 |
+
$quote = Mage::getModel('sales/quote')->load(1);
|
161 |
+
$this->store->setConfig('payment/expercashmpf/active', 1);
|
162 |
+
$this->assertTrue(Mage::getModel('expercash/expercashmpf')->isAvailable($quote));
|
163 |
+
|
164 |
+
$mock = $this->getModelMock('expercash/expercashmpf', array('getCurrenciesArray'));
|
165 |
+
$mock
|
166 |
+
->expects($this->any())
|
167 |
+
->method('getCurrenciesArray')
|
168 |
+
->will($this->returnValue(array('foo')));
|
169 |
+
$this->replaceByMock('model', 'expercash/expercashmpf', $mock);
|
170 |
+
|
171 |
+
$this->assertFalse(Mage::getModel('expercash/expercashmpf')->isAvailable($quote));
|
172 |
+
|
173 |
+
}
|
174 |
+
|
175 |
+
public function testValidate()
|
176 |
+
{
|
177 |
+
$order = Mage::getModel('sales/order');
|
178 |
+
$quote = Mage::getModel('sales/quote');
|
179 |
+
$quote->getPayment()->setMethod('expercashmpf');
|
180 |
+
$billindAddress = Mage::getModel('sales/order_address');
|
181 |
+
$billindAddress->setCountryId(1299);
|
182 |
+
$order->setBillingAddress($billindAddress);
|
183 |
+
$infoInstance = Mage::getModel('sales/order_payment');
|
184 |
+
$infoInstance->setOrder($order);
|
185 |
+
$infoInstance->setQuote($quote);
|
186 |
+
|
187 |
+
|
188 |
+
|
189 |
+
$mock = $this->getModelMock('expercash/expercashmpf', array('canUseForCountry'));
|
190 |
+
$mock
|
191 |
+
->expects($this->any())
|
192 |
+
->method('canUseForCountry')
|
193 |
+
->will($this->returnValue(false));
|
194 |
+
$this->replaceByMock('model', 'expercash/expercashmpf', $mock);
|
195 |
+
|
196 |
+
$mock->setInfoInstance($infoInstance);
|
197 |
+
$mock->validate();
|
198 |
+
|
199 |
+
|
200 |
+
$this->assertNotEquals('expercashmpf', $quote->getPayment()->getMethod());
|
201 |
+
$this->assertEquals(null, $quote->getPayment()->getMethod());
|
202 |
+
|
203 |
+
}
|
204 |
+
}
|
app/code/community/Expercash/Expercash/Test/Model/ExpercashmpfTest/fixtures/quote.yaml
ADDED
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
tables:
|
2 |
+
sales/quote:
|
3 |
+
- entity_id: 1
|
4 |
+
store_id: 1
|
5 |
+
base_grand_total: 119.00
|
6 |
+
grand_total: 119.00
|
7 |
+
quote_currency_code: 'EUR'
|
8 |
+
customer_gender: 1
|
9 |
+
shipping_method: 'flatrate_flatrate'
|
10 |
+
|
11 |
+
- entity_id: 2
|
12 |
+
base_grand_total: 119.00
|
13 |
+
grand_total: 200.00
|
14 |
+
currency: '$'
|
15 |
+
customer_gender: 1
|
16 |
+
shipping_method: 'flatrate_flatrate'
|
17 |
+
|
18 |
+
- entity_id: 3
|
19 |
+
base_grand_total: 119.00
|
20 |
+
grand_total: 200.00
|
21 |
+
currency: '$'
|
22 |
+
customer_gender: 1
|
23 |
+
shipping_method: 'flatrate_flatrate'
|
24 |
+
|
25 |
+
- entity_id: 4
|
26 |
+
base_grand_total: 119.00
|
27 |
+
grand_total: 200.00
|
28 |
+
currency: 'EUR'
|
29 |
+
customer_gender: 1
|
30 |
+
shipping_method: 'flatrate_flatrate'
|
31 |
+
|
32 |
+
- entity_id: 5
|
33 |
+
base_grand_total: 119.00
|
34 |
+
grand_total: 1200.00
|
35 |
+
currency: 'EUR'
|
36 |
+
customer_gender: 1
|
37 |
+
shipping_method: 'flatrate_flatrate'
|
38 |
+
|
39 |
+
sales/quote_payment:
|
40 |
+
|
41 |
+
- id: 1
|
42 |
+
entity_id: 1
|
43 |
+
parent_id: 1
|
44 |
+
quote_id: 1
|
45 |
+
method: 'expercashmpf'
|
46 |
+
|
47 |
+
sales/quote_address:
|
48 |
+
|
49 |
+
- entity_id: 1
|
50 |
+
quote_id: 1
|
51 |
+
address_type: 'billing'
|
52 |
+
firstname: 'Hubertus'
|
53 |
+
postcode: '04229'
|
54 |
+
lastname: 'Fürstenberg'
|
55 |
+
street: 'An der Tabaksmühle 3a'
|
56 |
+
city: 'Leipzig'
|
57 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
58 |
+
country_id: 'DE'
|
59 |
+
prefix: 'Prof. Dr.'
|
60 |
+
middlename: 'von'
|
61 |
+
suffix: 'MdL'
|
62 |
+
company: ''
|
63 |
+
fax: '12345678'
|
64 |
+
|
65 |
+
- entity_id: 2
|
66 |
+
quote_id: 4
|
67 |
+
address_type: 'billing'
|
68 |
+
firstname: 'Hubertus'
|
69 |
+
postcode: '04229'
|
70 |
+
lastname: 'Fürstenberg'
|
71 |
+
street: 'An der Tabaksmühle 3a'
|
72 |
+
city: 'Leipzig'
|
73 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
74 |
+
country_id: 'CH'
|
75 |
+
prefix: 'Prof. Dr.'
|
76 |
+
middlename: 'von'
|
77 |
+
suffix: 'MdL'
|
78 |
+
company: ''
|
79 |
+
fax: '12345678'
|
80 |
+
|
81 |
+
- entity_id: 3
|
82 |
+
quote_id: 5
|
83 |
+
address_type: 'billing'
|
84 |
+
firstname: 'Hubertus'
|
85 |
+
postcode: '04229'
|
86 |
+
lastname: 'Fürstenberg'
|
87 |
+
street: 'An der Tabaksmühle 3a'
|
88 |
+
city: 'Leipzig'
|
89 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
90 |
+
country_id: 'DE'
|
91 |
+
prefix: 'Prof. Dr.'
|
92 |
+
middlename: 'von'
|
93 |
+
suffix: 'MdL'
|
94 |
+
company: ''
|
95 |
+
fax: '12345678'
|
app/code/community/Expercash/Expercash/Test/Model/ExpercashpcTest.php
ADDED
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Class Expercash_Expercash_Test_Model_ExpercashpcTest
|
4 |
+
*/
|
5 |
+
class Expercash_Expercash_Test_Model_ExpercashpcTest extends EcomDev_PHPUnit_Test_Case
|
6 |
+
{
|
7 |
+
/**
|
8 |
+
* @var Mage_Core_Model_Store
|
9 |
+
*/
|
10 |
+
protected $store;
|
11 |
+
|
12 |
+
/**
|
13 |
+
* @var Expercash_Expercash_Model_Config
|
14 |
+
*/
|
15 |
+
protected $config;
|
16 |
+
|
17 |
+
protected function setUp()
|
18 |
+
{
|
19 |
+
parent::setUp();
|
20 |
+
$this->setCurrentStore(Mage_Core_Model_App::DISTRO_STORE_ID);
|
21 |
+
}
|
22 |
+
|
23 |
+
|
24 |
+
public function testExpercashpcCodeProperty()
|
25 |
+
{
|
26 |
+
$expercashpc = Mage::getModel('expercash/expercashpc');
|
27 |
+
$this->assertEquals('expercashpc', $expercashpc->getCode());
|
28 |
+
$this->assertNotEquals('expercash', $expercashpc->getCode());
|
29 |
+
}
|
30 |
+
|
31 |
+
public function testExpercashpcCanCaptureProperty()
|
32 |
+
{
|
33 |
+
$expercashpc = Mage::getModel('expercash/expercashpc');
|
34 |
+
$this->assertFalse($expercashpc->canCapture());
|
35 |
+
$this->assertNotEquals(true, $expercashpc->canCapture());
|
36 |
+
}
|
37 |
+
|
38 |
+
public function testExpercashpcCanCapturePartialProperty()
|
39 |
+
{
|
40 |
+
$expercashpc = Mage::getModel('expercash/expercashpc');
|
41 |
+
$this->assertEquals(false, $expercashpc->canCapturePartial());
|
42 |
+
$this->assertNotEquals(true, $expercashpc->canCapturePartial());
|
43 |
+
}
|
44 |
+
|
45 |
+
public function testGetConfigData()
|
46 |
+
{
|
47 |
+
$this->assertEquals(
|
48 |
+
Expercash_Expercash_Model_Expercashpc::PAYMENT_TYPE_PC,
|
49 |
+
Mage::getModel('expercash/expercashpc')->getConfigData('paymenttype')
|
50 |
+
);
|
51 |
+
$this->assertNotEquals(
|
52 |
+
Expercash_Expercash_Model_Expercashpc::PAYMENT_TYPE_PC,
|
53 |
+
Mage::getModel('expercash/expercashpc')->getConfigData('iframeUrl')
|
54 |
+
);
|
55 |
+
}
|
56 |
+
|
57 |
+
|
58 |
+
/**
|
59 |
+
* @loadFixture quote.yaml
|
60 |
+
*/
|
61 |
+
public function testIsAvailable()
|
62 |
+
{
|
63 |
+
$customerSession = $this->getModelMock('customer/session', array('init', 'save'));
|
64 |
+
$this->replaceByMock('singleton', 'customer/session', $customerSession);
|
65 |
+
|
66 |
+
|
67 |
+
// (1) valid quote but Barzahlen not active
|
68 |
+
$quote = Mage::getModel('sales/quote')->load(1);
|
69 |
+
self::app()->getStore()->setConfig('payment/expercashpc/active', 0);
|
70 |
+
$this->assertFalse(Mage::getModel('expercash/expercashpc')->isAvailable($quote));
|
71 |
+
|
72 |
+
// (2) invalid quote and Barzahlen active
|
73 |
+
self::app()->getStore()->setConfig('payment/expercashpc/active', 1);
|
74 |
+
$this->assertFalse(Mage::getModel('expercash/expercashpc')->isAvailable(null));
|
75 |
+
|
76 |
+
// (2) valid quote and Barzahlen active
|
77 |
+
$this->assertTrue(Mage::getModel('expercash/expercashpc')->isAvailable($quote));
|
78 |
+
|
79 |
+
// (3) invalid quote and Barzahlen active
|
80 |
+
$quote = Mage::getModel('sales/quote')->load(3);
|
81 |
+
$this->assertFalse(Mage::getModel('expercash/expercashpc')->isAvailable($quote));
|
82 |
+
|
83 |
+
// (4) invalid quote (currency) and Barzahlen active
|
84 |
+
$quote = Mage::getModel('sales/quote')->load(4);
|
85 |
+
$this->assertFalse(Mage::getModel('expercash/expercashpc')->isAvailable($quote));
|
86 |
+
|
87 |
+
// (5) invalid quote (grand total) and Barzahlen active
|
88 |
+
$quote = Mage::getModel('sales/quote')->load(5);
|
89 |
+
$this->assertFalse(Mage::getModel('expercash/expercashpc')->isAvailable($quote));
|
90 |
+
}
|
91 |
+
}
|
app/code/community/Expercash/Expercash/Test/Model/ExpercashpcTest/fixtures/.gitkeep
ADDED
File without changes
|
app/code/community/Expercash/Expercash/Test/Model/ExpercashpcTest/fixtures/quote.yaml
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
tables:
|
2 |
+
sales/quote:
|
3 |
+
- entity_id: 1
|
4 |
+
store_id: 1
|
5 |
+
base_grand_total: 119.00
|
6 |
+
grand_total: 119.00
|
7 |
+
quote_currency_code: 'EUR'
|
8 |
+
customer_gender: 1
|
9 |
+
|
10 |
+
- entity_id: 2
|
11 |
+
store_id: 1
|
12 |
+
base_grand_total: 119.00
|
13 |
+
grand_total: 200.00
|
14 |
+
quote_currency_code: 'EUR'
|
15 |
+
customer_gender: 1
|
16 |
+
|
17 |
+
- entity_id: 3
|
18 |
+
store_id: 1
|
19 |
+
base_grand_total: 119.00
|
20 |
+
grand_total: 200.00
|
21 |
+
quote_currency_code: 'USD'
|
22 |
+
customer_gender: 1
|
23 |
+
|
24 |
+
- entity_id: 4
|
25 |
+
store_id: 1
|
26 |
+
base_grand_total: 119.00
|
27 |
+
grand_total: 200.00
|
28 |
+
quote_currency_code: 'EUR'
|
29 |
+
customer_gender: 1
|
30 |
+
|
31 |
+
- entity_id: 5
|
32 |
+
store_id: 1
|
33 |
+
base_grand_total: 119.00
|
34 |
+
grand_total: 1200.00
|
35 |
+
quote_currency_code: 'EUR'
|
36 |
+
customer_gender: 1
|
37 |
+
|
38 |
+
sales/quote_payment:
|
39 |
+
- id: 1
|
40 |
+
entity_id: 1
|
41 |
+
parent_id: 1
|
42 |
+
quote_id: 1
|
43 |
+
method: 'expercashpc'
|
44 |
+
|
45 |
+
sales/quote_address:
|
46 |
+
- address_id: 1
|
47 |
+
quote_id: 1
|
48 |
+
address_type: 'billing'
|
49 |
+
firstname: 'Hubertus'
|
50 |
+
postcode: '04229'
|
51 |
+
lastname: 'Fürstenberg'
|
52 |
+
street: 'An der Tabaksmühle 3a'
|
53 |
+
city: 'Leipzig'
|
54 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
55 |
+
country_id: 'DE'
|
56 |
+
prefix: 'Prof. Dr.'
|
57 |
+
middlename: 'von'
|
58 |
+
suffix: 'MdL'
|
59 |
+
company: ''
|
60 |
+
fax: 12345678
|
61 |
+
|
62 |
+
- address_id: 2
|
63 |
+
quote_id: 4
|
64 |
+
address_type: 'billing'
|
65 |
+
firstname: 'Hubertus'
|
66 |
+
postcode: '04229'
|
67 |
+
lastname: 'Fürstenberg'
|
68 |
+
street: 'An der Tabaksmühle 3a'
|
69 |
+
city: 'Leipzig'
|
70 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
71 |
+
country_id: 'CH'
|
72 |
+
prefix: 'Prof. Dr.'
|
73 |
+
middlename: 'von'
|
74 |
+
suffix: 'MdL'
|
75 |
+
company: ''
|
76 |
+
fax: 12345678
|
77 |
+
|
78 |
+
- address_id: 3
|
79 |
+
quote_id: 5
|
80 |
+
address_type: 'billing'
|
81 |
+
firstname: 'Hubertus'
|
82 |
+
postcode: '04229'
|
83 |
+
lastname: 'Fürstenberg'
|
84 |
+
street: 'An der Tabaksmühle 3a'
|
85 |
+
city: 'Leipzig'
|
86 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
87 |
+
country_id: 'DE'
|
88 |
+
prefix: 'Prof. Dr.'
|
89 |
+
middlename: 'von'
|
90 |
+
suffix: 'MdL'
|
91 |
+
company: ''
|
92 |
+
fax: 12345678
|
app/code/community/Expercash/Expercash/Test/Model/ExpercashppTest.php
ADDED
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Expercash_Expercash_Test_Model_ExpercashppTest extends EcomDev_PHPUnit_Test_Case_Controller
|
4 |
+
{
|
5 |
+
/**
|
6 |
+
* @var Mage_Core_Model_Store
|
7 |
+
*/
|
8 |
+
protected $store;
|
9 |
+
|
10 |
+
public function setUp()
|
11 |
+
{
|
12 |
+
parent::setUp();
|
13 |
+
$this->store = Mage::app()->getStore(0)->load(0);
|
14 |
+
}
|
15 |
+
|
16 |
+
public function testExpercashccCodeProperty()
|
17 |
+
{
|
18 |
+
$expercashpp = Mage::getModel('expercash/expercashpp');
|
19 |
+
$this->assertEquals('expercashpp', $expercashpp->getCode());
|
20 |
+
$this->assertNotEquals('expercash', $expercashpp->getCode());
|
21 |
+
}
|
22 |
+
|
23 |
+
public function testExpercashIsGatewayProperty()
|
24 |
+
{
|
25 |
+
$expercashpp = Mage::getModel('expercash/expercashpp');
|
26 |
+
$this->assertEquals(false, $expercashpp->isGateway());
|
27 |
+
$this->assertNotEquals(true, $expercashpp->isGateway());
|
28 |
+
}
|
29 |
+
|
30 |
+
public function testExpercashCanAuthorizeProperty()
|
31 |
+
{
|
32 |
+
$expercashpp = Mage::getModel('expercash/expercashpp');
|
33 |
+
$this->assertEquals(true, $expercashpp->canAuthorize());
|
34 |
+
$this->assertNotEquals(false, $expercashpp->canAuthorize());
|
35 |
+
}
|
36 |
+
|
37 |
+
public function testExpercashCanCaptureProperty()
|
38 |
+
{
|
39 |
+
$expercashpp = Mage::getModel('expercash/expercashpp');
|
40 |
+
$this->assertFalse($expercashpp->canCapture());
|
41 |
+
$this->assertNotEquals(true, $expercashpp->canCapture());
|
42 |
+
}
|
43 |
+
|
44 |
+
public function testExpercashCanCapturePartialProperty()
|
45 |
+
{
|
46 |
+
$expercashpp = Mage::getModel('expercash/expercashpp');
|
47 |
+
$this->assertEquals(false, $expercashpp->canCapturePartial());
|
48 |
+
$this->assertNotEquals(true, $expercashpp->canCapturePartial());
|
49 |
+
}
|
50 |
+
|
51 |
+
public function testExpercashCanRefundProperty()
|
52 |
+
{
|
53 |
+
$expercashpp = Mage::getModel('expercash/expercashpp');
|
54 |
+
$this->assertEquals(false, $expercashpp->canRefund());
|
55 |
+
$this->assertNotEquals(true, $expercashpp->canRefund());
|
56 |
+
}
|
57 |
+
|
58 |
+
public function testExpercashVoidProperty()
|
59 |
+
{
|
60 |
+
$expercashpp = Mage::getModel('expercash/expercashpp');
|
61 |
+
$payment = new Varien_Object();
|
62 |
+
$this->assertEquals(false, $expercashpp->canVoid($payment));
|
63 |
+
$this->assertNotEquals(true, $expercashpp->canVoid($payment));
|
64 |
+
}
|
65 |
+
|
66 |
+
public function testExpercashUseInternalProperty()
|
67 |
+
{
|
68 |
+
$expercashpp = Mage::getModel('expercash/expercashpp');
|
69 |
+
$this->assertEquals(false, $expercashpp->canUseInternal());
|
70 |
+
$this->assertNotEquals(true, $expercashpp->canUseInternal());
|
71 |
+
}
|
72 |
+
|
73 |
+
public function testExpercashUseCheckoutProperty()
|
74 |
+
{
|
75 |
+
$expercashpp = Mage::getModel('expercash/expercashpp');
|
76 |
+
$this->assertEquals(true, $expercashpp->canUseCheckout());
|
77 |
+
$this->assertNotEquals(false, $expercashpp->canUseCheckout());
|
78 |
+
}
|
79 |
+
|
80 |
+
public function testExpercashUseMultishippingProperty()
|
81 |
+
{
|
82 |
+
$expercashpp = Mage::getModel('expercash/expercashpp');
|
83 |
+
$this->assertEquals(false, $expercashpp->canUseForMultishipping());
|
84 |
+
$this->assertNotEquals(true, $expercashpp->canUseForMultishipping());
|
85 |
+
}
|
86 |
+
}
|
app/code/community/Expercash/Expercash/Test/Model/ExpercashsoTest.php
ADDED
@@ -0,0 +1,109 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Expercash_Expercash_Test_Model_ExpercashsoTest extends EcomDev_PHPUnit_Test_Case_Controller
|
4 |
+
{
|
5 |
+
/**
|
6 |
+
* @var Mage_Core_Model_Store
|
7 |
+
*/
|
8 |
+
protected $store;
|
9 |
+
|
10 |
+
public function setUp()
|
11 |
+
{
|
12 |
+
parent::setUp();
|
13 |
+
$this->store = Mage::app()->getStore(0)->load(0);
|
14 |
+
}
|
15 |
+
|
16 |
+
public function testExpercashccCodeProperty()
|
17 |
+
{
|
18 |
+
$expercashso = Mage::getModel('expercash/expercashso');
|
19 |
+
$this->assertEquals('expercashso', $expercashso->getCode());
|
20 |
+
$this->assertNotEquals('expercash', $expercashso->getCode());
|
21 |
+
}
|
22 |
+
|
23 |
+
public function testExpercashIsGatewayProperty()
|
24 |
+
{
|
25 |
+
$expercashso = Mage::getModel('expercash/expercashso');
|
26 |
+
$this->assertEquals(false, $expercashso->isGateway());
|
27 |
+
$this->assertNotEquals(true, $expercashso->isGateway());
|
28 |
+
}
|
29 |
+
|
30 |
+
public function testExpercashCanAuthorizeProperty()
|
31 |
+
{
|
32 |
+
$expercashso = Mage::getModel('expercash/expercashso');
|
33 |
+
$this->assertEquals(true, $expercashso->canAuthorize());
|
34 |
+
$this->assertNotEquals(false, $expercashso->canAuthorize());
|
35 |
+
}
|
36 |
+
|
37 |
+
public function testExpercashCanCaptureProperty()
|
38 |
+
{
|
39 |
+
$expercashso = Mage::getModel('expercash/expercashso');
|
40 |
+
$this->assertFalse($expercashso->canCapture());
|
41 |
+
$this->assertNotEquals(true, $expercashso->canCapture());
|
42 |
+
}
|
43 |
+
|
44 |
+
public function testExpercashCanCapturePartialProperty()
|
45 |
+
{
|
46 |
+
$expercashso = Mage::getModel('expercash/expercashso');
|
47 |
+
$this->assertEquals(false, $expercashso->canCapturePartial());
|
48 |
+
$this->assertNotEquals(true, $expercashso->canCapturePartial());
|
49 |
+
}
|
50 |
+
|
51 |
+
public function testExpercashCanRefundProperty()
|
52 |
+
{
|
53 |
+
$expercashso = Mage::getModel('expercash/expercashso');
|
54 |
+
$this->assertEquals(false, $expercashso->canRefund());
|
55 |
+
$this->assertNotEquals(true, $expercashso->canRefund());
|
56 |
+
}
|
57 |
+
|
58 |
+
public function testExpercashVoidProperty()
|
59 |
+
{
|
60 |
+
$expercashso = Mage::getModel('expercash/expercashso');
|
61 |
+
$payment = new Varien_Object();
|
62 |
+
$this->assertEquals(false, $expercashso->canVoid($payment));
|
63 |
+
$this->assertNotEquals(true, $expercashso->canVoid($payment));
|
64 |
+
}
|
65 |
+
|
66 |
+
public function testExpercashUseInternalProperty()
|
67 |
+
{
|
68 |
+
$expercashso = Mage::getModel('expercash/expercashso');
|
69 |
+
$this->assertEquals(false, $expercashso->canUseInternal());
|
70 |
+
$this->assertNotEquals(true, $expercashso->canUseInternal());
|
71 |
+
}
|
72 |
+
|
73 |
+
public function testExpercashUseCheckoutProperty()
|
74 |
+
{
|
75 |
+
$expercashso = Mage::getModel('expercash/expercashso');
|
76 |
+
$this->assertEquals(true, $expercashso->canUseCheckout());
|
77 |
+
$this->assertNotEquals(false, $expercashso->canUseCheckout());
|
78 |
+
}
|
79 |
+
|
80 |
+
public function testExpercashUseMultishippingProperty()
|
81 |
+
{
|
82 |
+
$expercashso = $this->getPaymentMethod();
|
83 |
+
$this->assertEquals(false, $expercashso->canUseForMultishipping());
|
84 |
+
$this->assertNotEquals(true, $expercashso->canUseForMultishipping());
|
85 |
+
}
|
86 |
+
|
87 |
+
public function testExpercashSoDirectSaleEnabled()
|
88 |
+
{
|
89 |
+
$this->assertFalse($this->getPaymentMethod()->isDirectSaleEnabled());
|
90 |
+
|
91 |
+
$expercashsoMock = $this->getModelMock('expercash/expercashso', array(
|
92 |
+
'getConfigData'
|
93 |
+
)
|
94 |
+
);
|
95 |
+
|
96 |
+
$expercashsoMock->expects($this->any())
|
97 |
+
->method('getConfigData')
|
98 |
+
->will($this->returnValue(Expercash_Expercash_Model_Expercashso::PAYMENT_TYPE_SO));
|
99 |
+
$this->assertTrue($expercashsoMock->isDirectSaleEnabled());
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* @return Expercash_Expercash_Model_Expercashso
|
104 |
+
*/
|
105 |
+
protected function getPaymentMethod()
|
106 |
+
{
|
107 |
+
return Mage::getModel('expercash/expercashso');
|
108 |
+
}
|
109 |
+
}
|
app/code/community/Expercash/Expercash/Test/Model/Request/IframeTest.php
ADDED
@@ -0,0 +1,242 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Expercash_Expercash_Test_Model_Request_IframeTest extends EcomDev_PHPUnit_Test_Case_Config
|
4 |
+
{
|
5 |
+
|
6 |
+
/**
|
7 |
+
* @loadFixture order
|
8 |
+
*/
|
9 |
+
public function testGetJobId()
|
10 |
+
{
|
11 |
+
$order = Mage::getModel('sales/order')->load(11);
|
12 |
+
$this->assertEquals(100000011, $this->invokeMethod('getJobId', array($order)));
|
13 |
+
|
14 |
+
}
|
15 |
+
|
16 |
+
|
17 |
+
public function testGetConfig()
|
18 |
+
{
|
19 |
+
$this->assertTrue($this->invokeMethod('getConfig', array()) instanceof Expercash_Expercash_Model_Config);
|
20 |
+
}
|
21 |
+
|
22 |
+
/**
|
23 |
+
* @loadFixture order
|
24 |
+
*/
|
25 |
+
public function testGetOrder()
|
26 |
+
{
|
27 |
+
$session = new Varien_Object();
|
28 |
+
$session->setLastOrderId(11);
|
29 |
+
$iframeModelMock = $this->getModelMock('expercash/request_iframe', array('getCheckoutSession'));
|
30 |
+
$iframeModelMock->expects($this->any())
|
31 |
+
->method('getCheckoutSession')
|
32 |
+
->will($this->returnValue($session));
|
33 |
+
|
34 |
+
$this->assertEquals(11, $iframeModelMock->getOrder()->getId());
|
35 |
+
$this->assertTrue($iframeModelMock->getOrder() instanceof Mage_Sales_Model_Order);
|
36 |
+
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* @loadFixture order
|
41 |
+
*/
|
42 |
+
public function testGetStoreId()
|
43 |
+
{
|
44 |
+
$order = Mage::getModel('sales/order')->load(11);
|
45 |
+
$iframeModelMock = $this->getModelMock('expercash/request_iframe', array('getOrder'));
|
46 |
+
$iframeModelMock->expects($this->any())
|
47 |
+
->method('getOrder')
|
48 |
+
->will($this->returnValue($order));
|
49 |
+
$this->replaceByMock('model', 'expercash/request_iframe', $iframeModelMock);
|
50 |
+
$this->assertEquals(1, $this->invokeMethod('getStoreId'));
|
51 |
+
|
52 |
+
}
|
53 |
+
|
54 |
+
public function testGetCoreUrlHelper()
|
55 |
+
{
|
56 |
+
$this->assertTrue($this->invokeMethod('getCoreUrlHelper', array()) instanceof Mage_Core_Helper_Url);
|
57 |
+
}
|
58 |
+
|
59 |
+
|
60 |
+
|
61 |
+
public function testGetCheckoutSession()
|
62 |
+
{
|
63 |
+
$coreSessionMock = $this->getModelMock('checkout/session', array('init', 'start'));
|
64 |
+
$this->replaceByMock('model', 'checkout/session', $coreSessionMock);
|
65 |
+
|
66 |
+
$this->assertTrue($this->invokeMethod('getCheckoutSession', array()) instanceof $coreSessionMock);
|
67 |
+
}
|
68 |
+
|
69 |
+
|
70 |
+
public function testGetTokenSessionId()
|
71 |
+
{
|
72 |
+
$session = new Varien_Object();
|
73 |
+
$session->setData(Expercash_Expercash_Model_Config::TOKEN_REGISTRY_KEY,11);
|
74 |
+
|
75 |
+
$coreSessionMock = $this->getModelMock('core/session', array('init', 'start'));
|
76 |
+
$this->replaceByMock('model', 'core/session', $coreSessionMock);
|
77 |
+
|
78 |
+
|
79 |
+
|
80 |
+
$iframeModelMock = $this->getModelMock('expercash/request_iframe', array('getCheckoutSession'));
|
81 |
+
$iframeModelMock->expects($this->any())
|
82 |
+
->method('getCheckoutSession')
|
83 |
+
->will($this->returnValue($session));
|
84 |
+
$this->replaceByMock('model', 'expercash/request_iframe', $iframeModelMock);
|
85 |
+
|
86 |
+
$this->assertEquals(11, $this->invokeMethod('getTokenSessionId'));
|
87 |
+
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* @loadFixture order
|
92 |
+
*/
|
93 |
+
public function testSetOrderDataToSession()
|
94 |
+
{
|
95 |
+
|
96 |
+
$session = new Varien_Object();
|
97 |
+
|
98 |
+
$helperMock = $this->getHelperMock('expercash/payment', array('createExperCashOrderId'));
|
99 |
+
$helperMock->expects($this->once())
|
100 |
+
->method('createExperCashOrderId')
|
101 |
+
->will($this->returnValue('0816'));
|
102 |
+
$this->replaceByMock('helper', 'expercash/payment', $helperMock);
|
103 |
+
|
104 |
+
$session->setLastRealOrderId('0815');
|
105 |
+
$session->setLastOrderId(11);
|
106 |
+
$session->setQuoteId(666);
|
107 |
+
|
108 |
+
$coreSessionMock = $this->getModelMock('core/session', array('init', 'start'));
|
109 |
+
$this->replaceByMock('model', 'core/session', $coreSessionMock);
|
110 |
+
|
111 |
+
$iframeModelMock = $this->getModelMock('expercash/request_iframe', array('getCheckoutSession'));
|
112 |
+
$iframeModelMock->expects($this->any())
|
113 |
+
->method('getCheckoutSession')
|
114 |
+
->will($this->returnValue($session));
|
115 |
+
$iframeModelMock->setOrderDataToSession();
|
116 |
+
$this->assertEquals('0816', $session->getExpercashOrderId());
|
117 |
+
$this->assertEquals($session->getLastRealOrderId() ,$session->getExpercashRealOrderId());
|
118 |
+
$this->assertEquals($session->getQuoteId() ,$session->getExpercashQuoteId());
|
119 |
+
}
|
120 |
+
|
121 |
+
|
122 |
+
/**
|
123 |
+
* @loadFixture order
|
124 |
+
*/
|
125 |
+
public function testGetIframeParams()
|
126 |
+
{
|
127 |
+
$order = Mage::getModel('sales/order')->load(11);
|
128 |
+
|
129 |
+
$iframeModelMock = $this->getModelMock('expercash/request_iframe', array(
|
130 |
+
'getTokenSessionId',
|
131 |
+
'buildSessionKeyHash'
|
132 |
+
)
|
133 |
+
);
|
134 |
+
$iframeModelMock->expects($this->any())
|
135 |
+
->method('getTokenSessionId')
|
136 |
+
->will($this->returnValue('abcd123'));
|
137 |
+
|
138 |
+
$iframeModelMock->expects($this->any())
|
139 |
+
->method('buildSessionKeyHash')
|
140 |
+
->will($this->returnValue('123abc'));
|
141 |
+
|
142 |
+
$params = $iframeModelMock->getIframeParams($order);
|
143 |
+
|
144 |
+
$this->assertTrue(array_key_exists('preparedSession',$params));
|
145 |
+
$this->assertTrue(array_key_exists('sessionKey',$params));
|
146 |
+
|
147 |
+
$this->assertEquals('abcd123',$params['preparedSession']);
|
148 |
+
$this->assertEquals('123abc',$params['sessionKey']);
|
149 |
+
}
|
150 |
+
|
151 |
+
/**
|
152 |
+
* @loadFixture order
|
153 |
+
*/
|
154 |
+
public function testBuildSessionKeyHash()
|
155 |
+
{
|
156 |
+
$order = Mage::getModel('sales/order')->load(11);
|
157 |
+
$sessionKeyHashTest = sha1('abcd123'.'15'.'foo');
|
158 |
+
|
159 |
+
$configModelMock = $this->getModelMock('expercash/config', array('getAuthorizationkey'));
|
160 |
+
$configModelMock->expects($this->any())
|
161 |
+
->method('getAuthorizationkey')
|
162 |
+
->will($this->returnValue('foo'));
|
163 |
+
$this->replaceByMock('model', 'expercash/config', $configModelMock);
|
164 |
+
|
165 |
+
$iframeModelMock = $this->getModelMock('expercash/request_iframe', array(
|
166 |
+
'getTokenSessionId',
|
167 |
+
'getJobId'
|
168 |
+
)
|
169 |
+
);
|
170 |
+
$iframeModelMock->expects($this->any())
|
171 |
+
->method('getTokenSessionId')
|
172 |
+
->will($this->returnValue('abcd123'));
|
173 |
+
|
174 |
+
|
175 |
+
$iframeModelMock->expects($this->any())
|
176 |
+
->method('getJobId')
|
177 |
+
->will($this->returnValue('15'));
|
178 |
+
|
179 |
+
$this->assertEquals($sessionKeyHashTest,$iframeModelMock->buildSessionKeyHash($order));
|
180 |
+
|
181 |
+
}
|
182 |
+
|
183 |
+
public function testGetIframeUrl()
|
184 |
+
{
|
185 |
+
$iframeParams = array('foo' => '123','baar'=> '456');
|
186 |
+
$checkoutSession = new Varien_Object();
|
187 |
+
$checkoutSession->setData(Expercash_Expercash_Model_Config::TOKEN_REGISTRY_KEY,'foo');
|
188 |
+
|
189 |
+
$coreSessionMock = $this->getModelMock('core/session', array('init', 'start'));
|
190 |
+
$this->replaceByMock('model', 'core/session', $coreSessionMock);
|
191 |
+
|
192 |
+
$configModelMock = $this->getModelMock('expercash/config', array('getIframeUrl'));
|
193 |
+
$configModelMock->expects($this->any())
|
194 |
+
->method('getIframeUrl')
|
195 |
+
->will($this->returnValue('https://www.test.de'));
|
196 |
+
$this->replaceByMock('model', 'expercash/config', $configModelMock);
|
197 |
+
|
198 |
+
|
199 |
+
$iframeModelMock = $this->getModelMock('expercash/request_iframe', array(
|
200 |
+
'getIframeParams',
|
201 |
+
'getCoreUrlHelper',
|
202 |
+
'getCheckoutSession'
|
203 |
+
)
|
204 |
+
);
|
205 |
+
|
206 |
+
$iframeModelMock->expects($this->any())
|
207 |
+
->method('getIframeParams')
|
208 |
+
->will($this->returnValue($iframeParams));
|
209 |
+
|
210 |
+
$iframeModelMock->expects($this->any())
|
211 |
+
->method('getCoreUrlHelper')
|
212 |
+
->will($this->returnValue(Mage::helper('core/url')));
|
213 |
+
|
214 |
+
$iframeModelMock->expects($this->any())
|
215 |
+
->method('getCheckoutSession')
|
216 |
+
->will($this->returnValue($checkoutSession));
|
217 |
+
|
218 |
+
$this->assertEquals('https://www.test.de?foo=123&baar=456',$iframeModelMock->getIframeUrl());
|
219 |
+
$this->assertNotEquals('foo',$checkoutSession->getData(Expercash_Expercash_Model_Config::TOKEN_REGISTRY_KEY));
|
220 |
+
|
221 |
+
}
|
222 |
+
|
223 |
+
/**
|
224 |
+
* Call protected/private method of a class.
|
225 |
+
*
|
226 |
+
* @param object $object Instantiated object that we will run method on.
|
227 |
+
* @param string $methodName Method name to call
|
228 |
+
* @param array $parameters Array of parameters to pass into method.
|
229 |
+
*
|
230 |
+
* @return mixed Method return.
|
231 |
+
*/
|
232 |
+
public function invokeMethod($methodName, array $parameters = array())
|
233 |
+
{
|
234 |
+
$object = Mage::getModel('expercash/request_iframe');
|
235 |
+
$reflection = new \ReflectionClass(get_class($object));
|
236 |
+
$method = $reflection->getMethod($methodName);
|
237 |
+
$method->setAccessible(true);
|
238 |
+
return $method->invokeArgs($object, $parameters);
|
239 |
+
}
|
240 |
+
|
241 |
+
|
242 |
+
}
|
app/code/community/Expercash/Expercash/Test/Model/Request/IframeTest/fixtures/order.yaml
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
tables:
|
2 |
+
|
3 |
+
sales/order:
|
4 |
+
- entity_id: 11
|
5 |
+
increment_id: 100000011
|
6 |
+
billing_address_id: 42
|
7 |
+
store_id: 1
|
8 |
+
base_grand_total: 119.00
|
9 |
+
grand_total: 119.00
|
10 |
+
order_currency_code: 'EUR'
|
11 |
+
customer_gender: 1
|
12 |
+
shipping_method: 'flatrate_flatrate'
|
13 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
14 |
+
state: 'pending_payment'
|
15 |
+
status: 'pending_payment'
|
16 |
+
quote_id: 23
|
17 |
+
|
18 |
+
- entity_id: 12
|
19 |
+
increment_id: 100000012
|
20 |
+
billing_address_id: 42
|
21 |
+
base_grand_total: 119.00
|
22 |
+
grand_total: 119.00
|
23 |
+
order_currency_code: 'EUR'
|
24 |
+
customer_gender: 1
|
25 |
+
shipping_method: 'flatrate_flatrate'
|
26 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
27 |
+
state: 'pending_payment'
|
28 |
+
status: 'pending_payment'
|
29 |
+
quote_id: 24
|
30 |
+
|
31 |
+
|
32 |
+
sales/order_payment:
|
33 |
+
- entity_id: 11
|
34 |
+
parent_id: 11
|
35 |
+
method: 'expercashcc'
|
36 |
+
|
37 |
+
- entity_id: 12
|
38 |
+
parent_id: 12
|
39 |
+
method: 'expercashpc'
|
40 |
+
|
41 |
+
sales/order_address:
|
42 |
+
- entity_id: 42
|
43 |
+
parent_id: 11
|
44 |
+
address_type: 'billing'
|
45 |
+
firstname: 'Hubertus'
|
46 |
+
postcode: '04229'
|
47 |
+
lastname: 'Fürstenberg'
|
48 |
+
street: 'An der Tabaksmühle 3a'
|
49 |
+
city: 'Leipzig'
|
50 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
51 |
+
country_id: 'DE'
|
52 |
+
prefix: 'Prof. Dr.'
|
53 |
+
middlename: 'von'
|
54 |
+
suffix: 'MdL'
|
55 |
+
company: ''
|
56 |
+
fax: 12345678
|
57 |
+
|
58 |
+
- entity_id: 43
|
59 |
+
parent_id: 12
|
60 |
+
address_type: 'billing'
|
61 |
+
firstname: 'Hubertus'
|
62 |
+
postcode: '04229'
|
63 |
+
lastname: 'Fürstenberg'
|
64 |
+
street: 'An der Tabaksmühle 3a'
|
65 |
+
city: 'Leipzig'
|
66 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
67 |
+
country_id: 'DE'
|
68 |
+
prefix: 'Prof. Dr.'
|
69 |
+
middlename: 'von'
|
70 |
+
suffix: 'MdL'
|
71 |
+
company: ''
|
72 |
+
fax: 12345678
|
app/code/community/Expercash/Expercash/Test/Model/Request/Token/IframeTest.php
ADDED
@@ -0,0 +1,266 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
class Expercash_Expercash_Test_Model_Request_Token_IframeTest extends EcomDev_PHPUnit_Test_Case_Config
|
5 |
+
{
|
6 |
+
|
7 |
+
|
8 |
+
public function testCalcCentAmount()
|
9 |
+
{
|
10 |
+
$amount = 33.30;
|
11 |
+
$centAmount = $this->invokeMethod('calcCentAmount', array($amount));
|
12 |
+
$this->assertEquals(3330, $centAmount);
|
13 |
+
}
|
14 |
+
|
15 |
+
|
16 |
+
public function testGetConfig()
|
17 |
+
{
|
18 |
+
$this->assertTrue($this->invokeMethod('getConfig') instanceof Expercash_Expercash_Model_Config);
|
19 |
+
}
|
20 |
+
|
21 |
+
|
22 |
+
/**
|
23 |
+
* @loadFixture order
|
24 |
+
*/
|
25 |
+
public function testGetTokenParamsWithoutBarzahlen()
|
26 |
+
{
|
27 |
+
|
28 |
+
$order = Mage::getModel('sales/order')->load(11);
|
29 |
+
|
30 |
+
$coreUrlModel = $this->getModelMock('core/url', array('getUseSession'));
|
31 |
+
$coreUrlModel->expects($this->any())
|
32 |
+
->method('getUseSession')
|
33 |
+
->will($this->returnValue(false));
|
34 |
+
$this->replaceByMock('model', 'core/url', $coreUrlModel);
|
35 |
+
|
36 |
+
$coreSessionMock = $this->getModelMock('core/session', array('init', 'start'));
|
37 |
+
$this->replaceByMock('model', 'core/session', $coreSessionMock);
|
38 |
+
|
39 |
+
$configMock = $this->getModelMock(
|
40 |
+
'expercash/config', array(
|
41 |
+
'getPopupId',
|
42 |
+
'getConfigData',
|
43 |
+
'getProfilId'
|
44 |
+
)
|
45 |
+
);
|
46 |
+
|
47 |
+
$configMock->expects($this->any())
|
48 |
+
->method('getPopupId')
|
49 |
+
->will($this->returnValue(1234));
|
50 |
+
|
51 |
+
$configMock->expects($this->any())
|
52 |
+
->method('getConfigData')
|
53 |
+
->will($this->returnValue('expercashcc'));
|
54 |
+
|
55 |
+
$configMock->expects($this->any())
|
56 |
+
->method('getProfilId')
|
57 |
+
->will($this->returnValue(12));
|
58 |
+
$this->replaceByMock('model', 'expercash/config', $configMock);
|
59 |
+
|
60 |
+
$checkoutMock = $this->getModelMock(
|
61 |
+
'checkout/session', array(
|
62 |
+
'getLastRealOrderId',
|
63 |
+
'start',
|
64 |
+
'init'
|
65 |
+
)
|
66 |
+
);
|
67 |
+
$checkoutMock->expects($this->any())
|
68 |
+
->method('getLastRealOrderId')
|
69 |
+
->will($this->returnValue(11));
|
70 |
+
$this->replaceByMock('model', 'checkout/session', $checkoutMock);
|
71 |
+
|
72 |
+
$modelMock = $this->getModelMock('expercash/request_token_iframe', array('calcCentAmount'));
|
73 |
+
$modelMock->expects($this->any())
|
74 |
+
->method('calcCentAmount')
|
75 |
+
->will($this->returnValue(1190));
|
76 |
+
|
77 |
+
$urlArray = $modelMock->getTokenParams($order);
|
78 |
+
|
79 |
+
$this->assertTrue(array_key_exists('popupId', $urlArray));
|
80 |
+
$this->assertTrue(array_key_exists('jobId', $urlArray));
|
81 |
+
$this->assertTrue(array_key_exists('transactionId', $urlArray));
|
82 |
+
$this->assertTrue(array_key_exists('amount', $urlArray));
|
83 |
+
$this->assertTrue(array_key_exists('currency', $urlArray));
|
84 |
+
$this->assertTrue(array_key_exists('paymentMethod', $urlArray));
|
85 |
+
$this->assertTrue(array_key_exists('returnUrl', $urlArray));
|
86 |
+
$this->assertTrue(array_key_exists('errorUrl', $urlArray));
|
87 |
+
$this->assertTrue(array_key_exists('notifyUrl', $urlArray));
|
88 |
+
$this->assertTrue(array_key_exists('profile', $urlArray));
|
89 |
+
|
90 |
+
$this->assertEquals(1234, $urlArray['popupId']);
|
91 |
+
$this->assertEquals(100000011, $urlArray['jobId']);
|
92 |
+
$this->assertEquals(100000011, $urlArray['transactionId']);
|
93 |
+
$this->assertEquals(1190, $urlArray['amount']);
|
94 |
+
$this->assertEquals('EUR', $urlArray['currency']);
|
95 |
+
$this->assertEquals('expercashcc', $urlArray['paymentMethod']);
|
96 |
+
$this->assertEquals(
|
97 |
+
Mage::getUrl('expercash/expercash/success', array('_secure' => true)), $urlArray['returnUrl']
|
98 |
+
);
|
99 |
+
$this->assertEquals(Mage::getUrl('expercash/expercash/error', array('_secure' => true)), $urlArray['errorUrl']);
|
100 |
+
$this->assertEquals(
|
101 |
+
Mage::getUrl('expercash/expercash/notify', array('_secure' => true)), $urlArray['notifyUrl']
|
102 |
+
);
|
103 |
+
$this->assertEquals(12, $urlArray['profile']);
|
104 |
+
|
105 |
+
|
106 |
+
}
|
107 |
+
|
108 |
+
/**
|
109 |
+
* @loadFixture order
|
110 |
+
*/
|
111 |
+
public function testGetTokenParamsWithBarzahlen()
|
112 |
+
{
|
113 |
+
|
114 |
+
$order = Mage::getModel('sales/order')->load(12);
|
115 |
+
|
116 |
+
$coreUrlModel = $this->getModelMock('core/url', array('getUseSession'));
|
117 |
+
$coreUrlModel->expects($this->any())
|
118 |
+
->method('getUseSession')
|
119 |
+
->will($this->returnValue(false));
|
120 |
+
$this->replaceByMock('model', 'core/url', $coreUrlModel);
|
121 |
+
|
122 |
+
$coreSessionMock = $this->getModelMock('core/session', array('init', 'start'));
|
123 |
+
$this->replaceByMock('model', 'core/session', $coreSessionMock);
|
124 |
+
|
125 |
+
$configMock = $this->getModelMock(
|
126 |
+
'expercash/config', array(
|
127 |
+
'getPopupId',
|
128 |
+
'getConfigData',
|
129 |
+
'getProfilId'
|
130 |
+
)
|
131 |
+
);
|
132 |
+
|
133 |
+
$configMock->expects($this->any())
|
134 |
+
->method('getPopupId')
|
135 |
+
->will($this->returnValue(1234));
|
136 |
+
|
137 |
+
$configMock->expects($this->any())
|
138 |
+
->method('getConfigData')
|
139 |
+
->will($this->returnValue('expercashpc'));
|
140 |
+
|
141 |
+
$configMock->expects($this->any())
|
142 |
+
->method('getProfilId')
|
143 |
+
->will($this->returnValue(12));
|
144 |
+
$this->replaceByMock('model', 'expercash/config', $configMock);
|
145 |
+
|
146 |
+
$checkoutMock = $this->getModelMock(
|
147 |
+
'checkout/session', array(
|
148 |
+
'getLastRealOrderId',
|
149 |
+
'start',
|
150 |
+
'init'
|
151 |
+
)
|
152 |
+
);
|
153 |
+
$checkoutMock->expects($this->any())
|
154 |
+
->method('getLastRealOrderId')
|
155 |
+
->will($this->returnValue(11));
|
156 |
+
$this->replaceByMock('model', 'checkout/session', $checkoutMock);
|
157 |
+
|
158 |
+
$modelMock = $this->getModelMock('expercash/request_token_iframe', array('calcCentAmount'));
|
159 |
+
$modelMock->expects($this->any())
|
160 |
+
->method('calcCentAmount')
|
161 |
+
->will($this->returnValue(1190));
|
162 |
+
|
163 |
+
$urlArray = $modelMock->getTokenParams($order);
|
164 |
+
$this->assertTrue(array_key_exists('customerPrename', $urlArray));
|
165 |
+
$this->assertTrue(array_key_exists('customerName', $urlArray));
|
166 |
+
$this->assertTrue(array_key_exists('customerAddress1', $urlArray));
|
167 |
+
$this->assertTrue(array_key_exists('customerZip', $urlArray));
|
168 |
+
$this->assertTrue(array_key_exists('customerCity', $urlArray));
|
169 |
+
$this->assertTrue(array_key_exists('customerCountry', $urlArray));
|
170 |
+
$this->assertTrue(array_key_exists('customerEmail', $urlArray));
|
171 |
+
$this->assertTrue(array_key_exists('updateUrl', $urlArray));
|
172 |
+
|
173 |
+
$this->assertEquals('Hubertus', $urlArray['customerPrename']);
|
174 |
+
$this->assertEquals('Fürstenberg', $urlArray['customerName']);
|
175 |
+
$this->assertEquals('An der Tabaksmühle 3a', $urlArray['customerAddress1']);
|
176 |
+
$this->assertEquals('04229', $urlArray['customerZip']);
|
177 |
+
$this->assertEquals('DE', $urlArray['customerCountry']);
|
178 |
+
$this->assertEquals('hubertus.von.fuerstenberg@trash-mail.com', $urlArray['customerEmail']);
|
179 |
+
$this->assertEquals(
|
180 |
+
Mage::getUrl('expercash/expercash/notify', array('_secure' => true)), $urlArray['updateUrl']
|
181 |
+
);
|
182 |
+
|
183 |
+
|
184 |
+
}
|
185 |
+
|
186 |
+
|
187 |
+
public function getTokenParams($session, $order, $paymentObject)
|
188 |
+
{
|
189 |
+
$config = $this->getConfig();
|
190 |
+
$code = $paymentObject->getCode();
|
191 |
+
$urlArray = Array(
|
192 |
+
'popupId' => $config->getPopupId($order->getStoreId()),
|
193 |
+
'jobId' => $session->getLastRealOrderId(),
|
194 |
+
'transactionId' => $session->getLastRealOrderId(),
|
195 |
+
'amount' => $this->calcCentAmount($order->getGrandTotal()),
|
196 |
+
'currency' => $order->getOrderCurrencyCode(),
|
197 |
+
'paymentMethod' => $config->getConfigData('paymenttype', $code, $order->getStoreId()),
|
198 |
+
'returnUrl' => Mage::getUrl(
|
199 |
+
'expercash/expercash/success', array('_secure' => true)
|
200 |
+
),
|
201 |
+
'errorUrl' => Mage::getUrl(
|
202 |
+
'expercash/expercash/error', array('_secure' => true)
|
203 |
+
),
|
204 |
+
'notifyUrl' => Mage::getUrl(
|
205 |
+
'expercash/expercash/notify', array('_secure' => true)
|
206 |
+
),
|
207 |
+
|
208 |
+
'profile' => $config->getProfilId($order->getStoreId()),
|
209 |
+
);
|
210 |
+
|
211 |
+
if ($paymentObject instanceof Expercash_Expercash_Model_Expercashpc) {
|
212 |
+
$urlArray = array_merge($this->getBarzahlenParams($order));
|
213 |
+
}
|
214 |
+
return $urlArray;
|
215 |
+
}
|
216 |
+
|
217 |
+
/**
|
218 |
+
* @loadFixture order
|
219 |
+
*/
|
220 |
+
public function testGetBarzahlenParams()
|
221 |
+
{
|
222 |
+
$order = Mage::getModel('sales/order')->load(11);
|
223 |
+
|
224 |
+
$coreUrlModel = $this->getModelMock('core/url', array('getUrl'));
|
225 |
+
$coreUrlModel->expects($this->once())
|
226 |
+
->method('getUrl')
|
227 |
+
->will($this->returnValue('www.test.de'));
|
228 |
+
$this->replaceByMock('model', 'core/url', $coreUrlModel);
|
229 |
+
|
230 |
+
$barzahlenParams = $this->invokeMethod('getBarzahlenParams', array($order));
|
231 |
+
$this->assertTrue(array_key_exists('customerPrename', $barzahlenParams));
|
232 |
+
$this->assertTrue(array_key_exists('customerName', $barzahlenParams));
|
233 |
+
$this->assertTrue(array_key_exists('customerAddress1', $barzahlenParams));
|
234 |
+
$this->assertTrue(array_key_exists('customerZip', $barzahlenParams));
|
235 |
+
$this->assertTrue(array_key_exists('customerCity', $barzahlenParams));
|
236 |
+
$this->assertTrue(array_key_exists('customerCountry', $barzahlenParams));
|
237 |
+
$this->assertTrue(array_key_exists('customerEmail', $barzahlenParams));
|
238 |
+
$this->assertTrue(array_key_exists('updateUrl', $barzahlenParams));
|
239 |
+
|
240 |
+
$this->assertEquals('Hubertus', $barzahlenParams['customerPrename']);
|
241 |
+
$this->assertEquals('Fürstenberg', $barzahlenParams['customerName']);
|
242 |
+
$this->assertEquals('An der Tabaksmühle 3a', $barzahlenParams['customerAddress1']);
|
243 |
+
$this->assertEquals('04229', $barzahlenParams['customerZip']);
|
244 |
+
$this->assertEquals('DE', $barzahlenParams['customerCountry']);
|
245 |
+
$this->assertEquals('hubertus.von.fuerstenberg@trash-mail.com', $barzahlenParams['customerEmail']);
|
246 |
+
$this->assertEquals('www.test.de', $barzahlenParams['updateUrl']);
|
247 |
+
}
|
248 |
+
|
249 |
+
/**
|
250 |
+
* Call protected/private method of a class.
|
251 |
+
*
|
252 |
+
* @param object $object Instantiated object that we will run method on.
|
253 |
+
* @param string $methodName Method name to call
|
254 |
+
* @param array $parameters Array of parameters to pass into method.
|
255 |
+
*
|
256 |
+
* @return mixed Method return.
|
257 |
+
*/
|
258 |
+
public function invokeMethod($methodName, array $parameters = array())
|
259 |
+
{
|
260 |
+
$object = Mage::getModel('expercash/request_token_iframe');
|
261 |
+
$reflection = new \ReflectionClass(get_class($object));
|
262 |
+
$method = $reflection->getMethod($methodName);
|
263 |
+
$method->setAccessible(true);
|
264 |
+
return $method->invokeArgs($object, $parameters);
|
265 |
+
}
|
266 |
+
}
|
app/code/community/Expercash/Expercash/Test/Model/Request/Token/IframeTest/fixtures/order.yaml
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
tables:
|
2 |
+
|
3 |
+
sales/order:
|
4 |
+
- entity_id: 11
|
5 |
+
increment_id: 100000011
|
6 |
+
billing_address_id: 42
|
7 |
+
base_grand_total: 119.00
|
8 |
+
grand_total: 119.00
|
9 |
+
order_currency_code: 'EUR'
|
10 |
+
customer_gender: 1
|
11 |
+
shipping_method: 'flatrate_flatrate'
|
12 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
13 |
+
state: 'pending_payment'
|
14 |
+
status: 'pending_payment'
|
15 |
+
quote_id: 23
|
16 |
+
|
17 |
+
- entity_id: 12
|
18 |
+
increment_id: 100000012
|
19 |
+
billing_address_id: 42
|
20 |
+
base_grand_total: 119.00
|
21 |
+
grand_total: 119.00
|
22 |
+
order_currency_code: 'EUR'
|
23 |
+
customer_gender: 1
|
24 |
+
shipping_method: 'flatrate_flatrate'
|
25 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
26 |
+
state: 'pending_payment'
|
27 |
+
status: 'pending_payment'
|
28 |
+
quote_id: 24
|
29 |
+
|
30 |
+
|
31 |
+
sales/order_payment:
|
32 |
+
- entity_id: 11
|
33 |
+
parent_id: 11
|
34 |
+
method: 'expercashcc'
|
35 |
+
|
36 |
+
- entity_id: 12
|
37 |
+
parent_id: 12
|
38 |
+
method: 'expercashpc'
|
39 |
+
|
40 |
+
sales/order_address:
|
41 |
+
- entity_id: 42
|
42 |
+
parent_id: 11
|
43 |
+
address_type: 'billing'
|
44 |
+
firstname: 'Hubertus'
|
45 |
+
postcode: '04229'
|
46 |
+
lastname: 'Fürstenberg'
|
47 |
+
street: 'An der Tabaksmühle 3a'
|
48 |
+
city: 'Leipzig'
|
49 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
50 |
+
country_id: 'DE'
|
51 |
+
prefix: 'Prof. Dr.'
|
52 |
+
middlename: 'von'
|
53 |
+
suffix: 'MdL'
|
54 |
+
company: ''
|
55 |
+
fax: 12345678
|
56 |
+
|
57 |
+
- entity_id: 43
|
58 |
+
parent_id: 12
|
59 |
+
address_type: 'billing'
|
60 |
+
firstname: 'Hubertus'
|
61 |
+
postcode: '04229'
|
62 |
+
lastname: 'Fürstenberg'
|
63 |
+
street: 'An der Tabaksmühle 3a'
|
64 |
+
city: 'Leipzig'
|
65 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
66 |
+
country_id: 'DE'
|
67 |
+
prefix: 'Prof. Dr.'
|
68 |
+
middlename: 'von'
|
69 |
+
suffix: 'MdL'
|
70 |
+
company: ''
|
71 |
+
fax: 12345678
|
app/code/community/Expercash/Expercash/Test/Model/Request/TokenTest.php
ADDED
@@ -0,0 +1,266 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
class Expercash_Expercash_Test_Model_Request_TokenTest extends EcomDev_PHPUnit_Test_Case_Config
|
5 |
+
{
|
6 |
+
|
7 |
+
|
8 |
+
public function testCalcCentAmount()
|
9 |
+
{
|
10 |
+
$amount = 33.30;
|
11 |
+
$centAmount = $this->invokeMethod('calcCentAmount', array($amount));
|
12 |
+
$this->assertEquals(3330, $centAmount);
|
13 |
+
}
|
14 |
+
|
15 |
+
|
16 |
+
public function testGetConfig()
|
17 |
+
{
|
18 |
+
$this->assertTrue($this->invokeMethod('getConfig') instanceof Expercash_Expercash_Model_Config);
|
19 |
+
}
|
20 |
+
|
21 |
+
|
22 |
+
/**
|
23 |
+
* @loadFixture order
|
24 |
+
*/
|
25 |
+
public function testGetTokenParamsWithoutBarzahlen()
|
26 |
+
{
|
27 |
+
|
28 |
+
$order = Mage::getModel('sales/order')->load(11);
|
29 |
+
|
30 |
+
$coreUrlModel = $this->getModelMock('core/url', array('getUseSession'));
|
31 |
+
$coreUrlModel->expects($this->any())
|
32 |
+
->method('getUseSession')
|
33 |
+
->will($this->returnValue(false));
|
34 |
+
$this->replaceByMock('model', 'core/url', $coreUrlModel);
|
35 |
+
|
36 |
+
$coreSessionMock = $this->getModelMock('core/session', array('init', 'start'));
|
37 |
+
$this->replaceByMock('model', 'core/session', $coreSessionMock);
|
38 |
+
|
39 |
+
$configMock = $this->getModelMock(
|
40 |
+
'expercash/config', array(
|
41 |
+
'getPopupId',
|
42 |
+
'getConfigData',
|
43 |
+
'getProfilId'
|
44 |
+
)
|
45 |
+
);
|
46 |
+
|
47 |
+
$configMock->expects($this->any())
|
48 |
+
->method('getPopupId')
|
49 |
+
->will($this->returnValue(1234));
|
50 |
+
|
51 |
+
$configMock->expects($this->any())
|
52 |
+
->method('getConfigData')
|
53 |
+
->will($this->returnValue('expercashcc'));
|
54 |
+
|
55 |
+
$configMock->expects($this->any())
|
56 |
+
->method('getProfilId')
|
57 |
+
->will($this->returnValue(12));
|
58 |
+
$this->replaceByMock('model', 'expercash/config', $configMock);
|
59 |
+
|
60 |
+
$checkoutMock = $this->getModelMock(
|
61 |
+
'checkout/session', array(
|
62 |
+
'getLastRealOrderId',
|
63 |
+
'start',
|
64 |
+
'init'
|
65 |
+
)
|
66 |
+
);
|
67 |
+
$checkoutMock->expects($this->any())
|
68 |
+
->method('getLastRealOrderId')
|
69 |
+
->will($this->returnValue(11));
|
70 |
+
$this->replaceByMock('model', 'checkout/session', $checkoutMock);
|
71 |
+
|
72 |
+
$modelMock = $this->getModelMock('expercash/request_token', array('calcCentAmount'));
|
73 |
+
$modelMock->expects($this->any())
|
74 |
+
->method('calcCentAmount')
|
75 |
+
->will($this->returnValue(1190));
|
76 |
+
|
77 |
+
$urlArray = $modelMock->getTokenParams($order);
|
78 |
+
|
79 |
+
$this->assertTrue(array_key_exists('popupId', $urlArray));
|
80 |
+
$this->assertTrue(array_key_exists('jobId', $urlArray));
|
81 |
+
$this->assertTrue(array_key_exists('transactionId', $urlArray));
|
82 |
+
$this->assertTrue(array_key_exists('amount', $urlArray));
|
83 |
+
$this->assertTrue(array_key_exists('currency', $urlArray));
|
84 |
+
$this->assertTrue(array_key_exists('paymentMethod', $urlArray));
|
85 |
+
$this->assertTrue(array_key_exists('returnUrl', $urlArray));
|
86 |
+
$this->assertTrue(array_key_exists('errorUrl', $urlArray));
|
87 |
+
$this->assertTrue(array_key_exists('notifyUrl', $urlArray));
|
88 |
+
$this->assertTrue(array_key_exists('profile', $urlArray));
|
89 |
+
|
90 |
+
$this->assertEquals(1234, $urlArray['popupId']);
|
91 |
+
$this->assertEquals(100000011, $urlArray['jobId']);
|
92 |
+
$this->assertEquals(100000011, $urlArray['transactionId']);
|
93 |
+
$this->assertEquals(1190, $urlArray['amount']);
|
94 |
+
$this->assertEquals('EUR', $urlArray['currency']);
|
95 |
+
$this->assertEquals('expercashcc', $urlArray['paymentMethod']);
|
96 |
+
$this->assertEquals(
|
97 |
+
Mage::getUrl('expercash/expercash/success', array('_secure' => true)), $urlArray['returnUrl']
|
98 |
+
);
|
99 |
+
$this->assertEquals(Mage::getUrl('expercash/expercash/error', array('_secure' => true)), $urlArray['errorUrl']);
|
100 |
+
$this->assertEquals(
|
101 |
+
Mage::getUrl('expercash/expercash/notify', array('_secure' => true)), $urlArray['notifyUrl']
|
102 |
+
);
|
103 |
+
$this->assertEquals(12, $urlArray['profile']);
|
104 |
+
|
105 |
+
|
106 |
+
}
|
107 |
+
|
108 |
+
/**
|
109 |
+
* @loadFixture order
|
110 |
+
*/
|
111 |
+
public function testGetTokenParamsWithBarzahlen()
|
112 |
+
{
|
113 |
+
|
114 |
+
$order = Mage::getModel('sales/order')->load(12);
|
115 |
+
|
116 |
+
$coreUrlModel = $this->getModelMock('core/url', array('getUseSession'));
|
117 |
+
$coreUrlModel->expects($this->any())
|
118 |
+
->method('getUseSession')
|
119 |
+
->will($this->returnValue(false));
|
120 |
+
$this->replaceByMock('model', 'core/url', $coreUrlModel);
|
121 |
+
|
122 |
+
$coreSessionMock = $this->getModelMock('core/session', array('init', 'start'));
|
123 |
+
$this->replaceByMock('model', 'core/session', $coreSessionMock);
|
124 |
+
|
125 |
+
$configMock = $this->getModelMock(
|
126 |
+
'expercash/config', array(
|
127 |
+
'getPopupId',
|
128 |
+
'getConfigData',
|
129 |
+
'getProfilId'
|
130 |
+
)
|
131 |
+
);
|
132 |
+
|
133 |
+
$configMock->expects($this->any())
|
134 |
+
->method('getPopupId')
|
135 |
+
->will($this->returnValue(1234));
|
136 |
+
|
137 |
+
$configMock->expects($this->any())
|
138 |
+
->method('getConfigData')
|
139 |
+
->will($this->returnValue('expercashpc'));
|
140 |
+
|
141 |
+
$configMock->expects($this->any())
|
142 |
+
->method('getProfilId')
|
143 |
+
->will($this->returnValue(12));
|
144 |
+
$this->replaceByMock('model', 'expercash/config', $configMock);
|
145 |
+
|
146 |
+
$checkoutMock = $this->getModelMock(
|
147 |
+
'checkout/session', array(
|
148 |
+
'getLastRealOrderId',
|
149 |
+
'start',
|
150 |
+
'init'
|
151 |
+
)
|
152 |
+
);
|
153 |
+
$checkoutMock->expects($this->any())
|
154 |
+
->method('getLastRealOrderId')
|
155 |
+
->will($this->returnValue(11));
|
156 |
+
$this->replaceByMock('model', 'checkout/session', $checkoutMock);
|
157 |
+
|
158 |
+
$modelMock = $this->getModelMock('expercash/request_token', array('calcCentAmount'));
|
159 |
+
$modelMock->expects($this->any())
|
160 |
+
->method('calcCentAmount')
|
161 |
+
->will($this->returnValue(1190));
|
162 |
+
|
163 |
+
$urlArray = $modelMock->getTokenParams($order);
|
164 |
+
$this->assertTrue(array_key_exists('customerPrename', $urlArray));
|
165 |
+
$this->assertTrue(array_key_exists('customerName', $urlArray));
|
166 |
+
$this->assertTrue(array_key_exists('customerAddress1', $urlArray));
|
167 |
+
$this->assertTrue(array_key_exists('customerZip', $urlArray));
|
168 |
+
$this->assertTrue(array_key_exists('customerCity', $urlArray));
|
169 |
+
$this->assertTrue(array_key_exists('customerCountry', $urlArray));
|
170 |
+
$this->assertTrue(array_key_exists('customerEmail', $urlArray));
|
171 |
+
$this->assertTrue(array_key_exists('updateUrl', $urlArray));
|
172 |
+
|
173 |
+
$this->assertEquals('Hubertus', $urlArray['customerPrename']);
|
174 |
+
$this->assertEquals('Fürstenberg', $urlArray['customerName']);
|
175 |
+
$this->assertEquals('An der Tabaksmühle 3a', $urlArray['customerAddress1']);
|
176 |
+
$this->assertEquals('04229', $urlArray['customerZip']);
|
177 |
+
$this->assertEquals('DE', $urlArray['customerCountry']);
|
178 |
+
$this->assertEquals('hubertus.von.fuerstenberg@trash-mail.com', $urlArray['customerEmail']);
|
179 |
+
$this->assertEquals(
|
180 |
+
Mage::getUrl('expercash/expercash/notify', array('_secure' => true)), $urlArray['updateUrl']
|
181 |
+
);
|
182 |
+
|
183 |
+
|
184 |
+
}
|
185 |
+
|
186 |
+
|
187 |
+
public function getTokenParams($session, $order, $paymentObject)
|
188 |
+
{
|
189 |
+
$config = $this->getConfig();
|
190 |
+
$code = $paymentObject->getCode();
|
191 |
+
$urlArray = Array(
|
192 |
+
'popupId' => $config->getPopupId($order->getStoreId()),
|
193 |
+
'jobId' => $session->getLastRealOrderId(),
|
194 |
+
'transactionId' => $session->getLastRealOrderId(),
|
195 |
+
'amount' => $this->calcCentAmount($order->getGrandTotal()),
|
196 |
+
'currency' => $order->getOrderCurrencyCode(),
|
197 |
+
'paymentMethod' => $config->getConfigData('paymenttype', $code, $order->getStoreId()),
|
198 |
+
'returnUrl' => Mage::getUrl(
|
199 |
+
'expercash/expercash/success', array('_secure' => true)
|
200 |
+
),
|
201 |
+
'errorUrl' => Mage::getUrl(
|
202 |
+
'expercash/expercash/error', array('_secure' => true)
|
203 |
+
),
|
204 |
+
'notifyUrl' => Mage::getUrl(
|
205 |
+
'expercash/expercash/notify', array('_secure' => true)
|
206 |
+
),
|
207 |
+
|
208 |
+
'profile' => $config->getProfilId($order->getStoreId()),
|
209 |
+
);
|
210 |
+
|
211 |
+
if ($paymentObject instanceof Expercash_Expercash_Model_Expercashpc) {
|
212 |
+
$urlArray = array_merge($this->getBarzahlenParams($order));
|
213 |
+
}
|
214 |
+
return $urlArray;
|
215 |
+
}
|
216 |
+
|
217 |
+
/**
|
218 |
+
* @loadFixture order
|
219 |
+
*/
|
220 |
+
public function testGetBarzahlenParams()
|
221 |
+
{
|
222 |
+
$order = Mage::getModel('sales/order')->load(11);
|
223 |
+
|
224 |
+
$coreUrlModel = $this->getModelMock('core/url', array('getUrl'));
|
225 |
+
$coreUrlModel->expects($this->once())
|
226 |
+
->method('getUrl')
|
227 |
+
->will($this->returnValue('www.test.de'));
|
228 |
+
$this->replaceByMock('model', 'core/url', $coreUrlModel);
|
229 |
+
|
230 |
+
$barzahlenParams = $this->invokeMethod('getBarzahlenParams', array($order));
|
231 |
+
$this->assertTrue(array_key_exists('customerPrename', $barzahlenParams));
|
232 |
+
$this->assertTrue(array_key_exists('customerName', $barzahlenParams));
|
233 |
+
$this->assertTrue(array_key_exists('customerAddress1', $barzahlenParams));
|
234 |
+
$this->assertTrue(array_key_exists('customerZip', $barzahlenParams));
|
235 |
+
$this->assertTrue(array_key_exists('customerCity', $barzahlenParams));
|
236 |
+
$this->assertTrue(array_key_exists('customerCountry', $barzahlenParams));
|
237 |
+
$this->assertTrue(array_key_exists('customerEmail', $barzahlenParams));
|
238 |
+
$this->assertTrue(array_key_exists('updateUrl', $barzahlenParams));
|
239 |
+
|
240 |
+
$this->assertEquals('Hubertus', $barzahlenParams['customerPrename']);
|
241 |
+
$this->assertEquals('Fürstenberg', $barzahlenParams['customerName']);
|
242 |
+
$this->assertEquals('An der Tabaksmühle 3a', $barzahlenParams['customerAddress1']);
|
243 |
+
$this->assertEquals('04229', $barzahlenParams['customerZip']);
|
244 |
+
$this->assertEquals('DE', $barzahlenParams['customerCountry']);
|
245 |
+
$this->assertEquals('hubertus.von.fuerstenberg@trash-mail.com', $barzahlenParams['customerEmail']);
|
246 |
+
$this->assertEquals('www.test.de', $barzahlenParams['updateUrl']);
|
247 |
+
}
|
248 |
+
|
249 |
+
/**
|
250 |
+
* Call protected/private method of a class.
|
251 |
+
*
|
252 |
+
* @param object $object Instantiated object that we will run method on.
|
253 |
+
* @param string $methodName Method name to call
|
254 |
+
* @param array $parameters Array of parameters to pass into method.
|
255 |
+
*
|
256 |
+
* @return mixed Method return.
|
257 |
+
*/
|
258 |
+
public function invokeMethod($methodName, array $parameters = array())
|
259 |
+
{
|
260 |
+
$object = Mage::getModel('expercash/request_token');
|
261 |
+
$reflection = new \ReflectionClass(get_class($object));
|
262 |
+
$method = $reflection->getMethod($methodName);
|
263 |
+
$method->setAccessible(true);
|
264 |
+
return $method->invokeArgs($object, $parameters);
|
265 |
+
}
|
266 |
+
}
|
app/code/community/Expercash/Expercash/Test/Model/Request/TokenTest/fixtures/order.yaml
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
tables:
|
2 |
+
|
3 |
+
sales/order:
|
4 |
+
- entity_id: 11
|
5 |
+
increment_id: 100000011
|
6 |
+
billing_address_id: 42
|
7 |
+
base_grand_total: 119.00
|
8 |
+
grand_total: 119.00
|
9 |
+
order_currency_code: 'EUR'
|
10 |
+
customer_gender: 1
|
11 |
+
shipping_method: 'flatrate_flatrate'
|
12 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
13 |
+
state: 'pending_payment'
|
14 |
+
status: 'pending_payment'
|
15 |
+
quote_id: 23
|
16 |
+
|
17 |
+
- entity_id: 12
|
18 |
+
increment_id: 100000012
|
19 |
+
billing_address_id: 42
|
20 |
+
base_grand_total: 119.00
|
21 |
+
grand_total: 119.00
|
22 |
+
order_currency_code: 'EUR'
|
23 |
+
customer_gender: 1
|
24 |
+
shipping_method: 'flatrate_flatrate'
|
25 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
26 |
+
state: 'pending_payment'
|
27 |
+
status: 'pending_payment'
|
28 |
+
quote_id: 24
|
29 |
+
|
30 |
+
|
31 |
+
sales/order_payment:
|
32 |
+
- entity_id: 11
|
33 |
+
parent_id: 11
|
34 |
+
method: 'expercashcc'
|
35 |
+
|
36 |
+
- entity_id: 12
|
37 |
+
parent_id: 12
|
38 |
+
method: 'expercashpc'
|
39 |
+
|
40 |
+
sales/order_address:
|
41 |
+
- entity_id: 42
|
42 |
+
parent_id: 11
|
43 |
+
address_type: 'billing'
|
44 |
+
firstname: 'Hubertus'
|
45 |
+
postcode: '04229'
|
46 |
+
lastname: 'Fürstenberg'
|
47 |
+
street: 'An der Tabaksmühle 3a'
|
48 |
+
city: 'Leipzig'
|
49 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
50 |
+
country_id: 'DE'
|
51 |
+
prefix: 'Prof. Dr.'
|
52 |
+
middlename: 'von'
|
53 |
+
suffix: 'MdL'
|
54 |
+
company: ''
|
55 |
+
fax: 12345678
|
56 |
+
|
57 |
+
- entity_id: 43
|
58 |
+
parent_id: 12
|
59 |
+
address_type: 'billing'
|
60 |
+
firstname: 'Hubertus'
|
61 |
+
postcode: '04229'
|
62 |
+
lastname: 'Fürstenberg'
|
63 |
+
street: 'An der Tabaksmühle 3a'
|
64 |
+
city: 'Leipzig'
|
65 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
66 |
+
country_id: 'DE'
|
67 |
+
prefix: 'Prof. Dr.'
|
68 |
+
middlename: 'von'
|
69 |
+
suffix: 'MdL'
|
70 |
+
company: ''
|
71 |
+
fax: 12345678
|
app/code/community/Expercash/Expercash/Test/var/expectations/orders.yaml
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
url:"https://epi.expercash.net/epi_popup2.php?popupId=foo&jobId=11&transactionId=11&amount=11900¤cy=&paymentMethod=foo&returnUrl=http%3A%2F%2Fser-dev.magento.nrdev.de%2Findex.php%2Fexpercash%2Fexpercash%2Fsuccess%2F&errorUrl=http%3A%2F%2Fser-dev.magento.nrdev.de%2Findex.php%2Fexpercash%2Fexpercash%2Ferror%2F¬ifyUrl=http%3A%2F%2Fser-dev.magento.nrdev.de%2Findex.php%2Fexpercash%2Fexpercash%2Fnotify%2F&profile=foo&popupKey=fdb64dabed0a4894bed2ec718da2856d&cssUrl=foo&language=en"
|
app/code/community/Expercash/Expercash/Test/var/fixtures/orders.yaml
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
tables:
|
2 |
+
sales/order:
|
3 |
+
|
4 |
+
- entity_id: 11
|
5 |
+
increment_id: 100000011
|
6 |
+
shipping_address_id: 42
|
7 |
+
base_grand_total: 119.00
|
8 |
+
grand_total: 119.00
|
9 |
+
currency: 'EUR'
|
10 |
+
customer_gender: 1
|
11 |
+
shipping_method: 'flatrate_flatrate'
|
12 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
13 |
+
state: 'pending_payment'
|
14 |
+
status: 'pending_payment'
|
15 |
+
quote_id: 20
|
16 |
+
|
17 |
+
- entity_id: 2
|
18 |
+
increment_id: 100000055
|
19 |
+
quote_id: 2
|
20 |
+
shipping_address_id: 42
|
21 |
+
base_grand_total: 119.00
|
22 |
+
grand_total: 119.00
|
23 |
+
currency: 'EUR'
|
24 |
+
customer_gender: 1
|
25 |
+
shipping_method: 'flatrate_flatrate'
|
26 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
27 |
+
|
28 |
+
- entity_id: 3
|
29 |
+
increment_id: 100000055
|
30 |
+
quote_id: 3
|
31 |
+
shipping_address_id: 42
|
32 |
+
base_grand_total: 119.00
|
33 |
+
grand_total: 119.00
|
34 |
+
currency: 'EUR'
|
35 |
+
customer_gender: 1
|
36 |
+
shipping_method: 'flatrate_flatrate'
|
37 |
+
customer_email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
38 |
+
|
39 |
+
sales/quote:
|
40 |
+
- entity_id: 20
|
41 |
+
parent_id: 11
|
42 |
+
|
43 |
+
sales/order_payment:
|
44 |
+
- entity_id: 11
|
45 |
+
parent_id: 11
|
46 |
+
method: 'expercashcc'
|
47 |
+
|
48 |
+
sales/quote_payment:
|
49 |
+
- entity_id: 11
|
50 |
+
parent_id: 20
|
51 |
+
quote_id: 20
|
52 |
+
method: 'expercashcc'
|
53 |
+
expercash_request_type: 'cc_authorize'
|
app/code/community/Expercash/Expercash/Test/var/fixtures/quote.yaml
ADDED
@@ -0,0 +1,96 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
tables:
|
2 |
+
sales/quote:
|
3 |
+
|
4 |
+
- entity_id: 1
|
5 |
+
store_id: 1
|
6 |
+
base_grand_total: 119.00
|
7 |
+
grand_total: 119.00
|
8 |
+
quote_currency_code: 'EUR'
|
9 |
+
customer_gender: 1
|
10 |
+
shipping_method: 'flatrate_flatrate'
|
11 |
+
|
12 |
+
- entity_id: 2
|
13 |
+
base_grand_total: 119.00
|
14 |
+
grand_total: 200.00
|
15 |
+
currency: '$'
|
16 |
+
customer_gender: 1
|
17 |
+
shipping_method: 'flatrate_flatrate'
|
18 |
+
|
19 |
+
- entity_id: 3
|
20 |
+
base_grand_total: 119.00
|
21 |
+
grand_total: 200.00
|
22 |
+
currency: '$'
|
23 |
+
customer_gender: 1
|
24 |
+
shipping_method: 'flatrate_flatrate'
|
25 |
+
|
26 |
+
- entity_id: 4
|
27 |
+
base_grand_total: 119.00
|
28 |
+
grand_total: 200.00
|
29 |
+
currency: 'EUR'
|
30 |
+
customer_gender: 1
|
31 |
+
shipping_method: 'flatrate_flatrate'
|
32 |
+
|
33 |
+
- entity_id: 5
|
34 |
+
base_grand_total: 119.00
|
35 |
+
grand_total: 1200.00
|
36 |
+
currency: 'EUR'
|
37 |
+
customer_gender: 1
|
38 |
+
shipping_method: 'flatrate_flatrate'
|
39 |
+
|
40 |
+
sales/quote_payment:
|
41 |
+
|
42 |
+
- id: 1
|
43 |
+
entity_id: 1
|
44 |
+
parent_id: 1
|
45 |
+
quote_id: 1
|
46 |
+
method: 'expercashpc'
|
47 |
+
|
48 |
+
sales/quote_address:
|
49 |
+
|
50 |
+
- entity_id: 1
|
51 |
+
quote_id: 1
|
52 |
+
address_type: 'billing'
|
53 |
+
firstname: 'Hubertus'
|
54 |
+
postcode: '04229'
|
55 |
+
lastname: 'Fürstenberg'
|
56 |
+
street: 'An der Tabaksmühle 3a'
|
57 |
+
city: 'Leipzig'
|
58 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
59 |
+
country_id: 'DE'
|
60 |
+
prefix: 'Prof. Dr.'
|
61 |
+
middlename: 'von'
|
62 |
+
suffix: 'MdL'
|
63 |
+
company: ''
|
64 |
+
fax: 12345678
|
65 |
+
|
66 |
+
- entity_id: 2
|
67 |
+
quote_id: 4
|
68 |
+
address_type: 'billing'
|
69 |
+
firstname: 'Hubertus'
|
70 |
+
postcode: '04229'
|
71 |
+
lastname: 'Fürstenberg'
|
72 |
+
street: 'An der Tabaksmühle 3a'
|
73 |
+
city: 'Leipzig'
|
74 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
75 |
+
country_id: 'CH'
|
76 |
+
prefix: 'Prof. Dr.'
|
77 |
+
middlename: 'von'
|
78 |
+
suffix: 'MdL'
|
79 |
+
company: ''
|
80 |
+
fax: 12345678
|
81 |
+
|
82 |
+
- entity_id: 3
|
83 |
+
quote_id: 5
|
84 |
+
address_type: 'billing'
|
85 |
+
firstname: 'Hubertus'
|
86 |
+
postcode: '04229'
|
87 |
+
lastname: 'Fürstenberg'
|
88 |
+
street: 'An der Tabaksmühle 3a'
|
89 |
+
city: 'Leipzig'
|
90 |
+
email: 'hubertus.von.fuerstenberg@trash-mail.com'
|
91 |
+
country_id: 'DE'
|
92 |
+
prefix: 'Prof. Dr.'
|
93 |
+
middlename: 'von'
|
94 |
+
suffix: 'MdL'
|
95 |
+
company: ''
|
96 |
+
fax: 12345678
|
app/code/community/Expercash/Expercash/controllers/Checkout/OnepageController.php
ADDED
@@ -0,0 +1,113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
require_once 'Mage/Checkout/controllers/OnepageController.php';
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Expercash_Expercash_Checkout_OnepageController
|
26 |
+
*/
|
27 |
+
class Expercash_Expercash_Checkout_OnepageController
|
28 |
+
extends Mage_Checkout_OnepageController
|
29 |
+
{
|
30 |
+
protected function getAddressKeys()
|
31 |
+
{
|
32 |
+
return array(
|
33 |
+
'email',
|
34 |
+
'prefix',
|
35 |
+
'firstname',
|
36 |
+
'middlename',
|
37 |
+
'lastname',
|
38 |
+
'suffix',
|
39 |
+
'company',
|
40 |
+
'street',
|
41 |
+
'city',
|
42 |
+
'region',
|
43 |
+
'region_id',
|
44 |
+
'postcode',
|
45 |
+
'country_id',
|
46 |
+
'telephone',
|
47 |
+
'fax',
|
48 |
+
'same_as_billing',
|
49 |
+
);
|
50 |
+
}
|
51 |
+
|
52 |
+
public function shippingMethodsAction()
|
53 |
+
{
|
54 |
+
$result = array();
|
55 |
+
|
56 |
+
$result['goto_section'] = 'shipping_method';
|
57 |
+
$result['update_section'] = array(
|
58 |
+
'name' => 'shipping-method',
|
59 |
+
'html' => $this->_getShippingMethodsHtml()
|
60 |
+
);
|
61 |
+
|
62 |
+
$result['allow_sections'] = array('shipping');
|
63 |
+
|
64 |
+
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
65 |
+
}
|
66 |
+
|
67 |
+
public function addressesAction()
|
68 |
+
{
|
69 |
+
$addresses = array();
|
70 |
+
|
71 |
+
$billingAddress = $this->getOnepage()->getQuote()->getBillingAddress();
|
72 |
+
$billingAddress->explodeStreetAddress();
|
73 |
+
|
74 |
+
$shippingAddress = $this->getOnepage()->getQuote()->getShippingAddress();
|
75 |
+
$shippingAddress->explodeStreetAddress();
|
76 |
+
|
77 |
+
$addressKeys = $this->getAddressKeys();
|
78 |
+
foreach ($billingAddress->getStreet() as $i => $line) {
|
79 |
+
$addressKeys[] = sprintf('street%d', $i + 1);
|
80 |
+
}
|
81 |
+
|
82 |
+
$addresses['billing'] = $billingAddress->toArray($addressKeys);
|
83 |
+
$addresses['billing']['use_for_shipping_yes'] = false;
|
84 |
+
$addresses['billing']['use_for_shipping_no'] = true;
|
85 |
+
$addresses['shipping'] = $shippingAddress->toArray($addressKeys);
|
86 |
+
|
87 |
+
$this->getResponse()->setHeader('Content-type', 'application/x-json');
|
88 |
+
$this->getResponse()->setBody(Mage::helper('core/data')->jsonEncode($addresses));
|
89 |
+
}
|
90 |
+
|
91 |
+
public function validateAddressesAction()
|
92 |
+
{
|
93 |
+
$result = array();
|
94 |
+
|
95 |
+
/** @var $quote Mage_Sales_Model_Quote */
|
96 |
+
$quote = $this->getOnePage()->getQuote();
|
97 |
+
$methodInstance = $quote->getPayment()->getMethodInstance();
|
98 |
+
|
99 |
+
if ($methodInstance instanceof Expercash_Expercash_Model_Expercashmpf) {
|
100 |
+
if (true !== $quote->getBillingAddress()->validate()) {
|
101 |
+
$result['error'] = true;
|
102 |
+
$result['goto_section'] = 'billing';
|
103 |
+
} elseif (true !== $quote->getShippingAddress()->validate()) {
|
104 |
+
$result['error'] = true;
|
105 |
+
$result['goto_section'] = 'shipping';
|
106 |
+
}
|
107 |
+
}
|
108 |
+
|
109 |
+
$this->getResponse()
|
110 |
+
->setHeader('Content-type', 'application/json')
|
111 |
+
->setBody(Mage::helper('core')->jsonEncode($result));
|
112 |
+
}
|
113 |
+
}
|
app/code/community/Expercash/Expercash/controllers/ExpercashController.php
ADDED
@@ -0,0 +1,185 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
class Expercash_Expercash_ExpercashController extends Mage_Core_Controller_Front_Action
|
24 |
+
{
|
25 |
+
|
26 |
+
|
27 |
+
private $paymentHelper = null;
|
28 |
+
|
29 |
+
public function setPaymentHelper($paymentHelper)
|
30 |
+
{
|
31 |
+
$this->paymentHelper = $paymentHelper;
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* @return Expercash_Expercash_Helper_Payment
|
36 |
+
*/
|
37 |
+
public function getPaymentHelper()
|
38 |
+
{
|
39 |
+
if (null === $this->paymentHelper) {
|
40 |
+
$this->paymentHelper = Mage::helper('expercash/payment');
|
41 |
+
}
|
42 |
+
return $this->paymentHelper;
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Get singleton of Checkout Session Model
|
47 |
+
*
|
48 |
+
* @return Mage_Checkout_Model_Session
|
49 |
+
*/
|
50 |
+
public function getCheckout()
|
51 |
+
{
|
52 |
+
return Mage::getSingleton('checkout/session');
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* when customer select ExperCash payment method
|
57 |
+
*/
|
58 |
+
public function indexAction()
|
59 |
+
{
|
60 |
+
if (!$session = $this->getCheckout()) {
|
61 |
+
$this->_redirect('checkout/cart/');
|
62 |
+
return;
|
63 |
+
}
|
64 |
+
|
65 |
+
$this->loadLayout();
|
66 |
+
$this->getLayout()->getBlock('expercash');
|
67 |
+
$this->renderLayout();
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* ExperCash
|
72 |
+
*/
|
73 |
+
public function resetAction()
|
74 |
+
{
|
75 |
+
if (!$session = $this->getCheckout()) {
|
76 |
+
$this->_redirect('checkout/cart/');
|
77 |
+
return;
|
78 |
+
}
|
79 |
+
//Load Order
|
80 |
+
$order = Mage::getModel('sales/order');
|
81 |
+
$order->loadByIncrementId($session->getLastRealOrderId());
|
82 |
+
|
83 |
+
//Reset Status of Order once
|
84 |
+
$order->addStatusToHistory(
|
85 |
+
Mage_Sales_Model_Order::STATE_HOLDED,
|
86 |
+
Mage::helper('expercash')->__('ExperCash payment loaded')
|
87 |
+
);
|
88 |
+
$order->save();
|
89 |
+
|
90 |
+
Mage::helper('expercash/data')->log(
|
91 |
+
sprintf(
|
92 |
+
"Order '%s' was resetted by ExperCash Request",
|
93 |
+
$order->getIncrementId()
|
94 |
+
)
|
95 |
+
);
|
96 |
+
|
97 |
+
//Redirect to indexAction
|
98 |
+
$this->_redirect('expercash/expercash/');
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* ExperCash returns POST variables to this action
|
103 |
+
*/
|
104 |
+
public function successAction()
|
105 |
+
{
|
106 |
+
$session = $this->getCheckout();
|
107 |
+
$session->unsExpercashOrderId();
|
108 |
+
$session->unsExpercashRealOrderId();
|
109 |
+
$session->setQuoteId($session->getExpercashQuoteId(true));
|
110 |
+
$session->getQuote()->setIsActive(false)->save();
|
111 |
+
|
112 |
+
Mage::helper('expercash/data')->log(
|
113 |
+
sprintf(
|
114 |
+
"User arrived on successAction with params:\n%s",
|
115 |
+
Zend_Json::encode($this->getRequest()->getParams())
|
116 |
+
)
|
117 |
+
);
|
118 |
+
$this->_redirect('checkout/onepage/success');
|
119 |
+
}
|
120 |
+
|
121 |
+
/**
|
122 |
+
* ExperCash returns POST variables to this action
|
123 |
+
*/
|
124 |
+
public function notifyAction()
|
125 |
+
{
|
126 |
+
Mage::helper('expercash/data')->log(
|
127 |
+
sprintf(
|
128 |
+
"notifyAction was called with params:\n%s",
|
129 |
+
Zend_Json::encode($this->getRequest()->getParams())
|
130 |
+
)
|
131 |
+
);
|
132 |
+
$response = $this->getRequest()->getParams();
|
133 |
+
$status = $this->_checkReturnedData($response);
|
134 |
+
|
135 |
+
$order = Mage::getModel('sales/order');
|
136 |
+
$order->loadByIncrementId($response['transactionId']);
|
137 |
+
if ($status) {
|
138 |
+
$session = $this->getCheckout();
|
139 |
+
$session->unsExpercashOrderId();
|
140 |
+
$session->unsExpercashRealOrderId();
|
141 |
+
$session->setQuoteId($session->getExpercashQuoteId(true));
|
142 |
+
$session->getQuote()->setIsActive(false)->save();
|
143 |
+
}
|
144 |
+
|
145 |
+
}
|
146 |
+
|
147 |
+
/**
|
148 |
+
* on error expcerash calls this action
|
149 |
+
* refill cart on error
|
150 |
+
*/
|
151 |
+
public function errorAction()
|
152 |
+
{
|
153 |
+
//Load Checkout session
|
154 |
+
if (!$session = $this->getCheckout()) {
|
155 |
+
$this->_redirect('checkout/cart/');
|
156 |
+
return;
|
157 |
+
}
|
158 |
+
|
159 |
+
//Load Order
|
160 |
+
$order = Mage::getModel('sales/order');
|
161 |
+
$order->loadByIncrementId($session->getLastRealOrderId());
|
162 |
+
|
163 |
+
//Refill the cart with the same items like for the canceled order
|
164 |
+
Mage::helper('expercash/data')->refillCart($order);
|
165 |
+
|
166 |
+
$this->loadLayout();
|
167 |
+
$this->getLayout()->getBlock('expercash');
|
168 |
+
$this->renderLayout();
|
169 |
+
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* Checking Get variables.
|
173 |
+
*
|
174 |
+
*/
|
175 |
+
protected function _checkReturnedData($response)
|
176 |
+
{
|
177 |
+
$status = false;
|
178 |
+
if (!$this->getRequest()->isGet()) {
|
179 |
+
$this->norouteAction();
|
180 |
+
return;
|
181 |
+
}
|
182 |
+
$status = $this->getPaymentHelper()->checkReturnedData($response);
|
183 |
+
return $status;
|
184 |
+
}
|
185 |
+
}
|
app/code/community/Expercash/Expercash/controllers/FullcheckoutController.php
ADDED
@@ -0,0 +1,143 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
class Expercash_Expercash_FullcheckoutController extends Mage_Core_Controller_Front_Action
|
24 |
+
{
|
25 |
+
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Get singleton of Checkout Session Model
|
29 |
+
*
|
30 |
+
* @return Mage_Checkout_Model_Session
|
31 |
+
*/
|
32 |
+
protected function getCheckout()
|
33 |
+
{
|
34 |
+
return Mage::getSingleton('checkout/session');
|
35 |
+
}
|
36 |
+
|
37 |
+
public function startAction()
|
38 |
+
{
|
39 |
+
$quote = $this->getCheckout()->getQuote();
|
40 |
+
$quote->reserveOrderId()->save();
|
41 |
+
$quote->collectTotals();
|
42 |
+
|
43 |
+
$requestParams = Mage::getModel('expercash/request_masterpass_epi')->getEpiParams($quote);
|
44 |
+
$epiClient = Mage::getModel('expercash/api_masterpass_epi');
|
45 |
+
|
46 |
+
|
47 |
+
try {
|
48 |
+
$response = $epiClient->doEpiRequest($requestParams);
|
49 |
+
|
50 |
+
// validate response rc
|
51 |
+
$epiClient->validateResponse($response);
|
52 |
+
|
53 |
+
// save taid and response timestamp to session
|
54 |
+
$this->getMasterpassHelper()->saveDataToMasterpassSession('taid', $response['taid']);
|
55 |
+
$this->getMasterpassHelper()->saveDataToMasterpassSession('timestamp', time());
|
56 |
+
|
57 |
+
$redirectUrl = $response['masterpass_sign_in_url'];
|
58 |
+
|
59 |
+
} catch (Exception $e) {
|
60 |
+
Mage::getModel('core/session')->addError(
|
61 |
+
Mage::helper('expercash/data')->__(
|
62 |
+
'Invalid response from Expercash. Please use default checkout.'
|
63 |
+
)
|
64 |
+
);
|
65 |
+
Mage::helper('expercash/data')->log($e->getMessage());
|
66 |
+
$redirectUrl = $this->_getRefererUrl();
|
67 |
+
}
|
68 |
+
|
69 |
+
|
70 |
+
// redirect to provided masterpass url
|
71 |
+
$this->_redirectUrl($redirectUrl);
|
72 |
+
|
73 |
+
|
74 |
+
}
|
75 |
+
|
76 |
+
|
77 |
+
public function successAction()
|
78 |
+
{
|
79 |
+
$params = $this->getRequest()->getParams();
|
80 |
+
$mpHelper = $this->getMasterpassHelper();
|
81 |
+
|
82 |
+
try {
|
83 |
+
|
84 |
+
$mpHelper->validateParams($params);
|
85 |
+
$mpHelper->validateAndSaveGutId($params);
|
86 |
+
$mpHelper->setBillingDataToQuoteAndSession($params);
|
87 |
+
$mpHelper->setShippingDataToQuote($params);
|
88 |
+
$mpHelper->initOnePageCheckout();
|
89 |
+
$mpHelper->saveEpiResponseOnPayment($params);
|
90 |
+
|
91 |
+
} catch (Exception $e) {
|
92 |
+
|
93 |
+
Mage::helper('expercash/data')->log($e->getMessage());
|
94 |
+
}
|
95 |
+
|
96 |
+
$this->_redirect('checkout/onepage/index/');
|
97 |
+
|
98 |
+
}
|
99 |
+
|
100 |
+
public function errorAction()
|
101 |
+
{
|
102 |
+
//Load Checkout session
|
103 |
+
if (!$session = $this->getCheckout()) {
|
104 |
+
$this->_redirect('checkout/cart/');
|
105 |
+
return;
|
106 |
+
}
|
107 |
+
|
108 |
+
Mage::getModel('core/session')->addError(
|
109 |
+
Mage::helper('expercash/data')->__(
|
110 |
+
'Operation canceled.'
|
111 |
+
)
|
112 |
+
);
|
113 |
+
|
114 |
+
//Load Order
|
115 |
+
$order = Mage::getModel('sales/order');
|
116 |
+
|
117 |
+
$order->loadByIncrementId($session->getLastRealOrderId());
|
118 |
+
|
119 |
+
//Refill the cart with the same items like for the canceled order
|
120 |
+
Mage::helper('expercash/data')->refillCart($order);
|
121 |
+
|
122 |
+
$this->_redirect('checkout/cart/');
|
123 |
+
}
|
124 |
+
|
125 |
+
|
126 |
+
/**
|
127 |
+
* @return Expercash_Expercash_Model_Masterpass_Config
|
128 |
+
*/
|
129 |
+
protected function getMasterpassConfig()
|
130 |
+
{
|
131 |
+
return Mage::getModel('expercash/masterpass_config');
|
132 |
+
}
|
133 |
+
|
134 |
+
|
135 |
+
/**
|
136 |
+
* @return Expercash_Expercash_Helper_Masterpass
|
137 |
+
*/
|
138 |
+
protected function getMasterpassHelper()
|
139 |
+
{
|
140 |
+
return Mage::helper('expercash/masterpass');
|
141 |
+
}
|
142 |
+
|
143 |
+
}
|
app/code/community/Expercash/Expercash/etc/config.xml
ADDED
@@ -0,0 +1,363 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
-->
|
24 |
+
<config>
|
25 |
+
<modules>
|
26 |
+
<Expercash_Expercash>
|
27 |
+
<version>15.05.06</version>
|
28 |
+
</Expercash_Expercash>
|
29 |
+
</modules>
|
30 |
+
<global>
|
31 |
+
<blocks>
|
32 |
+
<expercash>
|
33 |
+
<class>Expercash_Expercash_Block</class>
|
34 |
+
</expercash>
|
35 |
+
</blocks>
|
36 |
+
<helpers>
|
37 |
+
<expercash>
|
38 |
+
<class>Expercash_Expercash_Helper</class>
|
39 |
+
</expercash>
|
40 |
+
</helpers>
|
41 |
+
<models>
|
42 |
+
<expercash>
|
43 |
+
<class>Expercash_Expercash_Model</class>
|
44 |
+
<resourceModel>expercash_resource</resourceModel>
|
45 |
+
</expercash>
|
46 |
+
<expercash_resource>
|
47 |
+
<class>Expercash_Expercash_Model_Resource</class>
|
48 |
+
</expercash_resource>
|
49 |
+
</models>
|
50 |
+
<resources>
|
51 |
+
<expercash_setup>
|
52 |
+
<setup>
|
53 |
+
<module>Expercash_Expercash</module>
|
54 |
+
<class>Expercash_Expercash_Model_Entity_Setup</class>
|
55 |
+
</setup>
|
56 |
+
<connection>
|
57 |
+
<use>core_setup</use>
|
58 |
+
</connection>
|
59 |
+
</expercash_setup>
|
60 |
+
<expercash_write>
|
61 |
+
<connection>
|
62 |
+
<use>core_write</use>
|
63 |
+
</connection>
|
64 |
+
</expercash_write>
|
65 |
+
<expercash_read>
|
66 |
+
<connection>
|
67 |
+
<use>core_read</use>
|
68 |
+
</connection>
|
69 |
+
</expercash_read>
|
70 |
+
</resources>
|
71 |
+
<payment>
|
72 |
+
<groups>
|
73 |
+
<expercash>ExperCash</expercash>
|
74 |
+
</groups>
|
75 |
+
</payment>
|
76 |
+
<events>
|
77 |
+
<controller_action_layout_render_before_checkout_onepage_index>
|
78 |
+
<observers>
|
79 |
+
<masterpass_fullcheckout>
|
80 |
+
<class>expercash/observer</class>
|
81 |
+
<method>setStepData</method>
|
82 |
+
</masterpass_fullcheckout>
|
83 |
+
</observers>
|
84 |
+
</controller_action_layout_render_before_checkout_onepage_index>
|
85 |
+
<sales_order_place_before>
|
86 |
+
<observers>
|
87 |
+
<masterpass_fullcheckout>
|
88 |
+
<class>expercash/observer</class>
|
89 |
+
<method>validateMasterpassSession</method>
|
90 |
+
</masterpass_fullcheckout>
|
91 |
+
</observers>
|
92 |
+
</sales_order_place_before>
|
93 |
+
<payment_method_is_active>
|
94 |
+
<observers>
|
95 |
+
<masterpass_fullcheckout>
|
96 |
+
<class>expercash/observer</class>
|
97 |
+
<method>setPaymentAvailable</method>
|
98 |
+
</masterpass_fullcheckout>
|
99 |
+
</observers>
|
100 |
+
</payment_method_is_active>
|
101 |
+
<checkout_cart_save_after>
|
102 |
+
<observers>
|
103 |
+
<masterpass_fullcheckout>
|
104 |
+
<class>expercash/observer</class>
|
105 |
+
<method>invalidateMasterpassSession</method>
|
106 |
+
</masterpass_fullcheckout>
|
107 |
+
</observers>
|
108 |
+
</checkout_cart_save_after>
|
109 |
+
</events>
|
110 |
+
</global>
|
111 |
+
<adminhtml>
|
112 |
+
<translate>
|
113 |
+
<modules>
|
114 |
+
<Expercash_Expercash>
|
115 |
+
<files>
|
116 |
+
<default>Expercash_Expercash.csv</default>
|
117 |
+
</files>
|
118 |
+
</Expercash_Expercash>
|
119 |
+
</modules>
|
120 |
+
</translate>
|
121 |
+
</adminhtml>
|
122 |
+
<frontend>
|
123 |
+
<secure_url>
|
124 |
+
<expercash_expercash>/expercash/expercash/</expercash_expercash>
|
125 |
+
</secure_url>
|
126 |
+
<translate>
|
127 |
+
<modules>
|
128 |
+
<Expercash_Expercash>
|
129 |
+
<files>
|
130 |
+
<default>Expercash_Expercash.csv</default>
|
131 |
+
</files>
|
132 |
+
</Expercash_Expercash>
|
133 |
+
</modules>
|
134 |
+
</translate>
|
135 |
+
<routers>
|
136 |
+
<expercash>
|
137 |
+
<use>standard</use>
|
138 |
+
<args>
|
139 |
+
<module>Expercash_Expercash</module>
|
140 |
+
<frontName>expercash</frontName>
|
141 |
+
</args>
|
142 |
+
</expercash>
|
143 |
+
</routers>
|
144 |
+
<secure_url>
|
145 |
+
<expercash>/expercash/</expercash>
|
146 |
+
</secure_url>
|
147 |
+
<layout>
|
148 |
+
<updates>
|
149 |
+
<expercash>
|
150 |
+
<file>expercash.xml</file>
|
151 |
+
</expercash>
|
152 |
+
</updates>
|
153 |
+
</layout>
|
154 |
+
</frontend>
|
155 |
+
|
156 |
+
<default>
|
157 |
+
<payment>
|
158 |
+
<expercashelv>
|
159 |
+
<active>0</active>
|
160 |
+
<debug>1</debug>
|
161 |
+
<model>expercash/expercashelv</model>
|
162 |
+
<order_status>1</order_status>
|
163 |
+
<title>Lastschriftverfahren</title>
|
164 |
+
<allowspecific>0</allowspecific>
|
165 |
+
<allowed_currency>EUR</allowed_currency>
|
166 |
+
<paymenttype></paymenttype>
|
167 |
+
<popupid></popupid>
|
168 |
+
<profile></profile>
|
169 |
+
<authorizationkey></authorizationkey>
|
170 |
+
<paymentkey></paymentkey>
|
171 |
+
<projectid></projectid>
|
172 |
+
<group>expercash</group>
|
173 |
+
<!--
|
174 |
+
<returnurl></returnurl>
|
175 |
+
<errorurl></errorurl>
|
176 |
+
<notifyurl></notifyurl>-->
|
177 |
+
<iframecss></iframecss>
|
178 |
+
<iframewidth></iframewidth>
|
179 |
+
<iframeheight></iframeheight>
|
180 |
+
<cssurl></cssurl>
|
181 |
+
<createinvoice>0</createinvoice>
|
182 |
+
<payment_action>authorize</payment_action>
|
183 |
+
</expercashelv>
|
184 |
+
<expercashcc>
|
185 |
+
<active>0</active>
|
186 |
+
<debug>1</debug>
|
187 |
+
<model>expercash/expercashcc</model>
|
188 |
+
<order_status>1</order_status>
|
189 |
+
<title>Kreditkarte</title>
|
190 |
+
<allowspecific>0</allowspecific>
|
191 |
+
<allowed_currency>EUR,USD</allowed_currency>
|
192 |
+
<paymenttype></paymenttype>
|
193 |
+
<popupid></popupid>
|
194 |
+
<profile></profile>
|
195 |
+
<authorizationkey></authorizationkey>
|
196 |
+
<paymentkey></paymentkey>
|
197 |
+
<projectid></projectid>
|
198 |
+
<group>expercash</group>
|
199 |
+
<!--
|
200 |
+
<returnurl></returnurl>
|
201 |
+
<errorurl></errorurl>
|
202 |
+
<notifyurl></notifyurl>-->
|
203 |
+
<iframecss></iframecss>
|
204 |
+
<iframewidth></iframewidth>
|
205 |
+
<iframeheight></iframeheight>
|
206 |
+
<cssurl></cssurl>
|
207 |
+
<createinvoice>0</createinvoice>
|
208 |
+
<payment_action>authorize</payment_action>
|
209 |
+
</expercashcc>
|
210 |
+
<expercashso>
|
211 |
+
<active>0</active>
|
212 |
+
<debug>1</debug>
|
213 |
+
<model>expercash/expercashso</model>
|
214 |
+
<order_status>1</order_status>
|
215 |
+
<title>Sofortueberweisung</title>
|
216 |
+
<allowspecific>0</allowspecific>
|
217 |
+
<allowed_currency>EUR</allowed_currency>
|
218 |
+
<paymenttype></paymenttype>
|
219 |
+
<popupid></popupid>
|
220 |
+
<profile></profile>
|
221 |
+
<authorizationkey></authorizationkey>
|
222 |
+
<paymentkey></paymentkey>
|
223 |
+
<projectid></projectid>
|
224 |
+
<group>expercash</group>
|
225 |
+
<!--
|
226 |
+
<returnurl></returnurl>
|
227 |
+
<errorurl></errorurl>
|
228 |
+
<notifyurl></notifyurl>-->
|
229 |
+
<iframecss></iframecss>
|
230 |
+
<iframewidth></iframewidth>
|
231 |
+
<iframeheight></iframeheight>
|
232 |
+
<cssurl></cssurl>
|
233 |
+
<createinvoice>0</createinvoice>
|
234 |
+
<payment_action>authorize</payment_action>
|
235 |
+
</expercashso>
|
236 |
+
<expercashgp>
|
237 |
+
<active>0</active>
|
238 |
+
<debug>1</debug>
|
239 |
+
<model>expercash/expercashgp</model>
|
240 |
+
<order_status>1</order_status>
|
241 |
+
<title>giropay</title>
|
242 |
+
<allowspecific>0</allowspecific>
|
243 |
+
<allowed_currency>EUR</allowed_currency>
|
244 |
+
<paymenttype></paymenttype>
|
245 |
+
<popupid></popupid>
|
246 |
+
<profile></profile>
|
247 |
+
<authorizationkey></authorizationkey>
|
248 |
+
<paymentkey></paymentkey>
|
249 |
+
<projectid></projectid>
|
250 |
+
<group>expercash</group>
|
251 |
+
<!--
|
252 |
+
<returnurl></returnurl>
|
253 |
+
<errorurl></errorurl>
|
254 |
+
<notifyurl></notifyurl>-->
|
255 |
+
<iframecss></iframecss>
|
256 |
+
<iframewidth></iframewidth>
|
257 |
+
<iframeheight></iframeheight>
|
258 |
+
<cssurl></cssurl>
|
259 |
+
<createinvoice>0</createinvoice>
|
260 |
+
<payment_action>authorize</payment_action>
|
261 |
+
</expercashgp>
|
262 |
+
<expercashpc>
|
263 |
+
<active>0</active>
|
264 |
+
<debug>1</debug>
|
265 |
+
<model>expercash/expercashpc</model>
|
266 |
+
<order_status>1</order_status>
|
267 |
+
<title>Barzahlen</title>
|
268 |
+
<allowspecific>1</allowspecific>
|
269 |
+
<specificcountry>DE</specificcountry>
|
270 |
+
<allowed_currency>EUR</allowed_currency>
|
271 |
+
<paymenttype>barzahlen</paymenttype>
|
272 |
+
<popupid></popupid>
|
273 |
+
<profile></profile>
|
274 |
+
<authorizationkey></authorizationkey>
|
275 |
+
<paymentkey></paymentkey>
|
276 |
+
<projectid></projectid>
|
277 |
+
<group>expercash</group>
|
278 |
+
<iframecss></iframecss>
|
279 |
+
<iframewidth></iframewidth>
|
280 |
+
<iframeheight></iframeheight>
|
281 |
+
<cssurl></cssurl>
|
282 |
+
<createinvoice>0</createinvoice>
|
283 |
+
<payment_action>authorize</payment_action>
|
284 |
+
</expercashpc>
|
285 |
+
|
286 |
+
<expercashmp>
|
287 |
+
<active>0</active>
|
288 |
+
<debug>1</debug>
|
289 |
+
<show_logo>1</show_logo>
|
290 |
+
<mp_learnmore_url>https://www.mastercard.com/mc_us/wallet/learnmore</mp_learnmore_url>
|
291 |
+
<model>expercash/expercashmp</model>
|
292 |
+
<order_status>1</order_status>
|
293 |
+
<title>Masterpass</title>
|
294 |
+
<allowspecific>0</allowspecific>
|
295 |
+
<allowed_currency>EUR,USD</allowed_currency>
|
296 |
+
<paymenttype></paymenttype>
|
297 |
+
<popupid></popupid>
|
298 |
+
<profile></profile>
|
299 |
+
<authorizationkey></authorizationkey>
|
300 |
+
<paymentkey></paymentkey>
|
301 |
+
<projectid></projectid>
|
302 |
+
<group>expercash</group>
|
303 |
+
<!--
|
304 |
+
<returnurl></returnurl>
|
305 |
+
<errorurl></errorurl>
|
306 |
+
<notifyurl></notifyurl>-->
|
307 |
+
<iframecss></iframecss>
|
308 |
+
<iframewidth></iframewidth>
|
309 |
+
<iframeheight></iframeheight>
|
310 |
+
<cssurl></cssurl>
|
311 |
+
<createinvoice>0</createinvoice>
|
312 |
+
<payment_action>authorize</payment_action>
|
313 |
+
</expercashmp>
|
314 |
+
|
315 |
+
<expercashmpf>
|
316 |
+
<active>0</active>
|
317 |
+
<debug>1</debug>
|
318 |
+
<show_button_in_cart>1</show_button_in_cart>
|
319 |
+
<show_button_in_mini_cart>1</show_button_in_mini_cart>
|
320 |
+
<show_learn_more_link>1</show_learn_more_link>
|
321 |
+
<mp_learnmore_url>https://www.mastercard.com/mc_us/wallet/learnmore</mp_learnmore_url>
|
322 |
+
<model>expercash/expercashmpf</model>
|
323 |
+
<order_status>pending</order_status>
|
324 |
+
<title>Masterpass Full Checkout</title>
|
325 |
+
<allowspecific>0</allowspecific>
|
326 |
+
<allowed_currency>EUR,USD</allowed_currency>
|
327 |
+
<checkout_text><![CDATA[With MasterPass, you can use the stored payment and shipping information from your MasterPass account to buy quickly, safely and easily. If you do not have a MasterPass Wallet yet, please contact your bank.]]></checkout_text>
|
328 |
+
<popupid></popupid>
|
329 |
+
<profile></profile>
|
330 |
+
<authorizationkey></authorizationkey>
|
331 |
+
<paymentkey></paymentkey>
|
332 |
+
<projectid></projectid>
|
333 |
+
<group>expercash</group>
|
334 |
+
<iframecss></iframecss>
|
335 |
+
<iframewidth></iframewidth>
|
336 |
+
<iframeheight></iframeheight>
|
337 |
+
<cssurl></cssurl>
|
338 |
+
<payment_action>authorize</payment_action>
|
339 |
+
</expercashmpf>
|
340 |
+
|
341 |
+
</payment>
|
342 |
+
<iframe_token_url>
|
343 |
+
<url>https://epi.expercash.net/iframe/post/v25/</url>
|
344 |
+
</iframe_token_url>
|
345 |
+
<epi_url>
|
346 |
+
<url>https://epi.expercash.net</url>
|
347 |
+
</epi_url>
|
348 |
+
<iframe_url>
|
349 |
+
<url>https://epi.expercash.net/epi_popup2.php</url>
|
350 |
+
</iframe_url>
|
351 |
+
<additionalPaymentParams>
|
352 |
+
<params>owner,maskedPan,cardScheme,validThru,panCountry,ipCountry,attemptsTotal,attemptsSameAction,3dsStatus,paymentStatus</params>
|
353 |
+
</additionalPaymentParams>
|
354 |
+
|
355 |
+
</default>
|
356 |
+
<phpunit>
|
357 |
+
<suite>
|
358 |
+
<modules>
|
359 |
+
<Expercash_Expercash/>
|
360 |
+
</modules>
|
361 |
+
</suite>
|
362 |
+
</phpunit>
|
363 |
+
</config>
|
app/code/community/Expercash/Expercash/etc/system.xml
ADDED
@@ -0,0 +1,861 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
-->
|
24 |
+
<config>
|
25 |
+
<sections>
|
26 |
+
<payment_services>
|
27 |
+
<groups>
|
28 |
+
<expercash translate="label,comment" module="expercash">
|
29 |
+
<label>Expercash</label>
|
30 |
+
<frontend_type>text</frontend_type>
|
31 |
+
<sort_order>0</sort_order>
|
32 |
+
<show_in_default>1</show_in_default>
|
33 |
+
<show_in_website>1</show_in_website>
|
34 |
+
<show_in_store>1</show_in_store>
|
35 |
+
<fields>
|
36 |
+
<popup_id translate="label">
|
37 |
+
<label>Popup Id (popupId)</label>
|
38 |
+
<frontend_type>text</frontend_type>
|
39 |
+
<sort_order>64</sort_order>
|
40 |
+
<show_in_default>1</show_in_default>
|
41 |
+
<show_in_website>1</show_in_website>
|
42 |
+
<show_in_store>1</show_in_store>
|
43 |
+
</popup_id>
|
44 |
+
<profil_id translate="label">
|
45 |
+
<label>Profile</label>
|
46 |
+
<frontend_type>text</frontend_type>
|
47 |
+
<sort_order>128</sort_order>
|
48 |
+
<show_in_default>1</show_in_default>
|
49 |
+
<show_in_website>1</show_in_website>
|
50 |
+
<show_in_store>1</show_in_store>
|
51 |
+
</profil_id>
|
52 |
+
<authorization_key translate="label">
|
53 |
+
<label>Authorizationkey (IFrame)</label>
|
54 |
+
<frontend_type>text</frontend_type>
|
55 |
+
<sort_order>256</sort_order>
|
56 |
+
<show_in_default>1</show_in_default>
|
57 |
+
<show_in_website>1</show_in_website>
|
58 |
+
<show_in_store>1</show_in_store>
|
59 |
+
</authorization_key>
|
60 |
+
<gateway_key translate="label">
|
61 |
+
<label>Paymentkey (API)</label>
|
62 |
+
<frontend_type>text</frontend_type>
|
63 |
+
<sort_order>564</sort_order>
|
64 |
+
<show_in_default>1</show_in_default>
|
65 |
+
<show_in_website>1</show_in_website>
|
66 |
+
<show_in_store>1</show_in_store>
|
67 |
+
</gateway_key>
|
68 |
+
<project_id translate="label">
|
69 |
+
<label>Project Id (IFrame)</label>
|
70 |
+
<frontend_type>text</frontend_type>
|
71 |
+
<sort_order>1024</sort_order>
|
72 |
+
<show_in_default>1</show_in_default>
|
73 |
+
<show_in_website>1</show_in_website>
|
74 |
+
<show_in_store>1</show_in_store>
|
75 |
+
</project_id>
|
76 |
+
<iframe_css_class translate="label">
|
77 |
+
<label>Iframe css class</label>
|
78 |
+
<frontend_type>text</frontend_type>
|
79 |
+
<sort_order>16384</sort_order>
|
80 |
+
<show_in_default>1</show_in_default>
|
81 |
+
<show_in_website>1</show_in_website>
|
82 |
+
<show_in_store>1</show_in_store>
|
83 |
+
</iframe_css_class>
|
84 |
+
<iframe_width translate="label">
|
85 |
+
<label>Iframe width</label>
|
86 |
+
<frontend_type>text</frontend_type>
|
87 |
+
<sort_order>32768</sort_order>
|
88 |
+
<show_in_default>1</show_in_default>
|
89 |
+
<show_in_website>1</show_in_website>
|
90 |
+
<show_in_store>1</show_in_store>
|
91 |
+
</iframe_width>
|
92 |
+
<iframe_height translate="label">
|
93 |
+
<label>Iframe height</label>
|
94 |
+
<frontend_type>text</frontend_type>
|
95 |
+
<sort_order>65536</sort_order>
|
96 |
+
<show_in_default>1</show_in_default>
|
97 |
+
<show_in_website>1</show_in_website>
|
98 |
+
<show_in_store>1</show_in_store>
|
99 |
+
</iframe_height>
|
100 |
+
<css_url translate="label">
|
101 |
+
<label>CSS file url (https!)</label>
|
102 |
+
<frontend_type>text</frontend_type>
|
103 |
+
<sort_order>131072</sort_order>
|
104 |
+
<show_in_default>1</show_in_default>
|
105 |
+
<show_in_website>1</show_in_website>
|
106 |
+
<show_in_store>1</show_in_store>
|
107 |
+
</css_url>
|
108 |
+
</fields>
|
109 |
+
|
110 |
+
</expercash>
|
111 |
+
</groups>
|
112 |
+
</payment_services>
|
113 |
+
<payment>
|
114 |
+
<groups>
|
115 |
+
<expercashelv translate="label" module="expercash">
|
116 |
+
<label>ExperCash (ELV)</label>
|
117 |
+
<frontend_type>text</frontend_type>
|
118 |
+
<sort_order>0</sort_order>
|
119 |
+
<show_in_default>1</show_in_default>
|
120 |
+
<show_in_website>1</show_in_website>
|
121 |
+
<show_in_store>1</show_in_store>
|
122 |
+
<fields>
|
123 |
+
<active translate="label">
|
124 |
+
<label>Enabled</label>
|
125 |
+
<frontend_type>select</frontend_type>
|
126 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
127 |
+
<sort_order>1</sort_order>
|
128 |
+
<show_in_default>1</show_in_default>
|
129 |
+
<show_in_website>1</show_in_website>
|
130 |
+
<show_in_store>1</show_in_store>
|
131 |
+
</active>
|
132 |
+
<order_status translate="label">
|
133 |
+
<label>New order status</label>
|
134 |
+
<frontend_type>select</frontend_type>
|
135 |
+
<source_model>adminhtml/system_config_source_order_status</source_model>
|
136 |
+
<sort_order>2</sort_order>
|
137 |
+
<show_in_default>1</show_in_default>
|
138 |
+
<show_in_website>1</show_in_website>
|
139 |
+
<show_in_store>1</show_in_store>
|
140 |
+
</order_status>
|
141 |
+
<sort_order translate="label">
|
142 |
+
<label>Sort order</label>
|
143 |
+
<frontend_type>text</frontend_type>
|
144 |
+
<sort_order>3</sort_order>
|
145 |
+
<show_in_default>1</show_in_default>
|
146 |
+
<show_in_website>1</show_in_website>
|
147 |
+
<show_in_store>1</show_in_store>
|
148 |
+
</sort_order>
|
149 |
+
<title translate="label">
|
150 |
+
<label>Title</label>
|
151 |
+
<frontend_type>text</frontend_type>
|
152 |
+
<sort_order>5</sort_order>
|
153 |
+
<show_in_default>1</show_in_default>
|
154 |
+
<show_in_website>1</show_in_website>
|
155 |
+
<show_in_store>1</show_in_store>
|
156 |
+
</title>
|
157 |
+
<allowspecific translate="label">
|
158 |
+
<label>Payment to applicable countries</label>
|
159 |
+
<frontend_type>allowspecific</frontend_type>
|
160 |
+
<sort_order>6</sort_order>
|
161 |
+
<source_model>adminhtml/system_config_source_payment_allspecificcountries</source_model>
|
162 |
+
<show_in_default>1</show_in_default>
|
163 |
+
<show_in_website>1</show_in_website>
|
164 |
+
<show_in_store>1</show_in_store>
|
165 |
+
</allowspecific>
|
166 |
+
<specificcountry translate="label">
|
167 |
+
<label>Payment to Specific countries</label>
|
168 |
+
<frontend_type>multiselect</frontend_type>
|
169 |
+
<sort_order>7</sort_order>
|
170 |
+
<source_model>adminhtml/system_config_source_country</source_model>
|
171 |
+
<show_in_default>1</show_in_default>
|
172 |
+
<show_in_website>1</show_in_website>
|
173 |
+
<show_in_store>1</show_in_store>
|
174 |
+
</specificcountry>
|
175 |
+
<allowed_currency translate="label">
|
176 |
+
<label>Allowed Currencies</label>
|
177 |
+
<frontend_type>multiselect</frontend_type>
|
178 |
+
<source_model>adminhtml/system_config_source_locale_currency_all</source_model>
|
179 |
+
<sort_order>8</sort_order>
|
180 |
+
<show_in_default>1</show_in_default>
|
181 |
+
<show_in_website>0</show_in_website>
|
182 |
+
<show_in_store>1</show_in_store>
|
183 |
+
</allowed_currency>
|
184 |
+
<paymenttype translate="label">
|
185 |
+
<label>Paymenttype</label>
|
186 |
+
<frontend_type>select</frontend_type>
|
187 |
+
<sort_order>32</sort_order>
|
188 |
+
<source_model>expercash/source_paymenttypeelv</source_model>
|
189 |
+
<show_in_default>1</show_in_default>
|
190 |
+
<show_in_website>1</show_in_website>
|
191 |
+
<show_in_store>1</show_in_store>
|
192 |
+
</paymenttype>
|
193 |
+
<createinvoice translate="label">
|
194 |
+
<label>Create Invoice at buy</label>
|
195 |
+
<frontend_type>select</frontend_type>
|
196 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
197 |
+
<sort_order>262144</sort_order>
|
198 |
+
<show_in_default>1</show_in_default>
|
199 |
+
<show_in_website>1</show_in_website>
|
200 |
+
<show_in_store>1</show_in_store>
|
201 |
+
<depends>
|
202 |
+
<paymenttype>elv_buy</paymenttype>
|
203 |
+
</depends>
|
204 |
+
</createinvoice>
|
205 |
+
<sendinvoicemail translate="label">
|
206 |
+
<label>send mail after automatic invoice creation</label>
|
207 |
+
<frontend_type>select</frontend_type>
|
208 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
209 |
+
<sort_order>262150</sort_order>
|
210 |
+
<show_in_default>1</show_in_default>
|
211 |
+
<show_in_website>1</show_in_website>
|
212 |
+
<show_in_store>1</show_in_store>
|
213 |
+
<depends>
|
214 |
+
<createinvoice>1</createinvoice>
|
215 |
+
<paymenttype>elv_buy</paymenttype>
|
216 |
+
</depends>
|
217 |
+
</sendinvoicemail>
|
218 |
+
</fields>
|
219 |
+
</expercashelv>
|
220 |
+
<expercashcc translate="label" module="expercash">
|
221 |
+
<label>ExperCash (CC)</label>
|
222 |
+
<frontend_type>text</frontend_type>
|
223 |
+
<sort_order>0</sort_order>
|
224 |
+
<show_in_default>1</show_in_default>
|
225 |
+
<show_in_website>1</show_in_website>
|
226 |
+
<show_in_store>1</show_in_store>
|
227 |
+
<fields>
|
228 |
+
<active translate="label">
|
229 |
+
<label>Enabled</label>
|
230 |
+
<frontend_type>select</frontend_type>
|
231 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
232 |
+
<sort_order>1</sort_order>
|
233 |
+
<show_in_default>1</show_in_default>
|
234 |
+
<show_in_website>1</show_in_website>
|
235 |
+
<show_in_store>1</show_in_store>
|
236 |
+
</active>
|
237 |
+
<order_status translate="label">
|
238 |
+
<label>New order status</label>
|
239 |
+
<frontend_type>select</frontend_type>
|
240 |
+
<source_model>adminhtml/system_config_source_order_status</source_model>
|
241 |
+
<sort_order>2</sort_order>
|
242 |
+
<show_in_default>1</show_in_default>
|
243 |
+
<show_in_website>1</show_in_website>
|
244 |
+
<show_in_store>1</show_in_store>
|
245 |
+
</order_status>
|
246 |
+
<sort_order translate="label">
|
247 |
+
<label>Sort order</label>
|
248 |
+
<frontend_type>text</frontend_type>
|
249 |
+
<sort_order>3</sort_order>
|
250 |
+
<show_in_default>1</show_in_default>
|
251 |
+
<show_in_website>1</show_in_website>
|
252 |
+
<show_in_store>1</show_in_store>
|
253 |
+
</sort_order>
|
254 |
+
<title translate="label">
|
255 |
+
<label>Title</label>
|
256 |
+
<frontend_type>text</frontend_type>
|
257 |
+
<sort_order>5</sort_order>
|
258 |
+
<show_in_default>1</show_in_default>
|
259 |
+
<show_in_website>1</show_in_website>
|
260 |
+
<show_in_store>1</show_in_store>
|
261 |
+
</title>
|
262 |
+
<allowspecific translate="label">
|
263 |
+
<label>Payment to applicable countries</label>
|
264 |
+
<frontend_type>allowspecific</frontend_type>
|
265 |
+
<sort_order>6</sort_order>
|
266 |
+
<source_model>adminhtml/system_config_source_payment_allspecificcountries</source_model>
|
267 |
+
<show_in_default>1</show_in_default>
|
268 |
+
<show_in_website>1</show_in_website>
|
269 |
+
<show_in_store>1</show_in_store>
|
270 |
+
</allowspecific>
|
271 |
+
<specificcountry translate="label">
|
272 |
+
<label>Payment to Specific countries</label>
|
273 |
+
<frontend_type>multiselect</frontend_type>
|
274 |
+
<sort_order>7</sort_order>
|
275 |
+
<source_model>adminhtml/system_config_source_country</source_model>
|
276 |
+
<show_in_default>1</show_in_default>
|
277 |
+
<show_in_website>1</show_in_website>
|
278 |
+
<show_in_store>1</show_in_store>
|
279 |
+
</specificcountry>
|
280 |
+
<allowed_currency translate="label">
|
281 |
+
<label>Allowed Currencies</label>
|
282 |
+
<frontend_type>multiselect</frontend_type>
|
283 |
+
<source_model>adminhtml/system_config_source_locale_currency_all</source_model>
|
284 |
+
<sort_order>8</sort_order>
|
285 |
+
<show_in_default>1</show_in_default>
|
286 |
+
<show_in_website>1</show_in_website>
|
287 |
+
<show_in_store>1</show_in_store>
|
288 |
+
</allowed_currency>
|
289 |
+
<paymenttype translate="label">
|
290 |
+
<label>Paymenttype</label>
|
291 |
+
<frontend_type>select</frontend_type>
|
292 |
+
<sort_order>32</sort_order>
|
293 |
+
<source_model>expercash/source_paymenttypecc</source_model>
|
294 |
+
<show_in_default>1</show_in_default>
|
295 |
+
<show_in_website>1</show_in_website>
|
296 |
+
<show_in_store>1</show_in_store>
|
297 |
+
</paymenttype>
|
298 |
+
<createinvoice translate="label">
|
299 |
+
<label>Create Invoice at buy</label>
|
300 |
+
<frontend_type>select</frontend_type>
|
301 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
302 |
+
<sort_order>262144</sort_order>
|
303 |
+
<show_in_default>1</show_in_default>
|
304 |
+
<show_in_website>1</show_in_website>
|
305 |
+
<show_in_store>1</show_in_store>
|
306 |
+
<depends>
|
307 |
+
<paymenttype>cc_buy</paymenttype>
|
308 |
+
</depends>
|
309 |
+
</createinvoice>
|
310 |
+
<sendinvoicemail translate="label">
|
311 |
+
<label>send mail after automatic invoice creation</label>
|
312 |
+
<frontend_type>select</frontend_type>
|
313 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
314 |
+
<sort_order>262150</sort_order>
|
315 |
+
<show_in_default>1</show_in_default>
|
316 |
+
<show_in_website>1</show_in_website>
|
317 |
+
<show_in_store>1</show_in_store>
|
318 |
+
<depends>
|
319 |
+
<createinvoice>1</createinvoice>
|
320 |
+
<paymenttype>cc_buy</paymenttype>
|
321 |
+
</depends>
|
322 |
+
</sendinvoicemail>
|
323 |
+
</fields>
|
324 |
+
</expercashcc>
|
325 |
+
<expercashso translate="label" module="expercash">
|
326 |
+
<label>ExperCash (SO)</label>
|
327 |
+
<frontend_type>text</frontend_type>
|
328 |
+
<sort_order>0</sort_order>
|
329 |
+
<show_in_default>1</show_in_default>
|
330 |
+
<show_in_website>1</show_in_website>
|
331 |
+
<show_in_store>1</show_in_store>
|
332 |
+
<fields>
|
333 |
+
<active translate="label">
|
334 |
+
<label>Enabled</label>
|
335 |
+
<frontend_type>select</frontend_type>
|
336 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
337 |
+
<sort_order>1</sort_order>
|
338 |
+
<show_in_default>1</show_in_default>
|
339 |
+
<show_in_website>1</show_in_website>
|
340 |
+
<show_in_store>1</show_in_store>
|
341 |
+
</active>
|
342 |
+
<order_status translate="label">
|
343 |
+
<label>New order status</label>
|
344 |
+
<frontend_type>select</frontend_type>
|
345 |
+
<source_model>adminhtml/system_config_source_order_status</source_model>
|
346 |
+
<sort_order>2</sort_order>
|
347 |
+
<show_in_default>1</show_in_default>
|
348 |
+
<show_in_website>1</show_in_website>
|
349 |
+
<show_in_store>1</show_in_store>
|
350 |
+
</order_status>
|
351 |
+
<sort_order translate="label">
|
352 |
+
<label>Sort order</label>
|
353 |
+
<frontend_type>text</frontend_type>
|
354 |
+
<sort_order>3</sort_order>
|
355 |
+
<show_in_default>1</show_in_default>
|
356 |
+
<show_in_website>1</show_in_website>
|
357 |
+
<show_in_store>1</show_in_store>
|
358 |
+
</sort_order>
|
359 |
+
<title translate="label">
|
360 |
+
<label>Title</label>
|
361 |
+
<frontend_type>text</frontend_type>
|
362 |
+
<sort_order>5</sort_order>
|
363 |
+
<show_in_default>1</show_in_default>
|
364 |
+
<show_in_website>1</show_in_website>
|
365 |
+
<show_in_store>1</show_in_store>
|
366 |
+
</title>
|
367 |
+
<allowspecific translate="label">
|
368 |
+
<label>Payment to applicable countries</label>
|
369 |
+
<frontend_type>allowspecific</frontend_type>
|
370 |
+
<sort_order>6</sort_order>
|
371 |
+
<source_model>adminhtml/system_config_source_payment_allspecificcountries</source_model>
|
372 |
+
<show_in_default>1</show_in_default>
|
373 |
+
<show_in_website>1</show_in_website>
|
374 |
+
<show_in_store>1</show_in_store>
|
375 |
+
</allowspecific>
|
376 |
+
<specificcountry translate="label">
|
377 |
+
<label>Payment to Specific countries</label>
|
378 |
+
<frontend_type>multiselect</frontend_type>
|
379 |
+
<sort_order>7</sort_order>
|
380 |
+
<source_model>adminhtml/system_config_source_country</source_model>
|
381 |
+
<show_in_default>1</show_in_default>
|
382 |
+
<show_in_website>1</show_in_website>
|
383 |
+
<show_in_store>1</show_in_store>
|
384 |
+
</specificcountry>
|
385 |
+
<allowed_currency translate="label">
|
386 |
+
<label>Allowed Currencies</label>
|
387 |
+
<frontend_type>multiselect</frontend_type>
|
388 |
+
<source_model>adminhtml/system_config_source_locale_currency_all</source_model>
|
389 |
+
<sort_order>8</sort_order>
|
390 |
+
<show_in_default>1</show_in_default>
|
391 |
+
<show_in_website>1</show_in_website>
|
392 |
+
<show_in_store>1</show_in_store>
|
393 |
+
</allowed_currency>
|
394 |
+
<paymenttype translate="label">
|
395 |
+
<label>Paymenttype</label>
|
396 |
+
<frontend_type>select</frontend_type>
|
397 |
+
<sort_order>32</sort_order>
|
398 |
+
<source_model>expercash/source_paymenttypeso</source_model>
|
399 |
+
<show_in_default>1</show_in_default>
|
400 |
+
<show_in_website>1</show_in_website>
|
401 |
+
<show_in_store>1</show_in_store>
|
402 |
+
</paymenttype>
|
403 |
+
<createinvoice translate="label">
|
404 |
+
<label>Create Invoice at buy</label>
|
405 |
+
<frontend_type>select</frontend_type>
|
406 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
407 |
+
<sort_order>262144</sort_order>
|
408 |
+
<show_in_default>1</show_in_default>
|
409 |
+
<show_in_website>1</show_in_website>
|
410 |
+
<show_in_store>1</show_in_store>
|
411 |
+
</createinvoice>
|
412 |
+
<sendinvoicemail translate="label">
|
413 |
+
<label>send mail after automatic invoice creation</label>
|
414 |
+
<frontend_type>select</frontend_type>
|
415 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
416 |
+
<sort_order>262150</sort_order>
|
417 |
+
<show_in_default>1</show_in_default>
|
418 |
+
<show_in_website>1</show_in_website>
|
419 |
+
<show_in_store>1</show_in_store>
|
420 |
+
<depends>
|
421 |
+
<createinvoice>1</createinvoice>
|
422 |
+
</depends>
|
423 |
+
</sendinvoicemail>
|
424 |
+
</fields>
|
425 |
+
</expercashso>
|
426 |
+
<expercashgp translate="label" module="expercash">
|
427 |
+
<label>ExperCash (GP)</label>
|
428 |
+
<frontend_type>text</frontend_type>
|
429 |
+
<sort_order>0</sort_order>
|
430 |
+
<show_in_default>1</show_in_default>
|
431 |
+
<show_in_website>1</show_in_website>
|
432 |
+
<show_in_store>1</show_in_store>
|
433 |
+
<fields>
|
434 |
+
<active translate="label">
|
435 |
+
<label>Enabled</label>
|
436 |
+
<frontend_type>select</frontend_type>
|
437 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
438 |
+
<sort_order>1</sort_order>
|
439 |
+
<show_in_default>1</show_in_default>
|
440 |
+
<show_in_website>1</show_in_website>
|
441 |
+
<show_in_store>1</show_in_store>
|
442 |
+
</active>
|
443 |
+
<order_status translate="label">
|
444 |
+
<label>New order status</label>
|
445 |
+
<frontend_type>select</frontend_type>
|
446 |
+
<source_model>adminhtml/system_config_source_order_status</source_model>
|
447 |
+
<sort_order>2</sort_order>
|
448 |
+
<show_in_default>1</show_in_default>
|
449 |
+
<show_in_website>1</show_in_website>
|
450 |
+
<show_in_store>1</show_in_store>
|
451 |
+
</order_status>
|
452 |
+
<sort_order translate="label">
|
453 |
+
<label>Sort order</label>
|
454 |
+
<frontend_type>text</frontend_type>
|
455 |
+
<sort_order>3</sort_order>
|
456 |
+
<show_in_default>1</show_in_default>
|
457 |
+
<show_in_website>1</show_in_website>
|
458 |
+
<show_in_store>1</show_in_store>
|
459 |
+
</sort_order>
|
460 |
+
<title translate="label">
|
461 |
+
<label>Title</label>
|
462 |
+
<frontend_type>text</frontend_type>
|
463 |
+
<sort_order>5</sort_order>
|
464 |
+
<show_in_default>1</show_in_default>
|
465 |
+
<show_in_website>1</show_in_website>
|
466 |
+
<show_in_store>1</show_in_store>
|
467 |
+
</title>
|
468 |
+
<allowspecific translate="label">
|
469 |
+
<label>Payment to applicable countries</label>
|
470 |
+
<frontend_type>allowspecific</frontend_type>
|
471 |
+
<sort_order>6</sort_order>
|
472 |
+
<source_model>adminhtml/system_config_source_payment_allspecificcountries</source_model>
|
473 |
+
<show_in_default>1</show_in_default>
|
474 |
+
<show_in_website>1</show_in_website>
|
475 |
+
<show_in_store>1</show_in_store>
|
476 |
+
</allowspecific>
|
477 |
+
<specificcountry translate="label">
|
478 |
+
<label>Payment to Specific countries</label>
|
479 |
+
<frontend_type>multiselect</frontend_type>
|
480 |
+
<sort_order>7</sort_order>
|
481 |
+
<source_model>adminhtml/system_config_source_country</source_model>
|
482 |
+
<show_in_default>1</show_in_default>
|
483 |
+
<show_in_website>1</show_in_website>
|
484 |
+
<show_in_store>1</show_in_store>
|
485 |
+
</specificcountry>
|
486 |
+
<allowed_currency translate="label">
|
487 |
+
<label>Allowed Currencies</label>
|
488 |
+
<frontend_type>multiselect</frontend_type>
|
489 |
+
<source_model>adminhtml/system_config_source_locale_currency_all</source_model>
|
490 |
+
<sort_order>8</sort_order>
|
491 |
+
<show_in_default>1</show_in_default>
|
492 |
+
<show_in_website>1</show_in_website>
|
493 |
+
<show_in_store>1</show_in_store>
|
494 |
+
</allowed_currency>
|
495 |
+
<paymenttype translate="label">
|
496 |
+
<label>Paymenttype</label>
|
497 |
+
<frontend_type>select</frontend_type>
|
498 |
+
<sort_order>32</sort_order>
|
499 |
+
<source_model>expercash/source_paymenttypegp</source_model>
|
500 |
+
<show_in_default>1</show_in_default>
|
501 |
+
<show_in_website>1</show_in_website>
|
502 |
+
<show_in_store>1</show_in_store>
|
503 |
+
</paymenttype>
|
504 |
+
<createinvoice translate="label">
|
505 |
+
<label>Create Invoice at buy</label>
|
506 |
+
<frontend_type>select</frontend_type>
|
507 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
508 |
+
<sort_order>262144</sort_order>
|
509 |
+
<show_in_default>1</show_in_default>
|
510 |
+
<show_in_website>1</show_in_website>
|
511 |
+
<show_in_store>1</show_in_store>
|
512 |
+
</createinvoice>
|
513 |
+
<sendinvoicemail translate="label">
|
514 |
+
<label>send mail after automatic invoice creation</label>
|
515 |
+
<frontend_type>select</frontend_type>
|
516 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
517 |
+
<sort_order>262150</sort_order>
|
518 |
+
<show_in_default>1</show_in_default>
|
519 |
+
<show_in_website>1</show_in_website>
|
520 |
+
<show_in_store>1</show_in_store>
|
521 |
+
<depends>
|
522 |
+
<createinvoice>1</createinvoice>
|
523 |
+
</depends>
|
524 |
+
</sendinvoicemail>
|
525 |
+
</fields>
|
526 |
+
</expercashgp>
|
527 |
+
<expercashpc translate="label" module="expercash">
|
528 |
+
<label>ExperCash (PC)</label>
|
529 |
+
<frontend_type>text</frontend_type>
|
530 |
+
<sort_order>0</sort_order>
|
531 |
+
<show_in_default>1</show_in_default>
|
532 |
+
<show_in_website>1</show_in_website>
|
533 |
+
<show_in_store>1</show_in_store>
|
534 |
+
<fields>
|
535 |
+
<active translate="label">
|
536 |
+
<label>Enabled</label>
|
537 |
+
<frontend_type>select</frontend_type>
|
538 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
539 |
+
<sort_order>1</sort_order>
|
540 |
+
<show_in_default>1</show_in_default>
|
541 |
+
<show_in_website>1</show_in_website>
|
542 |
+
<show_in_store>1</show_in_store>
|
543 |
+
</active>
|
544 |
+
<order_status translate="label">
|
545 |
+
<label>New order status</label>
|
546 |
+
<frontend_type>select</frontend_type>
|
547 |
+
<source_model>adminhtml/system_config_source_order_status</source_model>
|
548 |
+
<sort_order>2</sort_order>
|
549 |
+
<show_in_default>1</show_in_default>
|
550 |
+
<show_in_website>1</show_in_website>
|
551 |
+
<show_in_store>1</show_in_store>
|
552 |
+
</order_status>
|
553 |
+
<sort_order translate="label">
|
554 |
+
<label>Sort order</label>
|
555 |
+
<frontend_type>text</frontend_type>
|
556 |
+
<sort_order>3</sort_order>
|
557 |
+
<show_in_default>1</show_in_default>
|
558 |
+
<show_in_website>1</show_in_website>
|
559 |
+
<show_in_store>1</show_in_store>
|
560 |
+
</sort_order>
|
561 |
+
<title translate="label">
|
562 |
+
<label>Title</label>
|
563 |
+
<frontend_type>text</frontend_type>
|
564 |
+
<sort_order>5</sort_order>
|
565 |
+
<show_in_default>1</show_in_default>
|
566 |
+
<show_in_website>1</show_in_website>
|
567 |
+
<show_in_store>1</show_in_store>
|
568 |
+
</title>
|
569 |
+
<createinvoice translate="label">
|
570 |
+
<label>Create Invoice when receipt of payment</label>
|
571 |
+
<frontend_type>select</frontend_type>
|
572 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
573 |
+
<sort_order>262144</sort_order>
|
574 |
+
<show_in_default>1</show_in_default>
|
575 |
+
<show_in_website>1</show_in_website>
|
576 |
+
<show_in_store>1</show_in_store>
|
577 |
+
</createinvoice>
|
578 |
+
<sendinvoicemail translate="label">
|
579 |
+
<label>send mail after automatic invoice creation</label>
|
580 |
+
<frontend_type>select</frontend_type>
|
581 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
582 |
+
<sort_order>262150</sort_order>
|
583 |
+
<show_in_default>1</show_in_default>
|
584 |
+
<show_in_website>1</show_in_website>
|
585 |
+
<show_in_store>1</show_in_store>
|
586 |
+
<depends>
|
587 |
+
<createinvoice>1</createinvoice>
|
588 |
+
</depends>
|
589 |
+
</sendinvoicemail>
|
590 |
+
</fields>
|
591 |
+
</expercashpc>
|
592 |
+
|
593 |
+
<expercashmp translate="label" module="expercash">
|
594 |
+
<label>ExperCash (Masterpass)</label>
|
595 |
+
<frontend_type>text</frontend_type>
|
596 |
+
<sort_order>-1</sort_order>
|
597 |
+
<show_in_default>1</show_in_default>
|
598 |
+
<show_in_website>1</show_in_website>
|
599 |
+
<show_in_store>1</show_in_store>
|
600 |
+
<fields>
|
601 |
+
<active translate="label">
|
602 |
+
<label>Enabled</label>
|
603 |
+
<frontend_type>select</frontend_type>
|
604 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
605 |
+
<sort_order>1</sort_order>
|
606 |
+
<show_in_default>1</show_in_default>
|
607 |
+
<show_in_website>1</show_in_website>
|
608 |
+
<show_in_store>1</show_in_store>
|
609 |
+
</active>
|
610 |
+
<order_status translate="label">
|
611 |
+
<label>New order status</label>
|
612 |
+
<frontend_type>select</frontend_type>
|
613 |
+
<source_model>adminhtml/system_config_source_order_status</source_model>
|
614 |
+
<sort_order>2</sort_order>
|
615 |
+
<show_in_default>1</show_in_default>
|
616 |
+
<show_in_website>1</show_in_website>
|
617 |
+
<show_in_store>1</show_in_store>
|
618 |
+
</order_status>
|
619 |
+
<sort_order translate="label">
|
620 |
+
<label>Sort order</label>
|
621 |
+
<frontend_type>text</frontend_type>
|
622 |
+
<sort_order>3</sort_order>
|
623 |
+
<show_in_default>1</show_in_default>
|
624 |
+
<show_in_website>1</show_in_website>
|
625 |
+
<show_in_store>1</show_in_store>
|
626 |
+
</sort_order>
|
627 |
+
<title translate="label">
|
628 |
+
<label>Title</label>
|
629 |
+
<frontend_type>text</frontend_type>
|
630 |
+
<sort_order>5</sort_order>
|
631 |
+
<show_in_default>1</show_in_default>
|
632 |
+
<show_in_website>1</show_in_website>
|
633 |
+
<show_in_store>1</show_in_store>
|
634 |
+
</title>
|
635 |
+
<show_logo translate="label">
|
636 |
+
<label>Show Logo</label>
|
637 |
+
<comment>Show Masterpass Logo for Payment Method.</comment>
|
638 |
+
<frontend_type>select</frontend_type>
|
639 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
640 |
+
<sort_order>262150</sort_order>
|
641 |
+
<show_in_default>1</show_in_default>
|
642 |
+
<show_in_website>1</show_in_website>
|
643 |
+
<show_in_store>1</show_in_store>
|
644 |
+
</show_logo>
|
645 |
+
<allowspecific translate="label">
|
646 |
+
<label>Payment to applicable countries</label>
|
647 |
+
<frontend_type>allowspecific</frontend_type>
|
648 |
+
<sort_order>6</sort_order>
|
649 |
+
<source_model>adminhtml/system_config_source_payment_allspecificcountries</source_model>
|
650 |
+
<show_in_default>1</show_in_default>
|
651 |
+
<show_in_website>1</show_in_website>
|
652 |
+
<show_in_store>1</show_in_store>
|
653 |
+
</allowspecific>
|
654 |
+
<specificcountry translate="label">
|
655 |
+
<label>Payment to Specific countries</label>
|
656 |
+
<frontend_type>multiselect</frontend_type>
|
657 |
+
<sort_order>7</sort_order>
|
658 |
+
<source_model>adminhtml/system_config_source_country</source_model>
|
659 |
+
<show_in_default>1</show_in_default>
|
660 |
+
<show_in_website>1</show_in_website>
|
661 |
+
<show_in_store>1</show_in_store>
|
662 |
+
</specificcountry>
|
663 |
+
<allowed_currency translate="label">
|
664 |
+
<label>Allowed Currencies</label>
|
665 |
+
<frontend_type>multiselect</frontend_type>
|
666 |
+
<source_model>adminhtml/system_config_source_locale_currency_all</source_model>
|
667 |
+
<sort_order>8</sort_order>
|
668 |
+
<show_in_default>1</show_in_default>
|
669 |
+
<show_in_website>1</show_in_website>
|
670 |
+
<show_in_store>1</show_in_store>
|
671 |
+
</allowed_currency>
|
672 |
+
<paymenttype translate="label">
|
673 |
+
<label>Paymenttype</label>
|
674 |
+
<frontend_type>select</frontend_type>
|
675 |
+
<sort_order>32</sort_order>
|
676 |
+
<source_model>expercash/source_paymenttypemp</source_model>
|
677 |
+
<show_in_default>1</show_in_default>
|
678 |
+
<show_in_website>1</show_in_website>
|
679 |
+
<show_in_store>1</show_in_store>
|
680 |
+
</paymenttype>
|
681 |
+
<createinvoice translate="label">
|
682 |
+
<label>Create Invoice at buy</label>
|
683 |
+
<frontend_type>select</frontend_type>
|
684 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
685 |
+
<sort_order>262144</sort_order>
|
686 |
+
<show_in_default>1</show_in_default>
|
687 |
+
<show_in_website>1</show_in_website>
|
688 |
+
<show_in_store>1</show_in_store>
|
689 |
+
<depends>
|
690 |
+
<paymenttype>masterpass_buy</paymenttype>
|
691 |
+
</depends>
|
692 |
+
</createinvoice>
|
693 |
+
<sendinvoicemail translate="label">
|
694 |
+
<label>send mail after automatic invoice creation</label>
|
695 |
+
<frontend_type>select</frontend_type>
|
696 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
697 |
+
<sort_order>262150</sort_order>
|
698 |
+
<show_in_default>1</show_in_default>
|
699 |
+
<show_in_website>1</show_in_website>
|
700 |
+
<show_in_store>1</show_in_store>
|
701 |
+
<depends>
|
702 |
+
<paymenttype>masterpass_buy</paymenttype>
|
703 |
+
<createinvoice>1</createinvoice>
|
704 |
+
</depends>
|
705 |
+
</sendinvoicemail>
|
706 |
+
</fields>
|
707 |
+
</expercashmp>
|
708 |
+
|
709 |
+
<expercashmpf translate="label" module="expercash">
|
710 |
+
<label>ExperCash (Masterpass Full Checkout)</label>
|
711 |
+
<frontend_type>text</frontend_type>
|
712 |
+
<sort_order>-1</sort_order>
|
713 |
+
<show_in_default>1</show_in_default>
|
714 |
+
<show_in_website>1</show_in_website>
|
715 |
+
<show_in_store>1</show_in_store>
|
716 |
+
<fields>
|
717 |
+
<active translate="label">
|
718 |
+
<label>Enabled</label>
|
719 |
+
<frontend_type>select</frontend_type>
|
720 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
721 |
+
<sort_order>10</sort_order>
|
722 |
+
<show_in_default>1</show_in_default>
|
723 |
+
<show_in_website>1</show_in_website>
|
724 |
+
<show_in_store>1</show_in_store>
|
725 |
+
</active>
|
726 |
+
<order_status translate="label">
|
727 |
+
<label>New order status</label>
|
728 |
+
<frontend_type>select</frontend_type>
|
729 |
+
<source_model>adminhtml/system_config_source_order_status</source_model>
|
730 |
+
<sort_order>15</sort_order>
|
731 |
+
<show_in_default>1</show_in_default>
|
732 |
+
<show_in_website>1</show_in_website>
|
733 |
+
<show_in_store>1</show_in_store>
|
734 |
+
</order_status>
|
735 |
+
<sort_order translate="label">
|
736 |
+
<label>Sort order</label>
|
737 |
+
<frontend_type>text</frontend_type>
|
738 |
+
<sort_order>20</sort_order>
|
739 |
+
<show_in_default>1</show_in_default>
|
740 |
+
<show_in_website>1</show_in_website>
|
741 |
+
<show_in_store>1</show_in_store>
|
742 |
+
</sort_order>
|
743 |
+
<title translate="label">
|
744 |
+
<label>Title</label>
|
745 |
+
<frontend_type>text</frontend_type>
|
746 |
+
<sort_order>30</sort_order>
|
747 |
+
<show_in_default>1</show_in_default>
|
748 |
+
<show_in_website>1</show_in_website>
|
749 |
+
<show_in_store>1</show_in_store>
|
750 |
+
</title>
|
751 |
+
<allowspecific translate="label">
|
752 |
+
<label>Payment from Applicable Countries</label>
|
753 |
+
<frontend_type>allowspecific</frontend_type>
|
754 |
+
<sort_order>40</sort_order>
|
755 |
+
<source_model>adminhtml/system_config_source_payment_allspecificcountries</source_model>
|
756 |
+
<show_in_default>1</show_in_default>
|
757 |
+
<show_in_website>1</show_in_website>
|
758 |
+
<show_in_store>1</show_in_store>
|
759 |
+
</allowspecific>
|
760 |
+
<specificcountry translate="label">
|
761 |
+
<label>Payment from Specific Countries</label>
|
762 |
+
<frontend_type>multiselect</frontend_type>
|
763 |
+
<sort_order>50</sort_order>
|
764 |
+
<source_model>adminhtml/system_config_source_country</source_model>
|
765 |
+
<show_in_default>1</show_in_default>
|
766 |
+
<show_in_website>1</show_in_website>
|
767 |
+
<show_in_store>1</show_in_store>
|
768 |
+
</specificcountry>
|
769 |
+
<allowed_currency translate="label">
|
770 |
+
<label>Allowed Currencies</label>
|
771 |
+
<frontend_type>multiselect</frontend_type>
|
772 |
+
<source_model>adminhtml/system_config_source_locale_currency_all</source_model>
|
773 |
+
<sort_order>60</sort_order>
|
774 |
+
<show_in_default>1</show_in_default>
|
775 |
+
<show_in_website>1</show_in_website>
|
776 |
+
<show_in_store>1</show_in_store>
|
777 |
+
</allowed_currency>
|
778 |
+
<show_button_in_cart translate="label,comment">
|
779 |
+
<label>Show Button in Cart</label>
|
780 |
+
<comment>Show "Buy with Masterpass" Button in Cart</comment>
|
781 |
+
<frontend_type>select</frontend_type>
|
782 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
783 |
+
<sort_order>70</sort_order>
|
784 |
+
<show_in_default>1</show_in_default>
|
785 |
+
<show_in_website>1</show_in_website>
|
786 |
+
<show_in_store>1</show_in_store>
|
787 |
+
</show_button_in_cart>
|
788 |
+
<show_button_in_mini_cart translate="label,comment">
|
789 |
+
<label>Show Button in Mini Cart</label>
|
790 |
+
<comment>Show "Buy with Masterpass" in Mini Cart</comment>
|
791 |
+
<frontend_type>select</frontend_type>
|
792 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
793 |
+
<sort_order>80</sort_order>
|
794 |
+
<show_in_default>1</show_in_default>
|
795 |
+
<show_in_website>1</show_in_website>
|
796 |
+
<show_in_store>1</show_in_store>
|
797 |
+
</show_button_in_mini_cart>
|
798 |
+
<show_checkout_text translate="label,comment">
|
799 |
+
<label>Show Button in Checkout</label>
|
800 |
+
<comment>Show "Buy with Masterpass" in Checkout</comment>
|
801 |
+
<frontend_type>select</frontend_type>
|
802 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
803 |
+
<sort_order>90</sort_order>
|
804 |
+
<show_in_default>1</show_in_default>
|
805 |
+
<show_in_website>1</show_in_website>
|
806 |
+
<show_in_store>1</show_in_store>
|
807 |
+
</show_checkout_text>
|
808 |
+
<checkout_text translate="label">
|
809 |
+
<label>Additional Checkout Info</label>
|
810 |
+
<comment>A custom text can be displayed in checkout to promote Masterpass Full Checkout.</comment>
|
811 |
+
<frontend_type>textarea</frontend_type>
|
812 |
+
<sort_order>95</sort_order>
|
813 |
+
<show_in_default>1</show_in_default>
|
814 |
+
<show_in_website>1</show_in_website>
|
815 |
+
<show_in_store>1</show_in_store>
|
816 |
+
<depends>
|
817 |
+
<show_checkout_text>1</show_checkout_text>
|
818 |
+
</depends>
|
819 |
+
</checkout_text>
|
820 |
+
<show_learn_more_link translate="label,comment">
|
821 |
+
<label>Show Link</label>
|
822 |
+
<comment>Show "Learn More" Link" next to logo.</comment>
|
823 |
+
<frontend_type>select</frontend_type>
|
824 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
825 |
+
<sort_order>100</sort_order>
|
826 |
+
<show_in_default>1</show_in_default>
|
827 |
+
<show_in_website>1</show_in_website>
|
828 |
+
<show_in_store>1</show_in_store>
|
829 |
+
</show_learn_more_link>
|
830 |
+
<show_creditcard_data_in_checkout translate="label,comment">
|
831 |
+
<label>Display Credit Card Data in Checkout</label>
|
832 |
+
<comment>If set to "Yes", masked credit card data will be displayed in the payment step.</comment>
|
833 |
+
<frontend_type>select</frontend_type>
|
834 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
835 |
+
<sort_order>110</sort_order>
|
836 |
+
<show_in_default>1</show_in_default>
|
837 |
+
<show_in_website>1</show_in_website>
|
838 |
+
<show_in_store>1</show_in_store>
|
839 |
+
</show_creditcard_data_in_checkout>
|
840 |
+
<payment_action translate="label,comment">
|
841 |
+
<label>Create Invoice at buy</label>
|
842 |
+
<comment>Enabled = Directsale / Disabled = authorization</comment>
|
843 |
+
<frontend_type>select</frontend_type>
|
844 |
+
<sort_order>120</sort_order>
|
845 |
+
<source_model>expercash/source_paymenttypempf</source_model>
|
846 |
+
<show_in_default>1</show_in_default>
|
847 |
+
<show_in_website>1</show_in_website>
|
848 |
+
<show_in_store>1</show_in_store>
|
849 |
+
</payment_action>
|
850 |
+
</fields>
|
851 |
+
</expercashmpf>
|
852 |
+
|
853 |
+
<!--move paypal notice to top-->
|
854 |
+
<paypal_notice translate="label" module="paypal">
|
855 |
+
<sort_order>-100</sort_order>
|
856 |
+
</paypal_notice>
|
857 |
+
|
858 |
+
</groups>
|
859 |
+
</payment>
|
860 |
+
</sections>
|
861 |
+
</config>
|
app/code/community/Expercash/Expercash/sql/expercash_setup/mysql4-install-1.0.0.php
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
$installer = $this;
|
24 |
+
$installer->startSetup();
|
25 |
+
$installer->installEntities();
|
26 |
+
|
27 |
+
if (Mage::getVersion() >= 1.1) {
|
28 |
+
$installer->startSetup();
|
29 |
+
$installer->getConnection()->addColumn(
|
30 |
+
$installer->getTable('sales_flat_quote_payment'),
|
31 |
+
'expercash_gutid', 'VARCHAR(255) NOT NULL'
|
32 |
+
);
|
33 |
+
$installer->getConnection()->addColumn(
|
34 |
+
$installer->getTable('sales_flat_quote_payment'),
|
35 |
+
'expercash_transaction_id', 'VARCHAR(255) NOT NULL'
|
36 |
+
);
|
37 |
+
$installer->getConnection()->addColumn(
|
38 |
+
$installer->getTable('sales_flat_quote_payment'),
|
39 |
+
'expercash_gutid_capture', 'VARCHAR(255) NOT NULL'
|
40 |
+
);
|
41 |
+
$installer->getConnection()->addColumn(
|
42 |
+
$installer->getTable('sales_flat_quote_payment'),
|
43 |
+
'expercash_paymenttype', 'VARCHAR(255) NOT NULL'
|
44 |
+
);
|
45 |
+
$installer->getConnection()->addColumn(
|
46 |
+
$installer->getTable('sales_flat_quote_payment'),
|
47 |
+
'expercash_epi_payment_id', 'VARCHAR(255) NOT NULL'
|
48 |
+
);
|
49 |
+
$installer->getConnection()->addColumn(
|
50 |
+
$installer->getTable('sales_flat_quote_payment'),
|
51 |
+
'expercash_request_type', 'VARCHAR(255) NOT NULL'
|
52 |
+
);
|
53 |
+
$installer->endSetup();
|
54 |
+
}
|
55 |
+
|
56 |
+
$installer->endSetup();
|
app/design/adminhtml/default/default/template/expercash/info/expercash.phtml
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!--
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
-->
|
24 |
+
<strong><?php print Mage::helper('expercash')->__('Paymentinformations ExperCash') ?></strong>
|
25 |
+
<br />
|
26 |
+
<?php if ($this->getExperCashInfo('expercash_gutid')): ?>
|
27 |
+
<?php echo Mage::helper('expercash')->__('Transaction Id at ExperCash: %s', $this->getExperCashInfo('expercash_gutid')) ?><br />
|
28 |
+
<?php endif; ?>
|
29 |
+
|
30 |
+
<?php if (!$this->getExperCashInfo('expercash_request_type')): ?>
|
31 |
+
<?php echo Mage::helper('expercash')->__('Payment type at ExperCash: %s', $this->getExperCashInfo('expercash_request_type')) ?><br />
|
32 |
+
<?php endif; ?>
|
33 |
+
|
34 |
+
<?php if ($this->getExperCashInfo('expercash_gutid_capture')): ?>
|
35 |
+
<?php echo Mage::helper('expercash')->__('Transaction Id for Capture/Buy at ExperCash: %s', $this->getExperCashInfo('expercash_gutid_capture')) ?><br />
|
36 |
+
<?php endif; ?>
|
37 |
+
|
38 |
+
<?php if ($this->getExperCashInfo('expercash_epi_payment_id')): ?>
|
39 |
+
<?php echo Mage::helper('expercash')->__('Epi Payment Id/Pay-ID for Capture/Buy at ExperCash: %s', $this->getExperCashInfo('expercash_epi_payment_id')) ?><br />
|
40 |
+
<?php endif; ?>
|
41 |
+
|
42 |
+
<?php echo Mage::helper('expercash')->__('Paymenttype: %s', Mage::helper('expercash')->__($this->getExperCashInfo('expercash_paymenttype'))) ?><br />
|
43 |
+
|
44 |
+
<!-- show additional payment info if they exist -->
|
45 |
+
<?php foreach (Mage::helper('expercash')->getAdditionalPaymentParams() as $key): ?>
|
46 |
+
<?php if ($this->getInfo()->hasAdditionalInformation($key)): ?>
|
47 |
+
<?php if ($key === '3dsStatus') : ?>
|
48 |
+
<?php echo Mage::helper('expercash')->__($key . ': %s', Mage::helper('expercash')->__('3dsecureValue_' . $this->getInfo()->getAdditionalInformation($key)))?> <br />
|
49 |
+
<?php else: ?>
|
50 |
+
<?php echo Mage::helper('expercash')->__($key . ': %s', $this->getInfo()->getAdditionalInformation($key)) ?> <br />
|
51 |
+
<?php endif ?>
|
52 |
+
<?php endif; ?>
|
53 |
+
<?php endforeach; ?>
|
app/design/adminhtml/default/default/template/expercash/info/pdf/expercash.phtml
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
?>
|
23 |
+
<?php echo $this->getMethod()->getTitle() ?>
|
app/design/frontend/base/default/layout/expercash.xml
ADDED
@@ -0,0 +1,121 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
-->
|
24 |
+
<layout version="0.1.0">
|
25 |
+
|
26 |
+
<default>
|
27 |
+
<reference name="cart_sidebar.extra_actions">">
|
28 |
+
<block type="expercash/masterpass_fullcheckout_shortcut"
|
29 |
+
name="expercash.masterpass.mini_cart.shortcut"
|
30 |
+
template="expercash/masterpass/fullcheckout/shortcut.phtml"/>
|
31 |
+
</reference>
|
32 |
+
</default>
|
33 |
+
|
34 |
+
<expercash_expercash_index>
|
35 |
+
<reference name="root">
|
36 |
+
<action method="setTemplate">
|
37 |
+
<template>page/1column.phtml</template>
|
38 |
+
</action>
|
39 |
+
<action method="setHeaderTitle" translate="title" module="expercash">
|
40 |
+
<title>Payment</title>
|
41 |
+
</action>
|
42 |
+
</reference>
|
43 |
+
<reference name="content">
|
44 |
+
<block type="expercash/expercash" name="expercash" template="expercash/expercash.phtml"/>
|
45 |
+
</reference>
|
46 |
+
</expercash_expercash_index>
|
47 |
+
|
48 |
+
<expercash_expercash_error>
|
49 |
+
<reference name="root">
|
50 |
+
<action method="setTemplate">
|
51 |
+
<template>page/1column.phtml</template>
|
52 |
+
</action>
|
53 |
+
<action method="setHeaderTitle" translate="title" module="expercash">
|
54 |
+
<title>Payment Error</title>
|
55 |
+
</action>
|
56 |
+
</reference>
|
57 |
+
<reference name="content">
|
58 |
+
<block type="expercash/expercash" name="expercash" template="expercash/expercasherror.phtml"/>
|
59 |
+
</reference>
|
60 |
+
</expercash_expercash_error>
|
61 |
+
|
62 |
+
<checkout_cart_index>
|
63 |
+
<reference name="head">
|
64 |
+
<action method="addItem">
|
65 |
+
<type>skin_css</type>
|
66 |
+
<file>css/expercash.css</file>
|
67 |
+
</action>
|
68 |
+
</reference>
|
69 |
+
<reference name="topCart.extra_actions">
|
70 |
+
<block type="expercash/masterpass_fullcheckout_shortcut"
|
71 |
+
name="expercash.masterpass.top_cart.shortcut"
|
72 |
+
template="expercash/masterpass/fullcheckout/shortcut.phtml"/>
|
73 |
+
</reference>
|
74 |
+
<reference name="cart_sidebar.extra_actions">
|
75 |
+
<block type="expercash/masterpass_fullcheckout_shortcut" name="expercash.cart_sidebar.shortcut"
|
76 |
+
template="expercash/masterpass/fullcheckout/shortcut.phtml"/>
|
77 |
+
</reference>
|
78 |
+
<reference name="checkout.cart.top_methods">
|
79 |
+
<block type="expercash/masterpass_fullcheckout_shortcut"
|
80 |
+
name="checkout.cart.methods.masterpass_fullcheckout.top" before="-"
|
81 |
+
template="expercash/masterpass/fullcheckout/shortcut.phtml">
|
82 |
+
<action method="setIsQuoteAllowed">
|
83 |
+
<value>1</value>
|
84 |
+
</action>
|
85 |
+
</block>
|
86 |
+
</reference>
|
87 |
+
<reference name="checkout.cart.methods">
|
88 |
+
<block type="expercash/masterpass_fullcheckout_shortcut"
|
89 |
+
name="checkout.cart.methods.masterpass_fullcheckout.bottom" before="-"
|
90 |
+
template="expercash/masterpass/fullcheckout/shortcut.phtml">
|
91 |
+
<action method="setIsQuoteAllowed">
|
92 |
+
<value>1</value>
|
93 |
+
</action>
|
94 |
+
</block>
|
95 |
+
</reference>
|
96 |
+
</checkout_cart_index>
|
97 |
+
|
98 |
+
<checkout_onepage_index>
|
99 |
+
<reference name="head">
|
100 |
+
<action method="addItem">
|
101 |
+
<type>skin_css</type>
|
102 |
+
<file>css/expercash.css</file>
|
103 |
+
</action>
|
104 |
+
</reference>
|
105 |
+
<reference name="checkout.onepage">
|
106 |
+
<action method="setTemplate">
|
107 |
+
<template helper="expercash/masterpass/getOpcTemplate"/>
|
108 |
+
</action>
|
109 |
+
<block type="core/template" name="checkout.onepage.js"
|
110 |
+
template="expercash/checkout/onepage/js.phtml"/>
|
111 |
+
</reference>
|
112 |
+
<reference name="checkout.payment.methods">
|
113 |
+
<block type="core/template" name="payment.method.expercashmp"
|
114 |
+
template="expercash/payment/logo/logo.phtml"/>
|
115 |
+
</reference>
|
116 |
+
<reference name="checkout.onepage.login.before">
|
117 |
+
<block type="expercash/masterpass_fullcheckout_shortcut" name="expercash.masterpass.login.shortcut"
|
118 |
+
template="expercash/masterpass/fullcheckout/checkout.phtml"/>
|
119 |
+
</reference>
|
120 |
+
</checkout_onepage_index>
|
121 |
+
</layout>
|
app/design/frontend/base/default/template/expercash/checkout/ce15/onepage.phtml
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
?>
|
23 |
+
<script type="text/javascript" src="<?php echo $this->getJsUrl('varien/accordion.js') ?>"></script>
|
24 |
+
<script type="text/javascript" src="<?php echo $this->getSkinUrl('js/opcheckout.js') ?>"></script>
|
25 |
+
<script type="text/javascript" src="<?php echo $this->getSkinUrl('js/expercashopc.js') ?>"></script>
|
26 |
+
<script type="text/javascript">countryRegions = <?php echo $this->helper('directory')->getRegionJson() ?></script>
|
27 |
+
|
28 |
+
<ol id="checkoutSteps" class="one-page-checkout">
|
29 |
+
<?php $i = 0;
|
30 |
+
foreach ($this->getSteps() as $_stepId => $_stepInfo): ?>
|
31 |
+
<?php if (!$this->getChild($_stepId) || !$this->getChild($_stepId)->isShow()): continue; endif;
|
32 |
+
$i++ ?>
|
33 |
+
<li id="opc-<?php echo $_stepId ?>" class="section <?php echo !empty($_stepInfo['allow']) ? 'allow'
|
34 |
+
: '' ?> <?php echo !empty($_stepInfo['complete']) ? 'saved' : '' ?>">
|
35 |
+
<div class="head">
|
36 |
+
<h3><span class="step-count"><?php echo $i ?></span> <?php echo $_stepInfo['label'] ?></h3><a
|
37 |
+
href="#"><?php echo $this->__('Edit') ?></a>
|
38 |
+
</div>
|
39 |
+
<div id="checkout-step-<?php echo $_stepId ?>"
|
40 |
+
class="box<?php if ($_stepId == 'shipping_method'): ?>-no-padding<?php endif; ?> a-item"
|
41 |
+
style="display:none;">
|
42 |
+
<?php echo $this->getChildHtml($_stepId) ?>
|
43 |
+
</div>
|
44 |
+
</li>
|
45 |
+
<?php endforeach ?>
|
46 |
+
</ol>
|
47 |
+
<?php echo $this->getChildHtml('checkout.onepage.js') ?>
|
48 |
+
|
49 |
+
|
app/design/frontend/base/default/template/expercash/checkout/onepage.phtml
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
?>
|
23 |
+
<div class="page-title">
|
24 |
+
<h1><?php echo $this->__('Checkout') ?></h1>
|
25 |
+
</div>
|
26 |
+
<script type="text/javascript" src="<?php echo $this->getJsUrl('varien/accordion.js') ?>"></script>
|
27 |
+
<script type="text/javascript" src="<?php echo $this->getSkinUrl('js/opcheckout.js') ?>"></script>
|
28 |
+
<script type="text/javascript" src="<?php echo $this->getSkinUrl('js/expercashopc.js') ?>"></script>
|
29 |
+
|
30 |
+
|
31 |
+
<?php if (Mage::getModel('expercash/directory_region')->isLegacyInstallation()): ?>
|
32 |
+
<script type="text/javascript">countryRegions = <?php echo $this->helper('directory')->getRegionJson() ?></script>
|
33 |
+
<?php endif; ?>
|
34 |
+
|
35 |
+
|
36 |
+
<ol class="opc" id="checkoutSteps">
|
37 |
+
<?php $i = 0;
|
38 |
+
foreach ($this->getSteps() as $_stepId => $_stepInfo): ?>
|
39 |
+
<?php if (!$this->getChild($_stepId) || !$this->getChild($_stepId)->isShow()): continue;
|
40 |
+
endif;
|
41 |
+
$i++ ?>
|
42 |
+
<li id="opc-<?php echo $_stepId ?>"
|
43 |
+
class="section<?php echo !empty($_stepInfo['allow'])?' allow':'' ?><?php echo !empty($_stepInfo['complete'])?' saved':'' ?>">
|
44 |
+
<div class="step-title">
|
45 |
+
<span class="number"><?php echo $i ?></span>
|
46 |
+
|
47 |
+
<h2><?php echo $_stepInfo['label'] ?></h2>
|
48 |
+
<a href="#"><?php echo $this->__('Edit') ?></a>
|
49 |
+
</div>
|
50 |
+
<div id="checkout-step-<?php echo $_stepId ?>" class="step a-item" style="display:none;">
|
51 |
+
<?php echo $this->getChildHtml($_stepId) ?>
|
52 |
+
</div>
|
53 |
+
</li>
|
54 |
+
<?php endforeach ?>
|
55 |
+
</ol>
|
56 |
+
<?php echo $this->getChildHtml('checkout.onepage.js') ?>
|
app/design/frontend/base/default/template/expercash/checkout/onepage/js.phtml
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
?>
|
23 |
+
<script type="text/javascript">
|
24 |
+
//<![CDATA[
|
25 |
+
var accordion = new Accordion('checkoutSteps', '.step-title', true);
|
26 |
+
var checkout = new ExpercashOpc(accordion, {
|
27 |
+
progress: '<?php echo $this->getUrl('checkout/onepage/progress') ?>',
|
28 |
+
review: '<?php echo $this->getUrl('checkout/onepage/review') ?>',
|
29 |
+
saveMethod: '<?php echo $this->getUrl('checkout/onepage/saveMethod') ?>',
|
30 |
+
failure: '<?php echo $this->getUrl('checkout/cart') ?>',
|
31 |
+
addresses: '<?php echo $this->getUrl('expercash/checkout_onepage/addresses') ?>',
|
32 |
+
shippingMethods: '<?php echo $this->getUrl('expercash/checkout_onepage/shippingMethods') ?>',
|
33 |
+
validateAddresses: '<?php echo $this->getUrl('expercash/checkout_onepage/validateAddresses') ?>'
|
34 |
+
});
|
35 |
+
|
36 |
+
|
37 |
+
checkout.setGuestCheckout();
|
38 |
+
checkout.fetchAddresses();
|
39 |
+
//]]>
|
40 |
+
</script>
|
app/design/frontend/base/default/template/expercash/expercash.phtml
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
?>
|
24 |
+
<h1><?php echo $this->__('Payment') ?></h1>
|
25 |
+
<iframe src="<?php echo $this->getIframeUrl(); ?>" id="expercashiframe" class="<?php echo $this->getIframeCssClass(); ?>" name="expercashiframe" width="<?php echo $this->getIframeWidth(); ?>" height="<?php echo $this->getIframeHeight(); ?>" style="border: 0px;"></iframe>
|
app/design/frontend/base/default/template/expercash/expercasherror.phtml
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
?>
|
23 |
+
<h1><?php echo $this->__('Error!') ?></h1>
|
24 |
+
<p><?php echo $this->__('Errormessage!') ?></p>
|
25 |
+
<br />
|
26 |
+
<p><a href="<?php echo $this->getUrl('checkout/onepage', array('_secure' => true)); ?>" target="_top"><?php echo Mage::helper('expercash')->__('Select alternative payment method') ?></a></p>
|
app/design/frontend/base/default/template/expercash/form/expercashiframe.phtml
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
?>
|
23 |
+
<?php $_code = $this->getMethodCode() ?>
|
24 |
+
<div style="display:none;" id="payment_form_<?php echo $_code?>">
|
25 |
+
<?php echo $this->__('You will be redirected to our paymentprovider after the checkout'); ?>
|
26 |
+
</div>
|
app/design/frontend/base/default/template/expercash/info/expercash.phtml
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
?>
|
23 |
+
<p>
|
24 |
+
<?php echo $this->getMethod()->getTitle() ?></p>
|
app/design/frontend/base/default/template/expercash/info/pdf/expercash.phtml
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
?>
|
23 |
+
<?php echo $this->getMethod()->getTitle() ?>
|
app/design/frontend/base/default/template/expercash/masterpass/fullcheckout/checkout.phtml
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
?>
|
23 |
+
<?php
|
24 |
+
/**
|
25 |
+
* @var $this Expercash_Expercash_Block_Masterpass_Fullcheckout_Shortcut
|
26 |
+
*/
|
27 |
+
?>
|
28 |
+
|
29 |
+
<?php if ($this->getMasterpassConfig()->isShowCheckoutTextEnabled()): ?>
|
30 |
+
<?php $showMoreLink = $this->getLearnMoreLink() ?>
|
31 |
+
<div class="masterpass-checkout">
|
32 |
+
<h3>
|
33 |
+
<?php echo $this->__('Pay with Masterpass') ?>
|
34 |
+
</h3>
|
35 |
+
|
36 |
+
<p class="masterpass-info">
|
37 |
+
<?php echo $this->__($this->getMasterpassConfig()->getCheckoutText()); ?>
|
38 |
+
</p>
|
39 |
+
|
40 |
+
<div class="masterpass-checkout-wrapper">
|
41 |
+
<div class="masterpass-checkout-right">
|
42 |
+
<div class="masterpass_checkout-logo">
|
43 |
+
<a class="masterpass-logo" href="<?php echo $this->getCheckoutUrl() ?>">
|
44 |
+
<img src="<?php echo $this->getImageUrl() ?>"
|
45 |
+
alt="<?php echo $this->__('Checkout with Masterpass'); ?>"
|
46 |
+
title="<?php echo $this->__('Checkout with Masterpass'); ?>"/>
|
47 |
+
</a>
|
48 |
+
<?php if ($showMoreLink): ?>
|
49 |
+
<div class="masterpass-checkout-link">
|
50 |
+
<a class="learn_more_link" href="<?php echo $showMoreLink ?>"
|
51 |
+
onclick="javascript:window.open('<?php echo $showMoreLink ?>',
|
52 |
+
'olcwhatismasterpass','toolbar=no, location=no, ' +
|
53 |
+
'directories=no, status=no, menubar=no, scrollbars=yes,' +
|
54 |
+
' resizable=yes, ,left=0, top=0, width=400, height=350');
|
55 |
+
return false;"><?php echo $this->__('Learn more...') ?></a>
|
56 |
+
</div>
|
57 |
+
<?php endif; ?>
|
58 |
+
</div>
|
59 |
+
</div>
|
60 |
+
</div>
|
61 |
+
</div>
|
62 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/expercash/masterpass/fullcheckout/shortcut.phtml
ADDED
@@ -0,0 +1,119 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
?>
|
23 |
+
<?php
|
24 |
+
/**
|
25 |
+
* @var $this Expercash_Expercash_Block_Masterpass_Fullcheckout_Shortcut
|
26 |
+
*/
|
27 |
+
?>
|
28 |
+
|
29 |
+
<?php $showMoreLink = $this->getLearnMoreLink() ?>
|
30 |
+
|
31 |
+
<!-- button top -->
|
32 |
+
<?php if ($this->isCartTop()): ?>
|
33 |
+
<div class="masterpass-wrapper">
|
34 |
+
<div class="masterpass-fullcheckout">
|
35 |
+
<p class="masterpass-logo">
|
36 |
+
<?php $shortcutHtmlId = $this->getShortcutHtmlId() ?>
|
37 |
+
<a href="<?php echo $this->getCheckoutUrl() ?>">
|
38 |
+
<img src="<?php echo $this->getImageUrl() ?>"
|
39 |
+
alt="<?php echo $this->__('Checkout with Masterpass'); ?>"
|
40 |
+
title="<?php echo $this->__('Checkout with Masterpass'); ?>"/>
|
41 |
+
</a>
|
42 |
+
</p>
|
43 |
+
</div>
|
44 |
+
<div class="masterpass-or-top">
|
45 |
+
<span>
|
46 |
+
<?php echo Mage::helper('expercash/data')->__('-OR-') ?>
|
47 |
+
</span>
|
48 |
+
</div>
|
49 |
+
</div>
|
50 |
+
<?php endif; ?>
|
51 |
+
|
52 |
+
<!-- button bottom -->
|
53 |
+
<?php if ($this->isCartBottom()): ?>
|
54 |
+
<div class="masterpass-wrapper-bottom">
|
55 |
+
<div class="masterpass-fullcheckout-bottom">
|
56 |
+
<p class="masterpass-logo">
|
57 |
+
<?php $shortcutHtmlId = $this->getShortcutHtmlId() ?>
|
58 |
+
<a href="<?php echo $this->getCheckoutUrl() ?>">
|
59 |
+
<img src="<?php echo $this->getImageUrl() ?>"
|
60 |
+
alt="<?php echo $this->__('Checkout with Masterpass'); ?>"
|
61 |
+
title="<?php echo $this->__('Checkout with Masterpass'); ?>"/>
|
62 |
+
</a>
|
63 |
+
</p>
|
64 |
+
|
65 |
+
<?php if ($showMoreLink): ?>
|
66 |
+
<p class="masterpass-link">
|
67 |
+
<a href="<?php echo $showMoreLink ?>"
|
68 |
+
onclick="javascript:window.open('<?php echo $showMoreLink ?>',
|
69 |
+
'olcwhatismasterpass','toolbar=no, location=no, ' +
|
70 |
+
'directories=no, status=no, menubar=no, scrollbars=yes,' +
|
71 |
+
' resizable=yes, ,left=0, top=0, width=400, height=350');
|
72 |
+
return false;">
|
73 |
+
<?php echo $this->__('Learn more...') ?>
|
74 |
+
</a>
|
75 |
+
</p>
|
76 |
+
<?php endif; ?>
|
77 |
+
</div>
|
78 |
+
|
79 |
+
<div class="masterpass-or-bottom or-divider">
|
80 |
+
<span> <?php echo Mage::helper('expercash/data')->__('-OR-') ?> </span>
|
81 |
+
</div>
|
82 |
+
|
83 |
+
</div>
|
84 |
+
<?php endif; ?>
|
85 |
+
|
86 |
+
|
87 |
+
<!-- button bottom -->
|
88 |
+
<?php if ( $this->isMiniCart() === true): ?>
|
89 |
+
<div class="masterpass-wrapper-mini-cart">
|
90 |
+
<div class="masterpass-fullcheckout-mini-cart">
|
91 |
+
<p class="masterpass-logo">
|
92 |
+
<?php $shortcutHtmlId = $this->getShortcutHtmlId() ?>
|
93 |
+
<a href="<?php echo $this->getCheckoutUrl() ?>">
|
94 |
+
<img src="<?php echo $this->getImageUrl() ?>"
|
95 |
+
alt="<?php echo $this->__('Checkout with Masterpass'); ?>"
|
96 |
+
title="<?php echo $this->__('Checkout with Masterpass'); ?>"/>
|
97 |
+
</a>
|
98 |
+
</p>
|
99 |
+
|
100 |
+
<?php if ($showMoreLink): ?>
|
101 |
+
<p class="masterpass-link-mini-cart">
|
102 |
+
<a href="<?php echo $showMoreLink ?>"
|
103 |
+
onclick="javascript:window.open('<?php echo $showMoreLink ?>',
|
104 |
+
'olcwhatismasterpass','toolbar=no, location=no, ' +
|
105 |
+
'directories=no, status=no, menubar=no, scrollbars=yes,' +
|
106 |
+
' resizable=yes, ,left=0, top=0, width=400, height=350');
|
107 |
+
return false;">
|
108 |
+
<?php echo $this->__('Learn more...') ?>
|
109 |
+
</a>
|
110 |
+
</p>
|
111 |
+
<?php endif; ?>
|
112 |
+
</div>
|
113 |
+
|
114 |
+
<div class="masterpass-or-minicart ">
|
115 |
+
<span> <?php echo Mage::helper('expercash/data')->__('-OR-') ?> </span>
|
116 |
+
</div>
|
117 |
+
|
118 |
+
</div>
|
119 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/expercash/payment/logo/logo.phtml
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
?>
|
23 |
+
<?php
|
24 |
+
/**
|
25 |
+
* Note: This mark is a requirement of Masterpass
|
26 |
+
* @see
|
27 |
+
*/
|
28 |
+
?>
|
29 |
+
<div >
|
30 |
+
<!-- Masterpass Logo -->
|
31 |
+
<img id="masterpass_payment_method" src="<?php echo $this->escapeHtml($this->getPaymentAcceptanceMarkSrc()) ?>"
|
32 |
+
alt="<?php echo $this->__('Masterpass') ?>" class="v-middle"/>
|
33 |
+
<a href="<?php echo $this->getPaymentAcceptanceMarkHref() ?>"
|
34 |
+
onclick="javascript:window.open('<?php echo $this->getPaymentAcceptanceMarkHref(
|
35 |
+
) ?>','olcwhatismasterpass','toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, ,left=0, top=0, width=400, height=350'); return false;">
|
36 |
+
<?php echo $this->__('Learn more...') ?>
|
37 |
+
</a>
|
38 |
+
</div>
|
app/design/frontend/base/default/template/expercash/payment/masterpass/cc.phtml
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php /* @var $this Expercash_Expercash_Block_Masterpass_Fullcheckout_Cc */ ?>
|
2 |
+
<table id="masterpass-cc-data">
|
3 |
+
<colgroup>
|
4 |
+
<col/>
|
5 |
+
<col/>
|
6 |
+
</colgroup>
|
7 |
+
<tbody>
|
8 |
+
<tr>
|
9 |
+
<td class="label"><?php echo $this->__('maskedPan:') ?></td>
|
10 |
+
<td class="value"><?php echo $this->getMaskedPan() ?></td>
|
11 |
+
</tr>
|
12 |
+
<tr>
|
13 |
+
<td class="label"><?php echo $this->__('cardScheme:') ?></td>
|
14 |
+
<td class="value"><?php echo $this->getCardSchema() ?></td>
|
15 |
+
</tr>
|
16 |
+
</tbody>
|
17 |
+
</table>
|
app/design/frontend/rwd/default/template/expercash/checkout/onepage.phtml
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Expercash Expercash
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* DISCLAIMER
|
13 |
+
*
|
14 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
15 |
+
* newer versions in the future.
|
16 |
+
*
|
17 |
+
* @category Expercash
|
18 |
+
* @package Expercash_Expercash
|
19 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
?>
|
23 |
+
<div class="page-title">
|
24 |
+
<h1><?php echo $this->__('Checkout') ?></h1>
|
25 |
+
</div>
|
26 |
+
<script type="text/javascript" src="<?php echo $this->getJsUrl('varien/accordion.js') ?>"></script>
|
27 |
+
<script type="text/javascript" src="<?php echo $this->getSkinUrl('js/opcheckout.js') ?>"></script>
|
28 |
+
<script type="text/javascript" src="<?php echo $this->getSkinUrl('js/opcheckout_rwd.js') ?>"></script>
|
29 |
+
<script type="text/javascript" src="<?php echo $this->getSkinUrl('js/expercashopc.js') ?>"></script>
|
30 |
+
<ol class="opc opc-firststep-<?php echo $this->getActiveStep() ?>" id="checkoutSteps">
|
31 |
+
<?php $i=0; foreach($this->getSteps() as $_stepId => $_stepInfo): ?>
|
32 |
+
<?php if (!$this->getChild($_stepId) || !$this->getChild($_stepId)->isShow()): continue; endif; $i++ ?>
|
33 |
+
<li id="opc-<?php echo $_stepId ?>" class="section<?php echo !empty($_stepInfo['allow'])?' allow':'' ?><?php echo !empty($_stepInfo['complete'])?' saved':'' ?>">
|
34 |
+
<div class="step-title">
|
35 |
+
<span class="number"><?php echo $i ?></span>
|
36 |
+
<h2><?php echo $_stepInfo['label'] ?></h2>
|
37 |
+
<a href="#"><?php echo $this->__('Edit') ?></a>
|
38 |
+
</div>
|
39 |
+
<div id="checkout-step-<?php echo $_stepId ?>" class="step a-item" style="display:none;">
|
40 |
+
<?php echo $this->getChildHtml($_stepId) ?>
|
41 |
+
</div>
|
42 |
+
</li>
|
43 |
+
<?php endforeach ?>
|
44 |
+
</ol>
|
45 |
+
<?php echo $this->getChildHtml('checkout.onepage.js') ?>
|
app/etc/modules/Expercash_Expercash.xml
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Expercash Expercash
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
*
|
13 |
+
* DISCLAIMER
|
14 |
+
*
|
15 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
16 |
+
* newer versions in the future.
|
17 |
+
*
|
18 |
+
* @category Expercash
|
19 |
+
* @package Expercash_Expercash
|
20 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
21 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
22 |
+
*/
|
23 |
+
-->
|
24 |
+
<config>
|
25 |
+
<modules>
|
26 |
+
<Expercash_Expercash>
|
27 |
+
<active>true</active>
|
28 |
+
<codePool>community</codePool>
|
29 |
+
<depends>
|
30 |
+
<Mage_Payment />
|
31 |
+
</depends>
|
32 |
+
</Expercash_Expercash>
|
33 |
+
</modules>
|
34 |
+
</config>
|
app/locale/de_DE/Expercash_Expercash.csv
ADDED
@@ -0,0 +1,115 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"ExperCash (ELV)","ExperCash (Lastschriftverfahren)"
|
2 |
+
"ExperCash (CC)","ExperCash (Kreditkarte)"
|
3 |
+
"ExperCash (SO)","ExperCash (Sofortüberweisung)"
|
4 |
+
"ExperCash (GP)","ExperCash (giropay)"
|
5 |
+
"ExperCash (PP)","ExperCash (PayPal)"
|
6 |
+
"ExperCash (PC)","ExperCash (Barzahlen)"
|
7 |
+
"Enabled","Aktiviert"
|
8 |
+
"New order status","Status neuer Bestellungen"
|
9 |
+
"Sort order","Reihenfolge"
|
10 |
+
"Title","Bezeichung im Shop-Frontend"
|
11 |
+
"Payment to applicable countries",""
|
12 |
+
"Payment to Specific countries",""
|
13 |
+
"Payment from Applicable Countries","Zahlung aus erlaubten Ländern"
|
14 |
+
"Payment from Specific Countries","Zahlung von bestimmten Ländern"
|
15 |
+
"URL","URL"
|
16 |
+
"Paymenttype","Autorisierung / Direktbelastung"
|
17 |
+
"Popup Id (popupId)","Popup-ID"
|
18 |
+
"Profile","Profil-ID"
|
19 |
+
"Authorizationkey (IFrame)","Sicherheitsschlüssel IFrame"
|
20 |
+
"Paymentkey (API)","Sicherheitsschlüssel Gateway"
|
21 |
+
"Project Id (IFrame)","Project-ID"
|
22 |
+
"Return URL","Return URL"
|
23 |
+
"Error URL","Error URL"
|
24 |
+
"Notify URL","Notify URL"
|
25 |
+
"Iframe css class","IFrame-CSS-Klasse"
|
26 |
+
"Iframe width","IFrame-Breite (z.B. 400px)"
|
27 |
+
"Iframe height","IFrame-Höhe (z.B. 400px)"
|
28 |
+
"CSS file url (https!)","CSS-URL (https!)"
|
29 |
+
"Error in refunding the payment","Fehler bei Gutschrift: Keine Gutschrift möglich bei ExperCash!"
|
30 |
+
"OA","Offene Rechung"
|
31 |
+
"CC","Kreditkarte"
|
32 |
+
"DD","Lastschrift"
|
33 |
+
"Choosable","Frei wählbar"
|
34 |
+
"ExperCash payment loaded","ExperCash Payment geladen"
|
35 |
+
"Authorization was successful.","Autorisierung erfolgreich abgeschlossen"
|
36 |
+
"Customer was rejected by ExperCash","Kunde wurde von ExperCash abgelehnt"
|
37 |
+
"Transaction Id/Pay-ID at ExperCash: %s","Transaktions-ID/Pay-ID bei ExperCash: %s"
|
38 |
+
"Paymenttype: %s","Zahlungsmethode: %s"
|
39 |
+
"Paymentinformations ExperCash","Zahlungsinformationen - ExperCash"
|
40 |
+
"You will be redirected to our paymentprovider after the checkout","Sie werden nach Abschluss des Kaufvorgangs zu unserer Zahlungsschnittstelle weitergeleitet"
|
41 |
+
"Error!","Fehler!"
|
42 |
+
"Errormessage!","Fehlermeldung!"
|
43 |
+
"ELVAUTH","Lastschrift (Autorisierung)"
|
44 |
+
"ELVBUY","Lastschrift (Direktbelastung)"
|
45 |
+
"CCAUTH","Kreditkarte (Autorisierung)"
|
46 |
+
"CCBUY","Kreditkarte (Direktbelastung)"
|
47 |
+
"SOBUY","Sofortüberweisung (Direktbelastung)"
|
48 |
+
"GPBUY","giropay (Direktbelastung)"
|
49 |
+
"PPBUY","PayPal (Direktbelastung)"
|
50 |
+
"Capture was not successful: %s","Capture konnte nicht durchgeführt werden: %s"
|
51 |
+
"Invalid amount for capture.","Ungültiger Betrag für Capture"
|
52 |
+
"Error during capture: %s","Fehler beim Capture: %s"
|
53 |
+
"Transaction Id for Capture/Buy at ExperCash: %s","Transaktions-ID für den Capture/Buy bei ExperCash: %s"
|
54 |
+
"Epi Payment Id/Pay-ID for Capture/Buy at ExperCash: %s","Epi Payment-ID/Pay-ID für Capture/Buy bei ExperCash: %s"
|
55 |
+
"Capture was successful.","Capture erfolgreich ausgeführt."
|
56 |
+
"Buy was successful.","Buy erfolgreich ausgeführt."
|
57 |
+
"Epi Payment Id/Pay-ID for Capture/Buy at ExperCash:","Epi Payment-ID/Pay-ID für Capture/Buy bei ExperCash"
|
58 |
+
"Payment type at ExperCash: %s","Zahlungsart bei ExperCash: %s"
|
59 |
+
"Transaction Id at ExperCash: %s","Transaction-ID bei ExperCash: %s"
|
60 |
+
"Transaction Id for Capture at ExperCash: %s","Transaction-ID für Capture/Buy bei ExperCash: %s"
|
61 |
+
"Create Invoice at buy","Rechnungserstellung bei Kauf"
|
62 |
+
"Create Invoice when receipt of payment","Rechnungserstellung bei Zahlungseingang"
|
63 |
+
"Allowed Currencies","Erlaubte Währungen"
|
64 |
+
"Select alternative payment method","alternative Zahlungsart auswählen"
|
65 |
+
"Response is null.","Response ist null."
|
66 |
+
"Response status is not correct: %s","Der Response - Status ist nicht korrekt: %s"
|
67 |
+
"Capture was not successful. Message is: %s","Das Capture war nicht erfolgreich. Fehler: %s"
|
68 |
+
"Capture-attempt failed with message: %s","Der Capture-Versuch ist fehlgeschlagen: %s"
|
69 |
+
"Error during capture: %s.","Fehler während des Capture: %s."
|
70 |
+
"Capture was successful. Captured amount: %s %s","Capture war erfolgreich. Captured %s %s"
|
71 |
+
"Error while transforming response to simple xml.","Fehler beim Umwandeln der Response zu simpleXML."
|
72 |
+
"owner: %s","Karten-/Kontoinhaber: %s"
|
73 |
+
"maskedPan: %s","Karten-/Kontonummer: %s"
|
74 |
+
"cardScheme: %s","Kartensystem: %s"
|
75 |
+
"validThru: %s","Karte gültig bis: %s"
|
76 |
+
"panCountry: %s","Kartenland: %s"
|
77 |
+
"ipCountry: %s","IP-Land: %s"
|
78 |
+
"attemptsTotal: %s","Transaktionsversuche Gesamt: %s"
|
79 |
+
"attemptsSameAction: %s","Transaktionsversuche Zahlung: %s"
|
80 |
+
"3dsStatus: %s","3D-Secure: %s"
|
81 |
+
"3dsecureValue_0","nicht verfügbar"
|
82 |
+
"3dsecureValue_1","versucht"
|
83 |
+
"3dsecureValue_2","voll authentifiziert"
|
84 |
+
"send mail after automatic invoice creation","Rechnungs-Email automatisch versenden"
|
85 |
+
"paymentStatus: %s","Payment Status: %s"
|
86 |
+
"MPBUY","Masterpass (Direktbelastung)"
|
87 |
+
"MPAUTH","Masterpass (Autorisierung)"
|
88 |
+
"-OR-","-- ODER --"
|
89 |
+
"Show Learn More Link","Learn more Link anzeigen"
|
90 |
+
"Show Button in Cart","Button im Warenkorb anzeigen"
|
91 |
+
"Show Button in Mini Cart","Button im Mini Warenkorb anzeigen"
|
92 |
+
"Show Button in Checkout","Button im Checkout anzeigen"
|
93 |
+
"No","Nein"
|
94 |
+
"Yes","Ja"
|
95 |
+
"Show ""Buy with Masterpass"" Button in Cart","""Buy with Masterpass"" Button im Warenkorb anzeigen."
|
96 |
+
"Show ""Buy with Masterpass"" in Mini Cart","""Buy with Masterpass"" Button im Mini-Warenkorb anzeigen."
|
97 |
+
"Show ""Buy with Masterpass"" in Checkout","""Buy with Masterpass"" Button im Checkout anzeigen."
|
98 |
+
"Additional Checkout Info","Zusätzlicher Checkout-Text"
|
99 |
+
"A custom text can be displayed in checkout to promote Masterpass Full Checkout.","Es kann ein zusätzlicher Text für Masterpass Full Checkout im Checkout angezeigt werden."
|
100 |
+
"Show Logo","Logo anzeigen"
|
101 |
+
"Show Masterpass Logo for Payment Method.","Masterpass Logo für Zahlungsart anzeigen."
|
102 |
+
"Show ""Learn More"" Link" next to logo.","""Learn More"" Link neben Logo anzeigen."
|
103 |
+
"With MasterPass, you can use the stored payment and shipping information from your MasterPass account to buy quickly, safely and easily. If you do not have a MasterPass Wallet yet, please contact your bank.","Mit MasterPass können Sie die in Ihrem Masterpass-Account hinterlegten Zahlungs- und Versandinformationen nutzen, um schnell, sicher und einfach einzukaufen. Wenn Sie noch kein MasterPass Wallet haben kontaktieren Sie bitte Ihre Hausbank."
|
104 |
+
"Learn more...","Erfahre mehr..."
|
105 |
+
"Pay with Masterpass","Zahlen mit MasterPass"
|
106 |
+
"Masterpass FullCheckout is not allowed for billing country. Please choose another payment method.","Masterpass Fullcheckout ist für Land nicht verfügbar. Bitte wählen Sie eine andere Zahlungsart."
|
107 |
+
"Invalid response from Expercash. Please use default checkout.","Fehlerhafte Antwort von Expercash. Bitte verwenden Sie den normalen Checkoutprozess."
|
108 |
+
"Operation canceled.","Operation abgebrochen."
|
109 |
+
"Display Credit Card Data in Checkout","Kreditkartendaten im Checkout anzeigen"
|
110 |
+
"If set to ""Yes"", masked credit card data will be displayed in the payment step.","Wenn ""Ja"" gewählt wurde, werden die maskierten Kreditkartendaten aus dem Wallet bei der Zahlart angezeigt."
|
111 |
+
"maskedPan:","Karten-/Kontonummer:"
|
112 |
+
"cardScheme:","Kartensystem:"
|
113 |
+
"Show Link","Zeige Link"
|
114 |
+
"Enabled = Directsale / Disabled = authorization","Aktiviert = Direktbelastung / Deaktiviert = Authorisierung"
|
115 |
+
|
app/locale/en_US/Expercash_Expercash.csv
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"owner: %s","card-/account-owner: %s"
|
2 |
+
"maskedPan: %s","card-/account-number: %s"
|
3 |
+
"cardScheme: %s","card system: %s"
|
4 |
+
"validThru: %s","card expiration date: %s"
|
5 |
+
"panCountry: %s","card country: %s"
|
6 |
+
"ipCountry: %s","ip country: %s"
|
7 |
+
"attemptsTotal: %s","transaction attempts total: %s"
|
8 |
+
"attemptsSameAction: %s","transaction attempts payment: %s"
|
9 |
+
"3dsStatus: %s","3D-Secure Status: %s"
|
10 |
+
"3dsecureValue_0","not available"
|
11 |
+
"3dsecureValue_1","attempted"
|
12 |
+
"3dsecureValue_2","fully authenticated"
|
13 |
+
"ExperCash (PC)","ExperCash (Pay Cash)"
|
14 |
+
"Payment from Applicable Countries","Payment from Applicable Countries"
|
15 |
+
"Payment from Specific Countries","Payment from Specific Countries"
|
16 |
+
"send mail after automatic invoice creation", "send mail after automatic invoice creation"
|
17 |
+
"Masterpass FullCheckout is not allowed for billing country.Please choose another payment method.","Masterpass FullCheckout is not allowed for billing country.Please choose another payment method."
|
18 |
+
"Invalid response from Expercash. Please use default checkout.","Invalid response from Expercash. Please use default checkout."
|
19 |
+
"-OR-","--OR--"
|
20 |
+
"Learn more...","Learn more..."
|
21 |
+
"With MasterPass, you can pass the stored payment use and shipping information from your MasterPass-Account to buy quickly, safely and easily. If you do not have a MasterPass Wallet yet, please contact your bank.","With MasterPass, you can pass the stored payment use and shipping information from your MasterPass-Account to buy quickly, safely and easily. If you do not have a MasterPass Wallet yet, please contact your bank."
|
22 |
+
"Show ""Buy with Masterpass"" in Checkout","Show ""Buy with Masterpass"" in Checkout"
|
23 |
+
"Additional Checkout Info","Additional Checkout Info"
|
24 |
+
"A custom text can be displayed in checkout to promote Masterpass Full Checkout.","A custom text can be displayed in checkout to promote Masterpass Full Checkout."
|
25 |
+
"Display Credit Card Data in Checkout","Display Credit Card Data in Checkout"
|
26 |
+
"If set to ""Yes"", masked credit card data will be displayed in the payment step.","If set to ""Yes"", obfuscated credit card data will be displayed in the payment step."
|
27 |
+
"maskedPan:","Credit card number:"
|
28 |
+
"cardScheme:","Card type:"
|
29 |
+
"Show Link","Show Link"
|
30 |
+
"Enabled = Directsale / Disabled = authorization","Enabled = Directsale / Disabled = authorization"
|
app/skin/frontend/base/default/images/expercash/masterpass.png
ADDED
Binary file
|
doc/Expercash_Expercash/.gitkeep
ADDED
File without changes
|
doc/Expercash_Expercash/Benutzerdokumentation.pdf
ADDED
@@ -0,0 +1,6953 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
%PDF-1.4
|
2 |
+
%���� ReportLab Generated PDF document http://www.reportlab.com
|
3 |
+
% 'BasicFonts': class PDFDictionary
|
4 |
+
1 0 obj
|
5 |
+
% The standard fonts dictionary
|
6 |
+
<< /F1 2 0 R
|
7 |
+
/F2 4 0 R
|
8 |
+
/F3 50 0 R
|
9 |
+
/F4 59 0 R >>
|
10 |
+
endobj
|
11 |
+
% 'F1': class PDFType1Font
|
12 |
+
2 0 obj
|
13 |
+
% Font Helvetica
|
14 |
+
<< /BaseFont /Helvetica
|
15 |
+
/Encoding /WinAnsiEncoding
|
16 |
+
/Name /F1
|
17 |
+
/Subtype /Type1
|
18 |
+
/Type /Font >>
|
19 |
+
endobj
|
20 |
+
% 'FormXob.debfe39a01d8602d733fbbcad4ae132a': class PDFImageXObject
|
21 |
+
3 0 obj
|
22 |
+
<< /BitsPerComponent 8
|
23 |
+
/ColorSpace /DeviceCMYK
|
24 |
+
/Decode [ 1
|
25 |
+
0
|
26 |
+
1
|
27 |
+
0
|
28 |
+
1
|
29 |
+
0
|
30 |
+
1
|
31 |
+
0 ]
|
32 |
+
/Filter [ /ASCII85Decode
|
33 |
+
/DCTDecode ]
|
34 |
+
/Height 189
|
35 |
+
/Length 160993
|
36 |
+
/Subtype /Image
|
37 |
+
/Type /XObject
|
38 |
+
/Width 855 >>
|
39 |
+
stream
|
40 |
+
s4IA=!%^r[Dffo=BQ%i41G1?]3'p22"76'g!!!!1!A"3N!!*'#!A"3N!!*'#s5?*qBQS?83\N.(F"Um3Ddm91@rH3;G[YPE0eP.5!'EJjE+*6lATT&(AS5^p4X0@,^EOe7A3D,<2,,c!E'n2MBh3PjAQ*nM<+C5i@l\'D5<]E:GWL(dE,B0.@3Bf3Ci4;TGWd6ZA8bpg3c9""D.Rft0-VN`3d>L\FDF#`6"FnCAKY)L:`r,DEb-@M/hnqf0JbU01c?sA2`EEN1+XP;EbQXcARZc;1E\G,0K1+/1cd?L3\`T:+<VdL+<VdN4piDT+?X[TAi`gX7NcqmCi4;TEb&cF,%u(?E&oX*GB\6`G;CjiEb@$[3B9)Q0JY::1+dNWAhA(LDKK<3/T,VS,!H>V+<VdL+?X[TAi`=kF(96)E-,f4DBNt1Aia@0Dfp.b+sI@:+<VdL+<VdL+<VeOD/=*23b2_`,%u(?E&oX*E-62;/oPcC04\QGASbppASuU20/5(60-WRe+<VdL+<VdL+?X1E3bE;ND..NMBl.9kAM7e;AS4+YA7IZ4DfT]'F?U$S+<VdL+<VdL4Chq_FD5i5ANgGD+<VdL+<VdL+<VdhEb&cC6#:X,$6UH6+<VdL+<VdL+<VdL4E=tE3c&LQG\q7XCgh3o4X,,&A7]@]F_l.D5"'F6@r"1[Eb&cCChZ'?+<VdL+<VdL+<VdL4>1_cAi`4oF?U$S+<VdL+<VdL4>15T3co(XCh5d;+<VdL+<Wd"Eb&cC6tLFLEbTK7Bl@lQ$6UH6+<VdhEb&cC6tLFLEbTK7Bl@l3Eb&cC@:F.tF?Lfl$6UH6+<VdL+<VdL+F%a>DK@j`@;n@RBQS?83\N.(F"Um3Ddm91@rH3;G[YPE0eP.5+poG8+<VdL+<VdL+<YoGCi4;TG[YP]8Sr*',%u(?E&oX*DK@F=A8bpg/n8g:06goE0/5(504uqPD.bLG4piDT+<VdL+<VdhG[YPP6ZQaHFDl2!Df9GU8Si3cF*)G2FDl1^06goE3^[q!@<?F.<,Z\k4piDT+<VdL+<VdhG[YPP6ZQaHFCdjKFCdWk0JGL=0JY470iTk]3\`BN0JP(30fh!B4>1qfE&p@,ART[l6t(1K4piDT+<VdL+<VdhG[YPP9lFQVApHdQFCdWk0JGL=0JY470iThe3\`BN0Jclp06goE3_aO'BkDWY@<?'E$6UH6+<VdL+<Wdk@;n8%ATV?k@<>pG@<?'E1,(CB/MJq30elW^0KLpD3\W9=0JPUB0K_"5@;n8%ATV?k@<>pG@<?'E$6UH6+<VdL+<Wdk@;n8,BQ\0$DII6qF$9pR+<VdL+<VdL+<VdhEb&cC6#:X,$6UH6+<VdL+<VdL+<VdL4E=tE3c&LQEb&cCE+*d.AQ3qoAN_58ATMd4EarZ)4piDT+<VdL+<VdL+<VdL+<VdL4Et:R7nIQ13d5:KFD*in2)[QMG[YP]8Sr*$GA1T0BKcbG+<VdL+<VdL+<VdL+<VdL+?XmWE(<K:B0'^;BkM+$4uG5\06goE7nIQ13bW)=B4uBN$6UH6+<VdL+<VdL+<VdL+<VdhG[YP]8Sr*$AoD^,@<=\*:dml:06goE7nIQ13bE;ND..NM$6UH6+<VdL+<VdL+<VdL+<VdhG[YP]8Sr*$Bl.9kANhb-C+hD05uCQr>"V\*5sdkM77'[67<:a\6n^Jr6$$$rBQdoV3I5+(3Hn%_9m'/r5r;GSCed8H0L7uj5s[e'5se725s[e&76r7FGX4DW;+5Ol5s[e&;*dN%.l9O[CIW)K1.l@K7oVc?5s[e&AhRUZ8Pqc?B2M)a5ug??B2qDfB5:"(;-?LYG@sE4B4jn+6#TC`GAg,$,BuL96pa166pZ#k6pZ#o6pWY+76rn/6paUI7RBsO7<j#c7sK)b89d++89d++89d++89[Kn6?cp76pWM077':C7qbn#7T+/:89d++-6mb$4%OTUAk7/+Ak7/+Ak7/+Ak7/+Ak7/+Ak7/+Ak7/+Ak7/+Ak7/+Ak7/+Ak7/+Ak7/+Ak7/+Ak7/+AhQ,05t+X`5u0d85s]]`;C3W55s%@u8Q%iO9i=8h01A088O5X.5tF:=77':;76s4*5s[e&5s[e&;+<iq8Ol'D5tF@/CJ.$=76s4P8OPjA77':;76s4*5s[e&5sZhBGX4DW;*dQ8G>UgrB4FM#;/],s5s[k(;,'GEB2M#_B4F=r5tOR4DG<G`B2)8j5s[t3;Fu+1<^fMI1.>ne=[c=bE(=S.GZT,eBi%,C,BuL9<HLcF9mBiU3($ShB6H^[;0l,>CN3!m=YilA:/t//CGnt7:2"0<>"DU\0QfrY8oIEr6YL+9BM)/l;K5Vh<ch);91!ZE1bVZo-6mb$4#'N10NqR[7VlL70mI52CcPR#12(W8D00i.=#G/(1K#r<DIbS8=E$32822W,1J^GQ=^aj88Sq+71jMi2D_"1j2,dOlE+N0h=sbJ=5s''qDFuZqDDb(%E(a8LE&MELEH-,BEa^kLDc/ke8OGd@8OPmB<CK5O=[b\D9giGf76s4Q779I078lo\77L9T:2!43>'O[`7<p4)GX4E0@Rt]49h8/=;bf\L<_@(9G"$^L6rHEcBOOh>Gun]_2bZS*1Jh"FAP,C(G[sfiG@sN8BP1L@C0F(sBk2!i7TD6(EDLn)H"V(C,BuL90IotGBM)3=FA5_72,I1eA6Du7E+2p=0kFHA;J]NRA8bmXE,oDX0m-q\;DD^"A2Ik"E&VB"0e6il:ISr"@7Y*(D+eS"Gtr*m-6mb$4"E^88lo)12/-62E-5Z.=uKu.EDL@h@:=%n95SZg2L0CbE@Z2c@6m2'6pX[96UajH;F*]16#/5u.p=r70ki:VF]p_<;,V4E=XGA<5s&48GXGAL=B\QgF>,X63(lbP.oCI]@T.JK@<?Nh:GciX:GR!.=ZBtb2Gct@3G!IhAnc'q=>_jGDKnop<dIFs=ZCCsD_XmY1eoABGX4Dg0h5kZ;+GLa0h"K2<(TnABkDEH:ip;Q13I:b84?<MAk[,6=CHAS@mW"T3&>D)G=,;2DL-VP6n;D@BNe7hA9r5rG&]Nd757F^,BuL90l:];=[kn;CNWHf8oHClC2I$36;]UW2D[[7:JG\GEbdLKCO1:d;+!9a3Ft'oC3E*?Ao2U89Ij1#D,P1B<bQG32*sfX89[U!-6mb$4).]+1NR/>0K*Yr2f(Ee.ofDk0fWoV2)R?JAMl/eGqi#p@r-6rD)Ga#=a<_\<DRU784[n`5tGlj@;\n47R]a[1K-2D7SHHR9I;!/5s'$E==[KE2+<G"[!r:fMOJG%>&qFZ3`T3FX^:A5H;a:,[/^CJf%r1,;O920)GkE\prk7nH0O2b68R2,S3_7oj\+0/\#X3,g2hGX4DnD/(S)=\qh7CH-$07rq(3@mX7"9Lr]=9Qi*F89%3s;)rhU>#8C>=]9'ZDJ`3m@qKgM6>B2.84du)02-OHF>@lKCO.X"8U,A),BuL91.?:FE&i&M@5_h&2gJLZA4\IUF`'2tH:]u50LT)W>#%Y$82NYY:btmN6rduGF\OkmG%F`e3&EX,=*.J&0kFlhEdD273&#D6-6mb$4*#:]E,J?l<-W8'E+rBEF=T:jH;77L1c9/2Dd$%RB1YuZ04QhMBP:%KC/&S^3AsSb20j$n1KSU/H:i-nD-&_N@o5-r8m,k:=!f/:5s$c8CKa;ICJ?Ks3,M\p6$R<d7k7Ir9R(eV;c?FM>%DPtCI:BU0N^5"07%A(@:=C<;_U"/=\`RFBQcC6F)O`,7:AJP8m#tF=&gRlGX4D_;b0;V85!ho2IU-;7oXS)G\pSC:NoQ-6ut=dB1-;g6U<@u=?(SL:2XlMH89YZDL+i`H!"Tl8n;g==ArCL94DHh6n<%f;0@+1,BuL9E].*4B1Y!]:/X#s0kG38CNq@%7:Iu\85s#3@nJ^LC1^@<06]g%9LEB&9N<`>B5)-b6!6luG"-1=01\Vj>$*OY:2jf3DDH!+-6mb$4&8@i:22S#H8oS7:0;@NH$WUO04J?K6t1@BH$+C0H"D&!=D18[AMmS!EG\f]FCmp39mBBD<*3ig@rQZ]F\HX4GqVcC3-J%t3$okp5s&g>9P#tLD_j:R3-6lb.s5WCAl!,]2IUQL.o9htF^];l@:rbI6"a1V6r[;gC2-XAG&:]61N4jbAo13l=YY#:D0%U[@rs_ACiq'LGX4De<\[6n<-)btGZ.Np<`iKj@T#0`1g5'4CM7C+@oZB$DH0P#Gr8Af;G^D2DDc&[CKb^2G=,I_C/-X*3-AXg:e>bEH"L-#8PXFU,BuL9:e,PK79<AXC19#>9m:SPEF`R(A5I;b2/m%oD`BOEH=9Z-BR!BHASj)967Z5^D_#=>6Zk=a=%Gc&E]-iM@<ksM6#^[SCd_c(-6mb$4'GNZ@r+e,:/PRn@l7mZDdcdO2*lIE7X7!bEC=SWG'ZMO026J5G[rR?GUmHL9PdEtEH+Kl9P@1=84ci_7SmQ'@r#7\:K_L0CaLBO5s$`9=E87s=(sHF2.]HiH?qt67VZF-3,L0&9Pn])DDsOT:f:muASX2;E*$au=(Q;P8p,/j='9W:='Bf;E`,q<FEUVt6>'5582V_=GX4E02K^`f2.9o\:2+c(3D"9jCLT_(:hjJnBN-m"<`r<N=)E"\7Vjr#C34K41HA)YC,nq%CG7V?6:sa'05<13H?X:=H<E[[92Kp],BuL976!"[Eb%'`11t$+8MF.5@SB6_8U>Vi=&q4g75&q#FA$1@7TNPdH"Sj590u6-A5uN$3(%jT8U5;G3H.i?@Q%dn:2r9^F)k\H-6mb$4*5"$Bll:N>&ZE;9/Aq]<)$;9>'Fk/7rU7B1e)%TAo)9[:G6TQ0ig/%>%L-FGY1O\Fa@^u3FactCLKhT6:,Tg@T6?(00r!P:F7<25s%D,H$VGh2)T820Mb5T>%fotCGJLS82=s?@nKU6Ao(pS=*@D8<bcSq2+930>%L\f9keECG\L0'9lNL38Q0J!G$.X<=*A[CA2kn\GX4E.2L'7:A3rsm1371c3Di.?<_5,m<_-nM8U3*YC,@e^:h<]u=(XihDKS?(CbSP.1Gs#/0fF#+G&UK$:iTMr9eT:G0g\Gu@lJQX,BuL99M%$aEC3]JH:UhMH!3dBGZmj/2)[s#=&CncCcPTN5tXscCH5NJ;IW+9FZ3JtG'ZVgE-QM7Ch@`d8hi=r7s-gb04A<ME_g7$-6mb$4)K%7<A76gA2A1892/PBE)9J-GA^&VDC]0m00r3(<-h4k13tf2.nN9+C/\_#F(Su;2JOa$Cc?&Y>%W%P3%HmR2,#uT==\;u1+"5j5s$c?1-'S_D)5p$94`#t9mLY-1iZ918RjQ!FYGdrF&>Lh2fVS^D/*g$<(]/BAQ)EOB/jd?@l[S+0Qp>qF[pRm=\!UP75.h_E],6hGX4E"F_O?ZEF^S"B6mK[3Clt89PZRh7WDR76rd620262,Ak"Y#3,LQgDe_U:@oI>)Chu[!2b&$_3)rjs1."PhF>lWG6r[?56u>OC,BuL99fOXsC1g[mBkUsr=@kG[=EuVZC3Xr$1MKZZ=`[GY.s+[&Dc'SV;eS]rB.l#D0h,&aBfL9WAS$!d0P+iOG'%aaG%O?$E]$]R-6mb$4)e7kBQmHb;aO8j1JL\*6"FeU06gE=1,:^r9NX;j6!AOaDgFrH9mL;`G;Nu#8SL_A00rDo5u1O)00qsB12AO&6"3Sk00r3,GpXb\5s$rG.sZ:sF"97*DIHX%6o.YL:eG>::jF^5Ai4".=A3I0A5dSj;b'AW9Lpm?Ci!!X79=b87l<1`A5@>VG"udg9MA#D82b3C2fg;jGX4E$9kR11;cGG=2/k6jFu;*0:eskG0Qg--FE2\.G\'N&91EAl7o`JX;J0QS3D)pu3+R(d@s0Y0DJqO,04?bU8iTdH=Z8!"9Pn5c,BuL906]f[=*?PhGVN#gDD+LI2(pe(88V$U<-`:>84ba>05)k/=YFT%.qLAL9R/EO6niLV:/b^^7QFXk8TT)jBJja02/Zo(@V\Uq-6mb$4&&F_EHFN_DJMs[<^ptG3Eg045s]C!2c;M23&4o?20(BH9NQ=.9k\TeD.H(0EB$I/7sJ'SE`G,ED0(#+E*5&.8i:a'C3`0LF!`,V5s&RoH#,!/>!Xf;G#Lb-;.XcZC1]8D8pG5N@5f\n:j4EL:M__.3'h.k1bWfZ2(ppH67ZP+75/n17WD4=G%5c?EADN,F%&Q8E^;#sGX4E:6=jSH3,3G.0i^kBE&TIs<b-))>#T]6=A_k>0m-JoB2UHX7o1^G<b>$$E*$mo@<cfQ0h3ouE,e3XB6/2mE&M?B9Pm[P=?14F,BuL9Eb@Zg:1JH+<dA=n;FjMW86RcCB1GiXE]6i`=&;_5ATUg(F^d=O2K!"o:fTA_Ao)]]9ef=_=EQ,\9QO6G<+]uD@oG:320X+%-6mb$4%3dW;FG_B1,D44DFmMm2F]MX.p#2?:+KL<D/N6`9lt8b=(*UrC3Xu"6W,U,CiiQJ6o@VW=`7kn@:WtJ==\8E0fMQTA2?qgGpXb\5s'*G6>0G<0Nghf7k[[hD)3q^.q2[U3EA^dF\5PB=*$)hEEGOq9i,\I3HdeXBPqEuH8p4m757Um2e>!G0gds0B1Z\c2-P/_Cb$hWGX4DI.sZ(o:I7`K@WF+f88W2sG=#2N0j/KU8N:KoGZnNR2/-]H2_];HAPQDpGZA6g<bk?C@Pr$jBJr>"Fu=+e<cW(W9R/F.CMccm,BuL9CG81m@6o-R6u.':6oegO=%d.A8hYI+9J8@k9h\/4GY1\/BLQK4ApQpi0m5KKH8/T+2fVE38T-OC;*e/Z68*"l=>su,AT]YL-6mb$4)&^hG'Z\IE-$/71NtQHGV;urC.L]G0KEfj=&jQ67:gC+<_,l'H:;d48P3r(8m-FN8QB1l8nV.57Wq.>Ft[`+7!UM+Ci*WXGpXb\5s'$C=\VU^69.YAC.;WV8U*0EC-bHXAoCgUFD*F392]nBFte&]:gm'q956q0D/CqD68^Y\1G;$dBOt7`A5dYp;(t"P=EA(7GVLNiGX4E06ps@@2L7o8GB$`#0/@!-9l3sHGVhBiECVZLA1qRP0P"9]AQ)?A@<X5E@l5tsC.0e%=t_jOE&DGbG=+,t:cLa#;,:@cCG0iX,BuL9=XuLO0h=;\9J]-t2(ppT:JYkE=EunaCH+%,C11O.=a2__F@98%=&2IjF@Kb>;K@%P6Vi#!:,+M=ChuI)9iP1QEHFN^C.hHG-6mb$4'6PSCbJI<2.gE!:eY[`3B;"hCNhO'1J1/?88W&u<_[$tE^jSbA9Cg:2/bHkDf/9M8MWhGGB\7F@R4s+ApS,M3H-iN3,D\t3@5tq5s%Lq:/l?o12Ul$:N()c<A/MgAOU$?F>u0HG&2#1G@aB^5rM,J0fEoE1h/maE]$1"3,gc2:eO_u@Rt6+0Qge`@<ae40f<N^778IIGX4DNFuVcg:Gd)KBl.BN9ljlBB/VJRDea!&G@P5`1GNi!;D2p.01L,#@5;CNCGe"jE,83E<D.1L9mK,e1J;:4G=+>gBM'pp2-P;Q,BuL913IeP88Bt<87XMnCO0Pa6S!(d:G4[n:KDWl5soKECG.Y5@SU#Y5tXt!203ncFuOIm3Hn7QG&^&q<&8f;06]]=Gq2rV=ZCR_-6mb$4&BreH>tr%B/)o%FE2M*1MTu_7TXJA=&N[OF)k_UF(&ZKCfa_\:K:Rg8O5+(@SKs.3(d(88l%9TFXp?CGq_3r.oU@W<)QCeE[E#U5s&RU6u$46F*_D:@oGZ`F@/&S5u9OW;*m3FEcWaMDJUhAF_#31;Kuq1BJafaH>IUTGVN#gDD+:BB6@f:8pE47.sY]+G%WX&@:gi2GX4DN:j?/I.o\/f:KB8/Ai=la=@['`CiO$#=#i!I=@H_=DKSK-3,M<7GtUda=_;_p6>]P>:0).FCe6rK@Q@1rB4G(:6"P'p88h9N,BuL9C,SP#H!t0$7WE6^=a4b";aX?(77MTK=Z:+V;e%OA3,<JM2+MpLCKY@CDe![0@PpJ3E`Y&6E]A8GF?t%O9iY^a3Fl/o;Ccu`-6mb$4)B"68jta91fmRE8k<PiDD=X]1cT)9:MaWS2FL#L76#0PATVm)2*k#QAQ<o"82!kYDJE*g9PH4rCeekZ9OpaRBehYc8RkA:E$cfS5s$SdCN;.L6UPg4:GPd%84IB>=DCN'6<?uUGBuY9:h`j#8S_6r964$O6:Z#]6;_YkG<n_R93QX.A1KW3BP'7l.qNoY1NuH"=>_EMGX4D[BQ,Y?3E'Tf00r*N7RT%I6#9MC@VJIjFDt]+=ZBQ&<FJg(G!]1u;eC/B96NZ_7PQeYC,dnG@5ouU.rS?G2+gh8BLt%&9N=A*,BuL90gg+ED07Th7RL?jA9L^K0f<Tb=[m6^@97__0k5?"BPq!uGZe$>D0',r<)e$TE_J-3D)#KX0f<NXF')1@9LDZs68*Rc9NGs_-6mb$4#CD^9iGkF7QFUQ<\IoW@T[\==@GVg=Z&K49.Nh[AnF>LGsjW:AkI/]DcLn&A62/f=)9Ql<Hh/K;Gq<s:j6\6Cf<_XGAgZ0.jcKc5s&1(E*,jg2,-D[7ne2006)2&1/:bK<E<1EGskYV8nDHbCcQGpCiN!_Bejd>1.GG+A2%gn;KOTb<^Tb8:I[`+2cigJDJW`P;bSM_GX4DL@8'X'<GQ>k2-<ah6rcs$7;"Vj6WZT-Ce?@+CeQKJ:eaVU06g)`8l9@ZG%FW5@PDLHCM.35Ci!`A82*_O:.JJY=EJ[PF(&T+,BuL9;JC/*DL"]/FEMVL128Lh<c;/EE]-KU=`S4S7mhQA:Ma*(11iC(@ma@3:c1%@CMn,nBjl$YE\hMi0kE3r9/pF,;_g="Ci4>e-6mb$4'56VG"-('6"EqhAnXaoAm/#>G#;[==(teo>"CA92cs$fG#Lh#Bk^=VCfiPg00r35.q*O$3&Y2GEGKZ2:g.:,E)n\_AQ1I$3$okp5s&OREHlR]7;7!k3+l#r9mLAADGak#>&n.S6VTpAF)+d"0PtZB>%_VN5q@+<20:Wh7Ws)XBl%T=9PSlE7R_&j;c$UrBLPojD+Z-"GX4DJ86J5^CLL3rG$-=UEI)=Y@s2?4<d&aC3&"oQ:e>5=1J_sF=(kMgCM\<+D),Nq@7sd)6YnJgD_u3L3(IF2<A\Vt=_C/W2I]W4,BuL9H>[Fh:d\/AE%an23&c"V=D_/dC2b\;@;7Z1=*J^EFtn/@F_>bP94`!,3,pm":JWo@6>^cu7qcR'6>K1p;)^m2EH$5>6!5m$-6mb$4#S`fC/n))Ao;cO5ttES;fkcU2f(KMF)Y#r12]O*Gsb2C=CY#u:026t7qQ4H02$4Z>'4Oo84I<7DIYVAGYV@c2,.mQ7qcs(3@5tq5s'7%Gqh!m@Q8FG3,2?$<cg$:GX=_k;H%CUG'J%';,9&d.o((q.q*!bE(P=*8i:a::I/P_G@a`21G;$]<\[^&8i97$05tB&FD*!GGX4E%;Dr-!H"L&O<De!>@oZZ+<bcG+7SkmNDH/?8Ci_C.FD+3=C3)gF:3SUB;b(CpA49"'F)EWs:jQqME,BPr=Dgr6DKK>d@:VhS,BuL90Jum);GqQm69/UW0QD#,<b-#l6"aY'<c^2sB2hH&:MM\+3-IkN8M<Y+Ci)sG;ep)U<`sE#9hRoD=*[)EB/r=R0h6.8G"Q@$-6mb$4)-c7F(7Kr7:p%";-HmRG&CD8DG,.PFA[0@<&f%k0m%ADB1bR%BPKtN:fDCZ3FtcX@WHO0;*f#-E@W_GCH,'WG#M4_=t=,cDC-TQ5s'+4F>[6CA3k<\9LpmP6[2Wd;diU#1dlG3CLL1P91retGr&36F(J9RCKb4$@s<0+EFVRS:dfS?1,!H;2)m=6H>ILS2eHKAE+^LBGX4DFF^[%J:f;%B6#0"`AOCQb04eTQ=*dn*G#W^2;aG,,A8#pAE,A9?E&]L_CMIfaEHc#49Q3][3G_M]6Z['&H#$t`0i_7r8p<oT,BuL9CM@Zd20DZ)9h7Q\.lTD22Ki#CCJB"JA1oiCDf.4(;f4Hr;djKN;Cc3:8TZ_'FuNPt6ud!:;`JW0BQ@$I<C()1DgFB806]^"-6mb$4#0o49QN!i3(c#"@s)O&@4tS>;)Ds4<+7Lu88<HoEHQ1X7qPFjFE^]/==\2Z:iTJpGu&U'12f`a9R0c@2,[IB0/doK5rDb"C*k0M5s&^J>%;&R;CabK0NV=RC3Oqn1fSWXH"KW&1M0T>E,&<.H;%+86Si7oFu!nkBkLsS1JU\Z9egs2E'eMU2/4XM3D=O10JZQ_;`#gGGX4E,Bh1`f0edB'<C(([7qbtG:j.(\Gskb0AMH)$02+&i2fqYl0hX$59gio@@S9ZiGt`$uFA$:GD_sC0E)JJL<AmTE=Z/`EA5me#,BuL9D,4_'CeAVi8RaA105+F*:G4JG=$^hODHAho=B0H7G"b5BAi<OU2G7")=_]cm3CHkC96O!@H$Eq$A55+0.qhag;g<LgBhh,h-6mb$4',<mDe*Ho<GO9KBm)0e<D%ElBK.MR@Ur"aGr]UiDeCt<88r$LG"$UG7RBspF(oH!BPBgh3Fc'1=#!2u3&)poE[sFL@R`%dE@)oT5s'-f@nUl7=Y!B#8o8*Y.n;HhGYpJ(0M#&V0N<<SD/N!&EDoJ"2cFui3H7qTChZ^TF&6=3Cc,rX=*/1h;(H*r<]+>t=&)%sFB9e6GX4E%7oa#CDKSij;)r&>GZS?PA5QB);g<D'B0f:<;d"EZ;`JnQ96#6#8S1[UG"t@r7rC%i;.FKACdqu7A9gmA;)r338n;XVF&lfu,BuL9Bl\8qA8-(*<b,obF&lgcEcY8lBl\8qA8-(*<b,obF&lgcEcY8lBl\8qA8-(*<b,obF&lgcEcY8lBl\8qA8-(*<b,obF&lgc-6mb$4*#CCA8-(*<`<aZAo_oM68_k"<*(be7X$A#1,*NgF%f>R6u51lBidSq9lkM8.o0;_1NQ9+.n<3.@r")H2/P<u;0lYE89/3ODC-TQ5s&.I@<c<M7mg'-CNX*)GuAK7CMdu[@7rmaF[o>AFB2LY=E[Y;<,$&U1h'9K:eZ%8Bk)7*Dc^sf9Ij:YCfFJ><GHS4@V\>B7oq#^GX4DKF)X`l;`/8f2/$Vt8m$0jAPH`VG]?Pn=>Y+MD*qlODFeY*1bq'LGC!/'Gq1anAo1L)=%7:DH?saF=))/S84H?a=###0=A;O;,BuL9G?Jl@3DW7$BOsn::NC_m6Vg933FQ&DCiD.&D_j7aAk-TZ2.]Zp=?(OY96N$[3H[2uE&UsB:i'iYF`L8h12^iL0l1u@AS5^4-6mb$4#]biEcauW1f$b]F[S32:NoSfH87!Z.o&TKAMnF=:ek_8<aeEIED0nR:/>d]<^^+I=a"FIF[SN?9i=r,<,5,n:In0&3Gq5A67*q%5s'*D0mZ<!CF_tM.nF/dATMI#:.@s#CG0U,1ML`B0f"#.G#i'R3-7#L8i1HFCfb+d0NEC:GrRK7F)kG[7r<5r9IjOM7m_N(<b*O%GX4DO8o-A23&NK^BJs[FASY@JG!\rD7s7j1G;:jg2,@[i1/W767nI,e<GZ,^8QSqm<D7O7CJ@Sn<(1asCe/\JCO%m35tF^gD)F:",BuL92doU'3+P!cEHF3BG"tYN=`dOr=$o\Y9l!a=DdkXoDFRH&D_PWg>#Am7>")Rd7r^CT0Lo#d6!._r=&qt'3-]U>F%:4HE-$([-6mb$4)n1s:h"ZK1I?1@06&[GF>Ru\6:adHG<&Dd8TJiME`Fo7=*6r?@9Q,RC0ErM;KZe882Y'l<]+u%@T-<FCfb+K@Q%^g1NYKiF=&5W5s&q,8U,Mh1KS+&79FP07s?h"3H6ln<-guB3-$N?ASu`q1K.=c;(m5_F?*;SEAD8`D)>9g=DV\+6TA4!D,k:#EAD&b9O_LE0i',@GX4Dd<E<.?9//@_>&H#OBiK:9FD*X49NbM>FD>E*FuVcj@8p]:Al)9=1.Z1l<-i1sGuS3_3EK-:FDlGDC27WS0g\6G6pkrEDgHCM,BuL96<.PUEG/uWH"0BGDG3\i6tnPRAhe=PE&DhnAS-3G13?Sd7VkV8:+nLpH=AWt<+0N70N*"38l%uE8O[,bF(oVjB/Mt.9M@9G-6mb$4'>K=F[\)`2E,/YAMJIUH"pApD.RQ;<&7-*00r<Q6o]<aE(s,J1,O/JFYR`A>!ktlH$+(08MYC6;d*@C0ksB[7RKg;:I7!@GpXb\5s&sDG"cUg0MlIRH?`RIAi<"i@VRlJ:eWlk@sV6O0eYt+79!3+@THVh=Yt(RCe\Gd:H2!D3'fo!6ZPUgDc'2R6?61;8jlWW8T?(%GX4E7<d7Vh:LR(3FB3@(2.eg&2H"R:CbnI_.s+<m1.4]U2-Me97<EWJ7Q,6G1jLcbEGmR&=CXlp3,M;g96P)P@ngTPGuI.DD.6Zq,BuL9GUls@:1\3C<d$B288N9"7Q,?BE`PUe8jR5IGB?JX6>8G\68:DV@OkJU6:Xm+Bhi8[@4t/B7S--$7V6R02/H>K3AjSdH?qni-6mb$4'+m-85+"oEbIC-H#tuZ3DEsa0PYiX@qnJ'AP#3f3H8n3<)c:c9i4f11H.p>D*hr/7:RubE\hSjD_"e->"M=UF\4T494`BN<[K&95s%nDFA,anDHBVZ=`\M!Ce\DK@n(HQ<]+?#BQ6a\:/"A8:N]etEFUt+3-$N:9//h\2`5)d8iL9SCc?!.0mQ>l<)lq?@V@\l6T$28GX4D_=%I4=EG0#fD-'"oG[rfm>";A+CLpUnG%NU+E*?CZD)"d9=\*@G9NOQ"=E7A;:,u`^<&I?`:GZj!1/g,I5t`sl1IH(`BM*Co,BuL99589b=Cl><@:a%=Ao)('=Emt)<,tqtG@jK.1N?MT:hXuDAR]Le9P$%h6X!r-A2dG10ka]^1/UqpD,=q$AP>X5@:W)3E&D91-6mb$4"F&\7or;X8n2`rF_+QD3C-5ZDbs&:G\1#d7nR;fG#LDG@PDe*Dc/JqGZ&3c.p-IaG^3mY;eBi*GBY]7;E-=F<E`reD-AenF=&5W5s&OW0QhPZ@r-I#1Mh(lAlDV_F>Z!lBNf%&@5Mgi;b^D5G@YDi5r3O<84e%[0R6Si2+Mh)1JMV$BgQEV=#2LR6Wu9].sQ1o@V$l2GX4E"2/Qkt>$4C=2g%VGDJXDt7<NfEB44kP787328Ol*62-G/XF*UG4<-E>%H;[(1F@%rEEcEmPE`b=g7Vkgd.q^YPC.<J,G'@aL,BuL93E&[V6Xae3<`!lk6VD<4G'HDa6>Ld)9hBVR2Jd&BF](b?GuRF,0euCEGZHRmFa-qYAl*Vb1NdeN;`S8?D0T)_G"aYFChRoF-6mb$4'=OD9QbGD<Glbl12^r#H9tG"7WNd!9lEHgECF\dG"HCL0mGQS7qjkn@5:T"E)nJuH;ud\A4\UI8n!$W6?#^n6;][XBl?U%0IA#h5s'?G=uS9\8S^(S8:"E077)2X8TAJqBM)#n3+lf49Mg!h2-4iXA2J=/<b+`TG#h:;2ek'5<bQVrF\,89F[JH+;-%pA0Lo2i0h!E6GX4DZ92\SXD,>LK:2!0f8Q%i4B1>Q`02,i$;Ia<X93G\63E'a::/<PoH=f']AM7+B@VI]AE]@/q3&acW=AVJ&7kmq=CJA[s>%^JT,BuL91Nm8GCf`>kB3AD>An+YY94MO901fbm;`-OZ2L9C[Cdpfc2E#Ai13$`3@X1m=6=XVG2G.mFDf&or3DFC.AP,NP2-+I<GXYM!-6mb$4#o!-AncO.BkpXG:H1m&9Qj-JCiXh^EADJh=*.k]7;Zfr3I#IN1.+WT0LSKJD_XOW:e,SP9K5X[FE^SQ5q>E>2cb0J2,.RX8L>[,5s&so@obR49K?O-BME>gFEB$L6!%q]AMu%n.nk4^<)t\.1J`0P>&d,U8n)^@7<((CCdTmdH?;c)Anu]e0i:_E:K2.M8MO7%2H(qIGX4De=Cl,JC1\u+6[:UMGtq(WFB:/!@9PuTA99J!794VRB4<cD@nL2`<cDVA=%cRi;fcA#757kAB6S<:=*7XrD/2^gF*TTS0Q_Fa,BuL9@8KBcEABskE[t6JDDEt$1,a2_AOfEqE-,5BG#rg$=Ca6CG=cO;@ko]3:.[6]C2?IT7<NiGG[b,s9lW[AG\^r00JQ.8GVrW--6mb$4"sQYF\YS>1Me^HFC?mWH?(lFFA-7?=*-6.2G7n*2JY9j<DcY<=&sK901/EI=)1uQ85a#33+GO*;JJ]jH8%0q89dce8o..#;C3W55s$l;2eR+\=EI%fH<<pC0i*(-F>Pgr963p*CFaB\=)^u/:KgM32G\B_@nB-uFYcO.75.#J1O2bp@p))gEFWN[2_]Jj>"*1FGVUTjGX4E(G"m-qE`R3OH"8d40Pk].FC]!$0iK_ZG@O$e6s!r@Gr%ij7RM>YF%TM51,LLW<-VSj>'Wq(:d[W1=YP)<Bh<#*0lq(d7kZeJ,BuL9=E&.q<-`:1D(eLN2)Snu3AGS29iY&37l)u"Guo$*9L2'FE&9O2CdL.'G@OEXBR)sC1G</o:KU/4;K#0(@ol3=<*46@3-88F-6mb$4)d)W6uZmL:iSgE9Q4!SCi2+%@TQW'DHCOm;.DCO6<.l?=)D#+=&2+t6"4nG1MqA.Ce8kD7TF%S7S,?pCF`mg@5_n4;gM5Y@4!4D5s%h:EADPjFF%jb7Q!2,@9$EFG@`IECLM3U2K*b4Ce&e\758^jFZ<r!85F279i>M(Gr9Y0C26XV@s2rO8n;FDCfiQ:Al2BE96_d.GX4E8D.@-Y3DM8K.lg'qE_^XeD)?&uAi3IVAT^sBEG0T!02tOoH#5ik;fQt=8P",<BjjbT=)V/XDJjboE^b7n9MAGC:/>VH7moWi,BuL9F'!HaD+/V?AMZ>'FA6su2*k_^=ZKAl1,(RS=[c:^2`<<fG;iPUH$:u!<FU23Ci3-=ARR6%<+0EXAh,hp@5LD=A4nj75se:f-6mb$4)@D_:j-\T6rm3"9/gcJAheB\0m$E:8kO8Q.sa0AAM7gTH=C<%7Ug4\@T?/lBJEIe2ec5i8PCfnG\q):8n^t'FZ3fH6qg*PCF19N5s$qqH=TuVBQuLF68Nb'@ngJl2g&PD84dANH9$.@6tKFQGqh94@:X=W0lgbr6oK'9<I/S'3*JUG3FbcDH:iE?Am.$;9K6*E9Q;C(GX4Do;bh'XAnH6B;JLDS5qdOm.lg!UCb&UDDIGDE8T[aN@TYNA7<EWj78Ic!03D%MF>lK@@8]HO2-2e==&NpI:2*6dF(%L*@;Spi,BuL9C2lsN:1l;)90%-*3-6lN93=bE3-Jt6C1_X!@9>C"F>$=3@5)jnG%ONEAT2ln=#i!*3Ho+QCb'R*;H-_96>KSG@PM>2;f,$"-6mb$4&]m=@VKmo@s0PE:iK6!1O1W^D/O0!3-KCF0Q]-H9JJq67s7ld20*an7s.RH@sV!DF)cIUCG9=;F(I^;78m\eDg$;L:KB>`;C3W55s%S<1eq.S0kPB.=ZB;LGXtMKAi<(83-?`N3F[&?<&e_s7X&Q6:f:n!2dom%0OmOc1eUn,Dg"*a04[h$Ch6R@7;5mq3)suL3G^#eGX4E+GXZ+=Ce&Yk=_r%h2-OR"A4^l<8S`/s3B:/@@8UlX2Jd>KG&_;?DE(6[2)SQ,=a<n>BmFqtF*L)EAo:I#H:`!oDc97aE\UWB,BuL97!CC@;Kl&S=BK!SA4gl^Fu<bf2,%pEDHD+)9NOkC<*+*2<(pCm@U_'7;fXltFEg56@S\a>7;u*u1K[:,@;SSP6#/,P>$*ac-6mb$4(E>(8S^XI6qMDm;eAd#Ch7'P:+L9=FDO9S1+RBc@9?$:Cc?)_EI(\HF_l1[9m1_V<cWCA6>&Y^1f\g=6WH]DD/j\ODIQd>9dV*05s&aQ;E$7Q6<#TuCHXd5G[YP]8Sr*$Bl.9kANgGD+<VdL+<VdL+<VdL+<Wd"Eb&cCChZ'?+<VdL+<VdL+<VdL4>1_cAi`4oF?U$S+<VdL+<VdL4>1qfE&ps3F_tT*@;0P!4piDT+<VdL4>1_cAi`=kF(96)E-,f4DE\CM+<VdL+?X[TAi`=kF(96)E-,f4DBNt1Aia@0Dfp.b+sI@:+<VdL+<VdL+<VeOD/=*23d>(P9hdbpBQS?83\N.(F"Um3Ddm91@rH3;G[YPE0eP.5D/CpM$6UH6+<VdL+<VdL+F%a>DK@j[FAc[^4X+Q]FDs8o05bh`@:X:cAM.J2D(g-BE%`pu0J@KHH#R=J;IsofF`Lu';IsGb,!H>V+<VdL+<VdL4Et:R9hdZ:De!p,ASuT]6p>a9Bk07o77K[57RJjr2F]\p6npDV2FB2f1-%'T1.+Jt2b#bh06goE9hdZ:De!p,ASuT]6p:r#+<VdL+<VdL4Et:R9hdZ?DKBo.DI[6L6p>a9Bk07o7Rfd67RJjr2F]\p6npDV2FB2f1-%'T1.+Jt2b#bh06goE9hdZ?DKBo.DI[6L6p:r#+<VdL+<VdL4Et:R9hdZ:ATDL.ARn8NDf$V;A7dlA@<-F#<-`Fo4X*d8F)Q2A@q?iJ$6UH6+<VdL+<VdL+?X^e;IsH$Bl8!6@;]Rd8OPabF_PAI0fCsV1,h0Z68_4m6praa3As5Z75?kX5r(er6T7Io4>1bt;IsH$Bl8!6@;]Rd8OP`L+<VdL+<VdL+<VdL4EGUBAS*u6De!p,ASuT]6p>a9Bk07Z2)dfV2`O,j2+BSo6npDV2FB2f1-%'T1.+Jt2b#bh06;55AS*u6De!p,ASuT]6p:r#+<VdL+<VdL4>1qfE(s%f6tLCQG%G2REc5eY$6UH6+<Vdh061T83^dP#@rc:&FD5Z24piDT+<VdL4E=tE3^dP#@rc:&FD5Z2+ED")3alK9F`]bj+poG8+<VdL+<VdL+<YoGCi4;TBl%U.F*)G2FDl1_,%u(?E&oX*DK@F=A8bpg/n8g:0556=F`VYF@<?F.0/5(50-WRe+<VdL+<VdL+?X@SCisf@Eaa'.E]R-@@<-I4E):RnAnc'm5#?96DKIuoBl%U.F*)G2FDl1\;flGgFEMP!Ec5Q(Ch5d;+<VdL+<Wd"Eb&cC6tLFLEbTK7Bl@lQ$6UH64>1_cAi`gX7Qq/A06fO&D/a?'FC@??+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL$6UH6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+:956+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<V"6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<Vd6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL$6UH6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+:956+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<V"6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<Vd6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL$6UH6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+:956+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<V"6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<Vd6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL$6UH6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+:956+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<V"6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<Vd6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL$6UH6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+:956+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<V"6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<Vd6+<VdL+<VdL+<VdL+<VdL+<VdL+<VdL+<Vd64?n(0@:O(aF<G.4A3D,\,!S9kmJm__A8bpg!+^T[!!!$!gAjS@!<E3%!<E3%!<E3%!<E3%!<E3%!<E3%!<E3%!<E3%!<E3%!<E3%!<E3&!WiE)!WiE)!WiH+!s8W-!s8W-s1eUK#QVO?<s/O9!!3`4!tbM9&HMjL!7CiI!!WK,!<<*"z!!!!(#R1G8#m1M9!<<K=!!30'"9AT,!WrN,!X8sR!<N?+&HrdO+U8Z)!!k:n5r'Z"#uO#)@3dWF;K77)@Z_s(Ts=)61i`p@_9k+fiDVXdnWKV7<-(Jt2b.@+<E<0>ZGP&LnmmApPD!MBZbt8P.6(r2FXfC484cEU=^#HOBkhg8G^4UhL51SAMNjBlQ^F20UnsrdW2Zf([C3QS\[o_u`lH0Bb1+tmf@\d1jQ5OekiqC)p%J.Tq>1-F!"K,4!!3-&!!E9%560U$hZ!Qsp\=Kr[qYQ-`T_f/T'UpHcVj/dWOHS97;Zm-eMQkVU6?OUUeB$rb@G60.XH>l8M#f#+&Y8jhYlnJYE7Ye)nS&K:EbSYH7CPCfr6Nad,sY6pt`d=3D*]5Ic@YLP^+:]Je^"uLad&8St*'n>FR>@^O,^\&X3$Oo#EC[C23`>GB?^uOc&0\1O!7VmjjeC$;<?YJsB:ioRN5roV_kQIeW;[p=oSkQcagTaa]BoqDim=rrB>hIeW;[p[@fl^/P%3hFmcsrrCHifY@BIqtIjPpU/m_G:1[Bhqe(@LXs/pnlL&']Yfk%M8],^@`[jB'bf2"e4I2\UrMFD",<DIU.D9A?W4OrIJ_p8qqf=W'7M%t%pLY>H@1PE2r3;f^*75@@+eD$(M$7k\1,e+M[i@FX#h$MihA=23n;7l21]:Q=b`=T^&-^#fVcK2pV2(LZ8qNoq2Kbir`bpf2fAPsm;-+Ma43[c*mN@trr=*YZb&.L6O8tH?$ER<kDq!_XOe^pbu3\r(QUAlp!n/h2j;p'q+pSuj6+<SK-t($f)25r1m=b6D9]I[UF!VJ[R-96m>KZp@OY3a/Q8XrA=:)01knD5RGa%ip<f8Q@k]aZX!LZJWP=<6l_pai0;8_<eE?\"'lV1rhnAsU5FAYP.u3;ka\C_kK(rhSrlK@T@WIUWLRSrK\$p:#mmsBlN3p!^j*9^k\SN>CUT3h$.E#V.@1cg<HCT^Z#.M92^0ps@_LT@#pHIQ*(\,4hp02jcK"32J8O6..ch;hKNg=`3'cWcbA>o&9]KJ+N38EQa:du)d'\.>g2m>Y0fm0%^8n*kNW^U;pW/b''Ci0[0]!<NLIZss2(1H[gbcgTorr@b6I$*`SbI=nbo-)f^T)SfUqV%rq%$,Z+[bS^cId>]AbPQ.Eb\ZV[=DkY8>\tW`nl!n6D>NpbUmP+]aJhkn:W$Q7;/^LAgs.-Yr6!d$*OE$9B82_YZh@uM)7DUWDoVd/P/qLq>%;_nn=kNXXpTK&9isaQH"n<M/O'Em2=O.uB;/S`E^4B^Gg[M?Jc=EBJKULRoDop&F7f4qIm`X`mlmKA/_&Mk]m:cMD>qlH?HU+#\@,`<gGKU>Mp,[DGp/;R.[[3@(qc_,Z5I@lW%0$hYK,53/N$K]e3tWu\$&m,O'd*+_:nj_eU+V9^%M[%`Pn5!H^b<tb<qDdQ(Bo=3MV>3L:WD>2hJ&qU,Zne.V!^9N]Bta7d<UgCAMUZ.-=-ZC4m3g1hQ%<Gl3*7b!h2L$BRORO+-dQqd0/`n)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"oah'&Km.pWq*XZcj-R\9a74Ynqbs1EgV:?Z`Y3H*qQkG/2KhGPLnWJ*f?rW![5`K$Be(UrWsP%9E`HJ/cb4_@iB_r9qnqIW:AfI_FFS(EY,TS3*m<@6biV9%mOX+KX35#;G-lBkoQBb8k(W(LiMelg=HFJo@@q.Bni4c3A=35IMDpj(A<EkQBURCZ"=k30O:T*Qd+eO@\,!O`hT!9:rrD9PhV\9RpT!-K3G7parrB^Nq$[3&UGm7DolmW]qq8NpkBiEm!7&-)kjNupn+_4dk2H=?HQ)^0rrAh3H[k_;hnS-n5F;u[jtFe_r>E5:rrB+5qto'W^ZTs-rrC?TJ*??Mp[@m'hr`nt!.,X[J,]MD_g?n+e).q!b<M@)rT5cS?i:kSS,WJh^&.][\\I<SPQ(X.\UWi3IeW=+HJdlDrr@Baq1&DEUVhG.p!_g5iQFHQ&,kWDaC"l`]:8g#X1eE-ft"l\H^"I0cFJGgmsb$"pj1i[iVrn))Ynm_!2IGYJ+_:J^Z!@#Qk0/X0?@N!)7uC<!3<g1qq8NpkBiEm!7&-)kjNuoFoMH-YOcu;BO-o$`dRr2cX;.pq+nYH*rc69YOPh-mqni0H]*,Zn/J9=m]Q37Qn?Fh1RQmdMpl2jq91^De?pu$V'Ujs7KaCkbBtuB@,EqfVp%qngH0TVXRAm&[<H9*DMd+PRr@Ec'6)O^F1Zo`g,iLTRDWSaVlXQHn_$$I<00lhK!Il4UfdM;_!ZWg;4YS?5%c)k1ZbmgbnJUJaWsbb6BXh'9po9(Jj1L;^&<2hr<E4gT76O2O8LL]48d%r-rBPSc#8Bp/\XdK+%p1u3_-gU#?l:gleC/eD!uEl;a8ksLE76J?7G*)H=P3K,:,O@C#c55j-S:ZCDPLAq>',9@!!tR=F?D/n_a;gfDTQJAa:tng3YK"B<`9^-Kd$fQ.ap&0sif))I^0*53j:n/Ye#4U8&^O;Fq4B-1dMSUW[-;<RfNXr^g0"'bVd3c0BO$d&ga<>tW.gF^N8bms7TU_q+hf2\5f<f?=0or>lp4rrB3nopl$^LFiF45PLP[+b0,rmVi*-p(Mq&2`L['Ee!o:0Dup[hV9hMcMRFK@IgqP]KaV1jaC[l]S.+j.Qk1ZDToO=W_+1sl;F*!Mls7TLF&"PU'ih@aRMtB.-acomTr-RS:<4dFaY#l5F;?A;^DlY2.BMF3tFJ]5s*N=PH6XK2-!OQ<mjU^VF[L`N^P0q&4lQ;GBW+<<Z0,<.`&4:1,>=<fp%X;9t:Mpn)"&X*s2FFm/I'VIh'1TI'hQKCBc<$3nFVJ13e[JAXY3Q]jY%th1r;)Bnqjc[SHb>jKU?]\<X#9WF]XNoHj:5hqNM>-c^+un(k>.MM&5.?8FTIO/I2a0O'i#I!4u59dH=@,hlP'L9cB&OQN03,tK<+@BraB0m#E(C_j1E,\8(c\OWB=Y(!5sQ'_H)^O%n'bR_0IIeW;[p[<S*76g:8cfSFro$mYE]DHd</]IW$jDT@o9@?$GV50Xq0nS2mM]YeKm-NFOoudU:0\MT==&RQcUo08:-8HHnRZVp*rbk"XV>+?d"*Nf#VITC6EH[SpFdGrg4K>q3<bjE]1n"=09YRJMro@q7SuN+>4@tfa.-)/2>p$cOk5g4(=C4L>@5O3,5,=?1-;&jb+)_nH+/Z^orI+S#b]Eb)\,!O`hT!9:rrD9PhV\9RpS>:r3G7parrB^Nq$[3&UGm7DolmVBqq8NpkBiEm!7&-)kjNuo-Zlih9E'*a+ZjnMH8DOLI/M+BI@8i:gMV05a4o+7hn?sr4it9UPh;L:;bV4D.Ol:uW=i1[b#TEaFEs]oN>[?&XaYAA1Ci4,*LG=R"6FaJbkC_eqjS&%[`0M`ZZe*Lgs0rO)@@nROOfYnV+G801s]jnKj$ti'o7uD\@6<t<BV?\B.5,q9[UZ`$FtR_8AS?i<J#gJ5<q7'mse]*N4i0$H8jmY:j",]m4ISYgZr;74:VaGp?uF&1-:D<FtW?CO_3ER[k!Zc9i53Vb\*iPQBn)tQAUX?9V.',hpAR'2BI(D3g[$n#3k#,PI#I&e_7O7?KUSph34q`mLA-bj/6%$\bbUFq'E&gOikj'_$_t3eE/_ldi/*>PSDPD;,Yk;;(Z&"_MKj<ma!HTJU&PR@S`uF+FXP;O+-d_q\23:p[<Drrr=inpfM.]q!m%nYOUB+?cK(W&$bu3HZ't5gtfNup%:9c\=h\?,;i]6o4td\dq7ZNhAb2VR<fa5.]Y@PC.lHeVj9=X`j3?;5N,!i?D661pS\!JoXp[.H#-4"\@,^ZYWH<sCf\fWgfnD;;hiDQ0$E"7M7@af2)5lO.aM%W_S>Kn6KmBY9=R&I3Z<mE**!$2H>04RP,>XE5UD-<2t=]tH"KcYnm4PYe).k(On'ar'SZJG^.2/`;_@SgH1`Kc\*b$$Cj^HH@(Jgs%h2)kTZ:r`PsIjlEqmJXEn0>fW["q&5]0:)pAY-aPl>/Ua#.>Xr/BF#!u"Vq=E'fs7>pIkEUh;%;,QMbeKm-GI/qqAUFA=)DB'^GLDAS4FOq;YPa7^Hm2ZP1+AdOq/4qBVfU!uC^"!p/I$sdRg_/,_gOC>m]<nH;=jjTn`pIX=^#c:eR*ln<WKVC9Z>VeR72i4^,W_k.i"'?SG^!M8FrSa[rrDGhc/19UXK,8HnDB_9F$2k8M]Bo%k-DCs.a8k8@+Wm.#D)8&5!lu`k,,_qUK-dGWL@V[K7>,RmQLI",O@2[&)Y('2G[t/:Kgi=Q0Y$Yh\uYF"\7CdOkDh&4gf(aWXuj'WJ\"c?U7O05c9a>eeg<".shmlWV4X2hKplS/%0Whh"sjT.DFe&c*O%bi+f$cn[(K%W5[<8b`d:AY+ToO,[SOJBPK"GaClri"pX%[Q/a"@f**$dmI/p!QfC%&-p.7=Hs!Pk2U;,tg-(G)1$oTHZ@5*k8)JZ:^E3dgikubLbtS-)_;erm;&\FLR+WZO#`bm,-g.<jRt(#9kc1Wr[sgqfS`>L#A67MK\Q#-%LT7/0F@VBL)qAu`K,I)rKa9F+e8C/;<J'!@/jF]#HuWL/<hc<GqSQQeobi5eHAus>O7nlDHhY4lJ!O16/2uVh!.F#'pJQJpY.qpQ=PpZ7W%hE2o@]D^9]*mlc<@NIWRq%)N6=)%n`cKDQ=pj[l72N4+uSsk='+FTNoskIK`;&AU)p3!Cn;lTr`s@j%ZB.G#q9P$qa55N=(M/c-!sM(KR\5[Z3I4HFi4^Z7&rH#)/OV[,dfL/EA&MjhsCb#f1Kl7.up$R<NM%FkZs%Sm]0Yt;97gb?`>TOhnAGtL<SX9(*aR(2Z?bsS\SlXZoOX'D[fuFPJh'Q)*1m#EOf=T8r?d8Z8gX!'^7Ff_XA2d3k@%D&&"&Zfc5HN+$l73=4(S6=\:/KN\`&CWe.i)OiQ'=Pr)M5'su:=2.[M61ohm"`lsSj##[_lfVYaQWp%Uhl5:U5AS#:mARTQ#^t]Opp[<!+k'Q4YhYlp"rU8V8!WN.RDuBV8q6f`;k+BZ<Qgp!q7sOYadbMSRU"pUb\^eBI\2Jd\0t<^\q\'T`=UH-;AMb-),E0Z/#F0ji'I^Gp*q_Gk!/1FNZM?6FrrD,P9PqM+mp=?*]EW/Hj3D5?q\s`j[e;p1Qok%dclA<V/j?!HVl_dTECJqr>=<3iJ9qJ^0/]'8AS<:.jD*o=P98k-VjZOFJ%:tiYYkL=.L5h]IeTiir&nuiE;opONI8M@!7Bc=^\[3_L&V/3b<M@)rT5cS?i:kSS,WJh]nZOehTa=F!'Au.rcQEa!(VD1^OO/Prr=tgqq0NDrrE!=)r(AmY+GUl!"N00^jkf-IR=&7kfqo?rE\mLhTa=F!'Au.rcQEa!(VD1^OO/Prr=tgqq0NDrrE!=)r(AmY+GUl!"N00^jkf-IR=&7kfqo?rE\mLhTa=F!'Au.rcQEa!(VD1^OO/Prr=tgqq0NDrrE!=)r(AmY+GUl!"N00^jkf-IR=&7kfqo?rE\mLhTa=F!'Au.rcQEa!(VD1^OO/Prr=tgqq0NDrrE!=)r(AmY+GUl!"N00^jkf-IR=&7kfqo?rE\mLhTa=F!'Au.rcQEa!(VD1]B&tlK\$/'1Jd-Fnl,@oF@T4&rrC9XOZgV5)=<XE<OnZUfNk2]pHI0MemQ(EG@g::27S%)FS'\h@ks9g<'ng)a"1uCOm^`6P6]?^QT`ao^j<>jqe+u.E-<SLb&*`sWl]*`h7b[j]H),a0<_hh6QJ$Z3ju%lH"<YPVb(AD&s=@^OmQ_a[g$`bEm`?:j_LlqhAXCIB;gtafVLE`UoP+7<Ylk<n)"&4^@u".55Y)]%r1f-g?H>Sm#KrZD-WPpWjWE,m#BTkb"odo-JI,,HR$)mXcK1H6hckhMoEhJMd#p%ZJ8dcd[T]N@=%*Hmk2K4D,e,o@VniY]X,jO#MiF`(MmP21O2HcV:QgEeI!344E9XlDddX4qnl8nFL:YhbC:6h1=%;0G4EG/,O$1Qku2$ZhYqtr2#dR7CL+'6YKUjUJ=d];cG81\VkqH-\&h5'hAbagRJ;[d6.PiS3KDei6R;o=WEG_GeF.akA+]ZJZfJ%^.:7O8C@X>[M>\fUg3@DV"Xa08GpM0,U8A^c3nd;h[PF(oHZ.J(DbAMio5QYd8bhueA\2EFbK#=W`sQi&VS&=/,Q1Nh6L,=Z5K2\*iU>Xr]C1gD\bt<u7b#p\fO$ghrr<X$;s0/0I7(R(kUjO@PNiTC;hsTE0#+1'dB$':eVd8LUXmZ@-CVPFq54/l0TP.]BAMGq]4W3[2jGI&f=AEfUCu)IQG"Qrm]r_D<;!W`NMb5-An<$X`ol%cZZtnai_90:e-=r%/:r^0J$N+:5T!`%hqu,uVYKPMeElGRX0R(*YWE2kl4U5aGK04/Ha7jqN@0`IQCC%#YE>h0NiH)\-W!q_"(jJ<qk&@VXmIW7]_ASrh:&aS:t'<1a-b2qeHiIT:=<]h.br7I4+Pr4"0fNfgC2Ui2$W^g'@(NCbq,$Io?H*\Skm+J&,i<;i:l\M-X1tVq$5AK1mOUthVH<(<Kn9r)QpO8rU$kiBWPqSqapM$Eu-DcNF^q>YPHfM!*%P^[Vp-Yhd"E%;qJ^Zf\7%5P2C%=c//>eCX#Rl287pP-;K9R\(jRO8H!E)W8:bop!fcU>0=Ec^SJ\C1aIKuL,W=b:]#WjpN.Jl5N,APc4Aq%FtO]:Oq$tPB&hT";mJS_i1TH?b!qN+?fc]m*;CT:'*WeMQZ<6b.^Y$T"^9"D,Pg*o!&3i$WhGH%j?:\q.2b8&A%V8NDhY>_<_r:GhNHm1(eLR,(hQ+$!4',E.]di%mX0:VCVKcoqSSC\;5d[Rc3dQYrgnOdqqg]>!6VAA'fkd4kMG.O>pnMhO7l@u8F?d5EHiI(nD&,RNgK*[ogFX298V="SP`1<P7+oVo`k'`N:e2-P"?mpUTMU:YZ%k5_&qj:n]0a?>79#QWK7&ZA`L=AcNOe.K5fs\aS!:<b09/['H:P/9+Ete\X\>Np2Tn3H>RQa"[,RbbS5ssF0RH&ViHqFItcLfPnmL);U4F?/2[PWR2Gl;_#Akhp[<Guqn.Df(Vb=k^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^dchW"ebrV3O<E;ItD+\L==15)N_-+8;R2G1sf$p\I#*%B0Kdqu@+tOSkWFM6hdT1"W-!:'%^&-UipCHj/q.ncnFXJQjR>m>^T3=[kqSm9@O,8Gp/0q*UZPQR=j2s_3(1CKU<!X`W.C['=pV2&%=\Qh>3EF]+XJSKB>iO(6Pc^q+<Oa[P&CiXYbqfGIN81o-@Xb-MpV2(L^9O)BXqmueYh;-n-Fu?(3m;/P9a+F.Ou\jt74aQp\n6e(=RaHDe.7$&msatHqQK).b>+e2V1$&4gTNVrVD^M[ITFS)Y]@Qup^3+#7^&l56%4=)Vkn?]N%T&;IeW;X%X\TYpqJL]E:&&P^o?$,qds991HEVU/@&@D>cf#H>Z;;.5s8b6.>,^f<:!M7T[d?cRF\6%Y,Ul=p[<8mn)"$3hYlp"rU8VAn)"$3hYlp"rU8V-5P_qhW8G9UreYs=W].rUf__F"r)\@8N1S\E:P[)O"[A>lD7TtQUld-6+-jpU8kC6Q+d.F(obABnn)"$2PQ(X9fD0Lf!-oU?+8QshrrDnrhnApE^!+NEj8!hXaACq6j=b7K)B-b5_+0XE)4Jct;5K[.'\1]r<<T=sS>M]aDB0$^p%Rp(p[<HiotL4?G%Y/uNl8cF4st_p9EsdT#p>SR:S#L(A<rZS!D&fDe/4uZ'p:s7^^rd*^O,^_YJ5GY^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O$:!UV&Y2j7^L6Fr+n2C/)6hUHT#aJ)AF^Ec2o=9n_9RW/7Rujm'd#<[bq^NETIg3+J+>pV2(L]la6Arr>"Wna'GZln:q-_:(J*][/s/n^1u2$Rn\>7@LD/<s8;h]P!0.&Pt`-.GU"8AH4[(HhY:%X8V/64dXg/10/>]_;;fTVH7IQ?.HMB=lZLB=\(iBXf5FL8;]a4$G&ZVYkRU8p[;cl8s%1fZB/(;+G('="EFc3rU8VAls\RS+a`+L.NtbC]uAZ/>enS,9o7_PqL!CRhob1`MYlPU<l4G(g,Yjh)>PK7++EtQIeRG;#Q3Y0Ve4LX@f+mbN:!1A9Q=$E0f59rWP7Sk(/n'PnG$^@^1]qP^Of']8S)dCWHn7,IeW;X..)ul0'h7rHZW*5A14Cc-4^c^USH"12$R*EQSCd%Of,(ud(;BeA0?c&/C>)(EWW&+HhY:%pUAItp[<S):qh8DrR%j`,BloNfm3LufA.9K-5(]$HO3h55:_b_IG_MIk)tb1SW[Y->$?b-@\d9LO.l=:IeW;WY(*d]o&p#C41INI36hI'oiJnTpV2(Lq`=`W/q<=7]7^+`6]Bq&!*+C?^O,^gYJ(`hNQ8_].eJ2Th:]H,j4p'IP=o,Ic=SQfY0#b*)R?ahVR!@JBkNir!%c'X%t=9AIeIHgqqo*ahnApE^&-^#qqo*ahQHkYbZEm:aKE,MOk`#W@WtmaD(V`Brr>RH_RB.?F_,R&S:C&=XP"Ipn$JgdW(:@o]TmTfaeTADb05,YhnApE]omm=FoGYG!8^4i#QBJr^](8-msb$"G#S==r^QY.CAaU*gDuL4]DhkYD<Ui.Fla8E\[O1a/WO(q-=:Q+9j4p3F3+umJh!`7?Io5!r;66'HhY45rVPKcqqe5Xbq%lS>Iuuk2qIboMuNdP:7',TD/<2T%dQcRhGbf"[smA=9gpN]C%>sj3gHjF.;?31@o4[nHhY:%XA=<>msb$"IeW;[p[<S*msat>4u7Rum!k8UO%%\!Imr@pMo/c22e?e\[KgF&>$i8[9VerXo$g=/P*1qE9j'0u\l!"$5C<.>HeXnI2oT+$poUi2g7<AA8'=rP:A_MIjJ%B7e%@FIVu-hBeuISr*<WWrXTTqaBgXUT1;'p7msb$"Al%<tqqo*ahRjrV&,m7FdN?V]B[l^0_M<%'8'S`rKj)0`e.U?^bI78r*L3@tP7cGQf2INtT!!hU>Xp@e!Xbr$`bm_9N_2o629A[ebjYA6FcX>/^Ga0eZ/RhijN_rf[2XIr?D_AQCq;\(BjVso].Rh)@Ap$BQ3eiq.Oj;sjO'3e5m)P`U,R8fUYBc,GX>ElUeA["F.rhGFO*ueJuSPO#^?2KHG045b0/mBb>46B2ER7Gp\2etdbLD"g)Hb\2-J0$nOH$(`PjCW;!kB_J=qdd"10tX.B4KW0pp[0=sscb/7G+&ZqTq+rpB^cP5UH1m>gYm3M$,_1QQ8@H!+!YZ1KIjP#Ge.(n+EV't:C]->)aDd6e'o>*u=)AgFruEcp&MW@N!(&ld@PolhV&]\5?-5Y.YSn>ZI0rTq)l#CXG_msb$"IeW;XNW0!q6iR.Sp?Lj[QAtgUHP^[%<ch]kM6beEYbT?O(h:/;j9>hm=dXqK3mFZc8fl^@ph.QGe"r$n@\4F`l!lrE@__\6Qd+mc<VPg,7G\o=l8lPjA?W&e'\1`Np3Sm0EEKf2KPulRDNse*rr<XkC'oc_hJA---#?8h5te;g"I+0bi01].Go]US)8._)U,2X!^flt.,^ruOptss-S%eW.p-3ou^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY2rrrD"r5P@_l#QFeo?onbr!.E?<ooT1RKf8r2b_u88rr@mgGQ.[3*uD/F[f6?eh2)(2W7h1NlTk45IlKZ=DgMQ!qqUOM2S1c.a5QQQm8oInf2?*uoVg04eCRc$7nZEKY:HD@dn_Hl/AXV7O?La[U8l=9dGq1"2&3Ol<:j.O.7IsNWhi68i`:5%;^AXK#p9WHII^Ajb).gq_,Pn^`k[)/-f;VnO8T0+r9]"&!]U,ZrerIirrDG]m`WB(Rf<AUO8\(0m/I(4]<"6o3;0HQiU5V!dnTiB;s=5]qPW5aqu2/ZrcZ'NJK+Uhrr>M)7t:6[p[@lh^ZK&+!-kER5P-So&,sj;qtl/\J*0NbrD03g!:$2*p[@q_oD.,?!8[isrrE!7>oiqFgIL/9iL9cHR?.=+T'ZIWd(?ADq`+?=mN1cq!1bt(ofeH:!31JEfuO(tJ&i<!^NAB)"SaM%rL*/IHgOS<lE?TT!#YSXYW#!WqWZ/6?+7*t2g0"scar`@1ml"tY/s[BiUAh<MMI4`$)_p)Lsb"3-84?Pnt#bgI<4u6ioa`g?]?"s"1*.uaM*hoHac"4\iT,N$oZemrKjs6H0hofoK1'm[WlfEWYoDZL++EVKHd`6$`4GGmWr-h*ibtK/9"O!1%W^7RZN?aL9;C>EY`]6.OdI]IJ_pPbMN'/b]ggK/)N3J.<X7f08dI+nOKu0<nZ<^Y]AJjI#+Y[Y,cAOLl3Rc\$do\<_0%2Ci/&q6^OMWF;h/-_d,h:&,@[$gHXcf7!=>Pn#1fl]pH,Wn.O:X;PJOc<9UF<]9\1!AOjjZNPe=\OJWG.RH]qnf&PM6<uhKP*EeB$+15/X6sA1s^Zp\V**qNg6P&].rU8_\ne7b0(ZQ<WG0e4#gV^H-Z?g/5DJm)C3:GX;ELGQ!8rRT:\Cor',@-#GUaoG4<3,&[UREWnP]\A98)'S=]K/Qi2tp/;r-?9M5.KEoXeE8'rFQY(_H0B#,u#A^M>(-+oSmL[S.-.\8<PRTJbDuWW9;4P<7'-tM<Q@M$!6Ys2C_=kau-=4j;\!jY]n`DmOu>%q??m!_CWEK)N#VuJ'3atk*X7UdX75A3%JW."W^!u]s$6R8qorpQ.99CHld$[M?RD-I(`/VZ^0?=rY&f4[*;7uIh"D,8=$&)gtbmD9WC@URHSU<PIKd_B`fj(:tX!W2)Iq@R;rrP/B!NR;jk5Ji22"Qra/&"rlHZ2>XIWCF>sC!Z1m^6pA<S@fZimArU8VAn)"%6rrDPd^ZIHccVN[f\oqE!bq;qgrZ=Lrk^Kt+P,HW`g`+7o.^F7frrAeAo$^.?rTB279g)/[crT-ar<5Of!1Z7PJ"P$Tjt'jh^1:k7hU]e#G?+QdO!W>'1.li)Zl*`":L:6X)m5Z'8IM\&ERClk1IT54S:2fN;>SVEe(?\.REin_0<1'K*f^:2e`@8>="r]fY#WmUi2QnJhY"q`:0u;]rU5*jpdWm+aStf"?GQPQh6480iALh,Y+GEqE`(L?2o\W4,mS@3?9/j8j_4A5fZC;NTrGE+Zd4r[TX@2o.CA:9-TC!Cn\*,X5&YAp0!&[6I$\/]@BE0S7d$nKH;;<5P]<!Z.>>W>N&<0;GU8Zi]g\co"\(,Hg\scVgbgh_+kKAIe3:1DQ)^chDu4O`N#k89hi[BareGsro_(4jpV2(L^O,^iL-P8:rrBA%q8N@6Mh1G+rr@O<p%S%Mq/u];ARG"Trr<fR\psJ8mU'N93WB'qXN1:A1*?C[2ns\erl`Wr^OGp]fCC<g6h:6W3B-CiadMrD+%#=#K$8B:,<J\[l_`S:ZZfDfl5eVb9b&H!DS<*+g[t+Mm8L0^@pI7,!$JMqD<(Fqrr=PSraRP6)4Zb-Vc@S_W6"?gG#fM5Sp+drE)4(0G6Lr#j37>c(-<0=,%-G1V#-n+9*i&B[D'u?hqk!<OmE"l)CL4Y/08LO1G"JAhFQ/uq#70mfBMb\p9qg;!5^+5QX)cjGW."ln!]Y]`7/Odfh<IFkfpkrM]aH*4\YVXrfZ'eeJ)k+qgo!n7,flSns973GKGgD!//bt5)U@2=e>*X.:8H!lEJlM1>Q;n`lD0SqHA/a<F'7,Wg]I.HGi.X(e<f\'C5?:Vc2Nj&LKjrcYaUAN>#=+V&GL`7K3?+^7V%D^O%?c,X:6!pg;r^/>pEnS(VB.PdI_[-Y3.4le3fWq3o*L`sm6)FgXpY?JU:GT3?)*OZJ7"8M"10PPu4ENW'_u?1IgQhEY[\J_G`mpBK$AQQ;6fdPOHm]lmrYeJO+c"6s,#Bf@">>d`1+,%tT.A_]f]VCLdDUS#>:L^KNirB"qHpSEAaO+H1;rrACXF'&!@b5SKdFggn!SE0/SnhbVdS%j.*Pf!^jlg<XrA\r?0^GMV'nl&.lUo7@lWf@Fbjb5Rrq(M8F]fmW`4]b^/f#>_sc,c!8geC]]Y1oGH%V.<5S_@;&ONEI-iad&&Sej.\bShAI.FI0PV_*YEi@9g.8tDW@g6'-L;^]p`"KUaO5M"m:%?DS/m%A\Y52,u4hW01UQXApF]=p(F-HlBp?RL&oG&u[[FD`QKZ-g1QFCe.fna!S=FV6upg[r#`q/t)-:M&YQ,GLWc\Y[5VVLl)gVhUro,b#YN!$e,uK=EsDZ*rQ.5473k=[SAd)oX>>.EmiqEGqoR(0@rX2&e]Fh\@IHmCa\='A@g5.D,ZPG4A!XOX;sW8s/Ho*54G9g2qPOqQaWk0ZWa+4%%,?_TL,QNg>_4L7HhY:PYJ&QdO1tS]hYlp"rU8m*rr<F?rrBA$pnRihMLeS'!5G/5IHb>C!"*-6!4&ck?i4!(^\?f-O'j>OrrC%$)ufnQci,u(p[<E:He.f@<U\e`:6FcndeP!>)],8q:MA<thU_&+jBHP4D!ZR^.j%p(1NUGs6rXln\]XhV-CRGZRG1^6&P)*a=1>Th=`p>3mS3YfqS0-jrC6,1S'rf-)f+ip8t$)ZS@20pjdJ5$C3"H=3;?dSKoP2_2<4#j9dM)SI7uJ>OVt06*(LE&Wg@`4$4F/<i-n5kmrm=_!'oCj4(%m#NW0"Y!2Bps^\_^A5MttTJ'>t4nP==XkZua]rLA44rr@$4DuAjsrrB%jJ,N=7hYmHS5i-uP?i.WurrE'!UC3j3qe5m$r%h^O1&h6d;r+)B(NkN5!,!AOrPRI+o;8#VVpYMEohW>Lp\b2>r9]"&!]U,ZrerIirrDG]n)*WZJ'>t4nP==XkZua]rLA6/pCDHI!7%$OqO^:X!7a:3mdNI"4$Ui:q42mlrbB+khk)4o-Z7e@l5d(7H`J*WhRRL\e_,7"F`us5NRtZ/<:WlQNV/gc9%aWm65UEW9^8_;\Q&cj3W;hS!6]HGho@sPh.PHte'NGo@WhATDK]"q=)up\*K?/XUT2T*4SC-='@Phu7Sb5jY9R*g5boqF[Fg%Om9R!jVVoF2.SAKN2G.^diN$%FV5@Xt8pM!QR-&TRR=P-\pV3KL]uU)3T)J#KIk[Ml+CCX'po#8\^\>rj?Y/Qba8M0^aj9ldY3>lchf$&R[V!;6c'JA0[:OjeilgfIrYXMk?Co:U^O,^iHhY:%gWTCDrrBoBYeSE.inhoTPM<i'Eh-Rh)qT+KHj1Cg3od@l1OIuU/W[KKRn"]bb&>PL\7tFoIS'*4Bj(jgY^'Y&&gOd23&-tV^Quq24i[EOkhW`=1U)5s]4:3`bF./<XDZ,4gGYZO\YbF(B</K>AR0KEc/ms(@U<6nFH$thj"&$clHLM,-q)mjf;YC_7?smp2*;O7aHZ0Z*b4/oU1S,8E/Aa*?kKpHqtI_bTDfEer4![T9a*JtO.28L"csY8V#.'a.PT>jWa/1jJrcV)CM@</:^1`p^_L@Tl2b`s?hd>C_fLim.!r#Ub^">MC+H.+ojl_>A%\.1EG<sB<5@TfqO4]UE-UFI=WXKVkl=fH_u<c]7TBBfXIj#/rrA4C^O*!,R6U1u^A?J$>;<d>')\?UIJo8Ie&b`7:\NYqVs7RLP_KI#1`KeO;!o@AZ87okWGUXQ.8RD9eShIfi!(BT,<t-ESZB-e=WPKOT=_>`Yua@%e0eR@r!Zd7ES!\n&nu<3Y*Uf.gGqBdmqiZg7>@]AqPUh'V_Xf?=U]."-QsL?.)4Kd7Ob0LINtChib(K+_$Bc4pUr/j6`[g8V)o'/ofm<[Xi]0XQ*>=pRr<T=NSTJl_X9RtS"P0E1`8DmA9#p(J/*0A)!-V*8D0-UNjbG;A+'o7h:m]mp'06pm/?1Uns)1OagQBs"Sgcl+"'V5Au)Q(WC3%2!/=E]Z:<"%=]c:Ne5O[b4LEWn8HhL7A!S!3UW2Wm<`@*>!/Vcqm0E#/mgm0[qDEc>;uZih:@[f(Mtq,c]AGL#X0ae9h6"nK=m\B*Pc2]A?2_.=jW'PtMl*sQ>-uIWR,$FH#u;m@#?anTZW1FJlD\?;1_c[ZEF7ckr6P*RCR"U$ndfhBB6V?3%o\VSc1R^3R^Y/cn/-IqWQ]M1Ek\GW:.I7OZ&lY:/uDbm8b'&]"1"@d"N.-BmeLXJg^[(kP,:&hNiA/!8N]Ns,qP!m>"DJ)6>fBs&*Xo)^#QfmpZu/Zmsb$"IeW;[p[<S*msb$"IeQQDbie0VG=tk6F;I[575&@enVJmmh/m[eQ$)L&.8I0Gj0:?_]f,E+;+r<>NLq:^kq$>h4>OhCIeW;WbK2#n8L1U_o#iPjP05(+aWuncSk0rZB6RfV,i##@p[<S*_r&0)hn>$J:%>R(HdUUH'D5]#hK4T)5rN>1)JM+c4[T*]WjbGtkVhNK9u#M)<?mS7LBl_Mqqo)U.DM-Lc7#V[>4j4'Bs]+n2BKp)@pF_iXU@_3j.L%@)n)0e)gY-r?f(bMhTD1!I!P/jP`RP5ok*jL2"*,rLF\_.eI2Ue6.KWsG9&0_?n:BFPGT7d)V-gO*rYQarU47bjTj4DY'r7XG!8NZmIqE>B;Nn1,`P]qG';Ye]I)1,O;&=Pk,LE[k_WcN%<<!bkMH1+hX,[I^&-^#qqo*ahnApE^&-^#qqo*ahnA92oAd>NG5SN1Xk--D.^0b;lYKk,nZch=JD!Tn"tI2N`4+K5EYPoA!IJlgG[Jl^n)"$0SU:+GHhY:%pV2(L]r(f0PLjcEqsgDqY&!<]frgb!2->*uFq6"T>I!J&*o38T-ceQq2HH,$?p[4OMPe9`qqo*ah6QqP^O,^iHhY:%pV2(L^O,^iHhY:%pU')Ph3\Y,[5T0#h,t#g>AIs314+d<OdbA[nQ:Z/CTD*p[s;7eK]to/h5mUa&3]pJ^&-ZSIkNubmm!*YX-)8ll"]bC:E;#f40LPP<#;:_]5Yp,0[V,Q4PBY<_NSMFL!8"K'Smrf3;r=&rTpS3pV2(LZ+$RD3HniOCqW:WW&jqY1V>$-0oVtr"%eKf@Q_<C1:rGt;aH)0Q:/>1;GJR(<;=kBIJ_p8qqZd"IjQ8'<ESis531rZF\djirY&MJpLE7lLkL?\-9km>ik2AU`Xgm=ei@-HA++m@mpJ(eIk;1uh-WfPP,dfINTl7rfAt$G^.O</8lZ^fEUET=:"o-%)YFMfPuHrjg^ec+^O$@&+EVa%GPn#sri=4P-iOuAl&R.(k\B(>S`&56<(WV9'NKuF#GdZsK,jMVX_oU<&P+2%hnApE^$`B1:_c5q:]dQq!!'5'%KHUg^&-^#p[?u;n(u.c!:qE7!4!m=cho`qp\sn+?f/QohnA9hn)"$3hYlp"rU8V;5kkN_!+]m8li-qsr?)%%=8Va,HhXjtn)"$3hYlp"rU8VAn)"$3hXpgJrb3JJ?(L0Y!0k\,!.=6BHhY:%pU^A)p[<S*mrlPFRm68BEaSTspQtmIp4'i(pV2(/KAXB>hnA4oQ-%V>ZC*8h8p@8Ujf@]&FnILG4I$Yhob(8):F!J-ZcbJ4`0*\>POIB,n(uuLpV2(L^O,^iHhXd<V>>[fpWmF<I]V09++:Z.7<#/b8Mqe(.j"gM7T272SQ3DY(PncEk*`;QL!YCHA4H=.HhY4s^,::XfH1q+^Cf&O&s6G9WEZq-/OU/jRGIat=O^C6o$YIc2a=cG%]2j%AOr&V-(Ecin(u7n^O,^iHhY)drdCEaO(\Im.3FRLdHou2mgkc`eOPkDF;J9Em9>Ob;c0nY\_c92.MsXCWf(HU2Q7!O9m)X]QRPK@WT(uudFD%a=8la"GMi^$6G%>KpD:nWb,;D:lA_QCC76\Q1sI!X:;bo;YtYqs[dXK/[*[W9.?N"RQAI*RVakYWf,!)6*\A#clGG1f%Eb=Z%oYFj&I_b!I9j?&C*VU776R!jI=^1EJ\4'G[<IA`ljh)&%De4`>LRn9XHc7^E,JCdQ`,53L/TO_WcsnXM<96l$Anm-<)lfem,"5\G4mi]gfs5qmOYg6hHRH@=e4?;P<2o*6SFkNj<eU+l`7&KAs-;nOh\_45ZIhM!4,X(:K9Nb2);i9cKum_aMj`@@s2HoaX$cXZp1q<]KZ;_hYlp"rU8VAn)"$2rVllV2]i(t;s)Et3p>t_ZmrDO>HPU`mu<7r;n"h1'!WRp`N](o2LAiug1lMDV4sG>ft5!**^(rS416IePt6p+kiH/p^\jNa.;utarr=tR_`bK,b$_Yja5,(Lqk()ON]g6(Kh&OlE928?gkKOjl(lGiD8D077=^,)TM!=X1/k^V[+KV<S@7@NQ6PkJj!KMpVKMmYL-Y5r$/iKbWM\S<6Qa/=mse^eImY;iF5O\.hnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^$,e%!"4)P!4#`%5Q:_A!SCcVm\'<UL\rU1ra]BU0DnI)^]+:Ypq;?O\,QFDlpq"Dci3uK#JYW]_>D].fG3l3`"&[E!1Bh;TD4L+DuTBRheLu"rr=.tb5VIZ[r-]`ifDrB?hb:1rr=Y1rrB0Zn)"'<*r`6ic;23%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,e9J&9FEQLFQ`I!')n2=!pGS4?ue!!h`VP+TYV]enKu$]LGN&U#3g`3MqkhE@cqT5N4ZaCBf+_d]>VQEQiGrrD"JIgnVomX:#b?Y/6(j7dK]rikg?["jH]2E$FgoR4?P1^8%!@fo.P,,/_t'MXU]6$Xj=&a`7%M.sF&3dPDe7pi'?,t1%64+;TtWJmIBd(be5hXj//WunQihn>Ppjlu@9!-S2Gq5<c3jf[#.b)2d[m#4DTET*j2"YBPOYAusH^"Jl3:;PtGqqp$$I$Qd'AT8+-XI;^G4db\o^EKr@'`L\rpODT1!4\>4\_^HdSmrd807mHsdB+$j2m1pKONAU=K5'Bs.)W?pNM[4q<-rc)AL,0)W,ba?RT\2%5\st^Y*BT+rbfTs^YsZkp\+^@>N9IAG/i4+Q*BjZH^A79(=V$Mj(@^1F."cYrMdC_oQgDIR\>gnA>@<,1(_bF=C!0Whp[d(mX,N<gA>f6m;/%OB5DJP%NfcZbf(N:UrqV:q"fB@,:,tU)X6Rmol8-0nub-FG\2u1(oN)+OO"h>'T;fo3>=M6rr<7(#N*5E0D"i8@hdhDA,1-<mq6M(`-D:Pm:pom1ZQ_B;i'uuG!>fBjC,(F[&T'sN]s]$<7q]N9$#NLOJ8PIPc:]Vf>$o_q1fKu+,<"3^$usSV!S'U%%UbT:o'd8,2QP$L9`i6/./2oM6]&;'mWf@X$URcWSheZlZCGCc3t0iWhCA+>sS9Z&V!WUR94`)kPUo*ci#Hrr;66'NI/:Ym3IY9m`b+e`LYhAAnGX#ZS=Bank[#jZSO[!]/)N'AnE?WR>omfNQGX*-eVYsmq*g(8&d1+q4I4ZV>`&gmQGS2M;=Ze'sfSg1.q0UH>8WqDW0DsY5i:rgUf+Td8jiL;BiHd5smH.Ytt_@clF@E^.<H<>BFL`;@:+rfmBHGD;rcsm7WIo@eDa/p.N=B<5\+9/N$!a[F>sa8nf+D7?$SF5,0W88WKV`SuuX]07>5Z0.YeL*)V=4rmD=lHi%p_:AE)b?Oa_.FO.qoSAm03Y.@P@i\k*H9Mn5[Q(!hAX$+%8*Y9NbEGmGL='(a1bQ.7q.qY"B?N-CA$.>:jj.B%ga%,gQ#bfrMBsmL.CD<TW.P%<m<hCn4aS>+bAiCc?U8&l9+TDF'=&U@D!,L8q`m@ZDkUCNDX/64p<[@[HDI,fAe`CgSO6)5mmq*Bg]C'UPHhY:%pV2(MA,cN_YPTufS6u'$+!ppep[iB2IkP/q?hRM"!%5PO@CrH;!.I])p/(@QnTrE/g=%5F!4d/tpTf;8]_cL=msd^Npd:tWb.m'brr@lXj,a32S\OW3?hd;Rr-4herrDQUl/2Hgp(t!KW;ckU2KSk%d/O*s\t=HG^$!)+rJWr=n)"$3hYll+rrA\;o&n_6bZjmapHI+HEgFJQqFbSk?L@OP\=oZ2D@D!lfpI&+=\Y0AW/j@8NU<:OMjFTG9[%419_=TfNAVG4-#%ie%u6X(jqkq\aMA9I'j[NaGV%HYFS90)IjS?_F`"d4jK#`>*3!XUMgo1aAAue$'+(76HA5?E1dt<3cNb50#?M[kC?]5kY(c7e=e\g]&tc=qPZ!0_/j]>bn)"%%rr-u1b1FCTaUHVHb7sG=,SS!<9aoC\7k?F8_;gh1&?EhsDP4$3#U8<d3965?&m1^aQ7#f[Ou?j63>$lgUT"Z^Mua&#KC?$8+G)l`i/S'fkX#3^rU9,^r0MkAANk><!%a1f?R*$L8[@0)TBhWG4&7"UZdr[!40%lI5.'2"lLe[T'is_Gm:XXV!34)$>pQP/qGmOq/^KP:h^SO<F9cgK.h-spbA?.GpXNN-bu%WW[O+>MAaWg*:h<OgkOM_%aQXL;Q"shtO0`-"EfHI@ptGN_<::'LTo[a(.G:]_F8ZNN*j>7+hn@_kZc2<!n)"%WTCB:Mq_,.15PV/krrDrlqa]M/?gsp'q^V#frrC#aMuNd+7elZYG0g(mEPM4KrrD)ZO+-i#(VO`MKjO`Ghu<\<5Q/;hq0RVNJ&Hj)M`pLFrrA;`!<'QCi]$i_S:CP'o"NWN1]BS.-iHN<r<WE$n*KZ7kmQk-qtIjPpV2(L^O,^iHhY:%pV2(L^O,^iHhXgsr5*sMJUVS<!90Z!QN$sB0ti"%YEp@)8j=[fnQri&rr@J]jn@Arrr@s8>Q30<rrDqS0>Dl/@se#tHRN5!n)"$3hYlp/GQ.XL5lUhn-%'_4!5ng:j@B4L!$1UukQ1U85OI.[3WB)7B5deMn'BegbdUi,a/)*%!%k7dpG-Z9pTa2!OS69[msb$"IeW;W49#;tb5VI.2UgL<%G/A=T3uO6IOh]bPB(NsV!lJ(I1fIQ]fNWLeYXRp2_O$eKlkl-3r=?I9o,[3e4i(9i=SX37mfi\CD$RH$9%['JD;/H[!lY)4A@+3o'?5!,HpuJY*,2]PB-#,bttqKTpj.t)VUr2['r]EO+Gpi-)JfKG:?/d-qE!9.-71U4UN[b9-R;80GZFmb]H,qOnErG+\1UKqX=a)Hhk_Ze!nu+n(u%pO1jGbr\Shs:jdu_)ZKfr]n=b(OgDY]B[jZ<[*P5pRHbdb*>V7,,`1gUq)>&FC>*]UFYo9''7u7[Lj_kJgS^m[8$>!uACZ+"mH[L.[s,RDR@6DLAG4k\QRbj+=Ksu*5!$*N]JVC,VJ:At2?d38.Yb6FI:Y!Q3R]i36rag?D6>5r's7-u[>=a5DgqHT;<cBQgO7u/?!#i$3aY(tmI%I9rLpW3ng(qd\%hXV06Q47o#:`(jMkc*3e4PCj58@)Y.)+aZ[2LXG"1;ObI@?RB'kTHJsTZ_jMPlZ,n>8>-FEk]>nqZ)NXrIG92Q^82*Fo.nPm=>6tbh1k)En=a7WISrTm&JZM1!K^&-^#qq)#AJ%`*/)nJ7^p>/h0lK?pseYh0SW>L]V>H]V.A%(eVKd'=%QR,Ih;TX*>Ou['^T_nJuHhY3$[r1Ne46ptU%Hk>YPrZP&\h`sSh!S@JPgidr13G?P<`HRt8E14;LIrblENPKk:]U7)HhXoA^O,^iHa_hnX7-IWjAgU+_:u=3J*:fgA6OTnK+cEqrJe>NSi3[JH/d4N]1WT]'llY2[7sSE,Eqi$6MoZRqqfZo9HG-i@WD/P]8=PcY]uU=W,['04Uj;.(QP8AFMga=5t;nO[']?V$Ab^WqKqtOHhY!FIeW;[p>;.Rij7:kgbs3kO3HT=<:WptEEQHpClUEfQ;OM_C>'TIk,#)UQ$?i%=]g)B^O,^iHc:TQiO6`B'=Tmf/qXCZ_.0G6(gJsOQ5U`\.i48ENg>GB5t=\,"Z7SP1eNn)!33%!*rYQarU&4o^&-^#qqo*ahnApE^&-^#QLC02^cE_#GA[%Y2'SA?LYA#<rN@?*7k!3JNT8dJ@RsIIjJJ+uPD5d]4^Jt2Y+QOOp[<S*UkpCSAgNk%/B!]C-KL>8,bKP[msasYloq\sDiLCEHb,(pN>GN0Hp6r"0h0G7P:tR81M4Tug/YNEU"hM*A=ET?)k6BdhYlp"_V]h:msb"E^WJpR7pGnjU"Ruh64=BEmHfkWSRl9;na8FA4+h<K2Nr2\2,6>_Hor"A,&RYN?[MO^HeRrG^&-^#qqo*ahnApE^&-^#qqo*ahn@Kgo:54u]q*Pt0<&qkD,"0f]:sVQfT#i.m2_"i)(MX8!g)rSB'%.oj:$9TVNEDqCO=sPqqeUWrU8VAlpBuT]$#9[B5AWo_7,IS^@u4MCf=<#RV:n$/RJZ5:/6&aQ("$U9(,V/LpU#<^O,^iHel`?\r1'??X@TpZKo^s(k&s(.&3\*OiAn,Q/r\SL3#(GMQL0Pb>]pVU1WMSfEF]D?[MO^HP:i)hnApE^&-^#qq<J[j']j?gU#nmqg'=$Hkf-(Rs@AZV2'$>i+f9*.j`0bjJ%V`.k-0A1(o1:jtMKcWj;p(^O,^_YJ5GY^O,^iHhY:%,Q@bfMuLe]^H_5FgY_n`D1@$/msb#.rrBf\pV2(L^O,^iHeee^(]BK"a05D2oRHb/?glkMn(u=p^O,^iHhY:%pV2(L^O,^iHdhupq4rMnG'BSX;_S+@]m]A+rU8V/rrCriqqo*A#P)^2!4'/WJ)VR,?i.Igrr)<BrU4J3IeW;[p[eCbp[<S*msb$"IeW;[p[<S*ms@cY.IW/Dh*KLeG=Lf9Wcg=BA*L9U%9!NI>C3L.d]7:rTJ!(7PB5t^X[,F`Ye:r1LOe:=rU8V1S):pVhnAp>/b1j8qTn017!?nthW)m6hWl5NfX^t\!5*>\7($C=n2+$BN-6\7;Ed`:S#[.KA#U\:>0?,dTSs\L5n/1%[WY_?ok+3k5/kX&7`jtEYEn"6MRQ->J$Hsk4Mm,1T'Fjo>b+,PC-$M9b)30nM#h5kge-kcI!$H(F]7M%V1n&s^8FR2ku%DWF2F!;,S,@unONRe^H+H#q2Tj2m>mPRa&=6dXo4VDqbLnE>qKq1XSUfadaIK2\(cl3;arKg@h)LMR3@-e3=0G9k"iOgR@E?4o(1rZ@!ou_rVPK#M`\tBh0BYD")k#7eDk^Qc,VWV[Pi"CZ9j.u$'$-",0(S&X*L_@?Sq<d<&9r"SF0.M,ue^0255mGV*#(&0IP>u)Z<BbVBha)p[;XffkC*.n)"$3hYlp"rU8VAn(u&;O50uoT.)joY.d,B7`rnt(MrfJk+LFt1MYn/;a#"f\]L/?\uo(oM[b6T;+E3M9-[L`1g&H=H)dlUM?p#?6r'TDI_kJ:aP$MbeXL<gGAlmCR\dgebSE2>P,>O]M3=U5U-b*slrH08*i?6KGE/,POsqcHdO<q)W[]L"NEd/sE4#9q1'lm!I\i+TYrj3Q\Rm`,TTd1cmselojTYRdHI)CbHop%H*ql)_pEsP7Ul0SIJaFpJBk!R;HWq^^:BjRkMFttLYCgERH>$4pJY[CD77.<O8;1VTA<Qm/^R).@*L6+Qj1aF949JFBGHONtgtfBPBqUS6hL"grQ5HZ7VL!nfW4(Om(tOT[:<O`>Q7jb]W1K^<dd<%/:U`&u;+7>H*n&Wh!,k_4ao`6&&JSVe6,eAhe=6?kV0b>]e3<j"hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU39Apfl)CP/kE=!;oq/_Z'VnFU,Tj5N,>Oo-4/gJ)XVerrDr:`U"l;^\G9I5O(.VqTqD&hp)bhS)1raIeFn,2uLoq[/U-EJ[9k#UW313llZ$%p/h56]6!uPG8,Mtdf0<_RXb-O(]A/WIeWTHp[r%iEddiB^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qq5<OWUWWa^2\O#mlu[mW<0NRm`gBMg/I'$1j*qF@m!.^/Y0S[FRl_+->R+/q?e4U&9FMp;+;Jh80EE(:57I%!%3(;ZoT"O6k8&>]r>@hQEW]@'B(^E7:tB2ZnXWl5"f^0)G47g0Opp)9VJVu*o$7qkVDqub\]oLWjl4Vf"$e?!)ujpipR;U(k7A9msbm$qWU`On[lCpA"YnV(>*NCl(5cJ]kb8o1sR4;p<Uua@4S?+,cHHh9"[lGP^d[C:_4pI,dGLY7oFeGh5f+rYGSofIs![FTkno@l]'_mfpdk_9VODemHg*-19,(jRQ-mb$E'fmdnQVhcoO_,<X7;KXe_D;Y,7)MFAGOl[.:CYf+XApD?\RmE.9+)IeFEO5^SLZhYs@dn;uP""6@5fpr`M8hH?\Wm4X.IM@HJCNiI;NQ;aN%o_E@?eeRQCb[.8l[T]"R[t6qu.P,Hr*09BQ95col!"&2k>!&eE7<_/f4IE,*58j&)?msHK=fX'a[rol$QJ!!AV3&(MK<KnRL^P,SVPBl\<ouYL`-%AYn*l<sQ1%Y.O@5b6;c1bAl._EJNJ",N790?$rU3^Hpf1tu(k^t[o+K.:VSUOW!#+T=K[fhcSD3V_<P8+/_;!Lc$<b!YFjhPUeGfO0g&+8[gIFNP1ja=>N)FY1)ZG)u0d?EDo)>tt2Ps:=HHY>:3F9;8]fe_U6'gjUMRXqum.;bI_tt<fI6JNO5nYLdb,eW@lo=?Jkf[TWOr)Y?M%<4E2cm"1%:"PU_l/Xq5elL>^$?@"Oo:'lrU8s(rr<>Xr`NlKCgOsWB76hhiVk^f&EZ$+ir9#K.TDS+*O5,PC$7X"Z8&(ujB*bb)kRhVG)E.A'gu$RXJBC6(#H(,J)NE&$4[;VDVpq1mgUB//`e$DYBiG%?riSSCh)emV!JQP6mY>88Y"&PXra$R.5F1V>b&c3aPk[]J&MinJu19*TJ\Vl:uu+d,,TLmi5m2,"ES-m_>!DFgO%X]fYR%5rU8VAn)"$3hYlp"rYYY8bU`\9n)kMd/dKLJrV[\ehojX5fDUtaam].0DX%0$hikU!PW\.,?F(aI[)dab>i,GGTDL9*gAUp+d.@5Jl2L`=YPF$)i^!;!rrB^pDu8;@rY#b@!$3N2rrDsYH?]AhFT$p[DsBR^%@mFuQLmE7Y,C0jms4A9^LIehHhY:%pV2(L^O,^iHh]`$T%I#u=7TGR2crpSXu_WH43P(@'dc'hJlJG@g&(Y2\"KL!BiQUY>$/&G"%E>G>H"sCr3-"0C;[;<UUR[#2*0.6m,$+Hqc9;N?7?YU*PK&TfSHNWi!Tpo#t>UC!DU)affR8A.C']<i+Wa'<5K>Okn-VQ"igi$IJ_Y9lnA)DhnAtQrrD!o48-.'rr=T&kh/u-el3^%q3Sk\nD[Xj3^(0fHCLc&nBb%=<(S:T2^FepM,6\^A+!?JAnSR@^[R_0f2J(36eNDnY$-ZWchSTn+iam?BrUV?c%FUCB^'6QRG9dG]l_[N6p]s5$SsZ!+&u!FgXT.U-c)(<0D#Ps2'[W3qY:L@p-/HDDkD@_q\+DThoui6(=E-^AbGR`rr<c8TDnn@5A9rBbPi3lrr?V9d(f@Z;1J&Uh]BR.g&D&1c8YaQTDWh/n)!]RpT<V_X5CVFrrDTprrBOMIkPa<:\^"Ld:^/F?h0ih!4Rpb7fNJ,Z]G+dh-O1:T4WSndtI`$W7CnJTc`1*rLSH9+aofOIeW;[p[<S*msb$"IeW;[p[<S*msb$"IeHT&Qr![B0?t[;<"G/LqrTi@ZM!eKrlI[kkPd!`FFWbggqMN!?h%aOJ(h3Crr@%Mp[<S?DgsE9AIID/qqo*ahnAu+rrD"++84d!N^*;gr.t@QhrDF6r;]'DVu=4hVa'\;mJd1bq>6f;QKsV,oVb"9[<MW4:%-s44nit<f3\FEhYlp"rU-G1T2*JHp(-_9raD06_T()i*ut#MpOl0RP:uH$Z`M.>7Lar<;bFnqc#$'nN``B#"#<E?`mstaeTT1ImJ^C@0(E'EL'g\HcL,A``psYSfi8_Jb8<RAck,4`JV^@A+WAR)^aR=,isO,?o4[#MTU'$*rD_lk:WWObA)Fut?@Db,I?dTWp[<S*msb$)HN$2Lep[MpRt$d5G,D".VFhA[pjJC4<5t%kY][Bq4kEZ?lER[pVkg0CW>$q4:D,/h#p=X>J!C6"QZ`<./oQR!8Yq_cV<Vl?g(,qg3lSE\H!R$F5uj9hWSkTDEM':$TTBI)fr<YfRC9O9aX5M/(Hc[>490l4"EsP.G5^jGrMfbmhnApE^$E<.m!G==h9FK@#E>g'Yef@4m*4-V'Uk_f0p\!/!OX,M5X0.e'8r^.aoOWFP#H:qrU8VAmYH;ghnAp@a0.BjCU3]sc0NWb(md=tpHB+&ie&bg8R%_+e)R-nUW0CW8PIYU8Y4L(OdOc&IJ_p8qqgmL?.V/VW4MG0oq'O+8j0elYS7ooFD?@JFejg#S:st$Gq8HNN?q:mKU.puB6GQ*55js,rU"t#hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"k\L"JG6t(\oe/^CWf#&hXf^sWdnYi6`]k6H>B=Ju-B_\=C>/NSXGj$ujJ%XI6k)?Smsb#7-bk$&^O*`AjbNB*2tt5YPZ@Mt=N+Wp;<E2NDTbq/9JlWVD.Ei41J99k[#q6Sh!NAYq6?U&+\0:opV2'JWiBfk.[l5Ua<d^aUn1b)WbKkTSt;Y_)CaU52Z_s).8[&o!.lbMqqo*agZHi<=cJEQG/!Y(o`gUCZo8I6F5^k"?to2A*/ujT+"bm*XW:Ck'4MEaqqo*ahY"R/]eOqrYkDF3i6V:UhYU@T].p<r=^!j<_2G/4;o9l:!h#^AW$Cd_l9PF?n)"$3hUWbHn)"$3hYlp"rU8VAn)"$3>-I+/>uN+po_p`0-B=:iWb\8^_U6lo2g/d?\O$)K=L!qirr<2rmsb$"FK+`crU8UhDt;/B)[FY@LO?-Hd^Dqs_\&!7;j+*FD<4QK:fN(Lo('R1I1$Sq`ub3JhYln_5CW@qIeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S)8,iRW(]BIDIXg=k\%h[IgA_'>hYln;rr@NBmsb$"IeW;[pUUUF0Dcu$O'h[Ckl1YW3ksRcqqo)W%t=9AIeW;[p[<S*msb$"IeTc?!:rb]!4(t[5Q%Bcqr`;&hnApE^"<8a^O,^iHaXIGg&D%`F-?P'`':oLpNNtBqqo*ahUEVFn)"$3kPkPNhYlp"rU8VAn(u9L`(lR^+T=h&G?3$0YD(5=)"JWJijtNNL>IMup?#^>eS1k]`8dYjL-oo0-]A&DKg,8"IeUHK4ZtqK4;=$A6VC'F$rllKeF=duo^qVs`=*;F'!-&i$u-MW5ZLV\(AI9Hp[<C@qqo*ahnA6Krr<F!q<M=n]$m<:QY+7`2(`0O9R]6NeK#Z&,kW)]B]^VYFU$L>`0/3jicc1<!68Y,'#u1c;Qjn5aGdpE)Rk45P<N!ri&4q@Hp??\;[#YhOS7"8do4Jk/A"i!jBiqZQqGHN7qlWlqm)6o+X/t@=n%ZWV1E"Trmo;\WT^R*]o>V\g;"4G#b+O>Cd0EqlHT=@A)Futm="7#ljrjZIeW;[p[<S*msb$"@Rj7;#A<f2!,(YYQg&p\\2tqBq]g&WD1.VRG.ePjk-Ol`p-'sPGcm.We'l0p4\\W='eLFW;GTE;_]4ghbHEtuHhPJRgDt4`qdV4j\(:,n;df=Eftl,UXHm':<)/6X9<<,#'Pc(@1oud;^lL%LOe]FK91r,d;%4fs00N"s,DI&Sh;%u7huGb_fDmOKp[<T5^Z5_!Lc.KgV<XE7%c=,:qsW\qB]73"rrCpngZ<Dq9sgrq/Q-]j!*j'7;$5:KoZ9"</IYIi>.IZ[01SZ/?[Y0#48c1'a2$McgZ,N2_=!qZqr]!Yh4(!np"94qJ>k4t]m6r"-<1K^b6l@VYDjcCKh)f-eBgNaa6^L1%c!rYMP2$CHA/`t0<&Z\2EtsZ+2u4TKs`#l"5gfYC[U3\Y'p3)^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApDOFQc/TDKpqKDtrHYT8Gt!5@_/HH:TQRt'Qhr*o[+`3[)U!;DP4fLahInSZ9pe85-boq6[+^RQCZ2nacKrTlf7Du#imC&\0i"(qQ5mmiB2Xk5l.rTp`c4*KfdmO8%sV>gOH2#dRHhCn`X^A[NhEUW25m,\'<^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^RZbM/A(^qrr@'9;li3OIp-6-HZ-DYKljfFhr44b[mSjGD[S5p/Dlj+'$2<rq<U4#\2p&8a%oJ`h4[KKp"lf6J)Nm>%6qHDlXYClfm'V9DSu>][dGfULXAc.nCZ@lipNh])RKGD^QWEmUrH1\BSIrioW*$b=!2^$i-[Brq>,43\udfSg.0Sc2#dP&RB?Jh*FV9fr<@uRT76O0(VO.'KHC*[_uB_&\+:m6&*8T%rI`oh)'j7c3t%_YCS\78'iek7NZ%T:h07N+_uiY9P2n[QZZ14q_$j`alQaHn7HT1_\R\WenAFC$B7(oiNSW8N?Kie4GBH[\!:)\g=m,;'a"HSnZYb-0@g,KH=0hS&%Q>sXBi_0)8L_<7,t#1i^h9\@oj%03S@nJo1lS6_?=a#&IYR!VTi(4Q$:Vr4qqZX"e^[aO<7b2Ne5k1%e4j"I=][GF2-"d!1,RMr2)Q%'brnJd3HoZnR>E2PI?]&8M<a8qWiC?EC8tm/U8Ff^8"+a\k&uo%kF+kS-(7sRZSN6<`0,'+OHRPg&kO@3:!"cG8N`/3^O%tjbJW:7@=KugR/Iuo,H_H>Gs9a6Oji_mbM[[12EtO+l)2l$(AFu;1d4(3['@#[_%_S,AS?[\>KJo-A%j+6C#.Z"5"5."a8MH5R^[]XdN$PJ`6uK12NBC-Ene3IeQH'=(i@#X4L$,r'bqo@'^M#MFi!'Mc=JEoOBaY2[ZX9g6NR>\b^U_D&s>JYYl+Cm^UD`fo`nh$J*L@LkmjWG[!PTNHCnd9h1N!km0Y%'Mqa_2),H.0_X=@WWj5/EKU!8_H"q(7jcHg\1&>DQa'S-SVV!shXEG@#T)l7k(>HcE9s]YP<EQ2=pdurJ.&1BS;a!K:#^N7^][F,WjKfInSLlZ4<7"NA+GpM>Or.#D(-'enO7>+JT?6ir@UHOH]`.luhYlp"rU8VAn)"$3iK*oR^[/]6EI[!+I$aj5hpK,cr4RPbJ([p$T)Sf0L@1]4q)aqr6dC2#lS8D>CJ9N_jj!8Nao;@HoBia=^&8I+i=;LO.fTL9Qi86@N^*EdG5hQU]mnuphso]R^]+;O\#4`M:Y9!nrhKJnJD&9EDaXO)>3^P5hY3W8S+\Q5pV2(L^O,^fEm#./90Ddc$kUGLbquT.`=u1KGpSbH+X<"("LA^@!pAGI,`X;0=^<801he4u7L:&STIfO!`$urZ\L2njpmZ;K"-QI?hnAq-r^_2H*P(_c^:RR;VFoQ[cL-_@lmd>'TSAb9\2U;[cL+6'AYuAc)L?ZVO!Ga@6rZKhTE#53Q/?WMkdpr+qcA5644M0]]-i!okc/0N3$+eGagpu1R-/^&8E,?b>0t5g<E,Ff#9M";I,_$7[\Op1U9:A4_uXj/cQG+]!rBV-fIuSLpClGtrBL;^i>4Q_[r-[H0'M0"n5`JZ`VGk8l7h@)$9HGF[CVj(n.=4!X&I%`89Z>)>'X@E,\QM05ZUt#n%\@]D5gHhpd<^RQED]nNpuib]-bQ9/1ISR(d3N&pmC?G_1`l>bb]D:0R#nC:]dr1bTBhOA)#O3YTqJZS?MQ6*Ao#B3;WFQ&,%(Cmr+hF$2YBaqqoX3rYEo]!+kin8,iQ(!h]JmIm7WDd`_V(_>aLH?-p@]Y>Kf<aPS&S:>,XIMp=9\eXub^;=EB6_Y:1qYcHZpg]%9E#QFe5aaYs^r(m*KrR#8kfO+3ArrBNer'p\d`3YO)!8Us_g7Mu,a4#_A!3"HJ!21Ll^&=ONr?6TXT76P'IeW;[p[<S*msb$"IeW;[p[<S*msat,5F>7FO>"m$r)=2ihtuOpYHmilj8R.jjQHLmf5uN2\(n^P1LKZabCA6O^]+:RAbYYC$u^VK:Lspk^&-^#qqo*cDZ9^q-m/0DYDtjBJ,G-&!8lhN4oG@FOJi&h4/Y=4m-XfQrV?>_fp:rbq"1LLjgB=3k"Y=$p-&.j*nO`sn)"$3hYll9rrA[GrknE<no4S:>DkKe1!sN\4RO5B"&DfD;!'iD.>I-T]c,%&RoIi(%HC-ea'n+lXEp46TjL%/CN\[GBCb<_FdL6-Bh_a[3IRk=Q=0ibNr6'#ChuFn1!-FcbAJ^C'#VfO-.c1jRGLjo51e&kg<Du1,3Ia^Q<JCma--"O&'r";pqQ_%])*tkrU8VAn)"$3m</>lqNE5QrrC2cq1&(oAr$.fAs_O">40&K/ZDGZ7Q3!R=HV9>9RV=>"aI>;<Vs?uWq?fjV'IFPn*+E][Isc:=SrI"RC"_K^LNFZUpal^,=9`qBkXdkc@Bh*l:Ru\%$f>m>Ck4Lnn(oMPO-q=8nOjQGZYr"EK@#[f%)>BVk''5oh*ZbrrA+pHaE0RHeO,0^&-^#qqdZH4ZE;pPOeUbG6?>5RX,G;OP./+$sEhTC`)*`FMDS".'QYZ&Xr#o,Ke@*E_jCGhn>7MIeW;[pLle6-a+]M^Fuj;qR?[X]jn?,?M7_M#D;f29QYV?)QXn,kDE!boauXQl1L';j50b'hY+_Ymsb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<E>IkVAf*RF<&[l5lb=KB8Go=s'DZLQ!^VZ%%1,8^M]73Es`-=8>t<F2Qr5B]T%YTEQ-IeHK$/4-9dbWo/.P"@P3!QcVapV2(L^#2()ofD_pa*scK#,W*F%C<AqT?#mk7CQT25'qI^TWfU6/lJX.:Sa"H^O,^iHdtdbL%S7<+o-?;(cltm"s7ku^X=/*9R\B/*PUPQJu0GW_Q'Fb2`XrB7Y,t;.BGKMrU8VAm$7JB^O,^gWIL-;E/qa/__5BKeHrRQ1V)gppkbBNkA"m+-es&`Wb*OQ"_@EI.$sfc:oO5;pV2(L]3G$uIeW;[p[<S*msb$"IeW;Wn:*P0O&lhUkaonR-^'60JDFEN[WU/2UoVCDBX?@$V8)Duj<;iM)"$Ts9_[Hu^O,^iH_KnWp[<S)WS%*kE-:%.g=u46<h+X#g"H:(jMBDL\jM\!f#(caAr&4!l(1uYb7QdHN3Y=kM"g@ep[<I%Hs6>9f3^"Rh]KOTAjVrY4&&F@#5?eKe>)07DK\S'9h/=m#qYkoR::?5X]=mk69*F<b7oF"msatArVPKcqqo*ahnApE^&-^#qqo*ahnApE^&-^#qq3(jA7,$uSb`9cLAp'0!8caOqtIjPpUrNaqqo*ahnApE^&-[M*rs(BNIF$?i]j4<!8Ql>!.O\2IeI_Dqqo*ahnApE^&-^#qqo*ahOjfJbp352Zb6;<nsP!rSa5`np[<S*?iL#mhYllp5EfaYQ-N&&!"f/#rrCm3chHmWp[<H*HhY:%pV3@#!5EmT^O,^iHhY:%]FX(_fC@r!5IpYLU7IeNUU'AN6Q\.IhA*'Ifnt`Z>`_$dC7qBU@2Q,h7o2LUEN@spn)!b'p[<S*msb$"IeW;[p[PQh!/1s]OfeF>r8IWjDM):B?3@;+1/Erm7[(n>Ur?e(%YC%KZOl/%(;1brI,HdU;KXb%q&(&dKiEH^J",>9eG!nQ&c!rI2/c?Kfj!"<LMt#18P_^7lC(7%<^o+s"g:^`h"[t)H/sT0A!O?]!F+Frk97DlZ>-sLch9((W)]So#7LM?1-9ughYll-4k?gDT>,aI^O,^iHa(9Hl27]5AcD`d^<U&qpp&B"RES\eZB>[ogRF]#pAY+eolVQZ7R^qah^45`SdNA/k%HJ+&Qe-GU5dliMK'Vi:#ElbK7>,[DJsO$\gq:?AEYGAC#[rsJXc8jHL#(ic;9CXcah:X6o!2Y=NM9]/9P)fW7@=DBgO_EbT>T_mL#!Z3h3LT!c"\ePdKBJAt$X?DF1:7,NoZQHhs63!%5PBBCTp98F.R.[:>9,IS]CE3m`%gaSjA<V4u46do6ZWX*/Dc@D'#*kkhO%AKj[pWDQT$OHij=lD_^Dd8OsTr4G7ZpI>&\g4lX2WRsAkT#V14mG*!"F;3CWiKqA,:>FNim<)dl/YFR9="l2S<E7,6l=Z>,0u@BX^<jo;W,EdR:-qsg7=9mnODITe-/66>a3s%RqNJn3md7^@O0rW8HhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2('&,m@9rr?T7n:1H<('CeUpYA.(=V(:+Du@\kN*l@GGCTV^nTtR(DuM?@O8=j.rj32bp[a%3VY@;Fhn?%u/nU/^Dge1dEWTjG_!\><RB@7fZ;_`)?=&Z'Ud5q^CF$n:)bQDm>/K=cmJC[0WUTeWDIr+OL6E@D`+5m$.NVMa6]e4GQpcnS*^^o;80e7d,MlO-7l4+$oVAb(>O,j>9u"]chnAtVJ*8X`jWFL&4Qjof!<!R8-iX1TpV#R9kT_22rVljYIuqGA/p>S@!,N`h'E'@sTCj'dr8ik:!31JEhnSA1:ZW\u!'KGfrrE!2>:9FN[eIOdcpg7Cqu1^;!$Qja>j\0_fKT95Pd\p7N1^)i`W#qg55js-oGK%IO8f3OF63E%re[b@rrCf#hnSA"+6EJ$!'5Uk^\TR+ci3u]++F4i8m>s,7Sj$a3F`!glCWP"EIZ.nq60^&rbL7-Z[3)>r<I(6@!\Gg@Q&,f:=IpAIA`0j0:KeeDN1o#pjLW&A#l@=BLBDR'.`PdNd]QP_QTQE+7mrsmqpn.oUG-0'sMcSrOJG(omk*@.c2D4a#6\`W$04EF/`#3.@8Q.nW;O.rI(\")j;;Q+fM"S.KWO@Yt=[%/5<+q=OIsV!>bFuG%L%+H[keYIeW;[p[<S*msb$"AM`LN`(n#Aj7+5*4sbAm7ip@ONJE\OPkgM8Q'E:UG1/Q6SVOrLeBZ.!AMu16`_^6Gd?l2bd=ckA0H_1S:QLu8j\NqreE@q>W0g?$g9m;mE[CshRr;ruB_"5dFO@tE<_Db_\S.rmiDN"SdtMS<0J0hoA/UnKAi?F^h-;NKCL"h$ZbnPZb<mb[&+L_>n)>AE>qsu=*;br,H5F"DP&8Lel0\;X3p1kKS@cg3\Fu4pWst4K<A,=Y^DBg3+e"Fj#E#[M8EPkqFXQ<Gg&5j$\pL]kcW+oMA)[0[?1+fVcJ7(7/BL\T^gnh4ef&7j,8F06929#qSO\]b*@*sOJL)eOP'S%HMCOk\e5FO:'/0!&R%mdRWC[m2kXRi8lmqd`pD`#'qqo*ahnAtD5N*]Vb;9(tr*eDGbT!mm;8LsN/*R!5]=gEE6BB0Ng4(1;hJ/]XP^pu?e5AlmgVXr;`CcAe&W"EU7/AB8*S(/iiB4j^J'gbWk<<*gHs/tQHg7*q5@-i]:St`)e9GeoU.XXnMR(^G@."pV<'^\!a5cAqNO6p]+*ts.p/q,H<=*E1OO6`=HD7*mc_t35pJS/tnPrIN^A[MA%so;n'`Ipd^&-^#qqo*ahnApE^&-^#qqo:5q1X=OIJi+)!6)bL0E2$eUO)h5HMkAS!4&g(4oYM?%Ga8GnolamLReAEMq2D;esR'IbF@D&PQ(VokM'@YHhne5_Atl'<W<%R0Dn?_*.R^QmJd05HN*u^@DCj@q1&DELMorf!:HJ`]oDt\rr<)+TCUiorjC8QpV$#Ym5OB?p[<S*msb$"HN&E2N5(esao5Tg!BVrLiHJQ95:=0>m2aC">oC#JEYPRc0iYcc),l.D]tYj"Be$'c4a2I[RH^aj-AkLhe26&S,\ZIMq8@[=gKtN+-gs_E2a'eUGB[ZVc#rb^?n#jK)9N4@Zr:H.04@!qhKj!=d)B!Ud*rod2p068&(01,07<1)Y]s?-dT%.lpnXd^N%jfNO\/8FVs4lt-H=Wf<.98mhoI>*cX5@8p[<ANL0BFCJdA0DH/qM)L(n>JRTUIQECCcMGpJO)"],LNfR)d$E_R`H&j3JBlPsoaXR\q-YZ+"Z"eFJ*!!.+gp&QE=#pe.(aX$fb+4oD`rNAGLB>^b<J\TAmi`F.5_2iDEr7`6-%d`RD3L2I&7G>GMPfWQ*@,^D678LO4YISj^pkWHCrN-2p4Xp]OV4[>@q!1lK>N&pSoYt'rd;H$4bE"m%WMBl9.C\1/Y,pKL[iJ<qWqjpN24g-V)kMEkOcQ.Vc$n6_S2LHe5jP:\l,8herC'FJ2+6_*kJnj%8,+M,mri^;m<_ZVpV3.Er%4]CbNn/Kr[J(9rr.AopSF5S.>.WB]:j`E?D@H"hiYW9J=X%H!#M/DrMr0XlD*7Ml%SS1cXBniHU!#&e)\8LHoV+6*u'0"p=pUMVldO;[-0H7n:PCa.<@S>>X^P,.7YT@Z$!T.73ue`QE`!(<5PG<ea1oc)"*ren^lmC6[+"Z!08oobj0-=8\"L'>C)/8NbS%Q;--]-j/?^.1%8/lGq'TPdmbp<ID'LOpb@',DF18B@&0b7as'[QBaVc+V3DX7rC=VLqB1:7A=q"/rcuhVrrDmB[SQo'D=;h!J'^YLbPV9\rr=3loN^dUrn'ESrrD\f[XZe;rrDYV0E.sFmsb9:TZKE_J,Jo10E2%E9l-I$gYVo/!'qJ%!&*g:e,4q"!7>krJ,<XNp\IeB5O("Rq9'TS!*&ji^OOU@T?9CtH-_iW!;\%N:]CE3msb9:TT"Aep\a:T6N7&L\_B@IY^QEI.;b^M)*e&\MuNdWIJ_juHk#njdiZe8j%dnq=jRkpg5i<o``mZGYdF@_K:ptgV(216kK3*RafWMA1L#Hk#[8a7PetUCjl.c..4%EeHrg&+f)G_(H<Y:]a&>:7C%b$ZYM;,(Cg4Lf8VbSC7bZ,<i%cXVJr:qAVi!C8TTI/]lrlI`!B(<J5$jF55o*(K8h&n:<<UAfP4;)j4k3]NodR@7:O`"WI@-XET)J#KIk[Ml+CCX'po#8\^\>rj?Y/Qba8M0^aj9ldY3>lchf$&R[V!;6c'JA0[:OjeilgfIrYXMk?Co:U^O,^iHhY:%qVD/O_GEJaa^6$;nG`La&cVjGa*`71!.Q.fqf[0YJ)T)8rrDrfpHPu9f,sPI:k-Z'n,:J"hnAB'mc6O6^&-^#qqo*ahM"2`ZG5O-ZTl!+GPn[k^N!05pUsVmgR[$gC\Un=9UeBOLrNEDof$#c]FrBpk-n?6@<Xk?*24pO.SP"0U<OH>:VB`BiC;]]p?20_BRCuV)2L$eSp]rJZMUilC)07mfW9K8o5#G2P4:WR10N>4JBcSB8.oZPH9?SfV-<a#qbKEmL(1mmiMJA#='qc\`/:A>;n\%\aN`cgncGfe2ns_8mebLTfI-.Em;MeSrr=YLh>GTJH$)&3dGh2KWGi_I*m4:!\YBhW7CKd'C?9+Uh"6Y5"L(TnSDR7<%c>5"Mb9BGS9'qa;q*pBbP?((2V]B5IT5YTWMZAfD1RPHV;@c`RmATIfNtr$=40[0VeW0+N_"2[U.:7X6(kQd?#%M``>#D29rW]1E+Wg__On8+'c#/<B^$aLA6Xspju,[.!,?<J!Vc&4Bf[.N/7fP;2]G7[O2kbpC$94Y-u%\:U7n<WM'/XiUSWMdJsr!o#h:/Z'i>Q.!!2QQ02"r4786QJ7o':7*@)4pdS`u^*#-o0cpk9+:JV*cO[B7++B1c1<BpOgfrG*$$D8lI!E9%!!*B4+!!2QFja5>B^Nen0.X7e]H"2F3,C-/TB3=/J.+Gnmb9N9Cj,Fb=@R'ouqtIjPpUpej*bqTnDB/*(XM<TSo/TLp<S85fc;qN&l0cY-.*'Lkj<=^$;=sVOIeW;IhYlp"rU0L]!0Ou&3VO'*c-5+&Z']F9_*GtGcQ7,=H=SMB^7cE![bcX5Ys+l&+('Bh^O+UGhnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE]pFeG4hSHAn^FqY699ZnPhXqb[LK\EP(10Uer+J69-\qV8G<<dS`Bbai^Q-tIJ_p8qqdGFmj#3&1HW3)]=Si&FsWQER$,\3gloiDrU8VAm+hLMl;?@Z/,F=#eC'ee,nB*nH#@/+b`o5[fb(s]X/)o&,q1W+j'p&ma0)O0+HT+,qqo*TMsoO$n)!71q;$0b[nM!o'd0_@DQ_c[T`sjPgT+sRcE!n):2KcdLDK`YIeW;[pTO>+HhY:%[1D@2ggB:2jW&Uc^9>A(mTm;/[9Y&E`Cdb7%$GK[Y?)hncVYg[XN/,k;^Om5anP7Qp[<H2HhY:%pV2(L^O,^iHhY:%pTfYILZ=9iTD8)k3r4CVL@WAI)nW:gWgR=R*T)L,U[;b@SUhLEB5uI%39_\PR$OqsDkMIO^O,^g1:#Q&Sd-^,_Ii?2R%2/;\uQ^6`T/K0Up%gLBP2X+ar8u:eL%/nV5T666uX#H80\'3n)"$1^Yca%hn?2hj0Q?"W-;MOpZkQ.RG"(-)G$aK@;8Ik4>&pcNjbNJQB*DRW6tgUeM56C0G\b=a1luq^O*V#O.X^^"NPBZ!0V[@R>6foDT(k>f@2CGC@bXZ[WMVR"4&h.?&dUX7P#,JhnApCfQB]+oj;u][,%9K^2Q0g$i;GS/g@=gfX[nLGc<KdMNk$^i2`C[Y_'.d,q:M_h#$i\HhXd4hnApE^&-^#qqo*ahnApE]oi<pk!f:MA4b[Npi#QgrU)SY^O,^iHddK%^&-^#qqo*ahnAAFnRqZnHthi[O*smUqmqEdUthFmC=D.J&n1LB-F4Q>O]9k)`f@'IcUTPUka5MA,WGXJpV2(LZ2=MA:Z=>2l[+9a!'o<err?XPrU8VAn)*X*IhBHY>ML=s#2qfD0_b$bp[<S2!/Hd5NW/u>hVeD6co2:2!83.BHhY:%TRWF/bHu^`r1!&uh:RkP+kiEpqjI@34T,s2r3H>&!UK]`[O])[Ngd8f(iPSSb[]*PlA2J[&la58^&-Jap[<S*mrlPFRm68BEaSTspQtmIp4'i(pV2(/KAXB>hn@M%GlIak%Yrq;=dSCO_k$&)gqm2m%RdqLA'7\kaqZYa9'A2<-r`l^P86V[GS#oV23]Qa^O,^dSF(gf?h4)q?EU1FZEaA)K;W<3QKqe_=_ajjP%)/XaX/6Ta\^&ABhq5qLti5DAj5tXIeRTlag8002T+hZl:pBJoD:mpeTP7T*ES$OqgTcuZOp,F2T6[.m56e&RZb>&kKHU7=TY?&[k-D7n)"$2jF-p_^&-^#qqo*ahnAq+r^H7FT)&0ehV6X?r`mb<mS;*a3I*L*09[cn2n!cZ?N*OQ8Yjs<<p*Df1&@&/55nTr_jmmbrO:KbQR:GW>DKJm^2kFnSb:TG[l.!qXgQ<t,O1koNS'O]P#&B+?R&9N=Y'(6e^R.1lfrbdS!21JqtIGSnJD!Irr=lORrp^4\i\mVC*q<LID!\U*M&&e!(6]k1%UdUAE\60AA6g=DL-VRV%PmM?fH3eLX?Km!AsfV++KT+c7bA;;+]=\*k0SblJE;6^%\o>qE3EiP$J6lBt#G\Cc*8O(h8Xh7udE"K"n0@2BL^0RnI_^MOI4E5`)Rkih:hPT1T%1b<LqV#Q$ucrZ;%,EI[*+rr<>Il0c3c_fcjf+RSjj>jX%?ec,WB/s<<k4%$!BW/ZEm0(8/l\8Y`;]r5L3jpYNBeS(aRC+<_&T(XT-Jc>]V_X"n/;3'Ji14':MQ<")&8,=Y"3fLf0fEj;Ebm*+_eIgg8T&ul3:GG\^Jhak./BCH\'QAJ'9*&2e[6Joqa6]c5`Cpg7Q?!U`L\N9YrH%GapI"3URHe.?rHl#"T;4O*AbA8km5d(tgUe\<mG)=+gR,J_&RFA8ii218P-V$`\r)=He5XRaP.S=^*Kdr-Xu6ehD&baVlQ)J'p(kie;lqYsD!anb()%3G&uquhFArgh'3%_.<3nPuAo_3IAgEL>R[0D""K%uH.VL"A87=rI2':bV!4i$"WV>jj?a[)Mrr)<BrU8VAlltk8rolY-gM7hB44CSq02uf4cJlb.r"`(UDEMe?2\ti:'dAhF[5Qi(D"6(o/^9W\3bbkk;9r<%Q7Eg[`!>+ZgDsqUpf]hug,nb=lmt%f0ok#@]%t]"UW"imE+Pm\pq.(T)OXKu0:KsUD%.dH92R!l<$2eu<E@OE`j4/p6VSL\`/QU2RcSU$N\F2a7R'<X-f;Uq^;M+6IJ_p8qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahN36V\"EODO+[H4pokcmrrBdu%sl<H_OH&;7JpWp!5u4UrrDeSMqCVUJ+7EpJ(/<7!;3"3pV34?]f3WU?N'?LrU8VAn)"$3hYlp"rU8VAn)"$3hYlp,q>UF#LAq7Z=S]f5!/gm0^\dGspULh4-;4>K?ch4'905N@!-n<fNkJ$a!#Fq9rC4X'!*ToJHen;Mc2P\sIeW;[p[<S*msb$"IeW;[p[<S*nrNeNKlpt@2<B=WB&OaQ(1,;+o^?$or_qD.A>X_X=)_&8<\=S%0d2]ceVrcOgU+M(&i;"FVgtLA6!(*S5PS&DInSDkrl^>,!V`uD?0p8dor4[1)\YGEe%nj8;5oOJ^35F<c6<Vh%V&EW;/'1mW4?p7`h71krr?d5!!3q%"iut;K2_m!rk+.^TJtn]5+qfI]j:Tahluk4^&-^#qqo*cS3N,0cE3T-oD)tqG3mEV/dDQmHH0d[IQmK)b1j:fGg'L?m#IjViNO!3N5EpeFBD3Hl.X/oT>jaF$rhK<Zo#S`Ku!OLIk)%oHZS;(_N(8F\<o!Q]u@92<#nQ_HYX-f:I@LYGF)[rZ.Q$bU;kW];e%Obg_lg/;,]qHFOYI'_@ENs"&ZD2&SA6]2$ad?Vi>AiU-KH&Ss^/r<#d)R*g]\eMSO[(qq]2;YqKjQIeW;[p[<S*msb$"IeW;[p[<S*nAkN:?hRiV35>!&5"knUn*&WBra*>l^[/$#:OhBAG>J59S]gAnk<Iu!R/[/oVF1@`Ep!,bAH)Y_H1okYhY)9q!/0rn4YDNh:O?m<p=SfiS*eMHK>"U^AY-a!HEM[bdbuM)1`O=S;+6bCh7;paP"1[0fAoMsSW%.i-8Vi'?/P4/rb/uHr4F_sh1P(>\a0do(MVth<`^/AZ";[E9OsVjPAnrE9j^Q'1:VIKXBbJ,OuZX<MT$(+W.VB7Kbi=%+WXi?<C!X1*?(EdkjY[26S,D_lLK?hr-S1OSEk[`CL>6t3XMV&I!GJI<KgNP;pj1hkJt^P$#2H4;e0;309W8c&^RRnA8XV%4C,'br$c"3)Uc_!I7*S"HJo\q;q11EUnji4Ge-IL(Ne5&'RsIdJ^=3hYlOL3hm(WtR4\1<$7-Mg!#?FV,Q5*dH`d;JPs=cHmH^+UAM>26rYjbh?='Kh@A)u5OW3"Ki?\VJ/<Lh7qPRb"mJ7O>;]udi/Onp)V-/<]d`iUYjP.A_iCpkM+cNSBr,2;kO5"pdP"=h]YA`iAgeUP*#ER%<_qL2]Bi_e[,"SMr2cB^>_;LFV%)n@rWEC)n=J^l#$W11gQVHm#.A7#)&#^gA0DIa0mn7S`5:ZXur6Xk+bMV2)4%F=7heMS_$ond=\>FgeTuGEdc&UQ5Esn%\NsE(9^*i=oqcn#"R[T,(aR#%DG@oFT]K>#Zr^c`@CUQ=6HtIU%qp+usX3B]OM,KXoSB,C5phXdm<;=ZQ%YMq'$7\#CVMMi!5g70#3?4<->,k3MKg_1`10>?>=]Aa%EM@uG`jao+!'U54HhJ'KKC@[k1&h6,[Jp4ONS3k]\Fr_i)#5tolS-'m\m'2QmV[^4)ifNUL48d^c+R0fB&DH%FEK9+p\e1ER<TLOecu#!Y'-6P7.\5jOc=NGr^L8<$U<EPMmg?/G@'+(`q7keAmil+:(oET;,&]Wp')_83h/\!Vl-+7rp+%[]S&VEe6g+#P_M.6b7lgi"\u_a'%^,NS]F2sJsJ\K'QPX$=]0neQi[JlBH*H>)8I5BhYlp-O7.3uA*:URpV2(L^O,dNJ&9o(m(U1^rrD&O;uZjdkNs@;=b";U5O>G^(]OIMl7`,3)roQWgHY4R`r?%mZi:#cW]g79QsTHup(_rK^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^THDk,m4/%Q1;op!"])0OWXJuGK7Ik#P&T/!4QT_kPcKm^]+;K5BH]Wh/WGp*gI!.[]]W1gr[8,hT*@u6e^k`]p'&i'E8&C$hK/R!#5Us\,Q2_lg2<4\GlQ7;>E6P!/gI*+8bI"0=K*Vr)p>_p8kIt!8L_*qqo:1hojL%6MKqtp[<S*msdT0peTfF-p.6=r"]38h,j,JjQBrp5/?OpJ\(`"09q]]WAf:sgGSVMca%W([gLcH[`bMne4Cloo8']S75[#aBOkF>NMP;jq+L_f2ZEc2^D?eelqWB)h;,`PT(q#bm_HnF4[-[:4-'\L9t<3S;fH5A59[Jnb=q>;Ef)+U6OnqtEQHL3C"Z_F!JeJ>A$Qco"[iu&ZW`f#@pprVb*lKFkOcMJ"-N'/mTXc4!5c0/P26EU;3JnB(N8bWaFDJ%rNX]iO%G\=oLSu^jR[:PB%"JuW<3(dFC(gdNC6n2Du'B^/Z_u:>1sJ)ln-CZ+6^Z%3h(C\OJqfXIajjIMf7U1.Mqh/;jJM`OK+MM[\>3^X/V>ElpjK@)#jT;AQY/p\bGQ7(];+aiFi+?fK3/!f3c^rU,(OQfrA55(&7sh'5a;XfiVumQ"9cOS^cDCUN1MVgtYl_6&rQ+R,#'WOd&\CW_Mo[^0CU;_N?chm_NIXJ&BR5aE=7gTUM*gf4i?\bO8,@'*>mb]<H91k'!%40b(:n2;&u!(30R,AQ_0k1OZ;\dC^;G2l&&3qqB@8c@Gn'VF)U7j8-)Q5K!*]hXl9RHdd4_54.-pqlk9Fink^<Gil:nPBQC8h3uFQ/^_-'#%"0!gob]_T$,V`jYHXJNF^9bobA+]/@%!B@Sa[IG:)G,>K^ttG@'[^ju5KfgfZ,Nc@9hO%$bF73Le4Q-[M6JSm*_,R\I87?Wg5N4L3,u,I&MWI=uXa/FpnFnjt[d]1FQZ]1F9.`pE-[9/A:bPL%!jZ+oD:r1Et-rr=l=nO\?-jjho2]l?].Nf/42JDZUe*P'V1*YjqQZrZV7Tr:&:4\C_O@Bd"IEm+f$JK`Vp*++HXbKo8<c7R?H0;itN<#[_&`2;=\[CW'5_f`-7N&n(3WR%#9^Pq8^<k-1[A#leKL+t6*UfZ=ef?<S"Jl'pY:)_R3bSiN57JXT^5"?^[&2Sfi\bGQB=$Pe6r2>',Ijol.+6[L;^?]r\IG%Uh\3$b&[fmH[S%#f7D'Tc\8NcX,9iVDRg,jHbWF3VPTU&,^@?O2-P+o7VY-+OImt#riqM3uV;#^NjNk"]DpGRJHCq!u!<a(qAI/a&ie&<S3o#jfCPJr=3pir]]Z.S92j/%akh<(Z)H0$dXF)FhAWZSUD]TU?'e^_/2>+%Vu&cj."5Y+9Ib!2jNT6mq@B8bJrhnApE^&-N5G(7Q5\\IXkbl7\2\u4H!qqo*N5O[J-n)"$3hYlp"p)s?)+7\XoMZ3[oK<@H5?+`>thnApCn9aoEHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY)srcW_,-oSP5oM.HG$D#(uXR)M*!\mhV'nf2<%b?MA)bEVaak(&KdWcDbOT#L"HhY:%f5'9Wqqo*ETCPJ:;)NiCpQ]k\,*!(E=)GO#Tnf5@dr(`5!H'-J(a6d#/'1AQ)\:KfIeW;X#5e/0HhXgKr5/</G43@EiPF!l$B39c^ji.2!>1`7,KT4C=)c[07iI!*=-LJJekmOiPP7HT8GDS%p[<EBHhY:%pU*K3h:[h'hKr%HD<\dl4gT>Z'6N31k=g.`%SE3>7*Z&&O7"Gu;#2s&*Y6#4pV2(3[pj7a:LS(!T>,=t?OOPj`X?qK=d^<1!/GG#>qT0?A8'(\.R@%-^cX:qhnApE]rM&.hnApE^&-^#qqo*ahnApC9RQj=>?JY&9j??m4>C&U\mVBgRDm[#kV,/j*B\)@V0uIp%O6/9$@(L4FYM<qOOY%A[1N5m^&-ZlHfJQ'5.'+u/XsNKc=^hYN'tB2L(cX92$Ie4^Q)ks<%UNb6B+gf&U7nS)&\ZjIIH%km3V5XrU8VAn)"$3hS^J@m;Bo-^"5WbqSRMhG&HH8+@hR3e<kq`)V*oBajJ0TU!)IDA0+oXW2?JU_bqEaIeW;[pTs>(n)cR;ISZe!>]qA0h4*78e?_eD77^_o\\IAWTG(=,D3)8sBrLW&d%ecaN-CD;-te+lN(fK8p[<S*BO:Z+hYlp"rU8VAm#V/H1,&MK:Ak+l_gcTSmr>c6qqo*ahOFNCn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU/<&P@siZc:e0;&H;8#!8ZMXp[<S*ms@lXpV2(L]j*`Drr=pZa6?3DB#F&:I%P1sXWg,&O3@LE8_AAbN]dun%44EQA:nu5WF>uV/SpQq(t,\>/4d";HhY:%fS?:e7eF12Hlqn8UYj^0e<%QfffVB;[1;?8lRJ>ZRqj.2frSraM+*_$IbnZ>`?^B,p[<S*mpgRVHhY:%pV2(L^O,^iHhY:%pTh'RIg3V'F;@mJr?^tij+gTO8TGJUW]*D`l!CsTql[+Q;,Ge`jQj9E-Z7CGl`psrqLm<s]Rmp#!e:9b^\GS6\#Lt5/_5=RdsDT]-!Z`,B/ZYkm/.oNU:sd!U.X.@jTZn;[8g@pYN1jYEF8gO!&mhc0iVsqP8ce^+_&G^.3OX;`8%V[,7[oW!0Vd-fr+O)HZAfKIeW;[p[<S*msb$"AFnodo)\Vnn5jFse+1]CIol9M1mDiaN54jdr,l68ERQ/>D#6`)YYjMo"*a!l#]J[hg8u,:["(\"rVc<5j*/Jd.F.\NEbp35L$@<kM\VZ',l=Vu$F:mm^U#Y1?b86$QVn@I;,=(0<IcIOAkP"=_oLi[=4>S!2(D/kRR):Le-W.#H2dkBVr,2POo3&1iFpUUF8H(8CiiY"1Ta,1TB&5XW^rC_5,rhLCn?s/j<bNtM40%&5F,-A0AU'(C5^rY5:um8iCPG-b3_EJ4^B1mK[c--pMa'(&KYCrmBbBrb..Y0hmlBYQEL9/5(%>gPLrs+m87MK"%I4OMX'09r+_+O%mSP[DtVT:^$6i%q1%sZk+BrfNd\>+UV$C*]D(DWa:=q:>d!eF8QS3.UT3[_[63*$S[N5FO)&Q[^=06iNl+^jcm.A4&4o(YntZ!gh;9LW;fqI,mr$D+]q)a2m@M'p/,(qnkG?,G:VAHfacG2d>'6aZD2_&NC(tpXC0FVT6su5F10g\D/XW62aOSU<0s.=Z9(u9hU,#at`M8,?rKI>4_r&0+\ip!KrL6T3p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb#,+8d_RrlJ[.rrE$L#@W,N\qAkF+7Q/bq2p.D^[WlCrrE#Xiq=".hu$]`+8$R;rFd8Nn)jrE:%)Ik^O'%)r[*Cb^G\gp-Q>d>c#2pXM9&#H8IN^/Oj)3Me]+p`b:H?V9Y`EFb"]^e[0G'PV985.Z\tqQ,o0-m@Ak[9=*WFk>0N6h4[L]U<T>YFKE_PkocE\>U$%+KQ$Hk?+%q?-%mQ'b^O,gsrrCCo+3?&4n]-.Z!9lmqO8f2m*r"Um!/;3e=l8i62eW,Lrm1TEm%;snrr>P.9E%m;rrC@0chdV/hYmHS5bNTPYPZ?\rrE'!V%MQKrLA6/r%P&>cMmm:3P.NJDt\\\!+c*-rf/n'r2<?i!1hZ4p&!X[qu2.3r^gJkN][7@rr>Y9]RTf<p[@lc:Z\/I!'YIIJ*>eVrrE&?rVQO5D(k]]S,WIMX$>qE^O*=PJA98`iWo&!g)L%l@f/OE3R*2bq_rP*2eMQSc0r@+^?*FJnJK9`d+#m5]Q6)jRL%oG@\u+f,@g!]Spd1PME_G34a\^5gTt\nHJ4cMWJ99_ROnHtVoeA/`O]T\alDS[3gOHZ2\nn.2(Bn&'e((OZ/gi?:uSVq]ED/#Mh0fHU.(5Ao1M!><RM..]9W$g!)J(;I_D3M!,k("n)"$3hYlp"rU8VAm"^'H+.V(9q/Uj0mpDBMa7sLoB3oFXWOhP5A?$O^hn?A+S+npHm%fXJi3/T90=gA@CkGY%RZeBo>ue71\HQ@&YK@<^nE8h%B_UrSq^SV*Tn8FJTn0;1UKuKdZKM"#c.bjQ9,1EfA2A;HeRfG)Jq?#G[[<G:I/[G'(+-@6/s9UuLa-DJ2,!cgMh26E+W@K(:f$-/^&1Sd9=$RtFS9'LpBP;ClShmSp6P@+h1NGN/jY&icYhRtRB4a&%(/QTZ)!Z<9)3#GTH\.!TI9p"bm/Z8D9plsf66j/oug<IGD>qKRD%Ff1K@s(S?@?\jD&_gCAG5eWqBBBDYd<9>M&oU*m/=o7+HDnePnPlHC8<8Bb/bTQ-6c]p"909ZlcZY]KZ;_hYlp"rU4D1pe%IU-%CVUbSM5FHiF(b[QgHLCGlj+F(no\A&N5Uk^os[l##E\8+>!9:Gn<6gJoj_-]:&+o.`iods(flaG]1rHu&Op7F`?`/nk*ZjJg.84IXeq;]g\ZLo6J[[c/Ib`sJli<m-2b]doj+P/qaoXb8=;c[Q;H/JRZNM_1ZoY'i%TJpu-TkVY.5chnaro_7g(=-%^lq_?t+n)"$3hYlp"rU8VAn)"$3hYlp%O8Ql0m(WI=J)]C6Qi@'CdCju+]ma7:fiS*CrrC#mm[sIR4."Vfc@<h!1&h5h9S`W/c0sN2rrB@rmB>E\qqo*ahnApE^&-^#b+bT3ajsC#n[*FA$Mql>Vk]r[Vj=KkWhNN%'GT'D,a2"\N,5Mo=J)8\SsG\>[\=[43dL#Ul=="2l"ORhU7up<kt%M&-$^f!afnbJPOGnW`%$A_9nK;hPPkJ$POIAq+6)b[8cEHh0Iu[uFQ^NDlAG\+ASCi<!,$/JH=sArOE3R4)qVK)B]1a$d\YWk`lVFajCjQ$OG#!FUVE+5cG,IkFE.!*`kKTV'3[aMm,%MO3oai[EQkgfDI)tjIi4B/"luL!eBZXnOgC.G7??/,O!`!uEA_/DrS:<gUk7Ki'%H]AJH#U`\bGQ>S,WI=YP:VK;KT?cDg*;p,2ZUSj>QYK<)@/2+!(4IAL[I3)3C_(<1iCgF64o+4.ipUNdi+OA5lZI7];n>TAl*a(tW9t!/$p5SaO8YCn;lVIV%r;:N(,EI+4GVrh.sH\fS&LX+Z>]qqmmae'M_$iZu*R7$Q?ZI]1pHqrhQ="\l\\oX'XD=kStLAKd@o%76%VF8PM^=Xn^rc&mLYTRH^ole$#3,AuKq>CUSNZ+)=h$QDHf_I5.J1q:b!)\J%*MMiF2`FESUJr:Y/a&,*`_#u0K6P:jmK`HJQCE8GUiUQOWN(!mc0,9D>V8m(#R-Id%EVSmK$jfWs5s[q5O],-);:@q<`>!'d)CSSc!'Q5)Wf!a4W/.-E'EqK:(0+?M$E=8[+&@@ZjmHcq?N'?LrU8VAn)fK,!"3K?!4)IrU]1=OJPZ:G^Rql]l"0kp$=Nl6ZEECur)]i3pZ-7R?mfdj!6++?rr?f[r]7"Pms8Dhf(7Non)!D,q+?$]lJIlab_P0ga%l!<<c1+#mCq>qm61&na6'\>G-`KJW5W>JV5C08i9I7]f\%0X<'Ei"N^7Ge`;;M9!4n5$GL+L:O'Op%Gfkub_s@lKUVLc+>p`1Y&Q;nmRYJP%+bqG(SsLTik"$3PMF:lkYIDca78K)m@jl*=a\>]3Z-7dP$R&Or#=>N)O2:SZInGdu"U"QHJ)30RrrE!GNq*,Lm,Qsd+7R.>b<,]Nk3W*JdD+B7!<&,Y*l$+Bdf0<4$,?)CZi7^dpV24)-m-P]rpe$YrrD:OGE;b(B-.$O!":=SZbP\KDU88#rLa)ifg!6$UQ),M!%JY3kB1G9IeW;[rrA]g5E]+Hj,X->rrCK'miVPS4o>3q;u('Uc^`g`qD\:9rrB?SIfBC<)b^00-N=(klHf>*n)!JRiRbuMK_QM5RpY2G`f70bg"f$%Z<NeMJ\^BV2W3Eae@"&GE+CmkG"FL%T-9EB<38o*-T$^d9Zn'Q<<5?+m"=?%a'Pb?XjoBpQK`3+B&2e?]31W,`F>n>H#:Gt"]"%"<T`k4q+TUMDFSV07^befj<4QP[K$hQXBmN;%n.KB"Dnl)9d:i=O!t97BcNJ%REaQKkMNtA+(L)8%t=4K5F>7FO>"m$r)=2ihtuOpYHmilj8R.jjQHLmf5uN2\(n^P1LKZabCA6O^]+:RAbYYC$u^VK:Lspk^&-^#qqo*@YAo%D*TOO,!0rV`5N[6r;^J(%Nn)ul[F;hT8YB#m]Bh,Mg:PrGf)(7?fZb2^hn)r(1$m.%L5R^D7?V.-;P#0trJC$MEF:s;r-\=P[?e9PZa\fNhu.cQ:h^Q%Tt@Njo5`l7DIVhd8FTie"[XXTPS)AT.$QQBl_-S>Wk_7Kgr=4KFZ^BoeC)nYYC^HQAkI>5YE!;J:\5(1m6fdEeQ9%"m5OLj`U8?"FKR"&3mPM$DV<lN_kJ@2fU2PGDtW8NV:th7Y@LVWp:8>:Tpi.)ALJ\V=K4s;AL(3k@&fY!Jk(YDBi%.]MU&W&m%'DAgiuQ6\9bGD_*FLa'=9OA@/!@l@X3>=8[e=bWfFZV/B%cTVP9YBA+<>?676;F0!_FEO_X.7^,]c"'!L)d%O7@X9q9/`=9hZ?!>ZqbhnAttIMI@LJ%q+Ph:Xr0hjl4dMdu[>gUm2si4&^&lu(q@gV:BZp>t#_P93Md^fSR^2l:>rX<sik8sO?@^b%mZ'UY1OX1n&BYN7S<Y&PCnB(iuCFI(SHgd^VI@^ft!hE?k.2\0P1F'(QL*#T_j>&BhPP,R%H7+Cf4!V&Ka`2n^Y!gt$'bLuF)"_B#E)W[>DRMkCeQE_]q71P8#RE[mN5O'p#IJ_k!i351(XbOg^c*N,BmEN=sTr,h<E&]Ck*[;,M`mM`/dUVfl]R2R.3;OOq:aC$L)FfSa:^=UA`F?)s/8Yk9$&tUqi\?\%d,T+JW]GNV2]kI`Ji\3M)B)0*V50r>2%#JcWf!Od!UXKTOfG3lW/(ML,)'#o^f=A7-j/s%qqJTjrqUp8^O,^iHhY:%pV2'-PG([A2^+0D7Yrl720:K$!+%L_VimUH:tugP-,;WMhnApE^$$nF9g'4c73,?>.[irjVPo<9-7Rl8U6[Q6ZBC@o(Bfa]qqo*ah@G)0msb"\J&p5$Ma,<([k+;r/6uJMU4UdE;?u*d)*(>p9Y`MS+9KM_rr@XrpV2(L]n(V/hnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApDRK!92'=bg+?ct(RgiSg2Fgq),A,RKdAk@C"_[3VkiM<HIP4iWQ`bm9MJm4<,^OGqGIeHG5qqo*ahW;MqgSmtDr($$7"][R\c0d\;ln-'p8l,@\I*);0SdLk0N-.,(,u#C!YLFJ.H,%+@pV2&9If8`lrU11a4;Du0dT&XT75\%"e'pZ=#pPrIOe\?_;1Vf/8D'sF_$Al2qqo*NamoP8VWk8Nm67\8AJ"4!n"7I,A=Si8<Xp&4A_Yb\8S5\(#;&(9P(.PEIJ_p8qq+4'hYlp"p9=Nn*QA#?IP+-qX6TWYm[Dprqc2'9I'l\W1G:*7g@]IfDNs[[b055@oF^,6*"RMmmsb"G*rYQarU8VAn)"$3hYlp"rU8VAn)"$0*:?%Ph)XBf+h,()@,SMR*(_@$<`VKX\_K8<bK5Cl=SXC%R!3/IDmu[)A@7p]j57QIhn@G3aSu8$a.C4>?+GD?mb'N^,\nu!FjBlaUSHTE%8LX2p?[A</3Zdd2OL/@L5;QWWiB,_qqo*ah'-aMV7H:PiQ?"#kI:$Z?ZTX*>*COicHoPN16`LS<Ph__eOLV#,`U@%XenYA16SFHmsb$"C%$NFmsb!!JC!AdY&b2cG2?-+$(o#oB_(q7^,gJ8YK#Y%-VBggg.I1BGc.I22.\$'4o=-MqqgM.$[tQDr1Nib!44g7DZi/%!B/Qr$4:aO'd!%a7o#I4@>P^s$;Au,n78NX>s]AY&i.Fg^&-^#qq8+Gmsb$"A:OE;J(YHYkPcFtHiF(mNN_g-rU8V8htQSgp[<S*msb$"HRjJ8r`gNYHXGfW:j+bjfX\)DleU;bT.QS9Vr%<_*=Y_bPuVfdOjR"ei2!5JOY<Rg<TE?4hYlp"bZF^!pVK`%pD\bb!(J=1rrDBJ^O,^iHh[FppVK`%pD\bb!(J=1rrDBJ^O,^iHh[FppVK`%pD\bb!(J=1rrDBJ^O,^iHe2WfB2e/WNql]/I9Y;_g5JMFgA_0.O5S[eXGqC,H@Ot'F0mkA6ckG3:K(IpjiZ]JENRt^YYes3%t"&cHRSmln)"$2fKYR4rKYZ$rr<W0o)A^GhTtrbIeW;X:j_rOHhY:IrrBf\pV2'$gY7p3D&g51i7aUsf%A=/V"8*fH[@2IL!.h9@Q_#C/8Xt/['Efg;EC:opV2(L]BfH!+$TRoZoa;3U:[aV6+jJUh5Qp6AS,t-b^D\=:!'l=LGA]fY:i0V(\)fDS[V1QQ/8N$lAVr;BlrVFhYlp"n*f/Iqqo*ahnApE^&-Ihq%`hU5F7/DSaBe8T-QU.FFR-\2D1U6=cq?@ZZoD9]VqcMoHPZ:YGp85Bj$m_+-E6@8EV]%8s/DL!0ob+q9/:9TJn`7bO/`!h.,'K_M0%Y7:t&qmMKHhFO\uI;-T']RgDit)'l#ZV'48c(Q<r+jEkLAgc.u<V@*6t*A$IiZnb5VTK(G[@i'*c5;p!cH`XC!rr@aQrr=>t[YC_i5"b8"h9"*^d_6[$3]FOJk*>r"3gaXGF'IO9CgEf72+#Fs'Zh3PO;*tTARGg.qYkiVb>2_?361b_i9VB7,;.X9Mq.cY;'_.[8Y_"KQKHs!?Z479b90V^YbF*-,9[0o$D,5jFPuE)8Q*J''\%7nScJgRYsT*MrrD?!fD"`Una\(,(@BTgfP9V6-[[6,D<4bAaW2/\q$FgEhd"RU82'#&Rq-ZkI@X6(L$V$;BCX1H^:T:An*U_];dWj.7o;q+Ii8!@j.4)a2KQ>d?5mNUd^[#JUtZhO2mh6dg;EXa!/f13O6Y`D04!=3WX@d+1Wk1[<m;TaIu0$`:gAL)[J0-9mJO6h!/3sn2t)uNjDamSou$]8fm+)h51fSE[M,k8CD/KU1l9p(WpSKp1_l8E3E#YMr<+l1emc52U7aU:q;m)[^@>CNG!E?Rh''5lr2SC5OMWWuXpE""0"^-i<M/V=8sj's$W:Q8@s0nlG6t)VP3b?XOjo4iR.u[@!,ir$KtkP'U"W\H+FgA5+5u\Fp&3]NZZU3"`L#EXhfEZEjh#^?A)q^cUNL0h4,7ffne-XZ/$eu`]hN*3-!;Fj%4or>O9NtAR*TF:];IBFgcM,cQJ?c`[6mu+F.)B[Am[9VX)J0kA28E:W[hk"*%8G?m)IpiBW3;@Bc:-MH"D&rjH8-VF8]7oQ=Kp/^O&cRC%oO&]pK=e^\1Y,!#e)l?oi*'!.HQUp+5h`r6J-(rrC!Df0B/b@D0q*rrC$XKDqW[J*VK2rU91En*4iXiVWAaHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pUq^L!9%i\p.HJ4rrDRs3t)&gIFK>2OT,<72ZEd$Mtk9k!/Y?4rrDL0(U0+3rrD'7M#RIRg&D'<5kj_s3'V_-HNLnXfR_Q0o//SXrr<Z9c2Re#NuRIjY^b^1fjFMtmEbad;>\[4rr<+7rrD/n?hL[Pqqp8jhpme@anP7Qp[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;\0e`<'^[j./P!:P&*s9+/2RP\4nF!l6m_tM7<+V`Y^Ee"-,q8F?e:_G3R<jL$f!Z1m!mOH)aQB1[:_Ds?5Q2?Co23,d^[XN'p1?umf:O(`V5iA_8NDs#5MWeq"cFRg"YC.8YAeV3)&7bF%=Mh\2n00'rrCa*rrBgU-5m-&/hE<\8\3)OlXgCkIb$<JIR>oPIeTb<]m'F/rr)9KrrAC(nnd_Ijob+fq1F((fhI]_Qf:MBd+.fDhkQuMJ(!dti[Q[0qm&,6,_daYWMnO!+[K<hFDtonWQf&Ek_5.q7^?BVrrC63Ys)=gDY\5.qe4SO%mXtm>)eT"Vl(/WU^c^PRYQ%S/\Op@,^H9&oo17kM,+nTk/h0(b+u#!=]^70eQJtSD^Q<n0sH:*J:GA'Ke#:U%LpX(JFGQOli'*Hm[$)ff<hHjH]^m$<C'VZ>shOf79r>Z%:'uc,goUk;H6XdZW#B&<'n\`'bF&idEmVK!.kLNR\$7"8`6VFSn`#?BqqW(WMbm;St:14A;5=UNL!,4MF@rTUb].W)uJt7Ub\)=+G(&Y,EP22Je,VCq_3LDDrsQMrau01bM0&oK/8gJYIqI3(clHnIQX"XXBsK2\=@6)G8aK1V]4<6$G&@l0,jf%F4XAh,8[/?0@A,A>5ZR=q6TT1@Wie^^,h;#g%!&54i^)c,tdXN\Nr\2g]deVe6CB8;,*=8OaJT09XO(X;of!;g%jab(eSP??u"U$QFV7Tgr-7=/cMVh+iiU'O2o"^\IWj:m8<?/rU8VAn)"$3hYlp"rYYY8bU`\9n)kMd/dKLJrV[\ehojX5fDUtaam].0DX%0$hikU!PW\.,?F(aI[)dab>i,GGTDL9*gAUp+d#\/<+1F0%jm#Y()bIR/3*j?n#@i.$W.LKtMkS;B_bpBcmO5a<6XKuda#B#J>sJVB`*UL@gjeg]S2MTLfDbh'i6:2c\S*2D4ZP>qjQL;nif7C(SVWk>j/Ru98Mi.?J-NrQ@rG8>8P>N_MVqH1O<$[gI!%R(K?q;Zh-p:3HsDff8No%S'>(S4]CbPtZb*Inbfng`Q=_K)Sk8[^ZZJ,q]/.2qFZVZ>AnLA2TZkX"m**K[8RbICfWG'1*WH*h'OU[Z#Q9#Dmp\3#lRo[4\4o1pp%HJZ[,s@m0Pp-SJ_MlGVOUW1&W6r]6A@L88!0+gBD!<kp9<;`-Y@2ibWAI2m>\:U7uYErE&apEAiV1/aFu@5PfodmL:.l&DGNIW78F$fcpJ3dqF);l3B'&EO3bRf>Ph@rbO=<dn)"$3hYlp"rU8VAn)"$3hYlp"rU8VBBV4e&O8CT6MEgm7'`S11q>3\=Q='-Y&,RjEL&V.lHAhe'IRa,+!d;of??*aRXT&:\WfMW'VAHpa4b[5@mbe$EO?`]X9DNpaid\mrmYa6r_Z'V#rrE#1BAtlL-(KJalLM[=q_S48S1"8)YPeb+rU9+En*(5HeGK!THhY:%pV2(L^O,^iHhY:%pV2(L^O,^\Jc*B7m"'V)rrD&OI$Xd4h_DfmQ`l_tp.@Os5Oi'lU]1=B^?,(ARf<AG2I$12Q2^j]M_Dhlpg\[HH@%&HrU8VAn)"$3lC%YP$.Sb?e\<ZMiApc[j*,Y5q"H^KG9pV<rK4_^9Yr9A7?d/amV-^OWkBtYh8-S+EC#]+egKn5j=+N/1*/:tHS=IUe2nVaJ!7n*l(6&9VJfu<2+MlXS\m]fM1mg*AaXUCI0B6q8!_(o`t_l#6MfrHi/Ub[O<8'f@o1Y8[PTfUC#l1l3='2'U!hJ4=d8pdA^RU%I\D9UrU8nar5:c/G*hd_q0h%*'0BYP.WX?d\/i#Tlrm2l`qD>qk!@+**lGlbZW0>VH_YK''XL`>dl'D'C+,os4Z'1MEdYUr_7k@>I"^i]K&<Nu=7#:[2?u@KID$]lfsrWaD,&oJ;'b\65'%;]D^7t$L6AK09d=plO8pdkLoA.$.^?BDZk%DX[?c,_og:e27AN7&/p+MAe/s/58j/K$D*IpeHf+ThL\$/tkO(S0C@@6'UINkl)%=gRpk-(t'cLJrD^rf,c0nu#HF]Zg#![@RB?afrJh#m$FXUrMaAKgd:4L-.rrAF1pNn^qaJWlf1uS*C?:QsEmk9fld:2hj6VWa!SRU+^2Me=k'DZZNPr_1OIFJ:h9"K8s@d>Vlj+$LaCnJ0[Gqj>"i?U@-B^U>$?<oeL[1B5=hnAsurU&k9DYNUKp[<S*msb$"IeW;[p[<S*msb$"IeTVhb&*Ck?$qe'/Xk&mTu-M`o1X0)^`54LEjI'DP=oqnCc,`57E>Y6#ooRapV2%U4o=-Mqq\Q--Op"af(iC/g/W8Z-p&r]pDss%SB7HS1Un?nDXO<;-%a5a=BmIH.'Y[ODpA7LhYlnWc[PWWIeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S)?9VKbo(5_u:>5(@l30@MDf$uV2V\("rq>MY/\e\ENW*oBg_i_.O8r(5)#XL0msb$"H:0j-Nm^JBmd/6elri/sQ=a`<9/@6%:F,i3^O,^f['M&A9g(n/crNX>nP&S??@TD`8>K=%C6,flR]!t]>qb6$2ptHe;dqoYhYllu+T?K?-u!(DR[^JZ4]Bg.`>fTan805aM?k>]"E?d;;>-a)'N%>n<E&sk=F9eWHhY1fnFaOFrrD55q#:?o!2-N)rrDcCp[<S*msb9:LTUAJrr>.la8Z/<"a_'c!4K)GHhY:%Y5\Ka*VI!-9(n!@[eHX(B](g5D]ab-b/(CIEu=gLBu/ig`DK]0:Ro_u.aPggg/qd,'`p.PV2uX[msb$"@"5q<pV2'_^Z>LO-a3MF9@rk07N<LkD2R/`,%_,]h0X$"pE&%gR>Duk7g;G?-2uE%b!*Q<n)"$3C0uGamsb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[pKi?n-fMMeq(^D;]u>]CdaND0_nt$ep0Mp."cg>^:QC$!g7=4gOt`cIO"c\O;&Mq^Ff_a)OhC!-^&-^#l5/pGrU8VAn)"$3hX@68+7GYsoDS./P>9Fm>DLq%k9!C:Zr9t7.r4VlM;eWa)R_3)$HQ!g;l.3`hnApE^$IKBhYlp"aSu83,6%YK,k'(W2tm"FpD[Js^&-^#l+c]DrU8VAn)"$3hY0;1"oeR5C[p`j!"o/Oro[A[pV2(LZ[qT%rU8VAn)"$3hYlp"rU8V8rrE%4+80!2kPkOHbPqQimpCG9^O,^drrDf^IeW;S_>Kcem&kA9pkSU1rpKK0^O,^iHeO,0^&-^#r;Qcqqqo*ahnApE^&-O`!33XI3RiJ@Z+E)7Oo0!(mX.LcTnVQ@Trg;saJpW-eN*nQZH?(GdnTm(Tp:DrhnApE^$d,r]C0Y2I`C)ILU=)cIbNY'$teM:eG;RfO!dR@8jcMqZhQ%b=j0g_:8k$Z7eJ2OrU8VAm:5VArU8VAmm)s/>.;=olAtXBrrAFHcGTIVk\/l6-[/Ned_<:`g:&rQqIahM$><QO4LI'$M\T;t;T`$0`D\9F\CG^_rr@a&HsNbAr="(ggUR7`,s<hAFJ!0g:BP@07]FLIDRdp@GU"\HH)e1b'@b5l=#;U_FXj=EgA#];_`8@b./k;h5l(OgC0;"$dcJuBrmEt,hp;2VVOkVBIeW;[p[<S*msb$"IeW;[p[<S*msb$"IeI/5-N=)!;uC>/!6'KQYPn7.F4dhGTCY3,>Q4[9cWpJMmpUtF2]Mbs(E*h\NMZXTXmu;_^UqP$WP>cpn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"oRm/DKtREcfdqLmrrC#glnA>3:j^b\rY4,e!&?4f(]G_Ohu<\hHsXZbg]%83FsI!]BE%t6"5gfii;MoRljELU@L#h]bgbrSr(%bcrr@@-DmaK!rrA,KAUi[n[m0V,8+/Sor!B;$!1*/)f#@CPIs[6+<^14EhnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#e_ftWraH]TjbrUM\Gf.I/Ib3[[0lTY61*C`%#MNA_g>9_dd4L*UT".(L*pb,93&KBOBl%+:*-AHKT(GDhrZBYq\/I_ig4-K9Wq)InMI"RohHR+`p9)[mE8:*#2;]ujn)R"@$1iee^7YrPSj5H::=B)[mk?qrYhg[ChL5/N\g\$X->;o&:UZ#Mm3,ZT76P)A_`c95J21UIs5eCc:`.pNRO?=DEZ+O1GtBW1E#!IEk6Xi@l'CRWHft/Z<9;L<0PWbN6a&Xbf#Z?^RH9W1R?g!N3;*bA8?6(bjJ*81RZGIC*fq%AMVq"WG?N7)Z%"4k,PPdXI\I=7jX_YP"@j[S<?"?4L.%2Oul5[YpGsrQ?Qe`/Bi!-^O,\/gR6mV\?HoFCLV(cgRE<IZ$UP0@'PeV<_G<@c.>7?`+!`YZ%F>sG"3]U*&0pWmj!?C55g5Rj`_JM't<[3'j4euG9oV3_rBlhC$TeB>b+hn=S`@q&/Ue8ZEA;01`Wj+"5fl5jcLaH=lb^r3711Jh8iSr+-pLs*rYQpOo21B#]9SAjiR!6TRJ:d6]7u"gIl7>kAOufnOE"ccJm]d2W="m]2]RYjRM_PCS)W-P&&.KH5]>!=HuD)oAFQ+N).?pMHs$)[*d7HS%rDrM=qESOV+>6p*SmEbO7QES?J*aOt<G.;:3%CA]I]ta24JLf^6mD@'J-_eI#iE/Ti\\8SY*pcM.1@lT/)H!8.@$4o=-ZbPCi2!&(\V\GlPs=*O<9hS_<*V`PBf456Dp+se47=4p^rX\;r:Ki!6S04&Q*IU?s1*1<B,9QNApTUc`\R^^5!nE8qhB(bR:*n3>q]B<MLl>Wc(9ch:1Fd:EGL8>5?&8_lq8W^h4@Us/N&k9Wt&m]^I'DN>hY*g)#/EcIM^S%KqR/"_s5q96Oo480un)!<0h/[j7qtIdj^YpbOb_uF^TB7GOl94s7rYa'I1r"Q_[eBU@T+3)`G(@Y5J"Z3);6?UF+19obHB#[<1p7o_2EPp.<D#fZ93k'Y1&718b5VIbr*Nh!XKU<"5KQ.K?#@-$k&2;*&&&3Phrqt#9rX:(r#*_3\='.98>2j'90@n&<m1KSc[Q5G,qRB>M_1Zh>FR0d3fhugIfoE^Tg(d^PP"V<Ip&t%oQr>WrU8VAn)"$3hYlp"rU8^+r5-58^A`,%io#3NrrCs(]m]glIU.HV=8\Zi!6']\TDeRIQe=aOJ&U_.rr?h.L]6D[n(u1d!4)4`YM[%l%mT"_TCXQ4!19,P,S,o"qp'Bb!56'qi@s0ZidAN@!5l:DJ+lak?H2u>rr@T&chVKHrr?6fIJ_mqT(\ZI0`1UZHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iROA"bU]/I&ifF'g"[E"cIaRndQi&:brlVjHJ+6j>rrCr=^-.";Zi:"AS8\A,5PXN=hnA9.mp"+H=20*krrD*jrr?u#ra+LWTCF$#U<e1j^Z@][!,ibMNW0!8B-7-R]"G5S50X$,O/E<a!)]fs!(&obHi#r&qEk':55js,rU8VAn)"$3hYlp"rU8VAn)"$3hYlf6Ik[Ml+CCX'po#8\^\>rj?Y/Qba8M0^aj9ldY3>lchf$&R[V!;6c'JA0[:OjeilgfIrYXMk?Co:U^O,^iHhY:%qVD/O_GEJaa^6$;nG`La&cVjGa*`71!.Q.fqf[0YJ)T)8rrDrfpHPu9f,sPI:k-Z'n,:J"hn=^C!:ZsPjX^>VVo0DI2:MG@pkR"!L`:h(\ZrN/g22+qd-/Qok.;;0_FGkLA9/]!32PCi(pqdfeIYd.d_ob?PO/POo0*2)ZW6P_]<AClhfmq,*jI^feJ14]3jLj-X3e:JGO5C/kk1>`,"Ete'UG%cROXb.&BS0Q\D;qK^Pq2:rg#]M*+D$f'RHc.5@!]-<d;F2K9L7>(N4csnsoHJkHa4<hVU62k1j/kEp`8UZu^LeZb&,]Etc*m`oFnde73Q(IrSk3l12>hhB*t5nPs)iR&lQ(;q'&+/<NRDZB.=8h(Y80^=ph@2]ghtf3raq%&F/H#FWS2b=.T4jmc>j=(?8qqT'O%UopAmJL-1Q@.D<hJHU>_*0NZ7El@>bYr]uHLe>6LN#<X<EZ%ta+7&CPrkoo"A,3H=5FV>a*)?.]F]b/XakiG%:L<scg%5IUFZZ"ikA@]]pfqPuQBu:Y[PK!_A.,(TUrq.sBHo8Y'$W)W)u3M3qS`=(ptq.f\XDY0qmW^;#1;k0]h2ae*8.3NiO?NZM-F4(Ist6m8Pp&IW<IB$Pc.l%KT9_(G2uB>MHQILj=,2eOGRcYP/kU>Mti1+<0@+r1B&rqhX:!kRsS35pV2(L^O,^iHhY:%pV2(L^O+MKq8`.ZgG@on,I8h5>qk*NZa'1E<VX^)qm0kS:UY=$OcV\A@b^G3k$rg.l5J]5c0p,Umr]Z>hYlp"`=A.!m&*MMhd,rY*?&\KM7YJ=JZ0BAIhABMW__X,QZ1#H*6'GiV3$9=M2d>fqtIjPpV#Xr[cYEp?*h$7L=sX8Q.rpK$]Nk#/=edJ)Z3'6MB%@7Xuh0MB;MP-YlK^7J:7=P^&-RY^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iH_PHABA:HK[/-8eEV1GK\FR'+NOb`Q.k9R51!>1'&BY%Pb"Rgg,@<$Y\!J.kl95%%^&-Zu*rYQarTn=a^Q+l8nd9f]:Xco\-b^n\d:6eD+(8<.U5p(XLTO6_SnuD:*=7&C`m:>UR>?QVX=s&!rU8U`?heKqRt(%fpBU\N4!4J&ZB'J/msb$"pheoXJ+MUm#QBB<+9)>HO+-ilIeW=+D;Uh4oAK?Jre*?TrrB?cIeW;[p42MeL#49SDeI\jm`OfWhU^BTWTYe:3Qd;Pg97BJQR>oG5(HU$M9Y*2UIq!?LuMJjkgo#*"HS$+msat3^&-^#qqAMeml\WrDiL=&pABM)k/lER/_,\iAm!>G!L'D';P`"PAqF0b6HHo26:'Q,pV2(L^$BiJm)8A;S[CDr!ae,%GjW-bl,1bg-<sl,),6BhE`A=Re?s(=IXV+N^&-NQhnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*N>M(%8J%qK-pb7\HrrCpCao!Sr=%JYsr+<G)6qJL6,\!*0OMEOl?@D_.^&-MRhnApE^"k@48:kIBIbUi(gsa6lMZg?i4uA_'GjX0,NLT,Q<2PbUr.I;`hnApE^$N5shYlp"aSu83,6%YK,k'(W2tm"FpD[Js^&-^#l+c]DrU8VAn)"$3hY0;1"oeR5C[p`j!"o/Oro[A[pV2(LZ[qT%rU8VAn)"$3hYlp"rU8V8rrE%4+80!2kPkOHbPqQimpCG9^O,^drrDf^IeW;S_>Kcem&kA9pkSU1rpKK0^O,^iHeO,0^&-^#kQ9u<]14'N3\r"UWE2Sf<L&i".`t294G3+ZrU8V<qtIjPpV2(L^O,^eiVlY\0<+G`Zi!q_q*>/gC::/te2\H#eKC^5<AC+)Z*h=P1K'OAa0!ld?ee.pP+iZbmsb$"HOp#J^O,^iHS"&0IO]K,c2Rd%rRLF6\1&>k@<YJgaDFV1>VO2]Ibi/'+Na"VjbAe-=FZBJS^idqb>@Lc544Fo@'.6K5"9W`an[mD*L5"MLJH<8?HLqZGT+_\UIf4j(#%ZL_/:fEa@(NsG1Li"R_G+ce+XQuWp=V3AMM^1CjfVNW*UCP=uIVu,B2&Q^[6#3TniE(IeW@lq2=c-[sej8QL3Rf4l_6[%G74=].5f56:Hc2`pPrNXEFDEHYqF_!U@,-pY/\i\Qj6P#AQl<eu9d6?^`@`SqQGPN*Xob4VufHa2[QH^<b<g.bmMX7@D1M>-&e-_n:LVpcZlUW.MU@6Y:(Yf2,NWTVl?U[5a,!<][?>cV#]RCdQ48=QYYD!*JBBL0sF6rTplf"b!lWpV2(L^O,^iHhY:%pV2(L^O,^])=[AB>F,)'nS8l!VinA0PPH*E3;NtQ5VgkjeokZXVPU2H&cn/@jAfEHan@FdGbh=[GQ.Y4:f5+&'pZJOel7m@n^trH9htAu6NeeD!5,VI;>qrulro^sj-<'dX/Qh!r0'tp"9")NmsfN,Io?:HB+*V1qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnA7Zrr<FPrrB?,pcncYMZMI;qsL-OXG?^&\,KoF`\76_42:dqGket*S[\V!(@4Qi7aM)7=pMfhq8)sWHe9)%hS]o$rrAIdet;`!2K/TeGi*8lKDtonhTGiu_maN5mc';aH=-F\:]CDHir9"\MsoO%pE'=8Ia1a(HhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(N:]CF3XZr5Hq5<hu?]Da5\L,CFIeZo$GHTn.)Q,Q#iSSbmCJW^^]Hg7Vf>G$HEV0-;J`TH+9oH0GRR7QN[:k!dq#5&iP(+qAl(+0/P-:j62+a%cnHrFOj*)#L9fRp4[fBOd@]POr2'c9r<crm2:t82Hq!-/!kLfV1!91PMYc!Sj(*pO4+%3N4g8[s4hD1f[rA:c!2ns^iTA:?2%fQ:]fO+-1hrWhrbtl[.c]u-*%39Xhr#VWPDb:/R;L)q7#Cc+)ZP4EQ6O0#V-Bho91Ej=<coI8E-&]b<(I_6Yqg[QhIh9BDYKI95q:un;WpB,4<7DkMQ"oR]PaQF@gbIl(Fp0F'5cZ-sFeYq^)'WP^[BqbOf1b2`7p4e8Lus^iA\BuE/?>^T?FE\r9EkF0&?R8!l"+5fn)"&@hY3f=@QjVFV]YE2TB5]/:j`8`r2\L1<NPSKKUHTBiK@qH+oD2h6LQ?XGeVV!OhrBo/$l:TZ($^]P*kJ^1&3I@)(H*Z5Q2?/nL+8pHqgF*IC"nJ)u&AMI9,=/C3ZKM]U)W92kcr&1p4Yq8XF>Edns]k]BFj4P-[KAQ]U+20YbO[UE^CXV\7!MYSVUGFKJ+5Vo1pDp#/ocYJ5G[B7&$Ufm!2ZGp/V[H"*?OA:f%O8YMRhB]XtNfK=2n+r,@`NRS\N5m1G>k8]XP,"iT^;T.lHE^n997j9WtFEJahd=<?lE..Ed";"*Hg_%@*I0`'hhnAuL5N+j,!6h8=!&H:iiR^5P]X(Gq^-QlM_khfM7+*4!=7;-L5tLcVrr>.bQ<&dIG(iX+>$7.JVuA7oI5EksX`'rcns]BGIVX<tg"XPejJ/jE^:og0)YX)Fl72)n4pmUHZ+I;DXrPKqG4a;7miY&Sn(t&]mN=DEHS7P[Ig6-FXr=a9rM=K2RA0jX`*W/9Lk`[n<hMXJrU0):fq5Zb^O,^iHhY:%pga=(0X(@,^RS[+\0!$s!;H,(?[j_9QXBGdrr=F]nR9&-rr@LCjn;OBTCI6OJ(i?prrBTNHhXgqm(E42p[<T!chKl*r5ue:-3!t%"65IAo:<YbDdW952uIom0E2%AmHNO,e+OT_^Sq/4i&5ZU>L<BMf".K&pV#b'VYuH;rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8m*rr<F?rrBA$pnRihMLeS'!5G/5IHb>C!"*-6!4&ck?i4!(^\?f-O'j>OrrC%$)ufnQci,u(p[<E:He.f@<U\f3rrDisrrCg7^R)G/-i?L6kd0.40DSED!8GMB,Ce]Ua8Z/-Y:K!9ZTmL7_LL'MrrCE,n)"&i55pYXbtl*$pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%-m-Y\rl>o=&,n$`a`%.L)qWbhq/QE7A>A^:rr<f"\j,rDmU'h!YP>G8^[502rrBR7qtIj[2nt]WZA%c(rU8VAn)"&QJ+/[5qf5cY+8eA&7"=[qh]DcI+37C[h4<#epi^i\!<2opcg8hta8C6_+7e-trr@*ep[<GMqmd5QYC?6:D>sTi3e&Scphp*3R54MD;=2-Wh\:NDAMa54A&4/%d>.$?eQKm^ZFZPO;Fm2A=fJT0ecIUkn:(kKP(o5BEDs*gF8=R<!ri73#NTCg?XMd+c_5^b].LQO`)KRta)%=A-2YsMYX5+rdEn;]QR.JTYf6<9022MPTTQpRm_IRa_(qX.9-0U@9qGI=O%hc3oi+jlI[%H[:S?-,+/Jf.]k2]@Qa@"4HaFmV$2htn#PhGKe*I#6Oo&["Z[I%$bHZEkY,J-j4bqLSg?LWPGj8CDSsl$aXh-_I3K+Zu/1VcBL)B#n8Ms1^Se'rMo1O9)'_s,`]8m4J14)3\Y1E!"T1nQfhq)"'Wb0IQ5od2J#gVDjJinc?7X2dO;T=kYJk;*S4(CK=h9*W@*iFS(B!q\hcdK?B^]]5LN.B!!eIHgOhnAuZ\sp*Rqn2dG@!=8&mYl&WlTW\L3$%[sG@i#ZCjpkLmTalu<tURGAk8q9g3PfFnj>0&4;%jY<(RghI3>s.qq=3,Z8S=bCb4Z`jk3kuDrS5qf$EC0RZf7Sbu)GeO0"..Z-<lHSn6LnMNYpP7oa\C#,[i`$G(IsWME[rl68fnPs7p^,)0,7YnmZ/GolqN62%JUS):pVhnApE^&-^#qqZ]#!&Ca<Ps6EU2.r7oA,cK.Is%;Jlj]Ws0c;K^1#lt[MfWb3;O<[0bMXY2iIsW:lY3>]f<HCkmsb#0+2<0s^O,^iHhY:%^#.pUo>_6FkbrqcG91WQ?5?`?O&Kr_X[5C8``2$aA>lN\fp^T^A##j%aA2>:B9\'PVNRL;#,b>eIeW;X&c;=;HhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY33^R1($T'5ucg3L85UJl]s=Z,M^YX8YP0j>ft`R`4*,*F4IamNNNXc8)>.YkccpV2&#T)J-7rU4KnjTF"b@=29@m]r*%bkDV5b&0F(:phZemJ/$^)g[Zc83S?#TZC/$Ec./rL[)@`HhY:%[=<Z"msb$"IeW;[p[<S*msas<r/9k(H`NmQ>H;:p3@EZf-T@"&R8'HSgelM-DV2(?<pPh%<0X`Ci#`uQqqo*ahMm`84Y62'<5U:N9g#^I;,9;m'_"m3R,s'9U^JGG`?LRY?j`$+n)"$3hXPse^O,^gY5\KdLN&j+poQoiX6PZ>m[W&m*LSt2_5\d8Q0`]!euER6_O;BZK_Y=e#>R86+4T0Amsb"E^A[NWrU$XES\f66<Gm##jme]H-8m#27kpF7V8d!7n/"Xnp"9]*@AK]L4Fe61eOB9trU8VAmD^$<W/<%^Q9!lp1n#;UFcn2JO[I/?;B]S63>$gC"G.*'^O,^iHcba5rU8VAn)"$3hT7Fs09k*"N*RC4ngTd#*LFFDGs/XfGW=tg1/hecBoOCmS%s^&\=KH2:og$h.Qkl`5.,[_qtIjPpUrJ5qqo*ahnApE^&-[,hoR[SlEK)agO6o"ViidK2^TVZD>'A82<+=8/S/g'\s2]j;V,Kh,1El>BlV@kenb0?^&-XEHhY:%pTd$]aM7(u47iIP%K4!?!56D(p[<S*ms8pLpV2(L^O,^iHhY5#4op/d)Z4p]!5s@WrrBU[rr)<BrTrHhpV2(L^O,^iHhY:%pV2(L]g)MsRRd=CB6jLWjYHi9h`KHHrU8VAm_A_thnApCY^\"Gq^\2'rZV7%rrB[ETC:Y8n)!c2p[<S*ms8Mlp#oYAa7#3tM72,pl1VRKbLZ.,LK(N>;:OuMdp#b4L5M8KHHt?f4S[S_aa-ZgV:;,apV2&%hYlp"rU8VAn)"$2>m5Y"._:NeN2rqujKZ+7ebK";3M`ORTrt/Y.Ock3.Nr>gSu.s$e`1cqOd$DC*rYQarU4OJjl>se&+XXRdWP"dj=%:(n[:0gCT6)Z7gEJ^-t61neUrcVLumZRF_)tr"31)6K`hh+#JL#l^"L`HHhY:%pUt4SiC;_GnsB0HFH$fSF>bco7It_s[f'_U*@-f+*DPBRG9$99>5ju:ALci<VP)44=4GK#[Hm*h'XZE^<)M!%K-9i/FKPK#rrA?1+#pjWQa6IfL6A%ef2Z9p,23Il9h,G$m0&SeqS'M_f2P<E1q>RqVNRtb=#5XUWfh+BF@B6\'^..?Zps#M>.QRkb>FrEhT@>+\RS7u8.+=40sTXk+Rmu(p[WpkRr<7^mDY^O)n-'<gH2HNk-CIpF)ASh5-#?fgY7>c>s:&#K?[l+U4TupQGhj`A:g\MA4^3u2FgTZO*VOQE7oZMR*+g_r\D4pT#"s<Yh?ZI<g%b;VB[aPWg8DdN6+oH,ZQ[$oG*HM;aVb1OiW5Y!XSL(jGi/]iftEB,Bf)<h+G7>'!@7l`E?;FK?-7Tm?cRG^)m7AhYlp"rU8VAn)"$3@k[UMn%bL9o.0X2FY@6*i@?5=YD2jH:WU8jga8H72D*goWue17G+<]\5rB5!B6u7kQQif_B:fijaLl%?>(sop!$hLDMKthV^GrY+nYsN-8_5%)/#YObGid-XBTmCCl<8)3^a2Xm,r!JQ2l/VOJek[a6&_mV+Jls@YAhp$2[qW16h\$e>3Xo#T.FUHOb7+#]g*$Fb+j=X^TKN1TKfb7n)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"oRm/DKtREcfdqLmrrC#glnA>3:j^b\rY4,e!&?4f(]G_Ohu<\hHsXZbg]%83FsI!]BE%t6"5gfii;MoRljELUDqe>QqdX^7c-%+_eiqs:@Io=Hneb9(nMpr&oqlGg,V^k4T1NFl<#aKg4hBRWNJ#MbZV(S&Cd(o@PZi6O)U@"3\8&r6+BL:S9KGgKg@qlHc6r/(*1"@!dI$S?Q47X/05l=6]`/!1#8c*$pTDblrrAl;\A.o:HeKS@JpH6<pP8WArr>P9A,cP:kHTO80%>BrNZ\2fJ,Z;=msb9:T]5iArq4sK5P1`F(]OJLmsb9:TUpARrSdb)rrCHgR/[0RH10YTG,,%YE;oq$HiF*=0>Dl.r<F.m?h^_JJc>_H+1T)_:ODj7"S9?Wmgo,arf0[mrr?i\IfBC@[3,"8L]7?9hu<\UIJ_]QpkSkL$QAAmPJ8Yt0RRZ=p`6XuI2Bt3OSp]WeXO"2^N8(sXfkCP4d3=_'h72[`(ecak]4'J89<pi.A!7;SY?C#5h^b'nal_o<P5rU^A:3o._[G#NP/'@]t`.3@8WYpm<l'+HlO+&H/WqBfnaY=Ce?\Qk/KoW1Ft+76;iA-W&fUuB5#VQa^aNE)CU;^FX7oi<kFa<9_#u1$>G_Z5kh\*rVPIFT(\HC0RNQ*=oNiabd*T2A,cN^DTqJGZ(.`4I"L`VkNTa@PZhRqY(s;A<<Z"Gn$qU-NhS25lFjAAAp;?o'U2MV.B'3-rr@VK)Rb-aa3>NPKYJ,.Y4oeE+f"G<oTJn!9N,(?WfMF<BdOQVV''lJ520Q)d\A7o=PfJ2i23B8rWK/K?0.XsIgJtL)hkDm]e'<T:Y\L<o37h]4El6CXoL[nIeWB?X/i8(Wi</(WMlr%Xf.\kZEgWI.Vc!KWaohD.V`]FB:=.'k&TnX9/@2P,l@D^e5T4F4S;]Qbu7V@1mJe52%i%#e5%m-P>=<h1J'.GaMjR7Q=_D+Iq<;V`3U(J,a(mD-^%%`P#&i>`sa`Q9,%q+,kK>+6OYZD8M&<2_'=gccnichNkd,p8LD@4#ih(^&h&n(Q<.2KN\tI48KEDW+t,#1lp(OYPOH:"5QHsAJ/j_JciO)nqqp)]q%s&205/+da7A6S/re.cWTZF!G1"Feh]Sp3"bs0dhX!j,$I#(K\\PlKFlqJT`bh!)oZEP>-ih>:r?/k?ho'4-)#QAZ5-W/U_b&LMJt;c\[cLVW3f,p'GLOu>f4+#I$d/?6%o5WI=8GItmiV^8p1cL?&7BHVP]!10U`X__D.77X$<[o4n/tj5!67P,qq]#6YeOq&IeK>gqb(dEmAINR0(ZtWmQI2UG4'9_DS<`IMpIC/D6:j<WPdn<fa'4EC)j*'Z</DGND[5-g,BKD%D)$Hc)nMG[(210\T%?q#($qf+-qg8L<NLhNlkjHijePWf20u='T7E;M"ebgj-htOPlnuT4E;ZeY8iF"d>-d<Oq5<SplBn\^P'4[q02c%q%N9S4879-Y-m.eP4dCQ+Cf_gf@5/=34ChImV7TO7&6"mPM%s"5N2tYj/0qp9g//;hYq+O2a0%[4s9cumJ_^[IFRm.1NZU1cH9/NBsZWFRmbNfCu!H,WrlDRm@*<Y]3+L*eu[8*nXjAGE8k40R'+HBb/#ed4*"l.PP6Ne,]TfW@B95^a5c'jOKW4ogGclof_bX]#Q2ZXfaIdgqdX%&XS;5!O5DYk!.jclAUWZ9K+GH#]hV1,oI\^<HJ0inIt6trUmR%>R@PIq`,5qILVJ[_E^.YVk$S!8^G,/H;fq,Ma/OMUIgkW`kP#X7Z.P&\4_t&tUM\gaWKJ+5Kl.gla3QT$YuB]ReM=Q1CLuC1B>9(3,D'RW7?l1k4jB*9/:Q#ga9+i4Um&Sq-h6Z^rjQ5.rrDb(IJ_p8qqo*ahnpQ3Kn%d(r8R_V`PD:&rrBg/HMdMar4;n.ZEO'err@rdh*:f-G;$7WSGrSIemn^1R1K8>S):oCrr?WngL%^BqAt.'*C&[drr=c,r(%nLJ+oK#rr@ClrrBoE^Z39.J,]M(Dbg<4m[p_sNVuBI!!0Euo%o0$[FG*J^$e,O2sauImsb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msd/ipfg8eQe01ur)=#QrVZVhmn5>/;[<8dG=)<0ik7e\!5Bb+HN?3@r\$7gqc84:eORB$dgP$AT#.[[p2)u"r2Rhc+8L91Ik:,:/s!7m*>?1:2oR,caCaShP^AQs=rQZLNi:6%j)Ymo,B6mkaL&8cVV6=h55\UQHG>Dg+ZcC5BQi2qn#Pa0ePEb!gGO7:0\"dD+Ju09'Q[h/U<(MGN%/bJ@$$:p4h5"l-P;Q:aXfc%UR4^u/n5Mr&Yup</+rmshnAFkrr>@(p6YaDZXA:I8+&&0e)'d?rrA^`GL-6HrmUlIdE.dU!:>'u;#^Mg[3,"8L]7?9hu<\UIJ_p:kW$<)rrB`UC_-ImrPed:g3__lkU2qmrr@:n[/U-uEb7Q5?@2GC?)[c'SK'lihZ!TS9CLa9rr>@(p6YaDZXA:I8+&&0e)(''!'ra9TDQP)VuHalP;3(;g@O4:dd9R&ki)OAcM.>=l<f#7Aj=EcrY6<brrAJ5cAo:,H^skP[(:l/^\7,,B-uM\T'+=9)Veih4c,`d;,]u8XQuFj"]FEW_hrVI</)]\\-tiiFaob0o>fZO2Z?Qi^Q07.Nk9eEB_PgTH"A8W1`_^@gf61*[<AuWECU@FW]#;M.E-)_KLLjcTK]"XXC(\I@846en7(8k*@f;Rn)df^PcofXQJ)d1@-Z3ZY9*Z2E3FU!q\/r*fg,OF5P@@W3.LHp5"gCoR,5R#f?96P,p/>CpoduNrrBdjEr0[tJ&Rm/rr?fVrrE#:Qf#LS0tmLu4d7UKp[<S*msb$(]DhkaTRY^Z^,Z,miVroK,Q@anNqiA@!<,<Wp?_4;rrBsC\,QI&kO*h3>HU3Nd\-U?QIXmiR5_m-f_=4CHX2!mZ5NS`IKXe[o.'NRgOBn61[X_mH",AWf:11P)R?]O4'upH4^Q"_punK=St]$=q+1upeFC]oYJer@dBeYo?eJKUV=@>lr6Y6'^\SUipo)3mTc"<7\Jh!f<:%<qM-4ROY3_oOGc#uLe]_O'M&nHS5rD(c@$<OXI.eJN4c?;Ze6.1"WYoYp:K!N5beHO/D@#9#P!;//n)CJ,I2U_Q)7ufQr]bTbgSighV:6I540\In!hkokUX!6tA>>`")T_pYams\(N+fUU26`CEXeM75iF[s8A+NgiDQhpQ.G6f?WI#]r2W*CTHato$=*%h^@3DGhii6=V=Xe)!p8`2`LoWZj9P'rtVNE0`Z9".JCM;ufolUsK;4-VtAU%fSc(,<#;tOU=Wfb+#&b"Sn5@OQl\A%q1H,',Fht)eU[GI._b0/iej]MBZ!3u,uD!/a=c'kda%ajXU][C@M+%ip5P6u&@%qO6Jq(*LWj3bDJWM`afCqN(TTmu#c?d)BUB&nU&^MW+bD(Xe2YK?DHD^A@`4hnZc&iFiBX\=um#[t\j3eK#%/JgmHb=r6T8W\m#0D24+n4GV+CnJ$q1ZKa%`)Eom,pg[;8^5pQk2jW0KtZs=]C0^R@unBOpV2(L^O,^iHhY:%pV2(L]ifiQkJA_*N8JdVe(9tD,jF.b!1&eK-VZs'9HADk135Rc=Ls=I:E:e:c;clk*@I^4ATjjmFMMM_^O,^dRJ60!p[<S*msb$"BB,]#R6Si3KZ;C+b\$48hqL@7*)uPL?aAn\G83;&Os/jX>[D<:^DXU2WF1J&"[Cm-,RTDA&>6#s^O,^]HRJEsmNY16/skllaEXHaVG+/WP)R[Cq.(0i=VTjC+ge0&'"8Zh[m'QTIeHQachW`OX7)!iB&Cf#8kk/Lnd*WED2torW7pm/n2_EIVQ\3:?^';gPZ,N>AYsj+V3tG@Ll2<&IeW;X$@aWkl>Gk]RBU>F<LUVGf-5+7gohs/bk#[B.9CH<9_,g?4LLYFZQ/P[`;(m1]TNf?HhY:%*r])]m!TQ;n$Y;Rbo@Jq@qaKo!-aC7Umn\Dj2(+2=['#/]8n71*"GA_O5o-2qqo*O!@3h&,a-=qb:KgE9.Z%J,a(5)GpIPZS_],JPB)*KhnApAcIgm^:#EL)p=$jopK>2WSAagM4ZBG>UFD\9VoIcToH]LpeTE:Q.irp?hnApE^$f=Zq]?R(I=8C^mfnT8SWC04)chKb@P9;s$Q2Zu>+#p;-@3!nAW_g]GoX.'8LNBnn(uX0rU8VAn)"$3hYlp"rU8VAn)"$3hYln:rrD0leGfO4Hf`:dmJ:R9[_hG@p\I/0\g-`D[P*$H]7O^0j13W3Mp58Pd&7]rV)A<XhnApE]orBqIeW;[pM@UdlaTF$q(H+,2>'9U06:uFX?9@l'Su25VNkAHDTsDiirnAn.n^eb"m2jS;feeKn)"$3Bto,kmsb",J'M-+:<_o2[FD_?cOO<kpI&qaKc)bVbh3LuRE-o2q-j/kb>F-(GS3LdaiMspqqo*ah&(6pc+fH,+)0tZI<F6=GkT**[!OTKa%s9iUi@?>VkM)lj/Y.1S^+,3+!i/<I9>:^hYlp"ci2YtG5^#_$k_paT^*TqZ05>g_:J%6Ygj)l_`*U^+hAnUB3dG=B[dlP!/4d,pV2&ihg`qP^@RR('O)6RHL#"a3Ftml@qIZS:6%(m/Om-hic+ntEio;>ki[nb4Eok5hnApC;YEn"p(q]9])D0P]=Tl3pJ+95UFVb3o!D5KGE.S'9+o32M8iK$NT$_1MAg.oZ6G;lqqo*ag'cfOqqo)FI2gVhhrGSdD2t^M)#(,VmOH^YMT1ZGa)1`2:5:F31K-aRgL;l/XCRU2</mb'_p'H?hY6JfpU]6Woj6;8*jF<\;mTnGG4s%oe)De45QsT)7]@m.\Veb0Vst2X?D`&&NAaQpn"^,k*r#,Pp*G([^O,^\5Q&U;m"mgqrr<N,^&J)G`n0tRIeW;WDu9:DHhY:%pV2(L^!JqDJ(Yb<HN*u`In0M=\^g]Xn)"$0i-Y45HhY:%pV2(L^O,^iHhY3<rrAKXrKh/BrrD.9rrCq<fA?JphYllWrVPKcqq\K+-I;Q>S<s3urT4%Z]=jj*hYlp"p7V0KIeW;B46?4TI>RO\Y#B$%BoWRC?tZ)XYrBWJ,ZRtfZ]h>E,HHDu=lF1O"#1cMV/7<;0e\D5'p_s2Fn`XtpUsNi6$tc_mu:Ibb$N'>fd>IXc(]ut2Z5L>B4>F]Amkh(kMW4>Z.0Kj,Z<5G/RSRB(7R&Q^O,^\^[L%Xn)"$3hYlp"hR;S,cg;//-Zj3Ac:`(n//<7E4>q*g=Zlsb).-"q81Nih.@rPmRPl-#,3+<l55js,rU4>OK:gC-Bm1"E,HSNS+c4kmY*$UfMqt_,Z$S^>VGZB/aXa[Em@Dd,W\r8HdEtt>:YM2i8EgrIrU8V2'ApM#hnApDWSc%>rY'dc5FB\"HfY2,`7cfHe\=&A.HRbgPZ7oM0#m]E91;,U2)ZP$e;'':C\D<r'N)o0ggpU'A,MN@Ga]!+FV"KP26Z)q[/ON4AUD%^l*,LRjP;@?=.,qQVDi;b>SP\M_[\bJc`&@4HdWb1OXRO>7!"FAY.S?rW^,lqCfiKnq$^qsRkCH'&#(%o$33XndQ2m`VGEo^2\mq4IkVAhl2K,p0$2rJ4l'<MFENXXC`LD`#C('5j,'bPmL1.3T1aF/W9TL=Pk?^k9heIsH@!/:,FTF3.1t<**l@6fo@3Z`E:r+"D+s*5h]#K=/h:o.NQ4=K2_BriL;u^Se#JahBUNCcA1\5Z]#bmRDQHLe<@pWRo$Z(+,s=XI;HRL.Nf63$5Ctm#kXQkYIeF`X7f1$jhX3&mDLWl1!9OOabVr9#qR<EpSSup+Fd1.\r^q@j)_JGnWtg@EYMW>s8rDnKI$\P[,)5).Foj_2kBOsNe5Ykd1"`DA:ZZfkfB/rO'\aS1ns_G:.OnjeNp#<plMLk)TZ6;)\t9'V<%unlS>:/p*?HLV5BW&e8PKj9PuE7eq7QW^p@Q[,7S*)OeLO'`WVJ:(#,lls'`mL_5j.%<rE6n$O7M!!p\_/m1N!-lNa2mNW3'[1:!)*0R@ApFhAs/Z[59_I=`*91bV(M(']p<%VoIa>F%_FbN?LY7L2)S>`V<U*bGbCLFJ^F`3i8'TP%ItEptiP@j'BXV)o?>l.BE1a@)gM5,Xsh;L5q-<0Mp2l`hhS7/>b3(JYLoOoUqpVH1Fp63$)7kb(.p^DA62U<,eL7qNLAk&+&'JHhZuXp[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*ms7;"!5dTBm$9gGrrD&oFr1/TW'0Girr<CCrrAH'nVdDI'$ftG!8]mm@4,pl!6)P^rr>p&rrCW$n)"%_Ie;Lj"ag!YHhY:%pV2(L^O,^iHhY:%pV2(L^O,^]rrDtpJ*lL8b>8-<(]OKo^]+9:='YV\?NNIY\pbHFin8^#rrCrmZb=%h^\IT.+83:brrDJ/*rYQpoC(qWm+Zm]^QEI4.>.GbrrBrlIk[G<[C-:uVp,'Upm3=OV7L\p?!lDrG@'3Z^6j*4Bi7Y>eJ)$2mg\03=r_rr1R`(&"qqq:!7JqmkMQ4&5&>_TH1L,WK%bKpE]l5*:R16`\sA)Gc]-7^U8rrj#5Nj=P$2UbgcL7@;USN2`Yse22NCf!glg("[g2H9glXq^W%j"j.8$)*Op3"N:cU"QZEBH;Jr$>^^$E#mTDbIsqqfC9n<\Xdj?@U61;0<pGErtaI3J+>*)D(X#d'hIX@?uP:h:%u.C&0oUR$_\Qeq@OR?F#4=rQ1&h6)E`X51mI,JT%ejSo5)*P8oW*]7_ZbN#CCrn-&$VO=@&jL6umEJpqWbj85"@jXQa;]L]_0JV)(iTd0\hqIP&E1b,@nP:WLUr<M>Rc<W(#.5^HJhGL]G!$LuO+-ir\G*c4ZRbM$rU8VAn)"$3hYlp"oQC06Kq//C08%$N;l>,4f#,?UgQSB^W-UtIC2$ZO77U8E>jTu]Bt5aDChom#SXGnE`g\uNRrq2BR,MXO@K->d808Ghlg%<Xq2)M!JkXKlcV)i;UGN=PBsn6-b"4M7bgcInW&EN*aNHtf`Q?E!Yt2u5O0p[5H:hH/.=!>_UoYg+Br66mkPQO&Ekh8<r&sr7c:?`]rkQ9tp[<S*msb$))ufnkm!gcDpi53Qa4D8_H0;r#r.FeCp72`O^Nic?b[tqN<u4O.c0Unf.t,rLqFoQo8R5=s;'D8h(/>^L.?2&tJ'%TM?i)h_!"O0i>B4;)Lj%rZrP)A+^YDQEaQ0Y:.MtC^S'Ip9H0>2'm?:=E4[E)-nu5h3E=)>P2ElK_mKs2aoiBIDNje*:mi%6$kOO)])\RUgo`=^ZmruD3ds\;\qqo:5q1X=OIJi+)!6)bL0E2$eUO)h5HMkAS!4&g(4oYM?%Ga8GnolamLReAEMq2D;esR'IbF@D&PQ(VokM'@YHhne5_Atl'<W<%R0Dn?_*.R^QmJd05HN*u^@DCj@q1&DELMorf!:HJ`]oDt\rr<)+TCUiorjC8QpV$#Ym5OB?p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<Sg:\\-arKl-T+8f(FJ,T<DU[Li/peqFrQ$5Rp!91[\rrBeYI!YlUBDsPDhtpH(n^U.EHd`AZ\":I?IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeU,Ar$;:BrnhM]bPqPSrrC-$rULobh8oTr+[>jLO&#]TiMG</!;l,l2mqOIrrC*m6iR-;/&1fk?[hbB](`u>!4+3EhT?)p$3("2"o6(9!/c?u>Q4\N`qB%3^0H0@./]V8!6'9PO8\eLQeQ+fr[c`@qc6eu!:DDPrU8^)n)`g#TmQOKHhY:%pV3ifr$;IEgm.EMrr<T0!0JB#r--2rTEk$%rrBN@FQ`WDS\P1)^HZf:1>QsM!$7C1r3id.!8P]0qqfB-mR,^ohnApE^&-^#kh#h7$N0m$^Zd8P1#L4lU\<T3IJ$&_%C5t4i\<:AWncE1*6F/mIBb%08?Z*ZlWX.`YusX2)/#-8=&1ZV'eUMf]jO(`6GEN8^7.HMk8.7Z]UPs1:uf"AHXl7_]_T6qOt@I(hp2opC$W35<9Z\RlPu)%.X5KI8280;7G6F2mN>fQ8K[D".`INM*6Cp'0iZeR?Cd+BqOIa2U3lXLSDV"A]n)dRmF)<0bjCqO+*)5RY!WB&2Z?VsS&&_,207gK\9uROXr@4M<uG@;nPmnH1%hp<1c%VE,]Y#=+Fnmc`T6SL9U7arLT[\sjma)8R64eNJtcF@r,tP]U,o:ml7/_M-Dmi>WJP/G6t"+$#U#1UOkr$",A'G8=%?.gOjo+d;E5/]>T\Fhp(I?i^WiA[r7-64i\q)1alD@U:XP<`HM?Klh1@U7h^=jL;_H\hXBn("0giGI:E>F`V3Wrq.SS)F6BX=H0LG>Y%tBi<cb+JImu>ud[c+?aO1dTf0tTrdYn86\m9>eOBa,)td*b@[3:RsQNfH\gU82a=@B4qn7hfe%IqERtgj#ZY<`,!Td04o,_c,4_l;^=T.MYPSJV+K+*rYO!^"P-IJ%p@)^O,^iHhY:%pU360[W_Z@g\Hi.](#Ln_7'(B5,T-a_W>L,X2j;+ol6A!.;GjD%$F+)2u;fU5m.;YhYlp"ot^BUr1pgY`37@&YDj7H]Dhk?9(`qjouWKaGNRD7M3--C]^e1sitVR(KiPmG.d2i3<5Ia9HhY:%VOXM6.>,^m@P_-?r'jm444;a@16cnur/D.ZB$sW/;,tXG9f2C4e;gQHnicm-^&-RqIeW;[p[<S*msb#&R[0hZU'`qBH0X\[AOn8LBqgc:MM^G&Oi%;6/'BKL3<<,G,b#<np[<S*Z=i`bq#0b:VQ'G7EV="tQXf^G@,eCHiV)-iGprEP:?'/jch;XX[iPdR_.+Q%PH'A1<ja5YZ7H,DnYhRun)"$13W/5*MtgW#lHY@.e`j*i=c0r0h!i98R9'^(,Ei_KBr[m3nknLi3?"l_r!BW9rC=VLpV2(,5Ms0Ohn@]%ntt\JoUYR=CM%?2epJiDiUYfeORgAj(WasZ0Y:d?OcbbV+P_7BHJ$7H<f+uuRu_pj^O+^NhnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^!I#U]'>JsR-sf#6""`h?+DIP$f$TJ<mHDi=&C$/g%?9o/bM=+n)"$3?giI<msau:l^dR5lTP7JZF^bMjYL*_FPsW/1jKubQELITVTD>&1T4bsWm*bc<?[XfG#ASk++*asHeu)BmX/(/g7)Sti2&:J:#3:_]:TNm!#`%EltnX^+"72o#"hLp4;'[Kmsb$"F=I.?4tZ]&m1.[@mCf:%.Q[m;0KV3.[]qg:Q=nD/NP)X)<oiiE3Gk`94F&uraCTBJ0W:X:eQQX\':?/,qtIjPpUV!:V5^2fSrU+JH:kb_?4*-)R&#>.Sp6WuOO"'0P/Sti#\@BL,0/TSqqo*Fp[<S*msb$"IeW;[p[<S*mq1V?QbktK?RG>#7q:oNbYHEO62/'T]'8ML]./u7A5o,`Z80n9]8Em<^jWXP3iS@*A.bZoIIH%kmqG"C*tLE]i\noB!ORLB[si0CV;C$\PGEd=cK)$W/sOl4`mY>SgnL((dSM3pM"MOL8Z"'iHf)O6fsUSCIeW;[p[<S*mppqDOal$sGN\rEqg8>CH]>5thYlp"o\]E3IeW;[p[<S*msC^T!ri8+2>HkE!/UW8rr@,@rVPKcqq8dZmsb$"IeW;[p[<S*msb$"H@Pqp1lqMdcL_&9b%:SQ^3?coqqo*ah1,=r^O,^e@/`lmp/a7-r'UA)rr@7i5Ms0OhnADCn)"$3hYlp"rU8V<\g3*ZaK"IhaQVn,*>fN&ARIkU"(DcDHhY:%pTUs8U3]0S;_;l[VY[>:=YU+q]'d5b20C[9/.Al2LltmH+4Qp3p[<S*'E+9#K)YhC*Rk#gqCOU4rr?2Mqqo*ahnRijkV)c%h*:o>U=3]R!;2]9^&-^#qu)kaK)YhC*Rk#gqCOU4rr?2Mqqo*afX"4D9gqcP77BuU,on6C;USH@`>q*!/N#Y+'GU3/7&^kS6P9Pj:_cq0!!D,lqqo*Mp[<S*msas5G(7K7N.'NRUtn2[n^!pkGB;,?iPEn/50rL8^>IW/4=r]j?#;bHP:sN@p0/\9Mh87KH'4^D&M17Z_*^9s(2nY\kq:3&_4BqQSa+M:c-jtZN2Fg;I_ON?Y:E>,L2)U5Z1)9[fS]O8BO[p?Q:6X87^"&@(Lg'!N-tk6M(5H;l=<m#Y>J"&c4CUTL63@*K#HF.cbFg#m=0f(%(8?'/G@6]NU_p?B4+Ptk-i#kF]RDC6@rlc!l^;?m7L!le5TAe-%gcN'u$[RA\n:Wpu/Y3j3$bmO52+kZB5-lA?^J\Yq\-+W00/ma&t]ZVl2j,Kc7eB;M4WEhDk$b\6(jqgjDj\Nu]6%0]X8m@gD9^qq7P62Z%Ifmsb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;>B5.!F8U$aj'oDA8Sa*rK`SddDaPekeVq8ORY]9GSKhN\ZU:V.1]5\^7I!oPtj2UZ,W9g+=8E8D?I<Ba:p4Xdr#A/,8`U$2:>sssFat<:nE#ZBP*EP(()60VaZhXHO1mJ]j1c*.Obe+U-EU"u%.b.S&QCb'PQ:7a,3L*^)&u%g&UlXd/hSDGODf:0@pOh?75P1CjA,cP5Y@4@+./s8]J+"6R4b)[^l[SoR]u9mXLAq7E:,DnM3%9@Cf=u\,r&;+#?i.\.L`cIf4Ycs:fN5h;ZB+NGrpc'0fD^VU\,QHpCYumYiP4PSN;in'$=EZ&n)"$C!"J>b(]NoNiWoIH:J?93(%:&HU\n!h!5)h:p&>#d?`j>.q\o4ti4*_$eDidbJsZJMHhY:)_g?b7rrB\QpjrGFUsmd7rIoUmq^DIE'S#Qgr]PbpQg9/#`kD9E/fXe437%N\V>gP!?N'?MnD<%'J+!WV+FiW4oZ-t3@:&p3b!3ieqo1j]?hu)Fhu<\]YC?HYLAq7E:,DnM3%9@Cf=uZWgYW26'($\<%s@88LL1fT`p)4qN+V&'>F08UI-OrhIrAuh[BO2GfutLM)mj=b31Ru9,>B1I2,-2qbllFpUFR`9`t@igj$)AD@e84oNnkM)c=&Ib=aVi;&_*9P)j\ERZ*c;eA$VK7N?6u3Z@aAf=UIe)nN'5ULodZp"7MC^0ek^\*\SNROg;W?,o&0r3Y9Htb7J5r@;n^ZqtIEe/5]1WYYPsS5r<Kod)q7l;T0iEOssm[;Fok86R`-LCjh=!7i\eH;PH_sLsa<aMB4c&E)k<5JQG??@LiTgE?b<%6/[Ckp[;Z,rYsVM0E'i'`"2enSs]NXlmpb;rr?UPifF&u+31S`')cbK!8,o3ceu<Oq:+Fho7E>.]mKLgJ&?V\"oeS8*r(<d!2S)m+8pn?p\QB=!#0qO)#c[Jka1Ubrl2YKpb!NbFZ@_Fi2-GRY?q1oB^3<dkh_2nbY[qm9Q`Qp;!o6Z9"b*E<V=qile5V*<<RA16W9AMg,OIJ3BE$GC1Kl,E:"Rb_+4uP,]$5UlMdr=,>6TnDm6h<RkHW^7TuEnD#M&S@*289P"//'7NK7(a2_CA1ik^tdY9.iJ3YL;Wd6]u0Z'!=RZof9`B4_t*3I"-,#o%:4C@!ZMZ25AjSS\dHhY:%pV2(L^O,^^cLKS740`tK@q>9Ce(ZtMAo9)*Z.p9gGi3RgT58.RKX&fNo,&J'/TrWl8gf<7a#m+ccl64#CqGUBmG6`SaR-+aJAU`6\X.s9Enc(`@]4?m9Vj\1-2W(M.jkKp"`,5^e[.sg/u8d("5Z%IMKmi(UQ0#X=lP\^8DIPFA8kP&a5hUAZH`CL%INX$rpY9o#QBo_9RlaNlkKI"AKTomrSo!?YPf+4DuTgif=2p=E8U8d`dd.T0E$4kmsb9:LA(BMrr@:,nH8dk8Z/FMq[3)dp/1f;rrCn1r-JACd4a)N!<%n(p[DEHr9A9oq8#`(!+*A9fY,g"*]aCt)`mp>d@EGL:V%>\S!j,NXL;29[c1OHY;g[M[a;m"c<YE[.9(#88!#uNA^REspCMKi;"ZbJ2Gq'+X8;:f><"$t1trOPD69JaKuY+,O'JC5prma!$3OQuKM/Mfk']/=f98ot77XQK.4JtYRXC`E:D=`>C=BB)MlTUJC],l6qq/gQ7/&4h]p1.p_#FCe]8n\3gcL;MVo:4TIligrbi^dMT8rk;Pg!`\)+plDZ<:G89"S`^>ER$<CM.pjSnE=\Q.auO&q,<++,_3XZPa,J^0fo]6Y/$`9%pA,:FD:i%_f*eA9&F6]hN?lI;Ma9QDUsrZDLZc=_),i*K)WtPO5pMpmE"jnTa5@@d`\R9[)kAQ=aV=/Bgi14Ho6jgOJ1q^&n<7h@G!!rrCJ]l&Yh\]u'dLAKTomrSo!?YPf+4DuTgif=jJcE8U8d`dd.T0E$4kmpe:VF<<qn9g3<UUcM_ZH>]'i9gqphWOf.5G(3gskGg89;\hEAe2p/0LlWuC5!$fO#+S63/?T\;c#Fh7F[oMUCfr/IbH82`>euhkRV]Vu'5)1<UD?m6-(-1Ca[`i1f^u>0OXalR1nfk;7LO'&nu:j:kei9M>&$nX"iWS95THouQOt_4.s#M)4o<m<m="Cu^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O$'p9B-i.^@BD,pBPj=HKaeTcf-[S%>rF(QW%]Q^rtam!ii!%@^5_\fmq7Hd:5U^<3pfoFc4Ef^7@qh$ocL'oZ(V*.5Ljee6QM8H!Gb/a&$=@cGA5([in2$'?a9%.4]K7S:sZp&?25]nKTN!G&(?HmNk=dJut='kc$&&=%^.p1c$nhajR:80ai&LHhXbbrYsVM0E'i'`"2enSs]NXlmpd;rKMeh5PL+d*l%>?otUM,@p\3q!!U8icDMQ[!1Xb<p$:MKqu.Phi%P&epV[U@-D$V)!:25n^Y)-PU]1==a78Kq!(=S+rrDaMn)(s#ht*heJ*-tgrHe5,IfBD&p@o$q!-gZs"9/?mVku]U$MX#_;>r!D!8]I.HN*um0@p.'rJc0un6@pMl>`Hl_+Xe.?G66n^Yul?!ri8W%t$YB!7GTGO8d#0qu)b/MEgioIicAs9D-("!+T@6r"fhB!'6W_rbtd8!8"E'p[@lqDh,UsKAR5)oU:)9rrB:,IfBCZ+6&@[iuc=Fr=]'IrrC^'^OHF)J'Or0rrAQ'^\-pM]rem?iX`uQUtmk3kGitaI!4g-l]$Y-T,kR*pS@Z;AaYuoI$H7i3>a0R#2@llgpJ[joJ=-9/9<;a'=';A8G8n659@BDYOe"5ULEeE:[FXq73,&YH\Z;-VT[_>b"/QUP*WC'Cpk8j7:-1?<3ilO.S'Z]`EM2^mjo="D)?iZCjcaTWX)a8Uk1#q@:fQ#NE?5kO$?Ehp0rH/*p7nE[bT.I&\,(`?,*m(=PW<H4,pD\B(24W)I/jY1Pj0$b=.T5AT>,_:IUDcjCkH9B7aZ=VMWtH8s2?TaQ'Q$N.$."00r$k`FUHtZ.V6O7[=DJIRbJc"4L;t=4(!C[+1C@PgZpZ`?MTYN)bE3O*k)1eWJBf*D3ms%'6N]b0"T>=;qg#^A[DtJ&?V\"oeS8*r(<d!2S)m+8pn?!Pd;XpnRihGfT@?rr>I%>Q4]s2=8$N/fXe437%N\V>gP!?N'?MnD<%'J+!WV+FiW4oZ-t3@:&p3b!3ieqo1j]?hu)Fhu<\]YC?HYLAq7E:,DnM3%9@Cf=uYe4aYbnF4?[_Mdpm)^tCk^ZE]Toe75q:?L:u5bM(VFN0RYUq&/D)rnF*cib<#.Y+=^CUP2lS?(Hg]:U,Ocm(JtApc<8qYkF[BffNr+8suXOp<g]cp>-:B>05j*XHo=hL8CW;JkE&B>"KSV"ls.;E_6!d(a,]76Ve+inL5bnL,=cF/5%]((f^a,h!rM\mqZiV?[7(shnApE^&-PjEsIESfNc/FgmF%,i7kkr(QcJrn/9Gu-<gkI_W@aCTZU_!pq$7#-urG&Pmp-Ce5OU2`AC?2l;WjQjRJVmhDZU4bi@o-pjBaa?8F*hajO,>j)TCuqKXN*Z2"_FW9'kXTrk/VUR!>DUQRMb^k,(j/r:c/E[nX]Z8t%$7n*Yb=]c6X^t=:U*rYH*J&?V\"oeS8*r(<d!2S)m+8pn?!^G@.pnRihGfT@?rr>I%>Q4]s2=8$N/fXe437%N\V>gP!?N'?MnD<%'J+!WV+FiW4oZ-t3@:&p3b!3ieqo1j]?hu)Fhu<\]YC?HYLAq7E:,DnM3%9@Cf=uYH3k+-&`nl]tjKlNKnaiP;HT.A5XsYlilJAGkI=7C'ig-Gk`PuGo)c$KjX00LF>R;g5=(oO.X_g<FCOM2jI5TRjopJR^l;"VMbaq:c:h2=C)e!ShV-dRp-;&hX=]^-mA*PPC"[l!+NS0M!L:+f\jAXE%;DUH^'dYB9l"6ijL)+@13a&4H-#PASIeG_t'>;T`msb$"IeW;[p[<S*msb$"IeW;[p[<S)(%sj]o]L/0OS4H3m!\M7N5\Lm\Mi:t-'P'^g?XgC9ho_rm8i;a1h;V0qqo*afgX&5.dr#c3i8p<WGAb-obemkp((TL9('pI?!sYeokOf`_.(e/!*Mh,HhY:%kDB1=56p_$+)q0I=-dtWd79Mh%`Fs1-='\;DbmrY+IkE/<b7D<('EI-qqo)UcF3NJ!7F"pBBpV<fUF4g6Upl6(>HjWk2qZM7e,!k9FmPk7SX5PFquJ%T76P'IeGGlpV2(LZkhiiY-6^X#kH`rXnEOub/6dk"?AWkZhF*B+VbD@cTG0(f&^o%FYV<54\Um@L'Xt-&2)!%p[<S)SGrS#l_)#Ua)q=]rejL;rrCVWIeW;[p8lu]DqB=K>06J-_V'8oI#N$^OIL"PC`_H!\ghlIJh"ks'Js`.*%rNN="G&j,1f$Wn)"$1C%'pWn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn(uOjQYGhmkDfHM]Je'mh3a85MQceUjhkT7\DOlJ3l+bg3D+%d?atf$@#q3`L,M/dIeW;[p)j;7ZLuROoAdE3rr>KbbPqS.0>Dl.^O,_P03nb]!'WKBrrD[pCqotTqtIjPpT[4)MT+NDe6%)N2M2Nr`m[@HNlC#Al1+Q8I2iM;Js)"GOuR0TBq[d,,E5]&$N]_QrU8V+qtIjPpTV!.3]j4N=<I1#eXHYgbYgFK[rZC[/mB\)`%;h%b14n]P+sG$W%gnt.4b$9++*asHRh,FjbN>X5:!SWdZ@q<AN05=GGej.,E-o>AeAP;G>dE30p&U:#J-asC_^gUIeW;FOo2-V&V:>TI/<n0.XMhVfml:SV`LqirWF<lp[<S)2Jb$uIh;J-U)M:Wd$kSI;`L)3[rPBuDlUro6O-2^WqXb]j/AlI2A]Fa='rcbrU8VAm+=fJE5rqq7Zg+P/9+)sW^e%BTi*kt5ZC-J!!$+3IeW;[pWqa1qqo*ahnApE^&-^#qqo)pB(/nsc&/U=DG2r=E+(L-Ok8R`Gkt+:._7V$Nd0Tca4J4+8Q(\s'"Wif!Rq_&*rYQarTlB@!+kJh^ZWXZrrE%V9pbk[emEn#msb$"p0P<<rd8ocrrD8ifmis3p[<S*mp^G^%>W]jauh9Y'og&gZ-\AUIO>Xn98pke;lM;jUS+?=$<gP!0d0C/DLS2Un)"$1bMU#1hnApE^&-^#qqo*ahn=d?rgW0nf9WJ`mZ+=5IEA%`n9t"G5I%Z:@kCpY[*[3!IGRI=Ml<_Uqg(;Jif@<7&OrcOWW;e.HhXsup0P<<rd8ocrrD8ifmis3p[<S*mqNlLeK%l"nh$6^h.s5QSmA=lUMQg\g"U]QO_Qo53@:P:ls;`=Usi$,UGR;(Ys:k<HhY:%pU1#$^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(LZ6f#'q3h-sra7`<q2"fmndfX4G"\oME#C8%97u!2mf`N6Mfd:1V8-&0^@L!iDE='(c\/;u'^[D"K^/sPgoYsHq5s12jdg;Sa8C2LbWf^jCmnU'B'FpaLYXqu`)C:pYCdQ@c+'u[A=-CjN1;;PaB-B(!HE:1?@NQUBpTW?*EuHqBn@VPTL`0.5$680MBA\oT)J$Lq_Z%D4o=-Mqqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-Jpq-ik:j%mM*YG^fLQ(=t4l0bdUh,p53:V1[-S^!RtPB>u$o!S7_5bm%X9`@j_=\".FF`RP>6mOPi<"N!Br^HIg`XRtFAG=+@T^0:R5'DQp`Lk7KB(ApiSB=d^<R>6p4p)[gXqF^_j!S6S+W(f\YTs;Q-'Y(@;i85I9%)1V(*P30N'*+;WnK:Q\Hm[#j57PQ3X<F2KB4IWCnCRg4mbVhh*ouG2;'RH]lCD>N,9&NLDuW%mJ?+*H6'h^`+CILT.u/$J;NNb@aPeh;@-:p5AYK*H$/9&m;AoYe@Wc)[uDt>DVEmQ<4Nns>cfRn7^Eb./6'/p4FTaGM^+:O+shpL-qFIP:0K.$>_O_/P]Ekte#@#W:s'b.1(j\hYd5buO+-dVq[l!6p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[;WcY!8>H_1(28;7sUUp!:]B]=Io=p%<M!`pXtCV;&WMQSF,plfl.@Ggk!+a_b35X#j_OoZ1IEQ"9mpFdMf&[VsE/MnO\u]8tu9cgAq?DnPe/<o]t1?$uo!FMX*Z<:)+s>DakM24,k0'W2fr$tH;VrrC\'m@Fac,,ZY<-48DdaM;@iBgPK6$msDSbnuE'rr</ihTp,H9C:cs^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^$@QU!"*68BjWDUQ+'51A`)AZ1A`.*\9h#[2g3R(P&H>H8%e(u_dU!$H)`-`V6$Yn=t56/@Tl2GZLR@IrrATsc>NOS2:_XQ])!3d[P@T+otP\ThTrq!gN;25#r/sW]U:6\V1PRX<gmGrf.I@TEU<kC[h_VSdGsB/Zmt_`1;tE*+Xeb$CDI&2)uKB@i9A"=?gt<1qW]-&mln)DO,3Ul\F+gTf_r),q0KBo=F.'OaR!3;Mr#CO,u]ZBp*D=a(K"IhbYu[Vob#5,%)jJlFW_?H\aC"';'0QGp;H>-Q*\1hjE>HPCu)A2G*YIir=e5SY1l%U#t)4A23ZBfmeA;GAu`g\@WmK:8Rc9]l51-#MO(l].qr^u.H&3&'lZN="!=jId*EWR)\m(>.4E)daS5.M%=]gC\+=O]Fl.&Xr7cD8<UGgcLO*ABW8QsPNJ15jWnC+!G0S9s3t$#q)E"Tijcp!:a!QkAQ06u8qua/%?krQ+J%s>--H*c>#koZ#HN#LS0%H8NIC+!1EcP6PX-_#YMM92T09q[lr;do8>A^7mXT_MpQ9&^B&uXIk@gN>k*jXW=EIE>gT76K%5Eh0!Abi>']RFYo]D3Q>1Zoam,Wbh8E1<J<m<u"FNW/uaS).;,hdbS'[P,/fCDF@QT\>lZYqS/]Aj[RJ-7IuK8FtB'.`e@_R0q:2l2FpP,sEK"Q2(U=S\t#Dqj2#?IPWp=_;L&8G#[Ps*_.TjEEeleZ$6-N@QI0m,Br.GW2f(AJq2IkX-KXRe4-(=m2KDJAT4&RSTT*`f>1Rp,]W+:]WC_#b>hHDB[V!&AH?oa=lauoqqfL[mZ6)nhnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahn@X6o2PLMgtt+U#ktOB/qEBS^-;7_ARfoF52Y]m=h&J(j%kBb\30b3B^QjpducR8%b]`A4Cpu+^03srd[mSKe($nJVNdg&mH>V3q*4C^[!G6A]/EE[hcnNe%h9t2MN#4h+,:f-`as1;IkOlRFj/:mG=F?FCjf9IlROMD#?3M"Xr/*9(,i?LLTJPD<LOhpKg:jXeSMOd]M?k'il<f'<[.G`Tc>/$&,uWnGJX:Rra('WqY0#7aPQ`"O?Jl<G8BZ&'jH9A^N!iY[`ud/9Tmt'Fl(0_mcnV;kKE6t)l0l=cW`t/rr@1K3_)s[.2)MLIkH50IAu`MimuNA?K1?LgKW,;R+s]9o(82MN.q^X:hFKDU6B8-S<i)fP;eT>@bG(0QDU7A]_,1&`0%&1GW)uSZO)D=K"A;WC*S"/a:#@p/<+WP:FHi4C!!mfP'@)d^"R,*dHsBkhYlp"rU8VAn)"$3hYqbln:sg8RU=97rr<H<NZ\/GG7VARrrD"3hspXB_#FDP:T"-lpMni7_&f?N!.c$6q-u_j!(5:`pV3EZ]tHRghYlgt]f28/l`H_i3sU.Fk]Y7ofUHM:]XN@MaiMk>G5g+J(qQg*i6C=/<Ha7T'oAWQGut,K36AH!bIKPQ%qk:brpAM:3a=;kg=TZ5j4lY`k:t@nE-Otmnp,&B>_-"R/Hl;/P/om6+s&o-Q<<(&8Z$Wj-t@O6Oc>VNND$mgr$nWjqtIcB[f6@!Z2SqH!7"g0DejLAnlk?#\*.aj]i?:T<qhYli-(u=0hXfqRk$k7G<Z$,gg,bnh)dt5SDFk)R`o[!_JQs"8qeIRe4j.C%+D)WfT50#r62pChf3SZSc#q)7a1/#T%Ippl?bb"0j#Ee7LE>P/*V#`^"8Y.'H,`?Nll5SV>H]4%Q=iYXef!<1mKc8,cVG'm+n/.\u#q9:JXJJ9PeJoOuHbcY`;;HFcn"q5e=stZOUkD"T.r*A,]d2qu.:jZ2S9McAqm7*HCVq[JhfHXgc$N>DqRo>Z:$I$LOaQgGhd$gUNbFfN"D1's-2;MP?!#m'AcGSa%Z$Q?mkR1ipUUj5LR8rc7mGjC[04&",L<Vg%T"B5lV#-^a>8Rgp4"WrZ:U`^ol^$3R\N2Z.>fR*82t&)1X!&@A[`,d>QXhH7pe#<)I7.2<nI$4<;NOj*9UV\,t!dAQB3pe4$F83jLL/dWZi8&'E(A)5Q0?@2F]HhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^g:qtt"TD%LI\c2YfJ(%d%`:ir:(B4Ag)#jTj^Td_<poqGQrrB^X@/CEq9E%)=rrBHt0E#Xbp[;bp!<*XYrr?q/p_!N+M#RIZJ+r^2LU1RiRm6;nh\<ipdbV\8o686aXc*2Z*hF>M=AAeq\TJtlmdIjB^U8!pHhY:%pV2(L^O,^iHhY:%pV2&$?d'>LO%+UNhi"!$j\LA:C6NE"'rJrec)lbI6b9lWIqDTVqlSJ^3h!KlGUddffkDapRFjqu6VgW`0j#m$AM&B`^/T6)_bQ3III5c(PHG:3X>CcA(-SYBGBrVhMG=!ZB^OGeAVqqB\Q>\kb;0Fgl!^$T66_.R%9]dO*X`uH7^\&4.k4#snkV&K`rnYh$b7AF!!tain)!^:!9bNe<W<%+HN%lKgP`ZC!12kUFDo-*MjVcF=+f6hK6M2#]rp,cDrGsi*de,\o^5B_p>#V5QD(3GUs%imcJQZP@@PFQXX.(;?$X#Rk(iQ>raGJ&Nm%3_[(=#H3];n8<+>?bD8D%^2)q')!3rYcji#?Q3u8XBZ[:-7Q5)7P$J[6\Nf#hS`YP.bWhGCfHa#FpHFtdCGhd>^;E'ja./I/41=[Yu<%o:J7Z*l/_>!DF$@aJ<_>\W2D:RLVA,P)-Q_j2]DS<sSMZ0F?%^i:jOOs3G=)uf&j3D/S5@\?sHVUIT[cm4Zoa`B&DHG7c<PkW)W[ZLkHZT0nS%&3]=6Fp#A:4CWfH"gg`pFahfrFB;cIm9tj/V"Eq5LYkPGAn^?S,K5RYM>JNE2I9LC[Af[1TBqFHem\D6l.eBe(Y,/N"_'$ON]2V^ZqXOM8-O$aaJT$.#FR,]H'0hXuU%='t\=(X?ss5Q5_RmdJsUr#Pe;\;%^oJ)T)OKDtpp?Gl0Drr=i>0E2#(ZMsps2ns_9*W+U?f\Q#QrU8VAn)"$3hYlp"rU8VAn)"$3hYlp"or.jjT?3SbQbi\%k"YF<jsPJ&i,85Q?LslW8e%u/,0Y3FB&qdugX!.043MR1rn,)*#jHM-hp6*i9a+6#$s9FMW;\(ue'CNYjJST9ILQ5V/h`B;)#e.FKD?275:7DWFpD\Ymg<;@eW1reW\Z_gVfH\o%EF=\480VY=>nGP/%%,(P>]jU"'5NtOpGWsLK%0Ep@d([i\T7MV.O*'.B<U23($GI7[A1^-)a>@..F7%)KgM(@L!.pp/h!1?IteIn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAmn80*;Qo]Hq60_$5$N,I5^Z;MotDLe])F`eG7O:-j0*/USQ/C-ip=CsfiV*=;d2C9FB%a.p#SZAd@@O+fI50P>>OELr6kR;HmA+ZYj-+Xa_]aT(42sYHP:Fjca7E\,kG#J2m2T'=OBc)<0/C_0h&Gr\goKdf3ga&K!"p_1>@:)7n&D^'kF!Q;gG#KP%:M_,dAUs!<Mr`HVjV]q&tanJai9k2p)P<e%iZ[dX?Dn\N1'q$oi+ITA+H&)nU!>XR"s%H`-<\*mDN-0sMsqGH^Op\S/]EI!=gMn"Non?I8"4UV&*k?m*LLc"4-/ZYg1?__UPqB7B!*X@UkJYs-*"7=+%bGl30GIH;^fZB(_NnYqd<f8`M-q[\/L8ACb:o*O5[b<,N>p:&-BZ`([Yh)0PKYI`&V+l)kf1>"XYot:#V/=@AknT2qdaK?>^YkdXS5W*guTiGqX?:6?:bpVVuHf8&DSb_'1.Vr(4Pu4"(>:Zgcc-f$fMjnhV4PUHM,ukAZ7On[%BB-;*Wt<%.kuCHBZR\f?c,kLP<7fT`qm.P)oR]=G%+<3L=\8:"JR,DR\%d87+7P]Uk/Hn0q5/8[aumG]b5Ifmlop[$/X;.1eEjl>%a(N,B^]f=OK,%NXiF@&o^rsGB/[1aN4qY+M%s/m.[DUBa]IZ?G'rN>Nq188buWW$h>M'%G1Jl"2VZukmAa^Oqj.If4Z,As*"=/KeO>\<eWTe%l#<Ia$<a!/mS&ApUrY_j`7*.6`/8#^`≺8-MGu+ldKipTn5=YkGj+msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;[p[<S*msb$"IeW;WZMsnaDs)W@>N"-)5575;^,eblFY(.+jF[;Dh-G`fqqiL*pBL)Zg\nPN:OI9XiS+/j'18A.D<strG[67T9T<jk+r[`:?q*PNh%tPq+6IS!58X<;Hsuf4eltpX8V6@rdeV_T^%XB2@kY?+EBF1#\[Oe/jm[V@+%qm=@ONTtDV4M3AP-!bC)@5@WkYe0F7/>k7cD9o.3PKBfDUAde4_-5<@VeHV0M!"F@A56^8%apo_7g$9maPq@NW@3pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%dLZ<moD\f$Z1*8C!#>[@^\?PMmo^1r;fDTT^PlOpQ?RiXnaUr44)b*MfT5lgTDl2.IeU2;nt#d\[on245Q"=gLAq8O%_ZrOmsYChfaE0[rrC#4puhYW^40dB&9ct/HajU`;W@]VpBD.Wp4*%105k1qmn!HYpeG2f%/I$rZh^U#!&0G#q%N<TYkr4:HG='8`^?s':@#"%e7!O&AeX6;g=hpoN*K>lqH9SVLMkYa8=H*O'9I*WpT2^3Fnp7P=2$kAI(8Kki9i2S^\0S+gO&XtBl0C59dI7('i$QpYh0j#W)<sn,Y+]Ke3,kXB)T/&Spc:H(H7Z%DCjTqF`d:5o^Pm;&P,lsALip$.qJid%DUKgmsMn/:I!((q1=!8q31=ZiHN3.OS.KP[ZAKn[bFq:bF[G_*PB"eZZg>:i7qUV5ufi;XMX).?JiWYW:>sAZ/K;gSXnkV*`M'#q0tK0RNF,mGN<DW^Q#uL4*ms+[f6>Em*%>!CFb%V@Kq.RE,KR1b\Z!9jP89FgALXl)igeiM8Eb5V3RI=ZUs?em_I02kVAOL<\Co07pQ77,K>lA%'nDG$@Jq7+sM^_U;u0)N;JD0'@Ha6l1SD+iS'pnUX,C>Id;i[4cR9q*Q@R[DKQD;Do-8<D-'Aiq)Q$%0c1Rk3_a^@3nOTSkl)&ZGgo:-rr=INjp_gTWQX4LS:AXcLLnKMQ(u=[o,Y;qle9"DN79HqV<Ifc4&M'X*/W*Y;\r@KgPnG8luWP0Z?J!Y]R/rqeRR1/moksWp:lRNa@K;grcA`jm/-Ocn+]Xro8i^"hd7[Y6[pUnjsOFUo_BBplCY>]2XbH]dc'`nU9>`hHg_j'h3ldil#toAK+5@I(^usRh;`QC(oh=bkj'"m>+&%s(gkD>q2>0+m9]#Dhh+-I.[+ms(K!Q4B#JW@i5\`..Ot;XFO=pLl`di`_bj<AZT0""F\gdijFhO!1c4k,V<3lXrqb:%UFB>Q?+4m.93jk3.8iL6K[S)Oob>l"eP\k+CTH)#!PQakqq]eP284hEBtkg7pI]6tjf@saYPokYE]]J-;Z)[740&BXPMN-KbDsKiD(;^"ac3..ZFKh/%SDnq3f#2R(K"5`<9O%1/25AUfiQKPX81/tR#\Q-^C33eBlk(1AnO11EpenS-5t\>!;CKsnabTcg%D+YkA0<4WG<sJP%^h`L2)?'5NQiS*26G>j.kC0Z-l!ja[(neP!NG3L`0V4<ABj[`?Ql`")p)\EU!NCqqW7ccghqPGF`BNo%gLr5Ob><QMo.d]2jt?].ojLfGX,@g&6',ZS^1^=Wd(G12OG@cI(?&Z;o,`BgYOXgQH#YRRm@RL(u!b$\*XU^ZKC=[]P#Wl@7sLncQ0Z9*J*sT;'sWZRa]jHY;b_N%e%1r!nHRro)`RIKug5ID%0HfQYBZ,H$XO`X\5m:<hV%n?kt+ouY`b7N+^mSa)r$AcT<"F]VO1/pIDYWB\aVpTpq#!"#P%EF#dGdWu#*G!F*`i3bcs4tc$,IPZ4d]KR6lCF<][?2jmt\:;):]-Fa=nBk]"S%Bc1fst9+`-C!^H3=UG._u3dq#-UVjLP3,p[?CFVX.$^h4MSsmbWuHmHQ:@T#Y??n4UGQ^?gJ*qu^n=@4<FuTVC3UR4YsV99Dgp@AR6dmNRLbdI#[sDMk"(79(*j6-*Q--'gtc+.a@&pn_ZR"^+42b/$=b6XbInpJnuS#Pit$1G&:lT]ohF;t3*6[S,W#=n`:$IbPPuLLtD9/LKDNh#58p2$Q]pkBEaT2GV,XQO^?:L5-_2a$ATKETGS(&O5E!o%3$4=8A!OYJC^%n+t=efj0?G98'.bmCY>8T.Nd,lriDGXNfic,SX%dUk9^6]Mu7<ZuIcsW,&btSDC`gqsLIY\W+]NFZigZ7O3jJ&d^%E%3s"0bX-a[ZB+apIeI=L(]G*Dr8dQA?.SHsNW0!4%Xc[jcL]eXgn&-jYkoemGFmCO:%=a23G5#>V^Gd@>Ht-8gbTK3Fdg&WQ)'^TY49t2I02\&r_jo_B5Hr2S]B:\!6s]fQM'Vb4WSE1+16<aip@-ib1ueL8L:1MrT.+&D]3FKEY$k:<TEE0hEi*C"MU;qm(LjV#$O1YQDgmE=k4JPXH&lbjK*P_o8(6Z?'U-D!2mSY(k:L"+3oYU^R2aimlub\1+KR)YEL%I..CGr+2=Mcj7]p&Z23c2PH3F5V;@\W%nf3BV;@bg\uD[.CF^h_W8atXb0l+q`Cq!]'ga;=9`ARNX7H].g)VL113uW\F`bSd0/#o.j2Ou)Z?sc-e^i5Xnj@G+Z-ZD/@,.5=4U_m$<)^\1*E4oc#)Gtfda'FODQ:qAFdW*+<le)?EA0h@kCK#?r`IMM'#>[jO8pGZ(Bg@W<.DcGJ";X8rr=]7:JuR-pgHlmP52f^C5sj:(G`KM*T)tDSV*-Pc*MTE@rL`3Ps':PE:tYimlG3bG2J1WP.HMoN3/7XGEC7R5(>R'k$>_#,#EF^!6;j6d)0)YDn>2nXiBFV/sgP-loh7NQ'6)oZ5B.G=Ue@P?[(s%aUIfdPb&5^BZ1]ZaV-[b2GNkV.WC;=N5YeMI"2WbTM!_\Z^@M0M1Ja"U/4iB#T?FXe).j'0"1aK+7Pq>T3flgB(,_Ih;tn*:0,`jm]'TKXPR7=^3W-]\8!IllY6($m+fA?6$@B51ip.\f>U&-R>b*cUPK\k+s"k`bl1\9c).s`dWSsTrbFZh[<o?ZQ5o6S=&ZW@2fs2-#$ttPWJ:YKc$t0Hh1dt):PPu#2MO\T*EY]Z,9`J\T4i.4Kkf`+FcbYi&dgE@>h!NL![Ek(\a]Y1%Aj>:l#H1Km>q(jpCGG#L;1fB\9gRThYCnNQlT&T^Cp&UX1u),57b2<F$5_Pn#h;qSZTK3rZ[769npMpGEC)2OXXb87"UH.`Y9#7BA`NJp)ea2ErK(0LV>MAVdE0h)e!R.J]Hr#@r,%QYdHJ3k?lrV;73mqG8!8:5n5so7C\(J+KGQBWl7\2TE%FZWAe*`9,Fq7WYVjo:7;T+a]f+RAZ':s-u*9]$5F=^D8j!ihn?dS_Jqb0GE9o8jZ1_:g%$f%[jQ%d[c?4mh2fj"S_5k`7W0SC[sN1?@.9ER1=FWL_U7C`1bc`dOBOW_mWnNlr1#j0ZhrqD5?E#8E:6KH?uO9/jQtSoVWc@L%,!\qCe%lN$t_74Uk0F..7]GqN[1og.M$q#/TkAmD:-nc<(U"e,dh(COFlg3W`25S!.%X1p[;[;j[\mXrck%ir_RfN6F6L-jLu]56AKnf9C_1[HtM*%Ntp?qC`:sjo!J1_ml&21oS-(\fP0VG1up.\??05hVL!eh:CG2F!WD?RL\[M=MXM%uX/Z)-[D*bH4ib*GI\OXMV?\hA]p!0[UfHp2DJ;#C:TUTd6Q7SrLt0hCaiR@fBnT>Qb7S[6mJYk*aAoM$/W7UT8YV+b'<OcXfn.FVH:A<rl-s6jg@cUaIeQON4Z;d#^]+:elHdu;/hs!BpThQ$DoN7.g/sBLhn(]*Khh?eb]?p7DHh*XD&i9'ltub&gc8%<h;!6<TiVsmj4ep5)d>m@(e9/mWE#n"&!_Bhk&L<kA_93i.)'Tf:R@UqRGU"&V7O+uEmM::P(++c;:jqZ[f0>9]Q\!sf4+7FN*bD?N\&0h/Or`8<16u=`5-%Xk#6HiF%qj(_,6`Ca\]4f'mZ(iVH.hrdWt,G&k%Q/j)lN[*:rWGaa@4d#IOJ4Hu/#-P<0PKU5*IWa&D>2eAGar-;'0n*#m@Ect=][fdYp@.&G('g:FgCC7,bZW2G&+>Md]^(#*sCqrs-Bm_,e4e@6"<fNVR.j(N1<=_dJhDG32?:/")mW0,+HFs;6fVOXZ?1;qc'hSn8mCj@K;3qtuQel+q6MG;5"UK>g_O&?X$rZg=6k^WU4#^$(HRAKi"rrDQ(pu25Q]bbYbeVF,;%K?DMcccpt2#;.j!-]H=llG@Ep^s%r!1#G`oK?9jHhnc[gXFg2n)!A[q8%4BA9PHQ\,#LESOZ87an?M6pq,9;3#jOh#HQ'd1llHR<b?NX.ZQ42f&X;@#+DS5":,F"92qj?ZN9E^Ik^8b]XR@GYEbSEYNb@gGBS&&\+M@()ifcT1)Z?N,t19n"[Pn6a\uE7`BcX,;(+(Bc4rVjHXbe":K+a/0N/0ijMt5Q6l0Q%CmKoCjKtimJb^\N^$;Bm!!pF:^[[M#oV['6)r@(9C@"`Yqoe%XB63b.4*4P6n<JF>[.b)7Flph.:M!VY/.8sH2T<j^rEWs$JNHn(9:7XOO@^ELdR?Pgn=.afSL:mme$T*.DGA<+g>0l\qf\mC2ME2mWfn;tfQ[h=bM!nKi&9+c6GtY4Xfl*=Vl4ufPgm&X'.l=AOjuR&cW+P]nPWCs-'gN+jfUI[/;6pN7.ft;j+s1?OqrS=2nbg@E,G&jkBkpTfZ3I;oj@_!KjoGSq+'qLiLe.BrUE[ppSUN"*S9k&%AC;@%`t]FV9!6AbB70#k*lf\oosU([2I+rl0#9IFi:rl4jd'smeIs]?Q+AQo]GK'I`pN;@CYpbgD8YiAbO@?n5\O'Xg'g68E6]gVOjVY3Nf'1>6#/3a$.DTaNER`33!k$eT0'\-9suf#m$JZ[[m%0K>s_mrJ/.7]cZ@P^\=(1rr=\_JUOBIgP6ra]*kpY(joTGqsS[hSiJR<T6Y?-O4`3FFD`(gO[g*]ONhD.1XsWK<D8R=!$$?m?\[=AEUVe@?PRe1n]TJN%Ge]]2frs(h)Xco=0Km:4ic,8?SS(of"*,?eTi^:A@"fnW%R5JHWT.&QDXtBW1DXFl7lE*VNJVmP06E)aR*bhS_0.phXt4N7Jt%eCM`J7<DQ>:0\[Zo3tD_hCHoK25@a:*,tD+!?'gYJh#/1Mgj/aBMJ'uC@?2q/RAsi*_X]S'LE>Z[]Y7\LQ.qqWF07\ci;8FVj*EL3\N6%?,M$te1lJfBl*Hph6^Z%a1_!"+"Y6m!1s]k>h!o;khFBMjMm6tN;:eR1kE^s2O;7:>P)qbW1uHgFrr?DTpL&L?WNYFho!A.?r#k8Fg[QYsJ'g1KmB;TcI:Kg3[2.WRq;'(YZk$I2S^CM1[\_d3gr;P`OKQZ4C"97oV_sRS)o3dPFb=K-oR9tfa2G0?SU7k-"*snHE-F5?!:?5'PFC:6fSi:$0h]"$d+nH=i58-TUWCkmlKYD>;(GVA-DEKgics,@%pb$\aPeifdc2_PBrYrLSk4MY]#ETr66l%O.PigiD/_\)p[;X>ilCUurb&tq4skZ%q.DAY.!OkBcKlX7r<q,i+L/O>QTs6t4aj^g]168rm_ZkY.dV!ga]qOM?Q4`T2&-j:dGsJbX(6L)bU]&P@d(#W^%6H]\dPH`p.siDo#GY9mb[62J_P9NFptig9sejs>N9I-2g.,ueBq3=70P;1M]Ej23bjKaOr3Hk[%D4<(s>B1C@2Lj2MWQ%^1o+_W9L?`+S@&eR\CLe+t>+n=]8E*klC_`:WL4s<IZLUk6(=FTKeh+iVlL-c3l4Vh`\p28MH\Onl$2fNM(.GQE8j5qm0ekF*6,o52!mBc(EZn7e0r.:QMBu6^MB(jWg(kBg0N1i1KTMq*ENf1%P>EbB*K6j=u"VYo:1CSR(%C'U3]pE9&K'0k^4"2^_Uda'iX;qg3X+rr?@U,h.q:j2_t0Y#h2bqcpaWF62VlZ>E=]aYd,$'Qr]@^/cX-M&`P8Z:-l\UZi7-daok-HT](4W3;cL./s:6kOS&n*Mr9RZ<O=*,I)\slqWqmmlG<r[J)"SMdl)aU[LA1RARd?]5[T$Ag8m1Q.QcV[IM_7\p/Uo#DtuR'[QdZ4E$J?jmak\%b';u!PH^ohHRn2[^TK%pEV_G*bQWj[IW.'g)H5#"t;A'm%kI]^7rAVdO;+dIc;4;pmE.TX1r(TE]?`42)r_Wg3N6Cd_);6jC&GF<_D<RW9UHf($=*Ml#2%F=s"2<PQ(XS62@#>rrAb,@atDX_M(1$lor8]#Ltn/\oCpqLN)tS?X@SAh:IL[cJeKIFupf:6NrIlj(T7V.^t$J8P^t9,*8qT6<j!#q0Dnrq&f.iWkLnrr7q9QD-buPHOk&g9b,gPbOuB7d(n/oZ1)<ZfNP:9:?9CA=4's$=R$eS.X5L9+1EHZbS[Ie\2(S:/>:qRW+W60MQL;gWA$eQ5j9.`>`-ZW@q>Z?!)J(;[f0C$c.hE"`?45<P5\,3c51NZq_,00)2rapq#0c8L7XE_D8V[ai<F)$0fb2p((Y<#^UAW.j,?si>cg^7)hN]^3QG\0i^mMPC7!m$o*+q_d,-X[J!T9h&'\SXY3j<kB^ksnhA!4ndn,q1al<RuBM`5Tl*6V3pKl_6e7BfCf?I#*>*gk]Njm1%2qd?JqjT=#cSj;/&g]s4b*6$D$GJuOf)e#:N(k<bfHUqI8a1#Sl1_IOrYA**!,dkPTD5no2?*Zh:N(Rp^YqXHp@%?4r[]^-rrDLDfKSG@Qi)1Zrr?gq?i&;On(u)\jRKMPA$Wl.2#S)m\f6*23lATh+3$M@U?UM6!4Q^:U<;k@d9b2eg7<q]Nd?t(50\:F'WG,oAX8J>6HcE+'RuHuf\a<eq(?f%fBU'"PM$tIRHZ?SVX(qKLRpPAr#YW=n(9F59%9/7d=&Uh,(XB-Y]q&:iqF*E]JVPc%ZVGfSt<)YI:CXMKEdI3cVe1eSh),grrCPqpTerA!!t^cBKmbkBl2ap]`[jF[^VT<pLd9>m?uV=>;=d69"VAlNOpTS[U/7QX%a$55,Od(@W("i9.\K8(hfpn!?Y4T(LQ5Ho7OT&8R_TeF[*sLrrBS'k@Skni7iUr"d.Xn!7.OocdL?\]^?)6Ngc,EBm-q7D8@KS+p/h<H[SHdYH@O.ITAS-(/h#5MRlr"Si31s?OWrDOulf;&BbWu`s)G=g%#(BKf/l10Rh"??_>MR]0F]4lRCFkrrCmr\_$dSef2eMeBu7GG)\@*<EE[K^!D[mZC\3J.GJP&H17"g@rDb<@UMQf50ZUhYk`:O4sbS3WloO6kcWV;Z.[ra[.X^Fgj"+Dj3;H9@%)N(\oVsje3uK<&_m1l>\&jkptI58(2YGR`r?%`c\0*?dEKs<e^VK2:FZt;L]V4X70F3@'I>u]=SM9-"8nq!+!U74bELq/>NMbnmk32e&&5]b(YZQh]!pa_[cXKkm5g-,qh3Z`$@$:L@A96"m9KSo(.a`KrTXW"]<`,e5F:e&\7kj]oHf!9mle_+4*u,:C*!&^1V9X5k+Sj5;U;rE]7-n2ids4*2QdE>99"2H8+'9]+&`j?lYS4oi3BDISm%TIWKs9Q8\`OTW$Z&3J,fZ[DA2tkp[<8cm,NG@p[<Smn+^!<E,VqAhol2\a7AEHGtFdL;!hPh\poK'oe/U:g]%7!4!qSAG5Gk@YQ/\Y>@VL9qH56(f'u2"W^ucMAC[U@r$ZWjpIB.LZhV6'mqpZIR/1&'$Tn&qdkr^Y@<X'iWnDWLOJ@]QY'_Q4Da;gsl=<SalBX1g_#DZ[R_(G4_*l=7N]D4QUt&OG2*?2LI\Rm&$\*f$IeUUT5kKh=HtqmeW;-AmeMp`<^XlaOY]e&nD&ch4&O7SZD2_IQ1)da=$E0uJAKD&UXf6_I<Rskqd^.%?Z.fYcqTESp^KGA:VV$.G0cN?[[\a^OD>G/qUPL6]#sf"7FVPrO4SABl&Y>k3]T^i9niJY>0cB2S+J>O-U8C2;;SsId-ieR':nX;+=fl^nUmq8UZ$4iQmSCTEq0M^`>("BXn+]i]!7-\>pbUg>5N=,6mN1QeKhGM&gV[c)De7XnHJ=1IDco!DgTJ?TW,)-]<=:'o#%:'-3G2NqGnhFXO*_s[r/9npkC<'3Bma:TICmpUQ^@'"ORQ&uqhG7`jqnQ%EmkK?pfoCG.k=7o\>Q/QPeKFY&W'pY:)1I/b'JH3=(,]K`)aj<X*Uk72,_@>n\M1"HuYBidZOBECO]4MhX1=CkF_>>rdQ$5_rL1aq6SNlcM+mK;TmG^3r[Lmrj(D82^c!^Bsoo3>:$q']5MHPc2HJSGJ,EuSiIk+Y9/n#`Bl:9eLpr;@u?Rf$i*`k+8N-g6L%:unmAO!!1CT4GFS83/usA<I?V4Mj_b8.G.o\7[rLL`fI[$gm*267.I\$deT9/>;U@r-&BrO.6qAS&Ah]_##t7$]PBPJe9c>lX76Jqa^kFpL]Q)%N>S;kEe5_*[+PW@fmru8=KKkn`J,-8F'$'`Z@pnf<GJ#ucIqJOe\nO(Q/G'lo27i9:D8!K">LRJ"W[_d2`oD8Le_O1[cVA%^VohM4'NTc/*pkcZ;gdZKr:Kcl8_JI2(QH?+G0A]e5.BmIHn5oY@<,N;<]^n]T\Po\3Mrd=Nf-&OcI0fc3n[uF8q`5P.M$:mS%)gG@FhT'8F#I%H:kFZ.iZQcOt<l;,c\s+J<>:!p>b&DQg^P2bMW-Gr64tBfJL9-r7(!1&H!1?&%'rjYh_CJZD5*IZZ9mkAKLY@eUGfElV59\UQ]erD+,IMS)TsW'[arA$uH7)8eV')plG?q^.3Cum=VTkG/Nj6in*\d!83b-]%coX!9m)qS*g&%D:"\#]t7.Io(BB7S6D>[l5t)a;'\P%<&&Zi*bu(no!oWl0&me-5)B+C9+ua3EtYS.g*9AZ%$r+4Ks1..rr)8JrrAE^`F%enr/J:hr:fIek7ui<27e:?pK#Y]G36^<*B*cL:uH=4bB2dQL>S<+A9O;RG?3GR4'+#DZP5C!qTNeo"#i_.8f9&h"d5mWZbB]::\-gM=;qhLXR"3p-e\M"-$o/qkB?MG?u962PB>q3`FJW`G)pQNA?"<FkBuu()``MRb[`/9.]OnsEB-(*.q<f<!;"'jc/Z9^d&-du9=cVDe?DLWeAGU)P=!G:`0Z@UU9,]#Ui<-/7g4U]W;"!@5F/e'D86"eILc:#q2)TMCULq+(<reYgq-91R^O69^\47K0sQ'ADUI$-Z.)h6EEhUBj<C7qRQ..DTFf>pTp&%"A)W3b>YiQ3N'0Q!-PMCT0D(+1-E,0s(3<Is#BjKqfc@9/0_EmJWARBR#3Wj'V(C%?E_f:POc`<$!d4f"RES)0;%q"E;%k3Ve0CD@BP38F$!!EP!1OTPIJ_m(T?)rdL4%SJ,Q.8MR-2Kgo_BBWI@8KR;mSYpA30%XpFTu@D7?mQ2D<9\T\+T\UD!ep5+83+0KVK\=c\27O(ruq#3Nj$cgnC;GOehGJ!s`gDOTr6inaL`X7dUhq$U91p/Yq*P$Bp&WS7@P,'ruumJ3\)L6<F:nQU>h;+VP$CIK`UF3h)bBBJd8qo:ca=^=0Z*Agnd"[%K4E>W_\Yf'KE#LO3M+5hSEgZSJaPPL_ro_<dh57r?(Hp@(GcA(*PnZk(`?[:gXf&,5&md,sF\&AR"`((=,bMb6[h6W$4Ju$I_+fO[sfTqf<<"=E(?fot_YE']hnb8p[4SG=9<T8@(Ch9mkP:M@*iM>6DR3p_]]71lamOX)O-'Z9ndR>m3r&iG'bXlGT!fh\c\2-+U]O_:"YgK:X:=?dh)3pT5Yp^6r43"90rAHn#n(u#5rrDgi5P&oDT3\"arr@`pr7\.<4]:EU0_/k*5iR*a>bY/RWV6!^U\R>a=%eC>.(4HcnFAu3c(ng?g0&Pur1\\.'5cI)X<5_XjM]l4WU_m5kK7u!5@H]q66q<u5MPpl<C@N6<iqsm1!^cTD>#Ps1ks[FQc.0.hH8<W[9[pS9rceND3-"lDoc-eq`auG&,uV9p&8o;2ReIdY5A2q5Kp<Md.TtSo^(D)O4ZV*nRE5TbI`(!E1@_QosWr)@-B>TcG@BL@Nh3uJ^6J92?*Yp5uK20X\-0#ZV5it5NWpU@rV@5m;M+Zo1(H,]XpD2jPJCU;m7,f=$7m[X`DGu]CoiL+cE1lU><?5S:#A<Yut+^3klC\_KdV3H@NECZF<#$>d\J&caqG*8nnJd<aR#5On;EPN/FYk(%n?S)Zt+u/an%WHeAMRVsiL@n)"$3hYqgCbcBe&(\8mO!/4,8T8<:INd;_Xn8GQm\Bc^:0&>;eO5QXFDiVNVM.33:'U*EX=*<JBB[p!P'0JT>P/SPL76YC-/N:ngkFoIN5Lm&498E;Y]Cn1Kd_cT_b^<XP>G#Tj"GohmCA<5?fiZtiC#..A">=5h!)GaG1YmmG0oaaH4S8BWq6uP";_0S@5M^D2UN?G8)Y`]Dg&D$Xr:q:=fUp?.I=,JZZIMkAc\=U]]s]cpHF\.L@<O;9<Rg^p!G]MU=Q]V`82ZmJO2TZ?/H>e8ZD%9t!/0q;'jgA(Bt?>q54cV%^,Pc*k1]Cc.[JUEh64LA-JfT%;6/92IsYoh"[7[UN)G08XK&,_)WmXo2Ek#,fW*Vu."8-(jNa+l!2mh6rr=2=pTT#D'Lu(Tc#;`qr0op8^*s!]&\r;0fM@]Zmt+Hf8QDuCEn.[e.b^(cFN[O6lL)7M=]o8fcQ-12gIq?p^ZPJWT-\r)rr=ZYJ<U<-0ff41^"M+aYY=@He"t,bcp^#pl:=r\B#iU%_8pZ@a\]aGDrchicgbki[C4fcP"MA+'oDUr.`F]_e'h(qrr?ElrnlST-i>6J,:?H?0i-sInXcV'53a-T#"E8QC0BYe:5\KmgXm1c/PSAY7e/hmBA&5B7h_:DU-KHg0;$;eZ1]!X+6Fs!ZV(4Ans#E&73R7aOnuPo2u_9l=.0s51WK=K`5a&k`UBY:,o\nq^=tZZBF3`jX?j,k!.]3W:m5iY\(lElp[<HMIkkkpoBW]r11[hko%WS]\`eO+Fo0p*`>8I>ll?:K!D1nN<V#0obZ')1p4!":`TF,_/*"]<;u@]F@[&W6!i5EX,&@e]2em`ChL-bUJbWm2)`t(sT!*2%`(ejsnT;<(9g6srY"C:kPlC`1\$oX+%SE=UW@HnspjGhiBjN4<AW\!$]^.YHna.A)WX:f\Q7G[+MWc07VJBq(@'14/#>+boEddiA^DXf]:Zq>3b\d3ikqDr_lfGqMR5ANLg=YXObA?gubs<:BQj+LZjJ=^k/e2(X9m'<MD\n%(2DRO7m\M[gb%(7+A8sEn8O&_ha8ssiUEprgNVbpJf*<T71lI59'AW)p%PgY\\u/4<O2Z5u07RZ5fmBRBb'2E4mf*8hNIL:V?!q#.P.UdK^HOl[p3lhq^Yq>Jc*-8jB7-u[0Dq\3R4`+g^&CM!C8]rED'%DEZ.-CLEDP)RdiYgk"(CUYr%/+3&&3KhjXIM1/F([4f2lHiX-U%p`f_2ap[X=>qsmC,GMdOj"o4XNU"oUeddZ[[g\^oF*#Y9ZRfd\/D-bi&F#A3r8h>/NnYL=f$sle=MQ3\6.Z#W]TX8U.ffPNN;3K";]^m\^oE&MC:S^Q0gIe]p$^=X_Xf+!<JLUsbqYU#o5Q!#fq4i>qp^pTt(Tb=opJ#9kik)g?G:mg=F8KlnD/0%4PWLfKf@\jo58Ul>*ZHt@[A`"hb>Tq5Mu,Qg,ggo0!eiB,rB>7LSbT$Ga5)sLo<N*lb(I$>h2RWT)/M2M"]`)`Nng_i<-YuH*8Y0GP,Z8r`jr(>Sql^u?1cuZ+K<?54,5JD36HV[=eo6.X*NP]j(V`9cmgNe+utSm+oO;`j6tjUc2RbMkPf@!Rm+/=OoGE8+8jiR\0d"+SMhE)SbW@VeSsX0V[jgU=_YTI;cYe'U:)bX>o"=j*)&rDb!ANqTB-aa^oDSF7T-SgaS_E3`0*?uLE/gJmAb#[*^VhR-8"'qn:md<-)j-JWA2eSNJTK05uu2-akWa;mCr/KF@Mq'orCb+&(#0T"JJ'6dQ%6Jp[;O/nf%LF^H3inQqqZ#!%+?#Bt<L*GIP"%6aUggD;:0$F)HZeh*VWPCN=7X[Vh!0K5SNXqm0hnX)n%ek!fVt0Lnk]W:Ru0%!_D/nu_n!T.+Kg>]q4[jS>pILTl+5C/s_]DTqHZ2"Ke\E-:MgjKgpk^F)a7`]!5=)==h%;jG>`.jC$!&jdh4b*0i0OnNt\bRE<.f$DDeC7o<qK!0eSP+(b`:>ll2%$;u\FofR`DfM]3p(mXArBpM+H`s>no4.e#/AI=\GO_0,ZJCoP%rcISrIUfdbt$7U>A$/I6G$oA.Q2bQWhA/^>E5#$(h0;6Ju54l):lBX5[Ed+k>u#<dd4][g,ig'7rdo+Q/1!fegb"Dh0Z=A9j8o&?;H9t]j4[qX.+"pRH\dWfn_(%N]8IsRT-4t>,m&aAm9.&D"V'b&E#(3a3N38<DP@S,*^+/N'tW>&d\Vi!eP@`(AI9>8%np&iBR>BcC5KSlZ^rcJ&7(l=`46/Tj"PZ#0#DdT(q!06(6"L2'eE5H0_EC7rN\^7Pu]*SQ]_cX^*MF9,KK^#i*O&H^jh*Ikl<Y"]"=8hp)VE2\0QLM=Qn#><e8;9t/`B/:`>CWNcn2:#()aP939%.4?r8#,2E)7(kE\(qMnJQb(a(1`PU(/RZ2HAST;c?*#TD>3V;O)tW)4gi,FRf]2u3$*=,Frr=9mH../!pkA<qj6M.rHqpW7So*R!-P*\mS+gO8T#b`Mdn.5,>B23A[[YaJGG[P23m.AJ1t:1cI&/HoIc:\!C4uTejMCc4H]-ub*Q.F9jS.A-pYS;39e;co3Xg0V-b?bGASUqiG+WeanECE#G:(MgP`\no<Dl<q2/u\`Gl4g>2"L>]kcW-elt0Tra^[lSTiE.I[Brg<;D9=.e&n<rTEYfa\0Ut(h>[H^&H6h,S,$B5moOVG`iZY*hu<[7^.h=+9@e?8VE.GjNpE70'kCNs])o`^;9ZG[T6"Xh9l,(!Xc&<*b.>"gaf5cScl*hM2u0t51<e@dmA$qtgSODh)meVGG"GU:ai@I\2I;GWD<.[W&9htt#+e+ZS'>M#Ppo.STlp6IWgKe3PfU5/R\jEah3)X=.HtLj=n:5I763-RYX`Z(G)RB^,KR]2?_\0(rAHk59fg>j)ufn!:B(=HfT+_^IJiuV@e<HDmsIh^?ZC3)a6_s\a7\V#<S#WIe9cM95-jV%V<e&FCDeEgNkb?9)NPr'7aY.6eNtL[@cObDQ4NR5m@CGAhu<["J""F!Y-%(cbs;P$1"Y5SPh_LM7qU(G&"PEfVTJ2<J[F``<)5E0YMkl&H:<r6+e!Ym9Np]SNp<a#C3#fe.7[MjL6A!Zj]EWN?cIQOWgX-7^T0[)^X/+h^O%V`n=*eI(];(\)u6!$c2Luj.Xk64Dj0!gn^";KikKF"T#8J+.X/83kG>m^oiFjVSu1?XX_.0g$b5]\Y.An`\NHH\@$e`>Q!#AHJj8>@o'>D7nbKN^5N1dPGE-INp/b#UT%'dYkBDA9MJ^TbkNd$GfR7`\<ZT(#W8)6Lb[Y_E;TVF5>?iA%)+Oj8aTl9eo2G&cXpZJ:P9E^f:KgXfd7hPp9)<:!ia-3Ckoh?UR`=._!+1)ZJ+ui1o8`4qJ97=onIOSBho>+<T3j9mf^(h)79bhmDBJLn\+?)dP@Eq(`C[H..enG4]Xn8me34sl;re\`@\SmgHF/rOd[Hiqrr=sljt54M'C#A"j6+FP72FqZ?1K'\7ul77eC%3*rrBV)S>LH=YD:=fJB4d$ZQ"sKDL%]lLPDlf#aV'V=k6#q@?j-lG=>7@;<'AZZKAHQWD3f$p^uQuUPR[R,dY^:7N9fq8\M3Rm$:S",!Y7c\[p'Mgt^fVTJ)HiF6.j<)bmo@l0MI5mOE^HfWEZQ;GALWWQjhEhoB,b,qIh/QQo#)RY:l^WJmcF=[?kVq-!^t1gJVS:;G-S!&f;f_tV\e*')\5mXmCLOS&J]FON@3[AV,T]*aH4p'XpBY?=Z/>*VF[XV@d8_bf%`^.8E$S(>;9P:2OA/(Ft1P2GCp7oH=`rrCaag\mrHIJ_]Srr@`DIlL5dIk<V*aH,H5r5#=Gi;(^h#,?3t[dK02#D]GJD6L6([!d)3BX_:qD:?o"M"eqnD^t#j=_k9^a%;`?f>BS(9i"Vb<\T"OO6.P>4oMrRJ)Tk>H>$d`6h0GXaKOA*98pnjmi3D%grm%u<Ao%CL5)<+S"F9[.[jH\WeD(X,tV/XU+moL9g%g,\a-P"=((W-%)sj?W_a9:6ublXQq4K5(n(b%"Kd<W")EKa]oauC;Kq^MraMEur6#!]IkKW6rr=B$?Q6F$aPNfY$N-KBC#O$<H_L<M\irIShb6P,aR@Zt=7;)Ch8*SZ]`bB/LT."X-^mQral2b)TBA6+'BTeBq4mKGiVrnuT'EEAXf^A_#HV\+EjuNq2P2t`_m2@JYWCSq'q;:7lF/n\*u@:sUih;12)-cFG4IkY`m)7S\]Saf0*dEV2$>f/e7G4.5pr8,\u(Zi9r-"<U;j(Q8*B3W^$NURDtm,#o7>Yc/q)'r^[S!?RCfZ7nSm#iYrd07[i^%W3eKYbBP3Kt"d4$(+5$/BnKt,%7]UnP@PE_=A(Kq$/nY+`P`PDE_elr*HQ2dur/f6JD%(L;csc['B=2`mH'QI<j`kcfN'!5J^+t>biCu[KngG2e'SD*BdVQ&2OVoVBc;mQF].-SKM+[/FA8h&7oI^(C3Zn>/n)!>Bi\0n-rr@`Srr=gWf>i@hIA>QQ;t8o/7oe]`>*J$^b6mX;KZEf304T-*D]?$l:+![`*B$Q*VXE2#St]BlWnOu*%$"f"C+Ilqi.iJ<W$&hsIX-E$T:-_mPPKUnrkd<96eg?/-,1o+VnVH#=NXA:7CDh1:60;UBI]aq_c_Rs_1g.XoV-^J'd[H]Gq#pq8JH;iF!e/]O*]uh7bNg%RYJDAl:+,d@mO"sdlPGlOFa.sUk_\)<G!LsTJI[:2?*[#"8QDU44!#fn]uOZl0.U!Vt.mhmR*[fUORHB=a!8=ZZ2@nm\MO:SbE?OgA<s\G?9'4NpECn1pni:=bY%.WF-RS3i@jL>fT1kf?6C3J'?O'G>@R5P^R'>dC]"^CHAJODS>SG\!;F9U<!96!J8$%bNA;@GBJ()BC)/U/f"bI77K2LJd@&>4RF,O0hPJec#*F6JYAPf8%^T[#,5H^76O";.epmjE^phoFd2G&_7<$31kT7dT)J+e?fXHLbk(i7bu`g=f_GWan<dGcEU8\X\N36lBf=a&dV[3grrCa)S[5g>F5WuH>"N_@40N=9/65)0;"@%H><MCCm2Sdehu<\ALWsY=cL6VB:>4Nkb\ef5G0]<qoq,dDiFA/^4^RL0Zl!&Rk4*PW1W`'YT%i"WK!!r>n\J-TYp0rKm;]J=n$qklf$&r8;,&>_=H!h2:D1\H6jDa@O\2`o_'FC%\paQjJ'Aqqa32fk;bR%S^Q^)1`q;gng5sE(amYIZ#tljNcMJT)00?f0Y^)(FR?uTR=06Jq3bh?c7ZI`!jS's(ii%hcMcG1NI,"J;o!d[%bkODgcgphUd;1DXJW8R!]?4]9kM*ae7miNr1t^$2PZ\dVGV,=R>7E`<AMd,GXj#(t1u8<UWhdYmgc:mrG\p0],1B7'^-a)\9NG/=<?"SUUOcMO?o><H8@?#&Yb1#qntH&.rr<$[4*Q(lprWI(IT$*EhjkXmEda5**@ooF)tP5^2^[22YZ,K\j'/g4Y@_tX!-iYcjJp/Wkp2][(./T?f$dR?Pgq+Si1lD<h`h2B!1G"JhQYcW,.^SGSp-fRm]Nb0<prc;f"HtolDqg7E0r&MbO-jNZ[puHL"X(60g,_%#Ea"KGj*kY(nG*&b0a/#Cl[<,pf^70R/Pj'aN[3o<)6(ek%Nh90P$Ec*CW\-/lb?W'c-t)HOkT"I36Q!q52Mg2K+7n?M;TNEI0dY2AYMZl<aGBpfEs[%4>RlnQ:ao4.g6)>;Y"]G(05@RE@XG/5rpQL8jICrd(>-eM>jVo#1@O8b;9.2E/"K33""2fc*jM<NnPlDdusHiDf]d)*s>*8"7:a;^@WjmHr5Tb#?j+P*\#3[.KqmbqYYUNmZWT\T''#aK\`4,?%X]Qd@*K8+K)h>K&F:(glKE[l1ek]iR9cjaZl?rb+OB-finM^ZmK7-+pr1FUqUJ:OQV/Y#D>Ym!EWZDX7k1YC(`#ffamhZF_'"md-JoUTB`mR[P)V/C;'cfmV7;q<tNL!V:s>TD)^0%_hag\GeJ\p;u0>X,4YoCb.VUWc8tV@+@CbZ)u`&)f']d*Pkq[<Y&,uL,>."NM.+p@GOCGEpaCoOPA:<a`1:eo@>1(9c->jBoS1R'+FHS_tqFXrg*<IAr#NhnsTK#+3X!1pAY-gQ1:LBlhnNn.@U&%Z1;1k^Ug2N[g-Kf6'g4$,*Hfb^,I+e_tF=VpNKt^HAja$)V(IqEqjEL;:AK6[?JcX;Tq,uQhUsdbC1`00'rBQd_F$Sj>V/@\qb*&mqp[\],r]>,c.^!gL?aJcKED[ESIh*4#:S_k/UtFR\TXY6QKm?iL(IY=*9*b%(=mGQs(s0R/Q!.YBh$hU2"GPS?'U71/.5>eQ$QZ<>PEK3<8W!LYhIZrY+Vqe[J'??2-]EB(j4t",H[Se%>K#e=F[mAsd'^)ksnP:+pX)?GaV<^>c-]<4f&HAl9P9@3L;8nb'"ZYu<J5a(BhD:Zm1JkGQ<k2n&^Z`FJd\Y.%\C_!GK_KMc3bPu1@Sk&=P:*K0L6fVgU9N/GY<+cKnS8Q'"($'$iCm&e;TjMVsoPshaNRAm3>@nK9YXHCf-F.c'b@Qp6Fg;:bb^$*Z;k^FoWeEPlR3Uk@m458q1F6"]qp80M'^1X=W6=_uY?ud80J_qP!qbM!MhVFpB*:?)SA*ZkLMlb1D+K0q\*jisue#;R+r5e^JjJQ:51(TC.FkV<oEh0bpHgZfj10ntUQ$[5MFa[\Uh#6]UYZjI*98Y`%Z]RtI\>X-tB`;\Xbu.H_D+#Q'GhfDRlbucQAfeCdV.a1u\Y7C"Bf8SX3"RFFeb8R5J#L'Zqqoclq.G(Nq5NmO@s2bHq5<hj3V0FrDU$jjbj;IbSCpWBjk,q=/3?\h2XD-[S^.3#Gq=L]-;ALE,1\tcH[:&hkYIA4$+9N9,NPK>>c5_<k'oUVa_e-Y;f+GIPA=X,Z->pCLPc;YANo3+.`e!kUp1]EkLeU@`oV3Ee0\6Nq2$A^?7B2&$&&H6O:?,V:!^S$ZS,rqg]%8gHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2('&,m@9rr?T7n:1H<('CeUpYA.(=V(:+Du@\kN*l@GGCTV^nTtR(DuM?@O8=j.rj32bp;-6VrY$OUT)KQ(6gmhGFH;q4IK#[a0D$&srr@#HSpSA_G";BulCFic5IqeG+7Ca%/\ea/N;]"SkY3n\T[H#qg3tgW!$on_Xms$`k@jkqZcho\Bn)qMOQqi(rRAVo4ErHarUJNb%E8;&_T2Rh/Jt!2nK53:)HP5'U;Q6aL*No$pD&Xgrp]%-qn.=l:PL7(E;AanQc0g4%n(a15JVX?]s3'Ra2<E#6G>&<YDiJ]l)1gN5lUh*EuWFWrffKRX7&!]C]!##ZFcaqnl,MKG,fpKnP?Qi*^aTb;9./Ap\[PVkPiW%7d[@Crr>VPbI50tR2sCVrV59VrPn!AIs?%bq7jD?QgQ?26]V'4"?s/*UL0qJfTCj+rr<8D6]_,Tl[2DWIDndjcfLFfZQ#JL<JU>[IeTYir$<`iha@=hJ+18Aci+:-U[MA.j>Hr;D^,"trr@eGAcDc!pqV4_qW%Q=Xi(/=/8Dro@irI4p\ZMqrng*@Y.sJAks,.Sh;.PWc^4Xf7IYBu!"D-!rrCsHTD.corrA+\Dh#qK?iAX!n)"&!IeNF-2gb;6Sd4hoL+#:F?lqDW(o)d(Yl8dh;C#Aob>GbjH0$N+"!mKZcL(:;@SOs.oa(=K*-(uY_M16NXD!`qh>[I(,V"Z_)(!G4ZFL;B0-m]'O4:E[npQ*OG[%NFp>bnQkP`$JrrBMlrU4JCk5kMI^,pfmXd-4:hYV)-G;mSQgS`1ge/\Xslfmr-D#G\1VNuh3Ec2E-2',paPI&P4[Q6r/I`fC6+]]kKMNXb%lJA-*^R/[*0'WB9jnH3lgj>LuQL'(Shsjc>f=atglCjrnAY>]b$;%QcLG:)4HL7iJpXLci']3b-;cbr#VPfp$:sb#fT6=&uQt#YVoi8C\^=J/W$LSUYA<oP$_\T"TCrMI^)]O.[IdAWKr$mom[LS(s+e.EIo!d6jMN'.[p<MM600e0_+YibNU`t1t:?C4lRi0pa@Z*6B!"D(<9Pqr;=-6sj`h]Xb7T/rW;u,d-Q,Za?f];hDn7ub#.FtO3[l5)Wb4!("UrV(V-)-kdL!<J5S0^'g(l#"tXVcAO)8pSn/;i_OYeOZ/O_,]P2Y7J:,Z;SR28NC#9TdE(&VgJR)obCpXmb`8l9kO_@g5htjCe'SV9W.4Pg*-:3_g+':)G4PM^+IAI<TLQ$L"I`N[UmeX/f<a;,L<q=9&N<fDbjK-H7P!4,`8I)*4Rra[8MJO^otPM'.ha\inNqM-!Z<`f\:K<)a'@Wi?aP!!fm_</).BLc]?j.0D7>eA>tF9jtiJp[;f\k)96>EIiKTrrBt:!8u3&mesA;ir9"gL;#>@!9)W$J,]Ll?L_nTq3h#=q/(rf!27+'hpCiKhO_aUIeWHPrr@_JrrCg;J!r%i(`h<0!5VmHIHhXHL;3-:?TA&cnC-a=rVlj7%q(H'J&g*LJ)uYkrp4.hmqf`mb4e^0/MF#F*rW+YcaPs9[=0UCZs_+f1fUN]r\86HOOsmW<d4'@lAj'3bp=PcK3$;=JS+#Qj?[+orr@a"Fk5+!F4!X9fR*(],2;WuQl9X>D=ikDmHdh(CFa'5;f>?gND?8A<6CL1O$%HTjaF7(%)m<e<+CSbre&1NMR``%p5MG/Iu3pgImm^kK6nS$qqV8P!5bMGmDU/-^[g'mpb;\2ql.?nOoGE![eW5h!0gF^!.lGp4ehfar]L+nr^6\cpM!(bhU!A6PRmY3=2uE\5Q4'#n+#9VdXT>:rnX-oTD3SQrrE&rrQjpC>^sej62pp:X2"BaDgqBdr13ifKar;#B7.AJ5Ki*_1&OY=q7H2>A(G9ISUoQ8j#L%lq!kTSp9mCDS"d1>)3rqhmQHoFo<g=#<UL4=agU`G=,!Nl2Fm27AoQ52J"+blmr+;5hh`GuJ"UNT9m6NgW6.tTcGSH58[5rr[;)pgMi>q\0VP\e8X\=XCo#0I;3n0)iM`QP!ZEjtkCQ0[OP]Xf)*'C?<uNjed$Io#V/heS1i8sRFL5XNUN9o,8CX4I<PeFuFSl(<$3KLrkGo-ag<]J:o+h'knIDInhmE6W3r]2>*ud8hV<2(2Q-3]-h5\P>:@-YYmE&$"f8u;a)Eaj-4[Y258W\3=]RQD7`;XH?r%lLaJ!aO%na^S,D>19_X/3C;APCOTEk8uh@HX]JH2Y3BR=k8ZP%9TE\tU(3e#l+XfeL0S[s5^%7WTf51r"*+H3t"#rc+@=AZ@&5A0*tV$pjmn++EslDt426!4Old!&&9g=8Y;^mk`hhHhgJ;!8G&u,Ce]"a8Z/-djscRfq7g#@6a#`J*;+Nms:[W_Atl'Bn%j%r%L;oJ+#h]53Q5M'+OsA+4&.Ar&"7grr@6`L[7"c0DH-LrrA?A+7q]t^O,etqqKTPh='5!n)"$3hXqfdB`A)%P2D1)0Xl5tn"5Ctj8G3;pY@\AgP7Sk<t$ll*VYT^W1Bt9arRsL'Ut#\nenI<(tM[FA?<eG>$/$N@l)B5f?R1Q&(.!mpBK^G?]SE`rKkgYcHT@UaR.Nu%$se./\s9@VFom'Tb(fo/RD%n@o5-Al6qq",%LP*7Z]I^4`-5%9.aa2DrHtE'-kPq>n"$&Eo&[[e$G[G9<[MQmsf\`+6=78e\@JAo!SI-4+$cgrr=ilbIK\NY;[h<D#TUP\K14O?[:hG@s<)&a2QP4_dIXg>b%\Wkl()Jr*;Fl)&f[_+!"9#<>s6+7p1nS+<SeqkBG+1K-)kR+3W-q`bRBC2MPjgmG>1eeo#m$DG6s4mL@qEM:_W[C%"`PqqUpJmY8n]`:UI$pp'IT,kU)al09]I'3f*hk4\Lk2TF[<8`5bVW?Z+fo"?T\g[1hlU&@m:c)jF%fbE4F`D=2"^\f[Url>c4O8^a82u`W%de7XpiCk?e8f\B@!/h9srqgR(mIRc9ildA^!4AL"!8L2=IeU,9nt#d\[on245Q"=gLAq8O%_ZrOj?<]rfaE0[rrC#4puhYW^40dB?#@@OpM_5JV8`H7mL108mn>s6+86[<62prDrrDSErr@Vn%I[NYOe;@\:K2i&g!Uu>kHWm\]W_7X=tf\gO8f48(&.00rrE$6ci3uU$1UOc!#G^+rr@G]BmVaFn>6`n,n>\0!6'\Jrr@JUq=aL95Oi=*J(i8!mNkZDHeA)g:B(=KXM:'nr[8#hJ,T[Z\bC+d!^H%*^)):YVYkN8!8g#I]rng$r-PpaqblGR!;?[.IeT[Gr$ml4I]iZpJ'1?lFr!-5S$?tHH1Bp9;H;Y,;s!S^LTc/-DlfPXRKck@8TU-h/<E4\a!??`L,5eQNCL=jcXM0C2tK**=kK3ANbCA*(=;=deNHAQ/3+((^<uD/d9F*@N/6Orahoi8UQpu!9#cVO)CPr>'UjI+J?";oSRJ4R'X21o1/bJIEFRkq&,P24hn@aQr%2.Ph.=r_pqQc1rrBk#nuLI3rr@a&J(Y3P8,b*+`W#qq5Mk8H?*F8.*pjdBY,VF$pBMr3hX:CDq'l=DgS@'#0E*F#!(VP-%uU*o+3RU^h>[KEli-r"kH$oBR%a5Vg7Rp&@)))18,iQm=5U^UrVlj)ifF$UIl4FkQ/7ufjM^aL-H+Rne)hck"%?5?59ajO7a.u;.7H+-XN0FH9hTaog4BUIBIe/-2uG'15Ij!@^(^4#gh3;:2#CKnb76udiaeZipB:<:\PaIL%7mFnYKfgaq(<@(>rljj*m=Q`-et2?Z7eo2(eAYe1tBT:NQ$n-Ud(K#pMaL/Z;:@>Ibar'`P:Z@rSi0Nh1pKsN.:6PfRNg$?Fg(9hIj'@WV]?f4d>sH[@JuLC8psrBE%u2'79`ZDG'[9rr@lT!3gtIp\'BKAc/#^mFgA2^[T\-^\dVHa1&1/rr=+3)u`r6rrBTP*rYP2NiBnq!5hK[_S#L;(+@dPFI2S"QZ2s)!(CV$W9S@E.jLC,?mp$E!")]%a*b>K%tUO9$&TW\Ir@jQV5<"'NW/uh(]G*jQJ0`Z_tBYF8M^;G_Ne;,C$*J1_F_9m<7I.u&1eNDrrBK3'i'WY7o(5%:\h5IVbca<B"TA98Xn:0l2b.LjZom=ZK0sm5G8#VD=??"cfaO$hos.:p\t4F:ZYf5P&0!ml@m(Brp@\R8ei`tm!@B'ea>Dt+[Qd@Z%!^=^Dg6E,gF8q<fI1V(s98cCU$J&=8Arq0DHoRGqs_J@16K$m)g/Ob=NK>WJ>oq.TAg3.o/O]4!'9RS`MssGsr+BQd<=\cgNChge5::g1IB^IY)Si.Y7M'BIT1(r`f;GpV$*+MC9[+#U59G+cR\#(m/<c.&0V$`=ute7iZ1B<<*"&LV9WrN]<e)U-t"id:81re0K%RJ1;`eJ>e9u^^^A<0`c.s!,qr9HhY1Eq>9p$HhjT>!5aDOHM@CQeaW`gme)>W[Hb'T!Oq@Feu`T<bI'8.!-5La04-rt#jU-0$N6`,)u(8`TjXZ\"	KjJ-Dg!':,[O'A5qM!6U7j?>![[Ag,?+)^in:LbA^6E4D%#s!SeXhRhpi]=1ZdWKL/?1%M.rr<il[TL^]B=Y^gBih!qgRAD(^7Wm3^&9KFmZ$RZp[<S*msb$"IlpNgFoMG]JUHV[!5ng:k;WD.rTY3gGQ-S?q*G#\LM+a?rRlN#G5(pYr4i0<bPqRhhYlnacfW4H!,f+AAY8aj+#6(U*IAa^aBq+1!:5ERB`A(lVYlDQ!8g#RI>XMXr]T':!<&m;TDO7*^O+Q?rXgmb!+ZE,]DhjI!iQ%uI(r_ZVZ-Yk9`G+kP)"Gb!91mjrrBdf@s^Q82uHg!5PDHKqh\&9hTi=r"TJIU#A-$3jfAC]/^NOPnV8F^]B<AL<a[j54`c+g\qd?\2&83XR63Z[,tTC77dS66)G&'>2/JT7_r*gkWlqME4]O$;=66p_Doh9orbmO`$T^bdjYt=J<DeUsdOn>j?XIVseMS:I<o^KnO?=1hX*4G&(<ckbLW<kYV4Sm:`B4_oB"+g>jM-7R1$tCQ>bm:]74g?IFY_%T`^Yo9^JZP1>2Xu#Fa*c@qVV8d3P.MA#KhMKq9eahi?)(l,pq*pH!\McZ16_S/%7G!c/NC&NK6A]gGOD3]_;&BX)Cs7DOR"dl".j%Ckem&ZjN.&*Y:hkQsS#9D`RgtKH9Bn^/9(j`bgXa0OQRLqo>H-K4e1rZ["S<GF$mXa5L[egQ)r2T+Nq=G%u>k*eu[UGi@'t@-ne,DKn+Q]72&(Q`e8*;2Cu]n^K6LOuaK>$Q5O8EeHtL3b3+5fCA=dmCW?1Jc>^f9).HH!/LRSaH-<!46,#o!<,<Wp?_4;rrBsC\,QI&kO*h7?F^"8O%P'(>??=BAD[:QJ:HN9J+jRGo3VFs_ZT('rr<:j7=2#KjNIQ'Dj^@brr@eGb!5k4T!%dFfUq^5DGU(<R/[0Bboa]Ip\ZRprlaX'C&\1lJW]s4hp7#Nn+]b(rKVlLhu#=rrrDfSj1Y>sJ)^-OrrA?4rr@)ghnAsurU&k9DYNUL4>2GfM>mP`7dn;b<!TXV:q6q,6$YXTk+n,q!"D]i=J)Q<POD>ON[h+0!")<bE2jTmgYOMn!"D`Qq'K^Xr3I#-r0-IZ`IH+^XoABefan%uDgqHQ4nlFhZ+Jo,qqo*ahnA6Ir2XQWn%\WurrDXim7@PSQ`%8na;qN]=Ks]f7@ic$_W\aon70\)eA*3*CfVo0An7<#VKF@*X/<#6"Q`t@rr@`Qr9`BZ4Krtjg?kse2'E@IR8'Hg]"=j!Ub7j!,+-_elZk!'Zn/dS+d=,(VsescER^RK/2`QBo`=!>Ndre4=Qr<S^JB=P,_%FX:Z^L6!",.n@D<8IPP?e4r:/J9T(D7FE'lpPb\p+bFnlo3Vo)E8MGoGdf\OU$3+sO9)@[!TaAj_U08F;7&:^:,bKl2drrBr[5K\ttOmNU=8#4R2A9T=f6b%.*j.I;u1colA1VE8*+Anr_fa(DAB>OTJ\3@jV@`d"nR>ItYf%O-d,O^jFqItdsW)<Qp"o%J$J)t/rI/X'FKd_F.+.]eD4O72Y3SSP$<9agpO\:\,ca@fd/KT+Q<uE<!MEL#+W->C27Z>%#jpu^3GiE:!_.akMO7Sq<fCG5E)(h3Ff*n2\f<kWhP)bkYeO*_CjRC\GUbbs20n"DZCE0$`rr<uIF@JgHD7Y4VDp?=i2L9aU@iJ$iZEL=rK>rBaP*T&H!)Gi1p[;Xnq+anLLAq7-FFQ&0[rW!6G=><OWbQilQ1W4C[q0A_PB>fP.cI4cbd;UBE06n$imo>eKPP&In/c#gJ+0+\R<pZIE%bbJnhq>X1,bI\RsFCMm"`Hc&]!Np9oETjMF&Y_KqfQE:>8!GfpV%fT6>7*$iPJ'&EF"u@s]T`nbsU.mr*.,?i8/t2Ld4FNt_GAq%o1;<j#LX]1]8Pf4Voi?,+!AHVHq-OH0LQ.''BsBP?r2qANG7alMb7L5R-ITJJ`)e?maF#lN3JYL=Qs3egtomMa</9%W,n"(gi4]+m2(leadi8nk<S(P\feW26>gUnji<VQI#"Oud>K5eAl$5n(VJIm66.BME>b1">&>.H1B*W0Dnf,6W]$<*blQ'Rtr>qqW97T?GRU;NLE5g=WRfpsIK]%fZNpho8sjO'TTQ>JoN?pVX<6Mg+Q)X@@"ii5B,#+"^-P`R`F0"\q7a]4LBP/;+LJ@%+*e88hUYC%;f1c[=Tcd.T+cFaqG]L4(G[W<QR<DB@j;nF']&g__O%nmf!#qBM'B6'.e>VKeu6SuZ_eWN+rr1f@*Wa6b*CPM_j]26*=E`Sbb,W-W`)r3[8[`kq$c/sZpB81Idk_[\sVhYll15Eg!9mp2.W!",h'&%-j\p4a*hHg_9L^-pBBLM:V-YDq4;*U1+a\iX5$Eqlc;LW8<C\4SPM,Z-*I;a^kNj;'#0i;R!V0%/K]c[3.*?.lp]I?WC;bVsK>mu?pm_9m,$<ohMTGOUbeOJ'F"W3Pu>b&7BV/85N#BXn8/8lKLq=VkRL8!'ZA]#9W=<)c@+`0/7%N0[Sr<DZnX>Mm,r5N-U3o/+4KBDr_i,Q@c<U?V,]:\[l7r-ppArrDQ;mSEf:Fm$En]Dhj40RrZ5^]'"bp[<T!^O(9R)nl.+cO6i%'E/daP#PFHHO%!LKi"GTT?B<AaWh>s)P,Nc5>k'#hP".&<I`t'25*tt41B^IPQ3R*_QCo'efU2e8O&AdJhV\uh/E++;uZj1r4`-uD855`r8<#^Ijg>FgYIY?oQe^WfY*JOR)O0n8Sn6\3^(sE=Ui+U5$c!fWlsI(9RbOFHXlia&BSK0NhPEHaCBgjWbE4nJ)<J?Qu>ZJ0:o\lDXPTDb&4??]]q7/*HBYWG$8X.md@-oa%7U][X<d:H9;tt_LE,o't)I8bo9VOO[D6k,PEF$?-bgFBi98]o1qAXV5/ou,j^(TZ"EXK'RGM22mpVU4F?h6Xm3(Err@a?rr=`)Z\Ij1MmNBsIk0BDhDFjbNL`AiRt#SSB?3[<Sk7AALG<#@1H:rsM2rf3'867!hBuu9Z?lN$4_Xi9T#Bt+kD/WW$]a+K?Z,dUpc[4JMAf`[h5'BW:4%<\jL>QJ>+/]U:'W(2\`a[/8nJIhaj=o#b5/aWWE\)"R]!B2;5HZ8@WqDqTKGkFP13PMgQc7f/>s#m%^@,Fp[<5"rr<@$`:(nTo;;M$=>&(YFF3J_Ye(R\nNDrI1"`Kg(-d(_b]h5.VanAn>n.Mi7ut^Lkk>kNL8(t'==N0_SL+rEBW;bJO7F?bh,plC:%Ohj^9c>dVgIHI[q=!**R@5C:Q)%(H`E.@YS?ti4\La0Vkg-/;s!T?btsKj'N)`Q"B81t$')Q!PBH:=WK9hNO]ALS.YLr:>a/]#![q&6mKp)t$iB\45;o@!jA5\)lf6;mmjT$e!R_q=isc1oO"QPf5u/!,kW06>\@O.Loh$Ka?15>$R00JGY%H]gM<j6?Vf7.&OEu[lmPYe^Y-Qir,>!`ia<Y[s'RNcY.=:33R[l(ij*f1@P!oc_l6L7!@X?30?.tN"o(&#cj4+698FY"8P(EVFdXS_irU8rkmr'jhGJAM#id\g]rrDI4O64.U!/:a(YPo%bMYF&Vnn%h$\'06lrrBr4jWFL&"]&3H"El0jJ")Z$=QVjBF%>]Ud=9DJjQ>7]O8)a_<qdt[Fn]]r:<*(j[JFn:pK;TubbXT3eBCmqa8GZ&g"?7iZh"!oC!^C+.(a,=/kT^jd!_`Gbu0['9c&P+hp2f"_t@[6o@Ua9fK2`Tp.j9)g_X6S,@pJ5gS`mIlQ\1X2HOp9g.f&cZ5MF,/S.X7rnPB!67S`!66qt/RRH[=MfIejO0WK"WaMg,L5%0`'_ILol<+"LP/OUndRL<,9\POO_WJf+II@#/o@*\L?*`c,`GbNIQd+p<79Zefh9kd`Ej*KaA&>&l'!<]Ye(31l:0*[XL02Z<(2bPS=*7#s`5/QkrZ)s?<rQML7/m69+-Uu=C66\/SF0Y)oXto-\n5-!Vp9,4b^FRH;S$OPaeBXjK!Y6nAY8_34&a-\AEDkWoZ:G_a0!(Kg.3)`&:`6br-7u)A=r[(Ik2,m]86H1gX#\pr3H+fe\;jm-ZDoUh+))MQItW=O4cN1X7s'=Nt"I;`5T(S]A4uGaD[SC%U,`2YCjjKmHFZb>(-tZ+Sk8_rb!12kAPfl%`[_7Xk7a-ra"osYaq,h2k=K%H^eas3gPq[2XXLb/PL;6U4SiJB54sK*EM)(b>-pKqi,f9]8n7*:QC1/C/%,ZF`CA7Bjh>`Hqu?39VING>Q*U>]ofMn;J5sHOo2/-nA+fLrrBmshS./4!:uZZ!4U1"$i^4E:ZCR;!!Q/3qe+f9nc!C?q.#3[!8Yn4^O,etqqKTPh='5"Gb<(Kro1TiC-VKCrr=h3rX:>:]gD`!Q7)XGVrqFd*M51'p`]1A_&]<N!&G^:rrC5YrrE&c'ApLjqu#bEmF!*#C]=AKrrB]]pP6ogfN\0:rrCfgraPm-ik4u7rppl]`9l1V!$9^8rmc.`oqfA!h#RHT_BqM6JNd.bio!f9!:Q9>hfUmX!"#:t!4#GiTDVf*^\?K!DeQk^rr@s08,h(prr@$f^&-V-rr=F]ju8(jC])Z]!1IPJDZ9]prr=R`@/$"0n#k9s4')IQF/u9e.r\EFj7s:sGK4)kmb).+<*=XaM9KN"=JJ[cZl(Ys/NF:a&LimJrrAC@b\VdL0:b<fqbqJ+Isl^"m/G/`47`i3`:RrfK6h+&3KDt>mX<he\0QI82FA-DOKHLKG^L45^/p,FnbC^>95E]l(V$phA@VQ';Qd0;R,^k_0W8uo\k/bShF2,*R24?_H[[R8hY(L85L$8)bC#>cB==GQDtm*uFCOa/QPX"^QS7pQ]^QpiCN3Kl-\f@!-*arQf]oH753!;SaBSH8dklb1W\U]!=c]2ib\t#]3Euebrr=IMaIpObW+rTCA39Ci0g08dBJL:H*F'>k?Zk<c*0e0RI)S\V.WibnD5dePoBoo5>`Tm8aK&9_.U+3%*@96kW&-;#:.<\4!3>tnpU3lm9?6V%q8N98[[533B?XU%c.[FAm)sK?A$'pWfADr)oj*X#m##]=T\oG<anFAe`R)%cO)\PCS0`#CO_N_%&OW\0q&Xnoq*"4s!V.RqjA%LK?n"/j+k;u$Q\*'AXA7uZUoiB*Fr_prWldth'@>0rb'_2T@1-!lYmYN):9GUa[kdi,/>D5A.+YN!hOZ^h8W'lAUeK'3l88k\gn1LZH`)ATFoMG]JUHV[!5ng:k;WD.rRYu(htr4FjTkc*T-uquAaM.[^ZK1jrrD/h?iGfSmsDcu0VA4b?^s@UW#m>#pWRP_HT1l4rrB?%q)SHTMY5dIqsF,2Z#;N"!#BC[rMqIK!;@79IeTiYr$!*Za^aK=r[\:\rrDN!TA9kS!5`9]k!f3=rrC!DZp4;GQe66+TCHgBrrCPb+8)<(pTfAM!")F"!4\1VPn3j2*sI/h4M04uHN%tmpA'c#J,!aU>lOf^WU1dES+$>@c+!]Q/9(Uhqmig&msd^>H[:#X^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-^#qqo*ahnApE^&-ZJJ+0q>q^%;UrrDhu*JOLn^?Q5TaFD'rJ*'2t@fHGHZb-5;pQ(6b8_\abDT%%SD#XM.TR6FHT7<*orOU2JC&\1mJ:'<U!8r"cT6GYO,Q>bgiHP8NDoY*@oD:W%K=:d[j5%M#g6WWU!4X_0pTsl"m+H`3p[<So:\[OXrP"'_UAk5PJ_csr'tZumTmt.!rn^*8O8f1h50Ns+hsl6j#kc79I9VL+=Ohoh`]nqHn+]nlrP"'_?%:gadXV00]=Zt8T.g/UMr<dt)LZ?"!5IPYn(j')!$>7urrA?A^\b:"hnAsurU&k9DYNUL4AY']rr@%iI-1G/_uB`"2u`7Dl5/r6ro+jl62pq?B?Cb`fm<jFp\`85^\kO`rrCF&rU6*Eb1q4PO5KH*5CbsA5#]p)61M-!8b$#*@Q/aZ(9H5W*OW2"(N[E]c8u<07%rpa`Mm\A:6cSeR%RkIM8%s\r4e[!@h[A,cNiHRDKi0;;KTSl*>=j]mL5n'VZVgnm@E4*M^=Qr,F);rB($&\.9d.[boBD'#^in3p@"+l]*f!POVXTeNc^Q*j%/1$5jj*0&5IAPqLQuRHhY:JSf`8pmDH<0p\"]4D4Kb-aPfVLa7!7sHP_n"<Vpp<9krjipDjuJfQsVL;5op_,g?@GC=T5SHYd3d-Jcl'.CWV25D@5HC<UA8dV`<=<ee'a<JN7HOd2ff;bo#,HtfG^:HHR+co#RI5/sFb-]C`^7e!^/(0,Kjb$+YZJlJSW^$T`epRsPD,9CNu5#D7Z26#N"3T-GhIV<>IejuZq:;cN:N``)DaWtmO!iu\2)io<CrrBoTA<(!dq;j/&P!pSfm#fC/#ED@4GP6A.UT#a,l>?mcO'q-O)rrq$*.hlq,P1g*T)J$]r6^#^0JA&Cpj`2ZrrCm4['.b.qhT%IrrE$=T,7M-pLWdtiVrnGT8<LIQIq8p)rJ@-%fPeZlu)RdIlpO%8l,E"L\[\E!9&LbTDTG98)BqhaD:e37IuT?!"D-8rrCsHJG'9Aa8C?iL]1E+J*t<@IeUn^'Y2ioS,Bnu!1_BQ0BVr5p:a0af3<kbds6A\<sXpComNabFj]5n2d0b_$L\HNHP<2pZnYDo0YL)tP%]FD8R-E9l#rZlpk/LbIQ2g2NOOPBbA?OR9<N:QM;o)QF75^"W_+hnbH7fRdEi?[eoXlj9N]<`"KX>1i-$1!YZ,$):+LD))a"W&XWd\cW1uCaJWKMPoSP6m]pdhSIeUD!=oSIZJ*#57h#WE/27GbZI!s$--:;Ug\agVDh:c'hBkFfD7[=C=bSKj)g"b+)i7e(?(F;CHe7,GWd^2uZ`f[fp4aS:;YFY[n%sR28d!&e<jB#5VljCBLB'S^V#5R##IjKYA"B/9/pEgD"P,HK2pB:rKYt[SJ.oI^*791t.Kh?d6K;kSMKR$09VJ*o%Uo9.uN*$^U`pOm.<q\"3n*f-!YPo6d\?K2Tq#c#bh7I#G6_<$oV[N#bEGaLn13BP9k-/"'QG4HGG`9'pW\S(`Tuc9ZUREVGQ$D'r_=g\)!1eRK(V"sZrrC-QrXQZ/.tl2XH5eSob#$6ed:BM-55sgCgjOSrkXnQB=\1YG)ibdQ&abX/\kB@bP"*UaaI(RL;g!20SI6qs*#3$D*rYFUrr@_g:i8CnndOfRB$RRY)8!17&!aL@>:&SW_tP0YC\B>D%_D2]j.H75-R;T9C*5^3,Yuo$T?.G,1L9pWp)Oq)Wr!gQ=]aK;\16B;q'K^KId[P^Q!T?:2ZEb)X`T"=M"1>noa'B$Z8Tq'=IW!cE_@@$WK>Y*&\b=<Dt+nImZ9Zl(]C&W4ZhHV5/&uLr^.4Irr=MBQ:%V8p:f,8ZIA4>jgf(da!KI7?H:]c82F/mf#tW_QK?Fj9p*@^U:+W_.?6fjQ)X'orY'Fg3r?)W+6@uHFqn=FB(rIgXR#YcGWjXIiccGY%?Xf.0tYJA@jB)e'hk%>#&>^lQ'h1FVEj!)NjR)@8Te$%2(_jDJuOnAN3,buNa`W("Zo\Zn=X4sOsq@d;9A\63;:%Xrr@b#jRKULald_TWj3<qfaP@2*g02s%7OPb245hdb@N0((EZ?sM`#!B;^ml,)R5;WWN8,SA3]RW9%kbEjklN%T!"@t])LFL25-k4U+#:W>+31:HA//Gh.<Q>68c8<F>"uYg8hQJ7b<_7!G^=_+HQt6R%"VcYkRU0)uP:PmENDhg]%6grr<T0!5$JLZ[)JHrrDHAh\!Wn'4_%BpM#odpTm*Ef"upd')qsYn*f-+6N7%=3e,B%raLBP@!lqn!8`XDIF,J$-6)qKT9p_qC%U<^mQ1s3ER\@b,<>c(/8.93HEVeloK2fVVm3kk]n\bagO4.iSQXU9g"Y8YLLbOO<,CC.^\@`paMV:`8[nDbf#C\O1O1=@`R<B"Z;X%V9)^;43dQ\+\TG^l;U"AE,Pqjum-^k*]>(ZK#<PSeFuI7mR=3c#2[*`7;o+=+@&R\YjQfMt$l)e8Z:.CgGi5KWC5M$#*)XA-Wc1qe_+.9a>tg.c4Z#qkd^@.ej&41R:g&SVkQ)su"o\>O8D;tGA,0_T4cK\W?p9'f5+?1ZNGP\a/<@kiXh[rsl!pSo\Y@@,[g)!6mL?poVLcRPNk1OJZ4]EIQ&$L)rX7nE_O\`TinepPQ9QE9gTj[6He-bkm`*2p;F$>#j\27!/XrHW@V[-DJWcJ%#\kS0#!dG,gE,Cj9*hIieh"a@<i3$t6DE'TdH"@u"6p-pHhY2W]>M)HrrC@ArY5A4n`+V:5bY:8*BhocO3fSPb,*$X;,_(QMrP<4VsLS5mC\BXe<KO`E:s#UC[nn`.tfK[Y87dQkGq3pW[DFtr-.`krcd0cR/$>I;4QscJ\8Rc1VFpOePehtlgBn]7D/B/rrB-\WX*..a&U\^<CMglTc'l\6A-nt$P3MWl;Mm"%1D13P*VD[+nl".%o&+L<)chdJYa6@<%%?bIjX%Nmf'u[B,sXWGL,itlE8%ZGl#XM/#E5ICjj48es;<YNt&J*G@1&=`i%UWeO_'d.-\44D\%l7+]k!YT!cuKgCO31rr?G>pIE(`M7`9,PngYHD;SQ-0=jOcm4)Ub)hVkn4g,W5Wc`7NH?aW\:EN0NOO@2`WGQ6Mp8'UPD<cE,;ThXpL.SI"VC<[eKLens$!gX36MKql1]2tkI=,Q#$iI-@*FX-KEHTeIqWK#^4]Tk"YHW'EY6Ta:q^Z^Z`luADb>i15r_Fl/)LP<AU"`FTW%3Ig9$1n1;3fR3@Q:"&YN9t"G438>Nk!k'@VkmXdFA+`Ykk8Hm7`7])3!?4CGj]_D]c<EffV]?En3TDR\dltD'`2p'bJRrONR+5qm1?'qX(nQ=R)Om;,G_=<5R'-9+7&hX;>tje.t=kV*@9WqYpH^<ZdGeQ.K<Frr<EUk\\l#g[f%N51WKZq!ioPbHU_!)g?/ZS(la$N5]H"$(AY1j>!rNY^'DdBe(?09U)q^4>MVQ)+><b#5$UGoDTG<eQM:#]!gbl_63\#$rP8d>h1iQ@R#_/3hhLe/!!r$-Dmr&lZ%(:]G2$60*LLd\5u^-*S47V;qb2K;p?$HrP]+h+d"'FBh#,gXU?bW@:DG+O+-h8^[S[]q]J[l5PV`&htuO49A.qs!/3+VfdLr$r[]ljqsCl=\,P(\!/iHkrml`%!-'K:qq_7$/?[^l]n?6U^R(R#n".\S4$-m<:Oq=9.JH=(h&F+Ii-)!RWPNt.fMH2EZ[7<ROJTp*lEM#MboKK!b)ZYClJNC">9C_ArrB<IVt0NUM7[t$o\,dYC>aOhoFs=1adh-GS5p".2D;#;Uff*$H"uWS-n&`Kb=s2)P";\g,6e."4fpX@9ftLI#rL,K'J\QdU.Jm\&i;%)#[m)E'hXV5cQ<&R9T@H1hu4<Grr<C3lAaKE<0`rRiO?\HcEDVn@asFN9s'fIhiGD0-.t;;`GIb+&9su=?Js+0@.7kQ3=;iN<BX<d`t^0oFLpDn1N!'GrrATJ_U%mt4[sYUT>o$5OO^t[C+33fOmB`Wh"A;*,E\s[BVP$pBm(OmUDJkj#-N>qnBU6S"NpdH,bNtBrCnj\11IL8S@%BRNTk,RC"\:bJ&'4).%f3A62V[Kh7\<Te\CM&>mLB0MuNe-TDT26._XJ!r$bSDaBPZ/nSGWerqZQep875,q"JI:m<)5)!4Y$2IeRfRamZV5a(0ZH?\'0fH1j/6g,gBhHpd09[s%AuqnI(-2Q#&l$aMM)0coB1=^6Y-,6oP@`;]gX.V=LQV!HK>m_f&)Q\P@i4(nA.r)2?4PBcJ#^U?&ha3MAZE,IepiPa`[3%6SoArL8!0pf)EVoRg=JB$Gc4G[IpF^!YP)e,P5/Zj_q=lG5TZ#m]OA<dceoKp.^].d45DJj^nms9EV%e.L<!5aT-iCJA6^E2TZ>J&kO`&N)*O*1.tn@In%\")_YP2D\1cJKSHVsZ!3Ht=sLDuB4oHi]X'olSVZeML.%SRL-:Yr<C6o76g\SQn49QEtQ.G51eQcDT!,5I%2C%?oEbB=bBQgN2Q?o2D`t:j*W@b-hfojA@Ks02FSr?RUjfWg.eJqkO$"dc0e+!A+(<NTmDhHASFV(K"0gpsT)&A&gM%]>4FHKp$r?U\<mM/cPfFJ+"'*hX';%'P%.CDZ7QR!91lgci3N!KC)ms?h*K\rN,75lW$`qHU%N1n=/>4E`^&;r($^<rrBgKZosm3jOsP5DU/$Rrr@e>mJd1DS%_&!CgZu0nDEfRDuIkXp[<4Qrr<E?q"_LEcX-Msral%!P%-R0icfQUG$\s'd6Sb[)!k#XajKem<Gm2NQ#(I;+1*p^;a@A"ofJVdX:D2pPPu7he9Th%dJ2,\;m4a8\$&,AAJX%BAa,p\-)7-Wf$eNmM4:Wu3MbCkj(k#k!/o*jYll#?>I5fSNXS[3QKqD,XB:n+j]4iRWT7jp!+m.*Cd5p8IeF\0_Ii<u^ZH4-c@;86o9ekQ%:pSF41[0f>LN.h\0.f<!';,E9:BZK5!kdQ0\d[GdT\A@i$XgK5&+?gT;.mM^QPDt:Z]pIYFC$cF*?QC.B,(jb.WeceCcgUSkMrS`i]`4`ktjiBKqDk5-s!g9N8;@5"IGgphjU.'n"kfE,MZ%Km=+b+E.WQ1C)8DENYan.+"+L&+ABLTD,]WZ$YBAqqo*ahnA8=rr<EGr`n40\b][2J!a#.@&l(FMrOFp0<ffKRgi.=fuQ3U4-`OZ[<LtS#+C[0lJ:bXGchYS*ZBIFeW&U@NhShA-i>BriSN\_Njn>XQT]\RWQAa55*I.t4$jp/:F8gh[E;RR@g0Hj`G(&k@r>F!`E%sm*'&XJF@At]J>9Jj;cV7Dk35^TR,H?AKH@BhmB/I'\^O8)mr+kGr;lZ]G)uQlJ"OKnhjscI(cpe#jR97Tl#2m".r4*%Vf[(-D/[+iYUfHklb[,qBX0dff(/6FN[Bs5m60bd%?P7:RVJo]7*eG(JPli4PKEa75FVTPa,cJ`+g[s1?Id^,D;X)`#E6Il:<qboV['TopBGs^6No>Zo\$N^X!fFk"p8nf&Z]U0N0E:uOeA71=JhWV[J-7G1QR1VX"!9g;+?\ue'uV^/L79f2"5c.7'T@4<Ym5[O5QXW\*f4NU%()&me#l&^A-s`,H1L_FnFKRe>_fW*i\#+D=p?)j5/\67b_,%p=uXgD>K]YaYqCcEl1UO1ph;=;PdiG7;E:rrrA3F#Mm"UHYkC,mJaler:aI6JY.8:loiOOh)*aegu$'T)/=3%H)gBj9iCaiV0Lsj8L`LJ1C2Zu17jOWNQ=ai%1RG;A<`fE:ar54KO/ME4\lr+,l$,E8J^IFrU32T!9JA'!-*R;k5PG!rrD4@rpKaMn*kQ#iYqVYrr@geaq+I(HO)P(r65)Rr3jfK!79U$mrQh;`W#pUZMnF-pn/]a5PQ7G)rAYC4oYNKKt_7#!90mRN;in85J2E%S!3h7h#@BQWH+X.K0R+tf*hQi1&h5a$1b_.!#G^7rr@G]<r8co!;K7f!<&(9I/a3+_bL.2^>!.E6M3;8=`Qb#Zp4GE:%-s)F8ci*fK1><0D!lr@m*c]mluT[T-X:PVn)ZmB5S3uSdiG7]/p$W6;[*@l*R\J4Pa^-k;t:'>$T?6-(8c3o[rPMb:>Cn@VPb0[r0m`:Zdr6'4Lfkb@@uiF)Mr.,A:rL^@7F>9_nY@]t$k-gmALeG#"j$EdQ4_+N[L#,a8"V1jYpB$'30HZ"Jt:]JHqJ2cskY2,H^4OG6oPpdm#Mc?X_d"/rc](Q7g5HeM9p'VCT/j1gb$cA;$/$5s4+]/QoJR)nSCl02P"P*<I<iiYCl!m`&JATQ;Ibp\H4;AeD:!m8GfBChXqU8.]k5:D\tY*P@=[cYr2U.Ul1TPDX$m#@Jq;GsU!VP:&_Vieo3G:8DeAMt+oj!sFY`hii;0WNoZWP7X"UgND'%j0d!hSAUT8dG=*/)u]i+9)<b5POsAO(!h7'`S0BB6<>9*M'tF!5Ca>qhNcFn``l"bA-MEba[M'ck$%$ci2oprbLEd@!q8>!9!G3YB;f%R=FVq+$DjXe+lN6!5VUahU-Z`r]eZLrr=Tk+8`UDp[<S2!/6MafmS?%5Q!2j5Pt9G^A\'3$82>YZEO%-rr@eE?iKtnGJA<^r*HTLo#1P.mTOu3^S0Pu]fhA3rU8p+nDF6*8+4e%5Q4H.n2Y*/l50!:ro-N:J,DAi^]+:]p.*a[MZ3[EX'>T(/[?JqK&6Ipk]cK6:LeU`HhY:%pV2(%e,BtO=VlA`!&.432tEnH8!.Z5]PnUJjNNjR'%OtY^"M7JNqE]TPN8R/3n(<67VJg`M9&T>.IjpuBDDO,VeCIdraYop-;);&DCeLS<pQZKl4^T&0=1D29X:b-Y9Hr:W30;bM'HM>>#.KcF0/6pB(o=qqRhubeSoI$[<7\ipM8[(p`t4\[I=#Cd[Paa-i&VsYl=]m^J*[%B&29G\?h_`\tuB_WMoA$m<ZA#`9[B0OKOV8W?d7Dm>]B)W2;<p1b_6'V!;)-<W<%_3-T#TO-)X4rrAEF>Z!d6iRk]"T3Q#8BZr<`EoAJtGCIuX<Ri?nX2h`SRD%!B+a#+kUD@!3ZEAYr'4Q!OIrj&:1=JedZ<r.%11u>"2BpSi,f'E[62c6/h2VF7_Fskbf(?0:U;6L5k_?*3rUUE+],SI?R68$GD8B/[..T+cQHY73>>W(U=%e^OfX3a)B6TW:)<[6tjXR/Eq#p>t:KmZ)`HESK3T"uWL[6&Ag6kS"JWa9Fpj.8*fir;D.V9`:LasqJ]\-CiRR6$ac<BX$IHtVM8[d'I9:>@9;qAQ<bENJ0nS2RU$m@5e^TRS:T76N+]u*l74T>Duft.1`F_bf"+1F1)>>eD:iT]TB:N:b0K;L"cHH_@*=V\-tE_AGrLe>o@'J`5m7b+3bPlmt7iCj&D4ftZ&h1;-MPjq5ZTn9*6-cUtRi`%L,=U]G2<OuL.<m>3SZD;C.W\R2FrJtd20BlZ>+96fjqlETIITQfeh#@AXq"O5mchL^VhV>C(+6B?6F-p5+B;G&855j6jPO)V`E=hPCQ$5pa?OKe0%(+O:h"L$e==VY%@l.+[(-882^f.iK=8XM.&XlD._VNb,`oV5HB901^Hq%o=>,5ZgbuRhe`_!GA9,s&28!VBX0m+RQ9Sk$o7km=59LaKa8N#EQFEaNNX[t*m5"7AiTTDE?OsDsJk=PZErU4t!NnrC9T-=&D@!9l9rU$obmnN50[tq$:=e1=NNh6DFMZ+PcoXG[0`t]P3.=n@Z3bk`in^H%K-B-F"$rTR9]/Xp4!+pA'Dfs(Khq^6%G2DNMSE:b452++q>)G=[<:h8F:=*I0/K"X"?&F3])<`A;C+*Uk%'dh9<!uY_FEQ*;eBlGSe?VQ@-\SHa\j_e*qABMA9o>MJ*rYOs+6DaN`o]ME@imN_3/iP$=!'Hu-BQhhC?b&_k'Cm6ZtX7j.[jKdL.8)?L#[+hP`ZhXLa1c[*t^#:Z9RiQT9;(!qRTkq8PaE/F]<Jq<E$ucmE>\H.Sg/Z:1BYM7KE9f83DOk+i6"DB]VjJ_#=95.R>%C&3Pt4,N$20J)PBso/+4KBDr_i,Q@c<U?V,\htU-rr-ppArrDQ;mSEf:Fm$DC]Dhj40RrZ5^]'"bp[<T!^O(9R)nl.+cP*F1mPrFOrZD*BrrBpZhHoj_fmi`0eS"k%S+lp_J>7,]"CV60RC_;Hg8"ZJH22mcgUI)1G+tV/rrAU^ntl-_h\]U`Do@#-f'$:sd3S?_AFN`:I]*!U\p(@!/1iJ83+r-DP'*A[gZGL>7sX'mJTS@'gP>CLQ5th[bPh_>cY?s*.XjVAE*ZHrETO'\[hiB]_XHjRjmB-c'T3[?F'-%)3JfQ1'q/7eM0,Af^0QO`2XK1@[>;j?OjTRLV3-Hi8kEep$QHS0aHn!18&'E.b@>]S?hSZa_000jmsV+JqX\f;l1YD;h`F>I@^circ=#q1'i8JHH\3&5<K"!"a\Hu8A!N6ReGIu&C[W:?]sc3>H>MunJ_`CT2i`eJLYVcV/OPl?AFX`Z-]9-8QD'mr)Oa0LlLHHj\*)Di%.Mb7PJJek5p?PoBUrHg67s-]8Q)@5IJ_lT^[RX`l7AS!kPfFg/8\rN6QM8cq(H#>?UI[*>nqJs?d,ST74i'k<BJ;+9eB$O/&rhi,GP;H#MuJqaZc_n\,!%R0`'KQLaqWRiU3/79"J/8W2?SlW;.BiQ3rLpib+-^-AfVbW@H%V"G?%\fE=,'h(5?W\)3HY5m/1-O?jit8&'Chrr@`hltuFn]"afN_;FDV6*t^fT;49TMl%fe>_Y:lpk3bdf;>U<DXWR;*;)/qN5OeeY=(`R-3Vgi:+@c.l_KIug.^KRo7kurUZ(t=1AJid_^Td.=#\\j9ZLAZ]IN.054'NK]lR.m)kUjjZV7`.r0HI0aPhMDRGee._c#b1gW79mq1`],m)3dm'?N`7;L-qs<McO/'1*!d<TU!aMq[56k^E?bnsq<%Zf?PVSsR@mLZs9Ql^e%UdeTsr5'eit_sWIc_.)WkJL6\PFA#\49fCAC@bJs_q#$j`f44)Ci2MG[OjS?%lX'AN^>S=)GAhW5ASh=sf%DTj3EZ#n4#oV^F>WR,Z91.fW0S;Zp.C12a&P]9[.RC^.n):/,-lcCP9WG#8sRnkE)0$g*);YLK`kY;/jY?Gqb#FN4:i%<HdKh4'/?#omVhktGOn;ZRr:$>gcK_!ok2ONjo[i#aAQTR\]c[1k<D;bij0JLXT[/g3@nK/L8$]-l62;LRO;0+.R?+rrr=>rSi8V+iP'>EE7kR<^)o#5IS=;B=^5ND4ao=;NN`.FeQ#R/%"37LP1%q.f$_^H74`9&aVtF^5mQ%&Y[&O34,QS^>ooUjkifjFdBaO'XK84P<X.KB#l!dsfDI(%YPUicH@IjqK-/BcY;T*ukNbYo?"J`V`lC@6;p3ga7@)%ojYiF`c:&D_Kl5Z/b^s<o1<co?nF`k?/5$gerr>)#V7qC&rr=`+Mr2a6B^M7ihTC_^AE.m5UPY_!pO?OOejE`Po(b8mU;ie?lMAJnTTVRY[Q^M`KOG"cqZTG&EoHat&N#a2WR@P4Yk-="#)V3f:V*<<.t@4>hnAFon[J=^Hk,s^eJKq"l$nr20:LV*N'0(&^E&d0*NQUBQHYM&VYc<1rrC`_gpIpUft#=D79jh."`t=cDQOjL'TpK6&+n2mDi4MhYd&V9f%oN?q(*:O*=bE9O!VDW=?XX4)F]G+Nnp1G.pl#:gR1)OB3=8QVBd(J8f'uf@60$*LWNI@<@11tj)bc2ViEcH]rn\0llINPCdA0\]nu\<o1.eIaUZ,QDQ`d5nh6p<YC1O?05P6I)[Y'Lk68S$C=$l+N85fela"-CY9AUgU0=,$<?4aE<6J-(iZV9_RYlSEj/mc%F;Jucc/Z(?QahA5ZF<>2d,?`A`u2.k7PAhA'dhq0-O)$"X75csGhFF,CddSG;,&=CXe8Foq4ZCeQRe&uRX090l<:`tQ8Y9_k"33p;W0JiAX;DN\-D!bCQEr=UAk5k.5Ut_8H)RQpgAIarrD!JmpCCQrr>'_qg?H"^\fqf/q<@ip5cG1IK';fq6p;'jc1G_!-^;lrU8romr)!3GJAM#idW3!qhk"@W;ckVrrDu?J+t_%hXq9U=J,<dT:LK,G'qa<!8rXPqZM)'r60T0rr=XWrrDr':O`&In+3X\!4PLK0sCLRrpg!ghB+9:@;k:0rr?s:!;VQQ!/gC$rrDr?=*kUi?i57RhtpF)J(Bq[mrS[3!!ntl!3ub'?2jn_JQ)RK^0dpheDL0NJ,[PW^45Z]VZ-YRD6^dKqO@I8\KC]P+8s-Tp[<7(f,^DLrr<Aerr@a!I#kH+'9C:Q%u/suAF+X?+(3RUno\/L"4k0=^G3F*ZaYB-M\SlJAm17mq\'o$e'(<X*47W15Bfr.8kh:0QgEPq9DkL`!1_)M<;-8:G2E#Wnk$<M?8HcBMliTZMV4Pe\u>Ach:t!dC)A7qYGUWfha]!q+H[nn"Y\Y)Yt91-Yea/J,CW^_j_1o%D`]6'(rhY;bdB/rTgdU3cDDqraBP,T4o=+3)#jT*T+&$;,*T>&h^s:6<V>0j**EVCo+u^qJ_F%"9`V2RTm$On!u<+<k?5HlbOr?XW9HK>r,Ajo2#G^^^UdUDBN8!O=&6CPm2_:-'%9JbSL,4aS.m+T-W_oO5/,#_b@90;:q8%X!<@tjnt3id(C+<2:Xf5iqqA[BkK/1)q-C5)4%nUXD/>g.l^D\@\TUp??GF_#T%fEGD51EWg$Ei6;O[6cX%PHCMKi;sC:\+gW2Ge\-&P2hFXM;(7t#5W\'IcerNk0=3ZRR#D)UM0=W$_>B?b;iYHuC!_-IT<</;hMaXh#^Sf&/CS`5bPZI)b$A>(jp'en1R,a'f3%N[h[9r6>ni7S$!";"'+HhY2_J!JXa`Wbt'rr<T0!1_sD]D&>W_;G-GCZPg#*M4`EpLW\2gY_TYo)A^\gFrR,6[SR@h`mK(rK&\X+8f(KP2H0!2m9oar`js+./]V8!6'9PO8\eLQe8d9rr@s8>Q30<rrDqS0>Dka$iU_Irr?T7o7R&C('CaipYAX5Kn&&:?h5K@:B(=R=kXtpa33g.l;.2aAcDbq2@oZ2IJ_\Krr@aMjVObCSqlmWq'j(WEgY^Ug:^YZZRM!l'_F02`DF5so)lA/pLI+\,>CCPPhXr"G@Kh_JI]:n_Dp+0QI"`t>WUL4U3n9TNRpg/8(X+[MpiEkH,usqSiMR0I"pN?YBa$n,2;OdYo#X?6SlZY<N;hjC*)*@&\c_=D>](GQBjRX#&+(NrmN;n1uUsdOuZLrr("MKq?(kiEqKreD><j<9_PAhp=@i])B+G+(Kt`o\%Zg@%Si:)Z-n+9gGpgU&6e?H'#f&98C"'AkMFnh+0k\:ZZ.Fdl](SD\,Hk.l"+,>bM9UEd>Tg2^pR-[pXi*lg0cD0Qq8=QeqW4G@nf*d2-P8SC*9L:K<CeJk"@DX^8T_?,E_HOl:Wr5!"&f,?C3D.6V%'XX0]L3rgg)KhCGRT^MrP@A=Xr>gf_Nb9oA5)NRW/Emdn%?o6CU]ITZ(P@T+QO#H_#85lo(,!&f=_\A+G2rr<;hZCBnQ.F`78%>"KBO)7`Y=i8m[5IQ<!@S<9k3kKq*l7u@Zd-F@uj4:WN9i@c+-D,Tm'0J2E4\+?HQCH)B?aLPDD)B7.-^VtYK)U`j\A,e*]5Mk&m9/o7rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"a=klCjdGW@q3c(/J['Z2C`MU:gO3YD14-??dG[%@n^s#bo6G^miTmLVX4c0r4\^<EcmVa2bjh\*!"V99LW](>+!/.3D=+7/r^-!GT'O:1SBYr$DU[W)<oVi];Io>4,99c@[2X<7NgcpgPsU.dR8i_\rNg*T(qfcC_j#`8Nh/_'+HoG.QY"T:0fg*Brr?DTp2%<]WV/hKoab'pB3F800\p`t*H/4ZT<Ic"GoH%g<\%^'f%@t.rMbdUb@N'$a^lqME&`/gSt_r^-_6L7N6]A(pTCq?g$5`SfUZBTW92-:hRD1M@ps4*I77^J6@'*IZga2@HNQbqI<;gHf1enqa$bnDcLT+WZa!t8[jkQpB^)Lpl-uLCYX;+dQ=_WU&Zej/AgNgt:bGJg^O$SVXM*fkmrb8loD(h&(\f01]smQ"j&]CO*M;(LiJl/mHQ,&3m#ChQW3Z%WQ[$nrbe/&-4jBS?i\<#^\T..5X\B4@)D@(@6<Dhjq!\-p^+T=cm2j(2:7'X:ICm8+3fbdW]Q0;7bB7\0CkXc_EDpbFJjG@?j_Jl.#$f\&8.75H<>l%*OmRc;[W)"fb*qT&GD`9&?"\>PBgW1Q'/0_;Z7Y,Ri-Y45I)Gq\?NpFQpTIJBOSLEXH\ZihcU[#731d\+ik$FaD&Oro%bfbs]CQUT<Y'$0Z'^KV;smnDZSPRu,=mgS@Sd7&mu\^8lf.BUIaRK\jR/"mQeYgBXD%-')`oK7]XLr!VT7.oG83m;a/&LS-<?$H?=M/Z]S+NKQ;aI45T]lggGjT"AMnUY43LPlW3A>/1dONMR?SDFeJcjTnicm+R!Ulchu3H.BD!YCMYJjPrr=r=#Pj&GcWTZU8'5/aa`[kmGjfCMaPWD%5!llfkPLh1,TANcSuLG.$]pjFef$q[J#$M$P.n^1?XFUqa5ju%q/`n9<aQs*Heu)PfBt6654[N0q!,G]mk:/M4Bl^0.lITn<QWC>i)(<a/a\.ZCuOV6dq7O9Fi`&hbq-k[R97rXb!\qc-.VtsO+-d\r6b9GnJh:XFe(HiI(SW[\(eMr(Kj\$gGN"&AT1k_AS*FM8pZH1aklo,^CRq7]k(/^`%"fNZ8a@4,`\lbU/7H"c]VWL5!OG*fhh#WOF:u#ll6`L7+Kp]lK#+ekP!IrU*YP1L=tA7>.f$.#?*ZQJmhGOO]8DsPGF!kqj3Sc@l&5dRjUcJ<,,&q>>e$+&Rs,3)-LGrgt7-oc2IOq(&n9\+Wnjt@&V%3]09cSm7OIhnS,F"4njb<VXO76e1E2t2dA4>YbK!sM-bA+d#*4j5TeferrCD/^B;DPcps`()&<F&rrBftCrb8^nUY<DUrrj<*LtTkC*Q[fd[H.F&!L,Gm32If[cNDB14g_(N'DX&0<OW>_10MVp\t48IeRj^!!5BMT>C!XT==Pi'B/rk9Z,JIg\)U<?%KWYS"k.F?0T'&!5$L;Hn`iYpMOUq/2Xm41:7W-,mmMr`q)8C!LT'[^D-YTr*oG&M9]U[4S?X>6E>6!NK88N)XQU9EpcZHr#r)p*&<per_"C(_+=7j1j&Aj:J-Tk'oWc$[72*R@PA*4@d+""@"NZ-8L9[@*j$@;=(>gkGSV:t4o<r?[f6>l=2B@Tq6AQ/bU9[,cZ&"F;Y>c;YO^F0HW'Q,r5@Rap"a%@h!F8QfpLRf2Unp8I,)fL;EE<U,Rs.)YWnK+`SSo90=8GumgYPKaEO5sXP-\OGB1O4[oEVnP,Dh`k1d'lgS;p/JZBKJEl(?a9DuL"a&BEcom(4lF47a3C"a>[@6D]4C!GWa-#jT4rr<YW^O*9tB2dRb!5El^rr@hHat)Db_%-/*^QKZW]$G?^rn6`KDL3&Lg"`cADp@*,Q_E3H`f#:Wj/'T[D"^X:M/&$nO,@L`BOb`'Htkt\^<'a&J*$@nGN-YVp'5V[^<4Xdh>Q$VH!1[;PcrqJX)M!J.C369Rrm^($taE.>E>F4k,AtY@>tVmcn(uRC`'jlLVq\Bf2,DY<Af["41+TO(eH-DJ4UcDD]ldshn>O%Oae<2-fr*?DSCl$,M!f@\%7cLe&;OMft4DQBkZXpRR'(@:E*Y04Vh[KD@B61'2`<1eMOfD):V;T1i`T3_flVbol#?Qp3Wh:QXjM$#@MFO@uE"L1XJ]>4HBl,BksZIWMQK5i\K!s!@9U?*7.^6aofU,3!\37FTigYRS#X;Gj;9)!'F/;K4B%8+GNBbaCQNGj<&jFY3dn?,Q%9ue*dS:1tZ/uFkB[92F4qFX1V^rI'ejV7Li&E/ZD7T`[q8m*HR-C?nY>Naf%0`iB6#@\fJ`"WA2*4<K12EX#iXscXkk7:.ZZIeMPnsIForI)[9Q?WNbM_Dfdu)*Ng^Z'X)&tX2&K]Ll_3F&W*mp!6BBa!$?[aGobB''B7>dr%`3PrrBgFl>QAqQY,o??VtsCh;'$JDB)^%l)am1gmrM;`bp09?7j]%9=M2g%i,nonYMZmIiPQTmMaE`-fTnMp92L@pmJ_eI%TU>D9\-KWO?+T3M"'V*P'c^D7c4hfW$LY(.(.M&7R.JXUU?HQ]a=M8Be0e=4Q97e[Vg@ZbcY$HrTSBFHT2e`CfY_#dPre!0*[ZcQI;thUN\X^)_;C^tsaurr<s$1i7W+cKZF@P2+`,%L4Sr[g)<(V68YOK-@esZ:UVBq$`j(V.t&h3M]Z<Alt=MW!WOuq=3(sY>kF#lC8qhFLD[cDY<_ZXNfAVYuUV4[c+3;Vf:ato6EiRVJ`QG,<2;?>9e[h&:j"L!!g0(]Nl9oME2(Mg+$3n7RUr3;@K_V3A2U5S%Bcg^O*-0SfdHnhrT@c_`J)Pgg/+P)6K7])hG!CFS<18DYie4gq18aOMr5HmDLS?@q"dfe&A./b#RDsb=`Oh`q<%GEMAZs!0nYK45gFf^"luHSWD@t/[sCN@gUG!cEl:@><b!T=qo>IkOIjR7r%0A9U8b_W5h&KLkq$N6q(-=`lZug\_='dOeSn'Gq*MSBI&n\f9JU7A:O<IV7?BVhn>8VYQ"S//H/NarR4?Kq\("@Dn^\G3d;mdG43LX_*0HMC#u=bBV)Q6Z!DdgKc<fec=:+:Y,dWgVpk_)rrA-Fo)A]ccI:r8KcbJ]Vq\"%-8VlQG:bBS5mtpedksVCT\<PR:=@G3;/6nboX3FPCjg0/KRueI+^&R\PuZ6IYdq1#=<t<#qQGABYpWEA+'S:i=mW;\l.qh_le\l3X:66'ffLj)_"?8r]n<!e.B"YiP"DN^%.*EQ43K16cKriqNP>)[?gPM,fir6pHL#HYG)jYspo8]gg"Ub-RN-Jq(J53mQC/cSOFYPXRG".eM_c+oQ+]%44WQXa[':kjn0!`>UD?6`oM@^JfbF2^r1^n5rr=Td^LlXm*qc,`fGQ=!`pJ.KqjTV!)tSM2:5<I^B'V,_dmLdSfpK%H90V=7/C`Z;PW0.D<O#g(S,C"70)R$:Deu>lI?g/QFe+4VK:q$UAN,q?h+LsH[qEh4@ZhT&*`jPM7L=,,Q8&LqW!9tuApc5a_sR/rHsJhLeOph)??rEt+tc[m/%Ae$&(BFLfnZo5mJd1D]nN$5dTolD6`Kh37e_AT`V(ZXp0J57\\9t.Aa<dFB<^u%%8!CbUD[-!P,+6jWbCLOC3ed0)5C8me^P.am,#)$S]S+F7p#D-gS*I#$[Q:C_esn3P%pBJo!mp0MIQdQ;,9hf"33MQ,]Z7'ElT@S,:`a^HFc^`l=m3^i`YNG&B?V'I4g2*@T8(%Mh23WqtId@pL!hCg\F&$/F@mn&P)D9@Un^NH"lu\eF)U*bSDWFfp84]UO6mKjgh1A2.3*-A85Y\Mm52fRPWjjSfd(SQc`=h1%a;V[AbW$B86_Cm+<dBF:-79+f(TKm@D:eGgIB34_2lH0#ZP0*1^NGh:\'6&?.c^*EX`)i211aP2GT1p[<;dn2'lIr$),D]0e6ZINnEU+0Xuh9QY!^p\%@o-+eLcI=6`1P]:ShpUKLho5ipU-^EeG),0\TRTX0FJsJ<=/S"e\'n-\kAb]WAZ5=[E]kNM\FZIC<?-TtHC9)O_p>%rH=m=Bq\oSP8jQ3)5Q:?+tTkJ*^OkHI[)46[i)fO_T0f3"T7"EBt1sB-,M7!4DP=Sj!Jo29*5s,2:hTfJ;p!1GAm>JRP_mHjqg[#unhcMr<[CiqCn&/(9p<Mg9jPac&nQDAO7N(EjW9PRE<RBBK_TW#b4*YT/WRs::4gI#lh8=-tT=T#b=C&tU[gkTk.tu5WX(*ka:h4S=OipI!9embiPh=WH&.c6Qi.e*H.I&+;GU>n?=J\jaaG_[mlG/,WHhY3f\**Z7&,AA,*Rg;/=Bm5prj'T*W[+NuAo'Zs=n]9KaXiSlEDP4+7t'fZVd4UKB?AJr;uug./afh;:KR,Ugf`A/`]"djRjsT0B::uo[<jGtK#d2$Etndpc+gi2CC9@2=_hTSJ-WFqh.*kSOebCJVcG(!TrYhAF*fR/3Ma.\m!\cahtT53!"&/o<o3m9mb[@!Rcp8rlgB2!,>Ya0B=W5XGHnV@goP79.?7>F@HusIli"Sg8EPCC6AGqE?Oj@dR0OeWkJeV*+7Nq&DX55a(L2)o?@/t3%V<Lqm`+%-:#hb]e<lgL^;ON],c'.=N2!,-U99h%%9.Y6M%jssh\!0&mM9?5V5#eG8'H*5;S;QD[C%3`&>T7*[42A&fAF9jO8LT%rl>c4O8^a82u`W%de@$3n>6`n,n>\0!6'\Jrr@JUq=^-ATD5_P^[5]!pCaC]^#A`Brr<@0r`+FmIN*YXq'3ZErr=3V\"@Yf9).#m4c+aES\gc]SY"]oL"#ohH#D@.UTE1;/]!:?b%EMo0W1\f;o8`H;ADG+nbc_m7/m5iH]-pN`_PXOP^U.Rj6U*&l$`R3]CB!P`*,=9Q/'!`Y;ZC?g_EIX;1Yjm:dJBNaiM=;C=o;<1ot+NkH$mRD9D3G,/.Wj'%LJ?.VD<;[)DO]9,+\>N,7bsh!c-]q"O6(8c1dI3UoVt5?El:plX"::StQ_eVTL6_h23K95s=C_F+%]S)2oGEE?a2L@`VX:]"!gAF$7kJcHsMUe7R=1ZQNq%Ya\SZ,^/JJ*U>E>]#<I(:te,/619_o@Xk>_RVhQ\MEh\%E#_3.1bgAe[8>g;#qY_@g\kr`aU[4C4EY2;FO4foe9%FaO[f1V/k#,p>YF1"-9@pHe-7:(9RT:DR/Ijr*TH)rrCu"q,QjMrrD"MTCtV-;?$WSA[-aZchFoU+)ClVa1Fe?!,JTarP?SPpTQILFoMHY>X+Lob27gn$[teC<?K:C%K"nP*VuP93s-;+]64The'@B@`O70MRC]f!a_a/k?PQ@uX.>*%Nk1fAPhI7G*l@pWLYp2-i88p0?MN:2>LK.Q.<f-,o`i:hqmM7\fJ-4\17?A+&sBjS3mq'e10Fr$C?d*SA#H>`&/ua!EA2fd[rOHU<II3bM5mLgVk%=tdi6CSC<gq.Cs!&K5Y&S9g=P;m^u'tjbPSCfl@4W',II;kC"Lj5=)KIl"!NudHdaE7PK-=^h`L"@<os(9n]4TS<3&^g)X<$OMH5V*@Z&5[PN/:SDianu'/j(]+-4*JJEs9?<7'0-,fbeRr:]3SVccn)rR&24'fc`B\E`>0Gnq0sWK^>VP_;OKVq?ue_rEGXk*m5['eDb)qDC*mYe?K>Ub+.!/o@PV%L%X&H].KRi,?W-jt"mp]`I]1B4\Qm=AeO'+(8+,E8/-Km$b<;4*#s2N5X;;cI9npEfCJAH\/5#'.Jd]K$$]b(d:`C<p=Oi4`:R(GK/IBh"r:fEoQh8=PS)Yc0_Nbc=,rm<)aS[,ClnhY%ZgmbK^N.:E(&PJj?eJHp%[SOATP_BrT%M0L_9uO-23>Vd)ot^iRK^n(u!DMn^-UJ)SF7Fk=X)K>:Q*I\H&.DG(YKYW49.B62YaW,gSh[cX`QUH>t91)Z%'9:4"(a;T>pQ!>^\;uj5fmZd%`Nh'+TqHKt>2-<&VfT]CC)f$0kQ,r+QB^'='faQ\799dV!e`:KRjDo<$Bk1ZT"WRLFN-tj^/rg8G,Vd`r.kF6:neDT#+hP9tCU9Y4p[<2?rr<DPq+\)>-i$F(hOiS*bWb(Drr=X[`lRG9K7V.#VegBj/^&q:D:@-17*cjY8$aX&AMaro)8.Y4/!"i^[o675ceH,+T2p=Bh0jR9U;pki2h17DZ`s.p._$b$NGoc:G5TX'jecWm*B)_;gkI5R;g:&4e;Q[tJrK&dN&5lrH=p6@>a2JA6B,KQa!0$T4hp.+LfjWoQf#KGJ+udb`(9kIrr=JI!/d79+c?78^3b?F^WBg(njLi*<,Q%28mTnsLF5dhH<d?(lTah:)PT-rUmTRI#.Oj>q*4e*:QD'jqk?"I>n>TUNl&WAFDj<U@]5VNfrG<u'ch*Bl@QV[ZG2(QV*eirU*5&&JEO3-T>L<Q2Bo_EWJg6.r"CA^V*MrfdD;Ler"n8(h:K7qp8n#WIeW;[p[<*;W+`JY<LDR,*A0]"OJSnLYFr%rMQViJMQS=YWfFBNFHR!">*pRGOuHE37Nd9n]G4DQe[3j@Fd2AqdFH&b/R9Z%;9qs:9g!8,o^rbfY8#>X':!ZI<KrS6^%=Qt<IeXg6R`"e#dFLR#UA6?l](HWrXtXsT0>MYr1@FrF^J\O2Ffc-4aq0bI"(EZZaMGt6D]<-;aI^u-3JR2rM^;KRS4tdaope,!0U&:G5(PJra%aq].:@D)\[Mi?"Qu[C@YJeV;;;lm<XZ#LbCV<g<AQ#-78m;*)klBU8;15&1!l]>4/rTos6L7RX-l4=ji1W'IAgiXA4qSA,Hldrr<RYpL$5/YPC8-&,oW:]'K>Cop0Y0^%^q9LMuXQbhjAoEURc5\aXjtk/gHZB9OQA(>?W8iiaP-M\D)j,t*S/9I+<3.W#)+IkKW:*sU=[=4"Q0-][!:Y8p>oh##]EmVKo*gtB>G*Drr8a3+(?&`I_oOjt$g7mTR5ZT>(I3CG@kKA-*K^#V0,G=cCCP>k1+P>*5OC'mTS#b_/3<rW/lIeMmQT?8\B^IS4SllY@'f0*cVE??WV5:+r"D<&=0]-Dc9Yk\Xoc_'WLN0%l"Q?oHD:bG(P@p!FWC&X6KpG];U!12<VhQcl0]7+#OrKW_ipR_,\h6m-<EmMD-<IR!3VgHVLgeS^?XNJe=U_RojU,WiUrJQ$jRr%'J1=KjnVfg)11sISkH'qda)p1QBjsARW"-7p)H971ep.'OR%r-3!An,R34`T9UDn\9)YV?i[)XKUf=(HJ,fZJ%/f8ZZN@csT0@d5JJ3JrWUU7PKMJXAQ9Y+UD9fXhN-p9.hA^9?D#F(BH4A8L)JYd\L6T!GC=4au)@(eX2/Sth%SL0,s>Au`g\AOW%(8Ra4g(bc3L`Dn`PPgqU5$=4(<-Dm>$17!Z>g*m^kONL0M(C&pW]p8TtJR?TYicjtBl]'rT*t^C`CLM%Mq7WE)[k9a$^%Z^HW3"f.K#DN7Xc"F:1AQgm3)1h+9co*;=LB;h3gc'8r)EH2d!lFHG2h/(+*P@kC@.SB\XReTW:G;-E,M(Y1TcSUiJgNRRu8GPWi(pQIP)?)UF^Uef"!'8iNQG>$kh$!+_Y;QD`ipK9//198FNQ[EX%aJ%R'^BEW0?QaOBs'Ikn^]HQ2$q8^pZ4+iVl<?b6*CF(K[dZ0SZ^l8(edVqb8h`h.'c=YWm4$oF12EHsU&8pY`]iK5S@`'M_8T?@&iYK\'?hEB!3P/5ejL7]C?Qa*l>gI$6d;,Pf2=t"G*;)GdWb4IOV*-Cc5-u3FmL(oM(=BELMB"!F%4XZi8OG^.`545"3Jo[kBTuu4PFH-BE@K<XmO+-h1(dIddkOP%;bMfMrV+8]-g;MpKerq2_]+a6G>OC'W6dhU8Jk_T>[V"NlV_HOM74E6klf1)-b)D$!)?0[Cr:gX06QK1;B()l%!'uNr;poO]iS/JaLlMJ^*t1rRn9]429*pUYRUE1PBKo.D.a";r[_j=ar(<e^=^mu5ZiS2L`>hc(j7'tD^$HX,_rG)mr']eoU!Ol#]%[>:rB[\3Y(ph0]tE#)kpW/QOfHUdCMNECMVOeE23uDH/#B2EXfe\'X/VOSdR_F7[e/HNFa(m_]%c%8dp"UCY^6%Z7o^TDD;l"0[.MUK=[#0`VP:CA;d5I-=4^MQaXm*B;pA/rN`k2![B0lA*\s$2.L6ZUQ4QH(--.!lZP(JbfpR[BP"@k9m%A`0r_[#+rYk^1mOstk"4hgSCNo5pj*M.IfmBVCfc0O(j)YntUY)&_[.ff,Rq$F#Z5\9)fa[2Rkc,kB>'QL-36Y6bNS-mLkg/A`nTX#[H$1j^cDT>uHl$SlV&o&thO2OBjgqd?=W2/I]C?j+EMYi409rTVA'J?@_:))4#Z/Hq@neAj93si!iUM13XK<4!a'2ZPX[J.2dOU33d\]hcOkCOMZ%Kh-qKqtOI,Y'%?NpH0R&=G:?Yb%ilTN/"2m5nbA]49@7h+,jo4:k[W+O>k\Km35*OPFjRN/(B[5(=RTd4$@:%Xp%pW;=Sp$m7g#4^?8o=d+`?ZYXQ\"e6YV-/i8>H;U05tr\(/B]<gGRU\X/TEcV<UV]RYg`7)hm3,l&"K5[V^"t.9h;j'AY*ReNFGNqM:=J_IXV+LR!Ulchu3H.BC(-0(%>S5^34BYk!QO;cZ%8/[,$!Zfp9nOWOjC(<oIe/\%^IdB5T.Cf_'OS[Z*>ui+a;Z<23HMNjJi+rK=k!r4]ltm/I'MR?*b<*L2tfn(dSJI_R8AADUOjV].Kgk/'d#Et4[KUFR\KKN)EXA5KYk7`SE[\b<iLfu(XnP<0dHN0LFh4N;Z(P;I_94qd!$F>iu8n)!EKg!o`q!:Se(f2<oC'jV6ReNk3m/O^qK:t8NAf#![a4>/94FX3(!;:S.>Giae58DFDI#RB2nWcb>=W24^0,cQB!GES8;Bkh-\UM/?Fl<nl"VO[fp,Xtj)Ylk[-U+Q`4>S4dpo>^u9KDn(5m_=2NIk,Gl?csN%fsi\j]m64%(uF,kD1&ehLH4!+f7#nY]4Y%(kjU?+c+LAcR;o9##2uQj[,s61\1S(fYtOk]n7Ud:_H_Q``Var63F/OOfN#FBrR2fdG&CU8e[8V)%%TR2iKJ9BZ7eTgM_@&$LnK/][HoHfL"k7^^6K"_J`'^tNM[4KdqUTA$"GL"Rg2/RIeG&bi:n>_QhcM\]H%%D^LL;_rj&?VQnH4L`FHA@in>7g*S\%OZP_J(>)PJMZ8er!1m):W"`6?$bS!H]*EWl$XSttB=6Vr:4`)!6GLkBEh4#a`Eanc[2$G%>0t424F81&tN?&IV2H'i`6]d#MO"F9D.``@bR?`=.hL*$Z+.T,@=XZu9i`)9paWsP*N&%F=NKo3_aSPiG^O%$5CT-q;5kQ4$oP[`;f55Z&:[B*uep@W%[8hA:LtWdm"[faWr=%@!K[i(&SQ$H=F@'`BR:W@sQW19&aR$iFl^klFSPRl7-`cqf/TA<PY;W6[ASk+3SpI/mgY6?W98CI6a]V[jeTJ4;6UlZ!k'*8,]?&4_8Xi@I%2C``,r0`0l!]I@'Y/&m6@q%"9M7)IUQS25T76K'42:S[Hl)Sfo/E_aIeIDWmMauI4Zehm4LW>gGTOr`RoYE<];[_'S"!t\R+hFa4c\:/KkW'50\!4A4Nh"u"YAY(!0>f>m,-ptnTVHk8*k/[44e%Tl?gRSlS_alg"eWijgqZQd8]f<?1V97ni/a$<f[cX&61rT@8dT/VO.W8eIW&ST!)thla!nnWeu!\)HNbLAkD-D"&.iJMoQd<DdmO#%EA^7IeI`07JpucT9fFE])!B,O'$7JhWdi$:D=b'B(!65V5'J_Ba"&G4DfK\oN@`u\1oi`9gt8d<79hUB2L6CdDuCl%GX*&e\1t_f@fSmmTks-llCYf@?)nQgs883Pk$ph-)Ic=Whu)O,DaN>9E^U1Zu\N79.1;bLu9@mQ.-Ln.VU<sl/Se@PQ:5G/e*fjP_'bn:EbsW#EXB2hRpBPpdh%JT6uCST5%te?1l2JFDHdZZaNYZ`?*_i%(.f:.E:K&)j`XNa28'kZ)Zk8Wuj`g$QVrfLogUVK_kTRC:qcX*080(SVtd.9$OuV]4DW_Bj#%:TjaDE3NT'",]QdE!EW9!g0K8>W8/*BB=@J(@VhP@-OgbI[Z=3JTA5;oAH7kX-f;Vj&&=7eKD`4Y!1)4'PHt0BoQ=1n[qES=2WXhG^:2,OhqR&`*`/d)$uS0%mTrVm[iqkE_G8arD%*faJ?lM[!$&2"J'0(q\&1AEqpV@P_KmiNQQ'"]Q`rDDkM0:FF8l4JY0luc<.DkB%tqj@;Q(@3Tq\B/PLCa1YkIsKg/om7^3k>H>*=i!VJ2lqD%6?,Fh*MdIl^P9oC(Pf+$]c*PZP\Nk&ZmT/Eb50ZeRYB!%$,3h9h)3P@484IV^m];"#=(-"_TeR!*@o%2MO8Vq]^t>+eF6"<e$Zf2MUQra0"KIViUR:/g4Cb004qcFp!u:i0o$HcpPK<MHAG;r]>_WAJsC.um6N4Lg1SR7!4e6JGAO>h7TGmKTS:V)uuPX!5DYH(iY4-sR>tTPKq8fAF9pLU3uIrrCriep].F7=5ohI/a25q4-LAcZ$kp%W%G@/LLJtDTL^ui6?FlW[kY^-Qq&>B:ELeS$-ifdKTM2.4]\n$%RM9Y(QOuHsObiZ@A?CRk$-6aGDE&2=J-rH#BP!R[gOuWp<j?rp%3smD("$23L30gK@eW7AKstYV+VHY&!pM[-f]'RCrNEZsDpU,9IE1(GIQc:\";YpTl+8hr0X9+.[gQ?.&ZP/,Fa2pE*Yjeh1!e(S=mr/>h7K`Cj,u:UrB,l,$J1pI<H`Pgji^6C%>gb$(D?dR7?Z,GP[^+?haVO311J<Rs>+f9eb@g!pfF>m1^;<Dut-nqdMAd:RRiEu@hBSD1TAC$K5gC8e-TS&ZbI@ZJTDjKVhb`A:BPWFMrYSO$T@Oh`)2'Sod\U]?OV82`[1mXj_Ri?<]nQ%ib''=n*OmB*X_Xu3VV-O8Ore_6nH'1YagR6J:*f@IhNJHEMj9gqL5D]p58<-*Q+Hp.cIOep+\r^C77R6%*A;7:ImY=?#HlAVer:Kt2AC8td&7%cC.9eDT8aT23-T!R1CYcj:O2f"dY[!;TN**JtI+C"D.p[<:Gn,rJQHj'FO:Uotf&is1(G4j^:=SD1Rm#B3#pNHDjH^=sPFXB\"'ffRIR)i.a0eH`u"OBYtVP'`NBG*gpUeopo^Vo$kmI<R&4(^"W5P;;9]9dPJ;\-D4Q>:I-%F_n0=NKcAlPCX#IWH`89okr)FHK2FoIs0.nj]e'=C9dC$at$,%;h'"nOk?FQ?adBBr"!]Be:P`<O`7U'O6&Lqq9Ng:5.r9P?h>&qFeU"gM-B5<,[(BW4,79hO(fn\4iE7oat6Oe;3!UoJoTNI6;X/<OC1A=[c='9a%`DMVuX#O&^>CG&1FX=n^.b^i01,\`o9H3OUjm%!D@!e:qZ%Br20iAYlQ'X,/1#WJ.+GVO\JnSK1^_[:L@1I6=m%YX_Vd0[h:&W+99A+TDF<b.nQWLa(lOIeU#%Hi=Xjr0)([N5&k8[RY6&]oRf>Xj1Oe``(qnkf3;8'+9^RA[6IS4i*AID_->aK,[SO;,KN*<Z4tP):ccl<"<"*"oeQS$s#kA]Q1VsY]/?,),!nlal+b^IlTs(EL>H#FnN.b\SC:HNfo![MC&tZ/m'ZD.:U,JY_R\9g1]k8_c%O'$bU=^._pkSVC_(]WhDp.^B<B,d4bDC9<Ru;GPSQE!&=K;kfb&j46*3^l7U'A^:QZ_F_)=!BD1N19r5GtK*POdR&mI8:L*c5VQ*$9;`+*gP`mrP1kS_,Vu.pkBPlP&c_$UGPL]HNW]m$/I=8adL<i]h2&+]f]@\.MJBrB+18:fo;,rdFWOBQH:#fr`Q<.78%$&ZU8+iAa531$id@j_\WMb=X8Q:SI^,]n(ZP)?oBaq4:2E1C!ImEG]l)q#]#M,BVVYe-3G+WLAB)KWV+*VNqm=qC]mG-M.ROX[gk(^0%(-9ZfFZ`Y\Pqa-@BWC$KU'W'5394AQ3u>%X+)Yns_:Li@Zu?uM@d^63a)2?g\ZsZ[9Kl4<aHK'TV5ZsaW2-DL-`<LlbtV%R9,"+WX9P,n>&)c:BklRdU7PrD/2F/GFgrXRr`"D6qLU=[p[<Fan"9AG#P*/rgRBL]_;Ti6oq"(UB9j!rZ+IX9p<FdCNrC#7h1rB3p?OE2E1g1l.L9#ohW3-lkl1X9oRAL\_4.RM@kk[?ZDd'LBd2<$?aG4A$',M=hE!)EIKO`UN+5k<R^ur.*;sc/S#geGZ884V;l^jnTrYhArX*:uBeB=r++Es!5KiBg4+%/0=LEL>5OgD*1)jSLDb[tfe_XSq](aM>h]'m]mHCi4H"=hB9qTX/@'LR?P/kC#_i17]N`dMpE5b*JYMr@KmJ*=CP+sgukUsQL_="GIM+e]FhKeM9\@4Z_bi08@T"T.7ad1"@MoX6ag.8&Rk\4a.hDHi$JaGm[gA"sfA:/5CNbM<[/FlLdd`?ulBdMQ/Y+Q5g$esRPcM:-2U:q$5b5"WX^G:05XS34hn(rf=p$O302bl<;2s/c4iTPU"Yr<2-m+CUs`no$OpAS@&qpTXfe4A+ho!Ll+#c'$j.Z%Hor4]ltr/L.t](m5u)_3S4m=)+2g,'a%3CUTi<YC<29sOGA?[Ze0W5<"![$Zf'UthB\R@MS2R8Ln@W>$cL+gu@c9T:Z*[[lK]UKA;'7@n2C"[)6P&2D2iNM]hbj;\%\qq[Wd3hG7-qqYoW#P*cI0Cb7g05pdYl0bn53"M2.l&tF-[q'Cqm`=:RlqUm!\i78BLY*5;m0q9dZYX)P/%TGXGa=ea-)EofKHt2+Z<,QU!6a]fmn*G6ln=VeH*XaNT'>V\c1bSX[hVs7h-!niKhl5sBX`HXGW,7c.oV,AMYufk.L7._!f[fV:-GgYD4EdS.92b3Vf],DC6kGi4O1$CVA%6C:?FFa+MS#>a1ls^rUJ<!GOeP,4$TB"Et_QFlOMn,4+j_\mM:^2P/1/[2R_ehc&BkD;e@`V1jMc*eJ*)1XOQg]/7dR=+(e`b3m2115?mT*VsF`so"--O2U5N?m]:7_I:b++]*4\"P)CPZ%S%Tu4`qI&;p)mI'T""IE'a3b=\/dF/O^CHQ`$j;i0a[&(61g5i&VFl83]phn(u6C^ouk=nN6P\ou?OeO,08A26aMar8,cP>F-A"hYXp5<*!n'_.#=W<lL3X)19DG*%)DPVN8V.XBL^oSP2TZr[N:TkWad54)o($O1SaF[<Bj\gs*I;<-^XQ\2R*h):ldenA_=dc,GdcePjNd58OZOd?ZknCL!$1iNQG>$kh$!+_Y;QD`ipK9//198FNQ[EX%aJ%R'^CVrhp5O,2];)m(RcTB56-m=+$JGfn/!HZ!YiR9V*)fpQT>L,tj-ako0i+bec79!Y]NU0=b*Y(A^eU0+EnBSMRd^E`_,r-nH[ZJjG#+SsChfU*!qM/.(Y=$:^_4gus(=OLsOZaqiUGhp>hWMiorBDYl"P,/agAWedGhFt'k)4H(SAEb>=M+MCRC.TUZ?s5"SA<nEVcB9jV^V>,hGX(.-^WI$+d)np5b*o=B>pWY.F8&uUE32n+]Sh_)de2ESiqjQmJh%2u;H62c=g#cEUAk4Hm=-d&nj9nE]r.\A:Jc#Yp0KRc9MFfiKZaSGLG/A+WR;'P'57O='66sFX7j>G?g^=?ha+;K2ZEbUE<(?8Z+p)2pUg(mBCKj!ht$^1'@D:BHErU2qV$A6=1bb_H@5_Wh%dKFgQBNcYrOD\S'Q"(k2=NqZPE95,pY,3;5%HsN\j^p'h,;'EVRAt^Cn-QoliZ;>()+2--K)o.risJZan5KSpmi&L4Z`jPKIc*Sm*RFOfG4s;o[&0km7tPWiE(QShC\:_UACS17V9AQSPiOP!\`FWjIfW]=TjK!VQA;pTP%)5Eo6cIZO<0fK[S-Y'SE5i]^96IS6n#gW+Y@G"2DQ@Ib/hT0M-")'IV#/G2cfTNm0*`j!l8e,:L!lmV3"!9NnDGH?6dmba?m5@nErrTCl[2f4$'gp?H$eR+?;WS[4A[hH`hlS>eSBa%b3W/_#nIq%9n;f/$f-<b6@'^iLML7+m*cSI'iK6^"ESA`"R^iAi"cdu`Nmagd>\_m?a^1aCcm&nUd40,Q/L,tp7Y8^?#g=t'[?af\4'H%eq@'6/kWtUYb24>=Q@V-%-(^'-VmnKR0lj]Mt2BM(ZP.,:HD7,qg4,/b6RHWb5_<t!&<Z<Vb'kJqY<Dpq%"`0"#7`uthWCS-RDc=Oo9G:@K$Umo,ONO5]/KC^!E#D2X-!9^u*rYGrr!!(&T+F5QDU@;<(ZGq@c>4N1ft3Fc]/PEbDgh'ppF\flLrM=oL8G<kj-e+jcpnfQ'f!SI)]qo[oBa'd;>=#YletUqh4%d3f$qh/9K)Ugd:`1g5#6<=/^l"P:EMoCe?_S@\?\+4WDP*HWCY]BO!J)e?5ip'^dU(>\/kq@,ZuE(1p^q>>p+bM\R//)p[;i]SKH%qi]$HNlDd%?q/t3>rlNo>9Ve*DTpLBXQ.nCT@V=i$'XMBEDXuQ4Gl6tF9#qS[Y*_iR)$GgSX/DL579?+G?P'q9I)ss)rH[rA@+&sU2DVi6]6b\9AUY;5m;/kd#UIK.c,YX=Urq_(U*Wg<KLjV#C5B808uSD(bMb1Dg0mX<VHSf'[D]nM3FQqZ=t*:KTd/hUB)I;MhU%n<YPDH$:&\35)mK25idM8]@B_ng].s3+G<Y`W\Lm'-WlsD+n_l4g8Prb5&^\qSdAn9"`YmW&/Be0L9)LmJ2pd$Y[_D4a4UI&%R-[lKcdH\o^tY?!eo"*jne;r&`_nBNeO^BOe&+iudYJ8eP/R2`iPFpJDVg+m0rZWK7&qlQBj+OgX.a?(J,jrjYfA-hPJ<H->Nb)io.$j+]&rfO8%>KV_Ulc>2[hbPI`TLfQOf/DWfFhd_1I*s9hc$p#staMA0G.MJZH1XZ6m'VB`(0;I'BOETi'E!8%YbkoXgVnVW#_=[3a[/1a=)6]]Rp`:bcmuiJ'1N8-"4@j'&=9eQu`+[[mr76Tf'YnGql-Y:GE&lFIaP%J4p2+((k`m='K\h6;5ihUJ.qn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAn)"$3hYlp"rU8VAmnk2%=KX$KErQ+E4u#F\HhXkXrr<'9b3F7l=Y?iA4fd?UMVQ8K+mcQM3=Htqm`pfd`a_^V9./Q9OK4_jM'(L:F"DY5rrBomkW7`InUmWHm(M#a[[&4$jqj\mf\M%/lo]ts6iA(p723.Sbl7ZSon>7<(Y]fLcBWM_X]7JA@d"^'K$lP!*\-<NJNntmX\DG/;\o76NYs.DUC+HE3f1W3hnA@er3,%o;h$A@jkie?13ni0eu/9tnL>!URG9b_/[:qk?m=ee^Q/hfc>BY#iSE/R]pQ"D/997ee)dlsdS0$@<Re#TT%a/S`JKB/B>bX+27X]m$87=n!>ZIrQc7E^1=c/eqP.c%3k$PlU<Ds34@Vf?N$OV8`Eumc4KQr47*;5n>4(7#!J:t?]OMJ3&\F]qf``'N)<4e`;;$4;1B;[1qYU#ncg9$UGPCQPV16@uZ$f!*r`VH,:#.noZ8Mp<:RqAt4U,Q"qQ"FUp3ro']`mtA3a?6.g>/=AdMV6h4P8mJV38AEeItA.0gmH9=e9:TDuLG26eAaG!"1j)*m*47bA#n$jUTJ"P9[@+-53Vhdq+lG409X"W5@`0)m!`;ERI^sni]n&bpl@+EJesC)G#LPcWXAb;@9t7+HQ<:3EN,UNiC5#Q9r`(QE#p2'tM&QD?..)*qs]iamu'?;L^2Mjo5<RZEkG9_6fm1UXLr7bhhR<R/N_go!iepR))-qS(cMce\3c*%$a3\1pi?V1/UC!WmjWFULSes_Ajjd_1.<'D6/In/[sa'DR`A(:H=0*gY%J^HL8iu93%1lct@Pc(+-J'XCQo6NG:r&_IisJ<:,5RgUL)o42`k\JiAiMMFLq[fXtuFb)Aj?#%0Zpp[<8km,\%lp[<S*msb$"IeW;[p[<D/J&8Fo*BRX+_S-F[r7C>-rn<t_,4"T7fc*khIQZu"^tKOQ;"h:Yr/*KE^taDe]$GA*p\%)WG5QKWO)3BG;;t%p853)UW/,2,r;1IsG?=A$ipBghD>i3+*gTNs8,_,VllMnU>ISP$;THNqDW!C!ZSUFl.ka9$lS1mBPp2\*;%5A_Tm4fQ)3=q@OHcl:_mWaG[Q4EjpnO^[MKkKqOn[S-P9E]e1FA%61'6^Jc,[SGhkpeY(\fU-qmZJVqn)bZ+8cB=-ea%RrX8F^Igc5fp)i?[_Z%TrpAQ/fnS-D8\%SrLT>Q/5j8T+3I?3lYZ)%@6r%l1e2u%<C5I(20p:o\'A+mK]?9d37gJ8UY18^$=j3sbqkg=5c/2ZV?`g_B.`P)0'Vn([[HhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L]gi#%iD<Woc-,O)JtM7BZ9Ob,?[#3k6b2@D1%5FDnK#M;T&$99@?&*ahCZ/4rrAfUO(iKc`Vl99X!rdA)UojTWD"W8LA.n/o=r<6Ckd#jfD7Ma?SqJCAAMF$no^W#S^s2-`2CcG!tNj!C/)WcS[6lFMh''S&)3OFLdk!mdf%6h6i!5(C"Ok2dUE.+I/F^fWm)p\>"#A$-)&nqq!2VYU4"r))V7^YqYU$#@(oiQ5Ft;F9kC:gR(mHe2uFK/YI?se/GK#pG[8ukrR)A+UiU_)dDUF%fpJu%nkg-b=LUJ4m*d'm2j'm_<MV8H`;]fnl2'PV&"%_<q1[i-2>C!cm&B84DL.fI!1&mJ:&BI]pL`0Rqa[M,j@nE+m?Xh'1Gb3P5KP8@1p/X"4.S)arr=He6BVioa#,Ru67(*!YEAJ7hnAH+rr<A"Mtpr#n."@U>LhKo-Oa55VE^32*q%!TE.9&^]2^;%crKdg(Mm]-(>$N6C,X_$[bX+[^:+O]4M%WBjG$OWaFD<C4qpHU4eqdh<Os\jO)iI8`EClY(p%(_eShjIe<M!1)hc;p0Q\/bE5<J&%Q:Jf)]^)5'"q\U@Oc1Ihua@'$(6=2rUX$h-#oon#,*8SNDRZ6(e,ninlo21He=D8^O'2^pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV2(L^O,^iHhY:%pV6a]~>endstream
|
41 |
+
endobj
|
42 |
+
% 'F2': class PDFType1Font
|
43 |
+
4 0 obj
|
44 |
+
% Font Helvetica-Bold
|
45 |
+
<< /BaseFont /Helvetica-Bold
|
46 |
+
/Encoding /WinAnsiEncoding
|
47 |
+
/Name /F2
|
48 |
+
/Subtype /Type1
|
49 |
+
/Type /Font >>
|
50 |
+
endobj
|
51 |
+
% 'FormXob.ccf2ce60accb2f71ebb323971f816d0f': class PDFImageXObject
|
52 |
+
5 0 obj
|
53 |
+
<< /BitsPerComponent 8
|
54 |
+
/ColorSpace /DeviceRGB
|
55 |
+
/Filter [ /ASCII85Decode
|
56 |
+
/FlateDecode ]
|
57 |
+
/Height 76
|
58 |
+
/Length 8199
|
59 |
+
/Subtype /Image
|
60 |
+
/Type /XObject
|
61 |
+
/Width 214 >>
|
62 |
+
stream
|
63 |
+
Gb"/l>>S@%QH()FWZP,%aWr[5e4cJ1Be!,.a?q_J1=Jga8_[`$e!90>/sGRB6<@6g;HD5cFAct&i@60`gHgWS:t-=Z_17@Yn4I@^6kP6"5s`EsTFjWR"6#a,GEsj?qjd9JTr:Q5?F>\Ph`:S>p0Rd4/pm&.LdiCFEob<(,=db63HF3%OX!AV*'&'#aH7];NZ:'"jN*H.7ueQLEob<(,=db63HF3%OX!AV*'&'#aH7];NZ:'"jN*H.7ueQLEob<h&!]n^3E*8.DhX6qm+f-ogU?fSmJ\:3"'7E_*]hm'26)B`p0:a,Z?O.=W[6tSLS`eVQ2@&R[9-:QN1YEgT7PNnmVe5(e4fh'aFO)no=LS729gVVZ"nA\Bi<)W8T1LC:!;3h\>AUef>TF]2c^pJecQT1'lRq+)B,nNVW$b']_-WKAoFI[D3<DKXo@gh`.tCkVl+]Fm=qgY>.\YmWH`hGib1O,I.cc4r.;snNpki<]=Oko[(icH^V<#'7bcYN[Vans>LFq%;cRI3J=lpt[R09ImLH<0L,Bo(lg=)IqFFg.ZXtM]Us)M-2Ue;uns@SRZROY\f4WW:FeJD]p[[bpTD[1<adfo7CiF?H!E!SlH2ccZ)*e,Ro_Y5J&XNFT5<d4n=X!SA3LTp;kudq3SsoAk)qgQ1gWWp4f_bI0TCVWHINC$:LX`_af-(1g5+MAtUT_o?a`FFD-/JIB%'>V,]"h7;fQ$>BTA,\s=T5'CVik!$qH;qEppV'.Gkbb>IdYQQBoBa57>pndc&m8CX3&Q-FruQ*:t1=+q!5S<+rC5Ni]8YS4YK%7USB&/fgUf8:RaORMmTq$-6f"%kKg=a/54C2YZg,Vm#OA;=&]<+bkrk;5U+lpmU/sl@'p]5CfH[_QA3!"8"d+pq=5CZB7dp%R@.Y25EB3oh`Ka.)r^<Cq>8Nl1kleq>C%EN::-Ynp]$dO.E[hQop=nR4Ibofs"u>N<^e-qPe9K>+orNKCt4@d'$4$'1SX./%FLgf@1W/3gOH,biP>h7>ekmZ!'FY>$U?K8Xdj=!cWE()G3UP\Pbq%AAoS4F_4*Fc-VhhE-Ik`WKI*'#jraLiN"`e?"ZeY[PaM#qCXsUE^aA(!+sf)]TqnQ^E=GH43Eh(K6_Go-8sP[.O!knrbatF98>I@;M'A\([*Ect&BGh7K5u538FX"_ZD<.Ga@"59['Lccob#?4DHb[+Sl*7b8AqO.qpL`gB+uOC).?+A+oV4qnuBSPp+\TJJHCQ4mjtoqe%bq,KNWGG/+U9+^h8j.+D-=irW+\Q(jHAt0mr+^FS/!Bl3'=i9OD(Lkg\kBmZV9:n;)oG30CLsnD&`@AoS301h<l6SOp0>RgArbPiWE<Rk3%IOdE@3loKCNeG7R!(P+M$"^V'[c_X1-9T9c+CAgN<*(LU?>Q>_kT:_=b9n]fkd3>B=%ZE4*_4*u#&m1l-I)?E#E^0Hf>,bZ2-peRd2f59=9Opn9/kTsOQ7Z.:>=9T>TG?2O_iG+[1LnsfF7nfg.tO<b6k_N:rM1]6#F.scU'_Gd,=>[911eW$Msi=2s4J>^0U5X8H+ch?RbLSeB/XBH&<+k:[_q)05Ob?Qf/+b7R'gJ*q,@qSQ/b4+\[<]`#R"j8V4llI8b7eAa'P5_'8d3'qlTnUX/\kgAUaP3G?"Crd2b5n1ecItcO7\pMt.R!-?>/W[B2nQPQ9#4!4ELVc6!PO+p.!:YZEu;XnC1Cq"Hk!6\@a"pA6s^B-krV?YnL6Vh7SW!`;RHPTg)>q^)6lPe!W2s%6Y5W;um?bsW\u>6#=G=p`Dd!ZctrWK/S5[\(5e,--Sd9`MVug`E*>R_@u*\faA\Kr"unHTn%m$,@4"E=q><Kb5qE>"47f)V(`h"gipt5o2+'-p[D+,QNq!@mB)]PSk8Sq-lWdF<X=-+aT[YS+$Mi3cNdhM3Ob*s82C;ofT54<(AM+_H;^Q&N<"5#p,d.&.!0mN?fI2pGJMk7hu.X"WKuW+qOo1D$`k$mFYFD94a"1LdMgn+-X-tPu/)qccO<rEIm9]c`/V>b6u3&0e>M[^n.k,AdPn'jp2B2SO(/af'pLL(rn"R2a9!X%&B@[@+8,-C+]MqRKW5[$BWrW*:]@f"G(@3%Qn^d`,gLmVN5U"!o#fJFTeYu*!(n)`@jj%FSZ=(,r-d?!3t@iE2!uE1JkPGB0/-[FX7QS_BLA[gt3g4.Gt_[KUAZgmN:q.0MSAu,2G'W;1le0pKr-LL]WkV=,U/+?\/QX,_)d]&6QN=;.(r:^baJ1[f_3"5t!,Y5]jV%11OFVZ%D)\'=9;_/M/Ou:a@ZE""q9S=75G-\MLHhB31Fu8niM"l@d^)Qm.VS-)II;ie3<RqM>BjYU/9_\nM:6BIAJ6ScJG^B=R6m?nX>K"G1/=j^\IN4)15WdHs1ATeQa?")u]rfBh=o!p(VGCT&M?aRJ]GHn<j2D^m8+qP`!CV+Un"0nDgfr9S48Ml2IO)]KH/D@@,%TYB8i4E(0>opj:b(ZS_DBGAYe65BX[S5GYu=[HY!K:kYd#\KZX2r>^f$RLD?5L(^?%T4J&BPB]/O%]\N\?**,5T15c`EO;>=m+(sgDfbs?D"BpTXa8+)PWuMN&]+SR,Id#3>,(2DR$FNPaRAs%4k_r^0%WC!\"3M!tCtr('9Q+*"U8jrUM0EjK$m`*Y.g'Lb]ZqU*]T&Pe9IpJ^KX;5[r';J,`[>l:NiE(Mp-9)HOM`lECK3aq&)@/H:M36mJ[*A4D(ke*ndfW<$s9ggh.,FNM,M4h\a69h.V0DuR+1lD-H<=L7ecX&b(r`#dpNKqTfOE:YhI;4?VUV2+=L.EBi:&j]/E+s80&hm,JcE/3hg7>E+L,-l^]VnDqT>ob[4-nCqFUllTOBBlQQ8X;GW[*T>B(h8KE'k["L+_sl,$icOJUtP(OMG$dIJHJdS__;so5L+Qt<M@;fQD&q9=IWmQMR9cGGL'4:J>G+:mI`^Hc^-9Yc!4'l^+5YBZ?tk4Qt7!^if]^V#Dj#U&j1][rH1'3fra#;M$a=@b6eTnMA(N%_2M'uVF%!Z*X/!N'7jWVFYD'7$>fa68CZ,:i#M+nDuO<hJm8Kef`<%>2G?U/Q!eTATgmfiNs>'q,sUm8MP_IY3Apfqp9^>aWftD>`nBZ:&bt:;2"6gBYUjR$`RO76fP\Op_q4VuB.p[c6dW!k%;m&L3!c>*7ph[BOsJWX@e9T+7HO:rZ9\nFM5:&5bcN"L_'f#S39%rJRG4\Xa)isS-=L6@`7NZ?3E]L88hm)#,WtT9AIF'pH07t3#`M.qiiGJ!6UTAlO1[+=>eqrm]JrZ2HUg!r75]cZ@jY?jE`g*nhTI9t#>'FKlP<P!=BcT\brn>qMB`q'haF-iI6:UEV8*D)"G'gA_%4;Z%tVO9A9Hn-]N7=$g%jGX\L7M*l)=kjJSf^g<s'cO-aJHA3'4m(dPr/%YP<LAq'aZUTFO2:_(<U*LU\12$AM:27D_[V,Zl6K&P1AE!TJ<Q6Aq;E1F</XoOK(t:V<SP<S+^SYF+Q&0#TJ$3:bLKM*NU(H?Dblcq*+g&F[gmf!n_!-"m]cK,+OM+9\>]M=JPb6`Ds`4WRY[MF;D%7q>U3#hm*6$pS\oF<YS'3#L;0&BMEE#C?5W<-#h)WX5i2WNi%4gpBWt@O+.sQ3SlRRgop&UC7D[o\OmFS<KEm#@e+mX?"q_eDEKr&n;[sC$f00[Yh;R+_?Zie;+k$0NnU>Fu?.oZ-<ECiX5ALG'["n&JK^<!Bb2$4B,9d:Vu5j[eWT:+#8/c]5f%`E(^El<&]F!%/h,(8nKVjq/Z!s_[R4JOeYFYLK!TS>'$B!61%9XKDJIW1-90gS9,MJBfE8f&Q`HfH3/tT?"V$DNd'jgp*9[[L\&6s'&ib]Ls2^+4+k=-B,$4)7!ZL$I5U02<%i4S04IEq"i3j;@<Ci$J_XC3;PT9<]cemm6>.3W4j\Zo-&b*Rg29<;0BZ-nc<$N!@Z0^ap$@QccXP,M"4n7kBThqd_[fI4,p<X#&E@?5@<W-2=FAMC,ZG+q"'t23akjD><$LXZETkscLqe_I`a+g'D-=je>K1SuD,o0q\M%.!30E,OlCAVhjf.G>b[`bWEL*L#eCW<-X/76j15?)i@uEV*bP!Ug&<%1=l+U/*]%mWK:F;_7?[P(]6kFhJKe//h`r,8[>t:Qh#FZUt0[0J\>AQlaMaYiKK2OjDQ][[B\d00m.F#f%q)LGB,V)uW6Y7#WTsT)Ms)so+#X"'.]=Kb:?eAV\\?-%TH+S(Aq%p$AC.D+"Yq!.-V:\:[^*a2>Duf<Sk(YIZS/&7/)DqR'n[fFe)NHC;HVlJkbatGD]nN/5T<IsQRVVWb*O.7p0/V6I$Y^IrkX0F=GYB:n'7nRD^H[Pn`2PZ@M#%]S@$8ShqG!Ij,X+QHM-+JJl[eB1#oeY<YPK,U<ph%F5E7;sDrl@SpSBC_W]1WB[MXiG,INnYNY<h?$'peB@G1/-oE^b4`?oCIbmKK46ORCE7QP,U)/5rSYk5+^ieE;G!tg?D%%G`^=fX:0f	)jl$NFR0/$B</fea0.F%^.jQT'h]ea\F!?PX!cd()S&!Te[5VP`drBQmkQp/:otW[H0&BK,VT4rjZ^$c@&o7,cK_>7i<L%G>b?hD$2l%FCX\[9bpfFT4WN>/po<Do_YXg$kU15gk8c&+D>o>pU#B'K'&_aYL'-VuVJ%m`l.^*Ja#tZ]C+W]uTasW.L4V=j;]p45BBr4C-R9NL6bspWH9Uq=p#c&3,U6*V,q>%rJfePDrY/SLb+]&d\=kl47g:X6B21b4Q"RZXnR9Q\2ES.W%!%97:V,tTj"iSK6S8$HMl['gmD/G,VGI@<_9nfH`Pr$if$]<;pW#u_\JHUDW$(RYrXn_#/&La3HnoPE,MF4BIK`7nqHdt'*5rBgKAQ&R'B@CKG.#ZPoP6?FI)S:%>?mYDM\_&@pnM;Ho`dJ1VL,po!PIda7f<jlenA4Dr,gT1-:_g(IgL?G^itYZ%e3f1D"Ep<I"DII>,mH/EN>``=,g:Jo6lF-OEfss-%t,iC8Ao3VVbYQ),C5&`CcfrF!Ipmg`?*WM6K\'TE]8chW-:/$XLt&OQl9@"'/P53LK_,I<P5`uOdE@a4V3H(StKOlmgBdDhWJa5KdB0\a9sG<PJ;\3n=_)/SUs#1Ts?p%p.c[&&+B*r$C5F*(FD1AKO4Xcq)qMJMo2R-X_EMtcbGr&7:>o\f0Ar#NENN[((Q$Ent>ISh+R)W%NZN[?IG&I<nZ\,;?XY244suG*[7f_-91;T3`.ltNu^R.aH0?L*??.'b@!]`&nl@WOsZ\%^@TWug(hC'`@qE1Y:l2XEq1Am4WJT7!(+2+-B(-2%eu?cNjX"\__8JXi(GG<ABlHJ-Y>MQ96W4I--SNFML*="M0AQhIRq:NDur[qP9RU&%stZ0bu',nNSsSb$Irkn'2N>rS>9P!MX\*flEGd1R&s$n*J)'ZFkDC%##IDYlg!sA#m!TL6%n+Kg+$#BDqUB,Lr]=chLYUE`^\(rKk]]1],?8C3/#^"mF$<NC/M!7>9!j_\XC]l"NuoP7ueQLEob<(,=db63HF3%OX!AVmL1E4IT,6+"`?sRC$i"):Zs$tUS:[-h;qXl'0JZ4eC&e`6r'\"<-:5?(%knthcOl;e^s[*9(u@.3,u%%ld_%sqEN2N'@c2nhD"GL`9a>TJ+KQQf$0*+@t4Bg@WUY)S"9]#>8nW1D-kl\X%I$9/hSTUc<J'HgkEp%2UoJ=_=IBsVe0k+o6F?0rr1P?]_)ZbeBH6,?Lt^cFQ$]tOV=:0Ru;'c>J;noGk*4.i"4O?*G?H,22Lr.IY#+a=Xu"O4*?g6LSk+CXdlaejWDeFC:"q<8u4Tf++O7<p]t[rFai+M3IaS*91(RrD1u3Z7Q_=:E:gMR9#dQbF-h@Hgl:b&"7M!lUn7"eRBK`J0j:fi.OfYfh<#pT&^_tU2d_j,g!5MdX",nc+;5V9WAeH(MB;*]Xp8gZcREp.A[5h:J1c+4YC+6;BQ/deW4k7q4+T-<R(4_qrNhf+V6b*<(Wf.NKg;kWI40>i;nK]\6mZo?mD-B_,5b7>Xi#50_iifCS5jmF-2+JE#c'*RR-#Y)(]Y;J/qRO1hIb8!l3$V=)uJ&X)Nnu9D7fQ5qqA=XEX3X@6"cBZf$=&,ZZRMqPQH=1-sd.\4ShsA]X!E4k9i6U&)7V!*F,mfGH@Cs2:qtu0<i85o&s.jRZ;UiED?g!oqUqgL=e]l87!M_;/&,j*IO$$Rrk1C.B`9OV`2I8cjM2.1dNeUrs2/emRpWQIlAI5&bt>E4%Y#h\q?@SLP?X&7Zr=s7ha`^N+C<Kni^X6NgaS@:8d/abST-ZB7.dQ9Rf2OB$6S=#S^/(rUsctJ)H/BZFAFBUK>8]:h8!O-SiQm=pW%p1U_V>Pi8?QeGDiEm"&@FRBfqSV'S"Zhd1Q<2^3Oo:,L*6-ILH&1m'd2)0k]MAb*]"Qnc?<6QS"MNkrktqkt:GK)n"Cr0V0PpDg$!FA9L0`*YOlL:jGrB';4,?k+Cm"_LFkC*:n?3f$kQUUigj(_-7n8QtAhgkX;9!mksX-5n99EaXio8CR3KihS^-:^X?B_in^dn-I$ASe4Fu7GAd?LJfu-nAG_pKJ>_?o8>U1J.^&%g$@l.GGp;=8:L-F.T797!^`<TGEH'(Sq$Bt\I:7"M;FrKkU?d*IHepm%$V`L!=t,(P7%sj]l3n+io2:5V,Q1$Z`JeNAn03KB3"m:]J$OQ^tZ03N"nk`*qH^(;uqtJ4Z?AIo%gP9TYA=\*P<rm`W4.%b2U[o(A10\>fe5%@%Lb:(5UK4%N7U4A\LuAZkh9A:#Q+uV<>ng9HPP_K4DS+bq)+]!sA=/\ks4HV;I_TpHg.f7I%aqhVO(Z^eZGH491Ns0Of:eF<<3[I@quU7o&,s3=pO'pN`RjkGPQSX3&PPK6/24U8XKaj-"F[09hW\gG:M(0>7/[=CJ';.ZTYS64kX4Ttt-(&OZSk:Cnom9O<_]JYL'H)Po\,3V=fYi8>_:5rD,bS-VQR4d82?J\G3[cr=O`3eMT*&a@K*RV3_`lF/(9>uLkg!r7F5-3>dAXF["-`aM(lhe4&\M]pH:$Z`VD4u+5d;7\3>1(bof6,UG]7gSIt!98T=60A7+bl$l!Ifo`^%&:(A-tX,U":C=fq<fUVFI\k+cpq98#o'.`X+rbZ&8(,<fd&+8DkI2d4inr2)n(k@^gin^J`oIU*QWe'A0H_HRH$%cWADB:L>Q#E"R9'<_[snBU-%@Kj1rifE3Kn0k^eD`"(aS`SRUNeK8\a@JP$?Apg&J:UuU'X<'gd^#6J'K,`P3r52pikoqS?XXU)B_!`>,&1Xj5\\gVP$dN!k9&k3)u"V7=T\PTp>*e7uLOImX2fHUHsLU+8p=8F(1eUc<:!GX;"JLCcm`h4J%boDO)]^bHC%`Hi3$>\.gINW#3SHApZ"kf8;!!s?j&Eu7s61%1U=+2P4Hdca.*ekIVi6mE'=C'gA+V7qdVu?g9T`aPkpl.lGN)E1U*smcpKFZ4f3%d?"AFpEcjp]8.%B`M/N%0$*Ige<j&mpdFQb<n01+DW5T.HS$8[(h38:_.2/nU2aJnP)(93JV0r/a+u'F-V_r<FG;"6K,lZtRRA9#SDr8JsGu&t<d*qtMZl5:@N$,OE6sGVrkAkgBW(O.MMiNo4`s<+UsGmu?r:C'6pG65TjD=936;?WtLq,*]#b2.YjD?%F1B6lX$"!i<E"PV,TMI$J]CA@Z:rQsWM#PD&X^>Q*]*qq2@5!!<QL"C2Y"1'6Ylr**8l^!"0J!&-1pBMS&B2&=?QU5YF'=O']i&&J?.(os?<-h/tWKr7l[ZkuKu5tWlPd/a$(Gf2s:cr:2*5Tg'"#"$fQVda;+5p2PW4'8>X(I@(a8`UhS>uIiu*A&Ff774";M%N-%!aoD*&-6CY$/L8CdI:fpq3j>H,p.5_8Mc$q7u1J`0mlUObcHq?"g1[hJ;nON'(gld']/m]XRnuF\H<O[P\atoA*XQI>Y:-B3P4,EN\RUj)R:-0]_44Re8Lpt+j-4CN+CGe)[nn48:CR\_^LBY5`..gbOcJlb#@olZ&\b#$oPdS*Z]-Qr5@'[P^q)7r#eO_GKdXQ5E>.a@8AJm=&`KZ!KiuYY/^J,PMZNC:^H!Q&of.a@VFoOI_ajgm3%'kI2nM6-UYV9+=l_e\A<TK$-6QC1$E4+E<k_-!TqkiP5~>endstream
|
64 |
+
endobj
|
65 |
+
% 'Page1': class PDFPage
|
66 |
+
6 0 obj
|
67 |
+
% Page dictionary
|
68 |
+
<< /Contents 94 0 R
|
69 |
+
/MediaBox [ 0
|
70 |
+
0
|
71 |
+
595.2756
|
72 |
+
841.8898 ]
|
73 |
+
/Parent 93 0 R
|
74 |
+
/Resources << /Font 1 0 R
|
75 |
+
/ProcSet [ /PDF
|
76 |
+
/Text
|
77 |
+
/ImageB
|
78 |
+
/ImageC
|
79 |
+
/ImageI ]
|
80 |
+
/XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R
|
81 |
+
/FormXob.debfe39a01d8602d733fbbcad4ae132a 3 0 R >> >>
|
82 |
+
/Rotate 0
|
83 |
+
/Trans << >>
|
84 |
+
/Type /Page >>
|
85 |
+
endobj
|
86 |
+
% 'Annot.NUMBER1': class LinkAnnotation
|
87 |
+
7 0 obj
|
88 |
+
<< /Border [ 0
|
89 |
+
0
|
90 |
+
0 ]
|
91 |
+
/Contents ()
|
92 |
+
/Dest [ 51 0 R
|
93 |
+
/XYZ
|
94 |
+
62.69291
|
95 |
+
748.0687
|
96 |
+
0 ]
|
97 |
+
/Rect [ 62.69291
|
98 |
+
706.8187
|
99 |
+
124.9329
|
100 |
+
718.8187 ]
|
101 |
+
/Subtype /Link
|
102 |
+
/Type /Annot >>
|
103 |
+
endobj
|
104 |
+
% 'Annot.NUMBER2': class LinkAnnotation
|
105 |
+
8 0 obj
|
106 |
+
<< /Border [ 0
|
107 |
+
0
|
108 |
+
0 ]
|
109 |
+
/Contents ()
|
110 |
+
/Dest [ 51 0 R
|
111 |
+
/XYZ
|
112 |
+
62.69291
|
113 |
+
748.0687
|
114 |
+
0 ]
|
115 |
+
/Rect [ 527.0227
|
116 |
+
706.8187
|
117 |
+
532.5827
|
118 |
+
718.8187 ]
|
119 |
+
/Subtype /Link
|
120 |
+
/Type /Annot >>
|
121 |
+
endobj
|
122 |
+
% 'Annot.NUMBER3': class LinkAnnotation
|
123 |
+
9 0 obj
|
124 |
+
<< /Border [ 0
|
125 |
+
0
|
126 |
+
0 ]
|
127 |
+
/Contents ()
|
128 |
+
/Dest [ 51 0 R
|
129 |
+
/XYZ
|
130 |
+
62.69291
|
131 |
+
631.0687
|
132 |
+
0 ]
|
133 |
+
/Rect [ 62.69291
|
134 |
+
688.8187
|
135 |
+
159.9429
|
136 |
+
700.8187 ]
|
137 |
+
/Subtype /Link
|
138 |
+
/Type /Annot >>
|
139 |
+
endobj
|
140 |
+
% 'Annot.NUMBER4': class LinkAnnotation
|
141 |
+
10 0 obj
|
142 |
+
<< /Border [ 0
|
143 |
+
0
|
144 |
+
0 ]
|
145 |
+
/Contents ()
|
146 |
+
/Dest [ 51 0 R
|
147 |
+
/XYZ
|
148 |
+
62.69291
|
149 |
+
631.0687
|
150 |
+
0 ]
|
151 |
+
/Rect [ 527.0227
|
152 |
+
688.8187
|
153 |
+
532.5827
|
154 |
+
700.8187 ]
|
155 |
+
/Subtype /Link
|
156 |
+
/Type /Annot >>
|
157 |
+
endobj
|
158 |
+
% 'Annot.NUMBER5': class LinkAnnotation
|
159 |
+
11 0 obj
|
160 |
+
<< /Border [ 0
|
161 |
+
0
|
162 |
+
0 ]
|
163 |
+
/Contents ()
|
164 |
+
/Dest [ 51 0 R
|
165 |
+
/XYZ
|
166 |
+
62.69291
|
167 |
+
598.0687
|
168 |
+
0 ]
|
169 |
+
/Rect [ 82.69291
|
170 |
+
670.8187
|
171 |
+
148.8329
|
172 |
+
682.8187 ]
|
173 |
+
/Subtype /Link
|
174 |
+
/Type /Annot >>
|
175 |
+
endobj
|
176 |
+
% 'Annot.NUMBER6': class LinkAnnotation
|
177 |
+
12 0 obj
|
178 |
+
<< /Border [ 0
|
179 |
+
0
|
180 |
+
0 ]
|
181 |
+
/Contents ()
|
182 |
+
/Dest [ 51 0 R
|
183 |
+
/XYZ
|
184 |
+
62.69291
|
185 |
+
598.0687
|
186 |
+
0 ]
|
187 |
+
/Rect [ 527.0227
|
188 |
+
670.8187
|
189 |
+
532.5827
|
190 |
+
682.8187 ]
|
191 |
+
/Subtype /Link
|
192 |
+
/Type /Annot >>
|
193 |
+
endobj
|
194 |
+
% 'Annot.NUMBER7': class LinkAnnotation
|
195 |
+
13 0 obj
|
196 |
+
<< /Border [ 0
|
197 |
+
0
|
198 |
+
0 ]
|
199 |
+
/Contents ()
|
200 |
+
/Dest [ 54 0 R
|
201 |
+
/XYZ
|
202 |
+
62.69291
|
203 |
+
748.0687
|
204 |
+
0 ]
|
205 |
+
/Rect [ 62.69291
|
206 |
+
652.8187
|
207 |
+
129.3829
|
208 |
+
664.8187 ]
|
209 |
+
/Subtype /Link
|
210 |
+
/Type /Annot >>
|
211 |
+
endobj
|
212 |
+
% 'Annot.NUMBER8': class LinkAnnotation
|
213 |
+
14 0 obj
|
214 |
+
<< /Border [ 0
|
215 |
+
0
|
216 |
+
0 ]
|
217 |
+
/Contents ()
|
218 |
+
/Dest [ 54 0 R
|
219 |
+
/XYZ
|
220 |
+
62.69291
|
221 |
+
748.0687
|
222 |
+
0 ]
|
223 |
+
/Rect [ 527.0227
|
224 |
+
652.8187
|
225 |
+
532.5827
|
226 |
+
664.8187 ]
|
227 |
+
/Subtype /Link
|
228 |
+
/Type /Annot >>
|
229 |
+
endobj
|
230 |
+
% 'Annot.NUMBER9': class LinkAnnotation
|
231 |
+
15 0 obj
|
232 |
+
<< /Border [ 0
|
233 |
+
0
|
234 |
+
0 ]
|
235 |
+
/Contents ()
|
236 |
+
/Dest [ 56 0 R
|
237 |
+
/XYZ
|
238 |
+
62.69291
|
239 |
+
748.0687
|
240 |
+
0 ]
|
241 |
+
/Rect [ 62.69291
|
242 |
+
634.8187
|
243 |
+
142.1429
|
244 |
+
646.8187 ]
|
245 |
+
/Subtype /Link
|
246 |
+
/Type /Annot >>
|
247 |
+
endobj
|
248 |
+
% 'Annot.NUMBER10': class LinkAnnotation
|
249 |
+
16 0 obj
|
250 |
+
<< /Border [ 0
|
251 |
+
0
|
252 |
+
0 ]
|
253 |
+
/Contents ()
|
254 |
+
/Dest [ 56 0 R
|
255 |
+
/XYZ
|
256 |
+
62.69291
|
257 |
+
748.0687
|
258 |
+
0 ]
|
259 |
+
/Rect [ 527.0227
|
260 |
+
634.8187
|
261 |
+
532.5827
|
262 |
+
646.8187 ]
|
263 |
+
/Subtype /Link
|
264 |
+
/Type /Annot >>
|
265 |
+
endobj
|
266 |
+
% 'Annot.NUMBER11': class LinkAnnotation
|
267 |
+
17 0 obj
|
268 |
+
<< /Border [ 0
|
269 |
+
0
|
270 |
+
0 ]
|
271 |
+
/Contents ()
|
272 |
+
/Dest [ 56 0 R
|
273 |
+
/XYZ
|
274 |
+
62.69291
|
275 |
+
631.0687
|
276 |
+
0 ]
|
277 |
+
/Rect [ 82.69291
|
278 |
+
616.8187
|
279 |
+
178.3029
|
280 |
+
628.8187 ]
|
281 |
+
/Subtype /Link
|
282 |
+
/Type /Annot >>
|
283 |
+
endobj
|
284 |
+
% 'Annot.NUMBER12': class LinkAnnotation
|
285 |
+
18 0 obj
|
286 |
+
<< /Border [ 0
|
287 |
+
0
|
288 |
+
0 ]
|
289 |
+
/Contents ()
|
290 |
+
/Dest [ 56 0 R
|
291 |
+
/XYZ
|
292 |
+
62.69291
|
293 |
+
631.0687
|
294 |
+
0 ]
|
295 |
+
/Rect [ 527.0227
|
296 |
+
616.8187
|
297 |
+
532.5827
|
298 |
+
628.8187 ]
|
299 |
+
/Subtype /Link
|
300 |
+
/Type /Annot >>
|
301 |
+
endobj
|
302 |
+
% 'Annot.NUMBER13': class LinkAnnotation
|
303 |
+
19 0 obj
|
304 |
+
<< /Border [ 0
|
305 |
+
0
|
306 |
+
0 ]
|
307 |
+
/Contents ()
|
308 |
+
/Dest [ 57 0 R
|
309 |
+
/XYZ
|
310 |
+
62.69291
|
311 |
+
748.0687
|
312 |
+
0 ]
|
313 |
+
/Rect [ 82.69291
|
314 |
+
598.8187
|
315 |
+
190.5329
|
316 |
+
610.8187 ]
|
317 |
+
/Subtype /Link
|
318 |
+
/Type /Annot >>
|
319 |
+
endobj
|
320 |
+
% 'Annot.NUMBER14': class LinkAnnotation
|
321 |
+
20 0 obj
|
322 |
+
<< /Border [ 0
|
323 |
+
0
|
324 |
+
0 ]
|
325 |
+
/Contents ()
|
326 |
+
/Dest [ 57 0 R
|
327 |
+
/XYZ
|
328 |
+
62.69291
|
329 |
+
748.0687
|
330 |
+
0 ]
|
331 |
+
/Rect [ 527.0227
|
332 |
+
598.8187
|
333 |
+
532.5827
|
334 |
+
610.8187 ]
|
335 |
+
/Subtype /Link
|
336 |
+
/Type /Annot >>
|
337 |
+
endobj
|
338 |
+
% 'Annot.NUMBER15': class LinkAnnotation
|
339 |
+
21 0 obj
|
340 |
+
<< /Border [ 0
|
341 |
+
0
|
342 |
+
0 ]
|
343 |
+
/Contents ()
|
344 |
+
/Dest [ 61 0 R
|
345 |
+
/XYZ
|
346 |
+
62.69291
|
347 |
+
748.0687
|
348 |
+
0 ]
|
349 |
+
/Rect [ 102.6929
|
350 |
+
580.8187
|
351 |
+
198.8629
|
352 |
+
592.8187 ]
|
353 |
+
/Subtype /Link
|
354 |
+
/Type /Annot >>
|
355 |
+
endobj
|
356 |
+
% 'Annot.NUMBER16': class LinkAnnotation
|
357 |
+
22 0 obj
|
358 |
+
<< /Border [ 0
|
359 |
+
0
|
360 |
+
0 ]
|
361 |
+
/Contents ()
|
362 |
+
/Dest [ 61 0 R
|
363 |
+
/XYZ
|
364 |
+
62.69291
|
365 |
+
748.0687
|
366 |
+
0 ]
|
367 |
+
/Rect [ 521.4627
|
368 |
+
580.8187
|
369 |
+
532.5827
|
370 |
+
592.8187 ]
|
371 |
+
/Subtype /Link
|
372 |
+
/Type /Annot >>
|
373 |
+
endobj
|
374 |
+
% 'Annot.NUMBER17': class LinkAnnotation
|
375 |
+
23 0 obj
|
376 |
+
<< /Border [ 0
|
377 |
+
0
|
378 |
+
0 ]
|
379 |
+
/Contents ()
|
380 |
+
/Dest [ 62 0 R
|
381 |
+
/XYZ
|
382 |
+
62.69291
|
383 |
+
718.0687
|
384 |
+
0 ]
|
385 |
+
/Rect [ 102.6929
|
386 |
+
562.8187
|
387 |
+
201.0829
|
388 |
+
574.8187 ]
|
389 |
+
/Subtype /Link
|
390 |
+
/Type /Annot >>
|
391 |
+
endobj
|
392 |
+
% 'Annot.NUMBER18': class LinkAnnotation
|
393 |
+
24 0 obj
|
394 |
+
<< /Border [ 0
|
395 |
+
0
|
396 |
+
0 ]
|
397 |
+
/Contents ()
|
398 |
+
/Dest [ 62 0 R
|
399 |
+
/XYZ
|
400 |
+
62.69291
|
401 |
+
718.0687
|
402 |
+
0 ]
|
403 |
+
/Rect [ 521.4627
|
404 |
+
562.8187
|
405 |
+
532.5827
|
406 |
+
574.8187 ]
|
407 |
+
/Subtype /Link
|
408 |
+
/Type /Annot >>
|
409 |
+
endobj
|
410 |
+
% 'Annot.NUMBER19': class LinkAnnotation
|
411 |
+
25 0 obj
|
412 |
+
<< /Border [ 0
|
413 |
+
0
|
414 |
+
0 ]
|
415 |
+
/Contents ()
|
416 |
+
/Dest [ 64 0 R
|
417 |
+
/XYZ
|
418 |
+
62.69291
|
419 |
+
748.0687
|
420 |
+
0 ]
|
421 |
+
/Rect [ 62.69291
|
422 |
+
544.8187
|
423 |
+
128.2629
|
424 |
+
556.8187 ]
|
425 |
+
/Subtype /Link
|
426 |
+
/Type /Annot >>
|
427 |
+
endobj
|
428 |
+
% 'Annot.NUMBER20': class LinkAnnotation
|
429 |
+
26 0 obj
|
430 |
+
<< /Border [ 0
|
431 |
+
0
|
432 |
+
0 ]
|
433 |
+
/Contents ()
|
434 |
+
/Dest [ 64 0 R
|
435 |
+
/XYZ
|
436 |
+
62.69291
|
437 |
+
748.0687
|
438 |
+
0 ]
|
439 |
+
/Rect [ 521.4627
|
440 |
+
544.8187
|
441 |
+
532.5827
|
442 |
+
556.8187 ]
|
443 |
+
/Subtype /Link
|
444 |
+
/Type /Annot >>
|
445 |
+
endobj
|
446 |
+
% 'Annot.NUMBER21': class LinkAnnotation
|
447 |
+
27 0 obj
|
448 |
+
<< /Border [ 0
|
449 |
+
0
|
450 |
+
0 ]
|
451 |
+
/Contents ()
|
452 |
+
/Dest [ 64 0 R
|
453 |
+
/XYZ
|
454 |
+
62.69291
|
455 |
+
715.0687
|
456 |
+
0 ]
|
457 |
+
/Rect [ 82.69291
|
458 |
+
526.8187
|
459 |
+
237.2129
|
460 |
+
538.8187 ]
|
461 |
+
/Subtype /Link
|
462 |
+
/Type /Annot >>
|
463 |
+
endobj
|
464 |
+
% 'Annot.NUMBER22': class LinkAnnotation
|
465 |
+
28 0 obj
|
466 |
+
<< /Border [ 0
|
467 |
+
0
|
468 |
+
0 ]
|
469 |
+
/Contents ()
|
470 |
+
/Dest [ 64 0 R
|
471 |
+
/XYZ
|
472 |
+
62.69291
|
473 |
+
715.0687
|
474 |
+
0 ]
|
475 |
+
/Rect [ 521.4627
|
476 |
+
526.8187
|
477 |
+
532.5827
|
478 |
+
538.8187 ]
|
479 |
+
/Subtype /Link
|
480 |
+
/Type /Annot >>
|
481 |
+
endobj
|
482 |
+
% 'Annot.NUMBER23': class LinkAnnotation
|
483 |
+
29 0 obj
|
484 |
+
<< /Border [ 0
|
485 |
+
0
|
486 |
+
0 ]
|
487 |
+
/Contents ()
|
488 |
+
/Dest [ 64 0 R
|
489 |
+
/XYZ
|
490 |
+
62.69291
|
491 |
+
553.0687
|
492 |
+
0 ]
|
493 |
+
/Rect [ 82.69291
|
494 |
+
508.8187
|
495 |
+
289.4529
|
496 |
+
520.8187 ]
|
497 |
+
/Subtype /Link
|
498 |
+
/Type /Annot >>
|
499 |
+
endobj
|
500 |
+
% 'Annot.NUMBER24': class LinkAnnotation
|
501 |
+
30 0 obj
|
502 |
+
<< /Border [ 0
|
503 |
+
0
|
504 |
+
0 ]
|
505 |
+
/Contents ()
|
506 |
+
/Dest [ 64 0 R
|
507 |
+
/XYZ
|
508 |
+
62.69291
|
509 |
+
553.0687
|
510 |
+
0 ]
|
511 |
+
/Rect [ 521.4627
|
512 |
+
508.8187
|
513 |
+
532.5827
|
514 |
+
520.8187 ]
|
515 |
+
/Subtype /Link
|
516 |
+
/Type /Annot >>
|
517 |
+
endobj
|
518 |
+
% 'Annot.NUMBER25': class LinkAnnotation
|
519 |
+
31 0 obj
|
520 |
+
<< /Border [ 0
|
521 |
+
0
|
522 |
+
0 ]
|
523 |
+
/Contents ()
|
524 |
+
/Dest [ 64 0 R
|
525 |
+
/XYZ
|
526 |
+
62.69291
|
527 |
+
361.0687
|
528 |
+
0 ]
|
529 |
+
/Rect [ 62.69291
|
530 |
+
490.8187
|
531 |
+
129.9529
|
532 |
+
502.8187 ]
|
533 |
+
/Subtype /Link
|
534 |
+
/Type /Annot >>
|
535 |
+
endobj
|
536 |
+
% 'Annot.NUMBER26': class LinkAnnotation
|
537 |
+
32 0 obj
|
538 |
+
<< /Border [ 0
|
539 |
+
0
|
540 |
+
0 ]
|
541 |
+
/Contents ()
|
542 |
+
/Dest [ 64 0 R
|
543 |
+
/XYZ
|
544 |
+
62.69291
|
545 |
+
361.0687
|
546 |
+
0 ]
|
547 |
+
/Rect [ 521.4627
|
548 |
+
490.8187
|
549 |
+
532.5827
|
550 |
+
502.8187 ]
|
551 |
+
/Subtype /Link
|
552 |
+
/Type /Annot >>
|
553 |
+
endobj
|
554 |
+
% 'Annot.NUMBER27': class LinkAnnotation
|
555 |
+
33 0 obj
|
556 |
+
<< /Border [ 0
|
557 |
+
0
|
558 |
+
0 ]
|
559 |
+
/Contents ()
|
560 |
+
/Dest [ 65 0 R
|
561 |
+
/XYZ
|
562 |
+
62.69291
|
563 |
+
748.0687
|
564 |
+
0 ]
|
565 |
+
/Rect [ 62.69291
|
566 |
+
472.8187
|
567 |
+
109.9329
|
568 |
+
484.8187 ]
|
569 |
+
/Subtype /Link
|
570 |
+
/Type /Annot >>
|
571 |
+
endobj
|
572 |
+
% 'Annot.NUMBER28': class LinkAnnotation
|
573 |
+
34 0 obj
|
574 |
+
<< /Border [ 0
|
575 |
+
0
|
576 |
+
0 ]
|
577 |
+
/Contents ()
|
578 |
+
/Dest [ 65 0 R
|
579 |
+
/XYZ
|
580 |
+
62.69291
|
581 |
+
748.0687
|
582 |
+
0 ]
|
583 |
+
/Rect [ 521.4627
|
584 |
+
472.8187
|
585 |
+
532.5827
|
586 |
+
484.8187 ]
|
587 |
+
/Subtype /Link
|
588 |
+
/Type /Annot >>
|
589 |
+
endobj
|
590 |
+
% 'Annot.NUMBER29': class LinkAnnotation
|
591 |
+
35 0 obj
|
592 |
+
<< /Border [ 0
|
593 |
+
0
|
594 |
+
0 ]
|
595 |
+
/Contents ()
|
596 |
+
/Dest [ 65 0 R
|
597 |
+
/XYZ
|
598 |
+
62.69291
|
599 |
+
691.0687
|
600 |
+
0 ]
|
601 |
+
/Rect [ 82.69291
|
602 |
+
454.8187
|
603 |
+
216.6329
|
604 |
+
466.8187 ]
|
605 |
+
/Subtype /Link
|
606 |
+
/Type /Annot >>
|
607 |
+
endobj
|
608 |
+
% 'Annot.NUMBER30': class LinkAnnotation
|
609 |
+
36 0 obj
|
610 |
+
<< /Border [ 0
|
611 |
+
0
|
612 |
+
0 ]
|
613 |
+
/Contents ()
|
614 |
+
/Dest [ 65 0 R
|
615 |
+
/XYZ
|
616 |
+
62.69291
|
617 |
+
691.0687
|
618 |
+
0 ]
|
619 |
+
/Rect [ 521.4627
|
620 |
+
454.8187
|
621 |
+
532.5827
|
622 |
+
466.8187 ]
|
623 |
+
/Subtype /Link
|
624 |
+
/Type /Annot >>
|
625 |
+
endobj
|
626 |
+
% 'Annot.NUMBER31': class LinkAnnotation
|
627 |
+
37 0 obj
|
628 |
+
<< /Border [ 0
|
629 |
+
0
|
630 |
+
0 ]
|
631 |
+
/Contents ()
|
632 |
+
/Dest [ 66 0 R
|
633 |
+
/XYZ
|
634 |
+
62.69291
|
635 |
+
748.0687
|
636 |
+
0 ]
|
637 |
+
/Rect [ 62.69291
|
638 |
+
436.8187
|
639 |
+
142.1629
|
640 |
+
448.8187 ]
|
641 |
+
/Subtype /Link
|
642 |
+
/Type /Annot >>
|
643 |
+
endobj
|
644 |
+
% 'Annot.NUMBER32': class LinkAnnotation
|
645 |
+
38 0 obj
|
646 |
+
<< /Border [ 0
|
647 |
+
0
|
648 |
+
0 ]
|
649 |
+
/Contents ()
|
650 |
+
/Dest [ 66 0 R
|
651 |
+
/XYZ
|
652 |
+
62.69291
|
653 |
+
748.0687
|
654 |
+
0 ]
|
655 |
+
/Rect [ 521.4627
|
656 |
+
436.8187
|
657 |
+
532.5827
|
658 |
+
448.8187 ]
|
659 |
+
/Subtype /Link
|
660 |
+
/Type /Annot >>
|
661 |
+
endobj
|
662 |
+
% 'Annot.NUMBER33': class LinkAnnotation
|
663 |
+
39 0 obj
|
664 |
+
<< /Border [ 0
|
665 |
+
0
|
666 |
+
0 ]
|
667 |
+
/Contents ()
|
668 |
+
/Dest [ 66 0 R
|
669 |
+
/XYZ
|
670 |
+
62.69291
|
671 |
+
494.0687
|
672 |
+
0 ]
|
673 |
+
/Rect [ 82.69291
|
674 |
+
418.8187
|
675 |
+
244.4429
|
676 |
+
430.8187 ]
|
677 |
+
/Subtype /Link
|
678 |
+
/Type /Annot >>
|
679 |
+
endobj
|
680 |
+
% 'Annot.NUMBER34': class LinkAnnotation
|
681 |
+
40 0 obj
|
682 |
+
<< /Border [ 0
|
683 |
+
0
|
684 |
+
0 ]
|
685 |
+
/Contents ()
|
686 |
+
/Dest [ 66 0 R
|
687 |
+
/XYZ
|
688 |
+
62.69291
|
689 |
+
494.0687
|
690 |
+
0 ]
|
691 |
+
/Rect [ 521.4627
|
692 |
+
418.8187
|
693 |
+
532.5827
|
694 |
+
430.8187 ]
|
695 |
+
/Subtype /Link
|
696 |
+
/Type /Annot >>
|
697 |
+
endobj
|
698 |
+
% 'Annot.NUMBER35': class LinkAnnotation
|
699 |
+
41 0 obj
|
700 |
+
<< /Border [ 0
|
701 |
+
0
|
702 |
+
0 ]
|
703 |
+
/Contents ()
|
704 |
+
/Dest [ 67 0 R
|
705 |
+
/XYZ
|
706 |
+
62.69291
|
707 |
+
748.0687
|
708 |
+
0 ]
|
709 |
+
/Rect [ 82.69291
|
710 |
+
400.8187
|
711 |
+
173.8629
|
712 |
+
412.8187 ]
|
713 |
+
/Subtype /Link
|
714 |
+
/Type /Annot >>
|
715 |
+
endobj
|
716 |
+
% 'Annot.NUMBER36': class LinkAnnotation
|
717 |
+
42 0 obj
|
718 |
+
<< /Border [ 0
|
719 |
+
0
|
720 |
+
0 ]
|
721 |
+
/Contents ()
|
722 |
+
/Dest [ 67 0 R
|
723 |
+
/XYZ
|
724 |
+
62.69291
|
725 |
+
748.0687
|
726 |
+
0 ]
|
727 |
+
/Rect [ 521.4627
|
728 |
+
400.8187
|
729 |
+
532.5827
|
730 |
+
412.8187 ]
|
731 |
+
/Subtype /Link
|
732 |
+
/Type /Annot >>
|
733 |
+
endobj
|
734 |
+
% 'Annot.NUMBER37': class LinkAnnotation
|
735 |
+
43 0 obj
|
736 |
+
<< /Border [ 0
|
737 |
+
0
|
738 |
+
0 ]
|
739 |
+
/Contents ()
|
740 |
+
/Dest [ 67 0 R
|
741 |
+
/XYZ
|
742 |
+
62.69291
|
743 |
+
532.0687
|
744 |
+
0 ]
|
745 |
+
/Rect [ 82.69291
|
746 |
+
382.8187
|
747 |
+
153.2929
|
748 |
+
394.8187 ]
|
749 |
+
/Subtype /Link
|
750 |
+
/Type /Annot >>
|
751 |
+
endobj
|
752 |
+
% 'Annot.NUMBER38': class LinkAnnotation
|
753 |
+
44 0 obj
|
754 |
+
<< /Border [ 0
|
755 |
+
0
|
756 |
+
0 ]
|
757 |
+
/Contents ()
|
758 |
+
/Dest [ 67 0 R
|
759 |
+
/XYZ
|
760 |
+
62.69291
|
761 |
+
532.0687
|
762 |
+
0 ]
|
763 |
+
/Rect [ 521.4627
|
764 |
+
382.8187
|
765 |
+
532.5827
|
766 |
+
394.8187 ]
|
767 |
+
/Subtype /Link
|
768 |
+
/Type /Annot >>
|
769 |
+
endobj
|
770 |
+
% 'Annot.NUMBER39': class LinkAnnotation
|
771 |
+
45 0 obj
|
772 |
+
<< /Border [ 0
|
773 |
+
0
|
774 |
+
0 ]
|
775 |
+
/Contents ()
|
776 |
+
/Dest [ 67 0 R
|
777 |
+
/XYZ
|
778 |
+
62.69291
|
779 |
+
322.0687
|
780 |
+
0 ]
|
781 |
+
/Rect [ 62.69291
|
782 |
+
364.8187
|
783 |
+
204.9529
|
784 |
+
376.8187 ]
|
785 |
+
/Subtype /Link
|
786 |
+
/Type /Annot >>
|
787 |
+
endobj
|
788 |
+
% 'Annot.NUMBER40': class LinkAnnotation
|
789 |
+
46 0 obj
|
790 |
+
<< /Border [ 0
|
791 |
+
0
|
792 |
+
0 ]
|
793 |
+
/Contents ()
|
794 |
+
/Dest [ 67 0 R
|
795 |
+
/XYZ
|
796 |
+
62.69291
|
797 |
+
322.0687
|
798 |
+
0 ]
|
799 |
+
/Rect [ 521.4627
|
800 |
+
364.8187
|
801 |
+
532.5827
|
802 |
+
376.8187 ]
|
803 |
+
/Subtype /Link
|
804 |
+
/Type /Annot >>
|
805 |
+
endobj
|
806 |
+
% 'Annot.NUMBER41': class LinkAnnotation
|
807 |
+
47 0 obj
|
808 |
+
<< /Border [ 0
|
809 |
+
0
|
810 |
+
0 ]
|
811 |
+
/Contents ()
|
812 |
+
/Dest [ 68 0 R
|
813 |
+
/XYZ
|
814 |
+
62.69291
|
815 |
+
718.0687
|
816 |
+
0 ]
|
817 |
+
/Rect [ 82.69291
|
818 |
+
346.8187
|
819 |
+
220.5329
|
820 |
+
358.8187 ]
|
821 |
+
/Subtype /Link
|
822 |
+
/Type /Annot >>
|
823 |
+
endobj
|
824 |
+
% 'Annot.NUMBER42': class LinkAnnotation
|
825 |
+
48 0 obj
|
826 |
+
<< /Border [ 0
|
827 |
+
0
|
828 |
+
0 ]
|
829 |
+
/Contents ()
|
830 |
+
/Dest [ 68 0 R
|
831 |
+
/XYZ
|
832 |
+
62.69291
|
833 |
+
718.0687
|
834 |
+
0 ]
|
835 |
+
/Rect [ 521.4627
|
836 |
+
346.8187
|
837 |
+
532.5827
|
838 |
+
358.8187 ]
|
839 |
+
/Subtype /Link
|
840 |
+
/Type /Annot >>
|
841 |
+
endobj
|
842 |
+
% 'Page2': class PDFPage
|
843 |
+
49 0 obj
|
844 |
+
% Page dictionary
|
845 |
+
<< /Annots [ 7 0 R
|
846 |
+
8 0 R
|
847 |
+
9 0 R
|
848 |
+
10 0 R
|
849 |
+
11 0 R
|
850 |
+
12 0 R
|
851 |
+
13 0 R
|
852 |
+
14 0 R
|
853 |
+
15 0 R
|
854 |
+
16 0 R
|
855 |
+
17 0 R
|
856 |
+
18 0 R
|
857 |
+
19 0 R
|
858 |
+
20 0 R
|
859 |
+
21 0 R
|
860 |
+
22 0 R
|
861 |
+
23 0 R
|
862 |
+
24 0 R
|
863 |
+
25 0 R
|
864 |
+
26 0 R
|
865 |
+
27 0 R
|
866 |
+
28 0 R
|
867 |
+
29 0 R
|
868 |
+
30 0 R
|
869 |
+
31 0 R
|
870 |
+
32 0 R
|
871 |
+
33 0 R
|
872 |
+
34 0 R
|
873 |
+
35 0 R
|
874 |
+
36 0 R
|
875 |
+
37 0 R
|
876 |
+
38 0 R
|
877 |
+
39 0 R
|
878 |
+
40 0 R
|
879 |
+
41 0 R
|
880 |
+
42 0 R
|
881 |
+
43 0 R
|
882 |
+
44 0 R
|
883 |
+
45 0 R
|
884 |
+
46 0 R
|
885 |
+
47 0 R
|
886 |
+
48 0 R ]
|
887 |
+
/Contents 95 0 R
|
888 |
+
/MediaBox [ 0
|
889 |
+
0
|
890 |
+
595.2756
|
891 |
+
841.8898 ]
|
892 |
+
/Parent 93 0 R
|
893 |
+
/Resources << /Font 1 0 R
|
894 |
+
/ProcSet [ /PDF
|
895 |
+
/Text
|
896 |
+
/ImageB
|
897 |
+
/ImageC
|
898 |
+
/ImageI ]
|
899 |
+
/XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
|
900 |
+
/Rotate 0
|
901 |
+
/Trans << >>
|
902 |
+
/Type /Page >>
|
903 |
+
endobj
|
904 |
+
% 'F3': class PDFType1Font
|
905 |
+
50 0 obj
|
906 |
+
% Font Helvetica-BoldOblique
|
907 |
+
<< /BaseFont /Helvetica-BoldOblique
|
908 |
+
/Encoding /WinAnsiEncoding
|
909 |
+
/Name /F3
|
910 |
+
/Subtype /Type1
|
911 |
+
/Type /Font >>
|
912 |
+
endobj
|
913 |
+
% 'Page3': class PDFPage
|
914 |
+
51 0 obj
|
915 |
+
% Page dictionary
|
916 |
+
<< /Contents 96 0 R
|
917 |
+
/MediaBox [ 0
|
918 |
+
0
|
919 |
+
595.2756
|
920 |
+
841.8898 ]
|
921 |
+
/Parent 93 0 R
|
922 |
+
/Resources << /Font 1 0 R
|
923 |
+
/ProcSet [ /PDF
|
924 |
+
/Text
|
925 |
+
/ImageB
|
926 |
+
/ImageC
|
927 |
+
/ImageI ]
|
928 |
+
/XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
|
929 |
+
/Rotate 0
|
930 |
+
/Trans << >>
|
931 |
+
/Type /Page >>
|
932 |
+
endobj
|
933 |
+
% 'Page4': class PDFPage
|
934 |
+
52 0 obj
|
935 |
+
% Page dictionary
|
936 |
+
<< /Contents 97 0 R
|
937 |
+
/MediaBox [ 0
|
938 |
+
0
|
939 |
+
595.2756
|
940 |
+
841.8898 ]
|
941 |
+
/Parent 93 0 R
|
942 |
+
/Resources << /Font 1 0 R
|
943 |
+
/ProcSet [ /PDF
|
944 |
+
/Text
|
945 |
+
/ImageB
|
946 |
+
/ImageC
|
947 |
+
/ImageI ]
|
948 |
+
/XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
|
949 |
+
/Rotate 0
|
950 |
+
/Trans << >>
|
951 |
+
/Type /Page >>
|
952 |
+
endobj
|
953 |
+
% 'Annot.NUMBER43': class PDFDictionary
|
954 |
+
53 0 obj
|
955 |
+
<< /A << /S /URI
|
956 |
+
/Type /Action
|
957 |
+
/URI (http://www.magentocommerce.com/magento-connect/mage-expercash.html) >>
|
958 |
+
/Border [ 0
|
959 |
+
0
|
960 |
+
0 ]
|
961 |
+
/Rect [ 89.02291
|
962 |
+
294.8187
|
963 |
+
424.6929
|
964 |
+
306.8187 ]
|
965 |
+
/Subtype /Link
|
966 |
+
/Type /Annot >>
|
967 |
+
endobj
|
968 |
+
% 'Page5': class PDFPage
|
969 |
+
54 0 obj
|
970 |
+
% Page dictionary
|
971 |
+
<< /Annots [ 53 0 R ]
|
972 |
+
/Contents 98 0 R
|
973 |
+
/MediaBox [ 0
|
974 |
+
0
|
975 |
+
595.2756
|
976 |
+
841.8898 ]
|
977 |
+
/Parent 93 0 R
|
978 |
+
/Resources << /Font 1 0 R
|
979 |
+
/ProcSet [ /PDF
|
980 |
+
/Text
|
981 |
+
/ImageB
|
982 |
+
/ImageC
|
983 |
+
/ImageI ]
|
984 |
+
/XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
|
985 |
+
/Rotate 0
|
986 |
+
/Trans << >>
|
987 |
+
/Type /Page >>
|
988 |
+
endobj
|
989 |
+
% 'Annot.NUMBER44': class PDFDictionary
|
990 |
+
55 0 obj
|
991 |
+
<< /A << /S /URI
|
992 |
+
/Type /Action
|
993 |
+
/URI (https://) >>
|
994 |
+
/Border [ 0
|
995 |
+
0
|
996 |
+
0 ]
|
997 |
+
/Rect [ 468.6147
|
998 |
+
298.8187
|
999 |
+
501.4147
|
1000 |
+
310.8187 ]
|
1001 |
+
/Subtype /Link
|
1002 |
+
/Type /Annot >>
|
1003 |
+
endobj
|
1004 |
+
% 'Page6': class PDFPage
|
1005 |
+
56 0 obj
|
1006 |
+
% Page dictionary
|
1007 |
+
<< /Annots [ 55 0 R ]
|
1008 |
+
/Contents 99 0 R
|
1009 |
+
/MediaBox [ 0
|
1010 |
+
0
|
1011 |
+
595.2756
|
1012 |
+
841.8898 ]
|
1013 |
+
/Parent 93 0 R
|
1014 |
+
/Resources << /Font 1 0 R
|
1015 |
+
/ProcSet [ /PDF
|
1016 |
+
/Text
|
1017 |
+
/ImageB
|
1018 |
+
/ImageC
|
1019 |
+
/ImageI ]
|
1020 |
+
/XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
|
1021 |
+
/Rotate 0
|
1022 |
+
/Trans << >>
|
1023 |
+
/Type /Page >>
|
1024 |
+
endobj
|
1025 |
+
% 'Page7': class PDFPage
|
1026 |
+
57 0 obj
|
1027 |
+
% Page dictionary
|
1028 |
+
<< /Contents 100 0 R
|
1029 |
+
/MediaBox [ 0
|
1030 |
+
0
|
1031 |
+
595.2756
|
1032 |
+
841.8898 ]
|
1033 |
+
/Parent 93 0 R
|
1034 |
+
/Resources << /Font 1 0 R
|
1035 |
+
/ProcSet [ /PDF
|
1036 |
+
/Text
|
1037 |
+
/ImageB
|
1038 |
+
/ImageC
|
1039 |
+
/ImageI ]
|
1040 |
+
/XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
|
1041 |
+
/Rotate 0
|
1042 |
+
/Trans << >>
|
1043 |
+
/Type /Page >>
|
1044 |
+
endobj
|
1045 |
+
% 'Page8': class PDFPage
|
1046 |
+
58 0 obj
|
1047 |
+
% Page dictionary
|
1048 |
+
<< /Contents 101 0 R
|
1049 |
+
/MediaBox [ 0
|
1050 |
+
0
|
1051 |
+
595.2756
|
1052 |
+
841.8898 ]
|
1053 |
+
/Parent 93 0 R
|
1054 |
+
/Resources << /Font 1 0 R
|
1055 |
+
/ProcSet [ /PDF
|
1056 |
+
/Text
|
1057 |
+
/ImageB
|
1058 |
+
/ImageC
|
1059 |
+
/ImageI ]
|
1060 |
+
/XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
|
1061 |
+
/Rotate 0
|
1062 |
+
/Trans << >>
|
1063 |
+
/Type /Page >>
|
1064 |
+
endobj
|
1065 |
+
% 'F4': class PDFType1Font
|
1066 |
+
59 0 obj
|
1067 |
+
% Font Helvetica-Oblique
|
1068 |
+
<< /BaseFont /Helvetica-Oblique
|
1069 |
+
/Encoding /WinAnsiEncoding
|
1070 |
+
/Name /F4
|
1071 |
+
/Subtype /Type1
|
1072 |
+
/Type /Font >>
|
1073 |
+
endobj
|
1074 |
+
% 'Page9': class PDFPage
|
1075 |
+
60 0 obj
|
1076 |
+
% Page dictionary
|
1077 |
+
<< /Contents 102 0 R
|
1078 |
+
/MediaBox [ 0
|
1079 |
+
0
|
1080 |
+
595.2756
|
1081 |
+
841.8898 ]
|
1082 |
+
/Parent 93 0 R
|
1083 |
+
/Resources << /Font 1 0 R
|
1084 |
+
/ProcSet [ /PDF
|
1085 |
+
/Text
|
1086 |
+
/ImageB
|
1087 |
+
/ImageC
|
1088 |
+
/ImageI ]
|
1089 |
+
/XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
|
1090 |
+
/Rotate 0
|
1091 |
+
/Trans << >>
|
1092 |
+
/Type /Page >>
|
1093 |
+
endobj
|
1094 |
+
% 'Page10': class PDFPage
|
1095 |
+
61 0 obj
|
1096 |
+
% Page dictionary
|
1097 |
+
<< /Contents 103 0 R
|
1098 |
+
/MediaBox [ 0
|
1099 |
+
0
|
1100 |
+
595.2756
|
1101 |
+
841.8898 ]
|
1102 |
+
/Parent 93 0 R
|
1103 |
+
/Resources << /Font 1 0 R
|
1104 |
+
/ProcSet [ /PDF
|
1105 |
+
/Text
|
1106 |
+
/ImageB
|
1107 |
+
/ImageC
|
1108 |
+
/ImageI ]
|
1109 |
+
/XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
|
1110 |
+
/Rotate 0
|
1111 |
+
/Trans << >>
|
1112 |
+
/Type /Page >>
|
1113 |
+
endobj
|
1114 |
+
% 'Page11': class PDFPage
|
1115 |
+
62 0 obj
|
1116 |
+
% Page dictionary
|
1117 |
+
<< /Contents 104 0 R
|
1118 |
+
/MediaBox [ 0
|
1119 |
+
0
|
1120 |
+
595.2756
|
1121 |
+
841.8898 ]
|
1122 |
+
/Parent 93 0 R
|
1123 |
+
/Resources << /Font 1 0 R
|
1124 |
+
/ProcSet [ /PDF
|
1125 |
+
/Text
|
1126 |
+
/ImageB
|
1127 |
+
/ImageC
|
1128 |
+
/ImageI ]
|
1129 |
+
/XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
|
1130 |
+
/Rotate 0
|
1131 |
+
/Trans << >>
|
1132 |
+
/Type /Page >>
|
1133 |
+
endobj
|
1134 |
+
% 'Annot.NUMBER45': class PDFDictionary
|
1135 |
+
63 0 obj
|
1136 |
+
<< /A << /S /URI
|
1137 |
+
/Type /Action
|
1138 |
+
/URI (http://www.youtube.com/user/ExpercashDE) >>
|
1139 |
+
/Border [ 0
|
1140 |
+
0
|
1141 |
+
0 ]
|
1142 |
+
/Rect [ 128.2929
|
1143 |
+
286.8187
|
1144 |
+
321.1429
|
1145 |
+
298.8187 ]
|
1146 |
+
/Subtype /Link
|
1147 |
+
/Type /Annot >>
|
1148 |
+
endobj
|
1149 |
+
% 'Page12': class PDFPage
|
1150 |
+
64 0 obj
|
1151 |
+
% Page dictionary
|
1152 |
+
<< /Annots [ 63 0 R ]
|
1153 |
+
/Contents 105 0 R
|
1154 |
+
/MediaBox [ 0
|
1155 |
+
0
|
1156 |
+
595.2756
|
1157 |
+
841.8898 ]
|
1158 |
+
/Parent 93 0 R
|
1159 |
+
/Resources << /Font 1 0 R
|
1160 |
+
/ProcSet [ /PDF
|
1161 |
+
/Text
|
1162 |
+
/ImageB
|
1163 |
+
/ImageC
|
1164 |
+
/ImageI ]
|
1165 |
+
/XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
|
1166 |
+
/Rotate 0
|
1167 |
+
/Trans << >>
|
1168 |
+
/Type /Page >>
|
1169 |
+
endobj
|
1170 |
+
% 'Page13': class PDFPage
|
1171 |
+
65 0 obj
|
1172 |
+
% Page dictionary
|
1173 |
+
<< /Contents 106 0 R
|
1174 |
+
/MediaBox [ 0
|
1175 |
+
0
|
1176 |
+
595.2756
|
1177 |
+
841.8898 ]
|
1178 |
+
/Parent 93 0 R
|
1179 |
+
/Resources << /Font 1 0 R
|
1180 |
+
/ProcSet [ /PDF
|
1181 |
+
/Text
|
1182 |
+
/ImageB
|
1183 |
+
/ImageC
|
1184 |
+
/ImageI ]
|
1185 |
+
/XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
|
1186 |
+
/Rotate 0
|
1187 |
+
/Trans << >>
|
1188 |
+
/Type /Page >>
|
1189 |
+
endobj
|
1190 |
+
% 'Page14': class PDFPage
|
1191 |
+
66 0 obj
|
1192 |
+
% Page dictionary
|
1193 |
+
<< /Contents 107 0 R
|
1194 |
+
/MediaBox [ 0
|
1195 |
+
0
|
1196 |
+
595.2756
|
1197 |
+
841.8898 ]
|
1198 |
+
/Parent 93 0 R
|
1199 |
+
/Resources << /Font 1 0 R
|
1200 |
+
/ProcSet [ /PDF
|
1201 |
+
/Text
|
1202 |
+
/ImageB
|
1203 |
+
/ImageC
|
1204 |
+
/ImageI ]
|
1205 |
+
/XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
|
1206 |
+
/Rotate 0
|
1207 |
+
/Trans << >>
|
1208 |
+
/Type /Page >>
|
1209 |
+
endobj
|
1210 |
+
% 'Page15': class PDFPage
|
1211 |
+
67 0 obj
|
1212 |
+
% Page dictionary
|
1213 |
+
<< /Contents 108 0 R
|
1214 |
+
/MediaBox [ 0
|
1215 |
+
0
|
1216 |
+
595.2756
|
1217 |
+
841.8898 ]
|
1218 |
+
/Parent 93 0 R
|
1219 |
+
/Resources << /Font 1 0 R
|
1220 |
+
/ProcSet [ /PDF
|
1221 |
+
/Text
|
1222 |
+
/ImageB
|
1223 |
+
/ImageC
|
1224 |
+
/ImageI ]
|
1225 |
+
/XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
|
1226 |
+
/Rotate 0
|
1227 |
+
/Trans << >>
|
1228 |
+
/Type /Page >>
|
1229 |
+
endobj
|
1230 |
+
% 'Page16': class PDFPage
|
1231 |
+
68 0 obj
|
1232 |
+
% Page dictionary
|
1233 |
+
<< /Contents 109 0 R
|
1234 |
+
/MediaBox [ 0
|
1235 |
+
0
|
1236 |
+
595.2756
|
1237 |
+
841.8898 ]
|
1238 |
+
/Parent 93 0 R
|
1239 |
+
/Resources << /Font 1 0 R
|
1240 |
+
/ProcSet [ /PDF
|
1241 |
+
/Text
|
1242 |
+
/ImageB
|
1243 |
+
/ImageC
|
1244 |
+
/ImageI ]
|
1245 |
+
/XObject << /FormXob.ccf2ce60accb2f71ebb323971f816d0f 5 0 R >> >>
|
1246 |
+
/Rotate 0
|
1247 |
+
/Trans << >>
|
1248 |
+
/Type /Page >>
|
1249 |
+
endobj
|
1250 |
+
% 'R69': class PDFCatalog
|
1251 |
+
69 0 obj
|
1252 |
+
% Document Root
|
1253 |
+
<< /Outlines 71 0 R
|
1254 |
+
/PageLabels 110 0 R
|
1255 |
+
/PageMode /UseNone
|
1256 |
+
/Pages 93 0 R
|
1257 |
+
/Type /Catalog >>
|
1258 |
+
endobj
|
1259 |
+
% 'R70': class PDFInfo
|
1260 |
+
70 0 obj
|
1261 |
+
<< /Author ()
|
1262 |
+
/CreationDate (D:20150506161333-01'00')
|
1263 |
+
/Creator (\(unspecified\))
|
1264 |
+
/Keywords ()
|
1265 |
+
/Producer (ReportLab PDF Library - www.reportlab.com)
|
1266 |
+
/Subject (\(unspecified\))
|
1267 |
+
/Title () >>
|
1268 |
+
endobj
|
1269 |
+
% 'R71': class PDFOutlines
|
1270 |
+
71 0 obj
|
1271 |
+
<< /Count 28
|
1272 |
+
/First 72 0 R
|
1273 |
+
/Last 91 0 R
|
1274 |
+
/Type /Outlines >>
|
1275 |
+
endobj
|
1276 |
+
% 'Outline.0': class OutlineEntryObject
|
1277 |
+
72 0 obj
|
1278 |
+
<< /Dest [ 51 0 R
|
1279 |
+
/XYZ
|
1280 |
+
62.69291
|
1281 |
+
748.0687
|
1282 |
+
0 ]
|
1283 |
+
/Next 73 0 R
|
1284 |
+
/Parent 71 0 R
|
1285 |
+
/Title (\376\377\0001\000\240\000\240\000\240\000E\000i\000n\000l\000e\000i\000t\000u\000n\000g) >>
|
1286 |
+
endobj
|
1287 |
+
% 'Outline.1': class OutlineEntryObject
|
1288 |
+
73 0 obj
|
1289 |
+
<< /Count 1
|
1290 |
+
/Dest [ 51 0 R
|
1291 |
+
/XYZ
|
1292 |
+
62.69291
|
1293 |
+
631.0687
|
1294 |
+
0 ]
|
1295 |
+
/First 74 0 R
|
1296 |
+
/Last 74 0 R
|
1297 |
+
/Next 75 0 R
|
1298 |
+
/Parent 71 0 R
|
1299 |
+
/Prev 72 0 R
|
1300 |
+
/Title (\376\377\0002\000\240\000\240\000\240\000V\000o\000r\000a\000u\000s\000s\000e\000t\000z\000u\000n\000g\000e\000n) >>
|
1301 |
+
endobj
|
1302 |
+
% 'Outline.22.0': class OutlineEntryObject
|
1303 |
+
74 0 obj
|
1304 |
+
<< /Dest [ 51 0 R
|
1305 |
+
/XYZ
|
1306 |
+
62.69291
|
1307 |
+
598.0687
|
1308 |
+
0 ]
|
1309 |
+
/Parent 73 0 R
|
1310 |
+
/Title (\376\377\0002\000.\0001\000\240\000\240\000\240\000A\000l\000l\000g\000e\000m\000e\000i\000n) >>
|
1311 |
+
endobj
|
1312 |
+
% 'Outline.2': class OutlineEntryObject
|
1313 |
+
75 0 obj
|
1314 |
+
<< /Dest [ 54 0 R
|
1315 |
+
/XYZ
|
1316 |
+
62.69291
|
1317 |
+
748.0687
|
1318 |
+
0 ]
|
1319 |
+
/Next 76 0 R
|
1320 |
+
/Parent 71 0 R
|
1321 |
+
/Prev 73 0 R
|
1322 |
+
/Title (\376\377\0003\000\240\000\240\000\240\000I\000n\000s\000t\000a\000l\000l\000a\000t\000i\000o\000n) >>
|
1323 |
+
endobj
|
1324 |
+
% 'Outline.3': class OutlineEntryObject
|
1325 |
+
76 0 obj
|
1326 |
+
<< /Count 4
|
1327 |
+
/Dest [ 56 0 R
|
1328 |
+
/XYZ
|
1329 |
+
62.69291
|
1330 |
+
748.0687
|
1331 |
+
0 ]
|
1332 |
+
/First 77 0 R
|
1333 |
+
/Last 78 0 R
|
1334 |
+
/Next 81 0 R
|
1335 |
+
/Parent 71 0 R
|
1336 |
+
/Prev 75 0 R
|
1337 |
+
/Title (\376\377\0004\000\240\000\240\000\240\000K\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n) >>
|
1338 |
+
endobj
|
1339 |
+
% 'Outline.23.0': class OutlineEntryObject
|
1340 |
+
77 0 obj
|
1341 |
+
<< /Dest [ 56 0 R
|
1342 |
+
/XYZ
|
1343 |
+
62.69291
|
1344 |
+
631.0687
|
1345 |
+
0 ]
|
1346 |
+
/Next 78 0 R
|
1347 |
+
/Parent 76 0 R
|
1348 |
+
/Title (\376\377\0004\000.\0001\000\240\000\240\000\240\000Z\000a\000h\000l\000u\000n\000g\000s\000d\000i\000e\000n\000s\000t\000e) >>
|
1349 |
+
endobj
|
1350 |
+
% 'Outline.23.1': class OutlineEntryObject
|
1351 |
+
78 0 obj
|
1352 |
+
<< /Count 2
|
1353 |
+
/Dest [ 57 0 R
|
1354 |
+
/XYZ
|
1355 |
+
62.69291
|
1356 |
+
748.0687
|
1357 |
+
0 ]
|
1358 |
+
/First 79 0 R
|
1359 |
+
/Last 80 0 R
|
1360 |
+
/Parent 76 0 R
|
1361 |
+
/Prev 77 0 R
|
1362 |
+
/Title (\376\377\0004\000.\0002\000\240\000\240\000\240\000Z\000a\000h\000l\000u\000n\000g\000s\000m\000e\000t\000h\000o\000d\000e\000n) >>
|
1363 |
+
endobj
|
1364 |
+
% 'Outline.24.0': class OutlineEntryObject
|
1365 |
+
79 0 obj
|
1366 |
+
<< /Dest [ 61 0 R
|
1367 |
+
/XYZ
|
1368 |
+
62.69291
|
1369 |
+
748.0687
|
1370 |
+
0 ]
|
1371 |
+
/Next 80 0 R
|
1372 |
+
/Parent 78 0 R
|
1373 |
+
/Title (\376\377\0004\000.\0002\000.\0001\000\240\000\240\000\240\000Z\000a\000h\000l\000u\000n\000g\000s\000t\000y\000p\000e\000n) >>
|
1374 |
+
endobj
|
1375 |
+
% 'Outline.24.1': class OutlineEntryObject
|
1376 |
+
80 0 obj
|
1377 |
+
<< /Dest [ 62 0 R
|
1378 |
+
/XYZ
|
1379 |
+
62.69291
|
1380 |
+
718.0687
|
1381 |
+
0 ]
|
1382 |
+
/Parent 78 0 R
|
1383 |
+
/Prev 79 0 R
|
1384 |
+
/Title (\376\377\0004\000.\0002\000.\0002\000\240\000\240\000\240\000Z\000a\000h\000l\000u\000n\000g\000s\000s\000t\000a\000t\000u\000s) >>
|
1385 |
+
endobj
|
1386 |
+
% 'Outline.4': class OutlineEntryObject
|
1387 |
+
81 0 obj
|
1388 |
+
<< /Count 2
|
1389 |
+
/Dest [ 64 0 R
|
1390 |
+
/XYZ
|
1391 |
+
62.69291
|
1392 |
+
748.0687
|
1393 |
+
0 ]
|
1394 |
+
/First 82 0 R
|
1395 |
+
/Last 83 0 R
|
1396 |
+
/Next 84 0 R
|
1397 |
+
/Parent 71 0 R
|
1398 |
+
/Prev 76 0 R
|
1399 |
+
/Title (\376\377\0005\000\240\000\240\000\240\000B\000e\000d\000i\000e\000n\000u\000n\000g) >>
|
1400 |
+
endobj
|
1401 |
+
% 'Outline.25.0': class OutlineEntryObject
|
1402 |
+
82 0 obj
|
1403 |
+
<< /Dest [ 64 0 R
|
1404 |
+
/XYZ
|
1405 |
+
62.69291
|
1406 |
+
715.0687
|
1407 |
+
0 ]
|
1408 |
+
/Next 83 0 R
|
1409 |
+
/Parent 81 0 R
|
1410 |
+
/Title (\376\377\0005\000.\0001\000\240\000\240\000\240\000R\000e\000c\000h\000n\000u\000n\000g\000s\000e\000r\000s\000t\000e\000l\000l\000u\000n\000g\000/\000C\000a\000p\000t\000u\000r\000e) >>
|
1411 |
+
endobj
|
1412 |
+
% 'Outline.25.1': class OutlineEntryObject
|
1413 |
+
83 0 obj
|
1414 |
+
<< /Dest [ 64 0 R
|
1415 |
+
/XYZ
|
1416 |
+
62.69291
|
1417 |
+
553.0687
|
1418 |
+
0 ]
|
1419 |
+
/Parent 81 0 R
|
1420 |
+
/Prev 82 0 R
|
1421 |
+
/Title (\376\377\0005\000.\0002\000\240\000\240\000\240\000B\000e\000s\000o\000n\000d\000e\000r\000h\000e\000i\000t\000e\000n\000 \000M\000a\000s\000t\000e\000r\000P\000a\000s\000s\000 \000F\000u\000l\000l\000c\000h\000e\000c\000k\000o\000u\000t) >>
|
1422 |
+
endobj
|
1423 |
+
% 'Outline.5': class OutlineEntryObject
|
1424 |
+
84 0 obj
|
1425 |
+
<< /Dest [ 64 0 R
|
1426 |
+
/XYZ
|
1427 |
+
62.69291
|
1428 |
+
361.0687
|
1429 |
+
0 ]
|
1430 |
+
/Next 85 0 R
|
1431 |
+
/Parent 71 0 R
|
1432 |
+
/Prev 81 0 R
|
1433 |
+
/Title (\376\377\0006\000\240\000\240\000\240\000S\000c\000r\000e\000e\000n\000c\000a\000s\000t) >>
|
1434 |
+
endobj
|
1435 |
+
% 'Outline.6': class OutlineEntryObject
|
1436 |
+
85 0 obj
|
1437 |
+
<< /Count 1
|
1438 |
+
/Dest [ 65 0 R
|
1439 |
+
/XYZ
|
1440 |
+
62.69291
|
1441 |
+
748.0687
|
1442 |
+
0 ]
|
1443 |
+
/First 86 0 R
|
1444 |
+
/Last 86 0 R
|
1445 |
+
/Next 87 0 R
|
1446 |
+
/Parent 71 0 R
|
1447 |
+
/Prev 84 0 R
|
1448 |
+
/Title (\376\377\0007\000\240\000\240\000\240\000D\000e\000s\000i\000g\000n) >>
|
1449 |
+
endobj
|
1450 |
+
% 'Outline.26.0': class OutlineEntryObject
|
1451 |
+
86 0 obj
|
1452 |
+
<< /Dest [ 65 0 R
|
1453 |
+
/XYZ
|
1454 |
+
62.69291
|
1455 |
+
691.0687
|
1456 |
+
0 ]
|
1457 |
+
/Parent 85 0 R
|
1458 |
+
/Title (\376\377\0007\000.\0001\000\240\000\240\000\240\000M\000a\000s\000t\000e\000r\000P\000a\000s\000s\000 \000F\000u\000l\000l\000c\000h\000e\000c\000k\000o\000u\000t) >>
|
1459 |
+
endobj
|
1460 |
+
% 'Outline.7': class OutlineEntryObject
|
1461 |
+
87 0 obj
|
1462 |
+
<< /Count 3
|
1463 |
+
/Dest [ 66 0 R
|
1464 |
+
/XYZ
|
1465 |
+
62.69291
|
1466 |
+
748.0687
|
1467 |
+
0 ]
|
1468 |
+
/First 88 0 R
|
1469 |
+
/Last 90 0 R
|
1470 |
+
/Next 91 0 R
|
1471 |
+
/Parent 71 0 R
|
1472 |
+
/Prev 85 0 R
|
1473 |
+
/Title (\376\377\0008\000\240\000\240\000\240\000D\000e\000i\000n\000s\000t\000a\000l\000l\000a\000t\000i\000o\000n) >>
|
1474 |
+
endobj
|
1475 |
+
% 'Outline.27.0': class OutlineEntryObject
|
1476 |
+
88 0 obj
|
1477 |
+
<< /Dest [ 66 0 R
|
1478 |
+
/XYZ
|
1479 |
+
62.69291
|
1480 |
+
494.0687
|
1481 |
+
0 ]
|
1482 |
+
/Next 89 0 R
|
1483 |
+
/Parent 87 0 R
|
1484 |
+
/Title (\376\377\0008\000.\0001\000\240\000\240\000\240\000P\000e\000r\000 \000M\000a\000g\000e\000n\000t\000o\000 \000C\000o\000n\000n\000e\000c\000t\000 \000M\000a\000n\000a\000g\000e\000r) >>
|
1485 |
+
endobj
|
1486 |
+
% 'Outline.27.1': class OutlineEntryObject
|
1487 |
+
89 0 obj
|
1488 |
+
<< /Dest [ 67 0 R
|
1489 |
+
/XYZ
|
1490 |
+
62.69291
|
1491 |
+
748.0687
|
1492 |
+
0 ]
|
1493 |
+
/Next 90 0 R
|
1494 |
+
/Parent 87 0 R
|
1495 |
+
/Prev 88 0 R
|
1496 |
+
/Title (\376\377\0008\000.\0002\000\240\000\240\000\240\000A\000u\000f\000 \000D\000a\000t\000e\000i\000e\000b\000e\000n\000e) >>
|
1497 |
+
endobj
|
1498 |
+
% 'Outline.27.2': class OutlineEntryObject
|
1499 |
+
90 0 obj
|
1500 |
+
<< /Dest [ 67 0 R
|
1501 |
+
/XYZ
|
1502 |
+
62.69291
|
1503 |
+
532.0687
|
1504 |
+
0 ]
|
1505 |
+
/Parent 87 0 R
|
1506 |
+
/Prev 89 0 R
|
1507 |
+
/Title (\376\377\0008\000.\0003\000\240\000\240\000\240\000D\000a\000t\000e\000n\000b\000a\000n\000k) >>
|
1508 |
+
endobj
|
1509 |
+
% 'Outline.8': class OutlineEntryObject
|
1510 |
+
91 0 obj
|
1511 |
+
<< /Count 1
|
1512 |
+
/Dest [ 67 0 R
|
1513 |
+
/XYZ
|
1514 |
+
62.69291
|
1515 |
+
322.0687
|
1516 |
+
0 ]
|
1517 |
+
/First 92 0 R
|
1518 |
+
/Last 92 0 R
|
1519 |
+
/Parent 71 0 R
|
1520 |
+
/Prev 87 0 R
|
1521 |
+
/Title (\376\377\0009\000\240\000\240\000\240\000M\000i\000g\000r\000a\000t\000i\000o\000n\000 \000a\000u\000f\000 \000n\000e\000u\000e\000 \000V\000e\000r\000s\000i\000o\000n) >>
|
1522 |
+
endobj
|
1523 |
+
% 'Outline.28.0': class OutlineEntryObject
|
1524 |
+
92 0 obj
|
1525 |
+
<< /Dest [ 68 0 R
|
1526 |
+
/XYZ
|
1527 |
+
62.69291
|
1528 |
+
718.0687
|
1529 |
+
0 ]
|
1530 |
+
/Parent 91 0 R
|
1531 |
+
/Title (\376\377\0009\000.\0001\000\240\000\240\000\240\000A\000l\000t\000e\000 \000V\000e\000r\000s\000i\000o\000n\000 \000d\000e\000i\000n\000s\000t\000a\000l\000l\000i\000e\000r\000e\000n) >>
|
1532 |
+
endobj
|
1533 |
+
% 'R93': class PDFPages
|
1534 |
+
93 0 obj
|
1535 |
+
% page tree
|
1536 |
+
<< /Count 16
|
1537 |
+
/Kids [ 6 0 R
|
1538 |
+
49 0 R
|
1539 |
+
51 0 R
|
1540 |
+
52 0 R
|
1541 |
+
54 0 R
|
1542 |
+
56 0 R
|
1543 |
+
57 0 R
|
1544 |
+
58 0 R
|
1545 |
+
60 0 R
|
1546 |
+
61 0 R
|
1547 |
+
62 0 R
|
1548 |
+
64 0 R
|
1549 |
+
65 0 R
|
1550 |
+
66 0 R
|
1551 |
+
67 0 R
|
1552 |
+
68 0 R ]
|
1553 |
+
/Type /Pages >>
|
1554 |
+
endobj
|
1555 |
+
% 'R94': class PDFStream
|
1556 |
+
94 0 obj
|
1557 |
+
% page stream
|
1558 |
+
<< /Length 5341 >>
|
1559 |
+
stream
|
1560 |
+
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
1561 |
+
q
|
1562 |
+
1 0 0 1 62.69291 742.0687 cm
|
1563 |
+
Q
|
1564 |
+
q
|
1565 |
+
1 0 0 1 62.69291 730.0687 cm
|
1566 |
+
q
|
1567 |
+
0 0 0 rg
|
1568 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1569 |
+
Q
|
1570 |
+
Q
|
1571 |
+
q
|
1572 |
+
1 0 0 1 62.69291 718.0687 cm
|
1573 |
+
q
|
1574 |
+
0 0 0 rg
|
1575 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1576 |
+
Q
|
1577 |
+
Q
|
1578 |
+
q
|
1579 |
+
1 0 0 1 62.69291 706.0687 cm
|
1580 |
+
q
|
1581 |
+
0 0 0 rg
|
1582 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1583 |
+
Q
|
1584 |
+
Q
|
1585 |
+
q
|
1586 |
+
1 0 0 1 62.69291 706.0687 cm
|
1587 |
+
Q
|
1588 |
+
q
|
1589 |
+
1 0 0 1 62.69291 677.7223 cm
|
1590 |
+
n 0 14.17323 m 469.8898 14.17323 l S
|
1591 |
+
Q
|
1592 |
+
q
|
1593 |
+
1 0 0 1 62.69291 659.7223 cm
|
1594 |
+
q
|
1595 |
+
0 0 0 rg
|
1596 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Magento Extension zur Einbindung von Zahlungsmethoden f\374r den Zahlungsdienstleister Expercash) Tj T* ET
|
1597 |
+
Q
|
1598 |
+
Q
|
1599 |
+
q
|
1600 |
+
1 0 0 1 62.69291 631.3758 cm
|
1601 |
+
n 0 14.17323 m 469.8898 14.17323 l S
|
1602 |
+
Q
|
1603 |
+
q
|
1604 |
+
1 0 0 1 62.69291 625.3758 cm
|
1605 |
+
Q
|
1606 |
+
q
|
1607 |
+
1 0 0 1 62.69291 613.3758 cm
|
1608 |
+
q
|
1609 |
+
0 0 0 rg
|
1610 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1611 |
+
Q
|
1612 |
+
Q
|
1613 |
+
q
|
1614 |
+
1 0 0 1 62.69291 601.3758 cm
|
1615 |
+
q
|
1616 |
+
0 0 0 rg
|
1617 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1618 |
+
Q
|
1619 |
+
Q
|
1620 |
+
q
|
1621 |
+
1 0 0 1 62.69291 589.3758 cm
|
1622 |
+
q
|
1623 |
+
0 0 0 rg
|
1624 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1625 |
+
Q
|
1626 |
+
Q
|
1627 |
+
q
|
1628 |
+
1 0 0 1 62.69291 577.3758 cm
|
1629 |
+
q
|
1630 |
+
0 0 0 rg
|
1631 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1632 |
+
Q
|
1633 |
+
Q
|
1634 |
+
q
|
1635 |
+
1 0 0 1 62.69291 565.3758 cm
|
1636 |
+
q
|
1637 |
+
0 0 0 rg
|
1638 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1639 |
+
Q
|
1640 |
+
Q
|
1641 |
+
q
|
1642 |
+
1 0 0 1 62.69291 553.3758 cm
|
1643 |
+
q
|
1644 |
+
0 0 0 rg
|
1645 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1646 |
+
Q
|
1647 |
+
Q
|
1648 |
+
q
|
1649 |
+
1 0 0 1 62.69291 541.3758 cm
|
1650 |
+
q
|
1651 |
+
0 0 0 rg
|
1652 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1653 |
+
Q
|
1654 |
+
Q
|
1655 |
+
q
|
1656 |
+
1 0 0 1 62.69291 529.3758 cm
|
1657 |
+
q
|
1658 |
+
0 0 0 rg
|
1659 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1660 |
+
Q
|
1661 |
+
Q
|
1662 |
+
q
|
1663 |
+
1 0 0 1 62.69291 517.3758 cm
|
1664 |
+
q
|
1665 |
+
0 0 0 rg
|
1666 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1667 |
+
Q
|
1668 |
+
Q
|
1669 |
+
q
|
1670 |
+
1 0 0 1 62.69291 505.3758 cm
|
1671 |
+
q
|
1672 |
+
0 0 0 rg
|
1673 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1674 |
+
Q
|
1675 |
+
Q
|
1676 |
+
q
|
1677 |
+
1 0 0 1 62.69291 505.3758 cm
|
1678 |
+
Q
|
1679 |
+
q
|
1680 |
+
1 0 0 1 85.03937 411.3849 cm
|
1681 |
+
q
|
1682 |
+
425.1969 0 0 93.99088 0 0 cm
|
1683 |
+
/FormXob.debfe39a01d8602d733fbbcad4ae132a Do
|
1684 |
+
Q
|
1685 |
+
Q
|
1686 |
+
q
|
1687 |
+
1 0 0 1 62.69291 405.3849 cm
|
1688 |
+
Q
|
1689 |
+
q
|
1690 |
+
1 0 0 1 62.69291 393.3849 cm
|
1691 |
+
q
|
1692 |
+
0 0 0 rg
|
1693 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1694 |
+
Q
|
1695 |
+
Q
|
1696 |
+
q
|
1697 |
+
1 0 0 1 62.69291 381.3849 cm
|
1698 |
+
q
|
1699 |
+
0 0 0 rg
|
1700 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1701 |
+
Q
|
1702 |
+
Q
|
1703 |
+
q
|
1704 |
+
1 0 0 1 62.69291 369.3849 cm
|
1705 |
+
q
|
1706 |
+
0 0 0 rg
|
1707 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1708 |
+
Q
|
1709 |
+
Q
|
1710 |
+
q
|
1711 |
+
1 0 0 1 62.69291 357.3849 cm
|
1712 |
+
q
|
1713 |
+
0 0 0 rg
|
1714 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1715 |
+
Q
|
1716 |
+
Q
|
1717 |
+
q
|
1718 |
+
1 0 0 1 62.69291 345.3849 cm
|
1719 |
+
q
|
1720 |
+
0 0 0 rg
|
1721 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1722 |
+
Q
|
1723 |
+
Q
|
1724 |
+
q
|
1725 |
+
1 0 0 1 62.69291 333.3849 cm
|
1726 |
+
q
|
1727 |
+
0 0 0 rg
|
1728 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1729 |
+
Q
|
1730 |
+
Q
|
1731 |
+
q
|
1732 |
+
1 0 0 1 62.69291 321.3849 cm
|
1733 |
+
q
|
1734 |
+
0 0 0 rg
|
1735 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1736 |
+
Q
|
1737 |
+
Q
|
1738 |
+
q
|
1739 |
+
1 0 0 1 62.69291 309.3849 cm
|
1740 |
+
q
|
1741 |
+
0 0 0 rg
|
1742 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1743 |
+
Q
|
1744 |
+
Q
|
1745 |
+
q
|
1746 |
+
1 0 0 1 62.69291 297.3849 cm
|
1747 |
+
q
|
1748 |
+
0 0 0 rg
|
1749 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1750 |
+
Q
|
1751 |
+
Q
|
1752 |
+
q
|
1753 |
+
1 0 0 1 62.69291 285.3849 cm
|
1754 |
+
q
|
1755 |
+
0 0 0 rg
|
1756 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1757 |
+
Q
|
1758 |
+
Q
|
1759 |
+
q
|
1760 |
+
1 0 0 1 62.69291 273.3849 cm
|
1761 |
+
q
|
1762 |
+
0 0 0 rg
|
1763 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1764 |
+
Q
|
1765 |
+
Q
|
1766 |
+
q
|
1767 |
+
1 0 0 1 62.69291 261.3849 cm
|
1768 |
+
q
|
1769 |
+
0 0 0 rg
|
1770 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1771 |
+
Q
|
1772 |
+
Q
|
1773 |
+
q
|
1774 |
+
1 0 0 1 62.69291 249.3849 cm
|
1775 |
+
q
|
1776 |
+
0 0 0 rg
|
1777 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1778 |
+
Q
|
1779 |
+
Q
|
1780 |
+
q
|
1781 |
+
1 0 0 1 62.69291 237.3849 cm
|
1782 |
+
q
|
1783 |
+
0 0 0 rg
|
1784 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1785 |
+
Q
|
1786 |
+
Q
|
1787 |
+
q
|
1788 |
+
1 0 0 1 62.69291 225.3849 cm
|
1789 |
+
q
|
1790 |
+
0 0 0 rg
|
1791 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1792 |
+
Q
|
1793 |
+
Q
|
1794 |
+
q
|
1795 |
+
1 0 0 1 62.69291 213.3849 cm
|
1796 |
+
q
|
1797 |
+
0 0 0 rg
|
1798 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
1799 |
+
Q
|
1800 |
+
Q
|
1801 |
+
q
|
1802 |
+
1 0 0 1 62.69291 213.3849 cm
|
1803 |
+
Q
|
1804 |
+
q
|
1805 |
+
1 0 0 1 62.69291 207.3849 cm
|
1806 |
+
Q
|
1807 |
+
q
|
1808 |
+
1 0 0 1 62.69291 192.3849 cm
|
1809 |
+
0 0 0 rg
|
1810 |
+
BT /F1 10 Tf 12 TL ET
|
1811 |
+
q
|
1812 |
+
1 0 0 1 6 3 cm
|
1813 |
+
q
|
1814 |
+
0 0 0 rg
|
1815 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 4.69937 0 Td (Modulversion:) Tj T* -4.69937 0 Td ET
|
1816 |
+
Q
|
1817 |
+
Q
|
1818 |
+
q
|
1819 |
+
1 0 0 1 91.03937 3 cm
|
1820 |
+
q
|
1821 |
+
0 0 0 rg
|
1822 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (15.05.06) Tj T* ET
|
1823 |
+
Q
|
1824 |
+
Q
|
1825 |
+
q
|
1826 |
+
Q
|
1827 |
+
Q
|
1828 |
+
q
|
1829 |
+
1 0 0 1 62.69291 177.3849 cm
|
1830 |
+
0 0 0 rg
|
1831 |
+
BT /F1 10 Tf 12 TL ET
|
1832 |
+
q
|
1833 |
+
1 0 0 1 6 3 cm
|
1834 |
+
q
|
1835 |
+
0 0 0 rg
|
1836 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 42.47937 0 Td (Firma:) Tj T* -42.47937 0 Td ET
|
1837 |
+
Q
|
1838 |
+
Q
|
1839 |
+
q
|
1840 |
+
1 0 0 1 91.03937 3 cm
|
1841 |
+
q
|
1842 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Netresearch GmbH & Co.KG) Tj T* ET
|
1843 |
+
Q
|
1844 |
+
Q
|
1845 |
+
q
|
1846 |
+
Q
|
1847 |
+
Q
|
1848 |
+
q
|
1849 |
+
1 0 0 1 62.69291 162.3849 cm
|
1850 |
+
0 0 0 rg
|
1851 |
+
BT /F1 10 Tf 12 TL ET
|
1852 |
+
q
|
1853 |
+
1 0 0 1 6 3 cm
|
1854 |
+
q
|
1855 |
+
0 0 0 rg
|
1856 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 31.37937 0 Td (Autoren:) Tj T* -31.37937 0 Td ET
|
1857 |
+
Q
|
1858 |
+
Q
|
1859 |
+
q
|
1860 |
+
1 0 0 1 91.03937 3 cm
|
1861 |
+
q
|
1862 |
+
0 0 0 rg
|
1863 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Sebastian Ertner, Michael L\374hr) Tj T* ET
|
1864 |
+
Q
|
1865 |
+
Q
|
1866 |
+
q
|
1867 |
+
Q
|
1868 |
+
Q
|
1869 |
+
q
|
1870 |
+
1 0 0 1 62.69291 147.3849 cm
|
1871 |
+
0 0 0 rg
|
1872 |
+
BT /F1 10 Tf 12 TL ET
|
1873 |
+
q
|
1874 |
+
1 0 0 1 6 3 cm
|
1875 |
+
q
|
1876 |
+
0 0 0 rg
|
1877 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 38.59937 0 Td (Datum:) Tj T* -38.59937 0 Td ET
|
1878 |
+
Q
|
1879 |
+
Q
|
1880 |
+
q
|
1881 |
+
1 0 0 1 91.03937 3 cm
|
1882 |
+
q
|
1883 |
+
0 0 0 rg
|
1884 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (06.05.2015) Tj T* ET
|
1885 |
+
Q
|
1886 |
+
Q
|
1887 |
+
q
|
1888 |
+
Q
|
1889 |
+
Q
|
1890 |
+
q
|
1891 |
+
1 0 0 1 62.69291 147.3849 cm
|
1892 |
+
Q
|
1893 |
+
q
|
1894 |
+
1 0 0 1 411.0236 768.242 cm
|
1895 |
+
q
|
1896 |
+
127.5591 0 0 45.30135 0 0 cm
|
1897 |
+
/FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
|
1898 |
+
Q
|
1899 |
+
Q
|
1900 |
+
q
|
1901 |
+
1 0 0 1 56.69291 56.69291 cm
|
1902 |
+
0 0 0 rg
|
1903 |
+
BT /F1 10 Tf 12 TL ET
|
1904 |
+
q
|
1905 |
+
1 0 0 1 6 3 cm
|
1906 |
+
q
|
1907 |
+
0 0 0 rg
|
1908 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
|
1909 |
+
Q
|
1910 |
+
Q
|
1911 |
+
q
|
1912 |
+
1 0 0 1 246.9449 3 cm
|
1913 |
+
q
|
1914 |
+
0 0 0 rg
|
1915 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 209.4849 0 Td (1/16) Tj T* -209.4849 0 Td ET
|
1916 |
+
Q
|
1917 |
+
Q
|
1918 |
+
q
|
1919 |
+
Q
|
1920 |
+
Q
|
1921 |
+
|
1922 |
+
endstream
|
1923 |
+
endobj
|
1924 |
+
% 'R95': class PDFStream
|
1925 |
+
95 0 obj
|
1926 |
+
% page stream
|
1927 |
+
<< /Length 6064 >>
|
1928 |
+
stream
|
1929 |
+
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
1930 |
+
q
|
1931 |
+
1 0 0 1 62.69291 727.0687 cm
|
1932 |
+
q
|
1933 |
+
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (Expercash - Benutzerdokumentation) Tj T* ET
|
1934 |
+
Q
|
1935 |
+
Q
|
1936 |
+
q
|
1937 |
+
1 0 0 1 62.69291 343.0687 cm
|
1938 |
+
0 0 0 rg
|
1939 |
+
BT /F1 10 Tf 12 TL ET
|
1940 |
+
q
|
1941 |
+
1 0 0 1 0 363 cm
|
1942 |
+
q
|
1943 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (1 Einleitung) Tj T* ET
|
1944 |
+
Q
|
1945 |
+
Q
|
1946 |
+
q
|
1947 |
+
1 0 0 1 397.8898 363 cm
|
1948 |
+
q
|
1949 |
+
0 0 .501961 rg
|
1950 |
+
0 0 .501961 RG
|
1951 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (3) Tj T* -66.44 0 Td ET
|
1952 |
+
Q
|
1953 |
+
Q
|
1954 |
+
q
|
1955 |
+
1 0 0 1 0 345 cm
|
1956 |
+
q
|
1957 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (2 Voraussetzungen) Tj T* ET
|
1958 |
+
Q
|
1959 |
+
Q
|
1960 |
+
q
|
1961 |
+
1 0 0 1 397.8898 345 cm
|
1962 |
+
q
|
1963 |
+
0 0 .501961 rg
|
1964 |
+
0 0 .501961 RG
|
1965 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (3) Tj T* -66.44 0 Td ET
|
1966 |
+
Q
|
1967 |
+
Q
|
1968 |
+
q
|
1969 |
+
1 0 0 1 0 327 cm
|
1970 |
+
q
|
1971 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (2.1 Allgemein) Tj T* ET
|
1972 |
+
Q
|
1973 |
+
Q
|
1974 |
+
q
|
1975 |
+
1 0 0 1 397.8898 327 cm
|
1976 |
+
q
|
1977 |
+
0 0 .501961 rg
|
1978 |
+
0 0 .501961 RG
|
1979 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (3) Tj T* -66.44 0 Td ET
|
1980 |
+
Q
|
1981 |
+
Q
|
1982 |
+
q
|
1983 |
+
1 0 0 1 0 309 cm
|
1984 |
+
q
|
1985 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (3 Installation) Tj T* ET
|
1986 |
+
Q
|
1987 |
+
Q
|
1988 |
+
q
|
1989 |
+
1 0 0 1 397.8898 309 cm
|
1990 |
+
q
|
1991 |
+
0 0 .501961 rg
|
1992 |
+
0 0 .501961 RG
|
1993 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (5) Tj T* -66.44 0 Td ET
|
1994 |
+
Q
|
1995 |
+
Q
|
1996 |
+
q
|
1997 |
+
1 0 0 1 0 291 cm
|
1998 |
+
q
|
1999 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (4 Konfiguration) Tj T* ET
|
2000 |
+
Q
|
2001 |
+
Q
|
2002 |
+
q
|
2003 |
+
1 0 0 1 397.8898 291 cm
|
2004 |
+
q
|
2005 |
+
0 0 .501961 rg
|
2006 |
+
0 0 .501961 RG
|
2007 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 66.44 0 Td (6) Tj T* -66.44 0 Td ET
|
2008 |
+
Q
|
2009 |
+
Q
|
2010 |
+
q
|
2011 |
+
1 0 0 1 0 273 cm
|
2012 |
+
q
|
2013 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.1 Zahlungsdienste) Tj T* ET
|
2014 |
+
Q
|
2015 |
+
Q
|
2016 |
+
q
|
2017 |
+
1 0 0 1 397.8898 273 cm
|
2018 |
+
q
|
2019 |
+
0 0 .501961 rg
|
2020 |
+
0 0 .501961 RG
|
2021 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (6) Tj T* -66.44 0 Td ET
|
2022 |
+
Q
|
2023 |
+
Q
|
2024 |
+
q
|
2025 |
+
1 0 0 1 0 255 cm
|
2026 |
+
q
|
2027 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.2 Zahlungsmethoden) Tj T* ET
|
2028 |
+
Q
|
2029 |
+
Q
|
2030 |
+
q
|
2031 |
+
1 0 0 1 397.8898 255 cm
|
2032 |
+
q
|
2033 |
+
0 0 .501961 rg
|
2034 |
+
0 0 .501961 RG
|
2035 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 66.44 0 Td (7) Tj T* -66.44 0 Td ET
|
2036 |
+
Q
|
2037 |
+
Q
|
2038 |
+
q
|
2039 |
+
1 0 0 1 0 237 cm
|
2040 |
+
q
|
2041 |
+
BT 1 0 0 1 40 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.2.1 Zahlungstypen) Tj T* ET
|
2042 |
+
Q
|
2043 |
+
Q
|
2044 |
+
q
|
2045 |
+
1 0 0 1 397.8898 237 cm
|
2046 |
+
q
|
2047 |
+
0 0 .501961 rg
|
2048 |
+
0 0 .501961 RG
|
2049 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (10) Tj T* -60.88 0 Td ET
|
2050 |
+
Q
|
2051 |
+
Q
|
2052 |
+
q
|
2053 |
+
1 0 0 1 0 219 cm
|
2054 |
+
q
|
2055 |
+
BT 1 0 0 1 40 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (4.2.2 Zahlungsstatus) Tj T* ET
|
2056 |
+
Q
|
2057 |
+
Q
|
2058 |
+
q
|
2059 |
+
1 0 0 1 397.8898 219 cm
|
2060 |
+
q
|
2061 |
+
0 0 .501961 rg
|
2062 |
+
0 0 .501961 RG
|
2063 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (11) Tj T* -60.88 0 Td ET
|
2064 |
+
Q
|
2065 |
+
Q
|
2066 |
+
q
|
2067 |
+
1 0 0 1 0 201 cm
|
2068 |
+
q
|
2069 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (5 Bedienung) Tj T* ET
|
2070 |
+
Q
|
2071 |
+
Q
|
2072 |
+
q
|
2073 |
+
1 0 0 1 397.8898 201 cm
|
2074 |
+
q
|
2075 |
+
0 0 .501961 rg
|
2076 |
+
0 0 .501961 RG
|
2077 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 60.88 0 Td (12) Tj T* -60.88 0 Td ET
|
2078 |
+
Q
|
2079 |
+
Q
|
2080 |
+
q
|
2081 |
+
1 0 0 1 0 183 cm
|
2082 |
+
q
|
2083 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (5.1 Rechnungserstellung/Capture) Tj T* ET
|
2084 |
+
Q
|
2085 |
+
Q
|
2086 |
+
q
|
2087 |
+
1 0 0 1 397.8898 183 cm
|
2088 |
+
q
|
2089 |
+
0 0 .501961 rg
|
2090 |
+
0 0 .501961 RG
|
2091 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (12) Tj T* -60.88 0 Td ET
|
2092 |
+
Q
|
2093 |
+
Q
|
2094 |
+
q
|
2095 |
+
1 0 0 1 0 165 cm
|
2096 |
+
q
|
2097 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (5.2 Besonderheiten MasterPass Fullcheckout) Tj T* ET
|
2098 |
+
Q
|
2099 |
+
Q
|
2100 |
+
q
|
2101 |
+
1 0 0 1 397.8898 165 cm
|
2102 |
+
q
|
2103 |
+
0 0 .501961 rg
|
2104 |
+
0 0 .501961 RG
|
2105 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (12) Tj T* -60.88 0 Td ET
|
2106 |
+
Q
|
2107 |
+
Q
|
2108 |
+
q
|
2109 |
+
1 0 0 1 0 147 cm
|
2110 |
+
q
|
2111 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (6 Screencast) Tj T* ET
|
2112 |
+
Q
|
2113 |
+
Q
|
2114 |
+
q
|
2115 |
+
1 0 0 1 397.8898 147 cm
|
2116 |
+
q
|
2117 |
+
0 0 .501961 rg
|
2118 |
+
0 0 .501961 RG
|
2119 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 60.88 0 Td (12) Tj T* -60.88 0 Td ET
|
2120 |
+
Q
|
2121 |
+
Q
|
2122 |
+
q
|
2123 |
+
1 0 0 1 0 129 cm
|
2124 |
+
q
|
2125 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (7 Design) Tj T* ET
|
2126 |
+
Q
|
2127 |
+
Q
|
2128 |
+
q
|
2129 |
+
1 0 0 1 397.8898 129 cm
|
2130 |
+
q
|
2131 |
+
0 0 .501961 rg
|
2132 |
+
0 0 .501961 RG
|
2133 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 60.88 0 Td (13) Tj T* -60.88 0 Td ET
|
2134 |
+
Q
|
2135 |
+
Q
|
2136 |
+
q
|
2137 |
+
1 0 0 1 0 111 cm
|
2138 |
+
q
|
2139 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (7.1 MasterPass Fullcheckout) Tj T* ET
|
2140 |
+
Q
|
2141 |
+
Q
|
2142 |
+
q
|
2143 |
+
1 0 0 1 397.8898 111 cm
|
2144 |
+
q
|
2145 |
+
0 0 .501961 rg
|
2146 |
+
0 0 .501961 RG
|
2147 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (13) Tj T* -60.88 0 Td ET
|
2148 |
+
Q
|
2149 |
+
Q
|
2150 |
+
q
|
2151 |
+
1 0 0 1 0 93 cm
|
2152 |
+
q
|
2153 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (8 Deinstallation) Tj T* ET
|
2154 |
+
Q
|
2155 |
+
Q
|
2156 |
+
q
|
2157 |
+
1 0 0 1 397.8898 93 cm
|
2158 |
+
q
|
2159 |
+
0 0 .501961 rg
|
2160 |
+
0 0 .501961 RG
|
2161 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 60.88 0 Td (14) Tj T* -60.88 0 Td ET
|
2162 |
+
Q
|
2163 |
+
Q
|
2164 |
+
q
|
2165 |
+
1 0 0 1 0 75 cm
|
2166 |
+
q
|
2167 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (8.1 Per Magento Connect Manager) Tj T* ET
|
2168 |
+
Q
|
2169 |
+
Q
|
2170 |
+
q
|
2171 |
+
1 0 0 1 397.8898 75 cm
|
2172 |
+
q
|
2173 |
+
0 0 .501961 rg
|
2174 |
+
0 0 .501961 RG
|
2175 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (14) Tj T* -60.88 0 Td ET
|
2176 |
+
Q
|
2177 |
+
Q
|
2178 |
+
q
|
2179 |
+
1 0 0 1 0 57 cm
|
2180 |
+
q
|
2181 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (8.2 Auf Dateiebene) Tj T* ET
|
2182 |
+
Q
|
2183 |
+
Q
|
2184 |
+
q
|
2185 |
+
1 0 0 1 397.8898 57 cm
|
2186 |
+
q
|
2187 |
+
0 0 .501961 rg
|
2188 |
+
0 0 .501961 RG
|
2189 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (15) Tj T* -60.88 0 Td ET
|
2190 |
+
Q
|
2191 |
+
Q
|
2192 |
+
q
|
2193 |
+
1 0 0 1 0 39 cm
|
2194 |
+
q
|
2195 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (8.3 Datenbank) Tj T* ET
|
2196 |
+
Q
|
2197 |
+
Q
|
2198 |
+
q
|
2199 |
+
1 0 0 1 397.8898 39 cm
|
2200 |
+
q
|
2201 |
+
0 0 .501961 rg
|
2202 |
+
0 0 .501961 RG
|
2203 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (15) Tj T* -60.88 0 Td ET
|
2204 |
+
Q
|
2205 |
+
Q
|
2206 |
+
q
|
2207 |
+
1 0 0 1 0 21 cm
|
2208 |
+
q
|
2209 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F2 10 Tf 0 0 .501961 rg (9 Migration auf neue Version) Tj T* ET
|
2210 |
+
Q
|
2211 |
+
Q
|
2212 |
+
q
|
2213 |
+
1 0 0 1 397.8898 21 cm
|
2214 |
+
q
|
2215 |
+
0 0 .501961 rg
|
2216 |
+
0 0 .501961 RG
|
2217 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 60.88 0 Td (15) Tj T* -60.88 0 Td ET
|
2218 |
+
Q
|
2219 |
+
Q
|
2220 |
+
q
|
2221 |
+
1 0 0 1 0 3 cm
|
2222 |
+
q
|
2223 |
+
BT 1 0 0 1 20 2 Tm 12 TL /F1 10 Tf 0 0 .501961 rg (9.1 Alte Version deinstallieren) Tj T* ET
|
2224 |
+
Q
|
2225 |
+
Q
|
2226 |
+
q
|
2227 |
+
1 0 0 1 397.8898 3 cm
|
2228 |
+
q
|
2229 |
+
0 0 .501961 rg
|
2230 |
+
0 0 .501961 RG
|
2231 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 60.88 0 Td (16) Tj T* -60.88 0 Td ET
|
2232 |
+
Q
|
2233 |
+
Q
|
2234 |
+
q
|
2235 |
+
Q
|
2236 |
+
Q
|
2237 |
+
q
|
2238 |
+
1 0 0 1 62.69291 343.0687 cm
|
2239 |
+
Q
|
2240 |
+
q
|
2241 |
+
1 0 0 1 411.0236 768.242 cm
|
2242 |
+
q
|
2243 |
+
127.5591 0 0 45.30135 0 0 cm
|
2244 |
+
/FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
|
2245 |
+
Q
|
2246 |
+
Q
|
2247 |
+
q
|
2248 |
+
1 0 0 1 56.69291 56.69291 cm
|
2249 |
+
0 0 0 rg
|
2250 |
+
BT /F1 10 Tf 12 TL ET
|
2251 |
+
q
|
2252 |
+
1 0 0 1 6 3 cm
|
2253 |
+
q
|
2254 |
+
0 0 0 rg
|
2255 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
|
2256 |
+
Q
|
2257 |
+
Q
|
2258 |
+
q
|
2259 |
+
1 0 0 1 246.9449 3 cm
|
2260 |
+
q
|
2261 |
+
0 0 0 rg
|
2262 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 209.4849 0 Td (2/16) Tj T* -209.4849 0 Td ET
|
2263 |
+
Q
|
2264 |
+
Q
|
2265 |
+
q
|
2266 |
+
Q
|
2267 |
+
Q
|
2268 |
+
|
2269 |
+
endstream
|
2270 |
+
endobj
|
2271 |
+
% 'R96': class PDFStream
|
2272 |
+
96 0 obj
|
2273 |
+
% page stream
|
2274 |
+
<< /Length 6306 >>
|
2275 |
+
stream
|
2276 |
+
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
2277 |
+
q
|
2278 |
+
1 0 0 1 62.69291 727.0687 cm
|
2279 |
+
q
|
2280 |
+
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (1 Einleitung) Tj T* ET
|
2281 |
+
Q
|
2282 |
+
Q
|
2283 |
+
q
|
2284 |
+
1 0 0 1 62.69291 715.0687 cm
|
2285 |
+
Q
|
2286 |
+
q
|
2287 |
+
1 0 0 1 62.69291 703.0687 cm
|
2288 |
+
q
|
2289 |
+
0 0 0 rg
|
2290 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
2291 |
+
Q
|
2292 |
+
Q
|
2293 |
+
q
|
2294 |
+
1 0 0 1 62.69291 703.0687 cm
|
2295 |
+
Q
|
2296 |
+
q
|
2297 |
+
1 0 0 1 62.69291 661.0687 cm
|
2298 |
+
q
|
2299 |
+
0 0 0 rg
|
2300 |
+
BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL 2.694976 Tw (Mit der Expercash Extension bietet der Payment-Service-Provider Expercash ein Zahlungsmodul f\374r) Tj T* 0 Tw 4.843307 Tw (Magento an. Es werden momentan die Zahlungsarten Lastschriftverfahren, Kreditkarte, Giropay,) Tj T* 0 Tw (Masterpass, Sofort\374berweisung und Barzahlen unterst\374tzt.) Tj T* ET
|
2301 |
+
Q
|
2302 |
+
Q
|
2303 |
+
q
|
2304 |
+
1 0 0 1 62.69291 655.0687 cm
|
2305 |
+
Q
|
2306 |
+
q
|
2307 |
+
1 0 0 1 62.69291 643.0687 cm
|
2308 |
+
q
|
2309 |
+
0 0 0 rg
|
2310 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
2311 |
+
Q
|
2312 |
+
Q
|
2313 |
+
q
|
2314 |
+
1 0 0 1 62.69291 643.0687 cm
|
2315 |
+
Q
|
2316 |
+
q
|
2317 |
+
1 0 0 1 62.69291 610.0687 cm
|
2318 |
+
q
|
2319 |
+
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (2 Voraussetzungen) Tj T* ET
|
2320 |
+
Q
|
2321 |
+
Q
|
2322 |
+
q
|
2323 |
+
1 0 0 1 62.69291 580.0687 cm
|
2324 |
+
q
|
2325 |
+
BT 1 0 0 1 0 3 Tm 18 TL /F2 15 Tf 0 .533333 .603922 rg (2.1 Allgemein) Tj T* ET
|
2326 |
+
Q
|
2327 |
+
Q
|
2328 |
+
q
|
2329 |
+
1 0 0 1 62.69291 568.0687 cm
|
2330 |
+
Q
|
2331 |
+
q
|
2332 |
+
1 0 0 1 62.69291 556.0687 cm
|
2333 |
+
q
|
2334 |
+
0 0 0 rg
|
2335 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
2336 |
+
Q
|
2337 |
+
Q
|
2338 |
+
q
|
2339 |
+
1 0 0 1 62.69291 556.0687 cm
|
2340 |
+
Q
|
2341 |
+
q
|
2342 |
+
1 0 0 1 62.69291 550.0687 cm
|
2343 |
+
Q
|
2344 |
+
q
|
2345 |
+
1 0 0 1 62.69291 550.0687 cm
|
2346 |
+
Q
|
2347 |
+
q
|
2348 |
+
1 0 0 1 62.69291 538.0687 cm
|
2349 |
+
0 0 0 rg
|
2350 |
+
BT /F1 10 Tf 12 TL ET
|
2351 |
+
q
|
2352 |
+
1 0 0 1 6 -3 cm
|
2353 |
+
q
|
2354 |
+
0 0 0 rg
|
2355 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
2356 |
+
Q
|
2357 |
+
Q
|
2358 |
+
q
|
2359 |
+
1 0 0 1 23 -3 cm
|
2360 |
+
q
|
2361 |
+
0 0 0 rg
|
2362 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (PHP 5.2+) Tj T* ET
|
2363 |
+
Q
|
2364 |
+
Q
|
2365 |
+
q
|
2366 |
+
Q
|
2367 |
+
Q
|
2368 |
+
q
|
2369 |
+
1 0 0 1 62.69291 532.0687 cm
|
2370 |
+
Q
|
2371 |
+
q
|
2372 |
+
1 0 0 1 62.69291 520.0687 cm
|
2373 |
+
0 0 0 rg
|
2374 |
+
BT /F1 10 Tf 12 TL ET
|
2375 |
+
q
|
2376 |
+
1 0 0 1 6 -3 cm
|
2377 |
+
q
|
2378 |
+
0 0 0 rg
|
2379 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
2380 |
+
Q
|
2381 |
+
Q
|
2382 |
+
q
|
2383 |
+
1 0 0 1 23 -3 cm
|
2384 |
+
q
|
2385 |
+
0 0 0 rg
|
2386 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Ein Magento der Version) Tj T* ET
|
2387 |
+
Q
|
2388 |
+
Q
|
2389 |
+
q
|
2390 |
+
Q
|
2391 |
+
Q
|
2392 |
+
q
|
2393 |
+
1 0 0 1 62.69291 520.0687 cm
|
2394 |
+
Q
|
2395 |
+
q
|
2396 |
+
1 0 0 1 62.69291 514.0687 cm
|
2397 |
+
Q
|
2398 |
+
q
|
2399 |
+
1 0 0 1 62.69291 502.0687 cm
|
2400 |
+
q
|
2401 |
+
0 0 0 rg
|
2402 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
2403 |
+
Q
|
2404 |
+
Q
|
2405 |
+
q
|
2406 |
+
1 0 0 1 62.69291 502.0687 cm
|
2407 |
+
Q
|
2408 |
+
q
|
2409 |
+
1 0 0 1 62.69291 490.0687 cm
|
2410 |
+
Q
|
2411 |
+
q
|
2412 |
+
1 0 0 1 62.69291 341.0687 cm
|
2413 |
+
.960784 .960784 .862745 rg
|
2414 |
+
n 0 149 469.8898 -149 re f*
|
2415 |
+
0 0 0 rg
|
2416 |
+
BT /F1 10 Tf 12 TL ET
|
2417 |
+
BT 1 0 0 1 6 123 Tm T* ET
|
2418 |
+
q
|
2419 |
+
1 0 0 1 16 118 cm
|
2420 |
+
q
|
2421 |
+
0 .533333 .603922 rg
|
2422 |
+
BT 1 0 0 1 0 2.5 Tm /F3 12.5 Tf 15 TL (Note) Tj T* ET
|
2423 |
+
Q
|
2424 |
+
Q
|
2425 |
+
q
|
2426 |
+
1 0 0 1 16 94 cm
|
2427 |
+
q
|
2428 |
+
0 0 0 rg
|
2429 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Modul mit Versionsnummer 15.05.06) Tj T* ET
|
2430 |
+
Q
|
2431 |
+
Q
|
2432 |
+
q
|
2433 |
+
1 0 0 1 16 16 cm
|
2434 |
+
q
|
2435 |
+
0 0 0 rg
|
2436 |
+
BT 1 0 0 1 0 62 Tm /F1 10 Tf 12 TL 1.007251 Tw (Das Modul mit Versionsnummer 15.05.06 ist ein spezielles Release des Payment-Moduls. Diese) Tj T* 0 Tw .324976 Tw (Version des Moduls wurde auch technisch dahingehend angepasst, dass es R\374ckw\344rtskompatibel) Tj T* 0 Tw .707126 Tw (zu \344lteren Versionen des Magento-Shops \(s.u.\) ist. Bitte beachten Sie jedoch, dass Tests auf die) Tj T* 0 Tw .423307 Tw (folgenden, als kompatibel geltenden Magento-Shop-Versionen nur mit exakt dieser Modul-Version) Tj T* 0 Tw 7.152196 Tw (durchgef\374hrt wurden \(d.h. selbst neuere Modul-Versionen k\366nnen ggf. mit folgenden) Tj T* 0 Tw (Shop-Versionen nicht mehr kompatibel sein\):) Tj T* ET
|
2437 |
+
Q
|
2438 |
+
Q
|
2439 |
+
q
|
2440 |
+
1 J
|
2441 |
+
1 j
|
2442 |
+
.662745 .662745 .662745 RG
|
2443 |
+
.5 w
|
2444 |
+
n 0 149 m 469.8898 149 l S
|
2445 |
+
n 0 0 m 469.8898 0 l S
|
2446 |
+
n 0 0 m 0 149 l S
|
2447 |
+
n 469.8898 0 m 469.8898 149 l S
|
2448 |
+
Q
|
2449 |
+
Q
|
2450 |
+
q
|
2451 |
+
1 0 0 1 62.69291 335.0687 cm
|
2452 |
+
Q
|
2453 |
+
q
|
2454 |
+
1 0 0 1 62.69291 317.0687 cm
|
2455 |
+
q
|
2456 |
+
0 0 0 rg
|
2457 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (CE:) Tj T* ET
|
2458 |
+
Q
|
2459 |
+
Q
|
2460 |
+
q
|
2461 |
+
1 0 0 1 62.69291 311.0687 cm
|
2462 |
+
Q
|
2463 |
+
q
|
2464 |
+
1 0 0 1 62.69291 203.0687 cm
|
2465 |
+
0 0 0 rg
|
2466 |
+
BT /F1 10 Tf 12 TL ET
|
2467 |
+
BT 1 0 0 1 0 2 Tm T* ET
|
2468 |
+
q
|
2469 |
+
1 0 0 1 20 102 cm
|
2470 |
+
Q
|
2471 |
+
q
|
2472 |
+
1 0 0 1 20 102 cm
|
2473 |
+
Q
|
2474 |
+
q
|
2475 |
+
1 0 0 1 20 90 cm
|
2476 |
+
0 0 0 rg
|
2477 |
+
BT /F1 10 Tf 12 TL ET
|
2478 |
+
q
|
2479 |
+
1 0 0 1 6 -3 cm
|
2480 |
+
q
|
2481 |
+
0 0 0 rg
|
2482 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
2483 |
+
Q
|
2484 |
+
Q
|
2485 |
+
q
|
2486 |
+
1 0 0 1 23 -3 cm
|
2487 |
+
q
|
2488 |
+
0 0 0 rg
|
2489 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Community Edition 1.4.x) Tj T* ET
|
2490 |
+
Q
|
2491 |
+
Q
|
2492 |
+
q
|
2493 |
+
Q
|
2494 |
+
Q
|
2495 |
+
q
|
2496 |
+
1 0 0 1 20 84 cm
|
2497 |
+
Q
|
2498 |
+
q
|
2499 |
+
1 0 0 1 20 72 cm
|
2500 |
+
0 0 0 rg
|
2501 |
+
BT /F1 10 Tf 12 TL ET
|
2502 |
+
q
|
2503 |
+
1 0 0 1 6 -3 cm
|
2504 |
+
q
|
2505 |
+
0 0 0 rg
|
2506 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
2507 |
+
Q
|
2508 |
+
Q
|
2509 |
+
q
|
2510 |
+
1 0 0 1 23 -3 cm
|
2511 |
+
q
|
2512 |
+
0 0 0 rg
|
2513 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Community Edition 1.5.x) Tj T* ET
|
2514 |
+
Q
|
2515 |
+
Q
|
2516 |
+
q
|
2517 |
+
Q
|
2518 |
+
Q
|
2519 |
+
q
|
2520 |
+
1 0 0 1 20 66 cm
|
2521 |
+
Q
|
2522 |
+
q
|
2523 |
+
1 0 0 1 20 54 cm
|
2524 |
+
0 0 0 rg
|
2525 |
+
BT /F1 10 Tf 12 TL ET
|
2526 |
+
q
|
2527 |
+
1 0 0 1 6 -3 cm
|
2528 |
+
q
|
2529 |
+
0 0 0 rg
|
2530 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
2531 |
+
Q
|
2532 |
+
Q
|
2533 |
+
q
|
2534 |
+
1 0 0 1 23 -3 cm
|
2535 |
+
q
|
2536 |
+
0 0 0 rg
|
2537 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Community Edition 1.6.x) Tj T* ET
|
2538 |
+
Q
|
2539 |
+
Q
|
2540 |
+
q
|
2541 |
+
Q
|
2542 |
+
Q
|
2543 |
+
q
|
2544 |
+
1 0 0 1 20 48 cm
|
2545 |
+
Q
|
2546 |
+
q
|
2547 |
+
1 0 0 1 20 36 cm
|
2548 |
+
0 0 0 rg
|
2549 |
+
BT /F1 10 Tf 12 TL ET
|
2550 |
+
q
|
2551 |
+
1 0 0 1 6 -3 cm
|
2552 |
+
q
|
2553 |
+
0 0 0 rg
|
2554 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
2555 |
+
Q
|
2556 |
+
Q
|
2557 |
+
q
|
2558 |
+
1 0 0 1 23 -3 cm
|
2559 |
+
q
|
2560 |
+
0 0 0 rg
|
2561 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Community Edition 1.7.x) Tj T* ET
|
2562 |
+
Q
|
2563 |
+
Q
|
2564 |
+
q
|
2565 |
+
Q
|
2566 |
+
Q
|
2567 |
+
q
|
2568 |
+
1 0 0 1 20 30 cm
|
2569 |
+
Q
|
2570 |
+
q
|
2571 |
+
1 0 0 1 20 18 cm
|
2572 |
+
0 0 0 rg
|
2573 |
+
BT /F1 10 Tf 12 TL ET
|
2574 |
+
q
|
2575 |
+
1 0 0 1 6 -3 cm
|
2576 |
+
q
|
2577 |
+
0 0 0 rg
|
2578 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
2579 |
+
Q
|
2580 |
+
Q
|
2581 |
+
q
|
2582 |
+
1 0 0 1 23 -3 cm
|
2583 |
+
q
|
2584 |
+
0 0 0 rg
|
2585 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Community Edition 1.8.x) Tj T* ET
|
2586 |
+
Q
|
2587 |
+
Q
|
2588 |
+
q
|
2589 |
+
Q
|
2590 |
+
Q
|
2591 |
+
q
|
2592 |
+
1 0 0 1 20 12 cm
|
2593 |
+
Q
|
2594 |
+
q
|
2595 |
+
1 0 0 1 20 0 cm
|
2596 |
+
0 0 0 rg
|
2597 |
+
BT /F1 10 Tf 12 TL ET
|
2598 |
+
q
|
2599 |
+
1 0 0 1 6 -3 cm
|
2600 |
+
q
|
2601 |
+
0 0 0 rg
|
2602 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
2603 |
+
Q
|
2604 |
+
Q
|
2605 |
+
q
|
2606 |
+
1 0 0 1 23 -3 cm
|
2607 |
+
q
|
2608 |
+
0 0 0 rg
|
2609 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Community Edition 1.9.x) Tj T* ET
|
2610 |
+
Q
|
2611 |
+
Q
|
2612 |
+
q
|
2613 |
+
Q
|
2614 |
+
Q
|
2615 |
+
q
|
2616 |
+
1 0 0 1 20 0 cm
|
2617 |
+
Q
|
2618 |
+
q
|
2619 |
+
Q
|
2620 |
+
Q
|
2621 |
+
q
|
2622 |
+
1 0 0 1 62.69291 203.0687 cm
|
2623 |
+
Q
|
2624 |
+
q
|
2625 |
+
1 0 0 1 62.69291 185.0687 cm
|
2626 |
+
q
|
2627 |
+
0 0 0 rg
|
2628 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (EE:) Tj T* ET
|
2629 |
+
Q
|
2630 |
+
Q
|
2631 |
+
q
|
2632 |
+
1 0 0 1 62.69291 179.0687 cm
|
2633 |
+
Q
|
2634 |
+
q
|
2635 |
+
1 0 0 1 411.0236 768.242 cm
|
2636 |
+
q
|
2637 |
+
127.5591 0 0 45.30135 0 0 cm
|
2638 |
+
/FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
|
2639 |
+
Q
|
2640 |
+
Q
|
2641 |
+
q
|
2642 |
+
1 0 0 1 56.69291 56.69291 cm
|
2643 |
+
0 0 0 rg
|
2644 |
+
BT /F1 10 Tf 12 TL ET
|
2645 |
+
q
|
2646 |
+
1 0 0 1 6 3 cm
|
2647 |
+
q
|
2648 |
+
0 0 0 rg
|
2649 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
|
2650 |
+
Q
|
2651 |
+
Q
|
2652 |
+
q
|
2653 |
+
1 0 0 1 246.9449 3 cm
|
2654 |
+
q
|
2655 |
+
0 0 0 rg
|
2656 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 209.4849 0 Td (3/16) Tj T* -209.4849 0 Td ET
|
2657 |
+
Q
|
2658 |
+
Q
|
2659 |
+
q
|
2660 |
+
Q
|
2661 |
+
Q
|
2662 |
+
|
2663 |
+
endstream
|
2664 |
+
endobj
|
2665 |
+
% 'R97': class PDFStream
|
2666 |
+
97 0 obj
|
2667 |
+
% page stream
|
2668 |
+
<< /Length 2232 >>
|
2669 |
+
stream
|
2670 |
+
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
2671 |
+
q
|
2672 |
+
1 0 0 1 62.69291 658.0687 cm
|
2673 |
+
0 0 0 rg
|
2674 |
+
BT /F1 10 Tf 12 TL ET
|
2675 |
+
BT 1 0 0 1 0 2 Tm T* ET
|
2676 |
+
q
|
2677 |
+
1 0 0 1 20 84 cm
|
2678 |
+
Q
|
2679 |
+
q
|
2680 |
+
1 0 0 1 20 84 cm
|
2681 |
+
Q
|
2682 |
+
q
|
2683 |
+
1 0 0 1 20 72 cm
|
2684 |
+
0 0 0 rg
|
2685 |
+
BT /F1 10 Tf 12 TL ET
|
2686 |
+
q
|
2687 |
+
1 0 0 1 6 -3 cm
|
2688 |
+
q
|
2689 |
+
0 0 0 rg
|
2690 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
2691 |
+
Q
|
2692 |
+
Q
|
2693 |
+
q
|
2694 |
+
1 0 0 1 23 -3 cm
|
2695 |
+
q
|
2696 |
+
0 0 0 rg
|
2697 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Enterprise Edition 1.10.x) Tj T* ET
|
2698 |
+
Q
|
2699 |
+
Q
|
2700 |
+
q
|
2701 |
+
Q
|
2702 |
+
Q
|
2703 |
+
q
|
2704 |
+
1 0 0 1 20 66 cm
|
2705 |
+
Q
|
2706 |
+
q
|
2707 |
+
1 0 0 1 20 54 cm
|
2708 |
+
0 0 0 rg
|
2709 |
+
BT /F1 10 Tf 12 TL ET
|
2710 |
+
q
|
2711 |
+
1 0 0 1 6 -3 cm
|
2712 |
+
q
|
2713 |
+
0 0 0 rg
|
2714 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
2715 |
+
Q
|
2716 |
+
Q
|
2717 |
+
q
|
2718 |
+
1 0 0 1 23 -3 cm
|
2719 |
+
q
|
2720 |
+
0 0 0 rg
|
2721 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Enterprise Edition 1.11.x) Tj T* ET
|
2722 |
+
Q
|
2723 |
+
Q
|
2724 |
+
q
|
2725 |
+
Q
|
2726 |
+
Q
|
2727 |
+
q
|
2728 |
+
1 0 0 1 20 48 cm
|
2729 |
+
Q
|
2730 |
+
q
|
2731 |
+
1 0 0 1 20 36 cm
|
2732 |
+
0 0 0 rg
|
2733 |
+
BT /F1 10 Tf 12 TL ET
|
2734 |
+
q
|
2735 |
+
1 0 0 1 6 -3 cm
|
2736 |
+
q
|
2737 |
+
0 0 0 rg
|
2738 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
2739 |
+
Q
|
2740 |
+
Q
|
2741 |
+
q
|
2742 |
+
1 0 0 1 23 -3 cm
|
2743 |
+
q
|
2744 |
+
0 0 0 rg
|
2745 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Enterprise Edition 1.12.x) Tj T* ET
|
2746 |
+
Q
|
2747 |
+
Q
|
2748 |
+
q
|
2749 |
+
Q
|
2750 |
+
Q
|
2751 |
+
q
|
2752 |
+
1 0 0 1 20 30 cm
|
2753 |
+
Q
|
2754 |
+
q
|
2755 |
+
1 0 0 1 20 18 cm
|
2756 |
+
0 0 0 rg
|
2757 |
+
BT /F1 10 Tf 12 TL ET
|
2758 |
+
q
|
2759 |
+
1 0 0 1 6 -3 cm
|
2760 |
+
q
|
2761 |
+
0 0 0 rg
|
2762 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
2763 |
+
Q
|
2764 |
+
Q
|
2765 |
+
q
|
2766 |
+
1 0 0 1 23 -3 cm
|
2767 |
+
q
|
2768 |
+
0 0 0 rg
|
2769 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Enterprise Edition 1.13.x) Tj T* ET
|
2770 |
+
Q
|
2771 |
+
Q
|
2772 |
+
q
|
2773 |
+
Q
|
2774 |
+
Q
|
2775 |
+
q
|
2776 |
+
1 0 0 1 20 12 cm
|
2777 |
+
Q
|
2778 |
+
q
|
2779 |
+
1 0 0 1 20 0 cm
|
2780 |
+
0 0 0 rg
|
2781 |
+
BT /F1 10 Tf 12 TL ET
|
2782 |
+
q
|
2783 |
+
1 0 0 1 6 -3 cm
|
2784 |
+
q
|
2785 |
+
0 0 0 rg
|
2786 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
2787 |
+
Q
|
2788 |
+
Q
|
2789 |
+
q
|
2790 |
+
1 0 0 1 23 -3 cm
|
2791 |
+
q
|
2792 |
+
0 0 0 rg
|
2793 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Enterprise Edition 1.14.x) Tj T* ET
|
2794 |
+
Q
|
2795 |
+
Q
|
2796 |
+
q
|
2797 |
+
Q
|
2798 |
+
Q
|
2799 |
+
q
|
2800 |
+
1 0 0 1 20 0 cm
|
2801 |
+
Q
|
2802 |
+
q
|
2803 |
+
Q
|
2804 |
+
Q
|
2805 |
+
q
|
2806 |
+
1 0 0 1 62.69291 658.0687 cm
|
2807 |
+
Q
|
2808 |
+
q
|
2809 |
+
1 0 0 1 62.69291 658.0687 cm
|
2810 |
+
Q
|
2811 |
+
q
|
2812 |
+
1 0 0 1 411.0236 768.242 cm
|
2813 |
+
q
|
2814 |
+
127.5591 0 0 45.30135 0 0 cm
|
2815 |
+
/FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
|
2816 |
+
Q
|
2817 |
+
Q
|
2818 |
+
q
|
2819 |
+
1 0 0 1 56.69291 56.69291 cm
|
2820 |
+
0 0 0 rg
|
2821 |
+
BT /F1 10 Tf 12 TL ET
|
2822 |
+
q
|
2823 |
+
1 0 0 1 6 3 cm
|
2824 |
+
q
|
2825 |
+
0 0 0 rg
|
2826 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
|
2827 |
+
Q
|
2828 |
+
Q
|
2829 |
+
q
|
2830 |
+
1 0 0 1 246.9449 3 cm
|
2831 |
+
q
|
2832 |
+
0 0 0 rg
|
2833 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 209.4849 0 Td (4/16) Tj T* -209.4849 0 Td ET
|
2834 |
+
Q
|
2835 |
+
Q
|
2836 |
+
q
|
2837 |
+
Q
|
2838 |
+
Q
|
2839 |
+
|
2840 |
+
endstream
|
2841 |
+
endobj
|
2842 |
+
% 'R98': class PDFStream
|
2843 |
+
98 0 obj
|
2844 |
+
% page stream
|
2845 |
+
<< /Length 7280 >>
|
2846 |
+
stream
|
2847 |
+
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
2848 |
+
q
|
2849 |
+
1 0 0 1 62.69291 727.0687 cm
|
2850 |
+
q
|
2851 |
+
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (3 Installation) Tj T* ET
|
2852 |
+
Q
|
2853 |
+
Q
|
2854 |
+
q
|
2855 |
+
1 0 0 1 62.69291 715.0687 cm
|
2856 |
+
Q
|
2857 |
+
q
|
2858 |
+
1 0 0 1 62.69291 703.0687 cm
|
2859 |
+
q
|
2860 |
+
0 0 0 rg
|
2861 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
2862 |
+
Q
|
2863 |
+
Q
|
2864 |
+
q
|
2865 |
+
1 0 0 1 62.69291 703.0687 cm
|
2866 |
+
Q
|
2867 |
+
q
|
2868 |
+
1 0 0 1 62.69291 691.0687 cm
|
2869 |
+
Q
|
2870 |
+
q
|
2871 |
+
1 0 0 1 62.69291 548.0687 cm
|
2872 |
+
.960784 .960784 .862745 rg
|
2873 |
+
n 0 143 469.8898 -143 re f*
|
2874 |
+
0 0 0 rg
|
2875 |
+
BT /F1 10 Tf 12 TL ET
|
2876 |
+
BT 1 0 0 1 6 117 Tm T* ET
|
2877 |
+
q
|
2878 |
+
1 0 0 1 16 112 cm
|
2879 |
+
q
|
2880 |
+
0 .533333 .603922 rg
|
2881 |
+
BT 1 0 0 1 0 2.5 Tm /F3 12.5 Tf 15 TL (Note) Tj T* ET
|
2882 |
+
Q
|
2883 |
+
Q
|
2884 |
+
q
|
2885 |
+
1 0 0 1 16 88 cm
|
2886 |
+
q
|
2887 |
+
0 0 0 rg
|
2888 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Bitte beachten! \304nderung der Konfiguration ab Modul-Version: 14.04.10) Tj T* ET
|
2889 |
+
Q
|
2890 |
+
Q
|
2891 |
+
q
|
2892 |
+
1 0 0 1 16 82 cm
|
2893 |
+
Q
|
2894 |
+
q
|
2895 |
+
1 0 0 1 16 70 cm
|
2896 |
+
q
|
2897 |
+
0 0 0 rg
|
2898 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
2899 |
+
Q
|
2900 |
+
Q
|
2901 |
+
q
|
2902 |
+
1 0 0 1 16 70 cm
|
2903 |
+
Q
|
2904 |
+
q
|
2905 |
+
1 0 0 1 16 16 cm
|
2906 |
+
q
|
2907 |
+
0 0 0 rg
|
2908 |
+
BT 1 0 0 1 0 38 Tm /F1 10 Tf 12 TL 1.103059 Tw (Bitte beachten Sie, dass sich die Konfiguration des Moduls ver\344ndert hat. Die Zugangsdaten f\374r) Tj T* 0 Tw 1.559069 Tw (die Expercash API werden nun nicht mehr pro Zahlungsmethode konfiguriert, sondern einmalig) Tj T* 0 Tw .860888 Tw (unter "Zahlungsdienste". Ebenfalls sind die Konfigurations-Optionen f\374r das Iframe nun an dieser) Tj T* 0 Tw (Stelle.) Tj T* ET
|
2909 |
+
Q
|
2910 |
+
Q
|
2911 |
+
q
|
2912 |
+
1 J
|
2913 |
+
1 j
|
2914 |
+
.662745 .662745 .662745 RG
|
2915 |
+
.5 w
|
2916 |
+
n 0 143 m 469.8898 143 l S
|
2917 |
+
n 0 0 m 469.8898 0 l S
|
2918 |
+
n 0 0 m 0 143 l S
|
2919 |
+
n 469.8898 0 m 469.8898 143 l S
|
2920 |
+
Q
|
2921 |
+
Q
|
2922 |
+
q
|
2923 |
+
1 0 0 1 62.69291 542.0687 cm
|
2924 |
+
Q
|
2925 |
+
q
|
2926 |
+
1 0 0 1 62.69291 530.0687 cm
|
2927 |
+
Q
|
2928 |
+
q
|
2929 |
+
1 0 0 1 62.69291 363.0687 cm
|
2930 |
+
.960784 .960784 .862745 rg
|
2931 |
+
n 0 167 469.8898 -167 re f*
|
2932 |
+
0 0 0 rg
|
2933 |
+
BT /F1 10 Tf 12 TL ET
|
2934 |
+
BT 1 0 0 1 6 141 Tm T* ET
|
2935 |
+
q
|
2936 |
+
1 0 0 1 16 136 cm
|
2937 |
+
q
|
2938 |
+
0 .533333 .603922 rg
|
2939 |
+
BT 1 0 0 1 0 2.5 Tm /F3 12.5 Tf 15 TL (Note) Tj T* ET
|
2940 |
+
Q
|
2941 |
+
Q
|
2942 |
+
q
|
2943 |
+
1 0 0 1 16 112 cm
|
2944 |
+
q
|
2945 |
+
0 0 0 rg
|
2946 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Bitte beachten! \304nderung am Namespace des Moduls ab Modul-Version: 13.07.04) Tj T* ET
|
2947 |
+
Q
|
2948 |
+
Q
|
2949 |
+
q
|
2950 |
+
1 0 0 1 16 106 cm
|
2951 |
+
Q
|
2952 |
+
q
|
2953 |
+
1 0 0 1 16 94 cm
|
2954 |
+
q
|
2955 |
+
0 0 0 rg
|
2956 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
2957 |
+
Q
|
2958 |
+
Q
|
2959 |
+
q
|
2960 |
+
1 0 0 1 16 94 cm
|
2961 |
+
Q
|
2962 |
+
q
|
2963 |
+
1 0 0 1 16 16 cm
|
2964 |
+
q
|
2965 |
+
0 0 0 rg
|
2966 |
+
BT 1 0 0 1 0 62 Tm /F1 10 Tf 12 TL 3.189147 Tw (Es gab \304nderungen am Namespace des Moduls. Dieser hat sich von Mage_Expercash zu) Tj T* 0 Tw 2.049976 Tw (Expercash_Expercash ge\344ndert. Sollten Sie Expercash in einer Version mit altem Namespace) Tj T* 0 Tw .622196 Tw (einsetzen \(falls der Ordner "app/code/community/Mage/Expercash/" vorhanden ist, nutzen Sie die) Tj T* 0 Tw 2.643828 Tw (Variante mit altem Namespace\) und auf eine neue Version updaten wollen, ist es zwingend) Tj T* 0 Tw .12229 Tw (erforderlich die alte Version zu deinstallieren, bevor Sie die neue Version installieren. Beachten sie) Tj T* 0 Tw (hierzu den Punkt "Migration auf neue Version" am Ende dieser Dokumentation.) Tj T* ET
|
2967 |
+
Q
|
2968 |
+
Q
|
2969 |
+
q
|
2970 |
+
1 J
|
2971 |
+
1 j
|
2972 |
+
.662745 .662745 .662745 RG
|
2973 |
+
.5 w
|
2974 |
+
n 0 167 m 469.8898 167 l S
|
2975 |
+
n 0 0 m 469.8898 0 l S
|
2976 |
+
n 0 0 m 0 167 l S
|
2977 |
+
n 469.8898 0 m 469.8898 167 l S
|
2978 |
+
Q
|
2979 |
+
Q
|
2980 |
+
q
|
2981 |
+
1 0 0 1 62.69291 357.0687 cm
|
2982 |
+
Q
|
2983 |
+
q
|
2984 |
+
1 0 0 1 62.69291 351.0687 cm
|
2985 |
+
Q
|
2986 |
+
q
|
2987 |
+
1 0 0 1 62.69291 339.0687 cm
|
2988 |
+
q
|
2989 |
+
0 0 0 rg
|
2990 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
2991 |
+
Q
|
2992 |
+
Q
|
2993 |
+
q
|
2994 |
+
1 0 0 1 62.69291 327.0687 cm
|
2995 |
+
q
|
2996 |
+
0 0 0 rg
|
2997 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
2998 |
+
Q
|
2999 |
+
Q
|
3000 |
+
q
|
3001 |
+
1 0 0 1 62.69291 327.0687 cm
|
3002 |
+
Q
|
3003 |
+
q
|
3004 |
+
1 0 0 1 62.69291 321.0687 cm
|
3005 |
+
Q
|
3006 |
+
q
|
3007 |
+
1 0 0 1 62.69291 321.0687 cm
|
3008 |
+
Q
|
3009 |
+
q
|
3010 |
+
1 0 0 1 62.69291 297.0687 cm
|
3011 |
+
0 0 0 rg
|
3012 |
+
BT /F1 10 Tf 12 TL ET
|
3013 |
+
q
|
3014 |
+
1 0 0 1 6 9 cm
|
3015 |
+
q
|
3016 |
+
0 0 0 rg
|
3017 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (1.) Tj T* -5.66 0 Td ET
|
3018 |
+
Q
|
3019 |
+
Q
|
3020 |
+
q
|
3021 |
+
1 0 0 1 23 -3 cm
|
3022 |
+
q
|
3023 |
+
BT 1 0 0 1 0 14 Tm 17.80854 Tw 12 TL /F1 10 Tf 0 0 0 rg (Kopieren Sie den "Extension Key" von der MagentoCommerce-Webseite) Tj T* 0 Tw (\() Tj 0 0 .501961 rg (http://www.magentocommerce.com/magento-connect/mage-expercash.html) Tj 0 0 0 rg (\)) Tj T* ET
|
3024 |
+
Q
|
3025 |
+
Q
|
3026 |
+
q
|
3027 |
+
Q
|
3028 |
+
Q
|
3029 |
+
q
|
3030 |
+
1 0 0 1 62.69291 291.0687 cm
|
3031 |
+
Q
|
3032 |
+
q
|
3033 |
+
1 0 0 1 62.69291 279.0687 cm
|
3034 |
+
0 0 0 rg
|
3035 |
+
BT /F1 10 Tf 12 TL ET
|
3036 |
+
q
|
3037 |
+
1 0 0 1 6 -3 cm
|
3038 |
+
q
|
3039 |
+
0 0 0 rg
|
3040 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (2.) Tj T* -5.66 0 Td ET
|
3041 |
+
Q
|
3042 |
+
Q
|
3043 |
+
q
|
3044 |
+
1 0 0 1 23 -3 cm
|
3045 |
+
q
|
3046 |
+
0 0 0 rg
|
3047 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Melden Sie sich in Ihrem Magento Backend an) Tj T* ET
|
3048 |
+
Q
|
3049 |
+
Q
|
3050 |
+
q
|
3051 |
+
Q
|
3052 |
+
Q
|
3053 |
+
q
|
3054 |
+
1 0 0 1 62.69291 273.0687 cm
|
3055 |
+
Q
|
3056 |
+
q
|
3057 |
+
1 0 0 1 62.69291 261.0687 cm
|
3058 |
+
0 0 0 rg
|
3059 |
+
BT /F1 10 Tf 12 TL ET
|
3060 |
+
q
|
3061 |
+
1 0 0 1 6 -3 cm
|
3062 |
+
q
|
3063 |
+
0 0 0 rg
|
3064 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (3.) Tj T* -5.66 0 Td ET
|
3065 |
+
Q
|
3066 |
+
Q
|
3067 |
+
q
|
3068 |
+
1 0 0 1 23 -3 cm
|
3069 |
+
q
|
3070 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Navigieren Sie zu "System" -) Tj (> "Magento Connect" -) Tj (> "Magento Connect Manager") Tj T* ET
|
3071 |
+
Q
|
3072 |
+
Q
|
3073 |
+
q
|
3074 |
+
Q
|
3075 |
+
Q
|
3076 |
+
q
|
3077 |
+
1 0 0 1 62.69291 255.0687 cm
|
3078 |
+
Q
|
3079 |
+
q
|
3080 |
+
1 0 0 1 62.69291 243.0687 cm
|
3081 |
+
0 0 0 rg
|
3082 |
+
BT /F1 10 Tf 12 TL ET
|
3083 |
+
q
|
3084 |
+
1 0 0 1 6 -3 cm
|
3085 |
+
q
|
3086 |
+
0 0 0 rg
|
3087 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (4.) Tj T* -5.66 0 Td ET
|
3088 |
+
Q
|
3089 |
+
Q
|
3090 |
+
q
|
3091 |
+
1 0 0 1 23 -3 cm
|
3092 |
+
q
|
3093 |
+
0 0 0 rg
|
3094 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Melden Sie sich im "Magento Connect Manager" an) Tj T* ET
|
3095 |
+
Q
|
3096 |
+
Q
|
3097 |
+
q
|
3098 |
+
Q
|
3099 |
+
Q
|
3100 |
+
q
|
3101 |
+
1 0 0 1 62.69291 237.0687 cm
|
3102 |
+
Q
|
3103 |
+
q
|
3104 |
+
1 0 0 1 62.69291 225.0687 cm
|
3105 |
+
0 0 0 rg
|
3106 |
+
BT /F1 10 Tf 12 TL ET
|
3107 |
+
q
|
3108 |
+
1 0 0 1 6 -3 cm
|
3109 |
+
q
|
3110 |
+
0 0 0 rg
|
3111 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (5.) Tj T* -5.66 0 Td ET
|
3112 |
+
Q
|
3113 |
+
Q
|
3114 |
+
q
|
3115 |
+
1 0 0 1 23 -3 cm
|
3116 |
+
q
|
3117 |
+
0 0 0 rg
|
3118 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (W\344hlen Sie den Tab "Extensions") Tj T* ET
|
3119 |
+
Q
|
3120 |
+
Q
|
3121 |
+
q
|
3122 |
+
Q
|
3123 |
+
Q
|
3124 |
+
q
|
3125 |
+
1 0 0 1 62.69291 219.0687 cm
|
3126 |
+
Q
|
3127 |
+
q
|
3128 |
+
1 0 0 1 62.69291 195.0687 cm
|
3129 |
+
0 0 0 rg
|
3130 |
+
BT /F1 10 Tf 12 TL ET
|
3131 |
+
q
|
3132 |
+
1 0 0 1 6 9 cm
|
3133 |
+
q
|
3134 |
+
0 0 0 rg
|
3135 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (6.) Tj T* -5.66 0 Td ET
|
3136 |
+
Q
|
3137 |
+
Q
|
3138 |
+
q
|
3139 |
+
1 0 0 1 23 -3 cm
|
3140 |
+
q
|
3141 |
+
0 0 0 rg
|
3142 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 1.14248 Tw (Tragen Sie den kopierten Key von der MagentoCommerce-Webseite in das Feld "Paste extension) Tj T* 0 Tw (key to install" ein und w\344hlen Sie "Install") Tj T* ET
|
3143 |
+
Q
|
3144 |
+
Q
|
3145 |
+
q
|
3146 |
+
Q
|
3147 |
+
Q
|
3148 |
+
q
|
3149 |
+
1 0 0 1 62.69291 189.0687 cm
|
3150 |
+
Q
|
3151 |
+
q
|
3152 |
+
1 0 0 1 62.69291 165.0687 cm
|
3153 |
+
0 0 0 rg
|
3154 |
+
BT /F1 10 Tf 12 TL ET
|
3155 |
+
q
|
3156 |
+
1 0 0 1 6 9 cm
|
3157 |
+
q
|
3158 |
+
0 0 0 rg
|
3159 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (7.) Tj T* -5.66 0 Td ET
|
3160 |
+
Q
|
3161 |
+
Q
|
3162 |
+
q
|
3163 |
+
1 0 0 1 23 -3 cm
|
3164 |
+
q
|
3165 |
+
0 0 0 rg
|
3166 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 2.020751 Tw (Unter Umst\344nden m\374ssen Sie danach die Installation mit einem Klick auf den Button "Proceed") Tj T* 0 Tw (best\344tigen.) Tj T* ET
|
3167 |
+
Q
|
3168 |
+
Q
|
3169 |
+
q
|
3170 |
+
Q
|
3171 |
+
Q
|
3172 |
+
q
|
3173 |
+
1 0 0 1 62.69291 159.0687 cm
|
3174 |
+
Q
|
3175 |
+
q
|
3176 |
+
1 0 0 1 62.69291 135.0687 cm
|
3177 |
+
0 0 0 rg
|
3178 |
+
BT /F1 10 Tf 12 TL ET
|
3179 |
+
q
|
3180 |
+
1 0 0 1 6 9 cm
|
3181 |
+
q
|
3182 |
+
0 0 0 rg
|
3183 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (8.) Tj T* -5.66 0 Td ET
|
3184 |
+
Q
|
3185 |
+
Q
|
3186 |
+
q
|
3187 |
+
1 0 0 1 23 -3 cm
|
3188 |
+
q
|
3189 |
+
0 0 0 rg
|
3190 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 3.426976 Tw (In der schwarzen Installations-Konsole sollte anschlie\337end die Meldung "Package ... installed) Tj T* 0 Tw (successfully" zu sehen sein. Das Modul ist nun korrekt installiert.) Tj T* ET
|
3191 |
+
Q
|
3192 |
+
Q
|
3193 |
+
q
|
3194 |
+
Q
|
3195 |
+
Q
|
3196 |
+
q
|
3197 |
+
1 0 0 1 62.69291 135.0687 cm
|
3198 |
+
Q
|
3199 |
+
q
|
3200 |
+
1 0 0 1 62.69291 135.0687 cm
|
3201 |
+
Q
|
3202 |
+
q
|
3203 |
+
1 0 0 1 411.0236 768.242 cm
|
3204 |
+
q
|
3205 |
+
127.5591 0 0 45.30135 0 0 cm
|
3206 |
+
/FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
|
3207 |
+
Q
|
3208 |
+
Q
|
3209 |
+
q
|
3210 |
+
1 0 0 1 56.69291 56.69291 cm
|
3211 |
+
0 0 0 rg
|
3212 |
+
BT /F1 10 Tf 12 TL ET
|
3213 |
+
q
|
3214 |
+
1 0 0 1 6 3 cm
|
3215 |
+
q
|
3216 |
+
0 0 0 rg
|
3217 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
|
3218 |
+
Q
|
3219 |
+
Q
|
3220 |
+
q
|
3221 |
+
1 0 0 1 246.9449 3 cm
|
3222 |
+
q
|
3223 |
+
0 0 0 rg
|
3224 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 209.4849 0 Td (5/16) Tj T* -209.4849 0 Td ET
|
3225 |
+
Q
|
3226 |
+
Q
|
3227 |
+
q
|
3228 |
+
Q
|
3229 |
+
Q
|
3230 |
+
|
3231 |
+
endstream
|
3232 |
+
endobj
|
3233 |
+
% 'R99': class PDFStream
|
3234 |
+
99 0 obj
|
3235 |
+
% page stream
|
3236 |
+
<< /Length 6564 >>
|
3237 |
+
stream
|
3238 |
+
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
3239 |
+
q
|
3240 |
+
1 0 0 1 62.69291 727.0687 cm
|
3241 |
+
q
|
3242 |
+
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (4 Konfiguration) Tj T* ET
|
3243 |
+
Q
|
3244 |
+
Q
|
3245 |
+
q
|
3246 |
+
1 0 0 1 62.69291 715.0687 cm
|
3247 |
+
Q
|
3248 |
+
q
|
3249 |
+
1 0 0 1 62.69291 703.0687 cm
|
3250 |
+
q
|
3251 |
+
0 0 0 rg
|
3252 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
3253 |
+
Q
|
3254 |
+
Q
|
3255 |
+
q
|
3256 |
+
1 0 0 1 62.69291 703.0687 cm
|
3257 |
+
Q
|
3258 |
+
q
|
3259 |
+
1 0 0 1 62.69291 685.0687 cm
|
3260 |
+
q
|
3261 |
+
0 0 0 rg
|
3262 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (An dieser Stelle wird erl\344utert wie Sie das Expercash-Zahlungsmodul konfigurieren.) Tj T* ET
|
3263 |
+
Q
|
3264 |
+
Q
|
3265 |
+
q
|
3266 |
+
1 0 0 1 62.69291 679.0687 cm
|
3267 |
+
Q
|
3268 |
+
q
|
3269 |
+
1 0 0 1 62.69291 667.0687 cm
|
3270 |
+
q
|
3271 |
+
0 0 0 rg
|
3272 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
3273 |
+
Q
|
3274 |
+
Q
|
3275 |
+
q
|
3276 |
+
1 0 0 1 62.69291 655.0687 cm
|
3277 |
+
q
|
3278 |
+
0 0 0 rg
|
3279 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
3280 |
+
Q
|
3281 |
+
Q
|
3282 |
+
q
|
3283 |
+
1 0 0 1 62.69291 643.0687 cm
|
3284 |
+
q
|
3285 |
+
0 0 0 rg
|
3286 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
3287 |
+
Q
|
3288 |
+
Q
|
3289 |
+
q
|
3290 |
+
1 0 0 1 62.69291 643.0687 cm
|
3291 |
+
Q
|
3292 |
+
q
|
3293 |
+
1 0 0 1 62.69291 613.0687 cm
|
3294 |
+
q
|
3295 |
+
BT 1 0 0 1 0 3 Tm 18 TL /F2 15 Tf 0 .533333 .603922 rg (4.1 Zahlungsdienste) Tj T* ET
|
3296 |
+
Q
|
3297 |
+
Q
|
3298 |
+
q
|
3299 |
+
1 0 0 1 62.69291 601.0687 cm
|
3300 |
+
Q
|
3301 |
+
q
|
3302 |
+
1 0 0 1 62.69291 589.0687 cm
|
3303 |
+
q
|
3304 |
+
0 0 0 rg
|
3305 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (In nachfolgender Tabelle sehen Sie die Konfigurations-Optionen f\374r Zahlungsdienste.) Tj T* ET
|
3306 |
+
Q
|
3307 |
+
Q
|
3308 |
+
q
|
3309 |
+
1 0 0 1 62.69291 577.0687 cm
|
3310 |
+
q
|
3311 |
+
0 0 0 rg
|
3312 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Hier m\374ssen unter anderem die Expercash Zugangsdaten hinterlegt werden.) Tj T* ET
|
3313 |
+
Q
|
3314 |
+
Q
|
3315 |
+
q
|
3316 |
+
1 0 0 1 62.69291 577.0687 cm
|
3317 |
+
Q
|
3318 |
+
q
|
3319 |
+
1 0 0 1 62.69291 571.0687 cm
|
3320 |
+
Q
|
3321 |
+
q
|
3322 |
+
1 0 0 1 62.69291 559.0687 cm
|
3323 |
+
q
|
3324 |
+
0 0 0 rg
|
3325 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
3326 |
+
Q
|
3327 |
+
Q
|
3328 |
+
q
|
3329 |
+
1 0 0 1 62.69291 559.0687 cm
|
3330 |
+
Q
|
3331 |
+
q
|
3332 |
+
1 0 0 1 62.69291 553.0687 cm
|
3333 |
+
Q
|
3334 |
+
q
|
3335 |
+
1 0 0 1 62.69291 529.0687 cm
|
3336 |
+
q
|
3337 |
+
0 .533333 .603922 rg
|
3338 |
+
BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 195.2149 0 Td (Zahlungsdienste) Tj T* -195.2149 0 Td ET
|
3339 |
+
Q
|
3340 |
+
Q
|
3341 |
+
q
|
3342 |
+
1 0 0 1 62.69291 295.0687 cm
|
3343 |
+
1 1 1 rg
|
3344 |
+
n 0 228 469.8898 -18 re f*
|
3345 |
+
.878431 .878431 .878431 rg
|
3346 |
+
n 0 210 469.8898 -18 re f*
|
3347 |
+
1 1 1 rg
|
3348 |
+
n 0 192 469.8898 -18 re f*
|
3349 |
+
.878431 .878431 .878431 rg
|
3350 |
+
n 0 174 469.8898 -30 re f*
|
3351 |
+
1 1 1 rg
|
3352 |
+
n 0 144 469.8898 -30 re f*
|
3353 |
+
.878431 .878431 .878431 rg
|
3354 |
+
n 0 114 469.8898 -18 re f*
|
3355 |
+
1 1 1 rg
|
3356 |
+
n 0 96 469.8898 -30 re f*
|
3357 |
+
.878431 .878431 .878431 rg
|
3358 |
+
n 0 66 469.8898 -18 re f*
|
3359 |
+
1 1 1 rg
|
3360 |
+
n 0 48 469.8898 -18 re f*
|
3361 |
+
.878431 .878431 .878431 rg
|
3362 |
+
n 0 30 469.8898 -30 re f*
|
3363 |
+
.960784 .960784 .862745 rg
|
3364 |
+
n 0 228 469.8898 -18 re f*
|
3365 |
+
0 .533333 .603922 rg
|
3366 |
+
BT /F1 10 Tf 12 TL ET
|
3367 |
+
q
|
3368 |
+
1 0 0 1 6 213 cm
|
3369 |
+
q
|
3370 |
+
.960784 .960784 .862745 rg
|
3371 |
+
n 0 0 116.1518 12 re f*
|
3372 |
+
Q
|
3373 |
+
q
|
3374 |
+
0 .533333 .603922 rg
|
3375 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 28.61588 0 Td (Konfiguration) Tj T* -28.61588 0 Td ET
|
3376 |
+
Q
|
3377 |
+
Q
|
3378 |
+
q
|
3379 |
+
1 0 0 1 134.1518 213 cm
|
3380 |
+
q
|
3381 |
+
.960784 .960784 .862745 rg
|
3382 |
+
n 0 0 329.738 12 re f*
|
3383 |
+
Q
|
3384 |
+
q
|
3385 |
+
0 .533333 .603922 rg
|
3386 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 134.299 0 Td (Beschreibung) Tj T* -134.299 0 Td ET
|
3387 |
+
Q
|
3388 |
+
Q
|
3389 |
+
0 0 0 rg
|
3390 |
+
q
|
3391 |
+
1 0 0 1 6 195 cm
|
3392 |
+
q
|
3393 |
+
0 0 0 rg
|
3394 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Popup-ID) Tj T* ET
|
3395 |
+
Q
|
3396 |
+
Q
|
3397 |
+
q
|
3398 |
+
1 0 0 1 134.1518 195 cm
|
3399 |
+
q
|
3400 |
+
0 0 0 rg
|
3401 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Die Popup-ID entnehmen Sie bitte Ihren Expercash Zugangsdaten) Tj T* ET
|
3402 |
+
Q
|
3403 |
+
Q
|
3404 |
+
q
|
3405 |
+
1 0 0 1 6 177 cm
|
3406 |
+
q
|
3407 |
+
0 0 0 rg
|
3408 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Profil-ID) Tj T* ET
|
3409 |
+
Q
|
3410 |
+
Q
|
3411 |
+
q
|
3412 |
+
1 0 0 1 134.1518 177 cm
|
3413 |
+
q
|
3414 |
+
0 0 0 rg
|
3415 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Die Profil-ID entnehmen Sie bitte Ihren Expercash Zugangsdaten) Tj T* ET
|
3416 |
+
Q
|
3417 |
+
Q
|
3418 |
+
q
|
3419 |
+
1 0 0 1 6 147 cm
|
3420 |
+
q
|
3421 |
+
0 0 0 rg
|
3422 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Sicherheitsschl\374ssel) Tj T* (IFrame) Tj T* ET
|
3423 |
+
Q
|
3424 |
+
Q
|
3425 |
+
q
|
3426 |
+
1 0 0 1 134.1518 147 cm
|
3427 |
+
q
|
3428 |
+
0 0 0 rg
|
3429 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Den Sicherheitsschl\374ssel IFrame entnehmen Sie bitte Ihren Expercash) Tj T* (Zugangsdaten) Tj T* ET
|
3430 |
+
Q
|
3431 |
+
Q
|
3432 |
+
q
|
3433 |
+
1 0 0 1 6 117 cm
|
3434 |
+
q
|
3435 |
+
0 0 0 rg
|
3436 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Sicherheitsschl\374ssel) Tj T* (Gateway) Tj T* ET
|
3437 |
+
Q
|
3438 |
+
Q
|
3439 |
+
q
|
3440 |
+
1 0 0 1 134.1518 117 cm
|
3441 |
+
q
|
3442 |
+
0 0 0 rg
|
3443 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Den Sicherheitsschl\374ssel Gateway entnehmen Sie bitte Ihren Expercash) Tj T* (Zugangsdaten) Tj T* ET
|
3444 |
+
Q
|
3445 |
+
Q
|
3446 |
+
q
|
3447 |
+
1 0 0 1 6 99 cm
|
3448 |
+
q
|
3449 |
+
0 0 0 rg
|
3450 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Project-ID) Tj T* ET
|
3451 |
+
Q
|
3452 |
+
Q
|
3453 |
+
q
|
3454 |
+
1 0 0 1 134.1518 99 cm
|
3455 |
+
q
|
3456 |
+
0 0 0 rg
|
3457 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Den Project-ID entnehmen Sie bitte Ihren Expercash Zugangsdaten) Tj T* ET
|
3458 |
+
Q
|
3459 |
+
Q
|
3460 |
+
q
|
3461 |
+
1 0 0 1 6 81 cm
|
3462 |
+
q
|
3463 |
+
0 0 0 rg
|
3464 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (IFrame-CSS-Klasse) Tj T* ET
|
3465 |
+
Q
|
3466 |
+
Q
|
3467 |
+
q
|
3468 |
+
1 0 0 1 134.1518 69 cm
|
3469 |
+
q
|
3470 |
+
0 0 0 rg
|
3471 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Hier haben Sie die M\366glichkeit dem Iframe eine eigene CSS-Klasse zu) Tj T* (geben) Tj T* ET
|
3472 |
+
Q
|
3473 |
+
Q
|
3474 |
+
q
|
3475 |
+
1 0 0 1 6 51 cm
|
3476 |
+
q
|
3477 |
+
0 0 0 rg
|
3478 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (IFrame-Breite) Tj T* ET
|
3479 |
+
Q
|
3480 |
+
Q
|
3481 |
+
q
|
3482 |
+
1 0 0 1 134.1518 51 cm
|
3483 |
+
q
|
3484 |
+
0 0 0 rg
|
3485 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Hier k\366nnen Sie die Breite des Iframes in Pixel angeben) Tj T* ET
|
3486 |
+
Q
|
3487 |
+
Q
|
3488 |
+
q
|
3489 |
+
1 0 0 1 6 33 cm
|
3490 |
+
q
|
3491 |
+
0 0 0 rg
|
3492 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (IFrame-H\366he) Tj T* ET
|
3493 |
+
Q
|
3494 |
+
Q
|
3495 |
+
q
|
3496 |
+
1 0 0 1 134.1518 33 cm
|
3497 |
+
q
|
3498 |
+
0 0 0 rg
|
3499 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Hier k\366nnen Sie die H\366he des Iframes in Pixel angeben) Tj T* ET
|
3500 |
+
Q
|
3501 |
+
Q
|
3502 |
+
q
|
3503 |
+
1 0 0 1 6 15 cm
|
3504 |
+
q
|
3505 |
+
0 0 0 rg
|
3506 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (CSS-URL \(https!\)) Tj T* ET
|
3507 |
+
Q
|
3508 |
+
Q
|
3509 |
+
q
|
3510 |
+
1 0 0 1 134.1518 3 cm
|
3511 |
+
q
|
3512 |
+
BT 1 0 0 1 0 14 Tm 12 TL /F1 10 Tf 0 0 0 rg (Der Pfad zur custom CSS Datei \(Achtung: Falls Ihr Checkout per) Tj T* (SSL-Zertifikat gesichert ist, geben Sie hier bitte eine URL mit ) Tj 0 0 .501961 rg (https:// ) Tj 0 0 0 rg (an\)) Tj T* ET
|
3513 |
+
Q
|
3514 |
+
Q
|
3515 |
+
q
|
3516 |
+
1 J
|
3517 |
+
1 j
|
3518 |
+
0 0 0 RG
|
3519 |
+
.25 w
|
3520 |
+
n 0 210 m 469.8898 210 l S
|
3521 |
+
n 0 192 m 469.8898 192 l S
|
3522 |
+
n 0 174 m 469.8898 174 l S
|
3523 |
+
n 0 144 m 469.8898 144 l S
|
3524 |
+
n 0 114 m 469.8898 114 l S
|
3525 |
+
n 0 96 m 469.8898 96 l S
|
3526 |
+
n 0 66 m 469.8898 66 l S
|
3527 |
+
n 0 48 m 469.8898 48 l S
|
3528 |
+
n 0 30 m 469.8898 30 l S
|
3529 |
+
n 128.1518 0 m 128.1518 228 l S
|
3530 |
+
n 0 228 m 469.8898 228 l S
|
3531 |
+
n 0 0 m 469.8898 0 l S
|
3532 |
+
n 0 0 m 0 228 l S
|
3533 |
+
n 469.8898 0 m 469.8898 228 l S
|
3534 |
+
Q
|
3535 |
+
Q
|
3536 |
+
q
|
3537 |
+
1 0 0 1 62.69291 295.0687 cm
|
3538 |
+
Q
|
3539 |
+
q
|
3540 |
+
1 0 0 1 62.69291 289.0687 cm
|
3541 |
+
Q
|
3542 |
+
q
|
3543 |
+
1 0 0 1 62.69291 277.0687 cm
|
3544 |
+
q
|
3545 |
+
0 0 0 rg
|
3546 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
3547 |
+
Q
|
3548 |
+
Q
|
3549 |
+
q
|
3550 |
+
1 0 0 1 62.69291 265.0687 cm
|
3551 |
+
q
|
3552 |
+
0 0 0 rg
|
3553 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
3554 |
+
Q
|
3555 |
+
Q
|
3556 |
+
q
|
3557 |
+
1 0 0 1 62.69291 265.0687 cm
|
3558 |
+
Q
|
3559 |
+
q
|
3560 |
+
1 0 0 1 62.69291 265.0687 cm
|
3561 |
+
Q
|
3562 |
+
q
|
3563 |
+
1 0 0 1 411.0236 768.242 cm
|
3564 |
+
q
|
3565 |
+
127.5591 0 0 45.30135 0 0 cm
|
3566 |
+
/FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
|
3567 |
+
Q
|
3568 |
+
Q
|
3569 |
+
q
|
3570 |
+
1 0 0 1 56.69291 56.69291 cm
|
3571 |
+
0 0 0 rg
|
3572 |
+
BT /F1 10 Tf 12 TL ET
|
3573 |
+
q
|
3574 |
+
1 0 0 1 6 3 cm
|
3575 |
+
q
|
3576 |
+
0 0 0 rg
|
3577 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
|
3578 |
+
Q
|
3579 |
+
Q
|
3580 |
+
q
|
3581 |
+
1 0 0 1 246.9449 3 cm
|
3582 |
+
q
|
3583 |
+
0 0 0 rg
|
3584 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 209.4849 0 Td (6/16) Tj T* -209.4849 0 Td ET
|
3585 |
+
Q
|
3586 |
+
Q
|
3587 |
+
q
|
3588 |
+
Q
|
3589 |
+
Q
|
3590 |
+
|
3591 |
+
endstream
|
3592 |
+
endobj
|
3593 |
+
% 'R100': class PDFStream
|
3594 |
+
100 0 obj
|
3595 |
+
% page stream
|
3596 |
+
<< /Length 7786 >>
|
3597 |
+
stream
|
3598 |
+
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
3599 |
+
q
|
3600 |
+
1 0 0 1 62.69291 730.0687 cm
|
3601 |
+
q
|
3602 |
+
BT 1 0 0 1 0 3 Tm 18 TL /F2 15 Tf 0 .533333 .603922 rg (4.2 Zahlungsmethoden) Tj T* ET
|
3603 |
+
Q
|
3604 |
+
Q
|
3605 |
+
q
|
3606 |
+
1 0 0 1 62.69291 718.0687 cm
|
3607 |
+
Q
|
3608 |
+
q
|
3609 |
+
1 0 0 1 62.69291 706.0687 cm
|
3610 |
+
q
|
3611 |
+
0 0 0 rg
|
3612 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
3613 |
+
Q
|
3614 |
+
Q
|
3615 |
+
q
|
3616 |
+
1 0 0 1 62.69291 706.0687 cm
|
3617 |
+
Q
|
3618 |
+
q
|
3619 |
+
1 0 0 1 62.69291 700.0687 cm
|
3620 |
+
Q
|
3621 |
+
q
|
3622 |
+
1 0 0 1 62.69291 688.0687 cm
|
3623 |
+
q
|
3624 |
+
0 0 0 rg
|
3625 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Das Expercash Modul unterst\374tzt momentan sieben verschiedene Zahlungsarten:) Tj T* ET
|
3626 |
+
Q
|
3627 |
+
Q
|
3628 |
+
q
|
3629 |
+
1 0 0 1 62.69291 664.0687 cm
|
3630 |
+
q
|
3631 |
+
0 0 0 rg
|
3632 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 5.601627 Tw (Lastschriftverfahren, Kreditkarte, Giropay, Sofort\374berweisung, Barzahlen, Masterpass, Masterpass) Tj T* 0 Tw (Fullcheckout) Tj T* ET
|
3633 |
+
Q
|
3634 |
+
Q
|
3635 |
+
q
|
3636 |
+
1 0 0 1 62.69291 664.0687 cm
|
3637 |
+
Q
|
3638 |
+
q
|
3639 |
+
1 0 0 1 62.69291 658.0687 cm
|
3640 |
+
Q
|
3641 |
+
q
|
3642 |
+
1 0 0 1 62.69291 646.0687 cm
|
3643 |
+
q
|
3644 |
+
0 0 0 rg
|
3645 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
3646 |
+
Q
|
3647 |
+
Q
|
3648 |
+
q
|
3649 |
+
1 0 0 1 62.69291 634.0687 cm
|
3650 |
+
q
|
3651 |
+
0 0 0 rg
|
3652 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
3653 |
+
Q
|
3654 |
+
Q
|
3655 |
+
q
|
3656 |
+
1 0 0 1 62.69291 634.0687 cm
|
3657 |
+
Q
|
3658 |
+
q
|
3659 |
+
1 0 0 1 62.69291 592.0687 cm
|
3660 |
+
q
|
3661 |
+
0 0 0 rg
|
3662 |
+
BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL 4.228863 Tw (F\374r die Zahlungsarten Lastschrift, Masterpass, Masterpass Fullcheckout sowie Kreditkarte stehen) Tj T* 0 Tw 8.301085 Tw (Direktbelastung und Autorisierung als Zahlungsvorg\344nge zur Verf\374gung. F\374r Giropay und) Tj T* 0 Tw (Sofort\374berweisung steht zahlartenbedingt nur Direktbelastung als Zahlungsvorgangstyp zu Verf\374gung.) Tj T* ET
|
3663 |
+
Q
|
3664 |
+
Q
|
3665 |
+
q
|
3666 |
+
1 0 0 1 62.69291 586.0687 cm
|
3667 |
+
Q
|
3668 |
+
q
|
3669 |
+
1 0 0 1 62.69291 574.0687 cm
|
3670 |
+
q
|
3671 |
+
0 0 0 rg
|
3672 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
3673 |
+
Q
|
3674 |
+
Q
|
3675 |
+
q
|
3676 |
+
1 0 0 1 62.69291 562.0687 cm
|
3677 |
+
q
|
3678 |
+
0 0 0 rg
|
3679 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
3680 |
+
Q
|
3681 |
+
Q
|
3682 |
+
q
|
3683 |
+
1 0 0 1 62.69291 562.0687 cm
|
3684 |
+
Q
|
3685 |
+
q
|
3686 |
+
1 0 0 1 62.69291 532.0687 cm
|
3687 |
+
q
|
3688 |
+
0 0 0 rg
|
3689 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL .948863 Tw (In nachfolgender Tabelle sehen Sie die Konfigurations-Optionen der Zahlungsmethoden, ausgenommen) Tj T* 0 Tw (Masterpass Fullcheckout - welche ein paar Besonderheiten aufweist und separat erl\344utert wird.) Tj T* ET
|
3690 |
+
Q
|
3691 |
+
Q
|
3692 |
+
q
|
3693 |
+
1 0 0 1 62.69291 526.0687 cm
|
3694 |
+
Q
|
3695 |
+
q
|
3696 |
+
1 0 0 1 62.69291 514.0687 cm
|
3697 |
+
q
|
3698 |
+
0 0 0 rg
|
3699 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
3700 |
+
Q
|
3701 |
+
Q
|
3702 |
+
q
|
3703 |
+
1 0 0 1 62.69291 514.0687 cm
|
3704 |
+
Q
|
3705 |
+
q
|
3706 |
+
1 0 0 1 62.69291 508.0687 cm
|
3707 |
+
Q
|
3708 |
+
q
|
3709 |
+
1 0 0 1 62.69291 484.0687 cm
|
3710 |
+
q
|
3711 |
+
0 .533333 .603922 rg
|
3712 |
+
BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 188.8299 0 Td (Zahlungsmethoden) Tj T* -188.8299 0 Td ET
|
3713 |
+
Q
|
3714 |
+
Q
|
3715 |
+
q
|
3716 |
+
1 0 0 1 62.69291 118.0687 cm
|
3717 |
+
1 1 1 rg
|
3718 |
+
n 0 360 469.8898 -18 re f*
|
3719 |
+
.878431 .878431 .878431 rg
|
3720 |
+
n 0 342 469.8898 -18 re f*
|
3721 |
+
1 1 1 rg
|
3722 |
+
n 0 324 469.8898 -66 re f*
|
3723 |
+
.878431 .878431 .878431 rg
|
3724 |
+
n 0 258 469.8898 -30 re f*
|
3725 |
+
1 1 1 rg
|
3726 |
+
n 0 228 469.8898 -30 re f*
|
3727 |
+
.878431 .878431 .878431 rg
|
3728 |
+
n 0 198 469.8898 -30 re f*
|
3729 |
+
1 1 1 rg
|
3730 |
+
n 0 168 469.8898 -30 re f*
|
3731 |
+
.878431 .878431 .878431 rg
|
3732 |
+
n 0 138 469.8898 -66 re f*
|
3733 |
+
1 1 1 rg
|
3734 |
+
n 0 72 469.8898 -30 re f*
|
3735 |
+
.878431 .878431 .878431 rg
|
3736 |
+
n 0 42 469.8898 -42 re f*
|
3737 |
+
.960784 .960784 .862745 rg
|
3738 |
+
n 0 360 469.8898 -18 re f*
|
3739 |
+
0 .533333 .603922 rg
|
3740 |
+
BT /F1 10 Tf 12 TL ET
|
3741 |
+
q
|
3742 |
+
1 0 0 1 6 345 cm
|
3743 |
+
q
|
3744 |
+
.960784 .960784 .862745 rg
|
3745 |
+
n 0 0 116.1518 12 re f*
|
3746 |
+
Q
|
3747 |
+
q
|
3748 |
+
0 .533333 .603922 rg
|
3749 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 28.61588 0 Td (Konfiguration) Tj T* -28.61588 0 Td ET
|
3750 |
+
Q
|
3751 |
+
Q
|
3752 |
+
q
|
3753 |
+
1 0 0 1 134.1518 345 cm
|
3754 |
+
q
|
3755 |
+
.960784 .960784 .862745 rg
|
3756 |
+
n 0 0 329.738 12 re f*
|
3757 |
+
Q
|
3758 |
+
q
|
3759 |
+
0 .533333 .603922 rg
|
3760 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 134.299 0 Td (Beschreibung) Tj T* -134.299 0 Td ET
|
3761 |
+
Q
|
3762 |
+
Q
|
3763 |
+
0 0 0 rg
|
3764 |
+
q
|
3765 |
+
1 0 0 1 6 327 cm
|
3766 |
+
q
|
3767 |
+
0 0 0 rg
|
3768 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Aktiviert) Tj T* ET
|
3769 |
+
Q
|
3770 |
+
Q
|
3771 |
+
q
|
3772 |
+
1 0 0 1 134.1518 327 cm
|
3773 |
+
q
|
3774 |
+
0 0 0 rg
|
3775 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stellen Sie diese Option auf "Ja" um diese Zahlungsmethode zu aktivieren) Tj T* ET
|
3776 |
+
Q
|
3777 |
+
Q
|
3778 |
+
q
|
3779 |
+
1 0 0 1 6 297 cm
|
3780 |
+
q
|
3781 |
+
0 0 0 rg
|
3782 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Status neuer) Tj T* (Bestellungen) Tj T* ET
|
3783 |
+
Q
|
3784 |
+
Q
|
3785 |
+
q
|
3786 |
+
1 0 0 1 134.1518 261 cm
|
3787 |
+
q
|
3788 |
+
0 0 0 rg
|
3789 |
+
BT 1 0 0 1 0 50 Tm /F1 10 Tf 12 TL (Hier haben Sie die M\366glichkeit den Status einer erfolgreichen Bestellung) Tj T* (festzulegen. Die zur Verf\374gung stehenden Statusm\366glichkeiten sind:) Tj T* (Pending \(Ausstehend\), Processing \(Verarbeitung\), Complete) Tj T* (\(Vollst\344ndig\), Closed \(Geschlossen\), Canceled \(Storniert\), On Hold) Tj T* (\(Zur\374ckgestellt\)) Tj T* ET
|
3790 |
+
Q
|
3791 |
+
Q
|
3792 |
+
q
|
3793 |
+
1 0 0 1 6 231 cm
|
3794 |
+
q
|
3795 |
+
0 0 0 rg
|
3796 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Bezeichung im) Tj T* (Shop-Frontend) Tj T* ET
|
3797 |
+
Q
|
3798 |
+
Q
|
3799 |
+
q
|
3800 |
+
1 0 0 1 134.1518 231 cm
|
3801 |
+
q
|
3802 |
+
0 0 0 rg
|
3803 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Hier haben Sie die M\366glichkeit den Titel der Zahlungsart im Frontend zu) Tj T* (bestimmen) Tj T* ET
|
3804 |
+
Q
|
3805 |
+
Q
|
3806 |
+
q
|
3807 |
+
1 0 0 1 6 213 cm
|
3808 |
+
q
|
3809 |
+
0 0 0 rg
|
3810 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Erlaubte L\344nder) Tj T* ET
|
3811 |
+
Q
|
3812 |
+
Q
|
3813 |
+
q
|
3814 |
+
1 0 0 1 134.1518 201 cm
|
3815 |
+
q
|
3816 |
+
0 0 0 rg
|
3817 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Hier k\366nnen Sie konfigurieren, f\374r welche L\344nder die Zahlungsart zur) Tj T* (Verf\374gung steht) Tj T* ET
|
3818 |
+
Q
|
3819 |
+
Q
|
3820 |
+
q
|
3821 |
+
1 0 0 1 6 183 cm
|
3822 |
+
q
|
3823 |
+
0 0 0 rg
|
3824 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Erlaubte W\344hrungen) Tj T* ET
|
3825 |
+
Q
|
3826 |
+
Q
|
3827 |
+
q
|
3828 |
+
1 0 0 1 134.1518 171 cm
|
3829 |
+
q
|
3830 |
+
0 0 0 rg
|
3831 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Hier k\366nnen Sie konfigurieren, f\374r welche W\344hrungen die Zahlungsart zur) Tj T* (Verf\374gung steht) Tj T* ET
|
3832 |
+
Q
|
3833 |
+
Q
|
3834 |
+
q
|
3835 |
+
1 0 0 1 6 153 cm
|
3836 |
+
q
|
3837 |
+
0 0 0 rg
|
3838 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (URL) Tj T* ET
|
3839 |
+
Q
|
3840 |
+
Q
|
3841 |
+
q
|
3842 |
+
1 0 0 1 134.1518 141 cm
|
3843 |
+
q
|
3844 |
+
0 0 0 rg
|
3845 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Die URL der Seite, welche im Iframe erscheint Bitte nur bei expliziter) Tj T* (Aufforderung durch Expercash \344ndern) Tj T* ET
|
3846 |
+
Q
|
3847 |
+
Q
|
3848 |
+
q
|
3849 |
+
1 0 0 1 6 111 cm
|
3850 |
+
q
|
3851 |
+
0 0 0 rg
|
3852 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Autorisierung /) Tj T* (Direktbelastung) Tj T* ET
|
3853 |
+
Q
|
3854 |
+
Q
|
3855 |
+
q
|
3856 |
+
1 0 0 1 134.1518 75 cm
|
3857 |
+
q
|
3858 |
+
0 0 0 rg
|
3859 |
+
BT 1 0 0 1 0 50 Tm /F1 10 Tf 12 TL (Hier k\366nnen Sie den Typ des Zahlungsvorgangs konfigurieren. Im Modus) Tj T* ("Autorisierung" wird das Geld vom Kunden vor-autorisiert, aber noch nicht) Tj T* (eingezogen. Im Modus "Direktbelastung" wird das Geld bei einer) Tj T* (erfolgreichen Zahlung sofort abgebucht. Beachten Sie hierzu auch den) Tj T* (Punkt Zahlungstypen) Tj T* ET
|
3860 |
+
Q
|
3861 |
+
Q
|
3862 |
+
q
|
3863 |
+
1 0 0 1 6 45 cm
|
3864 |
+
q
|
3865 |
+
0 0 0 rg
|
3866 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Rechnungserstellung bei) Tj T* (Belastung) Tj T* ET
|
3867 |
+
Q
|
3868 |
+
Q
|
3869 |
+
q
|
3870 |
+
1 0 0 1 134.1518 45 cm
|
3871 |
+
q
|
3872 |
+
0 0 0 rg
|
3873 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Hier haben Sie die M\366glichkeit die automatische Rechnungserstellung zu) Tj T* (aktivieren.) Tj T* ET
|
3874 |
+
Q
|
3875 |
+
Q
|
3876 |
+
q
|
3877 |
+
1 0 0 1 6 15 cm
|
3878 |
+
q
|
3879 |
+
0 0 0 rg
|
3880 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Rechnungs-Email) Tj T* (automatisch versenden) Tj T* ET
|
3881 |
+
Q
|
3882 |
+
Q
|
3883 |
+
q
|
3884 |
+
1 0 0 1 134.1518 3 cm
|
3885 |
+
q
|
3886 |
+
0 0 0 rg
|
3887 |
+
BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL (Hier k\366nnen Sie einstellen ob automatisch eine Rechnungs-Email) Tj T* (versendet werden soll \( Nur bei Direktbelastung sowie der Zahlart) Tj T* (Barzahlen und in Verbindung mit "Rechnungserstellung bei Belastung"\)) Tj T* ET
|
3888 |
+
Q
|
3889 |
+
Q
|
3890 |
+
q
|
3891 |
+
1 J
|
3892 |
+
1 j
|
3893 |
+
0 0 0 RG
|
3894 |
+
.25 w
|
3895 |
+
n 0 342 m 469.8898 342 l S
|
3896 |
+
n 0 324 m 469.8898 324 l S
|
3897 |
+
n 0 258 m 469.8898 258 l S
|
3898 |
+
n 0 228 m 469.8898 228 l S
|
3899 |
+
n 0 198 m 469.8898 198 l S
|
3900 |
+
n 0 168 m 469.8898 168 l S
|
3901 |
+
n 0 138 m 469.8898 138 l S
|
3902 |
+
n 0 72 m 469.8898 72 l S
|
3903 |
+
n 0 42 m 469.8898 42 l S
|
3904 |
+
n 128.1518 0 m 128.1518 360 l S
|
3905 |
+
n 0 360 m 469.8898 360 l S
|
3906 |
+
n 0 0 m 469.8898 0 l S
|
3907 |
+
n 0 0 m 0 360 l S
|
3908 |
+
n 469.8898 0 m 469.8898 360 l S
|
3909 |
+
Q
|
3910 |
+
Q
|
3911 |
+
q
|
3912 |
+
1 0 0 1 62.69291 118.0687 cm
|
3913 |
+
Q
|
3914 |
+
q
|
3915 |
+
1 0 0 1 62.69291 118.0687 cm
|
3916 |
+
Q
|
3917 |
+
q
|
3918 |
+
1 0 0 1 411.0236 768.242 cm
|
3919 |
+
q
|
3920 |
+
127.5591 0 0 45.30135 0 0 cm
|
3921 |
+
/FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
|
3922 |
+
Q
|
3923 |
+
Q
|
3924 |
+
q
|
3925 |
+
1 0 0 1 56.69291 56.69291 cm
|
3926 |
+
0 0 0 rg
|
3927 |
+
BT /F1 10 Tf 12 TL ET
|
3928 |
+
q
|
3929 |
+
1 0 0 1 6 3 cm
|
3930 |
+
q
|
3931 |
+
0 0 0 rg
|
3932 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
|
3933 |
+
Q
|
3934 |
+
Q
|
3935 |
+
q
|
3936 |
+
1 0 0 1 246.9449 3 cm
|
3937 |
+
q
|
3938 |
+
0 0 0 rg
|
3939 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 209.4849 0 Td (7/16) Tj T* -209.4849 0 Td ET
|
3940 |
+
Q
|
3941 |
+
Q
|
3942 |
+
q
|
3943 |
+
Q
|
3944 |
+
Q
|
3945 |
+
|
3946 |
+
endstream
|
3947 |
+
endobj
|
3948 |
+
% 'R101': class PDFStream
|
3949 |
+
101 0 obj
|
3950 |
+
% page stream
|
3951 |
+
<< /Length 6938 >>
|
3952 |
+
stream
|
3953 |
+
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
3954 |
+
q
|
3955 |
+
1 0 0 1 62.69291 742.0687 cm
|
3956 |
+
Q
|
3957 |
+
q
|
3958 |
+
1 0 0 1 62.69291 718.0687 cm
|
3959 |
+
q
|
3960 |
+
0 .533333 .603922 rg
|
3961 |
+
BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 130.7549 0 Td (Zahlungsmethode Masterpass Fullcheckout) Tj T* -130.7549 0 Td ET
|
3962 |
+
Q
|
3963 |
+
Q
|
3964 |
+
q
|
3965 |
+
1 0 0 1 62.69291 250.0687 cm
|
3966 |
+
1 1 1 rg
|
3967 |
+
n 0 462 469.8898 -18 re f*
|
3968 |
+
.878431 .878431 .878431 rg
|
3969 |
+
n 0 444 469.8898 -18 re f*
|
3970 |
+
1 1 1 rg
|
3971 |
+
n 0 426 469.8898 -66 re f*
|
3972 |
+
.878431 .878431 .878431 rg
|
3973 |
+
n 0 360 469.8898 -30 re f*
|
3974 |
+
1 1 1 rg
|
3975 |
+
n 0 330 469.8898 -30 re f*
|
3976 |
+
.878431 .878431 .878431 rg
|
3977 |
+
n 0 300 469.8898 -30 re f*
|
3978 |
+
1 1 1 rg
|
3979 |
+
n 0 270 469.8898 -30 re f*
|
3980 |
+
.878431 .878431 .878431 rg
|
3981 |
+
n 0 240 469.8898 -30 re f*
|
3982 |
+
1 1 1 rg
|
3983 |
+
n 0 210 469.8898 -30 re f*
|
3984 |
+
.878431 .878431 .878431 rg
|
3985 |
+
n 0 180 469.8898 -30 re f*
|
3986 |
+
1 1 1 rg
|
3987 |
+
n 0 150 469.8898 -30 re f*
|
3988 |
+
.878431 .878431 .878431 rg
|
3989 |
+
n 0 120 469.8898 -30 re f*
|
3990 |
+
1 1 1 rg
|
3991 |
+
n 0 90 469.8898 -90 re f*
|
3992 |
+
.960784 .960784 .862745 rg
|
3993 |
+
n 0 462 469.8898 -18 re f*
|
3994 |
+
0 .533333 .603922 rg
|
3995 |
+
BT /F1 10 Tf 12 TL ET
|
3996 |
+
q
|
3997 |
+
1 0 0 1 6 447 cm
|
3998 |
+
q
|
3999 |
+
.960784 .960784 .862745 rg
|
4000 |
+
n 0 0 116.1518 12 re f*
|
4001 |
+
Q
|
4002 |
+
q
|
4003 |
+
0 .533333 .603922 rg
|
4004 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 28.61588 0 Td (Konfiguration) Tj T* -28.61588 0 Td ET
|
4005 |
+
Q
|
4006 |
+
Q
|
4007 |
+
q
|
4008 |
+
1 0 0 1 134.1518 447 cm
|
4009 |
+
q
|
4010 |
+
.960784 .960784 .862745 rg
|
4011 |
+
n 0 0 329.738 12 re f*
|
4012 |
+
Q
|
4013 |
+
q
|
4014 |
+
0 .533333 .603922 rg
|
4015 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 134.299 0 Td (Beschreibung) Tj T* -134.299 0 Td ET
|
4016 |
+
Q
|
4017 |
+
Q
|
4018 |
+
0 0 0 rg
|
4019 |
+
q
|
4020 |
+
1 0 0 1 6 429 cm
|
4021 |
+
q
|
4022 |
+
0 0 0 rg
|
4023 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Aktiviert) Tj T* ET
|
4024 |
+
Q
|
4025 |
+
Q
|
4026 |
+
q
|
4027 |
+
1 0 0 1 134.1518 429 cm
|
4028 |
+
q
|
4029 |
+
0 0 0 rg
|
4030 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stellen Sie diese Option auf "Ja" um diese Zahlungsmethode zu aktivieren) Tj T* ET
|
4031 |
+
Q
|
4032 |
+
Q
|
4033 |
+
q
|
4034 |
+
1 0 0 1 6 399 cm
|
4035 |
+
q
|
4036 |
+
0 0 0 rg
|
4037 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Status neuer) Tj T* (Bestellungen) Tj T* ET
|
4038 |
+
Q
|
4039 |
+
Q
|
4040 |
+
q
|
4041 |
+
1 0 0 1 134.1518 363 cm
|
4042 |
+
q
|
4043 |
+
0 0 0 rg
|
4044 |
+
BT 1 0 0 1 0 50 Tm /F1 10 Tf 12 TL (Hier haben Sie die M\366glichkeit den Status einer erfolgreichen Bestellung) Tj T* (festzulegen. Die zur Verf\374gung stehenden Statusm\366glichkeiten sind:) Tj T* (Pending \(Ausstehend\), Processing \(Verarbeitung\), Complete) Tj T* (\(Vollst\344ndig\), Closed \(Geschlossen\), Canceled \(Storniert\), On Hold) Tj T* (\(Zur\374ckgestellt\)) Tj T* ET
|
4045 |
+
Q
|
4046 |
+
Q
|
4047 |
+
q
|
4048 |
+
1 0 0 1 6 333 cm
|
4049 |
+
q
|
4050 |
+
0 0 0 rg
|
4051 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Bezeichung im) Tj T* (Shop-Frontend) Tj T* ET
|
4052 |
+
Q
|
4053 |
+
Q
|
4054 |
+
q
|
4055 |
+
1 0 0 1 134.1518 333 cm
|
4056 |
+
q
|
4057 |
+
0 0 0 rg
|
4058 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Hier haben Sie die M\366glichkeit den Titel der Zahlungsart im Frontend zu) Tj T* (bestimmen) Tj T* ET
|
4059 |
+
Q
|
4060 |
+
Q
|
4061 |
+
q
|
4062 |
+
1 0 0 1 6 315 cm
|
4063 |
+
q
|
4064 |
+
0 0 0 rg
|
4065 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Erlaubte L\344nder) Tj T* ET
|
4066 |
+
Q
|
4067 |
+
Q
|
4068 |
+
q
|
4069 |
+
1 0 0 1 134.1518 303 cm
|
4070 |
+
q
|
4071 |
+
0 0 0 rg
|
4072 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Hier k\366nnen Sie konfigurieren, f\374r welche L\344nder die Zahlungsart zur) Tj T* (Verf\374gung steht) Tj T* ET
|
4073 |
+
Q
|
4074 |
+
Q
|
4075 |
+
q
|
4076 |
+
1 0 0 1 6 285 cm
|
4077 |
+
q
|
4078 |
+
0 0 0 rg
|
4079 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Erlaubte W\344hrungen) Tj T* ET
|
4080 |
+
Q
|
4081 |
+
Q
|
4082 |
+
q
|
4083 |
+
1 0 0 1 134.1518 273 cm
|
4084 |
+
q
|
4085 |
+
0 0 0 rg
|
4086 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Hier k\366nnen Sie konfigurieren, f\374r welche W\344hrungen die Zahlungsart zur) Tj T* (Verf\374gung steht) Tj T* ET
|
4087 |
+
Q
|
4088 |
+
Q
|
4089 |
+
q
|
4090 |
+
1 0 0 1 6 243 cm
|
4091 |
+
q
|
4092 |
+
0 0 0 rg
|
4093 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Button im Warenkorb) Tj T* (anzeigen) Tj T* ET
|
4094 |
+
Q
|
4095 |
+
Q
|
4096 |
+
q
|
4097 |
+
1 0 0 1 134.1518 243 cm
|
4098 |
+
q
|
4099 |
+
0 0 0 rg
|
4100 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Anzeige des Masterpass Button/Links im Warenkorb) Tj T* (aktivieren/deaktivieren.) Tj T* ET
|
4101 |
+
Q
|
4102 |
+
Q
|
4103 |
+
q
|
4104 |
+
1 0 0 1 6 213 cm
|
4105 |
+
q
|
4106 |
+
0 0 0 rg
|
4107 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Button im Mini Warenkorb) Tj T* (anzeigen) Tj T* ET
|
4108 |
+
Q
|
4109 |
+
Q
|
4110 |
+
q
|
4111 |
+
1 0 0 1 134.1518 213 cm
|
4112 |
+
q
|
4113 |
+
0 0 0 rg
|
4114 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Anzeige des Masterpass Button/Links im Mini-Warenkorb) Tj T* (aktivieren/deaktivieren.) Tj T* ET
|
4115 |
+
Q
|
4116 |
+
Q
|
4117 |
+
q
|
4118 |
+
1 0 0 1 6 183 cm
|
4119 |
+
q
|
4120 |
+
0 0 0 rg
|
4121 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Button im Checkout) Tj T* (anzeigen) Tj T* ET
|
4122 |
+
Q
|
4123 |
+
Q
|
4124 |
+
q
|
4125 |
+
1 0 0 1 134.1518 183 cm
|
4126 |
+
q
|
4127 |
+
0 0 0 rg
|
4128 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Anzeige des Masterpass Button/Links und Textes im Login-Step des) Tj T* (Checkouts aktivieren/deaktivieren.) Tj T* ET
|
4129 |
+
Q
|
4130 |
+
Q
|
4131 |
+
q
|
4132 |
+
1 0 0 1 6 153 cm
|
4133 |
+
q
|
4134 |
+
0 0 0 rg
|
4135 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Zus\344tzlicher) Tj T* (Checkout-Text) Tj T* ET
|
4136 |
+
Q
|
4137 |
+
Q
|
4138 |
+
q
|
4139 |
+
1 0 0 1 134.1518 153 cm
|
4140 |
+
q
|
4141 |
+
0 0 0 rg
|
4142 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Text welcher im Login-Step des Checkouts angezeigt wird. \(nur wenn) Tj T* (Button im Checkout anzeigen aktiviert ist\)) Tj T* ET
|
4143 |
+
Q
|
4144 |
+
Q
|
4145 |
+
q
|
4146 |
+
1 0 0 1 6 135 cm
|
4147 |
+
q
|
4148 |
+
0 0 0 rg
|
4149 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Link anzeigen) Tj T* ET
|
4150 |
+
Q
|
4151 |
+
Q
|
4152 |
+
q
|
4153 |
+
1 0 0 1 134.1518 123 cm
|
4154 |
+
q
|
4155 |
+
0 0 0 rg
|
4156 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Anzeige des "Erfahre mehr..." Links neben dem Masterpass Logo) Tj T* (aktivieren/deaktivieren) Tj T* ET
|
4157 |
+
Q
|
4158 |
+
Q
|
4159 |
+
q
|
4160 |
+
1 0 0 1 6 93 cm
|
4161 |
+
q
|
4162 |
+
0 0 0 rg
|
4163 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Kreditkartendaten im) Tj T* (Checkout anzeigen) Tj T* ET
|
4164 |
+
Q
|
4165 |
+
Q
|
4166 |
+
q
|
4167 |
+
1 0 0 1 134.1518 93 cm
|
4168 |
+
q
|
4169 |
+
0 0 0 rg
|
4170 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Wenn aktiviert werden die maskierte Kreditkartennummer und der) Tj T* (Creditkartentyp im Abschnit Zahlungsmethoden angezeigt.) Tj T* ET
|
4171 |
+
Q
|
4172 |
+
Q
|
4173 |
+
q
|
4174 |
+
1 0 0 1 6 63 cm
|
4175 |
+
q
|
4176 |
+
0 0 0 rg
|
4177 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Rechnungserstellung bei) Tj T* (Kauf) Tj T* ET
|
4178 |
+
Q
|
4179 |
+
Q
|
4180 |
+
q
|
4181 |
+
1 0 0 1 134.1518 63 cm
|
4182 |
+
q
|
4183 |
+
0 0 0 rg
|
4184 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Hier haben Sie die M\366glichkeit die automatische Rechnungserstellung zu) Tj T* (aktivieren) Tj T* ET
|
4185 |
+
Q
|
4186 |
+
Q
|
4187 |
+
q
|
4188 |
+
1 0 0 1 134.1518 39 cm
|
4189 |
+
q
|
4190 |
+
0 0 0 rg
|
4191 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Wichtig: Diese Option steuert auch gleichzeitig den verwendeten) Tj T* (Zahlungsvorgangstyp) Tj T* ET
|
4192 |
+
Q
|
4193 |
+
Q
|
4194 |
+
q
|
4195 |
+
1 0 0 1 134.1518 27 cm
|
4196 |
+
q
|
4197 |
+
0 0 0 rg
|
4198 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Aktiviert = Direktbelastung) Tj T* ET
|
4199 |
+
Q
|
4200 |
+
Q
|
4201 |
+
q
|
4202 |
+
1 0 0 1 134.1518 15 cm
|
4203 |
+
q
|
4204 |
+
0 0 0 rg
|
4205 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Deaktiviert = Autorisierung) Tj T* ET
|
4206 |
+
Q
|
4207 |
+
Q
|
4208 |
+
q
|
4209 |
+
1 0 0 1 134.1518 3 cm
|
4210 |
+
q
|
4211 |
+
0 0 0 rg
|
4212 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Beachten Sie hierzu auch den Punkt "Zahlungstypen") Tj T* ET
|
4213 |
+
Q
|
4214 |
+
Q
|
4215 |
+
q
|
4216 |
+
1 J
|
4217 |
+
1 j
|
4218 |
+
0 0 0 RG
|
4219 |
+
.25 w
|
4220 |
+
n 0 444 m 469.8898 444 l S
|
4221 |
+
n 0 426 m 469.8898 426 l S
|
4222 |
+
n 0 360 m 469.8898 360 l S
|
4223 |
+
n 0 330 m 469.8898 330 l S
|
4224 |
+
n 0 300 m 469.8898 300 l S
|
4225 |
+
n 0 270 m 469.8898 270 l S
|
4226 |
+
n 0 240 m 469.8898 240 l S
|
4227 |
+
n 0 210 m 469.8898 210 l S
|
4228 |
+
n 0 180 m 469.8898 180 l S
|
4229 |
+
n 0 150 m 469.8898 150 l S
|
4230 |
+
n 0 120 m 469.8898 120 l S
|
4231 |
+
n 0 90 m 469.8898 90 l S
|
4232 |
+
n 128.1518 0 m 128.1518 462 l S
|
4233 |
+
n 0 462 m 469.8898 462 l S
|
4234 |
+
n 0 0 m 469.8898 0 l S
|
4235 |
+
n 0 0 m 0 462 l S
|
4236 |
+
n 469.8898 0 m 469.8898 462 l S
|
4237 |
+
Q
|
4238 |
+
Q
|
4239 |
+
q
|
4240 |
+
1 0 0 1 62.69291 250.0687 cm
|
4241 |
+
Q
|
4242 |
+
q
|
4243 |
+
1 0 0 1 62.69291 238.0687 cm
|
4244 |
+
Q
|
4245 |
+
q
|
4246 |
+
1 0 0 1 411.0236 768.242 cm
|
4247 |
+
q
|
4248 |
+
127.5591 0 0 45.30135 0 0 cm
|
4249 |
+
/FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
|
4250 |
+
Q
|
4251 |
+
Q
|
4252 |
+
q
|
4253 |
+
1 0 0 1 56.69291 56.69291 cm
|
4254 |
+
0 0 0 rg
|
4255 |
+
BT /F1 10 Tf 12 TL ET
|
4256 |
+
q
|
4257 |
+
1 0 0 1 6 3 cm
|
4258 |
+
q
|
4259 |
+
0 0 0 rg
|
4260 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
|
4261 |
+
Q
|
4262 |
+
Q
|
4263 |
+
q
|
4264 |
+
1 0 0 1 246.9449 3 cm
|
4265 |
+
q
|
4266 |
+
0 0 0 rg
|
4267 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 209.4849 0 Td (8/16) Tj T* -209.4849 0 Td ET
|
4268 |
+
Q
|
4269 |
+
Q
|
4270 |
+
q
|
4271 |
+
Q
|
4272 |
+
Q
|
4273 |
+
|
4274 |
+
endstream
|
4275 |
+
endobj
|
4276 |
+
% 'R102': class PDFStream
|
4277 |
+
102 0 obj
|
4278 |
+
% page stream
|
4279 |
+
<< /Length 1784 >>
|
4280 |
+
stream
|
4281 |
+
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
4282 |
+
q
|
4283 |
+
1 0 0 1 62.69291 599.0687 cm
|
4284 |
+
.960784 .960784 .862745 rg
|
4285 |
+
n 0 149 469.8898 -149 re f*
|
4286 |
+
0 0 0 rg
|
4287 |
+
BT /F1 10 Tf 12 TL ET
|
4288 |
+
BT 1 0 0 1 6 123 Tm T* ET
|
4289 |
+
q
|
4290 |
+
1 0 0 1 16 118 cm
|
4291 |
+
q
|
4292 |
+
0 .533333 .603922 rg
|
4293 |
+
BT 1 0 0 1 0 2.5 Tm /F3 12.5 Tf 15 TL (Note) Tj T* ET
|
4294 |
+
Q
|
4295 |
+
Q
|
4296 |
+
q
|
4297 |
+
1 0 0 1 16 94 cm
|
4298 |
+
q
|
4299 |
+
0 0 0 rg
|
4300 |
+
BT 1 0 0 1 0 2 Tm /F4 10 Tf 12 TL (Hinweis:) Tj T* ET
|
4301 |
+
Q
|
4302 |
+
Q
|
4303 |
+
q
|
4304 |
+
1 0 0 1 16 16 cm
|
4305 |
+
q
|
4306 |
+
0 0 0 rg
|
4307 |
+
BT 1 0 0 1 0 62 Tm /F1 10 Tf 12 TL .035529 Tw (Da letztlich die drei Zahlungsmethoden "MasterPass", "MasterPass Fullcheckout" und "Kreditkarte") Tj T* 0 Tw 1.753314 Tw (alle zu Kreditkartentransaktionen f\374hren, ist es sehr empfehlenswert, dass auch alle diese drei) Tj T* 0 Tw 6.954961 Tw (Zahlungsarten auf den gleichen Zahlungsvorgangstyp \("Autorisierung/Reservierung" bzw.) Tj T* 0 Tw 2.119976 Tw ("Direktbelastung"\) konfiguriert werden. Ansonsten wird es f\374r Sie sp\344ter deutlich komplizierter,) Tj T* 0 Tw 2.491647 Tw (denn Sie m\374sste dann je nach Zahlungsart wissen, ob nun separat die Buchungstransaktion) Tj T* 0 Tw (\(Capture\) ausgel\366st werden muss oder nicht.) Tj T* ET
|
4308 |
+
Q
|
4309 |
+
Q
|
4310 |
+
q
|
4311 |
+
1 J
|
4312 |
+
1 j
|
4313 |
+
.662745 .662745 .662745 RG
|
4314 |
+
.5 w
|
4315 |
+
n 0 149 m 469.8898 149 l S
|
4316 |
+
n 0 0 m 469.8898 0 l S
|
4317 |
+
n 0 0 m 0 149 l S
|
4318 |
+
n 469.8898 0 m 469.8898 149 l S
|
4319 |
+
Q
|
4320 |
+
Q
|
4321 |
+
q
|
4322 |
+
1 0 0 1 62.69291 593.0687 cm
|
4323 |
+
Q
|
4324 |
+
q
|
4325 |
+
1 0 0 1 62.69291 593.0687 cm
|
4326 |
+
Q
|
4327 |
+
q
|
4328 |
+
1 0 0 1 411.0236 768.242 cm
|
4329 |
+
q
|
4330 |
+
127.5591 0 0 45.30135 0 0 cm
|
4331 |
+
/FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
|
4332 |
+
Q
|
4333 |
+
Q
|
4334 |
+
q
|
4335 |
+
1 0 0 1 56.69291 56.69291 cm
|
4336 |
+
0 0 0 rg
|
4337 |
+
BT /F1 10 Tf 12 TL ET
|
4338 |
+
q
|
4339 |
+
1 0 0 1 6 3 cm
|
4340 |
+
q
|
4341 |
+
0 0 0 rg
|
4342 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
|
4343 |
+
Q
|
4344 |
+
Q
|
4345 |
+
q
|
4346 |
+
1 0 0 1 246.9449 3 cm
|
4347 |
+
q
|
4348 |
+
0 0 0 rg
|
4349 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 209.4849 0 Td (9/16) Tj T* -209.4849 0 Td ET
|
4350 |
+
Q
|
4351 |
+
Q
|
4352 |
+
q
|
4353 |
+
Q
|
4354 |
+
Q
|
4355 |
+
|
4356 |
+
endstream
|
4357 |
+
endobj
|
4358 |
+
% 'R103': class PDFStream
|
4359 |
+
103 0 obj
|
4360 |
+
% page stream
|
4361 |
+
<< /Length 6811 >>
|
4362 |
+
stream
|
4363 |
+
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
4364 |
+
q
|
4365 |
+
1 0 0 1 62.69291 733.0687 cm
|
4366 |
+
q
|
4367 |
+
BT 1 0 0 1 0 2.5 Tm 15 TL /F3 12.5 Tf 0 .533333 .603922 rg (4.2.1 Zahlungstypen) Tj T* ET
|
4368 |
+
Q
|
4369 |
+
Q
|
4370 |
+
q
|
4371 |
+
1 0 0 1 62.69291 721.0687 cm
|
4372 |
+
Q
|
4373 |
+
q
|
4374 |
+
1 0 0 1 62.69291 709.0687 cm
|
4375 |
+
q
|
4376 |
+
0 0 0 rg
|
4377 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
4378 |
+
Q
|
4379 |
+
Q
|
4380 |
+
q
|
4381 |
+
1 0 0 1 62.69291 709.0687 cm
|
4382 |
+
Q
|
4383 |
+
q
|
4384 |
+
1 0 0 1 62.69291 703.0687 cm
|
4385 |
+
Q
|
4386 |
+
q
|
4387 |
+
1 0 0 1 62.69291 679.0687 cm
|
4388 |
+
q
|
4389 |
+
0 .533333 .603922 rg
|
4390 |
+
BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 199.3849 0 Td (Zahlungstypen) Tj T* -199.3849 0 Td ET
|
4391 |
+
Q
|
4392 |
+
Q
|
4393 |
+
q
|
4394 |
+
1 0 0 1 62.69291 385.0687 cm
|
4395 |
+
1 1 1 rg
|
4396 |
+
n 0 288 469.8898 -18 re f*
|
4397 |
+
.878431 .878431 .878431 rg
|
4398 |
+
n 0 270 469.8898 -30 re f*
|
4399 |
+
1 1 1 rg
|
4400 |
+
n 0 240 469.8898 -18 re f*
|
4401 |
+
.878431 .878431 .878431 rg
|
4402 |
+
n 0 222 469.8898 -30 re f*
|
4403 |
+
1 1 1 rg
|
4404 |
+
n 0 192 469.8898 -18 re f*
|
4405 |
+
.878431 .878431 .878431 rg
|
4406 |
+
n 0 174 469.8898 -30 re f*
|
4407 |
+
1 1 1 rg
|
4408 |
+
n 0 144 469.8898 -18 re f*
|
4409 |
+
.878431 .878431 .878431 rg
|
4410 |
+
n 0 126 469.8898 -18 re f*
|
4411 |
+
1 1 1 rg
|
4412 |
+
n 0 108 469.8898 -18 re f*
|
4413 |
+
.878431 .878431 .878431 rg
|
4414 |
+
n 0 90 469.8898 -30 re f*
|
4415 |
+
1 1 1 rg
|
4416 |
+
n 0 60 469.8898 -30 re f*
|
4417 |
+
.878431 .878431 .878431 rg
|
4418 |
+
n 0 30 469.8898 -30 re f*
|
4419 |
+
.960784 .960784 .862745 rg
|
4420 |
+
n 0 288 469.8898 -18 re f*
|
4421 |
+
0 .533333 .603922 rg
|
4422 |
+
BT /F1 10 Tf 12 TL ET
|
4423 |
+
q
|
4424 |
+
1 0 0 1 6 273 cm
|
4425 |
+
q
|
4426 |
+
.960784 .960784 .862745 rg
|
4427 |
+
n 0 0 88.69066 12 re f*
|
4428 |
+
Q
|
4429 |
+
q
|
4430 |
+
0 .533333 .603922 rg
|
4431 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 17.94533 0 Td (Zahlungsart) Tj T* -17.94533 0 Td ET
|
4432 |
+
Q
|
4433 |
+
Q
|
4434 |
+
q
|
4435 |
+
1 0 0 1 106.6907 273 cm
|
4436 |
+
q
|
4437 |
+
.960784 .960784 .862745 rg
|
4438 |
+
n 0 0 88.69066 12 re f*
|
4439 |
+
Q
|
4440 |
+
q
|
4441 |
+
0 .533333 .603922 rg
|
4442 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 36.01033 0 Td (Typ) Tj T* -36.01033 0 Td ET
|
4443 |
+
Q
|
4444 |
+
Q
|
4445 |
+
q
|
4446 |
+
1 0 0 1 207.3813 273 cm
|
4447 |
+
q
|
4448 |
+
.960784 .960784 .862745 rg
|
4449 |
+
n 0 0 256.5084 12 re f*
|
4450 |
+
Q
|
4451 |
+
q
|
4452 |
+
0 .533333 .603922 rg
|
4453 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 97.68422 0 Td (Beschreibung) Tj T* -97.68422 0 Td ET
|
4454 |
+
Q
|
4455 |
+
Q
|
4456 |
+
0 0 0 rg
|
4457 |
+
q
|
4458 |
+
1 0 0 1 6 255 cm
|
4459 |
+
q
|
4460 |
+
0 0 0 rg
|
4461 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Kreditkarte) Tj T* ET
|
4462 |
+
Q
|
4463 |
+
Q
|
4464 |
+
q
|
4465 |
+
1 0 0 1 106.6907 255 cm
|
4466 |
+
q
|
4467 |
+
0 0 0 rg
|
4468 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Autorisierung) Tj T* ET
|
4469 |
+
Q
|
4470 |
+
Q
|
4471 |
+
q
|
4472 |
+
1 0 0 1 207.3813 243 cm
|
4473 |
+
q
|
4474 |
+
0 0 0 rg
|
4475 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Reservierung des Betrages auf der Kreditkarte \(zum) Tj T* (sp\344teren Einzug\)) Tj T* ET
|
4476 |
+
Q
|
4477 |
+
Q
|
4478 |
+
q
|
4479 |
+
1 0 0 1 6 225 cm
|
4480 |
+
q
|
4481 |
+
0 0 0 rg
|
4482 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Kreditkarte) Tj T* ET
|
4483 |
+
Q
|
4484 |
+
Q
|
4485 |
+
q
|
4486 |
+
1 0 0 1 106.6907 225 cm
|
4487 |
+
q
|
4488 |
+
0 0 0 rg
|
4489 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direktbelastung) Tj T* ET
|
4490 |
+
Q
|
4491 |
+
Q
|
4492 |
+
q
|
4493 |
+
1 0 0 1 207.3813 225 cm
|
4494 |
+
q
|
4495 |
+
0 0 0 rg
|
4496 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direkte Belastung der Kreditkarte) Tj T* ET
|
4497 |
+
Q
|
4498 |
+
Q
|
4499 |
+
q
|
4500 |
+
1 0 0 1 6 207 cm
|
4501 |
+
q
|
4502 |
+
0 0 0 rg
|
4503 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Lastschrift) Tj T* ET
|
4504 |
+
Q
|
4505 |
+
Q
|
4506 |
+
q
|
4507 |
+
1 0 0 1 106.6907 207 cm
|
4508 |
+
q
|
4509 |
+
0 0 0 rg
|
4510 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Autorisierung) Tj T* ET
|
4511 |
+
Q
|
4512 |
+
Q
|
4513 |
+
q
|
4514 |
+
1 0 0 1 207.3813 195 cm
|
4515 |
+
q
|
4516 |
+
0 0 0 rg
|
4517 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Pr\374fung und Speicherung von Kontodaten \(zum sp\344teren) Tj T* (Einzug\)) Tj T* ET
|
4518 |
+
Q
|
4519 |
+
Q
|
4520 |
+
q
|
4521 |
+
1 0 0 1 6 177 cm
|
4522 |
+
q
|
4523 |
+
0 0 0 rg
|
4524 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Lastschrift) Tj T* ET
|
4525 |
+
Q
|
4526 |
+
Q
|
4527 |
+
q
|
4528 |
+
1 0 0 1 106.6907 177 cm
|
4529 |
+
q
|
4530 |
+
0 0 0 rg
|
4531 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direktbelastung) Tj T* ET
|
4532 |
+
Q
|
4533 |
+
Q
|
4534 |
+
q
|
4535 |
+
1 0 0 1 207.3813 177 cm
|
4536 |
+
q
|
4537 |
+
0 0 0 rg
|
4538 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direkte Ausl\366sung einer Lastschrift) Tj T* ET
|
4539 |
+
Q
|
4540 |
+
Q
|
4541 |
+
q
|
4542 |
+
1 0 0 1 6 159 cm
|
4543 |
+
q
|
4544 |
+
0 0 0 rg
|
4545 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Barzahlen) Tj T* ET
|
4546 |
+
Q
|
4547 |
+
Q
|
4548 |
+
q
|
4549 |
+
1 0 0 1 106.6907 159 cm
|
4550 |
+
q
|
4551 |
+
0 0 0 rg
|
4552 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Autorisierung) Tj T* ET
|
4553 |
+
Q
|
4554 |
+
Q
|
4555 |
+
q
|
4556 |
+
1 0 0 1 207.3813 147 cm
|
4557 |
+
q
|
4558 |
+
0 0 0 rg
|
4559 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Kunde geht mit "Zahlschein" zu einer) Tj T* (Barzahlen-Annahmestelle und zahlt dort) Tj T* ET
|
4560 |
+
Q
|
4561 |
+
Q
|
4562 |
+
q
|
4563 |
+
1 0 0 1 6 129 cm
|
4564 |
+
q
|
4565 |
+
0 0 0 rg
|
4566 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Giropay) Tj T* ET
|
4567 |
+
Q
|
4568 |
+
Q
|
4569 |
+
q
|
4570 |
+
1 0 0 1 106.6907 129 cm
|
4571 |
+
q
|
4572 |
+
0 0 0 rg
|
4573 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direktbelastung) Tj T* ET
|
4574 |
+
Q
|
4575 |
+
Q
|
4576 |
+
q
|
4577 |
+
1 0 0 1 207.3813 129 cm
|
4578 |
+
q
|
4579 |
+
0 0 0 rg
|
4580 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direkte Belastung des angegebenen Kunden-Kontos) Tj T* ET
|
4581 |
+
Q
|
4582 |
+
Q
|
4583 |
+
q
|
4584 |
+
1 0 0 1 6 111 cm
|
4585 |
+
q
|
4586 |
+
0 0 0 rg
|
4587 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Sofort\374berweisung) Tj T* ET
|
4588 |
+
Q
|
4589 |
+
Q
|
4590 |
+
q
|
4591 |
+
1 0 0 1 106.6907 111 cm
|
4592 |
+
q
|
4593 |
+
0 0 0 rg
|
4594 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direktbelastung) Tj T* ET
|
4595 |
+
Q
|
4596 |
+
Q
|
4597 |
+
q
|
4598 |
+
1 0 0 1 207.3813 111 cm
|
4599 |
+
q
|
4600 |
+
0 0 0 rg
|
4601 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direkte Belastung des angegebenen Kunden-Kontos) Tj T* ET
|
4602 |
+
Q
|
4603 |
+
Q
|
4604 |
+
q
|
4605 |
+
1 0 0 1 6 93 cm
|
4606 |
+
q
|
4607 |
+
0 0 0 rg
|
4608 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Masterpass) Tj T* ET
|
4609 |
+
Q
|
4610 |
+
Q
|
4611 |
+
q
|
4612 |
+
1 0 0 1 106.6907 93 cm
|
4613 |
+
q
|
4614 |
+
0 0 0 rg
|
4615 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direktbelastung) Tj T* ET
|
4616 |
+
Q
|
4617 |
+
Q
|
4618 |
+
q
|
4619 |
+
1 0 0 1 207.3813 93 cm
|
4620 |
+
q
|
4621 |
+
0 0 0 rg
|
4622 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direkte Belastung der Kreditkarte) Tj T* ET
|
4623 |
+
Q
|
4624 |
+
Q
|
4625 |
+
q
|
4626 |
+
1 0 0 1 6 75 cm
|
4627 |
+
q
|
4628 |
+
0 0 0 rg
|
4629 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Masterpass) Tj T* ET
|
4630 |
+
Q
|
4631 |
+
Q
|
4632 |
+
q
|
4633 |
+
1 0 0 1 106.6907 75 cm
|
4634 |
+
q
|
4635 |
+
0 0 0 rg
|
4636 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Autorisierung) Tj T* ET
|
4637 |
+
Q
|
4638 |
+
Q
|
4639 |
+
q
|
4640 |
+
1 0 0 1 207.3813 63 cm
|
4641 |
+
q
|
4642 |
+
0 0 0 rg
|
4643 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Reservierung des Betrages auf der Kreditkarte \(zum) Tj T* (sp\344teren Einzug\)) Tj T* ET
|
4644 |
+
Q
|
4645 |
+
Q
|
4646 |
+
q
|
4647 |
+
1 0 0 1 6 33 cm
|
4648 |
+
q
|
4649 |
+
0 0 0 rg
|
4650 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Masterpass) Tj T* (Fullcheckout) Tj T* ET
|
4651 |
+
Q
|
4652 |
+
Q
|
4653 |
+
q
|
4654 |
+
1 0 0 1 106.6907 45 cm
|
4655 |
+
q
|
4656 |
+
0 0 0 rg
|
4657 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direktbelastung) Tj T* ET
|
4658 |
+
Q
|
4659 |
+
Q
|
4660 |
+
q
|
4661 |
+
1 0 0 1 207.3813 45 cm
|
4662 |
+
q
|
4663 |
+
0 0 0 rg
|
4664 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Direkte Belastung der Kreditkarte) Tj T* ET
|
4665 |
+
Q
|
4666 |
+
Q
|
4667 |
+
q
|
4668 |
+
1 0 0 1 6 3 cm
|
4669 |
+
q
|
4670 |
+
0 0 0 rg
|
4671 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Masterpass) Tj T* (Fullcheckout) Tj T* ET
|
4672 |
+
Q
|
4673 |
+
Q
|
4674 |
+
q
|
4675 |
+
1 0 0 1 106.6907 15 cm
|
4676 |
+
q
|
4677 |
+
0 0 0 rg
|
4678 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Autorisierung) Tj T* ET
|
4679 |
+
Q
|
4680 |
+
Q
|
4681 |
+
q
|
4682 |
+
1 0 0 1 207.3813 3 cm
|
4683 |
+
q
|
4684 |
+
0 0 0 rg
|
4685 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Reservierung des Betrages auf der Kreditkarte \(zum) Tj T* (sp\344teren Einzug\)) Tj T* ET
|
4686 |
+
Q
|
4687 |
+
Q
|
4688 |
+
q
|
4689 |
+
1 J
|
4690 |
+
1 j
|
4691 |
+
0 0 0 RG
|
4692 |
+
.25 w
|
4693 |
+
n 0 270 m 469.8898 270 l S
|
4694 |
+
n 0 240 m 469.8898 240 l S
|
4695 |
+
n 0 222 m 469.8898 222 l S
|
4696 |
+
n 0 192 m 469.8898 192 l S
|
4697 |
+
n 0 174 m 469.8898 174 l S
|
4698 |
+
n 0 144 m 469.8898 144 l S
|
4699 |
+
n 0 126 m 469.8898 126 l S
|
4700 |
+
n 0 108 m 469.8898 108 l S
|
4701 |
+
n 0 90 m 469.8898 90 l S
|
4702 |
+
n 0 60 m 469.8898 60 l S
|
4703 |
+
n 0 30 m 469.8898 30 l S
|
4704 |
+
n 100.6907 0 m 100.6907 288 l S
|
4705 |
+
n 201.3813 0 m 201.3813 288 l S
|
4706 |
+
n 0 288 m 469.8898 288 l S
|
4707 |
+
n 0 0 m 469.8898 0 l S
|
4708 |
+
n 0 0 m 0 288 l S
|
4709 |
+
n 469.8898 0 m 469.8898 288 l S
|
4710 |
+
Q
|
4711 |
+
Q
|
4712 |
+
q
|
4713 |
+
1 0 0 1 62.69291 385.0687 cm
|
4714 |
+
Q
|
4715 |
+
q
|
4716 |
+
1 0 0 1 62.69291 385.0687 cm
|
4717 |
+
Q
|
4718 |
+
q
|
4719 |
+
1 0 0 1 411.0236 768.242 cm
|
4720 |
+
q
|
4721 |
+
127.5591 0 0 45.30135 0 0 cm
|
4722 |
+
/FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
|
4723 |
+
Q
|
4724 |
+
Q
|
4725 |
+
q
|
4726 |
+
1 0 0 1 56.69291 56.69291 cm
|
4727 |
+
0 0 0 rg
|
4728 |
+
BT /F1 10 Tf 12 TL ET
|
4729 |
+
q
|
4730 |
+
1 0 0 1 6 3 cm
|
4731 |
+
q
|
4732 |
+
0 0 0 rg
|
4733 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
|
4734 |
+
Q
|
4735 |
+
Q
|
4736 |
+
q
|
4737 |
+
1 0 0 1 246.9449 3 cm
|
4738 |
+
q
|
4739 |
+
0 0 0 rg
|
4740 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 203.9249 0 Td (10/16) Tj T* -203.9249 0 Td ET
|
4741 |
+
Q
|
4742 |
+
Q
|
4743 |
+
q
|
4744 |
+
Q
|
4745 |
+
Q
|
4746 |
+
|
4747 |
+
endstream
|
4748 |
+
endobj
|
4749 |
+
% 'R104': class PDFStream
|
4750 |
+
104 0 obj
|
4751 |
+
% page stream
|
4752 |
+
<< /Length 4485 >>
|
4753 |
+
stream
|
4754 |
+
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
4755 |
+
q
|
4756 |
+
1 0 0 1 62.69291 742.0687 cm
|
4757 |
+
Q
|
4758 |
+
q
|
4759 |
+
1 0 0 1 62.69291 730.0687 cm
|
4760 |
+
q
|
4761 |
+
0 0 0 rg
|
4762 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
4763 |
+
Q
|
4764 |
+
Q
|
4765 |
+
q
|
4766 |
+
1 0 0 1 62.69291 730.0687 cm
|
4767 |
+
Q
|
4768 |
+
q
|
4769 |
+
1 0 0 1 62.69291 703.0687 cm
|
4770 |
+
q
|
4771 |
+
BT 1 0 0 1 0 2.5 Tm 15 TL /F3 12.5 Tf 0 .533333 .603922 rg (4.2.2 Zahlungsstatus) Tj T* ET
|
4772 |
+
Q
|
4773 |
+
Q
|
4774 |
+
q
|
4775 |
+
1 0 0 1 62.69291 691.0687 cm
|
4776 |
+
Q
|
4777 |
+
q
|
4778 |
+
1 0 0 1 62.69291 679.0687 cm
|
4779 |
+
q
|
4780 |
+
0 0 0 rg
|
4781 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
4782 |
+
Q
|
4783 |
+
Q
|
4784 |
+
q
|
4785 |
+
1 0 0 1 62.69291 679.0687 cm
|
4786 |
+
Q
|
4787 |
+
q
|
4788 |
+
1 0 0 1 62.69291 649.0687 cm
|
4789 |
+
q
|
4790 |
+
0 0 0 rg
|
4791 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 1.26748 Tw (Sie haben die M\366glichkeit f\374r jeder Zahlungsmethode folgende Status zu konfigurieren. Bitte bedenken) Tj T* 0 Tw (Sie hier eine sinnvolle Konfiguration vornehmen.) Tj T* ET
|
4792 |
+
Q
|
4793 |
+
Q
|
4794 |
+
q
|
4795 |
+
1 0 0 1 62.69291 643.0687 cm
|
4796 |
+
Q
|
4797 |
+
q
|
4798 |
+
1 0 0 1 62.69291 619.0687 cm
|
4799 |
+
q
|
4800 |
+
0 .533333 .603922 rg
|
4801 |
+
BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 200.7749 0 Td (Zahlungstatus) Tj T* -200.7749 0 Td ET
|
4802 |
+
Q
|
4803 |
+
Q
|
4804 |
+
q
|
4805 |
+
1 0 0 1 62.69291 457.0687 cm
|
4806 |
+
1 1 1 rg
|
4807 |
+
n 0 156 469.8898 -18 re f*
|
4808 |
+
.878431 .878431 .878431 rg
|
4809 |
+
n 0 138 469.8898 -18 re f*
|
4810 |
+
1 1 1 rg
|
4811 |
+
n 0 120 469.8898 -18 re f*
|
4812 |
+
.878431 .878431 .878431 rg
|
4813 |
+
n 0 102 469.8898 -18 re f*
|
4814 |
+
1 1 1 rg
|
4815 |
+
n 0 84 469.8898 -18 re f*
|
4816 |
+
.878431 .878431 .878431 rg
|
4817 |
+
n 0 66 469.8898 -30 re f*
|
4818 |
+
1 1 1 rg
|
4819 |
+
n 0 36 469.8898 -18 re f*
|
4820 |
+
.878431 .878431 .878431 rg
|
4821 |
+
n 0 18 469.8898 -18 re f*
|
4822 |
+
.960784 .960784 .862745 rg
|
4823 |
+
n 0 156 469.8898 -18 re f*
|
4824 |
+
0 .533333 .603922 rg
|
4825 |
+
BT /F1 10 Tf 12 TL ET
|
4826 |
+
q
|
4827 |
+
1 0 0 1 6 141 cm
|
4828 |
+
q
|
4829 |
+
.960784 .960784 .862745 rg
|
4830 |
+
n 0 0 116.1518 12 re f*
|
4831 |
+
Q
|
4832 |
+
q
|
4833 |
+
0 .533333 .603922 rg
|
4834 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 24.17088 0 Td (Zahlungsstatus) Tj T* -24.17088 0 Td ET
|
4835 |
+
Q
|
4836 |
+
Q
|
4837 |
+
q
|
4838 |
+
1 0 0 1 134.1518 141 cm
|
4839 |
+
q
|
4840 |
+
.960784 .960784 .862745 rg
|
4841 |
+
n 0 0 329.738 12 re f*
|
4842 |
+
Q
|
4843 |
+
q
|
4844 |
+
0 .533333 .603922 rg
|
4845 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 134.299 0 Td (Beschreibung) Tj T* -134.299 0 Td ET
|
4846 |
+
Q
|
4847 |
+
Q
|
4848 |
+
0 0 0 rg
|
4849 |
+
q
|
4850 |
+
1 0 0 1 6 123 cm
|
4851 |
+
q
|
4852 |
+
0 0 0 rg
|
4853 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Closed/Geschlossen) Tj T* ET
|
4854 |
+
Q
|
4855 |
+
Q
|
4856 |
+
q
|
4857 |
+
1 0 0 1 134.1518 123 cm
|
4858 |
+
q
|
4859 |
+
0 0 0 rg
|
4860 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (berechnet und gut geschrieben) Tj T* ET
|
4861 |
+
Q
|
4862 |
+
Q
|
4863 |
+
q
|
4864 |
+
1 0 0 1 6 105 cm
|
4865 |
+
q
|
4866 |
+
0 0 0 rg
|
4867 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Canceled/Abgebrochen) Tj T* ET
|
4868 |
+
Q
|
4869 |
+
Q
|
4870 |
+
q
|
4871 |
+
1 0 0 1 134.1518 105 cm
|
4872 |
+
q
|
4873 |
+
0 0 0 rg
|
4874 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (storniert oder Zahlung vom Kunden abgebrochen) Tj T* ET
|
4875 |
+
Q
|
4876 |
+
Q
|
4877 |
+
q
|
4878 |
+
1 0 0 1 6 87 cm
|
4879 |
+
q
|
4880 |
+
0 0 0 rg
|
4881 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Complete/Vollst\344ndig) Tj T* ET
|
4882 |
+
Q
|
4883 |
+
Q
|
4884 |
+
q
|
4885 |
+
1 0 0 1 134.1518 87 cm
|
4886 |
+
q
|
4887 |
+
0 0 0 rg
|
4888 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (berechnet und versendet) Tj T* ET
|
4889 |
+
Q
|
4890 |
+
Q
|
4891 |
+
q
|
4892 |
+
1 0 0 1 6 69 cm
|
4893 |
+
q
|
4894 |
+
0 0 0 rg
|
4895 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Pending/Wartend) Tj T* ET
|
4896 |
+
Q
|
4897 |
+
Q
|
4898 |
+
q
|
4899 |
+
1 0 0 1 134.1518 69 cm
|
4900 |
+
q
|
4901 |
+
0 0 0 rg
|
4902 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (wartend, d.h. Nachnahme oder Vorkasse) Tj T* ET
|
4903 |
+
Q
|
4904 |
+
Q
|
4905 |
+
q
|
4906 |
+
1 0 0 1 6 39 cm
|
4907 |
+
q
|
4908 |
+
0 0 0 rg
|
4909 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (Pending Payment/Warte) Tj T* (auf Zahlung) Tj T* ET
|
4910 |
+
Q
|
4911 |
+
Q
|
4912 |
+
q
|
4913 |
+
1 0 0 1 134.1518 39 cm
|
4914 |
+
q
|
4915 |
+
0 0 0 rg
|
4916 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (warte auf Zahlung, Zahlung nicht abgeschlossen, wenn der Status l\344nger) Tj T* (besteht) Tj T* ET
|
4917 |
+
Q
|
4918 |
+
Q
|
4919 |
+
q
|
4920 |
+
1 0 0 1 6 21 cm
|
4921 |
+
q
|
4922 |
+
0 0 0 rg
|
4923 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Processing/Verarbeitung) Tj T* ET
|
4924 |
+
Q
|
4925 |
+
Q
|
4926 |
+
q
|
4927 |
+
1 0 0 1 134.1518 21 cm
|
4928 |
+
q
|
4929 |
+
0 0 0 rg
|
4930 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Verarbeitung, d.h. Ware bezahlt und/oder Rechnung erstellt) Tj T* ET
|
4931 |
+
Q
|
4932 |
+
Q
|
4933 |
+
q
|
4934 |
+
1 0 0 1 6 3 cm
|
4935 |
+
q
|
4936 |
+
0 0 0 rg
|
4937 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (On Hold/Zur\374ckgestellt) Tj T* ET
|
4938 |
+
Q
|
4939 |
+
Q
|
4940 |
+
q
|
4941 |
+
1 0 0 1 134.1518 3 cm
|
4942 |
+
q
|
4943 |
+
0 0 0 rg
|
4944 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Zur\374ckgestellt) Tj T* ET
|
4945 |
+
Q
|
4946 |
+
Q
|
4947 |
+
q
|
4948 |
+
1 J
|
4949 |
+
1 j
|
4950 |
+
0 0 0 RG
|
4951 |
+
.25 w
|
4952 |
+
n 0 138 m 469.8898 138 l S
|
4953 |
+
n 0 120 m 469.8898 120 l S
|
4954 |
+
n 0 102 m 469.8898 102 l S
|
4955 |
+
n 0 84 m 469.8898 84 l S
|
4956 |
+
n 0 66 m 469.8898 66 l S
|
4957 |
+
n 0 36 m 469.8898 36 l S
|
4958 |
+
n 0 18 m 469.8898 18 l S
|
4959 |
+
n 128.1518 0 m 128.1518 156 l S
|
4960 |
+
n 0 156 m 469.8898 156 l S
|
4961 |
+
n 0 0 m 469.8898 0 l S
|
4962 |
+
n 0 0 m 0 156 l S
|
4963 |
+
n 469.8898 0 m 469.8898 156 l S
|
4964 |
+
Q
|
4965 |
+
Q
|
4966 |
+
q
|
4967 |
+
1 0 0 1 62.69291 457.0687 cm
|
4968 |
+
Q
|
4969 |
+
q
|
4970 |
+
1 0 0 1 62.69291 457.0687 cm
|
4971 |
+
Q
|
4972 |
+
q
|
4973 |
+
1 0 0 1 411.0236 768.242 cm
|
4974 |
+
q
|
4975 |
+
127.5591 0 0 45.30135 0 0 cm
|
4976 |
+
/FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
|
4977 |
+
Q
|
4978 |
+
Q
|
4979 |
+
q
|
4980 |
+
1 0 0 1 56.69291 56.69291 cm
|
4981 |
+
0 0 0 rg
|
4982 |
+
BT /F1 10 Tf 12 TL ET
|
4983 |
+
q
|
4984 |
+
1 0 0 1 6 3 cm
|
4985 |
+
q
|
4986 |
+
0 0 0 rg
|
4987 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
|
4988 |
+
Q
|
4989 |
+
Q
|
4990 |
+
q
|
4991 |
+
1 0 0 1 246.9449 3 cm
|
4992 |
+
q
|
4993 |
+
0 0 0 rg
|
4994 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 203.9249 0 Td (11/16) Tj T* -203.9249 0 Td ET
|
4995 |
+
Q
|
4996 |
+
Q
|
4997 |
+
q
|
4998 |
+
Q
|
4999 |
+
Q
|
5000 |
+
|
5001 |
+
endstream
|
5002 |
+
endobj
|
5003 |
+
% 'R105': class PDFStream
|
5004 |
+
105 0 obj
|
5005 |
+
% page stream
|
5006 |
+
<< /Length 5356 >>
|
5007 |
+
stream
|
5008 |
+
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
5009 |
+
q
|
5010 |
+
1 0 0 1 62.69291 727.0687 cm
|
5011 |
+
q
|
5012 |
+
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (5 Bedienung) Tj T* ET
|
5013 |
+
Q
|
5014 |
+
Q
|
5015 |
+
q
|
5016 |
+
1 0 0 1 62.69291 697.0687 cm
|
5017 |
+
q
|
5018 |
+
BT 1 0 0 1 0 3 Tm 18 TL /F2 15 Tf 0 .533333 .603922 rg (5.1 Rechnungserstellung/Capture) Tj T* ET
|
5019 |
+
Q
|
5020 |
+
Q
|
5021 |
+
q
|
5022 |
+
1 0 0 1 62.69291 685.0687 cm
|
5023 |
+
Q
|
5024 |
+
q
|
5025 |
+
1 0 0 1 62.69291 673.0687 cm
|
5026 |
+
q
|
5027 |
+
0 0 0 rg
|
5028 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
5029 |
+
Q
|
5030 |
+
Q
|
5031 |
+
q
|
5032 |
+
1 0 0 1 62.69291 673.0687 cm
|
5033 |
+
Q
|
5034 |
+
q
|
5035 |
+
1 0 0 1 62.69291 583.0687 cm
|
5036 |
+
q
|
5037 |
+
BT 1 0 0 1 0 74 Tm .959982 Tw 12 TL /F1 10 Tf 0 0 0 rg (F\374r Zahlarten wo Sie Autorisierung konfiguriert haben wird der Betrag erst bei der Rechnungserstellung) Tj T* 0 Tw 1.385984 Tw (erfasst. Um eine Rechnung zu erstellen und das Capture des Betrages zu veranlassen gehen Sie wie) Tj T* 0 Tw .794692 Tw (folgt vor. Gehen Sie auf "Verk\344ufe" -) Tj (> "Bestellungen" und klicken Sie auf die Bestellung f\374r die Sie eine) Tj T* 0 Tw .019147 Tw (Rechnungserstellung veranlassen m\366chten. Um die Rechnung zu erstellen und das Capture des Betrages) Tj T* 0 Tw 2.345366 Tw (auszul\366sen klicken Sie oben auf "Rechnung". Vergewissern Sie sich dass unten rechts bei "Betrag") Tj T* 0 Tw .163984 Tw (Capture online ausgew\344hlt ist, dies ist standardm\344\337ig der Fall. Klicken Sie nun auf Rechnung erstellen. In) Tj T* 0 Tw (der Bestellhistorie sollten Sie nun einen Vermerk sehen, dass der Betrag Captured wurde.) Tj T* ET
|
5038 |
+
Q
|
5039 |
+
Q
|
5040 |
+
q
|
5041 |
+
1 0 0 1 62.69291 577.0687 cm
|
5042 |
+
Q
|
5043 |
+
q
|
5044 |
+
1 0 0 1 62.69291 565.0687 cm
|
5045 |
+
q
|
5046 |
+
0 0 0 rg
|
5047 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
5048 |
+
Q
|
5049 |
+
Q
|
5050 |
+
q
|
5051 |
+
1 0 0 1 62.69291 565.0687 cm
|
5052 |
+
Q
|
5053 |
+
q
|
5054 |
+
1 0 0 1 62.69291 535.0687 cm
|
5055 |
+
q
|
5056 |
+
BT 1 0 0 1 0 3 Tm 18 TL /F2 15 Tf 0 .533333 .603922 rg (5.2 Besonderheiten MasterPass Fullcheckout) Tj T* ET
|
5057 |
+
Q
|
5058 |
+
Q
|
5059 |
+
q
|
5060 |
+
1 0 0 1 62.69291 523.0687 cm
|
5061 |
+
Q
|
5062 |
+
q
|
5063 |
+
1 0 0 1 62.69291 373.0687 cm
|
5064 |
+
0 0 0 rg
|
5065 |
+
BT /F1 10 Tf 12 TL ET
|
5066 |
+
BT 1 0 0 1 0 2 Tm T* ET
|
5067 |
+
q
|
5068 |
+
1 0 0 1 20 144 cm
|
5069 |
+
Q
|
5070 |
+
q
|
5071 |
+
1 0 0 1 20 144 cm
|
5072 |
+
Q
|
5073 |
+
q
|
5074 |
+
1 0 0 1 20 132 cm
|
5075 |
+
0 0 0 rg
|
5076 |
+
BT /F1 10 Tf 12 TL ET
|
5077 |
+
q
|
5078 |
+
1 0 0 1 6 -3 cm
|
5079 |
+
q
|
5080 |
+
0 0 0 rg
|
5081 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
5082 |
+
Q
|
5083 |
+
Q
|
5084 |
+
q
|
5085 |
+
1 0 0 1 23 -3 cm
|
5086 |
+
q
|
5087 |
+
0 0 0 rg
|
5088 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (F\374r den MasterPass Fullcheckout muss der Shop HTTPS benutzen) Tj T* ET
|
5089 |
+
Q
|
5090 |
+
Q
|
5091 |
+
q
|
5092 |
+
Q
|
5093 |
+
Q
|
5094 |
+
q
|
5095 |
+
1 0 0 1 20 126 cm
|
5096 |
+
Q
|
5097 |
+
q
|
5098 |
+
1 0 0 1 20 114 cm
|
5099 |
+
0 0 0 rg
|
5100 |
+
BT /F1 10 Tf 12 TL ET
|
5101 |
+
q
|
5102 |
+
1 0 0 1 6 -3 cm
|
5103 |
+
q
|
5104 |
+
0 0 0 rg
|
5105 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
5106 |
+
Q
|
5107 |
+
Q
|
5108 |
+
q
|
5109 |
+
1 0 0 1 23 -3 cm
|
5110 |
+
q
|
5111 |
+
0 0 0 rg
|
5112 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Die "MasterPass Fullcheckout"-Buttons werden nur den nicht-eingeloggten K\344ufern angezeigt.) Tj T* ET
|
5113 |
+
Q
|
5114 |
+
Q
|
5115 |
+
q
|
5116 |
+
Q
|
5117 |
+
Q
|
5118 |
+
q
|
5119 |
+
1 0 0 1 20 108 cm
|
5120 |
+
Q
|
5121 |
+
q
|
5122 |
+
1 0 0 1 20 84 cm
|
5123 |
+
0 0 0 rg
|
5124 |
+
BT /F1 10 Tf 12 TL ET
|
5125 |
+
q
|
5126 |
+
1 0 0 1 6 9 cm
|
5127 |
+
q
|
5128 |
+
0 0 0 rg
|
5129 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
5130 |
+
Q
|
5131 |
+
Q
|
5132 |
+
q
|
5133 |
+
1 0 0 1 23 -3 cm
|
5134 |
+
q
|
5135 |
+
0 0 0 rg
|
5136 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL .017251 Tw (Ggf. muss f\374r "MasterPass Fullcheckout" der Gast-Checkout im Shop zugelassen werden \(wenn) Tj T* 0 Tw (dies bspw. durch Drittmodule konfiguriert wird\)) Tj T* ET
|
5137 |
+
Q
|
5138 |
+
Q
|
5139 |
+
q
|
5140 |
+
Q
|
5141 |
+
Q
|
5142 |
+
q
|
5143 |
+
1 0 0 1 20 78 cm
|
5144 |
+
Q
|
5145 |
+
q
|
5146 |
+
1 0 0 1 20 42 cm
|
5147 |
+
0 0 0 rg
|
5148 |
+
BT /F1 10 Tf 12 TL ET
|
5149 |
+
q
|
5150 |
+
1 0 0 1 6 21 cm
|
5151 |
+
q
|
5152 |
+
0 0 0 rg
|
5153 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
5154 |
+
Q
|
5155 |
+
Q
|
5156 |
+
q
|
5157 |
+
1 0 0 1 23 -3 cm
|
5158 |
+
q
|
5159 |
+
0 0 0 rg
|
5160 |
+
BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL .475366 Tw (Der Kauf von Download-Produkten ist in Magento nur mit einem registrierten Account m\366glich -) Tj T* 0 Tw 3.415529 Tw (aus diesem Grund werden keine "MasterPass Fullcheckout"-Buttons angezeigt wenn sich) Tj T* 0 Tw (Download-Produkte im Warenkorb befinden) Tj T* ET
|
5161 |
+
Q
|
5162 |
+
Q
|
5163 |
+
q
|
5164 |
+
Q
|
5165 |
+
Q
|
5166 |
+
q
|
5167 |
+
1 0 0 1 20 36 cm
|
5168 |
+
Q
|
5169 |
+
q
|
5170 |
+
1 0 0 1 20 0 cm
|
5171 |
+
0 0 0 rg
|
5172 |
+
BT /F1 10 Tf 12 TL ET
|
5173 |
+
q
|
5174 |
+
1 0 0 1 6 21 cm
|
5175 |
+
q
|
5176 |
+
0 0 0 rg
|
5177 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
5178 |
+
Q
|
5179 |
+
Q
|
5180 |
+
q
|
5181 |
+
1 0 0 1 23 -3 cm
|
5182 |
+
q
|
5183 |
+
0 0 0 rg
|
5184 |
+
BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL 2.073615 Tw (Verwenden Sie eigene Themes, dann sind ggf. weitere Anpassungen erforderlich damit der) Tj T* 0 Tw 1.923615 Tw (R\374cksprung in den Shop wie erwartet funktioniert \(\334bernahme Adressdaten\) - beachten Sie) Tj T* 0 Tw (hierzu die Details unter dem Punkt 7 "Design") Tj T* ET
|
5185 |
+
Q
|
5186 |
+
Q
|
5187 |
+
q
|
5188 |
+
Q
|
5189 |
+
Q
|
5190 |
+
q
|
5191 |
+
1 0 0 1 20 0 cm
|
5192 |
+
Q
|
5193 |
+
q
|
5194 |
+
Q
|
5195 |
+
Q
|
5196 |
+
q
|
5197 |
+
1 0 0 1 62.69291 373.0687 cm
|
5198 |
+
Q
|
5199 |
+
q
|
5200 |
+
1 0 0 1 62.69291 340.0687 cm
|
5201 |
+
q
|
5202 |
+
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (6 Screencast) Tj T* ET
|
5203 |
+
Q
|
5204 |
+
Q
|
5205 |
+
q
|
5206 |
+
1 0 0 1 62.69291 328.0687 cm
|
5207 |
+
Q
|
5208 |
+
q
|
5209 |
+
1 0 0 1 62.69291 316.0687 cm
|
5210 |
+
q
|
5211 |
+
0 0 0 rg
|
5212 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
5213 |
+
Q
|
5214 |
+
Q
|
5215 |
+
q
|
5216 |
+
1 0 0 1 62.69291 316.0687 cm
|
5217 |
+
Q
|
5218 |
+
q
|
5219 |
+
1 0 0 1 62.69291 286.0687 cm
|
5220 |
+
q
|
5221 |
+
BT 1 0 0 1 0 14 Tm 3.469976 Tw 12 TL /F1 10 Tf 0 0 0 rg (Hinweise zur Installation, Konfiguration sowie einem erfolgreichen Zahlungsvorgang finden Sie auf) Tj T* 0 Tw (Youtube unter ) Tj 0 0 .501961 rg (http://www.youtube.com/user/ExpercashDE) Tj T* ET
|
5222 |
+
Q
|
5223 |
+
Q
|
5224 |
+
q
|
5225 |
+
1 0 0 1 62.69291 286.0687 cm
|
5226 |
+
Q
|
5227 |
+
q
|
5228 |
+
1 0 0 1 411.0236 768.242 cm
|
5229 |
+
q
|
5230 |
+
127.5591 0 0 45.30135 0 0 cm
|
5231 |
+
/FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
|
5232 |
+
Q
|
5233 |
+
Q
|
5234 |
+
q
|
5235 |
+
1 0 0 1 56.69291 56.69291 cm
|
5236 |
+
0 0 0 rg
|
5237 |
+
BT /F1 10 Tf 12 TL ET
|
5238 |
+
q
|
5239 |
+
1 0 0 1 6 3 cm
|
5240 |
+
q
|
5241 |
+
0 0 0 rg
|
5242 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
|
5243 |
+
Q
|
5244 |
+
Q
|
5245 |
+
q
|
5246 |
+
1 0 0 1 246.9449 3 cm
|
5247 |
+
q
|
5248 |
+
0 0 0 rg
|
5249 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 203.9249 0 Td (12/16) Tj T* -203.9249 0 Td ET
|
5250 |
+
Q
|
5251 |
+
Q
|
5252 |
+
q
|
5253 |
+
Q
|
5254 |
+
Q
|
5255 |
+
|
5256 |
+
endstream
|
5257 |
+
endobj
|
5258 |
+
% 'R106': class PDFStream
|
5259 |
+
106 0 obj
|
5260 |
+
% page stream
|
5261 |
+
<< /Length 5048 >>
|
5262 |
+
stream
|
5263 |
+
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
5264 |
+
q
|
5265 |
+
1 0 0 1 62.69291 727.0687 cm
|
5266 |
+
q
|
5267 |
+
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (7 Design) Tj T* ET
|
5268 |
+
Q
|
5269 |
+
Q
|
5270 |
+
q
|
5271 |
+
1 0 0 1 62.69291 715.0687 cm
|
5272 |
+
Q
|
5273 |
+
q
|
5274 |
+
1 0 0 1 62.69291 703.0687 cm
|
5275 |
+
q
|
5276 |
+
0 0 0 rg
|
5277 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
5278 |
+
Q
|
5279 |
+
Q
|
5280 |
+
q
|
5281 |
+
1 0 0 1 62.69291 703.0687 cm
|
5282 |
+
Q
|
5283 |
+
q
|
5284 |
+
1 0 0 1 62.69291 673.0687 cm
|
5285 |
+
q
|
5286 |
+
BT 1 0 0 1 0 3 Tm 18 TL /F2 15 Tf 0 .533333 .603922 rg (7.1 MasterPass Fullcheckout) Tj T* ET
|
5287 |
+
Q
|
5288 |
+
Q
|
5289 |
+
q
|
5290 |
+
1 0 0 1 62.69291 619.0687 cm
|
5291 |
+
q
|
5292 |
+
0 0 0 rg
|
5293 |
+
BT 1 0 0 1 0 38 Tm /F1 10 Tf 12 TL 1.87498 Tw (Beim MasterPass Fullcheckout w\344hlt der K\344ufer seine Adressdaten bei MasterPass aus. Damit diese) Tj T* 0 Tw .956136 Tw (nach dem R\374cksprung in den Shop auch \374bernommen werden, behinhaltet das Modul eine angepasste) Tj T* 0 Tw 4.13816 Tw ("onepage.phtml" Diese "onepage.phtml" kommt immer nur dann zum Einsatz, wenn nach einem) Tj T* 0 Tw (MasterPass Fullchekout der R\374cksprung in den Shop erfolgte.) Tj T* ET
|
5294 |
+
Q
|
5295 |
+
Q
|
5296 |
+
q
|
5297 |
+
1 0 0 1 62.69291 553.0687 cm
|
5298 |
+
q
|
5299 |
+
0 0 0 rg
|
5300 |
+
BT 1 0 0 1 0 50 Tm /F1 10 Tf 12 TL 6.541797 Tw (Falls Sie ein Custom-Theme benutzen, m\374ssen die mit dem Modul ausgelieferten Dateien) Tj T* 0 Tw .205953 Tw ("/expercash/checkout/onepage/js.phtml" und "/expercash/checkout/onepage.phtml" in das Custom-Theme) Tj T* 0 Tw 3.40998 Tw (kopiert werden. An der bestehende "onepage.phtml" des Themes muss nichts ge\344ndert werden -) Tj T* 0 Tw 2.421976 Tw (stattdessen \374bernehmen Sie ggf. existierende Unterschiede der bestehenden "onepage.phtml" in die) Tj T* 0 Tw (eben neu kopierte.) Tj T* ET
|
5301 |
+
Q
|
5302 |
+
Q
|
5303 |
+
q
|
5304 |
+
1 0 0 1 62.69291 535.0687 cm
|
5305 |
+
q
|
5306 |
+
0 0 0 rg
|
5307 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Beispiel: kopieren der mit dem Modul ausgelieferten Dateien von:) Tj T* ET
|
5308 |
+
Q
|
5309 |
+
Q
|
5310 |
+
q
|
5311 |
+
1 0 0 1 62.69291 523.0687 cm
|
5312 |
+
Q
|
5313 |
+
q
|
5314 |
+
1 0 0 1 62.69291 440.0687 cm
|
5315 |
+
.960784 .960784 .862745 rg
|
5316 |
+
n 0 83 469.8898 -83 re f*
|
5317 |
+
0 0 0 rg
|
5318 |
+
BT /F1 10 Tf 12 TL ET
|
5319 |
+
BT 1 0 0 1 6 57 Tm T* ET
|
5320 |
+
q
|
5321 |
+
1 0 0 1 16 52 cm
|
5322 |
+
q
|
5323 |
+
0 .533333 .603922 rg
|
5324 |
+
BT 1 0 0 1 0 2.5 Tm /F3 12.5 Tf 15 TL (Note) Tj T* ET
|
5325 |
+
Q
|
5326 |
+
Q
|
5327 |
+
q
|
5328 |
+
1 0 0 1 16 16 cm
|
5329 |
+
q
|
5330 |
+
0 0 0 rg
|
5331 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL (/app/design/frontend/base/default/template/expercash/checkout/onepage/js.phtml) Tj T* (/app/design/frontend/base/default/template/expercash/checkout/onepage.phtml) Tj T* ET
|
5332 |
+
Q
|
5333 |
+
Q
|
5334 |
+
q
|
5335 |
+
1 J
|
5336 |
+
1 j
|
5337 |
+
.662745 .662745 .662745 RG
|
5338 |
+
.5 w
|
5339 |
+
n 0 83 m 469.8898 83 l S
|
5340 |
+
n 0 0 m 469.8898 0 l S
|
5341 |
+
n 0 0 m 0 83 l S
|
5342 |
+
n 469.8898 0 m 469.8898 83 l S
|
5343 |
+
Q
|
5344 |
+
Q
|
5345 |
+
q
|
5346 |
+
1 0 0 1 62.69291 434.0687 cm
|
5347 |
+
Q
|
5348 |
+
q
|
5349 |
+
1 0 0 1 62.69291 404.0687 cm
|
5350 |
+
q
|
5351 |
+
0 0 0 rg
|
5352 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 2.274651 Tw (einf\374gen in ihr Theme - bitte bachten Sie, dass ihre Order-Struktur ggf. anders aussehen kann und) Tj T* 0 Tw (folgendes nur beispielhaft ist:) Tj T* ET
|
5353 |
+
Q
|
5354 |
+
Q
|
5355 |
+
q
|
5356 |
+
1 0 0 1 62.69291 392.0687 cm
|
5357 |
+
Q
|
5358 |
+
q
|
5359 |
+
1 0 0 1 62.69291 309.0687 cm
|
5360 |
+
.960784 .960784 .862745 rg
|
5361 |
+
n 0 83 469.8898 -83 re f*
|
5362 |
+
0 0 0 rg
|
5363 |
+
BT /F1 10 Tf 12 TL ET
|
5364 |
+
BT 1 0 0 1 6 57 Tm T* ET
|
5365 |
+
q
|
5366 |
+
1 0 0 1 16 52 cm
|
5367 |
+
q
|
5368 |
+
0 .533333 .603922 rg
|
5369 |
+
BT 1 0 0 1 0 2.5 Tm /F3 12.5 Tf 15 TL (Note) Tj T* ET
|
5370 |
+
Q
|
5371 |
+
Q
|
5372 |
+
q
|
5373 |
+
1 0 0 1 16 16 cm
|
5374 |
+
q
|
5375 |
+
BT 1 0 0 1 0 14 Tm 12 TL /F1 10 Tf 0 0 0 rg (/app/design/frontend/default/) Tj (<) Tj (Ihr_Theme) Tj (>) Tj (/template/expercash/checkout/onepage/js.phtml) Tj T* (/app/design/frontend/default/) Tj (<) Tj (Ihr_Theme) Tj (>) Tj (/template/expercash/checkout/onepage.phtml) Tj T* ET
|
5376 |
+
Q
|
5377 |
+
Q
|
5378 |
+
q
|
5379 |
+
1 J
|
5380 |
+
1 j
|
5381 |
+
.662745 .662745 .662745 RG
|
5382 |
+
.5 w
|
5383 |
+
n 0 83 m 469.8898 83 l S
|
5384 |
+
n 0 0 m 469.8898 0 l S
|
5385 |
+
n 0 0 m 0 83 l S
|
5386 |
+
n 469.8898 0 m 469.8898 83 l S
|
5387 |
+
Q
|
5388 |
+
Q
|
5389 |
+
q
|
5390 |
+
1 0 0 1 62.69291 303.0687 cm
|
5391 |
+
Q
|
5392 |
+
q
|
5393 |
+
1 0 0 1 62.69291 285.0687 cm
|
5394 |
+
q
|
5395 |
+
0 0 0 rg
|
5396 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (oder bspw:) Tj T* ET
|
5397 |
+
Q
|
5398 |
+
Q
|
5399 |
+
q
|
5400 |
+
1 0 0 1 62.69291 273.0687 cm
|
5401 |
+
Q
|
5402 |
+
q
|
5403 |
+
1 0 0 1 62.69291 190.0687 cm
|
5404 |
+
.960784 .960784 .862745 rg
|
5405 |
+
n 0 83 469.8898 -83 re f*
|
5406 |
+
0 0 0 rg
|
5407 |
+
BT /F1 10 Tf 12 TL ET
|
5408 |
+
BT 1 0 0 1 6 57 Tm T* ET
|
5409 |
+
q
|
5410 |
+
1 0 0 1 16 52 cm
|
5411 |
+
q
|
5412 |
+
0 .533333 .603922 rg
|
5413 |
+
BT 1 0 0 1 0 2.5 Tm /F3 12.5 Tf 15 TL (Note) Tj T* ET
|
5414 |
+
Q
|
5415 |
+
Q
|
5416 |
+
q
|
5417 |
+
1 0 0 1 16 16 cm
|
5418 |
+
q
|
5419 |
+
BT 1 0 0 1 0 14 Tm 12 TL /F1 10 Tf 0 0 0 rg (/app/design/frontend/) Tj (<) Tj (Ihr_Theme) Tj (>) Tj (/default/template/expercash/checkout/onepage/js.phtml) Tj T* (/app/design/frontend/) Tj (<) Tj (Ihr_Theme) Tj (>) Tj (/default/template/expercash/checkout/onepage.phtml) Tj T* ET
|
5420 |
+
Q
|
5421 |
+
Q
|
5422 |
+
q
|
5423 |
+
1 J
|
5424 |
+
1 j
|
5425 |
+
.662745 .662745 .662745 RG
|
5426 |
+
.5 w
|
5427 |
+
n 0 83 m 469.8898 83 l S
|
5428 |
+
n 0 0 m 469.8898 0 l S
|
5429 |
+
n 0 0 m 0 83 l S
|
5430 |
+
n 469.8898 0 m 469.8898 83 l S
|
5431 |
+
Q
|
5432 |
+
Q
|
5433 |
+
q
|
5434 |
+
1 0 0 1 62.69291 184.0687 cm
|
5435 |
+
Q
|
5436 |
+
q
|
5437 |
+
1 0 0 1 62.69291 166.0687 cm
|
5438 |
+
q
|
5439 |
+
0 0 0 rg
|
5440 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Ggf. muss im Anschluss der Cache gel\366scht werden.) Tj T* ET
|
5441 |
+
Q
|
5442 |
+
Q
|
5443 |
+
q
|
5444 |
+
1 0 0 1 62.69291 166.0687 cm
|
5445 |
+
Q
|
5446 |
+
q
|
5447 |
+
1 0 0 1 411.0236 768.242 cm
|
5448 |
+
q
|
5449 |
+
127.5591 0 0 45.30135 0 0 cm
|
5450 |
+
/FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
|
5451 |
+
Q
|
5452 |
+
Q
|
5453 |
+
q
|
5454 |
+
1 0 0 1 56.69291 56.69291 cm
|
5455 |
+
0 0 0 rg
|
5456 |
+
BT /F1 10 Tf 12 TL ET
|
5457 |
+
q
|
5458 |
+
1 0 0 1 6 3 cm
|
5459 |
+
q
|
5460 |
+
0 0 0 rg
|
5461 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
|
5462 |
+
Q
|
5463 |
+
Q
|
5464 |
+
q
|
5465 |
+
1 0 0 1 246.9449 3 cm
|
5466 |
+
q
|
5467 |
+
0 0 0 rg
|
5468 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 203.9249 0 Td (13/16) Tj T* -203.9249 0 Td ET
|
5469 |
+
Q
|
5470 |
+
Q
|
5471 |
+
q
|
5472 |
+
Q
|
5473 |
+
Q
|
5474 |
+
|
5475 |
+
endstream
|
5476 |
+
endobj
|
5477 |
+
% 'R107': class PDFStream
|
5478 |
+
107 0 obj
|
5479 |
+
% page stream
|
5480 |
+
<< /Length 5170 >>
|
5481 |
+
stream
|
5482 |
+
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
5483 |
+
q
|
5484 |
+
1 0 0 1 62.69291 727.0687 cm
|
5485 |
+
q
|
5486 |
+
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (8 Deinstallation) Tj T* ET
|
5487 |
+
Q
|
5488 |
+
Q
|
5489 |
+
q
|
5490 |
+
1 0 0 1 62.69291 715.0687 cm
|
5491 |
+
Q
|
5492 |
+
q
|
5493 |
+
1 0 0 1 62.69291 703.0687 cm
|
5494 |
+
q
|
5495 |
+
0 0 0 rg
|
5496 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
5497 |
+
Q
|
5498 |
+
Q
|
5499 |
+
q
|
5500 |
+
1 0 0 1 62.69291 703.0687 cm
|
5501 |
+
Q
|
5502 |
+
q
|
5503 |
+
1 0 0 1 62.69291 673.0687 cm
|
5504 |
+
q
|
5505 |
+
0 0 0 rg
|
5506 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 3.029147 Tw (Sollten Sie die Erweiterung nicht mehr ben\366tigen, k\366nnen Sie diese aus Ihrer Magento-Installation) Tj T* 0 Tw (entfernen.) Tj T* ET
|
5507 |
+
Q
|
5508 |
+
Q
|
5509 |
+
q
|
5510 |
+
1 0 0 1 62.69291 661.0687 cm
|
5511 |
+
Q
|
5512 |
+
q
|
5513 |
+
1 0 0 1 62.69291 530.0687 cm
|
5514 |
+
.960784 .960784 .862745 rg
|
5515 |
+
n 0 131 469.8898 -131 re f*
|
5516 |
+
0 0 0 rg
|
5517 |
+
BT /F1 10 Tf 12 TL ET
|
5518 |
+
BT 1 0 0 1 6 105 Tm T* ET
|
5519 |
+
q
|
5520 |
+
1 0 0 1 16 100 cm
|
5521 |
+
q
|
5522 |
+
0 .533333 .603922 rg
|
5523 |
+
BT 1 0 0 1 0 2.5 Tm /F3 12.5 Tf 15 TL (Note) Tj T* ET
|
5524 |
+
Q
|
5525 |
+
Q
|
5526 |
+
q
|
5527 |
+
1 0 0 1 16 76 cm
|
5528 |
+
q
|
5529 |
+
0 0 0 rg
|
5530 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Bitte beachten!) Tj T* ET
|
5531 |
+
Q
|
5532 |
+
Q
|
5533 |
+
q
|
5534 |
+
1 0 0 1 16 70 cm
|
5535 |
+
Q
|
5536 |
+
q
|
5537 |
+
1 0 0 1 16 58 cm
|
5538 |
+
q
|
5539 |
+
0 0 0 rg
|
5540 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
5541 |
+
Q
|
5542 |
+
Q
|
5543 |
+
q
|
5544 |
+
1 0 0 1 16 58 cm
|
5545 |
+
Q
|
5546 |
+
q
|
5547 |
+
1 0 0 1 16 16 cm
|
5548 |
+
q
|
5549 |
+
0 0 0 rg
|
5550 |
+
BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL 2.955814 Tw (Sollte es bereits Bestellungen geben die mit Expercash bezahlt wurden, ist dringend davon) Tj T* 0 Tw 1.655529 Tw (abzuraten das Expercash Modul zu deinstallieren, da die bestehenden Expercash-Bestellungen) Tj T* 0 Tw (sonst nicht mehr ge\366ffnet werden k\366nnen.) Tj T* ET
|
5551 |
+
Q
|
5552 |
+
Q
|
5553 |
+
q
|
5554 |
+
1 J
|
5555 |
+
1 j
|
5556 |
+
.662745 .662745 .662745 RG
|
5557 |
+
.5 w
|
5558 |
+
n 0 131 m 469.8898 131 l S
|
5559 |
+
n 0 0 m 469.8898 0 l S
|
5560 |
+
n 0 0 m 0 131 l S
|
5561 |
+
n 469.8898 0 m 469.8898 131 l S
|
5562 |
+
Q
|
5563 |
+
Q
|
5564 |
+
q
|
5565 |
+
1 0 0 1 62.69291 524.0687 cm
|
5566 |
+
Q
|
5567 |
+
q
|
5568 |
+
1 0 0 1 62.69291 518.0687 cm
|
5569 |
+
Q
|
5570 |
+
q
|
5571 |
+
1 0 0 1 62.69291 506.0687 cm
|
5572 |
+
q
|
5573 |
+
0 0 0 rg
|
5574 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
5575 |
+
Q
|
5576 |
+
Q
|
5577 |
+
q
|
5578 |
+
1 0 0 1 62.69291 506.0687 cm
|
5579 |
+
Q
|
5580 |
+
q
|
5581 |
+
1 0 0 1 62.69291 476.0687 cm
|
5582 |
+
q
|
5583 |
+
BT 1 0 0 1 0 3 Tm 18 TL /F2 15 Tf 0 .533333 .603922 rg (8.1 Per Magento Connect Manager) Tj T* ET
|
5584 |
+
Q
|
5585 |
+
Q
|
5586 |
+
q
|
5587 |
+
1 0 0 1 62.69291 464.0687 cm
|
5588 |
+
Q
|
5589 |
+
q
|
5590 |
+
1 0 0 1 62.69291 452.0687 cm
|
5591 |
+
q
|
5592 |
+
0 0 0 rg
|
5593 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
5594 |
+
Q
|
5595 |
+
Q
|
5596 |
+
q
|
5597 |
+
1 0 0 1 62.69291 452.0687 cm
|
5598 |
+
Q
|
5599 |
+
q
|
5600 |
+
1 0 0 1 62.69291 422.0687 cm
|
5601 |
+
q
|
5602 |
+
0 0 0 rg
|
5603 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL .681984 Tw (Sofern Sie das Modul mittels des Magento Connect Managers installiert haben, gehen Sie bitte wie folgt) Tj T* 0 Tw (vor.) Tj T* ET
|
5604 |
+
Q
|
5605 |
+
Q
|
5606 |
+
q
|
5607 |
+
1 0 0 1 62.69291 416.0687 cm
|
5608 |
+
Q
|
5609 |
+
q
|
5610 |
+
1 0 0 1 62.69291 404.0687 cm
|
5611 |
+
q
|
5612 |
+
0 0 0 rg
|
5613 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
5614 |
+
Q
|
5615 |
+
Q
|
5616 |
+
q
|
5617 |
+
1 0 0 1 62.69291 404.0687 cm
|
5618 |
+
Q
|
5619 |
+
q
|
5620 |
+
1 0 0 1 62.69291 398.0687 cm
|
5621 |
+
Q
|
5622 |
+
q
|
5623 |
+
1 0 0 1 62.69291 398.0687 cm
|
5624 |
+
Q
|
5625 |
+
q
|
5626 |
+
1 0 0 1 62.69291 386.0687 cm
|
5627 |
+
0 0 0 rg
|
5628 |
+
BT /F1 10 Tf 12 TL ET
|
5629 |
+
q
|
5630 |
+
1 0 0 1 6 -3 cm
|
5631 |
+
q
|
5632 |
+
0 0 0 rg
|
5633 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (1.) Tj T* -5.66 0 Td ET
|
5634 |
+
Q
|
5635 |
+
Q
|
5636 |
+
q
|
5637 |
+
1 0 0 1 23 -3 cm
|
5638 |
+
q
|
5639 |
+
0 0 0 rg
|
5640 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Melden Sie sich in Ihrem Magento Backend an) Tj T* ET
|
5641 |
+
Q
|
5642 |
+
Q
|
5643 |
+
q
|
5644 |
+
Q
|
5645 |
+
Q
|
5646 |
+
q
|
5647 |
+
1 0 0 1 62.69291 380.0687 cm
|
5648 |
+
Q
|
5649 |
+
q
|
5650 |
+
1 0 0 1 62.69291 368.0687 cm
|
5651 |
+
0 0 0 rg
|
5652 |
+
BT /F1 10 Tf 12 TL ET
|
5653 |
+
q
|
5654 |
+
1 0 0 1 6 -3 cm
|
5655 |
+
q
|
5656 |
+
0 0 0 rg
|
5657 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (2.) Tj T* -5.66 0 Td ET
|
5658 |
+
Q
|
5659 |
+
Q
|
5660 |
+
q
|
5661 |
+
1 0 0 1 23 -3 cm
|
5662 |
+
q
|
5663 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Navigieren Sie zu "System" -) Tj (> "Magento Connect" -) Tj (> "Magento Connect Manager") Tj T* ET
|
5664 |
+
Q
|
5665 |
+
Q
|
5666 |
+
q
|
5667 |
+
Q
|
5668 |
+
Q
|
5669 |
+
q
|
5670 |
+
1 0 0 1 62.69291 362.0687 cm
|
5671 |
+
Q
|
5672 |
+
q
|
5673 |
+
1 0 0 1 62.69291 350.0687 cm
|
5674 |
+
0 0 0 rg
|
5675 |
+
BT /F1 10 Tf 12 TL ET
|
5676 |
+
q
|
5677 |
+
1 0 0 1 6 -3 cm
|
5678 |
+
q
|
5679 |
+
0 0 0 rg
|
5680 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (3.) Tj T* -5.66 0 Td ET
|
5681 |
+
Q
|
5682 |
+
Q
|
5683 |
+
q
|
5684 |
+
1 0 0 1 23 -3 cm
|
5685 |
+
q
|
5686 |
+
0 0 0 rg
|
5687 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Melden Sie sich im "Magento Connect Manager" an) Tj T* ET
|
5688 |
+
Q
|
5689 |
+
Q
|
5690 |
+
q
|
5691 |
+
Q
|
5692 |
+
Q
|
5693 |
+
q
|
5694 |
+
1 0 0 1 62.69291 344.0687 cm
|
5695 |
+
Q
|
5696 |
+
q
|
5697 |
+
1 0 0 1 62.69291 332.0687 cm
|
5698 |
+
0 0 0 rg
|
5699 |
+
BT /F1 10 Tf 12 TL ET
|
5700 |
+
q
|
5701 |
+
1 0 0 1 6 -3 cm
|
5702 |
+
q
|
5703 |
+
0 0 0 rg
|
5704 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (4.) Tj T* -5.66 0 Td ET
|
5705 |
+
Q
|
5706 |
+
Q
|
5707 |
+
q
|
5708 |
+
1 0 0 1 23 -3 cm
|
5709 |
+
q
|
5710 |
+
0 0 0 rg
|
5711 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (W\344hlen Sie den Tab "Extensions") Tj T* ET
|
5712 |
+
Q
|
5713 |
+
Q
|
5714 |
+
q
|
5715 |
+
Q
|
5716 |
+
Q
|
5717 |
+
q
|
5718 |
+
1 0 0 1 62.69291 326.0687 cm
|
5719 |
+
Q
|
5720 |
+
q
|
5721 |
+
1 0 0 1 62.69291 302.0687 cm
|
5722 |
+
0 0 0 rg
|
5723 |
+
BT /F1 10 Tf 12 TL ET
|
5724 |
+
q
|
5725 |
+
1 0 0 1 6 9 cm
|
5726 |
+
q
|
5727 |
+
0 0 0 rg
|
5728 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (5.) Tj T* -5.66 0 Td ET
|
5729 |
+
Q
|
5730 |
+
Q
|
5731 |
+
q
|
5732 |
+
1 0 0 1 23 -3 cm
|
5733 |
+
q
|
5734 |
+
0 0 0 rg
|
5735 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL .891647 Tw (W\344hlen Sie f\374r die Expercash-Extension die Aktion "Uninstall" und bet\344tigen Sie anschlie\337end den) Tj T* 0 Tw (Button "Commit Changes") Tj T* ET
|
5736 |
+
Q
|
5737 |
+
Q
|
5738 |
+
q
|
5739 |
+
Q
|
5740 |
+
Q
|
5741 |
+
q
|
5742 |
+
1 0 0 1 62.69291 302.0687 cm
|
5743 |
+
Q
|
5744 |
+
q
|
5745 |
+
1 0 0 1 62.69291 296.0687 cm
|
5746 |
+
Q
|
5747 |
+
q
|
5748 |
+
1 0 0 1 62.69291 284.0687 cm
|
5749 |
+
q
|
5750 |
+
0 0 0 rg
|
5751 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
5752 |
+
Q
|
5753 |
+
Q
|
5754 |
+
q
|
5755 |
+
1 0 0 1 62.69291 284.0687 cm
|
5756 |
+
Q
|
5757 |
+
q
|
5758 |
+
1 0 0 1 62.69291 284.0687 cm
|
5759 |
+
Q
|
5760 |
+
q
|
5761 |
+
1 0 0 1 411.0236 768.242 cm
|
5762 |
+
q
|
5763 |
+
127.5591 0 0 45.30135 0 0 cm
|
5764 |
+
/FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
|
5765 |
+
Q
|
5766 |
+
Q
|
5767 |
+
q
|
5768 |
+
1 0 0 1 56.69291 56.69291 cm
|
5769 |
+
0 0 0 rg
|
5770 |
+
BT /F1 10 Tf 12 TL ET
|
5771 |
+
q
|
5772 |
+
1 0 0 1 6 3 cm
|
5773 |
+
q
|
5774 |
+
0 0 0 rg
|
5775 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
|
5776 |
+
Q
|
5777 |
+
Q
|
5778 |
+
q
|
5779 |
+
1 0 0 1 246.9449 3 cm
|
5780 |
+
q
|
5781 |
+
0 0 0 rg
|
5782 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 203.9249 0 Td (14/16) Tj T* -203.9249 0 Td ET
|
5783 |
+
Q
|
5784 |
+
Q
|
5785 |
+
q
|
5786 |
+
Q
|
5787 |
+
Q
|
5788 |
+
|
5789 |
+
endstream
|
5790 |
+
endobj
|
5791 |
+
% 'R108': class PDFStream
|
5792 |
+
108 0 obj
|
5793 |
+
% page stream
|
5794 |
+
<< /Length 8900 >>
|
5795 |
+
stream
|
5796 |
+
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
5797 |
+
q
|
5798 |
+
1 0 0 1 62.69291 730.0687 cm
|
5799 |
+
q
|
5800 |
+
BT 1 0 0 1 0 3 Tm 18 TL /F2 15 Tf 0 .533333 .603922 rg (8.2 Auf Dateiebene) Tj T* ET
|
5801 |
+
Q
|
5802 |
+
Q
|
5803 |
+
q
|
5804 |
+
1 0 0 1 62.69291 718.0687 cm
|
5805 |
+
Q
|
5806 |
+
q
|
5807 |
+
1 0 0 1 62.69291 706.0687 cm
|
5808 |
+
q
|
5809 |
+
0 0 0 rg
|
5810 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
5811 |
+
Q
|
5812 |
+
Q
|
5813 |
+
q
|
5814 |
+
1 0 0 1 62.69291 706.0687 cm
|
5815 |
+
Q
|
5816 |
+
q
|
5817 |
+
1 0 0 1 62.69291 688.0687 cm
|
5818 |
+
q
|
5819 |
+
0 0 0 rg
|
5820 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Um das Modul manuell zu deinstallieren, l\366schen Sie bitte die folgenden Dateien und Ordner:) Tj T* ET
|
5821 |
+
Q
|
5822 |
+
Q
|
5823 |
+
q
|
5824 |
+
1 0 0 1 62.69291 682.0687 cm
|
5825 |
+
Q
|
5826 |
+
q
|
5827 |
+
1 0 0 1 62.69291 670.0687 cm
|
5828 |
+
q
|
5829 |
+
0 0 0 rg
|
5830 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
5831 |
+
Q
|
5832 |
+
Q
|
5833 |
+
q
|
5834 |
+
1 0 0 1 62.69291 670.0687 cm
|
5835 |
+
Q
|
5836 |
+
q
|
5837 |
+
1 0 0 1 62.69291 664.0687 cm
|
5838 |
+
Q
|
5839 |
+
q
|
5840 |
+
1 0 0 1 62.69291 664.0687 cm
|
5841 |
+
Q
|
5842 |
+
q
|
5843 |
+
1 0 0 1 62.69291 652.0687 cm
|
5844 |
+
0 0 0 rg
|
5845 |
+
BT /F1 10 Tf 12 TL ET
|
5846 |
+
q
|
5847 |
+
1 0 0 1 6 -3 cm
|
5848 |
+
q
|
5849 |
+
0 0 0 rg
|
5850 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
5851 |
+
Q
|
5852 |
+
Q
|
5853 |
+
q
|
5854 |
+
1 0 0 1 23 -3 cm
|
5855 |
+
q
|
5856 |
+
0 0 0 rg
|
5857 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/code/community/Expercash/Expercash/) Tj T* ET
|
5858 |
+
Q
|
5859 |
+
Q
|
5860 |
+
q
|
5861 |
+
Q
|
5862 |
+
Q
|
5863 |
+
q
|
5864 |
+
1 0 0 1 62.69291 646.0687 cm
|
5865 |
+
Q
|
5866 |
+
q
|
5867 |
+
1 0 0 1 62.69291 634.0687 cm
|
5868 |
+
0 0 0 rg
|
5869 |
+
BT /F1 10 Tf 12 TL ET
|
5870 |
+
q
|
5871 |
+
1 0 0 1 6 -3 cm
|
5872 |
+
q
|
5873 |
+
0 0 0 rg
|
5874 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
5875 |
+
Q
|
5876 |
+
Q
|
5877 |
+
q
|
5878 |
+
1 0 0 1 23 -3 cm
|
5879 |
+
q
|
5880 |
+
0 0 0 rg
|
5881 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/etc/modules/Expercash_Expercash.xml) Tj T* ET
|
5882 |
+
Q
|
5883 |
+
Q
|
5884 |
+
q
|
5885 |
+
Q
|
5886 |
+
Q
|
5887 |
+
q
|
5888 |
+
1 0 0 1 62.69291 628.0687 cm
|
5889 |
+
Q
|
5890 |
+
q
|
5891 |
+
1 0 0 1 62.69291 616.0687 cm
|
5892 |
+
0 0 0 rg
|
5893 |
+
BT /F1 10 Tf 12 TL ET
|
5894 |
+
q
|
5895 |
+
1 0 0 1 6 -3 cm
|
5896 |
+
q
|
5897 |
+
0 0 0 rg
|
5898 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
5899 |
+
Q
|
5900 |
+
Q
|
5901 |
+
q
|
5902 |
+
1 0 0 1 23 -3 cm
|
5903 |
+
q
|
5904 |
+
0 0 0 rg
|
5905 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/locale/de_DE/Expercash_Expercash.csv) Tj T* ET
|
5906 |
+
Q
|
5907 |
+
Q
|
5908 |
+
q
|
5909 |
+
Q
|
5910 |
+
Q
|
5911 |
+
q
|
5912 |
+
1 0 0 1 62.69291 610.0687 cm
|
5913 |
+
Q
|
5914 |
+
q
|
5915 |
+
1 0 0 1 62.69291 598.0687 cm
|
5916 |
+
0 0 0 rg
|
5917 |
+
BT /F1 10 Tf 12 TL ET
|
5918 |
+
q
|
5919 |
+
1 0 0 1 6 -3 cm
|
5920 |
+
q
|
5921 |
+
0 0 0 rg
|
5922 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
5923 |
+
Q
|
5924 |
+
Q
|
5925 |
+
q
|
5926 |
+
1 0 0 1 23 -3 cm
|
5927 |
+
q
|
5928 |
+
0 0 0 rg
|
5929 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/design/adminhtml/default/default/template/expercash) Tj T* ET
|
5930 |
+
Q
|
5931 |
+
Q
|
5932 |
+
q
|
5933 |
+
Q
|
5934 |
+
Q
|
5935 |
+
q
|
5936 |
+
1 0 0 1 62.69291 592.0687 cm
|
5937 |
+
Q
|
5938 |
+
q
|
5939 |
+
1 0 0 1 62.69291 580.0687 cm
|
5940 |
+
0 0 0 rg
|
5941 |
+
BT /F1 10 Tf 12 TL ET
|
5942 |
+
q
|
5943 |
+
1 0 0 1 6 -3 cm
|
5944 |
+
q
|
5945 |
+
0 0 0 rg
|
5946 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
5947 |
+
Q
|
5948 |
+
Q
|
5949 |
+
q
|
5950 |
+
1 0 0 1 23 -3 cm
|
5951 |
+
q
|
5952 |
+
0 0 0 rg
|
5953 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/design/frontend/default/default/layout/expercash.xml) Tj T* ET
|
5954 |
+
Q
|
5955 |
+
Q
|
5956 |
+
q
|
5957 |
+
Q
|
5958 |
+
Q
|
5959 |
+
q
|
5960 |
+
1 0 0 1 62.69291 574.0687 cm
|
5961 |
+
Q
|
5962 |
+
q
|
5963 |
+
1 0 0 1 62.69291 562.0687 cm
|
5964 |
+
0 0 0 rg
|
5965 |
+
BT /F1 10 Tf 12 TL ET
|
5966 |
+
q
|
5967 |
+
1 0 0 1 6 -3 cm
|
5968 |
+
q
|
5969 |
+
0 0 0 rg
|
5970 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
5971 |
+
Q
|
5972 |
+
Q
|
5973 |
+
q
|
5974 |
+
1 0 0 1 23 -3 cm
|
5975 |
+
q
|
5976 |
+
0 0 0 rg
|
5977 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/design/frontend/default/default/template/expercash/) Tj T* ET
|
5978 |
+
Q
|
5979 |
+
Q
|
5980 |
+
q
|
5981 |
+
Q
|
5982 |
+
Q
|
5983 |
+
q
|
5984 |
+
1 0 0 1 62.69291 562.0687 cm
|
5985 |
+
Q
|
5986 |
+
q
|
5987 |
+
1 0 0 1 62.69291 556.0687 cm
|
5988 |
+
Q
|
5989 |
+
q
|
5990 |
+
1 0 0 1 62.69291 544.0687 cm
|
5991 |
+
q
|
5992 |
+
0 0 0 rg
|
5993 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
5994 |
+
Q
|
5995 |
+
Q
|
5996 |
+
q
|
5997 |
+
1 0 0 1 62.69291 544.0687 cm
|
5998 |
+
Q
|
5999 |
+
q
|
6000 |
+
1 0 0 1 62.69291 514.0687 cm
|
6001 |
+
q
|
6002 |
+
BT 1 0 0 1 0 3 Tm 18 TL /F2 15 Tf 0 .533333 .603922 rg (8.3 Datenbank) Tj T* ET
|
6003 |
+
Q
|
6004 |
+
Q
|
6005 |
+
q
|
6006 |
+
1 0 0 1 62.69291 502.0687 cm
|
6007 |
+
Q
|
6008 |
+
q
|
6009 |
+
1 0 0 1 62.69291 490.0687 cm
|
6010 |
+
q
|
6011 |
+
0 0 0 rg
|
6012 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
6013 |
+
Q
|
6014 |
+
Q
|
6015 |
+
q
|
6016 |
+
1 0 0 1 62.69291 490.0687 cm
|
6017 |
+
Q
|
6018 |
+
q
|
6019 |
+
1 0 0 1 62.69291 460.0687 cm
|
6020 |
+
q
|
6021 |
+
0 0 0 rg
|
6022 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 1.962126 Tw (Bitte f\374hren Sie sowohl bei der manuellen Deinstallation als auch bei der Deinstallation per Magento) Tj T* 0 Tw (Connect Manager folgende SQL-Befehle aus:) Tj T* ET
|
6023 |
+
Q
|
6024 |
+
Q
|
6025 |
+
q
|
6026 |
+
1 0 0 1 62.69291 454.0687 cm
|
6027 |
+
Q
|
6028 |
+
q
|
6029 |
+
1 0 0 1 62.69291 454.0687 cm
|
6030 |
+
Q
|
6031 |
+
q
|
6032 |
+
1 0 0 1 62.69291 442.0687 cm
|
6033 |
+
0 0 0 rg
|
6034 |
+
BT /F1 10 Tf 12 TL ET
|
6035 |
+
q
|
6036 |
+
1 0 0 1 6 -3 cm
|
6037 |
+
q
|
6038 |
+
0 0 0 rg
|
6039 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
6040 |
+
Q
|
6041 |
+
Q
|
6042 |
+
q
|
6043 |
+
1 0 0 1 23 -3 cm
|
6044 |
+
q
|
6045 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (ALTER TABLE ) Tj /F4 10 Tf (sales_flat_quote_payment ) Tj /F1 10 Tf (DROP COLUMN ) Tj /F4 10 Tf (expercash_gutid) Tj /F1 10 Tf (;) Tj T* ET
|
6046 |
+
Q
|
6047 |
+
Q
|
6048 |
+
q
|
6049 |
+
Q
|
6050 |
+
Q
|
6051 |
+
q
|
6052 |
+
1 0 0 1 62.69291 436.0687 cm
|
6053 |
+
Q
|
6054 |
+
q
|
6055 |
+
1 0 0 1 62.69291 424.0687 cm
|
6056 |
+
0 0 0 rg
|
6057 |
+
BT /F1 10 Tf 12 TL ET
|
6058 |
+
q
|
6059 |
+
1 0 0 1 6 -3 cm
|
6060 |
+
q
|
6061 |
+
0 0 0 rg
|
6062 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
6063 |
+
Q
|
6064 |
+
Q
|
6065 |
+
q
|
6066 |
+
1 0 0 1 23 -3 cm
|
6067 |
+
q
|
6068 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (ALTER TABLE ) Tj /F4 10 Tf (sales_flat_quote_payment ) Tj /F1 10 Tf (DROP COLUMN ) Tj /F4 10 Tf (expercash_transaction_id) Tj /F1 10 Tf (;) Tj T* ET
|
6069 |
+
Q
|
6070 |
+
Q
|
6071 |
+
q
|
6072 |
+
Q
|
6073 |
+
Q
|
6074 |
+
q
|
6075 |
+
1 0 0 1 62.69291 418.0687 cm
|
6076 |
+
Q
|
6077 |
+
q
|
6078 |
+
1 0 0 1 62.69291 406.0687 cm
|
6079 |
+
0 0 0 rg
|
6080 |
+
BT /F1 10 Tf 12 TL ET
|
6081 |
+
q
|
6082 |
+
1 0 0 1 6 -3 cm
|
6083 |
+
q
|
6084 |
+
0 0 0 rg
|
6085 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
6086 |
+
Q
|
6087 |
+
Q
|
6088 |
+
q
|
6089 |
+
1 0 0 1 23 -3 cm
|
6090 |
+
q
|
6091 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (ALTER TABLE ) Tj /F4 10 Tf (sales_flat_quote_payment ) Tj /F1 10 Tf (DROP COLUMN ) Tj /F4 10 Tf (expercash_gutid_capture) Tj /F1 10 Tf (;) Tj T* ET
|
6092 |
+
Q
|
6093 |
+
Q
|
6094 |
+
q
|
6095 |
+
Q
|
6096 |
+
Q
|
6097 |
+
q
|
6098 |
+
1 0 0 1 62.69291 400.0687 cm
|
6099 |
+
Q
|
6100 |
+
q
|
6101 |
+
1 0 0 1 62.69291 388.0687 cm
|
6102 |
+
0 0 0 rg
|
6103 |
+
BT /F1 10 Tf 12 TL ET
|
6104 |
+
q
|
6105 |
+
1 0 0 1 6 -3 cm
|
6106 |
+
q
|
6107 |
+
0 0 0 rg
|
6108 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
6109 |
+
Q
|
6110 |
+
Q
|
6111 |
+
q
|
6112 |
+
1 0 0 1 23 -3 cm
|
6113 |
+
q
|
6114 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (ALTER TABLE ) Tj /F4 10 Tf (sales_flat_quote_payment ) Tj /F1 10 Tf (DROP COLUMN ) Tj /F4 10 Tf (expercash_paymenttype) Tj /F1 10 Tf (;) Tj T* ET
|
6115 |
+
Q
|
6116 |
+
Q
|
6117 |
+
q
|
6118 |
+
Q
|
6119 |
+
Q
|
6120 |
+
q
|
6121 |
+
1 0 0 1 62.69291 382.0687 cm
|
6122 |
+
Q
|
6123 |
+
q
|
6124 |
+
1 0 0 1 62.69291 370.0687 cm
|
6125 |
+
0 0 0 rg
|
6126 |
+
BT /F1 10 Tf 12 TL ET
|
6127 |
+
q
|
6128 |
+
1 0 0 1 6 -3 cm
|
6129 |
+
q
|
6130 |
+
0 0 0 rg
|
6131 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
6132 |
+
Q
|
6133 |
+
Q
|
6134 |
+
q
|
6135 |
+
1 0 0 1 23 -3 cm
|
6136 |
+
q
|
6137 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (ALTER TABLE ) Tj /F4 10 Tf (sales_flat_quote_payment ) Tj /F1 10 Tf (DROP COLUMN ) Tj /F4 10 Tf (expercash_epi_payment_id) Tj /F1 10 Tf (;) Tj T* ET
|
6138 |
+
Q
|
6139 |
+
Q
|
6140 |
+
q
|
6141 |
+
Q
|
6142 |
+
Q
|
6143 |
+
q
|
6144 |
+
1 0 0 1 62.69291 364.0687 cm
|
6145 |
+
Q
|
6146 |
+
q
|
6147 |
+
1 0 0 1 62.69291 352.0687 cm
|
6148 |
+
0 0 0 rg
|
6149 |
+
BT /F1 10 Tf 12 TL ET
|
6150 |
+
q
|
6151 |
+
1 0 0 1 6 -3 cm
|
6152 |
+
q
|
6153 |
+
0 0 0 rg
|
6154 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
6155 |
+
Q
|
6156 |
+
Q
|
6157 |
+
q
|
6158 |
+
1 0 0 1 23 -3 cm
|
6159 |
+
q
|
6160 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (ALTER TABLE ) Tj /F4 10 Tf (sales_flat_quote_payment ) Tj /F1 10 Tf (DROP COLUMN ) Tj /F4 10 Tf (expercash_request_type) Tj /F1 10 Tf (;) Tj T* ET
|
6161 |
+
Q
|
6162 |
+
Q
|
6163 |
+
q
|
6164 |
+
Q
|
6165 |
+
Q
|
6166 |
+
q
|
6167 |
+
1 0 0 1 62.69291 352.0687 cm
|
6168 |
+
Q
|
6169 |
+
q
|
6170 |
+
1 0 0 1 62.69291 346.0687 cm
|
6171 |
+
Q
|
6172 |
+
q
|
6173 |
+
1 0 0 1 62.69291 334.0687 cm
|
6174 |
+
q
|
6175 |
+
0 0 0 rg
|
6176 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
6177 |
+
Q
|
6178 |
+
Q
|
6179 |
+
q
|
6180 |
+
1 0 0 1 62.69291 334.0687 cm
|
6181 |
+
Q
|
6182 |
+
q
|
6183 |
+
1 0 0 1 62.69291 301.0687 cm
|
6184 |
+
q
|
6185 |
+
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 .533333 .603922 rg (9 Migration auf neue Version) Tj T* ET
|
6186 |
+
Q
|
6187 |
+
Q
|
6188 |
+
q
|
6189 |
+
1 0 0 1 62.69291 289.0687 cm
|
6190 |
+
Q
|
6191 |
+
q
|
6192 |
+
1 0 0 1 62.69291 277.0687 cm
|
6193 |
+
q
|
6194 |
+
0 0 0 rg
|
6195 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
6196 |
+
Q
|
6197 |
+
Q
|
6198 |
+
q
|
6199 |
+
1 0 0 1 62.69291 277.0687 cm
|
6200 |
+
Q
|
6201 |
+
q
|
6202 |
+
1 0 0 1 62.69291 223.0687 cm
|
6203 |
+
q
|
6204 |
+
BT 1 0 0 1 0 38 Tm 6.389979 Tw 12 TL /F1 10 Tf 0 0 0 rg (Im Zuge der Verbesserung des Expercash-Moduls wurde der Namespace des Moduls von) Tj T* 0 Tw .574147 Tw /F2 10 Tf (Mage_Expercash ) Tj /F1 10 Tf (auf ) Tj /F2 10 Tf (Expercash_Expercash ) Tj /F1 10 Tf (ge\344ndert. Dies hat zur Folge das Sie f\374r die einwandfreie) Tj T* 0 Tw 1.899982 Tw (Funktion des Moduls, die alte Version deinstallieren m\374ssen, bevor Sie die neue Version installieren.) Tj T* 0 Tw (F\374hren Sie f\374r die Deinstallation des alten Moduls die nachfolgenden Schritte aus.) Tj T* ET
|
6205 |
+
Q
|
6206 |
+
Q
|
6207 |
+
q
|
6208 |
+
1 0 0 1 62.69291 217.0687 cm
|
6209 |
+
Q
|
6210 |
+
q
|
6211 |
+
1 0 0 1 62.69291 205.0687 cm
|
6212 |
+
q
|
6213 |
+
0 0 0 rg
|
6214 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
6215 |
+
Q
|
6216 |
+
Q
|
6217 |
+
q
|
6218 |
+
1 0 0 1 62.69291 205.0687 cm
|
6219 |
+
Q
|
6220 |
+
q
|
6221 |
+
1 0 0 1 62.69291 193.0687 cm
|
6222 |
+
Q
|
6223 |
+
q
|
6224 |
+
1 0 0 1 62.69291 98.06873 cm
|
6225 |
+
.960784 .960784 .862745 rg
|
6226 |
+
n 0 95 469.8898 -95 re f*
|
6227 |
+
0 0 0 rg
|
6228 |
+
BT /F1 10 Tf 12 TL ET
|
6229 |
+
BT 1 0 0 1 6 69 Tm T* ET
|
6230 |
+
q
|
6231 |
+
1 0 0 1 16 64 cm
|
6232 |
+
q
|
6233 |
+
0 .533333 .603922 rg
|
6234 |
+
BT 1 0 0 1 0 2.5 Tm /F3 12.5 Tf 15 TL (Note) Tj T* ET
|
6235 |
+
Q
|
6236 |
+
Q
|
6237 |
+
q
|
6238 |
+
1 0 0 1 16 16 cm
|
6239 |
+
q
|
6240 |
+
0 0 0 rg
|
6241 |
+
BT 1 0 0 1 0 26 Tm /F1 10 Tf 12 TL 2.558443 Tw (Bei einer Migration auf die neue Modulversion ist es nicht erforderlich die bestehenden, von) Tj T* 0 Tw 1.839974 Tw (Expercash angelegten Datenbanfelder zu l\366schen. Alle bisher get\344tigten Transaktionen bleiben) Tj T* 0 Tw (erhalten.) Tj T* ET
|
6242 |
+
Q
|
6243 |
+
Q
|
6244 |
+
q
|
6245 |
+
1 J
|
6246 |
+
1 j
|
6247 |
+
.662745 .662745 .662745 RG
|
6248 |
+
.5 w
|
6249 |
+
n 0 95 m 469.8898 95 l S
|
6250 |
+
n 0 0 m 469.8898 0 l S
|
6251 |
+
n 0 0 m 0 95 l S
|
6252 |
+
n 469.8898 0 m 469.8898 95 l S
|
6253 |
+
Q
|
6254 |
+
Q
|
6255 |
+
q
|
6256 |
+
1 0 0 1 62.69291 94.86614 cm
|
6257 |
+
Q
|
6258 |
+
q
|
6259 |
+
1 0 0 1 411.0236 768.242 cm
|
6260 |
+
q
|
6261 |
+
127.5591 0 0 45.30135 0 0 cm
|
6262 |
+
/FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
|
6263 |
+
Q
|
6264 |
+
Q
|
6265 |
+
q
|
6266 |
+
1 0 0 1 56.69291 56.69291 cm
|
6267 |
+
0 0 0 rg
|
6268 |
+
BT /F1 10 Tf 12 TL ET
|
6269 |
+
q
|
6270 |
+
1 0 0 1 6 3 cm
|
6271 |
+
q
|
6272 |
+
0 0 0 rg
|
6273 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
|
6274 |
+
Q
|
6275 |
+
Q
|
6276 |
+
q
|
6277 |
+
1 0 0 1 246.9449 3 cm
|
6278 |
+
q
|
6279 |
+
0 0 0 rg
|
6280 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 203.9249 0 Td (15/16) Tj T* -203.9249 0 Td ET
|
6281 |
+
Q
|
6282 |
+
Q
|
6283 |
+
q
|
6284 |
+
Q
|
6285 |
+
Q
|
6286 |
+
|
6287 |
+
endstream
|
6288 |
+
endobj
|
6289 |
+
% 'R109': class PDFStream
|
6290 |
+
109 0 obj
|
6291 |
+
% page stream
|
6292 |
+
<< /Length 5981 >>
|
6293 |
+
stream
|
6294 |
+
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
6295 |
+
q
|
6296 |
+
1 0 0 1 62.69291 742.0687 cm
|
6297 |
+
Q
|
6298 |
+
q
|
6299 |
+
1 0 0 1 62.69291 730.0687 cm
|
6300 |
+
q
|
6301 |
+
0 0 0 rg
|
6302 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
6303 |
+
Q
|
6304 |
+
Q
|
6305 |
+
q
|
6306 |
+
1 0 0 1 62.69291 730.0687 cm
|
6307 |
+
Q
|
6308 |
+
q
|
6309 |
+
1 0 0 1 62.69291 700.0687 cm
|
6310 |
+
q
|
6311 |
+
BT 1 0 0 1 0 3 Tm 18 TL /F2 15 Tf 0 .533333 .603922 rg (9.1 Alte Version deinstallieren) Tj T* ET
|
6312 |
+
Q
|
6313 |
+
Q
|
6314 |
+
q
|
6315 |
+
1 0 0 1 62.69291 688.0687 cm
|
6316 |
+
Q
|
6317 |
+
q
|
6318 |
+
1 0 0 1 62.69291 676.0687 cm
|
6319 |
+
q
|
6320 |
+
0 0 0 rg
|
6321 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
6322 |
+
Q
|
6323 |
+
Q
|
6324 |
+
q
|
6325 |
+
1 0 0 1 62.69291 676.0687 cm
|
6326 |
+
Q
|
6327 |
+
q
|
6328 |
+
1 0 0 1 62.69291 670.0687 cm
|
6329 |
+
Q
|
6330 |
+
q
|
6331 |
+
1 0 0 1 62.69291 670.0687 cm
|
6332 |
+
Q
|
6333 |
+
q
|
6334 |
+
1 0 0 1 62.69291 658.0687 cm
|
6335 |
+
0 0 0 rg
|
6336 |
+
BT /F1 10 Tf 12 TL ET
|
6337 |
+
q
|
6338 |
+
1 0 0 1 6 -3 cm
|
6339 |
+
q
|
6340 |
+
0 0 0 rg
|
6341 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (1.) Tj T* -5.66 0 Td ET
|
6342 |
+
Q
|
6343 |
+
Q
|
6344 |
+
q
|
6345 |
+
1 0 0 1 23 -3 cm
|
6346 |
+
q
|
6347 |
+
0 0 0 rg
|
6348 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Melden Sie sich in Ihrem Magento Backend an) Tj T* ET
|
6349 |
+
Q
|
6350 |
+
Q
|
6351 |
+
q
|
6352 |
+
Q
|
6353 |
+
Q
|
6354 |
+
q
|
6355 |
+
1 0 0 1 62.69291 652.0687 cm
|
6356 |
+
Q
|
6357 |
+
q
|
6358 |
+
1 0 0 1 62.69291 640.0687 cm
|
6359 |
+
0 0 0 rg
|
6360 |
+
BT /F1 10 Tf 12 TL ET
|
6361 |
+
q
|
6362 |
+
1 0 0 1 6 -3 cm
|
6363 |
+
q
|
6364 |
+
0 0 0 rg
|
6365 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (2.) Tj T* -5.66 0 Td ET
|
6366 |
+
Q
|
6367 |
+
Q
|
6368 |
+
q
|
6369 |
+
1 0 0 1 23 -3 cm
|
6370 |
+
q
|
6371 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Navigieren Sie zu "System" -) Tj (> "Magento Connect" -) Tj (> "Magento Connect Manager") Tj T* ET
|
6372 |
+
Q
|
6373 |
+
Q
|
6374 |
+
q
|
6375 |
+
Q
|
6376 |
+
Q
|
6377 |
+
q
|
6378 |
+
1 0 0 1 62.69291 634.0687 cm
|
6379 |
+
Q
|
6380 |
+
q
|
6381 |
+
1 0 0 1 62.69291 622.0687 cm
|
6382 |
+
0 0 0 rg
|
6383 |
+
BT /F1 10 Tf 12 TL ET
|
6384 |
+
q
|
6385 |
+
1 0 0 1 6 -3 cm
|
6386 |
+
q
|
6387 |
+
0 0 0 rg
|
6388 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (3.) Tj T* -5.66 0 Td ET
|
6389 |
+
Q
|
6390 |
+
Q
|
6391 |
+
q
|
6392 |
+
1 0 0 1 23 -3 cm
|
6393 |
+
q
|
6394 |
+
0 0 0 rg
|
6395 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Melden Sie sich im "Magento Connect Manager" an) Tj T* ET
|
6396 |
+
Q
|
6397 |
+
Q
|
6398 |
+
q
|
6399 |
+
Q
|
6400 |
+
Q
|
6401 |
+
q
|
6402 |
+
1 0 0 1 62.69291 616.0687 cm
|
6403 |
+
Q
|
6404 |
+
q
|
6405 |
+
1 0 0 1 62.69291 604.0687 cm
|
6406 |
+
0 0 0 rg
|
6407 |
+
BT /F1 10 Tf 12 TL ET
|
6408 |
+
q
|
6409 |
+
1 0 0 1 6 -3 cm
|
6410 |
+
q
|
6411 |
+
0 0 0 rg
|
6412 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (4.) Tj T* -5.66 0 Td ET
|
6413 |
+
Q
|
6414 |
+
Q
|
6415 |
+
q
|
6416 |
+
1 0 0 1 23 -3 cm
|
6417 |
+
q
|
6418 |
+
0 0 0 rg
|
6419 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (W\344hlen Sie den Tab "Extensions") Tj T* ET
|
6420 |
+
Q
|
6421 |
+
Q
|
6422 |
+
q
|
6423 |
+
Q
|
6424 |
+
Q
|
6425 |
+
q
|
6426 |
+
1 0 0 1 62.69291 598.0687 cm
|
6427 |
+
Q
|
6428 |
+
q
|
6429 |
+
1 0 0 1 62.69291 574.0687 cm
|
6430 |
+
0 0 0 rg
|
6431 |
+
BT /F1 10 Tf 12 TL ET
|
6432 |
+
q
|
6433 |
+
1 0 0 1 6 9 cm
|
6434 |
+
q
|
6435 |
+
0 0 0 rg
|
6436 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 5.66 0 Td (5.) Tj T* -5.66 0 Td ET
|
6437 |
+
Q
|
6438 |
+
Q
|
6439 |
+
q
|
6440 |
+
1 0 0 1 23 -3 cm
|
6441 |
+
q
|
6442 |
+
0 0 0 rg
|
6443 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL .891647 Tw (W\344hlen Sie f\374r die Expercash-Extension die Aktion "Uninstall" und bet\344tigen Sie anschlie\337end den) Tj T* 0 Tw (Button "Commit Changes") Tj T* ET
|
6444 |
+
Q
|
6445 |
+
Q
|
6446 |
+
q
|
6447 |
+
Q
|
6448 |
+
Q
|
6449 |
+
q
|
6450 |
+
1 0 0 1 62.69291 574.0687 cm
|
6451 |
+
Q
|
6452 |
+
q
|
6453 |
+
1 0 0 1 62.69291 568.0687 cm
|
6454 |
+
Q
|
6455 |
+
q
|
6456 |
+
1 0 0 1 62.69291 556.0687 cm
|
6457 |
+
q
|
6458 |
+
0 0 0 rg
|
6459 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
6460 |
+
Q
|
6461 |
+
Q
|
6462 |
+
q
|
6463 |
+
1 0 0 1 62.69291 556.0687 cm
|
6464 |
+
Q
|
6465 |
+
q
|
6466 |
+
1 0 0 1 62.69291 526.0687 cm
|
6467 |
+
q
|
6468 |
+
0 0 0 rg
|
6469 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 2.54816 Tw (Es empfiehlt sich anschlie\337end trotzdem zu \374berpr\374fen, ob alle Expercash-Dateien entfernt wurden.) Tj T* 0 Tw (Sollten noch Dateien des alten Moduls vorhanden sein, l\366schen Sie diese von Hand.) Tj T* ET
|
6470 |
+
Q
|
6471 |
+
Q
|
6472 |
+
q
|
6473 |
+
1 0 0 1 62.69291 520.0687 cm
|
6474 |
+
Q
|
6475 |
+
q
|
6476 |
+
1 0 0 1 62.69291 508.0687 cm
|
6477 |
+
q
|
6478 |
+
0 0 0 rg
|
6479 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
6480 |
+
Q
|
6481 |
+
Q
|
6482 |
+
q
|
6483 |
+
1 0 0 1 62.69291 508.0687 cm
|
6484 |
+
Q
|
6485 |
+
q
|
6486 |
+
1 0 0 1 62.69291 502.0687 cm
|
6487 |
+
Q
|
6488 |
+
q
|
6489 |
+
1 0 0 1 62.69291 502.0687 cm
|
6490 |
+
Q
|
6491 |
+
q
|
6492 |
+
1 0 0 1 62.69291 490.0687 cm
|
6493 |
+
0 0 0 rg
|
6494 |
+
BT /F1 10 Tf 12 TL ET
|
6495 |
+
q
|
6496 |
+
1 0 0 1 6 -3 cm
|
6497 |
+
q
|
6498 |
+
0 0 0 rg
|
6499 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
6500 |
+
Q
|
6501 |
+
Q
|
6502 |
+
q
|
6503 |
+
1 0 0 1 23 -3 cm
|
6504 |
+
q
|
6505 |
+
0 0 0 rg
|
6506 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/code/community/Mage/Expercash/) Tj T* ET
|
6507 |
+
Q
|
6508 |
+
Q
|
6509 |
+
q
|
6510 |
+
Q
|
6511 |
+
Q
|
6512 |
+
q
|
6513 |
+
1 0 0 1 62.69291 484.0687 cm
|
6514 |
+
Q
|
6515 |
+
q
|
6516 |
+
1 0 0 1 62.69291 472.0687 cm
|
6517 |
+
0 0 0 rg
|
6518 |
+
BT /F1 10 Tf 12 TL ET
|
6519 |
+
q
|
6520 |
+
1 0 0 1 6 -3 cm
|
6521 |
+
q
|
6522 |
+
0 0 0 rg
|
6523 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
6524 |
+
Q
|
6525 |
+
Q
|
6526 |
+
q
|
6527 |
+
1 0 0 1 23 -3 cm
|
6528 |
+
q
|
6529 |
+
0 0 0 rg
|
6530 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/etc/modules/Mage_Expercash.xml) Tj T* ET
|
6531 |
+
Q
|
6532 |
+
Q
|
6533 |
+
q
|
6534 |
+
Q
|
6535 |
+
Q
|
6536 |
+
q
|
6537 |
+
1 0 0 1 62.69291 466.0687 cm
|
6538 |
+
Q
|
6539 |
+
q
|
6540 |
+
1 0 0 1 62.69291 454.0687 cm
|
6541 |
+
0 0 0 rg
|
6542 |
+
BT /F1 10 Tf 12 TL ET
|
6543 |
+
q
|
6544 |
+
1 0 0 1 6 -3 cm
|
6545 |
+
q
|
6546 |
+
0 0 0 rg
|
6547 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
6548 |
+
Q
|
6549 |
+
Q
|
6550 |
+
q
|
6551 |
+
1 0 0 1 23 -3 cm
|
6552 |
+
q
|
6553 |
+
0 0 0 rg
|
6554 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/locale/de_DE/Mage_Expercash.csv) Tj T* ET
|
6555 |
+
Q
|
6556 |
+
Q
|
6557 |
+
q
|
6558 |
+
Q
|
6559 |
+
Q
|
6560 |
+
q
|
6561 |
+
1 0 0 1 62.69291 448.0687 cm
|
6562 |
+
Q
|
6563 |
+
q
|
6564 |
+
1 0 0 1 62.69291 436.0687 cm
|
6565 |
+
0 0 0 rg
|
6566 |
+
BT /F1 10 Tf 12 TL ET
|
6567 |
+
q
|
6568 |
+
1 0 0 1 6 -3 cm
|
6569 |
+
q
|
6570 |
+
0 0 0 rg
|
6571 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
6572 |
+
Q
|
6573 |
+
Q
|
6574 |
+
q
|
6575 |
+
1 0 0 1 23 -3 cm
|
6576 |
+
q
|
6577 |
+
0 0 0 rg
|
6578 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/design/adminhtml/default/default/template/experCash) Tj T* ET
|
6579 |
+
Q
|
6580 |
+
Q
|
6581 |
+
q
|
6582 |
+
Q
|
6583 |
+
Q
|
6584 |
+
q
|
6585 |
+
1 0 0 1 62.69291 430.0687 cm
|
6586 |
+
Q
|
6587 |
+
q
|
6588 |
+
1 0 0 1 62.69291 418.0687 cm
|
6589 |
+
0 0 0 rg
|
6590 |
+
BT /F1 10 Tf 12 TL ET
|
6591 |
+
q
|
6592 |
+
1 0 0 1 6 -3 cm
|
6593 |
+
q
|
6594 |
+
0 0 0 rg
|
6595 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
6596 |
+
Q
|
6597 |
+
Q
|
6598 |
+
q
|
6599 |
+
1 0 0 1 23 -3 cm
|
6600 |
+
q
|
6601 |
+
0 0 0 rg
|
6602 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/design/frontend/base/default/layout/expercash.xml) Tj T* ET
|
6603 |
+
Q
|
6604 |
+
Q
|
6605 |
+
q
|
6606 |
+
Q
|
6607 |
+
Q
|
6608 |
+
q
|
6609 |
+
1 0 0 1 62.69291 412.0687 cm
|
6610 |
+
Q
|
6611 |
+
q
|
6612 |
+
1 0 0 1 62.69291 400.0687 cm
|
6613 |
+
0 0 0 rg
|
6614 |
+
BT /F1 10 Tf 12 TL ET
|
6615 |
+
q
|
6616 |
+
1 0 0 1 6 -3 cm
|
6617 |
+
q
|
6618 |
+
0 0 0 rg
|
6619 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
6620 |
+
Q
|
6621 |
+
Q
|
6622 |
+
q
|
6623 |
+
1 0 0 1 23 -3 cm
|
6624 |
+
q
|
6625 |
+
0 0 0 rg
|
6626 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (app/design/frontend/base/default/template/expercash/) Tj T* ET
|
6627 |
+
Q
|
6628 |
+
Q
|
6629 |
+
q
|
6630 |
+
Q
|
6631 |
+
Q
|
6632 |
+
q
|
6633 |
+
1 0 0 1 62.69291 400.0687 cm
|
6634 |
+
Q
|
6635 |
+
q
|
6636 |
+
1 0 0 1 62.69291 394.0687 cm
|
6637 |
+
Q
|
6638 |
+
q
|
6639 |
+
1 0 0 1 62.69291 382.0687 cm
|
6640 |
+
q
|
6641 |
+
0 0 0 rg
|
6642 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL ( ) Tj T* ET
|
6643 |
+
Q
|
6644 |
+
Q
|
6645 |
+
q
|
6646 |
+
1 0 0 1 62.69291 382.0687 cm
|
6647 |
+
Q
|
6648 |
+
q
|
6649 |
+
1 0 0 1 62.69291 382.0687 cm
|
6650 |
+
Q
|
6651 |
+
q
|
6652 |
+
1 0 0 1 411.0236 768.242 cm
|
6653 |
+
q
|
6654 |
+
127.5591 0 0 45.30135 0 0 cm
|
6655 |
+
/FormXob.ccf2ce60accb2f71ebb323971f816d0f Do
|
6656 |
+
Q
|
6657 |
+
Q
|
6658 |
+
q
|
6659 |
+
1 0 0 1 56.69291 56.69291 cm
|
6660 |
+
0 0 0 rg
|
6661 |
+
BT /F1 10 Tf 12 TL ET
|
6662 |
+
q
|
6663 |
+
1 0 0 1 6 3 cm
|
6664 |
+
q
|
6665 |
+
0 0 0 rg
|
6666 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Stand: 06.05.2015) Tj T* ET
|
6667 |
+
Q
|
6668 |
+
Q
|
6669 |
+
q
|
6670 |
+
1 0 0 1 246.9449 3 cm
|
6671 |
+
q
|
6672 |
+
0 0 0 rg
|
6673 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 203.9249 0 Td (16/16) Tj T* -203.9249 0 Td ET
|
6674 |
+
Q
|
6675 |
+
Q
|
6676 |
+
q
|
6677 |
+
Q
|
6678 |
+
Q
|
6679 |
+
|
6680 |
+
endstream
|
6681 |
+
endobj
|
6682 |
+
% 'R110': class PDFPageLabels
|
6683 |
+
110 0 obj
|
6684 |
+
% Document Root
|
6685 |
+
<< /Nums [ 0
|
6686 |
+
111 0 R
|
6687 |
+
1
|
6688 |
+
112 0 R
|
6689 |
+
2
|
6690 |
+
113 0 R
|
6691 |
+
3
|
6692 |
+
114 0 R
|
6693 |
+
4
|
6694 |
+
115 0 R
|
6695 |
+
5
|
6696 |
+
116 0 R
|
6697 |
+
6
|
6698 |
+
117 0 R
|
6699 |
+
7
|
6700 |
+
118 0 R
|
6701 |
+
8
|
6702 |
+
119 0 R
|
6703 |
+
9
|
6704 |
+
120 0 R
|
6705 |
+
10
|
6706 |
+
121 0 R
|
6707 |
+
11
|
6708 |
+
122 0 R
|
6709 |
+
12
|
6710 |
+
123 0 R
|
6711 |
+
13
|
6712 |
+
124 0 R
|
6713 |
+
14
|
6714 |
+
125 0 R
|
6715 |
+
15
|
6716 |
+
126 0 R ] >>
|
6717 |
+
endobj
|
6718 |
+
% 'R111': class PDFPageLabel
|
6719 |
+
111 0 obj
|
6720 |
+
% None
|
6721 |
+
<< /S /D
|
6722 |
+
/St 1 >>
|
6723 |
+
endobj
|
6724 |
+
% 'R112': class PDFPageLabel
|
6725 |
+
112 0 obj
|
6726 |
+
% None
|
6727 |
+
<< /S /D
|
6728 |
+
/St 2 >>
|
6729 |
+
endobj
|
6730 |
+
% 'R113': class PDFPageLabel
|
6731 |
+
113 0 obj
|
6732 |
+
% None
|
6733 |
+
<< /S /D
|
6734 |
+
/St 3 >>
|
6735 |
+
endobj
|
6736 |
+
% 'R114': class PDFPageLabel
|
6737 |
+
114 0 obj
|
6738 |
+
% None
|
6739 |
+
<< /S /D
|
6740 |
+
/St 4 >>
|
6741 |
+
endobj
|
6742 |
+
% 'R115': class PDFPageLabel
|
6743 |
+
115 0 obj
|
6744 |
+
% None
|
6745 |
+
<< /S /D
|
6746 |
+
/St 5 >>
|
6747 |
+
endobj
|
6748 |
+
% 'R116': class PDFPageLabel
|
6749 |
+
116 0 obj
|
6750 |
+
% None
|
6751 |
+
<< /S /D
|
6752 |
+
/St 6 >>
|
6753 |
+
endobj
|
6754 |
+
% 'R117': class PDFPageLabel
|
6755 |
+
117 0 obj
|
6756 |
+
% None
|
6757 |
+
<< /S /D
|
6758 |
+
/St 7 >>
|
6759 |
+
endobj
|
6760 |
+
% 'R118': class PDFPageLabel
|
6761 |
+
118 0 obj
|
6762 |
+
% None
|
6763 |
+
<< /S /D
|
6764 |
+
/St 8 >>
|
6765 |
+
endobj
|
6766 |
+
% 'R119': class PDFPageLabel
|
6767 |
+
119 0 obj
|
6768 |
+
% None
|
6769 |
+
<< /S /D
|
6770 |
+
/St 9 >>
|
6771 |
+
endobj
|
6772 |
+
% 'R120': class PDFPageLabel
|
6773 |
+
120 0 obj
|
6774 |
+
% None
|
6775 |
+
<< /S /D
|
6776 |
+
/St 10 >>
|
6777 |
+
endobj
|
6778 |
+
% 'R121': class PDFPageLabel
|
6779 |
+
121 0 obj
|
6780 |
+
% None
|
6781 |
+
<< /S /D
|
6782 |
+
/St 11 >>
|
6783 |
+
endobj
|
6784 |
+
% 'R122': class PDFPageLabel
|
6785 |
+
122 0 obj
|
6786 |
+
% None
|
6787 |
+
<< /S /D
|
6788 |
+
/St 12 >>
|
6789 |
+
endobj
|
6790 |
+
% 'R123': class PDFPageLabel
|
6791 |
+
123 0 obj
|
6792 |
+
% None
|
6793 |
+
<< /S /D
|
6794 |
+
/St 13 >>
|
6795 |
+
endobj
|
6796 |
+
% 'R124': class PDFPageLabel
|
6797 |
+
124 0 obj
|
6798 |
+
% None
|
6799 |
+
<< /S /D
|
6800 |
+
/St 14 >>
|
6801 |
+
endobj
|
6802 |
+
% 'R125': class PDFPageLabel
|
6803 |
+
125 0 obj
|
6804 |
+
% None
|
6805 |
+
<< /S /D
|
6806 |
+
/St 15 >>
|
6807 |
+
endobj
|
6808 |
+
% 'R126': class PDFPageLabel
|
6809 |
+
126 0 obj
|
6810 |
+
% None
|
6811 |
+
<< /S /D
|
6812 |
+
/St 16 >>
|
6813 |
+
endobj
|
6814 |
+
xref
|
6815 |
+
0 127
|
6816 |
+
0000000000 65535 f
|
6817 |
+
0000000113 00000 n
|
6818 |
+
0000000247 00000 n
|
6819 |
+
0000000453 00000 n
|
6820 |
+
0000161729 00000 n
|
6821 |
+
0000161945 00000 n
|
6822 |
+
0000170379 00000 n
|
6823 |
+
0000170788 00000 n
|
6824 |
+
0000171029 00000 n
|
6825 |
+
0000171270 00000 n
|
6826 |
+
0000171511 00000 n
|
6827 |
+
0000171753 00000 n
|
6828 |
+
0000171995 00000 n
|
6829 |
+
0000172237 00000 n
|
6830 |
+
0000172479 00000 n
|
6831 |
+
0000172721 00000 n
|
6832 |
+
0000172964 00000 n
|
6833 |
+
0000173207 00000 n
|
6834 |
+
0000173450 00000 n
|
6835 |
+
0000173693 00000 n
|
6836 |
+
0000173936 00000 n
|
6837 |
+
0000174179 00000 n
|
6838 |
+
0000174422 00000 n
|
6839 |
+
0000174665 00000 n
|
6840 |
+
0000174908 00000 n
|
6841 |
+
0000175151 00000 n
|
6842 |
+
0000175394 00000 n
|
6843 |
+
0000175637 00000 n
|
6844 |
+
0000175880 00000 n
|
6845 |
+
0000176123 00000 n
|
6846 |
+
0000176366 00000 n
|
6847 |
+
0000176609 00000 n
|
6848 |
+
0000176852 00000 n
|
6849 |
+
0000177095 00000 n
|
6850 |
+
0000177338 00000 n
|
6851 |
+
0000177581 00000 n
|
6852 |
+
0000177824 00000 n
|
6853 |
+
0000178067 00000 n
|
6854 |
+
0000178310 00000 n
|
6855 |
+
0000178553 00000 n
|
6856 |
+
0000178796 00000 n
|
6857 |
+
0000179039 00000 n
|
6858 |
+
0000179282 00000 n
|
6859 |
+
0000179525 00000 n
|
6860 |
+
0000179768 00000 n
|
6861 |
+
0000180011 00000 n
|
6862 |
+
0000180254 00000 n
|
6863 |
+
0000180497 00000 n
|
6864 |
+
0000180740 00000 n
|
6865 |
+
0000180967 00000 n
|
6866 |
+
0000181701 00000 n
|
6867 |
+
0000181889 00000 n
|
6868 |
+
0000182234 00000 n
|
6869 |
+
0000182594 00000 n
|
6870 |
+
0000182865 00000 n
|
6871 |
+
0000183246 00000 n
|
6872 |
+
0000183459 00000 n
|
6873 |
+
0000183825 00000 n
|
6874 |
+
0000184171 00000 n
|
6875 |
+
0000184519 00000 n
|
6876 |
+
0000184699 00000 n
|
6877 |
+
0000185046 00000 n
|
6878 |
+
0000185393 00000 n
|
6879 |
+
0000185754 00000 n
|
6880 |
+
0000185999 00000 n
|
6881 |
+
0000186367 00000 n
|
6882 |
+
0000186714 00000 n
|
6883 |
+
0000187061 00000 n
|
6884 |
+
0000187408 00000 n
|
6885 |
+
0000187755 00000 n
|
6886 |
+
0000187915 00000 n
|
6887 |
+
0000188163 00000 n
|
6888 |
+
0000188289 00000 n
|
6889 |
+
0000188537 00000 n
|
6890 |
+
0000188870 00000 n
|
6891 |
+
0000189108 00000 n
|
6892 |
+
0000189381 00000 n
|
6893 |
+
0000189704 00000 n
|
6894 |
+
0000189990 00000 n
|
6895 |
+
0000190323 00000 n
|
6896 |
+
0000190609 00000 n
|
6897 |
+
0000190897 00000 n
|
6898 |
+
0000191200 00000 n
|
6899 |
+
0000191546 00000 n
|
6900 |
+
0000191944 00000 n
|
6901 |
+
0000192207 00000 n
|
6902 |
+
0000192495 00000 n
|
6903 |
+
0000192803 00000 n
|
6904 |
+
0000193131 00000 n
|
6905 |
+
0000193477 00000 n
|
6906 |
+
0000193773 00000 n
|
6907 |
+
0000194026 00000 n
|
6908 |
+
0000194399 00000 n
|
6909 |
+
0000194711 00000 n
|
6910 |
+
0000194954 00000 n
|
6911 |
+
0000200394 00000 n
|
6912 |
+
0000206557 00000 n
|
6913 |
+
0000212962 00000 n
|
6914 |
+
0000215293 00000 n
|
6915 |
+
0000222672 00000 n
|
6916 |
+
0000229336 00000 n
|
6917 |
+
0000237223 00000 n
|
6918 |
+
0000244262 00000 n
|
6919 |
+
0000246147 00000 n
|
6920 |
+
0000253059 00000 n
|
6921 |
+
0000257645 00000 n
|
6922 |
+
0000263102 00000 n
|
6923 |
+
0000268251 00000 n
|
6924 |
+
0000273522 00000 n
|
6925 |
+
0000282523 00000 n
|
6926 |
+
0000288609 00000 n
|
6927 |
+
0000288921 00000 n
|
6928 |
+
0000289000 00000 n
|
6929 |
+
0000289079 00000 n
|
6930 |
+
0000289158 00000 n
|
6931 |
+
0000289237 00000 n
|
6932 |
+
0000289316 00000 n
|
6933 |
+
0000289395 00000 n
|
6934 |
+
0000289474 00000 n
|
6935 |
+
0000289553 00000 n
|
6936 |
+
0000289632 00000 n
|
6937 |
+
0000289712 00000 n
|
6938 |
+
0000289792 00000 n
|
6939 |
+
0000289872 00000 n
|
6940 |
+
0000289952 00000 n
|
6941 |
+
0000290032 00000 n
|
6942 |
+
0000290112 00000 n
|
6943 |
+
trailer
|
6944 |
+
<< /ID
|
6945 |
+
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
6946 |
+
[(\272B;\\\272J\223\276l\023S#\364\217\312\332) (\272B;\\\272J\223\276l\023S#\364\217\312\332)]
|
6947 |
+
|
6948 |
+
/Info 70 0 R
|
6949 |
+
/Root 69 0 R
|
6950 |
+
/Size 127 >>
|
6951 |
+
startxref
|
6952 |
+
290161
|
6953 |
+
%%EOF
|
doc/Expercash_Expercash/ChangeLog.pdf
ADDED
@@ -0,0 +1,860 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
%PDF-1.4
|
2 |
+
%���� ReportLab Generated PDF document http://www.reportlab.com
|
3 |
+
% 'BasicFonts': class PDFDictionary
|
4 |
+
1 0 obj
|
5 |
+
% The standard fonts dictionary
|
6 |
+
<< /F1 2 0 R
|
7 |
+
/F2 3 0 R
|
8 |
+
/F3 4 0 R >>
|
9 |
+
endobj
|
10 |
+
% 'F1': class PDFType1Font
|
11 |
+
2 0 obj
|
12 |
+
% Font Helvetica
|
13 |
+
<< /BaseFont /Helvetica
|
14 |
+
/Encoding /WinAnsiEncoding
|
15 |
+
/Name /F1
|
16 |
+
/Subtype /Type1
|
17 |
+
/Type /Font >>
|
18 |
+
endobj
|
19 |
+
% 'F2': class PDFType1Font
|
20 |
+
3 0 obj
|
21 |
+
% Font Helvetica-Bold
|
22 |
+
<< /BaseFont /Helvetica-Bold
|
23 |
+
/Encoding /WinAnsiEncoding
|
24 |
+
/Name /F2
|
25 |
+
/Subtype /Type1
|
26 |
+
/Type /Font >>
|
27 |
+
endobj
|
28 |
+
% 'F3': class PDFType1Font
|
29 |
+
4 0 obj
|
30 |
+
% Font Helvetica-BoldOblique
|
31 |
+
<< /BaseFont /Helvetica-BoldOblique
|
32 |
+
/Encoding /WinAnsiEncoding
|
33 |
+
/Name /F3
|
34 |
+
/Subtype /Type1
|
35 |
+
/Type /Font >>
|
36 |
+
endobj
|
37 |
+
% 'Page1': class PDFPage
|
38 |
+
5 0 obj
|
39 |
+
% Page dictionary
|
40 |
+
<< /Contents 9 0 R
|
41 |
+
/MediaBox [ 0
|
42 |
+
0
|
43 |
+
595.2756
|
44 |
+
841.8898 ]
|
45 |
+
/Parent 8 0 R
|
46 |
+
/Resources << /Font 1 0 R
|
47 |
+
/ProcSet [ /PDF
|
48 |
+
/Text
|
49 |
+
/ImageB
|
50 |
+
/ImageC
|
51 |
+
/ImageI ] >>
|
52 |
+
/Rotate 0
|
53 |
+
/Trans << >>
|
54 |
+
/Type /Page >>
|
55 |
+
endobj
|
56 |
+
% 'R6': class PDFCatalog
|
57 |
+
6 0 obj
|
58 |
+
% Document Root
|
59 |
+
<< /Outlines 10 0 R
|
60 |
+
/PageLabels 11 0 R
|
61 |
+
/PageMode /UseNone
|
62 |
+
/Pages 8 0 R
|
63 |
+
/Type /Catalog >>
|
64 |
+
endobj
|
65 |
+
% 'R7': class PDFInfo
|
66 |
+
7 0 obj
|
67 |
+
<< /Author ()
|
68 |
+
/CreationDate (D:20150506161335-01'00')
|
69 |
+
/Creator (\(unspecified\))
|
70 |
+
/Keywords ()
|
71 |
+
/Producer (ReportLab PDF Library - www.reportlab.com)
|
72 |
+
/Subject (\(unspecified\))
|
73 |
+
/Title (Expercash Payment Modul) >>
|
74 |
+
endobj
|
75 |
+
% 'R8': class PDFPages
|
76 |
+
8 0 obj
|
77 |
+
% page tree
|
78 |
+
<< /Count 1
|
79 |
+
/Kids [ 5 0 R ]
|
80 |
+
/Type /Pages >>
|
81 |
+
endobj
|
82 |
+
% 'R9': class PDFStream
|
83 |
+
9 0 obj
|
84 |
+
% page stream
|
85 |
+
<< /Length 10537 >>
|
86 |
+
stream
|
87 |
+
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
|
88 |
+
q
|
89 |
+
1 0 0 1 62.69291 769.3701 cm
|
90 |
+
q
|
91 |
+
0 .533333 .603922 rg
|
92 |
+
BT 1 0 0 1 0 4 Tm /F2 20 Tf 24 TL 107.6849 0 Td (Expercash Payment Modul) Tj T* -107.6849 0 Td ET
|
93 |
+
Q
|
94 |
+
Q
|
95 |
+
q
|
96 |
+
1 0 0 1 62.69291 739.3701 cm
|
97 |
+
q
|
98 |
+
0 .533333 .603922 rg
|
99 |
+
BT 1 0 0 1 0 3 Tm /F2 15 Tf 18 TL 193.6949 0 Td (ChangeLog) Tj T* -193.6949 0 Td ET
|
100 |
+
Q
|
101 |
+
Q
|
102 |
+
q
|
103 |
+
1 0 0 1 62.69291 723.3701 cm
|
104 |
+
Q
|
105 |
+
q
|
106 |
+
1 0 0 1 62.69291 699.3701 cm
|
107 |
+
q
|
108 |
+
0 .533333 .603922 rg
|
109 |
+
BT 1 0 0 1 0 2 Tm /F3 10 Tf 12 TL 209.1099 0 Td (Changelog) Tj T* -209.1099 0 Td ET
|
110 |
+
Q
|
111 |
+
Q
|
112 |
+
q
|
113 |
+
1 0 0 1 62.69291 225.3701 cm
|
114 |
+
1 1 1 rg
|
115 |
+
n 0 468 469.8898 -18 re f*
|
116 |
+
.878431 .878431 .878431 rg
|
117 |
+
n 0 450 469.8898 -156 re f*
|
118 |
+
1 1 1 rg
|
119 |
+
n 0 294 469.8898 -60 re f*
|
120 |
+
.878431 .878431 .878431 rg
|
121 |
+
n 0 234 469.8898 -42 re f*
|
122 |
+
1 1 1 rg
|
123 |
+
n 0 192 469.8898 -120 re f*
|
124 |
+
.878431 .878431 .878431 rg
|
125 |
+
n 0 72 469.8898 -36 re f*
|
126 |
+
1 1 1 rg
|
127 |
+
n 0 36 469.8898 -36 re f*
|
128 |
+
.960784 .960784 .862745 rg
|
129 |
+
n 0 468 469.8898 -18 re f*
|
130 |
+
0 .533333 .603922 rg
|
131 |
+
BT /F1 10 Tf 12 TL ET
|
132 |
+
q
|
133 |
+
1 0 0 1 6 453 cm
|
134 |
+
q
|
135 |
+
.960784 .960784 .862745 rg
|
136 |
+
n 0 0 46.73622 12 re f*
|
137 |
+
Q
|
138 |
+
q
|
139 |
+
0 .533333 .603922 rg
|
140 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 2.52811 0 Td (Revision) Tj T* -2.52811 0 Td ET
|
141 |
+
Q
|
142 |
+
Q
|
143 |
+
q
|
144 |
+
1 0 0 1 64.73622 453 cm
|
145 |
+
q
|
146 |
+
.960784 .960784 .862745 rg
|
147 |
+
n 0 0 46.73622 12 re f*
|
148 |
+
Q
|
149 |
+
q
|
150 |
+
0 .533333 .603922 rg
|
151 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 7.81311 0 Td (Datum) Tj T* -7.81311 0 Td ET
|
152 |
+
Q
|
153 |
+
Q
|
154 |
+
q
|
155 |
+
1 0 0 1 123.4724 453 cm
|
156 |
+
q
|
157 |
+
.960784 .960784 .862745 rg
|
158 |
+
n 0 0 340.4173 12 re f*
|
159 |
+
Q
|
160 |
+
q
|
161 |
+
0 .533333 .603922 rg
|
162 |
+
BT 1 0 0 1 0 2 Tm /F2 10 Tf 12 TL 136.8687 0 Td (Beschreibung) Tj T* -136.8687 0 Td ET
|
163 |
+
Q
|
164 |
+
Q
|
165 |
+
0 0 0 rg
|
166 |
+
q
|
167 |
+
1 0 0 1 6 435 cm
|
168 |
+
q
|
169 |
+
0 0 0 rg
|
170 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (15.05.06) Tj T* ET
|
171 |
+
Q
|
172 |
+
Q
|
173 |
+
q
|
174 |
+
1 0 0 1 64.73622 435 cm
|
175 |
+
q
|
176 |
+
0 0 0 rg
|
177 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (06.05.2015) Tj T* ET
|
178 |
+
Q
|
179 |
+
Q
|
180 |
+
q
|
181 |
+
1 0 0 1 123.4724 435 cm
|
182 |
+
q
|
183 |
+
0 0 0 rg
|
184 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Bugfix:) Tj T* ET
|
185 |
+
Q
|
186 |
+
Q
|
187 |
+
q
|
188 |
+
1 0 0 1 123.4724 429 cm
|
189 |
+
Q
|
190 |
+
q
|
191 |
+
1 0 0 1 123.4724 351 cm
|
192 |
+
0 0 0 rg
|
193 |
+
BT /F1 10 Tf 12 TL ET
|
194 |
+
BT 1 0 0 1 0 2 Tm T* ET
|
195 |
+
q
|
196 |
+
1 0 0 1 20 72 cm
|
197 |
+
Q
|
198 |
+
q
|
199 |
+
1 0 0 1 20 72 cm
|
200 |
+
Q
|
201 |
+
q
|
202 |
+
1 0 0 1 20 60 cm
|
203 |
+
0 0 0 rg
|
204 |
+
BT /F1 10 Tf 12 TL ET
|
205 |
+
q
|
206 |
+
1 0 0 1 6 -3 cm
|
207 |
+
q
|
208 |
+
0 0 0 rg
|
209 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
210 |
+
Q
|
211 |
+
Q
|
212 |
+
q
|
213 |
+
1 0 0 1 23 -3 cm
|
214 |
+
q
|
215 |
+
0 0 0 rg
|
216 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (template header comments no longer shown in invoice pdf) Tj T* ET
|
217 |
+
Q
|
218 |
+
Q
|
219 |
+
q
|
220 |
+
Q
|
221 |
+
Q
|
222 |
+
q
|
223 |
+
1 0 0 1 20 54 cm
|
224 |
+
Q
|
225 |
+
q
|
226 |
+
1 0 0 1 20 30 cm
|
227 |
+
0 0 0 rg
|
228 |
+
BT /F1 10 Tf 12 TL ET
|
229 |
+
q
|
230 |
+
1 0 0 1 6 9 cm
|
231 |
+
q
|
232 |
+
0 0 0 rg
|
233 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
234 |
+
Q
|
235 |
+
Q
|
236 |
+
q
|
237 |
+
1 0 0 1 23 -3 cm
|
238 |
+
q
|
239 |
+
0 0 0 rg
|
240 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 2.539703 Tw (shipping address fields now have the correct values prefilled if) Tj T* 0 Tw (billing and shipping address are not equal) Tj T* ET
|
241 |
+
Q
|
242 |
+
Q
|
243 |
+
q
|
244 |
+
Q
|
245 |
+
Q
|
246 |
+
q
|
247 |
+
1 0 0 1 20 24 cm
|
248 |
+
Q
|
249 |
+
q
|
250 |
+
1 0 0 1 20 0 cm
|
251 |
+
0 0 0 rg
|
252 |
+
BT /F1 10 Tf 12 TL ET
|
253 |
+
q
|
254 |
+
1 0 0 1 6 9 cm
|
255 |
+
q
|
256 |
+
0 0 0 rg
|
257 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
258 |
+
Q
|
259 |
+
Q
|
260 |
+
q
|
261 |
+
1 0 0 1 23 -3 cm
|
262 |
+
q
|
263 |
+
0 0 0 rg
|
264 |
+
BT 1 0 0 1 0 14 Tm /F1 10 Tf 12 TL 4.384665 Tw (generating the params for hash validation now uses correct) Tj T* 0 Tw (arg_seperator on all systems) Tj T* ET
|
265 |
+
Q
|
266 |
+
Q
|
267 |
+
q
|
268 |
+
Q
|
269 |
+
Q
|
270 |
+
q
|
271 |
+
1 0 0 1 20 0 cm
|
272 |
+
Q
|
273 |
+
q
|
274 |
+
Q
|
275 |
+
Q
|
276 |
+
q
|
277 |
+
1 0 0 1 123.4724 351 cm
|
278 |
+
Q
|
279 |
+
q
|
280 |
+
1 0 0 1 123.4724 339 cm
|
281 |
+
q
|
282 |
+
0 0 0 rg
|
283 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Feature:) Tj T* ET
|
284 |
+
Q
|
285 |
+
Q
|
286 |
+
q
|
287 |
+
1 0 0 1 123.4724 333 cm
|
288 |
+
Q
|
289 |
+
q
|
290 |
+
1 0 0 1 123.4724 297 cm
|
291 |
+
0 0 0 rg
|
292 |
+
BT /F1 10 Tf 12 TL ET
|
293 |
+
BT 1 0 0 1 0 2 Tm T* ET
|
294 |
+
q
|
295 |
+
1 0 0 1 20 30 cm
|
296 |
+
Q
|
297 |
+
q
|
298 |
+
1 0 0 1 20 30 cm
|
299 |
+
Q
|
300 |
+
q
|
301 |
+
1 0 0 1 20 18 cm
|
302 |
+
0 0 0 rg
|
303 |
+
BT /F1 10 Tf 12 TL ET
|
304 |
+
q
|
305 |
+
1 0 0 1 6 -3 cm
|
306 |
+
q
|
307 |
+
0 0 0 rg
|
308 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
309 |
+
Q
|
310 |
+
Q
|
311 |
+
q
|
312 |
+
1 0 0 1 23 -3 cm
|
313 |
+
q
|
314 |
+
0 0 0 rg
|
315 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (make module compatible with old CE and EE versions) Tj T* ET
|
316 |
+
Q
|
317 |
+
Q
|
318 |
+
q
|
319 |
+
Q
|
320 |
+
Q
|
321 |
+
q
|
322 |
+
1 0 0 1 20 12 cm
|
323 |
+
Q
|
324 |
+
q
|
325 |
+
1 0 0 1 20 0 cm
|
326 |
+
0 0 0 rg
|
327 |
+
BT /F1 10 Tf 12 TL ET
|
328 |
+
q
|
329 |
+
1 0 0 1 6 -3 cm
|
330 |
+
q
|
331 |
+
0 0 0 rg
|
332 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
333 |
+
Q
|
334 |
+
Q
|
335 |
+
q
|
336 |
+
1 0 0 1 23 -3 cm
|
337 |
+
q
|
338 |
+
0 0 0 rg
|
339 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (extend documentation regarding masterpass) Tj T* ET
|
340 |
+
Q
|
341 |
+
Q
|
342 |
+
q
|
343 |
+
Q
|
344 |
+
Q
|
345 |
+
q
|
346 |
+
1 0 0 1 20 0 cm
|
347 |
+
Q
|
348 |
+
q
|
349 |
+
Q
|
350 |
+
Q
|
351 |
+
q
|
352 |
+
1 0 0 1 123.4724 297 cm
|
353 |
+
Q
|
354 |
+
q
|
355 |
+
1 0 0 1 6 279 cm
|
356 |
+
q
|
357 |
+
0 0 0 rg
|
358 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (15.04.13) Tj T* ET
|
359 |
+
Q
|
360 |
+
Q
|
361 |
+
q
|
362 |
+
1 0 0 1 64.73622 279 cm
|
363 |
+
q
|
364 |
+
0 0 0 rg
|
365 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (13.04.2015) Tj T* ET
|
366 |
+
Q
|
367 |
+
Q
|
368 |
+
q
|
369 |
+
1 0 0 1 123.4724 279 cm
|
370 |
+
q
|
371 |
+
0 0 0 rg
|
372 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Feature:) Tj T* ET
|
373 |
+
Q
|
374 |
+
Q
|
375 |
+
q
|
376 |
+
1 0 0 1 123.4724 273 cm
|
377 |
+
Q
|
378 |
+
q
|
379 |
+
1 0 0 1 123.4724 237 cm
|
380 |
+
0 0 0 rg
|
381 |
+
BT /F1 10 Tf 12 TL ET
|
382 |
+
BT 1 0 0 1 0 2 Tm T* ET
|
383 |
+
q
|
384 |
+
1 0 0 1 20 30 cm
|
385 |
+
Q
|
386 |
+
q
|
387 |
+
1 0 0 1 20 30 cm
|
388 |
+
Q
|
389 |
+
q
|
390 |
+
1 0 0 1 20 18 cm
|
391 |
+
0 0 0 rg
|
392 |
+
BT /F1 10 Tf 12 TL ET
|
393 |
+
q
|
394 |
+
1 0 0 1 6 -3 cm
|
395 |
+
q
|
396 |
+
0 0 0 rg
|
397 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
398 |
+
Q
|
399 |
+
Q
|
400 |
+
q
|
401 |
+
1 0 0 1 23 -3 cm
|
402 |
+
q
|
403 |
+
0 0 0 rg
|
404 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (add payment method Masterpass) Tj T* ET
|
405 |
+
Q
|
406 |
+
Q
|
407 |
+
q
|
408 |
+
Q
|
409 |
+
Q
|
410 |
+
q
|
411 |
+
1 0 0 1 20 12 cm
|
412 |
+
Q
|
413 |
+
q
|
414 |
+
1 0 0 1 20 0 cm
|
415 |
+
0 0 0 rg
|
416 |
+
BT /F1 10 Tf 12 TL ET
|
417 |
+
q
|
418 |
+
1 0 0 1 6 -3 cm
|
419 |
+
q
|
420 |
+
0 0 0 rg
|
421 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
422 |
+
Q
|
423 |
+
Q
|
424 |
+
q
|
425 |
+
1 0 0 1 23 -3 cm
|
426 |
+
q
|
427 |
+
0 0 0 rg
|
428 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (add payment method Masterpass Fullcheckout) Tj T* ET
|
429 |
+
Q
|
430 |
+
Q
|
431 |
+
q
|
432 |
+
Q
|
433 |
+
Q
|
434 |
+
q
|
435 |
+
1 0 0 1 20 0 cm
|
436 |
+
Q
|
437 |
+
q
|
438 |
+
Q
|
439 |
+
Q
|
440 |
+
q
|
441 |
+
1 0 0 1 123.4724 237 cm
|
442 |
+
Q
|
443 |
+
q
|
444 |
+
1 0 0 1 6 219 cm
|
445 |
+
q
|
446 |
+
0 0 0 rg
|
447 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (14.04.14) Tj T* ET
|
448 |
+
Q
|
449 |
+
Q
|
450 |
+
q
|
451 |
+
1 0 0 1 64.73622 219 cm
|
452 |
+
q
|
453 |
+
0 0 0 rg
|
454 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (14.04.2014) Tj T* ET
|
455 |
+
Q
|
456 |
+
Q
|
457 |
+
q
|
458 |
+
1 0 0 1 123.4724 219 cm
|
459 |
+
q
|
460 |
+
0 0 0 rg
|
461 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Feature:) Tj T* ET
|
462 |
+
Q
|
463 |
+
Q
|
464 |
+
q
|
465 |
+
1 0 0 1 123.4724 213 cm
|
466 |
+
Q
|
467 |
+
q
|
468 |
+
1 0 0 1 123.4724 195 cm
|
469 |
+
0 0 0 rg
|
470 |
+
BT /F1 10 Tf 12 TL ET
|
471 |
+
BT 1 0 0 1 0 2 Tm T* ET
|
472 |
+
q
|
473 |
+
1 0 0 1 20 12 cm
|
474 |
+
Q
|
475 |
+
q
|
476 |
+
1 0 0 1 20 12 cm
|
477 |
+
Q
|
478 |
+
q
|
479 |
+
1 0 0 1 20 0 cm
|
480 |
+
0 0 0 rg
|
481 |
+
BT /F1 10 Tf 12 TL ET
|
482 |
+
q
|
483 |
+
1 0 0 1 6 -3 cm
|
484 |
+
q
|
485 |
+
0 0 0 rg
|
486 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
487 |
+
Q
|
488 |
+
Q
|
489 |
+
q
|
490 |
+
1 0 0 1 23 -3 cm
|
491 |
+
q
|
492 |
+
0 0 0 rg
|
493 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (add support for Enterprise Edition) Tj T* ET
|
494 |
+
Q
|
495 |
+
Q
|
496 |
+
q
|
497 |
+
Q
|
498 |
+
Q
|
499 |
+
q
|
500 |
+
1 0 0 1 20 0 cm
|
501 |
+
Q
|
502 |
+
q
|
503 |
+
Q
|
504 |
+
Q
|
505 |
+
q
|
506 |
+
1 0 0 1 123.4724 195 cm
|
507 |
+
Q
|
508 |
+
q
|
509 |
+
1 0 0 1 6 177 cm
|
510 |
+
q
|
511 |
+
0 0 0 rg
|
512 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (14.04.10) Tj T* ET
|
513 |
+
Q
|
514 |
+
Q
|
515 |
+
q
|
516 |
+
1 0 0 1 64.73622 177 cm
|
517 |
+
q
|
518 |
+
0 0 0 rg
|
519 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (10.04.2014) Tj T* ET
|
520 |
+
Q
|
521 |
+
Q
|
522 |
+
q
|
523 |
+
1 0 0 1 123.4724 177 cm
|
524 |
+
q
|
525 |
+
0 0 0 rg
|
526 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Feature:) Tj T* ET
|
527 |
+
Q
|
528 |
+
Q
|
529 |
+
q
|
530 |
+
1 0 0 1 123.4724 171 cm
|
531 |
+
Q
|
532 |
+
q
|
533 |
+
1 0 0 1 123.4724 171 cm
|
534 |
+
Q
|
535 |
+
q
|
536 |
+
1 0 0 1 123.4724 159 cm
|
537 |
+
0 0 0 rg
|
538 |
+
BT /F1 10 Tf 12 TL ET
|
539 |
+
q
|
540 |
+
1 0 0 1 6 -3 cm
|
541 |
+
q
|
542 |
+
0 0 0 rg
|
543 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
544 |
+
Q
|
545 |
+
Q
|
546 |
+
q
|
547 |
+
1 0 0 1 23 -3 cm
|
548 |
+
q
|
549 |
+
0 0 0 rg
|
550 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (include Barzahlen payment method) Tj T* ET
|
551 |
+
Q
|
552 |
+
Q
|
553 |
+
q
|
554 |
+
Q
|
555 |
+
Q
|
556 |
+
q
|
557 |
+
1 0 0 1 123.4724 153 cm
|
558 |
+
Q
|
559 |
+
q
|
560 |
+
1 0 0 1 123.4724 141 cm
|
561 |
+
0 0 0 rg
|
562 |
+
BT /F1 10 Tf 12 TL ET
|
563 |
+
q
|
564 |
+
1 0 0 1 6 -3 cm
|
565 |
+
q
|
566 |
+
0 0 0 rg
|
567 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
568 |
+
Q
|
569 |
+
Q
|
570 |
+
q
|
571 |
+
1 0 0 1 23 -3 cm
|
572 |
+
q
|
573 |
+
0 0 0 rg
|
574 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (use Expercash iFrame session web service for increased security) Tj T* ET
|
575 |
+
Q
|
576 |
+
Q
|
577 |
+
q
|
578 |
+
Q
|
579 |
+
Q
|
580 |
+
q
|
581 |
+
1 0 0 1 123.4724 135 cm
|
582 |
+
Q
|
583 |
+
q
|
584 |
+
1 0 0 1 123.4724 123 cm
|
585 |
+
0 0 0 rg
|
586 |
+
BT /F1 10 Tf 12 TL ET
|
587 |
+
q
|
588 |
+
1 0 0 1 6 -3 cm
|
589 |
+
q
|
590 |
+
0 0 0 rg
|
591 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
592 |
+
Q
|
593 |
+
Q
|
594 |
+
q
|
595 |
+
1 0 0 1 23 -3 cm
|
596 |
+
q
|
597 |
+
0 0 0 rg
|
598 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (group Expercash payment methods in configuration) Tj T* ET
|
599 |
+
Q
|
600 |
+
Q
|
601 |
+
q
|
602 |
+
Q
|
603 |
+
Q
|
604 |
+
q
|
605 |
+
1 0 0 1 123.4724 117 cm
|
606 |
+
Q
|
607 |
+
q
|
608 |
+
1 0 0 1 123.4724 105 cm
|
609 |
+
0 0 0 rg
|
610 |
+
BT /F1 10 Tf 12 TL ET
|
611 |
+
q
|
612 |
+
1 0 0 1 6 -3 cm
|
613 |
+
q
|
614 |
+
0 0 0 rg
|
615 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
616 |
+
Q
|
617 |
+
Q
|
618 |
+
q
|
619 |
+
1 0 0 1 23 -3 cm
|
620 |
+
q
|
621 |
+
0 0 0 rg
|
622 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (add multistore functionality) Tj T* ET
|
623 |
+
Q
|
624 |
+
Q
|
625 |
+
q
|
626 |
+
Q
|
627 |
+
Q
|
628 |
+
q
|
629 |
+
1 0 0 1 123.4724 105 cm
|
630 |
+
Q
|
631 |
+
q
|
632 |
+
1 0 0 1 123.4724 93 cm
|
633 |
+
q
|
634 |
+
0 0 0 rg
|
635 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Bugfix:) Tj T* ET
|
636 |
+
Q
|
637 |
+
Q
|
638 |
+
q
|
639 |
+
1 0 0 1 123.4724 87 cm
|
640 |
+
Q
|
641 |
+
q
|
642 |
+
1 0 0 1 123.4724 87 cm
|
643 |
+
Q
|
644 |
+
q
|
645 |
+
1 0 0 1 123.4724 75 cm
|
646 |
+
0 0 0 rg
|
647 |
+
BT /F1 10 Tf 12 TL ET
|
648 |
+
q
|
649 |
+
1 0 0 1 6 -3 cm
|
650 |
+
q
|
651 |
+
0 0 0 rg
|
652 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
653 |
+
Q
|
654 |
+
Q
|
655 |
+
q
|
656 |
+
1 0 0 1 23 -3 cm
|
657 |
+
q
|
658 |
+
0 0 0 rg
|
659 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (broken checkout template due to PHP shorttags) Tj T* ET
|
660 |
+
Q
|
661 |
+
Q
|
662 |
+
q
|
663 |
+
Q
|
664 |
+
Q
|
665 |
+
q
|
666 |
+
1 0 0 1 123.4724 75 cm
|
667 |
+
Q
|
668 |
+
q
|
669 |
+
1 0 0 1 6 57 cm
|
670 |
+
q
|
671 |
+
0 0 0 rg
|
672 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (13.09.26) Tj T* ET
|
673 |
+
Q
|
674 |
+
Q
|
675 |
+
q
|
676 |
+
1 0 0 1 64.73622 57 cm
|
677 |
+
q
|
678 |
+
0 0 0 rg
|
679 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (26.09.2013) Tj T* ET
|
680 |
+
Q
|
681 |
+
Q
|
682 |
+
q
|
683 |
+
1 0 0 1 123.4724 57 cm
|
684 |
+
q
|
685 |
+
0 0 0 rg
|
686 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Feature:) Tj T* ET
|
687 |
+
Q
|
688 |
+
Q
|
689 |
+
q
|
690 |
+
1 0 0 1 123.4724 51 cm
|
691 |
+
Q
|
692 |
+
q
|
693 |
+
1 0 0 1 123.4724 51 cm
|
694 |
+
Q
|
695 |
+
q
|
696 |
+
1 0 0 1 123.4724 39 cm
|
697 |
+
0 0 0 rg
|
698 |
+
BT /F1 10 Tf 12 TL ET
|
699 |
+
q
|
700 |
+
1 0 0 1 6 -3 cm
|
701 |
+
q
|
702 |
+
0 0 0 rg
|
703 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
704 |
+
Q
|
705 |
+
Q
|
706 |
+
q
|
707 |
+
1 0 0 1 23 -3 cm
|
708 |
+
q
|
709 |
+
0 0 0 rg
|
710 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (send mail after automatically invoice creation) Tj T* ET
|
711 |
+
Q
|
712 |
+
Q
|
713 |
+
q
|
714 |
+
Q
|
715 |
+
Q
|
716 |
+
q
|
717 |
+
1 0 0 1 123.4724 39 cm
|
718 |
+
Q
|
719 |
+
q
|
720 |
+
1 0 0 1 6 21 cm
|
721 |
+
q
|
722 |
+
0 0 0 rg
|
723 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (13.07.04) Tj T* ET
|
724 |
+
Q
|
725 |
+
Q
|
726 |
+
q
|
727 |
+
1 0 0 1 64.73622 21 cm
|
728 |
+
q
|
729 |
+
0 0 0 rg
|
730 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (04.07.2013) Tj T* ET
|
731 |
+
Q
|
732 |
+
Q
|
733 |
+
q
|
734 |
+
1 0 0 1 123.4724 21 cm
|
735 |
+
q
|
736 |
+
0 0 0 rg
|
737 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Other:) Tj T* ET
|
738 |
+
Q
|
739 |
+
Q
|
740 |
+
q
|
741 |
+
1 0 0 1 123.4724 15 cm
|
742 |
+
Q
|
743 |
+
q
|
744 |
+
1 0 0 1 123.4724 15 cm
|
745 |
+
Q
|
746 |
+
q
|
747 |
+
1 0 0 1 123.4724 3 cm
|
748 |
+
0 0 0 rg
|
749 |
+
BT /F1 10 Tf 12 TL ET
|
750 |
+
q
|
751 |
+
1 0 0 1 6 -3 cm
|
752 |
+
q
|
753 |
+
0 0 0 rg
|
754 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 10.5 0 Td (\177) Tj T* -10.5 0 Td ET
|
755 |
+
Q
|
756 |
+
Q
|
757 |
+
q
|
758 |
+
1 0 0 1 23 -3 cm
|
759 |
+
q
|
760 |
+
0 0 0 rg
|
761 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (Initial Release) Tj T* ET
|
762 |
+
Q
|
763 |
+
Q
|
764 |
+
q
|
765 |
+
Q
|
766 |
+
Q
|
767 |
+
q
|
768 |
+
1 0 0 1 123.4724 3 cm
|
769 |
+
Q
|
770 |
+
q
|
771 |
+
1 J
|
772 |
+
1 j
|
773 |
+
0 0 0 RG
|
774 |
+
.25 w
|
775 |
+
n 0 450 m 469.8898 450 l S
|
776 |
+
n 0 294 m 469.8898 294 l S
|
777 |
+
n 0 234 m 469.8898 234 l S
|
778 |
+
n 0 192 m 469.8898 192 l S
|
779 |
+
n 0 72 m 469.8898 72 l S
|
780 |
+
n 0 36 m 469.8898 36 l S
|
781 |
+
n 58.73622 0 m 58.73622 468 l S
|
782 |
+
n 117.4724 0 m 117.4724 468 l S
|
783 |
+
n 0 468 m 469.8898 468 l S
|
784 |
+
n 0 0 m 469.8898 0 l S
|
785 |
+
n 0 0 m 0 468 l S
|
786 |
+
n 469.8898 0 m 469.8898 468 l S
|
787 |
+
Q
|
788 |
+
Q
|
789 |
+
q
|
790 |
+
1 0 0 1 62.69291 225.3701 cm
|
791 |
+
Q
|
792 |
+
q
|
793 |
+
1 0 0 1 62.69291 225.3701 cm
|
794 |
+
Q
|
795 |
+
q
|
796 |
+
1 0 0 1 56.69291 56.69291 cm
|
797 |
+
0 0 0 rg
|
798 |
+
BT /F1 10 Tf 12 TL ET
|
799 |
+
q
|
800 |
+
1 0 0 1 6 3 cm
|
801 |
+
q
|
802 |
+
BT 1 0 0 1 0 2 Tm 12 TL /F1 10 Tf 0 0 0 rg (Stand: 06/05/2015) Tj T* ET
|
803 |
+
Q
|
804 |
+
Q
|
805 |
+
q
|
806 |
+
1 0 0 1 246.9449 3 cm
|
807 |
+
q
|
808 |
+
0 0 0 rg
|
809 |
+
BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL 215.0449 0 Td (1/1) Tj T* -215.0449 0 Td ET
|
810 |
+
Q
|
811 |
+
Q
|
812 |
+
q
|
813 |
+
Q
|
814 |
+
Q
|
815 |
+
|
816 |
+
endstream
|
817 |
+
endobj
|
818 |
+
% 'R10': class PDFOutlines
|
819 |
+
10 0 obj
|
820 |
+
<< /Count 0
|
821 |
+
/Type /Outlines >>
|
822 |
+
endobj
|
823 |
+
% 'R11': class PDFPageLabels
|
824 |
+
11 0 obj
|
825 |
+
% Document Root
|
826 |
+
<< /Nums [ 0
|
827 |
+
12 0 R ] >>
|
828 |
+
endobj
|
829 |
+
% 'R12': class PDFPageLabel
|
830 |
+
12 0 obj
|
831 |
+
% None
|
832 |
+
<< /S /D
|
833 |
+
/St 1 >>
|
834 |
+
endobj
|
835 |
+
xref
|
836 |
+
0 13
|
837 |
+
0000000000 65535 f
|
838 |
+
0000000113 00000 n
|
839 |
+
0000000233 00000 n
|
840 |
+
0000000398 00000 n
|
841 |
+
0000000573 00000 n
|
842 |
+
0000000760 00000 n
|
843 |
+
0000001037 00000 n
|
844 |
+
0000001193 00000 n
|
845 |
+
0000001459 00000 n
|
846 |
+
0000001564 00000 n
|
847 |
+
0000012202 00000 n
|
848 |
+
0000012285 00000 n
|
849 |
+
0000012378 00000 n
|
850 |
+
trailer
|
851 |
+
<< /ID
|
852 |
+
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
853 |
+
[(&\325Y\272\204\233c\353+_\332\233\033\247\3779) (&\325Y\272\204\233c\353+_\332\233\033\247\3779)]
|
854 |
+
|
855 |
+
/Info 7 0 R
|
856 |
+
/Root 6 0 R
|
857 |
+
/Size 13 >>
|
858 |
+
startxref
|
859 |
+
12425
|
860 |
+
%%EOF
|
package.xml
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<package><name>Expercash</name><version>15.05.06</version><stability>stable</stability><license>OSL3</license><channel>community</channel><extends></extends><summary>some text</summary><description>some description</description><notes>test release</notes><authors><author><name>Sebastian Ertner</name><user>sebastianertner</user><email>sebastian.ertner@netresearch.de</email></author></authors><date>2015-05-06</date><time>7:13:37</time><compatible></compatible><dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies><contents><target name="mage"><dir name="doc"><dir name="Expercash_Expercash"><file name="Benutzerdokumentation.pdf" hash="eaadbbe9a64916e44b46fe140ddc9bb2"/><file name="ChangeLog.pdf" hash="d443b4928e2c17dc3e51fc731e28d2ba"/></dir></dir><dir name="skin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><file name="expercash.css" hash="6113641bea3bc89a39672cfd976a2ce7"/></dir><dir name="images"><dir name="expercash"><file name="mp_buy_with_button.png" hash="5ed1fe8cc333e939cfdcdd894e16ef08"/><file name="mp_ident.png" hash="2253e27fe9bfeb20c7289c7dc9cc26ab"/></dir></dir><dir name="js"><file name="expercashopc.js" hash="ff8a0156b04323478e79d3d42d8a1cbf"/></dir></dir></dir></dir></dir><dir name="app"><dir name="locale"><dir name="de_DE"><file name="Expercash_Expercash.csv" hash="3a1d11e3bab24fb9aa9fd5bab33a05cf"/></dir><dir name="en_US"><file name="Expercash_Expercash.csv" hash="08397d083bc51174b54d863c35aa19f1"/></dir></dir><dir name="skin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="images"><dir name="expercash"><file name="masterpass.png" hash="988dd21889981f9f765cd920d9e572b1"/></dir></dir></dir></dir></dir></dir><dir name="design"><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="expercash"><file name="expercash.phtml" hash="3975416632a3f49154b6b86bbff0bb83"/><file name="expercasherror.phtml" hash="6a4056679aa05d3386de4864d33b2764"/><dir name="checkout"><file name="onepage.phtml" hash="056bbc6d9b779663edd770a2388f0fa7"/><dir name="ce15"><file name="onepage.phtml" hash="73acc169ccebdc9686d39e758e8dbe1b"/></dir><dir name="onepage"><file name="js.phtml" hash="9da0a81649cbcb0212c5a35daacdcded"/></dir></dir><dir name="info"><file name="expercash.phtml" hash="7debefc23e99803112ecc6aa634504e4"/><dir name="pdf"><file name="expercash.phtml" hash="c6be54fed275a07ddd5dffc24b9b3c12"/></dir></dir><dir name="masterpass"><dir name="fullcheckout"><file name="checkout.phtml" hash="872bb6a52b0166d7053bcf0541633eca"/><file name="shortcut.phtml" hash="294692b7e6c576d6b7362f502ec91752"/></dir></dir><dir name="payment"><dir name="masterpass"><file name="cc.phtml" hash="728959a1b3f510006d38fc655c4e8a1f"/></dir><dir name="logo"><file name="logo.phtml" hash="b6b43e823aae87ee66de75ffb715d376"/></dir></dir><dir name="form"><file name="expercashiframe.phtml" hash="3e991b2bb584801d43ff0deb2506d508"/></dir></dir></dir><dir name="layout"><file name="expercash.xml" hash="4705199e041da18aaf2c310830736ba9"/></dir></dir></dir><dir name="rwd"><dir name="default"><dir name="template"><dir name="expercash"><dir name="checkout"><file name="onepage.phtml" hash="1f07267037c504a038219918838e311a"/></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="expercash"><dir name="info"><file name="expercash.phtml" hash="3d6f29786f0b271b90d8c9b989837f56"/><dir name="pdf"><file name="expercash.phtml" hash="c6be54fed275a07ddd5dffc24b9b3c12"/></dir></dir></dir></dir></dir></dir></dir></dir><dir name="code"><dir name="community"><dir name="Expercash"><dir name="Expercash"><dir name="sql"><dir name="expercash_setup"><file name="mysql4-install-1.0.0.php" hash="38c0cd64205e9bbcc1fa2b2a6e3d2a48"/></dir></dir><dir name="Test"><dir name="Controller"><file name="ExpercashControllerTest.php" hash="1882c06d9ea1570dda3ee487273cc71e"/><dir name="ExpercashControllerTest"><dir name="fixtures"><file name="orders.yaml" hash="16fa377e0aa408a83ca300b42295df59"/></dir><dir name="expectations"><file name="orders.yaml" hash="5303d2b0d9fb1b9a91d99bf10cfc98c3"/></dir></dir></dir><dir name="Helper"><file name="DataTest.php" hash="74db3d71d4eebdb34266df21366b383a"/><file name="MasterpassTest.php" hash="1436f27d0aad0489b606009f7091791a"/><file name="PaymentTest.php" hash="fa0b8047332cace90dc52b42081b241b"/><dir name="PaymentTest"><dir name="fixtures"><file name="orders.yaml" hash="56a7ac11d5c2bffb3b7cef807b798490"/></dir></dir></dir><dir name="Model"><file name="ConfigTest.php" hash="cd9cf9c1bddde58aa2435fa20540e5f3"/><file name="ExpercashTest.php" hash="c74034a3f66dcb50f6829bf4e726cafc"/><file name="ExpercashccTest.php" hash="7fa68cdd8fb98fbe770212a18eb881b4"/><file name="ExpercashelvTest.php" hash="83685901e621e8209ac9997c2b2e0097"/><file name="ExpercashgpTest.php" hash="df4f7f94db8338bc0e5c16c717fdba6f"/><file name="ExpercashmpTest.php" hash="19b528ec264d9a95c58c595e35a482d0"/><file name="ExpercashmpfTest.php" hash="0781c35fb2065f5a954641f04ea87e6d"/><file name="ExpercashpcTest.php" hash="99f2e5eaea76700ff82d678f349b7c6f"/><file name="ExpercashppTest.php" hash="92e3b211091d6487029c3fd0057b56ae"/><file name="ExpercashsoTest.php" hash="600bf5716950a6de8b11c7c47583b0ea"/><dir name="ExpercashmpfTest"><dir name="fixtures"><file name="quote.yaml" hash="5e08cf2b5ef1c65eae4269d4d9240aee"/></dir></dir><dir name="Api"><file name="AbstractTest.php" hash="9fa3e989d26d2ab5e5c26604eb1084df"/><file name="ApiTest.php" hash="254a3779b78d372cd23e9e7d27fc8cde"/><file name="CaptureTest.php" hash="2633f371d6a4283e95e75d9e4d0f2a6b"/><dir name="ApiTest"><dir name="TestFiles"><file name="FailedTransaction.xml" hash="37851e225e15329588460482e7d78ec8"/><file name="ResponseParamsMissing.xml" hash="71a3977ddc1a2e6468c64ec1d4d27b0f"/><file name="SuccessFullResponse.xml" hash="9534f76edabf6edd8fb066874749882a"/></dir></dir><dir name="CaptureTest"><dir name="fixtures"><file name="orders.yaml" hash="37e75e93a6f658d5fac188f1d0b53d8e"/></dir></dir></dir><dir name="ExpercashpcTest"><dir name="fixtures"><file name="quote.yaml" hash="654b1ea6f862693b1265ff640354dc41"/></dir></dir><dir name="Request"><file name="IframeTest.php" hash="72a12161b78a1ca1fdfca75c15669b49"/><file name="TokenTest.php" hash="235808b49e1d95cd92bcbf2e79ced263"/><dir name="Token"><file name="IframeTest.php" hash="67e7f221b29e4bb51f69ef40bb3590b6"/><dir name="IframeTest"><dir name="fixtures"><file name="order.yaml" hash="012db55a0b44bcd20adabe55b34f1336"/></dir></dir></dir><dir name="TokenTest"><dir name="fixtures"><file name="order.yaml" hash="012db55a0b44bcd20adabe55b34f1336"/></dir></dir><dir name="IframeTest"><dir name="fixtures"><file name="order.yaml" hash="bb7bb8e01994ef4da869aca5abbbd709"/></dir></dir></dir></dir><dir name="Block"><file name="ExpercashTest.php" hash="a164a0542a6fe702ca11593996db17e5"/><dir name="Masterpass"><file name="FormTest.php" hash="50eba5e92488cb1d0a1df039dee04bc3"/><dir name="Fullcheckout"><file name="ShortcutTest.php" hash="57a55b87a6e1520b4080d70ba2e3628c"/></dir></dir><dir name="ExpercashTest"><dir name="fixtures"><file name="orders.yaml" hash="5410ce49a826596a7acd638f8615b74f"/></dir><dir name="expectations"><file name="orders.yaml" hash="a9bd2f7d6df351f28cbfe20837f014d5"/></dir></dir></dir><dir name="var"><dir name="fixtures"><file name="orders.yaml" hash="e34886b7e3379b866a1baf5d8791ee5c"/><file name="quote.yaml" hash="a32028834c19c5b29b1cedcfa6dddf06"/></dir><dir name="expectations"><file name="orders.yaml" hash="5303d2b0d9fb1b9a91d99bf10cfc98c3"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="340e9e3548972cda79b79bcb128ca039"/><file name="Masterpass.php" hash="4fce435a0bc20ea4cf23bd6073433579"/><file name="Payment.php" hash="b6f11019c9ebfc682a38d48197052de4"/></dir><dir name="Model"><file name="Config.php" hash="505efd4d4561961446356ea6f58db93a"/><file name="Expercash.php" hash="b0565568a61899837c40ec51132112c3"/><file name="Expercashcc.php" hash="b633a0ee42552c9ded4086954c1af16c"/><file name="Expercashelv.php" hash="a68f9e6e9d0c75fcbf7d6c045390ed66"/><file name="Expercashgp.php" hash="16f9b2145eb48cc343436b98fb8afb78"/><file name="Expercashmp.php" hash="ebda9826d73b1d25f07cd47e2591f8d2"/><file name="Expercashmpf.php" hash="84a2e7a96384274978a6fb7691f57c47"/><file name="Expercashpc.php" hash="752717db870d53bac8f25029d4c3e872"/><file name="Expercashpp.php" hash="413f3e0ada0449a3c2737fb7c8327c7e"/><file name="Expercashso.php" hash="a0803d48640c4a1d76a583aa9e5b0358"/><file name="Observer.php" hash="6f6709225e6e4f51ce84a3ddb99d2e05"/><dir name="Entity"><file name="Setup.php" hash="92e67cfecc9602a4f991350b3955a5bc"/></dir><dir name="Source"><file name="Paymenttypecc.php" hash="7904509a589ba3616b6548ef4e0c3aba"/><file name="Paymenttypeelv.php" hash="18adea86b9a693f3327d7f95b3fff843"/><file name="Paymenttypegp.php" hash="12b0278f54c8831c23c2a612115dec82"/><file name="Paymenttypemp.php" hash="210c923e158840ecc8c1ea242515f01d"/><file name="Paymenttypempf.php" hash="ee36fc7e4b965da64b4f3106957ea336"/><file name="Paymenttypeso.php" hash="cafd1ba2e25a269a3ebcc1e7fbd54d3a"/></dir><dir name="Directory"><file name="Region.php" hash="eac40cbc2fc2faf379d140e4b9813256"/></dir><dir name="Masterpass"><file name="Config.php" hash="c5343c7a0f15b5fe98436a9a2bf80399"/></dir><dir name="Api"><file name="Abstract.php" hash="66edf7a42e50f9066b7b3c70a9dedb4a"/><file name="Api.php" hash="c8a6aa460c70f44cd4b80489bf9c0098"/><file name="Capture.php" hash="22a930d5bd4ce1c1ce63d29cfa638bef"/><dir name="Masterpass"><file name="Capture.php" hash="b14f293a73cb0a3fbd0bbc6fd5f62d2e"/><file name="Epi.php" hash="a4af87a6e8847dd14d963f216cc66eea"/></dir></dir><dir name="Resource"><dir name="Directory"><file name="Region.php" hash="b37149cbdf1b99858ff6c9b4e65fee51"/></dir></dir><dir name="Request"><file name="Iframe.php" hash="9d538a27439397903329734f877b7e3b"/><file name="Token.php" hash="82bb5f16b9b1c8efaf135bd16b78546b"/><dir name="Token"><file name="Iframe.php" hash="8956cd7280a8d0800485b676d1ac8d27"/></dir><dir name="Masterpass"><file name="Epi.php" hash="ed2e6673e99be7ecd9b8027caefaa77f"/></dir></dir></dir><dir name="controllers"><file name="ExpercashController.php" hash="f18d38a99b907c9940f75c734b243d31"/><file name="FullcheckoutController.php" hash="3ba6450f465a965c5b4b0ea20b0ebb5a"/><dir name="Checkout"><file name="OnepageController.php" hash="c6d7a8e0043064a066194ab76b9e3d9c"/></dir></dir><dir name="Block"><file name="Expercash.php" hash="49799c4503c7ad0f8abeb98d0fc4ea17"/><file name="Form.php" hash="f4289d179cfccb2a97e01f793e31ee77"/><file name="Info.php" hash="ae54106dce146aa50cb58b9a84c1ddb8"/><dir name="Form"><file name="Expercash.php" hash="6e54e89302c484ef1543e4c43f5ab374"/></dir><dir name="Masterpass"><file name="Form.php" hash="400e99712e8360d80d9e61bc464cbb58"/><dir name="Fullcheckout"><file name="Cc.php" hash="f9de0ca7a02a450f0df71553819e0452"/><file name="Shortcut.php" hash="32d53199f349572babd755e8732404c9"/></dir></dir><dir name="Info"><file name="Expercash.php" hash="b2f86b96593a6731283d59292e737b62"/></dir></dir><dir name="etc"><file name="config.xml" hash="f3116b5989287a6270cf65d9e20cc668"/><file name="system.xml" hash="1433bc2c03ea31e94fabf6a557eb286f"/></dir></dir></dir></dir></dir><dir name="etc"><dir name="modules"><file name="Expercash_Expercash.xml" hash="e3ab647d614795211758975d8a58bdd7"/></dir></dir></dir></target></contents></package>
|
skin/frontend/base/default/css/expercash.css
ADDED
@@ -0,0 +1,167 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.masterpass-checkout h3 {
|
2 |
+
font-weight: bold;
|
3 |
+
|
4 |
+
}
|
5 |
+
|
6 |
+
.masterpass-checkout h3, .masterpass-checkout p {
|
7 |
+
text-align: left;
|
8 |
+
|
9 |
+
}
|
10 |
+
|
11 |
+
.masterpass-checkout .masterpass-info {
|
12 |
+
font-size: 14px;
|
13 |
+
}
|
14 |
+
|
15 |
+
|
16 |
+
.masterpass-links a {
|
17 |
+
margin: 10px;
|
18 |
+
width: auto;
|
19 |
+
text-decoration: none;
|
20 |
+
}
|
21 |
+
|
22 |
+
.masterpass-links .learn_more_link {
|
23 |
+
text-decoration: underline;
|
24 |
+
}
|
25 |
+
|
26 |
+
.masterpass-links .learn_more_link:hover {
|
27 |
+
text-decoration: none;
|
28 |
+
}
|
29 |
+
|
30 |
+
.masterpass-logo a img {
|
31 |
+
|
32 |
+
}
|
33 |
+
|
34 |
+
.top .masterpass-logo {
|
35 |
+
height: 40px;
|
36 |
+
padding-right: 40px;
|
37 |
+
text-align: center;
|
38 |
+
text-transform: uppercase;
|
39 |
+
vertical-align: middle;
|
40 |
+
}
|
41 |
+
|
42 |
+
.masterpass-logo a {
|
43 |
+
text-decoration: none;
|
44 |
+
}
|
45 |
+
|
46 |
+
.masterpass-checkout-wrapper {
|
47 |
+
width: 100%;
|
48 |
+
height: 70px;
|
49 |
+
}
|
50 |
+
|
51 |
+
.masterpass-checkout-left {
|
52 |
+
float: left;
|
53 |
+
width: 50%;
|
54 |
+
}
|
55 |
+
|
56 |
+
.masterpass-checkout-right {
|
57 |
+
float: right;
|
58 |
+
width: 50%;
|
59 |
+
}
|
60 |
+
|
61 |
+
.masterpass_checkout-logo {
|
62 |
+
float:right;
|
63 |
+
margin: 20px 20px 0 0;
|
64 |
+
}
|
65 |
+
|
66 |
+
.masterpass-checkout-link {
|
67 |
+
float: right;
|
68 |
+
padding: 10px 0 0 0;
|
69 |
+
}
|
70 |
+
|
71 |
+
#masterpass_payment_method {
|
72 |
+
height: auto;
|
73 |
+
width: auto;
|
74 |
+
max-width: 135px;
|
75 |
+
max-height: 135px;
|
76 |
+
}
|
77 |
+
|
78 |
+
.masterpass-wrapper {
|
79 |
+
width: 240px;
|
80 |
+
overflow: hidden;
|
81 |
+
display: inline-block;
|
82 |
+
}
|
83 |
+
|
84 |
+
.masterpass-fullcheckout {
|
85 |
+
float:left;
|
86 |
+
display: inline-block;
|
87 |
+
max-width: 67%;
|
88 |
+
}
|
89 |
+
.masterpass-or-top {
|
90 |
+
text-align: center;
|
91 |
+
line-height: 37px;
|
92 |
+
color: #636363;
|
93 |
+
}
|
94 |
+
|
95 |
+
.masterpass-or-bottom {
|
96 |
+
margin: 0 0 2em 0;
|
97 |
+
color: #636363;
|
98 |
+
}
|
99 |
+
|
100 |
+
.or-divider {
|
101 |
+
line-height: 0.5;
|
102 |
+
text-align: center;
|
103 |
+
}
|
104 |
+
|
105 |
+
.masterpass-wrapper-bottom {
|
106 |
+
width: 100%;
|
107 |
+
}
|
108 |
+
|
109 |
+
.or-divider span {
|
110 |
+
display: inline-block;
|
111 |
+
position: relative;
|
112 |
+
}
|
113 |
+
|
114 |
+
.or-divider span:before,
|
115 |
+
.or-divider span:after {
|
116 |
+
/*content: "";*/
|
117 |
+
/*position: absolute;*/
|
118 |
+
/*height: 5px;*/
|
119 |
+
/*border-bottom: 1px solid #e6e6e6;*/
|
120 |
+
/*border-top: 1px solid #e6e6e6;*/
|
121 |
+
/*width: 60px;*/
|
122 |
+
}
|
123 |
+
|
124 |
+
.or-divider span:before {
|
125 |
+
right: 100%;
|
126 |
+
margin-right: 15px;
|
127 |
+
}
|
128 |
+
|
129 |
+
.or-divider span:after {
|
130 |
+
left: 100%;
|
131 |
+
margin-left: 15px;
|
132 |
+
}
|
133 |
+
|
134 |
+
.masterpass-fullcheckout-bottom {
|
135 |
+
padding: 0 0 10px 0;
|
136 |
+
}
|
137 |
+
|
138 |
+
.masterpass-link {
|
139 |
+
padding: 3px 0 0 0;
|
140 |
+
}
|
141 |
+
|
142 |
+
.masterpass-checkout {
|
143 |
+
height: 180px;
|
144 |
+
}
|
145 |
+
|
146 |
+
.masterpass-wrapper-mini-cart {
|
147 |
+
width: 100%;
|
148 |
+
}
|
149 |
+
|
150 |
+
.masterpass-fullcheckout-mini-cart {
|
151 |
+
width: 50%;
|
152 |
+
margin: 0 auto;
|
153 |
+
}
|
154 |
+
|
155 |
+
#masterpass-cc-data {
|
156 |
+
color: #636363;
|
157 |
+
border-spacing: 1px;
|
158 |
+
}
|
159 |
+
|
160 |
+
#masterpass-cc-data .label {
|
161 |
+
font-weight: bold;
|
162 |
+
padding-right: 1em;
|
163 |
+
}
|
164 |
+
|
165 |
+
#masterpass-cc-data .value {
|
166 |
+
font-style: italic;
|
167 |
+
}
|
skin/frontend/base/default/images/expercash/mp_buy_with_button.png
ADDED
Binary file
|
skin/frontend/base/default/images/expercash/mp_ident.png
ADDED
Binary file
|
skin/frontend/base/default/js/expercashopc.js
ADDED
@@ -0,0 +1,127 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Expercash Expercash
|
3 |
+
*
|
4 |
+
* NOTICE OF LICENSE
|
5 |
+
*
|
6 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
7 |
+
* that is bundled with this package in the file LICENSE.txt.
|
8 |
+
* It is also available through the world-wide-web at this URL:
|
9 |
+
* http://opensource.org/licenses/osl-3.0.php
|
10 |
+
*
|
11 |
+
* DISCLAIMER
|
12 |
+
*
|
13 |
+
* Do not edit or add to this file if you wish to upgrade this extension to
|
14 |
+
* newer versions in the future.
|
15 |
+
*
|
16 |
+
* @category Expercash
|
17 |
+
* @package Expercash_Expercash
|
18 |
+
* @copyright Copyright (c) 2015 Netresearch GmbH & Co. KG (http://www.netresearch.de/)
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
var ExpercashOpc = Class.create(Checkout, {
|
22 |
+
initialize: function($super, accordion, urls) {
|
23 |
+
this.addressesUrl = urls.addresses;
|
24 |
+
this.validateAddressesUrl = urls.validateAddresses;
|
25 |
+
this.onAddressLoad = this.fillForm.bindAsEventListener(this);
|
26 |
+
this.shippingMethodsUrl = urls.shippingMethods;
|
27 |
+
$super(accordion, urls);
|
28 |
+
},
|
29 |
+
setGuestCheckout: function() {
|
30 |
+
$('login:guest').checked = true;
|
31 |
+
this.setMethod();
|
32 |
+
},
|
33 |
+
fillForm: function(transport) {
|
34 |
+
var billingElementValues = {};
|
35 |
+
var shippingElementValues = {};
|
36 |
+
var steps = {};
|
37 |
+
|
38 |
+
if (transport && transport.responseText){
|
39 |
+
try{
|
40 |
+
steps = eval('(' + transport.responseText + ')');
|
41 |
+
billingElementValues = steps.billing;
|
42 |
+
shippingElementValues = steps.shipping;
|
43 |
+
}
|
44 |
+
catch (e) {
|
45 |
+
billingElementValues = {};
|
46 |
+
shippingElementValues = {};
|
47 |
+
}
|
48 |
+
}
|
49 |
+
|
50 |
+
var arrBillingElements = billingForm.form.getElements().sortBy(function(element) {
|
51 |
+
return element.id;
|
52 |
+
});
|
53 |
+
for (var elemIndex in arrBillingElements) {
|
54 |
+
if (arrBillingElements[elemIndex].id) {
|
55 |
+
var fieldName = arrBillingElements[elemIndex].id.replace(/^billing:/, '');
|
56 |
+
|
57 |
+
if (arrBillingElements[elemIndex].type == 'radio') {
|
58 |
+
arrBillingElements[elemIndex].checked = billingElementValues[fieldName] ? billingElementValues[fieldName] : '';
|
59 |
+
} else {
|
60 |
+
arrBillingElements[elemIndex].value = billingElementValues[fieldName] ? billingElementValues[fieldName] : '';
|
61 |
+
}
|
62 |
+
|
63 |
+
if (fieldName == 'country_id') {
|
64 |
+
billingRegionUpdater.update();
|
65 |
+
}
|
66 |
+
}
|
67 |
+
}
|
68 |
+
var arrShippingElements = shippingForm.form.getElements().sortBy(function(element) {
|
69 |
+
return element.id;
|
70 |
+
});
|
71 |
+
for (var elemIndex in arrShippingElements) {
|
72 |
+
if (arrShippingElements[elemIndex].id) {
|
73 |
+
var fieldName = arrShippingElements[elemIndex].id.replace(/^shipping:/, '');
|
74 |
+
arrShippingElements[elemIndex].value = shippingElementValues[fieldName] ? shippingElementValues[fieldName] : '';
|
75 |
+
if (fieldName == 'country_id') {
|
76 |
+
shippingRegionUpdater.update();
|
77 |
+
}
|
78 |
+
}
|
79 |
+
}
|
80 |
+
|
81 |
+
// validate Address
|
82 |
+
this.validateAddresses();
|
83 |
+
},
|
84 |
+
validateAddresses: function() {
|
85 |
+
var section = 'shipping_method';
|
86 |
+
var request = new Ajax.Request(this.validateAddressesUrl, {
|
87 |
+
method: 'get',
|
88 |
+
onFailure: this.ajaxFailure.bind(this),
|
89 |
+
onSuccess: function(transport) {
|
90 |
+
if (transport.responseJSON.error === true) {
|
91 |
+
section = transport.responseJSON.goto_section;
|
92 |
+
|
93 |
+
// call form validator so the fields get highlighted
|
94 |
+
// section needs to be opened prior to validation
|
95 |
+
if (section == 'shipping') {
|
96 |
+
this.gotoSection(section, false);
|
97 |
+
shippingForm.validator.validate();
|
98 |
+
} else if (section == 'billing') {
|
99 |
+
this.gotoSection(section, false);
|
100 |
+
billingForm.validator.validate();
|
101 |
+
}
|
102 |
+
|
103 |
+
} else {
|
104 |
+
// in case everything is fine, shipping address step is skipped, reload it
|
105 |
+
this.reloadProgressBlock('shipping');
|
106 |
+
this.fetchShippingMethods();
|
107 |
+
}
|
108 |
+
|
109 |
+
this.gotoSection(section, true);
|
110 |
+
}.bind(this)
|
111 |
+
});
|
112 |
+
},
|
113 |
+
fetchAddresses: function() {
|
114 |
+
var request = new Ajax.Request(this.addressesUrl, {
|
115 |
+
method: 'get',
|
116 |
+
onFailure: this.ajaxFailure.bind(this),
|
117 |
+
onSuccess: this.onAddressLoad
|
118 |
+
});
|
119 |
+
},
|
120 |
+
fetchShippingMethods: function() {
|
121 |
+
var request = new Ajax.Request(this.shippingMethodsUrl, {
|
122 |
+
method: 'get',
|
123 |
+
onFailure: this.ajaxFailure.bind(this),
|
124 |
+
onSuccess: shipping.onSave
|
125 |
+
});
|
126 |
+
}
|
127 |
+
});
|