qqlib-node-boleto 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +11 -0
- package/.eslintignore +1 -0
- package/.eslintrc +10 -0
- package/.idea/encodings.xml +4 -0
- package/.idea/modules.xml +8 -0
- package/.idea/node-boleto.git_master.iml +8 -0
- package/.idea/vcs.xml +7 -0
- package/LICENSE +20 -0
- package/README.md +92 -0
- package/assets/layout.ejs +433 -0
- package/banks/banco do brasil/index.js +172 -0
- package/banks/bradesco/index.js +154 -0
- package/banks/caixa/index.js +66 -0
- package/banks/santander/helper.js +3 -0
- package/banks/santander/index.js +145 -0
- package/examples/bradesco-edi.js +6 -0
- package/examples/bradesco-emission.js +35 -0
- package/examples/retorno.txt +8 -0
- package/examples/santander-edi.js +6 -0
- package/examples/santander-emission.js +32 -0
- package/index.js +12 -0
- package/lib/barcode.js +93 -0
- package/lib/boleto.js +105 -0
- package/lib/edi-helper.js +13 -0
- package/lib/edi-parser.js +7 -0
- package/lib/formatters.js +109 -0
- package/package.json +30 -0
- package/public/images/b.png +0 -0
- package/public/images/bb.png +0 -0
- package/public/images/bradesco.jpg +0 -0
- package/public/images/santander.png +0 -0
- package/public/images/w.png +0 -0
- package/readme.will.md +11 -0
- package/sonar-project.properties +9 -0
- package/test/e2e/boleto-output.js +420 -0
- package/test/e2e/boleto-render.spec.js +104 -0
- package/test/integration/bradesco/boleto.spec.js +216 -0
- package/test/integration/bradesco/edi.spec.js +113 -0
- package/test/integration/caixa/edi.spec.js +99 -0
- package/test/integration/santander/boleto.spec.js +45 -0
- package/test/integration/santander/edi.spec.js +73 -0
- package/test/mocks/banks.js +13 -0
- package/test/mocks/boleto-2018-10-31.js +25 -0
- package/test/mocks/boleto-2018-11-09.js +25 -0
- package/test/unit/boleto-object.spec.js +134 -0
- package/test/unit/boleto-render.spec.js +34 -0
- package/test/unit/formatters.spec.js +62 -0
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
module.exports = (bankLogo, bankNumber, linhaDigitavel, barcode, bmpBarcode) => `
|
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
4
|
+
<head>
|
|
5
|
+
<title>Visualização de boleto</title>
|
|
6
|
+
<meta name="robots" content="noindex">
|
|
7
|
+
<meta name="format-detection" content="telephone=no"/>
|
|
8
|
+
<style media="screen, print" type="text/css">
|
|
9
|
+
body
|
|
10
|
+
{
|
|
11
|
+
color:#000000;
|
|
12
|
+
background-color:#ffffff;
|
|
13
|
+
margin-top:0;
|
|
14
|
+
margin-right:0;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
*{margin:0px;padding:0px}
|
|
18
|
+
table{border:0;border-collapse:collapse;padding:0}
|
|
19
|
+
|
|
20
|
+
img{border:0}
|
|
21
|
+
|
|
22
|
+
.cp
|
|
23
|
+
{
|
|
24
|
+
font: bold 10px arial;
|
|
25
|
+
color: black
|
|
26
|
+
}
|
|
27
|
+
.ti
|
|
28
|
+
{
|
|
29
|
+
font: 9px arial, helvetica, sans-serif
|
|
30
|
+
}
|
|
31
|
+
.ld
|
|
32
|
+
{
|
|
33
|
+
font: bold 15px arial;
|
|
34
|
+
color: #000000
|
|
35
|
+
}
|
|
36
|
+
.ct
|
|
37
|
+
{
|
|
38
|
+
font: 9px "arial narrow";
|
|
39
|
+
color: #000033
|
|
40
|
+
}
|
|
41
|
+
.cn
|
|
42
|
+
{
|
|
43
|
+
font: 9px arial;
|
|
44
|
+
color: black
|
|
45
|
+
}
|
|
46
|
+
.bc
|
|
47
|
+
{
|
|
48
|
+
font: bold 22px arial;
|
|
49
|
+
color: #000000
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.cut{width:665px;height:1px;border-top:dashed 1px #000}
|
|
53
|
+
.Ac{text-align:center}
|
|
54
|
+
.Ar{text-align:right}
|
|
55
|
+
.Al{text-align:left}
|
|
56
|
+
.At{vertical-align:top}
|
|
57
|
+
.Ab{vertical-align:bottom}
|
|
58
|
+
.ct td, .cp td{padding-left:6px;border-left:solid 1px #000}
|
|
59
|
+
.cpN{font:bold 10px arial;color:black}
|
|
60
|
+
.ctN{font:9px "arial narrow";color:#000033}
|
|
61
|
+
.pL0{padding-left:0px}
|
|
62
|
+
.pL6{padding-left:6px}
|
|
63
|
+
.pL10{padding-left:10px}
|
|
64
|
+
.imgLogo{width:150px}
|
|
65
|
+
.imgLogo img{width:150px;height:40px}
|
|
66
|
+
.barra{width:2px;height:15px;;background-color:#000;}
|
|
67
|
+
.rBb td{border-bottom:solid 1px #000}
|
|
68
|
+
.BB{border-bottom:solid 1px #000}
|
|
69
|
+
.BL{border-left:solid 1px #000}
|
|
70
|
+
.BR{border-right:solid 1px #000}
|
|
71
|
+
.BT1{border-top:dashed 1px #000}
|
|
72
|
+
.BT2{border-top:solid 2px #000}
|
|
73
|
+
.h1{height:1px}
|
|
74
|
+
.h13{height:13px}
|
|
75
|
+
.h12{height:12px}
|
|
76
|
+
.h13 td{vertical-align:top}
|
|
77
|
+
.h12 td{vertical-align:top}
|
|
78
|
+
.w6{width:6px}
|
|
79
|
+
.w7{width:7px;}
|
|
80
|
+
.w34{width:34px}
|
|
81
|
+
.w45{width:45px}
|
|
82
|
+
.w53{width:53px}
|
|
83
|
+
.w62{width:62px}
|
|
84
|
+
.w65{width:65px}
|
|
85
|
+
.w72{width:72px}
|
|
86
|
+
.w83{width:83px}
|
|
87
|
+
.w88{width:88px}
|
|
88
|
+
.w104{width:104px}
|
|
89
|
+
.w105{width:105px}
|
|
90
|
+
.w106{width:106px}
|
|
91
|
+
.w113{width:113px}
|
|
92
|
+
.w112{width:112px}
|
|
93
|
+
.w123{width:123px}
|
|
94
|
+
.w126{width:126px}
|
|
95
|
+
.w128{width:128px}
|
|
96
|
+
.w132{width:132px}
|
|
97
|
+
.w134{width:134px}
|
|
98
|
+
.w150{width:150px}
|
|
99
|
+
.w163{width:163px}
|
|
100
|
+
.w164{width:164px}
|
|
101
|
+
.w180{width:180px}
|
|
102
|
+
.w182{width:182px}
|
|
103
|
+
.w186{width:186px}
|
|
104
|
+
.w192{width:192px}
|
|
105
|
+
.w250{width:250px}
|
|
106
|
+
.w298{width:298px}
|
|
107
|
+
.w409{width:409px}
|
|
108
|
+
.w472{width:472px}
|
|
109
|
+
.w478{width:478px}
|
|
110
|
+
.w500{width:500px}
|
|
111
|
+
.w544{width:544px}
|
|
112
|
+
.w564{width:564px}
|
|
113
|
+
.w659{width:659px}
|
|
114
|
+
.w666{width:666px}
|
|
115
|
+
.w667{width:667px}
|
|
116
|
+
.BHead td{border-bottom:solid 2px #000}
|
|
117
|
+
.EcdBar{height:50px;vertical-align:bottom}
|
|
118
|
+
.rc6 td{vertical-align:top;border-bottom:solid 1px #000;border-left:solid 1px #000}
|
|
119
|
+
.rc6 div{padding-left:6px}
|
|
120
|
+
.rc6 .t{font:9px "arial narrow";color:#000033;height:13px}
|
|
121
|
+
.rc6 .c{font:bold 10px arial;color:black;height:12px}
|
|
122
|
+
.mt23{margin-top:23px;}
|
|
123
|
+
.pb4{padding-bottom:14px;}
|
|
124
|
+
.ebc{width:4px;height:440px;border-right:dotted 1px #000000;margin-right:4px;}
|
|
125
|
+
|
|
126
|
+
.barcode {
|
|
127
|
+
${bmpBarcode}
|
|
128
|
+
height: 50px;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
${bmpBarcode ? '' : `.barcode-line {
|
|
132
|
+
height: inherit;
|
|
133
|
+
display: inline-block;
|
|
134
|
+
float: left;
|
|
135
|
+
}`}
|
|
136
|
+
|
|
137
|
+
@media print
|
|
138
|
+
{
|
|
139
|
+
* {-webkit-print-color-adjust:exact;}
|
|
140
|
+
.no-print, .no-print *
|
|
141
|
+
{
|
|
142
|
+
display: none !important;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
</style>
|
|
146
|
+
</head>
|
|
147
|
+
<body>
|
|
148
|
+
<div>
|
|
149
|
+
<table class="w666">
|
|
150
|
+
<tr class="cpN">
|
|
151
|
+
<td class="At Ac">Instruções de Impressão</td>
|
|
152
|
+
</tr>
|
|
153
|
+
<tr class="ti">
|
|
154
|
+
<td class="At Ac">Imprimir em impressora jato de tinta (ink jet) ou laser em qualidade normal. (Não use modo econômico).<br>Utilize folha A4 (210 x 297 mm) ou Carta (216 x 279 mm) - Corte na linha indicada<br></td>
|
|
155
|
+
</tr>
|
|
156
|
+
<tr class="ti">
|
|
157
|
+
<td class="At Ac">
|
|
158
|
+
<br/>
|
|
159
|
+
<form>
|
|
160
|
+
<input class="no-print" type="button" value="Clique aqui para imprimir" onclick="window.print();return false;" />
|
|
161
|
+
</form>
|
|
162
|
+
</td>
|
|
163
|
+
</tr>
|
|
164
|
+
</table><br /><table class="w666">
|
|
165
|
+
<tr>
|
|
166
|
+
<td class="ctN cut" />
|
|
167
|
+
</tr>
|
|
168
|
+
<tr>
|
|
169
|
+
<td class="cpN Ar">Recibo do Pagador</td>
|
|
170
|
+
</tr>
|
|
171
|
+
</table><br /><table class="w666">
|
|
172
|
+
<tr class="BHead">
|
|
173
|
+
<td class="imgLogo Al"><img src="${bankLogo}" /></td>
|
|
174
|
+
<td class="barra"></td>
|
|
175
|
+
<td class="w72 Ab bc Ac">${bankNumber}</td>
|
|
176
|
+
<td class="barra"></td>
|
|
177
|
+
<td class="w500 Ar Ab ld" id="linha-digitavel-1">${linhaDigitavel}</td>
|
|
178
|
+
</tr>
|
|
179
|
+
</table><table class="w666">
|
|
180
|
+
<tr class="ct h13 At">
|
|
181
|
+
<td class="w298">Beneficiário</td>
|
|
182
|
+
<td class="w126">Agência / Código do Beneficiário</td>
|
|
183
|
+
<td class="w34">Espécie</td>
|
|
184
|
+
<td class="w45">Quantidade</td>
|
|
185
|
+
<td class="w128">Carteira / Nosso número</td>
|
|
186
|
+
</tr>
|
|
187
|
+
<tr class="cp h12 At rBb">
|
|
188
|
+
<td>Pagar.me Pagamentos S/A</td>
|
|
189
|
+
<td>1229/469</td>
|
|
190
|
+
<td>R$</td>
|
|
191
|
+
<td></td>
|
|
192
|
+
<td class="Ar">000000000006-0</td>
|
|
193
|
+
</tr>
|
|
194
|
+
</table><table class="w666">
|
|
195
|
+
<tr class="ct h13">
|
|
196
|
+
<td class="w192">Número do documento</td>
|
|
197
|
+
<td class="w132">CPF/CNPJ</td>
|
|
198
|
+
<td class="w134">Vencimento</td>
|
|
199
|
+
<td class="w180">Valor documento</td>
|
|
200
|
+
</tr>
|
|
201
|
+
<tr class="cp h12 rBb">
|
|
202
|
+
<td>000000001</td>
|
|
203
|
+
<td>18727053000174</td>
|
|
204
|
+
<td>05/01/2017</td>
|
|
205
|
+
<td class="Ar">R$ 15,00</td>
|
|
206
|
+
</tr>
|
|
207
|
+
</table><table class="w666">
|
|
208
|
+
<tr class="ct h13">
|
|
209
|
+
<td class="w113">(-) Desconto / Abatimentos</td>
|
|
210
|
+
<td class="w112">(-) Outras deduções</td>
|
|
211
|
+
<td class="w113">(+) Mora / Multa</td>
|
|
212
|
+
<td class="w113">(+) Outros acréscimos</td>
|
|
213
|
+
<td class="w180">(=) Valor cobrado</td>
|
|
214
|
+
</tr>
|
|
215
|
+
<tr class="cp h12 rBb Ab">
|
|
216
|
+
<td></td>
|
|
217
|
+
<td></td>
|
|
218
|
+
<td></td>
|
|
219
|
+
<td></td>
|
|
220
|
+
<td class="Ar"> </td>
|
|
221
|
+
</tr>
|
|
222
|
+
</table><table class="w666">
|
|
223
|
+
<tr class="ct h13">
|
|
224
|
+
<td class="w659">Pagador</td>
|
|
225
|
+
</tr>
|
|
226
|
+
<tr class="cp h12">
|
|
227
|
+
<td>Nome do pagador<br/>CPF: 000.000.000-00<script>alert(1)</script></td>
|
|
228
|
+
</tr>
|
|
229
|
+
<tr class="cp h12 rBb">
|
|
230
|
+
<td></td>
|
|
231
|
+
</tr>
|
|
232
|
+
</table><table class="w666">
|
|
233
|
+
<tr class="ctN h13">
|
|
234
|
+
<td class="pL6">Instruções</td>
|
|
235
|
+
<td class="w180 Ar">Autenticação mecânica</td>
|
|
236
|
+
</tr>
|
|
237
|
+
<tr class="cpN h12">
|
|
238
|
+
<td class="pL6">Sr. Caixa, aceitar o pagamento e não cobrar juros após o vencimento.<script>alert(1)</script></td>
|
|
239
|
+
<td class="pL6 Ar"></td>
|
|
240
|
+
</tr>
|
|
241
|
+
</table><table class="ctN w666">
|
|
242
|
+
<tr class="h13"><td /></tr>
|
|
243
|
+
<tr class="h13"><td /></tr>
|
|
244
|
+
<tr><td class="Ar">Corte na linha pontilhada</td></tr>
|
|
245
|
+
<tr><td class="cut" /></tr>
|
|
246
|
+
<tr class="h13"><td /></tr>
|
|
247
|
+
<tr class="h13"><td /></tr>
|
|
248
|
+
</table><table class="w666">
|
|
249
|
+
<tr class="BHead">
|
|
250
|
+
<td class="imgLogo Al"><img src="${bankLogo}" /></td>
|
|
251
|
+
<td class="barra"></td>
|
|
252
|
+
<td class="w72 Ab bc Ac">${bankNumber}</td>
|
|
253
|
+
<td class="barra"></td>
|
|
254
|
+
<td class="w500 Ar Ab ld" id="linha-digitavel-2">${linhaDigitavel}</td>
|
|
255
|
+
</tr>
|
|
256
|
+
</table><table class="w666">
|
|
257
|
+
<tr class="ct h13">
|
|
258
|
+
<td class="w472">Local de pagamento</td>
|
|
259
|
+
<td class="w180">Vencimento</td>
|
|
260
|
+
</tr>
|
|
261
|
+
<tr class="cp h12 rBb">
|
|
262
|
+
<td>PAGÁVEL EM QUALQUER BANCO ATÉ O VENCIMENTO.</td>
|
|
263
|
+
<td class="Ar">05/01/2017</td>
|
|
264
|
+
</tr>
|
|
265
|
+
</table><table class="w666">
|
|
266
|
+
<tr class="ct h13">
|
|
267
|
+
<td class="w472">Beneficiário</td>
|
|
268
|
+
<td class="w180">Agência / Código beneficiário</td>
|
|
269
|
+
</tr>
|
|
270
|
+
<tr class="cp h12 rBb">
|
|
271
|
+
<td>Pagar.me Pagamentos S/A</td>
|
|
272
|
+
<td class="Ar">1229/469</td>
|
|
273
|
+
</tr>
|
|
274
|
+
</table><table class="w666">
|
|
275
|
+
<tr class="ct h13">
|
|
276
|
+
<td class="w113">Data do documento</td>
|
|
277
|
+
<td class="w163">N<u>o</u> documento</td>
|
|
278
|
+
<td class="w62">Espécie doc.</td>
|
|
279
|
+
<td class="w34">Aceite</td>
|
|
280
|
+
<td class="w72">Data processamento</td>
|
|
281
|
+
<td class="w180">Carteira / Nosso número</td>
|
|
282
|
+
</tr>
|
|
283
|
+
<tr class="cp h12 rBb">
|
|
284
|
+
<td>01/01/2017</td>
|
|
285
|
+
<td>000000001</td>
|
|
286
|
+
<td>DM</td>
|
|
287
|
+
<td>N</td>
|
|
288
|
+
<td>01/01/2017</td>
|
|
289
|
+
<td class="Ar">000000000006-0</td>
|
|
290
|
+
</tr>
|
|
291
|
+
</table><table class="w666">
|
|
292
|
+
<tr class="ct h13">
|
|
293
|
+
<td class="w113">Uso do banco</td>
|
|
294
|
+
<td class="w83">Carteira</td>
|
|
295
|
+
<td class="w53">Espécie</td>
|
|
296
|
+
<td class="w123">Quantidade</td>
|
|
297
|
+
<td class="w72">(x) Valor</td>
|
|
298
|
+
<td class="w180">(=) Valor documento</td>
|
|
299
|
+
</tr>
|
|
300
|
+
<tr class="cp h12 rBb">
|
|
301
|
+
<td> </td>
|
|
302
|
+
<td class="Al">25</td>
|
|
303
|
+
<td class="Al">R$</td>
|
|
304
|
+
<td></td>
|
|
305
|
+
<td></td>
|
|
306
|
+
<td class="Ar">R$ 15,00</td>
|
|
307
|
+
</tr>
|
|
308
|
+
</table><table class="w666">
|
|
309
|
+
<tr class="rc6">
|
|
310
|
+
<td class="w478">
|
|
311
|
+
<div class="ctN pL10">Instruções (Texto de responsabilidade do beneficiário)</div>
|
|
312
|
+
<div class="cpN pL10">Sr. Caixa, aceitar o pagamento e não cobrar juros após o vencimento.<script>alert(1)</script></div>
|
|
313
|
+
</td>
|
|
314
|
+
<td class="w186">
|
|
315
|
+
<div class="t">(-) Desconto / Abatimentos</div>
|
|
316
|
+
<div class="c BB"></div>
|
|
317
|
+
<div class="t">(-) Outras deduções</div>
|
|
318
|
+
<div class="c BB"></div>
|
|
319
|
+
<div class="t">(+) Mora / Multa</div>
|
|
320
|
+
<div class="c BB"></div>
|
|
321
|
+
<div class="t">(+) Outros acréscimos</div>
|
|
322
|
+
<div class="c BB"></div>
|
|
323
|
+
<div class="t">(=) Valor cobrado</div>
|
|
324
|
+
<div class="c"></div>
|
|
325
|
+
</td>
|
|
326
|
+
</tr>
|
|
327
|
+
</table><table class="w666">
|
|
328
|
+
<tr class="ct h13">
|
|
329
|
+
<td class="w659">Pagador</td>
|
|
330
|
+
</tr>
|
|
331
|
+
<tr class="cp h12">
|
|
332
|
+
<td class="At">Nome do pagador<br/>CPF: 000.000.000-00<script>alert(1)</script></td>
|
|
333
|
+
</tr>
|
|
334
|
+
</table><table class="w666">
|
|
335
|
+
<tr class="rBb">
|
|
336
|
+
<td class="w478 BL">
|
|
337
|
+
<div class="cpN pL6"></div>
|
|
338
|
+
</td>
|
|
339
|
+
<td class="Ab BL">
|
|
340
|
+
<div class="ctN pL6">Cód. baixa</div>
|
|
341
|
+
</td>
|
|
342
|
+
</tr>
|
|
343
|
+
</table><table class="w666 ctN">
|
|
344
|
+
<tr>
|
|
345
|
+
<td class="pL6 w409">Sacador / Avalista</td>
|
|
346
|
+
<td class="w250 Ar">Autenticação mecânica - <b class="cpN">Ficha de Compensação</b></td>
|
|
347
|
+
</tr>
|
|
348
|
+
<tr class="h13"><td colspan="3" /></tr>
|
|
349
|
+
</table><table class="w666">
|
|
350
|
+
<tr>
|
|
351
|
+
<td class="EcdBar Al pL10">
|
|
352
|
+
|
|
353
|
+
${barcode ? `<div class="barcode">${barcode}</div>` : '<div class="barcode"/>'}
|
|
354
|
+
|
|
355
|
+
</td>
|
|
356
|
+
</tr>
|
|
357
|
+
</table><table class="ctN w666">
|
|
358
|
+
<tr class="h13"><td /></tr>
|
|
359
|
+
<tr><td class="Ar">Corte na linha pontilhada</td></tr>
|
|
360
|
+
<tr><td class="cut" /></tr>
|
|
361
|
+
</table>
|
|
362
|
+
</div>
|
|
363
|
+
<script>
|
|
364
|
+
(function () {
|
|
365
|
+
var onLoadDocumentElement
|
|
366
|
+
var onLoadDocumentCopy
|
|
367
|
+
|
|
368
|
+
onDOMReady(function () {
|
|
369
|
+
onLoadDocumentCopy = document.body.children[0].outerHTML
|
|
370
|
+
onLoadDocumentElement = hashString(onLoadDocumentCopy);
|
|
371
|
+
|
|
372
|
+
onDOMChange(function () {
|
|
373
|
+
document.body.innerHTML = onLoadDocumentCopy;
|
|
374
|
+
})
|
|
375
|
+
})
|
|
376
|
+
|
|
377
|
+
function onDOMReady(callback) {
|
|
378
|
+
if (document.readyState === 'complete') return callback();
|
|
379
|
+
|
|
380
|
+
setTimeout(function () {
|
|
381
|
+
onDOMReady(callback);
|
|
382
|
+
}, 5);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
function onDOMChange (callback) {
|
|
386
|
+
var childContent = document.body.children[0];
|
|
387
|
+
|
|
388
|
+
if (childContent) {
|
|
389
|
+
var currentDocumentElement = hashString(childContent.outerHTML);
|
|
390
|
+
|
|
391
|
+
if (onLoadDocumentElement !== currentDocumentElement) {
|
|
392
|
+
callback();
|
|
393
|
+
}
|
|
394
|
+
} else {
|
|
395
|
+
callback();
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
setTimeout(function () {
|
|
399
|
+
onDOMChange(callback);
|
|
400
|
+
}, 150);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
function hashString (value) {
|
|
404
|
+
var hash = 0;
|
|
405
|
+
|
|
406
|
+
if (value.length === 0) return hash;
|
|
407
|
+
|
|
408
|
+
for (i = 0; i < value.length; i++) {
|
|
409
|
+
char = value.charCodeAt(i);
|
|
410
|
+
hash = ((hash<<5)-hash)+char;
|
|
411
|
+
hash = hash & hash // Convert to 32bit integer
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
return hash;
|
|
415
|
+
}
|
|
416
|
+
})()
|
|
417
|
+
</script>
|
|
418
|
+
</body>
|
|
419
|
+
</html>
|
|
420
|
+
`
|