qrcode-matrix 0.1.1 → 1.0.0-beta.2

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.
@@ -1,1890 +0,0 @@
1
- /*!
2
- * qrcode-matrix v0.1.1
3
- * Homepage https://github.com/cnwhy/QRCode-matrix
4
- * License MIT
5
- */
6
-
7
- (function (global, factory) {
8
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
9
- typeof define === 'function' && define.amd ? define(factory) :
10
- (global.qrcodeMatrix = factory());
11
- }(this, (function () { 'use strict';
12
-
13
- var QR_MODE = 1;
14
-
15
- var qrNumber = function () {
16
-
17
- var strToNum = function (s) {
18
- for (var i = 0; i < s.length; i++) {
19
- var c = s.charAt(i);
20
- if (c < '0' || c > '9') {
21
- throw 'illegal char :' + c;
22
- }
23
- }
24
- return +s;
25
- };
26
-
27
- return function (data) {
28
- var _data = data;
29
- var _this = {};
30
- _this.getMode = function () {
31
- return QR_MODE;
32
- };
33
- _this.getLength = function (buffer) {
34
- return _data.length;
35
- };
36
- _this.write = function (buffer) {
37
- var data = _data;
38
- var i = 0;
39
- while (i + 2 < data.length) {
40
- buffer.put(strToNum(data.substring(i, i + 3)), 10);
41
- i += 3;
42
- }
43
- if (i < data.length) {
44
- if (data.length - i == 1) {
45
- buffer.put(strToNum(data.substring(i, i + 1)), 4);
46
- } else if (data.length - i == 2) {
47
- buffer.put(strToNum(data.substring(i, i + 2)), 7);
48
- }
49
- }
50
- };
51
- return _this;
52
- }
53
- }();
54
-
55
- var Numeric = qrNumber;
56
-
57
- var QR_MODE$1 = 1 << 1;
58
- var qrAlphaNum = function () {
59
- var Code0 = '0'.charCodeAt(0),
60
- Code9 = '9'.charCodeAt(0),
61
- CodeA = 'A'.charCodeAt(0),
62
- CodeZ = 'Z'.charCodeAt(0);
63
-
64
- var getCode = function (s) {
65
- var c = s.charCodeAt(0);
66
- // 0 - 9
67
- if (Code0 <= c && c <= Code9) {
68
- return c - Code0;
69
- // A - Z
70
- } else if (CodeA <= c && c <= CodeZ) {
71
- return c - CodeA + 10;
72
- } else {
73
- var other = [' ', '$', '%', '*', '+', '-', '.', '/', ':'];
74
- var i = other.indexOf(s);
75
- if (~i) {
76
- return i + 36;
77
- } else {
78
- throw 'illegal char :' + s;
79
- }
80
- }
81
- };
82
-
83
- return function (data) {
84
- var _data = data;
85
- var _this = {};
86
-
87
- _this.getMode = function () {
88
- return QR_MODE$1;
89
- };
90
-
91
- _this.getLength = function (buffer) {
92
- return _data.length;
93
- };
94
-
95
- _this.write = function (buffer) {
96
- var s = _data;
97
- var i = 0;
98
- while (i + 1 < s.length) {
99
- buffer.put(getCode(s.charAt(i)) * 45 + getCode(s.charAt(i + 1)), 11);
100
- i += 2;
101
- }
102
- if (i < s.length) {
103
- buffer.put(getCode(s.charAt(i)), 6);
104
- }
105
- };
106
- return _this;
107
- };
108
-
109
- }();
110
-
111
- var Alphanumeric = qrAlphaNum;
112
-
113
- function toUTF8Array(str) {
114
- var utf8 = [];
115
- for (var i = 0; i < str.length; i++) {
116
- var charcode = str.charCodeAt(i);
117
- if (charcode < 0x80) utf8.push(charcode);
118
- else if (charcode < 0x800) {
119
- utf8.push(0xc0 | (charcode >> 6),
120
- 0x80 | (charcode & 0x3f));
121
- } else if (charcode < 0xd800 || charcode >= 0xe000) {
122
- utf8.push(0xe0 | (charcode >> 12),
123
- 0x80 | ((charcode >> 6) & 0x3f),
124
- 0x80 | (charcode & 0x3f));
125
- }
126
- // surrogate pair
127
- else {
128
- i++;
129
- // UTF-16 encodes 0x10000-0x10FFFF by
130
- // subtracting 0x10000 and splitting the
131
- // 20 bits of 0x0-0xFFFFF into two halves
132
- charcode = 0x10000 + (((charcode & 0x3ff) << 10) |
133
- (str.charCodeAt(i) & 0x3ff));
134
- utf8.push(0xf0 | (charcode >> 18),
135
- 0x80 | ((charcode >> 12) & 0x3f),
136
- 0x80 | ((charcode >> 6) & 0x3f),
137
- 0x80 | (charcode & 0x3f));
138
- }
139
- }
140
- return utf8;
141
- }
142
-
143
- var utf8 = toUTF8Array;
144
-
145
- var QR_MODE$2 = 1 << 2;
146
- var qr8BitByte = (function (stringToBytes) {
147
- stringToBytes = typeof stringToBytes == 'function' ? stringToBytes : utf8;
148
- return function (data) {
149
- var _data = data + '';
150
- var _bytes = _data == data ? stringToBytes(_data) : data;
151
- var _this = {};
152
- _bytes = _bytes instanceof Array ? _bytes : [];
153
-
154
- _this.getMode = function () {
155
- return QR_MODE$2;
156
- };
157
-
158
- _this.getLength = function (buffer) {
159
- return _bytes.length;
160
- };
161
-
162
- _this.write = function (buffer) {
163
- for (var i = 0; i < _bytes.length; i++) {
164
- buffer.put(_bytes[i], 8);
165
- }
166
- };
167
- return _this;
168
- }
169
- });
170
-
171
- var Byte = qr8BitByte;
172
-
173
- var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
174
-
175
- function createCommonjsModule(fn, module) {
176
- return module = { exports: {} }, fn(module, module.exports), module.exports;
177
- }
178
-
179
- var gbk = createCommonjsModule(function (module, exports) {
180
- /*!
181
- * gbk.js v0.2.3
182
- * Homepage https://github.com/cnwhy/GBK.js
183
- * License MIT
184
- */
185
-
186
- (function (global, factory) {
187
- module.exports = factory();
188
- }(commonjsGlobal, (function () {
189
- var GBK = function (gbk_us) {
190
- var arr_index = 0x8140; //33088;
191
- var gbk = {
192
- decode: function (arr) {
193
- var str = "";
194
- for (var n = 0, max = arr.length; n < max; n++) {
195
- var Code = arr[n];
196
- if (Code & 0x80) {
197
- Code = gbk_us[(Code << 8 | arr[++n]) - arr_index];
198
- }
199
- str += String.fromCharCode(Code || 63);
200
- }
201
- return str;
202
- },
203
- encode: function (str) {
204
- str += '';
205
- var gbk = [];
206
- var wh = '?'.charCodeAt(0); //gbk中没有的字符的替换符
207
- for (var i = 0; i < str.length; i++) {
208
- var charcode = str.charCodeAt(i);
209
- if (charcode < 0x80) gbk.push(charcode);
210
- else {
211
- var gcode = gbk_us.indexOf(charcode);
212
- if (~gcode) {
213
- gcode += arr_index;
214
- gbk.push(0xFF & (gcode >> 8), 0xFF & gcode);
215
- } else {
216
- gbk.push(wh);
217
- }
218
- }
219
- }
220
- return gbk;
221
- }
222
- };
223
- return gbk;
224
- };
225
- var gbk = GBK;
226
-
227
- var URI = function(GBK){
228
- var passChars = '!\'()*-._~';
229
- var otherPassChars = '#$&+,/:;=?@';
230
- function getModue(passChars){
231
- var passBits = passChars.split('').sort();
232
- var isPass = function (s){
233
- return ~passChars.indexOf(s) || /[0-9a-zA-Z]/.test(s)
234
- };
235
- return {
236
- encode:function(str){
237
- return (str+'').replace(/./g,function(v){
238
- if(isPass(v)) return v;
239
- var bitArr = GBK.encode(v);
240
- for(var i=0; i<bitArr.length; i++){
241
- bitArr[i] = '%' + ('0'+bitArr[i].toString(16)).substr(-2).toUpperCase();
242
- }
243
- return bitArr.join('');
244
- })
245
- },
246
- decode:function(enstr){
247
- return enstr.replace(/(%[\dA-Za-z]{2})+/g,function(a,b,c){
248
- var str = '';
249
- var arr = a.match(/.../g);
250
- for(var i=0; i < arr.length; i++){
251
- var hex = arr[i];
252
- var code = parseInt(hex.substr(1),16);
253
- if(code & 0x80){
254
- str += GBK.decode([code,parseInt(arr[++i].substr(1),16)]);
255
- }else{
256
- var char = String.fromCharCode(code);
257
- if(isPass(char)){
258
- str += hex;
259
- }else{
260
- str += char;
261
- }
262
- }
263
- }
264
- return str;
265
- })
266
- }
267
- }
268
- }
269
-
270
- var URIComponent = getModue(passChars);
271
- var URI = getModue(passChars + otherPassChars);
272
-
273
- return {
274
- encodeURI:URI.encode,
275
- decodeURI:URI.decode,
276
- encodeURIComponent:URIComponent.encode,
277
- decodeURIComponent:URIComponent.decode
278
- }
279
- };
280
-
281
- var src = function (gbk_us){
282
- var gbk$$1 = gbk(gbk_us);
283
- gbk$$1.URI = URI(gbk$$1);
284
- return gbk$$1;
285
- };
286
-
287
- // 多进制转换后的数字还原函数 构建时会替换占位符
288
- var Fn_Hex_decode = function decode(){
289
- var n = 0, str = arguments[0];
290
- for (var i = 0,w = str.length; i < w; i++) {
291
- var code = str.charCodeAt(i);
292
- if(code < 38 || code > 126) return NaN;
293
- n += (code - 38) * Math.pow(89, w - i - 1);
294
- }
295
- return n;
296
- };
297
-
298
- // 解压Unicode编码字符串函数 构建时会替换占位符
299
- var Fn_unzip = function unZip() {
300
- return arguments[0].replace(/\x23(\d+)\x24/g, function (a, b) {
301
- return Array(+b + 4).join("#");
302
- })
303
- .replace(/[\x26-\x7e]\x25[\x26-\x7e]/g,function(a){
304
- var b = a.substr(0,1).charCodeAt(0)
305
- ,e = a.substr(2).charCodeAt(0)
306
- ,str = String.fromCharCode(b);
307
- while(b++<e){
308
- str += String.fromCharCode(b);
309
- }
310
- return str;
311
- })
312
- .replace(/\x23/g, "###")
313
- .replace(/([\x26-\x7e]{2})\x21([\x26-\x7e\x23]+)(?:\x20|$)/g, function (all, hd, dt) {
314
- return dt.replace(/./g, function (a) {
315
- if (a != "#") {
316
- return hd + a;
317
- } else {
318
- return a;
319
- }
320
- });
321
- })
322
- .match(/.../g);
323
- };
324
-
325
- function gbkArray(gbkArr) {
326
- var data = [];
327
- for (var i = 0x81, k = 0; i <= 0xfe; i++) {
328
- if (data.length > 0) {
329
- data.length += 0x40 + 1;
330
- }
331
- for (var j = 0x40; j <= 0xfe; j++) {
332
- if (
333
- (j == 0x7f) ||
334
- ((0xa1 <= i && i <= 0xa7) && j <= 0xa0) ||
335
- ((0xaa <= i && i <= 0xaf) && j >= 0xa1) ||
336
- (0xf8 <= i && j >= 0xa1)
337
- ) {
338
- data.push(undefined);
339
- continue;
340
- }
341
- var hex = gbkArr[k++];
342
- var key = Fn_Hex_decode(hex);
343
- data.push(key ? key : undefined);
344
- }
345
- }
346
- return data;
347
- }
348
- var GBK$1 = function () {
349
- // 生成按GBk编码顺数排列的编码映射数组 构建时会替换 zipData 的占位符
350
- var gbk_us = gbkArray(Fn_unzip("(T!HJ%LUX]e%gilotuwy{} (U!)-%/137>BDGHO%RTUW%\\_a%jl%rtw} (V!*+-0%27>C%EHJ%MP%R\\`cdfn%ptvz{} (W!()*,/3%579;=%CFGM%QWX\\^cdg%ilnprtvy%} (X!&')%.468CDHJLMOPSTWY%\\_b%dg%ilnprtuwxz%|~ (Y!'(*+-469%=?%GI%KO%RT%V[%_bdikmnptuy{}~ (Z!&')+%-/%;>@ACE%GKMNPR%TW[_%ikmo%rt%vy%{} ([!'(%+-%024%;=%BD%LO%QSTX%[]^`%ce%y{} (\\!()+%/1%7:%LN%SU%WY%cf%im%prt%xz%~ (]!&'%*-%/1%68%EG%cgloqs%uwx|%~ (^!')%-/02356;>FJKOPRSVWZ%]_`dfi%kmor%vyz (_!'+%-124%68;=@ACE%MOQRUVX%]_adegjqwx|~ (`!&)*-%/689;%=?%ADFIKLNOVX^%cehilmoq%uwyz|%~ (a!'),%/124%=?AD%HJ%PRSU%[]e%ho%qu%~ (b!()*,%.024%79;%=?A%FH%KM%WY%`c%ei%loq%tvy%| (c!'*+-.1346%8:%<>%GKLOQSUZ%\\_cghjltwy{| (d!(,/1%4679=>@D%JLMOQRTVWZ]`%ce%km%pr%tvy%} (e!+,-/0279%;>?DQW[%]_bdhqu%wy (f!&().47:;>ACEFHIKMP%SU^a%egikm%tx}~ (g!)*,.02%58<>BCGI%MPY[]`%bdeginpuv (h!(*-2%6=>A%CF%KMPRT%WZ\\%`deg%ln%qswxz{} (i!&+-%/1%469;>@AD%HJ%MP%TV%Y[\\abdh%mrsvx~ (j!&,%.0235%7:;>@%FH%PRTVXZ\\_%cf%hjkn%puw%{~ (k!').04578;=?%CFI%NQRTW%^`acdg%ilmo%ru%wz|~ (l!&(*%,.%9=%ACDHIK%OQS%U[%^`%ce%hk%ru%{~ (m!&')%79%CE%KM%PR%^`%hjkmnqxz%~ (n!&(*+./2%478<%>ACG%WYZ\\%^`%cgmnp%txy{} (o!&'%)+,.5%9;<EFHJOQS%UWX[%]`%dj%mp%tw%} (p!&'%)/2469%;=?%AC%KN%TVWZ[]`aefhk%mo%vxz%} (q!&'(,-/024%69%;=?%AC%EG%IK%NPSTV%Z\\%`b%eg%tv%| (r!&'(*+-%/1%57%<>%BE%UWZ\\^%`b%il%ps%ux%~ (s!&)%:<%?A%CE%OQ%SU%bd%ilnpqstvwy%~ (t!&')+,.%246%9=>ACDF%ILNRVXY[\\ac%fiklprsvxy (u!&(%,.013%?BDG%IK%MRVXY[%^abeg%jl%ostyz}~ (v!'(%,.013%9;%=@%CIJMOR%VXZ[]%_a%lnp%rtv~ (w!&(%+-/%24%689<=?A%CE%KNPR%VX%Z\\%`bcf%oq%tv%|~ (x!&'(*+-%5:;=%@B%SU%[^%km%svxy{%~ (y!&(),%1346%:<>@B%DF%HKMNPQSU%Y[%qs%~ (z!()%ACEFH%OQ%_bfnpqwx{}~ ({!&)+-%023569=ADEG%IKMV^%`c%fhinq%swxz (|!&'%)+%-/2%:>@ADEG%KMO%U[\\^`acefi%lnpquwy|%~ (}!&(+-%02%578:%<HIKLQRW%Y[%]_%bdgil%ruw%} (~!'(%*,/%35%7:;>?AI%MP%TVZ%\\^`be%hjlnoq%vx%} )&!&'%+-%356:<>?ABD%MO%TWX[%`b%fhj%mopr%vx{}~ )'!&)%-/%69%@BCG%QSTVX%bdghj%mo%{}~ )(!&'%9;%=?%WY%eg%mo%{} ))!'(+,2458=>@%DGHLOQ%SUVZ[_f%mp%twxz%~ )*!()-%025%:<%BE%IKLNOR%`dfhmp%rtwx{%} )+!(.137%:>%BD%HJP%SU%^a%fjkm%pr%} ),!&(%02568%:B%DFI%KMOQSVWY%[^%aehikmo%uxz%|~ )-!&'%358=%@B%DGIKLORSVX%Z\\^a%cgjq%suwxz~ ).!&(%+-%2467:%?AC%FI%MRSUVY^%`e%gijmnpqstwz{}~ )/!&()+,.9%;=>BCEIJLPQT%V^%`b%fh%loprv%|~ )0!'(*,-/%1457%:>?GJKMNPWY%[^%acdg%jlnp%ruwz{}~ )1!')*.035%79:=%DG%IL%PR%TVWY[^a%ejqruwx{%~ )2!&)%,.1%37%;=%@B%EHILO%QS%eg%nprtvwy%{}~ )3!&'%*,%/1%47%=?%BDF%XZ[]%ac%jl%txy{%~ )4!&'%+-%24%68%<>A%EHJ%Z\\%ik%su%z|~ )5!/058%:<?B%EGIK%NQRT%X^`%bfklq%suvx%~ )6!'(+4578:;=>@D%FH%KN%SW\\_%afijlmp%su%wy%{} )7!(*+-59;?GHJKNTUZ\\_b%ejm%pt%wyz|%~ )8!&(%*-78:=%?ABD%ILMO%RUXY[b%eg%nqu%wy{%} )9!'(*%-014%79;%>CEIK%MOQ%WY\\^cgijmnqsuw%{} ):!&')%+02%46%<>AC%GJKM%PRTVX%[]bce%ilmpqt%y|~ );!()%+-%/14%9;%?ABDFHIOQ%WY[%]_%ce%lnp%rt%} )<!()%.035%=@ADEG%JL%PR%UWX\\^%acfhj%lnpqs%y|~ )=!'(%*-%13%579;%SU%\\^%eg%km%xz%~ )>!'(+%.2578;%?ABEFHIKM%ORSUWZ%\\_`b%eh%jlnpqs%~ )?!&'(*%,/%146%8:<?@BDEHJLNPS%Z\\]`%bdi%lorsu%wz%~ )@!&'(*,-34;%>ABD%HJMNP%RTVY%[_%ac%egj%mor%uwy{| )A!'(%+-/024%:=>@AHIK%NPRSUWY%]a%cehik%mo%qsuvx%{}~ )B!&')%,/%35%=@%DF%JL%OQ%TV%oqu%|~ )C!&(%-/34689;?%EJLMO%QTV%XZ\\^%ceglnpqt%wyz|} )D!&)*,/0279:<%@BG%IKLPQSVY[]%`beghjkmoq%tv%y{~ )E!'+%-0258:=>@E%LNQ%Za%cgkmopr%tvwyz~ )F!()%/14%79@CEGHK%OQ%SU%[^%dg%imnrz~ )G!'),0%9DF%MOR%Z\\^a%hj%ln%pr%{}~ )H!&*%-/2357%@BD%IKMO%RTUWXZ\\%`bce%nps%uw%y|~ )I!&'(*%,.%2479;%FI%KM%TVWY%[]%`b%dfhik%{}~ )J!'(*+.01346%9;<>?A%EIJL%NPRTY%[]%befhil%uxy{}~ )K!&()+,.%02%68%?ACEG%IK%PR%TW%bd%gi%rtv%~ )L!&(%36%;=?%DFH%KMO%QS%Y\\%`bce%ln%twy%} )M!&'(*%46%<>?A%CE%GI%QSV%Z\\%ce%lnq%~ )N!&'%~ )O!&'%178:%CE%HJM%OQ%TVWZ\\]_%jl%sz{}~ )P!&'%136%9>AEG%JMNP%RU%Y[%bd%koq%wy|} )Q!&'%*,.018:<%@B%IL%NP%RTV%XZ%\\^%dh%lnrw|%~ )R!'*,2%48:=>@%CEFJ%LOR%VX%Z]_%aijl%nr%vxz|~ )S!&(%*-.2589;<?@C%FHJ%LNPVZ]^b%ehn%qt%vy{%} )T!&'-%/1249;<>ABGINTUWXZ[]%_bd%fh%kmqrt%y{}~ )U!()+,02%46;<>@EHLQ%TWY[]^`acdg%il%oqru%wy%} )V!&')*-.02359%=?EHOPSTVWYZ\\%ad%fk%mp%su%xz}~ )W!&),-/1%479:<>%@BDG%NP%SUY\\]_bcefhilp%rtvxz{} )X!&'(*,%36%=@%CFHJKM%OQ%[]^`%nq%suxy{%~ )Y!&)%/1%35689;<>@AC%FHKMPQTV%X[%^`%bd%fhjnpqs%u{ )Z!&)%24%79%@B%DFGI%MO%QU%^`%bd%gkmoqstv%|~ )[!&'%+.%024%=?%ACE%GI%KM%RU%WY[%]_ac%ik%mpqu%~ )\\!&'(*%-/%35%?ABDEG%LNP%UW%]`%jlo%z}~ )]!&'%DF%MP%VX%hj%ln%~ )^!&()+%8:%EIL%ORT%VX\\%_a%cf%hj%lnrsuvy%~ )_!&'%,246%8<@AF%IKM%Y\\^%`b%eglpr%xz|%~ )`!'(%14%8:;=@D%NP%W[%^`%mo%rtvx%~ )a!&'%+-/%359%=?%AD%GIKLN%SU%Y[%^`%ce%gj%nq%wy%{}~ )b!&'%)+-%/1%9;%DF%JM%VX%[]_%df%oq%|~ )c!&'%:<%EGIK%MP%RXZ\\^%dg%il%oq%suvxz|~ )d!()*-/%25689;%=@%BGHJ%NQSUVX%ce%psv%xz )e!&'%,1%35%8;=?%BDFG 'W!,-. &(+&.'&-~&'u'W!/1 ')>.<V')!@PBCFG 'W!@A4%;BC<= &'~&(!Kk '/!J;< '.!~| '/!>= '.u'/!K. '0`'/!94 '1t'0T'/!?Bu`\\Q1t '0!)* '/!xy2IH ';!*( &'}')!\\] '+{.;U&'q.>!&' ')Z&'t',5':!GF '9!eiha`;:ML ')e'-!XVWY 'W?'-!67%?#3$ '6!-.%@ '5!rs%~ '6!&'%, '5!^_%g## ']!67%?## '-!&'%1## .;!RST .>+.;!VW%~ .<!&'%U .>)'W!mn%~ 'X!&'%f#8$t%~ 'Y!&'%p#5$ &0!=>%MO%U#5$]%mo%u#4$ .9!89<=BC@AD%G##>?:;4#67#6$ &1!cd%hTi%~ &2!&'%)#12$*%/K0%I#10$ &.!()7 ')!=?O_ '+}',('-!\\]%_ '/!)37fz{ '0z'8!CD%ft%~ '9!&'%)-%/VW|%~ ':!&J '0P'W!>IJ#8$ &(!uU &+7&(T&).&(]&)6&(\\&)F&(a&+9&(`&)h&(g&+;&(f&*-&(n&+=&(m&+!?ACE &(!p^ &,a-Qc&)!_c -Qd&,q#1$'Z!&'%J#18$ 'W!MN%U '^`'a!@AN%PSv 'b!'*+. .93.>!(*# ',@']G#'):#0$'Yv'X!no 'Y!wx 'W2'X!pq .9!LM%UW%Z\\%ik%n -R!*+%6 'W3#10$'7!LM%~ '8!&'%>#12$ )e!HIKN%SVWabei%lnp%uw%y{%~ )f!'+%-23679%;@BCEFHIM%PS%_abdf%ik%rt%~ )g!(*%79%=?@BDFGIJL%OQ%TV%XZ[]%bdfgkn%prsv%y{}~ )h!&'(,-/3%9;%>@B%EGIK%MO%RT%cehil%or%z}~ )i!&'%)+,/13579:?%CE%HJ%\\^`eh%tvwy%} )j!'(%,.13%57%9;<>@%JLN%UY%hj%~ )k!&')%1357;=%CF%IKN%TV%Y[%bdfhj%mqstv%z|} )l!'+1369:<>%ACDFGJM%PR%UZ%ad%fh%npr%tw%{}~ )m!&()+%.0%2479<?@BFJ%NQZ[^_c%ejopr%uw{}~ )n!'(*%,047%:=>@%CEFHIMOQ%TVX%Z\\%_aeg%ilnrswyz|} )o!()+%-/346%=@%EGI%MOQ%TV%\\^%`b%iklnq%suw{|~ )p!&()+-.013%<>%FHILN%WYZ\\ (iC*r5(pM)89(gy(h[(gk)p*)o>*A;)s|*9E)ui)cO*s5*ux)R/({@(Z*)7s)B.(~d*4~)F{*42)@K)pg(_l)>Q)a|*2'*Jb(\\0(u2)4?)\\@*9t)8])5n(eJ(f+)|s(^7)mH))<)7>*Yr*ua)6M*2O(o@*t|*0J)cV)oo)E[)op);L(XR*W~)7F)z6)?3)hN);2)66*8L*xa)Dd)cf)61)76(Wo)k9(cY(a_*.d*b,))v)G`)Jk*6R*.k)HS)vH*E'*oR([d*U/*:L*4b(bm*L>(a&)p!]`bdelnrsu%wy%} )q!&'%-035%7:;=?@BCEFJLN%X[%^ac%egj%lnp%ty{}~ )r!&)+%-/%69%@C *B**t=(Yf(qR*{F({T)6!th )BK*V+++A)b})DT)um)12(c!`& *^r*4P*Wv*mT(Z=)e4(t-)1k)`B*K0(tz*:])Cj)}<)&|*/8)l*)TJ*[[*`!0t +3')Q4*cF)}()-`)v**@.*A<)Q!596 ))I)*v)nD*q<)>X),G).P*_0(s@*7;*a^*rQ*v?*_J*/W*X,)5](YH(e5(cm*_!9:< *a,)F:)-N*6j*JF+,1)3Y(`E)nu)-P)?.)\\_)Z'({u);N(^!A| )EP(T_)yA*{Q)_5)r!DE%GKNPQT%_a%ch%jm%rvwz%~ )s!&'%,/12469;%=?@BD%HJLN%Z\\%df%hk%or )mi)*e)gu*=C)<Z)7R*mh)T7(ci(b+):n*mu)~O(Wj))c*8V*5A*6\\)Wn)Sx*~=)8f(ck(hL*JC(pj(TS))K)Ow*'H*bn)/H)=:)f/*KF)D5)5i*W{)rS*Zw*eB)-M*=?*@y*z>(dx*E0)PD)1!mh )^Z*:;*8Q(Vg)SU*Bu)<z*)0)Ks)C7*;^(dK)}j(Y0(^X)UG(}G*[b):1(e&*;!AK )Eq)v7);C(|=(~@))6*TK)70)F'*V,):_)9r*G2*{`*T{*/a*nL(V;*q_*y+)@U)f))s!tvx}~ )t!&')*,.%18%=?@C%EHJNPSU%WY]_`cdf%hjkrtv%y{}~ )u!&')+-/04%8:%EK%RT%WY%_ (nv(|{)*'*p'([V*3}(d8)>Y)lB(i*(ZQ*Y,)6G*mQ)C[(ky)[T))*(f9)^m*^P)62)<Q)9[)-_)[n*bz*7\\*_A(|v)AX).|)S7*r>*Y(*JJ)<>)yh(pX)Lv)5,(fL(UE)z*)1i)[j*T>)6B*`V*~U)y\\(e`)n?)7k(c()Rg*_p),X*~:*2q+3k(Xj(}?*Xd*1T)?G)_?(]j(^~*D_)&Z({W)7'*d@)lq*ZZ)z?)2()~4(V[*/9)rl(TW*7f(`7(_m)M5(d^*[|*n^*sl)YY*rZ)J))u!`abdfgklnp%ruyz|~ )v!')+%28%;=%@BCE%GI%KO%RT%VY%[]%jl%np%tvxy{|~ )w!&'%*,%.0%6 )tu(\\&)se):o*N`(t*):B)(~){E)Ie(W[*8Y(j8(Tx)mR){])*!Qy *q>(`5(f=)^e)9.*n~(oe)@n)Ig*d[(hY)W=*.I*IY)5O*/1)mY*;=)vD*si*_/)2o)kM*T1)Ov(`T*XP)O3*3G*>{(n-(bn(Vb(Ta(_D*(G*d_*&i(YL*[t*&C){b);m)&g(\\**51)nL*(i)W6*1o)D6(zh(|V)vN)<[):r)9b)8<*ns);3*_O)}h)nt)5o(tM(fJ)P2([z)5P))n)P?(Vw*X7*Ji)-i*`f)w!78%<>%GI%MO%]_%cgil%oqt%|~ )x!&)*2457:%=?A%GJL%PSTW%Z\\%_a%c )/R*2s)7/(U&(cd*b~)9p*4J)@/)R5(X()1n)W+*TB),v*Ef)-7)82(^&*;v)G=(_s)8t*[=(ZB(~G)xH(|Z(`J)zZ)1<*a2)pp).B)-{)ov*[a)^J)om)}])s8(_f*ar(qU(X0)Z3*_{)>G)}/)e0)VG*1n(yJ)6x)++(nl*?3)}@))e),\\*`J*/U*y')9:)Y_)ut)_;(^D*uF(p5)l2(W~)l5)+-)1f(u-)Vc)Px)ue(eY*sr(_!>t )9A(eg*mF*Tg*Ys)cW)u{*G_*_~*Tq(e=)x!de%jl%wy%~ )y!&'%*,%047:<=?@BDF%HKLNOQ%VX%Z]`bdfi%oqrtvwy|} )z!&'%)+.%24578:; (TG)q/(eK*m<*xV+2S*o.({Q*S_(T!hb (^x*>m)47(ai)F>(Xy)0D(_.)Ts(^()6Y)?9*rW*UQ*`O)m|*c*)rJ)Q2)dO)eX*T_(qf)r`*XL)DA*oA*3w)+<)Wk(u_)|\\)s{*o<)Pn)?O*/O(q7(]v*qn(|W(s((f,*[g)>a*x_(my*mP)q>*`y)9?(gq(t!@` (o~*\\N)Cs*ZH*8U(`[)1p(qF*F@)&;+0<(YM*x}*Sv(w@)0O(d:)6?*a.*c/*{T)0B*2B(]d*2i(|r*{J)U-(Uy)z!<>@AC%QS%UWY]_%df%oq%uw%~ ){!&'%57%9;A%DHKMO%RT%VYZ_%adgh *X0(e.*0B)}c(WK(U<*qO)T*)h1*C6))N)lg*21)L')t3*mE*-4(_T)_h(e**_e*:q*X))dt*{B)T0(o-*9z)?[*4.)5[*r((uu(W:*S|*.T)>9*=U*uI(iZ*ye*4)(c9*Ta(e}*4>)+5)Sf*X9*9s*d.(f-)Q{(_y*.Q(oB)`C)S,*(9(tq(W8)/1)2K*(Z(Tv(|_)E7*FD)&C*ne*yU)mS)`&*`Z(^{*/^*Sz(to(_W(X=(f*(tQ)>r*4(({,)69)7,*^z)*4)R&)}:(WJ(Ya)CK){!ijmo%qt%xz%~ )|!&'%+-%79%BDEG%JNOQT%Y[]%ehikm%ortvy%{} )}!&'*%,.0135%7;=A )Uj)VM)x`*K6),T)l()6]*^o(Yx*eW)?I*5!Z| )+2*5{*Xt(a0*MY*XK(t3([\\(Vl*qk)cT*6K*Wx(|**S`*r:(uT*/[(g;(ld(kU*TI)>4)JQ*mL)po)Xz)*a)kn)D+)E])|l*3z*Xv)2F)y>)>]*Xc(^T(`4*mU*/y*3x*.L(~C)Wy)DE*&;)o}+&I*6a*0|*),):}*oQ)z^(fN(h7)O^):`)4}+04*4w)m=(a3*uT*>e)Fo*F&*qP*s1*nF(Tp(ea*.s)Fl*Z-*2K)C2)+0*1H)}!CDFH%KMOQS%XZ\\^abgikmprsuw%~ )~!&'(*+./13578:<%?A%GIJL%NQS%VY%[^%`i%kmnp%rt%{}~ *&&(pL*2u)Gq))-)>6(a`)0F+4-(X}*\\H(^8({b),P))1)Re)7[*Wz(^=*m\\(bf)SM*:M)eC(p,)Di*X-(tE*_-*=*(g@)~H(Wk)Sk(zt(vE+2X(eA*Ee*~r*UB*3~)>@*x^(n6*sd(`H)k2(`j(|?)7l*L.(UC)7:)/\\)H{(^?({O(^l*N<)~\\*{[*08)1o)^'*X/(]n)*n*`S)ix*N>(ni)tz)-6+42*qI*^R+'T*TE)oj)Fu)Eh*Z8*X5(`W*^t)Yr)HN*n_*bs(n9)E(*K~*_X(gs*&!'*%-/%246%:=>@%BD%FI%KM%OQRT%XZ%]_a%hj%lopr%wy%~ *'!&')%.124%@B%GK +&)(zy)Us)R-(V9({j*~Q*d7)3v*b5*v{(f/)VX(|0(_p(j**0=*2&)<i)8^)@:)43)0f)`3)R!^P (tU)DR*8J(sT(l|*Uu)QK*bc(uJ*2M(eT)Ue(fy(j=*<3*=2)Fk)y6(g7(X7(ee)pk*V;*qQ)Sa)V[*Xk*L<+0[*X:(l-+1o)my)-l)eL)0A(hN(V<)LG*J?)0+*^Z(go)_Z*Dm+06)U&({F),U*.<(j)(Y8)fG(f@(dP(ZI(ek(g'(U;)//)ib(su*>u*4e*G])e<*(z)XG*'!LM%UW%{~ *(!&'%*.%8:%@CDFI%KPQSV%Y[%]_`d%hjk ),d*DB(h~)6g(V&)SX)5S*9x(h)(c])fQ)Yi)l8(`,(b~*TA)KF)-n)/2)W8(o2)O4)gi)G-*_i*/T)8s)0|(hv)n5*Um)`>)VF({])*j*;g)2s+1b)v}*G@*'0)oy(_c)1v)`u)A3)*;)0&*Tr)^K)86*^s).H)0;*Eo(ms)Pz)0m)35(cX)1`)AV*X?)yu(WU)_k)RN*Sp*TV*.r*;y)@X(wu+'Z)UM)WA*UL)U7(WT)^F*<s)52)1Q*tQ*X')xI(_n(nz(q+)Cx)lu)z\\)yg)~P*(!opr%tvy{~ *)!&'%+/12458%>@%EG%NPQS%`b%vxz%} **!&'(*%,.%4 *3i*{:*`1)\\M*Sb+/q(v`*/!*J (ef)Df)HY*^{*'V*sc(e')/W)mb)Ry(d)(y2*.A)85(_S*55))9*@7)6C(^L(zs(WI)x>(`\\)18)UJ({!{y *S!^m )@+).W*r;(u`*/(*.D(kP)EC(t_(XU({m(aa*;o*xj*X>)l/*mq(Zw)z[(W2)EB*~H(y*)P5)pj(o=(|t)}N*qC)`w(^H*4-*97(uE*/E*;<)HA)Ex)v4)uS)7M)8r)~;(Yv(a+(_B*;e)KQ*g=*ZC*X1*N;*o/)~h(W1**!56%km%tv%~ *+!&'%= ([<*8P(`k*{D)WZ)Xv)VJ),7(\\s(vP(|d)UB)Rf)m**?<)GB(t|*So(c/*dE*rC*AH)I:)w+)`O*4z(V8*bP)UC*~N(v{(mQ):d*nJ)sy(Y.*5E)eM*NL*{O*/u*.x(a@)>T*dI*^!im (eH){\\):L)9])ox)yp*J5*r,)5F(al*9I)G.)DU)9/)rR)|Z)TV*.m*N](vD)5.*Bo*9l)lI(ZO(V_)mI*TO(}O))F)}_)?F*eL(V^)Tz*M2*)~*o'(VY*U3*_l*u^)A;)xR*_b)_n)Ut*+!>?%JL%RT%~ *,!&'%F (}B(as*;[(^.*:|)rB)Af++l(V@)1J*(!nc *.i(V)*R|)A_*xh*uD(r[)>g*o])-h)mm*uA)|!LK (_3)_1){^):I){<*.:)gP*w&(U2)^S(UJ*d&(d_)>L)@0*7!u~ (g9(}6)m>*v2)7B)eE)ma(}J*~C*=-(}E(g+)sw(U+)S\\*37)7<)9&))0(^C*Z!+l *o0(Yz(eB)1g)_.(a()8a+0:(w:(ZV)qw(d-*.|)<2)>&)6L)9P(ZD)cS*NC(_&*S}*.w(o**=/*mZ(^g(ex)&N*,!GH%~ *-!&'%-/%35%9;%P (YS)|P)UV*bg*~Y(iy(gA(cp(gZ),=):H)JF(_b)36(_}(q[(b@(o1)tB)qK)+M)3E*)7)5w)6Z(V6)^p*29)7a)_f*uK(oZ*:I)E{)Hv)vX*xw)yI(sr(g^(eL)W~(]p(`U({Y*Tb*43(i<(p0)0L(o4(f1){@)0)(zd)9_)6c(e@)6&({~)E;(h?){e*:T*dK)+)*Ki(t^(p8)7x*Z6*4s(o:)~2(Y2).v({t)OP(c0)}d)e.)Fy)t4)qv)@@(_((U|)pm(~k){k*?&(tt+'Y([W*-!QR%tv%~ *.!&'%46%8HNUVp~ */!-:KQ_xz|%~ *0!&'%)+.%7:; *{])2N)Xt(oG)@O)8W(n,)7V)6,)+i*qc(of)73(j'*Fc*5u*_4(i_*<m)DJ*XV*@5(x,)FB)7P*&P*q`(^<)\\)*U;):\\*NB)4G*/G)_D)Y})hf)Jc)eh)+`*bT)CU)Uf)8o(at)d'*27(XN(vY*d>)_[)V@(b:(U=*t;*on*A})vM**-(]F(ou)<o*3h*(+)T?)Hr)J-(_*(dN)H))dF+1l*&S)ed)y3)ZR)hg)D3*eG++X)wf*<E*;i(el)FJ(U*(d?(ar)ts(d<(`C([_(Xm(YY*0!>AC%FHK%OS%UWX[]%`b%eghj%qsuw%{}~ *1!&'(*+/12457%=@B%FIJMOQ%SU%XZ\\^%befh%mqr )n-)|8*(B)SS*sS(a\\)j2(h;(Yr*31*<n*_o*oq)+_)/N)VB))`)>V*5c*nX)/})_>*.]*(^(_<)G[*(a*96(Tj*^p*eJ)An(VB*Ti)<V*3'(\\X)m;)bE(|C*_N)[L(Us)</*od)+l)?;(`1*KG)_J(ad)ez)i;)D|)vz*tZ(Tz*bA+,9)Vn(_N*XA(ez)78)gl*=T*t:+3p*mv(Wq*1)(_?)^P*rk(~Y*xf(eC(Vx)Y4)hj)K*)uG*{d)lV(`2)no)U=)F&(^9+4,*3((gD)}P)|,*1!svwy%|~ *2!(*%03%58=%@DEGIPQS%UWYZa%fhjoprtvwz{}~ *3!&+%.02%468%EH%MO%Z *r|(og)7L*r=)JK(vx):a*&5)ZN*rA*9m(cq*xe)+&)^d)9k(cs*DC++5+11)uh*tv*Z=*XB+0v)[D)xU)-9*r<)5J*~>(er*n7(Y,)?g(}!jf */V*DE)R6)-o)gA)Y|*/@)&9)8,(zz)Y~(d+(U^)9X)lb)6d*^X(Wa(Ve)ST*.P*Sw*>'*HJ*0?*`s*n})~d*~k*K}*>G)Tp*~P*.v(uU+1Y)gU)t6*Dv*~!6L (kb(et(pU(U]+1D(ce*_Y*54)ry*{g*F0)Yy*@k)C:)30)Zj*3![^_begj%oqrtv{ *4!'*%,0479:<=?IK%OS%Y\\cdfgjry{} *5!&)%,.%02367@BDF%HJ%VXY[^%`bd%hj *U4*9Y*;@)q2)Qs).d*<y)f>*:s*nt)Q;)si*my(c~*:p(^^)*,*V>*X8(U5)ge)E&)G_*dJ*tM)a4)SO)qI(xT*oB)Q/*0v)@p(|.(v-(x\\*q!7F (W'*=o*?J)Mp)px*o1)f.)H'(zo)qo*dn*uL*)3*`/*U'),b*'|)yP*N?)Sz*F^({})*1)HJ)q`*/6(^a(]r(b1(wD*/F*uM*:E):.)rk*Bv)yJ)X+)+/(uf*@i)^H)Qq)7))pX)>J)1/*qL)@W*H/+/s*nG(ej(g(*U7);~*5!kl%prtx%z} *6!()*-%13%68:<%>ADEG%JSU%Y[]%`bd%iklp%tvwy{}~ *7!&'%+-%25%8=>@%BDF%L )<&*C^)L>*6n)vk);o+'l)6|)Ci*<g(s'+1v)SY)Z_(|<*rB*To)c})E\\)71)d&(V=(v:)Q-(rk)BE)*D(bG)2|)Cf)q.)rM)d,)ze)7i(h<(fT*mS*b)(w7*.M)Qv(U0(uC*2F(tn(cf)l4*s[(m_)81*5<)0U*qH)Vy(ff*{V(^Q(yR*5((u{*tW(ZZ)T:(}A)7I(XB(cN*6M*`>)YR*A*)72)*c)vA)<b)93)/'(w3*dS+/o(}D)8`*2x({4(ig*o!KN )V()1()El)eJ(_P({8*7!MN%[]%_abdg%kn%svx| *8!'(%+./135%:=@D%GINRZ\\]_%cefhjl%np%wy{%~ *9!'(%.0 )7Q)T3)cy)60*ma*.W*5>)UO(^h),A(uA(ak)/D(u@)B-*DD)mC)8;)4[*)F*T^(h8)O9+/u)Pm*B{(fY([M)SR(ic*Y[)cJ))])/G)i>)77)9J)cj)-|)X4)U:)=T)[>)pq)vS)q<)lQ(`>(e8(U@)+4)?c*2`*4Z)6^(g1(`B)_0*Jk*Yx)T6(f|*4^(q**Ky*XT*r`*cz(XK)SI(jW)p_)te)6k)_{)[t)-Q*@D)H[)uX*&Y*6z)CI+0F)8x)v3(oR)tG*t})6!<n (aI)i=)Q7*9!12%48<%?BCGHJL%NPSWZ%]abegijny|} *:!()*-.01347>DGHKPU%XZ%\\^`acdfhj%nxy{~ *;!'(+-.2%;>?CEGLPR (i]*5i)mV)pG(cH)n)(\\y(}F*S)*&)([&)ce*~a*y_)ZA)k8)x9)<4)s3)7f*xq*X+(gl*35(U?(oM*:g*=p)*b(_`)kL*T((}T(oD)TQ*xg(wa)ti+'\\*_|*(E(`p)5m*nT(VZ*<B*>k*=L*?c(p^)Cr(n?)A^)Ub*U<)Bt)]E)C])OL)FI)56(v/(TI(_7)ZE)E^)S=(^B)HL(tm)Oy)lc)&a*5;+3<)?y)w!rk *~[*Xw(~.(UK(W<(f3(tw)tA(lV)Qt*_U),@)S+)T8*Sh)9H*;!STVWYZ]_%chj%nrw *<!,-%256:%@CDF%IK%MP%SUVY[]%ch%kqwz{~ *=!&')+,.013%68:<%>AE%GI%KN%P )0I)U9)d:)6)*m!Ax (cR*_R)~9(Vs*U1(Uk+1r*m!df (`g)[B*aB)UA*U?(qB)'F)O!2[ )E6(f_*6&*0t(rq*A6),w)6e)Ld*o:)>m)0])G?)s5(UA(Y1))/*v*)<Y*1g)&@(YX){S(_z*:r(TZ)/a){I*mY(Y>(VF)y^)i<(bL*:')=&)y5(|;)S/*u=*^e)R)(Zn(d5)WO)<{)Ad)R7)1E*xW*T[)*u)iD){=)yC(T^*b7)hd)RI(mo*cx)Ss*Y2(cI*Ea)C0*\\K(}M*~;)Wj*=!QRV%Z]%_a%cehj%msu%z|%~ *>!()%-3%:<%AC%EH%OQ%Z\\%`bg%jln%rtx%z|~ *?!(*,- (e3(wQ+3w*YJ(dq(nD*y.)D(*do)Sw(^4)mn)7])dq(`R(a^*/{)^o)o*(d*+0A)K-)uJ*s]*K^*13)`_)b:(^U)E_)k:(sc)=l(mL*Sf*{K)63*.o)1y)_o(sk(V!UN ).X*vy(W6*Sa(_v(uW*.E)5p(Va)@.)5**;M*?z*;x*Gv)ad)YN({p*.l(^c):()E`*3f*;N*IL(]7({1(uO*_B(U`)Rd(^1*LQ*^Y*q}*AI)if*nj*q?)VI*:S),n)<?)Tg*>2*6@++w(r6*X[(TO(dw*?!./%24%7;>@%GIKLN%QS%_abdf%hlmoqstv%y|} *@!&'*,-/%469:<?%CE%GI%SUVX%Z (WY)>^)G+(js(Tm):s*~d)6.(y+)ig*99)VL)Ho(\\e*<J)t7)C~(`S)SG*.K(\\9(i^)a.)}o)AB)h+*:Y)D.(}v(`:)aM*JI*q9*rK)<r*Xa*7,(i})R\\)5c*/o(rj(W_(i?*XO)A<(TP(|x*Kx)G|)8_)z,)_i*9T(bb*w/(|o(h:*b;*.g(u/*XJ*Eb*8!,- *Xf);J(|b)2x)V,)wh*S{)tl)l0(g&(Ws*\\G)W;(w;*._)x/)S6({X(x8)kp*4B)2u)Wa(so)k!u{ )d7(cV*/4*@![\\%ce%hjl%npqs%vxz%~ *A!&'%),%5=%AC%FJ%TVWY%\\^%bd%fh%prt%w{|~ *B!&' )qA)pt(a**4`(n_))P(tW)eZ)?_)Xp*T;(}=*De(cP)t()7h)@?(VT*yf*Dt({U*T*(eO)sp(Xa(}S*~@(v?),L)wd(sj(T\\)F2(Ux)7W*P[*`U(b')@x(j|(lZ*`:(Vi(Xo*eE*{E)Qo))J)/u({[*N@*T9)>1)5g*{k({?(|])9@(i'(e4)nq(^I*A+)E.)H4)PC)6U*^}(e1*82)Vt)m3(US*XN({')ao*BU)B!(p *0Z*FB+1k+2e(}c)Cm*`()FD)DD)5))|C(r])+L)>k)Zp*B!(),.%46%@C%IK%MOQ%SW%\\^`%fh%np%twxz|%~ *C!&'(*%02%57%E )0.(`Q*2C);Z*JN)l&))M)FF)7^*t`(e))c[*Te)R;)rH)z-(f2)s:*xZ*8<*TX)u1)CR)_C)?Q)<B(k})/O)y9(eU(Tc)P4*3c(|X(k*(mp(W!uw *{G));)Dc*2n)/4*xb*`9({B*Sy*TY):{*8x)=2(kD*:=*d9(Y`*)w*`W*(O(\\q(r))YG({v*T-*3`*dL*?M)~R*Dq*s!(, */&+&D)uj(~-)zv*`z*sD)x0(zi)8p)|x*@))H.(hX*/j)hq*)y*n[)5\\(q}(Vj({:(uF(r,*C!FGI%KM%QS%]_%bd%suw%~ *D!&'%+-%/1%@FGI%MO%QS%UW%^ )g')8/*[@*Z]*4R*:B)6o(eM)TE*d2(tP)/3)Rw(o0);P*X*)nv)Z((o>)MD)n;)[S*U8*Tl(oI)QO*Jp)v6)9Z(eV)_/)Rk(r0);0(q3)Ha*6m(hb*)-(ZH*\\V)Vo*YF)_m)9G)V>)Yl*/'*=g)Fv*`;)V{*rl*Se(t})d>*C1*6P)m`*PR)H0(`n*Zp*nk):/*xx*[9(iu(X5)C=(l})1U)V8(`](}N(tO)WE(rC)l-)kr)0E*84*5q)7{)DF*_s)qz*ZA*X4*mt))^(d;(f0)_E*D!acdf%lw%} *E!)*%-/1%69%=@AFHIMNR%TV%Z\\%^`cghmnp%ruwx{%~ *F!'(%*,%.17%9<%?ACF%HMNP%SVX )RG),4([3(VA)+C)8K*8g*`R)G**dB)sA(ei*n6)-H)|R)GP)8V)}f*.y)n&([N)6X(tZ*`G(_k)y;){G(n:)-v*`L)U~(}e(n[(em(]y)X>(mw)9`*xs*6Q*FW*LV*`8(e{(}t*79)7@)5t*5\\+0,*r6*~!8F )IU(ur)7=(i7)8'(gr*Et)U8(vw)k<*Jz)O|(t<*UW),l)Xo)gc*x](T~)_y({C)us)8N)AJ)p/)1K({R(wd(TM*6')Rq)gE(V5)Dn*09)-d)@C)CY).c(uQ(vu*F![]_abfh%jl%oqrtuwxz%|~ *G!&)%/3468%;=%?AC%HJKO%VXZ%\\^`%ch%jmoprsuw%{}~ *H!&(%.0%4 )(n).9(d'*vx*_n)Fx(n0(i()1_(U')[3*/5*:5*=q(vH(W!Ze (}C*.F)Ch*@r(fw)lL*4G(i{+'g(X/)Ww*Tw(|g)3>(cz)nj)Ws*D~)?)*qJ*.S(f?)zR*)a*q=(k(*1P)kD)8.*FY)VD){c)5-)?C(cv):@)S1))3(f`*m[(U9)Rh*TP(}P)@)*9c)H((f!B8 )Q+)Ox(V()8S(cW*8>(WH(Y7(oA)5&*tB)AT)d.(bg(ab)0x*TS)@])ai)Du*MR)u.)t2)A`(l)(f<*n{)d?*H!5679:>@%BDF%IKLNOQ%UW%Y\\%`d%jl%oq%tv%y{%} *I!&'%/1%46%9;%@B%IKN%QS%WZ )yx)0H))T)0b*6o(t;)1\\)aT)_q)YB)RW)dE)MH*K2))u(UM(xu(j<*n=)Tl*)R*s6)5+*.`)ru*Dr(c2*tb*_')Aw)&4(Y))eY(TQ(d\\(t5(ep)98*o)(]m(Vm++P*.>(gc*W}*J2*8W*qA)V1),c(y5)A.*r_)gj)fA(du*6L*{Z*10({a*r!mF *.Y)q8(dX*ow*{n)~l*Lp)XI(UN*1c)x6*TJ)1s(gx(V?*xY))?)L~(\\M(en*Ul*>1)u9*tH(`d(h@(m8*nZ)V+({l)Vi)AC*I![\\%hj%oqrt%vx%z}~ *J!&'%),%13468%>DEHKMOQ%TV%Z^adeghjl%oq%su%y{%~ *K!&(*%/ (|m(zm)FT*3s(iq)|~)>C)I|(V/)OY*G7*uv(c^)80);@*b0)?>*4E*Tt(^e)H1(d.*I0)4=)Sr)TP*U-(}V*BP*9v*nf)O5*_,)?R)/-).N(Yj*I|)@h*67)f<)1z(^@(`+(on)-F*b(*J**df)*g)D4)/Y(vG(]i(_i*4|(bp)S'*sa)aZ(WL(Yw*1-)C{(je*nb)y8*Jt*.}(rw)5(*tD*DN(k_*x[)-t*Su*?u*d+(e6)@6)*~)lY)0=**l(xA*/!+. *^S(jG({Z)1,)?m)g>*K!13%57%;=%@B%EHILMO%RT%VX[\\_%cefkln%twz%| *L!&')+%-/%57%;=@%DH%LN%PR%UX%[]%_ac *`A)oU)qi*.t*u_*BA(zv){:*t.*Iw(b3)a_).5)@5*TF(|Y*~9))))PB)Rb*S!jl *`B*_V(dA)7&+/!v} (fD(Tq*:+)cw*E7)&i*J7)VR*sb(g|(V.*Ss)`2(gh*qX)_a)WC)pi(Tk)tI*FT(~U),3*Nz*x|*q])^i)Sm(tj)9a)q|*J+)ZS*9:(qa)bL(dB)tO*s^(hS)-J)`Y({k*T~*~V)P<(tT+0&)y_)DM)6/(XQ)mE*0r)T`*r))R.(W+)mv(^G)Fj)Z}*a_*6B(uc)i~*L!de%lnoq%~ *M!&'%03%8:%MO%QSUWXZ%t );M(},*aD){W*U.(vN(gW*7y*<+*MT*26)IX(l<*2l)cU*eI(_)(UL*xU)9N(T`(eS)C1*5v(tB)VU(TF(sx(cJ):5*nK(Y&(WE*JA*xp(t]*a6)ys(V~*4t)m5)S0({S(v\\)-A)I-*Du(ZJ)):(UF)sq(Vy*9A)6T)@\\*ap(}~(VS)-]*7?*`p*3a)mO(V:*KY)26)P~).Q(U6)pc)Y:*TG*Sk*T!n5 ),?*22*1[*.h*;J*<'(mu)Pp*w,*r*(vo(e|*nP)W5({|*{C(}>),R*s-*M!uv%~ *N!&'%:=GM%OQ%SUWY%\\^a%df%hj%ln%y{%~ *O!&')%> (d&*:_)LN(x6+0g)+**/i*<u*>!./ *;|*G0*__*Xb)pa)-U*xv)uH)@i(h1)7O(XE*7<)ml)+N*sj*ZX*F;(g:)TH)V/)R?)0X(b/)k~)*l(WS)0y).r(}))l.*b4*ms)d~)Sg)X)*cv)CG(e!(P (X3*eD*TU(d~)*k*_S)W.(U{)p[)JU*DR)2A*8&(X;(Yg*`v++0)20)W!g^ *r{(Uu(wL*t,(TT(~+)y1({>*TQ*1L)gC(pi*9R*bG(e^*a&(j[)&=).,)2/)OD)e]*46*PQ*O!?@%^`%hj%~ *P!&'%@B%H )Up(|1*KZ*xd*Uv*~7+0*)WT(^p(]h(p-*J_(dU):S*_&(n)(f\\(nB)fR)Y(*/Y*_m*:?)2f)/Z*rX)C.*.@*Y!1j *mX(~_*(T)CF)1&*qT*2N(U~*bm(bh*r^(]f*_a*As*d1)AE*w.(ze(c,)tm)D')Fp(gt)^Y({g*^g(^Y(nd(g\\)=f)Ar*X!^C *5:*>v*aL*)6(_r*CH)E/)@2)\\.*E?*[v(lX*`X)ot)^Q)b\\*W|)7S(`3)TR*X<)/@(rv)3\\)C<*X`)5j(jS)Wm)Ck*^Q*P!IJ%PS%Z\\%~ *Q!&'%R *n;*qG)qh)F8)Jw(g6(U:)_:*T,);^)?-({<){J(Zj(|F)sI)QA*PA*(H)Sl)ph)?K*_()''(}Z*D,)F;(co)54)|F)XL*/>)L<)|M)-T)Zr),])9D)VK)D;(TN))X*X&(Vk*4D)o&*s9)7E)@v)6A)Sj*Xu)a7*0Q(]k*3d(eI*aM)6[(hD*F2*_**2;*nq*@o*_j)UU)h.)?A)q_)kZ)t\\*7t*Ww*m;(Y/)Dz)m]*T.*tK)8@*oH*r+*?i)84)r()-e)e\\(Uv)/F)>o)7Y)Ou)>:*Q!ST%uw%~ *R!&'%;=%[ ))o)mk*bW*S~*9d)E))>*(f5*FZ)ss*4&*5-)RH(U8*.a*3))q4)I5)PO)6*(Zl(Xf(n|)7q)Ot*Ye(eG)@1*.R).b)8+)9o*7!lm *0V))d)&,(`P)Aj)ya)z9*X()^t)mx)Yv)Si){X(Ts)p^).k*mR*JU*.b)yE*4C*eH(W!-R *8?(fl))&)U.*T0*(U*^^*3u))b(g=)pJ({P)A,*~n)hA)F]*Ev)Co)f=*T!\\? *`H)|f)_])a>)7.)s7(kx(U(*>a)E}(aj*E[*X.*nR)}e*R!\\]%{}~ *S!&'(*%\\inx *T!+4Nm *U)(X1)T=)x.*~E)6V)cH)7g(TY)tK*^V)<]*XZ*&()GC)*s*KJ(uS)<K(sm)d{)I6*o&*`5*XX(oC*/A*Tj(_9)8Z)7C(cb)G&)i**:o*cy(i=)r')^W)UF(^E(gS*XD(vs)Yc)Vg(zl**)(Vh*(-)Yk(z`*7c)WW(zg+&t)HV*Zx({N*/=)/m*.O*b?*Xp(tu):,)yW*YZ(ca)?q)x'*T)*r1*.^*mn*-u(k{*d])C>*0R(|h*aT)@q)).(X2)Ej([1(X>(o3)+=#2$*U!CD%KM%PSUVX%_a%df%kn%tw%} *V!&'%)-%3568%:=?%EG%IK%_ (Uz(TR(]e(TV),<(cT(T[(V,(Td+'J(z|(lW(Tn)y2(U,(b}(U4(tS)cY(c})Qp(mt*4h*{l)Q3)re+2\\(T|(V3+2U(U!IV (V'*9O(zk(ie(kV(VX(d!CSY[d *uP*X](c)(eR(c!5=M *X\\(c!ur (_!u{ (`!(GMYZfx{v *?`(a!>CBQT (^N*0<(V!OW]V|u (W&(Vr(W!V.] (XF(W!0`bDf (X!@I )>3(X!<? *V!`a%~ *W!&'%f (X!A9 (W!mx (X!XVskeq`] (Y3(X^(Y5(Xv(Y!oqsNcleZh (Z!(Y| (Y|(Z!\\?^].L<UX ([U(Zs([,(Z!x~ ([!CR|~ (\\!'8T (]+(\\!kjdl (]!,0 (Vq)RD(X!:G (YW+43)RM*'}(^:))E+1g*{m(^M(t:(b!au *O((bx(_^(t?(]z(V4(]{(VG*JL*K)(VI*5?*KW)xQ(zD*I:*1G(^!w} (_!0/ *W!gh%uy *X!QRW_eh%jlnoqrx%~ *Y!&')*-%03%79:<%EG%IK%WY]^`bdg%iln%qtwy%{ (_:(^!bnq *S!]cdgqrt *T!&'/326%8:<=@CDHLMRTWZ]`cdfhkpsuvx%z} *U&*T|*U!(*%,02569:=>@A (cx(d0*q!lqp *r'*qy*r!328?JU]bhj~ *s!*4M *a!vz|x *b!2':9<@ *Y|*Z!&'*.%03%57;<>%@BDJL%RT%VY[\\^%ac%jnor%vy{~ *[!'()+%-01348:;A%EH%MO%Z\\]_`cf *b!>6UKDVJMYlhb]aqu *c!+1OKP^\\fps (`'(th(a!cmn (b&(hQ(b!8>X (e<)be)s[),1(_!ho +'G(dl),>)lW))7(o/(p!3+ (rV(s!;DP (n!ehfoujk (o?(n!w~ (o!LhNi_^KPYV (p!7. (oo(p!<Y1> (ov(p!*_bdc\\B~y (q)(p!ng *[!hjl%prsuw%y{}~ *\\!&'%*-%/1%79;%FIJLMO%UW%ik%~ *]!&' (q!<>. (pw(q!1OJuQ (r!=DYarX *{}+2^)4t*9!@DFVQoKUX^`r *:!&, *9w*:!68Q *9!_~u *:!9:/ *9!p{hqf *:!2< *9k*:!OweR}uJb@FziA *;!&/ *:t*;!)* *:!NC *;!1fpq *:v*<N*;!QIF *<W*;!sDd\\XtU,uBOH{z *]!()%~ *^!&'%. *;!}0~ *<!(&)*l4op\\fOXA8re9t7TZdvx} *=!dH; (q8*=!{n@`9 *>!&B *=!ti7Brf[\\M( *<|*>0*=!SD *>!f[dc} *?!89+:) *>!FPs *?!'=? *>!;w *?!r~ *@!(> *?n*@+*?!{pk *@8*?!RjeH *@!=;d )kc*A7*@H*A8*@w*A9*^!/0%OTjv| *_!.1%35%8;=%@C%FHIK%MPQTWZ%^`cghkqrtx} *`!')*,%.2%467?@DFKMP *A!U: *@!WT *A!XGgc]y )s0*A!Bqz *B!JN-5 *Ax*B!TB+_]Vyg *C!)LtRvc *D0),!;E (t!bg *2m(t{(u'(t~(bw(}!'*19 )5h)6!-b~ )7!4DAX )83)7`)8!J\\T )9e):U)9!)2Fl )8~)9!dB )8z)9!ft ):!QW?^ )9|):!=- );X)9!~v );!KG ):!jz );&):k);!,'d )<1);s)<C*`!QT[%]_%dh%loqruwx{}~ *a!'(%+-3%589;%@CEFH%KN%RU%[]`c%fhik%oqsuwy{}~ *b!&*+-%/138=BCEF )<!'deFgm} )=!+86]y )>)),H).])ko),N(cn(e!NZFEXosc (f!OV%XZG (e~(f![]'6 (g!-? (f!{uh (g!EF/ (f!zj (g!H{Xm_}RQ~ (h&(fv(gN(h'(g!fjw (h!+,. (g!TUO (h/(gz(h!0m9rOfEtuacy| (i`(j!/U (i!Bf:N8I5 *b!HILNOQ%SXZ%\\^%`d%fi%koprtv%y{%} *c!&'%),%.02%EG%JL%NQ%[]_%eg%oq (i!0On%p,)U (j!+r (i|(j!QY( (iz(j?(iw(j!v1 (it(k&(j!]^49 (k!1> (ji(kf(jq(k!23 (jt(k-(j!}d (k!6,9: (j!lm (k!/<+ *^~(k!eOSHkjEGnt (l!F'E (ks(l!;PGJ:BtR_Yijs (m!(Dilrv (n!1'5;@FEX ))!Wa\\Yy )*!*+ *c!rtu~ *d!'(%*,-/034:%<?AGN%PT%XZ\\^bcg%mp%ux%} *e!&'+%.1%46%ACFKM%VX%` )*!&3CJMP (~!8&9<B4DE=FHaNiXW]Omcp~ )&7(~w)&!8UVzy )'()&!wqYn )'!R8.7fUiWeEDcn| )(!:> *U~)(!Xf )-!W[fkmpy} ).!'38@G *J@)-E)d!ruy|} )e!/-:9>T[U^`cm_of *e!ab%~ *f!&'%g )eg)f!*&4 )ev)f!10(5L8?KDc`js )g!&)8 *8;(tK*yn(t!J( *{!8<%AILRUY\\_befh%j )*o)+')*z)+!,;6OKTI *XS)+!hgq~ ),'*73).!OTaZ )/5).y)/6).!lo )/!078 ).!ux )/!*KgXMA?[]<qS )0!QRTS )/t*f!hi%~ *g!&'%<>%VX%p )0!CVos )1-)0!v\\ket )1!l;1]XFZ4 )2!GM<J )1t)2!'5Rq )3!Czbu )4!,Ij ).h*sP*q!8:@BDEKMRSUWY%\\^ad%fhi (Tr)c])51)R!<[cQ )S!Q3>B: )R!op{} )S!4W~ )T))S[)T!LMF, )S`)T!5+O@C )S_)T!(DS *g!qr%vx%~ *h!&'%79%y )U5)T!|a )U!?D )T!\\Ync )U!'I*1 )To)U!KNP/ )V4)Uk)V!AC )UZ)V!67 )U!X\\x_ )Wd)V!jh )W!(X )Vb)W!*[0' )V|)W`)VN)WV)VQ)Wu)X!_?\\ )YJ)X!PwDE )W!|o )X5)Y!wI0x )Zl)Y!z=?USOoLg'Z7 )[!H,- )Z!cT8nu )[!1Z )Z!iHh )[!osr^Xb` )\\^*h!z{%~ *i!&'%TV%~ *j!&') )\\!V4FCOn{km| )]!NWOmi )^!*9 ({!7;LJ\\o )l,*~h);:(|!BL *L\\(|N*[<*Qv*_!Gdfv *`&*_!uzw *`+*_y*`!=<C^IENYmneg| *a!01/G7A: )BP*a!S\\agbj )-!4;:< (}@(gV(}!U^ ({((}!hk *1K),!gfj *9;),y+'S(}s(u!NPZvwp *j!*+%LN%~ *k!&'%.0%2 (ud(v>(u!xkq (v!F& (u|(v!K2yzQ|WLm (w'(v}(w!MO,>.[ (x)(w!epW} (x7*4p(x!l]9< (y!'T (xt(y!;= (xz(y!ILZ?OAEr (z!'&BGP (|!sz (z!ju ({*(z!acr *~!?ABDIGJKORTZ\\]`be%gijlmoq *.!9;=?BC *k!34%:<%~ *l!&'%: *.!GJXZ%\\cefjnquz{ */!),/023N7;<?B%DHILMPRSXZ]\\`b%hk%np%tv )*i)l|)(|)l;*at)g!HKh\\Y )h0)g|)h2)g!qmz )h!*)F: *x\\)h!kJH? )gt)h!Sp )i!2c.-0864 *l!;<%IK%vx%~ *m!&'%7DIKz *n!)-.4@Uvz )h!|{ )i!Id_]a )j&)iu)j!-K=/06:MWX?V )k()ji*v!|}~ )D!18C-N )E1)D!lOX} )E3)DZ)E!4*9 )D!p\\a )E|)F<)Ed)F=)E!u< )F?)E!eAf?i )F3)E!ODn )FA)EM)F!0ef )G!:;(< )Fw)G!>] )FP)G!/@ )Ft)GA)F!sq}|\\ )H6)G!iNQmE )HC)J=)H})I!GH )Hz*o!(4>DILV[aouvx%~ *p!&(%s )IL)Hq)I!3) )J&)Hd)I8)J@)Ia)J/)Ij)J!,S:OgG )I\\)KB)J!VW )KD)J!X52Hjv )K1)J!z| )K!J'7@U )Jd)KV)J\\)Ku)LL)Kc)L!45 )M))Kh)L!a[ )Md)L!mxR )M!R= )L!ZEu )M!@UTm[o )f!Je )P!:;@=KLFSTZc *^!UW[%]_`bacdfhklnqu *p!tu%~ *q!&'%6;NVbgjmor%xz%|~ *r!&-%0479@DEG%IL%PR%TVY[\\ac%gin%z} *s!&' *^!wxy *_!)+ *\\j)5!'37;>=A@H *7`)k!EJUegi )>/)@!789Sb )DW)@!L^I )^`)C5)@!f}z )A&)@~*2<)A!OD1?FQGgt| )B!>4Urs} )C'*X!236;=@EFHIGMUY *N!AD%FH%K )d!3d )c{)d!+4CDIPRTW )7r)8C)9h*s!)+.%02378:%CE%LNOQRTUWX\\_`eghmnpqs%|~ *t!&'%+/%24%689<>%ACFGIN%PT%VXY[%_acd );E)=,*2:)Q!JS]UYegfmux%z )R!(0+19 )>!0Pf )c!kptN *DV(`0*3!|yp *4@)CH*4!A5/18;k%n_FH]Q[ )CN*4!aouxq *5!89 *4v*5')CS*5=*Ue*5!aIWC]sw~ *6!F+,C2;NO?9 (q~(xw*6!ZTc )Ym*6!u| *7E)Cd*7!C4 *t!ef%moprsuw%{~ *u!&'(*%<?@BCEGHJNOQ%SU%]`b%fh%oq%uwy%{~ *v!'()+%/ *7:*6x)O!6IKUXk *y!XYZ\\`a )Pl),})P{*Nm)?2+3=)?!5^hfenptx )^![wqx )_!=B9-3jL )`!9<?XZ )a!C,8 )`n)aB)`s)a!HJh )b!*, )a!xp )b!WK^p )c!;F )^G)`A)a6)b0)5!ZY_de )w!ejps )x!,- )w})x!+3(1@8KV[kx )y+).!\\[ *v!01346%<>@BCEG%wz *w!'(%+-0%G )/n)0!63@ )/s)0!2< )1+)2!-4 )3!+wk )4!@F{ *3!]\\ )SA)TK)WF)t!+-5>LMF )?M)t!bQRn%pTqZaX^ )u!*I23 )t[)u,)t|)u!(Fwovcx} )v!&5<(W\\Lou )w/)vw)w!=NH^ +4.+2!>@A )q!1DM9GHZbYmfux )r!78.*AO *w!HI%~ *x!&'%N )r!ILftdgsx )s!-.>CK )l!7=KHEXov )m'*0!@IG *Oi*0!P\\Yaif )p!f~ *Ii*m!89:>=?@BCGJHM%OVW^]`_bcegi%moprw{%~ *n!&'(*%,/%13258%:<>?ABD *x!OP%Tknruy *y!*/%TVW[]^b%dg%mp%~ *z!&'%5 *n!CEHIM%OQSVWY]\\`acdg%il%pruw%y| *o!+,*-2357%9=?@C6E%GJMOPS%UW%Z\\_`^bce%mpr%t; )s!uz *sf)y!Me[c~ )'A)y!{z )z!=3 *z!67%:<=?%[]%~ *{!&'(+%79;HMNPSWX^ )z!XVp +1m*{z){6)oz)p!',2= )k!46 )l)+/!prx%| +0!)(-/.01589;=%@BCEHLNQ%SUZ]%chdj )m!68:DAPGWX\\hUTgfzq )n!.31/62N<GJ[KPWbUpc`d *{!aco%y{|~ *|!&'%u )nf)o.)n!mk )o2)n!x{ )o!1'50 )n~)o!?PFNH]a *1Y)|S){!>?FLN[lfrnsy *J!BGP[]` *K!'K<ANgShjv *L!F( *Km*L**Ku*L!ME?G6`Wbm *M!9N )m/*4i)p!KM )sj*2!HJLRVX[%]_^gAky| *3!*/FN *MV*x!X`c *|!vw%~ *}!&'%| *x!ilmotz{~ *y!&(),- *D!AH`bsnpo *E!C(&G8B>E.DQ_PiKULJdjO *F!+34/5 *Ek*FU*Ey*F6*E!zsl *F!EI:JLOKe}`gp\\ *G!'1 *F!vsky *G!(k *Fd*G!fgdIY5Wt<LeMBN| *H!?8b *}!}~ *~!&'%5<MSWX^_cps%y|%~ +&!&*,.%0457%;>%ACE%HJ%OQS%VX%[]_a%ikm%su%w *HV*G!qn *H!=' *Gl*H!;u<EC[cMaPZkzp~ *I!MJ5ARXps */w*0!*,- *80)|!gjupq )}))|w)}?)||)}![L>-BE498GR2lnY )~0)}!`qt )~!)6 )}v)~!-,KabsgXc@eW]fo *&3)~|*&!.?<GHLn`^qxm +&!xz%~ +'!&(%*,%68%:<%FHIK%RU%X^b%dfhjkm%~ +(!&'%: *'!(3/AJI *7!wz{}e *I{*8!ABCMOHKX[ST^dikoz *9!&/ *J!\\cf *K!]d *M1*1!,.6>?A *(,)>D*(!AMLNRblmqw|}xu *)!.? *95)B?*1!N]dtpux} *2)*)O**u*+!KS *-:*.5+1!VR *Xs*Y!+;8X *X!gm *U!RT *c!w}{| *d8+(!;<%~ +)!&'%A *d!65D=CQRFHM`Ydaevw~ *e!()*0/5 *U`+0u*Y_*Z!9S *[!N^ *Y!\\fcak}~ *Z!(, *Y!uv *Z)*Ym*Z!:EF1GI2WKbkmz|q} *[!/5.*2&>67FG?ekqdiz *\\!+0,8: *V!*4<7JF )?=*N!PXTV +)!BC%~ +*!&'%H *N!_ei *O_*R<*u>*t!-73JELSRnqt *u)+3!loq%vx +2!CPR *s!VYZko )sM*s}*g!Ww *h8*iU*j(*k/*jM*l!Jw ++!369%< )zB++!?BD%FHINOR%WY%]_abd%kn%qx%{~ +,&+*!IJ%~ ++!&'%/12478=>@CGJ%MQ^`cmr%v|} +,!,-56;<'%+.%02%478:= *u!gp|} *v!&A=5DF *~!{z +&(+0O+&!'+-2163<=B +'!][_a`ei *yo*z!;\\ *{!*) +&!PRW`\\l^jy +'!'+7; +1![\\ *-.+0!y~ +1!&)0 *k;+1!;=y%{~} +2!'.,*/4gqt~| +3!)*0 +,!>?%~ +-!&'%~ +.!&'%~ +/!&'%ntw~ +0!'+237DGI%KMPTV%Y\\efik%twxz%} +1!'(*%/2%:<>%CE%QS%UWXZ]%ac%fh%jnpqs%uwx| +2!&()+-0%35%=?BD%OQTVWY%[]_%dfh%prsu%{} +3!&(+%/1%;>%jmny%~ +4!&'%+/%14%8 .*f.+!Zv .,!oy .-!;<%>@BCGN%PRSV%X -R!XY%~ -S!&'%N"));
351
- var gbk = src(gbk_us);
352
- return gbk;
353
- }();
354
-
355
- var gbk_build = GBK$1;
356
-
357
- return gbk_build;
358
-
359
- })));
360
- });
361
-
362
- var SJIS_BASE64 = "AAAAAAABAAEAAgACAAMAAwAEAAQABQAFAAYABgAHAAcACAAIAAkACQAKAAoACwALAAwADAANAA0ADgAOAA8ADwAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAB4AHgAfAB8AIAAgACEAIQAiACIAIwAjACQAJAAlACUAJgAmACcAJwAoACgAKQApACoAKgArACsALAAsAC0ALQAuAC4ALwAvADAAMAAxADEAMgAyADMAMwA0ADQANQA1ADYANgA3ADcAOAA4ADkAOQA6ADoAOwA7ADwAPAA9AD0APgA+AD8APwBAAEAAQQBBAEIAQgBDAEMARABEAEUARQBGAEYARwBHAEgASABJAEkASgBKAEsASwBMAEwATQBNAE4ATgBPAE8AUABQAFEAUQBSAFIAUwBTAFQAVABVAFUAVgBWAFcAVwBYAFgAWQBZAFoAWgBbAFsAXABcAF0AXQBeAF4AXwBfAGAAYABhAGEAYgBiAGMAYwBkAGQAZQBlAGYAZgBnAGcAaABoAGkAaQBqAGoAawBrAGwAbABtAG0AbgBuAG8AbwBwAHAAcQBxAHIAcgBzAHMAdAB0AHUAdQB2AHYAdwB3AHgAeAB5AHkAegB6AHsAewB8AHwAfQB9AH4AfgB/AH8AooGRAKOBkgCngZgAqIFOAKyBygCwgYsAsYF9ALSBTAC2gfcA14F+APeBgAORg58DkoOgA5ODoQOUg6IDlYOjA5aDpAOXg6UDmIOmA5mDpwOag6gDm4OpA5yDqgOdg6sDnoOsA5+DrQOgg64DoYOvA6ODsAOkg7EDpYOyA6aDswOng7QDqIO1A6mDtgOxg78DsoPAA7ODwQO0g8IDtYPDA7aDxAO3g8UDuIPGA7mDxwO6g8gDu4PJA7yDygO9g8sDvoPMA7+DzQPAg84DwYPPA8OD0APEg9EDxYPSA8aD0wPHg9QDyIPVA8mD1gQBhEYEEIRABBGEQQQShEIEE4RDBBSERAQVhEUEFoRHBBeESAQYhEkEGYRKBBqESwQbhEwEHIRNBB2ETgQehE8EH4RQBCCEUQQhhFIEIoRTBCOEVAQkhFUEJYRWBCaEVwQnhFgEKIRZBCmEWgQqhFsEK4RcBCyEXQQthF4ELoRfBC+EYAQwhHAEMYRxBDKEcgQzhHMENIR0BDWEdQQ2hHcEN4R4BDiEeQQ5hHoEOoR7BDuEfAQ8hH0EPYR+BD6EgAQ/hIEEQISCBEGEgwRChIQEQ4SFBESEhgRFhIcERoSIBEeEiQRIhIoESYSLBEqEjARLhI0ETISOBE2EjwROhJAET4SRBFGEdiAQgV0gFIFcIBaBYSAYgWUgGYFmIByBZyAdgWggIIH1ICGB9iAlgWQgJoFjIDCB8SAygYwgM4GNIDuBpiEDgY4hK4HwIZCBqSGRgaohkoGoIZOBqyHSgcsh1IHMIgCBzSICgd0iA4HOIgeB3iIIgbgiC4G5IhKBfCIageMiHYHlIh6BhyIggdoiJ4HIIiiBySIpgb8iKoG+IiuB5yIsgegiNIGIIjWB5iI9geQiUoHgImCBgiJhgd8iZoGFImeBhiJqgeEia4HiIoKBvCKDgb0ihoG6IoeBuyKlgdsjEoHcJQCEnyUBhKolAoSgJQOEqyUMhKElD4SsJRCEoiUThK0lFISkJReEryUYhKMlG4SuJRyEpSUdhLolIIS1JSOEsCUkhKclJYS8JSiEtyUrhLIlLISmJS+EtiUwhLslM4SxJTSEqCU3hLglOIS9JTuEsyU8hKklP4S5JUKEviVLhLQloIGhJaGBoCWygaMls4GiJbyBpSW9gaQlxoGfJceBniXLgZslzoGdJc+BnCXvgfwmBYGaJgaBmSZAgYomQoGJJmqB9CZtgfMmb4HyMACBQDABgUEwAoFCMAOBVjAFgVgwBoFZMAeBWjAIgXEwCYFyMAqBczALgXQwDIF1MA2BdjAOgXcwD4F4MBCBeTARgXowEoGnMBOBrDAUgWswFYFsMByBYDBBgp8wQoKgMEOCoTBEgqIwRYKjMEaCpDBHgqUwSIKmMEmCpzBKgqgwS4KpMEyCqjBNgqswToKsME+CrTBQgq4wUYKvMFKCsDBTgrEwVIKyMFWCszBWgrQwV4K1MFiCtjBZgrcwWoK4MFuCuTBcgrowXYK7MF6CvDBfgr0wYIK+MGGCvzBigsAwY4LBMGSCwjBlgsMwZoLEMGeCxTBogsYwaYLHMGqCyDBrgskwbILKMG2CyzBugswwb4LNMHCCzjBxgs8wcoLQMHOC0TB0gtIwdYLTMHaC1DB3gtUweILWMHmC1zB6gtgwe4LZMHyC2jB9gtswfoLcMH+C3TCAgt4wgYLfMIKC4DCDguEwhILiMIWC4zCGguQwh4LlMIiC5jCJgucwioLoMIuC6TCMguowjYLrMI6C7DCPgu0wkILuMJGC7zCSgvAwk4LxMJuBSjCcgUswnYFUMJ6BVTChg0AwooNBMKODQjCkg0MwpYNEMKaDRTCng0YwqINHMKmDSDCqg0kwq4NKMKyDSzCtg0wwroNNMK+DTjCwg08wsYNQMLKDUTCzg1IwtINTMLWDVDC2g1Uwt4NWMLiDVzC5g1gwuoNZMLuDWjC8g1swvYNcML6DXTC/g14wwINfMMGDYDDCg2Eww4NiMMSDYzDFg2QwxoNlMMeDZjDIg2cwyYNoMMqDaTDLg2owzINrMM2DbDDOg20wz4NuMNCDbzDRg3Aw0oNxMNODcjDUg3Mw1YN0MNaDdTDXg3Yw2IN3MNmDeDDag3kw24N6MNyDezDdg3ww3oN9MN+DfjDgg4Aw4YOBMOKDgjDjg4Mw5IOEMOWDhTDmg4Yw54OHMOiDiDDpg4kw6oOKMOuDizDsg4ww7YONMO6DjjDvg48w8IOQMPGDkTDyg5Iw84OTMPSDlDD1g5Uw9oOWMPuBRTD8gVsw/YFSMP6BU04AiOpOAZKaTgOOtU4HlpxOCI/kTgmOT04Kj+NOC4m6Tg2Vc04Ol15OEJigThGJTk4Uio5OFZihThaQok4XmcBOGIt1ThmVuE4ej+VOIZe8TiaVwE4qmKJOLZKGTjGYo04yi/hONpikTjiK2045kk9OO47lTjyYpU4/mKZOQpinTkOUVE5Fi3ZOS5RWTk2T4U5OjMFOT5ZSTlXlaE5WmKhOV4/mTliYqU5ZibNOXYvjTl6M7k5fludOYpukTnGXkE5zk/tOfoqjToCLVE6CmKpOhZirToaXuU6Il1xOiZGIToqYrU6LjpZOjJPxTo6YsE6RiV1OkozdTpSM3E6ViOROmJhqTpmYaU6bjbFOnIifTp6YsU6fmLJOoJizTqGWU06imLROpIzwTqWI5U6mlpJOqIucTquLnU6si55OrZLgTq6Xuk6wmLVOs5i2TraYt066kGxOwI9ZTsGQbU7CmLxOxJi6TsaYu07Hi3dOyo2hTsuJ7k7NmLlOzpi4Ts+Vp07UjmVO1Y5kTtaRvE7XmL1O2JV0TtmQ5U7dgVdO3pi+Tt+YwE7jkeNO5JffTuWIyE7tmL9O7om8TvCLwk7ykodO9oyPTveYwU77lENPAYrpTwmYwk8KiMlPDYzeTw6K6k8PlZpPEJSwTxGLeE8aie9PHJjlTx2TYE8vlIxPMJjETzSUuk82l+BPOJBMTzqOZk88jpdPPYm+T0OSz09GkkFPR5jIT02Iyk9OkuFPT49aT1CNsk9Rl0NPU5HMT1WJvU9XmMdPWZddT1qYw09bmMVPXI3sT12Yxk9em0NPaZjOT2+Y0U9wmM9Pc4nAT3WVuU92mMlPe5jNT3yM8U9/jmdPg4qkT4aY0k+ImMpPi5fhT42OmE+PmMtPkZjQT5aY00+YmMxPm4ufT52Iy0+gi6BPoYm/T6ubRE+tlplPrpWOT6+M8k+1kE5Ptpe1T7+V1k/CjFdPw5GjT8SJ4k/Kj3JPzpjXT9CY3E/RmNpP1JjVT9eRrU/YmNhP2pjbT9uY2U/dldtP35jWT+GQTU/jlpNP5JjdT+WY3k/uj0NP75jrT/OUb0/1lVVP9pjmT/iV7k/6ibRP/pjqUAWY5FAGmO1QCZFxUAuMwlANlHtQD+DFUBGY7FASk3xQFJjhUBaM9FAZjPNQGpjfUB+O2FAhmOdQI5XtUCSSbFAlmONQJoyRUCiY4FApmOhQKpjiUCuXz1AsmOlQLZhgUDaL5FA5jJBQQ5juUEeY71BImPNQSYjMUE+VzlBQmPJQVZjxUFaY9VBamPRQXJLiUGWMklBsmPZQco7DUHSRpFB1kuNQdov0UHiY91B9i1VQgJj4UIWY+lCNllRQkYyGUJiOUFCZlPVQmpj5UKyNw1Ctl2JQspj8ULOZQlC0mPtQtY3CULePnVC+jFhQwplDUMWLzVDJmUBQyplBUM2TrVDPkZxQ0YuhUNWWbFDWmURQ2pe7UN6ZRVDjmUhQ5ZlGUOeRbVDtmUdQ7plJUPWZS1D5mUpQ+5XGUQCLVlEBmU1RAplOUQSJrVEJmUxREo7yURSZUVEVmVBRFplPURiY1FEamVJRH4+eUSGZU1Eql0RRMpbXUTeZVVE6mVRRO5lXUTyZVlE/mVhRQJlZUUGI8lFDjLNRRIxaUUWPW1FGkptRR4uiUUiQ5lFJjPVRS42OUUyZW1FNlsZRTpNlUVCOmVFSmVpRVJlcUVqTfVFcipVRYpldUWWT/FFokVNRaZlfUWqZYFFrlKpRbIz2UW2YWlFumWFRcYukUXWVulF2kbRRd4vvUXiTVFF8jJNRgJliUYKZY1GFk+BRhol+UYmZZlGKjftRjJllUY2NxFGPmWdRkOPsUZGZaFGSlmBRk5lpUZWZalGWmWtRl4/nUZmOylGgiqVRopluUaSZbFGllrtRppltUaiVeVGpmW9RqplwUauZcVGsk35RsJl1UbGZc1GymXRRs5lyUbSN4VG1mXZRtpboUbeX4lG9mXdRxJCmUcWZeFHGj3lRyZl5UcuSnFHMl71RzZOAUdaZw1HbmXpR3OqjUd2Lw1HgmXtR4ZZ9UeaPiFHnkfpR6Zl9UeqT4lHtmX5R8JmAUfGKTVH1mYFR9oulUfiTylH5iZpR+o9vUf2Un1H+mYJSAJOBUgOQblIEmYNSBpWqUgeQ2FIIiqBSCoqnUguZhFIOmYZSEYxZUhSZhVIXl/FSHY+JUiSUu1IllcpSJ5mHUimXmFIqmYhSLpmJUjCTnlIzmYpSNpCnUjeN/FI4jJRSOZmLUjqOaFI7jY9SQ5LkUkSZjVJHkaVSSo3tUkuZjlJMmY9STZFPUk+ZjFJUmZFSVpZVUluNhFJemZBSY4yVUmSN3FJllI1SaZmUUmqZklJvlZtScI/oUnGZm1JyioRSc5mVUnSZk1J1kW5SfZmXUn+ZllKDimNSh4yAUoiZnFKJl6tSjZmYUpGZnVKSmZpSlJmZUpuXzVKfjPdSoInBUqOX8lKpj5VSqpN3UquNhVKsmaBSrZmhUrGX41K0mEpStZmjUrmM+FK8maJSvopOUsGZpFLDlnVSxZK6UseXRVLJlddSzZmlUtLo01LVk65S15mmUtiKqFLZlrFS3Y+fUt6Zp1LfleVS4JmrUuKQqFLjmahS5IvOUuaZqVLniqlS8oxNUvOZrFL1ma1S+JmuUvmZr1L6jtlS/oz5Uv+W3FMBluZTApP1UwWV71MGmbBTCJmxUw2Zs1MPmbVTEJm0UxWZtlMWibtTF5ZrUxmN+lMambdTHZF4UyCPoFMhi6dTI5m4UyqU2VMvmblTMZm6UzOZu1M4mbxTOZVDUzqL5lM7iONTP5O9U0CZvVNBj1xTQ5DnU0WZv1NGmb5TR4+hU0iM31NJmcFTSpS8U02ZwlNRlNpTUpGyU1OR7FNUi6ZTV5PsU1iSUFNalI5TXJZtU16ZxFNgkOhTZoxUU2mZxVNumcZTb4lLU3CI81NxiutTc5GmU3SLcFN1l5FTd5nJU3iJtVN7mchTf4uoU4KZylOElu9TlpnLU5iX0FOajPpTn4y0U6CZzFOlmc5TppnNU6iQflOpiVhTrYl9U66Zz1OwmdBTs4y1U7aZ0VO7i45Two5RU8OZ0lPIlpRTyY2zU8qLeVPLl0ZTzJFvU82UvVPOjvtT1I9mU9aO5lPXjvNT2Y+WU9uUvlPfmdVT4YliU+KRcFPjjPtT5IzDU+WL5VPomdlT6ZJAU+qR/FPri6lT7I+iU+2Z2lPumdhT74nCU/CR5FPxjrZT8o5qU/OJRVP2ipBT942GU/iOaVP6mdtUAZncVAOLaFQEimVUCI2HVAmLZ1QKkt1UC4lEVAyTr1QNlrxUDo1AVA+XmVQQk2ZUEYz8VBuMTlQdmeVUH4vhVCCWaVQmlNtUKZnkVCuK3FQsmd9ULZngVC6Z4lQ2meNUOIt6VDmQgVQ7latUPJnhVD2Z3VQ+jOFUQJneVEKYQ1RGlfBUSJLmVEmM4FRKjZBUTpnmVFGT21RfmepUaI78VGqO9FRwme1UcZnrVHOWoVR1mehUdpnxVHeZ7FR7me9UfIzEVH2WvVSAmfBUhJnyVIaZ9FSLje5UjJhhVI6Z6VSPmedUkJnzVJKZ7lSimfZUpJpCVKWZ+FSomfxUq5pAVKyZ+VSvml1Uso3nVLOKUFS4mfdUvJpEVL2I9FS+mkNUwIijVMGVaVTCmkFUxJn6VMeZ9VTImftUyY3GVNiaRVThiPVU4ppOVOWaRlTmmkdU6I+jVOmWiVTtmkxU7ppLVPKTTlT6mk1U/ZpKVQSJU1UGjbRVB5BPVQ+aSFUQk4JVFJpJVRaIoFUumlNVL5dCVTGPpVUzmllVOJpYVTmaT1U+kcFVQJpQVUSR7VVFmlVVRo+kVUyaUlVPluJVU4xbVVaaVlVXmldVXJpUVV2aWlVjmlFVe5pgVXyaZVV+mmFVgJpcVYOaZlWEkVBVh5poVYmNQVWKml5Vi5KdVZiaYlWZmltVmoqrVZyK7FWdioVVnppjVZ+aX1WnjJZVqJppVamaZ1WqkXJVq4tpVayLqlWummRVsIvyVbaJY1XEmm1VxZprVceapVXUmnBV2ppqVdyablXfmmxV445rVeSab1X3mnJV+Zp3Vf2adVX+mnRWBpJRVgmJw1YUmnFWFppzVhePplYYiVJWG5p2VimJ3FYvmoJWMY/6VjKafVY0mntWNpp8VjiaflZCiVxWTJFYVk6aeFZQmnlWW4qaVmSagVZoiu1WapqEVmuagFZsmoNWdJWsVniT01Z6lLZWgJqGVoaahVaHimRWipqHVo+ailaUmolWoJqIVqKUWFalmotWrpqMVrSajla2mo1WvJqQVsCak1bBmpFWwpqPVsOaklbImpRWzpqVVtGallbTmpdW15qYVtiZZFbajvpW245sVt6J8VbgiPZW45JjVu6amVbwjaJW8ojNVvOQfVb5mppW+ozFVv2NkVb/mpxXAJqbVwOV3lcEmp1XCJqfVwmanlcLmqBXDZqhVw+Ml1cSiYBXE5qiVxaapFcYmqNXHJqmVx+TeVcmmqdXJ4izVyiN3VctjFxXMJJuVzeaqFc4mqlXO5qrV0CarFdCjeJXR4vPV0qWVldOmqpXT5qtV1CNv1dRjUJXYZqxV2SNo1dmklJXaZquV2qS2Fd/mrJXgpCCV4iasFeJmrNXi4xeV5OatFegmrVXoo1DV6OKX1ekmrdXqpq4V7CauVezmrZXwJqvV8OaulfGmrtXy5aEV86P6VfSmr1X05q+V9SavFfWmsBX3JRXV9+I5lfglXVX45rBV/SP+1f3jrdX+ZR8V/qK7lf8jelYAJZ4WAKTsFgFjJhYBpHNWAqav1gLmsJYFZHCWBmaw1gdmsRYIZrGWCSS51gqiqxYL+qfWDCJgVgxlfFYNI/qWDWTZ1g6jeRYPZrMWECVu1hBl9tYSonyWEuayFhRkVlYUprLWFSTg1hXk2hYWJOEWFmUt1hakstYXo3HWGKax1hpiZZYa5NVWHCayVhymsVYdZBvWHmazVh+j21Yg4urWIWazliTleZYl5GdWJySxFifmtBYqJZuWKua0ViumtZYs5WtWLia1Vi5ms9YuprSWLua1Fi+jaRYwZXHWMWa11jHkmRYyonzWMyP61jRmtlY05rYWNWNiFjXmtpY2JrcWNma21jcmt5Y3prTWN+a4Fjkmt9Y5ZrdWOuObVjskHBY7pFzWO+a4VjwkLpY8YjrWPKUhFj3ktlY+ZrjWPqa4lj7muRY/JrlWP2a5lkCmudZCZXPWQqa6FkPicRZEJrpWRWXW1kWik9ZGJnHWRmPZ1kakb1ZG5rqWRyW6VkilrJZJZrsWSeR5Vkpk1ZZKpG+WSuVdlksmu1ZLZruWS6Jm1kxjrhZMprvWTeIzlk4mvBZPprxWUSJgllHiu9ZSJPeWUmV8llOmvVZT5F0WVCa9FlRjF9ZVJZ6WVWa81lXk4VZWJr3WVqa9llgmvlZYpr4WWWJnFlnmvpZaI+nWWma/FlqkkRZbJr7WW6VsVlzj5dZdJN6WXibQFl9jURZgZtBWYKUQFmDlNxZhJbPWYqURFmNm0pZk4tXWZaXZFmZlq1Zm5uqWZ2bQlmjm0VZpZHDWaiWV1msk2lZsptGWbmWhVm7jchZvo+oWcabR1nJjm9Zy45uWdCIt1nRjMZZ05CpWdSIz1nZm0tZ2ptMWdybSVnliVdZ5oqtWeibSFnqlsNZ65VQWfaIpln7iPdZ/45wWgGI0FoDiKFaCZtRWhGbT1oYlrpaGptSWhybUFofm05aIJBQWiWbTVopldhaL4ziWjWbVlo2m1daPI+pWkCbU1pBmEtaRpRrWkmbVVpajaVaYptYWmaVd1pqm1labJtUWn+WuVqSlH1amptaWpuVUVq8m1tavZtfWr6bXFrBicVawpteWsmOuVrLm11azIyZWtCba1rWm2Ra15thWuGShFrjm2Ba5ptiWumbY1r6m2Va+5tmWwmK8FsLm2hbDJtnWxabaVsij+xbKptsWyyS2lswiWRbMptqWzabbVs+m25bQJtxW0Obb1tFm3BbUI5xW1GbcltUjUVbVZtzW1eOmltYkbZbWpt0W1ubdVtcjnlbXY1GW1+W0Ftji0dbZIzHW2WbdltmindbaZt3W2uRt1twm3hbcZuhW3ObeVt1m3pbeJt7W3qbfVuAm35bg5uAW4WR7luHiUZbiI7nW4mIwFuLkXZbjIquW42Os1uPjUdblZOGW5ePQFuYiq9bmZKIW5qS6FubiLZbnItYW52V81ufjsBbootxW6OQ6VukjrpbpZdHW6abgVuui3tbsI3JW7OKUVu0iYNbtY+qW7aJxlu4m4JbuZdlW7+PaFvCjuJbw5uDW8SK8VvFk9BbxpanW8ebhFvJm4VbzJV4W9Cbh1vSiqZb04v1W9SbhlvbirBb3ZBRW96bi1vfjkBb4YnHW+Kbilvkm4hb5ZuMW+abiVvnlEpb6J7LW+mQUlvrm41b7pe+W/Cbjlvzm5Bb9ZKeW/abj1v4kKFb+o6bW/6Rzlv/jvVcAZWVXAKQ6lwEjstcBZuRXAaPq1wHm5JcCJuTXAmI0VwKkbhcC5BxXA2blFwOk7FcD4+sXBGPrVwTm5VcFpDrXBqPrlwgm5ZcIpuXXCSW3lwom5hcLYvEXDGPQVw4m5lcOZuaXDqO2lw7kEtcPJPyXD2Qc1w+lPZcP5RBXECLx1xBm5tcRYuPXEabnFxIi/xcSpPNXEuJrlxNjnJcTpudXE+boFxQm59cUYv7XFObnlxVk1dcXpGuXGCTalxhjsZcZJF3XGWXmlxsm6JcbpujXG+T1FxxjlJcdpulXHmbplyMm6dckIryXJGbqFyUm6lcoYmqXKiRWlypiuJcq5urXKyWplyxkdBcs4p4XLabrVy3m69cuIrdXLubrFy8m65cvpuxXMWbsFzHm7Jc2ZuzXOCTu1zhi6xc6InjXOmbtFzqm7lc7Zu3XO+V9VzwlfRc9pOHXPqbtlz7j3Nc/Zu1XQeQkl0Lm7pdDo3oXRGbwF0Um8FdFZu7XRaKUl0Xm7xdGJvFXRmbxF0am8NdG5u/XR+bvl0im8JdKZX2XUubyV1Mm8ZdTpvIXVCXkl1Sm8ddXJu9XWmQk11sm8pdb421XXOby112m8xdgpvPXYSbzl2Hm81di5OIXYybuF2Qm9VdnZvRXaKb0F2sm9JdrpvTXbeb1l26l+RdvJvXXb2b1F3Jm9hdzIreXc2b2V3Sm9td05vaXdab3F3bm91d3ZDsXd6PQl3hj4Rd45GDXeWNSF3mjbZd541JXeiLkF3rm95d7o23XfGMyF3ym99d85akXfSUYl31m+Bd941KXfuKql39kkZd/ovQXgKOc14DlXpeBpS/Xgub4V4MivNeEZvkXhaSn14Zm+NeGpviXhub5V4dkuleJZCDXiuOdF4tkMheL5HRXjCLQV4zkqBeNpvmXjeb5144j+1ePZZYXkCb6l5Dm+leRJvoXkWVnV5Hm/FeTJZ5Xk6b615Um+1eVZaLXleb7F5fm+5eYZSmXmKb715jlbxeZJvwXnKKsV5zlb1edJROXnWb8l52m/NeeI1LXnmKsl56m/Ree4y2XnyXY159l0hefor0Xn+b9l6BkqFeg41MXoSPr16HlN1eio+wXo+PmF6VkupelpX3XpeTWF6ajU1enJV7XqCb916mk3hep43AXquMyV6tkutetYjBXraPjl63jU5euJdmXsGb+F7Cm/lew5RwXsib+l7Jl/VeyphMXs+b/F7Qm/te04pmXtacQF7anENe25xEXt2cQl7flV9e4I+xXuGcRl7inEVe45xBXuicR17pnEhe7JxJXvCcTF7xnEpe85xLXvScTV72iYRe95LsXvicTl76jJpe+4n0XvyUVV7+nE9e/5P5XwGV2V8DnFBfBJhNXwmcUV8Klb5fC5xUXwyYn18NmK9fD46uXxCT818RnFVfE4t8XxSSol8ViPhfFpxWXxeVpF8YjU9fG5JvXx+S7V8llu1fJoy3XyeMyl8pnFdfLZxYXy+cXl8xjuNfNZKjXzeLrV84nFlfPJVKXz6SZV9BnFpfSJxbX0qLrl9MnFxfTpxdX1GcX19Tk5ZfVpxgX1ecYV9ZnGJfXJxTX12cUl9hnGNfYoxgX2aVRl9pjcpfapVWX2uSpF9slWpfbZxkX3CPsl9xiWVfc5xlX3ecZl95lvBffJTeX3+caV+AiZ1fgZCqX4KcaF+DnGdfhIxhX4WR0l+HnG1fiJxrX4qcal+Ll6VfjIzjX5CPmV+RnGxfkpNrX5OPXV+Xk75fmJxwX5mcb1+enG5foJxxX6GM5F+onHJfqZWcX6qPel+tnHNfrpT3X7OTv1+0kqVfuZNPX7ycdF+9i0pfw5BTX8WVS1/MivVfzZRFX9acdV/XjnVf2JZZX9mWWl/ciZ5f3Zx6X+CSiV/knHdf64n1X/Ccq1/xnHlf9ZRPX/iceF/7nHZf/Y2aX/+cfGAOnINgD5yJYBCcgWASk3tgFZyGYBaVfGAZnIBgG5yFYByX5WAdjnZgIJHTYCGcfWAli31gJpyIYCeQq2AoiYVgKZyCYCqJ9mArnIdgL4uvYDGchGA6nIpgQZyMYEKclmBDnJRgRpyRYEqckGBLl/ZgTZySYFCLsGBSjVBgVY+aYFmcmWBanItgX5yPYGCcfmBiifhgY5yTYGSclWBlknBgaI2mYGmJtmBqnI1ga5yYYGycl2Bti7Fgb5GnYHCKhmB1jGJgd5yOYIGcmmCDnJ1ghJyfYImOu2CLnKVgjJLuYI2cm2CSnKNglIn3YJacoWCXnKJgmpyeYJucoGCfjOVgoJdJYKOKs2CmiXhgp5ykYKmUWWCqiKtgspTfYLOce2C0nKpgtZyuYLaW42C4nKdgvJOJYL2crGDFj+5gxpytYMeT1WDRmGZg05ypYNicr2DajZtg3JDJYN+I0mDgnKhg4ZymYOOReWDnnJxg6I5TYPCRxGDxnLtg85F6YPSctmD2nLNg95y0YPmO5GD6nLdg+5y6YQCctWEBj0RhA5y4YQacsmEIlvphCZb5YQ2cvGEOnL1hD4jTYRWcsWEai/BhG4ikYR+KtGEhnLlhJ5zBYSicwGEsnMVhNJzGYTycxGE9nMdhPpy/YT+cw2FCnMhhRJzJYUecvmFIjpxhSpzCYUuR1GFMjVFhTZywYU6QVGFTnNZhVZXnYViczGFZnM1hWpzOYV2c1WFfnNRhYpadYWOKtWFlnNJhZ4xkYWiKU2FrnM9hbpe2YW+c0WFwiNRhcZzTYXOcymF0nNBhdZzXYXaMY2F3nMthfpd8YYKXSmGHnNphipzeYY6RnmGQl/dhkZzfYZSc3GGWnNlhmZzYYZqc3WGkla5hp5OyYamMZWGrnOBhrJzbYa6c4WGyjJthtomvYbqc6WG+irZhw5znYcac6GHHjadhyJzmYcmc5GHKnONhy5zqYcyc4mHNnOxh0In5YeOc7mHmnO1h8pKmYfSc8WH2nO9h95zlYfiMnGH6nPBh/Jz0Yf2c82H+nPVh/5zyYgCc9mIInPdiCZz4YgqV6GIMnPpiDZz5Yg6PXmIQkKxiEYnkYhKJ+mIUnPtiFoi9YhqQymIbnPxiHebBYh6dQGIfjIFiIZ1BYiaQ7WIqnUJiLp1DYi+LWWIwnURiMp1FYjOdRmI0kdViOIzLYjuW32I/lltiQI+KYkGdR2JHkO5iSOe7YkmU4GJLjuhiTY3LYk6dSGJTkcViVZWlYliR72JbnUtiXp1JYmCdTGJjnUpiaJ1NYm6Vr2JxiLVidpV9YnmU4WJ8nU5ifp1RYn+Ps2KAi1pigp1PYoOdVmKEj7RiiZ1QYoqUY2KRl31ikp1SYpOdU2KUnVdilZOKYpadVGKXjVJimJDcYpudZWKclLJinpHwYquU4mKsnatisZX4YrWS72K5lpViu51aYryJn2K9kopiwp1jYsWSU2LGnV1ix51kYsidX2LJnWZiyp1iYsydYWLNlI9iz51bYtCJ+2LRnVli0ouRYtOR8WLUnVVi151YYtiNU2LZkNli24+1YtydYGLdlHFi4IuSYuGKZ2Lsiodi7ZBAYu6daGLvnW1i8Z1pYvOMnWL1nW5i9o5BYveNiWL+j0Vi/51cYwGOnWMCnWtjB453YwidbGMJiMJjDJ1nYxGSp2MZi5NjH4uyYyedamMoiKVjK43BYy+QVWM6kvBjPZTSYz6dcGM/kX1jSZGoY0yOSmNNnXFjT51zY1Cdb2NVld9jV5K7Y1yRe2NnlfljaI7MY2mdgGNrnX5jbpCYY3KMnmN2nXhjd4+3Y3qT5mN7lFBjgJ12Y4ORfGOIjvZjiZ17Y4yPtmOOnXVjj516Y5KUcmOWnXRjmIxAY5uKfGOfnXxjoJepY6GNzGOiklRjo515Y6WQ2mOnjVRjqJCEY6mJhmOqkVtjq513Y6yLZGOyjGZjtJLNY7WdfWO7kX5jvp2BY8Cdg2PDkbVjxJ2JY8adhGPJnYZjz5VgY9CS8WPSnYdj1pdLY9qXZ2Pbirdj4YisY+OdhWPpnYJj7or2Y/SJh2P2nYhj+pdoZAadjGQNkblkD52TZBOdjWQWnYpkF52RZBydcmQmnY5kKJ2SZCyUwGQtk4tkNJ2LZDadj2Q6jGdkPo3vZEKQ22ROnZdkWJNFZGedlGRploBkb52VZHadlmR4lsxkepCgZIOMgmSInZ1kko5UZJOdmmSVnZlkmpRRZJ6Ts2Skk1BkpZ2bZKmdnGSrlY9krZRkZK6OQmSwkO9kspZvZLmKaGS7naNkvJ2eZMGXaWTCnaVkxZ2hZMedomTNkYBk0p2gZNSdXmTYnaRk2p2fZOCdqWThnapk4pNGZOOdrGTmjkNk552nZOyLW2Tvna1k8Z2mZPKdsWT0nbBk9p2vZPqdsmT9nbRk/o/vZQCds2UFnbdlGJ21ZRydtmUdnZBlI525ZSSduGUqnZhlK526ZSydrmUvjnhlNJ27ZTWdvGU2nb5lN529ZTidv2U5ifxlO41VZT6V+mU/kK1lRYzMZUidwWVNncRlT5VxZVGLfmVVncNlVp3CZVeUc2VYncVlWYuzZV2dx2VencZlYoq4ZWOOVWVmk9ZlbIxoZXCQlGVynchldJCuZXWTR2V3lX5leJ3JZYKdymWDnctlh5W2ZYibfGWJkMRljJVrZY6N1mWQlONlkZTBZZeTbGWZl79lm53NZZyOzmWfnc5loYi0ZaSL0mWlkMtlp5WAZaudz2WsjmFlrZJmZa+OemWwkFZlt53QZbmV+2W8iZdlvY57ZcGd02XDndFlxJ3UZcWXt2XGndJly5D5Zcyd1WXPkbBl0p3WZdeK+GXZndhl253XZeCd2WXhndpl4or5ZeWT+mXmklVl54uMZeiOfGXpkYFl7I97Ze2IrmXxndtl+omgZfud32YCjVZmA53eZgaNqWYHj7hmCp3dZgyPuWYOlr5mD42oZhOI1WYUkMxmHJ3kZh+Qr2YgiWZmJY90ZieWhmYojfBmLY+6Zi+QpWY0neNmNZ3hZjad4mY8kotmP55FZkGd6GZCjp5mQ41XZkSd5mZJnedmS5BXZk+d5WZSjk5mXZ3qZl6d6WZfne5mYp3vZmSd62ZmikFmZ53sZmid7WZplNNmbpWBZm+MaWZwnfBmdJCwZnaPu2Z6knFmgYvFZoOd8WaEnfVmh4nJZoid8maJnfRmjp3zZpGPi2aWkmdml4jDZpid9madnfdmopKoZqaX72arjmJmrpXpZrSWXGa4nkFmuZ35Zryd/Ga+nftmwZ34ZsSeQGbHk9xmyZ36ZtaeQmbZj4xm2p5DZtyXambdlJhm4J5EZuaeRmbpnkdm8J5IZvKLyGbziWdm9I1YZvWeSWb3nkpm+I+RZvmRgmb8mdZm/ZFdZv6RXGb/kdZnAI3FZwOY8GcIjI5nCZdMZwuV/GcNlZ5nD55LZxSN8WcVkr1nFp5MZxeYTmcbll1nHZKpZx6eTWcfivpnJp5OZyeeT2colthnKpaiZyuWlmcslntnLY5EZy6eUWcxjulnNJZwZzaeU2c3nlZnOJ5VZzqK92c9i4BnP55SZ0GeVGdGnldnSZCZZ06Xm2dPiMdnUI3eZ1GRumdTjttnVo/xZ1meWmdck21nXp5YZ1+RqWdgnllnYY/wZ2KW22djnltnZJ5cZ2WXiGdqnmFnbY1ZZ2+UdGdwnl5ncZOMZ3Kd3GdzneBndYtuZ3eUZmd8nmBnfo+8Z3+UwmeFnmZnh5T4Z4meXWeLnmNnjJ5iZ5CQzWeVlo1nl5fRZ5qWh2ecicpnnY59Z6CYZ2ehnmVnopCVZ6aeZGepnl9nr4zNZ7Oea2e0nmlntonLZ7eeZ2e4nm1nuZ5zZ8GRxmfElb9nxp51Z8qVQWfOnnRnz5SQZ9CWXmfRirln05D1Z9SPX2fYktFn2pdNZ92ecGfenm9n4p5xZ+SebmfnnnZn6Z5sZ+yeamfunnJn755oZ/GSjGfzlvZn9I7EZ/WN8mf7jbhn/paPZ/+KYGgCksxoA5PIaASJaGgTkPBoFpCyaBeMSWgennhoIY1aaCKKnGgpnnpoKoqUaCuegWgynn1oNJDxaDiKamg5japoPIppaD2NzWhAnntoQYyFaEKMamhDk41oRp55aEiIxGhNnnxoTp5+aFCLy2hRjEtoU4q6aFSLamhZnoJoXI33aF2WkWhfjlZoY56DaGeVT2h0no9odomxaHeehGh+npVof56FaIGXwGiDnoxohZR+aI2elGiPnodok4iyaJSeiWiXjVtom56LaJ2eimifnoZooJ6RaKKPvWimmutop4zmaKiXnGitnohor5LyaLCKQmixjatos56AaLWekGi2ioFouZ6OaLqekmi8k45oxIr8aMaesGjJlsdoyp6XaMuK+2jNnp5o0pZfaNSen2jVnqFo156laNiemWjakklo35OPaOCeqWjhnpxo456maOeeoGjukFho756qaPKQsWj5nqho+oq7aQCYb2kBnpZpBJ6kaQWI1mkInphpC5a4aQyenWkNkEFpDpLFaQ+ek2kSnqNpGZCaaRqerWkbipFpHIyfaSGer2kinpppI56uaSWep2kmnptpKJ6raSqerGkwnr1pNJPMaTaeomk5nrlpPZ67aT+S1mlKl2tpU5WWaVSetmlVkchpWZ68aVqRXmlcnrNpXZ7AaV6ev2lgk+1pYZ6+aWKT6GlqnsJpa561aW2Lxmlunrhpb498aXOUgGl0nrppdYvJaXeesml4nrRpeZ6xaXyYT2l9inlpfp63aYGewWmCilRpio3laY6JfGmRntJplJhQaZWe1WmbkFlpnJ7UaaCe02mnntBprp7EabGe4WmynsNptJ7Wabuezmm+nslpv57GacGex2nDns9px+qgacqezGnLjVxpzJLGac2RhGnOnspp0J7FadOeyGnYl2xp2ZaKad2ezWnentdp557faeie2GnrnuVp7Z7jafKe3mn5nt1p+5LOaf2RhWn/nttqAp7ZagWe4GoKnuZqC5Tzagye7GoSnudqE57qahSe5GoXkpRqGZVXahue2moenuJqH4++aiGWzWoinvZqI57paimMoGoqiaFqK4p+ai6e0Wo1j79qNp7uajie9Wo5jvdqOoqSaj2STWpEnutqR57wakie9GpLi7RqWItralme8mpfi0BqYZPJamKe8WpmnvNqcp7tanie72p/ioBqgJJoaoSe+mqNnvhqjoznapCe92qXn0BqnJ53aqCe+Wqinvtqo578aqqfS2qsn0dqrp6NarOfRmq4n0Vqu59CasGe6GrCn0Rqw59DatGfSWrTmEVq2p9MatuL+Wren0hq359KauiUpWrqn01q+p9RavufTmsEl5NrBZ9Pawqe3GsSn1JrFp9Tax2JVGsfn1VrIIyHayGOn2sji9NrJ4miazKXfms3n1drOJ9WazmfWWs6i1xrPYvUaz6KvGtDn1xrR59ba0mfXWtMicxrTpJWa1CfXmtTir1rVJ9ga1mfX2tbn2FrX59ia2GfY2tijn5rY5Cza2SNn2tmlZBraZXga2qYY2tvjpVrc43Oa3SX8Gt4n2RreZ9la3uOgGt/n2ZrgJ9na4OfaWuEn2hrhpZ3a4mPfWuKjupri45ja42famuVn2xrlpBCa5ifa2uen21rpJ9ua6qfb2urn3Brr59xa7Gfc2uyn3Jrs590a7SJo2u1kmlrt591a7qORWu7imtrvJ92a7+TYWvAmsprxYtCa8afd2vLn3hrzZXqa86WiGvSk8Vr0595a9SU5GvYlPlr25bRa9+femvrn3xr7J97a++ffmvzn31sCJ+BbA+OgWwRlq9sE5+CbBSfg2wXi0NsG5+EbCOfhmwkn4VsNJCFbDeVWGw4iWlsPpTDbECS82xBj2BsQouBbE6UxGxQjqxsVZ+IbFeKvmxaiZhsXZPwbF6fh2xfjV1sYJJybGKfiWxon5Fsap+KbHCRv2xyi4Jsc5+SbHqMiGx9i0Rsfp+QbIGfjmyCn4tsg5eAbIiSvmyMk9dsjZ+MbJCflGySn5Nsk4xCbJaJq2yZjblsmp+NbJufj2yhlnZsopHybKuWl2yun5xssZ+dbLOJzWy4laZsuZb7bLqfn2y7jqFsvI/AbL2fmGy+n55sv4mIbMGLtWzEn5VsxZ+abMmQ8mzKlJFszJTlbNOfl2zVlkBs15+ZbNmfomzbn6Bs3Z+bbOGWQWzilGds44uDbOWTRGzoko1s6p+jbO+foWzwkdds8Z+WbPOJam0Ll21tDJ+ubRKfrW0XkPRtGZ+qbRuXjG0ek7RtH5+kbSWSw20piWttKo1ebSufp20yj0ZtM5+sbTWfq202n6ZtOJ+pbTuKiG09n6htPpRobUGXrG1Ej/JtRZDzbVmftG1an7JtXJVsbWOfr21kn7FtZolZbWmNX21qmFFtbIpcbW6Vgm10l4Ftd4pDbXiQWm15n7NthZ+4bYiPwW2Ml09tjp+1bZOfsG2Vn7ZtmZfcbZuTk22ck8Btr4pVbbKJdG21n7xtuJ+/bbyXwW3Al4RtxZ/GbcafwG3Hn71ty5fS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hWmToIVqlZOFbeVKhXflUIV+5VGFgOVEhYSUloWH5U6FiOVGhYrlSIWQ5VKFkeVHhZTlS4WXiZKFmZPjhZvlTIWc5U+FpOVFhaaRRYWo5UmFqY5GhaqQZIWrjE+FrJbyha6W94Wvj5KFueVWhbrlVIXBmG2FyeVThc2XlYXP5VWF0OVXhdXlWIXc5VuF3eVZheSToYXl5VqF6ZTLherlTYX3j5OF+eVchfrlYYX7kZSF/uVghgLlQYYG5WKGB5FohgrlXYYL5V+GE+VehhafUIYXn0GGGuVkhiLlY4Ytl5aGL+G6hjDlZYY/5WaGTeVnhk6M1YZQi3OGVOVphlWZfIZai5WGXJe4hl6L8YZf5WqGZ+VrhmuSjoZx5WyGeZP4hnuIuIaKieGGi+VxhozlcoaT5W2GlY5chqPlboaklGGGqeVvhqrlcIar5XqGr+V0hrDld4a25XOGxOV1hsbldobHjtaGyeV4hsuSYIbNjHWGzophhtTle4bZil6G2+WBht7lfIbf5YCG5JS4hunlfYbs5X6G7ZVnhu6U2Ibv5YKG+JH7hvnljIb75YiG/onphwDlhocClkmHA+WHhwblhIcI5YWHCeWKhwrljYcN5YuHEeWJhxLlg4cYkneHGuWUhxyWqIcl5ZKHKeWThzTljoc35ZCHO+WRhz/lj4dJkOSHS5hYh0zlmIdO5ZmHU+Wfh1WQSYdX5ZuHWeWeh1/llodg5ZWHY+Wgh2aJ2odo5ZyHauWhh27lnYd05ZqHdpKxh3jll4d/lIiHguWlh42XWoef5aSHouWjh6vlrIev5aaHs+Wuh7qXhoe75bGHveWoh8DlqYfE5a2HxuWwh8flr4fL5aeH0OWqh9Llu4fg5bSH7+Wyh/Lls4f25biH9+W5h/mKSYf7i2GH/uW3iAXloogN5baIDuW6iA/ltYgR5byIFeW+iBblvYgh5cCIIuW/iCPleYgn5cSIMeXBiDblwog55cOIO+XFiECMjIhC5ceIROXGiEaPT4hMjXOITZ+liFLlyIhTj3CIV4pYiFnlyYhbiXGIXY/ViF7lyohhjXSIYuXLiGOI34holVyIa+XMiHCQiohy5dOIdeXQiHeSj4h95dGIfuXOiH+L3IiB5c2IguXUiIiMVYiLkdyIjeXaiJLl1oiWkbOIl+XViJnl2Iie5c+IouXZiKTl24irlO2IruXX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ljKWaJY7kWqWP4iilkCRyZZC6JiWRJWNlkvom5ZM6JmWTY1+lk/ompZQjMCWW5XDllzonZZd6J+WXuiell/ooJZiiUCWY5B3lmSPnJZliteWZuihlmqUhpZs6KOWcIlBlnLoopZzksKWdZfLlnaTqZZ36JyWeJeklnqMr5Z9l3qWhYv3loaXspaIjEeWipHglovkQJaN6KSWjopLlo+Qj5aUinWWleimlpfop5aY6KWWmYyElpuN25acj+GWoIlClqOX15an6KmWqOeslqroqJaw6KyWseiqlrLoq5a06K2WtuiulreX6pa46K+WueiwlruQx5a8lLmWwJCdlsGK5ZbEl1mWxYnrlsaPV5bHjNmWyeizlsvospbMjpOWzei0ls7osZbRjkeW1ei4ltblq5bZmdSW25CXltzotpbil6OW45PvluiJSpbqkOGW6460lvCVtZbyiV+W9pfrlveXi5b56LmW+5NklwCO+ZcE6LqXBui7lweQa5cI6LyXCpfslw3ot5cO6L6XD+jAlxHov5cT6L2XFujBlxnowpcckZqXHonglyTow5cnlraXKujElzDoxZcymEmXOJ5Qlznoxpc96MeXPujIl0LozJdE6MmXRujKl0joy5dJ6M2XUpDCl1aW9ZdZkMOXXOjOl16U8Zdg6M+XYepyl2KWypdk6NCXZujRl2jo0pdpinaXa+jUl22QeJdx6NWXdIxDl3no1pd66NqXfOjYl4Ho2ZeEipOXhejXl4bo25eL6NyXjYjGl4/o3ZeQ6N6XmI/il5zo35egi2aXo+jil6bo4Zeo6OCXq+aRl62V2pez6OOXtOjkl8Po5ZfG6OaXyOjnl8vo6JfTitiX3Ojpl+3o6pfulEKX8ujsl/OJuZf16O+X9ujul/uJQ5f/i7+YAZXFmAKSuJgDjaCYBY2AmAaPh5gIkHuYDOjxmA/o8JgQl2GYEYrmmBKU0JgTk9qYF5CcmBiXzJgajHqYIej0mCTo85gslmqYLZOqmDSJb5g36PWYOOjymDuVcJg8l4qYPej2mEbo95hL6PmYTJHomE2KephOinuYT+j4mFSK55hVjLCYWIromFuTXphel96YZ4zamGvo+phv6PuYcOj8mHHpQJhz6UKYdOlBmKiVl5iq6UOYr+lEmLHpRZi26UaYw+lImMTpR5jG6UmY25TymNzjypjfkEiY4otRmOnpSpjr6UuY7ZmqmO6fWpjvlNGY8oj5mPSIuZj8jpSY/ZZPmP6P/JkD6UyZBZbdmQnpTZkKl3uZDIlhmRCOYJkS6U6ZE4nsmRTpT5kY6VCZHelSmR7pU5kg6VWZIelRmSTpVJkoitmZLOlWmS7pV5k96ViZPulZmULpWplF6VyZSelbmUvpXplM6WGZUOldmVHpX5lS6WCZVelimVeLwJmWjvGZl+ljmZjpZJmZjYGZpellmaiKXZmslG6Zrelmma7pZ5mzknmZtJPpmbzpaJnBlJ2ZxJHKmcWJd5nGi+yZyIvtmdCSk5nR6W2Z0ovumdWJ7ZnY6WyZ2+lqmd3pa5nf6WmZ4ul3me3pbpnu6W+Z8elwmfLpcZn46XOZ++lymf+PeJoB6XSaBel2mg6LUpoP6XWaEpGbmhOMsZoZ6XiaKJHLmivpeZowk6uaN+l6mj7pgJpA6X2aQul8mkPpfppF6XuaTemCmlXpgZpX6YSaWovBmlvpg5pf6YWaYumGmmTpiJpl6YeaaemJmmrpi5pr6YqaqI2cmq3pjJqw6Y2auIpbmrzpjprA6Y+axJCRms/pkJrR6ZGa0+mSmtTpk5rYjYKa3umUmt/plZri6Zaa4+mXmubpmJrqlK+a6+mamu2VRZru6Zua7+mZmvHpnZr06Zya9+memvvpn5sG6aCbGOmhmxrpopsf6aObIumkmyPppZsl6aabJ+mnmyjpqJsp6ambKumqmy7pq5sv6aybMZ9UmzLprZs74vabPItTm0GKQJtCjbCbQ+mvm0TprptFlqObTemxm07psptP6bCbUemzm1SWgptY6bSbWoubm2+YRJt06bWbg+m3m46IvJuR6bibkpWpm5PptpuW6bmbl+m6m5/pu5ug6bybqOm9m6qWjpurjkybrY34m66RTpu06b6buenBm8Dpv5vG6cKbyYzvm8rpwJvP6cOb0enEm9LpxZvU6cmb1o5Jm9uR4pvh6cqb4unHm+Ppxpvk6cib6Ix+m/Dpzpvx6c2b8unMm/WIsZwE6dicBunUnAjp1ZwJ6dGcCunXnAzp05wNioKcEJhrnBLp1pwT6dKcFOnQnBXpz5wb6dqcIendnCTp3Jwl6ducLZVonC7p2ZwviPGcMOnenDLp4Jw5io+cOunLnDuJVpw+6eKcRunhnEfp35xIkkycUpaQnFeX2Jxa6eOcYOnknGfp5Zx26eaceOnnnOWSuZzn6eic6ZS1nOvp7Zzs6emc8OnqnPOWUJz0lsKc9pPOnQPp7p0G6e+dB5O8nQjp7J0J6eudDomonRLp950V6fadG4mVnR/p9J0j6fOdJunxnSiKm50q6fCdK46wnSyJp507jYOdPun6nT/p+Z1B6fidROn1nUbp+51I6fydUOpEnVHqQ51Z6kWdXIlMnV3qQJ1e6kGdYI2UnWGWt51k6kKdbJZRnW/qSp1y6kadeupLnYfqSJ2J6kedj4x7nZrqTJ2k6k2dqepOnavqSZ2v6fKdsupPnbSS35246lOduupUnbvqUp3B6lGdwupXncTqUJ3G6lWdz+pWndPqWZ3Z6lid5upbne3qXJ3v6l2d8phonfjqWp35kemd+o3rnf3qXp4a6l+eG+pgnh7qYZ516mKeeIyynnnqY5596mSef46tnoHqZZ6I6maei+pnnozqaJ6R6muekuppnpOYW56V6mqel5ftnp3qbJ6fl9mepeptnqaUnp6p6m6equpwnq3qcZ646m+euY2NnrqWy567loOevJv1nr6fgJ6/lpuexImpnszqc57Ni2+ezup0ns/qdZ7Q6nae0o2VntTqd57Y4NKe2ZbZntuR4Z7c6nie3ep6nt7qeZ7g6nue5ep8nujqfZ7v6n6e9OqAnvbqgZ736oKe+eqDnvvqhJ786oWe/eqGnwfqh58I6oifDpNDnxOM258V6oqfIJFsnyHqi58s6oyfO5VAnz7qjZ9K6o6fS+JWn07m2J9P6OufUuqPn1TqkJ9f6pKfYOqTn2HqlJ9il+6fY+qRn2bqlZ9n6pafauqYn2zql59y6pqfduqbn3fqmZ+Nl7Sfleqcn5zqnZ+d4nOfoOqe/wGBSf8DgZT/BIGQ/wWBk/8GgZX/CIFp/wmBav8KgZb/C4F7/wyBQ/8OgUT/D4Fe/xCCT/8RglD/EoJR/xOCUv8UglP/FYJU/xaCVf8Xglb/GIJX/xmCWP8agUb/G4FH/xyBg/8dgYH/HoGE/x+BSP8ggZf/IYJg/yKCYf8jgmL/JIJj/yWCZP8mgmX/J4Jm/yiCZ/8pgmj/KoJp/yuCav8sgmv/LYJs/y6Cbf8vgm7/MIJv/zGCcP8ygnH/M4Jy/zSCc/81gnT/NoJ1/zeCdv84gnf/OYJ4/zqCef87gW3/PIFf/z2Bbv8+gU//P4FR/0CBTf9BgoH/QoKC/0OCg/9EgoT/RYKF/0aChv9Hgof/SIKI/0mCif9Kgor/S4KL/0yCjP9Ngo3/ToKO/0+Cj/9QgpD/UYKR/1KCkv9TgpP/VIKU/1WClf9Wgpb/V4KX/1iCmP9Zgpn/WoKa/1uBb/9cgWL/XYFw/2EAof9iAKL/YwCj/2QApP9lAKX/ZgCm/2cAp/9oAKj/aQCp/2oAqv9rAKv/bACs/20Arf9uAK7/bwCv/3AAsP9xALH/cgCy/3MAs/90ALT/dQC1/3YAtv93ALf/eAC4/3kAuf96ALr/ewC7/3wAvP99AL3/fgC+/38Av/+AAMD/gQDB/4IAwv+DAMP/hADE/4UAxf+GAMb/hwDH/4gAyP+JAMn/igDK/4sAy/+MAMz/jQDN/44Azv+PAM//kADQ/5EA0f+SANL/kwDT/5QA1P+VANX/lgDW/5cA1/+YANj/mQDZ/5oA2v+bANv/nADc/50A3f+eAN7/nwDf/+OBUP/lgY8=";
363
- var SJIS_COUNT = 7070;
364
- var base64DecodeInputStream = function (str) {
365
-
366
- var _str = str;
367
- var _pos = 0;
368
- var _buffer = 0;
369
- var _buflen = 0;
370
-
371
- var _this = {};
372
-
373
- _this.read = function () {
374
-
375
- while (_buflen < 8) {
376
-
377
- if (_pos >= _str.length) {
378
- if (_buflen == 0) {
379
- return -1;
380
- }
381
- throw 'unexpected end of file./' + _buflen;
382
- }
383
-
384
- var c = _str.charAt(_pos);
385
- _pos += 1;
386
-
387
- if (c == '=') {
388
- _buflen = 0;
389
- return -1;
390
- } else if (c.match(/^\s$/)) {
391
- // ignore if whitespace.
392
- continue;
393
- }
394
-
395
- _buffer = (_buffer << 6) | decode(c.charCodeAt(0));
396
- _buflen += 6;
397
- }
398
-
399
- var n = (_buffer >>> (_buflen - 8)) & 0xff;
400
- _buflen -= 8;
401
- return n;
402
- };
403
-
404
- var decode = function (c) {
405
- if (0x41 <= c && c <= 0x5a) {
406
- return c - 0x41;
407
- } else if (0x61 <= c && c <= 0x7a) {
408
- return c - 0x61 + 26;
409
- } else if (0x30 <= c && c <= 0x39) {
410
- return c - 0x30 + 52;
411
- } else if (c == 0x2b) {
412
- return 62;
413
- } else if (c == 0x2f) {
414
- return 63;
415
- } else {
416
- throw 'c:' + c;
417
- }
418
- };
419
-
420
- return _this;
421
- };
422
-
423
- var createStringToBytes = function (unicodeData, numChars) {
424
-
425
- // create conversion map.
426
-
427
- var unicodeMap = function () {
428
-
429
- var bin = base64DecodeInputStream(unicodeData);
430
- var read = function () {
431
- var b = bin.read();
432
- if (b == -1) throw 'eof';
433
- return b;
434
- };
435
-
436
- var count = 0;
437
- var unicodeMap = {};
438
- while (true) {
439
- var b0 = bin.read();
440
- if (b0 == -1) break;
441
- var b1 = read();
442
- var b2 = read();
443
- var b3 = read();
444
- var k = String.fromCharCode((b0 << 8) | b1);
445
- var v = (b2 << 8) | b3;
446
- unicodeMap[k] = v;
447
- count += 1;
448
- }
449
- if (count != numChars) {
450
- throw count + ' != ' + numChars;
451
- }
452
-
453
- return unicodeMap;
454
- }();
455
-
456
- var unknownChar = '?'.charCodeAt(0);
457
-
458
- return function (s) {
459
- var bytes = [];
460
- for (var i = 0; i < s.length; i += 1) {
461
- var c = s.charCodeAt(i);
462
- if (c < 128) {
463
- bytes.push(c);
464
- } else {
465
- var b = unicodeMap[s.charAt(i)];
466
- if (typeof b == 'number') {
467
- if ((b & 0xff) == b) {
468
- // 1byte
469
- bytes.push(b);
470
- } else {
471
- // 2bytes
472
- bytes.push(b >>> 8);
473
- bytes.push(b & 0xff);
474
- }
475
- } else {
476
- bytes.push(unknownChar);
477
- }
478
- }
479
- }
480
- return bytes;
481
- };
482
- };
483
-
484
- var SJIS = createStringToBytes(SJIS_BASE64,SJIS_COUNT);
485
-
486
- var sjis = SJIS;
487
-
488
- var QR_MODE$3 = 1 << 3;
489
- var qrKanji = function (stringToBytes) {
490
- stringToBytes = typeof stringToBytes == 'function' ? stringToBytes : sjis;
491
- // !function (c, code) {
492
- // // self test for sjis support.
493
- // var test = stringToBytes(c);
494
- // if (test.length != 2 || ((test[0] << 8) | test[1]) != code) {
495
- // throw 'sjis not supported.';
496
- // }
497
- // }('\u53cb', 0x9746);
498
- return function (data) {
499
- var _bytes = stringToBytes(data);
500
- var _this = {};
501
-
502
- _this.getMode = function () {
503
- return QR_MODE$3;
504
- };
505
-
506
- _this.getLength = function (buffer) {
507
- return ~~(_bytes.length / 2);
508
- };
509
-
510
- _this.write = function (buffer) {
511
- var data = _bytes;
512
- var i = 0;
513
-
514
- while (i + 1 < data.length) {
515
- var c = ((0xff & data[i]) << 8) | (0xff & data[i + 1]);
516
- if (0x8140 <= c && c <= 0x9FFC) {
517
- c -= 0x8140;
518
- } else if (0xE040 <= c && c <= 0xEBBF) {
519
- c -= 0xC140;
520
- } else {
521
- throw 'illegal char at ' + (i + 1) + '/' + c;
522
- }
523
- c = ((c >>> 8) & 0xff) * 0xC0 + (c & 0xff);
524
- buffer.put(c, 13);
525
- i += 2;
526
- }
527
-
528
- if (i < data.length) {
529
- throw 'illegal char at ' + (i + 1);
530
- }
531
- };
532
-
533
- return _this;
534
- };
535
- };
536
-
537
- var Kanji = qrKanji;
538
-
539
- var QRMode = {
540
- MODE_NUMBER: 1 << 0,
541
- MODE_ALPHA_NUM: 1 << 1,
542
- MODE_8BIT_BYTE: 1 << 2,
543
- MODE_KANJI: 1 << 3
544
- };
545
-
546
- var QRErrorCorrectionLevel = {
547
- L: 1,
548
- M: 0,
549
- Q: 3,
550
- H: 2
551
- };
552
-
553
- var QRMaskPattern = {
554
- PATTERN000: 0,
555
- PATTERN001: 1,
556
- PATTERN010: 2,
557
- PATTERN011: 3,
558
- PATTERN100: 4,
559
- PATTERN101: 5,
560
- PATTERN110: 6,
561
- PATTERN111: 7
562
- };
563
-
564
- // 获取掩模函数
565
- var getQRMaskFunction = (function () {
566
- var QRMaskFunctions = [
567
- function (i, j) {
568
- return (i + j) % 2 == 0;
569
- },
570
- function (i, j) {
571
- return i % 2 == 0;
572
- },
573
- function (i, j) {
574
- return j % 3 == 0;
575
- },
576
- function (i, j) {
577
- return (i + j) % 3 == 0;
578
- },
579
- function (i, j) {
580
- return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;
581
- },
582
- function (i, j) {
583
- return (i * j) % 2 + (i * j) % 3 == 0;
584
- },
585
- function (i, j) {
586
- return ((i * j) % 2 + (i * j) % 3) % 2 == 0;
587
- },
588
- function (i, j) {
589
- return ((i * j) % 3 + (i + j) % 2) % 2 == 0;
590
- }
591
- ];
592
- return function (maskPattern) {
593
- var fn = QRMaskFunctions[maskPattern];
594
- if (!fn) throw new Error('maskPattern:' + maskPattern);
595
- return fn;
596
- }
597
- }());
598
-
599
- // 获取数据块长度
600
- var getLengthInBits = (function () {
601
- // 各模式数据块长度
602
- var BITS_LENGTH_LIST = {};
603
- BITS_LENGTH_LIST[QRMode.MODE_NUMBER] = [10, 12, 14];
604
- BITS_LENGTH_LIST[QRMode.MODE_ALPHA_NUM] = [9, 11, 13];
605
- BITS_LENGTH_LIST[QRMode.MODE_8BIT_BYTE] = [8, 16, 16];
606
- BITS_LENGTH_LIST[QRMode.MODE_KANJI] = [8, 10, 12];
607
-
608
- return function (mode, type) {
609
- if (1 <= type && type <= 40) {
610
- var lengths = BITS_LENGTH_LIST[mode];
611
- if (!lengths) throw 'mode:' + mode;
612
- var index = type <= 9 ? 0 :
613
- type <= 26 ? 1 :
614
- 2;
615
- return lengths[index];
616
- } else {
617
- throw new Error('type:' + type);
618
- }
619
- }
620
- }());
621
-
622
- // 通过矩阵获取,版本
623
- var map2typeNumber = function (map) {
624
- return (map.length - 17) / 4;
625
- };
626
-
627
- var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);
628
- var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);
629
- var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);
630
-
631
- var getBCHDigit = function (data) {
632
- var digit = 0;
633
- while (data != 0) {
634
- digit++;
635
- data >>>= 1;
636
- }
637
- return digit;
638
- };
639
-
640
- var getBCHTypeInfo = function (data) {
641
- var d = data << 10;
642
- while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {
643
- d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15)));
644
- }
645
- return ((data << 10) | d) ^ G15_MASK;
646
- };
647
-
648
- var getBCHTypeNumber = function (data) {
649
- var d = data << 12;
650
- while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {
651
- d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18)));
652
- }
653
- return (data << 12) | d;
654
- };
655
-
656
- // 模拟Buffer
657
- var qrBitBuffer = function () {
658
-
659
- var _buffer = [];
660
- var _length = 0;
661
- var _this = {};
662
-
663
- _this.getBuffer = function () {
664
- return _buffer;
665
- };
666
-
667
- _this.getAt = function (index) {
668
- var bufIndex = ~~(index / 8);
669
- var bitIndex = 7 - index % 8;
670
- return ((_buffer[bufIndex] >>> bitIndex) & 1) === 1;
671
- };
672
-
673
- _this.put = function (num, length) {
674
- length = ~~length;
675
- if (length < 0) throw new Error('length:' + length)
676
- while (length--) {
677
- _this.putBit(((num >>> length) & 1) === 1);
678
- }
679
- };
680
-
681
- _this.getLengthInBits = function () {
682
- return _length;
683
- };
684
-
685
- _this.putBit = function (bit) {
686
- var bufIndex = ~~(_length / 8);
687
- if (_buffer.length <= bufIndex) {
688
- _buffer.push(0);
689
- }
690
- if (bit) {
691
- _buffer[bufIndex] |= (0x80 >>> (_length % 8));
692
- }
693
- _length += 1;
694
- };
695
-
696
- return _this;
697
- };
698
-
699
- // 填充侦测图
700
- var setupPositionProbePattern = function (map, row, col) {
701
- // var mapLength = map.length;
702
- // for (var r = -1; r <= 7; r++) {
703
- // if (row + r <= -1 || mapLength <= row + r) continue;
704
- // for (var c = -1; c <= 7; c++) {
705
- // if (col + c <= -1 || mapLength <= col + c) continue;
706
- // if ((0 <= r && r <= 6 && (c == 0 || c == 6)) ||
707
- // (0 <= c && c <= 6 && (r == 0 || r == 6)) ||
708
- // (2 <= r && r <= 4 && 2 <= c && c <= 4)) {
709
- // map[row + r][col + c] = true;
710
- // } else {
711
- // map[row + r][col + c] = false;
712
- // }
713
- // }
714
- // }
715
- square_wk(map, row - 1, col - 1, false, 7 + 2);
716
- square_wk(map, row, col, true, 7);
717
- square_wk(map, row + 1, col + 1, false, 7 - 2);
718
- square_fill(map, row + 2, col + 2, true, 3);
719
- };
720
-
721
- //画正方型
722
- var square_wk = function (map, row, col, val, L) {
723
- var mapLength = map.length;
724
- function w(x, y) {
725
- var l = L;
726
- while (--l) {
727
- row += x, col += y;
728
- if (row < 0 || col < 0 || row >= mapLength || col >= mapLength) continue;
729
- map[row][col] = val;
730
- }
731
- }
732
- if (L < 0) return;
733
- (row < 0 || col < 0 || row >= mapLength || col >= mapLength) || (map[row][col] = val);
734
- if (L > 1) {
735
- w(1, 0), w(0, 1), w(-1, 0), w(0, -1);
736
- }
737
- };
738
-
739
- //填充正方型
740
- var square_fill = function (map, row, col, val, L) {
741
- while (L > 0) {
742
- square_wk(map, row++, col++, val, L);
743
- L -= 2;
744
- }
745
- };
746
-
747
- // 填充所有侦测图
748
- var setupAllPositionProbePattern = function (map) {
749
- var mapLength = map.length;
750
- setupPositionProbePattern(map, 0, 0);
751
- setupPositionProbePattern(map, mapLength - 7, 0);
752
- setupPositionProbePattern(map, 0, mapLength - 7);
753
- };
754
-
755
- // 填充校正图
756
- var setupPositionAdjustPattern = (function () {
757
- var PATTERN_POSITION_TABLE = [
758
- [],
759
- [6, 18],
760
- [6, 22],
761
- [6, 26],
762
- [6, 30],
763
- [6, 34],
764
- [6, 22, 38],
765
- [6, 24, 42],
766
- [6, 26, 46],
767
- [6, 28, 50],
768
- [6, 30, 54],
769
- [6, 32, 58],
770
- [6, 34, 62],
771
- [6, 26, 46, 66],
772
- [6, 26, 48, 70],
773
- [6, 26, 50, 74],
774
- [6, 30, 54, 78],
775
- [6, 30, 56, 82],
776
- [6, 30, 58, 86],
777
- [6, 34, 62, 90],
778
- [6, 28, 50, 72, 94],
779
- [6, 26, 50, 74, 98],
780
- [6, 30, 54, 78, 102],
781
- [6, 28, 54, 80, 106],
782
- [6, 32, 58, 84, 110],
783
- [6, 30, 58, 86, 114],
784
- [6, 34, 62, 90, 118],
785
- [6, 26, 50, 74, 98, 122],
786
- [6, 30, 54, 78, 102, 126],
787
- [6, 26, 52, 78, 104, 130],
788
- [6, 30, 56, 82, 108, 134],
789
- [6, 34, 60, 86, 112, 138],
790
- [6, 30, 58, 86, 114, 142],
791
- [6, 34, 62, 90, 118, 146],
792
- [6, 30, 54, 78, 102, 126, 150],
793
- [6, 24, 50, 76, 102, 128, 154],
794
- [6, 28, 54, 80, 106, 132, 158],
795
- [6, 32, 58, 84, 110, 136, 162],
796
- [6, 26, 54, 82, 110, 138, 166],
797
- [6, 30, 58, 86, 114, 142, 170]
798
- ];
799
- return function (map, typeNumber) {
800
- typeNumber = typeNumber || map2typeNumber(map);
801
- var pos = PATTERN_POSITION_TABLE[typeNumber - 1];
802
- for (var i = 0; i < pos.length; i++) {
803
- for (var j = 0; j < pos.length; j++) {
804
- var row = pos[i];
805
- var col = pos[j];
806
- if (map[row][col] != null) continue;
807
- for (var r = -2; r <= 2; r++) {
808
- for (var c = -2; c <= 2; c++) {
809
- if (r == -2 || r == 2 || c == -2 || c == 2 ||
810
- (r == 0 && c == 0)) {
811
- map[row + r][col + c] = true;
812
- } else {
813
- map[row + r][col + c] = false;
814
- }
815
- }
816
- }
817
- }
818
- }
819
- }
820
- }());
821
-
822
- // 填充定位图
823
- var setupTimingPattern = function (map) {
824
- var mapLength = map.length;
825
- for (var r = 8; r < mapLength - 8; r += 1) {
826
- if (map[r][6] != null) {
827
- continue;
828
- }
829
- map[r][6] = (r % 2 == 0);
830
- }
831
- for (var c = 8; c < mapLength - 8; c += 1) {
832
- if (map[6][c] != null) {
833
- continue;
834
- }
835
- map[6][c] = (c % 2 == 0);
836
- }
837
- };
838
-
839
- // 填充格式信息
840
- var setupTypeInfo = function (map, test, errorCorrectionLevel, maskPattern) {
841
- var mapLength = map.length;
842
- var data = (errorCorrectionLevel << 3) | maskPattern;
843
- var bits = getBCHTypeInfo(data);
844
- // vertical
845
- for (var i = 0; i < 15; i += 1) {
846
- var mod = (!test && ((bits >> i) & 1) == 1);
847
- if (i < 6) {
848
- map[i][8] = mod;
849
- } else if (i < 8) {
850
- map[i + 1][8] = mod;
851
- } else {
852
- map[mapLength - 15 + i][8] = mod;
853
- }
854
- }
855
-
856
- // horizontal
857
- for (var i = 0; i < 15; i += 1) {
858
- var mod = (!test && ((bits >> i) & 1) == 1);
859
- if (i < 8) {
860
- map[8][mapLength - i - 1] = mod;
861
- } else if (i < 9) {
862
- map[8][15 - i - 1 + 1] = mod;
863
- } else {
864
- map[8][15 - i - 1] = mod;
865
- }
866
- }
867
-
868
- // fixed module
869
- map[mapLength - 8][8] = (!test);
870
- };
871
-
872
- // 填充版本信息
873
- var setupTypeNumber = function (map, test, typeNumber) {
874
- typeNumber = typeNumber || map2typeNumber(map);
875
- var mapLength = map.length;
876
- var bits = getBCHTypeNumber(typeNumber);
877
- for (var i = 0; i < 18; i += 1) {
878
- var mod = (!test && ((bits >> i) & 1) == 1);
879
- map[Math.floor(i / 3)][i % 3 + mapLength - 8 - 3] = mod;
880
- }
881
- for (var i = 0; i < 18; i += 1) {
882
- var mod = (!test && ((bits >> i) & 1) == 1);
883
- map[i % 3 + mapLength - 8 - 3][Math.floor(i / 3)] = mod;
884
- }
885
- };
886
-
887
- // 生成空矩阵
888
- function mapInit(size) {
889
- try{
890
- var map = [],
891
- emptyArr = [];
892
- emptyArr.length = size;
893
- while (size--) {
894
- map.push(emptyArr.slice(0));
895
- }
896
- return map;
897
-
898
- }catch(e){
899
- console.log(size);
900
- }
901
- }
902
-
903
- // 拷贝矩阵
904
- function copyMap(map) {
905
- return map.map(function (v) {
906
- return v.slice(0);
907
- })
908
- }
909
-
910
- function compareMap(map, map1, type) {
911
- type = type || "and";
912
- var nMap = [];
913
- var fn = function () {
914
- switch (type) {
915
- case 'or':
916
- case '|':
917
- return function (r, c) {
918
- var a = map[r][c],b = map1[r][c];
919
- if(a || b){return true}
920
- if(a === false || b === false){return false}
921
- // return map[r][c] || map1[r][c];
922
- }
923
- case 'xor':
924
- case '^':
925
- return function (r, c) {
926
- var a = map[r][c],b = map1[r][c];
927
- if(a !== b){ return a || b}
928
- // return !map[r][c] != !map1[r][c];
929
- }
930
- case 'and':
931
- case '&':
932
- return function (r, c) {
933
- var a = map[r][c],b = map1[r][c];
934
- if(a && b){return true}
935
- if(a === false && b === false){return false}
936
- // return map[r][c] && map1[r][c];
937
- }
938
- default:
939
- throw 'type err!'
940
- }
941
- }();
942
- for (var r = 0; r < map.length; r++) {
943
- nMap[r] = [];
944
- for (var c = 0; c < map.length; c++) {
945
- nMap[r][c] = fn(r, c);
946
- }
947
- }
948
- return nMap;
949
- }
950
-
951
- // 获取数据块信息
952
- var getRSBlocks = (function () {
953
- var RS_BLOCK_TABLE = [
954
-
955
- // L
956
- // M
957
- // Q
958
- // H
959
-
960
- // 1
961
- [1, 26, 19],
962
- [1, 26, 16],
963
- [1, 26, 13],
964
- [1, 26, 9],
965
-
966
- // 2
967
- [1, 44, 34],
968
- [1, 44, 28],
969
- [1, 44, 22],
970
- [1, 44, 16],
971
-
972
- // 3
973
- [1, 70, 55],
974
- [1, 70, 44],
975
- [2, 35, 17],
976
- [2, 35, 13],
977
-
978
- // 4
979
- [1, 100, 80],
980
- [2, 50, 32],
981
- [2, 50, 24],
982
- [4, 25, 9],
983
-
984
- // 5
985
- [1, 134, 108],
986
- [2, 67, 43],
987
- [2, 33, 15, 2, 34, 16],
988
- [2, 33, 11, 2, 34, 12],
989
-
990
- // 6
991
- [2, 86, 68],
992
- [4, 43, 27],
993
- [4, 43, 19],
994
- [4, 43, 15],
995
-
996
- // 7
997
- [2, 98, 78],
998
- [4, 49, 31],
999
- [2, 32, 14, 4, 33, 15],
1000
- [4, 39, 13, 1, 40, 14],
1001
-
1002
- // 8
1003
- [2, 121, 97],
1004
- [2, 60, 38, 2, 61, 39],
1005
- [4, 40, 18, 2, 41, 19],
1006
- [4, 40, 14, 2, 41, 15],
1007
-
1008
- // 9
1009
- [2, 146, 116],
1010
- [3, 58, 36, 2, 59, 37],
1011
- [4, 36, 16, 4, 37, 17],
1012
- [4, 36, 12, 4, 37, 13],
1013
-
1014
- // 10
1015
- [2, 86, 68, 2, 87, 69],
1016
- [4, 69, 43, 1, 70, 44],
1017
- [6, 43, 19, 2, 44, 20],
1018
- [6, 43, 15, 2, 44, 16],
1019
-
1020
- // 11
1021
- [4, 101, 81],
1022
- [1, 80, 50, 4, 81, 51],
1023
- [4, 50, 22, 4, 51, 23],
1024
- [3, 36, 12, 8, 37, 13],
1025
-
1026
- // 12
1027
- [2, 116, 92, 2, 117, 93],
1028
- [6, 58, 36, 2, 59, 37],
1029
- [4, 46, 20, 6, 47, 21],
1030
- [7, 42, 14, 4, 43, 15],
1031
-
1032
- // 13
1033
- [4, 133, 107],
1034
- [8, 59, 37, 1, 60, 38],
1035
- [8, 44, 20, 4, 45, 21],
1036
- [12, 33, 11, 4, 34, 12],
1037
-
1038
- // 14
1039
- [3, 145, 115, 1, 146, 116],
1040
- [4, 64, 40, 5, 65, 41],
1041
- [11, 36, 16, 5, 37, 17],
1042
- [11, 36, 12, 5, 37, 13],
1043
-
1044
- // 15
1045
- [5, 109, 87, 1, 110, 88],
1046
- [5, 65, 41, 5, 66, 42],
1047
- [5, 54, 24, 7, 55, 25],
1048
- [11, 36, 12, 7, 37, 13],
1049
-
1050
- // 16
1051
- [5, 122, 98, 1, 123, 99],
1052
- [7, 73, 45, 3, 74, 46],
1053
- [15, 43, 19, 2, 44, 20],
1054
- [3, 45, 15, 13, 46, 16],
1055
-
1056
- // 17
1057
- [1, 135, 107, 5, 136, 108],
1058
- [10, 74, 46, 1, 75, 47],
1059
- [1, 50, 22, 15, 51, 23],
1060
- [2, 42, 14, 17, 43, 15],
1061
-
1062
- // 18
1063
- [5, 150, 120, 1, 151, 121],
1064
- [9, 69, 43, 4, 70, 44],
1065
- [17, 50, 22, 1, 51, 23],
1066
- [2, 42, 14, 19, 43, 15],
1067
-
1068
- // 19
1069
- [3, 141, 113, 4, 142, 114],
1070
- [3, 70, 44, 11, 71, 45],
1071
- [17, 47, 21, 4, 48, 22],
1072
- [9, 39, 13, 16, 40, 14],
1073
-
1074
- // 20
1075
- [3, 135, 107, 5, 136, 108],
1076
- [3, 67, 41, 13, 68, 42],
1077
- [15, 54, 24, 5, 55, 25],
1078
- [15, 43, 15, 10, 44, 16],
1079
-
1080
- // 21
1081
- [4, 144, 116, 4, 145, 117],
1082
- [17, 68, 42],
1083
- [17, 50, 22, 6, 51, 23],
1084
- [19, 46, 16, 6, 47, 17],
1085
-
1086
- // 22
1087
- [2, 139, 111, 7, 140, 112],
1088
- [17, 74, 46],
1089
- [7, 54, 24, 16, 55, 25],
1090
- [34, 37, 13],
1091
-
1092
- // 23
1093
- [4, 151, 121, 5, 152, 122],
1094
- [4, 75, 47, 14, 76, 48],
1095
- [11, 54, 24, 14, 55, 25],
1096
- [16, 45, 15, 14, 46, 16],
1097
-
1098
- // 24
1099
- [6, 147, 117, 4, 148, 118],
1100
- [6, 73, 45, 14, 74, 46],
1101
- [11, 54, 24, 16, 55, 25],
1102
- [30, 46, 16, 2, 47, 17],
1103
-
1104
- // 25
1105
- [8, 132, 106, 4, 133, 107],
1106
- [8, 75, 47, 13, 76, 48],
1107
- [7, 54, 24, 22, 55, 25],
1108
- [22, 45, 15, 13, 46, 16],
1109
-
1110
- // 26
1111
- [10, 142, 114, 2, 143, 115],
1112
- [19, 74, 46, 4, 75, 47],
1113
- [28, 50, 22, 6, 51, 23],
1114
- [33, 46, 16, 4, 47, 17],
1115
-
1116
- // 27
1117
- [8, 152, 122, 4, 153, 123],
1118
- [22, 73, 45, 3, 74, 46],
1119
- [8, 53, 23, 26, 54, 24],
1120
- [12, 45, 15, 28, 46, 16],
1121
-
1122
- // 28
1123
- [3, 147, 117, 10, 148, 118],
1124
- [3, 73, 45, 23, 74, 46],
1125
- [4, 54, 24, 31, 55, 25],
1126
- [11, 45, 15, 31, 46, 16],
1127
-
1128
- // 29
1129
- [7, 146, 116, 7, 147, 117],
1130
- [21, 73, 45, 7, 74, 46],
1131
- [1, 53, 23, 37, 54, 24],
1132
- [19, 45, 15, 26, 46, 16],
1133
-
1134
- // 30
1135
- [5, 145, 115, 10, 146, 116],
1136
- [19, 75, 47, 10, 76, 48],
1137
- [15, 54, 24, 25, 55, 25],
1138
- [23, 45, 15, 25, 46, 16],
1139
-
1140
- // 31
1141
- [13, 145, 115, 3, 146, 116],
1142
- [2, 74, 46, 29, 75, 47],
1143
- [42, 54, 24, 1, 55, 25],
1144
- [23, 45, 15, 28, 46, 16],
1145
-
1146
- // 32
1147
- [17, 145, 115],
1148
- [10, 74, 46, 23, 75, 47],
1149
- [10, 54, 24, 35, 55, 25],
1150
- [19, 45, 15, 35, 46, 16],
1151
-
1152
- // 33
1153
- [17, 145, 115, 1, 146, 116],
1154
- [14, 74, 46, 21, 75, 47],
1155
- [29, 54, 24, 19, 55, 25],
1156
- [11, 45, 15, 46, 46, 16],
1157
-
1158
- // 34
1159
- [13, 145, 115, 6, 146, 116],
1160
- [14, 74, 46, 23, 75, 47],
1161
- [44, 54, 24, 7, 55, 25],
1162
- [59, 46, 16, 1, 47, 17],
1163
-
1164
- // 35
1165
- [12, 151, 121, 7, 152, 122],
1166
- [12, 75, 47, 26, 76, 48],
1167
- [39, 54, 24, 14, 55, 25],
1168
- [22, 45, 15, 41, 46, 16],
1169
-
1170
- // 36
1171
- [6, 151, 121, 14, 152, 122],
1172
- [6, 75, 47, 34, 76, 48],
1173
- [46, 54, 24, 10, 55, 25],
1174
- [2, 45, 15, 64, 46, 16],
1175
-
1176
- // 37
1177
- [17, 152, 122, 4, 153, 123],
1178
- [29, 74, 46, 14, 75, 47],
1179
- [49, 54, 24, 10, 55, 25],
1180
- [24, 45, 15, 46, 46, 16],
1181
-
1182
- // 38
1183
- [4, 152, 122, 18, 153, 123],
1184
- [13, 74, 46, 32, 75, 47],
1185
- [48, 54, 24, 14, 55, 25],
1186
- [42, 45, 15, 32, 46, 16],
1187
-
1188
- // 39
1189
- [20, 147, 117, 4, 148, 118],
1190
- [40, 75, 47, 7, 76, 48],
1191
- [43, 54, 24, 22, 55, 25],
1192
- [10, 45, 15, 67, 46, 16],
1193
-
1194
- // 40
1195
- [19, 148, 118, 6, 149, 119],
1196
- [18, 75, 47, 31, 76, 48],
1197
- [34, 54, 24, 34, 55, 25],
1198
- [20, 45, 15, 61, 46, 16]
1199
- ];
1200
-
1201
- var qrRSBlock = function (totalCount, dataCount) {
1202
- return {
1203
- "totalCount": totalCount,
1204
- "dataCount": dataCount
1205
- }
1206
- };
1207
-
1208
- var getRsBlockTable = function (typeNumber, errorCorrectionLevel) {
1209
- switch (errorCorrectionLevel) {
1210
- case QRErrorCorrectionLevel.L:
1211
- return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
1212
- case QRErrorCorrectionLevel.M:
1213
- return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
1214
- case QRErrorCorrectionLevel.Q:
1215
- return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
1216
- case QRErrorCorrectionLevel.H:
1217
- return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
1218
- default:
1219
- throw 'bad rs block @ typeNumber:' + typeNumber + '/errorCorrectionLevel:' + errorCorrectionLevel;
1220
- }
1221
- };
1222
-
1223
- return function (typeNumber, errorCorrectionLevel) {
1224
- var rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);
1225
- var length = rsBlock.length / 3;
1226
- var list = [];
1227
- for (var i = 0; i < length; i += 1) {
1228
-
1229
- var count = rsBlock[i * 3 + 0];
1230
- var totalCount = rsBlock[i * 3 + 1];
1231
- var dataCount = rsBlock[i * 3 + 2];
1232
-
1233
- for (var j = 0; j < count; j += 1) {
1234
- list.push(qrRSBlock(totalCount, dataCount));
1235
- }
1236
- }
1237
- return list;
1238
- };
1239
- }());
1240
-
1241
- // 矩阵分布评分 (筛选最优掩模方案)
1242
- var getLostPoint = function (map) {
1243
- var moduleCount = map.length;
1244
- var lostPoint = 0;
1245
- var isDark = function (row, col) {
1246
- return map[row][col];
1247
- };
1248
-
1249
- // LEVEL1
1250
- for (var row = 0; row < moduleCount; row += 1) {
1251
- for (var col = 0; col < moduleCount; col += 1) {
1252
- var sameCount = 0;
1253
- var dark = isDark(row, col);
1254
- for (var r = -1; r <= 1; r += 1) {
1255
- if (row + r < 0 || moduleCount <= row + r) {
1256
- continue;
1257
- }
1258
- for (var c = -1; c <= 1; c += 1) {
1259
- if (col + c < 0 || moduleCount <= col + c) {
1260
- continue;
1261
- }
1262
- if (r == 0 && c == 0) {
1263
- continue;
1264
- }
1265
- if (dark == isDark(row + r, col + c)) {
1266
- sameCount += 1;
1267
- }
1268
- }
1269
- }
1270
- if (sameCount > 5) {
1271
- lostPoint += (3 + sameCount - 5);
1272
- }
1273
- }
1274
- }
1275
- // LEVEL2
1276
- for (var row = 0; row < moduleCount - 1; row += 1) {
1277
- for (var col = 0; col < moduleCount - 1; col += 1) {
1278
- var count = 0;
1279
- if (isDark(row, col)) count += 1;
1280
- if (isDark(row + 1, col)) count += 1;
1281
- if (isDark(row, col + 1)) count += 1;
1282
- if (isDark(row + 1, col + 1)) count += 1;
1283
- if (count == 0 || count == 4) {
1284
- lostPoint += 3;
1285
- }
1286
- }
1287
- }
1288
-
1289
- // LEVEL3
1290
- for (var row = 0; row < moduleCount; row += 1) {
1291
- for (var col = 0; col < moduleCount - 6; col += 1) {
1292
- if (isDark(row, col) &&
1293
- !isDark(row, col + 1) &&
1294
- isDark(row, col + 2) &&
1295
- isDark(row, col + 3) &&
1296
- isDark(row, col + 4) &&
1297
- !isDark(row, col + 5) &&
1298
- isDark(row, col + 6)) {
1299
- lostPoint += 40;
1300
- }
1301
- }
1302
- }
1303
-
1304
- for (var col = 0; col < moduleCount; col += 1) {
1305
- for (var row = 0; row < moduleCount - 6; row += 1) {
1306
- if (isDark(row, col) &&
1307
- !isDark(row + 1, col) &&
1308
- isDark(row + 2, col) &&
1309
- isDark(row + 3, col) &&
1310
- isDark(row + 4, col) &&
1311
- !isDark(row + 5, col) &&
1312
- isDark(row + 6, col)) {
1313
- lostPoint += 40;
1314
- }
1315
- }
1316
- }
1317
-
1318
- // LEVEL4
1319
-
1320
- var darkCount = 0;
1321
-
1322
- for (var col = 0; col < moduleCount; col += 1) {
1323
- for (var row = 0; row < moduleCount; row += 1) {
1324
- if (isDark(row, col)) {
1325
- darkCount += 1;
1326
- }
1327
- }
1328
- }
1329
-
1330
- var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
1331
- lostPoint += ratio * 10;
1332
-
1333
- return lostPoint;
1334
- };
1335
-
1336
- var getErrorCorrectPolynomial = function (errorCorrectLength) {
1337
- var a = qrPolynomial([1], 0);
1338
- for (var i = 0; i < errorCorrectLength; i += 1) {
1339
- a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0));
1340
- }
1341
- return a;
1342
- };
1343
-
1344
- var qrPolynomial = function (num, shift) {
1345
-
1346
- if (typeof num.length == 'undefined') {
1347
- throw num.length + '/' + shift;
1348
- }
1349
-
1350
- var _num = function () {
1351
- var offset = 0;
1352
- while (offset < num.length && num[offset] == 0) {
1353
- offset += 1;
1354
- }
1355
- var _num = new Array(num.length - offset + shift);
1356
- for (var i = 0; i < num.length - offset; i += 1) {
1357
- _num[i] = num[i + offset];
1358
- }
1359
- return _num;
1360
- }();
1361
-
1362
- var _this = {};
1363
-
1364
- _this.getAt = function (index) {
1365
- return _num[index];
1366
- };
1367
-
1368
- _this.getLength = function () {
1369
- return _num.length;
1370
- };
1371
-
1372
- _this.multiply = function (e) {
1373
-
1374
- var num = new Array(_this.getLength() + e.getLength() - 1);
1375
-
1376
- for (var i = 0; i < _this.getLength(); i += 1) {
1377
- for (var j = 0; j < e.getLength(); j += 1) {
1378
- num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i)) + QRMath.glog(e.getAt(j)));
1379
- }
1380
- }
1381
-
1382
- return qrPolynomial(num, 0);
1383
- };
1384
-
1385
- _this.mod = function (e) {
1386
-
1387
- if (_this.getLength() - e.getLength() < 0) {
1388
- return _this;
1389
- }
1390
-
1391
- var ratio = QRMath.glog(_this.getAt(0)) - QRMath.glog(e.getAt(0));
1392
-
1393
- var num = new Array(_this.getLength());
1394
- for (var i = 0; i < _this.getLength(); i += 1) {
1395
- num[i] = _this.getAt(i);
1396
- }
1397
-
1398
- for (var i = 0; i < e.getLength(); i += 1) {
1399
- num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i)) + ratio);
1400
- }
1401
-
1402
- // recursive call
1403
- return qrPolynomial(num, 0).mod(e);
1404
- };
1405
-
1406
- return _this;
1407
- };
1408
-
1409
- var QRMath = (function () {
1410
-
1411
- var EXP_TABLE = new Array(256);
1412
- var LOG_TABLE = new Array(256);
1413
-
1414
- // initialize tables
1415
- for (var i = 0; i < 8; i += 1) {
1416
- EXP_TABLE[i] = 1 << i;
1417
- }
1418
- for (var i = 8; i < 256; i += 1) {
1419
- EXP_TABLE[i] = EXP_TABLE[i - 4] ^
1420
- EXP_TABLE[i - 5] ^
1421
- EXP_TABLE[i - 6] ^
1422
- EXP_TABLE[i - 8];
1423
- }
1424
- for (var i = 0; i < 255; i += 1) {
1425
- LOG_TABLE[EXP_TABLE[i]] = i;
1426
- }
1427
-
1428
- var _this = {};
1429
-
1430
- _this.glog = function (n) {
1431
-
1432
- if (n < 1) {
1433
- throw 'glog(' + n + ')';
1434
- }
1435
-
1436
- return LOG_TABLE[n];
1437
- };
1438
-
1439
- _this.gexp = function (n) {
1440
-
1441
- while (n < 0) {
1442
- n += 255;
1443
- }
1444
-
1445
- while (n >= 256) {
1446
- n -= 255;
1447
- }
1448
-
1449
- return EXP_TABLE[n];
1450
- };
1451
-
1452
- return _this;
1453
- }());
1454
-
1455
- var createBytes = function (buffer, rsBlocks) {
1456
- var offset = 0;
1457
- var maxDcCount = 0;
1458
- var maxEcCount = 0;
1459
-
1460
- var dcdata = new Array(rsBlocks.length);
1461
- var ecdata = new Array(rsBlocks.length);
1462
-
1463
- for (var r = 0; r < rsBlocks.length; r += 1) {
1464
- var dcCount = rsBlocks[r].dataCount;
1465
- var ecCount = rsBlocks[r].totalCount - dcCount;
1466
-
1467
- maxDcCount = Math.max(maxDcCount, dcCount);
1468
- maxEcCount = Math.max(maxEcCount, ecCount);
1469
-
1470
- dcdata[r] = new Array(dcCount);
1471
- for (var i = 0; i < dcdata[r].length; i += 1) {
1472
- dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];
1473
- }
1474
- offset += dcCount;
1475
-
1476
- var rsPoly = getErrorCorrectPolynomial(ecCount);
1477
- var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);
1478
-
1479
- var modPoly = rawPoly.mod(rsPoly);
1480
- ecdata[r] = new Array(rsPoly.getLength() - 1);
1481
- for (var i = 0; i < ecdata[r].length; i += 1) {
1482
- var modIndex = i + modPoly.getLength() - ecdata[r].length;
1483
- ecdata[r][i] = (modIndex >= 0) ? modPoly.getAt(modIndex) : 0;
1484
- }
1485
- }
1486
-
1487
- var totalCodeCount = 0;
1488
- for (var i = 0; i < rsBlocks.length; i += 1) {
1489
- totalCodeCount += rsBlocks[i].totalCount;
1490
- }
1491
-
1492
- var data = new Array(totalCodeCount);
1493
- var index = 0;
1494
-
1495
- for (var i = 0; i < maxDcCount; i += 1) {
1496
- for (var r = 0; r < rsBlocks.length; r += 1) {
1497
- if (i < dcdata[r].length) {
1498
- data[index] = dcdata[r][i];
1499
- index += 1;
1500
- }
1501
- }
1502
- }
1503
-
1504
- for (var i = 0; i < maxEcCount; i += 1) {
1505
- for (var r = 0; r < rsBlocks.length; r += 1) {
1506
- if (i < ecdata[r].length) {
1507
- data[index] = ecdata[r][i];
1508
- index += 1;
1509
- }
1510
- }
1511
- }
1512
-
1513
- return data;
1514
- };
1515
-
1516
- var _createData = function (buffer, rsBlocks) {
1517
- var PAD0 = 0xEC;
1518
- var PAD1 = 0x11;
1519
-
1520
- // calc num max data.
1521
- var totalDataCount = 0;
1522
- for (var i = 0; i < rsBlocks.length; i += 1) {
1523
- totalDataCount += rsBlocks[i].dataCount;
1524
- }
1525
-
1526
- if (buffer.getLengthInBits() > totalDataCount * 8) {
1527
- throw 'code length overflow. (' +
1528
- buffer.getLengthInBits() +
1529
- '>' +
1530
- totalDataCount * 8 +
1531
- ')';
1532
- }
1533
-
1534
- // end code
1535
- if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
1536
- buffer.put(0, 4);
1537
- }
1538
-
1539
- // padding
1540
- while (buffer.getLengthInBits() % 8 != 0) {
1541
- buffer.putBit(false);
1542
- }
1543
-
1544
- // padding
1545
- while (true) {
1546
-
1547
- if (buffer.getLengthInBits() >= totalDataCount * 8) {
1548
- break;
1549
- }
1550
- buffer.put(PAD0, 8);
1551
-
1552
- if (buffer.getLengthInBits() >= totalDataCount * 8) {
1553
- break;
1554
- }
1555
- buffer.put(PAD1, 8);
1556
- }
1557
-
1558
- return createBytes(buffer, rsBlocks);
1559
- };
1560
-
1561
- var createDataForBytes = function (typeNumber, errorCorrectionLevel, byteArray, mode) {
1562
- var rsBlocks = getRSBlocks(typeNumber, errorCorrectionLevel);
1563
- var buffer = qrBitBuffer();
1564
- var data = byteArray;
1565
- buffer.put(mode, 4);
1566
- buffer.put(data.length, getLengthInBits(mode, typeNumber));
1567
- for (var i = 0; i < data.length; i++) {
1568
- buffer.put(data[i], 8);
1569
- }
1570
- return _createData(buffer, rsBlocks);
1571
- };
1572
-
1573
- var createDataForModes = function (typeNumber, errorCorrectionLevel, dataList) {
1574
- var rsBlocks = getRSBlocks(typeNumber, errorCorrectionLevel);
1575
- var buffer = qrBitBuffer();
1576
- for (var i = 0; i < dataList.length; i += 1) {
1577
- var data = dataList[i];
1578
- buffer.put(data.getMode(), 4);
1579
- buffer.put(data.getLength(), getLengthInBits(data.getMode(), typeNumber));
1580
- data.write(buffer);
1581
- }
1582
- return _createData(buffer, rsBlocks);
1583
- };
1584
-
1585
- var createData = function (typeNumber, errorCorrectionLevel, byteArray, mode) {
1586
- var cb = mode ? createDataForBytes : createDataForModes;
1587
- return cb.apply(null, arguments)
1588
- };
1589
-
1590
- var mapData = function (map, data, maskPattern) {
1591
- var _moduleCount = map.length;
1592
- var inc = -1;
1593
- var row = _moduleCount - 1;
1594
- var bitIndex = 7;
1595
- var byteIndex = 0;
1596
- var maskFunc = getQRMaskFunction(maskPattern);
1597
-
1598
- for (var col = _moduleCount - 1; col > 0; col -= 2) {
1599
- if (col == 6) col -= 1;
1600
- while (true) {
1601
- for (var c = 0; c < 2; c += 1) {
1602
- if (map[row][col - c] == null) {
1603
- var dark = false;
1604
- if (byteIndex < data.length) {
1605
- dark = (((data[byteIndex] >>> bitIndex) & 1) == 1);
1606
- }
1607
- var mask = maskFunc(row, col - c);
1608
- if (mask) {
1609
- dark = !dark;
1610
- }
1611
- map[row][col - c] = dark;
1612
- bitIndex -= 1;
1613
- if (bitIndex == -1) {
1614
- byteIndex += 1;
1615
- bitIndex = 7;
1616
- }
1617
- }
1618
- }
1619
- row += inc;
1620
- if (row < 0 || _moduleCount <= row) {
1621
- row -= inc;
1622
- inc = -inc;
1623
- break;
1624
- }
1625
- }
1626
- }
1627
-
1628
- return map;
1629
- };
1630
-
1631
- var utils = {
1632
- QRMode: QRMode,
1633
- QRErrorCorrectionLevel: QRErrorCorrectionLevel,
1634
- QRMaskPattern: QRMaskPattern,
1635
- qrBitBuffer: qrBitBuffer,
1636
- setupAllPositionProbePattern: setupAllPositionProbePattern,
1637
- setupPositionAdjustPattern: setupPositionAdjustPattern,
1638
- setupTimingPattern: setupTimingPattern,
1639
- setupTypeInfo: setupTypeInfo,
1640
- setupTypeNumber: setupTypeNumber,
1641
- mapInit: mapInit,
1642
- copyMap: copyMap,
1643
- compareMap: compareMap,
1644
- createData: createData,
1645
- mapData: mapData,
1646
- getLengthInBits: getLengthInBits,
1647
- getRSBlocks: getRSBlocks,
1648
- getLostPoint: getLostPoint,
1649
- };
1650
-
1651
- var QRErrorCorrectionLevel$1 = utils.QRErrorCorrectionLevel;
1652
- var cache = {}; //缓存
1653
-
1654
- var src = function (QRModes, defOptions) {
1655
- QRcode.QRModes = QRModes;
1656
-
1657
- // 纠错等级
1658
- // L: 1, 7%
1659
- // M: 0, 15%
1660
- // Q: 3, 25%
1661
- // H: 2, 30%
1662
- QRcode.QRErrorCorrectionLevel = QRErrorCorrectionLevel$1;
1663
-
1664
- /**
1665
- *
1666
- * @param {object} options
1667
- * {
1668
- * errorCorrectionLevel: "M", //纠错等级 默认M 'L','M','Q','H' -> [1,0,3,2]
1669
- * typeNumber: 0, //QR码版本 默认0 (自动) 1 to 40
1670
- * minTypeNumber: 0, //最小版本
1671
- * maskPattern: 'auto', //掩模 'random','auto' [0-7]
1672
- * dataMode: 'Byte' //默认 数据类型 结合 QRModes 参数
1673
- * }
1674
- */
1675
- function QRcode(options) {
1676
- options = options || {};
1677
- // var _options = {};
1678
- // for (var k in defOptions) {
1679
- // _options[k] = options[k] == undefined ? defOptions[k] : options[k];
1680
- // }
1681
- var _options = Object.assign({},defOptions,options);
1682
-
1683
- return (function () {
1684
- var _typeNumber = _options.typeNumber,
1685
- _minTypeNumber = _options.minTypeNumber,
1686
- _maskPattern = _options.maskPattern,
1687
- _dataMode = _options.dataMode,
1688
- _errorCorrectionLevel = (function () {
1689
- var l = _options.errorCorrectionLevel;
1690
- for (var k in QRErrorCorrectionLevel$1) {
1691
- var v = QRErrorCorrectionLevel$1[k];
1692
- if (l === k || +l === v) {
1693
- return v;
1694
- }
1695
- }
1696
- })();
1697
-
1698
- var _moduleCount = 0,
1699
- _dataList = [],
1700
- _dataCache = null;
1701
-
1702
- var makeImpl = function (test, maskPattern) {
1703
- var map;
1704
- if (cache['basemap_' + _typeNumber]) {
1705
- //从缓存中读取
1706
- map = utils.copyMap(cache['basemap_' + _typeNumber]);
1707
- } else {
1708
- //生成空矩阵 QR码尺寸
1709
- map = utils.mapInit(_moduleCount);
1710
- //填充探测图型
1711
- utils.setupAllPositionProbePattern(map);
1712
- //填充矫正位图
1713
- utils.setupPositionAdjustPattern(map);
1714
- //填充定位图
1715
- utils.setupTimingPattern(map);
1716
-
1717
- //做个缓存 只要版本相同 '探测图型','矫正位图','定位图' 是固定的
1718
- cache['basemap_' + _typeNumber] = utils.copyMap(map);
1719
- }
1720
-
1721
- //填充格式信息
1722
- utils.setupTypeInfo(map, test, _errorCorrectionLevel, maskPattern);
1723
-
1724
- //填充版本信息
1725
- (_typeNumber >= 7) && utils.setupTypeNumber(map, test);
1726
-
1727
- //填充数据
1728
- if (_dataCache == null) {
1729
- _dataCache = utils.createData(_typeNumber, _errorCorrectionLevel, _dataList);
1730
- }
1731
- return utils.mapData(map, _dataCache, maskPattern);
1732
- };
1733
-
1734
- var addData = function (data, mode) {
1735
- mode = mode || _dataMode;
1736
- var newData = null;
1737
- if (typeof mode == 'function') {
1738
- newData = mode(data);
1739
- if (!(newData.getMode && newData.getLength && newData.write)) {
1740
- throw 'mode invalid!'
1741
- }
1742
- } else {
1743
- if (QRModes[mode]) {
1744
- newData = QRModes[mode](data);
1745
- } else {
1746
- throw 'mode type invalid! mode is ' + mode;
1747
- }
1748
- }
1749
- _dataList.push(newData);
1750
- _dataCache = null;
1751
- };
1752
-
1753
- var make = function () {
1754
- // 如果未指定TypeNumber,则记算适合的TypeNumber
1755
- if (_typeNumber < 1) {
1756
- var typeNumber = _minTypeNumber ? _minTypeNumber : 1;
1757
- for (; typeNumber < 40; typeNumber++) {
1758
- var rsBlocks = utils.getRSBlocks(typeNumber, _errorCorrectionLevel);
1759
-
1760
- var buffer = utils.qrBitBuffer();
1761
- for (var i = 0; i < _dataList.length; i++) {
1762
- var data = _dataList[i];
1763
- buffer.put(data.getMode(), 4);
1764
- buffer.put(data.getLength(), utils.getLengthInBits(data.getMode(), typeNumber));
1765
- data.write(buffer);
1766
- }
1767
-
1768
- var totalDataCount = 0;
1769
- for (var i = 0; i < rsBlocks.length; i++) {
1770
- totalDataCount += rsBlocks[i].dataCount;
1771
- }
1772
-
1773
- if (buffer.getLengthInBits() <= totalDataCount * 8) {
1774
- break;
1775
- }
1776
- }
1777
- _typeNumber = typeNumber;
1778
- }
1779
-
1780
- _moduleCount = _typeNumber * 4 + 17;
1781
-
1782
- // 掩模
1783
-
1784
- // 随机
1785
- if (_maskPattern === 'random') {
1786
- _maskPattern = ~~(Math.random() * (7 + 1));
1787
- // 指定方案
1788
- } else if (0 <= _maskPattern && _maskPattern <= 7) {
1789
- _maskPattern = _maskPattern >> 0;
1790
- // 自动筛选最优掩模
1791
- } else { //auto
1792
- _maskPattern = (function () {
1793
- var minLostPoint = 0;
1794
- var pattern = 0;
1795
- for (var i = 0; i < 8; i += 1) {
1796
- var map = makeImpl(true, i);
1797
- var lostPoint = utils.getLostPoint(map);
1798
- if (i == 0 || minLostPoint > lostPoint) {
1799
- minLostPoint = lostPoint;
1800
- pattern = i;
1801
- }
1802
- }
1803
- return pattern;
1804
- }());
1805
- }
1806
-
1807
- var map = makeImpl(false, _maskPattern);
1808
- return map;
1809
- };
1810
-
1811
- var splitMake = function () {
1812
- var obj = {};
1813
- obj.all = make();
1814
- obj.allDiscover = utils.copyMap(cache['basemap_' + _typeNumber]),
1815
-
1816
- //positionProbe
1817
- obj.positionProbe = utils.mapInit(_moduleCount),
1818
- utils.setupAllPositionProbePattern(obj.positionProbe);
1819
-
1820
- //positionAdjust
1821
- var positionAdjust = utils.copyMap(obj.positionProbe);
1822
- utils.setupPositionAdjustPattern(positionAdjust);
1823
- obj.positionAdjust = utils.compareMap(obj.positionProbe, positionAdjust, 'xor');
1824
-
1825
- //timing
1826
- var timing = utils.mapInit(_moduleCount);
1827
- utils.setupTimingPattern(timing);
1828
- obj.timing = utils.compareMap(obj.positionAdjust, timing, "and");
1829
- obj.timing = utils.compareMap(obj.timing, timing, "xor");
1830
-
1831
-
1832
- //data
1833
- obj.data = utils.compareMap(obj.all, obj.allDiscover, 'xor');
1834
-
1835
- // console.log(obj.all);
1836
- // console.log(obj.allDiscover);
1837
- // console.log(obj.positionProbe);
1838
- // console.log(obj.positionAdjust);
1839
- // console.log(obj.timing)
1840
- // console.log(obj.data)
1841
-
1842
-
1843
- return obj;
1844
- };
1845
-
1846
- var setData = function (data, mode) {
1847
- _dataList = [];
1848
- addData(data, mode);
1849
- };
1850
-
1851
- var _this = function (str, mode) {
1852
- setData(str, mode);
1853
- return make();
1854
- };
1855
-
1856
- //暴露到外部的方法
1857
- _this.setData = setData;
1858
- _this.addData = addData;
1859
- _this.make = make;
1860
- _this.splitMake = splitMake;
1861
-
1862
- return _this;
1863
- })();
1864
- }
1865
-
1866
- return QRcode;
1867
- };
1868
-
1869
- // 数据模式
1870
- var QRModes = {
1871
- 'Numeric': Numeric, //数字 0-9
1872
- 'Alphanumeric': Alphanumeric, //支持数字,大写字母,英文空格及 % * + - . / : ;
1873
- 'Byte': Byte(), //以字节存储数据 utf8
1874
- 'Byte-GBK': Byte(gbk.encode), //以字节存储数据 utf8
1875
- 'Byte-SJIS': Byte(sjis), //以字节存储数据 utf8
1876
- 'Kanji': Kanji() //日文编码 SJIS
1877
- };
1878
-
1879
- var defOptions = {
1880
- errorCorrectionLevel: "M",
1881
- typeNumber: 0,
1882
- maskPattern: 'auto',
1883
- dataMode: 'Byte'
1884
- };
1885
-
1886
- var index_temp = src(QRModes,defOptions);
1887
-
1888
- return index_temp;
1889
-
1890
- })));