diff --git a/pytrustnfe/nfe/__init__.py b/pytrustnfe/nfe/__init__.py
index 9a0d068..0718821 100644
--- a/pytrustnfe/nfe/__init__.py
+++ b/pytrustnfe/nfe/__init__.py
@@ -4,13 +4,11 @@
import os
-import hashlib
-import binascii
from lxml import etree
from .assinatura import Assinatura
from pytrustnfe.xml import render_xml, sanitize_response
from pytrustnfe.utils import gerar_chave, ChaveNFe
-from pytrustnfe.Servidores import localizar_url, localizar_qrcode
+from pytrustnfe.Servidores import localizar_url
from pytrustnfe.certificado import extract_cert_and_key_from_pfx, save_cert_key
# Zeep
@@ -38,54 +36,6 @@ def _generate_nfe_id(**kwargs):
item['infNFe']['ide']['cDV'] = chave_nfe[len(chave_nfe) - 1:]
-def _add_qrCode(xml, **kwargs):
- xml = etree.fromstring(xml)
- inf_nfe = kwargs['NFes'][0]['infNFe']
- nfe = xml.find(".//{http://www.portalfiscal.inf.br/nfe}NFe")
- infnfesupl = etree.Element('infNFeSupl')
- qrcode = etree.Element('qrCode')
- chave_nfe = inf_nfe['Id'][3:]
- dh_emissao = binascii.hexlify(inf_nfe['ide']['dhEmi'].encode()).decode()
- versao = '100'
- ambiente = kwargs['ambiente']
- valor_total = inf_nfe['total']['vNF']
- dest_cpf = 'Inexistente'
- dest = nfe.find(".//{http://www.portalfiscal.inf.br/nfe}dest")
-
- if inf_nfe.get('dest', False):
- if inf_nfe['dest'].get('CPF', False):
- dest_cpf = inf_nfe['dest']['CPF']
- dest = etree.Element('dest')
- cpf = etree.Element('CPF')
- cpf.text = dest_cpf
- dest.append(cpf)
-
- icms_total = inf_nfe['total']['vICMS']
- dig_val = binascii.hexlify(xml.find(
- ".//{http://www.w3.org/2000/09/xmldsig#}DigestValue").text.encode()).decode()
- cid_token = kwargs['NFes'][0]['infNFe']['codigo_seguranca']['cid_token']
- csc = kwargs['NFes'][0]['infNFe']['codigo_seguranca']['csc']
-
- c_hash_QR_code = "chNFe={0}&nVersao={1}&tpAmb={2}&cDest={3}&dhEmi={4}&vNF\
-={5}&vICMS={6}&digVal={7}&cIdToken={8}{9}".\
- format(chave_nfe, versao, ambiente, dest_cpf, dh_emissao,
- valor_total, icms_total, dig_val, cid_token, csc)
- c_hash_QR_code = hashlib.sha1(c_hash_QR_code.encode()).hexdigest()
-
- QR_code_url = "?chNFe={0}&nVersao={1}&tpAmb={2}&{3}dhEmi={4}&vNF={5}&vICMS\
-={6}&digVal={7}&cIdToken={8}&cHashQRCode={9}".\
- format(chave_nfe, versao, ambiente,
- 'cDest={}&'.format(dest_cpf) if dest_cpf != 'Inexistente'
- else '', dh_emissao, valor_total, icms_total, dig_val,
- cid_token, c_hash_QR_code)
- qr_code_server = localizar_qrcode(kwargs['estado'], ambiente)
- qrcode_text = qr_code_server + QR_code_url
- qrcode.text = etree.CDATA(qrcode_text)
- infnfesupl.append(qrcode)
- nfe.insert(1, infnfesupl)
- return etree.tostring(xml, encoding=str)
-
-
def _render(certificado, method, sign, **kwargs):
path = os.path.join(os.path.dirname(__file__), 'templates')
xmlElem_send = render_xml(path, '%s.xml' % method, True, **kwargs)
@@ -107,9 +57,6 @@ def _render(certificado, method, sign, **kwargs):
xml_send = signer.assina_xml(
xmlElem_send, kwargs['manifesto']['identificador'])
- if modelo == '65':
- xml_send = _add_qrCode(xml_send, **kwargs)
-
else:
xml_send = etree.tostring(xmlElem_send, encoding=str)
return xml_send
@@ -129,7 +76,9 @@ def _send(certificado, method, **kwargs):
session.verify = False
transport = Transport(session=session)
- xml = etree.fromstring(xml_send)
+ parser = etree.XMLParser(strip_cdata=False)
+ xml = etree.fromstring(xml_send, parser=parser)
+
client = Client(base_url, transport=transport)
port = next(iter(client.wsdl.port_types))
diff --git a/pytrustnfe/nfe/templates/NfeAutorizacao.xml b/pytrustnfe/nfe/templates/NfeAutorizacao.xml
index 1a616a0..e7d21d6 100644
--- a/pytrustnfe/nfe/templates/NfeAutorizacao.xml
+++ b/pytrustnfe/nfe/templates/NfeAutorizacao.xml
@@ -872,6 +872,10 @@
{% endif %}
+
+ {{ NFe.infNFe.qrCode }}
+ {{ NFe.infNFe.urlChave }}
+
{% endfor %}
diff --git a/setup.py b/setup.py
index d596afb..cf468c1 100644
--- a/setup.py
+++ b/setup.py
@@ -2,7 +2,7 @@
from setuptools import setup, find_packages
-VERSION = "1.0.11"
+VERSION = "1.0.12"
setup(
diff --git a/tests/test_add_qr_code.py b/tests/test_add_qr_code.py
deleted file mode 100644
index 77a24f4..0000000
--- a/tests/test_add_qr_code.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# -*- coding: utf-8-*-
-# © 2016 Alessandro Fernandes Martini
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
-import unittest
-# from lxml import etree
-from pytrustnfe.nfe import _add_qrCode
-
-
-class TestAddQRCode(unittest.TestCase):
- def setUp(self):
- self.xml_sem_qrcode = open('tests/xml_sem_qrcode.xml', 'r')
- self.xml_com_qrcode = open('tests/xml_com_qrcode.xml', 'r')
- dhEmi = '2016-11-09T16:03:25-00:00'
- chave_nfe = 'NFe35161121332917000163650010000000011448875034'
- ambiente = 2
- valor_total = '324.00'
- icms_total = '61.56'
- cid_token = '000001'
- csc = '123456789'
- estado = '35'
- total = {'vNF': valor_total, 'vICMS': icms_total}
- infnfe = {'ide': {'dhEmi': dhEmi}, 'Id': chave_nfe, 'total': total,
- 'codigo_seguranca': {'cid_token': cid_token, 'csc': csc}}
- infnfe = {'infNFe': infnfe}
- self.kwargs = {}
- self.kwargs['ambiente'] = ambiente
- self.kwargs['estado'] = estado
- self.kwargs['NFes'] = [infnfe]
-
- def test_add_qrCode(self):
- xml_init = self.xml_sem_qrcode.read()
- xml_end = _add_qrCode(xml_init, **self.kwargs)
- self.assertEqual(xml_end, self.xml_com_qrcode.read())
diff --git a/tests/xml_com_qrcode.xml b/tests/xml_com_qrcode.xml
deleted file mode 100644
index 22cf1ef..0000000
--- a/tests/xml_com_qrcode.xml
+++ /dev/null
@@ -1,189 +0,0 @@
-
- 103
- 1
-
-
-
- 35
- 44887503
- Venda POS
- 0
- 65
- 1
- 1
- 2016-11-09T16:03:58-00:00
- 1
- 1
- 3550308
- 4
- 1
- 4
- 2
- 1
- 1
- 1
- 0
- Odoo Brasil 10
-
-
- 21332917000163
- LEL AMBIENTAL LTDA - EPP
- Zell Ambiental
-
- Rua Padre João
- 444
- Penha de França
- 3550308
- São Paulo
- SP
- 03637000
- 1058
- Brasil
- 3425323750
-
- 244694180116
- 3
-
-
-
- MISC
-
- NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL
- 28431000
- 2806300
- 5101
- Unit(s
- 18.0
- 18.00
- 324.00
-
- Unit(s
- 18.0
- 18.00
- 1
-
-
- 0.00
-
-
- 0
- 00
- 3
- 324.00
- 19.00
- 61.56
-
-
-
-
- 01
- 324.00
- 0.00
- 2.11
-
-
-
-
- 01
- 324.00
- 0.00
- 9.72
-
-
-
-
-
-
- 324.00
- 61.56
- 0.00
- 0.00
- 0.00
- 324.00
- 0.00
- 0.00
- 0.00
- 0.00
- 0.00
- 2.11
- 9.72
- 0.00
- 324.00
- 0.00
-
-
-
- 9
-
-
- 01
- 324.00
-
-
-
-
-
-
-
-
-
-
-
-
- ffJZ+04jmHN3uLx08huykyBs2r4=
-
-
- u42y8bBqNM336yc7r0+5YWiePmCerKu3cFcp2J+lmQzIK6snba7txyeBtwVos8jQxrYLsnfWtKb5P6FxmhDeqAB41o2aoSIcnxc0yxdFn2ZDTquwU+AurH6E4hGclz8D/5qapv2+g3y+VpXMZFNNCqZSm2vJpvXBmPEY/7oO2cPB13N7WDhDRmI9H4kRDsPuxeeJetr2Bf1ThGJ0EUA4DXC7My0kl/Bw0rYwoPDhoqhxinr9Wocw1UyQ1vprLF0JVHXOtSq39Uqfqmj5QUDwUvvh4YL9bFZ8lvZZ0CZDmILaFGvr1XH3CwJ2Ws3RLlb12Arj5OT4vS8ZKhJtr/dpfA==
-
-
- MIIIPzCCBiegAwIBAgIQYdesnYUNG8VPne0qhTeKOzANBgkqhkiG9w0BAQsFADB4
-MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE2MDQGA1UECxMtU2Vj
-cmV0YXJpYSBkYSBSZWNlaXRhIEZlZGVyYWwgZG8gQnJhc2lsIC0gUkZCMRwwGgYD
-VQQDExNBQyBDZXJ0aXNpZ24gUkZCIEc0MB4XDTE2MDUxMDAwMDAwMFoXDTE3MDUw
-OTIzNTk1OVowgekxCzAJBgNVBAYTAkJSMRMwEQYDVQQKFApJQ1AtQnJhc2lsMQsw
-CQYDVQQIEwJTUDESMBAGA1UEBxQJU2FvIFBhdWxvMTYwNAYDVQQLFC1TZWNyZXRh
-cmlhIGRhIFJlY2VpdGEgRmVkZXJhbCBkbyBCcmFzaWwgLSBSRkIxFjAUBgNVBAsU
-DVJGQiBlLUNOUEogQTExJDAiBgNVBAsUG0F1dGVudGljYWRvIHBvciBBUiBTdW5z
-aGluZTEuMCwGA1UEAxMlTEVaIEFNQklFTlRBTCBMVERBIEVQUDoyMTMzMjkxNzAw
-MDE2MzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANEG6j0uXIvvHlMz
-0IGzuY/vuFQncIoSE+cBUk0uq6J3dtmGAg4oaVWCHUfHbX9s2Ag1jIG+PFAo2dlt
-sbLSEji74XhD+IpM/9aHm3ke8kb05ay+bYRuUjTNSwUbslT1+amAmIu7m1yPBi6u
-v3+/Lj2I0g7VeBBAjv/TiBG0VRCURXvKrwWrv2Lpybo/yDnENGtRqQHihqeYFKin
-nDzBsMbv4ripbi3XiAgcy/bF6NFgVMqxrNnGvSiSUhDRkmceVFIysRXUMke02Qo1
-Q5Ik1j1goUIHP44QOruXCMiT0yOK8u0qNAXR0yzSaWcBR2aJCeWgFg7sNbB50Qcx
-c+2GKUECAwEAAaOCA1EwggNNMIG2BgNVHREEga4wgaugPQYFYEwBAwSgNAQyMTYw
-NjE5ODYzNDEzNzgyODg2NTAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMzczU1NQU1Cg
-IgYFYEwBAwKgGQQXTEVPTkFSRE8gREUgTElNQSBTQU5UT1OgGQYFYEwBAwOgEAQO
-MjEzMzI5MTcwMDAxNjOgFwYFYEwBAwegDgQMMDAwMDAwMDAwMDAwgRJ3YWduZXJA
-emVsbC5jb20uYnIwCQYDVR0TBAIwADAfBgNVHSMEGDAWgBQukerWbeWyWYLcOIUp
-djQWVjzQPjAOBgNVHQ8BAf8EBAMCBeAwfwYDVR0gBHgwdjB0BgZgTAECAQwwajBo
-BggrBgEFBQcCARZcaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9y
-ZXBvc2l0b3Jpby9kcGMvQUNfQ2VydGlzaWduX1JGQi9EUENfQUNfQ2VydGlzaWdu
-X1JGQi5wZGYwggEWBgNVHR8EggENMIIBCTBXoFWgU4ZRaHR0cDovL2ljcC1icmFz
-aWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9sY3IvQUNDZXJ0aXNpZ25S
-RkJHNC9MYXRlc3RDUkwuY3JsMFagVKBShlBodHRwOi8vaWNwLWJyYXNpbC5vdXRy
-YWxjci5jb20uYnIvcmVwb3NpdG9yaW8vbGNyL0FDQ2VydGlzaWduUkZCRzQvTGF0
-ZXN0Q1JMLmNybDBWoFSgUoZQaHR0cDovL3JlcG9zaXRvcmlvLmljcGJyYXNpbC5n
-b3YuYnIvbGNyL0NlcnRpc2lnbi9BQ0NlcnRpc2lnblJGQkc0L0xhdGVzdENSTC5j
-cmwwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMIGbBggrBgEFBQcBAQSB
-jjCBizBfBggrBgEFBQcwAoZTaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNv
-bS5ici9yZXBvc2l0b3Jpby9jZXJ0aWZpY2Fkb3MvQUNfQ2VydGlzaWduX1JGQl9H
-NC5wN2MwKAYIKwYBBQUHMAGGHGh0dHA6Ly9vY3NwLmNlcnRpc2lnbi5jb20uYnIw
-DQYJKoZIhvcNAQELBQADggIBAFIUBrNIyC4kBap/7hCW63tQhA/WNnWDNYpKM5wN
-zwApVV2bqFMJURzO/7AUrHu7uZS1p/Ubo+w2dFjmnmj5DniQkY85Sd6HNa1fukJY
-PK13wcUMVHMjeevIAcxnYraNdN4BIz1Svl6A8leGFgIEuDUll7Td+R7+aA8N5JYQ
-dFFIe2VxvJNbWP/WA49oI8U2wkoPTfOZtfrgKf2msHm3FnTfnmyOPhIf8L31iFt6
-MbKuFjOGIaWu+Z/gRDqj/EbFcEMUrDbeIYqz2724ZGBOJrkjHO7DBqXXoN9pzCTO
-RB5+gILMEnMS7zFsCuLOtLVohxgYUzg8p4Fy3nsHEzb/7IDVOnKLfjh/c5GSTvOa
-JT6qznYV2yav7NyuUSNUv+5bCIBNk45+qrQ8DwpsLBsFa+RLfCwvYVK95ad/xVgJ
-QosPJuzW3t0fU/FWbc00sZWV6lgBPyWhdF8EodaRIWC+EOC2wJbODyw+vdX8pUxT
-TUJKV2iAP8206gR2h07o2CZgXckJGJQ5MnBUbS78AaITXZ5JlPaS7ZdU9zWY3kD+
-j5YERs0+UweijKi5eHZioGRZRDZ2uksh1wrgeLFLWuiSNaPFYVVrQ/ZGo+E5uVNl
-8FuoR6P9TZjx1/A4XjqLQ9yPoPWgIWe14Vh/76dVcgz3ElWMbmPCDoc/wX+FoHX1
-Fbux
-
-
-
-
-
-
\ No newline at end of file
diff --git a/tests/xml_sem_qrcode.xml b/tests/xml_sem_qrcode.xml
deleted file mode 100644
index 3352a22..0000000
--- a/tests/xml_sem_qrcode.xml
+++ /dev/null
@@ -1,190 +0,0 @@
-
-
- 103
- 1
-
-
-
- 35
- 44887503
- Venda POS
- 0
- 65
- 1
- 1
- 2016-11-09T16:03:58-00:00
- 1
- 1
- 3550308
- 4
- 1
- 4
- 2
- 1
- 1
- 1
- 0
- Odoo Brasil 10
-
-
- 21332917000163
- LEL AMBIENTAL LTDA - EPP
- Zell Ambiental
-
- Rua Padre João
- 444
- Penha de França
- 3550308
- São Paulo
- SP
- 03637000
- 1058
- Brasil
- 3425323750
-
- 244694180116
- 3
-
-
-
- MISC
-
- NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL
- 28431000
- 2806300
- 5101
- Unit(s
- 18.0
- 18.00
- 324.00
-
- Unit(s
- 18.0
- 18.00
- 1
-
-
- 0.00
-
-
- 0
- 00
- 3
- 324.00
- 19.00
- 61.56
-
-
-
-
- 01
- 324.00
- 0.00
- 2.11
-
-
-
-
- 01
- 324.00
- 0.00
- 9.72
-
-
-
-
-
-
- 324.00
- 61.56
- 0.00
- 0.00
- 0.00
- 324.00
- 0.00
- 0.00
- 0.00
- 0.00
- 0.00
- 2.11
- 9.72
- 0.00
- 324.00
- 0.00
-
-
-
- 9
-
-
- 01
- 324.00
-
-
-
-
-
-
-
-
-
-
-
-
- ffJZ+04jmHN3uLx08huykyBs2r4=
-
-
- u42y8bBqNM336yc7r0+5YWiePmCerKu3cFcp2J+lmQzIK6snba7txyeBtwVos8jQxrYLsnfWtKb5P6FxmhDeqAB41o2aoSIcnxc0yxdFn2ZDTquwU+AurH6E4hGclz8D/5qapv2+g3y+VpXMZFNNCqZSm2vJpvXBmPEY/7oO2cPB13N7WDhDRmI9H4kRDsPuxeeJetr2Bf1ThGJ0EUA4DXC7My0kl/Bw0rYwoPDhoqhxinr9Wocw1UyQ1vprLF0JVHXOtSq39Uqfqmj5QUDwUvvh4YL9bFZ8lvZZ0CZDmILaFGvr1XH3CwJ2Ws3RLlb12Arj5OT4vS8ZKhJtr/dpfA==
-
-
- MIIIPzCCBiegAwIBAgIQYdesnYUNG8VPne0qhTeKOzANBgkqhkiG9w0BAQsFADB4
-MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE2MDQGA1UECxMtU2Vj
-cmV0YXJpYSBkYSBSZWNlaXRhIEZlZGVyYWwgZG8gQnJhc2lsIC0gUkZCMRwwGgYD
-VQQDExNBQyBDZXJ0aXNpZ24gUkZCIEc0MB4XDTE2MDUxMDAwMDAwMFoXDTE3MDUw
-OTIzNTk1OVowgekxCzAJBgNVBAYTAkJSMRMwEQYDVQQKFApJQ1AtQnJhc2lsMQsw
-CQYDVQQIEwJTUDESMBAGA1UEBxQJU2FvIFBhdWxvMTYwNAYDVQQLFC1TZWNyZXRh
-cmlhIGRhIFJlY2VpdGEgRmVkZXJhbCBkbyBCcmFzaWwgLSBSRkIxFjAUBgNVBAsU
-DVJGQiBlLUNOUEogQTExJDAiBgNVBAsUG0F1dGVudGljYWRvIHBvciBBUiBTdW5z
-aGluZTEuMCwGA1UEAxMlTEVaIEFNQklFTlRBTCBMVERBIEVQUDoyMTMzMjkxNzAw
-MDE2MzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANEG6j0uXIvvHlMz
-0IGzuY/vuFQncIoSE+cBUk0uq6J3dtmGAg4oaVWCHUfHbX9s2Ag1jIG+PFAo2dlt
-sbLSEji74XhD+IpM/9aHm3ke8kb05ay+bYRuUjTNSwUbslT1+amAmIu7m1yPBi6u
-v3+/Lj2I0g7VeBBAjv/TiBG0VRCURXvKrwWrv2Lpybo/yDnENGtRqQHihqeYFKin
-nDzBsMbv4ripbi3XiAgcy/bF6NFgVMqxrNnGvSiSUhDRkmceVFIysRXUMke02Qo1
-Q5Ik1j1goUIHP44QOruXCMiT0yOK8u0qNAXR0yzSaWcBR2aJCeWgFg7sNbB50Qcx
-c+2GKUECAwEAAaOCA1EwggNNMIG2BgNVHREEga4wgaugPQYFYEwBAwSgNAQyMTYw
-NjE5ODYzNDEzNzgyODg2NTAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMzczU1NQU1Cg
-IgYFYEwBAwKgGQQXTEVPTkFSRE8gREUgTElNQSBTQU5UT1OgGQYFYEwBAwOgEAQO
-MjEzMzI5MTcwMDAxNjOgFwYFYEwBAwegDgQMMDAwMDAwMDAwMDAwgRJ3YWduZXJA
-emVsbC5jb20uYnIwCQYDVR0TBAIwADAfBgNVHSMEGDAWgBQukerWbeWyWYLcOIUp
-djQWVjzQPjAOBgNVHQ8BAf8EBAMCBeAwfwYDVR0gBHgwdjB0BgZgTAECAQwwajBo
-BggrBgEFBQcCARZcaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9y
-ZXBvc2l0b3Jpby9kcGMvQUNfQ2VydGlzaWduX1JGQi9EUENfQUNfQ2VydGlzaWdu
-X1JGQi5wZGYwggEWBgNVHR8EggENMIIBCTBXoFWgU4ZRaHR0cDovL2ljcC1icmFz
-aWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9sY3IvQUNDZXJ0aXNpZ25S
-RkJHNC9MYXRlc3RDUkwuY3JsMFagVKBShlBodHRwOi8vaWNwLWJyYXNpbC5vdXRy
-YWxjci5jb20uYnIvcmVwb3NpdG9yaW8vbGNyL0FDQ2VydGlzaWduUkZCRzQvTGF0
-ZXN0Q1JMLmNybDBWoFSgUoZQaHR0cDovL3JlcG9zaXRvcmlvLmljcGJyYXNpbC5n
-b3YuYnIvbGNyL0NlcnRpc2lnbi9BQ0NlcnRpc2lnblJGQkc0L0xhdGVzdENSTC5j
-cmwwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMIGbBggrBgEFBQcBAQSB
-jjCBizBfBggrBgEFBQcwAoZTaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNv
-bS5ici9yZXBvc2l0b3Jpby9jZXJ0aWZpY2Fkb3MvQUNfQ2VydGlzaWduX1JGQl9H
-NC5wN2MwKAYIKwYBBQUHMAGGHGh0dHA6Ly9vY3NwLmNlcnRpc2lnbi5jb20uYnIw
-DQYJKoZIhvcNAQELBQADggIBAFIUBrNIyC4kBap/7hCW63tQhA/WNnWDNYpKM5wN
-zwApVV2bqFMJURzO/7AUrHu7uZS1p/Ubo+w2dFjmnmj5DniQkY85Sd6HNa1fukJY
-PK13wcUMVHMjeevIAcxnYraNdN4BIz1Svl6A8leGFgIEuDUll7Td+R7+aA8N5JYQ
-dFFIe2VxvJNbWP/WA49oI8U2wkoPTfOZtfrgKf2msHm3FnTfnmyOPhIf8L31iFt6
-MbKuFjOGIaWu+Z/gRDqj/EbFcEMUrDbeIYqz2724ZGBOJrkjHO7DBqXXoN9pzCTO
-RB5+gILMEnMS7zFsCuLOtLVohxgYUzg8p4Fy3nsHEzb/7IDVOnKLfjh/c5GSTvOa
-JT6qznYV2yav7NyuUSNUv+5bCIBNk45+qrQ8DwpsLBsFa+RLfCwvYVK95ad/xVgJ
-QosPJuzW3t0fU/FWbc00sZWV6lgBPyWhdF8EodaRIWC+EOC2wJbODyw+vdX8pUxT
-TUJKV2iAP8206gR2h07o2CZgXckJGJQ5MnBUbS78AaITXZ5JlPaS7ZdU9zWY3kD+
-j5YERs0+UweijKi5eHZioGRZRDZ2uksh1wrgeLFLWuiSNaPFYVVrQ/ZGo+E5uVNl
-8FuoR6P9TZjx1/A4XjqLQ9yPoPWgIWe14Vh/76dVcgz3ElWMbmPCDoc/wX+FoHX1
-Fbux
-
-
-
-
-
-