UNPKG

2.68 MBJavaScriptView Raw
1(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.PDFDocument = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
2(function (Buffer,__dirname){(function (){
3'use strict';
4
5var stream = require('stream');
6var zlib = require('zlib');
7var CryptoJS = require('crypto-js');
8var fs = require('fs');
9var fontkit = require('fontkit');
10var events = require('events');
11var LineBreaker = require('linebreak');
12var exif = require('jpeg-exif');
13var PNG = require('png-js');
14
15/*
16PDFAbstractReference - abstract class for PDF reference
17*/
18
19class PDFAbstractReference {
20 toString() {
21 throw new Error('Must be implemented by subclasses');
22 }
23}
24
25/*
26PDFTree - abstract base class for name and number tree objects
27*/
28class PDFTree {
29 constructor(options = {}) {
30 this._items = {};
31 // disable /Limits output for this tree
32 this.limits = typeof options.limits === 'boolean' ? options.limits : true;
33 }
34 add(key, val) {
35 return this._items[key] = val;
36 }
37 get(key) {
38 return this._items[key];
39 }
40 toString() {
41 // Needs to be sorted by key
42 const sortedKeys = Object.keys(this._items).sort((a, b) => this._compareKeys(a, b));
43 const out = ['<<'];
44 if (this.limits && sortedKeys.length > 1) {
45 const first = sortedKeys[0],
46 last = sortedKeys[sortedKeys.length - 1];
47 out.push(` /Limits ${PDFObject.convert([this._dataForKey(first), this._dataForKey(last)])}`);
48 }
49 out.push(` /${this._keysName()} [`);
50 for (let key of sortedKeys) {
51 out.push(` ${PDFObject.convert(this._dataForKey(key))} ${PDFObject.convert(this._items[key])}`);
52 }
53 out.push(']');
54 out.push('>>');
55 return out.join('\n');
56 }
57 _compareKeys( /*a, b*/
58 ) {
59 throw new Error('Must be implemented by subclasses');
60 }
61 _keysName() {
62 throw new Error('Must be implemented by subclasses');
63 }
64 _dataForKey( /*k*/
65 ) {
66 throw new Error('Must be implemented by subclasses');
67 }
68}
69
70/*
71PDFObject - converts JavaScript types into their corresponding PDF types.
72By Devon Govett
73*/
74const pad = (str, length) => (Array(length + 1).join('0') + str).slice(-length);
75const escapableRe = /[\n\r\t\b\f()\\]/g;
76const escapable = {
77 '\n': '\\n',
78 '\r': '\\r',
79 '\t': '\\t',
80 '\b': '\\b',
81 '\f': '\\f',
82 '\\': '\\\\',
83 '(': '\\(',
84 ')': '\\)'
85};
86
87// Convert little endian UTF-16 to big endian
88const swapBytes = function (buff) {
89 const l = buff.length;
90 if (l & 0x01) {
91 throw new Error('Buffer length must be even');
92 } else {
93 for (let i = 0, end = l - 1; i < end; i += 2) {
94 const a = buff[i];
95 buff[i] = buff[i + 1];
96 buff[i + 1] = a;
97 }
98 }
99 return buff;
100};
101class PDFObject {
102 static convert(object, encryptFn = null) {
103 // String literals are converted to the PDF name type
104 if (typeof object === 'string') {
105 return `/${object}`;
106
107 // String objects are converted to PDF strings (UTF-16)
108 } else if (object instanceof String) {
109 let string = object;
110 // Detect if this is a unicode string
111 let isUnicode = false;
112 for (let i = 0, end = string.length; i < end; i++) {
113 if (string.charCodeAt(i) > 0x7f) {
114 isUnicode = true;
115 break;
116 }
117 }
118
119 // If so, encode it as big endian UTF-16
120 let stringBuffer;
121 if (isUnicode) {
122 stringBuffer = swapBytes(Buffer.from(`\ufeff${string}`, 'utf16le'));
123 } else {
124 stringBuffer = Buffer.from(string.valueOf(), 'ascii');
125 }
126
127 // Encrypt the string when necessary
128 if (encryptFn) {
129 string = encryptFn(stringBuffer).toString('binary');
130 } else {
131 string = stringBuffer.toString('binary');
132 }
133
134 // Escape characters as required by the spec
135 string = string.replace(escapableRe, c => escapable[c]);
136 return `(${string})`;
137
138 // Buffers are converted to PDF hex strings
139 } else if (Buffer.isBuffer(object)) {
140 return `<${object.toString('hex')}>`;
141 } else if (object instanceof PDFAbstractReference || object instanceof PDFTree) {
142 return object.toString();
143 } else if (object instanceof Date) {
144 let string = `D:${pad(object.getUTCFullYear(), 4)}` + pad(object.getUTCMonth() + 1, 2) + pad(object.getUTCDate(), 2) + pad(object.getUTCHours(), 2) + pad(object.getUTCMinutes(), 2) + pad(object.getUTCSeconds(), 2) + 'Z';
145
146 // Encrypt the string when necessary
147 if (encryptFn) {
148 string = encryptFn(Buffer.from(string, 'ascii')).toString('binary');
149
150 // Escape characters as required by the spec
151 string = string.replace(escapableRe, c => escapable[c]);
152 }
153 return `(${string})`;
154 } else if (Array.isArray(object)) {
155 const items = object.map(e => PDFObject.convert(e, encryptFn)).join(' ');
156 return `[${items}]`;
157 } else if ({}.toString.call(object) === '[object Object]') {
158 const out = ['<<'];
159 for (let key in object) {
160 const val = object[key];
161 out.push(`/${key} ${PDFObject.convert(val, encryptFn)}`);
162 }
163 out.push('>>');
164 return out.join('\n');
165 } else if (typeof object === 'number') {
166 return PDFObject.number(object);
167 } else {
168 return `${object}`;
169 }
170 }
171 static number(n) {
172 if (n > -1e21 && n < 1e21) {
173 return Math.round(n * 1e6) / 1e6;
174 }
175 throw new Error(`unsupported number: ${n}`);
176 }
177}
178
179/*
180PDFReference - represents a reference to another object in the PDF object heirarchy
181By Devon Govett
182*/
183class PDFReference extends PDFAbstractReference {
184 constructor(document, id, data = {}) {
185 super();
186 this.document = document;
187 this.id = id;
188 this.data = data;
189 this.gen = 0;
190 this.compress = this.document.compress && !this.data.Filter;
191 this.uncompressedLength = 0;
192 this.buffer = [];
193 }
194 write(chunk) {
195 if (!Buffer.isBuffer(chunk)) {
196 chunk = Buffer.from(chunk + '\n', 'binary');
197 }
198 this.uncompressedLength += chunk.length;
199 if (this.data.Length == null) {
200 this.data.Length = 0;
201 }
202 this.buffer.push(chunk);
203 this.data.Length += chunk.length;
204 if (this.compress) {
205 return this.data.Filter = 'FlateDecode';
206 }
207 }
208 end(chunk) {
209 if (chunk) {
210 this.write(chunk);
211 }
212 return this.finalize();
213 }
214 finalize() {
215 this.offset = this.document._offset;
216 const encryptFn = this.document._security ? this.document._security.getEncryptFn(this.id, this.gen) : null;
217 if (this.buffer.length) {
218 this.buffer = Buffer.concat(this.buffer);
219 if (this.compress) {
220 this.buffer = zlib.deflateSync(this.buffer);
221 }
222 if (encryptFn) {
223 this.buffer = encryptFn(this.buffer);
224 }
225 this.data.Length = this.buffer.length;
226 }
227 this.document._write(`${this.id} ${this.gen} obj`);
228 this.document._write(PDFObject.convert(this.data, encryptFn));
229 if (this.buffer.length) {
230 this.document._write('stream');
231 this.document._write(this.buffer);
232 this.buffer = []; // free up memory
233 this.document._write('\nendstream');
234 }
235 this.document._write('endobj');
236 this.document._refEnd(this);
237 }
238 toString() {
239 return `${this.id} ${this.gen} R`;
240 }
241}
242
243/*
244PDFPage - represents a single page in the PDF document
245By Devon Govett
246*/
247
248const DEFAULT_MARGINS = {
249 top: 72,
250 left: 72,
251 bottom: 72,
252 right: 72
253};
254const SIZES = {
255 '4A0': [4767.87, 6740.79],
256 '2A0': [3370.39, 4767.87],
257 A0: [2383.94, 3370.39],
258 A1: [1683.78, 2383.94],
259 A2: [1190.55, 1683.78],
260 A3: [841.89, 1190.55],
261 A4: [595.28, 841.89],
262 A5: [419.53, 595.28],
263 A6: [297.64, 419.53],
264 A7: [209.76, 297.64],
265 A8: [147.4, 209.76],
266 A9: [104.88, 147.4],
267 A10: [73.7, 104.88],
268 B0: [2834.65, 4008.19],
269 B1: [2004.09, 2834.65],
270 B2: [1417.32, 2004.09],
271 B3: [1000.63, 1417.32],
272 B4: [708.66, 1000.63],
273 B5: [498.9, 708.66],
274 B6: [354.33, 498.9],
275 B7: [249.45, 354.33],
276 B8: [175.75, 249.45],
277 B9: [124.72, 175.75],
278 B10: [87.87, 124.72],
279 C0: [2599.37, 3676.54],
280 C1: [1836.85, 2599.37],
281 C2: [1298.27, 1836.85],
282 C3: [918.43, 1298.27],
283 C4: [649.13, 918.43],
284 C5: [459.21, 649.13],
285 C6: [323.15, 459.21],
286 C7: [229.61, 323.15],
287 C8: [161.57, 229.61],
288 C9: [113.39, 161.57],
289 C10: [79.37, 113.39],
290 RA0: [2437.8, 3458.27],
291 RA1: [1729.13, 2437.8],
292 RA2: [1218.9, 1729.13],
293 RA3: [864.57, 1218.9],
294 RA4: [609.45, 864.57],
295 SRA0: [2551.18, 3628.35],
296 SRA1: [1814.17, 2551.18],
297 SRA2: [1275.59, 1814.17],
298 SRA3: [907.09, 1275.59],
299 SRA4: [637.8, 907.09],
300 EXECUTIVE: [521.86, 756.0],
301 FOLIO: [612.0, 936.0],
302 LEGAL: [612.0, 1008.0],
303 LETTER: [612.0, 792.0],
304 TABLOID: [792.0, 1224.0]
305};
306class PDFPage {
307 constructor(document, options = {}) {
308 this.document = document;
309 this.size = options.size || 'letter';
310 this.layout = options.layout || 'portrait';
311
312 // process margins
313 if (typeof options.margin === 'number') {
314 this.margins = {
315 top: options.margin,
316 left: options.margin,
317 bottom: options.margin,
318 right: options.margin
319 };
320
321 // default to 1 inch margins
322 } else {
323 this.margins = options.margins || DEFAULT_MARGINS;
324 }
325
326 // calculate page dimensions
327 const dimensions = Array.isArray(this.size) ? this.size : SIZES[this.size.toUpperCase()];
328 this.width = dimensions[this.layout === 'portrait' ? 0 : 1];
329 this.height = dimensions[this.layout === 'portrait' ? 1 : 0];
330 this.content = this.document.ref();
331
332 // Initialize the Font, XObject, and ExtGState dictionaries
333 this.resources = this.document.ref({
334 ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI']
335 });
336
337 // The page dictionary
338 this.dictionary = this.document.ref({
339 Type: 'Page',
340 Parent: this.document._root.data.Pages,
341 MediaBox: [0, 0, this.width, this.height],
342 Contents: this.content,
343 Resources: this.resources
344 });
345 this.markings = [];
346 }
347
348 // Lazily create these objects
349 get fonts() {
350 const data = this.resources.data;
351 return data.Font != null ? data.Font : data.Font = {};
352 }
353 get xobjects() {
354 const data = this.resources.data;
355 return data.XObject != null ? data.XObject : data.XObject = {};
356 }
357 get ext_gstates() {
358 const data = this.resources.data;
359 return data.ExtGState != null ? data.ExtGState : data.ExtGState = {};
360 }
361 get patterns() {
362 const data = this.resources.data;
363 return data.Pattern != null ? data.Pattern : data.Pattern = {};
364 }
365 get colorSpaces() {
366 const data = this.resources.data;
367 return data.ColorSpace || (data.ColorSpace = {});
368 }
369 get annotations() {
370 const data = this.dictionary.data;
371 return data.Annots != null ? data.Annots : data.Annots = [];
372 }
373 get structParentTreeKey() {
374 const data = this.dictionary.data;
375 return data.StructParents != null ? data.StructParents : data.StructParents = this.document.createStructParentTreeNextKey();
376 }
377 maxY() {
378 return this.height - this.margins.bottom;
379 }
380 write(chunk) {
381 return this.content.write(chunk);
382 }
383 end() {
384 this.dictionary.end();
385 this.resources.end();
386 return this.content.end();
387 }
388}
389
390/*
391PDFNameTree - represents a name tree object
392*/
393class PDFNameTree extends PDFTree {
394 _compareKeys(a, b) {
395 return a.localeCompare(b);
396 }
397 _keysName() {
398 return "Names";
399 }
400 _dataForKey(k) {
401 return new String(k);
402 }
403}
404
405/**
406 * Check if value is in a range group.
407 * @param {number} value
408 * @param {number[]} rangeGroup
409 * @returns {boolean}
410 */
411function inRange(value, rangeGroup) {
412 if (value < rangeGroup[0]) return false;
413 let startRange = 0;
414 let endRange = rangeGroup.length / 2;
415 while (startRange <= endRange) {
416 const middleRange = Math.floor((startRange + endRange) / 2);
417
418 // actual array index
419 const arrayIndex = middleRange * 2;
420
421 // Check if value is in range pointed by actual index
422 if (value >= rangeGroup[arrayIndex] && value <= rangeGroup[arrayIndex + 1]) {
423 return true;
424 }
425 if (value > rangeGroup[arrayIndex + 1]) {
426 // Search Right Side Of Array
427 startRange = middleRange + 1;
428 } else {
429 // Search Left Side Of Array
430 endRange = middleRange - 1;
431 }
432 }
433 return false;
434}
435
436// prettier-ignore-start
437/**
438 * A.1 Unassigned code points in Unicode 3.2
439 * @link https://tools.ietf.org/html/rfc3454#appendix-A.1
440 */
441const unassigned_code_points = [0x0221, 0x0221, 0x0234, 0x024f, 0x02ae, 0x02af, 0x02ef, 0x02ff, 0x0350, 0x035f, 0x0370, 0x0373, 0x0376, 0x0379, 0x037b, 0x037d, 0x037f, 0x0383, 0x038b, 0x038b, 0x038d, 0x038d, 0x03a2, 0x03a2, 0x03cf, 0x03cf, 0x03f7, 0x03ff, 0x0487, 0x0487, 0x04cf, 0x04cf, 0x04f6, 0x04f7, 0x04fa, 0x04ff, 0x0510, 0x0530, 0x0557, 0x0558, 0x0560, 0x0560, 0x0588, 0x0588, 0x058b, 0x0590, 0x05a2, 0x05a2, 0x05ba, 0x05ba, 0x05c5, 0x05cf, 0x05eb, 0x05ef, 0x05f5, 0x060b, 0x060d, 0x061a, 0x061c, 0x061e, 0x0620, 0x0620, 0x063b, 0x063f, 0x0656, 0x065f, 0x06ee, 0x06ef, 0x06ff, 0x06ff, 0x070e, 0x070e, 0x072d, 0x072f, 0x074b, 0x077f, 0x07b2, 0x0900, 0x0904, 0x0904, 0x093a, 0x093b, 0x094e, 0x094f, 0x0955, 0x0957, 0x0971, 0x0980, 0x0984, 0x0984, 0x098d, 0x098e, 0x0991, 0x0992, 0x09a9, 0x09a9, 0x09b1, 0x09b1, 0x09b3, 0x09b5, 0x09ba, 0x09bb, 0x09bd, 0x09bd, 0x09c5, 0x09c6, 0x09c9, 0x09ca, 0x09ce, 0x09d6, 0x09d8, 0x09db, 0x09de, 0x09de, 0x09e4, 0x09e5, 0x09fb, 0x0a01, 0x0a03, 0x0a04, 0x0a0b, 0x0a0e, 0x0a11, 0x0a12, 0x0a29, 0x0a29, 0x0a31, 0x0a31, 0x0a34, 0x0a34, 0x0a37, 0x0a37, 0x0a3a, 0x0a3b, 0x0a3d, 0x0a3d, 0x0a43, 0x0a46, 0x0a49, 0x0a4a, 0x0a4e, 0x0a58, 0x0a5d, 0x0a5d, 0x0a5f, 0x0a65, 0x0a75, 0x0a80, 0x0a84, 0x0a84, 0x0a8c, 0x0a8c, 0x0a8e, 0x0a8e, 0x0a92, 0x0a92, 0x0aa9, 0x0aa9, 0x0ab1, 0x0ab1, 0x0ab4, 0x0ab4, 0x0aba, 0x0abb, 0x0ac6, 0x0ac6, 0x0aca, 0x0aca, 0x0ace, 0x0acf, 0x0ad1, 0x0adf, 0x0ae1, 0x0ae5, 0x0af0, 0x0b00, 0x0b04, 0x0b04, 0x0b0d, 0x0b0e, 0x0b11, 0x0b12, 0x0b29, 0x0b29, 0x0b31, 0x0b31, 0x0b34, 0x0b35, 0x0b3a, 0x0b3b, 0x0b44, 0x0b46, 0x0b49, 0x0b4a, 0x0b4e, 0x0b55, 0x0b58, 0x0b5b, 0x0b5e, 0x0b5e, 0x0b62, 0x0b65, 0x0b71, 0x0b81, 0x0b84, 0x0b84, 0x0b8b, 0x0b8d, 0x0b91, 0x0b91, 0x0b96, 0x0b98, 0x0b9b, 0x0b9b, 0x0b9d, 0x0b9d, 0x0ba0, 0x0ba2, 0x0ba5, 0x0ba7, 0x0bab, 0x0bad, 0x0bb6, 0x0bb6, 0x0bba, 0x0bbd, 0x0bc3, 0x0bc5, 0x0bc9, 0x0bc9, 0x0bce, 0x0bd6, 0x0bd8, 0x0be6, 0x0bf3, 0x0c00, 0x0c04, 0x0c04, 0x0c0d, 0x0c0d, 0x0c11, 0x0c11, 0x0c29, 0x0c29, 0x0c34, 0x0c34, 0x0c3a, 0x0c3d, 0x0c45, 0x0c45, 0x0c49, 0x0c49, 0x0c4e, 0x0c54, 0x0c57, 0x0c5f, 0x0c62, 0x0c65, 0x0c70, 0x0c81, 0x0c84, 0x0c84, 0x0c8d, 0x0c8d, 0x0c91, 0x0c91, 0x0ca9, 0x0ca9, 0x0cb4, 0x0cb4, 0x0cba, 0x0cbd, 0x0cc5, 0x0cc5, 0x0cc9, 0x0cc9, 0x0cce, 0x0cd4, 0x0cd7, 0x0cdd, 0x0cdf, 0x0cdf, 0x0ce2, 0x0ce5, 0x0cf0, 0x0d01, 0x0d04, 0x0d04, 0x0d0d, 0x0d0d, 0x0d11, 0x0d11, 0x0d29, 0x0d29, 0x0d3a, 0x0d3d, 0x0d44, 0x0d45, 0x0d49, 0x0d49, 0x0d4e, 0x0d56, 0x0d58, 0x0d5f, 0x0d62, 0x0d65, 0x0d70, 0x0d81, 0x0d84, 0x0d84, 0x0d97, 0x0d99, 0x0db2, 0x0db2, 0x0dbc, 0x0dbc, 0x0dbe, 0x0dbf, 0x0dc7, 0x0dc9, 0x0dcb, 0x0dce, 0x0dd5, 0x0dd5, 0x0dd7, 0x0dd7, 0x0de0, 0x0df1, 0x0df5, 0x0e00, 0x0e3b, 0x0e3e, 0x0e5c, 0x0e80, 0x0e83, 0x0e83, 0x0e85, 0x0e86, 0x0e89, 0x0e89, 0x0e8b, 0x0e8c, 0x0e8e, 0x0e93, 0x0e98, 0x0e98, 0x0ea0, 0x0ea0, 0x0ea4, 0x0ea4, 0x0ea6, 0x0ea6, 0x0ea8, 0x0ea9, 0x0eac, 0x0eac, 0x0eba, 0x0eba, 0x0ebe, 0x0ebf, 0x0ec5, 0x0ec5, 0x0ec7, 0x0ec7, 0x0ece, 0x0ecf, 0x0eda, 0x0edb, 0x0ede, 0x0eff, 0x0f48, 0x0f48, 0x0f6b, 0x0f70, 0x0f8c, 0x0f8f, 0x0f98, 0x0f98, 0x0fbd, 0x0fbd, 0x0fcd, 0x0fce, 0x0fd0, 0x0fff, 0x1022, 0x1022, 0x1028, 0x1028, 0x102b, 0x102b, 0x1033, 0x1035, 0x103a, 0x103f, 0x105a, 0x109f, 0x10c6, 0x10cf, 0x10f9, 0x10fa, 0x10fc, 0x10ff, 0x115a, 0x115e, 0x11a3, 0x11a7, 0x11fa, 0x11ff, 0x1207, 0x1207, 0x1247, 0x1247, 0x1249, 0x1249, 0x124e, 0x124f, 0x1257, 0x1257, 0x1259, 0x1259, 0x125e, 0x125f, 0x1287, 0x1287, 0x1289, 0x1289, 0x128e, 0x128f, 0x12af, 0x12af, 0x12b1, 0x12b1, 0x12b6, 0x12b7, 0x12bf, 0x12bf, 0x12c1, 0x12c1, 0x12c6, 0x12c7, 0x12cf, 0x12cf, 0x12d7, 0x12d7, 0x12ef, 0x12ef, 0x130f, 0x130f, 0x1311, 0x1311, 0x1316, 0x1317, 0x131f, 0x131f, 0x1347, 0x1347, 0x135b, 0x1360, 0x137d, 0x139f, 0x13f5, 0x1400, 0x1677, 0x167f, 0x169d, 0x169f, 0x16f1, 0x16ff, 0x170d, 0x170d, 0x1715, 0x171f, 0x1737, 0x173f, 0x1754, 0x175f, 0x176d, 0x176d, 0x1771, 0x1771, 0x1774, 0x177f, 0x17dd, 0x17df, 0x17ea, 0x17ff, 0x180f, 0x180f, 0x181a, 0x181f, 0x1878, 0x187f, 0x18aa, 0x1dff, 0x1e9c, 0x1e9f, 0x1efa, 0x1eff, 0x1f16, 0x1f17, 0x1f1e, 0x1f1f, 0x1f46, 0x1f47, 0x1f4e, 0x1f4f, 0x1f58, 0x1f58, 0x1f5a, 0x1f5a, 0x1f5c, 0x1f5c, 0x1f5e, 0x1f5e, 0x1f7e, 0x1f7f, 0x1fb5, 0x1fb5, 0x1fc5, 0x1fc5, 0x1fd4, 0x1fd5, 0x1fdc, 0x1fdc, 0x1ff0, 0x1ff1, 0x1ff5, 0x1ff5, 0x1fff, 0x1fff, 0x2053, 0x2056, 0x2058, 0x205e, 0x2064, 0x2069, 0x2072, 0x2073, 0x208f, 0x209f, 0x20b2, 0x20cf, 0x20eb, 0x20ff, 0x213b, 0x213c, 0x214c, 0x2152, 0x2184, 0x218f, 0x23cf, 0x23ff, 0x2427, 0x243f, 0x244b, 0x245f, 0x24ff, 0x24ff, 0x2614, 0x2615, 0x2618, 0x2618, 0x267e, 0x267f, 0x268a, 0x2700, 0x2705, 0x2705, 0x270a, 0x270b, 0x2728, 0x2728, 0x274c, 0x274c, 0x274e, 0x274e, 0x2753, 0x2755, 0x2757, 0x2757, 0x275f, 0x2760, 0x2795, 0x2797, 0x27b0, 0x27b0, 0x27bf, 0x27cf, 0x27ec, 0x27ef, 0x2b00, 0x2e7f, 0x2e9a, 0x2e9a, 0x2ef4, 0x2eff, 0x2fd6, 0x2fef, 0x2ffc, 0x2fff, 0x3040, 0x3040, 0x3097, 0x3098, 0x3100, 0x3104, 0x312d, 0x3130, 0x318f, 0x318f, 0x31b8, 0x31ef, 0x321d, 0x321f, 0x3244, 0x3250, 0x327c, 0x327e, 0x32cc, 0x32cf, 0x32ff, 0x32ff, 0x3377, 0x337a, 0x33de, 0x33df, 0x33ff, 0x33ff, 0x4db6, 0x4dff, 0x9fa6, 0x9fff, 0xa48d, 0xa48f, 0xa4c7, 0xabff, 0xd7a4, 0xd7ff, 0xfa2e, 0xfa2f, 0xfa6b, 0xfaff, 0xfb07, 0xfb12, 0xfb18, 0xfb1c, 0xfb37, 0xfb37, 0xfb3d, 0xfb3d, 0xfb3f, 0xfb3f, 0xfb42, 0xfb42, 0xfb45, 0xfb45, 0xfbb2, 0xfbd2, 0xfd40, 0xfd4f, 0xfd90, 0xfd91, 0xfdc8, 0xfdcf, 0xfdfd, 0xfdff, 0xfe10, 0xfe1f, 0xfe24, 0xfe2f, 0xfe47, 0xfe48, 0xfe53, 0xfe53, 0xfe67, 0xfe67, 0xfe6c, 0xfe6f, 0xfe75, 0xfe75, 0xfefd, 0xfefe, 0xff00, 0xff00, 0xffbf, 0xffc1, 0xffc8, 0xffc9, 0xffd0, 0xffd1, 0xffd8, 0xffd9, 0xffdd, 0xffdf, 0xffe7, 0xffe7, 0xffef, 0xfff8, 0x10000, 0x102ff, 0x1031f, 0x1031f, 0x10324, 0x1032f, 0x1034b, 0x103ff, 0x10426, 0x10427, 0x1044e, 0x1cfff, 0x1d0f6, 0x1d0ff, 0x1d127, 0x1d129, 0x1d1de, 0x1d3ff, 0x1d455, 0x1d455, 0x1d49d, 0x1d49d, 0x1d4a0, 0x1d4a1, 0x1d4a3, 0x1d4a4, 0x1d4a7, 0x1d4a8, 0x1d4ad, 0x1d4ad, 0x1d4ba, 0x1d4ba, 0x1d4bc, 0x1d4bc, 0x1d4c1, 0x1d4c1, 0x1d4c4, 0x1d4c4, 0x1d506, 0x1d506, 0x1d50b, 0x1d50c, 0x1d515, 0x1d515, 0x1d51d, 0x1d51d, 0x1d53a, 0x1d53a, 0x1d53f, 0x1d53f, 0x1d545, 0x1d545, 0x1d547, 0x1d549, 0x1d551, 0x1d551, 0x1d6a4, 0x1d6a7, 0x1d7ca, 0x1d7cd, 0x1d800, 0x1fffd, 0x2a6d7, 0x2f7ff, 0x2fa1e, 0x2fffd, 0x30000, 0x3fffd, 0x40000, 0x4fffd, 0x50000, 0x5fffd, 0x60000, 0x6fffd, 0x70000, 0x7fffd, 0x80000, 0x8fffd, 0x90000, 0x9fffd, 0xa0000, 0xafffd, 0xb0000, 0xbfffd, 0xc0000, 0xcfffd, 0xd0000, 0xdfffd, 0xe0000, 0xe0000, 0xe0002, 0xe001f, 0xe0080, 0xefffd];
442// prettier-ignore-end
443
444const isUnassignedCodePoint = character => inRange(character, unassigned_code_points);
445
446// prettier-ignore-start
447/**
448 * B.1 Commonly mapped to nothing
449 * @link https://tools.ietf.org/html/rfc3454#appendix-B.1
450 */
451const commonly_mapped_to_nothing = [0x00ad, 0x00ad, 0x034f, 0x034f, 0x1806, 0x1806, 0x180b, 0x180b, 0x180c, 0x180c, 0x180d, 0x180d, 0x200b, 0x200b, 0x200c, 0x200c, 0x200d, 0x200d, 0x2060, 0x2060, 0xfe00, 0xfe00, 0xfe01, 0xfe01, 0xfe02, 0xfe02, 0xfe03, 0xfe03, 0xfe04, 0xfe04, 0xfe05, 0xfe05, 0xfe06, 0xfe06, 0xfe07, 0xfe07, 0xfe08, 0xfe08, 0xfe09, 0xfe09, 0xfe0a, 0xfe0a, 0xfe0b, 0xfe0b, 0xfe0c, 0xfe0c, 0xfe0d, 0xfe0d, 0xfe0e, 0xfe0e, 0xfe0f, 0xfe0f, 0xfeff, 0xfeff];
452// prettier-ignore-end
453
454const isCommonlyMappedToNothing = character => inRange(character, commonly_mapped_to_nothing);
455
456// prettier-ignore-start
457/**
458 * C.1.2 Non-ASCII space characters
459 * @link https://tools.ietf.org/html/rfc3454#appendix-C.1.2
460 */
461const non_ASCII_space_characters = [0x00a0, 0x00a0 /* NO-BREAK SPACE */, 0x1680, 0x1680 /* OGHAM SPACE MARK */, 0x2000, 0x2000 /* EN QUAD */, 0x2001, 0x2001 /* EM QUAD */, 0x2002, 0x2002 /* EN SPACE */, 0x2003, 0x2003 /* EM SPACE */, 0x2004, 0x2004 /* THREE-PER-EM SPACE */, 0x2005, 0x2005 /* FOUR-PER-EM SPACE */, 0x2006, 0x2006 /* SIX-PER-EM SPACE */, 0x2007, 0x2007 /* FIGURE SPACE */, 0x2008, 0x2008 /* PUNCTUATION SPACE */, 0x2009, 0x2009 /* THIN SPACE */, 0x200a, 0x200a /* HAIR SPACE */, 0x200b, 0x200b /* ZERO WIDTH SPACE */, 0x202f, 0x202f /* NARROW NO-BREAK SPACE */, 0x205f, 0x205f /* MEDIUM MATHEMATICAL SPACE */, 0x3000, 0x3000 /* IDEOGRAPHIC SPACE */];
462// prettier-ignore-end
463
464const isNonASCIISpaceCharacter = character => inRange(character, non_ASCII_space_characters);
465
466// prettier-ignore-start
467const non_ASCII_controls_characters = [
468/**
469 * C.2.2 Non-ASCII control characters
470 * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.2
471 */
4720x0080, 0x009f /* [CONTROL CHARACTERS] */, 0x06dd, 0x06dd /* ARABIC END OF AYAH */, 0x070f, 0x070f /* SYRIAC ABBREVIATION MARK */, 0x180e, 0x180e /* MONGOLIAN VOWEL SEPARATOR */, 0x200c, 0x200c /* ZERO WIDTH NON-JOINER */, 0x200d, 0x200d /* ZERO WIDTH JOINER */, 0x2028, 0x2028 /* LINE SEPARATOR */, 0x2029, 0x2029 /* PARAGRAPH SEPARATOR */, 0x2060, 0x2060 /* WORD JOINER */, 0x2061, 0x2061 /* FUNCTION APPLICATION */, 0x2062, 0x2062 /* INVISIBLE TIMES */, 0x2063, 0x2063 /* INVISIBLE SEPARATOR */, 0x206a, 0x206f /* [CONTROL CHARACTERS] */, 0xfeff, 0xfeff /* ZERO WIDTH NO-BREAK SPACE */, 0xfff9, 0xfffc /* [CONTROL CHARACTERS] */, 0x1d173, 0x1d17a /* [MUSICAL CONTROL CHARACTERS] */];
473const non_character_codepoints = [
474/**
475 * C.4 Non-character code points
476 * @link https://tools.ietf.org/html/rfc3454#appendix-C.4
477 */
4780xfdd0, 0xfdef /* [NONCHARACTER CODE POINTS] */, 0xfffe, 0xffff /* [NONCHARACTER CODE POINTS] */, 0x1fffe, 0x1ffff /* [NONCHARACTER CODE POINTS] */, 0x2fffe, 0x2ffff /* [NONCHARACTER CODE POINTS] */, 0x3fffe, 0x3ffff /* [NONCHARACTER CODE POINTS] */, 0x4fffe, 0x4ffff /* [NONCHARACTER CODE POINTS] */, 0x5fffe, 0x5ffff /* [NONCHARACTER CODE POINTS] */, 0x6fffe, 0x6ffff /* [NONCHARACTER CODE POINTS] */, 0x7fffe, 0x7ffff /* [NONCHARACTER CODE POINTS] */, 0x8fffe, 0x8ffff /* [NONCHARACTER CODE POINTS] */, 0x9fffe, 0x9ffff /* [NONCHARACTER CODE POINTS] */, 0xafffe, 0xaffff /* [NONCHARACTER CODE POINTS] */, 0xbfffe, 0xbffff /* [NONCHARACTER CODE POINTS] */, 0xcfffe, 0xcffff /* [NONCHARACTER CODE POINTS] */, 0xdfffe, 0xdffff /* [NONCHARACTER CODE POINTS] */, 0xefffe, 0xeffff /* [NONCHARACTER CODE POINTS] */, 0x10fffe, 0x10ffff /* [NONCHARACTER CODE POINTS] */];
479
480/**
481 * 2.3. Prohibited Output
482 */
483const prohibited_characters = [
484/**
485 * C.2.1 ASCII control characters
486 * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.1
487 */
4880, 0x001f /* [CONTROL CHARACTERS] */, 0x007f, 0x007f /* DELETE */,
489/**
490 * C.8 Change display properties or are deprecated
491 * @link https://tools.ietf.org/html/rfc3454#appendix-C.8
492 */
4930x0340, 0x0340 /* COMBINING GRAVE TONE MARK */, 0x0341, 0x0341 /* COMBINING ACUTE TONE MARK */, 0x200e, 0x200e /* LEFT-TO-RIGHT MARK */, 0x200f, 0x200f /* RIGHT-TO-LEFT MARK */, 0x202a, 0x202a /* LEFT-TO-RIGHT EMBEDDING */, 0x202b, 0x202b /* RIGHT-TO-LEFT EMBEDDING */, 0x202c, 0x202c /* POP DIRECTIONAL FORMATTING */, 0x202d, 0x202d /* LEFT-TO-RIGHT OVERRIDE */, 0x202e, 0x202e /* RIGHT-TO-LEFT OVERRIDE */, 0x206a, 0x206a /* INHIBIT SYMMETRIC SWAPPING */, 0x206b, 0x206b /* ACTIVATE SYMMETRIC SWAPPING */, 0x206c, 0x206c /* INHIBIT ARABIC FORM SHAPING */, 0x206d, 0x206d /* ACTIVATE ARABIC FORM SHAPING */, 0x206e, 0x206e /* NATIONAL DIGIT SHAPES */, 0x206f, 0x206f /* NOMINAL DIGIT SHAPES */,
494/**
495 * C.7 Inappropriate for canonical representation
496 * @link https://tools.ietf.org/html/rfc3454#appendix-C.7
497 */
4980x2ff0, 0x2ffb /* [IDEOGRAPHIC DESCRIPTION CHARACTERS] */,
499/**
500 * C.5 Surrogate codes
501 * @link https://tools.ietf.org/html/rfc3454#appendix-C.5
502 */
5030xd800, 0xdfff,
504/**
505 * C.3 Private use
506 * @link https://tools.ietf.org/html/rfc3454#appendix-C.3
507 */
5080xe000, 0xf8ff /* [PRIVATE USE, PLANE 0] */,
509/**
510 * C.6 Inappropriate for plain text
511 * @link https://tools.ietf.org/html/rfc3454#appendix-C.6
512 */
5130xfff9, 0xfff9 /* INTERLINEAR ANNOTATION ANCHOR */, 0xfffa, 0xfffa /* INTERLINEAR ANNOTATION SEPARATOR */, 0xfffb, 0xfffb /* INTERLINEAR ANNOTATION TERMINATOR */, 0xfffc, 0xfffc /* OBJECT REPLACEMENT CHARACTER */, 0xfffd, 0xfffd /* REPLACEMENT CHARACTER */,
514/**
515 * C.9 Tagging characters
516 * @link https://tools.ietf.org/html/rfc3454#appendix-C.9
517 */
5180xe0001, 0xe0001 /* LANGUAGE TAG */, 0xe0020, 0xe007f /* [TAGGING CHARACTERS] */,
519/**
520 * C.3 Private use
521 * @link https://tools.ietf.org/html/rfc3454#appendix-C.3
522 */
523
5240xf0000, 0xffffd /* [PRIVATE USE, PLANE 15] */, 0x100000, 0x10fffd /* [PRIVATE USE, PLANE 16] */];
525// prettier-ignore-end
526
527const isProhibitedCharacter = character => inRange(character, non_ASCII_space_characters) || inRange(character, prohibited_characters) || inRange(character, non_ASCII_controls_characters) || inRange(character, non_character_codepoints);
528
529// prettier-ignore-start
530/**
531 * D.1 Characters with bidirectional property "R" or "AL"
532 * @link https://tools.ietf.org/html/rfc3454#appendix-D.1
533 */
534const bidirectional_r_al = [0x05be, 0x05be, 0x05c0, 0x05c0, 0x05c3, 0x05c3, 0x05d0, 0x05ea, 0x05f0, 0x05f4, 0x061b, 0x061b, 0x061f, 0x061f, 0x0621, 0x063a, 0x0640, 0x064a, 0x066d, 0x066f, 0x0671, 0x06d5, 0x06dd, 0x06dd, 0x06e5, 0x06e6, 0x06fa, 0x06fe, 0x0700, 0x070d, 0x0710, 0x0710, 0x0712, 0x072c, 0x0780, 0x07a5, 0x07b1, 0x07b1, 0x200f, 0x200f, 0xfb1d, 0xfb1d, 0xfb1f, 0xfb28, 0xfb2a, 0xfb36, 0xfb38, 0xfb3c, 0xfb3e, 0xfb3e, 0xfb40, 0xfb41, 0xfb43, 0xfb44, 0xfb46, 0xfbb1, 0xfbd3, 0xfd3d, 0xfd50, 0xfd8f, 0xfd92, 0xfdc7, 0xfdf0, 0xfdfc, 0xfe70, 0xfe74, 0xfe76, 0xfefc];
535// prettier-ignore-end
536
537const isBidirectionalRAL = character => inRange(character, bidirectional_r_al);
538
539// prettier-ignore-start
540/**
541 * D.2 Characters with bidirectional property "L"
542 * @link https://tools.ietf.org/html/rfc3454#appendix-D.2
543 */
544const bidirectional_l = [0x0041, 0x005a, 0x0061, 0x007a, 0x00aa, 0x00aa, 0x00b5, 0x00b5, 0x00ba, 0x00ba, 0x00c0, 0x00d6, 0x00d8, 0x00f6, 0x00f8, 0x0220, 0x0222, 0x0233, 0x0250, 0x02ad, 0x02b0, 0x02b8, 0x02bb, 0x02c1, 0x02d0, 0x02d1, 0x02e0, 0x02e4, 0x02ee, 0x02ee, 0x037a, 0x037a, 0x0386, 0x0386, 0x0388, 0x038a, 0x038c, 0x038c, 0x038e, 0x03a1, 0x03a3, 0x03ce, 0x03d0, 0x03f5, 0x0400, 0x0482, 0x048a, 0x04ce, 0x04d0, 0x04f5, 0x04f8, 0x04f9, 0x0500, 0x050f, 0x0531, 0x0556, 0x0559, 0x055f, 0x0561, 0x0587, 0x0589, 0x0589, 0x0903, 0x0903, 0x0905, 0x0939, 0x093d, 0x0940, 0x0949, 0x094c, 0x0950, 0x0950, 0x0958, 0x0961, 0x0964, 0x0970, 0x0982, 0x0983, 0x0985, 0x098c, 0x098f, 0x0990, 0x0993, 0x09a8, 0x09aa, 0x09b0, 0x09b2, 0x09b2, 0x09b6, 0x09b9, 0x09be, 0x09c0, 0x09c7, 0x09c8, 0x09cb, 0x09cc, 0x09d7, 0x09d7, 0x09dc, 0x09dd, 0x09df, 0x09e1, 0x09e6, 0x09f1, 0x09f4, 0x09fa, 0x0a05, 0x0a0a, 0x0a0f, 0x0a10, 0x0a13, 0x0a28, 0x0a2a, 0x0a30, 0x0a32, 0x0a33, 0x0a35, 0x0a36, 0x0a38, 0x0a39, 0x0a3e, 0x0a40, 0x0a59, 0x0a5c, 0x0a5e, 0x0a5e, 0x0a66, 0x0a6f, 0x0a72, 0x0a74, 0x0a83, 0x0a83, 0x0a85, 0x0a8b, 0x0a8d, 0x0a8d, 0x0a8f, 0x0a91, 0x0a93, 0x0aa8, 0x0aaa, 0x0ab0, 0x0ab2, 0x0ab3, 0x0ab5, 0x0ab9, 0x0abd, 0x0ac0, 0x0ac9, 0x0ac9, 0x0acb, 0x0acc, 0x0ad0, 0x0ad0, 0x0ae0, 0x0ae0, 0x0ae6, 0x0aef, 0x0b02, 0x0b03, 0x0b05, 0x0b0c, 0x0b0f, 0x0b10, 0x0b13, 0x0b28, 0x0b2a, 0x0b30, 0x0b32, 0x0b33, 0x0b36, 0x0b39, 0x0b3d, 0x0b3e, 0x0b40, 0x0b40, 0x0b47, 0x0b48, 0x0b4b, 0x0b4c, 0x0b57, 0x0b57, 0x0b5c, 0x0b5d, 0x0b5f, 0x0b61, 0x0b66, 0x0b70, 0x0b83, 0x0b83, 0x0b85, 0x0b8a, 0x0b8e, 0x0b90, 0x0b92, 0x0b95, 0x0b99, 0x0b9a, 0x0b9c, 0x0b9c, 0x0b9e, 0x0b9f, 0x0ba3, 0x0ba4, 0x0ba8, 0x0baa, 0x0bae, 0x0bb5, 0x0bb7, 0x0bb9, 0x0bbe, 0x0bbf, 0x0bc1, 0x0bc2, 0x0bc6, 0x0bc8, 0x0bca, 0x0bcc, 0x0bd7, 0x0bd7, 0x0be7, 0x0bf2, 0x0c01, 0x0c03, 0x0c05, 0x0c0c, 0x0c0e, 0x0c10, 0x0c12, 0x0c28, 0x0c2a, 0x0c33, 0x0c35, 0x0c39, 0x0c41, 0x0c44, 0x0c60, 0x0c61, 0x0c66, 0x0c6f, 0x0c82, 0x0c83, 0x0c85, 0x0c8c, 0x0c8e, 0x0c90, 0x0c92, 0x0ca8, 0x0caa, 0x0cb3, 0x0cb5, 0x0cb9, 0x0cbe, 0x0cbe, 0x0cc0, 0x0cc4, 0x0cc7, 0x0cc8, 0x0cca, 0x0ccb, 0x0cd5, 0x0cd6, 0x0cde, 0x0cde, 0x0ce0, 0x0ce1, 0x0ce6, 0x0cef, 0x0d02, 0x0d03, 0x0d05, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d28, 0x0d2a, 0x0d39, 0x0d3e, 0x0d40, 0x0d46, 0x0d48, 0x0d4a, 0x0d4c, 0x0d57, 0x0d57, 0x0d60, 0x0d61, 0x0d66, 0x0d6f, 0x0d82, 0x0d83, 0x0d85, 0x0d96, 0x0d9a, 0x0db1, 0x0db3, 0x0dbb, 0x0dbd, 0x0dbd, 0x0dc0, 0x0dc6, 0x0dcf, 0x0dd1, 0x0dd8, 0x0ddf, 0x0df2, 0x0df4, 0x0e01, 0x0e30, 0x0e32, 0x0e33, 0x0e40, 0x0e46, 0x0e4f, 0x0e5b, 0x0e81, 0x0e82, 0x0e84, 0x0e84, 0x0e87, 0x0e88, 0x0e8a, 0x0e8a, 0x0e8d, 0x0e8d, 0x0e94, 0x0e97, 0x0e99, 0x0e9f, 0x0ea1, 0x0ea3, 0x0ea5, 0x0ea5, 0x0ea7, 0x0ea7, 0x0eaa, 0x0eab, 0x0ead, 0x0eb0, 0x0eb2, 0x0eb3, 0x0ebd, 0x0ebd, 0x0ec0, 0x0ec4, 0x0ec6, 0x0ec6, 0x0ed0, 0x0ed9, 0x0edc, 0x0edd, 0x0f00, 0x0f17, 0x0f1a, 0x0f34, 0x0f36, 0x0f36, 0x0f38, 0x0f38, 0x0f3e, 0x0f47, 0x0f49, 0x0f6a, 0x0f7f, 0x0f7f, 0x0f85, 0x0f85, 0x0f88, 0x0f8b, 0x0fbe, 0x0fc5, 0x0fc7, 0x0fcc, 0x0fcf, 0x0fcf, 0x1000, 0x1021, 0x1023, 0x1027, 0x1029, 0x102a, 0x102c, 0x102c, 0x1031, 0x1031, 0x1038, 0x1038, 0x1040, 0x1057, 0x10a0, 0x10c5, 0x10d0, 0x10f8, 0x10fb, 0x10fb, 0x1100, 0x1159, 0x115f, 0x11a2, 0x11a8, 0x11f9, 0x1200, 0x1206, 0x1208, 0x1246, 0x1248, 0x1248, 0x124a, 0x124d, 0x1250, 0x1256, 0x1258, 0x1258, 0x125a, 0x125d, 0x1260, 0x1286, 0x1288, 0x1288, 0x128a, 0x128d, 0x1290, 0x12ae, 0x12b0, 0x12b0, 0x12b2, 0x12b5, 0x12b8, 0x12be, 0x12c0, 0x12c0, 0x12c2, 0x12c5, 0x12c8, 0x12ce, 0x12d0, 0x12d6, 0x12d8, 0x12ee, 0x12f0, 0x130e, 0x1310, 0x1310, 0x1312, 0x1315, 0x1318, 0x131e, 0x1320, 0x1346, 0x1348, 0x135a, 0x1361, 0x137c, 0x13a0, 0x13f4, 0x1401, 0x1676, 0x1681, 0x169a, 0x16a0, 0x16f0, 0x1700, 0x170c, 0x170e, 0x1711, 0x1720, 0x1731, 0x1735, 0x1736, 0x1740, 0x1751, 0x1760, 0x176c, 0x176e, 0x1770, 0x1780, 0x17b6, 0x17be, 0x17c5, 0x17c7, 0x17c8, 0x17d4, 0x17da, 0x17dc, 0x17dc, 0x17e0, 0x17e9, 0x1810, 0x1819, 0x1820, 0x1877, 0x1880, 0x18a8, 0x1e00, 0x1e9b, 0x1ea0, 0x1ef9, 0x1f00, 0x1f15, 0x1f18, 0x1f1d, 0x1f20, 0x1f45, 0x1f48, 0x1f4d, 0x1f50, 0x1f57, 0x1f59, 0x1f59, 0x1f5b, 0x1f5b, 0x1f5d, 0x1f5d, 0x1f5f, 0x1f7d, 0x1f80, 0x1fb4, 0x1fb6, 0x1fbc, 0x1fbe, 0x1fbe, 0x1fc2, 0x1fc4, 0x1fc6, 0x1fcc, 0x1fd0, 0x1fd3, 0x1fd6, 0x1fdb, 0x1fe0, 0x1fec, 0x1ff2, 0x1ff4, 0x1ff6, 0x1ffc, 0x200e, 0x200e, 0x2071, 0x2071, 0x207f, 0x207f, 0x2102, 0x2102, 0x2107, 0x2107, 0x210a, 0x2113, 0x2115, 0x2115, 0x2119, 0x211d, 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128, 0x212a, 0x212d, 0x212f, 0x2131, 0x2133, 0x2139, 0x213d, 0x213f, 0x2145, 0x2149, 0x2160, 0x2183, 0x2336, 0x237a, 0x2395, 0x2395, 0x249c, 0x24e9, 0x3005, 0x3007, 0x3021, 0x3029, 0x3031, 0x3035, 0x3038, 0x303c, 0x3041, 0x3096, 0x309d, 0x309f, 0x30a1, 0x30fa, 0x30fc, 0x30ff, 0x3105, 0x312c, 0x3131, 0x318e, 0x3190, 0x31b7, 0x31f0, 0x321c, 0x3220, 0x3243, 0x3260, 0x327b, 0x327f, 0x32b0, 0x32c0, 0x32cb, 0x32d0, 0x32fe, 0x3300, 0x3376, 0x337b, 0x33dd, 0x33e0, 0x33fe, 0x3400, 0x4db5, 0x4e00, 0x9fa5, 0xa000, 0xa48c, 0xac00, 0xd7a3, 0xd800, 0xfa2d, 0xfa30, 0xfa6a, 0xfb00, 0xfb06, 0xfb13, 0xfb17, 0xff21, 0xff3a, 0xff41, 0xff5a, 0xff66, 0xffbe, 0xffc2, 0xffc7, 0xffca, 0xffcf, 0xffd2, 0xffd7, 0xffda, 0xffdc, 0x10300, 0x1031e, 0x10320, 0x10323, 0x10330, 0x1034a, 0x10400, 0x10425, 0x10428, 0x1044d, 0x1d000, 0x1d0f5, 0x1d100, 0x1d126, 0x1d12a, 0x1d166, 0x1d16a, 0x1d172, 0x1d183, 0x1d184, 0x1d18c, 0x1d1a9, 0x1d1ae, 0x1d1dd, 0x1d400, 0x1d454, 0x1d456, 0x1d49c, 0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a2, 0x1d4a5, 0x1d4a6, 0x1d4a9, 0x1d4ac, 0x1d4ae, 0x1d4b9, 0x1d4bb, 0x1d4bb, 0x1d4bd, 0x1d4c0, 0x1d4c2, 0x1d4c3, 0x1d4c5, 0x1d505, 0x1d507, 0x1d50a, 0x1d50d, 0x1d514, 0x1d516, 0x1d51c, 0x1d51e, 0x1d539, 0x1d53b, 0x1d53e, 0x1d540, 0x1d544, 0x1d546, 0x1d546, 0x1d54a, 0x1d550, 0x1d552, 0x1d6a3, 0x1d6a8, 0x1d7c9, 0x20000, 0x2a6d6, 0x2f800, 0x2fa1d, 0xf0000, 0xffffd, 0x100000, 0x10fffd];
545// prettier-ignore-end
546
547const isBidirectionalL = character => inRange(character, bidirectional_l);
548
549// 2.1. Mapping
550
551/**
552 * non-ASCII space characters [StringPrep, C.1.2] that can be
553 * mapped to SPACE (U+0020)
554 */
555const mapping2space = isNonASCIISpaceCharacter;
556
557/**
558 * the "commonly mapped to nothing" characters [StringPrep, B.1]
559 * that can be mapped to nothing.
560 */
561const mapping2nothing = isCommonlyMappedToNothing;
562
563// utils
564const getCodePoint = character => character.codePointAt(0);
565const first = x => x[0];
566const last = x => x[x.length - 1];
567
568/**
569 * Convert provided string into an array of Unicode Code Points.
570 * Based on https://stackoverflow.com/a/21409165/1556249
571 * and https://www.npmjs.com/package/code-point-at.
572 * @param {string} input
573 * @returns {number[]}
574 */
575function toCodePoints(input) {
576 const codepoints = [];
577 const size = input.length;
578 for (let i = 0; i < size; i += 1) {
579 const before = input.charCodeAt(i);
580 if (before >= 0xd800 && before <= 0xdbff && size > i + 1) {
581 const next = input.charCodeAt(i + 1);
582 if (next >= 0xdc00 && next <= 0xdfff) {
583 codepoints.push((before - 0xd800) * 0x400 + next - 0xdc00 + 0x10000);
584 i += 1;
585 continue;
586 }
587 }
588 codepoints.push(before);
589 }
590 return codepoints;
591}
592
593/**
594 * SASLprep.
595 * @param {string} input
596 * @param {Object} opts
597 * @param {boolean} opts.allowUnassigned
598 * @returns {string}
599 */
600function saslprep(input, opts = {}) {
601 if (typeof input !== 'string') {
602 throw new TypeError('Expected string.');
603 }
604 if (input.length === 0) {
605 return '';
606 }
607
608 // 1. Map
609 const mapped_input = toCodePoints(input)
610 // 1.1 mapping to space
611 .map(character => mapping2space(character) ? 0x20 : character)
612 // 1.2 mapping to nothing
613 .filter(character => !mapping2nothing(character));
614
615 // 2. Normalize
616 const normalized_input = String.fromCodePoint.apply(null, mapped_input).normalize('NFKC');
617 const normalized_map = toCodePoints(normalized_input);
618
619 // 3. Prohibit
620 const hasProhibited = normalized_map.some(isProhibitedCharacter);
621 if (hasProhibited) {
622 throw new Error('Prohibited character, see https://tools.ietf.org/html/rfc4013#section-2.3');
623 }
624
625 // Unassigned Code Points
626 if (opts.allowUnassigned !== true) {
627 const hasUnassigned = normalized_map.some(isUnassignedCodePoint);
628 if (hasUnassigned) {
629 throw new Error('Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5');
630 }
631 }
632
633 // 4. check bidi
634
635 const hasBidiRAL = normalized_map.some(isBidirectionalRAL);
636 const hasBidiL = normalized_map.some(isBidirectionalL);
637
638 // 4.1 If a string contains any RandALCat character, the string MUST NOT
639 // contain any LCat character.
640 if (hasBidiRAL && hasBidiL) {
641 throw new Error('String must not contain RandALCat and LCat at the same time,' + ' see https://tools.ietf.org/html/rfc3454#section-6');
642 }
643
644 /**
645 * 4.2 If a string contains any RandALCat character, a RandALCat
646 * character MUST be the first character of the string, and a
647 * RandALCat character MUST be the last character of the string.
648 */
649
650 const isFirstBidiRAL = isBidirectionalRAL(getCodePoint(first(normalized_input)));
651 const isLastBidiRAL = isBidirectionalRAL(getCodePoint(last(normalized_input)));
652 if (hasBidiRAL && !(isFirstBidiRAL && isLastBidiRAL)) {
653 throw new Error('Bidirectional RandALCat character must be the first and the last' + ' character of the string, see https://tools.ietf.org/html/rfc3454#section-6');
654 }
655 return normalized_input;
656}
657
658/*
659 PDFSecurity - represents PDF security settings
660 By Yang Liu <hi@zesik.com>
661 */
662class PDFSecurity {
663 static generateFileID(info = {}) {
664 let infoStr = `${info.CreationDate.getTime()}\n`;
665 for (let key in info) {
666 // eslint-disable-next-line no-prototype-builtins
667 if (!info.hasOwnProperty(key)) {
668 continue;
669 }
670 infoStr += `${key}: ${info[key].valueOf()}\n`;
671 }
672 return wordArrayToBuffer(CryptoJS.MD5(infoStr));
673 }
674 static generateRandomWordArray(bytes) {
675 return CryptoJS.lib.WordArray.random(bytes);
676 }
677 static create(document, options = {}) {
678 if (!options.ownerPassword && !options.userPassword) {
679 return null;
680 }
681 return new PDFSecurity(document, options);
682 }
683 constructor(document, options = {}) {
684 if (!options.ownerPassword && !options.userPassword) {
685 throw new Error('None of owner password and user password is defined.');
686 }
687 this.document = document;
688 this._setupEncryption(options);
689 }
690 _setupEncryption(options) {
691 switch (options.pdfVersion) {
692 case '1.4':
693 case '1.5':
694 this.version = 2;
695 break;
696 case '1.6':
697 case '1.7':
698 this.version = 4;
699 break;
700 case '1.7ext3':
701 this.version = 5;
702 break;
703 default:
704 this.version = 1;
705 break;
706 }
707 const encDict = {
708 Filter: 'Standard'
709 };
710 switch (this.version) {
711 case 1:
712 case 2:
713 case 4:
714 this._setupEncryptionV1V2V4(this.version, encDict, options);
715 break;
716 case 5:
717 this._setupEncryptionV5(encDict, options);
718 break;
719 }
720 this.dictionary = this.document.ref(encDict);
721 }
722 _setupEncryptionV1V2V4(v, encDict, options) {
723 let r, permissions;
724 switch (v) {
725 case 1:
726 r = 2;
727 this.keyBits = 40;
728 permissions = getPermissionsR2(options.permissions);
729 break;
730 case 2:
731 r = 3;
732 this.keyBits = 128;
733 permissions = getPermissionsR3(options.permissions);
734 break;
735 case 4:
736 r = 4;
737 this.keyBits = 128;
738 permissions = getPermissionsR3(options.permissions);
739 break;
740 }
741 const paddedUserPassword = processPasswordR2R3R4(options.userPassword);
742 const paddedOwnerPassword = options.ownerPassword ? processPasswordR2R3R4(options.ownerPassword) : paddedUserPassword;
743 const ownerPasswordEntry = getOwnerPasswordR2R3R4(r, this.keyBits, paddedUserPassword, paddedOwnerPassword);
744 this.encryptionKey = getEncryptionKeyR2R3R4(r, this.keyBits, this.document._id, paddedUserPassword, ownerPasswordEntry, permissions);
745 let userPasswordEntry;
746 if (r === 2) {
747 userPasswordEntry = getUserPasswordR2(this.encryptionKey);
748 } else {
749 userPasswordEntry = getUserPasswordR3R4(this.document._id, this.encryptionKey);
750 }
751 encDict.V = v;
752 if (v >= 2) {
753 encDict.Length = this.keyBits;
754 }
755 if (v === 4) {
756 encDict.CF = {
757 StdCF: {
758 AuthEvent: 'DocOpen',
759 CFM: 'AESV2',
760 Length: this.keyBits / 8
761 }
762 };
763 encDict.StmF = 'StdCF';
764 encDict.StrF = 'StdCF';
765 }
766 encDict.R = r;
767 encDict.O = wordArrayToBuffer(ownerPasswordEntry);
768 encDict.U = wordArrayToBuffer(userPasswordEntry);
769 encDict.P = permissions;
770 }
771 _setupEncryptionV5(encDict, options) {
772 this.keyBits = 256;
773 const permissions = getPermissionsR3(options.permissions);
774 const processedUserPassword = processPasswordR5(options.userPassword);
775 const processedOwnerPassword = options.ownerPassword ? processPasswordR5(options.ownerPassword) : processedUserPassword;
776 this.encryptionKey = getEncryptionKeyR5(PDFSecurity.generateRandomWordArray);
777 const userPasswordEntry = getUserPasswordR5(processedUserPassword, PDFSecurity.generateRandomWordArray);
778 const userKeySalt = CryptoJS.lib.WordArray.create(userPasswordEntry.words.slice(10, 12), 8);
779 const userEncryptionKeyEntry = getUserEncryptionKeyR5(processedUserPassword, userKeySalt, this.encryptionKey);
780 const ownerPasswordEntry = getOwnerPasswordR5(processedOwnerPassword, userPasswordEntry, PDFSecurity.generateRandomWordArray);
781 const ownerKeySalt = CryptoJS.lib.WordArray.create(ownerPasswordEntry.words.slice(10, 12), 8);
782 const ownerEncryptionKeyEntry = getOwnerEncryptionKeyR5(processedOwnerPassword, ownerKeySalt, userPasswordEntry, this.encryptionKey);
783 const permsEntry = getEncryptedPermissionsR5(permissions, this.encryptionKey, PDFSecurity.generateRandomWordArray);
784 encDict.V = 5;
785 encDict.Length = this.keyBits;
786 encDict.CF = {
787 StdCF: {
788 AuthEvent: 'DocOpen',
789 CFM: 'AESV3',
790 Length: this.keyBits / 8
791 }
792 };
793 encDict.StmF = 'StdCF';
794 encDict.StrF = 'StdCF';
795 encDict.R = 5;
796 encDict.O = wordArrayToBuffer(ownerPasswordEntry);
797 encDict.OE = wordArrayToBuffer(ownerEncryptionKeyEntry);
798 encDict.U = wordArrayToBuffer(userPasswordEntry);
799 encDict.UE = wordArrayToBuffer(userEncryptionKeyEntry);
800 encDict.P = permissions;
801 encDict.Perms = wordArrayToBuffer(permsEntry);
802 }
803 getEncryptFn(obj, gen) {
804 let digest;
805 if (this.version < 5) {
806 digest = this.encryptionKey.clone().concat(CryptoJS.lib.WordArray.create([(obj & 0xff) << 24 | (obj & 0xff00) << 8 | obj >> 8 & 0xff00 | gen & 0xff, (gen & 0xff00) << 16], 5));
807 }
808 if (this.version === 1 || this.version === 2) {
809 let key = CryptoJS.MD5(digest);
810 key.sigBytes = Math.min(16, this.keyBits / 8 + 5);
811 return buffer => wordArrayToBuffer(CryptoJS.RC4.encrypt(CryptoJS.lib.WordArray.create(buffer), key).ciphertext);
812 }
813 let key;
814 if (this.version === 4) {
815 key = CryptoJS.MD5(digest.concat(CryptoJS.lib.WordArray.create([0x73416c54], 4)));
816 } else {
817 key = this.encryptionKey;
818 }
819 const iv = PDFSecurity.generateRandomWordArray(16);
820 const options = {
821 mode: CryptoJS.mode.CBC,
822 padding: CryptoJS.pad.Pkcs7,
823 iv
824 };
825 return buffer => wordArrayToBuffer(iv.clone().concat(CryptoJS.AES.encrypt(CryptoJS.lib.WordArray.create(buffer), key, options).ciphertext));
826 }
827 end() {
828 this.dictionary.end();
829 }
830}
831function getPermissionsR2(permissionObject = {}) {
832 let permissions = 0xffffffc0 >> 0;
833 if (permissionObject.printing) {
834 permissions |= 0b000000000100;
835 }
836 if (permissionObject.modifying) {
837 permissions |= 0b000000001000;
838 }
839 if (permissionObject.copying) {
840 permissions |= 0b000000010000;
841 }
842 if (permissionObject.annotating) {
843 permissions |= 0b000000100000;
844 }
845 return permissions;
846}
847function getPermissionsR3(permissionObject = {}) {
848 let permissions = 0xfffff0c0 >> 0;
849 if (permissionObject.printing === 'lowResolution') {
850 permissions |= 0b000000000100;
851 }
852 if (permissionObject.printing === 'highResolution') {
853 permissions |= 0b100000000100;
854 }
855 if (permissionObject.modifying) {
856 permissions |= 0b000000001000;
857 }
858 if (permissionObject.copying) {
859 permissions |= 0b000000010000;
860 }
861 if (permissionObject.annotating) {
862 permissions |= 0b000000100000;
863 }
864 if (permissionObject.fillingForms) {
865 permissions |= 0b000100000000;
866 }
867 if (permissionObject.contentAccessibility) {
868 permissions |= 0b001000000000;
869 }
870 if (permissionObject.documentAssembly) {
871 permissions |= 0b010000000000;
872 }
873 return permissions;
874}
875function getUserPasswordR2(encryptionKey) {
876 return CryptoJS.RC4.encrypt(processPasswordR2R3R4(), encryptionKey).ciphertext;
877}
878function getUserPasswordR3R4(documentId, encryptionKey) {
879 const key = encryptionKey.clone();
880 let cipher = CryptoJS.MD5(processPasswordR2R3R4().concat(CryptoJS.lib.WordArray.create(documentId)));
881 for (let i = 0; i < 20; i++) {
882 const xorRound = Math.ceil(key.sigBytes / 4);
883 for (let j = 0; j < xorRound; j++) {
884 key.words[j] = encryptionKey.words[j] ^ (i | i << 8 | i << 16 | i << 24);
885 }
886 cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext;
887 }
888 return cipher.concat(CryptoJS.lib.WordArray.create(null, 16));
889}
890function getOwnerPasswordR2R3R4(r, keyBits, paddedUserPassword, paddedOwnerPassword) {
891 let digest = paddedOwnerPassword;
892 let round = r >= 3 ? 51 : 1;
893 for (let i = 0; i < round; i++) {
894 digest = CryptoJS.MD5(digest);
895 }
896 const key = digest.clone();
897 key.sigBytes = keyBits / 8;
898 let cipher = paddedUserPassword;
899 round = r >= 3 ? 20 : 1;
900 for (let i = 0; i < round; i++) {
901 const xorRound = Math.ceil(key.sigBytes / 4);
902 for (let j = 0; j < xorRound; j++) {
903 key.words[j] = digest.words[j] ^ (i | i << 8 | i << 16 | i << 24);
904 }
905 cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext;
906 }
907 return cipher;
908}
909function getEncryptionKeyR2R3R4(r, keyBits, documentId, paddedUserPassword, ownerPasswordEntry, permissions) {
910 let key = paddedUserPassword.clone().concat(ownerPasswordEntry).concat(CryptoJS.lib.WordArray.create([lsbFirstWord(permissions)], 4)).concat(CryptoJS.lib.WordArray.create(documentId));
911 const round = r >= 3 ? 51 : 1;
912 for (let i = 0; i < round; i++) {
913 key = CryptoJS.MD5(key);
914 key.sigBytes = keyBits / 8;
915 }
916 return key;
917}
918function getUserPasswordR5(processedUserPassword, generateRandomWordArray) {
919 const validationSalt = generateRandomWordArray(8);
920 const keySalt = generateRandomWordArray(8);
921 return CryptoJS.SHA256(processedUserPassword.clone().concat(validationSalt)).concat(validationSalt).concat(keySalt);
922}
923function getUserEncryptionKeyR5(processedUserPassword, userKeySalt, encryptionKey) {
924 const key = CryptoJS.SHA256(processedUserPassword.clone().concat(userKeySalt));
925 const options = {
926 mode: CryptoJS.mode.CBC,
927 padding: CryptoJS.pad.NoPadding,
928 iv: CryptoJS.lib.WordArray.create(null, 16)
929 };
930 return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext;
931}
932function getOwnerPasswordR5(processedOwnerPassword, userPasswordEntry, generateRandomWordArray) {
933 const validationSalt = generateRandomWordArray(8);
934 const keySalt = generateRandomWordArray(8);
935 return CryptoJS.SHA256(processedOwnerPassword.clone().concat(validationSalt).concat(userPasswordEntry)).concat(validationSalt).concat(keySalt);
936}
937function getOwnerEncryptionKeyR5(processedOwnerPassword, ownerKeySalt, userPasswordEntry, encryptionKey) {
938 const key = CryptoJS.SHA256(processedOwnerPassword.clone().concat(ownerKeySalt).concat(userPasswordEntry));
939 const options = {
940 mode: CryptoJS.mode.CBC,
941 padding: CryptoJS.pad.NoPadding,
942 iv: CryptoJS.lib.WordArray.create(null, 16)
943 };
944 return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext;
945}
946function getEncryptionKeyR5(generateRandomWordArray) {
947 return generateRandomWordArray(32);
948}
949function getEncryptedPermissionsR5(permissions, encryptionKey, generateRandomWordArray) {
950 const cipher = CryptoJS.lib.WordArray.create([lsbFirstWord(permissions), 0xffffffff, 0x54616462], 12).concat(generateRandomWordArray(4));
951 const options = {
952 mode: CryptoJS.mode.ECB,
953 padding: CryptoJS.pad.NoPadding
954 };
955 return CryptoJS.AES.encrypt(cipher, encryptionKey, options).ciphertext;
956}
957function processPasswordR2R3R4(password = '') {
958 const out = Buffer.alloc(32);
959 const length = password.length;
960 let index = 0;
961 while (index < length && index < 32) {
962 const code = password.charCodeAt(index);
963 if (code > 0xff) {
964 throw new Error('Password contains one or more invalid characters.');
965 }
966 out[index] = code;
967 index++;
968 }
969 while (index < 32) {
970 out[index] = PASSWORD_PADDING[index - length];
971 index++;
972 }
973 return CryptoJS.lib.WordArray.create(out);
974}
975function processPasswordR5(password = '') {
976 password = unescape(encodeURIComponent(saslprep(password)));
977 const length = Math.min(127, password.length);
978 const out = Buffer.alloc(length);
979 for (let i = 0; i < length; i++) {
980 out[i] = password.charCodeAt(i);
981 }
982 return CryptoJS.lib.WordArray.create(out);
983}
984function lsbFirstWord(data) {
985 return (data & 0xff) << 24 | (data & 0xff00) << 8 | data >> 8 & 0xff00 | data >> 24 & 0xff;
986}
987function wordArrayToBuffer(wordArray) {
988 const byteArray = [];
989 for (let i = 0; i < wordArray.sigBytes; i++) {
990 byteArray.push(wordArray.words[Math.floor(i / 4)] >> 8 * (3 - i % 4) & 0xff);
991 }
992 return Buffer.from(byteArray);
993}
994const PASSWORD_PADDING = [0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a];
995
996const {
997 number
998} = PDFObject;
999class PDFGradient {
1000 constructor(doc) {
1001 this.doc = doc;
1002 this.stops = [];
1003 this.embedded = false;
1004 this.transform = [1, 0, 0, 1, 0, 0];
1005 }
1006 stop(pos, color, opacity) {
1007 if (opacity == null) {
1008 opacity = 1;
1009 }
1010 color = this.doc._normalizeColor(color);
1011 if (this.stops.length === 0) {
1012 if (color.length === 3) {
1013 this._colorSpace = 'DeviceRGB';
1014 } else if (color.length === 4) {
1015 this._colorSpace = 'DeviceCMYK';
1016 } else if (color.length === 1) {
1017 this._colorSpace = 'DeviceGray';
1018 } else {
1019 throw new Error('Unknown color space');
1020 }
1021 } else if (this._colorSpace === 'DeviceRGB' && color.length !== 3 || this._colorSpace === 'DeviceCMYK' && color.length !== 4 || this._colorSpace === 'DeviceGray' && color.length !== 1) {
1022 throw new Error('All gradient stops must use the same color space');
1023 }
1024 opacity = Math.max(0, Math.min(1, opacity));
1025 this.stops.push([pos, color, opacity]);
1026 return this;
1027 }
1028 setTransform(m11, m12, m21, m22, dx, dy) {
1029 this.transform = [m11, m12, m21, m22, dx, dy];
1030 return this;
1031 }
1032 embed(m) {
1033 let fn;
1034 const stopsLength = this.stops.length;
1035 if (stopsLength === 0) {
1036 return;
1037 }
1038 this.embedded = true;
1039 this.matrix = m;
1040
1041 // if the last stop comes before 100%, add a copy at 100%
1042 const last = this.stops[stopsLength - 1];
1043 if (last[0] < 1) {
1044 this.stops.push([1, last[1], last[2]]);
1045 }
1046 const bounds = [];
1047 const encode = [];
1048 const stops = [];
1049 for (let i = 0; i < stopsLength - 1; i++) {
1050 encode.push(0, 1);
1051 if (i + 2 !== stopsLength) {
1052 bounds.push(this.stops[i + 1][0]);
1053 }
1054 fn = this.doc.ref({
1055 FunctionType: 2,
1056 Domain: [0, 1],
1057 C0: this.stops[i + 0][1],
1058 C1: this.stops[i + 1][1],
1059 N: 1
1060 });
1061 stops.push(fn);
1062 fn.end();
1063 }
1064
1065 // if there are only two stops, we don't need a stitching function
1066 if (stopsLength === 1) {
1067 fn = stops[0];
1068 } else {
1069 fn = this.doc.ref({
1070 FunctionType: 3,
1071 // stitching function
1072 Domain: [0, 1],
1073 Functions: stops,
1074 Bounds: bounds,
1075 Encode: encode
1076 });
1077 fn.end();
1078 }
1079 this.id = `Sh${++this.doc._gradCount}`;
1080 const shader = this.shader(fn);
1081 shader.end();
1082 const pattern = this.doc.ref({
1083 Type: 'Pattern',
1084 PatternType: 2,
1085 Shading: shader,
1086 Matrix: this.matrix.map(number)
1087 });
1088 pattern.end();
1089 if (this.stops.some(stop => stop[2] < 1)) {
1090 let grad = this.opacityGradient();
1091 grad._colorSpace = 'DeviceGray';
1092 for (let stop of this.stops) {
1093 grad.stop(stop[0], [stop[2]]);
1094 }
1095 grad = grad.embed(this.matrix);
1096 const pageBBox = [0, 0, this.doc.page.width, this.doc.page.height];
1097 const form = this.doc.ref({
1098 Type: 'XObject',
1099 Subtype: 'Form',
1100 FormType: 1,
1101 BBox: pageBBox,
1102 Group: {
1103 Type: 'Group',
1104 S: 'Transparency',
1105 CS: 'DeviceGray'
1106 },
1107 Resources: {
1108 ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],
1109 Pattern: {
1110 Sh1: grad
1111 }
1112 }
1113 });
1114 form.write('/Pattern cs /Sh1 scn');
1115 form.end(`${pageBBox.join(' ')} re f`);
1116 const gstate = this.doc.ref({
1117 Type: 'ExtGState',
1118 SMask: {
1119 Type: 'Mask',
1120 S: 'Luminosity',
1121 G: form
1122 }
1123 });
1124 gstate.end();
1125 const opacityPattern = this.doc.ref({
1126 Type: 'Pattern',
1127 PatternType: 1,
1128 PaintType: 1,
1129 TilingType: 2,
1130 BBox: pageBBox,
1131 XStep: pageBBox[2],
1132 YStep: pageBBox[3],
1133 Resources: {
1134 ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],
1135 Pattern: {
1136 Sh1: pattern
1137 },
1138 ExtGState: {
1139 Gs1: gstate
1140 }
1141 }
1142 });
1143 opacityPattern.write('/Gs1 gs /Pattern cs /Sh1 scn');
1144 opacityPattern.end(`${pageBBox.join(' ')} re f`);
1145 this.doc.page.patterns[this.id] = opacityPattern;
1146 } else {
1147 this.doc.page.patterns[this.id] = pattern;
1148 }
1149 return pattern;
1150 }
1151 apply(stroke) {
1152 // apply gradient transform to existing document ctm
1153 const [m0, m1, m2, m3, m4, m5] = this.doc._ctm;
1154 const [m11, m12, m21, m22, dx, dy] = this.transform;
1155 const m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5];
1156 if (!this.embedded || m.join(' ') !== this.matrix.join(' ')) {
1157 this.embed(m);
1158 }
1159 this.doc._setColorSpace('Pattern', stroke);
1160 const op = stroke ? 'SCN' : 'scn';
1161 return this.doc.addContent(`/${this.id} ${op}`);
1162 }
1163}
1164class PDFLinearGradient extends PDFGradient {
1165 constructor(doc, x1, y1, x2, y2) {
1166 super(doc);
1167 this.x1 = x1;
1168 this.y1 = y1;
1169 this.x2 = x2;
1170 this.y2 = y2;
1171 }
1172 shader(fn) {
1173 return this.doc.ref({
1174 ShadingType: 2,
1175 ColorSpace: this._colorSpace,
1176 Coords: [this.x1, this.y1, this.x2, this.y2],
1177 Function: fn,
1178 Extend: [true, true]
1179 });
1180 }
1181 opacityGradient() {
1182 return new PDFLinearGradient(this.doc, this.x1, this.y1, this.x2, this.y2);
1183 }
1184}
1185class PDFRadialGradient extends PDFGradient {
1186 constructor(doc, x1, y1, r1, x2, y2, r2) {
1187 super(doc);
1188 this.doc = doc;
1189 this.x1 = x1;
1190 this.y1 = y1;
1191 this.r1 = r1;
1192 this.x2 = x2;
1193 this.y2 = y2;
1194 this.r2 = r2;
1195 }
1196 shader(fn) {
1197 return this.doc.ref({
1198 ShadingType: 3,
1199 ColorSpace: this._colorSpace,
1200 Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2],
1201 Function: fn,
1202 Extend: [true, true]
1203 });
1204 }
1205 opacityGradient() {
1206 return new PDFRadialGradient(this.doc, this.x1, this.y1, this.r1, this.x2, this.y2, this.r2);
1207 }
1208}
1209var Gradient = {
1210 PDFGradient,
1211 PDFLinearGradient,
1212 PDFRadialGradient
1213};
1214
1215/*
1216PDF tiling pattern support. Uncolored only.
1217 */
1218
1219const underlyingColorSpaces = ['DeviceCMYK', 'DeviceRGB'];
1220class PDFTilingPattern {
1221 constructor(doc, bBox, xStep, yStep, stream) {
1222 this.doc = doc;
1223 this.bBox = bBox;
1224 this.xStep = xStep;
1225 this.yStep = yStep;
1226 this.stream = stream;
1227 }
1228 createPattern() {
1229 // no resources needed for our current usage
1230 // required entry
1231 const resources = this.doc.ref();
1232 resources.end();
1233 // apply default transform matrix (flipped in the default doc._ctm)
1234 // see document.js & gradient.js
1235 const [m0, m1, m2, m3, m4, m5] = this.doc._ctm;
1236 const [m11, m12, m21, m22, dx, dy] = [1, 0, 0, 1, 0, 0];
1237 const m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5];
1238 const pattern = this.doc.ref({
1239 Type: 'Pattern',
1240 PatternType: 1,
1241 // tiling
1242 PaintType: 2,
1243 // 1-colored, 2-uncolored
1244 TilingType: 2,
1245 // 2-no distortion
1246 BBox: this.bBox,
1247 XStep: this.xStep,
1248 YStep: this.yStep,
1249 Matrix: m.map(v => +v.toFixed(5)),
1250 Resources: resources
1251 });
1252 pattern.end(this.stream);
1253 return pattern;
1254 }
1255 embedPatternColorSpaces() {
1256 // map each pattern to an underlying color space
1257 // and embed on each page
1258 underlyingColorSpaces.forEach(csName => {
1259 const csId = this.getPatternColorSpaceId(csName);
1260 if (this.doc.page.colorSpaces[csId]) return;
1261 const cs = this.doc.ref(['Pattern', csName]);
1262 cs.end();
1263 this.doc.page.colorSpaces[csId] = cs;
1264 });
1265 }
1266 getPatternColorSpaceId(underlyingColorspace) {
1267 return `CsP${underlyingColorspace}`;
1268 }
1269 embed() {
1270 if (!this.id) {
1271 this.doc._patternCount = this.doc._patternCount + 1;
1272 this.id = 'P' + this.doc._patternCount;
1273 this.pattern = this.createPattern();
1274 }
1275
1276 // patterns are embedded in each page
1277 if (!this.doc.page.patterns[this.id]) {
1278 this.doc.page.patterns[this.id] = this.pattern;
1279 }
1280 }
1281 apply(stroke, patternColor) {
1282 // do any embedding/creating that might be needed
1283 this.embedPatternColorSpaces();
1284 this.embed();
1285 const normalizedColor = this.doc._normalizeColor(patternColor);
1286 if (!normalizedColor) throw Error(`invalid pattern color. (value: ${patternColor})`);
1287
1288 // select one of the pattern color spaces
1289 const csId = this.getPatternColorSpaceId(this.doc._getColorSpace(normalizedColor));
1290 this.doc._setColorSpace(csId, stroke);
1291
1292 // stroke/fill using the pattern and color (in the above underlying color space)
1293 const op = stroke ? 'SCN' : 'scn';
1294 return this.doc.addContent(`${normalizedColor.join(' ')} /${this.id} ${op}`);
1295 }
1296}
1297var pattern = {
1298 PDFTilingPattern
1299};
1300
1301const {
1302 PDFGradient: PDFGradient$1,
1303 PDFLinearGradient: PDFLinearGradient$1,
1304 PDFRadialGradient: PDFRadialGradient$1
1305} = Gradient;
1306const {
1307 PDFTilingPattern: PDFTilingPattern$1
1308} = pattern;
1309var ColorMixin = {
1310 initColor() {
1311 // The opacity dictionaries
1312 this._opacityRegistry = {};
1313 this._opacityCount = 0;
1314 this._patternCount = 0;
1315 return this._gradCount = 0;
1316 },
1317 _normalizeColor(color) {
1318 if (typeof color === 'string') {
1319 if (color.charAt(0) === '#') {
1320 if (color.length === 4) {
1321 color = color.replace(/#([0-9A-F])([0-9A-F])([0-9A-F])/i, '#$1$1$2$2$3$3');
1322 }
1323 const hex = parseInt(color.slice(1), 16);
1324 color = [hex >> 16, hex >> 8 & 0xff, hex & 0xff];
1325 } else if (namedColors[color]) {
1326 color = namedColors[color];
1327 }
1328 }
1329 if (Array.isArray(color)) {
1330 // RGB
1331 if (color.length === 3) {
1332 color = color.map(part => part / 255);
1333 // CMYK
1334 } else if (color.length === 4) {
1335 color = color.map(part => part / 100);
1336 }
1337 return color;
1338 }
1339 return null;
1340 },
1341 _setColor(color, stroke) {
1342 if (color instanceof PDFGradient$1) {
1343 color.apply(stroke);
1344 return true;
1345 // see if tiling pattern, decode & apply it it
1346 } else if (Array.isArray(color) && color[0] instanceof PDFTilingPattern$1) {
1347 color[0].apply(stroke, color[1]);
1348 return true;
1349 }
1350 // any other case should be a normal color and not a pattern
1351 return this._setColorCore(color, stroke);
1352 },
1353 _setColorCore(color, stroke) {
1354 color = this._normalizeColor(color);
1355 if (!color) {
1356 return false;
1357 }
1358 const op = stroke ? 'SCN' : 'scn';
1359 const space = this._getColorSpace(color);
1360 this._setColorSpace(space, stroke);
1361 color = color.join(' ');
1362 this.addContent(`${color} ${op}`);
1363 return true;
1364 },
1365 _setColorSpace(space, stroke) {
1366 const op = stroke ? 'CS' : 'cs';
1367 return this.addContent(`/${space} ${op}`);
1368 },
1369 _getColorSpace(color) {
1370 return color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB';
1371 },
1372 fillColor(color, opacity) {
1373 const set = this._setColor(color, false);
1374 if (set) {
1375 this.fillOpacity(opacity);
1376 }
1377
1378 // save this for text wrapper, which needs to reset
1379 // the fill color on new pages
1380 this._fillColor = [color, opacity];
1381 return this;
1382 },
1383 strokeColor(color, opacity) {
1384 const set = this._setColor(color, true);
1385 if (set) {
1386 this.strokeOpacity(opacity);
1387 }
1388 return this;
1389 },
1390 opacity(opacity) {
1391 this._doOpacity(opacity, opacity);
1392 return this;
1393 },
1394 fillOpacity(opacity) {
1395 this._doOpacity(opacity, null);
1396 return this;
1397 },
1398 strokeOpacity(opacity) {
1399 this._doOpacity(null, opacity);
1400 return this;
1401 },
1402 _doOpacity(fillOpacity, strokeOpacity) {
1403 let dictionary, name;
1404 if (fillOpacity == null && strokeOpacity == null) {
1405 return;
1406 }
1407 if (fillOpacity != null) {
1408 fillOpacity = Math.max(0, Math.min(1, fillOpacity));
1409 }
1410 if (strokeOpacity != null) {
1411 strokeOpacity = Math.max(0, Math.min(1, strokeOpacity));
1412 }
1413 const key = `${fillOpacity}_${strokeOpacity}`;
1414 if (this._opacityRegistry[key]) {
1415 [dictionary, name] = this._opacityRegistry[key];
1416 } else {
1417 dictionary = {
1418 Type: 'ExtGState'
1419 };
1420 if (fillOpacity != null) {
1421 dictionary.ca = fillOpacity;
1422 }
1423 if (strokeOpacity != null) {
1424 dictionary.CA = strokeOpacity;
1425 }
1426 dictionary = this.ref(dictionary);
1427 dictionary.end();
1428 const id = ++this._opacityCount;
1429 name = `Gs${id}`;
1430 this._opacityRegistry[key] = [dictionary, name];
1431 }
1432 this.page.ext_gstates[name] = dictionary;
1433 return this.addContent(`/${name} gs`);
1434 },
1435 linearGradient(x1, y1, x2, y2) {
1436 return new PDFLinearGradient$1(this, x1, y1, x2, y2);
1437 },
1438 radialGradient(x1, y1, r1, x2, y2, r2) {
1439 return new PDFRadialGradient$1(this, x1, y1, r1, x2, y2, r2);
1440 },
1441 pattern(bbox, xStep, yStep, stream) {
1442 return new PDFTilingPattern$1(this, bbox, xStep, yStep, stream);
1443 }
1444};
1445var namedColors = {
1446 aliceblue: [240, 248, 255],
1447 antiquewhite: [250, 235, 215],
1448 aqua: [0, 255, 255],
1449 aquamarine: [127, 255, 212],
1450 azure: [240, 255, 255],
1451 beige: [245, 245, 220],
1452 bisque: [255, 228, 196],
1453 black: [0, 0, 0],
1454 blanchedalmond: [255, 235, 205],
1455 blue: [0, 0, 255],
1456 blueviolet: [138, 43, 226],
1457 brown: [165, 42, 42],
1458 burlywood: [222, 184, 135],
1459 cadetblue: [95, 158, 160],
1460 chartreuse: [127, 255, 0],
1461 chocolate: [210, 105, 30],
1462 coral: [255, 127, 80],
1463 cornflowerblue: [100, 149, 237],
1464 cornsilk: [255, 248, 220],
1465 crimson: [220, 20, 60],
1466 cyan: [0, 255, 255],
1467 darkblue: [0, 0, 139],
1468 darkcyan: [0, 139, 139],
1469 darkgoldenrod: [184, 134, 11],
1470 darkgray: [169, 169, 169],
1471 darkgreen: [0, 100, 0],
1472 darkgrey: [169, 169, 169],
1473 darkkhaki: [189, 183, 107],
1474 darkmagenta: [139, 0, 139],
1475 darkolivegreen: [85, 107, 47],
1476 darkorange: [255, 140, 0],
1477 darkorchid: [153, 50, 204],
1478 darkred: [139, 0, 0],
1479 darksalmon: [233, 150, 122],
1480 darkseagreen: [143, 188, 143],
1481 darkslateblue: [72, 61, 139],
1482 darkslategray: [47, 79, 79],
1483 darkslategrey: [47, 79, 79],
1484 darkturquoise: [0, 206, 209],
1485 darkviolet: [148, 0, 211],
1486 deeppink: [255, 20, 147],
1487 deepskyblue: [0, 191, 255],
1488 dimgray: [105, 105, 105],
1489 dimgrey: [105, 105, 105],
1490 dodgerblue: [30, 144, 255],
1491 firebrick: [178, 34, 34],
1492 floralwhite: [255, 250, 240],
1493 forestgreen: [34, 139, 34],
1494 fuchsia: [255, 0, 255],
1495 gainsboro: [220, 220, 220],
1496 ghostwhite: [248, 248, 255],
1497 gold: [255, 215, 0],
1498 goldenrod: [218, 165, 32],
1499 gray: [128, 128, 128],
1500 grey: [128, 128, 128],
1501 green: [0, 128, 0],
1502 greenyellow: [173, 255, 47],
1503 honeydew: [240, 255, 240],
1504 hotpink: [255, 105, 180],
1505 indianred: [205, 92, 92],
1506 indigo: [75, 0, 130],
1507 ivory: [255, 255, 240],
1508 khaki: [240, 230, 140],
1509 lavender: [230, 230, 250],
1510 lavenderblush: [255, 240, 245],
1511 lawngreen: [124, 252, 0],
1512 lemonchiffon: [255, 250, 205],
1513 lightblue: [173, 216, 230],
1514 lightcoral: [240, 128, 128],
1515 lightcyan: [224, 255, 255],
1516 lightgoldenrodyellow: [250, 250, 210],
1517 lightgray: [211, 211, 211],
1518 lightgreen: [144, 238, 144],
1519 lightgrey: [211, 211, 211],
1520 lightpink: [255, 182, 193],
1521 lightsalmon: [255, 160, 122],
1522 lightseagreen: [32, 178, 170],
1523 lightskyblue: [135, 206, 250],
1524 lightslategray: [119, 136, 153],
1525 lightslategrey: [119, 136, 153],
1526 lightsteelblue: [176, 196, 222],
1527 lightyellow: [255, 255, 224],
1528 lime: [0, 255, 0],
1529 limegreen: [50, 205, 50],
1530 linen: [250, 240, 230],
1531 magenta: [255, 0, 255],
1532 maroon: [128, 0, 0],
1533 mediumaquamarine: [102, 205, 170],
1534 mediumblue: [0, 0, 205],
1535 mediumorchid: [186, 85, 211],
1536 mediumpurple: [147, 112, 219],
1537 mediumseagreen: [60, 179, 113],
1538 mediumslateblue: [123, 104, 238],
1539 mediumspringgreen: [0, 250, 154],
1540 mediumturquoise: [72, 209, 204],
1541 mediumvioletred: [199, 21, 133],
1542 midnightblue: [25, 25, 112],
1543 mintcream: [245, 255, 250],
1544 mistyrose: [255, 228, 225],
1545 moccasin: [255, 228, 181],
1546 navajowhite: [255, 222, 173],
1547 navy: [0, 0, 128],
1548 oldlace: [253, 245, 230],
1549 olive: [128, 128, 0],
1550 olivedrab: [107, 142, 35],
1551 orange: [255, 165, 0],
1552 orangered: [255, 69, 0],
1553 orchid: [218, 112, 214],
1554 palegoldenrod: [238, 232, 170],
1555 palegreen: [152, 251, 152],
1556 paleturquoise: [175, 238, 238],
1557 palevioletred: [219, 112, 147],
1558 papayawhip: [255, 239, 213],
1559 peachpuff: [255, 218, 185],
1560 peru: [205, 133, 63],
1561 pink: [255, 192, 203],
1562 plum: [221, 160, 221],
1563 powderblue: [176, 224, 230],
1564 purple: [128, 0, 128],
1565 red: [255, 0, 0],
1566 rosybrown: [188, 143, 143],
1567 royalblue: [65, 105, 225],
1568 saddlebrown: [139, 69, 19],
1569 salmon: [250, 128, 114],
1570 sandybrown: [244, 164, 96],
1571 seagreen: [46, 139, 87],
1572 seashell: [255, 245, 238],
1573 sienna: [160, 82, 45],
1574 silver: [192, 192, 192],
1575 skyblue: [135, 206, 235],
1576 slateblue: [106, 90, 205],
1577 slategray: [112, 128, 144],
1578 slategrey: [112, 128, 144],
1579 snow: [255, 250, 250],
1580 springgreen: [0, 255, 127],
1581 steelblue: [70, 130, 180],
1582 tan: [210, 180, 140],
1583 teal: [0, 128, 128],
1584 thistle: [216, 191, 216],
1585 tomato: [255, 99, 71],
1586 turquoise: [64, 224, 208],
1587 violet: [238, 130, 238],
1588 wheat: [245, 222, 179],
1589 white: [255, 255, 255],
1590 whitesmoke: [245, 245, 245],
1591 yellow: [255, 255, 0],
1592 yellowgreen: [154, 205, 50]
1593};
1594
1595let cx, cy, px, py, sx, sy;
1596cx = cy = px = py = sx = sy = 0;
1597const parameters = {
1598 A: 7,
1599 a: 7,
1600 C: 6,
1601 c: 6,
1602 H: 1,
1603 h: 1,
1604 L: 2,
1605 l: 2,
1606 M: 2,
1607 m: 2,
1608 Q: 4,
1609 q: 4,
1610 S: 4,
1611 s: 4,
1612 T: 2,
1613 t: 2,
1614 V: 1,
1615 v: 1,
1616 Z: 0,
1617 z: 0
1618};
1619const parse = function (path) {
1620 let cmd;
1621 const ret = [];
1622 let args = [];
1623 let curArg = '';
1624 let foundDecimal = false;
1625 let params = 0;
1626 for (let c of path) {
1627 if (parameters[c] != null) {
1628 params = parameters[c];
1629 if (cmd) {
1630 // save existing command
1631 if (curArg.length > 0) {
1632 args[args.length] = +curArg;
1633 }
1634 ret[ret.length] = {
1635 cmd,
1636 args
1637 };
1638 args = [];
1639 curArg = '';
1640 foundDecimal = false;
1641 }
1642 cmd = c;
1643 } else if ([' ', ','].includes(c) || c === '-' && curArg.length > 0 && curArg[curArg.length - 1] !== 'e' || c === '.' && foundDecimal) {
1644 if (curArg.length === 0) {
1645 continue;
1646 }
1647 if (args.length === params) {
1648 // handle reused commands
1649 ret[ret.length] = {
1650 cmd,
1651 args
1652 };
1653 args = [+curArg];
1654
1655 // handle assumed commands
1656 if (cmd === 'M') {
1657 cmd = 'L';
1658 }
1659 if (cmd === 'm') {
1660 cmd = 'l';
1661 }
1662 } else {
1663 args[args.length] = +curArg;
1664 }
1665 foundDecimal = c === '.';
1666
1667 // fix for negative numbers or repeated decimals with no delimeter between commands
1668 curArg = ['-', '.'].includes(c) ? c : '';
1669 } else {
1670 curArg += c;
1671 if (c === '.') {
1672 foundDecimal = true;
1673 }
1674 }
1675 }
1676
1677 // add the last command
1678 if (curArg.length > 0) {
1679 if (args.length === params) {
1680 // handle reused commands
1681 ret[ret.length] = {
1682 cmd,
1683 args
1684 };
1685 args = [+curArg];
1686
1687 // handle assumed commands
1688 if (cmd === 'M') {
1689 cmd = 'L';
1690 }
1691 if (cmd === 'm') {
1692 cmd = 'l';
1693 }
1694 } else {
1695 args[args.length] = +curArg;
1696 }
1697 }
1698 ret[ret.length] = {
1699 cmd,
1700 args
1701 };
1702 return ret;
1703};
1704const apply = function (commands, doc) {
1705 // current point, control point, and subpath starting point
1706 cx = cy = px = py = sx = sy = 0;
1707
1708 // run the commands
1709 for (let i = 0; i < commands.length; i++) {
1710 const c = commands[i];
1711 if (typeof runners[c.cmd] === 'function') {
1712 runners[c.cmd](doc, c.args);
1713 }
1714 }
1715};
1716const runners = {
1717 M(doc, a) {
1718 cx = a[0];
1719 cy = a[1];
1720 px = py = null;
1721 sx = cx;
1722 sy = cy;
1723 return doc.moveTo(cx, cy);
1724 },
1725 m(doc, a) {
1726 cx += a[0];
1727 cy += a[1];
1728 px = py = null;
1729 sx = cx;
1730 sy = cy;
1731 return doc.moveTo(cx, cy);
1732 },
1733 C(doc, a) {
1734 cx = a[4];
1735 cy = a[5];
1736 px = a[2];
1737 py = a[3];
1738 return doc.bezierCurveTo(...a);
1739 },
1740 c(doc, a) {
1741 doc.bezierCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy, a[4] + cx, a[5] + cy);
1742 px = cx + a[2];
1743 py = cy + a[3];
1744 cx += a[4];
1745 return cy += a[5];
1746 },
1747 S(doc, a) {
1748 if (px === null) {
1749 px = cx;
1750 py = cy;
1751 }
1752 doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]);
1753 px = a[0];
1754 py = a[1];
1755 cx = a[2];
1756 return cy = a[3];
1757 },
1758 s(doc, a) {
1759 if (px === null) {
1760 px = cx;
1761 py = cy;
1762 }
1763 doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), cx + a[0], cy + a[1], cx + a[2], cy + a[3]);
1764 px = cx + a[0];
1765 py = cy + a[1];
1766 cx += a[2];
1767 return cy += a[3];
1768 },
1769 Q(doc, a) {
1770 px = a[0];
1771 py = a[1];
1772 cx = a[2];
1773 cy = a[3];
1774 return doc.quadraticCurveTo(a[0], a[1], cx, cy);
1775 },
1776 q(doc, a) {
1777 doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy);
1778 px = cx + a[0];
1779 py = cy + a[1];
1780 cx += a[2];
1781 return cy += a[3];
1782 },
1783 T(doc, a) {
1784 if (px === null) {
1785 px = cx;
1786 py = cy;
1787 } else {
1788 px = cx - (px - cx);
1789 py = cy - (py - cy);
1790 }
1791 doc.quadraticCurveTo(px, py, a[0], a[1]);
1792 px = cx - (px - cx);
1793 py = cy - (py - cy);
1794 cx = a[0];
1795 return cy = a[1];
1796 },
1797 t(doc, a) {
1798 if (px === null) {
1799 px = cx;
1800 py = cy;
1801 } else {
1802 px = cx - (px - cx);
1803 py = cy - (py - cy);
1804 }
1805 doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]);
1806 cx += a[0];
1807 return cy += a[1];
1808 },
1809 A(doc, a) {
1810 solveArc(doc, cx, cy, a);
1811 cx = a[5];
1812 return cy = a[6];
1813 },
1814 a(doc, a) {
1815 a[5] += cx;
1816 a[6] += cy;
1817 solveArc(doc, cx, cy, a);
1818 cx = a[5];
1819 return cy = a[6];
1820 },
1821 L(doc, a) {
1822 cx = a[0];
1823 cy = a[1];
1824 px = py = null;
1825 return doc.lineTo(cx, cy);
1826 },
1827 l(doc, a) {
1828 cx += a[0];
1829 cy += a[1];
1830 px = py = null;
1831 return doc.lineTo(cx, cy);
1832 },
1833 H(doc, a) {
1834 cx = a[0];
1835 px = py = null;
1836 return doc.lineTo(cx, cy);
1837 },
1838 h(doc, a) {
1839 cx += a[0];
1840 px = py = null;
1841 return doc.lineTo(cx, cy);
1842 },
1843 V(doc, a) {
1844 cy = a[0];
1845 px = py = null;
1846 return doc.lineTo(cx, cy);
1847 },
1848 v(doc, a) {
1849 cy += a[0];
1850 px = py = null;
1851 return doc.lineTo(cx, cy);
1852 },
1853 Z(doc) {
1854 doc.closePath();
1855 cx = sx;
1856 return cy = sy;
1857 },
1858 z(doc) {
1859 doc.closePath();
1860 cx = sx;
1861 return cy = sy;
1862 }
1863};
1864const solveArc = function (doc, x, y, coords) {
1865 const [rx, ry, rot, large, sweep, ex, ey] = coords;
1866 const segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y);
1867 for (let seg of segs) {
1868 const bez = segmentToBezier(...seg);
1869 doc.bezierCurveTo(...bez);
1870 }
1871};
1872
1873// from Inkscape svgtopdf, thanks!
1874const arcToSegments = function (x, y, rx, ry, large, sweep, rotateX, ox, oy) {
1875 const th = rotateX * (Math.PI / 180);
1876 const sin_th = Math.sin(th);
1877 const cos_th = Math.cos(th);
1878 rx = Math.abs(rx);
1879 ry = Math.abs(ry);
1880 px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;
1881 py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;
1882 let pl = px * px / (rx * rx) + py * py / (ry * ry);
1883 if (pl > 1) {
1884 pl = Math.sqrt(pl);
1885 rx *= pl;
1886 ry *= pl;
1887 }
1888 const a00 = cos_th / rx;
1889 const a01 = sin_th / rx;
1890 const a10 = -sin_th / ry;
1891 const a11 = cos_th / ry;
1892 const x0 = a00 * ox + a01 * oy;
1893 const y0 = a10 * ox + a11 * oy;
1894 const x1 = a00 * x + a01 * y;
1895 const y1 = a10 * x + a11 * y;
1896 const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);
1897 let sfactor_sq = 1 / d - 0.25;
1898 if (sfactor_sq < 0) {
1899 sfactor_sq = 0;
1900 }
1901 let sfactor = Math.sqrt(sfactor_sq);
1902 if (sweep === large) {
1903 sfactor = -sfactor;
1904 }
1905 const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);
1906 const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);
1907 const th0 = Math.atan2(y0 - yc, x0 - xc);
1908 const th1 = Math.atan2(y1 - yc, x1 - xc);
1909 let th_arc = th1 - th0;
1910 if (th_arc < 0 && sweep === 1) {
1911 th_arc += 2 * Math.PI;
1912 } else if (th_arc > 0 && sweep === 0) {
1913 th_arc -= 2 * Math.PI;
1914 }
1915 const segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001)));
1916 const result = [];
1917 for (let i = 0; i < segments; i++) {
1918 const th2 = th0 + i * th_arc / segments;
1919 const th3 = th0 + (i + 1) * th_arc / segments;
1920 result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];
1921 }
1922 return result;
1923};
1924const segmentToBezier = function (cx, cy, th0, th1, rx, ry, sin_th, cos_th) {
1925 const a00 = cos_th * rx;
1926 const a01 = -sin_th * ry;
1927 const a10 = sin_th * rx;
1928 const a11 = cos_th * ry;
1929 const th_half = 0.5 * (th1 - th0);
1930 const t = 8 / 3 * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5) / Math.sin(th_half);
1931 const x1 = cx + Math.cos(th0) - t * Math.sin(th0);
1932 const y1 = cy + Math.sin(th0) + t * Math.cos(th0);
1933 const x3 = cx + Math.cos(th1);
1934 const y3 = cy + Math.sin(th1);
1935 const x2 = x3 + t * Math.sin(th1);
1936 const y2 = y3 - t * Math.cos(th1);
1937 return [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3];
1938};
1939class SVGPath {
1940 static apply(doc, path) {
1941 const commands = parse(path);
1942 apply(commands, doc);
1943 }
1944}
1945
1946const {
1947 number: number$1
1948} = PDFObject;
1949
1950// This constant is used to approximate a symmetrical arc using a cubic
1951// Bezier curve.
1952const KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0);
1953var VectorMixin = {
1954 initVector() {
1955 this._ctm = [1, 0, 0, 1, 0, 0]; // current transformation matrix
1956 return this._ctmStack = [];
1957 },
1958 save() {
1959 this._ctmStack.push(this._ctm.slice());
1960 // TODO: save/restore colorspace and styles so not setting it unnessesarily all the time?
1961 return this.addContent('q');
1962 },
1963 restore() {
1964 this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0];
1965 return this.addContent('Q');
1966 },
1967 closePath() {
1968 return this.addContent('h');
1969 },
1970 lineWidth(w) {
1971 return this.addContent(`${number$1(w)} w`);
1972 },
1973 _CAP_STYLES: {
1974 BUTT: 0,
1975 ROUND: 1,
1976 SQUARE: 2
1977 },
1978 lineCap(c) {
1979 if (typeof c === 'string') {
1980 c = this._CAP_STYLES[c.toUpperCase()];
1981 }
1982 return this.addContent(`${c} J`);
1983 },
1984 _JOIN_STYLES: {
1985 MITER: 0,
1986 ROUND: 1,
1987 BEVEL: 2
1988 },
1989 lineJoin(j) {
1990 if (typeof j === 'string') {
1991 j = this._JOIN_STYLES[j.toUpperCase()];
1992 }
1993 return this.addContent(`${j} j`);
1994 },
1995 miterLimit(m) {
1996 return this.addContent(`${number$1(m)} M`);
1997 },
1998 dash(length, options = {}) {
1999 const originalLength = length;
2000 if (!Array.isArray(length)) {
2001 length = [length, options.space || length];
2002 }
2003 const valid = length.every(x => Number.isFinite(x) && x > 0);
2004 if (!valid) {
2005 throw new Error(`dash(${JSON.stringify(originalLength)}, ${JSON.stringify(options)}) invalid, lengths must be numeric and greater than zero`);
2006 }
2007 length = length.map(number$1).join(' ');
2008 return this.addContent(`[${length}] ${number$1(options.phase || 0)} d`);
2009 },
2010 undash() {
2011 return this.addContent('[] 0 d');
2012 },
2013 moveTo(x, y) {
2014 return this.addContent(`${number$1(x)} ${number$1(y)} m`);
2015 },
2016 lineTo(x, y) {
2017 return this.addContent(`${number$1(x)} ${number$1(y)} l`);
2018 },
2019 bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {
2020 return this.addContent(`${number$1(cp1x)} ${number$1(cp1y)} ${number$1(cp2x)} ${number$1(cp2y)} ${number$1(x)} ${number$1(y)} c`);
2021 },
2022 quadraticCurveTo(cpx, cpy, x, y) {
2023 return this.addContent(`${number$1(cpx)} ${number$1(cpy)} ${number$1(x)} ${number$1(y)} v`);
2024 },
2025 rect(x, y, w, h) {
2026 return this.addContent(`${number$1(x)} ${number$1(y)} ${number$1(w)} ${number$1(h)} re`);
2027 },
2028 roundedRect(x, y, w, h, r) {
2029 if (r == null) {
2030 r = 0;
2031 }
2032 r = Math.min(r, 0.5 * w, 0.5 * h);
2033
2034 // amount to inset control points from corners (see `ellipse`)
2035 const c = r * (1.0 - KAPPA);
2036 this.moveTo(x + r, y);
2037 this.lineTo(x + w - r, y);
2038 this.bezierCurveTo(x + w - c, y, x + w, y + c, x + w, y + r);
2039 this.lineTo(x + w, y + h - r);
2040 this.bezierCurveTo(x + w, y + h - c, x + w - c, y + h, x + w - r, y + h);
2041 this.lineTo(x + r, y + h);
2042 this.bezierCurveTo(x + c, y + h, x, y + h - c, x, y + h - r);
2043 this.lineTo(x, y + r);
2044 this.bezierCurveTo(x, y + c, x + c, y, x + r, y);
2045 return this.closePath();
2046 },
2047 ellipse(x, y, r1, r2) {
2048 // based on http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas/2173084#2173084
2049 if (r2 == null) {
2050 r2 = r1;
2051 }
2052 x -= r1;
2053 y -= r2;
2054 const ox = r1 * KAPPA;
2055 const oy = r2 * KAPPA;
2056 const xe = x + r1 * 2;
2057 const ye = y + r2 * 2;
2058 const xm = x + r1;
2059 const ym = y + r2;
2060 this.moveTo(x, ym);
2061 this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);
2062 this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);
2063 this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);
2064 this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);
2065 return this.closePath();
2066 },
2067 circle(x, y, radius) {
2068 return this.ellipse(x, y, radius);
2069 },
2070 arc(x, y, radius, startAngle, endAngle, anticlockwise) {
2071 if (anticlockwise == null) {
2072 anticlockwise = false;
2073 }
2074 const TWO_PI = 2.0 * Math.PI;
2075 const HALF_PI = 0.5 * Math.PI;
2076 let deltaAng = endAngle - startAngle;
2077 if (Math.abs(deltaAng) > TWO_PI) {
2078 // draw only full circle if more than that is specified
2079 deltaAng = TWO_PI;
2080 } else if (deltaAng !== 0 && anticlockwise !== deltaAng < 0) {
2081 // necessary to flip direction of rendering
2082 const dir = anticlockwise ? -1 : 1;
2083 deltaAng = dir * TWO_PI + deltaAng;
2084 }
2085 const numSegs = Math.ceil(Math.abs(deltaAng) / HALF_PI);
2086 const segAng = deltaAng / numSegs;
2087 const handleLen = segAng / HALF_PI * KAPPA * radius;
2088 let curAng = startAngle;
2089
2090 // component distances between anchor point and control point
2091 let deltaCx = -Math.sin(curAng) * handleLen;
2092 let deltaCy = Math.cos(curAng) * handleLen;
2093
2094 // anchor point
2095 let ax = x + Math.cos(curAng) * radius;
2096 let ay = y + Math.sin(curAng) * radius;
2097
2098 // calculate and render segments
2099 this.moveTo(ax, ay);
2100 for (let segIdx = 0; segIdx < numSegs; segIdx++) {
2101 // starting control point
2102 const cp1x = ax + deltaCx;
2103 const cp1y = ay + deltaCy;
2104
2105 // step angle
2106 curAng += segAng;
2107
2108 // next anchor point
2109 ax = x + Math.cos(curAng) * radius;
2110 ay = y + Math.sin(curAng) * radius;
2111
2112 // next control point delta
2113 deltaCx = -Math.sin(curAng) * handleLen;
2114 deltaCy = Math.cos(curAng) * handleLen;
2115
2116 // ending control point
2117 const cp2x = ax - deltaCx;
2118 const cp2y = ay - deltaCy;
2119
2120 // render segment
2121 this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, ax, ay);
2122 }
2123 return this;
2124 },
2125 polygon(...points) {
2126 this.moveTo(...(points.shift() || []));
2127 for (let point of points) {
2128 this.lineTo(...(point || []));
2129 }
2130 return this.closePath();
2131 },
2132 path(path) {
2133 SVGPath.apply(this, path);
2134 return this;
2135 },
2136 _windingRule(rule) {
2137 if (/even-?odd/.test(rule)) {
2138 return '*';
2139 }
2140 return '';
2141 },
2142 fill(color, rule) {
2143 if (/(even-?odd)|(non-?zero)/.test(color)) {
2144 rule = color;
2145 color = null;
2146 }
2147 if (color) {
2148 this.fillColor(color);
2149 }
2150 return this.addContent(`f${this._windingRule(rule)}`);
2151 },
2152 stroke(color) {
2153 if (color) {
2154 this.strokeColor(color);
2155 }
2156 return this.addContent('S');
2157 },
2158 fillAndStroke(fillColor, strokeColor, rule) {
2159 if (strokeColor == null) {
2160 strokeColor = fillColor;
2161 }
2162 const isFillRule = /(even-?odd)|(non-?zero)/;
2163 if (isFillRule.test(fillColor)) {
2164 rule = fillColor;
2165 fillColor = null;
2166 }
2167 if (isFillRule.test(strokeColor)) {
2168 rule = strokeColor;
2169 strokeColor = fillColor;
2170 }
2171 if (fillColor) {
2172 this.fillColor(fillColor);
2173 this.strokeColor(strokeColor);
2174 }
2175 return this.addContent(`B${this._windingRule(rule)}`);
2176 },
2177 clip(rule) {
2178 return this.addContent(`W${this._windingRule(rule)} n`);
2179 },
2180 transform(m11, m12, m21, m22, dx, dy) {
2181 // keep track of the current transformation matrix
2182 if (m11 === 1 && m12 === 0 && m21 === 0 && m22 === 1 && dx === 0 && dy === 0) {
2183 // Ignore identity transforms
2184 return this;
2185 }
2186 const m = this._ctm;
2187 const [m0, m1, m2, m3, m4, m5] = m;
2188 m[0] = m0 * m11 + m2 * m12;
2189 m[1] = m1 * m11 + m3 * m12;
2190 m[2] = m0 * m21 + m2 * m22;
2191 m[3] = m1 * m21 + m3 * m22;
2192 m[4] = m0 * dx + m2 * dy + m4;
2193 m[5] = m1 * dx + m3 * dy + m5;
2194 const values = [m11, m12, m21, m22, dx, dy].map(v => number$1(v)).join(' ');
2195 return this.addContent(`${values} cm`);
2196 },
2197 translate(x, y) {
2198 return this.transform(1, 0, 0, 1, x, y);
2199 },
2200 rotate(angle, options = {}) {
2201 let y;
2202 const rad = angle * Math.PI / 180;
2203 const cos = Math.cos(rad);
2204 const sin = Math.sin(rad);
2205 let x = y = 0;
2206 if (options.origin != null) {
2207 [x, y] = options.origin;
2208 const x1 = x * cos - y * sin;
2209 const y1 = x * sin + y * cos;
2210 x -= x1;
2211 y -= y1;
2212 }
2213 return this.transform(cos, sin, -sin, cos, x, y);
2214 },
2215 scale(xFactor, yFactor, options = {}) {
2216 let y;
2217 if (yFactor == null) {
2218 yFactor = xFactor;
2219 }
2220 if (typeof yFactor === 'object') {
2221 options = yFactor;
2222 yFactor = xFactor;
2223 }
2224 let x = y = 0;
2225 if (options.origin != null) {
2226 [x, y] = options.origin;
2227 x -= xFactor * x;
2228 y -= yFactor * y;
2229 }
2230 return this.transform(xFactor, 0, 0, yFactor, x, y);
2231 }
2232};
2233
2234const WIN_ANSI_MAP = {
2235 402: 131,
2236 8211: 150,
2237 8212: 151,
2238 8216: 145,
2239 8217: 146,
2240 8218: 130,
2241 8220: 147,
2242 8221: 148,
2243 8222: 132,
2244 8224: 134,
2245 8225: 135,
2246 8226: 149,
2247 8230: 133,
2248 8364: 128,
2249 8240: 137,
2250 8249: 139,
2251 8250: 155,
2252 710: 136,
2253 8482: 153,
2254 338: 140,
2255 339: 156,
2256 732: 152,
2257 352: 138,
2258 353: 154,
2259 376: 159,
2260 381: 142,
2261 382: 158
2262};
2263const characters = `\
2264.notdef .notdef .notdef .notdef
2265.notdef .notdef .notdef .notdef
2266.notdef .notdef .notdef .notdef
2267.notdef .notdef .notdef .notdef
2268.notdef .notdef .notdef .notdef
2269.notdef .notdef .notdef .notdef
2270.notdef .notdef .notdef .notdef
2271.notdef .notdef .notdef .notdef
2272
2273space exclam quotedbl numbersign
2274dollar percent ampersand quotesingle
2275parenleft parenright asterisk plus
2276comma hyphen period slash
2277zero one two three
2278four five six seven
2279eight nine colon semicolon
2280less equal greater question
2281
2282at A B C
2283D E F G
2284H I J K
2285L M N O
2286P Q R S
2287T U V W
2288X Y Z bracketleft
2289backslash bracketright asciicircum underscore
2290
2291grave a b c
2292d e f g
2293h i j k
2294l m n o
2295p q r s
2296t u v w
2297x y z braceleft
2298bar braceright asciitilde .notdef
2299
2300Euro .notdef quotesinglbase florin
2301quotedblbase ellipsis dagger daggerdbl
2302circumflex perthousand Scaron guilsinglleft
2303OE .notdef Zcaron .notdef
2304.notdef quoteleft quoteright quotedblleft
2305quotedblright bullet endash emdash
2306tilde trademark scaron guilsinglright
2307oe .notdef zcaron ydieresis
2308
2309space exclamdown cent sterling
2310currency yen brokenbar section
2311dieresis copyright ordfeminine guillemotleft
2312logicalnot hyphen registered macron
2313degree plusminus twosuperior threesuperior
2314acute mu paragraph periodcentered
2315cedilla onesuperior ordmasculine guillemotright
2316onequarter onehalf threequarters questiondown
2317
2318Agrave Aacute Acircumflex Atilde
2319Adieresis Aring AE Ccedilla
2320Egrave Eacute Ecircumflex Edieresis
2321Igrave Iacute Icircumflex Idieresis
2322Eth Ntilde Ograve Oacute
2323Ocircumflex Otilde Odieresis multiply
2324Oslash Ugrave Uacute Ucircumflex
2325Udieresis Yacute Thorn germandbls
2326
2327agrave aacute acircumflex atilde
2328adieresis aring ae ccedilla
2329egrave eacute ecircumflex edieresis
2330igrave iacute icircumflex idieresis
2331eth ntilde ograve oacute
2332ocircumflex otilde odieresis divide
2333oslash ugrave uacute ucircumflex
2334udieresis yacute thorn ydieresis\
2335`.split(/\s+/);
2336class AFMFont {
2337 static open(filename) {
2338 return new AFMFont(fs.readFileSync(filename, 'utf8'));
2339 }
2340 constructor(contents) {
2341 this.contents = contents;
2342 this.attributes = {};
2343 this.glyphWidths = {};
2344 this.boundingBoxes = {};
2345 this.kernPairs = {};
2346 this.parse();
2347 // todo: remove charWidths since appears to not be used
2348 this.charWidths = new Array(256);
2349 for (let char = 0; char <= 255; char++) {
2350 this.charWidths[char] = this.glyphWidths[characters[char]];
2351 }
2352 this.bbox = this.attributes['FontBBox'].split(/\s+/).map(e => +e);
2353 this.ascender = +(this.attributes['Ascender'] || 0);
2354 this.descender = +(this.attributes['Descender'] || 0);
2355 this.xHeight = +(this.attributes['XHeight'] || 0);
2356 this.capHeight = +(this.attributes['CapHeight'] || 0);
2357 this.lineGap = this.bbox[3] - this.bbox[1] - (this.ascender - this.descender);
2358 }
2359 parse() {
2360 let section = '';
2361 for (let line of this.contents.split('\n')) {
2362 var match;
2363 var a;
2364 if (match = line.match(/^Start(\w+)/)) {
2365 section = match[1];
2366 continue;
2367 } else if (match = line.match(/^End(\w+)/)) {
2368 section = '';
2369 continue;
2370 }
2371 switch (section) {
2372 case 'FontMetrics':
2373 match = line.match(/(^\w+)\s+(.*)/);
2374 var key = match[1];
2375 var value = match[2];
2376 if (a = this.attributes[key]) {
2377 if (!Array.isArray(a)) {
2378 a = this.attributes[key] = [a];
2379 }
2380 a.push(value);
2381 } else {
2382 this.attributes[key] = value;
2383 }
2384 break;
2385 case 'CharMetrics':
2386 if (!/^CH?\s/.test(line)) {
2387 continue;
2388 }
2389 var name = line.match(/\bN\s+(\.?\w+)\s*;/)[1];
2390 this.glyphWidths[name] = +line.match(/\bWX\s+(\d+)\s*;/)[1];
2391 break;
2392 case 'KernPairs':
2393 match = line.match(/^KPX\s+(\.?\w+)\s+(\.?\w+)\s+(-?\d+)/);
2394 if (match) {
2395 this.kernPairs[match[1] + '\0' + match[2]] = parseInt(match[3]);
2396 }
2397 break;
2398 }
2399 }
2400 }
2401 encodeText(text) {
2402 const res = [];
2403 for (let i = 0, len = text.length; i < len; i++) {
2404 let char = text.charCodeAt(i);
2405 char = WIN_ANSI_MAP[char] || char;
2406 res.push(char.toString(16));
2407 }
2408 return res;
2409 }
2410 glyphsForString(string) {
2411 const glyphs = [];
2412 for (let i = 0, len = string.length; i < len; i++) {
2413 const charCode = string.charCodeAt(i);
2414 glyphs.push(this.characterToGlyph(charCode));
2415 }
2416 return glyphs;
2417 }
2418 characterToGlyph(character) {
2419 return characters[WIN_ANSI_MAP[character] || character] || '.notdef';
2420 }
2421 widthOfGlyph(glyph) {
2422 return this.glyphWidths[glyph] || 0;
2423 }
2424 getKernPair(left, right) {
2425 return this.kernPairs[left + '\0' + right] || 0;
2426 }
2427 advancesForGlyphs(glyphs) {
2428 const advances = [];
2429 for (let index = 0; index < glyphs.length; index++) {
2430 const left = glyphs[index];
2431 const right = glyphs[index + 1];
2432 advances.push(this.widthOfGlyph(left) + this.getKernPair(left, right));
2433 }
2434 return advances;
2435 }
2436}
2437
2438class PDFFont {
2439 constructor() {}
2440 encode() {
2441 throw new Error('Must be implemented by subclasses');
2442 }
2443 widthOfString() {
2444 throw new Error('Must be implemented by subclasses');
2445 }
2446 ref() {
2447 return this.dictionary != null ? this.dictionary : this.dictionary = this.document.ref();
2448 }
2449 finalize() {
2450 if (this.embedded || this.dictionary == null) {
2451 return;
2452 }
2453 this.embed();
2454 return this.embedded = true;
2455 }
2456 embed() {
2457 throw new Error('Must be implemented by subclasses');
2458 }
2459 lineHeight(size, includeGap) {
2460 if (includeGap == null) {
2461 includeGap = false;
2462 }
2463 const gap = includeGap ? this.lineGap : 0;
2464 return (this.ascender + gap - this.descender) / 1000 * size;
2465 }
2466}
2467
2468// This insanity is so bundlers can inline the font files
2469const STANDARD_FONTS = {
2470 Courier() {
2471 return "StartFontMetrics 4.1\r\nComment Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 17:27:09 1997\r\nComment UniqueID 43050\r\nComment VMusage 39754 50779\r\nFontName Courier\r\nFullName Courier\r\nFamilyName Courier\r\nWeight Medium\r\nItalicAngle 0\r\nIsFixedPitch true\r\nCharacterSet ExtendedRoman\r\nFontBBox -23 -250 715 805 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 003.000\r\nNotice Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 562\r\nXHeight 426\r\nAscender 629\r\nDescender -157\r\nStdHW 51\r\nStdVW 51\r\nStartCharMetrics 315\r\nC 32 ; WX 600 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 600 ; N exclam ; B 236 -15 364 572 ;\r\nC 34 ; WX 600 ; N quotedbl ; B 187 328 413 562 ;\r\nC 35 ; WX 600 ; N numbersign ; B 93 -32 507 639 ;\r\nC 36 ; WX 600 ; N dollar ; B 105 -126 496 662 ;\r\nC 37 ; WX 600 ; N percent ; B 81 -15 518 622 ;\r\nC 38 ; WX 600 ; N ampersand ; B 63 -15 538 543 ;\r\nC 39 ; WX 600 ; N quoteright ; B 213 328 376 562 ;\r\nC 40 ; WX 600 ; N parenleft ; B 269 -108 440 622 ;\r\nC 41 ; WX 600 ; N parenright ; B 160 -108 331 622 ;\r\nC 42 ; WX 600 ; N asterisk ; B 116 257 484 607 ;\r\nC 43 ; WX 600 ; N plus ; B 80 44 520 470 ;\r\nC 44 ; WX 600 ; N comma ; B 181 -112 344 122 ;\r\nC 45 ; WX 600 ; N hyphen ; B 103 231 497 285 ;\r\nC 46 ; WX 600 ; N period ; B 229 -15 371 109 ;\r\nC 47 ; WX 600 ; N slash ; B 125 -80 475 629 ;\r\nC 48 ; WX 600 ; N zero ; B 106 -15 494 622 ;\r\nC 49 ; WX 600 ; N one ; B 96 0 505 622 ;\r\nC 50 ; WX 600 ; N two ; B 70 0 471 622 ;\r\nC 51 ; WX 600 ; N three ; B 75 -15 466 622 ;\r\nC 52 ; WX 600 ; N four ; B 78 0 500 622 ;\r\nC 53 ; WX 600 ; N five ; B 92 -15 497 607 ;\r\nC 54 ; WX 600 ; N six ; B 111 -15 497 622 ;\r\nC 55 ; WX 600 ; N seven ; B 82 0 483 607 ;\r\nC 56 ; WX 600 ; N eight ; B 102 -15 498 622 ;\r\nC 57 ; WX 600 ; N nine ; B 96 -15 489 622 ;\r\nC 58 ; WX 600 ; N colon ; B 229 -15 371 385 ;\r\nC 59 ; WX 600 ; N semicolon ; B 181 -112 371 385 ;\r\nC 60 ; WX 600 ; N less ; B 41 42 519 472 ;\r\nC 61 ; WX 600 ; N equal ; B 80 138 520 376 ;\r\nC 62 ; WX 600 ; N greater ; B 66 42 544 472 ;\r\nC 63 ; WX 600 ; N question ; B 129 -15 492 572 ;\r\nC 64 ; WX 600 ; N at ; B 77 -15 533 622 ;\r\nC 65 ; WX 600 ; N A ; B 3 0 597 562 ;\r\nC 66 ; WX 600 ; N B ; B 43 0 559 562 ;\r\nC 67 ; WX 600 ; N C ; B 41 -18 540 580 ;\r\nC 68 ; WX 600 ; N D ; B 43 0 574 562 ;\r\nC 69 ; WX 600 ; N E ; B 53 0 550 562 ;\r\nC 70 ; WX 600 ; N F ; B 53 0 545 562 ;\r\nC 71 ; WX 600 ; N G ; B 31 -18 575 580 ;\r\nC 72 ; WX 600 ; N H ; B 32 0 568 562 ;\r\nC 73 ; WX 600 ; N I ; B 96 0 504 562 ;\r\nC 74 ; WX 600 ; N J ; B 34 -18 566 562 ;\r\nC 75 ; WX 600 ; N K ; B 38 0 582 562 ;\r\nC 76 ; WX 600 ; N L ; B 47 0 554 562 ;\r\nC 77 ; WX 600 ; N M ; B 4 0 596 562 ;\r\nC 78 ; WX 600 ; N N ; B 7 -13 593 562 ;\r\nC 79 ; WX 600 ; N O ; B 43 -18 557 580 ;\r\nC 80 ; WX 600 ; N P ; B 79 0 558 562 ;\r\nC 81 ; WX 600 ; N Q ; B 43 -138 557 580 ;\r\nC 82 ; WX 600 ; N R ; B 38 0 588 562 ;\r\nC 83 ; WX 600 ; N S ; B 72 -20 529 580 ;\r\nC 84 ; WX 600 ; N T ; B 38 0 563 562 ;\r\nC 85 ; WX 600 ; N U ; B 17 -18 583 562 ;\r\nC 86 ; WX 600 ; N V ; B -4 -13 604 562 ;\r\nC 87 ; WX 600 ; N W ; B -3 -13 603 562 ;\r\nC 88 ; WX 600 ; N X ; B 23 0 577 562 ;\r\nC 89 ; WX 600 ; N Y ; B 24 0 576 562 ;\r\nC 90 ; WX 600 ; N Z ; B 86 0 514 562 ;\r\nC 91 ; WX 600 ; N bracketleft ; B 269 -108 442 622 ;\r\nC 92 ; WX 600 ; N backslash ; B 118 -80 482 629 ;\r\nC 93 ; WX 600 ; N bracketright ; B 158 -108 331 622 ;\r\nC 94 ; WX 600 ; N asciicircum ; B 94 354 506 622 ;\r\nC 95 ; WX 600 ; N underscore ; B 0 -125 600 -75 ;\r\nC 96 ; WX 600 ; N quoteleft ; B 224 328 387 562 ;\r\nC 97 ; WX 600 ; N a ; B 53 -15 559 441 ;\r\nC 98 ; WX 600 ; N b ; B 14 -15 575 629 ;\r\nC 99 ; WX 600 ; N c ; B 66 -15 529 441 ;\r\nC 100 ; WX 600 ; N d ; B 45 -15 591 629 ;\r\nC 101 ; WX 600 ; N e ; B 66 -15 548 441 ;\r\nC 102 ; WX 600 ; N f ; B 114 0 531 629 ; L i fi ; L l fl ;\r\nC 103 ; WX 600 ; N g ; B 45 -157 566 441 ;\r\nC 104 ; WX 600 ; N h ; B 18 0 582 629 ;\r\nC 105 ; WX 600 ; N i ; B 95 0 505 657 ;\r\nC 106 ; WX 600 ; N j ; B 82 -157 410 657 ;\r\nC 107 ; WX 600 ; N k ; B 43 0 580 629 ;\r\nC 108 ; WX 600 ; N l ; B 95 0 505 629 ;\r\nC 109 ; WX 600 ; N m ; B -5 0 605 441 ;\r\nC 110 ; WX 600 ; N n ; B 26 0 575 441 ;\r\nC 111 ; WX 600 ; N o ; B 62 -15 538 441 ;\r\nC 112 ; WX 600 ; N p ; B 9 -157 555 441 ;\r\nC 113 ; WX 600 ; N q ; B 45 -157 591 441 ;\r\nC 114 ; WX 600 ; N r ; B 60 0 559 441 ;\r\nC 115 ; WX 600 ; N s ; B 80 -15 513 441 ;\r\nC 116 ; WX 600 ; N t ; B 87 -15 530 561 ;\r\nC 117 ; WX 600 ; N u ; B 21 -15 562 426 ;\r\nC 118 ; WX 600 ; N v ; B 10 -10 590 426 ;\r\nC 119 ; WX 600 ; N w ; B -4 -10 604 426 ;\r\nC 120 ; WX 600 ; N x ; B 20 0 580 426 ;\r\nC 121 ; WX 600 ; N y ; B 7 -157 592 426 ;\r\nC 122 ; WX 600 ; N z ; B 99 0 502 426 ;\r\nC 123 ; WX 600 ; N braceleft ; B 182 -108 437 622 ;\r\nC 124 ; WX 600 ; N bar ; B 275 -250 326 750 ;\r\nC 125 ; WX 600 ; N braceright ; B 163 -108 418 622 ;\r\nC 126 ; WX 600 ; N asciitilde ; B 63 197 540 320 ;\r\nC 161 ; WX 600 ; N exclamdown ; B 236 -157 364 430 ;\r\nC 162 ; WX 600 ; N cent ; B 96 -49 500 614 ;\r\nC 163 ; WX 600 ; N sterling ; B 84 -21 521 611 ;\r\nC 164 ; WX 600 ; N fraction ; B 92 -57 509 665 ;\r\nC 165 ; WX 600 ; N yen ; B 26 0 574 562 ;\r\nC 166 ; WX 600 ; N florin ; B 4 -143 539 622 ;\r\nC 167 ; WX 600 ; N section ; B 113 -78 488 580 ;\r\nC 168 ; WX 600 ; N currency ; B 73 58 527 506 ;\r\nC 169 ; WX 600 ; N quotesingle ; B 259 328 341 562 ;\r\nC 170 ; WX 600 ; N quotedblleft ; B 143 328 471 562 ;\r\nC 171 ; WX 600 ; N guillemotleft ; B 37 70 563 446 ;\r\nC 172 ; WX 600 ; N guilsinglleft ; B 149 70 451 446 ;\r\nC 173 ; WX 600 ; N guilsinglright ; B 149 70 451 446 ;\r\nC 174 ; WX 600 ; N fi ; B 3 0 597 629 ;\r\nC 175 ; WX 600 ; N fl ; B 3 0 597 629 ;\r\nC 177 ; WX 600 ; N endash ; B 75 231 525 285 ;\r\nC 178 ; WX 600 ; N dagger ; B 141 -78 459 580 ;\r\nC 179 ; WX 600 ; N daggerdbl ; B 141 -78 459 580 ;\r\nC 180 ; WX 600 ; N periodcentered ; B 222 189 378 327 ;\r\nC 182 ; WX 600 ; N paragraph ; B 50 -78 511 562 ;\r\nC 183 ; WX 600 ; N bullet ; B 172 130 428 383 ;\r\nC 184 ; WX 600 ; N quotesinglbase ; B 213 -134 376 100 ;\r\nC 185 ; WX 600 ; N quotedblbase ; B 143 -134 457 100 ;\r\nC 186 ; WX 600 ; N quotedblright ; B 143 328 457 562 ;\r\nC 187 ; WX 600 ; N guillemotright ; B 37 70 563 446 ;\r\nC 188 ; WX 600 ; N ellipsis ; B 37 -15 563 111 ;\r\nC 189 ; WX 600 ; N perthousand ; B 3 -15 600 622 ;\r\nC 191 ; WX 600 ; N questiondown ; B 108 -157 471 430 ;\r\nC 193 ; WX 600 ; N grave ; B 151 497 378 672 ;\r\nC 194 ; WX 600 ; N acute ; B 242 497 469 672 ;\r\nC 195 ; WX 600 ; N circumflex ; B 124 477 476 654 ;\r\nC 196 ; WX 600 ; N tilde ; B 105 489 503 606 ;\r\nC 197 ; WX 600 ; N macron ; B 120 525 480 565 ;\r\nC 198 ; WX 600 ; N breve ; B 153 501 447 609 ;\r\nC 199 ; WX 600 ; N dotaccent ; B 249 537 352 640 ;\r\nC 200 ; WX 600 ; N dieresis ; B 148 537 453 640 ;\r\nC 202 ; WX 600 ; N ring ; B 218 463 382 627 ;\r\nC 203 ; WX 600 ; N cedilla ; B 224 -151 362 10 ;\r\nC 205 ; WX 600 ; N hungarumlaut ; B 133 497 540 672 ;\r\nC 206 ; WX 600 ; N ogonek ; B 211 -172 407 4 ;\r\nC 207 ; WX 600 ; N caron ; B 124 492 476 669 ;\r\nC 208 ; WX 600 ; N emdash ; B 0 231 600 285 ;\r\nC 225 ; WX 600 ; N AE ; B 3 0 550 562 ;\r\nC 227 ; WX 600 ; N ordfeminine ; B 156 249 442 580 ;\r\nC 232 ; WX 600 ; N Lslash ; B 47 0 554 562 ;\r\nC 233 ; WX 600 ; N Oslash ; B 43 -80 557 629 ;\r\nC 234 ; WX 600 ; N OE ; B 7 0 567 562 ;\r\nC 235 ; WX 600 ; N ordmasculine ; B 157 249 443 580 ;\r\nC 241 ; WX 600 ; N ae ; B 19 -15 570 441 ;\r\nC 245 ; WX 600 ; N dotlessi ; B 95 0 505 426 ;\r\nC 248 ; WX 600 ; N lslash ; B 95 0 505 629 ;\r\nC 249 ; WX 600 ; N oslash ; B 62 -80 538 506 ;\r\nC 250 ; WX 600 ; N oe ; B 19 -15 559 441 ;\r\nC 251 ; WX 600 ; N germandbls ; B 48 -15 588 629 ;\r\nC -1 ; WX 600 ; N Idieresis ; B 96 0 504 753 ;\r\nC -1 ; WX 600 ; N eacute ; B 66 -15 548 672 ;\r\nC -1 ; WX 600 ; N abreve ; B 53 -15 559 609 ;\r\nC -1 ; WX 600 ; N uhungarumlaut ; B 21 -15 580 672 ;\r\nC -1 ; WX 600 ; N ecaron ; B 66 -15 548 669 ;\r\nC -1 ; WX 600 ; N Ydieresis ; B 24 0 576 753 ;\r\nC -1 ; WX 600 ; N divide ; B 87 48 513 467 ;\r\nC -1 ; WX 600 ; N Yacute ; B 24 0 576 805 ;\r\nC -1 ; WX 600 ; N Acircumflex ; B 3 0 597 787 ;\r\nC -1 ; WX 600 ; N aacute ; B 53 -15 559 672 ;\r\nC -1 ; WX 600 ; N Ucircumflex ; B 17 -18 583 787 ;\r\nC -1 ; WX 600 ; N yacute ; B 7 -157 592 672 ;\r\nC -1 ; WX 600 ; N scommaaccent ; B 80 -250 513 441 ;\r\nC -1 ; WX 600 ; N ecircumflex ; B 66 -15 548 654 ;\r\nC -1 ; WX 600 ; N Uring ; B 17 -18 583 760 ;\r\nC -1 ; WX 600 ; N Udieresis ; B 17 -18 583 753 ;\r\nC -1 ; WX 600 ; N aogonek ; B 53 -172 587 441 ;\r\nC -1 ; WX 600 ; N Uacute ; B 17 -18 583 805 ;\r\nC -1 ; WX 600 ; N uogonek ; B 21 -172 590 426 ;\r\nC -1 ; WX 600 ; N Edieresis ; B 53 0 550 753 ;\r\nC -1 ; WX 600 ; N Dcroat ; B 30 0 574 562 ;\r\nC -1 ; WX 600 ; N commaaccent ; B 198 -250 335 -58 ;\r\nC -1 ; WX 600 ; N copyright ; B 0 -18 600 580 ;\r\nC -1 ; WX 600 ; N Emacron ; B 53 0 550 698 ;\r\nC -1 ; WX 600 ; N ccaron ; B 66 -15 529 669 ;\r\nC -1 ; WX 600 ; N aring ; B 53 -15 559 627 ;\r\nC -1 ; WX 600 ; N Ncommaaccent ; B 7 -250 593 562 ;\r\nC -1 ; WX 600 ; N lacute ; B 95 0 505 805 ;\r\nC -1 ; WX 600 ; N agrave ; B 53 -15 559 672 ;\r\nC -1 ; WX 600 ; N Tcommaaccent ; B 38 -250 563 562 ;\r\nC -1 ; WX 600 ; N Cacute ; B 41 -18 540 805 ;\r\nC -1 ; WX 600 ; N atilde ; B 53 -15 559 606 ;\r\nC -1 ; WX 600 ; N Edotaccent ; B 53 0 550 753 ;\r\nC -1 ; WX 600 ; N scaron ; B 80 -15 513 669 ;\r\nC -1 ; WX 600 ; N scedilla ; B 80 -151 513 441 ;\r\nC -1 ; WX 600 ; N iacute ; B 95 0 505 672 ;\r\nC -1 ; WX 600 ; N lozenge ; B 18 0 443 706 ;\r\nC -1 ; WX 600 ; N Rcaron ; B 38 0 588 802 ;\r\nC -1 ; WX 600 ; N Gcommaaccent ; B 31 -250 575 580 ;\r\nC -1 ; WX 600 ; N ucircumflex ; B 21 -15 562 654 ;\r\nC -1 ; WX 600 ; N acircumflex ; B 53 -15 559 654 ;\r\nC -1 ; WX 600 ; N Amacron ; B 3 0 597 698 ;\r\nC -1 ; WX 600 ; N rcaron ; B 60 0 559 669 ;\r\nC -1 ; WX 600 ; N ccedilla ; B 66 -151 529 441 ;\r\nC -1 ; WX 600 ; N Zdotaccent ; B 86 0 514 753 ;\r\nC -1 ; WX 600 ; N Thorn ; B 79 0 538 562 ;\r\nC -1 ; WX 600 ; N Omacron ; B 43 -18 557 698 ;\r\nC -1 ; WX 600 ; N Racute ; B 38 0 588 805 ;\r\nC -1 ; WX 600 ; N Sacute ; B 72 -20 529 805 ;\r\nC -1 ; WX 600 ; N dcaron ; B 45 -15 715 629 ;\r\nC -1 ; WX 600 ; N Umacron ; B 17 -18 583 698 ;\r\nC -1 ; WX 600 ; N uring ; B 21 -15 562 627 ;\r\nC -1 ; WX 600 ; N threesuperior ; B 155 240 406 622 ;\r\nC -1 ; WX 600 ; N Ograve ; B 43 -18 557 805 ;\r\nC -1 ; WX 600 ; N Agrave ; B 3 0 597 805 ;\r\nC -1 ; WX 600 ; N Abreve ; B 3 0 597 732 ;\r\nC -1 ; WX 600 ; N multiply ; B 87 43 515 470 ;\r\nC -1 ; WX 600 ; N uacute ; B 21 -15 562 672 ;\r\nC -1 ; WX 600 ; N Tcaron ; B 38 0 563 802 ;\r\nC -1 ; WX 600 ; N partialdiff ; B 17 -38 459 710 ;\r\nC -1 ; WX 600 ; N ydieresis ; B 7 -157 592 620 ;\r\nC -1 ; WX 600 ; N Nacute ; B 7 -13 593 805 ;\r\nC -1 ; WX 600 ; N icircumflex ; B 94 0 505 654 ;\r\nC -1 ; WX 600 ; N Ecircumflex ; B 53 0 550 787 ;\r\nC -1 ; WX 600 ; N adieresis ; B 53 -15 559 620 ;\r\nC -1 ; WX 600 ; N edieresis ; B 66 -15 548 620 ;\r\nC -1 ; WX 600 ; N cacute ; B 66 -15 529 672 ;\r\nC -1 ; WX 600 ; N nacute ; B 26 0 575 672 ;\r\nC -1 ; WX 600 ; N umacron ; B 21 -15 562 565 ;\r\nC -1 ; WX 600 ; N Ncaron ; B 7 -13 593 802 ;\r\nC -1 ; WX 600 ; N Iacute ; B 96 0 504 805 ;\r\nC -1 ; WX 600 ; N plusminus ; B 87 44 513 558 ;\r\nC -1 ; WX 600 ; N brokenbar ; B 275 -175 326 675 ;\r\nC -1 ; WX 600 ; N registered ; B 0 -18 600 580 ;\r\nC -1 ; WX 600 ; N Gbreve ; B 31 -18 575 732 ;\r\nC -1 ; WX 600 ; N Idotaccent ; B 96 0 504 753 ;\r\nC -1 ; WX 600 ; N summation ; B 15 -10 585 706 ;\r\nC -1 ; WX 600 ; N Egrave ; B 53 0 550 805 ;\r\nC -1 ; WX 600 ; N racute ; B 60 0 559 672 ;\r\nC -1 ; WX 600 ; N omacron ; B 62 -15 538 565 ;\r\nC -1 ; WX 600 ; N Zacute ; B 86 0 514 805 ;\r\nC -1 ; WX 600 ; N Zcaron ; B 86 0 514 802 ;\r\nC -1 ; WX 600 ; N greaterequal ; B 98 0 502 710 ;\r\nC -1 ; WX 600 ; N Eth ; B 30 0 574 562 ;\r\nC -1 ; WX 600 ; N Ccedilla ; B 41 -151 540 580 ;\r\nC -1 ; WX 600 ; N lcommaaccent ; B 95 -250 505 629 ;\r\nC -1 ; WX 600 ; N tcaron ; B 87 -15 530 717 ;\r\nC -1 ; WX 600 ; N eogonek ; B 66 -172 548 441 ;\r\nC -1 ; WX 600 ; N Uogonek ; B 17 -172 583 562 ;\r\nC -1 ; WX 600 ; N Aacute ; B 3 0 597 805 ;\r\nC -1 ; WX 600 ; N Adieresis ; B 3 0 597 753 ;\r\nC -1 ; WX 600 ; N egrave ; B 66 -15 548 672 ;\r\nC -1 ; WX 600 ; N zacute ; B 99 0 502 672 ;\r\nC -1 ; WX 600 ; N iogonek ; B 95 -172 505 657 ;\r\nC -1 ; WX 600 ; N Oacute ; B 43 -18 557 805 ;\r\nC -1 ; WX 600 ; N oacute ; B 62 -15 538 672 ;\r\nC -1 ; WX 600 ; N amacron ; B 53 -15 559 565 ;\r\nC -1 ; WX 600 ; N sacute ; B 80 -15 513 672 ;\r\nC -1 ; WX 600 ; N idieresis ; B 95 0 505 620 ;\r\nC -1 ; WX 600 ; N Ocircumflex ; B 43 -18 557 787 ;\r\nC -1 ; WX 600 ; N Ugrave ; B 17 -18 583 805 ;\r\nC -1 ; WX 600 ; N Delta ; B 6 0 598 688 ;\r\nC -1 ; WX 600 ; N thorn ; B -6 -157 555 629 ;\r\nC -1 ; WX 600 ; N twosuperior ; B 177 249 424 622 ;\r\nC -1 ; WX 600 ; N Odieresis ; B 43 -18 557 753 ;\r\nC -1 ; WX 600 ; N mu ; B 21 -157 562 426 ;\r\nC -1 ; WX 600 ; N igrave ; B 95 0 505 672 ;\r\nC -1 ; WX 600 ; N ohungarumlaut ; B 62 -15 580 672 ;\r\nC -1 ; WX 600 ; N Eogonek ; B 53 -172 561 562 ;\r\nC -1 ; WX 600 ; N dcroat ; B 45 -15 591 629 ;\r\nC -1 ; WX 600 ; N threequarters ; B 8 -56 593 666 ;\r\nC -1 ; WX 600 ; N Scedilla ; B 72 -151 529 580 ;\r\nC -1 ; WX 600 ; N lcaron ; B 95 0 533 629 ;\r\nC -1 ; WX 600 ; N Kcommaaccent ; B 38 -250 582 562 ;\r\nC -1 ; WX 600 ; N Lacute ; B 47 0 554 805 ;\r\nC -1 ; WX 600 ; N trademark ; B -23 263 623 562 ;\r\nC -1 ; WX 600 ; N edotaccent ; B 66 -15 548 620 ;\r\nC -1 ; WX 600 ; N Igrave ; B 96 0 504 805 ;\r\nC -1 ; WX 600 ; N Imacron ; B 96 0 504 698 ;\r\nC -1 ; WX 600 ; N Lcaron ; B 47 0 554 562 ;\r\nC -1 ; WX 600 ; N onehalf ; B 0 -57 611 665 ;\r\nC -1 ; WX 600 ; N lessequal ; B 98 0 502 710 ;\r\nC -1 ; WX 600 ; N ocircumflex ; B 62 -15 538 654 ;\r\nC -1 ; WX 600 ; N ntilde ; B 26 0 575 606 ;\r\nC -1 ; WX 600 ; N Uhungarumlaut ; B 17 -18 590 805 ;\r\nC -1 ; WX 600 ; N Eacute ; B 53 0 550 805 ;\r\nC -1 ; WX 600 ; N emacron ; B 66 -15 548 565 ;\r\nC -1 ; WX 600 ; N gbreve ; B 45 -157 566 609 ;\r\nC -1 ; WX 600 ; N onequarter ; B 0 -57 600 665 ;\r\nC -1 ; WX 600 ; N Scaron ; B 72 -20 529 802 ;\r\nC -1 ; WX 600 ; N Scommaaccent ; B 72 -250 529 580 ;\r\nC -1 ; WX 600 ; N Ohungarumlaut ; B 43 -18 580 805 ;\r\nC -1 ; WX 600 ; N degree ; B 123 269 477 622 ;\r\nC -1 ; WX 600 ; N ograve ; B 62 -15 538 672 ;\r\nC -1 ; WX 600 ; N Ccaron ; B 41 -18 540 802 ;\r\nC -1 ; WX 600 ; N ugrave ; B 21 -15 562 672 ;\r\nC -1 ; WX 600 ; N radical ; B 3 -15 597 792 ;\r\nC -1 ; WX 600 ; N Dcaron ; B 43 0 574 802 ;\r\nC -1 ; WX 600 ; N rcommaaccent ; B 60 -250 559 441 ;\r\nC -1 ; WX 600 ; N Ntilde ; B 7 -13 593 729 ;\r\nC -1 ; WX 600 ; N otilde ; B 62 -15 538 606 ;\r\nC -1 ; WX 600 ; N Rcommaaccent ; B 38 -250 588 562 ;\r\nC -1 ; WX 600 ; N Lcommaaccent ; B 47 -250 554 562 ;\r\nC -1 ; WX 600 ; N Atilde ; B 3 0 597 729 ;\r\nC -1 ; WX 600 ; N Aogonek ; B 3 -172 608 562 ;\r\nC -1 ; WX 600 ; N Aring ; B 3 0 597 750 ;\r\nC -1 ; WX 600 ; N Otilde ; B 43 -18 557 729 ;\r\nC -1 ; WX 600 ; N zdotaccent ; B 99 0 502 620 ;\r\nC -1 ; WX 600 ; N Ecaron ; B 53 0 550 802 ;\r\nC -1 ; WX 600 ; N Iogonek ; B 96 -172 504 562 ;\r\nC -1 ; WX 600 ; N kcommaaccent ; B 43 -250 580 629 ;\r\nC -1 ; WX 600 ; N minus ; B 80 232 520 283 ;\r\nC -1 ; WX 600 ; N Icircumflex ; B 96 0 504 787 ;\r\nC -1 ; WX 600 ; N ncaron ; B 26 0 575 669 ;\r\nC -1 ; WX 600 ; N tcommaaccent ; B 87 -250 530 561 ;\r\nC -1 ; WX 600 ; N logicalnot ; B 87 108 513 369 ;\r\nC -1 ; WX 600 ; N odieresis ; B 62 -15 538 620 ;\r\nC -1 ; WX 600 ; N udieresis ; B 21 -15 562 620 ;\r\nC -1 ; WX 600 ; N notequal ; B 15 -16 540 529 ;\r\nC -1 ; WX 600 ; N gcommaaccent ; B 45 -157 566 708 ;\r\nC -1 ; WX 600 ; N eth ; B 62 -15 538 629 ;\r\nC -1 ; WX 600 ; N zcaron ; B 99 0 502 669 ;\r\nC -1 ; WX 600 ; N ncommaaccent ; B 26 -250 575 441 ;\r\nC -1 ; WX 600 ; N onesuperior ; B 172 249 428 622 ;\r\nC -1 ; WX 600 ; N imacron ; B 95 0 505 565 ;\r\nC -1 ; WX 600 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nEndFontMetrics\r\n";
2472 },
2473 'Courier-Bold'() {
2474 return "StartFontMetrics 4.1\r\nComment Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Mon Jun 23 16:28:00 1997\r\nComment UniqueID 43048\r\nComment VMusage 41139 52164\r\nFontName Courier-Bold\r\nFullName Courier Bold\r\nFamilyName Courier\r\nWeight Bold\r\nItalicAngle 0\r\nIsFixedPitch true\r\nCharacterSet ExtendedRoman\r\nFontBBox -113 -250 749 801 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 003.000\r\nNotice Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 562\r\nXHeight 439\r\nAscender 629\r\nDescender -157\r\nStdHW 84\r\nStdVW 106\r\nStartCharMetrics 315\r\nC 32 ; WX 600 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 600 ; N exclam ; B 202 -15 398 572 ;\r\nC 34 ; WX 600 ; N quotedbl ; B 135 277 465 562 ;\r\nC 35 ; WX 600 ; N numbersign ; B 56 -45 544 651 ;\r\nC 36 ; WX 600 ; N dollar ; B 82 -126 519 666 ;\r\nC 37 ; WX 600 ; N percent ; B 5 -15 595 616 ;\r\nC 38 ; WX 600 ; N ampersand ; B 36 -15 546 543 ;\r\nC 39 ; WX 600 ; N quoteright ; B 171 277 423 562 ;\r\nC 40 ; WX 600 ; N parenleft ; B 219 -102 461 616 ;\r\nC 41 ; WX 600 ; N parenright ; B 139 -102 381 616 ;\r\nC 42 ; WX 600 ; N asterisk ; B 91 219 509 601 ;\r\nC 43 ; WX 600 ; N plus ; B 71 39 529 478 ;\r\nC 44 ; WX 600 ; N comma ; B 123 -111 393 174 ;\r\nC 45 ; WX 600 ; N hyphen ; B 100 203 500 313 ;\r\nC 46 ; WX 600 ; N period ; B 192 -15 408 171 ;\r\nC 47 ; WX 600 ; N slash ; B 98 -77 502 626 ;\r\nC 48 ; WX 600 ; N zero ; B 87 -15 513 616 ;\r\nC 49 ; WX 600 ; N one ; B 81 0 539 616 ;\r\nC 50 ; WX 600 ; N two ; B 61 0 499 616 ;\r\nC 51 ; WX 600 ; N three ; B 63 -15 501 616 ;\r\nC 52 ; WX 600 ; N four ; B 53 0 507 616 ;\r\nC 53 ; WX 600 ; N five ; B 70 -15 521 601 ;\r\nC 54 ; WX 600 ; N six ; B 90 -15 521 616 ;\r\nC 55 ; WX 600 ; N seven ; B 55 0 494 601 ;\r\nC 56 ; WX 600 ; N eight ; B 83 -15 517 616 ;\r\nC 57 ; WX 600 ; N nine ; B 79 -15 510 616 ;\r\nC 58 ; WX 600 ; N colon ; B 191 -15 407 425 ;\r\nC 59 ; WX 600 ; N semicolon ; B 123 -111 408 425 ;\r\nC 60 ; WX 600 ; N less ; B 66 15 523 501 ;\r\nC 61 ; WX 600 ; N equal ; B 71 118 529 398 ;\r\nC 62 ; WX 600 ; N greater ; B 77 15 534 501 ;\r\nC 63 ; WX 600 ; N question ; B 98 -14 501 580 ;\r\nC 64 ; WX 600 ; N at ; B 16 -15 584 616 ;\r\nC 65 ; WX 600 ; N A ; B -9 0 609 562 ;\r\nC 66 ; WX 600 ; N B ; B 30 0 573 562 ;\r\nC 67 ; WX 600 ; N C ; B 22 -18 560 580 ;\r\nC 68 ; WX 600 ; N D ; B 30 0 594 562 ;\r\nC 69 ; WX 600 ; N E ; B 25 0 560 562 ;\r\nC 70 ; WX 600 ; N F ; B 39 0 570 562 ;\r\nC 71 ; WX 600 ; N G ; B 22 -18 594 580 ;\r\nC 72 ; WX 600 ; N H ; B 20 0 580 562 ;\r\nC 73 ; WX 600 ; N I ; B 77 0 523 562 ;\r\nC 74 ; WX 600 ; N J ; B 37 -18 601 562 ;\r\nC 75 ; WX 600 ; N K ; B 21 0 599 562 ;\r\nC 76 ; WX 600 ; N L ; B 39 0 578 562 ;\r\nC 77 ; WX 600 ; N M ; B -2 0 602 562 ;\r\nC 78 ; WX 600 ; N N ; B 8 -12 610 562 ;\r\nC 79 ; WX 600 ; N O ; B 22 -18 578 580 ;\r\nC 80 ; WX 600 ; N P ; B 48 0 559 562 ;\r\nC 81 ; WX 600 ; N Q ; B 32 -138 578 580 ;\r\nC 82 ; WX 600 ; N R ; B 24 0 599 562 ;\r\nC 83 ; WX 600 ; N S ; B 47 -22 553 582 ;\r\nC 84 ; WX 600 ; N T ; B 21 0 579 562 ;\r\nC 85 ; WX 600 ; N U ; B 4 -18 596 562 ;\r\nC 86 ; WX 600 ; N V ; B -13 0 613 562 ;\r\nC 87 ; WX 600 ; N W ; B -18 0 618 562 ;\r\nC 88 ; WX 600 ; N X ; B 12 0 588 562 ;\r\nC 89 ; WX 600 ; N Y ; B 12 0 589 562 ;\r\nC 90 ; WX 600 ; N Z ; B 62 0 539 562 ;\r\nC 91 ; WX 600 ; N bracketleft ; B 245 -102 475 616 ;\r\nC 92 ; WX 600 ; N backslash ; B 99 -77 503 626 ;\r\nC 93 ; WX 600 ; N bracketright ; B 125 -102 355 616 ;\r\nC 94 ; WX 600 ; N asciicircum ; B 108 250 492 616 ;\r\nC 95 ; WX 600 ; N underscore ; B 0 -125 600 -75 ;\r\nC 96 ; WX 600 ; N quoteleft ; B 178 277 428 562 ;\r\nC 97 ; WX 600 ; N a ; B 35 -15 570 454 ;\r\nC 98 ; WX 600 ; N b ; B 0 -15 584 626 ;\r\nC 99 ; WX 600 ; N c ; B 40 -15 545 459 ;\r\nC 100 ; WX 600 ; N d ; B 20 -15 591 626 ;\r\nC 101 ; WX 600 ; N e ; B 40 -15 563 454 ;\r\nC 102 ; WX 600 ; N f ; B 83 0 547 626 ; L i fi ; L l fl ;\r\nC 103 ; WX 600 ; N g ; B 30 -146 580 454 ;\r\nC 104 ; WX 600 ; N h ; B 5 0 592 626 ;\r\nC 105 ; WX 600 ; N i ; B 77 0 523 658 ;\r\nC 106 ; WX 600 ; N j ; B 63 -146 440 658 ;\r\nC 107 ; WX 600 ; N k ; B 20 0 585 626 ;\r\nC 108 ; WX 600 ; N l ; B 77 0 523 626 ;\r\nC 109 ; WX 600 ; N m ; B -22 0 626 454 ;\r\nC 110 ; WX 600 ; N n ; B 18 0 592 454 ;\r\nC 111 ; WX 600 ; N o ; B 30 -15 570 454 ;\r\nC 112 ; WX 600 ; N p ; B -1 -142 570 454 ;\r\nC 113 ; WX 600 ; N q ; B 20 -142 591 454 ;\r\nC 114 ; WX 600 ; N r ; B 47 0 580 454 ;\r\nC 115 ; WX 600 ; N s ; B 68 -17 535 459 ;\r\nC 116 ; WX 600 ; N t ; B 47 -15 532 562 ;\r\nC 117 ; WX 600 ; N u ; B -1 -15 569 439 ;\r\nC 118 ; WX 600 ; N v ; B -1 0 601 439 ;\r\nC 119 ; WX 600 ; N w ; B -18 0 618 439 ;\r\nC 120 ; WX 600 ; N x ; B 6 0 594 439 ;\r\nC 121 ; WX 600 ; N y ; B -4 -142 601 439 ;\r\nC 122 ; WX 600 ; N z ; B 81 0 520 439 ;\r\nC 123 ; WX 600 ; N braceleft ; B 160 -102 464 616 ;\r\nC 124 ; WX 600 ; N bar ; B 255 -250 345 750 ;\r\nC 125 ; WX 600 ; N braceright ; B 136 -102 440 616 ;\r\nC 126 ; WX 600 ; N asciitilde ; B 71 153 530 356 ;\r\nC 161 ; WX 600 ; N exclamdown ; B 202 -146 398 449 ;\r\nC 162 ; WX 600 ; N cent ; B 66 -49 518 614 ;\r\nC 163 ; WX 600 ; N sterling ; B 72 -28 558 611 ;\r\nC 164 ; WX 600 ; N fraction ; B 25 -60 576 661 ;\r\nC 165 ; WX 600 ; N yen ; B 10 0 590 562 ;\r\nC 166 ; WX 600 ; N florin ; B -30 -131 572 616 ;\r\nC 167 ; WX 600 ; N section ; B 83 -70 517 580 ;\r\nC 168 ; WX 600 ; N currency ; B 54 49 546 517 ;\r\nC 169 ; WX 600 ; N quotesingle ; B 227 277 373 562 ;\r\nC 170 ; WX 600 ; N quotedblleft ; B 71 277 535 562 ;\r\nC 171 ; WX 600 ; N guillemotleft ; B 8 70 553 446 ;\r\nC 172 ; WX 600 ; N guilsinglleft ; B 141 70 459 446 ;\r\nC 173 ; WX 600 ; N guilsinglright ; B 141 70 459 446 ;\r\nC 174 ; WX 600 ; N fi ; B 12 0 593 626 ;\r\nC 175 ; WX 600 ; N fl ; B 12 0 593 626 ;\r\nC 177 ; WX 600 ; N endash ; B 65 203 535 313 ;\r\nC 178 ; WX 600 ; N dagger ; B 106 -70 494 580 ;\r\nC 179 ; WX 600 ; N daggerdbl ; B 106 -70 494 580 ;\r\nC 180 ; WX 600 ; N periodcentered ; B 196 165 404 351 ;\r\nC 182 ; WX 600 ; N paragraph ; B 6 -70 576 580 ;\r\nC 183 ; WX 600 ; N bullet ; B 140 132 460 430 ;\r\nC 184 ; WX 600 ; N quotesinglbase ; B 175 -142 427 143 ;\r\nC 185 ; WX 600 ; N quotedblbase ; B 65 -142 529 143 ;\r\nC 186 ; WX 600 ; N quotedblright ; B 61 277 525 562 ;\r\nC 187 ; WX 600 ; N guillemotright ; B 47 70 592 446 ;\r\nC 188 ; WX 600 ; N ellipsis ; B 26 -15 574 116 ;\r\nC 189 ; WX 600 ; N perthousand ; B -113 -15 713 616 ;\r\nC 191 ; WX 600 ; N questiondown ; B 99 -146 502 449 ;\r\nC 193 ; WX 600 ; N grave ; B 132 508 395 661 ;\r\nC 194 ; WX 600 ; N acute ; B 205 508 468 661 ;\r\nC 195 ; WX 600 ; N circumflex ; B 103 483 497 657 ;\r\nC 196 ; WX 600 ; N tilde ; B 89 493 512 636 ;\r\nC 197 ; WX 600 ; N macron ; B 88 505 512 585 ;\r\nC 198 ; WX 600 ; N breve ; B 83 468 517 631 ;\r\nC 199 ; WX 600 ; N dotaccent ; B 230 498 370 638 ;\r\nC 200 ; WX 600 ; N dieresis ; B 128 498 472 638 ;\r\nC 202 ; WX 600 ; N ring ; B 198 481 402 678 ;\r\nC 203 ; WX 600 ; N cedilla ; B 205 -206 387 0 ;\r\nC 205 ; WX 600 ; N hungarumlaut ; B 68 488 588 661 ;\r\nC 206 ; WX 600 ; N ogonek ; B 169 -199 400 0 ;\r\nC 207 ; WX 600 ; N caron ; B 103 493 497 667 ;\r\nC 208 ; WX 600 ; N emdash ; B -10 203 610 313 ;\r\nC 225 ; WX 600 ; N AE ; B -29 0 602 562 ;\r\nC 227 ; WX 600 ; N ordfeminine ; B 147 196 453 580 ;\r\nC 232 ; WX 600 ; N Lslash ; B 39 0 578 562 ;\r\nC 233 ; WX 600 ; N Oslash ; B 22 -22 578 584 ;\r\nC 234 ; WX 600 ; N OE ; B -25 0 595 562 ;\r\nC 235 ; WX 600 ; N ordmasculine ; B 147 196 453 580 ;\r\nC 241 ; WX 600 ; N ae ; B -4 -15 601 454 ;\r\nC 245 ; WX 600 ; N dotlessi ; B 77 0 523 439 ;\r\nC 248 ; WX 600 ; N lslash ; B 77 0 523 626 ;\r\nC 249 ; WX 600 ; N oslash ; B 30 -24 570 463 ;\r\nC 250 ; WX 600 ; N oe ; B -18 -15 611 454 ;\r\nC 251 ; WX 600 ; N germandbls ; B 22 -15 596 626 ;\r\nC -1 ; WX 600 ; N Idieresis ; B 77 0 523 761 ;\r\nC -1 ; WX 600 ; N eacute ; B 40 -15 563 661 ;\r\nC -1 ; WX 600 ; N abreve ; B 35 -15 570 661 ;\r\nC -1 ; WX 600 ; N uhungarumlaut ; B -1 -15 628 661 ;\r\nC -1 ; WX 600 ; N ecaron ; B 40 -15 563 667 ;\r\nC -1 ; WX 600 ; N Ydieresis ; B 12 0 589 761 ;\r\nC -1 ; WX 600 ; N divide ; B 71 16 529 500 ;\r\nC -1 ; WX 600 ; N Yacute ; B 12 0 589 784 ;\r\nC -1 ; WX 600 ; N Acircumflex ; B -9 0 609 780 ;\r\nC -1 ; WX 600 ; N aacute ; B 35 -15 570 661 ;\r\nC -1 ; WX 600 ; N Ucircumflex ; B 4 -18 596 780 ;\r\nC -1 ; WX 600 ; N yacute ; B -4 -142 601 661 ;\r\nC -1 ; WX 600 ; N scommaaccent ; B 68 -250 535 459 ;\r\nC -1 ; WX 600 ; N ecircumflex ; B 40 -15 563 657 ;\r\nC -1 ; WX 600 ; N Uring ; B 4 -18 596 801 ;\r\nC -1 ; WX 600 ; N Udieresis ; B 4 -18 596 761 ;\r\nC -1 ; WX 600 ; N aogonek ; B 35 -199 586 454 ;\r\nC -1 ; WX 600 ; N Uacute ; B 4 -18 596 784 ;\r\nC -1 ; WX 600 ; N uogonek ; B -1 -199 585 439 ;\r\nC -1 ; WX 600 ; N Edieresis ; B 25 0 560 761 ;\r\nC -1 ; WX 600 ; N Dcroat ; B 30 0 594 562 ;\r\nC -1 ; WX 600 ; N commaaccent ; B 205 -250 397 -57 ;\r\nC -1 ; WX 600 ; N copyright ; B 0 -18 600 580 ;\r\nC -1 ; WX 600 ; N Emacron ; B 25 0 560 708 ;\r\nC -1 ; WX 600 ; N ccaron ; B 40 -15 545 667 ;\r\nC -1 ; WX 600 ; N aring ; B 35 -15 570 678 ;\r\nC -1 ; WX 600 ; N Ncommaaccent ; B 8 -250 610 562 ;\r\nC -1 ; WX 600 ; N lacute ; B 77 0 523 801 ;\r\nC -1 ; WX 600 ; N agrave ; B 35 -15 570 661 ;\r\nC -1 ; WX 600 ; N Tcommaaccent ; B 21 -250 579 562 ;\r\nC -1 ; WX 600 ; N Cacute ; B 22 -18 560 784 ;\r\nC -1 ; WX 600 ; N atilde ; B 35 -15 570 636 ;\r\nC -1 ; WX 600 ; N Edotaccent ; B 25 0 560 761 ;\r\nC -1 ; WX 600 ; N scaron ; B 68 -17 535 667 ;\r\nC -1 ; WX 600 ; N scedilla ; B 68 -206 535 459 ;\r\nC -1 ; WX 600 ; N iacute ; B 77 0 523 661 ;\r\nC -1 ; WX 600 ; N lozenge ; B 66 0 534 740 ;\r\nC -1 ; WX 600 ; N Rcaron ; B 24 0 599 790 ;\r\nC -1 ; WX 600 ; N Gcommaaccent ; B 22 -250 594 580 ;\r\nC -1 ; WX 600 ; N ucircumflex ; B -1 -15 569 657 ;\r\nC -1 ; WX 600 ; N acircumflex ; B 35 -15 570 657 ;\r\nC -1 ; WX 600 ; N Amacron ; B -9 0 609 708 ;\r\nC -1 ; WX 600 ; N rcaron ; B 47 0 580 667 ;\r\nC -1 ; WX 600 ; N ccedilla ; B 40 -206 545 459 ;\r\nC -1 ; WX 600 ; N Zdotaccent ; B 62 0 539 761 ;\r\nC -1 ; WX 600 ; N Thorn ; B 48 0 557 562 ;\r\nC -1 ; WX 600 ; N Omacron ; B 22 -18 578 708 ;\r\nC -1 ; WX 600 ; N Racute ; B 24 0 599 784 ;\r\nC -1 ; WX 600 ; N Sacute ; B 47 -22 553 784 ;\r\nC -1 ; WX 600 ; N dcaron ; B 20 -15 727 626 ;\r\nC -1 ; WX 600 ; N Umacron ; B 4 -18 596 708 ;\r\nC -1 ; WX 600 ; N uring ; B -1 -15 569 678 ;\r\nC -1 ; WX 600 ; N threesuperior ; B 138 222 433 616 ;\r\nC -1 ; WX 600 ; N Ograve ; B 22 -18 578 784 ;\r\nC -1 ; WX 600 ; N Agrave ; B -9 0 609 784 ;\r\nC -1 ; WX 600 ; N Abreve ; B -9 0 609 784 ;\r\nC -1 ; WX 600 ; N multiply ; B 81 39 520 478 ;\r\nC -1 ; WX 600 ; N uacute ; B -1 -15 569 661 ;\r\nC -1 ; WX 600 ; N Tcaron ; B 21 0 579 790 ;\r\nC -1 ; WX 600 ; N partialdiff ; B 63 -38 537 728 ;\r\nC -1 ; WX 600 ; N ydieresis ; B -4 -142 601 638 ;\r\nC -1 ; WX 600 ; N Nacute ; B 8 -12 610 784 ;\r\nC -1 ; WX 600 ; N icircumflex ; B 73 0 523 657 ;\r\nC -1 ; WX 600 ; N Ecircumflex ; B 25 0 560 780 ;\r\nC -1 ; WX 600 ; N adieresis ; B 35 -15 570 638 ;\r\nC -1 ; WX 600 ; N edieresis ; B 40 -15 563 638 ;\r\nC -1 ; WX 600 ; N cacute ; B 40 -15 545 661 ;\r\nC -1 ; WX 600 ; N nacute ; B 18 0 592 661 ;\r\nC -1 ; WX 600 ; N umacron ; B -1 -15 569 585 ;\r\nC -1 ; WX 600 ; N Ncaron ; B 8 -12 610 790 ;\r\nC -1 ; WX 600 ; N Iacute ; B 77 0 523 784 ;\r\nC -1 ; WX 600 ; N plusminus ; B 71 24 529 515 ;\r\nC -1 ; WX 600 ; N brokenbar ; B 255 -175 345 675 ;\r\nC -1 ; WX 600 ; N registered ; B 0 -18 600 580 ;\r\nC -1 ; WX 600 ; N Gbreve ; B 22 -18 594 784 ;\r\nC -1 ; WX 600 ; N Idotaccent ; B 77 0 523 761 ;\r\nC -1 ; WX 600 ; N summation ; B 15 -10 586 706 ;\r\nC -1 ; WX 600 ; N Egrave ; B 25 0 560 784 ;\r\nC -1 ; WX 600 ; N racute ; B 47 0 580 661 ;\r\nC -1 ; WX 600 ; N omacron ; B 30 -15 570 585 ;\r\nC -1 ; WX 600 ; N Zacute ; B 62 0 539 784 ;\r\nC -1 ; WX 600 ; N Zcaron ; B 62 0 539 790 ;\r\nC -1 ; WX 600 ; N greaterequal ; B 26 0 523 696 ;\r\nC -1 ; WX 600 ; N Eth ; B 30 0 594 562 ;\r\nC -1 ; WX 600 ; N Ccedilla ; B 22 -206 560 580 ;\r\nC -1 ; WX 600 ; N lcommaaccent ; B 77 -250 523 626 ;\r\nC -1 ; WX 600 ; N tcaron ; B 47 -15 532 703 ;\r\nC -1 ; WX 600 ; N eogonek ; B 40 -199 563 454 ;\r\nC -1 ; WX 600 ; N Uogonek ; B 4 -199 596 562 ;\r\nC -1 ; WX 600 ; N Aacute ; B -9 0 609 784 ;\r\nC -1 ; WX 600 ; N Adieresis ; B -9 0 609 761 ;\r\nC -1 ; WX 600 ; N egrave ; B 40 -15 563 661 ;\r\nC -1 ; WX 600 ; N zacute ; B 81 0 520 661 ;\r\nC -1 ; WX 600 ; N iogonek ; B 77 -199 523 658 ;\r\nC -1 ; WX 600 ; N Oacute ; B 22 -18 578 784 ;\r\nC -1 ; WX 600 ; N oacute ; B 30 -15 570 661 ;\r\nC -1 ; WX 600 ; N amacron ; B 35 -15 570 585 ;\r\nC -1 ; WX 600 ; N sacute ; B 68 -17 535 661 ;\r\nC -1 ; WX 600 ; N idieresis ; B 77 0 523 618 ;\r\nC -1 ; WX 600 ; N Ocircumflex ; B 22 -18 578 780 ;\r\nC -1 ; WX 600 ; N Ugrave ; B 4 -18 596 784 ;\r\nC -1 ; WX 600 ; N Delta ; B 6 0 594 688 ;\r\nC -1 ; WX 600 ; N thorn ; B -14 -142 570 626 ;\r\nC -1 ; WX 600 ; N twosuperior ; B 143 230 436 616 ;\r\nC -1 ; WX 600 ; N Odieresis ; B 22 -18 578 761 ;\r\nC -1 ; WX 600 ; N mu ; B -1 -142 569 439 ;\r\nC -1 ; WX 600 ; N igrave ; B 77 0 523 661 ;\r\nC -1 ; WX 600 ; N ohungarumlaut ; B 30 -15 668 661 ;\r\nC -1 ; WX 600 ; N Eogonek ; B 25 -199 576 562 ;\r\nC -1 ; WX 600 ; N dcroat ; B 20 -15 591 626 ;\r\nC -1 ; WX 600 ; N threequarters ; B -47 -60 648 661 ;\r\nC -1 ; WX 600 ; N Scedilla ; B 47 -206 553 582 ;\r\nC -1 ; WX 600 ; N lcaron ; B 77 0 597 626 ;\r\nC -1 ; WX 600 ; N Kcommaaccent ; B 21 -250 599 562 ;\r\nC -1 ; WX 600 ; N Lacute ; B 39 0 578 784 ;\r\nC -1 ; WX 600 ; N trademark ; B -9 230 749 562 ;\r\nC -1 ; WX 600 ; N edotaccent ; B 40 -15 563 638 ;\r\nC -1 ; WX 600 ; N Igrave ; B 77 0 523 784 ;\r\nC -1 ; WX 600 ; N Imacron ; B 77 0 523 708 ;\r\nC -1 ; WX 600 ; N Lcaron ; B 39 0 637 562 ;\r\nC -1 ; WX 600 ; N onehalf ; B -47 -60 648 661 ;\r\nC -1 ; WX 600 ; N lessequal ; B 26 0 523 696 ;\r\nC -1 ; WX 600 ; N ocircumflex ; B 30 -15 570 657 ;\r\nC -1 ; WX 600 ; N ntilde ; B 18 0 592 636 ;\r\nC -1 ; WX 600 ; N Uhungarumlaut ; B 4 -18 638 784 ;\r\nC -1 ; WX 600 ; N Eacute ; B 25 0 560 784 ;\r\nC -1 ; WX 600 ; N emacron ; B 40 -15 563 585 ;\r\nC -1 ; WX 600 ; N gbreve ; B 30 -146 580 661 ;\r\nC -1 ; WX 600 ; N onequarter ; B -56 -60 656 661 ;\r\nC -1 ; WX 600 ; N Scaron ; B 47 -22 553 790 ;\r\nC -1 ; WX 600 ; N Scommaaccent ; B 47 -250 553 582 ;\r\nC -1 ; WX 600 ; N Ohungarumlaut ; B 22 -18 628 784 ;\r\nC -1 ; WX 600 ; N degree ; B 86 243 474 616 ;\r\nC -1 ; WX 600 ; N ograve ; B 30 -15 570 661 ;\r\nC -1 ; WX 600 ; N Ccaron ; B 22 -18 560 790 ;\r\nC -1 ; WX 600 ; N ugrave ; B -1 -15 569 661 ;\r\nC -1 ; WX 600 ; N radical ; B -19 -104 473 778 ;\r\nC -1 ; WX 600 ; N Dcaron ; B 30 0 594 790 ;\r\nC -1 ; WX 600 ; N rcommaaccent ; B 47 -250 580 454 ;\r\nC -1 ; WX 600 ; N Ntilde ; B 8 -12 610 759 ;\r\nC -1 ; WX 600 ; N otilde ; B 30 -15 570 636 ;\r\nC -1 ; WX 600 ; N Rcommaaccent ; B 24 -250 599 562 ;\r\nC -1 ; WX 600 ; N Lcommaaccent ; B 39 -250 578 562 ;\r\nC -1 ; WX 600 ; N Atilde ; B -9 0 609 759 ;\r\nC -1 ; WX 600 ; N Aogonek ; B -9 -199 625 562 ;\r\nC -1 ; WX 600 ; N Aring ; B -9 0 609 801 ;\r\nC -1 ; WX 600 ; N Otilde ; B 22 -18 578 759 ;\r\nC -1 ; WX 600 ; N zdotaccent ; B 81 0 520 638 ;\r\nC -1 ; WX 600 ; N Ecaron ; B 25 0 560 790 ;\r\nC -1 ; WX 600 ; N Iogonek ; B 77 -199 523 562 ;\r\nC -1 ; WX 600 ; N kcommaaccent ; B 20 -250 585 626 ;\r\nC -1 ; WX 600 ; N minus ; B 71 203 529 313 ;\r\nC -1 ; WX 600 ; N Icircumflex ; B 77 0 523 780 ;\r\nC -1 ; WX 600 ; N ncaron ; B 18 0 592 667 ;\r\nC -1 ; WX 600 ; N tcommaaccent ; B 47 -250 532 562 ;\r\nC -1 ; WX 600 ; N logicalnot ; B 71 103 529 413 ;\r\nC -1 ; WX 600 ; N odieresis ; B 30 -15 570 638 ;\r\nC -1 ; WX 600 ; N udieresis ; B -1 -15 569 638 ;\r\nC -1 ; WX 600 ; N notequal ; B 12 -47 537 563 ;\r\nC -1 ; WX 600 ; N gcommaaccent ; B 30 -146 580 714 ;\r\nC -1 ; WX 600 ; N eth ; B 58 -27 543 626 ;\r\nC -1 ; WX 600 ; N zcaron ; B 81 0 520 667 ;\r\nC -1 ; WX 600 ; N ncommaaccent ; B 18 -250 592 454 ;\r\nC -1 ; WX 600 ; N onesuperior ; B 153 230 447 616 ;\r\nC -1 ; WX 600 ; N imacron ; B 77 0 523 585 ;\r\nC -1 ; WX 600 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nEndFontMetrics\r\n";
2475 },
2476 'Courier-Oblique'() {
2477 return "StartFontMetrics 4.1\r\nComment Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 17:37:52 1997\r\nComment UniqueID 43051\r\nComment VMusage 16248 75829\r\nFontName Courier-Oblique\r\nFullName Courier Oblique\r\nFamilyName Courier\r\nWeight Medium\r\nItalicAngle -12\r\nIsFixedPitch true\r\nCharacterSet ExtendedRoman\r\nFontBBox -27 -250 849 805 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 003.000\r\nNotice Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 562\r\nXHeight 426\r\nAscender 629\r\nDescender -157\r\nStdHW 51\r\nStdVW 51\r\nStartCharMetrics 315\r\nC 32 ; WX 600 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 600 ; N exclam ; B 243 -15 464 572 ;\r\nC 34 ; WX 600 ; N quotedbl ; B 273 328 532 562 ;\r\nC 35 ; WX 600 ; N numbersign ; B 133 -32 596 639 ;\r\nC 36 ; WX 600 ; N dollar ; B 108 -126 596 662 ;\r\nC 37 ; WX 600 ; N percent ; B 134 -15 599 622 ;\r\nC 38 ; WX 600 ; N ampersand ; B 87 -15 580 543 ;\r\nC 39 ; WX 600 ; N quoteright ; B 283 328 495 562 ;\r\nC 40 ; WX 600 ; N parenleft ; B 313 -108 572 622 ;\r\nC 41 ; WX 600 ; N parenright ; B 137 -108 396 622 ;\r\nC 42 ; WX 600 ; N asterisk ; B 212 257 580 607 ;\r\nC 43 ; WX 600 ; N plus ; B 129 44 580 470 ;\r\nC 44 ; WX 600 ; N comma ; B 157 -112 370 122 ;\r\nC 45 ; WX 600 ; N hyphen ; B 152 231 558 285 ;\r\nC 46 ; WX 600 ; N period ; B 238 -15 382 109 ;\r\nC 47 ; WX 600 ; N slash ; B 112 -80 604 629 ;\r\nC 48 ; WX 600 ; N zero ; B 154 -15 575 622 ;\r\nC 49 ; WX 600 ; N one ; B 98 0 515 622 ;\r\nC 50 ; WX 600 ; N two ; B 70 0 568 622 ;\r\nC 51 ; WX 600 ; N three ; B 82 -15 538 622 ;\r\nC 52 ; WX 600 ; N four ; B 108 0 541 622 ;\r\nC 53 ; WX 600 ; N five ; B 99 -15 589 607 ;\r\nC 54 ; WX 600 ; N six ; B 155 -15 629 622 ;\r\nC 55 ; WX 600 ; N seven ; B 182 0 612 607 ;\r\nC 56 ; WX 600 ; N eight ; B 132 -15 588 622 ;\r\nC 57 ; WX 600 ; N nine ; B 93 -15 574 622 ;\r\nC 58 ; WX 600 ; N colon ; B 238 -15 441 385 ;\r\nC 59 ; WX 600 ; N semicolon ; B 157 -112 441 385 ;\r\nC 60 ; WX 600 ; N less ; B 96 42 610 472 ;\r\nC 61 ; WX 600 ; N equal ; B 109 138 600 376 ;\r\nC 62 ; WX 600 ; N greater ; B 85 42 599 472 ;\r\nC 63 ; WX 600 ; N question ; B 222 -15 583 572 ;\r\nC 64 ; WX 600 ; N at ; B 127 -15 582 622 ;\r\nC 65 ; WX 600 ; N A ; B 3 0 607 562 ;\r\nC 66 ; WX 600 ; N B ; B 43 0 616 562 ;\r\nC 67 ; WX 600 ; N C ; B 93 -18 655 580 ;\r\nC 68 ; WX 600 ; N D ; B 43 0 645 562 ;\r\nC 69 ; WX 600 ; N E ; B 53 0 660 562 ;\r\nC 70 ; WX 600 ; N F ; B 53 0 660 562 ;\r\nC 71 ; WX 600 ; N G ; B 83 -18 645 580 ;\r\nC 72 ; WX 600 ; N H ; B 32 0 687 562 ;\r\nC 73 ; WX 600 ; N I ; B 96 0 623 562 ;\r\nC 74 ; WX 600 ; N J ; B 52 -18 685 562 ;\r\nC 75 ; WX 600 ; N K ; B 38 0 671 562 ;\r\nC 76 ; WX 600 ; N L ; B 47 0 607 562 ;\r\nC 77 ; WX 600 ; N M ; B 4 0 715 562 ;\r\nC 78 ; WX 600 ; N N ; B 7 -13 712 562 ;\r\nC 79 ; WX 600 ; N O ; B 94 -18 625 580 ;\r\nC 80 ; WX 600 ; N P ; B 79 0 644 562 ;\r\nC 81 ; WX 600 ; N Q ; B 95 -138 625 580 ;\r\nC 82 ; WX 600 ; N R ; B 38 0 598 562 ;\r\nC 83 ; WX 600 ; N S ; B 76 -20 650 580 ;\r\nC 84 ; WX 600 ; N T ; B 108 0 665 562 ;\r\nC 85 ; WX 600 ; N U ; B 125 -18 702 562 ;\r\nC 86 ; WX 600 ; N V ; B 105 -13 723 562 ;\r\nC 87 ; WX 600 ; N W ; B 106 -13 722 562 ;\r\nC 88 ; WX 600 ; N X ; B 23 0 675 562 ;\r\nC 89 ; WX 600 ; N Y ; B 133 0 695 562 ;\r\nC 90 ; WX 600 ; N Z ; B 86 0 610 562 ;\r\nC 91 ; WX 600 ; N bracketleft ; B 246 -108 574 622 ;\r\nC 92 ; WX 600 ; N backslash ; B 249 -80 468 629 ;\r\nC 93 ; WX 600 ; N bracketright ; B 135 -108 463 622 ;\r\nC 94 ; WX 600 ; N asciicircum ; B 175 354 587 622 ;\r\nC 95 ; WX 600 ; N underscore ; B -27 -125 584 -75 ;\r\nC 96 ; WX 600 ; N quoteleft ; B 343 328 457 562 ;\r\nC 97 ; WX 600 ; N a ; B 76 -15 569 441 ;\r\nC 98 ; WX 600 ; N b ; B 29 -15 625 629 ;\r\nC 99 ; WX 600 ; N c ; B 106 -15 608 441 ;\r\nC 100 ; WX 600 ; N d ; B 85 -15 640 629 ;\r\nC 101 ; WX 600 ; N e ; B 106 -15 598 441 ;\r\nC 102 ; WX 600 ; N f ; B 114 0 662 629 ; L i fi ; L l fl ;\r\nC 103 ; WX 600 ; N g ; B 61 -157 657 441 ;\r\nC 104 ; WX 600 ; N h ; B 33 0 592 629 ;\r\nC 105 ; WX 600 ; N i ; B 95 0 515 657 ;\r\nC 106 ; WX 600 ; N j ; B 52 -157 550 657 ;\r\nC 107 ; WX 600 ; N k ; B 58 0 633 629 ;\r\nC 108 ; WX 600 ; N l ; B 95 0 515 629 ;\r\nC 109 ; WX 600 ; N m ; B -5 0 615 441 ;\r\nC 110 ; WX 600 ; N n ; B 26 0 585 441 ;\r\nC 111 ; WX 600 ; N o ; B 102 -15 588 441 ;\r\nC 112 ; WX 600 ; N p ; B -24 -157 605 441 ;\r\nC 113 ; WX 600 ; N q ; B 85 -157 682 441 ;\r\nC 114 ; WX 600 ; N r ; B 60 0 636 441 ;\r\nC 115 ; WX 600 ; N s ; B 78 -15 584 441 ;\r\nC 116 ; WX 600 ; N t ; B 167 -15 561 561 ;\r\nC 117 ; WX 600 ; N u ; B 101 -15 572 426 ;\r\nC 118 ; WX 600 ; N v ; B 90 -10 681 426 ;\r\nC 119 ; WX 600 ; N w ; B 76 -10 695 426 ;\r\nC 120 ; WX 600 ; N x ; B 20 0 655 426 ;\r\nC 121 ; WX 600 ; N y ; B -4 -157 683 426 ;\r\nC 122 ; WX 600 ; N z ; B 99 0 593 426 ;\r\nC 123 ; WX 600 ; N braceleft ; B 233 -108 569 622 ;\r\nC 124 ; WX 600 ; N bar ; B 222 -250 485 750 ;\r\nC 125 ; WX 600 ; N braceright ; B 140 -108 477 622 ;\r\nC 126 ; WX 600 ; N asciitilde ; B 116 197 600 320 ;\r\nC 161 ; WX 600 ; N exclamdown ; B 225 -157 445 430 ;\r\nC 162 ; WX 600 ; N cent ; B 151 -49 588 614 ;\r\nC 163 ; WX 600 ; N sterling ; B 124 -21 621 611 ;\r\nC 164 ; WX 600 ; N fraction ; B 84 -57 646 665 ;\r\nC 165 ; WX 600 ; N yen ; B 120 0 693 562 ;\r\nC 166 ; WX 600 ; N florin ; B -26 -143 671 622 ;\r\nC 167 ; WX 600 ; N section ; B 104 -78 590 580 ;\r\nC 168 ; WX 600 ; N currency ; B 94 58 628 506 ;\r\nC 169 ; WX 600 ; N quotesingle ; B 345 328 460 562 ;\r\nC 170 ; WX 600 ; N quotedblleft ; B 262 328 541 562 ;\r\nC 171 ; WX 600 ; N guillemotleft ; B 92 70 652 446 ;\r\nC 172 ; WX 600 ; N guilsinglleft ; B 204 70 540 446 ;\r\nC 173 ; WX 600 ; N guilsinglright ; B 170 70 506 446 ;\r\nC 174 ; WX 600 ; N fi ; B 3 0 619 629 ;\r\nC 175 ; WX 600 ; N fl ; B 3 0 619 629 ;\r\nC 177 ; WX 600 ; N endash ; B 124 231 586 285 ;\r\nC 178 ; WX 600 ; N dagger ; B 217 -78 546 580 ;\r\nC 179 ; WX 600 ; N daggerdbl ; B 163 -78 546 580 ;\r\nC 180 ; WX 600 ; N periodcentered ; B 275 189 434 327 ;\r\nC 182 ; WX 600 ; N paragraph ; B 100 -78 630 562 ;\r\nC 183 ; WX 600 ; N bullet ; B 224 130 485 383 ;\r\nC 184 ; WX 600 ; N quotesinglbase ; B 185 -134 397 100 ;\r\nC 185 ; WX 600 ; N quotedblbase ; B 115 -134 478 100 ;\r\nC 186 ; WX 600 ; N quotedblright ; B 213 328 576 562 ;\r\nC 187 ; WX 600 ; N guillemotright ; B 58 70 618 446 ;\r\nC 188 ; WX 600 ; N ellipsis ; B 46 -15 575 111 ;\r\nC 189 ; WX 600 ; N perthousand ; B 59 -15 627 622 ;\r\nC 191 ; WX 600 ; N questiondown ; B 105 -157 466 430 ;\r\nC 193 ; WX 600 ; N grave ; B 294 497 484 672 ;\r\nC 194 ; WX 600 ; N acute ; B 348 497 612 672 ;\r\nC 195 ; WX 600 ; N circumflex ; B 229 477 581 654 ;\r\nC 196 ; WX 600 ; N tilde ; B 212 489 629 606 ;\r\nC 197 ; WX 600 ; N macron ; B 232 525 600 565 ;\r\nC 198 ; WX 600 ; N breve ; B 279 501 576 609 ;\r\nC 199 ; WX 600 ; N dotaccent ; B 373 537 478 640 ;\r\nC 200 ; WX 600 ; N dieresis ; B 272 537 579 640 ;\r\nC 202 ; WX 600 ; N ring ; B 332 463 500 627 ;\r\nC 203 ; WX 600 ; N cedilla ; B 197 -151 344 10 ;\r\nC 205 ; WX 600 ; N hungarumlaut ; B 239 497 683 672 ;\r\nC 206 ; WX 600 ; N ogonek ; B 189 -172 377 4 ;\r\nC 207 ; WX 600 ; N caron ; B 262 492 614 669 ;\r\nC 208 ; WX 600 ; N emdash ; B 49 231 661 285 ;\r\nC 225 ; WX 600 ; N AE ; B 3 0 655 562 ;\r\nC 227 ; WX 600 ; N ordfeminine ; B 209 249 512 580 ;\r\nC 232 ; WX 600 ; N Lslash ; B 47 0 607 562 ;\r\nC 233 ; WX 600 ; N Oslash ; B 94 -80 625 629 ;\r\nC 234 ; WX 600 ; N OE ; B 59 0 672 562 ;\r\nC 235 ; WX 600 ; N ordmasculine ; B 210 249 535 580 ;\r\nC 241 ; WX 600 ; N ae ; B 41 -15 626 441 ;\r\nC 245 ; WX 600 ; N dotlessi ; B 95 0 515 426 ;\r\nC 248 ; WX 600 ; N lslash ; B 95 0 587 629 ;\r\nC 249 ; WX 600 ; N oslash ; B 102 -80 588 506 ;\r\nC 250 ; WX 600 ; N oe ; B 54 -15 615 441 ;\r\nC 251 ; WX 600 ; N germandbls ; B 48 -15 617 629 ;\r\nC -1 ; WX 600 ; N Idieresis ; B 96 0 623 753 ;\r\nC -1 ; WX 600 ; N eacute ; B 106 -15 612 672 ;\r\nC -1 ; WX 600 ; N abreve ; B 76 -15 576 609 ;\r\nC -1 ; WX 600 ; N uhungarumlaut ; B 101 -15 723 672 ;\r\nC -1 ; WX 600 ; N ecaron ; B 106 -15 614 669 ;\r\nC -1 ; WX 600 ; N Ydieresis ; B 133 0 695 753 ;\r\nC -1 ; WX 600 ; N divide ; B 136 48 573 467 ;\r\nC -1 ; WX 600 ; N Yacute ; B 133 0 695 805 ;\r\nC -1 ; WX 600 ; N Acircumflex ; B 3 0 607 787 ;\r\nC -1 ; WX 600 ; N aacute ; B 76 -15 612 672 ;\r\nC -1 ; WX 600 ; N Ucircumflex ; B 125 -18 702 787 ;\r\nC -1 ; WX 600 ; N yacute ; B -4 -157 683 672 ;\r\nC -1 ; WX 600 ; N scommaaccent ; B 78 -250 584 441 ;\r\nC -1 ; WX 600 ; N ecircumflex ; B 106 -15 598 654 ;\r\nC -1 ; WX 600 ; N Uring ; B 125 -18 702 760 ;\r\nC -1 ; WX 600 ; N Udieresis ; B 125 -18 702 753 ;\r\nC -1 ; WX 600 ; N aogonek ; B 76 -172 569 441 ;\r\nC -1 ; WX 600 ; N Uacute ; B 125 -18 702 805 ;\r\nC -1 ; WX 600 ; N uogonek ; B 101 -172 572 426 ;\r\nC -1 ; WX 600 ; N Edieresis ; B 53 0 660 753 ;\r\nC -1 ; WX 600 ; N Dcroat ; B 43 0 645 562 ;\r\nC -1 ; WX 600 ; N commaaccent ; B 145 -250 323 -58 ;\r\nC -1 ; WX 600 ; N copyright ; B 53 -18 667 580 ;\r\nC -1 ; WX 600 ; N Emacron ; B 53 0 660 698 ;\r\nC -1 ; WX 600 ; N ccaron ; B 106 -15 614 669 ;\r\nC -1 ; WX 600 ; N aring ; B 76 -15 569 627 ;\r\nC -1 ; WX 600 ; N Ncommaaccent ; B 7 -250 712 562 ;\r\nC -1 ; WX 600 ; N lacute ; B 95 0 640 805 ;\r\nC -1 ; WX 600 ; N agrave ; B 76 -15 569 672 ;\r\nC -1 ; WX 600 ; N Tcommaaccent ; B 108 -250 665 562 ;\r\nC -1 ; WX 600 ; N Cacute ; B 93 -18 655 805 ;\r\nC -1 ; WX 600 ; N atilde ; B 76 -15 629 606 ;\r\nC -1 ; WX 600 ; N Edotaccent ; B 53 0 660 753 ;\r\nC -1 ; WX 600 ; N scaron ; B 78 -15 614 669 ;\r\nC -1 ; WX 600 ; N scedilla ; B 78 -151 584 441 ;\r\nC -1 ; WX 600 ; N iacute ; B 95 0 612 672 ;\r\nC -1 ; WX 600 ; N lozenge ; B 94 0 519 706 ;\r\nC -1 ; WX 600 ; N Rcaron ; B 38 0 642 802 ;\r\nC -1 ; WX 600 ; N Gcommaaccent ; B 83 -250 645 580 ;\r\nC -1 ; WX 600 ; N ucircumflex ; B 101 -15 572 654 ;\r\nC -1 ; WX 600 ; N acircumflex ; B 76 -15 581 654 ;\r\nC -1 ; WX 600 ; N Amacron ; B 3 0 607 698 ;\r\nC -1 ; WX 600 ; N rcaron ; B 60 0 636 669 ;\r\nC -1 ; WX 600 ; N ccedilla ; B 106 -151 614 441 ;\r\nC -1 ; WX 600 ; N Zdotaccent ; B 86 0 610 753 ;\r\nC -1 ; WX 600 ; N Thorn ; B 79 0 606 562 ;\r\nC -1 ; WX 600 ; N Omacron ; B 94 -18 628 698 ;\r\nC -1 ; WX 600 ; N Racute ; B 38 0 670 805 ;\r\nC -1 ; WX 600 ; N Sacute ; B 76 -20 650 805 ;\r\nC -1 ; WX 600 ; N dcaron ; B 85 -15 849 629 ;\r\nC -1 ; WX 600 ; N Umacron ; B 125 -18 702 698 ;\r\nC -1 ; WX 600 ; N uring ; B 101 -15 572 627 ;\r\nC -1 ; WX 600 ; N threesuperior ; B 213 240 501 622 ;\r\nC -1 ; WX 600 ; N Ograve ; B 94 -18 625 805 ;\r\nC -1 ; WX 600 ; N Agrave ; B 3 0 607 805 ;\r\nC -1 ; WX 600 ; N Abreve ; B 3 0 607 732 ;\r\nC -1 ; WX 600 ; N multiply ; B 103 43 607 470 ;\r\nC -1 ; WX 600 ; N uacute ; B 101 -15 602 672 ;\r\nC -1 ; WX 600 ; N Tcaron ; B 108 0 665 802 ;\r\nC -1 ; WX 600 ; N partialdiff ; B 45 -38 546 710 ;\r\nC -1 ; WX 600 ; N ydieresis ; B -4 -157 683 620 ;\r\nC -1 ; WX 600 ; N Nacute ; B 7 -13 712 805 ;\r\nC -1 ; WX 600 ; N icircumflex ; B 95 0 551 654 ;\r\nC -1 ; WX 600 ; N Ecircumflex ; B 53 0 660 787 ;\r\nC -1 ; WX 600 ; N adieresis ; B 76 -15 575 620 ;\r\nC -1 ; WX 600 ; N edieresis ; B 106 -15 598 620 ;\r\nC -1 ; WX 600 ; N cacute ; B 106 -15 612 672 ;\r\nC -1 ; WX 600 ; N nacute ; B 26 0 602 672 ;\r\nC -1 ; WX 600 ; N umacron ; B 101 -15 600 565 ;\r\nC -1 ; WX 600 ; N Ncaron ; B 7 -13 712 802 ;\r\nC -1 ; WX 600 ; N Iacute ; B 96 0 640 805 ;\r\nC -1 ; WX 600 ; N plusminus ; B 96 44 594 558 ;\r\nC -1 ; WX 600 ; N brokenbar ; B 238 -175 469 675 ;\r\nC -1 ; WX 600 ; N registered ; B 53 -18 667 580 ;\r\nC -1 ; WX 600 ; N Gbreve ; B 83 -18 645 732 ;\r\nC -1 ; WX 600 ; N Idotaccent ; B 96 0 623 753 ;\r\nC -1 ; WX 600 ; N summation ; B 15 -10 670 706 ;\r\nC -1 ; WX 600 ; N Egrave ; B 53 0 660 805 ;\r\nC -1 ; WX 600 ; N racute ; B 60 0 636 672 ;\r\nC -1 ; WX 600 ; N omacron ; B 102 -15 600 565 ;\r\nC -1 ; WX 600 ; N Zacute ; B 86 0 670 805 ;\r\nC -1 ; WX 600 ; N Zcaron ; B 86 0 642 802 ;\r\nC -1 ; WX 600 ; N greaterequal ; B 98 0 594 710 ;\r\nC -1 ; WX 600 ; N Eth ; B 43 0 645 562 ;\r\nC -1 ; WX 600 ; N Ccedilla ; B 93 -151 658 580 ;\r\nC -1 ; WX 600 ; N lcommaaccent ; B 95 -250 515 629 ;\r\nC -1 ; WX 600 ; N tcaron ; B 167 -15 587 717 ;\r\nC -1 ; WX 600 ; N eogonek ; B 106 -172 598 441 ;\r\nC -1 ; WX 600 ; N Uogonek ; B 124 -172 702 562 ;\r\nC -1 ; WX 600 ; N Aacute ; B 3 0 660 805 ;\r\nC -1 ; WX 600 ; N Adieresis ; B 3 0 607 753 ;\r\nC -1 ; WX 600 ; N egrave ; B 106 -15 598 672 ;\r\nC -1 ; WX 600 ; N zacute ; B 99 0 612 672 ;\r\nC -1 ; WX 600 ; N iogonek ; B 95 -172 515 657 ;\r\nC -1 ; WX 600 ; N Oacute ; B 94 -18 640 805 ;\r\nC -1 ; WX 600 ; N oacute ; B 102 -15 612 672 ;\r\nC -1 ; WX 600 ; N amacron ; B 76 -15 600 565 ;\r\nC -1 ; WX 600 ; N sacute ; B 78 -15 612 672 ;\r\nC -1 ; WX 600 ; N idieresis ; B 95 0 545 620 ;\r\nC -1 ; WX 600 ; N Ocircumflex ; B 94 -18 625 787 ;\r\nC -1 ; WX 600 ; N Ugrave ; B 125 -18 702 805 ;\r\nC -1 ; WX 600 ; N Delta ; B 6 0 598 688 ;\r\nC -1 ; WX 600 ; N thorn ; B -24 -157 605 629 ;\r\nC -1 ; WX 600 ; N twosuperior ; B 230 249 535 622 ;\r\nC -1 ; WX 600 ; N Odieresis ; B 94 -18 625 753 ;\r\nC -1 ; WX 600 ; N mu ; B 72 -157 572 426 ;\r\nC -1 ; WX 600 ; N igrave ; B 95 0 515 672 ;\r\nC -1 ; WX 600 ; N ohungarumlaut ; B 102 -15 723 672 ;\r\nC -1 ; WX 600 ; N Eogonek ; B 53 -172 660 562 ;\r\nC -1 ; WX 600 ; N dcroat ; B 85 -15 704 629 ;\r\nC -1 ; WX 600 ; N threequarters ; B 73 -56 659 666 ;\r\nC -1 ; WX 600 ; N Scedilla ; B 76 -151 650 580 ;\r\nC -1 ; WX 600 ; N lcaron ; B 95 0 667 629 ;\r\nC -1 ; WX 600 ; N Kcommaaccent ; B 38 -250 671 562 ;\r\nC -1 ; WX 600 ; N Lacute ; B 47 0 607 805 ;\r\nC -1 ; WX 600 ; N trademark ; B 75 263 742 562 ;\r\nC -1 ; WX 600 ; N edotaccent ; B 106 -15 598 620 ;\r\nC -1 ; WX 600 ; N Igrave ; B 96 0 623 805 ;\r\nC -1 ; WX 600 ; N Imacron ; B 96 0 628 698 ;\r\nC -1 ; WX 600 ; N Lcaron ; B 47 0 632 562 ;\r\nC -1 ; WX 600 ; N onehalf ; B 65 -57 669 665 ;\r\nC -1 ; WX 600 ; N lessequal ; B 98 0 645 710 ;\r\nC -1 ; WX 600 ; N ocircumflex ; B 102 -15 588 654 ;\r\nC -1 ; WX 600 ; N ntilde ; B 26 0 629 606 ;\r\nC -1 ; WX 600 ; N Uhungarumlaut ; B 125 -18 761 805 ;\r\nC -1 ; WX 600 ; N Eacute ; B 53 0 670 805 ;\r\nC -1 ; WX 600 ; N emacron ; B 106 -15 600 565 ;\r\nC -1 ; WX 600 ; N gbreve ; B 61 -157 657 609 ;\r\nC -1 ; WX 600 ; N onequarter ; B 65 -57 674 665 ;\r\nC -1 ; WX 600 ; N Scaron ; B 76 -20 672 802 ;\r\nC -1 ; WX 600 ; N Scommaaccent ; B 76 -250 650 580 ;\r\nC -1 ; WX 600 ; N Ohungarumlaut ; B 94 -18 751 805 ;\r\nC -1 ; WX 600 ; N degree ; B 214 269 576 622 ;\r\nC -1 ; WX 600 ; N ograve ; B 102 -15 588 672 ;\r\nC -1 ; WX 600 ; N Ccaron ; B 93 -18 672 802 ;\r\nC -1 ; WX 600 ; N ugrave ; B 101 -15 572 672 ;\r\nC -1 ; WX 600 ; N radical ; B 85 -15 765 792 ;\r\nC -1 ; WX 600 ; N Dcaron ; B 43 0 645 802 ;\r\nC -1 ; WX 600 ; N rcommaaccent ; B 60 -250 636 441 ;\r\nC -1 ; WX 600 ; N Ntilde ; B 7 -13 712 729 ;\r\nC -1 ; WX 600 ; N otilde ; B 102 -15 629 606 ;\r\nC -1 ; WX 600 ; N Rcommaaccent ; B 38 -250 598 562 ;\r\nC -1 ; WX 600 ; N Lcommaaccent ; B 47 -250 607 562 ;\r\nC -1 ; WX 600 ; N Atilde ; B 3 0 655 729 ;\r\nC -1 ; WX 600 ; N Aogonek ; B 3 -172 607 562 ;\r\nC -1 ; WX 600 ; N Aring ; B 3 0 607 750 ;\r\nC -1 ; WX 600 ; N Otilde ; B 94 -18 655 729 ;\r\nC -1 ; WX 600 ; N zdotaccent ; B 99 0 593 620 ;\r\nC -1 ; WX 600 ; N Ecaron ; B 53 0 660 802 ;\r\nC -1 ; WX 600 ; N Iogonek ; B 96 -172 623 562 ;\r\nC -1 ; WX 600 ; N kcommaaccent ; B 58 -250 633 629 ;\r\nC -1 ; WX 600 ; N minus ; B 129 232 580 283 ;\r\nC -1 ; WX 600 ; N Icircumflex ; B 96 0 623 787 ;\r\nC -1 ; WX 600 ; N ncaron ; B 26 0 614 669 ;\r\nC -1 ; WX 600 ; N tcommaaccent ; B 165 -250 561 561 ;\r\nC -1 ; WX 600 ; N logicalnot ; B 155 108 591 369 ;\r\nC -1 ; WX 600 ; N odieresis ; B 102 -15 588 620 ;\r\nC -1 ; WX 600 ; N udieresis ; B 101 -15 575 620 ;\r\nC -1 ; WX 600 ; N notequal ; B 43 -16 621 529 ;\r\nC -1 ; WX 600 ; N gcommaaccent ; B 61 -157 657 708 ;\r\nC -1 ; WX 600 ; N eth ; B 102 -15 639 629 ;\r\nC -1 ; WX 600 ; N zcaron ; B 99 0 624 669 ;\r\nC -1 ; WX 600 ; N ncommaaccent ; B 26 -250 585 441 ;\r\nC -1 ; WX 600 ; N onesuperior ; B 231 249 491 622 ;\r\nC -1 ; WX 600 ; N imacron ; B 95 0 543 565 ;\r\nC -1 ; WX 600 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nEndFontMetrics\r\n";
2478 },
2479 'Courier-BoldOblique'() {
2480 return "StartFontMetrics 4.1\r\nComment Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Mon Jun 23 16:28:46 1997\r\nComment UniqueID 43049\r\nComment VMusage 17529 79244\r\nFontName Courier-BoldOblique\r\nFullName Courier Bold Oblique\r\nFamilyName Courier\r\nWeight Bold\r\nItalicAngle -12\r\nIsFixedPitch true\r\nCharacterSet ExtendedRoman\r\nFontBBox -57 -250 869 801 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 003.000\r\nNotice Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 562\r\nXHeight 439\r\nAscender 629\r\nDescender -157\r\nStdHW 84\r\nStdVW 106\r\nStartCharMetrics 315\r\nC 32 ; WX 600 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 600 ; N exclam ; B 215 -15 495 572 ;\r\nC 34 ; WX 600 ; N quotedbl ; B 211 277 585 562 ;\r\nC 35 ; WX 600 ; N numbersign ; B 88 -45 641 651 ;\r\nC 36 ; WX 600 ; N dollar ; B 87 -126 630 666 ;\r\nC 37 ; WX 600 ; N percent ; B 101 -15 625 616 ;\r\nC 38 ; WX 600 ; N ampersand ; B 61 -15 595 543 ;\r\nC 39 ; WX 600 ; N quoteright ; B 229 277 543 562 ;\r\nC 40 ; WX 600 ; N parenleft ; B 265 -102 592 616 ;\r\nC 41 ; WX 600 ; N parenright ; B 117 -102 444 616 ;\r\nC 42 ; WX 600 ; N asterisk ; B 179 219 598 601 ;\r\nC 43 ; WX 600 ; N plus ; B 114 39 596 478 ;\r\nC 44 ; WX 600 ; N comma ; B 99 -111 430 174 ;\r\nC 45 ; WX 600 ; N hyphen ; B 143 203 567 313 ;\r\nC 46 ; WX 600 ; N period ; B 206 -15 427 171 ;\r\nC 47 ; WX 600 ; N slash ; B 90 -77 626 626 ;\r\nC 48 ; WX 600 ; N zero ; B 135 -15 593 616 ;\r\nC 49 ; WX 600 ; N one ; B 93 0 562 616 ;\r\nC 50 ; WX 600 ; N two ; B 61 0 594 616 ;\r\nC 51 ; WX 600 ; N three ; B 71 -15 571 616 ;\r\nC 52 ; WX 600 ; N four ; B 81 0 559 616 ;\r\nC 53 ; WX 600 ; N five ; B 77 -15 621 601 ;\r\nC 54 ; WX 600 ; N six ; B 135 -15 652 616 ;\r\nC 55 ; WX 600 ; N seven ; B 147 0 622 601 ;\r\nC 56 ; WX 600 ; N eight ; B 115 -15 604 616 ;\r\nC 57 ; WX 600 ; N nine ; B 75 -15 592 616 ;\r\nC 58 ; WX 600 ; N colon ; B 205 -15 480 425 ;\r\nC 59 ; WX 600 ; N semicolon ; B 99 -111 481 425 ;\r\nC 60 ; WX 600 ; N less ; B 120 15 613 501 ;\r\nC 61 ; WX 600 ; N equal ; B 96 118 614 398 ;\r\nC 62 ; WX 600 ; N greater ; B 97 15 589 501 ;\r\nC 63 ; WX 600 ; N question ; B 183 -14 592 580 ;\r\nC 64 ; WX 600 ; N at ; B 65 -15 642 616 ;\r\nC 65 ; WX 600 ; N A ; B -9 0 632 562 ;\r\nC 66 ; WX 600 ; N B ; B 30 0 630 562 ;\r\nC 67 ; WX 600 ; N C ; B 74 -18 675 580 ;\r\nC 68 ; WX 600 ; N D ; B 30 0 664 562 ;\r\nC 69 ; WX 600 ; N E ; B 25 0 670 562 ;\r\nC 70 ; WX 600 ; N F ; B 39 0 684 562 ;\r\nC 71 ; WX 600 ; N G ; B 74 -18 675 580 ;\r\nC 72 ; WX 600 ; N H ; B 20 0 700 562 ;\r\nC 73 ; WX 600 ; N I ; B 77 0 643 562 ;\r\nC 74 ; WX 600 ; N J ; B 58 -18 721 562 ;\r\nC 75 ; WX 600 ; N K ; B 21 0 692 562 ;\r\nC 76 ; WX 600 ; N L ; B 39 0 636 562 ;\r\nC 77 ; WX 600 ; N M ; B -2 0 722 562 ;\r\nC 78 ; WX 600 ; N N ; B 8 -12 730 562 ;\r\nC 79 ; WX 600 ; N O ; B 74 -18 645 580 ;\r\nC 80 ; WX 600 ; N P ; B 48 0 643 562 ;\r\nC 81 ; WX 600 ; N Q ; B 83 -138 636 580 ;\r\nC 82 ; WX 600 ; N R ; B 24 0 617 562 ;\r\nC 83 ; WX 600 ; N S ; B 54 -22 673 582 ;\r\nC 84 ; WX 600 ; N T ; B 86 0 679 562 ;\r\nC 85 ; WX 600 ; N U ; B 101 -18 716 562 ;\r\nC 86 ; WX 600 ; N V ; B 84 0 733 562 ;\r\nC 87 ; WX 600 ; N W ; B 79 0 738 562 ;\r\nC 88 ; WX 600 ; N X ; B 12 0 690 562 ;\r\nC 89 ; WX 600 ; N Y ; B 109 0 709 562 ;\r\nC 90 ; WX 600 ; N Z ; B 62 0 637 562 ;\r\nC 91 ; WX 600 ; N bracketleft ; B 223 -102 606 616 ;\r\nC 92 ; WX 600 ; N backslash ; B 222 -77 496 626 ;\r\nC 93 ; WX 600 ; N bracketright ; B 103 -102 486 616 ;\r\nC 94 ; WX 600 ; N asciicircum ; B 171 250 556 616 ;\r\nC 95 ; WX 600 ; N underscore ; B -27 -125 585 -75 ;\r\nC 96 ; WX 600 ; N quoteleft ; B 297 277 487 562 ;\r\nC 97 ; WX 600 ; N a ; B 61 -15 593 454 ;\r\nC 98 ; WX 600 ; N b ; B 13 -15 636 626 ;\r\nC 99 ; WX 600 ; N c ; B 81 -15 631 459 ;\r\nC 100 ; WX 600 ; N d ; B 60 -15 645 626 ;\r\nC 101 ; WX 600 ; N e ; B 81 -15 605 454 ;\r\nC 102 ; WX 600 ; N f ; B 83 0 677 626 ; L i fi ; L l fl ;\r\nC 103 ; WX 600 ; N g ; B 40 -146 674 454 ;\r\nC 104 ; WX 600 ; N h ; B 18 0 615 626 ;\r\nC 105 ; WX 600 ; N i ; B 77 0 546 658 ;\r\nC 106 ; WX 600 ; N j ; B 36 -146 580 658 ;\r\nC 107 ; WX 600 ; N k ; B 33 0 643 626 ;\r\nC 108 ; WX 600 ; N l ; B 77 0 546 626 ;\r\nC 109 ; WX 600 ; N m ; B -22 0 649 454 ;\r\nC 110 ; WX 600 ; N n ; B 18 0 615 454 ;\r\nC 111 ; WX 600 ; N o ; B 71 -15 622 454 ;\r\nC 112 ; WX 600 ; N p ; B -32 -142 622 454 ;\r\nC 113 ; WX 600 ; N q ; B 60 -142 685 454 ;\r\nC 114 ; WX 600 ; N r ; B 47 0 655 454 ;\r\nC 115 ; WX 600 ; N s ; B 66 -17 608 459 ;\r\nC 116 ; WX 600 ; N t ; B 118 -15 567 562 ;\r\nC 117 ; WX 600 ; N u ; B 70 -15 592 439 ;\r\nC 118 ; WX 600 ; N v ; B 70 0 695 439 ;\r\nC 119 ; WX 600 ; N w ; B 53 0 712 439 ;\r\nC 120 ; WX 600 ; N x ; B 6 0 671 439 ;\r\nC 121 ; WX 600 ; N y ; B -21 -142 695 439 ;\r\nC 122 ; WX 600 ; N z ; B 81 0 614 439 ;\r\nC 123 ; WX 600 ; N braceleft ; B 203 -102 595 616 ;\r\nC 124 ; WX 600 ; N bar ; B 201 -250 505 750 ;\r\nC 125 ; WX 600 ; N braceright ; B 114 -102 506 616 ;\r\nC 126 ; WX 600 ; N asciitilde ; B 120 153 590 356 ;\r\nC 161 ; WX 600 ; N exclamdown ; B 196 -146 477 449 ;\r\nC 162 ; WX 600 ; N cent ; B 121 -49 605 614 ;\r\nC 163 ; WX 600 ; N sterling ; B 106 -28 650 611 ;\r\nC 164 ; WX 600 ; N fraction ; B 22 -60 708 661 ;\r\nC 165 ; WX 600 ; N yen ; B 98 0 710 562 ;\r\nC 166 ; WX 600 ; N florin ; B -57 -131 702 616 ;\r\nC 167 ; WX 600 ; N section ; B 74 -70 620 580 ;\r\nC 168 ; WX 600 ; N currency ; B 77 49 644 517 ;\r\nC 169 ; WX 600 ; N quotesingle ; B 303 277 493 562 ;\r\nC 170 ; WX 600 ; N quotedblleft ; B 190 277 594 562 ;\r\nC 171 ; WX 600 ; N guillemotleft ; B 62 70 639 446 ;\r\nC 172 ; WX 600 ; N guilsinglleft ; B 195 70 545 446 ;\r\nC 173 ; WX 600 ; N guilsinglright ; B 165 70 514 446 ;\r\nC 174 ; WX 600 ; N fi ; B 12 0 644 626 ;\r\nC 175 ; WX 600 ; N fl ; B 12 0 644 626 ;\r\nC 177 ; WX 600 ; N endash ; B 108 203 602 313 ;\r\nC 178 ; WX 600 ; N dagger ; B 175 -70 586 580 ;\r\nC 179 ; WX 600 ; N daggerdbl ; B 121 -70 587 580 ;\r\nC 180 ; WX 600 ; N periodcentered ; B 248 165 461 351 ;\r\nC 182 ; WX 600 ; N paragraph ; B 61 -70 700 580 ;\r\nC 183 ; WX 600 ; N bullet ; B 196 132 523 430 ;\r\nC 184 ; WX 600 ; N quotesinglbase ; B 144 -142 458 143 ;\r\nC 185 ; WX 600 ; N quotedblbase ; B 34 -142 560 143 ;\r\nC 186 ; WX 600 ; N quotedblright ; B 119 277 645 562 ;\r\nC 187 ; WX 600 ; N guillemotright ; B 71 70 647 446 ;\r\nC 188 ; WX 600 ; N ellipsis ; B 35 -15 587 116 ;\r\nC 189 ; WX 600 ; N perthousand ; B -45 -15 743 616 ;\r\nC 191 ; WX 600 ; N questiondown ; B 100 -146 509 449 ;\r\nC 193 ; WX 600 ; N grave ; B 272 508 503 661 ;\r\nC 194 ; WX 600 ; N acute ; B 312 508 609 661 ;\r\nC 195 ; WX 600 ; N circumflex ; B 212 483 607 657 ;\r\nC 196 ; WX 600 ; N tilde ; B 199 493 643 636 ;\r\nC 197 ; WX 600 ; N macron ; B 195 505 637 585 ;\r\nC 198 ; WX 600 ; N breve ; B 217 468 652 631 ;\r\nC 199 ; WX 600 ; N dotaccent ; B 348 498 493 638 ;\r\nC 200 ; WX 600 ; N dieresis ; B 246 498 595 638 ;\r\nC 202 ; WX 600 ; N ring ; B 319 481 528 678 ;\r\nC 203 ; WX 600 ; N cedilla ; B 168 -206 368 0 ;\r\nC 205 ; WX 600 ; N hungarumlaut ; B 171 488 729 661 ;\r\nC 206 ; WX 600 ; N ogonek ; B 143 -199 367 0 ;\r\nC 207 ; WX 600 ; N caron ; B 238 493 633 667 ;\r\nC 208 ; WX 600 ; N emdash ; B 33 203 677 313 ;\r\nC 225 ; WX 600 ; N AE ; B -29 0 708 562 ;\r\nC 227 ; WX 600 ; N ordfeminine ; B 188 196 526 580 ;\r\nC 232 ; WX 600 ; N Lslash ; B 39 0 636 562 ;\r\nC 233 ; WX 600 ; N Oslash ; B 48 -22 673 584 ;\r\nC 234 ; WX 600 ; N OE ; B 26 0 701 562 ;\r\nC 235 ; WX 600 ; N ordmasculine ; B 188 196 543 580 ;\r\nC 241 ; WX 600 ; N ae ; B 21 -15 652 454 ;\r\nC 245 ; WX 600 ; N dotlessi ; B 77 0 546 439 ;\r\nC 248 ; WX 600 ; N lslash ; B 77 0 587 626 ;\r\nC 249 ; WX 600 ; N oslash ; B 54 -24 638 463 ;\r\nC 250 ; WX 600 ; N oe ; B 18 -15 662 454 ;\r\nC 251 ; WX 600 ; N germandbls ; B 22 -15 629 626 ;\r\nC -1 ; WX 600 ; N Idieresis ; B 77 0 643 761 ;\r\nC -1 ; WX 600 ; N eacute ; B 81 -15 609 661 ;\r\nC -1 ; WX 600 ; N abreve ; B 61 -15 658 661 ;\r\nC -1 ; WX 600 ; N uhungarumlaut ; B 70 -15 769 661 ;\r\nC -1 ; WX 600 ; N ecaron ; B 81 -15 633 667 ;\r\nC -1 ; WX 600 ; N Ydieresis ; B 109 0 709 761 ;\r\nC -1 ; WX 600 ; N divide ; B 114 16 596 500 ;\r\nC -1 ; WX 600 ; N Yacute ; B 109 0 709 784 ;\r\nC -1 ; WX 600 ; N Acircumflex ; B -9 0 632 780 ;\r\nC -1 ; WX 600 ; N aacute ; B 61 -15 609 661 ;\r\nC -1 ; WX 600 ; N Ucircumflex ; B 101 -18 716 780 ;\r\nC -1 ; WX 600 ; N yacute ; B -21 -142 695 661 ;\r\nC -1 ; WX 600 ; N scommaaccent ; B 66 -250 608 459 ;\r\nC -1 ; WX 600 ; N ecircumflex ; B 81 -15 607 657 ;\r\nC -1 ; WX 600 ; N Uring ; B 101 -18 716 801 ;\r\nC -1 ; WX 600 ; N Udieresis ; B 101 -18 716 761 ;\r\nC -1 ; WX 600 ; N aogonek ; B 61 -199 593 454 ;\r\nC -1 ; WX 600 ; N Uacute ; B 101 -18 716 784 ;\r\nC -1 ; WX 600 ; N uogonek ; B 70 -199 592 439 ;\r\nC -1 ; WX 600 ; N Edieresis ; B 25 0 670 761 ;\r\nC -1 ; WX 600 ; N Dcroat ; B 30 0 664 562 ;\r\nC -1 ; WX 600 ; N commaaccent ; B 151 -250 385 -57 ;\r\nC -1 ; WX 600 ; N copyright ; B 53 -18 667 580 ;\r\nC -1 ; WX 600 ; N Emacron ; B 25 0 670 708 ;\r\nC -1 ; WX 600 ; N ccaron ; B 81 -15 633 667 ;\r\nC -1 ; WX 600 ; N aring ; B 61 -15 593 678 ;\r\nC -1 ; WX 600 ; N Ncommaaccent ; B 8 -250 730 562 ;\r\nC -1 ; WX 600 ; N lacute ; B 77 0 639 801 ;\r\nC -1 ; WX 600 ; N agrave ; B 61 -15 593 661 ;\r\nC -1 ; WX 600 ; N Tcommaaccent ; B 86 -250 679 562 ;\r\nC -1 ; WX 600 ; N Cacute ; B 74 -18 675 784 ;\r\nC -1 ; WX 600 ; N atilde ; B 61 -15 643 636 ;\r\nC -1 ; WX 600 ; N Edotaccent ; B 25 0 670 761 ;\r\nC -1 ; WX 600 ; N scaron ; B 66 -17 633 667 ;\r\nC -1 ; WX 600 ; N scedilla ; B 66 -206 608 459 ;\r\nC -1 ; WX 600 ; N iacute ; B 77 0 609 661 ;\r\nC -1 ; WX 600 ; N lozenge ; B 145 0 614 740 ;\r\nC -1 ; WX 600 ; N Rcaron ; B 24 0 659 790 ;\r\nC -1 ; WX 600 ; N Gcommaaccent ; B 74 -250 675 580 ;\r\nC -1 ; WX 600 ; N ucircumflex ; B 70 -15 597 657 ;\r\nC -1 ; WX 600 ; N acircumflex ; B 61 -15 607 657 ;\r\nC -1 ; WX 600 ; N Amacron ; B -9 0 633 708 ;\r\nC -1 ; WX 600 ; N rcaron ; B 47 0 655 667 ;\r\nC -1 ; WX 600 ; N ccedilla ; B 81 -206 631 459 ;\r\nC -1 ; WX 600 ; N Zdotaccent ; B 62 0 637 761 ;\r\nC -1 ; WX 600 ; N Thorn ; B 48 0 620 562 ;\r\nC -1 ; WX 600 ; N Omacron ; B 74 -18 663 708 ;\r\nC -1 ; WX 600 ; N Racute ; B 24 0 665 784 ;\r\nC -1 ; WX 600 ; N Sacute ; B 54 -22 673 784 ;\r\nC -1 ; WX 600 ; N dcaron ; B 60 -15 861 626 ;\r\nC -1 ; WX 600 ; N Umacron ; B 101 -18 716 708 ;\r\nC -1 ; WX 600 ; N uring ; B 70 -15 592 678 ;\r\nC -1 ; WX 600 ; N threesuperior ; B 193 222 526 616 ;\r\nC -1 ; WX 600 ; N Ograve ; B 74 -18 645 784 ;\r\nC -1 ; WX 600 ; N Agrave ; B -9 0 632 784 ;\r\nC -1 ; WX 600 ; N Abreve ; B -9 0 684 784 ;\r\nC -1 ; WX 600 ; N multiply ; B 104 39 606 478 ;\r\nC -1 ; WX 600 ; N uacute ; B 70 -15 599 661 ;\r\nC -1 ; WX 600 ; N Tcaron ; B 86 0 679 790 ;\r\nC -1 ; WX 600 ; N partialdiff ; B 91 -38 627 728 ;\r\nC -1 ; WX 600 ; N ydieresis ; B -21 -142 695 638 ;\r\nC -1 ; WX 600 ; N Nacute ; B 8 -12 730 784 ;\r\nC -1 ; WX 600 ; N icircumflex ; B 77 0 577 657 ;\r\nC -1 ; WX 600 ; N Ecircumflex ; B 25 0 670 780 ;\r\nC -1 ; WX 600 ; N adieresis ; B 61 -15 595 638 ;\r\nC -1 ; WX 600 ; N edieresis ; B 81 -15 605 638 ;\r\nC -1 ; WX 600 ; N cacute ; B 81 -15 649 661 ;\r\nC -1 ; WX 600 ; N nacute ; B 18 0 639 661 ;\r\nC -1 ; WX 600 ; N umacron ; B 70 -15 637 585 ;\r\nC -1 ; WX 600 ; N Ncaron ; B 8 -12 730 790 ;\r\nC -1 ; WX 600 ; N Iacute ; B 77 0 643 784 ;\r\nC -1 ; WX 600 ; N plusminus ; B 76 24 614 515 ;\r\nC -1 ; WX 600 ; N brokenbar ; B 217 -175 489 675 ;\r\nC -1 ; WX 600 ; N registered ; B 53 -18 667 580 ;\r\nC -1 ; WX 600 ; N Gbreve ; B 74 -18 684 784 ;\r\nC -1 ; WX 600 ; N Idotaccent ; B 77 0 643 761 ;\r\nC -1 ; WX 600 ; N summation ; B 15 -10 672 706 ;\r\nC -1 ; WX 600 ; N Egrave ; B 25 0 670 784 ;\r\nC -1 ; WX 600 ; N racute ; B 47 0 655 661 ;\r\nC -1 ; WX 600 ; N omacron ; B 71 -15 637 585 ;\r\nC -1 ; WX 600 ; N Zacute ; B 62 0 665 784 ;\r\nC -1 ; WX 600 ; N Zcaron ; B 62 0 659 790 ;\r\nC -1 ; WX 600 ; N greaterequal ; B 26 0 627 696 ;\r\nC -1 ; WX 600 ; N Eth ; B 30 0 664 562 ;\r\nC -1 ; WX 600 ; N Ccedilla ; B 74 -206 675 580 ;\r\nC -1 ; WX 600 ; N lcommaaccent ; B 77 -250 546 626 ;\r\nC -1 ; WX 600 ; N tcaron ; B 118 -15 627 703 ;\r\nC -1 ; WX 600 ; N eogonek ; B 81 -199 605 454 ;\r\nC -1 ; WX 600 ; N Uogonek ; B 101 -199 716 562 ;\r\nC -1 ; WX 600 ; N Aacute ; B -9 0 655 784 ;\r\nC -1 ; WX 600 ; N Adieresis ; B -9 0 632 761 ;\r\nC -1 ; WX 600 ; N egrave ; B 81 -15 605 661 ;\r\nC -1 ; WX 600 ; N zacute ; B 81 0 614 661 ;\r\nC -1 ; WX 600 ; N iogonek ; B 77 -199 546 658 ;\r\nC -1 ; WX 600 ; N Oacute ; B 74 -18 645 784 ;\r\nC -1 ; WX 600 ; N oacute ; B 71 -15 649 661 ;\r\nC -1 ; WX 600 ; N amacron ; B 61 -15 637 585 ;\r\nC -1 ; WX 600 ; N sacute ; B 66 -17 609 661 ;\r\nC -1 ; WX 600 ; N idieresis ; B 77 0 561 618 ;\r\nC -1 ; WX 600 ; N Ocircumflex ; B 74 -18 645 780 ;\r\nC -1 ; WX 600 ; N Ugrave ; B 101 -18 716 784 ;\r\nC -1 ; WX 600 ; N Delta ; B 6 0 594 688 ;\r\nC -1 ; WX 600 ; N thorn ; B -32 -142 622 626 ;\r\nC -1 ; WX 600 ; N twosuperior ; B 191 230 542 616 ;\r\nC -1 ; WX 600 ; N Odieresis ; B 74 -18 645 761 ;\r\nC -1 ; WX 600 ; N mu ; B 49 -142 592 439 ;\r\nC -1 ; WX 600 ; N igrave ; B 77 0 546 661 ;\r\nC -1 ; WX 600 ; N ohungarumlaut ; B 71 -15 809 661 ;\r\nC -1 ; WX 600 ; N Eogonek ; B 25 -199 670 562 ;\r\nC -1 ; WX 600 ; N dcroat ; B 60 -15 712 626 ;\r\nC -1 ; WX 600 ; N threequarters ; B 8 -60 699 661 ;\r\nC -1 ; WX 600 ; N Scedilla ; B 54 -206 673 582 ;\r\nC -1 ; WX 600 ; N lcaron ; B 77 0 731 626 ;\r\nC -1 ; WX 600 ; N Kcommaaccent ; B 21 -250 692 562 ;\r\nC -1 ; WX 600 ; N Lacute ; B 39 0 636 784 ;\r\nC -1 ; WX 600 ; N trademark ; B 86 230 869 562 ;\r\nC -1 ; WX 600 ; N edotaccent ; B 81 -15 605 638 ;\r\nC -1 ; WX 600 ; N Igrave ; B 77 0 643 784 ;\r\nC -1 ; WX 600 ; N Imacron ; B 77 0 663 708 ;\r\nC -1 ; WX 600 ; N Lcaron ; B 39 0 757 562 ;\r\nC -1 ; WX 600 ; N onehalf ; B 22 -60 716 661 ;\r\nC -1 ; WX 600 ; N lessequal ; B 26 0 671 696 ;\r\nC -1 ; WX 600 ; N ocircumflex ; B 71 -15 622 657 ;\r\nC -1 ; WX 600 ; N ntilde ; B 18 0 643 636 ;\r\nC -1 ; WX 600 ; N Uhungarumlaut ; B 101 -18 805 784 ;\r\nC -1 ; WX 600 ; N Eacute ; B 25 0 670 784 ;\r\nC -1 ; WX 600 ; N emacron ; B 81 -15 637 585 ;\r\nC -1 ; WX 600 ; N gbreve ; B 40 -146 674 661 ;\r\nC -1 ; WX 600 ; N onequarter ; B 13 -60 707 661 ;\r\nC -1 ; WX 600 ; N Scaron ; B 54 -22 689 790 ;\r\nC -1 ; WX 600 ; N Scommaaccent ; B 54 -250 673 582 ;\r\nC -1 ; WX 600 ; N Ohungarumlaut ; B 74 -18 795 784 ;\r\nC -1 ; WX 600 ; N degree ; B 173 243 570 616 ;\r\nC -1 ; WX 600 ; N ograve ; B 71 -15 622 661 ;\r\nC -1 ; WX 600 ; N Ccaron ; B 74 -18 689 790 ;\r\nC -1 ; WX 600 ; N ugrave ; B 70 -15 592 661 ;\r\nC -1 ; WX 600 ; N radical ; B 67 -104 635 778 ;\r\nC -1 ; WX 600 ; N Dcaron ; B 30 0 664 790 ;\r\nC -1 ; WX 600 ; N rcommaaccent ; B 47 -250 655 454 ;\r\nC -1 ; WX 600 ; N Ntilde ; B 8 -12 730 759 ;\r\nC -1 ; WX 600 ; N otilde ; B 71 -15 643 636 ;\r\nC -1 ; WX 600 ; N Rcommaaccent ; B 24 -250 617 562 ;\r\nC -1 ; WX 600 ; N Lcommaaccent ; B 39 -250 636 562 ;\r\nC -1 ; WX 600 ; N Atilde ; B -9 0 669 759 ;\r\nC -1 ; WX 600 ; N Aogonek ; B -9 -199 632 562 ;\r\nC -1 ; WX 600 ; N Aring ; B -9 0 632 801 ;\r\nC -1 ; WX 600 ; N Otilde ; B 74 -18 669 759 ;\r\nC -1 ; WX 600 ; N zdotaccent ; B 81 0 614 638 ;\r\nC -1 ; WX 600 ; N Ecaron ; B 25 0 670 790 ;\r\nC -1 ; WX 600 ; N Iogonek ; B 77 -199 643 562 ;\r\nC -1 ; WX 600 ; N kcommaaccent ; B 33 -250 643 626 ;\r\nC -1 ; WX 600 ; N minus ; B 114 203 596 313 ;\r\nC -1 ; WX 600 ; N Icircumflex ; B 77 0 643 780 ;\r\nC -1 ; WX 600 ; N ncaron ; B 18 0 633 667 ;\r\nC -1 ; WX 600 ; N tcommaaccent ; B 118 -250 567 562 ;\r\nC -1 ; WX 600 ; N logicalnot ; B 135 103 617 413 ;\r\nC -1 ; WX 600 ; N odieresis ; B 71 -15 622 638 ;\r\nC -1 ; WX 600 ; N udieresis ; B 70 -15 595 638 ;\r\nC -1 ; WX 600 ; N notequal ; B 30 -47 626 563 ;\r\nC -1 ; WX 600 ; N gcommaaccent ; B 40 -146 674 714 ;\r\nC -1 ; WX 600 ; N eth ; B 93 -27 661 626 ;\r\nC -1 ; WX 600 ; N zcaron ; B 81 0 643 667 ;\r\nC -1 ; WX 600 ; N ncommaaccent ; B 18 -250 615 454 ;\r\nC -1 ; WX 600 ; N onesuperior ; B 212 230 514 616 ;\r\nC -1 ; WX 600 ; N imacron ; B 77 0 575 585 ;\r\nC -1 ; WX 600 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nEndFontMetrics\r\n";
2481 },
2482 Helvetica() {
2483 return "StartFontMetrics 4.1\r\nComment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 12:38:23 1997\r\nComment UniqueID 43054\r\nComment VMusage 37069 48094\r\nFontName Helvetica\r\nFullName Helvetica\r\nFamilyName Helvetica\r\nWeight Medium\r\nItalicAngle 0\r\nIsFixedPitch false\r\nCharacterSet ExtendedRoman\r\nFontBBox -166 -225 1000 931 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 002.000\r\nNotice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 718\r\nXHeight 523\r\nAscender 718\r\nDescender -207\r\nStdHW 76\r\nStdVW 88\r\nStartCharMetrics 315\r\nC 32 ; WX 278 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 278 ; N exclam ; B 90 0 187 718 ;\r\nC 34 ; WX 355 ; N quotedbl ; B 70 463 285 718 ;\r\nC 35 ; WX 556 ; N numbersign ; B 28 0 529 688 ;\r\nC 36 ; WX 556 ; N dollar ; B 32 -115 520 775 ;\r\nC 37 ; WX 889 ; N percent ; B 39 -19 850 703 ;\r\nC 38 ; WX 667 ; N ampersand ; B 44 -15 645 718 ;\r\nC 39 ; WX 222 ; N quoteright ; B 53 463 157 718 ;\r\nC 40 ; WX 333 ; N parenleft ; B 68 -207 299 733 ;\r\nC 41 ; WX 333 ; N parenright ; B 34 -207 265 733 ;\r\nC 42 ; WX 389 ; N asterisk ; B 39 431 349 718 ;\r\nC 43 ; WX 584 ; N plus ; B 39 0 545 505 ;\r\nC 44 ; WX 278 ; N comma ; B 87 -147 191 106 ;\r\nC 45 ; WX 333 ; N hyphen ; B 44 232 289 322 ;\r\nC 46 ; WX 278 ; N period ; B 87 0 191 106 ;\r\nC 47 ; WX 278 ; N slash ; B -17 -19 295 737 ;\r\nC 48 ; WX 556 ; N zero ; B 37 -19 519 703 ;\r\nC 49 ; WX 556 ; N one ; B 101 0 359 703 ;\r\nC 50 ; WX 556 ; N two ; B 26 0 507 703 ;\r\nC 51 ; WX 556 ; N three ; B 34 -19 522 703 ;\r\nC 52 ; WX 556 ; N four ; B 25 0 523 703 ;\r\nC 53 ; WX 556 ; N five ; B 32 -19 514 688 ;\r\nC 54 ; WX 556 ; N six ; B 38 -19 518 703 ;\r\nC 55 ; WX 556 ; N seven ; B 37 0 523 688 ;\r\nC 56 ; WX 556 ; N eight ; B 38 -19 517 703 ;\r\nC 57 ; WX 556 ; N nine ; B 42 -19 514 703 ;\r\nC 58 ; WX 278 ; N colon ; B 87 0 191 516 ;\r\nC 59 ; WX 278 ; N semicolon ; B 87 -147 191 516 ;\r\nC 60 ; WX 584 ; N less ; B 48 11 536 495 ;\r\nC 61 ; WX 584 ; N equal ; B 39 115 545 390 ;\r\nC 62 ; WX 584 ; N greater ; B 48 11 536 495 ;\r\nC 63 ; WX 556 ; N question ; B 56 0 492 727 ;\r\nC 64 ; WX 1015 ; N at ; B 147 -19 868 737 ;\r\nC 65 ; WX 667 ; N A ; B 14 0 654 718 ;\r\nC 66 ; WX 667 ; N B ; B 74 0 627 718 ;\r\nC 67 ; WX 722 ; N C ; B 44 -19 681 737 ;\r\nC 68 ; WX 722 ; N D ; B 81 0 674 718 ;\r\nC 69 ; WX 667 ; N E ; B 86 0 616 718 ;\r\nC 70 ; WX 611 ; N F ; B 86 0 583 718 ;\r\nC 71 ; WX 778 ; N G ; B 48 -19 704 737 ;\r\nC 72 ; WX 722 ; N H ; B 77 0 646 718 ;\r\nC 73 ; WX 278 ; N I ; B 91 0 188 718 ;\r\nC 74 ; WX 500 ; N J ; B 17 -19 428 718 ;\r\nC 75 ; WX 667 ; N K ; B 76 0 663 718 ;\r\nC 76 ; WX 556 ; N L ; B 76 0 537 718 ;\r\nC 77 ; WX 833 ; N M ; B 73 0 761 718 ;\r\nC 78 ; WX 722 ; N N ; B 76 0 646 718 ;\r\nC 79 ; WX 778 ; N O ; B 39 -19 739 737 ;\r\nC 80 ; WX 667 ; N P ; B 86 0 622 718 ;\r\nC 81 ; WX 778 ; N Q ; B 39 -56 739 737 ;\r\nC 82 ; WX 722 ; N R ; B 88 0 684 718 ;\r\nC 83 ; WX 667 ; N S ; B 49 -19 620 737 ;\r\nC 84 ; WX 611 ; N T ; B 14 0 597 718 ;\r\nC 85 ; WX 722 ; N U ; B 79 -19 644 718 ;\r\nC 86 ; WX 667 ; N V ; B 20 0 647 718 ;\r\nC 87 ; WX 944 ; N W ; B 16 0 928 718 ;\r\nC 88 ; WX 667 ; N X ; B 19 0 648 718 ;\r\nC 89 ; WX 667 ; N Y ; B 14 0 653 718 ;\r\nC 90 ; WX 611 ; N Z ; B 23 0 588 718 ;\r\nC 91 ; WX 278 ; N bracketleft ; B 63 -196 250 722 ;\r\nC 92 ; WX 278 ; N backslash ; B -17 -19 295 737 ;\r\nC 93 ; WX 278 ; N bracketright ; B 28 -196 215 722 ;\r\nC 94 ; WX 469 ; N asciicircum ; B -14 264 483 688 ;\r\nC 95 ; WX 556 ; N underscore ; B 0 -125 556 -75 ;\r\nC 96 ; WX 222 ; N quoteleft ; B 65 470 169 725 ;\r\nC 97 ; WX 556 ; N a ; B 36 -15 530 538 ;\r\nC 98 ; WX 556 ; N b ; B 58 -15 517 718 ;\r\nC 99 ; WX 500 ; N c ; B 30 -15 477 538 ;\r\nC 100 ; WX 556 ; N d ; B 35 -15 499 718 ;\r\nC 101 ; WX 556 ; N e ; B 40 -15 516 538 ;\r\nC 102 ; WX 278 ; N f ; B 14 0 262 728 ; L i fi ; L l fl ;\r\nC 103 ; WX 556 ; N g ; B 40 -220 499 538 ;\r\nC 104 ; WX 556 ; N h ; B 65 0 491 718 ;\r\nC 105 ; WX 222 ; N i ; B 67 0 155 718 ;\r\nC 106 ; WX 222 ; N j ; B -16 -210 155 718 ;\r\nC 107 ; WX 500 ; N k ; B 67 0 501 718 ;\r\nC 108 ; WX 222 ; N l ; B 67 0 155 718 ;\r\nC 109 ; WX 833 ; N m ; B 65 0 769 538 ;\r\nC 110 ; WX 556 ; N n ; B 65 0 491 538 ;\r\nC 111 ; WX 556 ; N o ; B 35 -14 521 538 ;\r\nC 112 ; WX 556 ; N p ; B 58 -207 517 538 ;\r\nC 113 ; WX 556 ; N q ; B 35 -207 494 538 ;\r\nC 114 ; WX 333 ; N r ; B 77 0 332 538 ;\r\nC 115 ; WX 500 ; N s ; B 32 -15 464 538 ;\r\nC 116 ; WX 278 ; N t ; B 14 -7 257 669 ;\r\nC 117 ; WX 556 ; N u ; B 68 -15 489 523 ;\r\nC 118 ; WX 500 ; N v ; B 8 0 492 523 ;\r\nC 119 ; WX 722 ; N w ; B 14 0 709 523 ;\r\nC 120 ; WX 500 ; N x ; B 11 0 490 523 ;\r\nC 121 ; WX 500 ; N y ; B 11 -214 489 523 ;\r\nC 122 ; WX 500 ; N z ; B 31 0 469 523 ;\r\nC 123 ; WX 334 ; N braceleft ; B 42 -196 292 722 ;\r\nC 124 ; WX 260 ; N bar ; B 94 -225 167 775 ;\r\nC 125 ; WX 334 ; N braceright ; B 42 -196 292 722 ;\r\nC 126 ; WX 584 ; N asciitilde ; B 61 180 523 326 ;\r\nC 161 ; WX 333 ; N exclamdown ; B 118 -195 215 523 ;\r\nC 162 ; WX 556 ; N cent ; B 51 -115 513 623 ;\r\nC 163 ; WX 556 ; N sterling ; B 33 -16 539 718 ;\r\nC 164 ; WX 167 ; N fraction ; B -166 -19 333 703 ;\r\nC 165 ; WX 556 ; N yen ; B 3 0 553 688 ;\r\nC 166 ; WX 556 ; N florin ; B -11 -207 501 737 ;\r\nC 167 ; WX 556 ; N section ; B 43 -191 512 737 ;\r\nC 168 ; WX 556 ; N currency ; B 28 99 528 603 ;\r\nC 169 ; WX 191 ; N quotesingle ; B 59 463 132 718 ;\r\nC 170 ; WX 333 ; N quotedblleft ; B 38 470 307 725 ;\r\nC 171 ; WX 556 ; N guillemotleft ; B 97 108 459 446 ;\r\nC 172 ; WX 333 ; N guilsinglleft ; B 88 108 245 446 ;\r\nC 173 ; WX 333 ; N guilsinglright ; B 88 108 245 446 ;\r\nC 174 ; WX 500 ; N fi ; B 14 0 434 728 ;\r\nC 175 ; WX 500 ; N fl ; B 14 0 432 728 ;\r\nC 177 ; WX 556 ; N endash ; B 0 240 556 313 ;\r\nC 178 ; WX 556 ; N dagger ; B 43 -159 514 718 ;\r\nC 179 ; WX 556 ; N daggerdbl ; B 43 -159 514 718 ;\r\nC 180 ; WX 278 ; N periodcentered ; B 77 190 202 315 ;\r\nC 182 ; WX 537 ; N paragraph ; B 18 -173 497 718 ;\r\nC 183 ; WX 350 ; N bullet ; B 18 202 333 517 ;\r\nC 184 ; WX 222 ; N quotesinglbase ; B 53 -149 157 106 ;\r\nC 185 ; WX 333 ; N quotedblbase ; B 26 -149 295 106 ;\r\nC 186 ; WX 333 ; N quotedblright ; B 26 463 295 718 ;\r\nC 187 ; WX 556 ; N guillemotright ; B 97 108 459 446 ;\r\nC 188 ; WX 1000 ; N ellipsis ; B 115 0 885 106 ;\r\nC 189 ; WX 1000 ; N perthousand ; B 7 -19 994 703 ;\r\nC 191 ; WX 611 ; N questiondown ; B 91 -201 527 525 ;\r\nC 193 ; WX 333 ; N grave ; B 14 593 211 734 ;\r\nC 194 ; WX 333 ; N acute ; B 122 593 319 734 ;\r\nC 195 ; WX 333 ; N circumflex ; B 21 593 312 734 ;\r\nC 196 ; WX 333 ; N tilde ; B -4 606 337 722 ;\r\nC 197 ; WX 333 ; N macron ; B 10 627 323 684 ;\r\nC 198 ; WX 333 ; N breve ; B 13 595 321 731 ;\r\nC 199 ; WX 333 ; N dotaccent ; B 121 604 212 706 ;\r\nC 200 ; WX 333 ; N dieresis ; B 40 604 293 706 ;\r\nC 202 ; WX 333 ; N ring ; B 75 572 259 756 ;\r\nC 203 ; WX 333 ; N cedilla ; B 45 -225 259 0 ;\r\nC 205 ; WX 333 ; N hungarumlaut ; B 31 593 409 734 ;\r\nC 206 ; WX 333 ; N ogonek ; B 73 -225 287 0 ;\r\nC 207 ; WX 333 ; N caron ; B 21 593 312 734 ;\r\nC 208 ; WX 1000 ; N emdash ; B 0 240 1000 313 ;\r\nC 225 ; WX 1000 ; N AE ; B 8 0 951 718 ;\r\nC 227 ; WX 370 ; N ordfeminine ; B 24 405 346 737 ;\r\nC 232 ; WX 556 ; N Lslash ; B -20 0 537 718 ;\r\nC 233 ; WX 778 ; N Oslash ; B 39 -19 740 737 ;\r\nC 234 ; WX 1000 ; N OE ; B 36 -19 965 737 ;\r\nC 235 ; WX 365 ; N ordmasculine ; B 25 405 341 737 ;\r\nC 241 ; WX 889 ; N ae ; B 36 -15 847 538 ;\r\nC 245 ; WX 278 ; N dotlessi ; B 95 0 183 523 ;\r\nC 248 ; WX 222 ; N lslash ; B -20 0 242 718 ;\r\nC 249 ; WX 611 ; N oslash ; B 28 -22 537 545 ;\r\nC 250 ; WX 944 ; N oe ; B 35 -15 902 538 ;\r\nC 251 ; WX 611 ; N germandbls ; B 67 -15 571 728 ;\r\nC -1 ; WX 278 ; N Idieresis ; B 13 0 266 901 ;\r\nC -1 ; WX 556 ; N eacute ; B 40 -15 516 734 ;\r\nC -1 ; WX 556 ; N abreve ; B 36 -15 530 731 ;\r\nC -1 ; WX 556 ; N uhungarumlaut ; B 68 -15 521 734 ;\r\nC -1 ; WX 556 ; N ecaron ; B 40 -15 516 734 ;\r\nC -1 ; WX 667 ; N Ydieresis ; B 14 0 653 901 ;\r\nC -1 ; WX 584 ; N divide ; B 39 -19 545 524 ;\r\nC -1 ; WX 667 ; N Yacute ; B 14 0 653 929 ;\r\nC -1 ; WX 667 ; N Acircumflex ; B 14 0 654 929 ;\r\nC -1 ; WX 556 ; N aacute ; B 36 -15 530 734 ;\r\nC -1 ; WX 722 ; N Ucircumflex ; B 79 -19 644 929 ;\r\nC -1 ; WX 500 ; N yacute ; B 11 -214 489 734 ;\r\nC -1 ; WX 500 ; N scommaaccent ; B 32 -225 464 538 ;\r\nC -1 ; WX 556 ; N ecircumflex ; B 40 -15 516 734 ;\r\nC -1 ; WX 722 ; N Uring ; B 79 -19 644 931 ;\r\nC -1 ; WX 722 ; N Udieresis ; B 79 -19 644 901 ;\r\nC -1 ; WX 556 ; N aogonek ; B 36 -220 547 538 ;\r\nC -1 ; WX 722 ; N Uacute ; B 79 -19 644 929 ;\r\nC -1 ; WX 556 ; N uogonek ; B 68 -225 519 523 ;\r\nC -1 ; WX 667 ; N Edieresis ; B 86 0 616 901 ;\r\nC -1 ; WX 722 ; N Dcroat ; B 0 0 674 718 ;\r\nC -1 ; WX 250 ; N commaaccent ; B 87 -225 181 -40 ;\r\nC -1 ; WX 737 ; N copyright ; B -14 -19 752 737 ;\r\nC -1 ; WX 667 ; N Emacron ; B 86 0 616 879 ;\r\nC -1 ; WX 500 ; N ccaron ; B 30 -15 477 734 ;\r\nC -1 ; WX 556 ; N aring ; B 36 -15 530 756 ;\r\nC -1 ; WX 722 ; N Ncommaaccent ; B 76 -225 646 718 ;\r\nC -1 ; WX 222 ; N lacute ; B 67 0 264 929 ;\r\nC -1 ; WX 556 ; N agrave ; B 36 -15 530 734 ;\r\nC -1 ; WX 611 ; N Tcommaaccent ; B 14 -225 597 718 ;\r\nC -1 ; WX 722 ; N Cacute ; B 44 -19 681 929 ;\r\nC -1 ; WX 556 ; N atilde ; B 36 -15 530 722 ;\r\nC -1 ; WX 667 ; N Edotaccent ; B 86 0 616 901 ;\r\nC -1 ; WX 500 ; N scaron ; B 32 -15 464 734 ;\r\nC -1 ; WX 500 ; N scedilla ; B 32 -225 464 538 ;\r\nC -1 ; WX 278 ; N iacute ; B 95 0 292 734 ;\r\nC -1 ; WX 471 ; N lozenge ; B 10 0 462 728 ;\r\nC -1 ; WX 722 ; N Rcaron ; B 88 0 684 929 ;\r\nC -1 ; WX 778 ; N Gcommaaccent ; B 48 -225 704 737 ;\r\nC -1 ; WX 556 ; N ucircumflex ; B 68 -15 489 734 ;\r\nC -1 ; WX 556 ; N acircumflex ; B 36 -15 530 734 ;\r\nC -1 ; WX 667 ; N Amacron ; B 14 0 654 879 ;\r\nC -1 ; WX 333 ; N rcaron ; B 61 0 352 734 ;\r\nC -1 ; WX 500 ; N ccedilla ; B 30 -225 477 538 ;\r\nC -1 ; WX 611 ; N Zdotaccent ; B 23 0 588 901 ;\r\nC -1 ; WX 667 ; N Thorn ; B 86 0 622 718 ;\r\nC -1 ; WX 778 ; N Omacron ; B 39 -19 739 879 ;\r\nC -1 ; WX 722 ; N Racute ; B 88 0 684 929 ;\r\nC -1 ; WX 667 ; N Sacute ; B 49 -19 620 929 ;\r\nC -1 ; WX 643 ; N dcaron ; B 35 -15 655 718 ;\r\nC -1 ; WX 722 ; N Umacron ; B 79 -19 644 879 ;\r\nC -1 ; WX 556 ; N uring ; B 68 -15 489 756 ;\r\nC -1 ; WX 333 ; N threesuperior ; B 5 270 325 703 ;\r\nC -1 ; WX 778 ; N Ograve ; B 39 -19 739 929 ;\r\nC -1 ; WX 667 ; N Agrave ; B 14 0 654 929 ;\r\nC -1 ; WX 667 ; N Abreve ; B 14 0 654 926 ;\r\nC -1 ; WX 584 ; N multiply ; B 39 0 545 506 ;\r\nC -1 ; WX 556 ; N uacute ; B 68 -15 489 734 ;\r\nC -1 ; WX 611 ; N Tcaron ; B 14 0 597 929 ;\r\nC -1 ; WX 476 ; N partialdiff ; B 13 -38 463 714 ;\r\nC -1 ; WX 500 ; N ydieresis ; B 11 -214 489 706 ;\r\nC -1 ; WX 722 ; N Nacute ; B 76 0 646 929 ;\r\nC -1 ; WX 278 ; N icircumflex ; B -6 0 285 734 ;\r\nC -1 ; WX 667 ; N Ecircumflex ; B 86 0 616 929 ;\r\nC -1 ; WX 556 ; N adieresis ; B 36 -15 530 706 ;\r\nC -1 ; WX 556 ; N edieresis ; B 40 -15 516 706 ;\r\nC -1 ; WX 500 ; N cacute ; B 30 -15 477 734 ;\r\nC -1 ; WX 556 ; N nacute ; B 65 0 491 734 ;\r\nC -1 ; WX 556 ; N umacron ; B 68 -15 489 684 ;\r\nC -1 ; WX 722 ; N Ncaron ; B 76 0 646 929 ;\r\nC -1 ; WX 278 ; N Iacute ; B 91 0 292 929 ;\r\nC -1 ; WX 584 ; N plusminus ; B 39 0 545 506 ;\r\nC -1 ; WX 260 ; N brokenbar ; B 94 -150 167 700 ;\r\nC -1 ; WX 737 ; N registered ; B -14 -19 752 737 ;\r\nC -1 ; WX 778 ; N Gbreve ; B 48 -19 704 926 ;\r\nC -1 ; WX 278 ; N Idotaccent ; B 91 0 188 901 ;\r\nC -1 ; WX 600 ; N summation ; B 15 -10 586 706 ;\r\nC -1 ; WX 667 ; N Egrave ; B 86 0 616 929 ;\r\nC -1 ; WX 333 ; N racute ; B 77 0 332 734 ;\r\nC -1 ; WX 556 ; N omacron ; B 35 -14 521 684 ;\r\nC -1 ; WX 611 ; N Zacute ; B 23 0 588 929 ;\r\nC -1 ; WX 611 ; N Zcaron ; B 23 0 588 929 ;\r\nC -1 ; WX 549 ; N greaterequal ; B 26 0 523 674 ;\r\nC -1 ; WX 722 ; N Eth ; B 0 0 674 718 ;\r\nC -1 ; WX 722 ; N Ccedilla ; B 44 -225 681 737 ;\r\nC -1 ; WX 222 ; N lcommaaccent ; B 67 -225 167 718 ;\r\nC -1 ; WX 317 ; N tcaron ; B 14 -7 329 808 ;\r\nC -1 ; WX 556 ; N eogonek ; B 40 -225 516 538 ;\r\nC -1 ; WX 722 ; N Uogonek ; B 79 -225 644 718 ;\r\nC -1 ; WX 667 ; N Aacute ; B 14 0 654 929 ;\r\nC -1 ; WX 667 ; N Adieresis ; B 14 0 654 901 ;\r\nC -1 ; WX 556 ; N egrave ; B 40 -15 516 734 ;\r\nC -1 ; WX 500 ; N zacute ; B 31 0 469 734 ;\r\nC -1 ; WX 222 ; N iogonek ; B -31 -225 183 718 ;\r\nC -1 ; WX 778 ; N Oacute ; B 39 -19 739 929 ;\r\nC -1 ; WX 556 ; N oacute ; B 35 -14 521 734 ;\r\nC -1 ; WX 556 ; N amacron ; B 36 -15 530 684 ;\r\nC -1 ; WX 500 ; N sacute ; B 32 -15 464 734 ;\r\nC -1 ; WX 278 ; N idieresis ; B 13 0 266 706 ;\r\nC -1 ; WX 778 ; N Ocircumflex ; B 39 -19 739 929 ;\r\nC -1 ; WX 722 ; N Ugrave ; B 79 -19 644 929 ;\r\nC -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;\r\nC -1 ; WX 556 ; N thorn ; B 58 -207 517 718 ;\r\nC -1 ; WX 333 ; N twosuperior ; B 4 281 323 703 ;\r\nC -1 ; WX 778 ; N Odieresis ; B 39 -19 739 901 ;\r\nC -1 ; WX 556 ; N mu ; B 68 -207 489 523 ;\r\nC -1 ; WX 278 ; N igrave ; B -13 0 184 734 ;\r\nC -1 ; WX 556 ; N ohungarumlaut ; B 35 -14 521 734 ;\r\nC -1 ; WX 667 ; N Eogonek ; B 86 -220 633 718 ;\r\nC -1 ; WX 556 ; N dcroat ; B 35 -15 550 718 ;\r\nC -1 ; WX 834 ; N threequarters ; B 45 -19 810 703 ;\r\nC -1 ; WX 667 ; N Scedilla ; B 49 -225 620 737 ;\r\nC -1 ; WX 299 ; N lcaron ; B 67 0 311 718 ;\r\nC -1 ; WX 667 ; N Kcommaaccent ; B 76 -225 663 718 ;\r\nC -1 ; WX 556 ; N Lacute ; B 76 0 537 929 ;\r\nC -1 ; WX 1000 ; N trademark ; B 46 306 903 718 ;\r\nC -1 ; WX 556 ; N edotaccent ; B 40 -15 516 706 ;\r\nC -1 ; WX 278 ; N Igrave ; B -13 0 188 929 ;\r\nC -1 ; WX 278 ; N Imacron ; B -17 0 296 879 ;\r\nC -1 ; WX 556 ; N Lcaron ; B 76 0 537 718 ;\r\nC -1 ; WX 834 ; N onehalf ; B 43 -19 773 703 ;\r\nC -1 ; WX 549 ; N lessequal ; B 26 0 523 674 ;\r\nC -1 ; WX 556 ; N ocircumflex ; B 35 -14 521 734 ;\r\nC -1 ; WX 556 ; N ntilde ; B 65 0 491 722 ;\r\nC -1 ; WX 722 ; N Uhungarumlaut ; B 79 -19 644 929 ;\r\nC -1 ; WX 667 ; N Eacute ; B 86 0 616 929 ;\r\nC -1 ; WX 556 ; N emacron ; B 40 -15 516 684 ;\r\nC -1 ; WX 556 ; N gbreve ; B 40 -220 499 731 ;\r\nC -1 ; WX 834 ; N onequarter ; B 73 -19 756 703 ;\r\nC -1 ; WX 667 ; N Scaron ; B 49 -19 620 929 ;\r\nC -1 ; WX 667 ; N Scommaaccent ; B 49 -225 620 737 ;\r\nC -1 ; WX 778 ; N Ohungarumlaut ; B 39 -19 739 929 ;\r\nC -1 ; WX 400 ; N degree ; B 54 411 346 703 ;\r\nC -1 ; WX 556 ; N ograve ; B 35 -14 521 734 ;\r\nC -1 ; WX 722 ; N Ccaron ; B 44 -19 681 929 ;\r\nC -1 ; WX 556 ; N ugrave ; B 68 -15 489 734 ;\r\nC -1 ; WX 453 ; N radical ; B -4 -80 458 762 ;\r\nC -1 ; WX 722 ; N Dcaron ; B 81 0 674 929 ;\r\nC -1 ; WX 333 ; N rcommaaccent ; B 77 -225 332 538 ;\r\nC -1 ; WX 722 ; N Ntilde ; B 76 0 646 917 ;\r\nC -1 ; WX 556 ; N otilde ; B 35 -14 521 722 ;\r\nC -1 ; WX 722 ; N Rcommaaccent ; B 88 -225 684 718 ;\r\nC -1 ; WX 556 ; N Lcommaaccent ; B 76 -225 537 718 ;\r\nC -1 ; WX 667 ; N Atilde ; B 14 0 654 917 ;\r\nC -1 ; WX 667 ; N Aogonek ; B 14 -225 654 718 ;\r\nC -1 ; WX 667 ; N Aring ; B 14 0 654 931 ;\r\nC -1 ; WX 778 ; N Otilde ; B 39 -19 739 917 ;\r\nC -1 ; WX 500 ; N zdotaccent ; B 31 0 469 706 ;\r\nC -1 ; WX 667 ; N Ecaron ; B 86 0 616 929 ;\r\nC -1 ; WX 278 ; N Iogonek ; B -3 -225 211 718 ;\r\nC -1 ; WX 500 ; N kcommaaccent ; B 67 -225 501 718 ;\r\nC -1 ; WX 584 ; N minus ; B 39 216 545 289 ;\r\nC -1 ; WX 278 ; N Icircumflex ; B -6 0 285 929 ;\r\nC -1 ; WX 556 ; N ncaron ; B 65 0 491 734 ;\r\nC -1 ; WX 278 ; N tcommaaccent ; B 14 -225 257 669 ;\r\nC -1 ; WX 584 ; N logicalnot ; B 39 108 545 390 ;\r\nC -1 ; WX 556 ; N odieresis ; B 35 -14 521 706 ;\r\nC -1 ; WX 556 ; N udieresis ; B 68 -15 489 706 ;\r\nC -1 ; WX 549 ; N notequal ; B 12 -35 537 551 ;\r\nC -1 ; WX 556 ; N gcommaaccent ; B 40 -220 499 822 ;\r\nC -1 ; WX 556 ; N eth ; B 35 -15 522 737 ;\r\nC -1 ; WX 500 ; N zcaron ; B 31 0 469 734 ;\r\nC -1 ; WX 556 ; N ncommaaccent ; B 65 -225 491 538 ;\r\nC -1 ; WX 333 ; N onesuperior ; B 43 281 222 703 ;\r\nC -1 ; WX 278 ; N imacron ; B 5 0 272 684 ;\r\nC -1 ; WX 556 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nStartKernData\r\nStartKernPairs 2705\r\nKPX A C -30\r\nKPX A Cacute -30\r\nKPX A Ccaron -30\r\nKPX A Ccedilla -30\r\nKPX A G -30\r\nKPX A Gbreve -30\r\nKPX A Gcommaaccent -30\r\nKPX A O -30\r\nKPX A Oacute -30\r\nKPX A Ocircumflex -30\r\nKPX A Odieresis -30\r\nKPX A Ograve -30\r\nKPX A Ohungarumlaut -30\r\nKPX A Omacron -30\r\nKPX A Oslash -30\r\nKPX A Otilde -30\r\nKPX A Q -30\r\nKPX A T -120\r\nKPX A Tcaron -120\r\nKPX A Tcommaaccent -120\r\nKPX A U -50\r\nKPX A Uacute -50\r\nKPX A Ucircumflex -50\r\nKPX A Udieresis -50\r\nKPX A Ugrave -50\r\nKPX A Uhungarumlaut -50\r\nKPX A Umacron -50\r\nKPX A Uogonek -50\r\nKPX A Uring -50\r\nKPX A V -70\r\nKPX A W -50\r\nKPX A Y -100\r\nKPX A Yacute -100\r\nKPX A Ydieresis -100\r\nKPX A u -30\r\nKPX A uacute -30\r\nKPX A ucircumflex -30\r\nKPX A udieresis -30\r\nKPX A ugrave -30\r\nKPX A uhungarumlaut -30\r\nKPX A umacron -30\r\nKPX A uogonek -30\r\nKPX A uring -30\r\nKPX A v -40\r\nKPX A w -40\r\nKPX A y -40\r\nKPX A yacute -40\r\nKPX A ydieresis -40\r\nKPX Aacute C -30\r\nKPX Aacute Cacute -30\r\nKPX Aacute Ccaron -30\r\nKPX Aacute Ccedilla -30\r\nKPX Aacute G -30\r\nKPX Aacute Gbreve -30\r\nKPX Aacute Gcommaaccent -30\r\nKPX Aacute O -30\r\nKPX Aacute Oacute -30\r\nKPX Aacute Ocircumflex -30\r\nKPX Aacute Odieresis -30\r\nKPX Aacute Ograve -30\r\nKPX Aacute Ohungarumlaut -30\r\nKPX Aacute Omacron -30\r\nKPX Aacute Oslash -30\r\nKPX Aacute Otilde -30\r\nKPX Aacute Q -30\r\nKPX Aacute T -120\r\nKPX Aacute Tcaron -120\r\nKPX Aacute Tcommaaccent -120\r\nKPX Aacute U -50\r\nKPX Aacute Uacute -50\r\nKPX Aacute Ucircumflex -50\r\nKPX Aacute Udieresis -50\r\nKPX Aacute Ugrave -50\r\nKPX Aacute Uhungarumlaut -50\r\nKPX Aacute Umacron -50\r\nKPX Aacute Uogonek -50\r\nKPX Aacute Uring -50\r\nKPX Aacute V -70\r\nKPX Aacute W -50\r\nKPX Aacute Y -100\r\nKPX Aacute Yacute -100\r\nKPX Aacute Ydieresis -100\r\nKPX Aacute u -30\r\nKPX Aacute uacute -30\r\nKPX Aacute ucircumflex -30\r\nKPX Aacute udieresis -30\r\nKPX Aacute ugrave -30\r\nKPX Aacute uhungarumlaut -30\r\nKPX Aacute umacron -30\r\nKPX Aacute uogonek -30\r\nKPX Aacute uring -30\r\nKPX Aacute v -40\r\nKPX Aacute w -40\r\nKPX Aacute y -40\r\nKPX Aacute yacute -40\r\nKPX Aacute ydieresis -40\r\nKPX Abreve C -30\r\nKPX Abreve Cacute -30\r\nKPX Abreve Ccaron -30\r\nKPX Abreve Ccedilla -30\r\nKPX Abreve G -30\r\nKPX Abreve Gbreve -30\r\nKPX Abreve Gcommaaccent -30\r\nKPX Abreve O -30\r\nKPX Abreve Oacute -30\r\nKPX Abreve Ocircumflex -30\r\nKPX Abreve Odieresis -30\r\nKPX Abreve Ograve -30\r\nKPX Abreve Ohungarumlaut -30\r\nKPX Abreve Omacron -30\r\nKPX Abreve Oslash -30\r\nKPX Abreve Otilde -30\r\nKPX Abreve Q -30\r\nKPX Abreve T -120\r\nKPX Abreve Tcaron -120\r\nKPX Abreve Tcommaaccent -120\r\nKPX Abreve U -50\r\nKPX Abreve Uacute -50\r\nKPX Abreve Ucircumflex -50\r\nKPX Abreve Udieresis -50\r\nKPX Abreve Ugrave -50\r\nKPX Abreve Uhungarumlaut -50\r\nKPX Abreve Umacron -50\r\nKPX Abreve Uogonek -50\r\nKPX Abreve Uring -50\r\nKPX Abreve V -70\r\nKPX Abreve W -50\r\nKPX Abreve Y -100\r\nKPX Abreve Yacute -100\r\nKPX Abreve Ydieresis -100\r\nKPX Abreve u -30\r\nKPX Abreve uacute -30\r\nKPX Abreve ucircumflex -30\r\nKPX Abreve udieresis -30\r\nKPX Abreve ugrave -30\r\nKPX Abreve uhungarumlaut -30\r\nKPX Abreve umacron -30\r\nKPX Abreve uogonek -30\r\nKPX Abreve uring -30\r\nKPX Abreve v -40\r\nKPX Abreve w -40\r\nKPX Abreve y -40\r\nKPX Abreve yacute -40\r\nKPX Abreve ydieresis -40\r\nKPX Acircumflex C -30\r\nKPX Acircumflex Cacute -30\r\nKPX Acircumflex Ccaron -30\r\nKPX Acircumflex Ccedilla -30\r\nKPX Acircumflex G -30\r\nKPX Acircumflex Gbreve -30\r\nKPX Acircumflex Gcommaaccent -30\r\nKPX Acircumflex O -30\r\nKPX Acircumflex Oacute -30\r\nKPX Acircumflex Ocircumflex -30\r\nKPX Acircumflex Odieresis -30\r\nKPX Acircumflex Ograve -30\r\nKPX Acircumflex Ohungarumlaut -30\r\nKPX Acircumflex Omacron -30\r\nKPX Acircumflex Oslash -30\r\nKPX Acircumflex Otilde -30\r\nKPX Acircumflex Q -30\r\nKPX Acircumflex T -120\r\nKPX Acircumflex Tcaron -120\r\nKPX Acircumflex Tcommaaccent -120\r\nKPX Acircumflex U -50\r\nKPX Acircumflex Uacute -50\r\nKPX Acircumflex Ucircumflex -50\r\nKPX Acircumflex Udieresis -50\r\nKPX Acircumflex Ugrave -50\r\nKPX Acircumflex Uhungarumlaut -50\r\nKPX Acircumflex Umacron -50\r\nKPX Acircumflex Uogonek -50\r\nKPX Acircumflex Uring -50\r\nKPX Acircumflex V -70\r\nKPX Acircumflex W -50\r\nKPX Acircumflex Y -100\r\nKPX Acircumflex Yacute -100\r\nKPX Acircumflex Ydieresis -100\r\nKPX Acircumflex u -30\r\nKPX Acircumflex uacute -30\r\nKPX Acircumflex ucircumflex -30\r\nKPX Acircumflex udieresis -30\r\nKPX Acircumflex ugrave -30\r\nKPX Acircumflex uhungarumlaut -30\r\nKPX Acircumflex umacron -30\r\nKPX Acircumflex uogonek -30\r\nKPX Acircumflex uring -30\r\nKPX Acircumflex v -40\r\nKPX Acircumflex w -40\r\nKPX Acircumflex y -40\r\nKPX Acircumflex yacute -40\r\nKPX Acircumflex ydieresis -40\r\nKPX Adieresis C -30\r\nKPX Adieresis Cacute -30\r\nKPX Adieresis Ccaron -30\r\nKPX Adieresis Ccedilla -30\r\nKPX Adieresis G -30\r\nKPX Adieresis Gbreve -30\r\nKPX Adieresis Gcommaaccent -30\r\nKPX Adieresis O -30\r\nKPX Adieresis Oacute -30\r\nKPX Adieresis Ocircumflex -30\r\nKPX Adieresis Odieresis -30\r\nKPX Adieresis Ograve -30\r\nKPX Adieresis Ohungarumlaut -30\r\nKPX Adieresis Omacron -30\r\nKPX Adieresis Oslash -30\r\nKPX Adieresis Otilde -30\r\nKPX Adieresis Q -30\r\nKPX Adieresis T -120\r\nKPX Adieresis Tcaron -120\r\nKPX Adieresis Tcommaaccent -120\r\nKPX Adieresis U -50\r\nKPX Adieresis Uacute -50\r\nKPX Adieresis Ucircumflex -50\r\nKPX Adieresis Udieresis -50\r\nKPX Adieresis Ugrave -50\r\nKPX Adieresis Uhungarumlaut -50\r\nKPX Adieresis Umacron -50\r\nKPX Adieresis Uogonek -50\r\nKPX Adieresis Uring -50\r\nKPX Adieresis V -70\r\nKPX Adieresis W -50\r\nKPX Adieresis Y -100\r\nKPX Adieresis Yacute -100\r\nKPX Adieresis Ydieresis -100\r\nKPX Adieresis u -30\r\nKPX Adieresis uacute -30\r\nKPX Adieresis ucircumflex -30\r\nKPX Adieresis udieresis -30\r\nKPX Adieresis ugrave -30\r\nKPX Adieresis uhungarumlaut -30\r\nKPX Adieresis umacron -30\r\nKPX Adieresis uogonek -30\r\nKPX Adieresis uring -30\r\nKPX Adieresis v -40\r\nKPX Adieresis w -40\r\nKPX Adieresis y -40\r\nKPX Adieresis yacute -40\r\nKPX Adieresis ydieresis -40\r\nKPX Agrave C -30\r\nKPX Agrave Cacute -30\r\nKPX Agrave Ccaron -30\r\nKPX Agrave Ccedilla -30\r\nKPX Agrave G -30\r\nKPX Agrave Gbreve -30\r\nKPX Agrave Gcommaaccent -30\r\nKPX Agrave O -30\r\nKPX Agrave Oacute -30\r\nKPX Agrave Ocircumflex -30\r\nKPX Agrave Odieresis -30\r\nKPX Agrave Ograve -30\r\nKPX Agrave Ohungarumlaut -30\r\nKPX Agrave Omacron -30\r\nKPX Agrave Oslash -30\r\nKPX Agrave Otilde -30\r\nKPX Agrave Q -30\r\nKPX Agrave T -120\r\nKPX Agrave Tcaron -120\r\nKPX Agrave Tcommaaccent -120\r\nKPX Agrave U -50\r\nKPX Agrave Uacute -50\r\nKPX Agrave Ucircumflex -50\r\nKPX Agrave Udieresis -50\r\nKPX Agrave Ugrave -50\r\nKPX Agrave Uhungarumlaut -50\r\nKPX Agrave Umacron -50\r\nKPX Agrave Uogonek -50\r\nKPX Agrave Uring -50\r\nKPX Agrave V -70\r\nKPX Agrave W -50\r\nKPX Agrave Y -100\r\nKPX Agrave Yacute -100\r\nKPX Agrave Ydieresis -100\r\nKPX Agrave u -30\r\nKPX Agrave uacute -30\r\nKPX Agrave ucircumflex -30\r\nKPX Agrave udieresis -30\r\nKPX Agrave ugrave -30\r\nKPX Agrave uhungarumlaut -30\r\nKPX Agrave umacron -30\r\nKPX Agrave uogonek -30\r\nKPX Agrave uring -30\r\nKPX Agrave v -40\r\nKPX Agrave w -40\r\nKPX Agrave y -40\r\nKPX Agrave yacute -40\r\nKPX Agrave ydieresis -40\r\nKPX Amacron C -30\r\nKPX Amacron Cacute -30\r\nKPX Amacron Ccaron -30\r\nKPX Amacron Ccedilla -30\r\nKPX Amacron G -30\r\nKPX Amacron Gbreve -30\r\nKPX Amacron Gcommaaccent -30\r\nKPX Amacron O -30\r\nKPX Amacron Oacute -30\r\nKPX Amacron Ocircumflex -30\r\nKPX Amacron Odieresis -30\r\nKPX Amacron Ograve -30\r\nKPX Amacron Ohungarumlaut -30\r\nKPX Amacron Omacron -30\r\nKPX Amacron Oslash -30\r\nKPX Amacron Otilde -30\r\nKPX Amacron Q -30\r\nKPX Amacron T -120\r\nKPX Amacron Tcaron -120\r\nKPX Amacron Tcommaaccent -120\r\nKPX Amacron U -50\r\nKPX Amacron Uacute -50\r\nKPX Amacron Ucircumflex -50\r\nKPX Amacron Udieresis -50\r\nKPX Amacron Ugrave -50\r\nKPX Amacron Uhungarumlaut -50\r\nKPX Amacron Umacron -50\r\nKPX Amacron Uogonek -50\r\nKPX Amacron Uring -50\r\nKPX Amacron V -70\r\nKPX Amacron W -50\r\nKPX Amacron Y -100\r\nKPX Amacron Yacute -100\r\nKPX Amacron Ydieresis -100\r\nKPX Amacron u -30\r\nKPX Amacron uacute -30\r\nKPX Amacron ucircumflex -30\r\nKPX Amacron udieresis -30\r\nKPX Amacron ugrave -30\r\nKPX Amacron uhungarumlaut -30\r\nKPX Amacron umacron -30\r\nKPX Amacron uogonek -30\r\nKPX Amacron uring -30\r\nKPX Amacron v -40\r\nKPX Amacron w -40\r\nKPX Amacron y -40\r\nKPX Amacron yacute -40\r\nKPX Amacron ydieresis -40\r\nKPX Aogonek C -30\r\nKPX Aogonek Cacute -30\r\nKPX Aogonek Ccaron -30\r\nKPX Aogonek Ccedilla -30\r\nKPX Aogonek G -30\r\nKPX Aogonek Gbreve -30\r\nKPX Aogonek Gcommaaccent -30\r\nKPX Aogonek O -30\r\nKPX Aogonek Oacute -30\r\nKPX Aogonek Ocircumflex -30\r\nKPX Aogonek Odieresis -30\r\nKPX Aogonek Ograve -30\r\nKPX Aogonek Ohungarumlaut -30\r\nKPX Aogonek Omacron -30\r\nKPX Aogonek Oslash -30\r\nKPX Aogonek Otilde -30\r\nKPX Aogonek Q -30\r\nKPX Aogonek T -120\r\nKPX Aogonek Tcaron -120\r\nKPX Aogonek Tcommaaccent -120\r\nKPX Aogonek U -50\r\nKPX Aogonek Uacute -50\r\nKPX Aogonek Ucircumflex -50\r\nKPX Aogonek Udieresis -50\r\nKPX Aogonek Ugrave -50\r\nKPX Aogonek Uhungarumlaut -50\r\nKPX Aogonek Umacron -50\r\nKPX Aogonek Uogonek -50\r\nKPX Aogonek Uring -50\r\nKPX Aogonek V -70\r\nKPX Aogonek W -50\r\nKPX Aogonek Y -100\r\nKPX Aogonek Yacute -100\r\nKPX Aogonek Ydieresis -100\r\nKPX Aogonek u -30\r\nKPX Aogonek uacute -30\r\nKPX Aogonek ucircumflex -30\r\nKPX Aogonek udieresis -30\r\nKPX Aogonek ugrave -30\r\nKPX Aogonek uhungarumlaut -30\r\nKPX Aogonek umacron -30\r\nKPX Aogonek uogonek -30\r\nKPX Aogonek uring -30\r\nKPX Aogonek v -40\r\nKPX Aogonek w -40\r\nKPX Aogonek y -40\r\nKPX Aogonek yacute -40\r\nKPX Aogonek ydieresis -40\r\nKPX Aring C -30\r\nKPX Aring Cacute -30\r\nKPX Aring Ccaron -30\r\nKPX Aring Ccedilla -30\r\nKPX Aring G -30\r\nKPX Aring Gbreve -30\r\nKPX Aring Gcommaaccent -30\r\nKPX Aring O -30\r\nKPX Aring Oacute -30\r\nKPX Aring Ocircumflex -30\r\nKPX Aring Odieresis -30\r\nKPX Aring Ograve -30\r\nKPX Aring Ohungarumlaut -30\r\nKPX Aring Omacron -30\r\nKPX Aring Oslash -30\r\nKPX Aring Otilde -30\r\nKPX Aring Q -30\r\nKPX Aring T -120\r\nKPX Aring Tcaron -120\r\nKPX Aring Tcommaaccent -120\r\nKPX Aring U -50\r\nKPX Aring Uacute -50\r\nKPX Aring Ucircumflex -50\r\nKPX Aring Udieresis -50\r\nKPX Aring Ugrave -50\r\nKPX Aring Uhungarumlaut -50\r\nKPX Aring Umacron -50\r\nKPX Aring Uogonek -50\r\nKPX Aring Uring -50\r\nKPX Aring V -70\r\nKPX Aring W -50\r\nKPX Aring Y -100\r\nKPX Aring Yacute -100\r\nKPX Aring Ydieresis -100\r\nKPX Aring u -30\r\nKPX Aring uacute -30\r\nKPX Aring ucircumflex -30\r\nKPX Aring udieresis -30\r\nKPX Aring ugrave -30\r\nKPX Aring uhungarumlaut -30\r\nKPX Aring umacron -30\r\nKPX Aring uogonek -30\r\nKPX Aring uring -30\r\nKPX Aring v -40\r\nKPX Aring w -40\r\nKPX Aring y -40\r\nKPX Aring yacute -40\r\nKPX Aring ydieresis -40\r\nKPX Atilde C -30\r\nKPX Atilde Cacute -30\r\nKPX Atilde Ccaron -30\r\nKPX Atilde Ccedilla -30\r\nKPX Atilde G -30\r\nKPX Atilde Gbreve -30\r\nKPX Atilde Gcommaaccent -30\r\nKPX Atilde O -30\r\nKPX Atilde Oacute -30\r\nKPX Atilde Ocircumflex -30\r\nKPX Atilde Odieresis -30\r\nKPX Atilde Ograve -30\r\nKPX Atilde Ohungarumlaut -30\r\nKPX Atilde Omacron -30\r\nKPX Atilde Oslash -30\r\nKPX Atilde Otilde -30\r\nKPX Atilde Q -30\r\nKPX Atilde T -120\r\nKPX Atilde Tcaron -120\r\nKPX Atilde Tcommaaccent -120\r\nKPX Atilde U -50\r\nKPX Atilde Uacute -50\r\nKPX Atilde Ucircumflex -50\r\nKPX Atilde Udieresis -50\r\nKPX Atilde Ugrave -50\r\nKPX Atilde Uhungarumlaut -50\r\nKPX Atilde Umacron -50\r\nKPX Atilde Uogonek -50\r\nKPX Atilde Uring -50\r\nKPX Atilde V -70\r\nKPX Atilde W -50\r\nKPX Atilde Y -100\r\nKPX Atilde Yacute -100\r\nKPX Atilde Ydieresis -100\r\nKPX Atilde u -30\r\nKPX Atilde uacute -30\r\nKPX Atilde ucircumflex -30\r\nKPX Atilde udieresis -30\r\nKPX Atilde ugrave -30\r\nKPX Atilde uhungarumlaut -30\r\nKPX Atilde umacron -30\r\nKPX Atilde uogonek -30\r\nKPX Atilde uring -30\r\nKPX Atilde v -40\r\nKPX Atilde w -40\r\nKPX Atilde y -40\r\nKPX Atilde yacute -40\r\nKPX Atilde ydieresis -40\r\nKPX B U -10\r\nKPX B Uacute -10\r\nKPX B Ucircumflex -10\r\nKPX B Udieresis -10\r\nKPX B Ugrave -10\r\nKPX B Uhungarumlaut -10\r\nKPX B Umacron -10\r\nKPX B Uogonek -10\r\nKPX B Uring -10\r\nKPX B comma -20\r\nKPX B period -20\r\nKPX C comma -30\r\nKPX C period -30\r\nKPX Cacute comma -30\r\nKPX Cacute period -30\r\nKPX Ccaron comma -30\r\nKPX Ccaron period -30\r\nKPX Ccedilla comma -30\r\nKPX Ccedilla period -30\r\nKPX D A -40\r\nKPX D Aacute -40\r\nKPX D Abreve -40\r\nKPX D Acircumflex -40\r\nKPX D Adieresis -40\r\nKPX D Agrave -40\r\nKPX D Amacron -40\r\nKPX D Aogonek -40\r\nKPX D Aring -40\r\nKPX D Atilde -40\r\nKPX D V -70\r\nKPX D W -40\r\nKPX D Y -90\r\nKPX D Yacute -90\r\nKPX D Ydieresis -90\r\nKPX D comma -70\r\nKPX D period -70\r\nKPX Dcaron A -40\r\nKPX Dcaron Aacute -40\r\nKPX Dcaron Abreve -40\r\nKPX Dcaron Acircumflex -40\r\nKPX Dcaron Adieresis -40\r\nKPX Dcaron Agrave -40\r\nKPX Dcaron Amacron -40\r\nKPX Dcaron Aogonek -40\r\nKPX Dcaron Aring -40\r\nKPX Dcaron Atilde -40\r\nKPX Dcaron V -70\r\nKPX Dcaron W -40\r\nKPX Dcaron Y -90\r\nKPX Dcaron Yacute -90\r\nKPX Dcaron Ydieresis -90\r\nKPX Dcaron comma -70\r\nKPX Dcaron period -70\r\nKPX Dcroat A -40\r\nKPX Dcroat Aacute -40\r\nKPX Dcroat Abreve -40\r\nKPX Dcroat Acircumflex -40\r\nKPX Dcroat Adieresis -40\r\nKPX Dcroat Agrave -40\r\nKPX Dcroat Amacron -40\r\nKPX Dcroat Aogonek -40\r\nKPX Dcroat Aring -40\r\nKPX Dcroat Atilde -40\r\nKPX Dcroat V -70\r\nKPX Dcroat W -40\r\nKPX Dcroat Y -90\r\nKPX Dcroat Yacute -90\r\nKPX Dcroat Ydieresis -90\r\nKPX Dcroat comma -70\r\nKPX Dcroat period -70\r\nKPX F A -80\r\nKPX F Aacute -80\r\nKPX F Abreve -80\r\nKPX F Acircumflex -80\r\nKPX F Adieresis -80\r\nKPX F Agrave -80\r\nKPX F Amacron -80\r\nKPX F Aogonek -80\r\nKPX F Aring -80\r\nKPX F Atilde -80\r\nKPX F a -50\r\nKPX F aacute -50\r\nKPX F abreve -50\r\nKPX F acircumflex -50\r\nKPX F adieresis -50\r\nKPX F agrave -50\r\nKPX F amacron -50\r\nKPX F aogonek -50\r\nKPX F aring -50\r\nKPX F atilde -50\r\nKPX F comma -150\r\nKPX F e -30\r\nKPX F eacute -30\r\nKPX F ecaron -30\r\nKPX F ecircumflex -30\r\nKPX F edieresis -30\r\nKPX F edotaccent -30\r\nKPX F egrave -30\r\nKPX F emacron -30\r\nKPX F eogonek -30\r\nKPX F o -30\r\nKPX F oacute -30\r\nKPX F ocircumflex -30\r\nKPX F odieresis -30\r\nKPX F ograve -30\r\nKPX F ohungarumlaut -30\r\nKPX F omacron -30\r\nKPX F oslash -30\r\nKPX F otilde -30\r\nKPX F period -150\r\nKPX F r -45\r\nKPX F racute -45\r\nKPX F rcaron -45\r\nKPX F rcommaaccent -45\r\nKPX J A -20\r\nKPX J Aacute -20\r\nKPX J Abreve -20\r\nKPX J Acircumflex -20\r\nKPX J Adieresis -20\r\nKPX J Agrave -20\r\nKPX J Amacron -20\r\nKPX J Aogonek -20\r\nKPX J Aring -20\r\nKPX J Atilde -20\r\nKPX J a -20\r\nKPX J aacute -20\r\nKPX J abreve -20\r\nKPX J acircumflex -20\r\nKPX J adieresis -20\r\nKPX J agrave -20\r\nKPX J amacron -20\r\nKPX J aogonek -20\r\nKPX J aring -20\r\nKPX J atilde -20\r\nKPX J comma -30\r\nKPX J period -30\r\nKPX J u -20\r\nKPX J uacute -20\r\nKPX J ucircumflex -20\r\nKPX J udieresis -20\r\nKPX J ugrave -20\r\nKPX J uhungarumlaut -20\r\nKPX J umacron -20\r\nKPX J uogonek -20\r\nKPX J uring -20\r\nKPX K O -50\r\nKPX K Oacute -50\r\nKPX K Ocircumflex -50\r\nKPX K Odieresis -50\r\nKPX K Ograve -50\r\nKPX K Ohungarumlaut -50\r\nKPX K Omacron -50\r\nKPX K Oslash -50\r\nKPX K Otilde -50\r\nKPX K e -40\r\nKPX K eacute -40\r\nKPX K ecaron -40\r\nKPX K ecircumflex -40\r\nKPX K edieresis -40\r\nKPX K edotaccent -40\r\nKPX K egrave -40\r\nKPX K emacron -40\r\nKPX K eogonek -40\r\nKPX K o -40\r\nKPX K oacute -40\r\nKPX K ocircumflex -40\r\nKPX K odieresis -40\r\nKPX K ograve -40\r\nKPX K ohungarumlaut -40\r\nKPX K omacron -40\r\nKPX K oslash -40\r\nKPX K otilde -40\r\nKPX K u -30\r\nKPX K uacute -30\r\nKPX K ucircumflex -30\r\nKPX K udieresis -30\r\nKPX K ugrave -30\r\nKPX K uhungarumlaut -30\r\nKPX K umacron -30\r\nKPX K uogonek -30\r\nKPX K uring -30\r\nKPX K y -50\r\nKPX K yacute -50\r\nKPX K ydieresis -50\r\nKPX Kcommaaccent O -50\r\nKPX Kcommaaccent Oacute -50\r\nKPX Kcommaaccent Ocircumflex -50\r\nKPX Kcommaaccent Odieresis -50\r\nKPX Kcommaaccent Ograve -50\r\nKPX Kcommaaccent Ohungarumlaut -50\r\nKPX Kcommaaccent Omacron -50\r\nKPX Kcommaaccent Oslash -50\r\nKPX Kcommaaccent Otilde -50\r\nKPX Kcommaaccent e -40\r\nKPX Kcommaaccent eacute -40\r\nKPX Kcommaaccent ecaron -40\r\nKPX Kcommaaccent ecircumflex -40\r\nKPX Kcommaaccent edieresis -40\r\nKPX Kcommaaccent edotaccent -40\r\nKPX Kcommaaccent egrave -40\r\nKPX Kcommaaccent emacron -40\r\nKPX Kcommaaccent eogonek -40\r\nKPX Kcommaaccent o -40\r\nKPX Kcommaaccent oacute -40\r\nKPX Kcommaaccent ocircumflex -40\r\nKPX Kcommaaccent odieresis -40\r\nKPX Kcommaaccent ograve -40\r\nKPX Kcommaaccent ohungarumlaut -40\r\nKPX Kcommaaccent omacron -40\r\nKPX Kcommaaccent oslash -40\r\nKPX Kcommaaccent otilde -40\r\nKPX Kcommaaccent u -30\r\nKPX Kcommaaccent uacute -30\r\nKPX Kcommaaccent ucircumflex -30\r\nKPX Kcommaaccent udieresis -30\r\nKPX Kcommaaccent ugrave -30\r\nKPX Kcommaaccent uhungarumlaut -30\r\nKPX Kcommaaccent umacron -30\r\nKPX Kcommaaccent uogonek -30\r\nKPX Kcommaaccent uring -30\r\nKPX Kcommaaccent y -50\r\nKPX Kcommaaccent yacute -50\r\nKPX Kcommaaccent ydieresis -50\r\nKPX L T -110\r\nKPX L Tcaron -110\r\nKPX L Tcommaaccent -110\r\nKPX L V -110\r\nKPX L W -70\r\nKPX L Y -140\r\nKPX L Yacute -140\r\nKPX L Ydieresis -140\r\nKPX L quotedblright -140\r\nKPX L quoteright -160\r\nKPX L y -30\r\nKPX L yacute -30\r\nKPX L ydieresis -30\r\nKPX Lacute T -110\r\nKPX Lacute Tcaron -110\r\nKPX Lacute Tcommaaccent -110\r\nKPX Lacute V -110\r\nKPX Lacute W -70\r\nKPX Lacute Y -140\r\nKPX Lacute Yacute -140\r\nKPX Lacute Ydieresis -140\r\nKPX Lacute quotedblright -140\r\nKPX Lacute quoteright -160\r\nKPX Lacute y -30\r\nKPX Lacute yacute -30\r\nKPX Lacute ydieresis -30\r\nKPX Lcaron T -110\r\nKPX Lcaron Tcaron -110\r\nKPX Lcaron Tcommaaccent -110\r\nKPX Lcaron V -110\r\nKPX Lcaron W -70\r\nKPX Lcaron Y -140\r\nKPX Lcaron Yacute -140\r\nKPX Lcaron Ydieresis -140\r\nKPX Lcaron quotedblright -140\r\nKPX Lcaron quoteright -160\r\nKPX Lcaron y -30\r\nKPX Lcaron yacute -30\r\nKPX Lcaron ydieresis -30\r\nKPX Lcommaaccent T -110\r\nKPX Lcommaaccent Tcaron -110\r\nKPX Lcommaaccent Tcommaaccent -110\r\nKPX Lcommaaccent V -110\r\nKPX Lcommaaccent W -70\r\nKPX Lcommaaccent Y -140\r\nKPX Lcommaaccent Yacute -140\r\nKPX Lcommaaccent Ydieresis -140\r\nKPX Lcommaaccent quotedblright -140\r\nKPX Lcommaaccent quoteright -160\r\nKPX Lcommaaccent y -30\r\nKPX Lcommaaccent yacute -30\r\nKPX Lcommaaccent ydieresis -30\r\nKPX Lslash T -110\r\nKPX Lslash Tcaron -110\r\nKPX Lslash Tcommaaccent -110\r\nKPX Lslash V -110\r\nKPX Lslash W -70\r\nKPX Lslash Y -140\r\nKPX Lslash Yacute -140\r\nKPX Lslash Ydieresis -140\r\nKPX Lslash quotedblright -140\r\nKPX Lslash quoteright -160\r\nKPX Lslash y -30\r\nKPX Lslash yacute -30\r\nKPX Lslash ydieresis -30\r\nKPX O A -20\r\nKPX O Aacute -20\r\nKPX O Abreve -20\r\nKPX O Acircumflex -20\r\nKPX O Adieresis -20\r\nKPX O Agrave -20\r\nKPX O Amacron -20\r\nKPX O Aogonek -20\r\nKPX O Aring -20\r\nKPX O Atilde -20\r\nKPX O T -40\r\nKPX O Tcaron -40\r\nKPX O Tcommaaccent -40\r\nKPX O V -50\r\nKPX O W -30\r\nKPX O X -60\r\nKPX O Y -70\r\nKPX O Yacute -70\r\nKPX O Ydieresis -70\r\nKPX O comma -40\r\nKPX O period -40\r\nKPX Oacute A -20\r\nKPX Oacute Aacute -20\r\nKPX Oacute Abreve -20\r\nKPX Oacute Acircumflex -20\r\nKPX Oacute Adieresis -20\r\nKPX Oacute Agrave -20\r\nKPX Oacute Amacron -20\r\nKPX Oacute Aogonek -20\r\nKPX Oacute Aring -20\r\nKPX Oacute Atilde -20\r\nKPX Oacute T -40\r\nKPX Oacute Tcaron -40\r\nKPX Oacute Tcommaaccent -40\r\nKPX Oacute V -50\r\nKPX Oacute W -30\r\nKPX Oacute X -60\r\nKPX Oacute Y -70\r\nKPX Oacute Yacute -70\r\nKPX Oacute Ydieresis -70\r\nKPX Oacute comma -40\r\nKPX Oacute period -40\r\nKPX Ocircumflex A -20\r\nKPX Ocircumflex Aacute -20\r\nKPX Ocircumflex Abreve -20\r\nKPX Ocircumflex Acircumflex -20\r\nKPX Ocircumflex Adieresis -20\r\nKPX Ocircumflex Agrave -20\r\nKPX Ocircumflex Amacron -20\r\nKPX Ocircumflex Aogonek -20\r\nKPX Ocircumflex Aring -20\r\nKPX Ocircumflex Atilde -20\r\nKPX Ocircumflex T -40\r\nKPX Ocircumflex Tcaron -40\r\nKPX Ocircumflex Tcommaaccent -40\r\nKPX Ocircumflex V -50\r\nKPX Ocircumflex W -30\r\nKPX Ocircumflex X -60\r\nKPX Ocircumflex Y -70\r\nKPX Ocircumflex Yacute -70\r\nKPX Ocircumflex Ydieresis -70\r\nKPX Ocircumflex comma -40\r\nKPX Ocircumflex period -40\r\nKPX Odieresis A -20\r\nKPX Odieresis Aacute -20\r\nKPX Odieresis Abreve -20\r\nKPX Odieresis Acircumflex -20\r\nKPX Odieresis Adieresis -20\r\nKPX Odieresis Agrave -20\r\nKPX Odieresis Amacron -20\r\nKPX Odieresis Aogonek -20\r\nKPX Odieresis Aring -20\r\nKPX Odieresis Atilde -20\r\nKPX Odieresis T -40\r\nKPX Odieresis Tcaron -40\r\nKPX Odieresis Tcommaaccent -40\r\nKPX Odieresis V -50\r\nKPX Odieresis W -30\r\nKPX Odieresis X -60\r\nKPX Odieresis Y -70\r\nKPX Odieresis Yacute -70\r\nKPX Odieresis Ydieresis -70\r\nKPX Odieresis comma -40\r\nKPX Odieresis period -40\r\nKPX Ograve A -20\r\nKPX Ograve Aacute -20\r\nKPX Ograve Abreve -20\r\nKPX Ograve Acircumflex -20\r\nKPX Ograve Adieresis -20\r\nKPX Ograve Agrave -20\r\nKPX Ograve Amacron -20\r\nKPX Ograve Aogonek -20\r\nKPX Ograve Aring -20\r\nKPX Ograve Atilde -20\r\nKPX Ograve T -40\r\nKPX Ograve Tcaron -40\r\nKPX Ograve Tcommaaccent -40\r\nKPX Ograve V -50\r\nKPX Ograve W -30\r\nKPX Ograve X -60\r\nKPX Ograve Y -70\r\nKPX Ograve Yacute -70\r\nKPX Ograve Ydieresis -70\r\nKPX Ograve comma -40\r\nKPX Ograve period -40\r\nKPX Ohungarumlaut A -20\r\nKPX Ohungarumlaut Aacute -20\r\nKPX Ohungarumlaut Abreve -20\r\nKPX Ohungarumlaut Acircumflex -20\r\nKPX Ohungarumlaut Adieresis -20\r\nKPX Ohungarumlaut Agrave -20\r\nKPX Ohungarumlaut Amacron -20\r\nKPX Ohungarumlaut Aogonek -20\r\nKPX Ohungarumlaut Aring -20\r\nKPX Ohungarumlaut Atilde -20\r\nKPX Ohungarumlaut T -40\r\nKPX Ohungarumlaut Tcaron -40\r\nKPX Ohungarumlaut Tcommaaccent -40\r\nKPX Ohungarumlaut V -50\r\nKPX Ohungarumlaut W -30\r\nKPX Ohungarumlaut X -60\r\nKPX Ohungarumlaut Y -70\r\nKPX Ohungarumlaut Yacute -70\r\nKPX Ohungarumlaut Ydieresis -70\r\nKPX Ohungarumlaut comma -40\r\nKPX Ohungarumlaut period -40\r\nKPX Omacron A -20\r\nKPX Omacron Aacute -20\r\nKPX Omacron Abreve -20\r\nKPX Omacron Acircumflex -20\r\nKPX Omacron Adieresis -20\r\nKPX Omacron Agrave -20\r\nKPX Omacron Amacron -20\r\nKPX Omacron Aogonek -20\r\nKPX Omacron Aring -20\r\nKPX Omacron Atilde -20\r\nKPX Omacron T -40\r\nKPX Omacron Tcaron -40\r\nKPX Omacron Tcommaaccent -40\r\nKPX Omacron V -50\r\nKPX Omacron W -30\r\nKPX Omacron X -60\r\nKPX Omacron Y -70\r\nKPX Omacron Yacute -70\r\nKPX Omacron Ydieresis -70\r\nKPX Omacron comma -40\r\nKPX Omacron period -40\r\nKPX Oslash A -20\r\nKPX Oslash Aacute -20\r\nKPX Oslash Abreve -20\r\nKPX Oslash Acircumflex -20\r\nKPX Oslash Adieresis -20\r\nKPX Oslash Agrave -20\r\nKPX Oslash Amacron -20\r\nKPX Oslash Aogonek -20\r\nKPX Oslash Aring -20\r\nKPX Oslash Atilde -20\r\nKPX Oslash T -40\r\nKPX Oslash Tcaron -40\r\nKPX Oslash Tcommaaccent -40\r\nKPX Oslash V -50\r\nKPX Oslash W -30\r\nKPX Oslash X -60\r\nKPX Oslash Y -70\r\nKPX Oslash Yacute -70\r\nKPX Oslash Ydieresis -70\r\nKPX Oslash comma -40\r\nKPX Oslash period -40\r\nKPX Otilde A -20\r\nKPX Otilde Aacute -20\r\nKPX Otilde Abreve -20\r\nKPX Otilde Acircumflex -20\r\nKPX Otilde Adieresis -20\r\nKPX Otilde Agrave -20\r\nKPX Otilde Amacron -20\r\nKPX Otilde Aogonek -20\r\nKPX Otilde Aring -20\r\nKPX Otilde Atilde -20\r\nKPX Otilde T -40\r\nKPX Otilde Tcaron -40\r\nKPX Otilde Tcommaaccent -40\r\nKPX Otilde V -50\r\nKPX Otilde W -30\r\nKPX Otilde X -60\r\nKPX Otilde Y -70\r\nKPX Otilde Yacute -70\r\nKPX Otilde Ydieresis -70\r\nKPX Otilde comma -40\r\nKPX Otilde period -40\r\nKPX P A -120\r\nKPX P Aacute -120\r\nKPX P Abreve -120\r\nKPX P Acircumflex -120\r\nKPX P Adieresis -120\r\nKPX P Agrave -120\r\nKPX P Amacron -120\r\nKPX P Aogonek -120\r\nKPX P Aring -120\r\nKPX P Atilde -120\r\nKPX P a -40\r\nKPX P aacute -40\r\nKPX P abreve -40\r\nKPX P acircumflex -40\r\nKPX P adieresis -40\r\nKPX P agrave -40\r\nKPX P amacron -40\r\nKPX P aogonek -40\r\nKPX P aring -40\r\nKPX P atilde -40\r\nKPX P comma -180\r\nKPX P e -50\r\nKPX P eacute -50\r\nKPX P ecaron -50\r\nKPX P ecircumflex -50\r\nKPX P edieresis -50\r\nKPX P edotaccent -50\r\nKPX P egrave -50\r\nKPX P emacron -50\r\nKPX P eogonek -50\r\nKPX P o -50\r\nKPX P oacute -50\r\nKPX P ocircumflex -50\r\nKPX P odieresis -50\r\nKPX P ograve -50\r\nKPX P ohungarumlaut -50\r\nKPX P omacron -50\r\nKPX P oslash -50\r\nKPX P otilde -50\r\nKPX P period -180\r\nKPX Q U -10\r\nKPX Q Uacute -10\r\nKPX Q Ucircumflex -10\r\nKPX Q Udieresis -10\r\nKPX Q Ugrave -10\r\nKPX Q Uhungarumlaut -10\r\nKPX Q Umacron -10\r\nKPX Q Uogonek -10\r\nKPX Q Uring -10\r\nKPX R O -20\r\nKPX R Oacute -20\r\nKPX R Ocircumflex -20\r\nKPX R Odieresis -20\r\nKPX R Ograve -20\r\nKPX R Ohungarumlaut -20\r\nKPX R Omacron -20\r\nKPX R Oslash -20\r\nKPX R Otilde -20\r\nKPX R T -30\r\nKPX R Tcaron -30\r\nKPX R Tcommaaccent -30\r\nKPX R U -40\r\nKPX R Uacute -40\r\nKPX R Ucircumflex -40\r\nKPX R Udieresis -40\r\nKPX R Ugrave -40\r\nKPX R Uhungarumlaut -40\r\nKPX R Umacron -40\r\nKPX R Uogonek -40\r\nKPX R Uring -40\r\nKPX R V -50\r\nKPX R W -30\r\nKPX R Y -50\r\nKPX R Yacute -50\r\nKPX R Ydieresis -50\r\nKPX Racute O -20\r\nKPX Racute Oacute -20\r\nKPX Racute Ocircumflex -20\r\nKPX Racute Odieresis -20\r\nKPX Racute Ograve -20\r\nKPX Racute Ohungarumlaut -20\r\nKPX Racute Omacron -20\r\nKPX Racute Oslash -20\r\nKPX Racute Otilde -20\r\nKPX Racute T -30\r\nKPX Racute Tcaron -30\r\nKPX Racute Tcommaaccent -30\r\nKPX Racute U -40\r\nKPX Racute Uacute -40\r\nKPX Racute Ucircumflex -40\r\nKPX Racute Udieresis -40\r\nKPX Racute Ugrave -40\r\nKPX Racute Uhungarumlaut -40\r\nKPX Racute Umacron -40\r\nKPX Racute Uogonek -40\r\nKPX Racute Uring -40\r\nKPX Racute V -50\r\nKPX Racute W -30\r\nKPX Racute Y -50\r\nKPX Racute Yacute -50\r\nKPX Racute Ydieresis -50\r\nKPX Rcaron O -20\r\nKPX Rcaron Oacute -20\r\nKPX Rcaron Ocircumflex -20\r\nKPX Rcaron Odieresis -20\r\nKPX Rcaron Ograve -20\r\nKPX Rcaron Ohungarumlaut -20\r\nKPX Rcaron Omacron -20\r\nKPX Rcaron Oslash -20\r\nKPX Rcaron Otilde -20\r\nKPX Rcaron T -30\r\nKPX Rcaron Tcaron -30\r\nKPX Rcaron Tcommaaccent -30\r\nKPX Rcaron U -40\r\nKPX Rcaron Uacute -40\r\nKPX Rcaron Ucircumflex -40\r\nKPX Rcaron Udieresis -40\r\nKPX Rcaron Ugrave -40\r\nKPX Rcaron Uhungarumlaut -40\r\nKPX Rcaron Umacron -40\r\nKPX Rcaron Uogonek -40\r\nKPX Rcaron Uring -40\r\nKPX Rcaron V -50\r\nKPX Rcaron W -30\r\nKPX Rcaron Y -50\r\nKPX Rcaron Yacute -50\r\nKPX Rcaron Ydieresis -50\r\nKPX Rcommaaccent O -20\r\nKPX Rcommaaccent Oacute -20\r\nKPX Rcommaaccent Ocircumflex -20\r\nKPX Rcommaaccent Odieresis -20\r\nKPX Rcommaaccent Ograve -20\r\nKPX Rcommaaccent Ohungarumlaut -20\r\nKPX Rcommaaccent Omacron -20\r\nKPX Rcommaaccent Oslash -20\r\nKPX Rcommaaccent Otilde -20\r\nKPX Rcommaaccent T -30\r\nKPX Rcommaaccent Tcaron -30\r\nKPX Rcommaaccent Tcommaaccent -30\r\nKPX Rcommaaccent U -40\r\nKPX Rcommaaccent Uacute -40\r\nKPX Rcommaaccent Ucircumflex -40\r\nKPX Rcommaaccent Udieresis -40\r\nKPX Rcommaaccent Ugrave -40\r\nKPX Rcommaaccent Uhungarumlaut -40\r\nKPX Rcommaaccent Umacron -40\r\nKPX Rcommaaccent Uogonek -40\r\nKPX Rcommaaccent Uring -40\r\nKPX Rcommaaccent V -50\r\nKPX Rcommaaccent W -30\r\nKPX Rcommaaccent Y -50\r\nKPX Rcommaaccent Yacute -50\r\nKPX Rcommaaccent Ydieresis -50\r\nKPX S comma -20\r\nKPX S period -20\r\nKPX Sacute comma -20\r\nKPX Sacute period -20\r\nKPX Scaron comma -20\r\nKPX Scaron period -20\r\nKPX Scedilla comma -20\r\nKPX Scedilla period -20\r\nKPX Scommaaccent comma -20\r\nKPX Scommaaccent period -20\r\nKPX T A -120\r\nKPX T Aacute -120\r\nKPX T Abreve -120\r\nKPX T Acircumflex -120\r\nKPX T Adieresis -120\r\nKPX T Agrave -120\r\nKPX T Amacron -120\r\nKPX T Aogonek -120\r\nKPX T Aring -120\r\nKPX T Atilde -120\r\nKPX T O -40\r\nKPX T Oacute -40\r\nKPX T Ocircumflex -40\r\nKPX T Odieresis -40\r\nKPX T Ograve -40\r\nKPX T Ohungarumlaut -40\r\nKPX T Omacron -40\r\nKPX T Oslash -40\r\nKPX T Otilde -40\r\nKPX T a -120\r\nKPX T aacute -120\r\nKPX T abreve -60\r\nKPX T acircumflex -120\r\nKPX T adieresis -120\r\nKPX T agrave -120\r\nKPX T amacron -60\r\nKPX T aogonek -120\r\nKPX T aring -120\r\nKPX T atilde -60\r\nKPX T colon -20\r\nKPX T comma -120\r\nKPX T e -120\r\nKPX T eacute -120\r\nKPX T ecaron -120\r\nKPX T ecircumflex -120\r\nKPX T edieresis -120\r\nKPX T edotaccent -120\r\nKPX T egrave -60\r\nKPX T emacron -60\r\nKPX T eogonek -120\r\nKPX T hyphen -140\r\nKPX T o -120\r\nKPX T oacute -120\r\nKPX T ocircumflex -120\r\nKPX T odieresis -120\r\nKPX T ograve -120\r\nKPX T ohungarumlaut -120\r\nKPX T omacron -60\r\nKPX T oslash -120\r\nKPX T otilde -60\r\nKPX T period -120\r\nKPX T r -120\r\nKPX T racute -120\r\nKPX T rcaron -120\r\nKPX T rcommaaccent -120\r\nKPX T semicolon -20\r\nKPX T u -120\r\nKPX T uacute -120\r\nKPX T ucircumflex -120\r\nKPX T udieresis -120\r\nKPX T ugrave -120\r\nKPX T uhungarumlaut -120\r\nKPX T umacron -60\r\nKPX T uogonek -120\r\nKPX T uring -120\r\nKPX T w -120\r\nKPX T y -120\r\nKPX T yacute -120\r\nKPX T ydieresis -60\r\nKPX Tcaron A -120\r\nKPX Tcaron Aacute -120\r\nKPX Tcaron Abreve -120\r\nKPX Tcaron Acircumflex -120\r\nKPX Tcaron Adieresis -120\r\nKPX Tcaron Agrave -120\r\nKPX Tcaron Amacron -120\r\nKPX Tcaron Aogonek -120\r\nKPX Tcaron Aring -120\r\nKPX Tcaron Atilde -120\r\nKPX Tcaron O -40\r\nKPX Tcaron Oacute -40\r\nKPX Tcaron Ocircumflex -40\r\nKPX Tcaron Odieresis -40\r\nKPX Tcaron Ograve -40\r\nKPX Tcaron Ohungarumlaut -40\r\nKPX Tcaron Omacron -40\r\nKPX Tcaron Oslash -40\r\nKPX Tcaron Otilde -40\r\nKPX Tcaron a -120\r\nKPX Tcaron aacute -120\r\nKPX Tcaron abreve -60\r\nKPX Tcaron acircumflex -120\r\nKPX Tcaron adieresis -120\r\nKPX Tcaron agrave -120\r\nKPX Tcaron amacron -60\r\nKPX Tcaron aogonek -120\r\nKPX Tcaron aring -120\r\nKPX Tcaron atilde -60\r\nKPX Tcaron colon -20\r\nKPX Tcaron comma -120\r\nKPX Tcaron e -120\r\nKPX Tcaron eacute -120\r\nKPX Tcaron ecaron -120\r\nKPX Tcaron ecircumflex -120\r\nKPX Tcaron edieresis -120\r\nKPX Tcaron edotaccent -120\r\nKPX Tcaron egrave -60\r\nKPX Tcaron emacron -60\r\nKPX Tcaron eogonek -120\r\nKPX Tcaron hyphen -140\r\nKPX Tcaron o -120\r\nKPX Tcaron oacute -120\r\nKPX Tcaron ocircumflex -120\r\nKPX Tcaron odieresis -120\r\nKPX Tcaron ograve -120\r\nKPX Tcaron ohungarumlaut -120\r\nKPX Tcaron omacron -60\r\nKPX Tcaron oslash -120\r\nKPX Tcaron otilde -60\r\nKPX Tcaron period -120\r\nKPX Tcaron r -120\r\nKPX Tcaron racute -120\r\nKPX Tcaron rcaron -120\r\nKPX Tcaron rcommaaccent -120\r\nKPX Tcaron semicolon -20\r\nKPX Tcaron u -120\r\nKPX Tcaron uacute -120\r\nKPX Tcaron ucircumflex -120\r\nKPX Tcaron udieresis -120\r\nKPX Tcaron ugrave -120\r\nKPX Tcaron uhungarumlaut -120\r\nKPX Tcaron umacron -60\r\nKPX Tcaron uogonek -120\r\nKPX Tcaron uring -120\r\nKPX Tcaron w -120\r\nKPX Tcaron y -120\r\nKPX Tcaron yacute -120\r\nKPX Tcaron ydieresis -60\r\nKPX Tcommaaccent A -120\r\nKPX Tcommaaccent Aacute -120\r\nKPX Tcommaaccent Abreve -120\r\nKPX Tcommaaccent Acircumflex -120\r\nKPX Tcommaaccent Adieresis -120\r\nKPX Tcommaaccent Agrave -120\r\nKPX Tcommaaccent Amacron -120\r\nKPX Tcommaaccent Aogonek -120\r\nKPX Tcommaaccent Aring -120\r\nKPX Tcommaaccent Atilde -120\r\nKPX Tcommaaccent O -40\r\nKPX Tcommaaccent Oacute -40\r\nKPX Tcommaaccent Ocircumflex -40\r\nKPX Tcommaaccent Odieresis -40\r\nKPX Tcommaaccent Ograve -40\r\nKPX Tcommaaccent Ohungarumlaut -40\r\nKPX Tcommaaccent Omacron -40\r\nKPX Tcommaaccent Oslash -40\r\nKPX Tcommaaccent Otilde -40\r\nKPX Tcommaaccent a -120\r\nKPX Tcommaaccent aacute -120\r\nKPX Tcommaaccent abreve -60\r\nKPX Tcommaaccent acircumflex -120\r\nKPX Tcommaaccent adieresis -120\r\nKPX Tcommaaccent agrave -120\r\nKPX Tcommaaccent amacron -60\r\nKPX Tcommaaccent aogonek -120\r\nKPX Tcommaaccent aring -120\r\nKPX Tcommaaccent atilde -60\r\nKPX Tcommaaccent colon -20\r\nKPX Tcommaaccent comma -120\r\nKPX Tcommaaccent e -120\r\nKPX Tcommaaccent eacute -120\r\nKPX Tcommaaccent ecaron -120\r\nKPX Tcommaaccent ecircumflex -120\r\nKPX Tcommaaccent edieresis -120\r\nKPX Tcommaaccent edotaccent -120\r\nKPX Tcommaaccent egrave -60\r\nKPX Tcommaaccent emacron -60\r\nKPX Tcommaaccent eogonek -120\r\nKPX Tcommaaccent hyphen -140\r\nKPX Tcommaaccent o -120\r\nKPX Tcommaaccent oacute -120\r\nKPX Tcommaaccent ocircumflex -120\r\nKPX Tcommaaccent odieresis -120\r\nKPX Tcommaaccent ograve -120\r\nKPX Tcommaaccent ohungarumlaut -120\r\nKPX Tcommaaccent omacron -60\r\nKPX Tcommaaccent oslash -120\r\nKPX Tcommaaccent otilde -60\r\nKPX Tcommaaccent period -120\r\nKPX Tcommaaccent r -120\r\nKPX Tcommaaccent racute -120\r\nKPX Tcommaaccent rcaron -120\r\nKPX Tcommaaccent rcommaaccent -120\r\nKPX Tcommaaccent semicolon -20\r\nKPX Tcommaaccent u -120\r\nKPX Tcommaaccent uacute -120\r\nKPX Tcommaaccent ucircumflex -120\r\nKPX Tcommaaccent udieresis -120\r\nKPX Tcommaaccent ugrave -120\r\nKPX Tcommaaccent uhungarumlaut -120\r\nKPX Tcommaaccent umacron -60\r\nKPX Tcommaaccent uogonek -120\r\nKPX Tcommaaccent uring -120\r\nKPX Tcommaaccent w -120\r\nKPX Tcommaaccent y -120\r\nKPX Tcommaaccent yacute -120\r\nKPX Tcommaaccent ydieresis -60\r\nKPX U A -40\r\nKPX U Aacute -40\r\nKPX U Abreve -40\r\nKPX U Acircumflex -40\r\nKPX U Adieresis -40\r\nKPX U Agrave -40\r\nKPX U Amacron -40\r\nKPX U Aogonek -40\r\nKPX U Aring -40\r\nKPX U Atilde -40\r\nKPX U comma -40\r\nKPX U period -40\r\nKPX Uacute A -40\r\nKPX Uacute Aacute -40\r\nKPX Uacute Abreve -40\r\nKPX Uacute Acircumflex -40\r\nKPX Uacute Adieresis -40\r\nKPX Uacute Agrave -40\r\nKPX Uacute Amacron -40\r\nKPX Uacute Aogonek -40\r\nKPX Uacute Aring -40\r\nKPX Uacute Atilde -40\r\nKPX Uacute comma -40\r\nKPX Uacute period -40\r\nKPX Ucircumflex A -40\r\nKPX Ucircumflex Aacute -40\r\nKPX Ucircumflex Abreve -40\r\nKPX Ucircumflex Acircumflex -40\r\nKPX Ucircumflex Adieresis -40\r\nKPX Ucircumflex Agrave -40\r\nKPX Ucircumflex Amacron -40\r\nKPX Ucircumflex Aogonek -40\r\nKPX Ucircumflex Aring -40\r\nKPX Ucircumflex Atilde -40\r\nKPX Ucircumflex comma -40\r\nKPX Ucircumflex period -40\r\nKPX Udieresis A -40\r\nKPX Udieresis Aacute -40\r\nKPX Udieresis Abreve -40\r\nKPX Udieresis Acircumflex -40\r\nKPX Udieresis Adieresis -40\r\nKPX Udieresis Agrave -40\r\nKPX Udieresis Amacron -40\r\nKPX Udieresis Aogonek -40\r\nKPX Udieresis Aring -40\r\nKPX Udieresis Atilde -40\r\nKPX Udieresis comma -40\r\nKPX Udieresis period -40\r\nKPX Ugrave A -40\r\nKPX Ugrave Aacute -40\r\nKPX Ugrave Abreve -40\r\nKPX Ugrave Acircumflex -40\r\nKPX Ugrave Adieresis -40\r\nKPX Ugrave Agrave -40\r\nKPX Ugrave Amacron -40\r\nKPX Ugrave Aogonek -40\r\nKPX Ugrave Aring -40\r\nKPX Ugrave Atilde -40\r\nKPX Ugrave comma -40\r\nKPX Ugrave period -40\r\nKPX Uhungarumlaut A -40\r\nKPX Uhungarumlaut Aacute -40\r\nKPX Uhungarumlaut Abreve -40\r\nKPX Uhungarumlaut Acircumflex -40\r\nKPX Uhungarumlaut Adieresis -40\r\nKPX Uhungarumlaut Agrave -40\r\nKPX Uhungarumlaut Amacron -40\r\nKPX Uhungarumlaut Aogonek -40\r\nKPX Uhungarumlaut Aring -40\r\nKPX Uhungarumlaut Atilde -40\r\nKPX Uhungarumlaut comma -40\r\nKPX Uhungarumlaut period -40\r\nKPX Umacron A -40\r\nKPX Umacron Aacute -40\r\nKPX Umacron Abreve -40\r\nKPX Umacron Acircumflex -40\r\nKPX Umacron Adieresis -40\r\nKPX Umacron Agrave -40\r\nKPX Umacron Amacron -40\r\nKPX Umacron Aogonek -40\r\nKPX Umacron Aring -40\r\nKPX Umacron Atilde -40\r\nKPX Umacron comma -40\r\nKPX Umacron period -40\r\nKPX Uogonek A -40\r\nKPX Uogonek Aacute -40\r\nKPX Uogonek Abreve -40\r\nKPX Uogonek Acircumflex -40\r\nKPX Uogonek Adieresis -40\r\nKPX Uogonek Agrave -40\r\nKPX Uogonek Amacron -40\r\nKPX Uogonek Aogonek -40\r\nKPX Uogonek Aring -40\r\nKPX Uogonek Atilde -40\r\nKPX Uogonek comma -40\r\nKPX Uogonek period -40\r\nKPX Uring A -40\r\nKPX Uring Aacute -40\r\nKPX Uring Abreve -40\r\nKPX Uring Acircumflex -40\r\nKPX Uring Adieresis -40\r\nKPX Uring Agrave -40\r\nKPX Uring Amacron -40\r\nKPX Uring Aogonek -40\r\nKPX Uring Aring -40\r\nKPX Uring Atilde -40\r\nKPX Uring comma -40\r\nKPX Uring period -40\r\nKPX V A -80\r\nKPX V Aacute -80\r\nKPX V Abreve -80\r\nKPX V Acircumflex -80\r\nKPX V Adieresis -80\r\nKPX V Agrave -80\r\nKPX V Amacron -80\r\nKPX V Aogonek -80\r\nKPX V Aring -80\r\nKPX V Atilde -80\r\nKPX V G -40\r\nKPX V Gbreve -40\r\nKPX V Gcommaaccent -40\r\nKPX V O -40\r\nKPX V Oacute -40\r\nKPX V Ocircumflex -40\r\nKPX V Odieresis -40\r\nKPX V Ograve -40\r\nKPX V Ohungarumlaut -40\r\nKPX V Omacron -40\r\nKPX V Oslash -40\r\nKPX V Otilde -40\r\nKPX V a -70\r\nKPX V aacute -70\r\nKPX V abreve -70\r\nKPX V acircumflex -70\r\nKPX V adieresis -70\r\nKPX V agrave -70\r\nKPX V amacron -70\r\nKPX V aogonek -70\r\nKPX V aring -70\r\nKPX V atilde -70\r\nKPX V colon -40\r\nKPX V comma -125\r\nKPX V e -80\r\nKPX V eacute -80\r\nKPX V ecaron -80\r\nKPX V ecircumflex -80\r\nKPX V edieresis -80\r\nKPX V edotaccent -80\r\nKPX V egrave -80\r\nKPX V emacron -80\r\nKPX V eogonek -80\r\nKPX V hyphen -80\r\nKPX V o -80\r\nKPX V oacute -80\r\nKPX V ocircumflex -80\r\nKPX V odieresis -80\r\nKPX V ograve -80\r\nKPX V ohungarumlaut -80\r\nKPX V omacron -80\r\nKPX V oslash -80\r\nKPX V otilde -80\r\nKPX V period -125\r\nKPX V semicolon -40\r\nKPX V u -70\r\nKPX V uacute -70\r\nKPX V ucircumflex -70\r\nKPX V udieresis -70\r\nKPX V ugrave -70\r\nKPX V uhungarumlaut -70\r\nKPX V umacron -70\r\nKPX V uogonek -70\r\nKPX V uring -70\r\nKPX W A -50\r\nKPX W Aacute -50\r\nKPX W Abreve -50\r\nKPX W Acircumflex -50\r\nKPX W Adieresis -50\r\nKPX W Agrave -50\r\nKPX W Amacron -50\r\nKPX W Aogonek -50\r\nKPX W Aring -50\r\nKPX W Atilde -50\r\nKPX W O -20\r\nKPX W Oacute -20\r\nKPX W Ocircumflex -20\r\nKPX W Odieresis -20\r\nKPX W Ograve -20\r\nKPX W Ohungarumlaut -20\r\nKPX W Omacron -20\r\nKPX W Oslash -20\r\nKPX W Otilde -20\r\nKPX W a -40\r\nKPX W aacute -40\r\nKPX W abreve -40\r\nKPX W acircumflex -40\r\nKPX W adieresis -40\r\nKPX W agrave -40\r\nKPX W amacron -40\r\nKPX W aogonek -40\r\nKPX W aring -40\r\nKPX W atilde -40\r\nKPX W comma -80\r\nKPX W e -30\r\nKPX W eacute -30\r\nKPX W ecaron -30\r\nKPX W ecircumflex -30\r\nKPX W edieresis -30\r\nKPX W edotaccent -30\r\nKPX W egrave -30\r\nKPX W emacron -30\r\nKPX W eogonek -30\r\nKPX W hyphen -40\r\nKPX W o -30\r\nKPX W oacute -30\r\nKPX W ocircumflex -30\r\nKPX W odieresis -30\r\nKPX W ograve -30\r\nKPX W ohungarumlaut -30\r\nKPX W omacron -30\r\nKPX W oslash -30\r\nKPX W otilde -30\r\nKPX W period -80\r\nKPX W u -30\r\nKPX W uacute -30\r\nKPX W ucircumflex -30\r\nKPX W udieresis -30\r\nKPX W ugrave -30\r\nKPX W uhungarumlaut -30\r\nKPX W umacron -30\r\nKPX W uogonek -30\r\nKPX W uring -30\r\nKPX W y -20\r\nKPX W yacute -20\r\nKPX W ydieresis -20\r\nKPX Y A -110\r\nKPX Y Aacute -110\r\nKPX Y Abreve -110\r\nKPX Y Acircumflex -110\r\nKPX Y Adieresis -110\r\nKPX Y Agrave -110\r\nKPX Y Amacron -110\r\nKPX Y Aogonek -110\r\nKPX Y Aring -110\r\nKPX Y Atilde -110\r\nKPX Y O -85\r\nKPX Y Oacute -85\r\nKPX Y Ocircumflex -85\r\nKPX Y Odieresis -85\r\nKPX Y Ograve -85\r\nKPX Y Ohungarumlaut -85\r\nKPX Y Omacron -85\r\nKPX Y Oslash -85\r\nKPX Y Otilde -85\r\nKPX Y a -140\r\nKPX Y aacute -140\r\nKPX Y abreve -70\r\nKPX Y acircumflex -140\r\nKPX Y adieresis -140\r\nKPX Y agrave -140\r\nKPX Y amacron -70\r\nKPX Y aogonek -140\r\nKPX Y aring -140\r\nKPX Y atilde -140\r\nKPX Y colon -60\r\nKPX Y comma -140\r\nKPX Y e -140\r\nKPX Y eacute -140\r\nKPX Y ecaron -140\r\nKPX Y ecircumflex -140\r\nKPX Y edieresis -140\r\nKPX Y edotaccent -140\r\nKPX Y egrave -140\r\nKPX Y emacron -70\r\nKPX Y eogonek -140\r\nKPX Y hyphen -140\r\nKPX Y i -20\r\nKPX Y iacute -20\r\nKPX Y iogonek -20\r\nKPX Y o -140\r\nKPX Y oacute -140\r\nKPX Y ocircumflex -140\r\nKPX Y odieresis -140\r\nKPX Y ograve -140\r\nKPX Y ohungarumlaut -140\r\nKPX Y omacron -140\r\nKPX Y oslash -140\r\nKPX Y otilde -140\r\nKPX Y period -140\r\nKPX Y semicolon -60\r\nKPX Y u -110\r\nKPX Y uacute -110\r\nKPX Y ucircumflex -110\r\nKPX Y udieresis -110\r\nKPX Y ugrave -110\r\nKPX Y uhungarumlaut -110\r\nKPX Y umacron -110\r\nKPX Y uogonek -110\r\nKPX Y uring -110\r\nKPX Yacute A -110\r\nKPX Yacute Aacute -110\r\nKPX Yacute Abreve -110\r\nKPX Yacute Acircumflex -110\r\nKPX Yacute Adieresis -110\r\nKPX Yacute Agrave -110\r\nKPX Yacute Amacron -110\r\nKPX Yacute Aogonek -110\r\nKPX Yacute Aring -110\r\nKPX Yacute Atilde -110\r\nKPX Yacute O -85\r\nKPX Yacute Oacute -85\r\nKPX Yacute Ocircumflex -85\r\nKPX Yacute Odieresis -85\r\nKPX Yacute Ograve -85\r\nKPX Yacute Ohungarumlaut -85\r\nKPX Yacute Omacron -85\r\nKPX Yacute Oslash -85\r\nKPX Yacute Otilde -85\r\nKPX Yacute a -140\r\nKPX Yacute aacute -140\r\nKPX Yacute abreve -70\r\nKPX Yacute acircumflex -140\r\nKPX Yacute adieresis -140\r\nKPX Yacute agrave -140\r\nKPX Yacute amacron -70\r\nKPX Yacute aogonek -140\r\nKPX Yacute aring -140\r\nKPX Yacute atilde -70\r\nKPX Yacute colon -60\r\nKPX Yacute comma -140\r\nKPX Yacute e -140\r\nKPX Yacute eacute -140\r\nKPX Yacute ecaron -140\r\nKPX Yacute ecircumflex -140\r\nKPX Yacute edieresis -140\r\nKPX Yacute edotaccent -140\r\nKPX Yacute egrave -140\r\nKPX Yacute emacron -70\r\nKPX Yacute eogonek -140\r\nKPX Yacute hyphen -140\r\nKPX Yacute i -20\r\nKPX Yacute iacute -20\r\nKPX Yacute iogonek -20\r\nKPX Yacute o -140\r\nKPX Yacute oacute -140\r\nKPX Yacute ocircumflex -140\r\nKPX Yacute odieresis -140\r\nKPX Yacute ograve -140\r\nKPX Yacute ohungarumlaut -140\r\nKPX Yacute omacron -70\r\nKPX Yacute oslash -140\r\nKPX Yacute otilde -140\r\nKPX Yacute period -140\r\nKPX Yacute semicolon -60\r\nKPX Yacute u -110\r\nKPX Yacute uacute -110\r\nKPX Yacute ucircumflex -110\r\nKPX Yacute udieresis -110\r\nKPX Yacute ugrave -110\r\nKPX Yacute uhungarumlaut -110\r\nKPX Yacute umacron -110\r\nKPX Yacute uogonek -110\r\nKPX Yacute uring -110\r\nKPX Ydieresis A -110\r\nKPX Ydieresis Aacute -110\r\nKPX Ydieresis Abreve -110\r\nKPX Ydieresis Acircumflex -110\r\nKPX Ydieresis Adieresis -110\r\nKPX Ydieresis Agrave -110\r\nKPX Ydieresis Amacron -110\r\nKPX Ydieresis Aogonek -110\r\nKPX Ydieresis Aring -110\r\nKPX Ydieresis Atilde -110\r\nKPX Ydieresis O -85\r\nKPX Ydieresis Oacute -85\r\nKPX Ydieresis Ocircumflex -85\r\nKPX Ydieresis Odieresis -85\r\nKPX Ydieresis Ograve -85\r\nKPX Ydieresis Ohungarumlaut -85\r\nKPX Ydieresis Omacron -85\r\nKPX Ydieresis Oslash -85\r\nKPX Ydieresis Otilde -85\r\nKPX Ydieresis a -140\r\nKPX Ydieresis aacute -140\r\nKPX Ydieresis abreve -70\r\nKPX Ydieresis acircumflex -140\r\nKPX Ydieresis adieresis -140\r\nKPX Ydieresis agrave -140\r\nKPX Ydieresis amacron -70\r\nKPX Ydieresis aogonek -140\r\nKPX Ydieresis aring -140\r\nKPX Ydieresis atilde -70\r\nKPX Ydieresis colon -60\r\nKPX Ydieresis comma -140\r\nKPX Ydieresis e -140\r\nKPX Ydieresis eacute -140\r\nKPX Ydieresis ecaron -140\r\nKPX Ydieresis ecircumflex -140\r\nKPX Ydieresis edieresis -140\r\nKPX Ydieresis edotaccent -140\r\nKPX Ydieresis egrave -140\r\nKPX Ydieresis emacron -70\r\nKPX Ydieresis eogonek -140\r\nKPX Ydieresis hyphen -140\r\nKPX Ydieresis i -20\r\nKPX Ydieresis iacute -20\r\nKPX Ydieresis iogonek -20\r\nKPX Ydieresis o -140\r\nKPX Ydieresis oacute -140\r\nKPX Ydieresis ocircumflex -140\r\nKPX Ydieresis odieresis -140\r\nKPX Ydieresis ograve -140\r\nKPX Ydieresis ohungarumlaut -140\r\nKPX Ydieresis omacron -140\r\nKPX Ydieresis oslash -140\r\nKPX Ydieresis otilde -140\r\nKPX Ydieresis period -140\r\nKPX Ydieresis semicolon -60\r\nKPX Ydieresis u -110\r\nKPX Ydieresis uacute -110\r\nKPX Ydieresis ucircumflex -110\r\nKPX Ydieresis udieresis -110\r\nKPX Ydieresis ugrave -110\r\nKPX Ydieresis uhungarumlaut -110\r\nKPX Ydieresis umacron -110\r\nKPX Ydieresis uogonek -110\r\nKPX Ydieresis uring -110\r\nKPX a v -20\r\nKPX a w -20\r\nKPX a y -30\r\nKPX a yacute -30\r\nKPX a ydieresis -30\r\nKPX aacute v -20\r\nKPX aacute w -20\r\nKPX aacute y -30\r\nKPX aacute yacute -30\r\nKPX aacute ydieresis -30\r\nKPX abreve v -20\r\nKPX abreve w -20\r\nKPX abreve y -30\r\nKPX abreve yacute -30\r\nKPX abreve ydieresis -30\r\nKPX acircumflex v -20\r\nKPX acircumflex w -20\r\nKPX acircumflex y -30\r\nKPX acircumflex yacute -30\r\nKPX acircumflex ydieresis -30\r\nKPX adieresis v -20\r\nKPX adieresis w -20\r\nKPX adieresis y -30\r\nKPX adieresis yacute -30\r\nKPX adieresis ydieresis -30\r\nKPX agrave v -20\r\nKPX agrave w -20\r\nKPX agrave y -30\r\nKPX agrave yacute -30\r\nKPX agrave ydieresis -30\r\nKPX amacron v -20\r\nKPX amacron w -20\r\nKPX amacron y -30\r\nKPX amacron yacute -30\r\nKPX amacron ydieresis -30\r\nKPX aogonek v -20\r\nKPX aogonek w -20\r\nKPX aogonek y -30\r\nKPX aogonek yacute -30\r\nKPX aogonek ydieresis -30\r\nKPX aring v -20\r\nKPX aring w -20\r\nKPX aring y -30\r\nKPX aring yacute -30\r\nKPX aring ydieresis -30\r\nKPX atilde v -20\r\nKPX atilde w -20\r\nKPX atilde y -30\r\nKPX atilde yacute -30\r\nKPX atilde ydieresis -30\r\nKPX b b -10\r\nKPX b comma -40\r\nKPX b l -20\r\nKPX b lacute -20\r\nKPX b lcommaaccent -20\r\nKPX b lslash -20\r\nKPX b period -40\r\nKPX b u -20\r\nKPX b uacute -20\r\nKPX b ucircumflex -20\r\nKPX b udieresis -20\r\nKPX b ugrave -20\r\nKPX b uhungarumlaut -20\r\nKPX b umacron -20\r\nKPX b uogonek -20\r\nKPX b uring -20\r\nKPX b v -20\r\nKPX b y -20\r\nKPX b yacute -20\r\nKPX b ydieresis -20\r\nKPX c comma -15\r\nKPX c k -20\r\nKPX c kcommaaccent -20\r\nKPX cacute comma -15\r\nKPX cacute k -20\r\nKPX cacute kcommaaccent -20\r\nKPX ccaron comma -15\r\nKPX ccaron k -20\r\nKPX ccaron kcommaaccent -20\r\nKPX ccedilla comma -15\r\nKPX ccedilla k -20\r\nKPX ccedilla kcommaaccent -20\r\nKPX colon space -50\r\nKPX comma quotedblright -100\r\nKPX comma quoteright -100\r\nKPX e comma -15\r\nKPX e period -15\r\nKPX e v -30\r\nKPX e w -20\r\nKPX e x -30\r\nKPX e y -20\r\nKPX e yacute -20\r\nKPX e ydieresis -20\r\nKPX eacute comma -15\r\nKPX eacute period -15\r\nKPX eacute v -30\r\nKPX eacute w -20\r\nKPX eacute x -30\r\nKPX eacute y -20\r\nKPX eacute yacute -20\r\nKPX eacute ydieresis -20\r\nKPX ecaron comma -15\r\nKPX ecaron period -15\r\nKPX ecaron v -30\r\nKPX ecaron w -20\r\nKPX ecaron x -30\r\nKPX ecaron y -20\r\nKPX ecaron yacute -20\r\nKPX ecaron ydieresis -20\r\nKPX ecircumflex comma -15\r\nKPX ecircumflex period -15\r\nKPX ecircumflex v -30\r\nKPX ecircumflex w -20\r\nKPX ecircumflex x -30\r\nKPX ecircumflex y -20\r\nKPX ecircumflex yacute -20\r\nKPX ecircumflex ydieresis -20\r\nKPX edieresis comma -15\r\nKPX edieresis period -15\r\nKPX edieresis v -30\r\nKPX edieresis w -20\r\nKPX edieresis x -30\r\nKPX edieresis y -20\r\nKPX edieresis yacute -20\r\nKPX edieresis ydieresis -20\r\nKPX edotaccent comma -15\r\nKPX edotaccent period -15\r\nKPX edotaccent v -30\r\nKPX edotaccent w -20\r\nKPX edotaccent x -30\r\nKPX edotaccent y -20\r\nKPX edotaccent yacute -20\r\nKPX edotaccent ydieresis -20\r\nKPX egrave comma -15\r\nKPX egrave period -15\r\nKPX egrave v -30\r\nKPX egrave w -20\r\nKPX egrave x -30\r\nKPX egrave y -20\r\nKPX egrave yacute -20\r\nKPX egrave ydieresis -20\r\nKPX emacron comma -15\r\nKPX emacron period -15\r\nKPX emacron v -30\r\nKPX emacron w -20\r\nKPX emacron x -30\r\nKPX emacron y -20\r\nKPX emacron yacute -20\r\nKPX emacron ydieresis -20\r\nKPX eogonek comma -15\r\nKPX eogonek period -15\r\nKPX eogonek v -30\r\nKPX eogonek w -20\r\nKPX eogonek x -30\r\nKPX eogonek y -20\r\nKPX eogonek yacute -20\r\nKPX eogonek ydieresis -20\r\nKPX f a -30\r\nKPX f aacute -30\r\nKPX f abreve -30\r\nKPX f acircumflex -30\r\nKPX f adieresis -30\r\nKPX f agrave -30\r\nKPX f amacron -30\r\nKPX f aogonek -30\r\nKPX f aring -30\r\nKPX f atilde -30\r\nKPX f comma -30\r\nKPX f dotlessi -28\r\nKPX f e -30\r\nKPX f eacute -30\r\nKPX f ecaron -30\r\nKPX f ecircumflex -30\r\nKPX f edieresis -30\r\nKPX f edotaccent -30\r\nKPX f egrave -30\r\nKPX f emacron -30\r\nKPX f eogonek -30\r\nKPX f o -30\r\nKPX f oacute -30\r\nKPX f ocircumflex -30\r\nKPX f odieresis -30\r\nKPX f ograve -30\r\nKPX f ohungarumlaut -30\r\nKPX f omacron -30\r\nKPX f oslash -30\r\nKPX f otilde -30\r\nKPX f period -30\r\nKPX f quotedblright 60\r\nKPX f quoteright 50\r\nKPX g r -10\r\nKPX g racute -10\r\nKPX g rcaron -10\r\nKPX g rcommaaccent -10\r\nKPX gbreve r -10\r\nKPX gbreve racute -10\r\nKPX gbreve rcaron -10\r\nKPX gbreve rcommaaccent -10\r\nKPX gcommaaccent r -10\r\nKPX gcommaaccent racute -10\r\nKPX gcommaaccent rcaron -10\r\nKPX gcommaaccent rcommaaccent -10\r\nKPX h y -30\r\nKPX h yacute -30\r\nKPX h ydieresis -30\r\nKPX k e -20\r\nKPX k eacute -20\r\nKPX k ecaron -20\r\nKPX k ecircumflex -20\r\nKPX k edieresis -20\r\nKPX k edotaccent -20\r\nKPX k egrave -20\r\nKPX k emacron -20\r\nKPX k eogonek -20\r\nKPX k o -20\r\nKPX k oacute -20\r\nKPX k ocircumflex -20\r\nKPX k odieresis -20\r\nKPX k ograve -20\r\nKPX k ohungarumlaut -20\r\nKPX k omacron -20\r\nKPX k oslash -20\r\nKPX k otilde -20\r\nKPX kcommaaccent e -20\r\nKPX kcommaaccent eacute -20\r\nKPX kcommaaccent ecaron -20\r\nKPX kcommaaccent ecircumflex -20\r\nKPX kcommaaccent edieresis -20\r\nKPX kcommaaccent edotaccent -20\r\nKPX kcommaaccent egrave -20\r\nKPX kcommaaccent emacron -20\r\nKPX kcommaaccent eogonek -20\r\nKPX kcommaaccent o -20\r\nKPX kcommaaccent oacute -20\r\nKPX kcommaaccent ocircumflex -20\r\nKPX kcommaaccent odieresis -20\r\nKPX kcommaaccent ograve -20\r\nKPX kcommaaccent ohungarumlaut -20\r\nKPX kcommaaccent omacron -20\r\nKPX kcommaaccent oslash -20\r\nKPX kcommaaccent otilde -20\r\nKPX m u -10\r\nKPX m uacute -10\r\nKPX m ucircumflex -10\r\nKPX m udieresis -10\r\nKPX m ugrave -10\r\nKPX m uhungarumlaut -10\r\nKPX m umacron -10\r\nKPX m uogonek -10\r\nKPX m uring -10\r\nKPX m y -15\r\nKPX m yacute -15\r\nKPX m ydieresis -15\r\nKPX n u -10\r\nKPX n uacute -10\r\nKPX n ucircumflex -10\r\nKPX n udieresis -10\r\nKPX n ugrave -10\r\nKPX n uhungarumlaut -10\r\nKPX n umacron -10\r\nKPX n uogonek -10\r\nKPX n uring -10\r\nKPX n v -20\r\nKPX n y -15\r\nKPX n yacute -15\r\nKPX n ydieresis -15\r\nKPX nacute u -10\r\nKPX nacute uacute -10\r\nKPX nacute ucircumflex -10\r\nKPX nacute udieresis -10\r\nKPX nacute ugrave -10\r\nKPX nacute uhungarumlaut -10\r\nKPX nacute umacron -10\r\nKPX nacute uogonek -10\r\nKPX nacute uring -10\r\nKPX nacute v -20\r\nKPX nacute y -15\r\nKPX nacute yacute -15\r\nKPX nacute ydieresis -15\r\nKPX ncaron u -10\r\nKPX ncaron uacute -10\r\nKPX ncaron ucircumflex -10\r\nKPX ncaron udieresis -10\r\nKPX ncaron ugrave -10\r\nKPX ncaron uhungarumlaut -10\r\nKPX ncaron umacron -10\r\nKPX ncaron uogonek -10\r\nKPX ncaron uring -10\r\nKPX ncaron v -20\r\nKPX ncaron y -15\r\nKPX ncaron yacute -15\r\nKPX ncaron ydieresis -15\r\nKPX ncommaaccent u -10\r\nKPX ncommaaccent uacute -10\r\nKPX ncommaaccent ucircumflex -10\r\nKPX ncommaaccent udieresis -10\r\nKPX ncommaaccent ugrave -10\r\nKPX ncommaaccent uhungarumlaut -10\r\nKPX ncommaaccent umacron -10\r\nKPX ncommaaccent uogonek -10\r\nKPX ncommaaccent uring -10\r\nKPX ncommaaccent v -20\r\nKPX ncommaaccent y -15\r\nKPX ncommaaccent yacute -15\r\nKPX ncommaaccent ydieresis -15\r\nKPX ntilde u -10\r\nKPX ntilde uacute -10\r\nKPX ntilde ucircumflex -10\r\nKPX ntilde udieresis -10\r\nKPX ntilde ugrave -10\r\nKPX ntilde uhungarumlaut -10\r\nKPX ntilde umacron -10\r\nKPX ntilde uogonek -10\r\nKPX ntilde uring -10\r\nKPX ntilde v -20\r\nKPX ntilde y -15\r\nKPX ntilde yacute -15\r\nKPX ntilde ydieresis -15\r\nKPX o comma -40\r\nKPX o period -40\r\nKPX o v -15\r\nKPX o w -15\r\nKPX o x -30\r\nKPX o y -30\r\nKPX o yacute -30\r\nKPX o ydieresis -30\r\nKPX oacute comma -40\r\nKPX oacute period -40\r\nKPX oacute v -15\r\nKPX oacute w -15\r\nKPX oacute x -30\r\nKPX oacute y -30\r\nKPX oacute yacute -30\r\nKPX oacute ydieresis -30\r\nKPX ocircumflex comma -40\r\nKPX ocircumflex period -40\r\nKPX ocircumflex v -15\r\nKPX ocircumflex w -15\r\nKPX ocircumflex x -30\r\nKPX ocircumflex y -30\r\nKPX ocircumflex yacute -30\r\nKPX ocircumflex ydieresis -30\r\nKPX odieresis comma -40\r\nKPX odieresis period -40\r\nKPX odieresis v -15\r\nKPX odieresis w -15\r\nKPX odieresis x -30\r\nKPX odieresis y -30\r\nKPX odieresis yacute -30\r\nKPX odieresis ydieresis -30\r\nKPX ograve comma -40\r\nKPX ograve period -40\r\nKPX ograve v -15\r\nKPX ograve w -15\r\nKPX ograve x -30\r\nKPX ograve y -30\r\nKPX ograve yacute -30\r\nKPX ograve ydieresis -30\r\nKPX ohungarumlaut comma -40\r\nKPX ohungarumlaut period -40\r\nKPX ohungarumlaut v -15\r\nKPX ohungarumlaut w -15\r\nKPX ohungarumlaut x -30\r\nKPX ohungarumlaut y -30\r\nKPX ohungarumlaut yacute -30\r\nKPX ohungarumlaut ydieresis -30\r\nKPX omacron comma -40\r\nKPX omacron period -40\r\nKPX omacron v -15\r\nKPX omacron w -15\r\nKPX omacron x -30\r\nKPX omacron y -30\r\nKPX omacron yacute -30\r\nKPX omacron ydieresis -30\r\nKPX oslash a -55\r\nKPX oslash aacute -55\r\nKPX oslash abreve -55\r\nKPX oslash acircumflex -55\r\nKPX oslash adieresis -55\r\nKPX oslash agrave -55\r\nKPX oslash amacron -55\r\nKPX oslash aogonek -55\r\nKPX oslash aring -55\r\nKPX oslash atilde -55\r\nKPX oslash b -55\r\nKPX oslash c -55\r\nKPX oslash cacute -55\r\nKPX oslash ccaron -55\r\nKPX oslash ccedilla -55\r\nKPX oslash comma -95\r\nKPX oslash d -55\r\nKPX oslash dcroat -55\r\nKPX oslash e -55\r\nKPX oslash eacute -55\r\nKPX oslash ecaron -55\r\nKPX oslash ecircumflex -55\r\nKPX oslash edieresis -55\r\nKPX oslash edotaccent -55\r\nKPX oslash egrave -55\r\nKPX oslash emacron -55\r\nKPX oslash eogonek -55\r\nKPX oslash f -55\r\nKPX oslash g -55\r\nKPX oslash gbreve -55\r\nKPX oslash gcommaaccent -55\r\nKPX oslash h -55\r\nKPX oslash i -55\r\nKPX oslash iacute -55\r\nKPX oslash icircumflex -55\r\nKPX oslash idieresis -55\r\nKPX oslash igrave -55\r\nKPX oslash imacron -55\r\nKPX oslash iogonek -55\r\nKPX oslash j -55\r\nKPX oslash k -55\r\nKPX oslash kcommaaccent -55\r\nKPX oslash l -55\r\nKPX oslash lacute -55\r\nKPX oslash lcommaaccent -55\r\nKPX oslash lslash -55\r\nKPX oslash m -55\r\nKPX oslash n -55\r\nKPX oslash nacute -55\r\nKPX oslash ncaron -55\r\nKPX oslash ncommaaccent -55\r\nKPX oslash ntilde -55\r\nKPX oslash o -55\r\nKPX oslash oacute -55\r\nKPX oslash ocircumflex -55\r\nKPX oslash odieresis -55\r\nKPX oslash ograve -55\r\nKPX oslash ohungarumlaut -55\r\nKPX oslash omacron -55\r\nKPX oslash oslash -55\r\nKPX oslash otilde -55\r\nKPX oslash p -55\r\nKPX oslash period -95\r\nKPX oslash q -55\r\nKPX oslash r -55\r\nKPX oslash racute -55\r\nKPX oslash rcaron -55\r\nKPX oslash rcommaaccent -55\r\nKPX oslash s -55\r\nKPX oslash sacute -55\r\nKPX oslash scaron -55\r\nKPX oslash scedilla -55\r\nKPX oslash scommaaccent -55\r\nKPX oslash t -55\r\nKPX oslash tcommaaccent -55\r\nKPX oslash u -55\r\nKPX oslash uacute -55\r\nKPX oslash ucircumflex -55\r\nKPX oslash udieresis -55\r\nKPX oslash ugrave -55\r\nKPX oslash uhungarumlaut -55\r\nKPX oslash umacron -55\r\nKPX oslash uogonek -55\r\nKPX oslash uring -55\r\nKPX oslash v -70\r\nKPX oslash w -70\r\nKPX oslash x -85\r\nKPX oslash y -70\r\nKPX oslash yacute -70\r\nKPX oslash ydieresis -70\r\nKPX oslash z -55\r\nKPX oslash zacute -55\r\nKPX oslash zcaron -55\r\nKPX oslash zdotaccent -55\r\nKPX otilde comma -40\r\nKPX otilde period -40\r\nKPX otilde v -15\r\nKPX otilde w -15\r\nKPX otilde x -30\r\nKPX otilde y -30\r\nKPX otilde yacute -30\r\nKPX otilde ydieresis -30\r\nKPX p comma -35\r\nKPX p period -35\r\nKPX p y -30\r\nKPX p yacute -30\r\nKPX p ydieresis -30\r\nKPX period quotedblright -100\r\nKPX period quoteright -100\r\nKPX period space -60\r\nKPX quotedblright space -40\r\nKPX quoteleft quoteleft -57\r\nKPX quoteright d -50\r\nKPX quoteright dcroat -50\r\nKPX quoteright quoteright -57\r\nKPX quoteright r -50\r\nKPX quoteright racute -50\r\nKPX quoteright rcaron -50\r\nKPX quoteright rcommaaccent -50\r\nKPX quoteright s -50\r\nKPX quoteright sacute -50\r\nKPX quoteright scaron -50\r\nKPX quoteright scedilla -50\r\nKPX quoteright scommaaccent -50\r\nKPX quoteright space -70\r\nKPX r a -10\r\nKPX r aacute -10\r\nKPX r abreve -10\r\nKPX r acircumflex -10\r\nKPX r adieresis -10\r\nKPX r agrave -10\r\nKPX r amacron -10\r\nKPX r aogonek -10\r\nKPX r aring -10\r\nKPX r atilde -10\r\nKPX r colon 30\r\nKPX r comma -50\r\nKPX r i 15\r\nKPX r iacute 15\r\nKPX r icircumflex 15\r\nKPX r idieresis 15\r\nKPX r igrave 15\r\nKPX r imacron 15\r\nKPX r iogonek 15\r\nKPX r k 15\r\nKPX r kcommaaccent 15\r\nKPX r l 15\r\nKPX r lacute 15\r\nKPX r lcommaaccent 15\r\nKPX r lslash 15\r\nKPX r m 25\r\nKPX r n 25\r\nKPX r nacute 25\r\nKPX r ncaron 25\r\nKPX r ncommaaccent 25\r\nKPX r ntilde 25\r\nKPX r p 30\r\nKPX r period -50\r\nKPX r semicolon 30\r\nKPX r t 40\r\nKPX r tcommaaccent 40\r\nKPX r u 15\r\nKPX r uacute 15\r\nKPX r ucircumflex 15\r\nKPX r udieresis 15\r\nKPX r ugrave 15\r\nKPX r uhungarumlaut 15\r\nKPX r umacron 15\r\nKPX r uogonek 15\r\nKPX r uring 15\r\nKPX r v 30\r\nKPX r y 30\r\nKPX r yacute 30\r\nKPX r ydieresis 30\r\nKPX racute a -10\r\nKPX racute aacute -10\r\nKPX racute abreve -10\r\nKPX racute acircumflex -10\r\nKPX racute adieresis -10\r\nKPX racute agrave -10\r\nKPX racute amacron -10\r\nKPX racute aogonek -10\r\nKPX racute aring -10\r\nKPX racute atilde -10\r\nKPX racute colon 30\r\nKPX racute comma -50\r\nKPX racute i 15\r\nKPX racute iacute 15\r\nKPX racute icircumflex 15\r\nKPX racute idieresis 15\r\nKPX racute igrave 15\r\nKPX racute imacron 15\r\nKPX racute iogonek 15\r\nKPX racute k 15\r\nKPX racute kcommaaccent 15\r\nKPX racute l 15\r\nKPX racute lacute 15\r\nKPX racute lcommaaccent 15\r\nKPX racute lslash 15\r\nKPX racute m 25\r\nKPX racute n 25\r\nKPX racute nacute 25\r\nKPX racute ncaron 25\r\nKPX racute ncommaaccent 25\r\nKPX racute ntilde 25\r\nKPX racute p 30\r\nKPX racute period -50\r\nKPX racute semicolon 30\r\nKPX racute t 40\r\nKPX racute tcommaaccent 40\r\nKPX racute u 15\r\nKPX racute uacute 15\r\nKPX racute ucircumflex 15\r\nKPX racute udieresis 15\r\nKPX racute ugrave 15\r\nKPX racute uhungarumlaut 15\r\nKPX racute umacron 15\r\nKPX racute uogonek 15\r\nKPX racute uring 15\r\nKPX racute v 30\r\nKPX racute y 30\r\nKPX racute yacute 30\r\nKPX racute ydieresis 30\r\nKPX rcaron a -10\r\nKPX rcaron aacute -10\r\nKPX rcaron abreve -10\r\nKPX rcaron acircumflex -10\r\nKPX rcaron adieresis -10\r\nKPX rcaron agrave -10\r\nKPX rcaron amacron -10\r\nKPX rcaron aogonek -10\r\nKPX rcaron aring -10\r\nKPX rcaron atilde -10\r\nKPX rcaron colon 30\r\nKPX rcaron comma -50\r\nKPX rcaron i 15\r\nKPX rcaron iacute 15\r\nKPX rcaron icircumflex 15\r\nKPX rcaron idieresis 15\r\nKPX rcaron igrave 15\r\nKPX rcaron imacron 15\r\nKPX rcaron iogonek 15\r\nKPX rcaron k 15\r\nKPX rcaron kcommaaccent 15\r\nKPX rcaron l 15\r\nKPX rcaron lacute 15\r\nKPX rcaron lcommaaccent 15\r\nKPX rcaron lslash 15\r\nKPX rcaron m 25\r\nKPX rcaron n 25\r\nKPX rcaron nacute 25\r\nKPX rcaron ncaron 25\r\nKPX rcaron ncommaaccent 25\r\nKPX rcaron ntilde 25\r\nKPX rcaron p 30\r\nKPX rcaron period -50\r\nKPX rcaron semicolon 30\r\nKPX rcaron t 40\r\nKPX rcaron tcommaaccent 40\r\nKPX rcaron u 15\r\nKPX rcaron uacute 15\r\nKPX rcaron ucircumflex 15\r\nKPX rcaron udieresis 15\r\nKPX rcaron ugrave 15\r\nKPX rcaron uhungarumlaut 15\r\nKPX rcaron umacron 15\r\nKPX rcaron uogonek 15\r\nKPX rcaron uring 15\r\nKPX rcaron v 30\r\nKPX rcaron y 30\r\nKPX rcaron yacute 30\r\nKPX rcaron ydieresis 30\r\nKPX rcommaaccent a -10\r\nKPX rcommaaccent aacute -10\r\nKPX rcommaaccent abreve -10\r\nKPX rcommaaccent acircumflex -10\r\nKPX rcommaaccent adieresis -10\r\nKPX rcommaaccent agrave -10\r\nKPX rcommaaccent amacron -10\r\nKPX rcommaaccent aogonek -10\r\nKPX rcommaaccent aring -10\r\nKPX rcommaaccent atilde -10\r\nKPX rcommaaccent colon 30\r\nKPX rcommaaccent comma -50\r\nKPX rcommaaccent i 15\r\nKPX rcommaaccent iacute 15\r\nKPX rcommaaccent icircumflex 15\r\nKPX rcommaaccent idieresis 15\r\nKPX rcommaaccent igrave 15\r\nKPX rcommaaccent imacron 15\r\nKPX rcommaaccent iogonek 15\r\nKPX rcommaaccent k 15\r\nKPX rcommaaccent kcommaaccent 15\r\nKPX rcommaaccent l 15\r\nKPX rcommaaccent lacute 15\r\nKPX rcommaaccent lcommaaccent 15\r\nKPX rcommaaccent lslash 15\r\nKPX rcommaaccent m 25\r\nKPX rcommaaccent n 25\r\nKPX rcommaaccent nacute 25\r\nKPX rcommaaccent ncaron 25\r\nKPX rcommaaccent ncommaaccent 25\r\nKPX rcommaaccent ntilde 25\r\nKPX rcommaaccent p 30\r\nKPX rcommaaccent period -50\r\nKPX rcommaaccent semicolon 30\r\nKPX rcommaaccent t 40\r\nKPX rcommaaccent tcommaaccent 40\r\nKPX rcommaaccent u 15\r\nKPX rcommaaccent uacute 15\r\nKPX rcommaaccent ucircumflex 15\r\nKPX rcommaaccent udieresis 15\r\nKPX rcommaaccent ugrave 15\r\nKPX rcommaaccent uhungarumlaut 15\r\nKPX rcommaaccent umacron 15\r\nKPX rcommaaccent uogonek 15\r\nKPX rcommaaccent uring 15\r\nKPX rcommaaccent v 30\r\nKPX rcommaaccent y 30\r\nKPX rcommaaccent yacute 30\r\nKPX rcommaaccent ydieresis 30\r\nKPX s comma -15\r\nKPX s period -15\r\nKPX s w -30\r\nKPX sacute comma -15\r\nKPX sacute period -15\r\nKPX sacute w -30\r\nKPX scaron comma -15\r\nKPX scaron period -15\r\nKPX scaron w -30\r\nKPX scedilla comma -15\r\nKPX scedilla period -15\r\nKPX scedilla w -30\r\nKPX scommaaccent comma -15\r\nKPX scommaaccent period -15\r\nKPX scommaaccent w -30\r\nKPX semicolon space -50\r\nKPX space T -50\r\nKPX space Tcaron -50\r\nKPX space Tcommaaccent -50\r\nKPX space V -50\r\nKPX space W -40\r\nKPX space Y -90\r\nKPX space Yacute -90\r\nKPX space Ydieresis -90\r\nKPX space quotedblleft -30\r\nKPX space quoteleft -60\r\nKPX v a -25\r\nKPX v aacute -25\r\nKPX v abreve -25\r\nKPX v acircumflex -25\r\nKPX v adieresis -25\r\nKPX v agrave -25\r\nKPX v amacron -25\r\nKPX v aogonek -25\r\nKPX v aring -25\r\nKPX v atilde -25\r\nKPX v comma -80\r\nKPX v e -25\r\nKPX v eacute -25\r\nKPX v ecaron -25\r\nKPX v ecircumflex -25\r\nKPX v edieresis -25\r\nKPX v edotaccent -25\r\nKPX v egrave -25\r\nKPX v emacron -25\r\nKPX v eogonek -25\r\nKPX v o -25\r\nKPX v oacute -25\r\nKPX v ocircumflex -25\r\nKPX v odieresis -25\r\nKPX v ograve -25\r\nKPX v ohungarumlaut -25\r\nKPX v omacron -25\r\nKPX v oslash -25\r\nKPX v otilde -25\r\nKPX v period -80\r\nKPX w a -15\r\nKPX w aacute -15\r\nKPX w abreve -15\r\nKPX w acircumflex -15\r\nKPX w adieresis -15\r\nKPX w agrave -15\r\nKPX w amacron -15\r\nKPX w aogonek -15\r\nKPX w aring -15\r\nKPX w atilde -15\r\nKPX w comma -60\r\nKPX w e -10\r\nKPX w eacute -10\r\nKPX w ecaron -10\r\nKPX w ecircumflex -10\r\nKPX w edieresis -10\r\nKPX w edotaccent -10\r\nKPX w egrave -10\r\nKPX w emacron -10\r\nKPX w eogonek -10\r\nKPX w o -10\r\nKPX w oacute -10\r\nKPX w ocircumflex -10\r\nKPX w odieresis -10\r\nKPX w ograve -10\r\nKPX w ohungarumlaut -10\r\nKPX w omacron -10\r\nKPX w oslash -10\r\nKPX w otilde -10\r\nKPX w period -60\r\nKPX x e -30\r\nKPX x eacute -30\r\nKPX x ecaron -30\r\nKPX x ecircumflex -30\r\nKPX x edieresis -30\r\nKPX x edotaccent -30\r\nKPX x egrave -30\r\nKPX x emacron -30\r\nKPX x eogonek -30\r\nKPX y a -20\r\nKPX y aacute -20\r\nKPX y abreve -20\r\nKPX y acircumflex -20\r\nKPX y adieresis -20\r\nKPX y agrave -20\r\nKPX y amacron -20\r\nKPX y aogonek -20\r\nKPX y aring -20\r\nKPX y atilde -20\r\nKPX y comma -100\r\nKPX y e -20\r\nKPX y eacute -20\r\nKPX y ecaron -20\r\nKPX y ecircumflex -20\r\nKPX y edieresis -20\r\nKPX y edotaccent -20\r\nKPX y egrave -20\r\nKPX y emacron -20\r\nKPX y eogonek -20\r\nKPX y o -20\r\nKPX y oacute -20\r\nKPX y ocircumflex -20\r\nKPX y odieresis -20\r\nKPX y ograve -20\r\nKPX y ohungarumlaut -20\r\nKPX y omacron -20\r\nKPX y oslash -20\r\nKPX y otilde -20\r\nKPX y period -100\r\nKPX yacute a -20\r\nKPX yacute aacute -20\r\nKPX yacute abreve -20\r\nKPX yacute acircumflex -20\r\nKPX yacute adieresis -20\r\nKPX yacute agrave -20\r\nKPX yacute amacron -20\r\nKPX yacute aogonek -20\r\nKPX yacute aring -20\r\nKPX yacute atilde -20\r\nKPX yacute comma -100\r\nKPX yacute e -20\r\nKPX yacute eacute -20\r\nKPX yacute ecaron -20\r\nKPX yacute ecircumflex -20\r\nKPX yacute edieresis -20\r\nKPX yacute edotaccent -20\r\nKPX yacute egrave -20\r\nKPX yacute emacron -20\r\nKPX yacute eogonek -20\r\nKPX yacute o -20\r\nKPX yacute oacute -20\r\nKPX yacute ocircumflex -20\r\nKPX yacute odieresis -20\r\nKPX yacute ograve -20\r\nKPX yacute ohungarumlaut -20\r\nKPX yacute omacron -20\r\nKPX yacute oslash -20\r\nKPX yacute otilde -20\r\nKPX yacute period -100\r\nKPX ydieresis a -20\r\nKPX ydieresis aacute -20\r\nKPX ydieresis abreve -20\r\nKPX ydieresis acircumflex -20\r\nKPX ydieresis adieresis -20\r\nKPX ydieresis agrave -20\r\nKPX ydieresis amacron -20\r\nKPX ydieresis aogonek -20\r\nKPX ydieresis aring -20\r\nKPX ydieresis atilde -20\r\nKPX ydieresis comma -100\r\nKPX ydieresis e -20\r\nKPX ydieresis eacute -20\r\nKPX ydieresis ecaron -20\r\nKPX ydieresis ecircumflex -20\r\nKPX ydieresis edieresis -20\r\nKPX ydieresis edotaccent -20\r\nKPX ydieresis egrave -20\r\nKPX ydieresis emacron -20\r\nKPX ydieresis eogonek -20\r\nKPX ydieresis o -20\r\nKPX ydieresis oacute -20\r\nKPX ydieresis ocircumflex -20\r\nKPX ydieresis odieresis -20\r\nKPX ydieresis ograve -20\r\nKPX ydieresis ohungarumlaut -20\r\nKPX ydieresis omacron -20\r\nKPX ydieresis oslash -20\r\nKPX ydieresis otilde -20\r\nKPX ydieresis period -100\r\nKPX z e -15\r\nKPX z eacute -15\r\nKPX z ecaron -15\r\nKPX z ecircumflex -15\r\nKPX z edieresis -15\r\nKPX z edotaccent -15\r\nKPX z egrave -15\r\nKPX z emacron -15\r\nKPX z eogonek -15\r\nKPX z o -15\r\nKPX z oacute -15\r\nKPX z ocircumflex -15\r\nKPX z odieresis -15\r\nKPX z ograve -15\r\nKPX z ohungarumlaut -15\r\nKPX z omacron -15\r\nKPX z oslash -15\r\nKPX z otilde -15\r\nKPX zacute e -15\r\nKPX zacute eacute -15\r\nKPX zacute ecaron -15\r\nKPX zacute ecircumflex -15\r\nKPX zacute edieresis -15\r\nKPX zacute edotaccent -15\r\nKPX zacute egrave -15\r\nKPX zacute emacron -15\r\nKPX zacute eogonek -15\r\nKPX zacute o -15\r\nKPX zacute oacute -15\r\nKPX zacute ocircumflex -15\r\nKPX zacute odieresis -15\r\nKPX zacute ograve -15\r\nKPX zacute ohungarumlaut -15\r\nKPX zacute omacron -15\r\nKPX zacute oslash -15\r\nKPX zacute otilde -15\r\nKPX zcaron e -15\r\nKPX zcaron eacute -15\r\nKPX zcaron ecaron -15\r\nKPX zcaron ecircumflex -15\r\nKPX zcaron edieresis -15\r\nKPX zcaron edotaccent -15\r\nKPX zcaron egrave -15\r\nKPX zcaron emacron -15\r\nKPX zcaron eogonek -15\r\nKPX zcaron o -15\r\nKPX zcaron oacute -15\r\nKPX zcaron ocircumflex -15\r\nKPX zcaron odieresis -15\r\nKPX zcaron ograve -15\r\nKPX zcaron ohungarumlaut -15\r\nKPX zcaron omacron -15\r\nKPX zcaron oslash -15\r\nKPX zcaron otilde -15\r\nKPX zdotaccent e -15\r\nKPX zdotaccent eacute -15\r\nKPX zdotaccent ecaron -15\r\nKPX zdotaccent ecircumflex -15\r\nKPX zdotaccent edieresis -15\r\nKPX zdotaccent edotaccent -15\r\nKPX zdotaccent egrave -15\r\nKPX zdotaccent emacron -15\r\nKPX zdotaccent eogonek -15\r\nKPX zdotaccent o -15\r\nKPX zdotaccent oacute -15\r\nKPX zdotaccent ocircumflex -15\r\nKPX zdotaccent odieresis -15\r\nKPX zdotaccent ograve -15\r\nKPX zdotaccent ohungarumlaut -15\r\nKPX zdotaccent omacron -15\r\nKPX zdotaccent oslash -15\r\nKPX zdotaccent otilde -15\r\nEndKernPairs\r\nEndKernData\r\nEndFontMetrics\r\n";
2484 },
2485 'Helvetica-Bold'() {
2486 return "StartFontMetrics 4.1\r\nComment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 12:43:52 1997\r\nComment UniqueID 43052\r\nComment VMusage 37169 48194\r\nFontName Helvetica-Bold\r\nFullName Helvetica Bold\r\nFamilyName Helvetica\r\nWeight Bold\r\nItalicAngle 0\r\nIsFixedPitch false\r\nCharacterSet ExtendedRoman\r\nFontBBox -170 -228 1003 962 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 002.000\r\nNotice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 718\r\nXHeight 532\r\nAscender 718\r\nDescender -207\r\nStdHW 118\r\nStdVW 140\r\nStartCharMetrics 315\r\nC 32 ; WX 278 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 333 ; N exclam ; B 90 0 244 718 ;\r\nC 34 ; WX 474 ; N quotedbl ; B 98 447 376 718 ;\r\nC 35 ; WX 556 ; N numbersign ; B 18 0 538 698 ;\r\nC 36 ; WX 556 ; N dollar ; B 30 -115 523 775 ;\r\nC 37 ; WX 889 ; N percent ; B 28 -19 861 710 ;\r\nC 38 ; WX 722 ; N ampersand ; B 54 -19 701 718 ;\r\nC 39 ; WX 278 ; N quoteright ; B 69 445 209 718 ;\r\nC 40 ; WX 333 ; N parenleft ; B 35 -208 314 734 ;\r\nC 41 ; WX 333 ; N parenright ; B 19 -208 298 734 ;\r\nC 42 ; WX 389 ; N asterisk ; B 27 387 362 718 ;\r\nC 43 ; WX 584 ; N plus ; B 40 0 544 506 ;\r\nC 44 ; WX 278 ; N comma ; B 64 -168 214 146 ;\r\nC 45 ; WX 333 ; N hyphen ; B 27 215 306 345 ;\r\nC 46 ; WX 278 ; N period ; B 64 0 214 146 ;\r\nC 47 ; WX 278 ; N slash ; B -33 -19 311 737 ;\r\nC 48 ; WX 556 ; N zero ; B 32 -19 524 710 ;\r\nC 49 ; WX 556 ; N one ; B 69 0 378 710 ;\r\nC 50 ; WX 556 ; N two ; B 26 0 511 710 ;\r\nC 51 ; WX 556 ; N three ; B 27 -19 516 710 ;\r\nC 52 ; WX 556 ; N four ; B 27 0 526 710 ;\r\nC 53 ; WX 556 ; N five ; B 27 -19 516 698 ;\r\nC 54 ; WX 556 ; N six ; B 31 -19 520 710 ;\r\nC 55 ; WX 556 ; N seven ; B 25 0 528 698 ;\r\nC 56 ; WX 556 ; N eight ; B 32 -19 524 710 ;\r\nC 57 ; WX 556 ; N nine ; B 30 -19 522 710 ;\r\nC 58 ; WX 333 ; N colon ; B 92 0 242 512 ;\r\nC 59 ; WX 333 ; N semicolon ; B 92 -168 242 512 ;\r\nC 60 ; WX 584 ; N less ; B 38 -8 546 514 ;\r\nC 61 ; WX 584 ; N equal ; B 40 87 544 419 ;\r\nC 62 ; WX 584 ; N greater ; B 38 -8 546 514 ;\r\nC 63 ; WX 611 ; N question ; B 60 0 556 727 ;\r\nC 64 ; WX 975 ; N at ; B 118 -19 856 737 ;\r\nC 65 ; WX 722 ; N A ; B 20 0 702 718 ;\r\nC 66 ; WX 722 ; N B ; B 76 0 669 718 ;\r\nC 67 ; WX 722 ; N C ; B 44 -19 684 737 ;\r\nC 68 ; WX 722 ; N D ; B 76 0 685 718 ;\r\nC 69 ; WX 667 ; N E ; B 76 0 621 718 ;\r\nC 70 ; WX 611 ; N F ; B 76 0 587 718 ;\r\nC 71 ; WX 778 ; N G ; B 44 -19 713 737 ;\r\nC 72 ; WX 722 ; N H ; B 71 0 651 718 ;\r\nC 73 ; WX 278 ; N I ; B 64 0 214 718 ;\r\nC 74 ; WX 556 ; N J ; B 22 -18 484 718 ;\r\nC 75 ; WX 722 ; N K ; B 87 0 722 718 ;\r\nC 76 ; WX 611 ; N L ; B 76 0 583 718 ;\r\nC 77 ; WX 833 ; N M ; B 69 0 765 718 ;\r\nC 78 ; WX 722 ; N N ; B 69 0 654 718 ;\r\nC 79 ; WX 778 ; N O ; B 44 -19 734 737 ;\r\nC 80 ; WX 667 ; N P ; B 76 0 627 718 ;\r\nC 81 ; WX 778 ; N Q ; B 44 -52 737 737 ;\r\nC 82 ; WX 722 ; N R ; B 76 0 677 718 ;\r\nC 83 ; WX 667 ; N S ; B 39 -19 629 737 ;\r\nC 84 ; WX 611 ; N T ; B 14 0 598 718 ;\r\nC 85 ; WX 722 ; N U ; B 72 -19 651 718 ;\r\nC 86 ; WX 667 ; N V ; B 19 0 648 718 ;\r\nC 87 ; WX 944 ; N W ; B 16 0 929 718 ;\r\nC 88 ; WX 667 ; N X ; B 14 0 653 718 ;\r\nC 89 ; WX 667 ; N Y ; B 15 0 653 718 ;\r\nC 90 ; WX 611 ; N Z ; B 25 0 586 718 ;\r\nC 91 ; WX 333 ; N bracketleft ; B 63 -196 309 722 ;\r\nC 92 ; WX 278 ; N backslash ; B -33 -19 311 737 ;\r\nC 93 ; WX 333 ; N bracketright ; B 24 -196 270 722 ;\r\nC 94 ; WX 584 ; N asciicircum ; B 62 323 522 698 ;\r\nC 95 ; WX 556 ; N underscore ; B 0 -125 556 -75 ;\r\nC 96 ; WX 278 ; N quoteleft ; B 69 454 209 727 ;\r\nC 97 ; WX 556 ; N a ; B 29 -14 527 546 ;\r\nC 98 ; WX 611 ; N b ; B 61 -14 578 718 ;\r\nC 99 ; WX 556 ; N c ; B 34 -14 524 546 ;\r\nC 100 ; WX 611 ; N d ; B 34 -14 551 718 ;\r\nC 101 ; WX 556 ; N e ; B 23 -14 528 546 ;\r\nC 102 ; WX 333 ; N f ; B 10 0 318 727 ; L i fi ; L l fl ;\r\nC 103 ; WX 611 ; N g ; B 40 -217 553 546 ;\r\nC 104 ; WX 611 ; N h ; B 65 0 546 718 ;\r\nC 105 ; WX 278 ; N i ; B 69 0 209 725 ;\r\nC 106 ; WX 278 ; N j ; B 3 -214 209 725 ;\r\nC 107 ; WX 556 ; N k ; B 69 0 562 718 ;\r\nC 108 ; WX 278 ; N l ; B 69 0 209 718 ;\r\nC 109 ; WX 889 ; N m ; B 64 0 826 546 ;\r\nC 110 ; WX 611 ; N n ; B 65 0 546 546 ;\r\nC 111 ; WX 611 ; N o ; B 34 -14 578 546 ;\r\nC 112 ; WX 611 ; N p ; B 62 -207 578 546 ;\r\nC 113 ; WX 611 ; N q ; B 34 -207 552 546 ;\r\nC 114 ; WX 389 ; N r ; B 64 0 373 546 ;\r\nC 115 ; WX 556 ; N s ; B 30 -14 519 546 ;\r\nC 116 ; WX 333 ; N t ; B 10 -6 309 676 ;\r\nC 117 ; WX 611 ; N u ; B 66 -14 545 532 ;\r\nC 118 ; WX 556 ; N v ; B 13 0 543 532 ;\r\nC 119 ; WX 778 ; N w ; B 10 0 769 532 ;\r\nC 120 ; WX 556 ; N x ; B 15 0 541 532 ;\r\nC 121 ; WX 556 ; N y ; B 10 -214 539 532 ;\r\nC 122 ; WX 500 ; N z ; B 20 0 480 532 ;\r\nC 123 ; WX 389 ; N braceleft ; B 48 -196 365 722 ;\r\nC 124 ; WX 280 ; N bar ; B 84 -225 196 775 ;\r\nC 125 ; WX 389 ; N braceright ; B 24 -196 341 722 ;\r\nC 126 ; WX 584 ; N asciitilde ; B 61 163 523 343 ;\r\nC 161 ; WX 333 ; N exclamdown ; B 90 -186 244 532 ;\r\nC 162 ; WX 556 ; N cent ; B 34 -118 524 628 ;\r\nC 163 ; WX 556 ; N sterling ; B 28 -16 541 718 ;\r\nC 164 ; WX 167 ; N fraction ; B -170 -19 336 710 ;\r\nC 165 ; WX 556 ; N yen ; B -9 0 565 698 ;\r\nC 166 ; WX 556 ; N florin ; B -10 -210 516 737 ;\r\nC 167 ; WX 556 ; N section ; B 34 -184 522 727 ;\r\nC 168 ; WX 556 ; N currency ; B -3 76 559 636 ;\r\nC 169 ; WX 238 ; N quotesingle ; B 70 447 168 718 ;\r\nC 170 ; WX 500 ; N quotedblleft ; B 64 454 436 727 ;\r\nC 171 ; WX 556 ; N guillemotleft ; B 88 76 468 484 ;\r\nC 172 ; WX 333 ; N guilsinglleft ; B 83 76 250 484 ;\r\nC 173 ; WX 333 ; N guilsinglright ; B 83 76 250 484 ;\r\nC 174 ; WX 611 ; N fi ; B 10 0 542 727 ;\r\nC 175 ; WX 611 ; N fl ; B 10 0 542 727 ;\r\nC 177 ; WX 556 ; N endash ; B 0 227 556 333 ;\r\nC 178 ; WX 556 ; N dagger ; B 36 -171 520 718 ;\r\nC 179 ; WX 556 ; N daggerdbl ; B 36 -171 520 718 ;\r\nC 180 ; WX 278 ; N periodcentered ; B 58 172 220 334 ;\r\nC 182 ; WX 556 ; N paragraph ; B -8 -191 539 700 ;\r\nC 183 ; WX 350 ; N bullet ; B 10 194 340 524 ;\r\nC 184 ; WX 278 ; N quotesinglbase ; B 69 -146 209 127 ;\r\nC 185 ; WX 500 ; N quotedblbase ; B 64 -146 436 127 ;\r\nC 186 ; WX 500 ; N quotedblright ; B 64 445 436 718 ;\r\nC 187 ; WX 556 ; N guillemotright ; B 88 76 468 484 ;\r\nC 188 ; WX 1000 ; N ellipsis ; B 92 0 908 146 ;\r\nC 189 ; WX 1000 ; N perthousand ; B -3 -19 1003 710 ;\r\nC 191 ; WX 611 ; N questiondown ; B 55 -195 551 532 ;\r\nC 193 ; WX 333 ; N grave ; B -23 604 225 750 ;\r\nC 194 ; WX 333 ; N acute ; B 108 604 356 750 ;\r\nC 195 ; WX 333 ; N circumflex ; B -10 604 343 750 ;\r\nC 196 ; WX 333 ; N tilde ; B -17 610 350 737 ;\r\nC 197 ; WX 333 ; N macron ; B -6 604 339 678 ;\r\nC 198 ; WX 333 ; N breve ; B -2 604 335 750 ;\r\nC 199 ; WX 333 ; N dotaccent ; B 104 614 230 729 ;\r\nC 200 ; WX 333 ; N dieresis ; B 6 614 327 729 ;\r\nC 202 ; WX 333 ; N ring ; B 59 568 275 776 ;\r\nC 203 ; WX 333 ; N cedilla ; B 6 -228 245 0 ;\r\nC 205 ; WX 333 ; N hungarumlaut ; B 9 604 486 750 ;\r\nC 206 ; WX 333 ; N ogonek ; B 71 -228 304 0 ;\r\nC 207 ; WX 333 ; N caron ; B -10 604 343 750 ;\r\nC 208 ; WX 1000 ; N emdash ; B 0 227 1000 333 ;\r\nC 225 ; WX 1000 ; N AE ; B 5 0 954 718 ;\r\nC 227 ; WX 370 ; N ordfeminine ; B 22 401 347 737 ;\r\nC 232 ; WX 611 ; N Lslash ; B -20 0 583 718 ;\r\nC 233 ; WX 778 ; N Oslash ; B 33 -27 744 745 ;\r\nC 234 ; WX 1000 ; N OE ; B 37 -19 961 737 ;\r\nC 235 ; WX 365 ; N ordmasculine ; B 6 401 360 737 ;\r\nC 241 ; WX 889 ; N ae ; B 29 -14 858 546 ;\r\nC 245 ; WX 278 ; N dotlessi ; B 69 0 209 532 ;\r\nC 248 ; WX 278 ; N lslash ; B -18 0 296 718 ;\r\nC 249 ; WX 611 ; N oslash ; B 22 -29 589 560 ;\r\nC 250 ; WX 944 ; N oe ; B 34 -14 912 546 ;\r\nC 251 ; WX 611 ; N germandbls ; B 69 -14 579 731 ;\r\nC -1 ; WX 278 ; N Idieresis ; B -21 0 300 915 ;\r\nC -1 ; WX 556 ; N eacute ; B 23 -14 528 750 ;\r\nC -1 ; WX 556 ; N abreve ; B 29 -14 527 750 ;\r\nC -1 ; WX 611 ; N uhungarumlaut ; B 66 -14 625 750 ;\r\nC -1 ; WX 556 ; N ecaron ; B 23 -14 528 750 ;\r\nC -1 ; WX 667 ; N Ydieresis ; B 15 0 653 915 ;\r\nC -1 ; WX 584 ; N divide ; B 40 -42 544 548 ;\r\nC -1 ; WX 667 ; N Yacute ; B 15 0 653 936 ;\r\nC -1 ; WX 722 ; N Acircumflex ; B 20 0 702 936 ;\r\nC -1 ; WX 556 ; N aacute ; B 29 -14 527 750 ;\r\nC -1 ; WX 722 ; N Ucircumflex ; B 72 -19 651 936 ;\r\nC -1 ; WX 556 ; N yacute ; B 10 -214 539 750 ;\r\nC -1 ; WX 556 ; N scommaaccent ; B 30 -228 519 546 ;\r\nC -1 ; WX 556 ; N ecircumflex ; B 23 -14 528 750 ;\r\nC -1 ; WX 722 ; N Uring ; B 72 -19 651 962 ;\r\nC -1 ; WX 722 ; N Udieresis ; B 72 -19 651 915 ;\r\nC -1 ; WX 556 ; N aogonek ; B 29 -224 545 546 ;\r\nC -1 ; WX 722 ; N Uacute ; B 72 -19 651 936 ;\r\nC -1 ; WX 611 ; N uogonek ; B 66 -228 545 532 ;\r\nC -1 ; WX 667 ; N Edieresis ; B 76 0 621 915 ;\r\nC -1 ; WX 722 ; N Dcroat ; B -5 0 685 718 ;\r\nC -1 ; WX 250 ; N commaaccent ; B 64 -228 199 -50 ;\r\nC -1 ; WX 737 ; N copyright ; B -11 -19 749 737 ;\r\nC -1 ; WX 667 ; N Emacron ; B 76 0 621 864 ;\r\nC -1 ; WX 556 ; N ccaron ; B 34 -14 524 750 ;\r\nC -1 ; WX 556 ; N aring ; B 29 -14 527 776 ;\r\nC -1 ; WX 722 ; N Ncommaaccent ; B 69 -228 654 718 ;\r\nC -1 ; WX 278 ; N lacute ; B 69 0 329 936 ;\r\nC -1 ; WX 556 ; N agrave ; B 29 -14 527 750 ;\r\nC -1 ; WX 611 ; N Tcommaaccent ; B 14 -228 598 718 ;\r\nC -1 ; WX 722 ; N Cacute ; B 44 -19 684 936 ;\r\nC -1 ; WX 556 ; N atilde ; B 29 -14 527 737 ;\r\nC -1 ; WX 667 ; N Edotaccent ; B 76 0 621 915 ;\r\nC -1 ; WX 556 ; N scaron ; B 30 -14 519 750 ;\r\nC -1 ; WX 556 ; N scedilla ; B 30 -228 519 546 ;\r\nC -1 ; WX 278 ; N iacute ; B 69 0 329 750 ;\r\nC -1 ; WX 494 ; N lozenge ; B 10 0 484 745 ;\r\nC -1 ; WX 722 ; N Rcaron ; B 76 0 677 936 ;\r\nC -1 ; WX 778 ; N Gcommaaccent ; B 44 -228 713 737 ;\r\nC -1 ; WX 611 ; N ucircumflex ; B 66 -14 545 750 ;\r\nC -1 ; WX 556 ; N acircumflex ; B 29 -14 527 750 ;\r\nC -1 ; WX 722 ; N Amacron ; B 20 0 702 864 ;\r\nC -1 ; WX 389 ; N rcaron ; B 18 0 373 750 ;\r\nC -1 ; WX 556 ; N ccedilla ; B 34 -228 524 546 ;\r\nC -1 ; WX 611 ; N Zdotaccent ; B 25 0 586 915 ;\r\nC -1 ; WX 667 ; N Thorn ; B 76 0 627 718 ;\r\nC -1 ; WX 778 ; N Omacron ; B 44 -19 734 864 ;\r\nC -1 ; WX 722 ; N Racute ; B 76 0 677 936 ;\r\nC -1 ; WX 667 ; N Sacute ; B 39 -19 629 936 ;\r\nC -1 ; WX 743 ; N dcaron ; B 34 -14 750 718 ;\r\nC -1 ; WX 722 ; N Umacron ; B 72 -19 651 864 ;\r\nC -1 ; WX 611 ; N uring ; B 66 -14 545 776 ;\r\nC -1 ; WX 333 ; N threesuperior ; B 8 271 326 710 ;\r\nC -1 ; WX 778 ; N Ograve ; B 44 -19 734 936 ;\r\nC -1 ; WX 722 ; N Agrave ; B 20 0 702 936 ;\r\nC -1 ; WX 722 ; N Abreve ; B 20 0 702 936 ;\r\nC -1 ; WX 584 ; N multiply ; B 40 1 545 505 ;\r\nC -1 ; WX 611 ; N uacute ; B 66 -14 545 750 ;\r\nC -1 ; WX 611 ; N Tcaron ; B 14 0 598 936 ;\r\nC -1 ; WX 494 ; N partialdiff ; B 11 -21 494 750 ;\r\nC -1 ; WX 556 ; N ydieresis ; B 10 -214 539 729 ;\r\nC -1 ; WX 722 ; N Nacute ; B 69 0 654 936 ;\r\nC -1 ; WX 278 ; N icircumflex ; B -37 0 316 750 ;\r\nC -1 ; WX 667 ; N Ecircumflex ; B 76 0 621 936 ;\r\nC -1 ; WX 556 ; N adieresis ; B 29 -14 527 729 ;\r\nC -1 ; WX 556 ; N edieresis ; B 23 -14 528 729 ;\r\nC -1 ; WX 556 ; N cacute ; B 34 -14 524 750 ;\r\nC -1 ; WX 611 ; N nacute ; B 65 0 546 750 ;\r\nC -1 ; WX 611 ; N umacron ; B 66 -14 545 678 ;\r\nC -1 ; WX 722 ; N Ncaron ; B 69 0 654 936 ;\r\nC -1 ; WX 278 ; N Iacute ; B 64 0 329 936 ;\r\nC -1 ; WX 584 ; N plusminus ; B 40 0 544 506 ;\r\nC -1 ; WX 280 ; N brokenbar ; B 84 -150 196 700 ;\r\nC -1 ; WX 737 ; N registered ; B -11 -19 748 737 ;\r\nC -1 ; WX 778 ; N Gbreve ; B 44 -19 713 936 ;\r\nC -1 ; WX 278 ; N Idotaccent ; B 64 0 214 915 ;\r\nC -1 ; WX 600 ; N summation ; B 14 -10 585 706 ;\r\nC -1 ; WX 667 ; N Egrave ; B 76 0 621 936 ;\r\nC -1 ; WX 389 ; N racute ; B 64 0 384 750 ;\r\nC -1 ; WX 611 ; N omacron ; B 34 -14 578 678 ;\r\nC -1 ; WX 611 ; N Zacute ; B 25 0 586 936 ;\r\nC -1 ; WX 611 ; N Zcaron ; B 25 0 586 936 ;\r\nC -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ;\r\nC -1 ; WX 722 ; N Eth ; B -5 0 685 718 ;\r\nC -1 ; WX 722 ; N Ccedilla ; B 44 -228 684 737 ;\r\nC -1 ; WX 278 ; N lcommaaccent ; B 69 -228 213 718 ;\r\nC -1 ; WX 389 ; N tcaron ; B 10 -6 421 878 ;\r\nC -1 ; WX 556 ; N eogonek ; B 23 -228 528 546 ;\r\nC -1 ; WX 722 ; N Uogonek ; B 72 -228 651 718 ;\r\nC -1 ; WX 722 ; N Aacute ; B 20 0 702 936 ;\r\nC -1 ; WX 722 ; N Adieresis ; B 20 0 702 915 ;\r\nC -1 ; WX 556 ; N egrave ; B 23 -14 528 750 ;\r\nC -1 ; WX 500 ; N zacute ; B 20 0 480 750 ;\r\nC -1 ; WX 278 ; N iogonek ; B 16 -224 249 725 ;\r\nC -1 ; WX 778 ; N Oacute ; B 44 -19 734 936 ;\r\nC -1 ; WX 611 ; N oacute ; B 34 -14 578 750 ;\r\nC -1 ; WX 556 ; N amacron ; B 29 -14 527 678 ;\r\nC -1 ; WX 556 ; N sacute ; B 30 -14 519 750 ;\r\nC -1 ; WX 278 ; N idieresis ; B -21 0 300 729 ;\r\nC -1 ; WX 778 ; N Ocircumflex ; B 44 -19 734 936 ;\r\nC -1 ; WX 722 ; N Ugrave ; B 72 -19 651 936 ;\r\nC -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;\r\nC -1 ; WX 611 ; N thorn ; B 62 -208 578 718 ;\r\nC -1 ; WX 333 ; N twosuperior ; B 9 283 324 710 ;\r\nC -1 ; WX 778 ; N Odieresis ; B 44 -19 734 915 ;\r\nC -1 ; WX 611 ; N mu ; B 66 -207 545 532 ;\r\nC -1 ; WX 278 ; N igrave ; B -50 0 209 750 ;\r\nC -1 ; WX 611 ; N ohungarumlaut ; B 34 -14 625 750 ;\r\nC -1 ; WX 667 ; N Eogonek ; B 76 -224 639 718 ;\r\nC -1 ; WX 611 ; N dcroat ; B 34 -14 650 718 ;\r\nC -1 ; WX 834 ; N threequarters ; B 16 -19 799 710 ;\r\nC -1 ; WX 667 ; N Scedilla ; B 39 -228 629 737 ;\r\nC -1 ; WX 400 ; N lcaron ; B 69 0 408 718 ;\r\nC -1 ; WX 722 ; N Kcommaaccent ; B 87 -228 722 718 ;\r\nC -1 ; WX 611 ; N Lacute ; B 76 0 583 936 ;\r\nC -1 ; WX 1000 ; N trademark ; B 44 306 956 718 ;\r\nC -1 ; WX 556 ; N edotaccent ; B 23 -14 528 729 ;\r\nC -1 ; WX 278 ; N Igrave ; B -50 0 214 936 ;\r\nC -1 ; WX 278 ; N Imacron ; B -33 0 312 864 ;\r\nC -1 ; WX 611 ; N Lcaron ; B 76 0 583 718 ;\r\nC -1 ; WX 834 ; N onehalf ; B 26 -19 794 710 ;\r\nC -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ;\r\nC -1 ; WX 611 ; N ocircumflex ; B 34 -14 578 750 ;\r\nC -1 ; WX 611 ; N ntilde ; B 65 0 546 737 ;\r\nC -1 ; WX 722 ; N Uhungarumlaut ; B 72 -19 681 936 ;\r\nC -1 ; WX 667 ; N Eacute ; B 76 0 621 936 ;\r\nC -1 ; WX 556 ; N emacron ; B 23 -14 528 678 ;\r\nC -1 ; WX 611 ; N gbreve ; B 40 -217 553 750 ;\r\nC -1 ; WX 834 ; N onequarter ; B 26 -19 766 710 ;\r\nC -1 ; WX 667 ; N Scaron ; B 39 -19 629 936 ;\r\nC -1 ; WX 667 ; N Scommaaccent ; B 39 -228 629 737 ;\r\nC -1 ; WX 778 ; N Ohungarumlaut ; B 44 -19 734 936 ;\r\nC -1 ; WX 400 ; N degree ; B 57 426 343 712 ;\r\nC -1 ; WX 611 ; N ograve ; B 34 -14 578 750 ;\r\nC -1 ; WX 722 ; N Ccaron ; B 44 -19 684 936 ;\r\nC -1 ; WX 611 ; N ugrave ; B 66 -14 545 750 ;\r\nC -1 ; WX 549 ; N radical ; B 10 -46 512 850 ;\r\nC -1 ; WX 722 ; N Dcaron ; B 76 0 685 936 ;\r\nC -1 ; WX 389 ; N rcommaaccent ; B 64 -228 373 546 ;\r\nC -1 ; WX 722 ; N Ntilde ; B 69 0 654 923 ;\r\nC -1 ; WX 611 ; N otilde ; B 34 -14 578 737 ;\r\nC -1 ; WX 722 ; N Rcommaaccent ; B 76 -228 677 718 ;\r\nC -1 ; WX 611 ; N Lcommaaccent ; B 76 -228 583 718 ;\r\nC -1 ; WX 722 ; N Atilde ; B 20 0 702 923 ;\r\nC -1 ; WX 722 ; N Aogonek ; B 20 -224 742 718 ;\r\nC -1 ; WX 722 ; N Aring ; B 20 0 702 962 ;\r\nC -1 ; WX 778 ; N Otilde ; B 44 -19 734 923 ;\r\nC -1 ; WX 500 ; N zdotaccent ; B 20 0 480 729 ;\r\nC -1 ; WX 667 ; N Ecaron ; B 76 0 621 936 ;\r\nC -1 ; WX 278 ; N Iogonek ; B -11 -228 222 718 ;\r\nC -1 ; WX 556 ; N kcommaaccent ; B 69 -228 562 718 ;\r\nC -1 ; WX 584 ; N minus ; B 40 197 544 309 ;\r\nC -1 ; WX 278 ; N Icircumflex ; B -37 0 316 936 ;\r\nC -1 ; WX 611 ; N ncaron ; B 65 0 546 750 ;\r\nC -1 ; WX 333 ; N tcommaaccent ; B 10 -228 309 676 ;\r\nC -1 ; WX 584 ; N logicalnot ; B 40 108 544 419 ;\r\nC -1 ; WX 611 ; N odieresis ; B 34 -14 578 729 ;\r\nC -1 ; WX 611 ; N udieresis ; B 66 -14 545 729 ;\r\nC -1 ; WX 549 ; N notequal ; B 15 -49 540 570 ;\r\nC -1 ; WX 611 ; N gcommaaccent ; B 40 -217 553 850 ;\r\nC -1 ; WX 611 ; N eth ; B 34 -14 578 737 ;\r\nC -1 ; WX 500 ; N zcaron ; B 20 0 480 750 ;\r\nC -1 ; WX 611 ; N ncommaaccent ; B 65 -228 546 546 ;\r\nC -1 ; WX 333 ; N onesuperior ; B 26 283 237 710 ;\r\nC -1 ; WX 278 ; N imacron ; B -8 0 285 678 ;\r\nC -1 ; WX 556 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nStartKernData\r\nStartKernPairs 2481\r\nKPX A C -40\r\nKPX A Cacute -40\r\nKPX A Ccaron -40\r\nKPX A Ccedilla -40\r\nKPX A G -50\r\nKPX A Gbreve -50\r\nKPX A Gcommaaccent -50\r\nKPX A O -40\r\nKPX A Oacute -40\r\nKPX A Ocircumflex -40\r\nKPX A Odieresis -40\r\nKPX A Ograve -40\r\nKPX A Ohungarumlaut -40\r\nKPX A Omacron -40\r\nKPX A Oslash -40\r\nKPX A Otilde -40\r\nKPX A Q -40\r\nKPX A T -90\r\nKPX A Tcaron -90\r\nKPX A Tcommaaccent -90\r\nKPX A U -50\r\nKPX A Uacute -50\r\nKPX A Ucircumflex -50\r\nKPX A Udieresis -50\r\nKPX A Ugrave -50\r\nKPX A Uhungarumlaut -50\r\nKPX A Umacron -50\r\nKPX A Uogonek -50\r\nKPX A Uring -50\r\nKPX A V -80\r\nKPX A W -60\r\nKPX A Y -110\r\nKPX A Yacute -110\r\nKPX A Ydieresis -110\r\nKPX A u -30\r\nKPX A uacute -30\r\nKPX A ucircumflex -30\r\nKPX A udieresis -30\r\nKPX A ugrave -30\r\nKPX A uhungarumlaut -30\r\nKPX A umacron -30\r\nKPX A uogonek -30\r\nKPX A uring -30\r\nKPX A v -40\r\nKPX A w -30\r\nKPX A y -30\r\nKPX A yacute -30\r\nKPX A ydieresis -30\r\nKPX Aacute C -40\r\nKPX Aacute Cacute -40\r\nKPX Aacute Ccaron -40\r\nKPX Aacute Ccedilla -40\r\nKPX Aacute G -50\r\nKPX Aacute Gbreve -50\r\nKPX Aacute Gcommaaccent -50\r\nKPX Aacute O -40\r\nKPX Aacute Oacute -40\r\nKPX Aacute Ocircumflex -40\r\nKPX Aacute Odieresis -40\r\nKPX Aacute Ograve -40\r\nKPX Aacute Ohungarumlaut -40\r\nKPX Aacute Omacron -40\r\nKPX Aacute Oslash -40\r\nKPX Aacute Otilde -40\r\nKPX Aacute Q -40\r\nKPX Aacute T -90\r\nKPX Aacute Tcaron -90\r\nKPX Aacute Tcommaaccent -90\r\nKPX Aacute U -50\r\nKPX Aacute Uacute -50\r\nKPX Aacute Ucircumflex -50\r\nKPX Aacute Udieresis -50\r\nKPX Aacute Ugrave -50\r\nKPX Aacute Uhungarumlaut -50\r\nKPX Aacute Umacron -50\r\nKPX Aacute Uogonek -50\r\nKPX Aacute Uring -50\r\nKPX Aacute V -80\r\nKPX Aacute W -60\r\nKPX Aacute Y -110\r\nKPX Aacute Yacute -110\r\nKPX Aacute Ydieresis -110\r\nKPX Aacute u -30\r\nKPX Aacute uacute -30\r\nKPX Aacute ucircumflex -30\r\nKPX Aacute udieresis -30\r\nKPX Aacute ugrave -30\r\nKPX Aacute uhungarumlaut -30\r\nKPX Aacute umacron -30\r\nKPX Aacute uogonek -30\r\nKPX Aacute uring -30\r\nKPX Aacute v -40\r\nKPX Aacute w -30\r\nKPX Aacute y -30\r\nKPX Aacute yacute -30\r\nKPX Aacute ydieresis -30\r\nKPX Abreve C -40\r\nKPX Abreve Cacute -40\r\nKPX Abreve Ccaron -40\r\nKPX Abreve Ccedilla -40\r\nKPX Abreve G -50\r\nKPX Abreve Gbreve -50\r\nKPX Abreve Gcommaaccent -50\r\nKPX Abreve O -40\r\nKPX Abreve Oacute -40\r\nKPX Abreve Ocircumflex -40\r\nKPX Abreve Odieresis -40\r\nKPX Abreve Ograve -40\r\nKPX Abreve Ohungarumlaut -40\r\nKPX Abreve Omacron -40\r\nKPX Abreve Oslash -40\r\nKPX Abreve Otilde -40\r\nKPX Abreve Q -40\r\nKPX Abreve T -90\r\nKPX Abreve Tcaron -90\r\nKPX Abreve Tcommaaccent -90\r\nKPX Abreve U -50\r\nKPX Abreve Uacute -50\r\nKPX Abreve Ucircumflex -50\r\nKPX Abreve Udieresis -50\r\nKPX Abreve Ugrave -50\r\nKPX Abreve Uhungarumlaut -50\r\nKPX Abreve Umacron -50\r\nKPX Abreve Uogonek -50\r\nKPX Abreve Uring -50\r\nKPX Abreve V -80\r\nKPX Abreve W -60\r\nKPX Abreve Y -110\r\nKPX Abreve Yacute -110\r\nKPX Abreve Ydieresis -110\r\nKPX Abreve u -30\r\nKPX Abreve uacute -30\r\nKPX Abreve ucircumflex -30\r\nKPX Abreve udieresis -30\r\nKPX Abreve ugrave -30\r\nKPX Abreve uhungarumlaut -30\r\nKPX Abreve umacron -30\r\nKPX Abreve uogonek -30\r\nKPX Abreve uring -30\r\nKPX Abreve v -40\r\nKPX Abreve w -30\r\nKPX Abreve y -30\r\nKPX Abreve yacute -30\r\nKPX Abreve ydieresis -30\r\nKPX Acircumflex C -40\r\nKPX Acircumflex Cacute -40\r\nKPX Acircumflex Ccaron -40\r\nKPX Acircumflex Ccedilla -40\r\nKPX Acircumflex G -50\r\nKPX Acircumflex Gbreve -50\r\nKPX Acircumflex Gcommaaccent -50\r\nKPX Acircumflex O -40\r\nKPX Acircumflex Oacute -40\r\nKPX Acircumflex Ocircumflex -40\r\nKPX Acircumflex Odieresis -40\r\nKPX Acircumflex Ograve -40\r\nKPX Acircumflex Ohungarumlaut -40\r\nKPX Acircumflex Omacron -40\r\nKPX Acircumflex Oslash -40\r\nKPX Acircumflex Otilde -40\r\nKPX Acircumflex Q -40\r\nKPX Acircumflex T -90\r\nKPX Acircumflex Tcaron -90\r\nKPX Acircumflex Tcommaaccent -90\r\nKPX Acircumflex U -50\r\nKPX Acircumflex Uacute -50\r\nKPX Acircumflex Ucircumflex -50\r\nKPX Acircumflex Udieresis -50\r\nKPX Acircumflex Ugrave -50\r\nKPX Acircumflex Uhungarumlaut -50\r\nKPX Acircumflex Umacron -50\r\nKPX Acircumflex Uogonek -50\r\nKPX Acircumflex Uring -50\r\nKPX Acircumflex V -80\r\nKPX Acircumflex W -60\r\nKPX Acircumflex Y -110\r\nKPX Acircumflex Yacute -110\r\nKPX Acircumflex Ydieresis -110\r\nKPX Acircumflex u -30\r\nKPX Acircumflex uacute -30\r\nKPX Acircumflex ucircumflex -30\r\nKPX Acircumflex udieresis -30\r\nKPX Acircumflex ugrave -30\r\nKPX Acircumflex uhungarumlaut -30\r\nKPX Acircumflex umacron -30\r\nKPX Acircumflex uogonek -30\r\nKPX Acircumflex uring -30\r\nKPX Acircumflex v -40\r\nKPX Acircumflex w -30\r\nKPX Acircumflex y -30\r\nKPX Acircumflex yacute -30\r\nKPX Acircumflex ydieresis -30\r\nKPX Adieresis C -40\r\nKPX Adieresis Cacute -40\r\nKPX Adieresis Ccaron -40\r\nKPX Adieresis Ccedilla -40\r\nKPX Adieresis G -50\r\nKPX Adieresis Gbreve -50\r\nKPX Adieresis Gcommaaccent -50\r\nKPX Adieresis O -40\r\nKPX Adieresis Oacute -40\r\nKPX Adieresis Ocircumflex -40\r\nKPX Adieresis Odieresis -40\r\nKPX Adieresis Ograve -40\r\nKPX Adieresis Ohungarumlaut -40\r\nKPX Adieresis Omacron -40\r\nKPX Adieresis Oslash -40\r\nKPX Adieresis Otilde -40\r\nKPX Adieresis Q -40\r\nKPX Adieresis T -90\r\nKPX Adieresis Tcaron -90\r\nKPX Adieresis Tcommaaccent -90\r\nKPX Adieresis U -50\r\nKPX Adieresis Uacute -50\r\nKPX Adieresis Ucircumflex -50\r\nKPX Adieresis Udieresis -50\r\nKPX Adieresis Ugrave -50\r\nKPX Adieresis Uhungarumlaut -50\r\nKPX Adieresis Umacron -50\r\nKPX Adieresis Uogonek -50\r\nKPX Adieresis Uring -50\r\nKPX Adieresis V -80\r\nKPX Adieresis W -60\r\nKPX Adieresis Y -110\r\nKPX Adieresis Yacute -110\r\nKPX Adieresis Ydieresis -110\r\nKPX Adieresis u -30\r\nKPX Adieresis uacute -30\r\nKPX Adieresis ucircumflex -30\r\nKPX Adieresis udieresis -30\r\nKPX Adieresis ugrave -30\r\nKPX Adieresis uhungarumlaut -30\r\nKPX Adieresis umacron -30\r\nKPX Adieresis uogonek -30\r\nKPX Adieresis uring -30\r\nKPX Adieresis v -40\r\nKPX Adieresis w -30\r\nKPX Adieresis y -30\r\nKPX Adieresis yacute -30\r\nKPX Adieresis ydieresis -30\r\nKPX Agrave C -40\r\nKPX Agrave Cacute -40\r\nKPX Agrave Ccaron -40\r\nKPX Agrave Ccedilla -40\r\nKPX Agrave G -50\r\nKPX Agrave Gbreve -50\r\nKPX Agrave Gcommaaccent -50\r\nKPX Agrave O -40\r\nKPX Agrave Oacute -40\r\nKPX Agrave Ocircumflex -40\r\nKPX Agrave Odieresis -40\r\nKPX Agrave Ograve -40\r\nKPX Agrave Ohungarumlaut -40\r\nKPX Agrave Omacron -40\r\nKPX Agrave Oslash -40\r\nKPX Agrave Otilde -40\r\nKPX Agrave Q -40\r\nKPX Agrave T -90\r\nKPX Agrave Tcaron -90\r\nKPX Agrave Tcommaaccent -90\r\nKPX Agrave U -50\r\nKPX Agrave Uacute -50\r\nKPX Agrave Ucircumflex -50\r\nKPX Agrave Udieresis -50\r\nKPX Agrave Ugrave -50\r\nKPX Agrave Uhungarumlaut -50\r\nKPX Agrave Umacron -50\r\nKPX Agrave Uogonek -50\r\nKPX Agrave Uring -50\r\nKPX Agrave V -80\r\nKPX Agrave W -60\r\nKPX Agrave Y -110\r\nKPX Agrave Yacute -110\r\nKPX Agrave Ydieresis -110\r\nKPX Agrave u -30\r\nKPX Agrave uacute -30\r\nKPX Agrave ucircumflex -30\r\nKPX Agrave udieresis -30\r\nKPX Agrave ugrave -30\r\nKPX Agrave uhungarumlaut -30\r\nKPX Agrave umacron -30\r\nKPX Agrave uogonek -30\r\nKPX Agrave uring -30\r\nKPX Agrave v -40\r\nKPX Agrave w -30\r\nKPX Agrave y -30\r\nKPX Agrave yacute -30\r\nKPX Agrave ydieresis -30\r\nKPX Amacron C -40\r\nKPX Amacron Cacute -40\r\nKPX Amacron Ccaron -40\r\nKPX Amacron Ccedilla -40\r\nKPX Amacron G -50\r\nKPX Amacron Gbreve -50\r\nKPX Amacron Gcommaaccent -50\r\nKPX Amacron O -40\r\nKPX Amacron Oacute -40\r\nKPX Amacron Ocircumflex -40\r\nKPX Amacron Odieresis -40\r\nKPX Amacron Ograve -40\r\nKPX Amacron Ohungarumlaut -40\r\nKPX Amacron Omacron -40\r\nKPX Amacron Oslash -40\r\nKPX Amacron Otilde -40\r\nKPX Amacron Q -40\r\nKPX Amacron T -90\r\nKPX Amacron Tcaron -90\r\nKPX Amacron Tcommaaccent -90\r\nKPX Amacron U -50\r\nKPX Amacron Uacute -50\r\nKPX Amacron Ucircumflex -50\r\nKPX Amacron Udieresis -50\r\nKPX Amacron Ugrave -50\r\nKPX Amacron Uhungarumlaut -50\r\nKPX Amacron Umacron -50\r\nKPX Amacron Uogonek -50\r\nKPX Amacron Uring -50\r\nKPX Amacron V -80\r\nKPX Amacron W -60\r\nKPX Amacron Y -110\r\nKPX Amacron Yacute -110\r\nKPX Amacron Ydieresis -110\r\nKPX Amacron u -30\r\nKPX Amacron uacute -30\r\nKPX Amacron ucircumflex -30\r\nKPX Amacron udieresis -30\r\nKPX Amacron ugrave -30\r\nKPX Amacron uhungarumlaut -30\r\nKPX Amacron umacron -30\r\nKPX Amacron uogonek -30\r\nKPX Amacron uring -30\r\nKPX Amacron v -40\r\nKPX Amacron w -30\r\nKPX Amacron y -30\r\nKPX Amacron yacute -30\r\nKPX Amacron ydieresis -30\r\nKPX Aogonek C -40\r\nKPX Aogonek Cacute -40\r\nKPX Aogonek Ccaron -40\r\nKPX Aogonek Ccedilla -40\r\nKPX Aogonek G -50\r\nKPX Aogonek Gbreve -50\r\nKPX Aogonek Gcommaaccent -50\r\nKPX Aogonek O -40\r\nKPX Aogonek Oacute -40\r\nKPX Aogonek Ocircumflex -40\r\nKPX Aogonek Odieresis -40\r\nKPX Aogonek Ograve -40\r\nKPX Aogonek Ohungarumlaut -40\r\nKPX Aogonek Omacron -40\r\nKPX Aogonek Oslash -40\r\nKPX Aogonek Otilde -40\r\nKPX Aogonek Q -40\r\nKPX Aogonek T -90\r\nKPX Aogonek Tcaron -90\r\nKPX Aogonek Tcommaaccent -90\r\nKPX Aogonek U -50\r\nKPX Aogonek Uacute -50\r\nKPX Aogonek Ucircumflex -50\r\nKPX Aogonek Udieresis -50\r\nKPX Aogonek Ugrave -50\r\nKPX Aogonek Uhungarumlaut -50\r\nKPX Aogonek Umacron -50\r\nKPX Aogonek Uogonek -50\r\nKPX Aogonek Uring -50\r\nKPX Aogonek V -80\r\nKPX Aogonek W -60\r\nKPX Aogonek Y -110\r\nKPX Aogonek Yacute -110\r\nKPX Aogonek Ydieresis -110\r\nKPX Aogonek u -30\r\nKPX Aogonek uacute -30\r\nKPX Aogonek ucircumflex -30\r\nKPX Aogonek udieresis -30\r\nKPX Aogonek ugrave -30\r\nKPX Aogonek uhungarumlaut -30\r\nKPX Aogonek umacron -30\r\nKPX Aogonek uogonek -30\r\nKPX Aogonek uring -30\r\nKPX Aogonek v -40\r\nKPX Aogonek w -30\r\nKPX Aogonek y -30\r\nKPX Aogonek yacute -30\r\nKPX Aogonek ydieresis -30\r\nKPX Aring C -40\r\nKPX Aring Cacute -40\r\nKPX Aring Ccaron -40\r\nKPX Aring Ccedilla -40\r\nKPX Aring G -50\r\nKPX Aring Gbreve -50\r\nKPX Aring Gcommaaccent -50\r\nKPX Aring O -40\r\nKPX Aring Oacute -40\r\nKPX Aring Ocircumflex -40\r\nKPX Aring Odieresis -40\r\nKPX Aring Ograve -40\r\nKPX Aring Ohungarumlaut -40\r\nKPX Aring Omacron -40\r\nKPX Aring Oslash -40\r\nKPX Aring Otilde -40\r\nKPX Aring Q -40\r\nKPX Aring T -90\r\nKPX Aring Tcaron -90\r\nKPX Aring Tcommaaccent -90\r\nKPX Aring U -50\r\nKPX Aring Uacute -50\r\nKPX Aring Ucircumflex -50\r\nKPX Aring Udieresis -50\r\nKPX Aring Ugrave -50\r\nKPX Aring Uhungarumlaut -50\r\nKPX Aring Umacron -50\r\nKPX Aring Uogonek -50\r\nKPX Aring Uring -50\r\nKPX Aring V -80\r\nKPX Aring W -60\r\nKPX Aring Y -110\r\nKPX Aring Yacute -110\r\nKPX Aring Ydieresis -110\r\nKPX Aring u -30\r\nKPX Aring uacute -30\r\nKPX Aring ucircumflex -30\r\nKPX Aring udieresis -30\r\nKPX Aring ugrave -30\r\nKPX Aring uhungarumlaut -30\r\nKPX Aring umacron -30\r\nKPX Aring uogonek -30\r\nKPX Aring uring -30\r\nKPX Aring v -40\r\nKPX Aring w -30\r\nKPX Aring y -30\r\nKPX Aring yacute -30\r\nKPX Aring ydieresis -30\r\nKPX Atilde C -40\r\nKPX Atilde Cacute -40\r\nKPX Atilde Ccaron -40\r\nKPX Atilde Ccedilla -40\r\nKPX Atilde G -50\r\nKPX Atilde Gbreve -50\r\nKPX Atilde Gcommaaccent -50\r\nKPX Atilde O -40\r\nKPX Atilde Oacute -40\r\nKPX Atilde Ocircumflex -40\r\nKPX Atilde Odieresis -40\r\nKPX Atilde Ograve -40\r\nKPX Atilde Ohungarumlaut -40\r\nKPX Atilde Omacron -40\r\nKPX Atilde Oslash -40\r\nKPX Atilde Otilde -40\r\nKPX Atilde Q -40\r\nKPX Atilde T -90\r\nKPX Atilde Tcaron -90\r\nKPX Atilde Tcommaaccent -90\r\nKPX Atilde U -50\r\nKPX Atilde Uacute -50\r\nKPX Atilde Ucircumflex -50\r\nKPX Atilde Udieresis -50\r\nKPX Atilde Ugrave -50\r\nKPX Atilde Uhungarumlaut -50\r\nKPX Atilde Umacron -50\r\nKPX Atilde Uogonek -50\r\nKPX Atilde Uring -50\r\nKPX Atilde V -80\r\nKPX Atilde W -60\r\nKPX Atilde Y -110\r\nKPX Atilde Yacute -110\r\nKPX Atilde Ydieresis -110\r\nKPX Atilde u -30\r\nKPX Atilde uacute -30\r\nKPX Atilde ucircumflex -30\r\nKPX Atilde udieresis -30\r\nKPX Atilde ugrave -30\r\nKPX Atilde uhungarumlaut -30\r\nKPX Atilde umacron -30\r\nKPX Atilde uogonek -30\r\nKPX Atilde uring -30\r\nKPX Atilde v -40\r\nKPX Atilde w -30\r\nKPX Atilde y -30\r\nKPX Atilde yacute -30\r\nKPX Atilde ydieresis -30\r\nKPX B A -30\r\nKPX B Aacute -30\r\nKPX B Abreve -30\r\nKPX B Acircumflex -30\r\nKPX B Adieresis -30\r\nKPX B Agrave -30\r\nKPX B Amacron -30\r\nKPX B Aogonek -30\r\nKPX B Aring -30\r\nKPX B Atilde -30\r\nKPX B U -10\r\nKPX B Uacute -10\r\nKPX B Ucircumflex -10\r\nKPX B Udieresis -10\r\nKPX B Ugrave -10\r\nKPX B Uhungarumlaut -10\r\nKPX B Umacron -10\r\nKPX B Uogonek -10\r\nKPX B Uring -10\r\nKPX D A -40\r\nKPX D Aacute -40\r\nKPX D Abreve -40\r\nKPX D Acircumflex -40\r\nKPX D Adieresis -40\r\nKPX D Agrave -40\r\nKPX D Amacron -40\r\nKPX D Aogonek -40\r\nKPX D Aring -40\r\nKPX D Atilde -40\r\nKPX D V -40\r\nKPX D W -40\r\nKPX D Y -70\r\nKPX D Yacute -70\r\nKPX D Ydieresis -70\r\nKPX D comma -30\r\nKPX D period -30\r\nKPX Dcaron A -40\r\nKPX Dcaron Aacute -40\r\nKPX Dcaron Abreve -40\r\nKPX Dcaron Acircumflex -40\r\nKPX Dcaron Adieresis -40\r\nKPX Dcaron Agrave -40\r\nKPX Dcaron Amacron -40\r\nKPX Dcaron Aogonek -40\r\nKPX Dcaron Aring -40\r\nKPX Dcaron Atilde -40\r\nKPX Dcaron V -40\r\nKPX Dcaron W -40\r\nKPX Dcaron Y -70\r\nKPX Dcaron Yacute -70\r\nKPX Dcaron Ydieresis -70\r\nKPX Dcaron comma -30\r\nKPX Dcaron period -30\r\nKPX Dcroat A -40\r\nKPX Dcroat Aacute -40\r\nKPX Dcroat Abreve -40\r\nKPX Dcroat Acircumflex -40\r\nKPX Dcroat Adieresis -40\r\nKPX Dcroat Agrave -40\r\nKPX Dcroat Amacron -40\r\nKPX Dcroat Aogonek -40\r\nKPX Dcroat Aring -40\r\nKPX Dcroat Atilde -40\r\nKPX Dcroat V -40\r\nKPX Dcroat W -40\r\nKPX Dcroat Y -70\r\nKPX Dcroat Yacute -70\r\nKPX Dcroat Ydieresis -70\r\nKPX Dcroat comma -30\r\nKPX Dcroat period -30\r\nKPX F A -80\r\nKPX F Aacute -80\r\nKPX F Abreve -80\r\nKPX F Acircumflex -80\r\nKPX F Adieresis -80\r\nKPX F Agrave -80\r\nKPX F Amacron -80\r\nKPX F Aogonek -80\r\nKPX F Aring -80\r\nKPX F Atilde -80\r\nKPX F a -20\r\nKPX F aacute -20\r\nKPX F abreve -20\r\nKPX F acircumflex -20\r\nKPX F adieresis -20\r\nKPX F agrave -20\r\nKPX F amacron -20\r\nKPX F aogonek -20\r\nKPX F aring -20\r\nKPX F atilde -20\r\nKPX F comma -100\r\nKPX F period -100\r\nKPX J A -20\r\nKPX J Aacute -20\r\nKPX J Abreve -20\r\nKPX J Acircumflex -20\r\nKPX J Adieresis -20\r\nKPX J Agrave -20\r\nKPX J Amacron -20\r\nKPX J Aogonek -20\r\nKPX J Aring -20\r\nKPX J Atilde -20\r\nKPX J comma -20\r\nKPX J period -20\r\nKPX J u -20\r\nKPX J uacute -20\r\nKPX J ucircumflex -20\r\nKPX J udieresis -20\r\nKPX J ugrave -20\r\nKPX J uhungarumlaut -20\r\nKPX J umacron -20\r\nKPX J uogonek -20\r\nKPX J uring -20\r\nKPX K O -30\r\nKPX K Oacute -30\r\nKPX K Ocircumflex -30\r\nKPX K Odieresis -30\r\nKPX K Ograve -30\r\nKPX K Ohungarumlaut -30\r\nKPX K Omacron -30\r\nKPX K Oslash -30\r\nKPX K Otilde -30\r\nKPX K e -15\r\nKPX K eacute -15\r\nKPX K ecaron -15\r\nKPX K ecircumflex -15\r\nKPX K edieresis -15\r\nKPX K edotaccent -15\r\nKPX K egrave -15\r\nKPX K emacron -15\r\nKPX K eogonek -15\r\nKPX K o -35\r\nKPX K oacute -35\r\nKPX K ocircumflex -35\r\nKPX K odieresis -35\r\nKPX K ograve -35\r\nKPX K ohungarumlaut -35\r\nKPX K omacron -35\r\nKPX K oslash -35\r\nKPX K otilde -35\r\nKPX K u -30\r\nKPX K uacute -30\r\nKPX K ucircumflex -30\r\nKPX K udieresis -30\r\nKPX K ugrave -30\r\nKPX K uhungarumlaut -30\r\nKPX K umacron -30\r\nKPX K uogonek -30\r\nKPX K uring -30\r\nKPX K y -40\r\nKPX K yacute -40\r\nKPX K ydieresis -40\r\nKPX Kcommaaccent O -30\r\nKPX Kcommaaccent Oacute -30\r\nKPX Kcommaaccent Ocircumflex -30\r\nKPX Kcommaaccent Odieresis -30\r\nKPX Kcommaaccent Ograve -30\r\nKPX Kcommaaccent Ohungarumlaut -30\r\nKPX Kcommaaccent Omacron -30\r\nKPX Kcommaaccent Oslash -30\r\nKPX Kcommaaccent Otilde -30\r\nKPX Kcommaaccent e -15\r\nKPX Kcommaaccent eacute -15\r\nKPX Kcommaaccent ecaron -15\r\nKPX Kcommaaccent ecircumflex -15\r\nKPX Kcommaaccent edieresis -15\r\nKPX Kcommaaccent edotaccent -15\r\nKPX Kcommaaccent egrave -15\r\nKPX Kcommaaccent emacron -15\r\nKPX Kcommaaccent eogonek -15\r\nKPX Kcommaaccent o -35\r\nKPX Kcommaaccent oacute -35\r\nKPX Kcommaaccent ocircumflex -35\r\nKPX Kcommaaccent odieresis -35\r\nKPX Kcommaaccent ograve -35\r\nKPX Kcommaaccent ohungarumlaut -35\r\nKPX Kcommaaccent omacron -35\r\nKPX Kcommaaccent oslash -35\r\nKPX Kcommaaccent otilde -35\r\nKPX Kcommaaccent u -30\r\nKPX Kcommaaccent uacute -30\r\nKPX Kcommaaccent ucircumflex -30\r\nKPX Kcommaaccent udieresis -30\r\nKPX Kcommaaccent ugrave -30\r\nKPX Kcommaaccent uhungarumlaut -30\r\nKPX Kcommaaccent umacron -30\r\nKPX Kcommaaccent uogonek -30\r\nKPX Kcommaaccent uring -30\r\nKPX Kcommaaccent y -40\r\nKPX Kcommaaccent yacute -40\r\nKPX Kcommaaccent ydieresis -40\r\nKPX L T -90\r\nKPX L Tcaron -90\r\nKPX L Tcommaaccent -90\r\nKPX L V -110\r\nKPX L W -80\r\nKPX L Y -120\r\nKPX L Yacute -120\r\nKPX L Ydieresis -120\r\nKPX L quotedblright -140\r\nKPX L quoteright -140\r\nKPX L y -30\r\nKPX L yacute -30\r\nKPX L ydieresis -30\r\nKPX Lacute T -90\r\nKPX Lacute Tcaron -90\r\nKPX Lacute Tcommaaccent -90\r\nKPX Lacute V -110\r\nKPX Lacute W -80\r\nKPX Lacute Y -120\r\nKPX Lacute Yacute -120\r\nKPX Lacute Ydieresis -120\r\nKPX Lacute quotedblright -140\r\nKPX Lacute quoteright -140\r\nKPX Lacute y -30\r\nKPX Lacute yacute -30\r\nKPX Lacute ydieresis -30\r\nKPX Lcommaaccent T -90\r\nKPX Lcommaaccent Tcaron -90\r\nKPX Lcommaaccent Tcommaaccent -90\r\nKPX Lcommaaccent V -110\r\nKPX Lcommaaccent W -80\r\nKPX Lcommaaccent Y -120\r\nKPX Lcommaaccent Yacute -120\r\nKPX Lcommaaccent Ydieresis -120\r\nKPX Lcommaaccent quotedblright -140\r\nKPX Lcommaaccent quoteright -140\r\nKPX Lcommaaccent y -30\r\nKPX Lcommaaccent yacute -30\r\nKPX Lcommaaccent ydieresis -30\r\nKPX Lslash T -90\r\nKPX Lslash Tcaron -90\r\nKPX Lslash Tcommaaccent -90\r\nKPX Lslash V -110\r\nKPX Lslash W -80\r\nKPX Lslash Y -120\r\nKPX Lslash Yacute -120\r\nKPX Lslash Ydieresis -120\r\nKPX Lslash quotedblright -140\r\nKPX Lslash quoteright -140\r\nKPX Lslash y -30\r\nKPX Lslash yacute -30\r\nKPX Lslash ydieresis -30\r\nKPX O A -50\r\nKPX O Aacute -50\r\nKPX O Abreve -50\r\nKPX O Acircumflex -50\r\nKPX O Adieresis -50\r\nKPX O Agrave -50\r\nKPX O Amacron -50\r\nKPX O Aogonek -50\r\nKPX O Aring -50\r\nKPX O Atilde -50\r\nKPX O T -40\r\nKPX O Tcaron -40\r\nKPX O Tcommaaccent -40\r\nKPX O V -50\r\nKPX O W -50\r\nKPX O X -50\r\nKPX O Y -70\r\nKPX O Yacute -70\r\nKPX O Ydieresis -70\r\nKPX O comma -40\r\nKPX O period -40\r\nKPX Oacute A -50\r\nKPX Oacute Aacute -50\r\nKPX Oacute Abreve -50\r\nKPX Oacute Acircumflex -50\r\nKPX Oacute Adieresis -50\r\nKPX Oacute Agrave -50\r\nKPX Oacute Amacron -50\r\nKPX Oacute Aogonek -50\r\nKPX Oacute Aring -50\r\nKPX Oacute Atilde -50\r\nKPX Oacute T -40\r\nKPX Oacute Tcaron -40\r\nKPX Oacute Tcommaaccent -40\r\nKPX Oacute V -50\r\nKPX Oacute W -50\r\nKPX Oacute X -50\r\nKPX Oacute Y -70\r\nKPX Oacute Yacute -70\r\nKPX Oacute Ydieresis -70\r\nKPX Oacute comma -40\r\nKPX Oacute period -40\r\nKPX Ocircumflex A -50\r\nKPX Ocircumflex Aacute -50\r\nKPX Ocircumflex Abreve -50\r\nKPX Ocircumflex Acircumflex -50\r\nKPX Ocircumflex Adieresis -50\r\nKPX Ocircumflex Agrave -50\r\nKPX Ocircumflex Amacron -50\r\nKPX Ocircumflex Aogonek -50\r\nKPX Ocircumflex Aring -50\r\nKPX Ocircumflex Atilde -50\r\nKPX Ocircumflex T -40\r\nKPX Ocircumflex Tcaron -40\r\nKPX Ocircumflex Tcommaaccent -40\r\nKPX Ocircumflex V -50\r\nKPX Ocircumflex W -50\r\nKPX Ocircumflex X -50\r\nKPX Ocircumflex Y -70\r\nKPX Ocircumflex Yacute -70\r\nKPX Ocircumflex Ydieresis -70\r\nKPX Ocircumflex comma -40\r\nKPX Ocircumflex period -40\r\nKPX Odieresis A -50\r\nKPX Odieresis Aacute -50\r\nKPX Odieresis Abreve -50\r\nKPX Odieresis Acircumflex -50\r\nKPX Odieresis Adieresis -50\r\nKPX Odieresis Agrave -50\r\nKPX Odieresis Amacron -50\r\nKPX Odieresis Aogonek -50\r\nKPX Odieresis Aring -50\r\nKPX Odieresis Atilde -50\r\nKPX Odieresis T -40\r\nKPX Odieresis Tcaron -40\r\nKPX Odieresis Tcommaaccent -40\r\nKPX Odieresis V -50\r\nKPX Odieresis W -50\r\nKPX Odieresis X -50\r\nKPX Odieresis Y -70\r\nKPX Odieresis Yacute -70\r\nKPX Odieresis Ydieresis -70\r\nKPX Odieresis comma -40\r\nKPX Odieresis period -40\r\nKPX Ograve A -50\r\nKPX Ograve Aacute -50\r\nKPX Ograve Abreve -50\r\nKPX Ograve Acircumflex -50\r\nKPX Ograve Adieresis -50\r\nKPX Ograve Agrave -50\r\nKPX Ograve Amacron -50\r\nKPX Ograve Aogonek -50\r\nKPX Ograve Aring -50\r\nKPX Ograve Atilde -50\r\nKPX Ograve T -40\r\nKPX Ograve Tcaron -40\r\nKPX Ograve Tcommaaccent -40\r\nKPX Ograve V -50\r\nKPX Ograve W -50\r\nKPX Ograve X -50\r\nKPX Ograve Y -70\r\nKPX Ograve Yacute -70\r\nKPX Ograve Ydieresis -70\r\nKPX Ograve comma -40\r\nKPX Ograve period -40\r\nKPX Ohungarumlaut A -50\r\nKPX Ohungarumlaut Aacute -50\r\nKPX Ohungarumlaut Abreve -50\r\nKPX Ohungarumlaut Acircumflex -50\r\nKPX Ohungarumlaut Adieresis -50\r\nKPX Ohungarumlaut Agrave -50\r\nKPX Ohungarumlaut Amacron -50\r\nKPX Ohungarumlaut Aogonek -50\r\nKPX Ohungarumlaut Aring -50\r\nKPX Ohungarumlaut Atilde -50\r\nKPX Ohungarumlaut T -40\r\nKPX Ohungarumlaut Tcaron -40\r\nKPX Ohungarumlaut Tcommaaccent -40\r\nKPX Ohungarumlaut V -50\r\nKPX Ohungarumlaut W -50\r\nKPX Ohungarumlaut X -50\r\nKPX Ohungarumlaut Y -70\r\nKPX Ohungarumlaut Yacute -70\r\nKPX Ohungarumlaut Ydieresis -70\r\nKPX Ohungarumlaut comma -40\r\nKPX Ohungarumlaut period -40\r\nKPX Omacron A -50\r\nKPX Omacron Aacute -50\r\nKPX Omacron Abreve -50\r\nKPX Omacron Acircumflex -50\r\nKPX Omacron Adieresis -50\r\nKPX Omacron Agrave -50\r\nKPX Omacron Amacron -50\r\nKPX Omacron Aogonek -50\r\nKPX Omacron Aring -50\r\nKPX Omacron Atilde -50\r\nKPX Omacron T -40\r\nKPX Omacron Tcaron -40\r\nKPX Omacron Tcommaaccent -40\r\nKPX Omacron V -50\r\nKPX Omacron W -50\r\nKPX Omacron X -50\r\nKPX Omacron Y -70\r\nKPX Omacron Yacute -70\r\nKPX Omacron Ydieresis -70\r\nKPX Omacron comma -40\r\nKPX Omacron period -40\r\nKPX Oslash A -50\r\nKPX Oslash Aacute -50\r\nKPX Oslash Abreve -50\r\nKPX Oslash Acircumflex -50\r\nKPX Oslash Adieresis -50\r\nKPX Oslash Agrave -50\r\nKPX Oslash Amacron -50\r\nKPX Oslash Aogonek -50\r\nKPX Oslash Aring -50\r\nKPX Oslash Atilde -50\r\nKPX Oslash T -40\r\nKPX Oslash Tcaron -40\r\nKPX Oslash Tcommaaccent -40\r\nKPX Oslash V -50\r\nKPX Oslash W -50\r\nKPX Oslash X -50\r\nKPX Oslash Y -70\r\nKPX Oslash Yacute -70\r\nKPX Oslash Ydieresis -70\r\nKPX Oslash comma -40\r\nKPX Oslash period -40\r\nKPX Otilde A -50\r\nKPX Otilde Aacute -50\r\nKPX Otilde Abreve -50\r\nKPX Otilde Acircumflex -50\r\nKPX Otilde Adieresis -50\r\nKPX Otilde Agrave -50\r\nKPX Otilde Amacron -50\r\nKPX Otilde Aogonek -50\r\nKPX Otilde Aring -50\r\nKPX Otilde Atilde -50\r\nKPX Otilde T -40\r\nKPX Otilde Tcaron -40\r\nKPX Otilde Tcommaaccent -40\r\nKPX Otilde V -50\r\nKPX Otilde W -50\r\nKPX Otilde X -50\r\nKPX Otilde Y -70\r\nKPX Otilde Yacute -70\r\nKPX Otilde Ydieresis -70\r\nKPX Otilde comma -40\r\nKPX Otilde period -40\r\nKPX P A -100\r\nKPX P Aacute -100\r\nKPX P Abreve -100\r\nKPX P Acircumflex -100\r\nKPX P Adieresis -100\r\nKPX P Agrave -100\r\nKPX P Amacron -100\r\nKPX P Aogonek -100\r\nKPX P Aring -100\r\nKPX P Atilde -100\r\nKPX P a -30\r\nKPX P aacute -30\r\nKPX P abreve -30\r\nKPX P acircumflex -30\r\nKPX P adieresis -30\r\nKPX P agrave -30\r\nKPX P amacron -30\r\nKPX P aogonek -30\r\nKPX P aring -30\r\nKPX P atilde -30\r\nKPX P comma -120\r\nKPX P e -30\r\nKPX P eacute -30\r\nKPX P ecaron -30\r\nKPX P ecircumflex -30\r\nKPX P edieresis -30\r\nKPX P edotaccent -30\r\nKPX P egrave -30\r\nKPX P emacron -30\r\nKPX P eogonek -30\r\nKPX P o -40\r\nKPX P oacute -40\r\nKPX P ocircumflex -40\r\nKPX P odieresis -40\r\nKPX P ograve -40\r\nKPX P ohungarumlaut -40\r\nKPX P omacron -40\r\nKPX P oslash -40\r\nKPX P otilde -40\r\nKPX P period -120\r\nKPX Q U -10\r\nKPX Q Uacute -10\r\nKPX Q Ucircumflex -10\r\nKPX Q Udieresis -10\r\nKPX Q Ugrave -10\r\nKPX Q Uhungarumlaut -10\r\nKPX Q Umacron -10\r\nKPX Q Uogonek -10\r\nKPX Q Uring -10\r\nKPX Q comma 20\r\nKPX Q period 20\r\nKPX R O -20\r\nKPX R Oacute -20\r\nKPX R Ocircumflex -20\r\nKPX R Odieresis -20\r\nKPX R Ograve -20\r\nKPX R Ohungarumlaut -20\r\nKPX R Omacron -20\r\nKPX R Oslash -20\r\nKPX R Otilde -20\r\nKPX R T -20\r\nKPX R Tcaron -20\r\nKPX R Tcommaaccent -20\r\nKPX R U -20\r\nKPX R Uacute -20\r\nKPX R Ucircumflex -20\r\nKPX R Udieresis -20\r\nKPX R Ugrave -20\r\nKPX R Uhungarumlaut -20\r\nKPX R Umacron -20\r\nKPX R Uogonek -20\r\nKPX R Uring -20\r\nKPX R V -50\r\nKPX R W -40\r\nKPX R Y -50\r\nKPX R Yacute -50\r\nKPX R Ydieresis -50\r\nKPX Racute O -20\r\nKPX Racute Oacute -20\r\nKPX Racute Ocircumflex -20\r\nKPX Racute Odieresis -20\r\nKPX Racute Ograve -20\r\nKPX Racute Ohungarumlaut -20\r\nKPX Racute Omacron -20\r\nKPX Racute Oslash -20\r\nKPX Racute Otilde -20\r\nKPX Racute T -20\r\nKPX Racute Tcaron -20\r\nKPX Racute Tcommaaccent -20\r\nKPX Racute U -20\r\nKPX Racute Uacute -20\r\nKPX Racute Ucircumflex -20\r\nKPX Racute Udieresis -20\r\nKPX Racute Ugrave -20\r\nKPX Racute Uhungarumlaut -20\r\nKPX Racute Umacron -20\r\nKPX Racute Uogonek -20\r\nKPX Racute Uring -20\r\nKPX Racute V -50\r\nKPX Racute W -40\r\nKPX Racute Y -50\r\nKPX Racute Yacute -50\r\nKPX Racute Ydieresis -50\r\nKPX Rcaron O -20\r\nKPX Rcaron Oacute -20\r\nKPX Rcaron Ocircumflex -20\r\nKPX Rcaron Odieresis -20\r\nKPX Rcaron Ograve -20\r\nKPX Rcaron Ohungarumlaut -20\r\nKPX Rcaron Omacron -20\r\nKPX Rcaron Oslash -20\r\nKPX Rcaron Otilde -20\r\nKPX Rcaron T -20\r\nKPX Rcaron Tcaron -20\r\nKPX Rcaron Tcommaaccent -20\r\nKPX Rcaron U -20\r\nKPX Rcaron Uacute -20\r\nKPX Rcaron Ucircumflex -20\r\nKPX Rcaron Udieresis -20\r\nKPX Rcaron Ugrave -20\r\nKPX Rcaron Uhungarumlaut -20\r\nKPX Rcaron Umacron -20\r\nKPX Rcaron Uogonek -20\r\nKPX Rcaron Uring -20\r\nKPX Rcaron V -50\r\nKPX Rcaron W -40\r\nKPX Rcaron Y -50\r\nKPX Rcaron Yacute -50\r\nKPX Rcaron Ydieresis -50\r\nKPX Rcommaaccent O -20\r\nKPX Rcommaaccent Oacute -20\r\nKPX Rcommaaccent Ocircumflex -20\r\nKPX Rcommaaccent Odieresis -20\r\nKPX Rcommaaccent Ograve -20\r\nKPX Rcommaaccent Ohungarumlaut -20\r\nKPX Rcommaaccent Omacron -20\r\nKPX Rcommaaccent Oslash -20\r\nKPX Rcommaaccent Otilde -20\r\nKPX Rcommaaccent T -20\r\nKPX Rcommaaccent Tcaron -20\r\nKPX Rcommaaccent Tcommaaccent -20\r\nKPX Rcommaaccent U -20\r\nKPX Rcommaaccent Uacute -20\r\nKPX Rcommaaccent Ucircumflex -20\r\nKPX Rcommaaccent Udieresis -20\r\nKPX Rcommaaccent Ugrave -20\r\nKPX Rcommaaccent Uhungarumlaut -20\r\nKPX Rcommaaccent Umacron -20\r\nKPX Rcommaaccent Uogonek -20\r\nKPX Rcommaaccent Uring -20\r\nKPX Rcommaaccent V -50\r\nKPX Rcommaaccent W -40\r\nKPX Rcommaaccent Y -50\r\nKPX Rcommaaccent Yacute -50\r\nKPX Rcommaaccent Ydieresis -50\r\nKPX T A -90\r\nKPX T Aacute -90\r\nKPX T Abreve -90\r\nKPX T Acircumflex -90\r\nKPX T Adieresis -90\r\nKPX T Agrave -90\r\nKPX T Amacron -90\r\nKPX T Aogonek -90\r\nKPX T Aring -90\r\nKPX T Atilde -90\r\nKPX T O -40\r\nKPX T Oacute -40\r\nKPX T Ocircumflex -40\r\nKPX T Odieresis -40\r\nKPX T Ograve -40\r\nKPX T Ohungarumlaut -40\r\nKPX T Omacron -40\r\nKPX T Oslash -40\r\nKPX T Otilde -40\r\nKPX T a -80\r\nKPX T aacute -80\r\nKPX T abreve -80\r\nKPX T acircumflex -80\r\nKPX T adieresis -80\r\nKPX T agrave -80\r\nKPX T amacron -80\r\nKPX T aogonek -80\r\nKPX T aring -80\r\nKPX T atilde -80\r\nKPX T colon -40\r\nKPX T comma -80\r\nKPX T e -60\r\nKPX T eacute -60\r\nKPX T ecaron -60\r\nKPX T ecircumflex -60\r\nKPX T edieresis -60\r\nKPX T edotaccent -60\r\nKPX T egrave -60\r\nKPX T emacron -60\r\nKPX T eogonek -60\r\nKPX T hyphen -120\r\nKPX T o -80\r\nKPX T oacute -80\r\nKPX T ocircumflex -80\r\nKPX T odieresis -80\r\nKPX T ograve -80\r\nKPX T ohungarumlaut -80\r\nKPX T omacron -80\r\nKPX T oslash -80\r\nKPX T otilde -80\r\nKPX T period -80\r\nKPX T r -80\r\nKPX T racute -80\r\nKPX T rcommaaccent -80\r\nKPX T semicolon -40\r\nKPX T u -90\r\nKPX T uacute -90\r\nKPX T ucircumflex -90\r\nKPX T udieresis -90\r\nKPX T ugrave -90\r\nKPX T uhungarumlaut -90\r\nKPX T umacron -90\r\nKPX T uogonek -90\r\nKPX T uring -90\r\nKPX T w -60\r\nKPX T y -60\r\nKPX T yacute -60\r\nKPX T ydieresis -60\r\nKPX Tcaron A -90\r\nKPX Tcaron Aacute -90\r\nKPX Tcaron Abreve -90\r\nKPX Tcaron Acircumflex -90\r\nKPX Tcaron Adieresis -90\r\nKPX Tcaron Agrave -90\r\nKPX Tcaron Amacron -90\r\nKPX Tcaron Aogonek -90\r\nKPX Tcaron Aring -90\r\nKPX Tcaron Atilde -90\r\nKPX Tcaron O -40\r\nKPX Tcaron Oacute -40\r\nKPX Tcaron Ocircumflex -40\r\nKPX Tcaron Odieresis -40\r\nKPX Tcaron Ograve -40\r\nKPX Tcaron Ohungarumlaut -40\r\nKPX Tcaron Omacron -40\r\nKPX Tcaron Oslash -40\r\nKPX Tcaron Otilde -40\r\nKPX Tcaron a -80\r\nKPX Tcaron aacute -80\r\nKPX Tcaron abreve -80\r\nKPX Tcaron acircumflex -80\r\nKPX Tcaron adieresis -80\r\nKPX Tcaron agrave -80\r\nKPX Tcaron amacron -80\r\nKPX Tcaron aogonek -80\r\nKPX Tcaron aring -80\r\nKPX Tcaron atilde -80\r\nKPX Tcaron colon -40\r\nKPX Tcaron comma -80\r\nKPX Tcaron e -60\r\nKPX Tcaron eacute -60\r\nKPX Tcaron ecaron -60\r\nKPX Tcaron ecircumflex -60\r\nKPX Tcaron edieresis -60\r\nKPX Tcaron edotaccent -60\r\nKPX Tcaron egrave -60\r\nKPX Tcaron emacron -60\r\nKPX Tcaron eogonek -60\r\nKPX Tcaron hyphen -120\r\nKPX Tcaron o -80\r\nKPX Tcaron oacute -80\r\nKPX Tcaron ocircumflex -80\r\nKPX Tcaron odieresis -80\r\nKPX Tcaron ograve -80\r\nKPX Tcaron ohungarumlaut -80\r\nKPX Tcaron omacron -80\r\nKPX Tcaron oslash -80\r\nKPX Tcaron otilde -80\r\nKPX Tcaron period -80\r\nKPX Tcaron r -80\r\nKPX Tcaron racute -80\r\nKPX Tcaron rcommaaccent -80\r\nKPX Tcaron semicolon -40\r\nKPX Tcaron u -90\r\nKPX Tcaron uacute -90\r\nKPX Tcaron ucircumflex -90\r\nKPX Tcaron udieresis -90\r\nKPX Tcaron ugrave -90\r\nKPX Tcaron uhungarumlaut -90\r\nKPX Tcaron umacron -90\r\nKPX Tcaron uogonek -90\r\nKPX Tcaron uring -90\r\nKPX Tcaron w -60\r\nKPX Tcaron y -60\r\nKPX Tcaron yacute -60\r\nKPX Tcaron ydieresis -60\r\nKPX Tcommaaccent A -90\r\nKPX Tcommaaccent Aacute -90\r\nKPX Tcommaaccent Abreve -90\r\nKPX Tcommaaccent Acircumflex -90\r\nKPX Tcommaaccent Adieresis -90\r\nKPX Tcommaaccent Agrave -90\r\nKPX Tcommaaccent Amacron -90\r\nKPX Tcommaaccent Aogonek -90\r\nKPX Tcommaaccent Aring -90\r\nKPX Tcommaaccent Atilde -90\r\nKPX Tcommaaccent O -40\r\nKPX Tcommaaccent Oacute -40\r\nKPX Tcommaaccent Ocircumflex -40\r\nKPX Tcommaaccent Odieresis -40\r\nKPX Tcommaaccent Ograve -40\r\nKPX Tcommaaccent Ohungarumlaut -40\r\nKPX Tcommaaccent Omacron -40\r\nKPX Tcommaaccent Oslash -40\r\nKPX Tcommaaccent Otilde -40\r\nKPX Tcommaaccent a -80\r\nKPX Tcommaaccent aacute -80\r\nKPX Tcommaaccent abreve -80\r\nKPX Tcommaaccent acircumflex -80\r\nKPX Tcommaaccent adieresis -80\r\nKPX Tcommaaccent agrave -80\r\nKPX Tcommaaccent amacron -80\r\nKPX Tcommaaccent aogonek -80\r\nKPX Tcommaaccent aring -80\r\nKPX Tcommaaccent atilde -80\r\nKPX Tcommaaccent colon -40\r\nKPX Tcommaaccent comma -80\r\nKPX Tcommaaccent e -60\r\nKPX Tcommaaccent eacute -60\r\nKPX Tcommaaccent ecaron -60\r\nKPX Tcommaaccent ecircumflex -60\r\nKPX Tcommaaccent edieresis -60\r\nKPX Tcommaaccent edotaccent -60\r\nKPX Tcommaaccent egrave -60\r\nKPX Tcommaaccent emacron -60\r\nKPX Tcommaaccent eogonek -60\r\nKPX Tcommaaccent hyphen -120\r\nKPX Tcommaaccent o -80\r\nKPX Tcommaaccent oacute -80\r\nKPX Tcommaaccent ocircumflex -80\r\nKPX Tcommaaccent odieresis -80\r\nKPX Tcommaaccent ograve -80\r\nKPX Tcommaaccent ohungarumlaut -80\r\nKPX Tcommaaccent omacron -80\r\nKPX Tcommaaccent oslash -80\r\nKPX Tcommaaccent otilde -80\r\nKPX Tcommaaccent period -80\r\nKPX Tcommaaccent r -80\r\nKPX Tcommaaccent racute -80\r\nKPX Tcommaaccent rcommaaccent -80\r\nKPX Tcommaaccent semicolon -40\r\nKPX Tcommaaccent u -90\r\nKPX Tcommaaccent uacute -90\r\nKPX Tcommaaccent ucircumflex -90\r\nKPX Tcommaaccent udieresis -90\r\nKPX Tcommaaccent ugrave -90\r\nKPX Tcommaaccent uhungarumlaut -90\r\nKPX Tcommaaccent umacron -90\r\nKPX Tcommaaccent uogonek -90\r\nKPX Tcommaaccent uring -90\r\nKPX Tcommaaccent w -60\r\nKPX Tcommaaccent y -60\r\nKPX Tcommaaccent yacute -60\r\nKPX Tcommaaccent ydieresis -60\r\nKPX U A -50\r\nKPX U Aacute -50\r\nKPX U Abreve -50\r\nKPX U Acircumflex -50\r\nKPX U Adieresis -50\r\nKPX U Agrave -50\r\nKPX U Amacron -50\r\nKPX U Aogonek -50\r\nKPX U Aring -50\r\nKPX U Atilde -50\r\nKPX U comma -30\r\nKPX U period -30\r\nKPX Uacute A -50\r\nKPX Uacute Aacute -50\r\nKPX Uacute Abreve -50\r\nKPX Uacute Acircumflex -50\r\nKPX Uacute Adieresis -50\r\nKPX Uacute Agrave -50\r\nKPX Uacute Amacron -50\r\nKPX Uacute Aogonek -50\r\nKPX Uacute Aring -50\r\nKPX Uacute Atilde -50\r\nKPX Uacute comma -30\r\nKPX Uacute period -30\r\nKPX Ucircumflex A -50\r\nKPX Ucircumflex Aacute -50\r\nKPX Ucircumflex Abreve -50\r\nKPX Ucircumflex Acircumflex -50\r\nKPX Ucircumflex Adieresis -50\r\nKPX Ucircumflex Agrave -50\r\nKPX Ucircumflex Amacron -50\r\nKPX Ucircumflex Aogonek -50\r\nKPX Ucircumflex Aring -50\r\nKPX Ucircumflex Atilde -50\r\nKPX Ucircumflex comma -30\r\nKPX Ucircumflex period -30\r\nKPX Udieresis A -50\r\nKPX Udieresis Aacute -50\r\nKPX Udieresis Abreve -50\r\nKPX Udieresis Acircumflex -50\r\nKPX Udieresis Adieresis -50\r\nKPX Udieresis Agrave -50\r\nKPX Udieresis Amacron -50\r\nKPX Udieresis Aogonek -50\r\nKPX Udieresis Aring -50\r\nKPX Udieresis Atilde -50\r\nKPX Udieresis comma -30\r\nKPX Udieresis period -30\r\nKPX Ugrave A -50\r\nKPX Ugrave Aacute -50\r\nKPX Ugrave Abreve -50\r\nKPX Ugrave Acircumflex -50\r\nKPX Ugrave Adieresis -50\r\nKPX Ugrave Agrave -50\r\nKPX Ugrave Amacron -50\r\nKPX Ugrave Aogonek -50\r\nKPX Ugrave Aring -50\r\nKPX Ugrave Atilde -50\r\nKPX Ugrave comma -30\r\nKPX Ugrave period -30\r\nKPX Uhungarumlaut A -50\r\nKPX Uhungarumlaut Aacute -50\r\nKPX Uhungarumlaut Abreve -50\r\nKPX Uhungarumlaut Acircumflex -50\r\nKPX Uhungarumlaut Adieresis -50\r\nKPX Uhungarumlaut Agrave -50\r\nKPX Uhungarumlaut Amacron -50\r\nKPX Uhungarumlaut Aogonek -50\r\nKPX Uhungarumlaut Aring -50\r\nKPX Uhungarumlaut Atilde -50\r\nKPX Uhungarumlaut comma -30\r\nKPX Uhungarumlaut period -30\r\nKPX Umacron A -50\r\nKPX Umacron Aacute -50\r\nKPX Umacron Abreve -50\r\nKPX Umacron Acircumflex -50\r\nKPX Umacron Adieresis -50\r\nKPX Umacron Agrave -50\r\nKPX Umacron Amacron -50\r\nKPX Umacron Aogonek -50\r\nKPX Umacron Aring -50\r\nKPX Umacron Atilde -50\r\nKPX Umacron comma -30\r\nKPX Umacron period -30\r\nKPX Uogonek A -50\r\nKPX Uogonek Aacute -50\r\nKPX Uogonek Abreve -50\r\nKPX Uogonek Acircumflex -50\r\nKPX Uogonek Adieresis -50\r\nKPX Uogonek Agrave -50\r\nKPX Uogonek Amacron -50\r\nKPX Uogonek Aogonek -50\r\nKPX Uogonek Aring -50\r\nKPX Uogonek Atilde -50\r\nKPX Uogonek comma -30\r\nKPX Uogonek period -30\r\nKPX Uring A -50\r\nKPX Uring Aacute -50\r\nKPX Uring Abreve -50\r\nKPX Uring Acircumflex -50\r\nKPX Uring Adieresis -50\r\nKPX Uring Agrave -50\r\nKPX Uring Amacron -50\r\nKPX Uring Aogonek -50\r\nKPX Uring Aring -50\r\nKPX Uring Atilde -50\r\nKPX Uring comma -30\r\nKPX Uring period -30\r\nKPX V A -80\r\nKPX V Aacute -80\r\nKPX V Abreve -80\r\nKPX V Acircumflex -80\r\nKPX V Adieresis -80\r\nKPX V Agrave -80\r\nKPX V Amacron -80\r\nKPX V Aogonek -80\r\nKPX V Aring -80\r\nKPX V Atilde -80\r\nKPX V G -50\r\nKPX V Gbreve -50\r\nKPX V Gcommaaccent -50\r\nKPX V O -50\r\nKPX V Oacute -50\r\nKPX V Ocircumflex -50\r\nKPX V Odieresis -50\r\nKPX V Ograve -50\r\nKPX V Ohungarumlaut -50\r\nKPX V Omacron -50\r\nKPX V Oslash -50\r\nKPX V Otilde -50\r\nKPX V a -60\r\nKPX V aacute -60\r\nKPX V abreve -60\r\nKPX V acircumflex -60\r\nKPX V adieresis -60\r\nKPX V agrave -60\r\nKPX V amacron -60\r\nKPX V aogonek -60\r\nKPX V aring -60\r\nKPX V atilde -60\r\nKPX V colon -40\r\nKPX V comma -120\r\nKPX V e -50\r\nKPX V eacute -50\r\nKPX V ecaron -50\r\nKPX V ecircumflex -50\r\nKPX V edieresis -50\r\nKPX V edotaccent -50\r\nKPX V egrave -50\r\nKPX V emacron -50\r\nKPX V eogonek -50\r\nKPX V hyphen -80\r\nKPX V o -90\r\nKPX V oacute -90\r\nKPX V ocircumflex -90\r\nKPX V odieresis -90\r\nKPX V ograve -90\r\nKPX V ohungarumlaut -90\r\nKPX V omacron -90\r\nKPX V oslash -90\r\nKPX V otilde -90\r\nKPX V period -120\r\nKPX V semicolon -40\r\nKPX V u -60\r\nKPX V uacute -60\r\nKPX V ucircumflex -60\r\nKPX V udieresis -60\r\nKPX V ugrave -60\r\nKPX V uhungarumlaut -60\r\nKPX V umacron -60\r\nKPX V uogonek -60\r\nKPX V uring -60\r\nKPX W A -60\r\nKPX W Aacute -60\r\nKPX W Abreve -60\r\nKPX W Acircumflex -60\r\nKPX W Adieresis -60\r\nKPX W Agrave -60\r\nKPX W Amacron -60\r\nKPX W Aogonek -60\r\nKPX W Aring -60\r\nKPX W Atilde -60\r\nKPX W O -20\r\nKPX W Oacute -20\r\nKPX W Ocircumflex -20\r\nKPX W Odieresis -20\r\nKPX W Ograve -20\r\nKPX W Ohungarumlaut -20\r\nKPX W Omacron -20\r\nKPX W Oslash -20\r\nKPX W Otilde -20\r\nKPX W a -40\r\nKPX W aacute -40\r\nKPX W abreve -40\r\nKPX W acircumflex -40\r\nKPX W adieresis -40\r\nKPX W agrave -40\r\nKPX W amacron -40\r\nKPX W aogonek -40\r\nKPX W aring -40\r\nKPX W atilde -40\r\nKPX W colon -10\r\nKPX W comma -80\r\nKPX W e -35\r\nKPX W eacute -35\r\nKPX W ecaron -35\r\nKPX W ecircumflex -35\r\nKPX W edieresis -35\r\nKPX W edotaccent -35\r\nKPX W egrave -35\r\nKPX W emacron -35\r\nKPX W eogonek -35\r\nKPX W hyphen -40\r\nKPX W o -60\r\nKPX W oacute -60\r\nKPX W ocircumflex -60\r\nKPX W odieresis -60\r\nKPX W ograve -60\r\nKPX W ohungarumlaut -60\r\nKPX W omacron -60\r\nKPX W oslash -60\r\nKPX W otilde -60\r\nKPX W period -80\r\nKPX W semicolon -10\r\nKPX W u -45\r\nKPX W uacute -45\r\nKPX W ucircumflex -45\r\nKPX W udieresis -45\r\nKPX W ugrave -45\r\nKPX W uhungarumlaut -45\r\nKPX W umacron -45\r\nKPX W uogonek -45\r\nKPX W uring -45\r\nKPX W y -20\r\nKPX W yacute -20\r\nKPX W ydieresis -20\r\nKPX Y A -110\r\nKPX Y Aacute -110\r\nKPX Y Abreve -110\r\nKPX Y Acircumflex -110\r\nKPX Y Adieresis -110\r\nKPX Y Agrave -110\r\nKPX Y Amacron -110\r\nKPX Y Aogonek -110\r\nKPX Y Aring -110\r\nKPX Y Atilde -110\r\nKPX Y O -70\r\nKPX Y Oacute -70\r\nKPX Y Ocircumflex -70\r\nKPX Y Odieresis -70\r\nKPX Y Ograve -70\r\nKPX Y Ohungarumlaut -70\r\nKPX Y Omacron -70\r\nKPX Y Oslash -70\r\nKPX Y Otilde -70\r\nKPX Y a -90\r\nKPX Y aacute -90\r\nKPX Y abreve -90\r\nKPX Y acircumflex -90\r\nKPX Y adieresis -90\r\nKPX Y agrave -90\r\nKPX Y amacron -90\r\nKPX Y aogonek -90\r\nKPX Y aring -90\r\nKPX Y atilde -90\r\nKPX Y colon -50\r\nKPX Y comma -100\r\nKPX Y e -80\r\nKPX Y eacute -80\r\nKPX Y ecaron -80\r\nKPX Y ecircumflex -80\r\nKPX Y edieresis -80\r\nKPX Y edotaccent -80\r\nKPX Y egrave -80\r\nKPX Y emacron -80\r\nKPX Y eogonek -80\r\nKPX Y o -100\r\nKPX Y oacute -100\r\nKPX Y ocircumflex -100\r\nKPX Y odieresis -100\r\nKPX Y ograve -100\r\nKPX Y ohungarumlaut -100\r\nKPX Y omacron -100\r\nKPX Y oslash -100\r\nKPX Y otilde -100\r\nKPX Y period -100\r\nKPX Y semicolon -50\r\nKPX Y u -100\r\nKPX Y uacute -100\r\nKPX Y ucircumflex -100\r\nKPX Y udieresis -100\r\nKPX Y ugrave -100\r\nKPX Y uhungarumlaut -100\r\nKPX Y umacron -100\r\nKPX Y uogonek -100\r\nKPX Y uring -100\r\nKPX Yacute A -110\r\nKPX Yacute Aacute -110\r\nKPX Yacute Abreve -110\r\nKPX Yacute Acircumflex -110\r\nKPX Yacute Adieresis -110\r\nKPX Yacute Agrave -110\r\nKPX Yacute Amacron -110\r\nKPX Yacute Aogonek -110\r\nKPX Yacute Aring -110\r\nKPX Yacute Atilde -110\r\nKPX Yacute O -70\r\nKPX Yacute Oacute -70\r\nKPX Yacute Ocircumflex -70\r\nKPX Yacute Odieresis -70\r\nKPX Yacute Ograve -70\r\nKPX Yacute Ohungarumlaut -70\r\nKPX Yacute Omacron -70\r\nKPX Yacute Oslash -70\r\nKPX Yacute Otilde -70\r\nKPX Yacute a -90\r\nKPX Yacute aacute -90\r\nKPX Yacute abreve -90\r\nKPX Yacute acircumflex -90\r\nKPX Yacute adieresis -90\r\nKPX Yacute agrave -90\r\nKPX Yacute amacron -90\r\nKPX Yacute aogonek -90\r\nKPX Yacute aring -90\r\nKPX Yacute atilde -90\r\nKPX Yacute colon -50\r\nKPX Yacute comma -100\r\nKPX Yacute e -80\r\nKPX Yacute eacute -80\r\nKPX Yacute ecaron -80\r\nKPX Yacute ecircumflex -80\r\nKPX Yacute edieresis -80\r\nKPX Yacute edotaccent -80\r\nKPX Yacute egrave -80\r\nKPX Yacute emacron -80\r\nKPX Yacute eogonek -80\r\nKPX Yacute o -100\r\nKPX Yacute oacute -100\r\nKPX Yacute ocircumflex -100\r\nKPX Yacute odieresis -100\r\nKPX Yacute ograve -100\r\nKPX Yacute ohungarumlaut -100\r\nKPX Yacute omacron -100\r\nKPX Yacute oslash -100\r\nKPX Yacute otilde -100\r\nKPX Yacute period -100\r\nKPX Yacute semicolon -50\r\nKPX Yacute u -100\r\nKPX Yacute uacute -100\r\nKPX Yacute ucircumflex -100\r\nKPX Yacute udieresis -100\r\nKPX Yacute ugrave -100\r\nKPX Yacute uhungarumlaut -100\r\nKPX Yacute umacron -100\r\nKPX Yacute uogonek -100\r\nKPX Yacute uring -100\r\nKPX Ydieresis A -110\r\nKPX Ydieresis Aacute -110\r\nKPX Ydieresis Abreve -110\r\nKPX Ydieresis Acircumflex -110\r\nKPX Ydieresis Adieresis -110\r\nKPX Ydieresis Agrave -110\r\nKPX Ydieresis Amacron -110\r\nKPX Ydieresis Aogonek -110\r\nKPX Ydieresis Aring -110\r\nKPX Ydieresis Atilde -110\r\nKPX Ydieresis O -70\r\nKPX Ydieresis Oacute -70\r\nKPX Ydieresis Ocircumflex -70\r\nKPX Ydieresis Odieresis -70\r\nKPX Ydieresis Ograve -70\r\nKPX Ydieresis Ohungarumlaut -70\r\nKPX Ydieresis Omacron -70\r\nKPX Ydieresis Oslash -70\r\nKPX Ydieresis Otilde -70\r\nKPX Ydieresis a -90\r\nKPX Ydieresis aacute -90\r\nKPX Ydieresis abreve -90\r\nKPX Ydieresis acircumflex -90\r\nKPX Ydieresis adieresis -90\r\nKPX Ydieresis agrave -90\r\nKPX Ydieresis amacron -90\r\nKPX Ydieresis aogonek -90\r\nKPX Ydieresis aring -90\r\nKPX Ydieresis atilde -90\r\nKPX Ydieresis colon -50\r\nKPX Ydieresis comma -100\r\nKPX Ydieresis e -80\r\nKPX Ydieresis eacute -80\r\nKPX Ydieresis ecaron -80\r\nKPX Ydieresis ecircumflex -80\r\nKPX Ydieresis edieresis -80\r\nKPX Ydieresis edotaccent -80\r\nKPX Ydieresis egrave -80\r\nKPX Ydieresis emacron -80\r\nKPX Ydieresis eogonek -80\r\nKPX Ydieresis o -100\r\nKPX Ydieresis oacute -100\r\nKPX Ydieresis ocircumflex -100\r\nKPX Ydieresis odieresis -100\r\nKPX Ydieresis ograve -100\r\nKPX Ydieresis ohungarumlaut -100\r\nKPX Ydieresis omacron -100\r\nKPX Ydieresis oslash -100\r\nKPX Ydieresis otilde -100\r\nKPX Ydieresis period -100\r\nKPX Ydieresis semicolon -50\r\nKPX Ydieresis u -100\r\nKPX Ydieresis uacute -100\r\nKPX Ydieresis ucircumflex -100\r\nKPX Ydieresis udieresis -100\r\nKPX Ydieresis ugrave -100\r\nKPX Ydieresis uhungarumlaut -100\r\nKPX Ydieresis umacron -100\r\nKPX Ydieresis uogonek -100\r\nKPX Ydieresis uring -100\r\nKPX a g -10\r\nKPX a gbreve -10\r\nKPX a gcommaaccent -10\r\nKPX a v -15\r\nKPX a w -15\r\nKPX a y -20\r\nKPX a yacute -20\r\nKPX a ydieresis -20\r\nKPX aacute g -10\r\nKPX aacute gbreve -10\r\nKPX aacute gcommaaccent -10\r\nKPX aacute v -15\r\nKPX aacute w -15\r\nKPX aacute y -20\r\nKPX aacute yacute -20\r\nKPX aacute ydieresis -20\r\nKPX abreve g -10\r\nKPX abreve gbreve -10\r\nKPX abreve gcommaaccent -10\r\nKPX abreve v -15\r\nKPX abreve w -15\r\nKPX abreve y -20\r\nKPX abreve yacute -20\r\nKPX abreve ydieresis -20\r\nKPX acircumflex g -10\r\nKPX acircumflex gbreve -10\r\nKPX acircumflex gcommaaccent -10\r\nKPX acircumflex v -15\r\nKPX acircumflex w -15\r\nKPX acircumflex y -20\r\nKPX acircumflex yacute -20\r\nKPX acircumflex ydieresis -20\r\nKPX adieresis g -10\r\nKPX adieresis gbreve -10\r\nKPX adieresis gcommaaccent -10\r\nKPX adieresis v -15\r\nKPX adieresis w -15\r\nKPX adieresis y -20\r\nKPX adieresis yacute -20\r\nKPX adieresis ydieresis -20\r\nKPX agrave g -10\r\nKPX agrave gbreve -10\r\nKPX agrave gcommaaccent -10\r\nKPX agrave v -15\r\nKPX agrave w -15\r\nKPX agrave y -20\r\nKPX agrave yacute -20\r\nKPX agrave ydieresis -20\r\nKPX amacron g -10\r\nKPX amacron gbreve -10\r\nKPX amacron gcommaaccent -10\r\nKPX amacron v -15\r\nKPX amacron w -15\r\nKPX amacron y -20\r\nKPX amacron yacute -20\r\nKPX amacron ydieresis -20\r\nKPX aogonek g -10\r\nKPX aogonek gbreve -10\r\nKPX aogonek gcommaaccent -10\r\nKPX aogonek v -15\r\nKPX aogonek w -15\r\nKPX aogonek y -20\r\nKPX aogonek yacute -20\r\nKPX aogonek ydieresis -20\r\nKPX aring g -10\r\nKPX aring gbreve -10\r\nKPX aring gcommaaccent -10\r\nKPX aring v -15\r\nKPX aring w -15\r\nKPX aring y -20\r\nKPX aring yacute -20\r\nKPX aring ydieresis -20\r\nKPX atilde g -10\r\nKPX atilde gbreve -10\r\nKPX atilde gcommaaccent -10\r\nKPX atilde v -15\r\nKPX atilde w -15\r\nKPX atilde y -20\r\nKPX atilde yacute -20\r\nKPX atilde ydieresis -20\r\nKPX b l -10\r\nKPX b lacute -10\r\nKPX b lcommaaccent -10\r\nKPX b lslash -10\r\nKPX b u -20\r\nKPX b uacute -20\r\nKPX b ucircumflex -20\r\nKPX b udieresis -20\r\nKPX b ugrave -20\r\nKPX b uhungarumlaut -20\r\nKPX b umacron -20\r\nKPX b uogonek -20\r\nKPX b uring -20\r\nKPX b v -20\r\nKPX b y -20\r\nKPX b yacute -20\r\nKPX b ydieresis -20\r\nKPX c h -10\r\nKPX c k -20\r\nKPX c kcommaaccent -20\r\nKPX c l -20\r\nKPX c lacute -20\r\nKPX c lcommaaccent -20\r\nKPX c lslash -20\r\nKPX c y -10\r\nKPX c yacute -10\r\nKPX c ydieresis -10\r\nKPX cacute h -10\r\nKPX cacute k -20\r\nKPX cacute kcommaaccent -20\r\nKPX cacute l -20\r\nKPX cacute lacute -20\r\nKPX cacute lcommaaccent -20\r\nKPX cacute lslash -20\r\nKPX cacute y -10\r\nKPX cacute yacute -10\r\nKPX cacute ydieresis -10\r\nKPX ccaron h -10\r\nKPX ccaron k -20\r\nKPX ccaron kcommaaccent -20\r\nKPX ccaron l -20\r\nKPX ccaron lacute -20\r\nKPX ccaron lcommaaccent -20\r\nKPX ccaron lslash -20\r\nKPX ccaron y -10\r\nKPX ccaron yacute -10\r\nKPX ccaron ydieresis -10\r\nKPX ccedilla h -10\r\nKPX ccedilla k -20\r\nKPX ccedilla kcommaaccent -20\r\nKPX ccedilla l -20\r\nKPX ccedilla lacute -20\r\nKPX ccedilla lcommaaccent -20\r\nKPX ccedilla lslash -20\r\nKPX ccedilla y -10\r\nKPX ccedilla yacute -10\r\nKPX ccedilla ydieresis -10\r\nKPX colon space -40\r\nKPX comma quotedblright -120\r\nKPX comma quoteright -120\r\nKPX comma space -40\r\nKPX d d -10\r\nKPX d dcroat -10\r\nKPX d v -15\r\nKPX d w -15\r\nKPX d y -15\r\nKPX d yacute -15\r\nKPX d ydieresis -15\r\nKPX dcroat d -10\r\nKPX dcroat dcroat -10\r\nKPX dcroat v -15\r\nKPX dcroat w -15\r\nKPX dcroat y -15\r\nKPX dcroat yacute -15\r\nKPX dcroat ydieresis -15\r\nKPX e comma 10\r\nKPX e period 20\r\nKPX e v -15\r\nKPX e w -15\r\nKPX e x -15\r\nKPX e y -15\r\nKPX e yacute -15\r\nKPX e ydieresis -15\r\nKPX eacute comma 10\r\nKPX eacute period 20\r\nKPX eacute v -15\r\nKPX eacute w -15\r\nKPX eacute x -15\r\nKPX eacute y -15\r\nKPX eacute yacute -15\r\nKPX eacute ydieresis -15\r\nKPX ecaron comma 10\r\nKPX ecaron period 20\r\nKPX ecaron v -15\r\nKPX ecaron w -15\r\nKPX ecaron x -15\r\nKPX ecaron y -15\r\nKPX ecaron yacute -15\r\nKPX ecaron ydieresis -15\r\nKPX ecircumflex comma 10\r\nKPX ecircumflex period 20\r\nKPX ecircumflex v -15\r\nKPX ecircumflex w -15\r\nKPX ecircumflex x -15\r\nKPX ecircumflex y -15\r\nKPX ecircumflex yacute -15\r\nKPX ecircumflex ydieresis -15\r\nKPX edieresis comma 10\r\nKPX edieresis period 20\r\nKPX edieresis v -15\r\nKPX edieresis w -15\r\nKPX edieresis x -15\r\nKPX edieresis y -15\r\nKPX edieresis yacute -15\r\nKPX edieresis ydieresis -15\r\nKPX edotaccent comma 10\r\nKPX edotaccent period 20\r\nKPX edotaccent v -15\r\nKPX edotaccent w -15\r\nKPX edotaccent x -15\r\nKPX edotaccent y -15\r\nKPX edotaccent yacute -15\r\nKPX edotaccent ydieresis -15\r\nKPX egrave comma 10\r\nKPX egrave period 20\r\nKPX egrave v -15\r\nKPX egrave w -15\r\nKPX egrave x -15\r\nKPX egrave y -15\r\nKPX egrave yacute -15\r\nKPX egrave ydieresis -15\r\nKPX emacron comma 10\r\nKPX emacron period 20\r\nKPX emacron v -15\r\nKPX emacron w -15\r\nKPX emacron x -15\r\nKPX emacron y -15\r\nKPX emacron yacute -15\r\nKPX emacron ydieresis -15\r\nKPX eogonek comma 10\r\nKPX eogonek period 20\r\nKPX eogonek v -15\r\nKPX eogonek w -15\r\nKPX eogonek x -15\r\nKPX eogonek y -15\r\nKPX eogonek yacute -15\r\nKPX eogonek ydieresis -15\r\nKPX f comma -10\r\nKPX f e -10\r\nKPX f eacute -10\r\nKPX f ecaron -10\r\nKPX f ecircumflex -10\r\nKPX f edieresis -10\r\nKPX f edotaccent -10\r\nKPX f egrave -10\r\nKPX f emacron -10\r\nKPX f eogonek -10\r\nKPX f o -20\r\nKPX f oacute -20\r\nKPX f ocircumflex -20\r\nKPX f odieresis -20\r\nKPX f ograve -20\r\nKPX f ohungarumlaut -20\r\nKPX f omacron -20\r\nKPX f oslash -20\r\nKPX f otilde -20\r\nKPX f period -10\r\nKPX f quotedblright 30\r\nKPX f quoteright 30\r\nKPX g e 10\r\nKPX g eacute 10\r\nKPX g ecaron 10\r\nKPX g ecircumflex 10\r\nKPX g edieresis 10\r\nKPX g edotaccent 10\r\nKPX g egrave 10\r\nKPX g emacron 10\r\nKPX g eogonek 10\r\nKPX g g -10\r\nKPX g gbreve -10\r\nKPX g gcommaaccent -10\r\nKPX gbreve e 10\r\nKPX gbreve eacute 10\r\nKPX gbreve ecaron 10\r\nKPX gbreve ecircumflex 10\r\nKPX gbreve edieresis 10\r\nKPX gbreve edotaccent 10\r\nKPX gbreve egrave 10\r\nKPX gbreve emacron 10\r\nKPX gbreve eogonek 10\r\nKPX gbreve g -10\r\nKPX gbreve gbreve -10\r\nKPX gbreve gcommaaccent -10\r\nKPX gcommaaccent e 10\r\nKPX gcommaaccent eacute 10\r\nKPX gcommaaccent ecaron 10\r\nKPX gcommaaccent ecircumflex 10\r\nKPX gcommaaccent edieresis 10\r\nKPX gcommaaccent edotaccent 10\r\nKPX gcommaaccent egrave 10\r\nKPX gcommaaccent emacron 10\r\nKPX gcommaaccent eogonek 10\r\nKPX gcommaaccent g -10\r\nKPX gcommaaccent gbreve -10\r\nKPX gcommaaccent gcommaaccent -10\r\nKPX h y -20\r\nKPX h yacute -20\r\nKPX h ydieresis -20\r\nKPX k o -15\r\nKPX k oacute -15\r\nKPX k ocircumflex -15\r\nKPX k odieresis -15\r\nKPX k ograve -15\r\nKPX k ohungarumlaut -15\r\nKPX k omacron -15\r\nKPX k oslash -15\r\nKPX k otilde -15\r\nKPX kcommaaccent o -15\r\nKPX kcommaaccent oacute -15\r\nKPX kcommaaccent ocircumflex -15\r\nKPX kcommaaccent odieresis -15\r\nKPX kcommaaccent ograve -15\r\nKPX kcommaaccent ohungarumlaut -15\r\nKPX kcommaaccent omacron -15\r\nKPX kcommaaccent oslash -15\r\nKPX kcommaaccent otilde -15\r\nKPX l w -15\r\nKPX l y -15\r\nKPX l yacute -15\r\nKPX l ydieresis -15\r\nKPX lacute w -15\r\nKPX lacute y -15\r\nKPX lacute yacute -15\r\nKPX lacute ydieresis -15\r\nKPX lcommaaccent w -15\r\nKPX lcommaaccent y -15\r\nKPX lcommaaccent yacute -15\r\nKPX lcommaaccent ydieresis -15\r\nKPX lslash w -15\r\nKPX lslash y -15\r\nKPX lslash yacute -15\r\nKPX lslash ydieresis -15\r\nKPX m u -20\r\nKPX m uacute -20\r\nKPX m ucircumflex -20\r\nKPX m udieresis -20\r\nKPX m ugrave -20\r\nKPX m uhungarumlaut -20\r\nKPX m umacron -20\r\nKPX m uogonek -20\r\nKPX m uring -20\r\nKPX m y -30\r\nKPX m yacute -30\r\nKPX m ydieresis -30\r\nKPX n u -10\r\nKPX n uacute -10\r\nKPX n ucircumflex -10\r\nKPX n udieresis -10\r\nKPX n ugrave -10\r\nKPX n uhungarumlaut -10\r\nKPX n umacron -10\r\nKPX n uogonek -10\r\nKPX n uring -10\r\nKPX n v -40\r\nKPX n y -20\r\nKPX n yacute -20\r\nKPX n ydieresis -20\r\nKPX nacute u -10\r\nKPX nacute uacute -10\r\nKPX nacute ucircumflex -10\r\nKPX nacute udieresis -10\r\nKPX nacute ugrave -10\r\nKPX nacute uhungarumlaut -10\r\nKPX nacute umacron -10\r\nKPX nacute uogonek -10\r\nKPX nacute uring -10\r\nKPX nacute v -40\r\nKPX nacute y -20\r\nKPX nacute yacute -20\r\nKPX nacute ydieresis -20\r\nKPX ncaron u -10\r\nKPX ncaron uacute -10\r\nKPX ncaron ucircumflex -10\r\nKPX ncaron udieresis -10\r\nKPX ncaron ugrave -10\r\nKPX ncaron uhungarumlaut -10\r\nKPX ncaron umacron -10\r\nKPX ncaron uogonek -10\r\nKPX ncaron uring -10\r\nKPX ncaron v -40\r\nKPX ncaron y -20\r\nKPX ncaron yacute -20\r\nKPX ncaron ydieresis -20\r\nKPX ncommaaccent u -10\r\nKPX ncommaaccent uacute -10\r\nKPX ncommaaccent ucircumflex -10\r\nKPX ncommaaccent udieresis -10\r\nKPX ncommaaccent ugrave -10\r\nKPX ncommaaccent uhungarumlaut -10\r\nKPX ncommaaccent umacron -10\r\nKPX ncommaaccent uogonek -10\r\nKPX ncommaaccent uring -10\r\nKPX ncommaaccent v -40\r\nKPX ncommaaccent y -20\r\nKPX ncommaaccent yacute -20\r\nKPX ncommaaccent ydieresis -20\r\nKPX ntilde u -10\r\nKPX ntilde uacute -10\r\nKPX ntilde ucircumflex -10\r\nKPX ntilde udieresis -10\r\nKPX ntilde ugrave -10\r\nKPX ntilde uhungarumlaut -10\r\nKPX ntilde umacron -10\r\nKPX ntilde uogonek -10\r\nKPX ntilde uring -10\r\nKPX ntilde v -40\r\nKPX ntilde y -20\r\nKPX ntilde yacute -20\r\nKPX ntilde ydieresis -20\r\nKPX o v -20\r\nKPX o w -15\r\nKPX o x -30\r\nKPX o y -20\r\nKPX o yacute -20\r\nKPX o ydieresis -20\r\nKPX oacute v -20\r\nKPX oacute w -15\r\nKPX oacute x -30\r\nKPX oacute y -20\r\nKPX oacute yacute -20\r\nKPX oacute ydieresis -20\r\nKPX ocircumflex v -20\r\nKPX ocircumflex w -15\r\nKPX ocircumflex x -30\r\nKPX ocircumflex y -20\r\nKPX ocircumflex yacute -20\r\nKPX ocircumflex ydieresis -20\r\nKPX odieresis v -20\r\nKPX odieresis w -15\r\nKPX odieresis x -30\r\nKPX odieresis y -20\r\nKPX odieresis yacute -20\r\nKPX odieresis ydieresis -20\r\nKPX ograve v -20\r\nKPX ograve w -15\r\nKPX ograve x -30\r\nKPX ograve y -20\r\nKPX ograve yacute -20\r\nKPX ograve ydieresis -20\r\nKPX ohungarumlaut v -20\r\nKPX ohungarumlaut w -15\r\nKPX ohungarumlaut x -30\r\nKPX ohungarumlaut y -20\r\nKPX ohungarumlaut yacute -20\r\nKPX ohungarumlaut ydieresis -20\r\nKPX omacron v -20\r\nKPX omacron w -15\r\nKPX omacron x -30\r\nKPX omacron y -20\r\nKPX omacron yacute -20\r\nKPX omacron ydieresis -20\r\nKPX oslash v -20\r\nKPX oslash w -15\r\nKPX oslash x -30\r\nKPX oslash y -20\r\nKPX oslash yacute -20\r\nKPX oslash ydieresis -20\r\nKPX otilde v -20\r\nKPX otilde w -15\r\nKPX otilde x -30\r\nKPX otilde y -20\r\nKPX otilde yacute -20\r\nKPX otilde ydieresis -20\r\nKPX p y -15\r\nKPX p yacute -15\r\nKPX p ydieresis -15\r\nKPX period quotedblright -120\r\nKPX period quoteright -120\r\nKPX period space -40\r\nKPX quotedblright space -80\r\nKPX quoteleft quoteleft -46\r\nKPX quoteright d -80\r\nKPX quoteright dcroat -80\r\nKPX quoteright l -20\r\nKPX quoteright lacute -20\r\nKPX quoteright lcommaaccent -20\r\nKPX quoteright lslash -20\r\nKPX quoteright quoteright -46\r\nKPX quoteright r -40\r\nKPX quoteright racute -40\r\nKPX quoteright rcaron -40\r\nKPX quoteright rcommaaccent -40\r\nKPX quoteright s -60\r\nKPX quoteright sacute -60\r\nKPX quoteright scaron -60\r\nKPX quoteright scedilla -60\r\nKPX quoteright scommaaccent -60\r\nKPX quoteright space -80\r\nKPX quoteright v -20\r\nKPX r c -20\r\nKPX r cacute -20\r\nKPX r ccaron -20\r\nKPX r ccedilla -20\r\nKPX r comma -60\r\nKPX r d -20\r\nKPX r dcroat -20\r\nKPX r g -15\r\nKPX r gbreve -15\r\nKPX r gcommaaccent -15\r\nKPX r hyphen -20\r\nKPX r o -20\r\nKPX r oacute -20\r\nKPX r ocircumflex -20\r\nKPX r odieresis -20\r\nKPX r ograve -20\r\nKPX r ohungarumlaut -20\r\nKPX r omacron -20\r\nKPX r oslash -20\r\nKPX r otilde -20\r\nKPX r period -60\r\nKPX r q -20\r\nKPX r s -15\r\nKPX r sacute -15\r\nKPX r scaron -15\r\nKPX r scedilla -15\r\nKPX r scommaaccent -15\r\nKPX r t 20\r\nKPX r tcommaaccent 20\r\nKPX r v 10\r\nKPX r y 10\r\nKPX r yacute 10\r\nKPX r ydieresis 10\r\nKPX racute c -20\r\nKPX racute cacute -20\r\nKPX racute ccaron -20\r\nKPX racute ccedilla -20\r\nKPX racute comma -60\r\nKPX racute d -20\r\nKPX racute dcroat -20\r\nKPX racute g -15\r\nKPX racute gbreve -15\r\nKPX racute gcommaaccent -15\r\nKPX racute hyphen -20\r\nKPX racute o -20\r\nKPX racute oacute -20\r\nKPX racute ocircumflex -20\r\nKPX racute odieresis -20\r\nKPX racute ograve -20\r\nKPX racute ohungarumlaut -20\r\nKPX racute omacron -20\r\nKPX racute oslash -20\r\nKPX racute otilde -20\r\nKPX racute period -60\r\nKPX racute q -20\r\nKPX racute s -15\r\nKPX racute sacute -15\r\nKPX racute scaron -15\r\nKPX racute scedilla -15\r\nKPX racute scommaaccent -15\r\nKPX racute t 20\r\nKPX racute tcommaaccent 20\r\nKPX racute v 10\r\nKPX racute y 10\r\nKPX racute yacute 10\r\nKPX racute ydieresis 10\r\nKPX rcaron c -20\r\nKPX rcaron cacute -20\r\nKPX rcaron ccaron -20\r\nKPX rcaron ccedilla -20\r\nKPX rcaron comma -60\r\nKPX rcaron d -20\r\nKPX rcaron dcroat -20\r\nKPX rcaron g -15\r\nKPX rcaron gbreve -15\r\nKPX rcaron gcommaaccent -15\r\nKPX rcaron hyphen -20\r\nKPX rcaron o -20\r\nKPX rcaron oacute -20\r\nKPX rcaron ocircumflex -20\r\nKPX rcaron odieresis -20\r\nKPX rcaron ograve -20\r\nKPX rcaron ohungarumlaut -20\r\nKPX rcaron omacron -20\r\nKPX rcaron oslash -20\r\nKPX rcaron otilde -20\r\nKPX rcaron period -60\r\nKPX rcaron q -20\r\nKPX rcaron s -15\r\nKPX rcaron sacute -15\r\nKPX rcaron scaron -15\r\nKPX rcaron scedilla -15\r\nKPX rcaron scommaaccent -15\r\nKPX rcaron t 20\r\nKPX rcaron tcommaaccent 20\r\nKPX rcaron v 10\r\nKPX rcaron y 10\r\nKPX rcaron yacute 10\r\nKPX rcaron ydieresis 10\r\nKPX rcommaaccent c -20\r\nKPX rcommaaccent cacute -20\r\nKPX rcommaaccent ccaron -20\r\nKPX rcommaaccent ccedilla -20\r\nKPX rcommaaccent comma -60\r\nKPX rcommaaccent d -20\r\nKPX rcommaaccent dcroat -20\r\nKPX rcommaaccent g -15\r\nKPX rcommaaccent gbreve -15\r\nKPX rcommaaccent gcommaaccent -15\r\nKPX rcommaaccent hyphen -20\r\nKPX rcommaaccent o -20\r\nKPX rcommaaccent oacute -20\r\nKPX rcommaaccent ocircumflex -20\r\nKPX rcommaaccent odieresis -20\r\nKPX rcommaaccent ograve -20\r\nKPX rcommaaccent ohungarumlaut -20\r\nKPX rcommaaccent omacron -20\r\nKPX rcommaaccent oslash -20\r\nKPX rcommaaccent otilde -20\r\nKPX rcommaaccent period -60\r\nKPX rcommaaccent q -20\r\nKPX rcommaaccent s -15\r\nKPX rcommaaccent sacute -15\r\nKPX rcommaaccent scaron -15\r\nKPX rcommaaccent scedilla -15\r\nKPX rcommaaccent scommaaccent -15\r\nKPX rcommaaccent t 20\r\nKPX rcommaaccent tcommaaccent 20\r\nKPX rcommaaccent v 10\r\nKPX rcommaaccent y 10\r\nKPX rcommaaccent yacute 10\r\nKPX rcommaaccent ydieresis 10\r\nKPX s w -15\r\nKPX sacute w -15\r\nKPX scaron w -15\r\nKPX scedilla w -15\r\nKPX scommaaccent w -15\r\nKPX semicolon space -40\r\nKPX space T -100\r\nKPX space Tcaron -100\r\nKPX space Tcommaaccent -100\r\nKPX space V -80\r\nKPX space W -80\r\nKPX space Y -120\r\nKPX space Yacute -120\r\nKPX space Ydieresis -120\r\nKPX space quotedblleft -80\r\nKPX space quoteleft -60\r\nKPX v a -20\r\nKPX v aacute -20\r\nKPX v abreve -20\r\nKPX v acircumflex -20\r\nKPX v adieresis -20\r\nKPX v agrave -20\r\nKPX v amacron -20\r\nKPX v aogonek -20\r\nKPX v aring -20\r\nKPX v atilde -20\r\nKPX v comma -80\r\nKPX v o -30\r\nKPX v oacute -30\r\nKPX v ocircumflex -30\r\nKPX v odieresis -30\r\nKPX v ograve -30\r\nKPX v ohungarumlaut -30\r\nKPX v omacron -30\r\nKPX v oslash -30\r\nKPX v otilde -30\r\nKPX v period -80\r\nKPX w comma -40\r\nKPX w o -20\r\nKPX w oacute -20\r\nKPX w ocircumflex -20\r\nKPX w odieresis -20\r\nKPX w ograve -20\r\nKPX w ohungarumlaut -20\r\nKPX w omacron -20\r\nKPX w oslash -20\r\nKPX w otilde -20\r\nKPX w period -40\r\nKPX x e -10\r\nKPX x eacute -10\r\nKPX x ecaron -10\r\nKPX x ecircumflex -10\r\nKPX x edieresis -10\r\nKPX x edotaccent -10\r\nKPX x egrave -10\r\nKPX x emacron -10\r\nKPX x eogonek -10\r\nKPX y a -30\r\nKPX y aacute -30\r\nKPX y abreve -30\r\nKPX y acircumflex -30\r\nKPX y adieresis -30\r\nKPX y agrave -30\r\nKPX y amacron -30\r\nKPX y aogonek -30\r\nKPX y aring -30\r\nKPX y atilde -30\r\nKPX y comma -80\r\nKPX y e -10\r\nKPX y eacute -10\r\nKPX y ecaron -10\r\nKPX y ecircumflex -10\r\nKPX y edieresis -10\r\nKPX y edotaccent -10\r\nKPX y egrave -10\r\nKPX y emacron -10\r\nKPX y eogonek -10\r\nKPX y o -25\r\nKPX y oacute -25\r\nKPX y ocircumflex -25\r\nKPX y odieresis -25\r\nKPX y ograve -25\r\nKPX y ohungarumlaut -25\r\nKPX y omacron -25\r\nKPX y oslash -25\r\nKPX y otilde -25\r\nKPX y period -80\r\nKPX yacute a -30\r\nKPX yacute aacute -30\r\nKPX yacute abreve -30\r\nKPX yacute acircumflex -30\r\nKPX yacute adieresis -30\r\nKPX yacute agrave -30\r\nKPX yacute amacron -30\r\nKPX yacute aogonek -30\r\nKPX yacute aring -30\r\nKPX yacute atilde -30\r\nKPX yacute comma -80\r\nKPX yacute e -10\r\nKPX yacute eacute -10\r\nKPX yacute ecaron -10\r\nKPX yacute ecircumflex -10\r\nKPX yacute edieresis -10\r\nKPX yacute edotaccent -10\r\nKPX yacute egrave -10\r\nKPX yacute emacron -10\r\nKPX yacute eogonek -10\r\nKPX yacute o -25\r\nKPX yacute oacute -25\r\nKPX yacute ocircumflex -25\r\nKPX yacute odieresis -25\r\nKPX yacute ograve -25\r\nKPX yacute ohungarumlaut -25\r\nKPX yacute omacron -25\r\nKPX yacute oslash -25\r\nKPX yacute otilde -25\r\nKPX yacute period -80\r\nKPX ydieresis a -30\r\nKPX ydieresis aacute -30\r\nKPX ydieresis abreve -30\r\nKPX ydieresis acircumflex -30\r\nKPX ydieresis adieresis -30\r\nKPX ydieresis agrave -30\r\nKPX ydieresis amacron -30\r\nKPX ydieresis aogonek -30\r\nKPX ydieresis aring -30\r\nKPX ydieresis atilde -30\r\nKPX ydieresis comma -80\r\nKPX ydieresis e -10\r\nKPX ydieresis eacute -10\r\nKPX ydieresis ecaron -10\r\nKPX ydieresis ecircumflex -10\r\nKPX ydieresis edieresis -10\r\nKPX ydieresis edotaccent -10\r\nKPX ydieresis egrave -10\r\nKPX ydieresis emacron -10\r\nKPX ydieresis eogonek -10\r\nKPX ydieresis o -25\r\nKPX ydieresis oacute -25\r\nKPX ydieresis ocircumflex -25\r\nKPX ydieresis odieresis -25\r\nKPX ydieresis ograve -25\r\nKPX ydieresis ohungarumlaut -25\r\nKPX ydieresis omacron -25\r\nKPX ydieresis oslash -25\r\nKPX ydieresis otilde -25\r\nKPX ydieresis period -80\r\nKPX z e 10\r\nKPX z eacute 10\r\nKPX z ecaron 10\r\nKPX z ecircumflex 10\r\nKPX z edieresis 10\r\nKPX z edotaccent 10\r\nKPX z egrave 10\r\nKPX z emacron 10\r\nKPX z eogonek 10\r\nKPX zacute e 10\r\nKPX zacute eacute 10\r\nKPX zacute ecaron 10\r\nKPX zacute ecircumflex 10\r\nKPX zacute edieresis 10\r\nKPX zacute edotaccent 10\r\nKPX zacute egrave 10\r\nKPX zacute emacron 10\r\nKPX zacute eogonek 10\r\nKPX zcaron e 10\r\nKPX zcaron eacute 10\r\nKPX zcaron ecaron 10\r\nKPX zcaron ecircumflex 10\r\nKPX zcaron edieresis 10\r\nKPX zcaron edotaccent 10\r\nKPX zcaron egrave 10\r\nKPX zcaron emacron 10\r\nKPX zcaron eogonek 10\r\nKPX zdotaccent e 10\r\nKPX zdotaccent eacute 10\r\nKPX zdotaccent ecaron 10\r\nKPX zdotaccent ecircumflex 10\r\nKPX zdotaccent edieresis 10\r\nKPX zdotaccent edotaccent 10\r\nKPX zdotaccent egrave 10\r\nKPX zdotaccent emacron 10\r\nKPX zdotaccent eogonek 10\r\nEndKernPairs\r\nEndKernData\r\nEndFontMetrics\r\n";
2487 },
2488 'Helvetica-Oblique'() {
2489 return "StartFontMetrics 4.1\r\nComment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 12:44:31 1997\r\nComment UniqueID 43055\r\nComment VMusage 14960 69346\r\nFontName Helvetica-Oblique\r\nFullName Helvetica Oblique\r\nFamilyName Helvetica\r\nWeight Medium\r\nItalicAngle -12\r\nIsFixedPitch false\r\nCharacterSet ExtendedRoman\r\nFontBBox -170 -225 1116 931 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 002.000\r\nNotice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 718\r\nXHeight 523\r\nAscender 718\r\nDescender -207\r\nStdHW 76\r\nStdVW 88\r\nStartCharMetrics 315\r\nC 32 ; WX 278 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 278 ; N exclam ; B 90 0 340 718 ;\r\nC 34 ; WX 355 ; N quotedbl ; B 168 463 438 718 ;\r\nC 35 ; WX 556 ; N numbersign ; B 73 0 631 688 ;\r\nC 36 ; WX 556 ; N dollar ; B 69 -115 617 775 ;\r\nC 37 ; WX 889 ; N percent ; B 147 -19 889 703 ;\r\nC 38 ; WX 667 ; N ampersand ; B 77 -15 647 718 ;\r\nC 39 ; WX 222 ; N quoteright ; B 151 463 310 718 ;\r\nC 40 ; WX 333 ; N parenleft ; B 108 -207 454 733 ;\r\nC 41 ; WX 333 ; N parenright ; B -9 -207 337 733 ;\r\nC 42 ; WX 389 ; N asterisk ; B 165 431 475 718 ;\r\nC 43 ; WX 584 ; N plus ; B 85 0 606 505 ;\r\nC 44 ; WX 278 ; N comma ; B 56 -147 214 106 ;\r\nC 45 ; WX 333 ; N hyphen ; B 93 232 357 322 ;\r\nC 46 ; WX 278 ; N period ; B 87 0 214 106 ;\r\nC 47 ; WX 278 ; N slash ; B -21 -19 452 737 ;\r\nC 48 ; WX 556 ; N zero ; B 93 -19 608 703 ;\r\nC 49 ; WX 556 ; N one ; B 207 0 508 703 ;\r\nC 50 ; WX 556 ; N two ; B 26 0 617 703 ;\r\nC 51 ; WX 556 ; N three ; B 75 -19 610 703 ;\r\nC 52 ; WX 556 ; N four ; B 61 0 576 703 ;\r\nC 53 ; WX 556 ; N five ; B 68 -19 621 688 ;\r\nC 54 ; WX 556 ; N six ; B 91 -19 615 703 ;\r\nC 55 ; WX 556 ; N seven ; B 137 0 669 688 ;\r\nC 56 ; WX 556 ; N eight ; B 74 -19 607 703 ;\r\nC 57 ; WX 556 ; N nine ; B 82 -19 609 703 ;\r\nC 58 ; WX 278 ; N colon ; B 87 0 301 516 ;\r\nC 59 ; WX 278 ; N semicolon ; B 56 -147 301 516 ;\r\nC 60 ; WX 584 ; N less ; B 94 11 641 495 ;\r\nC 61 ; WX 584 ; N equal ; B 63 115 628 390 ;\r\nC 62 ; WX 584 ; N greater ; B 50 11 597 495 ;\r\nC 63 ; WX 556 ; N question ; B 161 0 610 727 ;\r\nC 64 ; WX 1015 ; N at ; B 215 -19 965 737 ;\r\nC 65 ; WX 667 ; N A ; B 14 0 654 718 ;\r\nC 66 ; WX 667 ; N B ; B 74 0 712 718 ;\r\nC 67 ; WX 722 ; N C ; B 108 -19 782 737 ;\r\nC 68 ; WX 722 ; N D ; B 81 0 764 718 ;\r\nC 69 ; WX 667 ; N E ; B 86 0 762 718 ;\r\nC 70 ; WX 611 ; N F ; B 86 0 736 718 ;\r\nC 71 ; WX 778 ; N G ; B 111 -19 799 737 ;\r\nC 72 ; WX 722 ; N H ; B 77 0 799 718 ;\r\nC 73 ; WX 278 ; N I ; B 91 0 341 718 ;\r\nC 74 ; WX 500 ; N J ; B 47 -19 581 718 ;\r\nC 75 ; WX 667 ; N K ; B 76 0 808 718 ;\r\nC 76 ; WX 556 ; N L ; B 76 0 555 718 ;\r\nC 77 ; WX 833 ; N M ; B 73 0 914 718 ;\r\nC 78 ; WX 722 ; N N ; B 76 0 799 718 ;\r\nC 79 ; WX 778 ; N O ; B 105 -19 826 737 ;\r\nC 80 ; WX 667 ; N P ; B 86 0 737 718 ;\r\nC 81 ; WX 778 ; N Q ; B 105 -56 826 737 ;\r\nC 82 ; WX 722 ; N R ; B 88 0 773 718 ;\r\nC 83 ; WX 667 ; N S ; B 90 -19 713 737 ;\r\nC 84 ; WX 611 ; N T ; B 148 0 750 718 ;\r\nC 85 ; WX 722 ; N U ; B 123 -19 797 718 ;\r\nC 86 ; WX 667 ; N V ; B 173 0 800 718 ;\r\nC 87 ; WX 944 ; N W ; B 169 0 1081 718 ;\r\nC 88 ; WX 667 ; N X ; B 19 0 790 718 ;\r\nC 89 ; WX 667 ; N Y ; B 167 0 806 718 ;\r\nC 90 ; WX 611 ; N Z ; B 23 0 741 718 ;\r\nC 91 ; WX 278 ; N bracketleft ; B 21 -196 403 722 ;\r\nC 92 ; WX 278 ; N backslash ; B 140 -19 291 737 ;\r\nC 93 ; WX 278 ; N bracketright ; B -14 -196 368 722 ;\r\nC 94 ; WX 469 ; N asciicircum ; B 42 264 539 688 ;\r\nC 95 ; WX 556 ; N underscore ; B -27 -125 540 -75 ;\r\nC 96 ; WX 222 ; N quoteleft ; B 165 470 323 725 ;\r\nC 97 ; WX 556 ; N a ; B 61 -15 559 538 ;\r\nC 98 ; WX 556 ; N b ; B 58 -15 584 718 ;\r\nC 99 ; WX 500 ; N c ; B 74 -15 553 538 ;\r\nC 100 ; WX 556 ; N d ; B 84 -15 652 718 ;\r\nC 101 ; WX 556 ; N e ; B 84 -15 578 538 ;\r\nC 102 ; WX 278 ; N f ; B 86 0 416 728 ; L i fi ; L l fl ;\r\nC 103 ; WX 556 ; N g ; B 42 -220 610 538 ;\r\nC 104 ; WX 556 ; N h ; B 65 0 573 718 ;\r\nC 105 ; WX 222 ; N i ; B 67 0 308 718 ;\r\nC 106 ; WX 222 ; N j ; B -60 -210 308 718 ;\r\nC 107 ; WX 500 ; N k ; B 67 0 600 718 ;\r\nC 108 ; WX 222 ; N l ; B 67 0 308 718 ;\r\nC 109 ; WX 833 ; N m ; B 65 0 852 538 ;\r\nC 110 ; WX 556 ; N n ; B 65 0 573 538 ;\r\nC 111 ; WX 556 ; N o ; B 83 -14 585 538 ;\r\nC 112 ; WX 556 ; N p ; B 14 -207 584 538 ;\r\nC 113 ; WX 556 ; N q ; B 84 -207 605 538 ;\r\nC 114 ; WX 333 ; N r ; B 77 0 446 538 ;\r\nC 115 ; WX 500 ; N s ; B 63 -15 529 538 ;\r\nC 116 ; WX 278 ; N t ; B 102 -7 368 669 ;\r\nC 117 ; WX 556 ; N u ; B 94 -15 600 523 ;\r\nC 118 ; WX 500 ; N v ; B 119 0 603 523 ;\r\nC 119 ; WX 722 ; N w ; B 125 0 820 523 ;\r\nC 120 ; WX 500 ; N x ; B 11 0 594 523 ;\r\nC 121 ; WX 500 ; N y ; B 15 -214 600 523 ;\r\nC 122 ; WX 500 ; N z ; B 31 0 571 523 ;\r\nC 123 ; WX 334 ; N braceleft ; B 92 -196 445 722 ;\r\nC 124 ; WX 260 ; N bar ; B 46 -225 332 775 ;\r\nC 125 ; WX 334 ; N braceright ; B 0 -196 354 722 ;\r\nC 126 ; WX 584 ; N asciitilde ; B 111 180 580 326 ;\r\nC 161 ; WX 333 ; N exclamdown ; B 77 -195 326 523 ;\r\nC 162 ; WX 556 ; N cent ; B 95 -115 584 623 ;\r\nC 163 ; WX 556 ; N sterling ; B 49 -16 634 718 ;\r\nC 164 ; WX 167 ; N fraction ; B -170 -19 482 703 ;\r\nC 165 ; WX 556 ; N yen ; B 81 0 699 688 ;\r\nC 166 ; WX 556 ; N florin ; B -52 -207 654 737 ;\r\nC 167 ; WX 556 ; N section ; B 76 -191 584 737 ;\r\nC 168 ; WX 556 ; N currency ; B 60 99 646 603 ;\r\nC 169 ; WX 191 ; N quotesingle ; B 157 463 285 718 ;\r\nC 170 ; WX 333 ; N quotedblleft ; B 138 470 461 725 ;\r\nC 171 ; WX 556 ; N guillemotleft ; B 146 108 554 446 ;\r\nC 172 ; WX 333 ; N guilsinglleft ; B 137 108 340 446 ;\r\nC 173 ; WX 333 ; N guilsinglright ; B 111 108 314 446 ;\r\nC 174 ; WX 500 ; N fi ; B 86 0 587 728 ;\r\nC 175 ; WX 500 ; N fl ; B 86 0 585 728 ;\r\nC 177 ; WX 556 ; N endash ; B 51 240 623 313 ;\r\nC 178 ; WX 556 ; N dagger ; B 135 -159 622 718 ;\r\nC 179 ; WX 556 ; N daggerdbl ; B 52 -159 623 718 ;\r\nC 180 ; WX 278 ; N periodcentered ; B 129 190 257 315 ;\r\nC 182 ; WX 537 ; N paragraph ; B 126 -173 650 718 ;\r\nC 183 ; WX 350 ; N bullet ; B 91 202 413 517 ;\r\nC 184 ; WX 222 ; N quotesinglbase ; B 21 -149 180 106 ;\r\nC 185 ; WX 333 ; N quotedblbase ; B -6 -149 318 106 ;\r\nC 186 ; WX 333 ; N quotedblright ; B 124 463 448 718 ;\r\nC 187 ; WX 556 ; N guillemotright ; B 120 108 528 446 ;\r\nC 188 ; WX 1000 ; N ellipsis ; B 115 0 908 106 ;\r\nC 189 ; WX 1000 ; N perthousand ; B 88 -19 1029 703 ;\r\nC 191 ; WX 611 ; N questiondown ; B 85 -201 534 525 ;\r\nC 193 ; WX 333 ; N grave ; B 170 593 337 734 ;\r\nC 194 ; WX 333 ; N acute ; B 248 593 475 734 ;\r\nC 195 ; WX 333 ; N circumflex ; B 147 593 438 734 ;\r\nC 196 ; WX 333 ; N tilde ; B 125 606 490 722 ;\r\nC 197 ; WX 333 ; N macron ; B 143 627 468 684 ;\r\nC 198 ; WX 333 ; N breve ; B 167 595 476 731 ;\r\nC 199 ; WX 333 ; N dotaccent ; B 249 604 362 706 ;\r\nC 200 ; WX 333 ; N dieresis ; B 168 604 443 706 ;\r\nC 202 ; WX 333 ; N ring ; B 214 572 402 756 ;\r\nC 203 ; WX 333 ; N cedilla ; B 2 -225 232 0 ;\r\nC 205 ; WX 333 ; N hungarumlaut ; B 157 593 565 734 ;\r\nC 206 ; WX 333 ; N ogonek ; B 43 -225 249 0 ;\r\nC 207 ; WX 333 ; N caron ; B 177 593 468 734 ;\r\nC 208 ; WX 1000 ; N emdash ; B 51 240 1067 313 ;\r\nC 225 ; WX 1000 ; N AE ; B 8 0 1097 718 ;\r\nC 227 ; WX 370 ; N ordfeminine ; B 127 405 449 737 ;\r\nC 232 ; WX 556 ; N Lslash ; B 41 0 555 718 ;\r\nC 233 ; WX 778 ; N Oslash ; B 43 -19 890 737 ;\r\nC 234 ; WX 1000 ; N OE ; B 98 -19 1116 737 ;\r\nC 235 ; WX 365 ; N ordmasculine ; B 141 405 468 737 ;\r\nC 241 ; WX 889 ; N ae ; B 61 -15 909 538 ;\r\nC 245 ; WX 278 ; N dotlessi ; B 95 0 294 523 ;\r\nC 248 ; WX 222 ; N lslash ; B 41 0 347 718 ;\r\nC 249 ; WX 611 ; N oslash ; B 29 -22 647 545 ;\r\nC 250 ; WX 944 ; N oe ; B 83 -15 964 538 ;\r\nC 251 ; WX 611 ; N germandbls ; B 67 -15 658 728 ;\r\nC -1 ; WX 278 ; N Idieresis ; B 91 0 458 901 ;\r\nC -1 ; WX 556 ; N eacute ; B 84 -15 587 734 ;\r\nC -1 ; WX 556 ; N abreve ; B 61 -15 578 731 ;\r\nC -1 ; WX 556 ; N uhungarumlaut ; B 94 -15 677 734 ;\r\nC -1 ; WX 556 ; N ecaron ; B 84 -15 580 734 ;\r\nC -1 ; WX 667 ; N Ydieresis ; B 167 0 806 901 ;\r\nC -1 ; WX 584 ; N divide ; B 85 -19 606 524 ;\r\nC -1 ; WX 667 ; N Yacute ; B 167 0 806 929 ;\r\nC -1 ; WX 667 ; N Acircumflex ; B 14 0 654 929 ;\r\nC -1 ; WX 556 ; N aacute ; B 61 -15 587 734 ;\r\nC -1 ; WX 722 ; N Ucircumflex ; B 123 -19 797 929 ;\r\nC -1 ; WX 500 ; N yacute ; B 15 -214 600 734 ;\r\nC -1 ; WX 500 ; N scommaaccent ; B 63 -225 529 538 ;\r\nC -1 ; WX 556 ; N ecircumflex ; B 84 -15 578 734 ;\r\nC -1 ; WX 722 ; N Uring ; B 123 -19 797 931 ;\r\nC -1 ; WX 722 ; N Udieresis ; B 123 -19 797 901 ;\r\nC -1 ; WX 556 ; N aogonek ; B 61 -220 559 538 ;\r\nC -1 ; WX 722 ; N Uacute ; B 123 -19 797 929 ;\r\nC -1 ; WX 556 ; N uogonek ; B 94 -225 600 523 ;\r\nC -1 ; WX 667 ; N Edieresis ; B 86 0 762 901 ;\r\nC -1 ; WX 722 ; N Dcroat ; B 69 0 764 718 ;\r\nC -1 ; WX 250 ; N commaaccent ; B 39 -225 172 -40 ;\r\nC -1 ; WX 737 ; N copyright ; B 54 -19 837 737 ;\r\nC -1 ; WX 667 ; N Emacron ; B 86 0 762 879 ;\r\nC -1 ; WX 500 ; N ccaron ; B 74 -15 553 734 ;\r\nC -1 ; WX 556 ; N aring ; B 61 -15 559 756 ;\r\nC -1 ; WX 722 ; N Ncommaaccent ; B 76 -225 799 718 ;\r\nC -1 ; WX 222 ; N lacute ; B 67 0 461 929 ;\r\nC -1 ; WX 556 ; N agrave ; B 61 -15 559 734 ;\r\nC -1 ; WX 611 ; N Tcommaaccent ; B 148 -225 750 718 ;\r\nC -1 ; WX 722 ; N Cacute ; B 108 -19 782 929 ;\r\nC -1 ; WX 556 ; N atilde ; B 61 -15 592 722 ;\r\nC -1 ; WX 667 ; N Edotaccent ; B 86 0 762 901 ;\r\nC -1 ; WX 500 ; N scaron ; B 63 -15 552 734 ;\r\nC -1 ; WX 500 ; N scedilla ; B 63 -225 529 538 ;\r\nC -1 ; WX 278 ; N iacute ; B 95 0 448 734 ;\r\nC -1 ; WX 471 ; N lozenge ; B 88 0 540 728 ;\r\nC -1 ; WX 722 ; N Rcaron ; B 88 0 773 929 ;\r\nC -1 ; WX 778 ; N Gcommaaccent ; B 111 -225 799 737 ;\r\nC -1 ; WX 556 ; N ucircumflex ; B 94 -15 600 734 ;\r\nC -1 ; WX 556 ; N acircumflex ; B 61 -15 559 734 ;\r\nC -1 ; WX 667 ; N Amacron ; B 14 0 677 879 ;\r\nC -1 ; WX 333 ; N rcaron ; B 77 0 508 734 ;\r\nC -1 ; WX 500 ; N ccedilla ; B 74 -225 553 538 ;\r\nC -1 ; WX 611 ; N Zdotaccent ; B 23 0 741 901 ;\r\nC -1 ; WX 667 ; N Thorn ; B 86 0 712 718 ;\r\nC -1 ; WX 778 ; N Omacron ; B 105 -19 826 879 ;\r\nC -1 ; WX 722 ; N Racute ; B 88 0 773 929 ;\r\nC -1 ; WX 667 ; N Sacute ; B 90 -19 713 929 ;\r\nC -1 ; WX 643 ; N dcaron ; B 84 -15 808 718 ;\r\nC -1 ; WX 722 ; N Umacron ; B 123 -19 797 879 ;\r\nC -1 ; WX 556 ; N uring ; B 94 -15 600 756 ;\r\nC -1 ; WX 333 ; N threesuperior ; B 90 270 436 703 ;\r\nC -1 ; WX 778 ; N Ograve ; B 105 -19 826 929 ;\r\nC -1 ; WX 667 ; N Agrave ; B 14 0 654 929 ;\r\nC -1 ; WX 667 ; N Abreve ; B 14 0 685 926 ;\r\nC -1 ; WX 584 ; N multiply ; B 50 0 642 506 ;\r\nC -1 ; WX 556 ; N uacute ; B 94 -15 600 734 ;\r\nC -1 ; WX 611 ; N Tcaron ; B 148 0 750 929 ;\r\nC -1 ; WX 476 ; N partialdiff ; B 41 -38 550 714 ;\r\nC -1 ; WX 500 ; N ydieresis ; B 15 -214 600 706 ;\r\nC -1 ; WX 722 ; N Nacute ; B 76 0 799 929 ;\r\nC -1 ; WX 278 ; N icircumflex ; B 95 0 411 734 ;\r\nC -1 ; WX 667 ; N Ecircumflex ; B 86 0 762 929 ;\r\nC -1 ; WX 556 ; N adieresis ; B 61 -15 559 706 ;\r\nC -1 ; WX 556 ; N edieresis ; B 84 -15 578 706 ;\r\nC -1 ; WX 500 ; N cacute ; B 74 -15 559 734 ;\r\nC -1 ; WX 556 ; N nacute ; B 65 0 587 734 ;\r\nC -1 ; WX 556 ; N umacron ; B 94 -15 600 684 ;\r\nC -1 ; WX 722 ; N Ncaron ; B 76 0 799 929 ;\r\nC -1 ; WX 278 ; N Iacute ; B 91 0 489 929 ;\r\nC -1 ; WX 584 ; N plusminus ; B 39 0 618 506 ;\r\nC -1 ; WX 260 ; N brokenbar ; B 62 -150 316 700 ;\r\nC -1 ; WX 737 ; N registered ; B 54 -19 837 737 ;\r\nC -1 ; WX 778 ; N Gbreve ; B 111 -19 799 926 ;\r\nC -1 ; WX 278 ; N Idotaccent ; B 91 0 377 901 ;\r\nC -1 ; WX 600 ; N summation ; B 15 -10 671 706 ;\r\nC -1 ; WX 667 ; N Egrave ; B 86 0 762 929 ;\r\nC -1 ; WX 333 ; N racute ; B 77 0 475 734 ;\r\nC -1 ; WX 556 ; N omacron ; B 83 -14 585 684 ;\r\nC -1 ; WX 611 ; N Zacute ; B 23 0 741 929 ;\r\nC -1 ; WX 611 ; N Zcaron ; B 23 0 741 929 ;\r\nC -1 ; WX 549 ; N greaterequal ; B 26 0 620 674 ;\r\nC -1 ; WX 722 ; N Eth ; B 69 0 764 718 ;\r\nC -1 ; WX 722 ; N Ccedilla ; B 108 -225 782 737 ;\r\nC -1 ; WX 222 ; N lcommaaccent ; B 25 -225 308 718 ;\r\nC -1 ; WX 317 ; N tcaron ; B 102 -7 501 808 ;\r\nC -1 ; WX 556 ; N eogonek ; B 84 -225 578 538 ;\r\nC -1 ; WX 722 ; N Uogonek ; B 123 -225 797 718 ;\r\nC -1 ; WX 667 ; N Aacute ; B 14 0 683 929 ;\r\nC -1 ; WX 667 ; N Adieresis ; B 14 0 654 901 ;\r\nC -1 ; WX 556 ; N egrave ; B 84 -15 578 734 ;\r\nC -1 ; WX 500 ; N zacute ; B 31 0 571 734 ;\r\nC -1 ; WX 222 ; N iogonek ; B -61 -225 308 718 ;\r\nC -1 ; WX 778 ; N Oacute ; B 105 -19 826 929 ;\r\nC -1 ; WX 556 ; N oacute ; B 83 -14 587 734 ;\r\nC -1 ; WX 556 ; N amacron ; B 61 -15 580 684 ;\r\nC -1 ; WX 500 ; N sacute ; B 63 -15 559 734 ;\r\nC -1 ; WX 278 ; N idieresis ; B 95 0 416 706 ;\r\nC -1 ; WX 778 ; N Ocircumflex ; B 105 -19 826 929 ;\r\nC -1 ; WX 722 ; N Ugrave ; B 123 -19 797 929 ;\r\nC -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;\r\nC -1 ; WX 556 ; N thorn ; B 14 -207 584 718 ;\r\nC -1 ; WX 333 ; N twosuperior ; B 64 281 449 703 ;\r\nC -1 ; WX 778 ; N Odieresis ; B 105 -19 826 901 ;\r\nC -1 ; WX 556 ; N mu ; B 24 -207 600 523 ;\r\nC -1 ; WX 278 ; N igrave ; B 95 0 310 734 ;\r\nC -1 ; WX 556 ; N ohungarumlaut ; B 83 -14 677 734 ;\r\nC -1 ; WX 667 ; N Eogonek ; B 86 -220 762 718 ;\r\nC -1 ; WX 556 ; N dcroat ; B 84 -15 689 718 ;\r\nC -1 ; WX 834 ; N threequarters ; B 130 -19 861 703 ;\r\nC -1 ; WX 667 ; N Scedilla ; B 90 -225 713 737 ;\r\nC -1 ; WX 299 ; N lcaron ; B 67 0 464 718 ;\r\nC -1 ; WX 667 ; N Kcommaaccent ; B 76 -225 808 718 ;\r\nC -1 ; WX 556 ; N Lacute ; B 76 0 555 929 ;\r\nC -1 ; WX 1000 ; N trademark ; B 186 306 1056 718 ;\r\nC -1 ; WX 556 ; N edotaccent ; B 84 -15 578 706 ;\r\nC -1 ; WX 278 ; N Igrave ; B 91 0 351 929 ;\r\nC -1 ; WX 278 ; N Imacron ; B 91 0 483 879 ;\r\nC -1 ; WX 556 ; N Lcaron ; B 76 0 570 718 ;\r\nC -1 ; WX 834 ; N onehalf ; B 114 -19 839 703 ;\r\nC -1 ; WX 549 ; N lessequal ; B 26 0 666 674 ;\r\nC -1 ; WX 556 ; N ocircumflex ; B 83 -14 585 734 ;\r\nC -1 ; WX 556 ; N ntilde ; B 65 0 592 722 ;\r\nC -1 ; WX 722 ; N Uhungarumlaut ; B 123 -19 801 929 ;\r\nC -1 ; WX 667 ; N Eacute ; B 86 0 762 929 ;\r\nC -1 ; WX 556 ; N emacron ; B 84 -15 580 684 ;\r\nC -1 ; WX 556 ; N gbreve ; B 42 -220 610 731 ;\r\nC -1 ; WX 834 ; N onequarter ; B 150 -19 802 703 ;\r\nC -1 ; WX 667 ; N Scaron ; B 90 -19 713 929 ;\r\nC -1 ; WX 667 ; N Scommaaccent ; B 90 -225 713 737 ;\r\nC -1 ; WX 778 ; N Ohungarumlaut ; B 105 -19 829 929 ;\r\nC -1 ; WX 400 ; N degree ; B 169 411 468 703 ;\r\nC -1 ; WX 556 ; N ograve ; B 83 -14 585 734 ;\r\nC -1 ; WX 722 ; N Ccaron ; B 108 -19 782 929 ;\r\nC -1 ; WX 556 ; N ugrave ; B 94 -15 600 734 ;\r\nC -1 ; WX 453 ; N radical ; B 79 -80 617 762 ;\r\nC -1 ; WX 722 ; N Dcaron ; B 81 0 764 929 ;\r\nC -1 ; WX 333 ; N rcommaaccent ; B 30 -225 446 538 ;\r\nC -1 ; WX 722 ; N Ntilde ; B 76 0 799 917 ;\r\nC -1 ; WX 556 ; N otilde ; B 83 -14 602 722 ;\r\nC -1 ; WX 722 ; N Rcommaaccent ; B 88 -225 773 718 ;\r\nC -1 ; WX 556 ; N Lcommaaccent ; B 76 -225 555 718 ;\r\nC -1 ; WX 667 ; N Atilde ; B 14 0 699 917 ;\r\nC -1 ; WX 667 ; N Aogonek ; B 14 -225 654 718 ;\r\nC -1 ; WX 667 ; N Aring ; B 14 0 654 931 ;\r\nC -1 ; WX 778 ; N Otilde ; B 105 -19 826 917 ;\r\nC -1 ; WX 500 ; N zdotaccent ; B 31 0 571 706 ;\r\nC -1 ; WX 667 ; N Ecaron ; B 86 0 762 929 ;\r\nC -1 ; WX 278 ; N Iogonek ; B -33 -225 341 718 ;\r\nC -1 ; WX 500 ; N kcommaaccent ; B 67 -225 600 718 ;\r\nC -1 ; WX 584 ; N minus ; B 85 216 606 289 ;\r\nC -1 ; WX 278 ; N Icircumflex ; B 91 0 452 929 ;\r\nC -1 ; WX 556 ; N ncaron ; B 65 0 580 734 ;\r\nC -1 ; WX 278 ; N tcommaaccent ; B 63 -225 368 669 ;\r\nC -1 ; WX 584 ; N logicalnot ; B 106 108 628 390 ;\r\nC -1 ; WX 556 ; N odieresis ; B 83 -14 585 706 ;\r\nC -1 ; WX 556 ; N udieresis ; B 94 -15 600 706 ;\r\nC -1 ; WX 549 ; N notequal ; B 34 -35 623 551 ;\r\nC -1 ; WX 556 ; N gcommaaccent ; B 42 -220 610 822 ;\r\nC -1 ; WX 556 ; N eth ; B 81 -15 617 737 ;\r\nC -1 ; WX 500 ; N zcaron ; B 31 0 571 734 ;\r\nC -1 ; WX 556 ; N ncommaaccent ; B 65 -225 573 538 ;\r\nC -1 ; WX 333 ; N onesuperior ; B 166 281 371 703 ;\r\nC -1 ; WX 278 ; N imacron ; B 95 0 417 684 ;\r\nC -1 ; WX 556 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nStartKernData\r\nStartKernPairs 2705\r\nKPX A C -30\r\nKPX A Cacute -30\r\nKPX A Ccaron -30\r\nKPX A Ccedilla -30\r\nKPX A G -30\r\nKPX A Gbreve -30\r\nKPX A Gcommaaccent -30\r\nKPX A O -30\r\nKPX A Oacute -30\r\nKPX A Ocircumflex -30\r\nKPX A Odieresis -30\r\nKPX A Ograve -30\r\nKPX A Ohungarumlaut -30\r\nKPX A Omacron -30\r\nKPX A Oslash -30\r\nKPX A Otilde -30\r\nKPX A Q -30\r\nKPX A T -120\r\nKPX A Tcaron -120\r\nKPX A Tcommaaccent -120\r\nKPX A U -50\r\nKPX A Uacute -50\r\nKPX A Ucircumflex -50\r\nKPX A Udieresis -50\r\nKPX A Ugrave -50\r\nKPX A Uhungarumlaut -50\r\nKPX A Umacron -50\r\nKPX A Uogonek -50\r\nKPX A Uring -50\r\nKPX A V -70\r\nKPX A W -50\r\nKPX A Y -100\r\nKPX A Yacute -100\r\nKPX A Ydieresis -100\r\nKPX A u -30\r\nKPX A uacute -30\r\nKPX A ucircumflex -30\r\nKPX A udieresis -30\r\nKPX A ugrave -30\r\nKPX A uhungarumlaut -30\r\nKPX A umacron -30\r\nKPX A uogonek -30\r\nKPX A uring -30\r\nKPX A v -40\r\nKPX A w -40\r\nKPX A y -40\r\nKPX A yacute -40\r\nKPX A ydieresis -40\r\nKPX Aacute C -30\r\nKPX Aacute Cacute -30\r\nKPX Aacute Ccaron -30\r\nKPX Aacute Ccedilla -30\r\nKPX Aacute G -30\r\nKPX Aacute Gbreve -30\r\nKPX Aacute Gcommaaccent -30\r\nKPX Aacute O -30\r\nKPX Aacute Oacute -30\r\nKPX Aacute Ocircumflex -30\r\nKPX Aacute Odieresis -30\r\nKPX Aacute Ograve -30\r\nKPX Aacute Ohungarumlaut -30\r\nKPX Aacute Omacron -30\r\nKPX Aacute Oslash -30\r\nKPX Aacute Otilde -30\r\nKPX Aacute Q -30\r\nKPX Aacute T -120\r\nKPX Aacute Tcaron -120\r\nKPX Aacute Tcommaaccent -120\r\nKPX Aacute U -50\r\nKPX Aacute Uacute -50\r\nKPX Aacute Ucircumflex -50\r\nKPX Aacute Udieresis -50\r\nKPX Aacute Ugrave -50\r\nKPX Aacute Uhungarumlaut -50\r\nKPX Aacute Umacron -50\r\nKPX Aacute Uogonek -50\r\nKPX Aacute Uring -50\r\nKPX Aacute V -70\r\nKPX Aacute W -50\r\nKPX Aacute Y -100\r\nKPX Aacute Yacute -100\r\nKPX Aacute Ydieresis -100\r\nKPX Aacute u -30\r\nKPX Aacute uacute -30\r\nKPX Aacute ucircumflex -30\r\nKPX Aacute udieresis -30\r\nKPX Aacute ugrave -30\r\nKPX Aacute uhungarumlaut -30\r\nKPX Aacute umacron -30\r\nKPX Aacute uogonek -30\r\nKPX Aacute uring -30\r\nKPX Aacute v -40\r\nKPX Aacute w -40\r\nKPX Aacute y -40\r\nKPX Aacute yacute -40\r\nKPX Aacute ydieresis -40\r\nKPX Abreve C -30\r\nKPX Abreve Cacute -30\r\nKPX Abreve Ccaron -30\r\nKPX Abreve Ccedilla -30\r\nKPX Abreve G -30\r\nKPX Abreve Gbreve -30\r\nKPX Abreve Gcommaaccent -30\r\nKPX Abreve O -30\r\nKPX Abreve Oacute -30\r\nKPX Abreve Ocircumflex -30\r\nKPX Abreve Odieresis -30\r\nKPX Abreve Ograve -30\r\nKPX Abreve Ohungarumlaut -30\r\nKPX Abreve Omacron -30\r\nKPX Abreve Oslash -30\r\nKPX Abreve Otilde -30\r\nKPX Abreve Q -30\r\nKPX Abreve T -120\r\nKPX Abreve Tcaron -120\r\nKPX Abreve Tcommaaccent -120\r\nKPX Abreve U -50\r\nKPX Abreve Uacute -50\r\nKPX Abreve Ucircumflex -50\r\nKPX Abreve Udieresis -50\r\nKPX Abreve Ugrave -50\r\nKPX Abreve Uhungarumlaut -50\r\nKPX Abreve Umacron -50\r\nKPX Abreve Uogonek -50\r\nKPX Abreve Uring -50\r\nKPX Abreve V -70\r\nKPX Abreve W -50\r\nKPX Abreve Y -100\r\nKPX Abreve Yacute -100\r\nKPX Abreve Ydieresis -100\r\nKPX Abreve u -30\r\nKPX Abreve uacute -30\r\nKPX Abreve ucircumflex -30\r\nKPX Abreve udieresis -30\r\nKPX Abreve ugrave -30\r\nKPX Abreve uhungarumlaut -30\r\nKPX Abreve umacron -30\r\nKPX Abreve uogonek -30\r\nKPX Abreve uring -30\r\nKPX Abreve v -40\r\nKPX Abreve w -40\r\nKPX Abreve y -40\r\nKPX Abreve yacute -40\r\nKPX Abreve ydieresis -40\r\nKPX Acircumflex C -30\r\nKPX Acircumflex Cacute -30\r\nKPX Acircumflex Ccaron -30\r\nKPX Acircumflex Ccedilla -30\r\nKPX Acircumflex G -30\r\nKPX Acircumflex Gbreve -30\r\nKPX Acircumflex Gcommaaccent -30\r\nKPX Acircumflex O -30\r\nKPX Acircumflex Oacute -30\r\nKPX Acircumflex Ocircumflex -30\r\nKPX Acircumflex Odieresis -30\r\nKPX Acircumflex Ograve -30\r\nKPX Acircumflex Ohungarumlaut -30\r\nKPX Acircumflex Omacron -30\r\nKPX Acircumflex Oslash -30\r\nKPX Acircumflex Otilde -30\r\nKPX Acircumflex Q -30\r\nKPX Acircumflex T -120\r\nKPX Acircumflex Tcaron -120\r\nKPX Acircumflex Tcommaaccent -120\r\nKPX Acircumflex U -50\r\nKPX Acircumflex Uacute -50\r\nKPX Acircumflex Ucircumflex -50\r\nKPX Acircumflex Udieresis -50\r\nKPX Acircumflex Ugrave -50\r\nKPX Acircumflex Uhungarumlaut -50\r\nKPX Acircumflex Umacron -50\r\nKPX Acircumflex Uogonek -50\r\nKPX Acircumflex Uring -50\r\nKPX Acircumflex V -70\r\nKPX Acircumflex W -50\r\nKPX Acircumflex Y -100\r\nKPX Acircumflex Yacute -100\r\nKPX Acircumflex Ydieresis -100\r\nKPX Acircumflex u -30\r\nKPX Acircumflex uacute -30\r\nKPX Acircumflex ucircumflex -30\r\nKPX Acircumflex udieresis -30\r\nKPX Acircumflex ugrave -30\r\nKPX Acircumflex uhungarumlaut -30\r\nKPX Acircumflex umacron -30\r\nKPX Acircumflex uogonek -30\r\nKPX Acircumflex uring -30\r\nKPX Acircumflex v -40\r\nKPX Acircumflex w -40\r\nKPX Acircumflex y -40\r\nKPX Acircumflex yacute -40\r\nKPX Acircumflex ydieresis -40\r\nKPX Adieresis C -30\r\nKPX Adieresis Cacute -30\r\nKPX Adieresis Ccaron -30\r\nKPX Adieresis Ccedilla -30\r\nKPX Adieresis G -30\r\nKPX Adieresis Gbreve -30\r\nKPX Adieresis Gcommaaccent -30\r\nKPX Adieresis O -30\r\nKPX Adieresis Oacute -30\r\nKPX Adieresis Ocircumflex -30\r\nKPX Adieresis Odieresis -30\r\nKPX Adieresis Ograve -30\r\nKPX Adieresis Ohungarumlaut -30\r\nKPX Adieresis Omacron -30\r\nKPX Adieresis Oslash -30\r\nKPX Adieresis Otilde -30\r\nKPX Adieresis Q -30\r\nKPX Adieresis T -120\r\nKPX Adieresis Tcaron -120\r\nKPX Adieresis Tcommaaccent -120\r\nKPX Adieresis U -50\r\nKPX Adieresis Uacute -50\r\nKPX Adieresis Ucircumflex -50\r\nKPX Adieresis Udieresis -50\r\nKPX Adieresis Ugrave -50\r\nKPX Adieresis Uhungarumlaut -50\r\nKPX Adieresis Umacron -50\r\nKPX Adieresis Uogonek -50\r\nKPX Adieresis Uring -50\r\nKPX Adieresis V -70\r\nKPX Adieresis W -50\r\nKPX Adieresis Y -100\r\nKPX Adieresis Yacute -100\r\nKPX Adieresis Ydieresis -100\r\nKPX Adieresis u -30\r\nKPX Adieresis uacute -30\r\nKPX Adieresis ucircumflex -30\r\nKPX Adieresis udieresis -30\r\nKPX Adieresis ugrave -30\r\nKPX Adieresis uhungarumlaut -30\r\nKPX Adieresis umacron -30\r\nKPX Adieresis uogonek -30\r\nKPX Adieresis uring -30\r\nKPX Adieresis v -40\r\nKPX Adieresis w -40\r\nKPX Adieresis y -40\r\nKPX Adieresis yacute -40\r\nKPX Adieresis ydieresis -40\r\nKPX Agrave C -30\r\nKPX Agrave Cacute -30\r\nKPX Agrave Ccaron -30\r\nKPX Agrave Ccedilla -30\r\nKPX Agrave G -30\r\nKPX Agrave Gbreve -30\r\nKPX Agrave Gcommaaccent -30\r\nKPX Agrave O -30\r\nKPX Agrave Oacute -30\r\nKPX Agrave Ocircumflex -30\r\nKPX Agrave Odieresis -30\r\nKPX Agrave Ograve -30\r\nKPX Agrave Ohungarumlaut -30\r\nKPX Agrave Omacron -30\r\nKPX Agrave Oslash -30\r\nKPX Agrave Otilde -30\r\nKPX Agrave Q -30\r\nKPX Agrave T -120\r\nKPX Agrave Tcaron -120\r\nKPX Agrave Tcommaaccent -120\r\nKPX Agrave U -50\r\nKPX Agrave Uacute -50\r\nKPX Agrave Ucircumflex -50\r\nKPX Agrave Udieresis -50\r\nKPX Agrave Ugrave -50\r\nKPX Agrave Uhungarumlaut -50\r\nKPX Agrave Umacron -50\r\nKPX Agrave Uogonek -50\r\nKPX Agrave Uring -50\r\nKPX Agrave V -70\r\nKPX Agrave W -50\r\nKPX Agrave Y -100\r\nKPX Agrave Yacute -100\r\nKPX Agrave Ydieresis -100\r\nKPX Agrave u -30\r\nKPX Agrave uacute -30\r\nKPX Agrave ucircumflex -30\r\nKPX Agrave udieresis -30\r\nKPX Agrave ugrave -30\r\nKPX Agrave uhungarumlaut -30\r\nKPX Agrave umacron -30\r\nKPX Agrave uogonek -30\r\nKPX Agrave uring -30\r\nKPX Agrave v -40\r\nKPX Agrave w -40\r\nKPX Agrave y -40\r\nKPX Agrave yacute -40\r\nKPX Agrave ydieresis -40\r\nKPX Amacron C -30\r\nKPX Amacron Cacute -30\r\nKPX Amacron Ccaron -30\r\nKPX Amacron Ccedilla -30\r\nKPX Amacron G -30\r\nKPX Amacron Gbreve -30\r\nKPX Amacron Gcommaaccent -30\r\nKPX Amacron O -30\r\nKPX Amacron Oacute -30\r\nKPX Amacron Ocircumflex -30\r\nKPX Amacron Odieresis -30\r\nKPX Amacron Ograve -30\r\nKPX Amacron Ohungarumlaut -30\r\nKPX Amacron Omacron -30\r\nKPX Amacron Oslash -30\r\nKPX Amacron Otilde -30\r\nKPX Amacron Q -30\r\nKPX Amacron T -120\r\nKPX Amacron Tcaron -120\r\nKPX Amacron Tcommaaccent -120\r\nKPX Amacron U -50\r\nKPX Amacron Uacute -50\r\nKPX Amacron Ucircumflex -50\r\nKPX Amacron Udieresis -50\r\nKPX Amacron Ugrave -50\r\nKPX Amacron Uhungarumlaut -50\r\nKPX Amacron Umacron -50\r\nKPX Amacron Uogonek -50\r\nKPX Amacron Uring -50\r\nKPX Amacron V -70\r\nKPX Amacron W -50\r\nKPX Amacron Y -100\r\nKPX Amacron Yacute -100\r\nKPX Amacron Ydieresis -100\r\nKPX Amacron u -30\r\nKPX Amacron uacute -30\r\nKPX Amacron ucircumflex -30\r\nKPX Amacron udieresis -30\r\nKPX Amacron ugrave -30\r\nKPX Amacron uhungarumlaut -30\r\nKPX Amacron umacron -30\r\nKPX Amacron uogonek -30\r\nKPX Amacron uring -30\r\nKPX Amacron v -40\r\nKPX Amacron w -40\r\nKPX Amacron y -40\r\nKPX Amacron yacute -40\r\nKPX Amacron ydieresis -40\r\nKPX Aogonek C -30\r\nKPX Aogonek Cacute -30\r\nKPX Aogonek Ccaron -30\r\nKPX Aogonek Ccedilla -30\r\nKPX Aogonek G -30\r\nKPX Aogonek Gbreve -30\r\nKPX Aogonek Gcommaaccent -30\r\nKPX Aogonek O -30\r\nKPX Aogonek Oacute -30\r\nKPX Aogonek Ocircumflex -30\r\nKPX Aogonek Odieresis -30\r\nKPX Aogonek Ograve -30\r\nKPX Aogonek Ohungarumlaut -30\r\nKPX Aogonek Omacron -30\r\nKPX Aogonek Oslash -30\r\nKPX Aogonek Otilde -30\r\nKPX Aogonek Q -30\r\nKPX Aogonek T -120\r\nKPX Aogonek Tcaron -120\r\nKPX Aogonek Tcommaaccent -120\r\nKPX Aogonek U -50\r\nKPX Aogonek Uacute -50\r\nKPX Aogonek Ucircumflex -50\r\nKPX Aogonek Udieresis -50\r\nKPX Aogonek Ugrave -50\r\nKPX Aogonek Uhungarumlaut -50\r\nKPX Aogonek Umacron -50\r\nKPX Aogonek Uogonek -50\r\nKPX Aogonek Uring -50\r\nKPX Aogonek V -70\r\nKPX Aogonek W -50\r\nKPX Aogonek Y -100\r\nKPX Aogonek Yacute -100\r\nKPX Aogonek Ydieresis -100\r\nKPX Aogonek u -30\r\nKPX Aogonek uacute -30\r\nKPX Aogonek ucircumflex -30\r\nKPX Aogonek udieresis -30\r\nKPX Aogonek ugrave -30\r\nKPX Aogonek uhungarumlaut -30\r\nKPX Aogonek umacron -30\r\nKPX Aogonek uogonek -30\r\nKPX Aogonek uring -30\r\nKPX Aogonek v -40\r\nKPX Aogonek w -40\r\nKPX Aogonek y -40\r\nKPX Aogonek yacute -40\r\nKPX Aogonek ydieresis -40\r\nKPX Aring C -30\r\nKPX Aring Cacute -30\r\nKPX Aring Ccaron -30\r\nKPX Aring Ccedilla -30\r\nKPX Aring G -30\r\nKPX Aring Gbreve -30\r\nKPX Aring Gcommaaccent -30\r\nKPX Aring O -30\r\nKPX Aring Oacute -30\r\nKPX Aring Ocircumflex -30\r\nKPX Aring Odieresis -30\r\nKPX Aring Ograve -30\r\nKPX Aring Ohungarumlaut -30\r\nKPX Aring Omacron -30\r\nKPX Aring Oslash -30\r\nKPX Aring Otilde -30\r\nKPX Aring Q -30\r\nKPX Aring T -120\r\nKPX Aring Tcaron -120\r\nKPX Aring Tcommaaccent -120\r\nKPX Aring U -50\r\nKPX Aring Uacute -50\r\nKPX Aring Ucircumflex -50\r\nKPX Aring Udieresis -50\r\nKPX Aring Ugrave -50\r\nKPX Aring Uhungarumlaut -50\r\nKPX Aring Umacron -50\r\nKPX Aring Uogonek -50\r\nKPX Aring Uring -50\r\nKPX Aring V -70\r\nKPX Aring W -50\r\nKPX Aring Y -100\r\nKPX Aring Yacute -100\r\nKPX Aring Ydieresis -100\r\nKPX Aring u -30\r\nKPX Aring uacute -30\r\nKPX Aring ucircumflex -30\r\nKPX Aring udieresis -30\r\nKPX Aring ugrave -30\r\nKPX Aring uhungarumlaut -30\r\nKPX Aring umacron -30\r\nKPX Aring uogonek -30\r\nKPX Aring uring -30\r\nKPX Aring v -40\r\nKPX Aring w -40\r\nKPX Aring y -40\r\nKPX Aring yacute -40\r\nKPX Aring ydieresis -40\r\nKPX Atilde C -30\r\nKPX Atilde Cacute -30\r\nKPX Atilde Ccaron -30\r\nKPX Atilde Ccedilla -30\r\nKPX Atilde G -30\r\nKPX Atilde Gbreve -30\r\nKPX Atilde Gcommaaccent -30\r\nKPX Atilde O -30\r\nKPX Atilde Oacute -30\r\nKPX Atilde Ocircumflex -30\r\nKPX Atilde Odieresis -30\r\nKPX Atilde Ograve -30\r\nKPX Atilde Ohungarumlaut -30\r\nKPX Atilde Omacron -30\r\nKPX Atilde Oslash -30\r\nKPX Atilde Otilde -30\r\nKPX Atilde Q -30\r\nKPX Atilde T -120\r\nKPX Atilde Tcaron -120\r\nKPX Atilde Tcommaaccent -120\r\nKPX Atilde U -50\r\nKPX Atilde Uacute -50\r\nKPX Atilde Ucircumflex -50\r\nKPX Atilde Udieresis -50\r\nKPX Atilde Ugrave -50\r\nKPX Atilde Uhungarumlaut -50\r\nKPX Atilde Umacron -50\r\nKPX Atilde Uogonek -50\r\nKPX Atilde Uring -50\r\nKPX Atilde V -70\r\nKPX Atilde W -50\r\nKPX Atilde Y -100\r\nKPX Atilde Yacute -100\r\nKPX Atilde Ydieresis -100\r\nKPX Atilde u -30\r\nKPX Atilde uacute -30\r\nKPX Atilde ucircumflex -30\r\nKPX Atilde udieresis -30\r\nKPX Atilde ugrave -30\r\nKPX Atilde uhungarumlaut -30\r\nKPX Atilde umacron -30\r\nKPX Atilde uogonek -30\r\nKPX Atilde uring -30\r\nKPX Atilde v -40\r\nKPX Atilde w -40\r\nKPX Atilde y -40\r\nKPX Atilde yacute -40\r\nKPX Atilde ydieresis -40\r\nKPX B U -10\r\nKPX B Uacute -10\r\nKPX B Ucircumflex -10\r\nKPX B Udieresis -10\r\nKPX B Ugrave -10\r\nKPX B Uhungarumlaut -10\r\nKPX B Umacron -10\r\nKPX B Uogonek -10\r\nKPX B Uring -10\r\nKPX B comma -20\r\nKPX B period -20\r\nKPX C comma -30\r\nKPX C period -30\r\nKPX Cacute comma -30\r\nKPX Cacute period -30\r\nKPX Ccaron comma -30\r\nKPX Ccaron period -30\r\nKPX Ccedilla comma -30\r\nKPX Ccedilla period -30\r\nKPX D A -40\r\nKPX D Aacute -40\r\nKPX D Abreve -40\r\nKPX D Acircumflex -40\r\nKPX D Adieresis -40\r\nKPX D Agrave -40\r\nKPX D Amacron -40\r\nKPX D Aogonek -40\r\nKPX D Aring -40\r\nKPX D Atilde -40\r\nKPX D V -70\r\nKPX D W -40\r\nKPX D Y -90\r\nKPX D Yacute -90\r\nKPX D Ydieresis -90\r\nKPX D comma -70\r\nKPX D period -70\r\nKPX Dcaron A -40\r\nKPX Dcaron Aacute -40\r\nKPX Dcaron Abreve -40\r\nKPX Dcaron Acircumflex -40\r\nKPX Dcaron Adieresis -40\r\nKPX Dcaron Agrave -40\r\nKPX Dcaron Amacron -40\r\nKPX Dcaron Aogonek -40\r\nKPX Dcaron Aring -40\r\nKPX Dcaron Atilde -40\r\nKPX Dcaron V -70\r\nKPX Dcaron W -40\r\nKPX Dcaron Y -90\r\nKPX Dcaron Yacute -90\r\nKPX Dcaron Ydieresis -90\r\nKPX Dcaron comma -70\r\nKPX Dcaron period -70\r\nKPX Dcroat A -40\r\nKPX Dcroat Aacute -40\r\nKPX Dcroat Abreve -40\r\nKPX Dcroat Acircumflex -40\r\nKPX Dcroat Adieresis -40\r\nKPX Dcroat Agrave -40\r\nKPX Dcroat Amacron -40\r\nKPX Dcroat Aogonek -40\r\nKPX Dcroat Aring -40\r\nKPX Dcroat Atilde -40\r\nKPX Dcroat V -70\r\nKPX Dcroat W -40\r\nKPX Dcroat Y -90\r\nKPX Dcroat Yacute -90\r\nKPX Dcroat Ydieresis -90\r\nKPX Dcroat comma -70\r\nKPX Dcroat period -70\r\nKPX F A -80\r\nKPX F Aacute -80\r\nKPX F Abreve -80\r\nKPX F Acircumflex -80\r\nKPX F Adieresis -80\r\nKPX F Agrave -80\r\nKPX F Amacron -80\r\nKPX F Aogonek -80\r\nKPX F Aring -80\r\nKPX F Atilde -80\r\nKPX F a -50\r\nKPX F aacute -50\r\nKPX F abreve -50\r\nKPX F acircumflex -50\r\nKPX F adieresis -50\r\nKPX F agrave -50\r\nKPX F amacron -50\r\nKPX F aogonek -50\r\nKPX F aring -50\r\nKPX F atilde -50\r\nKPX F comma -150\r\nKPX F e -30\r\nKPX F eacute -30\r\nKPX F ecaron -30\r\nKPX F ecircumflex -30\r\nKPX F edieresis -30\r\nKPX F edotaccent -30\r\nKPX F egrave -30\r\nKPX F emacron -30\r\nKPX F eogonek -30\r\nKPX F o -30\r\nKPX F oacute -30\r\nKPX F ocircumflex -30\r\nKPX F odieresis -30\r\nKPX F ograve -30\r\nKPX F ohungarumlaut -30\r\nKPX F omacron -30\r\nKPX F oslash -30\r\nKPX F otilde -30\r\nKPX F period -150\r\nKPX F r -45\r\nKPX F racute -45\r\nKPX F rcaron -45\r\nKPX F rcommaaccent -45\r\nKPX J A -20\r\nKPX J Aacute -20\r\nKPX J Abreve -20\r\nKPX J Acircumflex -20\r\nKPX J Adieresis -20\r\nKPX J Agrave -20\r\nKPX J Amacron -20\r\nKPX J Aogonek -20\r\nKPX J Aring -20\r\nKPX J Atilde -20\r\nKPX J a -20\r\nKPX J aacute -20\r\nKPX J abreve -20\r\nKPX J acircumflex -20\r\nKPX J adieresis -20\r\nKPX J agrave -20\r\nKPX J amacron -20\r\nKPX J aogonek -20\r\nKPX J aring -20\r\nKPX J atilde -20\r\nKPX J comma -30\r\nKPX J period -30\r\nKPX J u -20\r\nKPX J uacute -20\r\nKPX J ucircumflex -20\r\nKPX J udieresis -20\r\nKPX J ugrave -20\r\nKPX J uhungarumlaut -20\r\nKPX J umacron -20\r\nKPX J uogonek -20\r\nKPX J uring -20\r\nKPX K O -50\r\nKPX K Oacute -50\r\nKPX K Ocircumflex -50\r\nKPX K Odieresis -50\r\nKPX K Ograve -50\r\nKPX K Ohungarumlaut -50\r\nKPX K Omacron -50\r\nKPX K Oslash -50\r\nKPX K Otilde -50\r\nKPX K e -40\r\nKPX K eacute -40\r\nKPX K ecaron -40\r\nKPX K ecircumflex -40\r\nKPX K edieresis -40\r\nKPX K edotaccent -40\r\nKPX K egrave -40\r\nKPX K emacron -40\r\nKPX K eogonek -40\r\nKPX K o -40\r\nKPX K oacute -40\r\nKPX K ocircumflex -40\r\nKPX K odieresis -40\r\nKPX K ograve -40\r\nKPX K ohungarumlaut -40\r\nKPX K omacron -40\r\nKPX K oslash -40\r\nKPX K otilde -40\r\nKPX K u -30\r\nKPX K uacute -30\r\nKPX K ucircumflex -30\r\nKPX K udieresis -30\r\nKPX K ugrave -30\r\nKPX K uhungarumlaut -30\r\nKPX K umacron -30\r\nKPX K uogonek -30\r\nKPX K uring -30\r\nKPX K y -50\r\nKPX K yacute -50\r\nKPX K ydieresis -50\r\nKPX Kcommaaccent O -50\r\nKPX Kcommaaccent Oacute -50\r\nKPX Kcommaaccent Ocircumflex -50\r\nKPX Kcommaaccent Odieresis -50\r\nKPX Kcommaaccent Ograve -50\r\nKPX Kcommaaccent Ohungarumlaut -50\r\nKPX Kcommaaccent Omacron -50\r\nKPX Kcommaaccent Oslash -50\r\nKPX Kcommaaccent Otilde -50\r\nKPX Kcommaaccent e -40\r\nKPX Kcommaaccent eacute -40\r\nKPX Kcommaaccent ecaron -40\r\nKPX Kcommaaccent ecircumflex -40\r\nKPX Kcommaaccent edieresis -40\r\nKPX Kcommaaccent edotaccent -40\r\nKPX Kcommaaccent egrave -40\r\nKPX Kcommaaccent emacron -40\r\nKPX Kcommaaccent eogonek -40\r\nKPX Kcommaaccent o -40\r\nKPX Kcommaaccent oacute -40\r\nKPX Kcommaaccent ocircumflex -40\r\nKPX Kcommaaccent odieresis -40\r\nKPX Kcommaaccent ograve -40\r\nKPX Kcommaaccent ohungarumlaut -40\r\nKPX Kcommaaccent omacron -40\r\nKPX Kcommaaccent oslash -40\r\nKPX Kcommaaccent otilde -40\r\nKPX Kcommaaccent u -30\r\nKPX Kcommaaccent uacute -30\r\nKPX Kcommaaccent ucircumflex -30\r\nKPX Kcommaaccent udieresis -30\r\nKPX Kcommaaccent ugrave -30\r\nKPX Kcommaaccent uhungarumlaut -30\r\nKPX Kcommaaccent umacron -30\r\nKPX Kcommaaccent uogonek -30\r\nKPX Kcommaaccent uring -30\r\nKPX Kcommaaccent y -50\r\nKPX Kcommaaccent yacute -50\r\nKPX Kcommaaccent ydieresis -50\r\nKPX L T -110\r\nKPX L Tcaron -110\r\nKPX L Tcommaaccent -110\r\nKPX L V -110\r\nKPX L W -70\r\nKPX L Y -140\r\nKPX L Yacute -140\r\nKPX L Ydieresis -140\r\nKPX L quotedblright -140\r\nKPX L quoteright -160\r\nKPX L y -30\r\nKPX L yacute -30\r\nKPX L ydieresis -30\r\nKPX Lacute T -110\r\nKPX Lacute Tcaron -110\r\nKPX Lacute Tcommaaccent -110\r\nKPX Lacute V -110\r\nKPX Lacute W -70\r\nKPX Lacute Y -140\r\nKPX Lacute Yacute -140\r\nKPX Lacute Ydieresis -140\r\nKPX Lacute quotedblright -140\r\nKPX Lacute quoteright -160\r\nKPX Lacute y -30\r\nKPX Lacute yacute -30\r\nKPX Lacute ydieresis -30\r\nKPX Lcaron T -110\r\nKPX Lcaron Tcaron -110\r\nKPX Lcaron Tcommaaccent -110\r\nKPX Lcaron V -110\r\nKPX Lcaron W -70\r\nKPX Lcaron Y -140\r\nKPX Lcaron Yacute -140\r\nKPX Lcaron Ydieresis -140\r\nKPX Lcaron quotedblright -140\r\nKPX Lcaron quoteright -160\r\nKPX Lcaron y -30\r\nKPX Lcaron yacute -30\r\nKPX Lcaron ydieresis -30\r\nKPX Lcommaaccent T -110\r\nKPX Lcommaaccent Tcaron -110\r\nKPX Lcommaaccent Tcommaaccent -110\r\nKPX Lcommaaccent V -110\r\nKPX Lcommaaccent W -70\r\nKPX Lcommaaccent Y -140\r\nKPX Lcommaaccent Yacute -140\r\nKPX Lcommaaccent Ydieresis -140\r\nKPX Lcommaaccent quotedblright -140\r\nKPX Lcommaaccent quoteright -160\r\nKPX Lcommaaccent y -30\r\nKPX Lcommaaccent yacute -30\r\nKPX Lcommaaccent ydieresis -30\r\nKPX Lslash T -110\r\nKPX Lslash Tcaron -110\r\nKPX Lslash Tcommaaccent -110\r\nKPX Lslash V -110\r\nKPX Lslash W -70\r\nKPX Lslash Y -140\r\nKPX Lslash Yacute -140\r\nKPX Lslash Ydieresis -140\r\nKPX Lslash quotedblright -140\r\nKPX Lslash quoteright -160\r\nKPX Lslash y -30\r\nKPX Lslash yacute -30\r\nKPX Lslash ydieresis -30\r\nKPX O A -20\r\nKPX O Aacute -20\r\nKPX O Abreve -20\r\nKPX O Acircumflex -20\r\nKPX O Adieresis -20\r\nKPX O Agrave -20\r\nKPX O Amacron -20\r\nKPX O Aogonek -20\r\nKPX O Aring -20\r\nKPX O Atilde -20\r\nKPX O T -40\r\nKPX O Tcaron -40\r\nKPX O Tcommaaccent -40\r\nKPX O V -50\r\nKPX O W -30\r\nKPX O X -60\r\nKPX O Y -70\r\nKPX O Yacute -70\r\nKPX O Ydieresis -70\r\nKPX O comma -40\r\nKPX O period -40\r\nKPX Oacute A -20\r\nKPX Oacute Aacute -20\r\nKPX Oacute Abreve -20\r\nKPX Oacute Acircumflex -20\r\nKPX Oacute Adieresis -20\r\nKPX Oacute Agrave -20\r\nKPX Oacute Amacron -20\r\nKPX Oacute Aogonek -20\r\nKPX Oacute Aring -20\r\nKPX Oacute Atilde -20\r\nKPX Oacute T -40\r\nKPX Oacute Tcaron -40\r\nKPX Oacute Tcommaaccent -40\r\nKPX Oacute V -50\r\nKPX Oacute W -30\r\nKPX Oacute X -60\r\nKPX Oacute Y -70\r\nKPX Oacute Yacute -70\r\nKPX Oacute Ydieresis -70\r\nKPX Oacute comma -40\r\nKPX Oacute period -40\r\nKPX Ocircumflex A -20\r\nKPX Ocircumflex Aacute -20\r\nKPX Ocircumflex Abreve -20\r\nKPX Ocircumflex Acircumflex -20\r\nKPX Ocircumflex Adieresis -20\r\nKPX Ocircumflex Agrave -20\r\nKPX Ocircumflex Amacron -20\r\nKPX Ocircumflex Aogonek -20\r\nKPX Ocircumflex Aring -20\r\nKPX Ocircumflex Atilde -20\r\nKPX Ocircumflex T -40\r\nKPX Ocircumflex Tcaron -40\r\nKPX Ocircumflex Tcommaaccent -40\r\nKPX Ocircumflex V -50\r\nKPX Ocircumflex W -30\r\nKPX Ocircumflex X -60\r\nKPX Ocircumflex Y -70\r\nKPX Ocircumflex Yacute -70\r\nKPX Ocircumflex Ydieresis -70\r\nKPX Ocircumflex comma -40\r\nKPX Ocircumflex period -40\r\nKPX Odieresis A -20\r\nKPX Odieresis Aacute -20\r\nKPX Odieresis Abreve -20\r\nKPX Odieresis Acircumflex -20\r\nKPX Odieresis Adieresis -20\r\nKPX Odieresis Agrave -20\r\nKPX Odieresis Amacron -20\r\nKPX Odieresis Aogonek -20\r\nKPX Odieresis Aring -20\r\nKPX Odieresis Atilde -20\r\nKPX Odieresis T -40\r\nKPX Odieresis Tcaron -40\r\nKPX Odieresis Tcommaaccent -40\r\nKPX Odieresis V -50\r\nKPX Odieresis W -30\r\nKPX Odieresis X -60\r\nKPX Odieresis Y -70\r\nKPX Odieresis Yacute -70\r\nKPX Odieresis Ydieresis -70\r\nKPX Odieresis comma -40\r\nKPX Odieresis period -40\r\nKPX Ograve A -20\r\nKPX Ograve Aacute -20\r\nKPX Ograve Abreve -20\r\nKPX Ograve Acircumflex -20\r\nKPX Ograve Adieresis -20\r\nKPX Ograve Agrave -20\r\nKPX Ograve Amacron -20\r\nKPX Ograve Aogonek -20\r\nKPX Ograve Aring -20\r\nKPX Ograve Atilde -20\r\nKPX Ograve T -40\r\nKPX Ograve Tcaron -40\r\nKPX Ograve Tcommaaccent -40\r\nKPX Ograve V -50\r\nKPX Ograve W -30\r\nKPX Ograve X -60\r\nKPX Ograve Y -70\r\nKPX Ograve Yacute -70\r\nKPX Ograve Ydieresis -70\r\nKPX Ograve comma -40\r\nKPX Ograve period -40\r\nKPX Ohungarumlaut A -20\r\nKPX Ohungarumlaut Aacute -20\r\nKPX Ohungarumlaut Abreve -20\r\nKPX Ohungarumlaut Acircumflex -20\r\nKPX Ohungarumlaut Adieresis -20\r\nKPX Ohungarumlaut Agrave -20\r\nKPX Ohungarumlaut Amacron -20\r\nKPX Ohungarumlaut Aogonek -20\r\nKPX Ohungarumlaut Aring -20\r\nKPX Ohungarumlaut Atilde -20\r\nKPX Ohungarumlaut T -40\r\nKPX Ohungarumlaut Tcaron -40\r\nKPX Ohungarumlaut Tcommaaccent -40\r\nKPX Ohungarumlaut V -50\r\nKPX Ohungarumlaut W -30\r\nKPX Ohungarumlaut X -60\r\nKPX Ohungarumlaut Y -70\r\nKPX Ohungarumlaut Yacute -70\r\nKPX Ohungarumlaut Ydieresis -70\r\nKPX Ohungarumlaut comma -40\r\nKPX Ohungarumlaut period -40\r\nKPX Omacron A -20\r\nKPX Omacron Aacute -20\r\nKPX Omacron Abreve -20\r\nKPX Omacron Acircumflex -20\r\nKPX Omacron Adieresis -20\r\nKPX Omacron Agrave -20\r\nKPX Omacron Amacron -20\r\nKPX Omacron Aogonek -20\r\nKPX Omacron Aring -20\r\nKPX Omacron Atilde -20\r\nKPX Omacron T -40\r\nKPX Omacron Tcaron -40\r\nKPX Omacron Tcommaaccent -40\r\nKPX Omacron V -50\r\nKPX Omacron W -30\r\nKPX Omacron X -60\r\nKPX Omacron Y -70\r\nKPX Omacron Yacute -70\r\nKPX Omacron Ydieresis -70\r\nKPX Omacron comma -40\r\nKPX Omacron period -40\r\nKPX Oslash A -20\r\nKPX Oslash Aacute -20\r\nKPX Oslash Abreve -20\r\nKPX Oslash Acircumflex -20\r\nKPX Oslash Adieresis -20\r\nKPX Oslash Agrave -20\r\nKPX Oslash Amacron -20\r\nKPX Oslash Aogonek -20\r\nKPX Oslash Aring -20\r\nKPX Oslash Atilde -20\r\nKPX Oslash T -40\r\nKPX Oslash Tcaron -40\r\nKPX Oslash Tcommaaccent -40\r\nKPX Oslash V -50\r\nKPX Oslash W -30\r\nKPX Oslash X -60\r\nKPX Oslash Y -70\r\nKPX Oslash Yacute -70\r\nKPX Oslash Ydieresis -70\r\nKPX Oslash comma -40\r\nKPX Oslash period -40\r\nKPX Otilde A -20\r\nKPX Otilde Aacute -20\r\nKPX Otilde Abreve -20\r\nKPX Otilde Acircumflex -20\r\nKPX Otilde Adieresis -20\r\nKPX Otilde Agrave -20\r\nKPX Otilde Amacron -20\r\nKPX Otilde Aogonek -20\r\nKPX Otilde Aring -20\r\nKPX Otilde Atilde -20\r\nKPX Otilde T -40\r\nKPX Otilde Tcaron -40\r\nKPX Otilde Tcommaaccent -40\r\nKPX Otilde V -50\r\nKPX Otilde W -30\r\nKPX Otilde X -60\r\nKPX Otilde Y -70\r\nKPX Otilde Yacute -70\r\nKPX Otilde Ydieresis -70\r\nKPX Otilde comma -40\r\nKPX Otilde period -40\r\nKPX P A -120\r\nKPX P Aacute -120\r\nKPX P Abreve -120\r\nKPX P Acircumflex -120\r\nKPX P Adieresis -120\r\nKPX P Agrave -120\r\nKPX P Amacron -120\r\nKPX P Aogonek -120\r\nKPX P Aring -120\r\nKPX P Atilde -120\r\nKPX P a -40\r\nKPX P aacute -40\r\nKPX P abreve -40\r\nKPX P acircumflex -40\r\nKPX P adieresis -40\r\nKPX P agrave -40\r\nKPX P amacron -40\r\nKPX P aogonek -40\r\nKPX P aring -40\r\nKPX P atilde -40\r\nKPX P comma -180\r\nKPX P e -50\r\nKPX P eacute -50\r\nKPX P ecaron -50\r\nKPX P ecircumflex -50\r\nKPX P edieresis -50\r\nKPX P edotaccent -50\r\nKPX P egrave -50\r\nKPX P emacron -50\r\nKPX P eogonek -50\r\nKPX P o -50\r\nKPX P oacute -50\r\nKPX P ocircumflex -50\r\nKPX P odieresis -50\r\nKPX P ograve -50\r\nKPX P ohungarumlaut -50\r\nKPX P omacron -50\r\nKPX P oslash -50\r\nKPX P otilde -50\r\nKPX P period -180\r\nKPX Q U -10\r\nKPX Q Uacute -10\r\nKPX Q Ucircumflex -10\r\nKPX Q Udieresis -10\r\nKPX Q Ugrave -10\r\nKPX Q Uhungarumlaut -10\r\nKPX Q Umacron -10\r\nKPX Q Uogonek -10\r\nKPX Q Uring -10\r\nKPX R O -20\r\nKPX R Oacute -20\r\nKPX R Ocircumflex -20\r\nKPX R Odieresis -20\r\nKPX R Ograve -20\r\nKPX R Ohungarumlaut -20\r\nKPX R Omacron -20\r\nKPX R Oslash -20\r\nKPX R Otilde -20\r\nKPX R T -30\r\nKPX R Tcaron -30\r\nKPX R Tcommaaccent -30\r\nKPX R U -40\r\nKPX R Uacute -40\r\nKPX R Ucircumflex -40\r\nKPX R Udieresis -40\r\nKPX R Ugrave -40\r\nKPX R Uhungarumlaut -40\r\nKPX R Umacron -40\r\nKPX R Uogonek -40\r\nKPX R Uring -40\r\nKPX R V -50\r\nKPX R W -30\r\nKPX R Y -50\r\nKPX R Yacute -50\r\nKPX R Ydieresis -50\r\nKPX Racute O -20\r\nKPX Racute Oacute -20\r\nKPX Racute Ocircumflex -20\r\nKPX Racute Odieresis -20\r\nKPX Racute Ograve -20\r\nKPX Racute Ohungarumlaut -20\r\nKPX Racute Omacron -20\r\nKPX Racute Oslash -20\r\nKPX Racute Otilde -20\r\nKPX Racute T -30\r\nKPX Racute Tcaron -30\r\nKPX Racute Tcommaaccent -30\r\nKPX Racute U -40\r\nKPX Racute Uacute -40\r\nKPX Racute Ucircumflex -40\r\nKPX Racute Udieresis -40\r\nKPX Racute Ugrave -40\r\nKPX Racute Uhungarumlaut -40\r\nKPX Racute Umacron -40\r\nKPX Racute Uogonek -40\r\nKPX Racute Uring -40\r\nKPX Racute V -50\r\nKPX Racute W -30\r\nKPX Racute Y -50\r\nKPX Racute Yacute -50\r\nKPX Racute Ydieresis -50\r\nKPX Rcaron O -20\r\nKPX Rcaron Oacute -20\r\nKPX Rcaron Ocircumflex -20\r\nKPX Rcaron Odieresis -20\r\nKPX Rcaron Ograve -20\r\nKPX Rcaron Ohungarumlaut -20\r\nKPX Rcaron Omacron -20\r\nKPX Rcaron Oslash -20\r\nKPX Rcaron Otilde -20\r\nKPX Rcaron T -30\r\nKPX Rcaron Tcaron -30\r\nKPX Rcaron Tcommaaccent -30\r\nKPX Rcaron U -40\r\nKPX Rcaron Uacute -40\r\nKPX Rcaron Ucircumflex -40\r\nKPX Rcaron Udieresis -40\r\nKPX Rcaron Ugrave -40\r\nKPX Rcaron Uhungarumlaut -40\r\nKPX Rcaron Umacron -40\r\nKPX Rcaron Uogonek -40\r\nKPX Rcaron Uring -40\r\nKPX Rcaron V -50\r\nKPX Rcaron W -30\r\nKPX Rcaron Y -50\r\nKPX Rcaron Yacute -50\r\nKPX Rcaron Ydieresis -50\r\nKPX Rcommaaccent O -20\r\nKPX Rcommaaccent Oacute -20\r\nKPX Rcommaaccent Ocircumflex -20\r\nKPX Rcommaaccent Odieresis -20\r\nKPX Rcommaaccent Ograve -20\r\nKPX Rcommaaccent Ohungarumlaut -20\r\nKPX Rcommaaccent Omacron -20\r\nKPX Rcommaaccent Oslash -20\r\nKPX Rcommaaccent Otilde -20\r\nKPX Rcommaaccent T -30\r\nKPX Rcommaaccent Tcaron -30\r\nKPX Rcommaaccent Tcommaaccent -30\r\nKPX Rcommaaccent U -40\r\nKPX Rcommaaccent Uacute -40\r\nKPX Rcommaaccent Ucircumflex -40\r\nKPX Rcommaaccent Udieresis -40\r\nKPX Rcommaaccent Ugrave -40\r\nKPX Rcommaaccent Uhungarumlaut -40\r\nKPX Rcommaaccent Umacron -40\r\nKPX Rcommaaccent Uogonek -40\r\nKPX Rcommaaccent Uring -40\r\nKPX Rcommaaccent V -50\r\nKPX Rcommaaccent W -30\r\nKPX Rcommaaccent Y -50\r\nKPX Rcommaaccent Yacute -50\r\nKPX Rcommaaccent Ydieresis -50\r\nKPX S comma -20\r\nKPX S period -20\r\nKPX Sacute comma -20\r\nKPX Sacute period -20\r\nKPX Scaron comma -20\r\nKPX Scaron period -20\r\nKPX Scedilla comma -20\r\nKPX Scedilla period -20\r\nKPX Scommaaccent comma -20\r\nKPX Scommaaccent period -20\r\nKPX T A -120\r\nKPX T Aacute -120\r\nKPX T Abreve -120\r\nKPX T Acircumflex -120\r\nKPX T Adieresis -120\r\nKPX T Agrave -120\r\nKPX T Amacron -120\r\nKPX T Aogonek -120\r\nKPX T Aring -120\r\nKPX T Atilde -120\r\nKPX T O -40\r\nKPX T Oacute -40\r\nKPX T Ocircumflex -40\r\nKPX T Odieresis -40\r\nKPX T Ograve -40\r\nKPX T Ohungarumlaut -40\r\nKPX T Omacron -40\r\nKPX T Oslash -40\r\nKPX T Otilde -40\r\nKPX T a -120\r\nKPX T aacute -120\r\nKPX T abreve -60\r\nKPX T acircumflex -120\r\nKPX T adieresis -120\r\nKPX T agrave -120\r\nKPX T amacron -60\r\nKPX T aogonek -120\r\nKPX T aring -120\r\nKPX T atilde -60\r\nKPX T colon -20\r\nKPX T comma -120\r\nKPX T e -120\r\nKPX T eacute -120\r\nKPX T ecaron -120\r\nKPX T ecircumflex -120\r\nKPX T edieresis -120\r\nKPX T edotaccent -120\r\nKPX T egrave -60\r\nKPX T emacron -60\r\nKPX T eogonek -120\r\nKPX T hyphen -140\r\nKPX T o -120\r\nKPX T oacute -120\r\nKPX T ocircumflex -120\r\nKPX T odieresis -120\r\nKPX T ograve -120\r\nKPX T ohungarumlaut -120\r\nKPX T omacron -60\r\nKPX T oslash -120\r\nKPX T otilde -60\r\nKPX T period -120\r\nKPX T r -120\r\nKPX T racute -120\r\nKPX T rcaron -120\r\nKPX T rcommaaccent -120\r\nKPX T semicolon -20\r\nKPX T u -120\r\nKPX T uacute -120\r\nKPX T ucircumflex -120\r\nKPX T udieresis -120\r\nKPX T ugrave -120\r\nKPX T uhungarumlaut -120\r\nKPX T umacron -60\r\nKPX T uogonek -120\r\nKPX T uring -120\r\nKPX T w -120\r\nKPX T y -120\r\nKPX T yacute -120\r\nKPX T ydieresis -60\r\nKPX Tcaron A -120\r\nKPX Tcaron Aacute -120\r\nKPX Tcaron Abreve -120\r\nKPX Tcaron Acircumflex -120\r\nKPX Tcaron Adieresis -120\r\nKPX Tcaron Agrave -120\r\nKPX Tcaron Amacron -120\r\nKPX Tcaron Aogonek -120\r\nKPX Tcaron Aring -120\r\nKPX Tcaron Atilde -120\r\nKPX Tcaron O -40\r\nKPX Tcaron Oacute -40\r\nKPX Tcaron Ocircumflex -40\r\nKPX Tcaron Odieresis -40\r\nKPX Tcaron Ograve -40\r\nKPX Tcaron Ohungarumlaut -40\r\nKPX Tcaron Omacron -40\r\nKPX Tcaron Oslash -40\r\nKPX Tcaron Otilde -40\r\nKPX Tcaron a -120\r\nKPX Tcaron aacute -120\r\nKPX Tcaron abreve -60\r\nKPX Tcaron acircumflex -120\r\nKPX Tcaron adieresis -120\r\nKPX Tcaron agrave -120\r\nKPX Tcaron amacron -60\r\nKPX Tcaron aogonek -120\r\nKPX Tcaron aring -120\r\nKPX Tcaron atilde -60\r\nKPX Tcaron colon -20\r\nKPX Tcaron comma -120\r\nKPX Tcaron e -120\r\nKPX Tcaron eacute -120\r\nKPX Tcaron ecaron -120\r\nKPX Tcaron ecircumflex -120\r\nKPX Tcaron edieresis -120\r\nKPX Tcaron edotaccent -120\r\nKPX Tcaron egrave -60\r\nKPX Tcaron emacron -60\r\nKPX Tcaron eogonek -120\r\nKPX Tcaron hyphen -140\r\nKPX Tcaron o -120\r\nKPX Tcaron oacute -120\r\nKPX Tcaron ocircumflex -120\r\nKPX Tcaron odieresis -120\r\nKPX Tcaron ograve -120\r\nKPX Tcaron ohungarumlaut -120\r\nKPX Tcaron omacron -60\r\nKPX Tcaron oslash -120\r\nKPX Tcaron otilde -60\r\nKPX Tcaron period -120\r\nKPX Tcaron r -120\r\nKPX Tcaron racute -120\r\nKPX Tcaron rcaron -120\r\nKPX Tcaron rcommaaccent -120\r\nKPX Tcaron semicolon -20\r\nKPX Tcaron u -120\r\nKPX Tcaron uacute -120\r\nKPX Tcaron ucircumflex -120\r\nKPX Tcaron udieresis -120\r\nKPX Tcaron ugrave -120\r\nKPX Tcaron uhungarumlaut -120\r\nKPX Tcaron umacron -60\r\nKPX Tcaron uogonek -120\r\nKPX Tcaron uring -120\r\nKPX Tcaron w -120\r\nKPX Tcaron y -120\r\nKPX Tcaron yacute -120\r\nKPX Tcaron ydieresis -60\r\nKPX Tcommaaccent A -120\r\nKPX Tcommaaccent Aacute -120\r\nKPX Tcommaaccent Abreve -120\r\nKPX Tcommaaccent Acircumflex -120\r\nKPX Tcommaaccent Adieresis -120\r\nKPX Tcommaaccent Agrave -120\r\nKPX Tcommaaccent Amacron -120\r\nKPX Tcommaaccent Aogonek -120\r\nKPX Tcommaaccent Aring -120\r\nKPX Tcommaaccent Atilde -120\r\nKPX Tcommaaccent O -40\r\nKPX Tcommaaccent Oacute -40\r\nKPX Tcommaaccent Ocircumflex -40\r\nKPX Tcommaaccent Odieresis -40\r\nKPX Tcommaaccent Ograve -40\r\nKPX Tcommaaccent Ohungarumlaut -40\r\nKPX Tcommaaccent Omacron -40\r\nKPX Tcommaaccent Oslash -40\r\nKPX Tcommaaccent Otilde -40\r\nKPX Tcommaaccent a -120\r\nKPX Tcommaaccent aacute -120\r\nKPX Tcommaaccent abreve -60\r\nKPX Tcommaaccent acircumflex -120\r\nKPX Tcommaaccent adieresis -120\r\nKPX Tcommaaccent agrave -120\r\nKPX Tcommaaccent amacron -60\r\nKPX Tcommaaccent aogonek -120\r\nKPX Tcommaaccent aring -120\r\nKPX Tcommaaccent atilde -60\r\nKPX Tcommaaccent colon -20\r\nKPX Tcommaaccent comma -120\r\nKPX Tcommaaccent e -120\r\nKPX Tcommaaccent eacute -120\r\nKPX Tcommaaccent ecaron -120\r\nKPX Tcommaaccent ecircumflex -120\r\nKPX Tcommaaccent edieresis -120\r\nKPX Tcommaaccent edotaccent -120\r\nKPX Tcommaaccent egrave -60\r\nKPX Tcommaaccent emacron -60\r\nKPX Tcommaaccent eogonek -120\r\nKPX Tcommaaccent hyphen -140\r\nKPX Tcommaaccent o -120\r\nKPX Tcommaaccent oacute -120\r\nKPX Tcommaaccent ocircumflex -120\r\nKPX Tcommaaccent odieresis -120\r\nKPX Tcommaaccent ograve -120\r\nKPX Tcommaaccent ohungarumlaut -120\r\nKPX Tcommaaccent omacron -60\r\nKPX Tcommaaccent oslash -120\r\nKPX Tcommaaccent otilde -60\r\nKPX Tcommaaccent period -120\r\nKPX Tcommaaccent r -120\r\nKPX Tcommaaccent racute -120\r\nKPX Tcommaaccent rcaron -120\r\nKPX Tcommaaccent rcommaaccent -120\r\nKPX Tcommaaccent semicolon -20\r\nKPX Tcommaaccent u -120\r\nKPX Tcommaaccent uacute -120\r\nKPX Tcommaaccent ucircumflex -120\r\nKPX Tcommaaccent udieresis -120\r\nKPX Tcommaaccent ugrave -120\r\nKPX Tcommaaccent uhungarumlaut -120\r\nKPX Tcommaaccent umacron -60\r\nKPX Tcommaaccent uogonek -120\r\nKPX Tcommaaccent uring -120\r\nKPX Tcommaaccent w -120\r\nKPX Tcommaaccent y -120\r\nKPX Tcommaaccent yacute -120\r\nKPX Tcommaaccent ydieresis -60\r\nKPX U A -40\r\nKPX U Aacute -40\r\nKPX U Abreve -40\r\nKPX U Acircumflex -40\r\nKPX U Adieresis -40\r\nKPX U Agrave -40\r\nKPX U Amacron -40\r\nKPX U Aogonek -40\r\nKPX U Aring -40\r\nKPX U Atilde -40\r\nKPX U comma -40\r\nKPX U period -40\r\nKPX Uacute A -40\r\nKPX Uacute Aacute -40\r\nKPX Uacute Abreve -40\r\nKPX Uacute Acircumflex -40\r\nKPX Uacute Adieresis -40\r\nKPX Uacute Agrave -40\r\nKPX Uacute Amacron -40\r\nKPX Uacute Aogonek -40\r\nKPX Uacute Aring -40\r\nKPX Uacute Atilde -40\r\nKPX Uacute comma -40\r\nKPX Uacute period -40\r\nKPX Ucircumflex A -40\r\nKPX Ucircumflex Aacute -40\r\nKPX Ucircumflex Abreve -40\r\nKPX Ucircumflex Acircumflex -40\r\nKPX Ucircumflex Adieresis -40\r\nKPX Ucircumflex Agrave -40\r\nKPX Ucircumflex Amacron -40\r\nKPX Ucircumflex Aogonek -40\r\nKPX Ucircumflex Aring -40\r\nKPX Ucircumflex Atilde -40\r\nKPX Ucircumflex comma -40\r\nKPX Ucircumflex period -40\r\nKPX Udieresis A -40\r\nKPX Udieresis Aacute -40\r\nKPX Udieresis Abreve -40\r\nKPX Udieresis Acircumflex -40\r\nKPX Udieresis Adieresis -40\r\nKPX Udieresis Agrave -40\r\nKPX Udieresis Amacron -40\r\nKPX Udieresis Aogonek -40\r\nKPX Udieresis Aring -40\r\nKPX Udieresis Atilde -40\r\nKPX Udieresis comma -40\r\nKPX Udieresis period -40\r\nKPX Ugrave A -40\r\nKPX Ugrave Aacute -40\r\nKPX Ugrave Abreve -40\r\nKPX Ugrave Acircumflex -40\r\nKPX Ugrave Adieresis -40\r\nKPX Ugrave Agrave -40\r\nKPX Ugrave Amacron -40\r\nKPX Ugrave Aogonek -40\r\nKPX Ugrave Aring -40\r\nKPX Ugrave Atilde -40\r\nKPX Ugrave comma -40\r\nKPX Ugrave period -40\r\nKPX Uhungarumlaut A -40\r\nKPX Uhungarumlaut Aacute -40\r\nKPX Uhungarumlaut Abreve -40\r\nKPX Uhungarumlaut Acircumflex -40\r\nKPX Uhungarumlaut Adieresis -40\r\nKPX Uhungarumlaut Agrave -40\r\nKPX Uhungarumlaut Amacron -40\r\nKPX Uhungarumlaut Aogonek -40\r\nKPX Uhungarumlaut Aring -40\r\nKPX Uhungarumlaut Atilde -40\r\nKPX Uhungarumlaut comma -40\r\nKPX Uhungarumlaut period -40\r\nKPX Umacron A -40\r\nKPX Umacron Aacute -40\r\nKPX Umacron Abreve -40\r\nKPX Umacron Acircumflex -40\r\nKPX Umacron Adieresis -40\r\nKPX Umacron Agrave -40\r\nKPX Umacron Amacron -40\r\nKPX Umacron Aogonek -40\r\nKPX Umacron Aring -40\r\nKPX Umacron Atilde -40\r\nKPX Umacron comma -40\r\nKPX Umacron period -40\r\nKPX Uogonek A -40\r\nKPX Uogonek Aacute -40\r\nKPX Uogonek Abreve -40\r\nKPX Uogonek Acircumflex -40\r\nKPX Uogonek Adieresis -40\r\nKPX Uogonek Agrave -40\r\nKPX Uogonek Amacron -40\r\nKPX Uogonek Aogonek -40\r\nKPX Uogonek Aring -40\r\nKPX Uogonek Atilde -40\r\nKPX Uogonek comma -40\r\nKPX Uogonek period -40\r\nKPX Uring A -40\r\nKPX Uring Aacute -40\r\nKPX Uring Abreve -40\r\nKPX Uring Acircumflex -40\r\nKPX Uring Adieresis -40\r\nKPX Uring Agrave -40\r\nKPX Uring Amacron -40\r\nKPX Uring Aogonek -40\r\nKPX Uring Aring -40\r\nKPX Uring Atilde -40\r\nKPX Uring comma -40\r\nKPX Uring period -40\r\nKPX V A -80\r\nKPX V Aacute -80\r\nKPX V Abreve -80\r\nKPX V Acircumflex -80\r\nKPX V Adieresis -80\r\nKPX V Agrave -80\r\nKPX V Amacron -80\r\nKPX V Aogonek -80\r\nKPX V Aring -80\r\nKPX V Atilde -80\r\nKPX V G -40\r\nKPX V Gbreve -40\r\nKPX V Gcommaaccent -40\r\nKPX V O -40\r\nKPX V Oacute -40\r\nKPX V Ocircumflex -40\r\nKPX V Odieresis -40\r\nKPX V Ograve -40\r\nKPX V Ohungarumlaut -40\r\nKPX V Omacron -40\r\nKPX V Oslash -40\r\nKPX V Otilde -40\r\nKPX V a -70\r\nKPX V aacute -70\r\nKPX V abreve -70\r\nKPX V acircumflex -70\r\nKPX V adieresis -70\r\nKPX V agrave -70\r\nKPX V amacron -70\r\nKPX V aogonek -70\r\nKPX V aring -70\r\nKPX V atilde -70\r\nKPX V colon -40\r\nKPX V comma -125\r\nKPX V e -80\r\nKPX V eacute -80\r\nKPX V ecaron -80\r\nKPX V ecircumflex -80\r\nKPX V edieresis -80\r\nKPX V edotaccent -80\r\nKPX V egrave -80\r\nKPX V emacron -80\r\nKPX V eogonek -80\r\nKPX V hyphen -80\r\nKPX V o -80\r\nKPX V oacute -80\r\nKPX V ocircumflex -80\r\nKPX V odieresis -80\r\nKPX V ograve -80\r\nKPX V ohungarumlaut -80\r\nKPX V omacron -80\r\nKPX V oslash -80\r\nKPX V otilde -80\r\nKPX V period -125\r\nKPX V semicolon -40\r\nKPX V u -70\r\nKPX V uacute -70\r\nKPX V ucircumflex -70\r\nKPX V udieresis -70\r\nKPX V ugrave -70\r\nKPX V uhungarumlaut -70\r\nKPX V umacron -70\r\nKPX V uogonek -70\r\nKPX V uring -70\r\nKPX W A -50\r\nKPX W Aacute -50\r\nKPX W Abreve -50\r\nKPX W Acircumflex -50\r\nKPX W Adieresis -50\r\nKPX W Agrave -50\r\nKPX W Amacron -50\r\nKPX W Aogonek -50\r\nKPX W Aring -50\r\nKPX W Atilde -50\r\nKPX W O -20\r\nKPX W Oacute -20\r\nKPX W Ocircumflex -20\r\nKPX W Odieresis -20\r\nKPX W Ograve -20\r\nKPX W Ohungarumlaut -20\r\nKPX W Omacron -20\r\nKPX W Oslash -20\r\nKPX W Otilde -20\r\nKPX W a -40\r\nKPX W aacute -40\r\nKPX W abreve -40\r\nKPX W acircumflex -40\r\nKPX W adieresis -40\r\nKPX W agrave -40\r\nKPX W amacron -40\r\nKPX W aogonek -40\r\nKPX W aring -40\r\nKPX W atilde -40\r\nKPX W comma -80\r\nKPX W e -30\r\nKPX W eacute -30\r\nKPX W ecaron -30\r\nKPX W ecircumflex -30\r\nKPX W edieresis -30\r\nKPX W edotaccent -30\r\nKPX W egrave -30\r\nKPX W emacron -30\r\nKPX W eogonek -30\r\nKPX W hyphen -40\r\nKPX W o -30\r\nKPX W oacute -30\r\nKPX W ocircumflex -30\r\nKPX W odieresis -30\r\nKPX W ograve -30\r\nKPX W ohungarumlaut -30\r\nKPX W omacron -30\r\nKPX W oslash -30\r\nKPX W otilde -30\r\nKPX W period -80\r\nKPX W u -30\r\nKPX W uacute -30\r\nKPX W ucircumflex -30\r\nKPX W udieresis -30\r\nKPX W ugrave -30\r\nKPX W uhungarumlaut -30\r\nKPX W umacron -30\r\nKPX W uogonek -30\r\nKPX W uring -30\r\nKPX W y -20\r\nKPX W yacute -20\r\nKPX W ydieresis -20\r\nKPX Y A -110\r\nKPX Y Aacute -110\r\nKPX Y Abreve -110\r\nKPX Y Acircumflex -110\r\nKPX Y Adieresis -110\r\nKPX Y Agrave -110\r\nKPX Y Amacron -110\r\nKPX Y Aogonek -110\r\nKPX Y Aring -110\r\nKPX Y Atilde -110\r\nKPX Y O -85\r\nKPX Y Oacute -85\r\nKPX Y Ocircumflex -85\r\nKPX Y Odieresis -85\r\nKPX Y Ograve -85\r\nKPX Y Ohungarumlaut -85\r\nKPX Y Omacron -85\r\nKPX Y Oslash -85\r\nKPX Y Otilde -85\r\nKPX Y a -140\r\nKPX Y aacute -140\r\nKPX Y abreve -70\r\nKPX Y acircumflex -140\r\nKPX Y adieresis -140\r\nKPX Y agrave -140\r\nKPX Y amacron -70\r\nKPX Y aogonek -140\r\nKPX Y aring -140\r\nKPX Y atilde -140\r\nKPX Y colon -60\r\nKPX Y comma -140\r\nKPX Y e -140\r\nKPX Y eacute -140\r\nKPX Y ecaron -140\r\nKPX Y ecircumflex -140\r\nKPX Y edieresis -140\r\nKPX Y edotaccent -140\r\nKPX Y egrave -140\r\nKPX Y emacron -70\r\nKPX Y eogonek -140\r\nKPX Y hyphen -140\r\nKPX Y i -20\r\nKPX Y iacute -20\r\nKPX Y iogonek -20\r\nKPX Y o -140\r\nKPX Y oacute -140\r\nKPX Y ocircumflex -140\r\nKPX Y odieresis -140\r\nKPX Y ograve -140\r\nKPX Y ohungarumlaut -140\r\nKPX Y omacron -140\r\nKPX Y oslash -140\r\nKPX Y otilde -140\r\nKPX Y period -140\r\nKPX Y semicolon -60\r\nKPX Y u -110\r\nKPX Y uacute -110\r\nKPX Y ucircumflex -110\r\nKPX Y udieresis -110\r\nKPX Y ugrave -110\r\nKPX Y uhungarumlaut -110\r\nKPX Y umacron -110\r\nKPX Y uogonek -110\r\nKPX Y uring -110\r\nKPX Yacute A -110\r\nKPX Yacute Aacute -110\r\nKPX Yacute Abreve -110\r\nKPX Yacute Acircumflex -110\r\nKPX Yacute Adieresis -110\r\nKPX Yacute Agrave -110\r\nKPX Yacute Amacron -110\r\nKPX Yacute Aogonek -110\r\nKPX Yacute Aring -110\r\nKPX Yacute Atilde -110\r\nKPX Yacute O -85\r\nKPX Yacute Oacute -85\r\nKPX Yacute Ocircumflex -85\r\nKPX Yacute Odieresis -85\r\nKPX Yacute Ograve -85\r\nKPX Yacute Ohungarumlaut -85\r\nKPX Yacute Omacron -85\r\nKPX Yacute Oslash -85\r\nKPX Yacute Otilde -85\r\nKPX Yacute a -140\r\nKPX Yacute aacute -140\r\nKPX Yacute abreve -70\r\nKPX Yacute acircumflex -140\r\nKPX Yacute adieresis -140\r\nKPX Yacute agrave -140\r\nKPX Yacute amacron -70\r\nKPX Yacute aogonek -140\r\nKPX Yacute aring -140\r\nKPX Yacute atilde -70\r\nKPX Yacute colon -60\r\nKPX Yacute comma -140\r\nKPX Yacute e -140\r\nKPX Yacute eacute -140\r\nKPX Yacute ecaron -140\r\nKPX Yacute ecircumflex -140\r\nKPX Yacute edieresis -140\r\nKPX Yacute edotaccent -140\r\nKPX Yacute egrave -140\r\nKPX Yacute emacron -70\r\nKPX Yacute eogonek -140\r\nKPX Yacute hyphen -140\r\nKPX Yacute i -20\r\nKPX Yacute iacute -20\r\nKPX Yacute iogonek -20\r\nKPX Yacute o -140\r\nKPX Yacute oacute -140\r\nKPX Yacute ocircumflex -140\r\nKPX Yacute odieresis -140\r\nKPX Yacute ograve -140\r\nKPX Yacute ohungarumlaut -140\r\nKPX Yacute omacron -70\r\nKPX Yacute oslash -140\r\nKPX Yacute otilde -140\r\nKPX Yacute period -140\r\nKPX Yacute semicolon -60\r\nKPX Yacute u -110\r\nKPX Yacute uacute -110\r\nKPX Yacute ucircumflex -110\r\nKPX Yacute udieresis -110\r\nKPX Yacute ugrave -110\r\nKPX Yacute uhungarumlaut -110\r\nKPX Yacute umacron -110\r\nKPX Yacute uogonek -110\r\nKPX Yacute uring -110\r\nKPX Ydieresis A -110\r\nKPX Ydieresis Aacute -110\r\nKPX Ydieresis Abreve -110\r\nKPX Ydieresis Acircumflex -110\r\nKPX Ydieresis Adieresis -110\r\nKPX Ydieresis Agrave -110\r\nKPX Ydieresis Amacron -110\r\nKPX Ydieresis Aogonek -110\r\nKPX Ydieresis Aring -110\r\nKPX Ydieresis Atilde -110\r\nKPX Ydieresis O -85\r\nKPX Ydieresis Oacute -85\r\nKPX Ydieresis Ocircumflex -85\r\nKPX Ydieresis Odieresis -85\r\nKPX Ydieresis Ograve -85\r\nKPX Ydieresis Ohungarumlaut -85\r\nKPX Ydieresis Omacron -85\r\nKPX Ydieresis Oslash -85\r\nKPX Ydieresis Otilde -85\r\nKPX Ydieresis a -140\r\nKPX Ydieresis aacute -140\r\nKPX Ydieresis abreve -70\r\nKPX Ydieresis acircumflex -140\r\nKPX Ydieresis adieresis -140\r\nKPX Ydieresis agrave -140\r\nKPX Ydieresis amacron -70\r\nKPX Ydieresis aogonek -140\r\nKPX Ydieresis aring -140\r\nKPX Ydieresis atilde -70\r\nKPX Ydieresis colon -60\r\nKPX Ydieresis comma -140\r\nKPX Ydieresis e -140\r\nKPX Ydieresis eacute -140\r\nKPX Ydieresis ecaron -140\r\nKPX Ydieresis ecircumflex -140\r\nKPX Ydieresis edieresis -140\r\nKPX Ydieresis edotaccent -140\r\nKPX Ydieresis egrave -140\r\nKPX Ydieresis emacron -70\r\nKPX Ydieresis eogonek -140\r\nKPX Ydieresis hyphen -140\r\nKPX Ydieresis i -20\r\nKPX Ydieresis iacute -20\r\nKPX Ydieresis iogonek -20\r\nKPX Ydieresis o -140\r\nKPX Ydieresis oacute -140\r\nKPX Ydieresis ocircumflex -140\r\nKPX Ydieresis odieresis -140\r\nKPX Ydieresis ograve -140\r\nKPX Ydieresis ohungarumlaut -140\r\nKPX Ydieresis omacron -140\r\nKPX Ydieresis oslash -140\r\nKPX Ydieresis otilde -140\r\nKPX Ydieresis period -140\r\nKPX Ydieresis semicolon -60\r\nKPX Ydieresis u -110\r\nKPX Ydieresis uacute -110\r\nKPX Ydieresis ucircumflex -110\r\nKPX Ydieresis udieresis -110\r\nKPX Ydieresis ugrave -110\r\nKPX Ydieresis uhungarumlaut -110\r\nKPX Ydieresis umacron -110\r\nKPX Ydieresis uogonek -110\r\nKPX Ydieresis uring -110\r\nKPX a v -20\r\nKPX a w -20\r\nKPX a y -30\r\nKPX a yacute -30\r\nKPX a ydieresis -30\r\nKPX aacute v -20\r\nKPX aacute w -20\r\nKPX aacute y -30\r\nKPX aacute yacute -30\r\nKPX aacute ydieresis -30\r\nKPX abreve v -20\r\nKPX abreve w -20\r\nKPX abreve y -30\r\nKPX abreve yacute -30\r\nKPX abreve ydieresis -30\r\nKPX acircumflex v -20\r\nKPX acircumflex w -20\r\nKPX acircumflex y -30\r\nKPX acircumflex yacute -30\r\nKPX acircumflex ydieresis -30\r\nKPX adieresis v -20\r\nKPX adieresis w -20\r\nKPX adieresis y -30\r\nKPX adieresis yacute -30\r\nKPX adieresis ydieresis -30\r\nKPX agrave v -20\r\nKPX agrave w -20\r\nKPX agrave y -30\r\nKPX agrave yacute -30\r\nKPX agrave ydieresis -30\r\nKPX amacron v -20\r\nKPX amacron w -20\r\nKPX amacron y -30\r\nKPX amacron yacute -30\r\nKPX amacron ydieresis -30\r\nKPX aogonek v -20\r\nKPX aogonek w -20\r\nKPX aogonek y -30\r\nKPX aogonek yacute -30\r\nKPX aogonek ydieresis -30\r\nKPX aring v -20\r\nKPX aring w -20\r\nKPX aring y -30\r\nKPX aring yacute -30\r\nKPX aring ydieresis -30\r\nKPX atilde v -20\r\nKPX atilde w -20\r\nKPX atilde y -30\r\nKPX atilde yacute -30\r\nKPX atilde ydieresis -30\r\nKPX b b -10\r\nKPX b comma -40\r\nKPX b l -20\r\nKPX b lacute -20\r\nKPX b lcommaaccent -20\r\nKPX b lslash -20\r\nKPX b period -40\r\nKPX b u -20\r\nKPX b uacute -20\r\nKPX b ucircumflex -20\r\nKPX b udieresis -20\r\nKPX b ugrave -20\r\nKPX b uhungarumlaut -20\r\nKPX b umacron -20\r\nKPX b uogonek -20\r\nKPX b uring -20\r\nKPX b v -20\r\nKPX b y -20\r\nKPX b yacute -20\r\nKPX b ydieresis -20\r\nKPX c comma -15\r\nKPX c k -20\r\nKPX c kcommaaccent -20\r\nKPX cacute comma -15\r\nKPX cacute k -20\r\nKPX cacute kcommaaccent -20\r\nKPX ccaron comma -15\r\nKPX ccaron k -20\r\nKPX ccaron kcommaaccent -20\r\nKPX ccedilla comma -15\r\nKPX ccedilla k -20\r\nKPX ccedilla kcommaaccent -20\r\nKPX colon space -50\r\nKPX comma quotedblright -100\r\nKPX comma quoteright -100\r\nKPX e comma -15\r\nKPX e period -15\r\nKPX e v -30\r\nKPX e w -20\r\nKPX e x -30\r\nKPX e y -20\r\nKPX e yacute -20\r\nKPX e ydieresis -20\r\nKPX eacute comma -15\r\nKPX eacute period -15\r\nKPX eacute v -30\r\nKPX eacute w -20\r\nKPX eacute x -30\r\nKPX eacute y -20\r\nKPX eacute yacute -20\r\nKPX eacute ydieresis -20\r\nKPX ecaron comma -15\r\nKPX ecaron period -15\r\nKPX ecaron v -30\r\nKPX ecaron w -20\r\nKPX ecaron x -30\r\nKPX ecaron y -20\r\nKPX ecaron yacute -20\r\nKPX ecaron ydieresis -20\r\nKPX ecircumflex comma -15\r\nKPX ecircumflex period -15\r\nKPX ecircumflex v -30\r\nKPX ecircumflex w -20\r\nKPX ecircumflex x -30\r\nKPX ecircumflex y -20\r\nKPX ecircumflex yacute -20\r\nKPX ecircumflex ydieresis -20\r\nKPX edieresis comma -15\r\nKPX edieresis period -15\r\nKPX edieresis v -30\r\nKPX edieresis w -20\r\nKPX edieresis x -30\r\nKPX edieresis y -20\r\nKPX edieresis yacute -20\r\nKPX edieresis ydieresis -20\r\nKPX edotaccent comma -15\r\nKPX edotaccent period -15\r\nKPX edotaccent v -30\r\nKPX edotaccent w -20\r\nKPX edotaccent x -30\r\nKPX edotaccent y -20\r\nKPX edotaccent yacute -20\r\nKPX edotaccent ydieresis -20\r\nKPX egrave comma -15\r\nKPX egrave period -15\r\nKPX egrave v -30\r\nKPX egrave w -20\r\nKPX egrave x -30\r\nKPX egrave y -20\r\nKPX egrave yacute -20\r\nKPX egrave ydieresis -20\r\nKPX emacron comma -15\r\nKPX emacron period -15\r\nKPX emacron v -30\r\nKPX emacron w -20\r\nKPX emacron x -30\r\nKPX emacron y -20\r\nKPX emacron yacute -20\r\nKPX emacron ydieresis -20\r\nKPX eogonek comma -15\r\nKPX eogonek period -15\r\nKPX eogonek v -30\r\nKPX eogonek w -20\r\nKPX eogonek x -30\r\nKPX eogonek y -20\r\nKPX eogonek yacute -20\r\nKPX eogonek ydieresis -20\r\nKPX f a -30\r\nKPX f aacute -30\r\nKPX f abreve -30\r\nKPX f acircumflex -30\r\nKPX f adieresis -30\r\nKPX f agrave -30\r\nKPX f amacron -30\r\nKPX f aogonek -30\r\nKPX f aring -30\r\nKPX f atilde -30\r\nKPX f comma -30\r\nKPX f dotlessi -28\r\nKPX f e -30\r\nKPX f eacute -30\r\nKPX f ecaron -30\r\nKPX f ecircumflex -30\r\nKPX f edieresis -30\r\nKPX f edotaccent -30\r\nKPX f egrave -30\r\nKPX f emacron -30\r\nKPX f eogonek -30\r\nKPX f o -30\r\nKPX f oacute -30\r\nKPX f ocircumflex -30\r\nKPX f odieresis -30\r\nKPX f ograve -30\r\nKPX f ohungarumlaut -30\r\nKPX f omacron -30\r\nKPX f oslash -30\r\nKPX f otilde -30\r\nKPX f period -30\r\nKPX f quotedblright 60\r\nKPX f quoteright 50\r\nKPX g r -10\r\nKPX g racute -10\r\nKPX g rcaron -10\r\nKPX g rcommaaccent -10\r\nKPX gbreve r -10\r\nKPX gbreve racute -10\r\nKPX gbreve rcaron -10\r\nKPX gbreve rcommaaccent -10\r\nKPX gcommaaccent r -10\r\nKPX gcommaaccent racute -10\r\nKPX gcommaaccent rcaron -10\r\nKPX gcommaaccent rcommaaccent -10\r\nKPX h y -30\r\nKPX h yacute -30\r\nKPX h ydieresis -30\r\nKPX k e -20\r\nKPX k eacute -20\r\nKPX k ecaron -20\r\nKPX k ecircumflex -20\r\nKPX k edieresis -20\r\nKPX k edotaccent -20\r\nKPX k egrave -20\r\nKPX k emacron -20\r\nKPX k eogonek -20\r\nKPX k o -20\r\nKPX k oacute -20\r\nKPX k ocircumflex -20\r\nKPX k odieresis -20\r\nKPX k ograve -20\r\nKPX k ohungarumlaut -20\r\nKPX k omacron -20\r\nKPX k oslash -20\r\nKPX k otilde -20\r\nKPX kcommaaccent e -20\r\nKPX kcommaaccent eacute -20\r\nKPX kcommaaccent ecaron -20\r\nKPX kcommaaccent ecircumflex -20\r\nKPX kcommaaccent edieresis -20\r\nKPX kcommaaccent edotaccent -20\r\nKPX kcommaaccent egrave -20\r\nKPX kcommaaccent emacron -20\r\nKPX kcommaaccent eogonek -20\r\nKPX kcommaaccent o -20\r\nKPX kcommaaccent oacute -20\r\nKPX kcommaaccent ocircumflex -20\r\nKPX kcommaaccent odieresis -20\r\nKPX kcommaaccent ograve -20\r\nKPX kcommaaccent ohungarumlaut -20\r\nKPX kcommaaccent omacron -20\r\nKPX kcommaaccent oslash -20\r\nKPX kcommaaccent otilde -20\r\nKPX m u -10\r\nKPX m uacute -10\r\nKPX m ucircumflex -10\r\nKPX m udieresis -10\r\nKPX m ugrave -10\r\nKPX m uhungarumlaut -10\r\nKPX m umacron -10\r\nKPX m uogonek -10\r\nKPX m uring -10\r\nKPX m y -15\r\nKPX m yacute -15\r\nKPX m ydieresis -15\r\nKPX n u -10\r\nKPX n uacute -10\r\nKPX n ucircumflex -10\r\nKPX n udieresis -10\r\nKPX n ugrave -10\r\nKPX n uhungarumlaut -10\r\nKPX n umacron -10\r\nKPX n uogonek -10\r\nKPX n uring -10\r\nKPX n v -20\r\nKPX n y -15\r\nKPX n yacute -15\r\nKPX n ydieresis -15\r\nKPX nacute u -10\r\nKPX nacute uacute -10\r\nKPX nacute ucircumflex -10\r\nKPX nacute udieresis -10\r\nKPX nacute ugrave -10\r\nKPX nacute uhungarumlaut -10\r\nKPX nacute umacron -10\r\nKPX nacute uogonek -10\r\nKPX nacute uring -10\r\nKPX nacute v -20\r\nKPX nacute y -15\r\nKPX nacute yacute -15\r\nKPX nacute ydieresis -15\r\nKPX ncaron u -10\r\nKPX ncaron uacute -10\r\nKPX ncaron ucircumflex -10\r\nKPX ncaron udieresis -10\r\nKPX ncaron ugrave -10\r\nKPX ncaron uhungarumlaut -10\r\nKPX ncaron umacron -10\r\nKPX ncaron uogonek -10\r\nKPX ncaron uring -10\r\nKPX ncaron v -20\r\nKPX ncaron y -15\r\nKPX ncaron yacute -15\r\nKPX ncaron ydieresis -15\r\nKPX ncommaaccent u -10\r\nKPX ncommaaccent uacute -10\r\nKPX ncommaaccent ucircumflex -10\r\nKPX ncommaaccent udieresis -10\r\nKPX ncommaaccent ugrave -10\r\nKPX ncommaaccent uhungarumlaut -10\r\nKPX ncommaaccent umacron -10\r\nKPX ncommaaccent uogonek -10\r\nKPX ncommaaccent uring -10\r\nKPX ncommaaccent v -20\r\nKPX ncommaaccent y -15\r\nKPX ncommaaccent yacute -15\r\nKPX ncommaaccent ydieresis -15\r\nKPX ntilde u -10\r\nKPX ntilde uacute -10\r\nKPX ntilde ucircumflex -10\r\nKPX ntilde udieresis -10\r\nKPX ntilde ugrave -10\r\nKPX ntilde uhungarumlaut -10\r\nKPX ntilde umacron -10\r\nKPX ntilde uogonek -10\r\nKPX ntilde uring -10\r\nKPX ntilde v -20\r\nKPX ntilde y -15\r\nKPX ntilde yacute -15\r\nKPX ntilde ydieresis -15\r\nKPX o comma -40\r\nKPX o period -40\r\nKPX o v -15\r\nKPX o w -15\r\nKPX o x -30\r\nKPX o y -30\r\nKPX o yacute -30\r\nKPX o ydieresis -30\r\nKPX oacute comma -40\r\nKPX oacute period -40\r\nKPX oacute v -15\r\nKPX oacute w -15\r\nKPX oacute x -30\r\nKPX oacute y -30\r\nKPX oacute yacute -30\r\nKPX oacute ydieresis -30\r\nKPX ocircumflex comma -40\r\nKPX ocircumflex period -40\r\nKPX ocircumflex v -15\r\nKPX ocircumflex w -15\r\nKPX ocircumflex x -30\r\nKPX ocircumflex y -30\r\nKPX ocircumflex yacute -30\r\nKPX ocircumflex ydieresis -30\r\nKPX odieresis comma -40\r\nKPX odieresis period -40\r\nKPX odieresis v -15\r\nKPX odieresis w -15\r\nKPX odieresis x -30\r\nKPX odieresis y -30\r\nKPX odieresis yacute -30\r\nKPX odieresis ydieresis -30\r\nKPX ograve comma -40\r\nKPX ograve period -40\r\nKPX ograve v -15\r\nKPX ograve w -15\r\nKPX ograve x -30\r\nKPX ograve y -30\r\nKPX ograve yacute -30\r\nKPX ograve ydieresis -30\r\nKPX ohungarumlaut comma -40\r\nKPX ohungarumlaut period -40\r\nKPX ohungarumlaut v -15\r\nKPX ohungarumlaut w -15\r\nKPX ohungarumlaut x -30\r\nKPX ohungarumlaut y -30\r\nKPX ohungarumlaut yacute -30\r\nKPX ohungarumlaut ydieresis -30\r\nKPX omacron comma -40\r\nKPX omacron period -40\r\nKPX omacron v -15\r\nKPX omacron w -15\r\nKPX omacron x -30\r\nKPX omacron y -30\r\nKPX omacron yacute -30\r\nKPX omacron ydieresis -30\r\nKPX oslash a -55\r\nKPX oslash aacute -55\r\nKPX oslash abreve -55\r\nKPX oslash acircumflex -55\r\nKPX oslash adieresis -55\r\nKPX oslash agrave -55\r\nKPX oslash amacron -55\r\nKPX oslash aogonek -55\r\nKPX oslash aring -55\r\nKPX oslash atilde -55\r\nKPX oslash b -55\r\nKPX oslash c -55\r\nKPX oslash cacute -55\r\nKPX oslash ccaron -55\r\nKPX oslash ccedilla -55\r\nKPX oslash comma -95\r\nKPX oslash d -55\r\nKPX oslash dcroat -55\r\nKPX oslash e -55\r\nKPX oslash eacute -55\r\nKPX oslash ecaron -55\r\nKPX oslash ecircumflex -55\r\nKPX oslash edieresis -55\r\nKPX oslash edotaccent -55\r\nKPX oslash egrave -55\r\nKPX oslash emacron -55\r\nKPX oslash eogonek -55\r\nKPX oslash f -55\r\nKPX oslash g -55\r\nKPX oslash gbreve -55\r\nKPX oslash gcommaaccent -55\r\nKPX oslash h -55\r\nKPX oslash i -55\r\nKPX oslash iacute -55\r\nKPX oslash icircumflex -55\r\nKPX oslash idieresis -55\r\nKPX oslash igrave -55\r\nKPX oslash imacron -55\r\nKPX oslash iogonek -55\r\nKPX oslash j -55\r\nKPX oslash k -55\r\nKPX oslash kcommaaccent -55\r\nKPX oslash l -55\r\nKPX oslash lacute -55\r\nKPX oslash lcommaaccent -55\r\nKPX oslash lslash -55\r\nKPX oslash m -55\r\nKPX oslash n -55\r\nKPX oslash nacute -55\r\nKPX oslash ncaron -55\r\nKPX oslash ncommaaccent -55\r\nKPX oslash ntilde -55\r\nKPX oslash o -55\r\nKPX oslash oacute -55\r\nKPX oslash ocircumflex -55\r\nKPX oslash odieresis -55\r\nKPX oslash ograve -55\r\nKPX oslash ohungarumlaut -55\r\nKPX oslash omacron -55\r\nKPX oslash oslash -55\r\nKPX oslash otilde -55\r\nKPX oslash p -55\r\nKPX oslash period -95\r\nKPX oslash q -55\r\nKPX oslash r -55\r\nKPX oslash racute -55\r\nKPX oslash rcaron -55\r\nKPX oslash rcommaaccent -55\r\nKPX oslash s -55\r\nKPX oslash sacute -55\r\nKPX oslash scaron -55\r\nKPX oslash scedilla -55\r\nKPX oslash scommaaccent -55\r\nKPX oslash t -55\r\nKPX oslash tcommaaccent -55\r\nKPX oslash u -55\r\nKPX oslash uacute -55\r\nKPX oslash ucircumflex -55\r\nKPX oslash udieresis -55\r\nKPX oslash ugrave -55\r\nKPX oslash uhungarumlaut -55\r\nKPX oslash umacron -55\r\nKPX oslash uogonek -55\r\nKPX oslash uring -55\r\nKPX oslash v -70\r\nKPX oslash w -70\r\nKPX oslash x -85\r\nKPX oslash y -70\r\nKPX oslash yacute -70\r\nKPX oslash ydieresis -70\r\nKPX oslash z -55\r\nKPX oslash zacute -55\r\nKPX oslash zcaron -55\r\nKPX oslash zdotaccent -55\r\nKPX otilde comma -40\r\nKPX otilde period -40\r\nKPX otilde v -15\r\nKPX otilde w -15\r\nKPX otilde x -30\r\nKPX otilde y -30\r\nKPX otilde yacute -30\r\nKPX otilde ydieresis -30\r\nKPX p comma -35\r\nKPX p period -35\r\nKPX p y -30\r\nKPX p yacute -30\r\nKPX p ydieresis -30\r\nKPX period quotedblright -100\r\nKPX period quoteright -100\r\nKPX period space -60\r\nKPX quotedblright space -40\r\nKPX quoteleft quoteleft -57\r\nKPX quoteright d -50\r\nKPX quoteright dcroat -50\r\nKPX quoteright quoteright -57\r\nKPX quoteright r -50\r\nKPX quoteright racute -50\r\nKPX quoteright rcaron -50\r\nKPX quoteright rcommaaccent -50\r\nKPX quoteright s -50\r\nKPX quoteright sacute -50\r\nKPX quoteright scaron -50\r\nKPX quoteright scedilla -50\r\nKPX quoteright scommaaccent -50\r\nKPX quoteright space -70\r\nKPX r a -10\r\nKPX r aacute -10\r\nKPX r abreve -10\r\nKPX r acircumflex -10\r\nKPX r adieresis -10\r\nKPX r agrave -10\r\nKPX r amacron -10\r\nKPX r aogonek -10\r\nKPX r aring -10\r\nKPX r atilde -10\r\nKPX r colon 30\r\nKPX r comma -50\r\nKPX r i 15\r\nKPX r iacute 15\r\nKPX r icircumflex 15\r\nKPX r idieresis 15\r\nKPX r igrave 15\r\nKPX r imacron 15\r\nKPX r iogonek 15\r\nKPX r k 15\r\nKPX r kcommaaccent 15\r\nKPX r l 15\r\nKPX r lacute 15\r\nKPX r lcommaaccent 15\r\nKPX r lslash 15\r\nKPX r m 25\r\nKPX r n 25\r\nKPX r nacute 25\r\nKPX r ncaron 25\r\nKPX r ncommaaccent 25\r\nKPX r ntilde 25\r\nKPX r p 30\r\nKPX r period -50\r\nKPX r semicolon 30\r\nKPX r t 40\r\nKPX r tcommaaccent 40\r\nKPX r u 15\r\nKPX r uacute 15\r\nKPX r ucircumflex 15\r\nKPX r udieresis 15\r\nKPX r ugrave 15\r\nKPX r uhungarumlaut 15\r\nKPX r umacron 15\r\nKPX r uogonek 15\r\nKPX r uring 15\r\nKPX r v 30\r\nKPX r y 30\r\nKPX r yacute 30\r\nKPX r ydieresis 30\r\nKPX racute a -10\r\nKPX racute aacute -10\r\nKPX racute abreve -10\r\nKPX racute acircumflex -10\r\nKPX racute adieresis -10\r\nKPX racute agrave -10\r\nKPX racute amacron -10\r\nKPX racute aogonek -10\r\nKPX racute aring -10\r\nKPX racute atilde -10\r\nKPX racute colon 30\r\nKPX racute comma -50\r\nKPX racute i 15\r\nKPX racute iacute 15\r\nKPX racute icircumflex 15\r\nKPX racute idieresis 15\r\nKPX racute igrave 15\r\nKPX racute imacron 15\r\nKPX racute iogonek 15\r\nKPX racute k 15\r\nKPX racute kcommaaccent 15\r\nKPX racute l 15\r\nKPX racute lacute 15\r\nKPX racute lcommaaccent 15\r\nKPX racute lslash 15\r\nKPX racute m 25\r\nKPX racute n 25\r\nKPX racute nacute 25\r\nKPX racute ncaron 25\r\nKPX racute ncommaaccent 25\r\nKPX racute ntilde 25\r\nKPX racute p 30\r\nKPX racute period -50\r\nKPX racute semicolon 30\r\nKPX racute t 40\r\nKPX racute tcommaaccent 40\r\nKPX racute u 15\r\nKPX racute uacute 15\r\nKPX racute ucircumflex 15\r\nKPX racute udieresis 15\r\nKPX racute ugrave 15\r\nKPX racute uhungarumlaut 15\r\nKPX racute umacron 15\r\nKPX racute uogonek 15\r\nKPX racute uring 15\r\nKPX racute v 30\r\nKPX racute y 30\r\nKPX racute yacute 30\r\nKPX racute ydieresis 30\r\nKPX rcaron a -10\r\nKPX rcaron aacute -10\r\nKPX rcaron abreve -10\r\nKPX rcaron acircumflex -10\r\nKPX rcaron adieresis -10\r\nKPX rcaron agrave -10\r\nKPX rcaron amacron -10\r\nKPX rcaron aogonek -10\r\nKPX rcaron aring -10\r\nKPX rcaron atilde -10\r\nKPX rcaron colon 30\r\nKPX rcaron comma -50\r\nKPX rcaron i 15\r\nKPX rcaron iacute 15\r\nKPX rcaron icircumflex 15\r\nKPX rcaron idieresis 15\r\nKPX rcaron igrave 15\r\nKPX rcaron imacron 15\r\nKPX rcaron iogonek 15\r\nKPX rcaron k 15\r\nKPX rcaron kcommaaccent 15\r\nKPX rcaron l 15\r\nKPX rcaron lacute 15\r\nKPX rcaron lcommaaccent 15\r\nKPX rcaron lslash 15\r\nKPX rcaron m 25\r\nKPX rcaron n 25\r\nKPX rcaron nacute 25\r\nKPX rcaron ncaron 25\r\nKPX rcaron ncommaaccent 25\r\nKPX rcaron ntilde 25\r\nKPX rcaron p 30\r\nKPX rcaron period -50\r\nKPX rcaron semicolon 30\r\nKPX rcaron t 40\r\nKPX rcaron tcommaaccent 40\r\nKPX rcaron u 15\r\nKPX rcaron uacute 15\r\nKPX rcaron ucircumflex 15\r\nKPX rcaron udieresis 15\r\nKPX rcaron ugrave 15\r\nKPX rcaron uhungarumlaut 15\r\nKPX rcaron umacron 15\r\nKPX rcaron uogonek 15\r\nKPX rcaron uring 15\r\nKPX rcaron v 30\r\nKPX rcaron y 30\r\nKPX rcaron yacute 30\r\nKPX rcaron ydieresis 30\r\nKPX rcommaaccent a -10\r\nKPX rcommaaccent aacute -10\r\nKPX rcommaaccent abreve -10\r\nKPX rcommaaccent acircumflex -10\r\nKPX rcommaaccent adieresis -10\r\nKPX rcommaaccent agrave -10\r\nKPX rcommaaccent amacron -10\r\nKPX rcommaaccent aogonek -10\r\nKPX rcommaaccent aring -10\r\nKPX rcommaaccent atilde -10\r\nKPX rcommaaccent colon 30\r\nKPX rcommaaccent comma -50\r\nKPX rcommaaccent i 15\r\nKPX rcommaaccent iacute 15\r\nKPX rcommaaccent icircumflex 15\r\nKPX rcommaaccent idieresis 15\r\nKPX rcommaaccent igrave 15\r\nKPX rcommaaccent imacron 15\r\nKPX rcommaaccent iogonek 15\r\nKPX rcommaaccent k 15\r\nKPX rcommaaccent kcommaaccent 15\r\nKPX rcommaaccent l 15\r\nKPX rcommaaccent lacute 15\r\nKPX rcommaaccent lcommaaccent 15\r\nKPX rcommaaccent lslash 15\r\nKPX rcommaaccent m 25\r\nKPX rcommaaccent n 25\r\nKPX rcommaaccent nacute 25\r\nKPX rcommaaccent ncaron 25\r\nKPX rcommaaccent ncommaaccent 25\r\nKPX rcommaaccent ntilde 25\r\nKPX rcommaaccent p 30\r\nKPX rcommaaccent period -50\r\nKPX rcommaaccent semicolon 30\r\nKPX rcommaaccent t 40\r\nKPX rcommaaccent tcommaaccent 40\r\nKPX rcommaaccent u 15\r\nKPX rcommaaccent uacute 15\r\nKPX rcommaaccent ucircumflex 15\r\nKPX rcommaaccent udieresis 15\r\nKPX rcommaaccent ugrave 15\r\nKPX rcommaaccent uhungarumlaut 15\r\nKPX rcommaaccent umacron 15\r\nKPX rcommaaccent uogonek 15\r\nKPX rcommaaccent uring 15\r\nKPX rcommaaccent v 30\r\nKPX rcommaaccent y 30\r\nKPX rcommaaccent yacute 30\r\nKPX rcommaaccent ydieresis 30\r\nKPX s comma -15\r\nKPX s period -15\r\nKPX s w -30\r\nKPX sacute comma -15\r\nKPX sacute period -15\r\nKPX sacute w -30\r\nKPX scaron comma -15\r\nKPX scaron period -15\r\nKPX scaron w -30\r\nKPX scedilla comma -15\r\nKPX scedilla period -15\r\nKPX scedilla w -30\r\nKPX scommaaccent comma -15\r\nKPX scommaaccent period -15\r\nKPX scommaaccent w -30\r\nKPX semicolon space -50\r\nKPX space T -50\r\nKPX space Tcaron -50\r\nKPX space Tcommaaccent -50\r\nKPX space V -50\r\nKPX space W -40\r\nKPX space Y -90\r\nKPX space Yacute -90\r\nKPX space Ydieresis -90\r\nKPX space quotedblleft -30\r\nKPX space quoteleft -60\r\nKPX v a -25\r\nKPX v aacute -25\r\nKPX v abreve -25\r\nKPX v acircumflex -25\r\nKPX v adieresis -25\r\nKPX v agrave -25\r\nKPX v amacron -25\r\nKPX v aogonek -25\r\nKPX v aring -25\r\nKPX v atilde -25\r\nKPX v comma -80\r\nKPX v e -25\r\nKPX v eacute -25\r\nKPX v ecaron -25\r\nKPX v ecircumflex -25\r\nKPX v edieresis -25\r\nKPX v edotaccent -25\r\nKPX v egrave -25\r\nKPX v emacron -25\r\nKPX v eogonek -25\r\nKPX v o -25\r\nKPX v oacute -25\r\nKPX v ocircumflex -25\r\nKPX v odieresis -25\r\nKPX v ograve -25\r\nKPX v ohungarumlaut -25\r\nKPX v omacron -25\r\nKPX v oslash -25\r\nKPX v otilde -25\r\nKPX v period -80\r\nKPX w a -15\r\nKPX w aacute -15\r\nKPX w abreve -15\r\nKPX w acircumflex -15\r\nKPX w adieresis -15\r\nKPX w agrave -15\r\nKPX w amacron -15\r\nKPX w aogonek -15\r\nKPX w aring -15\r\nKPX w atilde -15\r\nKPX w comma -60\r\nKPX w e -10\r\nKPX w eacute -10\r\nKPX w ecaron -10\r\nKPX w ecircumflex -10\r\nKPX w edieresis -10\r\nKPX w edotaccent -10\r\nKPX w egrave -10\r\nKPX w emacron -10\r\nKPX w eogonek -10\r\nKPX w o -10\r\nKPX w oacute -10\r\nKPX w ocircumflex -10\r\nKPX w odieresis -10\r\nKPX w ograve -10\r\nKPX w ohungarumlaut -10\r\nKPX w omacron -10\r\nKPX w oslash -10\r\nKPX w otilde -10\r\nKPX w period -60\r\nKPX x e -30\r\nKPX x eacute -30\r\nKPX x ecaron -30\r\nKPX x ecircumflex -30\r\nKPX x edieresis -30\r\nKPX x edotaccent -30\r\nKPX x egrave -30\r\nKPX x emacron -30\r\nKPX x eogonek -30\r\nKPX y a -20\r\nKPX y aacute -20\r\nKPX y abreve -20\r\nKPX y acircumflex -20\r\nKPX y adieresis -20\r\nKPX y agrave -20\r\nKPX y amacron -20\r\nKPX y aogonek -20\r\nKPX y aring -20\r\nKPX y atilde -20\r\nKPX y comma -100\r\nKPX y e -20\r\nKPX y eacute -20\r\nKPX y ecaron -20\r\nKPX y ecircumflex -20\r\nKPX y edieresis -20\r\nKPX y edotaccent -20\r\nKPX y egrave -20\r\nKPX y emacron -20\r\nKPX y eogonek -20\r\nKPX y o -20\r\nKPX y oacute -20\r\nKPX y ocircumflex -20\r\nKPX y odieresis -20\r\nKPX y ograve -20\r\nKPX y ohungarumlaut -20\r\nKPX y omacron -20\r\nKPX y oslash -20\r\nKPX y otilde -20\r\nKPX y period -100\r\nKPX yacute a -20\r\nKPX yacute aacute -20\r\nKPX yacute abreve -20\r\nKPX yacute acircumflex -20\r\nKPX yacute adieresis -20\r\nKPX yacute agrave -20\r\nKPX yacute amacron -20\r\nKPX yacute aogonek -20\r\nKPX yacute aring -20\r\nKPX yacute atilde -20\r\nKPX yacute comma -100\r\nKPX yacute e -20\r\nKPX yacute eacute -20\r\nKPX yacute ecaron -20\r\nKPX yacute ecircumflex -20\r\nKPX yacute edieresis -20\r\nKPX yacute edotaccent -20\r\nKPX yacute egrave -20\r\nKPX yacute emacron -20\r\nKPX yacute eogonek -20\r\nKPX yacute o -20\r\nKPX yacute oacute -20\r\nKPX yacute ocircumflex -20\r\nKPX yacute odieresis -20\r\nKPX yacute ograve -20\r\nKPX yacute ohungarumlaut -20\r\nKPX yacute omacron -20\r\nKPX yacute oslash -20\r\nKPX yacute otilde -20\r\nKPX yacute period -100\r\nKPX ydieresis a -20\r\nKPX ydieresis aacute -20\r\nKPX ydieresis abreve -20\r\nKPX ydieresis acircumflex -20\r\nKPX ydieresis adieresis -20\r\nKPX ydieresis agrave -20\r\nKPX ydieresis amacron -20\r\nKPX ydieresis aogonek -20\r\nKPX ydieresis aring -20\r\nKPX ydieresis atilde -20\r\nKPX ydieresis comma -100\r\nKPX ydieresis e -20\r\nKPX ydieresis eacute -20\r\nKPX ydieresis ecaron -20\r\nKPX ydieresis ecircumflex -20\r\nKPX ydieresis edieresis -20\r\nKPX ydieresis edotaccent -20\r\nKPX ydieresis egrave -20\r\nKPX ydieresis emacron -20\r\nKPX ydieresis eogonek -20\r\nKPX ydieresis o -20\r\nKPX ydieresis oacute -20\r\nKPX ydieresis ocircumflex -20\r\nKPX ydieresis odieresis -20\r\nKPX ydieresis ograve -20\r\nKPX ydieresis ohungarumlaut -20\r\nKPX ydieresis omacron -20\r\nKPX ydieresis oslash -20\r\nKPX ydieresis otilde -20\r\nKPX ydieresis period -100\r\nKPX z e -15\r\nKPX z eacute -15\r\nKPX z ecaron -15\r\nKPX z ecircumflex -15\r\nKPX z edieresis -15\r\nKPX z edotaccent -15\r\nKPX z egrave -15\r\nKPX z emacron -15\r\nKPX z eogonek -15\r\nKPX z o -15\r\nKPX z oacute -15\r\nKPX z ocircumflex -15\r\nKPX z odieresis -15\r\nKPX z ograve -15\r\nKPX z ohungarumlaut -15\r\nKPX z omacron -15\r\nKPX z oslash -15\r\nKPX z otilde -15\r\nKPX zacute e -15\r\nKPX zacute eacute -15\r\nKPX zacute ecaron -15\r\nKPX zacute ecircumflex -15\r\nKPX zacute edieresis -15\r\nKPX zacute edotaccent -15\r\nKPX zacute egrave -15\r\nKPX zacute emacron -15\r\nKPX zacute eogonek -15\r\nKPX zacute o -15\r\nKPX zacute oacute -15\r\nKPX zacute ocircumflex -15\r\nKPX zacute odieresis -15\r\nKPX zacute ograve -15\r\nKPX zacute ohungarumlaut -15\r\nKPX zacute omacron -15\r\nKPX zacute oslash -15\r\nKPX zacute otilde -15\r\nKPX zcaron e -15\r\nKPX zcaron eacute -15\r\nKPX zcaron ecaron -15\r\nKPX zcaron ecircumflex -15\r\nKPX zcaron edieresis -15\r\nKPX zcaron edotaccent -15\r\nKPX zcaron egrave -15\r\nKPX zcaron emacron -15\r\nKPX zcaron eogonek -15\r\nKPX zcaron o -15\r\nKPX zcaron oacute -15\r\nKPX zcaron ocircumflex -15\r\nKPX zcaron odieresis -15\r\nKPX zcaron ograve -15\r\nKPX zcaron ohungarumlaut -15\r\nKPX zcaron omacron -15\r\nKPX zcaron oslash -15\r\nKPX zcaron otilde -15\r\nKPX zdotaccent e -15\r\nKPX zdotaccent eacute -15\r\nKPX zdotaccent ecaron -15\r\nKPX zdotaccent ecircumflex -15\r\nKPX zdotaccent edieresis -15\r\nKPX zdotaccent edotaccent -15\r\nKPX zdotaccent egrave -15\r\nKPX zdotaccent emacron -15\r\nKPX zdotaccent eogonek -15\r\nKPX zdotaccent o -15\r\nKPX zdotaccent oacute -15\r\nKPX zdotaccent ocircumflex -15\r\nKPX zdotaccent odieresis -15\r\nKPX zdotaccent ograve -15\r\nKPX zdotaccent ohungarumlaut -15\r\nKPX zdotaccent omacron -15\r\nKPX zdotaccent oslash -15\r\nKPX zdotaccent otilde -15\r\nEndKernPairs\r\nEndKernData\r\nEndFontMetrics\r\n";
2490 },
2491 'Helvetica-BoldOblique'() {
2492 return "StartFontMetrics 4.1\r\nComment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 12:45:12 1997\r\nComment UniqueID 43053\r\nComment VMusage 14482 68586\r\nFontName Helvetica-BoldOblique\r\nFullName Helvetica Bold Oblique\r\nFamilyName Helvetica\r\nWeight Bold\r\nItalicAngle -12\r\nIsFixedPitch false\r\nCharacterSet ExtendedRoman\r\nFontBBox -174 -228 1114 962 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 002.000\r\nNotice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 718\r\nXHeight 532\r\nAscender 718\r\nDescender -207\r\nStdHW 118\r\nStdVW 140\r\nStartCharMetrics 315\r\nC 32 ; WX 278 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 333 ; N exclam ; B 94 0 397 718 ;\r\nC 34 ; WX 474 ; N quotedbl ; B 193 447 529 718 ;\r\nC 35 ; WX 556 ; N numbersign ; B 60 0 644 698 ;\r\nC 36 ; WX 556 ; N dollar ; B 67 -115 622 775 ;\r\nC 37 ; WX 889 ; N percent ; B 136 -19 901 710 ;\r\nC 38 ; WX 722 ; N ampersand ; B 89 -19 732 718 ;\r\nC 39 ; WX 278 ; N quoteright ; B 167 445 362 718 ;\r\nC 40 ; WX 333 ; N parenleft ; B 76 -208 470 734 ;\r\nC 41 ; WX 333 ; N parenright ; B -25 -208 369 734 ;\r\nC 42 ; WX 389 ; N asterisk ; B 146 387 481 718 ;\r\nC 43 ; WX 584 ; N plus ; B 82 0 610 506 ;\r\nC 44 ; WX 278 ; N comma ; B 28 -168 245 146 ;\r\nC 45 ; WX 333 ; N hyphen ; B 73 215 379 345 ;\r\nC 46 ; WX 278 ; N period ; B 64 0 245 146 ;\r\nC 47 ; WX 278 ; N slash ; B -37 -19 468 737 ;\r\nC 48 ; WX 556 ; N zero ; B 86 -19 617 710 ;\r\nC 49 ; WX 556 ; N one ; B 173 0 529 710 ;\r\nC 50 ; WX 556 ; N two ; B 26 0 619 710 ;\r\nC 51 ; WX 556 ; N three ; B 65 -19 608 710 ;\r\nC 52 ; WX 556 ; N four ; B 60 0 598 710 ;\r\nC 53 ; WX 556 ; N five ; B 64 -19 636 698 ;\r\nC 54 ; WX 556 ; N six ; B 85 -19 619 710 ;\r\nC 55 ; WX 556 ; N seven ; B 125 0 676 698 ;\r\nC 56 ; WX 556 ; N eight ; B 69 -19 616 710 ;\r\nC 57 ; WX 556 ; N nine ; B 78 -19 615 710 ;\r\nC 58 ; WX 333 ; N colon ; B 92 0 351 512 ;\r\nC 59 ; WX 333 ; N semicolon ; B 56 -168 351 512 ;\r\nC 60 ; WX 584 ; N less ; B 82 -8 655 514 ;\r\nC 61 ; WX 584 ; N equal ; B 58 87 633 419 ;\r\nC 62 ; WX 584 ; N greater ; B 36 -8 609 514 ;\r\nC 63 ; WX 611 ; N question ; B 165 0 671 727 ;\r\nC 64 ; WX 975 ; N at ; B 186 -19 954 737 ;\r\nC 65 ; WX 722 ; N A ; B 20 0 702 718 ;\r\nC 66 ; WX 722 ; N B ; B 76 0 764 718 ;\r\nC 67 ; WX 722 ; N C ; B 107 -19 789 737 ;\r\nC 68 ; WX 722 ; N D ; B 76 0 777 718 ;\r\nC 69 ; WX 667 ; N E ; B 76 0 757 718 ;\r\nC 70 ; WX 611 ; N F ; B 76 0 740 718 ;\r\nC 71 ; WX 778 ; N G ; B 108 -19 817 737 ;\r\nC 72 ; WX 722 ; N H ; B 71 0 804 718 ;\r\nC 73 ; WX 278 ; N I ; B 64 0 367 718 ;\r\nC 74 ; WX 556 ; N J ; B 60 -18 637 718 ;\r\nC 75 ; WX 722 ; N K ; B 87 0 858 718 ;\r\nC 76 ; WX 611 ; N L ; B 76 0 611 718 ;\r\nC 77 ; WX 833 ; N M ; B 69 0 918 718 ;\r\nC 78 ; WX 722 ; N N ; B 69 0 807 718 ;\r\nC 79 ; WX 778 ; N O ; B 107 -19 823 737 ;\r\nC 80 ; WX 667 ; N P ; B 76 0 738 718 ;\r\nC 81 ; WX 778 ; N Q ; B 107 -52 823 737 ;\r\nC 82 ; WX 722 ; N R ; B 76 0 778 718 ;\r\nC 83 ; WX 667 ; N S ; B 81 -19 718 737 ;\r\nC 84 ; WX 611 ; N T ; B 140 0 751 718 ;\r\nC 85 ; WX 722 ; N U ; B 116 -19 804 718 ;\r\nC 86 ; WX 667 ; N V ; B 172 0 801 718 ;\r\nC 87 ; WX 944 ; N W ; B 169 0 1082 718 ;\r\nC 88 ; WX 667 ; N X ; B 14 0 791 718 ;\r\nC 89 ; WX 667 ; N Y ; B 168 0 806 718 ;\r\nC 90 ; WX 611 ; N Z ; B 25 0 737 718 ;\r\nC 91 ; WX 333 ; N bracketleft ; B 21 -196 462 722 ;\r\nC 92 ; WX 278 ; N backslash ; B 124 -19 307 737 ;\r\nC 93 ; WX 333 ; N bracketright ; B -18 -196 423 722 ;\r\nC 94 ; WX 584 ; N asciicircum ; B 131 323 591 698 ;\r\nC 95 ; WX 556 ; N underscore ; B -27 -125 540 -75 ;\r\nC 96 ; WX 278 ; N quoteleft ; B 165 454 361 727 ;\r\nC 97 ; WX 556 ; N a ; B 55 -14 583 546 ;\r\nC 98 ; WX 611 ; N b ; B 61 -14 645 718 ;\r\nC 99 ; WX 556 ; N c ; B 79 -14 599 546 ;\r\nC 100 ; WX 611 ; N d ; B 82 -14 704 718 ;\r\nC 101 ; WX 556 ; N e ; B 70 -14 593 546 ;\r\nC 102 ; WX 333 ; N f ; B 87 0 469 727 ; L i fi ; L l fl ;\r\nC 103 ; WX 611 ; N g ; B 38 -217 666 546 ;\r\nC 104 ; WX 611 ; N h ; B 65 0 629 718 ;\r\nC 105 ; WX 278 ; N i ; B 69 0 363 725 ;\r\nC 106 ; WX 278 ; N j ; B -42 -214 363 725 ;\r\nC 107 ; WX 556 ; N k ; B 69 0 670 718 ;\r\nC 108 ; WX 278 ; N l ; B 69 0 362 718 ;\r\nC 109 ; WX 889 ; N m ; B 64 0 909 546 ;\r\nC 110 ; WX 611 ; N n ; B 65 0 629 546 ;\r\nC 111 ; WX 611 ; N o ; B 82 -14 643 546 ;\r\nC 112 ; WX 611 ; N p ; B 18 -207 645 546 ;\r\nC 113 ; WX 611 ; N q ; B 80 -207 665 546 ;\r\nC 114 ; WX 389 ; N r ; B 64 0 489 546 ;\r\nC 115 ; WX 556 ; N s ; B 63 -14 584 546 ;\r\nC 116 ; WX 333 ; N t ; B 100 -6 422 676 ;\r\nC 117 ; WX 611 ; N u ; B 98 -14 658 532 ;\r\nC 118 ; WX 556 ; N v ; B 126 0 656 532 ;\r\nC 119 ; WX 778 ; N w ; B 123 0 882 532 ;\r\nC 120 ; WX 556 ; N x ; B 15 0 648 532 ;\r\nC 121 ; WX 556 ; N y ; B 42 -214 652 532 ;\r\nC 122 ; WX 500 ; N z ; B 20 0 583 532 ;\r\nC 123 ; WX 389 ; N braceleft ; B 94 -196 518 722 ;\r\nC 124 ; WX 280 ; N bar ; B 36 -225 361 775 ;\r\nC 125 ; WX 389 ; N braceright ; B -18 -196 407 722 ;\r\nC 126 ; WX 584 ; N asciitilde ; B 115 163 577 343 ;\r\nC 161 ; WX 333 ; N exclamdown ; B 50 -186 353 532 ;\r\nC 162 ; WX 556 ; N cent ; B 79 -118 599 628 ;\r\nC 163 ; WX 556 ; N sterling ; B 50 -16 635 718 ;\r\nC 164 ; WX 167 ; N fraction ; B -174 -19 487 710 ;\r\nC 165 ; WX 556 ; N yen ; B 60 0 713 698 ;\r\nC 166 ; WX 556 ; N florin ; B -50 -210 669 737 ;\r\nC 167 ; WX 556 ; N section ; B 61 -184 598 727 ;\r\nC 168 ; WX 556 ; N currency ; B 27 76 680 636 ;\r\nC 169 ; WX 238 ; N quotesingle ; B 165 447 321 718 ;\r\nC 170 ; WX 500 ; N quotedblleft ; B 160 454 588 727 ;\r\nC 171 ; WX 556 ; N guillemotleft ; B 135 76 571 484 ;\r\nC 172 ; WX 333 ; N guilsinglleft ; B 130 76 353 484 ;\r\nC 173 ; WX 333 ; N guilsinglright ; B 99 76 322 484 ;\r\nC 174 ; WX 611 ; N fi ; B 87 0 696 727 ;\r\nC 175 ; WX 611 ; N fl ; B 87 0 695 727 ;\r\nC 177 ; WX 556 ; N endash ; B 48 227 627 333 ;\r\nC 178 ; WX 556 ; N dagger ; B 118 -171 626 718 ;\r\nC 179 ; WX 556 ; N daggerdbl ; B 46 -171 628 718 ;\r\nC 180 ; WX 278 ; N periodcentered ; B 110 172 276 334 ;\r\nC 182 ; WX 556 ; N paragraph ; B 98 -191 688 700 ;\r\nC 183 ; WX 350 ; N bullet ; B 83 194 420 524 ;\r\nC 184 ; WX 278 ; N quotesinglbase ; B 41 -146 236 127 ;\r\nC 185 ; WX 500 ; N quotedblbase ; B 36 -146 463 127 ;\r\nC 186 ; WX 500 ; N quotedblright ; B 162 445 589 718 ;\r\nC 187 ; WX 556 ; N guillemotright ; B 104 76 540 484 ;\r\nC 188 ; WX 1000 ; N ellipsis ; B 92 0 939 146 ;\r\nC 189 ; WX 1000 ; N perthousand ; B 76 -19 1038 710 ;\r\nC 191 ; WX 611 ; N questiondown ; B 53 -195 559 532 ;\r\nC 193 ; WX 333 ; N grave ; B 136 604 353 750 ;\r\nC 194 ; WX 333 ; N acute ; B 236 604 515 750 ;\r\nC 195 ; WX 333 ; N circumflex ; B 118 604 471 750 ;\r\nC 196 ; WX 333 ; N tilde ; B 113 610 507 737 ;\r\nC 197 ; WX 333 ; N macron ; B 122 604 483 678 ;\r\nC 198 ; WX 333 ; N breve ; B 156 604 494 750 ;\r\nC 199 ; WX 333 ; N dotaccent ; B 235 614 385 729 ;\r\nC 200 ; WX 333 ; N dieresis ; B 137 614 482 729 ;\r\nC 202 ; WX 333 ; N ring ; B 200 568 420 776 ;\r\nC 203 ; WX 333 ; N cedilla ; B -37 -228 220 0 ;\r\nC 205 ; WX 333 ; N hungarumlaut ; B 137 604 645 750 ;\r\nC 206 ; WX 333 ; N ogonek ; B 41 -228 264 0 ;\r\nC 207 ; WX 333 ; N caron ; B 149 604 502 750 ;\r\nC 208 ; WX 1000 ; N emdash ; B 48 227 1071 333 ;\r\nC 225 ; WX 1000 ; N AE ; B 5 0 1100 718 ;\r\nC 227 ; WX 370 ; N ordfeminine ; B 125 401 465 737 ;\r\nC 232 ; WX 611 ; N Lslash ; B 34 0 611 718 ;\r\nC 233 ; WX 778 ; N Oslash ; B 35 -27 894 745 ;\r\nC 234 ; WX 1000 ; N OE ; B 99 -19 1114 737 ;\r\nC 235 ; WX 365 ; N ordmasculine ; B 123 401 485 737 ;\r\nC 241 ; WX 889 ; N ae ; B 56 -14 923 546 ;\r\nC 245 ; WX 278 ; N dotlessi ; B 69 0 322 532 ;\r\nC 248 ; WX 278 ; N lslash ; B 40 0 407 718 ;\r\nC 249 ; WX 611 ; N oslash ; B 22 -29 701 560 ;\r\nC 250 ; WX 944 ; N oe ; B 82 -14 977 546 ;\r\nC 251 ; WX 611 ; N germandbls ; B 69 -14 657 731 ;\r\nC -1 ; WX 278 ; N Idieresis ; B 64 0 494 915 ;\r\nC -1 ; WX 556 ; N eacute ; B 70 -14 627 750 ;\r\nC -1 ; WX 556 ; N abreve ; B 55 -14 606 750 ;\r\nC -1 ; WX 611 ; N uhungarumlaut ; B 98 -14 784 750 ;\r\nC -1 ; WX 556 ; N ecaron ; B 70 -14 614 750 ;\r\nC -1 ; WX 667 ; N Ydieresis ; B 168 0 806 915 ;\r\nC -1 ; WX 584 ; N divide ; B 82 -42 610 548 ;\r\nC -1 ; WX 667 ; N Yacute ; B 168 0 806 936 ;\r\nC -1 ; WX 722 ; N Acircumflex ; B 20 0 706 936 ;\r\nC -1 ; WX 556 ; N aacute ; B 55 -14 627 750 ;\r\nC -1 ; WX 722 ; N Ucircumflex ; B 116 -19 804 936 ;\r\nC -1 ; WX 556 ; N yacute ; B 42 -214 652 750 ;\r\nC -1 ; WX 556 ; N scommaaccent ; B 63 -228 584 546 ;\r\nC -1 ; WX 556 ; N ecircumflex ; B 70 -14 593 750 ;\r\nC -1 ; WX 722 ; N Uring ; B 116 -19 804 962 ;\r\nC -1 ; WX 722 ; N Udieresis ; B 116 -19 804 915 ;\r\nC -1 ; WX 556 ; N aogonek ; B 55 -224 583 546 ;\r\nC -1 ; WX 722 ; N Uacute ; B 116 -19 804 936 ;\r\nC -1 ; WX 611 ; N uogonek ; B 98 -228 658 532 ;\r\nC -1 ; WX 667 ; N Edieresis ; B 76 0 757 915 ;\r\nC -1 ; WX 722 ; N Dcroat ; B 62 0 777 718 ;\r\nC -1 ; WX 250 ; N commaaccent ; B 16 -228 188 -50 ;\r\nC -1 ; WX 737 ; N copyright ; B 56 -19 835 737 ;\r\nC -1 ; WX 667 ; N Emacron ; B 76 0 757 864 ;\r\nC -1 ; WX 556 ; N ccaron ; B 79 -14 614 750 ;\r\nC -1 ; WX 556 ; N aring ; B 55 -14 583 776 ;\r\nC -1 ; WX 722 ; N Ncommaaccent ; B 69 -228 807 718 ;\r\nC -1 ; WX 278 ; N lacute ; B 69 0 528 936 ;\r\nC -1 ; WX 556 ; N agrave ; B 55 -14 583 750 ;\r\nC -1 ; WX 611 ; N Tcommaaccent ; B 140 -228 751 718 ;\r\nC -1 ; WX 722 ; N Cacute ; B 107 -19 789 936 ;\r\nC -1 ; WX 556 ; N atilde ; B 55 -14 619 737 ;\r\nC -1 ; WX 667 ; N Edotaccent ; B 76 0 757 915 ;\r\nC -1 ; WX 556 ; N scaron ; B 63 -14 614 750 ;\r\nC -1 ; WX 556 ; N scedilla ; B 63 -228 584 546 ;\r\nC -1 ; WX 278 ; N iacute ; B 69 0 488 750 ;\r\nC -1 ; WX 494 ; N lozenge ; B 90 0 564 745 ;\r\nC -1 ; WX 722 ; N Rcaron ; B 76 0 778 936 ;\r\nC -1 ; WX 778 ; N Gcommaaccent ; B 108 -228 817 737 ;\r\nC -1 ; WX 611 ; N ucircumflex ; B 98 -14 658 750 ;\r\nC -1 ; WX 556 ; N acircumflex ; B 55 -14 583 750 ;\r\nC -1 ; WX 722 ; N Amacron ; B 20 0 718 864 ;\r\nC -1 ; WX 389 ; N rcaron ; B 64 0 530 750 ;\r\nC -1 ; WX 556 ; N ccedilla ; B 79 -228 599 546 ;\r\nC -1 ; WX 611 ; N Zdotaccent ; B 25 0 737 915 ;\r\nC -1 ; WX 667 ; N Thorn ; B 76 0 716 718 ;\r\nC -1 ; WX 778 ; N Omacron ; B 107 -19 823 864 ;\r\nC -1 ; WX 722 ; N Racute ; B 76 0 778 936 ;\r\nC -1 ; WX 667 ; N Sacute ; B 81 -19 722 936 ;\r\nC -1 ; WX 743 ; N dcaron ; B 82 -14 903 718 ;\r\nC -1 ; WX 722 ; N Umacron ; B 116 -19 804 864 ;\r\nC -1 ; WX 611 ; N uring ; B 98 -14 658 776 ;\r\nC -1 ; WX 333 ; N threesuperior ; B 91 271 441 710 ;\r\nC -1 ; WX 778 ; N Ograve ; B 107 -19 823 936 ;\r\nC -1 ; WX 722 ; N Agrave ; B 20 0 702 936 ;\r\nC -1 ; WX 722 ; N Abreve ; B 20 0 729 936 ;\r\nC -1 ; WX 584 ; N multiply ; B 57 1 635 505 ;\r\nC -1 ; WX 611 ; N uacute ; B 98 -14 658 750 ;\r\nC -1 ; WX 611 ; N Tcaron ; B 140 0 751 936 ;\r\nC -1 ; WX 494 ; N partialdiff ; B 43 -21 585 750 ;\r\nC -1 ; WX 556 ; N ydieresis ; B 42 -214 652 729 ;\r\nC -1 ; WX 722 ; N Nacute ; B 69 0 807 936 ;\r\nC -1 ; WX 278 ; N icircumflex ; B 69 0 444 750 ;\r\nC -1 ; WX 667 ; N Ecircumflex ; B 76 0 757 936 ;\r\nC -1 ; WX 556 ; N adieresis ; B 55 -14 594 729 ;\r\nC -1 ; WX 556 ; N edieresis ; B 70 -14 594 729 ;\r\nC -1 ; WX 556 ; N cacute ; B 79 -14 627 750 ;\r\nC -1 ; WX 611 ; N nacute ; B 65 0 654 750 ;\r\nC -1 ; WX 611 ; N umacron ; B 98 -14 658 678 ;\r\nC -1 ; WX 722 ; N Ncaron ; B 69 0 807 936 ;\r\nC -1 ; WX 278 ; N Iacute ; B 64 0 528 936 ;\r\nC -1 ; WX 584 ; N plusminus ; B 40 0 625 506 ;\r\nC -1 ; WX 280 ; N brokenbar ; B 52 -150 345 700 ;\r\nC -1 ; WX 737 ; N registered ; B 55 -19 834 737 ;\r\nC -1 ; WX 778 ; N Gbreve ; B 108 -19 817 936 ;\r\nC -1 ; WX 278 ; N Idotaccent ; B 64 0 397 915 ;\r\nC -1 ; WX 600 ; N summation ; B 14 -10 670 706 ;\r\nC -1 ; WX 667 ; N Egrave ; B 76 0 757 936 ;\r\nC -1 ; WX 389 ; N racute ; B 64 0 543 750 ;\r\nC -1 ; WX 611 ; N omacron ; B 82 -14 643 678 ;\r\nC -1 ; WX 611 ; N Zacute ; B 25 0 737 936 ;\r\nC -1 ; WX 611 ; N Zcaron ; B 25 0 737 936 ;\r\nC -1 ; WX 549 ; N greaterequal ; B 26 0 629 704 ;\r\nC -1 ; WX 722 ; N Eth ; B 62 0 777 718 ;\r\nC -1 ; WX 722 ; N Ccedilla ; B 107 -228 789 737 ;\r\nC -1 ; WX 278 ; N lcommaaccent ; B 30 -228 362 718 ;\r\nC -1 ; WX 389 ; N tcaron ; B 100 -6 608 878 ;\r\nC -1 ; WX 556 ; N eogonek ; B 70 -228 593 546 ;\r\nC -1 ; WX 722 ; N Uogonek ; B 116 -228 804 718 ;\r\nC -1 ; WX 722 ; N Aacute ; B 20 0 750 936 ;\r\nC -1 ; WX 722 ; N Adieresis ; B 20 0 716 915 ;\r\nC -1 ; WX 556 ; N egrave ; B 70 -14 593 750 ;\r\nC -1 ; WX 500 ; N zacute ; B 20 0 599 750 ;\r\nC -1 ; WX 278 ; N iogonek ; B -14 -224 363 725 ;\r\nC -1 ; WX 778 ; N Oacute ; B 107 -19 823 936 ;\r\nC -1 ; WX 611 ; N oacute ; B 82 -14 654 750 ;\r\nC -1 ; WX 556 ; N amacron ; B 55 -14 595 678 ;\r\nC -1 ; WX 556 ; N sacute ; B 63 -14 627 750 ;\r\nC -1 ; WX 278 ; N idieresis ; B 69 0 455 729 ;\r\nC -1 ; WX 778 ; N Ocircumflex ; B 107 -19 823 936 ;\r\nC -1 ; WX 722 ; N Ugrave ; B 116 -19 804 936 ;\r\nC -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;\r\nC -1 ; WX 611 ; N thorn ; B 18 -208 645 718 ;\r\nC -1 ; WX 333 ; N twosuperior ; B 69 283 449 710 ;\r\nC -1 ; WX 778 ; N Odieresis ; B 107 -19 823 915 ;\r\nC -1 ; WX 611 ; N mu ; B 22 -207 658 532 ;\r\nC -1 ; WX 278 ; N igrave ; B 69 0 326 750 ;\r\nC -1 ; WX 611 ; N ohungarumlaut ; B 82 -14 784 750 ;\r\nC -1 ; WX 667 ; N Eogonek ; B 76 -224 757 718 ;\r\nC -1 ; WX 611 ; N dcroat ; B 82 -14 789 718 ;\r\nC -1 ; WX 834 ; N threequarters ; B 99 -19 839 710 ;\r\nC -1 ; WX 667 ; N Scedilla ; B 81 -228 718 737 ;\r\nC -1 ; WX 400 ; N lcaron ; B 69 0 561 718 ;\r\nC -1 ; WX 722 ; N Kcommaaccent ; B 87 -228 858 718 ;\r\nC -1 ; WX 611 ; N Lacute ; B 76 0 611 936 ;\r\nC -1 ; WX 1000 ; N trademark ; B 179 306 1109 718 ;\r\nC -1 ; WX 556 ; N edotaccent ; B 70 -14 593 729 ;\r\nC -1 ; WX 278 ; N Igrave ; B 64 0 367 936 ;\r\nC -1 ; WX 278 ; N Imacron ; B 64 0 496 864 ;\r\nC -1 ; WX 611 ; N Lcaron ; B 76 0 643 718 ;\r\nC -1 ; WX 834 ; N onehalf ; B 132 -19 858 710 ;\r\nC -1 ; WX 549 ; N lessequal ; B 29 0 676 704 ;\r\nC -1 ; WX 611 ; N ocircumflex ; B 82 -14 643 750 ;\r\nC -1 ; WX 611 ; N ntilde ; B 65 0 646 737 ;\r\nC -1 ; WX 722 ; N Uhungarumlaut ; B 116 -19 880 936 ;\r\nC -1 ; WX 667 ; N Eacute ; B 76 0 757 936 ;\r\nC -1 ; WX 556 ; N emacron ; B 70 -14 595 678 ;\r\nC -1 ; WX 611 ; N gbreve ; B 38 -217 666 750 ;\r\nC -1 ; WX 834 ; N onequarter ; B 132 -19 806 710 ;\r\nC -1 ; WX 667 ; N Scaron ; B 81 -19 718 936 ;\r\nC -1 ; WX 667 ; N Scommaaccent ; B 81 -228 718 737 ;\r\nC -1 ; WX 778 ; N Ohungarumlaut ; B 107 -19 908 936 ;\r\nC -1 ; WX 400 ; N degree ; B 175 426 467 712 ;\r\nC -1 ; WX 611 ; N ograve ; B 82 -14 643 750 ;\r\nC -1 ; WX 722 ; N Ccaron ; B 107 -19 789 936 ;\r\nC -1 ; WX 611 ; N ugrave ; B 98 -14 658 750 ;\r\nC -1 ; WX 549 ; N radical ; B 112 -46 689 850 ;\r\nC -1 ; WX 722 ; N Dcaron ; B 76 0 777 936 ;\r\nC -1 ; WX 389 ; N rcommaaccent ; B 26 -228 489 546 ;\r\nC -1 ; WX 722 ; N Ntilde ; B 69 0 807 923 ;\r\nC -1 ; WX 611 ; N otilde ; B 82 -14 646 737 ;\r\nC -1 ; WX 722 ; N Rcommaaccent ; B 76 -228 778 718 ;\r\nC -1 ; WX 611 ; N Lcommaaccent ; B 76 -228 611 718 ;\r\nC -1 ; WX 722 ; N Atilde ; B 20 0 741 923 ;\r\nC -1 ; WX 722 ; N Aogonek ; B 20 -224 702 718 ;\r\nC -1 ; WX 722 ; N Aring ; B 20 0 702 962 ;\r\nC -1 ; WX 778 ; N Otilde ; B 107 -19 823 923 ;\r\nC -1 ; WX 500 ; N zdotaccent ; B 20 0 583 729 ;\r\nC -1 ; WX 667 ; N Ecaron ; B 76 0 757 936 ;\r\nC -1 ; WX 278 ; N Iogonek ; B -41 -228 367 718 ;\r\nC -1 ; WX 556 ; N kcommaaccent ; B 69 -228 670 718 ;\r\nC -1 ; WX 584 ; N minus ; B 82 197 610 309 ;\r\nC -1 ; WX 278 ; N Icircumflex ; B 64 0 484 936 ;\r\nC -1 ; WX 611 ; N ncaron ; B 65 0 641 750 ;\r\nC -1 ; WX 333 ; N tcommaaccent ; B 58 -228 422 676 ;\r\nC -1 ; WX 584 ; N logicalnot ; B 105 108 633 419 ;\r\nC -1 ; WX 611 ; N odieresis ; B 82 -14 643 729 ;\r\nC -1 ; WX 611 ; N udieresis ; B 98 -14 658 729 ;\r\nC -1 ; WX 549 ; N notequal ; B 32 -49 630 570 ;\r\nC -1 ; WX 611 ; N gcommaaccent ; B 38 -217 666 850 ;\r\nC -1 ; WX 611 ; N eth ; B 82 -14 670 737 ;\r\nC -1 ; WX 500 ; N zcaron ; B 20 0 586 750 ;\r\nC -1 ; WX 611 ; N ncommaaccent ; B 65 -228 629 546 ;\r\nC -1 ; WX 333 ; N onesuperior ; B 148 283 388 710 ;\r\nC -1 ; WX 278 ; N imacron ; B 69 0 429 678 ;\r\nC -1 ; WX 556 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nStartKernData\r\nStartKernPairs 2481\r\nKPX A C -40\r\nKPX A Cacute -40\r\nKPX A Ccaron -40\r\nKPX A Ccedilla -40\r\nKPX A G -50\r\nKPX A Gbreve -50\r\nKPX A Gcommaaccent -50\r\nKPX A O -40\r\nKPX A Oacute -40\r\nKPX A Ocircumflex -40\r\nKPX A Odieresis -40\r\nKPX A Ograve -40\r\nKPX A Ohungarumlaut -40\r\nKPX A Omacron -40\r\nKPX A Oslash -40\r\nKPX A Otilde -40\r\nKPX A Q -40\r\nKPX A T -90\r\nKPX A Tcaron -90\r\nKPX A Tcommaaccent -90\r\nKPX A U -50\r\nKPX A Uacute -50\r\nKPX A Ucircumflex -50\r\nKPX A Udieresis -50\r\nKPX A Ugrave -50\r\nKPX A Uhungarumlaut -50\r\nKPX A Umacron -50\r\nKPX A Uogonek -50\r\nKPX A Uring -50\r\nKPX A V -80\r\nKPX A W -60\r\nKPX A Y -110\r\nKPX A Yacute -110\r\nKPX A Ydieresis -110\r\nKPX A u -30\r\nKPX A uacute -30\r\nKPX A ucircumflex -30\r\nKPX A udieresis -30\r\nKPX A ugrave -30\r\nKPX A uhungarumlaut -30\r\nKPX A umacron -30\r\nKPX A uogonek -30\r\nKPX A uring -30\r\nKPX A v -40\r\nKPX A w -30\r\nKPX A y -30\r\nKPX A yacute -30\r\nKPX A ydieresis -30\r\nKPX Aacute C -40\r\nKPX Aacute Cacute -40\r\nKPX Aacute Ccaron -40\r\nKPX Aacute Ccedilla -40\r\nKPX Aacute G -50\r\nKPX Aacute Gbreve -50\r\nKPX Aacute Gcommaaccent -50\r\nKPX Aacute O -40\r\nKPX Aacute Oacute -40\r\nKPX Aacute Ocircumflex -40\r\nKPX Aacute Odieresis -40\r\nKPX Aacute Ograve -40\r\nKPX Aacute Ohungarumlaut -40\r\nKPX Aacute Omacron -40\r\nKPX Aacute Oslash -40\r\nKPX Aacute Otilde -40\r\nKPX Aacute Q -40\r\nKPX Aacute T -90\r\nKPX Aacute Tcaron -90\r\nKPX Aacute Tcommaaccent -90\r\nKPX Aacute U -50\r\nKPX Aacute Uacute -50\r\nKPX Aacute Ucircumflex -50\r\nKPX Aacute Udieresis -50\r\nKPX Aacute Ugrave -50\r\nKPX Aacute Uhungarumlaut -50\r\nKPX Aacute Umacron -50\r\nKPX Aacute Uogonek -50\r\nKPX Aacute Uring -50\r\nKPX Aacute V -80\r\nKPX Aacute W -60\r\nKPX Aacute Y -110\r\nKPX Aacute Yacute -110\r\nKPX Aacute Ydieresis -110\r\nKPX Aacute u -30\r\nKPX Aacute uacute -30\r\nKPX Aacute ucircumflex -30\r\nKPX Aacute udieresis -30\r\nKPX Aacute ugrave -30\r\nKPX Aacute uhungarumlaut -30\r\nKPX Aacute umacron -30\r\nKPX Aacute uogonek -30\r\nKPX Aacute uring -30\r\nKPX Aacute v -40\r\nKPX Aacute w -30\r\nKPX Aacute y -30\r\nKPX Aacute yacute -30\r\nKPX Aacute ydieresis -30\r\nKPX Abreve C -40\r\nKPX Abreve Cacute -40\r\nKPX Abreve Ccaron -40\r\nKPX Abreve Ccedilla -40\r\nKPX Abreve G -50\r\nKPX Abreve Gbreve -50\r\nKPX Abreve Gcommaaccent -50\r\nKPX Abreve O -40\r\nKPX Abreve Oacute -40\r\nKPX Abreve Ocircumflex -40\r\nKPX Abreve Odieresis -40\r\nKPX Abreve Ograve -40\r\nKPX Abreve Ohungarumlaut -40\r\nKPX Abreve Omacron -40\r\nKPX Abreve Oslash -40\r\nKPX Abreve Otilde -40\r\nKPX Abreve Q -40\r\nKPX Abreve T -90\r\nKPX Abreve Tcaron -90\r\nKPX Abreve Tcommaaccent -90\r\nKPX Abreve U -50\r\nKPX Abreve Uacute -50\r\nKPX Abreve Ucircumflex -50\r\nKPX Abreve Udieresis -50\r\nKPX Abreve Ugrave -50\r\nKPX Abreve Uhungarumlaut -50\r\nKPX Abreve Umacron -50\r\nKPX Abreve Uogonek -50\r\nKPX Abreve Uring -50\r\nKPX Abreve V -80\r\nKPX Abreve W -60\r\nKPX Abreve Y -110\r\nKPX Abreve Yacute -110\r\nKPX Abreve Ydieresis -110\r\nKPX Abreve u -30\r\nKPX Abreve uacute -30\r\nKPX Abreve ucircumflex -30\r\nKPX Abreve udieresis -30\r\nKPX Abreve ugrave -30\r\nKPX Abreve uhungarumlaut -30\r\nKPX Abreve umacron -30\r\nKPX Abreve uogonek -30\r\nKPX Abreve uring -30\r\nKPX Abreve v -40\r\nKPX Abreve w -30\r\nKPX Abreve y -30\r\nKPX Abreve yacute -30\r\nKPX Abreve ydieresis -30\r\nKPX Acircumflex C -40\r\nKPX Acircumflex Cacute -40\r\nKPX Acircumflex Ccaron -40\r\nKPX Acircumflex Ccedilla -40\r\nKPX Acircumflex G -50\r\nKPX Acircumflex Gbreve -50\r\nKPX Acircumflex Gcommaaccent -50\r\nKPX Acircumflex O -40\r\nKPX Acircumflex Oacute -40\r\nKPX Acircumflex Ocircumflex -40\r\nKPX Acircumflex Odieresis -40\r\nKPX Acircumflex Ograve -40\r\nKPX Acircumflex Ohungarumlaut -40\r\nKPX Acircumflex Omacron -40\r\nKPX Acircumflex Oslash -40\r\nKPX Acircumflex Otilde -40\r\nKPX Acircumflex Q -40\r\nKPX Acircumflex T -90\r\nKPX Acircumflex Tcaron -90\r\nKPX Acircumflex Tcommaaccent -90\r\nKPX Acircumflex U -50\r\nKPX Acircumflex Uacute -50\r\nKPX Acircumflex Ucircumflex -50\r\nKPX Acircumflex Udieresis -50\r\nKPX Acircumflex Ugrave -50\r\nKPX Acircumflex Uhungarumlaut -50\r\nKPX Acircumflex Umacron -50\r\nKPX Acircumflex Uogonek -50\r\nKPX Acircumflex Uring -50\r\nKPX Acircumflex V -80\r\nKPX Acircumflex W -60\r\nKPX Acircumflex Y -110\r\nKPX Acircumflex Yacute -110\r\nKPX Acircumflex Ydieresis -110\r\nKPX Acircumflex u -30\r\nKPX Acircumflex uacute -30\r\nKPX Acircumflex ucircumflex -30\r\nKPX Acircumflex udieresis -30\r\nKPX Acircumflex ugrave -30\r\nKPX Acircumflex uhungarumlaut -30\r\nKPX Acircumflex umacron -30\r\nKPX Acircumflex uogonek -30\r\nKPX Acircumflex uring -30\r\nKPX Acircumflex v -40\r\nKPX Acircumflex w -30\r\nKPX Acircumflex y -30\r\nKPX Acircumflex yacute -30\r\nKPX Acircumflex ydieresis -30\r\nKPX Adieresis C -40\r\nKPX Adieresis Cacute -40\r\nKPX Adieresis Ccaron -40\r\nKPX Adieresis Ccedilla -40\r\nKPX Adieresis G -50\r\nKPX Adieresis Gbreve -50\r\nKPX Adieresis Gcommaaccent -50\r\nKPX Adieresis O -40\r\nKPX Adieresis Oacute -40\r\nKPX Adieresis Ocircumflex -40\r\nKPX Adieresis Odieresis -40\r\nKPX Adieresis Ograve -40\r\nKPX Adieresis Ohungarumlaut -40\r\nKPX Adieresis Omacron -40\r\nKPX Adieresis Oslash -40\r\nKPX Adieresis Otilde -40\r\nKPX Adieresis Q -40\r\nKPX Adieresis T -90\r\nKPX Adieresis Tcaron -90\r\nKPX Adieresis Tcommaaccent -90\r\nKPX Adieresis U -50\r\nKPX Adieresis Uacute -50\r\nKPX Adieresis Ucircumflex -50\r\nKPX Adieresis Udieresis -50\r\nKPX Adieresis Ugrave -50\r\nKPX Adieresis Uhungarumlaut -50\r\nKPX Adieresis Umacron -50\r\nKPX Adieresis Uogonek -50\r\nKPX Adieresis Uring -50\r\nKPX Adieresis V -80\r\nKPX Adieresis W -60\r\nKPX Adieresis Y -110\r\nKPX Adieresis Yacute -110\r\nKPX Adieresis Ydieresis -110\r\nKPX Adieresis u -30\r\nKPX Adieresis uacute -30\r\nKPX Adieresis ucircumflex -30\r\nKPX Adieresis udieresis -30\r\nKPX Adieresis ugrave -30\r\nKPX Adieresis uhungarumlaut -30\r\nKPX Adieresis umacron -30\r\nKPX Adieresis uogonek -30\r\nKPX Adieresis uring -30\r\nKPX Adieresis v -40\r\nKPX Adieresis w -30\r\nKPX Adieresis y -30\r\nKPX Adieresis yacute -30\r\nKPX Adieresis ydieresis -30\r\nKPX Agrave C -40\r\nKPX Agrave Cacute -40\r\nKPX Agrave Ccaron -40\r\nKPX Agrave Ccedilla -40\r\nKPX Agrave G -50\r\nKPX Agrave Gbreve -50\r\nKPX Agrave Gcommaaccent -50\r\nKPX Agrave O -40\r\nKPX Agrave Oacute -40\r\nKPX Agrave Ocircumflex -40\r\nKPX Agrave Odieresis -40\r\nKPX Agrave Ograve -40\r\nKPX Agrave Ohungarumlaut -40\r\nKPX Agrave Omacron -40\r\nKPX Agrave Oslash -40\r\nKPX Agrave Otilde -40\r\nKPX Agrave Q -40\r\nKPX Agrave T -90\r\nKPX Agrave Tcaron -90\r\nKPX Agrave Tcommaaccent -90\r\nKPX Agrave U -50\r\nKPX Agrave Uacute -50\r\nKPX Agrave Ucircumflex -50\r\nKPX Agrave Udieresis -50\r\nKPX Agrave Ugrave -50\r\nKPX Agrave Uhungarumlaut -50\r\nKPX Agrave Umacron -50\r\nKPX Agrave Uogonek -50\r\nKPX Agrave Uring -50\r\nKPX Agrave V -80\r\nKPX Agrave W -60\r\nKPX Agrave Y -110\r\nKPX Agrave Yacute -110\r\nKPX Agrave Ydieresis -110\r\nKPX Agrave u -30\r\nKPX Agrave uacute -30\r\nKPX Agrave ucircumflex -30\r\nKPX Agrave udieresis -30\r\nKPX Agrave ugrave -30\r\nKPX Agrave uhungarumlaut -30\r\nKPX Agrave umacron -30\r\nKPX Agrave uogonek -30\r\nKPX Agrave uring -30\r\nKPX Agrave v -40\r\nKPX Agrave w -30\r\nKPX Agrave y -30\r\nKPX Agrave yacute -30\r\nKPX Agrave ydieresis -30\r\nKPX Amacron C -40\r\nKPX Amacron Cacute -40\r\nKPX Amacron Ccaron -40\r\nKPX Amacron Ccedilla -40\r\nKPX Amacron G -50\r\nKPX Amacron Gbreve -50\r\nKPX Amacron Gcommaaccent -50\r\nKPX Amacron O -40\r\nKPX Amacron Oacute -40\r\nKPX Amacron Ocircumflex -40\r\nKPX Amacron Odieresis -40\r\nKPX Amacron Ograve -40\r\nKPX Amacron Ohungarumlaut -40\r\nKPX Amacron Omacron -40\r\nKPX Amacron Oslash -40\r\nKPX Amacron Otilde -40\r\nKPX Amacron Q -40\r\nKPX Amacron T -90\r\nKPX Amacron Tcaron -90\r\nKPX Amacron Tcommaaccent -90\r\nKPX Amacron U -50\r\nKPX Amacron Uacute -50\r\nKPX Amacron Ucircumflex -50\r\nKPX Amacron Udieresis -50\r\nKPX Amacron Ugrave -50\r\nKPX Amacron Uhungarumlaut -50\r\nKPX Amacron Umacron -50\r\nKPX Amacron Uogonek -50\r\nKPX Amacron Uring -50\r\nKPX Amacron V -80\r\nKPX Amacron W -60\r\nKPX Amacron Y -110\r\nKPX Amacron Yacute -110\r\nKPX Amacron Ydieresis -110\r\nKPX Amacron u -30\r\nKPX Amacron uacute -30\r\nKPX Amacron ucircumflex -30\r\nKPX Amacron udieresis -30\r\nKPX Amacron ugrave -30\r\nKPX Amacron uhungarumlaut -30\r\nKPX Amacron umacron -30\r\nKPX Amacron uogonek -30\r\nKPX Amacron uring -30\r\nKPX Amacron v -40\r\nKPX Amacron w -30\r\nKPX Amacron y -30\r\nKPX Amacron yacute -30\r\nKPX Amacron ydieresis -30\r\nKPX Aogonek C -40\r\nKPX Aogonek Cacute -40\r\nKPX Aogonek Ccaron -40\r\nKPX Aogonek Ccedilla -40\r\nKPX Aogonek G -50\r\nKPX Aogonek Gbreve -50\r\nKPX Aogonek Gcommaaccent -50\r\nKPX Aogonek O -40\r\nKPX Aogonek Oacute -40\r\nKPX Aogonek Ocircumflex -40\r\nKPX Aogonek Odieresis -40\r\nKPX Aogonek Ograve -40\r\nKPX Aogonek Ohungarumlaut -40\r\nKPX Aogonek Omacron -40\r\nKPX Aogonek Oslash -40\r\nKPX Aogonek Otilde -40\r\nKPX Aogonek Q -40\r\nKPX Aogonek T -90\r\nKPX Aogonek Tcaron -90\r\nKPX Aogonek Tcommaaccent -90\r\nKPX Aogonek U -50\r\nKPX Aogonek Uacute -50\r\nKPX Aogonek Ucircumflex -50\r\nKPX Aogonek Udieresis -50\r\nKPX Aogonek Ugrave -50\r\nKPX Aogonek Uhungarumlaut -50\r\nKPX Aogonek Umacron -50\r\nKPX Aogonek Uogonek -50\r\nKPX Aogonek Uring -50\r\nKPX Aogonek V -80\r\nKPX Aogonek W -60\r\nKPX Aogonek Y -110\r\nKPX Aogonek Yacute -110\r\nKPX Aogonek Ydieresis -110\r\nKPX Aogonek u -30\r\nKPX Aogonek uacute -30\r\nKPX Aogonek ucircumflex -30\r\nKPX Aogonek udieresis -30\r\nKPX Aogonek ugrave -30\r\nKPX Aogonek uhungarumlaut -30\r\nKPX Aogonek umacron -30\r\nKPX Aogonek uogonek -30\r\nKPX Aogonek uring -30\r\nKPX Aogonek v -40\r\nKPX Aogonek w -30\r\nKPX Aogonek y -30\r\nKPX Aogonek yacute -30\r\nKPX Aogonek ydieresis -30\r\nKPX Aring C -40\r\nKPX Aring Cacute -40\r\nKPX Aring Ccaron -40\r\nKPX Aring Ccedilla -40\r\nKPX Aring G -50\r\nKPX Aring Gbreve -50\r\nKPX Aring Gcommaaccent -50\r\nKPX Aring O -40\r\nKPX Aring Oacute -40\r\nKPX Aring Ocircumflex -40\r\nKPX Aring Odieresis -40\r\nKPX Aring Ograve -40\r\nKPX Aring Ohungarumlaut -40\r\nKPX Aring Omacron -40\r\nKPX Aring Oslash -40\r\nKPX Aring Otilde -40\r\nKPX Aring Q -40\r\nKPX Aring T -90\r\nKPX Aring Tcaron -90\r\nKPX Aring Tcommaaccent -90\r\nKPX Aring U -50\r\nKPX Aring Uacute -50\r\nKPX Aring Ucircumflex -50\r\nKPX Aring Udieresis -50\r\nKPX Aring Ugrave -50\r\nKPX Aring Uhungarumlaut -50\r\nKPX Aring Umacron -50\r\nKPX Aring Uogonek -50\r\nKPX Aring Uring -50\r\nKPX Aring V -80\r\nKPX Aring W -60\r\nKPX Aring Y -110\r\nKPX Aring Yacute -110\r\nKPX Aring Ydieresis -110\r\nKPX Aring u -30\r\nKPX Aring uacute -30\r\nKPX Aring ucircumflex -30\r\nKPX Aring udieresis -30\r\nKPX Aring ugrave -30\r\nKPX Aring uhungarumlaut -30\r\nKPX Aring umacron -30\r\nKPX Aring uogonek -30\r\nKPX Aring uring -30\r\nKPX Aring v -40\r\nKPX Aring w -30\r\nKPX Aring y -30\r\nKPX Aring yacute -30\r\nKPX Aring ydieresis -30\r\nKPX Atilde C -40\r\nKPX Atilde Cacute -40\r\nKPX Atilde Ccaron -40\r\nKPX Atilde Ccedilla -40\r\nKPX Atilde G -50\r\nKPX Atilde Gbreve -50\r\nKPX Atilde Gcommaaccent -50\r\nKPX Atilde O -40\r\nKPX Atilde Oacute -40\r\nKPX Atilde Ocircumflex -40\r\nKPX Atilde Odieresis -40\r\nKPX Atilde Ograve -40\r\nKPX Atilde Ohungarumlaut -40\r\nKPX Atilde Omacron -40\r\nKPX Atilde Oslash -40\r\nKPX Atilde Otilde -40\r\nKPX Atilde Q -40\r\nKPX Atilde T -90\r\nKPX Atilde Tcaron -90\r\nKPX Atilde Tcommaaccent -90\r\nKPX Atilde U -50\r\nKPX Atilde Uacute -50\r\nKPX Atilde Ucircumflex -50\r\nKPX Atilde Udieresis -50\r\nKPX Atilde Ugrave -50\r\nKPX Atilde Uhungarumlaut -50\r\nKPX Atilde Umacron -50\r\nKPX Atilde Uogonek -50\r\nKPX Atilde Uring -50\r\nKPX Atilde V -80\r\nKPX Atilde W -60\r\nKPX Atilde Y -110\r\nKPX Atilde Yacute -110\r\nKPX Atilde Ydieresis -110\r\nKPX Atilde u -30\r\nKPX Atilde uacute -30\r\nKPX Atilde ucircumflex -30\r\nKPX Atilde udieresis -30\r\nKPX Atilde ugrave -30\r\nKPX Atilde uhungarumlaut -30\r\nKPX Atilde umacron -30\r\nKPX Atilde uogonek -30\r\nKPX Atilde uring -30\r\nKPX Atilde v -40\r\nKPX Atilde w -30\r\nKPX Atilde y -30\r\nKPX Atilde yacute -30\r\nKPX Atilde ydieresis -30\r\nKPX B A -30\r\nKPX B Aacute -30\r\nKPX B Abreve -30\r\nKPX B Acircumflex -30\r\nKPX B Adieresis -30\r\nKPX B Agrave -30\r\nKPX B Amacron -30\r\nKPX B Aogonek -30\r\nKPX B Aring -30\r\nKPX B Atilde -30\r\nKPX B U -10\r\nKPX B Uacute -10\r\nKPX B Ucircumflex -10\r\nKPX B Udieresis -10\r\nKPX B Ugrave -10\r\nKPX B Uhungarumlaut -10\r\nKPX B Umacron -10\r\nKPX B Uogonek -10\r\nKPX B Uring -10\r\nKPX D A -40\r\nKPX D Aacute -40\r\nKPX D Abreve -40\r\nKPX D Acircumflex -40\r\nKPX D Adieresis -40\r\nKPX D Agrave -40\r\nKPX D Amacron -40\r\nKPX D Aogonek -40\r\nKPX D Aring -40\r\nKPX D Atilde -40\r\nKPX D V -40\r\nKPX D W -40\r\nKPX D Y -70\r\nKPX D Yacute -70\r\nKPX D Ydieresis -70\r\nKPX D comma -30\r\nKPX D period -30\r\nKPX Dcaron A -40\r\nKPX Dcaron Aacute -40\r\nKPX Dcaron Abreve -40\r\nKPX Dcaron Acircumflex -40\r\nKPX Dcaron Adieresis -40\r\nKPX Dcaron Agrave -40\r\nKPX Dcaron Amacron -40\r\nKPX Dcaron Aogonek -40\r\nKPX Dcaron Aring -40\r\nKPX Dcaron Atilde -40\r\nKPX Dcaron V -40\r\nKPX Dcaron W -40\r\nKPX Dcaron Y -70\r\nKPX Dcaron Yacute -70\r\nKPX Dcaron Ydieresis -70\r\nKPX Dcaron comma -30\r\nKPX Dcaron period -30\r\nKPX Dcroat A -40\r\nKPX Dcroat Aacute -40\r\nKPX Dcroat Abreve -40\r\nKPX Dcroat Acircumflex -40\r\nKPX Dcroat Adieresis -40\r\nKPX Dcroat Agrave -40\r\nKPX Dcroat Amacron -40\r\nKPX Dcroat Aogonek -40\r\nKPX Dcroat Aring -40\r\nKPX Dcroat Atilde -40\r\nKPX Dcroat V -40\r\nKPX Dcroat W -40\r\nKPX Dcroat Y -70\r\nKPX Dcroat Yacute -70\r\nKPX Dcroat Ydieresis -70\r\nKPX Dcroat comma -30\r\nKPX Dcroat period -30\r\nKPX F A -80\r\nKPX F Aacute -80\r\nKPX F Abreve -80\r\nKPX F Acircumflex -80\r\nKPX F Adieresis -80\r\nKPX F Agrave -80\r\nKPX F Amacron -80\r\nKPX F Aogonek -80\r\nKPX F Aring -80\r\nKPX F Atilde -80\r\nKPX F a -20\r\nKPX F aacute -20\r\nKPX F abreve -20\r\nKPX F acircumflex -20\r\nKPX F adieresis -20\r\nKPX F agrave -20\r\nKPX F amacron -20\r\nKPX F aogonek -20\r\nKPX F aring -20\r\nKPX F atilde -20\r\nKPX F comma -100\r\nKPX F period -100\r\nKPX J A -20\r\nKPX J Aacute -20\r\nKPX J Abreve -20\r\nKPX J Acircumflex -20\r\nKPX J Adieresis -20\r\nKPX J Agrave -20\r\nKPX J Amacron -20\r\nKPX J Aogonek -20\r\nKPX J Aring -20\r\nKPX J Atilde -20\r\nKPX J comma -20\r\nKPX J period -20\r\nKPX J u -20\r\nKPX J uacute -20\r\nKPX J ucircumflex -20\r\nKPX J udieresis -20\r\nKPX J ugrave -20\r\nKPX J uhungarumlaut -20\r\nKPX J umacron -20\r\nKPX J uogonek -20\r\nKPX J uring -20\r\nKPX K O -30\r\nKPX K Oacute -30\r\nKPX K Ocircumflex -30\r\nKPX K Odieresis -30\r\nKPX K Ograve -30\r\nKPX K Ohungarumlaut -30\r\nKPX K Omacron -30\r\nKPX K Oslash -30\r\nKPX K Otilde -30\r\nKPX K e -15\r\nKPX K eacute -15\r\nKPX K ecaron -15\r\nKPX K ecircumflex -15\r\nKPX K edieresis -15\r\nKPX K edotaccent -15\r\nKPX K egrave -15\r\nKPX K emacron -15\r\nKPX K eogonek -15\r\nKPX K o -35\r\nKPX K oacute -35\r\nKPX K ocircumflex -35\r\nKPX K odieresis -35\r\nKPX K ograve -35\r\nKPX K ohungarumlaut -35\r\nKPX K omacron -35\r\nKPX K oslash -35\r\nKPX K otilde -35\r\nKPX K u -30\r\nKPX K uacute -30\r\nKPX K ucircumflex -30\r\nKPX K udieresis -30\r\nKPX K ugrave -30\r\nKPX K uhungarumlaut -30\r\nKPX K umacron -30\r\nKPX K uogonek -30\r\nKPX K uring -30\r\nKPX K y -40\r\nKPX K yacute -40\r\nKPX K ydieresis -40\r\nKPX Kcommaaccent O -30\r\nKPX Kcommaaccent Oacute -30\r\nKPX Kcommaaccent Ocircumflex -30\r\nKPX Kcommaaccent Odieresis -30\r\nKPX Kcommaaccent Ograve -30\r\nKPX Kcommaaccent Ohungarumlaut -30\r\nKPX Kcommaaccent Omacron -30\r\nKPX Kcommaaccent Oslash -30\r\nKPX Kcommaaccent Otilde -30\r\nKPX Kcommaaccent e -15\r\nKPX Kcommaaccent eacute -15\r\nKPX Kcommaaccent ecaron -15\r\nKPX Kcommaaccent ecircumflex -15\r\nKPX Kcommaaccent edieresis -15\r\nKPX Kcommaaccent edotaccent -15\r\nKPX Kcommaaccent egrave -15\r\nKPX Kcommaaccent emacron -15\r\nKPX Kcommaaccent eogonek -15\r\nKPX Kcommaaccent o -35\r\nKPX Kcommaaccent oacute -35\r\nKPX Kcommaaccent ocircumflex -35\r\nKPX Kcommaaccent odieresis -35\r\nKPX Kcommaaccent ograve -35\r\nKPX Kcommaaccent ohungarumlaut -35\r\nKPX Kcommaaccent omacron -35\r\nKPX Kcommaaccent oslash -35\r\nKPX Kcommaaccent otilde -35\r\nKPX Kcommaaccent u -30\r\nKPX Kcommaaccent uacute -30\r\nKPX Kcommaaccent ucircumflex -30\r\nKPX Kcommaaccent udieresis -30\r\nKPX Kcommaaccent ugrave -30\r\nKPX Kcommaaccent uhungarumlaut -30\r\nKPX Kcommaaccent umacron -30\r\nKPX Kcommaaccent uogonek -30\r\nKPX Kcommaaccent uring -30\r\nKPX Kcommaaccent y -40\r\nKPX Kcommaaccent yacute -40\r\nKPX Kcommaaccent ydieresis -40\r\nKPX L T -90\r\nKPX L Tcaron -90\r\nKPX L Tcommaaccent -90\r\nKPX L V -110\r\nKPX L W -80\r\nKPX L Y -120\r\nKPX L Yacute -120\r\nKPX L Ydieresis -120\r\nKPX L quotedblright -140\r\nKPX L quoteright -140\r\nKPX L y -30\r\nKPX L yacute -30\r\nKPX L ydieresis -30\r\nKPX Lacute T -90\r\nKPX Lacute Tcaron -90\r\nKPX Lacute Tcommaaccent -90\r\nKPX Lacute V -110\r\nKPX Lacute W -80\r\nKPX Lacute Y -120\r\nKPX Lacute Yacute -120\r\nKPX Lacute Ydieresis -120\r\nKPX Lacute quotedblright -140\r\nKPX Lacute quoteright -140\r\nKPX Lacute y -30\r\nKPX Lacute yacute -30\r\nKPX Lacute ydieresis -30\r\nKPX Lcommaaccent T -90\r\nKPX Lcommaaccent Tcaron -90\r\nKPX Lcommaaccent Tcommaaccent -90\r\nKPX Lcommaaccent V -110\r\nKPX Lcommaaccent W -80\r\nKPX Lcommaaccent Y -120\r\nKPX Lcommaaccent Yacute -120\r\nKPX Lcommaaccent Ydieresis -120\r\nKPX Lcommaaccent quotedblright -140\r\nKPX Lcommaaccent quoteright -140\r\nKPX Lcommaaccent y -30\r\nKPX Lcommaaccent yacute -30\r\nKPX Lcommaaccent ydieresis -30\r\nKPX Lslash T -90\r\nKPX Lslash Tcaron -90\r\nKPX Lslash Tcommaaccent -90\r\nKPX Lslash V -110\r\nKPX Lslash W -80\r\nKPX Lslash Y -120\r\nKPX Lslash Yacute -120\r\nKPX Lslash Ydieresis -120\r\nKPX Lslash quotedblright -140\r\nKPX Lslash quoteright -140\r\nKPX Lslash y -30\r\nKPX Lslash yacute -30\r\nKPX Lslash ydieresis -30\r\nKPX O A -50\r\nKPX O Aacute -50\r\nKPX O Abreve -50\r\nKPX O Acircumflex -50\r\nKPX O Adieresis -50\r\nKPX O Agrave -50\r\nKPX O Amacron -50\r\nKPX O Aogonek -50\r\nKPX O Aring -50\r\nKPX O Atilde -50\r\nKPX O T -40\r\nKPX O Tcaron -40\r\nKPX O Tcommaaccent -40\r\nKPX O V -50\r\nKPX O W -50\r\nKPX O X -50\r\nKPX O Y -70\r\nKPX O Yacute -70\r\nKPX O Ydieresis -70\r\nKPX O comma -40\r\nKPX O period -40\r\nKPX Oacute A -50\r\nKPX Oacute Aacute -50\r\nKPX Oacute Abreve -50\r\nKPX Oacute Acircumflex -50\r\nKPX Oacute Adieresis -50\r\nKPX Oacute Agrave -50\r\nKPX Oacute Amacron -50\r\nKPX Oacute Aogonek -50\r\nKPX Oacute Aring -50\r\nKPX Oacute Atilde -50\r\nKPX Oacute T -40\r\nKPX Oacute Tcaron -40\r\nKPX Oacute Tcommaaccent -40\r\nKPX Oacute V -50\r\nKPX Oacute W -50\r\nKPX Oacute X -50\r\nKPX Oacute Y -70\r\nKPX Oacute Yacute -70\r\nKPX Oacute Ydieresis -70\r\nKPX Oacute comma -40\r\nKPX Oacute period -40\r\nKPX Ocircumflex A -50\r\nKPX Ocircumflex Aacute -50\r\nKPX Ocircumflex Abreve -50\r\nKPX Ocircumflex Acircumflex -50\r\nKPX Ocircumflex Adieresis -50\r\nKPX Ocircumflex Agrave -50\r\nKPX Ocircumflex Amacron -50\r\nKPX Ocircumflex Aogonek -50\r\nKPX Ocircumflex Aring -50\r\nKPX Ocircumflex Atilde -50\r\nKPX Ocircumflex T -40\r\nKPX Ocircumflex Tcaron -40\r\nKPX Ocircumflex Tcommaaccent -40\r\nKPX Ocircumflex V -50\r\nKPX Ocircumflex W -50\r\nKPX Ocircumflex X -50\r\nKPX Ocircumflex Y -70\r\nKPX Ocircumflex Yacute -70\r\nKPX Ocircumflex Ydieresis -70\r\nKPX Ocircumflex comma -40\r\nKPX Ocircumflex period -40\r\nKPX Odieresis A -50\r\nKPX Odieresis Aacute -50\r\nKPX Odieresis Abreve -50\r\nKPX Odieresis Acircumflex -50\r\nKPX Odieresis Adieresis -50\r\nKPX Odieresis Agrave -50\r\nKPX Odieresis Amacron -50\r\nKPX Odieresis Aogonek -50\r\nKPX Odieresis Aring -50\r\nKPX Odieresis Atilde -50\r\nKPX Odieresis T -40\r\nKPX Odieresis Tcaron -40\r\nKPX Odieresis Tcommaaccent -40\r\nKPX Odieresis V -50\r\nKPX Odieresis W -50\r\nKPX Odieresis X -50\r\nKPX Odieresis Y -70\r\nKPX Odieresis Yacute -70\r\nKPX Odieresis Ydieresis -70\r\nKPX Odieresis comma -40\r\nKPX Odieresis period -40\r\nKPX Ograve A -50\r\nKPX Ograve Aacute -50\r\nKPX Ograve Abreve -50\r\nKPX Ograve Acircumflex -50\r\nKPX Ograve Adieresis -50\r\nKPX Ograve Agrave -50\r\nKPX Ograve Amacron -50\r\nKPX Ograve Aogonek -50\r\nKPX Ograve Aring -50\r\nKPX Ograve Atilde -50\r\nKPX Ograve T -40\r\nKPX Ograve Tcaron -40\r\nKPX Ograve Tcommaaccent -40\r\nKPX Ograve V -50\r\nKPX Ograve W -50\r\nKPX Ograve X -50\r\nKPX Ograve Y -70\r\nKPX Ograve Yacute -70\r\nKPX Ograve Ydieresis -70\r\nKPX Ograve comma -40\r\nKPX Ograve period -40\r\nKPX Ohungarumlaut A -50\r\nKPX Ohungarumlaut Aacute -50\r\nKPX Ohungarumlaut Abreve -50\r\nKPX Ohungarumlaut Acircumflex -50\r\nKPX Ohungarumlaut Adieresis -50\r\nKPX Ohungarumlaut Agrave -50\r\nKPX Ohungarumlaut Amacron -50\r\nKPX Ohungarumlaut Aogonek -50\r\nKPX Ohungarumlaut Aring -50\r\nKPX Ohungarumlaut Atilde -50\r\nKPX Ohungarumlaut T -40\r\nKPX Ohungarumlaut Tcaron -40\r\nKPX Ohungarumlaut Tcommaaccent -40\r\nKPX Ohungarumlaut V -50\r\nKPX Ohungarumlaut W -50\r\nKPX Ohungarumlaut X -50\r\nKPX Ohungarumlaut Y -70\r\nKPX Ohungarumlaut Yacute -70\r\nKPX Ohungarumlaut Ydieresis -70\r\nKPX Ohungarumlaut comma -40\r\nKPX Ohungarumlaut period -40\r\nKPX Omacron A -50\r\nKPX Omacron Aacute -50\r\nKPX Omacron Abreve -50\r\nKPX Omacron Acircumflex -50\r\nKPX Omacron Adieresis -50\r\nKPX Omacron Agrave -50\r\nKPX Omacron Amacron -50\r\nKPX Omacron Aogonek -50\r\nKPX Omacron Aring -50\r\nKPX Omacron Atilde -50\r\nKPX Omacron T -40\r\nKPX Omacron Tcaron -40\r\nKPX Omacron Tcommaaccent -40\r\nKPX Omacron V -50\r\nKPX Omacron W -50\r\nKPX Omacron X -50\r\nKPX Omacron Y -70\r\nKPX Omacron Yacute -70\r\nKPX Omacron Ydieresis -70\r\nKPX Omacron comma -40\r\nKPX Omacron period -40\r\nKPX Oslash A -50\r\nKPX Oslash Aacute -50\r\nKPX Oslash Abreve -50\r\nKPX Oslash Acircumflex -50\r\nKPX Oslash Adieresis -50\r\nKPX Oslash Agrave -50\r\nKPX Oslash Amacron -50\r\nKPX Oslash Aogonek -50\r\nKPX Oslash Aring -50\r\nKPX Oslash Atilde -50\r\nKPX Oslash T -40\r\nKPX Oslash Tcaron -40\r\nKPX Oslash Tcommaaccent -40\r\nKPX Oslash V -50\r\nKPX Oslash W -50\r\nKPX Oslash X -50\r\nKPX Oslash Y -70\r\nKPX Oslash Yacute -70\r\nKPX Oslash Ydieresis -70\r\nKPX Oslash comma -40\r\nKPX Oslash period -40\r\nKPX Otilde A -50\r\nKPX Otilde Aacute -50\r\nKPX Otilde Abreve -50\r\nKPX Otilde Acircumflex -50\r\nKPX Otilde Adieresis -50\r\nKPX Otilde Agrave -50\r\nKPX Otilde Amacron -50\r\nKPX Otilde Aogonek -50\r\nKPX Otilde Aring -50\r\nKPX Otilde Atilde -50\r\nKPX Otilde T -40\r\nKPX Otilde Tcaron -40\r\nKPX Otilde Tcommaaccent -40\r\nKPX Otilde V -50\r\nKPX Otilde W -50\r\nKPX Otilde X -50\r\nKPX Otilde Y -70\r\nKPX Otilde Yacute -70\r\nKPX Otilde Ydieresis -70\r\nKPX Otilde comma -40\r\nKPX Otilde period -40\r\nKPX P A -100\r\nKPX P Aacute -100\r\nKPX P Abreve -100\r\nKPX P Acircumflex -100\r\nKPX P Adieresis -100\r\nKPX P Agrave -100\r\nKPX P Amacron -100\r\nKPX P Aogonek -100\r\nKPX P Aring -100\r\nKPX P Atilde -100\r\nKPX P a -30\r\nKPX P aacute -30\r\nKPX P abreve -30\r\nKPX P acircumflex -30\r\nKPX P adieresis -30\r\nKPX P agrave -30\r\nKPX P amacron -30\r\nKPX P aogonek -30\r\nKPX P aring -30\r\nKPX P atilde -30\r\nKPX P comma -120\r\nKPX P e -30\r\nKPX P eacute -30\r\nKPX P ecaron -30\r\nKPX P ecircumflex -30\r\nKPX P edieresis -30\r\nKPX P edotaccent -30\r\nKPX P egrave -30\r\nKPX P emacron -30\r\nKPX P eogonek -30\r\nKPX P o -40\r\nKPX P oacute -40\r\nKPX P ocircumflex -40\r\nKPX P odieresis -40\r\nKPX P ograve -40\r\nKPX P ohungarumlaut -40\r\nKPX P omacron -40\r\nKPX P oslash -40\r\nKPX P otilde -40\r\nKPX P period -120\r\nKPX Q U -10\r\nKPX Q Uacute -10\r\nKPX Q Ucircumflex -10\r\nKPX Q Udieresis -10\r\nKPX Q Ugrave -10\r\nKPX Q Uhungarumlaut -10\r\nKPX Q Umacron -10\r\nKPX Q Uogonek -10\r\nKPX Q Uring -10\r\nKPX Q comma 20\r\nKPX Q period 20\r\nKPX R O -20\r\nKPX R Oacute -20\r\nKPX R Ocircumflex -20\r\nKPX R Odieresis -20\r\nKPX R Ograve -20\r\nKPX R Ohungarumlaut -20\r\nKPX R Omacron -20\r\nKPX R Oslash -20\r\nKPX R Otilde -20\r\nKPX R T -20\r\nKPX R Tcaron -20\r\nKPX R Tcommaaccent -20\r\nKPX R U -20\r\nKPX R Uacute -20\r\nKPX R Ucircumflex -20\r\nKPX R Udieresis -20\r\nKPX R Ugrave -20\r\nKPX R Uhungarumlaut -20\r\nKPX R Umacron -20\r\nKPX R Uogonek -20\r\nKPX R Uring -20\r\nKPX R V -50\r\nKPX R W -40\r\nKPX R Y -50\r\nKPX R Yacute -50\r\nKPX R Ydieresis -50\r\nKPX Racute O -20\r\nKPX Racute Oacute -20\r\nKPX Racute Ocircumflex -20\r\nKPX Racute Odieresis -20\r\nKPX Racute Ograve -20\r\nKPX Racute Ohungarumlaut -20\r\nKPX Racute Omacron -20\r\nKPX Racute Oslash -20\r\nKPX Racute Otilde -20\r\nKPX Racute T -20\r\nKPX Racute Tcaron -20\r\nKPX Racute Tcommaaccent -20\r\nKPX Racute U -20\r\nKPX Racute Uacute -20\r\nKPX Racute Ucircumflex -20\r\nKPX Racute Udieresis -20\r\nKPX Racute Ugrave -20\r\nKPX Racute Uhungarumlaut -20\r\nKPX Racute Umacron -20\r\nKPX Racute Uogonek -20\r\nKPX Racute Uring -20\r\nKPX Racute V -50\r\nKPX Racute W -40\r\nKPX Racute Y -50\r\nKPX Racute Yacute -50\r\nKPX Racute Ydieresis -50\r\nKPX Rcaron O -20\r\nKPX Rcaron Oacute -20\r\nKPX Rcaron Ocircumflex -20\r\nKPX Rcaron Odieresis -20\r\nKPX Rcaron Ograve -20\r\nKPX Rcaron Ohungarumlaut -20\r\nKPX Rcaron Omacron -20\r\nKPX Rcaron Oslash -20\r\nKPX Rcaron Otilde -20\r\nKPX Rcaron T -20\r\nKPX Rcaron Tcaron -20\r\nKPX Rcaron Tcommaaccent -20\r\nKPX Rcaron U -20\r\nKPX Rcaron Uacute -20\r\nKPX Rcaron Ucircumflex -20\r\nKPX Rcaron Udieresis -20\r\nKPX Rcaron Ugrave -20\r\nKPX Rcaron Uhungarumlaut -20\r\nKPX Rcaron Umacron -20\r\nKPX Rcaron Uogonek -20\r\nKPX Rcaron Uring -20\r\nKPX Rcaron V -50\r\nKPX Rcaron W -40\r\nKPX Rcaron Y -50\r\nKPX Rcaron Yacute -50\r\nKPX Rcaron Ydieresis -50\r\nKPX Rcommaaccent O -20\r\nKPX Rcommaaccent Oacute -20\r\nKPX Rcommaaccent Ocircumflex -20\r\nKPX Rcommaaccent Odieresis -20\r\nKPX Rcommaaccent Ograve -20\r\nKPX Rcommaaccent Ohungarumlaut -20\r\nKPX Rcommaaccent Omacron -20\r\nKPX Rcommaaccent Oslash -20\r\nKPX Rcommaaccent Otilde -20\r\nKPX Rcommaaccent T -20\r\nKPX Rcommaaccent Tcaron -20\r\nKPX Rcommaaccent Tcommaaccent -20\r\nKPX Rcommaaccent U -20\r\nKPX Rcommaaccent Uacute -20\r\nKPX Rcommaaccent Ucircumflex -20\r\nKPX Rcommaaccent Udieresis -20\r\nKPX Rcommaaccent Ugrave -20\r\nKPX Rcommaaccent Uhungarumlaut -20\r\nKPX Rcommaaccent Umacron -20\r\nKPX Rcommaaccent Uogonek -20\r\nKPX Rcommaaccent Uring -20\r\nKPX Rcommaaccent V -50\r\nKPX Rcommaaccent W -40\r\nKPX Rcommaaccent Y -50\r\nKPX Rcommaaccent Yacute -50\r\nKPX Rcommaaccent Ydieresis -50\r\nKPX T A -90\r\nKPX T Aacute -90\r\nKPX T Abreve -90\r\nKPX T Acircumflex -90\r\nKPX T Adieresis -90\r\nKPX T Agrave -90\r\nKPX T Amacron -90\r\nKPX T Aogonek -90\r\nKPX T Aring -90\r\nKPX T Atilde -90\r\nKPX T O -40\r\nKPX T Oacute -40\r\nKPX T Ocircumflex -40\r\nKPX T Odieresis -40\r\nKPX T Ograve -40\r\nKPX T Ohungarumlaut -40\r\nKPX T Omacron -40\r\nKPX T Oslash -40\r\nKPX T Otilde -40\r\nKPX T a -80\r\nKPX T aacute -80\r\nKPX T abreve -80\r\nKPX T acircumflex -80\r\nKPX T adieresis -80\r\nKPX T agrave -80\r\nKPX T amacron -80\r\nKPX T aogonek -80\r\nKPX T aring -80\r\nKPX T atilde -80\r\nKPX T colon -40\r\nKPX T comma -80\r\nKPX T e -60\r\nKPX T eacute -60\r\nKPX T ecaron -60\r\nKPX T ecircumflex -60\r\nKPX T edieresis -60\r\nKPX T edotaccent -60\r\nKPX T egrave -60\r\nKPX T emacron -60\r\nKPX T eogonek -60\r\nKPX T hyphen -120\r\nKPX T o -80\r\nKPX T oacute -80\r\nKPX T ocircumflex -80\r\nKPX T odieresis -80\r\nKPX T ograve -80\r\nKPX T ohungarumlaut -80\r\nKPX T omacron -80\r\nKPX T oslash -80\r\nKPX T otilde -80\r\nKPX T period -80\r\nKPX T r -80\r\nKPX T racute -80\r\nKPX T rcommaaccent -80\r\nKPX T semicolon -40\r\nKPX T u -90\r\nKPX T uacute -90\r\nKPX T ucircumflex -90\r\nKPX T udieresis -90\r\nKPX T ugrave -90\r\nKPX T uhungarumlaut -90\r\nKPX T umacron -90\r\nKPX T uogonek -90\r\nKPX T uring -90\r\nKPX T w -60\r\nKPX T y -60\r\nKPX T yacute -60\r\nKPX T ydieresis -60\r\nKPX Tcaron A -90\r\nKPX Tcaron Aacute -90\r\nKPX Tcaron Abreve -90\r\nKPX Tcaron Acircumflex -90\r\nKPX Tcaron Adieresis -90\r\nKPX Tcaron Agrave -90\r\nKPX Tcaron Amacron -90\r\nKPX Tcaron Aogonek -90\r\nKPX Tcaron Aring -90\r\nKPX Tcaron Atilde -90\r\nKPX Tcaron O -40\r\nKPX Tcaron Oacute -40\r\nKPX Tcaron Ocircumflex -40\r\nKPX Tcaron Odieresis -40\r\nKPX Tcaron Ograve -40\r\nKPX Tcaron Ohungarumlaut -40\r\nKPX Tcaron Omacron -40\r\nKPX Tcaron Oslash -40\r\nKPX Tcaron Otilde -40\r\nKPX Tcaron a -80\r\nKPX Tcaron aacute -80\r\nKPX Tcaron abreve -80\r\nKPX Tcaron acircumflex -80\r\nKPX Tcaron adieresis -80\r\nKPX Tcaron agrave -80\r\nKPX Tcaron amacron -80\r\nKPX Tcaron aogonek -80\r\nKPX Tcaron aring -80\r\nKPX Tcaron atilde -80\r\nKPX Tcaron colon -40\r\nKPX Tcaron comma -80\r\nKPX Tcaron e -60\r\nKPX Tcaron eacute -60\r\nKPX Tcaron ecaron -60\r\nKPX Tcaron ecircumflex -60\r\nKPX Tcaron edieresis -60\r\nKPX Tcaron edotaccent -60\r\nKPX Tcaron egrave -60\r\nKPX Tcaron emacron -60\r\nKPX Tcaron eogonek -60\r\nKPX Tcaron hyphen -120\r\nKPX Tcaron o -80\r\nKPX Tcaron oacute -80\r\nKPX Tcaron ocircumflex -80\r\nKPX Tcaron odieresis -80\r\nKPX Tcaron ograve -80\r\nKPX Tcaron ohungarumlaut -80\r\nKPX Tcaron omacron -80\r\nKPX Tcaron oslash -80\r\nKPX Tcaron otilde -80\r\nKPX Tcaron period -80\r\nKPX Tcaron r -80\r\nKPX Tcaron racute -80\r\nKPX Tcaron rcommaaccent -80\r\nKPX Tcaron semicolon -40\r\nKPX Tcaron u -90\r\nKPX Tcaron uacute -90\r\nKPX Tcaron ucircumflex -90\r\nKPX Tcaron udieresis -90\r\nKPX Tcaron ugrave -90\r\nKPX Tcaron uhungarumlaut -90\r\nKPX Tcaron umacron -90\r\nKPX Tcaron uogonek -90\r\nKPX Tcaron uring -90\r\nKPX Tcaron w -60\r\nKPX Tcaron y -60\r\nKPX Tcaron yacute -60\r\nKPX Tcaron ydieresis -60\r\nKPX Tcommaaccent A -90\r\nKPX Tcommaaccent Aacute -90\r\nKPX Tcommaaccent Abreve -90\r\nKPX Tcommaaccent Acircumflex -90\r\nKPX Tcommaaccent Adieresis -90\r\nKPX Tcommaaccent Agrave -90\r\nKPX Tcommaaccent Amacron -90\r\nKPX Tcommaaccent Aogonek -90\r\nKPX Tcommaaccent Aring -90\r\nKPX Tcommaaccent Atilde -90\r\nKPX Tcommaaccent O -40\r\nKPX Tcommaaccent Oacute -40\r\nKPX Tcommaaccent Ocircumflex -40\r\nKPX Tcommaaccent Odieresis -40\r\nKPX Tcommaaccent Ograve -40\r\nKPX Tcommaaccent Ohungarumlaut -40\r\nKPX Tcommaaccent Omacron -40\r\nKPX Tcommaaccent Oslash -40\r\nKPX Tcommaaccent Otilde -40\r\nKPX Tcommaaccent a -80\r\nKPX Tcommaaccent aacute -80\r\nKPX Tcommaaccent abreve -80\r\nKPX Tcommaaccent acircumflex -80\r\nKPX Tcommaaccent adieresis -80\r\nKPX Tcommaaccent agrave -80\r\nKPX Tcommaaccent amacron -80\r\nKPX Tcommaaccent aogonek -80\r\nKPX Tcommaaccent aring -80\r\nKPX Tcommaaccent atilde -80\r\nKPX Tcommaaccent colon -40\r\nKPX Tcommaaccent comma -80\r\nKPX Tcommaaccent e -60\r\nKPX Tcommaaccent eacute -60\r\nKPX Tcommaaccent ecaron -60\r\nKPX Tcommaaccent ecircumflex -60\r\nKPX Tcommaaccent edieresis -60\r\nKPX Tcommaaccent edotaccent -60\r\nKPX Tcommaaccent egrave -60\r\nKPX Tcommaaccent emacron -60\r\nKPX Tcommaaccent eogonek -60\r\nKPX Tcommaaccent hyphen -120\r\nKPX Tcommaaccent o -80\r\nKPX Tcommaaccent oacute -80\r\nKPX Tcommaaccent ocircumflex -80\r\nKPX Tcommaaccent odieresis -80\r\nKPX Tcommaaccent ograve -80\r\nKPX Tcommaaccent ohungarumlaut -80\r\nKPX Tcommaaccent omacron -80\r\nKPX Tcommaaccent oslash -80\r\nKPX Tcommaaccent otilde -80\r\nKPX Tcommaaccent period -80\r\nKPX Tcommaaccent r -80\r\nKPX Tcommaaccent racute -80\r\nKPX Tcommaaccent rcommaaccent -80\r\nKPX Tcommaaccent semicolon -40\r\nKPX Tcommaaccent u -90\r\nKPX Tcommaaccent uacute -90\r\nKPX Tcommaaccent ucircumflex -90\r\nKPX Tcommaaccent udieresis -90\r\nKPX Tcommaaccent ugrave -90\r\nKPX Tcommaaccent uhungarumlaut -90\r\nKPX Tcommaaccent umacron -90\r\nKPX Tcommaaccent uogonek -90\r\nKPX Tcommaaccent uring -90\r\nKPX Tcommaaccent w -60\r\nKPX Tcommaaccent y -60\r\nKPX Tcommaaccent yacute -60\r\nKPX Tcommaaccent ydieresis -60\r\nKPX U A -50\r\nKPX U Aacute -50\r\nKPX U Abreve -50\r\nKPX U Acircumflex -50\r\nKPX U Adieresis -50\r\nKPX U Agrave -50\r\nKPX U Amacron -50\r\nKPX U Aogonek -50\r\nKPX U Aring -50\r\nKPX U Atilde -50\r\nKPX U comma -30\r\nKPX U period -30\r\nKPX Uacute A -50\r\nKPX Uacute Aacute -50\r\nKPX Uacute Abreve -50\r\nKPX Uacute Acircumflex -50\r\nKPX Uacute Adieresis -50\r\nKPX Uacute Agrave -50\r\nKPX Uacute Amacron -50\r\nKPX Uacute Aogonek -50\r\nKPX Uacute Aring -50\r\nKPX Uacute Atilde -50\r\nKPX Uacute comma -30\r\nKPX Uacute period -30\r\nKPX Ucircumflex A -50\r\nKPX Ucircumflex Aacute -50\r\nKPX Ucircumflex Abreve -50\r\nKPX Ucircumflex Acircumflex -50\r\nKPX Ucircumflex Adieresis -50\r\nKPX Ucircumflex Agrave -50\r\nKPX Ucircumflex Amacron -50\r\nKPX Ucircumflex Aogonek -50\r\nKPX Ucircumflex Aring -50\r\nKPX Ucircumflex Atilde -50\r\nKPX Ucircumflex comma -30\r\nKPX Ucircumflex period -30\r\nKPX Udieresis A -50\r\nKPX Udieresis Aacute -50\r\nKPX Udieresis Abreve -50\r\nKPX Udieresis Acircumflex -50\r\nKPX Udieresis Adieresis -50\r\nKPX Udieresis Agrave -50\r\nKPX Udieresis Amacron -50\r\nKPX Udieresis Aogonek -50\r\nKPX Udieresis Aring -50\r\nKPX Udieresis Atilde -50\r\nKPX Udieresis comma -30\r\nKPX Udieresis period -30\r\nKPX Ugrave A -50\r\nKPX Ugrave Aacute -50\r\nKPX Ugrave Abreve -50\r\nKPX Ugrave Acircumflex -50\r\nKPX Ugrave Adieresis -50\r\nKPX Ugrave Agrave -50\r\nKPX Ugrave Amacron -50\r\nKPX Ugrave Aogonek -50\r\nKPX Ugrave Aring -50\r\nKPX Ugrave Atilde -50\r\nKPX Ugrave comma -30\r\nKPX Ugrave period -30\r\nKPX Uhungarumlaut A -50\r\nKPX Uhungarumlaut Aacute -50\r\nKPX Uhungarumlaut Abreve -50\r\nKPX Uhungarumlaut Acircumflex -50\r\nKPX Uhungarumlaut Adieresis -50\r\nKPX Uhungarumlaut Agrave -50\r\nKPX Uhungarumlaut Amacron -50\r\nKPX Uhungarumlaut Aogonek -50\r\nKPX Uhungarumlaut Aring -50\r\nKPX Uhungarumlaut Atilde -50\r\nKPX Uhungarumlaut comma -30\r\nKPX Uhungarumlaut period -30\r\nKPX Umacron A -50\r\nKPX Umacron Aacute -50\r\nKPX Umacron Abreve -50\r\nKPX Umacron Acircumflex -50\r\nKPX Umacron Adieresis -50\r\nKPX Umacron Agrave -50\r\nKPX Umacron Amacron -50\r\nKPX Umacron Aogonek -50\r\nKPX Umacron Aring -50\r\nKPX Umacron Atilde -50\r\nKPX Umacron comma -30\r\nKPX Umacron period -30\r\nKPX Uogonek A -50\r\nKPX Uogonek Aacute -50\r\nKPX Uogonek Abreve -50\r\nKPX Uogonek Acircumflex -50\r\nKPX Uogonek Adieresis -50\r\nKPX Uogonek Agrave -50\r\nKPX Uogonek Amacron -50\r\nKPX Uogonek Aogonek -50\r\nKPX Uogonek Aring -50\r\nKPX Uogonek Atilde -50\r\nKPX Uogonek comma -30\r\nKPX Uogonek period -30\r\nKPX Uring A -50\r\nKPX Uring Aacute -50\r\nKPX Uring Abreve -50\r\nKPX Uring Acircumflex -50\r\nKPX Uring Adieresis -50\r\nKPX Uring Agrave -50\r\nKPX Uring Amacron -50\r\nKPX Uring Aogonek -50\r\nKPX Uring Aring -50\r\nKPX Uring Atilde -50\r\nKPX Uring comma -30\r\nKPX Uring period -30\r\nKPX V A -80\r\nKPX V Aacute -80\r\nKPX V Abreve -80\r\nKPX V Acircumflex -80\r\nKPX V Adieresis -80\r\nKPX V Agrave -80\r\nKPX V Amacron -80\r\nKPX V Aogonek -80\r\nKPX V Aring -80\r\nKPX V Atilde -80\r\nKPX V G -50\r\nKPX V Gbreve -50\r\nKPX V Gcommaaccent -50\r\nKPX V O -50\r\nKPX V Oacute -50\r\nKPX V Ocircumflex -50\r\nKPX V Odieresis -50\r\nKPX V Ograve -50\r\nKPX V Ohungarumlaut -50\r\nKPX V Omacron -50\r\nKPX V Oslash -50\r\nKPX V Otilde -50\r\nKPX V a -60\r\nKPX V aacute -60\r\nKPX V abreve -60\r\nKPX V acircumflex -60\r\nKPX V adieresis -60\r\nKPX V agrave -60\r\nKPX V amacron -60\r\nKPX V aogonek -60\r\nKPX V aring -60\r\nKPX V atilde -60\r\nKPX V colon -40\r\nKPX V comma -120\r\nKPX V e -50\r\nKPX V eacute -50\r\nKPX V ecaron -50\r\nKPX V ecircumflex -50\r\nKPX V edieresis -50\r\nKPX V edotaccent -50\r\nKPX V egrave -50\r\nKPX V emacron -50\r\nKPX V eogonek -50\r\nKPX V hyphen -80\r\nKPX V o -90\r\nKPX V oacute -90\r\nKPX V ocircumflex -90\r\nKPX V odieresis -90\r\nKPX V ograve -90\r\nKPX V ohungarumlaut -90\r\nKPX V omacron -90\r\nKPX V oslash -90\r\nKPX V otilde -90\r\nKPX V period -120\r\nKPX V semicolon -40\r\nKPX V u -60\r\nKPX V uacute -60\r\nKPX V ucircumflex -60\r\nKPX V udieresis -60\r\nKPX V ugrave -60\r\nKPX V uhungarumlaut -60\r\nKPX V umacron -60\r\nKPX V uogonek -60\r\nKPX V uring -60\r\nKPX W A -60\r\nKPX W Aacute -60\r\nKPX W Abreve -60\r\nKPX W Acircumflex -60\r\nKPX W Adieresis -60\r\nKPX W Agrave -60\r\nKPX W Amacron -60\r\nKPX W Aogonek -60\r\nKPX W Aring -60\r\nKPX W Atilde -60\r\nKPX W O -20\r\nKPX W Oacute -20\r\nKPX W Ocircumflex -20\r\nKPX W Odieresis -20\r\nKPX W Ograve -20\r\nKPX W Ohungarumlaut -20\r\nKPX W Omacron -20\r\nKPX W Oslash -20\r\nKPX W Otilde -20\r\nKPX W a -40\r\nKPX W aacute -40\r\nKPX W abreve -40\r\nKPX W acircumflex -40\r\nKPX W adieresis -40\r\nKPX W agrave -40\r\nKPX W amacron -40\r\nKPX W aogonek -40\r\nKPX W aring -40\r\nKPX W atilde -40\r\nKPX W colon -10\r\nKPX W comma -80\r\nKPX W e -35\r\nKPX W eacute -35\r\nKPX W ecaron -35\r\nKPX W ecircumflex -35\r\nKPX W edieresis -35\r\nKPX W edotaccent -35\r\nKPX W egrave -35\r\nKPX W emacron -35\r\nKPX W eogonek -35\r\nKPX W hyphen -40\r\nKPX W o -60\r\nKPX W oacute -60\r\nKPX W ocircumflex -60\r\nKPX W odieresis -60\r\nKPX W ograve -60\r\nKPX W ohungarumlaut -60\r\nKPX W omacron -60\r\nKPX W oslash -60\r\nKPX W otilde -60\r\nKPX W period -80\r\nKPX W semicolon -10\r\nKPX W u -45\r\nKPX W uacute -45\r\nKPX W ucircumflex -45\r\nKPX W udieresis -45\r\nKPX W ugrave -45\r\nKPX W uhungarumlaut -45\r\nKPX W umacron -45\r\nKPX W uogonek -45\r\nKPX W uring -45\r\nKPX W y -20\r\nKPX W yacute -20\r\nKPX W ydieresis -20\r\nKPX Y A -110\r\nKPX Y Aacute -110\r\nKPX Y Abreve -110\r\nKPX Y Acircumflex -110\r\nKPX Y Adieresis -110\r\nKPX Y Agrave -110\r\nKPX Y Amacron -110\r\nKPX Y Aogonek -110\r\nKPX Y Aring -110\r\nKPX Y Atilde -110\r\nKPX Y O -70\r\nKPX Y Oacute -70\r\nKPX Y Ocircumflex -70\r\nKPX Y Odieresis -70\r\nKPX Y Ograve -70\r\nKPX Y Ohungarumlaut -70\r\nKPX Y Omacron -70\r\nKPX Y Oslash -70\r\nKPX Y Otilde -70\r\nKPX Y a -90\r\nKPX Y aacute -90\r\nKPX Y abreve -90\r\nKPX Y acircumflex -90\r\nKPX Y adieresis -90\r\nKPX Y agrave -90\r\nKPX Y amacron -90\r\nKPX Y aogonek -90\r\nKPX Y aring -90\r\nKPX Y atilde -90\r\nKPX Y colon -50\r\nKPX Y comma -100\r\nKPX Y e -80\r\nKPX Y eacute -80\r\nKPX Y ecaron -80\r\nKPX Y ecircumflex -80\r\nKPX Y edieresis -80\r\nKPX Y edotaccent -80\r\nKPX Y egrave -80\r\nKPX Y emacron -80\r\nKPX Y eogonek -80\r\nKPX Y o -100\r\nKPX Y oacute -100\r\nKPX Y ocircumflex -100\r\nKPX Y odieresis -100\r\nKPX Y ograve -100\r\nKPX Y ohungarumlaut -100\r\nKPX Y omacron -100\r\nKPX Y oslash -100\r\nKPX Y otilde -100\r\nKPX Y period -100\r\nKPX Y semicolon -50\r\nKPX Y u -100\r\nKPX Y uacute -100\r\nKPX Y ucircumflex -100\r\nKPX Y udieresis -100\r\nKPX Y ugrave -100\r\nKPX Y uhungarumlaut -100\r\nKPX Y umacron -100\r\nKPX Y uogonek -100\r\nKPX Y uring -100\r\nKPX Yacute A -110\r\nKPX Yacute Aacute -110\r\nKPX Yacute Abreve -110\r\nKPX Yacute Acircumflex -110\r\nKPX Yacute Adieresis -110\r\nKPX Yacute Agrave -110\r\nKPX Yacute Amacron -110\r\nKPX Yacute Aogonek -110\r\nKPX Yacute Aring -110\r\nKPX Yacute Atilde -110\r\nKPX Yacute O -70\r\nKPX Yacute Oacute -70\r\nKPX Yacute Ocircumflex -70\r\nKPX Yacute Odieresis -70\r\nKPX Yacute Ograve -70\r\nKPX Yacute Ohungarumlaut -70\r\nKPX Yacute Omacron -70\r\nKPX Yacute Oslash -70\r\nKPX Yacute Otilde -70\r\nKPX Yacute a -90\r\nKPX Yacute aacute -90\r\nKPX Yacute abreve -90\r\nKPX Yacute acircumflex -90\r\nKPX Yacute adieresis -90\r\nKPX Yacute agrave -90\r\nKPX Yacute amacron -90\r\nKPX Yacute aogonek -90\r\nKPX Yacute aring -90\r\nKPX Yacute atilde -90\r\nKPX Yacute colon -50\r\nKPX Yacute comma -100\r\nKPX Yacute e -80\r\nKPX Yacute eacute -80\r\nKPX Yacute ecaron -80\r\nKPX Yacute ecircumflex -80\r\nKPX Yacute edieresis -80\r\nKPX Yacute edotaccent -80\r\nKPX Yacute egrave -80\r\nKPX Yacute emacron -80\r\nKPX Yacute eogonek -80\r\nKPX Yacute o -100\r\nKPX Yacute oacute -100\r\nKPX Yacute ocircumflex -100\r\nKPX Yacute odieresis -100\r\nKPX Yacute ograve -100\r\nKPX Yacute ohungarumlaut -100\r\nKPX Yacute omacron -100\r\nKPX Yacute oslash -100\r\nKPX Yacute otilde -100\r\nKPX Yacute period -100\r\nKPX Yacute semicolon -50\r\nKPX Yacute u -100\r\nKPX Yacute uacute -100\r\nKPX Yacute ucircumflex -100\r\nKPX Yacute udieresis -100\r\nKPX Yacute ugrave -100\r\nKPX Yacute uhungarumlaut -100\r\nKPX Yacute umacron -100\r\nKPX Yacute uogonek -100\r\nKPX Yacute uring -100\r\nKPX Ydieresis A -110\r\nKPX Ydieresis Aacute -110\r\nKPX Ydieresis Abreve -110\r\nKPX Ydieresis Acircumflex -110\r\nKPX Ydieresis Adieresis -110\r\nKPX Ydieresis Agrave -110\r\nKPX Ydieresis Amacron -110\r\nKPX Ydieresis Aogonek -110\r\nKPX Ydieresis Aring -110\r\nKPX Ydieresis Atilde -110\r\nKPX Ydieresis O -70\r\nKPX Ydieresis Oacute -70\r\nKPX Ydieresis Ocircumflex -70\r\nKPX Ydieresis Odieresis -70\r\nKPX Ydieresis Ograve -70\r\nKPX Ydieresis Ohungarumlaut -70\r\nKPX Ydieresis Omacron -70\r\nKPX Ydieresis Oslash -70\r\nKPX Ydieresis Otilde -70\r\nKPX Ydieresis a -90\r\nKPX Ydieresis aacute -90\r\nKPX Ydieresis abreve -90\r\nKPX Ydieresis acircumflex -90\r\nKPX Ydieresis adieresis -90\r\nKPX Ydieresis agrave -90\r\nKPX Ydieresis amacron -90\r\nKPX Ydieresis aogonek -90\r\nKPX Ydieresis aring -90\r\nKPX Ydieresis atilde -90\r\nKPX Ydieresis colon -50\r\nKPX Ydieresis comma -100\r\nKPX Ydieresis e -80\r\nKPX Ydieresis eacute -80\r\nKPX Ydieresis ecaron -80\r\nKPX Ydieresis ecircumflex -80\r\nKPX Ydieresis edieresis -80\r\nKPX Ydieresis edotaccent -80\r\nKPX Ydieresis egrave -80\r\nKPX Ydieresis emacron -80\r\nKPX Ydieresis eogonek -80\r\nKPX Ydieresis o -100\r\nKPX Ydieresis oacute -100\r\nKPX Ydieresis ocircumflex -100\r\nKPX Ydieresis odieresis -100\r\nKPX Ydieresis ograve -100\r\nKPX Ydieresis ohungarumlaut -100\r\nKPX Ydieresis omacron -100\r\nKPX Ydieresis oslash -100\r\nKPX Ydieresis otilde -100\r\nKPX Ydieresis period -100\r\nKPX Ydieresis semicolon -50\r\nKPX Ydieresis u -100\r\nKPX Ydieresis uacute -100\r\nKPX Ydieresis ucircumflex -100\r\nKPX Ydieresis udieresis -100\r\nKPX Ydieresis ugrave -100\r\nKPX Ydieresis uhungarumlaut -100\r\nKPX Ydieresis umacron -100\r\nKPX Ydieresis uogonek -100\r\nKPX Ydieresis uring -100\r\nKPX a g -10\r\nKPX a gbreve -10\r\nKPX a gcommaaccent -10\r\nKPX a v -15\r\nKPX a w -15\r\nKPX a y -20\r\nKPX a yacute -20\r\nKPX a ydieresis -20\r\nKPX aacute g -10\r\nKPX aacute gbreve -10\r\nKPX aacute gcommaaccent -10\r\nKPX aacute v -15\r\nKPX aacute w -15\r\nKPX aacute y -20\r\nKPX aacute yacute -20\r\nKPX aacute ydieresis -20\r\nKPX abreve g -10\r\nKPX abreve gbreve -10\r\nKPX abreve gcommaaccent -10\r\nKPX abreve v -15\r\nKPX abreve w -15\r\nKPX abreve y -20\r\nKPX abreve yacute -20\r\nKPX abreve ydieresis -20\r\nKPX acircumflex g -10\r\nKPX acircumflex gbreve -10\r\nKPX acircumflex gcommaaccent -10\r\nKPX acircumflex v -15\r\nKPX acircumflex w -15\r\nKPX acircumflex y -20\r\nKPX acircumflex yacute -20\r\nKPX acircumflex ydieresis -20\r\nKPX adieresis g -10\r\nKPX adieresis gbreve -10\r\nKPX adieresis gcommaaccent -10\r\nKPX adieresis v -15\r\nKPX adieresis w -15\r\nKPX adieresis y -20\r\nKPX adieresis yacute -20\r\nKPX adieresis ydieresis -20\r\nKPX agrave g -10\r\nKPX agrave gbreve -10\r\nKPX agrave gcommaaccent -10\r\nKPX agrave v -15\r\nKPX agrave w -15\r\nKPX agrave y -20\r\nKPX agrave yacute -20\r\nKPX agrave ydieresis -20\r\nKPX amacron g -10\r\nKPX amacron gbreve -10\r\nKPX amacron gcommaaccent -10\r\nKPX amacron v -15\r\nKPX amacron w -15\r\nKPX amacron y -20\r\nKPX amacron yacute -20\r\nKPX amacron ydieresis -20\r\nKPX aogonek g -10\r\nKPX aogonek gbreve -10\r\nKPX aogonek gcommaaccent -10\r\nKPX aogonek v -15\r\nKPX aogonek w -15\r\nKPX aogonek y -20\r\nKPX aogonek yacute -20\r\nKPX aogonek ydieresis -20\r\nKPX aring g -10\r\nKPX aring gbreve -10\r\nKPX aring gcommaaccent -10\r\nKPX aring v -15\r\nKPX aring w -15\r\nKPX aring y -20\r\nKPX aring yacute -20\r\nKPX aring ydieresis -20\r\nKPX atilde g -10\r\nKPX atilde gbreve -10\r\nKPX atilde gcommaaccent -10\r\nKPX atilde v -15\r\nKPX atilde w -15\r\nKPX atilde y -20\r\nKPX atilde yacute -20\r\nKPX atilde ydieresis -20\r\nKPX b l -10\r\nKPX b lacute -10\r\nKPX b lcommaaccent -10\r\nKPX b lslash -10\r\nKPX b u -20\r\nKPX b uacute -20\r\nKPX b ucircumflex -20\r\nKPX b udieresis -20\r\nKPX b ugrave -20\r\nKPX b uhungarumlaut -20\r\nKPX b umacron -20\r\nKPX b uogonek -20\r\nKPX b uring -20\r\nKPX b v -20\r\nKPX b y -20\r\nKPX b yacute -20\r\nKPX b ydieresis -20\r\nKPX c h -10\r\nKPX c k -20\r\nKPX c kcommaaccent -20\r\nKPX c l -20\r\nKPX c lacute -20\r\nKPX c lcommaaccent -20\r\nKPX c lslash -20\r\nKPX c y -10\r\nKPX c yacute -10\r\nKPX c ydieresis -10\r\nKPX cacute h -10\r\nKPX cacute k -20\r\nKPX cacute kcommaaccent -20\r\nKPX cacute l -20\r\nKPX cacute lacute -20\r\nKPX cacute lcommaaccent -20\r\nKPX cacute lslash -20\r\nKPX cacute y -10\r\nKPX cacute yacute -10\r\nKPX cacute ydieresis -10\r\nKPX ccaron h -10\r\nKPX ccaron k -20\r\nKPX ccaron kcommaaccent -20\r\nKPX ccaron l -20\r\nKPX ccaron lacute -20\r\nKPX ccaron lcommaaccent -20\r\nKPX ccaron lslash -20\r\nKPX ccaron y -10\r\nKPX ccaron yacute -10\r\nKPX ccaron ydieresis -10\r\nKPX ccedilla h -10\r\nKPX ccedilla k -20\r\nKPX ccedilla kcommaaccent -20\r\nKPX ccedilla l -20\r\nKPX ccedilla lacute -20\r\nKPX ccedilla lcommaaccent -20\r\nKPX ccedilla lslash -20\r\nKPX ccedilla y -10\r\nKPX ccedilla yacute -10\r\nKPX ccedilla ydieresis -10\r\nKPX colon space -40\r\nKPX comma quotedblright -120\r\nKPX comma quoteright -120\r\nKPX comma space -40\r\nKPX d d -10\r\nKPX d dcroat -10\r\nKPX d v -15\r\nKPX d w -15\r\nKPX d y -15\r\nKPX d yacute -15\r\nKPX d ydieresis -15\r\nKPX dcroat d -10\r\nKPX dcroat dcroat -10\r\nKPX dcroat v -15\r\nKPX dcroat w -15\r\nKPX dcroat y -15\r\nKPX dcroat yacute -15\r\nKPX dcroat ydieresis -15\r\nKPX e comma 10\r\nKPX e period 20\r\nKPX e v -15\r\nKPX e w -15\r\nKPX e x -15\r\nKPX e y -15\r\nKPX e yacute -15\r\nKPX e ydieresis -15\r\nKPX eacute comma 10\r\nKPX eacute period 20\r\nKPX eacute v -15\r\nKPX eacute w -15\r\nKPX eacute x -15\r\nKPX eacute y -15\r\nKPX eacute yacute -15\r\nKPX eacute ydieresis -15\r\nKPX ecaron comma 10\r\nKPX ecaron period 20\r\nKPX ecaron v -15\r\nKPX ecaron w -15\r\nKPX ecaron x -15\r\nKPX ecaron y -15\r\nKPX ecaron yacute -15\r\nKPX ecaron ydieresis -15\r\nKPX ecircumflex comma 10\r\nKPX ecircumflex period 20\r\nKPX ecircumflex v -15\r\nKPX ecircumflex w -15\r\nKPX ecircumflex x -15\r\nKPX ecircumflex y -15\r\nKPX ecircumflex yacute -15\r\nKPX ecircumflex ydieresis -15\r\nKPX edieresis comma 10\r\nKPX edieresis period 20\r\nKPX edieresis v -15\r\nKPX edieresis w -15\r\nKPX edieresis x -15\r\nKPX edieresis y -15\r\nKPX edieresis yacute -15\r\nKPX edieresis ydieresis -15\r\nKPX edotaccent comma 10\r\nKPX edotaccent period 20\r\nKPX edotaccent v -15\r\nKPX edotaccent w -15\r\nKPX edotaccent x -15\r\nKPX edotaccent y -15\r\nKPX edotaccent yacute -15\r\nKPX edotaccent ydieresis -15\r\nKPX egrave comma 10\r\nKPX egrave period 20\r\nKPX egrave v -15\r\nKPX egrave w -15\r\nKPX egrave x -15\r\nKPX egrave y -15\r\nKPX egrave yacute -15\r\nKPX egrave ydieresis -15\r\nKPX emacron comma 10\r\nKPX emacron period 20\r\nKPX emacron v -15\r\nKPX emacron w -15\r\nKPX emacron x -15\r\nKPX emacron y -15\r\nKPX emacron yacute -15\r\nKPX emacron ydieresis -15\r\nKPX eogonek comma 10\r\nKPX eogonek period 20\r\nKPX eogonek v -15\r\nKPX eogonek w -15\r\nKPX eogonek x -15\r\nKPX eogonek y -15\r\nKPX eogonek yacute -15\r\nKPX eogonek ydieresis -15\r\nKPX f comma -10\r\nKPX f e -10\r\nKPX f eacute -10\r\nKPX f ecaron -10\r\nKPX f ecircumflex -10\r\nKPX f edieresis -10\r\nKPX f edotaccent -10\r\nKPX f egrave -10\r\nKPX f emacron -10\r\nKPX f eogonek -10\r\nKPX f o -20\r\nKPX f oacute -20\r\nKPX f ocircumflex -20\r\nKPX f odieresis -20\r\nKPX f ograve -20\r\nKPX f ohungarumlaut -20\r\nKPX f omacron -20\r\nKPX f oslash -20\r\nKPX f otilde -20\r\nKPX f period -10\r\nKPX f quotedblright 30\r\nKPX f quoteright 30\r\nKPX g e 10\r\nKPX g eacute 10\r\nKPX g ecaron 10\r\nKPX g ecircumflex 10\r\nKPX g edieresis 10\r\nKPX g edotaccent 10\r\nKPX g egrave 10\r\nKPX g emacron 10\r\nKPX g eogonek 10\r\nKPX g g -10\r\nKPX g gbreve -10\r\nKPX g gcommaaccent -10\r\nKPX gbreve e 10\r\nKPX gbreve eacute 10\r\nKPX gbreve ecaron 10\r\nKPX gbreve ecircumflex 10\r\nKPX gbreve edieresis 10\r\nKPX gbreve edotaccent 10\r\nKPX gbreve egrave 10\r\nKPX gbreve emacron 10\r\nKPX gbreve eogonek 10\r\nKPX gbreve g -10\r\nKPX gbreve gbreve -10\r\nKPX gbreve gcommaaccent -10\r\nKPX gcommaaccent e 10\r\nKPX gcommaaccent eacute 10\r\nKPX gcommaaccent ecaron 10\r\nKPX gcommaaccent ecircumflex 10\r\nKPX gcommaaccent edieresis 10\r\nKPX gcommaaccent edotaccent 10\r\nKPX gcommaaccent egrave 10\r\nKPX gcommaaccent emacron 10\r\nKPX gcommaaccent eogonek 10\r\nKPX gcommaaccent g -10\r\nKPX gcommaaccent gbreve -10\r\nKPX gcommaaccent gcommaaccent -10\r\nKPX h y -20\r\nKPX h yacute -20\r\nKPX h ydieresis -20\r\nKPX k o -15\r\nKPX k oacute -15\r\nKPX k ocircumflex -15\r\nKPX k odieresis -15\r\nKPX k ograve -15\r\nKPX k ohungarumlaut -15\r\nKPX k omacron -15\r\nKPX k oslash -15\r\nKPX k otilde -15\r\nKPX kcommaaccent o -15\r\nKPX kcommaaccent oacute -15\r\nKPX kcommaaccent ocircumflex -15\r\nKPX kcommaaccent odieresis -15\r\nKPX kcommaaccent ograve -15\r\nKPX kcommaaccent ohungarumlaut -15\r\nKPX kcommaaccent omacron -15\r\nKPX kcommaaccent oslash -15\r\nKPX kcommaaccent otilde -15\r\nKPX l w -15\r\nKPX l y -15\r\nKPX l yacute -15\r\nKPX l ydieresis -15\r\nKPX lacute w -15\r\nKPX lacute y -15\r\nKPX lacute yacute -15\r\nKPX lacute ydieresis -15\r\nKPX lcommaaccent w -15\r\nKPX lcommaaccent y -15\r\nKPX lcommaaccent yacute -15\r\nKPX lcommaaccent ydieresis -15\r\nKPX lslash w -15\r\nKPX lslash y -15\r\nKPX lslash yacute -15\r\nKPX lslash ydieresis -15\r\nKPX m u -20\r\nKPX m uacute -20\r\nKPX m ucircumflex -20\r\nKPX m udieresis -20\r\nKPX m ugrave -20\r\nKPX m uhungarumlaut -20\r\nKPX m umacron -20\r\nKPX m uogonek -20\r\nKPX m uring -20\r\nKPX m y -30\r\nKPX m yacute -30\r\nKPX m ydieresis -30\r\nKPX n u -10\r\nKPX n uacute -10\r\nKPX n ucircumflex -10\r\nKPX n udieresis -10\r\nKPX n ugrave -10\r\nKPX n uhungarumlaut -10\r\nKPX n umacron -10\r\nKPX n uogonek -10\r\nKPX n uring -10\r\nKPX n v -40\r\nKPX n y -20\r\nKPX n yacute -20\r\nKPX n ydieresis -20\r\nKPX nacute u -10\r\nKPX nacute uacute -10\r\nKPX nacute ucircumflex -10\r\nKPX nacute udieresis -10\r\nKPX nacute ugrave -10\r\nKPX nacute uhungarumlaut -10\r\nKPX nacute umacron -10\r\nKPX nacute uogonek -10\r\nKPX nacute uring -10\r\nKPX nacute v -40\r\nKPX nacute y -20\r\nKPX nacute yacute -20\r\nKPX nacute ydieresis -20\r\nKPX ncaron u -10\r\nKPX ncaron uacute -10\r\nKPX ncaron ucircumflex -10\r\nKPX ncaron udieresis -10\r\nKPX ncaron ugrave -10\r\nKPX ncaron uhungarumlaut -10\r\nKPX ncaron umacron -10\r\nKPX ncaron uogonek -10\r\nKPX ncaron uring -10\r\nKPX ncaron v -40\r\nKPX ncaron y -20\r\nKPX ncaron yacute -20\r\nKPX ncaron ydieresis -20\r\nKPX ncommaaccent u -10\r\nKPX ncommaaccent uacute -10\r\nKPX ncommaaccent ucircumflex -10\r\nKPX ncommaaccent udieresis -10\r\nKPX ncommaaccent ugrave -10\r\nKPX ncommaaccent uhungarumlaut -10\r\nKPX ncommaaccent umacron -10\r\nKPX ncommaaccent uogonek -10\r\nKPX ncommaaccent uring -10\r\nKPX ncommaaccent v -40\r\nKPX ncommaaccent y -20\r\nKPX ncommaaccent yacute -20\r\nKPX ncommaaccent ydieresis -20\r\nKPX ntilde u -10\r\nKPX ntilde uacute -10\r\nKPX ntilde ucircumflex -10\r\nKPX ntilde udieresis -10\r\nKPX ntilde ugrave -10\r\nKPX ntilde uhungarumlaut -10\r\nKPX ntilde umacron -10\r\nKPX ntilde uogonek -10\r\nKPX ntilde uring -10\r\nKPX ntilde v -40\r\nKPX ntilde y -20\r\nKPX ntilde yacute -20\r\nKPX ntilde ydieresis -20\r\nKPX o v -20\r\nKPX o w -15\r\nKPX o x -30\r\nKPX o y -20\r\nKPX o yacute -20\r\nKPX o ydieresis -20\r\nKPX oacute v -20\r\nKPX oacute w -15\r\nKPX oacute x -30\r\nKPX oacute y -20\r\nKPX oacute yacute -20\r\nKPX oacute ydieresis -20\r\nKPX ocircumflex v -20\r\nKPX ocircumflex w -15\r\nKPX ocircumflex x -30\r\nKPX ocircumflex y -20\r\nKPX ocircumflex yacute -20\r\nKPX ocircumflex ydieresis -20\r\nKPX odieresis v -20\r\nKPX odieresis w -15\r\nKPX odieresis x -30\r\nKPX odieresis y -20\r\nKPX odieresis yacute -20\r\nKPX odieresis ydieresis -20\r\nKPX ograve v -20\r\nKPX ograve w -15\r\nKPX ograve x -30\r\nKPX ograve y -20\r\nKPX ograve yacute -20\r\nKPX ograve ydieresis -20\r\nKPX ohungarumlaut v -20\r\nKPX ohungarumlaut w -15\r\nKPX ohungarumlaut x -30\r\nKPX ohungarumlaut y -20\r\nKPX ohungarumlaut yacute -20\r\nKPX ohungarumlaut ydieresis -20\r\nKPX omacron v -20\r\nKPX omacron w -15\r\nKPX omacron x -30\r\nKPX omacron y -20\r\nKPX omacron yacute -20\r\nKPX omacron ydieresis -20\r\nKPX oslash v -20\r\nKPX oslash w -15\r\nKPX oslash x -30\r\nKPX oslash y -20\r\nKPX oslash yacute -20\r\nKPX oslash ydieresis -20\r\nKPX otilde v -20\r\nKPX otilde w -15\r\nKPX otilde x -30\r\nKPX otilde y -20\r\nKPX otilde yacute -20\r\nKPX otilde ydieresis -20\r\nKPX p y -15\r\nKPX p yacute -15\r\nKPX p ydieresis -15\r\nKPX period quotedblright -120\r\nKPX period quoteright -120\r\nKPX period space -40\r\nKPX quotedblright space -80\r\nKPX quoteleft quoteleft -46\r\nKPX quoteright d -80\r\nKPX quoteright dcroat -80\r\nKPX quoteright l -20\r\nKPX quoteright lacute -20\r\nKPX quoteright lcommaaccent -20\r\nKPX quoteright lslash -20\r\nKPX quoteright quoteright -46\r\nKPX quoteright r -40\r\nKPX quoteright racute -40\r\nKPX quoteright rcaron -40\r\nKPX quoteright rcommaaccent -40\r\nKPX quoteright s -60\r\nKPX quoteright sacute -60\r\nKPX quoteright scaron -60\r\nKPX quoteright scedilla -60\r\nKPX quoteright scommaaccent -60\r\nKPX quoteright space -80\r\nKPX quoteright v -20\r\nKPX r c -20\r\nKPX r cacute -20\r\nKPX r ccaron -20\r\nKPX r ccedilla -20\r\nKPX r comma -60\r\nKPX r d -20\r\nKPX r dcroat -20\r\nKPX r g -15\r\nKPX r gbreve -15\r\nKPX r gcommaaccent -15\r\nKPX r hyphen -20\r\nKPX r o -20\r\nKPX r oacute -20\r\nKPX r ocircumflex -20\r\nKPX r odieresis -20\r\nKPX r ograve -20\r\nKPX r ohungarumlaut -20\r\nKPX r omacron -20\r\nKPX r oslash -20\r\nKPX r otilde -20\r\nKPX r period -60\r\nKPX r q -20\r\nKPX r s -15\r\nKPX r sacute -15\r\nKPX r scaron -15\r\nKPX r scedilla -15\r\nKPX r scommaaccent -15\r\nKPX r t 20\r\nKPX r tcommaaccent 20\r\nKPX r v 10\r\nKPX r y 10\r\nKPX r yacute 10\r\nKPX r ydieresis 10\r\nKPX racute c -20\r\nKPX racute cacute -20\r\nKPX racute ccaron -20\r\nKPX racute ccedilla -20\r\nKPX racute comma -60\r\nKPX racute d -20\r\nKPX racute dcroat -20\r\nKPX racute g -15\r\nKPX racute gbreve -15\r\nKPX racute gcommaaccent -15\r\nKPX racute hyphen -20\r\nKPX racute o -20\r\nKPX racute oacute -20\r\nKPX racute ocircumflex -20\r\nKPX racute odieresis -20\r\nKPX racute ograve -20\r\nKPX racute ohungarumlaut -20\r\nKPX racute omacron -20\r\nKPX racute oslash -20\r\nKPX racute otilde -20\r\nKPX racute period -60\r\nKPX racute q -20\r\nKPX racute s -15\r\nKPX racute sacute -15\r\nKPX racute scaron -15\r\nKPX racute scedilla -15\r\nKPX racute scommaaccent -15\r\nKPX racute t 20\r\nKPX racute tcommaaccent 20\r\nKPX racute v 10\r\nKPX racute y 10\r\nKPX racute yacute 10\r\nKPX racute ydieresis 10\r\nKPX rcaron c -20\r\nKPX rcaron cacute -20\r\nKPX rcaron ccaron -20\r\nKPX rcaron ccedilla -20\r\nKPX rcaron comma -60\r\nKPX rcaron d -20\r\nKPX rcaron dcroat -20\r\nKPX rcaron g -15\r\nKPX rcaron gbreve -15\r\nKPX rcaron gcommaaccent -15\r\nKPX rcaron hyphen -20\r\nKPX rcaron o -20\r\nKPX rcaron oacute -20\r\nKPX rcaron ocircumflex -20\r\nKPX rcaron odieresis -20\r\nKPX rcaron ograve -20\r\nKPX rcaron ohungarumlaut -20\r\nKPX rcaron omacron -20\r\nKPX rcaron oslash -20\r\nKPX rcaron otilde -20\r\nKPX rcaron period -60\r\nKPX rcaron q -20\r\nKPX rcaron s -15\r\nKPX rcaron sacute -15\r\nKPX rcaron scaron -15\r\nKPX rcaron scedilla -15\r\nKPX rcaron scommaaccent -15\r\nKPX rcaron t 20\r\nKPX rcaron tcommaaccent 20\r\nKPX rcaron v 10\r\nKPX rcaron y 10\r\nKPX rcaron yacute 10\r\nKPX rcaron ydieresis 10\r\nKPX rcommaaccent c -20\r\nKPX rcommaaccent cacute -20\r\nKPX rcommaaccent ccaron -20\r\nKPX rcommaaccent ccedilla -20\r\nKPX rcommaaccent comma -60\r\nKPX rcommaaccent d -20\r\nKPX rcommaaccent dcroat -20\r\nKPX rcommaaccent g -15\r\nKPX rcommaaccent gbreve -15\r\nKPX rcommaaccent gcommaaccent -15\r\nKPX rcommaaccent hyphen -20\r\nKPX rcommaaccent o -20\r\nKPX rcommaaccent oacute -20\r\nKPX rcommaaccent ocircumflex -20\r\nKPX rcommaaccent odieresis -20\r\nKPX rcommaaccent ograve -20\r\nKPX rcommaaccent ohungarumlaut -20\r\nKPX rcommaaccent omacron -20\r\nKPX rcommaaccent oslash -20\r\nKPX rcommaaccent otilde -20\r\nKPX rcommaaccent period -60\r\nKPX rcommaaccent q -20\r\nKPX rcommaaccent s -15\r\nKPX rcommaaccent sacute -15\r\nKPX rcommaaccent scaron -15\r\nKPX rcommaaccent scedilla -15\r\nKPX rcommaaccent scommaaccent -15\r\nKPX rcommaaccent t 20\r\nKPX rcommaaccent tcommaaccent 20\r\nKPX rcommaaccent v 10\r\nKPX rcommaaccent y 10\r\nKPX rcommaaccent yacute 10\r\nKPX rcommaaccent ydieresis 10\r\nKPX s w -15\r\nKPX sacute w -15\r\nKPX scaron w -15\r\nKPX scedilla w -15\r\nKPX scommaaccent w -15\r\nKPX semicolon space -40\r\nKPX space T -100\r\nKPX space Tcaron -100\r\nKPX space Tcommaaccent -100\r\nKPX space V -80\r\nKPX space W -80\r\nKPX space Y -120\r\nKPX space Yacute -120\r\nKPX space Ydieresis -120\r\nKPX space quotedblleft -80\r\nKPX space quoteleft -60\r\nKPX v a -20\r\nKPX v aacute -20\r\nKPX v abreve -20\r\nKPX v acircumflex -20\r\nKPX v adieresis -20\r\nKPX v agrave -20\r\nKPX v amacron -20\r\nKPX v aogonek -20\r\nKPX v aring -20\r\nKPX v atilde -20\r\nKPX v comma -80\r\nKPX v o -30\r\nKPX v oacute -30\r\nKPX v ocircumflex -30\r\nKPX v odieresis -30\r\nKPX v ograve -30\r\nKPX v ohungarumlaut -30\r\nKPX v omacron -30\r\nKPX v oslash -30\r\nKPX v otilde -30\r\nKPX v period -80\r\nKPX w comma -40\r\nKPX w o -20\r\nKPX w oacute -20\r\nKPX w ocircumflex -20\r\nKPX w odieresis -20\r\nKPX w ograve -20\r\nKPX w ohungarumlaut -20\r\nKPX w omacron -20\r\nKPX w oslash -20\r\nKPX w otilde -20\r\nKPX w period -40\r\nKPX x e -10\r\nKPX x eacute -10\r\nKPX x ecaron -10\r\nKPX x ecircumflex -10\r\nKPX x edieresis -10\r\nKPX x edotaccent -10\r\nKPX x egrave -10\r\nKPX x emacron -10\r\nKPX x eogonek -10\r\nKPX y a -30\r\nKPX y aacute -30\r\nKPX y abreve -30\r\nKPX y acircumflex -30\r\nKPX y adieresis -30\r\nKPX y agrave -30\r\nKPX y amacron -30\r\nKPX y aogonek -30\r\nKPX y aring -30\r\nKPX y atilde -30\r\nKPX y comma -80\r\nKPX y e -10\r\nKPX y eacute -10\r\nKPX y ecaron -10\r\nKPX y ecircumflex -10\r\nKPX y edieresis -10\r\nKPX y edotaccent -10\r\nKPX y egrave -10\r\nKPX y emacron -10\r\nKPX y eogonek -10\r\nKPX y o -25\r\nKPX y oacute -25\r\nKPX y ocircumflex -25\r\nKPX y odieresis -25\r\nKPX y ograve -25\r\nKPX y ohungarumlaut -25\r\nKPX y omacron -25\r\nKPX y oslash -25\r\nKPX y otilde -25\r\nKPX y period -80\r\nKPX yacute a -30\r\nKPX yacute aacute -30\r\nKPX yacute abreve -30\r\nKPX yacute acircumflex -30\r\nKPX yacute adieresis -30\r\nKPX yacute agrave -30\r\nKPX yacute amacron -30\r\nKPX yacute aogonek -30\r\nKPX yacute aring -30\r\nKPX yacute atilde -30\r\nKPX yacute comma -80\r\nKPX yacute e -10\r\nKPX yacute eacute -10\r\nKPX yacute ecaron -10\r\nKPX yacute ecircumflex -10\r\nKPX yacute edieresis -10\r\nKPX yacute edotaccent -10\r\nKPX yacute egrave -10\r\nKPX yacute emacron -10\r\nKPX yacute eogonek -10\r\nKPX yacute o -25\r\nKPX yacute oacute -25\r\nKPX yacute ocircumflex -25\r\nKPX yacute odieresis -25\r\nKPX yacute ograve -25\r\nKPX yacute ohungarumlaut -25\r\nKPX yacute omacron -25\r\nKPX yacute oslash -25\r\nKPX yacute otilde -25\r\nKPX yacute period -80\r\nKPX ydieresis a -30\r\nKPX ydieresis aacute -30\r\nKPX ydieresis abreve -30\r\nKPX ydieresis acircumflex -30\r\nKPX ydieresis adieresis -30\r\nKPX ydieresis agrave -30\r\nKPX ydieresis amacron -30\r\nKPX ydieresis aogonek -30\r\nKPX ydieresis aring -30\r\nKPX ydieresis atilde -30\r\nKPX ydieresis comma -80\r\nKPX ydieresis e -10\r\nKPX ydieresis eacute -10\r\nKPX ydieresis ecaron -10\r\nKPX ydieresis ecircumflex -10\r\nKPX ydieresis edieresis -10\r\nKPX ydieresis edotaccent -10\r\nKPX ydieresis egrave -10\r\nKPX ydieresis emacron -10\r\nKPX ydieresis eogonek -10\r\nKPX ydieresis o -25\r\nKPX ydieresis oacute -25\r\nKPX ydieresis ocircumflex -25\r\nKPX ydieresis odieresis -25\r\nKPX ydieresis ograve -25\r\nKPX ydieresis ohungarumlaut -25\r\nKPX ydieresis omacron -25\r\nKPX ydieresis oslash -25\r\nKPX ydieresis otilde -25\r\nKPX ydieresis period -80\r\nKPX z e 10\r\nKPX z eacute 10\r\nKPX z ecaron 10\r\nKPX z ecircumflex 10\r\nKPX z edieresis 10\r\nKPX z edotaccent 10\r\nKPX z egrave 10\r\nKPX z emacron 10\r\nKPX z eogonek 10\r\nKPX zacute e 10\r\nKPX zacute eacute 10\r\nKPX zacute ecaron 10\r\nKPX zacute ecircumflex 10\r\nKPX zacute edieresis 10\r\nKPX zacute edotaccent 10\r\nKPX zacute egrave 10\r\nKPX zacute emacron 10\r\nKPX zacute eogonek 10\r\nKPX zcaron e 10\r\nKPX zcaron eacute 10\r\nKPX zcaron ecaron 10\r\nKPX zcaron ecircumflex 10\r\nKPX zcaron edieresis 10\r\nKPX zcaron edotaccent 10\r\nKPX zcaron egrave 10\r\nKPX zcaron emacron 10\r\nKPX zcaron eogonek 10\r\nKPX zdotaccent e 10\r\nKPX zdotaccent eacute 10\r\nKPX zdotaccent ecaron 10\r\nKPX zdotaccent ecircumflex 10\r\nKPX zdotaccent edieresis 10\r\nKPX zdotaccent edotaccent 10\r\nKPX zdotaccent egrave 10\r\nKPX zdotaccent emacron 10\r\nKPX zdotaccent eogonek 10\r\nEndKernPairs\r\nEndKernData\r\nEndFontMetrics\r\n";
2493 },
2494 'Times-Roman'() {
2495 return "StartFontMetrics 4.1\r\nComment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 12:49:17 1997\r\nComment UniqueID 43068\r\nComment VMusage 43909 54934\r\nFontName Times-Roman\r\nFullName Times Roman\r\nFamilyName Times\r\nWeight Roman\r\nItalicAngle 0\r\nIsFixedPitch false\r\nCharacterSet ExtendedRoman\r\nFontBBox -168 -218 1000 898 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 002.000\r\nNotice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 662\r\nXHeight 450\r\nAscender 683\r\nDescender -217\r\nStdHW 28\r\nStdVW 84\r\nStartCharMetrics 315\r\nC 32 ; WX 250 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 333 ; N exclam ; B 130 -9 238 676 ;\r\nC 34 ; WX 408 ; N quotedbl ; B 77 431 331 676 ;\r\nC 35 ; WX 500 ; N numbersign ; B 5 0 496 662 ;\r\nC 36 ; WX 500 ; N dollar ; B 44 -87 457 727 ;\r\nC 37 ; WX 833 ; N percent ; B 61 -13 772 676 ;\r\nC 38 ; WX 778 ; N ampersand ; B 42 -13 750 676 ;\r\nC 39 ; WX 333 ; N quoteright ; B 79 433 218 676 ;\r\nC 40 ; WX 333 ; N parenleft ; B 48 -177 304 676 ;\r\nC 41 ; WX 333 ; N parenright ; B 29 -177 285 676 ;\r\nC 42 ; WX 500 ; N asterisk ; B 69 265 432 676 ;\r\nC 43 ; WX 564 ; N plus ; B 30 0 534 506 ;\r\nC 44 ; WX 250 ; N comma ; B 56 -141 195 102 ;\r\nC 45 ; WX 333 ; N hyphen ; B 39 194 285 257 ;\r\nC 46 ; WX 250 ; N period ; B 70 -11 181 100 ;\r\nC 47 ; WX 278 ; N slash ; B -9 -14 287 676 ;\r\nC 48 ; WX 500 ; N zero ; B 24 -14 476 676 ;\r\nC 49 ; WX 500 ; N one ; B 111 0 394 676 ;\r\nC 50 ; WX 500 ; N two ; B 30 0 475 676 ;\r\nC 51 ; WX 500 ; N three ; B 43 -14 431 676 ;\r\nC 52 ; WX 500 ; N four ; B 12 0 472 676 ;\r\nC 53 ; WX 500 ; N five ; B 32 -14 438 688 ;\r\nC 54 ; WX 500 ; N six ; B 34 -14 468 684 ;\r\nC 55 ; WX 500 ; N seven ; B 20 -8 449 662 ;\r\nC 56 ; WX 500 ; N eight ; B 56 -14 445 676 ;\r\nC 57 ; WX 500 ; N nine ; B 30 -22 459 676 ;\r\nC 58 ; WX 278 ; N colon ; B 81 -11 192 459 ;\r\nC 59 ; WX 278 ; N semicolon ; B 80 -141 219 459 ;\r\nC 60 ; WX 564 ; N less ; B 28 -8 536 514 ;\r\nC 61 ; WX 564 ; N equal ; B 30 120 534 386 ;\r\nC 62 ; WX 564 ; N greater ; B 28 -8 536 514 ;\r\nC 63 ; WX 444 ; N question ; B 68 -8 414 676 ;\r\nC 64 ; WX 921 ; N at ; B 116 -14 809 676 ;\r\nC 65 ; WX 722 ; N A ; B 15 0 706 674 ;\r\nC 66 ; WX 667 ; N B ; B 17 0 593 662 ;\r\nC 67 ; WX 667 ; N C ; B 28 -14 633 676 ;\r\nC 68 ; WX 722 ; N D ; B 16 0 685 662 ;\r\nC 69 ; WX 611 ; N E ; B 12 0 597 662 ;\r\nC 70 ; WX 556 ; N F ; B 12 0 546 662 ;\r\nC 71 ; WX 722 ; N G ; B 32 -14 709 676 ;\r\nC 72 ; WX 722 ; N H ; B 19 0 702 662 ;\r\nC 73 ; WX 333 ; N I ; B 18 0 315 662 ;\r\nC 74 ; WX 389 ; N J ; B 10 -14 370 662 ;\r\nC 75 ; WX 722 ; N K ; B 34 0 723 662 ;\r\nC 76 ; WX 611 ; N L ; B 12 0 598 662 ;\r\nC 77 ; WX 889 ; N M ; B 12 0 863 662 ;\r\nC 78 ; WX 722 ; N N ; B 12 -11 707 662 ;\r\nC 79 ; WX 722 ; N O ; B 34 -14 688 676 ;\r\nC 80 ; WX 556 ; N P ; B 16 0 542 662 ;\r\nC 81 ; WX 722 ; N Q ; B 34 -178 701 676 ;\r\nC 82 ; WX 667 ; N R ; B 17 0 659 662 ;\r\nC 83 ; WX 556 ; N S ; B 42 -14 491 676 ;\r\nC 84 ; WX 611 ; N T ; B 17 0 593 662 ;\r\nC 85 ; WX 722 ; N U ; B 14 -14 705 662 ;\r\nC 86 ; WX 722 ; N V ; B 16 -11 697 662 ;\r\nC 87 ; WX 944 ; N W ; B 5 -11 932 662 ;\r\nC 88 ; WX 722 ; N X ; B 10 0 704 662 ;\r\nC 89 ; WX 722 ; N Y ; B 22 0 703 662 ;\r\nC 90 ; WX 611 ; N Z ; B 9 0 597 662 ;\r\nC 91 ; WX 333 ; N bracketleft ; B 88 -156 299 662 ;\r\nC 92 ; WX 278 ; N backslash ; B -9 -14 287 676 ;\r\nC 93 ; WX 333 ; N bracketright ; B 34 -156 245 662 ;\r\nC 94 ; WX 469 ; N asciicircum ; B 24 297 446 662 ;\r\nC 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;\r\nC 96 ; WX 333 ; N quoteleft ; B 115 433 254 676 ;\r\nC 97 ; WX 444 ; N a ; B 37 -10 442 460 ;\r\nC 98 ; WX 500 ; N b ; B 3 -10 468 683 ;\r\nC 99 ; WX 444 ; N c ; B 25 -10 412 460 ;\r\nC 100 ; WX 500 ; N d ; B 27 -10 491 683 ;\r\nC 101 ; WX 444 ; N e ; B 25 -10 424 460 ;\r\nC 102 ; WX 333 ; N f ; B 20 0 383 683 ; L i fi ; L l fl ;\r\nC 103 ; WX 500 ; N g ; B 28 -218 470 460 ;\r\nC 104 ; WX 500 ; N h ; B 9 0 487 683 ;\r\nC 105 ; WX 278 ; N i ; B 16 0 253 683 ;\r\nC 106 ; WX 278 ; N j ; B -70 -218 194 683 ;\r\nC 107 ; WX 500 ; N k ; B 7 0 505 683 ;\r\nC 108 ; WX 278 ; N l ; B 19 0 257 683 ;\r\nC 109 ; WX 778 ; N m ; B 16 0 775 460 ;\r\nC 110 ; WX 500 ; N n ; B 16 0 485 460 ;\r\nC 111 ; WX 500 ; N o ; B 29 -10 470 460 ;\r\nC 112 ; WX 500 ; N p ; B 5 -217 470 460 ;\r\nC 113 ; WX 500 ; N q ; B 24 -217 488 460 ;\r\nC 114 ; WX 333 ; N r ; B 5 0 335 460 ;\r\nC 115 ; WX 389 ; N s ; B 51 -10 348 460 ;\r\nC 116 ; WX 278 ; N t ; B 13 -10 279 579 ;\r\nC 117 ; WX 500 ; N u ; B 9 -10 479 450 ;\r\nC 118 ; WX 500 ; N v ; B 19 -14 477 450 ;\r\nC 119 ; WX 722 ; N w ; B 21 -14 694 450 ;\r\nC 120 ; WX 500 ; N x ; B 17 0 479 450 ;\r\nC 121 ; WX 500 ; N y ; B 14 -218 475 450 ;\r\nC 122 ; WX 444 ; N z ; B 27 0 418 450 ;\r\nC 123 ; WX 480 ; N braceleft ; B 100 -181 350 680 ;\r\nC 124 ; WX 200 ; N bar ; B 67 -218 133 782 ;\r\nC 125 ; WX 480 ; N braceright ; B 130 -181 380 680 ;\r\nC 126 ; WX 541 ; N asciitilde ; B 40 183 502 323 ;\r\nC 161 ; WX 333 ; N exclamdown ; B 97 -218 205 467 ;\r\nC 162 ; WX 500 ; N cent ; B 53 -138 448 579 ;\r\nC 163 ; WX 500 ; N sterling ; B 12 -8 490 676 ;\r\nC 164 ; WX 167 ; N fraction ; B -168 -14 331 676 ;\r\nC 165 ; WX 500 ; N yen ; B -53 0 512 662 ;\r\nC 166 ; WX 500 ; N florin ; B 7 -189 490 676 ;\r\nC 167 ; WX 500 ; N section ; B 70 -148 426 676 ;\r\nC 168 ; WX 500 ; N currency ; B -22 58 522 602 ;\r\nC 169 ; WX 180 ; N quotesingle ; B 48 431 133 676 ;\r\nC 170 ; WX 444 ; N quotedblleft ; B 43 433 414 676 ;\r\nC 171 ; WX 500 ; N guillemotleft ; B 42 33 456 416 ;\r\nC 172 ; WX 333 ; N guilsinglleft ; B 63 33 285 416 ;\r\nC 173 ; WX 333 ; N guilsinglright ; B 48 33 270 416 ;\r\nC 174 ; WX 556 ; N fi ; B 31 0 521 683 ;\r\nC 175 ; WX 556 ; N fl ; B 32 0 521 683 ;\r\nC 177 ; WX 500 ; N endash ; B 0 201 500 250 ;\r\nC 178 ; WX 500 ; N dagger ; B 59 -149 442 676 ;\r\nC 179 ; WX 500 ; N daggerdbl ; B 58 -153 442 676 ;\r\nC 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ;\r\nC 182 ; WX 453 ; N paragraph ; B -22 -154 450 662 ;\r\nC 183 ; WX 350 ; N bullet ; B 40 196 310 466 ;\r\nC 184 ; WX 333 ; N quotesinglbase ; B 79 -141 218 102 ;\r\nC 185 ; WX 444 ; N quotedblbase ; B 45 -141 416 102 ;\r\nC 186 ; WX 444 ; N quotedblright ; B 30 433 401 676 ;\r\nC 187 ; WX 500 ; N guillemotright ; B 44 33 458 416 ;\r\nC 188 ; WX 1000 ; N ellipsis ; B 111 -11 888 100 ;\r\nC 189 ; WX 1000 ; N perthousand ; B 7 -19 994 706 ;\r\nC 191 ; WX 444 ; N questiondown ; B 30 -218 376 466 ;\r\nC 193 ; WX 333 ; N grave ; B 19 507 242 678 ;\r\nC 194 ; WX 333 ; N acute ; B 93 507 317 678 ;\r\nC 195 ; WX 333 ; N circumflex ; B 11 507 322 674 ;\r\nC 196 ; WX 333 ; N tilde ; B 1 532 331 638 ;\r\nC 197 ; WX 333 ; N macron ; B 11 547 322 601 ;\r\nC 198 ; WX 333 ; N breve ; B 26 507 307 664 ;\r\nC 199 ; WX 333 ; N dotaccent ; B 118 581 216 681 ;\r\nC 200 ; WX 333 ; N dieresis ; B 18 581 315 681 ;\r\nC 202 ; WX 333 ; N ring ; B 67 512 266 711 ;\r\nC 203 ; WX 333 ; N cedilla ; B 52 -215 261 0 ;\r\nC 205 ; WX 333 ; N hungarumlaut ; B -3 507 377 678 ;\r\nC 206 ; WX 333 ; N ogonek ; B 62 -165 243 0 ;\r\nC 207 ; WX 333 ; N caron ; B 11 507 322 674 ;\r\nC 208 ; WX 1000 ; N emdash ; B 0 201 1000 250 ;\r\nC 225 ; WX 889 ; N AE ; B 0 0 863 662 ;\r\nC 227 ; WX 276 ; N ordfeminine ; B 4 394 270 676 ;\r\nC 232 ; WX 611 ; N Lslash ; B 12 0 598 662 ;\r\nC 233 ; WX 722 ; N Oslash ; B 34 -80 688 734 ;\r\nC 234 ; WX 889 ; N OE ; B 30 -6 885 668 ;\r\nC 235 ; WX 310 ; N ordmasculine ; B 6 394 304 676 ;\r\nC 241 ; WX 667 ; N ae ; B 38 -10 632 460 ;\r\nC 245 ; WX 278 ; N dotlessi ; B 16 0 253 460 ;\r\nC 248 ; WX 278 ; N lslash ; B 19 0 259 683 ;\r\nC 249 ; WX 500 ; N oslash ; B 29 -112 470 551 ;\r\nC 250 ; WX 722 ; N oe ; B 30 -10 690 460 ;\r\nC 251 ; WX 500 ; N germandbls ; B 12 -9 468 683 ;\r\nC -1 ; WX 333 ; N Idieresis ; B 18 0 315 835 ;\r\nC -1 ; WX 444 ; N eacute ; B 25 -10 424 678 ;\r\nC -1 ; WX 444 ; N abreve ; B 37 -10 442 664 ;\r\nC -1 ; WX 500 ; N uhungarumlaut ; B 9 -10 501 678 ;\r\nC -1 ; WX 444 ; N ecaron ; B 25 -10 424 674 ;\r\nC -1 ; WX 722 ; N Ydieresis ; B 22 0 703 835 ;\r\nC -1 ; WX 564 ; N divide ; B 30 -10 534 516 ;\r\nC -1 ; WX 722 ; N Yacute ; B 22 0 703 890 ;\r\nC -1 ; WX 722 ; N Acircumflex ; B 15 0 706 886 ;\r\nC -1 ; WX 444 ; N aacute ; B 37 -10 442 678 ;\r\nC -1 ; WX 722 ; N Ucircumflex ; B 14 -14 705 886 ;\r\nC -1 ; WX 500 ; N yacute ; B 14 -218 475 678 ;\r\nC -1 ; WX 389 ; N scommaaccent ; B 51 -218 348 460 ;\r\nC -1 ; WX 444 ; N ecircumflex ; B 25 -10 424 674 ;\r\nC -1 ; WX 722 ; N Uring ; B 14 -14 705 898 ;\r\nC -1 ; WX 722 ; N Udieresis ; B 14 -14 705 835 ;\r\nC -1 ; WX 444 ; N aogonek ; B 37 -165 469 460 ;\r\nC -1 ; WX 722 ; N Uacute ; B 14 -14 705 890 ;\r\nC -1 ; WX 500 ; N uogonek ; B 9 -155 487 450 ;\r\nC -1 ; WX 611 ; N Edieresis ; B 12 0 597 835 ;\r\nC -1 ; WX 722 ; N Dcroat ; B 16 0 685 662 ;\r\nC -1 ; WX 250 ; N commaaccent ; B 59 -218 184 -50 ;\r\nC -1 ; WX 760 ; N copyright ; B 38 -14 722 676 ;\r\nC -1 ; WX 611 ; N Emacron ; B 12 0 597 813 ;\r\nC -1 ; WX 444 ; N ccaron ; B 25 -10 412 674 ;\r\nC -1 ; WX 444 ; N aring ; B 37 -10 442 711 ;\r\nC -1 ; WX 722 ; N Ncommaaccent ; B 12 -198 707 662 ;\r\nC -1 ; WX 278 ; N lacute ; B 19 0 290 890 ;\r\nC -1 ; WX 444 ; N agrave ; B 37 -10 442 678 ;\r\nC -1 ; WX 611 ; N Tcommaaccent ; B 17 -218 593 662 ;\r\nC -1 ; WX 667 ; N Cacute ; B 28 -14 633 890 ;\r\nC -1 ; WX 444 ; N atilde ; B 37 -10 442 638 ;\r\nC -1 ; WX 611 ; N Edotaccent ; B 12 0 597 835 ;\r\nC -1 ; WX 389 ; N scaron ; B 39 -10 350 674 ;\r\nC -1 ; WX 389 ; N scedilla ; B 51 -215 348 460 ;\r\nC -1 ; WX 278 ; N iacute ; B 16 0 290 678 ;\r\nC -1 ; WX 471 ; N lozenge ; B 13 0 459 724 ;\r\nC -1 ; WX 667 ; N Rcaron ; B 17 0 659 886 ;\r\nC -1 ; WX 722 ; N Gcommaaccent ; B 32 -218 709 676 ;\r\nC -1 ; WX 500 ; N ucircumflex ; B 9 -10 479 674 ;\r\nC -1 ; WX 444 ; N acircumflex ; B 37 -10 442 674 ;\r\nC -1 ; WX 722 ; N Amacron ; B 15 0 706 813 ;\r\nC -1 ; WX 333 ; N rcaron ; B 5 0 335 674 ;\r\nC -1 ; WX 444 ; N ccedilla ; B 25 -215 412 460 ;\r\nC -1 ; WX 611 ; N Zdotaccent ; B 9 0 597 835 ;\r\nC -1 ; WX 556 ; N Thorn ; B 16 0 542 662 ;\r\nC -1 ; WX 722 ; N Omacron ; B 34 -14 688 813 ;\r\nC -1 ; WX 667 ; N Racute ; B 17 0 659 890 ;\r\nC -1 ; WX 556 ; N Sacute ; B 42 -14 491 890 ;\r\nC -1 ; WX 588 ; N dcaron ; B 27 -10 589 695 ;\r\nC -1 ; WX 722 ; N Umacron ; B 14 -14 705 813 ;\r\nC -1 ; WX 500 ; N uring ; B 9 -10 479 711 ;\r\nC -1 ; WX 300 ; N threesuperior ; B 15 262 291 676 ;\r\nC -1 ; WX 722 ; N Ograve ; B 34 -14 688 890 ;\r\nC -1 ; WX 722 ; N Agrave ; B 15 0 706 890 ;\r\nC -1 ; WX 722 ; N Abreve ; B 15 0 706 876 ;\r\nC -1 ; WX 564 ; N multiply ; B 38 8 527 497 ;\r\nC -1 ; WX 500 ; N uacute ; B 9 -10 479 678 ;\r\nC -1 ; WX 611 ; N Tcaron ; B 17 0 593 886 ;\r\nC -1 ; WX 476 ; N partialdiff ; B 17 -38 459 710 ;\r\nC -1 ; WX 500 ; N ydieresis ; B 14 -218 475 623 ;\r\nC -1 ; WX 722 ; N Nacute ; B 12 -11 707 890 ;\r\nC -1 ; WX 278 ; N icircumflex ; B -16 0 295 674 ;\r\nC -1 ; WX 611 ; N Ecircumflex ; B 12 0 597 886 ;\r\nC -1 ; WX 444 ; N adieresis ; B 37 -10 442 623 ;\r\nC -1 ; WX 444 ; N edieresis ; B 25 -10 424 623 ;\r\nC -1 ; WX 444 ; N cacute ; B 25 -10 413 678 ;\r\nC -1 ; WX 500 ; N nacute ; B 16 0 485 678 ;\r\nC -1 ; WX 500 ; N umacron ; B 9 -10 479 601 ;\r\nC -1 ; WX 722 ; N Ncaron ; B 12 -11 707 886 ;\r\nC -1 ; WX 333 ; N Iacute ; B 18 0 317 890 ;\r\nC -1 ; WX 564 ; N plusminus ; B 30 0 534 506 ;\r\nC -1 ; WX 200 ; N brokenbar ; B 67 -143 133 707 ;\r\nC -1 ; WX 760 ; N registered ; B 38 -14 722 676 ;\r\nC -1 ; WX 722 ; N Gbreve ; B 32 -14 709 876 ;\r\nC -1 ; WX 333 ; N Idotaccent ; B 18 0 315 835 ;\r\nC -1 ; WX 600 ; N summation ; B 15 -10 585 706 ;\r\nC -1 ; WX 611 ; N Egrave ; B 12 0 597 890 ;\r\nC -1 ; WX 333 ; N racute ; B 5 0 335 678 ;\r\nC -1 ; WX 500 ; N omacron ; B 29 -10 470 601 ;\r\nC -1 ; WX 611 ; N Zacute ; B 9 0 597 890 ;\r\nC -1 ; WX 611 ; N Zcaron ; B 9 0 597 886 ;\r\nC -1 ; WX 549 ; N greaterequal ; B 26 0 523 666 ;\r\nC -1 ; WX 722 ; N Eth ; B 16 0 685 662 ;\r\nC -1 ; WX 667 ; N Ccedilla ; B 28 -215 633 676 ;\r\nC -1 ; WX 278 ; N lcommaaccent ; B 19 -218 257 683 ;\r\nC -1 ; WX 326 ; N tcaron ; B 13 -10 318 722 ;\r\nC -1 ; WX 444 ; N eogonek ; B 25 -165 424 460 ;\r\nC -1 ; WX 722 ; N Uogonek ; B 14 -165 705 662 ;\r\nC -1 ; WX 722 ; N Aacute ; B 15 0 706 890 ;\r\nC -1 ; WX 722 ; N Adieresis ; B 15 0 706 835 ;\r\nC -1 ; WX 444 ; N egrave ; B 25 -10 424 678 ;\r\nC -1 ; WX 444 ; N zacute ; B 27 0 418 678 ;\r\nC -1 ; WX 278 ; N iogonek ; B 16 -165 265 683 ;\r\nC -1 ; WX 722 ; N Oacute ; B 34 -14 688 890 ;\r\nC -1 ; WX 500 ; N oacute ; B 29 -10 470 678 ;\r\nC -1 ; WX 444 ; N amacron ; B 37 -10 442 601 ;\r\nC -1 ; WX 389 ; N sacute ; B 51 -10 348 678 ;\r\nC -1 ; WX 278 ; N idieresis ; B -9 0 288 623 ;\r\nC -1 ; WX 722 ; N Ocircumflex ; B 34 -14 688 886 ;\r\nC -1 ; WX 722 ; N Ugrave ; B 14 -14 705 890 ;\r\nC -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;\r\nC -1 ; WX 500 ; N thorn ; B 5 -217 470 683 ;\r\nC -1 ; WX 300 ; N twosuperior ; B 1 270 296 676 ;\r\nC -1 ; WX 722 ; N Odieresis ; B 34 -14 688 835 ;\r\nC -1 ; WX 500 ; N mu ; B 36 -218 512 450 ;\r\nC -1 ; WX 278 ; N igrave ; B -8 0 253 678 ;\r\nC -1 ; WX 500 ; N ohungarumlaut ; B 29 -10 491 678 ;\r\nC -1 ; WX 611 ; N Eogonek ; B 12 -165 597 662 ;\r\nC -1 ; WX 500 ; N dcroat ; B 27 -10 500 683 ;\r\nC -1 ; WX 750 ; N threequarters ; B 15 -14 718 676 ;\r\nC -1 ; WX 556 ; N Scedilla ; B 42 -215 491 676 ;\r\nC -1 ; WX 344 ; N lcaron ; B 19 0 347 695 ;\r\nC -1 ; WX 722 ; N Kcommaaccent ; B 34 -198 723 662 ;\r\nC -1 ; WX 611 ; N Lacute ; B 12 0 598 890 ;\r\nC -1 ; WX 980 ; N trademark ; B 30 256 957 662 ;\r\nC -1 ; WX 444 ; N edotaccent ; B 25 -10 424 623 ;\r\nC -1 ; WX 333 ; N Igrave ; B 18 0 315 890 ;\r\nC -1 ; WX 333 ; N Imacron ; B 11 0 322 813 ;\r\nC -1 ; WX 611 ; N Lcaron ; B 12 0 598 676 ;\r\nC -1 ; WX 750 ; N onehalf ; B 31 -14 746 676 ;\r\nC -1 ; WX 549 ; N lessequal ; B 26 0 523 666 ;\r\nC -1 ; WX 500 ; N ocircumflex ; B 29 -10 470 674 ;\r\nC -1 ; WX 500 ; N ntilde ; B 16 0 485 638 ;\r\nC -1 ; WX 722 ; N Uhungarumlaut ; B 14 -14 705 890 ;\r\nC -1 ; WX 611 ; N Eacute ; B 12 0 597 890 ;\r\nC -1 ; WX 444 ; N emacron ; B 25 -10 424 601 ;\r\nC -1 ; WX 500 ; N gbreve ; B 28 -218 470 664 ;\r\nC -1 ; WX 750 ; N onequarter ; B 37 -14 718 676 ;\r\nC -1 ; WX 556 ; N Scaron ; B 42 -14 491 886 ;\r\nC -1 ; WX 556 ; N Scommaaccent ; B 42 -218 491 676 ;\r\nC -1 ; WX 722 ; N Ohungarumlaut ; B 34 -14 688 890 ;\r\nC -1 ; WX 400 ; N degree ; B 57 390 343 676 ;\r\nC -1 ; WX 500 ; N ograve ; B 29 -10 470 678 ;\r\nC -1 ; WX 667 ; N Ccaron ; B 28 -14 633 886 ;\r\nC -1 ; WX 500 ; N ugrave ; B 9 -10 479 678 ;\r\nC -1 ; WX 453 ; N radical ; B 2 -60 452 768 ;\r\nC -1 ; WX 722 ; N Dcaron ; B 16 0 685 886 ;\r\nC -1 ; WX 333 ; N rcommaaccent ; B 5 -218 335 460 ;\r\nC -1 ; WX 722 ; N Ntilde ; B 12 -11 707 850 ;\r\nC -1 ; WX 500 ; N otilde ; B 29 -10 470 638 ;\r\nC -1 ; WX 667 ; N Rcommaaccent ; B 17 -198 659 662 ;\r\nC -1 ; WX 611 ; N Lcommaaccent ; B 12 -218 598 662 ;\r\nC -1 ; WX 722 ; N Atilde ; B 15 0 706 850 ;\r\nC -1 ; WX 722 ; N Aogonek ; B 15 -165 738 674 ;\r\nC -1 ; WX 722 ; N Aring ; B 15 0 706 898 ;\r\nC -1 ; WX 722 ; N Otilde ; B 34 -14 688 850 ;\r\nC -1 ; WX 444 ; N zdotaccent ; B 27 0 418 623 ;\r\nC -1 ; WX 611 ; N Ecaron ; B 12 0 597 886 ;\r\nC -1 ; WX 333 ; N Iogonek ; B 18 -165 315 662 ;\r\nC -1 ; WX 500 ; N kcommaaccent ; B 7 -218 505 683 ;\r\nC -1 ; WX 564 ; N minus ; B 30 220 534 286 ;\r\nC -1 ; WX 333 ; N Icircumflex ; B 11 0 322 886 ;\r\nC -1 ; WX 500 ; N ncaron ; B 16 0 485 674 ;\r\nC -1 ; WX 278 ; N tcommaaccent ; B 13 -218 279 579 ;\r\nC -1 ; WX 564 ; N logicalnot ; B 30 108 534 386 ;\r\nC -1 ; WX 500 ; N odieresis ; B 29 -10 470 623 ;\r\nC -1 ; WX 500 ; N udieresis ; B 9 -10 479 623 ;\r\nC -1 ; WX 549 ; N notequal ; B 12 -31 537 547 ;\r\nC -1 ; WX 500 ; N gcommaaccent ; B 28 -218 470 749 ;\r\nC -1 ; WX 500 ; N eth ; B 29 -10 471 686 ;\r\nC -1 ; WX 444 ; N zcaron ; B 27 0 418 674 ;\r\nC -1 ; WX 500 ; N ncommaaccent ; B 16 -218 485 460 ;\r\nC -1 ; WX 300 ; N onesuperior ; B 57 270 248 676 ;\r\nC -1 ; WX 278 ; N imacron ; B 6 0 271 601 ;\r\nC -1 ; WX 500 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nStartKernData\r\nStartKernPairs 2073\r\nKPX A C -40\r\nKPX A Cacute -40\r\nKPX A Ccaron -40\r\nKPX A Ccedilla -40\r\nKPX A G -40\r\nKPX A Gbreve -40\r\nKPX A Gcommaaccent -40\r\nKPX A O -55\r\nKPX A Oacute -55\r\nKPX A Ocircumflex -55\r\nKPX A Odieresis -55\r\nKPX A Ograve -55\r\nKPX A Ohungarumlaut -55\r\nKPX A Omacron -55\r\nKPX A Oslash -55\r\nKPX A Otilde -55\r\nKPX A Q -55\r\nKPX A T -111\r\nKPX A Tcaron -111\r\nKPX A Tcommaaccent -111\r\nKPX A U -55\r\nKPX A Uacute -55\r\nKPX A Ucircumflex -55\r\nKPX A Udieresis -55\r\nKPX A Ugrave -55\r\nKPX A Uhungarumlaut -55\r\nKPX A Umacron -55\r\nKPX A Uogonek -55\r\nKPX A Uring -55\r\nKPX A V -135\r\nKPX A W -90\r\nKPX A Y -105\r\nKPX A Yacute -105\r\nKPX A Ydieresis -105\r\nKPX A quoteright -111\r\nKPX A v -74\r\nKPX A w -92\r\nKPX A y -92\r\nKPX A yacute -92\r\nKPX A ydieresis -92\r\nKPX Aacute C -40\r\nKPX Aacute Cacute -40\r\nKPX Aacute Ccaron -40\r\nKPX Aacute Ccedilla -40\r\nKPX Aacute G -40\r\nKPX Aacute Gbreve -40\r\nKPX Aacute Gcommaaccent -40\r\nKPX Aacute O -55\r\nKPX Aacute Oacute -55\r\nKPX Aacute Ocircumflex -55\r\nKPX Aacute Odieresis -55\r\nKPX Aacute Ograve -55\r\nKPX Aacute Ohungarumlaut -55\r\nKPX Aacute Omacron -55\r\nKPX Aacute Oslash -55\r\nKPX Aacute Otilde -55\r\nKPX Aacute Q -55\r\nKPX Aacute T -111\r\nKPX Aacute Tcaron -111\r\nKPX Aacute Tcommaaccent -111\r\nKPX Aacute U -55\r\nKPX Aacute Uacute -55\r\nKPX Aacute Ucircumflex -55\r\nKPX Aacute Udieresis -55\r\nKPX Aacute Ugrave -55\r\nKPX Aacute Uhungarumlaut -55\r\nKPX Aacute Umacron -55\r\nKPX Aacute Uogonek -55\r\nKPX Aacute Uring -55\r\nKPX Aacute V -135\r\nKPX Aacute W -90\r\nKPX Aacute Y -105\r\nKPX Aacute Yacute -105\r\nKPX Aacute Ydieresis -105\r\nKPX Aacute quoteright -111\r\nKPX Aacute v -74\r\nKPX Aacute w -92\r\nKPX Aacute y -92\r\nKPX Aacute yacute -92\r\nKPX Aacute ydieresis -92\r\nKPX Abreve C -40\r\nKPX Abreve Cacute -40\r\nKPX Abreve Ccaron -40\r\nKPX Abreve Ccedilla -40\r\nKPX Abreve G -40\r\nKPX Abreve Gbreve -40\r\nKPX Abreve Gcommaaccent -40\r\nKPX Abreve O -55\r\nKPX Abreve Oacute -55\r\nKPX Abreve Ocircumflex -55\r\nKPX Abreve Odieresis -55\r\nKPX Abreve Ograve -55\r\nKPX Abreve Ohungarumlaut -55\r\nKPX Abreve Omacron -55\r\nKPX Abreve Oslash -55\r\nKPX Abreve Otilde -55\r\nKPX Abreve Q -55\r\nKPX Abreve T -111\r\nKPX Abreve Tcaron -111\r\nKPX Abreve Tcommaaccent -111\r\nKPX Abreve U -55\r\nKPX Abreve Uacute -55\r\nKPX Abreve Ucircumflex -55\r\nKPX Abreve Udieresis -55\r\nKPX Abreve Ugrave -55\r\nKPX Abreve Uhungarumlaut -55\r\nKPX Abreve Umacron -55\r\nKPX Abreve Uogonek -55\r\nKPX Abreve Uring -55\r\nKPX Abreve V -135\r\nKPX Abreve W -90\r\nKPX Abreve Y -105\r\nKPX Abreve Yacute -105\r\nKPX Abreve Ydieresis -105\r\nKPX Abreve quoteright -111\r\nKPX Abreve v -74\r\nKPX Abreve w -92\r\nKPX Abreve y -92\r\nKPX Abreve yacute -92\r\nKPX Abreve ydieresis -92\r\nKPX Acircumflex C -40\r\nKPX Acircumflex Cacute -40\r\nKPX Acircumflex Ccaron -40\r\nKPX Acircumflex Ccedilla -40\r\nKPX Acircumflex G -40\r\nKPX Acircumflex Gbreve -40\r\nKPX Acircumflex Gcommaaccent -40\r\nKPX Acircumflex O -55\r\nKPX Acircumflex Oacute -55\r\nKPX Acircumflex Ocircumflex -55\r\nKPX Acircumflex Odieresis -55\r\nKPX Acircumflex Ograve -55\r\nKPX Acircumflex Ohungarumlaut -55\r\nKPX Acircumflex Omacron -55\r\nKPX Acircumflex Oslash -55\r\nKPX Acircumflex Otilde -55\r\nKPX Acircumflex Q -55\r\nKPX Acircumflex T -111\r\nKPX Acircumflex Tcaron -111\r\nKPX Acircumflex Tcommaaccent -111\r\nKPX Acircumflex U -55\r\nKPX Acircumflex Uacute -55\r\nKPX Acircumflex Ucircumflex -55\r\nKPX Acircumflex Udieresis -55\r\nKPX Acircumflex Ugrave -55\r\nKPX Acircumflex Uhungarumlaut -55\r\nKPX Acircumflex Umacron -55\r\nKPX Acircumflex Uogonek -55\r\nKPX Acircumflex Uring -55\r\nKPX Acircumflex V -135\r\nKPX Acircumflex W -90\r\nKPX Acircumflex Y -105\r\nKPX Acircumflex Yacute -105\r\nKPX Acircumflex Ydieresis -105\r\nKPX Acircumflex quoteright -111\r\nKPX Acircumflex v -74\r\nKPX Acircumflex w -92\r\nKPX Acircumflex y -92\r\nKPX Acircumflex yacute -92\r\nKPX Acircumflex ydieresis -92\r\nKPX Adieresis C -40\r\nKPX Adieresis Cacute -40\r\nKPX Adieresis Ccaron -40\r\nKPX Adieresis Ccedilla -40\r\nKPX Adieresis G -40\r\nKPX Adieresis Gbreve -40\r\nKPX Adieresis Gcommaaccent -40\r\nKPX Adieresis O -55\r\nKPX Adieresis Oacute -55\r\nKPX Adieresis Ocircumflex -55\r\nKPX Adieresis Odieresis -55\r\nKPX Adieresis Ograve -55\r\nKPX Adieresis Ohungarumlaut -55\r\nKPX Adieresis Omacron -55\r\nKPX Adieresis Oslash -55\r\nKPX Adieresis Otilde -55\r\nKPX Adieresis Q -55\r\nKPX Adieresis T -111\r\nKPX Adieresis Tcaron -111\r\nKPX Adieresis Tcommaaccent -111\r\nKPX Adieresis U -55\r\nKPX Adieresis Uacute -55\r\nKPX Adieresis Ucircumflex -55\r\nKPX Adieresis Udieresis -55\r\nKPX Adieresis Ugrave -55\r\nKPX Adieresis Uhungarumlaut -55\r\nKPX Adieresis Umacron -55\r\nKPX Adieresis Uogonek -55\r\nKPX Adieresis Uring -55\r\nKPX Adieresis V -135\r\nKPX Adieresis W -90\r\nKPX Adieresis Y -105\r\nKPX Adieresis Yacute -105\r\nKPX Adieresis Ydieresis -105\r\nKPX Adieresis quoteright -111\r\nKPX Adieresis v -74\r\nKPX Adieresis w -92\r\nKPX Adieresis y -92\r\nKPX Adieresis yacute -92\r\nKPX Adieresis ydieresis -92\r\nKPX Agrave C -40\r\nKPX Agrave Cacute -40\r\nKPX Agrave Ccaron -40\r\nKPX Agrave Ccedilla -40\r\nKPX Agrave G -40\r\nKPX Agrave Gbreve -40\r\nKPX Agrave Gcommaaccent -40\r\nKPX Agrave O -55\r\nKPX Agrave Oacute -55\r\nKPX Agrave Ocircumflex -55\r\nKPX Agrave Odieresis -55\r\nKPX Agrave Ograve -55\r\nKPX Agrave Ohungarumlaut -55\r\nKPX Agrave Omacron -55\r\nKPX Agrave Oslash -55\r\nKPX Agrave Otilde -55\r\nKPX Agrave Q -55\r\nKPX Agrave T -111\r\nKPX Agrave Tcaron -111\r\nKPX Agrave Tcommaaccent -111\r\nKPX Agrave U -55\r\nKPX Agrave Uacute -55\r\nKPX Agrave Ucircumflex -55\r\nKPX Agrave Udieresis -55\r\nKPX Agrave Ugrave -55\r\nKPX Agrave Uhungarumlaut -55\r\nKPX Agrave Umacron -55\r\nKPX Agrave Uogonek -55\r\nKPX Agrave Uring -55\r\nKPX Agrave V -135\r\nKPX Agrave W -90\r\nKPX Agrave Y -105\r\nKPX Agrave Yacute -105\r\nKPX Agrave Ydieresis -105\r\nKPX Agrave quoteright -111\r\nKPX Agrave v -74\r\nKPX Agrave w -92\r\nKPX Agrave y -92\r\nKPX Agrave yacute -92\r\nKPX Agrave ydieresis -92\r\nKPX Amacron C -40\r\nKPX Amacron Cacute -40\r\nKPX Amacron Ccaron -40\r\nKPX Amacron Ccedilla -40\r\nKPX Amacron G -40\r\nKPX Amacron Gbreve -40\r\nKPX Amacron Gcommaaccent -40\r\nKPX Amacron O -55\r\nKPX Amacron Oacute -55\r\nKPX Amacron Ocircumflex -55\r\nKPX Amacron Odieresis -55\r\nKPX Amacron Ograve -55\r\nKPX Amacron Ohungarumlaut -55\r\nKPX Amacron Omacron -55\r\nKPX Amacron Oslash -55\r\nKPX Amacron Otilde -55\r\nKPX Amacron Q -55\r\nKPX Amacron T -111\r\nKPX Amacron Tcaron -111\r\nKPX Amacron Tcommaaccent -111\r\nKPX Amacron U -55\r\nKPX Amacron Uacute -55\r\nKPX Amacron Ucircumflex -55\r\nKPX Amacron Udieresis -55\r\nKPX Amacron Ugrave -55\r\nKPX Amacron Uhungarumlaut -55\r\nKPX Amacron Umacron -55\r\nKPX Amacron Uogonek -55\r\nKPX Amacron Uring -55\r\nKPX Amacron V -135\r\nKPX Amacron W -90\r\nKPX Amacron Y -105\r\nKPX Amacron Yacute -105\r\nKPX Amacron Ydieresis -105\r\nKPX Amacron quoteright -111\r\nKPX Amacron v -74\r\nKPX Amacron w -92\r\nKPX Amacron y -92\r\nKPX Amacron yacute -92\r\nKPX Amacron ydieresis -92\r\nKPX Aogonek C -40\r\nKPX Aogonek Cacute -40\r\nKPX Aogonek Ccaron -40\r\nKPX Aogonek Ccedilla -40\r\nKPX Aogonek G -40\r\nKPX Aogonek Gbreve -40\r\nKPX Aogonek Gcommaaccent -40\r\nKPX Aogonek O -55\r\nKPX Aogonek Oacute -55\r\nKPX Aogonek Ocircumflex -55\r\nKPX Aogonek Odieresis -55\r\nKPX Aogonek Ograve -55\r\nKPX Aogonek Ohungarumlaut -55\r\nKPX Aogonek Omacron -55\r\nKPX Aogonek Oslash -55\r\nKPX Aogonek Otilde -55\r\nKPX Aogonek Q -55\r\nKPX Aogonek T -111\r\nKPX Aogonek Tcaron -111\r\nKPX Aogonek Tcommaaccent -111\r\nKPX Aogonek U -55\r\nKPX Aogonek Uacute -55\r\nKPX Aogonek Ucircumflex -55\r\nKPX Aogonek Udieresis -55\r\nKPX Aogonek Ugrave -55\r\nKPX Aogonek Uhungarumlaut -55\r\nKPX Aogonek Umacron -55\r\nKPX Aogonek Uogonek -55\r\nKPX Aogonek Uring -55\r\nKPX Aogonek V -135\r\nKPX Aogonek W -90\r\nKPX Aogonek Y -105\r\nKPX Aogonek Yacute -105\r\nKPX Aogonek Ydieresis -105\r\nKPX Aogonek quoteright -111\r\nKPX Aogonek v -74\r\nKPX Aogonek w -52\r\nKPX Aogonek y -52\r\nKPX Aogonek yacute -52\r\nKPX Aogonek ydieresis -52\r\nKPX Aring C -40\r\nKPX Aring Cacute -40\r\nKPX Aring Ccaron -40\r\nKPX Aring Ccedilla -40\r\nKPX Aring G -40\r\nKPX Aring Gbreve -40\r\nKPX Aring Gcommaaccent -40\r\nKPX Aring O -55\r\nKPX Aring Oacute -55\r\nKPX Aring Ocircumflex -55\r\nKPX Aring Odieresis -55\r\nKPX Aring Ograve -55\r\nKPX Aring Ohungarumlaut -55\r\nKPX Aring Omacron -55\r\nKPX Aring Oslash -55\r\nKPX Aring Otilde -55\r\nKPX Aring Q -55\r\nKPX Aring T -111\r\nKPX Aring Tcaron -111\r\nKPX Aring Tcommaaccent -111\r\nKPX Aring U -55\r\nKPX Aring Uacute -55\r\nKPX Aring Ucircumflex -55\r\nKPX Aring Udieresis -55\r\nKPX Aring Ugrave -55\r\nKPX Aring Uhungarumlaut -55\r\nKPX Aring Umacron -55\r\nKPX Aring Uogonek -55\r\nKPX Aring Uring -55\r\nKPX Aring V -135\r\nKPX Aring W -90\r\nKPX Aring Y -105\r\nKPX Aring Yacute -105\r\nKPX Aring Ydieresis -105\r\nKPX Aring quoteright -111\r\nKPX Aring v -74\r\nKPX Aring w -92\r\nKPX Aring y -92\r\nKPX Aring yacute -92\r\nKPX Aring ydieresis -92\r\nKPX Atilde C -40\r\nKPX Atilde Cacute -40\r\nKPX Atilde Ccaron -40\r\nKPX Atilde Ccedilla -40\r\nKPX Atilde G -40\r\nKPX Atilde Gbreve -40\r\nKPX Atilde Gcommaaccent -40\r\nKPX Atilde O -55\r\nKPX Atilde Oacute -55\r\nKPX Atilde Ocircumflex -55\r\nKPX Atilde Odieresis -55\r\nKPX Atilde Ograve -55\r\nKPX Atilde Ohungarumlaut -55\r\nKPX Atilde Omacron -55\r\nKPX Atilde Oslash -55\r\nKPX Atilde Otilde -55\r\nKPX Atilde Q -55\r\nKPX Atilde T -111\r\nKPX Atilde Tcaron -111\r\nKPX Atilde Tcommaaccent -111\r\nKPX Atilde U -55\r\nKPX Atilde Uacute -55\r\nKPX Atilde Ucircumflex -55\r\nKPX Atilde Udieresis -55\r\nKPX Atilde Ugrave -55\r\nKPX Atilde Uhungarumlaut -55\r\nKPX Atilde Umacron -55\r\nKPX Atilde Uogonek -55\r\nKPX Atilde Uring -55\r\nKPX Atilde V -135\r\nKPX Atilde W -90\r\nKPX Atilde Y -105\r\nKPX Atilde Yacute -105\r\nKPX Atilde Ydieresis -105\r\nKPX Atilde quoteright -111\r\nKPX Atilde v -74\r\nKPX Atilde w -92\r\nKPX Atilde y -92\r\nKPX Atilde yacute -92\r\nKPX Atilde ydieresis -92\r\nKPX B A -35\r\nKPX B Aacute -35\r\nKPX B Abreve -35\r\nKPX B Acircumflex -35\r\nKPX B Adieresis -35\r\nKPX B Agrave -35\r\nKPX B Amacron -35\r\nKPX B Aogonek -35\r\nKPX B Aring -35\r\nKPX B Atilde -35\r\nKPX B U -10\r\nKPX B Uacute -10\r\nKPX B Ucircumflex -10\r\nKPX B Udieresis -10\r\nKPX B Ugrave -10\r\nKPX B Uhungarumlaut -10\r\nKPX B Umacron -10\r\nKPX B Uogonek -10\r\nKPX B Uring -10\r\nKPX D A -40\r\nKPX D Aacute -40\r\nKPX D Abreve -40\r\nKPX D Acircumflex -40\r\nKPX D Adieresis -40\r\nKPX D Agrave -40\r\nKPX D Amacron -40\r\nKPX D Aogonek -40\r\nKPX D Aring -40\r\nKPX D Atilde -40\r\nKPX D V -40\r\nKPX D W -30\r\nKPX D Y -55\r\nKPX D Yacute -55\r\nKPX D Ydieresis -55\r\nKPX Dcaron A -40\r\nKPX Dcaron Aacute -40\r\nKPX Dcaron Abreve -40\r\nKPX Dcaron Acircumflex -40\r\nKPX Dcaron Adieresis -40\r\nKPX Dcaron Agrave -40\r\nKPX Dcaron Amacron -40\r\nKPX Dcaron Aogonek -40\r\nKPX Dcaron Aring -40\r\nKPX Dcaron Atilde -40\r\nKPX Dcaron V -40\r\nKPX Dcaron W -30\r\nKPX Dcaron Y -55\r\nKPX Dcaron Yacute -55\r\nKPX Dcaron Ydieresis -55\r\nKPX Dcroat A -40\r\nKPX Dcroat Aacute -40\r\nKPX Dcroat Abreve -40\r\nKPX Dcroat Acircumflex -40\r\nKPX Dcroat Adieresis -40\r\nKPX Dcroat Agrave -40\r\nKPX Dcroat Amacron -40\r\nKPX Dcroat Aogonek -40\r\nKPX Dcroat Aring -40\r\nKPX Dcroat Atilde -40\r\nKPX Dcroat V -40\r\nKPX Dcroat W -30\r\nKPX Dcroat Y -55\r\nKPX Dcroat Yacute -55\r\nKPX Dcroat Ydieresis -55\r\nKPX F A -74\r\nKPX F Aacute -74\r\nKPX F Abreve -74\r\nKPX F Acircumflex -74\r\nKPX F Adieresis -74\r\nKPX F Agrave -74\r\nKPX F Amacron -74\r\nKPX F Aogonek -74\r\nKPX F Aring -74\r\nKPX F Atilde -74\r\nKPX F a -15\r\nKPX F aacute -15\r\nKPX F abreve -15\r\nKPX F acircumflex -15\r\nKPX F adieresis -15\r\nKPX F agrave -15\r\nKPX F amacron -15\r\nKPX F aogonek -15\r\nKPX F aring -15\r\nKPX F atilde -15\r\nKPX F comma -80\r\nKPX F o -15\r\nKPX F oacute -15\r\nKPX F ocircumflex -15\r\nKPX F odieresis -15\r\nKPX F ograve -15\r\nKPX F ohungarumlaut -15\r\nKPX F omacron -15\r\nKPX F oslash -15\r\nKPX F otilde -15\r\nKPX F period -80\r\nKPX J A -60\r\nKPX J Aacute -60\r\nKPX J Abreve -60\r\nKPX J Acircumflex -60\r\nKPX J Adieresis -60\r\nKPX J Agrave -60\r\nKPX J Amacron -60\r\nKPX J Aogonek -60\r\nKPX J Aring -60\r\nKPX J Atilde -60\r\nKPX K O -30\r\nKPX K Oacute -30\r\nKPX K Ocircumflex -30\r\nKPX K Odieresis -30\r\nKPX K Ograve -30\r\nKPX K Ohungarumlaut -30\r\nKPX K Omacron -30\r\nKPX K Oslash -30\r\nKPX K Otilde -30\r\nKPX K e -25\r\nKPX K eacute -25\r\nKPX K ecaron -25\r\nKPX K ecircumflex -25\r\nKPX K edieresis -25\r\nKPX K edotaccent -25\r\nKPX K egrave -25\r\nKPX K emacron -25\r\nKPX K eogonek -25\r\nKPX K o -35\r\nKPX K oacute -35\r\nKPX K ocircumflex -35\r\nKPX K odieresis -35\r\nKPX K ograve -35\r\nKPX K ohungarumlaut -35\r\nKPX K omacron -35\r\nKPX K oslash -35\r\nKPX K otilde -35\r\nKPX K u -15\r\nKPX K uacute -15\r\nKPX K ucircumflex -15\r\nKPX K udieresis -15\r\nKPX K ugrave -15\r\nKPX K uhungarumlaut -15\r\nKPX K umacron -15\r\nKPX K uogonek -15\r\nKPX K uring -15\r\nKPX K y -25\r\nKPX K yacute -25\r\nKPX K ydieresis -25\r\nKPX Kcommaaccent O -30\r\nKPX Kcommaaccent Oacute -30\r\nKPX Kcommaaccent Ocircumflex -30\r\nKPX Kcommaaccent Odieresis -30\r\nKPX Kcommaaccent Ograve -30\r\nKPX Kcommaaccent Ohungarumlaut -30\r\nKPX Kcommaaccent Omacron -30\r\nKPX Kcommaaccent Oslash -30\r\nKPX Kcommaaccent Otilde -30\r\nKPX Kcommaaccent e -25\r\nKPX Kcommaaccent eacute -25\r\nKPX Kcommaaccent ecaron -25\r\nKPX Kcommaaccent ecircumflex -25\r\nKPX Kcommaaccent edieresis -25\r\nKPX Kcommaaccent edotaccent -25\r\nKPX Kcommaaccent egrave -25\r\nKPX Kcommaaccent emacron -25\r\nKPX Kcommaaccent eogonek -25\r\nKPX Kcommaaccent o -35\r\nKPX Kcommaaccent oacute -35\r\nKPX Kcommaaccent ocircumflex -35\r\nKPX Kcommaaccent odieresis -35\r\nKPX Kcommaaccent ograve -35\r\nKPX Kcommaaccent ohungarumlaut -35\r\nKPX Kcommaaccent omacron -35\r\nKPX Kcommaaccent oslash -35\r\nKPX Kcommaaccent otilde -35\r\nKPX Kcommaaccent u -15\r\nKPX Kcommaaccent uacute -15\r\nKPX Kcommaaccent ucircumflex -15\r\nKPX Kcommaaccent udieresis -15\r\nKPX Kcommaaccent ugrave -15\r\nKPX Kcommaaccent uhungarumlaut -15\r\nKPX Kcommaaccent umacron -15\r\nKPX Kcommaaccent uogonek -15\r\nKPX Kcommaaccent uring -15\r\nKPX Kcommaaccent y -25\r\nKPX Kcommaaccent yacute -25\r\nKPX Kcommaaccent ydieresis -25\r\nKPX L T -92\r\nKPX L Tcaron -92\r\nKPX L Tcommaaccent -92\r\nKPX L V -100\r\nKPX L W -74\r\nKPX L Y -100\r\nKPX L Yacute -100\r\nKPX L Ydieresis -100\r\nKPX L quoteright -92\r\nKPX L y -55\r\nKPX L yacute -55\r\nKPX L ydieresis -55\r\nKPX Lacute T -92\r\nKPX Lacute Tcaron -92\r\nKPX Lacute Tcommaaccent -92\r\nKPX Lacute V -100\r\nKPX Lacute W -74\r\nKPX Lacute Y -100\r\nKPX Lacute Yacute -100\r\nKPX Lacute Ydieresis -100\r\nKPX Lacute quoteright -92\r\nKPX Lacute y -55\r\nKPX Lacute yacute -55\r\nKPX Lacute ydieresis -55\r\nKPX Lcaron quoteright -92\r\nKPX Lcaron y -55\r\nKPX Lcaron yacute -55\r\nKPX Lcaron ydieresis -55\r\nKPX Lcommaaccent T -92\r\nKPX Lcommaaccent Tcaron -92\r\nKPX Lcommaaccent Tcommaaccent -92\r\nKPX Lcommaaccent V -100\r\nKPX Lcommaaccent W -74\r\nKPX Lcommaaccent Y -100\r\nKPX Lcommaaccent Yacute -100\r\nKPX Lcommaaccent Ydieresis -100\r\nKPX Lcommaaccent quoteright -92\r\nKPX Lcommaaccent y -55\r\nKPX Lcommaaccent yacute -55\r\nKPX Lcommaaccent ydieresis -55\r\nKPX Lslash T -92\r\nKPX Lslash Tcaron -92\r\nKPX Lslash Tcommaaccent -92\r\nKPX Lslash V -100\r\nKPX Lslash W -74\r\nKPX Lslash Y -100\r\nKPX Lslash Yacute -100\r\nKPX Lslash Ydieresis -100\r\nKPX Lslash quoteright -92\r\nKPX Lslash y -55\r\nKPX Lslash yacute -55\r\nKPX Lslash ydieresis -55\r\nKPX N A -35\r\nKPX N Aacute -35\r\nKPX N Abreve -35\r\nKPX N Acircumflex -35\r\nKPX N Adieresis -35\r\nKPX N Agrave -35\r\nKPX N Amacron -35\r\nKPX N Aogonek -35\r\nKPX N Aring -35\r\nKPX N Atilde -35\r\nKPX Nacute A -35\r\nKPX Nacute Aacute -35\r\nKPX Nacute Abreve -35\r\nKPX Nacute Acircumflex -35\r\nKPX Nacute Adieresis -35\r\nKPX Nacute Agrave -35\r\nKPX Nacute Amacron -35\r\nKPX Nacute Aogonek -35\r\nKPX Nacute Aring -35\r\nKPX Nacute Atilde -35\r\nKPX Ncaron A -35\r\nKPX Ncaron Aacute -35\r\nKPX Ncaron Abreve -35\r\nKPX Ncaron Acircumflex -35\r\nKPX Ncaron Adieresis -35\r\nKPX Ncaron Agrave -35\r\nKPX Ncaron Amacron -35\r\nKPX Ncaron Aogonek -35\r\nKPX Ncaron Aring -35\r\nKPX Ncaron Atilde -35\r\nKPX Ncommaaccent A -35\r\nKPX Ncommaaccent Aacute -35\r\nKPX Ncommaaccent Abreve -35\r\nKPX Ncommaaccent Acircumflex -35\r\nKPX Ncommaaccent Adieresis -35\r\nKPX Ncommaaccent Agrave -35\r\nKPX Ncommaaccent Amacron -35\r\nKPX Ncommaaccent Aogonek -35\r\nKPX Ncommaaccent Aring -35\r\nKPX Ncommaaccent Atilde -35\r\nKPX Ntilde A -35\r\nKPX Ntilde Aacute -35\r\nKPX Ntilde Abreve -35\r\nKPX Ntilde Acircumflex -35\r\nKPX Ntilde Adieresis -35\r\nKPX Ntilde Agrave -35\r\nKPX Ntilde Amacron -35\r\nKPX Ntilde Aogonek -35\r\nKPX Ntilde Aring -35\r\nKPX Ntilde Atilde -35\r\nKPX O A -35\r\nKPX O Aacute -35\r\nKPX O Abreve -35\r\nKPX O Acircumflex -35\r\nKPX O Adieresis -35\r\nKPX O Agrave -35\r\nKPX O Amacron -35\r\nKPX O Aogonek -35\r\nKPX O Aring -35\r\nKPX O Atilde -35\r\nKPX O T -40\r\nKPX O Tcaron -40\r\nKPX O Tcommaaccent -40\r\nKPX O V -50\r\nKPX O W -35\r\nKPX O X -40\r\nKPX O Y -50\r\nKPX O Yacute -50\r\nKPX O Ydieresis -50\r\nKPX Oacute A -35\r\nKPX Oacute Aacute -35\r\nKPX Oacute Abreve -35\r\nKPX Oacute Acircumflex -35\r\nKPX Oacute Adieresis -35\r\nKPX Oacute Agrave -35\r\nKPX Oacute Amacron -35\r\nKPX Oacute Aogonek -35\r\nKPX Oacute Aring -35\r\nKPX Oacute Atilde -35\r\nKPX Oacute T -40\r\nKPX Oacute Tcaron -40\r\nKPX Oacute Tcommaaccent -40\r\nKPX Oacute V -50\r\nKPX Oacute W -35\r\nKPX Oacute X -40\r\nKPX Oacute Y -50\r\nKPX Oacute Yacute -50\r\nKPX Oacute Ydieresis -50\r\nKPX Ocircumflex A -35\r\nKPX Ocircumflex Aacute -35\r\nKPX Ocircumflex Abreve -35\r\nKPX Ocircumflex Acircumflex -35\r\nKPX Ocircumflex Adieresis -35\r\nKPX Ocircumflex Agrave -35\r\nKPX Ocircumflex Amacron -35\r\nKPX Ocircumflex Aogonek -35\r\nKPX Ocircumflex Aring -35\r\nKPX Ocircumflex Atilde -35\r\nKPX Ocircumflex T -40\r\nKPX Ocircumflex Tcaron -40\r\nKPX Ocircumflex Tcommaaccent -40\r\nKPX Ocircumflex V -50\r\nKPX Ocircumflex W -35\r\nKPX Ocircumflex X -40\r\nKPX Ocircumflex Y -50\r\nKPX Ocircumflex Yacute -50\r\nKPX Ocircumflex Ydieresis -50\r\nKPX Odieresis A -35\r\nKPX Odieresis Aacute -35\r\nKPX Odieresis Abreve -35\r\nKPX Odieresis Acircumflex -35\r\nKPX Odieresis Adieresis -35\r\nKPX Odieresis Agrave -35\r\nKPX Odieresis Amacron -35\r\nKPX Odieresis Aogonek -35\r\nKPX Odieresis Aring -35\r\nKPX Odieresis Atilde -35\r\nKPX Odieresis T -40\r\nKPX Odieresis Tcaron -40\r\nKPX Odieresis Tcommaaccent -40\r\nKPX Odieresis V -50\r\nKPX Odieresis W -35\r\nKPX Odieresis X -40\r\nKPX Odieresis Y -50\r\nKPX Odieresis Yacute -50\r\nKPX Odieresis Ydieresis -50\r\nKPX Ograve A -35\r\nKPX Ograve Aacute -35\r\nKPX Ograve Abreve -35\r\nKPX Ograve Acircumflex -35\r\nKPX Ograve Adieresis -35\r\nKPX Ograve Agrave -35\r\nKPX Ograve Amacron -35\r\nKPX Ograve Aogonek -35\r\nKPX Ograve Aring -35\r\nKPX Ograve Atilde -35\r\nKPX Ograve T -40\r\nKPX Ograve Tcaron -40\r\nKPX Ograve Tcommaaccent -40\r\nKPX Ograve V -50\r\nKPX Ograve W -35\r\nKPX Ograve X -40\r\nKPX Ograve Y -50\r\nKPX Ograve Yacute -50\r\nKPX Ograve Ydieresis -50\r\nKPX Ohungarumlaut A -35\r\nKPX Ohungarumlaut Aacute -35\r\nKPX Ohungarumlaut Abreve -35\r\nKPX Ohungarumlaut Acircumflex -35\r\nKPX Ohungarumlaut Adieresis -35\r\nKPX Ohungarumlaut Agrave -35\r\nKPX Ohungarumlaut Amacron -35\r\nKPX Ohungarumlaut Aogonek -35\r\nKPX Ohungarumlaut Aring -35\r\nKPX Ohungarumlaut Atilde -35\r\nKPX Ohungarumlaut T -40\r\nKPX Ohungarumlaut Tcaron -40\r\nKPX Ohungarumlaut Tcommaaccent -40\r\nKPX Ohungarumlaut V -50\r\nKPX Ohungarumlaut W -35\r\nKPX Ohungarumlaut X -40\r\nKPX Ohungarumlaut Y -50\r\nKPX Ohungarumlaut Yacute -50\r\nKPX Ohungarumlaut Ydieresis -50\r\nKPX Omacron A -35\r\nKPX Omacron Aacute -35\r\nKPX Omacron Abreve -35\r\nKPX Omacron Acircumflex -35\r\nKPX Omacron Adieresis -35\r\nKPX Omacron Agrave -35\r\nKPX Omacron Amacron -35\r\nKPX Omacron Aogonek -35\r\nKPX Omacron Aring -35\r\nKPX Omacron Atilde -35\r\nKPX Omacron T -40\r\nKPX Omacron Tcaron -40\r\nKPX Omacron Tcommaaccent -40\r\nKPX Omacron V -50\r\nKPX Omacron W -35\r\nKPX Omacron X -40\r\nKPX Omacron Y -50\r\nKPX Omacron Yacute -50\r\nKPX Omacron Ydieresis -50\r\nKPX Oslash A -35\r\nKPX Oslash Aacute -35\r\nKPX Oslash Abreve -35\r\nKPX Oslash Acircumflex -35\r\nKPX Oslash Adieresis -35\r\nKPX Oslash Agrave -35\r\nKPX Oslash Amacron -35\r\nKPX Oslash Aogonek -35\r\nKPX Oslash Aring -35\r\nKPX Oslash Atilde -35\r\nKPX Oslash T -40\r\nKPX Oslash Tcaron -40\r\nKPX Oslash Tcommaaccent -40\r\nKPX Oslash V -50\r\nKPX Oslash W -35\r\nKPX Oslash X -40\r\nKPX Oslash Y -50\r\nKPX Oslash Yacute -50\r\nKPX Oslash Ydieresis -50\r\nKPX Otilde A -35\r\nKPX Otilde Aacute -35\r\nKPX Otilde Abreve -35\r\nKPX Otilde Acircumflex -35\r\nKPX Otilde Adieresis -35\r\nKPX Otilde Agrave -35\r\nKPX Otilde Amacron -35\r\nKPX Otilde Aogonek -35\r\nKPX Otilde Aring -35\r\nKPX Otilde Atilde -35\r\nKPX Otilde T -40\r\nKPX Otilde Tcaron -40\r\nKPX Otilde Tcommaaccent -40\r\nKPX Otilde V -50\r\nKPX Otilde W -35\r\nKPX Otilde X -40\r\nKPX Otilde Y -50\r\nKPX Otilde Yacute -50\r\nKPX Otilde Ydieresis -50\r\nKPX P A -92\r\nKPX P Aacute -92\r\nKPX P Abreve -92\r\nKPX P Acircumflex -92\r\nKPX P Adieresis -92\r\nKPX P Agrave -92\r\nKPX P Amacron -92\r\nKPX P Aogonek -92\r\nKPX P Aring -92\r\nKPX P Atilde -92\r\nKPX P a -15\r\nKPX P aacute -15\r\nKPX P abreve -15\r\nKPX P acircumflex -15\r\nKPX P adieresis -15\r\nKPX P agrave -15\r\nKPX P amacron -15\r\nKPX P aogonek -15\r\nKPX P aring -15\r\nKPX P atilde -15\r\nKPX P comma -111\r\nKPX P period -111\r\nKPX Q U -10\r\nKPX Q Uacute -10\r\nKPX Q Ucircumflex -10\r\nKPX Q Udieresis -10\r\nKPX Q Ugrave -10\r\nKPX Q Uhungarumlaut -10\r\nKPX Q Umacron -10\r\nKPX Q Uogonek -10\r\nKPX Q Uring -10\r\nKPX R O -40\r\nKPX R Oacute -40\r\nKPX R Ocircumflex -40\r\nKPX R Odieresis -40\r\nKPX R Ograve -40\r\nKPX R Ohungarumlaut -40\r\nKPX R Omacron -40\r\nKPX R Oslash -40\r\nKPX R Otilde -40\r\nKPX R T -60\r\nKPX R Tcaron -60\r\nKPX R Tcommaaccent -60\r\nKPX R U -40\r\nKPX R Uacute -40\r\nKPX R Ucircumflex -40\r\nKPX R Udieresis -40\r\nKPX R Ugrave -40\r\nKPX R Uhungarumlaut -40\r\nKPX R Umacron -40\r\nKPX R Uogonek -40\r\nKPX R Uring -40\r\nKPX R V -80\r\nKPX R W -55\r\nKPX R Y -65\r\nKPX R Yacute -65\r\nKPX R Ydieresis -65\r\nKPX Racute O -40\r\nKPX Racute Oacute -40\r\nKPX Racute Ocircumflex -40\r\nKPX Racute Odieresis -40\r\nKPX Racute Ograve -40\r\nKPX Racute Ohungarumlaut -40\r\nKPX Racute Omacron -40\r\nKPX Racute Oslash -40\r\nKPX Racute Otilde -40\r\nKPX Racute T -60\r\nKPX Racute Tcaron -60\r\nKPX Racute Tcommaaccent -60\r\nKPX Racute U -40\r\nKPX Racute Uacute -40\r\nKPX Racute Ucircumflex -40\r\nKPX Racute Udieresis -40\r\nKPX Racute Ugrave -40\r\nKPX Racute Uhungarumlaut -40\r\nKPX Racute Umacron -40\r\nKPX Racute Uogonek -40\r\nKPX Racute Uring -40\r\nKPX Racute V -80\r\nKPX Racute W -55\r\nKPX Racute Y -65\r\nKPX Racute Yacute -65\r\nKPX Racute Ydieresis -65\r\nKPX Rcaron O -40\r\nKPX Rcaron Oacute -40\r\nKPX Rcaron Ocircumflex -40\r\nKPX Rcaron Odieresis -40\r\nKPX Rcaron Ograve -40\r\nKPX Rcaron Ohungarumlaut -40\r\nKPX Rcaron Omacron -40\r\nKPX Rcaron Oslash -40\r\nKPX Rcaron Otilde -40\r\nKPX Rcaron T -60\r\nKPX Rcaron Tcaron -60\r\nKPX Rcaron Tcommaaccent -60\r\nKPX Rcaron U -40\r\nKPX Rcaron Uacute -40\r\nKPX Rcaron Ucircumflex -40\r\nKPX Rcaron Udieresis -40\r\nKPX Rcaron Ugrave -40\r\nKPX Rcaron Uhungarumlaut -40\r\nKPX Rcaron Umacron -40\r\nKPX Rcaron Uogonek -40\r\nKPX Rcaron Uring -40\r\nKPX Rcaron V -80\r\nKPX Rcaron W -55\r\nKPX Rcaron Y -65\r\nKPX Rcaron Yacute -65\r\nKPX Rcaron Ydieresis -65\r\nKPX Rcommaaccent O -40\r\nKPX Rcommaaccent Oacute -40\r\nKPX Rcommaaccent Ocircumflex -40\r\nKPX Rcommaaccent Odieresis -40\r\nKPX Rcommaaccent Ograve -40\r\nKPX Rcommaaccent Ohungarumlaut -40\r\nKPX Rcommaaccent Omacron -40\r\nKPX Rcommaaccent Oslash -40\r\nKPX Rcommaaccent Otilde -40\r\nKPX Rcommaaccent T -60\r\nKPX Rcommaaccent Tcaron -60\r\nKPX Rcommaaccent Tcommaaccent -60\r\nKPX Rcommaaccent U -40\r\nKPX Rcommaaccent Uacute -40\r\nKPX Rcommaaccent Ucircumflex -40\r\nKPX Rcommaaccent Udieresis -40\r\nKPX Rcommaaccent Ugrave -40\r\nKPX Rcommaaccent Uhungarumlaut -40\r\nKPX Rcommaaccent Umacron -40\r\nKPX Rcommaaccent Uogonek -40\r\nKPX Rcommaaccent Uring -40\r\nKPX Rcommaaccent V -80\r\nKPX Rcommaaccent W -55\r\nKPX Rcommaaccent Y -65\r\nKPX Rcommaaccent Yacute -65\r\nKPX Rcommaaccent Ydieresis -65\r\nKPX T A -93\r\nKPX T Aacute -93\r\nKPX T Abreve -93\r\nKPX T Acircumflex -93\r\nKPX T Adieresis -93\r\nKPX T Agrave -93\r\nKPX T Amacron -93\r\nKPX T Aogonek -93\r\nKPX T Aring -93\r\nKPX T Atilde -93\r\nKPX T O -18\r\nKPX T Oacute -18\r\nKPX T Ocircumflex -18\r\nKPX T Odieresis -18\r\nKPX T Ograve -18\r\nKPX T Ohungarumlaut -18\r\nKPX T Omacron -18\r\nKPX T Oslash -18\r\nKPX T Otilde -18\r\nKPX T a -80\r\nKPX T aacute -80\r\nKPX T abreve -80\r\nKPX T acircumflex -80\r\nKPX T adieresis -40\r\nKPX T agrave -40\r\nKPX T amacron -40\r\nKPX T aogonek -80\r\nKPX T aring -80\r\nKPX T atilde -40\r\nKPX T colon -50\r\nKPX T comma -74\r\nKPX T e -70\r\nKPX T eacute -70\r\nKPX T ecaron -70\r\nKPX T ecircumflex -70\r\nKPX T edieresis -30\r\nKPX T edotaccent -70\r\nKPX T egrave -70\r\nKPX T emacron -30\r\nKPX T eogonek -70\r\nKPX T hyphen -92\r\nKPX T i -35\r\nKPX T iacute -35\r\nKPX T iogonek -35\r\nKPX T o -80\r\nKPX T oacute -80\r\nKPX T ocircumflex -80\r\nKPX T odieresis -80\r\nKPX T ograve -80\r\nKPX T ohungarumlaut -80\r\nKPX T omacron -80\r\nKPX T oslash -80\r\nKPX T otilde -80\r\nKPX T period -74\r\nKPX T r -35\r\nKPX T racute -35\r\nKPX T rcaron -35\r\nKPX T rcommaaccent -35\r\nKPX T semicolon -55\r\nKPX T u -45\r\nKPX T uacute -45\r\nKPX T ucircumflex -45\r\nKPX T udieresis -45\r\nKPX T ugrave -45\r\nKPX T uhungarumlaut -45\r\nKPX T umacron -45\r\nKPX T uogonek -45\r\nKPX T uring -45\r\nKPX T w -80\r\nKPX T y -80\r\nKPX T yacute -80\r\nKPX T ydieresis -80\r\nKPX Tcaron A -93\r\nKPX Tcaron Aacute -93\r\nKPX Tcaron Abreve -93\r\nKPX Tcaron Acircumflex -93\r\nKPX Tcaron Adieresis -93\r\nKPX Tcaron Agrave -93\r\nKPX Tcaron Amacron -93\r\nKPX Tcaron Aogonek -93\r\nKPX Tcaron Aring -93\r\nKPX Tcaron Atilde -93\r\nKPX Tcaron O -18\r\nKPX Tcaron Oacute -18\r\nKPX Tcaron Ocircumflex -18\r\nKPX Tcaron Odieresis -18\r\nKPX Tcaron Ograve -18\r\nKPX Tcaron Ohungarumlaut -18\r\nKPX Tcaron Omacron -18\r\nKPX Tcaron Oslash -18\r\nKPX Tcaron Otilde -18\r\nKPX Tcaron a -80\r\nKPX Tcaron aacute -80\r\nKPX Tcaron abreve -80\r\nKPX Tcaron acircumflex -80\r\nKPX Tcaron adieresis -40\r\nKPX Tcaron agrave -40\r\nKPX Tcaron amacron -40\r\nKPX Tcaron aogonek -80\r\nKPX Tcaron aring -80\r\nKPX Tcaron atilde -40\r\nKPX Tcaron colon -50\r\nKPX Tcaron comma -74\r\nKPX Tcaron e -70\r\nKPX Tcaron eacute -70\r\nKPX Tcaron ecaron -70\r\nKPX Tcaron ecircumflex -30\r\nKPX Tcaron edieresis -30\r\nKPX Tcaron edotaccent -70\r\nKPX Tcaron egrave -70\r\nKPX Tcaron emacron -30\r\nKPX Tcaron eogonek -70\r\nKPX Tcaron hyphen -92\r\nKPX Tcaron i -35\r\nKPX Tcaron iacute -35\r\nKPX Tcaron iogonek -35\r\nKPX Tcaron o -80\r\nKPX Tcaron oacute -80\r\nKPX Tcaron ocircumflex -80\r\nKPX Tcaron odieresis -80\r\nKPX Tcaron ograve -80\r\nKPX Tcaron ohungarumlaut -80\r\nKPX Tcaron omacron -80\r\nKPX Tcaron oslash -80\r\nKPX Tcaron otilde -80\r\nKPX Tcaron period -74\r\nKPX Tcaron r -35\r\nKPX Tcaron racute -35\r\nKPX Tcaron rcaron -35\r\nKPX Tcaron rcommaaccent -35\r\nKPX Tcaron semicolon -55\r\nKPX Tcaron u -45\r\nKPX Tcaron uacute -45\r\nKPX Tcaron ucircumflex -45\r\nKPX Tcaron udieresis -45\r\nKPX Tcaron ugrave -45\r\nKPX Tcaron uhungarumlaut -45\r\nKPX Tcaron umacron -45\r\nKPX Tcaron uogonek -45\r\nKPX Tcaron uring -45\r\nKPX Tcaron w -80\r\nKPX Tcaron y -80\r\nKPX Tcaron yacute -80\r\nKPX Tcaron ydieresis -80\r\nKPX Tcommaaccent A -93\r\nKPX Tcommaaccent Aacute -93\r\nKPX Tcommaaccent Abreve -93\r\nKPX Tcommaaccent Acircumflex -93\r\nKPX Tcommaaccent Adieresis -93\r\nKPX Tcommaaccent Agrave -93\r\nKPX Tcommaaccent Amacron -93\r\nKPX Tcommaaccent Aogonek -93\r\nKPX Tcommaaccent Aring -93\r\nKPX Tcommaaccent Atilde -93\r\nKPX Tcommaaccent O -18\r\nKPX Tcommaaccent Oacute -18\r\nKPX Tcommaaccent Ocircumflex -18\r\nKPX Tcommaaccent Odieresis -18\r\nKPX Tcommaaccent Ograve -18\r\nKPX Tcommaaccent Ohungarumlaut -18\r\nKPX Tcommaaccent Omacron -18\r\nKPX Tcommaaccent Oslash -18\r\nKPX Tcommaaccent Otilde -18\r\nKPX Tcommaaccent a -80\r\nKPX Tcommaaccent aacute -80\r\nKPX Tcommaaccent abreve -80\r\nKPX Tcommaaccent acircumflex -80\r\nKPX Tcommaaccent adieresis -40\r\nKPX Tcommaaccent agrave -40\r\nKPX Tcommaaccent amacron -40\r\nKPX Tcommaaccent aogonek -80\r\nKPX Tcommaaccent aring -80\r\nKPX Tcommaaccent atilde -40\r\nKPX Tcommaaccent colon -50\r\nKPX Tcommaaccent comma -74\r\nKPX Tcommaaccent e -70\r\nKPX Tcommaaccent eacute -70\r\nKPX Tcommaaccent ecaron -70\r\nKPX Tcommaaccent ecircumflex -30\r\nKPX Tcommaaccent edieresis -30\r\nKPX Tcommaaccent edotaccent -70\r\nKPX Tcommaaccent egrave -30\r\nKPX Tcommaaccent emacron -70\r\nKPX Tcommaaccent eogonek -70\r\nKPX Tcommaaccent hyphen -92\r\nKPX Tcommaaccent i -35\r\nKPX Tcommaaccent iacute -35\r\nKPX Tcommaaccent iogonek -35\r\nKPX Tcommaaccent o -80\r\nKPX Tcommaaccent oacute -80\r\nKPX Tcommaaccent ocircumflex -80\r\nKPX Tcommaaccent odieresis -80\r\nKPX Tcommaaccent ograve -80\r\nKPX Tcommaaccent ohungarumlaut -80\r\nKPX Tcommaaccent omacron -80\r\nKPX Tcommaaccent oslash -80\r\nKPX Tcommaaccent otilde -80\r\nKPX Tcommaaccent period -74\r\nKPX Tcommaaccent r -35\r\nKPX Tcommaaccent racute -35\r\nKPX Tcommaaccent rcaron -35\r\nKPX Tcommaaccent rcommaaccent -35\r\nKPX Tcommaaccent semicolon -55\r\nKPX Tcommaaccent u -45\r\nKPX Tcommaaccent uacute -45\r\nKPX Tcommaaccent ucircumflex -45\r\nKPX Tcommaaccent udieresis -45\r\nKPX Tcommaaccent ugrave -45\r\nKPX Tcommaaccent uhungarumlaut -45\r\nKPX Tcommaaccent umacron -45\r\nKPX Tcommaaccent uogonek -45\r\nKPX Tcommaaccent uring -45\r\nKPX Tcommaaccent w -80\r\nKPX Tcommaaccent y -80\r\nKPX Tcommaaccent yacute -80\r\nKPX Tcommaaccent ydieresis -80\r\nKPX U A -40\r\nKPX U Aacute -40\r\nKPX U Abreve -40\r\nKPX U Acircumflex -40\r\nKPX U Adieresis -40\r\nKPX U Agrave -40\r\nKPX U Amacron -40\r\nKPX U Aogonek -40\r\nKPX U Aring -40\r\nKPX U Atilde -40\r\nKPX Uacute A -40\r\nKPX Uacute Aacute -40\r\nKPX Uacute Abreve -40\r\nKPX Uacute Acircumflex -40\r\nKPX Uacute Adieresis -40\r\nKPX Uacute Agrave -40\r\nKPX Uacute Amacron -40\r\nKPX Uacute Aogonek -40\r\nKPX Uacute Aring -40\r\nKPX Uacute Atilde -40\r\nKPX Ucircumflex A -40\r\nKPX Ucircumflex Aacute -40\r\nKPX Ucircumflex Abreve -40\r\nKPX Ucircumflex Acircumflex -40\r\nKPX Ucircumflex Adieresis -40\r\nKPX Ucircumflex Agrave -40\r\nKPX Ucircumflex Amacron -40\r\nKPX Ucircumflex Aogonek -40\r\nKPX Ucircumflex Aring -40\r\nKPX Ucircumflex Atilde -40\r\nKPX Udieresis A -40\r\nKPX Udieresis Aacute -40\r\nKPX Udieresis Abreve -40\r\nKPX Udieresis Acircumflex -40\r\nKPX Udieresis Adieresis -40\r\nKPX Udieresis Agrave -40\r\nKPX Udieresis Amacron -40\r\nKPX Udieresis Aogonek -40\r\nKPX Udieresis Aring -40\r\nKPX Udieresis Atilde -40\r\nKPX Ugrave A -40\r\nKPX Ugrave Aacute -40\r\nKPX Ugrave Abreve -40\r\nKPX Ugrave Acircumflex -40\r\nKPX Ugrave Adieresis -40\r\nKPX Ugrave Agrave -40\r\nKPX Ugrave Amacron -40\r\nKPX Ugrave Aogonek -40\r\nKPX Ugrave Aring -40\r\nKPX Ugrave Atilde -40\r\nKPX Uhungarumlaut A -40\r\nKPX Uhungarumlaut Aacute -40\r\nKPX Uhungarumlaut Abreve -40\r\nKPX Uhungarumlaut Acircumflex -40\r\nKPX Uhungarumlaut Adieresis -40\r\nKPX Uhungarumlaut Agrave -40\r\nKPX Uhungarumlaut Amacron -40\r\nKPX Uhungarumlaut Aogonek -40\r\nKPX Uhungarumlaut Aring -40\r\nKPX Uhungarumlaut Atilde -40\r\nKPX Umacron A -40\r\nKPX Umacron Aacute -40\r\nKPX Umacron Abreve -40\r\nKPX Umacron Acircumflex -40\r\nKPX Umacron Adieresis -40\r\nKPX Umacron Agrave -40\r\nKPX Umacron Amacron -40\r\nKPX Umacron Aogonek -40\r\nKPX Umacron Aring -40\r\nKPX Umacron Atilde -40\r\nKPX Uogonek A -40\r\nKPX Uogonek Aacute -40\r\nKPX Uogonek Abreve -40\r\nKPX Uogonek Acircumflex -40\r\nKPX Uogonek Adieresis -40\r\nKPX Uogonek Agrave -40\r\nKPX Uogonek Amacron -40\r\nKPX Uogonek Aogonek -40\r\nKPX Uogonek Aring -40\r\nKPX Uogonek Atilde -40\r\nKPX Uring A -40\r\nKPX Uring Aacute -40\r\nKPX Uring Abreve -40\r\nKPX Uring Acircumflex -40\r\nKPX Uring Adieresis -40\r\nKPX Uring Agrave -40\r\nKPX Uring Amacron -40\r\nKPX Uring Aogonek -40\r\nKPX Uring Aring -40\r\nKPX Uring Atilde -40\r\nKPX V A -135\r\nKPX V Aacute -135\r\nKPX V Abreve -135\r\nKPX V Acircumflex -135\r\nKPX V Adieresis -135\r\nKPX V Agrave -135\r\nKPX V Amacron -135\r\nKPX V Aogonek -135\r\nKPX V Aring -135\r\nKPX V Atilde -135\r\nKPX V G -15\r\nKPX V Gbreve -15\r\nKPX V Gcommaaccent -15\r\nKPX V O -40\r\nKPX V Oacute -40\r\nKPX V Ocircumflex -40\r\nKPX V Odieresis -40\r\nKPX V Ograve -40\r\nKPX V Ohungarumlaut -40\r\nKPX V Omacron -40\r\nKPX V Oslash -40\r\nKPX V Otilde -40\r\nKPX V a -111\r\nKPX V aacute -111\r\nKPX V abreve -111\r\nKPX V acircumflex -71\r\nKPX V adieresis -71\r\nKPX V agrave -71\r\nKPX V amacron -71\r\nKPX V aogonek -111\r\nKPX V aring -111\r\nKPX V atilde -71\r\nKPX V colon -74\r\nKPX V comma -129\r\nKPX V e -111\r\nKPX V eacute -111\r\nKPX V ecaron -71\r\nKPX V ecircumflex -71\r\nKPX V edieresis -71\r\nKPX V edotaccent -111\r\nKPX V egrave -71\r\nKPX V emacron -71\r\nKPX V eogonek -111\r\nKPX V hyphen -100\r\nKPX V i -60\r\nKPX V iacute -60\r\nKPX V icircumflex -20\r\nKPX V idieresis -20\r\nKPX V igrave -20\r\nKPX V imacron -20\r\nKPX V iogonek -60\r\nKPX V o -129\r\nKPX V oacute -129\r\nKPX V ocircumflex -129\r\nKPX V odieresis -89\r\nKPX V ograve -89\r\nKPX V ohungarumlaut -129\r\nKPX V omacron -89\r\nKPX V oslash -129\r\nKPX V otilde -89\r\nKPX V period -129\r\nKPX V semicolon -74\r\nKPX V u -75\r\nKPX V uacute -75\r\nKPX V ucircumflex -75\r\nKPX V udieresis -75\r\nKPX V ugrave -75\r\nKPX V uhungarumlaut -75\r\nKPX V umacron -75\r\nKPX V uogonek -75\r\nKPX V uring -75\r\nKPX W A -120\r\nKPX W Aacute -120\r\nKPX W Abreve -120\r\nKPX W Acircumflex -120\r\nKPX W Adieresis -120\r\nKPX W Agrave -120\r\nKPX W Amacron -120\r\nKPX W Aogonek -120\r\nKPX W Aring -120\r\nKPX W Atilde -120\r\nKPX W O -10\r\nKPX W Oacute -10\r\nKPX W Ocircumflex -10\r\nKPX W Odieresis -10\r\nKPX W Ograve -10\r\nKPX W Ohungarumlaut -10\r\nKPX W Omacron -10\r\nKPX W Oslash -10\r\nKPX W Otilde -10\r\nKPX W a -80\r\nKPX W aacute -80\r\nKPX W abreve -80\r\nKPX W acircumflex -80\r\nKPX W adieresis -80\r\nKPX W agrave -80\r\nKPX W amacron -80\r\nKPX W aogonek -80\r\nKPX W aring -80\r\nKPX W atilde -80\r\nKPX W colon -37\r\nKPX W comma -92\r\nKPX W e -80\r\nKPX W eacute -80\r\nKPX W ecaron -80\r\nKPX W ecircumflex -80\r\nKPX W edieresis -40\r\nKPX W edotaccent -80\r\nKPX W egrave -40\r\nKPX W emacron -40\r\nKPX W eogonek -80\r\nKPX W hyphen -65\r\nKPX W i -40\r\nKPX W iacute -40\r\nKPX W iogonek -40\r\nKPX W o -80\r\nKPX W oacute -80\r\nKPX W ocircumflex -80\r\nKPX W odieresis -80\r\nKPX W ograve -80\r\nKPX W ohungarumlaut -80\r\nKPX W omacron -80\r\nKPX W oslash -80\r\nKPX W otilde -80\r\nKPX W period -92\r\nKPX W semicolon -37\r\nKPX W u -50\r\nKPX W uacute -50\r\nKPX W ucircumflex -50\r\nKPX W udieresis -50\r\nKPX W ugrave -50\r\nKPX W uhungarumlaut -50\r\nKPX W umacron -50\r\nKPX W uogonek -50\r\nKPX W uring -50\r\nKPX W y -73\r\nKPX W yacute -73\r\nKPX W ydieresis -73\r\nKPX Y A -120\r\nKPX Y Aacute -120\r\nKPX Y Abreve -120\r\nKPX Y Acircumflex -120\r\nKPX Y Adieresis -120\r\nKPX Y Agrave -120\r\nKPX Y Amacron -120\r\nKPX Y Aogonek -120\r\nKPX Y Aring -120\r\nKPX Y Atilde -120\r\nKPX Y O -30\r\nKPX Y Oacute -30\r\nKPX Y Ocircumflex -30\r\nKPX Y Odieresis -30\r\nKPX Y Ograve -30\r\nKPX Y Ohungarumlaut -30\r\nKPX Y Omacron -30\r\nKPX Y Oslash -30\r\nKPX Y Otilde -30\r\nKPX Y a -100\r\nKPX Y aacute -100\r\nKPX Y abreve -100\r\nKPX Y acircumflex -100\r\nKPX Y adieresis -60\r\nKPX Y agrave -60\r\nKPX Y amacron -60\r\nKPX Y aogonek -100\r\nKPX Y aring -100\r\nKPX Y atilde -60\r\nKPX Y colon -92\r\nKPX Y comma -129\r\nKPX Y e -100\r\nKPX Y eacute -100\r\nKPX Y ecaron -100\r\nKPX Y ecircumflex -100\r\nKPX Y edieresis -60\r\nKPX Y edotaccent -100\r\nKPX Y egrave -60\r\nKPX Y emacron -60\r\nKPX Y eogonek -100\r\nKPX Y hyphen -111\r\nKPX Y i -55\r\nKPX Y iacute -55\r\nKPX Y iogonek -55\r\nKPX Y o -110\r\nKPX Y oacute -110\r\nKPX Y ocircumflex -110\r\nKPX Y odieresis -70\r\nKPX Y ograve -70\r\nKPX Y ohungarumlaut -110\r\nKPX Y omacron -70\r\nKPX Y oslash -110\r\nKPX Y otilde -70\r\nKPX Y period -129\r\nKPX Y semicolon -92\r\nKPX Y u -111\r\nKPX Y uacute -111\r\nKPX Y ucircumflex -111\r\nKPX Y udieresis -71\r\nKPX Y ugrave -71\r\nKPX Y uhungarumlaut -111\r\nKPX Y umacron -71\r\nKPX Y uogonek -111\r\nKPX Y uring -111\r\nKPX Yacute A -120\r\nKPX Yacute Aacute -120\r\nKPX Yacute Abreve -120\r\nKPX Yacute Acircumflex -120\r\nKPX Yacute Adieresis -120\r\nKPX Yacute Agrave -120\r\nKPX Yacute Amacron -120\r\nKPX Yacute Aogonek -120\r\nKPX Yacute Aring -120\r\nKPX Yacute Atilde -120\r\nKPX Yacute O -30\r\nKPX Yacute Oacute -30\r\nKPX Yacute Ocircumflex -30\r\nKPX Yacute Odieresis -30\r\nKPX Yacute Ograve -30\r\nKPX Yacute Ohungarumlaut -30\r\nKPX Yacute Omacron -30\r\nKPX Yacute Oslash -30\r\nKPX Yacute Otilde -30\r\nKPX Yacute a -100\r\nKPX Yacute aacute -100\r\nKPX Yacute abreve -100\r\nKPX Yacute acircumflex -100\r\nKPX Yacute adieresis -60\r\nKPX Yacute agrave -60\r\nKPX Yacute amacron -60\r\nKPX Yacute aogonek -100\r\nKPX Yacute aring -100\r\nKPX Yacute atilde -60\r\nKPX Yacute colon -92\r\nKPX Yacute comma -129\r\nKPX Yacute e -100\r\nKPX Yacute eacute -100\r\nKPX Yacute ecaron -100\r\nKPX Yacute ecircumflex -100\r\nKPX Yacute edieresis -60\r\nKPX Yacute edotaccent -100\r\nKPX Yacute egrave -60\r\nKPX Yacute emacron -60\r\nKPX Yacute eogonek -100\r\nKPX Yacute hyphen -111\r\nKPX Yacute i -55\r\nKPX Yacute iacute -55\r\nKPX Yacute iogonek -55\r\nKPX Yacute o -110\r\nKPX Yacute oacute -110\r\nKPX Yacute ocircumflex -110\r\nKPX Yacute odieresis -70\r\nKPX Yacute ograve -70\r\nKPX Yacute ohungarumlaut -110\r\nKPX Yacute omacron -70\r\nKPX Yacute oslash -110\r\nKPX Yacute otilde -70\r\nKPX Yacute period -129\r\nKPX Yacute semicolon -92\r\nKPX Yacute u -111\r\nKPX Yacute uacute -111\r\nKPX Yacute ucircumflex -111\r\nKPX Yacute udieresis -71\r\nKPX Yacute ugrave -71\r\nKPX Yacute uhungarumlaut -111\r\nKPX Yacute umacron -71\r\nKPX Yacute uogonek -111\r\nKPX Yacute uring -111\r\nKPX Ydieresis A -120\r\nKPX Ydieresis Aacute -120\r\nKPX Ydieresis Abreve -120\r\nKPX Ydieresis Acircumflex -120\r\nKPX Ydieresis Adieresis -120\r\nKPX Ydieresis Agrave -120\r\nKPX Ydieresis Amacron -120\r\nKPX Ydieresis Aogonek -120\r\nKPX Ydieresis Aring -120\r\nKPX Ydieresis Atilde -120\r\nKPX Ydieresis O -30\r\nKPX Ydieresis Oacute -30\r\nKPX Ydieresis Ocircumflex -30\r\nKPX Ydieresis Odieresis -30\r\nKPX Ydieresis Ograve -30\r\nKPX Ydieresis Ohungarumlaut -30\r\nKPX Ydieresis Omacron -30\r\nKPX Ydieresis Oslash -30\r\nKPX Ydieresis Otilde -30\r\nKPX Ydieresis a -100\r\nKPX Ydieresis aacute -100\r\nKPX Ydieresis abreve -100\r\nKPX Ydieresis acircumflex -100\r\nKPX Ydieresis adieresis -60\r\nKPX Ydieresis agrave -60\r\nKPX Ydieresis amacron -60\r\nKPX Ydieresis aogonek -100\r\nKPX Ydieresis aring -100\r\nKPX Ydieresis atilde -100\r\nKPX Ydieresis colon -92\r\nKPX Ydieresis comma -129\r\nKPX Ydieresis e -100\r\nKPX Ydieresis eacute -100\r\nKPX Ydieresis ecaron -100\r\nKPX Ydieresis ecircumflex -100\r\nKPX Ydieresis edieresis -60\r\nKPX Ydieresis edotaccent -100\r\nKPX Ydieresis egrave -60\r\nKPX Ydieresis emacron -60\r\nKPX Ydieresis eogonek -100\r\nKPX Ydieresis hyphen -111\r\nKPX Ydieresis i -55\r\nKPX Ydieresis iacute -55\r\nKPX Ydieresis iogonek -55\r\nKPX Ydieresis o -110\r\nKPX Ydieresis oacute -110\r\nKPX Ydieresis ocircumflex -110\r\nKPX Ydieresis odieresis -70\r\nKPX Ydieresis ograve -70\r\nKPX Ydieresis ohungarumlaut -110\r\nKPX Ydieresis omacron -70\r\nKPX Ydieresis oslash -110\r\nKPX Ydieresis otilde -70\r\nKPX Ydieresis period -129\r\nKPX Ydieresis semicolon -92\r\nKPX Ydieresis u -111\r\nKPX Ydieresis uacute -111\r\nKPX Ydieresis ucircumflex -111\r\nKPX Ydieresis udieresis -71\r\nKPX Ydieresis ugrave -71\r\nKPX Ydieresis uhungarumlaut -111\r\nKPX Ydieresis umacron -71\r\nKPX Ydieresis uogonek -111\r\nKPX Ydieresis uring -111\r\nKPX a v -20\r\nKPX a w -15\r\nKPX aacute v -20\r\nKPX aacute w -15\r\nKPX abreve v -20\r\nKPX abreve w -15\r\nKPX acircumflex v -20\r\nKPX acircumflex w -15\r\nKPX adieresis v -20\r\nKPX adieresis w -15\r\nKPX agrave v -20\r\nKPX agrave w -15\r\nKPX amacron v -20\r\nKPX amacron w -15\r\nKPX aogonek v -20\r\nKPX aogonek w -15\r\nKPX aring v -20\r\nKPX aring w -15\r\nKPX atilde v -20\r\nKPX atilde w -15\r\nKPX b period -40\r\nKPX b u -20\r\nKPX b uacute -20\r\nKPX b ucircumflex -20\r\nKPX b udieresis -20\r\nKPX b ugrave -20\r\nKPX b uhungarumlaut -20\r\nKPX b umacron -20\r\nKPX b uogonek -20\r\nKPX b uring -20\r\nKPX b v -15\r\nKPX c y -15\r\nKPX c yacute -15\r\nKPX c ydieresis -15\r\nKPX cacute y -15\r\nKPX cacute yacute -15\r\nKPX cacute ydieresis -15\r\nKPX ccaron y -15\r\nKPX ccaron yacute -15\r\nKPX ccaron ydieresis -15\r\nKPX ccedilla y -15\r\nKPX ccedilla yacute -15\r\nKPX ccedilla ydieresis -15\r\nKPX comma quotedblright -70\r\nKPX comma quoteright -70\r\nKPX e g -15\r\nKPX e gbreve -15\r\nKPX e gcommaaccent -15\r\nKPX e v -25\r\nKPX e w -25\r\nKPX e x -15\r\nKPX e y -15\r\nKPX e yacute -15\r\nKPX e ydieresis -15\r\nKPX eacute g -15\r\nKPX eacute gbreve -15\r\nKPX eacute gcommaaccent -15\r\nKPX eacute v -25\r\nKPX eacute w -25\r\nKPX eacute x -15\r\nKPX eacute y -15\r\nKPX eacute yacute -15\r\nKPX eacute ydieresis -15\r\nKPX ecaron g -15\r\nKPX ecaron gbreve -15\r\nKPX ecaron gcommaaccent -15\r\nKPX ecaron v -25\r\nKPX ecaron w -25\r\nKPX ecaron x -15\r\nKPX ecaron y -15\r\nKPX ecaron yacute -15\r\nKPX ecaron ydieresis -15\r\nKPX ecircumflex g -15\r\nKPX ecircumflex gbreve -15\r\nKPX ecircumflex gcommaaccent -15\r\nKPX ecircumflex v -25\r\nKPX ecircumflex w -25\r\nKPX ecircumflex x -15\r\nKPX ecircumflex y -15\r\nKPX ecircumflex yacute -15\r\nKPX ecircumflex ydieresis -15\r\nKPX edieresis g -15\r\nKPX edieresis gbreve -15\r\nKPX edieresis gcommaaccent -15\r\nKPX edieresis v -25\r\nKPX edieresis w -25\r\nKPX edieresis x -15\r\nKPX edieresis y -15\r\nKPX edieresis yacute -15\r\nKPX edieresis ydieresis -15\r\nKPX edotaccent g -15\r\nKPX edotaccent gbreve -15\r\nKPX edotaccent gcommaaccent -15\r\nKPX edotaccent v -25\r\nKPX edotaccent w -25\r\nKPX edotaccent x -15\r\nKPX edotaccent y -15\r\nKPX edotaccent yacute -15\r\nKPX edotaccent ydieresis -15\r\nKPX egrave g -15\r\nKPX egrave gbreve -15\r\nKPX egrave gcommaaccent -15\r\nKPX egrave v -25\r\nKPX egrave w -25\r\nKPX egrave x -15\r\nKPX egrave y -15\r\nKPX egrave yacute -15\r\nKPX egrave ydieresis -15\r\nKPX emacron g -15\r\nKPX emacron gbreve -15\r\nKPX emacron gcommaaccent -15\r\nKPX emacron v -25\r\nKPX emacron w -25\r\nKPX emacron x -15\r\nKPX emacron y -15\r\nKPX emacron yacute -15\r\nKPX emacron ydieresis -15\r\nKPX eogonek g -15\r\nKPX eogonek gbreve -15\r\nKPX eogonek gcommaaccent -15\r\nKPX eogonek v -25\r\nKPX eogonek w -25\r\nKPX eogonek x -15\r\nKPX eogonek y -15\r\nKPX eogonek yacute -15\r\nKPX eogonek ydieresis -15\r\nKPX f a -10\r\nKPX f aacute -10\r\nKPX f abreve -10\r\nKPX f acircumflex -10\r\nKPX f adieresis -10\r\nKPX f agrave -10\r\nKPX f amacron -10\r\nKPX f aogonek -10\r\nKPX f aring -10\r\nKPX f atilde -10\r\nKPX f dotlessi -50\r\nKPX f f -25\r\nKPX f i -20\r\nKPX f iacute -20\r\nKPX f quoteright 55\r\nKPX g a -5\r\nKPX g aacute -5\r\nKPX g abreve -5\r\nKPX g acircumflex -5\r\nKPX g adieresis -5\r\nKPX g agrave -5\r\nKPX g amacron -5\r\nKPX g aogonek -5\r\nKPX g aring -5\r\nKPX g atilde -5\r\nKPX gbreve a -5\r\nKPX gbreve aacute -5\r\nKPX gbreve abreve -5\r\nKPX gbreve acircumflex -5\r\nKPX gbreve adieresis -5\r\nKPX gbreve agrave -5\r\nKPX gbreve amacron -5\r\nKPX gbreve aogonek -5\r\nKPX gbreve aring -5\r\nKPX gbreve atilde -5\r\nKPX gcommaaccent a -5\r\nKPX gcommaaccent aacute -5\r\nKPX gcommaaccent abreve -5\r\nKPX gcommaaccent acircumflex -5\r\nKPX gcommaaccent adieresis -5\r\nKPX gcommaaccent agrave -5\r\nKPX gcommaaccent amacron -5\r\nKPX gcommaaccent aogonek -5\r\nKPX gcommaaccent aring -5\r\nKPX gcommaaccent atilde -5\r\nKPX h y -5\r\nKPX h yacute -5\r\nKPX h ydieresis -5\r\nKPX i v -25\r\nKPX iacute v -25\r\nKPX icircumflex v -25\r\nKPX idieresis v -25\r\nKPX igrave v -25\r\nKPX imacron v -25\r\nKPX iogonek v -25\r\nKPX k e -10\r\nKPX k eacute -10\r\nKPX k ecaron -10\r\nKPX k ecircumflex -10\r\nKPX k edieresis -10\r\nKPX k edotaccent -10\r\nKPX k egrave -10\r\nKPX k emacron -10\r\nKPX k eogonek -10\r\nKPX k o -10\r\nKPX k oacute -10\r\nKPX k ocircumflex -10\r\nKPX k odieresis -10\r\nKPX k ograve -10\r\nKPX k ohungarumlaut -10\r\nKPX k omacron -10\r\nKPX k oslash -10\r\nKPX k otilde -10\r\nKPX k y -15\r\nKPX k yacute -15\r\nKPX k ydieresis -15\r\nKPX kcommaaccent e -10\r\nKPX kcommaaccent eacute -10\r\nKPX kcommaaccent ecaron -10\r\nKPX kcommaaccent ecircumflex -10\r\nKPX kcommaaccent edieresis -10\r\nKPX kcommaaccent edotaccent -10\r\nKPX kcommaaccent egrave -10\r\nKPX kcommaaccent emacron -10\r\nKPX kcommaaccent eogonek -10\r\nKPX kcommaaccent o -10\r\nKPX kcommaaccent oacute -10\r\nKPX kcommaaccent ocircumflex -10\r\nKPX kcommaaccent odieresis -10\r\nKPX kcommaaccent ograve -10\r\nKPX kcommaaccent ohungarumlaut -10\r\nKPX kcommaaccent omacron -10\r\nKPX kcommaaccent oslash -10\r\nKPX kcommaaccent otilde -10\r\nKPX kcommaaccent y -15\r\nKPX kcommaaccent yacute -15\r\nKPX kcommaaccent ydieresis -15\r\nKPX l w -10\r\nKPX lacute w -10\r\nKPX lcommaaccent w -10\r\nKPX lslash w -10\r\nKPX n v -40\r\nKPX n y -15\r\nKPX n yacute -15\r\nKPX n ydieresis -15\r\nKPX nacute v -40\r\nKPX nacute y -15\r\nKPX nacute yacute -15\r\nKPX nacute ydieresis -15\r\nKPX ncaron v -40\r\nKPX ncaron y -15\r\nKPX ncaron yacute -15\r\nKPX ncaron ydieresis -15\r\nKPX ncommaaccent v -40\r\nKPX ncommaaccent y -15\r\nKPX ncommaaccent yacute -15\r\nKPX ncommaaccent ydieresis -15\r\nKPX ntilde v -40\r\nKPX ntilde y -15\r\nKPX ntilde yacute -15\r\nKPX ntilde ydieresis -15\r\nKPX o v -15\r\nKPX o w -25\r\nKPX o y -10\r\nKPX o yacute -10\r\nKPX o ydieresis -10\r\nKPX oacute v -15\r\nKPX oacute w -25\r\nKPX oacute y -10\r\nKPX oacute yacute -10\r\nKPX oacute ydieresis -10\r\nKPX ocircumflex v -15\r\nKPX ocircumflex w -25\r\nKPX ocircumflex y -10\r\nKPX ocircumflex yacute -10\r\nKPX ocircumflex ydieresis -10\r\nKPX odieresis v -15\r\nKPX odieresis w -25\r\nKPX odieresis y -10\r\nKPX odieresis yacute -10\r\nKPX odieresis ydieresis -10\r\nKPX ograve v -15\r\nKPX ograve w -25\r\nKPX ograve y -10\r\nKPX ograve yacute -10\r\nKPX ograve ydieresis -10\r\nKPX ohungarumlaut v -15\r\nKPX ohungarumlaut w -25\r\nKPX ohungarumlaut y -10\r\nKPX ohungarumlaut yacute -10\r\nKPX ohungarumlaut ydieresis -10\r\nKPX omacron v -15\r\nKPX omacron w -25\r\nKPX omacron y -10\r\nKPX omacron yacute -10\r\nKPX omacron ydieresis -10\r\nKPX oslash v -15\r\nKPX oslash w -25\r\nKPX oslash y -10\r\nKPX oslash yacute -10\r\nKPX oslash ydieresis -10\r\nKPX otilde v -15\r\nKPX otilde w -25\r\nKPX otilde y -10\r\nKPX otilde yacute -10\r\nKPX otilde ydieresis -10\r\nKPX p y -10\r\nKPX p yacute -10\r\nKPX p ydieresis -10\r\nKPX period quotedblright -70\r\nKPX period quoteright -70\r\nKPX quotedblleft A -80\r\nKPX quotedblleft Aacute -80\r\nKPX quotedblleft Abreve -80\r\nKPX quotedblleft Acircumflex -80\r\nKPX quotedblleft Adieresis -80\r\nKPX quotedblleft Agrave -80\r\nKPX quotedblleft Amacron -80\r\nKPX quotedblleft Aogonek -80\r\nKPX quotedblleft Aring -80\r\nKPX quotedblleft Atilde -80\r\nKPX quoteleft A -80\r\nKPX quoteleft Aacute -80\r\nKPX quoteleft Abreve -80\r\nKPX quoteleft Acircumflex -80\r\nKPX quoteleft Adieresis -80\r\nKPX quoteleft Agrave -80\r\nKPX quoteleft Amacron -80\r\nKPX quoteleft Aogonek -80\r\nKPX quoteleft Aring -80\r\nKPX quoteleft Atilde -80\r\nKPX quoteleft quoteleft -74\r\nKPX quoteright d -50\r\nKPX quoteright dcroat -50\r\nKPX quoteright l -10\r\nKPX quoteright lacute -10\r\nKPX quoteright lcommaaccent -10\r\nKPX quoteright lslash -10\r\nKPX quoteright quoteright -74\r\nKPX quoteright r -50\r\nKPX quoteright racute -50\r\nKPX quoteright rcaron -50\r\nKPX quoteright rcommaaccent -50\r\nKPX quoteright s -55\r\nKPX quoteright sacute -55\r\nKPX quoteright scaron -55\r\nKPX quoteright scedilla -55\r\nKPX quoteright scommaaccent -55\r\nKPX quoteright space -74\r\nKPX quoteright t -18\r\nKPX quoteright tcommaaccent -18\r\nKPX quoteright v -50\r\nKPX r comma -40\r\nKPX r g -18\r\nKPX r gbreve -18\r\nKPX r gcommaaccent -18\r\nKPX r hyphen -20\r\nKPX r period -55\r\nKPX racute comma -40\r\nKPX racute g -18\r\nKPX racute gbreve -18\r\nKPX racute gcommaaccent -18\r\nKPX racute hyphen -20\r\nKPX racute period -55\r\nKPX rcaron comma -40\r\nKPX rcaron g -18\r\nKPX rcaron gbreve -18\r\nKPX rcaron gcommaaccent -18\r\nKPX rcaron hyphen -20\r\nKPX rcaron period -55\r\nKPX rcommaaccent comma -40\r\nKPX rcommaaccent g -18\r\nKPX rcommaaccent gbreve -18\r\nKPX rcommaaccent gcommaaccent -18\r\nKPX rcommaaccent hyphen -20\r\nKPX rcommaaccent period -55\r\nKPX space A -55\r\nKPX space Aacute -55\r\nKPX space Abreve -55\r\nKPX space Acircumflex -55\r\nKPX space Adieresis -55\r\nKPX space Agrave -55\r\nKPX space Amacron -55\r\nKPX space Aogonek -55\r\nKPX space Aring -55\r\nKPX space Atilde -55\r\nKPX space T -18\r\nKPX space Tcaron -18\r\nKPX space Tcommaaccent -18\r\nKPX space V -50\r\nKPX space W -30\r\nKPX space Y -90\r\nKPX space Yacute -90\r\nKPX space Ydieresis -90\r\nKPX v a -25\r\nKPX v aacute -25\r\nKPX v abreve -25\r\nKPX v acircumflex -25\r\nKPX v adieresis -25\r\nKPX v agrave -25\r\nKPX v amacron -25\r\nKPX v aogonek -25\r\nKPX v aring -25\r\nKPX v atilde -25\r\nKPX v comma -65\r\nKPX v e -15\r\nKPX v eacute -15\r\nKPX v ecaron -15\r\nKPX v ecircumflex -15\r\nKPX v edieresis -15\r\nKPX v edotaccent -15\r\nKPX v egrave -15\r\nKPX v emacron -15\r\nKPX v eogonek -15\r\nKPX v o -20\r\nKPX v oacute -20\r\nKPX v ocircumflex -20\r\nKPX v odieresis -20\r\nKPX v ograve -20\r\nKPX v ohungarumlaut -20\r\nKPX v omacron -20\r\nKPX v oslash -20\r\nKPX v otilde -20\r\nKPX v period -65\r\nKPX w a -10\r\nKPX w aacute -10\r\nKPX w abreve -10\r\nKPX w acircumflex -10\r\nKPX w adieresis -10\r\nKPX w agrave -10\r\nKPX w amacron -10\r\nKPX w aogonek -10\r\nKPX w aring -10\r\nKPX w atilde -10\r\nKPX w comma -65\r\nKPX w o -10\r\nKPX w oacute -10\r\nKPX w ocircumflex -10\r\nKPX w odieresis -10\r\nKPX w ograve -10\r\nKPX w ohungarumlaut -10\r\nKPX w omacron -10\r\nKPX w oslash -10\r\nKPX w otilde -10\r\nKPX w period -65\r\nKPX x e -15\r\nKPX x eacute -15\r\nKPX x ecaron -15\r\nKPX x ecircumflex -15\r\nKPX x edieresis -15\r\nKPX x edotaccent -15\r\nKPX x egrave -15\r\nKPX x emacron -15\r\nKPX x eogonek -15\r\nKPX y comma -65\r\nKPX y period -65\r\nKPX yacute comma -65\r\nKPX yacute period -65\r\nKPX ydieresis comma -65\r\nKPX ydieresis period -65\r\nEndKernPairs\r\nEndKernData\r\nEndFontMetrics\r\n";
2496 },
2497 'Times-Bold'() {
2498 return "StartFontMetrics 4.1\r\nComment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 12:52:56 1997\r\nComment UniqueID 43065\r\nComment VMusage 41636 52661\r\nFontName Times-Bold\r\nFullName Times Bold\r\nFamilyName Times\r\nWeight Bold\r\nItalicAngle 0\r\nIsFixedPitch false\r\nCharacterSet ExtendedRoman\r\nFontBBox -168 -218 1000 935 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 002.000\r\nNotice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 676\r\nXHeight 461\r\nAscender 683\r\nDescender -217\r\nStdHW 44\r\nStdVW 139\r\nStartCharMetrics 315\r\nC 32 ; WX 250 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 333 ; N exclam ; B 81 -13 251 691 ;\r\nC 34 ; WX 555 ; N quotedbl ; B 83 404 472 691 ;\r\nC 35 ; WX 500 ; N numbersign ; B 4 0 496 700 ;\r\nC 36 ; WX 500 ; N dollar ; B 29 -99 472 750 ;\r\nC 37 ; WX 1000 ; N percent ; B 124 -14 877 692 ;\r\nC 38 ; WX 833 ; N ampersand ; B 62 -16 787 691 ;\r\nC 39 ; WX 333 ; N quoteright ; B 79 356 263 691 ;\r\nC 40 ; WX 333 ; N parenleft ; B 46 -168 306 694 ;\r\nC 41 ; WX 333 ; N parenright ; B 27 -168 287 694 ;\r\nC 42 ; WX 500 ; N asterisk ; B 56 255 447 691 ;\r\nC 43 ; WX 570 ; N plus ; B 33 0 537 506 ;\r\nC 44 ; WX 250 ; N comma ; B 39 -180 223 155 ;\r\nC 45 ; WX 333 ; N hyphen ; B 44 171 287 287 ;\r\nC 46 ; WX 250 ; N period ; B 41 -13 210 156 ;\r\nC 47 ; WX 278 ; N slash ; B -24 -19 302 691 ;\r\nC 48 ; WX 500 ; N zero ; B 24 -13 476 688 ;\r\nC 49 ; WX 500 ; N one ; B 65 0 442 688 ;\r\nC 50 ; WX 500 ; N two ; B 17 0 478 688 ;\r\nC 51 ; WX 500 ; N three ; B 16 -14 468 688 ;\r\nC 52 ; WX 500 ; N four ; B 19 0 475 688 ;\r\nC 53 ; WX 500 ; N five ; B 22 -8 470 676 ;\r\nC 54 ; WX 500 ; N six ; B 28 -13 475 688 ;\r\nC 55 ; WX 500 ; N seven ; B 17 0 477 676 ;\r\nC 56 ; WX 500 ; N eight ; B 28 -13 472 688 ;\r\nC 57 ; WX 500 ; N nine ; B 26 -13 473 688 ;\r\nC 58 ; WX 333 ; N colon ; B 82 -13 251 472 ;\r\nC 59 ; WX 333 ; N semicolon ; B 82 -180 266 472 ;\r\nC 60 ; WX 570 ; N less ; B 31 -8 539 514 ;\r\nC 61 ; WX 570 ; N equal ; B 33 107 537 399 ;\r\nC 62 ; WX 570 ; N greater ; B 31 -8 539 514 ;\r\nC 63 ; WX 500 ; N question ; B 57 -13 445 689 ;\r\nC 64 ; WX 930 ; N at ; B 108 -19 822 691 ;\r\nC 65 ; WX 722 ; N A ; B 9 0 689 690 ;\r\nC 66 ; WX 667 ; N B ; B 16 0 619 676 ;\r\nC 67 ; WX 722 ; N C ; B 49 -19 687 691 ;\r\nC 68 ; WX 722 ; N D ; B 14 0 690 676 ;\r\nC 69 ; WX 667 ; N E ; B 16 0 641 676 ;\r\nC 70 ; WX 611 ; N F ; B 16 0 583 676 ;\r\nC 71 ; WX 778 ; N G ; B 37 -19 755 691 ;\r\nC 72 ; WX 778 ; N H ; B 21 0 759 676 ;\r\nC 73 ; WX 389 ; N I ; B 20 0 370 676 ;\r\nC 74 ; WX 500 ; N J ; B 3 -96 479 676 ;\r\nC 75 ; WX 778 ; N K ; B 30 0 769 676 ;\r\nC 76 ; WX 667 ; N L ; B 19 0 638 676 ;\r\nC 77 ; WX 944 ; N M ; B 14 0 921 676 ;\r\nC 78 ; WX 722 ; N N ; B 16 -18 701 676 ;\r\nC 79 ; WX 778 ; N O ; B 35 -19 743 691 ;\r\nC 80 ; WX 611 ; N P ; B 16 0 600 676 ;\r\nC 81 ; WX 778 ; N Q ; B 35 -176 743 691 ;\r\nC 82 ; WX 722 ; N R ; B 26 0 715 676 ;\r\nC 83 ; WX 556 ; N S ; B 35 -19 513 692 ;\r\nC 84 ; WX 667 ; N T ; B 31 0 636 676 ;\r\nC 85 ; WX 722 ; N U ; B 16 -19 701 676 ;\r\nC 86 ; WX 722 ; N V ; B 16 -18 701 676 ;\r\nC 87 ; WX 1000 ; N W ; B 19 -15 981 676 ;\r\nC 88 ; WX 722 ; N X ; B 16 0 699 676 ;\r\nC 89 ; WX 722 ; N Y ; B 15 0 699 676 ;\r\nC 90 ; WX 667 ; N Z ; B 28 0 634 676 ;\r\nC 91 ; WX 333 ; N bracketleft ; B 67 -149 301 678 ;\r\nC 92 ; WX 278 ; N backslash ; B -25 -19 303 691 ;\r\nC 93 ; WX 333 ; N bracketright ; B 32 -149 266 678 ;\r\nC 94 ; WX 581 ; N asciicircum ; B 73 311 509 676 ;\r\nC 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;\r\nC 96 ; WX 333 ; N quoteleft ; B 70 356 254 691 ;\r\nC 97 ; WX 500 ; N a ; B 25 -14 488 473 ;\r\nC 98 ; WX 556 ; N b ; B 17 -14 521 676 ;\r\nC 99 ; WX 444 ; N c ; B 25 -14 430 473 ;\r\nC 100 ; WX 556 ; N d ; B 25 -14 534 676 ;\r\nC 101 ; WX 444 ; N e ; B 25 -14 426 473 ;\r\nC 102 ; WX 333 ; N f ; B 14 0 389 691 ; L i fi ; L l fl ;\r\nC 103 ; WX 500 ; N g ; B 28 -206 483 473 ;\r\nC 104 ; WX 556 ; N h ; B 16 0 534 676 ;\r\nC 105 ; WX 278 ; N i ; B 16 0 255 691 ;\r\nC 106 ; WX 333 ; N j ; B -57 -203 263 691 ;\r\nC 107 ; WX 556 ; N k ; B 22 0 543 676 ;\r\nC 108 ; WX 278 ; N l ; B 16 0 255 676 ;\r\nC 109 ; WX 833 ; N m ; B 16 0 814 473 ;\r\nC 110 ; WX 556 ; N n ; B 21 0 539 473 ;\r\nC 111 ; WX 500 ; N o ; B 25 -14 476 473 ;\r\nC 112 ; WX 556 ; N p ; B 19 -205 524 473 ;\r\nC 113 ; WX 556 ; N q ; B 34 -205 536 473 ;\r\nC 114 ; WX 444 ; N r ; B 29 0 434 473 ;\r\nC 115 ; WX 389 ; N s ; B 25 -14 361 473 ;\r\nC 116 ; WX 333 ; N t ; B 20 -12 332 630 ;\r\nC 117 ; WX 556 ; N u ; B 16 -14 537 461 ;\r\nC 118 ; WX 500 ; N v ; B 21 -14 485 461 ;\r\nC 119 ; WX 722 ; N w ; B 23 -14 707 461 ;\r\nC 120 ; WX 500 ; N x ; B 12 0 484 461 ;\r\nC 121 ; WX 500 ; N y ; B 16 -205 480 461 ;\r\nC 122 ; WX 444 ; N z ; B 21 0 420 461 ;\r\nC 123 ; WX 394 ; N braceleft ; B 22 -175 340 698 ;\r\nC 124 ; WX 220 ; N bar ; B 66 -218 154 782 ;\r\nC 125 ; WX 394 ; N braceright ; B 54 -175 372 698 ;\r\nC 126 ; WX 520 ; N asciitilde ; B 29 173 491 333 ;\r\nC 161 ; WX 333 ; N exclamdown ; B 82 -203 252 501 ;\r\nC 162 ; WX 500 ; N cent ; B 53 -140 458 588 ;\r\nC 163 ; WX 500 ; N sterling ; B 21 -14 477 684 ;\r\nC 164 ; WX 167 ; N fraction ; B -168 -12 329 688 ;\r\nC 165 ; WX 500 ; N yen ; B -64 0 547 676 ;\r\nC 166 ; WX 500 ; N florin ; B 0 -155 498 706 ;\r\nC 167 ; WX 500 ; N section ; B 57 -132 443 691 ;\r\nC 168 ; WX 500 ; N currency ; B -26 61 526 613 ;\r\nC 169 ; WX 278 ; N quotesingle ; B 75 404 204 691 ;\r\nC 170 ; WX 500 ; N quotedblleft ; B 32 356 486 691 ;\r\nC 171 ; WX 500 ; N guillemotleft ; B 23 36 473 415 ;\r\nC 172 ; WX 333 ; N guilsinglleft ; B 51 36 305 415 ;\r\nC 173 ; WX 333 ; N guilsinglright ; B 28 36 282 415 ;\r\nC 174 ; WX 556 ; N fi ; B 14 0 536 691 ;\r\nC 175 ; WX 556 ; N fl ; B 14 0 536 691 ;\r\nC 177 ; WX 500 ; N endash ; B 0 181 500 271 ;\r\nC 178 ; WX 500 ; N dagger ; B 47 -134 453 691 ;\r\nC 179 ; WX 500 ; N daggerdbl ; B 45 -132 456 691 ;\r\nC 180 ; WX 250 ; N periodcentered ; B 41 248 210 417 ;\r\nC 182 ; WX 540 ; N paragraph ; B 0 -186 519 676 ;\r\nC 183 ; WX 350 ; N bullet ; B 35 198 315 478 ;\r\nC 184 ; WX 333 ; N quotesinglbase ; B 79 -180 263 155 ;\r\nC 185 ; WX 500 ; N quotedblbase ; B 14 -180 468 155 ;\r\nC 186 ; WX 500 ; N quotedblright ; B 14 356 468 691 ;\r\nC 187 ; WX 500 ; N guillemotright ; B 27 36 477 415 ;\r\nC 188 ; WX 1000 ; N ellipsis ; B 82 -13 917 156 ;\r\nC 189 ; WX 1000 ; N perthousand ; B 7 -29 995 706 ;\r\nC 191 ; WX 500 ; N questiondown ; B 55 -201 443 501 ;\r\nC 193 ; WX 333 ; N grave ; B 8 528 246 713 ;\r\nC 194 ; WX 333 ; N acute ; B 86 528 324 713 ;\r\nC 195 ; WX 333 ; N circumflex ; B -2 528 335 704 ;\r\nC 196 ; WX 333 ; N tilde ; B -16 547 349 674 ;\r\nC 197 ; WX 333 ; N macron ; B 1 565 331 637 ;\r\nC 198 ; WX 333 ; N breve ; B 15 528 318 691 ;\r\nC 199 ; WX 333 ; N dotaccent ; B 103 536 258 691 ;\r\nC 200 ; WX 333 ; N dieresis ; B -2 537 335 667 ;\r\nC 202 ; WX 333 ; N ring ; B 60 527 273 740 ;\r\nC 203 ; WX 333 ; N cedilla ; B 68 -218 294 0 ;\r\nC 205 ; WX 333 ; N hungarumlaut ; B -13 528 425 713 ;\r\nC 206 ; WX 333 ; N ogonek ; B 90 -193 319 24 ;\r\nC 207 ; WX 333 ; N caron ; B -2 528 335 704 ;\r\nC 208 ; WX 1000 ; N emdash ; B 0 181 1000 271 ;\r\nC 225 ; WX 1000 ; N AE ; B 4 0 951 676 ;\r\nC 227 ; WX 300 ; N ordfeminine ; B -1 397 301 688 ;\r\nC 232 ; WX 667 ; N Lslash ; B 19 0 638 676 ;\r\nC 233 ; WX 778 ; N Oslash ; B 35 -74 743 737 ;\r\nC 234 ; WX 1000 ; N OE ; B 22 -5 981 684 ;\r\nC 235 ; WX 330 ; N ordmasculine ; B 18 397 312 688 ;\r\nC 241 ; WX 722 ; N ae ; B 33 -14 693 473 ;\r\nC 245 ; WX 278 ; N dotlessi ; B 16 0 255 461 ;\r\nC 248 ; WX 278 ; N lslash ; B -22 0 303 676 ;\r\nC 249 ; WX 500 ; N oslash ; B 25 -92 476 549 ;\r\nC 250 ; WX 722 ; N oe ; B 22 -14 696 473 ;\r\nC 251 ; WX 556 ; N germandbls ; B 19 -12 517 691 ;\r\nC -1 ; WX 389 ; N Idieresis ; B 20 0 370 877 ;\r\nC -1 ; WX 444 ; N eacute ; B 25 -14 426 713 ;\r\nC -1 ; WX 500 ; N abreve ; B 25 -14 488 691 ;\r\nC -1 ; WX 556 ; N uhungarumlaut ; B 16 -14 557 713 ;\r\nC -1 ; WX 444 ; N ecaron ; B 25 -14 426 704 ;\r\nC -1 ; WX 722 ; N Ydieresis ; B 15 0 699 877 ;\r\nC -1 ; WX 570 ; N divide ; B 33 -31 537 537 ;\r\nC -1 ; WX 722 ; N Yacute ; B 15 0 699 923 ;\r\nC -1 ; WX 722 ; N Acircumflex ; B 9 0 689 914 ;\r\nC -1 ; WX 500 ; N aacute ; B 25 -14 488 713 ;\r\nC -1 ; WX 722 ; N Ucircumflex ; B 16 -19 701 914 ;\r\nC -1 ; WX 500 ; N yacute ; B 16 -205 480 713 ;\r\nC -1 ; WX 389 ; N scommaaccent ; B 25 -218 361 473 ;\r\nC -1 ; WX 444 ; N ecircumflex ; B 25 -14 426 704 ;\r\nC -1 ; WX 722 ; N Uring ; B 16 -19 701 935 ;\r\nC -1 ; WX 722 ; N Udieresis ; B 16 -19 701 877 ;\r\nC -1 ; WX 500 ; N aogonek ; B 25 -193 504 473 ;\r\nC -1 ; WX 722 ; N Uacute ; B 16 -19 701 923 ;\r\nC -1 ; WX 556 ; N uogonek ; B 16 -193 539 461 ;\r\nC -1 ; WX 667 ; N Edieresis ; B 16 0 641 877 ;\r\nC -1 ; WX 722 ; N Dcroat ; B 6 0 690 676 ;\r\nC -1 ; WX 250 ; N commaaccent ; B 47 -218 203 -50 ;\r\nC -1 ; WX 747 ; N copyright ; B 26 -19 721 691 ;\r\nC -1 ; WX 667 ; N Emacron ; B 16 0 641 847 ;\r\nC -1 ; WX 444 ; N ccaron ; B 25 -14 430 704 ;\r\nC -1 ; WX 500 ; N aring ; B 25 -14 488 740 ;\r\nC -1 ; WX 722 ; N Ncommaaccent ; B 16 -188 701 676 ;\r\nC -1 ; WX 278 ; N lacute ; B 16 0 297 923 ;\r\nC -1 ; WX 500 ; N agrave ; B 25 -14 488 713 ;\r\nC -1 ; WX 667 ; N Tcommaaccent ; B 31 -218 636 676 ;\r\nC -1 ; WX 722 ; N Cacute ; B 49 -19 687 923 ;\r\nC -1 ; WX 500 ; N atilde ; B 25 -14 488 674 ;\r\nC -1 ; WX 667 ; N Edotaccent ; B 16 0 641 901 ;\r\nC -1 ; WX 389 ; N scaron ; B 25 -14 363 704 ;\r\nC -1 ; WX 389 ; N scedilla ; B 25 -218 361 473 ;\r\nC -1 ; WX 278 ; N iacute ; B 16 0 289 713 ;\r\nC -1 ; WX 494 ; N lozenge ; B 10 0 484 745 ;\r\nC -1 ; WX 722 ; N Rcaron ; B 26 0 715 914 ;\r\nC -1 ; WX 778 ; N Gcommaaccent ; B 37 -218 755 691 ;\r\nC -1 ; WX 556 ; N ucircumflex ; B 16 -14 537 704 ;\r\nC -1 ; WX 500 ; N acircumflex ; B 25 -14 488 704 ;\r\nC -1 ; WX 722 ; N Amacron ; B 9 0 689 847 ;\r\nC -1 ; WX 444 ; N rcaron ; B 29 0 434 704 ;\r\nC -1 ; WX 444 ; N ccedilla ; B 25 -218 430 473 ;\r\nC -1 ; WX 667 ; N Zdotaccent ; B 28 0 634 901 ;\r\nC -1 ; WX 611 ; N Thorn ; B 16 0 600 676 ;\r\nC -1 ; WX 778 ; N Omacron ; B 35 -19 743 847 ;\r\nC -1 ; WX 722 ; N Racute ; B 26 0 715 923 ;\r\nC -1 ; WX 556 ; N Sacute ; B 35 -19 513 923 ;\r\nC -1 ; WX 672 ; N dcaron ; B 25 -14 681 682 ;\r\nC -1 ; WX 722 ; N Umacron ; B 16 -19 701 847 ;\r\nC -1 ; WX 556 ; N uring ; B 16 -14 537 740 ;\r\nC -1 ; WX 300 ; N threesuperior ; B 3 268 297 688 ;\r\nC -1 ; WX 778 ; N Ograve ; B 35 -19 743 923 ;\r\nC -1 ; WX 722 ; N Agrave ; B 9 0 689 923 ;\r\nC -1 ; WX 722 ; N Abreve ; B 9 0 689 901 ;\r\nC -1 ; WX 570 ; N multiply ; B 48 16 522 490 ;\r\nC -1 ; WX 556 ; N uacute ; B 16 -14 537 713 ;\r\nC -1 ; WX 667 ; N Tcaron ; B 31 0 636 914 ;\r\nC -1 ; WX 494 ; N partialdiff ; B 11 -21 494 750 ;\r\nC -1 ; WX 500 ; N ydieresis ; B 16 -205 480 667 ;\r\nC -1 ; WX 722 ; N Nacute ; B 16 -18 701 923 ;\r\nC -1 ; WX 278 ; N icircumflex ; B -37 0 300 704 ;\r\nC -1 ; WX 667 ; N Ecircumflex ; B 16 0 641 914 ;\r\nC -1 ; WX 500 ; N adieresis ; B 25 -14 488 667 ;\r\nC -1 ; WX 444 ; N edieresis ; B 25 -14 426 667 ;\r\nC -1 ; WX 444 ; N cacute ; B 25 -14 430 713 ;\r\nC -1 ; WX 556 ; N nacute ; B 21 0 539 713 ;\r\nC -1 ; WX 556 ; N umacron ; B 16 -14 537 637 ;\r\nC -1 ; WX 722 ; N Ncaron ; B 16 -18 701 914 ;\r\nC -1 ; WX 389 ; N Iacute ; B 20 0 370 923 ;\r\nC -1 ; WX 570 ; N plusminus ; B 33 0 537 506 ;\r\nC -1 ; WX 220 ; N brokenbar ; B 66 -143 154 707 ;\r\nC -1 ; WX 747 ; N registered ; B 26 -19 721 691 ;\r\nC -1 ; WX 778 ; N Gbreve ; B 37 -19 755 901 ;\r\nC -1 ; WX 389 ; N Idotaccent ; B 20 0 370 901 ;\r\nC -1 ; WX 600 ; N summation ; B 14 -10 585 706 ;\r\nC -1 ; WX 667 ; N Egrave ; B 16 0 641 923 ;\r\nC -1 ; WX 444 ; N racute ; B 29 0 434 713 ;\r\nC -1 ; WX 500 ; N omacron ; B 25 -14 476 637 ;\r\nC -1 ; WX 667 ; N Zacute ; B 28 0 634 923 ;\r\nC -1 ; WX 667 ; N Zcaron ; B 28 0 634 914 ;\r\nC -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ;\r\nC -1 ; WX 722 ; N Eth ; B 6 0 690 676 ;\r\nC -1 ; WX 722 ; N Ccedilla ; B 49 -218 687 691 ;\r\nC -1 ; WX 278 ; N lcommaaccent ; B 16 -218 255 676 ;\r\nC -1 ; WX 416 ; N tcaron ; B 20 -12 425 815 ;\r\nC -1 ; WX 444 ; N eogonek ; B 25 -193 426 473 ;\r\nC -1 ; WX 722 ; N Uogonek ; B 16 -193 701 676 ;\r\nC -1 ; WX 722 ; N Aacute ; B 9 0 689 923 ;\r\nC -1 ; WX 722 ; N Adieresis ; B 9 0 689 877 ;\r\nC -1 ; WX 444 ; N egrave ; B 25 -14 426 713 ;\r\nC -1 ; WX 444 ; N zacute ; B 21 0 420 713 ;\r\nC -1 ; WX 278 ; N iogonek ; B 16 -193 274 691 ;\r\nC -1 ; WX 778 ; N Oacute ; B 35 -19 743 923 ;\r\nC -1 ; WX 500 ; N oacute ; B 25 -14 476 713 ;\r\nC -1 ; WX 500 ; N amacron ; B 25 -14 488 637 ;\r\nC -1 ; WX 389 ; N sacute ; B 25 -14 361 713 ;\r\nC -1 ; WX 278 ; N idieresis ; B -37 0 300 667 ;\r\nC -1 ; WX 778 ; N Ocircumflex ; B 35 -19 743 914 ;\r\nC -1 ; WX 722 ; N Ugrave ; B 16 -19 701 923 ;\r\nC -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;\r\nC -1 ; WX 556 ; N thorn ; B 19 -205 524 676 ;\r\nC -1 ; WX 300 ; N twosuperior ; B 0 275 300 688 ;\r\nC -1 ; WX 778 ; N Odieresis ; B 35 -19 743 877 ;\r\nC -1 ; WX 556 ; N mu ; B 33 -206 536 461 ;\r\nC -1 ; WX 278 ; N igrave ; B -27 0 255 713 ;\r\nC -1 ; WX 500 ; N ohungarumlaut ; B 25 -14 529 713 ;\r\nC -1 ; WX 667 ; N Eogonek ; B 16 -193 644 676 ;\r\nC -1 ; WX 556 ; N dcroat ; B 25 -14 534 676 ;\r\nC -1 ; WX 750 ; N threequarters ; B 23 -12 733 688 ;\r\nC -1 ; WX 556 ; N Scedilla ; B 35 -218 513 692 ;\r\nC -1 ; WX 394 ; N lcaron ; B 16 0 412 682 ;\r\nC -1 ; WX 778 ; N Kcommaaccent ; B 30 -218 769 676 ;\r\nC -1 ; WX 667 ; N Lacute ; B 19 0 638 923 ;\r\nC -1 ; WX 1000 ; N trademark ; B 24 271 977 676 ;\r\nC -1 ; WX 444 ; N edotaccent ; B 25 -14 426 691 ;\r\nC -1 ; WX 389 ; N Igrave ; B 20 0 370 923 ;\r\nC -1 ; WX 389 ; N Imacron ; B 20 0 370 847 ;\r\nC -1 ; WX 667 ; N Lcaron ; B 19 0 652 682 ;\r\nC -1 ; WX 750 ; N onehalf ; B -7 -12 775 688 ;\r\nC -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ;\r\nC -1 ; WX 500 ; N ocircumflex ; B 25 -14 476 704 ;\r\nC -1 ; WX 556 ; N ntilde ; B 21 0 539 674 ;\r\nC -1 ; WX 722 ; N Uhungarumlaut ; B 16 -19 701 923 ;\r\nC -1 ; WX 667 ; N Eacute ; B 16 0 641 923 ;\r\nC -1 ; WX 444 ; N emacron ; B 25 -14 426 637 ;\r\nC -1 ; WX 500 ; N gbreve ; B 28 -206 483 691 ;\r\nC -1 ; WX 750 ; N onequarter ; B 28 -12 743 688 ;\r\nC -1 ; WX 556 ; N Scaron ; B 35 -19 513 914 ;\r\nC -1 ; WX 556 ; N Scommaaccent ; B 35 -218 513 692 ;\r\nC -1 ; WX 778 ; N Ohungarumlaut ; B 35 -19 743 923 ;\r\nC -1 ; WX 400 ; N degree ; B 57 402 343 688 ;\r\nC -1 ; WX 500 ; N ograve ; B 25 -14 476 713 ;\r\nC -1 ; WX 722 ; N Ccaron ; B 49 -19 687 914 ;\r\nC -1 ; WX 556 ; N ugrave ; B 16 -14 537 713 ;\r\nC -1 ; WX 549 ; N radical ; B 10 -46 512 850 ;\r\nC -1 ; WX 722 ; N Dcaron ; B 14 0 690 914 ;\r\nC -1 ; WX 444 ; N rcommaaccent ; B 29 -218 434 473 ;\r\nC -1 ; WX 722 ; N Ntilde ; B 16 -18 701 884 ;\r\nC -1 ; WX 500 ; N otilde ; B 25 -14 476 674 ;\r\nC -1 ; WX 722 ; N Rcommaaccent ; B 26 -218 715 676 ;\r\nC -1 ; WX 667 ; N Lcommaaccent ; B 19 -218 638 676 ;\r\nC -1 ; WX 722 ; N Atilde ; B 9 0 689 884 ;\r\nC -1 ; WX 722 ; N Aogonek ; B 9 -193 699 690 ;\r\nC -1 ; WX 722 ; N Aring ; B 9 0 689 935 ;\r\nC -1 ; WX 778 ; N Otilde ; B 35 -19 743 884 ;\r\nC -1 ; WX 444 ; N zdotaccent ; B 21 0 420 691 ;\r\nC -1 ; WX 667 ; N Ecaron ; B 16 0 641 914 ;\r\nC -1 ; WX 389 ; N Iogonek ; B 20 -193 370 676 ;\r\nC -1 ; WX 556 ; N kcommaaccent ; B 22 -218 543 676 ;\r\nC -1 ; WX 570 ; N minus ; B 33 209 537 297 ;\r\nC -1 ; WX 389 ; N Icircumflex ; B 20 0 370 914 ;\r\nC -1 ; WX 556 ; N ncaron ; B 21 0 539 704 ;\r\nC -1 ; WX 333 ; N tcommaaccent ; B 20 -218 332 630 ;\r\nC -1 ; WX 570 ; N logicalnot ; B 33 108 537 399 ;\r\nC -1 ; WX 500 ; N odieresis ; B 25 -14 476 667 ;\r\nC -1 ; WX 556 ; N udieresis ; B 16 -14 537 667 ;\r\nC -1 ; WX 549 ; N notequal ; B 15 -49 540 570 ;\r\nC -1 ; WX 500 ; N gcommaaccent ; B 28 -206 483 829 ;\r\nC -1 ; WX 500 ; N eth ; B 25 -14 476 691 ;\r\nC -1 ; WX 444 ; N zcaron ; B 21 0 420 704 ;\r\nC -1 ; WX 556 ; N ncommaaccent ; B 21 -218 539 473 ;\r\nC -1 ; WX 300 ; N onesuperior ; B 28 275 273 688 ;\r\nC -1 ; WX 278 ; N imacron ; B -8 0 272 637 ;\r\nC -1 ; WX 500 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nStartKernData\r\nStartKernPairs 2242\r\nKPX A C -55\r\nKPX A Cacute -55\r\nKPX A Ccaron -55\r\nKPX A Ccedilla -55\r\nKPX A G -55\r\nKPX A Gbreve -55\r\nKPX A Gcommaaccent -55\r\nKPX A O -45\r\nKPX A Oacute -45\r\nKPX A Ocircumflex -45\r\nKPX A Odieresis -45\r\nKPX A Ograve -45\r\nKPX A Ohungarumlaut -45\r\nKPX A Omacron -45\r\nKPX A Oslash -45\r\nKPX A Otilde -45\r\nKPX A Q -45\r\nKPX A T -95\r\nKPX A Tcaron -95\r\nKPX A Tcommaaccent -95\r\nKPX A U -50\r\nKPX A Uacute -50\r\nKPX A Ucircumflex -50\r\nKPX A Udieresis -50\r\nKPX A Ugrave -50\r\nKPX A Uhungarumlaut -50\r\nKPX A Umacron -50\r\nKPX A Uogonek -50\r\nKPX A Uring -50\r\nKPX A V -145\r\nKPX A W -130\r\nKPX A Y -100\r\nKPX A Yacute -100\r\nKPX A Ydieresis -100\r\nKPX A p -25\r\nKPX A quoteright -74\r\nKPX A u -50\r\nKPX A uacute -50\r\nKPX A ucircumflex -50\r\nKPX A udieresis -50\r\nKPX A ugrave -50\r\nKPX A uhungarumlaut -50\r\nKPX A umacron -50\r\nKPX A uogonek -50\r\nKPX A uring -50\r\nKPX A v -100\r\nKPX A w -90\r\nKPX A y -74\r\nKPX A yacute -74\r\nKPX A ydieresis -74\r\nKPX Aacute C -55\r\nKPX Aacute Cacute -55\r\nKPX Aacute Ccaron -55\r\nKPX Aacute Ccedilla -55\r\nKPX Aacute G -55\r\nKPX Aacute Gbreve -55\r\nKPX Aacute Gcommaaccent -55\r\nKPX Aacute O -45\r\nKPX Aacute Oacute -45\r\nKPX Aacute Ocircumflex -45\r\nKPX Aacute Odieresis -45\r\nKPX Aacute Ograve -45\r\nKPX Aacute Ohungarumlaut -45\r\nKPX Aacute Omacron -45\r\nKPX Aacute Oslash -45\r\nKPX Aacute Otilde -45\r\nKPX Aacute Q -45\r\nKPX Aacute T -95\r\nKPX Aacute Tcaron -95\r\nKPX Aacute Tcommaaccent -95\r\nKPX Aacute U -50\r\nKPX Aacute Uacute -50\r\nKPX Aacute Ucircumflex -50\r\nKPX Aacute Udieresis -50\r\nKPX Aacute Ugrave -50\r\nKPX Aacute Uhungarumlaut -50\r\nKPX Aacute Umacron -50\r\nKPX Aacute Uogonek -50\r\nKPX Aacute Uring -50\r\nKPX Aacute V -145\r\nKPX Aacute W -130\r\nKPX Aacute Y -100\r\nKPX Aacute Yacute -100\r\nKPX Aacute Ydieresis -100\r\nKPX Aacute p -25\r\nKPX Aacute quoteright -74\r\nKPX Aacute u -50\r\nKPX Aacute uacute -50\r\nKPX Aacute ucircumflex -50\r\nKPX Aacute udieresis -50\r\nKPX Aacute ugrave -50\r\nKPX Aacute uhungarumlaut -50\r\nKPX Aacute umacron -50\r\nKPX Aacute uogonek -50\r\nKPX Aacute uring -50\r\nKPX Aacute v -100\r\nKPX Aacute w -90\r\nKPX Aacute y -74\r\nKPX Aacute yacute -74\r\nKPX Aacute ydieresis -74\r\nKPX Abreve C -55\r\nKPX Abreve Cacute -55\r\nKPX Abreve Ccaron -55\r\nKPX Abreve Ccedilla -55\r\nKPX Abreve G -55\r\nKPX Abreve Gbreve -55\r\nKPX Abreve Gcommaaccent -55\r\nKPX Abreve O -45\r\nKPX Abreve Oacute -45\r\nKPX Abreve Ocircumflex -45\r\nKPX Abreve Odieresis -45\r\nKPX Abreve Ograve -45\r\nKPX Abreve Ohungarumlaut -45\r\nKPX Abreve Omacron -45\r\nKPX Abreve Oslash -45\r\nKPX Abreve Otilde -45\r\nKPX Abreve Q -45\r\nKPX Abreve T -95\r\nKPX Abreve Tcaron -95\r\nKPX Abreve Tcommaaccent -95\r\nKPX Abreve U -50\r\nKPX Abreve Uacute -50\r\nKPX Abreve Ucircumflex -50\r\nKPX Abreve Udieresis -50\r\nKPX Abreve Ugrave -50\r\nKPX Abreve Uhungarumlaut -50\r\nKPX Abreve Umacron -50\r\nKPX Abreve Uogonek -50\r\nKPX Abreve Uring -50\r\nKPX Abreve V -145\r\nKPX Abreve W -130\r\nKPX Abreve Y -100\r\nKPX Abreve Yacute -100\r\nKPX Abreve Ydieresis -100\r\nKPX Abreve p -25\r\nKPX Abreve quoteright -74\r\nKPX Abreve u -50\r\nKPX Abreve uacute -50\r\nKPX Abreve ucircumflex -50\r\nKPX Abreve udieresis -50\r\nKPX Abreve ugrave -50\r\nKPX Abreve uhungarumlaut -50\r\nKPX Abreve umacron -50\r\nKPX Abreve uogonek -50\r\nKPX Abreve uring -50\r\nKPX Abreve v -100\r\nKPX Abreve w -90\r\nKPX Abreve y -74\r\nKPX Abreve yacute -74\r\nKPX Abreve ydieresis -74\r\nKPX Acircumflex C -55\r\nKPX Acircumflex Cacute -55\r\nKPX Acircumflex Ccaron -55\r\nKPX Acircumflex Ccedilla -55\r\nKPX Acircumflex G -55\r\nKPX Acircumflex Gbreve -55\r\nKPX Acircumflex Gcommaaccent -55\r\nKPX Acircumflex O -45\r\nKPX Acircumflex Oacute -45\r\nKPX Acircumflex Ocircumflex -45\r\nKPX Acircumflex Odieresis -45\r\nKPX Acircumflex Ograve -45\r\nKPX Acircumflex Ohungarumlaut -45\r\nKPX Acircumflex Omacron -45\r\nKPX Acircumflex Oslash -45\r\nKPX Acircumflex Otilde -45\r\nKPX Acircumflex Q -45\r\nKPX Acircumflex T -95\r\nKPX Acircumflex Tcaron -95\r\nKPX Acircumflex Tcommaaccent -95\r\nKPX Acircumflex U -50\r\nKPX Acircumflex Uacute -50\r\nKPX Acircumflex Ucircumflex -50\r\nKPX Acircumflex Udieresis -50\r\nKPX Acircumflex Ugrave -50\r\nKPX Acircumflex Uhungarumlaut -50\r\nKPX Acircumflex Umacron -50\r\nKPX Acircumflex Uogonek -50\r\nKPX Acircumflex Uring -50\r\nKPX Acircumflex V -145\r\nKPX Acircumflex W -130\r\nKPX Acircumflex Y -100\r\nKPX Acircumflex Yacute -100\r\nKPX Acircumflex Ydieresis -100\r\nKPX Acircumflex p -25\r\nKPX Acircumflex quoteright -74\r\nKPX Acircumflex u -50\r\nKPX Acircumflex uacute -50\r\nKPX Acircumflex ucircumflex -50\r\nKPX Acircumflex udieresis -50\r\nKPX Acircumflex ugrave -50\r\nKPX Acircumflex uhungarumlaut -50\r\nKPX Acircumflex umacron -50\r\nKPX Acircumflex uogonek -50\r\nKPX Acircumflex uring -50\r\nKPX Acircumflex v -100\r\nKPX Acircumflex w -90\r\nKPX Acircumflex y -74\r\nKPX Acircumflex yacute -74\r\nKPX Acircumflex ydieresis -74\r\nKPX Adieresis C -55\r\nKPX Adieresis Cacute -55\r\nKPX Adieresis Ccaron -55\r\nKPX Adieresis Ccedilla -55\r\nKPX Adieresis G -55\r\nKPX Adieresis Gbreve -55\r\nKPX Adieresis Gcommaaccent -55\r\nKPX Adieresis O -45\r\nKPX Adieresis Oacute -45\r\nKPX Adieresis Ocircumflex -45\r\nKPX Adieresis Odieresis -45\r\nKPX Adieresis Ograve -45\r\nKPX Adieresis Ohungarumlaut -45\r\nKPX Adieresis Omacron -45\r\nKPX Adieresis Oslash -45\r\nKPX Adieresis Otilde -45\r\nKPX Adieresis Q -45\r\nKPX Adieresis T -95\r\nKPX Adieresis Tcaron -95\r\nKPX Adieresis Tcommaaccent -95\r\nKPX Adieresis U -50\r\nKPX Adieresis Uacute -50\r\nKPX Adieresis Ucircumflex -50\r\nKPX Adieresis Udieresis -50\r\nKPX Adieresis Ugrave -50\r\nKPX Adieresis Uhungarumlaut -50\r\nKPX Adieresis Umacron -50\r\nKPX Adieresis Uogonek -50\r\nKPX Adieresis Uring -50\r\nKPX Adieresis V -145\r\nKPX Adieresis W -130\r\nKPX Adieresis Y -100\r\nKPX Adieresis Yacute -100\r\nKPX Adieresis Ydieresis -100\r\nKPX Adieresis p -25\r\nKPX Adieresis quoteright -74\r\nKPX Adieresis u -50\r\nKPX Adieresis uacute -50\r\nKPX Adieresis ucircumflex -50\r\nKPX Adieresis udieresis -50\r\nKPX Adieresis ugrave -50\r\nKPX Adieresis uhungarumlaut -50\r\nKPX Adieresis umacron -50\r\nKPX Adieresis uogonek -50\r\nKPX Adieresis uring -50\r\nKPX Adieresis v -100\r\nKPX Adieresis w -90\r\nKPX Adieresis y -74\r\nKPX Adieresis yacute -74\r\nKPX Adieresis ydieresis -74\r\nKPX Agrave C -55\r\nKPX Agrave Cacute -55\r\nKPX Agrave Ccaron -55\r\nKPX Agrave Ccedilla -55\r\nKPX Agrave G -55\r\nKPX Agrave Gbreve -55\r\nKPX Agrave Gcommaaccent -55\r\nKPX Agrave O -45\r\nKPX Agrave Oacute -45\r\nKPX Agrave Ocircumflex -45\r\nKPX Agrave Odieresis -45\r\nKPX Agrave Ograve -45\r\nKPX Agrave Ohungarumlaut -45\r\nKPX Agrave Omacron -45\r\nKPX Agrave Oslash -45\r\nKPX Agrave Otilde -45\r\nKPX Agrave Q -45\r\nKPX Agrave T -95\r\nKPX Agrave Tcaron -95\r\nKPX Agrave Tcommaaccent -95\r\nKPX Agrave U -50\r\nKPX Agrave Uacute -50\r\nKPX Agrave Ucircumflex -50\r\nKPX Agrave Udieresis -50\r\nKPX Agrave Ugrave -50\r\nKPX Agrave Uhungarumlaut -50\r\nKPX Agrave Umacron -50\r\nKPX Agrave Uogonek -50\r\nKPX Agrave Uring -50\r\nKPX Agrave V -145\r\nKPX Agrave W -130\r\nKPX Agrave Y -100\r\nKPX Agrave Yacute -100\r\nKPX Agrave Ydieresis -100\r\nKPX Agrave p -25\r\nKPX Agrave quoteright -74\r\nKPX Agrave u -50\r\nKPX Agrave uacute -50\r\nKPX Agrave ucircumflex -50\r\nKPX Agrave udieresis -50\r\nKPX Agrave ugrave -50\r\nKPX Agrave uhungarumlaut -50\r\nKPX Agrave umacron -50\r\nKPX Agrave uogonek -50\r\nKPX Agrave uring -50\r\nKPX Agrave v -100\r\nKPX Agrave w -90\r\nKPX Agrave y -74\r\nKPX Agrave yacute -74\r\nKPX Agrave ydieresis -74\r\nKPX Amacron C -55\r\nKPX Amacron Cacute -55\r\nKPX Amacron Ccaron -55\r\nKPX Amacron Ccedilla -55\r\nKPX Amacron G -55\r\nKPX Amacron Gbreve -55\r\nKPX Amacron Gcommaaccent -55\r\nKPX Amacron O -45\r\nKPX Amacron Oacute -45\r\nKPX Amacron Ocircumflex -45\r\nKPX Amacron Odieresis -45\r\nKPX Amacron Ograve -45\r\nKPX Amacron Ohungarumlaut -45\r\nKPX Amacron Omacron -45\r\nKPX Amacron Oslash -45\r\nKPX Amacron Otilde -45\r\nKPX Amacron Q -45\r\nKPX Amacron T -95\r\nKPX Amacron Tcaron -95\r\nKPX Amacron Tcommaaccent -95\r\nKPX Amacron U -50\r\nKPX Amacron Uacute -50\r\nKPX Amacron Ucircumflex -50\r\nKPX Amacron Udieresis -50\r\nKPX Amacron Ugrave -50\r\nKPX Amacron Uhungarumlaut -50\r\nKPX Amacron Umacron -50\r\nKPX Amacron Uogonek -50\r\nKPX Amacron Uring -50\r\nKPX Amacron V -145\r\nKPX Amacron W -130\r\nKPX Amacron Y -100\r\nKPX Amacron Yacute -100\r\nKPX Amacron Ydieresis -100\r\nKPX Amacron p -25\r\nKPX Amacron quoteright -74\r\nKPX Amacron u -50\r\nKPX Amacron uacute -50\r\nKPX Amacron ucircumflex -50\r\nKPX Amacron udieresis -50\r\nKPX Amacron ugrave -50\r\nKPX Amacron uhungarumlaut -50\r\nKPX Amacron umacron -50\r\nKPX Amacron uogonek -50\r\nKPX Amacron uring -50\r\nKPX Amacron v -100\r\nKPX Amacron w -90\r\nKPX Amacron y -74\r\nKPX Amacron yacute -74\r\nKPX Amacron ydieresis -74\r\nKPX Aogonek C -55\r\nKPX Aogonek Cacute -55\r\nKPX Aogonek Ccaron -55\r\nKPX Aogonek Ccedilla -55\r\nKPX Aogonek G -55\r\nKPX Aogonek Gbreve -55\r\nKPX Aogonek Gcommaaccent -55\r\nKPX Aogonek O -45\r\nKPX Aogonek Oacute -45\r\nKPX Aogonek Ocircumflex -45\r\nKPX Aogonek Odieresis -45\r\nKPX Aogonek Ograve -45\r\nKPX Aogonek Ohungarumlaut -45\r\nKPX Aogonek Omacron -45\r\nKPX Aogonek Oslash -45\r\nKPX Aogonek Otilde -45\r\nKPX Aogonek Q -45\r\nKPX Aogonek T -95\r\nKPX Aogonek Tcaron -95\r\nKPX Aogonek Tcommaaccent -95\r\nKPX Aogonek U -50\r\nKPX Aogonek Uacute -50\r\nKPX Aogonek Ucircumflex -50\r\nKPX Aogonek Udieresis -50\r\nKPX Aogonek Ugrave -50\r\nKPX Aogonek Uhungarumlaut -50\r\nKPX Aogonek Umacron -50\r\nKPX Aogonek Uogonek -50\r\nKPX Aogonek Uring -50\r\nKPX Aogonek V -145\r\nKPX Aogonek W -130\r\nKPX Aogonek Y -100\r\nKPX Aogonek Yacute -100\r\nKPX Aogonek Ydieresis -100\r\nKPX Aogonek p -25\r\nKPX Aogonek quoteright -74\r\nKPX Aogonek u -50\r\nKPX Aogonek uacute -50\r\nKPX Aogonek ucircumflex -50\r\nKPX Aogonek udieresis -50\r\nKPX Aogonek ugrave -50\r\nKPX Aogonek uhungarumlaut -50\r\nKPX Aogonek umacron -50\r\nKPX Aogonek uogonek -50\r\nKPX Aogonek uring -50\r\nKPX Aogonek v -100\r\nKPX Aogonek w -90\r\nKPX Aogonek y -34\r\nKPX Aogonek yacute -34\r\nKPX Aogonek ydieresis -34\r\nKPX Aring C -55\r\nKPX Aring Cacute -55\r\nKPX Aring Ccaron -55\r\nKPX Aring Ccedilla -55\r\nKPX Aring G -55\r\nKPX Aring Gbreve -55\r\nKPX Aring Gcommaaccent -55\r\nKPX Aring O -45\r\nKPX Aring Oacute -45\r\nKPX Aring Ocircumflex -45\r\nKPX Aring Odieresis -45\r\nKPX Aring Ograve -45\r\nKPX Aring Ohungarumlaut -45\r\nKPX Aring Omacron -45\r\nKPX Aring Oslash -45\r\nKPX Aring Otilde -45\r\nKPX Aring Q -45\r\nKPX Aring T -95\r\nKPX Aring Tcaron -95\r\nKPX Aring Tcommaaccent -95\r\nKPX Aring U -50\r\nKPX Aring Uacute -50\r\nKPX Aring Ucircumflex -50\r\nKPX Aring Udieresis -50\r\nKPX Aring Ugrave -50\r\nKPX Aring Uhungarumlaut -50\r\nKPX Aring Umacron -50\r\nKPX Aring Uogonek -50\r\nKPX Aring Uring -50\r\nKPX Aring V -145\r\nKPX Aring W -130\r\nKPX Aring Y -100\r\nKPX Aring Yacute -100\r\nKPX Aring Ydieresis -100\r\nKPX Aring p -25\r\nKPX Aring quoteright -74\r\nKPX Aring u -50\r\nKPX Aring uacute -50\r\nKPX Aring ucircumflex -50\r\nKPX Aring udieresis -50\r\nKPX Aring ugrave -50\r\nKPX Aring uhungarumlaut -50\r\nKPX Aring umacron -50\r\nKPX Aring uogonek -50\r\nKPX Aring uring -50\r\nKPX Aring v -100\r\nKPX Aring w -90\r\nKPX Aring y -74\r\nKPX Aring yacute -74\r\nKPX Aring ydieresis -74\r\nKPX Atilde C -55\r\nKPX Atilde Cacute -55\r\nKPX Atilde Ccaron -55\r\nKPX Atilde Ccedilla -55\r\nKPX Atilde G -55\r\nKPX Atilde Gbreve -55\r\nKPX Atilde Gcommaaccent -55\r\nKPX Atilde O -45\r\nKPX Atilde Oacute -45\r\nKPX Atilde Ocircumflex -45\r\nKPX Atilde Odieresis -45\r\nKPX Atilde Ograve -45\r\nKPX Atilde Ohungarumlaut -45\r\nKPX Atilde Omacron -45\r\nKPX Atilde Oslash -45\r\nKPX Atilde Otilde -45\r\nKPX Atilde Q -45\r\nKPX Atilde T -95\r\nKPX Atilde Tcaron -95\r\nKPX Atilde Tcommaaccent -95\r\nKPX Atilde U -50\r\nKPX Atilde Uacute -50\r\nKPX Atilde Ucircumflex -50\r\nKPX Atilde Udieresis -50\r\nKPX Atilde Ugrave -50\r\nKPX Atilde Uhungarumlaut -50\r\nKPX Atilde Umacron -50\r\nKPX Atilde Uogonek -50\r\nKPX Atilde Uring -50\r\nKPX Atilde V -145\r\nKPX Atilde W -130\r\nKPX Atilde Y -100\r\nKPX Atilde Yacute -100\r\nKPX Atilde Ydieresis -100\r\nKPX Atilde p -25\r\nKPX Atilde quoteright -74\r\nKPX Atilde u -50\r\nKPX Atilde uacute -50\r\nKPX Atilde ucircumflex -50\r\nKPX Atilde udieresis -50\r\nKPX Atilde ugrave -50\r\nKPX Atilde uhungarumlaut -50\r\nKPX Atilde umacron -50\r\nKPX Atilde uogonek -50\r\nKPX Atilde uring -50\r\nKPX Atilde v -100\r\nKPX Atilde w -90\r\nKPX Atilde y -74\r\nKPX Atilde yacute -74\r\nKPX Atilde ydieresis -74\r\nKPX B A -30\r\nKPX B Aacute -30\r\nKPX B Abreve -30\r\nKPX B Acircumflex -30\r\nKPX B Adieresis -30\r\nKPX B Agrave -30\r\nKPX B Amacron -30\r\nKPX B Aogonek -30\r\nKPX B Aring -30\r\nKPX B Atilde -30\r\nKPX B U -10\r\nKPX B Uacute -10\r\nKPX B Ucircumflex -10\r\nKPX B Udieresis -10\r\nKPX B Ugrave -10\r\nKPX B Uhungarumlaut -10\r\nKPX B Umacron -10\r\nKPX B Uogonek -10\r\nKPX B Uring -10\r\nKPX D A -35\r\nKPX D Aacute -35\r\nKPX D Abreve -35\r\nKPX D Acircumflex -35\r\nKPX D Adieresis -35\r\nKPX D Agrave -35\r\nKPX D Amacron -35\r\nKPX D Aogonek -35\r\nKPX D Aring -35\r\nKPX D Atilde -35\r\nKPX D V -40\r\nKPX D W -40\r\nKPX D Y -40\r\nKPX D Yacute -40\r\nKPX D Ydieresis -40\r\nKPX D period -20\r\nKPX Dcaron A -35\r\nKPX Dcaron Aacute -35\r\nKPX Dcaron Abreve -35\r\nKPX Dcaron Acircumflex -35\r\nKPX Dcaron Adieresis -35\r\nKPX Dcaron Agrave -35\r\nKPX Dcaron Amacron -35\r\nKPX Dcaron Aogonek -35\r\nKPX Dcaron Aring -35\r\nKPX Dcaron Atilde -35\r\nKPX Dcaron V -40\r\nKPX Dcaron W -40\r\nKPX Dcaron Y -40\r\nKPX Dcaron Yacute -40\r\nKPX Dcaron Ydieresis -40\r\nKPX Dcaron period -20\r\nKPX Dcroat A -35\r\nKPX Dcroat Aacute -35\r\nKPX Dcroat Abreve -35\r\nKPX Dcroat Acircumflex -35\r\nKPX Dcroat Adieresis -35\r\nKPX Dcroat Agrave -35\r\nKPX Dcroat Amacron -35\r\nKPX Dcroat Aogonek -35\r\nKPX Dcroat Aring -35\r\nKPX Dcroat Atilde -35\r\nKPX Dcroat V -40\r\nKPX Dcroat W -40\r\nKPX Dcroat Y -40\r\nKPX Dcroat Yacute -40\r\nKPX Dcroat Ydieresis -40\r\nKPX Dcroat period -20\r\nKPX F A -90\r\nKPX F Aacute -90\r\nKPX F Abreve -90\r\nKPX F Acircumflex -90\r\nKPX F Adieresis -90\r\nKPX F Agrave -90\r\nKPX F Amacron -90\r\nKPX F Aogonek -90\r\nKPX F Aring -90\r\nKPX F Atilde -90\r\nKPX F a -25\r\nKPX F aacute -25\r\nKPX F abreve -25\r\nKPX F acircumflex -25\r\nKPX F adieresis -25\r\nKPX F agrave -25\r\nKPX F amacron -25\r\nKPX F aogonek -25\r\nKPX F aring -25\r\nKPX F atilde -25\r\nKPX F comma -92\r\nKPX F e -25\r\nKPX F eacute -25\r\nKPX F ecaron -25\r\nKPX F ecircumflex -25\r\nKPX F edieresis -25\r\nKPX F edotaccent -25\r\nKPX F egrave -25\r\nKPX F emacron -25\r\nKPX F eogonek -25\r\nKPX F o -25\r\nKPX F oacute -25\r\nKPX F ocircumflex -25\r\nKPX F odieresis -25\r\nKPX F ograve -25\r\nKPX F ohungarumlaut -25\r\nKPX F omacron -25\r\nKPX F oslash -25\r\nKPX F otilde -25\r\nKPX F period -110\r\nKPX J A -30\r\nKPX J Aacute -30\r\nKPX J Abreve -30\r\nKPX J Acircumflex -30\r\nKPX J Adieresis -30\r\nKPX J Agrave -30\r\nKPX J Amacron -30\r\nKPX J Aogonek -30\r\nKPX J Aring -30\r\nKPX J Atilde -30\r\nKPX J a -15\r\nKPX J aacute -15\r\nKPX J abreve -15\r\nKPX J acircumflex -15\r\nKPX J adieresis -15\r\nKPX J agrave -15\r\nKPX J amacron -15\r\nKPX J aogonek -15\r\nKPX J aring -15\r\nKPX J atilde -15\r\nKPX J e -15\r\nKPX J eacute -15\r\nKPX J ecaron -15\r\nKPX J ecircumflex -15\r\nKPX J edieresis -15\r\nKPX J edotaccent -15\r\nKPX J egrave -15\r\nKPX J emacron -15\r\nKPX J eogonek -15\r\nKPX J o -15\r\nKPX J oacute -15\r\nKPX J ocircumflex -15\r\nKPX J odieresis -15\r\nKPX J ograve -15\r\nKPX J ohungarumlaut -15\r\nKPX J omacron -15\r\nKPX J oslash -15\r\nKPX J otilde -15\r\nKPX J period -20\r\nKPX J u -15\r\nKPX J uacute -15\r\nKPX J ucircumflex -15\r\nKPX J udieresis -15\r\nKPX J ugrave -15\r\nKPX J uhungarumlaut -15\r\nKPX J umacron -15\r\nKPX J uogonek -15\r\nKPX J uring -15\r\nKPX K O -30\r\nKPX K Oacute -30\r\nKPX K Ocircumflex -30\r\nKPX K Odieresis -30\r\nKPX K Ograve -30\r\nKPX K Ohungarumlaut -30\r\nKPX K Omacron -30\r\nKPX K Oslash -30\r\nKPX K Otilde -30\r\nKPX K e -25\r\nKPX K eacute -25\r\nKPX K ecaron -25\r\nKPX K ecircumflex -25\r\nKPX K edieresis -25\r\nKPX K edotaccent -25\r\nKPX K egrave -25\r\nKPX K emacron -25\r\nKPX K eogonek -25\r\nKPX K o -25\r\nKPX K oacute -25\r\nKPX K ocircumflex -25\r\nKPX K odieresis -25\r\nKPX K ograve -25\r\nKPX K ohungarumlaut -25\r\nKPX K omacron -25\r\nKPX K oslash -25\r\nKPX K otilde -25\r\nKPX K u -15\r\nKPX K uacute -15\r\nKPX K ucircumflex -15\r\nKPX K udieresis -15\r\nKPX K ugrave -15\r\nKPX K uhungarumlaut -15\r\nKPX K umacron -15\r\nKPX K uogonek -15\r\nKPX K uring -15\r\nKPX K y -45\r\nKPX K yacute -45\r\nKPX K ydieresis -45\r\nKPX Kcommaaccent O -30\r\nKPX Kcommaaccent Oacute -30\r\nKPX Kcommaaccent Ocircumflex -30\r\nKPX Kcommaaccent Odieresis -30\r\nKPX Kcommaaccent Ograve -30\r\nKPX Kcommaaccent Ohungarumlaut -30\r\nKPX Kcommaaccent Omacron -30\r\nKPX Kcommaaccent Oslash -30\r\nKPX Kcommaaccent Otilde -30\r\nKPX Kcommaaccent e -25\r\nKPX Kcommaaccent eacute -25\r\nKPX Kcommaaccent ecaron -25\r\nKPX Kcommaaccent ecircumflex -25\r\nKPX Kcommaaccent edieresis -25\r\nKPX Kcommaaccent edotaccent -25\r\nKPX Kcommaaccent egrave -25\r\nKPX Kcommaaccent emacron -25\r\nKPX Kcommaaccent eogonek -25\r\nKPX Kcommaaccent o -25\r\nKPX Kcommaaccent oacute -25\r\nKPX Kcommaaccent ocircumflex -25\r\nKPX Kcommaaccent odieresis -25\r\nKPX Kcommaaccent ograve -25\r\nKPX Kcommaaccent ohungarumlaut -25\r\nKPX Kcommaaccent omacron -25\r\nKPX Kcommaaccent oslash -25\r\nKPX Kcommaaccent otilde -25\r\nKPX Kcommaaccent u -15\r\nKPX Kcommaaccent uacute -15\r\nKPX Kcommaaccent ucircumflex -15\r\nKPX Kcommaaccent udieresis -15\r\nKPX Kcommaaccent ugrave -15\r\nKPX Kcommaaccent uhungarumlaut -15\r\nKPX Kcommaaccent umacron -15\r\nKPX Kcommaaccent uogonek -15\r\nKPX Kcommaaccent uring -15\r\nKPX Kcommaaccent y -45\r\nKPX Kcommaaccent yacute -45\r\nKPX Kcommaaccent ydieresis -45\r\nKPX L T -92\r\nKPX L Tcaron -92\r\nKPX L Tcommaaccent -92\r\nKPX L V -92\r\nKPX L W -92\r\nKPX L Y -92\r\nKPX L Yacute -92\r\nKPX L Ydieresis -92\r\nKPX L quotedblright -20\r\nKPX L quoteright -110\r\nKPX L y -55\r\nKPX L yacute -55\r\nKPX L ydieresis -55\r\nKPX Lacute T -92\r\nKPX Lacute Tcaron -92\r\nKPX Lacute Tcommaaccent -92\r\nKPX Lacute V -92\r\nKPX Lacute W -92\r\nKPX Lacute Y -92\r\nKPX Lacute Yacute -92\r\nKPX Lacute Ydieresis -92\r\nKPX Lacute quotedblright -20\r\nKPX Lacute quoteright -110\r\nKPX Lacute y -55\r\nKPX Lacute yacute -55\r\nKPX Lacute ydieresis -55\r\nKPX Lcommaaccent T -92\r\nKPX Lcommaaccent Tcaron -92\r\nKPX Lcommaaccent Tcommaaccent -92\r\nKPX Lcommaaccent V -92\r\nKPX Lcommaaccent W -92\r\nKPX Lcommaaccent Y -92\r\nKPX Lcommaaccent Yacute -92\r\nKPX Lcommaaccent Ydieresis -92\r\nKPX Lcommaaccent quotedblright -20\r\nKPX Lcommaaccent quoteright -110\r\nKPX Lcommaaccent y -55\r\nKPX Lcommaaccent yacute -55\r\nKPX Lcommaaccent ydieresis -55\r\nKPX Lslash T -92\r\nKPX Lslash Tcaron -92\r\nKPX Lslash Tcommaaccent -92\r\nKPX Lslash V -92\r\nKPX Lslash W -92\r\nKPX Lslash Y -92\r\nKPX Lslash Yacute -92\r\nKPX Lslash Ydieresis -92\r\nKPX Lslash quotedblright -20\r\nKPX Lslash quoteright -110\r\nKPX Lslash y -55\r\nKPX Lslash yacute -55\r\nKPX Lslash ydieresis -55\r\nKPX N A -20\r\nKPX N Aacute -20\r\nKPX N Abreve -20\r\nKPX N Acircumflex -20\r\nKPX N Adieresis -20\r\nKPX N Agrave -20\r\nKPX N Amacron -20\r\nKPX N Aogonek -20\r\nKPX N Aring -20\r\nKPX N Atilde -20\r\nKPX Nacute A -20\r\nKPX Nacute Aacute -20\r\nKPX Nacute Abreve -20\r\nKPX Nacute Acircumflex -20\r\nKPX Nacute Adieresis -20\r\nKPX Nacute Agrave -20\r\nKPX Nacute Amacron -20\r\nKPX Nacute Aogonek -20\r\nKPX Nacute Aring -20\r\nKPX Nacute Atilde -20\r\nKPX Ncaron A -20\r\nKPX Ncaron Aacute -20\r\nKPX Ncaron Abreve -20\r\nKPX Ncaron Acircumflex -20\r\nKPX Ncaron Adieresis -20\r\nKPX Ncaron Agrave -20\r\nKPX Ncaron Amacron -20\r\nKPX Ncaron Aogonek -20\r\nKPX Ncaron Aring -20\r\nKPX Ncaron Atilde -20\r\nKPX Ncommaaccent A -20\r\nKPX Ncommaaccent Aacute -20\r\nKPX Ncommaaccent Abreve -20\r\nKPX Ncommaaccent Acircumflex -20\r\nKPX Ncommaaccent Adieresis -20\r\nKPX Ncommaaccent Agrave -20\r\nKPX Ncommaaccent Amacron -20\r\nKPX Ncommaaccent Aogonek -20\r\nKPX Ncommaaccent Aring -20\r\nKPX Ncommaaccent Atilde -20\r\nKPX Ntilde A -20\r\nKPX Ntilde Aacute -20\r\nKPX Ntilde Abreve -20\r\nKPX Ntilde Acircumflex -20\r\nKPX Ntilde Adieresis -20\r\nKPX Ntilde Agrave -20\r\nKPX Ntilde Amacron -20\r\nKPX Ntilde Aogonek -20\r\nKPX Ntilde Aring -20\r\nKPX Ntilde Atilde -20\r\nKPX O A -40\r\nKPX O Aacute -40\r\nKPX O Abreve -40\r\nKPX O Acircumflex -40\r\nKPX O Adieresis -40\r\nKPX O Agrave -40\r\nKPX O Amacron -40\r\nKPX O Aogonek -40\r\nKPX O Aring -40\r\nKPX O Atilde -40\r\nKPX O T -40\r\nKPX O Tcaron -40\r\nKPX O Tcommaaccent -40\r\nKPX O V -50\r\nKPX O W -50\r\nKPX O X -40\r\nKPX O Y -50\r\nKPX O Yacute -50\r\nKPX O Ydieresis -50\r\nKPX Oacute A -40\r\nKPX Oacute Aacute -40\r\nKPX Oacute Abreve -40\r\nKPX Oacute Acircumflex -40\r\nKPX Oacute Adieresis -40\r\nKPX Oacute Agrave -40\r\nKPX Oacute Amacron -40\r\nKPX Oacute Aogonek -40\r\nKPX Oacute Aring -40\r\nKPX Oacute Atilde -40\r\nKPX Oacute T -40\r\nKPX Oacute Tcaron -40\r\nKPX Oacute Tcommaaccent -40\r\nKPX Oacute V -50\r\nKPX Oacute W -50\r\nKPX Oacute X -40\r\nKPX Oacute Y -50\r\nKPX Oacute Yacute -50\r\nKPX Oacute Ydieresis -50\r\nKPX Ocircumflex A -40\r\nKPX Ocircumflex Aacute -40\r\nKPX Ocircumflex Abreve -40\r\nKPX Ocircumflex Acircumflex -40\r\nKPX Ocircumflex Adieresis -40\r\nKPX Ocircumflex Agrave -40\r\nKPX Ocircumflex Amacron -40\r\nKPX Ocircumflex Aogonek -40\r\nKPX Ocircumflex Aring -40\r\nKPX Ocircumflex Atilde -40\r\nKPX Ocircumflex T -40\r\nKPX Ocircumflex Tcaron -40\r\nKPX Ocircumflex Tcommaaccent -40\r\nKPX Ocircumflex V -50\r\nKPX Ocircumflex W -50\r\nKPX Ocircumflex X -40\r\nKPX Ocircumflex Y -50\r\nKPX Ocircumflex Yacute -50\r\nKPX Ocircumflex Ydieresis -50\r\nKPX Odieresis A -40\r\nKPX Odieresis Aacute -40\r\nKPX Odieresis Abreve -40\r\nKPX Odieresis Acircumflex -40\r\nKPX Odieresis Adieresis -40\r\nKPX Odieresis Agrave -40\r\nKPX Odieresis Amacron -40\r\nKPX Odieresis Aogonek -40\r\nKPX Odieresis Aring -40\r\nKPX Odieresis Atilde -40\r\nKPX Odieresis T -40\r\nKPX Odieresis Tcaron -40\r\nKPX Odieresis Tcommaaccent -40\r\nKPX Odieresis V -50\r\nKPX Odieresis W -50\r\nKPX Odieresis X -40\r\nKPX Odieresis Y -50\r\nKPX Odieresis Yacute -50\r\nKPX Odieresis Ydieresis -50\r\nKPX Ograve A -40\r\nKPX Ograve Aacute -40\r\nKPX Ograve Abreve -40\r\nKPX Ograve Acircumflex -40\r\nKPX Ograve Adieresis -40\r\nKPX Ograve Agrave -40\r\nKPX Ograve Amacron -40\r\nKPX Ograve Aogonek -40\r\nKPX Ograve Aring -40\r\nKPX Ograve Atilde -40\r\nKPX Ograve T -40\r\nKPX Ograve Tcaron -40\r\nKPX Ograve Tcommaaccent -40\r\nKPX Ograve V -50\r\nKPX Ograve W -50\r\nKPX Ograve X -40\r\nKPX Ograve Y -50\r\nKPX Ograve Yacute -50\r\nKPX Ograve Ydieresis -50\r\nKPX Ohungarumlaut A -40\r\nKPX Ohungarumlaut Aacute -40\r\nKPX Ohungarumlaut Abreve -40\r\nKPX Ohungarumlaut Acircumflex -40\r\nKPX Ohungarumlaut Adieresis -40\r\nKPX Ohungarumlaut Agrave -40\r\nKPX Ohungarumlaut Amacron -40\r\nKPX Ohungarumlaut Aogonek -40\r\nKPX Ohungarumlaut Aring -40\r\nKPX Ohungarumlaut Atilde -40\r\nKPX Ohungarumlaut T -40\r\nKPX Ohungarumlaut Tcaron -40\r\nKPX Ohungarumlaut Tcommaaccent -40\r\nKPX Ohungarumlaut V -50\r\nKPX Ohungarumlaut W -50\r\nKPX Ohungarumlaut X -40\r\nKPX Ohungarumlaut Y -50\r\nKPX Ohungarumlaut Yacute -50\r\nKPX Ohungarumlaut Ydieresis -50\r\nKPX Omacron A -40\r\nKPX Omacron Aacute -40\r\nKPX Omacron Abreve -40\r\nKPX Omacron Acircumflex -40\r\nKPX Omacron Adieresis -40\r\nKPX Omacron Agrave -40\r\nKPX Omacron Amacron -40\r\nKPX Omacron Aogonek -40\r\nKPX Omacron Aring -40\r\nKPX Omacron Atilde -40\r\nKPX Omacron T -40\r\nKPX Omacron Tcaron -40\r\nKPX Omacron Tcommaaccent -40\r\nKPX Omacron V -50\r\nKPX Omacron W -50\r\nKPX Omacron X -40\r\nKPX Omacron Y -50\r\nKPX Omacron Yacute -50\r\nKPX Omacron Ydieresis -50\r\nKPX Oslash A -40\r\nKPX Oslash Aacute -40\r\nKPX Oslash Abreve -40\r\nKPX Oslash Acircumflex -40\r\nKPX Oslash Adieresis -40\r\nKPX Oslash Agrave -40\r\nKPX Oslash Amacron -40\r\nKPX Oslash Aogonek -40\r\nKPX Oslash Aring -40\r\nKPX Oslash Atilde -40\r\nKPX Oslash T -40\r\nKPX Oslash Tcaron -40\r\nKPX Oslash Tcommaaccent -40\r\nKPX Oslash V -50\r\nKPX Oslash W -50\r\nKPX Oslash X -40\r\nKPX Oslash Y -50\r\nKPX Oslash Yacute -50\r\nKPX Oslash Ydieresis -50\r\nKPX Otilde A -40\r\nKPX Otilde Aacute -40\r\nKPX Otilde Abreve -40\r\nKPX Otilde Acircumflex -40\r\nKPX Otilde Adieresis -40\r\nKPX Otilde Agrave -40\r\nKPX Otilde Amacron -40\r\nKPX Otilde Aogonek -40\r\nKPX Otilde Aring -40\r\nKPX Otilde Atilde -40\r\nKPX Otilde T -40\r\nKPX Otilde Tcaron -40\r\nKPX Otilde Tcommaaccent -40\r\nKPX Otilde V -50\r\nKPX Otilde W -50\r\nKPX Otilde X -40\r\nKPX Otilde Y -50\r\nKPX Otilde Yacute -50\r\nKPX Otilde Ydieresis -50\r\nKPX P A -74\r\nKPX P Aacute -74\r\nKPX P Abreve -74\r\nKPX P Acircumflex -74\r\nKPX P Adieresis -74\r\nKPX P Agrave -74\r\nKPX P Amacron -74\r\nKPX P Aogonek -74\r\nKPX P Aring -74\r\nKPX P Atilde -74\r\nKPX P a -10\r\nKPX P aacute -10\r\nKPX P abreve -10\r\nKPX P acircumflex -10\r\nKPX P adieresis -10\r\nKPX P agrave -10\r\nKPX P amacron -10\r\nKPX P aogonek -10\r\nKPX P aring -10\r\nKPX P atilde -10\r\nKPX P comma -92\r\nKPX P e -20\r\nKPX P eacute -20\r\nKPX P ecaron -20\r\nKPX P ecircumflex -20\r\nKPX P edieresis -20\r\nKPX P edotaccent -20\r\nKPX P egrave -20\r\nKPX P emacron -20\r\nKPX P eogonek -20\r\nKPX P o -20\r\nKPX P oacute -20\r\nKPX P ocircumflex -20\r\nKPX P odieresis -20\r\nKPX P ograve -20\r\nKPX P ohungarumlaut -20\r\nKPX P omacron -20\r\nKPX P oslash -20\r\nKPX P otilde -20\r\nKPX P period -110\r\nKPX Q U -10\r\nKPX Q Uacute -10\r\nKPX Q Ucircumflex -10\r\nKPX Q Udieresis -10\r\nKPX Q Ugrave -10\r\nKPX Q Uhungarumlaut -10\r\nKPX Q Umacron -10\r\nKPX Q Uogonek -10\r\nKPX Q Uring -10\r\nKPX Q period -20\r\nKPX R O -30\r\nKPX R Oacute -30\r\nKPX R Ocircumflex -30\r\nKPX R Odieresis -30\r\nKPX R Ograve -30\r\nKPX R Ohungarumlaut -30\r\nKPX R Omacron -30\r\nKPX R Oslash -30\r\nKPX R Otilde -30\r\nKPX R T -40\r\nKPX R Tcaron -40\r\nKPX R Tcommaaccent -40\r\nKPX R U -30\r\nKPX R Uacute -30\r\nKPX R Ucircumflex -30\r\nKPX R Udieresis -30\r\nKPX R Ugrave -30\r\nKPX R Uhungarumlaut -30\r\nKPX R Umacron -30\r\nKPX R Uogonek -30\r\nKPX R Uring -30\r\nKPX R V -55\r\nKPX R W -35\r\nKPX R Y -35\r\nKPX R Yacute -35\r\nKPX R Ydieresis -35\r\nKPX Racute O -30\r\nKPX Racute Oacute -30\r\nKPX Racute Ocircumflex -30\r\nKPX Racute Odieresis -30\r\nKPX Racute Ograve -30\r\nKPX Racute Ohungarumlaut -30\r\nKPX Racute Omacron -30\r\nKPX Racute Oslash -30\r\nKPX Racute Otilde -30\r\nKPX Racute T -40\r\nKPX Racute Tcaron -40\r\nKPX Racute Tcommaaccent -40\r\nKPX Racute U -30\r\nKPX Racute Uacute -30\r\nKPX Racute Ucircumflex -30\r\nKPX Racute Udieresis -30\r\nKPX Racute Ugrave -30\r\nKPX Racute Uhungarumlaut -30\r\nKPX Racute Umacron -30\r\nKPX Racute Uogonek -30\r\nKPX Racute Uring -30\r\nKPX Racute V -55\r\nKPX Racute W -35\r\nKPX Racute Y -35\r\nKPX Racute Yacute -35\r\nKPX Racute Ydieresis -35\r\nKPX Rcaron O -30\r\nKPX Rcaron Oacute -30\r\nKPX Rcaron Ocircumflex -30\r\nKPX Rcaron Odieresis -30\r\nKPX Rcaron Ograve -30\r\nKPX Rcaron Ohungarumlaut -30\r\nKPX Rcaron Omacron -30\r\nKPX Rcaron Oslash -30\r\nKPX Rcaron Otilde -30\r\nKPX Rcaron T -40\r\nKPX Rcaron Tcaron -40\r\nKPX Rcaron Tcommaaccent -40\r\nKPX Rcaron U -30\r\nKPX Rcaron Uacute -30\r\nKPX Rcaron Ucircumflex -30\r\nKPX Rcaron Udieresis -30\r\nKPX Rcaron Ugrave -30\r\nKPX Rcaron Uhungarumlaut -30\r\nKPX Rcaron Umacron -30\r\nKPX Rcaron Uogonek -30\r\nKPX Rcaron Uring -30\r\nKPX Rcaron V -55\r\nKPX Rcaron W -35\r\nKPX Rcaron Y -35\r\nKPX Rcaron Yacute -35\r\nKPX Rcaron Ydieresis -35\r\nKPX Rcommaaccent O -30\r\nKPX Rcommaaccent Oacute -30\r\nKPX Rcommaaccent Ocircumflex -30\r\nKPX Rcommaaccent Odieresis -30\r\nKPX Rcommaaccent Ograve -30\r\nKPX Rcommaaccent Ohungarumlaut -30\r\nKPX Rcommaaccent Omacron -30\r\nKPX Rcommaaccent Oslash -30\r\nKPX Rcommaaccent Otilde -30\r\nKPX Rcommaaccent T -40\r\nKPX Rcommaaccent Tcaron -40\r\nKPX Rcommaaccent Tcommaaccent -40\r\nKPX Rcommaaccent U -30\r\nKPX Rcommaaccent Uacute -30\r\nKPX Rcommaaccent Ucircumflex -30\r\nKPX Rcommaaccent Udieresis -30\r\nKPX Rcommaaccent Ugrave -30\r\nKPX Rcommaaccent Uhungarumlaut -30\r\nKPX Rcommaaccent Umacron -30\r\nKPX Rcommaaccent Uogonek -30\r\nKPX Rcommaaccent Uring -30\r\nKPX Rcommaaccent V -55\r\nKPX Rcommaaccent W -35\r\nKPX Rcommaaccent Y -35\r\nKPX Rcommaaccent Yacute -35\r\nKPX Rcommaaccent Ydieresis -35\r\nKPX T A -90\r\nKPX T Aacute -90\r\nKPX T Abreve -90\r\nKPX T Acircumflex -90\r\nKPX T Adieresis -90\r\nKPX T Agrave -90\r\nKPX T Amacron -90\r\nKPX T Aogonek -90\r\nKPX T Aring -90\r\nKPX T Atilde -90\r\nKPX T O -18\r\nKPX T Oacute -18\r\nKPX T Ocircumflex -18\r\nKPX T Odieresis -18\r\nKPX T Ograve -18\r\nKPX T Ohungarumlaut -18\r\nKPX T Omacron -18\r\nKPX T Oslash -18\r\nKPX T Otilde -18\r\nKPX T a -92\r\nKPX T aacute -92\r\nKPX T abreve -52\r\nKPX T acircumflex -52\r\nKPX T adieresis -52\r\nKPX T agrave -52\r\nKPX T amacron -52\r\nKPX T aogonek -92\r\nKPX T aring -92\r\nKPX T atilde -52\r\nKPX T colon -74\r\nKPX T comma -74\r\nKPX T e -92\r\nKPX T eacute -92\r\nKPX T ecaron -92\r\nKPX T ecircumflex -92\r\nKPX T edieresis -52\r\nKPX T edotaccent -92\r\nKPX T egrave -52\r\nKPX T emacron -52\r\nKPX T eogonek -92\r\nKPX T hyphen -92\r\nKPX T i -18\r\nKPX T iacute -18\r\nKPX T iogonek -18\r\nKPX T o -92\r\nKPX T oacute -92\r\nKPX T ocircumflex -92\r\nKPX T odieresis -92\r\nKPX T ograve -92\r\nKPX T ohungarumlaut -92\r\nKPX T omacron -92\r\nKPX T oslash -92\r\nKPX T otilde -92\r\nKPX T period -90\r\nKPX T r -74\r\nKPX T racute -74\r\nKPX T rcaron -74\r\nKPX T rcommaaccent -74\r\nKPX T semicolon -74\r\nKPX T u -92\r\nKPX T uacute -92\r\nKPX T ucircumflex -92\r\nKPX T udieresis -92\r\nKPX T ugrave -92\r\nKPX T uhungarumlaut -92\r\nKPX T umacron -92\r\nKPX T uogonek -92\r\nKPX T uring -92\r\nKPX T w -74\r\nKPX T y -34\r\nKPX T yacute -34\r\nKPX T ydieresis -34\r\nKPX Tcaron A -90\r\nKPX Tcaron Aacute -90\r\nKPX Tcaron Abreve -90\r\nKPX Tcaron Acircumflex -90\r\nKPX Tcaron Adieresis -90\r\nKPX Tcaron Agrave -90\r\nKPX Tcaron Amacron -90\r\nKPX Tcaron Aogonek -90\r\nKPX Tcaron Aring -90\r\nKPX Tcaron Atilde -90\r\nKPX Tcaron O -18\r\nKPX Tcaron Oacute -18\r\nKPX Tcaron Ocircumflex -18\r\nKPX Tcaron Odieresis -18\r\nKPX Tcaron Ograve -18\r\nKPX Tcaron Ohungarumlaut -18\r\nKPX Tcaron Omacron -18\r\nKPX Tcaron Oslash -18\r\nKPX Tcaron Otilde -18\r\nKPX Tcaron a -92\r\nKPX Tcaron aacute -92\r\nKPX Tcaron abreve -52\r\nKPX Tcaron acircumflex -52\r\nKPX Tcaron adieresis -52\r\nKPX Tcaron agrave -52\r\nKPX Tcaron amacron -52\r\nKPX Tcaron aogonek -92\r\nKPX Tcaron aring -92\r\nKPX Tcaron atilde -52\r\nKPX Tcaron colon -74\r\nKPX Tcaron comma -74\r\nKPX Tcaron e -92\r\nKPX Tcaron eacute -92\r\nKPX Tcaron ecaron -92\r\nKPX Tcaron ecircumflex -92\r\nKPX Tcaron edieresis -52\r\nKPX Tcaron edotaccent -92\r\nKPX Tcaron egrave -52\r\nKPX Tcaron emacron -52\r\nKPX Tcaron eogonek -92\r\nKPX Tcaron hyphen -92\r\nKPX Tcaron i -18\r\nKPX Tcaron iacute -18\r\nKPX Tcaron iogonek -18\r\nKPX Tcaron o -92\r\nKPX Tcaron oacute -92\r\nKPX Tcaron ocircumflex -92\r\nKPX Tcaron odieresis -92\r\nKPX Tcaron ograve -92\r\nKPX Tcaron ohungarumlaut -92\r\nKPX Tcaron omacron -92\r\nKPX Tcaron oslash -92\r\nKPX Tcaron otilde -92\r\nKPX Tcaron period -90\r\nKPX Tcaron r -74\r\nKPX Tcaron racute -74\r\nKPX Tcaron rcaron -74\r\nKPX Tcaron rcommaaccent -74\r\nKPX Tcaron semicolon -74\r\nKPX Tcaron u -92\r\nKPX Tcaron uacute -92\r\nKPX Tcaron ucircumflex -92\r\nKPX Tcaron udieresis -92\r\nKPX Tcaron ugrave -92\r\nKPX Tcaron uhungarumlaut -92\r\nKPX Tcaron umacron -92\r\nKPX Tcaron uogonek -92\r\nKPX Tcaron uring -92\r\nKPX Tcaron w -74\r\nKPX Tcaron y -34\r\nKPX Tcaron yacute -34\r\nKPX Tcaron ydieresis -34\r\nKPX Tcommaaccent A -90\r\nKPX Tcommaaccent Aacute -90\r\nKPX Tcommaaccent Abreve -90\r\nKPX Tcommaaccent Acircumflex -90\r\nKPX Tcommaaccent Adieresis -90\r\nKPX Tcommaaccent Agrave -90\r\nKPX Tcommaaccent Amacron -90\r\nKPX Tcommaaccent Aogonek -90\r\nKPX Tcommaaccent Aring -90\r\nKPX Tcommaaccent Atilde -90\r\nKPX Tcommaaccent O -18\r\nKPX Tcommaaccent Oacute -18\r\nKPX Tcommaaccent Ocircumflex -18\r\nKPX Tcommaaccent Odieresis -18\r\nKPX Tcommaaccent Ograve -18\r\nKPX Tcommaaccent Ohungarumlaut -18\r\nKPX Tcommaaccent Omacron -18\r\nKPX Tcommaaccent Oslash -18\r\nKPX Tcommaaccent Otilde -18\r\nKPX Tcommaaccent a -92\r\nKPX Tcommaaccent aacute -92\r\nKPX Tcommaaccent abreve -52\r\nKPX Tcommaaccent acircumflex -52\r\nKPX Tcommaaccent adieresis -52\r\nKPX Tcommaaccent agrave -52\r\nKPX Tcommaaccent amacron -52\r\nKPX Tcommaaccent aogonek -92\r\nKPX Tcommaaccent aring -92\r\nKPX Tcommaaccent atilde -52\r\nKPX Tcommaaccent colon -74\r\nKPX Tcommaaccent comma -74\r\nKPX Tcommaaccent e -92\r\nKPX Tcommaaccent eacute -92\r\nKPX Tcommaaccent ecaron -92\r\nKPX Tcommaaccent ecircumflex -92\r\nKPX Tcommaaccent edieresis -52\r\nKPX Tcommaaccent edotaccent -92\r\nKPX Tcommaaccent egrave -52\r\nKPX Tcommaaccent emacron -52\r\nKPX Tcommaaccent eogonek -92\r\nKPX Tcommaaccent hyphen -92\r\nKPX Tcommaaccent i -18\r\nKPX Tcommaaccent iacute -18\r\nKPX Tcommaaccent iogonek -18\r\nKPX Tcommaaccent o -92\r\nKPX Tcommaaccent oacute -92\r\nKPX Tcommaaccent ocircumflex -92\r\nKPX Tcommaaccent odieresis -92\r\nKPX Tcommaaccent ograve -92\r\nKPX Tcommaaccent ohungarumlaut -92\r\nKPX Tcommaaccent omacron -92\r\nKPX Tcommaaccent oslash -92\r\nKPX Tcommaaccent otilde -92\r\nKPX Tcommaaccent period -90\r\nKPX Tcommaaccent r -74\r\nKPX Tcommaaccent racute -74\r\nKPX Tcommaaccent rcaron -74\r\nKPX Tcommaaccent rcommaaccent -74\r\nKPX Tcommaaccent semicolon -74\r\nKPX Tcommaaccent u -92\r\nKPX Tcommaaccent uacute -92\r\nKPX Tcommaaccent ucircumflex -92\r\nKPX Tcommaaccent udieresis -92\r\nKPX Tcommaaccent ugrave -92\r\nKPX Tcommaaccent uhungarumlaut -92\r\nKPX Tcommaaccent umacron -92\r\nKPX Tcommaaccent uogonek -92\r\nKPX Tcommaaccent uring -92\r\nKPX Tcommaaccent w -74\r\nKPX Tcommaaccent y -34\r\nKPX Tcommaaccent yacute -34\r\nKPX Tcommaaccent ydieresis -34\r\nKPX U A -60\r\nKPX U Aacute -60\r\nKPX U Abreve -60\r\nKPX U Acircumflex -60\r\nKPX U Adieresis -60\r\nKPX U Agrave -60\r\nKPX U Amacron -60\r\nKPX U Aogonek -60\r\nKPX U Aring -60\r\nKPX U Atilde -60\r\nKPX U comma -50\r\nKPX U period -50\r\nKPX Uacute A -60\r\nKPX Uacute Aacute -60\r\nKPX Uacute Abreve -60\r\nKPX Uacute Acircumflex -60\r\nKPX Uacute Adieresis -60\r\nKPX Uacute Agrave -60\r\nKPX Uacute Amacron -60\r\nKPX Uacute Aogonek -60\r\nKPX Uacute Aring -60\r\nKPX Uacute Atilde -60\r\nKPX Uacute comma -50\r\nKPX Uacute period -50\r\nKPX Ucircumflex A -60\r\nKPX Ucircumflex Aacute -60\r\nKPX Ucircumflex Abreve -60\r\nKPX Ucircumflex Acircumflex -60\r\nKPX Ucircumflex Adieresis -60\r\nKPX Ucircumflex Agrave -60\r\nKPX Ucircumflex Amacron -60\r\nKPX Ucircumflex Aogonek -60\r\nKPX Ucircumflex Aring -60\r\nKPX Ucircumflex Atilde -60\r\nKPX Ucircumflex comma -50\r\nKPX Ucircumflex period -50\r\nKPX Udieresis A -60\r\nKPX Udieresis Aacute -60\r\nKPX Udieresis Abreve -60\r\nKPX Udieresis Acircumflex -60\r\nKPX Udieresis Adieresis -60\r\nKPX Udieresis Agrave -60\r\nKPX Udieresis Amacron -60\r\nKPX Udieresis Aogonek -60\r\nKPX Udieresis Aring -60\r\nKPX Udieresis Atilde -60\r\nKPX Udieresis comma -50\r\nKPX Udieresis period -50\r\nKPX Ugrave A -60\r\nKPX Ugrave Aacute -60\r\nKPX Ugrave Abreve -60\r\nKPX Ugrave Acircumflex -60\r\nKPX Ugrave Adieresis -60\r\nKPX Ugrave Agrave -60\r\nKPX Ugrave Amacron -60\r\nKPX Ugrave Aogonek -60\r\nKPX Ugrave Aring -60\r\nKPX Ugrave Atilde -60\r\nKPX Ugrave comma -50\r\nKPX Ugrave period -50\r\nKPX Uhungarumlaut A -60\r\nKPX Uhungarumlaut Aacute -60\r\nKPX Uhungarumlaut Abreve -60\r\nKPX Uhungarumlaut Acircumflex -60\r\nKPX Uhungarumlaut Adieresis -60\r\nKPX Uhungarumlaut Agrave -60\r\nKPX Uhungarumlaut Amacron -60\r\nKPX Uhungarumlaut Aogonek -60\r\nKPX Uhungarumlaut Aring -60\r\nKPX Uhungarumlaut Atilde -60\r\nKPX Uhungarumlaut comma -50\r\nKPX Uhungarumlaut period -50\r\nKPX Umacron A -60\r\nKPX Umacron Aacute -60\r\nKPX Umacron Abreve -60\r\nKPX Umacron Acircumflex -60\r\nKPX Umacron Adieresis -60\r\nKPX Umacron Agrave -60\r\nKPX Umacron Amacron -60\r\nKPX Umacron Aogonek -60\r\nKPX Umacron Aring -60\r\nKPX Umacron Atilde -60\r\nKPX Umacron comma -50\r\nKPX Umacron period -50\r\nKPX Uogonek A -60\r\nKPX Uogonek Aacute -60\r\nKPX Uogonek Abreve -60\r\nKPX Uogonek Acircumflex -60\r\nKPX Uogonek Adieresis -60\r\nKPX Uogonek Agrave -60\r\nKPX Uogonek Amacron -60\r\nKPX Uogonek Aogonek -60\r\nKPX Uogonek Aring -60\r\nKPX Uogonek Atilde -60\r\nKPX Uogonek comma -50\r\nKPX Uogonek period -50\r\nKPX Uring A -60\r\nKPX Uring Aacute -60\r\nKPX Uring Abreve -60\r\nKPX Uring Acircumflex -60\r\nKPX Uring Adieresis -60\r\nKPX Uring Agrave -60\r\nKPX Uring Amacron -60\r\nKPX Uring Aogonek -60\r\nKPX Uring Aring -60\r\nKPX Uring Atilde -60\r\nKPX Uring comma -50\r\nKPX Uring period -50\r\nKPX V A -135\r\nKPX V Aacute -135\r\nKPX V Abreve -135\r\nKPX V Acircumflex -135\r\nKPX V Adieresis -135\r\nKPX V Agrave -135\r\nKPX V Amacron -135\r\nKPX V Aogonek -135\r\nKPX V Aring -135\r\nKPX V Atilde -135\r\nKPX V G -30\r\nKPX V Gbreve -30\r\nKPX V Gcommaaccent -30\r\nKPX V O -45\r\nKPX V Oacute -45\r\nKPX V Ocircumflex -45\r\nKPX V Odieresis -45\r\nKPX V Ograve -45\r\nKPX V Ohungarumlaut -45\r\nKPX V Omacron -45\r\nKPX V Oslash -45\r\nKPX V Otilde -45\r\nKPX V a -92\r\nKPX V aacute -92\r\nKPX V abreve -92\r\nKPX V acircumflex -92\r\nKPX V adieresis -92\r\nKPX V agrave -92\r\nKPX V amacron -92\r\nKPX V aogonek -92\r\nKPX V aring -92\r\nKPX V atilde -92\r\nKPX V colon -92\r\nKPX V comma -129\r\nKPX V e -100\r\nKPX V eacute -100\r\nKPX V ecaron -100\r\nKPX V ecircumflex -100\r\nKPX V edieresis -100\r\nKPX V edotaccent -100\r\nKPX V egrave -100\r\nKPX V emacron -100\r\nKPX V eogonek -100\r\nKPX V hyphen -74\r\nKPX V i -37\r\nKPX V iacute -37\r\nKPX V icircumflex -37\r\nKPX V idieresis -37\r\nKPX V igrave -37\r\nKPX V imacron -37\r\nKPX V iogonek -37\r\nKPX V o -100\r\nKPX V oacute -100\r\nKPX V ocircumflex -100\r\nKPX V odieresis -100\r\nKPX V ograve -100\r\nKPX V ohungarumlaut -100\r\nKPX V omacron -100\r\nKPX V oslash -100\r\nKPX V otilde -100\r\nKPX V period -145\r\nKPX V semicolon -92\r\nKPX V u -92\r\nKPX V uacute -92\r\nKPX V ucircumflex -92\r\nKPX V udieresis -92\r\nKPX V ugrave -92\r\nKPX V uhungarumlaut -92\r\nKPX V umacron -92\r\nKPX V uogonek -92\r\nKPX V uring -92\r\nKPX W A -120\r\nKPX W Aacute -120\r\nKPX W Abreve -120\r\nKPX W Acircumflex -120\r\nKPX W Adieresis -120\r\nKPX W Agrave -120\r\nKPX W Amacron -120\r\nKPX W Aogonek -120\r\nKPX W Aring -120\r\nKPX W Atilde -120\r\nKPX W O -10\r\nKPX W Oacute -10\r\nKPX W Ocircumflex -10\r\nKPX W Odieresis -10\r\nKPX W Ograve -10\r\nKPX W Ohungarumlaut -10\r\nKPX W Omacron -10\r\nKPX W Oslash -10\r\nKPX W Otilde -10\r\nKPX W a -65\r\nKPX W aacute -65\r\nKPX W abreve -65\r\nKPX W acircumflex -65\r\nKPX W adieresis -65\r\nKPX W agrave -65\r\nKPX W amacron -65\r\nKPX W aogonek -65\r\nKPX W aring -65\r\nKPX W atilde -65\r\nKPX W colon -55\r\nKPX W comma -92\r\nKPX W e -65\r\nKPX W eacute -65\r\nKPX W ecaron -65\r\nKPX W ecircumflex -65\r\nKPX W edieresis -65\r\nKPX W edotaccent -65\r\nKPX W egrave -65\r\nKPX W emacron -65\r\nKPX W eogonek -65\r\nKPX W hyphen -37\r\nKPX W i -18\r\nKPX W iacute -18\r\nKPX W iogonek -18\r\nKPX W o -75\r\nKPX W oacute -75\r\nKPX W ocircumflex -75\r\nKPX W odieresis -75\r\nKPX W ograve -75\r\nKPX W ohungarumlaut -75\r\nKPX W omacron -75\r\nKPX W oslash -75\r\nKPX W otilde -75\r\nKPX W period -92\r\nKPX W semicolon -55\r\nKPX W u -50\r\nKPX W uacute -50\r\nKPX W ucircumflex -50\r\nKPX W udieresis -50\r\nKPX W ugrave -50\r\nKPX W uhungarumlaut -50\r\nKPX W umacron -50\r\nKPX W uogonek -50\r\nKPX W uring -50\r\nKPX W y -60\r\nKPX W yacute -60\r\nKPX W ydieresis -60\r\nKPX Y A -110\r\nKPX Y Aacute -110\r\nKPX Y Abreve -110\r\nKPX Y Acircumflex -110\r\nKPX Y Adieresis -110\r\nKPX Y Agrave -110\r\nKPX Y Amacron -110\r\nKPX Y Aogonek -110\r\nKPX Y Aring -110\r\nKPX Y Atilde -110\r\nKPX Y O -35\r\nKPX Y Oacute -35\r\nKPX Y Ocircumflex -35\r\nKPX Y Odieresis -35\r\nKPX Y Ograve -35\r\nKPX Y Ohungarumlaut -35\r\nKPX Y Omacron -35\r\nKPX Y Oslash -35\r\nKPX Y Otilde -35\r\nKPX Y a -85\r\nKPX Y aacute -85\r\nKPX Y abreve -85\r\nKPX Y acircumflex -85\r\nKPX Y adieresis -85\r\nKPX Y agrave -85\r\nKPX Y amacron -85\r\nKPX Y aogonek -85\r\nKPX Y aring -85\r\nKPX Y atilde -85\r\nKPX Y colon -92\r\nKPX Y comma -92\r\nKPX Y e -111\r\nKPX Y eacute -111\r\nKPX Y ecaron -111\r\nKPX Y ecircumflex -111\r\nKPX Y edieresis -71\r\nKPX Y edotaccent -111\r\nKPX Y egrave -71\r\nKPX Y emacron -71\r\nKPX Y eogonek -111\r\nKPX Y hyphen -92\r\nKPX Y i -37\r\nKPX Y iacute -37\r\nKPX Y iogonek -37\r\nKPX Y o -111\r\nKPX Y oacute -111\r\nKPX Y ocircumflex -111\r\nKPX Y odieresis -111\r\nKPX Y ograve -111\r\nKPX Y ohungarumlaut -111\r\nKPX Y omacron -111\r\nKPX Y oslash -111\r\nKPX Y otilde -111\r\nKPX Y period -92\r\nKPX Y semicolon -92\r\nKPX Y u -92\r\nKPX Y uacute -92\r\nKPX Y ucircumflex -92\r\nKPX Y udieresis -92\r\nKPX Y ugrave -92\r\nKPX Y uhungarumlaut -92\r\nKPX Y umacron -92\r\nKPX Y uogonek -92\r\nKPX Y uring -92\r\nKPX Yacute A -110\r\nKPX Yacute Aacute -110\r\nKPX Yacute Abreve -110\r\nKPX Yacute Acircumflex -110\r\nKPX Yacute Adieresis -110\r\nKPX Yacute Agrave -110\r\nKPX Yacute Amacron -110\r\nKPX Yacute Aogonek -110\r\nKPX Yacute Aring -110\r\nKPX Yacute Atilde -110\r\nKPX Yacute O -35\r\nKPX Yacute Oacute -35\r\nKPX Yacute Ocircumflex -35\r\nKPX Yacute Odieresis -35\r\nKPX Yacute Ograve -35\r\nKPX Yacute Ohungarumlaut -35\r\nKPX Yacute Omacron -35\r\nKPX Yacute Oslash -35\r\nKPX Yacute Otilde -35\r\nKPX Yacute a -85\r\nKPX Yacute aacute -85\r\nKPX Yacute abreve -85\r\nKPX Yacute acircumflex -85\r\nKPX Yacute adieresis -85\r\nKPX Yacute agrave -85\r\nKPX Yacute amacron -85\r\nKPX Yacute aogonek -85\r\nKPX Yacute aring -85\r\nKPX Yacute atilde -85\r\nKPX Yacute colon -92\r\nKPX Yacute comma -92\r\nKPX Yacute e -111\r\nKPX Yacute eacute -111\r\nKPX Yacute ecaron -111\r\nKPX Yacute ecircumflex -111\r\nKPX Yacute edieresis -71\r\nKPX Yacute edotaccent -111\r\nKPX Yacute egrave -71\r\nKPX Yacute emacron -71\r\nKPX Yacute eogonek -111\r\nKPX Yacute hyphen -92\r\nKPX Yacute i -37\r\nKPX Yacute iacute -37\r\nKPX Yacute iogonek -37\r\nKPX Yacute o -111\r\nKPX Yacute oacute -111\r\nKPX Yacute ocircumflex -111\r\nKPX Yacute odieresis -111\r\nKPX Yacute ograve -111\r\nKPX Yacute ohungarumlaut -111\r\nKPX Yacute omacron -111\r\nKPX Yacute oslash -111\r\nKPX Yacute otilde -111\r\nKPX Yacute period -92\r\nKPX Yacute semicolon -92\r\nKPX Yacute u -92\r\nKPX Yacute uacute -92\r\nKPX Yacute ucircumflex -92\r\nKPX Yacute udieresis -92\r\nKPX Yacute ugrave -92\r\nKPX Yacute uhungarumlaut -92\r\nKPX Yacute umacron -92\r\nKPX Yacute uogonek -92\r\nKPX Yacute uring -92\r\nKPX Ydieresis A -110\r\nKPX Ydieresis Aacute -110\r\nKPX Ydieresis Abreve -110\r\nKPX Ydieresis Acircumflex -110\r\nKPX Ydieresis Adieresis -110\r\nKPX Ydieresis Agrave -110\r\nKPX Ydieresis Amacron -110\r\nKPX Ydieresis Aogonek -110\r\nKPX Ydieresis Aring -110\r\nKPX Ydieresis Atilde -110\r\nKPX Ydieresis O -35\r\nKPX Ydieresis Oacute -35\r\nKPX Ydieresis Ocircumflex -35\r\nKPX Ydieresis Odieresis -35\r\nKPX Ydieresis Ograve -35\r\nKPX Ydieresis Ohungarumlaut -35\r\nKPX Ydieresis Omacron -35\r\nKPX Ydieresis Oslash -35\r\nKPX Ydieresis Otilde -35\r\nKPX Ydieresis a -85\r\nKPX Ydieresis aacute -85\r\nKPX Ydieresis abreve -85\r\nKPX Ydieresis acircumflex -85\r\nKPX Ydieresis adieresis -85\r\nKPX Ydieresis agrave -85\r\nKPX Ydieresis amacron -85\r\nKPX Ydieresis aogonek -85\r\nKPX Ydieresis aring -85\r\nKPX Ydieresis atilde -85\r\nKPX Ydieresis colon -92\r\nKPX Ydieresis comma -92\r\nKPX Ydieresis e -111\r\nKPX Ydieresis eacute -111\r\nKPX Ydieresis ecaron -111\r\nKPX Ydieresis ecircumflex -111\r\nKPX Ydieresis edieresis -71\r\nKPX Ydieresis edotaccent -111\r\nKPX Ydieresis egrave -71\r\nKPX Ydieresis emacron -71\r\nKPX Ydieresis eogonek -111\r\nKPX Ydieresis hyphen -92\r\nKPX Ydieresis i -37\r\nKPX Ydieresis iacute -37\r\nKPX Ydieresis iogonek -37\r\nKPX Ydieresis o -111\r\nKPX Ydieresis oacute -111\r\nKPX Ydieresis ocircumflex -111\r\nKPX Ydieresis odieresis -111\r\nKPX Ydieresis ograve -111\r\nKPX Ydieresis ohungarumlaut -111\r\nKPX Ydieresis omacron -111\r\nKPX Ydieresis oslash -111\r\nKPX Ydieresis otilde -111\r\nKPX Ydieresis period -92\r\nKPX Ydieresis semicolon -92\r\nKPX Ydieresis u -92\r\nKPX Ydieresis uacute -92\r\nKPX Ydieresis ucircumflex -92\r\nKPX Ydieresis udieresis -92\r\nKPX Ydieresis ugrave -92\r\nKPX Ydieresis uhungarumlaut -92\r\nKPX Ydieresis umacron -92\r\nKPX Ydieresis uogonek -92\r\nKPX Ydieresis uring -92\r\nKPX a v -25\r\nKPX aacute v -25\r\nKPX abreve v -25\r\nKPX acircumflex v -25\r\nKPX adieresis v -25\r\nKPX agrave v -25\r\nKPX amacron v -25\r\nKPX aogonek v -25\r\nKPX aring v -25\r\nKPX atilde v -25\r\nKPX b b -10\r\nKPX b period -40\r\nKPX b u -20\r\nKPX b uacute -20\r\nKPX b ucircumflex -20\r\nKPX b udieresis -20\r\nKPX b ugrave -20\r\nKPX b uhungarumlaut -20\r\nKPX b umacron -20\r\nKPX b uogonek -20\r\nKPX b uring -20\r\nKPX b v -15\r\nKPX comma quotedblright -45\r\nKPX comma quoteright -55\r\nKPX d w -15\r\nKPX dcroat w -15\r\nKPX e v -15\r\nKPX eacute v -15\r\nKPX ecaron v -15\r\nKPX ecircumflex v -15\r\nKPX edieresis v -15\r\nKPX edotaccent v -15\r\nKPX egrave v -15\r\nKPX emacron v -15\r\nKPX eogonek v -15\r\nKPX f comma -15\r\nKPX f dotlessi -35\r\nKPX f i -25\r\nKPX f o -25\r\nKPX f oacute -25\r\nKPX f ocircumflex -25\r\nKPX f odieresis -25\r\nKPX f ograve -25\r\nKPX f ohungarumlaut -25\r\nKPX f omacron -25\r\nKPX f oslash -25\r\nKPX f otilde -25\r\nKPX f period -15\r\nKPX f quotedblright 50\r\nKPX f quoteright 55\r\nKPX g period -15\r\nKPX gbreve period -15\r\nKPX gcommaaccent period -15\r\nKPX h y -15\r\nKPX h yacute -15\r\nKPX h ydieresis -15\r\nKPX i v -10\r\nKPX iacute v -10\r\nKPX icircumflex v -10\r\nKPX idieresis v -10\r\nKPX igrave v -10\r\nKPX imacron v -10\r\nKPX iogonek v -10\r\nKPX k e -10\r\nKPX k eacute -10\r\nKPX k ecaron -10\r\nKPX k ecircumflex -10\r\nKPX k edieresis -10\r\nKPX k edotaccent -10\r\nKPX k egrave -10\r\nKPX k emacron -10\r\nKPX k eogonek -10\r\nKPX k o -15\r\nKPX k oacute -15\r\nKPX k ocircumflex -15\r\nKPX k odieresis -15\r\nKPX k ograve -15\r\nKPX k ohungarumlaut -15\r\nKPX k omacron -15\r\nKPX k oslash -15\r\nKPX k otilde -15\r\nKPX k y -15\r\nKPX k yacute -15\r\nKPX k ydieresis -15\r\nKPX kcommaaccent e -10\r\nKPX kcommaaccent eacute -10\r\nKPX kcommaaccent ecaron -10\r\nKPX kcommaaccent ecircumflex -10\r\nKPX kcommaaccent edieresis -10\r\nKPX kcommaaccent edotaccent -10\r\nKPX kcommaaccent egrave -10\r\nKPX kcommaaccent emacron -10\r\nKPX kcommaaccent eogonek -10\r\nKPX kcommaaccent o -15\r\nKPX kcommaaccent oacute -15\r\nKPX kcommaaccent ocircumflex -15\r\nKPX kcommaaccent odieresis -15\r\nKPX kcommaaccent ograve -15\r\nKPX kcommaaccent ohungarumlaut -15\r\nKPX kcommaaccent omacron -15\r\nKPX kcommaaccent oslash -15\r\nKPX kcommaaccent otilde -15\r\nKPX kcommaaccent y -15\r\nKPX kcommaaccent yacute -15\r\nKPX kcommaaccent ydieresis -15\r\nKPX n v -40\r\nKPX nacute v -40\r\nKPX ncaron v -40\r\nKPX ncommaaccent v -40\r\nKPX ntilde v -40\r\nKPX o v -10\r\nKPX o w -10\r\nKPX oacute v -10\r\nKPX oacute w -10\r\nKPX ocircumflex v -10\r\nKPX ocircumflex w -10\r\nKPX odieresis v -10\r\nKPX odieresis w -10\r\nKPX ograve v -10\r\nKPX ograve w -10\r\nKPX ohungarumlaut v -10\r\nKPX ohungarumlaut w -10\r\nKPX omacron v -10\r\nKPX omacron w -10\r\nKPX oslash v -10\r\nKPX oslash w -10\r\nKPX otilde v -10\r\nKPX otilde w -10\r\nKPX period quotedblright -55\r\nKPX period quoteright -55\r\nKPX quotedblleft A -10\r\nKPX quotedblleft Aacute -10\r\nKPX quotedblleft Abreve -10\r\nKPX quotedblleft Acircumflex -10\r\nKPX quotedblleft Adieresis -10\r\nKPX quotedblleft Agrave -10\r\nKPX quotedblleft Amacron -10\r\nKPX quotedblleft Aogonek -10\r\nKPX quotedblleft Aring -10\r\nKPX quotedblleft Atilde -10\r\nKPX quoteleft A -10\r\nKPX quoteleft Aacute -10\r\nKPX quoteleft Abreve -10\r\nKPX quoteleft Acircumflex -10\r\nKPX quoteleft Adieresis -10\r\nKPX quoteleft Agrave -10\r\nKPX quoteleft Amacron -10\r\nKPX quoteleft Aogonek -10\r\nKPX quoteleft Aring -10\r\nKPX quoteleft Atilde -10\r\nKPX quoteleft quoteleft -63\r\nKPX quoteright d -20\r\nKPX quoteright dcroat -20\r\nKPX quoteright quoteright -63\r\nKPX quoteright r -20\r\nKPX quoteright racute -20\r\nKPX quoteright rcaron -20\r\nKPX quoteright rcommaaccent -20\r\nKPX quoteright s -37\r\nKPX quoteright sacute -37\r\nKPX quoteright scaron -37\r\nKPX quoteright scedilla -37\r\nKPX quoteright scommaaccent -37\r\nKPX quoteright space -74\r\nKPX quoteright v -20\r\nKPX r c -18\r\nKPX r cacute -18\r\nKPX r ccaron -18\r\nKPX r ccedilla -18\r\nKPX r comma -92\r\nKPX r e -18\r\nKPX r eacute -18\r\nKPX r ecaron -18\r\nKPX r ecircumflex -18\r\nKPX r edieresis -18\r\nKPX r edotaccent -18\r\nKPX r egrave -18\r\nKPX r emacron -18\r\nKPX r eogonek -18\r\nKPX r g -10\r\nKPX r gbreve -10\r\nKPX r gcommaaccent -10\r\nKPX r hyphen -37\r\nKPX r n -15\r\nKPX r nacute -15\r\nKPX r ncaron -15\r\nKPX r ncommaaccent -15\r\nKPX r ntilde -15\r\nKPX r o -18\r\nKPX r oacute -18\r\nKPX r ocircumflex -18\r\nKPX r odieresis -18\r\nKPX r ograve -18\r\nKPX r ohungarumlaut -18\r\nKPX r omacron -18\r\nKPX r oslash -18\r\nKPX r otilde -18\r\nKPX r p -10\r\nKPX r period -100\r\nKPX r q -18\r\nKPX r v -10\r\nKPX racute c -18\r\nKPX racute cacute -18\r\nKPX racute ccaron -18\r\nKPX racute ccedilla -18\r\nKPX racute comma -92\r\nKPX racute e -18\r\nKPX racute eacute -18\r\nKPX racute ecaron -18\r\nKPX racute ecircumflex -18\r\nKPX racute edieresis -18\r\nKPX racute edotaccent -18\r\nKPX racute egrave -18\r\nKPX racute emacron -18\r\nKPX racute eogonek -18\r\nKPX racute g -10\r\nKPX racute gbreve -10\r\nKPX racute gcommaaccent -10\r\nKPX racute hyphen -37\r\nKPX racute n -15\r\nKPX racute nacute -15\r\nKPX racute ncaron -15\r\nKPX racute ncommaaccent -15\r\nKPX racute ntilde -15\r\nKPX racute o -18\r\nKPX racute oacute -18\r\nKPX racute ocircumflex -18\r\nKPX racute odieresis -18\r\nKPX racute ograve -18\r\nKPX racute ohungarumlaut -18\r\nKPX racute omacron -18\r\nKPX racute oslash -18\r\nKPX racute otilde -18\r\nKPX racute p -10\r\nKPX racute period -100\r\nKPX racute q -18\r\nKPX racute v -10\r\nKPX rcaron c -18\r\nKPX rcaron cacute -18\r\nKPX rcaron ccaron -18\r\nKPX rcaron ccedilla -18\r\nKPX rcaron comma -92\r\nKPX rcaron e -18\r\nKPX rcaron eacute -18\r\nKPX rcaron ecaron -18\r\nKPX rcaron ecircumflex -18\r\nKPX rcaron edieresis -18\r\nKPX rcaron edotaccent -18\r\nKPX rcaron egrave -18\r\nKPX rcaron emacron -18\r\nKPX rcaron eogonek -18\r\nKPX rcaron g -10\r\nKPX rcaron gbreve -10\r\nKPX rcaron gcommaaccent -10\r\nKPX rcaron hyphen -37\r\nKPX rcaron n -15\r\nKPX rcaron nacute -15\r\nKPX rcaron ncaron -15\r\nKPX rcaron ncommaaccent -15\r\nKPX rcaron ntilde -15\r\nKPX rcaron o -18\r\nKPX rcaron oacute -18\r\nKPX rcaron ocircumflex -18\r\nKPX rcaron odieresis -18\r\nKPX rcaron ograve -18\r\nKPX rcaron ohungarumlaut -18\r\nKPX rcaron omacron -18\r\nKPX rcaron oslash -18\r\nKPX rcaron otilde -18\r\nKPX rcaron p -10\r\nKPX rcaron period -100\r\nKPX rcaron q -18\r\nKPX rcaron v -10\r\nKPX rcommaaccent c -18\r\nKPX rcommaaccent cacute -18\r\nKPX rcommaaccent ccaron -18\r\nKPX rcommaaccent ccedilla -18\r\nKPX rcommaaccent comma -92\r\nKPX rcommaaccent e -18\r\nKPX rcommaaccent eacute -18\r\nKPX rcommaaccent ecaron -18\r\nKPX rcommaaccent ecircumflex -18\r\nKPX rcommaaccent edieresis -18\r\nKPX rcommaaccent edotaccent -18\r\nKPX rcommaaccent egrave -18\r\nKPX rcommaaccent emacron -18\r\nKPX rcommaaccent eogonek -18\r\nKPX rcommaaccent g -10\r\nKPX rcommaaccent gbreve -10\r\nKPX rcommaaccent gcommaaccent -10\r\nKPX rcommaaccent hyphen -37\r\nKPX rcommaaccent n -15\r\nKPX rcommaaccent nacute -15\r\nKPX rcommaaccent ncaron -15\r\nKPX rcommaaccent ncommaaccent -15\r\nKPX rcommaaccent ntilde -15\r\nKPX rcommaaccent o -18\r\nKPX rcommaaccent oacute -18\r\nKPX rcommaaccent ocircumflex -18\r\nKPX rcommaaccent odieresis -18\r\nKPX rcommaaccent ograve -18\r\nKPX rcommaaccent ohungarumlaut -18\r\nKPX rcommaaccent omacron -18\r\nKPX rcommaaccent oslash -18\r\nKPX rcommaaccent otilde -18\r\nKPX rcommaaccent p -10\r\nKPX rcommaaccent period -100\r\nKPX rcommaaccent q -18\r\nKPX rcommaaccent v -10\r\nKPX space A -55\r\nKPX space Aacute -55\r\nKPX space Abreve -55\r\nKPX space Acircumflex -55\r\nKPX space Adieresis -55\r\nKPX space Agrave -55\r\nKPX space Amacron -55\r\nKPX space Aogonek -55\r\nKPX space Aring -55\r\nKPX space Atilde -55\r\nKPX space T -30\r\nKPX space Tcaron -30\r\nKPX space Tcommaaccent -30\r\nKPX space V -45\r\nKPX space W -30\r\nKPX space Y -55\r\nKPX space Yacute -55\r\nKPX space Ydieresis -55\r\nKPX v a -10\r\nKPX v aacute -10\r\nKPX v abreve -10\r\nKPX v acircumflex -10\r\nKPX v adieresis -10\r\nKPX v agrave -10\r\nKPX v amacron -10\r\nKPX v aogonek -10\r\nKPX v aring -10\r\nKPX v atilde -10\r\nKPX v comma -55\r\nKPX v e -10\r\nKPX v eacute -10\r\nKPX v ecaron -10\r\nKPX v ecircumflex -10\r\nKPX v edieresis -10\r\nKPX v edotaccent -10\r\nKPX v egrave -10\r\nKPX v emacron -10\r\nKPX v eogonek -10\r\nKPX v o -10\r\nKPX v oacute -10\r\nKPX v ocircumflex -10\r\nKPX v odieresis -10\r\nKPX v ograve -10\r\nKPX v ohungarumlaut -10\r\nKPX v omacron -10\r\nKPX v oslash -10\r\nKPX v otilde -10\r\nKPX v period -70\r\nKPX w comma -55\r\nKPX w o -10\r\nKPX w oacute -10\r\nKPX w ocircumflex -10\r\nKPX w odieresis -10\r\nKPX w ograve -10\r\nKPX w ohungarumlaut -10\r\nKPX w omacron -10\r\nKPX w oslash -10\r\nKPX w otilde -10\r\nKPX w period -70\r\nKPX y comma -55\r\nKPX y e -10\r\nKPX y eacute -10\r\nKPX y ecaron -10\r\nKPX y ecircumflex -10\r\nKPX y edieresis -10\r\nKPX y edotaccent -10\r\nKPX y egrave -10\r\nKPX y emacron -10\r\nKPX y eogonek -10\r\nKPX y o -25\r\nKPX y oacute -25\r\nKPX y ocircumflex -25\r\nKPX y odieresis -25\r\nKPX y ograve -25\r\nKPX y ohungarumlaut -25\r\nKPX y omacron -25\r\nKPX y oslash -25\r\nKPX y otilde -25\r\nKPX y period -70\r\nKPX yacute comma -55\r\nKPX yacute e -10\r\nKPX yacute eacute -10\r\nKPX yacute ecaron -10\r\nKPX yacute ecircumflex -10\r\nKPX yacute edieresis -10\r\nKPX yacute edotaccent -10\r\nKPX yacute egrave -10\r\nKPX yacute emacron -10\r\nKPX yacute eogonek -10\r\nKPX yacute o -25\r\nKPX yacute oacute -25\r\nKPX yacute ocircumflex -25\r\nKPX yacute odieresis -25\r\nKPX yacute ograve -25\r\nKPX yacute ohungarumlaut -25\r\nKPX yacute omacron -25\r\nKPX yacute oslash -25\r\nKPX yacute otilde -25\r\nKPX yacute period -70\r\nKPX ydieresis comma -55\r\nKPX ydieresis e -10\r\nKPX ydieresis eacute -10\r\nKPX ydieresis ecaron -10\r\nKPX ydieresis ecircumflex -10\r\nKPX ydieresis edieresis -10\r\nKPX ydieresis edotaccent -10\r\nKPX ydieresis egrave -10\r\nKPX ydieresis emacron -10\r\nKPX ydieresis eogonek -10\r\nKPX ydieresis o -25\r\nKPX ydieresis oacute -25\r\nKPX ydieresis ocircumflex -25\r\nKPX ydieresis odieresis -25\r\nKPX ydieresis ograve -25\r\nKPX ydieresis ohungarumlaut -25\r\nKPX ydieresis omacron -25\r\nKPX ydieresis oslash -25\r\nKPX ydieresis otilde -25\r\nKPX ydieresis period -70\r\nEndKernPairs\r\nEndKernData\r\nEndFontMetrics\r\n";
2499 },
2500 'Times-Italic'() {
2501 return "StartFontMetrics 4.1\r\nComment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 12:56:55 1997\r\nComment UniqueID 43067\r\nComment VMusage 47727 58752\r\nFontName Times-Italic\r\nFullName Times Italic\r\nFamilyName Times\r\nWeight Medium\r\nItalicAngle -15.5\r\nIsFixedPitch false\r\nCharacterSet ExtendedRoman\r\nFontBBox -169 -217 1010 883 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 002.000\r\nNotice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 653\r\nXHeight 441\r\nAscender 683\r\nDescender -217\r\nStdHW 32\r\nStdVW 76\r\nStartCharMetrics 315\r\nC 32 ; WX 250 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 333 ; N exclam ; B 39 -11 302 667 ;\r\nC 34 ; WX 420 ; N quotedbl ; B 144 421 432 666 ;\r\nC 35 ; WX 500 ; N numbersign ; B 2 0 540 676 ;\r\nC 36 ; WX 500 ; N dollar ; B 31 -89 497 731 ;\r\nC 37 ; WX 833 ; N percent ; B 79 -13 790 676 ;\r\nC 38 ; WX 778 ; N ampersand ; B 76 -18 723 666 ;\r\nC 39 ; WX 333 ; N quoteright ; B 151 436 290 666 ;\r\nC 40 ; WX 333 ; N parenleft ; B 42 -181 315 669 ;\r\nC 41 ; WX 333 ; N parenright ; B 16 -180 289 669 ;\r\nC 42 ; WX 500 ; N asterisk ; B 128 255 492 666 ;\r\nC 43 ; WX 675 ; N plus ; B 86 0 590 506 ;\r\nC 44 ; WX 250 ; N comma ; B -4 -129 135 101 ;\r\nC 45 ; WX 333 ; N hyphen ; B 49 192 282 255 ;\r\nC 46 ; WX 250 ; N period ; B 27 -11 138 100 ;\r\nC 47 ; WX 278 ; N slash ; B -65 -18 386 666 ;\r\nC 48 ; WX 500 ; N zero ; B 32 -7 497 676 ;\r\nC 49 ; WX 500 ; N one ; B 49 0 409 676 ;\r\nC 50 ; WX 500 ; N two ; B 12 0 452 676 ;\r\nC 51 ; WX 500 ; N three ; B 15 -7 465 676 ;\r\nC 52 ; WX 500 ; N four ; B 1 0 479 676 ;\r\nC 53 ; WX 500 ; N five ; B 15 -7 491 666 ;\r\nC 54 ; WX 500 ; N six ; B 30 -7 521 686 ;\r\nC 55 ; WX 500 ; N seven ; B 75 -8 537 666 ;\r\nC 56 ; WX 500 ; N eight ; B 30 -7 493 676 ;\r\nC 57 ; WX 500 ; N nine ; B 23 -17 492 676 ;\r\nC 58 ; WX 333 ; N colon ; B 50 -11 261 441 ;\r\nC 59 ; WX 333 ; N semicolon ; B 27 -129 261 441 ;\r\nC 60 ; WX 675 ; N less ; B 84 -8 592 514 ;\r\nC 61 ; WX 675 ; N equal ; B 86 120 590 386 ;\r\nC 62 ; WX 675 ; N greater ; B 84 -8 592 514 ;\r\nC 63 ; WX 500 ; N question ; B 132 -12 472 664 ;\r\nC 64 ; WX 920 ; N at ; B 118 -18 806 666 ;\r\nC 65 ; WX 611 ; N A ; B -51 0 564 668 ;\r\nC 66 ; WX 611 ; N B ; B -8 0 588 653 ;\r\nC 67 ; WX 667 ; N C ; B 66 -18 689 666 ;\r\nC 68 ; WX 722 ; N D ; B -8 0 700 653 ;\r\nC 69 ; WX 611 ; N E ; B -1 0 634 653 ;\r\nC 70 ; WX 611 ; N F ; B 8 0 645 653 ;\r\nC 71 ; WX 722 ; N G ; B 52 -18 722 666 ;\r\nC 72 ; WX 722 ; N H ; B -8 0 767 653 ;\r\nC 73 ; WX 333 ; N I ; B -8 0 384 653 ;\r\nC 74 ; WX 444 ; N J ; B -6 -18 491 653 ;\r\nC 75 ; WX 667 ; N K ; B 7 0 722 653 ;\r\nC 76 ; WX 556 ; N L ; B -8 0 559 653 ;\r\nC 77 ; WX 833 ; N M ; B -18 0 873 653 ;\r\nC 78 ; WX 667 ; N N ; B -20 -15 727 653 ;\r\nC 79 ; WX 722 ; N O ; B 60 -18 699 666 ;\r\nC 80 ; WX 611 ; N P ; B 0 0 605 653 ;\r\nC 81 ; WX 722 ; N Q ; B 59 -182 699 666 ;\r\nC 82 ; WX 611 ; N R ; B -13 0 588 653 ;\r\nC 83 ; WX 500 ; N S ; B 17 -18 508 667 ;\r\nC 84 ; WX 556 ; N T ; B 59 0 633 653 ;\r\nC 85 ; WX 722 ; N U ; B 102 -18 765 653 ;\r\nC 86 ; WX 611 ; N V ; B 76 -18 688 653 ;\r\nC 87 ; WX 833 ; N W ; B 71 -18 906 653 ;\r\nC 88 ; WX 611 ; N X ; B -29 0 655 653 ;\r\nC 89 ; WX 556 ; N Y ; B 78 0 633 653 ;\r\nC 90 ; WX 556 ; N Z ; B -6 0 606 653 ;\r\nC 91 ; WX 389 ; N bracketleft ; B 21 -153 391 663 ;\r\nC 92 ; WX 278 ; N backslash ; B -41 -18 319 666 ;\r\nC 93 ; WX 389 ; N bracketright ; B 12 -153 382 663 ;\r\nC 94 ; WX 422 ; N asciicircum ; B 0 301 422 666 ;\r\nC 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;\r\nC 96 ; WX 333 ; N quoteleft ; B 171 436 310 666 ;\r\nC 97 ; WX 500 ; N a ; B 17 -11 476 441 ;\r\nC 98 ; WX 500 ; N b ; B 23 -11 473 683 ;\r\nC 99 ; WX 444 ; N c ; B 30 -11 425 441 ;\r\nC 100 ; WX 500 ; N d ; B 15 -13 527 683 ;\r\nC 101 ; WX 444 ; N e ; B 31 -11 412 441 ;\r\nC 102 ; WX 278 ; N f ; B -147 -207 424 678 ; L i fi ; L l fl ;\r\nC 103 ; WX 500 ; N g ; B 8 -206 472 441 ;\r\nC 104 ; WX 500 ; N h ; B 19 -9 478 683 ;\r\nC 105 ; WX 278 ; N i ; B 49 -11 264 654 ;\r\nC 106 ; WX 278 ; N j ; B -124 -207 276 654 ;\r\nC 107 ; WX 444 ; N k ; B 14 -11 461 683 ;\r\nC 108 ; WX 278 ; N l ; B 41 -11 279 683 ;\r\nC 109 ; WX 722 ; N m ; B 12 -9 704 441 ;\r\nC 110 ; WX 500 ; N n ; B 14 -9 474 441 ;\r\nC 111 ; WX 500 ; N o ; B 27 -11 468 441 ;\r\nC 112 ; WX 500 ; N p ; B -75 -205 469 441 ;\r\nC 113 ; WX 500 ; N q ; B 25 -209 483 441 ;\r\nC 114 ; WX 389 ; N r ; B 45 0 412 441 ;\r\nC 115 ; WX 389 ; N s ; B 16 -13 366 442 ;\r\nC 116 ; WX 278 ; N t ; B 37 -11 296 546 ;\r\nC 117 ; WX 500 ; N u ; B 42 -11 475 441 ;\r\nC 118 ; WX 444 ; N v ; B 21 -18 426 441 ;\r\nC 119 ; WX 667 ; N w ; B 16 -18 648 441 ;\r\nC 120 ; WX 444 ; N x ; B -27 -11 447 441 ;\r\nC 121 ; WX 444 ; N y ; B -24 -206 426 441 ;\r\nC 122 ; WX 389 ; N z ; B -2 -81 380 428 ;\r\nC 123 ; WX 400 ; N braceleft ; B 51 -177 407 687 ;\r\nC 124 ; WX 275 ; N bar ; B 105 -217 171 783 ;\r\nC 125 ; WX 400 ; N braceright ; B -7 -177 349 687 ;\r\nC 126 ; WX 541 ; N asciitilde ; B 40 183 502 323 ;\r\nC 161 ; WX 389 ; N exclamdown ; B 59 -205 322 473 ;\r\nC 162 ; WX 500 ; N cent ; B 77 -143 472 560 ;\r\nC 163 ; WX 500 ; N sterling ; B 10 -6 517 670 ;\r\nC 164 ; WX 167 ; N fraction ; B -169 -10 337 676 ;\r\nC 165 ; WX 500 ; N yen ; B 27 0 603 653 ;\r\nC 166 ; WX 500 ; N florin ; B 25 -182 507 682 ;\r\nC 167 ; WX 500 ; N section ; B 53 -162 461 666 ;\r\nC 168 ; WX 500 ; N currency ; B -22 53 522 597 ;\r\nC 169 ; WX 214 ; N quotesingle ; B 132 421 241 666 ;\r\nC 170 ; WX 556 ; N quotedblleft ; B 166 436 514 666 ;\r\nC 171 ; WX 500 ; N guillemotleft ; B 53 37 445 403 ;\r\nC 172 ; WX 333 ; N guilsinglleft ; B 51 37 281 403 ;\r\nC 173 ; WX 333 ; N guilsinglright ; B 52 37 282 403 ;\r\nC 174 ; WX 500 ; N fi ; B -141 -207 481 681 ;\r\nC 175 ; WX 500 ; N fl ; B -141 -204 518 682 ;\r\nC 177 ; WX 500 ; N endash ; B -6 197 505 243 ;\r\nC 178 ; WX 500 ; N dagger ; B 101 -159 488 666 ;\r\nC 179 ; WX 500 ; N daggerdbl ; B 22 -143 491 666 ;\r\nC 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ;\r\nC 182 ; WX 523 ; N paragraph ; B 55 -123 616 653 ;\r\nC 183 ; WX 350 ; N bullet ; B 40 191 310 461 ;\r\nC 184 ; WX 333 ; N quotesinglbase ; B 44 -129 183 101 ;\r\nC 185 ; WX 556 ; N quotedblbase ; B 57 -129 405 101 ;\r\nC 186 ; WX 556 ; N quotedblright ; B 151 436 499 666 ;\r\nC 187 ; WX 500 ; N guillemotright ; B 55 37 447 403 ;\r\nC 188 ; WX 889 ; N ellipsis ; B 57 -11 762 100 ;\r\nC 189 ; WX 1000 ; N perthousand ; B 25 -19 1010 706 ;\r\nC 191 ; WX 500 ; N questiondown ; B 28 -205 368 471 ;\r\nC 193 ; WX 333 ; N grave ; B 121 492 311 664 ;\r\nC 194 ; WX 333 ; N acute ; B 180 494 403 664 ;\r\nC 195 ; WX 333 ; N circumflex ; B 91 492 385 661 ;\r\nC 196 ; WX 333 ; N tilde ; B 100 517 427 624 ;\r\nC 197 ; WX 333 ; N macron ; B 99 532 411 583 ;\r\nC 198 ; WX 333 ; N breve ; B 117 492 418 650 ;\r\nC 199 ; WX 333 ; N dotaccent ; B 207 548 305 646 ;\r\nC 200 ; WX 333 ; N dieresis ; B 107 548 405 646 ;\r\nC 202 ; WX 333 ; N ring ; B 155 492 355 691 ;\r\nC 203 ; WX 333 ; N cedilla ; B -30 -217 182 0 ;\r\nC 205 ; WX 333 ; N hungarumlaut ; B 93 494 486 664 ;\r\nC 206 ; WX 333 ; N ogonek ; B 20 -169 203 40 ;\r\nC 207 ; WX 333 ; N caron ; B 121 492 426 661 ;\r\nC 208 ; WX 889 ; N emdash ; B -6 197 894 243 ;\r\nC 225 ; WX 889 ; N AE ; B -27 0 911 653 ;\r\nC 227 ; WX 276 ; N ordfeminine ; B 42 406 352 676 ;\r\nC 232 ; WX 556 ; N Lslash ; B -8 0 559 653 ;\r\nC 233 ; WX 722 ; N Oslash ; B 60 -105 699 722 ;\r\nC 234 ; WX 944 ; N OE ; B 49 -8 964 666 ;\r\nC 235 ; WX 310 ; N ordmasculine ; B 67 406 362 676 ;\r\nC 241 ; WX 667 ; N ae ; B 23 -11 640 441 ;\r\nC 245 ; WX 278 ; N dotlessi ; B 49 -11 235 441 ;\r\nC 248 ; WX 278 ; N lslash ; B 41 -11 312 683 ;\r\nC 249 ; WX 500 ; N oslash ; B 28 -135 469 554 ;\r\nC 250 ; WX 667 ; N oe ; B 20 -12 646 441 ;\r\nC 251 ; WX 500 ; N germandbls ; B -168 -207 493 679 ;\r\nC -1 ; WX 333 ; N Idieresis ; B -8 0 435 818 ;\r\nC -1 ; WX 444 ; N eacute ; B 31 -11 459 664 ;\r\nC -1 ; WX 500 ; N abreve ; B 17 -11 502 650 ;\r\nC -1 ; WX 500 ; N uhungarumlaut ; B 42 -11 580 664 ;\r\nC -1 ; WX 444 ; N ecaron ; B 31 -11 482 661 ;\r\nC -1 ; WX 556 ; N Ydieresis ; B 78 0 633 818 ;\r\nC -1 ; WX 675 ; N divide ; B 86 -11 590 517 ;\r\nC -1 ; WX 556 ; N Yacute ; B 78 0 633 876 ;\r\nC -1 ; WX 611 ; N Acircumflex ; B -51 0 564 873 ;\r\nC -1 ; WX 500 ; N aacute ; B 17 -11 487 664 ;\r\nC -1 ; WX 722 ; N Ucircumflex ; B 102 -18 765 873 ;\r\nC -1 ; WX 444 ; N yacute ; B -24 -206 459 664 ;\r\nC -1 ; WX 389 ; N scommaaccent ; B 16 -217 366 442 ;\r\nC -1 ; WX 444 ; N ecircumflex ; B 31 -11 441 661 ;\r\nC -1 ; WX 722 ; N Uring ; B 102 -18 765 883 ;\r\nC -1 ; WX 722 ; N Udieresis ; B 102 -18 765 818 ;\r\nC -1 ; WX 500 ; N aogonek ; B 17 -169 476 441 ;\r\nC -1 ; WX 722 ; N Uacute ; B 102 -18 765 876 ;\r\nC -1 ; WX 500 ; N uogonek ; B 42 -169 477 441 ;\r\nC -1 ; WX 611 ; N Edieresis ; B -1 0 634 818 ;\r\nC -1 ; WX 722 ; N Dcroat ; B -8 0 700 653 ;\r\nC -1 ; WX 250 ; N commaaccent ; B 8 -217 133 -50 ;\r\nC -1 ; WX 760 ; N copyright ; B 41 -18 719 666 ;\r\nC -1 ; WX 611 ; N Emacron ; B -1 0 634 795 ;\r\nC -1 ; WX 444 ; N ccaron ; B 30 -11 482 661 ;\r\nC -1 ; WX 500 ; N aring ; B 17 -11 476 691 ;\r\nC -1 ; WX 667 ; N Ncommaaccent ; B -20 -187 727 653 ;\r\nC -1 ; WX 278 ; N lacute ; B 41 -11 395 876 ;\r\nC -1 ; WX 500 ; N agrave ; B 17 -11 476 664 ;\r\nC -1 ; WX 556 ; N Tcommaaccent ; B 59 -217 633 653 ;\r\nC -1 ; WX 667 ; N Cacute ; B 66 -18 690 876 ;\r\nC -1 ; WX 500 ; N atilde ; B 17 -11 511 624 ;\r\nC -1 ; WX 611 ; N Edotaccent ; B -1 0 634 818 ;\r\nC -1 ; WX 389 ; N scaron ; B 16 -13 454 661 ;\r\nC -1 ; WX 389 ; N scedilla ; B 16 -217 366 442 ;\r\nC -1 ; WX 278 ; N iacute ; B 49 -11 355 664 ;\r\nC -1 ; WX 471 ; N lozenge ; B 13 0 459 724 ;\r\nC -1 ; WX 611 ; N Rcaron ; B -13 0 588 873 ;\r\nC -1 ; WX 722 ; N Gcommaaccent ; B 52 -217 722 666 ;\r\nC -1 ; WX 500 ; N ucircumflex ; B 42 -11 475 661 ;\r\nC -1 ; WX 500 ; N acircumflex ; B 17 -11 476 661 ;\r\nC -1 ; WX 611 ; N Amacron ; B -51 0 564 795 ;\r\nC -1 ; WX 389 ; N rcaron ; B 45 0 434 661 ;\r\nC -1 ; WX 444 ; N ccedilla ; B 30 -217 425 441 ;\r\nC -1 ; WX 556 ; N Zdotaccent ; B -6 0 606 818 ;\r\nC -1 ; WX 611 ; N Thorn ; B 0 0 569 653 ;\r\nC -1 ; WX 722 ; N Omacron ; B 60 -18 699 795 ;\r\nC -1 ; WX 611 ; N Racute ; B -13 0 588 876 ;\r\nC -1 ; WX 500 ; N Sacute ; B 17 -18 508 876 ;\r\nC -1 ; WX 544 ; N dcaron ; B 15 -13 658 683 ;\r\nC -1 ; WX 722 ; N Umacron ; B 102 -18 765 795 ;\r\nC -1 ; WX 500 ; N uring ; B 42 -11 475 691 ;\r\nC -1 ; WX 300 ; N threesuperior ; B 43 268 339 676 ;\r\nC -1 ; WX 722 ; N Ograve ; B 60 -18 699 876 ;\r\nC -1 ; WX 611 ; N Agrave ; B -51 0 564 876 ;\r\nC -1 ; WX 611 ; N Abreve ; B -51 0 564 862 ;\r\nC -1 ; WX 675 ; N multiply ; B 93 8 582 497 ;\r\nC -1 ; WX 500 ; N uacute ; B 42 -11 477 664 ;\r\nC -1 ; WX 556 ; N Tcaron ; B 59 0 633 873 ;\r\nC -1 ; WX 476 ; N partialdiff ; B 17 -38 459 710 ;\r\nC -1 ; WX 444 ; N ydieresis ; B -24 -206 441 606 ;\r\nC -1 ; WX 667 ; N Nacute ; B -20 -15 727 876 ;\r\nC -1 ; WX 278 ; N icircumflex ; B 33 -11 327 661 ;\r\nC -1 ; WX 611 ; N Ecircumflex ; B -1 0 634 873 ;\r\nC -1 ; WX 500 ; N adieresis ; B 17 -11 489 606 ;\r\nC -1 ; WX 444 ; N edieresis ; B 31 -11 451 606 ;\r\nC -1 ; WX 444 ; N cacute ; B 30 -11 459 664 ;\r\nC -1 ; WX 500 ; N nacute ; B 14 -9 477 664 ;\r\nC -1 ; WX 500 ; N umacron ; B 42 -11 485 583 ;\r\nC -1 ; WX 667 ; N Ncaron ; B -20 -15 727 873 ;\r\nC -1 ; WX 333 ; N Iacute ; B -8 0 433 876 ;\r\nC -1 ; WX 675 ; N plusminus ; B 86 0 590 506 ;\r\nC -1 ; WX 275 ; N brokenbar ; B 105 -142 171 708 ;\r\nC -1 ; WX 760 ; N registered ; B 41 -18 719 666 ;\r\nC -1 ; WX 722 ; N Gbreve ; B 52 -18 722 862 ;\r\nC -1 ; WX 333 ; N Idotaccent ; B -8 0 384 818 ;\r\nC -1 ; WX 600 ; N summation ; B 15 -10 585 706 ;\r\nC -1 ; WX 611 ; N Egrave ; B -1 0 634 876 ;\r\nC -1 ; WX 389 ; N racute ; B 45 0 431 664 ;\r\nC -1 ; WX 500 ; N omacron ; B 27 -11 495 583 ;\r\nC -1 ; WX 556 ; N Zacute ; B -6 0 606 876 ;\r\nC -1 ; WX 556 ; N Zcaron ; B -6 0 606 873 ;\r\nC -1 ; WX 549 ; N greaterequal ; B 26 0 523 658 ;\r\nC -1 ; WX 722 ; N Eth ; B -8 0 700 653 ;\r\nC -1 ; WX 667 ; N Ccedilla ; B 66 -217 689 666 ;\r\nC -1 ; WX 278 ; N lcommaaccent ; B 22 -217 279 683 ;\r\nC -1 ; WX 300 ; N tcaron ; B 37 -11 407 681 ;\r\nC -1 ; WX 444 ; N eogonek ; B 31 -169 412 441 ;\r\nC -1 ; WX 722 ; N Uogonek ; B 102 -184 765 653 ;\r\nC -1 ; WX 611 ; N Aacute ; B -51 0 564 876 ;\r\nC -1 ; WX 611 ; N Adieresis ; B -51 0 564 818 ;\r\nC -1 ; WX 444 ; N egrave ; B 31 -11 412 664 ;\r\nC -1 ; WX 389 ; N zacute ; B -2 -81 431 664 ;\r\nC -1 ; WX 278 ; N iogonek ; B 49 -169 264 654 ;\r\nC -1 ; WX 722 ; N Oacute ; B 60 -18 699 876 ;\r\nC -1 ; WX 500 ; N oacute ; B 27 -11 487 664 ;\r\nC -1 ; WX 500 ; N amacron ; B 17 -11 495 583 ;\r\nC -1 ; WX 389 ; N sacute ; B 16 -13 431 664 ;\r\nC -1 ; WX 278 ; N idieresis ; B 49 -11 352 606 ;\r\nC -1 ; WX 722 ; N Ocircumflex ; B 60 -18 699 873 ;\r\nC -1 ; WX 722 ; N Ugrave ; B 102 -18 765 876 ;\r\nC -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;\r\nC -1 ; WX 500 ; N thorn ; B -75 -205 469 683 ;\r\nC -1 ; WX 300 ; N twosuperior ; B 33 271 324 676 ;\r\nC -1 ; WX 722 ; N Odieresis ; B 60 -18 699 818 ;\r\nC -1 ; WX 500 ; N mu ; B -30 -209 497 428 ;\r\nC -1 ; WX 278 ; N igrave ; B 49 -11 284 664 ;\r\nC -1 ; WX 500 ; N ohungarumlaut ; B 27 -11 590 664 ;\r\nC -1 ; WX 611 ; N Eogonek ; B -1 -169 634 653 ;\r\nC -1 ; WX 500 ; N dcroat ; B 15 -13 572 683 ;\r\nC -1 ; WX 750 ; N threequarters ; B 23 -10 736 676 ;\r\nC -1 ; WX 500 ; N Scedilla ; B 17 -217 508 667 ;\r\nC -1 ; WX 300 ; N lcaron ; B 41 -11 407 683 ;\r\nC -1 ; WX 667 ; N Kcommaaccent ; B 7 -217 722 653 ;\r\nC -1 ; WX 556 ; N Lacute ; B -8 0 559 876 ;\r\nC -1 ; WX 980 ; N trademark ; B 30 247 957 653 ;\r\nC -1 ; WX 444 ; N edotaccent ; B 31 -11 412 606 ;\r\nC -1 ; WX 333 ; N Igrave ; B -8 0 384 876 ;\r\nC -1 ; WX 333 ; N Imacron ; B -8 0 441 795 ;\r\nC -1 ; WX 611 ; N Lcaron ; B -8 0 586 653 ;\r\nC -1 ; WX 750 ; N onehalf ; B 34 -10 749 676 ;\r\nC -1 ; WX 549 ; N lessequal ; B 26 0 523 658 ;\r\nC -1 ; WX 500 ; N ocircumflex ; B 27 -11 468 661 ;\r\nC -1 ; WX 500 ; N ntilde ; B 14 -9 476 624 ;\r\nC -1 ; WX 722 ; N Uhungarumlaut ; B 102 -18 765 876 ;\r\nC -1 ; WX 611 ; N Eacute ; B -1 0 634 876 ;\r\nC -1 ; WX 444 ; N emacron ; B 31 -11 457 583 ;\r\nC -1 ; WX 500 ; N gbreve ; B 8 -206 487 650 ;\r\nC -1 ; WX 750 ; N onequarter ; B 33 -10 736 676 ;\r\nC -1 ; WX 500 ; N Scaron ; B 17 -18 520 873 ;\r\nC -1 ; WX 500 ; N Scommaaccent ; B 17 -217 508 667 ;\r\nC -1 ; WX 722 ; N Ohungarumlaut ; B 60 -18 699 876 ;\r\nC -1 ; WX 400 ; N degree ; B 101 390 387 676 ;\r\nC -1 ; WX 500 ; N ograve ; B 27 -11 468 664 ;\r\nC -1 ; WX 667 ; N Ccaron ; B 66 -18 689 873 ;\r\nC -1 ; WX 500 ; N ugrave ; B 42 -11 475 664 ;\r\nC -1 ; WX 453 ; N radical ; B 2 -60 452 768 ;\r\nC -1 ; WX 722 ; N Dcaron ; B -8 0 700 873 ;\r\nC -1 ; WX 389 ; N rcommaaccent ; B -3 -217 412 441 ;\r\nC -1 ; WX 667 ; N Ntilde ; B -20 -15 727 836 ;\r\nC -1 ; WX 500 ; N otilde ; B 27 -11 496 624 ;\r\nC -1 ; WX 611 ; N Rcommaaccent ; B -13 -187 588 653 ;\r\nC -1 ; WX 556 ; N Lcommaaccent ; B -8 -217 559 653 ;\r\nC -1 ; WX 611 ; N Atilde ; B -51 0 566 836 ;\r\nC -1 ; WX 611 ; N Aogonek ; B -51 -169 566 668 ;\r\nC -1 ; WX 611 ; N Aring ; B -51 0 564 883 ;\r\nC -1 ; WX 722 ; N Otilde ; B 60 -18 699 836 ;\r\nC -1 ; WX 389 ; N zdotaccent ; B -2 -81 380 606 ;\r\nC -1 ; WX 611 ; N Ecaron ; B -1 0 634 873 ;\r\nC -1 ; WX 333 ; N Iogonek ; B -8 -169 384 653 ;\r\nC -1 ; WX 444 ; N kcommaaccent ; B 14 -187 461 683 ;\r\nC -1 ; WX 675 ; N minus ; B 86 220 590 286 ;\r\nC -1 ; WX 333 ; N Icircumflex ; B -8 0 425 873 ;\r\nC -1 ; WX 500 ; N ncaron ; B 14 -9 510 661 ;\r\nC -1 ; WX 278 ; N tcommaaccent ; B 2 -217 296 546 ;\r\nC -1 ; WX 675 ; N logicalnot ; B 86 108 590 386 ;\r\nC -1 ; WX 500 ; N odieresis ; B 27 -11 489 606 ;\r\nC -1 ; WX 500 ; N udieresis ; B 42 -11 479 606 ;\r\nC -1 ; WX 549 ; N notequal ; B 12 -29 537 541 ;\r\nC -1 ; WX 500 ; N gcommaaccent ; B 8 -206 472 706 ;\r\nC -1 ; WX 500 ; N eth ; B 27 -11 482 683 ;\r\nC -1 ; WX 389 ; N zcaron ; B -2 -81 434 661 ;\r\nC -1 ; WX 500 ; N ncommaaccent ; B 14 -187 474 441 ;\r\nC -1 ; WX 300 ; N onesuperior ; B 43 271 284 676 ;\r\nC -1 ; WX 278 ; N imacron ; B 46 -11 311 583 ;\r\nC -1 ; WX 500 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nStartKernData\r\nStartKernPairs 2321\r\nKPX A C -30\r\nKPX A Cacute -30\r\nKPX A Ccaron -30\r\nKPX A Ccedilla -30\r\nKPX A G -35\r\nKPX A Gbreve -35\r\nKPX A Gcommaaccent -35\r\nKPX A O -40\r\nKPX A Oacute -40\r\nKPX A Ocircumflex -40\r\nKPX A Odieresis -40\r\nKPX A Ograve -40\r\nKPX A Ohungarumlaut -40\r\nKPX A Omacron -40\r\nKPX A Oslash -40\r\nKPX A Otilde -40\r\nKPX A Q -40\r\nKPX A T -37\r\nKPX A Tcaron -37\r\nKPX A Tcommaaccent -37\r\nKPX A U -50\r\nKPX A Uacute -50\r\nKPX A Ucircumflex -50\r\nKPX A Udieresis -50\r\nKPX A Ugrave -50\r\nKPX A Uhungarumlaut -50\r\nKPX A Umacron -50\r\nKPX A Uogonek -50\r\nKPX A Uring -50\r\nKPX A V -105\r\nKPX A W -95\r\nKPX A Y -55\r\nKPX A Yacute -55\r\nKPX A Ydieresis -55\r\nKPX A quoteright -37\r\nKPX A u -20\r\nKPX A uacute -20\r\nKPX A ucircumflex -20\r\nKPX A udieresis -20\r\nKPX A ugrave -20\r\nKPX A uhungarumlaut -20\r\nKPX A umacron -20\r\nKPX A uogonek -20\r\nKPX A uring -20\r\nKPX A v -55\r\nKPX A w -55\r\nKPX A y -55\r\nKPX A yacute -55\r\nKPX A ydieresis -55\r\nKPX Aacute C -30\r\nKPX Aacute Cacute -30\r\nKPX Aacute Ccaron -30\r\nKPX Aacute Ccedilla -30\r\nKPX Aacute G -35\r\nKPX Aacute Gbreve -35\r\nKPX Aacute Gcommaaccent -35\r\nKPX Aacute O -40\r\nKPX Aacute Oacute -40\r\nKPX Aacute Ocircumflex -40\r\nKPX Aacute Odieresis -40\r\nKPX Aacute Ograve -40\r\nKPX Aacute Ohungarumlaut -40\r\nKPX Aacute Omacron -40\r\nKPX Aacute Oslash -40\r\nKPX Aacute Otilde -40\r\nKPX Aacute Q -40\r\nKPX Aacute T -37\r\nKPX Aacute Tcaron -37\r\nKPX Aacute Tcommaaccent -37\r\nKPX Aacute U -50\r\nKPX Aacute Uacute -50\r\nKPX Aacute Ucircumflex -50\r\nKPX Aacute Udieresis -50\r\nKPX Aacute Ugrave -50\r\nKPX Aacute Uhungarumlaut -50\r\nKPX Aacute Umacron -50\r\nKPX Aacute Uogonek -50\r\nKPX Aacute Uring -50\r\nKPX Aacute V -105\r\nKPX Aacute W -95\r\nKPX Aacute Y -55\r\nKPX Aacute Yacute -55\r\nKPX Aacute Ydieresis -55\r\nKPX Aacute quoteright -37\r\nKPX Aacute u -20\r\nKPX Aacute uacute -20\r\nKPX Aacute ucircumflex -20\r\nKPX Aacute udieresis -20\r\nKPX Aacute ugrave -20\r\nKPX Aacute uhungarumlaut -20\r\nKPX Aacute umacron -20\r\nKPX Aacute uogonek -20\r\nKPX Aacute uring -20\r\nKPX Aacute v -55\r\nKPX Aacute w -55\r\nKPX Aacute y -55\r\nKPX Aacute yacute -55\r\nKPX Aacute ydieresis -55\r\nKPX Abreve C -30\r\nKPX Abreve Cacute -30\r\nKPX Abreve Ccaron -30\r\nKPX Abreve Ccedilla -30\r\nKPX Abreve G -35\r\nKPX Abreve Gbreve -35\r\nKPX Abreve Gcommaaccent -35\r\nKPX Abreve O -40\r\nKPX Abreve Oacute -40\r\nKPX Abreve Ocircumflex -40\r\nKPX Abreve Odieresis -40\r\nKPX Abreve Ograve -40\r\nKPX Abreve Ohungarumlaut -40\r\nKPX Abreve Omacron -40\r\nKPX Abreve Oslash -40\r\nKPX Abreve Otilde -40\r\nKPX Abreve Q -40\r\nKPX Abreve T -37\r\nKPX Abreve Tcaron -37\r\nKPX Abreve Tcommaaccent -37\r\nKPX Abreve U -50\r\nKPX Abreve Uacute -50\r\nKPX Abreve Ucircumflex -50\r\nKPX Abreve Udieresis -50\r\nKPX Abreve Ugrave -50\r\nKPX Abreve Uhungarumlaut -50\r\nKPX Abreve Umacron -50\r\nKPX Abreve Uogonek -50\r\nKPX Abreve Uring -50\r\nKPX Abreve V -105\r\nKPX Abreve W -95\r\nKPX Abreve Y -55\r\nKPX Abreve Yacute -55\r\nKPX Abreve Ydieresis -55\r\nKPX Abreve quoteright -37\r\nKPX Abreve u -20\r\nKPX Abreve uacute -20\r\nKPX Abreve ucircumflex -20\r\nKPX Abreve udieresis -20\r\nKPX Abreve ugrave -20\r\nKPX Abreve uhungarumlaut -20\r\nKPX Abreve umacron -20\r\nKPX Abreve uogonek -20\r\nKPX Abreve uring -20\r\nKPX Abreve v -55\r\nKPX Abreve w -55\r\nKPX Abreve y -55\r\nKPX Abreve yacute -55\r\nKPX Abreve ydieresis -55\r\nKPX Acircumflex C -30\r\nKPX Acircumflex Cacute -30\r\nKPX Acircumflex Ccaron -30\r\nKPX Acircumflex Ccedilla -30\r\nKPX Acircumflex G -35\r\nKPX Acircumflex Gbreve -35\r\nKPX Acircumflex Gcommaaccent -35\r\nKPX Acircumflex O -40\r\nKPX Acircumflex Oacute -40\r\nKPX Acircumflex Ocircumflex -40\r\nKPX Acircumflex Odieresis -40\r\nKPX Acircumflex Ograve -40\r\nKPX Acircumflex Ohungarumlaut -40\r\nKPX Acircumflex Omacron -40\r\nKPX Acircumflex Oslash -40\r\nKPX Acircumflex Otilde -40\r\nKPX Acircumflex Q -40\r\nKPX Acircumflex T -37\r\nKPX Acircumflex Tcaron -37\r\nKPX Acircumflex Tcommaaccent -37\r\nKPX Acircumflex U -50\r\nKPX Acircumflex Uacute -50\r\nKPX Acircumflex Ucircumflex -50\r\nKPX Acircumflex Udieresis -50\r\nKPX Acircumflex Ugrave -50\r\nKPX Acircumflex Uhungarumlaut -50\r\nKPX Acircumflex Umacron -50\r\nKPX Acircumflex Uogonek -50\r\nKPX Acircumflex Uring -50\r\nKPX Acircumflex V -105\r\nKPX Acircumflex W -95\r\nKPX Acircumflex Y -55\r\nKPX Acircumflex Yacute -55\r\nKPX Acircumflex Ydieresis -55\r\nKPX Acircumflex quoteright -37\r\nKPX Acircumflex u -20\r\nKPX Acircumflex uacute -20\r\nKPX Acircumflex ucircumflex -20\r\nKPX Acircumflex udieresis -20\r\nKPX Acircumflex ugrave -20\r\nKPX Acircumflex uhungarumlaut -20\r\nKPX Acircumflex umacron -20\r\nKPX Acircumflex uogonek -20\r\nKPX Acircumflex uring -20\r\nKPX Acircumflex v -55\r\nKPX Acircumflex w -55\r\nKPX Acircumflex y -55\r\nKPX Acircumflex yacute -55\r\nKPX Acircumflex ydieresis -55\r\nKPX Adieresis C -30\r\nKPX Adieresis Cacute -30\r\nKPX Adieresis Ccaron -30\r\nKPX Adieresis Ccedilla -30\r\nKPX Adieresis G -35\r\nKPX Adieresis Gbreve -35\r\nKPX Adieresis Gcommaaccent -35\r\nKPX Adieresis O -40\r\nKPX Adieresis Oacute -40\r\nKPX Adieresis Ocircumflex -40\r\nKPX Adieresis Odieresis -40\r\nKPX Adieresis Ograve -40\r\nKPX Adieresis Ohungarumlaut -40\r\nKPX Adieresis Omacron -40\r\nKPX Adieresis Oslash -40\r\nKPX Adieresis Otilde -40\r\nKPX Adieresis Q -40\r\nKPX Adieresis T -37\r\nKPX Adieresis Tcaron -37\r\nKPX Adieresis Tcommaaccent -37\r\nKPX Adieresis U -50\r\nKPX Adieresis Uacute -50\r\nKPX Adieresis Ucircumflex -50\r\nKPX Adieresis Udieresis -50\r\nKPX Adieresis Ugrave -50\r\nKPX Adieresis Uhungarumlaut -50\r\nKPX Adieresis Umacron -50\r\nKPX Adieresis Uogonek -50\r\nKPX Adieresis Uring -50\r\nKPX Adieresis V -105\r\nKPX Adieresis W -95\r\nKPX Adieresis Y -55\r\nKPX Adieresis Yacute -55\r\nKPX Adieresis Ydieresis -55\r\nKPX Adieresis quoteright -37\r\nKPX Adieresis u -20\r\nKPX Adieresis uacute -20\r\nKPX Adieresis ucircumflex -20\r\nKPX Adieresis udieresis -20\r\nKPX Adieresis ugrave -20\r\nKPX Adieresis uhungarumlaut -20\r\nKPX Adieresis umacron -20\r\nKPX Adieresis uogonek -20\r\nKPX Adieresis uring -20\r\nKPX Adieresis v -55\r\nKPX Adieresis w -55\r\nKPX Adieresis y -55\r\nKPX Adieresis yacute -55\r\nKPX Adieresis ydieresis -55\r\nKPX Agrave C -30\r\nKPX Agrave Cacute -30\r\nKPX Agrave Ccaron -30\r\nKPX Agrave Ccedilla -30\r\nKPX Agrave G -35\r\nKPX Agrave Gbreve -35\r\nKPX Agrave Gcommaaccent -35\r\nKPX Agrave O -40\r\nKPX Agrave Oacute -40\r\nKPX Agrave Ocircumflex -40\r\nKPX Agrave Odieresis -40\r\nKPX Agrave Ograve -40\r\nKPX Agrave Ohungarumlaut -40\r\nKPX Agrave Omacron -40\r\nKPX Agrave Oslash -40\r\nKPX Agrave Otilde -40\r\nKPX Agrave Q -40\r\nKPX Agrave T -37\r\nKPX Agrave Tcaron -37\r\nKPX Agrave Tcommaaccent -37\r\nKPX Agrave U -50\r\nKPX Agrave Uacute -50\r\nKPX Agrave Ucircumflex -50\r\nKPX Agrave Udieresis -50\r\nKPX Agrave Ugrave -50\r\nKPX Agrave Uhungarumlaut -50\r\nKPX Agrave Umacron -50\r\nKPX Agrave Uogonek -50\r\nKPX Agrave Uring -50\r\nKPX Agrave V -105\r\nKPX Agrave W -95\r\nKPX Agrave Y -55\r\nKPX Agrave Yacute -55\r\nKPX Agrave Ydieresis -55\r\nKPX Agrave quoteright -37\r\nKPX Agrave u -20\r\nKPX Agrave uacute -20\r\nKPX Agrave ucircumflex -20\r\nKPX Agrave udieresis -20\r\nKPX Agrave ugrave -20\r\nKPX Agrave uhungarumlaut -20\r\nKPX Agrave umacron -20\r\nKPX Agrave uogonek -20\r\nKPX Agrave uring -20\r\nKPX Agrave v -55\r\nKPX Agrave w -55\r\nKPX Agrave y -55\r\nKPX Agrave yacute -55\r\nKPX Agrave ydieresis -55\r\nKPX Amacron C -30\r\nKPX Amacron Cacute -30\r\nKPX Amacron Ccaron -30\r\nKPX Amacron Ccedilla -30\r\nKPX Amacron G -35\r\nKPX Amacron Gbreve -35\r\nKPX Amacron Gcommaaccent -35\r\nKPX Amacron O -40\r\nKPX Amacron Oacute -40\r\nKPX Amacron Ocircumflex -40\r\nKPX Amacron Odieresis -40\r\nKPX Amacron Ograve -40\r\nKPX Amacron Ohungarumlaut -40\r\nKPX Amacron Omacron -40\r\nKPX Amacron Oslash -40\r\nKPX Amacron Otilde -40\r\nKPX Amacron Q -40\r\nKPX Amacron T -37\r\nKPX Amacron Tcaron -37\r\nKPX Amacron Tcommaaccent -37\r\nKPX Amacron U -50\r\nKPX Amacron Uacute -50\r\nKPX Amacron Ucircumflex -50\r\nKPX Amacron Udieresis -50\r\nKPX Amacron Ugrave -50\r\nKPX Amacron Uhungarumlaut -50\r\nKPX Amacron Umacron -50\r\nKPX Amacron Uogonek -50\r\nKPX Amacron Uring -50\r\nKPX Amacron V -105\r\nKPX Amacron W -95\r\nKPX Amacron Y -55\r\nKPX Amacron Yacute -55\r\nKPX Amacron Ydieresis -55\r\nKPX Amacron quoteright -37\r\nKPX Amacron u -20\r\nKPX Amacron uacute -20\r\nKPX Amacron ucircumflex -20\r\nKPX Amacron udieresis -20\r\nKPX Amacron ugrave -20\r\nKPX Amacron uhungarumlaut -20\r\nKPX Amacron umacron -20\r\nKPX Amacron uogonek -20\r\nKPX Amacron uring -20\r\nKPX Amacron v -55\r\nKPX Amacron w -55\r\nKPX Amacron y -55\r\nKPX Amacron yacute -55\r\nKPX Amacron ydieresis -55\r\nKPX Aogonek C -30\r\nKPX Aogonek Cacute -30\r\nKPX Aogonek Ccaron -30\r\nKPX Aogonek Ccedilla -30\r\nKPX Aogonek G -35\r\nKPX Aogonek Gbreve -35\r\nKPX Aogonek Gcommaaccent -35\r\nKPX Aogonek O -40\r\nKPX Aogonek Oacute -40\r\nKPX Aogonek Ocircumflex -40\r\nKPX Aogonek Odieresis -40\r\nKPX Aogonek Ograve -40\r\nKPX Aogonek Ohungarumlaut -40\r\nKPX Aogonek Omacron -40\r\nKPX Aogonek Oslash -40\r\nKPX Aogonek Otilde -40\r\nKPX Aogonek Q -40\r\nKPX Aogonek T -37\r\nKPX Aogonek Tcaron -37\r\nKPX Aogonek Tcommaaccent -37\r\nKPX Aogonek U -50\r\nKPX Aogonek Uacute -50\r\nKPX Aogonek Ucircumflex -50\r\nKPX Aogonek Udieresis -50\r\nKPX Aogonek Ugrave -50\r\nKPX Aogonek Uhungarumlaut -50\r\nKPX Aogonek Umacron -50\r\nKPX Aogonek Uogonek -50\r\nKPX Aogonek Uring -50\r\nKPX Aogonek V -105\r\nKPX Aogonek W -95\r\nKPX Aogonek Y -55\r\nKPX Aogonek Yacute -55\r\nKPX Aogonek Ydieresis -55\r\nKPX Aogonek quoteright -37\r\nKPX Aogonek u -20\r\nKPX Aogonek uacute -20\r\nKPX Aogonek ucircumflex -20\r\nKPX Aogonek udieresis -20\r\nKPX Aogonek ugrave -20\r\nKPX Aogonek uhungarumlaut -20\r\nKPX Aogonek umacron -20\r\nKPX Aogonek uogonek -20\r\nKPX Aogonek uring -20\r\nKPX Aogonek v -55\r\nKPX Aogonek w -55\r\nKPX Aogonek y -55\r\nKPX Aogonek yacute -55\r\nKPX Aogonek ydieresis -55\r\nKPX Aring C -30\r\nKPX Aring Cacute -30\r\nKPX Aring Ccaron -30\r\nKPX Aring Ccedilla -30\r\nKPX Aring G -35\r\nKPX Aring Gbreve -35\r\nKPX Aring Gcommaaccent -35\r\nKPX Aring O -40\r\nKPX Aring Oacute -40\r\nKPX Aring Ocircumflex -40\r\nKPX Aring Odieresis -40\r\nKPX Aring Ograve -40\r\nKPX Aring Ohungarumlaut -40\r\nKPX Aring Omacron -40\r\nKPX Aring Oslash -40\r\nKPX Aring Otilde -40\r\nKPX Aring Q -40\r\nKPX Aring T -37\r\nKPX Aring Tcaron -37\r\nKPX Aring Tcommaaccent -37\r\nKPX Aring U -50\r\nKPX Aring Uacute -50\r\nKPX Aring Ucircumflex -50\r\nKPX Aring Udieresis -50\r\nKPX Aring Ugrave -50\r\nKPX Aring Uhungarumlaut -50\r\nKPX Aring Umacron -50\r\nKPX Aring Uogonek -50\r\nKPX Aring Uring -50\r\nKPX Aring V -105\r\nKPX Aring W -95\r\nKPX Aring Y -55\r\nKPX Aring Yacute -55\r\nKPX Aring Ydieresis -55\r\nKPX Aring quoteright -37\r\nKPX Aring u -20\r\nKPX Aring uacute -20\r\nKPX Aring ucircumflex -20\r\nKPX Aring udieresis -20\r\nKPX Aring ugrave -20\r\nKPX Aring uhungarumlaut -20\r\nKPX Aring umacron -20\r\nKPX Aring uogonek -20\r\nKPX Aring uring -20\r\nKPX Aring v -55\r\nKPX Aring w -55\r\nKPX Aring y -55\r\nKPX Aring yacute -55\r\nKPX Aring ydieresis -55\r\nKPX Atilde C -30\r\nKPX Atilde Cacute -30\r\nKPX Atilde Ccaron -30\r\nKPX Atilde Ccedilla -30\r\nKPX Atilde G -35\r\nKPX Atilde Gbreve -35\r\nKPX Atilde Gcommaaccent -35\r\nKPX Atilde O -40\r\nKPX Atilde Oacute -40\r\nKPX Atilde Ocircumflex -40\r\nKPX Atilde Odieresis -40\r\nKPX Atilde Ograve -40\r\nKPX Atilde Ohungarumlaut -40\r\nKPX Atilde Omacron -40\r\nKPX Atilde Oslash -40\r\nKPX Atilde Otilde -40\r\nKPX Atilde Q -40\r\nKPX Atilde T -37\r\nKPX Atilde Tcaron -37\r\nKPX Atilde Tcommaaccent -37\r\nKPX Atilde U -50\r\nKPX Atilde Uacute -50\r\nKPX Atilde Ucircumflex -50\r\nKPX Atilde Udieresis -50\r\nKPX Atilde Ugrave -50\r\nKPX Atilde Uhungarumlaut -50\r\nKPX Atilde Umacron -50\r\nKPX Atilde Uogonek -50\r\nKPX Atilde Uring -50\r\nKPX Atilde V -105\r\nKPX Atilde W -95\r\nKPX Atilde Y -55\r\nKPX Atilde Yacute -55\r\nKPX Atilde Ydieresis -55\r\nKPX Atilde quoteright -37\r\nKPX Atilde u -20\r\nKPX Atilde uacute -20\r\nKPX Atilde ucircumflex -20\r\nKPX Atilde udieresis -20\r\nKPX Atilde ugrave -20\r\nKPX Atilde uhungarumlaut -20\r\nKPX Atilde umacron -20\r\nKPX Atilde uogonek -20\r\nKPX Atilde uring -20\r\nKPX Atilde v -55\r\nKPX Atilde w -55\r\nKPX Atilde y -55\r\nKPX Atilde yacute -55\r\nKPX Atilde ydieresis -55\r\nKPX B A -25\r\nKPX B Aacute -25\r\nKPX B Abreve -25\r\nKPX B Acircumflex -25\r\nKPX B Adieresis -25\r\nKPX B Agrave -25\r\nKPX B Amacron -25\r\nKPX B Aogonek -25\r\nKPX B Aring -25\r\nKPX B Atilde -25\r\nKPX B U -10\r\nKPX B Uacute -10\r\nKPX B Ucircumflex -10\r\nKPX B Udieresis -10\r\nKPX B Ugrave -10\r\nKPX B Uhungarumlaut -10\r\nKPX B Umacron -10\r\nKPX B Uogonek -10\r\nKPX B Uring -10\r\nKPX D A -35\r\nKPX D Aacute -35\r\nKPX D Abreve -35\r\nKPX D Acircumflex -35\r\nKPX D Adieresis -35\r\nKPX D Agrave -35\r\nKPX D Amacron -35\r\nKPX D Aogonek -35\r\nKPX D Aring -35\r\nKPX D Atilde -35\r\nKPX D V -40\r\nKPX D W -40\r\nKPX D Y -40\r\nKPX D Yacute -40\r\nKPX D Ydieresis -40\r\nKPX Dcaron A -35\r\nKPX Dcaron Aacute -35\r\nKPX Dcaron Abreve -35\r\nKPX Dcaron Acircumflex -35\r\nKPX Dcaron Adieresis -35\r\nKPX Dcaron Agrave -35\r\nKPX Dcaron Amacron -35\r\nKPX Dcaron Aogonek -35\r\nKPX Dcaron Aring -35\r\nKPX Dcaron Atilde -35\r\nKPX Dcaron V -40\r\nKPX Dcaron W -40\r\nKPX Dcaron Y -40\r\nKPX Dcaron Yacute -40\r\nKPX Dcaron Ydieresis -40\r\nKPX Dcroat A -35\r\nKPX Dcroat Aacute -35\r\nKPX Dcroat Abreve -35\r\nKPX Dcroat Acircumflex -35\r\nKPX Dcroat Adieresis -35\r\nKPX Dcroat Agrave -35\r\nKPX Dcroat Amacron -35\r\nKPX Dcroat Aogonek -35\r\nKPX Dcroat Aring -35\r\nKPX Dcroat Atilde -35\r\nKPX Dcroat V -40\r\nKPX Dcroat W -40\r\nKPX Dcroat Y -40\r\nKPX Dcroat Yacute -40\r\nKPX Dcroat Ydieresis -40\r\nKPX F A -115\r\nKPX F Aacute -115\r\nKPX F Abreve -115\r\nKPX F Acircumflex -115\r\nKPX F Adieresis -115\r\nKPX F Agrave -115\r\nKPX F Amacron -115\r\nKPX F Aogonek -115\r\nKPX F Aring -115\r\nKPX F Atilde -115\r\nKPX F a -75\r\nKPX F aacute -75\r\nKPX F abreve -75\r\nKPX F acircumflex -75\r\nKPX F adieresis -75\r\nKPX F agrave -75\r\nKPX F amacron -75\r\nKPX F aogonek -75\r\nKPX F aring -75\r\nKPX F atilde -75\r\nKPX F comma -135\r\nKPX F e -75\r\nKPX F eacute -75\r\nKPX F ecaron -75\r\nKPX F ecircumflex -75\r\nKPX F edieresis -75\r\nKPX F edotaccent -75\r\nKPX F egrave -75\r\nKPX F emacron -75\r\nKPX F eogonek -75\r\nKPX F i -45\r\nKPX F iacute -45\r\nKPX F icircumflex -45\r\nKPX F idieresis -45\r\nKPX F igrave -45\r\nKPX F imacron -45\r\nKPX F iogonek -45\r\nKPX F o -105\r\nKPX F oacute -105\r\nKPX F ocircumflex -105\r\nKPX F odieresis -105\r\nKPX F ograve -105\r\nKPX F ohungarumlaut -105\r\nKPX F omacron -105\r\nKPX F oslash -105\r\nKPX F otilde -105\r\nKPX F period -135\r\nKPX F r -55\r\nKPX F racute -55\r\nKPX F rcaron -55\r\nKPX F rcommaaccent -55\r\nKPX J A -40\r\nKPX J Aacute -40\r\nKPX J Abreve -40\r\nKPX J Acircumflex -40\r\nKPX J Adieresis -40\r\nKPX J Agrave -40\r\nKPX J Amacron -40\r\nKPX J Aogonek -40\r\nKPX J Aring -40\r\nKPX J Atilde -40\r\nKPX J a -35\r\nKPX J aacute -35\r\nKPX J abreve -35\r\nKPX J acircumflex -35\r\nKPX J adieresis -35\r\nKPX J agrave -35\r\nKPX J amacron -35\r\nKPX J aogonek -35\r\nKPX J aring -35\r\nKPX J atilde -35\r\nKPX J comma -25\r\nKPX J e -25\r\nKPX J eacute -25\r\nKPX J ecaron -25\r\nKPX J ecircumflex -25\r\nKPX J edieresis -25\r\nKPX J edotaccent -25\r\nKPX J egrave -25\r\nKPX J emacron -25\r\nKPX J eogonek -25\r\nKPX J o -25\r\nKPX J oacute -25\r\nKPX J ocircumflex -25\r\nKPX J odieresis -25\r\nKPX J ograve -25\r\nKPX J ohungarumlaut -25\r\nKPX J omacron -25\r\nKPX J oslash -25\r\nKPX J otilde -25\r\nKPX J period -25\r\nKPX J u -35\r\nKPX J uacute -35\r\nKPX J ucircumflex -35\r\nKPX J udieresis -35\r\nKPX J ugrave -35\r\nKPX J uhungarumlaut -35\r\nKPX J umacron -35\r\nKPX J uogonek -35\r\nKPX J uring -35\r\nKPX K O -50\r\nKPX K Oacute -50\r\nKPX K Ocircumflex -50\r\nKPX K Odieresis -50\r\nKPX K Ograve -50\r\nKPX K Ohungarumlaut -50\r\nKPX K Omacron -50\r\nKPX K Oslash -50\r\nKPX K Otilde -50\r\nKPX K e -35\r\nKPX K eacute -35\r\nKPX K ecaron -35\r\nKPX K ecircumflex -35\r\nKPX K edieresis -35\r\nKPX K edotaccent -35\r\nKPX K egrave -35\r\nKPX K emacron -35\r\nKPX K eogonek -35\r\nKPX K o -40\r\nKPX K oacute -40\r\nKPX K ocircumflex -40\r\nKPX K odieresis -40\r\nKPX K ograve -40\r\nKPX K ohungarumlaut -40\r\nKPX K omacron -40\r\nKPX K oslash -40\r\nKPX K otilde -40\r\nKPX K u -40\r\nKPX K uacute -40\r\nKPX K ucircumflex -40\r\nKPX K udieresis -40\r\nKPX K ugrave -40\r\nKPX K uhungarumlaut -40\r\nKPX K umacron -40\r\nKPX K uogonek -40\r\nKPX K uring -40\r\nKPX K y -40\r\nKPX K yacute -40\r\nKPX K ydieresis -40\r\nKPX Kcommaaccent O -50\r\nKPX Kcommaaccent Oacute -50\r\nKPX Kcommaaccent Ocircumflex -50\r\nKPX Kcommaaccent Odieresis -50\r\nKPX Kcommaaccent Ograve -50\r\nKPX Kcommaaccent Ohungarumlaut -50\r\nKPX Kcommaaccent Omacron -50\r\nKPX Kcommaaccent Oslash -50\r\nKPX Kcommaaccent Otilde -50\r\nKPX Kcommaaccent e -35\r\nKPX Kcommaaccent eacute -35\r\nKPX Kcommaaccent ecaron -35\r\nKPX Kcommaaccent ecircumflex -35\r\nKPX Kcommaaccent edieresis -35\r\nKPX Kcommaaccent edotaccent -35\r\nKPX Kcommaaccent egrave -35\r\nKPX Kcommaaccent emacron -35\r\nKPX Kcommaaccent eogonek -35\r\nKPX Kcommaaccent o -40\r\nKPX Kcommaaccent oacute -40\r\nKPX Kcommaaccent ocircumflex -40\r\nKPX Kcommaaccent odieresis -40\r\nKPX Kcommaaccent ograve -40\r\nKPX Kcommaaccent ohungarumlaut -40\r\nKPX Kcommaaccent omacron -40\r\nKPX Kcommaaccent oslash -40\r\nKPX Kcommaaccent otilde -40\r\nKPX Kcommaaccent u -40\r\nKPX Kcommaaccent uacute -40\r\nKPX Kcommaaccent ucircumflex -40\r\nKPX Kcommaaccent udieresis -40\r\nKPX Kcommaaccent ugrave -40\r\nKPX Kcommaaccent uhungarumlaut -40\r\nKPX Kcommaaccent umacron -40\r\nKPX Kcommaaccent uogonek -40\r\nKPX Kcommaaccent uring -40\r\nKPX Kcommaaccent y -40\r\nKPX Kcommaaccent yacute -40\r\nKPX Kcommaaccent ydieresis -40\r\nKPX L T -20\r\nKPX L Tcaron -20\r\nKPX L Tcommaaccent -20\r\nKPX L V -55\r\nKPX L W -55\r\nKPX L Y -20\r\nKPX L Yacute -20\r\nKPX L Ydieresis -20\r\nKPX L quoteright -37\r\nKPX L y -30\r\nKPX L yacute -30\r\nKPX L ydieresis -30\r\nKPX Lacute T -20\r\nKPX Lacute Tcaron -20\r\nKPX Lacute Tcommaaccent -20\r\nKPX Lacute V -55\r\nKPX Lacute W -55\r\nKPX Lacute Y -20\r\nKPX Lacute Yacute -20\r\nKPX Lacute Ydieresis -20\r\nKPX Lacute quoteright -37\r\nKPX Lacute y -30\r\nKPX Lacute yacute -30\r\nKPX Lacute ydieresis -30\r\nKPX Lcommaaccent T -20\r\nKPX Lcommaaccent Tcaron -20\r\nKPX Lcommaaccent Tcommaaccent -20\r\nKPX Lcommaaccent V -55\r\nKPX Lcommaaccent W -55\r\nKPX Lcommaaccent Y -20\r\nKPX Lcommaaccent Yacute -20\r\nKPX Lcommaaccent Ydieresis -20\r\nKPX Lcommaaccent quoteright -37\r\nKPX Lcommaaccent y -30\r\nKPX Lcommaaccent yacute -30\r\nKPX Lcommaaccent ydieresis -30\r\nKPX Lslash T -20\r\nKPX Lslash Tcaron -20\r\nKPX Lslash Tcommaaccent -20\r\nKPX Lslash V -55\r\nKPX Lslash W -55\r\nKPX Lslash Y -20\r\nKPX Lslash Yacute -20\r\nKPX Lslash Ydieresis -20\r\nKPX Lslash quoteright -37\r\nKPX Lslash y -30\r\nKPX Lslash yacute -30\r\nKPX Lslash ydieresis -30\r\nKPX N A -27\r\nKPX N Aacute -27\r\nKPX N Abreve -27\r\nKPX N Acircumflex -27\r\nKPX N Adieresis -27\r\nKPX N Agrave -27\r\nKPX N Amacron -27\r\nKPX N Aogonek -27\r\nKPX N Aring -27\r\nKPX N Atilde -27\r\nKPX Nacute A -27\r\nKPX Nacute Aacute -27\r\nKPX Nacute Abreve -27\r\nKPX Nacute Acircumflex -27\r\nKPX Nacute Adieresis -27\r\nKPX Nacute Agrave -27\r\nKPX Nacute Amacron -27\r\nKPX Nacute Aogonek -27\r\nKPX Nacute Aring -27\r\nKPX Nacute Atilde -27\r\nKPX Ncaron A -27\r\nKPX Ncaron Aacute -27\r\nKPX Ncaron Abreve -27\r\nKPX Ncaron Acircumflex -27\r\nKPX Ncaron Adieresis -27\r\nKPX Ncaron Agrave -27\r\nKPX Ncaron Amacron -27\r\nKPX Ncaron Aogonek -27\r\nKPX Ncaron Aring -27\r\nKPX Ncaron Atilde -27\r\nKPX Ncommaaccent A -27\r\nKPX Ncommaaccent Aacute -27\r\nKPX Ncommaaccent Abreve -27\r\nKPX Ncommaaccent Acircumflex -27\r\nKPX Ncommaaccent Adieresis -27\r\nKPX Ncommaaccent Agrave -27\r\nKPX Ncommaaccent Amacron -27\r\nKPX Ncommaaccent Aogonek -27\r\nKPX Ncommaaccent Aring -27\r\nKPX Ncommaaccent Atilde -27\r\nKPX Ntilde A -27\r\nKPX Ntilde Aacute -27\r\nKPX Ntilde Abreve -27\r\nKPX Ntilde Acircumflex -27\r\nKPX Ntilde Adieresis -27\r\nKPX Ntilde Agrave -27\r\nKPX Ntilde Amacron -27\r\nKPX Ntilde Aogonek -27\r\nKPX Ntilde Aring -27\r\nKPX Ntilde Atilde -27\r\nKPX O A -55\r\nKPX O Aacute -55\r\nKPX O Abreve -55\r\nKPX O Acircumflex -55\r\nKPX O Adieresis -55\r\nKPX O Agrave -55\r\nKPX O Amacron -55\r\nKPX O Aogonek -55\r\nKPX O Aring -55\r\nKPX O Atilde -55\r\nKPX O T -40\r\nKPX O Tcaron -40\r\nKPX O Tcommaaccent -40\r\nKPX O V -50\r\nKPX O W -50\r\nKPX O X -40\r\nKPX O Y -50\r\nKPX O Yacute -50\r\nKPX O Ydieresis -50\r\nKPX Oacute A -55\r\nKPX Oacute Aacute -55\r\nKPX Oacute Abreve -55\r\nKPX Oacute Acircumflex -55\r\nKPX Oacute Adieresis -55\r\nKPX Oacute Agrave -55\r\nKPX Oacute Amacron -55\r\nKPX Oacute Aogonek -55\r\nKPX Oacute Aring -55\r\nKPX Oacute Atilde -55\r\nKPX Oacute T -40\r\nKPX Oacute Tcaron -40\r\nKPX Oacute Tcommaaccent -40\r\nKPX Oacute V -50\r\nKPX Oacute W -50\r\nKPX Oacute X -40\r\nKPX Oacute Y -50\r\nKPX Oacute Yacute -50\r\nKPX Oacute Ydieresis -50\r\nKPX Ocircumflex A -55\r\nKPX Ocircumflex Aacute -55\r\nKPX Ocircumflex Abreve -55\r\nKPX Ocircumflex Acircumflex -55\r\nKPX Ocircumflex Adieresis -55\r\nKPX Ocircumflex Agrave -55\r\nKPX Ocircumflex Amacron -55\r\nKPX Ocircumflex Aogonek -55\r\nKPX Ocircumflex Aring -55\r\nKPX Ocircumflex Atilde -55\r\nKPX Ocircumflex T -40\r\nKPX Ocircumflex Tcaron -40\r\nKPX Ocircumflex Tcommaaccent -40\r\nKPX Ocircumflex V -50\r\nKPX Ocircumflex W -50\r\nKPX Ocircumflex X -40\r\nKPX Ocircumflex Y -50\r\nKPX Ocircumflex Yacute -50\r\nKPX Ocircumflex Ydieresis -50\r\nKPX Odieresis A -55\r\nKPX Odieresis Aacute -55\r\nKPX Odieresis Abreve -55\r\nKPX Odieresis Acircumflex -55\r\nKPX Odieresis Adieresis -55\r\nKPX Odieresis Agrave -55\r\nKPX Odieresis Amacron -55\r\nKPX Odieresis Aogonek -55\r\nKPX Odieresis Aring -55\r\nKPX Odieresis Atilde -55\r\nKPX Odieresis T -40\r\nKPX Odieresis Tcaron -40\r\nKPX Odieresis Tcommaaccent -40\r\nKPX Odieresis V -50\r\nKPX Odieresis W -50\r\nKPX Odieresis X -40\r\nKPX Odieresis Y -50\r\nKPX Odieresis Yacute -50\r\nKPX Odieresis Ydieresis -50\r\nKPX Ograve A -55\r\nKPX Ograve Aacute -55\r\nKPX Ograve Abreve -55\r\nKPX Ograve Acircumflex -55\r\nKPX Ograve Adieresis -55\r\nKPX Ograve Agrave -55\r\nKPX Ograve Amacron -55\r\nKPX Ograve Aogonek -55\r\nKPX Ograve Aring -55\r\nKPX Ograve Atilde -55\r\nKPX Ograve T -40\r\nKPX Ograve Tcaron -40\r\nKPX Ograve Tcommaaccent -40\r\nKPX Ograve V -50\r\nKPX Ograve W -50\r\nKPX Ograve X -40\r\nKPX Ograve Y -50\r\nKPX Ograve Yacute -50\r\nKPX Ograve Ydieresis -50\r\nKPX Ohungarumlaut A -55\r\nKPX Ohungarumlaut Aacute -55\r\nKPX Ohungarumlaut Abreve -55\r\nKPX Ohungarumlaut Acircumflex -55\r\nKPX Ohungarumlaut Adieresis -55\r\nKPX Ohungarumlaut Agrave -55\r\nKPX Ohungarumlaut Amacron -55\r\nKPX Ohungarumlaut Aogonek -55\r\nKPX Ohungarumlaut Aring -55\r\nKPX Ohungarumlaut Atilde -55\r\nKPX Ohungarumlaut T -40\r\nKPX Ohungarumlaut Tcaron -40\r\nKPX Ohungarumlaut Tcommaaccent -40\r\nKPX Ohungarumlaut V -50\r\nKPX Ohungarumlaut W -50\r\nKPX Ohungarumlaut X -40\r\nKPX Ohungarumlaut Y -50\r\nKPX Ohungarumlaut Yacute -50\r\nKPX Ohungarumlaut Ydieresis -50\r\nKPX Omacron A -55\r\nKPX Omacron Aacute -55\r\nKPX Omacron Abreve -55\r\nKPX Omacron Acircumflex -55\r\nKPX Omacron Adieresis -55\r\nKPX Omacron Agrave -55\r\nKPX Omacron Amacron -55\r\nKPX Omacron Aogonek -55\r\nKPX Omacron Aring -55\r\nKPX Omacron Atilde -55\r\nKPX Omacron T -40\r\nKPX Omacron Tcaron -40\r\nKPX Omacron Tcommaaccent -40\r\nKPX Omacron V -50\r\nKPX Omacron W -50\r\nKPX Omacron X -40\r\nKPX Omacron Y -50\r\nKPX Omacron Yacute -50\r\nKPX Omacron Ydieresis -50\r\nKPX Oslash A -55\r\nKPX Oslash Aacute -55\r\nKPX Oslash Abreve -55\r\nKPX Oslash Acircumflex -55\r\nKPX Oslash Adieresis -55\r\nKPX Oslash Agrave -55\r\nKPX Oslash Amacron -55\r\nKPX Oslash Aogonek -55\r\nKPX Oslash Aring -55\r\nKPX Oslash Atilde -55\r\nKPX Oslash T -40\r\nKPX Oslash Tcaron -40\r\nKPX Oslash Tcommaaccent -40\r\nKPX Oslash V -50\r\nKPX Oslash W -50\r\nKPX Oslash X -40\r\nKPX Oslash Y -50\r\nKPX Oslash Yacute -50\r\nKPX Oslash Ydieresis -50\r\nKPX Otilde A -55\r\nKPX Otilde Aacute -55\r\nKPX Otilde Abreve -55\r\nKPX Otilde Acircumflex -55\r\nKPX Otilde Adieresis -55\r\nKPX Otilde Agrave -55\r\nKPX Otilde Amacron -55\r\nKPX Otilde Aogonek -55\r\nKPX Otilde Aring -55\r\nKPX Otilde Atilde -55\r\nKPX Otilde T -40\r\nKPX Otilde Tcaron -40\r\nKPX Otilde Tcommaaccent -40\r\nKPX Otilde V -50\r\nKPX Otilde W -50\r\nKPX Otilde X -40\r\nKPX Otilde Y -50\r\nKPX Otilde Yacute -50\r\nKPX Otilde Ydieresis -50\r\nKPX P A -90\r\nKPX P Aacute -90\r\nKPX P Abreve -90\r\nKPX P Acircumflex -90\r\nKPX P Adieresis -90\r\nKPX P Agrave -90\r\nKPX P Amacron -90\r\nKPX P Aogonek -90\r\nKPX P Aring -90\r\nKPX P Atilde -90\r\nKPX P a -80\r\nKPX P aacute -80\r\nKPX P abreve -80\r\nKPX P acircumflex -80\r\nKPX P adieresis -80\r\nKPX P agrave -80\r\nKPX P amacron -80\r\nKPX P aogonek -80\r\nKPX P aring -80\r\nKPX P atilde -80\r\nKPX P comma -135\r\nKPX P e -80\r\nKPX P eacute -80\r\nKPX P ecaron -80\r\nKPX P ecircumflex -80\r\nKPX P edieresis -80\r\nKPX P edotaccent -80\r\nKPX P egrave -80\r\nKPX P emacron -80\r\nKPX P eogonek -80\r\nKPX P o -80\r\nKPX P oacute -80\r\nKPX P ocircumflex -80\r\nKPX P odieresis -80\r\nKPX P ograve -80\r\nKPX P ohungarumlaut -80\r\nKPX P omacron -80\r\nKPX P oslash -80\r\nKPX P otilde -80\r\nKPX P period -135\r\nKPX Q U -10\r\nKPX Q Uacute -10\r\nKPX Q Ucircumflex -10\r\nKPX Q Udieresis -10\r\nKPX Q Ugrave -10\r\nKPX Q Uhungarumlaut -10\r\nKPX Q Umacron -10\r\nKPX Q Uogonek -10\r\nKPX Q Uring -10\r\nKPX R O -40\r\nKPX R Oacute -40\r\nKPX R Ocircumflex -40\r\nKPX R Odieresis -40\r\nKPX R Ograve -40\r\nKPX R Ohungarumlaut -40\r\nKPX R Omacron -40\r\nKPX R Oslash -40\r\nKPX R Otilde -40\r\nKPX R U -40\r\nKPX R Uacute -40\r\nKPX R Ucircumflex -40\r\nKPX R Udieresis -40\r\nKPX R Ugrave -40\r\nKPX R Uhungarumlaut -40\r\nKPX R Umacron -40\r\nKPX R Uogonek -40\r\nKPX R Uring -40\r\nKPX R V -18\r\nKPX R W -18\r\nKPX R Y -18\r\nKPX R Yacute -18\r\nKPX R Ydieresis -18\r\nKPX Racute O -40\r\nKPX Racute Oacute -40\r\nKPX Racute Ocircumflex -40\r\nKPX Racute Odieresis -40\r\nKPX Racute Ograve -40\r\nKPX Racute Ohungarumlaut -40\r\nKPX Racute Omacron -40\r\nKPX Racute Oslash -40\r\nKPX Racute Otilde -40\r\nKPX Racute U -40\r\nKPX Racute Uacute -40\r\nKPX Racute Ucircumflex -40\r\nKPX Racute Udieresis -40\r\nKPX Racute Ugrave -40\r\nKPX Racute Uhungarumlaut -40\r\nKPX Racute Umacron -40\r\nKPX Racute Uogonek -40\r\nKPX Racute Uring -40\r\nKPX Racute V -18\r\nKPX Racute W -18\r\nKPX Racute Y -18\r\nKPX Racute Yacute -18\r\nKPX Racute Ydieresis -18\r\nKPX Rcaron O -40\r\nKPX Rcaron Oacute -40\r\nKPX Rcaron Ocircumflex -40\r\nKPX Rcaron Odieresis -40\r\nKPX Rcaron Ograve -40\r\nKPX Rcaron Ohungarumlaut -40\r\nKPX Rcaron Omacron -40\r\nKPX Rcaron Oslash -40\r\nKPX Rcaron Otilde -40\r\nKPX Rcaron U -40\r\nKPX Rcaron Uacute -40\r\nKPX Rcaron Ucircumflex -40\r\nKPX Rcaron Udieresis -40\r\nKPX Rcaron Ugrave -40\r\nKPX Rcaron Uhungarumlaut -40\r\nKPX Rcaron Umacron -40\r\nKPX Rcaron Uogonek -40\r\nKPX Rcaron Uring -40\r\nKPX Rcaron V -18\r\nKPX Rcaron W -18\r\nKPX Rcaron Y -18\r\nKPX Rcaron Yacute -18\r\nKPX Rcaron Ydieresis -18\r\nKPX Rcommaaccent O -40\r\nKPX Rcommaaccent Oacute -40\r\nKPX Rcommaaccent Ocircumflex -40\r\nKPX Rcommaaccent Odieresis -40\r\nKPX Rcommaaccent Ograve -40\r\nKPX Rcommaaccent Ohungarumlaut -40\r\nKPX Rcommaaccent Omacron -40\r\nKPX Rcommaaccent Oslash -40\r\nKPX Rcommaaccent Otilde -40\r\nKPX Rcommaaccent U -40\r\nKPX Rcommaaccent Uacute -40\r\nKPX Rcommaaccent Ucircumflex -40\r\nKPX Rcommaaccent Udieresis -40\r\nKPX Rcommaaccent Ugrave -40\r\nKPX Rcommaaccent Uhungarumlaut -40\r\nKPX Rcommaaccent Umacron -40\r\nKPX Rcommaaccent Uogonek -40\r\nKPX Rcommaaccent Uring -40\r\nKPX Rcommaaccent V -18\r\nKPX Rcommaaccent W -18\r\nKPX Rcommaaccent Y -18\r\nKPX Rcommaaccent Yacute -18\r\nKPX Rcommaaccent Ydieresis -18\r\nKPX T A -50\r\nKPX T Aacute -50\r\nKPX T Abreve -50\r\nKPX T Acircumflex -50\r\nKPX T Adieresis -50\r\nKPX T Agrave -50\r\nKPX T Amacron -50\r\nKPX T Aogonek -50\r\nKPX T Aring -50\r\nKPX T Atilde -50\r\nKPX T O -18\r\nKPX T Oacute -18\r\nKPX T Ocircumflex -18\r\nKPX T Odieresis -18\r\nKPX T Ograve -18\r\nKPX T Ohungarumlaut -18\r\nKPX T Omacron -18\r\nKPX T Oslash -18\r\nKPX T Otilde -18\r\nKPX T a -92\r\nKPX T aacute -92\r\nKPX T abreve -92\r\nKPX T acircumflex -92\r\nKPX T adieresis -92\r\nKPX T agrave -92\r\nKPX T amacron -92\r\nKPX T aogonek -92\r\nKPX T aring -92\r\nKPX T atilde -92\r\nKPX T colon -55\r\nKPX T comma -74\r\nKPX T e -92\r\nKPX T eacute -92\r\nKPX T ecaron -92\r\nKPX T ecircumflex -52\r\nKPX T edieresis -52\r\nKPX T edotaccent -92\r\nKPX T egrave -52\r\nKPX T emacron -52\r\nKPX T eogonek -92\r\nKPX T hyphen -74\r\nKPX T i -55\r\nKPX T iacute -55\r\nKPX T iogonek -55\r\nKPX T o -92\r\nKPX T oacute -92\r\nKPX T ocircumflex -92\r\nKPX T odieresis -92\r\nKPX T ograve -92\r\nKPX T ohungarumlaut -92\r\nKPX T omacron -92\r\nKPX T oslash -92\r\nKPX T otilde -92\r\nKPX T period -74\r\nKPX T r -55\r\nKPX T racute -55\r\nKPX T rcaron -55\r\nKPX T rcommaaccent -55\r\nKPX T semicolon -65\r\nKPX T u -55\r\nKPX T uacute -55\r\nKPX T ucircumflex -55\r\nKPX T udieresis -55\r\nKPX T ugrave -55\r\nKPX T uhungarumlaut -55\r\nKPX T umacron -55\r\nKPX T uogonek -55\r\nKPX T uring -55\r\nKPX T w -74\r\nKPX T y -74\r\nKPX T yacute -74\r\nKPX T ydieresis -34\r\nKPX Tcaron A -50\r\nKPX Tcaron Aacute -50\r\nKPX Tcaron Abreve -50\r\nKPX Tcaron Acircumflex -50\r\nKPX Tcaron Adieresis -50\r\nKPX Tcaron Agrave -50\r\nKPX Tcaron Amacron -50\r\nKPX Tcaron Aogonek -50\r\nKPX Tcaron Aring -50\r\nKPX Tcaron Atilde -50\r\nKPX Tcaron O -18\r\nKPX Tcaron Oacute -18\r\nKPX Tcaron Ocircumflex -18\r\nKPX Tcaron Odieresis -18\r\nKPX Tcaron Ograve -18\r\nKPX Tcaron Ohungarumlaut -18\r\nKPX Tcaron Omacron -18\r\nKPX Tcaron Oslash -18\r\nKPX Tcaron Otilde -18\r\nKPX Tcaron a -92\r\nKPX Tcaron aacute -92\r\nKPX Tcaron abreve -92\r\nKPX Tcaron acircumflex -92\r\nKPX Tcaron adieresis -92\r\nKPX Tcaron agrave -92\r\nKPX Tcaron amacron -92\r\nKPX Tcaron aogonek -92\r\nKPX Tcaron aring -92\r\nKPX Tcaron atilde -92\r\nKPX Tcaron colon -55\r\nKPX Tcaron comma -74\r\nKPX Tcaron e -92\r\nKPX Tcaron eacute -92\r\nKPX Tcaron ecaron -92\r\nKPX Tcaron ecircumflex -52\r\nKPX Tcaron edieresis -52\r\nKPX Tcaron edotaccent -92\r\nKPX Tcaron egrave -52\r\nKPX Tcaron emacron -52\r\nKPX Tcaron eogonek -92\r\nKPX Tcaron hyphen -74\r\nKPX Tcaron i -55\r\nKPX Tcaron iacute -55\r\nKPX Tcaron iogonek -55\r\nKPX Tcaron o -92\r\nKPX Tcaron oacute -92\r\nKPX Tcaron ocircumflex -92\r\nKPX Tcaron odieresis -92\r\nKPX Tcaron ograve -92\r\nKPX Tcaron ohungarumlaut -92\r\nKPX Tcaron omacron -92\r\nKPX Tcaron oslash -92\r\nKPX Tcaron otilde -92\r\nKPX Tcaron period -74\r\nKPX Tcaron r -55\r\nKPX Tcaron racute -55\r\nKPX Tcaron rcaron -55\r\nKPX Tcaron rcommaaccent -55\r\nKPX Tcaron semicolon -65\r\nKPX Tcaron u -55\r\nKPX Tcaron uacute -55\r\nKPX Tcaron ucircumflex -55\r\nKPX Tcaron udieresis -55\r\nKPX Tcaron ugrave -55\r\nKPX Tcaron uhungarumlaut -55\r\nKPX Tcaron umacron -55\r\nKPX Tcaron uogonek -55\r\nKPX Tcaron uring -55\r\nKPX Tcaron w -74\r\nKPX Tcaron y -74\r\nKPX Tcaron yacute -74\r\nKPX Tcaron ydieresis -34\r\nKPX Tcommaaccent A -50\r\nKPX Tcommaaccent Aacute -50\r\nKPX Tcommaaccent Abreve -50\r\nKPX Tcommaaccent Acircumflex -50\r\nKPX Tcommaaccent Adieresis -50\r\nKPX Tcommaaccent Agrave -50\r\nKPX Tcommaaccent Amacron -50\r\nKPX Tcommaaccent Aogonek -50\r\nKPX Tcommaaccent Aring -50\r\nKPX Tcommaaccent Atilde -50\r\nKPX Tcommaaccent O -18\r\nKPX Tcommaaccent Oacute -18\r\nKPX Tcommaaccent Ocircumflex -18\r\nKPX Tcommaaccent Odieresis -18\r\nKPX Tcommaaccent Ograve -18\r\nKPX Tcommaaccent Ohungarumlaut -18\r\nKPX Tcommaaccent Omacron -18\r\nKPX Tcommaaccent Oslash -18\r\nKPX Tcommaaccent Otilde -18\r\nKPX Tcommaaccent a -92\r\nKPX Tcommaaccent aacute -92\r\nKPX Tcommaaccent abreve -92\r\nKPX Tcommaaccent acircumflex -92\r\nKPX Tcommaaccent adieresis -92\r\nKPX Tcommaaccent agrave -92\r\nKPX Tcommaaccent amacron -92\r\nKPX Tcommaaccent aogonek -92\r\nKPX Tcommaaccent aring -92\r\nKPX Tcommaaccent atilde -92\r\nKPX Tcommaaccent colon -55\r\nKPX Tcommaaccent comma -74\r\nKPX Tcommaaccent e -92\r\nKPX Tcommaaccent eacute -92\r\nKPX Tcommaaccent ecaron -92\r\nKPX Tcommaaccent ecircumflex -52\r\nKPX Tcommaaccent edieresis -52\r\nKPX Tcommaaccent edotaccent -92\r\nKPX Tcommaaccent egrave -52\r\nKPX Tcommaaccent emacron -52\r\nKPX Tcommaaccent eogonek -92\r\nKPX Tcommaaccent hyphen -74\r\nKPX Tcommaaccent i -55\r\nKPX Tcommaaccent iacute -55\r\nKPX Tcommaaccent iogonek -55\r\nKPX Tcommaaccent o -92\r\nKPX Tcommaaccent oacute -92\r\nKPX Tcommaaccent ocircumflex -92\r\nKPX Tcommaaccent odieresis -92\r\nKPX Tcommaaccent ograve -92\r\nKPX Tcommaaccent ohungarumlaut -92\r\nKPX Tcommaaccent omacron -92\r\nKPX Tcommaaccent oslash -92\r\nKPX Tcommaaccent otilde -92\r\nKPX Tcommaaccent period -74\r\nKPX Tcommaaccent r -55\r\nKPX Tcommaaccent racute -55\r\nKPX Tcommaaccent rcaron -55\r\nKPX Tcommaaccent rcommaaccent -55\r\nKPX Tcommaaccent semicolon -65\r\nKPX Tcommaaccent u -55\r\nKPX Tcommaaccent uacute -55\r\nKPX Tcommaaccent ucircumflex -55\r\nKPX Tcommaaccent udieresis -55\r\nKPX Tcommaaccent ugrave -55\r\nKPX Tcommaaccent uhungarumlaut -55\r\nKPX Tcommaaccent umacron -55\r\nKPX Tcommaaccent uogonek -55\r\nKPX Tcommaaccent uring -55\r\nKPX Tcommaaccent w -74\r\nKPX Tcommaaccent y -74\r\nKPX Tcommaaccent yacute -74\r\nKPX Tcommaaccent ydieresis -34\r\nKPX U A -40\r\nKPX U Aacute -40\r\nKPX U Abreve -40\r\nKPX U Acircumflex -40\r\nKPX U Adieresis -40\r\nKPX U Agrave -40\r\nKPX U Amacron -40\r\nKPX U Aogonek -40\r\nKPX U Aring -40\r\nKPX U Atilde -40\r\nKPX U comma -25\r\nKPX U period -25\r\nKPX Uacute A -40\r\nKPX Uacute Aacute -40\r\nKPX Uacute Abreve -40\r\nKPX Uacute Acircumflex -40\r\nKPX Uacute Adieresis -40\r\nKPX Uacute Agrave -40\r\nKPX Uacute Amacron -40\r\nKPX Uacute Aogonek -40\r\nKPX Uacute Aring -40\r\nKPX Uacute Atilde -40\r\nKPX Uacute comma -25\r\nKPX Uacute period -25\r\nKPX Ucircumflex A -40\r\nKPX Ucircumflex Aacute -40\r\nKPX Ucircumflex Abreve -40\r\nKPX Ucircumflex Acircumflex -40\r\nKPX Ucircumflex Adieresis -40\r\nKPX Ucircumflex Agrave -40\r\nKPX Ucircumflex Amacron -40\r\nKPX Ucircumflex Aogonek -40\r\nKPX Ucircumflex Aring -40\r\nKPX Ucircumflex Atilde -40\r\nKPX Ucircumflex comma -25\r\nKPX Ucircumflex period -25\r\nKPX Udieresis A -40\r\nKPX Udieresis Aacute -40\r\nKPX Udieresis Abreve -40\r\nKPX Udieresis Acircumflex -40\r\nKPX Udieresis Adieresis -40\r\nKPX Udieresis Agrave -40\r\nKPX Udieresis Amacron -40\r\nKPX Udieresis Aogonek -40\r\nKPX Udieresis Aring -40\r\nKPX Udieresis Atilde -40\r\nKPX Udieresis comma -25\r\nKPX Udieresis period -25\r\nKPX Ugrave A -40\r\nKPX Ugrave Aacute -40\r\nKPX Ugrave Abreve -40\r\nKPX Ugrave Acircumflex -40\r\nKPX Ugrave Adieresis -40\r\nKPX Ugrave Agrave -40\r\nKPX Ugrave Amacron -40\r\nKPX Ugrave Aogonek -40\r\nKPX Ugrave Aring -40\r\nKPX Ugrave Atilde -40\r\nKPX Ugrave comma -25\r\nKPX Ugrave period -25\r\nKPX Uhungarumlaut A -40\r\nKPX Uhungarumlaut Aacute -40\r\nKPX Uhungarumlaut Abreve -40\r\nKPX Uhungarumlaut Acircumflex -40\r\nKPX Uhungarumlaut Adieresis -40\r\nKPX Uhungarumlaut Agrave -40\r\nKPX Uhungarumlaut Amacron -40\r\nKPX Uhungarumlaut Aogonek -40\r\nKPX Uhungarumlaut Aring -40\r\nKPX Uhungarumlaut Atilde -40\r\nKPX Uhungarumlaut comma -25\r\nKPX Uhungarumlaut period -25\r\nKPX Umacron A -40\r\nKPX Umacron Aacute -40\r\nKPX Umacron Abreve -40\r\nKPX Umacron Acircumflex -40\r\nKPX Umacron Adieresis -40\r\nKPX Umacron Agrave -40\r\nKPX Umacron Amacron -40\r\nKPX Umacron Aogonek -40\r\nKPX Umacron Aring -40\r\nKPX Umacron Atilde -40\r\nKPX Umacron comma -25\r\nKPX Umacron period -25\r\nKPX Uogonek A -40\r\nKPX Uogonek Aacute -40\r\nKPX Uogonek Abreve -40\r\nKPX Uogonek Acircumflex -40\r\nKPX Uogonek Adieresis -40\r\nKPX Uogonek Agrave -40\r\nKPX Uogonek Amacron -40\r\nKPX Uogonek Aogonek -40\r\nKPX Uogonek Aring -40\r\nKPX Uogonek Atilde -40\r\nKPX Uogonek comma -25\r\nKPX Uogonek period -25\r\nKPX Uring A -40\r\nKPX Uring Aacute -40\r\nKPX Uring Abreve -40\r\nKPX Uring Acircumflex -40\r\nKPX Uring Adieresis -40\r\nKPX Uring Agrave -40\r\nKPX Uring Amacron -40\r\nKPX Uring Aogonek -40\r\nKPX Uring Aring -40\r\nKPX Uring Atilde -40\r\nKPX Uring comma -25\r\nKPX Uring period -25\r\nKPX V A -60\r\nKPX V Aacute -60\r\nKPX V Abreve -60\r\nKPX V Acircumflex -60\r\nKPX V Adieresis -60\r\nKPX V Agrave -60\r\nKPX V Amacron -60\r\nKPX V Aogonek -60\r\nKPX V Aring -60\r\nKPX V Atilde -60\r\nKPX V O -30\r\nKPX V Oacute -30\r\nKPX V Ocircumflex -30\r\nKPX V Odieresis -30\r\nKPX V Ograve -30\r\nKPX V Ohungarumlaut -30\r\nKPX V Omacron -30\r\nKPX V Oslash -30\r\nKPX V Otilde -30\r\nKPX V a -111\r\nKPX V aacute -111\r\nKPX V abreve -111\r\nKPX V acircumflex -111\r\nKPX V adieresis -111\r\nKPX V agrave -111\r\nKPX V amacron -111\r\nKPX V aogonek -111\r\nKPX V aring -111\r\nKPX V atilde -111\r\nKPX V colon -65\r\nKPX V comma -129\r\nKPX V e -111\r\nKPX V eacute -111\r\nKPX V ecaron -111\r\nKPX V ecircumflex -111\r\nKPX V edieresis -71\r\nKPX V edotaccent -111\r\nKPX V egrave -71\r\nKPX V emacron -71\r\nKPX V eogonek -111\r\nKPX V hyphen -55\r\nKPX V i -74\r\nKPX V iacute -74\r\nKPX V icircumflex -34\r\nKPX V idieresis -34\r\nKPX V igrave -34\r\nKPX V imacron -34\r\nKPX V iogonek -74\r\nKPX V o -111\r\nKPX V oacute -111\r\nKPX V ocircumflex -111\r\nKPX V odieresis -111\r\nKPX V ograve -111\r\nKPX V ohungarumlaut -111\r\nKPX V omacron -111\r\nKPX V oslash -111\r\nKPX V otilde -111\r\nKPX V period -129\r\nKPX V semicolon -74\r\nKPX V u -74\r\nKPX V uacute -74\r\nKPX V ucircumflex -74\r\nKPX V udieresis -74\r\nKPX V ugrave -74\r\nKPX V uhungarumlaut -74\r\nKPX V umacron -74\r\nKPX V uogonek -74\r\nKPX V uring -74\r\nKPX W A -60\r\nKPX W Aacute -60\r\nKPX W Abreve -60\r\nKPX W Acircumflex -60\r\nKPX W Adieresis -60\r\nKPX W Agrave -60\r\nKPX W Amacron -60\r\nKPX W Aogonek -60\r\nKPX W Aring -60\r\nKPX W Atilde -60\r\nKPX W O -25\r\nKPX W Oacute -25\r\nKPX W Ocircumflex -25\r\nKPX W Odieresis -25\r\nKPX W Ograve -25\r\nKPX W Ohungarumlaut -25\r\nKPX W Omacron -25\r\nKPX W Oslash -25\r\nKPX W Otilde -25\r\nKPX W a -92\r\nKPX W aacute -92\r\nKPX W abreve -92\r\nKPX W acircumflex -92\r\nKPX W adieresis -92\r\nKPX W agrave -92\r\nKPX W amacron -92\r\nKPX W aogonek -92\r\nKPX W aring -92\r\nKPX W atilde -92\r\nKPX W colon -65\r\nKPX W comma -92\r\nKPX W e -92\r\nKPX W eacute -92\r\nKPX W ecaron -92\r\nKPX W ecircumflex -92\r\nKPX W edieresis -52\r\nKPX W edotaccent -92\r\nKPX W egrave -52\r\nKPX W emacron -52\r\nKPX W eogonek -92\r\nKPX W hyphen -37\r\nKPX W i -55\r\nKPX W iacute -55\r\nKPX W iogonek -55\r\nKPX W o -92\r\nKPX W oacute -92\r\nKPX W ocircumflex -92\r\nKPX W odieresis -92\r\nKPX W ograve -92\r\nKPX W ohungarumlaut -92\r\nKPX W omacron -92\r\nKPX W oslash -92\r\nKPX W otilde -92\r\nKPX W period -92\r\nKPX W semicolon -65\r\nKPX W u -55\r\nKPX W uacute -55\r\nKPX W ucircumflex -55\r\nKPX W udieresis -55\r\nKPX W ugrave -55\r\nKPX W uhungarumlaut -55\r\nKPX W umacron -55\r\nKPX W uogonek -55\r\nKPX W uring -55\r\nKPX W y -70\r\nKPX W yacute -70\r\nKPX W ydieresis -70\r\nKPX Y A -50\r\nKPX Y Aacute -50\r\nKPX Y Abreve -50\r\nKPX Y Acircumflex -50\r\nKPX Y Adieresis -50\r\nKPX Y Agrave -50\r\nKPX Y Amacron -50\r\nKPX Y Aogonek -50\r\nKPX Y Aring -50\r\nKPX Y Atilde -50\r\nKPX Y O -15\r\nKPX Y Oacute -15\r\nKPX Y Ocircumflex -15\r\nKPX Y Odieresis -15\r\nKPX Y Ograve -15\r\nKPX Y Ohungarumlaut -15\r\nKPX Y Omacron -15\r\nKPX Y Oslash -15\r\nKPX Y Otilde -15\r\nKPX Y a -92\r\nKPX Y aacute -92\r\nKPX Y abreve -92\r\nKPX Y acircumflex -92\r\nKPX Y adieresis -92\r\nKPX Y agrave -92\r\nKPX Y amacron -92\r\nKPX Y aogonek -92\r\nKPX Y aring -92\r\nKPX Y atilde -92\r\nKPX Y colon -65\r\nKPX Y comma -92\r\nKPX Y e -92\r\nKPX Y eacute -92\r\nKPX Y ecaron -92\r\nKPX Y ecircumflex -92\r\nKPX Y edieresis -52\r\nKPX Y edotaccent -92\r\nKPX Y egrave -52\r\nKPX Y emacron -52\r\nKPX Y eogonek -92\r\nKPX Y hyphen -74\r\nKPX Y i -74\r\nKPX Y iacute -74\r\nKPX Y icircumflex -34\r\nKPX Y idieresis -34\r\nKPX Y igrave -34\r\nKPX Y imacron -34\r\nKPX Y iogonek -74\r\nKPX Y o -92\r\nKPX Y oacute -92\r\nKPX Y ocircumflex -92\r\nKPX Y odieresis -92\r\nKPX Y ograve -92\r\nKPX Y ohungarumlaut -92\r\nKPX Y omacron -92\r\nKPX Y oslash -92\r\nKPX Y otilde -92\r\nKPX Y period -92\r\nKPX Y semicolon -65\r\nKPX Y u -92\r\nKPX Y uacute -92\r\nKPX Y ucircumflex -92\r\nKPX Y udieresis -92\r\nKPX Y ugrave -92\r\nKPX Y uhungarumlaut -92\r\nKPX Y umacron -92\r\nKPX Y uogonek -92\r\nKPX Y uring -92\r\nKPX Yacute A -50\r\nKPX Yacute Aacute -50\r\nKPX Yacute Abreve -50\r\nKPX Yacute Acircumflex -50\r\nKPX Yacute Adieresis -50\r\nKPX Yacute Agrave -50\r\nKPX Yacute Amacron -50\r\nKPX Yacute Aogonek -50\r\nKPX Yacute Aring -50\r\nKPX Yacute Atilde -50\r\nKPX Yacute O -15\r\nKPX Yacute Oacute -15\r\nKPX Yacute Ocircumflex -15\r\nKPX Yacute Odieresis -15\r\nKPX Yacute Ograve -15\r\nKPX Yacute Ohungarumlaut -15\r\nKPX Yacute Omacron -15\r\nKPX Yacute Oslash -15\r\nKPX Yacute Otilde -15\r\nKPX Yacute a -92\r\nKPX Yacute aacute -92\r\nKPX Yacute abreve -92\r\nKPX Yacute acircumflex -92\r\nKPX Yacute adieresis -92\r\nKPX Yacute agrave -92\r\nKPX Yacute amacron -92\r\nKPX Yacute aogonek -92\r\nKPX Yacute aring -92\r\nKPX Yacute atilde -92\r\nKPX Yacute colon -65\r\nKPX Yacute comma -92\r\nKPX Yacute e -92\r\nKPX Yacute eacute -92\r\nKPX Yacute ecaron -92\r\nKPX Yacute ecircumflex -92\r\nKPX Yacute edieresis -52\r\nKPX Yacute edotaccent -92\r\nKPX Yacute egrave -52\r\nKPX Yacute emacron -52\r\nKPX Yacute eogonek -92\r\nKPX Yacute hyphen -74\r\nKPX Yacute i -74\r\nKPX Yacute iacute -74\r\nKPX Yacute icircumflex -34\r\nKPX Yacute idieresis -34\r\nKPX Yacute igrave -34\r\nKPX Yacute imacron -34\r\nKPX Yacute iogonek -74\r\nKPX Yacute o -92\r\nKPX Yacute oacute -92\r\nKPX Yacute ocircumflex -92\r\nKPX Yacute odieresis -92\r\nKPX Yacute ograve -92\r\nKPX Yacute ohungarumlaut -92\r\nKPX Yacute omacron -92\r\nKPX Yacute oslash -92\r\nKPX Yacute otilde -92\r\nKPX Yacute period -92\r\nKPX Yacute semicolon -65\r\nKPX Yacute u -92\r\nKPX Yacute uacute -92\r\nKPX Yacute ucircumflex -92\r\nKPX Yacute udieresis -92\r\nKPX Yacute ugrave -92\r\nKPX Yacute uhungarumlaut -92\r\nKPX Yacute umacron -92\r\nKPX Yacute uogonek -92\r\nKPX Yacute uring -92\r\nKPX Ydieresis A -50\r\nKPX Ydieresis Aacute -50\r\nKPX Ydieresis Abreve -50\r\nKPX Ydieresis Acircumflex -50\r\nKPX Ydieresis Adieresis -50\r\nKPX Ydieresis Agrave -50\r\nKPX Ydieresis Amacron -50\r\nKPX Ydieresis Aogonek -50\r\nKPX Ydieresis Aring -50\r\nKPX Ydieresis Atilde -50\r\nKPX Ydieresis O -15\r\nKPX Ydieresis Oacute -15\r\nKPX Ydieresis Ocircumflex -15\r\nKPX Ydieresis Odieresis -15\r\nKPX Ydieresis Ograve -15\r\nKPX Ydieresis Ohungarumlaut -15\r\nKPX Ydieresis Omacron -15\r\nKPX Ydieresis Oslash -15\r\nKPX Ydieresis Otilde -15\r\nKPX Ydieresis a -92\r\nKPX Ydieresis aacute -92\r\nKPX Ydieresis abreve -92\r\nKPX Ydieresis acircumflex -92\r\nKPX Ydieresis adieresis -92\r\nKPX Ydieresis agrave -92\r\nKPX Ydieresis amacron -92\r\nKPX Ydieresis aogonek -92\r\nKPX Ydieresis aring -92\r\nKPX Ydieresis atilde -92\r\nKPX Ydieresis colon -65\r\nKPX Ydieresis comma -92\r\nKPX Ydieresis e -92\r\nKPX Ydieresis eacute -92\r\nKPX Ydieresis ecaron -92\r\nKPX Ydieresis ecircumflex -92\r\nKPX Ydieresis edieresis -52\r\nKPX Ydieresis edotaccent -92\r\nKPX Ydieresis egrave -52\r\nKPX Ydieresis emacron -52\r\nKPX Ydieresis eogonek -92\r\nKPX Ydieresis hyphen -74\r\nKPX Ydieresis i -74\r\nKPX Ydieresis iacute -74\r\nKPX Ydieresis icircumflex -34\r\nKPX Ydieresis idieresis -34\r\nKPX Ydieresis igrave -34\r\nKPX Ydieresis imacron -34\r\nKPX Ydieresis iogonek -74\r\nKPX Ydieresis o -92\r\nKPX Ydieresis oacute -92\r\nKPX Ydieresis ocircumflex -92\r\nKPX Ydieresis odieresis -92\r\nKPX Ydieresis ograve -92\r\nKPX Ydieresis ohungarumlaut -92\r\nKPX Ydieresis omacron -92\r\nKPX Ydieresis oslash -92\r\nKPX Ydieresis otilde -92\r\nKPX Ydieresis period -92\r\nKPX Ydieresis semicolon -65\r\nKPX Ydieresis u -92\r\nKPX Ydieresis uacute -92\r\nKPX Ydieresis ucircumflex -92\r\nKPX Ydieresis udieresis -92\r\nKPX Ydieresis ugrave -92\r\nKPX Ydieresis uhungarumlaut -92\r\nKPX Ydieresis umacron -92\r\nKPX Ydieresis uogonek -92\r\nKPX Ydieresis uring -92\r\nKPX a g -10\r\nKPX a gbreve -10\r\nKPX a gcommaaccent -10\r\nKPX aacute g -10\r\nKPX aacute gbreve -10\r\nKPX aacute gcommaaccent -10\r\nKPX abreve g -10\r\nKPX abreve gbreve -10\r\nKPX abreve gcommaaccent -10\r\nKPX acircumflex g -10\r\nKPX acircumflex gbreve -10\r\nKPX acircumflex gcommaaccent -10\r\nKPX adieresis g -10\r\nKPX adieresis gbreve -10\r\nKPX adieresis gcommaaccent -10\r\nKPX agrave g -10\r\nKPX agrave gbreve -10\r\nKPX agrave gcommaaccent -10\r\nKPX amacron g -10\r\nKPX amacron gbreve -10\r\nKPX amacron gcommaaccent -10\r\nKPX aogonek g -10\r\nKPX aogonek gbreve -10\r\nKPX aogonek gcommaaccent -10\r\nKPX aring g -10\r\nKPX aring gbreve -10\r\nKPX aring gcommaaccent -10\r\nKPX atilde g -10\r\nKPX atilde gbreve -10\r\nKPX atilde gcommaaccent -10\r\nKPX b period -40\r\nKPX b u -20\r\nKPX b uacute -20\r\nKPX b ucircumflex -20\r\nKPX b udieresis -20\r\nKPX b ugrave -20\r\nKPX b uhungarumlaut -20\r\nKPX b umacron -20\r\nKPX b uogonek -20\r\nKPX b uring -20\r\nKPX c h -15\r\nKPX c k -20\r\nKPX c kcommaaccent -20\r\nKPX cacute h -15\r\nKPX cacute k -20\r\nKPX cacute kcommaaccent -20\r\nKPX ccaron h -15\r\nKPX ccaron k -20\r\nKPX ccaron kcommaaccent -20\r\nKPX ccedilla h -15\r\nKPX ccedilla k -20\r\nKPX ccedilla kcommaaccent -20\r\nKPX comma quotedblright -140\r\nKPX comma quoteright -140\r\nKPX e comma -10\r\nKPX e g -40\r\nKPX e gbreve -40\r\nKPX e gcommaaccent -40\r\nKPX e period -15\r\nKPX e v -15\r\nKPX e w -15\r\nKPX e x -20\r\nKPX e y -30\r\nKPX e yacute -30\r\nKPX e ydieresis -30\r\nKPX eacute comma -10\r\nKPX eacute g -40\r\nKPX eacute gbreve -40\r\nKPX eacute gcommaaccent -40\r\nKPX eacute period -15\r\nKPX eacute v -15\r\nKPX eacute w -15\r\nKPX eacute x -20\r\nKPX eacute y -30\r\nKPX eacute yacute -30\r\nKPX eacute ydieresis -30\r\nKPX ecaron comma -10\r\nKPX ecaron g -40\r\nKPX ecaron gbreve -40\r\nKPX ecaron gcommaaccent -40\r\nKPX ecaron period -15\r\nKPX ecaron v -15\r\nKPX ecaron w -15\r\nKPX ecaron x -20\r\nKPX ecaron y -30\r\nKPX ecaron yacute -30\r\nKPX ecaron ydieresis -30\r\nKPX ecircumflex comma -10\r\nKPX ecircumflex g -40\r\nKPX ecircumflex gbreve -40\r\nKPX ecircumflex gcommaaccent -40\r\nKPX ecircumflex period -15\r\nKPX ecircumflex v -15\r\nKPX ecircumflex w -15\r\nKPX ecircumflex x -20\r\nKPX ecircumflex y -30\r\nKPX ecircumflex yacute -30\r\nKPX ecircumflex ydieresis -30\r\nKPX edieresis comma -10\r\nKPX edieresis g -40\r\nKPX edieresis gbreve -40\r\nKPX edieresis gcommaaccent -40\r\nKPX edieresis period -15\r\nKPX edieresis v -15\r\nKPX edieresis w -15\r\nKPX edieresis x -20\r\nKPX edieresis y -30\r\nKPX edieresis yacute -30\r\nKPX edieresis ydieresis -30\r\nKPX edotaccent comma -10\r\nKPX edotaccent g -40\r\nKPX edotaccent gbreve -40\r\nKPX edotaccent gcommaaccent -40\r\nKPX edotaccent period -15\r\nKPX edotaccent v -15\r\nKPX edotaccent w -15\r\nKPX edotaccent x -20\r\nKPX edotaccent y -30\r\nKPX edotaccent yacute -30\r\nKPX edotaccent ydieresis -30\r\nKPX egrave comma -10\r\nKPX egrave g -40\r\nKPX egrave gbreve -40\r\nKPX egrave gcommaaccent -40\r\nKPX egrave period -15\r\nKPX egrave v -15\r\nKPX egrave w -15\r\nKPX egrave x -20\r\nKPX egrave y -30\r\nKPX egrave yacute -30\r\nKPX egrave ydieresis -30\r\nKPX emacron comma -10\r\nKPX emacron g -40\r\nKPX emacron gbreve -40\r\nKPX emacron gcommaaccent -40\r\nKPX emacron period -15\r\nKPX emacron v -15\r\nKPX emacron w -15\r\nKPX emacron x -20\r\nKPX emacron y -30\r\nKPX emacron yacute -30\r\nKPX emacron ydieresis -30\r\nKPX eogonek comma -10\r\nKPX eogonek g -40\r\nKPX eogonek gbreve -40\r\nKPX eogonek gcommaaccent -40\r\nKPX eogonek period -15\r\nKPX eogonek v -15\r\nKPX eogonek w -15\r\nKPX eogonek x -20\r\nKPX eogonek y -30\r\nKPX eogonek yacute -30\r\nKPX eogonek ydieresis -30\r\nKPX f comma -10\r\nKPX f dotlessi -60\r\nKPX f f -18\r\nKPX f i -20\r\nKPX f iogonek -20\r\nKPX f period -15\r\nKPX f quoteright 92\r\nKPX g comma -10\r\nKPX g e -10\r\nKPX g eacute -10\r\nKPX g ecaron -10\r\nKPX g ecircumflex -10\r\nKPX g edieresis -10\r\nKPX g edotaccent -10\r\nKPX g egrave -10\r\nKPX g emacron -10\r\nKPX g eogonek -10\r\nKPX g g -10\r\nKPX g gbreve -10\r\nKPX g gcommaaccent -10\r\nKPX g period -15\r\nKPX gbreve comma -10\r\nKPX gbreve e -10\r\nKPX gbreve eacute -10\r\nKPX gbreve ecaron -10\r\nKPX gbreve ecircumflex -10\r\nKPX gbreve edieresis -10\r\nKPX gbreve edotaccent -10\r\nKPX gbreve egrave -10\r\nKPX gbreve emacron -10\r\nKPX gbreve eogonek -10\r\nKPX gbreve g -10\r\nKPX gbreve gbreve -10\r\nKPX gbreve gcommaaccent -10\r\nKPX gbreve period -15\r\nKPX gcommaaccent comma -10\r\nKPX gcommaaccent e -10\r\nKPX gcommaaccent eacute -10\r\nKPX gcommaaccent ecaron -10\r\nKPX gcommaaccent ecircumflex -10\r\nKPX gcommaaccent edieresis -10\r\nKPX gcommaaccent edotaccent -10\r\nKPX gcommaaccent egrave -10\r\nKPX gcommaaccent emacron -10\r\nKPX gcommaaccent eogonek -10\r\nKPX gcommaaccent g -10\r\nKPX gcommaaccent gbreve -10\r\nKPX gcommaaccent gcommaaccent -10\r\nKPX gcommaaccent period -15\r\nKPX k e -10\r\nKPX k eacute -10\r\nKPX k ecaron -10\r\nKPX k ecircumflex -10\r\nKPX k edieresis -10\r\nKPX k edotaccent -10\r\nKPX k egrave -10\r\nKPX k emacron -10\r\nKPX k eogonek -10\r\nKPX k o -10\r\nKPX k oacute -10\r\nKPX k ocircumflex -10\r\nKPX k odieresis -10\r\nKPX k ograve -10\r\nKPX k ohungarumlaut -10\r\nKPX k omacron -10\r\nKPX k oslash -10\r\nKPX k otilde -10\r\nKPX k y -10\r\nKPX k yacute -10\r\nKPX k ydieresis -10\r\nKPX kcommaaccent e -10\r\nKPX kcommaaccent eacute -10\r\nKPX kcommaaccent ecaron -10\r\nKPX kcommaaccent ecircumflex -10\r\nKPX kcommaaccent edieresis -10\r\nKPX kcommaaccent edotaccent -10\r\nKPX kcommaaccent egrave -10\r\nKPX kcommaaccent emacron -10\r\nKPX kcommaaccent eogonek -10\r\nKPX kcommaaccent o -10\r\nKPX kcommaaccent oacute -10\r\nKPX kcommaaccent ocircumflex -10\r\nKPX kcommaaccent odieresis -10\r\nKPX kcommaaccent ograve -10\r\nKPX kcommaaccent ohungarumlaut -10\r\nKPX kcommaaccent omacron -10\r\nKPX kcommaaccent oslash -10\r\nKPX kcommaaccent otilde -10\r\nKPX kcommaaccent y -10\r\nKPX kcommaaccent yacute -10\r\nKPX kcommaaccent ydieresis -10\r\nKPX n v -40\r\nKPX nacute v -40\r\nKPX ncaron v -40\r\nKPX ncommaaccent v -40\r\nKPX ntilde v -40\r\nKPX o g -10\r\nKPX o gbreve -10\r\nKPX o gcommaaccent -10\r\nKPX o v -10\r\nKPX oacute g -10\r\nKPX oacute gbreve -10\r\nKPX oacute gcommaaccent -10\r\nKPX oacute v -10\r\nKPX ocircumflex g -10\r\nKPX ocircumflex gbreve -10\r\nKPX ocircumflex gcommaaccent -10\r\nKPX ocircumflex v -10\r\nKPX odieresis g -10\r\nKPX odieresis gbreve -10\r\nKPX odieresis gcommaaccent -10\r\nKPX odieresis v -10\r\nKPX ograve g -10\r\nKPX ograve gbreve -10\r\nKPX ograve gcommaaccent -10\r\nKPX ograve v -10\r\nKPX ohungarumlaut g -10\r\nKPX ohungarumlaut gbreve -10\r\nKPX ohungarumlaut gcommaaccent -10\r\nKPX ohungarumlaut v -10\r\nKPX omacron g -10\r\nKPX omacron gbreve -10\r\nKPX omacron gcommaaccent -10\r\nKPX omacron v -10\r\nKPX oslash g -10\r\nKPX oslash gbreve -10\r\nKPX oslash gcommaaccent -10\r\nKPX oslash v -10\r\nKPX otilde g -10\r\nKPX otilde gbreve -10\r\nKPX otilde gcommaaccent -10\r\nKPX otilde v -10\r\nKPX period quotedblright -140\r\nKPX period quoteright -140\r\nKPX quoteleft quoteleft -111\r\nKPX quoteright d -25\r\nKPX quoteright dcroat -25\r\nKPX quoteright quoteright -111\r\nKPX quoteright r -25\r\nKPX quoteright racute -25\r\nKPX quoteright rcaron -25\r\nKPX quoteright rcommaaccent -25\r\nKPX quoteright s -40\r\nKPX quoteright sacute -40\r\nKPX quoteright scaron -40\r\nKPX quoteright scedilla -40\r\nKPX quoteright scommaaccent -40\r\nKPX quoteright space -111\r\nKPX quoteright t -30\r\nKPX quoteright tcommaaccent -30\r\nKPX quoteright v -10\r\nKPX r a -15\r\nKPX r aacute -15\r\nKPX r abreve -15\r\nKPX r acircumflex -15\r\nKPX r adieresis -15\r\nKPX r agrave -15\r\nKPX r amacron -15\r\nKPX r aogonek -15\r\nKPX r aring -15\r\nKPX r atilde -15\r\nKPX r c -37\r\nKPX r cacute -37\r\nKPX r ccaron -37\r\nKPX r ccedilla -37\r\nKPX r comma -111\r\nKPX r d -37\r\nKPX r dcroat -37\r\nKPX r e -37\r\nKPX r eacute -37\r\nKPX r ecaron -37\r\nKPX r ecircumflex -37\r\nKPX r edieresis -37\r\nKPX r edotaccent -37\r\nKPX r egrave -37\r\nKPX r emacron -37\r\nKPX r eogonek -37\r\nKPX r g -37\r\nKPX r gbreve -37\r\nKPX r gcommaaccent -37\r\nKPX r hyphen -20\r\nKPX r o -45\r\nKPX r oacute -45\r\nKPX r ocircumflex -45\r\nKPX r odieresis -45\r\nKPX r ograve -45\r\nKPX r ohungarumlaut -45\r\nKPX r omacron -45\r\nKPX r oslash -45\r\nKPX r otilde -45\r\nKPX r period -111\r\nKPX r q -37\r\nKPX r s -10\r\nKPX r sacute -10\r\nKPX r scaron -10\r\nKPX r scedilla -10\r\nKPX r scommaaccent -10\r\nKPX racute a -15\r\nKPX racute aacute -15\r\nKPX racute abreve -15\r\nKPX racute acircumflex -15\r\nKPX racute adieresis -15\r\nKPX racute agrave -15\r\nKPX racute amacron -15\r\nKPX racute aogonek -15\r\nKPX racute aring -15\r\nKPX racute atilde -15\r\nKPX racute c -37\r\nKPX racute cacute -37\r\nKPX racute ccaron -37\r\nKPX racute ccedilla -37\r\nKPX racute comma -111\r\nKPX racute d -37\r\nKPX racute dcroat -37\r\nKPX racute e -37\r\nKPX racute eacute -37\r\nKPX racute ecaron -37\r\nKPX racute ecircumflex -37\r\nKPX racute edieresis -37\r\nKPX racute edotaccent -37\r\nKPX racute egrave -37\r\nKPX racute emacron -37\r\nKPX racute eogonek -37\r\nKPX racute g -37\r\nKPX racute gbreve -37\r\nKPX racute gcommaaccent -37\r\nKPX racute hyphen -20\r\nKPX racute o -45\r\nKPX racute oacute -45\r\nKPX racute ocircumflex -45\r\nKPX racute odieresis -45\r\nKPX racute ograve -45\r\nKPX racute ohungarumlaut -45\r\nKPX racute omacron -45\r\nKPX racute oslash -45\r\nKPX racute otilde -45\r\nKPX racute period -111\r\nKPX racute q -37\r\nKPX racute s -10\r\nKPX racute sacute -10\r\nKPX racute scaron -10\r\nKPX racute scedilla -10\r\nKPX racute scommaaccent -10\r\nKPX rcaron a -15\r\nKPX rcaron aacute -15\r\nKPX rcaron abreve -15\r\nKPX rcaron acircumflex -15\r\nKPX rcaron adieresis -15\r\nKPX rcaron agrave -15\r\nKPX rcaron amacron -15\r\nKPX rcaron aogonek -15\r\nKPX rcaron aring -15\r\nKPX rcaron atilde -15\r\nKPX rcaron c -37\r\nKPX rcaron cacute -37\r\nKPX rcaron ccaron -37\r\nKPX rcaron ccedilla -37\r\nKPX rcaron comma -111\r\nKPX rcaron d -37\r\nKPX rcaron dcroat -37\r\nKPX rcaron e -37\r\nKPX rcaron eacute -37\r\nKPX rcaron ecaron -37\r\nKPX rcaron ecircumflex -37\r\nKPX rcaron edieresis -37\r\nKPX rcaron edotaccent -37\r\nKPX rcaron egrave -37\r\nKPX rcaron emacron -37\r\nKPX rcaron eogonek -37\r\nKPX rcaron g -37\r\nKPX rcaron gbreve -37\r\nKPX rcaron gcommaaccent -37\r\nKPX rcaron hyphen -20\r\nKPX rcaron o -45\r\nKPX rcaron oacute -45\r\nKPX rcaron ocircumflex -45\r\nKPX rcaron odieresis -45\r\nKPX rcaron ograve -45\r\nKPX rcaron ohungarumlaut -45\r\nKPX rcaron omacron -45\r\nKPX rcaron oslash -45\r\nKPX rcaron otilde -45\r\nKPX rcaron period -111\r\nKPX rcaron q -37\r\nKPX rcaron s -10\r\nKPX rcaron sacute -10\r\nKPX rcaron scaron -10\r\nKPX rcaron scedilla -10\r\nKPX rcaron scommaaccent -10\r\nKPX rcommaaccent a -15\r\nKPX rcommaaccent aacute -15\r\nKPX rcommaaccent abreve -15\r\nKPX rcommaaccent acircumflex -15\r\nKPX rcommaaccent adieresis -15\r\nKPX rcommaaccent agrave -15\r\nKPX rcommaaccent amacron -15\r\nKPX rcommaaccent aogonek -15\r\nKPX rcommaaccent aring -15\r\nKPX rcommaaccent atilde -15\r\nKPX rcommaaccent c -37\r\nKPX rcommaaccent cacute -37\r\nKPX rcommaaccent ccaron -37\r\nKPX rcommaaccent ccedilla -37\r\nKPX rcommaaccent comma -111\r\nKPX rcommaaccent d -37\r\nKPX rcommaaccent dcroat -37\r\nKPX rcommaaccent e -37\r\nKPX rcommaaccent eacute -37\r\nKPX rcommaaccent ecaron -37\r\nKPX rcommaaccent ecircumflex -37\r\nKPX rcommaaccent edieresis -37\r\nKPX rcommaaccent edotaccent -37\r\nKPX rcommaaccent egrave -37\r\nKPX rcommaaccent emacron -37\r\nKPX rcommaaccent eogonek -37\r\nKPX rcommaaccent g -37\r\nKPX rcommaaccent gbreve -37\r\nKPX rcommaaccent gcommaaccent -37\r\nKPX rcommaaccent hyphen -20\r\nKPX rcommaaccent o -45\r\nKPX rcommaaccent oacute -45\r\nKPX rcommaaccent ocircumflex -45\r\nKPX rcommaaccent odieresis -45\r\nKPX rcommaaccent ograve -45\r\nKPX rcommaaccent ohungarumlaut -45\r\nKPX rcommaaccent omacron -45\r\nKPX rcommaaccent oslash -45\r\nKPX rcommaaccent otilde -45\r\nKPX rcommaaccent period -111\r\nKPX rcommaaccent q -37\r\nKPX rcommaaccent s -10\r\nKPX rcommaaccent sacute -10\r\nKPX rcommaaccent scaron -10\r\nKPX rcommaaccent scedilla -10\r\nKPX rcommaaccent scommaaccent -10\r\nKPX space A -18\r\nKPX space Aacute -18\r\nKPX space Abreve -18\r\nKPX space Acircumflex -18\r\nKPX space Adieresis -18\r\nKPX space Agrave -18\r\nKPX space Amacron -18\r\nKPX space Aogonek -18\r\nKPX space Aring -18\r\nKPX space Atilde -18\r\nKPX space T -18\r\nKPX space Tcaron -18\r\nKPX space Tcommaaccent -18\r\nKPX space V -35\r\nKPX space W -40\r\nKPX space Y -75\r\nKPX space Yacute -75\r\nKPX space Ydieresis -75\r\nKPX v comma -74\r\nKPX v period -74\r\nKPX w comma -74\r\nKPX w period -74\r\nKPX y comma -55\r\nKPX y period -55\r\nKPX yacute comma -55\r\nKPX yacute period -55\r\nKPX ydieresis comma -55\r\nKPX ydieresis period -55\r\nEndKernPairs\r\nEndKernData\r\nEndFontMetrics\r\n";
2502 },
2503 'Times-BoldItalic'() {
2504 return "StartFontMetrics 4.1\r\nComment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 13:04:06 1997\r\nComment UniqueID 43066\r\nComment VMusage 45874 56899\r\nFontName Times-BoldItalic\r\nFullName Times Bold Italic\r\nFamilyName Times\r\nWeight Bold\r\nItalicAngle -15\r\nIsFixedPitch false\r\nCharacterSet ExtendedRoman\r\nFontBBox -200 -218 996 921 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 002.000\r\nNotice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 669\r\nXHeight 462\r\nAscender 683\r\nDescender -217\r\nStdHW 42\r\nStdVW 121\r\nStartCharMetrics 315\r\nC 32 ; WX 250 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 389 ; N exclam ; B 67 -13 370 684 ;\r\nC 34 ; WX 555 ; N quotedbl ; B 136 398 536 685 ;\r\nC 35 ; WX 500 ; N numbersign ; B -33 0 533 700 ;\r\nC 36 ; WX 500 ; N dollar ; B -20 -100 497 733 ;\r\nC 37 ; WX 833 ; N percent ; B 39 -10 793 692 ;\r\nC 38 ; WX 778 ; N ampersand ; B 5 -19 699 682 ;\r\nC 39 ; WX 333 ; N quoteright ; B 98 369 302 685 ;\r\nC 40 ; WX 333 ; N parenleft ; B 28 -179 344 685 ;\r\nC 41 ; WX 333 ; N parenright ; B -44 -179 271 685 ;\r\nC 42 ; WX 500 ; N asterisk ; B 65 249 456 685 ;\r\nC 43 ; WX 570 ; N plus ; B 33 0 537 506 ;\r\nC 44 ; WX 250 ; N comma ; B -60 -182 144 134 ;\r\nC 45 ; WX 333 ; N hyphen ; B 2 166 271 282 ;\r\nC 46 ; WX 250 ; N period ; B -9 -13 139 135 ;\r\nC 47 ; WX 278 ; N slash ; B -64 -18 342 685 ;\r\nC 48 ; WX 500 ; N zero ; B 17 -14 477 683 ;\r\nC 49 ; WX 500 ; N one ; B 5 0 419 683 ;\r\nC 50 ; WX 500 ; N two ; B -27 0 446 683 ;\r\nC 51 ; WX 500 ; N three ; B -15 -13 450 683 ;\r\nC 52 ; WX 500 ; N four ; B -15 0 503 683 ;\r\nC 53 ; WX 500 ; N five ; B -11 -13 487 669 ;\r\nC 54 ; WX 500 ; N six ; B 23 -15 509 679 ;\r\nC 55 ; WX 500 ; N seven ; B 52 0 525 669 ;\r\nC 56 ; WX 500 ; N eight ; B 3 -13 476 683 ;\r\nC 57 ; WX 500 ; N nine ; B -12 -10 475 683 ;\r\nC 58 ; WX 333 ; N colon ; B 23 -13 264 459 ;\r\nC 59 ; WX 333 ; N semicolon ; B -25 -183 264 459 ;\r\nC 60 ; WX 570 ; N less ; B 31 -8 539 514 ;\r\nC 61 ; WX 570 ; N equal ; B 33 107 537 399 ;\r\nC 62 ; WX 570 ; N greater ; B 31 -8 539 514 ;\r\nC 63 ; WX 500 ; N question ; B 79 -13 470 684 ;\r\nC 64 ; WX 832 ; N at ; B 63 -18 770 685 ;\r\nC 65 ; WX 667 ; N A ; B -67 0 593 683 ;\r\nC 66 ; WX 667 ; N B ; B -24 0 624 669 ;\r\nC 67 ; WX 667 ; N C ; B 32 -18 677 685 ;\r\nC 68 ; WX 722 ; N D ; B -46 0 685 669 ;\r\nC 69 ; WX 667 ; N E ; B -27 0 653 669 ;\r\nC 70 ; WX 667 ; N F ; B -13 0 660 669 ;\r\nC 71 ; WX 722 ; N G ; B 21 -18 706 685 ;\r\nC 72 ; WX 778 ; N H ; B -24 0 799 669 ;\r\nC 73 ; WX 389 ; N I ; B -32 0 406 669 ;\r\nC 74 ; WX 500 ; N J ; B -46 -99 524 669 ;\r\nC 75 ; WX 667 ; N K ; B -21 0 702 669 ;\r\nC 76 ; WX 611 ; N L ; B -22 0 590 669 ;\r\nC 77 ; WX 889 ; N M ; B -29 -12 917 669 ;\r\nC 78 ; WX 722 ; N N ; B -27 -15 748 669 ;\r\nC 79 ; WX 722 ; N O ; B 27 -18 691 685 ;\r\nC 80 ; WX 611 ; N P ; B -27 0 613 669 ;\r\nC 81 ; WX 722 ; N Q ; B 27 -208 691 685 ;\r\nC 82 ; WX 667 ; N R ; B -29 0 623 669 ;\r\nC 83 ; WX 556 ; N S ; B 2 -18 526 685 ;\r\nC 84 ; WX 611 ; N T ; B 50 0 650 669 ;\r\nC 85 ; WX 722 ; N U ; B 67 -18 744 669 ;\r\nC 86 ; WX 667 ; N V ; B 65 -18 715 669 ;\r\nC 87 ; WX 889 ; N W ; B 65 -18 940 669 ;\r\nC 88 ; WX 667 ; N X ; B -24 0 694 669 ;\r\nC 89 ; WX 611 ; N Y ; B 73 0 659 669 ;\r\nC 90 ; WX 611 ; N Z ; B -11 0 590 669 ;\r\nC 91 ; WX 333 ; N bracketleft ; B -37 -159 362 674 ;\r\nC 92 ; WX 278 ; N backslash ; B -1 -18 279 685 ;\r\nC 93 ; WX 333 ; N bracketright ; B -56 -157 343 674 ;\r\nC 94 ; WX 570 ; N asciicircum ; B 67 304 503 669 ;\r\nC 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;\r\nC 96 ; WX 333 ; N quoteleft ; B 128 369 332 685 ;\r\nC 97 ; WX 500 ; N a ; B -21 -14 455 462 ;\r\nC 98 ; WX 500 ; N b ; B -14 -13 444 699 ;\r\nC 99 ; WX 444 ; N c ; B -5 -13 392 462 ;\r\nC 100 ; WX 500 ; N d ; B -21 -13 517 699 ;\r\nC 101 ; WX 444 ; N e ; B 5 -13 398 462 ;\r\nC 102 ; WX 333 ; N f ; B -169 -205 446 698 ; L i fi ; L l fl ;\r\nC 103 ; WX 500 ; N g ; B -52 -203 478 462 ;\r\nC 104 ; WX 556 ; N h ; B -13 -9 498 699 ;\r\nC 105 ; WX 278 ; N i ; B 2 -9 263 684 ;\r\nC 106 ; WX 278 ; N j ; B -189 -207 279 684 ;\r\nC 107 ; WX 500 ; N k ; B -23 -8 483 699 ;\r\nC 108 ; WX 278 ; N l ; B 2 -9 290 699 ;\r\nC 109 ; WX 778 ; N m ; B -14 -9 722 462 ;\r\nC 110 ; WX 556 ; N n ; B -6 -9 493 462 ;\r\nC 111 ; WX 500 ; N o ; B -3 -13 441 462 ;\r\nC 112 ; WX 500 ; N p ; B -120 -205 446 462 ;\r\nC 113 ; WX 500 ; N q ; B 1 -205 471 462 ;\r\nC 114 ; WX 389 ; N r ; B -21 0 389 462 ;\r\nC 115 ; WX 389 ; N s ; B -19 -13 333 462 ;\r\nC 116 ; WX 278 ; N t ; B -11 -9 281 594 ;\r\nC 117 ; WX 556 ; N u ; B 15 -9 492 462 ;\r\nC 118 ; WX 444 ; N v ; B 16 -13 401 462 ;\r\nC 119 ; WX 667 ; N w ; B 16 -13 614 462 ;\r\nC 120 ; WX 500 ; N x ; B -46 -13 469 462 ;\r\nC 121 ; WX 444 ; N y ; B -94 -205 392 462 ;\r\nC 122 ; WX 389 ; N z ; B -43 -78 368 449 ;\r\nC 123 ; WX 348 ; N braceleft ; B 5 -187 436 686 ;\r\nC 124 ; WX 220 ; N bar ; B 66 -218 154 782 ;\r\nC 125 ; WX 348 ; N braceright ; B -129 -187 302 686 ;\r\nC 126 ; WX 570 ; N asciitilde ; B 54 173 516 333 ;\r\nC 161 ; WX 389 ; N exclamdown ; B 19 -205 322 492 ;\r\nC 162 ; WX 500 ; N cent ; B 42 -143 439 576 ;\r\nC 163 ; WX 500 ; N sterling ; B -32 -12 510 683 ;\r\nC 164 ; WX 167 ; N fraction ; B -169 -14 324 683 ;\r\nC 165 ; WX 500 ; N yen ; B 33 0 628 669 ;\r\nC 166 ; WX 500 ; N florin ; B -87 -156 537 707 ;\r\nC 167 ; WX 500 ; N section ; B 36 -143 459 685 ;\r\nC 168 ; WX 500 ; N currency ; B -26 34 526 586 ;\r\nC 169 ; WX 278 ; N quotesingle ; B 128 398 268 685 ;\r\nC 170 ; WX 500 ; N quotedblleft ; B 53 369 513 685 ;\r\nC 171 ; WX 500 ; N guillemotleft ; B 12 32 468 415 ;\r\nC 172 ; WX 333 ; N guilsinglleft ; B 32 32 303 415 ;\r\nC 173 ; WX 333 ; N guilsinglright ; B 10 32 281 415 ;\r\nC 174 ; WX 556 ; N fi ; B -188 -205 514 703 ;\r\nC 175 ; WX 556 ; N fl ; B -186 -205 553 704 ;\r\nC 177 ; WX 500 ; N endash ; B -40 178 477 269 ;\r\nC 178 ; WX 500 ; N dagger ; B 91 -145 494 685 ;\r\nC 179 ; WX 500 ; N daggerdbl ; B 10 -139 493 685 ;\r\nC 180 ; WX 250 ; N periodcentered ; B 51 257 199 405 ;\r\nC 182 ; WX 500 ; N paragraph ; B -57 -193 562 669 ;\r\nC 183 ; WX 350 ; N bullet ; B 0 175 350 525 ;\r\nC 184 ; WX 333 ; N quotesinglbase ; B -5 -182 199 134 ;\r\nC 185 ; WX 500 ; N quotedblbase ; B -57 -182 403 134 ;\r\nC 186 ; WX 500 ; N quotedblright ; B 53 369 513 685 ;\r\nC 187 ; WX 500 ; N guillemotright ; B 12 32 468 415 ;\r\nC 188 ; WX 1000 ; N ellipsis ; B 40 -13 852 135 ;\r\nC 189 ; WX 1000 ; N perthousand ; B 7 -29 996 706 ;\r\nC 191 ; WX 500 ; N questiondown ; B 30 -205 421 492 ;\r\nC 193 ; WX 333 ; N grave ; B 85 516 297 697 ;\r\nC 194 ; WX 333 ; N acute ; B 139 516 379 697 ;\r\nC 195 ; WX 333 ; N circumflex ; B 40 516 367 690 ;\r\nC 196 ; WX 333 ; N tilde ; B 48 536 407 655 ;\r\nC 197 ; WX 333 ; N macron ; B 51 553 393 623 ;\r\nC 198 ; WX 333 ; N breve ; B 71 516 387 678 ;\r\nC 199 ; WX 333 ; N dotaccent ; B 163 550 298 684 ;\r\nC 200 ; WX 333 ; N dieresis ; B 55 550 402 684 ;\r\nC 202 ; WX 333 ; N ring ; B 127 516 340 729 ;\r\nC 203 ; WX 333 ; N cedilla ; B -80 -218 156 5 ;\r\nC 205 ; WX 333 ; N hungarumlaut ; B 69 516 498 697 ;\r\nC 206 ; WX 333 ; N ogonek ; B 15 -183 244 34 ;\r\nC 207 ; WX 333 ; N caron ; B 79 516 411 690 ;\r\nC 208 ; WX 1000 ; N emdash ; B -40 178 977 269 ;\r\nC 225 ; WX 944 ; N AE ; B -64 0 918 669 ;\r\nC 227 ; WX 266 ; N ordfeminine ; B 16 399 330 685 ;\r\nC 232 ; WX 611 ; N Lslash ; B -22 0 590 669 ;\r\nC 233 ; WX 722 ; N Oslash ; B 27 -125 691 764 ;\r\nC 234 ; WX 944 ; N OE ; B 23 -8 946 677 ;\r\nC 235 ; WX 300 ; N ordmasculine ; B 56 400 347 685 ;\r\nC 241 ; WX 722 ; N ae ; B -5 -13 673 462 ;\r\nC 245 ; WX 278 ; N dotlessi ; B 2 -9 238 462 ;\r\nC 248 ; WX 278 ; N lslash ; B -7 -9 307 699 ;\r\nC 249 ; WX 500 ; N oslash ; B -3 -119 441 560 ;\r\nC 250 ; WX 722 ; N oe ; B 6 -13 674 462 ;\r\nC 251 ; WX 500 ; N germandbls ; B -200 -200 473 705 ;\r\nC -1 ; WX 389 ; N Idieresis ; B -32 0 450 862 ;\r\nC -1 ; WX 444 ; N eacute ; B 5 -13 435 697 ;\r\nC -1 ; WX 500 ; N abreve ; B -21 -14 471 678 ;\r\nC -1 ; WX 556 ; N uhungarumlaut ; B 15 -9 610 697 ;\r\nC -1 ; WX 444 ; N ecaron ; B 5 -13 467 690 ;\r\nC -1 ; WX 611 ; N Ydieresis ; B 73 0 659 862 ;\r\nC -1 ; WX 570 ; N divide ; B 33 -29 537 535 ;\r\nC -1 ; WX 611 ; N Yacute ; B 73 0 659 904 ;\r\nC -1 ; WX 667 ; N Acircumflex ; B -67 0 593 897 ;\r\nC -1 ; WX 500 ; N aacute ; B -21 -14 463 697 ;\r\nC -1 ; WX 722 ; N Ucircumflex ; B 67 -18 744 897 ;\r\nC -1 ; WX 444 ; N yacute ; B -94 -205 435 697 ;\r\nC -1 ; WX 389 ; N scommaaccent ; B -19 -218 333 462 ;\r\nC -1 ; WX 444 ; N ecircumflex ; B 5 -13 423 690 ;\r\nC -1 ; WX 722 ; N Uring ; B 67 -18 744 921 ;\r\nC -1 ; WX 722 ; N Udieresis ; B 67 -18 744 862 ;\r\nC -1 ; WX 500 ; N aogonek ; B -21 -183 455 462 ;\r\nC -1 ; WX 722 ; N Uacute ; B 67 -18 744 904 ;\r\nC -1 ; WX 556 ; N uogonek ; B 15 -183 492 462 ;\r\nC -1 ; WX 667 ; N Edieresis ; B -27 0 653 862 ;\r\nC -1 ; WX 722 ; N Dcroat ; B -31 0 700 669 ;\r\nC -1 ; WX 250 ; N commaaccent ; B -36 -218 131 -50 ;\r\nC -1 ; WX 747 ; N copyright ; B 30 -18 718 685 ;\r\nC -1 ; WX 667 ; N Emacron ; B -27 0 653 830 ;\r\nC -1 ; WX 444 ; N ccaron ; B -5 -13 467 690 ;\r\nC -1 ; WX 500 ; N aring ; B -21 -14 455 729 ;\r\nC -1 ; WX 722 ; N Ncommaaccent ; B -27 -218 748 669 ;\r\nC -1 ; WX 278 ; N lacute ; B 2 -9 392 904 ;\r\nC -1 ; WX 500 ; N agrave ; B -21 -14 455 697 ;\r\nC -1 ; WX 611 ; N Tcommaaccent ; B 50 -218 650 669 ;\r\nC -1 ; WX 667 ; N Cacute ; B 32 -18 677 904 ;\r\nC -1 ; WX 500 ; N atilde ; B -21 -14 491 655 ;\r\nC -1 ; WX 667 ; N Edotaccent ; B -27 0 653 862 ;\r\nC -1 ; WX 389 ; N scaron ; B -19 -13 424 690 ;\r\nC -1 ; WX 389 ; N scedilla ; B -19 -218 333 462 ;\r\nC -1 ; WX 278 ; N iacute ; B 2 -9 352 697 ;\r\nC -1 ; WX 494 ; N lozenge ; B 10 0 484 745 ;\r\nC -1 ; WX 667 ; N Rcaron ; B -29 0 623 897 ;\r\nC -1 ; WX 722 ; N Gcommaaccent ; B 21 -218 706 685 ;\r\nC -1 ; WX 556 ; N ucircumflex ; B 15 -9 492 690 ;\r\nC -1 ; WX 500 ; N acircumflex ; B -21 -14 455 690 ;\r\nC -1 ; WX 667 ; N Amacron ; B -67 0 593 830 ;\r\nC -1 ; WX 389 ; N rcaron ; B -21 0 424 690 ;\r\nC -1 ; WX 444 ; N ccedilla ; B -5 -218 392 462 ;\r\nC -1 ; WX 611 ; N Zdotaccent ; B -11 0 590 862 ;\r\nC -1 ; WX 611 ; N Thorn ; B -27 0 573 669 ;\r\nC -1 ; WX 722 ; N Omacron ; B 27 -18 691 830 ;\r\nC -1 ; WX 667 ; N Racute ; B -29 0 623 904 ;\r\nC -1 ; WX 556 ; N Sacute ; B 2 -18 531 904 ;\r\nC -1 ; WX 608 ; N dcaron ; B -21 -13 675 708 ;\r\nC -1 ; WX 722 ; N Umacron ; B 67 -18 744 830 ;\r\nC -1 ; WX 556 ; N uring ; B 15 -9 492 729 ;\r\nC -1 ; WX 300 ; N threesuperior ; B 17 265 321 683 ;\r\nC -1 ; WX 722 ; N Ograve ; B 27 -18 691 904 ;\r\nC -1 ; WX 667 ; N Agrave ; B -67 0 593 904 ;\r\nC -1 ; WX 667 ; N Abreve ; B -67 0 593 885 ;\r\nC -1 ; WX 570 ; N multiply ; B 48 16 522 490 ;\r\nC -1 ; WX 556 ; N uacute ; B 15 -9 492 697 ;\r\nC -1 ; WX 611 ; N Tcaron ; B 50 0 650 897 ;\r\nC -1 ; WX 494 ; N partialdiff ; B 11 -21 494 750 ;\r\nC -1 ; WX 444 ; N ydieresis ; B -94 -205 443 655 ;\r\nC -1 ; WX 722 ; N Nacute ; B -27 -15 748 904 ;\r\nC -1 ; WX 278 ; N icircumflex ; B -3 -9 324 690 ;\r\nC -1 ; WX 667 ; N Ecircumflex ; B -27 0 653 897 ;\r\nC -1 ; WX 500 ; N adieresis ; B -21 -14 476 655 ;\r\nC -1 ; WX 444 ; N edieresis ; B 5 -13 448 655 ;\r\nC -1 ; WX 444 ; N cacute ; B -5 -13 435 697 ;\r\nC -1 ; WX 556 ; N nacute ; B -6 -9 493 697 ;\r\nC -1 ; WX 556 ; N umacron ; B 15 -9 492 623 ;\r\nC -1 ; WX 722 ; N Ncaron ; B -27 -15 748 897 ;\r\nC -1 ; WX 389 ; N Iacute ; B -32 0 432 904 ;\r\nC -1 ; WX 570 ; N plusminus ; B 33 0 537 506 ;\r\nC -1 ; WX 220 ; N brokenbar ; B 66 -143 154 707 ;\r\nC -1 ; WX 747 ; N registered ; B 30 -18 718 685 ;\r\nC -1 ; WX 722 ; N Gbreve ; B 21 -18 706 885 ;\r\nC -1 ; WX 389 ; N Idotaccent ; B -32 0 406 862 ;\r\nC -1 ; WX 600 ; N summation ; B 14 -10 585 706 ;\r\nC -1 ; WX 667 ; N Egrave ; B -27 0 653 904 ;\r\nC -1 ; WX 389 ; N racute ; B -21 0 407 697 ;\r\nC -1 ; WX 500 ; N omacron ; B -3 -13 462 623 ;\r\nC -1 ; WX 611 ; N Zacute ; B -11 0 590 904 ;\r\nC -1 ; WX 611 ; N Zcaron ; B -11 0 590 897 ;\r\nC -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ;\r\nC -1 ; WX 722 ; N Eth ; B -31 0 700 669 ;\r\nC -1 ; WX 667 ; N Ccedilla ; B 32 -218 677 685 ;\r\nC -1 ; WX 278 ; N lcommaaccent ; B -42 -218 290 699 ;\r\nC -1 ; WX 366 ; N tcaron ; B -11 -9 434 754 ;\r\nC -1 ; WX 444 ; N eogonek ; B 5 -183 398 462 ;\r\nC -1 ; WX 722 ; N Uogonek ; B 67 -183 744 669 ;\r\nC -1 ; WX 667 ; N Aacute ; B -67 0 593 904 ;\r\nC -1 ; WX 667 ; N Adieresis ; B -67 0 593 862 ;\r\nC -1 ; WX 444 ; N egrave ; B 5 -13 398 697 ;\r\nC -1 ; WX 389 ; N zacute ; B -43 -78 407 697 ;\r\nC -1 ; WX 278 ; N iogonek ; B -20 -183 263 684 ;\r\nC -1 ; WX 722 ; N Oacute ; B 27 -18 691 904 ;\r\nC -1 ; WX 500 ; N oacute ; B -3 -13 463 697 ;\r\nC -1 ; WX 500 ; N amacron ; B -21 -14 467 623 ;\r\nC -1 ; WX 389 ; N sacute ; B -19 -13 407 697 ;\r\nC -1 ; WX 278 ; N idieresis ; B 2 -9 364 655 ;\r\nC -1 ; WX 722 ; N Ocircumflex ; B 27 -18 691 897 ;\r\nC -1 ; WX 722 ; N Ugrave ; B 67 -18 744 904 ;\r\nC -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;\r\nC -1 ; WX 500 ; N thorn ; B -120 -205 446 699 ;\r\nC -1 ; WX 300 ; N twosuperior ; B 2 274 313 683 ;\r\nC -1 ; WX 722 ; N Odieresis ; B 27 -18 691 862 ;\r\nC -1 ; WX 576 ; N mu ; B -60 -207 516 449 ;\r\nC -1 ; WX 278 ; N igrave ; B 2 -9 259 697 ;\r\nC -1 ; WX 500 ; N ohungarumlaut ; B -3 -13 582 697 ;\r\nC -1 ; WX 667 ; N Eogonek ; B -27 -183 653 669 ;\r\nC -1 ; WX 500 ; N dcroat ; B -21 -13 552 699 ;\r\nC -1 ; WX 750 ; N threequarters ; B 7 -14 726 683 ;\r\nC -1 ; WX 556 ; N Scedilla ; B 2 -218 526 685 ;\r\nC -1 ; WX 382 ; N lcaron ; B 2 -9 448 708 ;\r\nC -1 ; WX 667 ; N Kcommaaccent ; B -21 -218 702 669 ;\r\nC -1 ; WX 611 ; N Lacute ; B -22 0 590 904 ;\r\nC -1 ; WX 1000 ; N trademark ; B 32 263 968 669 ;\r\nC -1 ; WX 444 ; N edotaccent ; B 5 -13 398 655 ;\r\nC -1 ; WX 389 ; N Igrave ; B -32 0 406 904 ;\r\nC -1 ; WX 389 ; N Imacron ; B -32 0 461 830 ;\r\nC -1 ; WX 611 ; N Lcaron ; B -22 0 671 718 ;\r\nC -1 ; WX 750 ; N onehalf ; B -9 -14 723 683 ;\r\nC -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ;\r\nC -1 ; WX 500 ; N ocircumflex ; B -3 -13 451 690 ;\r\nC -1 ; WX 556 ; N ntilde ; B -6 -9 504 655 ;\r\nC -1 ; WX 722 ; N Uhungarumlaut ; B 67 -18 744 904 ;\r\nC -1 ; WX 667 ; N Eacute ; B -27 0 653 904 ;\r\nC -1 ; WX 444 ; N emacron ; B 5 -13 439 623 ;\r\nC -1 ; WX 500 ; N gbreve ; B -52 -203 478 678 ;\r\nC -1 ; WX 750 ; N onequarter ; B 7 -14 721 683 ;\r\nC -1 ; WX 556 ; N Scaron ; B 2 -18 553 897 ;\r\nC -1 ; WX 556 ; N Scommaaccent ; B 2 -218 526 685 ;\r\nC -1 ; WX 722 ; N Ohungarumlaut ; B 27 -18 723 904 ;\r\nC -1 ; WX 400 ; N degree ; B 83 397 369 683 ;\r\nC -1 ; WX 500 ; N ograve ; B -3 -13 441 697 ;\r\nC -1 ; WX 667 ; N Ccaron ; B 32 -18 677 897 ;\r\nC -1 ; WX 556 ; N ugrave ; B 15 -9 492 697 ;\r\nC -1 ; WX 549 ; N radical ; B 10 -46 512 850 ;\r\nC -1 ; WX 722 ; N Dcaron ; B -46 0 685 897 ;\r\nC -1 ; WX 389 ; N rcommaaccent ; B -67 -218 389 462 ;\r\nC -1 ; WX 722 ; N Ntilde ; B -27 -15 748 862 ;\r\nC -1 ; WX 500 ; N otilde ; B -3 -13 491 655 ;\r\nC -1 ; WX 667 ; N Rcommaaccent ; B -29 -218 623 669 ;\r\nC -1 ; WX 611 ; N Lcommaaccent ; B -22 -218 590 669 ;\r\nC -1 ; WX 667 ; N Atilde ; B -67 0 593 862 ;\r\nC -1 ; WX 667 ; N Aogonek ; B -67 -183 604 683 ;\r\nC -1 ; WX 667 ; N Aring ; B -67 0 593 921 ;\r\nC -1 ; WX 722 ; N Otilde ; B 27 -18 691 862 ;\r\nC -1 ; WX 389 ; N zdotaccent ; B -43 -78 368 655 ;\r\nC -1 ; WX 667 ; N Ecaron ; B -27 0 653 897 ;\r\nC -1 ; WX 389 ; N Iogonek ; B -32 -183 406 669 ;\r\nC -1 ; WX 500 ; N kcommaaccent ; B -23 -218 483 699 ;\r\nC -1 ; WX 606 ; N minus ; B 51 209 555 297 ;\r\nC -1 ; WX 389 ; N Icircumflex ; B -32 0 450 897 ;\r\nC -1 ; WX 556 ; N ncaron ; B -6 -9 523 690 ;\r\nC -1 ; WX 278 ; N tcommaaccent ; B -62 -218 281 594 ;\r\nC -1 ; WX 606 ; N logicalnot ; B 51 108 555 399 ;\r\nC -1 ; WX 500 ; N odieresis ; B -3 -13 471 655 ;\r\nC -1 ; WX 556 ; N udieresis ; B 15 -9 499 655 ;\r\nC -1 ; WX 549 ; N notequal ; B 15 -49 540 570 ;\r\nC -1 ; WX 500 ; N gcommaaccent ; B -52 -203 478 767 ;\r\nC -1 ; WX 500 ; N eth ; B -3 -13 454 699 ;\r\nC -1 ; WX 389 ; N zcaron ; B -43 -78 424 690 ;\r\nC -1 ; WX 556 ; N ncommaaccent ; B -6 -218 493 462 ;\r\nC -1 ; WX 300 ; N onesuperior ; B 30 274 301 683 ;\r\nC -1 ; WX 278 ; N imacron ; B 2 -9 294 623 ;\r\nC -1 ; WX 500 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nStartKernData\r\nStartKernPairs 2038\r\nKPX A C -65\r\nKPX A Cacute -65\r\nKPX A Ccaron -65\r\nKPX A Ccedilla -65\r\nKPX A G -60\r\nKPX A Gbreve -60\r\nKPX A Gcommaaccent -60\r\nKPX A O -50\r\nKPX A Oacute -50\r\nKPX A Ocircumflex -50\r\nKPX A Odieresis -50\r\nKPX A Ograve -50\r\nKPX A Ohungarumlaut -50\r\nKPX A Omacron -50\r\nKPX A Oslash -50\r\nKPX A Otilde -50\r\nKPX A Q -55\r\nKPX A T -55\r\nKPX A Tcaron -55\r\nKPX A Tcommaaccent -55\r\nKPX A U -50\r\nKPX A Uacute -50\r\nKPX A Ucircumflex -50\r\nKPX A Udieresis -50\r\nKPX A Ugrave -50\r\nKPX A Uhungarumlaut -50\r\nKPX A Umacron -50\r\nKPX A Uogonek -50\r\nKPX A Uring -50\r\nKPX A V -95\r\nKPX A W -100\r\nKPX A Y -70\r\nKPX A Yacute -70\r\nKPX A Ydieresis -70\r\nKPX A quoteright -74\r\nKPX A u -30\r\nKPX A uacute -30\r\nKPX A ucircumflex -30\r\nKPX A udieresis -30\r\nKPX A ugrave -30\r\nKPX A uhungarumlaut -30\r\nKPX A umacron -30\r\nKPX A uogonek -30\r\nKPX A uring -30\r\nKPX A v -74\r\nKPX A w -74\r\nKPX A y -74\r\nKPX A yacute -74\r\nKPX A ydieresis -74\r\nKPX Aacute C -65\r\nKPX Aacute Cacute -65\r\nKPX Aacute Ccaron -65\r\nKPX Aacute Ccedilla -65\r\nKPX Aacute G -60\r\nKPX Aacute Gbreve -60\r\nKPX Aacute Gcommaaccent -60\r\nKPX Aacute O -50\r\nKPX Aacute Oacute -50\r\nKPX Aacute Ocircumflex -50\r\nKPX Aacute Odieresis -50\r\nKPX Aacute Ograve -50\r\nKPX Aacute Ohungarumlaut -50\r\nKPX Aacute Omacron -50\r\nKPX Aacute Oslash -50\r\nKPX Aacute Otilde -50\r\nKPX Aacute Q -55\r\nKPX Aacute T -55\r\nKPX Aacute Tcaron -55\r\nKPX Aacute Tcommaaccent -55\r\nKPX Aacute U -50\r\nKPX Aacute Uacute -50\r\nKPX Aacute Ucircumflex -50\r\nKPX Aacute Udieresis -50\r\nKPX Aacute Ugrave -50\r\nKPX Aacute Uhungarumlaut -50\r\nKPX Aacute Umacron -50\r\nKPX Aacute Uogonek -50\r\nKPX Aacute Uring -50\r\nKPX Aacute V -95\r\nKPX Aacute W -100\r\nKPX Aacute Y -70\r\nKPX Aacute Yacute -70\r\nKPX Aacute Ydieresis -70\r\nKPX Aacute quoteright -74\r\nKPX Aacute u -30\r\nKPX Aacute uacute -30\r\nKPX Aacute ucircumflex -30\r\nKPX Aacute udieresis -30\r\nKPX Aacute ugrave -30\r\nKPX Aacute uhungarumlaut -30\r\nKPX Aacute umacron -30\r\nKPX Aacute uogonek -30\r\nKPX Aacute uring -30\r\nKPX Aacute v -74\r\nKPX Aacute w -74\r\nKPX Aacute y -74\r\nKPX Aacute yacute -74\r\nKPX Aacute ydieresis -74\r\nKPX Abreve C -65\r\nKPX Abreve Cacute -65\r\nKPX Abreve Ccaron -65\r\nKPX Abreve Ccedilla -65\r\nKPX Abreve G -60\r\nKPX Abreve Gbreve -60\r\nKPX Abreve Gcommaaccent -60\r\nKPX Abreve O -50\r\nKPX Abreve Oacute -50\r\nKPX Abreve Ocircumflex -50\r\nKPX Abreve Odieresis -50\r\nKPX Abreve Ograve -50\r\nKPX Abreve Ohungarumlaut -50\r\nKPX Abreve Omacron -50\r\nKPX Abreve Oslash -50\r\nKPX Abreve Otilde -50\r\nKPX Abreve Q -55\r\nKPX Abreve T -55\r\nKPX Abreve Tcaron -55\r\nKPX Abreve Tcommaaccent -55\r\nKPX Abreve U -50\r\nKPX Abreve Uacute -50\r\nKPX Abreve Ucircumflex -50\r\nKPX Abreve Udieresis -50\r\nKPX Abreve Ugrave -50\r\nKPX Abreve Uhungarumlaut -50\r\nKPX Abreve Umacron -50\r\nKPX Abreve Uogonek -50\r\nKPX Abreve Uring -50\r\nKPX Abreve V -95\r\nKPX Abreve W -100\r\nKPX Abreve Y -70\r\nKPX Abreve Yacute -70\r\nKPX Abreve Ydieresis -70\r\nKPX Abreve quoteright -74\r\nKPX Abreve u -30\r\nKPX Abreve uacute -30\r\nKPX Abreve ucircumflex -30\r\nKPX Abreve udieresis -30\r\nKPX Abreve ugrave -30\r\nKPX Abreve uhungarumlaut -30\r\nKPX Abreve umacron -30\r\nKPX Abreve uogonek -30\r\nKPX Abreve uring -30\r\nKPX Abreve v -74\r\nKPX Abreve w -74\r\nKPX Abreve y -74\r\nKPX Abreve yacute -74\r\nKPX Abreve ydieresis -74\r\nKPX Acircumflex C -65\r\nKPX Acircumflex Cacute -65\r\nKPX Acircumflex Ccaron -65\r\nKPX Acircumflex Ccedilla -65\r\nKPX Acircumflex G -60\r\nKPX Acircumflex Gbreve -60\r\nKPX Acircumflex Gcommaaccent -60\r\nKPX Acircumflex O -50\r\nKPX Acircumflex Oacute -50\r\nKPX Acircumflex Ocircumflex -50\r\nKPX Acircumflex Odieresis -50\r\nKPX Acircumflex Ograve -50\r\nKPX Acircumflex Ohungarumlaut -50\r\nKPX Acircumflex Omacron -50\r\nKPX Acircumflex Oslash -50\r\nKPX Acircumflex Otilde -50\r\nKPX Acircumflex Q -55\r\nKPX Acircumflex T -55\r\nKPX Acircumflex Tcaron -55\r\nKPX Acircumflex Tcommaaccent -55\r\nKPX Acircumflex U -50\r\nKPX Acircumflex Uacute -50\r\nKPX Acircumflex Ucircumflex -50\r\nKPX Acircumflex Udieresis -50\r\nKPX Acircumflex Ugrave -50\r\nKPX Acircumflex Uhungarumlaut -50\r\nKPX Acircumflex Umacron -50\r\nKPX Acircumflex Uogonek -50\r\nKPX Acircumflex Uring -50\r\nKPX Acircumflex V -95\r\nKPX Acircumflex W -100\r\nKPX Acircumflex Y -70\r\nKPX Acircumflex Yacute -70\r\nKPX Acircumflex Ydieresis -70\r\nKPX Acircumflex quoteright -74\r\nKPX Acircumflex u -30\r\nKPX Acircumflex uacute -30\r\nKPX Acircumflex ucircumflex -30\r\nKPX Acircumflex udieresis -30\r\nKPX Acircumflex ugrave -30\r\nKPX Acircumflex uhungarumlaut -30\r\nKPX Acircumflex umacron -30\r\nKPX Acircumflex uogonek -30\r\nKPX Acircumflex uring -30\r\nKPX Acircumflex v -74\r\nKPX Acircumflex w -74\r\nKPX Acircumflex y -74\r\nKPX Acircumflex yacute -74\r\nKPX Acircumflex ydieresis -74\r\nKPX Adieresis C -65\r\nKPX Adieresis Cacute -65\r\nKPX Adieresis Ccaron -65\r\nKPX Adieresis Ccedilla -65\r\nKPX Adieresis G -60\r\nKPX Adieresis Gbreve -60\r\nKPX Adieresis Gcommaaccent -60\r\nKPX Adieresis O -50\r\nKPX Adieresis Oacute -50\r\nKPX Adieresis Ocircumflex -50\r\nKPX Adieresis Odieresis -50\r\nKPX Adieresis Ograve -50\r\nKPX Adieresis Ohungarumlaut -50\r\nKPX Adieresis Omacron -50\r\nKPX Adieresis Oslash -50\r\nKPX Adieresis Otilde -50\r\nKPX Adieresis Q -55\r\nKPX Adieresis T -55\r\nKPX Adieresis Tcaron -55\r\nKPX Adieresis Tcommaaccent -55\r\nKPX Adieresis U -50\r\nKPX Adieresis Uacute -50\r\nKPX Adieresis Ucircumflex -50\r\nKPX Adieresis Udieresis -50\r\nKPX Adieresis Ugrave -50\r\nKPX Adieresis Uhungarumlaut -50\r\nKPX Adieresis Umacron -50\r\nKPX Adieresis Uogonek -50\r\nKPX Adieresis Uring -50\r\nKPX Adieresis V -95\r\nKPX Adieresis W -100\r\nKPX Adieresis Y -70\r\nKPX Adieresis Yacute -70\r\nKPX Adieresis Ydieresis -70\r\nKPX Adieresis quoteright -74\r\nKPX Adieresis u -30\r\nKPX Adieresis uacute -30\r\nKPX Adieresis ucircumflex -30\r\nKPX Adieresis udieresis -30\r\nKPX Adieresis ugrave -30\r\nKPX Adieresis uhungarumlaut -30\r\nKPX Adieresis umacron -30\r\nKPX Adieresis uogonek -30\r\nKPX Adieresis uring -30\r\nKPX Adieresis v -74\r\nKPX Adieresis w -74\r\nKPX Adieresis y -74\r\nKPX Adieresis yacute -74\r\nKPX Adieresis ydieresis -74\r\nKPX Agrave C -65\r\nKPX Agrave Cacute -65\r\nKPX Agrave Ccaron -65\r\nKPX Agrave Ccedilla -65\r\nKPX Agrave G -60\r\nKPX Agrave Gbreve -60\r\nKPX Agrave Gcommaaccent -60\r\nKPX Agrave O -50\r\nKPX Agrave Oacute -50\r\nKPX Agrave Ocircumflex -50\r\nKPX Agrave Odieresis -50\r\nKPX Agrave Ograve -50\r\nKPX Agrave Ohungarumlaut -50\r\nKPX Agrave Omacron -50\r\nKPX Agrave Oslash -50\r\nKPX Agrave Otilde -50\r\nKPX Agrave Q -55\r\nKPX Agrave T -55\r\nKPX Agrave Tcaron -55\r\nKPX Agrave Tcommaaccent -55\r\nKPX Agrave U -50\r\nKPX Agrave Uacute -50\r\nKPX Agrave Ucircumflex -50\r\nKPX Agrave Udieresis -50\r\nKPX Agrave Ugrave -50\r\nKPX Agrave Uhungarumlaut -50\r\nKPX Agrave Umacron -50\r\nKPX Agrave Uogonek -50\r\nKPX Agrave Uring -50\r\nKPX Agrave V -95\r\nKPX Agrave W -100\r\nKPX Agrave Y -70\r\nKPX Agrave Yacute -70\r\nKPX Agrave Ydieresis -70\r\nKPX Agrave quoteright -74\r\nKPX Agrave u -30\r\nKPX Agrave uacute -30\r\nKPX Agrave ucircumflex -30\r\nKPX Agrave udieresis -30\r\nKPX Agrave ugrave -30\r\nKPX Agrave uhungarumlaut -30\r\nKPX Agrave umacron -30\r\nKPX Agrave uogonek -30\r\nKPX Agrave uring -30\r\nKPX Agrave v -74\r\nKPX Agrave w -74\r\nKPX Agrave y -74\r\nKPX Agrave yacute -74\r\nKPX Agrave ydieresis -74\r\nKPX Amacron C -65\r\nKPX Amacron Cacute -65\r\nKPX Amacron Ccaron -65\r\nKPX Amacron Ccedilla -65\r\nKPX Amacron G -60\r\nKPX Amacron Gbreve -60\r\nKPX Amacron Gcommaaccent -60\r\nKPX Amacron O -50\r\nKPX Amacron Oacute -50\r\nKPX Amacron Ocircumflex -50\r\nKPX Amacron Odieresis -50\r\nKPX Amacron Ograve -50\r\nKPX Amacron Ohungarumlaut -50\r\nKPX Amacron Omacron -50\r\nKPX Amacron Oslash -50\r\nKPX Amacron Otilde -50\r\nKPX Amacron Q -55\r\nKPX Amacron T -55\r\nKPX Amacron Tcaron -55\r\nKPX Amacron Tcommaaccent -55\r\nKPX Amacron U -50\r\nKPX Amacron Uacute -50\r\nKPX Amacron Ucircumflex -50\r\nKPX Amacron Udieresis -50\r\nKPX Amacron Ugrave -50\r\nKPX Amacron Uhungarumlaut -50\r\nKPX Amacron Umacron -50\r\nKPX Amacron Uogonek -50\r\nKPX Amacron Uring -50\r\nKPX Amacron V -95\r\nKPX Amacron W -100\r\nKPX Amacron Y -70\r\nKPX Amacron Yacute -70\r\nKPX Amacron Ydieresis -70\r\nKPX Amacron quoteright -74\r\nKPX Amacron u -30\r\nKPX Amacron uacute -30\r\nKPX Amacron ucircumflex -30\r\nKPX Amacron udieresis -30\r\nKPX Amacron ugrave -30\r\nKPX Amacron uhungarumlaut -30\r\nKPX Amacron umacron -30\r\nKPX Amacron uogonek -30\r\nKPX Amacron uring -30\r\nKPX Amacron v -74\r\nKPX Amacron w -74\r\nKPX Amacron y -74\r\nKPX Amacron yacute -74\r\nKPX Amacron ydieresis -74\r\nKPX Aogonek C -65\r\nKPX Aogonek Cacute -65\r\nKPX Aogonek Ccaron -65\r\nKPX Aogonek Ccedilla -65\r\nKPX Aogonek G -60\r\nKPX Aogonek Gbreve -60\r\nKPX Aogonek Gcommaaccent -60\r\nKPX Aogonek O -50\r\nKPX Aogonek Oacute -50\r\nKPX Aogonek Ocircumflex -50\r\nKPX Aogonek Odieresis -50\r\nKPX Aogonek Ograve -50\r\nKPX Aogonek Ohungarumlaut -50\r\nKPX Aogonek Omacron -50\r\nKPX Aogonek Oslash -50\r\nKPX Aogonek Otilde -50\r\nKPX Aogonek Q -55\r\nKPX Aogonek T -55\r\nKPX Aogonek Tcaron -55\r\nKPX Aogonek Tcommaaccent -55\r\nKPX Aogonek U -50\r\nKPX Aogonek Uacute -50\r\nKPX Aogonek Ucircumflex -50\r\nKPX Aogonek Udieresis -50\r\nKPX Aogonek Ugrave -50\r\nKPX Aogonek Uhungarumlaut -50\r\nKPX Aogonek Umacron -50\r\nKPX Aogonek Uogonek -50\r\nKPX Aogonek Uring -50\r\nKPX Aogonek V -95\r\nKPX Aogonek W -100\r\nKPX Aogonek Y -70\r\nKPX Aogonek Yacute -70\r\nKPX Aogonek Ydieresis -70\r\nKPX Aogonek quoteright -74\r\nKPX Aogonek u -30\r\nKPX Aogonek uacute -30\r\nKPX Aogonek ucircumflex -30\r\nKPX Aogonek udieresis -30\r\nKPX Aogonek ugrave -30\r\nKPX Aogonek uhungarumlaut -30\r\nKPX Aogonek umacron -30\r\nKPX Aogonek uogonek -30\r\nKPX Aogonek uring -30\r\nKPX Aogonek v -74\r\nKPX Aogonek w -74\r\nKPX Aogonek y -34\r\nKPX Aogonek yacute -34\r\nKPX Aogonek ydieresis -34\r\nKPX Aring C -65\r\nKPX Aring Cacute -65\r\nKPX Aring Ccaron -65\r\nKPX Aring Ccedilla -65\r\nKPX Aring G -60\r\nKPX Aring Gbreve -60\r\nKPX Aring Gcommaaccent -60\r\nKPX Aring O -50\r\nKPX Aring Oacute -50\r\nKPX Aring Ocircumflex -50\r\nKPX Aring Odieresis -50\r\nKPX Aring Ograve -50\r\nKPX Aring Ohungarumlaut -50\r\nKPX Aring Omacron -50\r\nKPX Aring Oslash -50\r\nKPX Aring Otilde -50\r\nKPX Aring Q -55\r\nKPX Aring T -55\r\nKPX Aring Tcaron -55\r\nKPX Aring Tcommaaccent -55\r\nKPX Aring U -50\r\nKPX Aring Uacute -50\r\nKPX Aring Ucircumflex -50\r\nKPX Aring Udieresis -50\r\nKPX Aring Ugrave -50\r\nKPX Aring Uhungarumlaut -50\r\nKPX Aring Umacron -50\r\nKPX Aring Uogonek -50\r\nKPX Aring Uring -50\r\nKPX Aring V -95\r\nKPX Aring W -100\r\nKPX Aring Y -70\r\nKPX Aring Yacute -70\r\nKPX Aring Ydieresis -70\r\nKPX Aring quoteright -74\r\nKPX Aring u -30\r\nKPX Aring uacute -30\r\nKPX Aring ucircumflex -30\r\nKPX Aring udieresis -30\r\nKPX Aring ugrave -30\r\nKPX Aring uhungarumlaut -30\r\nKPX Aring umacron -30\r\nKPX Aring uogonek -30\r\nKPX Aring uring -30\r\nKPX Aring v -74\r\nKPX Aring w -74\r\nKPX Aring y -74\r\nKPX Aring yacute -74\r\nKPX Aring ydieresis -74\r\nKPX Atilde C -65\r\nKPX Atilde Cacute -65\r\nKPX Atilde Ccaron -65\r\nKPX Atilde Ccedilla -65\r\nKPX Atilde G -60\r\nKPX Atilde Gbreve -60\r\nKPX Atilde Gcommaaccent -60\r\nKPX Atilde O -50\r\nKPX Atilde Oacute -50\r\nKPX Atilde Ocircumflex -50\r\nKPX Atilde Odieresis -50\r\nKPX Atilde Ograve -50\r\nKPX Atilde Ohungarumlaut -50\r\nKPX Atilde Omacron -50\r\nKPX Atilde Oslash -50\r\nKPX Atilde Otilde -50\r\nKPX Atilde Q -55\r\nKPX Atilde T -55\r\nKPX Atilde Tcaron -55\r\nKPX Atilde Tcommaaccent -55\r\nKPX Atilde U -50\r\nKPX Atilde Uacute -50\r\nKPX Atilde Ucircumflex -50\r\nKPX Atilde Udieresis -50\r\nKPX Atilde Ugrave -50\r\nKPX Atilde Uhungarumlaut -50\r\nKPX Atilde Umacron -50\r\nKPX Atilde Uogonek -50\r\nKPX Atilde Uring -50\r\nKPX Atilde V -95\r\nKPX Atilde W -100\r\nKPX Atilde Y -70\r\nKPX Atilde Yacute -70\r\nKPX Atilde Ydieresis -70\r\nKPX Atilde quoteright -74\r\nKPX Atilde u -30\r\nKPX Atilde uacute -30\r\nKPX Atilde ucircumflex -30\r\nKPX Atilde udieresis -30\r\nKPX Atilde ugrave -30\r\nKPX Atilde uhungarumlaut -30\r\nKPX Atilde umacron -30\r\nKPX Atilde uogonek -30\r\nKPX Atilde uring -30\r\nKPX Atilde v -74\r\nKPX Atilde w -74\r\nKPX Atilde y -74\r\nKPX Atilde yacute -74\r\nKPX Atilde ydieresis -74\r\nKPX B A -25\r\nKPX B Aacute -25\r\nKPX B Abreve -25\r\nKPX B Acircumflex -25\r\nKPX B Adieresis -25\r\nKPX B Agrave -25\r\nKPX B Amacron -25\r\nKPX B Aogonek -25\r\nKPX B Aring -25\r\nKPX B Atilde -25\r\nKPX B U -10\r\nKPX B Uacute -10\r\nKPX B Ucircumflex -10\r\nKPX B Udieresis -10\r\nKPX B Ugrave -10\r\nKPX B Uhungarumlaut -10\r\nKPX B Umacron -10\r\nKPX B Uogonek -10\r\nKPX B Uring -10\r\nKPX D A -25\r\nKPX D Aacute -25\r\nKPX D Abreve -25\r\nKPX D Acircumflex -25\r\nKPX D Adieresis -25\r\nKPX D Agrave -25\r\nKPX D Amacron -25\r\nKPX D Aogonek -25\r\nKPX D Aring -25\r\nKPX D Atilde -25\r\nKPX D V -50\r\nKPX D W -40\r\nKPX D Y -50\r\nKPX D Yacute -50\r\nKPX D Ydieresis -50\r\nKPX Dcaron A -25\r\nKPX Dcaron Aacute -25\r\nKPX Dcaron Abreve -25\r\nKPX Dcaron Acircumflex -25\r\nKPX Dcaron Adieresis -25\r\nKPX Dcaron Agrave -25\r\nKPX Dcaron Amacron -25\r\nKPX Dcaron Aogonek -25\r\nKPX Dcaron Aring -25\r\nKPX Dcaron Atilde -25\r\nKPX Dcaron V -50\r\nKPX Dcaron W -40\r\nKPX Dcaron Y -50\r\nKPX Dcaron Yacute -50\r\nKPX Dcaron Ydieresis -50\r\nKPX Dcroat A -25\r\nKPX Dcroat Aacute -25\r\nKPX Dcroat Abreve -25\r\nKPX Dcroat Acircumflex -25\r\nKPX Dcroat Adieresis -25\r\nKPX Dcroat Agrave -25\r\nKPX Dcroat Amacron -25\r\nKPX Dcroat Aogonek -25\r\nKPX Dcroat Aring -25\r\nKPX Dcroat Atilde -25\r\nKPX Dcroat V -50\r\nKPX Dcroat W -40\r\nKPX Dcroat Y -50\r\nKPX Dcroat Yacute -50\r\nKPX Dcroat Ydieresis -50\r\nKPX F A -100\r\nKPX F Aacute -100\r\nKPX F Abreve -100\r\nKPX F Acircumflex -100\r\nKPX F Adieresis -100\r\nKPX F Agrave -100\r\nKPX F Amacron -100\r\nKPX F Aogonek -100\r\nKPX F Aring -100\r\nKPX F Atilde -100\r\nKPX F a -95\r\nKPX F aacute -95\r\nKPX F abreve -95\r\nKPX F acircumflex -95\r\nKPX F adieresis -95\r\nKPX F agrave -95\r\nKPX F amacron -95\r\nKPX F aogonek -95\r\nKPX F aring -95\r\nKPX F atilde -95\r\nKPX F comma -129\r\nKPX F e -100\r\nKPX F eacute -100\r\nKPX F ecaron -100\r\nKPX F ecircumflex -100\r\nKPX F edieresis -100\r\nKPX F edotaccent -100\r\nKPX F egrave -100\r\nKPX F emacron -100\r\nKPX F eogonek -100\r\nKPX F i -40\r\nKPX F iacute -40\r\nKPX F icircumflex -40\r\nKPX F idieresis -40\r\nKPX F igrave -40\r\nKPX F imacron -40\r\nKPX F iogonek -40\r\nKPX F o -70\r\nKPX F oacute -70\r\nKPX F ocircumflex -70\r\nKPX F odieresis -70\r\nKPX F ograve -70\r\nKPX F ohungarumlaut -70\r\nKPX F omacron -70\r\nKPX F oslash -70\r\nKPX F otilde -70\r\nKPX F period -129\r\nKPX F r -50\r\nKPX F racute -50\r\nKPX F rcaron -50\r\nKPX F rcommaaccent -50\r\nKPX J A -25\r\nKPX J Aacute -25\r\nKPX J Abreve -25\r\nKPX J Acircumflex -25\r\nKPX J Adieresis -25\r\nKPX J Agrave -25\r\nKPX J Amacron -25\r\nKPX J Aogonek -25\r\nKPX J Aring -25\r\nKPX J Atilde -25\r\nKPX J a -40\r\nKPX J aacute -40\r\nKPX J abreve -40\r\nKPX J acircumflex -40\r\nKPX J adieresis -40\r\nKPX J agrave -40\r\nKPX J amacron -40\r\nKPX J aogonek -40\r\nKPX J aring -40\r\nKPX J atilde -40\r\nKPX J comma -10\r\nKPX J e -40\r\nKPX J eacute -40\r\nKPX J ecaron -40\r\nKPX J ecircumflex -40\r\nKPX J edieresis -40\r\nKPX J edotaccent -40\r\nKPX J egrave -40\r\nKPX J emacron -40\r\nKPX J eogonek -40\r\nKPX J o -40\r\nKPX J oacute -40\r\nKPX J ocircumflex -40\r\nKPX J odieresis -40\r\nKPX J ograve -40\r\nKPX J ohungarumlaut -40\r\nKPX J omacron -40\r\nKPX J oslash -40\r\nKPX J otilde -40\r\nKPX J period -10\r\nKPX J u -40\r\nKPX J uacute -40\r\nKPX J ucircumflex -40\r\nKPX J udieresis -40\r\nKPX J ugrave -40\r\nKPX J uhungarumlaut -40\r\nKPX J umacron -40\r\nKPX J uogonek -40\r\nKPX J uring -40\r\nKPX K O -30\r\nKPX K Oacute -30\r\nKPX K Ocircumflex -30\r\nKPX K Odieresis -30\r\nKPX K Ograve -30\r\nKPX K Ohungarumlaut -30\r\nKPX K Omacron -30\r\nKPX K Oslash -30\r\nKPX K Otilde -30\r\nKPX K e -25\r\nKPX K eacute -25\r\nKPX K ecaron -25\r\nKPX K ecircumflex -25\r\nKPX K edieresis -25\r\nKPX K edotaccent -25\r\nKPX K egrave -25\r\nKPX K emacron -25\r\nKPX K eogonek -25\r\nKPX K o -25\r\nKPX K oacute -25\r\nKPX K ocircumflex -25\r\nKPX K odieresis -25\r\nKPX K ograve -25\r\nKPX K ohungarumlaut -25\r\nKPX K omacron -25\r\nKPX K oslash -25\r\nKPX K otilde -25\r\nKPX K u -20\r\nKPX K uacute -20\r\nKPX K ucircumflex -20\r\nKPX K udieresis -20\r\nKPX K ugrave -20\r\nKPX K uhungarumlaut -20\r\nKPX K umacron -20\r\nKPX K uogonek -20\r\nKPX K uring -20\r\nKPX K y -20\r\nKPX K yacute -20\r\nKPX K ydieresis -20\r\nKPX Kcommaaccent O -30\r\nKPX Kcommaaccent Oacute -30\r\nKPX Kcommaaccent Ocircumflex -30\r\nKPX Kcommaaccent Odieresis -30\r\nKPX Kcommaaccent Ograve -30\r\nKPX Kcommaaccent Ohungarumlaut -30\r\nKPX Kcommaaccent Omacron -30\r\nKPX Kcommaaccent Oslash -30\r\nKPX Kcommaaccent Otilde -30\r\nKPX Kcommaaccent e -25\r\nKPX Kcommaaccent eacute -25\r\nKPX Kcommaaccent ecaron -25\r\nKPX Kcommaaccent ecircumflex -25\r\nKPX Kcommaaccent edieresis -25\r\nKPX Kcommaaccent edotaccent -25\r\nKPX Kcommaaccent egrave -25\r\nKPX Kcommaaccent emacron -25\r\nKPX Kcommaaccent eogonek -25\r\nKPX Kcommaaccent o -25\r\nKPX Kcommaaccent oacute -25\r\nKPX Kcommaaccent ocircumflex -25\r\nKPX Kcommaaccent odieresis -25\r\nKPX Kcommaaccent ograve -25\r\nKPX Kcommaaccent ohungarumlaut -25\r\nKPX Kcommaaccent omacron -25\r\nKPX Kcommaaccent oslash -25\r\nKPX Kcommaaccent otilde -25\r\nKPX Kcommaaccent u -20\r\nKPX Kcommaaccent uacute -20\r\nKPX Kcommaaccent ucircumflex -20\r\nKPX Kcommaaccent udieresis -20\r\nKPX Kcommaaccent ugrave -20\r\nKPX Kcommaaccent uhungarumlaut -20\r\nKPX Kcommaaccent umacron -20\r\nKPX Kcommaaccent uogonek -20\r\nKPX Kcommaaccent uring -20\r\nKPX Kcommaaccent y -20\r\nKPX Kcommaaccent yacute -20\r\nKPX Kcommaaccent ydieresis -20\r\nKPX L T -18\r\nKPX L Tcaron -18\r\nKPX L Tcommaaccent -18\r\nKPX L V -37\r\nKPX L W -37\r\nKPX L Y -37\r\nKPX L Yacute -37\r\nKPX L Ydieresis -37\r\nKPX L quoteright -55\r\nKPX L y -37\r\nKPX L yacute -37\r\nKPX L ydieresis -37\r\nKPX Lacute T -18\r\nKPX Lacute Tcaron -18\r\nKPX Lacute Tcommaaccent -18\r\nKPX Lacute V -37\r\nKPX Lacute W -37\r\nKPX Lacute Y -37\r\nKPX Lacute Yacute -37\r\nKPX Lacute Ydieresis -37\r\nKPX Lacute quoteright -55\r\nKPX Lacute y -37\r\nKPX Lacute yacute -37\r\nKPX Lacute ydieresis -37\r\nKPX Lcommaaccent T -18\r\nKPX Lcommaaccent Tcaron -18\r\nKPX Lcommaaccent Tcommaaccent -18\r\nKPX Lcommaaccent V -37\r\nKPX Lcommaaccent W -37\r\nKPX Lcommaaccent Y -37\r\nKPX Lcommaaccent Yacute -37\r\nKPX Lcommaaccent Ydieresis -37\r\nKPX Lcommaaccent quoteright -55\r\nKPX Lcommaaccent y -37\r\nKPX Lcommaaccent yacute -37\r\nKPX Lcommaaccent ydieresis -37\r\nKPX Lslash T -18\r\nKPX Lslash Tcaron -18\r\nKPX Lslash Tcommaaccent -18\r\nKPX Lslash V -37\r\nKPX Lslash W -37\r\nKPX Lslash Y -37\r\nKPX Lslash Yacute -37\r\nKPX Lslash Ydieresis -37\r\nKPX Lslash quoteright -55\r\nKPX Lslash y -37\r\nKPX Lslash yacute -37\r\nKPX Lslash ydieresis -37\r\nKPX N A -30\r\nKPX N Aacute -30\r\nKPX N Abreve -30\r\nKPX N Acircumflex -30\r\nKPX N Adieresis -30\r\nKPX N Agrave -30\r\nKPX N Amacron -30\r\nKPX N Aogonek -30\r\nKPX N Aring -30\r\nKPX N Atilde -30\r\nKPX Nacute A -30\r\nKPX Nacute Aacute -30\r\nKPX Nacute Abreve -30\r\nKPX Nacute Acircumflex -30\r\nKPX Nacute Adieresis -30\r\nKPX Nacute Agrave -30\r\nKPX Nacute Amacron -30\r\nKPX Nacute Aogonek -30\r\nKPX Nacute Aring -30\r\nKPX Nacute Atilde -30\r\nKPX Ncaron A -30\r\nKPX Ncaron Aacute -30\r\nKPX Ncaron Abreve -30\r\nKPX Ncaron Acircumflex -30\r\nKPX Ncaron Adieresis -30\r\nKPX Ncaron Agrave -30\r\nKPX Ncaron Amacron -30\r\nKPX Ncaron Aogonek -30\r\nKPX Ncaron Aring -30\r\nKPX Ncaron Atilde -30\r\nKPX Ncommaaccent A -30\r\nKPX Ncommaaccent Aacute -30\r\nKPX Ncommaaccent Abreve -30\r\nKPX Ncommaaccent Acircumflex -30\r\nKPX Ncommaaccent Adieresis -30\r\nKPX Ncommaaccent Agrave -30\r\nKPX Ncommaaccent Amacron -30\r\nKPX Ncommaaccent Aogonek -30\r\nKPX Ncommaaccent Aring -30\r\nKPX Ncommaaccent Atilde -30\r\nKPX Ntilde A -30\r\nKPX Ntilde Aacute -30\r\nKPX Ntilde Abreve -30\r\nKPX Ntilde Acircumflex -30\r\nKPX Ntilde Adieresis -30\r\nKPX Ntilde Agrave -30\r\nKPX Ntilde Amacron -30\r\nKPX Ntilde Aogonek -30\r\nKPX Ntilde Aring -30\r\nKPX Ntilde Atilde -30\r\nKPX O A -40\r\nKPX O Aacute -40\r\nKPX O Abreve -40\r\nKPX O Acircumflex -40\r\nKPX O Adieresis -40\r\nKPX O Agrave -40\r\nKPX O Amacron -40\r\nKPX O Aogonek -40\r\nKPX O Aring -40\r\nKPX O Atilde -40\r\nKPX O T -40\r\nKPX O Tcaron -40\r\nKPX O Tcommaaccent -40\r\nKPX O V -50\r\nKPX O W -50\r\nKPX O X -40\r\nKPX O Y -50\r\nKPX O Yacute -50\r\nKPX O Ydieresis -50\r\nKPX Oacute A -40\r\nKPX Oacute Aacute -40\r\nKPX Oacute Abreve -40\r\nKPX Oacute Acircumflex -40\r\nKPX Oacute Adieresis -40\r\nKPX Oacute Agrave -40\r\nKPX Oacute Amacron -40\r\nKPX Oacute Aogonek -40\r\nKPX Oacute Aring -40\r\nKPX Oacute Atilde -40\r\nKPX Oacute T -40\r\nKPX Oacute Tcaron -40\r\nKPX Oacute Tcommaaccent -40\r\nKPX Oacute V -50\r\nKPX Oacute W -50\r\nKPX Oacute X -40\r\nKPX Oacute Y -50\r\nKPX Oacute Yacute -50\r\nKPX Oacute Ydieresis -50\r\nKPX Ocircumflex A -40\r\nKPX Ocircumflex Aacute -40\r\nKPX Ocircumflex Abreve -40\r\nKPX Ocircumflex Acircumflex -40\r\nKPX Ocircumflex Adieresis -40\r\nKPX Ocircumflex Agrave -40\r\nKPX Ocircumflex Amacron -40\r\nKPX Ocircumflex Aogonek -40\r\nKPX Ocircumflex Aring -40\r\nKPX Ocircumflex Atilde -40\r\nKPX Ocircumflex T -40\r\nKPX Ocircumflex Tcaron -40\r\nKPX Ocircumflex Tcommaaccent -40\r\nKPX Ocircumflex V -50\r\nKPX Ocircumflex W -50\r\nKPX Ocircumflex X -40\r\nKPX Ocircumflex Y -50\r\nKPX Ocircumflex Yacute -50\r\nKPX Ocircumflex Ydieresis -50\r\nKPX Odieresis A -40\r\nKPX Odieresis Aacute -40\r\nKPX Odieresis Abreve -40\r\nKPX Odieresis Acircumflex -40\r\nKPX Odieresis Adieresis -40\r\nKPX Odieresis Agrave -40\r\nKPX Odieresis Amacron -40\r\nKPX Odieresis Aogonek -40\r\nKPX Odieresis Aring -40\r\nKPX Odieresis Atilde -40\r\nKPX Odieresis T -40\r\nKPX Odieresis Tcaron -40\r\nKPX Odieresis Tcommaaccent -40\r\nKPX Odieresis V -50\r\nKPX Odieresis W -50\r\nKPX Odieresis X -40\r\nKPX Odieresis Y -50\r\nKPX Odieresis Yacute -50\r\nKPX Odieresis Ydieresis -50\r\nKPX Ograve A -40\r\nKPX Ograve Aacute -40\r\nKPX Ograve Abreve -40\r\nKPX Ograve Acircumflex -40\r\nKPX Ograve Adieresis -40\r\nKPX Ograve Agrave -40\r\nKPX Ograve Amacron -40\r\nKPX Ograve Aogonek -40\r\nKPX Ograve Aring -40\r\nKPX Ograve Atilde -40\r\nKPX Ograve T -40\r\nKPX Ograve Tcaron -40\r\nKPX Ograve Tcommaaccent -40\r\nKPX Ograve V -50\r\nKPX Ograve W -50\r\nKPX Ograve X -40\r\nKPX Ograve Y -50\r\nKPX Ograve Yacute -50\r\nKPX Ograve Ydieresis -50\r\nKPX Ohungarumlaut A -40\r\nKPX Ohungarumlaut Aacute -40\r\nKPX Ohungarumlaut Abreve -40\r\nKPX Ohungarumlaut Acircumflex -40\r\nKPX Ohungarumlaut Adieresis -40\r\nKPX Ohungarumlaut Agrave -40\r\nKPX Ohungarumlaut Amacron -40\r\nKPX Ohungarumlaut Aogonek -40\r\nKPX Ohungarumlaut Aring -40\r\nKPX Ohungarumlaut Atilde -40\r\nKPX Ohungarumlaut T -40\r\nKPX Ohungarumlaut Tcaron -40\r\nKPX Ohungarumlaut Tcommaaccent -40\r\nKPX Ohungarumlaut V -50\r\nKPX Ohungarumlaut W -50\r\nKPX Ohungarumlaut X -40\r\nKPX Ohungarumlaut Y -50\r\nKPX Ohungarumlaut Yacute -50\r\nKPX Ohungarumlaut Ydieresis -50\r\nKPX Omacron A -40\r\nKPX Omacron Aacute -40\r\nKPX Omacron Abreve -40\r\nKPX Omacron Acircumflex -40\r\nKPX Omacron Adieresis -40\r\nKPX Omacron Agrave -40\r\nKPX Omacron Amacron -40\r\nKPX Omacron Aogonek -40\r\nKPX Omacron Aring -40\r\nKPX Omacron Atilde -40\r\nKPX Omacron T -40\r\nKPX Omacron Tcaron -40\r\nKPX Omacron Tcommaaccent -40\r\nKPX Omacron V -50\r\nKPX Omacron W -50\r\nKPX Omacron X -40\r\nKPX Omacron Y -50\r\nKPX Omacron Yacute -50\r\nKPX Omacron Ydieresis -50\r\nKPX Oslash A -40\r\nKPX Oslash Aacute -40\r\nKPX Oslash Abreve -40\r\nKPX Oslash Acircumflex -40\r\nKPX Oslash Adieresis -40\r\nKPX Oslash Agrave -40\r\nKPX Oslash Amacron -40\r\nKPX Oslash Aogonek -40\r\nKPX Oslash Aring -40\r\nKPX Oslash Atilde -40\r\nKPX Oslash T -40\r\nKPX Oslash Tcaron -40\r\nKPX Oslash Tcommaaccent -40\r\nKPX Oslash V -50\r\nKPX Oslash W -50\r\nKPX Oslash X -40\r\nKPX Oslash Y -50\r\nKPX Oslash Yacute -50\r\nKPX Oslash Ydieresis -50\r\nKPX Otilde A -40\r\nKPX Otilde Aacute -40\r\nKPX Otilde Abreve -40\r\nKPX Otilde Acircumflex -40\r\nKPX Otilde Adieresis -40\r\nKPX Otilde Agrave -40\r\nKPX Otilde Amacron -40\r\nKPX Otilde Aogonek -40\r\nKPX Otilde Aring -40\r\nKPX Otilde Atilde -40\r\nKPX Otilde T -40\r\nKPX Otilde Tcaron -40\r\nKPX Otilde Tcommaaccent -40\r\nKPX Otilde V -50\r\nKPX Otilde W -50\r\nKPX Otilde X -40\r\nKPX Otilde Y -50\r\nKPX Otilde Yacute -50\r\nKPX Otilde Ydieresis -50\r\nKPX P A -85\r\nKPX P Aacute -85\r\nKPX P Abreve -85\r\nKPX P Acircumflex -85\r\nKPX P Adieresis -85\r\nKPX P Agrave -85\r\nKPX P Amacron -85\r\nKPX P Aogonek -85\r\nKPX P Aring -85\r\nKPX P Atilde -85\r\nKPX P a -40\r\nKPX P aacute -40\r\nKPX P abreve -40\r\nKPX P acircumflex -40\r\nKPX P adieresis -40\r\nKPX P agrave -40\r\nKPX P amacron -40\r\nKPX P aogonek -40\r\nKPX P aring -40\r\nKPX P atilde -40\r\nKPX P comma -129\r\nKPX P e -50\r\nKPX P eacute -50\r\nKPX P ecaron -50\r\nKPX P ecircumflex -50\r\nKPX P edieresis -50\r\nKPX P edotaccent -50\r\nKPX P egrave -50\r\nKPX P emacron -50\r\nKPX P eogonek -50\r\nKPX P o -55\r\nKPX P oacute -55\r\nKPX P ocircumflex -55\r\nKPX P odieresis -55\r\nKPX P ograve -55\r\nKPX P ohungarumlaut -55\r\nKPX P omacron -55\r\nKPX P oslash -55\r\nKPX P otilde -55\r\nKPX P period -129\r\nKPX Q U -10\r\nKPX Q Uacute -10\r\nKPX Q Ucircumflex -10\r\nKPX Q Udieresis -10\r\nKPX Q Ugrave -10\r\nKPX Q Uhungarumlaut -10\r\nKPX Q Umacron -10\r\nKPX Q Uogonek -10\r\nKPX Q Uring -10\r\nKPX R O -40\r\nKPX R Oacute -40\r\nKPX R Ocircumflex -40\r\nKPX R Odieresis -40\r\nKPX R Ograve -40\r\nKPX R Ohungarumlaut -40\r\nKPX R Omacron -40\r\nKPX R Oslash -40\r\nKPX R Otilde -40\r\nKPX R T -30\r\nKPX R Tcaron -30\r\nKPX R Tcommaaccent -30\r\nKPX R U -40\r\nKPX R Uacute -40\r\nKPX R Ucircumflex -40\r\nKPX R Udieresis -40\r\nKPX R Ugrave -40\r\nKPX R Uhungarumlaut -40\r\nKPX R Umacron -40\r\nKPX R Uogonek -40\r\nKPX R Uring -40\r\nKPX R V -18\r\nKPX R W -18\r\nKPX R Y -18\r\nKPX R Yacute -18\r\nKPX R Ydieresis -18\r\nKPX Racute O -40\r\nKPX Racute Oacute -40\r\nKPX Racute Ocircumflex -40\r\nKPX Racute Odieresis -40\r\nKPX Racute Ograve -40\r\nKPX Racute Ohungarumlaut -40\r\nKPX Racute Omacron -40\r\nKPX Racute Oslash -40\r\nKPX Racute Otilde -40\r\nKPX Racute T -30\r\nKPX Racute Tcaron -30\r\nKPX Racute Tcommaaccent -30\r\nKPX Racute U -40\r\nKPX Racute Uacute -40\r\nKPX Racute Ucircumflex -40\r\nKPX Racute Udieresis -40\r\nKPX Racute Ugrave -40\r\nKPX Racute Uhungarumlaut -40\r\nKPX Racute Umacron -40\r\nKPX Racute Uogonek -40\r\nKPX Racute Uring -40\r\nKPX Racute V -18\r\nKPX Racute W -18\r\nKPX Racute Y -18\r\nKPX Racute Yacute -18\r\nKPX Racute Ydieresis -18\r\nKPX Rcaron O -40\r\nKPX Rcaron Oacute -40\r\nKPX Rcaron Ocircumflex -40\r\nKPX Rcaron Odieresis -40\r\nKPX Rcaron Ograve -40\r\nKPX Rcaron Ohungarumlaut -40\r\nKPX Rcaron Omacron -40\r\nKPX Rcaron Oslash -40\r\nKPX Rcaron Otilde -40\r\nKPX Rcaron T -30\r\nKPX Rcaron Tcaron -30\r\nKPX Rcaron Tcommaaccent -30\r\nKPX Rcaron U -40\r\nKPX Rcaron Uacute -40\r\nKPX Rcaron Ucircumflex -40\r\nKPX Rcaron Udieresis -40\r\nKPX Rcaron Ugrave -40\r\nKPX Rcaron Uhungarumlaut -40\r\nKPX Rcaron Umacron -40\r\nKPX Rcaron Uogonek -40\r\nKPX Rcaron Uring -40\r\nKPX Rcaron V -18\r\nKPX Rcaron W -18\r\nKPX Rcaron Y -18\r\nKPX Rcaron Yacute -18\r\nKPX Rcaron Ydieresis -18\r\nKPX Rcommaaccent O -40\r\nKPX Rcommaaccent Oacute -40\r\nKPX Rcommaaccent Ocircumflex -40\r\nKPX Rcommaaccent Odieresis -40\r\nKPX Rcommaaccent Ograve -40\r\nKPX Rcommaaccent Ohungarumlaut -40\r\nKPX Rcommaaccent Omacron -40\r\nKPX Rcommaaccent Oslash -40\r\nKPX Rcommaaccent Otilde -40\r\nKPX Rcommaaccent T -30\r\nKPX Rcommaaccent Tcaron -30\r\nKPX Rcommaaccent Tcommaaccent -30\r\nKPX Rcommaaccent U -40\r\nKPX Rcommaaccent Uacute -40\r\nKPX Rcommaaccent Ucircumflex -40\r\nKPX Rcommaaccent Udieresis -40\r\nKPX Rcommaaccent Ugrave -40\r\nKPX Rcommaaccent Uhungarumlaut -40\r\nKPX Rcommaaccent Umacron -40\r\nKPX Rcommaaccent Uogonek -40\r\nKPX Rcommaaccent Uring -40\r\nKPX Rcommaaccent V -18\r\nKPX Rcommaaccent W -18\r\nKPX Rcommaaccent Y -18\r\nKPX Rcommaaccent Yacute -18\r\nKPX Rcommaaccent Ydieresis -18\r\nKPX T A -55\r\nKPX T Aacute -55\r\nKPX T Abreve -55\r\nKPX T Acircumflex -55\r\nKPX T Adieresis -55\r\nKPX T Agrave -55\r\nKPX T Amacron -55\r\nKPX T Aogonek -55\r\nKPX T Aring -55\r\nKPX T Atilde -55\r\nKPX T O -18\r\nKPX T Oacute -18\r\nKPX T Ocircumflex -18\r\nKPX T Odieresis -18\r\nKPX T Ograve -18\r\nKPX T Ohungarumlaut -18\r\nKPX T Omacron -18\r\nKPX T Oslash -18\r\nKPX T Otilde -18\r\nKPX T a -92\r\nKPX T aacute -92\r\nKPX T abreve -92\r\nKPX T acircumflex -92\r\nKPX T adieresis -92\r\nKPX T agrave -92\r\nKPX T amacron -92\r\nKPX T aogonek -92\r\nKPX T aring -92\r\nKPX T atilde -92\r\nKPX T colon -74\r\nKPX T comma -92\r\nKPX T e -92\r\nKPX T eacute -92\r\nKPX T ecaron -92\r\nKPX T ecircumflex -92\r\nKPX T edieresis -52\r\nKPX T edotaccent -92\r\nKPX T egrave -52\r\nKPX T emacron -52\r\nKPX T eogonek -92\r\nKPX T hyphen -92\r\nKPX T i -37\r\nKPX T iacute -37\r\nKPX T iogonek -37\r\nKPX T o -95\r\nKPX T oacute -95\r\nKPX T ocircumflex -95\r\nKPX T odieresis -95\r\nKPX T ograve -95\r\nKPX T ohungarumlaut -95\r\nKPX T omacron -95\r\nKPX T oslash -95\r\nKPX T otilde -95\r\nKPX T period -92\r\nKPX T r -37\r\nKPX T racute -37\r\nKPX T rcaron -37\r\nKPX T rcommaaccent -37\r\nKPX T semicolon -74\r\nKPX T u -37\r\nKPX T uacute -37\r\nKPX T ucircumflex -37\r\nKPX T udieresis -37\r\nKPX T ugrave -37\r\nKPX T uhungarumlaut -37\r\nKPX T umacron -37\r\nKPX T uogonek -37\r\nKPX T uring -37\r\nKPX T w -37\r\nKPX T y -37\r\nKPX T yacute -37\r\nKPX T ydieresis -37\r\nKPX Tcaron A -55\r\nKPX Tcaron Aacute -55\r\nKPX Tcaron Abreve -55\r\nKPX Tcaron Acircumflex -55\r\nKPX Tcaron Adieresis -55\r\nKPX Tcaron Agrave -55\r\nKPX Tcaron Amacron -55\r\nKPX Tcaron Aogonek -55\r\nKPX Tcaron Aring -55\r\nKPX Tcaron Atilde -55\r\nKPX Tcaron O -18\r\nKPX Tcaron Oacute -18\r\nKPX Tcaron Ocircumflex -18\r\nKPX Tcaron Odieresis -18\r\nKPX Tcaron Ograve -18\r\nKPX Tcaron Ohungarumlaut -18\r\nKPX Tcaron Omacron -18\r\nKPX Tcaron Oslash -18\r\nKPX Tcaron Otilde -18\r\nKPX Tcaron a -92\r\nKPX Tcaron aacute -92\r\nKPX Tcaron abreve -92\r\nKPX Tcaron acircumflex -92\r\nKPX Tcaron adieresis -92\r\nKPX Tcaron agrave -92\r\nKPX Tcaron amacron -92\r\nKPX Tcaron aogonek -92\r\nKPX Tcaron aring -92\r\nKPX Tcaron atilde -92\r\nKPX Tcaron colon -74\r\nKPX Tcaron comma -92\r\nKPX Tcaron e -92\r\nKPX Tcaron eacute -92\r\nKPX Tcaron ecaron -92\r\nKPX Tcaron ecircumflex -92\r\nKPX Tcaron edieresis -52\r\nKPX Tcaron edotaccent -92\r\nKPX Tcaron egrave -52\r\nKPX Tcaron emacron -52\r\nKPX Tcaron eogonek -92\r\nKPX Tcaron hyphen -92\r\nKPX Tcaron i -37\r\nKPX Tcaron iacute -37\r\nKPX Tcaron iogonek -37\r\nKPX Tcaron o -95\r\nKPX Tcaron oacute -95\r\nKPX Tcaron ocircumflex -95\r\nKPX Tcaron odieresis -95\r\nKPX Tcaron ograve -95\r\nKPX Tcaron ohungarumlaut -95\r\nKPX Tcaron omacron -95\r\nKPX Tcaron oslash -95\r\nKPX Tcaron otilde -95\r\nKPX Tcaron period -92\r\nKPX Tcaron r -37\r\nKPX Tcaron racute -37\r\nKPX Tcaron rcaron -37\r\nKPX Tcaron rcommaaccent -37\r\nKPX Tcaron semicolon -74\r\nKPX Tcaron u -37\r\nKPX Tcaron uacute -37\r\nKPX Tcaron ucircumflex -37\r\nKPX Tcaron udieresis -37\r\nKPX Tcaron ugrave -37\r\nKPX Tcaron uhungarumlaut -37\r\nKPX Tcaron umacron -37\r\nKPX Tcaron uogonek -37\r\nKPX Tcaron uring -37\r\nKPX Tcaron w -37\r\nKPX Tcaron y -37\r\nKPX Tcaron yacute -37\r\nKPX Tcaron ydieresis -37\r\nKPX Tcommaaccent A -55\r\nKPX Tcommaaccent Aacute -55\r\nKPX Tcommaaccent Abreve -55\r\nKPX Tcommaaccent Acircumflex -55\r\nKPX Tcommaaccent Adieresis -55\r\nKPX Tcommaaccent Agrave -55\r\nKPX Tcommaaccent Amacron -55\r\nKPX Tcommaaccent Aogonek -55\r\nKPX Tcommaaccent Aring -55\r\nKPX Tcommaaccent Atilde -55\r\nKPX Tcommaaccent O -18\r\nKPX Tcommaaccent Oacute -18\r\nKPX Tcommaaccent Ocircumflex -18\r\nKPX Tcommaaccent Odieresis -18\r\nKPX Tcommaaccent Ograve -18\r\nKPX Tcommaaccent Ohungarumlaut -18\r\nKPX Tcommaaccent Omacron -18\r\nKPX Tcommaaccent Oslash -18\r\nKPX Tcommaaccent Otilde -18\r\nKPX Tcommaaccent a -92\r\nKPX Tcommaaccent aacute -92\r\nKPX Tcommaaccent abreve -92\r\nKPX Tcommaaccent acircumflex -92\r\nKPX Tcommaaccent adieresis -92\r\nKPX Tcommaaccent agrave -92\r\nKPX Tcommaaccent amacron -92\r\nKPX Tcommaaccent aogonek -92\r\nKPX Tcommaaccent aring -92\r\nKPX Tcommaaccent atilde -92\r\nKPX Tcommaaccent colon -74\r\nKPX Tcommaaccent comma -92\r\nKPX Tcommaaccent e -92\r\nKPX Tcommaaccent eacute -92\r\nKPX Tcommaaccent ecaron -92\r\nKPX Tcommaaccent ecircumflex -92\r\nKPX Tcommaaccent edieresis -52\r\nKPX Tcommaaccent edotaccent -92\r\nKPX Tcommaaccent egrave -52\r\nKPX Tcommaaccent emacron -52\r\nKPX Tcommaaccent eogonek -92\r\nKPX Tcommaaccent hyphen -92\r\nKPX Tcommaaccent i -37\r\nKPX Tcommaaccent iacute -37\r\nKPX Tcommaaccent iogonek -37\r\nKPX Tcommaaccent o -95\r\nKPX Tcommaaccent oacute -95\r\nKPX Tcommaaccent ocircumflex -95\r\nKPX Tcommaaccent odieresis -95\r\nKPX Tcommaaccent ograve -95\r\nKPX Tcommaaccent ohungarumlaut -95\r\nKPX Tcommaaccent omacron -95\r\nKPX Tcommaaccent oslash -95\r\nKPX Tcommaaccent otilde -95\r\nKPX Tcommaaccent period -92\r\nKPX Tcommaaccent r -37\r\nKPX Tcommaaccent racute -37\r\nKPX Tcommaaccent rcaron -37\r\nKPX Tcommaaccent rcommaaccent -37\r\nKPX Tcommaaccent semicolon -74\r\nKPX Tcommaaccent u -37\r\nKPX Tcommaaccent uacute -37\r\nKPX Tcommaaccent ucircumflex -37\r\nKPX Tcommaaccent udieresis -37\r\nKPX Tcommaaccent ugrave -37\r\nKPX Tcommaaccent uhungarumlaut -37\r\nKPX Tcommaaccent umacron -37\r\nKPX Tcommaaccent uogonek -37\r\nKPX Tcommaaccent uring -37\r\nKPX Tcommaaccent w -37\r\nKPX Tcommaaccent y -37\r\nKPX Tcommaaccent yacute -37\r\nKPX Tcommaaccent ydieresis -37\r\nKPX U A -45\r\nKPX U Aacute -45\r\nKPX U Abreve -45\r\nKPX U Acircumflex -45\r\nKPX U Adieresis -45\r\nKPX U Agrave -45\r\nKPX U Amacron -45\r\nKPX U Aogonek -45\r\nKPX U Aring -45\r\nKPX U Atilde -45\r\nKPX Uacute A -45\r\nKPX Uacute Aacute -45\r\nKPX Uacute Abreve -45\r\nKPX Uacute Acircumflex -45\r\nKPX Uacute Adieresis -45\r\nKPX Uacute Agrave -45\r\nKPX Uacute Amacron -45\r\nKPX Uacute Aogonek -45\r\nKPX Uacute Aring -45\r\nKPX Uacute Atilde -45\r\nKPX Ucircumflex A -45\r\nKPX Ucircumflex Aacute -45\r\nKPX Ucircumflex Abreve -45\r\nKPX Ucircumflex Acircumflex -45\r\nKPX Ucircumflex Adieresis -45\r\nKPX Ucircumflex Agrave -45\r\nKPX Ucircumflex Amacron -45\r\nKPX Ucircumflex Aogonek -45\r\nKPX Ucircumflex Aring -45\r\nKPX Ucircumflex Atilde -45\r\nKPX Udieresis A -45\r\nKPX Udieresis Aacute -45\r\nKPX Udieresis Abreve -45\r\nKPX Udieresis Acircumflex -45\r\nKPX Udieresis Adieresis -45\r\nKPX Udieresis Agrave -45\r\nKPX Udieresis Amacron -45\r\nKPX Udieresis Aogonek -45\r\nKPX Udieresis Aring -45\r\nKPX Udieresis Atilde -45\r\nKPX Ugrave A -45\r\nKPX Ugrave Aacute -45\r\nKPX Ugrave Abreve -45\r\nKPX Ugrave Acircumflex -45\r\nKPX Ugrave Adieresis -45\r\nKPX Ugrave Agrave -45\r\nKPX Ugrave Amacron -45\r\nKPX Ugrave Aogonek -45\r\nKPX Ugrave Aring -45\r\nKPX Ugrave Atilde -45\r\nKPX Uhungarumlaut A -45\r\nKPX Uhungarumlaut Aacute -45\r\nKPX Uhungarumlaut Abreve -45\r\nKPX Uhungarumlaut Acircumflex -45\r\nKPX Uhungarumlaut Adieresis -45\r\nKPX Uhungarumlaut Agrave -45\r\nKPX Uhungarumlaut Amacron -45\r\nKPX Uhungarumlaut Aogonek -45\r\nKPX Uhungarumlaut Aring -45\r\nKPX Uhungarumlaut Atilde -45\r\nKPX Umacron A -45\r\nKPX Umacron Aacute -45\r\nKPX Umacron Abreve -45\r\nKPX Umacron Acircumflex -45\r\nKPX Umacron Adieresis -45\r\nKPX Umacron Agrave -45\r\nKPX Umacron Amacron -45\r\nKPX Umacron Aogonek -45\r\nKPX Umacron Aring -45\r\nKPX Umacron Atilde -45\r\nKPX Uogonek A -45\r\nKPX Uogonek Aacute -45\r\nKPX Uogonek Abreve -45\r\nKPX Uogonek Acircumflex -45\r\nKPX Uogonek Adieresis -45\r\nKPX Uogonek Agrave -45\r\nKPX Uogonek Amacron -45\r\nKPX Uogonek Aogonek -45\r\nKPX Uogonek Aring -45\r\nKPX Uogonek Atilde -45\r\nKPX Uring A -45\r\nKPX Uring Aacute -45\r\nKPX Uring Abreve -45\r\nKPX Uring Acircumflex -45\r\nKPX Uring Adieresis -45\r\nKPX Uring Agrave -45\r\nKPX Uring Amacron -45\r\nKPX Uring Aogonek -45\r\nKPX Uring Aring -45\r\nKPX Uring Atilde -45\r\nKPX V A -85\r\nKPX V Aacute -85\r\nKPX V Abreve -85\r\nKPX V Acircumflex -85\r\nKPX V Adieresis -85\r\nKPX V Agrave -85\r\nKPX V Amacron -85\r\nKPX V Aogonek -85\r\nKPX V Aring -85\r\nKPX V Atilde -85\r\nKPX V G -10\r\nKPX V Gbreve -10\r\nKPX V Gcommaaccent -10\r\nKPX V O -30\r\nKPX V Oacute -30\r\nKPX V Ocircumflex -30\r\nKPX V Odieresis -30\r\nKPX V Ograve -30\r\nKPX V Ohungarumlaut -30\r\nKPX V Omacron -30\r\nKPX V Oslash -30\r\nKPX V Otilde -30\r\nKPX V a -111\r\nKPX V aacute -111\r\nKPX V abreve -111\r\nKPX V acircumflex -111\r\nKPX V adieresis -111\r\nKPX V agrave -111\r\nKPX V amacron -111\r\nKPX V aogonek -111\r\nKPX V aring -111\r\nKPX V atilde -111\r\nKPX V colon -74\r\nKPX V comma -129\r\nKPX V e -111\r\nKPX V eacute -111\r\nKPX V ecaron -111\r\nKPX V ecircumflex -111\r\nKPX V edieresis -71\r\nKPX V edotaccent -111\r\nKPX V egrave -71\r\nKPX V emacron -71\r\nKPX V eogonek -111\r\nKPX V hyphen -70\r\nKPX V i -55\r\nKPX V iacute -55\r\nKPX V iogonek -55\r\nKPX V o -111\r\nKPX V oacute -111\r\nKPX V ocircumflex -111\r\nKPX V odieresis -111\r\nKPX V ograve -111\r\nKPX V ohungarumlaut -111\r\nKPX V omacron -111\r\nKPX V oslash -111\r\nKPX V otilde -111\r\nKPX V period -129\r\nKPX V semicolon -74\r\nKPX V u -55\r\nKPX V uacute -55\r\nKPX V ucircumflex -55\r\nKPX V udieresis -55\r\nKPX V ugrave -55\r\nKPX V uhungarumlaut -55\r\nKPX V umacron -55\r\nKPX V uogonek -55\r\nKPX V uring -55\r\nKPX W A -74\r\nKPX W Aacute -74\r\nKPX W Abreve -74\r\nKPX W Acircumflex -74\r\nKPX W Adieresis -74\r\nKPX W Agrave -74\r\nKPX W Amacron -74\r\nKPX W Aogonek -74\r\nKPX W Aring -74\r\nKPX W Atilde -74\r\nKPX W O -15\r\nKPX W Oacute -15\r\nKPX W Ocircumflex -15\r\nKPX W Odieresis -15\r\nKPX W Ograve -15\r\nKPX W Ohungarumlaut -15\r\nKPX W Omacron -15\r\nKPX W Oslash -15\r\nKPX W Otilde -15\r\nKPX W a -85\r\nKPX W aacute -85\r\nKPX W abreve -85\r\nKPX W acircumflex -85\r\nKPX W adieresis -85\r\nKPX W agrave -85\r\nKPX W amacron -85\r\nKPX W aogonek -85\r\nKPX W aring -85\r\nKPX W atilde -85\r\nKPX W colon -55\r\nKPX W comma -74\r\nKPX W e -90\r\nKPX W eacute -90\r\nKPX W ecaron -90\r\nKPX W ecircumflex -90\r\nKPX W edieresis -50\r\nKPX W edotaccent -90\r\nKPX W egrave -50\r\nKPX W emacron -50\r\nKPX W eogonek -90\r\nKPX W hyphen -50\r\nKPX W i -37\r\nKPX W iacute -37\r\nKPX W iogonek -37\r\nKPX W o -80\r\nKPX W oacute -80\r\nKPX W ocircumflex -80\r\nKPX W odieresis -80\r\nKPX W ograve -80\r\nKPX W ohungarumlaut -80\r\nKPX W omacron -80\r\nKPX W oslash -80\r\nKPX W otilde -80\r\nKPX W period -74\r\nKPX W semicolon -55\r\nKPX W u -55\r\nKPX W uacute -55\r\nKPX W ucircumflex -55\r\nKPX W udieresis -55\r\nKPX W ugrave -55\r\nKPX W uhungarumlaut -55\r\nKPX W umacron -55\r\nKPX W uogonek -55\r\nKPX W uring -55\r\nKPX W y -55\r\nKPX W yacute -55\r\nKPX W ydieresis -55\r\nKPX Y A -74\r\nKPX Y Aacute -74\r\nKPX Y Abreve -74\r\nKPX Y Acircumflex -74\r\nKPX Y Adieresis -74\r\nKPX Y Agrave -74\r\nKPX Y Amacron -74\r\nKPX Y Aogonek -74\r\nKPX Y Aring -74\r\nKPX Y Atilde -74\r\nKPX Y O -25\r\nKPX Y Oacute -25\r\nKPX Y Ocircumflex -25\r\nKPX Y Odieresis -25\r\nKPX Y Ograve -25\r\nKPX Y Ohungarumlaut -25\r\nKPX Y Omacron -25\r\nKPX Y Oslash -25\r\nKPX Y Otilde -25\r\nKPX Y a -92\r\nKPX Y aacute -92\r\nKPX Y abreve -92\r\nKPX Y acircumflex -92\r\nKPX Y adieresis -92\r\nKPX Y agrave -92\r\nKPX Y amacron -92\r\nKPX Y aogonek -92\r\nKPX Y aring -92\r\nKPX Y atilde -92\r\nKPX Y colon -92\r\nKPX Y comma -92\r\nKPX Y e -111\r\nKPX Y eacute -111\r\nKPX Y ecaron -111\r\nKPX Y ecircumflex -71\r\nKPX Y edieresis -71\r\nKPX Y edotaccent -111\r\nKPX Y egrave -71\r\nKPX Y emacron -71\r\nKPX Y eogonek -111\r\nKPX Y hyphen -92\r\nKPX Y i -55\r\nKPX Y iacute -55\r\nKPX Y iogonek -55\r\nKPX Y o -111\r\nKPX Y oacute -111\r\nKPX Y ocircumflex -111\r\nKPX Y odieresis -111\r\nKPX Y ograve -111\r\nKPX Y ohungarumlaut -111\r\nKPX Y omacron -111\r\nKPX Y oslash -111\r\nKPX Y otilde -111\r\nKPX Y period -74\r\nKPX Y semicolon -92\r\nKPX Y u -92\r\nKPX Y uacute -92\r\nKPX Y ucircumflex -92\r\nKPX Y udieresis -92\r\nKPX Y ugrave -92\r\nKPX Y uhungarumlaut -92\r\nKPX Y umacron -92\r\nKPX Y uogonek -92\r\nKPX Y uring -92\r\nKPX Yacute A -74\r\nKPX Yacute Aacute -74\r\nKPX Yacute Abreve -74\r\nKPX Yacute Acircumflex -74\r\nKPX Yacute Adieresis -74\r\nKPX Yacute Agrave -74\r\nKPX Yacute Amacron -74\r\nKPX Yacute Aogonek -74\r\nKPX Yacute Aring -74\r\nKPX Yacute Atilde -74\r\nKPX Yacute O -25\r\nKPX Yacute Oacute -25\r\nKPX Yacute Ocircumflex -25\r\nKPX Yacute Odieresis -25\r\nKPX Yacute Ograve -25\r\nKPX Yacute Ohungarumlaut -25\r\nKPX Yacute Omacron -25\r\nKPX Yacute Oslash -25\r\nKPX Yacute Otilde -25\r\nKPX Yacute a -92\r\nKPX Yacute aacute -92\r\nKPX Yacute abreve -92\r\nKPX Yacute acircumflex -92\r\nKPX Yacute adieresis -92\r\nKPX Yacute agrave -92\r\nKPX Yacute amacron -92\r\nKPX Yacute aogonek -92\r\nKPX Yacute aring -92\r\nKPX Yacute atilde -92\r\nKPX Yacute colon -92\r\nKPX Yacute comma -92\r\nKPX Yacute e -111\r\nKPX Yacute eacute -111\r\nKPX Yacute ecaron -111\r\nKPX Yacute ecircumflex -71\r\nKPX Yacute edieresis -71\r\nKPX Yacute edotaccent -111\r\nKPX Yacute egrave -71\r\nKPX Yacute emacron -71\r\nKPX Yacute eogonek -111\r\nKPX Yacute hyphen -92\r\nKPX Yacute i -55\r\nKPX Yacute iacute -55\r\nKPX Yacute iogonek -55\r\nKPX Yacute o -111\r\nKPX Yacute oacute -111\r\nKPX Yacute ocircumflex -111\r\nKPX Yacute odieresis -111\r\nKPX Yacute ograve -111\r\nKPX Yacute ohungarumlaut -111\r\nKPX Yacute omacron -111\r\nKPX Yacute oslash -111\r\nKPX Yacute otilde -111\r\nKPX Yacute period -74\r\nKPX Yacute semicolon -92\r\nKPX Yacute u -92\r\nKPX Yacute uacute -92\r\nKPX Yacute ucircumflex -92\r\nKPX Yacute udieresis -92\r\nKPX Yacute ugrave -92\r\nKPX Yacute uhungarumlaut -92\r\nKPX Yacute umacron -92\r\nKPX Yacute uogonek -92\r\nKPX Yacute uring -92\r\nKPX Ydieresis A -74\r\nKPX Ydieresis Aacute -74\r\nKPX Ydieresis Abreve -74\r\nKPX Ydieresis Acircumflex -74\r\nKPX Ydieresis Adieresis -74\r\nKPX Ydieresis Agrave -74\r\nKPX Ydieresis Amacron -74\r\nKPX Ydieresis Aogonek -74\r\nKPX Ydieresis Aring -74\r\nKPX Ydieresis Atilde -74\r\nKPX Ydieresis O -25\r\nKPX Ydieresis Oacute -25\r\nKPX Ydieresis Ocircumflex -25\r\nKPX Ydieresis Odieresis -25\r\nKPX Ydieresis Ograve -25\r\nKPX Ydieresis Ohungarumlaut -25\r\nKPX Ydieresis Omacron -25\r\nKPX Ydieresis Oslash -25\r\nKPX Ydieresis Otilde -25\r\nKPX Ydieresis a -92\r\nKPX Ydieresis aacute -92\r\nKPX Ydieresis abreve -92\r\nKPX Ydieresis acircumflex -92\r\nKPX Ydieresis adieresis -92\r\nKPX Ydieresis agrave -92\r\nKPX Ydieresis amacron -92\r\nKPX Ydieresis aogonek -92\r\nKPX Ydieresis aring -92\r\nKPX Ydieresis atilde -92\r\nKPX Ydieresis colon -92\r\nKPX Ydieresis comma -92\r\nKPX Ydieresis e -111\r\nKPX Ydieresis eacute -111\r\nKPX Ydieresis ecaron -111\r\nKPX Ydieresis ecircumflex -71\r\nKPX Ydieresis edieresis -71\r\nKPX Ydieresis edotaccent -111\r\nKPX Ydieresis egrave -71\r\nKPX Ydieresis emacron -71\r\nKPX Ydieresis eogonek -111\r\nKPX Ydieresis hyphen -92\r\nKPX Ydieresis i -55\r\nKPX Ydieresis iacute -55\r\nKPX Ydieresis iogonek -55\r\nKPX Ydieresis o -111\r\nKPX Ydieresis oacute -111\r\nKPX Ydieresis ocircumflex -111\r\nKPX Ydieresis odieresis -111\r\nKPX Ydieresis ograve -111\r\nKPX Ydieresis ohungarumlaut -111\r\nKPX Ydieresis omacron -111\r\nKPX Ydieresis oslash -111\r\nKPX Ydieresis otilde -111\r\nKPX Ydieresis period -74\r\nKPX Ydieresis semicolon -92\r\nKPX Ydieresis u -92\r\nKPX Ydieresis uacute -92\r\nKPX Ydieresis ucircumflex -92\r\nKPX Ydieresis udieresis -92\r\nKPX Ydieresis ugrave -92\r\nKPX Ydieresis uhungarumlaut -92\r\nKPX Ydieresis umacron -92\r\nKPX Ydieresis uogonek -92\r\nKPX Ydieresis uring -92\r\nKPX b b -10\r\nKPX b period -40\r\nKPX b u -20\r\nKPX b uacute -20\r\nKPX b ucircumflex -20\r\nKPX b udieresis -20\r\nKPX b ugrave -20\r\nKPX b uhungarumlaut -20\r\nKPX b umacron -20\r\nKPX b uogonek -20\r\nKPX b uring -20\r\nKPX c h -10\r\nKPX c k -10\r\nKPX c kcommaaccent -10\r\nKPX cacute h -10\r\nKPX cacute k -10\r\nKPX cacute kcommaaccent -10\r\nKPX ccaron h -10\r\nKPX ccaron k -10\r\nKPX ccaron kcommaaccent -10\r\nKPX ccedilla h -10\r\nKPX ccedilla k -10\r\nKPX ccedilla kcommaaccent -10\r\nKPX comma quotedblright -95\r\nKPX comma quoteright -95\r\nKPX e b -10\r\nKPX eacute b -10\r\nKPX ecaron b -10\r\nKPX ecircumflex b -10\r\nKPX edieresis b -10\r\nKPX edotaccent b -10\r\nKPX egrave b -10\r\nKPX emacron b -10\r\nKPX eogonek b -10\r\nKPX f comma -10\r\nKPX f dotlessi -30\r\nKPX f e -10\r\nKPX f eacute -10\r\nKPX f edotaccent -10\r\nKPX f eogonek -10\r\nKPX f f -18\r\nKPX f o -10\r\nKPX f oacute -10\r\nKPX f ocircumflex -10\r\nKPX f ograve -10\r\nKPX f ohungarumlaut -10\r\nKPX f oslash -10\r\nKPX f otilde -10\r\nKPX f period -10\r\nKPX f quoteright 55\r\nKPX k e -30\r\nKPX k eacute -30\r\nKPX k ecaron -30\r\nKPX k ecircumflex -30\r\nKPX k edieresis -30\r\nKPX k edotaccent -30\r\nKPX k egrave -30\r\nKPX k emacron -30\r\nKPX k eogonek -30\r\nKPX k o -10\r\nKPX k oacute -10\r\nKPX k ocircumflex -10\r\nKPX k odieresis -10\r\nKPX k ograve -10\r\nKPX k ohungarumlaut -10\r\nKPX k omacron -10\r\nKPX k oslash -10\r\nKPX k otilde -10\r\nKPX kcommaaccent e -30\r\nKPX kcommaaccent eacute -30\r\nKPX kcommaaccent ecaron -30\r\nKPX kcommaaccent ecircumflex -30\r\nKPX kcommaaccent edieresis -30\r\nKPX kcommaaccent edotaccent -30\r\nKPX kcommaaccent egrave -30\r\nKPX kcommaaccent emacron -30\r\nKPX kcommaaccent eogonek -30\r\nKPX kcommaaccent o -10\r\nKPX kcommaaccent oacute -10\r\nKPX kcommaaccent ocircumflex -10\r\nKPX kcommaaccent odieresis -10\r\nKPX kcommaaccent ograve -10\r\nKPX kcommaaccent ohungarumlaut -10\r\nKPX kcommaaccent omacron -10\r\nKPX kcommaaccent oslash -10\r\nKPX kcommaaccent otilde -10\r\nKPX n v -40\r\nKPX nacute v -40\r\nKPX ncaron v -40\r\nKPX ncommaaccent v -40\r\nKPX ntilde v -40\r\nKPX o v -15\r\nKPX o w -25\r\nKPX o x -10\r\nKPX o y -10\r\nKPX o yacute -10\r\nKPX o ydieresis -10\r\nKPX oacute v -15\r\nKPX oacute w -25\r\nKPX oacute x -10\r\nKPX oacute y -10\r\nKPX oacute yacute -10\r\nKPX oacute ydieresis -10\r\nKPX ocircumflex v -15\r\nKPX ocircumflex w -25\r\nKPX ocircumflex x -10\r\nKPX ocircumflex y -10\r\nKPX ocircumflex yacute -10\r\nKPX ocircumflex ydieresis -10\r\nKPX odieresis v -15\r\nKPX odieresis w -25\r\nKPX odieresis x -10\r\nKPX odieresis y -10\r\nKPX odieresis yacute -10\r\nKPX odieresis ydieresis -10\r\nKPX ograve v -15\r\nKPX ograve w -25\r\nKPX ograve x -10\r\nKPX ograve y -10\r\nKPX ograve yacute -10\r\nKPX ograve ydieresis -10\r\nKPX ohungarumlaut v -15\r\nKPX ohungarumlaut w -25\r\nKPX ohungarumlaut x -10\r\nKPX ohungarumlaut y -10\r\nKPX ohungarumlaut yacute -10\r\nKPX ohungarumlaut ydieresis -10\r\nKPX omacron v -15\r\nKPX omacron w -25\r\nKPX omacron x -10\r\nKPX omacron y -10\r\nKPX omacron yacute -10\r\nKPX omacron ydieresis -10\r\nKPX oslash v -15\r\nKPX oslash w -25\r\nKPX oslash x -10\r\nKPX oslash y -10\r\nKPX oslash yacute -10\r\nKPX oslash ydieresis -10\r\nKPX otilde v -15\r\nKPX otilde w -25\r\nKPX otilde x -10\r\nKPX otilde y -10\r\nKPX otilde yacute -10\r\nKPX otilde ydieresis -10\r\nKPX period quotedblright -95\r\nKPX period quoteright -95\r\nKPX quoteleft quoteleft -74\r\nKPX quoteright d -15\r\nKPX quoteright dcroat -15\r\nKPX quoteright quoteright -74\r\nKPX quoteright r -15\r\nKPX quoteright racute -15\r\nKPX quoteright rcaron -15\r\nKPX quoteright rcommaaccent -15\r\nKPX quoteright s -74\r\nKPX quoteright sacute -74\r\nKPX quoteright scaron -74\r\nKPX quoteright scedilla -74\r\nKPX quoteright scommaaccent -74\r\nKPX quoteright space -74\r\nKPX quoteright t -37\r\nKPX quoteright tcommaaccent -37\r\nKPX quoteright v -15\r\nKPX r comma -65\r\nKPX r period -65\r\nKPX racute comma -65\r\nKPX racute period -65\r\nKPX rcaron comma -65\r\nKPX rcaron period -65\r\nKPX rcommaaccent comma -65\r\nKPX rcommaaccent period -65\r\nKPX space A -37\r\nKPX space Aacute -37\r\nKPX space Abreve -37\r\nKPX space Acircumflex -37\r\nKPX space Adieresis -37\r\nKPX space Agrave -37\r\nKPX space Amacron -37\r\nKPX space Aogonek -37\r\nKPX space Aring -37\r\nKPX space Atilde -37\r\nKPX space V -70\r\nKPX space W -70\r\nKPX space Y -70\r\nKPX space Yacute -70\r\nKPX space Ydieresis -70\r\nKPX v comma -37\r\nKPX v e -15\r\nKPX v eacute -15\r\nKPX v ecaron -15\r\nKPX v ecircumflex -15\r\nKPX v edieresis -15\r\nKPX v edotaccent -15\r\nKPX v egrave -15\r\nKPX v emacron -15\r\nKPX v eogonek -15\r\nKPX v o -15\r\nKPX v oacute -15\r\nKPX v ocircumflex -15\r\nKPX v odieresis -15\r\nKPX v ograve -15\r\nKPX v ohungarumlaut -15\r\nKPX v omacron -15\r\nKPX v oslash -15\r\nKPX v otilde -15\r\nKPX v period -37\r\nKPX w a -10\r\nKPX w aacute -10\r\nKPX w abreve -10\r\nKPX w acircumflex -10\r\nKPX w adieresis -10\r\nKPX w agrave -10\r\nKPX w amacron -10\r\nKPX w aogonek -10\r\nKPX w aring -10\r\nKPX w atilde -10\r\nKPX w comma -37\r\nKPX w e -10\r\nKPX w eacute -10\r\nKPX w ecaron -10\r\nKPX w ecircumflex -10\r\nKPX w edieresis -10\r\nKPX w edotaccent -10\r\nKPX w egrave -10\r\nKPX w emacron -10\r\nKPX w eogonek -10\r\nKPX w o -15\r\nKPX w oacute -15\r\nKPX w ocircumflex -15\r\nKPX w odieresis -15\r\nKPX w ograve -15\r\nKPX w ohungarumlaut -15\r\nKPX w omacron -15\r\nKPX w oslash -15\r\nKPX w otilde -15\r\nKPX w period -37\r\nKPX x e -10\r\nKPX x eacute -10\r\nKPX x ecaron -10\r\nKPX x ecircumflex -10\r\nKPX x edieresis -10\r\nKPX x edotaccent -10\r\nKPX x egrave -10\r\nKPX x emacron -10\r\nKPX x eogonek -10\r\nKPX y comma -37\r\nKPX y period -37\r\nKPX yacute comma -37\r\nKPX yacute period -37\r\nKPX ydieresis comma -37\r\nKPX ydieresis period -37\r\nEndKernPairs\r\nEndKernData\r\nEndFontMetrics\r\n";
2505 },
2506 Symbol() {
2507 return "StartFontMetrics 4.1\r\nComment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All rights reserved.\r\nComment Creation Date: Thu May 1 15:12:25 1997\r\nComment UniqueID 43064\r\nComment VMusage 30820 39997\r\nFontName Symbol\r\nFullName Symbol\r\nFamilyName Symbol\r\nWeight Medium\r\nItalicAngle 0\r\nIsFixedPitch false\r\nCharacterSet Special\r\nFontBBox -180 -293 1090 1010 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 001.008\r\nNotice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All rights reserved.\r\nEncodingScheme FontSpecific\r\nStdHW 92\r\nStdVW 85\r\nStartCharMetrics 190\r\nC 32 ; WX 250 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 333 ; N exclam ; B 128 -17 240 672 ;\r\nC 34 ; WX 713 ; N universal ; B 31 0 681 705 ;\r\nC 35 ; WX 500 ; N numbersign ; B 20 -16 481 673 ;\r\nC 36 ; WX 549 ; N existential ; B 25 0 478 707 ;\r\nC 37 ; WX 833 ; N percent ; B 63 -36 771 655 ;\r\nC 38 ; WX 778 ; N ampersand ; B 41 -18 750 661 ;\r\nC 39 ; WX 439 ; N suchthat ; B 48 -17 414 500 ;\r\nC 40 ; WX 333 ; N parenleft ; B 53 -191 300 673 ;\r\nC 41 ; WX 333 ; N parenright ; B 30 -191 277 673 ;\r\nC 42 ; WX 500 ; N asteriskmath ; B 65 134 427 551 ;\r\nC 43 ; WX 549 ; N plus ; B 10 0 539 533 ;\r\nC 44 ; WX 250 ; N comma ; B 56 -152 194 104 ;\r\nC 45 ; WX 549 ; N minus ; B 11 233 535 288 ;\r\nC 46 ; WX 250 ; N period ; B 69 -17 181 95 ;\r\nC 47 ; WX 278 ; N slash ; B 0 -18 254 646 ;\r\nC 48 ; WX 500 ; N zero ; B 24 -14 476 685 ;\r\nC 49 ; WX 500 ; N one ; B 117 0 390 673 ;\r\nC 50 ; WX 500 ; N two ; B 25 0 475 685 ;\r\nC 51 ; WX 500 ; N three ; B 43 -14 435 685 ;\r\nC 52 ; WX 500 ; N four ; B 15 0 469 685 ;\r\nC 53 ; WX 500 ; N five ; B 32 -14 445 690 ;\r\nC 54 ; WX 500 ; N six ; B 34 -14 468 685 ;\r\nC 55 ; WX 500 ; N seven ; B 24 -16 448 673 ;\r\nC 56 ; WX 500 ; N eight ; B 56 -14 445 685 ;\r\nC 57 ; WX 500 ; N nine ; B 30 -18 459 685 ;\r\nC 58 ; WX 278 ; N colon ; B 81 -17 193 460 ;\r\nC 59 ; WX 278 ; N semicolon ; B 83 -152 221 460 ;\r\nC 60 ; WX 549 ; N less ; B 26 0 523 522 ;\r\nC 61 ; WX 549 ; N equal ; B 11 141 537 390 ;\r\nC 62 ; WX 549 ; N greater ; B 26 0 523 522 ;\r\nC 63 ; WX 444 ; N question ; B 70 -17 412 686 ;\r\nC 64 ; WX 549 ; N congruent ; B 11 0 537 475 ;\r\nC 65 ; WX 722 ; N Alpha ; B 4 0 684 673 ;\r\nC 66 ; WX 667 ; N Beta ; B 29 0 592 673 ;\r\nC 67 ; WX 722 ; N Chi ; B -9 0 704 673 ;\r\nC 68 ; WX 612 ; N Delta ; B 6 0 608 688 ;\r\nC 69 ; WX 611 ; N Epsilon ; B 32 0 617 673 ;\r\nC 70 ; WX 763 ; N Phi ; B 26 0 741 673 ;\r\nC 71 ; WX 603 ; N Gamma ; B 24 0 609 673 ;\r\nC 72 ; WX 722 ; N Eta ; B 39 0 729 673 ;\r\nC 73 ; WX 333 ; N Iota ; B 32 0 316 673 ;\r\nC 74 ; WX 631 ; N theta1 ; B 18 -18 623 689 ;\r\nC 75 ; WX 722 ; N Kappa ; B 35 0 722 673 ;\r\nC 76 ; WX 686 ; N Lambda ; B 6 0 680 688 ;\r\nC 77 ; WX 889 ; N Mu ; B 28 0 887 673 ;\r\nC 78 ; WX 722 ; N Nu ; B 29 -8 720 673 ;\r\nC 79 ; WX 722 ; N Omicron ; B 41 -17 715 685 ;\r\nC 80 ; WX 768 ; N Pi ; B 25 0 745 673 ;\r\nC 81 ; WX 741 ; N Theta ; B 41 -17 715 685 ;\r\nC 82 ; WX 556 ; N Rho ; B 28 0 563 673 ;\r\nC 83 ; WX 592 ; N Sigma ; B 5 0 589 673 ;\r\nC 84 ; WX 611 ; N Tau ; B 33 0 607 673 ;\r\nC 85 ; WX 690 ; N Upsilon ; B -8 0 694 673 ;\r\nC 86 ; WX 439 ; N sigma1 ; B 40 -233 436 500 ;\r\nC 87 ; WX 768 ; N Omega ; B 34 0 736 688 ;\r\nC 88 ; WX 645 ; N Xi ; B 40 0 599 673 ;\r\nC 89 ; WX 795 ; N Psi ; B 15 0 781 684 ;\r\nC 90 ; WX 611 ; N Zeta ; B 44 0 636 673 ;\r\nC 91 ; WX 333 ; N bracketleft ; B 86 -155 299 674 ;\r\nC 92 ; WX 863 ; N therefore ; B 163 0 701 487 ;\r\nC 93 ; WX 333 ; N bracketright ; B 33 -155 246 674 ;\r\nC 94 ; WX 658 ; N perpendicular ; B 15 0 652 674 ;\r\nC 95 ; WX 500 ; N underscore ; B -2 -125 502 -75 ;\r\nC 96 ; WX 500 ; N radicalex ; B 480 881 1090 917 ;\r\nC 97 ; WX 631 ; N alpha ; B 41 -18 622 500 ;\r\nC 98 ; WX 549 ; N beta ; B 61 -223 515 741 ;\r\nC 99 ; WX 549 ; N chi ; B 12 -231 522 499 ;\r\nC 100 ; WX 494 ; N delta ; B 40 -19 481 740 ;\r\nC 101 ; WX 439 ; N epsilon ; B 22 -19 427 502 ;\r\nC 102 ; WX 521 ; N phi ; B 28 -224 492 673 ;\r\nC 103 ; WX 411 ; N gamma ; B 5 -225 484 499 ;\r\nC 104 ; WX 603 ; N eta ; B 0 -202 527 514 ;\r\nC 105 ; WX 329 ; N iota ; B 0 -17 301 503 ;\r\nC 106 ; WX 603 ; N phi1 ; B 36 -224 587 499 ;\r\nC 107 ; WX 549 ; N kappa ; B 33 0 558 501 ;\r\nC 108 ; WX 549 ; N lambda ; B 24 -17 548 739 ;\r\nC 109 ; WX 576 ; N mu ; B 33 -223 567 500 ;\r\nC 110 ; WX 521 ; N nu ; B -9 -16 475 507 ;\r\nC 111 ; WX 549 ; N omicron ; B 35 -19 501 499 ;\r\nC 112 ; WX 549 ; N pi ; B 10 -19 530 487 ;\r\nC 113 ; WX 521 ; N theta ; B 43 -17 485 690 ;\r\nC 114 ; WX 549 ; N rho ; B 50 -230 490 499 ;\r\nC 115 ; WX 603 ; N sigma ; B 30 -21 588 500 ;\r\nC 116 ; WX 439 ; N tau ; B 10 -19 418 500 ;\r\nC 117 ; WX 576 ; N upsilon ; B 7 -18 535 507 ;\r\nC 118 ; WX 713 ; N omega1 ; B 12 -18 671 583 ;\r\nC 119 ; WX 686 ; N omega ; B 42 -17 684 500 ;\r\nC 120 ; WX 493 ; N xi ; B 27 -224 469 766 ;\r\nC 121 ; WX 686 ; N psi ; B 12 -228 701 500 ;\r\nC 122 ; WX 494 ; N zeta ; B 60 -225 467 756 ;\r\nC 123 ; WX 480 ; N braceleft ; B 58 -183 397 673 ;\r\nC 124 ; WX 200 ; N bar ; B 65 -293 135 707 ;\r\nC 125 ; WX 480 ; N braceright ; B 79 -183 418 673 ;\r\nC 126 ; WX 549 ; N similar ; B 17 203 529 307 ;\r\nC 160 ; WX 750 ; N Euro ; B 20 -12 714 685 ;\r\nC 161 ; WX 620 ; N Upsilon1 ; B -2 0 610 685 ;\r\nC 162 ; WX 247 ; N minute ; B 27 459 228 735 ;\r\nC 163 ; WX 549 ; N lessequal ; B 29 0 526 639 ;\r\nC 164 ; WX 167 ; N fraction ; B -180 -12 340 677 ;\r\nC 165 ; WX 713 ; N infinity ; B 26 124 688 404 ;\r\nC 166 ; WX 500 ; N florin ; B 2 -193 494 686 ;\r\nC 167 ; WX 753 ; N club ; B 86 -26 660 533 ;\r\nC 168 ; WX 753 ; N diamond ; B 142 -36 600 550 ;\r\nC 169 ; WX 753 ; N heart ; B 117 -33 631 532 ;\r\nC 170 ; WX 753 ; N spade ; B 113 -36 629 548 ;\r\nC 171 ; WX 1042 ; N arrowboth ; B 24 -15 1024 511 ;\r\nC 172 ; WX 987 ; N arrowleft ; B 32 -15 942 511 ;\r\nC 173 ; WX 603 ; N arrowup ; B 45 0 571 910 ;\r\nC 174 ; WX 987 ; N arrowright ; B 49 -15 959 511 ;\r\nC 175 ; WX 603 ; N arrowdown ; B 45 -22 571 888 ;\r\nC 176 ; WX 400 ; N degree ; B 50 385 350 685 ;\r\nC 177 ; WX 549 ; N plusminus ; B 10 0 539 645 ;\r\nC 178 ; WX 411 ; N second ; B 20 459 413 737 ;\r\nC 179 ; WX 549 ; N greaterequal ; B 29 0 526 639 ;\r\nC 180 ; WX 549 ; N multiply ; B 17 8 533 524 ;\r\nC 181 ; WX 713 ; N proportional ; B 27 123 639 404 ;\r\nC 182 ; WX 494 ; N partialdiff ; B 26 -20 462 746 ;\r\nC 183 ; WX 460 ; N bullet ; B 50 113 410 473 ;\r\nC 184 ; WX 549 ; N divide ; B 10 71 536 456 ;\r\nC 185 ; WX 549 ; N notequal ; B 15 -25 540 549 ;\r\nC 186 ; WX 549 ; N equivalence ; B 14 82 538 443 ;\r\nC 187 ; WX 549 ; N approxequal ; B 14 135 527 394 ;\r\nC 188 ; WX 1000 ; N ellipsis ; B 111 -17 889 95 ;\r\nC 189 ; WX 603 ; N arrowvertex ; B 280 -120 336 1010 ;\r\nC 190 ; WX 1000 ; N arrowhorizex ; B -60 220 1050 276 ;\r\nC 191 ; WX 658 ; N carriagereturn ; B 15 -16 602 629 ;\r\nC 192 ; WX 823 ; N aleph ; B 175 -18 661 658 ;\r\nC 193 ; WX 686 ; N Ifraktur ; B 10 -53 578 740 ;\r\nC 194 ; WX 795 ; N Rfraktur ; B 26 -15 759 734 ;\r\nC 195 ; WX 987 ; N weierstrass ; B 159 -211 870 573 ;\r\nC 196 ; WX 768 ; N circlemultiply ; B 43 -17 733 673 ;\r\nC 197 ; WX 768 ; N circleplus ; B 43 -15 733 675 ;\r\nC 198 ; WX 823 ; N emptyset ; B 39 -24 781 719 ;\r\nC 199 ; WX 768 ; N intersection ; B 40 0 732 509 ;\r\nC 200 ; WX 768 ; N union ; B 40 -17 732 492 ;\r\nC 201 ; WX 713 ; N propersuperset ; B 20 0 673 470 ;\r\nC 202 ; WX 713 ; N reflexsuperset ; B 20 -125 673 470 ;\r\nC 203 ; WX 713 ; N notsubset ; B 36 -70 690 540 ;\r\nC 204 ; WX 713 ; N propersubset ; B 37 0 690 470 ;\r\nC 205 ; WX 713 ; N reflexsubset ; B 37 -125 690 470 ;\r\nC 206 ; WX 713 ; N element ; B 45 0 505 468 ;\r\nC 207 ; WX 713 ; N notelement ; B 45 -58 505 555 ;\r\nC 208 ; WX 768 ; N angle ; B 26 0 738 673 ;\r\nC 209 ; WX 713 ; N gradient ; B 36 -19 681 718 ;\r\nC 210 ; WX 790 ; N registerserif ; B 50 -17 740 673 ;\r\nC 211 ; WX 790 ; N copyrightserif ; B 51 -15 741 675 ;\r\nC 212 ; WX 890 ; N trademarkserif ; B 18 293 855 673 ;\r\nC 213 ; WX 823 ; N product ; B 25 -101 803 751 ;\r\nC 214 ; WX 549 ; N radical ; B 10 -38 515 917 ;\r\nC 215 ; WX 250 ; N dotmath ; B 69 210 169 310 ;\r\nC 216 ; WX 713 ; N logicalnot ; B 15 0 680 288 ;\r\nC 217 ; WX 603 ; N logicaland ; B 23 0 583 454 ;\r\nC 218 ; WX 603 ; N logicalor ; B 30 0 578 477 ;\r\nC 219 ; WX 1042 ; N arrowdblboth ; B 27 -20 1023 510 ;\r\nC 220 ; WX 987 ; N arrowdblleft ; B 30 -15 939 513 ;\r\nC 221 ; WX 603 ; N arrowdblup ; B 39 2 567 911 ;\r\nC 222 ; WX 987 ; N arrowdblright ; B 45 -20 954 508 ;\r\nC 223 ; WX 603 ; N arrowdbldown ; B 44 -19 572 890 ;\r\nC 224 ; WX 494 ; N lozenge ; B 18 0 466 745 ;\r\nC 225 ; WX 329 ; N angleleft ; B 25 -198 306 746 ;\r\nC 226 ; WX 790 ; N registersans ; B 50 -20 740 670 ;\r\nC 227 ; WX 790 ; N copyrightsans ; B 49 -15 739 675 ;\r\nC 228 ; WX 786 ; N trademarksans ; B 5 293 725 673 ;\r\nC 229 ; WX 713 ; N summation ; B 14 -108 695 752 ;\r\nC 230 ; WX 384 ; N parenlefttp ; B 24 -293 436 926 ;\r\nC 231 ; WX 384 ; N parenleftex ; B 24 -85 108 925 ;\r\nC 232 ; WX 384 ; N parenleftbt ; B 24 -293 436 926 ;\r\nC 233 ; WX 384 ; N bracketlefttp ; B 0 -80 349 926 ;\r\nC 234 ; WX 384 ; N bracketleftex ; B 0 -79 77 925 ;\r\nC 235 ; WX 384 ; N bracketleftbt ; B 0 -80 349 926 ;\r\nC 236 ; WX 494 ; N bracelefttp ; B 209 -85 445 925 ;\r\nC 237 ; WX 494 ; N braceleftmid ; B 20 -85 284 935 ;\r\nC 238 ; WX 494 ; N braceleftbt ; B 209 -75 445 935 ;\r\nC 239 ; WX 494 ; N braceex ; B 209 -85 284 935 ;\r\nC 241 ; WX 329 ; N angleright ; B 21 -198 302 746 ;\r\nC 242 ; WX 274 ; N integral ; B 2 -107 291 916 ;\r\nC 243 ; WX 686 ; N integraltp ; B 308 -88 675 920 ;\r\nC 244 ; WX 686 ; N integralex ; B 308 -88 378 975 ;\r\nC 245 ; WX 686 ; N integralbt ; B 11 -87 378 921 ;\r\nC 246 ; WX 384 ; N parenrighttp ; B 54 -293 466 926 ;\r\nC 247 ; WX 384 ; N parenrightex ; B 382 -85 466 925 ;\r\nC 248 ; WX 384 ; N parenrightbt ; B 54 -293 466 926 ;\r\nC 249 ; WX 384 ; N bracketrighttp ; B 22 -80 371 926 ;\r\nC 250 ; WX 384 ; N bracketrightex ; B 294 -79 371 925 ;\r\nC 251 ; WX 384 ; N bracketrightbt ; B 22 -80 371 926 ;\r\nC 252 ; WX 494 ; N bracerighttp ; B 48 -85 284 925 ;\r\nC 253 ; WX 494 ; N bracerightmid ; B 209 -85 473 935 ;\r\nC 254 ; WX 494 ; N bracerightbt ; B 48 -75 284 935 ;\r\nC -1 ; WX 790 ; N apple ; B 56 -3 733 808 ;\r\nEndCharMetrics\r\nEndFontMetrics\r\n";
2508 },
2509 ZapfDingbats() {
2510 return "StartFontMetrics 4.1\r\nComment Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 15:14:13 1997\r\nComment UniqueID 43082\r\nComment VMusage 45775 55535\r\nFontName ZapfDingbats\r\nFullName ITC Zapf Dingbats\r\nFamilyName ZapfDingbats\r\nWeight Medium\r\nItalicAngle 0\r\nIsFixedPitch false\r\nCharacterSet Special\r\nFontBBox -1 -143 981 820 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 002.000\r\nNotice Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.ITC Zapf Dingbats is a registered trademark of International Typeface Corporation.\r\nEncodingScheme FontSpecific\r\nStdHW 28\r\nStdVW 90\r\nStartCharMetrics 202\r\nC 32 ; WX 278 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 974 ; N a1 ; B 35 72 939 621 ;\r\nC 34 ; WX 961 ; N a2 ; B 35 81 927 611 ;\r\nC 35 ; WX 974 ; N a202 ; B 35 72 939 621 ;\r\nC 36 ; WX 980 ; N a3 ; B 35 0 945 692 ;\r\nC 37 ; WX 719 ; N a4 ; B 34 139 685 566 ;\r\nC 38 ; WX 789 ; N a5 ; B 35 -14 755 705 ;\r\nC 39 ; WX 790 ; N a119 ; B 35 -14 755 705 ;\r\nC 40 ; WX 791 ; N a118 ; B 35 -13 761 705 ;\r\nC 41 ; WX 690 ; N a117 ; B 34 138 655 553 ;\r\nC 42 ; WX 960 ; N a11 ; B 35 123 925 568 ;\r\nC 43 ; WX 939 ; N a12 ; B 35 134 904 559 ;\r\nC 44 ; WX 549 ; N a13 ; B 29 -11 516 705 ;\r\nC 45 ; WX 855 ; N a14 ; B 34 59 820 632 ;\r\nC 46 ; WX 911 ; N a15 ; B 35 50 876 642 ;\r\nC 47 ; WX 933 ; N a16 ; B 35 139 899 550 ;\r\nC 48 ; WX 911 ; N a105 ; B 35 50 876 642 ;\r\nC 49 ; WX 945 ; N a17 ; B 35 139 909 553 ;\r\nC 50 ; WX 974 ; N a18 ; B 35 104 938 587 ;\r\nC 51 ; WX 755 ; N a19 ; B 34 -13 721 705 ;\r\nC 52 ; WX 846 ; N a20 ; B 36 -14 811 705 ;\r\nC 53 ; WX 762 ; N a21 ; B 35 0 727 692 ;\r\nC 54 ; WX 761 ; N a22 ; B 35 0 727 692 ;\r\nC 55 ; WX 571 ; N a23 ; B -1 -68 571 661 ;\r\nC 56 ; WX 677 ; N a24 ; B 36 -13 642 705 ;\r\nC 57 ; WX 763 ; N a25 ; B 35 0 728 692 ;\r\nC 58 ; WX 760 ; N a26 ; B 35 0 726 692 ;\r\nC 59 ; WX 759 ; N a27 ; B 35 0 725 692 ;\r\nC 60 ; WX 754 ; N a28 ; B 35 0 720 692 ;\r\nC 61 ; WX 494 ; N a6 ; B 35 0 460 692 ;\r\nC 62 ; WX 552 ; N a7 ; B 35 0 517 692 ;\r\nC 63 ; WX 537 ; N a8 ; B 35 0 503 692 ;\r\nC 64 ; WX 577 ; N a9 ; B 35 96 542 596 ;\r\nC 65 ; WX 692 ; N a10 ; B 35 -14 657 705 ;\r\nC 66 ; WX 786 ; N a29 ; B 35 -14 751 705 ;\r\nC 67 ; WX 788 ; N a30 ; B 35 -14 752 705 ;\r\nC 68 ; WX 788 ; N a31 ; B 35 -14 753 705 ;\r\nC 69 ; WX 790 ; N a32 ; B 35 -14 756 705 ;\r\nC 70 ; WX 793 ; N a33 ; B 35 -13 759 705 ;\r\nC 71 ; WX 794 ; N a34 ; B 35 -13 759 705 ;\r\nC 72 ; WX 816 ; N a35 ; B 35 -14 782 705 ;\r\nC 73 ; WX 823 ; N a36 ; B 35 -14 787 705 ;\r\nC 74 ; WX 789 ; N a37 ; B 35 -14 754 705 ;\r\nC 75 ; WX 841 ; N a38 ; B 35 -14 807 705 ;\r\nC 76 ; WX 823 ; N a39 ; B 35 -14 789 705 ;\r\nC 77 ; WX 833 ; N a40 ; B 35 -14 798 705 ;\r\nC 78 ; WX 816 ; N a41 ; B 35 -13 782 705 ;\r\nC 79 ; WX 831 ; N a42 ; B 35 -14 796 705 ;\r\nC 80 ; WX 923 ; N a43 ; B 35 -14 888 705 ;\r\nC 81 ; WX 744 ; N a44 ; B 35 0 710 692 ;\r\nC 82 ; WX 723 ; N a45 ; B 35 0 688 692 ;\r\nC 83 ; WX 749 ; N a46 ; B 35 0 714 692 ;\r\nC 84 ; WX 790 ; N a47 ; B 34 -14 756 705 ;\r\nC 85 ; WX 792 ; N a48 ; B 35 -14 758 705 ;\r\nC 86 ; WX 695 ; N a49 ; B 35 -14 661 706 ;\r\nC 87 ; WX 776 ; N a50 ; B 35 -6 741 699 ;\r\nC 88 ; WX 768 ; N a51 ; B 35 -7 734 699 ;\r\nC 89 ; WX 792 ; N a52 ; B 35 -14 757 705 ;\r\nC 90 ; WX 759 ; N a53 ; B 35 0 725 692 ;\r\nC 91 ; WX 707 ; N a54 ; B 35 -13 672 704 ;\r\nC 92 ; WX 708 ; N a55 ; B 35 -14 672 705 ;\r\nC 93 ; WX 682 ; N a56 ; B 35 -14 647 705 ;\r\nC 94 ; WX 701 ; N a57 ; B 35 -14 666 705 ;\r\nC 95 ; WX 826 ; N a58 ; B 35 -14 791 705 ;\r\nC 96 ; WX 815 ; N a59 ; B 35 -14 780 705 ;\r\nC 97 ; WX 789 ; N a60 ; B 35 -14 754 705 ;\r\nC 98 ; WX 789 ; N a61 ; B 35 -14 754 705 ;\r\nC 99 ; WX 707 ; N a62 ; B 34 -14 673 705 ;\r\nC 100 ; WX 687 ; N a63 ; B 36 0 651 692 ;\r\nC 101 ; WX 696 ; N a64 ; B 35 0 661 691 ;\r\nC 102 ; WX 689 ; N a65 ; B 35 0 655 692 ;\r\nC 103 ; WX 786 ; N a66 ; B 34 -14 751 705 ;\r\nC 104 ; WX 787 ; N a67 ; B 35 -14 752 705 ;\r\nC 105 ; WX 713 ; N a68 ; B 35 -14 678 705 ;\r\nC 106 ; WX 791 ; N a69 ; B 35 -14 756 705 ;\r\nC 107 ; WX 785 ; N a70 ; B 36 -14 751 705 ;\r\nC 108 ; WX 791 ; N a71 ; B 35 -14 757 705 ;\r\nC 109 ; WX 873 ; N a72 ; B 35 -14 838 705 ;\r\nC 110 ; WX 761 ; N a73 ; B 35 0 726 692 ;\r\nC 111 ; WX 762 ; N a74 ; B 35 0 727 692 ;\r\nC 112 ; WX 762 ; N a203 ; B 35 0 727 692 ;\r\nC 113 ; WX 759 ; N a75 ; B 35 0 725 692 ;\r\nC 114 ; WX 759 ; N a204 ; B 35 0 725 692 ;\r\nC 115 ; WX 892 ; N a76 ; B 35 0 858 705 ;\r\nC 116 ; WX 892 ; N a77 ; B 35 -14 858 692 ;\r\nC 117 ; WX 788 ; N a78 ; B 35 -14 754 705 ;\r\nC 118 ; WX 784 ; N a79 ; B 35 -14 749 705 ;\r\nC 119 ; WX 438 ; N a81 ; B 35 -14 403 705 ;\r\nC 120 ; WX 138 ; N a82 ; B 35 0 104 692 ;\r\nC 121 ; WX 277 ; N a83 ; B 35 0 242 692 ;\r\nC 122 ; WX 415 ; N a84 ; B 35 0 380 692 ;\r\nC 123 ; WX 392 ; N a97 ; B 35 263 357 705 ;\r\nC 124 ; WX 392 ; N a98 ; B 34 263 357 705 ;\r\nC 125 ; WX 668 ; N a99 ; B 35 263 633 705 ;\r\nC 126 ; WX 668 ; N a100 ; B 36 263 634 705 ;\r\nC 128 ; WX 390 ; N a89 ; B 35 -14 356 705 ;\r\nC 129 ; WX 390 ; N a90 ; B 35 -14 355 705 ;\r\nC 130 ; WX 317 ; N a93 ; B 35 0 283 692 ;\r\nC 131 ; WX 317 ; N a94 ; B 35 0 283 692 ;\r\nC 132 ; WX 276 ; N a91 ; B 35 0 242 692 ;\r\nC 133 ; WX 276 ; N a92 ; B 35 0 242 692 ;\r\nC 134 ; WX 509 ; N a205 ; B 35 0 475 692 ;\r\nC 135 ; WX 509 ; N a85 ; B 35 0 475 692 ;\r\nC 136 ; WX 410 ; N a206 ; B 35 0 375 692 ;\r\nC 137 ; WX 410 ; N a86 ; B 35 0 375 692 ;\r\nC 138 ; WX 234 ; N a87 ; B 35 -14 199 705 ;\r\nC 139 ; WX 234 ; N a88 ; B 35 -14 199 705 ;\r\nC 140 ; WX 334 ; N a95 ; B 35 0 299 692 ;\r\nC 141 ; WX 334 ; N a96 ; B 35 0 299 692 ;\r\nC 161 ; WX 732 ; N a101 ; B 35 -143 697 806 ;\r\nC 162 ; WX 544 ; N a102 ; B 56 -14 488 706 ;\r\nC 163 ; WX 544 ; N a103 ; B 34 -14 508 705 ;\r\nC 164 ; WX 910 ; N a104 ; B 35 40 875 651 ;\r\nC 165 ; WX 667 ; N a106 ; B 35 -14 633 705 ;\r\nC 166 ; WX 760 ; N a107 ; B 35 -14 726 705 ;\r\nC 167 ; WX 760 ; N a108 ; B 0 121 758 569 ;\r\nC 168 ; WX 776 ; N a112 ; B 35 0 741 705 ;\r\nC 169 ; WX 595 ; N a111 ; B 34 -14 560 705 ;\r\nC 170 ; WX 694 ; N a110 ; B 35 -14 659 705 ;\r\nC 171 ; WX 626 ; N a109 ; B 34 0 591 705 ;\r\nC 172 ; WX 788 ; N a120 ; B 35 -14 754 705 ;\r\nC 173 ; WX 788 ; N a121 ; B 35 -14 754 705 ;\r\nC 174 ; WX 788 ; N a122 ; B 35 -14 754 705 ;\r\nC 175 ; WX 788 ; N a123 ; B 35 -14 754 705 ;\r\nC 176 ; WX 788 ; N a124 ; B 35 -14 754 705 ;\r\nC 177 ; WX 788 ; N a125 ; B 35 -14 754 705 ;\r\nC 178 ; WX 788 ; N a126 ; B 35 -14 754 705 ;\r\nC 179 ; WX 788 ; N a127 ; B 35 -14 754 705 ;\r\nC 180 ; WX 788 ; N a128 ; B 35 -14 754 705 ;\r\nC 181 ; WX 788 ; N a129 ; B 35 -14 754 705 ;\r\nC 182 ; WX 788 ; N a130 ; B 35 -14 754 705 ;\r\nC 183 ; WX 788 ; N a131 ; B 35 -14 754 705 ;\r\nC 184 ; WX 788 ; N a132 ; B 35 -14 754 705 ;\r\nC 185 ; WX 788 ; N a133 ; B 35 -14 754 705 ;\r\nC 186 ; WX 788 ; N a134 ; B 35 -14 754 705 ;\r\nC 187 ; WX 788 ; N a135 ; B 35 -14 754 705 ;\r\nC 188 ; WX 788 ; N a136 ; B 35 -14 754 705 ;\r\nC 189 ; WX 788 ; N a137 ; B 35 -14 754 705 ;\r\nC 190 ; WX 788 ; N a138 ; B 35 -14 754 705 ;\r\nC 191 ; WX 788 ; N a139 ; B 35 -14 754 705 ;\r\nC 192 ; WX 788 ; N a140 ; B 35 -14 754 705 ;\r\nC 193 ; WX 788 ; N a141 ; B 35 -14 754 705 ;\r\nC 194 ; WX 788 ; N a142 ; B 35 -14 754 705 ;\r\nC 195 ; WX 788 ; N a143 ; B 35 -14 754 705 ;\r\nC 196 ; WX 788 ; N a144 ; B 35 -14 754 705 ;\r\nC 197 ; WX 788 ; N a145 ; B 35 -14 754 705 ;\r\nC 198 ; WX 788 ; N a146 ; B 35 -14 754 705 ;\r\nC 199 ; WX 788 ; N a147 ; B 35 -14 754 705 ;\r\nC 200 ; WX 788 ; N a148 ; B 35 -14 754 705 ;\r\nC 201 ; WX 788 ; N a149 ; B 35 -14 754 705 ;\r\nC 202 ; WX 788 ; N a150 ; B 35 -14 754 705 ;\r\nC 203 ; WX 788 ; N a151 ; B 35 -14 754 705 ;\r\nC 204 ; WX 788 ; N a152 ; B 35 -14 754 705 ;\r\nC 205 ; WX 788 ; N a153 ; B 35 -14 754 705 ;\r\nC 206 ; WX 788 ; N a154 ; B 35 -14 754 705 ;\r\nC 207 ; WX 788 ; N a155 ; B 35 -14 754 705 ;\r\nC 208 ; WX 788 ; N a156 ; B 35 -14 754 705 ;\r\nC 209 ; WX 788 ; N a157 ; B 35 -14 754 705 ;\r\nC 210 ; WX 788 ; N a158 ; B 35 -14 754 705 ;\r\nC 211 ; WX 788 ; N a159 ; B 35 -14 754 705 ;\r\nC 212 ; WX 894 ; N a160 ; B 35 58 860 634 ;\r\nC 213 ; WX 838 ; N a161 ; B 35 152 803 540 ;\r\nC 214 ; WX 1016 ; N a163 ; B 34 152 981 540 ;\r\nC 215 ; WX 458 ; N a164 ; B 35 -127 422 820 ;\r\nC 216 ; WX 748 ; N a196 ; B 35 94 698 597 ;\r\nC 217 ; WX 924 ; N a165 ; B 35 140 890 552 ;\r\nC 218 ; WX 748 ; N a192 ; B 35 94 698 597 ;\r\nC 219 ; WX 918 ; N a166 ; B 35 166 884 526 ;\r\nC 220 ; WX 927 ; N a167 ; B 35 32 892 660 ;\r\nC 221 ; WX 928 ; N a168 ; B 35 129 891 562 ;\r\nC 222 ; WX 928 ; N a169 ; B 35 128 893 563 ;\r\nC 223 ; WX 834 ; N a170 ; B 35 155 799 537 ;\r\nC 224 ; WX 873 ; N a171 ; B 35 93 838 599 ;\r\nC 225 ; WX 828 ; N a172 ; B 35 104 791 588 ;\r\nC 226 ; WX 924 ; N a173 ; B 35 98 889 594 ;\r\nC 227 ; WX 924 ; N a162 ; B 35 98 889 594 ;\r\nC 228 ; WX 917 ; N a174 ; B 35 0 882 692 ;\r\nC 229 ; WX 930 ; N a175 ; B 35 84 896 608 ;\r\nC 230 ; WX 931 ; N a176 ; B 35 84 896 608 ;\r\nC 231 ; WX 463 ; N a177 ; B 35 -99 429 791 ;\r\nC 232 ; WX 883 ; N a178 ; B 35 71 848 623 ;\r\nC 233 ; WX 836 ; N a179 ; B 35 44 802 648 ;\r\nC 234 ; WX 836 ; N a193 ; B 35 44 802 648 ;\r\nC 235 ; WX 867 ; N a180 ; B 35 101 832 591 ;\r\nC 236 ; WX 867 ; N a199 ; B 35 101 832 591 ;\r\nC 237 ; WX 696 ; N a181 ; B 35 44 661 648 ;\r\nC 238 ; WX 696 ; N a200 ; B 35 44 661 648 ;\r\nC 239 ; WX 874 ; N a182 ; B 35 77 840 619 ;\r\nC 241 ; WX 874 ; N a201 ; B 35 73 840 615 ;\r\nC 242 ; WX 760 ; N a183 ; B 35 0 725 692 ;\r\nC 243 ; WX 946 ; N a184 ; B 35 160 911 533 ;\r\nC 244 ; WX 771 ; N a197 ; B 34 37 736 655 ;\r\nC 245 ; WX 865 ; N a185 ; B 35 207 830 481 ;\r\nC 246 ; WX 771 ; N a194 ; B 34 37 736 655 ;\r\nC 247 ; WX 888 ; N a198 ; B 34 -19 853 712 ;\r\nC 248 ; WX 967 ; N a186 ; B 35 124 932 568 ;\r\nC 249 ; WX 888 ; N a195 ; B 34 -19 853 712 ;\r\nC 250 ; WX 831 ; N a187 ; B 35 113 796 579 ;\r\nC 251 ; WX 873 ; N a188 ; B 36 118 838 578 ;\r\nC 252 ; WX 927 ; N a189 ; B 35 150 891 542 ;\r\nC 253 ; WX 970 ; N a190 ; B 35 76 931 616 ;\r\nC 254 ; WX 918 ; N a191 ; B 34 99 884 593 ;\r\nEndCharMetrics\r\nEndFontMetrics\r\n";
2511 }
2512};
2513class StandardFont extends PDFFont {
2514 constructor(document, name, id) {
2515 super();
2516 this.document = document;
2517 this.name = name;
2518 this.id = id;
2519 this.font = new AFMFont(STANDARD_FONTS[this.name]());
2520 ({
2521 ascender: this.ascender,
2522 descender: this.descender,
2523 bbox: this.bbox,
2524 lineGap: this.lineGap,
2525 xHeight: this.xHeight,
2526 capHeight: this.capHeight
2527 } = this.font);
2528 }
2529 embed() {
2530 this.dictionary.data = {
2531 Type: 'Font',
2532 BaseFont: this.name,
2533 Subtype: 'Type1',
2534 Encoding: 'WinAnsiEncoding'
2535 };
2536 return this.dictionary.end();
2537 }
2538 encode(text) {
2539 const encoded = this.font.encodeText(text);
2540 const glyphs = this.font.glyphsForString(`${text}`);
2541 const advances = this.font.advancesForGlyphs(glyphs);
2542 const positions = [];
2543 for (let i = 0; i < glyphs.length; i++) {
2544 const glyph = glyphs[i];
2545 positions.push({
2546 xAdvance: advances[i],
2547 yAdvance: 0,
2548 xOffset: 0,
2549 yOffset: 0,
2550 advanceWidth: this.font.widthOfGlyph(glyph)
2551 });
2552 }
2553 return [encoded, positions];
2554 }
2555 widthOfString(string, size) {
2556 const glyphs = this.font.glyphsForString(`${string}`);
2557 const advances = this.font.advancesForGlyphs(glyphs);
2558 let width = 0;
2559 for (let advance of advances) {
2560 width += advance;
2561 }
2562 const scale = size / 1000;
2563 return width * scale;
2564 }
2565 static isStandardFont(name) {
2566 return name in STANDARD_FONTS;
2567 }
2568}
2569
2570const toHex = function (num) {
2571 return `0000${num.toString(16)}`.slice(-4);
2572};
2573class EmbeddedFont extends PDFFont {
2574 constructor(document, font, id) {
2575 super();
2576 this.document = document;
2577 this.font = font;
2578 this.id = id;
2579 this.subset = this.font.createSubset();
2580 this.unicode = [[0]];
2581 this.widths = [this.font.getGlyph(0).advanceWidth];
2582 this.name = this.font.postscriptName;
2583 this.scale = 1000 / this.font.unitsPerEm;
2584 this.ascender = this.font.ascent * this.scale;
2585 this.descender = this.font.descent * this.scale;
2586 this.xHeight = this.font.xHeight * this.scale;
2587 this.capHeight = this.font.capHeight * this.scale;
2588 this.lineGap = this.font.lineGap * this.scale;
2589 this.bbox = this.font.bbox;
2590 if (document.options.fontLayoutCache !== false) {
2591 this.layoutCache = Object.create(null);
2592 }
2593 }
2594 layoutRun(text, features) {
2595 const run = this.font.layout(text, features);
2596
2597 // Normalize position values
2598 for (let i = 0; i < run.positions.length; i++) {
2599 const position = run.positions[i];
2600 for (let key in position) {
2601 position[key] *= this.scale;
2602 }
2603 position.advanceWidth = run.glyphs[i].advanceWidth * this.scale;
2604 }
2605 return run;
2606 }
2607 layoutCached(text) {
2608 if (!this.layoutCache) {
2609 return this.layoutRun(text);
2610 }
2611 let cached;
2612 if (cached = this.layoutCache[text]) {
2613 return cached;
2614 }
2615 const run = this.layoutRun(text);
2616 this.layoutCache[text] = run;
2617 return run;
2618 }
2619 layout(text, features, onlyWidth) {
2620 // Skip the cache if any user defined features are applied
2621 if (features) {
2622 return this.layoutRun(text, features);
2623 }
2624 let glyphs = onlyWidth ? null : [];
2625 let positions = onlyWidth ? null : [];
2626 let advanceWidth = 0;
2627
2628 // Split the string by words to increase cache efficiency.
2629 // For this purpose, spaces and tabs are a good enough delimeter.
2630 let last = 0;
2631 let index = 0;
2632 while (index <= text.length) {
2633 var needle;
2634 if (index === text.length && last < index || (needle = text.charAt(index), [' ', '\t'].includes(needle))) {
2635 const run = this.layoutCached(text.slice(last, ++index));
2636 if (!onlyWidth) {
2637 glyphs = glyphs.concat(run.glyphs);
2638 positions = positions.concat(run.positions);
2639 }
2640 advanceWidth += run.advanceWidth;
2641 last = index;
2642 } else {
2643 index++;
2644 }
2645 }
2646 return {
2647 glyphs,
2648 positions,
2649 advanceWidth
2650 };
2651 }
2652 encode(text, features) {
2653 const {
2654 glyphs,
2655 positions
2656 } = this.layout(text, features);
2657 const res = [];
2658 for (let i = 0; i < glyphs.length; i++) {
2659 const glyph = glyphs[i];
2660 const gid = this.subset.includeGlyph(glyph.id);
2661 res.push(`0000${gid.toString(16)}`.slice(-4));
2662 if (this.widths[gid] == null) {
2663 this.widths[gid] = glyph.advanceWidth * this.scale;
2664 }
2665 if (this.unicode[gid] == null) {
2666 this.unicode[gid] = glyph.codePoints;
2667 }
2668 }
2669 return [res, positions];
2670 }
2671 widthOfString(string, size, features) {
2672 const width = this.layout(string, features, true).advanceWidth;
2673 const scale = size / 1000;
2674 return width * scale;
2675 }
2676 embed() {
2677 const isCFF = this.subset.cff != null;
2678 const fontFile = this.document.ref();
2679 if (isCFF) {
2680 fontFile.data.Subtype = 'CIDFontType0C';
2681 }
2682 this.subset.encodeStream().on('data', data => fontFile.write(data)).on('end', () => fontFile.end());
2683 const familyClass = ((this.font['OS/2'] != null ? this.font['OS/2'].sFamilyClass : undefined) || 0) >> 8;
2684 let flags = 0;
2685 if (this.font.post.isFixedPitch) {
2686 flags |= 1 << 0;
2687 }
2688 if (1 <= familyClass && familyClass <= 7) {
2689 flags |= 1 << 1;
2690 }
2691 flags |= 1 << 2; // assume the font uses non-latin characters
2692 if (familyClass === 10) {
2693 flags |= 1 << 3;
2694 }
2695 if (this.font.head.macStyle.italic) {
2696 flags |= 1 << 6;
2697 }
2698
2699 // generate a tag (6 uppercase letters. 17 is the char code offset from '0' to 'A'. 73 will map to 'Z')
2700 const tag = [1, 2, 3, 4, 5, 6].map(i => String.fromCharCode((this.id.charCodeAt(i) || 73) + 17)).join('');
2701 const name = tag + '+' + this.font.postscriptName;
2702 const {
2703 bbox
2704 } = this.font;
2705 const descriptor = this.document.ref({
2706 Type: 'FontDescriptor',
2707 FontName: name,
2708 Flags: flags,
2709 FontBBox: [bbox.minX * this.scale, bbox.minY * this.scale, bbox.maxX * this.scale, bbox.maxY * this.scale],
2710 ItalicAngle: this.font.italicAngle,
2711 Ascent: this.ascender,
2712 Descent: this.descender,
2713 CapHeight: (this.font.capHeight || this.font.ascent) * this.scale,
2714 XHeight: (this.font.xHeight || 0) * this.scale,
2715 StemV: 0
2716 }); // not sure how to calculate this
2717
2718 if (isCFF) {
2719 descriptor.data.FontFile3 = fontFile;
2720 } else {
2721 descriptor.data.FontFile2 = fontFile;
2722 }
2723 if (this.document.subset) {
2724 const CIDSet = Buffer.from('FFFFFFFFC0', 'hex');
2725 const CIDSetRef = this.document.ref();
2726 CIDSetRef.write(CIDSet);
2727 CIDSetRef.end();
2728 descriptor.data.CIDSet = CIDSetRef;
2729 }
2730 descriptor.end();
2731 const descendantFontData = {
2732 Type: 'Font',
2733 Subtype: 'CIDFontType0',
2734 BaseFont: name,
2735 CIDSystemInfo: {
2736 Registry: new String('Adobe'),
2737 Ordering: new String('Identity'),
2738 Supplement: 0
2739 },
2740 FontDescriptor: descriptor,
2741 W: [0, this.widths]
2742 };
2743 if (!isCFF) {
2744 descendantFontData.Subtype = 'CIDFontType2';
2745 descendantFontData.CIDToGIDMap = 'Identity';
2746 }
2747 const descendantFont = this.document.ref(descendantFontData);
2748 descendantFont.end();
2749 this.dictionary.data = {
2750 Type: 'Font',
2751 Subtype: 'Type0',
2752 BaseFont: name,
2753 Encoding: 'Identity-H',
2754 DescendantFonts: [descendantFont],
2755 ToUnicode: this.toUnicodeCmap()
2756 };
2757 return this.dictionary.end();
2758 }
2759
2760 // Maps the glyph ids encoded in the PDF back to unicode strings
2761 // Because of ligature substitutions and the like, there may be one or more
2762 // unicode characters represented by each glyph.
2763 toUnicodeCmap() {
2764 const cmap = this.document.ref();
2765 const entries = [];
2766 for (let codePoints of this.unicode) {
2767 const encoded = [];
2768
2769 // encode codePoints to utf16
2770 for (let value of codePoints) {
2771 if (value > 0xffff) {
2772 value -= 0x10000;
2773 encoded.push(toHex(value >>> 10 & 0x3ff | 0xd800));
2774 value = 0xdc00 | value & 0x3ff;
2775 }
2776 encoded.push(toHex(value));
2777 }
2778 entries.push(`<${encoded.join(' ')}>`);
2779 }
2780 const chunkSize = 256;
2781 const chunks = Math.ceil(entries.length / chunkSize);
2782 const ranges = [];
2783 for (let i = 0; i < chunks; i++) {
2784 const start = i * chunkSize;
2785 const end = Math.min((i + 1) * chunkSize, entries.length);
2786 ranges.push(`<${toHex(start)}> <${toHex(end - 1)}> [${entries.slice(start, end).join(' ')}]`);
2787 }
2788 cmap.end(`\
2789/CIDInit /ProcSet findresource begin
279012 dict begin
2791begincmap
2792/CIDSystemInfo <<
2793 /Registry (Adobe)
2794 /Ordering (UCS)
2795 /Supplement 0
2796>> def
2797/CMapName /Adobe-Identity-UCS def
2798/CMapType 2 def
27991 begincodespacerange
2800<0000><ffff>
2801endcodespacerange
28021 beginbfrange
2803${ranges.join('\n')}
2804endbfrange
2805endcmap
2806CMapName currentdict /CMap defineresource pop
2807end
2808end\
2809`);
2810 return cmap;
2811 }
2812}
2813
2814class PDFFontFactory {
2815 static open(document, src, family, id) {
2816 let font;
2817 if (typeof src === 'string') {
2818 if (StandardFont.isStandardFont(src)) {
2819 return new StandardFont(document, src, id);
2820 }
2821 src = fs.readFileSync(src);
2822 }
2823 if (Buffer.isBuffer(src)) {
2824 font = fontkit.create(src, family);
2825 } else if (src instanceof Uint8Array) {
2826 font = fontkit.create(Buffer.from(src), family);
2827 } else if (src instanceof ArrayBuffer) {
2828 font = fontkit.create(Buffer.from(new Uint8Array(src)), family);
2829 }
2830 if (font == null) {
2831 throw new Error('Not a supported font format or standard PDF font.');
2832 }
2833 return new EmbeddedFont(document, font, id);
2834 }
2835}
2836
2837var FontsMixin = {
2838 initFonts(defaultFont = 'Helvetica') {
2839 // Lookup table for embedded fonts
2840 this._fontFamilies = {};
2841 this._fontCount = 0;
2842
2843 // Font state
2844 this._fontSize = 12;
2845 this._font = null;
2846 this._registeredFonts = {};
2847
2848 // Set the default font
2849 if (defaultFont) {
2850 this.font(defaultFont);
2851 }
2852 },
2853 font(src, family, size) {
2854 let cacheKey, font;
2855 if (typeof family === 'number') {
2856 size = family;
2857 family = null;
2858 }
2859
2860 // check registered fonts if src is a string
2861 if (typeof src === 'string' && this._registeredFonts[src]) {
2862 cacheKey = src;
2863 ({
2864 src,
2865 family
2866 } = this._registeredFonts[src]);
2867 } else {
2868 cacheKey = family || src;
2869 if (typeof cacheKey !== 'string') {
2870 cacheKey = null;
2871 }
2872 }
2873 if (size != null) {
2874 this.fontSize(size);
2875 }
2876
2877 // fast path: check if the font is already in the PDF
2878 if (font = this._fontFamilies[cacheKey]) {
2879 this._font = font;
2880 return this;
2881 }
2882
2883 // load the font
2884 const id = `F${++this._fontCount}`;
2885 this._font = PDFFontFactory.open(this, src, family, id);
2886
2887 // check for existing font familes with the same name already in the PDF
2888 // useful if the font was passed as a buffer
2889 if (font = this._fontFamilies[this._font.name]) {
2890 this._font = font;
2891 return this;
2892 }
2893
2894 // save the font for reuse later
2895 if (cacheKey) {
2896 this._fontFamilies[cacheKey] = this._font;
2897 }
2898 if (this._font.name) {
2899 this._fontFamilies[this._font.name] = this._font;
2900 }
2901 return this;
2902 },
2903 fontSize(_fontSize) {
2904 this._fontSize = _fontSize;
2905 return this;
2906 },
2907 currentLineHeight(includeGap) {
2908 if (includeGap == null) {
2909 includeGap = false;
2910 }
2911 return this._font.lineHeight(this._fontSize, includeGap);
2912 },
2913 registerFont(name, src, family) {
2914 this._registeredFonts[name] = {
2915 src,
2916 family
2917 };
2918 return this;
2919 }
2920};
2921
2922const SOFT_HYPHEN = '\u00AD';
2923const HYPHEN = '-';
2924class LineWrapper extends events.EventEmitter {
2925 constructor(document, options) {
2926 super();
2927 this.document = document;
2928 this.indent = options.indent || 0;
2929 this.characterSpacing = options.characterSpacing || 0;
2930 this.wordSpacing = options.wordSpacing === 0;
2931 this.columns = options.columns || 1;
2932 this.columnGap = options.columnGap != null ? options.columnGap : 18; // 1/4 inch
2933 this.lineWidth = (options.width - this.columnGap * (this.columns - 1)) / this.columns;
2934 this.spaceLeft = this.lineWidth;
2935 this.startX = this.document.x;
2936 this.startY = this.document.y;
2937 this.column = 1;
2938 this.ellipsis = options.ellipsis;
2939 this.continuedX = 0;
2940 this.features = options.features;
2941
2942 // calculate the maximum Y position the text can appear at
2943 if (options.height != null) {
2944 this.height = options.height;
2945 this.maxY = this.startY + options.height;
2946 } else {
2947 this.maxY = this.document.page.maxY();
2948 }
2949
2950 // handle paragraph indents
2951 this.on('firstLine', options => {
2952 // if this is the first line of the text segment, and
2953 // we're continuing where we left off, indent that much
2954 // otherwise use the user specified indent option
2955 const indent = this.continuedX || this.indent;
2956 this.document.x += indent;
2957 this.lineWidth -= indent;
2958 return this.once('line', () => {
2959 this.document.x -= indent;
2960 this.lineWidth += indent;
2961 if (options.continued && !this.continuedX) {
2962 this.continuedX = this.indent;
2963 }
2964 if (!options.continued) {
2965 return this.continuedX = 0;
2966 }
2967 });
2968 });
2969
2970 // handle left aligning last lines of paragraphs
2971 this.on('lastLine', options => {
2972 const {
2973 align
2974 } = options;
2975 if (align === 'justify') {
2976 options.align = 'left';
2977 }
2978 this.lastLine = true;
2979 return this.once('line', () => {
2980 this.document.y += options.paragraphGap || 0;
2981 options.align = align;
2982 return this.lastLine = false;
2983 });
2984 });
2985 }
2986 wordWidth(word) {
2987 return this.document.widthOfString(word, this) + this.characterSpacing + this.wordSpacing;
2988 }
2989 canFit(word, w) {
2990 if (word[word.length - 1] != SOFT_HYPHEN) {
2991 return w <= this.spaceLeft;
2992 }
2993 return w + this.wordWidth(HYPHEN) <= this.spaceLeft;
2994 }
2995 eachWord(text, fn) {
2996 // setup a unicode line breaker
2997 let bk;
2998 const breaker = new LineBreaker(text);
2999 let last = null;
3000 const wordWidths = Object.create(null);
3001 while (bk = breaker.nextBreak()) {
3002 var shouldContinue;
3003 let word = text.slice((last != null ? last.position : undefined) || 0, bk.position);
3004 let w = wordWidths[word] != null ? wordWidths[word] : wordWidths[word] = this.wordWidth(word);
3005
3006 // if the word is longer than the whole line, chop it up
3007 // TODO: break by grapheme clusters, not JS string characters
3008 if (w > this.lineWidth + this.continuedX) {
3009 // make some fake break objects
3010 let lbk = last;
3011 const fbk = {};
3012 while (word.length) {
3013 // fit as much of the word as possible into the space we have
3014 var l, mightGrow;
3015 if (w > this.spaceLeft) {
3016 // start our check at the end of our available space - this method is faster than a loop of each character and it resolves
3017 // an issue with long loops when processing massive words, such as a huge number of spaces
3018 l = Math.ceil(this.spaceLeft / (w / word.length));
3019 w = this.wordWidth(word.slice(0, l));
3020 mightGrow = w <= this.spaceLeft && l < word.length;
3021 } else {
3022 l = word.length;
3023 }
3024 let mustShrink = w > this.spaceLeft && l > 0;
3025 // shrink or grow word as necessary after our near-guess above
3026 while (mustShrink || mightGrow) {
3027 if (mustShrink) {
3028 w = this.wordWidth(word.slice(0, --l));
3029 mustShrink = w > this.spaceLeft && l > 0;
3030 } else {
3031 w = this.wordWidth(word.slice(0, ++l));
3032 mustShrink = w > this.spaceLeft && l > 0;
3033 mightGrow = w <= this.spaceLeft && l < word.length;
3034 }
3035 }
3036
3037 // check for the edge case where a single character cannot fit into a line.
3038 if (l === 0 && this.spaceLeft === this.lineWidth) {
3039 l = 1;
3040 }
3041
3042 // send a required break unless this is the last piece and a linebreak is not specified
3043 fbk.required = bk.required || l < word.length;
3044 shouldContinue = fn(word.slice(0, l), w, fbk, lbk);
3045 lbk = {
3046 required: false
3047 };
3048
3049 // get the remaining piece of the word
3050 word = word.slice(l);
3051 w = this.wordWidth(word);
3052 if (shouldContinue === false) {
3053 break;
3054 }
3055 }
3056 } else {
3057 // otherwise just emit the break as it was given to us
3058 shouldContinue = fn(word, w, bk, last);
3059 }
3060 if (shouldContinue === false) {
3061 break;
3062 }
3063 last = bk;
3064 }
3065 }
3066 wrap(text, options) {
3067 // override options from previous continued fragments
3068 if (options.indent != null) {
3069 this.indent = options.indent;
3070 }
3071 if (options.characterSpacing != null) {
3072 this.characterSpacing = options.characterSpacing;
3073 }
3074 if (options.wordSpacing != null) {
3075 this.wordSpacing = options.wordSpacing;
3076 }
3077 if (options.ellipsis != null) {
3078 this.ellipsis = options.ellipsis;
3079 }
3080
3081 // make sure we're actually on the page
3082 // and that the first line of is never by
3083 // itself at the bottom of a page (orphans)
3084 const nextY = this.document.y + this.document.currentLineHeight(true);
3085 if (this.document.y > this.maxY || nextY > this.maxY) {
3086 this.nextSection();
3087 }
3088 let buffer = '';
3089 let textWidth = 0;
3090 let wc = 0;
3091 let lc = 0;
3092 let {
3093 y
3094 } = this.document; // used to reset Y pos if options.continued (below)
3095 const emitLine = () => {
3096 options.textWidth = textWidth + this.wordSpacing * (wc - 1);
3097 options.wordCount = wc;
3098 options.lineWidth = this.lineWidth;
3099 ({
3100 y
3101 } = this.document);
3102 this.emit('line', buffer, options, this);
3103 return lc++;
3104 };
3105 this.emit('sectionStart', options, this);
3106 this.eachWord(text, (word, w, bk, last) => {
3107 if (last == null || last.required) {
3108 this.emit('firstLine', options, this);
3109 this.spaceLeft = this.lineWidth;
3110 }
3111 if (this.canFit(word, w)) {
3112 buffer += word;
3113 textWidth += w;
3114 wc++;
3115 }
3116 if (bk.required || !this.canFit(word, w)) {
3117 // if the user specified a max height and an ellipsis, and is about to pass the
3118 // max height and max columns after the next line, append the ellipsis
3119 const lh = this.document.currentLineHeight(true);
3120 if (this.height != null && this.ellipsis && this.document.y + lh * 2 > this.maxY && this.column >= this.columns) {
3121 if (this.ellipsis === true) {
3122 this.ellipsis = '…';
3123 } // map default ellipsis character
3124 buffer = buffer.replace(/\s+$/, '');
3125 textWidth = this.wordWidth(buffer + this.ellipsis);
3126
3127 // remove characters from the buffer until the ellipsis fits
3128 // to avoid infinite loop need to stop while-loop if buffer is empty string
3129 while (buffer && textWidth > this.lineWidth) {
3130 buffer = buffer.slice(0, -1).replace(/\s+$/, '');
3131 textWidth = this.wordWidth(buffer + this.ellipsis);
3132 }
3133 // need to add ellipsis only if there is enough space for it
3134 if (textWidth <= this.lineWidth) {
3135 buffer = buffer + this.ellipsis;
3136 }
3137 textWidth = this.wordWidth(buffer);
3138 }
3139 if (bk.required) {
3140 if (w > this.spaceLeft) {
3141 emitLine();
3142 buffer = word;
3143 textWidth = w;
3144 wc = 1;
3145 }
3146 this.emit('lastLine', options, this);
3147 }
3148
3149 // Previous entry is a soft hyphen - add visible hyphen.
3150 if (buffer[buffer.length - 1] == SOFT_HYPHEN) {
3151 buffer = buffer.slice(0, -1) + HYPHEN;
3152 this.spaceLeft -= this.wordWidth(HYPHEN);
3153 }
3154 emitLine();
3155
3156 // if we've reached the edge of the page,
3157 // continue on a new page or column
3158 if (this.document.y + lh > this.maxY) {
3159 const shouldContinue = this.nextSection();
3160
3161 // stop if we reached the maximum height
3162 if (!shouldContinue) {
3163 wc = 0;
3164 buffer = '';
3165 return false;
3166 }
3167 }
3168
3169 // reset the space left and buffer
3170 if (bk.required) {
3171 this.spaceLeft = this.lineWidth;
3172 buffer = '';
3173 textWidth = 0;
3174 return wc = 0;
3175 } else {
3176 // reset the space left and buffer
3177 this.spaceLeft = this.lineWidth - w;
3178 buffer = word;
3179 textWidth = w;
3180 return wc = 1;
3181 }
3182 } else {
3183 return this.spaceLeft -= w;
3184 }
3185 });
3186 if (wc > 0) {
3187 this.emit('lastLine', options, this);
3188 emitLine();
3189 }
3190 this.emit('sectionEnd', options, this);
3191
3192 // if the wrap is set to be continued, save the X position
3193 // to start the first line of the next segment at, and reset
3194 // the y position
3195 if (options.continued === true) {
3196 if (lc > 1) {
3197 this.continuedX = 0;
3198 }
3199 this.continuedX += options.textWidth || 0;
3200 return this.document.y = y;
3201 } else {
3202 return this.document.x = this.startX;
3203 }
3204 }
3205 nextSection(options) {
3206 this.emit('sectionEnd', options, this);
3207 if (++this.column > this.columns) {
3208 // if a max height was specified by the user, we're done.
3209 // otherwise, the default is to make a new page at the bottom.
3210 if (this.height != null) {
3211 return false;
3212 }
3213 this.document.continueOnNewPage();
3214 this.column = 1;
3215 this.startY = this.document.page.margins.top;
3216 this.maxY = this.document.page.maxY();
3217 this.document.x = this.startX;
3218 if (this.document._fillColor) {
3219 this.document.fillColor(...this.document._fillColor);
3220 }
3221 this.emit('pageBreak', options, this);
3222 } else {
3223 this.document.x += this.lineWidth + this.columnGap;
3224 this.document.y = this.startY;
3225 this.emit('columnBreak', options, this);
3226 }
3227 this.emit('sectionStart', options, this);
3228 return true;
3229 }
3230}
3231
3232const {
3233 number: number$2
3234} = PDFObject;
3235var TextMixin = {
3236 initText() {
3237 this._line = this._line.bind(this);
3238 // Current coordinates
3239 this.x = 0;
3240 this.y = 0;
3241 return this._lineGap = 0;
3242 },
3243 lineGap(_lineGap) {
3244 this._lineGap = _lineGap;
3245 return this;
3246 },
3247 moveDown(lines) {
3248 if (lines == null) {
3249 lines = 1;
3250 }
3251 this.y += this.currentLineHeight(true) * lines + this._lineGap;
3252 return this;
3253 },
3254 moveUp(lines) {
3255 if (lines == null) {
3256 lines = 1;
3257 }
3258 this.y -= this.currentLineHeight(true) * lines + this._lineGap;
3259 return this;
3260 },
3261 _text(text, x, y, options, lineCallback) {
3262 options = this._initOptions(x, y, options);
3263
3264 // Convert text to a string
3265 text = text == null ? '' : `${text}`;
3266
3267 // if the wordSpacing option is specified, remove multiple consecutive spaces
3268 if (options.wordSpacing) {
3269 text = text.replace(/\s{2,}/g, ' ');
3270 }
3271 const addStructure = () => {
3272 if (options.structParent) {
3273 options.structParent.add(this.struct(options.structType || 'P', [this.markStructureContent(options.structType || 'P')]));
3274 }
3275 };
3276
3277 // word wrapping
3278 if (options.width) {
3279 let wrapper = this._wrapper;
3280 if (!wrapper) {
3281 wrapper = new LineWrapper(this, options);
3282 wrapper.on('line', lineCallback);
3283 wrapper.on('firstLine', addStructure);
3284 }
3285 this._wrapper = options.continued ? wrapper : null;
3286 this._textOptions = options.continued ? options : null;
3287 wrapper.wrap(text, options);
3288
3289 // render paragraphs as single lines
3290 } else {
3291 for (let line of text.split('\n')) {
3292 addStructure();
3293 lineCallback(line, options);
3294 }
3295 }
3296 return this;
3297 },
3298 text(text, x, y, options) {
3299 return this._text(text, x, y, options, this._line);
3300 },
3301 widthOfString(string, options = {}) {
3302 return this._font.widthOfString(string, this._fontSize, options.features) + (options.characterSpacing || 0) * (string.length - 1);
3303 },
3304 heightOfString(text, options) {
3305 const {
3306 x,
3307 y
3308 } = this;
3309 options = this._initOptions(options);
3310 options.height = Infinity; // don't break pages
3311
3312 const lineGap = options.lineGap || this._lineGap || 0;
3313 this._text(text, this.x, this.y, options, () => {
3314 return this.y += this.currentLineHeight(true) + lineGap;
3315 });
3316 const height = this.y - y;
3317 this.x = x;
3318 this.y = y;
3319 return height;
3320 },
3321 list(list, x, y, options, wrapper) {
3322 options = this._initOptions(x, y, options);
3323 const listType = options.listType || 'bullet';
3324 const unit = Math.round(this._font.ascender / 1000 * this._fontSize);
3325 const midLine = unit / 2;
3326 const r = options.bulletRadius || unit / 3;
3327 const indent = options.textIndent || (listType === 'bullet' ? r * 5 : unit * 2);
3328 const itemIndent = options.bulletIndent || (listType === 'bullet' ? r * 8 : unit * 2);
3329 let level = 1;
3330 const items = [];
3331 const levels = [];
3332 const numbers = [];
3333 var flatten = function (list) {
3334 let n = 1;
3335 for (let i = 0; i < list.length; i++) {
3336 const item = list[i];
3337 if (Array.isArray(item)) {
3338 level++;
3339 flatten(item);
3340 level--;
3341 } else {
3342 items.push(item);
3343 levels.push(level);
3344 if (listType !== 'bullet') {
3345 numbers.push(n++);
3346 }
3347 }
3348 }
3349 };
3350 flatten(list);
3351 const label = function (n) {
3352 switch (listType) {
3353 case 'numbered':
3354 return `${n}.`;
3355 case 'lettered':
3356 var letter = String.fromCharCode((n - 1) % 26 + 65);
3357 var times = Math.floor((n - 1) / 26 + 1);
3358 var text = Array(times + 1).join(letter);
3359 return `${text}.`;
3360 }
3361 };
3362 const drawListItem = function (listItem) {
3363 wrapper = new LineWrapper(this, options);
3364 wrapper.on('line', this._line);
3365 level = 1;
3366 let i = 0;
3367 wrapper.once('firstLine', () => {
3368 let item, itemType, labelType, bodyType;
3369 if (options.structParent) {
3370 if (options.structTypes) {
3371 [itemType, labelType, bodyType] = options.structTypes;
3372 } else {
3373 [itemType, labelType, bodyType] = ['LI', 'Lbl', 'LBody'];
3374 }
3375 }
3376 if (itemType) {
3377 item = this.struct(itemType);
3378 options.structParent.add(item);
3379 } else if (options.structParent) {
3380 item = options.structParent;
3381 }
3382 let l;
3383 if ((l = levels[i++]) !== level) {
3384 const diff = itemIndent * (l - level);
3385 this.x += diff;
3386 wrapper.lineWidth -= diff;
3387 level = l;
3388 }
3389 if (item && (labelType || bodyType)) {
3390 item.add(this.struct(labelType || bodyType, [this.markStructureContent(labelType || bodyType)]));
3391 }
3392 switch (listType) {
3393 case 'bullet':
3394 this.circle(this.x - indent + r, this.y + midLine, r);
3395 this.fill();
3396 break;
3397 case 'numbered':
3398 case 'lettered':
3399 var text = label(numbers[i - 1]);
3400 this._fragment(text, this.x - indent, this.y, options);
3401 break;
3402 }
3403 if (item && labelType && bodyType) {
3404 item.add(this.struct(bodyType, [this.markStructureContent(bodyType)]));
3405 }
3406 if (item && item !== options.structParent) {
3407 item.end();
3408 }
3409 });
3410 wrapper.on('sectionStart', () => {
3411 const pos = indent + itemIndent * (level - 1);
3412 this.x += pos;
3413 return wrapper.lineWidth -= pos;
3414 });
3415 wrapper.on('sectionEnd', () => {
3416 const pos = indent + itemIndent * (level - 1);
3417 this.x -= pos;
3418 return wrapper.lineWidth += pos;
3419 });
3420 wrapper.wrap(listItem, options);
3421 };
3422 for (let i = 0; i < items.length; i++) {
3423 drawListItem.call(this, items[i]);
3424 }
3425 return this;
3426 },
3427 _initOptions(x = {}, y, options = {}) {
3428 if (typeof x === 'object') {
3429 options = x;
3430 x = null;
3431 }
3432
3433 // clone options object
3434 const result = Object.assign({}, options);
3435
3436 // extend options with previous values for continued text
3437 if (this._textOptions) {
3438 for (let key in this._textOptions) {
3439 const val = this._textOptions[key];
3440 if (key !== 'continued') {
3441 if (result[key] === undefined) {
3442 result[key] = val;
3443 }
3444 }
3445 }
3446 }
3447
3448 // Update the current position
3449 if (x != null) {
3450 this.x = x;
3451 }
3452 if (y != null) {
3453 this.y = y;
3454 }
3455
3456 // wrap to margins if no x or y position passed
3457 if (result.lineBreak !== false) {
3458 if (result.width == null) {
3459 result.width = this.page.width - this.x - this.page.margins.right;
3460 }
3461 result.width = Math.max(result.width, 0);
3462 }
3463 if (!result.columns) {
3464 result.columns = 0;
3465 }
3466 if (result.columnGap == null) {
3467 result.columnGap = 18;
3468 } // 1/4 inch
3469
3470 return result;
3471 },
3472 _line(text, options = {}, wrapper) {
3473 this._fragment(text, this.x, this.y, options);
3474 const lineGap = options.lineGap || this._lineGap || 0;
3475 if (!wrapper) {
3476 return this.x += this.widthOfString(text);
3477 } else {
3478 return this.y += this.currentLineHeight(true) + lineGap;
3479 }
3480 },
3481 _fragment(text, x, y, options) {
3482 let dy, encoded, i, positions, textWidth, words;
3483 text = `${text}`.replace(/\n/g, '');
3484 if (text.length === 0) {
3485 return;
3486 }
3487
3488 // handle options
3489 const align = options.align || 'left';
3490 let wordSpacing = options.wordSpacing || 0;
3491 const characterSpacing = options.characterSpacing || 0;
3492
3493 // text alignments
3494 if (options.width) {
3495 switch (align) {
3496 case 'right':
3497 textWidth = this.widthOfString(text.replace(/\s+$/, ''), options);
3498 x += options.lineWidth - textWidth;
3499 break;
3500 case 'center':
3501 x += options.lineWidth / 2 - options.textWidth / 2;
3502 break;
3503 case 'justify':
3504 // calculate the word spacing value
3505 words = text.trim().split(/\s+/);
3506 textWidth = this.widthOfString(text.replace(/\s+/g, ''), options);
3507 var spaceWidth = this.widthOfString(' ') + characterSpacing;
3508 wordSpacing = Math.max(0, (options.lineWidth - textWidth) / Math.max(1, words.length - 1) - spaceWidth);
3509 break;
3510 }
3511 }
3512
3513 // text baseline alignments based on http://wiki.apache.org/xmlgraphics-fop/LineLayout/AlignmentHandling
3514 if (typeof options.baseline === 'number') {
3515 dy = -options.baseline;
3516 } else {
3517 switch (options.baseline) {
3518 case 'svg-middle':
3519 dy = 0.5 * this._font.xHeight;
3520 break;
3521 case 'middle':
3522 case 'svg-central':
3523 dy = 0.5 * (this._font.descender + this._font.ascender);
3524 break;
3525 case 'bottom':
3526 case 'ideographic':
3527 dy = this._font.descender;
3528 break;
3529 case 'alphabetic':
3530 dy = 0;
3531 break;
3532 case 'mathematical':
3533 dy = 0.5 * this._font.ascender;
3534 break;
3535 case 'hanging':
3536 dy = 0.8 * this._font.ascender;
3537 break;
3538 case 'top':
3539 dy = this._font.ascender;
3540 break;
3541 default:
3542 dy = this._font.ascender;
3543 }
3544 dy = dy / 1000 * this._fontSize;
3545 }
3546
3547 // calculate the actual rendered width of the string after word and character spacing
3548 const renderedWidth = options.textWidth + wordSpacing * (options.wordCount - 1) + characterSpacing * (text.length - 1);
3549
3550 // create link annotations if the link option is given
3551 if (options.link != null) {
3552 this.link(x, y, renderedWidth, this.currentLineHeight(), options.link);
3553 }
3554 if (options.goTo != null) {
3555 this.goTo(x, y, renderedWidth, this.currentLineHeight(), options.goTo);
3556 }
3557 if (options.destination != null) {
3558 this.addNamedDestination(options.destination, 'XYZ', x, y, null);
3559 }
3560
3561 // create underline
3562 if (options.underline) {
3563 this.save();
3564 if (!options.stroke) {
3565 this.strokeColor(...(this._fillColor || []));
3566 }
3567 const lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);
3568 this.lineWidth(lineWidth);
3569 let lineY = y + this.currentLineHeight() - lineWidth;
3570 this.moveTo(x, lineY);
3571 this.lineTo(x + renderedWidth, lineY);
3572 this.stroke();
3573 this.restore();
3574 }
3575
3576 // create strikethrough line
3577 if (options.strike) {
3578 this.save();
3579 if (!options.stroke) {
3580 this.strokeColor(...(this._fillColor || []));
3581 }
3582 const lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);
3583 this.lineWidth(lineWidth);
3584 let lineY = y + this.currentLineHeight() / 2;
3585 this.moveTo(x, lineY);
3586 this.lineTo(x + renderedWidth, lineY);
3587 this.stroke();
3588 this.restore();
3589 }
3590 this.save();
3591
3592 // oblique (angle in degrees or boolean)
3593 if (options.oblique) {
3594 let skew;
3595 if (typeof options.oblique === 'number') {
3596 skew = -Math.tan(options.oblique * Math.PI / 180);
3597 } else {
3598 skew = -0.25;
3599 }
3600 this.transform(1, 0, 0, 1, x, y);
3601 this.transform(1, 0, skew, 1, -skew * dy, 0);
3602 this.transform(1, 0, 0, 1, -x, -y);
3603 }
3604
3605 // flip coordinate system
3606 this.transform(1, 0, 0, -1, 0, this.page.height);
3607 y = this.page.height - y - dy;
3608
3609 // add current font to page if necessary
3610 if (this.page.fonts[this._font.id] == null) {
3611 this.page.fonts[this._font.id] = this._font.ref();
3612 }
3613
3614 // begin the text object
3615 this.addContent('BT');
3616
3617 // text position
3618 this.addContent(`1 0 0 1 ${number$2(x)} ${number$2(y)} Tm`);
3619
3620 // font and font size
3621 this.addContent(`/${this._font.id} ${number$2(this._fontSize)} Tf`);
3622
3623 // rendering mode
3624 const mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0;
3625 if (mode) {
3626 this.addContent(`${mode} Tr`);
3627 }
3628
3629 // Character spacing
3630 if (characterSpacing) {
3631 this.addContent(`${number$2(characterSpacing)} Tc`);
3632 }
3633
3634 // Add the actual text
3635 // If we have a word spacing value, we need to encode each word separately
3636 // since the normal Tw operator only works on character code 32, which isn't
3637 // used for embedded fonts.
3638 if (wordSpacing) {
3639 words = text.trim().split(/\s+/);
3640 wordSpacing += this.widthOfString(' ') + characterSpacing;
3641 wordSpacing *= 1000 / this._fontSize;
3642 encoded = [];
3643 positions = [];
3644 for (let word of words) {
3645 const [encodedWord, positionsWord] = this._font.encode(word, options.features);
3646 encoded = encoded.concat(encodedWord);
3647 positions = positions.concat(positionsWord);
3648
3649 // add the word spacing to the end of the word
3650 // clone object because of cache
3651 const space = {};
3652 const object = positions[positions.length - 1];
3653 for (let key in object) {
3654 const val = object[key];
3655 space[key] = val;
3656 }
3657 space.xAdvance += wordSpacing;
3658 positions[positions.length - 1] = space;
3659 }
3660 } else {
3661 [encoded, positions] = this._font.encode(text, options.features);
3662 }
3663 const scale = this._fontSize / 1000;
3664 const commands = [];
3665 let last = 0;
3666 let hadOffset = false;
3667
3668 // Adds a segment of text to the TJ command buffer
3669 const addSegment = cur => {
3670 if (last < cur) {
3671 const hex = encoded.slice(last, cur).join('');
3672 const advance = positions[cur - 1].xAdvance - positions[cur - 1].advanceWidth;
3673 commands.push(`<${hex}> ${number$2(-advance)}`);
3674 }
3675 return last = cur;
3676 };
3677
3678 // Flushes the current TJ commands to the output stream
3679 const flush = i => {
3680 addSegment(i);
3681 if (commands.length > 0) {
3682 this.addContent(`[${commands.join(' ')}] TJ`);
3683 return commands.length = 0;
3684 }
3685 };
3686 for (i = 0; i < positions.length; i++) {
3687 // If we have an x or y offset, we have to break out of the current TJ command
3688 // so we can move the text position.
3689 const pos = positions[i];
3690 if (pos.xOffset || pos.yOffset) {
3691 // Flush the current buffer
3692 flush(i);
3693
3694 // Move the text position and flush just the current character
3695 this.addContent(`1 0 0 1 ${number$2(x + pos.xOffset * scale)} ${number$2(y + pos.yOffset * scale)} Tm`);
3696 flush(i + 1);
3697 hadOffset = true;
3698 } else {
3699 // If the last character had an offset, reset the text position
3700 if (hadOffset) {
3701 this.addContent(`1 0 0 1 ${number$2(x)} ${number$2(y)} Tm`);
3702 hadOffset = false;
3703 }
3704
3705 // Group segments that don't have any advance adjustments
3706 if (pos.xAdvance - pos.advanceWidth !== 0) {
3707 addSegment(i + 1);
3708 }
3709 }
3710 x += pos.xAdvance * scale;
3711 }
3712
3713 // Flush any remaining commands
3714 flush(i);
3715
3716 // end the text object
3717 this.addContent('ET');
3718
3719 // restore flipped coordinate system
3720 return this.restore();
3721 }
3722};
3723
3724const MARKERS = [0xffc0, 0xffc1, 0xffc2, 0xffc3, 0xffc5, 0xffc6, 0xffc7, 0xffc8, 0xffc9, 0xffca, 0xffcb, 0xffcc, 0xffcd, 0xffce, 0xffcf];
3725const COLOR_SPACE_MAP = {
3726 1: 'DeviceGray',
3727 3: 'DeviceRGB',
3728 4: 'DeviceCMYK'
3729};
3730class JPEG {
3731 constructor(data, label) {
3732 let marker;
3733 this.data = data;
3734 this.label = label;
3735 if (this.data.readUInt16BE(0) !== 0xffd8) {
3736 throw 'SOI not found in JPEG';
3737 }
3738
3739 // Parse the EXIF orientation
3740 this.orientation = exif.fromBuffer(this.data).Orientation || 1;
3741 let pos = 2;
3742 while (pos < this.data.length) {
3743 marker = this.data.readUInt16BE(pos);
3744 pos += 2;
3745 if (MARKERS.includes(marker)) {
3746 break;
3747 }
3748 pos += this.data.readUInt16BE(pos);
3749 }
3750 if (!MARKERS.includes(marker)) {
3751 throw 'Invalid JPEG.';
3752 }
3753 pos += 2;
3754 this.bits = this.data[pos++];
3755 this.height = this.data.readUInt16BE(pos);
3756 pos += 2;
3757 this.width = this.data.readUInt16BE(pos);
3758 pos += 2;
3759 const channels = this.data[pos++];
3760 this.colorSpace = COLOR_SPACE_MAP[channels];
3761 this.obj = null;
3762 }
3763 embed(document) {
3764 if (this.obj) {
3765 return;
3766 }
3767 this.obj = document.ref({
3768 Type: 'XObject',
3769 Subtype: 'Image',
3770 BitsPerComponent: this.bits,
3771 Width: this.width,
3772 Height: this.height,
3773 ColorSpace: this.colorSpace,
3774 Filter: 'DCTDecode'
3775 });
3776
3777 // add extra decode params for CMYK images. By swapping the
3778 // min and max values from the default, we invert the colors. See
3779 // section 4.8.4 of the spec.
3780 if (this.colorSpace === 'DeviceCMYK') {
3781 this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0];
3782 }
3783 this.obj.end(this.data);
3784
3785 // free memory
3786 return this.data = null;
3787 }
3788}
3789
3790class PNGImage {
3791 constructor(data, label) {
3792 this.label = label;
3793 this.image = new PNG(data);
3794 this.width = this.image.width;
3795 this.height = this.image.height;
3796 this.imgData = this.image.imgData;
3797 this.obj = null;
3798 }
3799 embed(document) {
3800 let dataDecoded = false;
3801 this.document = document;
3802 if (this.obj) {
3803 return;
3804 }
3805 const hasAlphaChannel = this.image.hasAlphaChannel;
3806 const isInterlaced = this.image.interlaceMethod === 1;
3807 this.obj = this.document.ref({
3808 Type: 'XObject',
3809 Subtype: 'Image',
3810 BitsPerComponent: hasAlphaChannel ? 8 : this.image.bits,
3811 Width: this.width,
3812 Height: this.height,
3813 Filter: 'FlateDecode'
3814 });
3815 if (!hasAlphaChannel) {
3816 const params = this.document.ref({
3817 Predictor: isInterlaced ? 1 : 15,
3818 Colors: this.image.colors,
3819 BitsPerComponent: this.image.bits,
3820 Columns: this.width
3821 });
3822 this.obj.data['DecodeParms'] = params;
3823 params.end();
3824 }
3825 if (this.image.palette.length === 0) {
3826 this.obj.data['ColorSpace'] = this.image.colorSpace;
3827 } else {
3828 // embed the color palette in the PDF as an object stream
3829 const palette = this.document.ref();
3830 palette.end(Buffer.from(this.image.palette));
3831
3832 // build the color space array for the image
3833 this.obj.data['ColorSpace'] = ['Indexed', 'DeviceRGB', this.image.palette.length / 3 - 1, palette];
3834 }
3835
3836 // For PNG color types 0, 2 and 3, the transparency data is stored in
3837 // a dedicated PNG chunk.
3838 if (this.image.transparency.grayscale != null) {
3839 // Use Color Key Masking (spec section 4.8.5)
3840 // An array with N elements, where N is two times the number of color components.
3841 const val = this.image.transparency.grayscale;
3842 this.obj.data['Mask'] = [val, val];
3843 } else if (this.image.transparency.rgb) {
3844 // Use Color Key Masking (spec section 4.8.5)
3845 // An array with N elements, where N is two times the number of color components.
3846 const {
3847 rgb
3848 } = this.image.transparency;
3849 const mask = [];
3850 for (let x of rgb) {
3851 mask.push(x, x);
3852 }
3853 this.obj.data['Mask'] = mask;
3854 } else if (this.image.transparency.indexed) {
3855 // Create a transparency SMask for the image based on the data
3856 // in the PLTE and tRNS sections. See below for details on SMasks.
3857 dataDecoded = true;
3858 return this.loadIndexedAlphaChannel();
3859 } else if (hasAlphaChannel) {
3860 // For PNG color types 4 and 6, the transparency data is stored as a alpha
3861 // channel mixed in with the main image data. Separate this data out into an
3862 // SMask object and store it separately in the PDF.
3863 dataDecoded = true;
3864 return this.splitAlphaChannel();
3865 }
3866 if (isInterlaced && !dataDecoded) {
3867 return this.decodeData();
3868 }
3869 this.finalize();
3870 }
3871 finalize() {
3872 if (this.alphaChannel) {
3873 const sMask = this.document.ref({
3874 Type: 'XObject',
3875 Subtype: 'Image',
3876 Height: this.height,
3877 Width: this.width,
3878 BitsPerComponent: 8,
3879 Filter: 'FlateDecode',
3880 ColorSpace: 'DeviceGray',
3881 Decode: [0, 1]
3882 });
3883 sMask.end(this.alphaChannel);
3884 this.obj.data['SMask'] = sMask;
3885 }
3886
3887 // add the actual image data
3888 this.obj.end(this.imgData);
3889
3890 // free memory
3891 this.image = null;
3892 return this.imgData = null;
3893 }
3894 splitAlphaChannel() {
3895 return this.image.decodePixels(pixels => {
3896 let a, p;
3897 const colorCount = this.image.colors;
3898 const pixelCount = this.width * this.height;
3899 const imgData = Buffer.alloc(pixelCount * colorCount);
3900 const alphaChannel = Buffer.alloc(pixelCount);
3901 let i = p = a = 0;
3902 const len = pixels.length;
3903 // For 16bit images copy only most significant byte (MSB) - PNG data is always stored in network byte order (MSB first)
3904 const skipByteCount = this.image.bits === 16 ? 1 : 0;
3905 while (i < len) {
3906 for (let colorIndex = 0; colorIndex < colorCount; colorIndex++) {
3907 imgData[p++] = pixels[i++];
3908 i += skipByteCount;
3909 }
3910 alphaChannel[a++] = pixels[i++];
3911 i += skipByteCount;
3912 }
3913 this.imgData = zlib.deflateSync(imgData);
3914 this.alphaChannel = zlib.deflateSync(alphaChannel);
3915 return this.finalize();
3916 });
3917 }
3918 loadIndexedAlphaChannel() {
3919 const transparency = this.image.transparency.indexed;
3920 return this.image.decodePixels(pixels => {
3921 const alphaChannel = Buffer.alloc(this.width * this.height);
3922 let i = 0;
3923 for (let j = 0, end = pixels.length; j < end; j++) {
3924 alphaChannel[i++] = transparency[pixels[j]];
3925 }
3926 this.alphaChannel = zlib.deflateSync(alphaChannel);
3927 return this.finalize();
3928 });
3929 }
3930 decodeData() {
3931 this.image.decodePixels(pixels => {
3932 this.imgData = zlib.deflateSync(pixels);
3933 this.finalize();
3934 });
3935 }
3936}
3937
3938/*
3939PDFImage - embeds images in PDF documents
3940By Devon Govett
3941*/
3942class PDFImage {
3943 static open(src, label) {
3944 let data;
3945 if (Buffer.isBuffer(src)) {
3946 data = src;
3947 } else if (src instanceof ArrayBuffer) {
3948 data = Buffer.from(new Uint8Array(src));
3949 } else {
3950 let match;
3951 if (match = /^data:.+?;base64,(.*)$/.exec(src)) {
3952 data = Buffer.from(match[1], 'base64');
3953 } else {
3954 data = fs.readFileSync(src);
3955 if (!data) {
3956 return;
3957 }
3958 }
3959 }
3960 if (data[0] === 0xff && data[1] === 0xd8) {
3961 return new JPEG(data, label);
3962 } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') {
3963 return new PNGImage(data, label);
3964 } else {
3965 throw new Error('Unknown image format.');
3966 }
3967 }
3968}
3969
3970var ImagesMixin = {
3971 initImages() {
3972 this._imageRegistry = {};
3973 return this._imageCount = 0;
3974 },
3975 image(src, x, y, options = {}) {
3976 let bh, bp, bw, image, ip, left, left1, rotateAngle, originX, originY;
3977 if (typeof x === 'object') {
3978 options = x;
3979 x = null;
3980 }
3981
3982 // Ignore orientation based on document options or image options
3983 const ignoreOrientation = options.ignoreOrientation || options.ignoreOrientation !== false && this.options.ignoreOrientation;
3984 x = (left = x != null ? x : options.x) != null ? left : this.x;
3985 y = (left1 = y != null ? y : options.y) != null ? left1 : this.y;
3986 if (typeof src === 'string') {
3987 image = this._imageRegistry[src];
3988 }
3989 if (!image) {
3990 if (src.width && src.height) {
3991 image = src;
3992 } else {
3993 image = this.openImage(src);
3994 }
3995 }
3996 if (!image.obj) {
3997 image.embed(this);
3998 }
3999 if (this.page.xobjects[image.label] == null) {
4000 this.page.xobjects[image.label] = image.obj;
4001 }
4002 let {
4003 width,
4004 height
4005 } = image;
4006
4007 // If EXIF orientation calls for it, swap width and height
4008 if (!ignoreOrientation && image.orientation > 4) {
4009 [width, height] = [height, width];
4010 }
4011 let w = options.width || width;
4012 let h = options.height || height;
4013 if (options.width && !options.height) {
4014 const wp = w / width;
4015 w = width * wp;
4016 h = height * wp;
4017 } else if (options.height && !options.width) {
4018 const hp = h / height;
4019 w = width * hp;
4020 h = height * hp;
4021 } else if (options.scale) {
4022 w = width * options.scale;
4023 h = height * options.scale;
4024 } else if (options.fit) {
4025 [bw, bh] = options.fit;
4026 bp = bw / bh;
4027 ip = width / height;
4028 if (ip > bp) {
4029 w = bw;
4030 h = bw / ip;
4031 } else {
4032 h = bh;
4033 w = bh * ip;
4034 }
4035 } else if (options.cover) {
4036 [bw, bh] = options.cover;
4037 bp = bw / bh;
4038 ip = width / height;
4039 if (ip > bp) {
4040 h = bh;
4041 w = bh * ip;
4042 } else {
4043 w = bw;
4044 h = bw / ip;
4045 }
4046 }
4047 if (options.fit || options.cover) {
4048 if (options.align === 'center') {
4049 x = x + bw / 2 - w / 2;
4050 } else if (options.align === 'right') {
4051 x = x + bw - w;
4052 }
4053 if (options.valign === 'center') {
4054 y = y + bh / 2 - h / 2;
4055 } else if (options.valign === 'bottom') {
4056 y = y + bh - h;
4057 }
4058 }
4059 if (!ignoreOrientation) {
4060 switch (image.orientation) {
4061 // No orientation (need to flip image, though, because of the default transform matrix on the document)
4062 default:
4063 case 1:
4064 h = -h;
4065 y -= h;
4066 rotateAngle = 0;
4067 break;
4068 // Flip Horizontal
4069 case 2:
4070 w = -w;
4071 h = -h;
4072 x -= w;
4073 y -= h;
4074 rotateAngle = 0;
4075 break;
4076 // Rotate 180 degrees
4077 case 3:
4078 originX = x;
4079 originY = y;
4080 h = -h;
4081 x -= w;
4082 rotateAngle = 180;
4083 break;
4084 // Flip vertical
4085 case 4:
4086 // Do nothing, image will be flipped
4087
4088 break;
4089 // Flip horizontally and rotate 270 degrees CW
4090 case 5:
4091 originX = x;
4092 originY = y;
4093 [w, h] = [h, w];
4094 y -= h;
4095 rotateAngle = 90;
4096 break;
4097 // Rotate 90 degrees CW
4098 case 6:
4099 originX = x;
4100 originY = y;
4101 [w, h] = [h, w];
4102 h = -h;
4103 rotateAngle = 90;
4104 break;
4105 // Flip horizontally and rotate 90 degrees CW
4106 case 7:
4107 originX = x;
4108 originY = y;
4109 [w, h] = [h, w];
4110 h = -h;
4111 w = -w;
4112 x -= w;
4113 rotateAngle = 90;
4114 break;
4115 // Rotate 270 degrees CW
4116 case 8:
4117 originX = x;
4118 originY = y;
4119 [w, h] = [h, w];
4120 h = -h;
4121 x -= w;
4122 y -= h;
4123 rotateAngle = -90;
4124 break;
4125 }
4126 } else {
4127 h = -h;
4128 y -= h;
4129 rotateAngle = 0;
4130 }
4131
4132 // create link annotations if the link option is given
4133 if (options.link != null) {
4134 this.link(x, y, w, h, options.link);
4135 }
4136 if (options.goTo != null) {
4137 this.goTo(x, y, w, h, options.goTo);
4138 }
4139 if (options.destination != null) {
4140 this.addNamedDestination(options.destination, 'XYZ', x, y, null);
4141 }
4142
4143 // Set the current y position to below the image if it is in the document flow
4144 if (this.y === y) {
4145 this.y += h;
4146 }
4147 this.save();
4148 if (rotateAngle) {
4149 this.rotate(rotateAngle, {
4150 origin: [originX, originY]
4151 });
4152 }
4153 this.transform(w, 0, 0, h, x, y);
4154 this.addContent(`/${image.label} Do`);
4155 this.restore();
4156 return this;
4157 },
4158 openImage(src) {
4159 let image;
4160 if (typeof src === 'string') {
4161 image = this._imageRegistry[src];
4162 }
4163 if (!image) {
4164 image = PDFImage.open(src, `I${++this._imageCount}`);
4165 if (typeof src === 'string') {
4166 this._imageRegistry[src] = image;
4167 }
4168 }
4169 return image;
4170 }
4171};
4172
4173var AnnotationsMixin = {
4174 annotate(x, y, w, h, options) {
4175 options.Type = 'Annot';
4176 options.Rect = this._convertRect(x, y, w, h);
4177 options.Border = [0, 0, 0];
4178 if (options.Subtype === 'Link' && typeof options.F === 'undefined') {
4179 options.F = 1 << 2; // Print Annotation Flag
4180 }
4181 if (options.Subtype !== 'Link') {
4182 if (options.C == null) {
4183 options.C = this._normalizeColor(options.color || [0, 0, 0]);
4184 }
4185 } // convert colors
4186 delete options.color;
4187 if (typeof options.Dest === 'string') {
4188 options.Dest = new String(options.Dest);
4189 }
4190
4191 // Capitalize keys
4192 for (let key in options) {
4193 const val = options[key];
4194 options[key[0].toUpperCase() + key.slice(1)] = val;
4195 }
4196 const ref = this.ref(options);
4197 this.page.annotations.push(ref);
4198 ref.end();
4199 return this;
4200 },
4201 note(x, y, w, h, contents, options = {}) {
4202 options.Subtype = 'Text';
4203 options.Contents = new String(contents);
4204 options.Name = 'Comment';
4205 if (options.color == null) {
4206 options.color = [243, 223, 92];
4207 }
4208 return this.annotate(x, y, w, h, options);
4209 },
4210 goTo(x, y, w, h, name, options = {}) {
4211 options.Subtype = 'Link';
4212 options.A = this.ref({
4213 S: 'GoTo',
4214 D: new String(name)
4215 });
4216 options.A.end();
4217 return this.annotate(x, y, w, h, options);
4218 },
4219 link(x, y, w, h, url, options = {}) {
4220 options.Subtype = 'Link';
4221 if (typeof url === 'number') {
4222 // Link to a page in the document (the page must already exist)
4223 const pages = this._root.data.Pages.data;
4224 if (url >= 0 && url < pages.Kids.length) {
4225 options.A = this.ref({
4226 S: 'GoTo',
4227 D: [pages.Kids[url], 'XYZ', null, null, null]
4228 });
4229 options.A.end();
4230 } else {
4231 throw new Error(`The document has no page ${url}`);
4232 }
4233 } else {
4234 // Link to an external url
4235 options.A = this.ref({
4236 S: 'URI',
4237 URI: new String(url)
4238 });
4239 options.A.end();
4240 }
4241 return this.annotate(x, y, w, h, options);
4242 },
4243 _markup(x, y, w, h, options = {}) {
4244 const [x1, y1, x2, y2] = this._convertRect(x, y, w, h);
4245 options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1];
4246 options.Contents = new String();
4247 return this.annotate(x, y, w, h, options);
4248 },
4249 highlight(x, y, w, h, options = {}) {
4250 options.Subtype = 'Highlight';
4251 if (options.color == null) {
4252 options.color = [241, 238, 148];
4253 }
4254 return this._markup(x, y, w, h, options);
4255 },
4256 underline(x, y, w, h, options = {}) {
4257 options.Subtype = 'Underline';
4258 return this._markup(x, y, w, h, options);
4259 },
4260 strike(x, y, w, h, options = {}) {
4261 options.Subtype = 'StrikeOut';
4262 return this._markup(x, y, w, h, options);
4263 },
4264 lineAnnotation(x1, y1, x2, y2, options = {}) {
4265 options.Subtype = 'Line';
4266 options.Contents = new String();
4267 options.L = [x1, this.page.height - y1, x2, this.page.height - y2];
4268 return this.annotate(x1, y1, x2, y2, options);
4269 },
4270 rectAnnotation(x, y, w, h, options = {}) {
4271 options.Subtype = 'Square';
4272 options.Contents = new String();
4273 return this.annotate(x, y, w, h, options);
4274 },
4275 ellipseAnnotation(x, y, w, h, options = {}) {
4276 options.Subtype = 'Circle';
4277 options.Contents = new String();
4278 return this.annotate(x, y, w, h, options);
4279 },
4280 textAnnotation(x, y, w, h, text, options = {}) {
4281 options.Subtype = 'FreeText';
4282 options.Contents = new String(text);
4283 options.DA = new String();
4284 return this.annotate(x, y, w, h, options);
4285 },
4286 fileAnnotation(x, y, w, h, file = {}, options = {}) {
4287 // create hidden file
4288 const filespec = this.file(file.src, Object.assign({
4289 hidden: true
4290 }, file));
4291 options.Subtype = 'FileAttachment';
4292 options.FS = filespec;
4293
4294 // add description from filespec unless description (Contents) has already been set
4295 if (options.Contents) {
4296 options.Contents = new String(options.Contents);
4297 } else if (filespec.data.Desc) {
4298 options.Contents = filespec.data.Desc;
4299 }
4300 return this.annotate(x, y, w, h, options);
4301 },
4302 _convertRect(x1, y1, w, h) {
4303 // flip y1 and y2
4304 let y2 = y1;
4305 y1 += h;
4306
4307 // make x2
4308 let x2 = x1 + w;
4309
4310 // apply current transformation matrix to points
4311 const [m0, m1, m2, m3, m4, m5] = this._ctm;
4312 x1 = m0 * x1 + m2 * y1 + m4;
4313 y1 = m1 * x1 + m3 * y1 + m5;
4314 x2 = m0 * x2 + m2 * y2 + m4;
4315 y2 = m1 * x2 + m3 * y2 + m5;
4316 return [x1, y1, x2, y2];
4317 }
4318};
4319
4320class PDFOutline {
4321 constructor(document, parent, title, dest, options = {
4322 expanded: false
4323 }) {
4324 this.document = document;
4325 this.options = options;
4326 this.outlineData = {};
4327 if (dest !== null) {
4328 this.outlineData['Dest'] = [dest.dictionary, 'Fit'];
4329 }
4330 if (parent !== null) {
4331 this.outlineData['Parent'] = parent;
4332 }
4333 if (title !== null) {
4334 this.outlineData['Title'] = new String(title);
4335 }
4336 this.dictionary = this.document.ref(this.outlineData);
4337 this.children = [];
4338 }
4339 addItem(title, options = {
4340 expanded: false
4341 }) {
4342 const result = new PDFOutline(this.document, this.dictionary, title, this.document.page, options);
4343 this.children.push(result);
4344 return result;
4345 }
4346 endOutline() {
4347 if (this.children.length > 0) {
4348 if (this.options.expanded) {
4349 this.outlineData.Count = this.children.length;
4350 }
4351 const first = this.children[0],
4352 last = this.children[this.children.length - 1];
4353 this.outlineData.First = first.dictionary;
4354 this.outlineData.Last = last.dictionary;
4355 for (let i = 0, len = this.children.length; i < len; i++) {
4356 const child = this.children[i];
4357 if (i > 0) {
4358 child.outlineData.Prev = this.children[i - 1].dictionary;
4359 }
4360 if (i < this.children.length - 1) {
4361 child.outlineData.Next = this.children[i + 1].dictionary;
4362 }
4363 child.endOutline();
4364 }
4365 }
4366 return this.dictionary.end();
4367 }
4368}
4369
4370var OutlineMixin = {
4371 initOutline() {
4372 return this.outline = new PDFOutline(this, null, null, null);
4373 },
4374 endOutline() {
4375 this.outline.endOutline();
4376 if (this.outline.children.length > 0) {
4377 this._root.data.Outlines = this.outline.dictionary;
4378 return this._root.data.PageMode = 'UseOutlines';
4379 }
4380 }
4381};
4382
4383/*
4384PDFStructureContent - a reference to a marked structure content
4385By Ben Schmidt
4386*/
4387
4388class PDFStructureContent {
4389 constructor(pageRef, mcid) {
4390 this.refs = [{
4391 pageRef,
4392 mcid
4393 }];
4394 }
4395 push(structContent) {
4396 structContent.refs.forEach(ref => this.refs.push(ref));
4397 }
4398}
4399
4400/*
4401PDFStructureElement - represents an element in the PDF logical structure tree
4402By Ben Schmidt
4403*/
4404class PDFStructureElement {
4405 constructor(document, type, options = {}, children = null) {
4406 this.document = document;
4407 this._attached = false;
4408 this._ended = false;
4409 this._flushed = false;
4410 this.dictionary = document.ref({
4411 // Type: "StructElem",
4412 S: type
4413 });
4414 const data = this.dictionary.data;
4415 if (Array.isArray(options) || this._isValidChild(options)) {
4416 children = options;
4417 options = {};
4418 }
4419 if (typeof options.title !== 'undefined') {
4420 data.T = new String(options.title);
4421 }
4422 if (typeof options.lang !== 'undefined') {
4423 data.Lang = new String(options.lang);
4424 }
4425 if (typeof options.alt !== 'undefined') {
4426 data.Alt = new String(options.alt);
4427 }
4428 if (typeof options.expanded !== 'undefined') {
4429 data.E = new String(options.expanded);
4430 }
4431 if (typeof options.actual !== 'undefined') {
4432 data.ActualText = new String(options.actual);
4433 }
4434 this._children = [];
4435 if (children) {
4436 if (!Array.isArray(children)) {
4437 children = [children];
4438 }
4439 children.forEach(child => this.add(child));
4440 this.end();
4441 }
4442 }
4443 add(child) {
4444 if (this._ended) {
4445 throw new Error(`Cannot add child to already-ended structure element`);
4446 }
4447 if (!this._isValidChild(child)) {
4448 throw new Error(`Invalid structure element child`);
4449 }
4450 if (child instanceof PDFStructureElement) {
4451 child.setParent(this.dictionary);
4452 if (this._attached) {
4453 child.setAttached();
4454 }
4455 }
4456 if (child instanceof PDFStructureContent) {
4457 this._addContentToParentTree(child);
4458 }
4459 if (typeof child === 'function' && this._attached) {
4460 // _contentForClosure() adds the content to the parent tree
4461 child = this._contentForClosure(child);
4462 }
4463 this._children.push(child);
4464 return this;
4465 }
4466 _addContentToParentTree(content) {
4467 content.refs.forEach(({
4468 pageRef,
4469 mcid
4470 }) => {
4471 const pageStructParents = this.document.getStructParentTree().get(pageRef.data.StructParents);
4472 pageStructParents[mcid] = this.dictionary;
4473 });
4474 }
4475 setParent(parentRef) {
4476 if (this.dictionary.data.P) {
4477 throw new Error(`Structure element added to more than one parent`);
4478 }
4479 this.dictionary.data.P = parentRef;
4480 this._flush();
4481 }
4482 setAttached() {
4483 if (this._attached) {
4484 return;
4485 }
4486 this._children.forEach((child, index) => {
4487 if (child instanceof PDFStructureElement) {
4488 child.setAttached();
4489 }
4490 if (typeof child === 'function') {
4491 this._children[index] = this._contentForClosure(child);
4492 }
4493 });
4494 this._attached = true;
4495 this._flush();
4496 }
4497 end() {
4498 if (this._ended) {
4499 return;
4500 }
4501 this._children.filter(child => child instanceof PDFStructureElement).forEach(child => child.end());
4502 this._ended = true;
4503 this._flush();
4504 }
4505 _isValidChild(child) {
4506 return child instanceof PDFStructureElement || child instanceof PDFStructureContent || typeof child === 'function';
4507 }
4508 _contentForClosure(closure) {
4509 const content = this.document.markStructureContent(this.dictionary.data.S);
4510 closure();
4511 this.document.endMarkedContent();
4512 this._addContentToParentTree(content);
4513 return content;
4514 }
4515 _isFlushable() {
4516 if (!this.dictionary.data.P || !this._ended) {
4517 return false;
4518 }
4519 return this._children.every(child => {
4520 if (typeof child === 'function') {
4521 return false;
4522 }
4523 if (child instanceof PDFStructureElement) {
4524 return child._isFlushable();
4525 }
4526 return true;
4527 });
4528 }
4529 _flush() {
4530 if (this._flushed || !this._isFlushable()) {
4531 return;
4532 }
4533 this.dictionary.data.K = [];
4534 this._children.forEach(child => this._flushChild(child));
4535 this.dictionary.end();
4536
4537 // free memory used by children; the dictionary itself may still be
4538 // referenced by a parent structure element or root, but we can
4539 // at least trim the tree here
4540 this._children = [];
4541 this.dictionary.data.K = null;
4542 this._flushed = true;
4543 }
4544 _flushChild(child) {
4545 if (child instanceof PDFStructureElement) {
4546 this.dictionary.data.K.push(child.dictionary);
4547 }
4548 if (child instanceof PDFStructureContent) {
4549 child.refs.forEach(({
4550 pageRef,
4551 mcid
4552 }) => {
4553 if (!this.dictionary.data.Pg) {
4554 this.dictionary.data.Pg = pageRef;
4555 }
4556 if (this.dictionary.data.Pg === pageRef) {
4557 this.dictionary.data.K.push(mcid);
4558 } else {
4559 this.dictionary.data.K.push({
4560 Type: "MCR",
4561 Pg: pageRef,
4562 MCID: mcid
4563 });
4564 }
4565 });
4566 }
4567 }
4568}
4569
4570/*
4571PDFNumberTree - represents a number tree object
4572*/
4573class PDFNumberTree extends PDFTree {
4574 _compareKeys(a, b) {
4575 return parseInt(a) - parseInt(b);
4576 }
4577 _keysName() {
4578 return "Nums";
4579 }
4580 _dataForKey(k) {
4581 return parseInt(k);
4582 }
4583}
4584
4585/*
4586Markings mixin - support marked content sequences in content streams
4587By Ben Schmidt
4588*/
4589var MarkingsMixin = {
4590 initMarkings(options) {
4591 this.structChildren = [];
4592 if (options.tagged) {
4593 this.getMarkInfoDictionary().data.Marked = true;
4594 this.getStructTreeRoot();
4595 }
4596 },
4597 markContent(tag, options = null) {
4598 if (tag === 'Artifact' || options && options.mcid) {
4599 let toClose = 0;
4600 this.page.markings.forEach(marking => {
4601 if (toClose || marking.structContent || marking.tag === 'Artifact') {
4602 toClose++;
4603 }
4604 });
4605 while (toClose--) {
4606 this.endMarkedContent();
4607 }
4608 }
4609 if (!options) {
4610 this.page.markings.push({
4611 tag
4612 });
4613 this.addContent(`/${tag} BMC`);
4614 return this;
4615 }
4616 this.page.markings.push({
4617 tag,
4618 options
4619 });
4620 const dictionary = {};
4621 if (typeof options.mcid !== 'undefined') {
4622 dictionary.MCID = options.mcid;
4623 }
4624 if (tag === 'Artifact') {
4625 if (typeof options.type === 'string') {
4626 dictionary.Type = options.type;
4627 }
4628 if (Array.isArray(options.bbox)) {
4629 dictionary.BBox = [options.bbox[0], this.page.height - options.bbox[3], options.bbox[2], this.page.height - options.bbox[1]];
4630 }
4631 if (Array.isArray(options.attached) && options.attached.every(val => typeof val === 'string')) {
4632 dictionary.Attached = options.attached;
4633 }
4634 }
4635 if (tag === 'Span') {
4636 if (options.lang) {
4637 dictionary.Lang = new String(options.lang);
4638 }
4639 if (options.alt) {
4640 dictionary.Alt = new String(options.alt);
4641 }
4642 if (options.expanded) {
4643 dictionary.E = new String(options.expanded);
4644 }
4645 if (options.actual) {
4646 dictionary.ActualText = new String(options.actual);
4647 }
4648 }
4649 this.addContent(`/${tag} ${PDFObject.convert(dictionary)} BDC`);
4650 return this;
4651 },
4652 markStructureContent(tag, options = {}) {
4653 const pageStructParents = this.getStructParentTree().get(this.page.structParentTreeKey);
4654 const mcid = pageStructParents.length;
4655 pageStructParents.push(null);
4656 this.markContent(tag, {
4657 ...options,
4658 mcid
4659 });
4660 const structContent = new PDFStructureContent(this.page.dictionary, mcid);
4661 this.page.markings.slice(-1)[0].structContent = structContent;
4662 return structContent;
4663 },
4664 endMarkedContent() {
4665 this.page.markings.pop();
4666 this.addContent('EMC');
4667 return this;
4668 },
4669 struct(type, options = {}, children = null) {
4670 return new PDFStructureElement(this, type, options, children);
4671 },
4672 addStructure(structElem) {
4673 const structTreeRoot = this.getStructTreeRoot();
4674 structElem.setParent(structTreeRoot);
4675 structElem.setAttached();
4676 this.structChildren.push(structElem);
4677 if (!structTreeRoot.data.K) {
4678 structTreeRoot.data.K = [];
4679 }
4680 structTreeRoot.data.K.push(structElem.dictionary);
4681 return this;
4682 },
4683 initPageMarkings(pageMarkings) {
4684 pageMarkings.forEach(marking => {
4685 if (marking.structContent) {
4686 const structContent = marking.structContent;
4687 const newStructContent = this.markStructureContent(marking.tag, marking.options);
4688 structContent.push(newStructContent);
4689 this.page.markings.slice(-1)[0].structContent = structContent;
4690 } else {
4691 this.markContent(marking.tag, marking.options);
4692 }
4693 });
4694 },
4695 endPageMarkings(page) {
4696 const pageMarkings = page.markings;
4697 pageMarkings.forEach(() => page.write('EMC'));
4698 page.markings = [];
4699 return pageMarkings;
4700 },
4701 getMarkInfoDictionary() {
4702 if (!this._root.data.MarkInfo) {
4703 this._root.data.MarkInfo = this.ref({});
4704 }
4705 return this._root.data.MarkInfo;
4706 },
4707 getStructTreeRoot() {
4708 if (!this._root.data.StructTreeRoot) {
4709 this._root.data.StructTreeRoot = this.ref({
4710 Type: 'StructTreeRoot',
4711 ParentTree: new PDFNumberTree(),
4712 ParentTreeNextKey: 0
4713 });
4714 }
4715 return this._root.data.StructTreeRoot;
4716 },
4717 getStructParentTree() {
4718 return this.getStructTreeRoot().data.ParentTree;
4719 },
4720 createStructParentTreeNextKey() {
4721 // initialise the MarkInfo dictionary
4722 this.getMarkInfoDictionary();
4723 const structTreeRoot = this.getStructTreeRoot();
4724 const key = structTreeRoot.data.ParentTreeNextKey++;
4725 structTreeRoot.data.ParentTree.add(key, []);
4726 return key;
4727 },
4728 endMarkings() {
4729 const structTreeRoot = this._root.data.StructTreeRoot;
4730 if (structTreeRoot) {
4731 structTreeRoot.end();
4732 this.structChildren.forEach(structElem => structElem.end());
4733 }
4734 if (this._root.data.MarkInfo) {
4735 this._root.data.MarkInfo.end();
4736 }
4737 }
4738};
4739
4740const FIELD_FLAGS = {
4741 readOnly: 1,
4742 required: 2,
4743 noExport: 4,
4744 multiline: 0x1000,
4745 password: 0x2000,
4746 toggleToOffButton: 0x4000,
4747 radioButton: 0x8000,
4748 pushButton: 0x10000,
4749 combo: 0x20000,
4750 edit: 0x40000,
4751 sort: 0x80000,
4752 multiSelect: 0x200000,
4753 noSpell: 0x400000
4754};
4755const FIELD_JUSTIFY = {
4756 left: 0,
4757 center: 1,
4758 right: 2
4759};
4760const VALUE_MAP = {
4761 value: 'V',
4762 defaultValue: 'DV'
4763};
4764const FORMAT_SPECIAL = {
4765 zip: '0',
4766 zipPlus4: '1',
4767 zip4: '1',
4768 phone: '2',
4769 ssn: '3'
4770};
4771const FORMAT_DEFAULT = {
4772 number: {
4773 nDec: 0,
4774 sepComma: false,
4775 negStyle: 'MinusBlack',
4776 currency: '',
4777 currencyPrepend: true
4778 },
4779 percent: {
4780 nDec: 0,
4781 sepComma: false
4782 }
4783};
4784var AcroFormMixin = {
4785 /**
4786 * Must call if adding AcroForms to a document. Must also call font() before
4787 * this method to set the default font.
4788 */
4789 initForm() {
4790 if (!this._font) {
4791 throw new Error('Must set a font before calling initForm method');
4792 }
4793 this._acroform = {
4794 fonts: {},
4795 defaultFont: this._font.name
4796 };
4797 this._acroform.fonts[this._font.id] = this._font.ref();
4798 let data = {
4799 Fields: [],
4800 NeedAppearances: true,
4801 DA: new String(`/${this._font.id} 0 Tf 0 g`),
4802 DR: {
4803 Font: {}
4804 }
4805 };
4806 data.DR.Font[this._font.id] = this._font.ref();
4807 const AcroForm = this.ref(data);
4808 this._root.data.AcroForm = AcroForm;
4809 return this;
4810 },
4811 /**
4812 * Called automatically by document.js
4813 */
4814 endAcroForm() {
4815 if (this._root.data.AcroForm) {
4816 if (!Object.keys(this._acroform.fonts).length && !this._acroform.defaultFont) {
4817 throw new Error('No fonts specified for PDF form');
4818 }
4819 let fontDict = this._root.data.AcroForm.data.DR.Font;
4820 Object.keys(this._acroform.fonts).forEach(name => {
4821 fontDict[name] = this._acroform.fonts[name];
4822 });
4823 this._root.data.AcroForm.data.Fields.forEach(fieldRef => {
4824 this._endChild(fieldRef);
4825 });
4826 this._root.data.AcroForm.end();
4827 }
4828 return this;
4829 },
4830 _endChild(ref) {
4831 if (Array.isArray(ref.data.Kids)) {
4832 ref.data.Kids.forEach(childRef => {
4833 this._endChild(childRef);
4834 });
4835 ref.end();
4836 }
4837 return this;
4838 },
4839 /**
4840 * Creates and adds a form field to the document. Form fields are intermediate
4841 * nodes in a PDF form that are used to specify form name heirarchy and form
4842 * value defaults.
4843 * @param {string} name - field name (T attribute in field dictionary)
4844 * @param {object} options - other attributes to include in field dictionary
4845 */
4846 formField(name, options = {}) {
4847 let fieldDict = this._fieldDict(name, null, options);
4848 let fieldRef = this.ref(fieldDict);
4849 this._addToParent(fieldRef);
4850 return fieldRef;
4851 },
4852 /**
4853 * Creates and adds a Form Annotation to the document. Form annotations are
4854 * called Widget annotations internally within a PDF file.
4855 * @param {string} name - form field name (T attribute of widget annotation
4856 * dictionary)
4857 * @param {number} x
4858 * @param {number} y
4859 * @param {number} w
4860 * @param {number} h
4861 * @param {object} options
4862 */
4863 formAnnotation(name, type, x, y, w, h, options = {}) {
4864 let fieldDict = this._fieldDict(name, type, options);
4865 fieldDict.Subtype = 'Widget';
4866 if (fieldDict.F === undefined) {
4867 fieldDict.F = 4; // print the annotation
4868 }
4869
4870 // Add Field annot to page, and get it's ref
4871 this.annotate(x, y, w, h, fieldDict);
4872 let annotRef = this.page.annotations[this.page.annotations.length - 1];
4873 return this._addToParent(annotRef);
4874 },
4875 formText(name, x, y, w, h, options = {}) {
4876 return this.formAnnotation(name, 'text', x, y, w, h, options);
4877 },
4878 formPushButton(name, x, y, w, h, options = {}) {
4879 return this.formAnnotation(name, 'pushButton', x, y, w, h, options);
4880 },
4881 formCombo(name, x, y, w, h, options = {}) {
4882 return this.formAnnotation(name, 'combo', x, y, w, h, options);
4883 },
4884 formList(name, x, y, w, h, options = {}) {
4885 return this.formAnnotation(name, 'list', x, y, w, h, options);
4886 },
4887 formRadioButton(name, x, y, w, h, options = {}) {
4888 return this.formAnnotation(name, 'radioButton', x, y, w, h, options);
4889 },
4890 formCheckbox(name, x, y, w, h, options = {}) {
4891 return this.formAnnotation(name, 'checkbox', x, y, w, h, options);
4892 },
4893 _addToParent(fieldRef) {
4894 let parent = fieldRef.data.Parent;
4895 if (parent) {
4896 if (!parent.data.Kids) {
4897 parent.data.Kids = [];
4898 }
4899 parent.data.Kids.push(fieldRef);
4900 } else {
4901 this._root.data.AcroForm.data.Fields.push(fieldRef);
4902 }
4903 return this;
4904 },
4905 _fieldDict(name, type, options = {}) {
4906 if (!this._acroform) {
4907 throw new Error('Call document.initForms() method before adding form elements to document');
4908 }
4909 let opts = Object.assign({}, options);
4910 if (type !== null) {
4911 opts = this._resolveType(type, options);
4912 }
4913 opts = this._resolveFlags(opts);
4914 opts = this._resolveJustify(opts);
4915 opts = this._resolveFont(opts);
4916 opts = this._resolveStrings(opts);
4917 opts = this._resolveColors(opts);
4918 opts = this._resolveFormat(opts);
4919 opts.T = new String(name);
4920 if (opts.parent) {
4921 opts.Parent = opts.parent;
4922 delete opts.parent;
4923 }
4924 return opts;
4925 },
4926 _resolveType(type, opts) {
4927 if (type === 'text') {
4928 opts.FT = 'Tx';
4929 } else if (type === 'pushButton') {
4930 opts.FT = 'Btn';
4931 opts.pushButton = true;
4932 } else if (type === 'radioButton') {
4933 opts.FT = 'Btn';
4934 opts.radioButton = true;
4935 } else if (type === 'checkbox') {
4936 opts.FT = 'Btn';
4937 } else if (type === 'combo') {
4938 opts.FT = 'Ch';
4939 opts.combo = true;
4940 } else if (type === 'list') {
4941 opts.FT = 'Ch';
4942 } else {
4943 throw new Error(`Invalid form annotation type '${type}'`);
4944 }
4945 return opts;
4946 },
4947 _resolveFormat(opts) {
4948 const f = opts.format;
4949 if (f && f.type) {
4950 let fnKeystroke;
4951 let fnFormat;
4952 let params = '';
4953 if (FORMAT_SPECIAL[f.type] !== undefined) {
4954 fnKeystroke = `AFSpecial_Keystroke`;
4955 fnFormat = `AFSpecial_Format`;
4956 params = FORMAT_SPECIAL[f.type];
4957 } else {
4958 let format = f.type.charAt(0).toUpperCase() + f.type.slice(1);
4959 fnKeystroke = `AF${format}_Keystroke`;
4960 fnFormat = `AF${format}_Format`;
4961 if (f.type === 'date') {
4962 fnKeystroke += 'Ex';
4963 params = String(f.param);
4964 } else if (f.type === 'time') {
4965 params = String(f.param);
4966 } else if (f.type === 'number') {
4967 let p = Object.assign({}, FORMAT_DEFAULT.number, f);
4968 params = String([String(p.nDec), p.sepComma ? '0' : '1', '"' + p.negStyle + '"', 'null', '"' + p.currency + '"', String(p.currencyPrepend)].join(','));
4969 } else if (f.type === 'percent') {
4970 let p = Object.assign({}, FORMAT_DEFAULT.percent, f);
4971 params = String([String(p.nDec), p.sepComma ? '0' : '1'].join(','));
4972 }
4973 }
4974 opts.AA = opts.AA ? opts.AA : {};
4975 opts.AA.K = {
4976 S: 'JavaScript',
4977 JS: new String(`${fnKeystroke}(${params});`)
4978 };
4979 opts.AA.F = {
4980 S: 'JavaScript',
4981 JS: new String(`${fnFormat}(${params});`)
4982 };
4983 }
4984 delete opts.format;
4985 return opts;
4986 },
4987 _resolveColors(opts) {
4988 let color = this._normalizeColor(opts.backgroundColor);
4989 if (color) {
4990 if (!opts.MK) {
4991 opts.MK = {};
4992 }
4993 opts.MK.BG = color;
4994 }
4995 color = this._normalizeColor(opts.borderColor);
4996 if (color) {
4997 if (!opts.MK) {
4998 opts.MK = {};
4999 }
5000 opts.MK.BC = color;
5001 }
5002 delete opts.backgroundColor;
5003 delete opts.borderColor;
5004 return opts;
5005 },
5006 _resolveFlags(options) {
5007 let result = 0;
5008 Object.keys(options).forEach(key => {
5009 if (FIELD_FLAGS[key]) {
5010 if (options[key]) {
5011 result |= FIELD_FLAGS[key];
5012 }
5013 delete options[key];
5014 }
5015 });
5016 if (result !== 0) {
5017 options.Ff = options.Ff ? options.Ff : 0;
5018 options.Ff |= result;
5019 }
5020 return options;
5021 },
5022 _resolveJustify(options) {
5023 let result = 0;
5024 if (options.align !== undefined) {
5025 if (typeof FIELD_JUSTIFY[options.align] === 'number') {
5026 result = FIELD_JUSTIFY[options.align];
5027 }
5028 delete options.align;
5029 }
5030 if (result !== 0) {
5031 options.Q = result; // default
5032 }
5033 return options;
5034 },
5035 _resolveFont(options) {
5036 // add current font to document-level AcroForm dict if necessary
5037 if (this._acroform.fonts[this._font.id] === null) {
5038 this._acroform.fonts[this._font.id] = this._font.ref();
5039 }
5040
5041 // add current font to field's resource dict (RD) if not the default acroform font
5042 if (this._acroform.defaultFont !== this._font.name) {
5043 options.DR = {
5044 Font: {}
5045 };
5046
5047 // Get the fontSize option. If not set use auto sizing
5048 const fontSize = options.fontSize || 0;
5049 options.DR.Font[this._font.id] = this._font.ref();
5050 options.DA = new String(`/${this._font.id} ${fontSize} Tf 0 g`);
5051 }
5052 return options;
5053 },
5054 _resolveStrings(options) {
5055 let select = [];
5056 function appendChoices(a) {
5057 if (Array.isArray(a)) {
5058 for (let idx = 0; idx < a.length; idx++) {
5059 if (typeof a[idx] === 'string') {
5060 select.push(new String(a[idx]));
5061 } else {
5062 select.push(a[idx]);
5063 }
5064 }
5065 }
5066 }
5067 appendChoices(options.Opt);
5068 if (options.select) {
5069 appendChoices(options.select);
5070 delete options.select;
5071 }
5072 if (select.length) {
5073 options.Opt = select;
5074 }
5075 Object.keys(VALUE_MAP).forEach(key => {
5076 if (options[key] !== undefined) {
5077 options[VALUE_MAP[key]] = options[key];
5078 delete options[key];
5079 }
5080 });
5081 ['V', 'DV'].forEach(key => {
5082 if (typeof options[key] === 'string') {
5083 options[key] = new String(options[key]);
5084 }
5085 });
5086 if (options.MK && options.MK.CA) {
5087 options.MK.CA = new String(options.MK.CA);
5088 }
5089 if (options.label) {
5090 options.MK = options.MK ? options.MK : {};
5091 options.MK.CA = new String(options.label);
5092 delete options.label;
5093 }
5094 return options;
5095 }
5096};
5097
5098var AttachmentsMixin = {
5099 /**
5100 * Embed contents of `src` in PDF
5101 * @param {Buffer | ArrayBuffer | string} src input Buffer, ArrayBuffer, base64 encoded string or path to file
5102 * @param {object} options
5103 * * options.name: filename to be shown in PDF, will use `src` if none set
5104 * * options.type: filetype to be shown in PDF
5105 * * options.description: description to be shown in PDF
5106 * * options.hidden: if true, do not add attachment to EmbeddedFiles dictionary. Useful for file attachment annotations
5107 * * options.creationDate: override creation date
5108 * * options.modifiedDate: override modified date
5109 * @returns filespec reference
5110 */
5111 file(src, options = {}) {
5112 options.name = options.name || src;
5113 const refBody = {
5114 Type: 'EmbeddedFile',
5115 Params: {}
5116 };
5117 let data;
5118 if (!src) {
5119 throw new Error('No src specified');
5120 }
5121 if (Buffer.isBuffer(src)) {
5122 data = src;
5123 } else if (src instanceof ArrayBuffer) {
5124 data = Buffer.from(new Uint8Array(src));
5125 } else {
5126 let match;
5127 if (match = /^data:(.*?);base64,(.*)$/.exec(src)) {
5128 if (match[1]) {
5129 refBody.Subtype = match[1].replace('/', '#2F');
5130 }
5131 data = Buffer.from(match[2], 'base64');
5132 } else {
5133 data = fs.readFileSync(src);
5134 if (!data) {
5135 throw new Error(`Could not read contents of file at filepath ${src}`);
5136 }
5137
5138 // update CreationDate and ModDate
5139 const {
5140 birthtime,
5141 ctime
5142 } = fs.statSync(src);
5143 refBody.Params.CreationDate = birthtime;
5144 refBody.Params.ModDate = ctime;
5145 }
5146 }
5147
5148 // override creation date and modified date
5149 if (options.creationDate instanceof Date) {
5150 refBody.Params.CreationDate = options.creationDate;
5151 }
5152 if (options.modifiedDate instanceof Date) {
5153 refBody.Params.ModDate = options.modifiedDate;
5154 }
5155 // add optional subtype
5156 if (options.type) {
5157 refBody.Subtype = options.type.replace('/', '#2F');
5158 }
5159
5160 // add checksum and size information
5161 const checksum = CryptoJS.MD5(CryptoJS.lib.WordArray.create(new Uint8Array(data)));
5162 refBody.Params.CheckSum = new String(checksum);
5163 refBody.Params.Size = data.byteLength;
5164
5165 // save some space when embedding the same file again
5166 // if a file with the same name and metadata exists, reuse its reference
5167 let ref;
5168 if (!this._fileRegistry) this._fileRegistry = {};
5169 let file = this._fileRegistry[options.name];
5170 if (file && isEqual(refBody, file)) {
5171 ref = file.ref;
5172 } else {
5173 ref = this.ref(refBody);
5174 ref.end(data);
5175 this._fileRegistry[options.name] = {
5176 ...refBody,
5177 ref
5178 };
5179 }
5180 // add filespec for embedded file
5181 const fileSpecBody = {
5182 Type: 'Filespec',
5183 F: new String(options.name),
5184 EF: {
5185 F: ref
5186 },
5187 UF: new String(options.name)
5188 };
5189 if (options.description) {
5190 fileSpecBody.Desc = new String(options.description);
5191 }
5192 const filespec = this.ref(fileSpecBody);
5193 filespec.end();
5194 if (!options.hidden) {
5195 this.addNamedEmbeddedFile(options.name, filespec);
5196 }
5197 return filespec;
5198 }
5199};
5200
5201/** check two embedded file metadata objects for equality */
5202function isEqual(a, b) {
5203 return a.Subtype === b.Subtype && a.Params.CheckSum.toString() === b.Params.CheckSum.toString() && a.Params.Size === b.Params.Size && a.Params.CreationDate === b.Params.CreationDate && a.Params.ModDate === b.Params.ModDate;
5204}
5205
5206var PDFA = {
5207 initPDFA(pSubset) {
5208 if (pSubset.charAt(pSubset.length - 3) === '-') {
5209 this.subset_conformance = pSubset.charAt(pSubset.length - 1).toUpperCase();
5210 this.subset = parseInt(pSubset.charAt(pSubset.length - 2));
5211 } else {
5212 // Default to Basic conformance when user doesn't specify
5213 this.subset_conformance = 'B';
5214 this.subset = parseInt(pSubset.charAt(pSubset.length - 1));
5215 }
5216 },
5217 endSubset() {
5218 this._addPdfaMetadata();
5219 this._addColorOutputIntent(`${__dirname}/data/sRGB_IEC61966_2_1.icc`);
5220 },
5221 _addColorOutputIntent(pICCPath) {
5222 const iccProfile = fs.readFileSync(pICCPath);
5223 const colorProfileRef = this.ref({
5224 Length: iccProfile.length,
5225 N: 3
5226 });
5227 colorProfileRef.write(iccProfile);
5228 colorProfileRef.end();
5229 const intentRef = this.ref({
5230 Type: 'OutputIntent',
5231 S: 'GTS_PDFA1',
5232 Info: new String('sRGB IEC61966-2.1'),
5233 OutputConditionIdentifier: new String('sRGB IEC61966-2.1'),
5234 DestOutputProfile: colorProfileRef
5235 });
5236 intentRef.end();
5237 this._root.data.OutputIntents = [intentRef];
5238 },
5239 _getPdfaid() {
5240 return `
5241 <rdf:Description xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/" rdf:about="">
5242 <pdfaid:part>${this.subset}</pdfaid:part>
5243 <pdfaid:conformance>${this.subset_conformance}</pdfaid:conformance>
5244 </rdf:Description>
5245 `;
5246 },
5247 _addPdfaMetadata() {
5248 this.appendXML(this._getPdfaid());
5249 }
5250};
5251
5252var PDFUA = {
5253 initPDFUA() {
5254 this.subset = 1;
5255 },
5256 endSubset() {
5257 this._addPdfuaMetadata();
5258 },
5259 _addPdfuaMetadata() {
5260 this.appendXML(this._getPdfuaid());
5261 },
5262 _getPdfuaid() {
5263 return `
5264 <rdf:Description xmlns:pdfuaid="http://www.aiim.org/pdfua/ns/id/" rdf:about="">
5265 <pdfuaid:part>${this.subset}</pdfuaid:part>
5266 </rdf:Description>
5267 `;
5268 }
5269};
5270
5271var SubsetMixin = {
5272 _importSubset(subset) {
5273 Object.assign(this, subset);
5274 },
5275 initSubset(options) {
5276 switch (options.subset) {
5277 case 'PDF/A-1':
5278 case 'PDF/A-1a':
5279 case 'PDF/A-1b':
5280 case 'PDF/A-2':
5281 case 'PDF/A-2a':
5282 case 'PDF/A-2b':
5283 case 'PDF/A-3':
5284 case 'PDF/A-3a':
5285 case 'PDF/A-3b':
5286 this._importSubset(PDFA);
5287 this.initPDFA(options.subset);
5288 break;
5289 case 'PDF/UA':
5290 this._importSubset(PDFUA);
5291 this.initPDFUA();
5292 break;
5293 }
5294 }
5295};
5296
5297class PDFMetadata {
5298 constructor() {
5299 this._metadata = `
5300 <?xpacket begin="\ufeff" id="W5M0MpCehiHzreSzNTczkc9d"?>
5301 <x:xmpmeta xmlns:x="adobe:ns:meta/">
5302 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
5303 `;
5304 }
5305 _closeTags() {
5306 this._metadata = this._metadata.concat(`
5307 </rdf:RDF>
5308 </x:xmpmeta>
5309 <?xpacket end="w"?>
5310 `);
5311 }
5312 append(xml, newline = true) {
5313 this._metadata = this._metadata.concat(xml);
5314 if (newline) this._metadata = this._metadata.concat('\n');
5315 }
5316 getXML() {
5317 return this._metadata;
5318 }
5319 getLength() {
5320 return this._metadata.length;
5321 }
5322 end() {
5323 this._closeTags();
5324 this._metadata = this._metadata.trim();
5325 }
5326}
5327
5328var MetadataMixin = {
5329 initMetadata() {
5330 this.metadata = new PDFMetadata();
5331 },
5332 appendXML(xml, newline = true) {
5333 this.metadata.append(xml, newline);
5334 },
5335 _addInfo() {
5336 this.appendXML(`
5337 <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/">
5338 <xmp:CreateDate>${this.info.CreationDate.toISOString().split('.')[0] + "Z"}</xmp:CreateDate>
5339 <xmp:CreatorTool>${this.info.Creator}</xmp:CreatorTool>
5340 </rdf:Description>
5341 `);
5342 if (this.info.Title || this.info.Author || this.info.Subject) {
5343 this.appendXML(`
5344 <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
5345 `);
5346 if (this.info.Title) {
5347 this.appendXML(`
5348 <dc:title>
5349 <rdf:Alt>
5350 <rdf:li xml:lang="x-default">${this.info.Title}</rdf:li>
5351 </rdf:Alt>
5352 </dc:title>
5353 `);
5354 }
5355 if (this.info.Author) {
5356 this.appendXML(`
5357 <dc:creator>
5358 <rdf:Seq>
5359 <rdf:li>${this.info.Author}</rdf:li>
5360 </rdf:Seq>
5361 </dc:creator>
5362 `);
5363 }
5364 if (this.info.Subject) {
5365 this.appendXML(`
5366 <dc:description>
5367 <rdf:Alt>
5368 <rdf:li xml:lang="x-default">${this.info.Subject}</rdf:li>
5369 </rdf:Alt>
5370 </dc:description>
5371 `);
5372 }
5373 this.appendXML(`
5374 </rdf:Description>
5375 `);
5376 }
5377 this.appendXML(`
5378 <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
5379 <pdf:Producer>${this.info.Creator}</pdf:Producer>`, false);
5380 if (this.info.Keywords) {
5381 this.appendXML(`
5382 <pdf:Keywords>${this.info.Keywords}</pdf:Keywords>`, false);
5383 }
5384 this.appendXML(`
5385 </rdf:Description>
5386 `);
5387 },
5388 endMetadata() {
5389 this._addInfo();
5390 this.metadata.end();
5391
5392 /*
5393 Metadata was introduced in PDF 1.4, so adding it to 1.3
5394 will likely only take up more space.
5395 */
5396 if (this.version != 1.3) {
5397 this.metadataRef = this.ref({
5398 length: this.metadata.getLength(),
5399 Type: 'Metadata',
5400 Subtype: 'XML'
5401 });
5402 this.metadataRef.compress = false;
5403 this.metadataRef.write(Buffer.from(this.metadata.getXML(), 'utf-8'));
5404 this.metadataRef.end();
5405 this._root.data.Metadata = this.metadataRef;
5406 }
5407 }
5408};
5409
5410/*
5411PDFDocument - represents an entire PDF document
5412By Devon Govett
5413*/
5414class PDFDocument extends stream.Readable {
5415 constructor(options = {}) {
5416 super(options);
5417 this.options = options;
5418
5419 // PDF version
5420 switch (options.pdfVersion) {
5421 case '1.4':
5422 this.version = 1.4;
5423 break;
5424 case '1.5':
5425 this.version = 1.5;
5426 break;
5427 case '1.6':
5428 this.version = 1.6;
5429 break;
5430 case '1.7':
5431 case '1.7ext3':
5432 this.version = 1.7;
5433 break;
5434 default:
5435 this.version = 1.3;
5436 break;
5437 }
5438
5439 // Whether streams should be compressed
5440 this.compress = this.options.compress != null ? this.options.compress : true;
5441 this._pageBuffer = [];
5442 this._pageBufferStart = 0;
5443
5444 // The PDF object store
5445 this._offsets = [];
5446 this._waiting = 0;
5447 this._ended = false;
5448 this._offset = 0;
5449 const Pages = this.ref({
5450 Type: 'Pages',
5451 Count: 0,
5452 Kids: []
5453 });
5454 const Names = this.ref({
5455 Dests: new PDFNameTree()
5456 });
5457 this._root = this.ref({
5458 Type: 'Catalog',
5459 Pages,
5460 Names
5461 });
5462 if (this.options.lang) {
5463 this._root.data.Lang = new String(this.options.lang);
5464 }
5465
5466 // The current page
5467 this.page = null;
5468
5469 // Initialize mixins
5470 this.initMetadata();
5471 this.initColor();
5472 this.initVector();
5473 this.initFonts(options.font);
5474 this.initText();
5475 this.initImages();
5476 this.initOutline();
5477 this.initMarkings(options);
5478 this.initSubset(options);
5479
5480 // Initialize the metadata
5481 this.info = {
5482 Producer: 'PDFKit',
5483 Creator: 'PDFKit',
5484 CreationDate: new Date()
5485 };
5486 if (this.options.info) {
5487 for (let key in this.options.info) {
5488 const val = this.options.info[key];
5489 this.info[key] = val;
5490 }
5491 }
5492 if (this.options.displayTitle) {
5493 this._root.data.ViewerPreferences = this.ref({
5494 DisplayDocTitle: true
5495 });
5496 }
5497
5498 // Generate file ID
5499 this._id = PDFSecurity.generateFileID(this.info);
5500
5501 // Initialize security settings
5502 this._security = PDFSecurity.create(this, options);
5503
5504 // Write the header
5505 // PDF version
5506 this._write(`%PDF-${this.version}`);
5507
5508 // 4 binary chars, as recommended by the spec
5509 this._write('%\xFF\xFF\xFF\xFF');
5510
5511 // Add the first page
5512 if (this.options.autoFirstPage !== false) {
5513 this.addPage();
5514 }
5515 }
5516 addPage(options) {
5517 if (options == null) {
5518 ({
5519 options
5520 } = this);
5521 }
5522
5523 // end the current page if needed
5524 if (!this.options.bufferPages) {
5525 this.flushPages();
5526 }
5527
5528 // create a page object
5529 this.page = new PDFPage(this, options);
5530 this._pageBuffer.push(this.page);
5531
5532 // add the page to the object store
5533 const pages = this._root.data.Pages.data;
5534 pages.Kids.push(this.page.dictionary);
5535 pages.Count++;
5536
5537 // reset x and y coordinates
5538 this.x = this.page.margins.left;
5539 this.y = this.page.margins.top;
5540
5541 // flip PDF coordinate system so that the origin is in
5542 // the top left rather than the bottom left
5543 this._ctm = [1, 0, 0, 1, 0, 0];
5544 this.transform(1, 0, 0, -1, 0, this.page.height);
5545 this.emit('pageAdded');
5546 return this;
5547 }
5548 continueOnNewPage(options) {
5549 const pageMarkings = this.endPageMarkings(this.page);
5550 this.addPage(options);
5551 this.initPageMarkings(pageMarkings);
5552 return this;
5553 }
5554 bufferedPageRange() {
5555 return {
5556 start: this._pageBufferStart,
5557 count: this._pageBuffer.length
5558 };
5559 }
5560 switchToPage(n) {
5561 let page;
5562 if (!(page = this._pageBuffer[n - this._pageBufferStart])) {
5563 throw new Error(`switchToPage(${n}) out of bounds, current buffer covers pages ${this._pageBufferStart} to ${this._pageBufferStart + this._pageBuffer.length - 1}`);
5564 }
5565 return this.page = page;
5566 }
5567 flushPages() {
5568 // this local variable exists so we're future-proof against
5569 // reentrant calls to flushPages.
5570 const pages = this._pageBuffer;
5571 this._pageBuffer = [];
5572 this._pageBufferStart += pages.length;
5573 for (let page of pages) {
5574 this.endPageMarkings(page);
5575 page.end();
5576 }
5577 }
5578 addNamedDestination(name, ...args) {
5579 if (args.length === 0) {
5580 args = ['XYZ', null, null, null];
5581 }
5582 if (args[0] === 'XYZ' && args[2] !== null) {
5583 args[2] = this.page.height - args[2];
5584 }
5585 args.unshift(this.page.dictionary);
5586 this._root.data.Names.data.Dests.add(name, args);
5587 }
5588 addNamedEmbeddedFile(name, ref) {
5589 if (!this._root.data.Names.data.EmbeddedFiles) {
5590 // disabling /Limits for this tree fixes attachments not showing in Adobe Reader
5591 this._root.data.Names.data.EmbeddedFiles = new PDFNameTree({
5592 limits: false
5593 });
5594 }
5595
5596 // add filespec to EmbeddedFiles
5597 this._root.data.Names.data.EmbeddedFiles.add(name, ref);
5598 }
5599 addNamedJavaScript(name, js) {
5600 if (!this._root.data.Names.data.JavaScript) {
5601 this._root.data.Names.data.JavaScript = new PDFNameTree();
5602 }
5603 let data = {
5604 JS: new String(js),
5605 S: 'JavaScript'
5606 };
5607 this._root.data.Names.data.JavaScript.add(name, data);
5608 }
5609 ref(data) {
5610 const ref = new PDFReference(this, this._offsets.length + 1, data);
5611 this._offsets.push(null); // placeholder for this object's offset once it is finalized
5612 this._waiting++;
5613 return ref;
5614 }
5615 _read() {}
5616 // do nothing, but this method is required by node
5617
5618 _write(data) {
5619 if (!Buffer.isBuffer(data)) {
5620 data = Buffer.from(data + '\n', 'binary');
5621 }
5622 this.push(data);
5623 return this._offset += data.length;
5624 }
5625 addContent(data) {
5626 this.page.write(data);
5627 return this;
5628 }
5629 _refEnd(ref) {
5630 this._offsets[ref.id - 1] = ref.offset;
5631 if (--this._waiting === 0 && this._ended) {
5632 this._finalize();
5633 return this._ended = false;
5634 }
5635 }
5636 end() {
5637 this.flushPages();
5638 this._info = this.ref();
5639 for (let key in this.info) {
5640 let val = this.info[key];
5641 if (typeof val === 'string') {
5642 val = new String(val);
5643 }
5644 let entry = this.ref(val);
5645 entry.end();
5646 this._info.data[key] = entry;
5647 }
5648 this._info.end();
5649 for (let name in this._fontFamilies) {
5650 const font = this._fontFamilies[name];
5651 font.finalize();
5652 }
5653 this.endOutline();
5654 this.endMarkings();
5655 if (this.subset) {
5656 this.endSubset();
5657 }
5658 this.endMetadata();
5659 this._root.end();
5660 this._root.data.Pages.end();
5661 this._root.data.Names.end();
5662 this.endAcroForm();
5663 if (this._root.data.ViewerPreferences) {
5664 this._root.data.ViewerPreferences.end();
5665 }
5666 if (this._security) {
5667 this._security.end();
5668 }
5669 if (this._waiting === 0) {
5670 return this._finalize();
5671 } else {
5672 return this._ended = true;
5673 }
5674 }
5675 _finalize() {
5676 // generate xref
5677 const xRefOffset = this._offset;
5678 this._write('xref');
5679 this._write(`0 ${this._offsets.length + 1}`);
5680 this._write('0000000000 65535 f ');
5681 for (let offset of this._offsets) {
5682 offset = `0000000000${offset}`.slice(-10);
5683 this._write(offset + ' 00000 n ');
5684 }
5685
5686 // trailer
5687 const trailer = {
5688 Size: this._offsets.length + 1,
5689 Root: this._root,
5690 Info: this._info,
5691 ID: [this._id, this._id]
5692 };
5693 if (this._security) {
5694 trailer.Encrypt = this._security.dictionary;
5695 }
5696 this._write('trailer');
5697 this._write(PDFObject.convert(trailer));
5698 this._write('startxref');
5699 this._write(`${xRefOffset}`);
5700 this._write('%%EOF');
5701
5702 // end the stream
5703 return this.push(null);
5704 }
5705 toString() {
5706 return '[object PDFDocument]';
5707 }
5708}
5709const mixin = methods => {
5710 Object.assign(PDFDocument.prototype, methods);
5711};
5712mixin(MetadataMixin);
5713mixin(ColorMixin);
5714mixin(VectorMixin);
5715mixin(FontsMixin);
5716mixin(TextMixin);
5717mixin(ImagesMixin);
5718mixin(AnnotationsMixin);
5719mixin(OutlineMixin);
5720mixin(MarkingsMixin);
5721mixin(AcroFormMixin);
5722mixin(AttachmentsMixin);
5723mixin(SubsetMixin);
5724PDFDocument.LineWrapper = LineWrapper;
5725
5726module.exports = PDFDocument;
5727
5728
5729}).call(this)}).call(this,require("buffer").Buffer,"/js")
5730},{"buffer":114,"crypto-js":129,"events":170,"fontkit":171,"fs":113,"jpeg-exif":205,"linebreak":207,"png-js":221,"stream":265,"zlib":101}],2:[function(require,module,exports){
5731"use strict";
5732Object.defineProperty(exports, "__esModule", {
5733 value: true
5734});
5735exports.default = _applyDecoratedDescriptor;
5736function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {
5737 var desc1 = {};
5738 Object['ke' + 'ys'](descriptor).forEach(function(key) {
5739 desc1[key] = descriptor[key];
5740 });
5741 desc1.enumerable = !!desc1.enumerable;
5742 desc1.configurable = !!desc1.configurable;
5743 if ('value' in desc1 || desc1.initializer) {
5744 desc1.writable = true;
5745 }
5746 desc1 = decorators.slice().reverse().reduce(function(desc, decorator) {
5747 return decorator ? decorator(target, property, desc) || desc : desc;
5748 }, desc1);
5749 var hasAccessor = Object.prototype.hasOwnProperty.call(desc1, 'get') || Object.prototype.hasOwnProperty.call(desc1, 'set');
5750 if (context && desc1.initializer !== void 0 && !hasAccessor) {
5751 desc1.value = desc1.initializer ? desc1.initializer.call(context) : void 0;
5752 desc1.initializer = undefined;
5753 }
5754 if (hasAccessor) {
5755 delete desc1.writable;
5756 delete desc1.initializer;
5757 delete desc1.value;
5758 }
5759 if (desc1.initializer === void 0) {
5760 Object['define' + 'Property'](target, property, desc1);
5761 desc1 = null;
5762 }
5763 return desc1;
5764}
5765
5766},{}],3:[function(require,module,exports){
5767"use strict";
5768Object.defineProperty(exports, "__esModule", {
5769 value: true
5770});
5771exports.default = _arrayLikeToArray;
5772function _arrayLikeToArray(arr, len) {
5773 if (len == null || len > arr.length) len = arr.length;
5774 for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
5775 return arr2;
5776}
5777
5778},{}],4:[function(require,module,exports){
5779"use strict";
5780Object.defineProperty(exports, "__esModule", {
5781 value: true
5782});
5783exports.default = _arrayWithHoles;
5784function _arrayWithHoles(arr) {
5785 if (Array.isArray(arr)) return arr;
5786}
5787
5788},{}],5:[function(require,module,exports){
5789"use strict";
5790Object.defineProperty(exports, "__esModule", {
5791 value: true
5792});
5793exports.default = _arrayWithoutHoles;
5794var _arrayLikeToArray = _interopRequireDefault(require("./_array_like_to_array"));
5795function _arrayWithoutHoles(arr) {
5796 if (Array.isArray(arr)) return (0, _arrayLikeToArray).default(arr);
5797}
5798function _interopRequireDefault(obj) {
5799 return obj && obj.__esModule ? obj : {
5800 default: obj
5801 };
5802}
5803
5804},{"./_array_like_to_array":3}],6:[function(require,module,exports){
5805"use strict";
5806Object.defineProperty(exports, "__esModule", {
5807 value: true
5808});
5809exports.default = _assertThisInitialized;
5810function _assertThisInitialized(self) {
5811 if (self === void 0) {
5812 throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
5813 }
5814 return self;
5815}
5816
5817},{}],7:[function(require,module,exports){
5818"use strict";
5819Object.defineProperty(exports, "__esModule", {
5820 value: true
5821});
5822exports.default = AsyncGenerator;
5823var _awaitValue = _interopRequireDefault(require("./_await_value"));
5824function AsyncGenerator(gen) {
5825 var front, back;
5826 function send(key, arg) {
5827 return new Promise(function(resolve, reject) {
5828 var request = {
5829 key: key,
5830 arg: arg,
5831 resolve: resolve,
5832 reject: reject,
5833 next: null
5834 };
5835 if (back) {
5836 back = back.next = request;
5837 } else {
5838 front = back = request;
5839 resume(key, arg);
5840 }
5841 });
5842 }
5843 function resume(key, arg1) {
5844 try {
5845 var result = gen[key](arg1);
5846 var value = result.value;
5847 var wrappedAwait = value instanceof _awaitValue.default;
5848 Promise.resolve(wrappedAwait ? value.wrapped : value).then(function(arg) {
5849 if (wrappedAwait) {
5850 resume("next", arg);
5851 return;
5852 }
5853 settle(result.done ? "return" : "normal", arg);
5854 }, function(err) {
5855 resume("throw", err);
5856 });
5857 } catch (err) {
5858 settle("throw", err);
5859 }
5860 }
5861 function settle(type, value) {
5862 switch(type){
5863 case "return":
5864 front.resolve({
5865 value: value,
5866 done: true
5867 });
5868 break;
5869 case "throw":
5870 front.reject(value);
5871 break;
5872 default:
5873 front.resolve({
5874 value: value,
5875 done: false
5876 });
5877 break;
5878 }
5879 front = front.next;
5880 if (front) {
5881 resume(front.key, front.arg);
5882 } else {
5883 back = null;
5884 }
5885 }
5886 this._invoke = send;
5887 if (typeof gen.return !== "function") {
5888 this.return = undefined;
5889 }
5890}
5891function _interopRequireDefault(obj) {
5892 return obj && obj.__esModule ? obj : {
5893 default: obj
5894 };
5895}
5896if (typeof Symbol === "function" && Symbol.asyncIterator) {
5897 AsyncGenerator.prototype[Symbol.asyncIterator] = function() {
5898 return this;
5899 };
5900}
5901AsyncGenerator.prototype.next = function(arg) {
5902 return this._invoke("next", arg);
5903};
5904AsyncGenerator.prototype.throw = function(arg) {
5905 return this._invoke("throw", arg);
5906};
5907AsyncGenerator.prototype.return = function(arg) {
5908 return this._invoke("return", arg);
5909};
5910
5911},{"./_await_value":12}],8:[function(require,module,exports){
5912"use strict";
5913Object.defineProperty(exports, "__esModule", {
5914 value: true
5915});
5916exports.default = _asyncGeneratorDelegate;
5917function _asyncGeneratorDelegate(inner, awaitWrap) {
5918 var iter = {}, waiting = false;
5919 function pump(key, value) {
5920 waiting = true;
5921 value = new Promise(function(resolve) {
5922 resolve(inner[key](value));
5923 });
5924 return {
5925 done: false,
5926 value: awaitWrap(value)
5927 };
5928 }
5929 if (typeof Symbol === "function" && Symbol.iterator) {
5930 iter[Symbol.iterator] = function() {
5931 return this;
5932 };
5933 }
5934 iter.next = function(value) {
5935 if (waiting) {
5936 waiting = false;
5937 return value;
5938 }
5939 return pump("next", value);
5940 };
5941 if (typeof inner.throw === "function") {
5942 iter.throw = function(value) {
5943 if (waiting) {
5944 waiting = false;
5945 throw value;
5946 }
5947 return pump("throw", value);
5948 };
5949 }
5950 if (typeof inner.return === "function") {
5951 iter.return = function(value) {
5952 return pump("return", value);
5953 };
5954 }
5955 return iter;
5956}
5957
5958},{}],9:[function(require,module,exports){
5959"use strict";
5960Object.defineProperty(exports, "__esModule", {
5961 value: true
5962});
5963exports.default = _asyncIterator;
5964function _asyncIterator(iterable) {
5965 var method;
5966 if (typeof Symbol === "function") {
5967 if (Symbol.asyncIterator) {
5968 method = iterable[Symbol.asyncIterator];
5969 if (method != null) return method.call(iterable);
5970 }
5971 if (Symbol.iterator) {
5972 method = iterable[Symbol.iterator];
5973 if (method != null) return method.call(iterable);
5974 }
5975 }
5976 throw new TypeError("Object is not async iterable");
5977}
5978
5979},{}],10:[function(require,module,exports){
5980"use strict";
5981Object.defineProperty(exports, "__esModule", {
5982 value: true
5983});
5984exports.default = _asyncToGenerator;
5985function _asyncToGenerator(fn) {
5986 return function() {
5987 var self = this, args = arguments;
5988 return new Promise(function(resolve, reject) {
5989 var gen = fn.apply(self, args);
5990 function _next(value) {
5991 asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
5992 }
5993 function _throw(err) {
5994 asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
5995 }
5996 _next(undefined);
5997 });
5998 };
5999}
6000function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
6001 try {
6002 var info = gen[key](arg);
6003 var value = info.value;
6004 } catch (error) {
6005 reject(error);
6006 return;
6007 }
6008 if (info.done) {
6009 resolve(value);
6010 } else {
6011 Promise.resolve(value).then(_next, _throw);
6012 }
6013}
6014
6015},{}],11:[function(require,module,exports){
6016"use strict";
6017Object.defineProperty(exports, "__esModule", {
6018 value: true
6019});
6020exports.default = _awaitAsyncGenerator;
6021var _awaitValue = _interopRequireDefault(require("./_await_value"));
6022function _awaitAsyncGenerator(value) {
6023 return new _awaitValue.default(value);
6024}
6025function _interopRequireDefault(obj) {
6026 return obj && obj.__esModule ? obj : {
6027 default: obj
6028 };
6029}
6030
6031},{"./_await_value":12}],12:[function(require,module,exports){
6032"use strict";
6033Object.defineProperty(exports, "__esModule", {
6034 value: true
6035});
6036exports.default = _AwaitValue;
6037function _AwaitValue(value) {
6038 this.wrapped = value;
6039}
6040
6041},{}],13:[function(require,module,exports){
6042"use strict";
6043Object.defineProperty(exports, "__esModule", {
6044 value: true
6045});
6046exports.default = _checkPrivateRedeclaration;
6047function _checkPrivateRedeclaration(obj, privateCollection) {
6048 if (privateCollection.has(obj)) {
6049 throw new TypeError("Cannot initialize the same private elements twice on an object");
6050 }
6051}
6052
6053},{}],14:[function(require,module,exports){
6054"use strict";
6055Object.defineProperty(exports, "__esModule", {
6056 value: true
6057});
6058exports.default = _classApplyDescriptorDestructureSet;
6059function _classApplyDescriptorDestructureSet(receiver, descriptor) {
6060 if (descriptor.set) {
6061 if (!("__destrObj" in descriptor)) {
6062 descriptor.__destrObj = {
6063 set value (v){
6064 descriptor.set.call(receiver, v);
6065 }
6066 };
6067 }
6068 return descriptor.__destrObj;
6069 } else {
6070 if (!descriptor.writable) {
6071 // This should only throw in strict mode, but class bodies are
6072 // always strict and private fields can only be used inside
6073 // class bodies.
6074 throw new TypeError("attempted to set read only private field");
6075 }
6076 return descriptor;
6077 }
6078}
6079
6080},{}],15:[function(require,module,exports){
6081"use strict";
6082Object.defineProperty(exports, "__esModule", {
6083 value: true
6084});
6085exports.default = _classApplyDescriptorGet;
6086function _classApplyDescriptorGet(receiver, descriptor) {
6087 if (descriptor.get) {
6088 return descriptor.get.call(receiver);
6089 }
6090 return descriptor.value;
6091}
6092
6093},{}],16:[function(require,module,exports){
6094"use strict";
6095Object.defineProperty(exports, "__esModule", {
6096 value: true
6097});
6098exports.default = _classApplyDescriptorSet;
6099function _classApplyDescriptorSet(receiver, descriptor, value) {
6100 if (descriptor.set) {
6101 descriptor.set.call(receiver, value);
6102 } else {
6103 if (!descriptor.writable) {
6104 // This should only throw in strict mode, but class bodies are
6105 // always strict and private fields can only be used inside
6106 // class bodies.
6107 throw new TypeError("attempted to set read only private field");
6108 }
6109 descriptor.value = value;
6110 }
6111}
6112
6113},{}],17:[function(require,module,exports){
6114"use strict";
6115Object.defineProperty(exports, "__esModule", {
6116 value: true
6117});
6118exports.default = _classCallCheck;
6119function _classCallCheck(instance, Constructor) {
6120 if (!(instance instanceof Constructor)) {
6121 throw new TypeError("Cannot call a class as a function");
6122 }
6123}
6124
6125},{}],18:[function(require,module,exports){
6126"use strict";
6127Object.defineProperty(exports, "__esModule", {
6128 value: true
6129});
6130exports.default = _classCheckPrivateStaticAccess;
6131function _classCheckPrivateStaticAccess(receiver, classConstructor) {
6132 if (receiver !== classConstructor) {
6133 throw new TypeError("Private static access of wrong provenance");
6134 }
6135}
6136
6137},{}],19:[function(require,module,exports){
6138"use strict";
6139Object.defineProperty(exports, "__esModule", {
6140 value: true
6141});
6142exports.default = _classCheckPrivateStaticFieldDescriptor;
6143function _classCheckPrivateStaticFieldDescriptor(descriptor, action) {
6144 if (descriptor === undefined) {
6145 throw new TypeError("attempted to " + action + " private static field before its declaration");
6146 }
6147}
6148
6149},{}],20:[function(require,module,exports){
6150"use strict";
6151Object.defineProperty(exports, "__esModule", {
6152 value: true
6153});
6154exports.default = _classExtractFieldDescriptor;
6155function _classExtractFieldDescriptor(receiver, privateMap, action) {
6156 if (!privateMap.has(receiver)) {
6157 throw new TypeError("attempted to " + action + " private field on non-instance");
6158 }
6159 return privateMap.get(receiver);
6160}
6161
6162},{}],21:[function(require,module,exports){
6163"use strict";
6164Object.defineProperty(exports, "__esModule", {
6165 value: true
6166});
6167exports.default = _classNameTDZError;
6168function _classNameTDZError(name) {
6169 throw new Error("Class \"" + name + "\" cannot be referenced in computed property keys.");
6170}
6171
6172},{}],22:[function(require,module,exports){
6173"use strict";
6174Object.defineProperty(exports, "__esModule", {
6175 value: true
6176});
6177exports.default = _classPrivateFieldDestructureSet;
6178var _classExtractFieldDescriptor = _interopRequireDefault(require("./_class_extract_field_descriptor"));
6179var _classApplyDescriptorDestructure = _interopRequireDefault(require("./_class_apply_descriptor_destructure"));
6180function _classPrivateFieldDestructureSet(receiver, privateMap) {
6181 var descriptor = (0, _classExtractFieldDescriptor).default(receiver, privateMap, "set");
6182 return (0, _classApplyDescriptorDestructure).default(receiver, descriptor);
6183}
6184function _interopRequireDefault(obj) {
6185 return obj && obj.__esModule ? obj : {
6186 default: obj
6187 };
6188}
6189
6190},{"./_class_apply_descriptor_destructure":14,"./_class_extract_field_descriptor":20}],23:[function(require,module,exports){
6191"use strict";
6192Object.defineProperty(exports, "__esModule", {
6193 value: true
6194});
6195exports.default = _classPrivateFieldGet;
6196var _classExtractFieldDescriptor = _interopRequireDefault(require("./_class_extract_field_descriptor"));
6197var _classApplyDescriptorGet = _interopRequireDefault(require("./_class_apply_descriptor_get"));
6198function _classPrivateFieldGet(receiver, privateMap) {
6199 var descriptor = (0, _classExtractFieldDescriptor).default(receiver, privateMap, "get");
6200 return (0, _classApplyDescriptorGet).default(receiver, descriptor);
6201}
6202function _interopRequireDefault(obj) {
6203 return obj && obj.__esModule ? obj : {
6204 default: obj
6205 };
6206}
6207
6208},{"./_class_apply_descriptor_get":15,"./_class_extract_field_descriptor":20}],24:[function(require,module,exports){
6209"use strict";
6210Object.defineProperty(exports, "__esModule", {
6211 value: true
6212});
6213exports.default = _classPrivateFieldInit;
6214var _checkPrivateRedeclaration = _interopRequireDefault(require("./_check_private_redeclaration"));
6215function _classPrivateFieldInit(obj, privateMap, value) {
6216 (0, _checkPrivateRedeclaration).default(obj, privateMap);
6217 privateMap.set(obj, value);
6218}
6219function _interopRequireDefault(obj) {
6220 return obj && obj.__esModule ? obj : {
6221 default: obj
6222 };
6223}
6224
6225},{"./_check_private_redeclaration":13}],25:[function(require,module,exports){
6226"use strict";
6227Object.defineProperty(exports, "__esModule", {
6228 value: true
6229});
6230exports.default = _classPrivateFieldBase;
6231function _classPrivateFieldBase(receiver, privateKey) {
6232 if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
6233 throw new TypeError("attempted to use private field on non-instance");
6234 }
6235 return receiver;
6236}
6237
6238},{}],26:[function(require,module,exports){
6239"use strict";
6240Object.defineProperty(exports, "__esModule", {
6241 value: true
6242});
6243exports.default = _classPrivateFieldLooseKey;
6244function _classPrivateFieldLooseKey(name) {
6245 return "__private_" + id++ + "_" + name;
6246}
6247var id = 0;
6248
6249},{}],27:[function(require,module,exports){
6250"use strict";
6251Object.defineProperty(exports, "__esModule", {
6252 value: true
6253});
6254exports.default = _classPrivateFieldSet;
6255var _classExtractFieldDescriptor = _interopRequireDefault(require("./_class_extract_field_descriptor"));
6256var _classApplyDescriptorSet = _interopRequireDefault(require("./_class_apply_descriptor_set"));
6257function _classPrivateFieldSet(receiver, privateMap, value) {
6258 var descriptor = (0, _classExtractFieldDescriptor).default(receiver, privateMap, "set");
6259 (0, _classApplyDescriptorSet).default(receiver, descriptor, value);
6260 return value;
6261}
6262function _interopRequireDefault(obj) {
6263 return obj && obj.__esModule ? obj : {
6264 default: obj
6265 };
6266}
6267
6268},{"./_class_apply_descriptor_set":16,"./_class_extract_field_descriptor":20}],28:[function(require,module,exports){
6269"use strict";
6270Object.defineProperty(exports, "__esModule", {
6271 value: true
6272});
6273exports.default = _classPrivateMethodGet;
6274function _classPrivateMethodGet(receiver, privateSet, fn) {
6275 if (!privateSet.has(receiver)) {
6276 throw new TypeError("attempted to get private field on non-instance");
6277 }
6278 return fn;
6279}
6280
6281},{}],29:[function(require,module,exports){
6282"use strict";
6283Object.defineProperty(exports, "__esModule", {
6284 value: true
6285});
6286exports.default = _classPrivateMethodInit;
6287var _checkPrivateRedeclaration = _interopRequireDefault(require("./_check_private_redeclaration"));
6288function _classPrivateMethodInit(obj, privateSet) {
6289 (0, _checkPrivateRedeclaration).default(obj, privateSet);
6290 privateSet.add(obj);
6291}
6292function _interopRequireDefault(obj) {
6293 return obj && obj.__esModule ? obj : {
6294 default: obj
6295 };
6296}
6297
6298},{"./_check_private_redeclaration":13}],30:[function(require,module,exports){
6299"use strict";
6300Object.defineProperty(exports, "__esModule", {
6301 value: true
6302});
6303exports.default = _classPrivateMethodSet;
6304function _classPrivateMethodSet() {
6305 throw new TypeError("attempted to reassign private method");
6306}
6307
6308},{}],31:[function(require,module,exports){
6309"use strict";
6310Object.defineProperty(exports, "__esModule", {
6311 value: true
6312});
6313exports.default = _classStaticPrivateFieldDestructureSet;
6314var _classCheckPrivateStaticAccess = _interopRequireDefault(require("./_class_check_private_static_access"));
6315var _classApplyDescriptorDestructure = _interopRequireDefault(require("./_class_apply_descriptor_destructure"));
6316function _classStaticPrivateFieldDestructureSet(receiver, classConstructor, descriptor) {
6317 (0, _classCheckPrivateStaticAccess).default(receiver, classConstructor);
6318 (0, _classCheckPrivateStaticAccess).default(descriptor, "set");
6319 return (0, _classApplyDescriptorDestructure).default(receiver, descriptor);
6320}
6321function _interopRequireDefault(obj) {
6322 return obj && obj.__esModule ? obj : {
6323 default: obj
6324 };
6325}
6326
6327},{"./_class_apply_descriptor_destructure":14,"./_class_check_private_static_access":18}],32:[function(require,module,exports){
6328"use strict";
6329Object.defineProperty(exports, "__esModule", {
6330 value: true
6331});
6332exports.default = _classStaticPrivateFieldSpecGet;
6333var _classCheckPrivateStaticAccess = _interopRequireDefault(require("./_class_check_private_static_access"));
6334var _classApplyDescriptorGet = _interopRequireDefault(require("./_class_apply_descriptor_get"));
6335function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) {
6336 (0, _classCheckPrivateStaticAccess).default(receiver, classConstructor);
6337 (0, _classCheckPrivateStaticAccess).default(descriptor, "get");
6338 return (0, _classApplyDescriptorGet).default(receiver, descriptor);
6339}
6340function _interopRequireDefault(obj) {
6341 return obj && obj.__esModule ? obj : {
6342 default: obj
6343 };
6344}
6345
6346},{"./_class_apply_descriptor_get":15,"./_class_check_private_static_access":18}],33:[function(require,module,exports){
6347"use strict";
6348Object.defineProperty(exports, "__esModule", {
6349 value: true
6350});
6351exports.default = _classStaticPrivateFieldSpecSet;
6352var _classCheckPrivateStaticAccess = _interopRequireDefault(require("./_class_check_private_static_access"));
6353var _classApplyDescriptorSet = _interopRequireDefault(require("./_class_apply_descriptor_set"));
6354function _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) {
6355 (0, _classCheckPrivateStaticAccess).default(receiver, classConstructor);
6356 (0, _classCheckPrivateStaticAccess).default(descriptor, "set");
6357 (0, _classApplyDescriptorSet).default(receiver, descriptor, value);
6358 return value;
6359}
6360function _interopRequireDefault(obj) {
6361 return obj && obj.__esModule ? obj : {
6362 default: obj
6363 };
6364}
6365
6366},{"./_class_apply_descriptor_set":16,"./_class_check_private_static_access":18}],34:[function(require,module,exports){
6367"use strict";
6368Object.defineProperty(exports, "__esModule", {
6369 value: true
6370});
6371exports.default = _construct;
6372var _setPrototypeOf = _interopRequireDefault(require("./_set_prototype_of"));
6373function _construct(Parent, args, Class) {
6374 return construct.apply(null, arguments);
6375}
6376function _interopRequireDefault(obj) {
6377 return obj && obj.__esModule ? obj : {
6378 default: obj
6379 };
6380}
6381function isNativeReflectConstruct() {
6382 if (typeof Reflect === "undefined" || !Reflect.construct) return false;
6383 if (Reflect.construct.sham) return false;
6384 if (typeof Proxy === "function") return true;
6385 try {
6386 Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
6387 return true;
6388 } catch (e) {
6389 return false;
6390 }
6391}
6392function construct(Parent1, args1, Class1) {
6393 if (isNativeReflectConstruct()) {
6394 construct = Reflect.construct;
6395 } else {
6396 construct = function construct(Parent, args, Class) {
6397 var a = [
6398 null
6399 ];
6400 a.push.apply(a, args);
6401 var Constructor = Function.bind.apply(Parent, a);
6402 var instance = new Constructor();
6403 if (Class) (0, _setPrototypeOf).default(instance, Class.prototype);
6404 return instance;
6405 };
6406 }
6407 return construct.apply(null, arguments);
6408}
6409
6410},{"./_set_prototype_of":67}],35:[function(require,module,exports){
6411"use strict";
6412Object.defineProperty(exports, "__esModule", {
6413 value: true
6414});
6415exports.default = _createClass;
6416function _createClass(Constructor, protoProps, staticProps) {
6417 if (protoProps) _defineProperties(Constructor.prototype, protoProps);
6418 if (staticProps) _defineProperties(Constructor, staticProps);
6419 return Constructor;
6420}
6421function _defineProperties(target, props) {
6422 for(var i = 0; i < props.length; i++){
6423 var descriptor = props[i];
6424 descriptor.enumerable = descriptor.enumerable || false;
6425 descriptor.configurable = true;
6426 if ("value" in descriptor) descriptor.writable = true;
6427 Object.defineProperty(target, descriptor.key, descriptor);
6428 }
6429}
6430
6431},{}],36:[function(require,module,exports){
6432"use strict";
6433Object.defineProperty(exports, "__esModule", {
6434 value: true
6435});
6436exports.default = _createSuper;
6437var _isNativeReflectConstruct = _interopRequireDefault(require("./_is_native_reflect_construct"));
6438var _getPrototypeOf = _interopRequireDefault(require("./_get_prototype_of"));
6439var _possibleConstructorReturn = _interopRequireDefault(require("./_possible_constructor_return"));
6440function _createSuper(Derived) {
6441 var hasNativeReflectConstruct = (0, _isNativeReflectConstruct).default();
6442 return function _createSuperInternal() {
6443 var Super = (0, _getPrototypeOf).default(Derived), result;
6444 if (hasNativeReflectConstruct) {
6445 var NewTarget = (0, _getPrototypeOf).default(this).constructor;
6446 result = Reflect.construct(Super, arguments, NewTarget);
6447 } else {
6448 result = Super.apply(this, arguments);
6449 }
6450 return (0, _possibleConstructorReturn).default(this, result);
6451 };
6452}
6453function _interopRequireDefault(obj) {
6454 return obj && obj.__esModule ? obj : {
6455 default: obj
6456 };
6457}
6458
6459},{"./_get_prototype_of":43,"./_is_native_reflect_construct":52,"./_possible_constructor_return":64}],37:[function(require,module,exports){
6460"use strict";
6461Object.defineProperty(exports, "__esModule", {
6462 value: true
6463});
6464exports.default = _decorate;
6465var _toArray = _interopRequireDefault(require("./_to_array"));
6466var _toPropertyKey = _interopRequireDefault(require("./_to_property_key"));
6467function _decorate(decorators, factory, superClass) {
6468 var r = factory(function initialize(O) {
6469 _initializeInstanceElements(O, decorated.elements);
6470 }, superClass);
6471 var decorated = _decorateClass(_coalesceClassElements(r.d.map(_createElementDescriptor)), decorators);
6472 _initializeClassElements(r.F, decorated.elements);
6473 return _runClassFinishers(r.F, decorated.finishers);
6474}
6475function _interopRequireDefault(obj) {
6476 return obj && obj.__esModule ? obj : {
6477 default: obj
6478 };
6479}
6480function _createElementDescriptor(def) {
6481 var key = (0, _toPropertyKey).default(def.key);
6482 var descriptor;
6483 if (def.kind === "method") {
6484 descriptor = {
6485 value: def.value,
6486 writable: true,
6487 configurable: true,
6488 enumerable: false
6489 };
6490 Object.defineProperty(def.value, "name", {
6491 value: _typeof(key) === "symbol" ? "" : key,
6492 configurable: true
6493 });
6494 } else if (def.kind === "get") {
6495 descriptor = {
6496 get: def.value,
6497 configurable: true,
6498 enumerable: false
6499 };
6500 } else if (def.kind === "set") {
6501 descriptor = {
6502 set: def.value,
6503 configurable: true,
6504 enumerable: false
6505 };
6506 } else if (def.kind === "field") {
6507 descriptor = {
6508 configurable: true,
6509 writable: true,
6510 enumerable: true
6511 };
6512 }
6513 var element = {
6514 kind: def.kind === "field" ? "field" : "method",
6515 key: key,
6516 placement: def.static ? "static" : def.kind === "field" ? "own" : "prototype",
6517 descriptor: descriptor
6518 };
6519 if (def.decorators) element.decorators = def.decorators;
6520 if (def.kind === "field") element.initializer = def.value;
6521 return element;
6522}
6523function _coalesceGetterSetter(element, other) {
6524 if (element.descriptor.get !== undefined) {
6525 other.descriptor.get = element.descriptor.get;
6526 } else {
6527 other.descriptor.set = element.descriptor.set;
6528 }
6529}
6530function _coalesceClassElements(elements) {
6531 var newElements = [];
6532 var isSameElement = function isSameElement(other) {
6533 return other.kind === "method" && other.key === element.key && other.placement === element.placement;
6534 };
6535 for(var i = 0; i < elements.length; i++){
6536 var element = elements[i];
6537 var other1;
6538 if (element.kind === "method" && (other1 = newElements.find(isSameElement))) {
6539 if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other1.descriptor)) {
6540 if (_hasDecorators(element) || _hasDecorators(other1)) {
6541 throw new ReferenceError("Duplicated methods (" + element.key + ") can't be decorated.");
6542 }
6543 other1.descriptor = element.descriptor;
6544 } else {
6545 if (_hasDecorators(element)) {
6546 if (_hasDecorators(other1)) {
6547 throw new ReferenceError("Decorators can't be placed on different accessors with for " + "the same property (" + element.key + ").");
6548 }
6549 other1.decorators = element.decorators;
6550 }
6551 _coalesceGetterSetter(element, other1);
6552 }
6553 } else {
6554 newElements.push(element);
6555 }
6556 }
6557 return newElements;
6558}
6559function _hasDecorators(element) {
6560 return element.decorators && element.decorators.length;
6561}
6562function _isDataDescriptor(desc) {
6563 return desc !== undefined && !(desc.value === undefined && desc.writable === undefined);
6564}
6565function _initializeClassElements(F, elements) {
6566 var proto = F.prototype;
6567 [
6568 "method",
6569 "field"
6570 ].forEach(function(kind) {
6571 elements.forEach(function(element) {
6572 var placement = element.placement;
6573 if (element.kind === kind && (placement === "static" || placement === "prototype")) {
6574 var receiver = placement === "static" ? F : proto;
6575 _defineClassElement(receiver, element);
6576 }
6577 });
6578 });
6579}
6580function _initializeInstanceElements(O, elements) {
6581 [
6582 "method",
6583 "field"
6584 ].forEach(function(kind) {
6585 elements.forEach(function(element) {
6586 if (element.kind === kind && element.placement === "own") {
6587 _defineClassElement(O, element);
6588 }
6589 });
6590 });
6591}
6592function _defineClassElement(receiver, element) {
6593 var descriptor = element.descriptor;
6594 if (element.kind === "field") {
6595 var initializer = element.initializer;
6596 descriptor = {
6597 enumerable: descriptor.enumerable,
6598 writable: descriptor.writable,
6599 configurable: descriptor.configurable,
6600 value: initializer === void 0 ? void 0 : initializer.call(receiver)
6601 };
6602 }
6603 Object.defineProperty(receiver, element.key, descriptor);
6604}
6605function _decorateClass(elements, decorators) {
6606 var newElements = [];
6607 var finishers = [];
6608 var placements = {
6609 static: [],
6610 prototype: [],
6611 own: []
6612 };
6613 elements.forEach(function(element) {
6614 _addElementPlacement(element, placements);
6615 });
6616 elements.forEach(function(element) {
6617 if (!_hasDecorators(element)) return newElements.push(element);
6618 var elementFinishersExtras = _decorateElement(element, placements);
6619 newElements.push(elementFinishersExtras.element);
6620 newElements.push.apply(newElements, elementFinishersExtras.extras);
6621 finishers.push.apply(finishers, elementFinishersExtras.finishers);
6622 });
6623 if (!decorators) {
6624 return {
6625 elements: newElements,
6626 finishers: finishers
6627 };
6628 }
6629 var result = _decorateConstructor(newElements, decorators);
6630 finishers.push.apply(finishers, result.finishers);
6631 result.finishers = finishers;
6632 return result;
6633}
6634function _addElementPlacement(element, placements, silent) {
6635 var keys = placements[element.placement];
6636 if (!silent && keys.indexOf(element.key) !== -1) {
6637 throw new TypeError("Duplicated element (" + element.key + ")");
6638 }
6639 keys.push(element.key);
6640}
6641function _decorateElement(element, placements) {
6642 var extras = [];
6643 var finishers = [];
6644 for(var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--){
6645 var keys = placements[element.placement];
6646 keys.splice(keys.indexOf(element.key), 1);
6647 var elementObject = _fromElementDescriptor(element);
6648 var elementFinisherExtras = _toElementFinisherExtras((0, decorators[i])(elementObject) || elementObject);
6649 element = elementFinisherExtras.element;
6650 _addElementPlacement(element, placements);
6651 if (elementFinisherExtras.finisher) {
6652 finishers.push(elementFinisherExtras.finisher);
6653 }
6654 var newExtras = elementFinisherExtras.extras;
6655 if (newExtras) {
6656 for(var j = 0; j < newExtras.length; j++){
6657 _addElementPlacement(newExtras[j], placements);
6658 }
6659 extras.push.apply(extras, newExtras);
6660 }
6661 }
6662 return {
6663 element: element,
6664 finishers: finishers,
6665 extras: extras
6666 };
6667}
6668function _decorateConstructor(elements, decorators) {
6669 var finishers = [];
6670 for(var i = decorators.length - 1; i >= 0; i--){
6671 var obj = _fromClassDescriptor(elements);
6672 var elementsAndFinisher = _toClassDescriptor((0, decorators[i])(obj) || obj);
6673 if (elementsAndFinisher.finisher !== undefined) {
6674 finishers.push(elementsAndFinisher.finisher);
6675 }
6676 if (elementsAndFinisher.elements !== undefined) {
6677 elements = elementsAndFinisher.elements;
6678 for(var j = 0; j < elements.length - 1; j++){
6679 for(var k = j + 1; k < elements.length; k++){
6680 if (elements[j].key === elements[k].key && elements[j].placement === elements[k].placement) {
6681 throw new TypeError("Duplicated element (" + elements[j].key + ")");
6682 }
6683 }
6684 }
6685 }
6686 }
6687 return {
6688 elements: elements,
6689 finishers: finishers
6690 };
6691}
6692function _fromElementDescriptor(element) {
6693 var obj = {
6694 kind: element.kind,
6695 key: element.key,
6696 placement: element.placement,
6697 descriptor: element.descriptor
6698 };
6699 var desc = {
6700 value: "Descriptor",
6701 configurable: true
6702 };
6703 Object.defineProperty(obj, Symbol.toStringTag, desc);
6704 if (element.kind === "field") obj.initializer = element.initializer;
6705 return obj;
6706}
6707function _toElementDescriptors(elementObjects) {
6708 if (elementObjects === undefined) return;
6709 return (0, _toArray).default(elementObjects).map(function(elementObject) {
6710 var element = _toElementDescriptor(elementObject);
6711 _disallowProperty(elementObject, "finisher", "An element descriptor");
6712 _disallowProperty(elementObject, "extras", "An element descriptor");
6713 return element;
6714 });
6715}
6716function _toElementDescriptor(elementObject) {
6717 var kind = String(elementObject.kind);
6718 if (kind !== "method" && kind !== "field") {
6719 throw new TypeError('An element descriptor\'s .kind property must be either "method" or' + ' "field", but a decorator created an element descriptor with' + ' .kind "' + kind + '"');
6720 }
6721 var key = (0, _toPropertyKey).default(elementObject.key);
6722 var placement = String(elementObject.placement);
6723 if (placement !== "static" && placement !== "prototype" && placement !== "own") {
6724 throw new TypeError('An element descriptor\'s .placement property must be one of "static",' + ' "prototype" or "own", but a decorator created an element descriptor' + ' with .placement "' + placement + '"');
6725 }
6726 var descriptor = elementObject.descriptor;
6727 _disallowProperty(elementObject, "elements", "An element descriptor");
6728 var element = {
6729 kind: kind,
6730 key: key,
6731 placement: placement,
6732 descriptor: Object.assign({}, descriptor)
6733 };
6734 if (kind !== "field") {
6735 _disallowProperty(elementObject, "initializer", "A method descriptor");
6736 } else {
6737 _disallowProperty(descriptor, "get", "The property descriptor of a field descriptor");
6738 _disallowProperty(descriptor, "set", "The property descriptor of a field descriptor");
6739 _disallowProperty(descriptor, "value", "The property descriptor of a field descriptor");
6740 element.initializer = elementObject.initializer;
6741 }
6742 return element;
6743}
6744function _toElementFinisherExtras(elementObject) {
6745 var element = _toElementDescriptor(elementObject);
6746 var finisher = _optionalCallableProperty(elementObject, "finisher");
6747 var extras = _toElementDescriptors(elementObject.extras);
6748 return {
6749 element: element,
6750 finisher: finisher,
6751 extras: extras
6752 };
6753}
6754function _fromClassDescriptor(elements) {
6755 var obj = {
6756 kind: "class",
6757 elements: elements.map(_fromElementDescriptor)
6758 };
6759 var desc = {
6760 value: "Descriptor",
6761 configurable: true
6762 };
6763 Object.defineProperty(obj, Symbol.toStringTag, desc);
6764 return obj;
6765}
6766function _toClassDescriptor(obj) {
6767 var kind = String(obj.kind);
6768 if (kind !== "class") {
6769 throw new TypeError('A class descriptor\'s .kind property must be "class", but a decorator' + ' created a class descriptor with .kind "' + kind + '"');
6770 }
6771 _disallowProperty(obj, "key", "A class descriptor");
6772 _disallowProperty(obj, "placement", "A class descriptor");
6773 _disallowProperty(obj, "descriptor", "A class descriptor");
6774 _disallowProperty(obj, "initializer", "A class descriptor");
6775 _disallowProperty(obj, "extras", "A class descriptor");
6776 var finisher = _optionalCallableProperty(obj, "finisher");
6777 var elements = _toElementDescriptors(obj.elements);
6778 return {
6779 elements: elements,
6780 finisher: finisher
6781 };
6782}
6783function _disallowProperty(obj, name, objectType) {
6784 if (obj[name] !== undefined) {
6785 throw new TypeError(objectType + " can't have a ." + name + " property.");
6786 }
6787}
6788function _optionalCallableProperty(obj, name) {
6789 var value = obj[name];
6790 if (value !== undefined && typeof value !== "function") {
6791 throw new TypeError("Expected '" + name + "' to be a function");
6792 }
6793 return value;
6794}
6795function _runClassFinishers(constructor, finishers) {
6796 for(var i = 0; i < finishers.length; i++){
6797 var newConstructor = (0, finishers[i])(constructor);
6798 if (newConstructor !== undefined) {
6799 if (typeof newConstructor !== "function") {
6800 throw new TypeError("Finishers must return a constructor.");
6801 }
6802 constructor = newConstructor;
6803 }
6804 }
6805 return constructor;
6806}
6807
6808},{"./_to_array":75,"./_to_property_key":78}],38:[function(require,module,exports){
6809"use strict";
6810Object.defineProperty(exports, "__esModule", {
6811 value: true
6812});
6813exports.default = _defaults;
6814function _defaults(obj, defaults) {
6815 var keys = Object.getOwnPropertyNames(defaults);
6816 for(var i = 0; i < keys.length; i++){
6817 var key = keys[i];
6818 var value = Object.getOwnPropertyDescriptor(defaults, key);
6819 if (value && value.configurable && obj[key] === undefined) {
6820 Object.defineProperty(obj, key, value);
6821 }
6822 }
6823 return obj;
6824}
6825
6826},{}],39:[function(require,module,exports){
6827"use strict";
6828Object.defineProperty(exports, "__esModule", {
6829 value: true
6830});
6831exports.default = _defineEnumerableProperties;
6832function _defineEnumerableProperties(obj, descs) {
6833 for(var key in descs){
6834 var desc = descs[key];
6835 desc.configurable = desc.enumerable = true;
6836 if ("value" in desc) desc.writable = true;
6837 Object.defineProperty(obj, key, desc);
6838 }
6839 if (Object.getOwnPropertySymbols) {
6840 var objectSymbols = Object.getOwnPropertySymbols(descs);
6841 for(var i = 0; i < objectSymbols.length; i++){
6842 var sym = objectSymbols[i];
6843 var desc = descs[sym];
6844 desc.configurable = desc.enumerable = true;
6845 if ("value" in desc) desc.writable = true;
6846 Object.defineProperty(obj, sym, desc);
6847 }
6848 }
6849 return obj;
6850}
6851
6852},{}],40:[function(require,module,exports){
6853"use strict";
6854Object.defineProperty(exports, "__esModule", {
6855 value: true
6856});
6857exports.default = _defineProperty;
6858function _defineProperty(obj, key, value) {
6859 if (key in obj) {
6860 Object.defineProperty(obj, key, {
6861 value: value,
6862 enumerable: true,
6863 configurable: true,
6864 writable: true
6865 });
6866 } else {
6867 obj[key] = value;
6868 }
6869 return obj;
6870}
6871
6872},{}],41:[function(require,module,exports){
6873"use strict";
6874Object.defineProperty(exports, "__esModule", {
6875 value: true
6876});
6877exports.default = _extends;
6878function _extends() {
6879 return extends_.apply(this, arguments);
6880}
6881function extends_() {
6882 extends_ = Object.assign || function(target) {
6883 for(var i = 1; i < arguments.length; i++){
6884 var source = arguments[i];
6885 for(var key in source){
6886 if (Object.prototype.hasOwnProperty.call(source, key)) {
6887 target[key] = source[key];
6888 }
6889 }
6890 }
6891 return target;
6892 };
6893 return extends_.apply(this, arguments);
6894}
6895
6896},{}],42:[function(require,module,exports){
6897"use strict";
6898Object.defineProperty(exports, "__esModule", {
6899 value: true
6900});
6901exports.default = _get;
6902var _superPropBase = _interopRequireDefault(require("./_super_prop_base"));
6903function _get(target, property, receiver) {
6904 return get(target, property, receiver);
6905}
6906function _interopRequireDefault(obj) {
6907 return obj && obj.__esModule ? obj : {
6908 default: obj
6909 };
6910}
6911function get(target1, property1, receiver1) {
6912 if (typeof Reflect !== "undefined" && Reflect.get) {
6913 get = Reflect.get;
6914 } else {
6915 get = function get(target, property, receiver) {
6916 var base = (0, _superPropBase).default(target, property);
6917 if (!base) return;
6918 var desc = Object.getOwnPropertyDescriptor(base, property);
6919 if (desc.get) {
6920 return desc.get.call(receiver || target);
6921 }
6922 return desc.value;
6923 };
6924 }
6925 return get(target1, property1, receiver1);
6926}
6927
6928},{"./_super_prop_base":71}],43:[function(require,module,exports){
6929"use strict";
6930Object.defineProperty(exports, "__esModule", {
6931 value: true
6932});
6933exports.default = _getPrototypeOf;
6934function _getPrototypeOf(o) {
6935 return getPrototypeOf(o);
6936}
6937function getPrototypeOf(o1) {
6938 getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {
6939 return o.__proto__ || Object.getPrototypeOf(o);
6940 };
6941 return getPrototypeOf(o1);
6942}
6943
6944},{}],44:[function(require,module,exports){
6945"use strict";
6946Object.defineProperty(exports, "__esModule", {
6947 value: true
6948});
6949exports.default = _inherits;
6950var _setPrototypeOf = _interopRequireDefault(require("./_set_prototype_of"));
6951function _inherits(subClass, superClass) {
6952 if (typeof superClass !== "function" && superClass !== null) {
6953 throw new TypeError("Super expression must either be null or a function");
6954 }
6955 subClass.prototype = Object.create(superClass && superClass.prototype, {
6956 constructor: {
6957 value: subClass,
6958 writable: true,
6959 configurable: true
6960 }
6961 });
6962 if (superClass) (0, _setPrototypeOf).default(subClass, superClass);
6963}
6964function _interopRequireDefault(obj) {
6965 return obj && obj.__esModule ? obj : {
6966 default: obj
6967 };
6968}
6969
6970},{"./_set_prototype_of":67}],45:[function(require,module,exports){
6971"use strict";
6972Object.defineProperty(exports, "__esModule", {
6973 value: true
6974});
6975exports.default = _inheritsLoose;
6976function _inheritsLoose(subClass, superClass) {
6977 subClass.prototype = Object.create(superClass.prototype);
6978 subClass.prototype.constructor = subClass;
6979 subClass.__proto__ = superClass;
6980}
6981
6982},{}],46:[function(require,module,exports){
6983"use strict";
6984Object.defineProperty(exports, "__esModule", {
6985 value: true
6986});
6987exports.default = _initializerDefineProperty;
6988function _initializerDefineProperty(target, property, descriptor, context) {
6989 if (!descriptor) return;
6990 Object.defineProperty(target, property, {
6991 enumerable: descriptor.enumerable,
6992 configurable: descriptor.configurable,
6993 writable: descriptor.writable,
6994 value: descriptor.initializer ? descriptor.initializer.call(context) : void 0
6995 });
6996}
6997
6998},{}],47:[function(require,module,exports){
6999"use strict";
7000Object.defineProperty(exports, "__esModule", {
7001 value: true
7002});
7003exports.default = _initializerWarningHelper;
7004function _initializerWarningHelper(descriptor, context) {
7005 throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and set to use loose mode. ' + 'To use proposal-class-properties in spec mode with decorators, wait for ' + 'the next major version of decorators in stage 2.');
7006}
7007
7008},{}],48:[function(require,module,exports){
7009"use strict";
7010Object.defineProperty(exports, "__esModule", {
7011 value: true
7012});
7013exports.default = _instanceof;
7014function _instanceof(left, right) {
7015 if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
7016 return !!right[Symbol.hasInstance](left);
7017 } else {
7018 return left instanceof right;
7019 }
7020}
7021
7022},{}],49:[function(require,module,exports){
7023"use strict";
7024Object.defineProperty(exports, "__esModule", {
7025 value: true
7026});
7027exports.default = _interopRequireDefault;
7028function _interopRequireDefault(obj) {
7029 return obj && obj.__esModule ? obj : {
7030 default: obj
7031 };
7032}
7033
7034},{}],50:[function(require,module,exports){
7035"use strict";
7036Object.defineProperty(exports, "__esModule", {
7037 value: true
7038});
7039exports.default = _interopRequireWildcard;
7040function _interopRequireWildcard(obj) {
7041 if (obj && obj.__esModule) {
7042 return obj;
7043 }
7044 if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
7045 return {
7046 default: obj
7047 };
7048 }
7049 var cache = _getRequireWildcardCache();
7050 if (cache && cache.has(obj)) {
7051 return cache.get(obj);
7052 }
7053 var newObj = {};
7054 var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
7055 for(var key in obj){
7056 if (Object.prototype.hasOwnProperty.call(obj, key)) {
7057 var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
7058 if (desc && (desc.get || desc.set)) {
7059 Object.defineProperty(newObj, key, desc);
7060 } else {
7061 newObj[key] = obj[key];
7062 }
7063 }
7064 }
7065 newObj.default = obj;
7066 if (cache) {
7067 cache.set(obj, newObj);
7068 }
7069 return newObj;
7070}
7071function _getRequireWildcardCache() {
7072 if (typeof WeakMap !== "function") return null;
7073 var cache = new WeakMap();
7074 _getRequireWildcardCache = function() {
7075 return cache;
7076 };
7077 return cache;
7078}
7079
7080},{}],51:[function(require,module,exports){
7081"use strict";
7082Object.defineProperty(exports, "__esModule", {
7083 value: true
7084});
7085exports.default = _isNativeFunction;
7086function _isNativeFunction(fn) {
7087 return Function.toString.call(fn).indexOf("[native code]") !== -1;
7088}
7089
7090},{}],52:[function(require,module,exports){
7091"use strict";
7092Object.defineProperty(exports, "__esModule", {
7093 value: true
7094});
7095exports.default = _isNativeReflectConstruct;
7096function _isNativeReflectConstruct() {
7097 if (typeof Reflect === "undefined" || !Reflect.construct) return false;
7098 if (Reflect.construct.sham) return false;
7099 if (typeof Proxy === "function") return true;
7100 try {
7101 Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
7102 return true;
7103 } catch (e) {
7104 return false;
7105 }
7106}
7107
7108},{}],53:[function(require,module,exports){
7109"use strict";
7110Object.defineProperty(exports, "__esModule", {
7111 value: true
7112});
7113exports.default = _iterableToArray;
7114function _iterableToArray(iter) {
7115 if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
7116}
7117
7118},{}],54:[function(require,module,exports){
7119"use strict";
7120Object.defineProperty(exports, "__esModule", {
7121 value: true
7122});
7123exports.default = _iterableToArrayLimit;
7124function _iterableToArrayLimit(arr, i) {
7125 var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
7126 if (_i == null) return;
7127 var _arr = [];
7128 var _n = true;
7129 var _d = false;
7130 var _s, _e;
7131 try {
7132 for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
7133 _arr.push(_s.value);
7134 if (i && _arr.length === i) break;
7135 }
7136 } catch (err) {
7137 _d = true;
7138 _e = err;
7139 } finally{
7140 try {
7141 if (!_n && _i["return"] != null) _i["return"]();
7142 } finally{
7143 if (_d) throw _e;
7144 }
7145 }
7146 return _arr;
7147}
7148
7149},{}],55:[function(require,module,exports){
7150"use strict";
7151Object.defineProperty(exports, "__esModule", {
7152 value: true
7153});
7154exports.default = _iterableToArrayLimitLoose;
7155function _iterableToArrayLimitLoose(arr, i) {
7156 var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]);
7157 if (_i == null) return;
7158 var _arr = [];
7159 for(_i = _i.call(arr), _step; !(_step = _i.next()).done;){
7160 _arr.push(_step.value);
7161 if (i && _arr.length === i) break;
7162 }
7163 return _arr;
7164}
7165
7166},{}],56:[function(require,module,exports){
7167"use strict";
7168Object.defineProperty(exports, "__esModule", {
7169 value: true
7170});
7171exports.default = _createRawReactElement;
7172function _createRawReactElement(type, props, key, children) {
7173 if (!REACT_ELEMENT_TYPE) {
7174 REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol.for && Symbol.for("react.element") || 0xeac7;
7175 }
7176 var defaultProps = type && type.defaultProps;
7177 var childrenLength = arguments.length - 3;
7178 if (!props && childrenLength !== 0) {
7179 props = {
7180 children: void 0
7181 };
7182 }
7183 if (props && defaultProps) {
7184 for(var propName in defaultProps){
7185 if (props[propName] === void 0) {
7186 props[propName] = defaultProps[propName];
7187 }
7188 }
7189 } else if (!props) {
7190 props = defaultProps || {};
7191 }
7192 if (childrenLength === 1) {
7193 props.children = children;
7194 } else if (childrenLength > 1) {
7195 var childArray = new Array(childrenLength);
7196 for(var i = 0; i < childrenLength; i++){
7197 childArray[i] = arguments[i + 3];
7198 }
7199 props.children = childArray;
7200 }
7201 return {
7202 $$typeof: REACT_ELEMENT_TYPE,
7203 type: type,
7204 key: key === undefined ? null : '' + key,
7205 ref: null,
7206 props: props,
7207 _owner: null
7208 };
7209}
7210var REACT_ELEMENT_TYPE;
7211
7212},{}],57:[function(require,module,exports){
7213"use strict";
7214Object.defineProperty(exports, "__esModule", {
7215 value: true
7216});
7217exports.default = _newArrowCheck;
7218function _newArrowCheck(innerThis, boundThis) {
7219 if (innerThis !== boundThis) {
7220 throw new TypeError("Cannot instantiate an arrow function");
7221 }
7222}
7223
7224},{}],58:[function(require,module,exports){
7225"use strict";
7226Object.defineProperty(exports, "__esModule", {
7227 value: true
7228});
7229exports.default = _nonIterableRest;
7230function _nonIterableRest() {
7231 throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
7232}
7233
7234},{}],59:[function(require,module,exports){
7235"use strict";
7236Object.defineProperty(exports, "__esModule", {
7237 value: true
7238});
7239exports.default = _nonIterableSpread;
7240function _nonIterableSpread() {
7241 throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
7242}
7243
7244},{}],60:[function(require,module,exports){
7245"use strict";
7246Object.defineProperty(exports, "__esModule", {
7247 value: true
7248});
7249exports.default = _objectSpread;
7250var _defineProperty = _interopRequireDefault(require("./_define_property"));
7251function _objectSpread(target) {
7252 for(var i = 1; i < arguments.length; i++){
7253 var source = arguments[i] != null ? arguments[i] : {};
7254 var ownKeys = Object.keys(source);
7255 if (typeof Object.getOwnPropertySymbols === 'function') {
7256 ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
7257 return Object.getOwnPropertyDescriptor(source, sym).enumerable;
7258 }));
7259 }
7260 ownKeys.forEach(function(key) {
7261 (0, _defineProperty).default(target, key, source[key]);
7262 });
7263 }
7264 return target;
7265}
7266function _interopRequireDefault(obj) {
7267 return obj && obj.__esModule ? obj : {
7268 default: obj
7269 };
7270}
7271
7272},{"./_define_property":40}],61:[function(require,module,exports){
7273"use strict";
7274Object.defineProperty(exports, "__esModule", {
7275 value: true
7276});
7277exports.default = _objectSpreadProps;
7278function _objectSpreadProps(target, source) {
7279 source = source != null ? source : {};
7280 if (Object.getOwnPropertyDescriptors) {
7281 Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
7282 } else {
7283 ownKeys(Object(source)).forEach(function(key) {
7284 Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
7285 });
7286 }
7287 return target;
7288}
7289function ownKeys(object, enumerableOnly) {
7290 var keys = Object.keys(object);
7291 if (Object.getOwnPropertySymbols) {
7292 var symbols = Object.getOwnPropertySymbols(object);
7293 if (enumerableOnly) {
7294 symbols = symbols.filter(function(sym) {
7295 return Object.getOwnPropertyDescriptor(object, sym).enumerable;
7296 });
7297 }
7298 keys.push.apply(keys, symbols);
7299 }
7300 return keys;
7301}
7302
7303},{}],62:[function(require,module,exports){
7304"use strict";
7305Object.defineProperty(exports, "__esModule", {
7306 value: true
7307});
7308exports.default = _objectWithoutProperties;
7309var _objectWithoutPropertiesLoose = _interopRequireDefault(require("./_object_without_properties_loose"));
7310function _objectWithoutProperties(source, excluded) {
7311 if (source == null) return {};
7312 var target = (0, _objectWithoutPropertiesLoose).default(source, excluded);
7313 var key, i;
7314 if (Object.getOwnPropertySymbols) {
7315 var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
7316 for(i = 0; i < sourceSymbolKeys.length; i++){
7317 key = sourceSymbolKeys[i];
7318 if (excluded.indexOf(key) >= 0) continue;
7319 if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
7320 target[key] = source[key];
7321 }
7322 }
7323 return target;
7324}
7325function _interopRequireDefault(obj) {
7326 return obj && obj.__esModule ? obj : {
7327 default: obj
7328 };
7329}
7330
7331},{"./_object_without_properties_loose":63}],63:[function(require,module,exports){
7332"use strict";
7333Object.defineProperty(exports, "__esModule", {
7334 value: true
7335});
7336exports.default = _objectWithoutPropertiesLoose;
7337function _objectWithoutPropertiesLoose(source, excluded) {
7338 if (source == null) return {};
7339 var target = {};
7340 var sourceKeys = Object.keys(source);
7341 var key, i;
7342 for(i = 0; i < sourceKeys.length; i++){
7343 key = sourceKeys[i];
7344 if (excluded.indexOf(key) >= 0) continue;
7345 target[key] = source[key];
7346 }
7347 return target;
7348}
7349
7350},{}],64:[function(require,module,exports){
7351"use strict";
7352Object.defineProperty(exports, "__esModule", {
7353 value: true
7354});
7355exports.default = _possibleConstructorReturn;
7356var _assertThisInitialized = _interopRequireDefault(require("./_assert_this_initialized"));
7357var _typeOf = _interopRequireDefault(require("./_type_of"));
7358function _possibleConstructorReturn(self, call) {
7359 if (call && ((0, _typeOf).default(call) === "object" || typeof call === "function")) {
7360 return call;
7361 }
7362 return (0, _assertThisInitialized).default(self);
7363}
7364function _interopRequireDefault(obj) {
7365 return obj && obj.__esModule ? obj : {
7366 default: obj
7367 };
7368}
7369
7370},{"./_assert_this_initialized":6,"./_type_of":79}],65:[function(require,module,exports){
7371"use strict";
7372Object.defineProperty(exports, "__esModule", {
7373 value: true
7374});
7375exports.default = _readOnlyError;
7376function _readOnlyError(name) {
7377 throw new Error("\"" + name + "\" is read-only");
7378}
7379
7380},{}],66:[function(require,module,exports){
7381"use strict";
7382Object.defineProperty(exports, "__esModule", {
7383 value: true
7384});
7385exports.default = _set;
7386var _defineProperty = _interopRequireDefault(require("./_define_property"));
7387var _superPropBase = _interopRequireDefault(require("./_super_prop_base"));
7388function _set(target, property, value, receiver, isStrict) {
7389 var s = set(target, property, value, receiver || target);
7390 if (!s && isStrict) {
7391 throw new Error('failed to set property');
7392 }
7393 return value;
7394}
7395function _interopRequireDefault(obj) {
7396 return obj && obj.__esModule ? obj : {
7397 default: obj
7398 };
7399}
7400function set(target1, property1, value1, receiver1) {
7401 if (typeof Reflect !== "undefined" && Reflect.set) {
7402 set = Reflect.set;
7403 } else {
7404 set = function set(target, property, value, receiver) {
7405 var base = (0, _superPropBase).default(target, property);
7406 var desc;
7407 if (base) {
7408 desc = Object.getOwnPropertyDescriptor(base, property);
7409 if (desc.set) {
7410 desc.set.call(receiver, value);
7411 return true;
7412 } else if (!desc.writable) {
7413 return false;
7414 }
7415 }
7416 desc = Object.getOwnPropertyDescriptor(receiver, property);
7417 if (desc) {
7418 if (!desc.writable) {
7419 return false;
7420 }
7421 desc.value = value;
7422 Object.defineProperty(receiver, property, desc);
7423 } else {
7424 (0, _defineProperty).default(receiver, property, value);
7425 }
7426 return true;
7427 };
7428 }
7429 return set(target1, property1, value1, receiver1);
7430}
7431
7432},{"./_define_property":40,"./_super_prop_base":71}],67:[function(require,module,exports){
7433"use strict";
7434Object.defineProperty(exports, "__esModule", {
7435 value: true
7436});
7437exports.default = _setPrototypeOf;
7438function _setPrototypeOf(o, p) {
7439 return setPrototypeOf(o, p);
7440}
7441function setPrototypeOf(o1, p1) {
7442 setPrototypeOf = Object.setPrototypeOf || function setPrototypeOf(o, p) {
7443 o.__proto__ = p;
7444 return o;
7445 };
7446 return setPrototypeOf(o1, p1);
7447}
7448
7449},{}],68:[function(require,module,exports){
7450"use strict";
7451Object.defineProperty(exports, "__esModule", {
7452 value: true
7453});
7454exports.default = _skipFirstGeneratorNext;
7455function _skipFirstGeneratorNext(fn) {
7456 return function() {
7457 var it = fn.apply(this, arguments);
7458 it.next();
7459 return it;
7460 };
7461}
7462
7463},{}],69:[function(require,module,exports){
7464"use strict";
7465Object.defineProperty(exports, "__esModule", {
7466 value: true
7467});
7468exports.default = _slicedToArray;
7469var _arrayWithHoles = _interopRequireDefault(require("./_array_with_holes"));
7470var _iterableToArray = _interopRequireDefault(require("./_iterable_to_array"));
7471var _nonIterableRest = _interopRequireDefault(require("./_non_iterable_rest"));
7472var _unsupportedIterableToArray = _interopRequireDefault(require("./_unsupported_iterable_to_array"));
7473function _slicedToArray(arr, i) {
7474 return (0, _arrayWithHoles).default(arr) || (0, _iterableToArray).default(arr, i) || (0, _unsupportedIterableToArray).default(arr, i) || (0, _nonIterableRest).default();
7475}
7476function _interopRequireDefault(obj) {
7477 return obj && obj.__esModule ? obj : {
7478 default: obj
7479 };
7480}
7481
7482},{"./_array_with_holes":4,"./_iterable_to_array":53,"./_non_iterable_rest":58,"./_unsupported_iterable_to_array":80}],70:[function(require,module,exports){
7483"use strict";
7484Object.defineProperty(exports, "__esModule", {
7485 value: true
7486});
7487exports.default = _slicedToArrayLoose;
7488var _arrayWithHoles = _interopRequireDefault(require("./_array_with_holes"));
7489var _iterableToArrayLimitLoose = _interopRequireDefault(require("./_iterable_to_array_limit_loose"));
7490var _nonIterableRest = _interopRequireDefault(require("./_non_iterable_rest"));
7491var _unsupportedIterableToArray = _interopRequireDefault(require("./_unsupported_iterable_to_array"));
7492function _slicedToArrayLoose(arr, i) {
7493 return (0, _arrayWithHoles).default(arr) || (0, _iterableToArrayLimitLoose).default(arr, i) || (0, _unsupportedIterableToArray).default(arr, i) || (0, _nonIterableRest).default();
7494}
7495function _interopRequireDefault(obj) {
7496 return obj && obj.__esModule ? obj : {
7497 default: obj
7498 };
7499}
7500
7501},{"./_array_with_holes":4,"./_iterable_to_array_limit_loose":55,"./_non_iterable_rest":58,"./_unsupported_iterable_to_array":80}],71:[function(require,module,exports){
7502"use strict";
7503Object.defineProperty(exports, "__esModule", {
7504 value: true
7505});
7506exports.default = _superPropBase;
7507var _getPrototypeOf = _interopRequireDefault(require("./_get_prototype_of"));
7508function _superPropBase(object, property) {
7509 while(!Object.prototype.hasOwnProperty.call(object, property)){
7510 object = (0, _getPrototypeOf).default(object);
7511 if (object === null) break;
7512 }
7513 return object;
7514}
7515function _interopRequireDefault(obj) {
7516 return obj && obj.__esModule ? obj : {
7517 default: obj
7518 };
7519}
7520
7521},{"./_get_prototype_of":43}],72:[function(require,module,exports){
7522"use strict";
7523Object.defineProperty(exports, "__esModule", {
7524 value: true
7525});
7526exports.default = _taggedTemplateLiteral;
7527function _taggedTemplateLiteral(strings, raw) {
7528 if (!raw) {
7529 raw = strings.slice(0);
7530 }
7531 return Object.freeze(Object.defineProperties(strings, {
7532 raw: {
7533 value: Object.freeze(raw)
7534 }
7535 }));
7536}
7537
7538},{}],73:[function(require,module,exports){
7539"use strict";
7540Object.defineProperty(exports, "__esModule", {
7541 value: true
7542});
7543exports.default = _taggedTemplateLiteralLoose;
7544function _taggedTemplateLiteralLoose(strings, raw) {
7545 if (!raw) {
7546 raw = strings.slice(0);
7547 }
7548 strings.raw = raw;
7549 return strings;
7550}
7551
7552},{}],74:[function(require,module,exports){
7553"use strict";
7554Object.defineProperty(exports, "__esModule", {
7555 value: true
7556});
7557exports.default = _throw;
7558function _throw(e) {
7559 throw e;
7560}
7561
7562},{}],75:[function(require,module,exports){
7563"use strict";
7564Object.defineProperty(exports, "__esModule", {
7565 value: true
7566});
7567exports.default = _toArray;
7568var _arrayWithHoles = _interopRequireDefault(require("./_array_with_holes"));
7569var _iterableToArray = _interopRequireDefault(require("./_iterable_to_array"));
7570var _nonIterableRest = _interopRequireDefault(require("./_non_iterable_rest"));
7571var _unsupportedIterableToArray = _interopRequireDefault(require("./_unsupported_iterable_to_array"));
7572function _toArray(arr) {
7573 return (0, _arrayWithHoles).default(arr) || (0, _iterableToArray).default(arr) || (0, _unsupportedIterableToArray).default(arr, i) || (0, _nonIterableRest).default();
7574}
7575function _interopRequireDefault(obj) {
7576 return obj && obj.__esModule ? obj : {
7577 default: obj
7578 };
7579}
7580
7581},{"./_array_with_holes":4,"./_iterable_to_array":53,"./_non_iterable_rest":58,"./_unsupported_iterable_to_array":80}],76:[function(require,module,exports){
7582"use strict";
7583Object.defineProperty(exports, "__esModule", {
7584 value: true
7585});
7586exports.default = _toConsumableArray;
7587var _arrayWithoutHoles = _interopRequireDefault(require("./_array_without_holes"));
7588var _iterableToArray = _interopRequireDefault(require("./_iterable_to_array"));
7589var _nonIterableSpread = _interopRequireDefault(require("./_non_iterable_spread"));
7590var _unsupportedIterableToArray = _interopRequireDefault(require("./_unsupported_iterable_to_array"));
7591function _toConsumableArray(arr) {
7592 return (0, _arrayWithoutHoles).default(arr) || (0, _iterableToArray).default(arr) || (0, _unsupportedIterableToArray).default(arr) || (0, _nonIterableSpread).default();
7593}
7594function _interopRequireDefault(obj) {
7595 return obj && obj.__esModule ? obj : {
7596 default: obj
7597 };
7598}
7599
7600},{"./_array_without_holes":5,"./_iterable_to_array":53,"./_non_iterable_spread":59,"./_unsupported_iterable_to_array":80}],77:[function(require,module,exports){
7601"use strict";
7602Object.defineProperty(exports, "__esModule", {
7603 value: true
7604});
7605exports.default = _toPrimitive;
7606var _typeOf = _interopRequireDefault(require("./_type_of"));
7607function _toPrimitive(input, hint) {
7608 if ((0, _typeOf).default(input) !== "object" || input === null) return input;
7609 var prim = input[Symbol.toPrimitive];
7610 if (prim !== undefined) {
7611 var res = prim.call(input, hint || "default");
7612 if ((0, _typeOf).default(res) !== "object") return res;
7613 throw new TypeError("@@toPrimitive must return a primitive value.");
7614 }
7615 return (hint === "string" ? String : Number)(input);
7616}
7617function _interopRequireDefault(obj) {
7618 return obj && obj.__esModule ? obj : {
7619 default: obj
7620 };
7621}
7622
7623},{"./_type_of":79}],78:[function(require,module,exports){
7624"use strict";
7625Object.defineProperty(exports, "__esModule", {
7626 value: true
7627});
7628exports.default = _toPropertyKey;
7629var _typeOf = _interopRequireDefault(require("./_type_of"));
7630var _toPrimitive = _interopRequireDefault(require("./_to_primitive"));
7631function _toPropertyKey(arg) {
7632 var key = (0, _toPrimitive).default(arg, "string");
7633 return (0, _typeOf).default(key) === "symbol" ? key : String(key);
7634}
7635function _interopRequireDefault(obj) {
7636 return obj && obj.__esModule ? obj : {
7637 default: obj
7638 };
7639}
7640
7641},{"./_to_primitive":77,"./_type_of":79}],79:[function(require,module,exports){
7642"use strict";
7643Object.defineProperty(exports, "__esModule", {
7644 value: true
7645});
7646exports.default = _typeof;
7647function _typeof(obj) {
7648 "@swc/helpers - typeof";
7649 return obj && obj.constructor === Symbol ? "symbol" : typeof obj;
7650}
7651;
7652
7653},{}],80:[function(require,module,exports){
7654"use strict";
7655Object.defineProperty(exports, "__esModule", {
7656 value: true
7657});
7658exports.default = _unsupportedIterableToArray;
7659var _arrayLikeToArray = _interopRequireDefault(require("./_array_like_to_array"));
7660function _unsupportedIterableToArray(o, minLen) {
7661 if (!o) return;
7662 if (typeof o === "string") return (0, _arrayLikeToArray).default(o, minLen);
7663 var n = Object.prototype.toString.call(o).slice(8, -1);
7664 if (n === "Object" && o.constructor) n = o.constructor.name;
7665 if (n === "Map" || n === "Set") return Array.from(n);
7666 if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return (0, _arrayLikeToArray).default(o, minLen);
7667}
7668function _interopRequireDefault(obj) {
7669 return obj && obj.__esModule ? obj : {
7670 default: obj
7671 };
7672}
7673
7674},{"./_array_like_to_array":3}],81:[function(require,module,exports){
7675"use strict";
7676Object.defineProperty(exports, "__esModule", {
7677 value: true
7678});
7679exports.default = _wrapAsyncGenerator;
7680var _asyncGenerator = _interopRequireDefault(require("./_async_generator"));
7681function _wrapAsyncGenerator(fn) {
7682 return function() {
7683 return new _asyncGenerator.default(fn.apply(this, arguments));
7684 };
7685}
7686function _interopRequireDefault(obj) {
7687 return obj && obj.__esModule ? obj : {
7688 default: obj
7689 };
7690}
7691
7692},{"./_async_generator":7}],82:[function(require,module,exports){
7693"use strict";
7694Object.defineProperty(exports, "__esModule", {
7695 value: true
7696});
7697exports.default = _wrapNativeSuper;
7698var _construct = _interopRequireDefault(require("./_construct"));
7699var _isNativeFunction = _interopRequireDefault(require("./_is_native_function"));
7700var _getPrototypeOf = _interopRequireDefault(require("./_get_prototype_of"));
7701var _setPrototypeOf = _interopRequireDefault(require("./_set_prototype_of"));
7702function _wrapNativeSuper(Class) {
7703 return wrapNativeSuper(Class);
7704}
7705function _interopRequireDefault(obj) {
7706 return obj && obj.__esModule ? obj : {
7707 default: obj
7708 };
7709}
7710function wrapNativeSuper(Class1) {
7711 var _cache = typeof Map === "function" ? new Map() : undefined;
7712 wrapNativeSuper = function wrapNativeSuper(Class) {
7713 if (Class === null || !(0, _isNativeFunction).default(Class)) return Class;
7714 if (typeof Class !== "function") {
7715 throw new TypeError("Super expression must either be null or a function");
7716 }
7717 if (typeof _cache !== "undefined") {
7718 if (_cache.has(Class)) return _cache.get(Class);
7719 _cache.set(Class, Wrapper);
7720 }
7721 function Wrapper() {
7722 return (0, _construct).default(Class, arguments, (0, _getPrototypeOf).default(this).constructor);
7723 }
7724 Wrapper.prototype = Object.create(Class.prototype, {
7725 constructor: {
7726 value: Wrapper,
7727 enumerable: false,
7728 writable: true,
7729 configurable: true
7730 }
7731 });
7732 return (0, _setPrototypeOf).default(Wrapper, Class);
7733 };
7734 return wrapNativeSuper(Class1);
7735}
7736
7737},{"./_construct":34,"./_get_prototype_of":43,"./_is_native_function":51,"./_set_prototype_of":67}],83:[function(require,module,exports){
7738"use strict";
7739Object.defineProperty(exports, "__esModule", {
7740 value: true
7741});
7742Object.defineProperty(exports, "applyDecoratedDescriptor", {
7743 enumerable: true,
7744 get: function() {
7745 return _applyDecoratedDescriptor.default;
7746 }
7747});
7748Object.defineProperty(exports, "arrayLikeToArray", {
7749 enumerable: true,
7750 get: function() {
7751 return _arrayLikeToArray.default;
7752 }
7753});
7754Object.defineProperty(exports, "arrayWithHoles", {
7755 enumerable: true,
7756 get: function() {
7757 return _arrayWithHoles.default;
7758 }
7759});
7760Object.defineProperty(exports, "arrayWithoutHoles", {
7761 enumerable: true,
7762 get: function() {
7763 return _arrayWithoutHoles.default;
7764 }
7765});
7766Object.defineProperty(exports, "assertThisInitialized", {
7767 enumerable: true,
7768 get: function() {
7769 return _assertThisInitialized.default;
7770 }
7771});
7772Object.defineProperty(exports, "asyncGenerator", {
7773 enumerable: true,
7774 get: function() {
7775 return _asyncGenerator.default;
7776 }
7777});
7778Object.defineProperty(exports, "asyncGeneratorDelegate", {
7779 enumerable: true,
7780 get: function() {
7781 return _asyncGeneratorDelegate.default;
7782 }
7783});
7784Object.defineProperty(exports, "asyncIterator", {
7785 enumerable: true,
7786 get: function() {
7787 return _asyncIterator.default;
7788 }
7789});
7790Object.defineProperty(exports, "asyncToGenerator", {
7791 enumerable: true,
7792 get: function() {
7793 return _asyncToGenerator.default;
7794 }
7795});
7796Object.defineProperty(exports, "awaitAsyncGenerator", {
7797 enumerable: true,
7798 get: function() {
7799 return _awaitAsyncGenerator.default;
7800 }
7801});
7802Object.defineProperty(exports, "awaitValue", {
7803 enumerable: true,
7804 get: function() {
7805 return _awaitValue.default;
7806 }
7807});
7808Object.defineProperty(exports, "checkPrivateRedeclaration", {
7809 enumerable: true,
7810 get: function() {
7811 return _checkPrivateRedeclaration.default;
7812 }
7813});
7814Object.defineProperty(exports, "classApplyDescriptorDestructureSet", {
7815 enumerable: true,
7816 get: function() {
7817 return _classApplyDescriptorDestructure.default;
7818 }
7819});
7820Object.defineProperty(exports, "classApplyDescriptorGet", {
7821 enumerable: true,
7822 get: function() {
7823 return _classApplyDescriptorGet.default;
7824 }
7825});
7826Object.defineProperty(exports, "classApplyDescriptorSet", {
7827 enumerable: true,
7828 get: function() {
7829 return _classApplyDescriptorSet.default;
7830 }
7831});
7832Object.defineProperty(exports, "classCallCheck", {
7833 enumerable: true,
7834 get: function() {
7835 return _classCallCheck.default;
7836 }
7837});
7838Object.defineProperty(exports, "classCheckPrivateStaticFieldDescriptor", {
7839 enumerable: true,
7840 get: function() {
7841 return _classCheckPrivateStaticFieldDescriptor.default;
7842 }
7843});
7844Object.defineProperty(exports, "classCheckPrivateStaticAccess", {
7845 enumerable: true,
7846 get: function() {
7847 return _classCheckPrivateStaticAccess.default;
7848 }
7849});
7850Object.defineProperty(exports, "classNameTDZError", {
7851 enumerable: true,
7852 get: function() {
7853 return _classNameTdzError.default;
7854 }
7855});
7856Object.defineProperty(exports, "classPrivateFieldDestructureSet", {
7857 enumerable: true,
7858 get: function() {
7859 return _classPrivateFieldDestructure.default;
7860 }
7861});
7862Object.defineProperty(exports, "classPrivateFieldGet", {
7863 enumerable: true,
7864 get: function() {
7865 return _classPrivateFieldGet.default;
7866 }
7867});
7868Object.defineProperty(exports, "classPrivateFieldInit", {
7869 enumerable: true,
7870 get: function() {
7871 return _classPrivateFieldInit.default;
7872 }
7873});
7874Object.defineProperty(exports, "classPrivateFieldLooseBase", {
7875 enumerable: true,
7876 get: function() {
7877 return _classPrivateFieldLooseBase.default;
7878 }
7879});
7880Object.defineProperty(exports, "classPrivateFieldLooseKey", {
7881 enumerable: true,
7882 get: function() {
7883 return _classPrivateFieldLooseKey.default;
7884 }
7885});
7886Object.defineProperty(exports, "classPrivateFieldSet", {
7887 enumerable: true,
7888 get: function() {
7889 return _classPrivateFieldSet.default;
7890 }
7891});
7892Object.defineProperty(exports, "classPrivateMethodGet", {
7893 enumerable: true,
7894 get: function() {
7895 return _classPrivateMethodGet.default;
7896 }
7897});
7898Object.defineProperty(exports, "classPrivateMethodInit", {
7899 enumerable: true,
7900 get: function() {
7901 return _classPrivateMethodInit.default;
7902 }
7903});
7904Object.defineProperty(exports, "classPrivateMethodSet", {
7905 enumerable: true,
7906 get: function() {
7907 return _classPrivateMethodSet.default;
7908 }
7909});
7910Object.defineProperty(exports, "classStaticPrivateFieldDestructureSet", {
7911 enumerable: true,
7912 get: function() {
7913 return _classStaticPrivateFieldDestructure.default;
7914 }
7915});
7916Object.defineProperty(exports, "classStaticPrivateFieldSpecGet", {
7917 enumerable: true,
7918 get: function() {
7919 return _classStaticPrivateFieldSpecGet.default;
7920 }
7921});
7922Object.defineProperty(exports, "classStaticPrivateFieldSpecSet", {
7923 enumerable: true,
7924 get: function() {
7925 return _classStaticPrivateFieldSpecSet.default;
7926 }
7927});
7928Object.defineProperty(exports, "construct", {
7929 enumerable: true,
7930 get: function() {
7931 return _construct.default;
7932 }
7933});
7934Object.defineProperty(exports, "createClass", {
7935 enumerable: true,
7936 get: function() {
7937 return _createClass.default;
7938 }
7939});
7940Object.defineProperty(exports, "createSuper", {
7941 enumerable: true,
7942 get: function() {
7943 return _createSuper.default;
7944 }
7945});
7946Object.defineProperty(exports, "decorate", {
7947 enumerable: true,
7948 get: function() {
7949 return _decorate.default;
7950 }
7951});
7952Object.defineProperty(exports, "defaults", {
7953 enumerable: true,
7954 get: function() {
7955 return _defaults.default;
7956 }
7957});
7958Object.defineProperty(exports, "defineEnumerableProperties", {
7959 enumerable: true,
7960 get: function() {
7961 return _defineEnumerableProperties.default;
7962 }
7963});
7964Object.defineProperty(exports, "defineProperty", {
7965 enumerable: true,
7966 get: function() {
7967 return _defineProperty.default;
7968 }
7969});
7970Object.defineProperty(exports, "extends", {
7971 enumerable: true,
7972 get: function() {
7973 return _extends.default;
7974 }
7975});
7976Object.defineProperty(exports, "get", {
7977 enumerable: true,
7978 get: function() {
7979 return _get.default;
7980 }
7981});
7982Object.defineProperty(exports, "getPrototypeOf", {
7983 enumerable: true,
7984 get: function() {
7985 return _getPrototypeOf.default;
7986 }
7987});
7988Object.defineProperty(exports, "inherits", {
7989 enumerable: true,
7990 get: function() {
7991 return _inherits.default;
7992 }
7993});
7994Object.defineProperty(exports, "inheritsLoose", {
7995 enumerable: true,
7996 get: function() {
7997 return _inheritsLoose.default;
7998 }
7999});
8000Object.defineProperty(exports, "initializerDefineProperty", {
8001 enumerable: true,
8002 get: function() {
8003 return _initializerDefineProperty.default;
8004 }
8005});
8006Object.defineProperty(exports, "initializerWarningHelper", {
8007 enumerable: true,
8008 get: function() {
8009 return _initializerWarningHelper.default;
8010 }
8011});
8012Object.defineProperty(exports, "_instanceof", {
8013 enumerable: true,
8014 get: function() {
8015 return _instanceof.default;
8016 }
8017});
8018Object.defineProperty(exports, "interopRequireDefault", {
8019 enumerable: true,
8020 get: function() {
8021 return _interopRequireDefault.default;
8022 }
8023});
8024Object.defineProperty(exports, "interopRequireWildcard", {
8025 enumerable: true,
8026 get: function() {
8027 return _interopRequireWildcard.default;
8028 }
8029});
8030Object.defineProperty(exports, "isNativeFunction", {
8031 enumerable: true,
8032 get: function() {
8033 return _isNativeFunction.default;
8034 }
8035});
8036Object.defineProperty(exports, "isNativeReflectConstruct", {
8037 enumerable: true,
8038 get: function() {
8039 return _isNativeReflectConstruct.default;
8040 }
8041});
8042Object.defineProperty(exports, "iterableToArray", {
8043 enumerable: true,
8044 get: function() {
8045 return _iterableToArray.default;
8046 }
8047});
8048Object.defineProperty(exports, "iterableToArrayLimit", {
8049 enumerable: true,
8050 get: function() {
8051 return _iterableToArrayLimit.default;
8052 }
8053});
8054Object.defineProperty(exports, "iterableToArrayLimitLoose", {
8055 enumerable: true,
8056 get: function() {
8057 return _iterableToArrayLimitLoose.default;
8058 }
8059});
8060Object.defineProperty(exports, "jsx", {
8061 enumerable: true,
8062 get: function() {
8063 return _jsx.default;
8064 }
8065});
8066Object.defineProperty(exports, "newArrowCheck", {
8067 enumerable: true,
8068 get: function() {
8069 return _newArrowCheck.default;
8070 }
8071});
8072Object.defineProperty(exports, "nonIterableRest", {
8073 enumerable: true,
8074 get: function() {
8075 return _nonIterableRest.default;
8076 }
8077});
8078Object.defineProperty(exports, "nonIterableSpread", {
8079 enumerable: true,
8080 get: function() {
8081 return _nonIterableSpread.default;
8082 }
8083});
8084Object.defineProperty(exports, "objectSpread", {
8085 enumerable: true,
8086 get: function() {
8087 return _objectSpread.default;
8088 }
8089});
8090Object.defineProperty(exports, "objectSpreadProps", {
8091 enumerable: true,
8092 get: function() {
8093 return _objectSpreadProps.default;
8094 }
8095});
8096Object.defineProperty(exports, "objectWithoutProperties", {
8097 enumerable: true,
8098 get: function() {
8099 return _objectWithoutProperties.default;
8100 }
8101});
8102Object.defineProperty(exports, "objectWithoutPropertiesLoose", {
8103 enumerable: true,
8104 get: function() {
8105 return _objectWithoutPropertiesLoose.default;
8106 }
8107});
8108Object.defineProperty(exports, "possibleConstructorReturn", {
8109 enumerable: true,
8110 get: function() {
8111 return _possibleConstructorReturn.default;
8112 }
8113});
8114Object.defineProperty(exports, "readOnlyError", {
8115 enumerable: true,
8116 get: function() {
8117 return _readOnlyError.default;
8118 }
8119});
8120Object.defineProperty(exports, "set", {
8121 enumerable: true,
8122 get: function() {
8123 return _set.default;
8124 }
8125});
8126Object.defineProperty(exports, "setPrototypeOf", {
8127 enumerable: true,
8128 get: function() {
8129 return _setPrototypeOf.default;
8130 }
8131});
8132Object.defineProperty(exports, "skipFirstGeneratorNext", {
8133 enumerable: true,
8134 get: function() {
8135 return _skipFirstGeneratorNext.default;
8136 }
8137});
8138Object.defineProperty(exports, "slicedToArray", {
8139 enumerable: true,
8140 get: function() {
8141 return _slicedToArray.default;
8142 }
8143});
8144Object.defineProperty(exports, "slicedToArrayLoose", {
8145 enumerable: true,
8146 get: function() {
8147 return _slicedToArrayLoose.default;
8148 }
8149});
8150Object.defineProperty(exports, "superPropBase", {
8151 enumerable: true,
8152 get: function() {
8153 return _superPropBase.default;
8154 }
8155});
8156Object.defineProperty(exports, "taggedTemplateLiteral", {
8157 enumerable: true,
8158 get: function() {
8159 return _taggedTemplateLiteral.default;
8160 }
8161});
8162Object.defineProperty(exports, "taggedTemplateLiteralLoose", {
8163 enumerable: true,
8164 get: function() {
8165 return _taggedTemplateLiteralLoose.default;
8166 }
8167});
8168Object.defineProperty(exports, "_throw", {
8169 enumerable: true,
8170 get: function() {
8171 return _throw.default;
8172 }
8173});
8174Object.defineProperty(exports, "toArray", {
8175 enumerable: true,
8176 get: function() {
8177 return _toArray.default;
8178 }
8179});
8180Object.defineProperty(exports, "toConsumableArray", {
8181 enumerable: true,
8182 get: function() {
8183 return _toConsumableArray.default;
8184 }
8185});
8186Object.defineProperty(exports, "toPrimitive", {
8187 enumerable: true,
8188 get: function() {
8189 return _toPrimitive.default;
8190 }
8191});
8192Object.defineProperty(exports, "toPropertyKey", {
8193 enumerable: true,
8194 get: function() {
8195 return _toPropertyKey.default;
8196 }
8197});
8198Object.defineProperty(exports, "typeOf", {
8199 enumerable: true,
8200 get: function() {
8201 return _typeOf.default;
8202 }
8203});
8204Object.defineProperty(exports, "unsupportedIterableToArray", {
8205 enumerable: true,
8206 get: function() {
8207 return _unsupportedIterableToArray.default;
8208 }
8209});
8210Object.defineProperty(exports, "wrapAsyncGenerator", {
8211 enumerable: true,
8212 get: function() {
8213 return _wrapAsyncGenerator.default;
8214 }
8215});
8216Object.defineProperty(exports, "wrapNativeSuper", {
8217 enumerable: true,
8218 get: function() {
8219 return _wrapNativeSuper.default;
8220 }
8221});
8222Object.defineProperty(exports, "__decorate", {
8223 enumerable: true,
8224 get: function() {
8225 return _tslib.__decorate;
8226 }
8227});
8228Object.defineProperty(exports, "__metadata", {
8229 enumerable: true,
8230 get: function() {
8231 return _tslib.__metadata;
8232 }
8233});
8234Object.defineProperty(exports, "__param", {
8235 enumerable: true,
8236 get: function() {
8237 return _tslib.__param;
8238 }
8239});
8240var _applyDecoratedDescriptor = _interopRequireDefault1(require("./_apply_decorated_descriptor"));
8241var _arrayLikeToArray = _interopRequireDefault1(require("./_array_like_to_array"));
8242var _arrayWithHoles = _interopRequireDefault1(require("./_array_with_holes"));
8243var _arrayWithoutHoles = _interopRequireDefault1(require("./_array_without_holes"));
8244var _assertThisInitialized = _interopRequireDefault1(require("./_assert_this_initialized"));
8245var _asyncGenerator = _interopRequireDefault1(require("./_async_generator"));
8246var _asyncGeneratorDelegate = _interopRequireDefault1(require("./_async_generator_delegate"));
8247var _asyncIterator = _interopRequireDefault1(require("./_async_iterator"));
8248var _asyncToGenerator = _interopRequireDefault1(require("./_async_to_generator"));
8249var _awaitAsyncGenerator = _interopRequireDefault1(require("./_await_async_generator"));
8250var _awaitValue = _interopRequireDefault1(require("./_await_value"));
8251var _checkPrivateRedeclaration = _interopRequireDefault1(require("./_check_private_redeclaration"));
8252var _classApplyDescriptorDestructure = _interopRequireDefault1(require("./_class_apply_descriptor_destructure"));
8253var _classApplyDescriptorGet = _interopRequireDefault1(require("./_class_apply_descriptor_get"));
8254var _classApplyDescriptorSet = _interopRequireDefault1(require("./_class_apply_descriptor_set"));
8255var _classCallCheck = _interopRequireDefault1(require("./_class_call_check"));
8256var _classCheckPrivateStaticFieldDescriptor = _interopRequireDefault1(require("./_class_check_private_static_field_descriptor"));
8257var _classCheckPrivateStaticAccess = _interopRequireDefault1(require("./_class_check_private_static_access"));
8258var _classNameTdzError = _interopRequireDefault1(require("./_class_name_tdz_error"));
8259var _classPrivateFieldDestructure = _interopRequireDefault1(require("./_class_private_field_destructure"));
8260var _classPrivateFieldGet = _interopRequireDefault1(require("./_class_private_field_get"));
8261var _classPrivateFieldInit = _interopRequireDefault1(require("./_class_private_field_init"));
8262var _classPrivateFieldLooseBase = _interopRequireDefault1(require("./_class_private_field_loose_base"));
8263var _classPrivateFieldLooseKey = _interopRequireDefault1(require("./_class_private_field_loose_key"));
8264var _classPrivateFieldSet = _interopRequireDefault1(require("./_class_private_field_set"));
8265var _classPrivateMethodGet = _interopRequireDefault1(require("./_class_private_method_get"));
8266var _classPrivateMethodInit = _interopRequireDefault1(require("./_class_private_method_init"));
8267var _classPrivateMethodSet = _interopRequireDefault1(require("./_class_private_method_set"));
8268var _classStaticPrivateFieldDestructure = _interopRequireDefault1(require("./_class_static_private_field_destructure"));
8269var _classStaticPrivateFieldSpecGet = _interopRequireDefault1(require("./_class_static_private_field_spec_get"));
8270var _classStaticPrivateFieldSpecSet = _interopRequireDefault1(require("./_class_static_private_field_spec_set"));
8271var _construct = _interopRequireDefault1(require("./_construct"));
8272var _createClass = _interopRequireDefault1(require("./_create_class"));
8273var _createSuper = _interopRequireDefault1(require("./_create_super"));
8274var _decorate = _interopRequireDefault1(require("./_decorate"));
8275var _defaults = _interopRequireDefault1(require("./_defaults"));
8276var _defineEnumerableProperties = _interopRequireDefault1(require("./_define_enumerable_properties"));
8277var _defineProperty = _interopRequireDefault1(require("./_define_property"));
8278var _extends = _interopRequireDefault1(require("./_extends"));
8279var _get = _interopRequireDefault1(require("./_get"));
8280var _getPrototypeOf = _interopRequireDefault1(require("./_get_prototype_of"));
8281var _inherits = _interopRequireDefault1(require("./_inherits"));
8282var _inheritsLoose = _interopRequireDefault1(require("./_inherits_loose"));
8283var _initializerDefineProperty = _interopRequireDefault1(require("./_initializer_define_property"));
8284var _initializerWarningHelper = _interopRequireDefault1(require("./_initializer_warning_helper"));
8285var _instanceof = _interopRequireDefault1(require("./_instanceof"));
8286var _interopRequireDefault = _interopRequireDefault1(require("./_interop_require_default"));
8287var _interopRequireWildcard = _interopRequireDefault1(require("./_interop_require_wildcard"));
8288var _isNativeFunction = _interopRequireDefault1(require("./_is_native_function"));
8289var _isNativeReflectConstruct = _interopRequireDefault1(require("./_is_native_reflect_construct"));
8290var _iterableToArray = _interopRequireDefault1(require("./_iterable_to_array"));
8291var _iterableToArrayLimit = _interopRequireDefault1(require("./_iterable_to_array_limit"));
8292var _iterableToArrayLimitLoose = _interopRequireDefault1(require("./_iterable_to_array_limit_loose"));
8293var _jsx = _interopRequireDefault1(require("./_jsx"));
8294var _newArrowCheck = _interopRequireDefault1(require("./_new_arrow_check"));
8295var _nonIterableRest = _interopRequireDefault1(require("./_non_iterable_rest"));
8296var _nonIterableSpread = _interopRequireDefault1(require("./_non_iterable_spread"));
8297var _objectSpread = _interopRequireDefault1(require("./_object_spread"));
8298var _objectSpreadProps = _interopRequireDefault1(require("./_object_spread_props"));
8299var _objectWithoutProperties = _interopRequireDefault1(require("./_object_without_properties"));
8300var _objectWithoutPropertiesLoose = _interopRequireDefault1(require("./_object_without_properties_loose"));
8301var _possibleConstructorReturn = _interopRequireDefault1(require("./_possible_constructor_return"));
8302var _readOnlyError = _interopRequireDefault1(require("./_read_only_error"));
8303var _set = _interopRequireDefault1(require("./_set"));
8304var _setPrototypeOf = _interopRequireDefault1(require("./_set_prototype_of"));
8305var _skipFirstGeneratorNext = _interopRequireDefault1(require("./_skip_first_generator_next"));
8306var _slicedToArray = _interopRequireDefault1(require("./_sliced_to_array"));
8307var _slicedToArrayLoose = _interopRequireDefault1(require("./_sliced_to_array_loose"));
8308var _superPropBase = _interopRequireDefault1(require("./_super_prop_base"));
8309var _taggedTemplateLiteral = _interopRequireDefault1(require("./_tagged_template_literal"));
8310var _taggedTemplateLiteralLoose = _interopRequireDefault1(require("./_tagged_template_literal_loose"));
8311var _throw = _interopRequireDefault1(require("./_throw"));
8312var _toArray = _interopRequireDefault1(require("./_to_array"));
8313var _toConsumableArray = _interopRequireDefault1(require("./_to_consumable_array"));
8314var _toPrimitive = _interopRequireDefault1(require("./_to_primitive"));
8315var _toPropertyKey = _interopRequireDefault1(require("./_to_property_key"));
8316var _typeOf = _interopRequireDefault1(require("./_type_of"));
8317var _unsupportedIterableToArray = _interopRequireDefault1(require("./_unsupported_iterable_to_array"));
8318var _wrapAsyncGenerator = _interopRequireDefault1(require("./_wrap_async_generator"));
8319var _wrapNativeSuper = _interopRequireDefault1(require("./_wrap_native_super"));
8320var _tslib = require("tslib");
8321function _interopRequireDefault1(obj) {
8322 return obj && obj.__esModule ? obj : {
8323 default: obj
8324 };
8325}
8326
8327},{"./_apply_decorated_descriptor":2,"./_array_like_to_array":3,"./_array_with_holes":4,"./_array_without_holes":5,"./_assert_this_initialized":6,"./_async_generator":7,"./_async_generator_delegate":8,"./_async_iterator":9,"./_async_to_generator":10,"./_await_async_generator":11,"./_await_value":12,"./_check_private_redeclaration":13,"./_class_apply_descriptor_destructure":14,"./_class_apply_descriptor_get":15,"./_class_apply_descriptor_set":16,"./_class_call_check":17,"./_class_check_private_static_access":18,"./_class_check_private_static_field_descriptor":19,"./_class_name_tdz_error":21,"./_class_private_field_destructure":22,"./_class_private_field_get":23,"./_class_private_field_init":24,"./_class_private_field_loose_base":25,"./_class_private_field_loose_key":26,"./_class_private_field_set":27,"./_class_private_method_get":28,"./_class_private_method_init":29,"./_class_private_method_set":30,"./_class_static_private_field_destructure":31,"./_class_static_private_field_spec_get":32,"./_class_static_private_field_spec_set":33,"./_construct":34,"./_create_class":35,"./_create_super":36,"./_decorate":37,"./_defaults":38,"./_define_enumerable_properties":39,"./_define_property":40,"./_extends":41,"./_get":42,"./_get_prototype_of":43,"./_inherits":44,"./_inherits_loose":45,"./_initializer_define_property":46,"./_initializer_warning_helper":47,"./_instanceof":48,"./_interop_require_default":49,"./_interop_require_wildcard":50,"./_is_native_function":51,"./_is_native_reflect_construct":52,"./_iterable_to_array":53,"./_iterable_to_array_limit":54,"./_iterable_to_array_limit_loose":55,"./_jsx":56,"./_new_arrow_check":57,"./_non_iterable_rest":58,"./_non_iterable_spread":59,"./_object_spread":60,"./_object_spread_props":61,"./_object_without_properties":62,"./_object_without_properties_loose":63,"./_possible_constructor_return":64,"./_read_only_error":65,"./_set":66,"./_set_prototype_of":67,"./_skip_first_generator_next":68,"./_sliced_to_array":69,"./_sliced_to_array_loose":70,"./_super_prop_base":71,"./_tagged_template_literal":72,"./_tagged_template_literal_loose":73,"./_throw":74,"./_to_array":75,"./_to_consumable_array":76,"./_to_primitive":77,"./_to_property_key":78,"./_type_of":79,"./_unsupported_iterable_to_array":80,"./_wrap_async_generator":81,"./_wrap_native_super":82,"tslib":268}],84:[function(require,module,exports){
8328'use strict';
8329
8330var callBound = require('call-bind/callBound');
8331var $byteLength = callBound('ArrayBuffer.prototype.byteLength', true);
8332
8333var isArrayBuffer = require('is-array-buffer');
8334
8335/** @type {import('.')} */
8336module.exports = function byteLength(ab) {
8337 if (!isArrayBuffer(ab)) {
8338 return NaN;
8339 }
8340 return $byteLength ? $byteLength(ab) : ab.byteLength;
8341}; // in node < 0.11, byteLength is an own nonconfigurable property
8342
8343},{"call-bind/callBound":115,"is-array-buffer":190}],85:[function(require,module,exports){
8344(function (global){(function (){
8345'use strict';
8346
8347var objectAssign = require('object.assign/polyfill')();
8348
8349// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
8350// original notice:
8351
8352/*!
8353 * The buffer module from node.js, for the browser.
8354 *
8355 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
8356 * @license MIT
8357 */
8358function compare(a, b) {
8359 if (a === b) {
8360 return 0;
8361 }
8362
8363 var x = a.length;
8364 var y = b.length;
8365
8366 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
8367 if (a[i] !== b[i]) {
8368 x = a[i];
8369 y = b[i];
8370 break;
8371 }
8372 }
8373
8374 if (x < y) {
8375 return -1;
8376 }
8377 if (y < x) {
8378 return 1;
8379 }
8380 return 0;
8381}
8382function isBuffer(b) {
8383 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
8384 return global.Buffer.isBuffer(b);
8385 }
8386 return !!(b != null && b._isBuffer);
8387}
8388
8389// based on node assert, original notice:
8390// NB: The URL to the CommonJS spec is kept just for tradition.
8391// node-assert has evolved a lot since then, both in API and behavior.
8392
8393// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
8394//
8395// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
8396//
8397// Originally from narwhal.js (http://narwhaljs.org)
8398// Copyright (c) 2009 Thomas Robinson <280north.com>
8399//
8400// Permission is hereby granted, free of charge, to any person obtaining a copy
8401// of this software and associated documentation files (the 'Software'), to
8402// deal in the Software without restriction, including without limitation the
8403// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
8404// sell copies of the Software, and to permit persons to whom the Software is
8405// furnished to do so, subject to the following conditions:
8406//
8407// The above copyright notice and this permission notice shall be included in
8408// all copies or substantial portions of the Software.
8409//
8410// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
8411// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
8412// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
8413// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
8414// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
8415// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8416
8417var util = require('util/');
8418var hasOwn = Object.prototype.hasOwnProperty;
8419var pSlice = Array.prototype.slice;
8420var functionsHaveNames = (function () {
8421 return function foo() {}.name === 'foo';
8422}());
8423function pToString (obj) {
8424 return Object.prototype.toString.call(obj);
8425}
8426function isView(arrbuf) {
8427 if (isBuffer(arrbuf)) {
8428 return false;
8429 }
8430 if (typeof global.ArrayBuffer !== 'function') {
8431 return false;
8432 }
8433 if (typeof ArrayBuffer.isView === 'function') {
8434 return ArrayBuffer.isView(arrbuf);
8435 }
8436 if (!arrbuf) {
8437 return false;
8438 }
8439 if (arrbuf instanceof DataView) {
8440 return true;
8441 }
8442 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
8443 return true;
8444 }
8445 return false;
8446}
8447// 1. The assert module provides functions that throw
8448// AssertionError's when particular conditions are not met. The
8449// assert module must conform to the following interface.
8450
8451var assert = module.exports = ok;
8452
8453// 2. The AssertionError is defined in assert.
8454// new assert.AssertionError({ message: message,
8455// actual: actual,
8456// expected: expected })
8457
8458var regex = /\s*function\s+([^\(\s]*)\s*/;
8459// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
8460function getName(func) {
8461 if (!util.isFunction(func)) {
8462 return;
8463 }
8464 if (functionsHaveNames) {
8465 return func.name;
8466 }
8467 var str = func.toString();
8468 var match = str.match(regex);
8469 return match && match[1];
8470}
8471assert.AssertionError = function AssertionError(options) {
8472 this.name = 'AssertionError';
8473 this.actual = options.actual;
8474 this.expected = options.expected;
8475 this.operator = options.operator;
8476 if (options.message) {
8477 this.message = options.message;
8478 this.generatedMessage = false;
8479 } else {
8480 this.message = getMessage(this);
8481 this.generatedMessage = true;
8482 }
8483 var stackStartFunction = options.stackStartFunction || fail;
8484 if (Error.captureStackTrace) {
8485 Error.captureStackTrace(this, stackStartFunction);
8486 } else {
8487 // non v8 browsers so we can have a stacktrace
8488 var err = new Error();
8489 if (err.stack) {
8490 var out = err.stack;
8491
8492 // try to strip useless frames
8493 var fn_name = getName(stackStartFunction);
8494 var idx = out.indexOf('\n' + fn_name);
8495 if (idx >= 0) {
8496 // once we have located the function frame
8497 // we need to strip out everything before it (and its line)
8498 var next_line = out.indexOf('\n', idx + 1);
8499 out = out.substring(next_line + 1);
8500 }
8501
8502 this.stack = out;
8503 }
8504 }
8505};
8506
8507// assert.AssertionError instanceof Error
8508util.inherits(assert.AssertionError, Error);
8509
8510function truncate(s, n) {
8511 if (typeof s === 'string') {
8512 return s.length < n ? s : s.slice(0, n);
8513 } else {
8514 return s;
8515 }
8516}
8517function inspect(something) {
8518 if (functionsHaveNames || !util.isFunction(something)) {
8519 return util.inspect(something);
8520 }
8521 var rawname = getName(something);
8522 var name = rawname ? ': ' + rawname : '';
8523 return '[Function' + name + ']';
8524}
8525function getMessage(self) {
8526 return truncate(inspect(self.actual), 128) + ' ' +
8527 self.operator + ' ' +
8528 truncate(inspect(self.expected), 128);
8529}
8530
8531// At present only the three keys mentioned above are used and
8532// understood by the spec. Implementations or sub modules can pass
8533// other keys to the AssertionError's constructor - they will be
8534// ignored.
8535
8536// 3. All of the following functions must throw an AssertionError
8537// when a corresponding condition is not met, with a message that
8538// may be undefined if not provided. All assertion methods provide
8539// both the actual and expected values to the assertion error for
8540// display purposes.
8541
8542function fail(actual, expected, message, operator, stackStartFunction) {
8543 throw new assert.AssertionError({
8544 message: message,
8545 actual: actual,
8546 expected: expected,
8547 operator: operator,
8548 stackStartFunction: stackStartFunction
8549 });
8550}
8551
8552// EXTENSION! allows for well behaved errors defined elsewhere.
8553assert.fail = fail;
8554
8555// 4. Pure assertion tests whether a value is truthy, as determined
8556// by !!guard.
8557// assert.ok(guard, message_opt);
8558// This statement is equivalent to assert.equal(true, !!guard,
8559// message_opt);. To test strictly for the value true, use
8560// assert.strictEqual(true, guard, message_opt);.
8561
8562function ok(value, message) {
8563 if (!value) fail(value, true, message, '==', assert.ok);
8564}
8565assert.ok = ok;
8566
8567// 5. The equality assertion tests shallow, coercive equality with
8568// ==.
8569// assert.equal(actual, expected, message_opt);
8570
8571assert.equal = function equal(actual, expected, message) {
8572 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
8573};
8574
8575// 6. The non-equality assertion tests for whether two objects are not equal
8576// with != assert.notEqual(actual, expected, message_opt);
8577
8578assert.notEqual = function notEqual(actual, expected, message) {
8579 if (actual == expected) {
8580 fail(actual, expected, message, '!=', assert.notEqual);
8581 }
8582};
8583
8584// 7. The equivalence assertion tests a deep equality relation.
8585// assert.deepEqual(actual, expected, message_opt);
8586
8587assert.deepEqual = function deepEqual(actual, expected, message) {
8588 if (!_deepEqual(actual, expected, false)) {
8589 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
8590 }
8591};
8592
8593assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
8594 if (!_deepEqual(actual, expected, true)) {
8595 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
8596 }
8597};
8598
8599function _deepEqual(actual, expected, strict, memos) {
8600 // 7.1. All identical values are equivalent, as determined by ===.
8601 if (actual === expected) {
8602 return true;
8603 } else if (isBuffer(actual) && isBuffer(expected)) {
8604 return compare(actual, expected) === 0;
8605
8606 // 7.2. If the expected value is a Date object, the actual value is
8607 // equivalent if it is also a Date object that refers to the same time.
8608 } else if (util.isDate(actual) && util.isDate(expected)) {
8609 return actual.getTime() === expected.getTime();
8610
8611 // 7.3 If the expected value is a RegExp object, the actual value is
8612 // equivalent if it is also a RegExp object with the same source and
8613 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
8614 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
8615 return actual.source === expected.source &&
8616 actual.global === expected.global &&
8617 actual.multiline === expected.multiline &&
8618 actual.lastIndex === expected.lastIndex &&
8619 actual.ignoreCase === expected.ignoreCase;
8620
8621 // 7.4. Other pairs that do not both pass typeof value == 'object',
8622 // equivalence is determined by ==.
8623 } else if ((actual === null || typeof actual !== 'object') &&
8624 (expected === null || typeof expected !== 'object')) {
8625 return strict ? actual === expected : actual == expected;
8626
8627 // If both values are instances of typed arrays, wrap their underlying
8628 // ArrayBuffers in a Buffer each to increase performance
8629 // This optimization requires the arrays to have the same type as checked by
8630 // Object.prototype.toString (aka pToString). Never perform binary
8631 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
8632 // bit patterns are not identical.
8633 } else if (isView(actual) && isView(expected) &&
8634 pToString(actual) === pToString(expected) &&
8635 !(actual instanceof Float32Array ||
8636 actual instanceof Float64Array)) {
8637 return compare(new Uint8Array(actual.buffer),
8638 new Uint8Array(expected.buffer)) === 0;
8639
8640 // 7.5 For all other Object pairs, including Array objects, equivalence is
8641 // determined by having the same number of owned properties (as verified
8642 // with Object.prototype.hasOwnProperty.call), the same set of keys
8643 // (although not necessarily the same order), equivalent values for every
8644 // corresponding key, and an identical 'prototype' property. Note: this
8645 // accounts for both named and indexed properties on Arrays.
8646 } else if (isBuffer(actual) !== isBuffer(expected)) {
8647 return false;
8648 } else {
8649 memos = memos || {actual: [], expected: []};
8650
8651 var actualIndex = memos.actual.indexOf(actual);
8652 if (actualIndex !== -1) {
8653 if (actualIndex === memos.expected.indexOf(expected)) {
8654 return true;
8655 }
8656 }
8657
8658 memos.actual.push(actual);
8659 memos.expected.push(expected);
8660
8661 return objEquiv(actual, expected, strict, memos);
8662 }
8663}
8664
8665function isArguments(object) {
8666 return Object.prototype.toString.call(object) == '[object Arguments]';
8667}
8668
8669function objEquiv(a, b, strict, actualVisitedObjects) {
8670 if (a === null || a === undefined || b === null || b === undefined)
8671 return false;
8672 // if one is a primitive, the other must be same
8673 if (util.isPrimitive(a) || util.isPrimitive(b))
8674 return a === b;
8675 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
8676 return false;
8677 var aIsArgs = isArguments(a);
8678 var bIsArgs = isArguments(b);
8679 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
8680 return false;
8681 if (aIsArgs) {
8682 a = pSlice.call(a);
8683 b = pSlice.call(b);
8684 return _deepEqual(a, b, strict);
8685 }
8686 var ka = objectKeys(a);
8687 var kb = objectKeys(b);
8688 var key, i;
8689 // having the same number of owned properties (keys incorporates
8690 // hasOwnProperty)
8691 if (ka.length !== kb.length)
8692 return false;
8693 //the same set of keys (although not necessarily the same order),
8694 ka.sort();
8695 kb.sort();
8696 //~~~cheap key test
8697 for (i = ka.length - 1; i >= 0; i--) {
8698 if (ka[i] !== kb[i])
8699 return false;
8700 }
8701 //equivalent values for every corresponding key, and
8702 //~~~possibly expensive deep test
8703 for (i = ka.length - 1; i >= 0; i--) {
8704 key = ka[i];
8705 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
8706 return false;
8707 }
8708 return true;
8709}
8710
8711// 8. The non-equivalence assertion tests for any deep inequality.
8712// assert.notDeepEqual(actual, expected, message_opt);
8713
8714assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
8715 if (_deepEqual(actual, expected, false)) {
8716 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
8717 }
8718};
8719
8720assert.notDeepStrictEqual = notDeepStrictEqual;
8721function notDeepStrictEqual(actual, expected, message) {
8722 if (_deepEqual(actual, expected, true)) {
8723 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
8724 }
8725}
8726
8727
8728// 9. The strict equality assertion tests strict equality, as determined by ===.
8729// assert.strictEqual(actual, expected, message_opt);
8730
8731assert.strictEqual = function strictEqual(actual, expected, message) {
8732 if (actual !== expected) {
8733 fail(actual, expected, message, '===', assert.strictEqual);
8734 }
8735};
8736
8737// 10. The strict non-equality assertion tests for strict inequality, as
8738// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
8739
8740assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
8741 if (actual === expected) {
8742 fail(actual, expected, message, '!==', assert.notStrictEqual);
8743 }
8744};
8745
8746function expectedException(actual, expected) {
8747 if (!actual || !expected) {
8748 return false;
8749 }
8750
8751 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
8752 return expected.test(actual);
8753 }
8754
8755 try {
8756 if (actual instanceof expected) {
8757 return true;
8758 }
8759 } catch (e) {
8760 // Ignore. The instanceof check doesn't work for arrow functions.
8761 }
8762
8763 if (Error.isPrototypeOf(expected)) {
8764 return false;
8765 }
8766
8767 return expected.call({}, actual) === true;
8768}
8769
8770function _tryBlock(block) {
8771 var error;
8772 try {
8773 block();
8774 } catch (e) {
8775 error = e;
8776 }
8777 return error;
8778}
8779
8780function _throws(shouldThrow, block, expected, message) {
8781 var actual;
8782
8783 if (typeof block !== 'function') {
8784 throw new TypeError('"block" argument must be a function');
8785 }
8786
8787 if (typeof expected === 'string') {
8788 message = expected;
8789 expected = null;
8790 }
8791
8792 actual = _tryBlock(block);
8793
8794 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
8795 (message ? ' ' + message : '.');
8796
8797 if (shouldThrow && !actual) {
8798 fail(actual, expected, 'Missing expected exception' + message);
8799 }
8800
8801 var userProvidedMessage = typeof message === 'string';
8802 var isUnwantedException = !shouldThrow && util.isError(actual);
8803 var isUnexpectedException = !shouldThrow && actual && !expected;
8804
8805 if ((isUnwantedException &&
8806 userProvidedMessage &&
8807 expectedException(actual, expected)) ||
8808 isUnexpectedException) {
8809 fail(actual, expected, 'Got unwanted exception' + message);
8810 }
8811
8812 if ((shouldThrow && actual && expected &&
8813 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
8814 throw actual;
8815 }
8816}
8817
8818// 11. Expected to throw an error:
8819// assert.throws(block, Error_opt, message_opt);
8820
8821assert.throws = function(block, /*optional*/error, /*optional*/message) {
8822 _throws(true, block, error, message);
8823};
8824
8825// EXTENSION! This is annoying to write outside this module.
8826assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
8827 _throws(false, block, error, message);
8828};
8829
8830assert.ifError = function(err) { if (err) throw err; };
8831
8832// Expose a strict only variant of assert
8833function strict(value, message) {
8834 if (!value) fail(value, true, message, '==', strict);
8835}
8836assert.strict = objectAssign(strict, assert, {
8837 equal: assert.strictEqual,
8838 deepEqual: assert.deepStrictEqual,
8839 notEqual: assert.notStrictEqual,
8840 notDeepEqual: assert.notDeepStrictEqual
8841});
8842assert.strict.strict = assert.strict;
8843
8844var objectKeys = Object.keys || function (obj) {
8845 var keys = [];
8846 for (var key in obj) {
8847 if (hasOwn.call(obj, key)) keys.push(key);
8848 }
8849 return keys;
8850};
8851
8852}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
8853},{"object.assign/polyfill":219,"util/":275}],86:[function(require,module,exports){
8854(function (global){(function (){
8855'use strict';
8856
8857var possibleNames = require('possible-typed-array-names');
8858
8859var g = typeof globalThis === 'undefined' ? global : globalThis;
8860
8861/** @type {import('.')} */
8862module.exports = function availableTypedArrays() {
8863 var /** @type {ReturnType<typeof availableTypedArrays>} */ out = [];
8864 for (var i = 0; i < possibleNames.length; i++) {
8865 if (typeof g[possibleNames[i]] === 'function') {
8866 // @ts-expect-error
8867 out[out.length] = possibleNames[i];
8868 }
8869 }
8870 return out;
8871};
8872
8873}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
8874},{"possible-typed-array-names":222}],87:[function(require,module,exports){
8875'use strict'
8876
8877exports.byteLength = byteLength
8878exports.toByteArray = toByteArray
8879exports.fromByteArray = fromByteArray
8880
8881var lookup = []
8882var revLookup = []
8883var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
8884
8885var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
8886for (var i = 0, len = code.length; i < len; ++i) {
8887 lookup[i] = code[i]
8888 revLookup[code.charCodeAt(i)] = i
8889}
8890
8891// Support decoding URL-safe base64 strings, as Node.js does.
8892// See: https://en.wikipedia.org/wiki/Base64#URL_applications
8893revLookup['-'.charCodeAt(0)] = 62
8894revLookup['_'.charCodeAt(0)] = 63
8895
8896function getLens (b64) {
8897 var len = b64.length
8898
8899 if (len % 4 > 0) {
8900 throw new Error('Invalid string. Length must be a multiple of 4')
8901 }
8902
8903 // Trim off extra bytes after placeholder bytes are found
8904 // See: https://github.com/beatgammit/base64-js/issues/42
8905 var validLen = b64.indexOf('=')
8906 if (validLen === -1) validLen = len
8907
8908 var placeHoldersLen = validLen === len
8909 ? 0
8910 : 4 - (validLen % 4)
8911
8912 return [validLen, placeHoldersLen]
8913}
8914
8915// base64 is 4/3 + up to two characters of the original data
8916function byteLength (b64) {
8917 var lens = getLens(b64)
8918 var validLen = lens[0]
8919 var placeHoldersLen = lens[1]
8920 return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
8921}
8922
8923function _byteLength (b64, validLen, placeHoldersLen) {
8924 return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
8925}
8926
8927function toByteArray (b64) {
8928 var tmp
8929 var lens = getLens(b64)
8930 var validLen = lens[0]
8931 var placeHoldersLen = lens[1]
8932
8933 var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))
8934
8935 var curByte = 0
8936
8937 // if there are placeholders, only get up to the last complete 4 chars
8938 var len = placeHoldersLen > 0
8939 ? validLen - 4
8940 : validLen
8941
8942 var i
8943 for (i = 0; i < len; i += 4) {
8944 tmp =
8945 (revLookup[b64.charCodeAt(i)] << 18) |
8946 (revLookup[b64.charCodeAt(i + 1)] << 12) |
8947 (revLookup[b64.charCodeAt(i + 2)] << 6) |
8948 revLookup[b64.charCodeAt(i + 3)]
8949 arr[curByte++] = (tmp >> 16) & 0xFF
8950 arr[curByte++] = (tmp >> 8) & 0xFF
8951 arr[curByte++] = tmp & 0xFF
8952 }
8953
8954 if (placeHoldersLen === 2) {
8955 tmp =
8956 (revLookup[b64.charCodeAt(i)] << 2) |
8957 (revLookup[b64.charCodeAt(i + 1)] >> 4)
8958 arr[curByte++] = tmp & 0xFF
8959 }
8960
8961 if (placeHoldersLen === 1) {
8962 tmp =
8963 (revLookup[b64.charCodeAt(i)] << 10) |
8964 (revLookup[b64.charCodeAt(i + 1)] << 4) |
8965 (revLookup[b64.charCodeAt(i + 2)] >> 2)
8966 arr[curByte++] = (tmp >> 8) & 0xFF
8967 arr[curByte++] = tmp & 0xFF
8968 }
8969
8970 return arr
8971}
8972
8973function tripletToBase64 (num) {
8974 return lookup[num >> 18 & 0x3F] +
8975 lookup[num >> 12 & 0x3F] +
8976 lookup[num >> 6 & 0x3F] +
8977 lookup[num & 0x3F]
8978}
8979
8980function encodeChunk (uint8, start, end) {
8981 var tmp
8982 var output = []
8983 for (var i = start; i < end; i += 3) {
8984 tmp =
8985 ((uint8[i] << 16) & 0xFF0000) +
8986 ((uint8[i + 1] << 8) & 0xFF00) +
8987 (uint8[i + 2] & 0xFF)
8988 output.push(tripletToBase64(tmp))
8989 }
8990 return output.join('')
8991}
8992
8993function fromByteArray (uint8) {
8994 var tmp
8995 var len = uint8.length
8996 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
8997 var parts = []
8998 var maxChunkLength = 16383 // must be multiple of 3
8999
9000 // go through the array every three bytes, we'll deal with trailing stuff later
9001 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
9002 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
9003 }
9004
9005 // pad the end with zeros, but make sure to not forget the extra bytes
9006 if (extraBytes === 1) {
9007 tmp = uint8[len - 1]
9008 parts.push(
9009 lookup[tmp >> 2] +
9010 lookup[(tmp << 4) & 0x3F] +
9011 '=='
9012 )
9013 } else if (extraBytes === 2) {
9014 tmp = (uint8[len - 2] << 8) + uint8[len - 1]
9015 parts.push(
9016 lookup[tmp >> 10] +
9017 lookup[(tmp >> 4) & 0x3F] +
9018 lookup[(tmp << 2) & 0x3F] +
9019 '='
9020 )
9021 }
9022
9023 return parts.join('')
9024}
9025
9026},{}],88:[function(require,module,exports){
9027/* Copyright 2013 Google Inc. All Rights Reserved.
9028
9029 Licensed under the Apache License, Version 2.0 (the "License");
9030 you may not use this file except in compliance with the License.
9031 You may obtain a copy of the License at
9032
9033 http://www.apache.org/licenses/LICENSE-2.0
9034
9035 Unless required by applicable law or agreed to in writing, software
9036 distributed under the License is distributed on an "AS IS" BASIS,
9037 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9038 See the License for the specific language governing permissions and
9039 limitations under the License.
9040
9041 Bit reading helpers
9042*/
9043
9044var BROTLI_READ_SIZE = 4096;
9045var BROTLI_IBUF_SIZE = (2 * BROTLI_READ_SIZE + 32);
9046var BROTLI_IBUF_MASK = (2 * BROTLI_READ_SIZE - 1);
9047
9048var kBitMask = new Uint32Array([
9049 0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767,
9050 65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215
9051]);
9052
9053/* Input byte buffer, consist of a ringbuffer and a "slack" region where */
9054/* bytes from the start of the ringbuffer are copied. */
9055function BrotliBitReader(input) {
9056 this.buf_ = new Uint8Array(BROTLI_IBUF_SIZE);
9057 this.input_ = input; /* input callback */
9058
9059 this.reset();
9060}
9061
9062BrotliBitReader.READ_SIZE = BROTLI_READ_SIZE;
9063BrotliBitReader.IBUF_MASK = BROTLI_IBUF_MASK;
9064
9065BrotliBitReader.prototype.reset = function() {
9066 this.buf_ptr_ = 0; /* next input will write here */
9067 this.val_ = 0; /* pre-fetched bits */
9068 this.pos_ = 0; /* byte position in stream */
9069 this.bit_pos_ = 0; /* current bit-reading position in val_ */
9070 this.bit_end_pos_ = 0; /* bit-reading end position from LSB of val_ */
9071 this.eos_ = 0; /* input stream is finished */
9072
9073 this.readMoreInput();
9074 for (var i = 0; i < 4; i++) {
9075 this.val_ |= this.buf_[this.pos_] << (8 * i);
9076 ++this.pos_;
9077 }
9078
9079 return this.bit_end_pos_ > 0;
9080};
9081
9082/* Fills up the input ringbuffer by calling the input callback.
9083
9084 Does nothing if there are at least 32 bytes present after current position.
9085
9086 Returns 0 if either:
9087 - the input callback returned an error, or
9088 - there is no more input and the position is past the end of the stream.
9089
9090 After encountering the end of the input stream, 32 additional zero bytes are
9091 copied to the ringbuffer, therefore it is safe to call this function after
9092 every 32 bytes of input is read.
9093*/
9094BrotliBitReader.prototype.readMoreInput = function() {
9095 if (this.bit_end_pos_ > 256) {
9096 return;
9097 } else if (this.eos_) {
9098 if (this.bit_pos_ > this.bit_end_pos_)
9099 throw new Error('Unexpected end of input ' + this.bit_pos_ + ' ' + this.bit_end_pos_);
9100 } else {
9101 var dst = this.buf_ptr_;
9102 var bytes_read = this.input_.read(this.buf_, dst, BROTLI_READ_SIZE);
9103 if (bytes_read < 0) {
9104 throw new Error('Unexpected end of input');
9105 }
9106
9107 if (bytes_read < BROTLI_READ_SIZE) {
9108 this.eos_ = 1;
9109 /* Store 32 bytes of zero after the stream end. */
9110 for (var p = 0; p < 32; p++)
9111 this.buf_[dst + bytes_read + p] = 0;
9112 }
9113
9114 if (dst === 0) {
9115 /* Copy the head of the ringbuffer to the slack region. */
9116 for (var p = 0; p < 32; p++)
9117 this.buf_[(BROTLI_READ_SIZE << 1) + p] = this.buf_[p];
9118
9119 this.buf_ptr_ = BROTLI_READ_SIZE;
9120 } else {
9121 this.buf_ptr_ = 0;
9122 }
9123
9124 this.bit_end_pos_ += bytes_read << 3;
9125 }
9126};
9127
9128/* Guarantees that there are at least 24 bits in the buffer. */
9129BrotliBitReader.prototype.fillBitWindow = function() {
9130 while (this.bit_pos_ >= 8) {
9131 this.val_ >>>= 8;
9132 this.val_ |= this.buf_[this.pos_ & BROTLI_IBUF_MASK] << 24;
9133 ++this.pos_;
9134 this.bit_pos_ = this.bit_pos_ - 8 >>> 0;
9135 this.bit_end_pos_ = this.bit_end_pos_ - 8 >>> 0;
9136 }
9137};
9138
9139/* Reads the specified number of bits from Read Buffer. */
9140BrotliBitReader.prototype.readBits = function(n_bits) {
9141 if (32 - this.bit_pos_ < n_bits) {
9142 this.fillBitWindow();
9143 }
9144
9145 var val = ((this.val_ >>> this.bit_pos_) & kBitMask[n_bits]);
9146 this.bit_pos_ += n_bits;
9147 return val;
9148};
9149
9150module.exports = BrotliBitReader;
9151
9152},{}],89:[function(require,module,exports){
9153/* Copyright 2013 Google Inc. All Rights Reserved.
9154
9155 Licensed under the Apache License, Version 2.0 (the "License");
9156 you may not use this file except in compliance with the License.
9157 You may obtain a copy of the License at
9158
9159 http://www.apache.org/licenses/LICENSE-2.0
9160
9161 Unless required by applicable law or agreed to in writing, software
9162 distributed under the License is distributed on an "AS IS" BASIS,
9163 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9164 See the License for the specific language governing permissions and
9165 limitations under the License.
9166
9167 Lookup table to map the previous two bytes to a context id.
9168
9169 There are four different context modeling modes defined here:
9170 CONTEXT_LSB6: context id is the least significant 6 bits of the last byte,
9171 CONTEXT_MSB6: context id is the most significant 6 bits of the last byte,
9172 CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text,
9173 CONTEXT_SIGNED: second-order context model tuned for signed integers.
9174
9175 The context id for the UTF8 context model is calculated as follows. If p1
9176 and p2 are the previous two bytes, we calcualte the context as
9177
9178 context = kContextLookup[p1] | kContextLookup[p2 + 256].
9179
9180 If the previous two bytes are ASCII characters (i.e. < 128), this will be
9181 equivalent to
9182
9183 context = 4 * context1(p1) + context2(p2),
9184
9185 where context1 is based on the previous byte in the following way:
9186
9187 0 : non-ASCII control
9188 1 : \t, \n, \r
9189 2 : space
9190 3 : other punctuation
9191 4 : " '
9192 5 : %
9193 6 : ( < [ {
9194 7 : ) > ] }
9195 8 : , ; :
9196 9 : .
9197 10 : =
9198 11 : number
9199 12 : upper-case vowel
9200 13 : upper-case consonant
9201 14 : lower-case vowel
9202 15 : lower-case consonant
9203
9204 and context2 is based on the second last byte:
9205
9206 0 : control, space
9207 1 : punctuation
9208 2 : upper-case letter, number
9209 3 : lower-case letter
9210
9211 If the last byte is ASCII, and the second last byte is not (in a valid UTF8
9212 stream it will be a continuation byte, value between 128 and 191), the
9213 context is the same as if the second last byte was an ASCII control or space.
9214
9215 If the last byte is a UTF8 lead byte (value >= 192), then the next byte will
9216 be a continuation byte and the context id is 2 or 3 depending on the LSB of
9217 the last byte and to a lesser extent on the second last byte if it is ASCII.
9218
9219 If the last byte is a UTF8 continuation byte, the second last byte can be:
9220 - continuation byte: the next byte is probably ASCII or lead byte (assuming
9221 4-byte UTF8 characters are rare) and the context id is 0 or 1.
9222 - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1
9223 - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3
9224
9225 The possible value combinations of the previous two bytes, the range of
9226 context ids and the type of the next byte is summarized in the table below:
9227
9228 |--------\-----------------------------------------------------------------|
9229 | \ Last byte |
9230 | Second \---------------------------------------------------------------|
9231 | last byte \ ASCII | cont. byte | lead byte |
9232 | \ (0-127) | (128-191) | (192-) |
9233 |=============|===================|=====================|==================|
9234 | ASCII | next: ASCII/lead | not valid | next: cont. |
9235 | (0-127) | context: 4 - 63 | | context: 2 - 3 |
9236 |-------------|-------------------|---------------------|------------------|
9237 | cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. |
9238 | (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 |
9239 |-------------|-------------------|---------------------|------------------|
9240 | lead byte | not valid | next: ASCII/lead | not valid |
9241 | (192-207) | | context: 0 - 1 | |
9242 |-------------|-------------------|---------------------|------------------|
9243 | lead byte | not valid | next: cont. | not valid |
9244 | (208-) | | context: 2 - 3 | |
9245 |-------------|-------------------|---------------------|------------------|
9246
9247 The context id for the signed context mode is calculated as:
9248
9249 context = (kContextLookup[512 + p1] << 3) | kContextLookup[512 + p2].
9250
9251 For any context modeling modes, the context ids can be calculated by |-ing
9252 together two lookups from one table using context model dependent offsets:
9253
9254 context = kContextLookup[offset1 + p1] | kContextLookup[offset2 + p2].
9255
9256 where offset1 and offset2 are dependent on the context mode.
9257*/
9258
9259var CONTEXT_LSB6 = 0;
9260var CONTEXT_MSB6 = 1;
9261var CONTEXT_UTF8 = 2;
9262var CONTEXT_SIGNED = 3;
9263
9264/* Common context lookup table for all context modes. */
9265exports.lookup = new Uint8Array([
9266 /* CONTEXT_UTF8, last byte. */
9267 /* ASCII range. */
9268 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0,
9269 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9270 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12,
9271 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12,
9272 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48,
9273 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12,
9274 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56,
9275 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0,
9276 /* UTF8 continuation byte range. */
9277 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
9278 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
9279 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
9280 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
9281 /* UTF8 lead byte range. */
9282 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
9283 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
9284 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
9285 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
9286 /* CONTEXT_UTF8 second last byte. */
9287 /* ASCII range. */
9288 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9289 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9290 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
9291 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,
9292 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
9293 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
9294 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
9295 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0,
9296 /* UTF8 continuation byte range. */
9297 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9298 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9299 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9300 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9301 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9302 /* UTF8 lead byte range. */
9303 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9304 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
9305 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
9306 /* CONTEXT_SIGNED, second last byte. */
9307 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
9308 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
9309 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
9310 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
9311 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
9312 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
9313 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
9314 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
9315 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
9316 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
9317 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
9318 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
9319 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
9320 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
9321 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
9322 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,
9323 /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */
9324 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
9325 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
9326 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
9327 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
9328 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
9329 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
9330 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
9331 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
9332 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
9333 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
9334 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
9335 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
9336 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
9337 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
9338 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
9339 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56,
9340 /* CONTEXT_LSB6, last byte. */
9341 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
9342 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
9343 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
9344 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
9345 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
9346 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
9347 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
9348 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
9349 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
9350 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
9351 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
9352 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
9353 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
9354 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
9355 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
9356 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
9357 /* CONTEXT_MSB6, last byte. */
9358 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,
9359 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7,
9360 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11,
9361 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15,
9362 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19,
9363 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23,
9364 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27,
9365 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,
9366 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35,
9367 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39,
9368 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43,
9369 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47,
9370 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51,
9371 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,
9372 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59,
9373 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63,
9374 /* CONTEXT_{M,L}SB6, second last byte, */
9375 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9376 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9377 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9378 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9379 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9380 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9381 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9382 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9383 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9384 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9385 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9386 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9387 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9388 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9389 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9390 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9391]);
9392
9393exports.lookupOffsets = new Uint16Array([
9394 /* CONTEXT_LSB6 */
9395 1024, 1536,
9396 /* CONTEXT_MSB6 */
9397 1280, 1536,
9398 /* CONTEXT_UTF8 */
9399 0, 256,
9400 /* CONTEXT_SIGNED */
9401 768, 512,
9402]);
9403
9404},{}],90:[function(require,module,exports){
9405/* Copyright 2013 Google Inc. All Rights Reserved.
9406
9407 Licensed under the Apache License, Version 2.0 (the "License");
9408 you may not use this file except in compliance with the License.
9409 You may obtain a copy of the License at
9410
9411 http://www.apache.org/licenses/LICENSE-2.0
9412
9413 Unless required by applicable law or agreed to in writing, software
9414 distributed under the License is distributed on an "AS IS" BASIS,
9415 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9416 See the License for the specific language governing permissions and
9417 limitations under the License.
9418*/
9419
9420var BrotliInput = require('./streams').BrotliInput;
9421var BrotliOutput = require('./streams').BrotliOutput;
9422var BrotliBitReader = require('./bit_reader');
9423var BrotliDictionary = require('./dictionary');
9424var HuffmanCode = require('./huffman').HuffmanCode;
9425var BrotliBuildHuffmanTable = require('./huffman').BrotliBuildHuffmanTable;
9426var Context = require('./context');
9427var Prefix = require('./prefix');
9428var Transform = require('./transform');
9429
9430var kDefaultCodeLength = 8;
9431var kCodeLengthRepeatCode = 16;
9432var kNumLiteralCodes = 256;
9433var kNumInsertAndCopyCodes = 704;
9434var kNumBlockLengthCodes = 26;
9435var kLiteralContextBits = 6;
9436var kDistanceContextBits = 2;
9437
9438var HUFFMAN_TABLE_BITS = 8;
9439var HUFFMAN_TABLE_MASK = 0xff;
9440/* Maximum possible Huffman table size for an alphabet size of 704, max code
9441 * length 15 and root table bits 8. */
9442var HUFFMAN_MAX_TABLE_SIZE = 1080;
9443
9444var CODE_LENGTH_CODES = 18;
9445var kCodeLengthCodeOrder = new Uint8Array([
9446 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15,
9447]);
9448
9449var NUM_DISTANCE_SHORT_CODES = 16;
9450var kDistanceShortCodeIndexOffset = new Uint8Array([
9451 3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2
9452]);
9453
9454var kDistanceShortCodeValueOffset = new Int8Array([
9455 0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3
9456]);
9457
9458var kMaxHuffmanTableSize = new Uint16Array([
9459 256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822,
9460 854, 886, 920, 952, 984, 1016, 1048, 1080
9461]);
9462
9463function DecodeWindowBits(br) {
9464 var n;
9465 if (br.readBits(1) === 0) {
9466 return 16;
9467 }
9468
9469 n = br.readBits(3);
9470 if (n > 0) {
9471 return 17 + n;
9472 }
9473
9474 n = br.readBits(3);
9475 if (n > 0) {
9476 return 8 + n;
9477 }
9478
9479 return 17;
9480}
9481
9482/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */
9483function DecodeVarLenUint8(br) {
9484 if (br.readBits(1)) {
9485 var nbits = br.readBits(3);
9486 if (nbits === 0) {
9487 return 1;
9488 } else {
9489 return br.readBits(nbits) + (1 << nbits);
9490 }
9491 }
9492 return 0;
9493}
9494
9495function MetaBlockLength() {
9496 this.meta_block_length = 0;
9497 this.input_end = 0;
9498 this.is_uncompressed = 0;
9499 this.is_metadata = false;
9500}
9501
9502function DecodeMetaBlockLength(br) {
9503 var out = new MetaBlockLength;
9504 var size_nibbles;
9505 var size_bytes;
9506 var i;
9507
9508 out.input_end = br.readBits(1);
9509 if (out.input_end && br.readBits(1)) {
9510 return out;
9511 }
9512
9513 size_nibbles = br.readBits(2) + 4;
9514 if (size_nibbles === 7) {
9515 out.is_metadata = true;
9516
9517 if (br.readBits(1) !== 0)
9518 throw new Error('Invalid reserved bit');
9519
9520 size_bytes = br.readBits(2);
9521 if (size_bytes === 0)
9522 return out;
9523
9524 for (i = 0; i < size_bytes; i++) {
9525 var next_byte = br.readBits(8);
9526 if (i + 1 === size_bytes && size_bytes > 1 && next_byte === 0)
9527 throw new Error('Invalid size byte');
9528
9529 out.meta_block_length |= next_byte << (i * 8);
9530 }
9531 } else {
9532 for (i = 0; i < size_nibbles; ++i) {
9533 var next_nibble = br.readBits(4);
9534 if (i + 1 === size_nibbles && size_nibbles > 4 && next_nibble === 0)
9535 throw new Error('Invalid size nibble');
9536
9537 out.meta_block_length |= next_nibble << (i * 4);
9538 }
9539 }
9540
9541 ++out.meta_block_length;
9542
9543 if (!out.input_end && !out.is_metadata) {
9544 out.is_uncompressed = br.readBits(1);
9545 }
9546
9547 return out;
9548}
9549
9550/* Decodes the next Huffman code from bit-stream. */
9551function ReadSymbol(table, index, br) {
9552 var start_index = index;
9553
9554 var nbits;
9555 br.fillBitWindow();
9556 index += (br.val_ >>> br.bit_pos_) & HUFFMAN_TABLE_MASK;
9557 nbits = table[index].bits - HUFFMAN_TABLE_BITS;
9558 if (nbits > 0) {
9559 br.bit_pos_ += HUFFMAN_TABLE_BITS;
9560 index += table[index].value;
9561 index += (br.val_ >>> br.bit_pos_) & ((1 << nbits) - 1);
9562 }
9563 br.bit_pos_ += table[index].bits;
9564 return table[index].value;
9565}
9566
9567function ReadHuffmanCodeLengths(code_length_code_lengths, num_symbols, code_lengths, br) {
9568 var symbol = 0;
9569 var prev_code_len = kDefaultCodeLength;
9570 var repeat = 0;
9571 var repeat_code_len = 0;
9572 var space = 32768;
9573
9574 var table = [];
9575 for (var i = 0; i < 32; i++)
9576 table.push(new HuffmanCode(0, 0));
9577
9578 BrotliBuildHuffmanTable(table, 0, 5, code_length_code_lengths, CODE_LENGTH_CODES);
9579
9580 while (symbol < num_symbols && space > 0) {
9581 var p = 0;
9582 var code_len;
9583
9584 br.readMoreInput();
9585 br.fillBitWindow();
9586 p += (br.val_ >>> br.bit_pos_) & 31;
9587 br.bit_pos_ += table[p].bits;
9588 code_len = table[p].value & 0xff;
9589 if (code_len < kCodeLengthRepeatCode) {
9590 repeat = 0;
9591 code_lengths[symbol++] = code_len;
9592 if (code_len !== 0) {
9593 prev_code_len = code_len;
9594 space -= 32768 >> code_len;
9595 }
9596 } else {
9597 var extra_bits = code_len - 14;
9598 var old_repeat;
9599 var repeat_delta;
9600 var new_len = 0;
9601 if (code_len === kCodeLengthRepeatCode) {
9602 new_len = prev_code_len;
9603 }
9604 if (repeat_code_len !== new_len) {
9605 repeat = 0;
9606 repeat_code_len = new_len;
9607 }
9608 old_repeat = repeat;
9609 if (repeat > 0) {
9610 repeat -= 2;
9611 repeat <<= extra_bits;
9612 }
9613 repeat += br.readBits(extra_bits) + 3;
9614 repeat_delta = repeat - old_repeat;
9615 if (symbol + repeat_delta > num_symbols) {
9616 throw new Error('[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols');
9617 }
9618
9619 for (var x = 0; x < repeat_delta; x++)
9620 code_lengths[symbol + x] = repeat_code_len;
9621
9622 symbol += repeat_delta;
9623
9624 if (repeat_code_len !== 0) {
9625 space -= repeat_delta << (15 - repeat_code_len);
9626 }
9627 }
9628 }
9629 if (space !== 0) {
9630 throw new Error("[ReadHuffmanCodeLengths] space = " + space);
9631 }
9632
9633 for (; symbol < num_symbols; symbol++)
9634 code_lengths[symbol] = 0;
9635}
9636
9637function ReadHuffmanCode(alphabet_size, tables, table, br) {
9638 var table_size = 0;
9639 var simple_code_or_skip;
9640 var code_lengths = new Uint8Array(alphabet_size);
9641
9642 br.readMoreInput();
9643
9644 /* simple_code_or_skip is used as follows:
9645 1 for simple code;
9646 0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */
9647 simple_code_or_skip = br.readBits(2);
9648 if (simple_code_or_skip === 1) {
9649 /* Read symbols, codes & code lengths directly. */
9650 var i;
9651 var max_bits_counter = alphabet_size - 1;
9652 var max_bits = 0;
9653 var symbols = new Int32Array(4);
9654 var num_symbols = br.readBits(2) + 1;
9655 while (max_bits_counter) {
9656 max_bits_counter >>= 1;
9657 ++max_bits;
9658 }
9659
9660 for (i = 0; i < num_symbols; ++i) {
9661 symbols[i] = br.readBits(max_bits) % alphabet_size;
9662 code_lengths[symbols[i]] = 2;
9663 }
9664 code_lengths[symbols[0]] = 1;
9665 switch (num_symbols) {
9666 case 1:
9667 break;
9668 case 3:
9669 if ((symbols[0] === symbols[1]) ||
9670 (symbols[0] === symbols[2]) ||
9671 (symbols[1] === symbols[2])) {
9672 throw new Error('[ReadHuffmanCode] invalid symbols');
9673 }
9674 break;
9675 case 2:
9676 if (symbols[0] === symbols[1]) {
9677 throw new Error('[ReadHuffmanCode] invalid symbols');
9678 }
9679
9680 code_lengths[symbols[1]] = 1;
9681 break;
9682 case 4:
9683 if ((symbols[0] === symbols[1]) ||
9684 (symbols[0] === symbols[2]) ||
9685 (symbols[0] === symbols[3]) ||
9686 (symbols[1] === symbols[2]) ||
9687 (symbols[1] === symbols[3]) ||
9688 (symbols[2] === symbols[3])) {
9689 throw new Error('[ReadHuffmanCode] invalid symbols');
9690 }
9691
9692 if (br.readBits(1)) {
9693 code_lengths[symbols[2]] = 3;
9694 code_lengths[symbols[3]] = 3;
9695 } else {
9696 code_lengths[symbols[0]] = 2;
9697 }
9698 break;
9699 }
9700 } else { /* Decode Huffman-coded code lengths. */
9701 var i;
9702 var code_length_code_lengths = new Uint8Array(CODE_LENGTH_CODES);
9703 var space = 32;
9704 var num_codes = 0;
9705 /* Static Huffman code for the code length code lengths */
9706 var huff = [
9707 new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2),
9708 new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 1),
9709 new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2),
9710 new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 5)
9711 ];
9712 for (i = simple_code_or_skip; i < CODE_LENGTH_CODES && space > 0; ++i) {
9713 var code_len_idx = kCodeLengthCodeOrder[i];
9714 var p = 0;
9715 var v;
9716 br.fillBitWindow();
9717 p += (br.val_ >>> br.bit_pos_) & 15;
9718 br.bit_pos_ += huff[p].bits;
9719 v = huff[p].value;
9720 code_length_code_lengths[code_len_idx] = v;
9721 if (v !== 0) {
9722 space -= (32 >> v);
9723 ++num_codes;
9724 }
9725 }
9726
9727 if (!(num_codes === 1 || space === 0))
9728 throw new Error('[ReadHuffmanCode] invalid num_codes or space');
9729
9730 ReadHuffmanCodeLengths(code_length_code_lengths, alphabet_size, code_lengths, br);
9731 }
9732
9733 table_size = BrotliBuildHuffmanTable(tables, table, HUFFMAN_TABLE_BITS, code_lengths, alphabet_size);
9734
9735 if (table_size === 0) {
9736 throw new Error("[ReadHuffmanCode] BuildHuffmanTable failed: ");
9737 }
9738
9739 return table_size;
9740}
9741
9742function ReadBlockLength(table, index, br) {
9743 var code;
9744 var nbits;
9745 code = ReadSymbol(table, index, br);
9746 nbits = Prefix.kBlockLengthPrefixCode[code].nbits;
9747 return Prefix.kBlockLengthPrefixCode[code].offset + br.readBits(nbits);
9748}
9749
9750function TranslateShortCodes(code, ringbuffer, index) {
9751 var val;
9752 if (code < NUM_DISTANCE_SHORT_CODES) {
9753 index += kDistanceShortCodeIndexOffset[code];
9754 index &= 3;
9755 val = ringbuffer[index] + kDistanceShortCodeValueOffset[code];
9756 } else {
9757 val = code - NUM_DISTANCE_SHORT_CODES + 1;
9758 }
9759 return val;
9760}
9761
9762function MoveToFront(v, index) {
9763 var value = v[index];
9764 var i = index;
9765 for (; i; --i) v[i] = v[i - 1];
9766 v[0] = value;
9767}
9768
9769function InverseMoveToFrontTransform(v, v_len) {
9770 var mtf = new Uint8Array(256);
9771 var i;
9772 for (i = 0; i < 256; ++i) {
9773 mtf[i] = i;
9774 }
9775 for (i = 0; i < v_len; ++i) {
9776 var index = v[i];
9777 v[i] = mtf[index];
9778 if (index) MoveToFront(mtf, index);
9779 }
9780}
9781
9782/* Contains a collection of huffman trees with the same alphabet size. */
9783function HuffmanTreeGroup(alphabet_size, num_htrees) {
9784 this.alphabet_size = alphabet_size;
9785 this.num_htrees = num_htrees;
9786 this.codes = new Array(num_htrees + num_htrees * kMaxHuffmanTableSize[(alphabet_size + 31) >>> 5]);
9787 this.htrees = new Uint32Array(num_htrees);
9788}
9789
9790HuffmanTreeGroup.prototype.decode = function(br) {
9791 var i;
9792 var table_size;
9793 var next = 0;
9794 for (i = 0; i < this.num_htrees; ++i) {
9795 this.htrees[i] = next;
9796 table_size = ReadHuffmanCode(this.alphabet_size, this.codes, next, br);
9797 next += table_size;
9798 }
9799};
9800
9801function DecodeContextMap(context_map_size, br) {
9802 var out = { num_htrees: null, context_map: null };
9803 var use_rle_for_zeros;
9804 var max_run_length_prefix = 0;
9805 var table;
9806 var i;
9807
9808 br.readMoreInput();
9809 var num_htrees = out.num_htrees = DecodeVarLenUint8(br) + 1;
9810
9811 var context_map = out.context_map = new Uint8Array(context_map_size);
9812 if (num_htrees <= 1) {
9813 return out;
9814 }
9815
9816 use_rle_for_zeros = br.readBits(1);
9817 if (use_rle_for_zeros) {
9818 max_run_length_prefix = br.readBits(4) + 1;
9819 }
9820
9821 table = [];
9822 for (i = 0; i < HUFFMAN_MAX_TABLE_SIZE; i++) {
9823 table[i] = new HuffmanCode(0, 0);
9824 }
9825
9826 ReadHuffmanCode(num_htrees + max_run_length_prefix, table, 0, br);
9827
9828 for (i = 0; i < context_map_size;) {
9829 var code;
9830
9831 br.readMoreInput();
9832 code = ReadSymbol(table, 0, br);
9833 if (code === 0) {
9834 context_map[i] = 0;
9835 ++i;
9836 } else if (code <= max_run_length_prefix) {
9837 var reps = 1 + (1 << code) + br.readBits(code);
9838 while (--reps) {
9839 if (i >= context_map_size) {
9840 throw new Error("[DecodeContextMap] i >= context_map_size");
9841 }
9842 context_map[i] = 0;
9843 ++i;
9844 }
9845 } else {
9846 context_map[i] = code - max_run_length_prefix;
9847 ++i;
9848 }
9849 }
9850 if (br.readBits(1)) {
9851 InverseMoveToFrontTransform(context_map, context_map_size);
9852 }
9853
9854 return out;
9855}
9856
9857function DecodeBlockType(max_block_type, trees, tree_type, block_types, ringbuffers, indexes, br) {
9858 var ringbuffer = tree_type * 2;
9859 var index = tree_type;
9860 var type_code = ReadSymbol(trees, tree_type * HUFFMAN_MAX_TABLE_SIZE, br);
9861 var block_type;
9862 if (type_code === 0) {
9863 block_type = ringbuffers[ringbuffer + (indexes[index] & 1)];
9864 } else if (type_code === 1) {
9865 block_type = ringbuffers[ringbuffer + ((indexes[index] - 1) & 1)] + 1;
9866 } else {
9867 block_type = type_code - 2;
9868 }
9869 if (block_type >= max_block_type) {
9870 block_type -= max_block_type;
9871 }
9872 block_types[tree_type] = block_type;
9873 ringbuffers[ringbuffer + (indexes[index] & 1)] = block_type;
9874 ++indexes[index];
9875}
9876
9877function CopyUncompressedBlockToOutput(output, len, pos, ringbuffer, ringbuffer_mask, br) {
9878 var rb_size = ringbuffer_mask + 1;
9879 var rb_pos = pos & ringbuffer_mask;
9880 var br_pos = br.pos_ & BrotliBitReader.IBUF_MASK;
9881 var nbytes;
9882
9883 /* For short lengths copy byte-by-byte */
9884 if (len < 8 || br.bit_pos_ + (len << 3) < br.bit_end_pos_) {
9885 while (len-- > 0) {
9886 br.readMoreInput();
9887 ringbuffer[rb_pos++] = br.readBits(8);
9888 if (rb_pos === rb_size) {
9889 output.write(ringbuffer, rb_size);
9890 rb_pos = 0;
9891 }
9892 }
9893 return;
9894 }
9895
9896 if (br.bit_end_pos_ < 32) {
9897 throw new Error('[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32');
9898 }
9899
9900 /* Copy remaining 0-4 bytes from br.val_ to ringbuffer. */
9901 while (br.bit_pos_ < 32) {
9902 ringbuffer[rb_pos] = (br.val_ >>> br.bit_pos_);
9903 br.bit_pos_ += 8;
9904 ++rb_pos;
9905 --len;
9906 }
9907
9908 /* Copy remaining bytes from br.buf_ to ringbuffer. */
9909 nbytes = (br.bit_end_pos_ - br.bit_pos_) >> 3;
9910 if (br_pos + nbytes > BrotliBitReader.IBUF_MASK) {
9911 var tail = BrotliBitReader.IBUF_MASK + 1 - br_pos;
9912 for (var x = 0; x < tail; x++)
9913 ringbuffer[rb_pos + x] = br.buf_[br_pos + x];
9914
9915 nbytes -= tail;
9916 rb_pos += tail;
9917 len -= tail;
9918 br_pos = 0;
9919 }
9920
9921 for (var x = 0; x < nbytes; x++)
9922 ringbuffer[rb_pos + x] = br.buf_[br_pos + x];
9923
9924 rb_pos += nbytes;
9925 len -= nbytes;
9926
9927 /* If we wrote past the logical end of the ringbuffer, copy the tail of the
9928 ringbuffer to its beginning and flush the ringbuffer to the output. */
9929 if (rb_pos >= rb_size) {
9930 output.write(ringbuffer, rb_size);
9931 rb_pos -= rb_size;
9932 for (var x = 0; x < rb_pos; x++)
9933 ringbuffer[x] = ringbuffer[rb_size + x];
9934 }
9935
9936 /* If we have more to copy than the remaining size of the ringbuffer, then we
9937 first fill the ringbuffer from the input and then flush the ringbuffer to
9938 the output */
9939 while (rb_pos + len >= rb_size) {
9940 nbytes = rb_size - rb_pos;
9941 if (br.input_.read(ringbuffer, rb_pos, nbytes) < nbytes) {
9942 throw new Error('[CopyUncompressedBlockToOutput] not enough bytes');
9943 }
9944 output.write(ringbuffer, rb_size);
9945 len -= nbytes;
9946 rb_pos = 0;
9947 }
9948
9949 /* Copy straight from the input onto the ringbuffer. The ringbuffer will be
9950 flushed to the output at a later time. */
9951 if (br.input_.read(ringbuffer, rb_pos, len) < len) {
9952 throw new Error('[CopyUncompressedBlockToOutput] not enough bytes');
9953 }
9954
9955 /* Restore the state of the bit reader. */
9956 br.reset();
9957}
9958
9959/* Advances the bit reader position to the next byte boundary and verifies
9960 that any skipped bits are set to zero. */
9961function JumpToByteBoundary(br) {
9962 var new_bit_pos = (br.bit_pos_ + 7) & ~7;
9963 var pad_bits = br.readBits(new_bit_pos - br.bit_pos_);
9964 return pad_bits == 0;
9965}
9966
9967function BrotliDecompressedSize(buffer) {
9968 var input = new BrotliInput(buffer);
9969 var br = new BrotliBitReader(input);
9970 DecodeWindowBits(br);
9971 var out = DecodeMetaBlockLength(br);
9972 return out.meta_block_length;
9973}
9974
9975exports.BrotliDecompressedSize = BrotliDecompressedSize;
9976
9977function BrotliDecompressBuffer(buffer, output_size) {
9978 var input = new BrotliInput(buffer);
9979
9980 if (output_size == null) {
9981 output_size = BrotliDecompressedSize(buffer);
9982 }
9983
9984 var output_buffer = new Uint8Array(output_size);
9985 var output = new BrotliOutput(output_buffer);
9986
9987 BrotliDecompress(input, output);
9988
9989 if (output.pos < output.buffer.length) {
9990 output.buffer = output.buffer.subarray(0, output.pos);
9991 }
9992
9993 return output.buffer;
9994}
9995
9996exports.BrotliDecompressBuffer = BrotliDecompressBuffer;
9997
9998function BrotliDecompress(input, output) {
9999 var i;
10000 var pos = 0;
10001 var input_end = 0;
10002 var window_bits = 0;
10003 var max_backward_distance;
10004 var max_distance = 0;
10005 var ringbuffer_size;
10006 var ringbuffer_mask;
10007 var ringbuffer;
10008 var ringbuffer_end;
10009 /* This ring buffer holds a few past copy distances that will be used by */
10010 /* some special distance codes. */
10011 var dist_rb = [ 16, 15, 11, 4 ];
10012 var dist_rb_idx = 0;
10013 /* The previous 2 bytes used for context. */
10014 var prev_byte1 = 0;
10015 var prev_byte2 = 0;
10016 var hgroup = [new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0)];
10017 var block_type_trees;
10018 var block_len_trees;
10019 var br;
10020
10021 /* We need the slack region for the following reasons:
10022 - always doing two 8-byte copies for fast backward copying
10023 - transforms
10024 - flushing the input ringbuffer when decoding uncompressed blocks */
10025 var kRingBufferWriteAheadSlack = 128 + BrotliBitReader.READ_SIZE;
10026
10027 br = new BrotliBitReader(input);
10028
10029 /* Decode window size. */
10030 window_bits = DecodeWindowBits(br);
10031 max_backward_distance = (1 << window_bits) - 16;
10032
10033 ringbuffer_size = 1 << window_bits;
10034 ringbuffer_mask = ringbuffer_size - 1;
10035 ringbuffer = new Uint8Array(ringbuffer_size + kRingBufferWriteAheadSlack + BrotliDictionary.maxDictionaryWordLength);
10036 ringbuffer_end = ringbuffer_size;
10037
10038 block_type_trees = [];
10039 block_len_trees = [];
10040 for (var x = 0; x < 3 * HUFFMAN_MAX_TABLE_SIZE; x++) {
10041 block_type_trees[x] = new HuffmanCode(0, 0);
10042 block_len_trees[x] = new HuffmanCode(0, 0);
10043 }
10044
10045 while (!input_end) {
10046 var meta_block_remaining_len = 0;
10047 var is_uncompressed;
10048 var block_length = [ 1 << 28, 1 << 28, 1 << 28 ];
10049 var block_type = [ 0 ];
10050 var num_block_types = [ 1, 1, 1 ];
10051 var block_type_rb = [ 0, 1, 0, 1, 0, 1 ];
10052 var block_type_rb_index = [ 0 ];
10053 var distance_postfix_bits;
10054 var num_direct_distance_codes;
10055 var distance_postfix_mask;
10056 var num_distance_codes;
10057 var context_map = null;
10058 var context_modes = null;
10059 var num_literal_htrees;
10060 var dist_context_map = null;
10061 var num_dist_htrees;
10062 var context_offset = 0;
10063 var context_map_slice = null;
10064 var literal_htree_index = 0;
10065 var dist_context_offset = 0;
10066 var dist_context_map_slice = null;
10067 var dist_htree_index = 0;
10068 var context_lookup_offset1 = 0;
10069 var context_lookup_offset2 = 0;
10070 var context_mode;
10071 var htree_command;
10072
10073 for (i = 0; i < 3; ++i) {
10074 hgroup[i].codes = null;
10075 hgroup[i].htrees = null;
10076 }
10077
10078 br.readMoreInput();
10079
10080 var _out = DecodeMetaBlockLength(br);
10081 meta_block_remaining_len = _out.meta_block_length;
10082 if (pos + meta_block_remaining_len > output.buffer.length) {
10083 /* We need to grow the output buffer to fit the additional data. */
10084 var tmp = new Uint8Array( pos + meta_block_remaining_len );
10085 tmp.set( output.buffer );
10086 output.buffer = tmp;
10087 }
10088 input_end = _out.input_end;
10089 is_uncompressed = _out.is_uncompressed;
10090
10091 if (_out.is_metadata) {
10092 JumpToByteBoundary(br);
10093
10094 for (; meta_block_remaining_len > 0; --meta_block_remaining_len) {
10095 br.readMoreInput();
10096 /* Read one byte and ignore it. */
10097 br.readBits(8);
10098 }
10099
10100 continue;
10101 }
10102
10103 if (meta_block_remaining_len === 0) {
10104 continue;
10105 }
10106
10107 if (is_uncompressed) {
10108 br.bit_pos_ = (br.bit_pos_ + 7) & ~7;
10109 CopyUncompressedBlockToOutput(output, meta_block_remaining_len, pos,
10110 ringbuffer, ringbuffer_mask, br);
10111 pos += meta_block_remaining_len;
10112 continue;
10113 }
10114
10115 for (i = 0; i < 3; ++i) {
10116 num_block_types[i] = DecodeVarLenUint8(br) + 1;
10117 if (num_block_types[i] >= 2) {
10118 ReadHuffmanCode(num_block_types[i] + 2, block_type_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);
10119 ReadHuffmanCode(kNumBlockLengthCodes, block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);
10120 block_length[i] = ReadBlockLength(block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);
10121 block_type_rb_index[i] = 1;
10122 }
10123 }
10124
10125 br.readMoreInput();
10126
10127 distance_postfix_bits = br.readBits(2);
10128 num_direct_distance_codes = NUM_DISTANCE_SHORT_CODES + (br.readBits(4) << distance_postfix_bits);
10129 distance_postfix_mask = (1 << distance_postfix_bits) - 1;
10130 num_distance_codes = (num_direct_distance_codes + (48 << distance_postfix_bits));
10131 context_modes = new Uint8Array(num_block_types[0]);
10132
10133 for (i = 0; i < num_block_types[0]; ++i) {
10134 br.readMoreInput();
10135 context_modes[i] = (br.readBits(2) << 1);
10136 }
10137
10138 var _o1 = DecodeContextMap(num_block_types[0] << kLiteralContextBits, br);
10139 num_literal_htrees = _o1.num_htrees;
10140 context_map = _o1.context_map;
10141
10142 var _o2 = DecodeContextMap(num_block_types[2] << kDistanceContextBits, br);
10143 num_dist_htrees = _o2.num_htrees;
10144 dist_context_map = _o2.context_map;
10145
10146 hgroup[0] = new HuffmanTreeGroup(kNumLiteralCodes, num_literal_htrees);
10147 hgroup[1] = new HuffmanTreeGroup(kNumInsertAndCopyCodes, num_block_types[1]);
10148 hgroup[2] = new HuffmanTreeGroup(num_distance_codes, num_dist_htrees);
10149
10150 for (i = 0; i < 3; ++i) {
10151 hgroup[i].decode(br);
10152 }
10153
10154 context_map_slice = 0;
10155 dist_context_map_slice = 0;
10156 context_mode = context_modes[block_type[0]];
10157 context_lookup_offset1 = Context.lookupOffsets[context_mode];
10158 context_lookup_offset2 = Context.lookupOffsets[context_mode + 1];
10159 htree_command = hgroup[1].htrees[0];
10160
10161 while (meta_block_remaining_len > 0) {
10162 var cmd_code;
10163 var range_idx;
10164 var insert_code;
10165 var copy_code;
10166 var insert_length;
10167 var copy_length;
10168 var distance_code;
10169 var distance;
10170 var context;
10171 var j;
10172 var copy_dst;
10173
10174 br.readMoreInput();
10175
10176 if (block_length[1] === 0) {
10177 DecodeBlockType(num_block_types[1],
10178 block_type_trees, 1, block_type, block_type_rb,
10179 block_type_rb_index, br);
10180 block_length[1] = ReadBlockLength(block_len_trees, HUFFMAN_MAX_TABLE_SIZE, br);
10181 htree_command = hgroup[1].htrees[block_type[1]];
10182 }
10183 --block_length[1];
10184 cmd_code = ReadSymbol(hgroup[1].codes, htree_command, br);
10185 range_idx = cmd_code >> 6;
10186 if (range_idx >= 2) {
10187 range_idx -= 2;
10188 distance_code = -1;
10189 } else {
10190 distance_code = 0;
10191 }
10192 insert_code = Prefix.kInsertRangeLut[range_idx] + ((cmd_code >> 3) & 7);
10193 copy_code = Prefix.kCopyRangeLut[range_idx] + (cmd_code & 7);
10194 insert_length = Prefix.kInsertLengthPrefixCode[insert_code].offset +
10195 br.readBits(Prefix.kInsertLengthPrefixCode[insert_code].nbits);
10196 copy_length = Prefix.kCopyLengthPrefixCode[copy_code].offset +
10197 br.readBits(Prefix.kCopyLengthPrefixCode[copy_code].nbits);
10198 prev_byte1 = ringbuffer[pos-1 & ringbuffer_mask];
10199 prev_byte2 = ringbuffer[pos-2 & ringbuffer_mask];
10200 for (j = 0; j < insert_length; ++j) {
10201 br.readMoreInput();
10202
10203 if (block_length[0] === 0) {
10204 DecodeBlockType(num_block_types[0],
10205 block_type_trees, 0, block_type, block_type_rb,
10206 block_type_rb_index, br);
10207 block_length[0] = ReadBlockLength(block_len_trees, 0, br);
10208 context_offset = block_type[0] << kLiteralContextBits;
10209 context_map_slice = context_offset;
10210 context_mode = context_modes[block_type[0]];
10211 context_lookup_offset1 = Context.lookupOffsets[context_mode];
10212 context_lookup_offset2 = Context.lookupOffsets[context_mode + 1];
10213 }
10214 context = (Context.lookup[context_lookup_offset1 + prev_byte1] |
10215 Context.lookup[context_lookup_offset2 + prev_byte2]);
10216 literal_htree_index = context_map[context_map_slice + context];
10217 --block_length[0];
10218 prev_byte2 = prev_byte1;
10219 prev_byte1 = ReadSymbol(hgroup[0].codes, hgroup[0].htrees[literal_htree_index], br);
10220 ringbuffer[pos & ringbuffer_mask] = prev_byte1;
10221 if ((pos & ringbuffer_mask) === ringbuffer_mask) {
10222 output.write(ringbuffer, ringbuffer_size);
10223 }
10224 ++pos;
10225 }
10226 meta_block_remaining_len -= insert_length;
10227 if (meta_block_remaining_len <= 0) break;
10228
10229 if (distance_code < 0) {
10230 var context;
10231
10232 br.readMoreInput();
10233 if (block_length[2] === 0) {
10234 DecodeBlockType(num_block_types[2],
10235 block_type_trees, 2, block_type, block_type_rb,
10236 block_type_rb_index, br);
10237 block_length[2] = ReadBlockLength(block_len_trees, 2 * HUFFMAN_MAX_TABLE_SIZE, br);
10238 dist_context_offset = block_type[2] << kDistanceContextBits;
10239 dist_context_map_slice = dist_context_offset;
10240 }
10241 --block_length[2];
10242 context = (copy_length > 4 ? 3 : copy_length - 2) & 0xff;
10243 dist_htree_index = dist_context_map[dist_context_map_slice + context];
10244 distance_code = ReadSymbol(hgroup[2].codes, hgroup[2].htrees[dist_htree_index], br);
10245 if (distance_code >= num_direct_distance_codes) {
10246 var nbits;
10247 var postfix;
10248 var offset;
10249 distance_code -= num_direct_distance_codes;
10250 postfix = distance_code & distance_postfix_mask;
10251 distance_code >>= distance_postfix_bits;
10252 nbits = (distance_code >> 1) + 1;
10253 offset = ((2 + (distance_code & 1)) << nbits) - 4;
10254 distance_code = num_direct_distance_codes +
10255 ((offset + br.readBits(nbits)) <<
10256 distance_postfix_bits) + postfix;
10257 }
10258 }
10259
10260 /* Convert the distance code to the actual distance by possibly looking */
10261 /* up past distnaces from the ringbuffer. */
10262 distance = TranslateShortCodes(distance_code, dist_rb, dist_rb_idx);
10263 if (distance < 0) {
10264 throw new Error('[BrotliDecompress] invalid distance');
10265 }
10266
10267 if (pos < max_backward_distance &&
10268 max_distance !== max_backward_distance) {
10269 max_distance = pos;
10270 } else {
10271 max_distance = max_backward_distance;
10272 }
10273
10274 copy_dst = pos & ringbuffer_mask;
10275
10276 if (distance > max_distance) {
10277 if (copy_length >= BrotliDictionary.minDictionaryWordLength &&
10278 copy_length <= BrotliDictionary.maxDictionaryWordLength) {
10279 var offset = BrotliDictionary.offsetsByLength[copy_length];
10280 var word_id = distance - max_distance - 1;
10281 var shift = BrotliDictionary.sizeBitsByLength[copy_length];
10282 var mask = (1 << shift) - 1;
10283 var word_idx = word_id & mask;
10284 var transform_idx = word_id >> shift;
10285 offset += word_idx * copy_length;
10286 if (transform_idx < Transform.kNumTransforms) {
10287 var len = Transform.transformDictionaryWord(ringbuffer, copy_dst, offset, copy_length, transform_idx);
10288 copy_dst += len;
10289 pos += len;
10290 meta_block_remaining_len -= len;
10291 if (copy_dst >= ringbuffer_end) {
10292 output.write(ringbuffer, ringbuffer_size);
10293
10294 for (var _x = 0; _x < (copy_dst - ringbuffer_end); _x++)
10295 ringbuffer[_x] = ringbuffer[ringbuffer_end + _x];
10296 }
10297 } else {
10298 throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance +
10299 " len: " + copy_length + " bytes left: " + meta_block_remaining_len);
10300 }
10301 } else {
10302 throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance +
10303 " len: " + copy_length + " bytes left: " + meta_block_remaining_len);
10304 }
10305 } else {
10306 if (distance_code > 0) {
10307 dist_rb[dist_rb_idx & 3] = distance;
10308 ++dist_rb_idx;
10309 }
10310
10311 if (copy_length > meta_block_remaining_len) {
10312 throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance +
10313 " len: " + copy_length + " bytes left: " + meta_block_remaining_len);
10314 }
10315
10316 for (j = 0; j < copy_length; ++j) {
10317 ringbuffer[pos & ringbuffer_mask] = ringbuffer[(pos - distance) & ringbuffer_mask];
10318 if ((pos & ringbuffer_mask) === ringbuffer_mask) {
10319 output.write(ringbuffer, ringbuffer_size);
10320 }
10321 ++pos;
10322 --meta_block_remaining_len;
10323 }
10324 }
10325
10326 /* When we get here, we must have inserted at least one literal and */
10327 /* made a copy of at least length two, therefore accessing the last 2 */
10328 /* bytes is valid. */
10329 prev_byte1 = ringbuffer[(pos - 1) & ringbuffer_mask];
10330 prev_byte2 = ringbuffer[(pos - 2) & ringbuffer_mask];
10331 }
10332
10333 /* Protect pos from overflow, wrap it around at every GB of input data */
10334 pos &= 0x3fffffff;
10335 }
10336
10337 output.write(ringbuffer, pos & ringbuffer_mask);
10338}
10339
10340exports.BrotliDecompress = BrotliDecompress;
10341
10342BrotliDictionary.init();
10343
10344},{"./bit_reader":88,"./context":89,"./dictionary":93,"./huffman":94,"./prefix":95,"./streams":96,"./transform":97}],91:[function(require,module,exports){
10345var base64 = require('base64-js');
10346
10347/**
10348 * The normal dictionary-data.js is quite large, which makes it
10349 * unsuitable for browser usage. In order to make it smaller,
10350 * we read dictionary.bin, which is a compressed version of
10351 * the dictionary, and on initial load, Brotli decompresses
10352 * it's own dictionary. 😜
10353 */
10354exports.init = function() {
10355 var BrotliDecompressBuffer = require('./decode').BrotliDecompressBuffer;
10356 var compressed = base64.toByteArray(require('./dictionary.bin.js'));
10357 return BrotliDecompressBuffer(compressed);
10358};
10359
10360},{"./decode":90,"./dictionary.bin.js":92,"base64-js":87}],92:[function(require,module,exports){
10361module.exports="W5/fcQLn5gKf2XUbAiQ1XULX+TZz6ADToDsgqk6qVfeC0e4m6OO2wcQ1J76ZBVRV1fRkEsdu//62zQsFEZWSTCnMhcsQKlS2qOhuVYYMGCkV0fXWEoMFbESXrKEZ9wdUEsyw9g4bJlEt1Y6oVMxMRTEVbCIwZzJzboK5j8m4YH02qgXYhv1V+PM435sLVxyHJihaJREEhZGqL03txGFQLm76caGO/ovxKvzCby/3vMTtX/459f0igi7WutnKiMQ6wODSoRh/8Lx1V3Q99MvKtwB6bHdERYRY0hStJoMjNeTsNX7bn+Y7e4EQ3bf8xBc7L0BsyfFPK43dGSXpL6clYC/I328h54/VYrQ5i0648FgbGtl837svJ35L3Mot/+nPlNpWgKx1gGXQYqX6n+bbZ7wuyCHKcUok12Xjqub7NXZGzqBx0SD+uziNf87t7ve42jxSKQoW3nyxVrWIGlFShhCKxjpZZ5MeGna0+lBkk+kaN8F9qFBAFgEogyMBdcX/T1W/WnMOi/7ycWUQloEBKGeC48MkiwqJkJO+12eQiOFHMmck6q/IjWW3RZlany23TBm+cNr/84/oi5GGmGBZWrZ6j+zykVozz5fT/QH/Da6WTbZYYPynVNO7kxzuNN2kxKKWche5WveitPKAecB8YcAHz/+zXLjcLzkdDSktNIDwZE9J9X+tto43oJy65wApM3mDzYtCwX9lM+N5VR3kXYo0Z3t0TtXfgBFg7gU8oN0Dgl7fZlUbhNll+0uuohRVKjrEd8egrSndy5/Tgd2gqjA4CAVuC7ESUmL3DZoGnfhQV8uwnpi8EGvAVVsowNRxPudck7+oqAUDkwZopWqFnW1riss0t1z6iCISVKreYGNvQcXv+1L9+jbP8cd/dPUiqBso2q+7ZyFBvENCkkVr44iyPbtOoOoCecWsiuqMSML5lv+vN5MzUr+Dnh73G7Q1YnRYJVYXHRJaNAOByiaK6CusgFdBPE40r0rvqXV7tksKO2DrHYXBTv8P5ysqxEx8VDXUDDqkPH6NNOV/a2WH8zlkXRELSa8P+heNyJBBP7PgsG1EtWtNef6/i+lcayzQwQCsduidpbKfhWUDgAEmyhGu/zVTacI6RS0zTABrOYueemnVa19u9fT23N/Ta6RvTpof5DWygqreCqrDAgM4LID1+1T/taU6yTFVLqXOv+/MuQOFnaF8vLMKD7tKWDoBdALgxF33zQccCcdHx8fKIVdW69O7qHtXpeGr9jbbpFA+qRMWr5hp0s67FPc7HAiLV0g0/peZlW7hJPYEhZyhpSwahnf93/tZgfqZWXFdmdXBzqxGHLrQKxoAY6fRoBhgCRPmmGueYZ5JexTVDKUIXzkG/fqp/0U3hAgQdJ9zumutK6nqWbaqvm1pgu03IYR+G+8s0jDBBz8cApZFSBeuWasyqo2OMDKAZCozS+GWSvL/HsE9rHxooe17U3s/lTE+VZAk4j3dp6uIGaC0JMiqR5CUsabPyM0dOYDR7Ea7ip4USZlya38YfPtvrX/tBlhHilj55nZ1nfN24AOAi9BVtz/Mbn8AEDJCqJgsVUa6nQnSxv2Fs7l/NlCzpfYEjmPrNyib/+t0ei2eEMjvNhLkHCZlci4WhBe7ePZTmzYqlY9+1pxtS4GB+5lM1BHT9tS270EWUDYFq1I0yY/fNiAk4bk9yBgmef/f2k6AlYQZHsNFnW8wBQxCd68iWv7/35bXfz3JZmfGligWAKRjIs3IpzxQ27vAglHSiOzCYzJ9L9A1CdiyFvyR66ucA4jKifu5ehwER26yV7HjKqn5Mfozo7Coxxt8LWWPT47BeMxX8p0Pjb7hZn+6bw7z3Lw+7653j5sI8CLu5kThpMlj1m4c2ch3jGcP1FsT13vuK3qjecKTZk2kHcOZY40UX+qdaxstZqsqQqgXz+QGF99ZJLqr3VYu4aecl1Ab5GmqS8k/GV5b95zxQ5d4EfXUJ6kTS/CXF/aiqKDOT1T7Jz5z0PwDUcwr9clLN1OJGCiKfqvah+h3XzrBOiLOW8wvn8gW6qE8vPxi+Efv+UH55T7PQFVMh6cZ1pZQlzJpKZ7P7uWvwPGJ6DTlR6wbyj3Iv2HyefnRo/dv7dNx+qaa0N38iBsR++Uil7Wd4afwDNsrzDAK4fXZwvEY/jdKuIKXlfrQd2C39dW7ntnRbIp9OtGy9pPBn/V2ASoi/2UJZfS+xuGLH8bnLuPlzdTNS6zdyk8Dt/h6sfOW5myxh1f+zf3zZ3MX/mO9cQPp5pOx967ZA6/pqHvclNfnUFF+rq+Vd7alKr6KWPcIDhpn6v2K6NlUu6LrKo8b/pYpU/Gazfvtwhn7tEOUuXht5rUJdSf6sLjYf0VTYDgwJ81yaqKTUYej/tbHckSRb/HZicwGJqh1mAHB/IuNs9dc9yuvF3D5Xocm3elWFdq5oEy70dYFit79yaLiNjPj5UUcVmZUVhQEhW5V2Z6Cm4HVH/R8qlamRYwBileuh07CbEce3TXa2JmXWBf+ozt319psboobeZhVnwhMZzOeQJzhpTDbP71Tv8HuZxxUI/+ma3XW6DFDDs4+qmpERwHGBd2edxwUKlODRdUWZ/g0GOezrbzOZauFMai4QU6GVHV6aPNBiBndHSsV4IzpvUiiYyg6OyyrL4Dj5q/Lw3N5kAwftEVl9rNd7Jk5PDij2hTH6wIXnsyXkKePxbmHYgC8A6an5Fob/KH5GtC0l4eFso+VpxedtJHdHpNm+Bvy4C79yVOkrZsLrQ3OHCeB0Ra+kBIRldUGlDCEmq2RwXnfyh6Dz+alk6eftI2n6sastRrGwbwszBeDRS/Fa/KwRJkCzTsLr/JCs5hOPE/MPLYdZ1F1fv7D+VmysX6NpOC8aU9F4Qs6HvDyUy9PvFGDKZ/P5101TYHFl8pjj6wm/qyS75etZhhfg0UEL4OYmHk6m6dO192AzoIyPSV9QedDA4Ml23rRbqxMPMxf7FJnDc5FTElVS/PyqgePzmwVZ26NWhRDQ+oaT7ly7ell4s3DypS1s0g+tOr7XHrrkZj9+x/mJBttrLx98lFIaRZzHz4aC7r52/JQ4VjHahY2/YVXZn/QC2ztQb/sY3uRlyc5vQS8nLPGT/n27495i8HPA152z7Fh5aFpyn1GPJKHuPL8Iw94DuW3KjkURAWZXn4EQy89xiKEHN1mk/tkM4gYDBxwNoYvRfE6LFqsxWJtPrDGbsnLMap3Ka3MUoytW0cvieozOmdERmhcqzG+3HmZv2yZeiIeQTKGdRT4HHNxekm1tY+/n06rGmFleqLscSERzctTKM6G9P0Pc1RmVvrascIxaO1CQCiYPE15bD7c3xSeW7gXxYjgxcrUlcbIvO0r+Yplhx0kTt3qafDOmFyMjgGxXu73rddMHpV1wMubyAGcf/v5dLr5P72Ta9lBF+fzMJrMycwv+9vnU3ANIl1cH9tfW7af8u0/HG0vV47jNFXzFTtaha1xvze/s8KMtCYucXc1nzfd/MQydUXn/b72RBt5wO/3jRcMH9BdhC/yctKBIveRYPrNpDWqBsO8VMmP+WvRaOcA4zRMR1PvSoO92rS7pYEv+fZfEfTMzEdM+6X5tLlyxExhqLRkms5EuLovLfx66de5fL2/yX02H52FPVwahrPqmN/E0oVXnsCKhbi/yRxX83nRbUKWhzYceXOntfuXn51NszJ6MO73pQf5Pl4in3ec4JU8hF7ppV34+mm9r1LY0ee/i1O1wpd8+zfLztE0cqBxggiBi5Bu95v9l3r9r/U5hweLn+TbfxowrWDqdJauKd8+q/dH8sbPkc9ttuyO94f7/XK/nHX46MPFLEb5qQlNPvhJ50/59t9ft3LXu7uVaWaO2bDrDCnRSzZyWvFKxO1+vT8MwwunR3bX0CkfPjqb4K9O19tn5X50PvmYpEwHtiW9WtzuV/s76B1zvLLNkViNd8ySxIl/3orfqP90TyTGaf7/rx8jQzeHJXdmh/N6YDvbvmTBwCdxfEQ1NcL6wNMdSIXNq7b1EUzRy1/Axsyk5p22GMG1b+GxFgbHErZh92wuvco0AuOLXct9hvw2nw/LqIcDRRmJmmZzcgUa7JpM/WV/S9IUfbF56TL2orzqwebdRD8nIYNJ41D/hz37Fo11p2Y21wzPcn713qVGhqtevStYfGH4n69OEJtPvbbLYWvscDqc3Hgnu166+tAyLnxrX0Y5zoYjV++1sI7t5kMr02KT/+uwtkc+rZLOf/qn/s3nYCf13Dg8/sB2diJgjGqjQ+TLhxbzyue2Ob7X6/9lUwW7a+lbznHzOYy8LKW1C/uRPbQY3KW/0gO9LXunHLvPL97afba9bFtc9hmz7GAttjVYlCvQAiOwAk/gC5+hkLEs6tr3AZKxLJtOEwk2dLxTYWsIB/j/ToWtIWzo906FrSG8iaqqqqqqiIiIiAgzMzMzNz+AyK+01/zi8n8S+Y1MjoRaQ80WU/G8MBlO+53VPXANrWm4wzGUVZUjjBJZVdhpcfkjsmcWaO+UEldXi1e+zq+HOsCpknYshuh8pOLISJun7TN0EIGW2xTnlOImeecnoGW4raxe2G1T3HEvfYUYMhG+gAFOAwh5nK8mZhwJMmN7r224QVsNFvZ87Z0qatvknklyPDK3Hy45PgVKXji52Wen4d4PlFVVYGnNap+fSpFbK90rYnhUc6n91Q3AY9E0tJOFrcfZtm/491XbcG/jsViUPPX76qmeuiz+qY1Hk7/1VPM405zWVuoheLUimpWYdVzCmUdKHebMdzgrYrb8mL2eeLSnRWHdonfZa8RsOU9F37w+591l5FLYHiOqWeHtE/lWrBHcRKp3uhtr8yXm8LU/5ms+NM6ZKsqu90cFZ4o58+k4rdrtB97NADFbwmEG7lXqvirhOTOqU14xuUF2myIjURcPHrPOQ4lmM3PeMg7bUuk0nnZi67bXsU6H8lhqIo8TaOrEafCO1ARK9PjC0QOoq2BxmMdgYB9G/lIb9++fqNJ2s7BHGFyBNmZAR8J3KCo012ikaSP8BCrf6VI0X5xdnbhHIO+B5rbOyB54zXkzfObyJ4ecwxfqBJMLFc7m59rNcw7hoHnFZ0b00zee+gTqvjm61Pb4xn0kcDX4jvHM0rBXZypG3DCKnD/Waa/ZtHmtFPgO5eETx+k7RrVg3aSwm2YoNXnCs3XPQDhNn+Fia6IlOOuIG6VJH7TP6ava26ehKHQa2T4N0tcZ9dPCGo3ZdnNltsHQbeYt5vPnJezV/cAeNypdml1vCHI8M81nSRP5Qi2+mI8v/sxiZru9187nRtp3f/42NemcONa+4eVC3PCZzc88aZh851CqSsshe70uPxeN/dmYwlwb3trwMrN1Gq8jbnApcVDx/yDPeYs5/7r62tsQ6lLg+DiFXTEhzR9dHqv0iT4tgj825W+H3XiRUNUZT2kR9Ri0+lp+UM3iQtS8uOE23Ly4KYtvqH13jghUntJRAewuzNLDXp8RxdcaA3cMY6TO2IeSFRXezeWIjCqyhsUdMYuCgYTZSKpBype1zRfq8FshvfBPc6BAQWl7/QxIDp3VGo1J3vn42OEs3qznws+YLRXbymyB19a9XBx6n/owcyxlEYyFWCi+kG9F+EyD/4yn80+agaZ9P7ay2Dny99aK2o91FkfEOY8hBwyfi5uwx2y5SaHmG+oq/zl1FX/8irOf8Y3vAcX/6uLP6A6nvMO24edSGPjQc827Rw2atX+z2bKq0CmW9mOtYnr5/AfDa1ZfPaXnKtlWborup7QYx+Or2uWb+N3N//2+yDcXMqIJdf55xl7/vsj4WoPPlxLxtVrkJ4w/tTe3mLdATOOYwxcq52w5Wxz5MbPdVs5O8/lhfE7dPj0bIiPQ3QV0iqm4m3YX8hRfc6jQ3fWepevMqUDJd86Z4vwM40CWHnn+WphsGHfieF02D3tmZvpWD+kBpNCFcLnZhcmmrhpGzzbdA+sQ1ar18OJD87IOKOFoRNznaHPNHUfUNhvY1iU+uhvEvpKHaUn3qK3exVVyX4joipp3um7FmYJWmA+WbIDshRpbVRx5/nqstCgy87FGbfVB8yDGCqS+2qCsnRwnSAN6zgzxfdB2nBT/vZ4/6uxb6oH8b4VBRxiIB93wLa47hG3w2SL/2Z27yOXJFwZpSJaBYyvajA7vRRYNKqljXKpt/CFD/tSMr18DKKbwB0xggBePatl1nki0yvqW5zchlyZmJ0OTxJ3D+fsYJs/mxYN5+Le5oagtcl+YsVvy8kSjI2YGvGjvmpkRS9W2dtXqWnVuxUhURm1lKtou/hdEq19VBp9OjGvHEQSmrpuf2R24mXGheil8KeiANY8fW1VERUfBImb64j12caBZmRViZHbeVMjCrPDg9A90IXrtnsYCuZtRQ0PyrKDjBNOsPfKsg1pA02gHlVr0OXiFhtp6nJqXVzcbfM0KnzC3ggOENPE9VBdmHKN6LYaijb4wXxJn5A0FSDF5j+h1ooZx885Jt3ZKzO5n7Z5WfNEOtyyPqQEnn7WLv5Fis3PdgMshjF1FRydbNyeBbyKI1oN1TRVrVK7kgsb/zjX4NDPIRMctVeaxVB38Vh1x5KbeJbU138AM5KzmZu3uny0ErygxiJF7GVXUrPzFxrlx1uFdAaZFDN9cvIb74qD9tzBMo7L7WIEYK+sla1DVMHpF0F7b3+Y6S+zjvLeDMCpapmJo1weBWuxKF3rOocih1gun4BoJh1kWnV/Jmiq6uOhK3VfKxEHEkafjLgK3oujaPzY6SXg8phhL4TNR1xvJd1Wa0aYFfPUMLrNBDCh4AuGRTbtKMc6Z1Udj8evY/ZpCuMAUefdo69DZUngoqE1P9A3PJfOf7WixCEj+Y6t7fYeHbbxUAoFV3M89cCKfma3fc1+jKRe7MFWEbQqEfyzO2x/wrO2VYH7iYdQ9BkPyI8/3kXBpLaCpU7eC0Yv/am/tEDu7HZpqg0EvHo0nf/R/gRzUWy33/HXMJQeu1GylKmOkXzlCfGFruAcPPhaGqZOtu19zsJ1SO2Jz4Ztth5cBX6mRQwWmDwryG9FUMlZzNckMdK+IoMJv1rOWnBamS2w2KHiaPMPLC15hCZm4KTpoZyj4E2TqC/P6r7/EhnDMhKicZZ1ZwxuC7DPzDGs53q8gXaI9kFTK+2LTq7bhwsTbrMV8Rsfua5lMS0FwbTitUVnVa1yTb5IX51mmYnUcP9wPr8Ji1tiYJeJV9GZTrQhF7vvdU2OTU42ogJ9FDwhmycI2LIg++03C6scYhUyUuMV5tkw6kGUoL+mjNC38+wMdWNljn6tGPpRES7veqrSn5TRuv+dh6JVL/iDHU1db4c9WK3++OrH3PqziF916UMUKn8G67nN60GfWiHrXYhUG3yVWmyYak59NHj8t1smG4UDiWz2rPHNrKnN4Zo1LBbr2/eF9YZ0n0blx2nG4X+EKFxvS3W28JESD+FWk61VCD3z/URGHiJl++7TdBwkCj6tGOH3qDb0QqcOF9Kzpj0HUb/KyFW3Yhj2VMKJqGZleFBH7vqvf7WqLC3XMuHV8q8a4sTFuxUtkD/6JIBvKaVjv96ndgruKZ1k/BHzqf2K9fLk7HGXANyLDd1vxkK/i055pnzl+zw6zLnwXlVYVtfmacJgEpRP1hbGgrYPVN6v2lG+idQNGmwcKXu/8xEj/P6qe/sB2WmwNp6pp8jaISMkwdleFXYK55NHWLTTbutSUqjBfDGWo/Yg918qQ+8BRZSAHZbfuNZz2O0sov1Ue4CWlVg3rFhM3Kljj9ksGd/NUhk4nH+a5UN2+1i8+NM3vRNp7uQ6sqexSCukEVlVZriHNqFi5rLm9TMWa4qm3idJqppQACol2l4VSuvWLfta4JcXy3bROPNbXOgdOhG47LC0CwW/dMlSx4Jf17aEU3yA1x9p+Yc0jupXgcMuYNku64iYOkGToVDuJvlbEKlJqsmiHbvNrIVZEH+yFdF8DbleZ6iNiWwMqvtMp/mSpwx5KxRrT9p3MAPTHGtMbfvdFhyj9vhaKcn3At8Lc16Ai+vBcSp1ztXi7rCJZx/ql7TXcclq6Q76UeKWDy9boS0WHIjUuWhPG8LBmW5y2rhuTpM5vsLt+HOLh1Yf0DqXa9tsfC+kaKt2htA0ai/L2i7RKoNjEwztkmRU0GfgW1TxUvPFhg0V7DdfWJk5gfrccpYv+MA9M0dkGTLECeYwUixRzjRFdmjG7zdZIl3XKB9YliNKI31lfa7i2JG5C8Ss+rHe0D7Z696/V3DEAOWHnQ9yNahMUl5kENWS6pHKKp2D1BaSrrHdE1w2qNxIztpXgUIrF0bm15YML4b6V1k+GpNysTahKMVrrS85lTVo9OGJ96I47eAy5rYWpRf/mIzeoYU1DKaQCTUVwrhHeyNoDqHel+lLxr9WKzhSYw7vrR6+V5q0pfi2k3L1zqkubY6rrd9ZLvSuWNf0uqnkY+FpTvFzSW9Fp0b9l8JA7THV9eCi/PY/SCZIUYx3BU2alj7Cm3VV6eYpios4b6WuNOJdYXUK3zTqj5CVG2FqYM4Z7CuIU0qO05XR0d71FHM0YhZmJmTRfLlXEumN82BGtzdX0S19t1e+bUieK8zRmqpa4Qc5TSjifmaQsY2ETLjhI36gMR1+7qpjdXXHiceUekfBaucHShAOiFXmv3sNmGQyU5iVgnoocuonQXEPTFwslHtS8R+A47StI9wj0iSrtbi5rMysczFiImsQ+bdFClnFjjpXXwMy6O7qfjOr8Fb0a7ODItisjnn3EQO16+ypd1cwyaAW5Yzxz5QknfMO7643fXW/I9y3U2xH27Oapqr56Z/tEzglj6IbT6HEHjopiXqeRbe5mQQvxtcbDOVverN0ZgMdzqRYRjaXtMRd56Q4cZSmdPvZJdSrhJ1D9zNXPqAEqPIavPdfubt5oke2kmv0dztIszSv2VYuoyf1UuopbsYb+uX9h6WpwjpgtZ6fNNawNJ4q8O3CFoSbioAaOSZMx2GYaPYB+rEb6qjQiNRFQ76TvwNFVKD+BhH9VhcKGsXzmMI7BptU/CNWolM7YzROvpFAntsiWJp6eR2d3GarcYShVYSUqhmYOWj5E96NK2WvmYNTeY7Zs4RUEdv9h9QT4EseKt6LzLrqEOs3hxAY1MaNWpSa6zZx8F3YOVeCYMS88W+CYHDuWe4yoc6YK+djDuEOrBR5lvh0r+Q9uM88lrjx9x9AtgpQVNE8r+3O6Gvw59D+kBF/UMXyhliYUtPjmvXGY6Dk3x+kEOW+GtdMVC4EZTqoS/jmR0P0LS75DOc/w2vnri97M4SdbZ8qeU7gg8DVbERkU5geaMQO3mYrSYyAngeUQqrN0C0/vsFmcgWNXNeidsTAj7/4MncJR0caaBUpbLK1yBCBNRjEv6KvuVSdpPnEMJdsRRtqJ+U8tN1gXA4ePHc6ZT0eviI73UOJF0fEZ8YaneAQqQdGphNvwM4nIqPnXxV0xA0fnCT+oAhJuyw/q8jO0y8CjSteZExwBpIN6SvNp6A5G/abi6egeND/1GTguhuNjaUbbnSbGd4L8937Ezm34Eyi6n1maeOBxh3PI0jzJDf5mh/BsLD7F2GOKvlA/5gtvxI3/eV4sLfKW5Wy+oio+es/u6T8UU+nsofy57Icb/JlZHPFtCgd/x+bwt3ZT+xXTtTtTrGAb4QehC6X9G+8YT+ozcLxDsdCjsuOqwPFnrdLYaFc92Ui0m4fr39lYmlCaqTit7G6O/3kWDkgtXjNH4BiEm/+jegQnihOtfffn33WxsFjhfMd48HT+f6o6X65j7XR8WLSHMFkxbvOYsrRsF1bowDuSQ18Mkxk4qz2zoGPL5fu9h2Hqmt1asl3Q3Yu3szOc+spiCmX4AETBM3pLoTYSp3sVxahyhL8eC4mPN9k2x3o0xkiixIzM3CZFzf5oR4mecQ5+ax2wCah3/crmnHoqR0+KMaOPxRif1oEFRFOO/kTPPmtww+NfMXxEK6gn6iU32U6fFruIz8Q4WgljtnaCVTBgWx7diUdshC9ZEa5yKpRBBeW12r/iNc/+EgNqmhswNB8SBoihHXeDF7rrWDLcmt3V8GYYN7pXRy4DZjj4DJuUBL5iC3DQAaoo4vkftqVTYRGLS3mHZ7gdmdTTqbgNN/PTdTCOTgXolc88MhXAEUMdX0iy1JMuk5wLsgeu0QUYlz2S4skTWwJz6pOm/8ihrmgGfFgri+ZWUK2gAPHgbWa8jaocdSuM4FJYoKicYX/ZSENkg9Q1ZzJfwScfVnR2DegOGwCvmogaWJCLQepv9WNlU6QgsmOwICquU28Mlk3d9W5E81lU/5Ez0LcX6lwKMWDNluNKfBDUy/phJgBcMnfkh9iRxrdOzgs08JdPB85Lwo+GUSb4t3nC+0byqMZtO2fQJ4U2zGIr49t/28qmmGv2RanDD7a3FEcdtutkW8twwwlUSpb8QalodddbBfNHKDQ828BdE7OBgFdiKYohLawFYqpybQoxATZrheLhdI7+0Zlu9Q1myRcd15r9UIm8K2LGJxqTegntqNVMKnf1a8zQiyUR1rxoqjiFxeHxqFcYUTHfDu7rhbWng6qOxOsI+5A1p9mRyEPdVkTlE24vY54W7bWc6jMgZvNXdfC9/9q7408KDsbdL7Utz7QFSDetz2picArzrdpL8OaCHC9V26RroemtDZ5yNM/KGkWMyTmfnInEvwtSD23UcFcjhaE3VKzkoaEMKGBft4XbIO6forTY1lmGQwVmKicBCiArDzE+1oIxE08fWeviIOD5TznqH+OoHadvoOP20drMPe5Irg3XBQziW2XDuHYzjqQQ4wySssjXUs5H+t3FWYMHppUnBHMx/nYIT5d7OmjDbgD9F6na3m4l7KdkeSO3kTEPXafiWinogag7b52taiZhL1TSvBFmEZafFq2H8khQaZXuitCewT5FBgVtPK0j4xUHPfUz3Q28eac1Z139DAP23dgki94EC8vbDPTQC97HPPSWjUNG5tWKMsaxAEMKC0665Xvo1Ntd07wCLNf8Q56mrEPVpCxlIMVlQlWRxM3oAfpgIc+8KC3rEXUog5g06vt7zgXY8grH7hhwVSaeuvC06YYRAwpbyk/Unzj9hLEZNs2oxPQB9yc+GnL6zTgq7rI++KDJwX2SP8Sd6YzTuw5lV/kU6eQxRD12omfQAW6caTR4LikYkBB1CMOrvgRr/VY75+NSB40Cni6bADAtaK+vyxVWpf9NeKJxN2KYQ8Q2xPB3K1s7fuhvWbr2XpgW044VD6DRs0qXoqKf1NFsaGvKJc47leUV3pppP/5VTKFhaGuol4Esfjf5zyCyUHmHthChcYh4hYLQF+AFWsuq4t0wJyWgdwQVOZiV0efRHPoK5+E1vjz9wTJmVkITC9oEstAsyZSgE/dbicwKr89YUxKZI+owD205Tm5lnnmDRuP/JnzxX3gMtlrcX0UesZdxyQqYQuEW4R51vmQ5xOZteUd8SJruMlTUzhtVw/Nq7eUBcqN2/HVotgfngif60yKEtoUx3WYOZlVJuJOh8u59fzSDPFYtQgqDUAGyGhQOAvKroXMcOYY0qjnStJR/G3aP+Jt1sLVlGV8POwr/6OGsqetnyF3TmTqZjENfnXh51oxe9qVUw2M78EzAJ+IM8lZ1MBPQ9ZWSVc4J3mWSrLKrMHReA5qdGoz0ODRsaA+vwxXA2cAM4qlfzBJA6581m4hzxItQw5dxrrBL3Y6kCbUcFxo1S8jyV44q//+7ASNNudZ6xeaNOSIUffqMn4A9lIjFctYn2gpEPAb3f7p3iIBN8H14FUGQ9ct2hPsL+cEsTgUrR47uJVN4n4wt/wgfwwHuOnLd4yobkofy8JvxSQTA7rMpDIc608SlZFJfZYcmbT0tAHpPE8MrtQ42siTUNWxqvWZOmvu9f0JPoQmg+6l7sZWwyfi6PXkxJnwBraUG0MYG4zYHQz3igy/XsFkx5tNQxw43qvI9dU3f0DdhOUlHKjmi1VAr2Kiy0HZwD8VeEbhh0OiDdMYspolQsYdSwjCcjeowIXNZVUPmL2wwIkYhmXKhGozdCJ4lRKbsf4NBh/XnQoS92NJEWOVOFs2YhN8c5QZFeK0pRdAG40hqvLbmoSA8xQmzOOEc7wLcme9JOsjPCEgpCwUs9E2DohMHRhUeyGIN6TFvrbny8nDuilsDpzrH5mS76APoIEJmItS67sQJ+nfwddzmjPxcBEBBCw0kWDwd0EZCkNeOD7NNQhtBm7KHL9mRxj6U1yWU2puzlIDtpYxdH4ZPeXBJkTGAJfUr/oTCz/iypY6uXaR2V1doPxJYlrw2ghH0D5gbrhFcIxzYwi4a/4hqVdf2DdxBp6vGYDjavxMAAoy+1+3aiO6S3W/QAKNVXagDtvsNtx7Ks+HKgo6U21B+QSZgIogV5Bt+BnXisdVfy9VyXV+2P5fMuvdpAjM1o/K9Z+XnE4EOCrue+kcdYHqAQ0/Y/OmNlQ6OI33jH/uD1RalPaHpJAm2av0/xtpqdXVKNDrc9F2izo23Wu7firgbURFDNX9eGGeYBhiypyXZft2j3hTvzE6PMWKsod//rEILDkzBXfi7xh0eFkfb3/1zzPK/PI5Nk3FbZyTl4mq5BfBoVoqiPHO4Q4QKZAlrQ3MdNfi3oxIjvsM3kAFv3fdufurqYR3PSwX/mpGy/GFI/B2MNPiNdOppWVbs/gjF3YH+QA9jMhlAbhvasAHstB0IJew09iAkmXHl1/TEj+jvHOpOGrPRQXbPADM+Ig2/OEcUcpgPTItMtW4DdqgfYVI/+4hAFWYjUGpOP/UwNuB7+BbKOcALbjobdgzeBQfjgNSp2GOpxzGLj70Vvq5cw2AoYENwKLUtJUX8sGRox4dVa/TN4xKwaKcl9XawQR/uNus700Hf17pyNnezrUgaY9e4MADhEDBpsJT6y1gDJs1q6wlwGhuUzGR7C8kgpjPyHWwsvrf3yn1zJEIRa5eSxoLAZOCR9xbuztxFRJW9ZmMYfCFJ0evm9F2fVnuje92Rc4Pl6A8bluN8MZyyJGZ0+sNSb//DvAFxC2BqlEsFwccWeAl6CyBcQV1bx4mQMBP1Jxqk1EUADNLeieS2dUFbQ/c/kvwItbZ7tx0st16viqd53WsRmPTKv2AD8CUnhtPWg5aUegNpsYgasaw2+EVooeNKmrW3MFtj76bYHJm5K9gpAXZXsE5U8DM8XmVOSJ1F1WnLy6nQup+jx52bAb+rCq6y9WXl2B2oZDhfDkW7H3oYfT/4xx5VncBuxMXP2lNfhUVQjSSzSRbuZFE4vFawlzveXxaYKVs8LpvAb8IRYF3ZHiRnm0ADeNPWocwxSzNseG7NrSEVZoHdKWqaGEBz1N8Pt7kFbqh3LYmAbm9i1IChIpLpM5AS6mr6OAPHMwwznVy61YpBYX8xZDN/a+lt7n+x5j4bNOVteZ8lj3hpAHSx1VR8vZHec4AHO9XFCdjZ9eRkSV65ljMmZVzaej2qFn/qt1lvWzNZEfHxK3qOJrHL6crr0CRzMox5f2e8ALBB4UGFZKA3tN6F6IXd32GTJXGQ7DTi9j/dNcLF9jCbDcWGKxoKTYblIwbLDReL00LRcDPMcQuXLMh5YzgtfjkFK1DP1iDzzYYVZz5M/kWYRlRpig1htVRjVCknm+h1M5LiEDXOyHREhvzCGpFZjHS0RsK27o2avgdilrJkalWqPW3D9gmwV37HKmfM3F8YZj2ar+vHFvf3B8CRoH4kDHIK9mrAg+owiEwNjjd9V+FsQKYR8czJrUkf7Qoi2YaW6EVDZp5zYlqiYtuXOTHk4fAcZ7qBbdLDiJq0WNV1l2+Hntk1mMWvxrYmc8kIx8G3rW36J6Ra4lLrTOCgiOihmow+YnzUT19jbV2B3RWqSHyxkhmgsBqMYWvOcUom1jDQ436+fcbu3xf2bbeqU/ca+C4DOKE+e3qvmeMqW3AxejfzBRFVcwVYPq4L0APSWWoJu+5UYX4qg5U6YTioqQGPG9XrnuZ/BkxuYpe6Li87+18EskyQW/uA+uk2rpHpr6hut2TlVbKgWkFpx+AZffweiw2+VittkEyf/ifinS/0ItRL2Jq3tQOcxPaWO2xrG68GdFoUpZgFXaP2wYVtRc6xYCfI1CaBqyWpg4bx8OHBQwsV4XWMibZZ0LYjWEy2IxQ1mZrf1/UNbYCJplWu3nZ4WpodIGVA05d+RWSS+ET9tH3RfGGmNI1cIY7evZZq7o+a0bjjygpmR3mVfalkT/SZGT27Q8QGalwGlDOS9VHCyFAIL0a1Q7JiW3saz9gqY8lqKynFrPCzxkU4SIfLc9VfCI5edgRhDXs0edO992nhTKHriREP1NJC6SROMgQ0xO5kNNZOhMOIT99AUElbxqeZF8A3xrfDJsWtDnUenAHdYWSwAbYjFqQZ+D5gi3hNK8CSxU9i6f6ClL9IGlj1OPMQAsr84YG6ijsJpCaGWj75c3yOZKBB9mNpQNPUKkK0D6wgLH8MGoyRxTX6Y05Q4AnYNXMZwXM4eij/9WpsM/9CoRnFQXGR6MEaY+FXvXEO3RO0JaStk6OXuHVATHJE+1W+TU3bSZ2ksMtqjO0zfSJCdBv7y2d8DMx6TfVme3q0ZpTKMMu4YL/t7ciTNtdDkwPogh3Cnjx7qk08SHwf+dksZ7M2vCOlfsF0hQ6J4ehPCaHTNrM/zBSOqD83dBEBCW/F/LEmeh0nOHd7oVl3/Qo/9GUDkkbj7yz+9cvvu+dDAtx8NzCDTP4iKdZvk9MWiizvtILLepysflSvTLFBZ37RLwiriqyRxYv/zrgFd/9XVHh/OmzBvDX4mitMR/lUavs2Vx6cR94lzAkplm3IRNy4TFfu47tuYs9EQPIPVta4P64tV+sZ7n3ued3cgEx2YK+QL5+xms6osk8qQbTyuKVGdaX9FQqk6qfDnT5ykxk0VK7KZ62b6DNDUfQlqGHxSMKv1P0XN5BqMeKG1P4Wp5QfZDUCEldppoX0U6ss2jIko2XpURKCIhfaOqLPfShdtS37ZrT+jFRSH2xYVV1rmT/MBtRQhxiO4MQ3iAGlaZi+9PWBEIXOVnu9jN1f921lWLZky9bqbM3J2MAAI9jmuAx3gyoEUa6P2ivs0EeNv/OR+AX6q5SW6l5HaoFuS6jr6yg9limu+P0KYKzfMXWcQSfTXzpOzKEKpwI3YGXZpSSy2LTlMgfmFA3CF6R5c9xWEtRuCg2ZPUQ2Nb6dRFTNd4TfGHrnEWSKHPuRyiJSDAZ+KX0VxmSHjGPbQTLVpqixia2uyhQ394gBMt7C3ZAmxn/DJS+l1fBsAo2Eir/C0jG9csd4+/tp12pPc/BVJGaK9mfvr7M/CeztrmCO5qY06Edi4xAGtiEhnWAbzLy2VEyazE1J5nPmgU4RpW4Sa0TnOT6w5lgt3/tMpROigHHmexBGAMY0mdcDbDxWIz41NgdD6oxgHsJRgr5RnT6wZAkTOcStU4NMOQNemSO7gxGahdEsC+NRVGxMUhQmmM0llWRbbmFGHzEqLM4Iw0H7577Kyo+Zf+2cUFIOw93gEY171vQaM0HLwpjpdRR6Jz7V0ckE7XzYJ0TmY9znLdzkva0vNrAGGT5SUZ5uaHDkcGvI0ySpwkasEgZPMseYcu85w8HPdSNi+4T6A83iAwDbxgeFcB1ZM2iGXzFcEOUlYVrEckaOyodfvaYSQ7GuB4ISE0nYJc15X/1ciDTPbPCgYJK55VkEor4LvzL9S2WDy4xj+6FOqVyTAC2ZNowheeeSI5hA/02l8UYkv4nk9iaVn+kCVEUstgk5Hyq+gJm6R9vG3rhuM904he/hFmNQaUIATB1y3vw+OmxP4X5Yi6A5I5jJufHCjF9+AGNwnEllZjUco6XhsO5T5+R3yxz5yLVOnAn0zuS+6zdj0nTJbEZCbXJdtpfYZfCeCOqJHoE2vPPFS6eRLjIJlG69X93nfR0mxSFXzp1Zc0lt/VafDaImhUMtbnqWVb9M4nGNQLN68BHP7AR8Il9dkcxzmBv8PCZlw9guY0lurbBsmNYlwJZsA/B15/HfkbjbwPddaVecls/elmDHNW2r4crAx43feNkfRwsaNq/yyJ0d/p5hZ6AZajz7DBfUok0ZU62gCzz7x8eVfJTKA8IWn45vINLSM1q+HF9CV9qF3zP6Ml21kPPL3CXzkuYUlnSqT+Ij4tI/od5KwIs+tDajDs64owN7tOAd6eucGz+KfO26iNcBFpbWA5732bBNWO4kHNpr9D955L61bvHCF/mwSrz6eQaDjfDEANqGMkFc+NGxpKZzCD2sj/JrHd+zlPQ8Iz7Q+2JVIiVCuCKoK/hlAEHzvk/Piq3mRL1rT/fEh9hoT5GJmeYswg1otiKydizJ/fS2SeKHVu6Z3JEHjiW8NaTQgP5xdBli8nC57XiN9hrquBu99hn9zqwo92+PM2JXtpeVZS0PdqR5mDyDreMMtEws+CpwaRyyzoYtfcvt9PJIW0fJVNNi/FFyRsea7peLvJrL+5b4GOXJ8tAr+ATk9f8KmiIsRhqRy0vFzwRV3Z5dZ3QqIU8JQ/uQpkJbjMUMFj2F9sCFeaBjI4+fL/oN3+LQgjI4zuAfQ+3IPIPFQBccf0clJpsfpnBxD84atwtupkGqKvrH7cGNl/QcWcSi6wcVDML6ljOgYbo+2BOAWNNjlUBPiyitUAwbnhFvLbnqw42kR3Yp2kv2dMeDdcGOX5kT4S6M44KHEB/SpCfl7xgsUvs+JNY9G3O2X/6FEt9FyAn57lrbiu+tl83sCymSvq9eZbe9mchL7MTf/Ta78e80zSf0hYY5eUU7+ff14jv7Xy8qjzfzzzvaJnrIdvFb5BLWKcWGy5/w7+vV2cvIfwHqdTB+RuJK5oj9mbt0Hy94AmjMjjwYNZlNS6uiyxNnwNyt3gdreLb64p/3+08nXkb92LTkkRgFOwk1oGEVllcOj5lv1hfAZywDows0944U8vUFw+A/nuVq/UCygsrmWIBnHyU01d0XJPwriEOvx/ISK6Pk4y2w0gmojZs7lU8TtakBAdne4v/aNxmMpK4VcGMp7si0yqsiolXRuOi1Z1P7SqD3Zmp0CWcyK4Ubmp2SXiXuI5nGLCieFHKHNRIlcY3Pys2dwMTYCaqlyWSITwr2oGXvyU3h1Pf8eQ3w1bnD7ilocVjYDkcXR3Oo1BXgMLTUjNw2xMVwjtp99NhSVc5aIWrDQT5DHPKtCtheBP4zHcw4dz2eRdTMamhlHhtfgqJJHI7NGDUw1XL8vsSeSHyKqDtqoAmrQqsYwvwi7HW3ojWyhIa5oz5xJTaq14NAzFLjVLR12rRNUQ6xohDnrWFb5bG9yf8aCD8d5phoackcNJp+Dw3Due3RM+5Rid7EuIgsnwgpX0rUWh/nqPtByMhMZZ69NpgvRTKZ62ViZ+Q7Dp5r4K0d7EfJuiy06KuIYauRh5Ecrhdt2QpTS1k1AscEHvapNbU3HL1F2TFyR33Wxb5MvH5iZsrn3SDcsxlnnshO8PLwmdGN+paWnQuORtZGX37uhFT64SeuPsx8UOokY6ON85WdQ1dki5zErsJGazcBOddWJEKqNPiJpsMD1GrVLrVY+AOdPWQneTyyP1hRX/lMM4ZogGGOhYuAdr7F/DOiAoc++cn5vlf0zkMUJ40Z1rlgv9BelPqVOpxKeOpzKdF8maK+1Vv23MO9k/8+qpLoxrIGH2EDQlnGmH8CD31G8QqlyQIcpmR5bwmSVw9/Ns6IHgulCRehvZ/+VrM60Cu/r3AontFfrljew74skYe2uyn7JKQtFQBQRJ9ryGic/zQOsbS4scUBctA8cPToQ3x6ZBQu6DPu5m1bnCtP8TllLYA0UTQNVqza5nfew3Mopy1GPUwG5jsl0OVXniPmAcmLqO5HG8Hv3nSLecE9oOjPDXcsTxoCBxYyzBdj4wmnyEV4kvFDunipS8SSkvdaMnTBN9brHUR8xdmmEAp/Pdqk9uextp1t+JrtXwpN/MG2w/qhRMpSNxQ1uhg/kKO30eQ/FyHUDkWHT8V6gGRU4DhDMxZu7xXij9Ui6jlpWmQCqJg3FkOTq3WKneCRYZxBXMNAVLQgHXSCGSqNdjebY94oyIpVjMYehAiFx/tqzBXFHZaL5PeeD74rW5OysFoUXY8sebUZleFTUa/+zBKVTFDopTReXNuZq47QjkWnxjirCommO4L/GrFtVV21EpMyw8wyThL5Y59d88xtlx1g1ttSICDwnof6lt/6zliPzgVUL8jWBjC0o2D6Kg+jNuThkAlaDJsq/AG2aKA//A76avw2KNqtv223P+Wq3StRDDNKFFgtsFukYt1GFDWooFVXitaNhb3RCyJi4cMeNjROiPEDb4k+G3+hD8tsg+5hhmSc/8t2JTSwYoCzAI75doq8QTHe+E/Tw0RQSUDlU+6uBeNN3h6jJGX/mH8oj0i3caCNsjvTnoh73BtyZpsflHLq6AfwJNCDX4S98h4+pCOhGKDhV3rtkKHMa3EG4J9y8zFWI4UsfNzC/Rl5midNn7gwoN9j23HGCQQ+OAZpTTPMdiVow740gIyuEtd0qVxMyNXhHcnuXRKdw5wDUSL358ktjMXmAkvIB73BLa1vfF9BAUZInPYJiwxqFWQQBVk7gQH4ojfUQ/KEjn+A/WR6EEe4CtbpoLe1mzHkajgTIoE0SLDHVauKhrq12zrAXBGbPPWKCt4DGedq3JyGRbmPFW32bE7T20+73BatV/qQhhBWfWBFHfhYWXjALts38FemnoT+9bn1jDBMcUMmYgSc0e7GQjv2MUBwLU8ionCpgV+Qrhg7iUIfUY6JFxR0Y+ZTCPM+rVuq0GNLyJXX6nrUTt8HzFBRY1E/FIm2EeVA9NcXrj7S6YYIChVQCWr/m2fYUjC4j0XLkzZ8GCSLfmkW3PB/xq+nlXsKVBOj7vTvqKCOMq7Ztqr3cQ+N8gBnPaAps+oGwWOkbuxnRYj/x/WjiDclVrs22xMK4qArE1Ztk1456kiJriw6abkNeRHogaPRBgbgF9Z8i/tbzWELN4CvbqtrqV9TtGSnmPS2F9kqOIBaazHYaJ9bi3AoDBvlZasMluxt0BDXfhp02Jn411aVt6S4TUB8ZgFDkI6TP6gwPY85w+oUQSsjIeXVminrwIdK2ZAawb8Se6XOJbOaliQxHSrnAeONDLuCnFejIbp4YDtBcQCwMsYiRZfHefuEJqJcwKTTJ8sx5hjHmJI1sPFHOr6W9AhZ2NAod38mnLQk1gOz2LCAohoQbgMbUK9RMEA3LkiF7Sr9tLZp6lkciIGhE2V546w3Mam53VtVkGbB9w0Yk2XiRnCmbpxmHr2k4eSC0RuNbjNsUfDIfc8DZvRvgUDe1IlKdZTzcT4ZGEb53dp8VtsoZlyXzLHOdAbsp1LPTVaHvLA0GYDFMbAW/WUBfUAdHwqLFAV+3uHvYWrCfhUOR2i89qvCBoOb48usAGdcF2M4aKn79k/43WzBZ+xR1L0uZfia70XP9soQReeuhZiUnXFDG1T8/OXNmssTSnYO+3kVLAgeiY719uDwL9FQycgLPessNihMZbAKG7qwPZyG11G1+ZA3jAX2yddpYfmaKBlmfcK/V0mwIRUDC0nJSOPUl2KB8h13F4dlVZiRhdGY5farwN+f9hEb1cRi41ZcGDn6Xe9MMSTOY81ULJyXIHSWFIQHstVYLiJEiUjktlHiGjntN5/btB8Fu+vp28zl2fZXN+dJDyN6EXhS+0yzqpl/LSJNEUVxmu7BsNdjAY0jVsAhkNuuY0E1G48ej25mSt+00yPbQ4SRCVkIwb6ISvYtmJRPz9Zt5dk76blf+lJwAPH5KDF+vHAmACLoCdG2Adii6dOHnNJnTmZtoOGO8Q1jy1veMw6gbLFToQmfJa7nT7Al89mRbRkZZQxJTKgK5Kc9INzmTJFp0tpAPzNmyL/F08bX3nhCumM/cR/2RPn9emZ3VljokttZD1zVWXlUIqEU7SLk5I0lFRU0AcENXBYazNaVzsVHA/sD3o9hm42wbHIRb/BBQTKzAi8s3+bMtpOOZgLdQzCYPfX3UUxKd1WYVkGH7lh/RBBgMZZwXzU9+GYxdBqlGs0LP+DZ5g2BWNh6FAcR944B+K/JTWI3t9YyVyRhlP4CCoUk/mmF7+r2pilVBjxXBHFaBfBtr9hbVn2zDuI0kEOG3kBx8CGdPOjX1ph1POOZJUO1JEGG0jzUy2tK4X0CgVNYhmkqqQysRNtKuPdCJqK3WW57kaV17vXgiyPrl4KEEWgiGF1euI4QkSFHFf0TDroQiLNKJiLbdhH0YBhriRNCHPxSqJmNNoketaioohqMglh6wLtEGWSM1EZbQg72h0UJAIPVFCAJOThpQGGdKfFovcwEeiBuZHN2Ob4uVM7+gwZLz1D9E7ta4RmMZ24OBBAg7Eh6dLXGofZ4U2TFOCQMKjwhVckjrydRS+YaqCw1kYt6UexuzbNEDyYLTZnrY1PzsHZJT4U+awO2xlqTSYu6n/U29O2wPXgGOEKDMSq+zTUtyc8+6iLp0ivav4FKx+xxVy4FxhIF/pucVDqpsVe2jFOfdZhTzLz2QjtzvsTCvDPU7bzDH2eXVKUV9TZ+qFtaSSxnYgYdXKwVreIgvWhT9eGDB2OvnWyPLfIIIfNnfIxU8nW7MbcH05nhlsYtaW9EZRsxWcKdEqInq1DiZPKCz7iGmAU9/ccnnQud2pNgIGFYOTAWjhIrd63aPDgfj8/sdlD4l+UTlcxTI9jbaMqqN0gQxSHs60IAcW3cH4p3V1aSciTKB29L1tz2eUQhRiTgTvmqc+sGtBNh4ky0mQJGsdycBREP+fAaSs1EREDVo5gvgi5+aCN7NECw30owbCc1mSpjiahyNVwJd1jiGgzSwfTpzf2c5XJvG/g1n0fH88KHNnf+u7ZiRMlXueSIsloJBUtW9ezvsx9grfsX/FNxnbxU1Lvg0hLxixypHKGFAaPu0xCD8oDTeFSyfRT6s8109GMUZL8m2xXp8X2dpPCWWdX84iga4BrTlOfqox4shqEgh/Ht4qRst52cA1xOIUuOxgfUivp6v5f8IVyaryEdpVk72ERAwdT4aoY1usBgmP+0m06Q216H/nubtNYxHaOIYjcach3A8Ez/zc0KcShhel0HCYjFsA0FjYqyJ5ZUH1aZw3+zWC0hLpM6GDfcAdn9fq2orPmZbW6XXrf+Krc9RtvII5jeD3dFoT1KwZJwxfUMvc5KLfn8rROW23Jw89sJ2a5dpB3qWDUBWF2iX8OCuKprHosJ2mflBR+Wqs86VvgI/XMnsqb97+VlKdPVysczPj8Jhzf+WCvGBHijAqYlavbF60soMWlHbvKT+ScvhprgeTln51xX0sF+Eadc/l2s2a5BgkVbHYyz0E85p0LstqH+gEGiR84nBRRFIn8hLSZrGwqjZ3E29cuGi+5Z5bp7EM8MWFa9ssS/vy4VrDfECSv7DSU84DaP0sXI3Ap4lWznQ65nQoTKRWU30gd7Nn8ZowUvGIx4aqyXGwmA/PB4qN8msJUODezUHEl0VP9uo+cZ8vPFodSIB4C7lQYjEFj8yu49C2KIV3qxMFYTevG8KqAr0TPlkbzHHnTpDpvpzziAiNFh8xiT7C/TiyH0EguUw4vxAgpnE27WIypV+uFN2zW7xniF/n75trs9IJ5amB1zXXZ1LFkJ6GbS/dFokzl4cc2mamVwhL4XU0Av5gDWAl+aEWhAP7t2VIwU+EpvfOPDcLASX7H7lZpXA2XQfbSlD4qU18NffNPoAKMNSccBfO9YVVgmlW4RydBqfHAV7+hrZ84WJGho6bNT0YMhxxLdOx/dwGj0oyak9aAkNJ8lRJzUuA8sR+fPyiyTgUHio5+Pp+YaKlHrhR41jY5NESPS3x+zTMe0S2HnLOKCOQPpdxKyviBvdHrCDRqO+l96HhhNBLXWv4yEMuEUYo8kXnYJM8oIgVM4XJ+xXOev4YbWeqsvgq0lmw4/PiYr9sYLt+W5EAuYSFnJEan8CwJwbtASBfLBBpJZiRPor/aCJBZsM+MhvS7ZepyHvU8m5WSmaZnxuLts8ojl6KkS8oSAHkq5GWlCB/NgJ5W3rO2Cj1MK7ahxsCrbTT3a0V/QQH+sErxV4XUWDHx0kkFy25bPmBMBQ6BU3HoHhhYcJB9JhP6NXUWKxnE0raXHB6U9KHpWdQCQI72qevp5fMzcm+AvC85rsynVQhruDA9fp9COe7N56cg1UKGSas89vrN+WlGLYTwi5W+0xYdKEGtGCeNJwXKDU0XqU5uQYnWsMwTENLGtbQMvoGjIFIEMzCRal4rnBAg7D/CSn8MsCvS+FDJJAzoiioJEhZJgAp9n2+1Yznr7H+6eT4YkJ9Mpj60ImcW4i4iHDLn9RydB8dx3QYm3rsX6n4VRrZDsYK6DCGwkwd5n3/INFEpk16fYpP6JtMQpqEMzcOfQGAHXBTEGzuLJ03GYQL9bmV2/7ExDlRf+Uvf1sM2frRtCWmal12pMgtonvSCtR4n1CLUZRdTHDHP1Otwqd+rcdlavnKjUB/OYXQHUJzpNyFoKpQK+2OgrEKpGyIgIBgn2y9QHnTJihZOpEvOKIoHAMGAXHmj21Lym39Mbiow4IF+77xNuewziNVBxr6KD5e+9HzZSBIlUa/AmsDFJFXeyrQakR3FwowTGcADJHcEfhGkXYNGSYo4dh4bxwLM+28xjiqkdn0/3R4UEkvcBrBfn/SzBc1XhKM2VPlJgKSorjDac96V2UnQYXl1/yZPT4DVelgO+soMjexXwYO58VLl5xInQUZI8jc3H2CPnCNb9X05nOxIy4MlecasTqGK6s2az4RjpF2cQP2G28R+7wDPsZDZC/kWtjdoHC7SpdPmqQrUAhMwKVuxCmYTiD9q/O7GHtZvPSN0CAUQN/rymXZNniYLlJDE70bsk6Xxsh4kDOdxe7A2wo7P9F5YvqqRDI6brf79yPCSp4I0jVoO4YnLYtX5nzspR5WB4AKOYtR1ujXbOQpPyYDvfRE3FN5zw0i7reehdi7yV0YDRKRllGCGRk5Yz+Uv1fYl2ZwrnGsqsjgAVo0xEUba8ohjaNMJNwTwZA/wBDWFSCpg1eUH8MYL2zdioxRTqgGQrDZxQyNzyBJPXZF0+oxITJAbj7oNC5JwgDMUJaM5GqlGCWc//KCIrI+aclEe4IA0uzv7cuj6GCdaJONpi13O544vbtIHBF+A+JeDFUQNy61Gki3rtyQ4aUywn6ru314/dkGiP8Iwjo0J/2Txs49ZkwEl4mx+iYUUO55I6pJzU4P+7RRs+DXZkyKUYZqVWrPF4I94m4Wx1tXeE74o9GuX977yvJ/jkdak8+AmoHVjI15V+WwBdARFV2IPirJgVMdsg1Pez2VNHqa7EHWdTkl3XTcyjG9BiueWFvQfXI8aWSkuuRmqi/HUuzqyvLJfNfs0txMqldYYflWB1BS31WkuPJGGwXUCpjiQSktkuBMWwHjSkQxeehqw1Kgz0Trzm7QbtgxiEPDVmWCNCAeCfROTphd1ZNOhzLy6XfJyG6Xgd5MCAZw4xie0Sj5AnY1/akDgNS9YFl3Y06vd6FAsg2gVQJtzG7LVq1OH2frbXNHWH/NY89NNZ4QUSJqL2yEcGADbT38X0bGdukqYlSoliKOcsSTuqhcaemUeYLLoI8+MZor2RxXTRThF1LrHfqf/5LcLAjdl4EERgUysYS2geE+yFdasU91UgUDsc2cSQ1ZoT9+uLOwdgAmifwQqF028INc2IQEDfTmUw3eZxvz7Ud1z3xc1PQfeCvfKsB9jOhRj7rFyb9XcDWLcYj0bByosychMezMLVkFiYcdBBQtvI6K0KRuOZQH2kBsYHJaXTkup8F0eIhO1/GcIwWKpr2mouB7g5TUDJNvORXPXa/mU8bh27TAZYBe2sKx4NSv5OjnHIWD2RuysCzBlUfeNXhDd2jxnHoUlheJ3jBApzURy0fwm2FwwsSU0caQGl0Kv8hopRQE211NnvtLRsmCNrhhpEDoNiZEzD2QdJWKbRRWnaFedXHAELSN0t0bfsCsMf0ktfBoXBoNA+nZN9+pSlmuzspFevmsqqcMllzzvkyXrzoA+Ryo1ePXpdGOoJvhyru+EBRsmOp7MXZ0vNUMUqHLUoKglg1p73sWeZmPc+KAw0pE2zIsFFE5H4192KwDvDxdxEYoDBDNZjbg2bmADTeUKK57IPD4fTYF4c6EnXx/teYMORBDtIhPJneiZny7Nv/zG+YmekIKCoxr6kauE2bZtBLufetNG0BtBY7f+/ImUypMBvdWu/Q7vTMRzw5aQGZWuc1V0HEsItFYMIBnoKGZ0xcarba/TYZq50kCaflFysYjA4EDKHqGdpYWdKYmm+a7TADmW35yfnOYpZYrkpVEtiqF0EujI00aeplNs2k+qyFZNeE3CDPL9P6b4PQ/kataHkVpLSEVGK7EX6rAa7IVNrvZtFvOA6okKvBgMtFDAGZOx88MeBcJ8AR3AgUUeIznAN6tjCUipGDZONm1FjWJp4A3QIzSaIOmZ7DvF/ysYYbM/fFDOV0jntAjRdapxJxL0eThpEhKOjCDDq2ks+3GrwxqIFKLe1WdOzII8XIOPGnwy6LKXVfpSDOTEfaRsGujhpS4hBIsMOqHbl16PJxc4EkaVu9wpEYlF/84NSv5Zum4drMfp9yXbzzAOJqqS4YkI4cBrFrC7bMPiCfgI3nNZAqkk3QOZqR+yyqx+nDQKBBBZ7QKrfGMCL+XpqFaBJU0wpkBdAhbR4hJsmT5aynlvkouoxm/NjD5oe6BzVIO9uktM+/5dEC5P7vZvarmuO/lKXz4sBabVPIATuKTrwbJP8XUkdM6uEctHKXICUJGjaZIWRbZp8czquQYfY6ynBUCfIU+gG6wqSIBmYIm9pZpXdaL121V7q0VjDjmQnXvMe7ysoEZnZL15B0SpxS1jjd83uNIOKZwu5MPzg2NhOx3xMOPYwEn2CUzbSrwAs5OAtrz3GAaUkJOU74XwjaYUmGJdZBS1NJVkGYrToINLKDjxcuIlyfVsKQSG/G4DyiO2SlQvJ0d0Ot1uOG5IFSAkq+PRVMgVMDvOIJMdqjeCFKUGRWBW9wigYvcbU7CQL/7meF2KZAaWl+4y9uhowAX7elogAvItAAxo2+SFxGRsHGEW9BnhlTuWigYxRcnVUBRQHV41LV+Fr5CJYV7sHfeywswx4XMtUx6EkBhR+q8AXXUA8uPJ73Pb49i9KG9fOljvXeyFj9ixgbo6CcbAJ7WHWqKHy/h+YjBwp6VcN7M89FGzQ04qbrQtgrOFybg3gQRTYG5xn73ArkfQWjCJROwy3J38Dx/D7jOa6BBNsitEw1wGq780EEioOeD+ZGp2J66ADiVGMayiHYucMk8nTK2zzT9CnEraAk95kQjy4k0GRElLL5YAKLQErJ5rp1eay9O4Fb6yJGm9U4FaMwPGxtKD6odIIHKoWnhKo1U8KIpFC+MVn59ZXmc7ZTBZfsg6FQ8W10YfTr4u0nYrpHZbZ1jXiLmooF0cOm0+mPnJBXQtepc7n0BqOipNCqI6yyloTeRShNKH04FIo0gcMk0H/xThyN4pPAWjDDkEp3lNNPRNVfpMI44CWRlRgViP64eK0JSRp0WUvCWYumlW/c58Vcz/yMwVcW5oYb9+26TEhwvbxiNg48hl1VI1UXTU//Eta+BMKnGUivctfL5wINDD0giQL1ipt6U7C9cd4+lgqY2lMUZ02Uv6Prs+ZEZer7ZfWBXVghlfOOrClwsoOFKzWEfz6RZu1eCs+K8fLvkts5+BX0gyrFYve0C3qHrn5U/Oh6D/CihmWIrY7HUZRhJaxde+tldu6adYJ+LeXupQw0XExC36RETdNFxcq9glMu4cNQSX9cqR/GQYp+IxUkIcNGWVU7ZtGa6P3XAyodRt0XeS3Tp01AnCh0ZbUh4VrSZeV9RWfSoWyxnY3hzcZ30G/InDq4wxRrEejreBxnhIQbkxenxkaxl+k7eLUQkUR6vKJ2iDFNGX3WmVA1yaOH+mvhBd+sE6vacQzFobwY5BqEAFmejwW5ne7HtVNolOUgJc8CsUxmc/LBi8N5mu9VsIA5HyErnS6zeCz7VLI9+n/hbT6hTokMXTVyXJRKSG2hd2labXTbtmK4fNH3IZBPreSA4FMeVouVN3zG5x9CiGpLw/3pceo4qGqp+rVp+z+7yQ98oEf+nyH4F3+J9IheDBa94Wi63zJbLBCIZm7P0asHGpIJt3PzE3m0S4YIWyXBCVXGikj8MudDPB/6Nm2v4IxJ5gU0ii0guy5SUHqGUYzTP0jIJU5E82RHUXtX4lDdrihBLdP1YaG1AGUC12rQKuIaGvCpMjZC9bWSCYnjDlvpWbkdXMTNeBHLKiuoozMGIvkczmP0aRJSJ8PYnLCVNhKHXBNckH79e8Z8Kc2wUej4sQZoH8qDRGkg86maW/ZQWGNnLcXmq3FlXM6ssR/3P6E/bHMvm6HLrv1yRixit25JsH3/IOr2UV4BWJhxXW5BJ6Xdr07n9kF3ZNAk6/Xpc5MSFmYJ2R7bdL8Kk7q1OU9Elg/tCxJ8giT27wSTySF0GOxg4PbYJdi/Nyia9Nn89CGDulfJemm1aiEr/eleGSN+5MRrVJ4K6lgyTTIW3i9cQ0dAi6FHt0YMbH3wDSAtGLSAccezzxHitt1QdhW36CQgPcA8vIIBh3/JNjf/Obmc2yzpk8edSlS4lVdwgW5vzbYEyFoF4GCBBby1keVNueHAH+evi+H7oOVfS3XuPQSNTXOONAbzJeSb5stwdQHl1ZjrGoE49I8+A9j3t+ahhQj74FCSWpZrj7wRSFJJnnwi1T9HL5qrCFW/JZq6P62XkMWTb+u4lGpKfmmwiJWx178GOG7KbrZGqyWwmuyKWPkNswkZ1q8uptUlviIi+AXh2bOOTOLsrtNkfqbQJeh24reebkINLkjut5r4d9GR/r8CBa9SU0UQhsnZp5cP+RqWCixRm7i4YRFbtZ4EAkhtNa6jHb6gPYQv7MKqkPLRmX3dFsK8XsRLVZ6IEVrCbmNDc8o5mqsogjAQfoC9Bc7R6gfw03m+lQpv6kTfhxscDIX6s0w+fBxtkhjXAXr10UouWCx3C/p/FYwJRS/AXRKkjOb5CLmK4XRe0+xeDDwVkJPZau52bzLEDHCqV0f44pPgKOkYKgTZJ33fmk3Tu8SdxJ02SHM8Fem5SMsWqRyi2F1ynfRJszcFKykdWlNqgDA/L9lKYBmc7Zu/q9ii1FPF47VJkqhirUob53zoiJtVVRVwMR34gV9iqcBaHbRu9kkvqk3yMpfRFG49pKKjIiq7h/VpRwPGTHoY4cg05X5028iHsLvUW/uz+kjPyIEhhcKUwCkJAwbR9pIEGOn8z6svAO8i89sJ3dL5qDWFYbS+HGPRMxYwJItFQN86YESeJQhn2urGiLRffQeLptDl8dAgb+Tp47UQPxWOw17OeChLN1WnzlkPL1T5O+O3Menpn4C3IY5LEepHpnPeZHbvuWfeVtPlkH4LZjPbBrkJT3NoRJzBt86CO0Xq59oQ+8dsm0ymRcmQyn8w71mhmcuEI5byuF+C88VPYly2sEzjlzAQ3vdn/1+Hzguw6qFNNbqenhZGbdiG6RwZaTG7jTA2X9RdXjDN9yj1uQpyO4Lx8KRAcZcbZMafp4wPOd5MdXoFY52V1A8M9hi3sso93+uprE0qYNMjkE22CvK4HuUxqN7oIz5pWuETq1lQAjqlSlqdD2Rnr/ggp/TVkQYjn9lMfYelk2sH5HPdopYo7MHwlV1or9Bxf+QCyLzm92vzG2wjiIjC/ZHEJzeroJl6bdFPTpZho5MV2U86fLQqxNlGIMqCGy+9WYhJ8ob1r0+Whxde9L2PdysETv97O+xVw+VNN1TZSQN5I6l9m5Ip6pLIqLm4a1B1ffH6gHyqT9p82NOjntRWGIofO3bJz5GhkvSWbsXueTAMaJDou99kGLqDlhwBZNEQ4mKPuDvVwSK4WmLluHyhA97pZiVe8g+JxmnJF8IkV/tCs4Jq/HgOoAEGR9tCDsDbDmi3OviUQpG5D8XmKcSAUaFLRXb2lmJTNYdhtYyfjBYZQmN5qT5CNuaD3BVnlkCk7bsMW3AtXkNMMTuW4HjUERSJnVQ0vsBGa1wo3Qh7115XGeTF3NTz8w0440AgU7c3bSXO/KMINaIWXd0oLpoq/0/QJxCQSJ9XnYy1W7TYLBJpHsVWD1ahsA7FjNvRd6mxCiHsm8g6Z0pnzqIpF1dHUtP2ITU5Z1hZHbu+L3BEEStBbL9XYvGfEakv1bmf+bOZGnoiuHEdlBnaChxYKNzB23b8sw8YyT7Ajxfk49eJIAvdbVkdFCe2J0gMefhQ0bIZxhx3fzMIysQNiN8PgOUKxOMur10LduigREDRMZyP4oGWrP1GFY4t6groASsZ421os48wAdnrbovNhLt7ScNULkwZ5AIZJTrbaKYTLjA1oJ3sIuN/aYocm/9uoQHEIlacF1s/TM1fLcPTL38O9fOsjMEIwoPKfvt7opuI9G2Hf/PR4aCLDQ7wNmIdEuXJ/QNL72k5q4NejAldPfe3UVVqzkys8YZ/jYOGOp6c+YzRCrCuq0M11y7TiN6qk7YXRMn/gukxrEimbMQjr3jwRM6dKVZ4RUfWQr8noPXLJq6yh5R3EH1IVOHESst/LItbG2D2vRsZRkAObzvQAAD3mb3/G4NzopI0FAiHfbpq0X72adg6SRj+8OHMShtFxxLZlf/nLgRLbClwl5WmaYSs+yEjkq48tY7Z2bE0N91mJwt+ua0NlRJIDh0HikF4UvSVorFj2YVu9YeS5tfvlVjPSoNu/Zu6dEUfBOT555hahBdN3Sa5Xuj2Rvau1lQNIaC944y0RWj9UiNDskAK1WoL+EfXcC6IbBXFRyVfX/WKXxPAwUyIAGW8ggZ08hcijKTt1YKnUO6QPvcrmDVAb0FCLIXn5id4fD/Jx4tw/gbXs7WF9b2RgXtPhLBG9vF5FEkdHAKrQHZAJC/HWvk7nvzzDzIXZlfFTJoC3JpGgLPBY7SQTjGlUvG577yNutZ1hTfs9/1nkSXK9zzKLRZ3VODeKUovJe0WCq1zVMYxCJMenmNzPIU2S8TA4E7wWmbNkxq9rI2dd6v0VpcAPVMxnDsvWTWFayyqvKZO7Z08a62i/oH2/jxf8rpmfO64in3FLiL1GX8IGtVE9M23yGsIqJbxDTy+LtaMWDaPqkymb5VrQdzOvqldeU0SUi6IirG8UZ3jcpRbwHa1C0Dww9G/SFX3gPvTJQE+kyz+g1BeMILKKO+olcHzctOWgzxYHnOD7dpCRtuZEXACjgqesZMasoPgnuDC4nUviAAxDc5pngjoAITIkvhKwg5d608pdrZcA+qn5TMT6Uo/QzBaOxBCLTJX3Mgk85rMfsnWx86oLxf7p2PX5ONqieTa/qM3tPw4ZXvlAp83NSD8F7+ZgctK1TpoYwtiU2h02HCGioH5tkVCqNVTMH5p00sRy2JU1qyDBP2CII/Dg4WDsIl+zgeX7589srx6YORRQMBfKbodbB743Tl4WLKOEnwWUVBsm94SOlCracU72MSyj068wdpYjyz1FwC2bjQnxnB6Mp/pZ+yyZXtguEaYB+kqhjQ6UUmwSFazOb+rhYjLaoiM+aN9/8KKn0zaCTFpN9eKwWy7/u4EHzO46TdFSNjMfn2iPSJwDPCFHc0I1+vjdAZw5ZjqR/uzi9Zn20oAa5JnLEk/EA3VRWE7J/XrupfFJPtCUuqHPpnlL7ISJtRpSVcB8qsZCm2QEkWoROtCKKxUh3yEcMbWYJwk6DlEBG0bZP6eg06FL3v6RPb7odGuwm7FN8fG4woqtB8e7M5klPpo97GoObNwt+ludTAmxyC5hmcFx+dIvEZKI6igFKHqLH01iY1o7903VzG9QGetyVx5RNmBYUU+zIuSva/yIcECUi4pRmE3VkF2avqulQEUY4yZ/wmNboBzPmAPey3+dSYtBZUjeWWT0pPwCz4Vozxp9xeClIU60qvEFMQCaPvPaA70WlOP9f/ey39macvpGCVa+zfa8gO44wbxpJUlC8GN/pRMTQtzY8Z8/hiNrU+Zq64ZfFGIkdj7m7abcK1EBtws1X4J/hnqvasPvvDSDYWN+QcQVGMqXalkDtTad5rYY0TIR1Eqox3czwPMjKPvF5sFv17Thujr1IZ1Ytl4VX1J0vjXKmLY4lmXipRAro0qVGEcXxEVMMEl54jQMd4J7RjgomU0j1ptjyxY+cLiSyXPfiEcIS2lWDK3ISAy6UZ3Hb5vnPncA94411jcy75ay6B6DSTzK6UTCZR9uDANtPBrvIDgjsfarMiwoax2OlLxaSoYn4iRgkpEGqEkwox5tyI8aKkLlfZ12lO11TxsqRMY89j5JaO55XfPJPDL1LGSnC88Re9Ai+Nu5bZjtwRrvFITUFHPR4ZmxGslQMecgbZO7nHk32qHxYkdvWpup07ojcMCaVrpFAyFZJJbNvBpZfdf39Hdo2kPtT7v0/f8R/B5Nz4f1t9/3zNM/7n6SUHfcWk5dfQFJvcJMgPolGCpOFb/WC0FGWU2asuQyT+rm88ZKZ78Cei/CAh939CH0JYbpZIPtxc2ufXqjS3pHH9lnWK4iJ7OjR/EESpCo2R3MYKyE7rHfhTvWho4cL1QdN4jFTyR6syMwFm124TVDDRXMNveI1Dp/ntwdz8k8kxw7iFSx6+Yx6O+1LzMVrN0BBzziZi9kneZSzgollBnVwBh6oSOPHXrglrOj+QmR/AESrhDpKrWT+8/AiMDxS/5wwRNuGQPLlJ9ovomhJWn8sMLVItQ8N/7IXvtD8kdOoHaw+vBSbFImQsv/OCAIui99E+YSIOMlMvBXkAt+NAZK8wB9Jf8CPtB+TOUOR+z71d/AFXpPBT6+A5FLjxMjLIEoJzrQfquvxEIi+WoUzGR1IzQFNvbYOnxb2PyQ0kGdyXKzW2axQL8lNAXPk6NEjqrRD1oZtKLlFoofrXw0dCNWASHzy+7PSzOUJ3XtaPZsxLDjr+o41fKuKWNmjiZtfkOzItvlV2MDGSheGF0ma04qE3TUEfqJMrXFm7DpK+27DSvCUVf7rbNoljPhha5W7KBqVq0ShUSTbRmuqPtQreVWH4JET5yMhuqMoSd4r/N8sDmeQiQQvi1tcZv7Moc7dT5X5AtCD6kNEGZOzVcNYlpX4AbTsLgSYYliiPyVoniuYYySxsBy5cgb3pD+EK0Gpb0wJg031dPgaL8JZt6sIvzNPEHfVPOjXmaXj4bd4voXzpZ5GApMhILgMbCEWZ2zwgdeQgjNHLbPIt+KqxRwWPLTN6HwZ0Ouijj4UF+Sg0Au8XuIKW0WxlexdrFrDcZJ8Shauat3X0XmHygqgL1nAu2hrJFb4wZXkcS+i36KMyU1yFvYv23bQUJi/3yQpqr/naUOoiEWOxckyq/gq43dFou1DVDaYMZK9tho7+IXXokBCs5GRfOcBK7g3A+jXQ39K4YA8PBRW4m5+yR0ZAxWJncjRVbITvIAPHYRt1EJ3YLiUbqIvoKHtzHKtUy1ddRUQ0AUO41vonZDUOW+mrszw+SW/6Q/IUgNpcXFjkM7F4CSSQ2ExZg85otsMs7kqsQD4OxYeBNDcSpifjMoLb7GEbGWTwasVObmB/bfPcUlq0wYhXCYEDWRW02TP5bBrYsKTGWjnWDDJ1F7zWai0zW/2XsCuvBQjPFcTYaQX3tSXRSm8hsAoDdjArK/OFp6vcWYOE7lizP0Yc+8p16i7/NiXIiiQTp7c7Xus925VEtlKAjUdFhyaiLT7VxDagprMFwix4wZ05u0qj7cDWFd0W9OYHIu3JbJKMXRJ1aYNovugg+QqRN7fNHSi26VSgBpn+JfMuPo3aeqPWik/wI5Rz3BWarPQX4i5+dM0npwVOsX+KsOhC7vDg+OJsz4Q5zlnIeflUWL6QYMbf9WDfLmosLF4Qev3mJiOuHjoor/dMeBpA9iKDkMjYBNbRo414HCxjsHrB4EXNbHzNMDHCLuNBG6Sf+J4MZ/ElVsDSLxjIiGsTPhw8BPjxbfQtskj+dyNMKOOcUYIRBEIqbazz3lmjlRQhplxq673VklMMY6597vu+d89ec/zq7Mi4gQvh87ehYbpOuZEXj5g/Q7S7BFDAAB9DzG35SC853xtWVcnZQoH54jeOqYLR9NDuwxsVthTV7V99n/B7HSbAytbEyVTz/5NhJ8gGIjG0E5j3griULUd5Rg7tQR+90hJgNQKQH2btbSfPcaTOfIexc1db1BxUOhM1vWCpLaYuKr3FdNTt/T3PWCpEUWDKEtzYrjpzlL/wri3MITKsFvtF8QVV/NhVo97aKIBgdliNc10dWdXVDpVtsNn+2UIolrgqdWA4EY8so0YvB4a+aLzMXiMAuOHQrXY0tr+CL10JbvZzgjJJuB1cRkdT7DUqTvnswVUp5kkUSFVtIIFYK05+tQxT6992HHNWVhWxUsD1PkceIrlXuUVRogwmfdhyrf6zzaL8+c0L7GXMZOteAhAVQVwdJh+7nrX7x4LaIIfz2F2v7Dg/uDfz2Fa+4gFm2zHAor8UqimJG3VTJtZEoFXhnDYXvxMJFc6ku2bhbCxzij2z5UNuK0jmp1mnvkVNUfR+SEmj1Lr94Lym75PO7Fs0MIr3GdsWXRXSfgLTVY0FLqba97u1In8NAcY7IC6TjWLigwKEIm43NxTdaVTv9mcKkzuzBkKd8x/xt1p/9BbP7Wyb4bpo1K1gnOpbLvKz58pWl3B55RJ/Z5mRDLPtNQg14jdOEs9+h/V5UVpwrAI8kGbX8KPVPDIMfIqKDjJD9UyDOPhjZ3vFAyecwyq4akUE9mDOtJEK1hpDyi6Ae87sWAClXGTiwPwN7PXWwjxaR79ArHRIPeYKTunVW24sPr/3HPz2IwH8oKH4OlWEmt4BLM6W5g4kMcYbLwj2usodD1088stZA7VOsUSpEVl4w7NMb1EUHMRxAxLF0CIV+0L3iZb+ekB1vSDSFjAZ3hfLJf7gFaXrOKn+mhR+rWw/eTXIcAgl4HvFuBg1LOmOAwJH3eoVEjjwheKA4icbrQCmvAtpQ0mXG0agYp5mj4Rb6mdQ+RV4QBPbxMqh9C7o8nP0Wko2ocnCHeRGhN1XVyT2b9ACsL+6ylUy+yC3QEnaKRIJK91YtaoSrcWZMMwxuM0E9J68Z+YyjA0g8p1PfHAAIROy6Sa04VXOuT6A351FOWhKfTGsFJ3RTJGWYPoLk5FVK4OaYR9hkJvezwF9vQN1126r6isMGXWTqFW+3HL3I/jurlIdDWIVvYY+s6yq7lrFSPAGRdnU7PVwY/SvWbZGpXzy3BQ2LmAJlrONUsZs4oGkly0V267xbD5KMY8woNNsmWG1VVgLCra8aQBBcI4DP2BlNwxhiCtHlaz6OWFoCW0vMR3ErrG7JyMjTSCnvRcsEHgmPnwA6iNpJ2DrFb4gLlhKJyZGaWkA97H6FFdwEcLT6DRQQL++fOkVC4cYGW1TG/3iK5dShRSuiBulmihqgjR45Vi03o2RbQbP3sxt90VxQ6vzdlGfkXmmKmjOi080JSHkLntjvsBJnv7gKscOaTOkEaRQqAnCA4HWtB4XnMtOhpRmH2FH8tTXrIjAGNWEmudQLCkcVlGTQ965Kh0H6ixXbgImQP6b42B49sO5C8pc7iRlgyvSYvcnH9FgQ3azLbQG2cUW96SDojTQStxkOJyOuDGTHAnnWkz29aEwN9FT8EJ4yhXOg+jLTrCPKeEoJ9a7lDXOjEr8AgX4BmnMQ668oW0zYPyQiVMPxKRHtpfnEEyaKhdzNVThlxxDQNdrHeZiUFb6NoY2KwvSb7BnRcpJy+/g/zAYx3fYSN5QEaVD2Y1VsNWxB0BSO12MRsRY8JLfAezRMz5lURuLUnG1ToKk6Q30FughqWN6gBNcFxP/nY/iv+iaUQOa+2Nuym46wtI/DvSfzSp1jEi4SdYBE7YhTiVV5cX9gwboVDMVgZp5YBQlHOQvaDNfcCoCJuYhf5kz5kwiIKPjzgpcRJHPbOhJajeoeRL53cuMahhV8Z7IRr6M4hW0JzT7mzaMUzQpm866zwM7Cs07fJYXuWvjAMkbe5O6V4bu71sOG6JQ4oL8zIeXHheFVavzxmlIyBkgc9IZlEDplMPr8xlcyss4pVUdwK1e7CK2kTsSdq7g5SHRAl3pYUB9Ko4fsh4qleOyJv1z3KFSTSvwEcRO/Ew8ozEDYZSqpfoVW9uhJfYrNAXR0Z3VmeoAD+rVWtwP/13sE/3ICX3HhDG3CMc476dEEC0K3umSAD4j+ZQLVdFOsWL2C1TH5+4KiSWH+lMibo+B55hR3Gq40G1n25sGcN0mEcoU2wN9FCVyQLBhYOu9aHVLWjEKx2JIUZi5ySoHUAI9b8hGzaLMxCZDMLhv8MkcpTqEwz9KFDpCpqQhVmsGQN8m24wyB82FAKNmjgfKRsXRmsSESovAwXjBIoMKSG51p6Um8b3i7GISs7kjTq/PZoioCfJzfKdJTN0Q45kQEQuh9H88M3yEs3DbtRTKALraM0YC8laiMiOOe6ADmTcCiREeAWZelBaEXRaSuj2lx0xHaRYqF65O0Lo5OCFU18A8cMDE4MLYm9w2QSr9NgQAIcRxZsNpA7UJR0e71JL+VU+ISWFk5I97lra8uGg7GlQYhGd4Gc6rxsLFRiIeGO4abP4S4ekQ1fiqDCy87GZHd52fn5aaDGuvOmIofrzpVwMvtbreZ/855OaXTRcNiNE0wzGZSxbjg26v8ko8L537v/XCCWP2MFaArJpvnkep0pA+O86MWjRAZPQRfznZiSIaTppy6m3p6HrNSsY7fDtz7Cl4V/DJAjQDoyiL2uwf1UHVd2AIrzBUSlJaTj4k6NL97a/GqhWKU9RUmjnYKpm2r+JYUcrkCuZKvcYvrg8pDoUKQywY9GDWg03DUFSirlUXBS5SWn/KAntnf0IdHGL/7mwXqDG+LZYjbEdQmqUqq4y54TNmWUP7IgcAw5816YBzwiNIJiE9M4lPCzeI/FGBeYy3p6IAmH4AjXXmvQ4Iy0Y82NTobcAggT2Cdqz6Mx4TdGoq9fn2etrWKUNFyatAHydQTVUQ2S5OWVUlugcNvoUrlA8cJJz9MqOa/W3iVno4zDHfE7zhoY5f5lRTVZDhrQbR8LS4eRLz8iPMyBL6o4PiLlp89FjdokQLaSBmKHUwWp0na5fE3v9zny2YcDXG/jfI9sctulHRbdkI5a4GOPJx4oAJQzVZ/yYAado8KNZUdEFs9ZPiBsausotXMNebEgr0dyopuqfScFJ3ODNPHgclACPdccwv0YJGQdsN2lhoV4HVGBxcEUeUX/alr4nqpcc1CCR3vR7g40zteQg/JvWmFlUE4mAiTpHlYGrB7w+U2KdSwQz2QJKBe/5eiixWipmfP15AFWrK8Sh1GBBYLgzki1wTMhGQmagXqJ2+FuqJ8f0XzXCVJFHQdMAw8xco11HhM347alrAu+wmX3pDFABOvkC+WPX0Uhg1Z5MVHKNROxaR84YV3s12UcM+70cJ460SzEaKLyh472vOMD3XnaK7zxZcXlWqenEvcjmgGNR2OKbI1s8U+iwiW+HotHalp3e1MGDy6BMVIvajnAzkFHbeVsgjmJUkrP9OAwnEHYXVBqYx3q7LvXjoVR0mY8h+ZaOnh053pdsGkmbqhyryN01eVHySr+CkDYkSMeZ1xjPNVM+gVLTDKu2VGsMUJqWO4TwPDP0VOg2/8ITbAUaMGb4LjL7L+Pi11lEVMXTYIlAZ/QHmTENjyx3kDkBdfcvvQt6tKk6jYFM4EG5UXDTaF5+1ZjRz6W7MdJPC+wTkbDUim4p5QQH3b9kGk2Bkilyeur8Bc20wm5uJSBO95GfYDI1EZipoRaH7uVveneqz43tlTZGRQ4a7CNmMHgXyOQQOL6WQkgMUTQDT8vh21aSdz7ERiZT1jK9F+v6wgFvuEmGngSvIUR2CJkc5tx1QygfZnAruONobB1idCLB1FCfO7N1ZdRocT8/Wye+EnDiO9pzqIpnLDl4bkaRKW+ekBVwHn46Shw1X0tclt/0ROijuUB4kIInrVJU4buWf4YITJtjOJ6iKdr1u+flgQeFH70GxKjhdgt/MrwfB4K/sXczQ+9zYcrD4dhY6qZhZ010rrxggWA8JaZyg2pYij8ieYEg1aZJkZK9O1Re7sB0iouf60rK0Gd+AYlp7soqCBCDGwfKeUQhCBn0E0o0GS6PdmjLi0TtCYZeqazqwN+yNINIA8Lk3iPDnWUiIPLGNcHmZDxfeK0iAdxm/T7LnN+gemRL61hHIc0NCAZaiYJR+OHnLWSe8sLrK905B5eEJHNlWq4RmEXIaFTmo49f8w61+NwfEUyuJAwVqZCLFcyHBKAcIVj3sNzfEOXzVKIndxHw+AR93owhbCxUZf6Gs8cz6/1VdrFEPrv330+9s6BtMVPJ3zl/Uf9rUi0Z/opexfdL3ykF76e999GPfVv8fJv/Y/+/5hEMon1tqNFyVRevV9y9/uIvsG3dbB8GRRrgaEXfhx+2xeOFt+cEn3RZanNxdEe2+B6MHpNbrRE53PlDifPvFcp4kO78ILR0T4xyW/WGPyBsqGdoA7zJJCu1TKbGfhnqgnRbxbB2B3UZoeQ2bz2sTVnUwokTcTU21RxN1PYPS3Sar7T0eRIsyCNowr9amwoMU/od9s2APtiKNL6ENOlyKADstAEWKA+sdKDhrJ6BOhRJmZ+QJbAaZ3/5Fq0/lumCgEzGEbu3yi0Y4I4EgVAjqxh4HbuQn0GrRhOWyAfsglQJAVL1y/6yezS2k8RE2MstJLh92NOB3GCYgFXznF4d25qiP4ZCyI4RYGesut6FXK6GwPpKK8WHEkhYui0AyEmr5Ml3uBFtPFdnioI8RiCooa7Z1G1WuyIi3nSNglutc+xY8BkeW3JJXPK6jd2VIMpaSxpVtFq+R+ySK9J6WG5Qvt+C+QH1hyYUOVK7857nFmyDBYgZ/o+AnibzNVqyYCJQvyDXDTK+iXdkA71bY7TL3bvuLxLBQ8kbTvTEY9aqkQ3+MiLWbEgjLzOH+lXgco1ERgzd80rDCymlpaRQbOYnKG/ODoFl46lzT0cjM5FYVvv0qLUbD5lyJtMUaC1pFlTkNONx6lliaX9o0i/1vws5bNKn5OuENQEKmLlcP4o2ZmJjD4zzd3Fk32uQ4uRWkPSUqb4LBe3EXHdORNB2BWsws5daRnMfNVX7isPSb1hMQdAJi1/qmDMfRUlCU74pmnzjbXfL8PVG8NsW6IQM2Ne23iCPIpryJjYbVnm5hCvKpMa7HLViNiNc+xTfDIaKm3jctViD8A1M9YPJNk003VVr4Zo2MuGW8vil8SLaGpPXqG7I4DLdtl8a4Rbx1Lt4w5Huqaa1XzZBtj208EJVGcmKYEuaeN27zT9EE6a09JerXdEbpaNgNqYJdhP1NdqiPKsbDRUi86XvvNC7rME5mrSQtrzAZVndtSjCMqd8BmaeGR4l4YFULGRBeXIV9Y4yxLFdyoUNpiy2IhePSWzBofYPP0eIa2q5JP4j9G8at/AqoSsLAUuRXtvgsqX/zYwsE+of6oSDbUOo4RMJw+DOUTJq+hnqwKim9Yy/napyZNTc2rCq6V9jHtJbxGPDwlzWj/Sk3zF/BHOlT/fSjSq7FqlPI1q6J+ru8Aku008SFINXZfOfnZNOvGPMtEmn2gLPt+H4QLA+/SYe4j398auzhKIp2Pok3mPC5q1IN1HgR+mnEfc4NeeHYwd2/kpszR3cBn7ni9NbIqhtSWFW8xbUJuUPVOeeXu3j0IGZmFNiwaNZ6rH4/zQ2ODz6tFxRLsUYZu1bfd1uIvfQDt4YD/efKYv8VF8bHGDgK22w2Wqwpi43vNCOXFJZCGMqWiPbL8mil6tsmOTXAWCyMCw73e2rADZj2IK6rqksM3EXF2cbLb4vjB14wa/yXK5vwU+05MzERJ5nXsXsW21o7M+gO0js2OyKciP5uF2iXyb2DiptwQeHeqygkrNsqVCSlldxBMpwHi1vfc8RKpP/4L3Lmpq6DZcvhDDfxTCE3splacTcOtXdK2g303dIWBVe2wD/Gvja1cClFQ67gw0t1ZUttsUgQ1Veky8oOpS6ksYEc4bqseCbZy766SvL3FodmnahlWJRgVCNjPxhL/fk2wyvlKhITH/VQCipOI0dNcRa5B1M5HmOBjTLeZQJy237e2mobwmDyJNHePhdDmiknvLKaDbShL+Is1XTCJuLQd2wmdJL7+mKvs294whXQD+vtd88KKk0DXP8B1Xu9J+xo69VOuFgexgTrcvI6SyltuLix9OPuE6/iRJYoBMEXxU4shQMf4Fjqwf1PtnJ/wWSZd29rhZjRmTGgiGTAUQqRz+nCdjeMfYhsBD5Lv60KILWEvNEHfmsDs2L0A252351eUoYxAysVaCJVLdH9QFWAmqJDCODUcdoo12+gd6bW2boY0pBVHWL6LQDK5bYWh1V8vFvi0cRpfwv7cJiMX3AZNJuTddHehTIdU0YQ/sQ1dLoF2xQPcCuHKiuCWOY30DHe1OwcClLAhqAKyqlnIbH/8u9ScJpcS4kgp6HKDUdiOgRaRGSiUCRBjzI5gSksMZKqy7Sd51aeg0tgJ+x0TH9YH2Mgsap9N7ENZdEB0bey2DMTrBA1hn56SErNHf3tKtqyL9b6yXEP97/rc+jgD2N1LNUH6RM9AzP3kSipr06RkKOolR7HO768jjWiH1X92jA7dkg7gcNcjqsZCgfqWw0tPXdLg20cF6vnQypg7gLtkazrHAodyYfENPQZsdfnjMZiNu4nJO97D1/sQE+3vNFzrSDOKw+keLECYf7RJwVHeP/j79833oZ0egonYB2FlFE5qj02B/LVOMJQlsB8uNg3Leg4qtZwntsOSNidR0abbZmAK4sCzvt8Yiuz2yrNCJoH5O8XvX/vLeR/BBYTWj0sOPYM/jyxRd5+/JziKAABaPcw/34UA3aj/gLZxZgRCWN6m4m3demanNgsx0P237/Q+Ew5VYnJPkyCY0cIVHoFn2Ay/e7U4P19APbPFXEHX94N6KhEMPG7iwB3+I+O1jd5n6VSgHegxgaSawO6iQCYFgDsPSMsNOcUj4q3sF6KzGaH/0u5PQoAj/8zq6Uc9MoNrGqhYeb2jQo0WlGlXjxtanZLS24/OIN5Gx/2g684BPDQpwlqnkFcxpmP/osnOXrFuu4PqifouQH0eF5qCkvITQbJw/Zvy5mAHWC9oU+cTiYhJmSfKsCyt1cGVxisKu+NymEQIAyaCgud/V09qT3nk/9s/SWsYtha7yNpzBIMM40rCSGaJ9u6lEkl00vXBiEt7p9P5IBCiavynEOv7FgLqPdeqxRiCwuFVMolSIUBcoyfUC2e2FJSAUgYdVGFf0b0Kn2EZlK97yyxrT2MVgvtRikfdaAW8RwEEfN+B7/eK8bBdp7URpbqn1xcrC6d2UjdsKbzCjBFqkKkoZt7Mrhg6YagE7spkqj0jOrWM+UGQ0MUlG2evP1uE1p2xSv4dMK0dna6ENcNUF+xkaJ7B764NdxLCpuvhblltVRAf7vK5qPttJ/9RYFUUSGcLdibnz6mf7WkPO3MkUUhR2mAOuGv8IWw5XG1ZvoVMnjSAZe6T7WYA99GENxoHkMiKxHlCuK5Gd0INrISImHQrQmv6F4mqU/TTQ8nHMDzCRivKySQ8dqkpQgnUMnwIkaAuc6/FGq1hw3b2Sba398BhUwUZSAIO8XZvnuLdY2n6hOXws+gq9BHUKcKFA6kz6FDnpxLPICa3qGhnc97bo1FT/XJk48LrkHJ2CAtBv0RtN97N21plfpXHvZ8gMJb7Zc4cfI6MbPwsW7AilCSXMFIEUEmir8XLEklA0ztYbGpTTGqttp5hpFTTIqUyaAIqvMT9A/x+Ji5ejA4Bhxb/cl1pUdOD6epd3yilIdO6j297xInoiBPuEDW2/UfslDyhGkQs7Wy253bVnlT+SWg89zYIK/9KXFl5fe+jow2rd5FXv8zDPrmfMXiUPt9QBO/iK4QGbX5j/7Rx1c1vzsY8ONbP3lVIaPrhL4+1QrECTN3nyKavGG0gBBtHvTKhGoBHgMXHStFowN+HKrPriYu+OZ05Frn8okQrPaaxoKP1ULCS/cmKFN3gcH7HQlVjraCeQmtjg1pSQxeuqXiSKgLpxc/1OiZsU4+n4lz4hpahGyWBURLi4642n1gn9qz9bIsaCeEPJ0uJmenMWp2tJmIwLQ6VSgDYErOeBCfSj9P4G/vI7oIF+l/n5fp956QgxGvur77ynawAu3G9MdFbJbu49NZnWnnFcQHjxRuhUYvg1U/e84N4JTecciDAKb/KYIFXzloyuE1eYXf54MmhjTq7B/yBToDzzpx3tJCTo3HCmVPYfmtBRe3mPYEE/6RlTIxbf4fSOcaKFGk4gbaUWe44hVk9SZzhW80yfW5QWBHxmtUzvMhfVQli4gZTktIOZd9mjJ5hsbmzttaHQB29Am3dZkmx3g/qvYocyhZ2PXAWsNQiIaf+Q8W/MWPIK7/TjvCx5q2XRp4lVWydMc2wIQkhadDB0xsnw/kSEyGjLKjI4coVIwtubTF3E7MJ6LS6UOsJKj82XVAVPJJcepfewbzE91ivXZvOvYfsmMevwtPpfMzGmC7WJlyW2j0jh7AF1JLmwEJSKYwIvu6DHc3YnyLH9ZdIBnQ+nOVDRiP+REpqv++typYHIvoJyICGA40d8bR7HR2k7do6UQTHF4oriYeIQbxKe4Th6+/l1BjUtS9hqORh3MbgvYrStXTfSwaBOmAVQZzpYNqsAmQyjY56MUqty3c/xH6GuhNvNaG9vGbG6cPtBM8UA3e8r51D0AR9kozKuGGSMgLz3nAHxDNnc7GTwpLj7/6HeWp1iksDeTjwCLpxejuMtpMnGJgsiku1sOACwQ9ukzESiDRN77YNESxR5LphOlcASXA5uIts1LnBIcn1J7BLWs49DMALSnuz95gdOrTZr0u1SeYHinno/pE58xYoXbVO/S+FEMMs5qyWkMnp8Q3ClyTlZP52Y9nq7b8fITPuVXUk9ohG5EFHw4gAEcjFxfKb3xuAsEjx2z1wxNbSZMcgS9GKyW3R6KwJONgtA64LTyxWm8Bvudp0M1FdJPEGopM4Fvg7G/hsptkhCfHFegv4ENwxPeXmYhxwZy7js+BeM27t9ODBMynVCLJ7RWcBMteZJtvjOYHb5lOnCLYWNEMKC59BA7covu1cANa2PXL05iGdufOzkgFqqHBOrgQVUmLEc+Mkz4Rq8O6WkNr7atNkH4M8d+SD1t/tSzt3oFql+neVs+AwEI5JaBJaxARtY2Z4mKoUqxds4UpZ0sv3zIbNoo0J4fihldQTX3XNcuNcZmcrB5LTWMdzeRuAtBk3cZHYQF6gTi3PNuDJ0nmR+4LPLoHvxQIxRgJ9iNNXqf2SYJhcvCtJiVWo85TsyFOuq7EyBPJrAdhEgE0cTq16FQXhYPJFqSfiVn0IQnPOy0LbU4BeG94QjdYNB0CiQ3QaxQqD2ebSMiNjaVaw8WaM4Z5WnzcVDsr4eGweSLa2DE3BWViaxhZFIcSTjgxNCAfelg+hznVOYoe5VqTYs1g7WtfTm3e4/WduC6p+qqAM8H4ZyrJCGpewThTDPe6H7CzX/zQ8Tm+r65HeZn+MsmxUciEWPlAVaK/VBaQBWfoG/aRL/jSZIQfep/89GjasWmbaWzeEZ2R1FOjvyJT37O9B8046SRSKVEnXWlBqbkb5XCS3qFeuE9xb9+frEknxWB5h1D/hruz2iVDEAS7+qkEz5Ot5agHJc7WCdY94Ws61sURcX5nG8UELGBAHZ3i+3VulAyT0nKNNz4K2LBHBWJcTBX1wzf+//u/j/9+//v87+9/l9Lbh/L/uyNYiTsWV2LwsjaA6MxTuzFMqmxW8Jw/+IppdX8t/Clgi1rI1SN0UC/r6tX/4lUc2VV1OQReSeCsjUpKZchw4XUcjHfw6ryCV3R8s6VXm67vp4n+lcPV9gJwmbKQEsmrJi9c2vkwrm8HFbVYNTaRGq8D91t9n5+U+aD/hNtN3HjC/nC/vUoGFSCkXP+NlRcmLUqLbiUBl4LYf1U/CCvwtd3ryCH8gUmGITAxiH1O5rnGTz7y1LuFjmnFGQ1UWuM7HwfXtWl2fPFKklYwNUpF2IL/TmaRETjQiM5SJacI+3Gv5MBU8lP5Io6gWkawpyzNEVGqOdx4YlO1dCvjbWFZWbCmeiFKPSlMKtKcMFLs/KQxtgAHi7NZNCQ32bBAW2mbHflVZ8wXKi1JKVHkW20bnYnl3dKWJeWJOiX3oKPBD6Zbi0ZvSIuWktUHB8qDR8DMMh1ZfkBL9FS9x5r0hBGLJ8pUCJv3NYH+Ae8p40mZWd5m5fhobFjQeQvqTT4VKWIYfRL0tfaXKiVl75hHReuTJEcqVlug+eOIIc4bdIydtn2K0iNZPsYWQvQio2qbO3OqAlPHDDOB7DfjGEfVF51FqqNacd6QmgFKJpMfLp5DHTv4wXlONKVXF9zTJpDV4m1sYZqJPhotcsliZM8yksKkCkzpiXt+EcRQvSQqmBS9WdWkxMTJXPSw94jqI3varCjQxTazjlMH8jTS8ilaW8014/vwA/LNa+YiFoyyx3s/KswP3O8QW1jtq45yTM/DX9a8M4voTVaO2ebvw1EooDw/yg6Y1faY+WwrdVs5Yt0hQ5EwRfYXSFxray1YvSM+kYmlpLG2/9mm1MfmbKHXr44Ih8nVKb1M537ZANUkCtdsPZ80JVKVKabVHCadaLXg+IV8i5GSwpZti0h6diTaKs9sdpUKEpd7jDUpYmHtiX33SKiO3tuydkaxA7pEc9XIQEOfWJlszj5YpL5bKeQyT7aZSBOamvSHl8xsWvgo26IP/bqk+0EJUz+gkkcvlUlyPp2kdKFtt7y5aCdks9ZJJcFp5ZWeaWKgtnXMN3ORwGLBE0PtkEIek5FY2aVssUZHtsWIvnljMVJtuVIjpZup/5VL1yPOHWWHkOMc6YySWMckczD5jUj2mlLVquFaMU8leGVaqeXis+aRRL8zm4WuBk6cyWfGMxgtr8useQEx7k/PvRoZyd9nde1GUCV84gMX8Ogu/BWezYPSR27llzQnA97oo0pYyxobYUJfsj+ysTm9zJ+S4pk0TGo9VTG0KjqYhTmALfoDZVKla2b5yhv241PxFaLJs3i05K0AAIdcGxCJZmT3ZdT7CliR7q+kur7WdQjygYtOWRL9B8E4s4LI8KpAj7bE0dg7DLOaX+MGeAi0hMMSSWZEz+RudXbZCsGYS0QqiXjH9XQbd8sCB+nIVTq7/T/FDS+zWY9q7Z2fdq1tdLb6v3hKKVDAw5gjj6o9r1wHFROdHc18MJp4SJ2Ucvu+iQ9EgkekW8VCM+psM6y+/2SBy8tNN4a3L1MzP+OLsyvESo5gS7IQOnIqMmviJBVc6zbVG1n8eXiA3j46kmvvtJlewwNDrxk4SbJOtP/TV/lIVK9ueShNbbMHfwnLTLLhbZuO79ec5XvfgRwLFK+w1r5ZWW15rVFZrE+wKqNRv5KqsLNfpGgnoUU6Y71NxEmN7MyqwqAQqoIULOw/LbuUB2+uE75gJt+kq1qY4LoxV+qR/zalupea3D5+WMeaRIn0sAI6DDWDh158fqUb4YhAxhREbUN0qyyJYkBU4V2KARXDT65gW3gRsiv7xSPYEKLwzgriWcWgPr0sbZnv7m1XHNFW6xPdGNZUdxFiUYlmXNjDVWuu7LCkX/nVkrXaJhiYktBISC2xgBXQnNEP+cptWl1eG62a7CPXrnrkTQ5BQASbEqUZWMDiZUisKyHDeLFOaJILUo5f6iDt4ZO8MlqaKLto0AmTHVVbkGuyPa1R/ywZsWRoRDoRdNMMHwYTsklMVnlAd2S0282bgMI8fiJpDh69OSL6K3qbo20KfpNMurnYGQSr/stFqZ7hYsxKlLnKAKhsmB8AIpEQ4bd/NrTLTXefsE6ChRmKWjXKVgpGoPs8GAicgKVw4K0qgDgy1A6hFq1WRat3fHF+FkU+b6H4NWpOU3KXTxrIb2qSHAb+qhm8hiSROi/9ofapjxhyKxxntPpge6KL5Z4+WBMYkAcE6+0Hd3Yh2zBsK2MV3iW0Y6cvOCroXlRb2MMJtdWx+3dkFzGh2Pe3DZ9QpSqpaR/rE1ImOrHqYYyccpiLC22amJIjRWVAherTfpQLmo6/K2pna85GrDuQPlH1Tsar8isAJbXLafSwOof4gg9RkAGm/oYpBQQiPUoyDk2BCQ1k+KILq48ErFo4WSRhHLq/y7mgw3+L85PpP6xWr6cgp9sOjYjKagOrxF148uhuaWtjet953fh1IQiEzgC+d2IgBCcUZqgTAICm2bR8oCjDLBsmg+ThyhfD+zBalsKBY1Ce54Y/t9cwfbLu9SFwEgphfopNA3yNxgyDafUM3mYTovZNgPGdd4ZFFOj1vtfFW3u7N+iHEN1HkeesDMXKPyoCDCGVMo4GCCD6PBhQ3dRZIHy0Y/3MaE5zU9mTCrwwnZojtE+qNpMSkJSpmGe0EzLyFelMJqhfFQ7a50uXxZ8pCc2wxtAKWgHoeamR2O7R+bq7IbPYItO0esdRgoTaY38hZLJ5y02oIVwoPokGIzxAMDuanQ1vn2WDQ00Rh6o5QOaCRu99fwDbQcN0XAuqkFpxT/cfz3slGRVokrNU0iqiMAJFEbKScZdmSkTUznC0U+MfwFOGdLgsewRyPKwBZYSmy6U325iUhBQNxbAC3FLKDV9VSOuQpOOukJ/GAmu/tyEbX9DgEp6dv1zoU0IqzpG6gssSjIYRVPGgU1QAQYRgIT8gEV0EXr1sqeh2I6rXjtmoCYyEDCe/PkFEi/Q48FuT29p557iN+LCwk5CK/CZ2WdAdfQZh2Z9QGrzPLSNRj5igUWzl9Vi0rCqH8G1Kp4QMLkuwMCAypdviDXyOIk0AHTM8HBYKh3b0/F+DxoNj4ZdoZfCpQVdnZarqoMaHWnMLNVcyevytGsrXQEoIbubqWYNo7NRHzdc0zvT21fWVirj7g36iy6pxogfvgHp1xH1Turbz8QyyHnXeBJicpYUctbzApwzZ1HT+FPEXMAgUZetgeGMwt4G+DHiDT2Lu+PT21fjJCAfV16a/Wu1PqOkUHSTKYhWW6PhhHUlNtWzFnA7MbY+r64vkwdpfNB2JfWgWXAvkzd42K4lN9x7Wrg4kIKgXCb4mcW595MCPJ/cTfPAMQMFWwnqwde4w8HZYJFpQwcSMhjVz4B8p6ncSCN1X4klxoIH4BN2J6taBMj6lHkAOs8JJAmXq5xsQtrPIPIIp/HG6i21xMGcFgqDXSRF0xQg14d2uy6HgKE13LSvQe52oShF5Jx1R6avyL4thhXQZHfC94oZzuPUBKFYf1VvDaxIrtV6dNGSx7DO0i1p6CzBkuAmEqyWceQY7F9+U0ObYDzoa1iKao/cOD/v6Q9gHrrr1uCeOk8fST9MG23Ul0KmM3r+Wn6Hi6WAcL7gEeaykicvgjzkjSwFsAXIR81Zx4QJ6oosVyJkCcT+4xAldCcihqvTf94HHUPXYp3REIaR4dhpQF6+FK1H0i9i7Pvh8owu3lO4PT1iuqu+DkL2Bj9+kdfGAg2TXw03iNHyobxofLE2ibjsYDPgeEQlRMR7afXbSGQcnPjI2D+sdtmuQ771dbASUsDndU7t58jrrNGRzISvwioAlHs5FA+cBE5Ccznkd8NMV6BR6ksnKLPZnMUawRDU1MZ/ib3xCdkTblHKu4blNiylH5n213yM0zubEie0o4JhzcfAy3H5qh2l17uLooBNLaO+gzonTH2uF8PQu9EyH+pjGsACTMy4cHzsPdymUSXYJOMP3yTkXqvO/lpvt0cX5ekDEu9PUfBeZODkFuAjXCaGdi6ew4qxJ8PmFfwmPpkgQjQlWqomFY6UkjmcnAtJG75EVR+NpzGpP1Ef5qUUbfowrC3zcSLX3BxgWEgEx/v9cP8H8u1Mvt9/rMDYf6sjwU1xSOPBgzFEeJLMRVFtKo5QHsUYT8ZRLCah27599EuqoC9PYjYO6aoAMHB8X1OHwEAYouHfHB3nyb2B+SnZxM/vw/bCtORjLMSy5aZoEpvgdGvlJfNPFUu/p7Z4VVK1hiI0/UTuB3ZPq4ohEbm7Mntgc1evEtknaosgZSwnDC2BdMmibpeg48X8Ixl+/8+xXdbshQXUPPvx8jT3fkELivHSmqbhblfNFShWAyQnJ3WBU6SMYSIpTDmHjdLVAdlADdz9gCplZw6mTiHqDwIsxbm9ErGusiVpg2w8Q3khKV/R9Oj8PFeF43hmW/nSd99nZzhyjCX3QOZkkB6BsH4H866WGyv9E0hVAzPYah2tkRfQZMmP2rinfOeQalge0ovhduBjJs9a1GBwReerceify49ctOh5/65ATYuMsAkVltmvTLBk4oHpdl6i+p8DoNj4Fb2vhdFYer2JSEilEwPd5n5zNoGBXEjreg/wh2NFnNRaIUHSOXa4eJRwygZoX6vnWnqVdCRT1ARxeFrNBJ+tsdooMwqnYhE7zIxnD8pZH+P0Nu1wWxCPTADfNWmqx626IBJJq6NeapcGeOmbtXvl0TeWG0Y7OGGV4+EHTtNBIT5Wd0Bujl7inXgZgfXTM5efD3qDTJ54O9v3Bkv+tdIRlq1kXcVD0BEMirmFxglNPt5pedb1AnxuCYMChUykwsTIWqT23XDpvTiKEru1cTcEMeniB+HQDehxPXNmkotFdwUPnilB/u4Nx5Xc6l8J9jH1EgKZUUt8t8cyoZleDBEt8oibDmJRAoMKJ5Oe9CSWS5ZMEJvacsGVdXDWjp/Ype5x0p9PXB2PAwt2LRD3d+ftNgpuyvxlP8pB84oB1i73vAVpwyrmXW72hfW6Dzn9Jkj4++0VQ4d0KSx1AsDA4OtXXDo63/w+GD+zC7w5SJaxsmnlYRQ4dgdjA7tTl2KNLnpJ+mvkoDxtt1a4oPaX3EVqj96o9sRKBQqU7ZOiupeAIyLMD+Y3YwHx30XWHB5CQiw7q3mj1EDlP2eBsZbz79ayUMbyHQ7s8gu4Lgip1LiGJj7NQj905/+rgUYKAA5qdrlHKIknWmqfuR+PB8RdBkDg/NgnlT89G72h2NvySnj7UyBwD+mi/IWs1xWbxuVwUIVXun5cMqBtFbrccI+DILjsVQg6eeq0itiRfedn89CvyFtpkxaauEvSANuZmB1p8FGPbU94J9medwsZ9HkUYjmI7OH5HuxendLbxTaYrPuIfE2ffXFKhoNBUp33HsFAXmCV/Vxpq5AYgFoRr5Ay93ZLRlgaIPjhZjXZZChT+aE5iWAXMX0oSFQEtwjiuhQQItTQX5IYrKfKB+queTNplR1Hoflo5/I6aPPmACwQCE2jTOYo5Dz1cs7Sod0KTG/3kEDGk3kUaUCON19xSJCab3kNpWZhSWkO8l+SpW70Wn3g0ciOIJO5JXma6dbos6jyisuxXwUUhj2+1uGhcvuliKtWwsUTw4gi1c/diEEpZHoKoxTBeMDmhPhKTx7TXWRakV8imJR355DcIHkR9IREHxohP4TbyR5LtFU24umRPRmEYHbpe1LghyxPx7YgUHjNbbQFRQhh4KeU1EabXx8FS3JAxp2rwRDoeWkJgWRUSKw6gGP5U2PuO9V4ZuiKXGGzFQuRuf+tkSSsbBtRJKhCi3ENuLlXhPbjTKD4djXVnfXFds6Zb+1XiUrRfyayGxJq1+SYBEfbKlgjiSmk0orgTqzSS+DZ5rTqsJbttiNtp+KMqGE2AHGFw6jQqM5vD6vMptmXV9OAjq49Uf/Lx9Opam+Hn5O9p8qoBBAQixzQZ4eNVkO9sPzJAMyR1y4/RCQQ1s0pV5KAU5sKLw3tkcFbI/JqrjCsK4Mw+W8aod4lioYuawUiCyVWBE/qPaFi5bnkgpfu/ae47174rI1fqQoTbW0HrU6FAejq7ByM0V4zkZTg02/YJK2N7hUQRCeZ4BIgSEqgD8XsjzG6LIsSbuHoIdz/LhFzbNn1clci1NHWJ0/6/O8HJMdIpEZbqi1RrrFfoo/rI/7ufm2MPG5lUI0IYJ4MAiHRTSOFJ2oTverFHYXThkYFIoyFx6rMYFgaOKM4xNWdlOnIcKb/suptptgTOTdVIf4YgdaAjJnIAm4qNNHNQqqAzvi53GkyRCEoseUBrHohZsjUbkR8gfKtc/+Oa72lwxJ8Mq6HDfDATbfbJhzeIuFQJSiw1uZprHlzUf90WgqG76zO0eCB1WdPv1IT6sNxxh91GEL2YpgC97ikFHyoaH92ndwduqZ6IYjkg20DX33MWdoZk7QkcKUCgisIYslOaaLyvIIqRKWQj16jE1DlQWJJaPopWTJjXfixEjRJJo8g4++wuQjbq+WVYjsqCuNIQW3YjnxKe2M5ZKEqq+cX7ZVgnkbsU3RWIyXA1rxv4kGersYJjD//auldXGmcEbcfTeF16Y1708FB1HIfmWv6dSFi6oD4E+RIjCsEZ+kY7dKnwReJJw3xCjKvi3kGN42rvyhUlIz0Bp+fNSV5xwFiuBzG296e5s/oHoFtUyUplmPulIPl+e1CQIQVtjlzLzzzbV+D/OVQtYzo5ixtMi5BmHuG4N/uKfJk5UIREp7+12oZlKtPBomXSzAY0KgtbPzzZoHQxujnREUgBU+O/jKKhgxVhRPtbqyHiUaRwRpHv7pgRPyUrnE7fYkVblGmfTY28tFCvlILC04Tz3ivkNWVazA+OsYrxvRM/hiNn8Fc4bQBeUZABGx5S/xFf9Lbbmk298X7iFg2yeimvsQqqJ+hYbt6uq+Zf9jC+Jcwiccd61NKQtFvGWrgJiHB5lwi6fR8KzYS7EaEHf/ka9EC7H8D+WEa3TEACHBkNSj/cXxFeq4RllC+fUFm2xtstYLL2nos1DfzsC9vqDDdRVcPA3Ho95aEQHvExVThXPqym65llkKlfRXbPTRiDepdylHjmV9YTWAEjlD9DdQnCem7Aj/ml58On366392214B5zrmQz/9ySG2mFqEwjq5sFl5tYJPw5hNz8lyZPUTsr5E0F2C9VMPnZckWP7+mbwp/BiN7f4kf7vtGnZF2JGvjK/sDX1RtcFY5oPQnE4lIAYV49U3C9SP0LCY/9i/WIFK9ORjzM9kG/KGrAuwFmgdEpdLaiqQNpCTGZVuAO65afkY1h33hrqyLjZy92JK3/twdj9pafFcwfXONmPQWldPlMe7jlP24Js0v9m8bIJ9TgS2IuRvE9ZVRaCwSJYOtAfL5H/YS4FfzKWKbek+GFulheyKtDNlBtrdmr+KU+ibHTdalzFUmMfxw3f36x+3cQbJLItSilW9cuvZEMjKw987jykZRlsH/UI+HlKfo2tLwemBEeBFtmxF2xmItA/dAIfQ+rXnm88dqvXa+GapOYVt/2waFimXFx3TC2MUiOi5/Ml+3rj/YU6Ihx2hXgiDXFsUeQkRAD6wF3SCPi2flk7XwKAA4zboqynuELD312EJ88lmDEVOMa1W/K/a8tGylZRMrMoILyoMQzzbDJHNZrhH77L9qSC42HVmKiZ5S0016UTp83gOhCwz9XItK9fgXfK3F5d7nZCBUekoLxrutQaPHa16Rjsa0gTrzyjqTnmcIcrxg6X6dkKiucudc0DD5W4pJPf0vuDW8r5/uw24YfMuxFRpD2ovT2mFX79xH6Jf+MVdv2TYqR6/955QgVPe3JCD/WjAYcLA9tpXgFiEjge2J5ljeI/iUzg91KQuHkII4mmHZxC3XQORLAC6G7uFn5LOmlnXkjFdoO976moNTxElS8HdxWoPAkjjocDR136m2l+f5t6xaaNgdodOvTu0rievnhNAB79WNrVs6EsPgkgfahF9gSFzzAd+rJSraw5Mllit7vUP5YxA843lUpu6/5jAR0RvH4rRXkSg3nE+O5GFyfe+L0s5r3k05FyghSFnKo4TTgs07qj4nTLqOYj6qaW9knJTDkF5OFMYbmCP+8H16Ty482OjvERV6OFyw043L9w3hoJi408sR+SGo1WviXUu8d7qS+ehKjpKwxeCthsm2LBFSFeetx0x4AaKPxtp3CxdWqCsLrB1s/j5TAhc1jNZsXWl6tjo/WDoewxzg8T8NnhZ1niUwL/nhfygLanCnRwaFGDyLw+sfZhyZ1UtYTp8TYB6dE7R3VsKKH95CUxJ8u8N+9u2/9HUNKHW3x3w5GQrfOPafk2w5qZq8MaHT0ebeY3wIsp3rN9lrpIsW9c1ws3VNV+JwNz0Lo9+V7zZr6GD56We6gWVIvtmam5GPPkVAbr74r6SwhuL+TRXtW/0pgyX16VNl4/EAD50TnUPuwrW6OcUO2VlWXS0inq872kk7GUlW6o/ozFKq+Sip6LcTtSDfDrPTcCHhx75H8BeRon+KG2wRwzfDgWhALmiWOMO6h3pm1UCZEPEjScyk7tdLx6WrdA2N1QTPENvNnhCQjW6kl057/qv7IwRryHrZBCwVSbLLnFRiHdTwk8mlYixFt1slEcPD7FVht13HyqVeyD55HOXrh2ElAxJyinGeoFzwKA91zfrdLvDxJSjzmImfvTisreI25EDcVfGsmxLVbfU8PGe/7NmWWKjXcdTJ11jAlVIY/Bv/mcxg/Q10vCHwKG1GW/XbJq5nxDhyLqiorn7Wd7VEVL8UgVzpHMjQ+Z8DUgSukiVwWAKkeTlVVeZ7t1DGnCgJVIdBPZAEK5f8CDyDNo7tK4/5DBjdD5MPV86TaEhGsLVFPQSI68KlBYy84FievdU9gWh6XZrugvtCZmi9vfd6db6V7FmoEcRHnG36VZH8N4aZaldq9zZawt1uBFgxYYx+Gs/qW1jwANeFy+LCoymyM6zgG7j8bGzUyLhvrbJkTYAEdICEb4kMKusKT9V3eIwMLsjdUdgijMc+7iKrr+TxrVWG0U+W95SGrxnxGrE4eaJFfgvAjUM4SAy8UaRwE9j6ZQH5qYAWGtXByvDiLSDfOD0yFA3UCMKSyQ30fyy1mIRg4ZcgZHLNHWl+c9SeijOvbOJxoQy7lTN2r3Y8p6ovxvUY74aOYbuVezryqXA6U+fcp6wSV9X5/OZKP18tB56Ua0gMyxJI7XyNT7IrqN8GsB9rL/kP5KMrjXxgqKLDa+V5OCH6a5hmOWemMUsea9vQl9t5Oce76PrTyTv50ExOqngE3PHPfSL//AItPdB7kGnyTRhVUUFNdJJ2z7RtktZwgmQzhBG/G7QsjZmJfCE7k75EmdIKH7xlnmDrNM/XbTT6FzldcH/rcRGxlPrv4qDScqE7JSmQABJWqRT/TUcJSwoQM+1jvDigvrjjH8oeK2in1S+/yO1j8xAws/T5u0VnIvAPqaE1atNuN0cuRliLcH2j0nTL4JpcR7w9Qya0JoaHgsOiALLCCzRkl1UUESz+ze/gIXHGtDwgYrK6pCFKJ1webSDog4zTlPkgXZqxlQDiYMjhDpwTtBW2WxthWbov9dt2X9XFLFmcF+eEc1UaQ74gqZiZsdj63pH1qcv3Vy8JYciogIVKsJ8Yy3J9w/GhjWVSQAmrS0BPOWK+RKV+0lWqXgYMnIFwpcZVD7zPSp547i9HlflB8gVnSTGmmq1ClO081OW/UH11pEQMfkEdDFzjLC1Cdo/BdL3s7cXb8J++Hzz1rhOUVZFIPehRiZ8VYu6+7Er7j5PSZu9g/GBdmNzJmyCD9wiswj9BZw+T3iBrg81re36ihMLjoVLoWc+62a1U/7qVX5CpvTVF7rocSAKwv4cBVqZm7lLDS/qoXs4fMs/VQi6BtVbNA3uSzKpQfjH1o3x4LrvkOn40zhm6hjduDglzJUwA0POabgdXIndp9fzhOo23Pe+Rk9GSLX0d71Poqry8NQDTzNlsa+JTNG9+UrEf+ngxCjGEsDCc0bz+udVRyHQI1jmEO3S+IOQycEq7XwB6z3wfMfa73m8PVRp+iOgtZfeSBl01xn03vMaQJkyj7vnhGCklsCWVRUl4y+5oNUzQ63B2dbjDF3vikd/3RUMifPYnX5Glfuk2FsV/7RqjI9yKTbE8wJY+74p7qXO8+dIYgjtLD/N8TJtRh04N9tXJA4H59IkMmLElgvr0Q5OCeVfdAt+5hkh4pQgfRMHpL74XatLQpPiOyHRs/OdmHtBf8nOZcxVKzdGclIN16lE7kJ+pVMjspOI+5+TqLRO6m0ZpNXJoZRv9MPDRcAfJUtNZHyig/s2wwReakFgPPJwCQmu1I30/tcBbji+Na53i1W1N+BqoY7Zxo+U/M9XyJ4Ok2SSkBtoOrwuhAY3a03Eu6l8wFdIG1cN+e8hopTkiKF093KuH/BcB39rMiGDLn6XVhGKEaaT/vqb/lufuAdpGExevF1+J9itkFhCfymWr9vGb3BTK4j598zRH7+e+MU9maruZqb0pkGxRDRE1CD4Z8LV4vhgPidk5w2Bq816g3nHw1//j3JStz7NR9HIWELO8TMn3QrP/zZp//+Dv9p429/ogv+GATR+n/UdF+ns9xNkXZQJXY4t9jMkJNUFygAtzndXwjss+yWH9HAnLQQfhAskdZS2l01HLWv7L7us5uTH409pqitvfSOQg/c+Zt7k879P3K9+WV68n7+3cZfuRd/dDPP/03rn+d+/nBvWfgDlt8+LzjqJ/vx3CnNOwiXhho778C96iD+1TBvRZYeP+EH81LE0vVwOOrmCLB3iKzI1x+vJEsrPH4uF0UB4TJ4X3uDfOCo3PYpYe0MF4bouh0DQ/l43fxUF7Y+dpWuvTSffB0yO2UQUETI/LwCZE3BvnevJ7c9zUlY3H58xzke6DNFDQG8n0WtDN4LAYN4nogKav1ezOfK/z+t6tsCTp+dhx4ymjWuCJk1dEUifDP+HyS4iP/Vg9B2jTo9L4NbiBuDS4nuuHW6H+JDQn2JtqRKGkEQPEYE7uzazXIkcxIAqUq1esasZBETlEZY7y7Jo+RoV/IsjY9eIMkUvr42Hc0xqtsavZvhz1OLwSxMOTuqzlhb0WbdOwBH9EYiyBjatz40bUxTHbiWxqJ0uma19qhPruvcWJlbiSSH48OLDDpaHPszvyct41ZfTu10+vjox6kOqK6v0K/gEPphEvMl/vwSv+A4Hhm36JSP9IXTyCZDm4kKsqD5ay8b1Sad/vaiyO5N/sDfEV6Z4q95E+yfjxpqBoBETW2C7xl4pIO2bDODDFurUPwE7EWC2Uplq+AHmBHvir2PSgkR12/Ry65O0aZtQPeXi9mTlF/Wj5GQ+vFkYyhXsLTjrBSP9hwk4GPqDP5rBn5/l8b0mLRAvRSzXHc293bs3s8EsdE3m2exxidWVB4joHR+S+dz5/W+v00K3TqN14CDBth8eWcsTbiwXPsygHdGid0PEdy6HHm2v/IUuV5RVapYmzGsX90mpnIdNGcOOq64Dbc5GUbYpD9M7S+6cLY//QmjxFLP5cuTFRm3vA5rkFZroFnO3bjHF35uU3s8mvL7Tp9nyTc4mymTJ5sLIp7umSnGkO23faehtz3mmTS7fbVx5rP7x3HXIjRNeq/A3xCs9JNB08c9S9BF2O3bOur0ItslFxXgRPdaapBIi4dRpKGxVz7ir69t/bc9qTxjvtOyGOfiLGDhR4fYywHv1WdOplxIV87TpLBy3Wc0QP0P9s4G7FBNOdITS/tep3o3h1TEa5XDDii7fWtqRzUEReP2fbxz7bHWWJdbIOxOUJZtItNZpTFRfj6vm9sYjRxQVO+WTdiOhdPeTJ+8YirPvoeL88l5iLYOHd3b/Imkq+1ZN1El3UikhftuteEYxf1Wujof8Pr4ICTu5ezZyZ4tHQMxlzUHLYO2VMOoNMGL/20S5i2o2obfk+8qqdR7xzbRDbgU0lnuIgz4LelQ5XS7xbLuSQtNS95v3ZUOdaUx/Qd8qxCt6xf2E62yb/HukLO6RyorV8KgYl5YNc75y+KvefrxY+lc/64y9kvWP0a0bDz/rojq+RWjO06WeruWqNFU7r3HPIcLWRql8ICZsz2Ls/qOm/CLn6++X+Qf7mGspYCrZod/lpl6Rw4xN/yuq8gqV4B6aHk1hVE1SfILxWu5gvXqbfARYQpspcxKp1F/c8XOPzkZvmoSw+vEqBLdrq1fr3wAPv5NnM9i8F+jdAuxkP5Z71c6uhK3enlnGymr7UsWZKC12qgUiG8XXGQ9mxnqz4GSIlybF9eXmbqj2sHX+a1jf0gRoONHRdRSrIq03Ty89eQ1GbV/Bk+du4+V15zls+vvERvZ4E7ZbnxWTVjDjb4o/k8jlw44pTIrUGxxuJvBeO+heuhOjpFsO6lVJ/aXnJDa/bM0Ql1cLbXE/Pbv3EZ3vj3iVrB5irjupZTzlnv677NrI9UNYNqbPgp/HZXS+lJmk87wec+7YOxTDo2aw2l3NfDr34VNlvqWJBknuK7oSlZ6/T10zuOoPZOeoIk81N+sL843WJ2Q4Z0fZ3scsqC/JV2fuhWi1jGURSKZV637lf53Xnnx16/vKEXY89aVJ0fv91jGdfG+G4+sniwHes4hS+udOr4RfhFhG/F5gUG35QaU+McuLmclb5ZWmR+sG5V6nf+PxYzlrnFGxpZaK8eqqVo0NfmAWoGfXDiT/FnUbWvzGDOTr8aktOZWg4BYvz5YH12ZbfCcGtNk+dDAZNGWvHov+PIOnY9Prjg8h/wLRrT69suaMVZ5bNuK00lSVpnqSX1NON/81FoP92rYndionwgOiA8WMf4vc8l15KqEEG4yAm2+WAN5Brfu1sq9suWYqgoajgOYt/JCk1gC8wPkK+XKCtRX6TAtgvrnuBgNRmn6I8lVDipOVB9kX6Oxkp4ZKyd1M6Gj8/v2U7k+YQBL95Kb9PQENucJb0JlW3b5tObN7m/Z1j1ev388d7o15zgXsI9CikAGAViR6lkJv7nb4Ak40M2G8TJ447kN+pvfHiOFjSUSP6PM+QfbAywKJCBaxSVxpizHseZUyUBhq59vFwrkyGoRiHbo0apweEZeSLuNiQ+HAekOnarFg00dZNXaPeoHPTRR0FmEyqYExOVaaaO8c0uFUh7U4e/UxdBmthlBDgg257Q33j1hA7HTxSeTTSuVnPZbgW1nodwmG16aKBDKxEetv7D9OjO0JhrbJTnoe+kcGoDJazFSO8/fUN9Jy/g4XK5PUkw2dgPDGpJqBfhe7GA+cjzfE/EGsMM+FV9nj9IAhrSfT/J3QE5TEIYyk5UjsI6ZZcCPr6A8FZUF4g9nnpVmjX90MLSQysIPD0nFzqwCcSJmIb5mYv2Cmk+C1MDFkZQyCBq4c/Yai9LJ6xYkGS/x2s5/frIW2vmG2Wrv0APpCdgCA9snFvfpe8uc0OwdRs4G9973PGEBnQB5qKrCQ6m6X/H7NInZ7y/1674/ZXOVp7OeuCRk8JFS516VHrnH1HkIUIlTIljjHaQtEtkJtosYul77cVwjk3gW1Ajaa6zWeyHGLlpk3VHE2VFzT2yI/EvlGUSz2H9zYE1s4nsKMtMqNyKNtL/59CpFJki5Fou6VXGm8vWATEPwrUVOLvoA8jLuwOzVBCgHB2Cr5V6OwEWtJEKokJkfc87h+sNHTvMb0KVTp5284QTPupoWvQVUwUeogZR3kBMESYo0mfukewRVPKh5+rzLQb7HKjFFIgWhj1w3yN/qCNoPI8XFiUgBNT1hCHBsAz8L7Oyt8wQWUFj92ONn/APyJFg8hzueqoJdNj57ROrFbffuS/XxrSXLTRgj5uxZjpgQYceeMc2wJrahReSKpm3QjHfqExTLAB2ipVumE8pqcZv8LYXQiPHHsgb5BMW8zM5pvQit+mQx8XGaVDcfVbLyMTlY8xcfmm/RSAT/H09UQol5gIz7rESDmnrQ4bURIB4iRXMDQwxgex1GgtDxKp2HayIkR+E/aDmCttNm2C6lytWdfOVzD6X2SpDWjQDlMRvAp1symWv4my1bPCD+E1EmGnMGWhNwmycJnDV2WrQNxO45ukEb08AAffizYKVULp15I4vbNK5DzWwCSUADfmKhfGSUqii1L2UsE8rB7mLuHuUJZOx4+WiizHBJ/hwboaBzhpNOVvgFTf5cJsHef7L1HCI9dOUUbb+YxUJWn6dYOLz+THi91kzY5dtO5c+grX7v0jEbsuoOGnoIreDIg/sFMyG+TyCLIcAWd1IZ1UNFxE8Uie13ucm40U2fcxC0u3WLvLOxwu+F7MWUsHsdtFQZ7W+nlfCASiAKyh8rnP3EyDByvtJb6Kax6/HkLzT9SyEyTMVM1zPtM0MJY14DmsWh4MgD15Ea9Hd00AdkTZ0EiG5NAGuIBzQJJ0JR0na+OB7lQA6UKxMfihIQ7GCCnVz694QvykWXTxpS2soDu+smru1UdIxSvAszBFD1c8c6ZOobA8bJiJIvuycgIXBQIXWwhyTgZDQxJTRXgEwRNAawGSXO0a1DKjdihLVNp/taE/xYhsgwe+VpKEEB4LlraQyE84gEihxCnbfoyOuJIEXy2FIYw+JjRusybKlU2g/vhTSGTydvCvXhYBdtAXtS2v7LkHtmXh/8fly1do8FI/D0f8UbzVb5h+KRhMGSAmR2mhi0YG/uj7wgxcfzCrMvdjitUIpXDX8ae2JcF/36qUWIMwN6JsjaRGNj+jEteGDcFyTUb8X/NHSucKMJp7pduxtD6KuxVlyxxwaeiC1FbGBESO84lbyrAugYxdl+2N8/6AgWpo/IeoAOcsG35IA/b3AuSyoa55L7llBLlaWlEWvuCFd8f8NfcTUgzJv6CbB+6ohWwodlk9nGWFpBAOaz5uEW5xBvmjnHFeDsb0mXwayj3mdYq5gxxNf3H3/tnCgHwjSrpSgVxLmiTtuszdRUFIsn6LiMPjL808vL1uQhDbM7aA43mISXReqjSskynIRcHCJ9qeFopJfx9tqyUoGbSwJex/0aDE3plBPGtNBYgWbdLom3+Q/bjdizR2/AS/c/dH/d3G7pyl1qDXgtOFtEqidwLqxPYtrNEveasWq3vPUUtqTeu8gpov4bdOQRI2kneFvRNMrShyVeEupK1PoLDPMSfWMIJcs267mGB8X9CehQCF0gIyhpP10mbyM7lwW1e6TGvHBV1sg/UyTghHPGRqMyaebC6pbB1WKNCQtlai1GGvmq9zUKaUzLaXsXEBYtHxmFbEZ2kJhR164LhWW2Tlp1dhsGE7ZgIWRBOx3Zcu2DxgH+G83WTPceKG0TgQKKiiNNOlWgvqNEbnrk6fVD+AqRam2OguZb0YWSTX88N+i/ELSxbaUUpPx4vJUzYg/WonSeA8xUK6u7DPHgpqWpEe6D4cXg5uK9FIYVba47V/nb+wyOtk+zG8RrS4EA0ouwa04iByRLSvoJA2FzaobbZtXnq8GdbfqEp5I2dpfpj59TCVif6+E75p665faiX8gS213RqBxTZqfHP46nF6NSenOneuT+vgbLUbdTH2/t0REFXZJOEB6DHvx6N6g9956CYrY/AYcm9gELJXYkrSi+0F0geKDZgOCIYkLU/+GOW5aGj8mvLFgtFH5+XC8hvAE3CvHRfl4ofM/Qwk4x2A+R+nyc9gNu/9Tem7XW4XRnyRymf52z09cTOdr+PG6+P/Vb4QiXlwauc5WB1z3o+IJjlbxI8MyWtSzT+k4sKVbhF3xa+vDts3NxXa87iiu+xRH9cAprnOL2h6vV54iQRXuOAj1s8nLFK8gZ70ThIQcWdF19/2xaJmT0efrkNDkWbpAQPdo92Z8+Hn/aLjbOzB9AI/k12fPs9HhUNDJ1u6ax2VxD3R6PywN7BrLJ26z6s3QoMp76qzzwetrDABKSGkfW5PwS1GvYNUbK6uRqxfyVGNyFB0E+OugMM8kKwmJmupuRWO8XkXXXQECyRVw9UyIrtCtcc4oNqXqr7AURBmKn6Khz3eBN96LwIJrAGP9mr/59uTOSx631suyT+QujDd4beUFpZ0kJEEnjlP+X/Kr2kCKhnENTg4BsMTOmMqlj2WMFLRUlVG0fzdCBgUta9odrJfpVdFomTi6ak0tFjXTcdqqvWBAzjY6hVrH9sbt3Z9gn+AVDpTcQImefbB4edirjzrsNievve4ZT4EUZWV3TxEsIW+9MT/RJoKfZZYSRGfC1CwPG/9rdMOM8qR/LUYvw5f/emUSoD7YSFuOoqchdUg2UePd1eCtFSKgxLSZ764oy4lvRCIH6bowPxZWwxNFctksLeil47pfevcBipkkBIc4ngZG+kxGZ71a72KQ7VaZ6MZOZkQJZXM6kb/Ac0/XkJx8dvyfJcWbI3zONEaEPIW8GbkYjsZcwy+eMoKrYjDmvEEixHzkCSCRPRzhOfJZuLdcbx19EL23MA8rnjTZZ787FGMnkqnpuzB5/90w1gtUSRaWcb0eta8198VEeZMUSfIhyuc4/nywFQ9uqn7jdqXh+5wwv+RK9XouNPbYdoEelNGo34KyySwigsrfCe0v/PlWPvQvQg8R0KgHO18mTVThhQrlbEQ0Kp/JxPdjHyR7E1QPw/ut0r+HDDG7BwZFm9IqEUZRpv2WpzlMkOemeLcAt5CsrzskLGaVOAxyySzZV/D2EY7ydNZMf8e8VhHcKGHAWNszf1EOq8fNstijMY4JXyATwTdncFFqcNDfDo+mWFvxJJpc4sEZtjXyBdoFcxbUmniCoKq5jydUHNjYJxMqN1KzYV62MugcELVhS3Bnd+TLLOh7dws/zSXWzxEb4Nj4aFun5x4kDWLK5TUF/yCXB/cZYvI9kPgVsG2jShtXkxfgT+xzjJofXqPEnIXIQ1lnIdmVzBOM90EXvJUW6a0nZ/7XjJGl8ToO3H/fdxnxmTNKBZxnkpXLVgLXCZywGT3YyS75w/PAH5I/jMuRspej8xZObU9kREbRA+kqjmKRFaKGWAmFQspC+QLbKPf0RaK3OXvBSWqo46p70ws/eZpu6jCtZUgQy6r4tHMPUdAgWGGUYNbuv/1a6K+MVFsd3T183+T8capSo6m0+Sh57fEeG/95dykGJBQMj09DSW2bY0mUonDy9a8trLnnL5B5LW3Nl8rJZNysO8Zb+80zXxqUGFpud3Qzwb7bf+8mq6x0TAnJU9pDQR9YQmZhlna2xuxJt0aCO/f1SU8gblOrbIyMsxTlVUW69VJPzYU2HlRXcqE2lLLxnObZuz2tT9CivfTAUYfmzJlt/lOPgsR6VN64/xQd4Jlk/RV7UKVv2Gx/AWsmTAuCWKhdwC+4HmKEKYZh2Xis4KsUR1BeObs1c13wqFRnocdmuheaTV30gvVXZcouzHKK5zwrN52jXJEuX6dGx3BCpV/++4f3hyaW/cQJLFKqasjsMuO3B3WlMq2gyYfdK1e7L2pO/tRye2mwzwZPfdUMrl5wdLqdd2Kv/wVtnpyWYhd49L6rsOV+8HXPrWH2Kup89l2tz6bf80iYSd+V4LROSOHeamvexR524q4r43rTmtFzQvArpvWfLYFZrbFspBsXNUqqenjxNNsFXatZvlIhk7teUPfK+YL32F8McTnjv0BZNppb+vshoCrtLXjIWq3EJXpVXIlG6ZNL0dh6qEm2WMwDjD3LfOfkGh1/czYc/0qhiD2ozNnH4882MVVt3JbVFkbwowNCO3KL5IoYW5wlVeGCViOuv1svZx7FbzxKzA4zGqBlRRaRWCobXaVq4yYCWbZf8eiJwt3OY+MFiSJengcFP2t0JMfzOiJ7cECvpx7neg1Rc5x+7myPJOXt2FohVRyXtD+/rDoTOyGYInJelZMjolecVHUhUNqvdZWg2J2t0jPmiLFeRD/8fOT4o+NGILb+TufCo9ceBBm3JLVn+MO2675n7qiEX/6W+188cYg3Zn5NSTjgOKfWFSAANa6raCxSoVU851oJLY11WIoYK0du0ec5E4tCnAPoKh71riTsjVIp3gKvBbEYQiNYrmH22oLQWA2AdwMnID6PX9b58dR2QKo4qag1D1Z+L/FwEKTR7osOZPWECPJIHQqPUsM5i/CH5YupVPfFA5pHUBcsesh8eO5YhyWnaVRPZn/BmdXVumZWPxMP5e28zm2uqHgFoT9CymHYNNrzrrjlXZM06HnzDxYNlI5b/QosxLmmrqDFqmogQdqk0WLkUceoAvQxHgkIyvWU69BPFr24VB6+lx75Rna6dGtrmOxDnvBojvi1/4dHjVeg8owofPe1cOnxU1ioh016s/Vudv9mhV9f35At+Sh28h1bpp8xhr09+vf47Elx3Ms6hyp6QvB3t0vnLbOhwo660cp7K0vvepabK7YJfxEWWfrC2YzJfYOjygPwfwd/1amTqa0hZ5ueebhWYVMubRTwIjj+0Oq0ohU3zfRfuL8gt59XsHdwKtxTQQ4Y2qz6gisxnm2UdlmpEkgOsZz7iEk6QOt8BuPwr+NR01LTqXmJo1C76o1N274twJvl+I069TiLpenK/miRxhyY8jvYV6W1WuSwhH9q7kuwnJMtm7IWcqs7HsnyHSqWXLSpYtZGaR1V3t0gauninFPZGtWskF65rtti48UV9uV9KM8kfDYs0pgB00S+TlzTXV6P8mxq15b9En8sz3jWSszcifZa/NuufPNnNTb031pptt0+sRSH/7UG8pzbsgtt3OG3ut7B9JzDMt2mTZuyRNIV8D54TuTrpNcHtgmMlYJeiY9XS83NYJicjRjtJSf9BZLsQv629QdDsKQhTK5CnXhpk7vMNkHzPhm0ExW/VCGApHfPyBagtZQTQmPHx7g5IXXsrQDPzIVhv2LB6Ih138iSDww1JNHrDvzUxvp73MsQBVhW8EbrReaVUcLB1R3PUXyaYG4HpJUcLVxMgDxcPkVRQpL7VTAGabDzbKcvg12t5P8TSGQkrj/gOrpnbiDHwluA73xbXts/L7u468cRWSWRtgTwlQnA47EKg0OiZDgFxAKQQUcsbGomITgeXUAAyKe03eA7Mp4gnyKQmm0LXJtEk6ddksMJCuxDmmHzmVhO+XaN2A54MIh3niw5CF7PwiXFZrnA8wOdeHLvvhdoqIDG9PDI7UnWWHq526T8y6ixJPhkuVKZnoUruOpUgOOp3iIKBjk+yi1vHo5cItHXb1PIKzGaZlRS0g5d3MV2pD8FQdGYLZ73aae/eEIUePMc4NFz8pIUfLCrrF4jVWH5gQneN3S8vANBmUXrEcKGn6hIUN95y1vpsvLwbGpzV9L0ZKTan6TDXM05236uLJcIEMKVAxKNT0K8WljuwNny3BNQRfzovA85beI9zr1AGNYnYCVkR1aGngWURUrgqR+gRrQhxW81l3CHevjvGEPzPMTxdsIfB9dfGRbZU0cg/1mcubtECX4tvaedmNAvTxCJtc2QaoUalGfENCGK7IS/O8CRpdOVca8EWCRwv2sSWE8CJPW5PCugjCXPd3h6U60cPD+bdhtXZuYB6stcoveE7Sm5MM2yvfUHXFSW7KzLmi7/EeEWL0wqcOH9MOSKjhCHHmw+JGLcYE/7SBZQCRggox0ZZTAxrlzNNXYXL5fNIjkdT4YMqVUz6p8YDt049v4OXGdg3qTrtLBUXOZf7ahPlZAY/O+7Sp0bvGSHdyQ8B1LOsplqMb9Se8VAE7gIdSZvxbRSrfl+Lk5Qaqi5QJceqjitdErcHXg/3MryljPSIAMaaloFm1cVwBJ8DNmkDqoGROSHFetrgjQ5CahuKkdH5pRPigMrgTtlFI8ufJPJSUlGgTjbBSvpRc0zypiUn6U5KZqcRoyrtzhmJ7/caeZkmVRwJQeLOG8LY6vP5ChpKhc8Js0El+n6FXqbx9ItdtLtYP92kKfaTLtCi8StLZdENJa9Ex1nOoz1kQ7qxoiZFKRyLf4O4CHRT0T/0W9F8epNKVoeyxUXhy3sQMMsJjQJEyMOjmOhMFgOmmlscV4eFi1CldU92yjwleirEKPW3bPAuEhRZV7JsKV3Lr5cETAiFuX5Nw5UlF7d2HZ96Bh0sgFIL5KGaKSoVYVlvdKpZJVP5+NZ7xDEkQhmDgsDKciazJCXJ6ZN2B3FY2f6VZyGl/t4aunGIAk/BHaS+i+SpdRfnB/OktOvyjinWNfM9Ksr6WwtCa1hCmeRI6icpFM4o8quCLsikU0tMoZI/9EqXRMpKGaWzofl4nQuVQm17d5fU5qXCQeCDqVaL9XJ9qJ08n3G3EFZS28SHEb3cdRBdtO0YcTzil3QknNKEe/smQ1fTb0XbpyNB5xAeuIlf+5KWlEY0DqJbsnzJlQxJPOVyHiKMx5Xu9FcEv1Fbg6Fhm4t+Jyy5JC1W3YO8dYLsO0PXPbxodBgttTbH3rt9Cp1lJIk2r3O1Zqu94eRbnIz2f50lWolYzuKsj4PMok4abHLO8NAC884hiXx5Fy5pWKO0bWL7uEGXaJCtznhP67SlQ4xjWIfgq6EpZ28QMtuZK7JC0RGbl9nA4XtFLug/NLMoH1pGt9IonAJqcEDLyH6TDROcbsmGPaGIxMo41IUAnQVPMPGByp4mOmh9ZQMkBAcksUK55LsZj7E5z5XuZoyWCKu6nHmDq22xI/9Z8YdxJy4kWpD16jLVrpwGLWfyOD0Wd+cBzFBxVaGv7S5k9qwh/5t/LQEXsRqI3Q9Rm3QIoaZW9GlsDaKOUyykyWuhNOprSEi0s1G4rgoiX1V743EELti+pJu5og6X0g6oTynUqlhH9k6ezyRi05NGZHz0nvp3HOJr7ebrAUFrDjbkFBObEvdQWkkUbL0pEvMU46X58vF9j9F3j6kpyetNUBItrEubW9ZvMPM4qNqLlsSBJqOH3XbNwv/cXDXNxN8iFLzUhteisYY+RlHYOuP29/Cb+L+xv+35Rv7xudnZ6ohK4cMPfCG8KI7dNmjNk/H4e84pOxn/sZHK9psfvj8ncA8qJz7O8xqbxESDivGJOZzF7o5PJLQ7g34qAWoyuA+x3btU98LT6ZyGyceIXjrqob2CAVql4VOTQPUQYvHV/g4zAuCZGvYQBtf0wmd5lilrvuEn1BXLny01B4h4SMDlYsnNpm9d7m9h578ufpef9Z4WplqWQvqo52fyUA7J24eZD5av6SyGIV9kpmHNqyvdfzcpEMw97BvknV2fq+MFHun9BT3Lsf8pbzvisWiIQvYkng+8Vxk1V+dli1u56kY50LRjaPdotvT5BwqtwyF+emo/z9J3yVUVGfKrxQtJMOAQWoQii/4dp9wgybSa5mkucmRLtEQZ/pz0tL/NVcgWAd95nEQ3Tg6tNbuyn3Iepz65L3huMUUBntllWuu4DbtOFSMSbpILV4fy6wlM0SOvi6CpLh81c1LreIvKd61uEWBcDw1lUBUW1I0Z+m/PaRlX+PQ/oxg0Ye6KUiIiTF4ADNk59Ydpt5/rkxmq9tV5Kcp/eQLUVVmBzQNVuytQCP6Ezd0G8eLxWyHpmZWJ3bAzkWTtg4lZlw42SQezEmiUPaJUuR/qklVA/87S4ArFCpALdY3QRdUw3G3XbWUp6aq9z0zUizcPa7351p9JXOZyfdZBFnqt90VzQndXB/mwf8LC9STj5kenVpNuqOQQP3mIRJj7eV21FxG8VAxKrEn3c+XfmZ800EPb9/5lIlijscUbB6da0RQaMook0zug1G0tKi/JBC4rw7/D3m4ARzAkzMcVrDcT2SyFtUdWAsFlsPDFqV3N+EjyXaoEePwroaZCiLqEzb8MW+PNE9TmTC01EzWli51PzZvUqkmyuROU+V6ik+Le/9qT6nwzUzf9tP68tYei0YaDGx6kAd7jn1cKqOCuYbiELH9zYqcc4MnRJjkeGiqaGwLImhyeKs+xKJMBlOJ05ow9gGCKZ1VpnMKoSCTbMS+X+23y042zOb5MtcY/6oBeAo1Vy89OTyhpavFP78jXCcFH0t7Gx24hMEOm2gsEfGabVpQgvFqbQKMsknFRRmuPHcZu0Su/WMFphZvB2r/EGbG72rpGGho3h+Msz0uGzJ7hNK2uqQiE1qmn0zgacKYYZBCqsxV+sjbpoVdSilW/b94n2xNb648VmNIoizqEWhBnsen+d0kbCPmRItfWqSBeOd9Wne3c6bcd6uvXOJ6WdiSsuXq0ndhqrQ4QoWUjCjYtZ0EAhnSOP1m44xkf0O7jXghrzSJWxP4a/t72jU29Vu2rvu4n7HfHkkmQOMGSS+NPeLGO5I73mC2B7+lMiBQQZRM9/9liLIfowupUFAbPBbR+lxDM6M8Ptgh1paJq5Rvs7yEuLQv/7d1oU2woFSb3FMPWQOKMuCuJ7pDDjpIclus5TeEoMBy2YdVB4fxmesaCeMNsEgTHKS5WDSGyNUOoEpcC2OFWtIRf0w27ck34/DjxRTVIcc9+kqZE6iMSiVDsiKdP/Xz5XfEhm/sBhO50p1rvJDlkyyxuJ9SPgs7YeUJBjXdeAkE+P9OQJm6SZnn1svcduI78dYmbkE2mtziPrcjVisXG78spLvbZaSFx/Rks9zP4LKn0Cdz/3JsetkT06A8f/yCgMO6Mb1Hme0JJ7b2wZz1qleqTuKBGokhPVUZ0dVu+tnQYNEY1fmkZSz6+EGZ5EzL7657mreZGR3jUfaEk458PDniBzsSmBKhDRzfXameryJv9/D5m6HIqZ0R+ouCE54Dzp4IJuuD1e4Dc5i+PpSORJfG23uVgqixAMDvchMR0nZdH5brclYwRoJRWv/rlxGRI5ffD5NPGmIDt7vDE1434pYdVZIFh89Bs94HGGJbTwrN8T6lh1HZFTOB4lWzWj6EVqxSMvC0/ljWBQ3F2kc/mO2b6tWonT2JEqEwFts8rz2h+oWNds9ceR2cb7zZvJTDppHaEhK5avWqsseWa2Dt5BBhabdWSktS80oMQrL4TvAM9b5HMmyDnO+OkkbMXfUJG7eXqTIG6lqSOEbqVR+qYdP7uWb57WEJqzyh411GAVsDinPs7KvUeXItlcMdOUWzXBH6zscymV1LLVCtc8IePojzXHF9m5b5zGwBRdzcyUJkiu938ApmAayRdJrX1PmVguWUvt2ThQ62czItTyWJMW2An/hdDfMK7SiFQlGIdAbltHz3ycoh7j9V7GxNWBpbtcSdqm4XxRwTawc3cbZ+xfSv9qQfEkDKfZTwCkqWGI/ur250ItXlMlh6vUNWEYIg9A3GzbgmbqvTN8js2YMo87CU5y6nZ4dbJLDQJj9fc7yM7tZzJDZFtqOcU8+mZjYlq4VmifI23iHb1ZoT9E+kT2dolnP1AfiOkt7PQCSykBiXy5mv637IegWSKj9IKrYZf4Lu9+I7ub+mkRdlvYzehh/jaJ9n7HUH5b2IbgeNdkY7wx1yVzxS7pbvky6+nmVUtRllEFfweUQ0/nG017WoUYSxs+j2B4FV/F62EtHlMWZXYrjGHpthnNb1x66LKZ0Qe92INWHdfR/vqp02wMS8r1G4dJqHok8KmQ7947G13a4YXbsGgHcBvRuVu1eAi4/A5+ZixmdSXM73LupB/LH7O9yxLTVXJTyBbI1S49TIROrfVCOb/czZ9pM4JsZx8kUz8dQGv7gUWKxXvTH7QM/3J2OuXXgciUhqY+cgtaOliQQVOYthBLV3xpESZT3rmfEYNZxmpBbb24CRao86prn+i9TNOh8VxRJGXJfXHATJHs1T5txgc/opYrY8XjlGQQbRcoxIBcnVsMjmU1ymmIUL4dviJXndMAJ0Yet+c7O52/p98ytlmAsGBaTAmMhimAnvp1TWNGM9BpuitGj+t810CU2UhorrjPKGtThVC8WaXw04WFnT5fTjqmPyrQ0tN3CkLsctVy2xr0ZWgiWVZ1OrlFjjxJYsOiZv2cAoOvE+7sY0I/TwWcZqMoyIKNOftwP7w++Rfg67ljfovKYa50if3fzE/8aPYVey/Nq35+nH2sLPh/fP5TsylSKGOZ4k69d2PnH43+kq++sRXHQqGArWdwhx+hpwQC6JgT2uxehYU4Zbw7oNb6/HLikPyJROGK2ouyr+vzseESp9G50T4AyFrSqOQ0rroCYP4sMDFBrHn342EyZTMlSyk47rHSq89Y9/nI3zG5lX16Z5lxphguLOcZUndL8wNcrkyjH82jqg8Bo8OYkynrxZvbFno5lUS3OPr8Ko3mX9NoRPdYOKKjD07bvgFgpZ/RF+YzkWvJ/Hs/tUbfeGzGWLxNAjfDzHHMVSDwB5SabQLsIZHiBp43FjGkaienYoDd18hu2BGwOK7U3o70K/WY/kuuKdmdrykIBUdG2mvE91L1JtTbh20mOLbk1vCAamu7utlXeGU2ooVikbU/actcgmsC1FKk2qmj3GWeIWbj4tGIxE7BLcBWUvvcnd/lYxsMV4F917fWeFB/XbINN3qGvIyTpCalz1lVewdIGqeAS/gB8Mi+sA+BqDiX3VGD2eUunTRbSY+AuDy4E3Qx3hAhwnSXX+B0zuj3eQ1miS8Vux2z/l6/BkWtjKGU72aJkOCWhGcSf3+kFkkB15vGOsQrSdFr6qTj0gBYiOlnBO41170gOWHSUoBVRU2JjwppYdhIFDfu7tIRHccSNM5KZOFDPz0TGMAjzzEpeLwTWp+kn201kU6NjbiMQJx83+LX1e1tZ10kuChJZ/XBUQ1dwaBHjTDJDqOympEk8X2M3VtVw21JksChA8w1tTefO3RJ1FMbqZ01bHHkudDB/OhLfe7P5GOHaI28ZXKTMuqo0hLWQ4HabBsGG7NbP1RiXtETz074er6w/OerJWEqjmkq2y51q1BVI+JUudnVa3ogBpzdhFE7fC7kybrAt2Z6RqDjATAUEYeYK45WMupBKQRtQlU+uNsjnzj6ZmGrezA+ASrWxQ6LMkHRXqXwNq7ftv28dUx/ZSJciDXP2SWJsWaN0FjPX9Yko6LobZ7aYW/IdUktI9apTLyHS8DyWPyuoZyxN1TK/vtfxk3HwWh6JczZC8Ftn0bIJay2g+n5wd7lm9rEsKO+svqVmi+c1j88hSCxbzrg4+HEP0Nt1/B6YW1XVm09T1CpAKjc9n18hjqsaFGdfyva1ZG0Xu3ip6N6JGpyTSqY5h4BOlpLPaOnyw45PdXTN+DtAKg7DLrLFTnWusoSBHk3s0d7YouJHq85/R09Tfc37ENXZF48eAYLnq9GLioNcwDZrC6FW6godB8JnqYUPvn0pWLfQz0lM0Yy8Mybgn84Ds3Q9bDP10bLyOV+qzxa4Rd9Dhu7cju8mMaONXK3UqmBQ9qIg7etIwEqM/kECk/Dzja4Bs1xR+Q/tCbc8IKrSGsTdJJ0vge7IG20W687uVmK6icWQ6cD3lwFzgNMGtFvO5qyJeKflGLAAcQZOrkxVwy3cWvqlGpvjmf9Qe6Ap20MPbV92DPV0OhFM4kz8Yr0ffC2zLWSQ1kqY6QdQrttR3kh1YLtQd1kCEv5hVoPIRWl5ERcUTttBIrWp6Xs5Ehh5OUUwI5aEBvuiDmUoENmnVw1FohCrbRp1A1E+XSlWVOTi7ADW+5Ohb9z1vK4qx5R5lPdGCPBJZ00mC+Ssp8VUbgpGAvXWMuWQQRbCqI6Rr2jtxZxtfP7W/8onz+yz0Gs76LaT5HX9ecyiZCB/ZR/gFtMxPsDwohoeCRtiuLxE1GM1vUEUgBv86+eehL58/P56QFGQ/MqOe/vC76L63jzmeax4exd/OKTUvkXg+fOJUHych9xt/9goJMrapSgvXrj8+8vk/N80f22Sewj6cyGqt1B6mztoeklVHHraouhvHJaG/OuBz6DHKMpFmQULU1bRWlyYE0RPXYYkUycIemN7TLtgNCJX6BqdyxDKkegO7nJK5xQ7OVYDZTMf9bVHidtk6DQX9Et+V9M7esgbsYBdEeUpsB0Xvw2kd9+rI7V+m47u+O/tq7mw7262HU1WlS9uFzsV6JxIHNmUCy0QS9e077JGRFbG65z3/dOKB/Zk+yDdKpUmdXjn/aS3N5nv4fK7bMHHmPlHd4E2+iTbV5rpzScRnxk6KARuDTJ8Q1LpK2mP8gj1EbuJ9RIyY+EWK4hCiIDBAS1Tm2IEXAFfgKPgdL9O6mAa06wjCcUAL6EsxPQWO9VNegBPm/0GgkZbDxCynxujX/92vmGcjZRMAY45puak2sFLCLSwXpEsyy5fnF0jGJBhm+fNSHKKUUfy+276A7/feLOFxxUuHRNJI2Osenxyvf8DAGObT60pfTTlhEg9u/KKkhJqm5U1/+BEcSkpFDA5XeCqxwXmPac1jcuZ3JWQ+p0NdWzb/5v1ZvF8GtMTFFEdQjpLO0bwPb0BHNWnip3liDXI2fXf05jjvfJ0NpjLCUgfTh9CMFYVFKEd4Z/OG/2C+N435mnK+9t1gvCiVcaaH7rK4+PjCvpVNiz+t2QyqH1O8x3JKZVl6Q+Lp/XK8wMjVMslOq9FdSw5FtUs/CptXH9PW+wbWHgrV17R5jTVOtGtKFu3nb80T+E0tv9QkzW3J2dbaw/8ddAKZ0pxIaEqLjlPrji3VgJ3GvdFvlqD8075woxh4fVt0JZE0KVFsAvqhe0dqN9b35jtSpnYMXkU+vZq+IAHad3IHc2s/LYrnD1anfG46IFiMIr9oNbZDWvwthqYNqOigaKd/XlLU4XHfk/PXIjPsLy/9/kAtQ+/wKH+hI/IROWj5FPvTZAT9f7j4ZXQyG4M0TujMAFXYkKvEHv1xhySekgXGGqNxWeWKlf8dDAlLuB1cb/qOD+rk7cmwt+1yKpk9cudqBanTi6zTbXRtV8qylNtjyOVKy1HTz0GW9rjt6sSjAZcT5R+KdtyYb0zyqG9pSLuCw5WBwAn7fjBjKLLoxLXMI+52L9cLwIR2B6OllJZLHJ8vDxmWdtF+QJnmt1rsHPIWY20lftk8fYePkAIg6Hgn532QoIpegMxiWgAOfe5/U44APR8Ac0NeZrVh3gEhs12W+tVSiWiUQekf/YBECUy5fdYbA08dd7VzPAP9aiVcIB9k6tY7WdJ1wNV+bHeydNtmC6G5ICtFC1ZwmJU/j8hf0I8TRVKSiz5oYIa93EpUI78X8GYIAZabx47/n8LDAAJ0nNtP1rpROprqKMBRecShca6qXuTSI3jZBLOB3Vp381B5rCGhjSvh/NSVkYp2qIdP/Bg=";
10362
10363},{}],93:[function(require,module,exports){
10364/* Copyright 2013 Google Inc. All Rights Reserved.
10365
10366 Licensed under the Apache License, Version 2.0 (the "License");
10367 you may not use this file except in compliance with the License.
10368 You may obtain a copy of the License at
10369
10370 http://www.apache.org/licenses/LICENSE-2.0
10371
10372 Unless required by applicable law or agreed to in writing, software
10373 distributed under the License is distributed on an "AS IS" BASIS,
10374 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10375 See the License for the specific language governing permissions and
10376 limitations under the License.
10377
10378 Collection of static dictionary words.
10379*/
10380
10381var data = require('./dictionary-data');
10382exports.init = function() {
10383 exports.dictionary = data.init();
10384};
10385
10386exports.offsetsByLength = new Uint32Array([
10387 0, 0, 0, 0, 0, 4096, 9216, 21504, 35840, 44032,
10388 53248, 63488, 74752, 87040, 93696, 100864, 104704, 106752, 108928, 113536,
10389 115968, 118528, 119872, 121280, 122016,
10390]);
10391
10392exports.sizeBitsByLength = new Uint8Array([
10393 0, 0, 0, 0, 10, 10, 11, 11, 10, 10,
10394 10, 10, 10, 9, 9, 8, 7, 7, 8, 7,
10395 7, 6, 6, 5, 5,
10396]);
10397
10398exports.minDictionaryWordLength = 4;
10399exports.maxDictionaryWordLength = 24;
10400
10401},{"./dictionary-data":91}],94:[function(require,module,exports){
10402function HuffmanCode(bits, value) {
10403 this.bits = bits; /* number of bits used for this symbol */
10404 this.value = value; /* symbol value or table offset */
10405}
10406
10407exports.HuffmanCode = HuffmanCode;
10408
10409var MAX_LENGTH = 15;
10410
10411/* Returns reverse(reverse(key, len) + 1, len), where reverse(key, len) is the
10412 bit-wise reversal of the len least significant bits of key. */
10413function GetNextKey(key, len) {
10414 var step = 1 << (len - 1);
10415 while (key & step) {
10416 step >>= 1;
10417 }
10418 return (key & (step - 1)) + step;
10419}
10420
10421/* Stores code in table[0], table[step], table[2*step], ..., table[end] */
10422/* Assumes that end is an integer multiple of step */
10423function ReplicateValue(table, i, step, end, code) {
10424 do {
10425 end -= step;
10426 table[i + end] = new HuffmanCode(code.bits, code.value);
10427 } while (end > 0);
10428}
10429
10430/* Returns the table width of the next 2nd level table. count is the histogram
10431 of bit lengths for the remaining symbols, len is the code length of the next
10432 processed symbol */
10433function NextTableBitSize(count, len, root_bits) {
10434 var left = 1 << (len - root_bits);
10435 while (len < MAX_LENGTH) {
10436 left -= count[len];
10437 if (left <= 0) break;
10438 ++len;
10439 left <<= 1;
10440 }
10441 return len - root_bits;
10442}
10443
10444exports.BrotliBuildHuffmanTable = function(root_table, table, root_bits, code_lengths, code_lengths_size) {
10445 var start_table = table;
10446 var code; /* current table entry */
10447 var len; /* current code length */
10448 var symbol; /* symbol index in original or sorted table */
10449 var key; /* reversed prefix code */
10450 var step; /* step size to replicate values in current table */
10451 var low; /* low bits for current root entry */
10452 var mask; /* mask for low bits */
10453 var table_bits; /* key length of current table */
10454 var table_size; /* size of current table */
10455 var total_size; /* sum of root table size and 2nd level table sizes */
10456 var sorted; /* symbols sorted by code length */
10457 var count = new Int32Array(MAX_LENGTH + 1); /* number of codes of each length */
10458 var offset = new Int32Array(MAX_LENGTH + 1); /* offsets in sorted table for each length */
10459
10460 sorted = new Int32Array(code_lengths_size);
10461
10462 /* build histogram of code lengths */
10463 for (symbol = 0; symbol < code_lengths_size; symbol++) {
10464 count[code_lengths[symbol]]++;
10465 }
10466
10467 /* generate offsets into sorted symbol table by code length */
10468 offset[1] = 0;
10469 for (len = 1; len < MAX_LENGTH; len++) {
10470 offset[len + 1] = offset[len] + count[len];
10471 }
10472
10473 /* sort symbols by length, by symbol order within each length */
10474 for (symbol = 0; symbol < code_lengths_size; symbol++) {
10475 if (code_lengths[symbol] !== 0) {
10476 sorted[offset[code_lengths[symbol]]++] = symbol;
10477 }
10478 }
10479
10480 table_bits = root_bits;
10481 table_size = 1 << table_bits;
10482 total_size = table_size;
10483
10484 /* special case code with only one value */
10485 if (offset[MAX_LENGTH] === 1) {
10486 for (key = 0; key < total_size; ++key) {
10487 root_table[table + key] = new HuffmanCode(0, sorted[0] & 0xffff);
10488 }
10489
10490 return total_size;
10491 }
10492
10493 /* fill in root table */
10494 key = 0;
10495 symbol = 0;
10496 for (len = 1, step = 2; len <= root_bits; ++len, step <<= 1) {
10497 for (; count[len] > 0; --count[len]) {
10498 code = new HuffmanCode(len & 0xff, sorted[symbol++] & 0xffff);
10499 ReplicateValue(root_table, table + key, step, table_size, code);
10500 key = GetNextKey(key, len);
10501 }
10502 }
10503
10504 /* fill in 2nd level tables and add pointers to root table */
10505 mask = total_size - 1;
10506 low = -1;
10507 for (len = root_bits + 1, step = 2; len <= MAX_LENGTH; ++len, step <<= 1) {
10508 for (; count[len] > 0; --count[len]) {
10509 if ((key & mask) !== low) {
10510 table += table_size;
10511 table_bits = NextTableBitSize(count, len, root_bits);
10512 table_size = 1 << table_bits;
10513 total_size += table_size;
10514 low = key & mask;
10515 root_table[start_table + low] = new HuffmanCode((table_bits + root_bits) & 0xff, ((table - start_table) - low) & 0xffff);
10516 }
10517 code = new HuffmanCode((len - root_bits) & 0xff, sorted[symbol++] & 0xffff);
10518 ReplicateValue(root_table, table + (key >> root_bits), step, table_size, code);
10519 key = GetNextKey(key, len);
10520 }
10521 }
10522
10523 return total_size;
10524}
10525
10526},{}],95:[function(require,module,exports){
10527/* Copyright 2013 Google Inc. All Rights Reserved.
10528
10529 Licensed under the Apache License, Version 2.0 (the "License");
10530 you may not use this file except in compliance with the License.
10531 You may obtain a copy of the License at
10532
10533 http://www.apache.org/licenses/LICENSE-2.0
10534
10535 Unless required by applicable law or agreed to in writing, software
10536 distributed under the License is distributed on an "AS IS" BASIS,
10537 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10538 See the License for the specific language governing permissions and
10539 limitations under the License.
10540
10541 Lookup tables to map prefix codes to value ranges. This is used during
10542 decoding of the block lengths, literal insertion lengths and copy lengths.
10543*/
10544
10545/* Represents the range of values belonging to a prefix code: */
10546/* [offset, offset + 2^nbits) */
10547function PrefixCodeRange(offset, nbits) {
10548 this.offset = offset;
10549 this.nbits = nbits;
10550}
10551
10552exports.kBlockLengthPrefixCode = [
10553 new PrefixCodeRange(1, 2), new PrefixCodeRange(5, 2), new PrefixCodeRange(9, 2), new PrefixCodeRange(13, 2),
10554 new PrefixCodeRange(17, 3), new PrefixCodeRange(25, 3), new PrefixCodeRange(33, 3), new PrefixCodeRange(41, 3),
10555 new PrefixCodeRange(49, 4), new PrefixCodeRange(65, 4), new PrefixCodeRange(81, 4), new PrefixCodeRange(97, 4),
10556 new PrefixCodeRange(113, 5), new PrefixCodeRange(145, 5), new PrefixCodeRange(177, 5), new PrefixCodeRange(209, 5),
10557 new PrefixCodeRange(241, 6), new PrefixCodeRange(305, 6), new PrefixCodeRange(369, 7), new PrefixCodeRange(497, 8),
10558 new PrefixCodeRange(753, 9), new PrefixCodeRange(1265, 10), new PrefixCodeRange(2289, 11), new PrefixCodeRange(4337, 12),
10559 new PrefixCodeRange(8433, 13), new PrefixCodeRange(16625, 24)
10560];
10561
10562exports.kInsertLengthPrefixCode = [
10563 new PrefixCodeRange(0, 0), new PrefixCodeRange(1, 0), new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0),
10564 new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0), new PrefixCodeRange(6, 1), new PrefixCodeRange(8, 1),
10565 new PrefixCodeRange(10, 2), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 3), new PrefixCodeRange(26, 3),
10566 new PrefixCodeRange(34, 4), new PrefixCodeRange(50, 4), new PrefixCodeRange(66, 5), new PrefixCodeRange(98, 5),
10567 new PrefixCodeRange(130, 6), new PrefixCodeRange(194, 7), new PrefixCodeRange(322, 8), new PrefixCodeRange(578, 9),
10568 new PrefixCodeRange(1090, 10), new PrefixCodeRange(2114, 12), new PrefixCodeRange(6210, 14), new PrefixCodeRange(22594, 24),
10569];
10570
10571exports.kCopyLengthPrefixCode = [
10572 new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0), new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0),
10573 new PrefixCodeRange(6, 0), new PrefixCodeRange(7, 0), new PrefixCodeRange(8, 0), new PrefixCodeRange(9, 0),
10574 new PrefixCodeRange(10, 1), new PrefixCodeRange(12, 1), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 2),
10575 new PrefixCodeRange(22, 3), new PrefixCodeRange(30, 3), new PrefixCodeRange(38, 4), new PrefixCodeRange(54, 4),
10576 new PrefixCodeRange(70, 5), new PrefixCodeRange(102, 5), new PrefixCodeRange(134, 6), new PrefixCodeRange(198, 7),
10577 new PrefixCodeRange(326, 8), new PrefixCodeRange(582, 9), new PrefixCodeRange(1094, 10), new PrefixCodeRange(2118, 24),
10578];
10579
10580exports.kInsertRangeLut = [
10581 0, 0, 8, 8, 0, 16, 8, 16, 16,
10582];
10583
10584exports.kCopyRangeLut = [
10585 0, 8, 0, 8, 16, 0, 16, 8, 16,
10586];
10587
10588},{}],96:[function(require,module,exports){
10589function BrotliInput(buffer) {
10590 this.buffer = buffer;
10591 this.pos = 0;
10592}
10593
10594BrotliInput.prototype.read = function(buf, i, count) {
10595 if (this.pos + count > this.buffer.length) {
10596 count = this.buffer.length - this.pos;
10597 }
10598
10599 for (var p = 0; p < count; p++)
10600 buf[i + p] = this.buffer[this.pos + p];
10601
10602 this.pos += count;
10603 return count;
10604}
10605
10606exports.BrotliInput = BrotliInput;
10607
10608function BrotliOutput(buf) {
10609 this.buffer = buf;
10610 this.pos = 0;
10611}
10612
10613BrotliOutput.prototype.write = function(buf, count) {
10614 if (this.pos + count > this.buffer.length)
10615 throw new Error('Output buffer is not large enough');
10616
10617 this.buffer.set(buf.subarray(0, count), this.pos);
10618 this.pos += count;
10619 return count;
10620};
10621
10622exports.BrotliOutput = BrotliOutput;
10623
10624},{}],97:[function(require,module,exports){
10625/* Copyright 2013 Google Inc. All Rights Reserved.
10626
10627 Licensed under the Apache License, Version 2.0 (the "License");
10628 you may not use this file except in compliance with the License.
10629 You may obtain a copy of the License at
10630
10631 http://www.apache.org/licenses/LICENSE-2.0
10632
10633 Unless required by applicable law or agreed to in writing, software
10634 distributed under the License is distributed on an "AS IS" BASIS,
10635 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10636 See the License for the specific language governing permissions and
10637 limitations under the License.
10638
10639 Transformations on dictionary words.
10640*/
10641
10642var BrotliDictionary = require('./dictionary');
10643
10644var kIdentity = 0;
10645var kOmitLast1 = 1;
10646var kOmitLast2 = 2;
10647var kOmitLast3 = 3;
10648var kOmitLast4 = 4;
10649var kOmitLast5 = 5;
10650var kOmitLast6 = 6;
10651var kOmitLast7 = 7;
10652var kOmitLast8 = 8;
10653var kOmitLast9 = 9;
10654var kUppercaseFirst = 10;
10655var kUppercaseAll = 11;
10656var kOmitFirst1 = 12;
10657var kOmitFirst2 = 13;
10658var kOmitFirst3 = 14;
10659var kOmitFirst4 = 15;
10660var kOmitFirst5 = 16;
10661var kOmitFirst6 = 17;
10662var kOmitFirst7 = 18;
10663var kOmitFirst8 = 19;
10664var kOmitFirst9 = 20;
10665
10666function Transform(prefix, transform, suffix) {
10667 this.prefix = new Uint8Array(prefix.length);
10668 this.transform = transform;
10669 this.suffix = new Uint8Array(suffix.length);
10670
10671 for (var i = 0; i < prefix.length; i++)
10672 this.prefix[i] = prefix.charCodeAt(i);
10673
10674 for (var i = 0; i < suffix.length; i++)
10675 this.suffix[i] = suffix.charCodeAt(i);
10676}
10677
10678var kTransforms = [
10679 new Transform( "", kIdentity, "" ),
10680 new Transform( "", kIdentity, " " ),
10681 new Transform( " ", kIdentity, " " ),
10682 new Transform( "", kOmitFirst1, "" ),
10683 new Transform( "", kUppercaseFirst, " " ),
10684 new Transform( "", kIdentity, " the " ),
10685 new Transform( " ", kIdentity, "" ),
10686 new Transform( "s ", kIdentity, " " ),
10687 new Transform( "", kIdentity, " of " ),
10688 new Transform( "", kUppercaseFirst, "" ),
10689 new Transform( "", kIdentity, " and " ),
10690 new Transform( "", kOmitFirst2, "" ),
10691 new Transform( "", kOmitLast1, "" ),
10692 new Transform( ", ", kIdentity, " " ),
10693 new Transform( "", kIdentity, ", " ),
10694 new Transform( " ", kUppercaseFirst, " " ),
10695 new Transform( "", kIdentity, " in " ),
10696 new Transform( "", kIdentity, " to " ),
10697 new Transform( "e ", kIdentity, " " ),
10698 new Transform( "", kIdentity, "\"" ),
10699 new Transform( "", kIdentity, "." ),
10700 new Transform( "", kIdentity, "\">" ),
10701 new Transform( "", kIdentity, "\n" ),
10702 new Transform( "", kOmitLast3, "" ),
10703 new Transform( "", kIdentity, "]" ),
10704 new Transform( "", kIdentity, " for " ),
10705 new Transform( "", kOmitFirst3, "" ),
10706 new Transform( "", kOmitLast2, "" ),
10707 new Transform( "", kIdentity, " a " ),
10708 new Transform( "", kIdentity, " that " ),
10709 new Transform( " ", kUppercaseFirst, "" ),
10710 new Transform( "", kIdentity, ". " ),
10711 new Transform( ".", kIdentity, "" ),
10712 new Transform( " ", kIdentity, ", " ),
10713 new Transform( "", kOmitFirst4, "" ),
10714 new Transform( "", kIdentity, " with " ),
10715 new Transform( "", kIdentity, "'" ),
10716 new Transform( "", kIdentity, " from " ),
10717 new Transform( "", kIdentity, " by " ),
10718 new Transform( "", kOmitFirst5, "" ),
10719 new Transform( "", kOmitFirst6, "" ),
10720 new Transform( " the ", kIdentity, "" ),
10721 new Transform( "", kOmitLast4, "" ),
10722 new Transform( "", kIdentity, ". The " ),
10723 new Transform( "", kUppercaseAll, "" ),
10724 new Transform( "", kIdentity, " on " ),
10725 new Transform( "", kIdentity, " as " ),
10726 new Transform( "", kIdentity, " is " ),
10727 new Transform( "", kOmitLast7, "" ),
10728 new Transform( "", kOmitLast1, "ing " ),
10729 new Transform( "", kIdentity, "\n\t" ),
10730 new Transform( "", kIdentity, ":" ),
10731 new Transform( " ", kIdentity, ". " ),
10732 new Transform( "", kIdentity, "ed " ),
10733 new Transform( "", kOmitFirst9, "" ),
10734 new Transform( "", kOmitFirst7, "" ),
10735 new Transform( "", kOmitLast6, "" ),
10736 new Transform( "", kIdentity, "(" ),
10737 new Transform( "", kUppercaseFirst, ", " ),
10738 new Transform( "", kOmitLast8, "" ),
10739 new Transform( "", kIdentity, " at " ),
10740 new Transform( "", kIdentity, "ly " ),
10741 new Transform( " the ", kIdentity, " of " ),
10742 new Transform( "", kOmitLast5, "" ),
10743 new Transform( "", kOmitLast9, "" ),
10744 new Transform( " ", kUppercaseFirst, ", " ),
10745 new Transform( "", kUppercaseFirst, "\"" ),
10746 new Transform( ".", kIdentity, "(" ),
10747 new Transform( "", kUppercaseAll, " " ),
10748 new Transform( "", kUppercaseFirst, "\">" ),
10749 new Transform( "", kIdentity, "=\"" ),
10750 new Transform( " ", kIdentity, "." ),
10751 new Transform( ".com/", kIdentity, "" ),
10752 new Transform( " the ", kIdentity, " of the " ),
10753 new Transform( "", kUppercaseFirst, "'" ),
10754 new Transform( "", kIdentity, ". This " ),
10755 new Transform( "", kIdentity, "," ),
10756 new Transform( ".", kIdentity, " " ),
10757 new Transform( "", kUppercaseFirst, "(" ),
10758 new Transform( "", kUppercaseFirst, "." ),
10759 new Transform( "", kIdentity, " not " ),
10760 new Transform( " ", kIdentity, "=\"" ),
10761 new Transform( "", kIdentity, "er " ),
10762 new Transform( " ", kUppercaseAll, " " ),
10763 new Transform( "", kIdentity, "al " ),
10764 new Transform( " ", kUppercaseAll, "" ),
10765 new Transform( "", kIdentity, "='" ),
10766 new Transform( "", kUppercaseAll, "\"" ),
10767 new Transform( "", kUppercaseFirst, ". " ),
10768 new Transform( " ", kIdentity, "(" ),
10769 new Transform( "", kIdentity, "ful " ),
10770 new Transform( " ", kUppercaseFirst, ". " ),
10771 new Transform( "", kIdentity, "ive " ),
10772 new Transform( "", kIdentity, "less " ),
10773 new Transform( "", kUppercaseAll, "'" ),
10774 new Transform( "", kIdentity, "est " ),
10775 new Transform( " ", kUppercaseFirst, "." ),
10776 new Transform( "", kUppercaseAll, "\">" ),
10777 new Transform( " ", kIdentity, "='" ),
10778 new Transform( "", kUppercaseFirst, "," ),
10779 new Transform( "", kIdentity, "ize " ),
10780 new Transform( "", kUppercaseAll, "." ),
10781 new Transform( "\xc2\xa0", kIdentity, "" ),
10782 new Transform( " ", kIdentity, "," ),
10783 new Transform( "", kUppercaseFirst, "=\"" ),
10784 new Transform( "", kUppercaseAll, "=\"" ),
10785 new Transform( "", kIdentity, "ous " ),
10786 new Transform( "", kUppercaseAll, ", " ),
10787 new Transform( "", kUppercaseFirst, "='" ),
10788 new Transform( " ", kUppercaseFirst, "," ),
10789 new Transform( " ", kUppercaseAll, "=\"" ),
10790 new Transform( " ", kUppercaseAll, ", " ),
10791 new Transform( "", kUppercaseAll, "," ),
10792 new Transform( "", kUppercaseAll, "(" ),
10793 new Transform( "", kUppercaseAll, ". " ),
10794 new Transform( " ", kUppercaseAll, "." ),
10795 new Transform( "", kUppercaseAll, "='" ),
10796 new Transform( " ", kUppercaseAll, ". " ),
10797 new Transform( " ", kUppercaseFirst, "=\"" ),
10798 new Transform( " ", kUppercaseAll, "='" ),
10799 new Transform( " ", kUppercaseFirst, "='" )
10800];
10801
10802exports.kTransforms = kTransforms;
10803exports.kNumTransforms = kTransforms.length;
10804
10805function ToUpperCase(p, i) {
10806 if (p[i] < 0xc0) {
10807 if (p[i] >= 97 && p[i] <= 122) {
10808 p[i] ^= 32;
10809 }
10810 return 1;
10811 }
10812
10813 /* An overly simplified uppercasing model for utf-8. */
10814 if (p[i] < 0xe0) {
10815 p[i + 1] ^= 32;
10816 return 2;
10817 }
10818
10819 /* An arbitrary transform for three byte characters. */
10820 p[i + 2] ^= 5;
10821 return 3;
10822}
10823
10824exports.transformDictionaryWord = function(dst, idx, word, len, transform) {
10825 var prefix = kTransforms[transform].prefix;
10826 var suffix = kTransforms[transform].suffix;
10827 var t = kTransforms[transform].transform;
10828 var skip = t < kOmitFirst1 ? 0 : t - (kOmitFirst1 - 1);
10829 var i = 0;
10830 var start_idx = idx;
10831 var uppercase;
10832
10833 if (skip > len) {
10834 skip = len;
10835 }
10836
10837 var prefix_pos = 0;
10838 while (prefix_pos < prefix.length) {
10839 dst[idx++] = prefix[prefix_pos++];
10840 }
10841
10842 word += skip;
10843 len -= skip;
10844
10845 if (t <= kOmitLast9) {
10846 len -= t;
10847 }
10848
10849 for (i = 0; i < len; i++) {
10850 dst[idx++] = BrotliDictionary.dictionary[word + i];
10851 }
10852
10853 uppercase = idx - len;
10854
10855 if (t === kUppercaseFirst) {
10856 ToUpperCase(dst, uppercase);
10857 } else if (t === kUppercaseAll) {
10858 while (len > 0) {
10859 var step = ToUpperCase(dst, uppercase);
10860 uppercase += step;
10861 len -= step;
10862 }
10863 }
10864
10865 var suffix_pos = 0;
10866 while (suffix_pos < suffix.length) {
10867 dst[idx++] = suffix[suffix_pos++];
10868 }
10869
10870 return idx - start_idx;
10871}
10872
10873},{"./dictionary":93}],98:[function(require,module,exports){
10874module.exports = require('./dec/decode').BrotliDecompressBuffer;
10875
10876},{"./dec/decode":90}],99:[function(require,module,exports){
10877
10878},{}],100:[function(require,module,exports){
10879(function (process,Buffer){(function (){
10880'use strict';
10881/* eslint camelcase: "off" */
10882
10883var assert = require('assert');
10884
10885var Zstream = require('pako/lib/zlib/zstream');
10886var zlib_deflate = require('pako/lib/zlib/deflate.js');
10887var zlib_inflate = require('pako/lib/zlib/inflate.js');
10888var constants = require('pako/lib/zlib/constants');
10889
10890for (var key in constants) {
10891 exports[key] = constants[key];
10892}
10893
10894// zlib modes
10895exports.NONE = 0;
10896exports.DEFLATE = 1;
10897exports.INFLATE = 2;
10898exports.GZIP = 3;
10899exports.GUNZIP = 4;
10900exports.DEFLATERAW = 5;
10901exports.INFLATERAW = 6;
10902exports.UNZIP = 7;
10903
10904var GZIP_HEADER_ID1 = 0x1f;
10905var GZIP_HEADER_ID2 = 0x8b;
10906
10907/**
10908 * Emulate Node's zlib C++ layer for use by the JS layer in index.js
10909 */
10910function Zlib(mode) {
10911 if (typeof mode !== 'number' || mode < exports.DEFLATE || mode > exports.UNZIP) {
10912 throw new TypeError('Bad argument');
10913 }
10914
10915 this.dictionary = null;
10916 this.err = 0;
10917 this.flush = 0;
10918 this.init_done = false;
10919 this.level = 0;
10920 this.memLevel = 0;
10921 this.mode = mode;
10922 this.strategy = 0;
10923 this.windowBits = 0;
10924 this.write_in_progress = false;
10925 this.pending_close = false;
10926 this.gzip_id_bytes_read = 0;
10927}
10928
10929Zlib.prototype.close = function () {
10930 if (this.write_in_progress) {
10931 this.pending_close = true;
10932 return;
10933 }
10934
10935 this.pending_close = false;
10936
10937 assert(this.init_done, 'close before init');
10938 assert(this.mode <= exports.UNZIP);
10939
10940 if (this.mode === exports.DEFLATE || this.mode === exports.GZIP || this.mode === exports.DEFLATERAW) {
10941 zlib_deflate.deflateEnd(this.strm);
10942 } else if (this.mode === exports.INFLATE || this.mode === exports.GUNZIP || this.mode === exports.INFLATERAW || this.mode === exports.UNZIP) {
10943 zlib_inflate.inflateEnd(this.strm);
10944 }
10945
10946 this.mode = exports.NONE;
10947
10948 this.dictionary = null;
10949};
10950
10951Zlib.prototype.write = function (flush, input, in_off, in_len, out, out_off, out_len) {
10952 return this._write(true, flush, input, in_off, in_len, out, out_off, out_len);
10953};
10954
10955Zlib.prototype.writeSync = function (flush, input, in_off, in_len, out, out_off, out_len) {
10956 return this._write(false, flush, input, in_off, in_len, out, out_off, out_len);
10957};
10958
10959Zlib.prototype._write = function (async, flush, input, in_off, in_len, out, out_off, out_len) {
10960 assert.equal(arguments.length, 8);
10961
10962 assert(this.init_done, 'write before init');
10963 assert(this.mode !== exports.NONE, 'already finalized');
10964 assert.equal(false, this.write_in_progress, 'write already in progress');
10965 assert.equal(false, this.pending_close, 'close is pending');
10966
10967 this.write_in_progress = true;
10968
10969 assert.equal(false, flush === undefined, 'must provide flush value');
10970
10971 this.write_in_progress = true;
10972
10973 if (flush !== exports.Z_NO_FLUSH && flush !== exports.Z_PARTIAL_FLUSH && flush !== exports.Z_SYNC_FLUSH && flush !== exports.Z_FULL_FLUSH && flush !== exports.Z_FINISH && flush !== exports.Z_BLOCK) {
10974 throw new Error('Invalid flush value');
10975 }
10976
10977 if (input == null) {
10978 input = Buffer.alloc(0);
10979 in_len = 0;
10980 in_off = 0;
10981 }
10982
10983 this.strm.avail_in = in_len;
10984 this.strm.input = input;
10985 this.strm.next_in = in_off;
10986 this.strm.avail_out = out_len;
10987 this.strm.output = out;
10988 this.strm.next_out = out_off;
10989 this.flush = flush;
10990
10991 if (!async) {
10992 // sync version
10993 this._process();
10994
10995 if (this._checkError()) {
10996 return this._afterSync();
10997 }
10998 return;
10999 }
11000
11001 // async version
11002 var self = this;
11003 process.nextTick(function () {
11004 self._process();
11005 self._after();
11006 });
11007
11008 return this;
11009};
11010
11011Zlib.prototype._afterSync = function () {
11012 var avail_out = this.strm.avail_out;
11013 var avail_in = this.strm.avail_in;
11014
11015 this.write_in_progress = false;
11016
11017 return [avail_in, avail_out];
11018};
11019
11020Zlib.prototype._process = function () {
11021 var next_expected_header_byte = null;
11022
11023 // If the avail_out is left at 0, then it means that it ran out
11024 // of room. If there was avail_out left over, then it means
11025 // that all of the input was consumed.
11026 switch (this.mode) {
11027 case exports.DEFLATE:
11028 case exports.GZIP:
11029 case exports.DEFLATERAW:
11030 this.err = zlib_deflate.deflate(this.strm, this.flush);
11031 break;
11032 case exports.UNZIP:
11033 if (this.strm.avail_in > 0) {
11034 next_expected_header_byte = this.strm.next_in;
11035 }
11036
11037 switch (this.gzip_id_bytes_read) {
11038 case 0:
11039 if (next_expected_header_byte === null) {
11040 break;
11041 }
11042
11043 if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID1) {
11044 this.gzip_id_bytes_read = 1;
11045 next_expected_header_byte++;
11046
11047 if (this.strm.avail_in === 1) {
11048 // The only available byte was already read.
11049 break;
11050 }
11051 } else {
11052 this.mode = exports.INFLATE;
11053 break;
11054 }
11055
11056 // fallthrough
11057 case 1:
11058 if (next_expected_header_byte === null) {
11059 break;
11060 }
11061
11062 if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID2) {
11063 this.gzip_id_bytes_read = 2;
11064 this.mode = exports.GUNZIP;
11065 } else {
11066 // There is no actual difference between INFLATE and INFLATERAW
11067 // (after initialization).
11068 this.mode = exports.INFLATE;
11069 }
11070
11071 break;
11072 default:
11073 throw new Error('invalid number of gzip magic number bytes read');
11074 }
11075
11076 // fallthrough
11077 case exports.INFLATE:
11078 case exports.GUNZIP:
11079 case exports.INFLATERAW:
11080 this.err = zlib_inflate.inflate(this.strm, this.flush
11081
11082 // If data was encoded with dictionary
11083 );if (this.err === exports.Z_NEED_DICT && this.dictionary) {
11084 // Load it
11085 this.err = zlib_inflate.inflateSetDictionary(this.strm, this.dictionary);
11086 if (this.err === exports.Z_OK) {
11087 // And try to decode again
11088 this.err = zlib_inflate.inflate(this.strm, this.flush);
11089 } else if (this.err === exports.Z_DATA_ERROR) {
11090 // Both inflateSetDictionary() and inflate() return Z_DATA_ERROR.
11091 // Make it possible for After() to tell a bad dictionary from bad
11092 // input.
11093 this.err = exports.Z_NEED_DICT;
11094 }
11095 }
11096 while (this.strm.avail_in > 0 && this.mode === exports.GUNZIP && this.err === exports.Z_STREAM_END && this.strm.next_in[0] !== 0x00) {
11097 // Bytes remain in input buffer. Perhaps this is another compressed
11098 // member in the same archive, or just trailing garbage.
11099 // Trailing zero bytes are okay, though, since they are frequently
11100 // used for padding.
11101
11102 this.reset();
11103 this.err = zlib_inflate.inflate(this.strm, this.flush);
11104 }
11105 break;
11106 default:
11107 throw new Error('Unknown mode ' + this.mode);
11108 }
11109};
11110
11111Zlib.prototype._checkError = function () {
11112 // Acceptable error states depend on the type of zlib stream.
11113 switch (this.err) {
11114 case exports.Z_OK:
11115 case exports.Z_BUF_ERROR:
11116 if (this.strm.avail_out !== 0 && this.flush === exports.Z_FINISH) {
11117 this._error('unexpected end of file');
11118 return false;
11119 }
11120 break;
11121 case exports.Z_STREAM_END:
11122 // normal statuses, not fatal
11123 break;
11124 case exports.Z_NEED_DICT:
11125 if (this.dictionary == null) {
11126 this._error('Missing dictionary');
11127 } else {
11128 this._error('Bad dictionary');
11129 }
11130 return false;
11131 default:
11132 // something else.
11133 this._error('Zlib error');
11134 return false;
11135 }
11136
11137 return true;
11138};
11139
11140Zlib.prototype._after = function () {
11141 if (!this._checkError()) {
11142 return;
11143 }
11144
11145 var avail_out = this.strm.avail_out;
11146 var avail_in = this.strm.avail_in;
11147
11148 this.write_in_progress = false;
11149
11150 // call the write() cb
11151 this.callback(avail_in, avail_out);
11152
11153 if (this.pending_close) {
11154 this.close();
11155 }
11156};
11157
11158Zlib.prototype._error = function (message) {
11159 if (this.strm.msg) {
11160 message = this.strm.msg;
11161 }
11162 this.onerror(message, this.err
11163
11164 // no hope of rescue.
11165 );this.write_in_progress = false;
11166 if (this.pending_close) {
11167 this.close();
11168 }
11169};
11170
11171Zlib.prototype.init = function (windowBits, level, memLevel, strategy, dictionary) {
11172 assert(arguments.length === 4 || arguments.length === 5, 'init(windowBits, level, memLevel, strategy, [dictionary])');
11173
11174 assert(windowBits >= 8 && windowBits <= 15, 'invalid windowBits');
11175 assert(level >= -1 && level <= 9, 'invalid compression level');
11176
11177 assert(memLevel >= 1 && memLevel <= 9, 'invalid memlevel');
11178
11179 assert(strategy === exports.Z_FILTERED || strategy === exports.Z_HUFFMAN_ONLY || strategy === exports.Z_RLE || strategy === exports.Z_FIXED || strategy === exports.Z_DEFAULT_STRATEGY, 'invalid strategy');
11180
11181 this._init(level, windowBits, memLevel, strategy, dictionary);
11182 this._setDictionary();
11183};
11184
11185Zlib.prototype.params = function () {
11186 throw new Error('deflateParams Not supported');
11187};
11188
11189Zlib.prototype.reset = function () {
11190 this._reset();
11191 this._setDictionary();
11192};
11193
11194Zlib.prototype._init = function (level, windowBits, memLevel, strategy, dictionary) {
11195 this.level = level;
11196 this.windowBits = windowBits;
11197 this.memLevel = memLevel;
11198 this.strategy = strategy;
11199
11200 this.flush = exports.Z_NO_FLUSH;
11201
11202 this.err = exports.Z_OK;
11203
11204 if (this.mode === exports.GZIP || this.mode === exports.GUNZIP) {
11205 this.windowBits += 16;
11206 }
11207
11208 if (this.mode === exports.UNZIP) {
11209 this.windowBits += 32;
11210 }
11211
11212 if (this.mode === exports.DEFLATERAW || this.mode === exports.INFLATERAW) {
11213 this.windowBits = -1 * this.windowBits;
11214 }
11215
11216 this.strm = new Zstream();
11217
11218 switch (this.mode) {
11219 case exports.DEFLATE:
11220 case exports.GZIP:
11221 case exports.DEFLATERAW:
11222 this.err = zlib_deflate.deflateInit2(this.strm, this.level, exports.Z_DEFLATED, this.windowBits, this.memLevel, this.strategy);
11223 break;
11224 case exports.INFLATE:
11225 case exports.GUNZIP:
11226 case exports.INFLATERAW:
11227 case exports.UNZIP:
11228 this.err = zlib_inflate.inflateInit2(this.strm, this.windowBits);
11229 break;
11230 default:
11231 throw new Error('Unknown mode ' + this.mode);
11232 }
11233
11234 if (this.err !== exports.Z_OK) {
11235 this._error('Init error');
11236 }
11237
11238 this.dictionary = dictionary;
11239
11240 this.write_in_progress = false;
11241 this.init_done = true;
11242};
11243
11244Zlib.prototype._setDictionary = function () {
11245 if (this.dictionary == null) {
11246 return;
11247 }
11248
11249 this.err = exports.Z_OK;
11250
11251 switch (this.mode) {
11252 case exports.DEFLATE:
11253 case exports.DEFLATERAW:
11254 this.err = zlib_deflate.deflateSetDictionary(this.strm, this.dictionary);
11255 break;
11256 default:
11257 break;
11258 }
11259
11260 if (this.err !== exports.Z_OK) {
11261 this._error('Failed to set dictionary');
11262 }
11263};
11264
11265Zlib.prototype._reset = function () {
11266 this.err = exports.Z_OK;
11267
11268 switch (this.mode) {
11269 case exports.DEFLATE:
11270 case exports.DEFLATERAW:
11271 case exports.GZIP:
11272 this.err = zlib_deflate.deflateReset(this.strm);
11273 break;
11274 case exports.INFLATE:
11275 case exports.INFLATERAW:
11276 case exports.GUNZIP:
11277 this.err = zlib_inflate.inflateReset(this.strm);
11278 break;
11279 default:
11280 break;
11281 }
11282
11283 if (this.err !== exports.Z_OK) {
11284 this._error('Failed to reset stream');
11285 }
11286};
11287
11288exports.Zlib = Zlib;
11289}).call(this)}).call(this,require('_process'),require("buffer").Buffer)
11290},{"_process":224,"assert":85,"buffer":114,"pako/lib/zlib/constants":104,"pako/lib/zlib/deflate.js":106,"pako/lib/zlib/inflate.js":108,"pako/lib/zlib/zstream":112}],101:[function(require,module,exports){
11291(function (process){(function (){
11292'use strict';
11293
11294var Buffer = require('buffer').Buffer;
11295var Transform = require('stream').Transform;
11296var binding = require('./binding');
11297var util = require('util');
11298var assert = require('assert').ok;
11299var kMaxLength = require('buffer').kMaxLength;
11300var kRangeErrorMessage = 'Cannot create final Buffer. It would be larger ' + 'than 0x' + kMaxLength.toString(16) + ' bytes';
11301
11302// zlib doesn't provide these, so kludge them in following the same
11303// const naming scheme zlib uses.
11304binding.Z_MIN_WINDOWBITS = 8;
11305binding.Z_MAX_WINDOWBITS = 15;
11306binding.Z_DEFAULT_WINDOWBITS = 15;
11307
11308// fewer than 64 bytes per chunk is stupid.
11309// technically it could work with as few as 8, but even 64 bytes
11310// is absurdly low. Usually a MB or more is best.
11311binding.Z_MIN_CHUNK = 64;
11312binding.Z_MAX_CHUNK = Infinity;
11313binding.Z_DEFAULT_CHUNK = 16 * 1024;
11314
11315binding.Z_MIN_MEMLEVEL = 1;
11316binding.Z_MAX_MEMLEVEL = 9;
11317binding.Z_DEFAULT_MEMLEVEL = 8;
11318
11319binding.Z_MIN_LEVEL = -1;
11320binding.Z_MAX_LEVEL = 9;
11321binding.Z_DEFAULT_LEVEL = binding.Z_DEFAULT_COMPRESSION;
11322
11323// expose all the zlib constants
11324var bkeys = Object.keys(binding);
11325for (var bk = 0; bk < bkeys.length; bk++) {
11326 var bkey = bkeys[bk];
11327 if (bkey.match(/^Z/)) {
11328 Object.defineProperty(exports, bkey, {
11329 enumerable: true, value: binding[bkey], writable: false
11330 });
11331 }
11332}
11333
11334// translation table for return codes.
11335var codes = {
11336 Z_OK: binding.Z_OK,
11337 Z_STREAM_END: binding.Z_STREAM_END,
11338 Z_NEED_DICT: binding.Z_NEED_DICT,
11339 Z_ERRNO: binding.Z_ERRNO,
11340 Z_STREAM_ERROR: binding.Z_STREAM_ERROR,
11341 Z_DATA_ERROR: binding.Z_DATA_ERROR,
11342 Z_MEM_ERROR: binding.Z_MEM_ERROR,
11343 Z_BUF_ERROR: binding.Z_BUF_ERROR,
11344 Z_VERSION_ERROR: binding.Z_VERSION_ERROR
11345};
11346
11347var ckeys = Object.keys(codes);
11348for (var ck = 0; ck < ckeys.length; ck++) {
11349 var ckey = ckeys[ck];
11350 codes[codes[ckey]] = ckey;
11351}
11352
11353Object.defineProperty(exports, 'codes', {
11354 enumerable: true, value: Object.freeze(codes), writable: false
11355});
11356
11357exports.Deflate = Deflate;
11358exports.Inflate = Inflate;
11359exports.Gzip = Gzip;
11360exports.Gunzip = Gunzip;
11361exports.DeflateRaw = DeflateRaw;
11362exports.InflateRaw = InflateRaw;
11363exports.Unzip = Unzip;
11364
11365exports.createDeflate = function (o) {
11366 return new Deflate(o);
11367};
11368
11369exports.createInflate = function (o) {
11370 return new Inflate(o);
11371};
11372
11373exports.createDeflateRaw = function (o) {
11374 return new DeflateRaw(o);
11375};
11376
11377exports.createInflateRaw = function (o) {
11378 return new InflateRaw(o);
11379};
11380
11381exports.createGzip = function (o) {
11382 return new Gzip(o);
11383};
11384
11385exports.createGunzip = function (o) {
11386 return new Gunzip(o);
11387};
11388
11389exports.createUnzip = function (o) {
11390 return new Unzip(o);
11391};
11392
11393// Convenience methods.
11394// compress/decompress a string or buffer in one step.
11395exports.deflate = function (buffer, opts, callback) {
11396 if (typeof opts === 'function') {
11397 callback = opts;
11398 opts = {};
11399 }
11400 return zlibBuffer(new Deflate(opts), buffer, callback);
11401};
11402
11403exports.deflateSync = function (buffer, opts) {
11404 return zlibBufferSync(new Deflate(opts), buffer);
11405};
11406
11407exports.gzip = function (buffer, opts, callback) {
11408 if (typeof opts === 'function') {
11409 callback = opts;
11410 opts = {};
11411 }
11412 return zlibBuffer(new Gzip(opts), buffer, callback);
11413};
11414
11415exports.gzipSync = function (buffer, opts) {
11416 return zlibBufferSync(new Gzip(opts), buffer);
11417};
11418
11419exports.deflateRaw = function (buffer, opts, callback) {
11420 if (typeof opts === 'function') {
11421 callback = opts;
11422 opts = {};
11423 }
11424 return zlibBuffer(new DeflateRaw(opts), buffer, callback);
11425};
11426
11427exports.deflateRawSync = function (buffer, opts) {
11428 return zlibBufferSync(new DeflateRaw(opts), buffer);
11429};
11430
11431exports.unzip = function (buffer, opts, callback) {
11432 if (typeof opts === 'function') {
11433 callback = opts;
11434 opts = {};
11435 }
11436 return zlibBuffer(new Unzip(opts), buffer, callback);
11437};
11438
11439exports.unzipSync = function (buffer, opts) {
11440 return zlibBufferSync(new Unzip(opts), buffer);
11441};
11442
11443exports.inflate = function (buffer, opts, callback) {
11444 if (typeof opts === 'function') {
11445 callback = opts;
11446 opts = {};
11447 }
11448 return zlibBuffer(new Inflate(opts), buffer, callback);
11449};
11450
11451exports.inflateSync = function (buffer, opts) {
11452 return zlibBufferSync(new Inflate(opts), buffer);
11453};
11454
11455exports.gunzip = function (buffer, opts, callback) {
11456 if (typeof opts === 'function') {
11457 callback = opts;
11458 opts = {};
11459 }
11460 return zlibBuffer(new Gunzip(opts), buffer, callback);
11461};
11462
11463exports.gunzipSync = function (buffer, opts) {
11464 return zlibBufferSync(new Gunzip(opts), buffer);
11465};
11466
11467exports.inflateRaw = function (buffer, opts, callback) {
11468 if (typeof opts === 'function') {
11469 callback = opts;
11470 opts = {};
11471 }
11472 return zlibBuffer(new InflateRaw(opts), buffer, callback);
11473};
11474
11475exports.inflateRawSync = function (buffer, opts) {
11476 return zlibBufferSync(new InflateRaw(opts), buffer);
11477};
11478
11479function zlibBuffer(engine, buffer, callback) {
11480 var buffers = [];
11481 var nread = 0;
11482
11483 engine.on('error', onError);
11484 engine.on('end', onEnd);
11485
11486 engine.end(buffer);
11487 flow();
11488
11489 function flow() {
11490 var chunk;
11491 while (null !== (chunk = engine.read())) {
11492 buffers.push(chunk);
11493 nread += chunk.length;
11494 }
11495 engine.once('readable', flow);
11496 }
11497
11498 function onError(err) {
11499 engine.removeListener('end', onEnd);
11500 engine.removeListener('readable', flow);
11501 callback(err);
11502 }
11503
11504 function onEnd() {
11505 var buf;
11506 var err = null;
11507
11508 if (nread >= kMaxLength) {
11509 err = new RangeError(kRangeErrorMessage);
11510 } else {
11511 buf = Buffer.concat(buffers, nread);
11512 }
11513
11514 buffers = [];
11515 engine.close();
11516 callback(err, buf);
11517 }
11518}
11519
11520function zlibBufferSync(engine, buffer) {
11521 if (typeof buffer === 'string') buffer = Buffer.from(buffer);
11522
11523 if (!Buffer.isBuffer(buffer)) throw new TypeError('Not a string or buffer');
11524
11525 var flushFlag = engine._finishFlushFlag;
11526
11527 return engine._processChunk(buffer, flushFlag);
11528}
11529
11530// generic zlib
11531// minimal 2-byte header
11532function Deflate(opts) {
11533 if (!(this instanceof Deflate)) return new Deflate(opts);
11534 Zlib.call(this, opts, binding.DEFLATE);
11535}
11536
11537function Inflate(opts) {
11538 if (!(this instanceof Inflate)) return new Inflate(opts);
11539 Zlib.call(this, opts, binding.INFLATE);
11540}
11541
11542// gzip - bigger header, same deflate compression
11543function Gzip(opts) {
11544 if (!(this instanceof Gzip)) return new Gzip(opts);
11545 Zlib.call(this, opts, binding.GZIP);
11546}
11547
11548function Gunzip(opts) {
11549 if (!(this instanceof Gunzip)) return new Gunzip(opts);
11550 Zlib.call(this, opts, binding.GUNZIP);
11551}
11552
11553// raw - no header
11554function DeflateRaw(opts) {
11555 if (!(this instanceof DeflateRaw)) return new DeflateRaw(opts);
11556 Zlib.call(this, opts, binding.DEFLATERAW);
11557}
11558
11559function InflateRaw(opts) {
11560 if (!(this instanceof InflateRaw)) return new InflateRaw(opts);
11561 Zlib.call(this, opts, binding.INFLATERAW);
11562}
11563
11564// auto-detect header.
11565function Unzip(opts) {
11566 if (!(this instanceof Unzip)) return new Unzip(opts);
11567 Zlib.call(this, opts, binding.UNZIP);
11568}
11569
11570function isValidFlushFlag(flag) {
11571 return flag === binding.Z_NO_FLUSH || flag === binding.Z_PARTIAL_FLUSH || flag === binding.Z_SYNC_FLUSH || flag === binding.Z_FULL_FLUSH || flag === binding.Z_FINISH || flag === binding.Z_BLOCK;
11572}
11573
11574// the Zlib class they all inherit from
11575// This thing manages the queue of requests, and returns
11576// true or false if there is anything in the queue when
11577// you call the .write() method.
11578
11579function Zlib(opts, mode) {
11580 var _this = this;
11581
11582 this._opts = opts = opts || {};
11583 this._chunkSize = opts.chunkSize || exports.Z_DEFAULT_CHUNK;
11584
11585 Transform.call(this, opts);
11586
11587 if (opts.flush && !isValidFlushFlag(opts.flush)) {
11588 throw new Error('Invalid flush flag: ' + opts.flush);
11589 }
11590 if (opts.finishFlush && !isValidFlushFlag(opts.finishFlush)) {
11591 throw new Error('Invalid flush flag: ' + opts.finishFlush);
11592 }
11593
11594 this._flushFlag = opts.flush || binding.Z_NO_FLUSH;
11595 this._finishFlushFlag = typeof opts.finishFlush !== 'undefined' ? opts.finishFlush : binding.Z_FINISH;
11596
11597 if (opts.chunkSize) {
11598 if (opts.chunkSize < exports.Z_MIN_CHUNK || opts.chunkSize > exports.Z_MAX_CHUNK) {
11599 throw new Error('Invalid chunk size: ' + opts.chunkSize);
11600 }
11601 }
11602
11603 if (opts.windowBits) {
11604 if (opts.windowBits < exports.Z_MIN_WINDOWBITS || opts.windowBits > exports.Z_MAX_WINDOWBITS) {
11605 throw new Error('Invalid windowBits: ' + opts.windowBits);
11606 }
11607 }
11608
11609 if (opts.level) {
11610 if (opts.level < exports.Z_MIN_LEVEL || opts.level > exports.Z_MAX_LEVEL) {
11611 throw new Error('Invalid compression level: ' + opts.level);
11612 }
11613 }
11614
11615 if (opts.memLevel) {
11616 if (opts.memLevel < exports.Z_MIN_MEMLEVEL || opts.memLevel > exports.Z_MAX_MEMLEVEL) {
11617 throw new Error('Invalid memLevel: ' + opts.memLevel);
11618 }
11619 }
11620
11621 if (opts.strategy) {
11622 if (opts.strategy != exports.Z_FILTERED && opts.strategy != exports.Z_HUFFMAN_ONLY && opts.strategy != exports.Z_RLE && opts.strategy != exports.Z_FIXED && opts.strategy != exports.Z_DEFAULT_STRATEGY) {
11623 throw new Error('Invalid strategy: ' + opts.strategy);
11624 }
11625 }
11626
11627 if (opts.dictionary) {
11628 if (!Buffer.isBuffer(opts.dictionary)) {
11629 throw new Error('Invalid dictionary: it should be a Buffer instance');
11630 }
11631 }
11632
11633 this._handle = new binding.Zlib(mode);
11634
11635 var self = this;
11636 this._hadError = false;
11637 this._handle.onerror = function (message, errno) {
11638 // there is no way to cleanly recover.
11639 // continuing only obscures problems.
11640 _close(self);
11641 self._hadError = true;
11642
11643 var error = new Error(message);
11644 error.errno = errno;
11645 error.code = exports.codes[errno];
11646 self.emit('error', error);
11647 };
11648
11649 var level = exports.Z_DEFAULT_COMPRESSION;
11650 if (typeof opts.level === 'number') level = opts.level;
11651
11652 var strategy = exports.Z_DEFAULT_STRATEGY;
11653 if (typeof opts.strategy === 'number') strategy = opts.strategy;
11654
11655 this._handle.init(opts.windowBits || exports.Z_DEFAULT_WINDOWBITS, level, opts.memLevel || exports.Z_DEFAULT_MEMLEVEL, strategy, opts.dictionary);
11656
11657 this._buffer = Buffer.allocUnsafe(this._chunkSize);
11658 this._offset = 0;
11659 this._level = level;
11660 this._strategy = strategy;
11661
11662 this.once('end', this.close);
11663
11664 Object.defineProperty(this, '_closed', {
11665 get: function () {
11666 return !_this._handle;
11667 },
11668 configurable: true,
11669 enumerable: true
11670 });
11671}
11672
11673util.inherits(Zlib, Transform);
11674
11675Zlib.prototype.params = function (level, strategy, callback) {
11676 if (level < exports.Z_MIN_LEVEL || level > exports.Z_MAX_LEVEL) {
11677 throw new RangeError('Invalid compression level: ' + level);
11678 }
11679 if (strategy != exports.Z_FILTERED && strategy != exports.Z_HUFFMAN_ONLY && strategy != exports.Z_RLE && strategy != exports.Z_FIXED && strategy != exports.Z_DEFAULT_STRATEGY) {
11680 throw new TypeError('Invalid strategy: ' + strategy);
11681 }
11682
11683 if (this._level !== level || this._strategy !== strategy) {
11684 var self = this;
11685 this.flush(binding.Z_SYNC_FLUSH, function () {
11686 assert(self._handle, 'zlib binding closed');
11687 self._handle.params(level, strategy);
11688 if (!self._hadError) {
11689 self._level = level;
11690 self._strategy = strategy;
11691 if (callback) callback();
11692 }
11693 });
11694 } else {
11695 process.nextTick(callback);
11696 }
11697};
11698
11699Zlib.prototype.reset = function () {
11700 assert(this._handle, 'zlib binding closed');
11701 return this._handle.reset();
11702};
11703
11704// This is the _flush function called by the transform class,
11705// internally, when the last chunk has been written.
11706Zlib.prototype._flush = function (callback) {
11707 this._transform(Buffer.alloc(0), '', callback);
11708};
11709
11710Zlib.prototype.flush = function (kind, callback) {
11711 var _this2 = this;
11712
11713 var ws = this._writableState;
11714
11715 if (typeof kind === 'function' || kind === undefined && !callback) {
11716 callback = kind;
11717 kind = binding.Z_FULL_FLUSH;
11718 }
11719
11720 if (ws.ended) {
11721 if (callback) process.nextTick(callback);
11722 } else if (ws.ending) {
11723 if (callback) this.once('end', callback);
11724 } else if (ws.needDrain) {
11725 if (callback) {
11726 this.once('drain', function () {
11727 return _this2.flush(kind, callback);
11728 });
11729 }
11730 } else {
11731 this._flushFlag = kind;
11732 this.write(Buffer.alloc(0), '', callback);
11733 }
11734};
11735
11736Zlib.prototype.close = function (callback) {
11737 _close(this, callback);
11738 process.nextTick(emitCloseNT, this);
11739};
11740
11741function _close(engine, callback) {
11742 if (callback) process.nextTick(callback);
11743
11744 // Caller may invoke .close after a zlib error (which will null _handle).
11745 if (!engine._handle) return;
11746
11747 engine._handle.close();
11748 engine._handle = null;
11749}
11750
11751function emitCloseNT(self) {
11752 self.emit('close');
11753}
11754
11755Zlib.prototype._transform = function (chunk, encoding, cb) {
11756 var flushFlag;
11757 var ws = this._writableState;
11758 var ending = ws.ending || ws.ended;
11759 var last = ending && (!chunk || ws.length === chunk.length);
11760
11761 if (chunk !== null && !Buffer.isBuffer(chunk)) return cb(new Error('invalid input'));
11762
11763 if (!this._handle) return cb(new Error('zlib binding closed'));
11764
11765 // If it's the last chunk, or a final flush, we use the Z_FINISH flush flag
11766 // (or whatever flag was provided using opts.finishFlush).
11767 // If it's explicitly flushing at some other time, then we use
11768 // Z_FULL_FLUSH. Otherwise, use Z_NO_FLUSH for maximum compression
11769 // goodness.
11770 if (last) flushFlag = this._finishFlushFlag;else {
11771 flushFlag = this._flushFlag;
11772 // once we've flushed the last of the queue, stop flushing and
11773 // go back to the normal behavior.
11774 if (chunk.length >= ws.length) {
11775 this._flushFlag = this._opts.flush || binding.Z_NO_FLUSH;
11776 }
11777 }
11778
11779 this._processChunk(chunk, flushFlag, cb);
11780};
11781
11782Zlib.prototype._processChunk = function (chunk, flushFlag, cb) {
11783 var availInBefore = chunk && chunk.length;
11784 var availOutBefore = this._chunkSize - this._offset;
11785 var inOff = 0;
11786
11787 var self = this;
11788
11789 var async = typeof cb === 'function';
11790
11791 if (!async) {
11792 var buffers = [];
11793 var nread = 0;
11794
11795 var error;
11796 this.on('error', function (er) {
11797 error = er;
11798 });
11799
11800 assert(this._handle, 'zlib binding closed');
11801 do {
11802 var res = this._handle.writeSync(flushFlag, chunk, // in
11803 inOff, // in_off
11804 availInBefore, // in_len
11805 this._buffer, // out
11806 this._offset, //out_off
11807 availOutBefore); // out_len
11808 } while (!this._hadError && callback(res[0], res[1]));
11809
11810 if (this._hadError) {
11811 throw error;
11812 }
11813
11814 if (nread >= kMaxLength) {
11815 _close(this);
11816 throw new RangeError(kRangeErrorMessage);
11817 }
11818
11819 var buf = Buffer.concat(buffers, nread);
11820 _close(this);
11821
11822 return buf;
11823 }
11824
11825 assert(this._handle, 'zlib binding closed');
11826 var req = this._handle.write(flushFlag, chunk, // in
11827 inOff, // in_off
11828 availInBefore, // in_len
11829 this._buffer, // out
11830 this._offset, //out_off
11831 availOutBefore); // out_len
11832
11833 req.buffer = chunk;
11834 req.callback = callback;
11835
11836 function callback(availInAfter, availOutAfter) {
11837 // When the callback is used in an async write, the callback's
11838 // context is the `req` object that was created. The req object
11839 // is === this._handle, and that's why it's important to null
11840 // out the values after they are done being used. `this._handle`
11841 // can stay in memory longer than the callback and buffer are needed.
11842 if (this) {
11843 this.buffer = null;
11844 this.callback = null;
11845 }
11846
11847 if (self._hadError) return;
11848
11849 var have = availOutBefore - availOutAfter;
11850 assert(have >= 0, 'have should not go down');
11851
11852 if (have > 0) {
11853 var out = self._buffer.slice(self._offset, self._offset + have);
11854 self._offset += have;
11855 // serve some output to the consumer.
11856 if (async) {
11857 self.push(out);
11858 } else {
11859 buffers.push(out);
11860 nread += out.length;
11861 }
11862 }
11863
11864 // exhausted the output buffer, or used all the input create a new one.
11865 if (availOutAfter === 0 || self._offset >= self._chunkSize) {
11866 availOutBefore = self._chunkSize;
11867 self._offset = 0;
11868 self._buffer = Buffer.allocUnsafe(self._chunkSize);
11869 }
11870
11871 if (availOutAfter === 0) {
11872 // Not actually done. Need to reprocess.
11873 // Also, update the availInBefore to the availInAfter value,
11874 // so that if we have to hit it a third (fourth, etc.) time,
11875 // it'll have the correct byte counts.
11876 inOff += availInBefore - availInAfter;
11877 availInBefore = availInAfter;
11878
11879 if (!async) return true;
11880
11881 var newReq = self._handle.write(flushFlag, chunk, inOff, availInBefore, self._buffer, self._offset, self._chunkSize);
11882 newReq.callback = callback; // this same function
11883 newReq.buffer = chunk;
11884 return;
11885 }
11886
11887 if (!async) return false;
11888
11889 // finished with the chunk.
11890 cb();
11891 }
11892};
11893
11894util.inherits(Deflate, Zlib);
11895util.inherits(Inflate, Zlib);
11896util.inherits(Gzip, Zlib);
11897util.inherits(Gunzip, Zlib);
11898util.inherits(DeflateRaw, Zlib);
11899util.inherits(InflateRaw, Zlib);
11900util.inherits(Unzip, Zlib);
11901}).call(this)}).call(this,require('_process'))
11902},{"./binding":100,"_process":224,"assert":85,"buffer":114,"stream":265,"util":275}],102:[function(require,module,exports){
11903'use strict';
11904
11905
11906var TYPED_OK = (typeof Uint8Array !== 'undefined') &&
11907 (typeof Uint16Array !== 'undefined') &&
11908 (typeof Int32Array !== 'undefined');
11909
11910function _has(obj, key) {
11911 return Object.prototype.hasOwnProperty.call(obj, key);
11912}
11913
11914exports.assign = function (obj /*from1, from2, from3, ...*/) {
11915 var sources = Array.prototype.slice.call(arguments, 1);
11916 while (sources.length) {
11917 var source = sources.shift();
11918 if (!source) { continue; }
11919
11920 if (typeof source !== 'object') {
11921 throw new TypeError(source + 'must be non-object');
11922 }
11923
11924 for (var p in source) {
11925 if (_has(source, p)) {
11926 obj[p] = source[p];
11927 }
11928 }
11929 }
11930
11931 return obj;
11932};
11933
11934
11935// reduce buffer size, avoiding mem copy
11936exports.shrinkBuf = function (buf, size) {
11937 if (buf.length === size) { return buf; }
11938 if (buf.subarray) { return buf.subarray(0, size); }
11939 buf.length = size;
11940 return buf;
11941};
11942
11943
11944var fnTyped = {
11945 arraySet: function (dest, src, src_offs, len, dest_offs) {
11946 if (src.subarray && dest.subarray) {
11947 dest.set(src.subarray(src_offs, src_offs + len), dest_offs);
11948 return;
11949 }
11950 // Fallback to ordinary array
11951 for (var i = 0; i < len; i++) {
11952 dest[dest_offs + i] = src[src_offs + i];
11953 }
11954 },
11955 // Join array of chunks to single array.
11956 flattenChunks: function (chunks) {
11957 var i, l, len, pos, chunk, result;
11958
11959 // calculate data length
11960 len = 0;
11961 for (i = 0, l = chunks.length; i < l; i++) {
11962 len += chunks[i].length;
11963 }
11964
11965 // join chunks
11966 result = new Uint8Array(len);
11967 pos = 0;
11968 for (i = 0, l = chunks.length; i < l; i++) {
11969 chunk = chunks[i];
11970 result.set(chunk, pos);
11971 pos += chunk.length;
11972 }
11973
11974 return result;
11975 }
11976};
11977
11978var fnUntyped = {
11979 arraySet: function (dest, src, src_offs, len, dest_offs) {
11980 for (var i = 0; i < len; i++) {
11981 dest[dest_offs + i] = src[src_offs + i];
11982 }
11983 },
11984 // Join array of chunks to single array.
11985 flattenChunks: function (chunks) {
11986 return [].concat.apply([], chunks);
11987 }
11988};
11989
11990
11991// Enable/Disable typed arrays use, for testing
11992//
11993exports.setTyped = function (on) {
11994 if (on) {
11995 exports.Buf8 = Uint8Array;
11996 exports.Buf16 = Uint16Array;
11997 exports.Buf32 = Int32Array;
11998 exports.assign(exports, fnTyped);
11999 } else {
12000 exports.Buf8 = Array;
12001 exports.Buf16 = Array;
12002 exports.Buf32 = Array;
12003 exports.assign(exports, fnUntyped);
12004 }
12005};
12006
12007exports.setTyped(TYPED_OK);
12008
12009},{}],103:[function(require,module,exports){
12010'use strict';
12011
12012// Note: adler32 takes 12% for level 0 and 2% for level 6.
12013// It isn't worth it to make additional optimizations as in original.
12014// Small size is preferable.
12015
12016// (C) 1995-2013 Jean-loup Gailly and Mark Adler
12017// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
12018//
12019// This software is provided 'as-is', without any express or implied
12020// warranty. In no event will the authors be held liable for any damages
12021// arising from the use of this software.
12022//
12023// Permission is granted to anyone to use this software for any purpose,
12024// including commercial applications, and to alter it and redistribute it
12025// freely, subject to the following restrictions:
12026//
12027// 1. The origin of this software must not be misrepresented; you must not
12028// claim that you wrote the original software. If you use this software
12029// in a product, an acknowledgment in the product documentation would be
12030// appreciated but is not required.
12031// 2. Altered source versions must be plainly marked as such, and must not be
12032// misrepresented as being the original software.
12033// 3. This notice may not be removed or altered from any source distribution.
12034
12035function adler32(adler, buf, len, pos) {
12036 var s1 = (adler & 0xffff) |0,
12037 s2 = ((adler >>> 16) & 0xffff) |0,
12038 n = 0;
12039
12040 while (len !== 0) {
12041 // Set limit ~ twice less than 5552, to keep
12042 // s2 in 31-bits, because we force signed ints.
12043 // in other case %= will fail.
12044 n = len > 2000 ? 2000 : len;
12045 len -= n;
12046
12047 do {
12048 s1 = (s1 + buf[pos++]) |0;
12049 s2 = (s2 + s1) |0;
12050 } while (--n);
12051
12052 s1 %= 65521;
12053 s2 %= 65521;
12054 }
12055
12056 return (s1 | (s2 << 16)) |0;
12057}
12058
12059
12060module.exports = adler32;
12061
12062},{}],104:[function(require,module,exports){
12063'use strict';
12064
12065// (C) 1995-2013 Jean-loup Gailly and Mark Adler
12066// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
12067//
12068// This software is provided 'as-is', without any express or implied
12069// warranty. In no event will the authors be held liable for any damages
12070// arising from the use of this software.
12071//
12072// Permission is granted to anyone to use this software for any purpose,
12073// including commercial applications, and to alter it and redistribute it
12074// freely, subject to the following restrictions:
12075//
12076// 1. The origin of this software must not be misrepresented; you must not
12077// claim that you wrote the original software. If you use this software
12078// in a product, an acknowledgment in the product documentation would be
12079// appreciated but is not required.
12080// 2. Altered source versions must be plainly marked as such, and must not be
12081// misrepresented as being the original software.
12082// 3. This notice may not be removed or altered from any source distribution.
12083
12084module.exports = {
12085
12086 /* Allowed flush values; see deflate() and inflate() below for details */
12087 Z_NO_FLUSH: 0,
12088 Z_PARTIAL_FLUSH: 1,
12089 Z_SYNC_FLUSH: 2,
12090 Z_FULL_FLUSH: 3,
12091 Z_FINISH: 4,
12092 Z_BLOCK: 5,
12093 Z_TREES: 6,
12094
12095 /* Return codes for the compression/decompression functions. Negative values
12096 * are errors, positive values are used for special but normal events.
12097 */
12098 Z_OK: 0,
12099 Z_STREAM_END: 1,
12100 Z_NEED_DICT: 2,
12101 Z_ERRNO: -1,
12102 Z_STREAM_ERROR: -2,
12103 Z_DATA_ERROR: -3,
12104 //Z_MEM_ERROR: -4,
12105 Z_BUF_ERROR: -5,
12106 //Z_VERSION_ERROR: -6,
12107
12108 /* compression levels */
12109 Z_NO_COMPRESSION: 0,
12110 Z_BEST_SPEED: 1,
12111 Z_BEST_COMPRESSION: 9,
12112 Z_DEFAULT_COMPRESSION: -1,
12113
12114
12115 Z_FILTERED: 1,
12116 Z_HUFFMAN_ONLY: 2,
12117 Z_RLE: 3,
12118 Z_FIXED: 4,
12119 Z_DEFAULT_STRATEGY: 0,
12120
12121 /* Possible values of the data_type field (though see inflate()) */
12122 Z_BINARY: 0,
12123 Z_TEXT: 1,
12124 //Z_ASCII: 1, // = Z_TEXT (deprecated)
12125 Z_UNKNOWN: 2,
12126
12127 /* The deflate compression method */
12128 Z_DEFLATED: 8
12129 //Z_NULL: null // Use -1 or null inline, depending on var type
12130};
12131
12132},{}],105:[function(require,module,exports){
12133'use strict';
12134
12135// Note: we can't get significant speed boost here.
12136// So write code to minimize size - no pregenerated tables
12137// and array tools dependencies.
12138
12139// (C) 1995-2013 Jean-loup Gailly and Mark Adler
12140// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
12141//
12142// This software is provided 'as-is', without any express or implied
12143// warranty. In no event will the authors be held liable for any damages
12144// arising from the use of this software.
12145//
12146// Permission is granted to anyone to use this software for any purpose,
12147// including commercial applications, and to alter it and redistribute it
12148// freely, subject to the following restrictions:
12149//
12150// 1. The origin of this software must not be misrepresented; you must not
12151// claim that you wrote the original software. If you use this software
12152// in a product, an acknowledgment in the product documentation would be
12153// appreciated but is not required.
12154// 2. Altered source versions must be plainly marked as such, and must not be
12155// misrepresented as being the original software.
12156// 3. This notice may not be removed or altered from any source distribution.
12157
12158// Use ordinary array, since untyped makes no boost here
12159function makeTable() {
12160 var c, table = [];
12161
12162 for (var n = 0; n < 256; n++) {
12163 c = n;
12164 for (var k = 0; k < 8; k++) {
12165 c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
12166 }
12167 table[n] = c;
12168 }
12169
12170 return table;
12171}
12172
12173// Create table on load. Just 255 signed longs. Not a problem.
12174var crcTable = makeTable();
12175
12176
12177function crc32(crc, buf, len, pos) {
12178 var t = crcTable,
12179 end = pos + len;
12180
12181 crc ^= -1;
12182
12183 for (var i = pos; i < end; i++) {
12184 crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];
12185 }
12186
12187 return (crc ^ (-1)); // >>> 0;
12188}
12189
12190
12191module.exports = crc32;
12192
12193},{}],106:[function(require,module,exports){
12194'use strict';
12195
12196// (C) 1995-2013 Jean-loup Gailly and Mark Adler
12197// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
12198//
12199// This software is provided 'as-is', without any express or implied
12200// warranty. In no event will the authors be held liable for any damages
12201// arising from the use of this software.
12202//
12203// Permission is granted to anyone to use this software for any purpose,
12204// including commercial applications, and to alter it and redistribute it
12205// freely, subject to the following restrictions:
12206//
12207// 1. The origin of this software must not be misrepresented; you must not
12208// claim that you wrote the original software. If you use this software
12209// in a product, an acknowledgment in the product documentation would be
12210// appreciated but is not required.
12211// 2. Altered source versions must be plainly marked as such, and must not be
12212// misrepresented as being the original software.
12213// 3. This notice may not be removed or altered from any source distribution.
12214
12215var utils = require('../utils/common');
12216var trees = require('./trees');
12217var adler32 = require('./adler32');
12218var crc32 = require('./crc32');
12219var msg = require('./messages');
12220
12221/* Public constants ==========================================================*/
12222/* ===========================================================================*/
12223
12224
12225/* Allowed flush values; see deflate() and inflate() below for details */
12226var Z_NO_FLUSH = 0;
12227var Z_PARTIAL_FLUSH = 1;
12228//var Z_SYNC_FLUSH = 2;
12229var Z_FULL_FLUSH = 3;
12230var Z_FINISH = 4;
12231var Z_BLOCK = 5;
12232//var Z_TREES = 6;
12233
12234
12235/* Return codes for the compression/decompression functions. Negative values
12236 * are errors, positive values are used for special but normal events.
12237 */
12238var Z_OK = 0;
12239var Z_STREAM_END = 1;
12240//var Z_NEED_DICT = 2;
12241//var Z_ERRNO = -1;
12242var Z_STREAM_ERROR = -2;
12243var Z_DATA_ERROR = -3;
12244//var Z_MEM_ERROR = -4;
12245var Z_BUF_ERROR = -5;
12246//var Z_VERSION_ERROR = -6;
12247
12248
12249/* compression levels */
12250//var Z_NO_COMPRESSION = 0;
12251//var Z_BEST_SPEED = 1;
12252//var Z_BEST_COMPRESSION = 9;
12253var Z_DEFAULT_COMPRESSION = -1;
12254
12255
12256var Z_FILTERED = 1;
12257var Z_HUFFMAN_ONLY = 2;
12258var Z_RLE = 3;
12259var Z_FIXED = 4;
12260var Z_DEFAULT_STRATEGY = 0;
12261
12262/* Possible values of the data_type field (though see inflate()) */
12263//var Z_BINARY = 0;
12264//var Z_TEXT = 1;
12265//var Z_ASCII = 1; // = Z_TEXT
12266var Z_UNKNOWN = 2;
12267
12268
12269/* The deflate compression method */
12270var Z_DEFLATED = 8;
12271
12272/*============================================================================*/
12273
12274
12275var MAX_MEM_LEVEL = 9;
12276/* Maximum value for memLevel in deflateInit2 */
12277var MAX_WBITS = 15;
12278/* 32K LZ77 window */
12279var DEF_MEM_LEVEL = 8;
12280
12281
12282var LENGTH_CODES = 29;
12283/* number of length codes, not counting the special END_BLOCK code */
12284var LITERALS = 256;
12285/* number of literal bytes 0..255 */
12286var L_CODES = LITERALS + 1 + LENGTH_CODES;
12287/* number of Literal or Length codes, including the END_BLOCK code */
12288var D_CODES = 30;
12289/* number of distance codes */
12290var BL_CODES = 19;
12291/* number of codes used to transfer the bit lengths */
12292var HEAP_SIZE = 2 * L_CODES + 1;
12293/* maximum heap size */
12294var MAX_BITS = 15;
12295/* All codes must not exceed MAX_BITS bits */
12296
12297var MIN_MATCH = 3;
12298var MAX_MATCH = 258;
12299var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);
12300
12301var PRESET_DICT = 0x20;
12302
12303var INIT_STATE = 42;
12304var EXTRA_STATE = 69;
12305var NAME_STATE = 73;
12306var COMMENT_STATE = 91;
12307var HCRC_STATE = 103;
12308var BUSY_STATE = 113;
12309var FINISH_STATE = 666;
12310
12311var BS_NEED_MORE = 1; /* block not completed, need more input or more output */
12312var BS_BLOCK_DONE = 2; /* block flush performed */
12313var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */
12314var BS_FINISH_DONE = 4; /* finish done, accept no more input or output */
12315
12316var OS_CODE = 0x03; // Unix :) . Don't detect, use this default.
12317
12318function err(strm, errorCode) {
12319 strm.msg = msg[errorCode];
12320 return errorCode;
12321}
12322
12323function rank(f) {
12324 return ((f) << 1) - ((f) > 4 ? 9 : 0);
12325}
12326
12327function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }
12328
12329
12330/* =========================================================================
12331 * Flush as much pending output as possible. All deflate() output goes
12332 * through this function so some applications may wish to modify it
12333 * to avoid allocating a large strm->output buffer and copying into it.
12334 * (See also read_buf()).
12335 */
12336function flush_pending(strm) {
12337 var s = strm.state;
12338
12339 //_tr_flush_bits(s);
12340 var len = s.pending;
12341 if (len > strm.avail_out) {
12342 len = strm.avail_out;
12343 }
12344 if (len === 0) { return; }
12345
12346 utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);
12347 strm.next_out += len;
12348 s.pending_out += len;
12349 strm.total_out += len;
12350 strm.avail_out -= len;
12351 s.pending -= len;
12352 if (s.pending === 0) {
12353 s.pending_out = 0;
12354 }
12355}
12356
12357
12358function flush_block_only(s, last) {
12359 trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);
12360 s.block_start = s.strstart;
12361 flush_pending(s.strm);
12362}
12363
12364
12365function put_byte(s, b) {
12366 s.pending_buf[s.pending++] = b;
12367}
12368
12369
12370/* =========================================================================
12371 * Put a short in the pending buffer. The 16-bit value is put in MSB order.
12372 * IN assertion: the stream state is correct and there is enough room in
12373 * pending_buf.
12374 */
12375function putShortMSB(s, b) {
12376// put_byte(s, (Byte)(b >> 8));
12377// put_byte(s, (Byte)(b & 0xff));
12378 s.pending_buf[s.pending++] = (b >>> 8) & 0xff;
12379 s.pending_buf[s.pending++] = b & 0xff;
12380}
12381
12382
12383/* ===========================================================================
12384 * Read a new buffer from the current input stream, update the adler32
12385 * and total number of bytes read. All deflate() input goes through
12386 * this function so some applications may wish to modify it to avoid
12387 * allocating a large strm->input buffer and copying from it.
12388 * (See also flush_pending()).
12389 */
12390function read_buf(strm, buf, start, size) {
12391 var len = strm.avail_in;
12392
12393 if (len > size) { len = size; }
12394 if (len === 0) { return 0; }
12395
12396 strm.avail_in -= len;
12397
12398 // zmemcpy(buf, strm->next_in, len);
12399 utils.arraySet(buf, strm.input, strm.next_in, len, start);
12400 if (strm.state.wrap === 1) {
12401 strm.adler = adler32(strm.adler, buf, len, start);
12402 }
12403
12404 else if (strm.state.wrap === 2) {
12405 strm.adler = crc32(strm.adler, buf, len, start);
12406 }
12407
12408 strm.next_in += len;
12409 strm.total_in += len;
12410
12411 return len;
12412}
12413
12414
12415/* ===========================================================================
12416 * Set match_start to the longest match starting at the given string and
12417 * return its length. Matches shorter or equal to prev_length are discarded,
12418 * in which case the result is equal to prev_length and match_start is
12419 * garbage.
12420 * IN assertions: cur_match is the head of the hash chain for the current
12421 * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
12422 * OUT assertion: the match length is not greater than s->lookahead.
12423 */
12424function longest_match(s, cur_match) {
12425 var chain_length = s.max_chain_length; /* max hash chain length */
12426 var scan = s.strstart; /* current string */
12427 var match; /* matched string */
12428 var len; /* length of current match */
12429 var best_len = s.prev_length; /* best match length so far */
12430 var nice_match = s.nice_match; /* stop if match long enough */
12431 var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?
12432 s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;
12433
12434 var _win = s.window; // shortcut
12435
12436 var wmask = s.w_mask;
12437 var prev = s.prev;
12438
12439 /* Stop when cur_match becomes <= limit. To simplify the code,
12440 * we prevent matches with the string of window index 0.
12441 */
12442
12443 var strend = s.strstart + MAX_MATCH;
12444 var scan_end1 = _win[scan + best_len - 1];
12445 var scan_end = _win[scan + best_len];
12446
12447 /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
12448 * It is easy to get rid of this optimization if necessary.
12449 */
12450 // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
12451
12452 /* Do not waste too much time if we already have a good match: */
12453 if (s.prev_length >= s.good_match) {
12454 chain_length >>= 2;
12455 }
12456 /* Do not look for matches beyond the end of the input. This is necessary
12457 * to make deflate deterministic.
12458 */
12459 if (nice_match > s.lookahead) { nice_match = s.lookahead; }
12460
12461 // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
12462
12463 do {
12464 // Assert(cur_match < s->strstart, "no future");
12465 match = cur_match;
12466
12467 /* Skip to next match if the match length cannot increase
12468 * or if the match length is less than 2. Note that the checks below
12469 * for insufficient lookahead only occur occasionally for performance
12470 * reasons. Therefore uninitialized memory will be accessed, and
12471 * conditional jumps will be made that depend on those values.
12472 * However the length of the match is limited to the lookahead, so
12473 * the output of deflate is not affected by the uninitialized values.
12474 */
12475
12476 if (_win[match + best_len] !== scan_end ||
12477 _win[match + best_len - 1] !== scan_end1 ||
12478 _win[match] !== _win[scan] ||
12479 _win[++match] !== _win[scan + 1]) {
12480 continue;
12481 }
12482
12483 /* The check at best_len-1 can be removed because it will be made
12484 * again later. (This heuristic is not always a win.)
12485 * It is not necessary to compare scan[2] and match[2] since they
12486 * are always equal when the other bytes match, given that
12487 * the hash keys are equal and that HASH_BITS >= 8.
12488 */
12489 scan += 2;
12490 match++;
12491 // Assert(*scan == *match, "match[2]?");
12492
12493 /* We check for insufficient lookahead only every 8th comparison;
12494 * the 256th check will be made at strstart+258.
12495 */
12496 do {
12497 /*jshint noempty:false*/
12498 } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
12499 _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
12500 _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
12501 _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
12502 scan < strend);
12503
12504 // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
12505
12506 len = MAX_MATCH - (strend - scan);
12507 scan = strend - MAX_MATCH;
12508
12509 if (len > best_len) {
12510 s.match_start = cur_match;
12511 best_len = len;
12512 if (len >= nice_match) {
12513 break;
12514 }
12515 scan_end1 = _win[scan + best_len - 1];
12516 scan_end = _win[scan + best_len];
12517 }
12518 } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);
12519
12520 if (best_len <= s.lookahead) {
12521 return best_len;
12522 }
12523 return s.lookahead;
12524}
12525
12526
12527/* ===========================================================================
12528 * Fill the window when the lookahead becomes insufficient.
12529 * Updates strstart and lookahead.
12530 *
12531 * IN assertion: lookahead < MIN_LOOKAHEAD
12532 * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
12533 * At least one byte has been read, or avail_in == 0; reads are
12534 * performed for at least two bytes (required for the zip translate_eol
12535 * option -- not supported here).
12536 */
12537function fill_window(s) {
12538 var _w_size = s.w_size;
12539 var p, n, m, more, str;
12540
12541 //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
12542
12543 do {
12544 more = s.window_size - s.lookahead - s.strstart;
12545
12546 // JS ints have 32 bit, block below not needed
12547 /* Deal with !@#$% 64K limit: */
12548 //if (sizeof(int) <= 2) {
12549 // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
12550 // more = wsize;
12551 //
12552 // } else if (more == (unsigned)(-1)) {
12553 // /* Very unlikely, but possible on 16 bit machine if
12554 // * strstart == 0 && lookahead == 1 (input done a byte at time)
12555 // */
12556 // more--;
12557 // }
12558 //}
12559
12560
12561 /* If the window is almost full and there is insufficient lookahead,
12562 * move the upper half to the lower one to make room in the upper half.
12563 */
12564 if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {
12565
12566 utils.arraySet(s.window, s.window, _w_size, _w_size, 0);
12567 s.match_start -= _w_size;
12568 s.strstart -= _w_size;
12569 /* we now have strstart >= MAX_DIST */
12570 s.block_start -= _w_size;
12571
12572 /* Slide the hash table (could be avoided with 32 bit values
12573 at the expense of memory usage). We slide even when level == 0
12574 to keep the hash table consistent if we switch back to level > 0
12575 later. (Using level 0 permanently is not an optimal usage of
12576 zlib, so we don't care about this pathological case.)
12577 */
12578
12579 n = s.hash_size;
12580 p = n;
12581 do {
12582 m = s.head[--p];
12583 s.head[p] = (m >= _w_size ? m - _w_size : 0);
12584 } while (--n);
12585
12586 n = _w_size;
12587 p = n;
12588 do {
12589 m = s.prev[--p];
12590 s.prev[p] = (m >= _w_size ? m - _w_size : 0);
12591 /* If n is not on any hash chain, prev[n] is garbage but
12592 * its value will never be used.
12593 */
12594 } while (--n);
12595
12596 more += _w_size;
12597 }
12598 if (s.strm.avail_in === 0) {
12599 break;
12600 }
12601
12602 /* If there was no sliding:
12603 * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
12604 * more == window_size - lookahead - strstart
12605 * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
12606 * => more >= window_size - 2*WSIZE + 2
12607 * In the BIG_MEM or MMAP case (not yet supported),
12608 * window_size == input_size + MIN_LOOKAHEAD &&
12609 * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
12610 * Otherwise, window_size == 2*WSIZE so more >= 2.
12611 * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
12612 */
12613 //Assert(more >= 2, "more < 2");
12614 n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
12615 s.lookahead += n;
12616
12617 /* Initialize the hash value now that we have some input: */
12618 if (s.lookahead + s.insert >= MIN_MATCH) {
12619 str = s.strstart - s.insert;
12620 s.ins_h = s.window[str];
12621
12622 /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */
12623 s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;
12624//#if MIN_MATCH != 3
12625// Call update_hash() MIN_MATCH-3 more times
12626//#endif
12627 while (s.insert) {
12628 /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
12629 s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;
12630
12631 s.prev[str & s.w_mask] = s.head[s.ins_h];
12632 s.head[s.ins_h] = str;
12633 str++;
12634 s.insert--;
12635 if (s.lookahead + s.insert < MIN_MATCH) {
12636 break;
12637 }
12638 }
12639 }
12640 /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
12641 * but this is not important since only literal bytes will be emitted.
12642 */
12643
12644 } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);
12645
12646 /* If the WIN_INIT bytes after the end of the current data have never been
12647 * written, then zero those bytes in order to avoid memory check reports of
12648 * the use of uninitialized (or uninitialised as Julian writes) bytes by
12649 * the longest match routines. Update the high water mark for the next
12650 * time through here. WIN_INIT is set to MAX_MATCH since the longest match
12651 * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
12652 */
12653// if (s.high_water < s.window_size) {
12654// var curr = s.strstart + s.lookahead;
12655// var init = 0;
12656//
12657// if (s.high_water < curr) {
12658// /* Previous high water mark below current data -- zero WIN_INIT
12659// * bytes or up to end of window, whichever is less.
12660// */
12661// init = s.window_size - curr;
12662// if (init > WIN_INIT)
12663// init = WIN_INIT;
12664// zmemzero(s->window + curr, (unsigned)init);
12665// s->high_water = curr + init;
12666// }
12667// else if (s->high_water < (ulg)curr + WIN_INIT) {
12668// /* High water mark at or above current data, but below current data
12669// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
12670// * to end of window, whichever is less.
12671// */
12672// init = (ulg)curr + WIN_INIT - s->high_water;
12673// if (init > s->window_size - s->high_water)
12674// init = s->window_size - s->high_water;
12675// zmemzero(s->window + s->high_water, (unsigned)init);
12676// s->high_water += init;
12677// }
12678// }
12679//
12680// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
12681// "not enough room for search");
12682}
12683
12684/* ===========================================================================
12685 * Copy without compression as much as possible from the input stream, return
12686 * the current block state.
12687 * This function does not insert new strings in the dictionary since
12688 * uncompressible data is probably not useful. This function is used
12689 * only for the level=0 compression option.
12690 * NOTE: this function should be optimized to avoid extra copying from
12691 * window to pending_buf.
12692 */
12693function deflate_stored(s, flush) {
12694 /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
12695 * to pending_buf_size, and each stored block has a 5 byte header:
12696 */
12697 var max_block_size = 0xffff;
12698
12699 if (max_block_size > s.pending_buf_size - 5) {
12700 max_block_size = s.pending_buf_size - 5;
12701 }
12702
12703 /* Copy as much as possible from input to output: */
12704 for (;;) {
12705 /* Fill the window as much as possible: */
12706 if (s.lookahead <= 1) {
12707
12708 //Assert(s->strstart < s->w_size+MAX_DIST(s) ||
12709 // s->block_start >= (long)s->w_size, "slide too late");
12710// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||
12711// s.block_start >= s.w_size)) {
12712// throw new Error("slide too late");
12713// }
12714
12715 fill_window(s);
12716 if (s.lookahead === 0 && flush === Z_NO_FLUSH) {
12717 return BS_NEED_MORE;
12718 }
12719
12720 if (s.lookahead === 0) {
12721 break;
12722 }
12723 /* flush the current block */
12724 }
12725 //Assert(s->block_start >= 0L, "block gone");
12726// if (s.block_start < 0) throw new Error("block gone");
12727
12728 s.strstart += s.lookahead;
12729 s.lookahead = 0;
12730
12731 /* Emit a stored block if pending_buf will be full: */
12732 var max_start = s.block_start + max_block_size;
12733
12734 if (s.strstart === 0 || s.strstart >= max_start) {
12735 /* strstart == 0 is possible when wraparound on 16-bit machine */
12736 s.lookahead = s.strstart - max_start;
12737 s.strstart = max_start;
12738 /*** FLUSH_BLOCK(s, 0); ***/
12739 flush_block_only(s, false);
12740 if (s.strm.avail_out === 0) {
12741 return BS_NEED_MORE;
12742 }
12743 /***/
12744
12745
12746 }
12747 /* Flush if we may have to slide, otherwise block_start may become
12748 * negative and the data will be gone:
12749 */
12750 if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {
12751 /*** FLUSH_BLOCK(s, 0); ***/
12752 flush_block_only(s, false);
12753 if (s.strm.avail_out === 0) {
12754 return BS_NEED_MORE;
12755 }
12756 /***/
12757 }
12758 }
12759
12760 s.insert = 0;
12761
12762 if (flush === Z_FINISH) {
12763 /*** FLUSH_BLOCK(s, 1); ***/
12764 flush_block_only(s, true);
12765 if (s.strm.avail_out === 0) {
12766 return BS_FINISH_STARTED;
12767 }
12768 /***/
12769 return BS_FINISH_DONE;
12770 }
12771
12772 if (s.strstart > s.block_start) {
12773 /*** FLUSH_BLOCK(s, 0); ***/
12774 flush_block_only(s, false);
12775 if (s.strm.avail_out === 0) {
12776 return BS_NEED_MORE;
12777 }
12778 /***/
12779 }
12780
12781 return BS_NEED_MORE;
12782}
12783
12784/* ===========================================================================
12785 * Compress as much as possible from the input stream, return the current
12786 * block state.
12787 * This function does not perform lazy evaluation of matches and inserts
12788 * new strings in the dictionary only for unmatched strings or for short
12789 * matches. It is used only for the fast compression options.
12790 */
12791function deflate_fast(s, flush) {
12792 var hash_head; /* head of the hash chain */
12793 var bflush; /* set if current block must be flushed */
12794
12795 for (;;) {
12796 /* Make sure that we always have enough lookahead, except
12797 * at the end of the input file. We need MAX_MATCH bytes
12798 * for the next match, plus MIN_MATCH bytes to insert the
12799 * string following the next match.
12800 */
12801 if (s.lookahead < MIN_LOOKAHEAD) {
12802 fill_window(s);
12803 if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
12804 return BS_NEED_MORE;
12805 }
12806 if (s.lookahead === 0) {
12807 break; /* flush the current block */
12808 }
12809 }
12810
12811 /* Insert the string window[strstart .. strstart+2] in the
12812 * dictionary, and set hash_head to the head of the hash chain:
12813 */
12814 hash_head = 0/*NIL*/;
12815 if (s.lookahead >= MIN_MATCH) {
12816 /*** INSERT_STRING(s, s.strstart, hash_head); ***/
12817 s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
12818 hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
12819 s.head[s.ins_h] = s.strstart;
12820 /***/
12821 }
12822
12823 /* Find the longest match, discarding those <= prev_length.
12824 * At this point we have always match_length < MIN_MATCH
12825 */
12826 if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {
12827 /* To simplify the code, we prevent matches with the string
12828 * of window index 0 (in particular we have to avoid a match
12829 * of the string with itself at the start of the input file).
12830 */
12831 s.match_length = longest_match(s, hash_head);
12832 /* longest_match() sets match_start */
12833 }
12834 if (s.match_length >= MIN_MATCH) {
12835 // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only
12836
12837 /*** _tr_tally_dist(s, s.strstart - s.match_start,
12838 s.match_length - MIN_MATCH, bflush); ***/
12839 bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);
12840
12841 s.lookahead -= s.match_length;
12842
12843 /* Insert new strings in the hash table only if the match length
12844 * is not too large. This saves time but degrades compression.
12845 */
12846 if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {
12847 s.match_length--; /* string at strstart already in table */
12848 do {
12849 s.strstart++;
12850 /*** INSERT_STRING(s, s.strstart, hash_head); ***/
12851 s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
12852 hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
12853 s.head[s.ins_h] = s.strstart;
12854 /***/
12855 /* strstart never exceeds WSIZE-MAX_MATCH, so there are
12856 * always MIN_MATCH bytes ahead.
12857 */
12858 } while (--s.match_length !== 0);
12859 s.strstart++;
12860 } else
12861 {
12862 s.strstart += s.match_length;
12863 s.match_length = 0;
12864 s.ins_h = s.window[s.strstart];
12865 /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */
12866 s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;
12867
12868//#if MIN_MATCH != 3
12869// Call UPDATE_HASH() MIN_MATCH-3 more times
12870//#endif
12871 /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
12872 * matter since it will be recomputed at next deflate call.
12873 */
12874 }
12875 } else {
12876 /* No match, output a literal byte */
12877 //Tracevv((stderr,"%c", s.window[s.strstart]));
12878 /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
12879 bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
12880
12881 s.lookahead--;
12882 s.strstart++;
12883 }
12884 if (bflush) {
12885 /*** FLUSH_BLOCK(s, 0); ***/
12886 flush_block_only(s, false);
12887 if (s.strm.avail_out === 0) {
12888 return BS_NEED_MORE;
12889 }
12890 /***/
12891 }
12892 }
12893 s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);
12894 if (flush === Z_FINISH) {
12895 /*** FLUSH_BLOCK(s, 1); ***/
12896 flush_block_only(s, true);
12897 if (s.strm.avail_out === 0) {
12898 return BS_FINISH_STARTED;
12899 }
12900 /***/
12901 return BS_FINISH_DONE;
12902 }
12903 if (s.last_lit) {
12904 /*** FLUSH_BLOCK(s, 0); ***/
12905 flush_block_only(s, false);
12906 if (s.strm.avail_out === 0) {
12907 return BS_NEED_MORE;
12908 }
12909 /***/
12910 }
12911 return BS_BLOCK_DONE;
12912}
12913
12914/* ===========================================================================
12915 * Same as above, but achieves better compression. We use a lazy
12916 * evaluation for matches: a match is finally adopted only if there is
12917 * no better match at the next window position.
12918 */
12919function deflate_slow(s, flush) {
12920 var hash_head; /* head of hash chain */
12921 var bflush; /* set if current block must be flushed */
12922
12923 var max_insert;
12924
12925 /* Process the input block. */
12926 for (;;) {
12927 /* Make sure that we always have enough lookahead, except
12928 * at the end of the input file. We need MAX_MATCH bytes
12929 * for the next match, plus MIN_MATCH bytes to insert the
12930 * string following the next match.
12931 */
12932 if (s.lookahead < MIN_LOOKAHEAD) {
12933 fill_window(s);
12934 if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
12935 return BS_NEED_MORE;
12936 }
12937 if (s.lookahead === 0) { break; } /* flush the current block */
12938 }
12939
12940 /* Insert the string window[strstart .. strstart+2] in the
12941 * dictionary, and set hash_head to the head of the hash chain:
12942 */
12943 hash_head = 0/*NIL*/;
12944 if (s.lookahead >= MIN_MATCH) {
12945 /*** INSERT_STRING(s, s.strstart, hash_head); ***/
12946 s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
12947 hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
12948 s.head[s.ins_h] = s.strstart;
12949 /***/
12950 }
12951
12952 /* Find the longest match, discarding those <= prev_length.
12953 */
12954 s.prev_length = s.match_length;
12955 s.prev_match = s.match_start;
12956 s.match_length = MIN_MATCH - 1;
12957
12958 if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&
12959 s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {
12960 /* To simplify the code, we prevent matches with the string
12961 * of window index 0 (in particular we have to avoid a match
12962 * of the string with itself at the start of the input file).
12963 */
12964 s.match_length = longest_match(s, hash_head);
12965 /* longest_match() sets match_start */
12966
12967 if (s.match_length <= 5 &&
12968 (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {
12969
12970 /* If prev_match is also MIN_MATCH, match_start is garbage
12971 * but we will ignore the current match anyway.
12972 */
12973 s.match_length = MIN_MATCH - 1;
12974 }
12975 }
12976 /* If there was a match at the previous step and the current
12977 * match is not better, output the previous match:
12978 */
12979 if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {
12980 max_insert = s.strstart + s.lookahead - MIN_MATCH;
12981 /* Do not insert strings in hash table beyond this. */
12982
12983 //check_match(s, s.strstart-1, s.prev_match, s.prev_length);
12984
12985 /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,
12986 s.prev_length - MIN_MATCH, bflush);***/
12987 bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);
12988 /* Insert in hash table all strings up to the end of the match.
12989 * strstart-1 and strstart are already inserted. If there is not
12990 * enough lookahead, the last two strings are not inserted in
12991 * the hash table.
12992 */
12993 s.lookahead -= s.prev_length - 1;
12994 s.prev_length -= 2;
12995 do {
12996 if (++s.strstart <= max_insert) {
12997 /*** INSERT_STRING(s, s.strstart, hash_head); ***/
12998 s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
12999 hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
13000 s.head[s.ins_h] = s.strstart;
13001 /***/
13002 }
13003 } while (--s.prev_length !== 0);
13004 s.match_available = 0;
13005 s.match_length = MIN_MATCH - 1;
13006 s.strstart++;
13007
13008 if (bflush) {
13009 /*** FLUSH_BLOCK(s, 0); ***/
13010 flush_block_only(s, false);
13011 if (s.strm.avail_out === 0) {
13012 return BS_NEED_MORE;
13013 }
13014 /***/
13015 }
13016
13017 } else if (s.match_available) {
13018 /* If there was no match at the previous position, output a
13019 * single literal. If there was a match but the current match
13020 * is longer, truncate the previous match to a single literal.
13021 */
13022 //Tracevv((stderr,"%c", s->window[s->strstart-1]));
13023 /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
13024 bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);
13025
13026 if (bflush) {
13027 /*** FLUSH_BLOCK_ONLY(s, 0) ***/
13028 flush_block_only(s, false);
13029 /***/
13030 }
13031 s.strstart++;
13032 s.lookahead--;
13033 if (s.strm.avail_out === 0) {
13034 return BS_NEED_MORE;
13035 }
13036 } else {
13037 /* There is no previous match to compare with, wait for
13038 * the next step to decide.
13039 */
13040 s.match_available = 1;
13041 s.strstart++;
13042 s.lookahead--;
13043 }
13044 }
13045 //Assert (flush != Z_NO_FLUSH, "no flush?");
13046 if (s.match_available) {
13047 //Tracevv((stderr,"%c", s->window[s->strstart-1]));
13048 /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
13049 bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);
13050
13051 s.match_available = 0;
13052 }
13053 s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;
13054 if (flush === Z_FINISH) {
13055 /*** FLUSH_BLOCK(s, 1); ***/
13056 flush_block_only(s, true);
13057 if (s.strm.avail_out === 0) {
13058 return BS_FINISH_STARTED;
13059 }
13060 /***/
13061 return BS_FINISH_DONE;
13062 }
13063 if (s.last_lit) {
13064 /*** FLUSH_BLOCK(s, 0); ***/
13065 flush_block_only(s, false);
13066 if (s.strm.avail_out === 0) {
13067 return BS_NEED_MORE;
13068 }
13069 /***/
13070 }
13071
13072 return BS_BLOCK_DONE;
13073}
13074
13075
13076/* ===========================================================================
13077 * For Z_RLE, simply look for runs of bytes, generate matches only of distance
13078 * one. Do not maintain a hash table. (It will be regenerated if this run of
13079 * deflate switches away from Z_RLE.)
13080 */
13081function deflate_rle(s, flush) {
13082 var bflush; /* set if current block must be flushed */
13083 var prev; /* byte at distance one to match */
13084 var scan, strend; /* scan goes up to strend for length of run */
13085
13086 var _win = s.window;
13087
13088 for (;;) {
13089 /* Make sure that we always have enough lookahead, except
13090 * at the end of the input file. We need MAX_MATCH bytes
13091 * for the longest run, plus one for the unrolled loop.
13092 */
13093 if (s.lookahead <= MAX_MATCH) {
13094 fill_window(s);
13095 if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {
13096 return BS_NEED_MORE;
13097 }
13098 if (s.lookahead === 0) { break; } /* flush the current block */
13099 }
13100
13101 /* See how many times the previous byte repeats */
13102 s.match_length = 0;
13103 if (s.lookahead >= MIN_MATCH && s.strstart > 0) {
13104 scan = s.strstart - 1;
13105 prev = _win[scan];
13106 if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {
13107 strend = s.strstart + MAX_MATCH;
13108 do {
13109 /*jshint noempty:false*/
13110 } while (prev === _win[++scan] && prev === _win[++scan] &&
13111 prev === _win[++scan] && prev === _win[++scan] &&
13112 prev === _win[++scan] && prev === _win[++scan] &&
13113 prev === _win[++scan] && prev === _win[++scan] &&
13114 scan < strend);
13115 s.match_length = MAX_MATCH - (strend - scan);
13116 if (s.match_length > s.lookahead) {
13117 s.match_length = s.lookahead;
13118 }
13119 }
13120 //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
13121 }
13122
13123 /* Emit match if have run of MIN_MATCH or longer, else emit literal */
13124 if (s.match_length >= MIN_MATCH) {
13125 //check_match(s, s.strstart, s.strstart - 1, s.match_length);
13126
13127 /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/
13128 bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);
13129
13130 s.lookahead -= s.match_length;
13131 s.strstart += s.match_length;
13132 s.match_length = 0;
13133 } else {
13134 /* No match, output a literal byte */
13135 //Tracevv((stderr,"%c", s->window[s->strstart]));
13136 /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
13137 bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
13138
13139 s.lookahead--;
13140 s.strstart++;
13141 }
13142 if (bflush) {
13143 /*** FLUSH_BLOCK(s, 0); ***/
13144 flush_block_only(s, false);
13145 if (s.strm.avail_out === 0) {
13146 return BS_NEED_MORE;
13147 }
13148 /***/
13149 }
13150 }
13151 s.insert = 0;
13152 if (flush === Z_FINISH) {
13153 /*** FLUSH_BLOCK(s, 1); ***/
13154 flush_block_only(s, true);
13155 if (s.strm.avail_out === 0) {
13156 return BS_FINISH_STARTED;
13157 }
13158 /***/
13159 return BS_FINISH_DONE;
13160 }
13161 if (s.last_lit) {
13162 /*** FLUSH_BLOCK(s, 0); ***/
13163 flush_block_only(s, false);
13164 if (s.strm.avail_out === 0) {
13165 return BS_NEED_MORE;
13166 }
13167 /***/
13168 }
13169 return BS_BLOCK_DONE;
13170}
13171
13172/* ===========================================================================
13173 * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.
13174 * (It will be regenerated if this run of deflate switches away from Huffman.)
13175 */
13176function deflate_huff(s, flush) {
13177 var bflush; /* set if current block must be flushed */
13178
13179 for (;;) {
13180 /* Make sure that we have a literal to write. */
13181 if (s.lookahead === 0) {
13182 fill_window(s);
13183 if (s.lookahead === 0) {
13184 if (flush === Z_NO_FLUSH) {
13185 return BS_NEED_MORE;
13186 }
13187 break; /* flush the current block */
13188 }
13189 }
13190
13191 /* Output a literal byte */
13192 s.match_length = 0;
13193 //Tracevv((stderr,"%c", s->window[s->strstart]));
13194 /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
13195 bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
13196 s.lookahead--;
13197 s.strstart++;
13198 if (bflush) {
13199 /*** FLUSH_BLOCK(s, 0); ***/
13200 flush_block_only(s, false);
13201 if (s.strm.avail_out === 0) {
13202 return BS_NEED_MORE;
13203 }
13204 /***/
13205 }
13206 }
13207 s.insert = 0;
13208 if (flush === Z_FINISH) {
13209 /*** FLUSH_BLOCK(s, 1); ***/
13210 flush_block_only(s, true);
13211 if (s.strm.avail_out === 0) {
13212 return BS_FINISH_STARTED;
13213 }
13214 /***/
13215 return BS_FINISH_DONE;
13216 }
13217 if (s.last_lit) {
13218 /*** FLUSH_BLOCK(s, 0); ***/
13219 flush_block_only(s, false);
13220 if (s.strm.avail_out === 0) {
13221 return BS_NEED_MORE;
13222 }
13223 /***/
13224 }
13225 return BS_BLOCK_DONE;
13226}
13227
13228/* Values for max_lazy_match, good_match and max_chain_length, depending on
13229 * the desired pack level (0..9). The values given below have been tuned to
13230 * exclude worst case performance for pathological files. Better values may be
13231 * found for specific files.
13232 */
13233function Config(good_length, max_lazy, nice_length, max_chain, func) {
13234 this.good_length = good_length;
13235 this.max_lazy = max_lazy;
13236 this.nice_length = nice_length;
13237 this.max_chain = max_chain;
13238 this.func = func;
13239}
13240
13241var configuration_table;
13242
13243configuration_table = [
13244 /* good lazy nice chain */
13245 new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */
13246 new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */
13247 new Config(4, 5, 16, 8, deflate_fast), /* 2 */
13248 new Config(4, 6, 32, 32, deflate_fast), /* 3 */
13249
13250 new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */
13251 new Config(8, 16, 32, 32, deflate_slow), /* 5 */
13252 new Config(8, 16, 128, 128, deflate_slow), /* 6 */
13253 new Config(8, 32, 128, 256, deflate_slow), /* 7 */
13254 new Config(32, 128, 258, 1024, deflate_slow), /* 8 */
13255 new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */
13256];
13257
13258
13259/* ===========================================================================
13260 * Initialize the "longest match" routines for a new zlib stream
13261 */
13262function lm_init(s) {
13263 s.window_size = 2 * s.w_size;
13264
13265 /*** CLEAR_HASH(s); ***/
13266 zero(s.head); // Fill with NIL (= 0);
13267
13268 /* Set the default configuration parameters:
13269 */
13270 s.max_lazy_match = configuration_table[s.level].max_lazy;
13271 s.good_match = configuration_table[s.level].good_length;
13272 s.nice_match = configuration_table[s.level].nice_length;
13273 s.max_chain_length = configuration_table[s.level].max_chain;
13274
13275 s.strstart = 0;
13276 s.block_start = 0;
13277 s.lookahead = 0;
13278 s.insert = 0;
13279 s.match_length = s.prev_length = MIN_MATCH - 1;
13280 s.match_available = 0;
13281 s.ins_h = 0;
13282}
13283
13284
13285function DeflateState() {
13286 this.strm = null; /* pointer back to this zlib stream */
13287 this.status = 0; /* as the name implies */
13288 this.pending_buf = null; /* output still pending */
13289 this.pending_buf_size = 0; /* size of pending_buf */
13290 this.pending_out = 0; /* next pending byte to output to the stream */
13291 this.pending = 0; /* nb of bytes in the pending buffer */
13292 this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */
13293 this.gzhead = null; /* gzip header information to write */
13294 this.gzindex = 0; /* where in extra, name, or comment */
13295 this.method = Z_DEFLATED; /* can only be DEFLATED */
13296 this.last_flush = -1; /* value of flush param for previous deflate call */
13297
13298 this.w_size = 0; /* LZ77 window size (32K by default) */
13299 this.w_bits = 0; /* log2(w_size) (8..16) */
13300 this.w_mask = 0; /* w_size - 1 */
13301
13302 this.window = null;
13303 /* Sliding window. Input bytes are read into the second half of the window,
13304 * and move to the first half later to keep a dictionary of at least wSize
13305 * bytes. With this organization, matches are limited to a distance of
13306 * wSize-MAX_MATCH bytes, but this ensures that IO is always
13307 * performed with a length multiple of the block size.
13308 */
13309
13310 this.window_size = 0;
13311 /* Actual size of window: 2*wSize, except when the user input buffer
13312 * is directly used as sliding window.
13313 */
13314
13315 this.prev = null;
13316 /* Link to older string with same hash index. To limit the size of this
13317 * array to 64K, this link is maintained only for the last 32K strings.
13318 * An index in this array is thus a window index modulo 32K.
13319 */
13320
13321 this.head = null; /* Heads of the hash chains or NIL. */
13322
13323 this.ins_h = 0; /* hash index of string to be inserted */
13324 this.hash_size = 0; /* number of elements in hash table */
13325 this.hash_bits = 0; /* log2(hash_size) */
13326 this.hash_mask = 0; /* hash_size-1 */
13327
13328 this.hash_shift = 0;
13329 /* Number of bits by which ins_h must be shifted at each input
13330 * step. It must be such that after MIN_MATCH steps, the oldest
13331 * byte no longer takes part in the hash key, that is:
13332 * hash_shift * MIN_MATCH >= hash_bits
13333 */
13334
13335 this.block_start = 0;
13336 /* Window position at the beginning of the current output block. Gets
13337 * negative when the window is moved backwards.
13338 */
13339
13340 this.match_length = 0; /* length of best match */
13341 this.prev_match = 0; /* previous match */
13342 this.match_available = 0; /* set if previous match exists */
13343 this.strstart = 0; /* start of string to insert */
13344 this.match_start = 0; /* start of matching string */
13345 this.lookahead = 0; /* number of valid bytes ahead in window */
13346
13347 this.prev_length = 0;
13348 /* Length of the best match at previous step. Matches not greater than this
13349 * are discarded. This is used in the lazy match evaluation.
13350 */
13351
13352 this.max_chain_length = 0;
13353 /* To speed up deflation, hash chains are never searched beyond this
13354 * length. A higher limit improves compression ratio but degrades the
13355 * speed.
13356 */
13357
13358 this.max_lazy_match = 0;
13359 /* Attempt to find a better match only when the current match is strictly
13360 * smaller than this value. This mechanism is used only for compression
13361 * levels >= 4.
13362 */
13363 // That's alias to max_lazy_match, don't use directly
13364 //this.max_insert_length = 0;
13365 /* Insert new strings in the hash table only if the match length is not
13366 * greater than this length. This saves time but degrades compression.
13367 * max_insert_length is used only for compression levels <= 3.
13368 */
13369
13370 this.level = 0; /* compression level (1..9) */
13371 this.strategy = 0; /* favor or force Huffman coding*/
13372
13373 this.good_match = 0;
13374 /* Use a faster search when the previous match is longer than this */
13375
13376 this.nice_match = 0; /* Stop searching when current match exceeds this */
13377
13378 /* used by trees.c: */
13379
13380 /* Didn't use ct_data typedef below to suppress compiler warning */
13381
13382 // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
13383 // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
13384 // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */
13385
13386 // Use flat array of DOUBLE size, with interleaved fata,
13387 // because JS does not support effective
13388 this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);
13389 this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);
13390 this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);
13391 zero(this.dyn_ltree);
13392 zero(this.dyn_dtree);
13393 zero(this.bl_tree);
13394
13395 this.l_desc = null; /* desc. for literal tree */
13396 this.d_desc = null; /* desc. for distance tree */
13397 this.bl_desc = null; /* desc. for bit length tree */
13398
13399 //ush bl_count[MAX_BITS+1];
13400 this.bl_count = new utils.Buf16(MAX_BITS + 1);
13401 /* number of codes at each bit length for an optimal tree */
13402
13403 //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */
13404 this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */
13405 zero(this.heap);
13406
13407 this.heap_len = 0; /* number of elements in the heap */
13408 this.heap_max = 0; /* element of largest frequency */
13409 /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
13410 * The same heap array is used to build all trees.
13411 */
13412
13413 this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];
13414 zero(this.depth);
13415 /* Depth of each subtree used as tie breaker for trees of equal frequency
13416 */
13417
13418 this.l_buf = 0; /* buffer index for literals or lengths */
13419
13420 this.lit_bufsize = 0;
13421 /* Size of match buffer for literals/lengths. There are 4 reasons for
13422 * limiting lit_bufsize to 64K:
13423 * - frequencies can be kept in 16 bit counters
13424 * - if compression is not successful for the first block, all input
13425 * data is still in the window so we can still emit a stored block even
13426 * when input comes from standard input. (This can also be done for
13427 * all blocks if lit_bufsize is not greater than 32K.)
13428 * - if compression is not successful for a file smaller than 64K, we can
13429 * even emit a stored file instead of a stored block (saving 5 bytes).
13430 * This is applicable only for zip (not gzip or zlib).
13431 * - creating new Huffman trees less frequently may not provide fast
13432 * adaptation to changes in the input data statistics. (Take for
13433 * example a binary file with poorly compressible code followed by
13434 * a highly compressible string table.) Smaller buffer sizes give
13435 * fast adaptation but have of course the overhead of transmitting
13436 * trees more frequently.
13437 * - I can't count above 4
13438 */
13439
13440 this.last_lit = 0; /* running index in l_buf */
13441
13442 this.d_buf = 0;
13443 /* Buffer index for distances. To simplify the code, d_buf and l_buf have
13444 * the same number of elements. To use different lengths, an extra flag
13445 * array would be necessary.
13446 */
13447
13448 this.opt_len = 0; /* bit length of current block with optimal trees */
13449 this.static_len = 0; /* bit length of current block with static trees */
13450 this.matches = 0; /* number of string matches in current block */
13451 this.insert = 0; /* bytes at end of window left to insert */
13452
13453
13454 this.bi_buf = 0;
13455 /* Output buffer. bits are inserted starting at the bottom (least
13456 * significant bits).
13457 */
13458 this.bi_valid = 0;
13459 /* Number of valid bits in bi_buf. All bits above the last valid bit
13460 * are always zero.
13461 */
13462
13463 // Used for window memory init. We safely ignore it for JS. That makes
13464 // sense only for pointers and memory check tools.
13465 //this.high_water = 0;
13466 /* High water mark offset in window for initialized bytes -- bytes above
13467 * this are set to zero in order to avoid memory check warnings when
13468 * longest match routines access bytes past the input. This is then
13469 * updated to the new high water mark.
13470 */
13471}
13472
13473
13474function deflateResetKeep(strm) {
13475 var s;
13476
13477 if (!strm || !strm.state) {
13478 return err(strm, Z_STREAM_ERROR);
13479 }
13480
13481 strm.total_in = strm.total_out = 0;
13482 strm.data_type = Z_UNKNOWN;
13483
13484 s = strm.state;
13485 s.pending = 0;
13486 s.pending_out = 0;
13487
13488 if (s.wrap < 0) {
13489 s.wrap = -s.wrap;
13490 /* was made negative by deflate(..., Z_FINISH); */
13491 }
13492 s.status = (s.wrap ? INIT_STATE : BUSY_STATE);
13493 strm.adler = (s.wrap === 2) ?
13494 0 // crc32(0, Z_NULL, 0)
13495 :
13496 1; // adler32(0, Z_NULL, 0)
13497 s.last_flush = Z_NO_FLUSH;
13498 trees._tr_init(s);
13499 return Z_OK;
13500}
13501
13502
13503function deflateReset(strm) {
13504 var ret = deflateResetKeep(strm);
13505 if (ret === Z_OK) {
13506 lm_init(strm.state);
13507 }
13508 return ret;
13509}
13510
13511
13512function deflateSetHeader(strm, head) {
13513 if (!strm || !strm.state) { return Z_STREAM_ERROR; }
13514 if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }
13515 strm.state.gzhead = head;
13516 return Z_OK;
13517}
13518
13519
13520function deflateInit2(strm, level, method, windowBits, memLevel, strategy) {
13521 if (!strm) { // === Z_NULL
13522 return Z_STREAM_ERROR;
13523 }
13524 var wrap = 1;
13525
13526 if (level === Z_DEFAULT_COMPRESSION) {
13527 level = 6;
13528 }
13529
13530 if (windowBits < 0) { /* suppress zlib wrapper */
13531 wrap = 0;
13532 windowBits = -windowBits;
13533 }
13534
13535 else if (windowBits > 15) {
13536 wrap = 2; /* write gzip wrapper instead */
13537 windowBits -= 16;
13538 }
13539
13540
13541 if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||
13542 windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
13543 strategy < 0 || strategy > Z_FIXED) {
13544 return err(strm, Z_STREAM_ERROR);
13545 }
13546
13547
13548 if (windowBits === 8) {
13549 windowBits = 9;
13550 }
13551 /* until 256-byte window bug fixed */
13552
13553 var s = new DeflateState();
13554
13555 strm.state = s;
13556 s.strm = strm;
13557
13558 s.wrap = wrap;
13559 s.gzhead = null;
13560 s.w_bits = windowBits;
13561 s.w_size = 1 << s.w_bits;
13562 s.w_mask = s.w_size - 1;
13563
13564 s.hash_bits = memLevel + 7;
13565 s.hash_size = 1 << s.hash_bits;
13566 s.hash_mask = s.hash_size - 1;
13567 s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);
13568
13569 s.window = new utils.Buf8(s.w_size * 2);
13570 s.head = new utils.Buf16(s.hash_size);
13571 s.prev = new utils.Buf16(s.w_size);
13572
13573 // Don't need mem init magic for JS.
13574 //s.high_water = 0; /* nothing written to s->window yet */
13575
13576 s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
13577
13578 s.pending_buf_size = s.lit_bufsize * 4;
13579
13580 //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
13581 //s->pending_buf = (uchf *) overlay;
13582 s.pending_buf = new utils.Buf8(s.pending_buf_size);
13583
13584 // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)
13585 //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
13586 s.d_buf = 1 * s.lit_bufsize;
13587
13588 //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
13589 s.l_buf = (1 + 2) * s.lit_bufsize;
13590
13591 s.level = level;
13592 s.strategy = strategy;
13593 s.method = method;
13594
13595 return deflateReset(strm);
13596}
13597
13598function deflateInit(strm, level) {
13599 return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);
13600}
13601
13602
13603function deflate(strm, flush) {
13604 var old_flush, s;
13605 var beg, val; // for gzip header write only
13606
13607 if (!strm || !strm.state ||
13608 flush > Z_BLOCK || flush < 0) {
13609 return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;
13610 }
13611
13612 s = strm.state;
13613
13614 if (!strm.output ||
13615 (!strm.input && strm.avail_in !== 0) ||
13616 (s.status === FINISH_STATE && flush !== Z_FINISH)) {
13617 return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);
13618 }
13619
13620 s.strm = strm; /* just in case */
13621 old_flush = s.last_flush;
13622 s.last_flush = flush;
13623
13624 /* Write the header */
13625 if (s.status === INIT_STATE) {
13626
13627 if (s.wrap === 2) { // GZIP header
13628 strm.adler = 0; //crc32(0L, Z_NULL, 0);
13629 put_byte(s, 31);
13630 put_byte(s, 139);
13631 put_byte(s, 8);
13632 if (!s.gzhead) { // s->gzhead == Z_NULL
13633 put_byte(s, 0);
13634 put_byte(s, 0);
13635 put_byte(s, 0);
13636 put_byte(s, 0);
13637 put_byte(s, 0);
13638 put_byte(s, s.level === 9 ? 2 :
13639 (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
13640 4 : 0));
13641 put_byte(s, OS_CODE);
13642 s.status = BUSY_STATE;
13643 }
13644 else {
13645 put_byte(s, (s.gzhead.text ? 1 : 0) +
13646 (s.gzhead.hcrc ? 2 : 0) +
13647 (!s.gzhead.extra ? 0 : 4) +
13648 (!s.gzhead.name ? 0 : 8) +
13649 (!s.gzhead.comment ? 0 : 16)
13650 );
13651 put_byte(s, s.gzhead.time & 0xff);
13652 put_byte(s, (s.gzhead.time >> 8) & 0xff);
13653 put_byte(s, (s.gzhead.time >> 16) & 0xff);
13654 put_byte(s, (s.gzhead.time >> 24) & 0xff);
13655 put_byte(s, s.level === 9 ? 2 :
13656 (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
13657 4 : 0));
13658 put_byte(s, s.gzhead.os & 0xff);
13659 if (s.gzhead.extra && s.gzhead.extra.length) {
13660 put_byte(s, s.gzhead.extra.length & 0xff);
13661 put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);
13662 }
13663 if (s.gzhead.hcrc) {
13664 strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);
13665 }
13666 s.gzindex = 0;
13667 s.status = EXTRA_STATE;
13668 }
13669 }
13670 else // DEFLATE header
13671 {
13672 var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;
13673 var level_flags = -1;
13674
13675 if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {
13676 level_flags = 0;
13677 } else if (s.level < 6) {
13678 level_flags = 1;
13679 } else if (s.level === 6) {
13680 level_flags = 2;
13681 } else {
13682 level_flags = 3;
13683 }
13684 header |= (level_flags << 6);
13685 if (s.strstart !== 0) { header |= PRESET_DICT; }
13686 header += 31 - (header % 31);
13687
13688 s.status = BUSY_STATE;
13689 putShortMSB(s, header);
13690
13691 /* Save the adler32 of the preset dictionary: */
13692 if (s.strstart !== 0) {
13693 putShortMSB(s, strm.adler >>> 16);
13694 putShortMSB(s, strm.adler & 0xffff);
13695 }
13696 strm.adler = 1; // adler32(0L, Z_NULL, 0);
13697 }
13698 }
13699
13700//#ifdef GZIP
13701 if (s.status === EXTRA_STATE) {
13702 if (s.gzhead.extra/* != Z_NULL*/) {
13703 beg = s.pending; /* start of bytes to update crc */
13704
13705 while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {
13706 if (s.pending === s.pending_buf_size) {
13707 if (s.gzhead.hcrc && s.pending > beg) {
13708 strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
13709 }
13710 flush_pending(strm);
13711 beg = s.pending;
13712 if (s.pending === s.pending_buf_size) {
13713 break;
13714 }
13715 }
13716 put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);
13717 s.gzindex++;
13718 }
13719 if (s.gzhead.hcrc && s.pending > beg) {
13720 strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
13721 }
13722 if (s.gzindex === s.gzhead.extra.length) {
13723 s.gzindex = 0;
13724 s.status = NAME_STATE;
13725 }
13726 }
13727 else {
13728 s.status = NAME_STATE;
13729 }
13730 }
13731 if (s.status === NAME_STATE) {
13732 if (s.gzhead.name/* != Z_NULL*/) {
13733 beg = s.pending; /* start of bytes to update crc */
13734 //int val;
13735
13736 do {
13737 if (s.pending === s.pending_buf_size) {
13738 if (s.gzhead.hcrc && s.pending > beg) {
13739 strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
13740 }
13741 flush_pending(strm);
13742 beg = s.pending;
13743 if (s.pending === s.pending_buf_size) {
13744 val = 1;
13745 break;
13746 }
13747 }
13748 // JS specific: little magic to add zero terminator to end of string
13749 if (s.gzindex < s.gzhead.name.length) {
13750 val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;
13751 } else {
13752 val = 0;
13753 }
13754 put_byte(s, val);
13755 } while (val !== 0);
13756
13757 if (s.gzhead.hcrc && s.pending > beg) {
13758 strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
13759 }
13760 if (val === 0) {
13761 s.gzindex = 0;
13762 s.status = COMMENT_STATE;
13763 }
13764 }
13765 else {
13766 s.status = COMMENT_STATE;
13767 }
13768 }
13769 if (s.status === COMMENT_STATE) {
13770 if (s.gzhead.comment/* != Z_NULL*/) {
13771 beg = s.pending; /* start of bytes to update crc */
13772 //int val;
13773
13774 do {
13775 if (s.pending === s.pending_buf_size) {
13776 if (s.gzhead.hcrc && s.pending > beg) {
13777 strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
13778 }
13779 flush_pending(strm);
13780 beg = s.pending;
13781 if (s.pending === s.pending_buf_size) {
13782 val = 1;
13783 break;
13784 }
13785 }
13786 // JS specific: little magic to add zero terminator to end of string
13787 if (s.gzindex < s.gzhead.comment.length) {
13788 val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;
13789 } else {
13790 val = 0;
13791 }
13792 put_byte(s, val);
13793 } while (val !== 0);
13794
13795 if (s.gzhead.hcrc && s.pending > beg) {
13796 strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
13797 }
13798 if (val === 0) {
13799 s.status = HCRC_STATE;
13800 }
13801 }
13802 else {
13803 s.status = HCRC_STATE;
13804 }
13805 }
13806 if (s.status === HCRC_STATE) {
13807 if (s.gzhead.hcrc) {
13808 if (s.pending + 2 > s.pending_buf_size) {
13809 flush_pending(strm);
13810 }
13811 if (s.pending + 2 <= s.pending_buf_size) {
13812 put_byte(s, strm.adler & 0xff);
13813 put_byte(s, (strm.adler >> 8) & 0xff);
13814 strm.adler = 0; //crc32(0L, Z_NULL, 0);
13815 s.status = BUSY_STATE;
13816 }
13817 }
13818 else {
13819 s.status = BUSY_STATE;
13820 }
13821 }
13822//#endif
13823
13824 /* Flush as much pending output as possible */
13825 if (s.pending !== 0) {
13826 flush_pending(strm);
13827 if (strm.avail_out === 0) {
13828 /* Since avail_out is 0, deflate will be called again with
13829 * more output space, but possibly with both pending and
13830 * avail_in equal to zero. There won't be anything to do,
13831 * but this is not an error situation so make sure we
13832 * return OK instead of BUF_ERROR at next call of deflate:
13833 */
13834 s.last_flush = -1;
13835 return Z_OK;
13836 }
13837
13838 /* Make sure there is something to do and avoid duplicate consecutive
13839 * flushes. For repeated and useless calls with Z_FINISH, we keep
13840 * returning Z_STREAM_END instead of Z_BUF_ERROR.
13841 */
13842 } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&
13843 flush !== Z_FINISH) {
13844 return err(strm, Z_BUF_ERROR);
13845 }
13846
13847 /* User must not provide more input after the first FINISH: */
13848 if (s.status === FINISH_STATE && strm.avail_in !== 0) {
13849 return err(strm, Z_BUF_ERROR);
13850 }
13851
13852 /* Start a new block or continue the current one.
13853 */
13854 if (strm.avail_in !== 0 || s.lookahead !== 0 ||
13855 (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {
13856 var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :
13857 (s.strategy === Z_RLE ? deflate_rle(s, flush) :
13858 configuration_table[s.level].func(s, flush));
13859
13860 if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {
13861 s.status = FINISH_STATE;
13862 }
13863 if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {
13864 if (strm.avail_out === 0) {
13865 s.last_flush = -1;
13866 /* avoid BUF_ERROR next call, see above */
13867 }
13868 return Z_OK;
13869 /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
13870 * of deflate should use the same flush parameter to make sure
13871 * that the flush is complete. So we don't have to output an
13872 * empty block here, this will be done at next call. This also
13873 * ensures that for a very small output buffer, we emit at most
13874 * one empty block.
13875 */
13876 }
13877 if (bstate === BS_BLOCK_DONE) {
13878 if (flush === Z_PARTIAL_FLUSH) {
13879 trees._tr_align(s);
13880 }
13881 else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */
13882
13883 trees._tr_stored_block(s, 0, 0, false);
13884 /* For a full flush, this empty block will be recognized
13885 * as a special marker by inflate_sync().
13886 */
13887 if (flush === Z_FULL_FLUSH) {
13888 /*** CLEAR_HASH(s); ***/ /* forget history */
13889 zero(s.head); // Fill with NIL (= 0);
13890
13891 if (s.lookahead === 0) {
13892 s.strstart = 0;
13893 s.block_start = 0;
13894 s.insert = 0;
13895 }
13896 }
13897 }
13898 flush_pending(strm);
13899 if (strm.avail_out === 0) {
13900 s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */
13901 return Z_OK;
13902 }
13903 }
13904 }
13905 //Assert(strm->avail_out > 0, "bug2");
13906 //if (strm.avail_out <= 0) { throw new Error("bug2");}
13907
13908 if (flush !== Z_FINISH) { return Z_OK; }
13909 if (s.wrap <= 0) { return Z_STREAM_END; }
13910
13911 /* Write the trailer */
13912 if (s.wrap === 2) {
13913 put_byte(s, strm.adler & 0xff);
13914 put_byte(s, (strm.adler >> 8) & 0xff);
13915 put_byte(s, (strm.adler >> 16) & 0xff);
13916 put_byte(s, (strm.adler >> 24) & 0xff);
13917 put_byte(s, strm.total_in & 0xff);
13918 put_byte(s, (strm.total_in >> 8) & 0xff);
13919 put_byte(s, (strm.total_in >> 16) & 0xff);
13920 put_byte(s, (strm.total_in >> 24) & 0xff);
13921 }
13922 else
13923 {
13924 putShortMSB(s, strm.adler >>> 16);
13925 putShortMSB(s, strm.adler & 0xffff);
13926 }
13927
13928 flush_pending(strm);
13929 /* If avail_out is zero, the application will call deflate again
13930 * to flush the rest.
13931 */
13932 if (s.wrap > 0) { s.wrap = -s.wrap; }
13933 /* write the trailer only once! */
13934 return s.pending !== 0 ? Z_OK : Z_STREAM_END;
13935}
13936
13937function deflateEnd(strm) {
13938 var status;
13939
13940 if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
13941 return Z_STREAM_ERROR;
13942 }
13943
13944 status = strm.state.status;
13945 if (status !== INIT_STATE &&
13946 status !== EXTRA_STATE &&
13947 status !== NAME_STATE &&
13948 status !== COMMENT_STATE &&
13949 status !== HCRC_STATE &&
13950 status !== BUSY_STATE &&
13951 status !== FINISH_STATE
13952 ) {
13953 return err(strm, Z_STREAM_ERROR);
13954 }
13955
13956 strm.state = null;
13957
13958 return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;
13959}
13960
13961
13962/* =========================================================================
13963 * Initializes the compression dictionary from the given byte
13964 * sequence without producing any compressed output.
13965 */
13966function deflateSetDictionary(strm, dictionary) {
13967 var dictLength = dictionary.length;
13968
13969 var s;
13970 var str, n;
13971 var wrap;
13972 var avail;
13973 var next;
13974 var input;
13975 var tmpDict;
13976
13977 if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
13978 return Z_STREAM_ERROR;
13979 }
13980
13981 s = strm.state;
13982 wrap = s.wrap;
13983
13984 if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {
13985 return Z_STREAM_ERROR;
13986 }
13987
13988 /* when using zlib wrappers, compute Adler-32 for provided dictionary */
13989 if (wrap === 1) {
13990 /* adler32(strm->adler, dictionary, dictLength); */
13991 strm.adler = adler32(strm.adler, dictionary, dictLength, 0);
13992 }
13993
13994 s.wrap = 0; /* avoid computing Adler-32 in read_buf */
13995
13996 /* if dictionary would fill window, just replace the history */
13997 if (dictLength >= s.w_size) {
13998 if (wrap === 0) { /* already empty otherwise */
13999 /*** CLEAR_HASH(s); ***/
14000 zero(s.head); // Fill with NIL (= 0);
14001 s.strstart = 0;
14002 s.block_start = 0;
14003 s.insert = 0;
14004 }
14005 /* use the tail */
14006 // dictionary = dictionary.slice(dictLength - s.w_size);
14007 tmpDict = new utils.Buf8(s.w_size);
14008 utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);
14009 dictionary = tmpDict;
14010 dictLength = s.w_size;
14011 }
14012 /* insert dictionary into window and hash */
14013 avail = strm.avail_in;
14014 next = strm.next_in;
14015 input = strm.input;
14016 strm.avail_in = dictLength;
14017 strm.next_in = 0;
14018 strm.input = dictionary;
14019 fill_window(s);
14020 while (s.lookahead >= MIN_MATCH) {
14021 str = s.strstart;
14022 n = s.lookahead - (MIN_MATCH - 1);
14023 do {
14024 /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
14025 s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;
14026
14027 s.prev[str & s.w_mask] = s.head[s.ins_h];
14028
14029 s.head[s.ins_h] = str;
14030 str++;
14031 } while (--n);
14032 s.strstart = str;
14033 s.lookahead = MIN_MATCH - 1;
14034 fill_window(s);
14035 }
14036 s.strstart += s.lookahead;
14037 s.block_start = s.strstart;
14038 s.insert = s.lookahead;
14039 s.lookahead = 0;
14040 s.match_length = s.prev_length = MIN_MATCH - 1;
14041 s.match_available = 0;
14042 strm.next_in = next;
14043 strm.input = input;
14044 strm.avail_in = avail;
14045 s.wrap = wrap;
14046 return Z_OK;
14047}
14048
14049
14050exports.deflateInit = deflateInit;
14051exports.deflateInit2 = deflateInit2;
14052exports.deflateReset = deflateReset;
14053exports.deflateResetKeep = deflateResetKeep;
14054exports.deflateSetHeader = deflateSetHeader;
14055exports.deflate = deflate;
14056exports.deflateEnd = deflateEnd;
14057exports.deflateSetDictionary = deflateSetDictionary;
14058exports.deflateInfo = 'pako deflate (from Nodeca project)';
14059
14060/* Not implemented
14061exports.deflateBound = deflateBound;
14062exports.deflateCopy = deflateCopy;
14063exports.deflateParams = deflateParams;
14064exports.deflatePending = deflatePending;
14065exports.deflatePrime = deflatePrime;
14066exports.deflateTune = deflateTune;
14067*/
14068
14069},{"../utils/common":102,"./adler32":103,"./crc32":105,"./messages":110,"./trees":111}],107:[function(require,module,exports){
14070'use strict';
14071
14072// (C) 1995-2013 Jean-loup Gailly and Mark Adler
14073// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
14074//
14075// This software is provided 'as-is', without any express or implied
14076// warranty. In no event will the authors be held liable for any damages
14077// arising from the use of this software.
14078//
14079// Permission is granted to anyone to use this software for any purpose,
14080// including commercial applications, and to alter it and redistribute it
14081// freely, subject to the following restrictions:
14082//
14083// 1. The origin of this software must not be misrepresented; you must not
14084// claim that you wrote the original software. If you use this software
14085// in a product, an acknowledgment in the product documentation would be
14086// appreciated but is not required.
14087// 2. Altered source versions must be plainly marked as such, and must not be
14088// misrepresented as being the original software.
14089// 3. This notice may not be removed or altered from any source distribution.
14090
14091// See state defs from inflate.js
14092var BAD = 30; /* got a data error -- remain here until reset */
14093var TYPE = 12; /* i: waiting for type bits, including last-flag bit */
14094
14095/*
14096 Decode literal, length, and distance codes and write out the resulting
14097 literal and match bytes until either not enough input or output is
14098 available, an end-of-block is encountered, or a data error is encountered.
14099 When large enough input and output buffers are supplied to inflate(), for
14100 example, a 16K input buffer and a 64K output buffer, more than 95% of the
14101 inflate execution time is spent in this routine.
14102
14103 Entry assumptions:
14104
14105 state.mode === LEN
14106 strm.avail_in >= 6
14107 strm.avail_out >= 258
14108 start >= strm.avail_out
14109 state.bits < 8
14110
14111 On return, state.mode is one of:
14112
14113 LEN -- ran out of enough output space or enough available input
14114 TYPE -- reached end of block code, inflate() to interpret next block
14115 BAD -- error in block data
14116
14117 Notes:
14118
14119 - The maximum input bits used by a length/distance pair is 15 bits for the
14120 length code, 5 bits for the length extra, 15 bits for the distance code,
14121 and 13 bits for the distance extra. This totals 48 bits, or six bytes.
14122 Therefore if strm.avail_in >= 6, then there is enough input to avoid
14123 checking for available input while decoding.
14124
14125 - The maximum bytes that a single length/distance pair can output is 258
14126 bytes, which is the maximum length that can be coded. inflate_fast()
14127 requires strm.avail_out >= 258 for each loop to avoid checking for
14128 output space.
14129 */
14130module.exports = function inflate_fast(strm, start) {
14131 var state;
14132 var _in; /* local strm.input */
14133 var last; /* have enough input while in < last */
14134 var _out; /* local strm.output */
14135 var beg; /* inflate()'s initial strm.output */
14136 var end; /* while out < end, enough space available */
14137//#ifdef INFLATE_STRICT
14138 var dmax; /* maximum distance from zlib header */
14139//#endif
14140 var wsize; /* window size or zero if not using window */
14141 var whave; /* valid bytes in the window */
14142 var wnext; /* window write index */
14143 // Use `s_window` instead `window`, avoid conflict with instrumentation tools
14144 var s_window; /* allocated sliding window, if wsize != 0 */
14145 var hold; /* local strm.hold */
14146 var bits; /* local strm.bits */
14147 var lcode; /* local strm.lencode */
14148 var dcode; /* local strm.distcode */
14149 var lmask; /* mask for first level of length codes */
14150 var dmask; /* mask for first level of distance codes */
14151 var here; /* retrieved table entry */
14152 var op; /* code bits, operation, extra bits, or */
14153 /* window position, window bytes to copy */
14154 var len; /* match length, unused bytes */
14155 var dist; /* match distance */
14156 var from; /* where to copy match from */
14157 var from_source;
14158
14159
14160 var input, output; // JS specific, because we have no pointers
14161
14162 /* copy state to local variables */
14163 state = strm.state;
14164 //here = state.here;
14165 _in = strm.next_in;
14166 input = strm.input;
14167 last = _in + (strm.avail_in - 5);
14168 _out = strm.next_out;
14169 output = strm.output;
14170 beg = _out - (start - strm.avail_out);
14171 end = _out + (strm.avail_out - 257);
14172//#ifdef INFLATE_STRICT
14173 dmax = state.dmax;
14174//#endif
14175 wsize = state.wsize;
14176 whave = state.whave;
14177 wnext = state.wnext;
14178 s_window = state.window;
14179 hold = state.hold;
14180 bits = state.bits;
14181 lcode = state.lencode;
14182 dcode = state.distcode;
14183 lmask = (1 << state.lenbits) - 1;
14184 dmask = (1 << state.distbits) - 1;
14185
14186
14187 /* decode literals and length/distances until end-of-block or not enough
14188 input data or output space */
14189
14190 top:
14191 do {
14192 if (bits < 15) {
14193 hold += input[_in++] << bits;
14194 bits += 8;
14195 hold += input[_in++] << bits;
14196 bits += 8;
14197 }
14198
14199 here = lcode[hold & lmask];
14200
14201 dolen:
14202 for (;;) { // Goto emulation
14203 op = here >>> 24/*here.bits*/;
14204 hold >>>= op;
14205 bits -= op;
14206 op = (here >>> 16) & 0xff/*here.op*/;
14207 if (op === 0) { /* literal */
14208 //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
14209 // "inflate: literal '%c'\n" :
14210 // "inflate: literal 0x%02x\n", here.val));
14211 output[_out++] = here & 0xffff/*here.val*/;
14212 }
14213 else if (op & 16) { /* length base */
14214 len = here & 0xffff/*here.val*/;
14215 op &= 15; /* number of extra bits */
14216 if (op) {
14217 if (bits < op) {
14218 hold += input[_in++] << bits;
14219 bits += 8;
14220 }
14221 len += hold & ((1 << op) - 1);
14222 hold >>>= op;
14223 bits -= op;
14224 }
14225 //Tracevv((stderr, "inflate: length %u\n", len));
14226 if (bits < 15) {
14227 hold += input[_in++] << bits;
14228 bits += 8;
14229 hold += input[_in++] << bits;
14230 bits += 8;
14231 }
14232 here = dcode[hold & dmask];
14233
14234 dodist:
14235 for (;;) { // goto emulation
14236 op = here >>> 24/*here.bits*/;
14237 hold >>>= op;
14238 bits -= op;
14239 op = (here >>> 16) & 0xff/*here.op*/;
14240
14241 if (op & 16) { /* distance base */
14242 dist = here & 0xffff/*here.val*/;
14243 op &= 15; /* number of extra bits */
14244 if (bits < op) {
14245 hold += input[_in++] << bits;
14246 bits += 8;
14247 if (bits < op) {
14248 hold += input[_in++] << bits;
14249 bits += 8;
14250 }
14251 }
14252 dist += hold & ((1 << op) - 1);
14253//#ifdef INFLATE_STRICT
14254 if (dist > dmax) {
14255 strm.msg = 'invalid distance too far back';
14256 state.mode = BAD;
14257 break top;
14258 }
14259//#endif
14260 hold >>>= op;
14261 bits -= op;
14262 //Tracevv((stderr, "inflate: distance %u\n", dist));
14263 op = _out - beg; /* max distance in output */
14264 if (dist > op) { /* see if copy from window */
14265 op = dist - op; /* distance back in window */
14266 if (op > whave) {
14267 if (state.sane) {
14268 strm.msg = 'invalid distance too far back';
14269 state.mode = BAD;
14270 break top;
14271 }
14272
14273// (!) This block is disabled in zlib defaults,
14274// don't enable it for binary compatibility
14275//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
14276// if (len <= op - whave) {
14277// do {
14278// output[_out++] = 0;
14279// } while (--len);
14280// continue top;
14281// }
14282// len -= op - whave;
14283// do {
14284// output[_out++] = 0;
14285// } while (--op > whave);
14286// if (op === 0) {
14287// from = _out - dist;
14288// do {
14289// output[_out++] = output[from++];
14290// } while (--len);
14291// continue top;
14292// }
14293//#endif
14294 }
14295 from = 0; // window index
14296 from_source = s_window;
14297 if (wnext === 0) { /* very common case */
14298 from += wsize - op;
14299 if (op < len) { /* some from window */
14300 len -= op;
14301 do {
14302 output[_out++] = s_window[from++];
14303 } while (--op);
14304 from = _out - dist; /* rest from output */
14305 from_source = output;
14306 }
14307 }
14308 else if (wnext < op) { /* wrap around window */
14309 from += wsize + wnext - op;
14310 op -= wnext;
14311 if (op < len) { /* some from end of window */
14312 len -= op;
14313 do {
14314 output[_out++] = s_window[from++];
14315 } while (--op);
14316 from = 0;
14317 if (wnext < len) { /* some from start of window */
14318 op = wnext;
14319 len -= op;
14320 do {
14321 output[_out++] = s_window[from++];
14322 } while (--op);
14323 from = _out - dist; /* rest from output */
14324 from_source = output;
14325 }
14326 }
14327 }
14328 else { /* contiguous in window */
14329 from += wnext - op;
14330 if (op < len) { /* some from window */
14331 len -= op;
14332 do {
14333 output[_out++] = s_window[from++];
14334 } while (--op);
14335 from = _out - dist; /* rest from output */
14336 from_source = output;
14337 }
14338 }
14339 while (len > 2) {
14340 output[_out++] = from_source[from++];
14341 output[_out++] = from_source[from++];
14342 output[_out++] = from_source[from++];
14343 len -= 3;
14344 }
14345 if (len) {
14346 output[_out++] = from_source[from++];
14347 if (len > 1) {
14348 output[_out++] = from_source[from++];
14349 }
14350 }
14351 }
14352 else {
14353 from = _out - dist; /* copy direct from output */
14354 do { /* minimum length is three */
14355 output[_out++] = output[from++];
14356 output[_out++] = output[from++];
14357 output[_out++] = output[from++];
14358 len -= 3;
14359 } while (len > 2);
14360 if (len) {
14361 output[_out++] = output[from++];
14362 if (len > 1) {
14363 output[_out++] = output[from++];
14364 }
14365 }
14366 }
14367 }
14368 else if ((op & 64) === 0) { /* 2nd level distance code */
14369 here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
14370 continue dodist;
14371 }
14372 else {
14373 strm.msg = 'invalid distance code';
14374 state.mode = BAD;
14375 break top;
14376 }
14377
14378 break; // need to emulate goto via "continue"
14379 }
14380 }
14381 else if ((op & 64) === 0) { /* 2nd level length code */
14382 here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
14383 continue dolen;
14384 }
14385 else if (op & 32) { /* end-of-block */
14386 //Tracevv((stderr, "inflate: end of block\n"));
14387 state.mode = TYPE;
14388 break top;
14389 }
14390 else {
14391 strm.msg = 'invalid literal/length code';
14392 state.mode = BAD;
14393 break top;
14394 }
14395
14396 break; // need to emulate goto via "continue"
14397 }
14398 } while (_in < last && _out < end);
14399
14400 /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
14401 len = bits >> 3;
14402 _in -= len;
14403 bits -= len << 3;
14404 hold &= (1 << bits) - 1;
14405
14406 /* update state and return */
14407 strm.next_in = _in;
14408 strm.next_out = _out;
14409 strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));
14410 strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));
14411 state.hold = hold;
14412 state.bits = bits;
14413 return;
14414};
14415
14416},{}],108:[function(require,module,exports){
14417'use strict';
14418
14419// (C) 1995-2013 Jean-loup Gailly and Mark Adler
14420// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
14421//
14422// This software is provided 'as-is', without any express or implied
14423// warranty. In no event will the authors be held liable for any damages
14424// arising from the use of this software.
14425//
14426// Permission is granted to anyone to use this software for any purpose,
14427// including commercial applications, and to alter it and redistribute it
14428// freely, subject to the following restrictions:
14429//
14430// 1. The origin of this software must not be misrepresented; you must not
14431// claim that you wrote the original software. If you use this software
14432// in a product, an acknowledgment in the product documentation would be
14433// appreciated but is not required.
14434// 2. Altered source versions must be plainly marked as such, and must not be
14435// misrepresented as being the original software.
14436// 3. This notice may not be removed or altered from any source distribution.
14437
14438var utils = require('../utils/common');
14439var adler32 = require('./adler32');
14440var crc32 = require('./crc32');
14441var inflate_fast = require('./inffast');
14442var inflate_table = require('./inftrees');
14443
14444var CODES = 0;
14445var LENS = 1;
14446var DISTS = 2;
14447
14448/* Public constants ==========================================================*/
14449/* ===========================================================================*/
14450
14451
14452/* Allowed flush values; see deflate() and inflate() below for details */
14453//var Z_NO_FLUSH = 0;
14454//var Z_PARTIAL_FLUSH = 1;
14455//var Z_SYNC_FLUSH = 2;
14456//var Z_FULL_FLUSH = 3;
14457var Z_FINISH = 4;
14458var Z_BLOCK = 5;
14459var Z_TREES = 6;
14460
14461
14462/* Return codes for the compression/decompression functions. Negative values
14463 * are errors, positive values are used for special but normal events.
14464 */
14465var Z_OK = 0;
14466var Z_STREAM_END = 1;
14467var Z_NEED_DICT = 2;
14468//var Z_ERRNO = -1;
14469var Z_STREAM_ERROR = -2;
14470var Z_DATA_ERROR = -3;
14471var Z_MEM_ERROR = -4;
14472var Z_BUF_ERROR = -5;
14473//var Z_VERSION_ERROR = -6;
14474
14475/* The deflate compression method */
14476var Z_DEFLATED = 8;
14477
14478
14479/* STATES ====================================================================*/
14480/* ===========================================================================*/
14481
14482
14483var HEAD = 1; /* i: waiting for magic header */
14484var FLAGS = 2; /* i: waiting for method and flags (gzip) */
14485var TIME = 3; /* i: waiting for modification time (gzip) */
14486var OS = 4; /* i: waiting for extra flags and operating system (gzip) */
14487var EXLEN = 5; /* i: waiting for extra length (gzip) */
14488var EXTRA = 6; /* i: waiting for extra bytes (gzip) */
14489var NAME = 7; /* i: waiting for end of file name (gzip) */
14490var COMMENT = 8; /* i: waiting for end of comment (gzip) */
14491var HCRC = 9; /* i: waiting for header crc (gzip) */
14492var DICTID = 10; /* i: waiting for dictionary check value */
14493var DICT = 11; /* waiting for inflateSetDictionary() call */
14494var TYPE = 12; /* i: waiting for type bits, including last-flag bit */
14495var TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */
14496var STORED = 14; /* i: waiting for stored size (length and complement) */
14497var COPY_ = 15; /* i/o: same as COPY below, but only first time in */
14498var COPY = 16; /* i/o: waiting for input or output to copy stored block */
14499var TABLE = 17; /* i: waiting for dynamic block table lengths */
14500var LENLENS = 18; /* i: waiting for code length code lengths */
14501var CODELENS = 19; /* i: waiting for length/lit and distance code lengths */
14502var LEN_ = 20; /* i: same as LEN below, but only first time in */
14503var LEN = 21; /* i: waiting for length/lit/eob code */
14504var LENEXT = 22; /* i: waiting for length extra bits */
14505var DIST = 23; /* i: waiting for distance code */
14506var DISTEXT = 24; /* i: waiting for distance extra bits */
14507var MATCH = 25; /* o: waiting for output space to copy string */
14508var LIT = 26; /* o: waiting for output space to write literal */
14509var CHECK = 27; /* i: waiting for 32-bit check value */
14510var LENGTH = 28; /* i: waiting for 32-bit length (gzip) */
14511var DONE = 29; /* finished check, done -- remain here until reset */
14512var BAD = 30; /* got a data error -- remain here until reset */
14513var MEM = 31; /* got an inflate() memory error -- remain here until reset */
14514var SYNC = 32; /* looking for synchronization bytes to restart inflate() */
14515
14516/* ===========================================================================*/
14517
14518
14519
14520var ENOUGH_LENS = 852;
14521var ENOUGH_DISTS = 592;
14522//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
14523
14524var MAX_WBITS = 15;
14525/* 32K LZ77 window */
14526var DEF_WBITS = MAX_WBITS;
14527
14528
14529function zswap32(q) {
14530 return (((q >>> 24) & 0xff) +
14531 ((q >>> 8) & 0xff00) +
14532 ((q & 0xff00) << 8) +
14533 ((q & 0xff) << 24));
14534}
14535
14536
14537function InflateState() {
14538 this.mode = 0; /* current inflate mode */
14539 this.last = false; /* true if processing last block */
14540 this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */
14541 this.havedict = false; /* true if dictionary provided */
14542 this.flags = 0; /* gzip header method and flags (0 if zlib) */
14543 this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */
14544 this.check = 0; /* protected copy of check value */
14545 this.total = 0; /* protected copy of output count */
14546 // TODO: may be {}
14547 this.head = null; /* where to save gzip header information */
14548
14549 /* sliding window */
14550 this.wbits = 0; /* log base 2 of requested window size */
14551 this.wsize = 0; /* window size or zero if not using window */
14552 this.whave = 0; /* valid bytes in the window */
14553 this.wnext = 0; /* window write index */
14554 this.window = null; /* allocated sliding window, if needed */
14555
14556 /* bit accumulator */
14557 this.hold = 0; /* input bit accumulator */
14558 this.bits = 0; /* number of bits in "in" */
14559
14560 /* for string and stored block copying */
14561 this.length = 0; /* literal or length of data to copy */
14562 this.offset = 0; /* distance back to copy string from */
14563
14564 /* for table and code decoding */
14565 this.extra = 0; /* extra bits needed */
14566
14567 /* fixed and dynamic code tables */
14568 this.lencode = null; /* starting table for length/literal codes */
14569 this.distcode = null; /* starting table for distance codes */
14570 this.lenbits = 0; /* index bits for lencode */
14571 this.distbits = 0; /* index bits for distcode */
14572
14573 /* dynamic table building */
14574 this.ncode = 0; /* number of code length code lengths */
14575 this.nlen = 0; /* number of length code lengths */
14576 this.ndist = 0; /* number of distance code lengths */
14577 this.have = 0; /* number of code lengths in lens[] */
14578 this.next = null; /* next available space in codes[] */
14579
14580 this.lens = new utils.Buf16(320); /* temporary storage for code lengths */
14581 this.work = new utils.Buf16(288); /* work area for code table building */
14582
14583 /*
14584 because we don't have pointers in js, we use lencode and distcode directly
14585 as buffers so we don't need codes
14586 */
14587 //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */
14588 this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */
14589 this.distdyn = null; /* dynamic table for distance codes (JS specific) */
14590 this.sane = 0; /* if false, allow invalid distance too far */
14591 this.back = 0; /* bits back of last unprocessed length/lit */
14592 this.was = 0; /* initial length of match */
14593}
14594
14595function inflateResetKeep(strm) {
14596 var state;
14597
14598 if (!strm || !strm.state) { return Z_STREAM_ERROR; }
14599 state = strm.state;
14600 strm.total_in = strm.total_out = state.total = 0;
14601 strm.msg = ''; /*Z_NULL*/
14602 if (state.wrap) { /* to support ill-conceived Java test suite */
14603 strm.adler = state.wrap & 1;
14604 }
14605 state.mode = HEAD;
14606 state.last = 0;
14607 state.havedict = 0;
14608 state.dmax = 32768;
14609 state.head = null/*Z_NULL*/;
14610 state.hold = 0;
14611 state.bits = 0;
14612 //state.lencode = state.distcode = state.next = state.codes;
14613 state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);
14614 state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);
14615
14616 state.sane = 1;
14617 state.back = -1;
14618 //Tracev((stderr, "inflate: reset\n"));
14619 return Z_OK;
14620}
14621
14622function inflateReset(strm) {
14623 var state;
14624
14625 if (!strm || !strm.state) { return Z_STREAM_ERROR; }
14626 state = strm.state;
14627 state.wsize = 0;
14628 state.whave = 0;
14629 state.wnext = 0;
14630 return inflateResetKeep(strm);
14631
14632}
14633
14634function inflateReset2(strm, windowBits) {
14635 var wrap;
14636 var state;
14637
14638 /* get the state */
14639 if (!strm || !strm.state) { return Z_STREAM_ERROR; }
14640 state = strm.state;
14641
14642 /* extract wrap request from windowBits parameter */
14643 if (windowBits < 0) {
14644 wrap = 0;
14645 windowBits = -windowBits;
14646 }
14647 else {
14648 wrap = (windowBits >> 4) + 1;
14649 if (windowBits < 48) {
14650 windowBits &= 15;
14651 }
14652 }
14653
14654 /* set number of window bits, free window if different */
14655 if (windowBits && (windowBits < 8 || windowBits > 15)) {
14656 return Z_STREAM_ERROR;
14657 }
14658 if (state.window !== null && state.wbits !== windowBits) {
14659 state.window = null;
14660 }
14661
14662 /* update state and reset the rest of it */
14663 state.wrap = wrap;
14664 state.wbits = windowBits;
14665 return inflateReset(strm);
14666}
14667
14668function inflateInit2(strm, windowBits) {
14669 var ret;
14670 var state;
14671
14672 if (!strm) { return Z_STREAM_ERROR; }
14673 //strm.msg = Z_NULL; /* in case we return an error */
14674
14675 state = new InflateState();
14676
14677 //if (state === Z_NULL) return Z_MEM_ERROR;
14678 //Tracev((stderr, "inflate: allocated\n"));
14679 strm.state = state;
14680 state.window = null/*Z_NULL*/;
14681 ret = inflateReset2(strm, windowBits);
14682 if (ret !== Z_OK) {
14683 strm.state = null/*Z_NULL*/;
14684 }
14685 return ret;
14686}
14687
14688function inflateInit(strm) {
14689 return inflateInit2(strm, DEF_WBITS);
14690}
14691
14692
14693/*
14694 Return state with length and distance decoding tables and index sizes set to
14695 fixed code decoding. Normally this returns fixed tables from inffixed.h.
14696 If BUILDFIXED is defined, then instead this routine builds the tables the
14697 first time it's called, and returns those tables the first time and
14698 thereafter. This reduces the size of the code by about 2K bytes, in
14699 exchange for a little execution time. However, BUILDFIXED should not be
14700 used for threaded applications, since the rewriting of the tables and virgin
14701 may not be thread-safe.
14702 */
14703var virgin = true;
14704
14705var lenfix, distfix; // We have no pointers in JS, so keep tables separate
14706
14707function fixedtables(state) {
14708 /* build fixed huffman tables if first call (may not be thread safe) */
14709 if (virgin) {
14710 var sym;
14711
14712 lenfix = new utils.Buf32(512);
14713 distfix = new utils.Buf32(32);
14714
14715 /* literal/length table */
14716 sym = 0;
14717 while (sym < 144) { state.lens[sym++] = 8; }
14718 while (sym < 256) { state.lens[sym++] = 9; }
14719 while (sym < 280) { state.lens[sym++] = 7; }
14720 while (sym < 288) { state.lens[sym++] = 8; }
14721
14722 inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });
14723
14724 /* distance table */
14725 sym = 0;
14726 while (sym < 32) { state.lens[sym++] = 5; }
14727
14728 inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });
14729
14730 /* do this just once */
14731 virgin = false;
14732 }
14733
14734 state.lencode = lenfix;
14735 state.lenbits = 9;
14736 state.distcode = distfix;
14737 state.distbits = 5;
14738}
14739
14740
14741/*
14742 Update the window with the last wsize (normally 32K) bytes written before
14743 returning. If window does not exist yet, create it. This is only called
14744 when a window is already in use, or when output has been written during this
14745 inflate call, but the end of the deflate stream has not been reached yet.
14746 It is also called to create a window for dictionary data when a dictionary
14747 is loaded.
14748
14749 Providing output buffers larger than 32K to inflate() should provide a speed
14750 advantage, since only the last 32K of output is copied to the sliding window
14751 upon return from inflate(), and since all distances after the first 32K of
14752 output will fall in the output data, making match copies simpler and faster.
14753 The advantage may be dependent on the size of the processor's data caches.
14754 */
14755function updatewindow(strm, src, end, copy) {
14756 var dist;
14757 var state = strm.state;
14758
14759 /* if it hasn't been done already, allocate space for the window */
14760 if (state.window === null) {
14761 state.wsize = 1 << state.wbits;
14762 state.wnext = 0;
14763 state.whave = 0;
14764
14765 state.window = new utils.Buf8(state.wsize);
14766 }
14767
14768 /* copy state->wsize or less output bytes into the circular window */
14769 if (copy >= state.wsize) {
14770 utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);
14771 state.wnext = 0;
14772 state.whave = state.wsize;
14773 }
14774 else {
14775 dist = state.wsize - state.wnext;
14776 if (dist > copy) {
14777 dist = copy;
14778 }
14779 //zmemcpy(state->window + state->wnext, end - copy, dist);
14780 utils.arraySet(state.window, src, end - copy, dist, state.wnext);
14781 copy -= dist;
14782 if (copy) {
14783 //zmemcpy(state->window, end - copy, copy);
14784 utils.arraySet(state.window, src, end - copy, copy, 0);
14785 state.wnext = copy;
14786 state.whave = state.wsize;
14787 }
14788 else {
14789 state.wnext += dist;
14790 if (state.wnext === state.wsize) { state.wnext = 0; }
14791 if (state.whave < state.wsize) { state.whave += dist; }
14792 }
14793 }
14794 return 0;
14795}
14796
14797function inflate(strm, flush) {
14798 var state;
14799 var input, output; // input/output buffers
14800 var next; /* next input INDEX */
14801 var put; /* next output INDEX */
14802 var have, left; /* available input and output */
14803 var hold; /* bit buffer */
14804 var bits; /* bits in bit buffer */
14805 var _in, _out; /* save starting available input and output */
14806 var copy; /* number of stored or match bytes to copy */
14807 var from; /* where to copy match bytes from */
14808 var from_source;
14809 var here = 0; /* current decoding table entry */
14810 var here_bits, here_op, here_val; // paked "here" denormalized (JS specific)
14811 //var last; /* parent table entry */
14812 var last_bits, last_op, last_val; // paked "last" denormalized (JS specific)
14813 var len; /* length to copy for repeats, bits to drop */
14814 var ret; /* return code */
14815 var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */
14816 var opts;
14817
14818 var n; // temporary var for NEED_BITS
14819
14820 var order = /* permutation of code lengths */
14821 [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];
14822
14823
14824 if (!strm || !strm.state || !strm.output ||
14825 (!strm.input && strm.avail_in !== 0)) {
14826 return Z_STREAM_ERROR;
14827 }
14828
14829 state = strm.state;
14830 if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */
14831
14832
14833 //--- LOAD() ---
14834 put = strm.next_out;
14835 output = strm.output;
14836 left = strm.avail_out;
14837 next = strm.next_in;
14838 input = strm.input;
14839 have = strm.avail_in;
14840 hold = state.hold;
14841 bits = state.bits;
14842 //---
14843
14844 _in = have;
14845 _out = left;
14846 ret = Z_OK;
14847
14848 inf_leave: // goto emulation
14849 for (;;) {
14850 switch (state.mode) {
14851 case HEAD:
14852 if (state.wrap === 0) {
14853 state.mode = TYPEDO;
14854 break;
14855 }
14856 //=== NEEDBITS(16);
14857 while (bits < 16) {
14858 if (have === 0) { break inf_leave; }
14859 have--;
14860 hold += input[next++] << bits;
14861 bits += 8;
14862 }
14863 //===//
14864 if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */
14865 state.check = 0/*crc32(0L, Z_NULL, 0)*/;
14866 //=== CRC2(state.check, hold);
14867 hbuf[0] = hold & 0xff;
14868 hbuf[1] = (hold >>> 8) & 0xff;
14869 state.check = crc32(state.check, hbuf, 2, 0);
14870 //===//
14871
14872 //=== INITBITS();
14873 hold = 0;
14874 bits = 0;
14875 //===//
14876 state.mode = FLAGS;
14877 break;
14878 }
14879 state.flags = 0; /* expect zlib header */
14880 if (state.head) {
14881 state.head.done = false;
14882 }
14883 if (!(state.wrap & 1) || /* check if zlib header allowed */
14884 (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {
14885 strm.msg = 'incorrect header check';
14886 state.mode = BAD;
14887 break;
14888 }
14889 if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {
14890 strm.msg = 'unknown compression method';
14891 state.mode = BAD;
14892 break;
14893 }
14894 //--- DROPBITS(4) ---//
14895 hold >>>= 4;
14896 bits -= 4;
14897 //---//
14898 len = (hold & 0x0f)/*BITS(4)*/ + 8;
14899 if (state.wbits === 0) {
14900 state.wbits = len;
14901 }
14902 else if (len > state.wbits) {
14903 strm.msg = 'invalid window size';
14904 state.mode = BAD;
14905 break;
14906 }
14907 state.dmax = 1 << len;
14908 //Tracev((stderr, "inflate: zlib header ok\n"));
14909 strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
14910 state.mode = hold & 0x200 ? DICTID : TYPE;
14911 //=== INITBITS();
14912 hold = 0;
14913 bits = 0;
14914 //===//
14915 break;
14916 case FLAGS:
14917 //=== NEEDBITS(16); */
14918 while (bits < 16) {
14919 if (have === 0) { break inf_leave; }
14920 have--;
14921 hold += input[next++] << bits;
14922 bits += 8;
14923 }
14924 //===//
14925 state.flags = hold;
14926 if ((state.flags & 0xff) !== Z_DEFLATED) {
14927 strm.msg = 'unknown compression method';
14928 state.mode = BAD;
14929 break;
14930 }
14931 if (state.flags & 0xe000) {
14932 strm.msg = 'unknown header flags set';
14933 state.mode = BAD;
14934 break;
14935 }
14936 if (state.head) {
14937 state.head.text = ((hold >> 8) & 1);
14938 }
14939 if (state.flags & 0x0200) {
14940 //=== CRC2(state.check, hold);
14941 hbuf[0] = hold & 0xff;
14942 hbuf[1] = (hold >>> 8) & 0xff;
14943 state.check = crc32(state.check, hbuf, 2, 0);
14944 //===//
14945 }
14946 //=== INITBITS();
14947 hold = 0;
14948 bits = 0;
14949 //===//
14950 state.mode = TIME;
14951 /* falls through */
14952 case TIME:
14953 //=== NEEDBITS(32); */
14954 while (bits < 32) {
14955 if (have === 0) { break inf_leave; }
14956 have--;
14957 hold += input[next++] << bits;
14958 bits += 8;
14959 }
14960 //===//
14961 if (state.head) {
14962 state.head.time = hold;
14963 }
14964 if (state.flags & 0x0200) {
14965 //=== CRC4(state.check, hold)
14966 hbuf[0] = hold & 0xff;
14967 hbuf[1] = (hold >>> 8) & 0xff;
14968 hbuf[2] = (hold >>> 16) & 0xff;
14969 hbuf[3] = (hold >>> 24) & 0xff;
14970 state.check = crc32(state.check, hbuf, 4, 0);
14971 //===
14972 }
14973 //=== INITBITS();
14974 hold = 0;
14975 bits = 0;
14976 //===//
14977 state.mode = OS;
14978 /* falls through */
14979 case OS:
14980 //=== NEEDBITS(16); */
14981 while (bits < 16) {
14982 if (have === 0) { break inf_leave; }
14983 have--;
14984 hold += input[next++] << bits;
14985 bits += 8;
14986 }
14987 //===//
14988 if (state.head) {
14989 state.head.xflags = (hold & 0xff);
14990 state.head.os = (hold >> 8);
14991 }
14992 if (state.flags & 0x0200) {
14993 //=== CRC2(state.check, hold);
14994 hbuf[0] = hold & 0xff;
14995 hbuf[1] = (hold >>> 8) & 0xff;
14996 state.check = crc32(state.check, hbuf, 2, 0);
14997 //===//
14998 }
14999 //=== INITBITS();
15000 hold = 0;
15001 bits = 0;
15002 //===//
15003 state.mode = EXLEN;
15004 /* falls through */
15005 case EXLEN:
15006 if (state.flags & 0x0400) {
15007 //=== NEEDBITS(16); */
15008 while (bits < 16) {
15009 if (have === 0) { break inf_leave; }
15010 have--;
15011 hold += input[next++] << bits;
15012 bits += 8;
15013 }
15014 //===//
15015 state.length = hold;
15016 if (state.head) {
15017 state.head.extra_len = hold;
15018 }
15019 if (state.flags & 0x0200) {
15020 //=== CRC2(state.check, hold);
15021 hbuf[0] = hold & 0xff;
15022 hbuf[1] = (hold >>> 8) & 0xff;
15023 state.check = crc32(state.check, hbuf, 2, 0);
15024 //===//
15025 }
15026 //=== INITBITS();
15027 hold = 0;
15028 bits = 0;
15029 //===//
15030 }
15031 else if (state.head) {
15032 state.head.extra = null/*Z_NULL*/;
15033 }
15034 state.mode = EXTRA;
15035 /* falls through */
15036 case EXTRA:
15037 if (state.flags & 0x0400) {
15038 copy = state.length;
15039 if (copy > have) { copy = have; }
15040 if (copy) {
15041 if (state.head) {
15042 len = state.head.extra_len - state.length;
15043 if (!state.head.extra) {
15044 // Use untyped array for more convenient processing later
15045 state.head.extra = new Array(state.head.extra_len);
15046 }
15047 utils.arraySet(
15048 state.head.extra,
15049 input,
15050 next,
15051 // extra field is limited to 65536 bytes
15052 // - no need for additional size check
15053 copy,
15054 /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
15055 len
15056 );
15057 //zmemcpy(state.head.extra + len, next,
15058 // len + copy > state.head.extra_max ?
15059 // state.head.extra_max - len : copy);
15060 }
15061 if (state.flags & 0x0200) {
15062 state.check = crc32(state.check, input, copy, next);
15063 }
15064 have -= copy;
15065 next += copy;
15066 state.length -= copy;
15067 }
15068 if (state.length) { break inf_leave; }
15069 }
15070 state.length = 0;
15071 state.mode = NAME;
15072 /* falls through */
15073 case NAME:
15074 if (state.flags & 0x0800) {
15075 if (have === 0) { break inf_leave; }
15076 copy = 0;
15077 do {
15078 // TODO: 2 or 1 bytes?
15079 len = input[next + copy++];
15080 /* use constant limit because in js we should not preallocate memory */
15081 if (state.head && len &&
15082 (state.length < 65536 /*state.head.name_max*/)) {
15083 state.head.name += String.fromCharCode(len);
15084 }
15085 } while (len && copy < have);
15086
15087 if (state.flags & 0x0200) {
15088 state.check = crc32(state.check, input, copy, next);
15089 }
15090 have -= copy;
15091 next += copy;
15092 if (len) { break inf_leave; }
15093 }
15094 else if (state.head) {
15095 state.head.name = null;
15096 }
15097 state.length = 0;
15098 state.mode = COMMENT;
15099 /* falls through */
15100 case COMMENT:
15101 if (state.flags & 0x1000) {
15102 if (have === 0) { break inf_leave; }
15103 copy = 0;
15104 do {
15105 len = input[next + copy++];
15106 /* use constant limit because in js we should not preallocate memory */
15107 if (state.head && len &&
15108 (state.length < 65536 /*state.head.comm_max*/)) {
15109 state.head.comment += String.fromCharCode(len);
15110 }
15111 } while (len && copy < have);
15112 if (state.flags & 0x0200) {
15113 state.check = crc32(state.check, input, copy, next);
15114 }
15115 have -= copy;
15116 next += copy;
15117 if (len) { break inf_leave; }
15118 }
15119 else if (state.head) {
15120 state.head.comment = null;
15121 }
15122 state.mode = HCRC;
15123 /* falls through */
15124 case HCRC:
15125 if (state.flags & 0x0200) {
15126 //=== NEEDBITS(16); */
15127 while (bits < 16) {
15128 if (have === 0) { break inf_leave; }
15129 have--;
15130 hold += input[next++] << bits;
15131 bits += 8;
15132 }
15133 //===//
15134 if (hold !== (state.check & 0xffff)) {
15135 strm.msg = 'header crc mismatch';
15136 state.mode = BAD;
15137 break;
15138 }
15139 //=== INITBITS();
15140 hold = 0;
15141 bits = 0;
15142 //===//
15143 }
15144 if (state.head) {
15145 state.head.hcrc = ((state.flags >> 9) & 1);
15146 state.head.done = true;
15147 }
15148 strm.adler = state.check = 0;
15149 state.mode = TYPE;
15150 break;
15151 case DICTID:
15152 //=== NEEDBITS(32); */
15153 while (bits < 32) {
15154 if (have === 0) { break inf_leave; }
15155 have--;
15156 hold += input[next++] << bits;
15157 bits += 8;
15158 }
15159 //===//
15160 strm.adler = state.check = zswap32(hold);
15161 //=== INITBITS();
15162 hold = 0;
15163 bits = 0;
15164 //===//
15165 state.mode = DICT;
15166 /* falls through */
15167 case DICT:
15168 if (state.havedict === 0) {
15169 //--- RESTORE() ---
15170 strm.next_out = put;
15171 strm.avail_out = left;
15172 strm.next_in = next;
15173 strm.avail_in = have;
15174 state.hold = hold;
15175 state.bits = bits;
15176 //---
15177 return Z_NEED_DICT;
15178 }
15179 strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
15180 state.mode = TYPE;
15181 /* falls through */
15182 case TYPE:
15183 if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }
15184 /* falls through */
15185 case TYPEDO:
15186 if (state.last) {
15187 //--- BYTEBITS() ---//
15188 hold >>>= bits & 7;
15189 bits -= bits & 7;
15190 //---//
15191 state.mode = CHECK;
15192 break;
15193 }
15194 //=== NEEDBITS(3); */
15195 while (bits < 3) {
15196 if (have === 0) { break inf_leave; }
15197 have--;
15198 hold += input[next++] << bits;
15199 bits += 8;
15200 }
15201 //===//
15202 state.last = (hold & 0x01)/*BITS(1)*/;
15203 //--- DROPBITS(1) ---//
15204 hold >>>= 1;
15205 bits -= 1;
15206 //---//
15207
15208 switch ((hold & 0x03)/*BITS(2)*/) {
15209 case 0: /* stored block */
15210 //Tracev((stderr, "inflate: stored block%s\n",
15211 // state.last ? " (last)" : ""));
15212 state.mode = STORED;
15213 break;
15214 case 1: /* fixed block */
15215 fixedtables(state);
15216 //Tracev((stderr, "inflate: fixed codes block%s\n",
15217 // state.last ? " (last)" : ""));
15218 state.mode = LEN_; /* decode codes */
15219 if (flush === Z_TREES) {
15220 //--- DROPBITS(2) ---//
15221 hold >>>= 2;
15222 bits -= 2;
15223 //---//
15224 break inf_leave;
15225 }
15226 break;
15227 case 2: /* dynamic block */
15228 //Tracev((stderr, "inflate: dynamic codes block%s\n",
15229 // state.last ? " (last)" : ""));
15230 state.mode = TABLE;
15231 break;
15232 case 3:
15233 strm.msg = 'invalid block type';
15234 state.mode = BAD;
15235 }
15236 //--- DROPBITS(2) ---//
15237 hold >>>= 2;
15238 bits -= 2;
15239 //---//
15240 break;
15241 case STORED:
15242 //--- BYTEBITS() ---// /* go to byte boundary */
15243 hold >>>= bits & 7;
15244 bits -= bits & 7;
15245 //---//
15246 //=== NEEDBITS(32); */
15247 while (bits < 32) {
15248 if (have === 0) { break inf_leave; }
15249 have--;
15250 hold += input[next++] << bits;
15251 bits += 8;
15252 }
15253 //===//
15254 if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {
15255 strm.msg = 'invalid stored block lengths';
15256 state.mode = BAD;
15257 break;
15258 }
15259 state.length = hold & 0xffff;
15260 //Tracev((stderr, "inflate: stored length %u\n",
15261 // state.length));
15262 //=== INITBITS();
15263 hold = 0;
15264 bits = 0;
15265 //===//
15266 state.mode = COPY_;
15267 if (flush === Z_TREES) { break inf_leave; }
15268 /* falls through */
15269 case COPY_:
15270 state.mode = COPY;
15271 /* falls through */
15272 case COPY:
15273 copy = state.length;
15274 if (copy) {
15275 if (copy > have) { copy = have; }
15276 if (copy > left) { copy = left; }
15277 if (copy === 0) { break inf_leave; }
15278 //--- zmemcpy(put, next, copy); ---
15279 utils.arraySet(output, input, next, copy, put);
15280 //---//
15281 have -= copy;
15282 next += copy;
15283 left -= copy;
15284 put += copy;
15285 state.length -= copy;
15286 break;
15287 }
15288 //Tracev((stderr, "inflate: stored end\n"));
15289 state.mode = TYPE;
15290 break;
15291 case TABLE:
15292 //=== NEEDBITS(14); */
15293 while (bits < 14) {
15294 if (have === 0) { break inf_leave; }
15295 have--;
15296 hold += input[next++] << bits;
15297 bits += 8;
15298 }
15299 //===//
15300 state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;
15301 //--- DROPBITS(5) ---//
15302 hold >>>= 5;
15303 bits -= 5;
15304 //---//
15305 state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;
15306 //--- DROPBITS(5) ---//
15307 hold >>>= 5;
15308 bits -= 5;
15309 //---//
15310 state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;
15311 //--- DROPBITS(4) ---//
15312 hold >>>= 4;
15313 bits -= 4;
15314 //---//
15315//#ifndef PKZIP_BUG_WORKAROUND
15316 if (state.nlen > 286 || state.ndist > 30) {
15317 strm.msg = 'too many length or distance symbols';
15318 state.mode = BAD;
15319 break;
15320 }
15321//#endif
15322 //Tracev((stderr, "inflate: table sizes ok\n"));
15323 state.have = 0;
15324 state.mode = LENLENS;
15325 /* falls through */
15326 case LENLENS:
15327 while (state.have < state.ncode) {
15328 //=== NEEDBITS(3);
15329 while (bits < 3) {
15330 if (have === 0) { break inf_leave; }
15331 have--;
15332 hold += input[next++] << bits;
15333 bits += 8;
15334 }
15335 //===//
15336 state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);
15337 //--- DROPBITS(3) ---//
15338 hold >>>= 3;
15339 bits -= 3;
15340 //---//
15341 }
15342 while (state.have < 19) {
15343 state.lens[order[state.have++]] = 0;
15344 }
15345 // We have separate tables & no pointers. 2 commented lines below not needed.
15346 //state.next = state.codes;
15347 //state.lencode = state.next;
15348 // Switch to use dynamic table
15349 state.lencode = state.lendyn;
15350 state.lenbits = 7;
15351
15352 opts = { bits: state.lenbits };
15353 ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);
15354 state.lenbits = opts.bits;
15355
15356 if (ret) {
15357 strm.msg = 'invalid code lengths set';
15358 state.mode = BAD;
15359 break;
15360 }
15361 //Tracev((stderr, "inflate: code lengths ok\n"));
15362 state.have = 0;
15363 state.mode = CODELENS;
15364 /* falls through */
15365 case CODELENS:
15366 while (state.have < state.nlen + state.ndist) {
15367 for (;;) {
15368 here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/
15369 here_bits = here >>> 24;
15370 here_op = (here >>> 16) & 0xff;
15371 here_val = here & 0xffff;
15372
15373 if ((here_bits) <= bits) { break; }
15374 //--- PULLBYTE() ---//
15375 if (have === 0) { break inf_leave; }
15376 have--;
15377 hold += input[next++] << bits;
15378 bits += 8;
15379 //---//
15380 }
15381 if (here_val < 16) {
15382 //--- DROPBITS(here.bits) ---//
15383 hold >>>= here_bits;
15384 bits -= here_bits;
15385 //---//
15386 state.lens[state.have++] = here_val;
15387 }
15388 else {
15389 if (here_val === 16) {
15390 //=== NEEDBITS(here.bits + 2);
15391 n = here_bits + 2;
15392 while (bits < n) {
15393 if (have === 0) { break inf_leave; }
15394 have--;
15395 hold += input[next++] << bits;
15396 bits += 8;
15397 }
15398 //===//
15399 //--- DROPBITS(here.bits) ---//
15400 hold >>>= here_bits;
15401 bits -= here_bits;
15402 //---//
15403 if (state.have === 0) {
15404 strm.msg = 'invalid bit length repeat';
15405 state.mode = BAD;
15406 break;
15407 }
15408 len = state.lens[state.have - 1];
15409 copy = 3 + (hold & 0x03);//BITS(2);
15410 //--- DROPBITS(2) ---//
15411 hold >>>= 2;
15412 bits -= 2;
15413 //---//
15414 }
15415 else if (here_val === 17) {
15416 //=== NEEDBITS(here.bits + 3);
15417 n = here_bits + 3;
15418 while (bits < n) {
15419 if (have === 0) { break inf_leave; }
15420 have--;
15421 hold += input[next++] << bits;
15422 bits += 8;
15423 }
15424 //===//
15425 //--- DROPBITS(here.bits) ---//
15426 hold >>>= here_bits;
15427 bits -= here_bits;
15428 //---//
15429 len = 0;
15430 copy = 3 + (hold & 0x07);//BITS(3);
15431 //--- DROPBITS(3) ---//
15432 hold >>>= 3;
15433 bits -= 3;
15434 //---//
15435 }
15436 else {
15437 //=== NEEDBITS(here.bits + 7);
15438 n = here_bits + 7;
15439 while (bits < n) {
15440 if (have === 0) { break inf_leave; }
15441 have--;
15442 hold += input[next++] << bits;
15443 bits += 8;
15444 }
15445 //===//
15446 //--- DROPBITS(here.bits) ---//
15447 hold >>>= here_bits;
15448 bits -= here_bits;
15449 //---//
15450 len = 0;
15451 copy = 11 + (hold & 0x7f);//BITS(7);
15452 //--- DROPBITS(7) ---//
15453 hold >>>= 7;
15454 bits -= 7;
15455 //---//
15456 }
15457 if (state.have + copy > state.nlen + state.ndist) {
15458 strm.msg = 'invalid bit length repeat';
15459 state.mode = BAD;
15460 break;
15461 }
15462 while (copy--) {
15463 state.lens[state.have++] = len;
15464 }
15465 }
15466 }
15467
15468 /* handle error breaks in while */
15469 if (state.mode === BAD) { break; }
15470
15471 /* check for end-of-block code (better have one) */
15472 if (state.lens[256] === 0) {
15473 strm.msg = 'invalid code -- missing end-of-block';
15474 state.mode = BAD;
15475 break;
15476 }
15477
15478 /* build code tables -- note: do not change the lenbits or distbits
15479 values here (9 and 6) without reading the comments in inftrees.h
15480 concerning the ENOUGH constants, which depend on those values */
15481 state.lenbits = 9;
15482
15483 opts = { bits: state.lenbits };
15484 ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);
15485 // We have separate tables & no pointers. 2 commented lines below not needed.
15486 // state.next_index = opts.table_index;
15487 state.lenbits = opts.bits;
15488 // state.lencode = state.next;
15489
15490 if (ret) {
15491 strm.msg = 'invalid literal/lengths set';
15492 state.mode = BAD;
15493 break;
15494 }
15495
15496 state.distbits = 6;
15497 //state.distcode.copy(state.codes);
15498 // Switch to use dynamic table
15499 state.distcode = state.distdyn;
15500 opts = { bits: state.distbits };
15501 ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);
15502 // We have separate tables & no pointers. 2 commented lines below not needed.
15503 // state.next_index = opts.table_index;
15504 state.distbits = opts.bits;
15505 // state.distcode = state.next;
15506
15507 if (ret) {
15508 strm.msg = 'invalid distances set';
15509 state.mode = BAD;
15510 break;
15511 }
15512 //Tracev((stderr, 'inflate: codes ok\n'));
15513 state.mode = LEN_;
15514 if (flush === Z_TREES) { break inf_leave; }
15515 /* falls through */
15516 case LEN_:
15517 state.mode = LEN;
15518 /* falls through */
15519 case LEN:
15520 if (have >= 6 && left >= 258) {
15521 //--- RESTORE() ---
15522 strm.next_out = put;
15523 strm.avail_out = left;
15524 strm.next_in = next;
15525 strm.avail_in = have;
15526 state.hold = hold;
15527 state.bits = bits;
15528 //---
15529 inflate_fast(strm, _out);
15530 //--- LOAD() ---
15531 put = strm.next_out;
15532 output = strm.output;
15533 left = strm.avail_out;
15534 next = strm.next_in;
15535 input = strm.input;
15536 have = strm.avail_in;
15537 hold = state.hold;
15538 bits = state.bits;
15539 //---
15540
15541 if (state.mode === TYPE) {
15542 state.back = -1;
15543 }
15544 break;
15545 }
15546 state.back = 0;
15547 for (;;) {
15548 here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/
15549 here_bits = here >>> 24;
15550 here_op = (here >>> 16) & 0xff;
15551 here_val = here & 0xffff;
15552
15553 if (here_bits <= bits) { break; }
15554 //--- PULLBYTE() ---//
15555 if (have === 0) { break inf_leave; }
15556 have--;
15557 hold += input[next++] << bits;
15558 bits += 8;
15559 //---//
15560 }
15561 if (here_op && (here_op & 0xf0) === 0) {
15562 last_bits = here_bits;
15563 last_op = here_op;
15564 last_val = here_val;
15565 for (;;) {
15566 here = state.lencode[last_val +
15567 ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];
15568 here_bits = here >>> 24;
15569 here_op = (here >>> 16) & 0xff;
15570 here_val = here & 0xffff;
15571
15572 if ((last_bits + here_bits) <= bits) { break; }
15573 //--- PULLBYTE() ---//
15574 if (have === 0) { break inf_leave; }
15575 have--;
15576 hold += input[next++] << bits;
15577 bits += 8;
15578 //---//
15579 }
15580 //--- DROPBITS(last.bits) ---//
15581 hold >>>= last_bits;
15582 bits -= last_bits;
15583 //---//
15584 state.back += last_bits;
15585 }
15586 //--- DROPBITS(here.bits) ---//
15587 hold >>>= here_bits;
15588 bits -= here_bits;
15589 //---//
15590 state.back += here_bits;
15591 state.length = here_val;
15592 if (here_op === 0) {
15593 //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
15594 // "inflate: literal '%c'\n" :
15595 // "inflate: literal 0x%02x\n", here.val));
15596 state.mode = LIT;
15597 break;
15598 }
15599 if (here_op & 32) {
15600 //Tracevv((stderr, "inflate: end of block\n"));
15601 state.back = -1;
15602 state.mode = TYPE;
15603 break;
15604 }
15605 if (here_op & 64) {
15606 strm.msg = 'invalid literal/length code';
15607 state.mode = BAD;
15608 break;
15609 }
15610 state.extra = here_op & 15;
15611 state.mode = LENEXT;
15612 /* falls through */
15613 case LENEXT:
15614 if (state.extra) {
15615 //=== NEEDBITS(state.extra);
15616 n = state.extra;
15617 while (bits < n) {
15618 if (have === 0) { break inf_leave; }
15619 have--;
15620 hold += input[next++] << bits;
15621 bits += 8;
15622 }
15623 //===//
15624 state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;
15625 //--- DROPBITS(state.extra) ---//
15626 hold >>>= state.extra;
15627 bits -= state.extra;
15628 //---//
15629 state.back += state.extra;
15630 }
15631 //Tracevv((stderr, "inflate: length %u\n", state.length));
15632 state.was = state.length;
15633 state.mode = DIST;
15634 /* falls through */
15635 case DIST:
15636 for (;;) {
15637 here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/
15638 here_bits = here >>> 24;
15639 here_op = (here >>> 16) & 0xff;
15640 here_val = here & 0xffff;
15641
15642 if ((here_bits) <= bits) { break; }
15643 //--- PULLBYTE() ---//
15644 if (have === 0) { break inf_leave; }
15645 have--;
15646 hold += input[next++] << bits;
15647 bits += 8;
15648 //---//
15649 }
15650 if ((here_op & 0xf0) === 0) {
15651 last_bits = here_bits;
15652 last_op = here_op;
15653 last_val = here_val;
15654 for (;;) {
15655 here = state.distcode[last_val +
15656 ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];
15657 here_bits = here >>> 24;
15658 here_op = (here >>> 16) & 0xff;
15659 here_val = here & 0xffff;
15660
15661 if ((last_bits + here_bits) <= bits) { break; }
15662 //--- PULLBYTE() ---//
15663 if (have === 0) { break inf_leave; }
15664 have--;
15665 hold += input[next++] << bits;
15666 bits += 8;
15667 //---//
15668 }
15669 //--- DROPBITS(last.bits) ---//
15670 hold >>>= last_bits;
15671 bits -= last_bits;
15672 //---//
15673 state.back += last_bits;
15674 }
15675 //--- DROPBITS(here.bits) ---//
15676 hold >>>= here_bits;
15677 bits -= here_bits;
15678 //---//
15679 state.back += here_bits;
15680 if (here_op & 64) {
15681 strm.msg = 'invalid distance code';
15682 state.mode = BAD;
15683 break;
15684 }
15685 state.offset = here_val;
15686 state.extra = (here_op) & 15;
15687 state.mode = DISTEXT;
15688 /* falls through */
15689 case DISTEXT:
15690 if (state.extra) {
15691 //=== NEEDBITS(state.extra);
15692 n = state.extra;
15693 while (bits < n) {
15694 if (have === 0) { break inf_leave; }
15695 have--;
15696 hold += input[next++] << bits;
15697 bits += 8;
15698 }
15699 //===//
15700 state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;
15701 //--- DROPBITS(state.extra) ---//
15702 hold >>>= state.extra;
15703 bits -= state.extra;
15704 //---//
15705 state.back += state.extra;
15706 }
15707//#ifdef INFLATE_STRICT
15708 if (state.offset > state.dmax) {
15709 strm.msg = 'invalid distance too far back';
15710 state.mode = BAD;
15711 break;
15712 }
15713//#endif
15714 //Tracevv((stderr, "inflate: distance %u\n", state.offset));
15715 state.mode = MATCH;
15716 /* falls through */
15717 case MATCH:
15718 if (left === 0) { break inf_leave; }
15719 copy = _out - left;
15720 if (state.offset > copy) { /* copy from window */
15721 copy = state.offset - copy;
15722 if (copy > state.whave) {
15723 if (state.sane) {
15724 strm.msg = 'invalid distance too far back';
15725 state.mode = BAD;
15726 break;
15727 }
15728// (!) This block is disabled in zlib defaults,
15729// don't enable it for binary compatibility
15730//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
15731// Trace((stderr, "inflate.c too far\n"));
15732// copy -= state.whave;
15733// if (copy > state.length) { copy = state.length; }
15734// if (copy > left) { copy = left; }
15735// left -= copy;
15736// state.length -= copy;
15737// do {
15738// output[put++] = 0;
15739// } while (--copy);
15740// if (state.length === 0) { state.mode = LEN; }
15741// break;
15742//#endif
15743 }
15744 if (copy > state.wnext) {
15745 copy -= state.wnext;
15746 from = state.wsize - copy;
15747 }
15748 else {
15749 from = state.wnext - copy;
15750 }
15751 if (copy > state.length) { copy = state.length; }
15752 from_source = state.window;
15753 }
15754 else { /* copy from output */
15755 from_source = output;
15756 from = put - state.offset;
15757 copy = state.length;
15758 }
15759 if (copy > left) { copy = left; }
15760 left -= copy;
15761 state.length -= copy;
15762 do {
15763 output[put++] = from_source[from++];
15764 } while (--copy);
15765 if (state.length === 0) { state.mode = LEN; }
15766 break;
15767 case LIT:
15768 if (left === 0) { break inf_leave; }
15769 output[put++] = state.length;
15770 left--;
15771 state.mode = LEN;
15772 break;
15773 case CHECK:
15774 if (state.wrap) {
15775 //=== NEEDBITS(32);
15776 while (bits < 32) {
15777 if (have === 0) { break inf_leave; }
15778 have--;
15779 // Use '|' instead of '+' to make sure that result is signed
15780 hold |= input[next++] << bits;
15781 bits += 8;
15782 }
15783 //===//
15784 _out -= left;
15785 strm.total_out += _out;
15786 state.total += _out;
15787 if (_out) {
15788 strm.adler = state.check =
15789 /*UPDATE(state.check, put - _out, _out);*/
15790 (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));
15791
15792 }
15793 _out = left;
15794 // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too
15795 if ((state.flags ? hold : zswap32(hold)) !== state.check) {
15796 strm.msg = 'incorrect data check';
15797 state.mode = BAD;
15798 break;
15799 }
15800 //=== INITBITS();
15801 hold = 0;
15802 bits = 0;
15803 //===//
15804 //Tracev((stderr, "inflate: check matches trailer\n"));
15805 }
15806 state.mode = LENGTH;
15807 /* falls through */
15808 case LENGTH:
15809 if (state.wrap && state.flags) {
15810 //=== NEEDBITS(32);
15811 while (bits < 32) {
15812 if (have === 0) { break inf_leave; }
15813 have--;
15814 hold += input[next++] << bits;
15815 bits += 8;
15816 }
15817 //===//
15818 if (hold !== (state.total & 0xffffffff)) {
15819 strm.msg = 'incorrect length check';
15820 state.mode = BAD;
15821 break;
15822 }
15823 //=== INITBITS();
15824 hold = 0;
15825 bits = 0;
15826 //===//
15827 //Tracev((stderr, "inflate: length matches trailer\n"));
15828 }
15829 state.mode = DONE;
15830 /* falls through */
15831 case DONE:
15832 ret = Z_STREAM_END;
15833 break inf_leave;
15834 case BAD:
15835 ret = Z_DATA_ERROR;
15836 break inf_leave;
15837 case MEM:
15838 return Z_MEM_ERROR;
15839 case SYNC:
15840 /* falls through */
15841 default:
15842 return Z_STREAM_ERROR;
15843 }
15844 }
15845
15846 // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave"
15847
15848 /*
15849 Return from inflate(), updating the total counts and the check value.
15850 If there was no progress during the inflate() call, return a buffer
15851 error. Call updatewindow() to create and/or update the window state.
15852 Note: a memory error from inflate() is non-recoverable.
15853 */
15854
15855 //--- RESTORE() ---
15856 strm.next_out = put;
15857 strm.avail_out = left;
15858 strm.next_in = next;
15859 strm.avail_in = have;
15860 state.hold = hold;
15861 state.bits = bits;
15862 //---
15863
15864 if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&
15865 (state.mode < CHECK || flush !== Z_FINISH))) {
15866 if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {
15867 state.mode = MEM;
15868 return Z_MEM_ERROR;
15869 }
15870 }
15871 _in -= strm.avail_in;
15872 _out -= strm.avail_out;
15873 strm.total_in += _in;
15874 strm.total_out += _out;
15875 state.total += _out;
15876 if (state.wrap && _out) {
15877 strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/
15878 (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));
15879 }
15880 strm.data_type = state.bits + (state.last ? 64 : 0) +
15881 (state.mode === TYPE ? 128 : 0) +
15882 (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);
15883 if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {
15884 ret = Z_BUF_ERROR;
15885 }
15886 return ret;
15887}
15888
15889function inflateEnd(strm) {
15890
15891 if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {
15892 return Z_STREAM_ERROR;
15893 }
15894
15895 var state = strm.state;
15896 if (state.window) {
15897 state.window = null;
15898 }
15899 strm.state = null;
15900 return Z_OK;
15901}
15902
15903function inflateGetHeader(strm, head) {
15904 var state;
15905
15906 /* check state */
15907 if (!strm || !strm.state) { return Z_STREAM_ERROR; }
15908 state = strm.state;
15909 if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }
15910
15911 /* save header structure */
15912 state.head = head;
15913 head.done = false;
15914 return Z_OK;
15915}
15916
15917function inflateSetDictionary(strm, dictionary) {
15918 var dictLength = dictionary.length;
15919
15920 var state;
15921 var dictid;
15922 var ret;
15923
15924 /* check state */
15925 if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }
15926 state = strm.state;
15927
15928 if (state.wrap !== 0 && state.mode !== DICT) {
15929 return Z_STREAM_ERROR;
15930 }
15931
15932 /* check for correct dictionary identifier */
15933 if (state.mode === DICT) {
15934 dictid = 1; /* adler32(0, null, 0)*/
15935 /* dictid = adler32(dictid, dictionary, dictLength); */
15936 dictid = adler32(dictid, dictionary, dictLength, 0);
15937 if (dictid !== state.check) {
15938 return Z_DATA_ERROR;
15939 }
15940 }
15941 /* copy dictionary to window using updatewindow(), which will amend the
15942 existing dictionary if appropriate */
15943 ret = updatewindow(strm, dictionary, dictLength, dictLength);
15944 if (ret) {
15945 state.mode = MEM;
15946 return Z_MEM_ERROR;
15947 }
15948 state.havedict = 1;
15949 // Tracev((stderr, "inflate: dictionary set\n"));
15950 return Z_OK;
15951}
15952
15953exports.inflateReset = inflateReset;
15954exports.inflateReset2 = inflateReset2;
15955exports.inflateResetKeep = inflateResetKeep;
15956exports.inflateInit = inflateInit;
15957exports.inflateInit2 = inflateInit2;
15958exports.inflate = inflate;
15959exports.inflateEnd = inflateEnd;
15960exports.inflateGetHeader = inflateGetHeader;
15961exports.inflateSetDictionary = inflateSetDictionary;
15962exports.inflateInfo = 'pako inflate (from Nodeca project)';
15963
15964/* Not implemented
15965exports.inflateCopy = inflateCopy;
15966exports.inflateGetDictionary = inflateGetDictionary;
15967exports.inflateMark = inflateMark;
15968exports.inflatePrime = inflatePrime;
15969exports.inflateSync = inflateSync;
15970exports.inflateSyncPoint = inflateSyncPoint;
15971exports.inflateUndermine = inflateUndermine;
15972*/
15973
15974},{"../utils/common":102,"./adler32":103,"./crc32":105,"./inffast":107,"./inftrees":109}],109:[function(require,module,exports){
15975'use strict';
15976
15977// (C) 1995-2013 Jean-loup Gailly and Mark Adler
15978// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
15979//
15980// This software is provided 'as-is', without any express or implied
15981// warranty. In no event will the authors be held liable for any damages
15982// arising from the use of this software.
15983//
15984// Permission is granted to anyone to use this software for any purpose,
15985// including commercial applications, and to alter it and redistribute it
15986// freely, subject to the following restrictions:
15987//
15988// 1. The origin of this software must not be misrepresented; you must not
15989// claim that you wrote the original software. If you use this software
15990// in a product, an acknowledgment in the product documentation would be
15991// appreciated but is not required.
15992// 2. Altered source versions must be plainly marked as such, and must not be
15993// misrepresented as being the original software.
15994// 3. This notice may not be removed or altered from any source distribution.
15995
15996var utils = require('../utils/common');
15997
15998var MAXBITS = 15;
15999var ENOUGH_LENS = 852;
16000var ENOUGH_DISTS = 592;
16001//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
16002
16003var CODES = 0;
16004var LENS = 1;
16005var DISTS = 2;
16006
16007var lbase = [ /* Length codes 257..285 base */
16008 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
16009 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0
16010];
16011
16012var lext = [ /* Length codes 257..285 extra */
16013 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
16014 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78
16015];
16016
16017var dbase = [ /* Distance codes 0..29 base */
16018 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
16019 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
16020 8193, 12289, 16385, 24577, 0, 0
16021];
16022
16023var dext = [ /* Distance codes 0..29 extra */
16024 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
16025 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
16026 28, 28, 29, 29, 64, 64
16027];
16028
16029module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)
16030{
16031 var bits = opts.bits;
16032 //here = opts.here; /* table entry for duplication */
16033
16034 var len = 0; /* a code's length in bits */
16035 var sym = 0; /* index of code symbols */
16036 var min = 0, max = 0; /* minimum and maximum code lengths */
16037 var root = 0; /* number of index bits for root table */
16038 var curr = 0; /* number of index bits for current table */
16039 var drop = 0; /* code bits to drop for sub-table */
16040 var left = 0; /* number of prefix codes available */
16041 var used = 0; /* code entries in table used */
16042 var huff = 0; /* Huffman code */
16043 var incr; /* for incrementing code, index */
16044 var fill; /* index for replicating entries */
16045 var low; /* low bits for current root entry */
16046 var mask; /* mask for low root bits */
16047 var next; /* next available space in table */
16048 var base = null; /* base value table to use */
16049 var base_index = 0;
16050// var shoextra; /* extra bits table to use */
16051 var end; /* use base and extra for symbol > end */
16052 var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */
16053 var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */
16054 var extra = null;
16055 var extra_index = 0;
16056
16057 var here_bits, here_op, here_val;
16058
16059 /*
16060 Process a set of code lengths to create a canonical Huffman code. The
16061 code lengths are lens[0..codes-1]. Each length corresponds to the
16062 symbols 0..codes-1. The Huffman code is generated by first sorting the
16063 symbols by length from short to long, and retaining the symbol order
16064 for codes with equal lengths. Then the code starts with all zero bits
16065 for the first code of the shortest length, and the codes are integer
16066 increments for the same length, and zeros are appended as the length
16067 increases. For the deflate format, these bits are stored backwards
16068 from their more natural integer increment ordering, and so when the
16069 decoding tables are built in the large loop below, the integer codes
16070 are incremented backwards.
16071
16072 This routine assumes, but does not check, that all of the entries in
16073 lens[] are in the range 0..MAXBITS. The caller must assure this.
16074 1..MAXBITS is interpreted as that code length. zero means that that
16075 symbol does not occur in this code.
16076
16077 The codes are sorted by computing a count of codes for each length,
16078 creating from that a table of starting indices for each length in the
16079 sorted table, and then entering the symbols in order in the sorted
16080 table. The sorted table is work[], with that space being provided by
16081 the caller.
16082
16083 The length counts are used for other purposes as well, i.e. finding
16084 the minimum and maximum length codes, determining if there are any
16085 codes at all, checking for a valid set of lengths, and looking ahead
16086 at length counts to determine sub-table sizes when building the
16087 decoding tables.
16088 */
16089
16090 /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
16091 for (len = 0; len <= MAXBITS; len++) {
16092 count[len] = 0;
16093 }
16094 for (sym = 0; sym < codes; sym++) {
16095 count[lens[lens_index + sym]]++;
16096 }
16097
16098 /* bound code lengths, force root to be within code lengths */
16099 root = bits;
16100 for (max = MAXBITS; max >= 1; max--) {
16101 if (count[max] !== 0) { break; }
16102 }
16103 if (root > max) {
16104 root = max;
16105 }
16106 if (max === 0) { /* no symbols to code at all */
16107 //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */
16108 //table.bits[opts.table_index] = 1; //here.bits = (var char)1;
16109 //table.val[opts.table_index++] = 0; //here.val = (var short)0;
16110 table[table_index++] = (1 << 24) | (64 << 16) | 0;
16111
16112
16113 //table.op[opts.table_index] = 64;
16114 //table.bits[opts.table_index] = 1;
16115 //table.val[opts.table_index++] = 0;
16116 table[table_index++] = (1 << 24) | (64 << 16) | 0;
16117
16118 opts.bits = 1;
16119 return 0; /* no symbols, but wait for decoding to report error */
16120 }
16121 for (min = 1; min < max; min++) {
16122 if (count[min] !== 0) { break; }
16123 }
16124 if (root < min) {
16125 root = min;
16126 }
16127
16128 /* check for an over-subscribed or incomplete set of lengths */
16129 left = 1;
16130 for (len = 1; len <= MAXBITS; len++) {
16131 left <<= 1;
16132 left -= count[len];
16133 if (left < 0) {
16134 return -1;
16135 } /* over-subscribed */
16136 }
16137 if (left > 0 && (type === CODES || max !== 1)) {
16138 return -1; /* incomplete set */
16139 }
16140
16141 /* generate offsets into symbol table for each length for sorting */
16142 offs[1] = 0;
16143 for (len = 1; len < MAXBITS; len++) {
16144 offs[len + 1] = offs[len] + count[len];
16145 }
16146
16147 /* sort symbols by length, by symbol order within each length */
16148 for (sym = 0; sym < codes; sym++) {
16149 if (lens[lens_index + sym] !== 0) {
16150 work[offs[lens[lens_index + sym]]++] = sym;
16151 }
16152 }
16153
16154 /*
16155 Create and fill in decoding tables. In this loop, the table being
16156 filled is at next and has curr index bits. The code being used is huff
16157 with length len. That code is converted to an index by dropping drop
16158 bits off of the bottom. For codes where len is less than drop + curr,
16159 those top drop + curr - len bits are incremented through all values to
16160 fill the table with replicated entries.
16161
16162 root is the number of index bits for the root table. When len exceeds
16163 root, sub-tables are created pointed to by the root entry with an index
16164 of the low root bits of huff. This is saved in low to check for when a
16165 new sub-table should be started. drop is zero when the root table is
16166 being filled, and drop is root when sub-tables are being filled.
16167
16168 When a new sub-table is needed, it is necessary to look ahead in the
16169 code lengths to determine what size sub-table is needed. The length
16170 counts are used for this, and so count[] is decremented as codes are
16171 entered in the tables.
16172
16173 used keeps track of how many table entries have been allocated from the
16174 provided *table space. It is checked for LENS and DIST tables against
16175 the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
16176 the initial root table size constants. See the comments in inftrees.h
16177 for more information.
16178
16179 sym increments through all symbols, and the loop terminates when
16180 all codes of length max, i.e. all codes, have been processed. This
16181 routine permits incomplete codes, so another loop after this one fills
16182 in the rest of the decoding tables with invalid code markers.
16183 */
16184
16185 /* set up for code type */
16186 // poor man optimization - use if-else instead of switch,
16187 // to avoid deopts in old v8
16188 if (type === CODES) {
16189 base = extra = work; /* dummy value--not used */
16190 end = 19;
16191
16192 } else if (type === LENS) {
16193 base = lbase;
16194 base_index -= 257;
16195 extra = lext;
16196 extra_index -= 257;
16197 end = 256;
16198
16199 } else { /* DISTS */
16200 base = dbase;
16201 extra = dext;
16202 end = -1;
16203 }
16204
16205 /* initialize opts for loop */
16206 huff = 0; /* starting code */
16207 sym = 0; /* starting code symbol */
16208 len = min; /* starting code length */
16209 next = table_index; /* current table to fill in */
16210 curr = root; /* current table index bits */
16211 drop = 0; /* current bits to drop from code for index */
16212 low = -1; /* trigger new sub-table when len > root */
16213 used = 1 << root; /* use root table entries */
16214 mask = used - 1; /* mask for comparing low */
16215
16216 /* check available table space */
16217 if ((type === LENS && used > ENOUGH_LENS) ||
16218 (type === DISTS && used > ENOUGH_DISTS)) {
16219 return 1;
16220 }
16221
16222 /* process all codes and make table entries */
16223 for (;;) {
16224 /* create table entry */
16225 here_bits = len - drop;
16226 if (work[sym] < end) {
16227 here_op = 0;
16228 here_val = work[sym];
16229 }
16230 else if (work[sym] > end) {
16231 here_op = extra[extra_index + work[sym]];
16232 here_val = base[base_index + work[sym]];
16233 }
16234 else {
16235 here_op = 32 + 64; /* end of block */
16236 here_val = 0;
16237 }
16238
16239 /* replicate for those indices with low len bits equal to huff */
16240 incr = 1 << (len - drop);
16241 fill = 1 << curr;
16242 min = fill; /* save offset to next table */
16243 do {
16244 fill -= incr;
16245 table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;
16246 } while (fill !== 0);
16247
16248 /* backwards increment the len-bit code huff */
16249 incr = 1 << (len - 1);
16250 while (huff & incr) {
16251 incr >>= 1;
16252 }
16253 if (incr !== 0) {
16254 huff &= incr - 1;
16255 huff += incr;
16256 } else {
16257 huff = 0;
16258 }
16259
16260 /* go to next symbol, update count, len */
16261 sym++;
16262 if (--count[len] === 0) {
16263 if (len === max) { break; }
16264 len = lens[lens_index + work[sym]];
16265 }
16266
16267 /* create new sub-table if needed */
16268 if (len > root && (huff & mask) !== low) {
16269 /* if first time, transition to sub-tables */
16270 if (drop === 0) {
16271 drop = root;
16272 }
16273
16274 /* increment past last table */
16275 next += min; /* here min is 1 << curr */
16276
16277 /* determine length of next table */
16278 curr = len - drop;
16279 left = 1 << curr;
16280 while (curr + drop < max) {
16281 left -= count[curr + drop];
16282 if (left <= 0) { break; }
16283 curr++;
16284 left <<= 1;
16285 }
16286
16287 /* check for enough space */
16288 used += 1 << curr;
16289 if ((type === LENS && used > ENOUGH_LENS) ||
16290 (type === DISTS && used > ENOUGH_DISTS)) {
16291 return 1;
16292 }
16293
16294 /* point entry in root table to sub-table */
16295 low = huff & mask;
16296 /*table.op[low] = curr;
16297 table.bits[low] = root;
16298 table.val[low] = next - opts.table_index;*/
16299 table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;
16300 }
16301 }
16302
16303 /* fill in remaining table entry if code is incomplete (guaranteed to have
16304 at most one remaining entry, since if the code is incomplete, the
16305 maximum code length that was allowed to get this far is one bit) */
16306 if (huff !== 0) {
16307 //table.op[next + huff] = 64; /* invalid code marker */
16308 //table.bits[next + huff] = len - drop;
16309 //table.val[next + huff] = 0;
16310 table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;
16311 }
16312
16313 /* set return parameters */
16314 //opts.table_index += used;
16315 opts.bits = root;
16316 return 0;
16317};
16318
16319},{"../utils/common":102}],110:[function(require,module,exports){
16320'use strict';
16321
16322// (C) 1995-2013 Jean-loup Gailly and Mark Adler
16323// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
16324//
16325// This software is provided 'as-is', without any express or implied
16326// warranty. In no event will the authors be held liable for any damages
16327// arising from the use of this software.
16328//
16329// Permission is granted to anyone to use this software for any purpose,
16330// including commercial applications, and to alter it and redistribute it
16331// freely, subject to the following restrictions:
16332//
16333// 1. The origin of this software must not be misrepresented; you must not
16334// claim that you wrote the original software. If you use this software
16335// in a product, an acknowledgment in the product documentation would be
16336// appreciated but is not required.
16337// 2. Altered source versions must be plainly marked as such, and must not be
16338// misrepresented as being the original software.
16339// 3. This notice may not be removed or altered from any source distribution.
16340
16341module.exports = {
16342 2: 'need dictionary', /* Z_NEED_DICT 2 */
16343 1: 'stream end', /* Z_STREAM_END 1 */
16344 0: '', /* Z_OK 0 */
16345 '-1': 'file error', /* Z_ERRNO (-1) */
16346 '-2': 'stream error', /* Z_STREAM_ERROR (-2) */
16347 '-3': 'data error', /* Z_DATA_ERROR (-3) */
16348 '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */
16349 '-5': 'buffer error', /* Z_BUF_ERROR (-5) */
16350 '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */
16351};
16352
16353},{}],111:[function(require,module,exports){
16354'use strict';
16355
16356// (C) 1995-2013 Jean-loup Gailly and Mark Adler
16357// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
16358//
16359// This software is provided 'as-is', without any express or implied
16360// warranty. In no event will the authors be held liable for any damages
16361// arising from the use of this software.
16362//
16363// Permission is granted to anyone to use this software for any purpose,
16364// including commercial applications, and to alter it and redistribute it
16365// freely, subject to the following restrictions:
16366//
16367// 1. The origin of this software must not be misrepresented; you must not
16368// claim that you wrote the original software. If you use this software
16369// in a product, an acknowledgment in the product documentation would be
16370// appreciated but is not required.
16371// 2. Altered source versions must be plainly marked as such, and must not be
16372// misrepresented as being the original software.
16373// 3. This notice may not be removed or altered from any source distribution.
16374
16375/* eslint-disable space-unary-ops */
16376
16377var utils = require('../utils/common');
16378
16379/* Public constants ==========================================================*/
16380/* ===========================================================================*/
16381
16382
16383//var Z_FILTERED = 1;
16384//var Z_HUFFMAN_ONLY = 2;
16385//var Z_RLE = 3;
16386var Z_FIXED = 4;
16387//var Z_DEFAULT_STRATEGY = 0;
16388
16389/* Possible values of the data_type field (though see inflate()) */
16390var Z_BINARY = 0;
16391var Z_TEXT = 1;
16392//var Z_ASCII = 1; // = Z_TEXT
16393var Z_UNKNOWN = 2;
16394
16395/*============================================================================*/
16396
16397
16398function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }
16399
16400// From zutil.h
16401
16402var STORED_BLOCK = 0;
16403var STATIC_TREES = 1;
16404var DYN_TREES = 2;
16405/* The three kinds of block type */
16406
16407var MIN_MATCH = 3;
16408var MAX_MATCH = 258;
16409/* The minimum and maximum match lengths */
16410
16411// From deflate.h
16412/* ===========================================================================
16413 * Internal compression state.
16414 */
16415
16416var LENGTH_CODES = 29;
16417/* number of length codes, not counting the special END_BLOCK code */
16418
16419var LITERALS = 256;
16420/* number of literal bytes 0..255 */
16421
16422var L_CODES = LITERALS + 1 + LENGTH_CODES;
16423/* number of Literal or Length codes, including the END_BLOCK code */
16424
16425var D_CODES = 30;
16426/* number of distance codes */
16427
16428var BL_CODES = 19;
16429/* number of codes used to transfer the bit lengths */
16430
16431var HEAP_SIZE = 2 * L_CODES + 1;
16432/* maximum heap size */
16433
16434var MAX_BITS = 15;
16435/* All codes must not exceed MAX_BITS bits */
16436
16437var Buf_size = 16;
16438/* size of bit buffer in bi_buf */
16439
16440
16441/* ===========================================================================
16442 * Constants
16443 */
16444
16445var MAX_BL_BITS = 7;
16446/* Bit length codes must not exceed MAX_BL_BITS bits */
16447
16448var END_BLOCK = 256;
16449/* end of block literal code */
16450
16451var REP_3_6 = 16;
16452/* repeat previous bit length 3-6 times (2 bits of repeat count) */
16453
16454var REPZ_3_10 = 17;
16455/* repeat a zero length 3-10 times (3 bits of repeat count) */
16456
16457var REPZ_11_138 = 18;
16458/* repeat a zero length 11-138 times (7 bits of repeat count) */
16459
16460/* eslint-disable comma-spacing,array-bracket-spacing */
16461var extra_lbits = /* extra bits for each length code */
16462 [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];
16463
16464var extra_dbits = /* extra bits for each distance code */
16465 [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];
16466
16467var extra_blbits = /* extra bits for each bit length code */
16468 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];
16469
16470var bl_order =
16471 [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];
16472/* eslint-enable comma-spacing,array-bracket-spacing */
16473
16474/* The lengths of the bit length codes are sent in order of decreasing
16475 * probability, to avoid transmitting the lengths for unused bit length codes.
16476 */
16477
16478/* ===========================================================================
16479 * Local data. These are initialized only once.
16480 */
16481
16482// We pre-fill arrays with 0 to avoid uninitialized gaps
16483
16484var DIST_CODE_LEN = 512; /* see definition of array dist_code below */
16485
16486// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1
16487var static_ltree = new Array((L_CODES + 2) * 2);
16488zero(static_ltree);
16489/* The static literal tree. Since the bit lengths are imposed, there is no
16490 * need for the L_CODES extra codes used during heap construction. However
16491 * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
16492 * below).
16493 */
16494
16495var static_dtree = new Array(D_CODES * 2);
16496zero(static_dtree);
16497/* The static distance tree. (Actually a trivial tree since all codes use
16498 * 5 bits.)
16499 */
16500
16501var _dist_code = new Array(DIST_CODE_LEN);
16502zero(_dist_code);
16503/* Distance codes. The first 256 values correspond to the distances
16504 * 3 .. 258, the last 256 values correspond to the top 8 bits of
16505 * the 15 bit distances.
16506 */
16507
16508var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);
16509zero(_length_code);
16510/* length code for each normalized match length (0 == MIN_MATCH) */
16511
16512var base_length = new Array(LENGTH_CODES);
16513zero(base_length);
16514/* First normalized length for each code (0 = MIN_MATCH) */
16515
16516var base_dist = new Array(D_CODES);
16517zero(base_dist);
16518/* First normalized distance for each code (0 = distance of 1) */
16519
16520
16521function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {
16522
16523 this.static_tree = static_tree; /* static tree or NULL */
16524 this.extra_bits = extra_bits; /* extra bits for each code or NULL */
16525 this.extra_base = extra_base; /* base index for extra_bits */
16526 this.elems = elems; /* max number of elements in the tree */
16527 this.max_length = max_length; /* max bit length for the codes */
16528
16529 // show if `static_tree` has data or dummy - needed for monomorphic objects
16530 this.has_stree = static_tree && static_tree.length;
16531}
16532
16533
16534var static_l_desc;
16535var static_d_desc;
16536var static_bl_desc;
16537
16538
16539function TreeDesc(dyn_tree, stat_desc) {
16540 this.dyn_tree = dyn_tree; /* the dynamic tree */
16541 this.max_code = 0; /* largest code with non zero frequency */
16542 this.stat_desc = stat_desc; /* the corresponding static tree */
16543}
16544
16545
16546
16547function d_code(dist) {
16548 return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];
16549}
16550
16551
16552/* ===========================================================================
16553 * Output a short LSB first on the stream.
16554 * IN assertion: there is enough room in pendingBuf.
16555 */
16556function put_short(s, w) {
16557// put_byte(s, (uch)((w) & 0xff));
16558// put_byte(s, (uch)((ush)(w) >> 8));
16559 s.pending_buf[s.pending++] = (w) & 0xff;
16560 s.pending_buf[s.pending++] = (w >>> 8) & 0xff;
16561}
16562
16563
16564/* ===========================================================================
16565 * Send a value on a given number of bits.
16566 * IN assertion: length <= 16 and value fits in length bits.
16567 */
16568function send_bits(s, value, length) {
16569 if (s.bi_valid > (Buf_size - length)) {
16570 s.bi_buf |= (value << s.bi_valid) & 0xffff;
16571 put_short(s, s.bi_buf);
16572 s.bi_buf = value >> (Buf_size - s.bi_valid);
16573 s.bi_valid += length - Buf_size;
16574 } else {
16575 s.bi_buf |= (value << s.bi_valid) & 0xffff;
16576 s.bi_valid += length;
16577 }
16578}
16579
16580
16581function send_code(s, c, tree) {
16582 send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);
16583}
16584
16585
16586/* ===========================================================================
16587 * Reverse the first len bits of a code, using straightforward code (a faster
16588 * method would use a table)
16589 * IN assertion: 1 <= len <= 15
16590 */
16591function bi_reverse(code, len) {
16592 var res = 0;
16593 do {
16594 res |= code & 1;
16595 code >>>= 1;
16596 res <<= 1;
16597 } while (--len > 0);
16598 return res >>> 1;
16599}
16600
16601
16602/* ===========================================================================
16603 * Flush the bit buffer, keeping at most 7 bits in it.
16604 */
16605function bi_flush(s) {
16606 if (s.bi_valid === 16) {
16607 put_short(s, s.bi_buf);
16608 s.bi_buf = 0;
16609 s.bi_valid = 0;
16610
16611 } else if (s.bi_valid >= 8) {
16612 s.pending_buf[s.pending++] = s.bi_buf & 0xff;
16613 s.bi_buf >>= 8;
16614 s.bi_valid -= 8;
16615 }
16616}
16617
16618
16619/* ===========================================================================
16620 * Compute the optimal bit lengths for a tree and update the total bit length
16621 * for the current block.
16622 * IN assertion: the fields freq and dad are set, heap[heap_max] and
16623 * above are the tree nodes sorted by increasing frequency.
16624 * OUT assertions: the field len is set to the optimal bit length, the
16625 * array bl_count contains the frequencies for each bit length.
16626 * The length opt_len is updated; static_len is also updated if stree is
16627 * not null.
16628 */
16629function gen_bitlen(s, desc)
16630// deflate_state *s;
16631// tree_desc *desc; /* the tree descriptor */
16632{
16633 var tree = desc.dyn_tree;
16634 var max_code = desc.max_code;
16635 var stree = desc.stat_desc.static_tree;
16636 var has_stree = desc.stat_desc.has_stree;
16637 var extra = desc.stat_desc.extra_bits;
16638 var base = desc.stat_desc.extra_base;
16639 var max_length = desc.stat_desc.max_length;
16640 var h; /* heap index */
16641 var n, m; /* iterate over the tree elements */
16642 var bits; /* bit length */
16643 var xbits; /* extra bits */
16644 var f; /* frequency */
16645 var overflow = 0; /* number of elements with bit length too large */
16646
16647 for (bits = 0; bits <= MAX_BITS; bits++) {
16648 s.bl_count[bits] = 0;
16649 }
16650
16651 /* In a first pass, compute the optimal bit lengths (which may
16652 * overflow in the case of the bit length tree).
16653 */
16654 tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */
16655
16656 for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {
16657 n = s.heap[h];
16658 bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;
16659 if (bits > max_length) {
16660 bits = max_length;
16661 overflow++;
16662 }
16663 tree[n * 2 + 1]/*.Len*/ = bits;
16664 /* We overwrite tree[n].Dad which is no longer needed */
16665
16666 if (n > max_code) { continue; } /* not a leaf node */
16667
16668 s.bl_count[bits]++;
16669 xbits = 0;
16670 if (n >= base) {
16671 xbits = extra[n - base];
16672 }
16673 f = tree[n * 2]/*.Freq*/;
16674 s.opt_len += f * (bits + xbits);
16675 if (has_stree) {
16676 s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);
16677 }
16678 }
16679 if (overflow === 0) { return; }
16680
16681 // Trace((stderr,"\nbit length overflow\n"));
16682 /* This happens for example on obj2 and pic of the Calgary corpus */
16683
16684 /* Find the first bit length which could increase: */
16685 do {
16686 bits = max_length - 1;
16687 while (s.bl_count[bits] === 0) { bits--; }
16688 s.bl_count[bits]--; /* move one leaf down the tree */
16689 s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */
16690 s.bl_count[max_length]--;
16691 /* The brother of the overflow item also moves one step up,
16692 * but this does not affect bl_count[max_length]
16693 */
16694 overflow -= 2;
16695 } while (overflow > 0);
16696
16697 /* Now recompute all bit lengths, scanning in increasing frequency.
16698 * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
16699 * lengths instead of fixing only the wrong ones. This idea is taken
16700 * from 'ar' written by Haruhiko Okumura.)
16701 */
16702 for (bits = max_length; bits !== 0; bits--) {
16703 n = s.bl_count[bits];
16704 while (n !== 0) {
16705 m = s.heap[--h];
16706 if (m > max_code) { continue; }
16707 if (tree[m * 2 + 1]/*.Len*/ !== bits) {
16708 // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
16709 s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;
16710 tree[m * 2 + 1]/*.Len*/ = bits;
16711 }
16712 n--;
16713 }
16714 }
16715}
16716
16717
16718/* ===========================================================================
16719 * Generate the codes for a given tree and bit counts (which need not be
16720 * optimal).
16721 * IN assertion: the array bl_count contains the bit length statistics for
16722 * the given tree and the field len is set for all tree elements.
16723 * OUT assertion: the field code is set for all tree elements of non
16724 * zero code length.
16725 */
16726function gen_codes(tree, max_code, bl_count)
16727// ct_data *tree; /* the tree to decorate */
16728// int max_code; /* largest code with non zero frequency */
16729// ushf *bl_count; /* number of codes at each bit length */
16730{
16731 var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */
16732 var code = 0; /* running code value */
16733 var bits; /* bit index */
16734 var n; /* code index */
16735
16736 /* The distribution counts are first used to generate the code values
16737 * without bit reversal.
16738 */
16739 for (bits = 1; bits <= MAX_BITS; bits++) {
16740 next_code[bits] = code = (code + bl_count[bits - 1]) << 1;
16741 }
16742 /* Check that the bit counts in bl_count are consistent. The last code
16743 * must be all ones.
16744 */
16745 //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
16746 // "inconsistent bit counts");
16747 //Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
16748
16749 for (n = 0; n <= max_code; n++) {
16750 var len = tree[n * 2 + 1]/*.Len*/;
16751 if (len === 0) { continue; }
16752 /* Now reverse the bits */
16753 tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);
16754
16755 //Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
16756 // n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
16757 }
16758}
16759
16760
16761/* ===========================================================================
16762 * Initialize the various 'constant' tables.
16763 */
16764function tr_static_init() {
16765 var n; /* iterates over tree elements */
16766 var bits; /* bit counter */
16767 var length; /* length value */
16768 var code; /* code value */
16769 var dist; /* distance index */
16770 var bl_count = new Array(MAX_BITS + 1);
16771 /* number of codes at each bit length for an optimal tree */
16772
16773 // do check in _tr_init()
16774 //if (static_init_done) return;
16775
16776 /* For some embedded targets, global variables are not initialized: */
16777/*#ifdef NO_INIT_GLOBAL_POINTERS
16778 static_l_desc.static_tree = static_ltree;
16779 static_l_desc.extra_bits = extra_lbits;
16780 static_d_desc.static_tree = static_dtree;
16781 static_d_desc.extra_bits = extra_dbits;
16782 static_bl_desc.extra_bits = extra_blbits;
16783#endif*/
16784
16785 /* Initialize the mapping length (0..255) -> length code (0..28) */
16786 length = 0;
16787 for (code = 0; code < LENGTH_CODES - 1; code++) {
16788 base_length[code] = length;
16789 for (n = 0; n < (1 << extra_lbits[code]); n++) {
16790 _length_code[length++] = code;
16791 }
16792 }
16793 //Assert (length == 256, "tr_static_init: length != 256");
16794 /* Note that the length 255 (match length 258) can be represented
16795 * in two different ways: code 284 + 5 bits or code 285, so we
16796 * overwrite length_code[255] to use the best encoding:
16797 */
16798 _length_code[length - 1] = code;
16799
16800 /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
16801 dist = 0;
16802 for (code = 0; code < 16; code++) {
16803 base_dist[code] = dist;
16804 for (n = 0; n < (1 << extra_dbits[code]); n++) {
16805 _dist_code[dist++] = code;
16806 }
16807 }
16808 //Assert (dist == 256, "tr_static_init: dist != 256");
16809 dist >>= 7; /* from now on, all distances are divided by 128 */
16810 for (; code < D_CODES; code++) {
16811 base_dist[code] = dist << 7;
16812 for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {
16813 _dist_code[256 + dist++] = code;
16814 }
16815 }
16816 //Assert (dist == 256, "tr_static_init: 256+dist != 512");
16817
16818 /* Construct the codes of the static literal tree */
16819 for (bits = 0; bits <= MAX_BITS; bits++) {
16820 bl_count[bits] = 0;
16821 }
16822
16823 n = 0;
16824 while (n <= 143) {
16825 static_ltree[n * 2 + 1]/*.Len*/ = 8;
16826 n++;
16827 bl_count[8]++;
16828 }
16829 while (n <= 255) {
16830 static_ltree[n * 2 + 1]/*.Len*/ = 9;
16831 n++;
16832 bl_count[9]++;
16833 }
16834 while (n <= 279) {
16835 static_ltree[n * 2 + 1]/*.Len*/ = 7;
16836 n++;
16837 bl_count[7]++;
16838 }
16839 while (n <= 287) {
16840 static_ltree[n * 2 + 1]/*.Len*/ = 8;
16841 n++;
16842 bl_count[8]++;
16843 }
16844 /* Codes 286 and 287 do not exist, but we must include them in the
16845 * tree construction to get a canonical Huffman tree (longest code
16846 * all ones)
16847 */
16848 gen_codes(static_ltree, L_CODES + 1, bl_count);
16849
16850 /* The static distance tree is trivial: */
16851 for (n = 0; n < D_CODES; n++) {
16852 static_dtree[n * 2 + 1]/*.Len*/ = 5;
16853 static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);
16854 }
16855
16856 // Now data ready and we can init static trees
16857 static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);
16858 static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);
16859 static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);
16860
16861 //static_init_done = true;
16862}
16863
16864
16865/* ===========================================================================
16866 * Initialize a new block.
16867 */
16868function init_block(s) {
16869 var n; /* iterates over tree elements */
16870
16871 /* Initialize the trees. */
16872 for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }
16873 for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }
16874 for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }
16875
16876 s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;
16877 s.opt_len = s.static_len = 0;
16878 s.last_lit = s.matches = 0;
16879}
16880
16881
16882/* ===========================================================================
16883 * Flush the bit buffer and align the output on a byte boundary
16884 */
16885function bi_windup(s)
16886{
16887 if (s.bi_valid > 8) {
16888 put_short(s, s.bi_buf);
16889 } else if (s.bi_valid > 0) {
16890 //put_byte(s, (Byte)s->bi_buf);
16891 s.pending_buf[s.pending++] = s.bi_buf;
16892 }
16893 s.bi_buf = 0;
16894 s.bi_valid = 0;
16895}
16896
16897/* ===========================================================================
16898 * Copy a stored block, storing first the length and its
16899 * one's complement if requested.
16900 */
16901function copy_block(s, buf, len, header)
16902//DeflateState *s;
16903//charf *buf; /* the input data */
16904//unsigned len; /* its length */
16905//int header; /* true if block header must be written */
16906{
16907 bi_windup(s); /* align on byte boundary */
16908
16909 if (header) {
16910 put_short(s, len);
16911 put_short(s, ~len);
16912 }
16913// while (len--) {
16914// put_byte(s, *buf++);
16915// }
16916 utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);
16917 s.pending += len;
16918}
16919
16920/* ===========================================================================
16921 * Compares to subtrees, using the tree depth as tie breaker when
16922 * the subtrees have equal frequency. This minimizes the worst case length.
16923 */
16924function smaller(tree, n, m, depth) {
16925 var _n2 = n * 2;
16926 var _m2 = m * 2;
16927 return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||
16928 (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));
16929}
16930
16931/* ===========================================================================
16932 * Restore the heap property by moving down the tree starting at node k,
16933 * exchanging a node with the smallest of its two sons if necessary, stopping
16934 * when the heap property is re-established (each father smaller than its
16935 * two sons).
16936 */
16937function pqdownheap(s, tree, k)
16938// deflate_state *s;
16939// ct_data *tree; /* the tree to restore */
16940// int k; /* node to move down */
16941{
16942 var v = s.heap[k];
16943 var j = k << 1; /* left son of k */
16944 while (j <= s.heap_len) {
16945 /* Set j to the smallest of the two sons: */
16946 if (j < s.heap_len &&
16947 smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {
16948 j++;
16949 }
16950 /* Exit if v is smaller than both sons */
16951 if (smaller(tree, v, s.heap[j], s.depth)) { break; }
16952
16953 /* Exchange v with the smallest son */
16954 s.heap[k] = s.heap[j];
16955 k = j;
16956
16957 /* And continue down the tree, setting j to the left son of k */
16958 j <<= 1;
16959 }
16960 s.heap[k] = v;
16961}
16962
16963
16964// inlined manually
16965// var SMALLEST = 1;
16966
16967/* ===========================================================================
16968 * Send the block data compressed using the given Huffman trees
16969 */
16970function compress_block(s, ltree, dtree)
16971// deflate_state *s;
16972// const ct_data *ltree; /* literal tree */
16973// const ct_data *dtree; /* distance tree */
16974{
16975 var dist; /* distance of matched string */
16976 var lc; /* match length or unmatched char (if dist == 0) */
16977 var lx = 0; /* running index in l_buf */
16978 var code; /* the code to send */
16979 var extra; /* number of extra bits to send */
16980
16981 if (s.last_lit !== 0) {
16982 do {
16983 dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);
16984 lc = s.pending_buf[s.l_buf + lx];
16985 lx++;
16986
16987 if (dist === 0) {
16988 send_code(s, lc, ltree); /* send a literal byte */
16989 //Tracecv(isgraph(lc), (stderr," '%c' ", lc));
16990 } else {
16991 /* Here, lc is the match length - MIN_MATCH */
16992 code = _length_code[lc];
16993 send_code(s, code + LITERALS + 1, ltree); /* send the length code */
16994 extra = extra_lbits[code];
16995 if (extra !== 0) {
16996 lc -= base_length[code];
16997 send_bits(s, lc, extra); /* send the extra length bits */
16998 }
16999 dist--; /* dist is now the match distance - 1 */
17000 code = d_code(dist);
17001 //Assert (code < D_CODES, "bad d_code");
17002
17003 send_code(s, code, dtree); /* send the distance code */
17004 extra = extra_dbits[code];
17005 if (extra !== 0) {
17006 dist -= base_dist[code];
17007 send_bits(s, dist, extra); /* send the extra distance bits */
17008 }
17009 } /* literal or match pair ? */
17010
17011 /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
17012 //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
17013 // "pendingBuf overflow");
17014
17015 } while (lx < s.last_lit);
17016 }
17017
17018 send_code(s, END_BLOCK, ltree);
17019}
17020
17021
17022/* ===========================================================================
17023 * Construct one Huffman tree and assigns the code bit strings and lengths.
17024 * Update the total bit length for the current block.
17025 * IN assertion: the field freq is set for all tree elements.
17026 * OUT assertions: the fields len and code are set to the optimal bit length
17027 * and corresponding code. The length opt_len is updated; static_len is
17028 * also updated if stree is not null. The field max_code is set.
17029 */
17030function build_tree(s, desc)
17031// deflate_state *s;
17032// tree_desc *desc; /* the tree descriptor */
17033{
17034 var tree = desc.dyn_tree;
17035 var stree = desc.stat_desc.static_tree;
17036 var has_stree = desc.stat_desc.has_stree;
17037 var elems = desc.stat_desc.elems;
17038 var n, m; /* iterate over heap elements */
17039 var max_code = -1; /* largest code with non zero frequency */
17040 var node; /* new node being created */
17041
17042 /* Construct the initial heap, with least frequent element in
17043 * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
17044 * heap[0] is not used.
17045 */
17046 s.heap_len = 0;
17047 s.heap_max = HEAP_SIZE;
17048
17049 for (n = 0; n < elems; n++) {
17050 if (tree[n * 2]/*.Freq*/ !== 0) {
17051 s.heap[++s.heap_len] = max_code = n;
17052 s.depth[n] = 0;
17053
17054 } else {
17055 tree[n * 2 + 1]/*.Len*/ = 0;
17056 }
17057 }
17058
17059 /* The pkzip format requires that at least one distance code exists,
17060 * and that at least one bit should be sent even if there is only one
17061 * possible code. So to avoid special checks later on we force at least
17062 * two codes of non zero frequency.
17063 */
17064 while (s.heap_len < 2) {
17065 node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);
17066 tree[node * 2]/*.Freq*/ = 1;
17067 s.depth[node] = 0;
17068 s.opt_len--;
17069
17070 if (has_stree) {
17071 s.static_len -= stree[node * 2 + 1]/*.Len*/;
17072 }
17073 /* node is 0 or 1 so it does not have extra bits */
17074 }
17075 desc.max_code = max_code;
17076
17077 /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
17078 * establish sub-heaps of increasing lengths:
17079 */
17080 for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }
17081
17082 /* Construct the Huffman tree by repeatedly combining the least two
17083 * frequent nodes.
17084 */
17085 node = elems; /* next internal node of the tree */
17086 do {
17087 //pqremove(s, tree, n); /* n = node of least frequency */
17088 /*** pqremove ***/
17089 n = s.heap[1/*SMALLEST*/];
17090 s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];
17091 pqdownheap(s, tree, 1/*SMALLEST*/);
17092 /***/
17093
17094 m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */
17095
17096 s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */
17097 s.heap[--s.heap_max] = m;
17098
17099 /* Create a new node father of n and m */
17100 tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;
17101 s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;
17102 tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;
17103
17104 /* and insert the new node in the heap */
17105 s.heap[1/*SMALLEST*/] = node++;
17106 pqdownheap(s, tree, 1/*SMALLEST*/);
17107
17108 } while (s.heap_len >= 2);
17109
17110 s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];
17111
17112 /* At this point, the fields freq and dad are set. We can now
17113 * generate the bit lengths.
17114 */
17115 gen_bitlen(s, desc);
17116
17117 /* The field len is now set, we can generate the bit codes */
17118 gen_codes(tree, max_code, s.bl_count);
17119}
17120
17121
17122/* ===========================================================================
17123 * Scan a literal or distance tree to determine the frequencies of the codes
17124 * in the bit length tree.
17125 */
17126function scan_tree(s, tree, max_code)
17127// deflate_state *s;
17128// ct_data *tree; /* the tree to be scanned */
17129// int max_code; /* and its largest code of non zero frequency */
17130{
17131 var n; /* iterates over all tree elements */
17132 var prevlen = -1; /* last emitted length */
17133 var curlen; /* length of current code */
17134
17135 var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */
17136
17137 var count = 0; /* repeat count of the current code */
17138 var max_count = 7; /* max repeat count */
17139 var min_count = 4; /* min repeat count */
17140
17141 if (nextlen === 0) {
17142 max_count = 138;
17143 min_count = 3;
17144 }
17145 tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */
17146
17147 for (n = 0; n <= max_code; n++) {
17148 curlen = nextlen;
17149 nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;
17150
17151 if (++count < max_count && curlen === nextlen) {
17152 continue;
17153
17154 } else if (count < min_count) {
17155 s.bl_tree[curlen * 2]/*.Freq*/ += count;
17156
17157 } else if (curlen !== 0) {
17158
17159 if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }
17160 s.bl_tree[REP_3_6 * 2]/*.Freq*/++;
17161
17162 } else if (count <= 10) {
17163 s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;
17164
17165 } else {
17166 s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;
17167 }
17168
17169 count = 0;
17170 prevlen = curlen;
17171
17172 if (nextlen === 0) {
17173 max_count = 138;
17174 min_count = 3;
17175
17176 } else if (curlen === nextlen) {
17177 max_count = 6;
17178 min_count = 3;
17179
17180 } else {
17181 max_count = 7;
17182 min_count = 4;
17183 }
17184 }
17185}
17186
17187
17188/* ===========================================================================
17189 * Send a literal or distance tree in compressed form, using the codes in
17190 * bl_tree.
17191 */
17192function send_tree(s, tree, max_code)
17193// deflate_state *s;
17194// ct_data *tree; /* the tree to be scanned */
17195// int max_code; /* and its largest code of non zero frequency */
17196{
17197 var n; /* iterates over all tree elements */
17198 var prevlen = -1; /* last emitted length */
17199 var curlen; /* length of current code */
17200
17201 var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */
17202
17203 var count = 0; /* repeat count of the current code */
17204 var max_count = 7; /* max repeat count */
17205 var min_count = 4; /* min repeat count */
17206
17207 /* tree[max_code+1].Len = -1; */ /* guard already set */
17208 if (nextlen === 0) {
17209 max_count = 138;
17210 min_count = 3;
17211 }
17212
17213 for (n = 0; n <= max_code; n++) {
17214 curlen = nextlen;
17215 nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;
17216
17217 if (++count < max_count && curlen === nextlen) {
17218 continue;
17219
17220 } else if (count < min_count) {
17221 do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);
17222
17223 } else if (curlen !== 0) {
17224 if (curlen !== prevlen) {
17225 send_code(s, curlen, s.bl_tree);
17226 count--;
17227 }
17228 //Assert(count >= 3 && count <= 6, " 3_6?");
17229 send_code(s, REP_3_6, s.bl_tree);
17230 send_bits(s, count - 3, 2);
17231
17232 } else if (count <= 10) {
17233 send_code(s, REPZ_3_10, s.bl_tree);
17234 send_bits(s, count - 3, 3);
17235
17236 } else {
17237 send_code(s, REPZ_11_138, s.bl_tree);
17238 send_bits(s, count - 11, 7);
17239 }
17240
17241 count = 0;
17242 prevlen = curlen;
17243 if (nextlen === 0) {
17244 max_count = 138;
17245 min_count = 3;
17246
17247 } else if (curlen === nextlen) {
17248 max_count = 6;
17249 min_count = 3;
17250
17251 } else {
17252 max_count = 7;
17253 min_count = 4;
17254 }
17255 }
17256}
17257
17258
17259/* ===========================================================================
17260 * Construct the Huffman tree for the bit lengths and return the index in
17261 * bl_order of the last bit length code to send.
17262 */
17263function build_bl_tree(s) {
17264 var max_blindex; /* index of last bit length code of non zero freq */
17265
17266 /* Determine the bit length frequencies for literal and distance trees */
17267 scan_tree(s, s.dyn_ltree, s.l_desc.max_code);
17268 scan_tree(s, s.dyn_dtree, s.d_desc.max_code);
17269
17270 /* Build the bit length tree: */
17271 build_tree(s, s.bl_desc);
17272 /* opt_len now includes the length of the tree representations, except
17273 * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
17274 */
17275
17276 /* Determine the number of bit length codes to send. The pkzip format
17277 * requires that at least 4 bit length codes be sent. (appnote.txt says
17278 * 3 but the actual value used is 4.)
17279 */
17280 for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {
17281 if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {
17282 break;
17283 }
17284 }
17285 /* Update opt_len to include the bit length tree and counts */
17286 s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;
17287 //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
17288 // s->opt_len, s->static_len));
17289
17290 return max_blindex;
17291}
17292
17293
17294/* ===========================================================================
17295 * Send the header for a block using dynamic Huffman trees: the counts, the
17296 * lengths of the bit length codes, the literal tree and the distance tree.
17297 * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
17298 */
17299function send_all_trees(s, lcodes, dcodes, blcodes)
17300// deflate_state *s;
17301// int lcodes, dcodes, blcodes; /* number of codes for each tree */
17302{
17303 var rank; /* index in bl_order */
17304
17305 //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
17306 //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
17307 // "too many codes");
17308 //Tracev((stderr, "\nbl counts: "));
17309 send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */
17310 send_bits(s, dcodes - 1, 5);
17311 send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */
17312 for (rank = 0; rank < blcodes; rank++) {
17313 //Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
17314 send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);
17315 }
17316 //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
17317
17318 send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */
17319 //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
17320
17321 send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */
17322 //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
17323}
17324
17325
17326/* ===========================================================================
17327 * Check if the data type is TEXT or BINARY, using the following algorithm:
17328 * - TEXT if the two conditions below are satisfied:
17329 * a) There are no non-portable control characters belonging to the
17330 * "black list" (0..6, 14..25, 28..31).
17331 * b) There is at least one printable character belonging to the
17332 * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
17333 * - BINARY otherwise.
17334 * - The following partially-portable control characters form a
17335 * "gray list" that is ignored in this detection algorithm:
17336 * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
17337 * IN assertion: the fields Freq of dyn_ltree are set.
17338 */
17339function detect_data_type(s) {
17340 /* black_mask is the bit mask of black-listed bytes
17341 * set bits 0..6, 14..25, and 28..31
17342 * 0xf3ffc07f = binary 11110011111111111100000001111111
17343 */
17344 var black_mask = 0xf3ffc07f;
17345 var n;
17346
17347 /* Check for non-textual ("black-listed") bytes. */
17348 for (n = 0; n <= 31; n++, black_mask >>>= 1) {
17349 if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {
17350 return Z_BINARY;
17351 }
17352 }
17353
17354 /* Check for textual ("white-listed") bytes. */
17355 if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||
17356 s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {
17357 return Z_TEXT;
17358 }
17359 for (n = 32; n < LITERALS; n++) {
17360 if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {
17361 return Z_TEXT;
17362 }
17363 }
17364
17365 /* There are no "black-listed" or "white-listed" bytes:
17366 * this stream either is empty or has tolerated ("gray-listed") bytes only.
17367 */
17368 return Z_BINARY;
17369}
17370
17371
17372var static_init_done = false;
17373
17374/* ===========================================================================
17375 * Initialize the tree data structures for a new zlib stream.
17376 */
17377function _tr_init(s)
17378{
17379
17380 if (!static_init_done) {
17381 tr_static_init();
17382 static_init_done = true;
17383 }
17384
17385 s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);
17386 s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);
17387 s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);
17388
17389 s.bi_buf = 0;
17390 s.bi_valid = 0;
17391
17392 /* Initialize the first block of the first file: */
17393 init_block(s);
17394}
17395
17396
17397/* ===========================================================================
17398 * Send a stored block
17399 */
17400function _tr_stored_block(s, buf, stored_len, last)
17401//DeflateState *s;
17402//charf *buf; /* input block */
17403//ulg stored_len; /* length of input block */
17404//int last; /* one if this is the last block for a file */
17405{
17406 send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */
17407 copy_block(s, buf, stored_len, true); /* with header */
17408}
17409
17410
17411/* ===========================================================================
17412 * Send one empty static block to give enough lookahead for inflate.
17413 * This takes 10 bits, of which 7 may remain in the bit buffer.
17414 */
17415function _tr_align(s) {
17416 send_bits(s, STATIC_TREES << 1, 3);
17417 send_code(s, END_BLOCK, static_ltree);
17418 bi_flush(s);
17419}
17420
17421
17422/* ===========================================================================
17423 * Determine the best encoding for the current block: dynamic trees, static
17424 * trees or store, and output the encoded block to the zip file.
17425 */
17426function _tr_flush_block(s, buf, stored_len, last)
17427//DeflateState *s;
17428//charf *buf; /* input block, or NULL if too old */
17429//ulg stored_len; /* length of input block */
17430//int last; /* one if this is the last block for a file */
17431{
17432 var opt_lenb, static_lenb; /* opt_len and static_len in bytes */
17433 var max_blindex = 0; /* index of last bit length code of non zero freq */
17434
17435 /* Build the Huffman trees unless a stored block is forced */
17436 if (s.level > 0) {
17437
17438 /* Check if the file is binary or text */
17439 if (s.strm.data_type === Z_UNKNOWN) {
17440 s.strm.data_type = detect_data_type(s);
17441 }
17442
17443 /* Construct the literal and distance trees */
17444 build_tree(s, s.l_desc);
17445 // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
17446 // s->static_len));
17447
17448 build_tree(s, s.d_desc);
17449 // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
17450 // s->static_len));
17451 /* At this point, opt_len and static_len are the total bit lengths of
17452 * the compressed block data, excluding the tree representations.
17453 */
17454
17455 /* Build the bit length tree for the above two trees, and get the index
17456 * in bl_order of the last bit length code to send.
17457 */
17458 max_blindex = build_bl_tree(s);
17459
17460 /* Determine the best encoding. Compute the block lengths in bytes. */
17461 opt_lenb = (s.opt_len + 3 + 7) >>> 3;
17462 static_lenb = (s.static_len + 3 + 7) >>> 3;
17463
17464 // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
17465 // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
17466 // s->last_lit));
17467
17468 if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }
17469
17470 } else {
17471 // Assert(buf != (char*)0, "lost buf");
17472 opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
17473 }
17474
17475 if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {
17476 /* 4: two words for the lengths */
17477
17478 /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
17479 * Otherwise we can't have processed more than WSIZE input bytes since
17480 * the last block flush, because compression would have been
17481 * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
17482 * transform a block into a stored block.
17483 */
17484 _tr_stored_block(s, buf, stored_len, last);
17485
17486 } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {
17487
17488 send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);
17489 compress_block(s, static_ltree, static_dtree);
17490
17491 } else {
17492 send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);
17493 send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);
17494 compress_block(s, s.dyn_ltree, s.dyn_dtree);
17495 }
17496 // Assert (s->compressed_len == s->bits_sent, "bad compressed size");
17497 /* The above check is made mod 2^32, for files larger than 512 MB
17498 * and uLong implemented on 32 bits.
17499 */
17500 init_block(s);
17501
17502 if (last) {
17503 bi_windup(s);
17504 }
17505 // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
17506 // s->compressed_len-7*last));
17507}
17508
17509/* ===========================================================================
17510 * Save the match info and tally the frequency counts. Return true if
17511 * the current block must be flushed.
17512 */
17513function _tr_tally(s, dist, lc)
17514// deflate_state *s;
17515// unsigned dist; /* distance of matched string */
17516// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */
17517{
17518 //var out_length, in_length, dcode;
17519
17520 s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;
17521 s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;
17522
17523 s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;
17524 s.last_lit++;
17525
17526 if (dist === 0) {
17527 /* lc is the unmatched char */
17528 s.dyn_ltree[lc * 2]/*.Freq*/++;
17529 } else {
17530 s.matches++;
17531 /* Here, lc is the match length - MIN_MATCH */
17532 dist--; /* dist = match distance - 1 */
17533 //Assert((ush)dist < (ush)MAX_DIST(s) &&
17534 // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
17535 // (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match");
17536
17537 s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;
17538 s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;
17539 }
17540
17541// (!) This block is disabled in zlib defaults,
17542// don't enable it for binary compatibility
17543
17544//#ifdef TRUNCATE_BLOCK
17545// /* Try to guess if it is profitable to stop the current block here */
17546// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {
17547// /* Compute an upper bound for the compressed length */
17548// out_length = s.last_lit*8;
17549// in_length = s.strstart - s.block_start;
17550//
17551// for (dcode = 0; dcode < D_CODES; dcode++) {
17552// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);
17553// }
17554// out_length >>>= 3;
17555// //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
17556// // s->last_lit, in_length, out_length,
17557// // 100L - out_length*100L/in_length));
17558// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {
17559// return true;
17560// }
17561// }
17562//#endif
17563
17564 return (s.last_lit === s.lit_bufsize - 1);
17565 /* We avoid equality with lit_bufsize because of wraparound at 64K
17566 * on 16 bit machines and because stored blocks are restricted to
17567 * 64K-1 bytes.
17568 */
17569}
17570
17571exports._tr_init = _tr_init;
17572exports._tr_stored_block = _tr_stored_block;
17573exports._tr_flush_block = _tr_flush_block;
17574exports._tr_tally = _tr_tally;
17575exports._tr_align = _tr_align;
17576
17577},{"../utils/common":102}],112:[function(require,module,exports){
17578'use strict';
17579
17580// (C) 1995-2013 Jean-loup Gailly and Mark Adler
17581// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
17582//
17583// This software is provided 'as-is', without any express or implied
17584// warranty. In no event will the authors be held liable for any damages
17585// arising from the use of this software.
17586//
17587// Permission is granted to anyone to use this software for any purpose,
17588// including commercial applications, and to alter it and redistribute it
17589// freely, subject to the following restrictions:
17590//
17591// 1. The origin of this software must not be misrepresented; you must not
17592// claim that you wrote the original software. If you use this software
17593// in a product, an acknowledgment in the product documentation would be
17594// appreciated but is not required.
17595// 2. Altered source versions must be plainly marked as such, and must not be
17596// misrepresented as being the original software.
17597// 3. This notice may not be removed or altered from any source distribution.
17598
17599function ZStream() {
17600 /* next input byte */
17601 this.input = null; // JS specific, because we have no pointers
17602 this.next_in = 0;
17603 /* number of bytes available at input */
17604 this.avail_in = 0;
17605 /* total number of input bytes read so far */
17606 this.total_in = 0;
17607 /* next output byte should be put there */
17608 this.output = null; // JS specific, because we have no pointers
17609 this.next_out = 0;
17610 /* remaining free space at output */
17611 this.avail_out = 0;
17612 /* total number of bytes output so far */
17613 this.total_out = 0;
17614 /* last error message, NULL if no error */
17615 this.msg = ''/*Z_NULL*/;
17616 /* not visible by applications */
17617 this.state = null;
17618 /* best guess about the data type: binary or text */
17619 this.data_type = 2/*Z_UNKNOWN*/;
17620 /* adler32 value of the uncompressed data */
17621 this.adler = 0;
17622}
17623
17624module.exports = ZStream;
17625
17626},{}],113:[function(require,module,exports){
17627arguments[4][99][0].apply(exports,arguments)
17628},{"dup":99}],114:[function(require,module,exports){
17629(function (Buffer){(function (){
17630/*!
17631 * The buffer module from node.js, for the browser.
17632 *
17633 * @author Feross Aboukhadijeh <https://feross.org>
17634 * @license MIT
17635 */
17636/* eslint-disable no-proto */
17637
17638'use strict'
17639
17640var base64 = require('base64-js')
17641var ieee754 = require('ieee754')
17642
17643exports.Buffer = Buffer
17644exports.SlowBuffer = SlowBuffer
17645exports.INSPECT_MAX_BYTES = 50
17646
17647var K_MAX_LENGTH = 0x7fffffff
17648exports.kMaxLength = K_MAX_LENGTH
17649
17650/**
17651 * If `Buffer.TYPED_ARRAY_SUPPORT`:
17652 * === true Use Uint8Array implementation (fastest)
17653 * === false Print warning and recommend using `buffer` v4.x which has an Object
17654 * implementation (most compatible, even IE6)
17655 *
17656 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
17657 * Opera 11.6+, iOS 4.2+.
17658 *
17659 * We report that the browser does not support typed arrays if the are not subclassable
17660 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
17661 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
17662 * for __proto__ and has a buggy typed array implementation.
17663 */
17664Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
17665
17666if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
17667 typeof console.error === 'function') {
17668 console.error(
17669 'This browser lacks typed array (Uint8Array) support which is required by ' +
17670 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
17671 )
17672}
17673
17674function typedArraySupport () {
17675 // Can typed array instances can be augmented?
17676 try {
17677 var arr = new Uint8Array(1)
17678 arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } }
17679 return arr.foo() === 42
17680 } catch (e) {
17681 return false
17682 }
17683}
17684
17685Object.defineProperty(Buffer.prototype, 'parent', {
17686 enumerable: true,
17687 get: function () {
17688 if (!Buffer.isBuffer(this)) return undefined
17689 return this.buffer
17690 }
17691})
17692
17693Object.defineProperty(Buffer.prototype, 'offset', {
17694 enumerable: true,
17695 get: function () {
17696 if (!Buffer.isBuffer(this)) return undefined
17697 return this.byteOffset
17698 }
17699})
17700
17701function createBuffer (length) {
17702 if (length > K_MAX_LENGTH) {
17703 throw new RangeError('The value "' + length + '" is invalid for option "size"')
17704 }
17705 // Return an augmented `Uint8Array` instance
17706 var buf = new Uint8Array(length)
17707 buf.__proto__ = Buffer.prototype
17708 return buf
17709}
17710
17711/**
17712 * The Buffer constructor returns instances of `Uint8Array` that have their
17713 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
17714 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
17715 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
17716 * returns a single octet.
17717 *
17718 * The `Uint8Array` prototype remains unmodified.
17719 */
17720
17721function Buffer (arg, encodingOrOffset, length) {
17722 // Common case.
17723 if (typeof arg === 'number') {
17724 if (typeof encodingOrOffset === 'string') {
17725 throw new TypeError(
17726 'The "string" argument must be of type string. Received type number'
17727 )
17728 }
17729 return allocUnsafe(arg)
17730 }
17731 return from(arg, encodingOrOffset, length)
17732}
17733
17734// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
17735if (typeof Symbol !== 'undefined' && Symbol.species != null &&
17736 Buffer[Symbol.species] === Buffer) {
17737 Object.defineProperty(Buffer, Symbol.species, {
17738 value: null,
17739 configurable: true,
17740 enumerable: false,
17741 writable: false
17742 })
17743}
17744
17745Buffer.poolSize = 8192 // not used by this implementation
17746
17747function from (value, encodingOrOffset, length) {
17748 if (typeof value === 'string') {
17749 return fromString(value, encodingOrOffset)
17750 }
17751
17752 if (ArrayBuffer.isView(value)) {
17753 return fromArrayLike(value)
17754 }
17755
17756 if (value == null) {
17757 throw TypeError(
17758 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
17759 'or Array-like Object. Received type ' + (typeof value)
17760 )
17761 }
17762
17763 if (isInstance(value, ArrayBuffer) ||
17764 (value && isInstance(value.buffer, ArrayBuffer))) {
17765 return fromArrayBuffer(value, encodingOrOffset, length)
17766 }
17767
17768 if (typeof value === 'number') {
17769 throw new TypeError(
17770 'The "value" argument must not be of type number. Received type number'
17771 )
17772 }
17773
17774 var valueOf = value.valueOf && value.valueOf()
17775 if (valueOf != null && valueOf !== value) {
17776 return Buffer.from(valueOf, encodingOrOffset, length)
17777 }
17778
17779 var b = fromObject(value)
17780 if (b) return b
17781
17782 if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&
17783 typeof value[Symbol.toPrimitive] === 'function') {
17784 return Buffer.from(
17785 value[Symbol.toPrimitive]('string'), encodingOrOffset, length
17786 )
17787 }
17788
17789 throw new TypeError(
17790 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
17791 'or Array-like Object. Received type ' + (typeof value)
17792 )
17793}
17794
17795/**
17796 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
17797 * if value is a number.
17798 * Buffer.from(str[, encoding])
17799 * Buffer.from(array)
17800 * Buffer.from(buffer)
17801 * Buffer.from(arrayBuffer[, byteOffset[, length]])
17802 **/
17803Buffer.from = function (value, encodingOrOffset, length) {
17804 return from(value, encodingOrOffset, length)
17805}
17806
17807// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
17808// https://github.com/feross/buffer/pull/148
17809Buffer.prototype.__proto__ = Uint8Array.prototype
17810Buffer.__proto__ = Uint8Array
17811
17812function assertSize (size) {
17813 if (typeof size !== 'number') {
17814 throw new TypeError('"size" argument must be of type number')
17815 } else if (size < 0) {
17816 throw new RangeError('The value "' + size + '" is invalid for option "size"')
17817 }
17818}
17819
17820function alloc (size, fill, encoding) {
17821 assertSize(size)
17822 if (size <= 0) {
17823 return createBuffer(size)
17824 }
17825 if (fill !== undefined) {
17826 // Only pay attention to encoding if it's a string. This
17827 // prevents accidentally sending in a number that would
17828 // be interpretted as a start offset.
17829 return typeof encoding === 'string'
17830 ? createBuffer(size).fill(fill, encoding)
17831 : createBuffer(size).fill(fill)
17832 }
17833 return createBuffer(size)
17834}
17835
17836/**
17837 * Creates a new filled Buffer instance.
17838 * alloc(size[, fill[, encoding]])
17839 **/
17840Buffer.alloc = function (size, fill, encoding) {
17841 return alloc(size, fill, encoding)
17842}
17843
17844function allocUnsafe (size) {
17845 assertSize(size)
17846 return createBuffer(size < 0 ? 0 : checked(size) | 0)
17847}
17848
17849/**
17850 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
17851 * */
17852Buffer.allocUnsafe = function (size) {
17853 return allocUnsafe(size)
17854}
17855/**
17856 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
17857 */
17858Buffer.allocUnsafeSlow = function (size) {
17859 return allocUnsafe(size)
17860}
17861
17862function fromString (string, encoding) {
17863 if (typeof encoding !== 'string' || encoding === '') {
17864 encoding = 'utf8'
17865 }
17866
17867 if (!Buffer.isEncoding(encoding)) {
17868 throw new TypeError('Unknown encoding: ' + encoding)
17869 }
17870
17871 var length = byteLength(string, encoding) | 0
17872 var buf = createBuffer(length)
17873
17874 var actual = buf.write(string, encoding)
17875
17876 if (actual !== length) {
17877 // Writing a hex string, for example, that contains invalid characters will
17878 // cause everything after the first invalid character to be ignored. (e.g.
17879 // 'abxxcd' will be treated as 'ab')
17880 buf = buf.slice(0, actual)
17881 }
17882
17883 return buf
17884}
17885
17886function fromArrayLike (array) {
17887 var length = array.length < 0 ? 0 : checked(array.length) | 0
17888 var buf = createBuffer(length)
17889 for (var i = 0; i < length; i += 1) {
17890 buf[i] = array[i] & 255
17891 }
17892 return buf
17893}
17894
17895function fromArrayBuffer (array, byteOffset, length) {
17896 if (byteOffset < 0 || array.byteLength < byteOffset) {
17897 throw new RangeError('"offset" is outside of buffer bounds')
17898 }
17899
17900 if (array.byteLength < byteOffset + (length || 0)) {
17901 throw new RangeError('"length" is outside of buffer bounds')
17902 }
17903
17904 var buf
17905 if (byteOffset === undefined && length === undefined) {
17906 buf = new Uint8Array(array)
17907 } else if (length === undefined) {
17908 buf = new Uint8Array(array, byteOffset)
17909 } else {
17910 buf = new Uint8Array(array, byteOffset, length)
17911 }
17912
17913 // Return an augmented `Uint8Array` instance
17914 buf.__proto__ = Buffer.prototype
17915 return buf
17916}
17917
17918function fromObject (obj) {
17919 if (Buffer.isBuffer(obj)) {
17920 var len = checked(obj.length) | 0
17921 var buf = createBuffer(len)
17922
17923 if (buf.length === 0) {
17924 return buf
17925 }
17926
17927 obj.copy(buf, 0, 0, len)
17928 return buf
17929 }
17930
17931 if (obj.length !== undefined) {
17932 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
17933 return createBuffer(0)
17934 }
17935 return fromArrayLike(obj)
17936 }
17937
17938 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
17939 return fromArrayLike(obj.data)
17940 }
17941}
17942
17943function checked (length) {
17944 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
17945 // length is NaN (which is otherwise coerced to zero.)
17946 if (length >= K_MAX_LENGTH) {
17947 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
17948 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
17949 }
17950 return length | 0
17951}
17952
17953function SlowBuffer (length) {
17954 if (+length != length) { // eslint-disable-line eqeqeq
17955 length = 0
17956 }
17957 return Buffer.alloc(+length)
17958}
17959
17960Buffer.isBuffer = function isBuffer (b) {
17961 return b != null && b._isBuffer === true &&
17962 b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false
17963}
17964
17965Buffer.compare = function compare (a, b) {
17966 if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)
17967 if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)
17968 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
17969 throw new TypeError(
17970 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'
17971 )
17972 }
17973
17974 if (a === b) return 0
17975
17976 var x = a.length
17977 var y = b.length
17978
17979 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
17980 if (a[i] !== b[i]) {
17981 x = a[i]
17982 y = b[i]
17983 break
17984 }
17985 }
17986
17987 if (x < y) return -1
17988 if (y < x) return 1
17989 return 0
17990}
17991
17992Buffer.isEncoding = function isEncoding (encoding) {
17993 switch (String(encoding).toLowerCase()) {
17994 case 'hex':
17995 case 'utf8':
17996 case 'utf-8':
17997 case 'ascii':
17998 case 'latin1':
17999 case 'binary':
18000 case 'base64':
18001 case 'ucs2':
18002 case 'ucs-2':
18003 case 'utf16le':
18004 case 'utf-16le':
18005 return true
18006 default:
18007 return false
18008 }
18009}
18010
18011Buffer.concat = function concat (list, length) {
18012 if (!Array.isArray(list)) {
18013 throw new TypeError('"list" argument must be an Array of Buffers')
18014 }
18015
18016 if (list.length === 0) {
18017 return Buffer.alloc(0)
18018 }
18019
18020 var i
18021 if (length === undefined) {
18022 length = 0
18023 for (i = 0; i < list.length; ++i) {
18024 length += list[i].length
18025 }
18026 }
18027
18028 var buffer = Buffer.allocUnsafe(length)
18029 var pos = 0
18030 for (i = 0; i < list.length; ++i) {
18031 var buf = list[i]
18032 if (isInstance(buf, Uint8Array)) {
18033 buf = Buffer.from(buf)
18034 }
18035 if (!Buffer.isBuffer(buf)) {
18036 throw new TypeError('"list" argument must be an Array of Buffers')
18037 }
18038 buf.copy(buffer, pos)
18039 pos += buf.length
18040 }
18041 return buffer
18042}
18043
18044function byteLength (string, encoding) {
18045 if (Buffer.isBuffer(string)) {
18046 return string.length
18047 }
18048 if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {
18049 return string.byteLength
18050 }
18051 if (typeof string !== 'string') {
18052 throw new TypeError(
18053 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' +
18054 'Received type ' + typeof string
18055 )
18056 }
18057
18058 var len = string.length
18059 var mustMatch = (arguments.length > 2 && arguments[2] === true)
18060 if (!mustMatch && len === 0) return 0
18061
18062 // Use a for loop to avoid recursion
18063 var loweredCase = false
18064 for (;;) {
18065 switch (encoding) {
18066 case 'ascii':
18067 case 'latin1':
18068 case 'binary':
18069 return len
18070 case 'utf8':
18071 case 'utf-8':
18072 return utf8ToBytes(string).length
18073 case 'ucs2':
18074 case 'ucs-2':
18075 case 'utf16le':
18076 case 'utf-16le':
18077 return len * 2
18078 case 'hex':
18079 return len >>> 1
18080 case 'base64':
18081 return base64ToBytes(string).length
18082 default:
18083 if (loweredCase) {
18084 return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8
18085 }
18086 encoding = ('' + encoding).toLowerCase()
18087 loweredCase = true
18088 }
18089 }
18090}
18091Buffer.byteLength = byteLength
18092
18093function slowToString (encoding, start, end) {
18094 var loweredCase = false
18095
18096 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
18097 // property of a typed array.
18098
18099 // This behaves neither like String nor Uint8Array in that we set start/end
18100 // to their upper/lower bounds if the value passed is out of range.
18101 // undefined is handled specially as per ECMA-262 6th Edition,
18102 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
18103 if (start === undefined || start < 0) {
18104 start = 0
18105 }
18106 // Return early if start > this.length. Done here to prevent potential uint32
18107 // coercion fail below.
18108 if (start > this.length) {
18109 return ''
18110 }
18111
18112 if (end === undefined || end > this.length) {
18113 end = this.length
18114 }
18115
18116 if (end <= 0) {
18117 return ''
18118 }
18119
18120 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
18121 end >>>= 0
18122 start >>>= 0
18123
18124 if (end <= start) {
18125 return ''
18126 }
18127
18128 if (!encoding) encoding = 'utf8'
18129
18130 while (true) {
18131 switch (encoding) {
18132 case 'hex':
18133 return hexSlice(this, start, end)
18134
18135 case 'utf8':
18136 case 'utf-8':
18137 return utf8Slice(this, start, end)
18138
18139 case 'ascii':
18140 return asciiSlice(this, start, end)
18141
18142 case 'latin1':
18143 case 'binary':
18144 return latin1Slice(this, start, end)
18145
18146 case 'base64':
18147 return base64Slice(this, start, end)
18148
18149 case 'ucs2':
18150 case 'ucs-2':
18151 case 'utf16le':
18152 case 'utf-16le':
18153 return utf16leSlice(this, start, end)
18154
18155 default:
18156 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
18157 encoding = (encoding + '').toLowerCase()
18158 loweredCase = true
18159 }
18160 }
18161}
18162
18163// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
18164// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
18165// reliably in a browserify context because there could be multiple different
18166// copies of the 'buffer' package in use. This method works even for Buffer
18167// instances that were created from another copy of the `buffer` package.
18168// See: https://github.com/feross/buffer/issues/154
18169Buffer.prototype._isBuffer = true
18170
18171function swap (b, n, m) {
18172 var i = b[n]
18173 b[n] = b[m]
18174 b[m] = i
18175}
18176
18177Buffer.prototype.swap16 = function swap16 () {
18178 var len = this.length
18179 if (len % 2 !== 0) {
18180 throw new RangeError('Buffer size must be a multiple of 16-bits')
18181 }
18182 for (var i = 0; i < len; i += 2) {
18183 swap(this, i, i + 1)
18184 }
18185 return this
18186}
18187
18188Buffer.prototype.swap32 = function swap32 () {
18189 var len = this.length
18190 if (len % 4 !== 0) {
18191 throw new RangeError('Buffer size must be a multiple of 32-bits')
18192 }
18193 for (var i = 0; i < len; i += 4) {
18194 swap(this, i, i + 3)
18195 swap(this, i + 1, i + 2)
18196 }
18197 return this
18198}
18199
18200Buffer.prototype.swap64 = function swap64 () {
18201 var len = this.length
18202 if (len % 8 !== 0) {
18203 throw new RangeError('Buffer size must be a multiple of 64-bits')
18204 }
18205 for (var i = 0; i < len; i += 8) {
18206 swap(this, i, i + 7)
18207 swap(this, i + 1, i + 6)
18208 swap(this, i + 2, i + 5)
18209 swap(this, i + 3, i + 4)
18210 }
18211 return this
18212}
18213
18214Buffer.prototype.toString = function toString () {
18215 var length = this.length
18216 if (length === 0) return ''
18217 if (arguments.length === 0) return utf8Slice(this, 0, length)
18218 return slowToString.apply(this, arguments)
18219}
18220
18221Buffer.prototype.toLocaleString = Buffer.prototype.toString
18222
18223Buffer.prototype.equals = function equals (b) {
18224 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
18225 if (this === b) return true
18226 return Buffer.compare(this, b) === 0
18227}
18228
18229Buffer.prototype.inspect = function inspect () {
18230 var str = ''
18231 var max = exports.INSPECT_MAX_BYTES
18232 str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()
18233 if (this.length > max) str += ' ... '
18234 return '<Buffer ' + str + '>'
18235}
18236
18237Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
18238 if (isInstance(target, Uint8Array)) {
18239 target = Buffer.from(target, target.offset, target.byteLength)
18240 }
18241 if (!Buffer.isBuffer(target)) {
18242 throw new TypeError(
18243 'The "target" argument must be one of type Buffer or Uint8Array. ' +
18244 'Received type ' + (typeof target)
18245 )
18246 }
18247
18248 if (start === undefined) {
18249 start = 0
18250 }
18251 if (end === undefined) {
18252 end = target ? target.length : 0
18253 }
18254 if (thisStart === undefined) {
18255 thisStart = 0
18256 }
18257 if (thisEnd === undefined) {
18258 thisEnd = this.length
18259 }
18260
18261 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
18262 throw new RangeError('out of range index')
18263 }
18264
18265 if (thisStart >= thisEnd && start >= end) {
18266 return 0
18267 }
18268 if (thisStart >= thisEnd) {
18269 return -1
18270 }
18271 if (start >= end) {
18272 return 1
18273 }
18274
18275 start >>>= 0
18276 end >>>= 0
18277 thisStart >>>= 0
18278 thisEnd >>>= 0
18279
18280 if (this === target) return 0
18281
18282 var x = thisEnd - thisStart
18283 var y = end - start
18284 var len = Math.min(x, y)
18285
18286 var thisCopy = this.slice(thisStart, thisEnd)
18287 var targetCopy = target.slice(start, end)
18288
18289 for (var i = 0; i < len; ++i) {
18290 if (thisCopy[i] !== targetCopy[i]) {
18291 x = thisCopy[i]
18292 y = targetCopy[i]
18293 break
18294 }
18295 }
18296
18297 if (x < y) return -1
18298 if (y < x) return 1
18299 return 0
18300}
18301
18302// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
18303// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
18304//
18305// Arguments:
18306// - buffer - a Buffer to search
18307// - val - a string, Buffer, or number
18308// - byteOffset - an index into `buffer`; will be clamped to an int32
18309// - encoding - an optional encoding, relevant is val is a string
18310// - dir - true for indexOf, false for lastIndexOf
18311function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
18312 // Empty buffer means no match
18313 if (buffer.length === 0) return -1
18314
18315 // Normalize byteOffset
18316 if (typeof byteOffset === 'string') {
18317 encoding = byteOffset
18318 byteOffset = 0
18319 } else if (byteOffset > 0x7fffffff) {
18320 byteOffset = 0x7fffffff
18321 } else if (byteOffset < -0x80000000) {
18322 byteOffset = -0x80000000
18323 }
18324 byteOffset = +byteOffset // Coerce to Number.
18325 if (numberIsNaN(byteOffset)) {
18326 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
18327 byteOffset = dir ? 0 : (buffer.length - 1)
18328 }
18329
18330 // Normalize byteOffset: negative offsets start from the end of the buffer
18331 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
18332 if (byteOffset >= buffer.length) {
18333 if (dir) return -1
18334 else byteOffset = buffer.length - 1
18335 } else if (byteOffset < 0) {
18336 if (dir) byteOffset = 0
18337 else return -1
18338 }
18339
18340 // Normalize val
18341 if (typeof val === 'string') {
18342 val = Buffer.from(val, encoding)
18343 }
18344
18345 // Finally, search either indexOf (if dir is true) or lastIndexOf
18346 if (Buffer.isBuffer(val)) {
18347 // Special case: looking for empty string/buffer always fails
18348 if (val.length === 0) {
18349 return -1
18350 }
18351 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
18352 } else if (typeof val === 'number') {
18353 val = val & 0xFF // Search for a byte value [0-255]
18354 if (typeof Uint8Array.prototype.indexOf === 'function') {
18355 if (dir) {
18356 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
18357 } else {
18358 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
18359 }
18360 }
18361 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
18362 }
18363
18364 throw new TypeError('val must be string, number or Buffer')
18365}
18366
18367function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
18368 var indexSize = 1
18369 var arrLength = arr.length
18370 var valLength = val.length
18371
18372 if (encoding !== undefined) {
18373 encoding = String(encoding).toLowerCase()
18374 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
18375 encoding === 'utf16le' || encoding === 'utf-16le') {
18376 if (arr.length < 2 || val.length < 2) {
18377 return -1
18378 }
18379 indexSize = 2
18380 arrLength /= 2
18381 valLength /= 2
18382 byteOffset /= 2
18383 }
18384 }
18385
18386 function read (buf, i) {
18387 if (indexSize === 1) {
18388 return buf[i]
18389 } else {
18390 return buf.readUInt16BE(i * indexSize)
18391 }
18392 }
18393
18394 var i
18395 if (dir) {
18396 var foundIndex = -1
18397 for (i = byteOffset; i < arrLength; i++) {
18398 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
18399 if (foundIndex === -1) foundIndex = i
18400 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
18401 } else {
18402 if (foundIndex !== -1) i -= i - foundIndex
18403 foundIndex = -1
18404 }
18405 }
18406 } else {
18407 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
18408 for (i = byteOffset; i >= 0; i--) {
18409 var found = true
18410 for (var j = 0; j < valLength; j++) {
18411 if (read(arr, i + j) !== read(val, j)) {
18412 found = false
18413 break
18414 }
18415 }
18416 if (found) return i
18417 }
18418 }
18419
18420 return -1
18421}
18422
18423Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
18424 return this.indexOf(val, byteOffset, encoding) !== -1
18425}
18426
18427Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
18428 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
18429}
18430
18431Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
18432 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
18433}
18434
18435function hexWrite (buf, string, offset, length) {
18436 offset = Number(offset) || 0
18437 var remaining = buf.length - offset
18438 if (!length) {
18439 length = remaining
18440 } else {
18441 length = Number(length)
18442 if (length > remaining) {
18443 length = remaining
18444 }
18445 }
18446
18447 var strLen = string.length
18448
18449 if (length > strLen / 2) {
18450 length = strLen / 2
18451 }
18452 for (var i = 0; i < length; ++i) {
18453 var parsed = parseInt(string.substr(i * 2, 2), 16)
18454 if (numberIsNaN(parsed)) return i
18455 buf[offset + i] = parsed
18456 }
18457 return i
18458}
18459
18460function utf8Write (buf, string, offset, length) {
18461 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
18462}
18463
18464function asciiWrite (buf, string, offset, length) {
18465 return blitBuffer(asciiToBytes(string), buf, offset, length)
18466}
18467
18468function latin1Write (buf, string, offset, length) {
18469 return asciiWrite(buf, string, offset, length)
18470}
18471
18472function base64Write (buf, string, offset, length) {
18473 return blitBuffer(base64ToBytes(string), buf, offset, length)
18474}
18475
18476function ucs2Write (buf, string, offset, length) {
18477 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
18478}
18479
18480Buffer.prototype.write = function write (string, offset, length, encoding) {
18481 // Buffer#write(string)
18482 if (offset === undefined) {
18483 encoding = 'utf8'
18484 length = this.length
18485 offset = 0
18486 // Buffer#write(string, encoding)
18487 } else if (length === undefined && typeof offset === 'string') {
18488 encoding = offset
18489 length = this.length
18490 offset = 0
18491 // Buffer#write(string, offset[, length][, encoding])
18492 } else if (isFinite(offset)) {
18493 offset = offset >>> 0
18494 if (isFinite(length)) {
18495 length = length >>> 0
18496 if (encoding === undefined) encoding = 'utf8'
18497 } else {
18498 encoding = length
18499 length = undefined
18500 }
18501 } else {
18502 throw new Error(
18503 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
18504 )
18505 }
18506
18507 var remaining = this.length - offset
18508 if (length === undefined || length > remaining) length = remaining
18509
18510 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
18511 throw new RangeError('Attempt to write outside buffer bounds')
18512 }
18513
18514 if (!encoding) encoding = 'utf8'
18515
18516 var loweredCase = false
18517 for (;;) {
18518 switch (encoding) {
18519 case 'hex':
18520 return hexWrite(this, string, offset, length)
18521
18522 case 'utf8':
18523 case 'utf-8':
18524 return utf8Write(this, string, offset, length)
18525
18526 case 'ascii':
18527 return asciiWrite(this, string, offset, length)
18528
18529 case 'latin1':
18530 case 'binary':
18531 return latin1Write(this, string, offset, length)
18532
18533 case 'base64':
18534 // Warning: maxLength not taken into account in base64Write
18535 return base64Write(this, string, offset, length)
18536
18537 case 'ucs2':
18538 case 'ucs-2':
18539 case 'utf16le':
18540 case 'utf-16le':
18541 return ucs2Write(this, string, offset, length)
18542
18543 default:
18544 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
18545 encoding = ('' + encoding).toLowerCase()
18546 loweredCase = true
18547 }
18548 }
18549}
18550
18551Buffer.prototype.toJSON = function toJSON () {
18552 return {
18553 type: 'Buffer',
18554 data: Array.prototype.slice.call(this._arr || this, 0)
18555 }
18556}
18557
18558function base64Slice (buf, start, end) {
18559 if (start === 0 && end === buf.length) {
18560 return base64.fromByteArray(buf)
18561 } else {
18562 return base64.fromByteArray(buf.slice(start, end))
18563 }
18564}
18565
18566function utf8Slice (buf, start, end) {
18567 end = Math.min(buf.length, end)
18568 var res = []
18569
18570 var i = start
18571 while (i < end) {
18572 var firstByte = buf[i]
18573 var codePoint = null
18574 var bytesPerSequence = (firstByte > 0xEF) ? 4
18575 : (firstByte > 0xDF) ? 3
18576 : (firstByte > 0xBF) ? 2
18577 : 1
18578
18579 if (i + bytesPerSequence <= end) {
18580 var secondByte, thirdByte, fourthByte, tempCodePoint
18581
18582 switch (bytesPerSequence) {
18583 case 1:
18584 if (firstByte < 0x80) {
18585 codePoint = firstByte
18586 }
18587 break
18588 case 2:
18589 secondByte = buf[i + 1]
18590 if ((secondByte & 0xC0) === 0x80) {
18591 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
18592 if (tempCodePoint > 0x7F) {
18593 codePoint = tempCodePoint
18594 }
18595 }
18596 break
18597 case 3:
18598 secondByte = buf[i + 1]
18599 thirdByte = buf[i + 2]
18600 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
18601 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
18602 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
18603 codePoint = tempCodePoint
18604 }
18605 }
18606 break
18607 case 4:
18608 secondByte = buf[i + 1]
18609 thirdByte = buf[i + 2]
18610 fourthByte = buf[i + 3]
18611 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
18612 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
18613 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
18614 codePoint = tempCodePoint
18615 }
18616 }
18617 }
18618 }
18619
18620 if (codePoint === null) {
18621 // we did not generate a valid codePoint so insert a
18622 // replacement char (U+FFFD) and advance only 1 byte
18623 codePoint = 0xFFFD
18624 bytesPerSequence = 1
18625 } else if (codePoint > 0xFFFF) {
18626 // encode to utf16 (surrogate pair dance)
18627 codePoint -= 0x10000
18628 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
18629 codePoint = 0xDC00 | codePoint & 0x3FF
18630 }
18631
18632 res.push(codePoint)
18633 i += bytesPerSequence
18634 }
18635
18636 return decodeCodePointsArray(res)
18637}
18638
18639// Based on http://stackoverflow.com/a/22747272/680742, the browser with
18640// the lowest limit is Chrome, with 0x10000 args.
18641// We go 1 magnitude less, for safety
18642var MAX_ARGUMENTS_LENGTH = 0x1000
18643
18644function decodeCodePointsArray (codePoints) {
18645 var len = codePoints.length
18646 if (len <= MAX_ARGUMENTS_LENGTH) {
18647 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
18648 }
18649
18650 // Decode in chunks to avoid "call stack size exceeded".
18651 var res = ''
18652 var i = 0
18653 while (i < len) {
18654 res += String.fromCharCode.apply(
18655 String,
18656 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
18657 )
18658 }
18659 return res
18660}
18661
18662function asciiSlice (buf, start, end) {
18663 var ret = ''
18664 end = Math.min(buf.length, end)
18665
18666 for (var i = start; i < end; ++i) {
18667 ret += String.fromCharCode(buf[i] & 0x7F)
18668 }
18669 return ret
18670}
18671
18672function latin1Slice (buf, start, end) {
18673 var ret = ''
18674 end = Math.min(buf.length, end)
18675
18676 for (var i = start; i < end; ++i) {
18677 ret += String.fromCharCode(buf[i])
18678 }
18679 return ret
18680}
18681
18682function hexSlice (buf, start, end) {
18683 var len = buf.length
18684
18685 if (!start || start < 0) start = 0
18686 if (!end || end < 0 || end > len) end = len
18687
18688 var out = ''
18689 for (var i = start; i < end; ++i) {
18690 out += toHex(buf[i])
18691 }
18692 return out
18693}
18694
18695function utf16leSlice (buf, start, end) {
18696 var bytes = buf.slice(start, end)
18697 var res = ''
18698 for (var i = 0; i < bytes.length; i += 2) {
18699 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
18700 }
18701 return res
18702}
18703
18704Buffer.prototype.slice = function slice (start, end) {
18705 var len = this.length
18706 start = ~~start
18707 end = end === undefined ? len : ~~end
18708
18709 if (start < 0) {
18710 start += len
18711 if (start < 0) start = 0
18712 } else if (start > len) {
18713 start = len
18714 }
18715
18716 if (end < 0) {
18717 end += len
18718 if (end < 0) end = 0
18719 } else if (end > len) {
18720 end = len
18721 }
18722
18723 if (end < start) end = start
18724
18725 var newBuf = this.subarray(start, end)
18726 // Return an augmented `Uint8Array` instance
18727 newBuf.__proto__ = Buffer.prototype
18728 return newBuf
18729}
18730
18731/*
18732 * Need to make sure that buffer isn't trying to write out of bounds.
18733 */
18734function checkOffset (offset, ext, length) {
18735 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
18736 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
18737}
18738
18739Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
18740 offset = offset >>> 0
18741 byteLength = byteLength >>> 0
18742 if (!noAssert) checkOffset(offset, byteLength, this.length)
18743
18744 var val = this[offset]
18745 var mul = 1
18746 var i = 0
18747 while (++i < byteLength && (mul *= 0x100)) {
18748 val += this[offset + i] * mul
18749 }
18750
18751 return val
18752}
18753
18754Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
18755 offset = offset >>> 0
18756 byteLength = byteLength >>> 0
18757 if (!noAssert) {
18758 checkOffset(offset, byteLength, this.length)
18759 }
18760
18761 var val = this[offset + --byteLength]
18762 var mul = 1
18763 while (byteLength > 0 && (mul *= 0x100)) {
18764 val += this[offset + --byteLength] * mul
18765 }
18766
18767 return val
18768}
18769
18770Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
18771 offset = offset >>> 0
18772 if (!noAssert) checkOffset(offset, 1, this.length)
18773 return this[offset]
18774}
18775
18776Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
18777 offset = offset >>> 0
18778 if (!noAssert) checkOffset(offset, 2, this.length)
18779 return this[offset] | (this[offset + 1] << 8)
18780}
18781
18782Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
18783 offset = offset >>> 0
18784 if (!noAssert) checkOffset(offset, 2, this.length)
18785 return (this[offset] << 8) | this[offset + 1]
18786}
18787
18788Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
18789 offset = offset >>> 0
18790 if (!noAssert) checkOffset(offset, 4, this.length)
18791
18792 return ((this[offset]) |
18793 (this[offset + 1] << 8) |
18794 (this[offset + 2] << 16)) +
18795 (this[offset + 3] * 0x1000000)
18796}
18797
18798Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
18799 offset = offset >>> 0
18800 if (!noAssert) checkOffset(offset, 4, this.length)
18801
18802 return (this[offset] * 0x1000000) +
18803 ((this[offset + 1] << 16) |
18804 (this[offset + 2] << 8) |
18805 this[offset + 3])
18806}
18807
18808Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
18809 offset = offset >>> 0
18810 byteLength = byteLength >>> 0
18811 if (!noAssert) checkOffset(offset, byteLength, this.length)
18812
18813 var val = this[offset]
18814 var mul = 1
18815 var i = 0
18816 while (++i < byteLength && (mul *= 0x100)) {
18817 val += this[offset + i] * mul
18818 }
18819 mul *= 0x80
18820
18821 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
18822
18823 return val
18824}
18825
18826Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
18827 offset = offset >>> 0
18828 byteLength = byteLength >>> 0
18829 if (!noAssert) checkOffset(offset, byteLength, this.length)
18830
18831 var i = byteLength
18832 var mul = 1
18833 var val = this[offset + --i]
18834 while (i > 0 && (mul *= 0x100)) {
18835 val += this[offset + --i] * mul
18836 }
18837 mul *= 0x80
18838
18839 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
18840
18841 return val
18842}
18843
18844Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
18845 offset = offset >>> 0
18846 if (!noAssert) checkOffset(offset, 1, this.length)
18847 if (!(this[offset] & 0x80)) return (this[offset])
18848 return ((0xff - this[offset] + 1) * -1)
18849}
18850
18851Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
18852 offset = offset >>> 0
18853 if (!noAssert) checkOffset(offset, 2, this.length)
18854 var val = this[offset] | (this[offset + 1] << 8)
18855 return (val & 0x8000) ? val | 0xFFFF0000 : val
18856}
18857
18858Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
18859 offset = offset >>> 0
18860 if (!noAssert) checkOffset(offset, 2, this.length)
18861 var val = this[offset + 1] | (this[offset] << 8)
18862 return (val & 0x8000) ? val | 0xFFFF0000 : val
18863}
18864
18865Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
18866 offset = offset >>> 0
18867 if (!noAssert) checkOffset(offset, 4, this.length)
18868
18869 return (this[offset]) |
18870 (this[offset + 1] << 8) |
18871 (this[offset + 2] << 16) |
18872 (this[offset + 3] << 24)
18873}
18874
18875Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
18876 offset = offset >>> 0
18877 if (!noAssert) checkOffset(offset, 4, this.length)
18878
18879 return (this[offset] << 24) |
18880 (this[offset + 1] << 16) |
18881 (this[offset + 2] << 8) |
18882 (this[offset + 3])
18883}
18884
18885Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
18886 offset = offset >>> 0
18887 if (!noAssert) checkOffset(offset, 4, this.length)
18888 return ieee754.read(this, offset, true, 23, 4)
18889}
18890
18891Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
18892 offset = offset >>> 0
18893 if (!noAssert) checkOffset(offset, 4, this.length)
18894 return ieee754.read(this, offset, false, 23, 4)
18895}
18896
18897Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
18898 offset = offset >>> 0
18899 if (!noAssert) checkOffset(offset, 8, this.length)
18900 return ieee754.read(this, offset, true, 52, 8)
18901}
18902
18903Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
18904 offset = offset >>> 0
18905 if (!noAssert) checkOffset(offset, 8, this.length)
18906 return ieee754.read(this, offset, false, 52, 8)
18907}
18908
18909function checkInt (buf, value, offset, ext, max, min) {
18910 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
18911 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
18912 if (offset + ext > buf.length) throw new RangeError('Index out of range')
18913}
18914
18915Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
18916 value = +value
18917 offset = offset >>> 0
18918 byteLength = byteLength >>> 0
18919 if (!noAssert) {
18920 var maxBytes = Math.pow(2, 8 * byteLength) - 1
18921 checkInt(this, value, offset, byteLength, maxBytes, 0)
18922 }
18923
18924 var mul = 1
18925 var i = 0
18926 this[offset] = value & 0xFF
18927 while (++i < byteLength && (mul *= 0x100)) {
18928 this[offset + i] = (value / mul) & 0xFF
18929 }
18930
18931 return offset + byteLength
18932}
18933
18934Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
18935 value = +value
18936 offset = offset >>> 0
18937 byteLength = byteLength >>> 0
18938 if (!noAssert) {
18939 var maxBytes = Math.pow(2, 8 * byteLength) - 1
18940 checkInt(this, value, offset, byteLength, maxBytes, 0)
18941 }
18942
18943 var i = byteLength - 1
18944 var mul = 1
18945 this[offset + i] = value & 0xFF
18946 while (--i >= 0 && (mul *= 0x100)) {
18947 this[offset + i] = (value / mul) & 0xFF
18948 }
18949
18950 return offset + byteLength
18951}
18952
18953Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
18954 value = +value
18955 offset = offset >>> 0
18956 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
18957 this[offset] = (value & 0xff)
18958 return offset + 1
18959}
18960
18961Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
18962 value = +value
18963 offset = offset >>> 0
18964 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
18965 this[offset] = (value & 0xff)
18966 this[offset + 1] = (value >>> 8)
18967 return offset + 2
18968}
18969
18970Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
18971 value = +value
18972 offset = offset >>> 0
18973 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
18974 this[offset] = (value >>> 8)
18975 this[offset + 1] = (value & 0xff)
18976 return offset + 2
18977}
18978
18979Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
18980 value = +value
18981 offset = offset >>> 0
18982 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
18983 this[offset + 3] = (value >>> 24)
18984 this[offset + 2] = (value >>> 16)
18985 this[offset + 1] = (value >>> 8)
18986 this[offset] = (value & 0xff)
18987 return offset + 4
18988}
18989
18990Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
18991 value = +value
18992 offset = offset >>> 0
18993 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
18994 this[offset] = (value >>> 24)
18995 this[offset + 1] = (value >>> 16)
18996 this[offset + 2] = (value >>> 8)
18997 this[offset + 3] = (value & 0xff)
18998 return offset + 4
18999}
19000
19001Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
19002 value = +value
19003 offset = offset >>> 0
19004 if (!noAssert) {
19005 var limit = Math.pow(2, (8 * byteLength) - 1)
19006
19007 checkInt(this, value, offset, byteLength, limit - 1, -limit)
19008 }
19009
19010 var i = 0
19011 var mul = 1
19012 var sub = 0
19013 this[offset] = value & 0xFF
19014 while (++i < byteLength && (mul *= 0x100)) {
19015 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
19016 sub = 1
19017 }
19018 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
19019 }
19020
19021 return offset + byteLength
19022}
19023
19024Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
19025 value = +value
19026 offset = offset >>> 0
19027 if (!noAssert) {
19028 var limit = Math.pow(2, (8 * byteLength) - 1)
19029
19030 checkInt(this, value, offset, byteLength, limit - 1, -limit)
19031 }
19032
19033 var i = byteLength - 1
19034 var mul = 1
19035 var sub = 0
19036 this[offset + i] = value & 0xFF
19037 while (--i >= 0 && (mul *= 0x100)) {
19038 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
19039 sub = 1
19040 }
19041 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
19042 }
19043
19044 return offset + byteLength
19045}
19046
19047Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
19048 value = +value
19049 offset = offset >>> 0
19050 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
19051 if (value < 0) value = 0xff + value + 1
19052 this[offset] = (value & 0xff)
19053 return offset + 1
19054}
19055
19056Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
19057 value = +value
19058 offset = offset >>> 0
19059 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
19060 this[offset] = (value & 0xff)
19061 this[offset + 1] = (value >>> 8)
19062 return offset + 2
19063}
19064
19065Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
19066 value = +value
19067 offset = offset >>> 0
19068 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
19069 this[offset] = (value >>> 8)
19070 this[offset + 1] = (value & 0xff)
19071 return offset + 2
19072}
19073
19074Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
19075 value = +value
19076 offset = offset >>> 0
19077 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
19078 this[offset] = (value & 0xff)
19079 this[offset + 1] = (value >>> 8)
19080 this[offset + 2] = (value >>> 16)
19081 this[offset + 3] = (value >>> 24)
19082 return offset + 4
19083}
19084
19085Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
19086 value = +value
19087 offset = offset >>> 0
19088 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
19089 if (value < 0) value = 0xffffffff + value + 1
19090 this[offset] = (value >>> 24)
19091 this[offset + 1] = (value >>> 16)
19092 this[offset + 2] = (value >>> 8)
19093 this[offset + 3] = (value & 0xff)
19094 return offset + 4
19095}
19096
19097function checkIEEE754 (buf, value, offset, ext, max, min) {
19098 if (offset + ext > buf.length) throw new RangeError('Index out of range')
19099 if (offset < 0) throw new RangeError('Index out of range')
19100}
19101
19102function writeFloat (buf, value, offset, littleEndian, noAssert) {
19103 value = +value
19104 offset = offset >>> 0
19105 if (!noAssert) {
19106 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
19107 }
19108 ieee754.write(buf, value, offset, littleEndian, 23, 4)
19109 return offset + 4
19110}
19111
19112Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
19113 return writeFloat(this, value, offset, true, noAssert)
19114}
19115
19116Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
19117 return writeFloat(this, value, offset, false, noAssert)
19118}
19119
19120function writeDouble (buf, value, offset, littleEndian, noAssert) {
19121 value = +value
19122 offset = offset >>> 0
19123 if (!noAssert) {
19124 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
19125 }
19126 ieee754.write(buf, value, offset, littleEndian, 52, 8)
19127 return offset + 8
19128}
19129
19130Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
19131 return writeDouble(this, value, offset, true, noAssert)
19132}
19133
19134Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
19135 return writeDouble(this, value, offset, false, noAssert)
19136}
19137
19138// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
19139Buffer.prototype.copy = function copy (target, targetStart, start, end) {
19140 if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')
19141 if (!start) start = 0
19142 if (!end && end !== 0) end = this.length
19143 if (targetStart >= target.length) targetStart = target.length
19144 if (!targetStart) targetStart = 0
19145 if (end > 0 && end < start) end = start
19146
19147 // Copy 0 bytes; we're done
19148 if (end === start) return 0
19149 if (target.length === 0 || this.length === 0) return 0
19150
19151 // Fatal error conditions
19152 if (targetStart < 0) {
19153 throw new RangeError('targetStart out of bounds')
19154 }
19155 if (start < 0 || start >= this.length) throw new RangeError('Index out of range')
19156 if (end < 0) throw new RangeError('sourceEnd out of bounds')
19157
19158 // Are we oob?
19159 if (end > this.length) end = this.length
19160 if (target.length - targetStart < end - start) {
19161 end = target.length - targetStart + start
19162 }
19163
19164 var len = end - start
19165
19166 if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {
19167 // Use built-in when available, missing from IE11
19168 this.copyWithin(targetStart, start, end)
19169 } else if (this === target && start < targetStart && targetStart < end) {
19170 // descending copy from end
19171 for (var i = len - 1; i >= 0; --i) {
19172 target[i + targetStart] = this[i + start]
19173 }
19174 } else {
19175 Uint8Array.prototype.set.call(
19176 target,
19177 this.subarray(start, end),
19178 targetStart
19179 )
19180 }
19181
19182 return len
19183}
19184
19185// Usage:
19186// buffer.fill(number[, offset[, end]])
19187// buffer.fill(buffer[, offset[, end]])
19188// buffer.fill(string[, offset[, end]][, encoding])
19189Buffer.prototype.fill = function fill (val, start, end, encoding) {
19190 // Handle string cases:
19191 if (typeof val === 'string') {
19192 if (typeof start === 'string') {
19193 encoding = start
19194 start = 0
19195 end = this.length
19196 } else if (typeof end === 'string') {
19197 encoding = end
19198 end = this.length
19199 }
19200 if (encoding !== undefined && typeof encoding !== 'string') {
19201 throw new TypeError('encoding must be a string')
19202 }
19203 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
19204 throw new TypeError('Unknown encoding: ' + encoding)
19205 }
19206 if (val.length === 1) {
19207 var code = val.charCodeAt(0)
19208 if ((encoding === 'utf8' && code < 128) ||
19209 encoding === 'latin1') {
19210 // Fast path: If `val` fits into a single byte, use that numeric value.
19211 val = code
19212 }
19213 }
19214 } else if (typeof val === 'number') {
19215 val = val & 255
19216 }
19217
19218 // Invalid ranges are not set to a default, so can range check early.
19219 if (start < 0 || this.length < start || this.length < end) {
19220 throw new RangeError('Out of range index')
19221 }
19222
19223 if (end <= start) {
19224 return this
19225 }
19226
19227 start = start >>> 0
19228 end = end === undefined ? this.length : end >>> 0
19229
19230 if (!val) val = 0
19231
19232 var i
19233 if (typeof val === 'number') {
19234 for (i = start; i < end; ++i) {
19235 this[i] = val
19236 }
19237 } else {
19238 var bytes = Buffer.isBuffer(val)
19239 ? val
19240 : Buffer.from(val, encoding)
19241 var len = bytes.length
19242 if (len === 0) {
19243 throw new TypeError('The value "' + val +
19244 '" is invalid for argument "value"')
19245 }
19246 for (i = 0; i < end - start; ++i) {
19247 this[i + start] = bytes[i % len]
19248 }
19249 }
19250
19251 return this
19252}
19253
19254// HELPER FUNCTIONS
19255// ================
19256
19257var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
19258
19259function base64clean (str) {
19260 // Node takes equal signs as end of the Base64 encoding
19261 str = str.split('=')[0]
19262 // Node strips out invalid characters like \n and \t from the string, base64-js does not
19263 str = str.trim().replace(INVALID_BASE64_RE, '')
19264 // Node converts strings with length < 2 to ''
19265 if (str.length < 2) return ''
19266 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
19267 while (str.length % 4 !== 0) {
19268 str = str + '='
19269 }
19270 return str
19271}
19272
19273function toHex (n) {
19274 if (n < 16) return '0' + n.toString(16)
19275 return n.toString(16)
19276}
19277
19278function utf8ToBytes (string, units) {
19279 units = units || Infinity
19280 var codePoint
19281 var length = string.length
19282 var leadSurrogate = null
19283 var bytes = []
19284
19285 for (var i = 0; i < length; ++i) {
19286 codePoint = string.charCodeAt(i)
19287
19288 // is surrogate component
19289 if (codePoint > 0xD7FF && codePoint < 0xE000) {
19290 // last char was a lead
19291 if (!leadSurrogate) {
19292 // no lead yet
19293 if (codePoint > 0xDBFF) {
19294 // unexpected trail
19295 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
19296 continue
19297 } else if (i + 1 === length) {
19298 // unpaired lead
19299 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
19300 continue
19301 }
19302
19303 // valid lead
19304 leadSurrogate = codePoint
19305
19306 continue
19307 }
19308
19309 // 2 leads in a row
19310 if (codePoint < 0xDC00) {
19311 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
19312 leadSurrogate = codePoint
19313 continue
19314 }
19315
19316 // valid surrogate pair
19317 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
19318 } else if (leadSurrogate) {
19319 // valid bmp char, but last char was a lead
19320 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
19321 }
19322
19323 leadSurrogate = null
19324
19325 // encode utf8
19326 if (codePoint < 0x80) {
19327 if ((units -= 1) < 0) break
19328 bytes.push(codePoint)
19329 } else if (codePoint < 0x800) {
19330 if ((units -= 2) < 0) break
19331 bytes.push(
19332 codePoint >> 0x6 | 0xC0,
19333 codePoint & 0x3F | 0x80
19334 )
19335 } else if (codePoint < 0x10000) {
19336 if ((units -= 3) < 0) break
19337 bytes.push(
19338 codePoint >> 0xC | 0xE0,
19339 codePoint >> 0x6 & 0x3F | 0x80,
19340 codePoint & 0x3F | 0x80
19341 )
19342 } else if (codePoint < 0x110000) {
19343 if ((units -= 4) < 0) break
19344 bytes.push(
19345 codePoint >> 0x12 | 0xF0,
19346 codePoint >> 0xC & 0x3F | 0x80,
19347 codePoint >> 0x6 & 0x3F | 0x80,
19348 codePoint & 0x3F | 0x80
19349 )
19350 } else {
19351 throw new Error('Invalid code point')
19352 }
19353 }
19354
19355 return bytes
19356}
19357
19358function asciiToBytes (str) {
19359 var byteArray = []
19360 for (var i = 0; i < str.length; ++i) {
19361 // Node's code seems to be doing this and not & 0x7F..
19362 byteArray.push(str.charCodeAt(i) & 0xFF)
19363 }
19364 return byteArray
19365}
19366
19367function utf16leToBytes (str, units) {
19368 var c, hi, lo
19369 var byteArray = []
19370 for (var i = 0; i < str.length; ++i) {
19371 if ((units -= 2) < 0) break
19372
19373 c = str.charCodeAt(i)
19374 hi = c >> 8
19375 lo = c % 256
19376 byteArray.push(lo)
19377 byteArray.push(hi)
19378 }
19379
19380 return byteArray
19381}
19382
19383function base64ToBytes (str) {
19384 return base64.toByteArray(base64clean(str))
19385}
19386
19387function blitBuffer (src, dst, offset, length) {
19388 for (var i = 0; i < length; ++i) {
19389 if ((i + offset >= dst.length) || (i >= src.length)) break
19390 dst[i + offset] = src[i]
19391 }
19392 return i
19393}
19394
19395// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass
19396// the `instanceof` check but they should be treated as of that type.
19397// See: https://github.com/feross/buffer/issues/166
19398function isInstance (obj, type) {
19399 return obj instanceof type ||
19400 (obj != null && obj.constructor != null && obj.constructor.name != null &&
19401 obj.constructor.name === type.name)
19402}
19403function numberIsNaN (obj) {
19404 // For IE11 support
19405 return obj !== obj // eslint-disable-line no-self-compare
19406}
19407
19408}).call(this)}).call(this,require("buffer").Buffer)
19409},{"base64-js":87,"buffer":114,"ieee754":186}],115:[function(require,module,exports){
19410'use strict';
19411
19412var GetIntrinsic = require('get-intrinsic');
19413
19414var callBind = require('./');
19415
19416var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));
19417
19418module.exports = function callBoundIntrinsic(name, allowMissing) {
19419 var intrinsic = GetIntrinsic(name, !!allowMissing);
19420 if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {
19421 return callBind(intrinsic);
19422 }
19423 return intrinsic;
19424};
19425
19426},{"./":116,"get-intrinsic":177}],116:[function(require,module,exports){
19427'use strict';
19428
19429var bind = require('function-bind');
19430var GetIntrinsic = require('get-intrinsic');
19431var setFunctionLength = require('set-function-length');
19432
19433var $TypeError = require('es-errors/type');
19434var $apply = GetIntrinsic('%Function.prototype.apply%');
19435var $call = GetIntrinsic('%Function.prototype.call%');
19436var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);
19437
19438var $defineProperty = require('es-define-property');
19439var $max = GetIntrinsic('%Math.max%');
19440
19441module.exports = function callBind(originalFunction) {
19442 if (typeof originalFunction !== 'function') {
19443 throw new $TypeError('a function is required');
19444 }
19445 var func = $reflectApply(bind, $call, arguments);
19446 return setFunctionLength(
19447 func,
19448 1 + $max(0, originalFunction.length - (arguments.length - 1)),
19449 true
19450 );
19451};
19452
19453var applyBind = function applyBind() {
19454 return $reflectApply(bind, $apply, arguments);
19455};
19456
19457if ($defineProperty) {
19458 $defineProperty(module.exports, 'apply', { value: applyBind });
19459} else {
19460 module.exports.apply = applyBind;
19461}
19462
19463},{"es-define-property":160,"es-errors/type":166,"function-bind":175,"get-intrinsic":177,"set-function-length":261}],117:[function(require,module,exports){
19464(function (Buffer){(function (){
19465var clone = (function() {
19466'use strict';
19467
19468function _instanceof(obj, type) {
19469 return type != null && obj instanceof type;
19470}
19471
19472var nativeMap;
19473try {
19474 nativeMap = Map;
19475} catch(_) {
19476 // maybe a reference error because no `Map`. Give it a dummy value that no
19477 // value will ever be an instanceof.
19478 nativeMap = function() {};
19479}
19480
19481var nativeSet;
19482try {
19483 nativeSet = Set;
19484} catch(_) {
19485 nativeSet = function() {};
19486}
19487
19488var nativePromise;
19489try {
19490 nativePromise = Promise;
19491} catch(_) {
19492 nativePromise = function() {};
19493}
19494
19495/**
19496 * Clones (copies) an Object using deep copying.
19497 *
19498 * This function supports circular references by default, but if you are certain
19499 * there are no circular references in your object, you can save some CPU time
19500 * by calling clone(obj, false).
19501 *
19502 * Caution: if `circular` is false and `parent` contains circular references,
19503 * your program may enter an infinite loop and crash.
19504 *
19505 * @param `parent` - the object to be cloned
19506 * @param `circular` - set to true if the object to be cloned may contain
19507 * circular references. (optional - true by default)
19508 * @param `depth` - set to a number if the object is only to be cloned to
19509 * a particular depth. (optional - defaults to Infinity)
19510 * @param `prototype` - sets the prototype to be used when cloning an object.
19511 * (optional - defaults to parent prototype).
19512 * @param `includeNonEnumerable` - set to true if the non-enumerable properties
19513 * should be cloned as well. Non-enumerable properties on the prototype
19514 * chain will be ignored. (optional - false by default)
19515*/
19516function clone(parent, circular, depth, prototype, includeNonEnumerable) {
19517 if (typeof circular === 'object') {
19518 depth = circular.depth;
19519 prototype = circular.prototype;
19520 includeNonEnumerable = circular.includeNonEnumerable;
19521 circular = circular.circular;
19522 }
19523 // maintain two arrays for circular references, where corresponding parents
19524 // and children have the same index
19525 var allParents = [];
19526 var allChildren = [];
19527
19528 var useBuffer = typeof Buffer != 'undefined';
19529
19530 if (typeof circular == 'undefined')
19531 circular = true;
19532
19533 if (typeof depth == 'undefined')
19534 depth = Infinity;
19535
19536 // recurse this function so we don't reset allParents and allChildren
19537 function _clone(parent, depth) {
19538 // cloning null always returns null
19539 if (parent === null)
19540 return null;
19541
19542 if (depth === 0)
19543 return parent;
19544
19545 var child;
19546 var proto;
19547 if (typeof parent != 'object') {
19548 return parent;
19549 }
19550
19551 if (_instanceof(parent, nativeMap)) {
19552 child = new nativeMap();
19553 } else if (_instanceof(parent, nativeSet)) {
19554 child = new nativeSet();
19555 } else if (_instanceof(parent, nativePromise)) {
19556 child = new nativePromise(function (resolve, reject) {
19557 parent.then(function(value) {
19558 resolve(_clone(value, depth - 1));
19559 }, function(err) {
19560 reject(_clone(err, depth - 1));
19561 });
19562 });
19563 } else if (clone.__isArray(parent)) {
19564 child = [];
19565 } else if (clone.__isRegExp(parent)) {
19566 child = new RegExp(parent.source, __getRegExpFlags(parent));
19567 if (parent.lastIndex) child.lastIndex = parent.lastIndex;
19568 } else if (clone.__isDate(parent)) {
19569 child = new Date(parent.getTime());
19570 } else if (useBuffer && Buffer.isBuffer(parent)) {
19571 if (Buffer.allocUnsafe) {
19572 // Node.js >= 4.5.0
19573 child = Buffer.allocUnsafe(parent.length);
19574 } else {
19575 // Older Node.js versions
19576 child = new Buffer(parent.length);
19577 }
19578 parent.copy(child);
19579 return child;
19580 } else if (_instanceof(parent, Error)) {
19581 child = Object.create(parent);
19582 } else {
19583 if (typeof prototype == 'undefined') {
19584 proto = Object.getPrototypeOf(parent);
19585 child = Object.create(proto);
19586 }
19587 else {
19588 child = Object.create(prototype);
19589 proto = prototype;
19590 }
19591 }
19592
19593 if (circular) {
19594 var index = allParents.indexOf(parent);
19595
19596 if (index != -1) {
19597 return allChildren[index];
19598 }
19599 allParents.push(parent);
19600 allChildren.push(child);
19601 }
19602
19603 if (_instanceof(parent, nativeMap)) {
19604 parent.forEach(function(value, key) {
19605 var keyChild = _clone(key, depth - 1);
19606 var valueChild = _clone(value, depth - 1);
19607 child.set(keyChild, valueChild);
19608 });
19609 }
19610 if (_instanceof(parent, nativeSet)) {
19611 parent.forEach(function(value) {
19612 var entryChild = _clone(value, depth - 1);
19613 child.add(entryChild);
19614 });
19615 }
19616
19617 for (var i in parent) {
19618 var attrs;
19619 if (proto) {
19620 attrs = Object.getOwnPropertyDescriptor(proto, i);
19621 }
19622
19623 if (attrs && attrs.set == null) {
19624 continue;
19625 }
19626 child[i] = _clone(parent[i], depth - 1);
19627 }
19628
19629 if (Object.getOwnPropertySymbols) {
19630 var symbols = Object.getOwnPropertySymbols(parent);
19631 for (var i = 0; i < symbols.length; i++) {
19632 // Don't need to worry about cloning a symbol because it is a primitive,
19633 // like a number or string.
19634 var symbol = symbols[i];
19635 var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);
19636 if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {
19637 continue;
19638 }
19639 child[symbol] = _clone(parent[symbol], depth - 1);
19640 if (!descriptor.enumerable) {
19641 Object.defineProperty(child, symbol, {
19642 enumerable: false
19643 });
19644 }
19645 }
19646 }
19647
19648 if (includeNonEnumerable) {
19649 var allPropertyNames = Object.getOwnPropertyNames(parent);
19650 for (var i = 0; i < allPropertyNames.length; i++) {
19651 var propertyName = allPropertyNames[i];
19652 var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);
19653 if (descriptor && descriptor.enumerable) {
19654 continue;
19655 }
19656 child[propertyName] = _clone(parent[propertyName], depth - 1);
19657 Object.defineProperty(child, propertyName, {
19658 enumerable: false
19659 });
19660 }
19661 }
19662
19663 return child;
19664 }
19665
19666 return _clone(parent, depth);
19667}
19668
19669/**
19670 * Simple flat clone using prototype, accepts only objects, usefull for property
19671 * override on FLAT configuration object (no nested props).
19672 *
19673 * USE WITH CAUTION! This may not behave as you wish if you do not know how this
19674 * works.
19675 */
19676clone.clonePrototype = function clonePrototype(parent) {
19677 if (parent === null)
19678 return null;
19679
19680 var c = function () {};
19681 c.prototype = parent;
19682 return new c();
19683};
19684
19685// private utility functions
19686
19687function __objToStr(o) {
19688 return Object.prototype.toString.call(o);
19689}
19690clone.__objToStr = __objToStr;
19691
19692function __isDate(o) {
19693 return typeof o === 'object' && __objToStr(o) === '[object Date]';
19694}
19695clone.__isDate = __isDate;
19696
19697function __isArray(o) {
19698 return typeof o === 'object' && __objToStr(o) === '[object Array]';
19699}
19700clone.__isArray = __isArray;
19701
19702function __isRegExp(o) {
19703 return typeof o === 'object' && __objToStr(o) === '[object RegExp]';
19704}
19705clone.__isRegExp = __isRegExp;
19706
19707function __getRegExpFlags(re) {
19708 var flags = '';
19709 if (re.global) flags += 'g';
19710 if (re.ignoreCase) flags += 'i';
19711 if (re.multiline) flags += 'm';
19712 return flags;
19713}
19714clone.__getRegExpFlags = __getRegExpFlags;
19715
19716return clone;
19717})();
19718
19719if (typeof module === 'object' && module.exports) {
19720 module.exports = clone;
19721}
19722
19723}).call(this)}).call(this,require("buffer").Buffer)
19724},{"buffer":114}],118:[function(require,module,exports){
19725// Copyright Joyent, Inc. and other Node contributors.
19726//
19727// Permission is hereby granted, free of charge, to any person obtaining a
19728// copy of this software and associated documentation files (the
19729// "Software"), to deal in the Software without restriction, including
19730// without limitation the rights to use, copy, modify, merge, publish,
19731// distribute, sublicense, and/or sell copies of the Software, and to permit
19732// persons to whom the Software is furnished to do so, subject to the
19733// following conditions:
19734//
19735// The above copyright notice and this permission notice shall be included
19736// in all copies or substantial portions of the Software.
19737//
19738// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19739// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19740// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
19741// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
19742// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19743// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
19744// USE OR OTHER DEALINGS IN THE SOFTWARE.
19745
19746// NOTE: These type checking functions intentionally don't use `instanceof`
19747// because it is fragile and can be easily faked with `Object.create()`.
19748
19749function isArray(arg) {
19750 if (Array.isArray) {
19751 return Array.isArray(arg);
19752 }
19753 return objectToString(arg) === '[object Array]';
19754}
19755exports.isArray = isArray;
19756
19757function isBoolean(arg) {
19758 return typeof arg === 'boolean';
19759}
19760exports.isBoolean = isBoolean;
19761
19762function isNull(arg) {
19763 return arg === null;
19764}
19765exports.isNull = isNull;
19766
19767function isNullOrUndefined(arg) {
19768 return arg == null;
19769}
19770exports.isNullOrUndefined = isNullOrUndefined;
19771
19772function isNumber(arg) {
19773 return typeof arg === 'number';
19774}
19775exports.isNumber = isNumber;
19776
19777function isString(arg) {
19778 return typeof arg === 'string';
19779}
19780exports.isString = isString;
19781
19782function isSymbol(arg) {
19783 return typeof arg === 'symbol';
19784}
19785exports.isSymbol = isSymbol;
19786
19787function isUndefined(arg) {
19788 return arg === void 0;
19789}
19790exports.isUndefined = isUndefined;
19791
19792function isRegExp(re) {
19793 return objectToString(re) === '[object RegExp]';
19794}
19795exports.isRegExp = isRegExp;
19796
19797function isObject(arg) {
19798 return typeof arg === 'object' && arg !== null;
19799}
19800exports.isObject = isObject;
19801
19802function isDate(d) {
19803 return objectToString(d) === '[object Date]';
19804}
19805exports.isDate = isDate;
19806
19807function isError(e) {
19808 return (objectToString(e) === '[object Error]' || e instanceof Error);
19809}
19810exports.isError = isError;
19811
19812function isFunction(arg) {
19813 return typeof arg === 'function';
19814}
19815exports.isFunction = isFunction;
19816
19817function isPrimitive(arg) {
19818 return arg === null ||
19819 typeof arg === 'boolean' ||
19820 typeof arg === 'number' ||
19821 typeof arg === 'string' ||
19822 typeof arg === 'symbol' || // ES6 symbol
19823 typeof arg === 'undefined';
19824}
19825exports.isPrimitive = isPrimitive;
19826
19827exports.isBuffer = require('buffer').Buffer.isBuffer;
19828
19829function objectToString(o) {
19830 return Object.prototype.toString.call(o);
19831}
19832
19833},{"buffer":114}],119:[function(require,module,exports){
19834;(function (root, factory, undef) {
19835 if (typeof exports === "object") {
19836 // CommonJS
19837 module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core"));
19838 }
19839 else if (typeof define === "function" && define.amd) {
19840 // AMD
19841 define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
19842 }
19843 else {
19844 // Global (browser)
19845 factory(root.CryptoJS);
19846 }
19847}(this, function (CryptoJS) {
19848
19849 (function () {
19850 // Shortcuts
19851 var C = CryptoJS;
19852 var C_lib = C.lib;
19853 var BlockCipher = C_lib.BlockCipher;
19854 var C_algo = C.algo;
19855
19856 // Lookup tables
19857 var SBOX = [];
19858 var INV_SBOX = [];
19859 var SUB_MIX_0 = [];
19860 var SUB_MIX_1 = [];
19861 var SUB_MIX_2 = [];
19862 var SUB_MIX_3 = [];
19863 var INV_SUB_MIX_0 = [];
19864 var INV_SUB_MIX_1 = [];
19865 var INV_SUB_MIX_2 = [];
19866 var INV_SUB_MIX_3 = [];
19867
19868 // Compute lookup tables
19869 (function () {
19870 // Compute double table
19871 var d = [];
19872 for (var i = 0; i < 256; i++) {
19873 if (i < 128) {
19874 d[i] = i << 1;
19875 } else {
19876 d[i] = (i << 1) ^ 0x11b;
19877 }
19878 }
19879
19880 // Walk GF(2^8)
19881 var x = 0;
19882 var xi = 0;
19883 for (var i = 0; i < 256; i++) {
19884 // Compute sbox
19885 var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);
19886 sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;
19887 SBOX[x] = sx;
19888 INV_SBOX[sx] = x;
19889
19890 // Compute multiplication
19891 var x2 = d[x];
19892 var x4 = d[x2];
19893 var x8 = d[x4];
19894
19895 // Compute sub bytes, mix columns tables
19896 var t = (d[sx] * 0x101) ^ (sx * 0x1010100);
19897 SUB_MIX_0[x] = (t << 24) | (t >>> 8);
19898 SUB_MIX_1[x] = (t << 16) | (t >>> 16);
19899 SUB_MIX_2[x] = (t << 8) | (t >>> 24);
19900 SUB_MIX_3[x] = t;
19901
19902 // Compute inv sub bytes, inv mix columns tables
19903 var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);
19904 INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);
19905 INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);
19906 INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);
19907 INV_SUB_MIX_3[sx] = t;
19908
19909 // Compute next counter
19910 if (!x) {
19911 x = xi = 1;
19912 } else {
19913 x = x2 ^ d[d[d[x8 ^ x2]]];
19914 xi ^= d[d[xi]];
19915 }
19916 }
19917 }());
19918
19919 // Precomputed Rcon lookup
19920 var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];
19921
19922 /**
19923 * AES block cipher algorithm.
19924 */
19925 var AES = C_algo.AES = BlockCipher.extend({
19926 _doReset: function () {
19927 var t;
19928
19929 // Skip reset of nRounds has been set before and key did not change
19930 if (this._nRounds && this._keyPriorReset === this._key) {
19931 return;
19932 }
19933
19934 // Shortcuts
19935 var key = this._keyPriorReset = this._key;
19936 var keyWords = key.words;
19937 var keySize = key.sigBytes / 4;
19938
19939 // Compute number of rounds
19940 var nRounds = this._nRounds = keySize + 6;
19941
19942 // Compute number of key schedule rows
19943 var ksRows = (nRounds + 1) * 4;
19944
19945 // Compute key schedule
19946 var keySchedule = this._keySchedule = [];
19947 for (var ksRow = 0; ksRow < ksRows; ksRow++) {
19948 if (ksRow < keySize) {
19949 keySchedule[ksRow] = keyWords[ksRow];
19950 } else {
19951 t = keySchedule[ksRow - 1];
19952
19953 if (!(ksRow % keySize)) {
19954 // Rot word
19955 t = (t << 8) | (t >>> 24);
19956
19957 // Sub word
19958 t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];
19959
19960 // Mix Rcon
19961 t ^= RCON[(ksRow / keySize) | 0] << 24;
19962 } else if (keySize > 6 && ksRow % keySize == 4) {
19963 // Sub word
19964 t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];
19965 }
19966
19967 keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;
19968 }
19969 }
19970
19971 // Compute inv key schedule
19972 var invKeySchedule = this._invKeySchedule = [];
19973 for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {
19974 var ksRow = ksRows - invKsRow;
19975
19976 if (invKsRow % 4) {
19977 var t = keySchedule[ksRow];
19978 } else {
19979 var t = keySchedule[ksRow - 4];
19980 }
19981
19982 if (invKsRow < 4 || ksRow <= 4) {
19983 invKeySchedule[invKsRow] = t;
19984 } else {
19985 invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^
19986 INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];
19987 }
19988 }
19989 },
19990
19991 encryptBlock: function (M, offset) {
19992 this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);
19993 },
19994
19995 decryptBlock: function (M, offset) {
19996 // Swap 2nd and 4th rows
19997 var t = M[offset + 1];
19998 M[offset + 1] = M[offset + 3];
19999 M[offset + 3] = t;
20000
20001 this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);
20002
20003 // Inv swap 2nd and 4th rows
20004 var t = M[offset + 1];
20005 M[offset + 1] = M[offset + 3];
20006 M[offset + 3] = t;
20007 },
20008
20009 _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {
20010 // Shortcut
20011 var nRounds = this._nRounds;
20012
20013 // Get input, add round key
20014 var s0 = M[offset] ^ keySchedule[0];
20015 var s1 = M[offset + 1] ^ keySchedule[1];
20016 var s2 = M[offset + 2] ^ keySchedule[2];
20017 var s3 = M[offset + 3] ^ keySchedule[3];
20018
20019 // Key schedule row counter
20020 var ksRow = 4;
20021
20022 // Rounds
20023 for (var round = 1; round < nRounds; round++) {
20024 // Shift rows, sub bytes, mix columns, add round key
20025 var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];
20026 var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];
20027 var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];
20028 var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];
20029
20030 // Update state
20031 s0 = t0;
20032 s1 = t1;
20033 s2 = t2;
20034 s3 = t3;
20035 }
20036
20037 // Shift rows, sub bytes, add round key
20038 var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];
20039 var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];
20040 var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];
20041 var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];
20042
20043 // Set output
20044 M[offset] = t0;
20045 M[offset + 1] = t1;
20046 M[offset + 2] = t2;
20047 M[offset + 3] = t3;
20048 },
20049
20050 keySize: 256/32
20051 });
20052
20053 /**
20054 * Shortcut functions to the cipher's object interface.
20055 *
20056 * @example
20057 *
20058 * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);
20059 * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);
20060 */
20061 C.AES = BlockCipher._createHelper(AES);
20062 }());
20063
20064
20065 return CryptoJS.AES;
20066
20067}));
20068},{"./cipher-core":121,"./core":122,"./enc-base64":123,"./evpkdf":126,"./md5":131}],120:[function(require,module,exports){
20069;(function (root, factory, undef) {
20070 if (typeof exports === "object") {
20071 // CommonJS
20072 module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core"));
20073 }
20074 else if (typeof define === "function" && define.amd) {
20075 // AMD
20076 define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
20077 }
20078 else {
20079 // Global (browser)
20080 factory(root.CryptoJS);
20081 }
20082}(this, function (CryptoJS) {
20083
20084 (function () {
20085 // Shortcuts
20086 var C = CryptoJS;
20087 var C_lib = C.lib;
20088 var BlockCipher = C_lib.BlockCipher;
20089 var C_algo = C.algo;
20090
20091 const N = 16;
20092
20093 //Origin pbox and sbox, derived from PI
20094 const ORIG_P = [
20095 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,
20096 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,
20097 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,
20098 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,
20099 0x9216D5D9, 0x8979FB1B
20100 ];
20101
20102 const ORIG_S = [
20103 [ 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,
20104 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,
20105 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,
20106 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,
20107 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,
20108 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,
20109 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,
20110 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,
20111 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,
20112 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,
20113 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,
20114 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,
20115 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,
20116 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,
20117 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,
20118 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,
20119 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,
20120 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,
20121 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,
20122 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,
20123 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,
20124 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,
20125 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,
20126 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,
20127 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,
20128 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,
20129 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,
20130 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,
20131 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,
20132 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,
20133 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,
20134 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,
20135 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,
20136 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,
20137 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,
20138 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,
20139 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,
20140 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,
20141 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,
20142 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,
20143 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,
20144 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,
20145 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,
20146 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,
20147 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,
20148 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,
20149 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,
20150 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,
20151 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,
20152 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,
20153 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,
20154 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,
20155 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,
20156 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,
20157 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,
20158 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,
20159 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,
20160 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,
20161 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,
20162 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,
20163 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,
20164 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,
20165 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,
20166 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A ],
20167 [ 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,
20168 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,
20169 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,
20170 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,
20171 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,
20172 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,
20173 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,
20174 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,
20175 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,
20176 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,
20177 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,
20178 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,
20179 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,
20180 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,
20181 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,
20182 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,
20183 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,
20184 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,
20185 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,
20186 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,
20187 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,
20188 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,
20189 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,
20190 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,
20191 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,
20192 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,
20193 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,
20194 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,
20195 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,
20196 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,
20197 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,
20198 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,
20199 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,
20200 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,
20201 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,
20202 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,
20203 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,
20204 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,
20205 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,
20206 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,
20207 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,
20208 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,
20209 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,
20210 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,
20211 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,
20212 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,
20213 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,
20214 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,
20215 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,
20216 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,
20217 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,
20218 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,
20219 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,
20220 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,
20221 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,
20222 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,
20223 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,
20224 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,
20225 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,
20226 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,
20227 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,
20228 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,
20229 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,
20230 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 ],
20231 [ 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,
20232 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,
20233 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,
20234 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,
20235 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,
20236 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,
20237 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,
20238 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,
20239 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,
20240 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,
20241 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,
20242 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,
20243 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,
20244 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,
20245 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,
20246 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,
20247 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,
20248 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,
20249 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,
20250 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,
20251 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,
20252 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,
20253 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,
20254 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,
20255 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,
20256 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,
20257 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,
20258 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,
20259 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,
20260 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,
20261 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,
20262 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,
20263 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,
20264 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,
20265 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,
20266 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,
20267 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,
20268 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,
20269 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,
20270 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,
20271 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,
20272 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,
20273 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,
20274 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,
20275 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,
20276 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,
20277 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,
20278 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,
20279 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,
20280 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,
20281 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,
20282 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,
20283 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,
20284 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,
20285 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,
20286 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,
20287 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,
20288 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,
20289 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,
20290 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,
20291 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,
20292 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,
20293 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,
20294 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 ],
20295 [ 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,
20296 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,
20297 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,
20298 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,
20299 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,
20300 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,
20301 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,
20302 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,
20303 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,
20304 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,
20305 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,
20306 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,
20307 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,
20308 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,
20309 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,
20310 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,
20311 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,
20312 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,
20313 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,
20314 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,
20315 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,
20316 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,
20317 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,
20318 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,
20319 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,
20320 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,
20321 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,
20322 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,
20323 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,
20324 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,
20325 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,
20326 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,
20327 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,
20328 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,
20329 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,
20330 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,
20331 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,
20332 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,
20333 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,
20334 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,
20335 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,
20336 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,
20337 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,
20338 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,
20339 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,
20340 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,
20341 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,
20342 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,
20343 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,
20344 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,
20345 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,
20346 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,
20347 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,
20348 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,
20349 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,
20350 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,
20351 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,
20352 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,
20353 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,
20354 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,
20355 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,
20356 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,
20357 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,
20358 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 ]
20359 ];
20360
20361 var BLOWFISH_CTX = {
20362 pbox: [],
20363 sbox: []
20364 }
20365
20366 function F(ctx, x){
20367 let a = (x >> 24) & 0xFF;
20368 let b = (x >> 16) & 0xFF;
20369 let c = (x >> 8) & 0xFF;
20370 let d = x & 0xFF;
20371
20372 let y = ctx.sbox[0][a] + ctx.sbox[1][b];
20373 y = y ^ ctx.sbox[2][c];
20374 y = y + ctx.sbox[3][d];
20375
20376 return y;
20377 }
20378
20379 function BlowFish_Encrypt(ctx, left, right){
20380 let Xl = left;
20381 let Xr = right;
20382 let temp;
20383
20384 for(let i = 0; i < N; ++i){
20385 Xl = Xl ^ ctx.pbox[i];
20386 Xr = F(ctx, Xl) ^ Xr;
20387
20388 temp = Xl;
20389 Xl = Xr;
20390 Xr = temp;
20391 }
20392
20393 temp = Xl;
20394 Xl = Xr;
20395 Xr = temp;
20396
20397 Xr = Xr ^ ctx.pbox[N];
20398 Xl = Xl ^ ctx.pbox[N + 1];
20399
20400 return {left: Xl, right: Xr};
20401 }
20402
20403 function BlowFish_Decrypt(ctx, left, right){
20404 let Xl = left;
20405 let Xr = right;
20406 let temp;
20407
20408 for(let i = N + 1; i > 1; --i){
20409 Xl = Xl ^ ctx.pbox[i];
20410 Xr = F(ctx, Xl) ^ Xr;
20411
20412 temp = Xl;
20413 Xl = Xr;
20414 Xr = temp;
20415 }
20416
20417 temp = Xl;
20418 Xl = Xr;
20419 Xr = temp;
20420
20421 Xr = Xr ^ ctx.pbox[1];
20422 Xl = Xl ^ ctx.pbox[0];
20423
20424 return {left: Xl, right: Xr};
20425 }
20426
20427 /**
20428 * Initialization ctx's pbox and sbox.
20429 *
20430 * @param {Object} ctx The object has pbox and sbox.
20431 * @param {Array} key An array of 32-bit words.
20432 * @param {int} keysize The length of the key.
20433 *
20434 * @example
20435 *
20436 * BlowFishInit(BLOWFISH_CTX, key, 128/32);
20437 */
20438 function BlowFishInit(ctx, key, keysize)
20439 {
20440 for(let Row = 0; Row < 4; Row++)
20441 {
20442 ctx.sbox[Row] = [];
20443 for(let Col = 0; Col < 256; Col++)
20444 {
20445 ctx.sbox[Row][Col] = ORIG_S[Row][Col];
20446 }
20447 }
20448
20449 let keyIndex = 0;
20450 for(let index = 0; index < N + 2; index++)
20451 {
20452 ctx.pbox[index] = ORIG_P[index] ^ key[keyIndex];
20453 keyIndex++;
20454 if(keyIndex >= keysize)
20455 {
20456 keyIndex = 0;
20457 }
20458 }
20459
20460 let Data1 = 0;
20461 let Data2 = 0;
20462 let res = 0;
20463 for(let i = 0; i < N + 2; i += 2)
20464 {
20465 res = BlowFish_Encrypt(ctx, Data1, Data2);
20466 Data1 = res.left;
20467 Data2 = res.right;
20468 ctx.pbox[i] = Data1;
20469 ctx.pbox[i + 1] = Data2;
20470 }
20471
20472 for(let i = 0; i < 4; i++)
20473 {
20474 for(let j = 0; j < 256; j += 2)
20475 {
20476 res = BlowFish_Encrypt(ctx, Data1, Data2);
20477 Data1 = res.left;
20478 Data2 = res.right;
20479 ctx.sbox[i][j] = Data1;
20480 ctx.sbox[i][j + 1] = Data2;
20481 }
20482 }
20483
20484 return true;
20485 }
20486
20487 /**
20488 * Blowfish block cipher algorithm.
20489 */
20490 var Blowfish = C_algo.Blowfish = BlockCipher.extend({
20491 _doReset: function () {
20492 // Skip reset of nRounds has been set before and key did not change
20493 if (this._keyPriorReset === this._key) {
20494 return;
20495 }
20496
20497 // Shortcuts
20498 var key = this._keyPriorReset = this._key;
20499 var keyWords = key.words;
20500 var keySize = key.sigBytes / 4;
20501
20502 //Initialization pbox and sbox
20503 BlowFishInit(BLOWFISH_CTX, keyWords, keySize);
20504 },
20505
20506 encryptBlock: function (M, offset) {
20507 var res = BlowFish_Encrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);
20508 M[offset] = res.left;
20509 M[offset + 1] = res.right;
20510 },
20511
20512 decryptBlock: function (M, offset) {
20513 var res = BlowFish_Decrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);
20514 M[offset] = res.left;
20515 M[offset + 1] = res.right;
20516 },
20517
20518 blockSize: 64/32,
20519
20520 keySize: 128/32,
20521
20522 ivSize: 64/32
20523 });
20524
20525 /**
20526 * Shortcut functions to the cipher's object interface.
20527 *
20528 * @example
20529 *
20530 * var ciphertext = CryptoJS.Blowfish.encrypt(message, key, cfg);
20531 * var plaintext = CryptoJS.Blowfish.decrypt(ciphertext, key, cfg);
20532 */
20533 C.Blowfish = BlockCipher._createHelper(Blowfish);
20534 }());
20535
20536
20537 return CryptoJS.Blowfish;
20538
20539}));
20540},{"./cipher-core":121,"./core":122,"./enc-base64":123,"./evpkdf":126,"./md5":131}],121:[function(require,module,exports){
20541;(function (root, factory, undef) {
20542 if (typeof exports === "object") {
20543 // CommonJS
20544 module.exports = exports = factory(require("./core"), require("./evpkdf"));
20545 }
20546 else if (typeof define === "function" && define.amd) {
20547 // AMD
20548 define(["./core", "./evpkdf"], factory);
20549 }
20550 else {
20551 // Global (browser)
20552 factory(root.CryptoJS);
20553 }
20554}(this, function (CryptoJS) {
20555
20556 /**
20557 * Cipher core components.
20558 */
20559 CryptoJS.lib.Cipher || (function (undefined) {
20560 // Shortcuts
20561 var C = CryptoJS;
20562 var C_lib = C.lib;
20563 var Base = C_lib.Base;
20564 var WordArray = C_lib.WordArray;
20565 var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;
20566 var C_enc = C.enc;
20567 var Utf8 = C_enc.Utf8;
20568 var Base64 = C_enc.Base64;
20569 var C_algo = C.algo;
20570 var EvpKDF = C_algo.EvpKDF;
20571
20572 /**
20573 * Abstract base cipher template.
20574 *
20575 * @property {number} keySize This cipher's key size. Default: 4 (128 bits)
20576 * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)
20577 * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.
20578 * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.
20579 */
20580 var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({
20581 /**
20582 * Configuration options.
20583 *
20584 * @property {WordArray} iv The IV to use for this operation.
20585 */
20586 cfg: Base.extend(),
20587
20588 /**
20589 * Creates this cipher in encryption mode.
20590 *
20591 * @param {WordArray} key The key.
20592 * @param {Object} cfg (Optional) The configuration options to use for this operation.
20593 *
20594 * @return {Cipher} A cipher instance.
20595 *
20596 * @static
20597 *
20598 * @example
20599 *
20600 * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });
20601 */
20602 createEncryptor: function (key, cfg) {
20603 return this.create(this._ENC_XFORM_MODE, key, cfg);
20604 },
20605
20606 /**
20607 * Creates this cipher in decryption mode.
20608 *
20609 * @param {WordArray} key The key.
20610 * @param {Object} cfg (Optional) The configuration options to use for this operation.
20611 *
20612 * @return {Cipher} A cipher instance.
20613 *
20614 * @static
20615 *
20616 * @example
20617 *
20618 * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });
20619 */
20620 createDecryptor: function (key, cfg) {
20621 return this.create(this._DEC_XFORM_MODE, key, cfg);
20622 },
20623
20624 /**
20625 * Initializes a newly created cipher.
20626 *
20627 * @param {number} xformMode Either the encryption or decryption transormation mode constant.
20628 * @param {WordArray} key The key.
20629 * @param {Object} cfg (Optional) The configuration options to use for this operation.
20630 *
20631 * @example
20632 *
20633 * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });
20634 */
20635 init: function (xformMode, key, cfg) {
20636 // Apply config defaults
20637 this.cfg = this.cfg.extend(cfg);
20638
20639 // Store transform mode and key
20640 this._xformMode = xformMode;
20641 this._key = key;
20642
20643 // Set initial values
20644 this.reset();
20645 },
20646
20647 /**
20648 * Resets this cipher to its initial state.
20649 *
20650 * @example
20651 *
20652 * cipher.reset();
20653 */
20654 reset: function () {
20655 // Reset data buffer
20656 BufferedBlockAlgorithm.reset.call(this);
20657
20658 // Perform concrete-cipher logic
20659 this._doReset();
20660 },
20661
20662 /**
20663 * Adds data to be encrypted or decrypted.
20664 *
20665 * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.
20666 *
20667 * @return {WordArray} The data after processing.
20668 *
20669 * @example
20670 *
20671 * var encrypted = cipher.process('data');
20672 * var encrypted = cipher.process(wordArray);
20673 */
20674 process: function (dataUpdate) {
20675 // Append
20676 this._append(dataUpdate);
20677
20678 // Process available blocks
20679 return this._process();
20680 },
20681
20682 /**
20683 * Finalizes the encryption or decryption process.
20684 * Note that the finalize operation is effectively a destructive, read-once operation.
20685 *
20686 * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.
20687 *
20688 * @return {WordArray} The data after final processing.
20689 *
20690 * @example
20691 *
20692 * var encrypted = cipher.finalize();
20693 * var encrypted = cipher.finalize('data');
20694 * var encrypted = cipher.finalize(wordArray);
20695 */
20696 finalize: function (dataUpdate) {
20697 // Final data update
20698 if (dataUpdate) {
20699 this._append(dataUpdate);
20700 }
20701
20702 // Perform concrete-cipher logic
20703 var finalProcessedData = this._doFinalize();
20704
20705 return finalProcessedData;
20706 },
20707
20708 keySize: 128/32,
20709
20710 ivSize: 128/32,
20711
20712 _ENC_XFORM_MODE: 1,
20713
20714 _DEC_XFORM_MODE: 2,
20715
20716 /**
20717 * Creates shortcut functions to a cipher's object interface.
20718 *
20719 * @param {Cipher} cipher The cipher to create a helper for.
20720 *
20721 * @return {Object} An object with encrypt and decrypt shortcut functions.
20722 *
20723 * @static
20724 *
20725 * @example
20726 *
20727 * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);
20728 */
20729 _createHelper: (function () {
20730 function selectCipherStrategy(key) {
20731 if (typeof key == 'string') {
20732 return PasswordBasedCipher;
20733 } else {
20734 return SerializableCipher;
20735 }
20736 }
20737
20738 return function (cipher) {
20739 return {
20740 encrypt: function (message, key, cfg) {
20741 return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);
20742 },
20743
20744 decrypt: function (ciphertext, key, cfg) {
20745 return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);
20746 }
20747 };
20748 };
20749 }())
20750 });
20751
20752 /**
20753 * Abstract base stream cipher template.
20754 *
20755 * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)
20756 */
20757 var StreamCipher = C_lib.StreamCipher = Cipher.extend({
20758 _doFinalize: function () {
20759 // Process partial blocks
20760 var finalProcessedBlocks = this._process(!!'flush');
20761
20762 return finalProcessedBlocks;
20763 },
20764
20765 blockSize: 1
20766 });
20767
20768 /**
20769 * Mode namespace.
20770 */
20771 var C_mode = C.mode = {};
20772
20773 /**
20774 * Abstract base block cipher mode template.
20775 */
20776 var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({
20777 /**
20778 * Creates this mode for encryption.
20779 *
20780 * @param {Cipher} cipher A block cipher instance.
20781 * @param {Array} iv The IV words.
20782 *
20783 * @static
20784 *
20785 * @example
20786 *
20787 * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);
20788 */
20789 createEncryptor: function (cipher, iv) {
20790 return this.Encryptor.create(cipher, iv);
20791 },
20792
20793 /**
20794 * Creates this mode for decryption.
20795 *
20796 * @param {Cipher} cipher A block cipher instance.
20797 * @param {Array} iv The IV words.
20798 *
20799 * @static
20800 *
20801 * @example
20802 *
20803 * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);
20804 */
20805 createDecryptor: function (cipher, iv) {
20806 return this.Decryptor.create(cipher, iv);
20807 },
20808
20809 /**
20810 * Initializes a newly created mode.
20811 *
20812 * @param {Cipher} cipher A block cipher instance.
20813 * @param {Array} iv The IV words.
20814 *
20815 * @example
20816 *
20817 * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);
20818 */
20819 init: function (cipher, iv) {
20820 this._cipher = cipher;
20821 this._iv = iv;
20822 }
20823 });
20824
20825 /**
20826 * Cipher Block Chaining mode.
20827 */
20828 var CBC = C_mode.CBC = (function () {
20829 /**
20830 * Abstract base CBC mode.
20831 */
20832 var CBC = BlockCipherMode.extend();
20833
20834 /**
20835 * CBC encryptor.
20836 */
20837 CBC.Encryptor = CBC.extend({
20838 /**
20839 * Processes the data block at offset.
20840 *
20841 * @param {Array} words The data words to operate on.
20842 * @param {number} offset The offset where the block starts.
20843 *
20844 * @example
20845 *
20846 * mode.processBlock(data.words, offset);
20847 */
20848 processBlock: function (words, offset) {
20849 // Shortcuts
20850 var cipher = this._cipher;
20851 var blockSize = cipher.blockSize;
20852
20853 // XOR and encrypt
20854 xorBlock.call(this, words, offset, blockSize);
20855 cipher.encryptBlock(words, offset);
20856
20857 // Remember this block to use with next block
20858 this._prevBlock = words.slice(offset, offset + blockSize);
20859 }
20860 });
20861
20862 /**
20863 * CBC decryptor.
20864 */
20865 CBC.Decryptor = CBC.extend({
20866 /**
20867 * Processes the data block at offset.
20868 *
20869 * @param {Array} words The data words to operate on.
20870 * @param {number} offset The offset where the block starts.
20871 *
20872 * @example
20873 *
20874 * mode.processBlock(data.words, offset);
20875 */
20876 processBlock: function (words, offset) {
20877 // Shortcuts
20878 var cipher = this._cipher;
20879 var blockSize = cipher.blockSize;
20880
20881 // Remember this block to use with next block
20882 var thisBlock = words.slice(offset, offset + blockSize);
20883
20884 // Decrypt and XOR
20885 cipher.decryptBlock(words, offset);
20886 xorBlock.call(this, words, offset, blockSize);
20887
20888 // This block becomes the previous block
20889 this._prevBlock = thisBlock;
20890 }
20891 });
20892
20893 function xorBlock(words, offset, blockSize) {
20894 var block;
20895
20896 // Shortcut
20897 var iv = this._iv;
20898
20899 // Choose mixing block
20900 if (iv) {
20901 block = iv;
20902
20903 // Remove IV for subsequent blocks
20904 this._iv = undefined;
20905 } else {
20906 block = this._prevBlock;
20907 }
20908
20909 // XOR blocks
20910 for (var i = 0; i < blockSize; i++) {
20911 words[offset + i] ^= block[i];
20912 }
20913 }
20914
20915 return CBC;
20916 }());
20917
20918 /**
20919 * Padding namespace.
20920 */
20921 var C_pad = C.pad = {};
20922
20923 /**
20924 * PKCS #5/7 padding strategy.
20925 */
20926 var Pkcs7 = C_pad.Pkcs7 = {
20927 /**
20928 * Pads data using the algorithm defined in PKCS #5/7.
20929 *
20930 * @param {WordArray} data The data to pad.
20931 * @param {number} blockSize The multiple that the data should be padded to.
20932 *
20933 * @static
20934 *
20935 * @example
20936 *
20937 * CryptoJS.pad.Pkcs7.pad(wordArray, 4);
20938 */
20939 pad: function (data, blockSize) {
20940 // Shortcut
20941 var blockSizeBytes = blockSize * 4;
20942
20943 // Count padding bytes
20944 var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;
20945
20946 // Create padding word
20947 var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;
20948
20949 // Create padding
20950 var paddingWords = [];
20951 for (var i = 0; i < nPaddingBytes; i += 4) {
20952 paddingWords.push(paddingWord);
20953 }
20954 var padding = WordArray.create(paddingWords, nPaddingBytes);
20955
20956 // Add padding
20957 data.concat(padding);
20958 },
20959
20960 /**
20961 * Unpads data that had been padded using the algorithm defined in PKCS #5/7.
20962 *
20963 * @param {WordArray} data The data to unpad.
20964 *
20965 * @static
20966 *
20967 * @example
20968 *
20969 * CryptoJS.pad.Pkcs7.unpad(wordArray);
20970 */
20971 unpad: function (data) {
20972 // Get number of padding bytes from last byte
20973 var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;
20974
20975 // Remove padding
20976 data.sigBytes -= nPaddingBytes;
20977 }
20978 };
20979
20980 /**
20981 * Abstract base block cipher template.
20982 *
20983 * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)
20984 */
20985 var BlockCipher = C_lib.BlockCipher = Cipher.extend({
20986 /**
20987 * Configuration options.
20988 *
20989 * @property {Mode} mode The block mode to use. Default: CBC
20990 * @property {Padding} padding The padding strategy to use. Default: Pkcs7
20991 */
20992 cfg: Cipher.cfg.extend({
20993 mode: CBC,
20994 padding: Pkcs7
20995 }),
20996
20997 reset: function () {
20998 var modeCreator;
20999
21000 // Reset cipher
21001 Cipher.reset.call(this);
21002
21003 // Shortcuts
21004 var cfg = this.cfg;
21005 var iv = cfg.iv;
21006 var mode = cfg.mode;
21007
21008 // Reset block mode
21009 if (this._xformMode == this._ENC_XFORM_MODE) {
21010 modeCreator = mode.createEncryptor;
21011 } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {
21012 modeCreator = mode.createDecryptor;
21013 // Keep at least one block in the buffer for unpadding
21014 this._minBufferSize = 1;
21015 }
21016
21017 if (this._mode && this._mode.__creator == modeCreator) {
21018 this._mode.init(this, iv && iv.words);
21019 } else {
21020 this._mode = modeCreator.call(mode, this, iv && iv.words);
21021 this._mode.__creator = modeCreator;
21022 }
21023 },
21024
21025 _doProcessBlock: function (words, offset) {
21026 this._mode.processBlock(words, offset);
21027 },
21028
21029 _doFinalize: function () {
21030 var finalProcessedBlocks;
21031
21032 // Shortcut
21033 var padding = this.cfg.padding;
21034
21035 // Finalize
21036 if (this._xformMode == this._ENC_XFORM_MODE) {
21037 // Pad data
21038 padding.pad(this._data, this.blockSize);
21039
21040 // Process final blocks
21041 finalProcessedBlocks = this._process(!!'flush');
21042 } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {
21043 // Process final blocks
21044 finalProcessedBlocks = this._process(!!'flush');
21045
21046 // Unpad data
21047 padding.unpad(finalProcessedBlocks);
21048 }
21049
21050 return finalProcessedBlocks;
21051 },
21052
21053 blockSize: 128/32
21054 });
21055
21056 /**
21057 * A collection of cipher parameters.
21058 *
21059 * @property {WordArray} ciphertext The raw ciphertext.
21060 * @property {WordArray} key The key to this ciphertext.
21061 * @property {WordArray} iv The IV used in the ciphering operation.
21062 * @property {WordArray} salt The salt used with a key derivation function.
21063 * @property {Cipher} algorithm The cipher algorithm.
21064 * @property {Mode} mode The block mode used in the ciphering operation.
21065 * @property {Padding} padding The padding scheme used in the ciphering operation.
21066 * @property {number} blockSize The block size of the cipher.
21067 * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.
21068 */
21069 var CipherParams = C_lib.CipherParams = Base.extend({
21070 /**
21071 * Initializes a newly created cipher params object.
21072 *
21073 * @param {Object} cipherParams An object with any of the possible cipher parameters.
21074 *
21075 * @example
21076 *
21077 * var cipherParams = CryptoJS.lib.CipherParams.create({
21078 * ciphertext: ciphertextWordArray,
21079 * key: keyWordArray,
21080 * iv: ivWordArray,
21081 * salt: saltWordArray,
21082 * algorithm: CryptoJS.algo.AES,
21083 * mode: CryptoJS.mode.CBC,
21084 * padding: CryptoJS.pad.PKCS7,
21085 * blockSize: 4,
21086 * formatter: CryptoJS.format.OpenSSL
21087 * });
21088 */
21089 init: function (cipherParams) {
21090 this.mixIn(cipherParams);
21091 },
21092
21093 /**
21094 * Converts this cipher params object to a string.
21095 *
21096 * @param {Format} formatter (Optional) The formatting strategy to use.
21097 *
21098 * @return {string} The stringified cipher params.
21099 *
21100 * @throws Error If neither the formatter nor the default formatter is set.
21101 *
21102 * @example
21103 *
21104 * var string = cipherParams + '';
21105 * var string = cipherParams.toString();
21106 * var string = cipherParams.toString(CryptoJS.format.OpenSSL);
21107 */
21108 toString: function (formatter) {
21109 return (formatter || this.formatter).stringify(this);
21110 }
21111 });
21112
21113 /**
21114 * Format namespace.
21115 */
21116 var C_format = C.format = {};
21117
21118 /**
21119 * OpenSSL formatting strategy.
21120 */
21121 var OpenSSLFormatter = C_format.OpenSSL = {
21122 /**
21123 * Converts a cipher params object to an OpenSSL-compatible string.
21124 *
21125 * @param {CipherParams} cipherParams The cipher params object.
21126 *
21127 * @return {string} The OpenSSL-compatible string.
21128 *
21129 * @static
21130 *
21131 * @example
21132 *
21133 * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);
21134 */
21135 stringify: function (cipherParams) {
21136 var wordArray;
21137
21138 // Shortcuts
21139 var ciphertext = cipherParams.ciphertext;
21140 var salt = cipherParams.salt;
21141
21142 // Format
21143 if (salt) {
21144 wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);
21145 } else {
21146 wordArray = ciphertext;
21147 }
21148
21149 return wordArray.toString(Base64);
21150 },
21151
21152 /**
21153 * Converts an OpenSSL-compatible string to a cipher params object.
21154 *
21155 * @param {string} openSSLStr The OpenSSL-compatible string.
21156 *
21157 * @return {CipherParams} The cipher params object.
21158 *
21159 * @static
21160 *
21161 * @example
21162 *
21163 * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);
21164 */
21165 parse: function (openSSLStr) {
21166 var salt;
21167
21168 // Parse base64
21169 var ciphertext = Base64.parse(openSSLStr);
21170
21171 // Shortcut
21172 var ciphertextWords = ciphertext.words;
21173
21174 // Test for salt
21175 if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {
21176 // Extract salt
21177 salt = WordArray.create(ciphertextWords.slice(2, 4));
21178
21179 // Remove salt from ciphertext
21180 ciphertextWords.splice(0, 4);
21181 ciphertext.sigBytes -= 16;
21182 }
21183
21184 return CipherParams.create({ ciphertext: ciphertext, salt: salt });
21185 }
21186 };
21187
21188 /**
21189 * A cipher wrapper that returns ciphertext as a serializable cipher params object.
21190 */
21191 var SerializableCipher = C_lib.SerializableCipher = Base.extend({
21192 /**
21193 * Configuration options.
21194 *
21195 * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL
21196 */
21197 cfg: Base.extend({
21198 format: OpenSSLFormatter
21199 }),
21200
21201 /**
21202 * Encrypts a message.
21203 *
21204 * @param {Cipher} cipher The cipher algorithm to use.
21205 * @param {WordArray|string} message The message to encrypt.
21206 * @param {WordArray} key The key.
21207 * @param {Object} cfg (Optional) The configuration options to use for this operation.
21208 *
21209 * @return {CipherParams} A cipher params object.
21210 *
21211 * @static
21212 *
21213 * @example
21214 *
21215 * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);
21216 * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });
21217 * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });
21218 */
21219 encrypt: function (cipher, message, key, cfg) {
21220 // Apply config defaults
21221 cfg = this.cfg.extend(cfg);
21222
21223 // Encrypt
21224 var encryptor = cipher.createEncryptor(key, cfg);
21225 var ciphertext = encryptor.finalize(message);
21226
21227 // Shortcut
21228 var cipherCfg = encryptor.cfg;
21229
21230 // Create and return serializable cipher params
21231 return CipherParams.create({
21232 ciphertext: ciphertext,
21233 key: key,
21234 iv: cipherCfg.iv,
21235 algorithm: cipher,
21236 mode: cipherCfg.mode,
21237 padding: cipherCfg.padding,
21238 blockSize: cipher.blockSize,
21239 formatter: cfg.format
21240 });
21241 },
21242
21243 /**
21244 * Decrypts serialized ciphertext.
21245 *
21246 * @param {Cipher} cipher The cipher algorithm to use.
21247 * @param {CipherParams|string} ciphertext The ciphertext to decrypt.
21248 * @param {WordArray} key The key.
21249 * @param {Object} cfg (Optional) The configuration options to use for this operation.
21250 *
21251 * @return {WordArray} The plaintext.
21252 *
21253 * @static
21254 *
21255 * @example
21256 *
21257 * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });
21258 * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });
21259 */
21260 decrypt: function (cipher, ciphertext, key, cfg) {
21261 // Apply config defaults
21262 cfg = this.cfg.extend(cfg);
21263
21264 // Convert string to CipherParams
21265 ciphertext = this._parse(ciphertext, cfg.format);
21266
21267 // Decrypt
21268 var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);
21269
21270 return plaintext;
21271 },
21272
21273 /**
21274 * Converts serialized ciphertext to CipherParams,
21275 * else assumed CipherParams already and returns ciphertext unchanged.
21276 *
21277 * @param {CipherParams|string} ciphertext The ciphertext.
21278 * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.
21279 *
21280 * @return {CipherParams} The unserialized ciphertext.
21281 *
21282 * @static
21283 *
21284 * @example
21285 *
21286 * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);
21287 */
21288 _parse: function (ciphertext, format) {
21289 if (typeof ciphertext == 'string') {
21290 return format.parse(ciphertext, this);
21291 } else {
21292 return ciphertext;
21293 }
21294 }
21295 });
21296
21297 /**
21298 * Key derivation function namespace.
21299 */
21300 var C_kdf = C.kdf = {};
21301
21302 /**
21303 * OpenSSL key derivation function.
21304 */
21305 var OpenSSLKdf = C_kdf.OpenSSL = {
21306 /**
21307 * Derives a key and IV from a password.
21308 *
21309 * @param {string} password The password to derive from.
21310 * @param {number} keySize The size in words of the key to generate.
21311 * @param {number} ivSize The size in words of the IV to generate.
21312 * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.
21313 *
21314 * @return {CipherParams} A cipher params object with the key, IV, and salt.
21315 *
21316 * @static
21317 *
21318 * @example
21319 *
21320 * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);
21321 * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');
21322 */
21323 execute: function (password, keySize, ivSize, salt, hasher) {
21324 // Generate random salt
21325 if (!salt) {
21326 salt = WordArray.random(64/8);
21327 }
21328
21329 // Derive key and IV
21330 if (!hasher) {
21331 var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);
21332 } else {
21333 var key = EvpKDF.create({ keySize: keySize + ivSize, hasher: hasher }).compute(password, salt);
21334 }
21335
21336
21337 // Separate key and IV
21338 var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);
21339 key.sigBytes = keySize * 4;
21340
21341 // Return params
21342 return CipherParams.create({ key: key, iv: iv, salt: salt });
21343 }
21344 };
21345
21346 /**
21347 * A serializable cipher wrapper that derives the key from a password,
21348 * and returns ciphertext as a serializable cipher params object.
21349 */
21350 var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({
21351 /**
21352 * Configuration options.
21353 *
21354 * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL
21355 */
21356 cfg: SerializableCipher.cfg.extend({
21357 kdf: OpenSSLKdf
21358 }),
21359
21360 /**
21361 * Encrypts a message using a password.
21362 *
21363 * @param {Cipher} cipher The cipher algorithm to use.
21364 * @param {WordArray|string} message The message to encrypt.
21365 * @param {string} password The password.
21366 * @param {Object} cfg (Optional) The configuration options to use for this operation.
21367 *
21368 * @return {CipherParams} A cipher params object.
21369 *
21370 * @static
21371 *
21372 * @example
21373 *
21374 * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');
21375 * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });
21376 */
21377 encrypt: function (cipher, message, password, cfg) {
21378 // Apply config defaults
21379 cfg = this.cfg.extend(cfg);
21380
21381 // Derive key and other params
21382 var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher);
21383
21384 // Add IV to config
21385 cfg.iv = derivedParams.iv;
21386
21387 // Encrypt
21388 var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);
21389
21390 // Mix in derived params
21391 ciphertext.mixIn(derivedParams);
21392
21393 return ciphertext;
21394 },
21395
21396 /**
21397 * Decrypts serialized ciphertext using a password.
21398 *
21399 * @param {Cipher} cipher The cipher algorithm to use.
21400 * @param {CipherParams|string} ciphertext The ciphertext to decrypt.
21401 * @param {string} password The password.
21402 * @param {Object} cfg (Optional) The configuration options to use for this operation.
21403 *
21404 * @return {WordArray} The plaintext.
21405 *
21406 * @static
21407 *
21408 * @example
21409 *
21410 * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });
21411 * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });
21412 */
21413 decrypt: function (cipher, ciphertext, password, cfg) {
21414 // Apply config defaults
21415 cfg = this.cfg.extend(cfg);
21416
21417 // Convert string to CipherParams
21418 ciphertext = this._parse(ciphertext, cfg.format);
21419
21420 // Derive key and other params
21421 var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher);
21422
21423 // Add IV to config
21424 cfg.iv = derivedParams.iv;
21425
21426 // Decrypt
21427 var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);
21428
21429 return plaintext;
21430 }
21431 });
21432 }());
21433
21434
21435}));
21436},{"./core":122,"./evpkdf":126}],122:[function(require,module,exports){
21437(function (global){(function (){
21438;(function (root, factory) {
21439 if (typeof exports === "object") {
21440 // CommonJS
21441 module.exports = exports = factory();
21442 }
21443 else if (typeof define === "function" && define.amd) {
21444 // AMD
21445 define([], factory);
21446 }
21447 else {
21448 // Global (browser)
21449 root.CryptoJS = factory();
21450 }
21451}(this, function () {
21452
21453 /*globals window, global, require*/
21454
21455 /**
21456 * CryptoJS core components.
21457 */
21458 var CryptoJS = CryptoJS || (function (Math, undefined) {
21459
21460 var crypto;
21461
21462 // Native crypto from window (Browser)
21463 if (typeof window !== 'undefined' && window.crypto) {
21464 crypto = window.crypto;
21465 }
21466
21467 // Native crypto in web worker (Browser)
21468 if (typeof self !== 'undefined' && self.crypto) {
21469 crypto = self.crypto;
21470 }
21471
21472 // Native crypto from worker
21473 if (typeof globalThis !== 'undefined' && globalThis.crypto) {
21474 crypto = globalThis.crypto;
21475 }
21476
21477 // Native (experimental IE 11) crypto from window (Browser)
21478 if (!crypto && typeof window !== 'undefined' && window.msCrypto) {
21479 crypto = window.msCrypto;
21480 }
21481
21482 // Native crypto from global (NodeJS)
21483 if (!crypto && typeof global !== 'undefined' && global.crypto) {
21484 crypto = global.crypto;
21485 }
21486
21487 // Native crypto import via require (NodeJS)
21488 if (!crypto && typeof require === 'function') {
21489 try {
21490 crypto = require('crypto');
21491 } catch (err) {}
21492 }
21493
21494 /*
21495 * Cryptographically secure pseudorandom number generator
21496 *
21497 * As Math.random() is cryptographically not safe to use
21498 */
21499 var cryptoSecureRandomInt = function () {
21500 if (crypto) {
21501 // Use getRandomValues method (Browser)
21502 if (typeof crypto.getRandomValues === 'function') {
21503 try {
21504 return crypto.getRandomValues(new Uint32Array(1))[0];
21505 } catch (err) {}
21506 }
21507
21508 // Use randomBytes method (NodeJS)
21509 if (typeof crypto.randomBytes === 'function') {
21510 try {
21511 return crypto.randomBytes(4).readInt32LE();
21512 } catch (err) {}
21513 }
21514 }
21515
21516 throw new Error('Native crypto module could not be used to get secure random number.');
21517 };
21518
21519 /*
21520 * Local polyfill of Object.create
21521
21522 */
21523 var create = Object.create || (function () {
21524 function F() {}
21525
21526 return function (obj) {
21527 var subtype;
21528
21529 F.prototype = obj;
21530
21531 subtype = new F();
21532
21533 F.prototype = null;
21534
21535 return subtype;
21536 };
21537 }());
21538
21539 /**
21540 * CryptoJS namespace.
21541 */
21542 var C = {};
21543
21544 /**
21545 * Library namespace.
21546 */
21547 var C_lib = C.lib = {};
21548
21549 /**
21550 * Base object for prototypal inheritance.
21551 */
21552 var Base = C_lib.Base = (function () {
21553
21554
21555 return {
21556 /**
21557 * Creates a new object that inherits from this object.
21558 *
21559 * @param {Object} overrides Properties to copy into the new object.
21560 *
21561 * @return {Object} The new object.
21562 *
21563 * @static
21564 *
21565 * @example
21566 *
21567 * var MyType = CryptoJS.lib.Base.extend({
21568 * field: 'value',
21569 *
21570 * method: function () {
21571 * }
21572 * });
21573 */
21574 extend: function (overrides) {
21575 // Spawn
21576 var subtype = create(this);
21577
21578 // Augment
21579 if (overrides) {
21580 subtype.mixIn(overrides);
21581 }
21582
21583 // Create default initializer
21584 if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {
21585 subtype.init = function () {
21586 subtype.$super.init.apply(this, arguments);
21587 };
21588 }
21589
21590 // Initializer's prototype is the subtype object
21591 subtype.init.prototype = subtype;
21592
21593 // Reference supertype
21594 subtype.$super = this;
21595
21596 return subtype;
21597 },
21598
21599 /**
21600 * Extends this object and runs the init method.
21601 * Arguments to create() will be passed to init().
21602 *
21603 * @return {Object} The new object.
21604 *
21605 * @static
21606 *
21607 * @example
21608 *
21609 * var instance = MyType.create();
21610 */
21611 create: function () {
21612 var instance = this.extend();
21613 instance.init.apply(instance, arguments);
21614
21615 return instance;
21616 },
21617
21618 /**
21619 * Initializes a newly created object.
21620 * Override this method to add some logic when your objects are created.
21621 *
21622 * @example
21623 *
21624 * var MyType = CryptoJS.lib.Base.extend({
21625 * init: function () {
21626 * // ...
21627 * }
21628 * });
21629 */
21630 init: function () {
21631 },
21632
21633 /**
21634 * Copies properties into this object.
21635 *
21636 * @param {Object} properties The properties to mix in.
21637 *
21638 * @example
21639 *
21640 * MyType.mixIn({
21641 * field: 'value'
21642 * });
21643 */
21644 mixIn: function (properties) {
21645 for (var propertyName in properties) {
21646 if (properties.hasOwnProperty(propertyName)) {
21647 this[propertyName] = properties[propertyName];
21648 }
21649 }
21650
21651 // IE won't copy toString using the loop above
21652 if (properties.hasOwnProperty('toString')) {
21653 this.toString = properties.toString;
21654 }
21655 },
21656
21657 /**
21658 * Creates a copy of this object.
21659 *
21660 * @return {Object} The clone.
21661 *
21662 * @example
21663 *
21664 * var clone = instance.clone();
21665 */
21666 clone: function () {
21667 return this.init.prototype.extend(this);
21668 }
21669 };
21670 }());
21671
21672 /**
21673 * An array of 32-bit words.
21674 *
21675 * @property {Array} words The array of 32-bit words.
21676 * @property {number} sigBytes The number of significant bytes in this word array.
21677 */
21678 var WordArray = C_lib.WordArray = Base.extend({
21679 /**
21680 * Initializes a newly created word array.
21681 *
21682 * @param {Array} words (Optional) An array of 32-bit words.
21683 * @param {number} sigBytes (Optional) The number of significant bytes in the words.
21684 *
21685 * @example
21686 *
21687 * var wordArray = CryptoJS.lib.WordArray.create();
21688 * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);
21689 * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);
21690 */
21691 init: function (words, sigBytes) {
21692 words = this.words = words || [];
21693
21694 if (sigBytes != undefined) {
21695 this.sigBytes = sigBytes;
21696 } else {
21697 this.sigBytes = words.length * 4;
21698 }
21699 },
21700
21701 /**
21702 * Converts this word array to a string.
21703 *
21704 * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex
21705 *
21706 * @return {string} The stringified word array.
21707 *
21708 * @example
21709 *
21710 * var string = wordArray + '';
21711 * var string = wordArray.toString();
21712 * var string = wordArray.toString(CryptoJS.enc.Utf8);
21713 */
21714 toString: function (encoder) {
21715 return (encoder || Hex).stringify(this);
21716 },
21717
21718 /**
21719 * Concatenates a word array to this word array.
21720 *
21721 * @param {WordArray} wordArray The word array to append.
21722 *
21723 * @return {WordArray} This word array.
21724 *
21725 * @example
21726 *
21727 * wordArray1.concat(wordArray2);
21728 */
21729 concat: function (wordArray) {
21730 // Shortcuts
21731 var thisWords = this.words;
21732 var thatWords = wordArray.words;
21733 var thisSigBytes = this.sigBytes;
21734 var thatSigBytes = wordArray.sigBytes;
21735
21736 // Clamp excess bits
21737 this.clamp();
21738
21739 // Concat
21740 if (thisSigBytes % 4) {
21741 // Copy one byte at a time
21742 for (var i = 0; i < thatSigBytes; i++) {
21743 var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
21744 thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);
21745 }
21746 } else {
21747 // Copy one word at a time
21748 for (var j = 0; j < thatSigBytes; j += 4) {
21749 thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];
21750 }
21751 }
21752 this.sigBytes += thatSigBytes;
21753
21754 // Chainable
21755 return this;
21756 },
21757
21758 /**
21759 * Removes insignificant bits.
21760 *
21761 * @example
21762 *
21763 * wordArray.clamp();
21764 */
21765 clamp: function () {
21766 // Shortcuts
21767 var words = this.words;
21768 var sigBytes = this.sigBytes;
21769
21770 // Clamp
21771 words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);
21772 words.length = Math.ceil(sigBytes / 4);
21773 },
21774
21775 /**
21776 * Creates a copy of this word array.
21777 *
21778 * @return {WordArray} The clone.
21779 *
21780 * @example
21781 *
21782 * var clone = wordArray.clone();
21783 */
21784 clone: function () {
21785 var clone = Base.clone.call(this);
21786 clone.words = this.words.slice(0);
21787
21788 return clone;
21789 },
21790
21791 /**
21792 * Creates a word array filled with random bytes.
21793 *
21794 * @param {number} nBytes The number of random bytes to generate.
21795 *
21796 * @return {WordArray} The random word array.
21797 *
21798 * @static
21799 *
21800 * @example
21801 *
21802 * var wordArray = CryptoJS.lib.WordArray.random(16);
21803 */
21804 random: function (nBytes) {
21805 var words = [];
21806
21807 for (var i = 0; i < nBytes; i += 4) {
21808 words.push(cryptoSecureRandomInt());
21809 }
21810
21811 return new WordArray.init(words, nBytes);
21812 }
21813 });
21814
21815 /**
21816 * Encoder namespace.
21817 */
21818 var C_enc = C.enc = {};
21819
21820 /**
21821 * Hex encoding strategy.
21822 */
21823 var Hex = C_enc.Hex = {
21824 /**
21825 * Converts a word array to a hex string.
21826 *
21827 * @param {WordArray} wordArray The word array.
21828 *
21829 * @return {string} The hex string.
21830 *
21831 * @static
21832 *
21833 * @example
21834 *
21835 * var hexString = CryptoJS.enc.Hex.stringify(wordArray);
21836 */
21837 stringify: function (wordArray) {
21838 // Shortcuts
21839 var words = wordArray.words;
21840 var sigBytes = wordArray.sigBytes;
21841
21842 // Convert
21843 var hexChars = [];
21844 for (var i = 0; i < sigBytes; i++) {
21845 var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
21846 hexChars.push((bite >>> 4).toString(16));
21847 hexChars.push((bite & 0x0f).toString(16));
21848 }
21849
21850 return hexChars.join('');
21851 },
21852
21853 /**
21854 * Converts a hex string to a word array.
21855 *
21856 * @param {string} hexStr The hex string.
21857 *
21858 * @return {WordArray} The word array.
21859 *
21860 * @static
21861 *
21862 * @example
21863 *
21864 * var wordArray = CryptoJS.enc.Hex.parse(hexString);
21865 */
21866 parse: function (hexStr) {
21867 // Shortcut
21868 var hexStrLength = hexStr.length;
21869
21870 // Convert
21871 var words = [];
21872 for (var i = 0; i < hexStrLength; i += 2) {
21873 words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);
21874 }
21875
21876 return new WordArray.init(words, hexStrLength / 2);
21877 }
21878 };
21879
21880 /**
21881 * Latin1 encoding strategy.
21882 */
21883 var Latin1 = C_enc.Latin1 = {
21884 /**
21885 * Converts a word array to a Latin1 string.
21886 *
21887 * @param {WordArray} wordArray The word array.
21888 *
21889 * @return {string} The Latin1 string.
21890 *
21891 * @static
21892 *
21893 * @example
21894 *
21895 * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);
21896 */
21897 stringify: function (wordArray) {
21898 // Shortcuts
21899 var words = wordArray.words;
21900 var sigBytes = wordArray.sigBytes;
21901
21902 // Convert
21903 var latin1Chars = [];
21904 for (var i = 0; i < sigBytes; i++) {
21905 var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
21906 latin1Chars.push(String.fromCharCode(bite));
21907 }
21908
21909 return latin1Chars.join('');
21910 },
21911
21912 /**
21913 * Converts a Latin1 string to a word array.
21914 *
21915 * @param {string} latin1Str The Latin1 string.
21916 *
21917 * @return {WordArray} The word array.
21918 *
21919 * @static
21920 *
21921 * @example
21922 *
21923 * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);
21924 */
21925 parse: function (latin1Str) {
21926 // Shortcut
21927 var latin1StrLength = latin1Str.length;
21928
21929 // Convert
21930 var words = [];
21931 for (var i = 0; i < latin1StrLength; i++) {
21932 words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);
21933 }
21934
21935 return new WordArray.init(words, latin1StrLength);
21936 }
21937 };
21938
21939 /**
21940 * UTF-8 encoding strategy.
21941 */
21942 var Utf8 = C_enc.Utf8 = {
21943 /**
21944 * Converts a word array to a UTF-8 string.
21945 *
21946 * @param {WordArray} wordArray The word array.
21947 *
21948 * @return {string} The UTF-8 string.
21949 *
21950 * @static
21951 *
21952 * @example
21953 *
21954 * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);
21955 */
21956 stringify: function (wordArray) {
21957 try {
21958 return decodeURIComponent(escape(Latin1.stringify(wordArray)));
21959 } catch (e) {
21960 throw new Error('Malformed UTF-8 data');
21961 }
21962 },
21963
21964 /**
21965 * Converts a UTF-8 string to a word array.
21966 *
21967 * @param {string} utf8Str The UTF-8 string.
21968 *
21969 * @return {WordArray} The word array.
21970 *
21971 * @static
21972 *
21973 * @example
21974 *
21975 * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);
21976 */
21977 parse: function (utf8Str) {
21978 return Latin1.parse(unescape(encodeURIComponent(utf8Str)));
21979 }
21980 };
21981
21982 /**
21983 * Abstract buffered block algorithm template.
21984 *
21985 * The property blockSize must be implemented in a concrete subtype.
21986 *
21987 * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0
21988 */
21989 var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({
21990 /**
21991 * Resets this block algorithm's data buffer to its initial state.
21992 *
21993 * @example
21994 *
21995 * bufferedBlockAlgorithm.reset();
21996 */
21997 reset: function () {
21998 // Initial values
21999 this._data = new WordArray.init();
22000 this._nDataBytes = 0;
22001 },
22002
22003 /**
22004 * Adds new data to this block algorithm's buffer.
22005 *
22006 * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.
22007 *
22008 * @example
22009 *
22010 * bufferedBlockAlgorithm._append('data');
22011 * bufferedBlockAlgorithm._append(wordArray);
22012 */
22013 _append: function (data) {
22014 // Convert string to WordArray, else assume WordArray already
22015 if (typeof data == 'string') {
22016 data = Utf8.parse(data);
22017 }
22018
22019 // Append
22020 this._data.concat(data);
22021 this._nDataBytes += data.sigBytes;
22022 },
22023
22024 /**
22025 * Processes available data blocks.
22026 *
22027 * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.
22028 *
22029 * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.
22030 *
22031 * @return {WordArray} The processed data.
22032 *
22033 * @example
22034 *
22035 * var processedData = bufferedBlockAlgorithm._process();
22036 * var processedData = bufferedBlockAlgorithm._process(!!'flush');
22037 */
22038 _process: function (doFlush) {
22039 var processedWords;
22040
22041 // Shortcuts
22042 var data = this._data;
22043 var dataWords = data.words;
22044 var dataSigBytes = data.sigBytes;
22045 var blockSize = this.blockSize;
22046 var blockSizeBytes = blockSize * 4;
22047
22048 // Count blocks ready
22049 var nBlocksReady = dataSigBytes / blockSizeBytes;
22050 if (doFlush) {
22051 // Round up to include partial blocks
22052 nBlocksReady = Math.ceil(nBlocksReady);
22053 } else {
22054 // Round down to include only full blocks,
22055 // less the number of blocks that must remain in the buffer
22056 nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);
22057 }
22058
22059 // Count words ready
22060 var nWordsReady = nBlocksReady * blockSize;
22061
22062 // Count bytes ready
22063 var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);
22064
22065 // Process blocks
22066 if (nWordsReady) {
22067 for (var offset = 0; offset < nWordsReady; offset += blockSize) {
22068 // Perform concrete-algorithm logic
22069 this._doProcessBlock(dataWords, offset);
22070 }
22071
22072 // Remove processed words
22073 processedWords = dataWords.splice(0, nWordsReady);
22074 data.sigBytes -= nBytesReady;
22075 }
22076
22077 // Return processed words
22078 return new WordArray.init(processedWords, nBytesReady);
22079 },
22080
22081 /**
22082 * Creates a copy of this object.
22083 *
22084 * @return {Object} The clone.
22085 *
22086 * @example
22087 *
22088 * var clone = bufferedBlockAlgorithm.clone();
22089 */
22090 clone: function () {
22091 var clone = Base.clone.call(this);
22092 clone._data = this._data.clone();
22093
22094 return clone;
22095 },
22096
22097 _minBufferSize: 0
22098 });
22099
22100 /**
22101 * Abstract hasher template.
22102 *
22103 * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)
22104 */
22105 var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({
22106 /**
22107 * Configuration options.
22108 */
22109 cfg: Base.extend(),
22110
22111 /**
22112 * Initializes a newly created hasher.
22113 *
22114 * @param {Object} cfg (Optional) The configuration options to use for this hash computation.
22115 *
22116 * @example
22117 *
22118 * var hasher = CryptoJS.algo.SHA256.create();
22119 */
22120 init: function (cfg) {
22121 // Apply config defaults
22122 this.cfg = this.cfg.extend(cfg);
22123
22124 // Set initial values
22125 this.reset();
22126 },
22127
22128 /**
22129 * Resets this hasher to its initial state.
22130 *
22131 * @example
22132 *
22133 * hasher.reset();
22134 */
22135 reset: function () {
22136 // Reset data buffer
22137 BufferedBlockAlgorithm.reset.call(this);
22138
22139 // Perform concrete-hasher logic
22140 this._doReset();
22141 },
22142
22143 /**
22144 * Updates this hasher with a message.
22145 *
22146 * @param {WordArray|string} messageUpdate The message to append.
22147 *
22148 * @return {Hasher} This hasher.
22149 *
22150 * @example
22151 *
22152 * hasher.update('message');
22153 * hasher.update(wordArray);
22154 */
22155 update: function (messageUpdate) {
22156 // Append
22157 this._append(messageUpdate);
22158
22159 // Update the hash
22160 this._process();
22161
22162 // Chainable
22163 return this;
22164 },
22165
22166 /**
22167 * Finalizes the hash computation.
22168 * Note that the finalize operation is effectively a destructive, read-once operation.
22169 *
22170 * @param {WordArray|string} messageUpdate (Optional) A final message update.
22171 *
22172 * @return {WordArray} The hash.
22173 *
22174 * @example
22175 *
22176 * var hash = hasher.finalize();
22177 * var hash = hasher.finalize('message');
22178 * var hash = hasher.finalize(wordArray);
22179 */
22180 finalize: function (messageUpdate) {
22181 // Final message update
22182 if (messageUpdate) {
22183 this._append(messageUpdate);
22184 }
22185
22186 // Perform concrete-hasher logic
22187 var hash = this._doFinalize();
22188
22189 return hash;
22190 },
22191
22192 blockSize: 512/32,
22193
22194 /**
22195 * Creates a shortcut function to a hasher's object interface.
22196 *
22197 * @param {Hasher} hasher The hasher to create a helper for.
22198 *
22199 * @return {Function} The shortcut function.
22200 *
22201 * @static
22202 *
22203 * @example
22204 *
22205 * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);
22206 */
22207 _createHelper: function (hasher) {
22208 return function (message, cfg) {
22209 return new hasher.init(cfg).finalize(message);
22210 };
22211 },
22212
22213 /**
22214 * Creates a shortcut function to the HMAC's object interface.
22215 *
22216 * @param {Hasher} hasher The hasher to use in this HMAC helper.
22217 *
22218 * @return {Function} The shortcut function.
22219 *
22220 * @static
22221 *
22222 * @example
22223 *
22224 * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);
22225 */
22226 _createHmacHelper: function (hasher) {
22227 return function (message, key) {
22228 return new C_algo.HMAC.init(hasher, key).finalize(message);
22229 };
22230 }
22231 });
22232
22233 /**
22234 * Algorithm namespace.
22235 */
22236 var C_algo = C.algo = {};
22237
22238 return C;
22239 }(Math));
22240
22241
22242 return CryptoJS;
22243
22244}));
22245}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
22246},{"crypto":113}],123:[function(require,module,exports){
22247;(function (root, factory) {
22248 if (typeof exports === "object") {
22249 // CommonJS
22250 module.exports = exports = factory(require("./core"));
22251 }
22252 else if (typeof define === "function" && define.amd) {
22253 // AMD
22254 define(["./core"], factory);
22255 }
22256 else {
22257 // Global (browser)
22258 factory(root.CryptoJS);
22259 }
22260}(this, function (CryptoJS) {
22261
22262 (function () {
22263 // Shortcuts
22264 var C = CryptoJS;
22265 var C_lib = C.lib;
22266 var WordArray = C_lib.WordArray;
22267 var C_enc = C.enc;
22268
22269 /**
22270 * Base64 encoding strategy.
22271 */
22272 var Base64 = C_enc.Base64 = {
22273 /**
22274 * Converts a word array to a Base64 string.
22275 *
22276 * @param {WordArray} wordArray The word array.
22277 *
22278 * @return {string} The Base64 string.
22279 *
22280 * @static
22281 *
22282 * @example
22283 *
22284 * var base64String = CryptoJS.enc.Base64.stringify(wordArray);
22285 */
22286 stringify: function (wordArray) {
22287 // Shortcuts
22288 var words = wordArray.words;
22289 var sigBytes = wordArray.sigBytes;
22290 var map = this._map;
22291
22292 // Clamp excess bits
22293 wordArray.clamp();
22294
22295 // Convert
22296 var base64Chars = [];
22297 for (var i = 0; i < sigBytes; i += 3) {
22298 var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
22299 var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;
22300 var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;
22301
22302 var triplet = (byte1 << 16) | (byte2 << 8) | byte3;
22303
22304 for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {
22305 base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));
22306 }
22307 }
22308
22309 // Add padding
22310 var paddingChar = map.charAt(64);
22311 if (paddingChar) {
22312 while (base64Chars.length % 4) {
22313 base64Chars.push(paddingChar);
22314 }
22315 }
22316
22317 return base64Chars.join('');
22318 },
22319
22320 /**
22321 * Converts a Base64 string to a word array.
22322 *
22323 * @param {string} base64Str The Base64 string.
22324 *
22325 * @return {WordArray} The word array.
22326 *
22327 * @static
22328 *
22329 * @example
22330 *
22331 * var wordArray = CryptoJS.enc.Base64.parse(base64String);
22332 */
22333 parse: function (base64Str) {
22334 // Shortcuts
22335 var base64StrLength = base64Str.length;
22336 var map = this._map;
22337 var reverseMap = this._reverseMap;
22338
22339 if (!reverseMap) {
22340 reverseMap = this._reverseMap = [];
22341 for (var j = 0; j < map.length; j++) {
22342 reverseMap[map.charCodeAt(j)] = j;
22343 }
22344 }
22345
22346 // Ignore padding
22347 var paddingChar = map.charAt(64);
22348 if (paddingChar) {
22349 var paddingIndex = base64Str.indexOf(paddingChar);
22350 if (paddingIndex !== -1) {
22351 base64StrLength = paddingIndex;
22352 }
22353 }
22354
22355 // Convert
22356 return parseLoop(base64Str, base64StrLength, reverseMap);
22357
22358 },
22359
22360 _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
22361 };
22362
22363 function parseLoop(base64Str, base64StrLength, reverseMap) {
22364 var words = [];
22365 var nBytes = 0;
22366 for (var i = 0; i < base64StrLength; i++) {
22367 if (i % 4) {
22368 var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);
22369 var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);
22370 var bitsCombined = bits1 | bits2;
22371 words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);
22372 nBytes++;
22373 }
22374 }
22375 return WordArray.create(words, nBytes);
22376 }
22377 }());
22378
22379
22380 return CryptoJS.enc.Base64;
22381
22382}));
22383},{"./core":122}],124:[function(require,module,exports){
22384;(function (root, factory) {
22385 if (typeof exports === "object") {
22386 // CommonJS
22387 module.exports = exports = factory(require("./core"));
22388 }
22389 else if (typeof define === "function" && define.amd) {
22390 // AMD
22391 define(["./core"], factory);
22392 }
22393 else {
22394 // Global (browser)
22395 factory(root.CryptoJS);
22396 }
22397}(this, function (CryptoJS) {
22398
22399 (function () {
22400 // Shortcuts
22401 var C = CryptoJS;
22402 var C_lib = C.lib;
22403 var WordArray = C_lib.WordArray;
22404 var C_enc = C.enc;
22405
22406 /**
22407 * Base64url encoding strategy.
22408 */
22409 var Base64url = C_enc.Base64url = {
22410 /**
22411 * Converts a word array to a Base64url string.
22412 *
22413 * @param {WordArray} wordArray The word array.
22414 *
22415 * @param {boolean} urlSafe Whether to use url safe
22416 *
22417 * @return {string} The Base64url string.
22418 *
22419 * @static
22420 *
22421 * @example
22422 *
22423 * var base64String = CryptoJS.enc.Base64url.stringify(wordArray);
22424 */
22425 stringify: function (wordArray, urlSafe) {
22426 if (urlSafe === undefined) {
22427 urlSafe = true
22428 }
22429 // Shortcuts
22430 var words = wordArray.words;
22431 var sigBytes = wordArray.sigBytes;
22432 var map = urlSafe ? this._safe_map : this._map;
22433
22434 // Clamp excess bits
22435 wordArray.clamp();
22436
22437 // Convert
22438 var base64Chars = [];
22439 for (var i = 0; i < sigBytes; i += 3) {
22440 var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
22441 var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;
22442 var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;
22443
22444 var triplet = (byte1 << 16) | (byte2 << 8) | byte3;
22445
22446 for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {
22447 base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));
22448 }
22449 }
22450
22451 // Add padding
22452 var paddingChar = map.charAt(64);
22453 if (paddingChar) {
22454 while (base64Chars.length % 4) {
22455 base64Chars.push(paddingChar);
22456 }
22457 }
22458
22459 return base64Chars.join('');
22460 },
22461
22462 /**
22463 * Converts a Base64url string to a word array.
22464 *
22465 * @param {string} base64Str The Base64url string.
22466 *
22467 * @param {boolean} urlSafe Whether to use url safe
22468 *
22469 * @return {WordArray} The word array.
22470 *
22471 * @static
22472 *
22473 * @example
22474 *
22475 * var wordArray = CryptoJS.enc.Base64url.parse(base64String);
22476 */
22477 parse: function (base64Str, urlSafe) {
22478 if (urlSafe === undefined) {
22479 urlSafe = true
22480 }
22481
22482 // Shortcuts
22483 var base64StrLength = base64Str.length;
22484 var map = urlSafe ? this._safe_map : this._map;
22485 var reverseMap = this._reverseMap;
22486
22487 if (!reverseMap) {
22488 reverseMap = this._reverseMap = [];
22489 for (var j = 0; j < map.length; j++) {
22490 reverseMap[map.charCodeAt(j)] = j;
22491 }
22492 }
22493
22494 // Ignore padding
22495 var paddingChar = map.charAt(64);
22496 if (paddingChar) {
22497 var paddingIndex = base64Str.indexOf(paddingChar);
22498 if (paddingIndex !== -1) {
22499 base64StrLength = paddingIndex;
22500 }
22501 }
22502
22503 // Convert
22504 return parseLoop(base64Str, base64StrLength, reverseMap);
22505
22506 },
22507
22508 _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',
22509 _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',
22510 };
22511
22512 function parseLoop(base64Str, base64StrLength, reverseMap) {
22513 var words = [];
22514 var nBytes = 0;
22515 for (var i = 0; i < base64StrLength; i++) {
22516 if (i % 4) {
22517 var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);
22518 var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);
22519 var bitsCombined = bits1 | bits2;
22520 words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);
22521 nBytes++;
22522 }
22523 }
22524 return WordArray.create(words, nBytes);
22525 }
22526 }());
22527
22528
22529 return CryptoJS.enc.Base64url;
22530
22531}));
22532},{"./core":122}],125:[function(require,module,exports){
22533;(function (root, factory) {
22534 if (typeof exports === "object") {
22535 // CommonJS
22536 module.exports = exports = factory(require("./core"));
22537 }
22538 else if (typeof define === "function" && define.amd) {
22539 // AMD
22540 define(["./core"], factory);
22541 }
22542 else {
22543 // Global (browser)
22544 factory(root.CryptoJS);
22545 }
22546}(this, function (CryptoJS) {
22547
22548 (function () {
22549 // Shortcuts
22550 var C = CryptoJS;
22551 var C_lib = C.lib;
22552 var WordArray = C_lib.WordArray;
22553 var C_enc = C.enc;
22554
22555 /**
22556 * UTF-16 BE encoding strategy.
22557 */
22558 var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {
22559 /**
22560 * Converts a word array to a UTF-16 BE string.
22561 *
22562 * @param {WordArray} wordArray The word array.
22563 *
22564 * @return {string} The UTF-16 BE string.
22565 *
22566 * @static
22567 *
22568 * @example
22569 *
22570 * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);
22571 */
22572 stringify: function (wordArray) {
22573 // Shortcuts
22574 var words = wordArray.words;
22575 var sigBytes = wordArray.sigBytes;
22576
22577 // Convert
22578 var utf16Chars = [];
22579 for (var i = 0; i < sigBytes; i += 2) {
22580 var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;
22581 utf16Chars.push(String.fromCharCode(codePoint));
22582 }
22583
22584 return utf16Chars.join('');
22585 },
22586
22587 /**
22588 * Converts a UTF-16 BE string to a word array.
22589 *
22590 * @param {string} utf16Str The UTF-16 BE string.
22591 *
22592 * @return {WordArray} The word array.
22593 *
22594 * @static
22595 *
22596 * @example
22597 *
22598 * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);
22599 */
22600 parse: function (utf16Str) {
22601 // Shortcut
22602 var utf16StrLength = utf16Str.length;
22603
22604 // Convert
22605 var words = [];
22606 for (var i = 0; i < utf16StrLength; i++) {
22607 words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);
22608 }
22609
22610 return WordArray.create(words, utf16StrLength * 2);
22611 }
22612 };
22613
22614 /**
22615 * UTF-16 LE encoding strategy.
22616 */
22617 C_enc.Utf16LE = {
22618 /**
22619 * Converts a word array to a UTF-16 LE string.
22620 *
22621 * @param {WordArray} wordArray The word array.
22622 *
22623 * @return {string} The UTF-16 LE string.
22624 *
22625 * @static
22626 *
22627 * @example
22628 *
22629 * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);
22630 */
22631 stringify: function (wordArray) {
22632 // Shortcuts
22633 var words = wordArray.words;
22634 var sigBytes = wordArray.sigBytes;
22635
22636 // Convert
22637 var utf16Chars = [];
22638 for (var i = 0; i < sigBytes; i += 2) {
22639 var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);
22640 utf16Chars.push(String.fromCharCode(codePoint));
22641 }
22642
22643 return utf16Chars.join('');
22644 },
22645
22646 /**
22647 * Converts a UTF-16 LE string to a word array.
22648 *
22649 * @param {string} utf16Str The UTF-16 LE string.
22650 *
22651 * @return {WordArray} The word array.
22652 *
22653 * @static
22654 *
22655 * @example
22656 *
22657 * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);
22658 */
22659 parse: function (utf16Str) {
22660 // Shortcut
22661 var utf16StrLength = utf16Str.length;
22662
22663 // Convert
22664 var words = [];
22665 for (var i = 0; i < utf16StrLength; i++) {
22666 words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));
22667 }
22668
22669 return WordArray.create(words, utf16StrLength * 2);
22670 }
22671 };
22672
22673 function swapEndian(word) {
22674 return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);
22675 }
22676 }());
22677
22678
22679 return CryptoJS.enc.Utf16;
22680
22681}));
22682},{"./core":122}],126:[function(require,module,exports){
22683;(function (root, factory, undef) {
22684 if (typeof exports === "object") {
22685 // CommonJS
22686 module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac"));
22687 }
22688 else if (typeof define === "function" && define.amd) {
22689 // AMD
22690 define(["./core", "./sha1", "./hmac"], factory);
22691 }
22692 else {
22693 // Global (browser)
22694 factory(root.CryptoJS);
22695 }
22696}(this, function (CryptoJS) {
22697
22698 (function () {
22699 // Shortcuts
22700 var C = CryptoJS;
22701 var C_lib = C.lib;
22702 var Base = C_lib.Base;
22703 var WordArray = C_lib.WordArray;
22704 var C_algo = C.algo;
22705 var MD5 = C_algo.MD5;
22706
22707 /**
22708 * This key derivation function is meant to conform with EVP_BytesToKey.
22709 * www.openssl.org/docs/crypto/EVP_BytesToKey.html
22710 */
22711 var EvpKDF = C_algo.EvpKDF = Base.extend({
22712 /**
22713 * Configuration options.
22714 *
22715 * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)
22716 * @property {Hasher} hasher The hash algorithm to use. Default: MD5
22717 * @property {number} iterations The number of iterations to perform. Default: 1
22718 */
22719 cfg: Base.extend({
22720 keySize: 128/32,
22721 hasher: MD5,
22722 iterations: 1
22723 }),
22724
22725 /**
22726 * Initializes a newly created key derivation function.
22727 *
22728 * @param {Object} cfg (Optional) The configuration options to use for the derivation.
22729 *
22730 * @example
22731 *
22732 * var kdf = CryptoJS.algo.EvpKDF.create();
22733 * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });
22734 * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });
22735 */
22736 init: function (cfg) {
22737 this.cfg = this.cfg.extend(cfg);
22738 },
22739
22740 /**
22741 * Derives a key from a password.
22742 *
22743 * @param {WordArray|string} password The password.
22744 * @param {WordArray|string} salt A salt.
22745 *
22746 * @return {WordArray} The derived key.
22747 *
22748 * @example
22749 *
22750 * var key = kdf.compute(password, salt);
22751 */
22752 compute: function (password, salt) {
22753 var block;
22754
22755 // Shortcut
22756 var cfg = this.cfg;
22757
22758 // Init hasher
22759 var hasher = cfg.hasher.create();
22760
22761 // Initial values
22762 var derivedKey = WordArray.create();
22763
22764 // Shortcuts
22765 var derivedKeyWords = derivedKey.words;
22766 var keySize = cfg.keySize;
22767 var iterations = cfg.iterations;
22768
22769 // Generate key
22770 while (derivedKeyWords.length < keySize) {
22771 if (block) {
22772 hasher.update(block);
22773 }
22774 block = hasher.update(password).finalize(salt);
22775 hasher.reset();
22776
22777 // Iterations
22778 for (var i = 1; i < iterations; i++) {
22779 block = hasher.finalize(block);
22780 hasher.reset();
22781 }
22782
22783 derivedKey.concat(block);
22784 }
22785 derivedKey.sigBytes = keySize * 4;
22786
22787 return derivedKey;
22788 }
22789 });
22790
22791 /**
22792 * Derives a key from a password.
22793 *
22794 * @param {WordArray|string} password The password.
22795 * @param {WordArray|string} salt A salt.
22796 * @param {Object} cfg (Optional) The configuration options to use for this computation.
22797 *
22798 * @return {WordArray} The derived key.
22799 *
22800 * @static
22801 *
22802 * @example
22803 *
22804 * var key = CryptoJS.EvpKDF(password, salt);
22805 * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });
22806 * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });
22807 */
22808 C.EvpKDF = function (password, salt, cfg) {
22809 return EvpKDF.create(cfg).compute(password, salt);
22810 };
22811 }());
22812
22813
22814 return CryptoJS.EvpKDF;
22815
22816}));
22817},{"./core":122,"./hmac":128,"./sha1":147}],127:[function(require,module,exports){
22818;(function (root, factory, undef) {
22819 if (typeof exports === "object") {
22820 // CommonJS
22821 module.exports = exports = factory(require("./core"), require("./cipher-core"));
22822 }
22823 else if (typeof define === "function" && define.amd) {
22824 // AMD
22825 define(["./core", "./cipher-core"], factory);
22826 }
22827 else {
22828 // Global (browser)
22829 factory(root.CryptoJS);
22830 }
22831}(this, function (CryptoJS) {
22832
22833 (function (undefined) {
22834 // Shortcuts
22835 var C = CryptoJS;
22836 var C_lib = C.lib;
22837 var CipherParams = C_lib.CipherParams;
22838 var C_enc = C.enc;
22839 var Hex = C_enc.Hex;
22840 var C_format = C.format;
22841
22842 var HexFormatter = C_format.Hex = {
22843 /**
22844 * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.
22845 *
22846 * @param {CipherParams} cipherParams The cipher params object.
22847 *
22848 * @return {string} The hexadecimally encoded string.
22849 *
22850 * @static
22851 *
22852 * @example
22853 *
22854 * var hexString = CryptoJS.format.Hex.stringify(cipherParams);
22855 */
22856 stringify: function (cipherParams) {
22857 return cipherParams.ciphertext.toString(Hex);
22858 },
22859
22860 /**
22861 * Converts a hexadecimally encoded ciphertext string to a cipher params object.
22862 *
22863 * @param {string} input The hexadecimally encoded string.
22864 *
22865 * @return {CipherParams} The cipher params object.
22866 *
22867 * @static
22868 *
22869 * @example
22870 *
22871 * var cipherParams = CryptoJS.format.Hex.parse(hexString);
22872 */
22873 parse: function (input) {
22874 var ciphertext = Hex.parse(input);
22875 return CipherParams.create({ ciphertext: ciphertext });
22876 }
22877 };
22878 }());
22879
22880
22881 return CryptoJS.format.Hex;
22882
22883}));
22884},{"./cipher-core":121,"./core":122}],128:[function(require,module,exports){
22885;(function (root, factory) {
22886 if (typeof exports === "object") {
22887 // CommonJS
22888 module.exports = exports = factory(require("./core"));
22889 }
22890 else if (typeof define === "function" && define.amd) {
22891 // AMD
22892 define(["./core"], factory);
22893 }
22894 else {
22895 // Global (browser)
22896 factory(root.CryptoJS);
22897 }
22898}(this, function (CryptoJS) {
22899
22900 (function () {
22901 // Shortcuts
22902 var C = CryptoJS;
22903 var C_lib = C.lib;
22904 var Base = C_lib.Base;
22905 var C_enc = C.enc;
22906 var Utf8 = C_enc.Utf8;
22907 var C_algo = C.algo;
22908
22909 /**
22910 * HMAC algorithm.
22911 */
22912 var HMAC = C_algo.HMAC = Base.extend({
22913 /**
22914 * Initializes a newly created HMAC.
22915 *
22916 * @param {Hasher} hasher The hash algorithm to use.
22917 * @param {WordArray|string} key The secret key.
22918 *
22919 * @example
22920 *
22921 * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);
22922 */
22923 init: function (hasher, key) {
22924 // Init hasher
22925 hasher = this._hasher = new hasher.init();
22926
22927 // Convert string to WordArray, else assume WordArray already
22928 if (typeof key == 'string') {
22929 key = Utf8.parse(key);
22930 }
22931
22932 // Shortcuts
22933 var hasherBlockSize = hasher.blockSize;
22934 var hasherBlockSizeBytes = hasherBlockSize * 4;
22935
22936 // Allow arbitrary length keys
22937 if (key.sigBytes > hasherBlockSizeBytes) {
22938 key = hasher.finalize(key);
22939 }
22940
22941 // Clamp excess bits
22942 key.clamp();
22943
22944 // Clone key for inner and outer pads
22945 var oKey = this._oKey = key.clone();
22946 var iKey = this._iKey = key.clone();
22947
22948 // Shortcuts
22949 var oKeyWords = oKey.words;
22950 var iKeyWords = iKey.words;
22951
22952 // XOR keys with pad constants
22953 for (var i = 0; i < hasherBlockSize; i++) {
22954 oKeyWords[i] ^= 0x5c5c5c5c;
22955 iKeyWords[i] ^= 0x36363636;
22956 }
22957 oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;
22958
22959 // Set initial values
22960 this.reset();
22961 },
22962
22963 /**
22964 * Resets this HMAC to its initial state.
22965 *
22966 * @example
22967 *
22968 * hmacHasher.reset();
22969 */
22970 reset: function () {
22971 // Shortcut
22972 var hasher = this._hasher;
22973
22974 // Reset
22975 hasher.reset();
22976 hasher.update(this._iKey);
22977 },
22978
22979 /**
22980 * Updates this HMAC with a message.
22981 *
22982 * @param {WordArray|string} messageUpdate The message to append.
22983 *
22984 * @return {HMAC} This HMAC instance.
22985 *
22986 * @example
22987 *
22988 * hmacHasher.update('message');
22989 * hmacHasher.update(wordArray);
22990 */
22991 update: function (messageUpdate) {
22992 this._hasher.update(messageUpdate);
22993
22994 // Chainable
22995 return this;
22996 },
22997
22998 /**
22999 * Finalizes the HMAC computation.
23000 * Note that the finalize operation is effectively a destructive, read-once operation.
23001 *
23002 * @param {WordArray|string} messageUpdate (Optional) A final message update.
23003 *
23004 * @return {WordArray} The HMAC.
23005 *
23006 * @example
23007 *
23008 * var hmac = hmacHasher.finalize();
23009 * var hmac = hmacHasher.finalize('message');
23010 * var hmac = hmacHasher.finalize(wordArray);
23011 */
23012 finalize: function (messageUpdate) {
23013 // Shortcut
23014 var hasher = this._hasher;
23015
23016 // Compute HMAC
23017 var innerHash = hasher.finalize(messageUpdate);
23018 hasher.reset();
23019 var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));
23020
23021 return hmac;
23022 }
23023 });
23024 }());
23025
23026
23027}));
23028},{"./core":122}],129:[function(require,module,exports){
23029;(function (root, factory, undef) {
23030 if (typeof exports === "object") {
23031 // CommonJS
23032 module.exports = exports = factory(require("./core"), require("./x64-core"), require("./lib-typedarrays"), require("./enc-utf16"), require("./enc-base64"), require("./enc-base64url"), require("./md5"), require("./sha1"), require("./sha256"), require("./sha224"), require("./sha512"), require("./sha384"), require("./sha3"), require("./ripemd160"), require("./hmac"), require("./pbkdf2"), require("./evpkdf"), require("./cipher-core"), require("./mode-cfb"), require("./mode-ctr"), require("./mode-ctr-gladman"), require("./mode-ofb"), require("./mode-ecb"), require("./pad-ansix923"), require("./pad-iso10126"), require("./pad-iso97971"), require("./pad-zeropadding"), require("./pad-nopadding"), require("./format-hex"), require("./aes"), require("./tripledes"), require("./rc4"), require("./rabbit"), require("./rabbit-legacy"), require("./blowfish"));
23033 }
23034 else if (typeof define === "function" && define.amd) {
23035 // AMD
23036 define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./enc-base64url", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy", "./blowfish"], factory);
23037 }
23038 else {
23039 // Global (browser)
23040 root.CryptoJS = factory(root.CryptoJS);
23041 }
23042}(this, function (CryptoJS) {
23043
23044 return CryptoJS;
23045
23046}));
23047},{"./aes":119,"./blowfish":120,"./cipher-core":121,"./core":122,"./enc-base64":123,"./enc-base64url":124,"./enc-utf16":125,"./evpkdf":126,"./format-hex":127,"./hmac":128,"./lib-typedarrays":130,"./md5":131,"./mode-cfb":132,"./mode-ctr":134,"./mode-ctr-gladman":133,"./mode-ecb":135,"./mode-ofb":136,"./pad-ansix923":137,"./pad-iso10126":138,"./pad-iso97971":139,"./pad-nopadding":140,"./pad-zeropadding":141,"./pbkdf2":142,"./rabbit":144,"./rabbit-legacy":143,"./rc4":145,"./ripemd160":146,"./sha1":147,"./sha224":148,"./sha256":149,"./sha3":150,"./sha384":151,"./sha512":152,"./tripledes":153,"./x64-core":154}],130:[function(require,module,exports){
23048;(function (root, factory) {
23049 if (typeof exports === "object") {
23050 // CommonJS
23051 module.exports = exports = factory(require("./core"));
23052 }
23053 else if (typeof define === "function" && define.amd) {
23054 // AMD
23055 define(["./core"], factory);
23056 }
23057 else {
23058 // Global (browser)
23059 factory(root.CryptoJS);
23060 }
23061}(this, function (CryptoJS) {
23062
23063 (function () {
23064 // Check if typed arrays are supported
23065 if (typeof ArrayBuffer != 'function') {
23066 return;
23067 }
23068
23069 // Shortcuts
23070 var C = CryptoJS;
23071 var C_lib = C.lib;
23072 var WordArray = C_lib.WordArray;
23073
23074 // Reference original init
23075 var superInit = WordArray.init;
23076
23077 // Augment WordArray.init to handle typed arrays
23078 var subInit = WordArray.init = function (typedArray) {
23079 // Convert buffers to uint8
23080 if (typedArray instanceof ArrayBuffer) {
23081 typedArray = new Uint8Array(typedArray);
23082 }
23083
23084 // Convert other array views to uint8
23085 if (
23086 typedArray instanceof Int8Array ||
23087 (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) ||
23088 typedArray instanceof Int16Array ||
23089 typedArray instanceof Uint16Array ||
23090 typedArray instanceof Int32Array ||
23091 typedArray instanceof Uint32Array ||
23092 typedArray instanceof Float32Array ||
23093 typedArray instanceof Float64Array
23094 ) {
23095 typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);
23096 }
23097
23098 // Handle Uint8Array
23099 if (typedArray instanceof Uint8Array) {
23100 // Shortcut
23101 var typedArrayByteLength = typedArray.byteLength;
23102
23103 // Extract bytes
23104 var words = [];
23105 for (var i = 0; i < typedArrayByteLength; i++) {
23106 words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);
23107 }
23108
23109 // Initialize this word array
23110 superInit.call(this, words, typedArrayByteLength);
23111 } else {
23112 // Else call normal init
23113 superInit.apply(this, arguments);
23114 }
23115 };
23116
23117 subInit.prototype = WordArray;
23118 }());
23119
23120
23121 return CryptoJS.lib.WordArray;
23122
23123}));
23124},{"./core":122}],131:[function(require,module,exports){
23125;(function (root, factory) {
23126 if (typeof exports === "object") {
23127 // CommonJS
23128 module.exports = exports = factory(require("./core"));
23129 }
23130 else if (typeof define === "function" && define.amd) {
23131 // AMD
23132 define(["./core"], factory);
23133 }
23134 else {
23135 // Global (browser)
23136 factory(root.CryptoJS);
23137 }
23138}(this, function (CryptoJS) {
23139
23140 (function (Math) {
23141 // Shortcuts
23142 var C = CryptoJS;
23143 var C_lib = C.lib;
23144 var WordArray = C_lib.WordArray;
23145 var Hasher = C_lib.Hasher;
23146 var C_algo = C.algo;
23147
23148 // Constants table
23149 var T = [];
23150
23151 // Compute constants
23152 (function () {
23153 for (var i = 0; i < 64; i++) {
23154 T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;
23155 }
23156 }());
23157
23158 /**
23159 * MD5 hash algorithm.
23160 */
23161 var MD5 = C_algo.MD5 = Hasher.extend({
23162 _doReset: function () {
23163 this._hash = new WordArray.init([
23164 0x67452301, 0xefcdab89,
23165 0x98badcfe, 0x10325476
23166 ]);
23167 },
23168
23169 _doProcessBlock: function (M, offset) {
23170 // Swap endian
23171 for (var i = 0; i < 16; i++) {
23172 // Shortcuts
23173 var offset_i = offset + i;
23174 var M_offset_i = M[offset_i];
23175
23176 M[offset_i] = (
23177 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
23178 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
23179 );
23180 }
23181
23182 // Shortcuts
23183 var H = this._hash.words;
23184
23185 var M_offset_0 = M[offset + 0];
23186 var M_offset_1 = M[offset + 1];
23187 var M_offset_2 = M[offset + 2];
23188 var M_offset_3 = M[offset + 3];
23189 var M_offset_4 = M[offset + 4];
23190 var M_offset_5 = M[offset + 5];
23191 var M_offset_6 = M[offset + 6];
23192 var M_offset_7 = M[offset + 7];
23193 var M_offset_8 = M[offset + 8];
23194 var M_offset_9 = M[offset + 9];
23195 var M_offset_10 = M[offset + 10];
23196 var M_offset_11 = M[offset + 11];
23197 var M_offset_12 = M[offset + 12];
23198 var M_offset_13 = M[offset + 13];
23199 var M_offset_14 = M[offset + 14];
23200 var M_offset_15 = M[offset + 15];
23201
23202 // Working variables
23203 var a = H[0];
23204 var b = H[1];
23205 var c = H[2];
23206 var d = H[3];
23207
23208 // Computation
23209 a = FF(a, b, c, d, M_offset_0, 7, T[0]);
23210 d = FF(d, a, b, c, M_offset_1, 12, T[1]);
23211 c = FF(c, d, a, b, M_offset_2, 17, T[2]);
23212 b = FF(b, c, d, a, M_offset_3, 22, T[3]);
23213 a = FF(a, b, c, d, M_offset_4, 7, T[4]);
23214 d = FF(d, a, b, c, M_offset_5, 12, T[5]);
23215 c = FF(c, d, a, b, M_offset_6, 17, T[6]);
23216 b = FF(b, c, d, a, M_offset_7, 22, T[7]);
23217 a = FF(a, b, c, d, M_offset_8, 7, T[8]);
23218 d = FF(d, a, b, c, M_offset_9, 12, T[9]);
23219 c = FF(c, d, a, b, M_offset_10, 17, T[10]);
23220 b = FF(b, c, d, a, M_offset_11, 22, T[11]);
23221 a = FF(a, b, c, d, M_offset_12, 7, T[12]);
23222 d = FF(d, a, b, c, M_offset_13, 12, T[13]);
23223 c = FF(c, d, a, b, M_offset_14, 17, T[14]);
23224 b = FF(b, c, d, a, M_offset_15, 22, T[15]);
23225
23226 a = GG(a, b, c, d, M_offset_1, 5, T[16]);
23227 d = GG(d, a, b, c, M_offset_6, 9, T[17]);
23228 c = GG(c, d, a, b, M_offset_11, 14, T[18]);
23229 b = GG(b, c, d, a, M_offset_0, 20, T[19]);
23230 a = GG(a, b, c, d, M_offset_5, 5, T[20]);
23231 d = GG(d, a, b, c, M_offset_10, 9, T[21]);
23232 c = GG(c, d, a, b, M_offset_15, 14, T[22]);
23233 b = GG(b, c, d, a, M_offset_4, 20, T[23]);
23234 a = GG(a, b, c, d, M_offset_9, 5, T[24]);
23235 d = GG(d, a, b, c, M_offset_14, 9, T[25]);
23236 c = GG(c, d, a, b, M_offset_3, 14, T[26]);
23237 b = GG(b, c, d, a, M_offset_8, 20, T[27]);
23238 a = GG(a, b, c, d, M_offset_13, 5, T[28]);
23239 d = GG(d, a, b, c, M_offset_2, 9, T[29]);
23240 c = GG(c, d, a, b, M_offset_7, 14, T[30]);
23241 b = GG(b, c, d, a, M_offset_12, 20, T[31]);
23242
23243 a = HH(a, b, c, d, M_offset_5, 4, T[32]);
23244 d = HH(d, a, b, c, M_offset_8, 11, T[33]);
23245 c = HH(c, d, a, b, M_offset_11, 16, T[34]);
23246 b = HH(b, c, d, a, M_offset_14, 23, T[35]);
23247 a = HH(a, b, c, d, M_offset_1, 4, T[36]);
23248 d = HH(d, a, b, c, M_offset_4, 11, T[37]);
23249 c = HH(c, d, a, b, M_offset_7, 16, T[38]);
23250 b = HH(b, c, d, a, M_offset_10, 23, T[39]);
23251 a = HH(a, b, c, d, M_offset_13, 4, T[40]);
23252 d = HH(d, a, b, c, M_offset_0, 11, T[41]);
23253 c = HH(c, d, a, b, M_offset_3, 16, T[42]);
23254 b = HH(b, c, d, a, M_offset_6, 23, T[43]);
23255 a = HH(a, b, c, d, M_offset_9, 4, T[44]);
23256 d = HH(d, a, b, c, M_offset_12, 11, T[45]);
23257 c = HH(c, d, a, b, M_offset_15, 16, T[46]);
23258 b = HH(b, c, d, a, M_offset_2, 23, T[47]);
23259
23260 a = II(a, b, c, d, M_offset_0, 6, T[48]);
23261 d = II(d, a, b, c, M_offset_7, 10, T[49]);
23262 c = II(c, d, a, b, M_offset_14, 15, T[50]);
23263 b = II(b, c, d, a, M_offset_5, 21, T[51]);
23264 a = II(a, b, c, d, M_offset_12, 6, T[52]);
23265 d = II(d, a, b, c, M_offset_3, 10, T[53]);
23266 c = II(c, d, a, b, M_offset_10, 15, T[54]);
23267 b = II(b, c, d, a, M_offset_1, 21, T[55]);
23268 a = II(a, b, c, d, M_offset_8, 6, T[56]);
23269 d = II(d, a, b, c, M_offset_15, 10, T[57]);
23270 c = II(c, d, a, b, M_offset_6, 15, T[58]);
23271 b = II(b, c, d, a, M_offset_13, 21, T[59]);
23272 a = II(a, b, c, d, M_offset_4, 6, T[60]);
23273 d = II(d, a, b, c, M_offset_11, 10, T[61]);
23274 c = II(c, d, a, b, M_offset_2, 15, T[62]);
23275 b = II(b, c, d, a, M_offset_9, 21, T[63]);
23276
23277 // Intermediate hash value
23278 H[0] = (H[0] + a) | 0;
23279 H[1] = (H[1] + b) | 0;
23280 H[2] = (H[2] + c) | 0;
23281 H[3] = (H[3] + d) | 0;
23282 },
23283
23284 _doFinalize: function () {
23285 // Shortcuts
23286 var data = this._data;
23287 var dataWords = data.words;
23288
23289 var nBitsTotal = this._nDataBytes * 8;
23290 var nBitsLeft = data.sigBytes * 8;
23291
23292 // Add padding
23293 dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
23294
23295 var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);
23296 var nBitsTotalL = nBitsTotal;
23297 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (
23298 (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |
23299 (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)
23300 );
23301 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
23302 (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |
23303 (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)
23304 );
23305
23306 data.sigBytes = (dataWords.length + 1) * 4;
23307
23308 // Hash final blocks
23309 this._process();
23310
23311 // Shortcuts
23312 var hash = this._hash;
23313 var H = hash.words;
23314
23315 // Swap endian
23316 for (var i = 0; i < 4; i++) {
23317 // Shortcut
23318 var H_i = H[i];
23319
23320 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
23321 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);
23322 }
23323
23324 // Return final computed hash
23325 return hash;
23326 },
23327
23328 clone: function () {
23329 var clone = Hasher.clone.call(this);
23330 clone._hash = this._hash.clone();
23331
23332 return clone;
23333 }
23334 });
23335
23336 function FF(a, b, c, d, x, s, t) {
23337 var n = a + ((b & c) | (~b & d)) + x + t;
23338 return ((n << s) | (n >>> (32 - s))) + b;
23339 }
23340
23341 function GG(a, b, c, d, x, s, t) {
23342 var n = a + ((b & d) | (c & ~d)) + x + t;
23343 return ((n << s) | (n >>> (32 - s))) + b;
23344 }
23345
23346 function HH(a, b, c, d, x, s, t) {
23347 var n = a + (b ^ c ^ d) + x + t;
23348 return ((n << s) | (n >>> (32 - s))) + b;
23349 }
23350
23351 function II(a, b, c, d, x, s, t) {
23352 var n = a + (c ^ (b | ~d)) + x + t;
23353 return ((n << s) | (n >>> (32 - s))) + b;
23354 }
23355
23356 /**
23357 * Shortcut function to the hasher's object interface.
23358 *
23359 * @param {WordArray|string} message The message to hash.
23360 *
23361 * @return {WordArray} The hash.
23362 *
23363 * @static
23364 *
23365 * @example
23366 *
23367 * var hash = CryptoJS.MD5('message');
23368 * var hash = CryptoJS.MD5(wordArray);
23369 */
23370 C.MD5 = Hasher._createHelper(MD5);
23371
23372 /**
23373 * Shortcut function to the HMAC's object interface.
23374 *
23375 * @param {WordArray|string} message The message to hash.
23376 * @param {WordArray|string} key The secret key.
23377 *
23378 * @return {WordArray} The HMAC.
23379 *
23380 * @static
23381 *
23382 * @example
23383 *
23384 * var hmac = CryptoJS.HmacMD5(message, key);
23385 */
23386 C.HmacMD5 = Hasher._createHmacHelper(MD5);
23387 }(Math));
23388
23389
23390 return CryptoJS.MD5;
23391
23392}));
23393},{"./core":122}],132:[function(require,module,exports){
23394;(function (root, factory, undef) {
23395 if (typeof exports === "object") {
23396 // CommonJS
23397 module.exports = exports = factory(require("./core"), require("./cipher-core"));
23398 }
23399 else if (typeof define === "function" && define.amd) {
23400 // AMD
23401 define(["./core", "./cipher-core"], factory);
23402 }
23403 else {
23404 // Global (browser)
23405 factory(root.CryptoJS);
23406 }
23407}(this, function (CryptoJS) {
23408
23409 /**
23410 * Cipher Feedback block mode.
23411 */
23412 CryptoJS.mode.CFB = (function () {
23413 var CFB = CryptoJS.lib.BlockCipherMode.extend();
23414
23415 CFB.Encryptor = CFB.extend({
23416 processBlock: function (words, offset) {
23417 // Shortcuts
23418 var cipher = this._cipher;
23419 var blockSize = cipher.blockSize;
23420
23421 generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);
23422
23423 // Remember this block to use with next block
23424 this._prevBlock = words.slice(offset, offset + blockSize);
23425 }
23426 });
23427
23428 CFB.Decryptor = CFB.extend({
23429 processBlock: function (words, offset) {
23430 // Shortcuts
23431 var cipher = this._cipher;
23432 var blockSize = cipher.blockSize;
23433
23434 // Remember this block to use with next block
23435 var thisBlock = words.slice(offset, offset + blockSize);
23436
23437 generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);
23438
23439 // This block becomes the previous block
23440 this._prevBlock = thisBlock;
23441 }
23442 });
23443
23444 function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {
23445 var keystream;
23446
23447 // Shortcut
23448 var iv = this._iv;
23449
23450 // Generate keystream
23451 if (iv) {
23452 keystream = iv.slice(0);
23453
23454 // Remove IV for subsequent blocks
23455 this._iv = undefined;
23456 } else {
23457 keystream = this._prevBlock;
23458 }
23459 cipher.encryptBlock(keystream, 0);
23460
23461 // Encrypt
23462 for (var i = 0; i < blockSize; i++) {
23463 words[offset + i] ^= keystream[i];
23464 }
23465 }
23466
23467 return CFB;
23468 }());
23469
23470
23471 return CryptoJS.mode.CFB;
23472
23473}));
23474},{"./cipher-core":121,"./core":122}],133:[function(require,module,exports){
23475;(function (root, factory, undef) {
23476 if (typeof exports === "object") {
23477 // CommonJS
23478 module.exports = exports = factory(require("./core"), require("./cipher-core"));
23479 }
23480 else if (typeof define === "function" && define.amd) {
23481 // AMD
23482 define(["./core", "./cipher-core"], factory);
23483 }
23484 else {
23485 // Global (browser)
23486 factory(root.CryptoJS);
23487 }
23488}(this, function (CryptoJS) {
23489
23490 /** @preserve
23491 * Counter block mode compatible with Dr Brian Gladman fileenc.c
23492 * derived from CryptoJS.mode.CTR
23493 * Jan Hruby jhruby.web@gmail.com
23494 */
23495 CryptoJS.mode.CTRGladman = (function () {
23496 var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();
23497
23498 function incWord(word)
23499 {
23500 if (((word >> 24) & 0xff) === 0xff) { //overflow
23501 var b1 = (word >> 16)&0xff;
23502 var b2 = (word >> 8)&0xff;
23503 var b3 = word & 0xff;
23504
23505 if (b1 === 0xff) // overflow b1
23506 {
23507 b1 = 0;
23508 if (b2 === 0xff)
23509 {
23510 b2 = 0;
23511 if (b3 === 0xff)
23512 {
23513 b3 = 0;
23514 }
23515 else
23516 {
23517 ++b3;
23518 }
23519 }
23520 else
23521 {
23522 ++b2;
23523 }
23524 }
23525 else
23526 {
23527 ++b1;
23528 }
23529
23530 word = 0;
23531 word += (b1 << 16);
23532 word += (b2 << 8);
23533 word += b3;
23534 }
23535 else
23536 {
23537 word += (0x01 << 24);
23538 }
23539 return word;
23540 }
23541
23542 function incCounter(counter)
23543 {
23544 if ((counter[0] = incWord(counter[0])) === 0)
23545 {
23546 // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8
23547 counter[1] = incWord(counter[1]);
23548 }
23549 return counter;
23550 }
23551
23552 var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({
23553 processBlock: function (words, offset) {
23554 // Shortcuts
23555 var cipher = this._cipher
23556 var blockSize = cipher.blockSize;
23557 var iv = this._iv;
23558 var counter = this._counter;
23559
23560 // Generate keystream
23561 if (iv) {
23562 counter = this._counter = iv.slice(0);
23563
23564 // Remove IV for subsequent blocks
23565 this._iv = undefined;
23566 }
23567
23568 incCounter(counter);
23569
23570 var keystream = counter.slice(0);
23571 cipher.encryptBlock(keystream, 0);
23572
23573 // Encrypt
23574 for (var i = 0; i < blockSize; i++) {
23575 words[offset + i] ^= keystream[i];
23576 }
23577 }
23578 });
23579
23580 CTRGladman.Decryptor = Encryptor;
23581
23582 return CTRGladman;
23583 }());
23584
23585
23586
23587
23588 return CryptoJS.mode.CTRGladman;
23589
23590}));
23591},{"./cipher-core":121,"./core":122}],134:[function(require,module,exports){
23592;(function (root, factory, undef) {
23593 if (typeof exports === "object") {
23594 // CommonJS
23595 module.exports = exports = factory(require("./core"), require("./cipher-core"));
23596 }
23597 else if (typeof define === "function" && define.amd) {
23598 // AMD
23599 define(["./core", "./cipher-core"], factory);
23600 }
23601 else {
23602 // Global (browser)
23603 factory(root.CryptoJS);
23604 }
23605}(this, function (CryptoJS) {
23606
23607 /**
23608 * Counter block mode.
23609 */
23610 CryptoJS.mode.CTR = (function () {
23611 var CTR = CryptoJS.lib.BlockCipherMode.extend();
23612
23613 var Encryptor = CTR.Encryptor = CTR.extend({
23614 processBlock: function (words, offset) {
23615 // Shortcuts
23616 var cipher = this._cipher
23617 var blockSize = cipher.blockSize;
23618 var iv = this._iv;
23619 var counter = this._counter;
23620
23621 // Generate keystream
23622 if (iv) {
23623 counter = this._counter = iv.slice(0);
23624
23625 // Remove IV for subsequent blocks
23626 this._iv = undefined;
23627 }
23628 var keystream = counter.slice(0);
23629 cipher.encryptBlock(keystream, 0);
23630
23631 // Increment counter
23632 counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0
23633
23634 // Encrypt
23635 for (var i = 0; i < blockSize; i++) {
23636 words[offset + i] ^= keystream[i];
23637 }
23638 }
23639 });
23640
23641 CTR.Decryptor = Encryptor;
23642
23643 return CTR;
23644 }());
23645
23646
23647 return CryptoJS.mode.CTR;
23648
23649}));
23650},{"./cipher-core":121,"./core":122}],135:[function(require,module,exports){
23651;(function (root, factory, undef) {
23652 if (typeof exports === "object") {
23653 // CommonJS
23654 module.exports = exports = factory(require("./core"), require("./cipher-core"));
23655 }
23656 else if (typeof define === "function" && define.amd) {
23657 // AMD
23658 define(["./core", "./cipher-core"], factory);
23659 }
23660 else {
23661 // Global (browser)
23662 factory(root.CryptoJS);
23663 }
23664}(this, function (CryptoJS) {
23665
23666 /**
23667 * Electronic Codebook block mode.
23668 */
23669 CryptoJS.mode.ECB = (function () {
23670 var ECB = CryptoJS.lib.BlockCipherMode.extend();
23671
23672 ECB.Encryptor = ECB.extend({
23673 processBlock: function (words, offset) {
23674 this._cipher.encryptBlock(words, offset);
23675 }
23676 });
23677
23678 ECB.Decryptor = ECB.extend({
23679 processBlock: function (words, offset) {
23680 this._cipher.decryptBlock(words, offset);
23681 }
23682 });
23683
23684 return ECB;
23685 }());
23686
23687
23688 return CryptoJS.mode.ECB;
23689
23690}));
23691},{"./cipher-core":121,"./core":122}],136:[function(require,module,exports){
23692;(function (root, factory, undef) {
23693 if (typeof exports === "object") {
23694 // CommonJS
23695 module.exports = exports = factory(require("./core"), require("./cipher-core"));
23696 }
23697 else if (typeof define === "function" && define.amd) {
23698 // AMD
23699 define(["./core", "./cipher-core"], factory);
23700 }
23701 else {
23702 // Global (browser)
23703 factory(root.CryptoJS);
23704 }
23705}(this, function (CryptoJS) {
23706
23707 /**
23708 * Output Feedback block mode.
23709 */
23710 CryptoJS.mode.OFB = (function () {
23711 var OFB = CryptoJS.lib.BlockCipherMode.extend();
23712
23713 var Encryptor = OFB.Encryptor = OFB.extend({
23714 processBlock: function (words, offset) {
23715 // Shortcuts
23716 var cipher = this._cipher
23717 var blockSize = cipher.blockSize;
23718 var iv = this._iv;
23719 var keystream = this._keystream;
23720
23721 // Generate keystream
23722 if (iv) {
23723 keystream = this._keystream = iv.slice(0);
23724
23725 // Remove IV for subsequent blocks
23726 this._iv = undefined;
23727 }
23728 cipher.encryptBlock(keystream, 0);
23729
23730 // Encrypt
23731 for (var i = 0; i < blockSize; i++) {
23732 words[offset + i] ^= keystream[i];
23733 }
23734 }
23735 });
23736
23737 OFB.Decryptor = Encryptor;
23738
23739 return OFB;
23740 }());
23741
23742
23743 return CryptoJS.mode.OFB;
23744
23745}));
23746},{"./cipher-core":121,"./core":122}],137:[function(require,module,exports){
23747;(function (root, factory, undef) {
23748 if (typeof exports === "object") {
23749 // CommonJS
23750 module.exports = exports = factory(require("./core"), require("./cipher-core"));
23751 }
23752 else if (typeof define === "function" && define.amd) {
23753 // AMD
23754 define(["./core", "./cipher-core"], factory);
23755 }
23756 else {
23757 // Global (browser)
23758 factory(root.CryptoJS);
23759 }
23760}(this, function (CryptoJS) {
23761
23762 /**
23763 * ANSI X.923 padding strategy.
23764 */
23765 CryptoJS.pad.AnsiX923 = {
23766 pad: function (data, blockSize) {
23767 // Shortcuts
23768 var dataSigBytes = data.sigBytes;
23769 var blockSizeBytes = blockSize * 4;
23770
23771 // Count padding bytes
23772 var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;
23773
23774 // Compute last byte position
23775 var lastBytePos = dataSigBytes + nPaddingBytes - 1;
23776
23777 // Pad
23778 data.clamp();
23779 data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);
23780 data.sigBytes += nPaddingBytes;
23781 },
23782
23783 unpad: function (data) {
23784 // Get number of padding bytes from last byte
23785 var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;
23786
23787 // Remove padding
23788 data.sigBytes -= nPaddingBytes;
23789 }
23790 };
23791
23792
23793 return CryptoJS.pad.Ansix923;
23794
23795}));
23796},{"./cipher-core":121,"./core":122}],138:[function(require,module,exports){
23797;(function (root, factory, undef) {
23798 if (typeof exports === "object") {
23799 // CommonJS
23800 module.exports = exports = factory(require("./core"), require("./cipher-core"));
23801 }
23802 else if (typeof define === "function" && define.amd) {
23803 // AMD
23804 define(["./core", "./cipher-core"], factory);
23805 }
23806 else {
23807 // Global (browser)
23808 factory(root.CryptoJS);
23809 }
23810}(this, function (CryptoJS) {
23811
23812 /**
23813 * ISO 10126 padding strategy.
23814 */
23815 CryptoJS.pad.Iso10126 = {
23816 pad: function (data, blockSize) {
23817 // Shortcut
23818 var blockSizeBytes = blockSize * 4;
23819
23820 // Count padding bytes
23821 var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;
23822
23823 // Pad
23824 data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).
23825 concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));
23826 },
23827
23828 unpad: function (data) {
23829 // Get number of padding bytes from last byte
23830 var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;
23831
23832 // Remove padding
23833 data.sigBytes -= nPaddingBytes;
23834 }
23835 };
23836
23837
23838 return CryptoJS.pad.Iso10126;
23839
23840}));
23841},{"./cipher-core":121,"./core":122}],139:[function(require,module,exports){
23842;(function (root, factory, undef) {
23843 if (typeof exports === "object") {
23844 // CommonJS
23845 module.exports = exports = factory(require("./core"), require("./cipher-core"));
23846 }
23847 else if (typeof define === "function" && define.amd) {
23848 // AMD
23849 define(["./core", "./cipher-core"], factory);
23850 }
23851 else {
23852 // Global (browser)
23853 factory(root.CryptoJS);
23854 }
23855}(this, function (CryptoJS) {
23856
23857 /**
23858 * ISO/IEC 9797-1 Padding Method 2.
23859 */
23860 CryptoJS.pad.Iso97971 = {
23861 pad: function (data, blockSize) {
23862 // Add 0x80 byte
23863 data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));
23864
23865 // Zero pad the rest
23866 CryptoJS.pad.ZeroPadding.pad(data, blockSize);
23867 },
23868
23869 unpad: function (data) {
23870 // Remove zero padding
23871 CryptoJS.pad.ZeroPadding.unpad(data);
23872
23873 // Remove one more byte -- the 0x80 byte
23874 data.sigBytes--;
23875 }
23876 };
23877
23878
23879 return CryptoJS.pad.Iso97971;
23880
23881}));
23882},{"./cipher-core":121,"./core":122}],140:[function(require,module,exports){
23883;(function (root, factory, undef) {
23884 if (typeof exports === "object") {
23885 // CommonJS
23886 module.exports = exports = factory(require("./core"), require("./cipher-core"));
23887 }
23888 else if (typeof define === "function" && define.amd) {
23889 // AMD
23890 define(["./core", "./cipher-core"], factory);
23891 }
23892 else {
23893 // Global (browser)
23894 factory(root.CryptoJS);
23895 }
23896}(this, function (CryptoJS) {
23897
23898 /**
23899 * A noop padding strategy.
23900 */
23901 CryptoJS.pad.NoPadding = {
23902 pad: function () {
23903 },
23904
23905 unpad: function () {
23906 }
23907 };
23908
23909
23910 return CryptoJS.pad.NoPadding;
23911
23912}));
23913},{"./cipher-core":121,"./core":122}],141:[function(require,module,exports){
23914;(function (root, factory, undef) {
23915 if (typeof exports === "object") {
23916 // CommonJS
23917 module.exports = exports = factory(require("./core"), require("./cipher-core"));
23918 }
23919 else if (typeof define === "function" && define.amd) {
23920 // AMD
23921 define(["./core", "./cipher-core"], factory);
23922 }
23923 else {
23924 // Global (browser)
23925 factory(root.CryptoJS);
23926 }
23927}(this, function (CryptoJS) {
23928
23929 /**
23930 * Zero padding strategy.
23931 */
23932 CryptoJS.pad.ZeroPadding = {
23933 pad: function (data, blockSize) {
23934 // Shortcut
23935 var blockSizeBytes = blockSize * 4;
23936
23937 // Pad
23938 data.clamp();
23939 data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);
23940 },
23941
23942 unpad: function (data) {
23943 // Shortcut
23944 var dataWords = data.words;
23945
23946 // Unpad
23947 var i = data.sigBytes - 1;
23948 for (var i = data.sigBytes - 1; i >= 0; i--) {
23949 if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {
23950 data.sigBytes = i + 1;
23951 break;
23952 }
23953 }
23954 }
23955 };
23956
23957
23958 return CryptoJS.pad.ZeroPadding;
23959
23960}));
23961},{"./cipher-core":121,"./core":122}],142:[function(require,module,exports){
23962;(function (root, factory, undef) {
23963 if (typeof exports === "object") {
23964 // CommonJS
23965 module.exports = exports = factory(require("./core"), require("./sha256"), require("./hmac"));
23966 }
23967 else if (typeof define === "function" && define.amd) {
23968 // AMD
23969 define(["./core", "./sha256", "./hmac"], factory);
23970 }
23971 else {
23972 // Global (browser)
23973 factory(root.CryptoJS);
23974 }
23975}(this, function (CryptoJS) {
23976
23977 (function () {
23978 // Shortcuts
23979 var C = CryptoJS;
23980 var C_lib = C.lib;
23981 var Base = C_lib.Base;
23982 var WordArray = C_lib.WordArray;
23983 var C_algo = C.algo;
23984 var SHA256 = C_algo.SHA256;
23985 var HMAC = C_algo.HMAC;
23986
23987 /**
23988 * Password-Based Key Derivation Function 2 algorithm.
23989 */
23990 var PBKDF2 = C_algo.PBKDF2 = Base.extend({
23991 /**
23992 * Configuration options.
23993 *
23994 * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)
23995 * @property {Hasher} hasher The hasher to use. Default: SHA256
23996 * @property {number} iterations The number of iterations to perform. Default: 250000
23997 */
23998 cfg: Base.extend({
23999 keySize: 128/32,
24000 hasher: SHA256,
24001 iterations: 250000
24002 }),
24003
24004 /**
24005 * Initializes a newly created key derivation function.
24006 *
24007 * @param {Object} cfg (Optional) The configuration options to use for the derivation.
24008 *
24009 * @example
24010 *
24011 * var kdf = CryptoJS.algo.PBKDF2.create();
24012 * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });
24013 * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });
24014 */
24015 init: function (cfg) {
24016 this.cfg = this.cfg.extend(cfg);
24017 },
24018
24019 /**
24020 * Computes the Password-Based Key Derivation Function 2.
24021 *
24022 * @param {WordArray|string} password The password.
24023 * @param {WordArray|string} salt A salt.
24024 *
24025 * @return {WordArray} The derived key.
24026 *
24027 * @example
24028 *
24029 * var key = kdf.compute(password, salt);
24030 */
24031 compute: function (password, salt) {
24032 // Shortcut
24033 var cfg = this.cfg;
24034
24035 // Init HMAC
24036 var hmac = HMAC.create(cfg.hasher, password);
24037
24038 // Initial values
24039 var derivedKey = WordArray.create();
24040 var blockIndex = WordArray.create([0x00000001]);
24041
24042 // Shortcuts
24043 var derivedKeyWords = derivedKey.words;
24044 var blockIndexWords = blockIndex.words;
24045 var keySize = cfg.keySize;
24046 var iterations = cfg.iterations;
24047
24048 // Generate key
24049 while (derivedKeyWords.length < keySize) {
24050 var block = hmac.update(salt).finalize(blockIndex);
24051 hmac.reset();
24052
24053 // Shortcuts
24054 var blockWords = block.words;
24055 var blockWordsLength = blockWords.length;
24056
24057 // Iterations
24058 var intermediate = block;
24059 for (var i = 1; i < iterations; i++) {
24060 intermediate = hmac.finalize(intermediate);
24061 hmac.reset();
24062
24063 // Shortcut
24064 var intermediateWords = intermediate.words;
24065
24066 // XOR intermediate with block
24067 for (var j = 0; j < blockWordsLength; j++) {
24068 blockWords[j] ^= intermediateWords[j];
24069 }
24070 }
24071
24072 derivedKey.concat(block);
24073 blockIndexWords[0]++;
24074 }
24075 derivedKey.sigBytes = keySize * 4;
24076
24077 return derivedKey;
24078 }
24079 });
24080
24081 /**
24082 * Computes the Password-Based Key Derivation Function 2.
24083 *
24084 * @param {WordArray|string} password The password.
24085 * @param {WordArray|string} salt A salt.
24086 * @param {Object} cfg (Optional) The configuration options to use for this computation.
24087 *
24088 * @return {WordArray} The derived key.
24089 *
24090 * @static
24091 *
24092 * @example
24093 *
24094 * var key = CryptoJS.PBKDF2(password, salt);
24095 * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });
24096 * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });
24097 */
24098 C.PBKDF2 = function (password, salt, cfg) {
24099 return PBKDF2.create(cfg).compute(password, salt);
24100 };
24101 }());
24102
24103
24104 return CryptoJS.PBKDF2;
24105
24106}));
24107},{"./core":122,"./hmac":128,"./sha256":149}],143:[function(require,module,exports){
24108;(function (root, factory, undef) {
24109 if (typeof exports === "object") {
24110 // CommonJS
24111 module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core"));
24112 }
24113 else if (typeof define === "function" && define.amd) {
24114 // AMD
24115 define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
24116 }
24117 else {
24118 // Global (browser)
24119 factory(root.CryptoJS);
24120 }
24121}(this, function (CryptoJS) {
24122
24123 (function () {
24124 // Shortcuts
24125 var C = CryptoJS;
24126 var C_lib = C.lib;
24127 var StreamCipher = C_lib.StreamCipher;
24128 var C_algo = C.algo;
24129
24130 // Reusable objects
24131 var S = [];
24132 var C_ = [];
24133 var G = [];
24134
24135 /**
24136 * Rabbit stream cipher algorithm.
24137 *
24138 * This is a legacy version that neglected to convert the key to little-endian.
24139 * This error doesn't affect the cipher's security,
24140 * but it does affect its compatibility with other implementations.
24141 */
24142 var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({
24143 _doReset: function () {
24144 // Shortcuts
24145 var K = this._key.words;
24146 var iv = this.cfg.iv;
24147
24148 // Generate initial state values
24149 var X = this._X = [
24150 K[0], (K[3] << 16) | (K[2] >>> 16),
24151 K[1], (K[0] << 16) | (K[3] >>> 16),
24152 K[2], (K[1] << 16) | (K[0] >>> 16),
24153 K[3], (K[2] << 16) | (K[1] >>> 16)
24154 ];
24155
24156 // Generate initial counter values
24157 var C = this._C = [
24158 (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),
24159 (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),
24160 (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),
24161 (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)
24162 ];
24163
24164 // Carry bit
24165 this._b = 0;
24166
24167 // Iterate the system four times
24168 for (var i = 0; i < 4; i++) {
24169 nextState.call(this);
24170 }
24171
24172 // Modify the counters
24173 for (var i = 0; i < 8; i++) {
24174 C[i] ^= X[(i + 4) & 7];
24175 }
24176
24177 // IV setup
24178 if (iv) {
24179 // Shortcuts
24180 var IV = iv.words;
24181 var IV_0 = IV[0];
24182 var IV_1 = IV[1];
24183
24184 // Generate four subvectors
24185 var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);
24186 var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);
24187 var i1 = (i0 >>> 16) | (i2 & 0xffff0000);
24188 var i3 = (i2 << 16) | (i0 & 0x0000ffff);
24189
24190 // Modify counter values
24191 C[0] ^= i0;
24192 C[1] ^= i1;
24193 C[2] ^= i2;
24194 C[3] ^= i3;
24195 C[4] ^= i0;
24196 C[5] ^= i1;
24197 C[6] ^= i2;
24198 C[7] ^= i3;
24199
24200 // Iterate the system four times
24201 for (var i = 0; i < 4; i++) {
24202 nextState.call(this);
24203 }
24204 }
24205 },
24206
24207 _doProcessBlock: function (M, offset) {
24208 // Shortcut
24209 var X = this._X;
24210
24211 // Iterate the system
24212 nextState.call(this);
24213
24214 // Generate four keystream words
24215 S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);
24216 S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);
24217 S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);
24218 S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);
24219
24220 for (var i = 0; i < 4; i++) {
24221 // Swap endian
24222 S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |
24223 (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);
24224
24225 // Encrypt
24226 M[offset + i] ^= S[i];
24227 }
24228 },
24229
24230 blockSize: 128/32,
24231
24232 ivSize: 64/32
24233 });
24234
24235 function nextState() {
24236 // Shortcuts
24237 var X = this._X;
24238 var C = this._C;
24239
24240 // Save old counter values
24241 for (var i = 0; i < 8; i++) {
24242 C_[i] = C[i];
24243 }
24244
24245 // Calculate new counter values
24246 C[0] = (C[0] + 0x4d34d34d + this._b) | 0;
24247 C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;
24248 C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;
24249 C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;
24250 C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;
24251 C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;
24252 C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;
24253 C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;
24254 this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;
24255
24256 // Calculate the g-values
24257 for (var i = 0; i < 8; i++) {
24258 var gx = X[i] + C[i];
24259
24260 // Construct high and low argument for squaring
24261 var ga = gx & 0xffff;
24262 var gb = gx >>> 16;
24263
24264 // Calculate high and low result of squaring
24265 var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;
24266 var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);
24267
24268 // High XOR low
24269 G[i] = gh ^ gl;
24270 }
24271
24272 // Calculate new state values
24273 X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;
24274 X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;
24275 X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;
24276 X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;
24277 X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;
24278 X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;
24279 X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;
24280 X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;
24281 }
24282
24283 /**
24284 * Shortcut functions to the cipher's object interface.
24285 *
24286 * @example
24287 *
24288 * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);
24289 * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);
24290 */
24291 C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);
24292 }());
24293
24294
24295 return CryptoJS.RabbitLegacy;
24296
24297}));
24298},{"./cipher-core":121,"./core":122,"./enc-base64":123,"./evpkdf":126,"./md5":131}],144:[function(require,module,exports){
24299;(function (root, factory, undef) {
24300 if (typeof exports === "object") {
24301 // CommonJS
24302 module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core"));
24303 }
24304 else if (typeof define === "function" && define.amd) {
24305 // AMD
24306 define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
24307 }
24308 else {
24309 // Global (browser)
24310 factory(root.CryptoJS);
24311 }
24312}(this, function (CryptoJS) {
24313
24314 (function () {
24315 // Shortcuts
24316 var C = CryptoJS;
24317 var C_lib = C.lib;
24318 var StreamCipher = C_lib.StreamCipher;
24319 var C_algo = C.algo;
24320
24321 // Reusable objects
24322 var S = [];
24323 var C_ = [];
24324 var G = [];
24325
24326 /**
24327 * Rabbit stream cipher algorithm
24328 */
24329 var Rabbit = C_algo.Rabbit = StreamCipher.extend({
24330 _doReset: function () {
24331 // Shortcuts
24332 var K = this._key.words;
24333 var iv = this.cfg.iv;
24334
24335 // Swap endian
24336 for (var i = 0; i < 4; i++) {
24337 K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |
24338 (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);
24339 }
24340
24341 // Generate initial state values
24342 var X = this._X = [
24343 K[0], (K[3] << 16) | (K[2] >>> 16),
24344 K[1], (K[0] << 16) | (K[3] >>> 16),
24345 K[2], (K[1] << 16) | (K[0] >>> 16),
24346 K[3], (K[2] << 16) | (K[1] >>> 16)
24347 ];
24348
24349 // Generate initial counter values
24350 var C = this._C = [
24351 (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),
24352 (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),
24353 (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),
24354 (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)
24355 ];
24356
24357 // Carry bit
24358 this._b = 0;
24359
24360 // Iterate the system four times
24361 for (var i = 0; i < 4; i++) {
24362 nextState.call(this);
24363 }
24364
24365 // Modify the counters
24366 for (var i = 0; i < 8; i++) {
24367 C[i] ^= X[(i + 4) & 7];
24368 }
24369
24370 // IV setup
24371 if (iv) {
24372 // Shortcuts
24373 var IV = iv.words;
24374 var IV_0 = IV[0];
24375 var IV_1 = IV[1];
24376
24377 // Generate four subvectors
24378 var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);
24379 var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);
24380 var i1 = (i0 >>> 16) | (i2 & 0xffff0000);
24381 var i3 = (i2 << 16) | (i0 & 0x0000ffff);
24382
24383 // Modify counter values
24384 C[0] ^= i0;
24385 C[1] ^= i1;
24386 C[2] ^= i2;
24387 C[3] ^= i3;
24388 C[4] ^= i0;
24389 C[5] ^= i1;
24390 C[6] ^= i2;
24391 C[7] ^= i3;
24392
24393 // Iterate the system four times
24394 for (var i = 0; i < 4; i++) {
24395 nextState.call(this);
24396 }
24397 }
24398 },
24399
24400 _doProcessBlock: function (M, offset) {
24401 // Shortcut
24402 var X = this._X;
24403
24404 // Iterate the system
24405 nextState.call(this);
24406
24407 // Generate four keystream words
24408 S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);
24409 S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);
24410 S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);
24411 S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);
24412
24413 for (var i = 0; i < 4; i++) {
24414 // Swap endian
24415 S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |
24416 (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);
24417
24418 // Encrypt
24419 M[offset + i] ^= S[i];
24420 }
24421 },
24422
24423 blockSize: 128/32,
24424
24425 ivSize: 64/32
24426 });
24427
24428 function nextState() {
24429 // Shortcuts
24430 var X = this._X;
24431 var C = this._C;
24432
24433 // Save old counter values
24434 for (var i = 0; i < 8; i++) {
24435 C_[i] = C[i];
24436 }
24437
24438 // Calculate new counter values
24439 C[0] = (C[0] + 0x4d34d34d + this._b) | 0;
24440 C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;
24441 C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;
24442 C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;
24443 C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;
24444 C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;
24445 C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;
24446 C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;
24447 this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;
24448
24449 // Calculate the g-values
24450 for (var i = 0; i < 8; i++) {
24451 var gx = X[i] + C[i];
24452
24453 // Construct high and low argument for squaring
24454 var ga = gx & 0xffff;
24455 var gb = gx >>> 16;
24456
24457 // Calculate high and low result of squaring
24458 var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;
24459 var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);
24460
24461 // High XOR low
24462 G[i] = gh ^ gl;
24463 }
24464
24465 // Calculate new state values
24466 X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;
24467 X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;
24468 X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;
24469 X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;
24470 X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;
24471 X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;
24472 X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;
24473 X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;
24474 }
24475
24476 /**
24477 * Shortcut functions to the cipher's object interface.
24478 *
24479 * @example
24480 *
24481 * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);
24482 * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);
24483 */
24484 C.Rabbit = StreamCipher._createHelper(Rabbit);
24485 }());
24486
24487
24488 return CryptoJS.Rabbit;
24489
24490}));
24491},{"./cipher-core":121,"./core":122,"./enc-base64":123,"./evpkdf":126,"./md5":131}],145:[function(require,module,exports){
24492;(function (root, factory, undef) {
24493 if (typeof exports === "object") {
24494 // CommonJS
24495 module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core"));
24496 }
24497 else if (typeof define === "function" && define.amd) {
24498 // AMD
24499 define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
24500 }
24501 else {
24502 // Global (browser)
24503 factory(root.CryptoJS);
24504 }
24505}(this, function (CryptoJS) {
24506
24507 (function () {
24508 // Shortcuts
24509 var C = CryptoJS;
24510 var C_lib = C.lib;
24511 var StreamCipher = C_lib.StreamCipher;
24512 var C_algo = C.algo;
24513
24514 /**
24515 * RC4 stream cipher algorithm.
24516 */
24517 var RC4 = C_algo.RC4 = StreamCipher.extend({
24518 _doReset: function () {
24519 // Shortcuts
24520 var key = this._key;
24521 var keyWords = key.words;
24522 var keySigBytes = key.sigBytes;
24523
24524 // Init sbox
24525 var S = this._S = [];
24526 for (var i = 0; i < 256; i++) {
24527 S[i] = i;
24528 }
24529
24530 // Key setup
24531 for (var i = 0, j = 0; i < 256; i++) {
24532 var keyByteIndex = i % keySigBytes;
24533 var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;
24534
24535 j = (j + S[i] + keyByte) % 256;
24536
24537 // Swap
24538 var t = S[i];
24539 S[i] = S[j];
24540 S[j] = t;
24541 }
24542
24543 // Counters
24544 this._i = this._j = 0;
24545 },
24546
24547 _doProcessBlock: function (M, offset) {
24548 M[offset] ^= generateKeystreamWord.call(this);
24549 },
24550
24551 keySize: 256/32,
24552
24553 ivSize: 0
24554 });
24555
24556 function generateKeystreamWord() {
24557 // Shortcuts
24558 var S = this._S;
24559 var i = this._i;
24560 var j = this._j;
24561
24562 // Generate keystream word
24563 var keystreamWord = 0;
24564 for (var n = 0; n < 4; n++) {
24565 i = (i + 1) % 256;
24566 j = (j + S[i]) % 256;
24567
24568 // Swap
24569 var t = S[i];
24570 S[i] = S[j];
24571 S[j] = t;
24572
24573 keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);
24574 }
24575
24576 // Update counters
24577 this._i = i;
24578 this._j = j;
24579
24580 return keystreamWord;
24581 }
24582
24583 /**
24584 * Shortcut functions to the cipher's object interface.
24585 *
24586 * @example
24587 *
24588 * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);
24589 * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);
24590 */
24591 C.RC4 = StreamCipher._createHelper(RC4);
24592
24593 /**
24594 * Modified RC4 stream cipher algorithm.
24595 */
24596 var RC4Drop = C_algo.RC4Drop = RC4.extend({
24597 /**
24598 * Configuration options.
24599 *
24600 * @property {number} drop The number of keystream words to drop. Default 192
24601 */
24602 cfg: RC4.cfg.extend({
24603 drop: 192
24604 }),
24605
24606 _doReset: function () {
24607 RC4._doReset.call(this);
24608
24609 // Drop
24610 for (var i = this.cfg.drop; i > 0; i--) {
24611 generateKeystreamWord.call(this);
24612 }
24613 }
24614 });
24615
24616 /**
24617 * Shortcut functions to the cipher's object interface.
24618 *
24619 * @example
24620 *
24621 * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);
24622 * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);
24623 */
24624 C.RC4Drop = StreamCipher._createHelper(RC4Drop);
24625 }());
24626
24627
24628 return CryptoJS.RC4;
24629
24630}));
24631},{"./cipher-core":121,"./core":122,"./enc-base64":123,"./evpkdf":126,"./md5":131}],146:[function(require,module,exports){
24632;(function (root, factory) {
24633 if (typeof exports === "object") {
24634 // CommonJS
24635 module.exports = exports = factory(require("./core"));
24636 }
24637 else if (typeof define === "function" && define.amd) {
24638 // AMD
24639 define(["./core"], factory);
24640 }
24641 else {
24642 // Global (browser)
24643 factory(root.CryptoJS);
24644 }
24645}(this, function (CryptoJS) {
24646
24647 /** @preserve
24648 (c) 2012 by Cédric Mesnil. All rights reserved.
24649
24650 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
24651
24652 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
24653 - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
24654
24655 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24656 */
24657
24658 (function (Math) {
24659 // Shortcuts
24660 var C = CryptoJS;
24661 var C_lib = C.lib;
24662 var WordArray = C_lib.WordArray;
24663 var Hasher = C_lib.Hasher;
24664 var C_algo = C.algo;
24665
24666 // Constants table
24667 var _zl = WordArray.create([
24668 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
24669 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
24670 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
24671 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
24672 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);
24673 var _zr = WordArray.create([
24674 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
24675 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
24676 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
24677 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
24678 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);
24679 var _sl = WordArray.create([
24680 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
24681 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
24682 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
24683 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
24684 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]);
24685 var _sr = WordArray.create([
24686 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
24687 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
24688 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
24689 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
24690 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]);
24691
24692 var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);
24693 var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);
24694
24695 /**
24696 * RIPEMD160 hash algorithm.
24697 */
24698 var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({
24699 _doReset: function () {
24700 this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);
24701 },
24702
24703 _doProcessBlock: function (M, offset) {
24704
24705 // Swap endian
24706 for (var i = 0; i < 16; i++) {
24707 // Shortcuts
24708 var offset_i = offset + i;
24709 var M_offset_i = M[offset_i];
24710
24711 // Swap
24712 M[offset_i] = (
24713 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
24714 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
24715 );
24716 }
24717 // Shortcut
24718 var H = this._hash.words;
24719 var hl = _hl.words;
24720 var hr = _hr.words;
24721 var zl = _zl.words;
24722 var zr = _zr.words;
24723 var sl = _sl.words;
24724 var sr = _sr.words;
24725
24726 // Working variables
24727 var al, bl, cl, dl, el;
24728 var ar, br, cr, dr, er;
24729
24730 ar = al = H[0];
24731 br = bl = H[1];
24732 cr = cl = H[2];
24733 dr = dl = H[3];
24734 er = el = H[4];
24735 // Computation
24736 var t;
24737 for (var i = 0; i < 80; i += 1) {
24738 t = (al + M[offset+zl[i]])|0;
24739 if (i<16){
24740 t += f1(bl,cl,dl) + hl[0];
24741 } else if (i<32) {
24742 t += f2(bl,cl,dl) + hl[1];
24743 } else if (i<48) {
24744 t += f3(bl,cl,dl) + hl[2];
24745 } else if (i<64) {
24746 t += f4(bl,cl,dl) + hl[3];
24747 } else {// if (i<80) {
24748 t += f5(bl,cl,dl) + hl[4];
24749 }
24750 t = t|0;
24751 t = rotl(t,sl[i]);
24752 t = (t+el)|0;
24753 al = el;
24754 el = dl;
24755 dl = rotl(cl, 10);
24756 cl = bl;
24757 bl = t;
24758
24759 t = (ar + M[offset+zr[i]])|0;
24760 if (i<16){
24761 t += f5(br,cr,dr) + hr[0];
24762 } else if (i<32) {
24763 t += f4(br,cr,dr) + hr[1];
24764 } else if (i<48) {
24765 t += f3(br,cr,dr) + hr[2];
24766 } else if (i<64) {
24767 t += f2(br,cr,dr) + hr[3];
24768 } else {// if (i<80) {
24769 t += f1(br,cr,dr) + hr[4];
24770 }
24771 t = t|0;
24772 t = rotl(t,sr[i]) ;
24773 t = (t+er)|0;
24774 ar = er;
24775 er = dr;
24776 dr = rotl(cr, 10);
24777 cr = br;
24778 br = t;
24779 }
24780 // Intermediate hash value
24781 t = (H[1] + cl + dr)|0;
24782 H[1] = (H[2] + dl + er)|0;
24783 H[2] = (H[3] + el + ar)|0;
24784 H[3] = (H[4] + al + br)|0;
24785 H[4] = (H[0] + bl + cr)|0;
24786 H[0] = t;
24787 },
24788
24789 _doFinalize: function () {
24790 // Shortcuts
24791 var data = this._data;
24792 var dataWords = data.words;
24793
24794 var nBitsTotal = this._nDataBytes * 8;
24795 var nBitsLeft = data.sigBytes * 8;
24796
24797 // Add padding
24798 dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
24799 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
24800 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
24801 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
24802 );
24803 data.sigBytes = (dataWords.length + 1) * 4;
24804
24805 // Hash final blocks
24806 this._process();
24807
24808 // Shortcuts
24809 var hash = this._hash;
24810 var H = hash.words;
24811
24812 // Swap endian
24813 for (var i = 0; i < 5; i++) {
24814 // Shortcut
24815 var H_i = H[i];
24816
24817 // Swap
24818 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
24819 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);
24820 }
24821
24822 // Return final computed hash
24823 return hash;
24824 },
24825
24826 clone: function () {
24827 var clone = Hasher.clone.call(this);
24828 clone._hash = this._hash.clone();
24829
24830 return clone;
24831 }
24832 });
24833
24834
24835 function f1(x, y, z) {
24836 return ((x) ^ (y) ^ (z));
24837
24838 }
24839
24840 function f2(x, y, z) {
24841 return (((x)&(y)) | ((~x)&(z)));
24842 }
24843
24844 function f3(x, y, z) {
24845 return (((x) | (~(y))) ^ (z));
24846 }
24847
24848 function f4(x, y, z) {
24849 return (((x) & (z)) | ((y)&(~(z))));
24850 }
24851
24852 function f5(x, y, z) {
24853 return ((x) ^ ((y) |(~(z))));
24854
24855 }
24856
24857 function rotl(x,n) {
24858 return (x<<n) | (x>>>(32-n));
24859 }
24860
24861
24862 /**
24863 * Shortcut function to the hasher's object interface.
24864 *
24865 * @param {WordArray|string} message The message to hash.
24866 *
24867 * @return {WordArray} The hash.
24868 *
24869 * @static
24870 *
24871 * @example
24872 *
24873 * var hash = CryptoJS.RIPEMD160('message');
24874 * var hash = CryptoJS.RIPEMD160(wordArray);
24875 */
24876 C.RIPEMD160 = Hasher._createHelper(RIPEMD160);
24877
24878 /**
24879 * Shortcut function to the HMAC's object interface.
24880 *
24881 * @param {WordArray|string} message The message to hash.
24882 * @param {WordArray|string} key The secret key.
24883 *
24884 * @return {WordArray} The HMAC.
24885 *
24886 * @static
24887 *
24888 * @example
24889 *
24890 * var hmac = CryptoJS.HmacRIPEMD160(message, key);
24891 */
24892 C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);
24893 }(Math));
24894
24895
24896 return CryptoJS.RIPEMD160;
24897
24898}));
24899},{"./core":122}],147:[function(require,module,exports){
24900;(function (root, factory) {
24901 if (typeof exports === "object") {
24902 // CommonJS
24903 module.exports = exports = factory(require("./core"));
24904 }
24905 else if (typeof define === "function" && define.amd) {
24906 // AMD
24907 define(["./core"], factory);
24908 }
24909 else {
24910 // Global (browser)
24911 factory(root.CryptoJS);
24912 }
24913}(this, function (CryptoJS) {
24914
24915 (function () {
24916 // Shortcuts
24917 var C = CryptoJS;
24918 var C_lib = C.lib;
24919 var WordArray = C_lib.WordArray;
24920 var Hasher = C_lib.Hasher;
24921 var C_algo = C.algo;
24922
24923 // Reusable object
24924 var W = [];
24925
24926 /**
24927 * SHA-1 hash algorithm.
24928 */
24929 var SHA1 = C_algo.SHA1 = Hasher.extend({
24930 _doReset: function () {
24931 this._hash = new WordArray.init([
24932 0x67452301, 0xefcdab89,
24933 0x98badcfe, 0x10325476,
24934 0xc3d2e1f0
24935 ]);
24936 },
24937
24938 _doProcessBlock: function (M, offset) {
24939 // Shortcut
24940 var H = this._hash.words;
24941
24942 // Working variables
24943 var a = H[0];
24944 var b = H[1];
24945 var c = H[2];
24946 var d = H[3];
24947 var e = H[4];
24948
24949 // Computation
24950 for (var i = 0; i < 80; i++) {
24951 if (i < 16) {
24952 W[i] = M[offset + i] | 0;
24953 } else {
24954 var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];
24955 W[i] = (n << 1) | (n >>> 31);
24956 }
24957
24958 var t = ((a << 5) | (a >>> 27)) + e + W[i];
24959 if (i < 20) {
24960 t += ((b & c) | (~b & d)) + 0x5a827999;
24961 } else if (i < 40) {
24962 t += (b ^ c ^ d) + 0x6ed9eba1;
24963 } else if (i < 60) {
24964 t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;
24965 } else /* if (i < 80) */ {
24966 t += (b ^ c ^ d) - 0x359d3e2a;
24967 }
24968
24969 e = d;
24970 d = c;
24971 c = (b << 30) | (b >>> 2);
24972 b = a;
24973 a = t;
24974 }
24975
24976 // Intermediate hash value
24977 H[0] = (H[0] + a) | 0;
24978 H[1] = (H[1] + b) | 0;
24979 H[2] = (H[2] + c) | 0;
24980 H[3] = (H[3] + d) | 0;
24981 H[4] = (H[4] + e) | 0;
24982 },
24983
24984 _doFinalize: function () {
24985 // Shortcuts
24986 var data = this._data;
24987 var dataWords = data.words;
24988
24989 var nBitsTotal = this._nDataBytes * 8;
24990 var nBitsLeft = data.sigBytes * 8;
24991
24992 // Add padding
24993 dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
24994 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);
24995 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;
24996 data.sigBytes = dataWords.length * 4;
24997
24998 // Hash final blocks
24999 this._process();
25000
25001 // Return final computed hash
25002 return this._hash;
25003 },
25004
25005 clone: function () {
25006 var clone = Hasher.clone.call(this);
25007 clone._hash = this._hash.clone();
25008
25009 return clone;
25010 }
25011 });
25012
25013 /**
25014 * Shortcut function to the hasher's object interface.
25015 *
25016 * @param {WordArray|string} message The message to hash.
25017 *
25018 * @return {WordArray} The hash.
25019 *
25020 * @static
25021 *
25022 * @example
25023 *
25024 * var hash = CryptoJS.SHA1('message');
25025 * var hash = CryptoJS.SHA1(wordArray);
25026 */
25027 C.SHA1 = Hasher._createHelper(SHA1);
25028
25029 /**
25030 * Shortcut function to the HMAC's object interface.
25031 *
25032 * @param {WordArray|string} message The message to hash.
25033 * @param {WordArray|string} key The secret key.
25034 *
25035 * @return {WordArray} The HMAC.
25036 *
25037 * @static
25038 *
25039 * @example
25040 *
25041 * var hmac = CryptoJS.HmacSHA1(message, key);
25042 */
25043 C.HmacSHA1 = Hasher._createHmacHelper(SHA1);
25044 }());
25045
25046
25047 return CryptoJS.SHA1;
25048
25049}));
25050},{"./core":122}],148:[function(require,module,exports){
25051;(function (root, factory, undef) {
25052 if (typeof exports === "object") {
25053 // CommonJS
25054 module.exports = exports = factory(require("./core"), require("./sha256"));
25055 }
25056 else if (typeof define === "function" && define.amd) {
25057 // AMD
25058 define(["./core", "./sha256"], factory);
25059 }
25060 else {
25061 // Global (browser)
25062 factory(root.CryptoJS);
25063 }
25064}(this, function (CryptoJS) {
25065
25066 (function () {
25067 // Shortcuts
25068 var C = CryptoJS;
25069 var C_lib = C.lib;
25070 var WordArray = C_lib.WordArray;
25071 var C_algo = C.algo;
25072 var SHA256 = C_algo.SHA256;
25073
25074 /**
25075 * SHA-224 hash algorithm.
25076 */
25077 var SHA224 = C_algo.SHA224 = SHA256.extend({
25078 _doReset: function () {
25079 this._hash = new WordArray.init([
25080 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
25081 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4
25082 ]);
25083 },
25084
25085 _doFinalize: function () {
25086 var hash = SHA256._doFinalize.call(this);
25087
25088 hash.sigBytes -= 4;
25089
25090 return hash;
25091 }
25092 });
25093
25094 /**
25095 * Shortcut function to the hasher's object interface.
25096 *
25097 * @param {WordArray|string} message The message to hash.
25098 *
25099 * @return {WordArray} The hash.
25100 *
25101 * @static
25102 *
25103 * @example
25104 *
25105 * var hash = CryptoJS.SHA224('message');
25106 * var hash = CryptoJS.SHA224(wordArray);
25107 */
25108 C.SHA224 = SHA256._createHelper(SHA224);
25109
25110 /**
25111 * Shortcut function to the HMAC's object interface.
25112 *
25113 * @param {WordArray|string} message The message to hash.
25114 * @param {WordArray|string} key The secret key.
25115 *
25116 * @return {WordArray} The HMAC.
25117 *
25118 * @static
25119 *
25120 * @example
25121 *
25122 * var hmac = CryptoJS.HmacSHA224(message, key);
25123 */
25124 C.HmacSHA224 = SHA256._createHmacHelper(SHA224);
25125 }());
25126
25127
25128 return CryptoJS.SHA224;
25129
25130}));
25131},{"./core":122,"./sha256":149}],149:[function(require,module,exports){
25132;(function (root, factory) {
25133 if (typeof exports === "object") {
25134 // CommonJS
25135 module.exports = exports = factory(require("./core"));
25136 }
25137 else if (typeof define === "function" && define.amd) {
25138 // AMD
25139 define(["./core"], factory);
25140 }
25141 else {
25142 // Global (browser)
25143 factory(root.CryptoJS);
25144 }
25145}(this, function (CryptoJS) {
25146
25147 (function (Math) {
25148 // Shortcuts
25149 var C = CryptoJS;
25150 var C_lib = C.lib;
25151 var WordArray = C_lib.WordArray;
25152 var Hasher = C_lib.Hasher;
25153 var C_algo = C.algo;
25154
25155 // Initialization and round constants tables
25156 var H = [];
25157 var K = [];
25158
25159 // Compute constants
25160 (function () {
25161 function isPrime(n) {
25162 var sqrtN = Math.sqrt(n);
25163 for (var factor = 2; factor <= sqrtN; factor++) {
25164 if (!(n % factor)) {
25165 return false;
25166 }
25167 }
25168
25169 return true;
25170 }
25171
25172 function getFractionalBits(n) {
25173 return ((n - (n | 0)) * 0x100000000) | 0;
25174 }
25175
25176 var n = 2;
25177 var nPrime = 0;
25178 while (nPrime < 64) {
25179 if (isPrime(n)) {
25180 if (nPrime < 8) {
25181 H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));
25182 }
25183 K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));
25184
25185 nPrime++;
25186 }
25187
25188 n++;
25189 }
25190 }());
25191
25192 // Reusable object
25193 var W = [];
25194
25195 /**
25196 * SHA-256 hash algorithm.
25197 */
25198 var SHA256 = C_algo.SHA256 = Hasher.extend({
25199 _doReset: function () {
25200 this._hash = new WordArray.init(H.slice(0));
25201 },
25202
25203 _doProcessBlock: function (M, offset) {
25204 // Shortcut
25205 var H = this._hash.words;
25206
25207 // Working variables
25208 var a = H[0];
25209 var b = H[1];
25210 var c = H[2];
25211 var d = H[3];
25212 var e = H[4];
25213 var f = H[5];
25214 var g = H[6];
25215 var h = H[7];
25216
25217 // Computation
25218 for (var i = 0; i < 64; i++) {
25219 if (i < 16) {
25220 W[i] = M[offset + i] | 0;
25221 } else {
25222 var gamma0x = W[i - 15];
25223 var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^
25224 ((gamma0x << 14) | (gamma0x >>> 18)) ^
25225 (gamma0x >>> 3);
25226
25227 var gamma1x = W[i - 2];
25228 var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^
25229 ((gamma1x << 13) | (gamma1x >>> 19)) ^
25230 (gamma1x >>> 10);
25231
25232 W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];
25233 }
25234
25235 var ch = (e & f) ^ (~e & g);
25236 var maj = (a & b) ^ (a & c) ^ (b & c);
25237
25238 var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));
25239 var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));
25240
25241 var t1 = h + sigma1 + ch + K[i] + W[i];
25242 var t2 = sigma0 + maj;
25243
25244 h = g;
25245 g = f;
25246 f = e;
25247 e = (d + t1) | 0;
25248 d = c;
25249 c = b;
25250 b = a;
25251 a = (t1 + t2) | 0;
25252 }
25253
25254 // Intermediate hash value
25255 H[0] = (H[0] + a) | 0;
25256 H[1] = (H[1] + b) | 0;
25257 H[2] = (H[2] + c) | 0;
25258 H[3] = (H[3] + d) | 0;
25259 H[4] = (H[4] + e) | 0;
25260 H[5] = (H[5] + f) | 0;
25261 H[6] = (H[6] + g) | 0;
25262 H[7] = (H[7] + h) | 0;
25263 },
25264
25265 _doFinalize: function () {
25266 // Shortcuts
25267 var data = this._data;
25268 var dataWords = data.words;
25269
25270 var nBitsTotal = this._nDataBytes * 8;
25271 var nBitsLeft = data.sigBytes * 8;
25272
25273 // Add padding
25274 dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
25275 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);
25276 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;
25277 data.sigBytes = dataWords.length * 4;
25278
25279 // Hash final blocks
25280 this._process();
25281
25282 // Return final computed hash
25283 return this._hash;
25284 },
25285
25286 clone: function () {
25287 var clone = Hasher.clone.call(this);
25288 clone._hash = this._hash.clone();
25289
25290 return clone;
25291 }
25292 });
25293
25294 /**
25295 * Shortcut function to the hasher's object interface.
25296 *
25297 * @param {WordArray|string} message The message to hash.
25298 *
25299 * @return {WordArray} The hash.
25300 *
25301 * @static
25302 *
25303 * @example
25304 *
25305 * var hash = CryptoJS.SHA256('message');
25306 * var hash = CryptoJS.SHA256(wordArray);
25307 */
25308 C.SHA256 = Hasher._createHelper(SHA256);
25309
25310 /**
25311 * Shortcut function to the HMAC's object interface.
25312 *
25313 * @param {WordArray|string} message The message to hash.
25314 * @param {WordArray|string} key The secret key.
25315 *
25316 * @return {WordArray} The HMAC.
25317 *
25318 * @static
25319 *
25320 * @example
25321 *
25322 * var hmac = CryptoJS.HmacSHA256(message, key);
25323 */
25324 C.HmacSHA256 = Hasher._createHmacHelper(SHA256);
25325 }(Math));
25326
25327
25328 return CryptoJS.SHA256;
25329
25330}));
25331},{"./core":122}],150:[function(require,module,exports){
25332;(function (root, factory, undef) {
25333 if (typeof exports === "object") {
25334 // CommonJS
25335 module.exports = exports = factory(require("./core"), require("./x64-core"));
25336 }
25337 else if (typeof define === "function" && define.amd) {
25338 // AMD
25339 define(["./core", "./x64-core"], factory);
25340 }
25341 else {
25342 // Global (browser)
25343 factory(root.CryptoJS);
25344 }
25345}(this, function (CryptoJS) {
25346
25347 (function (Math) {
25348 // Shortcuts
25349 var C = CryptoJS;
25350 var C_lib = C.lib;
25351 var WordArray = C_lib.WordArray;
25352 var Hasher = C_lib.Hasher;
25353 var C_x64 = C.x64;
25354 var X64Word = C_x64.Word;
25355 var C_algo = C.algo;
25356
25357 // Constants tables
25358 var RHO_OFFSETS = [];
25359 var PI_INDEXES = [];
25360 var ROUND_CONSTANTS = [];
25361
25362 // Compute Constants
25363 (function () {
25364 // Compute rho offset constants
25365 var x = 1, y = 0;
25366 for (var t = 0; t < 24; t++) {
25367 RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;
25368
25369 var newX = y % 5;
25370 var newY = (2 * x + 3 * y) % 5;
25371 x = newX;
25372 y = newY;
25373 }
25374
25375 // Compute pi index constants
25376 for (var x = 0; x < 5; x++) {
25377 for (var y = 0; y < 5; y++) {
25378 PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;
25379 }
25380 }
25381
25382 // Compute round constants
25383 var LFSR = 0x01;
25384 for (var i = 0; i < 24; i++) {
25385 var roundConstantMsw = 0;
25386 var roundConstantLsw = 0;
25387
25388 for (var j = 0; j < 7; j++) {
25389 if (LFSR & 0x01) {
25390 var bitPosition = (1 << j) - 1;
25391 if (bitPosition < 32) {
25392 roundConstantLsw ^= 1 << bitPosition;
25393 } else /* if (bitPosition >= 32) */ {
25394 roundConstantMsw ^= 1 << (bitPosition - 32);
25395 }
25396 }
25397
25398 // Compute next LFSR
25399 if (LFSR & 0x80) {
25400 // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1
25401 LFSR = (LFSR << 1) ^ 0x71;
25402 } else {
25403 LFSR <<= 1;
25404 }
25405 }
25406
25407 ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);
25408 }
25409 }());
25410
25411 // Reusable objects for temporary values
25412 var T = [];
25413 (function () {
25414 for (var i = 0; i < 25; i++) {
25415 T[i] = X64Word.create();
25416 }
25417 }());
25418
25419 /**
25420 * SHA-3 hash algorithm.
25421 */
25422 var SHA3 = C_algo.SHA3 = Hasher.extend({
25423 /**
25424 * Configuration options.
25425 *
25426 * @property {number} outputLength
25427 * The desired number of bits in the output hash.
25428 * Only values permitted are: 224, 256, 384, 512.
25429 * Default: 512
25430 */
25431 cfg: Hasher.cfg.extend({
25432 outputLength: 512
25433 }),
25434
25435 _doReset: function () {
25436 var state = this._state = []
25437 for (var i = 0; i < 25; i++) {
25438 state[i] = new X64Word.init();
25439 }
25440
25441 this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;
25442 },
25443
25444 _doProcessBlock: function (M, offset) {
25445 // Shortcuts
25446 var state = this._state;
25447 var nBlockSizeLanes = this.blockSize / 2;
25448
25449 // Absorb
25450 for (var i = 0; i < nBlockSizeLanes; i++) {
25451 // Shortcuts
25452 var M2i = M[offset + 2 * i];
25453 var M2i1 = M[offset + 2 * i + 1];
25454
25455 // Swap endian
25456 M2i = (
25457 (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |
25458 (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)
25459 );
25460 M2i1 = (
25461 (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |
25462 (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)
25463 );
25464
25465 // Absorb message into state
25466 var lane = state[i];
25467 lane.high ^= M2i1;
25468 lane.low ^= M2i;
25469 }
25470
25471 // Rounds
25472 for (var round = 0; round < 24; round++) {
25473 // Theta
25474 for (var x = 0; x < 5; x++) {
25475 // Mix column lanes
25476 var tMsw = 0, tLsw = 0;
25477 for (var y = 0; y < 5; y++) {
25478 var lane = state[x + 5 * y];
25479 tMsw ^= lane.high;
25480 tLsw ^= lane.low;
25481 }
25482
25483 // Temporary values
25484 var Tx = T[x];
25485 Tx.high = tMsw;
25486 Tx.low = tLsw;
25487 }
25488 for (var x = 0; x < 5; x++) {
25489 // Shortcuts
25490 var Tx4 = T[(x + 4) % 5];
25491 var Tx1 = T[(x + 1) % 5];
25492 var Tx1Msw = Tx1.high;
25493 var Tx1Lsw = Tx1.low;
25494
25495 // Mix surrounding columns
25496 var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));
25497 var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));
25498 for (var y = 0; y < 5; y++) {
25499 var lane = state[x + 5 * y];
25500 lane.high ^= tMsw;
25501 lane.low ^= tLsw;
25502 }
25503 }
25504
25505 // Rho Pi
25506 for (var laneIndex = 1; laneIndex < 25; laneIndex++) {
25507 var tMsw;
25508 var tLsw;
25509
25510 // Shortcuts
25511 var lane = state[laneIndex];
25512 var laneMsw = lane.high;
25513 var laneLsw = lane.low;
25514 var rhoOffset = RHO_OFFSETS[laneIndex];
25515
25516 // Rotate lanes
25517 if (rhoOffset < 32) {
25518 tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));
25519 tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));
25520 } else /* if (rhoOffset >= 32) */ {
25521 tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));
25522 tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));
25523 }
25524
25525 // Transpose lanes
25526 var TPiLane = T[PI_INDEXES[laneIndex]];
25527 TPiLane.high = tMsw;
25528 TPiLane.low = tLsw;
25529 }
25530
25531 // Rho pi at x = y = 0
25532 var T0 = T[0];
25533 var state0 = state[0];
25534 T0.high = state0.high;
25535 T0.low = state0.low;
25536
25537 // Chi
25538 for (var x = 0; x < 5; x++) {
25539 for (var y = 0; y < 5; y++) {
25540 // Shortcuts
25541 var laneIndex = x + 5 * y;
25542 var lane = state[laneIndex];
25543 var TLane = T[laneIndex];
25544 var Tx1Lane = T[((x + 1) % 5) + 5 * y];
25545 var Tx2Lane = T[((x + 2) % 5) + 5 * y];
25546
25547 // Mix rows
25548 lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);
25549 lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);
25550 }
25551 }
25552
25553 // Iota
25554 var lane = state[0];
25555 var roundConstant = ROUND_CONSTANTS[round];
25556 lane.high ^= roundConstant.high;
25557 lane.low ^= roundConstant.low;
25558 }
25559 },
25560
25561 _doFinalize: function () {
25562 // Shortcuts
25563 var data = this._data;
25564 var dataWords = data.words;
25565 var nBitsTotal = this._nDataBytes * 8;
25566 var nBitsLeft = data.sigBytes * 8;
25567 var blockSizeBits = this.blockSize * 32;
25568
25569 // Add padding
25570 dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);
25571 dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;
25572 data.sigBytes = dataWords.length * 4;
25573
25574 // Hash final blocks
25575 this._process();
25576
25577 // Shortcuts
25578 var state = this._state;
25579 var outputLengthBytes = this.cfg.outputLength / 8;
25580 var outputLengthLanes = outputLengthBytes / 8;
25581
25582 // Squeeze
25583 var hashWords = [];
25584 for (var i = 0; i < outputLengthLanes; i++) {
25585 // Shortcuts
25586 var lane = state[i];
25587 var laneMsw = lane.high;
25588 var laneLsw = lane.low;
25589
25590 // Swap endian
25591 laneMsw = (
25592 (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |
25593 (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)
25594 );
25595 laneLsw = (
25596 (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |
25597 (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)
25598 );
25599
25600 // Squeeze state to retrieve hash
25601 hashWords.push(laneLsw);
25602 hashWords.push(laneMsw);
25603 }
25604
25605 // Return final computed hash
25606 return new WordArray.init(hashWords, outputLengthBytes);
25607 },
25608
25609 clone: function () {
25610 var clone = Hasher.clone.call(this);
25611
25612 var state = clone._state = this._state.slice(0);
25613 for (var i = 0; i < 25; i++) {
25614 state[i] = state[i].clone();
25615 }
25616
25617 return clone;
25618 }
25619 });
25620
25621 /**
25622 * Shortcut function to the hasher's object interface.
25623 *
25624 * @param {WordArray|string} message The message to hash.
25625 *
25626 * @return {WordArray} The hash.
25627 *
25628 * @static
25629 *
25630 * @example
25631 *
25632 * var hash = CryptoJS.SHA3('message');
25633 * var hash = CryptoJS.SHA3(wordArray);
25634 */
25635 C.SHA3 = Hasher._createHelper(SHA3);
25636
25637 /**
25638 * Shortcut function to the HMAC's object interface.
25639 *
25640 * @param {WordArray|string} message The message to hash.
25641 * @param {WordArray|string} key The secret key.
25642 *
25643 * @return {WordArray} The HMAC.
25644 *
25645 * @static
25646 *
25647 * @example
25648 *
25649 * var hmac = CryptoJS.HmacSHA3(message, key);
25650 */
25651 C.HmacSHA3 = Hasher._createHmacHelper(SHA3);
25652 }(Math));
25653
25654
25655 return CryptoJS.SHA3;
25656
25657}));
25658},{"./core":122,"./x64-core":154}],151:[function(require,module,exports){
25659;(function (root, factory, undef) {
25660 if (typeof exports === "object") {
25661 // CommonJS
25662 module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512"));
25663 }
25664 else if (typeof define === "function" && define.amd) {
25665 // AMD
25666 define(["./core", "./x64-core", "./sha512"], factory);
25667 }
25668 else {
25669 // Global (browser)
25670 factory(root.CryptoJS);
25671 }
25672}(this, function (CryptoJS) {
25673
25674 (function () {
25675 // Shortcuts
25676 var C = CryptoJS;
25677 var C_x64 = C.x64;
25678 var X64Word = C_x64.Word;
25679 var X64WordArray = C_x64.WordArray;
25680 var C_algo = C.algo;
25681 var SHA512 = C_algo.SHA512;
25682
25683 /**
25684 * SHA-384 hash algorithm.
25685 */
25686 var SHA384 = C_algo.SHA384 = SHA512.extend({
25687 _doReset: function () {
25688 this._hash = new X64WordArray.init([
25689 new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),
25690 new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),
25691 new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),
25692 new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)
25693 ]);
25694 },
25695
25696 _doFinalize: function () {
25697 var hash = SHA512._doFinalize.call(this);
25698
25699 hash.sigBytes -= 16;
25700
25701 return hash;
25702 }
25703 });
25704
25705 /**
25706 * Shortcut function to the hasher's object interface.
25707 *
25708 * @param {WordArray|string} message The message to hash.
25709 *
25710 * @return {WordArray} The hash.
25711 *
25712 * @static
25713 *
25714 * @example
25715 *
25716 * var hash = CryptoJS.SHA384('message');
25717 * var hash = CryptoJS.SHA384(wordArray);
25718 */
25719 C.SHA384 = SHA512._createHelper(SHA384);
25720
25721 /**
25722 * Shortcut function to the HMAC's object interface.
25723 *
25724 * @param {WordArray|string} message The message to hash.
25725 * @param {WordArray|string} key The secret key.
25726 *
25727 * @return {WordArray} The HMAC.
25728 *
25729 * @static
25730 *
25731 * @example
25732 *
25733 * var hmac = CryptoJS.HmacSHA384(message, key);
25734 */
25735 C.HmacSHA384 = SHA512._createHmacHelper(SHA384);
25736 }());
25737
25738
25739 return CryptoJS.SHA384;
25740
25741}));
25742},{"./core":122,"./sha512":152,"./x64-core":154}],152:[function(require,module,exports){
25743;(function (root, factory, undef) {
25744 if (typeof exports === "object") {
25745 // CommonJS
25746 module.exports = exports = factory(require("./core"), require("./x64-core"));
25747 }
25748 else if (typeof define === "function" && define.amd) {
25749 // AMD
25750 define(["./core", "./x64-core"], factory);
25751 }
25752 else {
25753 // Global (browser)
25754 factory(root.CryptoJS);
25755 }
25756}(this, function (CryptoJS) {
25757
25758 (function () {
25759 // Shortcuts
25760 var C = CryptoJS;
25761 var C_lib = C.lib;
25762 var Hasher = C_lib.Hasher;
25763 var C_x64 = C.x64;
25764 var X64Word = C_x64.Word;
25765 var X64WordArray = C_x64.WordArray;
25766 var C_algo = C.algo;
25767
25768 function X64Word_create() {
25769 return X64Word.create.apply(X64Word, arguments);
25770 }
25771
25772 // Constants
25773 var K = [
25774 X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),
25775 X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),
25776 X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),
25777 X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),
25778 X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),
25779 X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),
25780 X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),
25781 X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),
25782 X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),
25783 X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),
25784 X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),
25785 X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),
25786 X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),
25787 X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),
25788 X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),
25789 X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),
25790 X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),
25791 X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),
25792 X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),
25793 X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),
25794 X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),
25795 X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),
25796 X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),
25797 X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),
25798 X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),
25799 X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),
25800 X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),
25801 X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),
25802 X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),
25803 X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),
25804 X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),
25805 X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),
25806 X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),
25807 X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),
25808 X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),
25809 X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),
25810 X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),
25811 X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),
25812 X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),
25813 X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)
25814 ];
25815
25816 // Reusable objects
25817 var W = [];
25818 (function () {
25819 for (var i = 0; i < 80; i++) {
25820 W[i] = X64Word_create();
25821 }
25822 }());
25823
25824 /**
25825 * SHA-512 hash algorithm.
25826 */
25827 var SHA512 = C_algo.SHA512 = Hasher.extend({
25828 _doReset: function () {
25829 this._hash = new X64WordArray.init([
25830 new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),
25831 new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),
25832 new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),
25833 new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)
25834 ]);
25835 },
25836
25837 _doProcessBlock: function (M, offset) {
25838 // Shortcuts
25839 var H = this._hash.words;
25840
25841 var H0 = H[0];
25842 var H1 = H[1];
25843 var H2 = H[2];
25844 var H3 = H[3];
25845 var H4 = H[4];
25846 var H5 = H[5];
25847 var H6 = H[6];
25848 var H7 = H[7];
25849
25850 var H0h = H0.high;
25851 var H0l = H0.low;
25852 var H1h = H1.high;
25853 var H1l = H1.low;
25854 var H2h = H2.high;
25855 var H2l = H2.low;
25856 var H3h = H3.high;
25857 var H3l = H3.low;
25858 var H4h = H4.high;
25859 var H4l = H4.low;
25860 var H5h = H5.high;
25861 var H5l = H5.low;
25862 var H6h = H6.high;
25863 var H6l = H6.low;
25864 var H7h = H7.high;
25865 var H7l = H7.low;
25866
25867 // Working variables
25868 var ah = H0h;
25869 var al = H0l;
25870 var bh = H1h;
25871 var bl = H1l;
25872 var ch = H2h;
25873 var cl = H2l;
25874 var dh = H3h;
25875 var dl = H3l;
25876 var eh = H4h;
25877 var el = H4l;
25878 var fh = H5h;
25879 var fl = H5l;
25880 var gh = H6h;
25881 var gl = H6l;
25882 var hh = H7h;
25883 var hl = H7l;
25884
25885 // Rounds
25886 for (var i = 0; i < 80; i++) {
25887 var Wil;
25888 var Wih;
25889
25890 // Shortcut
25891 var Wi = W[i];
25892
25893 // Extend message
25894 if (i < 16) {
25895 Wih = Wi.high = M[offset + i * 2] | 0;
25896 Wil = Wi.low = M[offset + i * 2 + 1] | 0;
25897 } else {
25898 // Gamma0
25899 var gamma0x = W[i - 15];
25900 var gamma0xh = gamma0x.high;
25901 var gamma0xl = gamma0x.low;
25902 var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);
25903 var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));
25904
25905 // Gamma1
25906 var gamma1x = W[i - 2];
25907 var gamma1xh = gamma1x.high;
25908 var gamma1xl = gamma1x.low;
25909 var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);
25910 var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));
25911
25912 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
25913 var Wi7 = W[i - 7];
25914 var Wi7h = Wi7.high;
25915 var Wi7l = Wi7.low;
25916
25917 var Wi16 = W[i - 16];
25918 var Wi16h = Wi16.high;
25919 var Wi16l = Wi16.low;
25920
25921 Wil = gamma0l + Wi7l;
25922 Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);
25923 Wil = Wil + gamma1l;
25924 Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);
25925 Wil = Wil + Wi16l;
25926 Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);
25927
25928 Wi.high = Wih;
25929 Wi.low = Wil;
25930 }
25931
25932 var chh = (eh & fh) ^ (~eh & gh);
25933 var chl = (el & fl) ^ (~el & gl);
25934 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
25935 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
25936
25937 var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
25938 var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
25939 var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));
25940 var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));
25941
25942 // t1 = h + sigma1 + ch + K[i] + W[i]
25943 var Ki = K[i];
25944 var Kih = Ki.high;
25945 var Kil = Ki.low;
25946
25947 var t1l = hl + sigma1l;
25948 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
25949 var t1l = t1l + chl;
25950 var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
25951 var t1l = t1l + Kil;
25952 var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);
25953 var t1l = t1l + Wil;
25954 var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);
25955
25956 // t2 = sigma0 + maj
25957 var t2l = sigma0l + majl;
25958 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
25959
25960 // Update working variables
25961 hh = gh;
25962 hl = gl;
25963 gh = fh;
25964 gl = fl;
25965 fh = eh;
25966 fl = el;
25967 el = (dl + t1l) | 0;
25968 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
25969 dh = ch;
25970 dl = cl;
25971 ch = bh;
25972 cl = bl;
25973 bh = ah;
25974 bl = al;
25975 al = (t1l + t2l) | 0;
25976 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
25977 }
25978
25979 // Intermediate hash value
25980 H0l = H0.low = (H0l + al);
25981 H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));
25982 H1l = H1.low = (H1l + bl);
25983 H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));
25984 H2l = H2.low = (H2l + cl);
25985 H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));
25986 H3l = H3.low = (H3l + dl);
25987 H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));
25988 H4l = H4.low = (H4l + el);
25989 H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));
25990 H5l = H5.low = (H5l + fl);
25991 H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));
25992 H6l = H6.low = (H6l + gl);
25993 H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));
25994 H7l = H7.low = (H7l + hl);
25995 H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));
25996 },
25997
25998 _doFinalize: function () {
25999 // Shortcuts
26000 var data = this._data;
26001 var dataWords = data.words;
26002
26003 var nBitsTotal = this._nDataBytes * 8;
26004 var nBitsLeft = data.sigBytes * 8;
26005
26006 // Add padding
26007 dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
26008 dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);
26009 dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;
26010 data.sigBytes = dataWords.length * 4;
26011
26012 // Hash final blocks
26013 this._process();
26014
26015 // Convert hash to 32-bit word array before returning
26016 var hash = this._hash.toX32();
26017
26018 // Return final computed hash
26019 return hash;
26020 },
26021
26022 clone: function () {
26023 var clone = Hasher.clone.call(this);
26024 clone._hash = this._hash.clone();
26025
26026 return clone;
26027 },
26028
26029 blockSize: 1024/32
26030 });
26031
26032 /**
26033 * Shortcut function to the hasher's object interface.
26034 *
26035 * @param {WordArray|string} message The message to hash.
26036 *
26037 * @return {WordArray} The hash.
26038 *
26039 * @static
26040 *
26041 * @example
26042 *
26043 * var hash = CryptoJS.SHA512('message');
26044 * var hash = CryptoJS.SHA512(wordArray);
26045 */
26046 C.SHA512 = Hasher._createHelper(SHA512);
26047
26048 /**
26049 * Shortcut function to the HMAC's object interface.
26050 *
26051 * @param {WordArray|string} message The message to hash.
26052 * @param {WordArray|string} key The secret key.
26053 *
26054 * @return {WordArray} The HMAC.
26055 *
26056 * @static
26057 *
26058 * @example
26059 *
26060 * var hmac = CryptoJS.HmacSHA512(message, key);
26061 */
26062 C.HmacSHA512 = Hasher._createHmacHelper(SHA512);
26063 }());
26064
26065
26066 return CryptoJS.SHA512;
26067
26068}));
26069},{"./core":122,"./x64-core":154}],153:[function(require,module,exports){
26070;(function (root, factory, undef) {
26071 if (typeof exports === "object") {
26072 // CommonJS
26073 module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core"));
26074 }
26075 else if (typeof define === "function" && define.amd) {
26076 // AMD
26077 define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
26078 }
26079 else {
26080 // Global (browser)
26081 factory(root.CryptoJS);
26082 }
26083}(this, function (CryptoJS) {
26084
26085 (function () {
26086 // Shortcuts
26087 var C = CryptoJS;
26088 var C_lib = C.lib;
26089 var WordArray = C_lib.WordArray;
26090 var BlockCipher = C_lib.BlockCipher;
26091 var C_algo = C.algo;
26092
26093 // Permuted Choice 1 constants
26094 var PC1 = [
26095 57, 49, 41, 33, 25, 17, 9, 1,
26096 58, 50, 42, 34, 26, 18, 10, 2,
26097 59, 51, 43, 35, 27, 19, 11, 3,
26098 60, 52, 44, 36, 63, 55, 47, 39,
26099 31, 23, 15, 7, 62, 54, 46, 38,
26100 30, 22, 14, 6, 61, 53, 45, 37,
26101 29, 21, 13, 5, 28, 20, 12, 4
26102 ];
26103
26104 // Permuted Choice 2 constants
26105 var PC2 = [
26106 14, 17, 11, 24, 1, 5,
26107 3, 28, 15, 6, 21, 10,
26108 23, 19, 12, 4, 26, 8,
26109 16, 7, 27, 20, 13, 2,
26110 41, 52, 31, 37, 47, 55,
26111 30, 40, 51, 45, 33, 48,
26112 44, 49, 39, 56, 34, 53,
26113 46, 42, 50, 36, 29, 32
26114 ];
26115
26116 // Cumulative bit shift constants
26117 var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];
26118
26119 // SBOXes and round permutation constants
26120 var SBOX_P = [
26121 {
26122 0x0: 0x808200,
26123 0x10000000: 0x8000,
26124 0x20000000: 0x808002,
26125 0x30000000: 0x2,
26126 0x40000000: 0x200,
26127 0x50000000: 0x808202,
26128 0x60000000: 0x800202,
26129 0x70000000: 0x800000,
26130 0x80000000: 0x202,
26131 0x90000000: 0x800200,
26132 0xa0000000: 0x8200,
26133 0xb0000000: 0x808000,
26134 0xc0000000: 0x8002,
26135 0xd0000000: 0x800002,
26136 0xe0000000: 0x0,
26137 0xf0000000: 0x8202,
26138 0x8000000: 0x0,
26139 0x18000000: 0x808202,
26140 0x28000000: 0x8202,
26141 0x38000000: 0x8000,
26142 0x48000000: 0x808200,
26143 0x58000000: 0x200,
26144 0x68000000: 0x808002,
26145 0x78000000: 0x2,
26146 0x88000000: 0x800200,
26147 0x98000000: 0x8200,
26148 0xa8000000: 0x808000,
26149 0xb8000000: 0x800202,
26150 0xc8000000: 0x800002,
26151 0xd8000000: 0x8002,
26152 0xe8000000: 0x202,
26153 0xf8000000: 0x800000,
26154 0x1: 0x8000,
26155 0x10000001: 0x2,
26156 0x20000001: 0x808200,
26157 0x30000001: 0x800000,
26158 0x40000001: 0x808002,
26159 0x50000001: 0x8200,
26160 0x60000001: 0x200,
26161 0x70000001: 0x800202,
26162 0x80000001: 0x808202,
26163 0x90000001: 0x808000,
26164 0xa0000001: 0x800002,
26165 0xb0000001: 0x8202,
26166 0xc0000001: 0x202,
26167 0xd0000001: 0x800200,
26168 0xe0000001: 0x8002,
26169 0xf0000001: 0x0,
26170 0x8000001: 0x808202,
26171 0x18000001: 0x808000,
26172 0x28000001: 0x800000,
26173 0x38000001: 0x200,
26174 0x48000001: 0x8000,
26175 0x58000001: 0x800002,
26176 0x68000001: 0x2,
26177 0x78000001: 0x8202,
26178 0x88000001: 0x8002,
26179 0x98000001: 0x800202,
26180 0xa8000001: 0x202,
26181 0xb8000001: 0x808200,
26182 0xc8000001: 0x800200,
26183 0xd8000001: 0x0,
26184 0xe8000001: 0x8200,
26185 0xf8000001: 0x808002
26186 },
26187 {
26188 0x0: 0x40084010,
26189 0x1000000: 0x4000,
26190 0x2000000: 0x80000,
26191 0x3000000: 0x40080010,
26192 0x4000000: 0x40000010,
26193 0x5000000: 0x40084000,
26194 0x6000000: 0x40004000,
26195 0x7000000: 0x10,
26196 0x8000000: 0x84000,
26197 0x9000000: 0x40004010,
26198 0xa000000: 0x40000000,
26199 0xb000000: 0x84010,
26200 0xc000000: 0x80010,
26201 0xd000000: 0x0,
26202 0xe000000: 0x4010,
26203 0xf000000: 0x40080000,
26204 0x800000: 0x40004000,
26205 0x1800000: 0x84010,
26206 0x2800000: 0x10,
26207 0x3800000: 0x40004010,
26208 0x4800000: 0x40084010,
26209 0x5800000: 0x40000000,
26210 0x6800000: 0x80000,
26211 0x7800000: 0x40080010,
26212 0x8800000: 0x80010,
26213 0x9800000: 0x0,
26214 0xa800000: 0x4000,
26215 0xb800000: 0x40080000,
26216 0xc800000: 0x40000010,
26217 0xd800000: 0x84000,
26218 0xe800000: 0x40084000,
26219 0xf800000: 0x4010,
26220 0x10000000: 0x0,
26221 0x11000000: 0x40080010,
26222 0x12000000: 0x40004010,
26223 0x13000000: 0x40084000,
26224 0x14000000: 0x40080000,
26225 0x15000000: 0x10,
26226 0x16000000: 0x84010,
26227 0x17000000: 0x4000,
26228 0x18000000: 0x4010,
26229 0x19000000: 0x80000,
26230 0x1a000000: 0x80010,
26231 0x1b000000: 0x40000010,
26232 0x1c000000: 0x84000,
26233 0x1d000000: 0x40004000,
26234 0x1e000000: 0x40000000,
26235 0x1f000000: 0x40084010,
26236 0x10800000: 0x84010,
26237 0x11800000: 0x80000,
26238 0x12800000: 0x40080000,
26239 0x13800000: 0x4000,
26240 0x14800000: 0x40004000,
26241 0x15800000: 0x40084010,
26242 0x16800000: 0x10,
26243 0x17800000: 0x40000000,
26244 0x18800000: 0x40084000,
26245 0x19800000: 0x40000010,
26246 0x1a800000: 0x40004010,
26247 0x1b800000: 0x80010,
26248 0x1c800000: 0x0,
26249 0x1d800000: 0x4010,
26250 0x1e800000: 0x40080010,
26251 0x1f800000: 0x84000
26252 },
26253 {
26254 0x0: 0x104,
26255 0x100000: 0x0,
26256 0x200000: 0x4000100,
26257 0x300000: 0x10104,
26258 0x400000: 0x10004,
26259 0x500000: 0x4000004,
26260 0x600000: 0x4010104,
26261 0x700000: 0x4010000,
26262 0x800000: 0x4000000,
26263 0x900000: 0x4010100,
26264 0xa00000: 0x10100,
26265 0xb00000: 0x4010004,
26266 0xc00000: 0x4000104,
26267 0xd00000: 0x10000,
26268 0xe00000: 0x4,
26269 0xf00000: 0x100,
26270 0x80000: 0x4010100,
26271 0x180000: 0x4010004,
26272 0x280000: 0x0,
26273 0x380000: 0x4000100,
26274 0x480000: 0x4000004,
26275 0x580000: 0x10000,
26276 0x680000: 0x10004,
26277 0x780000: 0x104,
26278 0x880000: 0x4,
26279 0x980000: 0x100,
26280 0xa80000: 0x4010000,
26281 0xb80000: 0x10104,
26282 0xc80000: 0x10100,
26283 0xd80000: 0x4000104,
26284 0xe80000: 0x4010104,
26285 0xf80000: 0x4000000,
26286 0x1000000: 0x4010100,
26287 0x1100000: 0x10004,
26288 0x1200000: 0x10000,
26289 0x1300000: 0x4000100,
26290 0x1400000: 0x100,
26291 0x1500000: 0x4010104,
26292 0x1600000: 0x4000004,
26293 0x1700000: 0x0,
26294 0x1800000: 0x4000104,
26295 0x1900000: 0x4000000,
26296 0x1a00000: 0x4,
26297 0x1b00000: 0x10100,
26298 0x1c00000: 0x4010000,
26299 0x1d00000: 0x104,
26300 0x1e00000: 0x10104,
26301 0x1f00000: 0x4010004,
26302 0x1080000: 0x4000000,
26303 0x1180000: 0x104,
26304 0x1280000: 0x4010100,
26305 0x1380000: 0x0,
26306 0x1480000: 0x10004,
26307 0x1580000: 0x4000100,
26308 0x1680000: 0x100,
26309 0x1780000: 0x4010004,
26310 0x1880000: 0x10000,
26311 0x1980000: 0x4010104,
26312 0x1a80000: 0x10104,
26313 0x1b80000: 0x4000004,
26314 0x1c80000: 0x4000104,
26315 0x1d80000: 0x4010000,
26316 0x1e80000: 0x4,
26317 0x1f80000: 0x10100
26318 },
26319 {
26320 0x0: 0x80401000,
26321 0x10000: 0x80001040,
26322 0x20000: 0x401040,
26323 0x30000: 0x80400000,
26324 0x40000: 0x0,
26325 0x50000: 0x401000,
26326 0x60000: 0x80000040,
26327 0x70000: 0x400040,
26328 0x80000: 0x80000000,
26329 0x90000: 0x400000,
26330 0xa0000: 0x40,
26331 0xb0000: 0x80001000,
26332 0xc0000: 0x80400040,
26333 0xd0000: 0x1040,
26334 0xe0000: 0x1000,
26335 0xf0000: 0x80401040,
26336 0x8000: 0x80001040,
26337 0x18000: 0x40,
26338 0x28000: 0x80400040,
26339 0x38000: 0x80001000,
26340 0x48000: 0x401000,
26341 0x58000: 0x80401040,
26342 0x68000: 0x0,
26343 0x78000: 0x80400000,
26344 0x88000: 0x1000,
26345 0x98000: 0x80401000,
26346 0xa8000: 0x400000,
26347 0xb8000: 0x1040,
26348 0xc8000: 0x80000000,
26349 0xd8000: 0x400040,
26350 0xe8000: 0x401040,
26351 0xf8000: 0x80000040,
26352 0x100000: 0x400040,
26353 0x110000: 0x401000,
26354 0x120000: 0x80000040,
26355 0x130000: 0x0,
26356 0x140000: 0x1040,
26357 0x150000: 0x80400040,
26358 0x160000: 0x80401000,
26359 0x170000: 0x80001040,
26360 0x180000: 0x80401040,
26361 0x190000: 0x80000000,
26362 0x1a0000: 0x80400000,
26363 0x1b0000: 0x401040,
26364 0x1c0000: 0x80001000,
26365 0x1d0000: 0x400000,
26366 0x1e0000: 0x40,
26367 0x1f0000: 0x1000,
26368 0x108000: 0x80400000,
26369 0x118000: 0x80401040,
26370 0x128000: 0x0,
26371 0x138000: 0x401000,
26372 0x148000: 0x400040,
26373 0x158000: 0x80000000,
26374 0x168000: 0x80001040,
26375 0x178000: 0x40,
26376 0x188000: 0x80000040,
26377 0x198000: 0x1000,
26378 0x1a8000: 0x80001000,
26379 0x1b8000: 0x80400040,
26380 0x1c8000: 0x1040,
26381 0x1d8000: 0x80401000,
26382 0x1e8000: 0x400000,
26383 0x1f8000: 0x401040
26384 },
26385 {
26386 0x0: 0x80,
26387 0x1000: 0x1040000,
26388 0x2000: 0x40000,
26389 0x3000: 0x20000000,
26390 0x4000: 0x20040080,
26391 0x5000: 0x1000080,
26392 0x6000: 0x21000080,
26393 0x7000: 0x40080,
26394 0x8000: 0x1000000,
26395 0x9000: 0x20040000,
26396 0xa000: 0x20000080,
26397 0xb000: 0x21040080,
26398 0xc000: 0x21040000,
26399 0xd000: 0x0,
26400 0xe000: 0x1040080,
26401 0xf000: 0x21000000,
26402 0x800: 0x1040080,
26403 0x1800: 0x21000080,
26404 0x2800: 0x80,
26405 0x3800: 0x1040000,
26406 0x4800: 0x40000,
26407 0x5800: 0x20040080,
26408 0x6800: 0x21040000,
26409 0x7800: 0x20000000,
26410 0x8800: 0x20040000,
26411 0x9800: 0x0,
26412 0xa800: 0x21040080,
26413 0xb800: 0x1000080,
26414 0xc800: 0x20000080,
26415 0xd800: 0x21000000,
26416 0xe800: 0x1000000,
26417 0xf800: 0x40080,
26418 0x10000: 0x40000,
26419 0x11000: 0x80,
26420 0x12000: 0x20000000,
26421 0x13000: 0x21000080,
26422 0x14000: 0x1000080,
26423 0x15000: 0x21040000,
26424 0x16000: 0x20040080,
26425 0x17000: 0x1000000,
26426 0x18000: 0x21040080,
26427 0x19000: 0x21000000,
26428 0x1a000: 0x1040000,
26429 0x1b000: 0x20040000,
26430 0x1c000: 0x40080,
26431 0x1d000: 0x20000080,
26432 0x1e000: 0x0,
26433 0x1f000: 0x1040080,
26434 0x10800: 0x21000080,
26435 0x11800: 0x1000000,
26436 0x12800: 0x1040000,
26437 0x13800: 0x20040080,
26438 0x14800: 0x20000000,
26439 0x15800: 0x1040080,
26440 0x16800: 0x80,
26441 0x17800: 0x21040000,
26442 0x18800: 0x40080,
26443 0x19800: 0x21040080,
26444 0x1a800: 0x0,
26445 0x1b800: 0x21000000,
26446 0x1c800: 0x1000080,
26447 0x1d800: 0x40000,
26448 0x1e800: 0x20040000,
26449 0x1f800: 0x20000080
26450 },
26451 {
26452 0x0: 0x10000008,
26453 0x100: 0x2000,
26454 0x200: 0x10200000,
26455 0x300: 0x10202008,
26456 0x400: 0x10002000,
26457 0x500: 0x200000,
26458 0x600: 0x200008,
26459 0x700: 0x10000000,
26460 0x800: 0x0,
26461 0x900: 0x10002008,
26462 0xa00: 0x202000,
26463 0xb00: 0x8,
26464 0xc00: 0x10200008,
26465 0xd00: 0x202008,
26466 0xe00: 0x2008,
26467 0xf00: 0x10202000,
26468 0x80: 0x10200000,
26469 0x180: 0x10202008,
26470 0x280: 0x8,
26471 0x380: 0x200000,
26472 0x480: 0x202008,
26473 0x580: 0x10000008,
26474 0x680: 0x10002000,
26475 0x780: 0x2008,
26476 0x880: 0x200008,
26477 0x980: 0x2000,
26478 0xa80: 0x10002008,
26479 0xb80: 0x10200008,
26480 0xc80: 0x0,
26481 0xd80: 0x10202000,
26482 0xe80: 0x202000,
26483 0xf80: 0x10000000,
26484 0x1000: 0x10002000,
26485 0x1100: 0x10200008,
26486 0x1200: 0x10202008,
26487 0x1300: 0x2008,
26488 0x1400: 0x200000,
26489 0x1500: 0x10000000,
26490 0x1600: 0x10000008,
26491 0x1700: 0x202000,
26492 0x1800: 0x202008,
26493 0x1900: 0x0,
26494 0x1a00: 0x8,
26495 0x1b00: 0x10200000,
26496 0x1c00: 0x2000,
26497 0x1d00: 0x10002008,
26498 0x1e00: 0x10202000,
26499 0x1f00: 0x200008,
26500 0x1080: 0x8,
26501 0x1180: 0x202000,
26502 0x1280: 0x200000,
26503 0x1380: 0x10000008,
26504 0x1480: 0x10002000,
26505 0x1580: 0x2008,
26506 0x1680: 0x10202008,
26507 0x1780: 0x10200000,
26508 0x1880: 0x10202000,
26509 0x1980: 0x10200008,
26510 0x1a80: 0x2000,
26511 0x1b80: 0x202008,
26512 0x1c80: 0x200008,
26513 0x1d80: 0x0,
26514 0x1e80: 0x10000000,
26515 0x1f80: 0x10002008
26516 },
26517 {
26518 0x0: 0x100000,
26519 0x10: 0x2000401,
26520 0x20: 0x400,
26521 0x30: 0x100401,
26522 0x40: 0x2100401,
26523 0x50: 0x0,
26524 0x60: 0x1,
26525 0x70: 0x2100001,
26526 0x80: 0x2000400,
26527 0x90: 0x100001,
26528 0xa0: 0x2000001,
26529 0xb0: 0x2100400,
26530 0xc0: 0x2100000,
26531 0xd0: 0x401,
26532 0xe0: 0x100400,
26533 0xf0: 0x2000000,
26534 0x8: 0x2100001,
26535 0x18: 0x0,
26536 0x28: 0x2000401,
26537 0x38: 0x2100400,
26538 0x48: 0x100000,
26539 0x58: 0x2000001,
26540 0x68: 0x2000000,
26541 0x78: 0x401,
26542 0x88: 0x100401,
26543 0x98: 0x2000400,
26544 0xa8: 0x2100000,
26545 0xb8: 0x100001,
26546 0xc8: 0x400,
26547 0xd8: 0x2100401,
26548 0xe8: 0x1,
26549 0xf8: 0x100400,
26550 0x100: 0x2000000,
26551 0x110: 0x100000,
26552 0x120: 0x2000401,
26553 0x130: 0x2100001,
26554 0x140: 0x100001,
26555 0x150: 0x2000400,
26556 0x160: 0x2100400,
26557 0x170: 0x100401,
26558 0x180: 0x401,
26559 0x190: 0x2100401,
26560 0x1a0: 0x100400,
26561 0x1b0: 0x1,
26562 0x1c0: 0x0,
26563 0x1d0: 0x2100000,
26564 0x1e0: 0x2000001,
26565 0x1f0: 0x400,
26566 0x108: 0x100400,
26567 0x118: 0x2000401,
26568 0x128: 0x2100001,
26569 0x138: 0x1,
26570 0x148: 0x2000000,
26571 0x158: 0x100000,
26572 0x168: 0x401,
26573 0x178: 0x2100400,
26574 0x188: 0x2000001,
26575 0x198: 0x2100000,
26576 0x1a8: 0x0,
26577 0x1b8: 0x2100401,
26578 0x1c8: 0x100401,
26579 0x1d8: 0x400,
26580 0x1e8: 0x2000400,
26581 0x1f8: 0x100001
26582 },
26583 {
26584 0x0: 0x8000820,
26585 0x1: 0x20000,
26586 0x2: 0x8000000,
26587 0x3: 0x20,
26588 0x4: 0x20020,
26589 0x5: 0x8020820,
26590 0x6: 0x8020800,
26591 0x7: 0x800,
26592 0x8: 0x8020000,
26593 0x9: 0x8000800,
26594 0xa: 0x20800,
26595 0xb: 0x8020020,
26596 0xc: 0x820,
26597 0xd: 0x0,
26598 0xe: 0x8000020,
26599 0xf: 0x20820,
26600 0x80000000: 0x800,
26601 0x80000001: 0x8020820,
26602 0x80000002: 0x8000820,
26603 0x80000003: 0x8000000,
26604 0x80000004: 0x8020000,
26605 0x80000005: 0x20800,
26606 0x80000006: 0x20820,
26607 0x80000007: 0x20,
26608 0x80000008: 0x8000020,
26609 0x80000009: 0x820,
26610 0x8000000a: 0x20020,
26611 0x8000000b: 0x8020800,
26612 0x8000000c: 0x0,
26613 0x8000000d: 0x8020020,
26614 0x8000000e: 0x8000800,
26615 0x8000000f: 0x20000,
26616 0x10: 0x20820,
26617 0x11: 0x8020800,
26618 0x12: 0x20,
26619 0x13: 0x800,
26620 0x14: 0x8000800,
26621 0x15: 0x8000020,
26622 0x16: 0x8020020,
26623 0x17: 0x20000,
26624 0x18: 0x0,
26625 0x19: 0x20020,
26626 0x1a: 0x8020000,
26627 0x1b: 0x8000820,
26628 0x1c: 0x8020820,
26629 0x1d: 0x20800,
26630 0x1e: 0x820,
26631 0x1f: 0x8000000,
26632 0x80000010: 0x20000,
26633 0x80000011: 0x800,
26634 0x80000012: 0x8020020,
26635 0x80000013: 0x20820,
26636 0x80000014: 0x20,
26637 0x80000015: 0x8020000,
26638 0x80000016: 0x8000000,
26639 0x80000017: 0x8000820,
26640 0x80000018: 0x8020820,
26641 0x80000019: 0x8000020,
26642 0x8000001a: 0x8000800,
26643 0x8000001b: 0x0,
26644 0x8000001c: 0x20800,
26645 0x8000001d: 0x820,
26646 0x8000001e: 0x20020,
26647 0x8000001f: 0x8020800
26648 }
26649 ];
26650
26651 // Masks that select the SBOX input
26652 var SBOX_MASK = [
26653 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,
26654 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f
26655 ];
26656
26657 /**
26658 * DES block cipher algorithm.
26659 */
26660 var DES = C_algo.DES = BlockCipher.extend({
26661 _doReset: function () {
26662 // Shortcuts
26663 var key = this._key;
26664 var keyWords = key.words;
26665
26666 // Select 56 bits according to PC1
26667 var keyBits = [];
26668 for (var i = 0; i < 56; i++) {
26669 var keyBitPos = PC1[i] - 1;
26670 keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;
26671 }
26672
26673 // Assemble 16 subkeys
26674 var subKeys = this._subKeys = [];
26675 for (var nSubKey = 0; nSubKey < 16; nSubKey++) {
26676 // Create subkey
26677 var subKey = subKeys[nSubKey] = [];
26678
26679 // Shortcut
26680 var bitShift = BIT_SHIFTS[nSubKey];
26681
26682 // Select 48 bits according to PC2
26683 for (var i = 0; i < 24; i++) {
26684 // Select from the left 28 key bits
26685 subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);
26686
26687 // Select from the right 28 key bits
26688 subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);
26689 }
26690
26691 // Since each subkey is applied to an expanded 32-bit input,
26692 // the subkey can be broken into 8 values scaled to 32-bits,
26693 // which allows the key to be used without expansion
26694 subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);
26695 for (var i = 1; i < 7; i++) {
26696 subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);
26697 }
26698 subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);
26699 }
26700
26701 // Compute inverse subkeys
26702 var invSubKeys = this._invSubKeys = [];
26703 for (var i = 0; i < 16; i++) {
26704 invSubKeys[i] = subKeys[15 - i];
26705 }
26706 },
26707
26708 encryptBlock: function (M, offset) {
26709 this._doCryptBlock(M, offset, this._subKeys);
26710 },
26711
26712 decryptBlock: function (M, offset) {
26713 this._doCryptBlock(M, offset, this._invSubKeys);
26714 },
26715
26716 _doCryptBlock: function (M, offset, subKeys) {
26717 // Get input
26718 this._lBlock = M[offset];
26719 this._rBlock = M[offset + 1];
26720
26721 // Initial permutation
26722 exchangeLR.call(this, 4, 0x0f0f0f0f);
26723 exchangeLR.call(this, 16, 0x0000ffff);
26724 exchangeRL.call(this, 2, 0x33333333);
26725 exchangeRL.call(this, 8, 0x00ff00ff);
26726 exchangeLR.call(this, 1, 0x55555555);
26727
26728 // Rounds
26729 for (var round = 0; round < 16; round++) {
26730 // Shortcuts
26731 var subKey = subKeys[round];
26732 var lBlock = this._lBlock;
26733 var rBlock = this._rBlock;
26734
26735 // Feistel function
26736 var f = 0;
26737 for (var i = 0; i < 8; i++) {
26738 f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];
26739 }
26740 this._lBlock = rBlock;
26741 this._rBlock = lBlock ^ f;
26742 }
26743
26744 // Undo swap from last round
26745 var t = this._lBlock;
26746 this._lBlock = this._rBlock;
26747 this._rBlock = t;
26748
26749 // Final permutation
26750 exchangeLR.call(this, 1, 0x55555555);
26751 exchangeRL.call(this, 8, 0x00ff00ff);
26752 exchangeRL.call(this, 2, 0x33333333);
26753 exchangeLR.call(this, 16, 0x0000ffff);
26754 exchangeLR.call(this, 4, 0x0f0f0f0f);
26755
26756 // Set output
26757 M[offset] = this._lBlock;
26758 M[offset + 1] = this._rBlock;
26759 },
26760
26761 keySize: 64/32,
26762
26763 ivSize: 64/32,
26764
26765 blockSize: 64/32
26766 });
26767
26768 // Swap bits across the left and right words
26769 function exchangeLR(offset, mask) {
26770 var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;
26771 this._rBlock ^= t;
26772 this._lBlock ^= t << offset;
26773 }
26774
26775 function exchangeRL(offset, mask) {
26776 var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;
26777 this._lBlock ^= t;
26778 this._rBlock ^= t << offset;
26779 }
26780
26781 /**
26782 * Shortcut functions to the cipher's object interface.
26783 *
26784 * @example
26785 *
26786 * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);
26787 * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);
26788 */
26789 C.DES = BlockCipher._createHelper(DES);
26790
26791 /**
26792 * Triple-DES block cipher algorithm.
26793 */
26794 var TripleDES = C_algo.TripleDES = BlockCipher.extend({
26795 _doReset: function () {
26796 // Shortcuts
26797 var key = this._key;
26798 var keyWords = key.words;
26799 // Make sure the key length is valid (64, 128 or >= 192 bit)
26800 if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {
26801 throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');
26802 }
26803
26804 // Extend the key according to the keying options defined in 3DES standard
26805 var key1 = keyWords.slice(0, 2);
26806 var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);
26807 var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);
26808
26809 // Create DES instances
26810 this._des1 = DES.createEncryptor(WordArray.create(key1));
26811 this._des2 = DES.createEncryptor(WordArray.create(key2));
26812 this._des3 = DES.createEncryptor(WordArray.create(key3));
26813 },
26814
26815 encryptBlock: function (M, offset) {
26816 this._des1.encryptBlock(M, offset);
26817 this._des2.decryptBlock(M, offset);
26818 this._des3.encryptBlock(M, offset);
26819 },
26820
26821 decryptBlock: function (M, offset) {
26822 this._des3.decryptBlock(M, offset);
26823 this._des2.encryptBlock(M, offset);
26824 this._des1.decryptBlock(M, offset);
26825 },
26826
26827 keySize: 192/32,
26828
26829 ivSize: 64/32,
26830
26831 blockSize: 64/32
26832 });
26833
26834 /**
26835 * Shortcut functions to the cipher's object interface.
26836 *
26837 * @example
26838 *
26839 * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);
26840 * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);
26841 */
26842 C.TripleDES = BlockCipher._createHelper(TripleDES);
26843 }());
26844
26845
26846 return CryptoJS.TripleDES;
26847
26848}));
26849},{"./cipher-core":121,"./core":122,"./enc-base64":123,"./evpkdf":126,"./md5":131}],154:[function(require,module,exports){
26850;(function (root, factory) {
26851 if (typeof exports === "object") {
26852 // CommonJS
26853 module.exports = exports = factory(require("./core"));
26854 }
26855 else if (typeof define === "function" && define.amd) {
26856 // AMD
26857 define(["./core"], factory);
26858 }
26859 else {
26860 // Global (browser)
26861 factory(root.CryptoJS);
26862 }
26863}(this, function (CryptoJS) {
26864
26865 (function (undefined) {
26866 // Shortcuts
26867 var C = CryptoJS;
26868 var C_lib = C.lib;
26869 var Base = C_lib.Base;
26870 var X32WordArray = C_lib.WordArray;
26871
26872 /**
26873 * x64 namespace.
26874 */
26875 var C_x64 = C.x64 = {};
26876
26877 /**
26878 * A 64-bit word.
26879 */
26880 var X64Word = C_x64.Word = Base.extend({
26881 /**
26882 * Initializes a newly created 64-bit word.
26883 *
26884 * @param {number} high The high 32 bits.
26885 * @param {number} low The low 32 bits.
26886 *
26887 * @example
26888 *
26889 * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);
26890 */
26891 init: function (high, low) {
26892 this.high = high;
26893 this.low = low;
26894 }
26895
26896 /**
26897 * Bitwise NOTs this word.
26898 *
26899 * @return {X64Word} A new x64-Word object after negating.
26900 *
26901 * @example
26902 *
26903 * var negated = x64Word.not();
26904 */
26905 // not: function () {
26906 // var high = ~this.high;
26907 // var low = ~this.low;
26908
26909 // return X64Word.create(high, low);
26910 // },
26911
26912 /**
26913 * Bitwise ANDs this word with the passed word.
26914 *
26915 * @param {X64Word} word The x64-Word to AND with this word.
26916 *
26917 * @return {X64Word} A new x64-Word object after ANDing.
26918 *
26919 * @example
26920 *
26921 * var anded = x64Word.and(anotherX64Word);
26922 */
26923 // and: function (word) {
26924 // var high = this.high & word.high;
26925 // var low = this.low & word.low;
26926
26927 // return X64Word.create(high, low);
26928 // },
26929
26930 /**
26931 * Bitwise ORs this word with the passed word.
26932 *
26933 * @param {X64Word} word The x64-Word to OR with this word.
26934 *
26935 * @return {X64Word} A new x64-Word object after ORing.
26936 *
26937 * @example
26938 *
26939 * var ored = x64Word.or(anotherX64Word);
26940 */
26941 // or: function (word) {
26942 // var high = this.high | word.high;
26943 // var low = this.low | word.low;
26944
26945 // return X64Word.create(high, low);
26946 // },
26947
26948 /**
26949 * Bitwise XORs this word with the passed word.
26950 *
26951 * @param {X64Word} word The x64-Word to XOR with this word.
26952 *
26953 * @return {X64Word} A new x64-Word object after XORing.
26954 *
26955 * @example
26956 *
26957 * var xored = x64Word.xor(anotherX64Word);
26958 */
26959 // xor: function (word) {
26960 // var high = this.high ^ word.high;
26961 // var low = this.low ^ word.low;
26962
26963 // return X64Word.create(high, low);
26964 // },
26965
26966 /**
26967 * Shifts this word n bits to the left.
26968 *
26969 * @param {number} n The number of bits to shift.
26970 *
26971 * @return {X64Word} A new x64-Word object after shifting.
26972 *
26973 * @example
26974 *
26975 * var shifted = x64Word.shiftL(25);
26976 */
26977 // shiftL: function (n) {
26978 // if (n < 32) {
26979 // var high = (this.high << n) | (this.low >>> (32 - n));
26980 // var low = this.low << n;
26981 // } else {
26982 // var high = this.low << (n - 32);
26983 // var low = 0;
26984 // }
26985
26986 // return X64Word.create(high, low);
26987 // },
26988
26989 /**
26990 * Shifts this word n bits to the right.
26991 *
26992 * @param {number} n The number of bits to shift.
26993 *
26994 * @return {X64Word} A new x64-Word object after shifting.
26995 *
26996 * @example
26997 *
26998 * var shifted = x64Word.shiftR(7);
26999 */
27000 // shiftR: function (n) {
27001 // if (n < 32) {
27002 // var low = (this.low >>> n) | (this.high << (32 - n));
27003 // var high = this.high >>> n;
27004 // } else {
27005 // var low = this.high >>> (n - 32);
27006 // var high = 0;
27007 // }
27008
27009 // return X64Word.create(high, low);
27010 // },
27011
27012 /**
27013 * Rotates this word n bits to the left.
27014 *
27015 * @param {number} n The number of bits to rotate.
27016 *
27017 * @return {X64Word} A new x64-Word object after rotating.
27018 *
27019 * @example
27020 *
27021 * var rotated = x64Word.rotL(25);
27022 */
27023 // rotL: function (n) {
27024 // return this.shiftL(n).or(this.shiftR(64 - n));
27025 // },
27026
27027 /**
27028 * Rotates this word n bits to the right.
27029 *
27030 * @param {number} n The number of bits to rotate.
27031 *
27032 * @return {X64Word} A new x64-Word object after rotating.
27033 *
27034 * @example
27035 *
27036 * var rotated = x64Word.rotR(7);
27037 */
27038 // rotR: function (n) {
27039 // return this.shiftR(n).or(this.shiftL(64 - n));
27040 // },
27041
27042 /**
27043 * Adds this word with the passed word.
27044 *
27045 * @param {X64Word} word The x64-Word to add with this word.
27046 *
27047 * @return {X64Word} A new x64-Word object after adding.
27048 *
27049 * @example
27050 *
27051 * var added = x64Word.add(anotherX64Word);
27052 */
27053 // add: function (word) {
27054 // var low = (this.low + word.low) | 0;
27055 // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;
27056 // var high = (this.high + word.high + carry) | 0;
27057
27058 // return X64Word.create(high, low);
27059 // }
27060 });
27061
27062 /**
27063 * An array of 64-bit words.
27064 *
27065 * @property {Array} words The array of CryptoJS.x64.Word objects.
27066 * @property {number} sigBytes The number of significant bytes in this word array.
27067 */
27068 var X64WordArray = C_x64.WordArray = Base.extend({
27069 /**
27070 * Initializes a newly created word array.
27071 *
27072 * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.
27073 * @param {number} sigBytes (Optional) The number of significant bytes in the words.
27074 *
27075 * @example
27076 *
27077 * var wordArray = CryptoJS.x64.WordArray.create();
27078 *
27079 * var wordArray = CryptoJS.x64.WordArray.create([
27080 * CryptoJS.x64.Word.create(0x00010203, 0x04050607),
27081 * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)
27082 * ]);
27083 *
27084 * var wordArray = CryptoJS.x64.WordArray.create([
27085 * CryptoJS.x64.Word.create(0x00010203, 0x04050607),
27086 * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)
27087 * ], 10);
27088 */
27089 init: function (words, sigBytes) {
27090 words = this.words = words || [];
27091
27092 if (sigBytes != undefined) {
27093 this.sigBytes = sigBytes;
27094 } else {
27095 this.sigBytes = words.length * 8;
27096 }
27097 },
27098
27099 /**
27100 * Converts this 64-bit word array to a 32-bit word array.
27101 *
27102 * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.
27103 *
27104 * @example
27105 *
27106 * var x32WordArray = x64WordArray.toX32();
27107 */
27108 toX32: function () {
27109 // Shortcuts
27110 var x64Words = this.words;
27111 var x64WordsLength = x64Words.length;
27112
27113 // Convert
27114 var x32Words = [];
27115 for (var i = 0; i < x64WordsLength; i++) {
27116 var x64Word = x64Words[i];
27117 x32Words.push(x64Word.high);
27118 x32Words.push(x64Word.low);
27119 }
27120
27121 return X32WordArray.create(x32Words, this.sigBytes);
27122 },
27123
27124 /**
27125 * Creates a copy of this word array.
27126 *
27127 * @return {X64WordArray} The clone.
27128 *
27129 * @example
27130 *
27131 * var clone = x64WordArray.clone();
27132 */
27133 clone: function () {
27134 var clone = Base.clone.call(this);
27135
27136 // Clone "words" array
27137 var words = clone.words = this.words.slice(0);
27138
27139 // Clone each X64Word object
27140 var wordsLength = words.length;
27141 for (var i = 0; i < wordsLength; i++) {
27142 words[i] = words[i].clone();
27143 }
27144
27145 return clone;
27146 }
27147 });
27148 }());
27149
27150
27151 return CryptoJS;
27152
27153}));
27154},{"./core":122}],155:[function(require,module,exports){
27155'use strict';
27156
27157var assign = require('object.assign');
27158var callBound = require('call-bind/callBound');
27159var flags = require('regexp.prototype.flags');
27160var GetIntrinsic = require('get-intrinsic');
27161var getIterator = require('es-get-iterator');
27162var getSideChannel = require('side-channel');
27163var is = require('object-is');
27164var isArguments = require('is-arguments');
27165var isArray = require('isarray');
27166var isArrayBuffer = require('is-array-buffer');
27167var isDate = require('is-date-object');
27168var isRegex = require('is-regex');
27169var isSharedArrayBuffer = require('is-shared-array-buffer');
27170var objectKeys = require('object-keys');
27171var whichBoxedPrimitive = require('which-boxed-primitive');
27172var whichCollection = require('which-collection');
27173var whichTypedArray = require('which-typed-array');
27174var byteLength = require('array-buffer-byte-length');
27175
27176var sabByteLength = callBound('SharedArrayBuffer.prototype.byteLength', true);
27177
27178var $getTime = callBound('Date.prototype.getTime');
27179var gPO = Object.getPrototypeOf;
27180var $objToString = callBound('Object.prototype.toString');
27181
27182var $Set = GetIntrinsic('%Set%', true);
27183var $mapHas = callBound('Map.prototype.has', true);
27184var $mapGet = callBound('Map.prototype.get', true);
27185var $mapSize = callBound('Map.prototype.size', true);
27186var $setAdd = callBound('Set.prototype.add', true);
27187var $setDelete = callBound('Set.prototype.delete', true);
27188var $setHas = callBound('Set.prototype.has', true);
27189var $setSize = callBound('Set.prototype.size', true);
27190
27191// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L401-L414
27192function setHasEqualElement(set, val1, opts, channel) {
27193 var i = getIterator(set);
27194 var result;
27195 while ((result = i.next()) && !result.done) {
27196 if (internalDeepEqual(val1, result.value, opts, channel)) { // eslint-disable-line no-use-before-define
27197 // Remove the matching element to make sure we do not check that again.
27198 $setDelete(set, result.value);
27199 return true;
27200 }
27201 }
27202
27203 return false;
27204}
27205
27206// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L416-L439
27207function findLooseMatchingPrimitives(prim) {
27208 if (typeof prim === 'undefined') {
27209 return null;
27210 }
27211 if (typeof prim === 'object') { // Only pass in null as object!
27212 return void 0;
27213 }
27214 if (typeof prim === 'symbol') {
27215 return false;
27216 }
27217 if (typeof prim === 'string' || typeof prim === 'number') {
27218 // Loose equal entries exist only if the string is possible to convert to a regular number and not NaN.
27219 return +prim === +prim; // eslint-disable-line no-implicit-coercion
27220 }
27221 return true;
27222}
27223
27224// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L449-L460
27225function mapMightHaveLoosePrim(a, b, prim, item, opts, channel) {
27226 var altValue = findLooseMatchingPrimitives(prim);
27227 if (altValue != null) {
27228 return altValue;
27229 }
27230 var curB = $mapGet(b, altValue);
27231 var looseOpts = assign({}, opts, { strict: false });
27232 if (
27233 (typeof curB === 'undefined' && !$mapHas(b, altValue))
27234 // eslint-disable-next-line no-use-before-define
27235 || !internalDeepEqual(item, curB, looseOpts, channel)
27236 ) {
27237 return false;
27238 }
27239 // eslint-disable-next-line no-use-before-define
27240 return !$mapHas(a, altValue) && internalDeepEqual(item, curB, looseOpts, channel);
27241}
27242
27243// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L441-L447
27244function setMightHaveLoosePrim(a, b, prim) {
27245 var altValue = findLooseMatchingPrimitives(prim);
27246 if (altValue != null) {
27247 return altValue;
27248 }
27249
27250 return $setHas(b, altValue) && !$setHas(a, altValue);
27251}
27252
27253// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L518-L533
27254function mapHasEqualEntry(set, map, key1, item1, opts, channel) {
27255 var i = getIterator(set);
27256 var result;
27257 var key2;
27258 while ((result = i.next()) && !result.done) {
27259 key2 = result.value;
27260 if (
27261 // eslint-disable-next-line no-use-before-define
27262 internalDeepEqual(key1, key2, opts, channel)
27263 // eslint-disable-next-line no-use-before-define
27264 && internalDeepEqual(item1, $mapGet(map, key2), opts, channel)
27265 ) {
27266 $setDelete(set, key2);
27267 return true;
27268 }
27269 }
27270
27271 return false;
27272}
27273
27274function internalDeepEqual(actual, expected, options, channel) {
27275 var opts = options || {};
27276
27277 // 7.1. All identical values are equivalent, as determined by ===.
27278 if (opts.strict ? is(actual, expected) : actual === expected) {
27279 return true;
27280 }
27281
27282 var actualBoxed = whichBoxedPrimitive(actual);
27283 var expectedBoxed = whichBoxedPrimitive(expected);
27284 if (actualBoxed !== expectedBoxed) {
27285 return false;
27286 }
27287
27288 // 7.3. Other pairs that do not both pass typeof value == 'object', equivalence is determined by ==.
27289 if (!actual || !expected || (typeof actual !== 'object' && typeof expected !== 'object')) {
27290 return opts.strict ? is(actual, expected) : actual == expected; // eslint-disable-line eqeqeq
27291 }
27292
27293 /*
27294 * 7.4. For all other Object pairs, including Array objects, equivalence is
27295 * determined by having the same number of owned properties (as verified
27296 * with Object.prototype.hasOwnProperty.call), the same set of keys
27297 * (although not necessarily the same order), equivalent values for every
27298 * corresponding key, and an identical 'prototype' property. Note: this
27299 * accounts for both named and indexed properties on Arrays.
27300 */
27301 // see https://github.com/nodejs/node/commit/d3aafd02efd3a403d646a3044adcf14e63a88d32 for memos/channel inspiration
27302
27303 var hasActual = channel.has(actual);
27304 var hasExpected = channel.has(expected);
27305 var sentinel;
27306 if (hasActual && hasExpected) {
27307 if (channel.get(actual) === channel.get(expected)) {
27308 return true;
27309 }
27310 } else {
27311 sentinel = {};
27312 }
27313 if (!hasActual) { channel.set(actual, sentinel); }
27314 if (!hasExpected) { channel.set(expected, sentinel); }
27315
27316 // eslint-disable-next-line no-use-before-define
27317 return objEquiv(actual, expected, opts, channel);
27318}
27319
27320function isBuffer(x) {
27321 if (!x || typeof x !== 'object' || typeof x.length !== 'number') {
27322 return false;
27323 }
27324 if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {
27325 return false;
27326 }
27327 if (x.length > 0 && typeof x[0] !== 'number') {
27328 return false;
27329 }
27330
27331 return !!(x.constructor && x.constructor.isBuffer && x.constructor.isBuffer(x));
27332}
27333
27334function setEquiv(a, b, opts, channel) {
27335 if ($setSize(a) !== $setSize(b)) {
27336 return false;
27337 }
27338 var iA = getIterator(a);
27339 var iB = getIterator(b);
27340 var resultA;
27341 var resultB;
27342 var set;
27343 while ((resultA = iA.next()) && !resultA.done) {
27344 if (resultA.value && typeof resultA.value === 'object') {
27345 if (!set) { set = new $Set(); }
27346 $setAdd(set, resultA.value);
27347 } else if (!$setHas(b, resultA.value)) {
27348 if (opts.strict) { return false; }
27349 if (!setMightHaveLoosePrim(a, b, resultA.value)) {
27350 return false;
27351 }
27352 if (!set) { set = new $Set(); }
27353 $setAdd(set, resultA.value);
27354 }
27355 }
27356 if (set) {
27357 while ((resultB = iB.next()) && !resultB.done) {
27358 // We have to check if a primitive value is already matching and only if it's not, go hunting for it.
27359 if (resultB.value && typeof resultB.value === 'object') {
27360 if (!setHasEqualElement(set, resultB.value, opts.strict, channel)) {
27361 return false;
27362 }
27363 } else if (
27364 !opts.strict
27365 && !$setHas(a, resultB.value)
27366 && !setHasEqualElement(set, resultB.value, opts.strict, channel)
27367 ) {
27368 return false;
27369 }
27370 }
27371 return $setSize(set) === 0;
27372 }
27373 return true;
27374}
27375
27376function mapEquiv(a, b, opts, channel) {
27377 if ($mapSize(a) !== $mapSize(b)) {
27378 return false;
27379 }
27380 var iA = getIterator(a);
27381 var iB = getIterator(b);
27382 var resultA;
27383 var resultB;
27384 var set;
27385 var key;
27386 var item1;
27387 var item2;
27388 while ((resultA = iA.next()) && !resultA.done) {
27389 key = resultA.value[0];
27390 item1 = resultA.value[1];
27391 if (key && typeof key === 'object') {
27392 if (!set) { set = new $Set(); }
27393 $setAdd(set, key);
27394 } else {
27395 item2 = $mapGet(b, key);
27396 if ((typeof item2 === 'undefined' && !$mapHas(b, key)) || !internalDeepEqual(item1, item2, opts, channel)) {
27397 if (opts.strict) {
27398 return false;
27399 }
27400 if (!mapMightHaveLoosePrim(a, b, key, item1, opts, channel)) {
27401 return false;
27402 }
27403 if (!set) { set = new $Set(); }
27404 $setAdd(set, key);
27405 }
27406 }
27407 }
27408
27409 if (set) {
27410 while ((resultB = iB.next()) && !resultB.done) {
27411 key = resultB.value[0];
27412 item2 = resultB.value[1];
27413 if (key && typeof key === 'object') {
27414 if (!mapHasEqualEntry(set, a, key, item2, opts, channel)) {
27415 return false;
27416 }
27417 } else if (
27418 !opts.strict
27419 && (!a.has(key) || !internalDeepEqual($mapGet(a, key), item2, opts, channel))
27420 && !mapHasEqualEntry(set, a, key, item2, assign({}, opts, { strict: false }), channel)
27421 ) {
27422 return false;
27423 }
27424 }
27425 return $setSize(set) === 0;
27426 }
27427 return true;
27428}
27429
27430function objEquiv(a, b, opts, channel) {
27431 /* eslint max-statements: [2, 100], max-lines-per-function: [2, 120], max-depth: [2, 5], max-lines: [2, 400] */
27432 var i, key;
27433
27434 if (typeof a !== typeof b) { return false; }
27435 if (a == null || b == null) { return false; }
27436
27437 if ($objToString(a) !== $objToString(b)) { return false; }
27438
27439 if (isArguments(a) !== isArguments(b)) { return false; }
27440
27441 var aIsArray = isArray(a);
27442 var bIsArray = isArray(b);
27443 if (aIsArray !== bIsArray) { return false; }
27444
27445 // TODO: replace when a cross-realm brand check is available
27446 var aIsError = a instanceof Error;
27447 var bIsError = b instanceof Error;
27448 if (aIsError !== bIsError) { return false; }
27449 if (aIsError || bIsError) {
27450 if (a.name !== b.name || a.message !== b.message) { return false; }
27451 }
27452
27453 var aIsRegex = isRegex(a);
27454 var bIsRegex = isRegex(b);
27455 if (aIsRegex !== bIsRegex) { return false; }
27456 if ((aIsRegex || bIsRegex) && (a.source !== b.source || flags(a) !== flags(b))) {
27457 return false;
27458 }
27459
27460 var aIsDate = isDate(a);
27461 var bIsDate = isDate(b);
27462 if (aIsDate !== bIsDate) { return false; }
27463 if (aIsDate || bIsDate) { // && would work too, because both are true or both false here
27464 if ($getTime(a) !== $getTime(b)) { return false; }
27465 }
27466 if (opts.strict && gPO && gPO(a) !== gPO(b)) { return false; }
27467
27468 var aWhich = whichTypedArray(a);
27469 var bWhich = whichTypedArray(b);
27470 if (aWhich !== bWhich) {
27471 return false;
27472 }
27473 if (aWhich || bWhich) { // && would work too, because both are true or both false here
27474 if (a.length !== b.length) { return false; }
27475 for (i = 0; i < a.length; i++) {
27476 if (a[i] !== b[i]) { return false; }
27477 }
27478 return true;
27479 }
27480
27481 var aIsBuffer = isBuffer(a);
27482 var bIsBuffer = isBuffer(b);
27483 if (aIsBuffer !== bIsBuffer) { return false; }
27484 if (aIsBuffer || bIsBuffer) { // && would work too, because both are true or both false here
27485 if (a.length !== b.length) { return false; }
27486 for (i = 0; i < a.length; i++) {
27487 if (a[i] !== b[i]) { return false; }
27488 }
27489 return true;
27490 }
27491
27492 var aIsArrayBuffer = isArrayBuffer(a);
27493 var bIsArrayBuffer = isArrayBuffer(b);
27494 if (aIsArrayBuffer !== bIsArrayBuffer) { return false; }
27495 if (aIsArrayBuffer || bIsArrayBuffer) { // && would work too, because both are true or both false here
27496 if (byteLength(a) !== byteLength(b)) { return false; }
27497 return typeof Uint8Array === 'function' && internalDeepEqual(new Uint8Array(a), new Uint8Array(b), opts, channel);
27498 }
27499
27500 var aIsSAB = isSharedArrayBuffer(a);
27501 var bIsSAB = isSharedArrayBuffer(b);
27502 if (aIsSAB !== bIsSAB) { return false; }
27503 if (aIsSAB || bIsSAB) { // && would work too, because both are true or both false here
27504 if (sabByteLength(a) !== sabByteLength(b)) { return false; }
27505 return typeof Uint8Array === 'function' && internalDeepEqual(new Uint8Array(a), new Uint8Array(b), opts, channel);
27506 }
27507
27508 if (typeof a !== typeof b) { return false; }
27509
27510 var ka = objectKeys(a);
27511 var kb = objectKeys(b);
27512 // having the same number of owned properties (keys incorporates hasOwnProperty)
27513 if (ka.length !== kb.length) { return false; }
27514
27515 // the same set of keys (although not necessarily the same order),
27516 ka.sort();
27517 kb.sort();
27518 // ~~~cheap key test
27519 for (i = ka.length - 1; i >= 0; i--) {
27520 if (ka[i] != kb[i]) { return false; } // eslint-disable-line eqeqeq
27521 }
27522
27523 // equivalent values for every corresponding key, and ~~~possibly expensive deep test
27524 for (i = ka.length - 1; i >= 0; i--) {
27525 key = ka[i];
27526 if (!internalDeepEqual(a[key], b[key], opts, channel)) { return false; }
27527 }
27528
27529 var aCollection = whichCollection(a);
27530 var bCollection = whichCollection(b);
27531 if (aCollection !== bCollection) {
27532 return false;
27533 }
27534 if (aCollection === 'Set' || bCollection === 'Set') { // aCollection === bCollection
27535 return setEquiv(a, b, opts, channel);
27536 }
27537 if (aCollection === 'Map') { // aCollection === bCollection
27538 return mapEquiv(a, b, opts, channel);
27539 }
27540
27541 return true;
27542}
27543
27544module.exports = function deepEqual(a, b, opts) {
27545 return internalDeepEqual(a, b, opts, getSideChannel());
27546};
27547
27548},{"array-buffer-byte-length":84,"call-bind/callBound":115,"es-get-iterator":168,"get-intrinsic":177,"is-arguments":189,"is-array-buffer":190,"is-date-object":194,"is-regex":197,"is-shared-array-buffer":199,"isarray":156,"object-is":211,"object-keys":215,"object.assign":218,"regexp.prototype.flags":241,"side-channel":263,"which-boxed-primitive":276,"which-collection":277,"which-typed-array":278}],156:[function(require,module,exports){
27549var toString = {}.toString;
27550
27551module.exports = Array.isArray || function (arr) {
27552 return toString.call(arr) == '[object Array]';
27553};
27554
27555},{}],157:[function(require,module,exports){
27556'use strict';
27557
27558var $defineProperty = require('es-define-property');
27559
27560var $SyntaxError = require('es-errors/syntax');
27561var $TypeError = require('es-errors/type');
27562
27563var gopd = require('gopd');
27564
27565/** @type {import('.')} */
27566module.exports = function defineDataProperty(
27567 obj,
27568 property,
27569 value
27570) {
27571 if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {
27572 throw new $TypeError('`obj` must be an object or a function`');
27573 }
27574 if (typeof property !== 'string' && typeof property !== 'symbol') {
27575 throw new $TypeError('`property` must be a string or a symbol`');
27576 }
27577 if (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) {
27578 throw new $TypeError('`nonEnumerable`, if provided, must be a boolean or null');
27579 }
27580 if (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) {
27581 throw new $TypeError('`nonWritable`, if provided, must be a boolean or null');
27582 }
27583 if (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) {
27584 throw new $TypeError('`nonConfigurable`, if provided, must be a boolean or null');
27585 }
27586 if (arguments.length > 6 && typeof arguments[6] !== 'boolean') {
27587 throw new $TypeError('`loose`, if provided, must be a boolean');
27588 }
27589
27590 var nonEnumerable = arguments.length > 3 ? arguments[3] : null;
27591 var nonWritable = arguments.length > 4 ? arguments[4] : null;
27592 var nonConfigurable = arguments.length > 5 ? arguments[5] : null;
27593 var loose = arguments.length > 6 ? arguments[6] : false;
27594
27595 /* @type {false | TypedPropertyDescriptor<unknown>} */
27596 var desc = !!gopd && gopd(obj, property);
27597
27598 if ($defineProperty) {
27599 $defineProperty(obj, property, {
27600 configurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable,
27601 enumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable,
27602 value: value,
27603 writable: nonWritable === null && desc ? desc.writable : !nonWritable
27604 });
27605 } else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) {
27606 // must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable
27607 obj[property] = value; // eslint-disable-line no-param-reassign
27608 } else {
27609 throw new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.');
27610 }
27611};
27612
27613},{"es-define-property":160,"es-errors/syntax":165,"es-errors/type":166,"gopd":178}],158:[function(require,module,exports){
27614'use strict';
27615
27616var keys = require('object-keys');
27617var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';
27618
27619var toStr = Object.prototype.toString;
27620var concat = Array.prototype.concat;
27621var defineDataProperty = require('define-data-property');
27622
27623var isFunction = function (fn) {
27624 return typeof fn === 'function' && toStr.call(fn) === '[object Function]';
27625};
27626
27627var supportsDescriptors = require('has-property-descriptors')();
27628
27629var defineProperty = function (object, name, value, predicate) {
27630 if (name in object) {
27631 if (predicate === true) {
27632 if (object[name] === value) {
27633 return;
27634 }
27635 } else if (!isFunction(predicate) || !predicate()) {
27636 return;
27637 }
27638 }
27639
27640 if (supportsDescriptors) {
27641 defineDataProperty(object, name, value, true);
27642 } else {
27643 defineDataProperty(object, name, value);
27644 }
27645};
27646
27647var defineProperties = function (object, map) {
27648 var predicates = arguments.length > 2 ? arguments[2] : {};
27649 var props = keys(map);
27650 if (hasSymbols) {
27651 props = concat.call(props, Object.getOwnPropertySymbols(map));
27652 }
27653 for (var i = 0; i < props.length; i += 1) {
27654 defineProperty(object, props[i], map[props[i]], predicates[props[i]]);
27655 }
27656};
27657
27658defineProperties.supportsDescriptors = !!supportsDescriptors;
27659
27660module.exports = defineProperties;
27661
27662},{"define-data-property":157,"has-property-descriptors":180,"object-keys":215}],159:[function(require,module,exports){
27663'use strict';
27664
27665var INITIAL_STATE = 1;
27666var FAIL_STATE = 0;
27667/**
27668 * A StateMachine represents a deterministic finite automaton.
27669 * It can perform matches over a sequence of values, similar to a regular expression.
27670 */
27671
27672class StateMachine {
27673 constructor(dfa) {
27674 this.stateTable = dfa.stateTable;
27675 this.accepting = dfa.accepting;
27676 this.tags = dfa.tags;
27677 }
27678 /**
27679 * Returns an iterable object that yields pattern matches over the input sequence.
27680 * Matches are of the form [startIndex, endIndex, tags].
27681 */
27682
27683
27684 match(str) {
27685 var self = this;
27686 return {
27687 *[Symbol.iterator]() {
27688 var state = INITIAL_STATE;
27689 var startRun = null;
27690 var lastAccepting = null;
27691 var lastState = null;
27692
27693 for (var p = 0; p < str.length; p++) {
27694 var c = str[p];
27695 lastState = state;
27696 state = self.stateTable[state][c];
27697
27698 if (state === FAIL_STATE) {
27699 // yield the last match if any
27700 if (startRun != null && lastAccepting != null && lastAccepting >= startRun) {
27701 yield [startRun, lastAccepting, self.tags[lastState]];
27702 } // reset the state as if we started over from the initial state
27703
27704
27705 state = self.stateTable[INITIAL_STATE][c];
27706 startRun = null;
27707 } // start a run if not in the failure state
27708
27709
27710 if (state !== FAIL_STATE && startRun == null) {
27711 startRun = p;
27712 } // if accepting, mark the potential match end
27713
27714
27715 if (self.accepting[state]) {
27716 lastAccepting = p;
27717 } // reset the state to the initial state if we get into the failure state
27718
27719
27720 if (state === FAIL_STATE) {
27721 state = INITIAL_STATE;
27722 }
27723 } // yield the last match if any
27724
27725
27726 if (startRun != null && lastAccepting != null && lastAccepting >= startRun) {
27727 yield [startRun, lastAccepting, self.tags[state]];
27728 }
27729 }
27730
27731 };
27732 }
27733 /**
27734 * For each match over the input sequence, action functions matching
27735 * the tag definitions in the input pattern are called with the startIndex,
27736 * endIndex, and sub-match sequence.
27737 */
27738
27739
27740 apply(str, actions) {
27741 for (var [start, end, tags] of this.match(str)) {
27742 for (var tag of tags) {
27743 if (typeof actions[tag] === 'function') {
27744 actions[tag](start, end, str.slice(start, end + 1));
27745 }
27746 }
27747 }
27748 }
27749
27750}
27751
27752module.exports = StateMachine;
27753
27754
27755},{}],160:[function(require,module,exports){
27756'use strict';
27757
27758var GetIntrinsic = require('get-intrinsic');
27759
27760/** @type {import('.')} */
27761var $defineProperty = GetIntrinsic('%Object.defineProperty%', true) || false;
27762if ($defineProperty) {
27763 try {
27764 $defineProperty({}, 'a', { value: 1 });
27765 } catch (e) {
27766 // IE 8 has a broken defineProperty
27767 $defineProperty = false;
27768 }
27769}
27770
27771module.exports = $defineProperty;
27772
27773},{"get-intrinsic":177}],161:[function(require,module,exports){
27774'use strict';
27775
27776/** @type {import('./eval')} */
27777module.exports = EvalError;
27778
27779},{}],162:[function(require,module,exports){
27780'use strict';
27781
27782/** @type {import('.')} */
27783module.exports = Error;
27784
27785},{}],163:[function(require,module,exports){
27786'use strict';
27787
27788/** @type {import('./range')} */
27789module.exports = RangeError;
27790
27791},{}],164:[function(require,module,exports){
27792'use strict';
27793
27794/** @type {import('./ref')} */
27795module.exports = ReferenceError;
27796
27797},{}],165:[function(require,module,exports){
27798'use strict';
27799
27800/** @type {import('./syntax')} */
27801module.exports = SyntaxError;
27802
27803},{}],166:[function(require,module,exports){
27804'use strict';
27805
27806/** @type {import('./type')} */
27807module.exports = TypeError;
27808
27809},{}],167:[function(require,module,exports){
27810'use strict';
27811
27812/** @type {import('./uri')} */
27813module.exports = URIError;
27814
27815},{}],168:[function(require,module,exports){
27816(function (process){(function (){
27817'use strict';
27818
27819/* eslint global-require: 0 */
27820// the code is structured this way so that bundlers can
27821// alias out `has-symbols` to `() => true` or `() => false` if your target
27822// environments' Symbol capabilities are known, and then use
27823// dead code elimination on the rest of this module.
27824//
27825// Similarly, `isarray` can be aliased to `Array.isArray` if
27826// available in all target environments.
27827
27828var isArguments = require('is-arguments');
27829var getStopIterationIterator = require('stop-iteration-iterator');
27830
27831if (require('has-symbols')() || require('has-symbols/shams')()) {
27832 var $iterator = Symbol.iterator;
27833 // Symbol is available natively or shammed
27834 // natively:
27835 // - Chrome >= 38
27836 // - Edge 12-14?, Edge >= 15 for sure
27837 // - FF >= 36
27838 // - Safari >= 9
27839 // - node >= 0.12
27840 module.exports = function getIterator(iterable) {
27841 // alternatively, `iterable[$iterator]?.()`
27842 if (iterable != null && typeof iterable[$iterator] !== 'undefined') {
27843 return iterable[$iterator]();
27844 }
27845 if (isArguments(iterable)) {
27846 // arguments objects lack Symbol.iterator
27847 // - node 0.12
27848 return Array.prototype[$iterator].call(iterable);
27849 }
27850 };
27851} else {
27852 // Symbol is not available, native or shammed
27853 var isArray = require('isarray');
27854 var isString = require('is-string');
27855 var GetIntrinsic = require('get-intrinsic');
27856 var $Map = GetIntrinsic('%Map%', true);
27857 var $Set = GetIntrinsic('%Set%', true);
27858 var callBound = require('call-bind/callBound');
27859 var $arrayPush = callBound('Array.prototype.push');
27860 var $charCodeAt = callBound('String.prototype.charCodeAt');
27861 var $stringSlice = callBound('String.prototype.slice');
27862
27863 var advanceStringIndex = function advanceStringIndex(S, index) {
27864 var length = S.length;
27865 if ((index + 1) >= length) {
27866 return index + 1;
27867 }
27868
27869 var first = $charCodeAt(S, index);
27870 if (first < 0xD800 || first > 0xDBFF) {
27871 return index + 1;
27872 }
27873
27874 var second = $charCodeAt(S, index + 1);
27875 if (second < 0xDC00 || second > 0xDFFF) {
27876 return index + 1;
27877 }
27878
27879 return index + 2;
27880 };
27881
27882 var getArrayIterator = function getArrayIterator(arraylike) {
27883 var i = 0;
27884 return {
27885 next: function next() {
27886 var done = i >= arraylike.length;
27887 var value;
27888 if (!done) {
27889 value = arraylike[i];
27890 i += 1;
27891 }
27892 return {
27893 done: done,
27894 value: value
27895 };
27896 }
27897 };
27898 };
27899
27900 var getNonCollectionIterator = function getNonCollectionIterator(iterable, noPrimordialCollections) {
27901 if (isArray(iterable) || isArguments(iterable)) {
27902 return getArrayIterator(iterable);
27903 }
27904 if (isString(iterable)) {
27905 var i = 0;
27906 return {
27907 next: function next() {
27908 var nextIndex = advanceStringIndex(iterable, i);
27909 var value = $stringSlice(iterable, i, nextIndex);
27910 i = nextIndex;
27911 return {
27912 done: nextIndex > iterable.length,
27913 value: value
27914 };
27915 }
27916 };
27917 }
27918
27919 // es6-shim and es-shims' es-map use a string "_es6-shim iterator_" property on different iterables, such as MapIterator.
27920 if (noPrimordialCollections && typeof iterable['_es6-shim iterator_'] !== 'undefined') {
27921 return iterable['_es6-shim iterator_']();
27922 }
27923 };
27924
27925 if (!$Map && !$Set) {
27926 // the only language iterables are Array, String, arguments
27927 // - Safari <= 6.0
27928 // - Chrome < 38
27929 // - node < 0.12
27930 // - FF < 13
27931 // - IE < 11
27932 // - Edge < 11
27933
27934 module.exports = function getIterator(iterable) {
27935 if (iterable != null) {
27936 return getNonCollectionIterator(iterable, true);
27937 }
27938 };
27939 } else {
27940 // either Map or Set are available, but Symbol is not
27941 // - es6-shim on an ES5 browser
27942 // - Safari 6.2 (maybe 6.1?)
27943 // - FF v[13, 36)
27944 // - IE 11
27945 // - Edge 11
27946 // - Safari v[6, 9)
27947
27948 var isMap = require('is-map');
27949 var isSet = require('is-set');
27950
27951 // Firefox >= 27, IE 11, Safari 6.2 - 9, Edge 11, es6-shim in older envs, all have forEach
27952 var $mapForEach = callBound('Map.prototype.forEach', true);
27953 var $setForEach = callBound('Set.prototype.forEach', true);
27954 if (typeof process === 'undefined' || !process.versions || !process.versions.node) { // "if is not node"
27955
27956 // Firefox 17 - 26 has `.iterator()`, whose iterator `.next()` either
27957 // returns a value, or throws a StopIteration object. These browsers
27958 // do not have any other mechanism for iteration.
27959 var $mapIterator = callBound('Map.prototype.iterator', true);
27960 var $setIterator = callBound('Set.prototype.iterator', true);
27961 }
27962 // Firefox 27-35, and some older es6-shim versions, use a string "@@iterator" property
27963 // this returns a proper iterator object, so we should use it instead of forEach.
27964 // newer es6-shim versions use a string "_es6-shim iterator_" property.
27965 var $mapAtAtIterator = callBound('Map.prototype.@@iterator', true) || callBound('Map.prototype._es6-shim iterator_', true);
27966 var $setAtAtIterator = callBound('Set.prototype.@@iterator', true) || callBound('Set.prototype._es6-shim iterator_', true);
27967
27968 var getCollectionIterator = function getCollectionIterator(iterable) {
27969 if (isMap(iterable)) {
27970 if ($mapIterator) {
27971 return getStopIterationIterator($mapIterator(iterable));
27972 }
27973 if ($mapAtAtIterator) {
27974 return $mapAtAtIterator(iterable);
27975 }
27976 if ($mapForEach) {
27977 var entries = [];
27978 $mapForEach(iterable, function (v, k) {
27979 $arrayPush(entries, [k, v]);
27980 });
27981 return getArrayIterator(entries);
27982 }
27983 }
27984 if (isSet(iterable)) {
27985 if ($setIterator) {
27986 return getStopIterationIterator($setIterator(iterable));
27987 }
27988 if ($setAtAtIterator) {
27989 return $setAtAtIterator(iterable);
27990 }
27991 if ($setForEach) {
27992 var values = [];
27993 $setForEach(iterable, function (v) {
27994 $arrayPush(values, v);
27995 });
27996 return getArrayIterator(values);
27997 }
27998 }
27999 };
28000
28001 module.exports = function getIterator(iterable) {
28002 return getCollectionIterator(iterable) || getNonCollectionIterator(iterable);
28003 };
28004 }
28005}
28006
28007}).call(this)}).call(this,require('_process'))
28008},{"_process":224,"call-bind/callBound":115,"get-intrinsic":177,"has-symbols":182,"has-symbols/shams":183,"is-arguments":189,"is-map":195,"is-set":198,"is-string":200,"isarray":169,"stop-iteration-iterator":264}],169:[function(require,module,exports){
28009arguments[4][156][0].apply(exports,arguments)
28010},{"dup":156}],170:[function(require,module,exports){
28011// Copyright Joyent, Inc. and other Node contributors.
28012//
28013// Permission is hereby granted, free of charge, to any person obtaining a
28014// copy of this software and associated documentation files (the
28015// "Software"), to deal in the Software without restriction, including
28016// without limitation the rights to use, copy, modify, merge, publish,
28017// distribute, sublicense, and/or sell copies of the Software, and to permit
28018// persons to whom the Software is furnished to do so, subject to the
28019// following conditions:
28020//
28021// The above copyright notice and this permission notice shall be included
28022// in all copies or substantial portions of the Software.
28023//
28024// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
28025// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28026// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
28027// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
28028// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
28029// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
28030// USE OR OTHER DEALINGS IN THE SOFTWARE.
28031
28032var objectCreate = Object.create || objectCreatePolyfill
28033var objectKeys = Object.keys || objectKeysPolyfill
28034var bind = Function.prototype.bind || functionBindPolyfill
28035
28036function EventEmitter() {
28037 if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) {
28038 this._events = objectCreate(null);
28039 this._eventsCount = 0;
28040 }
28041
28042 this._maxListeners = this._maxListeners || undefined;
28043}
28044module.exports = EventEmitter;
28045
28046// Backwards-compat with node 0.10.x
28047EventEmitter.EventEmitter = EventEmitter;
28048
28049EventEmitter.prototype._events = undefined;
28050EventEmitter.prototype._maxListeners = undefined;
28051
28052// By default EventEmitters will print a warning if more than 10 listeners are
28053// added to it. This is a useful default which helps finding memory leaks.
28054var defaultMaxListeners = 10;
28055
28056var hasDefineProperty;
28057try {
28058 var o = {};
28059 if (Object.defineProperty) Object.defineProperty(o, 'x', { value: 0 });
28060 hasDefineProperty = o.x === 0;
28061} catch (err) { hasDefineProperty = false }
28062if (hasDefineProperty) {
28063 Object.defineProperty(EventEmitter, 'defaultMaxListeners', {
28064 enumerable: true,
28065 get: function() {
28066 return defaultMaxListeners;
28067 },
28068 set: function(arg) {
28069 // check whether the input is a positive number (whose value is zero or
28070 // greater and not a NaN).
28071 if (typeof arg !== 'number' || arg < 0 || arg !== arg)
28072 throw new TypeError('"defaultMaxListeners" must be a positive number');
28073 defaultMaxListeners = arg;
28074 }
28075 });
28076} else {
28077 EventEmitter.defaultMaxListeners = defaultMaxListeners;
28078}
28079
28080// Obviously not all Emitters should be limited to 10. This function allows
28081// that to be increased. Set to zero for unlimited.
28082EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
28083 if (typeof n !== 'number' || n < 0 || isNaN(n))
28084 throw new TypeError('"n" argument must be a positive number');
28085 this._maxListeners = n;
28086 return this;
28087};
28088
28089function $getMaxListeners(that) {
28090 if (that._maxListeners === undefined)
28091 return EventEmitter.defaultMaxListeners;
28092 return that._maxListeners;
28093}
28094
28095EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
28096 return $getMaxListeners(this);
28097};
28098
28099// These standalone emit* functions are used to optimize calling of event
28100// handlers for fast cases because emit() itself often has a variable number of
28101// arguments and can be deoptimized because of that. These functions always have
28102// the same number of arguments and thus do not get deoptimized, so the code
28103// inside them can execute faster.
28104function emitNone(handler, isFn, self) {
28105 if (isFn)
28106 handler.call(self);
28107 else {
28108 var len = handler.length;
28109 var listeners = arrayClone(handler, len);
28110 for (var i = 0; i < len; ++i)
28111 listeners[i].call(self);
28112 }
28113}
28114function emitOne(handler, isFn, self, arg1) {
28115 if (isFn)
28116 handler.call(self, arg1);
28117 else {
28118 var len = handler.length;
28119 var listeners = arrayClone(handler, len);
28120 for (var i = 0; i < len; ++i)
28121 listeners[i].call(self, arg1);
28122 }
28123}
28124function emitTwo(handler, isFn, self, arg1, arg2) {
28125 if (isFn)
28126 handler.call(self, arg1, arg2);
28127 else {
28128 var len = handler.length;
28129 var listeners = arrayClone(handler, len);
28130 for (var i = 0; i < len; ++i)
28131 listeners[i].call(self, arg1, arg2);
28132 }
28133}
28134function emitThree(handler, isFn, self, arg1, arg2, arg3) {
28135 if (isFn)
28136 handler.call(self, arg1, arg2, arg3);
28137 else {
28138 var len = handler.length;
28139 var listeners = arrayClone(handler, len);
28140 for (var i = 0; i < len; ++i)
28141 listeners[i].call(self, arg1, arg2, arg3);
28142 }
28143}
28144
28145function emitMany(handler, isFn, self, args) {
28146 if (isFn)
28147 handler.apply(self, args);
28148 else {
28149 var len = handler.length;
28150 var listeners = arrayClone(handler, len);
28151 for (var i = 0; i < len; ++i)
28152 listeners[i].apply(self, args);
28153 }
28154}
28155
28156EventEmitter.prototype.emit = function emit(type) {
28157 var er, handler, len, args, i, events;
28158 var doError = (type === 'error');
28159
28160 events = this._events;
28161 if (events)
28162 doError = (doError && events.error == null);
28163 else if (!doError)
28164 return false;
28165
28166 // If there is no 'error' event listener then throw.
28167 if (doError) {
28168 if (arguments.length > 1)
28169 er = arguments[1];
28170 if (er instanceof Error) {
28171 throw er; // Unhandled 'error' event
28172 } else {
28173 // At least give some kind of context to the user
28174 var err = new Error('Unhandled "error" event. (' + er + ')');
28175 err.context = er;
28176 throw err;
28177 }
28178 return false;
28179 }
28180
28181 handler = events[type];
28182
28183 if (!handler)
28184 return false;
28185
28186 var isFn = typeof handler === 'function';
28187 len = arguments.length;
28188 switch (len) {
28189 // fast cases
28190 case 1:
28191 emitNone(handler, isFn, this);
28192 break;
28193 case 2:
28194 emitOne(handler, isFn, this, arguments[1]);
28195 break;
28196 case 3:
28197 emitTwo(handler, isFn, this, arguments[1], arguments[2]);
28198 break;
28199 case 4:
28200 emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);
28201 break;
28202 // slower
28203 default:
28204 args = new Array(len - 1);
28205 for (i = 1; i < len; i++)
28206 args[i - 1] = arguments[i];
28207 emitMany(handler, isFn, this, args);
28208 }
28209
28210 return true;
28211};
28212
28213function _addListener(target, type, listener, prepend) {
28214 var m;
28215 var events;
28216 var existing;
28217
28218 if (typeof listener !== 'function')
28219 throw new TypeError('"listener" argument must be a function');
28220
28221 events = target._events;
28222 if (!events) {
28223 events = target._events = objectCreate(null);
28224 target._eventsCount = 0;
28225 } else {
28226 // To avoid recursion in the case that type === "newListener"! Before
28227 // adding it to the listeners, first emit "newListener".
28228 if (events.newListener) {
28229 target.emit('newListener', type,
28230 listener.listener ? listener.listener : listener);
28231
28232 // Re-assign `events` because a newListener handler could have caused the
28233 // this._events to be assigned to a new object
28234 events = target._events;
28235 }
28236 existing = events[type];
28237 }
28238
28239 if (!existing) {
28240 // Optimize the case of one listener. Don't need the extra array object.
28241 existing = events[type] = listener;
28242 ++target._eventsCount;
28243 } else {
28244 if (typeof existing === 'function') {
28245 // Adding the second element, need to change to array.
28246 existing = events[type] =
28247 prepend ? [listener, existing] : [existing, listener];
28248 } else {
28249 // If we've already got an array, just append.
28250 if (prepend) {
28251 existing.unshift(listener);
28252 } else {
28253 existing.push(listener);
28254 }
28255 }
28256
28257 // Check for listener leak
28258 if (!existing.warned) {
28259 m = $getMaxListeners(target);
28260 if (m && m > 0 && existing.length > m) {
28261 existing.warned = true;
28262 var w = new Error('Possible EventEmitter memory leak detected. ' +
28263 existing.length + ' "' + String(type) + '" listeners ' +
28264 'added. Use emitter.setMaxListeners() to ' +
28265 'increase limit.');
28266 w.name = 'MaxListenersExceededWarning';
28267 w.emitter = target;
28268 w.type = type;
28269 w.count = existing.length;
28270 if (typeof console === 'object' && console.warn) {
28271 console.warn('%s: %s', w.name, w.message);
28272 }
28273 }
28274 }
28275 }
28276
28277 return target;
28278}
28279
28280EventEmitter.prototype.addListener = function addListener(type, listener) {
28281 return _addListener(this, type, listener, false);
28282};
28283
28284EventEmitter.prototype.on = EventEmitter.prototype.addListener;
28285
28286EventEmitter.prototype.prependListener =
28287 function prependListener(type, listener) {
28288 return _addListener(this, type, listener, true);
28289 };
28290
28291function onceWrapper() {
28292 if (!this.fired) {
28293 this.target.removeListener(this.type, this.wrapFn);
28294 this.fired = true;
28295 switch (arguments.length) {
28296 case 0:
28297 return this.listener.call(this.target);
28298 case 1:
28299 return this.listener.call(this.target, arguments[0]);
28300 case 2:
28301 return this.listener.call(this.target, arguments[0], arguments[1]);
28302 case 3:
28303 return this.listener.call(this.target, arguments[0], arguments[1],
28304 arguments[2]);
28305 default:
28306 var args = new Array(arguments.length);
28307 for (var i = 0; i < args.length; ++i)
28308 args[i] = arguments[i];
28309 this.listener.apply(this.target, args);
28310 }
28311 }
28312}
28313
28314function _onceWrap(target, type, listener) {
28315 var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };
28316 var wrapped = bind.call(onceWrapper, state);
28317 wrapped.listener = listener;
28318 state.wrapFn = wrapped;
28319 return wrapped;
28320}
28321
28322EventEmitter.prototype.once = function once(type, listener) {
28323 if (typeof listener !== 'function')
28324 throw new TypeError('"listener" argument must be a function');
28325 this.on(type, _onceWrap(this, type, listener));
28326 return this;
28327};
28328
28329EventEmitter.prototype.prependOnceListener =
28330 function prependOnceListener(type, listener) {
28331 if (typeof listener !== 'function')
28332 throw new TypeError('"listener" argument must be a function');
28333 this.prependListener(type, _onceWrap(this, type, listener));
28334 return this;
28335 };
28336
28337// Emits a 'removeListener' event if and only if the listener was removed.
28338EventEmitter.prototype.removeListener =
28339 function removeListener(type, listener) {
28340 var list, events, position, i, originalListener;
28341
28342 if (typeof listener !== 'function')
28343 throw new TypeError('"listener" argument must be a function');
28344
28345 events = this._events;
28346 if (!events)
28347 return this;
28348
28349 list = events[type];
28350 if (!list)
28351 return this;
28352
28353 if (list === listener || list.listener === listener) {
28354 if (--this._eventsCount === 0)
28355 this._events = objectCreate(null);
28356 else {
28357 delete events[type];
28358 if (events.removeListener)
28359 this.emit('removeListener', type, list.listener || listener);
28360 }
28361 } else if (typeof list !== 'function') {
28362 position = -1;
28363
28364 for (i = list.length - 1; i >= 0; i--) {
28365 if (list[i] === listener || list[i].listener === listener) {
28366 originalListener = list[i].listener;
28367 position = i;
28368 break;
28369 }
28370 }
28371
28372 if (position < 0)
28373 return this;
28374
28375 if (position === 0)
28376 list.shift();
28377 else
28378 spliceOne(list, position);
28379
28380 if (list.length === 1)
28381 events[type] = list[0];
28382
28383 if (events.removeListener)
28384 this.emit('removeListener', type, originalListener || listener);
28385 }
28386
28387 return this;
28388 };
28389
28390EventEmitter.prototype.removeAllListeners =
28391 function removeAllListeners(type) {
28392 var listeners, events, i;
28393
28394 events = this._events;
28395 if (!events)
28396 return this;
28397
28398 // not listening for removeListener, no need to emit
28399 if (!events.removeListener) {
28400 if (arguments.length === 0) {
28401 this._events = objectCreate(null);
28402 this._eventsCount = 0;
28403 } else if (events[type]) {
28404 if (--this._eventsCount === 0)
28405 this._events = objectCreate(null);
28406 else
28407 delete events[type];
28408 }
28409 return this;
28410 }
28411
28412 // emit removeListener for all listeners on all events
28413 if (arguments.length === 0) {
28414 var keys = objectKeys(events);
28415 var key;
28416 for (i = 0; i < keys.length; ++i) {
28417 key = keys[i];
28418 if (key === 'removeListener') continue;
28419 this.removeAllListeners(key);
28420 }
28421 this.removeAllListeners('removeListener');
28422 this._events = objectCreate(null);
28423 this._eventsCount = 0;
28424 return this;
28425 }
28426
28427 listeners = events[type];
28428
28429 if (typeof listeners === 'function') {
28430 this.removeListener(type, listeners);
28431 } else if (listeners) {
28432 // LIFO order
28433 for (i = listeners.length - 1; i >= 0; i--) {
28434 this.removeListener(type, listeners[i]);
28435 }
28436 }
28437
28438 return this;
28439 };
28440
28441function _listeners(target, type, unwrap) {
28442 var events = target._events;
28443
28444 if (!events)
28445 return [];
28446
28447 var evlistener = events[type];
28448 if (!evlistener)
28449 return [];
28450
28451 if (typeof evlistener === 'function')
28452 return unwrap ? [evlistener.listener || evlistener] : [evlistener];
28453
28454 return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
28455}
28456
28457EventEmitter.prototype.listeners = function listeners(type) {
28458 return _listeners(this, type, true);
28459};
28460
28461EventEmitter.prototype.rawListeners = function rawListeners(type) {
28462 return _listeners(this, type, false);
28463};
28464
28465EventEmitter.listenerCount = function(emitter, type) {
28466 if (typeof emitter.listenerCount === 'function') {
28467 return emitter.listenerCount(type);
28468 } else {
28469 return listenerCount.call(emitter, type);
28470 }
28471};
28472
28473EventEmitter.prototype.listenerCount = listenerCount;
28474function listenerCount(type) {
28475 var events = this._events;
28476
28477 if (events) {
28478 var evlistener = events[type];
28479
28480 if (typeof evlistener === 'function') {
28481 return 1;
28482 } else if (evlistener) {
28483 return evlistener.length;
28484 }
28485 }
28486
28487 return 0;
28488}
28489
28490EventEmitter.prototype.eventNames = function eventNames() {
28491 return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];
28492};
28493
28494// About 1.5x faster than the two-arg version of Array#splice().
28495function spliceOne(list, index) {
28496 for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)
28497 list[i] = list[k];
28498 list.pop();
28499}
28500
28501function arrayClone(arr, n) {
28502 var copy = new Array(n);
28503 for (var i = 0; i < n; ++i)
28504 copy[i] = arr[i];
28505 return copy;
28506}
28507
28508function unwrapListeners(arr) {
28509 var ret = new Array(arr.length);
28510 for (var i = 0; i < ret.length; ++i) {
28511 ret[i] = arr[i].listener || arr[i];
28512 }
28513 return ret;
28514}
28515
28516function objectCreatePolyfill(proto) {
28517 var F = function() {};
28518 F.prototype = proto;
28519 return new F;
28520}
28521function objectKeysPolyfill(obj) {
28522 var keys = [];
28523 for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k)) {
28524 keys.push(k);
28525 }
28526 return k;
28527}
28528function functionBindPolyfill(context) {
28529 var fn = this;
28530 return function () {
28531 return fn.apply(context, arguments);
28532 };
28533}
28534
28535},{}],171:[function(require,module,exports){
28536(function (global){(function (){
28537var $lzfo4$restructure = require("restructure");
28538var $lzfo4$fs = require("fs");
28539var $lzfo4$swchelpers = require("@swc/helpers");
28540var $lzfo4$buffer = require("buffer");
28541var $lzfo4$restructuresrcutilsjs = require("restructure/src/utils.js");
28542var $lzfo4$deepequal = require("deep-equal");
28543var $lzfo4$iconvlitecjs = require("../iconv-lite.cjs");
28544var $lzfo4$unicodeproperties = require("unicode-properties");
28545var $lzfo4$unicodetrie = require("unicode-trie");
28546var $lzfo4$dfa = require("dfa");
28547var $lzfo4$clone = require("clone");
28548var $lzfo4$tinyinflate = require("tiny-inflate");
28549var $lzfo4$brotlidecompressjs = require("brotli/decompress.js");
28550
28551function $parcel$defineInteropFlag(a) {
28552 Object.defineProperty(a, '__esModule', {value: true, configurable: true});
28553}
28554function $parcel$export(e, n, v, s) {
28555 Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
28556}
28557function $parcel$exportWildcard(dest, source) {
28558 Object.keys(source).forEach(function(key) {
28559 if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) {
28560 return;
28561 }
28562
28563 Object.defineProperty(dest, key, {
28564 enumerable: true,
28565 get: function get() {
28566 return source[key];
28567 }
28568 });
28569 });
28570
28571 return dest;
28572}
28573function $parcel$interopDefault(a) {
28574 return a && a.__esModule ? a.default : a;
28575}
28576
28577$parcel$defineInteropFlag(module.exports);
28578
28579$parcel$export(module.exports, "default", () => $7b813caac4971c4b$export$2e2bcd8739ae039);
28580var $a35dad4d16c8d1df$exports = {};
28581
28582$parcel$export($a35dad4d16c8d1df$exports, "logErrors", () => $a35dad4d16c8d1df$export$bd5c5d8b8dcafd78);
28583$parcel$export($a35dad4d16c8d1df$exports, "registerFormat", () => $a35dad4d16c8d1df$export$36b2f24e97d43be);
28584$parcel$export($a35dad4d16c8d1df$exports, "openSync", () => $a35dad4d16c8d1df$export$fa5499edb1ab414a);
28585$parcel$export($a35dad4d16c8d1df$exports, "create", () => $a35dad4d16c8d1df$export$185802fd694ee1f5);
28586$parcel$export($a35dad4d16c8d1df$exports, "open", () => $a35dad4d16c8d1df$export$3ce6949f20cea765);
28587$parcel$export($a35dad4d16c8d1df$exports, "defaultLanguage", () => $a35dad4d16c8d1df$export$42940898df819940);
28588$parcel$export($a35dad4d16c8d1df$exports, "setDefaultLanguage", () => $a35dad4d16c8d1df$export$5157e7780d44cc36);
28589
28590
28591let $a35dad4d16c8d1df$export$bd5c5d8b8dcafd78 = false;
28592let $a35dad4d16c8d1df$var$formats = [];
28593function $a35dad4d16c8d1df$export$36b2f24e97d43be(format) {
28594 $a35dad4d16c8d1df$var$formats.push(format);
28595}
28596function $a35dad4d16c8d1df$export$fa5499edb1ab414a(filename, postscriptName) {
28597 let buffer = $lzfo4$fs.readFileSync(filename);
28598 return $a35dad4d16c8d1df$export$185802fd694ee1f5(buffer, postscriptName);
28599}
28600function $a35dad4d16c8d1df$export$3ce6949f20cea765(filename, postscriptName, callback) {
28601 if (typeof postscriptName === 'function') {
28602 callback = postscriptName;
28603 postscriptName = null;
28604 }
28605 $lzfo4$fs.readFile(filename, function(err, buffer) {
28606 if (err) return callback(err);
28607 try {
28608 var font = $a35dad4d16c8d1df$export$185802fd694ee1f5(buffer, postscriptName);
28609 } catch (e) {
28610 return callback(e);
28611 }
28612 return callback(null, font);
28613 });
28614 return;
28615}
28616function $a35dad4d16c8d1df$export$185802fd694ee1f5(buffer, postscriptName) {
28617 for(let i = 0; i < $a35dad4d16c8d1df$var$formats.length; i++){
28618 let format = $a35dad4d16c8d1df$var$formats[i];
28619 if (format.probe(buffer)) {
28620 let font = new format(new ($parcel$interopDefault($lzfo4$restructure)).DecodeStream(buffer));
28621 if (postscriptName) return font.getFont(postscriptName);
28622 return font;
28623 }
28624 }
28625 throw new Error('Unknown font format');
28626}
28627let $a35dad4d16c8d1df$export$42940898df819940 = 'en';
28628function $a35dad4d16c8d1df$export$5157e7780d44cc36(lang = 'en') {
28629 $a35dad4d16c8d1df$export$42940898df819940 = lang;
28630}
28631
28632
28633
28634
28635function $9ea776e3198edd2e$export$69a3209f1a06c04d(target, key1, descriptor) {
28636 if (descriptor.get) {
28637 let get = descriptor.get;
28638 descriptor.get = function() {
28639 let value = get.call(this);
28640 Object.defineProperty(this, key1, {
28641 value: value
28642 });
28643 return value;
28644 };
28645 } else if (typeof descriptor.value === 'function') {
28646 let fn = descriptor.value;
28647 return {
28648 get () {
28649 let $9ea776e3198edd2e$export$69a3209f1a06c04d = new Map;
28650 function memoized(...args) {
28651 let key = args.length > 0 ? args[0] : 'value';
28652 if ($9ea776e3198edd2e$export$69a3209f1a06c04d.has(key)) return $9ea776e3198edd2e$export$69a3209f1a06c04d.get(key);
28653 let result = fn.apply(this, args);
28654 $9ea776e3198edd2e$export$69a3209f1a06c04d.set(key, result);
28655 return result;
28656 }
28657 Object.defineProperty(this, key1, {
28658 value: memoized
28659 });
28660 return memoized;
28661 }
28662 };
28663 }
28664}
28665
28666
28667
28668
28669
28670let $f6569fe31dc9e2a4$var$SubHeader = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
28671 firstCode: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28672 entryCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28673 idDelta: ($parcel$interopDefault($lzfo4$restructure)).int16,
28674 idRangeOffset: ($parcel$interopDefault($lzfo4$restructure)).uint16
28675});
28676let $f6569fe31dc9e2a4$var$CmapGroup = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
28677 startCharCode: ($parcel$interopDefault($lzfo4$restructure)).uint32,
28678 endCharCode: ($parcel$interopDefault($lzfo4$restructure)).uint32,
28679 glyphID: ($parcel$interopDefault($lzfo4$restructure)).uint32
28680});
28681let $f6569fe31dc9e2a4$var$UnicodeValueRange = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
28682 startUnicodeValue: ($parcel$interopDefault($lzfo4$restructure)).uint24,
28683 additionalCount: ($parcel$interopDefault($lzfo4$restructure)).uint8
28684});
28685let $f6569fe31dc9e2a4$var$UVSMapping = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
28686 unicodeValue: ($parcel$interopDefault($lzfo4$restructure)).uint24,
28687 glyphID: ($parcel$interopDefault($lzfo4$restructure)).uint16
28688});
28689let $f6569fe31dc9e2a4$var$DefaultUVS = new ($parcel$interopDefault($lzfo4$restructure)).Array($f6569fe31dc9e2a4$var$UnicodeValueRange, ($parcel$interopDefault($lzfo4$restructure)).uint32);
28690let $f6569fe31dc9e2a4$var$NonDefaultUVS = new ($parcel$interopDefault($lzfo4$restructure)).Array($f6569fe31dc9e2a4$var$UVSMapping, ($parcel$interopDefault($lzfo4$restructure)).uint32);
28691let $f6569fe31dc9e2a4$var$VarSelectorRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
28692 varSelector: ($parcel$interopDefault($lzfo4$restructure)).uint24,
28693 defaultUVS: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f6569fe31dc9e2a4$var$DefaultUVS, {
28694 type: 'parent'
28695 }),
28696 nonDefaultUVS: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f6569fe31dc9e2a4$var$NonDefaultUVS, {
28697 type: 'parent'
28698 })
28699});
28700let $f6569fe31dc9e2a4$var$CmapSubtable = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, {
28701 0: {
28702 length: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28703 language: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28704 codeMap: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).uint8, 256)
28705 },
28706 2: {
28707 length: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28708 language: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28709 subHeaderKeys: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 256),
28710 subHeaderCount: (t)=>Math.max.apply(Math, t.subHeaderKeys)
28711 ,
28712 subHeaders: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray($f6569fe31dc9e2a4$var$SubHeader, 'subHeaderCount'),
28713 glyphIndexArray: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).uint16, 'subHeaderCount')
28714 },
28715 4: {
28716 length: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28717 language: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28718 segCountX2: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28719 segCount: (t)=>t.segCountX2 >> 1
28720 ,
28721 searchRange: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28722 entrySelector: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28723 rangeShift: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28724 endCode: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).uint16, 'segCount'),
28725 reservedPad: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16),
28726 startCode: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).uint16, 'segCount'),
28727 idDelta: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).int16, 'segCount'),
28728 idRangeOffset: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).uint16, 'segCount'),
28729 glyphIndexArray: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).uint16, (t)=>(t.length - t._currentOffset) / 2
28730 )
28731 },
28732 6: {
28733 length: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28734 language: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28735 firstCode: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28736 entryCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28737 glyphIndices: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).uint16, 'entryCount')
28738 },
28739 8: {
28740 reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16),
28741 length: ($parcel$interopDefault($lzfo4$restructure)).uint32,
28742 language: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28743 is32: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).uint8, 8192),
28744 nGroups: ($parcel$interopDefault($lzfo4$restructure)).uint32,
28745 groups: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray($f6569fe31dc9e2a4$var$CmapGroup, 'nGroups')
28746 },
28747 10: {
28748 reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16),
28749 length: ($parcel$interopDefault($lzfo4$restructure)).uint32,
28750 language: ($parcel$interopDefault($lzfo4$restructure)).uint32,
28751 firstCode: ($parcel$interopDefault($lzfo4$restructure)).uint32,
28752 entryCount: ($parcel$interopDefault($lzfo4$restructure)).uint32,
28753 glyphIndices: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).uint16, 'numChars')
28754 },
28755 12: {
28756 reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16),
28757 length: ($parcel$interopDefault($lzfo4$restructure)).uint32,
28758 language: ($parcel$interopDefault($lzfo4$restructure)).uint32,
28759 nGroups: ($parcel$interopDefault($lzfo4$restructure)).uint32,
28760 groups: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray($f6569fe31dc9e2a4$var$CmapGroup, 'nGroups')
28761 },
28762 13: {
28763 reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16),
28764 length: ($parcel$interopDefault($lzfo4$restructure)).uint32,
28765 language: ($parcel$interopDefault($lzfo4$restructure)).uint32,
28766 nGroups: ($parcel$interopDefault($lzfo4$restructure)).uint32,
28767 groups: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray($f6569fe31dc9e2a4$var$CmapGroup, 'nGroups')
28768 },
28769 14: {
28770 length: ($parcel$interopDefault($lzfo4$restructure)).uint32,
28771 numRecords: ($parcel$interopDefault($lzfo4$restructure)).uint32,
28772 varSelectors: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray($f6569fe31dc9e2a4$var$VarSelectorRecord, 'numRecords')
28773 }
28774});
28775let $f6569fe31dc9e2a4$var$CmapEntry = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
28776 platformID: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28777 encodingID: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28778 table: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f6569fe31dc9e2a4$var$CmapSubtable, {
28779 type: 'parent',
28780 lazy: true
28781 })
28782});
28783var // character to glyph mapping
28784$f6569fe31dc9e2a4$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
28785 version: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28786 numSubtables: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28787 tables: new ($parcel$interopDefault($lzfo4$restructure)).Array($f6569fe31dc9e2a4$var$CmapEntry, 'numSubtables')
28788});
28789
28790
28791
28792var // font header
28793$e1b51afd73796719$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
28794 version: ($parcel$interopDefault($lzfo4$restructure)).int32,
28795 revision: ($parcel$interopDefault($lzfo4$restructure)).int32,
28796 checkSumAdjustment: ($parcel$interopDefault($lzfo4$restructure)).uint32,
28797 magicNumber: ($parcel$interopDefault($lzfo4$restructure)).uint32,
28798 flags: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28799 unitsPerEm: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28800 created: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).int32, 2),
28801 modified: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).int32, 2),
28802 xMin: ($parcel$interopDefault($lzfo4$restructure)).int16,
28803 yMin: ($parcel$interopDefault($lzfo4$restructure)).int16,
28804 xMax: ($parcel$interopDefault($lzfo4$restructure)).int16,
28805 yMax: ($parcel$interopDefault($lzfo4$restructure)).int16,
28806 macStyle: new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint16, [
28807 'bold',
28808 'italic',
28809 'underline',
28810 'outline',
28811 'shadow',
28812 'condensed',
28813 'extended'
28814 ]),
28815 lowestRecPPEM: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28816 fontDirectionHint: ($parcel$interopDefault($lzfo4$restructure)).int16,
28817 indexToLocFormat: ($parcel$interopDefault($lzfo4$restructure)).int16,
28818 glyphDataFormat: ($parcel$interopDefault($lzfo4$restructure)).int16 // 0 for current format
28819});
28820
28821
28822
28823var // horizontal header
28824$af15e8c2ca202685$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
28825 version: ($parcel$interopDefault($lzfo4$restructure)).int32,
28826 ascent: ($parcel$interopDefault($lzfo4$restructure)).int16,
28827 descent: ($parcel$interopDefault($lzfo4$restructure)).int16,
28828 lineGap: ($parcel$interopDefault($lzfo4$restructure)).int16,
28829 advanceWidthMax: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28830 minLeftSideBearing: ($parcel$interopDefault($lzfo4$restructure)).int16,
28831 minRightSideBearing: ($parcel$interopDefault($lzfo4$restructure)).int16,
28832 xMaxExtent: ($parcel$interopDefault($lzfo4$restructure)).int16,
28833 caretSlopeRise: ($parcel$interopDefault($lzfo4$restructure)).int16,
28834 caretSlopeRun: ($parcel$interopDefault($lzfo4$restructure)).int16,
28835 caretOffset: ($parcel$interopDefault($lzfo4$restructure)).int16,
28836 reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).int16, 4),
28837 metricDataFormat: ($parcel$interopDefault($lzfo4$restructure)).int16,
28838 numberOfMetrics: ($parcel$interopDefault($lzfo4$restructure)).uint16 // Number of advance widths in 'hmtx' table
28839});
28840
28841
28842
28843let $cbee70d452c87a2f$var$HmtxEntry = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
28844 advance: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28845 bearing: ($parcel$interopDefault($lzfo4$restructure)).int16
28846});
28847var $cbee70d452c87a2f$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
28848 metrics: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray($cbee70d452c87a2f$var$HmtxEntry, (t)=>t.parent.hhea.numberOfMetrics
28849 ),
28850 bearings: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).int16, (t)=>t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics
28851 )
28852});
28853
28854
28855
28856var // maxiumum profile
28857$62b43947ebb31537$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
28858 version: ($parcel$interopDefault($lzfo4$restructure)).int32,
28859 numGlyphs: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28860 maxPoints: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28861 maxContours: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28862 maxComponentPoints: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28863 maxComponentContours: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28864 maxZones: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28865 maxTwilightPoints: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28866 maxStorage: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28867 maxFunctionDefs: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28868 maxInstructionDefs: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28869 maxStackElements: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28870 maxSizeOfInstructions: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28871 maxComponentElements: ($parcel$interopDefault($lzfo4$restructure)).uint16,
28872 maxComponentDepth: ($parcel$interopDefault($lzfo4$restructure)).uint16 // Maximum levels of recursion; 1 for simple components
28873});
28874
28875
28876
28877function $d8b54c41212776fe$export$badc544e0651b6b1(platformID, encodingID, languageID = 0) {
28878 if (platformID === 1 && $d8b54c41212776fe$export$479e671907f486d1[languageID]) return $d8b54c41212776fe$export$479e671907f486d1[languageID];
28879 return $d8b54c41212776fe$export$6fef87b7618bdf0b[platformID][encodingID];
28880}
28881const $d8b54c41212776fe$export$6fef87b7618bdf0b = [
28882 // unicode
28883 [
28884 'utf16be',
28885 'utf16be',
28886 'utf16be',
28887 'utf16be',
28888 'utf16be',
28889 'utf16be'
28890 ],
28891 // macintosh
28892 // Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/
28893 // 0 Roman 17 Malayalam
28894 // 1 Japanese 18 Sinhalese
28895 // 2 Traditional Chinese 19 Burmese
28896 // 3 Korean 20 Khmer
28897 // 4 Arabic 21 Thai
28898 // 5 Hebrew 22 Laotian
28899 // 6 Greek 23 Georgian
28900 // 7 Russian 24 Armenian
28901 // 8 RSymbol 25 Simplified Chinese
28902 // 9 Devanagari 26 Tibetan
28903 // 10 Gurmukhi 27 Mongolian
28904 // 11 Gujarati 28 Geez
28905 // 12 Oriya 29 Slavic
28906 // 13 Bengali 30 Vietnamese
28907 // 14 Tamil 31 Sindhi
28908 // 15 Telugu 32 (Uninterpreted)
28909 // 16 Kannada
28910 [
28911 'macroman',
28912 'shift-jis',
28913 'big5',
28914 'euc-kr',
28915 'iso-8859-6',
28916 'iso-8859-8',
28917 'macgreek',
28918 'maccyrillic',
28919 'symbol',
28920 'Devanagari',
28921 'Gurmukhi',
28922 'Gujarati',
28923 'Oriya',
28924 'Bengali',
28925 'Tamil',
28926 'Telugu',
28927 'Kannada',
28928 'Malayalam',
28929 'Sinhalese',
28930 'Burmese',
28931 'Khmer',
28932 'macthai',
28933 'Laotian',
28934 'Georgian',
28935 'Armenian',
28936 'gb-2312-80',
28937 'Tibetan',
28938 'Mongolian',
28939 'Geez',
28940 'maccenteuro',
28941 'Vietnamese',
28942 'Sindhi'
28943 ],
28944 // ISO (deprecated)
28945 [
28946 'ascii'
28947 ],
28948 // windows
28949 // Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx
28950 [
28951 'symbol',
28952 'utf16be',
28953 'shift-jis',
28954 'gb18030',
28955 'big5',
28956 'wansung',
28957 'johab',
28958 null,
28959 null,
28960 null,
28961 'utf16be'
28962 ]
28963];
28964const $d8b54c41212776fe$export$479e671907f486d1 = {
28965 15: 'maciceland',
28966 17: 'macturkish',
28967 18: 'maccroatian',
28968 24: 'maccenteuro',
28969 25: 'maccenteuro',
28970 26: 'maccenteuro',
28971 27: 'maccenteuro',
28972 28: 'maccenteuro',
28973 30: 'maciceland',
28974 37: 'macromania',
28975 38: 'maccenteuro',
28976 39: 'maccenteuro',
28977 40: 'maccenteuro',
28978 143: 'macinuit',
28979 146: 'macgaelic' // Unsupported by iconv-lite
28980};
28981const $d8b54c41212776fe$export$2092376fd002e13 = [
28982 // unicode
28983 [],
28984 {
28985 0: 'en',
28986 30: 'fo',
28987 60: 'ks',
28988 90: 'rw',
28989 1: 'fr',
28990 31: 'fa',
28991 61: 'ku',
28992 91: 'rn',
28993 2: 'de',
28994 32: 'ru',
28995 62: 'sd',
28996 92: 'ny',
28997 3: 'it',
28998 33: 'zh',
28999 63: 'bo',
29000 93: 'mg',
29001 4: 'nl',
29002 34: 'nl-BE',
29003 64: 'ne',
29004 94: 'eo',
29005 5: 'sv',
29006 35: 'ga',
29007 65: 'sa',
29008 128: 'cy',
29009 6: 'es',
29010 36: 'sq',
29011 66: 'mr',
29012 129: 'eu',
29013 7: 'da',
29014 37: 'ro',
29015 67: 'bn',
29016 130: 'ca',
29017 8: 'pt',
29018 38: 'cz',
29019 68: 'as',
29020 131: 'la',
29021 9: 'no',
29022 39: 'sk',
29023 69: 'gu',
29024 132: 'qu',
29025 10: 'he',
29026 40: 'si',
29027 70: 'pa',
29028 133: 'gn',
29029 11: 'ja',
29030 41: 'yi',
29031 71: 'or',
29032 134: 'ay',
29033 12: 'ar',
29034 42: 'sr',
29035 72: 'ml',
29036 135: 'tt',
29037 13: 'fi',
29038 43: 'mk',
29039 73: 'kn',
29040 136: 'ug',
29041 14: 'el',
29042 44: 'bg',
29043 74: 'ta',
29044 137: 'dz',
29045 15: 'is',
29046 45: 'uk',
29047 75: 'te',
29048 138: 'jv',
29049 16: 'mt',
29050 46: 'be',
29051 76: 'si',
29052 139: 'su',
29053 17: 'tr',
29054 47: 'uz',
29055 77: 'my',
29056 140: 'gl',
29057 18: 'hr',
29058 48: 'kk',
29059 78: 'km',
29060 141: 'af',
29061 19: 'zh-Hant',
29062 49: 'az-Cyrl',
29063 79: 'lo',
29064 142: 'br',
29065 20: 'ur',
29066 50: 'az-Arab',
29067 80: 'vi',
29068 143: 'iu',
29069 21: 'hi',
29070 51: 'hy',
29071 81: 'id',
29072 144: 'gd',
29073 22: 'th',
29074 52: 'ka',
29075 82: 'tl',
29076 145: 'gv',
29077 23: 'ko',
29078 53: 'mo',
29079 83: 'ms',
29080 146: 'ga',
29081 24: 'lt',
29082 54: 'ky',
29083 84: 'ms-Arab',
29084 147: 'to',
29085 25: 'pl',
29086 55: 'tg',
29087 85: 'am',
29088 148: 'el-polyton',
29089 26: 'hu',
29090 56: 'tk',
29091 86: 'ti',
29092 149: 'kl',
29093 27: 'es',
29094 57: 'mn-CN',
29095 87: 'om',
29096 150: 'az',
29097 28: 'lv',
29098 58: 'mn',
29099 88: 'so',
29100 151: 'nn',
29101 29: 'se',
29102 59: 'ps',
29103 89: 'sw'
29104 },
29105 // ISO (deprecated)
29106 [],
29107 {
29108 0x0436: 'af',
29109 0x4009: 'en-IN',
29110 0x0487: 'rw',
29111 0x0432: 'tn',
29112 0x041C: 'sq',
29113 0x1809: 'en-IE',
29114 0x0441: 'sw',
29115 0x045B: 'si',
29116 0x0484: 'gsw',
29117 0x2009: 'en-JM',
29118 0x0457: 'kok',
29119 0x041B: 'sk',
29120 0x045E: 'am',
29121 0x4409: 'en-MY',
29122 0x0412: 'ko',
29123 0x0424: 'sl',
29124 0x1401: 'ar-DZ',
29125 0x1409: 'en-NZ',
29126 0x0440: 'ky',
29127 0x2C0A: 'es-AR',
29128 0x3C01: 'ar-BH',
29129 0x3409: 'en-PH',
29130 0x0454: 'lo',
29131 0x400A: 'es-BO',
29132 0x0C01: 'ar',
29133 0x4809: 'en-SG',
29134 0x0426: 'lv',
29135 0x340A: 'es-CL',
29136 0x0801: 'ar-IQ',
29137 0x1C09: 'en-ZA',
29138 0x0427: 'lt',
29139 0x240A: 'es-CO',
29140 0x2C01: 'ar-JO',
29141 0x2C09: 'en-TT',
29142 0x082E: 'dsb',
29143 0x140A: 'es-CR',
29144 0x3401: 'ar-KW',
29145 0x0809: 'en-GB',
29146 0x046E: 'lb',
29147 0x1C0A: 'es-DO',
29148 0x3001: 'ar-LB',
29149 0x0409: 'en',
29150 0x042F: 'mk',
29151 0x300A: 'es-EC',
29152 0x1001: 'ar-LY',
29153 0x3009: 'en-ZW',
29154 0x083E: 'ms-BN',
29155 0x440A: 'es-SV',
29156 0x1801: 'ary',
29157 0x0425: 'et',
29158 0x043E: 'ms',
29159 0x100A: 'es-GT',
29160 0x2001: 'ar-OM',
29161 0x0438: 'fo',
29162 0x044C: 'ml',
29163 0x480A: 'es-HN',
29164 0x4001: 'ar-QA',
29165 0x0464: 'fil',
29166 0x043A: 'mt',
29167 0x080A: 'es-MX',
29168 0x0401: 'ar-SA',
29169 0x040B: 'fi',
29170 0x0481: 'mi',
29171 0x4C0A: 'es-NI',
29172 0x2801: 'ar-SY',
29173 0x080C: 'fr-BE',
29174 0x047A: 'arn',
29175 0x180A: 'es-PA',
29176 0x1C01: 'aeb',
29177 0x0C0C: 'fr-CA',
29178 0x044E: 'mr',
29179 0x3C0A: 'es-PY',
29180 0x3801: 'ar-AE',
29181 0x040C: 'fr',
29182 0x047C: 'moh',
29183 0x280A: 'es-PE',
29184 0x2401: 'ar-YE',
29185 0x140C: 'fr-LU',
29186 0x0450: 'mn',
29187 0x500A: 'es-PR',
29188 0x042B: 'hy',
29189 0x180C: 'fr-MC',
29190 0x0850: 'mn-CN',
29191 0x0C0A: 'es',
29192 0x044D: 'as',
29193 0x100C: 'fr-CH',
29194 0x0461: 'ne',
29195 0x040A: 'es',
29196 0x082C: 'az-Cyrl',
29197 0x0462: 'fy',
29198 0x0414: 'nb',
29199 0x540A: 'es-US',
29200 0x042C: 'az',
29201 0x0456: 'gl',
29202 0x0814: 'nn',
29203 0x380A: 'es-UY',
29204 0x046D: 'ba',
29205 0x0437: 'ka',
29206 0x0482: 'oc',
29207 0x200A: 'es-VE',
29208 0x042D: 'eu',
29209 0x0C07: 'de-AT',
29210 0x0448: 'or',
29211 0x081D: 'sv-FI',
29212 0x0423: 'be',
29213 0x0407: 'de',
29214 0x0463: 'ps',
29215 0x041D: 'sv',
29216 0x0845: 'bn',
29217 0x1407: 'de-LI',
29218 0x0415: 'pl',
29219 0x045A: 'syr',
29220 0x0445: 'bn-IN',
29221 0x1007: 'de-LU',
29222 0x0416: 'pt',
29223 0x0428: 'tg',
29224 0x201A: 'bs-Cyrl',
29225 0x0807: 'de-CH',
29226 0x0816: 'pt-PT',
29227 0x085F: 'tzm',
29228 0x141A: 'bs',
29229 0x0408: 'el',
29230 0x0446: 'pa',
29231 0x0449: 'ta',
29232 0x047E: 'br',
29233 0x046F: 'kl',
29234 0x046B: 'qu-BO',
29235 0x0444: 'tt',
29236 0x0402: 'bg',
29237 0x0447: 'gu',
29238 0x086B: 'qu-EC',
29239 0x044A: 'te',
29240 0x0403: 'ca',
29241 0x0468: 'ha',
29242 0x0C6B: 'qu',
29243 0x041E: 'th',
29244 0x0C04: 'zh-HK',
29245 0x040D: 'he',
29246 0x0418: 'ro',
29247 0x0451: 'bo',
29248 0x1404: 'zh-MO',
29249 0x0439: 'hi',
29250 0x0417: 'rm',
29251 0x041F: 'tr',
29252 0x0804: 'zh',
29253 0x040E: 'hu',
29254 0x0419: 'ru',
29255 0x0442: 'tk',
29256 0x1004: 'zh-SG',
29257 0x040F: 'is',
29258 0x243B: 'smn',
29259 0x0480: 'ug',
29260 0x0404: 'zh-TW',
29261 0x0470: 'ig',
29262 0x103B: 'smj-NO',
29263 0x0422: 'uk',
29264 0x0483: 'co',
29265 0x0421: 'id',
29266 0x143B: 'smj',
29267 0x042E: 'hsb',
29268 0x041A: 'hr',
29269 0x045D: 'iu',
29270 0x0C3B: 'se-FI',
29271 0x0420: 'ur',
29272 0x101A: 'hr-BA',
29273 0x085D: 'iu-Latn',
29274 0x043B: 'se',
29275 0x0843: 'uz-Cyrl',
29276 0x0405: 'cs',
29277 0x083C: 'ga',
29278 0x083B: 'se-SE',
29279 0x0443: 'uz',
29280 0x0406: 'da',
29281 0x0434: 'xh',
29282 0x203B: 'sms',
29283 0x042A: 'vi',
29284 0x048C: 'prs',
29285 0x0435: 'zu',
29286 0x183B: 'sma-NO',
29287 0x0452: 'cy',
29288 0x0465: 'dv',
29289 0x0410: 'it',
29290 0x1C3B: 'sms',
29291 0x0488: 'wo',
29292 0x0813: 'nl-BE',
29293 0x0810: 'it-CH',
29294 0x044F: 'sa',
29295 0x0485: 'sah',
29296 0x0413: 'nl',
29297 0x0411: 'ja',
29298 0x1C1A: 'sr-Cyrl-BA',
29299 0x0478: 'ii',
29300 0x0C09: 'en-AU',
29301 0x044B: 'kn',
29302 0x0C1A: 'sr',
29303 0x046A: 'yo',
29304 0x2809: 'en-BZ',
29305 0x043F: 'kk',
29306 0x181A: 'sr-Latn-BA',
29307 0x1009: 'en-CA',
29308 0x0453: 'km',
29309 0x081A: 'sr-Latn',
29310 0x2409: 'en-029',
29311 0x0486: 'quc',
29312 0x046C: 'nso'
29313 }
29314];
29315
29316
29317
29318var $7cfee716e27b503e$require$Buffer = $lzfo4$buffer.Buffer;
29319let $7cfee716e27b503e$var$NameRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
29320 platformID: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29321 encodingID: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29322 languageID: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29323 nameID: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29324 length: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29325 string: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, new ($parcel$interopDefault($lzfo4$restructure)).String('length', (t)=>$d8b54c41212776fe$export$badc544e0651b6b1(t.platformID, t.encodingID, t.languageID)
29326 ), {
29327 type: 'parent',
29328 relativeTo: (ctx)=>ctx.parent.stringOffset
29329 ,
29330 allowNull: false
29331 })
29332});
29333let $7cfee716e27b503e$var$LangTagRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
29334 length: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29335 tag: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, new ($parcel$interopDefault($lzfo4$restructure)).String('length', 'utf16be'), {
29336 type: 'parent',
29337 relativeTo: (ctx)=>ctx.stringOffset
29338 })
29339});
29340var $7cfee716e27b503e$var$NameTable = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, {
29341 0: {
29342 count: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29343 stringOffset: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29344 records: new ($parcel$interopDefault($lzfo4$restructure)).Array($7cfee716e27b503e$var$NameRecord, 'count')
29345 },
29346 1: {
29347 count: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29348 stringOffset: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29349 records: new ($parcel$interopDefault($lzfo4$restructure)).Array($7cfee716e27b503e$var$NameRecord, 'count'),
29350 langTagCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29351 langTags: new ($parcel$interopDefault($lzfo4$restructure)).Array($7cfee716e27b503e$var$LangTagRecord, 'langTagCount')
29352 }
29353});
29354var $7cfee716e27b503e$export$2e2bcd8739ae039 = $7cfee716e27b503e$var$NameTable;
29355const $7cfee716e27b503e$var$NAMES = [
29356 'copyright',
29357 'fontFamily',
29358 'fontSubfamily',
29359 'uniqueSubfamily',
29360 'fullName',
29361 'version',
29362 'postscriptName',
29363 'trademark',
29364 'manufacturer',
29365 'designer',
29366 'description',
29367 'vendorURL',
29368 'designerURL',
29369 'license',
29370 'licenseURL',
29371 null,
29372 'preferredFamily',
29373 'preferredSubfamily',
29374 'compatibleFull',
29375 'sampleText',
29376 'postscriptCIDFontName',
29377 'wwsFamilyName',
29378 'wwsSubfamilyName'
29379];
29380$7cfee716e27b503e$var$NameTable.process = function(stream) {
29381 var records = {};
29382 for (let record of this.records){
29383 // find out what language this is for
29384 let language = $d8b54c41212776fe$export$2092376fd002e13[record.platformID][record.languageID];
29385 if (language == null && this.langTags != null && record.languageID >= 0x8000) language = this.langTags[record.languageID - 0x8000].tag;
29386 if (language == null) language = record.platformID + '-' + record.languageID;
29387 // if the nameID is >= 256, it is a font feature record (AAT)
29388 let key = record.nameID >= 256 ? 'fontFeatures' : $7cfee716e27b503e$var$NAMES[record.nameID] || record.nameID;
29389 if (records[key] == null) records[key] = {};
29390 let obj = records[key];
29391 if (record.nameID >= 256) obj = obj[record.nameID] || (obj[record.nameID] = {});
29392 if (typeof record.string === 'string' || typeof obj[language] !== 'string') obj[language] = record.string;
29393 }
29394 this.records = records;
29395};
29396$7cfee716e27b503e$var$NameTable.preEncode = function() {
29397 if (Array.isArray(this.records)) return;
29398 this.version = 0;
29399 let records = [];
29400 for(let key in this.records){
29401 let val = this.records[key];
29402 if (key === 'fontFeatures') continue;
29403 records.push({
29404 platformID: 3,
29405 encodingID: 1,
29406 languageID: 0x409,
29407 nameID: $7cfee716e27b503e$var$NAMES.indexOf(key),
29408 length: $7cfee716e27b503e$require$Buffer.byteLength(val.en, 'utf16le'),
29409 string: val.en
29410 });
29411 if (key === 'postscriptName') records.push({
29412 platformID: 1,
29413 encodingID: 0,
29414 languageID: 0,
29415 nameID: $7cfee716e27b503e$var$NAMES.indexOf(key),
29416 length: val.en.length,
29417 string: val.en
29418 });
29419 }
29420 this.records = records;
29421 this.count = records.length;
29422 this.stringOffset = $7cfee716e27b503e$var$NameTable.size(this, null, false);
29423};
29424
29425
29426
29427var $5e9fda50085d9beb$var$OS2 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, {
29428 header: {
29429 xAvgCharWidth: ($parcel$interopDefault($lzfo4$restructure)).int16,
29430 usWeightClass: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29431 usWidthClass: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29432 fsType: new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint16, [
29433 null,
29434 'noEmbedding',
29435 'viewOnly',
29436 'editable',
29437 null,
29438 null,
29439 null,
29440 null,
29441 'noSubsetting',
29442 'bitmapOnly'
29443 ]),
29444 ySubscriptXSize: ($parcel$interopDefault($lzfo4$restructure)).int16,
29445 ySubscriptYSize: ($parcel$interopDefault($lzfo4$restructure)).int16,
29446 ySubscriptXOffset: ($parcel$interopDefault($lzfo4$restructure)).int16,
29447 ySubscriptYOffset: ($parcel$interopDefault($lzfo4$restructure)).int16,
29448 ySuperscriptXSize: ($parcel$interopDefault($lzfo4$restructure)).int16,
29449 ySuperscriptYSize: ($parcel$interopDefault($lzfo4$restructure)).int16,
29450 ySuperscriptXOffset: ($parcel$interopDefault($lzfo4$restructure)).int16,
29451 ySuperscriptYOffset: ($parcel$interopDefault($lzfo4$restructure)).int16,
29452 yStrikeoutSize: ($parcel$interopDefault($lzfo4$restructure)).int16,
29453 yStrikeoutPosition: ($parcel$interopDefault($lzfo4$restructure)).int16,
29454 sFamilyClass: ($parcel$interopDefault($lzfo4$restructure)).int16,
29455 panose: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, 10),
29456 ulCharRange: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint32, 4),
29457 vendorID: new ($parcel$interopDefault($lzfo4$restructure)).String(4),
29458 fsSelection: new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint16, [
29459 'italic',
29460 'underscore',
29461 'negative',
29462 'outlined',
29463 'strikeout',
29464 'bold',
29465 'regular',
29466 'useTypoMetrics',
29467 'wws',
29468 'oblique'
29469 ]),
29470 usFirstCharIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29471 usLastCharIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16 // The maximum Unicode index in this font
29472 },
29473 // The Apple version of this table ends here, but the Microsoft one continues on...
29474 0: {},
29475 1: {
29476 typoAscender: ($parcel$interopDefault($lzfo4$restructure)).int16,
29477 typoDescender: ($parcel$interopDefault($lzfo4$restructure)).int16,
29478 typoLineGap: ($parcel$interopDefault($lzfo4$restructure)).int16,
29479 winAscent: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29480 winDescent: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29481 codePageRange: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint32, 2)
29482 },
29483 2: {
29484 // these should be common with version 1 somehow
29485 typoAscender: ($parcel$interopDefault($lzfo4$restructure)).int16,
29486 typoDescender: ($parcel$interopDefault($lzfo4$restructure)).int16,
29487 typoLineGap: ($parcel$interopDefault($lzfo4$restructure)).int16,
29488 winAscent: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29489 winDescent: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29490 codePageRange: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint32, 2),
29491 xHeight: ($parcel$interopDefault($lzfo4$restructure)).int16,
29492 capHeight: ($parcel$interopDefault($lzfo4$restructure)).int16,
29493 defaultChar: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29494 breakChar: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29495 maxContent: ($parcel$interopDefault($lzfo4$restructure)).uint16
29496 },
29497 5: {
29498 typoAscender: ($parcel$interopDefault($lzfo4$restructure)).int16,
29499 typoDescender: ($parcel$interopDefault($lzfo4$restructure)).int16,
29500 typoLineGap: ($parcel$interopDefault($lzfo4$restructure)).int16,
29501 winAscent: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29502 winDescent: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29503 codePageRange: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint32, 2),
29504 xHeight: ($parcel$interopDefault($lzfo4$restructure)).int16,
29505 capHeight: ($parcel$interopDefault($lzfo4$restructure)).int16,
29506 defaultChar: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29507 breakChar: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29508 maxContent: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29509 usLowerOpticalPointSize: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29510 usUpperOpticalPointSize: ($parcel$interopDefault($lzfo4$restructure)).uint16
29511 }
29512});
29513let $5e9fda50085d9beb$var$versions = $5e9fda50085d9beb$var$OS2.versions;
29514$5e9fda50085d9beb$var$versions[3] = $5e9fda50085d9beb$var$versions[4] = $5e9fda50085d9beb$var$versions[2];
29515var $5e9fda50085d9beb$export$2e2bcd8739ae039 = $5e9fda50085d9beb$var$OS2;
29516
29517
29518
29519var // PostScript information
29520$8fb96ffb3c5b1cd6$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).fixed32, {
29521 header: {
29522 italicAngle: ($parcel$interopDefault($lzfo4$restructure)).fixed32,
29523 underlinePosition: ($parcel$interopDefault($lzfo4$restructure)).int16,
29524 underlineThickness: ($parcel$interopDefault($lzfo4$restructure)).int16,
29525 isFixedPitch: ($parcel$interopDefault($lzfo4$restructure)).uint32,
29526 minMemType42: ($parcel$interopDefault($lzfo4$restructure)).uint32,
29527 maxMemType42: ($parcel$interopDefault($lzfo4$restructure)).uint32,
29528 minMemType1: ($parcel$interopDefault($lzfo4$restructure)).uint32,
29529 maxMemType1: ($parcel$interopDefault($lzfo4$restructure)).uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font
29530 },
29531 1: {},
29532 2: {
29533 numberOfGlyphs: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29534 glyphNameIndex: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'numberOfGlyphs'),
29535 names: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).String(($parcel$interopDefault($lzfo4$restructure)).uint8))
29536 },
29537 2.5: {
29538 numberOfGlyphs: ($parcel$interopDefault($lzfo4$restructure)).uint16,
29539 offsets: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, 'numberOfGlyphs')
29540 },
29541 3: {},
29542 4: {
29543 map: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint32, (t)=>t.parent.maxp.numGlyphs
29544 )
29545 }
29546});
29547
29548
29549
29550var // An array of predefined values accessible by instructions
29551$e85635aafda425ab$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
29552 controlValues: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).int16)
29553});
29554
29555
29556
29557var // A list of instructions that are executed once when a font is first used.
29558// These instructions are known as the font program. The main use of this table
29559// is for the definition of functions that are used in many different glyph programs.
29560$2b37abe4b96e3c42$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
29561 instructions: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8)
29562});
29563
29564
29565
29566let $8cebe4fe43d5c208$var$loca = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct('head.indexToLocFormat', {
29567 0: {
29568 offsets: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16)
29569 },
29570 1: {
29571 offsets: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint32)
29572 }
29573});
29574$8cebe4fe43d5c208$var$loca.process = function() {
29575 if (this.version === 0) for(let i = 0; i < this.offsets.length; i++)this.offsets[i] <<= 1;
29576};
29577$8cebe4fe43d5c208$var$loca.preEncode = function() {
29578 if (this.version === 0) for(let i = 0; i < this.offsets.length; i++)this.offsets[i] >>>= 1;
29579};
29580var $8cebe4fe43d5c208$export$2e2bcd8739ae039 = $8cebe4fe43d5c208$var$loca;
29581
29582
29583
29584var // Set of instructions executed whenever the point size or font transformation change
29585$75c86c4a9179fd24$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
29586 controlValueProgram: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8)
29587});
29588
29589
29590
29591var // only used for encoding
29592$1edb604f0b10eb6a$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Buffer);
29593
29594
29595
29596
29597class $52a9289da21106c8$export$2e2bcd8739ae039 {
29598 getCFFVersion(ctx) {
29599 while(ctx && !ctx.hdrSize)ctx = ctx.parent;
29600 return ctx ? ctx.version : -1;
29601 }
29602 decode(stream, parent) {
29603 let version = this.getCFFVersion(parent);
29604 let count = version >= 2 ? stream.readUInt32BE() : stream.readUInt16BE();
29605 if (count === 0) return [];
29606 let offSize = stream.readUInt8();
29607 let offsetType;
29608 if (offSize === 1) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint8;
29609 else if (offSize === 2) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint16;
29610 else if (offSize === 3) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint24;
29611 else if (offSize === 4) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint32;
29612 else throw new Error(`Bad offset size in CFFIndex: ${offSize} ${stream.pos}`);
29613 let ret = [];
29614 let startPos = stream.pos + (count + 1) * offSize - 1;
29615 let start = offsetType.decode(stream);
29616 for(let i = 0; i < count; i++){
29617 let end = offsetType.decode(stream);
29618 if (this.type != null) {
29619 let pos = stream.pos;
29620 stream.pos = startPos + start;
29621 parent.length = end - start;
29622 ret.push(this.type.decode(stream, parent));
29623 stream.pos = pos;
29624 } else ret.push({
29625 offset: startPos + start,
29626 length: end - start
29627 });
29628 start = end;
29629 }
29630 stream.pos = startPos + start;
29631 return ret;
29632 }
29633 size(arr, parent) {
29634 let size = 2;
29635 if (arr.length === 0) return size;
29636 let type = this.type || new ($parcel$interopDefault($lzfo4$restructure)).Buffer;
29637 // find maximum offset to detminine offset type
29638 let offset = 1;
29639 for(let i = 0; i < arr.length; i++){
29640 let item = arr[i];
29641 offset += type.size(item, parent);
29642 }
29643 let offsetType;
29644 if (offset <= 0xff) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint8;
29645 else if (offset <= 0xffff) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint16;
29646 else if (offset <= 0xffffff) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint24;
29647 else if (offset <= 0xffffffff) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint32;
29648 else throw new Error("Bad offset in CFFIndex");
29649 size += 1 + offsetType.size() * (arr.length + 1);
29650 size += offset - 1;
29651 return size;
29652 }
29653 encode(stream, arr, parent) {
29654 stream.writeUInt16BE(arr.length);
29655 if (arr.length === 0) return;
29656 let type = this.type || new ($parcel$interopDefault($lzfo4$restructure)).Buffer;
29657 // find maximum offset to detminine offset type
29658 let sizes = [];
29659 let offset = 1;
29660 for (let item of arr){
29661 let s = type.size(item, parent);
29662 sizes.push(s);
29663 offset += s;
29664 }
29665 let offsetType;
29666 if (offset <= 0xff) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint8;
29667 else if (offset <= 0xffff) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint16;
29668 else if (offset <= 0xffffff) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint24;
29669 else if (offset <= 0xffffffff) offsetType = ($parcel$interopDefault($lzfo4$restructure)).uint32;
29670 else throw new Error("Bad offset in CFFIndex");
29671 // write offset size
29672 stream.writeUInt8(offsetType.size());
29673 // write elements
29674 offset = 1;
29675 offsetType.encode(stream, offset);
29676 for (let size of sizes){
29677 offset += size;
29678 offsetType.encode(stream, offset);
29679 }
29680 for (let item1 of arr)type.encode(stream, item1, parent);
29681 return;
29682 }
29683 constructor(type){
29684 this.type = type;
29685 }
29686}
29687
29688
29689
29690
29691
29692
29693const $7331b8461b34fafd$var$FLOAT_EOF = 0xf;
29694const $7331b8461b34fafd$var$FLOAT_LOOKUP = [
29695 '0',
29696 '1',
29697 '2',
29698 '3',
29699 '4',
29700 '5',
29701 '6',
29702 '7',
29703 '8',
29704 '9',
29705 '.',
29706 'E',
29707 'E-',
29708 null,
29709 '-'
29710];
29711const $7331b8461b34fafd$var$FLOAT_ENCODE_LOOKUP = {
29712 '.': 10,
29713 'E': 11,
29714 'E-': 12,
29715 '-': 14
29716};
29717class $7331b8461b34fafd$export$2e2bcd8739ae039 {
29718 static decode(stream, value) {
29719 if (32 <= value && value <= 246) return value - 139;
29720 if (247 <= value && value <= 250) return (value - 247) * 256 + stream.readUInt8() + 108;
29721 if (251 <= value && value <= 254) return -(value - 251) * 256 - stream.readUInt8() - 108;
29722 if (value === 28) return stream.readInt16BE();
29723 if (value === 29) return stream.readInt32BE();
29724 if (value === 30) {
29725 let str = '';
29726 while(true){
29727 let b = stream.readUInt8();
29728 let n1 = b >> 4;
29729 if (n1 === $7331b8461b34fafd$var$FLOAT_EOF) break;
29730 str += $7331b8461b34fafd$var$FLOAT_LOOKUP[n1];
29731 let n2 = b & 15;
29732 if (n2 === $7331b8461b34fafd$var$FLOAT_EOF) break;
29733 str += $7331b8461b34fafd$var$FLOAT_LOOKUP[n2];
29734 }
29735 return parseFloat(str);
29736 }
29737 return null;
29738 }
29739 static size(value) {
29740 // if the value needs to be forced to the largest size (32 bit)
29741 // e.g. for unknown pointers, set to 32768
29742 if (value.forceLarge) value = 32768;
29743 if ((value | 0) !== value) {
29744 let str = '' + value;
29745 return 1 + Math.ceil((str.length + 1) / 2);
29746 } else if (-107 <= value && value <= 107) return 1;
29747 else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) return 2;
29748 else if (-32768 <= value && value <= 32767) return 3;
29749 else return 5;
29750 }
29751 static encode(stream, value) {
29752 // if the value needs to be forced to the largest size (32 bit)
29753 // e.g. for unknown pointers, save the old value and set to 32768
29754 let val = Number(value);
29755 if (value.forceLarge) {
29756 stream.writeUInt8(29);
29757 return stream.writeInt32BE(val);
29758 } else if ((val | 0) !== val) {
29759 stream.writeUInt8(30);
29760 let str = '' + val;
29761 for(let i = 0; i < str.length; i += 2){
29762 let c1 = str[i];
29763 let n1 = $7331b8461b34fafd$var$FLOAT_ENCODE_LOOKUP[c1] || +c1;
29764 if (i === str.length - 1) var n2 = $7331b8461b34fafd$var$FLOAT_EOF;
29765 else {
29766 let c2 = str[i + 1];
29767 var n2 = $7331b8461b34fafd$var$FLOAT_ENCODE_LOOKUP[c2] || +c2;
29768 }
29769 stream.writeUInt8(n1 << 4 | n2 & 15);
29770 }
29771 if (n2 !== $7331b8461b34fafd$var$FLOAT_EOF) return stream.writeUInt8($7331b8461b34fafd$var$FLOAT_EOF << 4);
29772 } else if (-107 <= val && val <= 107) return stream.writeUInt8(val + 139);
29773 else if (108 <= val && val <= 1131) {
29774 val -= 108;
29775 stream.writeUInt8((val >> 8) + 247);
29776 return stream.writeUInt8(val & 0xff);
29777 } else if (-1131 <= val && val <= -108) {
29778 val = -val - 108;
29779 stream.writeUInt8((val >> 8) + 251);
29780 return stream.writeUInt8(val & 0xff);
29781 } else if (-32768 <= val && val <= 32767) {
29782 stream.writeUInt8(28);
29783 return stream.writeInt16BE(val);
29784 } else {
29785 stream.writeUInt8(29);
29786 return stream.writeInt32BE(val);
29787 }
29788 }
29789}
29790
29791
29792
29793class $e73dde9fb8a50748$export$2e2bcd8739ae039 {
29794 decodeOperands(type, stream, ret, operands) {
29795 if (Array.isArray(type)) return operands.map((op, i)=>this.decodeOperands(type[i], stream, ret, [
29796 op
29797 ])
29798 );
29799 else if (type.decode != null) return type.decode(stream, ret, operands);
29800 else switch(type){
29801 case 'number':
29802 case 'offset':
29803 case 'sid':
29804 return operands[0];
29805 case 'boolean':
29806 return !!operands[0];
29807 default:
29808 return operands;
29809 }
29810 }
29811 encodeOperands(type, stream, ctx, operands) {
29812 if (Array.isArray(type)) return operands.map((op, i)=>this.encodeOperands(type[i], stream, ctx, op)[0]
29813 );
29814 else if (type.encode != null) return type.encode(stream, operands, ctx);
29815 else if (typeof operands === 'number') return [
29816 operands
29817 ];
29818 else if (typeof operands === 'boolean') return [
29819 +operands
29820 ];
29821 else if (Array.isArray(operands)) return operands;
29822 else return [
29823 operands
29824 ];
29825 }
29826 decode(stream, parent) {
29827 let end = stream.pos + parent.length;
29828 let ret = {};
29829 let operands = [];
29830 // define hidden properties
29831 Object.defineProperties(ret, {
29832 parent: {
29833 value: parent
29834 },
29835 _startOffset: {
29836 value: stream.pos
29837 }
29838 });
29839 // fill in defaults
29840 for(let key in this.fields){
29841 let field = this.fields[key];
29842 ret[field[1]] = field[3];
29843 }
29844 while(stream.pos < end){
29845 let b = stream.readUInt8();
29846 if (b < 28) {
29847 if (b === 12) b = b << 8 | stream.readUInt8();
29848 let field = this.fields[b];
29849 if (!field) throw new Error(`Unknown operator ${b}`);
29850 let val = this.decodeOperands(field[2], stream, ret, operands);
29851 if (val != null) {
29852 if (val instanceof $lzfo4$restructuresrcutilsjs.PropertyDescriptor) Object.defineProperty(ret, field[1], val);
29853 else ret[field[1]] = val;
29854 }
29855 operands = [];
29856 } else operands.push($7331b8461b34fafd$export$2e2bcd8739ae039.decode(stream, b));
29857 }
29858 return ret;
29859 }
29860 size(dict, parent, includePointers = true) {
29861 let ctx = {
29862 parent: parent,
29863 val: dict,
29864 pointerSize: 0,
29865 startOffset: parent.startOffset || 0
29866 };
29867 let len = 0;
29868 for(let k in this.fields){
29869 let field = this.fields[k];
29870 let val = dict[field[1]];
29871 if (val == null || ($parcel$interopDefault($lzfo4$deepequal))(val, field[3])) continue;
29872 let operands = this.encodeOperands(field[2], null, ctx, val);
29873 for (let op of operands)len += $7331b8461b34fafd$export$2e2bcd8739ae039.size(op);
29874 let key = Array.isArray(field[0]) ? field[0] : [
29875 field[0]
29876 ];
29877 len += key.length;
29878 }
29879 if (includePointers) len += ctx.pointerSize;
29880 return len;
29881 }
29882 encode(stream, dict, parent) {
29883 let ctx = {
29884 pointers: [],
29885 startOffset: stream.pos,
29886 parent: parent,
29887 val: dict,
29888 pointerSize: 0
29889 };
29890 ctx.pointerOffset = stream.pos + this.size(dict, ctx, false);
29891 for (let field of this.ops){
29892 let val = dict[field[1]];
29893 if (val == null || ($parcel$interopDefault($lzfo4$deepequal))(val, field[3])) continue;
29894 let operands = this.encodeOperands(field[2], stream, ctx, val);
29895 for (let op of operands)$7331b8461b34fafd$export$2e2bcd8739ae039.encode(stream, op);
29896 let key = Array.isArray(field[0]) ? field[0] : [
29897 field[0]
29898 ];
29899 for (let op1 of key)stream.writeUInt8(op1);
29900 }
29901 let i = 0;
29902 while(i < ctx.pointers.length){
29903 let ptr = ctx.pointers[i++];
29904 ptr.type.encode(stream, ptr.val, ptr.parent);
29905 }
29906 return;
29907 }
29908 constructor(ops = []){
29909 this.ops = ops;
29910 this.fields = {};
29911 for (let field of ops){
29912 let key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0];
29913 this.fields[key] = field;
29914 }
29915 }
29916}
29917
29918
29919
29920
29921class $1bd98896423435ca$export$2e2bcd8739ae039 extends ($parcel$interopDefault($lzfo4$restructure)).Pointer {
29922 decode(stream, parent, operands) {
29923 this.offsetType = {
29924 decode: ()=>operands[0]
29925 };
29926 return super.decode(stream, parent, operands);
29927 }
29928 encode(stream, value, ctx) {
29929 if (!stream) {
29930 // compute the size (so ctx.pointerSize is correct)
29931 this.offsetType = {
29932 size: ()=>0
29933 };
29934 this.size(value, ctx);
29935 return [
29936 new $1bd98896423435ca$var$Ptr(0)
29937 ];
29938 }
29939 let ptr = null;
29940 this.offsetType = {
29941 encode: (stream, val)=>ptr = val
29942 };
29943 super.encode(stream, value, ctx);
29944 return [
29945 new $1bd98896423435ca$var$Ptr(ptr)
29946 ];
29947 }
29948 constructor(type, options = {}){
29949 if (options.type == null) options.type = 'global';
29950 super(null, type, options);
29951 }
29952}
29953class $1bd98896423435ca$var$Ptr {
29954 valueOf() {
29955 return this.val;
29956 }
29957 constructor(val){
29958 this.val = val;
29959 this.forceLarge = true;
29960 }
29961}
29962
29963
29964
29965
29966
29967class $f099ec1eecfbbfe4$var$CFFBlendOp {
29968 static decode(stream, parent, operands) {
29969 let numBlends = operands.pop();
29970 // TODO: actually blend. For now just consume the deltas
29971 // since we don't use any of the values anyway.
29972 while(operands.length > numBlends)operands.pop();
29973 }
29974}
29975var $f099ec1eecfbbfe4$export$2e2bcd8739ae039 = new $e73dde9fb8a50748$export$2e2bcd8739ae039([
29976 // key name type default
29977 [
29978 6,
29979 'BlueValues',
29980 'delta',
29981 null
29982 ],
29983 [
29984 7,
29985 'OtherBlues',
29986 'delta',
29987 null
29988 ],
29989 [
29990 8,
29991 'FamilyBlues',
29992 'delta',
29993 null
29994 ],
29995 [
29996 9,
29997 'FamilyOtherBlues',
29998 'delta',
29999 null
30000 ],
30001 [
30002 [
30003 12,
30004 9
30005 ],
30006 'BlueScale',
30007 'number',
30008 0.039625
30009 ],
30010 [
30011 [
30012 12,
30013 10
30014 ],
30015 'BlueShift',
30016 'number',
30017 7
30018 ],
30019 [
30020 [
30021 12,
30022 11
30023 ],
30024 'BlueFuzz',
30025 'number',
30026 1
30027 ],
30028 [
30029 10,
30030 'StdHW',
30031 'number',
30032 null
30033 ],
30034 [
30035 11,
30036 'StdVW',
30037 'number',
30038 null
30039 ],
30040 [
30041 [
30042 12,
30043 12
30044 ],
30045 'StemSnapH',
30046 'delta',
30047 null
30048 ],
30049 [
30050 [
30051 12,
30052 13
30053 ],
30054 'StemSnapV',
30055 'delta',
30056 null
30057 ],
30058 [
30059 [
30060 12,
30061 14
30062 ],
30063 'ForceBold',
30064 'boolean',
30065 false
30066 ],
30067 [
30068 [
30069 12,
30070 17
30071 ],
30072 'LanguageGroup',
30073 'number',
30074 0
30075 ],
30076 [
30077 [
30078 12,
30079 18
30080 ],
30081 'ExpansionFactor',
30082 'number',
30083 0.06
30084 ],
30085 [
30086 [
30087 12,
30088 19
30089 ],
30090 'initialRandomSeed',
30091 'number',
30092 0
30093 ],
30094 [
30095 20,
30096 'defaultWidthX',
30097 'number',
30098 0
30099 ],
30100 [
30101 21,
30102 'nominalWidthX',
30103 'number',
30104 0
30105 ],
30106 [
30107 22,
30108 'vsindex',
30109 'number',
30110 0
30111 ],
30112 [
30113 23,
30114 'blend',
30115 $f099ec1eecfbbfe4$var$CFFBlendOp,
30116 null
30117 ],
30118 [
30119 19,
30120 'Subrs',
30121 new $1bd98896423435ca$export$2e2bcd8739ae039(new $52a9289da21106c8$export$2e2bcd8739ae039, {
30122 type: 'local'
30123 }),
30124 null
30125 ]
30126]);
30127
30128
30129var // Automatically generated from Appendix A of the CFF specification; do
30130// not edit. Length should be 391.
30131$4292bb2f086bd070$export$2e2bcd8739ae039 = [
30132 ".notdef",
30133 "space",
30134 "exclam",
30135 "quotedbl",
30136 "numbersign",
30137 "dollar",
30138 "percent",
30139 "ampersand",
30140 "quoteright",
30141 "parenleft",
30142 "parenright",
30143 "asterisk",
30144 "plus",
30145 "comma",
30146 "hyphen",
30147 "period",
30148 "slash",
30149 "zero",
30150 "one",
30151 "two",
30152 "three",
30153 "four",
30154 "five",
30155 "six",
30156 "seven",
30157 "eight",
30158 "nine",
30159 "colon",
30160 "semicolon",
30161 "less",
30162 "equal",
30163 "greater",
30164 "question",
30165 "at",
30166 "A",
30167 "B",
30168 "C",
30169 "D",
30170 "E",
30171 "F",
30172 "G",
30173 "H",
30174 "I",
30175 "J",
30176 "K",
30177 "L",
30178 "M",
30179 "N",
30180 "O",
30181 "P",
30182 "Q",
30183 "R",
30184 "S",
30185 "T",
30186 "U",
30187 "V",
30188 "W",
30189 "X",
30190 "Y",
30191 "Z",
30192 "bracketleft",
30193 "backslash",
30194 "bracketright",
30195 "asciicircum",
30196 "underscore",
30197 "quoteleft",
30198 "a",
30199 "b",
30200 "c",
30201 "d",
30202 "e",
30203 "f",
30204 "g",
30205 "h",
30206 "i",
30207 "j",
30208 "k",
30209 "l",
30210 "m",
30211 "n",
30212 "o",
30213 "p",
30214 "q",
30215 "r",
30216 "s",
30217 "t",
30218 "u",
30219 "v",
30220 "w",
30221 "x",
30222 "y",
30223 "z",
30224 "braceleft",
30225 "bar",
30226 "braceright",
30227 "asciitilde",
30228 "exclamdown",
30229 "cent",
30230 "sterling",
30231 "fraction",
30232 "yen",
30233 "florin",
30234 "section",
30235 "currency",
30236 "quotesingle",
30237 "quotedblleft",
30238 "guillemotleft",
30239 "guilsinglleft",
30240 "guilsinglright",
30241 "fi",
30242 "fl",
30243 "endash",
30244 "dagger",
30245 "daggerdbl",
30246 "periodcentered",
30247 "paragraph",
30248 "bullet",
30249 "quotesinglbase",
30250 "quotedblbase",
30251 "quotedblright",
30252 "guillemotright",
30253 "ellipsis",
30254 "perthousand",
30255 "questiondown",
30256 "grave",
30257 "acute",
30258 "circumflex",
30259 "tilde",
30260 "macron",
30261 "breve",
30262 "dotaccent",
30263 "dieresis",
30264 "ring",
30265 "cedilla",
30266 "hungarumlaut",
30267 "ogonek",
30268 "caron",
30269 "emdash",
30270 "AE",
30271 "ordfeminine",
30272 "Lslash",
30273 "Oslash",
30274 "OE",
30275 "ordmasculine",
30276 "ae",
30277 "dotlessi",
30278 "lslash",
30279 "oslash",
30280 "oe",
30281 "germandbls",
30282 "onesuperior",
30283 "logicalnot",
30284 "mu",
30285 "trademark",
30286 "Eth",
30287 "onehalf",
30288 "plusminus",
30289 "Thorn",
30290 "onequarter",
30291 "divide",
30292 "brokenbar",
30293 "degree",
30294 "thorn",
30295 "threequarters",
30296 "twosuperior",
30297 "registered",
30298 "minus",
30299 "eth",
30300 "multiply",
30301 "threesuperior",
30302 "copyright",
30303 "Aacute",
30304 "Acircumflex",
30305 "Adieresis",
30306 "Agrave",
30307 "Aring",
30308 "Atilde",
30309 "Ccedilla",
30310 "Eacute",
30311 "Ecircumflex",
30312 "Edieresis",
30313 "Egrave",
30314 "Iacute",
30315 "Icircumflex",
30316 "Idieresis",
30317 "Igrave",
30318 "Ntilde",
30319 "Oacute",
30320 "Ocircumflex",
30321 "Odieresis",
30322 "Ograve",
30323 "Otilde",
30324 "Scaron",
30325 "Uacute",
30326 "Ucircumflex",
30327 "Udieresis",
30328 "Ugrave",
30329 "Yacute",
30330 "Ydieresis",
30331 "Zcaron",
30332 "aacute",
30333 "acircumflex",
30334 "adieresis",
30335 "agrave",
30336 "aring",
30337 "atilde",
30338 "ccedilla",
30339 "eacute",
30340 "ecircumflex",
30341 "edieresis",
30342 "egrave",
30343 "iacute",
30344 "icircumflex",
30345 "idieresis",
30346 "igrave",
30347 "ntilde",
30348 "oacute",
30349 "ocircumflex",
30350 "odieresis",
30351 "ograve",
30352 "otilde",
30353 "scaron",
30354 "uacute",
30355 "ucircumflex",
30356 "udieresis",
30357 "ugrave",
30358 "yacute",
30359 "ydieresis",
30360 "zcaron",
30361 "exclamsmall",
30362 "Hungarumlautsmall",
30363 "dollaroldstyle",
30364 "dollarsuperior",
30365 "ampersandsmall",
30366 "Acutesmall",
30367 "parenleftsuperior",
30368 "parenrightsuperior",
30369 "twodotenleader",
30370 "onedotenleader",
30371 "zerooldstyle",
30372 "oneoldstyle",
30373 "twooldstyle",
30374 "threeoldstyle",
30375 "fouroldstyle",
30376 "fiveoldstyle",
30377 "sixoldstyle",
30378 "sevenoldstyle",
30379 "eightoldstyle",
30380 "nineoldstyle",
30381 "commasuperior",
30382 "threequartersemdash",
30383 "periodsuperior",
30384 "questionsmall",
30385 "asuperior",
30386 "bsuperior",
30387 "centsuperior",
30388 "dsuperior",
30389 "esuperior",
30390 "isuperior",
30391 "lsuperior",
30392 "msuperior",
30393 "nsuperior",
30394 "osuperior",
30395 "rsuperior",
30396 "ssuperior",
30397 "tsuperior",
30398 "ff",
30399 "ffi",
30400 "ffl",
30401 "parenleftinferior",
30402 "parenrightinferior",
30403 "Circumflexsmall",
30404 "hyphensuperior",
30405 "Gravesmall",
30406 "Asmall",
30407 "Bsmall",
30408 "Csmall",
30409 "Dsmall",
30410 "Esmall",
30411 "Fsmall",
30412 "Gsmall",
30413 "Hsmall",
30414 "Ismall",
30415 "Jsmall",
30416 "Ksmall",
30417 "Lsmall",
30418 "Msmall",
30419 "Nsmall",
30420 "Osmall",
30421 "Psmall",
30422 "Qsmall",
30423 "Rsmall",
30424 "Ssmall",
30425 "Tsmall",
30426 "Usmall",
30427 "Vsmall",
30428 "Wsmall",
30429 "Xsmall",
30430 "Ysmall",
30431 "Zsmall",
30432 "colonmonetary",
30433 "onefitted",
30434 "rupiah",
30435 "Tildesmall",
30436 "exclamdownsmall",
30437 "centoldstyle",
30438 "Lslashsmall",
30439 "Scaronsmall",
30440 "Zcaronsmall",
30441 "Dieresissmall",
30442 "Brevesmall",
30443 "Caronsmall",
30444 "Dotaccentsmall",
30445 "Macronsmall",
30446 "figuredash",
30447 "hypheninferior",
30448 "Ogoneksmall",
30449 "Ringsmall",
30450 "Cedillasmall",
30451 "questiondownsmall",
30452 "oneeighth",
30453 "threeeighths",
30454 "fiveeighths",
30455 "seveneighths",
30456 "onethird",
30457 "twothirds",
30458 "zerosuperior",
30459 "foursuperior",
30460 "fivesuperior",
30461 "sixsuperior",
30462 "sevensuperior",
30463 "eightsuperior",
30464 "ninesuperior",
30465 "zeroinferior",
30466 "oneinferior",
30467 "twoinferior",
30468 "threeinferior",
30469 "fourinferior",
30470 "fiveinferior",
30471 "sixinferior",
30472 "seveninferior",
30473 "eightinferior",
30474 "nineinferior",
30475 "centinferior",
30476 "dollarinferior",
30477 "periodinferior",
30478 "commainferior",
30479 "Agravesmall",
30480 "Aacutesmall",
30481 "Acircumflexsmall",
30482 "Atildesmall",
30483 "Adieresissmall",
30484 "Aringsmall",
30485 "AEsmall",
30486 "Ccedillasmall",
30487 "Egravesmall",
30488 "Eacutesmall",
30489 "Ecircumflexsmall",
30490 "Edieresissmall",
30491 "Igravesmall",
30492 "Iacutesmall",
30493 "Icircumflexsmall",
30494 "Idieresissmall",
30495 "Ethsmall",
30496 "Ntildesmall",
30497 "Ogravesmall",
30498 "Oacutesmall",
30499 "Ocircumflexsmall",
30500 "Otildesmall",
30501 "Odieresissmall",
30502 "OEsmall",
30503 "Oslashsmall",
30504 "Ugravesmall",
30505 "Uacutesmall",
30506 "Ucircumflexsmall",
30507 "Udieresissmall",
30508 "Yacutesmall",
30509 "Thornsmall",
30510 "Ydieresissmall",
30511 "001.000",
30512 "001.001",
30513 "001.002",
30514 "001.003",
30515 "Black",
30516 "Bold",
30517 "Book",
30518 "Light",
30519 "Medium",
30520 "Regular",
30521 "Roman",
30522 "Semibold"
30523];
30524
30525
30526let $64905f2680ca92ce$export$dee0027060fa13bd = [
30527 '',
30528 '',
30529 '',
30530 '',
30531 '',
30532 '',
30533 '',
30534 '',
30535 '',
30536 '',
30537 '',
30538 '',
30539 '',
30540 '',
30541 '',
30542 '',
30543 '',
30544 '',
30545 '',
30546 '',
30547 '',
30548 '',
30549 '',
30550 '',
30551 '',
30552 '',
30553 '',
30554 '',
30555 '',
30556 '',
30557 '',
30558 '',
30559 'space',
30560 'exclam',
30561 'quotedbl',
30562 'numbersign',
30563 'dollar',
30564 'percent',
30565 'ampersand',
30566 'quoteright',
30567 'parenleft',
30568 'parenright',
30569 'asterisk',
30570 'plus',
30571 'comma',
30572 'hyphen',
30573 'period',
30574 'slash',
30575 'zero',
30576 'one',
30577 'two',
30578 'three',
30579 'four',
30580 'five',
30581 'six',
30582 'seven',
30583 'eight',
30584 'nine',
30585 'colon',
30586 'semicolon',
30587 'less',
30588 'equal',
30589 'greater',
30590 'question',
30591 'at',
30592 'A',
30593 'B',
30594 'C',
30595 'D',
30596 'E',
30597 'F',
30598 'G',
30599 'H',
30600 'I',
30601 'J',
30602 'K',
30603 'L',
30604 'M',
30605 'N',
30606 'O',
30607 'P',
30608 'Q',
30609 'R',
30610 'S',
30611 'T',
30612 'U',
30613 'V',
30614 'W',
30615 'X',
30616 'Y',
30617 'Z',
30618 'bracketleft',
30619 'backslash',
30620 'bracketright',
30621 'asciicircum',
30622 'underscore',
30623 'quoteleft',
30624 'a',
30625 'b',
30626 'c',
30627 'd',
30628 'e',
30629 'f',
30630 'g',
30631 'h',
30632 'i',
30633 'j',
30634 'k',
30635 'l',
30636 'm',
30637 'n',
30638 'o',
30639 'p',
30640 'q',
30641 'r',
30642 's',
30643 't',
30644 'u',
30645 'v',
30646 'w',
30647 'x',
30648 'y',
30649 'z',
30650 'braceleft',
30651 'bar',
30652 'braceright',
30653 'asciitilde',
30654 '',
30655 '',
30656 '',
30657 '',
30658 '',
30659 '',
30660 '',
30661 '',
30662 '',
30663 '',
30664 '',
30665 '',
30666 '',
30667 '',
30668 '',
30669 '',
30670 '',
30671 '',
30672 '',
30673 '',
30674 '',
30675 '',
30676 '',
30677 '',
30678 '',
30679 '',
30680 '',
30681 '',
30682 '',
30683 '',
30684 '',
30685 '',
30686 '',
30687 '',
30688 'exclamdown',
30689 'cent',
30690 'sterling',
30691 'fraction',
30692 'yen',
30693 'florin',
30694 'section',
30695 'currency',
30696 'quotesingle',
30697 'quotedblleft',
30698 'guillemotleft',
30699 'guilsinglleft',
30700 'guilsinglright',
30701 'fi',
30702 'fl',
30703 '',
30704 'endash',
30705 'dagger',
30706 'daggerdbl',
30707 'periodcentered',
30708 '',
30709 'paragraph',
30710 'bullet',
30711 'quotesinglbase',
30712 'quotedblbase',
30713 'quotedblright',
30714 'guillemotright',
30715 'ellipsis',
30716 'perthousand',
30717 '',
30718 'questiondown',
30719 '',
30720 'grave',
30721 'acute',
30722 'circumflex',
30723 'tilde',
30724 'macron',
30725 'breve',
30726 'dotaccent',
30727 'dieresis',
30728 '',
30729 'ring',
30730 'cedilla',
30731 '',
30732 'hungarumlaut',
30733 'ogonek',
30734 'caron',
30735 'emdash',
30736 '',
30737 '',
30738 '',
30739 '',
30740 '',
30741 '',
30742 '',
30743 '',
30744 '',
30745 '',
30746 '',
30747 '',
30748 '',
30749 '',
30750 '',
30751 '',
30752 'AE',
30753 '',
30754 'ordfeminine',
30755 '',
30756 '',
30757 '',
30758 '',
30759 'Lslash',
30760 'Oslash',
30761 'OE',
30762 'ordmasculine',
30763 '',
30764 '',
30765 '',
30766 '',
30767 '',
30768 'ae',
30769 '',
30770 '',
30771 '',
30772 'dotlessi',
30773 '',
30774 '',
30775 'lslash',
30776 'oslash',
30777 'oe',
30778 'germandbls'
30779];
30780let $64905f2680ca92ce$export$4f58f497e14a53c3 = [
30781 '',
30782 '',
30783 '',
30784 '',
30785 '',
30786 '',
30787 '',
30788 '',
30789 '',
30790 '',
30791 '',
30792 '',
30793 '',
30794 '',
30795 '',
30796 '',
30797 '',
30798 '',
30799 '',
30800 '',
30801 '',
30802 '',
30803 '',
30804 '',
30805 '',
30806 '',
30807 '',
30808 '',
30809 '',
30810 '',
30811 '',
30812 '',
30813 'space',
30814 'exclamsmall',
30815 'Hungarumlautsmall',
30816 '',
30817 'dollaroldstyle',
30818 'dollarsuperior',
30819 'ampersandsmall',
30820 'Acutesmall',
30821 'parenleftsuperior',
30822 'parenrightsuperior',
30823 'twodotenleader',
30824 'onedotenleader',
30825 'comma',
30826 'hyphen',
30827 'period',
30828 'fraction',
30829 'zerooldstyle',
30830 'oneoldstyle',
30831 'twooldstyle',
30832 'threeoldstyle',
30833 'fouroldstyle',
30834 'fiveoldstyle',
30835 'sixoldstyle',
30836 'sevenoldstyle',
30837 'eightoldstyle',
30838 'nineoldstyle',
30839 'colon',
30840 'semicolon',
30841 'commasuperior',
30842 'threequartersemdash',
30843 'periodsuperior',
30844 'questionsmall',
30845 '',
30846 'asuperior',
30847 'bsuperior',
30848 'centsuperior',
30849 'dsuperior',
30850 'esuperior',
30851 '',
30852 '',
30853 'isuperior',
30854 '',
30855 '',
30856 'lsuperior',
30857 'msuperior',
30858 'nsuperior',
30859 'osuperior',
30860 '',
30861 '',
30862 'rsuperior',
30863 'ssuperior',
30864 'tsuperior',
30865 '',
30866 'ff',
30867 'fi',
30868 'fl',
30869 'ffi',
30870 'ffl',
30871 'parenleftinferior',
30872 '',
30873 'parenrightinferior',
30874 'Circumflexsmall',
30875 'hyphensuperior',
30876 'Gravesmall',
30877 'Asmall',
30878 'Bsmall',
30879 'Csmall',
30880 'Dsmall',
30881 'Esmall',
30882 'Fsmall',
30883 'Gsmall',
30884 'Hsmall',
30885 'Ismall',
30886 'Jsmall',
30887 'Ksmall',
30888 'Lsmall',
30889 'Msmall',
30890 'Nsmall',
30891 'Osmall',
30892 'Psmall',
30893 'Qsmall',
30894 'Rsmall',
30895 'Ssmall',
30896 'Tsmall',
30897 'Usmall',
30898 'Vsmall',
30899 'Wsmall',
30900 'Xsmall',
30901 'Ysmall',
30902 'Zsmall',
30903 'colonmonetary',
30904 'onefitted',
30905 'rupiah',
30906 'Tildesmall',
30907 '',
30908 '',
30909 '',
30910 '',
30911 '',
30912 '',
30913 '',
30914 '',
30915 '',
30916 '',
30917 '',
30918 '',
30919 '',
30920 '',
30921 '',
30922 '',
30923 '',
30924 '',
30925 '',
30926 '',
30927 '',
30928 '',
30929 '',
30930 '',
30931 '',
30932 '',
30933 '',
30934 '',
30935 '',
30936 '',
30937 '',
30938 '',
30939 '',
30940 '',
30941 'exclamdownsmall',
30942 'centoldstyle',
30943 'Lslashsmall',
30944 '',
30945 '',
30946 'Scaronsmall',
30947 'Zcaronsmall',
30948 'Dieresissmall',
30949 'Brevesmall',
30950 'Caronsmall',
30951 '',
30952 'Dotaccentsmall',
30953 '',
30954 '',
30955 'Macronsmall',
30956 '',
30957 '',
30958 'figuredash',
30959 'hypheninferior',
30960 '',
30961 '',
30962 'Ogoneksmall',
30963 'Ringsmall',
30964 'Cedillasmall',
30965 '',
30966 '',
30967 '',
30968 'onequarter',
30969 'onehalf',
30970 'threequarters',
30971 'questiondownsmall',
30972 'oneeighth',
30973 'threeeighths',
30974 'fiveeighths',
30975 'seveneighths',
30976 'onethird',
30977 'twothirds',
30978 '',
30979 '',
30980 'zerosuperior',
30981 'onesuperior',
30982 'twosuperior',
30983 'threesuperior',
30984 'foursuperior',
30985 'fivesuperior',
30986 'sixsuperior',
30987 'sevensuperior',
30988 'eightsuperior',
30989 'ninesuperior',
30990 'zeroinferior',
30991 'oneinferior',
30992 'twoinferior',
30993 'threeinferior',
30994 'fourinferior',
30995 'fiveinferior',
30996 'sixinferior',
30997 'seveninferior',
30998 'eightinferior',
30999 'nineinferior',
31000 'centinferior',
31001 'dollarinferior',
31002 'periodinferior',
31003 'commainferior',
31004 'Agravesmall',
31005 'Aacutesmall',
31006 'Acircumflexsmall',
31007 'Atildesmall',
31008 'Adieresissmall',
31009 'Aringsmall',
31010 'AEsmall',
31011 'Ccedillasmall',
31012 'Egravesmall',
31013 'Eacutesmall',
31014 'Ecircumflexsmall',
31015 'Edieresissmall',
31016 'Igravesmall',
31017 'Iacutesmall',
31018 'Icircumflexsmall',
31019 'Idieresissmall',
31020 'Ethsmall',
31021 'Ntildesmall',
31022 'Ogravesmall',
31023 'Oacutesmall',
31024 'Ocircumflexsmall',
31025 'Otildesmall',
31026 'Odieresissmall',
31027 'OEsmall',
31028 'Oslashsmall',
31029 'Ugravesmall',
31030 'Uacutesmall',
31031 'Ucircumflexsmall',
31032 'Udieresissmall',
31033 'Yacutesmall',
31034 'Thornsmall',
31035 'Ydieresissmall'
31036];
31037
31038
31039let $d3c587cfeb0b2fa7$export$c33b50336c234f16 = [
31040 '.notdef',
31041 'space',
31042 'exclam',
31043 'quotedbl',
31044 'numbersign',
31045 'dollar',
31046 'percent',
31047 'ampersand',
31048 'quoteright',
31049 'parenleft',
31050 'parenright',
31051 'asterisk',
31052 'plus',
31053 'comma',
31054 'hyphen',
31055 'period',
31056 'slash',
31057 'zero',
31058 'one',
31059 'two',
31060 'three',
31061 'four',
31062 'five',
31063 'six',
31064 'seven',
31065 'eight',
31066 'nine',
31067 'colon',
31068 'semicolon',
31069 'less',
31070 'equal',
31071 'greater',
31072 'question',
31073 'at',
31074 'A',
31075 'B',
31076 'C',
31077 'D',
31078 'E',
31079 'F',
31080 'G',
31081 'H',
31082 'I',
31083 'J',
31084 'K',
31085 'L',
31086 'M',
31087 'N',
31088 'O',
31089 'P',
31090 'Q',
31091 'R',
31092 'S',
31093 'T',
31094 'U',
31095 'V',
31096 'W',
31097 'X',
31098 'Y',
31099 'Z',
31100 'bracketleft',
31101 'backslash',
31102 'bracketright',
31103 'asciicircum',
31104 'underscore',
31105 'quoteleft',
31106 'a',
31107 'b',
31108 'c',
31109 'd',
31110 'e',
31111 'f',
31112 'g',
31113 'h',
31114 'i',
31115 'j',
31116 'k',
31117 'l',
31118 'm',
31119 'n',
31120 'o',
31121 'p',
31122 'q',
31123 'r',
31124 's',
31125 't',
31126 'u',
31127 'v',
31128 'w',
31129 'x',
31130 'y',
31131 'z',
31132 'braceleft',
31133 'bar',
31134 'braceright',
31135 'asciitilde',
31136 'exclamdown',
31137 'cent',
31138 'sterling',
31139 'fraction',
31140 'yen',
31141 'florin',
31142 'section',
31143 'currency',
31144 'quotesingle',
31145 'quotedblleft',
31146 'guillemotleft',
31147 'guilsinglleft',
31148 'guilsinglright',
31149 'fi',
31150 'fl',
31151 'endash',
31152 'dagger',
31153 'daggerdbl',
31154 'periodcentered',
31155 'paragraph',
31156 'bullet',
31157 'quotesinglbase',
31158 'quotedblbase',
31159 'quotedblright',
31160 'guillemotright',
31161 'ellipsis',
31162 'perthousand',
31163 'questiondown',
31164 'grave',
31165 'acute',
31166 'circumflex',
31167 'tilde',
31168 'macron',
31169 'breve',
31170 'dotaccent',
31171 'dieresis',
31172 'ring',
31173 'cedilla',
31174 'hungarumlaut',
31175 'ogonek',
31176 'caron',
31177 'emdash',
31178 'AE',
31179 'ordfeminine',
31180 'Lslash',
31181 'Oslash',
31182 'OE',
31183 'ordmasculine',
31184 'ae',
31185 'dotlessi',
31186 'lslash',
31187 'oslash',
31188 'oe',
31189 'germandbls',
31190 'onesuperior',
31191 'logicalnot',
31192 'mu',
31193 'trademark',
31194 'Eth',
31195 'onehalf',
31196 'plusminus',
31197 'Thorn',
31198 'onequarter',
31199 'divide',
31200 'brokenbar',
31201 'degree',
31202 'thorn',
31203 'threequarters',
31204 'twosuperior',
31205 'registered',
31206 'minus',
31207 'eth',
31208 'multiply',
31209 'threesuperior',
31210 'copyright',
31211 'Aacute',
31212 'Acircumflex',
31213 'Adieresis',
31214 'Agrave',
31215 'Aring',
31216 'Atilde',
31217 'Ccedilla',
31218 'Eacute',
31219 'Ecircumflex',
31220 'Edieresis',
31221 'Egrave',
31222 'Iacute',
31223 'Icircumflex',
31224 'Idieresis',
31225 'Igrave',
31226 'Ntilde',
31227 'Oacute',
31228 'Ocircumflex',
31229 'Odieresis',
31230 'Ograve',
31231 'Otilde',
31232 'Scaron',
31233 'Uacute',
31234 'Ucircumflex',
31235 'Udieresis',
31236 'Ugrave',
31237 'Yacute',
31238 'Ydieresis',
31239 'Zcaron',
31240 'aacute',
31241 'acircumflex',
31242 'adieresis',
31243 'agrave',
31244 'aring',
31245 'atilde',
31246 'ccedilla',
31247 'eacute',
31248 'ecircumflex',
31249 'edieresis',
31250 'egrave',
31251 'iacute',
31252 'icircumflex',
31253 'idieresis',
31254 'igrave',
31255 'ntilde',
31256 'oacute',
31257 'ocircumflex',
31258 'odieresis',
31259 'ograve',
31260 'otilde',
31261 'scaron',
31262 'uacute',
31263 'ucircumflex',
31264 'udieresis',
31265 'ugrave',
31266 'yacute',
31267 'ydieresis',
31268 'zcaron'
31269];
31270let $d3c587cfeb0b2fa7$export$3ed0f9e1fee8d489 = [
31271 '.notdef',
31272 'space',
31273 'exclamsmall',
31274 'Hungarumlautsmall',
31275 'dollaroldstyle',
31276 'dollarsuperior',
31277 'ampersandsmall',
31278 'Acutesmall',
31279 'parenleftsuperior',
31280 'parenrightsuperior',
31281 'twodotenleader',
31282 'onedotenleader',
31283 'comma',
31284 'hyphen',
31285 'period',
31286 'fraction',
31287 'zerooldstyle',
31288 'oneoldstyle',
31289 'twooldstyle',
31290 'threeoldstyle',
31291 'fouroldstyle',
31292 'fiveoldstyle',
31293 'sixoldstyle',
31294 'sevenoldstyle',
31295 'eightoldstyle',
31296 'nineoldstyle',
31297 'colon',
31298 'semicolon',
31299 'commasuperior',
31300 'threequartersemdash',
31301 'periodsuperior',
31302 'questionsmall',
31303 'asuperior',
31304 'bsuperior',
31305 'centsuperior',
31306 'dsuperior',
31307 'esuperior',
31308 'isuperior',
31309 'lsuperior',
31310 'msuperior',
31311 'nsuperior',
31312 'osuperior',
31313 'rsuperior',
31314 'ssuperior',
31315 'tsuperior',
31316 'ff',
31317 'fi',
31318 'fl',
31319 'ffi',
31320 'ffl',
31321 'parenleftinferior',
31322 'parenrightinferior',
31323 'Circumflexsmall',
31324 'hyphensuperior',
31325 'Gravesmall',
31326 'Asmall',
31327 'Bsmall',
31328 'Csmall',
31329 'Dsmall',
31330 'Esmall',
31331 'Fsmall',
31332 'Gsmall',
31333 'Hsmall',
31334 'Ismall',
31335 'Jsmall',
31336 'Ksmall',
31337 'Lsmall',
31338 'Msmall',
31339 'Nsmall',
31340 'Osmall',
31341 'Psmall',
31342 'Qsmall',
31343 'Rsmall',
31344 'Ssmall',
31345 'Tsmall',
31346 'Usmall',
31347 'Vsmall',
31348 'Wsmall',
31349 'Xsmall',
31350 'Ysmall',
31351 'Zsmall',
31352 'colonmonetary',
31353 'onefitted',
31354 'rupiah',
31355 'Tildesmall',
31356 'exclamdownsmall',
31357 'centoldstyle',
31358 'Lslashsmall',
31359 'Scaronsmall',
31360 'Zcaronsmall',
31361 'Dieresissmall',
31362 'Brevesmall',
31363 'Caronsmall',
31364 'Dotaccentsmall',
31365 'Macronsmall',
31366 'figuredash',
31367 'hypheninferior',
31368 'Ogoneksmall',
31369 'Ringsmall',
31370 'Cedillasmall',
31371 'onequarter',
31372 'onehalf',
31373 'threequarters',
31374 'questiondownsmall',
31375 'oneeighth',
31376 'threeeighths',
31377 'fiveeighths',
31378 'seveneighths',
31379 'onethird',
31380 'twothirds',
31381 'zerosuperior',
31382 'onesuperior',
31383 'twosuperior',
31384 'threesuperior',
31385 'foursuperior',
31386 'fivesuperior',
31387 'sixsuperior',
31388 'sevensuperior',
31389 'eightsuperior',
31390 'ninesuperior',
31391 'zeroinferior',
31392 'oneinferior',
31393 'twoinferior',
31394 'threeinferior',
31395 'fourinferior',
31396 'fiveinferior',
31397 'sixinferior',
31398 'seveninferior',
31399 'eightinferior',
31400 'nineinferior',
31401 'centinferior',
31402 'dollarinferior',
31403 'periodinferior',
31404 'commainferior',
31405 'Agravesmall',
31406 'Aacutesmall',
31407 'Acircumflexsmall',
31408 'Atildesmall',
31409 'Adieresissmall',
31410 'Aringsmall',
31411 'AEsmall',
31412 'Ccedillasmall',
31413 'Egravesmall',
31414 'Eacutesmall',
31415 'Ecircumflexsmall',
31416 'Edieresissmall',
31417 'Igravesmall',
31418 'Iacutesmall',
31419 'Icircumflexsmall',
31420 'Idieresissmall',
31421 'Ethsmall',
31422 'Ntildesmall',
31423 'Ogravesmall',
31424 'Oacutesmall',
31425 'Ocircumflexsmall',
31426 'Otildesmall',
31427 'Odieresissmall',
31428 'OEsmall',
31429 'Oslashsmall',
31430 'Ugravesmall',
31431 'Uacutesmall',
31432 'Ucircumflexsmall',
31433 'Udieresissmall',
31434 'Yacutesmall',
31435 'Thornsmall',
31436 'Ydieresissmall'
31437];
31438let $d3c587cfeb0b2fa7$export$dc28be11139d4120 = [
31439 '.notdef',
31440 'space',
31441 'dollaroldstyle',
31442 'dollarsuperior',
31443 'parenleftsuperior',
31444 'parenrightsuperior',
31445 'twodotenleader',
31446 'onedotenleader',
31447 'comma',
31448 'hyphen',
31449 'period',
31450 'fraction',
31451 'zerooldstyle',
31452 'oneoldstyle',
31453 'twooldstyle',
31454 'threeoldstyle',
31455 'fouroldstyle',
31456 'fiveoldstyle',
31457 'sixoldstyle',
31458 'sevenoldstyle',
31459 'eightoldstyle',
31460 'nineoldstyle',
31461 'colon',
31462 'semicolon',
31463 'commasuperior',
31464 'threequartersemdash',
31465 'periodsuperior',
31466 'asuperior',
31467 'bsuperior',
31468 'centsuperior',
31469 'dsuperior',
31470 'esuperior',
31471 'isuperior',
31472 'lsuperior',
31473 'msuperior',
31474 'nsuperior',
31475 'osuperior',
31476 'rsuperior',
31477 'ssuperior',
31478 'tsuperior',
31479 'ff',
31480 'fi',
31481 'fl',
31482 'ffi',
31483 'ffl',
31484 'parenleftinferior',
31485 'parenrightinferior',
31486 'hyphensuperior',
31487 'colonmonetary',
31488 'onefitted',
31489 'rupiah',
31490 'centoldstyle',
31491 'figuredash',
31492 'hypheninferior',
31493 'onequarter',
31494 'onehalf',
31495 'threequarters',
31496 'oneeighth',
31497 'threeeighths',
31498 'fiveeighths',
31499 'seveneighths',
31500 'onethird',
31501 'twothirds',
31502 'zerosuperior',
31503 'onesuperior',
31504 'twosuperior',
31505 'threesuperior',
31506 'foursuperior',
31507 'fivesuperior',
31508 'sixsuperior',
31509 'sevensuperior',
31510 'eightsuperior',
31511 'ninesuperior',
31512 'zeroinferior',
31513 'oneinferior',
31514 'twoinferior',
31515 'threeinferior',
31516 'fourinferior',
31517 'fiveinferior',
31518 'sixinferior',
31519 'seveninferior',
31520 'eightinferior',
31521 'nineinferior',
31522 'centinferior',
31523 'dollarinferior',
31524 'periodinferior',
31525 'commainferior'
31526];
31527
31528
31529
31530//########################
31531// Scripts and Languages #
31532//########################
31533let $02fa1fdbd31163f6$var$LangSysTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31534 reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16),
31535 reqFeatureIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31536 featureCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31537 featureIndexes: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'featureCount')
31538});
31539let $02fa1fdbd31163f6$var$LangSysRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31540 tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4),
31541 langSys: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$LangSysTable, {
31542 type: 'parent'
31543 })
31544});
31545let $02fa1fdbd31163f6$var$Script = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31546 defaultLangSys: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$LangSysTable),
31547 count: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31548 langSysRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($02fa1fdbd31163f6$var$LangSysRecord, 'count')
31549});
31550let $02fa1fdbd31163f6$var$ScriptRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31551 tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4),
31552 script: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$Script, {
31553 type: 'parent'
31554 })
31555});
31556let $02fa1fdbd31163f6$export$3e15fc05ce864229 = new ($parcel$interopDefault($lzfo4$restructure)).Array($02fa1fdbd31163f6$var$ScriptRecord, ($parcel$interopDefault($lzfo4$restructure)).uint16);
31557//#######################
31558// Features and Lookups #
31559//#######################
31560let $02fa1fdbd31163f6$var$FeatureParams = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31561 version: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31562 nameID: ($parcel$interopDefault($lzfo4$restructure)).uint16
31563});
31564let $02fa1fdbd31163f6$export$6e91cf7616333d5 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31565 featureParams: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$FeatureParams),
31566 lookupCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31567 lookupListIndexes: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'lookupCount')
31568});
31569let $02fa1fdbd31163f6$var$FeatureRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31570 tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4),
31571 feature: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$6e91cf7616333d5, {
31572 type: 'parent'
31573 })
31574});
31575let $02fa1fdbd31163f6$export$aa18130def4b6cb4 = new ($parcel$interopDefault($lzfo4$restructure)).Array($02fa1fdbd31163f6$var$FeatureRecord, ($parcel$interopDefault($lzfo4$restructure)).uint16);
31576let $02fa1fdbd31163f6$var$LookupFlags = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31577 markAttachmentType: ($parcel$interopDefault($lzfo4$restructure)).uint8,
31578 flags: new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint8, [
31579 'rightToLeft',
31580 'ignoreBaseGlyphs',
31581 'ignoreLigatures',
31582 'ignoreMarks',
31583 'useMarkFilteringSet'
31584 ])
31585});
31586function $02fa1fdbd31163f6$export$df0008c6ff2da22a(SubTable) {
31587 let Lookup = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31588 lookupType: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31589 flags: $02fa1fdbd31163f6$var$LookupFlags,
31590 subTableCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31591 subTables: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, SubTable), 'subTableCount'),
31592 markFilteringSet: new ($parcel$interopDefault($lzfo4$restructure)).Optional(($parcel$interopDefault($lzfo4$restructure)).uint16, (t)=>t.flags.flags.useMarkFilteringSet
31593 )
31594 });
31595 return new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, Lookup), ($parcel$interopDefault($lzfo4$restructure)).uint16);
31596}
31597//#################
31598// Coverage Table #
31599//#################
31600let $02fa1fdbd31163f6$var$RangeRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31601 start: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31602 end: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31603 startCoverageIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16
31604});
31605let $02fa1fdbd31163f6$export$17608c3f81a6111 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, {
31606 1: {
31607 glyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31608 glyphs: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'glyphCount')
31609 },
31610 2: {
31611 rangeCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31612 rangeRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($02fa1fdbd31163f6$var$RangeRecord, 'rangeCount')
31613 }
31614});
31615//#########################
31616// Class Definition Table #
31617//#########################
31618let $02fa1fdbd31163f6$var$ClassRangeRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31619 start: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31620 end: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31621 class: ($parcel$interopDefault($lzfo4$restructure)).uint16
31622});
31623let $02fa1fdbd31163f6$export$843d551fbbafef71 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, {
31624 1: {
31625 startGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31626 glyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31627 classValueArray: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'glyphCount')
31628 },
31629 2: {
31630 classRangeCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31631 classRangeRecord: new ($parcel$interopDefault($lzfo4$restructure)).Array($02fa1fdbd31163f6$var$ClassRangeRecord, 'classRangeCount')
31632 }
31633});
31634let $02fa1fdbd31163f6$export$8215d14a63d9fb10 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31635 a: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31636 b: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31637 deltaFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16
31638});
31639//#############################################
31640// Contextual Substitution/Positioning Tables #
31641//#############################################
31642let $02fa1fdbd31163f6$var$LookupRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31643 sequenceIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31644 lookupListIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16
31645});
31646let $02fa1fdbd31163f6$var$Rule = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31647 glyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31648 lookupCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31649 input: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, (t)=>t.glyphCount - 1
31650 ),
31651 lookupRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($02fa1fdbd31163f6$var$LookupRecord, 'lookupCount')
31652});
31653let $02fa1fdbd31163f6$var$RuleSet = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$Rule), ($parcel$interopDefault($lzfo4$restructure)).uint16);
31654let $02fa1fdbd31163f6$var$ClassRule = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31655 glyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31656 lookupCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31657 classes: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, (t)=>t.glyphCount - 1
31658 ),
31659 lookupRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($02fa1fdbd31163f6$var$LookupRecord, 'lookupCount')
31660});
31661let $02fa1fdbd31163f6$var$ClassSet = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$ClassRule), ($parcel$interopDefault($lzfo4$restructure)).uint16);
31662let $02fa1fdbd31163f6$export$841858b892ce1f4c = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, {
31663 1: {
31664 coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
31665 ruleSetCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31666 ruleSets: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$RuleSet), 'ruleSetCount')
31667 },
31668 2: {
31669 coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
31670 classDef: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$843d551fbbafef71),
31671 classSetCnt: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31672 classSet: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$ClassSet), 'classSetCnt')
31673 },
31674 3: {
31675 glyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31676 lookupCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31677 coverages: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), 'glyphCount'),
31678 lookupRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($02fa1fdbd31163f6$var$LookupRecord, 'lookupCount')
31679 }
31680});
31681//######################################################
31682// Chaining Contextual Substitution/Positioning Tables #
31683//######################################################
31684let $02fa1fdbd31163f6$var$ChainRule = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31685 backtrackGlyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31686 backtrack: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'backtrackGlyphCount'),
31687 inputGlyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31688 input: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, (t)=>t.inputGlyphCount - 1
31689 ),
31690 lookaheadGlyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31691 lookahead: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'lookaheadGlyphCount'),
31692 lookupCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31693 lookupRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($02fa1fdbd31163f6$var$LookupRecord, 'lookupCount')
31694});
31695let $02fa1fdbd31163f6$var$ChainRuleSet = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$ChainRule), ($parcel$interopDefault($lzfo4$restructure)).uint16);
31696let $02fa1fdbd31163f6$export$5e6d09e6861162f6 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, {
31697 1: {
31698 coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
31699 chainCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31700 chainRuleSets: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$ChainRuleSet), 'chainCount')
31701 },
31702 2: {
31703 coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
31704 backtrackClassDef: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$843d551fbbafef71),
31705 inputClassDef: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$843d551fbbafef71),
31706 lookaheadClassDef: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$843d551fbbafef71),
31707 chainCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31708 chainClassSet: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$var$ChainRuleSet), 'chainCount')
31709 },
31710 3: {
31711 backtrackGlyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31712 backtrackCoverage: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), 'backtrackGlyphCount'),
31713 inputGlyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31714 inputCoverage: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), 'inputGlyphCount'),
31715 lookaheadGlyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31716 lookaheadCoverage: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), 'lookaheadGlyphCount'),
31717 lookupCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31718 lookupRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($02fa1fdbd31163f6$var$LookupRecord, 'lookupCount')
31719 }
31720});
31721
31722
31723
31724/*******************
31725 * Variation Store *
31726 *******************/ let $f7d48077c0582beb$var$F2DOT14 = new ($parcel$interopDefault($lzfo4$restructure)).Fixed(16, 'BE', 14);
31727let $f7d48077c0582beb$var$RegionAxisCoordinates = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31728 startCoord: $f7d48077c0582beb$var$F2DOT14,
31729 peakCoord: $f7d48077c0582beb$var$F2DOT14,
31730 endCoord: $f7d48077c0582beb$var$F2DOT14
31731});
31732let $f7d48077c0582beb$var$VariationRegionList = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31733 axisCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31734 regionCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31735 variationRegions: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Array($f7d48077c0582beb$var$RegionAxisCoordinates, 'axisCount'), 'regionCount')
31736});
31737let $f7d48077c0582beb$var$DeltaSet = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31738 shortDeltas: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).int16, (t)=>t.parent.shortDeltaCount
31739 ),
31740 regionDeltas: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).int8, (t)=>t.parent.regionIndexCount - t.parent.shortDeltaCount
31741 ),
31742 deltas: (t)=>t.shortDeltas.concat(t.regionDeltas)
31743});
31744let $f7d48077c0582beb$var$ItemVariationData = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31745 itemCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31746 shortDeltaCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31747 regionIndexCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31748 regionIndexes: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'regionIndexCount'),
31749 deltaSets: new ($parcel$interopDefault($lzfo4$restructure)).Array($f7d48077c0582beb$var$DeltaSet, 'itemCount')
31750});
31751let $f7d48077c0582beb$export$fe1b122a2710f241 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31752 format: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31753 variationRegionList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f7d48077c0582beb$var$VariationRegionList),
31754 variationDataCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31755 itemVariationData: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f7d48077c0582beb$var$ItemVariationData), 'variationDataCount')
31756});
31757/**********************
31758 * Feature Variations *
31759 **********************/ let $f7d48077c0582beb$var$ConditionTable = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, {
31760 1: {
31761 axisIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31762 axisIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31763 filterRangeMinValue: $f7d48077c0582beb$var$F2DOT14,
31764 filterRangeMaxValue: $f7d48077c0582beb$var$F2DOT14
31765 }
31766});
31767let $f7d48077c0582beb$var$ConditionSet = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31768 conditionCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31769 conditionTable: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f7d48077c0582beb$var$ConditionTable), 'conditionCount')
31770});
31771let $f7d48077c0582beb$var$FeatureTableSubstitutionRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31772 featureIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31773 alternateFeatureTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $02fa1fdbd31163f6$export$6e91cf7616333d5, {
31774 type: 'parent'
31775 })
31776});
31777let $f7d48077c0582beb$var$FeatureTableSubstitution = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31778 version: ($parcel$interopDefault($lzfo4$restructure)).fixed32,
31779 substitutionCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31780 substitutions: new ($parcel$interopDefault($lzfo4$restructure)).Array($f7d48077c0582beb$var$FeatureTableSubstitutionRecord, 'substitutionCount')
31781});
31782let $f7d48077c0582beb$var$FeatureVariationRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31783 conditionSet: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f7d48077c0582beb$var$ConditionSet, {
31784 type: 'parent'
31785 }),
31786 featureTableSubstitution: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f7d48077c0582beb$var$FeatureTableSubstitution, {
31787 type: 'parent'
31788 })
31789});
31790let $f7d48077c0582beb$export$441b70b7971dd419 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31791 majorVersion: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31792 minorVersion: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31793 featureVariationRecordCount: ($parcel$interopDefault($lzfo4$restructure)).uint32,
31794 featureVariationRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($f7d48077c0582beb$var$FeatureVariationRecord, 'featureVariationRecordCount')
31795});
31796
31797
31798// Checks if an operand is an index of a predefined value,
31799// otherwise delegates to the provided type.
31800class $5d220daacf51f8dc$var$PredefinedOp {
31801 decode(stream, parent, operands) {
31802 if (this.predefinedOps[operands[0]]) return this.predefinedOps[operands[0]];
31803 return this.type.decode(stream, parent, operands);
31804 }
31805 size(value, ctx) {
31806 return this.type.size(value, ctx);
31807 }
31808 encode(stream, value, ctx) {
31809 let index = this.predefinedOps.indexOf(value);
31810 if (index !== -1) return index;
31811 return this.type.encode(stream, value, ctx);
31812 }
31813 constructor(predefinedOps, type){
31814 this.predefinedOps = predefinedOps;
31815 this.type = type;
31816 }
31817}
31818class $5d220daacf51f8dc$var$CFFEncodingVersion extends ($parcel$interopDefault($lzfo4$restructure)).Number {
31819 decode(stream) {
31820 return ($parcel$interopDefault($lzfo4$restructure)).uint8.decode(stream) & 0x7f;
31821 }
31822 constructor(){
31823 super('UInt8');
31824 }
31825}
31826let $5d220daacf51f8dc$var$Range1 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31827 first: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31828 nLeft: ($parcel$interopDefault($lzfo4$restructure)).uint8
31829});
31830let $5d220daacf51f8dc$var$Range2 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31831 first: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31832 nLeft: ($parcel$interopDefault($lzfo4$restructure)).uint16
31833});
31834let $5d220daacf51f8dc$var$CFFCustomEncoding = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(new $5d220daacf51f8dc$var$CFFEncodingVersion(), {
31835 0: {
31836 nCodes: ($parcel$interopDefault($lzfo4$restructure)).uint8,
31837 codes: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, 'nCodes')
31838 },
31839 1: {
31840 nRanges: ($parcel$interopDefault($lzfo4$restructure)).uint8,
31841 ranges: new ($parcel$interopDefault($lzfo4$restructure)).Array($5d220daacf51f8dc$var$Range1, 'nRanges')
31842 }
31843});
31844let $5d220daacf51f8dc$var$CFFEncoding = new $5d220daacf51f8dc$var$PredefinedOp([
31845 $64905f2680ca92ce$export$dee0027060fa13bd,
31846 $64905f2680ca92ce$export$4f58f497e14a53c3
31847], new $1bd98896423435ca$export$2e2bcd8739ae039($5d220daacf51f8dc$var$CFFCustomEncoding, {
31848 lazy: true
31849}));
31850// Decodes an array of ranges until the total
31851// length is equal to the provided length.
31852class $5d220daacf51f8dc$var$RangeArray extends ($parcel$interopDefault($lzfo4$restructure)).Array {
31853 decode(stream, parent) {
31854 let length = $lzfo4$restructuresrcutilsjs.resolveLength(this.length, stream, parent);
31855 let count = 0;
31856 let res = [];
31857 while(count < length){
31858 let range = this.type.decode(stream, parent);
31859 range.offset = count;
31860 count += range.nLeft + 1;
31861 res.push(range);
31862 }
31863 return res;
31864 }
31865}
31866let $5d220daacf51f8dc$var$CFFCustomCharset = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint8, {
31867 0: {
31868 glyphs: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, (t)=>t.parent.CharStrings.length - 1
31869 )
31870 },
31871 1: {
31872 ranges: new $5d220daacf51f8dc$var$RangeArray($5d220daacf51f8dc$var$Range1, (t)=>t.parent.CharStrings.length - 1
31873 )
31874 },
31875 2: {
31876 ranges: new $5d220daacf51f8dc$var$RangeArray($5d220daacf51f8dc$var$Range2, (t)=>t.parent.CharStrings.length - 1
31877 )
31878 }
31879});
31880let $5d220daacf51f8dc$var$CFFCharset = new $5d220daacf51f8dc$var$PredefinedOp([
31881 $d3c587cfeb0b2fa7$export$c33b50336c234f16,
31882 $d3c587cfeb0b2fa7$export$3ed0f9e1fee8d489,
31883 $d3c587cfeb0b2fa7$export$dc28be11139d4120
31884], new $1bd98896423435ca$export$2e2bcd8739ae039($5d220daacf51f8dc$var$CFFCustomCharset, {
31885 lazy: true
31886}));
31887let $5d220daacf51f8dc$var$FDRange3 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31888 first: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31889 fd: ($parcel$interopDefault($lzfo4$restructure)).uint8
31890});
31891let $5d220daacf51f8dc$var$FDRange4 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
31892 first: ($parcel$interopDefault($lzfo4$restructure)).uint32,
31893 fd: ($parcel$interopDefault($lzfo4$restructure)).uint16
31894});
31895let $5d220daacf51f8dc$var$FDSelect = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint8, {
31896 0: {
31897 fds: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, (t)=>t.parent.CharStrings.length
31898 )
31899 },
31900 3: {
31901 nRanges: ($parcel$interopDefault($lzfo4$restructure)).uint16,
31902 ranges: new ($parcel$interopDefault($lzfo4$restructure)).Array($5d220daacf51f8dc$var$FDRange3, 'nRanges'),
31903 sentinel: ($parcel$interopDefault($lzfo4$restructure)).uint16
31904 },
31905 4: {
31906 nRanges: ($parcel$interopDefault($lzfo4$restructure)).uint32,
31907 ranges: new ($parcel$interopDefault($lzfo4$restructure)).Array($5d220daacf51f8dc$var$FDRange4, 'nRanges'),
31908 sentinel: ($parcel$interopDefault($lzfo4$restructure)).uint32
31909 }
31910});
31911let $5d220daacf51f8dc$var$ptr = new $1bd98896423435ca$export$2e2bcd8739ae039($f099ec1eecfbbfe4$export$2e2bcd8739ae039);
31912class $5d220daacf51f8dc$var$CFFPrivateOp {
31913 decode(stream, parent, operands) {
31914 parent.length = operands[0];
31915 return $5d220daacf51f8dc$var$ptr.decode(stream, parent, [
31916 operands[1]
31917 ]);
31918 }
31919 size(dict, ctx) {
31920 return [
31921 $f099ec1eecfbbfe4$export$2e2bcd8739ae039.size(dict, ctx, false),
31922 $5d220daacf51f8dc$var$ptr.size(dict, ctx)[0]
31923 ];
31924 }
31925 encode(stream, dict, ctx) {
31926 return [
31927 $f099ec1eecfbbfe4$export$2e2bcd8739ae039.size(dict, ctx, false),
31928 $5d220daacf51f8dc$var$ptr.encode(stream, dict, ctx)[0]
31929 ];
31930 }
31931}
31932let $5d220daacf51f8dc$var$FontDict = new $e73dde9fb8a50748$export$2e2bcd8739ae039([
31933 // key name type(s) default
31934 [
31935 18,
31936 'Private',
31937 new $5d220daacf51f8dc$var$CFFPrivateOp,
31938 null
31939 ],
31940 [
31941 [
31942 12,
31943 38
31944 ],
31945 'FontName',
31946 'sid',
31947 null
31948 ],
31949 [
31950 [
31951 12,
31952 7
31953 ],
31954 'FontMatrix',
31955 'array',
31956 [
31957 0.001,
31958 0,
31959 0,
31960 0.001,
31961 0,
31962 0
31963 ]
31964 ],
31965 [
31966 [
31967 12,
31968 5
31969 ],
31970 'PaintType',
31971 'number',
31972 0
31973 ],
31974]);
31975let $5d220daacf51f8dc$var$CFFTopDict = new $e73dde9fb8a50748$export$2e2bcd8739ae039([
31976 // key name type(s) default
31977 [
31978 [
31979 12,
31980 30
31981 ],
31982 'ROS',
31983 [
31984 'sid',
31985 'sid',
31986 'number'
31987 ],
31988 null
31989 ],
31990 [
31991 0,
31992 'version',
31993 'sid',
31994 null
31995 ],
31996 [
31997 1,
31998 'Notice',
31999 'sid',
32000 null
32001 ],
32002 [
32003 [
32004 12,
32005 0
32006 ],
32007 'Copyright',
32008 'sid',
32009 null
32010 ],
32011 [
32012 2,
32013 'FullName',
32014 'sid',
32015 null
32016 ],
32017 [
32018 3,
32019 'FamilyName',
32020 'sid',
32021 null
32022 ],
32023 [
32024 4,
32025 'Weight',
32026 'sid',
32027 null
32028 ],
32029 [
32030 [
32031 12,
32032 1
32033 ],
32034 'isFixedPitch',
32035 'boolean',
32036 false
32037 ],
32038 [
32039 [
32040 12,
32041 2
32042 ],
32043 'ItalicAngle',
32044 'number',
32045 0
32046 ],
32047 [
32048 [
32049 12,
32050 3
32051 ],
32052 'UnderlinePosition',
32053 'number',
32054 -100
32055 ],
32056 [
32057 [
32058 12,
32059 4
32060 ],
32061 'UnderlineThickness',
32062 'number',
32063 50
32064 ],
32065 [
32066 [
32067 12,
32068 5
32069 ],
32070 'PaintType',
32071 'number',
32072 0
32073 ],
32074 [
32075 [
32076 12,
32077 6
32078 ],
32079 'CharstringType',
32080 'number',
32081 2
32082 ],
32083 [
32084 [
32085 12,
32086 7
32087 ],
32088 'FontMatrix',
32089 'array',
32090 [
32091 0.001,
32092 0,
32093 0,
32094 0.001,
32095 0,
32096 0
32097 ]
32098 ],
32099 [
32100 13,
32101 'UniqueID',
32102 'number',
32103 null
32104 ],
32105 [
32106 5,
32107 'FontBBox',
32108 'array',
32109 [
32110 0,
32111 0,
32112 0,
32113 0
32114 ]
32115 ],
32116 [
32117 [
32118 12,
32119 8
32120 ],
32121 'StrokeWidth',
32122 'number',
32123 0
32124 ],
32125 [
32126 14,
32127 'XUID',
32128 'array',
32129 null
32130 ],
32131 [
32132 15,
32133 'charset',
32134 $5d220daacf51f8dc$var$CFFCharset,
32135 $d3c587cfeb0b2fa7$export$c33b50336c234f16
32136 ],
32137 [
32138 16,
32139 'Encoding',
32140 $5d220daacf51f8dc$var$CFFEncoding,
32141 $64905f2680ca92ce$export$dee0027060fa13bd
32142 ],
32143 [
32144 17,
32145 'CharStrings',
32146 new $1bd98896423435ca$export$2e2bcd8739ae039(new $52a9289da21106c8$export$2e2bcd8739ae039),
32147 null
32148 ],
32149 [
32150 18,
32151 'Private',
32152 new $5d220daacf51f8dc$var$CFFPrivateOp,
32153 null
32154 ],
32155 [
32156 [
32157 12,
32158 20
32159 ],
32160 'SyntheticBase',
32161 'number',
32162 null
32163 ],
32164 [
32165 [
32166 12,
32167 21
32168 ],
32169 'PostScript',
32170 'sid',
32171 null
32172 ],
32173 [
32174 [
32175 12,
32176 22
32177 ],
32178 'BaseFontName',
32179 'sid',
32180 null
32181 ],
32182 [
32183 [
32184 12,
32185 23
32186 ],
32187 'BaseFontBlend',
32188 'delta',
32189 null
32190 ],
32191 // CID font specific
32192 [
32193 [
32194 12,
32195 31
32196 ],
32197 'CIDFontVersion',
32198 'number',
32199 0
32200 ],
32201 [
32202 [
32203 12,
32204 32
32205 ],
32206 'CIDFontRevision',
32207 'number',
32208 0
32209 ],
32210 [
32211 [
32212 12,
32213 33
32214 ],
32215 'CIDFontType',
32216 'number',
32217 0
32218 ],
32219 [
32220 [
32221 12,
32222 34
32223 ],
32224 'CIDCount',
32225 'number',
32226 8720
32227 ],
32228 [
32229 [
32230 12,
32231 35
32232 ],
32233 'UIDBase',
32234 'number',
32235 null
32236 ],
32237 [
32238 [
32239 12,
32240 37
32241 ],
32242 'FDSelect',
32243 new $1bd98896423435ca$export$2e2bcd8739ae039($5d220daacf51f8dc$var$FDSelect),
32244 null
32245 ],
32246 [
32247 [
32248 12,
32249 36
32250 ],
32251 'FDArray',
32252 new $1bd98896423435ca$export$2e2bcd8739ae039(new $52a9289da21106c8$export$2e2bcd8739ae039($5d220daacf51f8dc$var$FontDict)),
32253 null
32254 ],
32255 [
32256 [
32257 12,
32258 38
32259 ],
32260 'FontName',
32261 'sid',
32262 null
32263 ]
32264]);
32265let $5d220daacf51f8dc$var$VariationStore = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32266 length: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32267 itemVariationStore: $f7d48077c0582beb$export$fe1b122a2710f241
32268});
32269let $5d220daacf51f8dc$var$CFF2TopDict = new $e73dde9fb8a50748$export$2e2bcd8739ae039([
32270 [
32271 [
32272 12,
32273 7
32274 ],
32275 'FontMatrix',
32276 'array',
32277 [
32278 0.001,
32279 0,
32280 0,
32281 0.001,
32282 0,
32283 0
32284 ]
32285 ],
32286 [
32287 17,
32288 'CharStrings',
32289 new $1bd98896423435ca$export$2e2bcd8739ae039(new $52a9289da21106c8$export$2e2bcd8739ae039),
32290 null
32291 ],
32292 [
32293 [
32294 12,
32295 37
32296 ],
32297 'FDSelect',
32298 new $1bd98896423435ca$export$2e2bcd8739ae039($5d220daacf51f8dc$var$FDSelect),
32299 null
32300 ],
32301 [
32302 [
32303 12,
32304 36
32305 ],
32306 'FDArray',
32307 new $1bd98896423435ca$export$2e2bcd8739ae039(new $52a9289da21106c8$export$2e2bcd8739ae039($5d220daacf51f8dc$var$FontDict)),
32308 null
32309 ],
32310 [
32311 24,
32312 'vstore',
32313 new $1bd98896423435ca$export$2e2bcd8739ae039($5d220daacf51f8dc$var$VariationStore),
32314 null
32315 ],
32316 [
32317 25,
32318 'maxstack',
32319 'number',
32320 193
32321 ]
32322]);
32323let $5d220daacf51f8dc$var$CFFTop = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).fixed16, {
32324 1: {
32325 hdrSize: ($parcel$interopDefault($lzfo4$restructure)).uint8,
32326 offSize: ($parcel$interopDefault($lzfo4$restructure)).uint8,
32327 nameIndex: new $52a9289da21106c8$export$2e2bcd8739ae039(new ($parcel$interopDefault($lzfo4$restructure)).String('length')),
32328 topDictIndex: new $52a9289da21106c8$export$2e2bcd8739ae039($5d220daacf51f8dc$var$CFFTopDict),
32329 stringIndex: new $52a9289da21106c8$export$2e2bcd8739ae039(new ($parcel$interopDefault($lzfo4$restructure)).String('length')),
32330 globalSubrIndex: new $52a9289da21106c8$export$2e2bcd8739ae039
32331 },
32332 2: {
32333 hdrSize: ($parcel$interopDefault($lzfo4$restructure)).uint8,
32334 length: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32335 topDict: $5d220daacf51f8dc$var$CFF2TopDict,
32336 globalSubrIndex: new $52a9289da21106c8$export$2e2bcd8739ae039
32337 }
32338});
32339var $5d220daacf51f8dc$export$2e2bcd8739ae039 = $5d220daacf51f8dc$var$CFFTop;
32340
32341
32342
32343
32344class $af4e76a81d73e13e$var$CFFFont {
32345 static decode(stream) {
32346 return new $af4e76a81d73e13e$var$CFFFont(stream);
32347 }
32348 decode() {
32349 let start = this.stream.pos;
32350 let top = $5d220daacf51f8dc$export$2e2bcd8739ae039.decode(this.stream);
32351 for(let key in top){
32352 let val = top[key];
32353 this[key] = val;
32354 }
32355 if (this.version < 2) {
32356 if (this.topDictIndex.length !== 1) throw new Error("Only a single font is allowed in CFF");
32357 this.topDict = this.topDictIndex[0];
32358 }
32359 this.isCIDFont = this.topDict.ROS != null;
32360 return this;
32361 }
32362 string(sid) {
32363 if (this.version >= 2) return null;
32364 if (sid < $4292bb2f086bd070$export$2e2bcd8739ae039.length) return $4292bb2f086bd070$export$2e2bcd8739ae039[sid];
32365 return this.stringIndex[sid - $4292bb2f086bd070$export$2e2bcd8739ae039.length];
32366 }
32367 get postscriptName() {
32368 if (this.version < 2) return this.nameIndex[0];
32369 return null;
32370 }
32371 get fullName() {
32372 return this.string(this.topDict.FullName);
32373 }
32374 get familyName() {
32375 return this.string(this.topDict.FamilyName);
32376 }
32377 getCharString(glyph) {
32378 this.stream.pos = this.topDict.CharStrings[glyph].offset;
32379 return this.stream.readBuffer(this.topDict.CharStrings[glyph].length);
32380 }
32381 getGlyphName(gid) {
32382 // CFF2 glyph names are in the post table.
32383 if (this.version >= 2) return null;
32384 // CID-keyed fonts don't have glyph names
32385 if (this.isCIDFont) return null;
32386 let { charset: charset } = this.topDict;
32387 if (Array.isArray(charset)) return charset[gid];
32388 if (gid === 0) return '.notdef';
32389 gid -= 1;
32390 switch(charset.version){
32391 case 0:
32392 return this.string(charset.glyphs[gid]);
32393 case 1:
32394 case 2:
32395 for(let i = 0; i < charset.ranges.length; i++){
32396 let range = charset.ranges[i];
32397 if (range.offset <= gid && gid <= range.offset + range.nLeft) return this.string(range.first + (gid - range.offset));
32398 }
32399 break;
32400 }
32401 return null;
32402 }
32403 fdForGlyph(gid) {
32404 if (!this.topDict.FDSelect) return null;
32405 switch(this.topDict.FDSelect.version){
32406 case 0:
32407 return this.topDict.FDSelect.fds[gid];
32408 case 3:
32409 case 4:
32410 let { ranges: ranges } = this.topDict.FDSelect;
32411 let low = 0;
32412 let high = ranges.length - 1;
32413 while(low <= high){
32414 let mid = low + high >> 1;
32415 if (gid < ranges[mid].first) high = mid - 1;
32416 else if (mid < high && gid >= ranges[mid + 1].first) low = mid + 1;
32417 else return ranges[mid].fd;
32418 }
32419 default:
32420 throw new Error(`Unknown FDSelect version: ${this.topDict.FDSelect.version}`);
32421 }
32422 }
32423 privateDictForGlyph(gid) {
32424 if (this.topDict.FDSelect) {
32425 let fd = this.fdForGlyph(gid);
32426 if (this.topDict.FDArray[fd]) return this.topDict.FDArray[fd].Private;
32427 return null;
32428 }
32429 if (this.version < 2) return this.topDict.Private;
32430 return this.topDict.FDArray[0].Private;
32431 }
32432 constructor(stream){
32433 this.stream = stream;
32434 this.decode();
32435 }
32436}
32437var $af4e76a81d73e13e$export$2e2bcd8739ae039 = $af4e76a81d73e13e$var$CFFFont;
32438
32439
32440
32441let $a037a9ab8e35d2e2$var$VerticalOrigin = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32442 glyphIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32443 vertOriginY: ($parcel$interopDefault($lzfo4$restructure)).int16
32444});
32445var $a037a9ab8e35d2e2$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32446 majorVersion: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32447 minorVersion: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32448 defaultVertOriginY: ($parcel$interopDefault($lzfo4$restructure)).int16,
32449 numVertOriginYMetrics: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32450 metrics: new ($parcel$interopDefault($lzfo4$restructure)).Array($a037a9ab8e35d2e2$var$VerticalOrigin, 'numVertOriginYMetrics')
32451});
32452
32453
32454
32455
32456let $57be5e4dbfc12b37$export$16b227cb15d716a0 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32457 height: ($parcel$interopDefault($lzfo4$restructure)).uint8,
32458 width: ($parcel$interopDefault($lzfo4$restructure)).uint8,
32459 horiBearingX: ($parcel$interopDefault($lzfo4$restructure)).int8,
32460 horiBearingY: ($parcel$interopDefault($lzfo4$restructure)).int8,
32461 horiAdvance: ($parcel$interopDefault($lzfo4$restructure)).uint8,
32462 vertBearingX: ($parcel$interopDefault($lzfo4$restructure)).int8,
32463 vertBearingY: ($parcel$interopDefault($lzfo4$restructure)).int8,
32464 vertAdvance: ($parcel$interopDefault($lzfo4$restructure)).uint8
32465});
32466let $57be5e4dbfc12b37$export$62c53e75f69bfe12 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32467 height: ($parcel$interopDefault($lzfo4$restructure)).uint8,
32468 width: ($parcel$interopDefault($lzfo4$restructure)).uint8,
32469 bearingX: ($parcel$interopDefault($lzfo4$restructure)).int8,
32470 bearingY: ($parcel$interopDefault($lzfo4$restructure)).int8,
32471 advance: ($parcel$interopDefault($lzfo4$restructure)).uint8
32472});
32473let $57be5e4dbfc12b37$var$EBDTComponent = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32474 glyph: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32475 xOffset: ($parcel$interopDefault($lzfo4$restructure)).int8,
32476 yOffset: ($parcel$interopDefault($lzfo4$restructure)).int8
32477});
32478class $57be5e4dbfc12b37$var$ByteAligned {
32479}
32480class $57be5e4dbfc12b37$var$BitAligned {
32481}
32482let $57be5e4dbfc12b37$export$f1f5ddeb20d14f = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct('version', {
32483 1: {
32484 metrics: $57be5e4dbfc12b37$export$62c53e75f69bfe12,
32485 data: $57be5e4dbfc12b37$var$ByteAligned
32486 },
32487 2: {
32488 metrics: $57be5e4dbfc12b37$export$62c53e75f69bfe12,
32489 data: $57be5e4dbfc12b37$var$BitAligned
32490 },
32491 // format 3 is deprecated
32492 // format 4 is not supported by Microsoft
32493 5: {
32494 data: $57be5e4dbfc12b37$var$BitAligned
32495 },
32496 6: {
32497 metrics: $57be5e4dbfc12b37$export$16b227cb15d716a0,
32498 data: $57be5e4dbfc12b37$var$ByteAligned
32499 },
32500 7: {
32501 metrics: $57be5e4dbfc12b37$export$16b227cb15d716a0,
32502 data: $57be5e4dbfc12b37$var$BitAligned
32503 },
32504 8: {
32505 metrics: $57be5e4dbfc12b37$export$62c53e75f69bfe12,
32506 pad: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint8),
32507 numComponents: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32508 components: new ($parcel$interopDefault($lzfo4$restructure)).Array($57be5e4dbfc12b37$var$EBDTComponent, 'numComponents')
32509 },
32510 9: {
32511 metrics: $57be5e4dbfc12b37$export$16b227cb15d716a0,
32512 pad: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint8),
32513 numComponents: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32514 components: new ($parcel$interopDefault($lzfo4$restructure)).Array($57be5e4dbfc12b37$var$EBDTComponent, 'numComponents')
32515 },
32516 17: {
32517 metrics: $57be5e4dbfc12b37$export$62c53e75f69bfe12,
32518 dataLen: ($parcel$interopDefault($lzfo4$restructure)).uint32,
32519 data: new ($parcel$interopDefault($lzfo4$restructure)).Buffer('dataLen')
32520 },
32521 18: {
32522 metrics: $57be5e4dbfc12b37$export$16b227cb15d716a0,
32523 dataLen: ($parcel$interopDefault($lzfo4$restructure)).uint32,
32524 data: new ($parcel$interopDefault($lzfo4$restructure)).Buffer('dataLen')
32525 },
32526 19: {
32527 dataLen: ($parcel$interopDefault($lzfo4$restructure)).uint32,
32528 data: new ($parcel$interopDefault($lzfo4$restructure)).Buffer('dataLen')
32529 }
32530});
32531
32532
32533let $415d3f0073d22090$var$SBitLineMetrics = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32534 ascender: ($parcel$interopDefault($lzfo4$restructure)).int8,
32535 descender: ($parcel$interopDefault($lzfo4$restructure)).int8,
32536 widthMax: ($parcel$interopDefault($lzfo4$restructure)).uint8,
32537 caretSlopeNumerator: ($parcel$interopDefault($lzfo4$restructure)).int8,
32538 caretSlopeDenominator: ($parcel$interopDefault($lzfo4$restructure)).int8,
32539 caretOffset: ($parcel$interopDefault($lzfo4$restructure)).int8,
32540 minOriginSB: ($parcel$interopDefault($lzfo4$restructure)).int8,
32541 minAdvanceSB: ($parcel$interopDefault($lzfo4$restructure)).int8,
32542 maxBeforeBL: ($parcel$interopDefault($lzfo4$restructure)).int8,
32543 minAfterBL: ($parcel$interopDefault($lzfo4$restructure)).int8,
32544 pad: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).int8, 2)
32545});
32546let $415d3f0073d22090$var$CodeOffsetPair = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32547 glyphCode: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32548 offset: ($parcel$interopDefault($lzfo4$restructure)).uint16
32549});
32550let $415d3f0073d22090$var$IndexSubtable = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, {
32551 header: {
32552 imageFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32553 imageDataOffset: ($parcel$interopDefault($lzfo4$restructure)).uint32
32554 },
32555 1: {
32556 offsetArray: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint32, (t)=>t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1
32557 )
32558 },
32559 2: {
32560 imageSize: ($parcel$interopDefault($lzfo4$restructure)).uint32,
32561 bigMetrics: $57be5e4dbfc12b37$export$16b227cb15d716a0
32562 },
32563 3: {
32564 offsetArray: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, (t)=>t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1
32565 )
32566 },
32567 4: {
32568 numGlyphs: ($parcel$interopDefault($lzfo4$restructure)).uint32,
32569 glyphArray: new ($parcel$interopDefault($lzfo4$restructure)).Array($415d3f0073d22090$var$CodeOffsetPair, (t)=>t.numGlyphs + 1
32570 )
32571 },
32572 5: {
32573 imageSize: ($parcel$interopDefault($lzfo4$restructure)).uint32,
32574 bigMetrics: $57be5e4dbfc12b37$export$16b227cb15d716a0,
32575 numGlyphs: ($parcel$interopDefault($lzfo4$restructure)).uint32,
32576 glyphCodeArray: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'numGlyphs')
32577 }
32578});
32579let $415d3f0073d22090$var$IndexSubtableArray = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32580 firstGlyphIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32581 lastGlyphIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32582 subtable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $415d3f0073d22090$var$IndexSubtable)
32583});
32584let $415d3f0073d22090$var$BitmapSizeTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32585 indexSubTableArray: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new ($parcel$interopDefault($lzfo4$restructure)).Array($415d3f0073d22090$var$IndexSubtableArray, 1), {
32586 type: 'parent'
32587 }),
32588 indexTablesSize: ($parcel$interopDefault($lzfo4$restructure)).uint32,
32589 numberOfIndexSubTables: ($parcel$interopDefault($lzfo4$restructure)).uint32,
32590 colorRef: ($parcel$interopDefault($lzfo4$restructure)).uint32,
32591 hori: $415d3f0073d22090$var$SBitLineMetrics,
32592 vert: $415d3f0073d22090$var$SBitLineMetrics,
32593 startGlyphIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32594 endGlyphIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32595 ppemX: ($parcel$interopDefault($lzfo4$restructure)).uint8,
32596 ppemY: ($parcel$interopDefault($lzfo4$restructure)).uint8,
32597 bitDepth: ($parcel$interopDefault($lzfo4$restructure)).uint8,
32598 flags: new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint8, [
32599 'horizontal',
32600 'vertical'
32601 ])
32602});
32603var $415d3f0073d22090$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32604 version: ($parcel$interopDefault($lzfo4$restructure)).uint32,
32605 numSizes: ($parcel$interopDefault($lzfo4$restructure)).uint32,
32606 sizes: new ($parcel$interopDefault($lzfo4$restructure)).Array($415d3f0073d22090$var$BitmapSizeTable, 'numSizes')
32607});
32608
32609
32610
32611let $95fc167908565fc1$var$ImageTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32612 ppem: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32613 resolution: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32614 imageOffsets: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, 'void'), (t)=>t.parent.parent.maxp.numGlyphs + 1
32615 )
32616});
32617var // This is the Apple sbix table, used by the "Apple Color Emoji" font.
32618// It includes several image tables with images for each bitmap glyph
32619// of several different sizes.
32620$95fc167908565fc1$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32621 version: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32622 flags: new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint16, [
32623 'renderOutlines'
32624 ]),
32625 numImgTables: ($parcel$interopDefault($lzfo4$restructure)).uint32,
32626 imageTables: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $95fc167908565fc1$var$ImageTable), 'numImgTables')
32627});
32628
32629
32630
32631let $ee5a058727c0db64$var$LayerRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32632 gid: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32633 paletteIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16 // Index value to use in the appropriate palette. This value must
32634}); // be less than numPaletteEntries in the CPAL table, except for
32635// the special case noted below. Each palette entry is 16 bits.
32636// A palette index of 0xFFFF is a special case indicating that
32637// the text foreground color should be used.
32638let $ee5a058727c0db64$var$BaseGlyphRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32639 gid: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32640 // and is not rendered for color.
32641 firstLayerIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32642 // There will be numLayers consecutive entries for this base glyph.
32643 numLayers: ($parcel$interopDefault($lzfo4$restructure)).uint16
32644});
32645var $ee5a058727c0db64$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32646 version: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32647 numBaseGlyphRecords: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32648 baseGlyphRecord: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new ($parcel$interopDefault($lzfo4$restructure)).Array($ee5a058727c0db64$var$BaseGlyphRecord, 'numBaseGlyphRecords')),
32649 layerRecords: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new ($parcel$interopDefault($lzfo4$restructure)).Array($ee5a058727c0db64$var$LayerRecord, 'numLayerRecords'), {
32650 lazy: true
32651 }),
32652 numLayerRecords: ($parcel$interopDefault($lzfo4$restructure)).uint16
32653});
32654
32655
32656
32657let $23ee004c2c56be61$var$ColorRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32658 blue: ($parcel$interopDefault($lzfo4$restructure)).uint8,
32659 green: ($parcel$interopDefault($lzfo4$restructure)).uint8,
32660 red: ($parcel$interopDefault($lzfo4$restructure)).uint8,
32661 alpha: ($parcel$interopDefault($lzfo4$restructure)).uint8
32662});
32663var $23ee004c2c56be61$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, {
32664 header: {
32665 numPaletteEntries: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32666 numPalettes: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32667 numColorRecords: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32668 colorRecords: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new ($parcel$interopDefault($lzfo4$restructure)).Array($23ee004c2c56be61$var$ColorRecord, 'numColorRecords')),
32669 colorRecordIndices: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'numPalettes')
32670 },
32671 0: {},
32672 1: {
32673 offsetPaletteTypeArray: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint32, 'numPalettes')),
32674 offsetPaletteLabelArray: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'numPalettes')),
32675 offsetPaletteEntryLabelArray: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'numPaletteEntries'))
32676 }
32677});
32678
32679
32680
32681
32682
32683let $4745757aab3ee679$var$BaseCoord = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, {
32684 1: {
32685 coordinate: ($parcel$interopDefault($lzfo4$restructure)).int16 // X or Y value, in design units
32686 },
32687 2: {
32688 coordinate: ($parcel$interopDefault($lzfo4$restructure)).int16,
32689 referenceGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32690 baseCoordPoint: ($parcel$interopDefault($lzfo4$restructure)).uint16 // Index of contour point on the referenceGlyph
32691 },
32692 3: {
32693 coordinate: ($parcel$interopDefault($lzfo4$restructure)).int16,
32694 deviceTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$8215d14a63d9fb10) // Device table for X or Y value
32695 }
32696});
32697let $4745757aab3ee679$var$BaseValues = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32698 defaultIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32699 baseCoordCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32700 baseCoords: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$BaseCoord), 'baseCoordCount')
32701});
32702let $4745757aab3ee679$var$FeatMinMaxRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32703 tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4),
32704 minCoord: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$BaseCoord, {
32705 type: 'parent'
32706 }),
32707 maxCoord: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$BaseCoord, {
32708 type: 'parent'
32709 }) // May be NULL
32710});
32711let $4745757aab3ee679$var$MinMax = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32712 minCoord: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$BaseCoord),
32713 maxCoord: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$BaseCoord),
32714 featMinMaxCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32715 featMinMaxRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($4745757aab3ee679$var$FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order
32716});
32717let $4745757aab3ee679$var$BaseLangSysRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32718 tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4),
32719 minMax: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$MinMax, {
32720 type: 'parent'
32721 })
32722});
32723let $4745757aab3ee679$var$BaseScript = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32724 baseValues: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$BaseValues),
32725 defaultMinMax: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$MinMax),
32726 baseLangSysCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32727 baseLangSysRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($4745757aab3ee679$var$BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag
32728});
32729let $4745757aab3ee679$var$BaseScriptRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32730 tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4),
32731 script: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$BaseScript, {
32732 type: 'parent'
32733 })
32734});
32735let $4745757aab3ee679$var$BaseScriptList = new ($parcel$interopDefault($lzfo4$restructure)).Array($4745757aab3ee679$var$BaseScriptRecord, ($parcel$interopDefault($lzfo4$restructure)).uint16);
32736// Array of 4-byte baseline identification tags-must be in alphabetical order
32737let $4745757aab3ee679$var$BaseTagList = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).String(4), ($parcel$interopDefault($lzfo4$restructure)).uint16);
32738let $4745757aab3ee679$var$Axis = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32739 baseTagList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$BaseTagList),
32740 baseScriptList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$BaseScriptList)
32741});
32742var $4745757aab3ee679$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint32, {
32743 header: {
32744 horizAxis: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$Axis),
32745 vertAxis: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $4745757aab3ee679$var$Axis) // May be NULL
32746 },
32747 0x00010000: {},
32748 0x00010001: {
32749 itemVariationStore: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f7d48077c0582beb$export$fe1b122a2710f241)
32750 }
32751});
32752
32753
32754
32755
32756
32757let $e587dbe605efb582$var$AttachPoint = new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, ($parcel$interopDefault($lzfo4$restructure)).uint16);
32758let $e587dbe605efb582$var$AttachList = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32759 coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
32760 glyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32761 attachPoints: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e587dbe605efb582$var$AttachPoint), 'glyphCount')
32762});
32763let $e587dbe605efb582$var$CaretValue = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, {
32764 1: {
32765 coordinate: ($parcel$interopDefault($lzfo4$restructure)).int16
32766 },
32767 2: {
32768 caretValuePoint: ($parcel$interopDefault($lzfo4$restructure)).uint16
32769 },
32770 3: {
32771 coordinate: ($parcel$interopDefault($lzfo4$restructure)).int16,
32772 deviceTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$8215d14a63d9fb10)
32773 }
32774});
32775let $e587dbe605efb582$var$LigGlyph = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e587dbe605efb582$var$CaretValue), ($parcel$interopDefault($lzfo4$restructure)).uint16);
32776let $e587dbe605efb582$var$LigCaretList = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32777 coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
32778 ligGlyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32779 ligGlyphs: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e587dbe605efb582$var$LigGlyph), 'ligGlyphCount')
32780});
32781let $e587dbe605efb582$var$MarkGlyphSetsDef = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32782 markSetTableFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32783 markSetCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32784 coverage: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $02fa1fdbd31163f6$export$17608c3f81a6111), 'markSetCount')
32785});
32786var $e587dbe605efb582$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint32, {
32787 header: {
32788 glyphClassDef: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$843d551fbbafef71),
32789 attachList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e587dbe605efb582$var$AttachList),
32790 ligCaretList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e587dbe605efb582$var$LigCaretList),
32791 markAttachClassDef: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$843d551fbbafef71)
32792 },
32793 0x00010000: {},
32794 0x00010002: {
32795 markGlyphSetsDef: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e587dbe605efb582$var$MarkGlyphSetsDef)
32796 },
32797 0x00010003: {
32798 markGlyphSetsDef: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e587dbe605efb582$var$MarkGlyphSetsDef),
32799 itemVariationStore: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f7d48077c0582beb$export$fe1b122a2710f241)
32800 }
32801});
32802
32803
32804
32805
32806
32807let $68e365289aac05c8$var$ValueFormat = new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint16, [
32808 'xPlacement',
32809 'yPlacement',
32810 'xAdvance',
32811 'yAdvance',
32812 'xPlaDevice',
32813 'yPlaDevice',
32814 'xAdvDevice',
32815 'yAdvDevice'
32816]);
32817let $68e365289aac05c8$var$types = {
32818 xPlacement: ($parcel$interopDefault($lzfo4$restructure)).int16,
32819 yPlacement: ($parcel$interopDefault($lzfo4$restructure)).int16,
32820 xAdvance: ($parcel$interopDefault($lzfo4$restructure)).int16,
32821 yAdvance: ($parcel$interopDefault($lzfo4$restructure)).int16,
32822 xPlaDevice: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$8215d14a63d9fb10, {
32823 type: 'global',
32824 relativeTo: (ctx)=>ctx.rel
32825 }),
32826 yPlaDevice: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$8215d14a63d9fb10, {
32827 type: 'global',
32828 relativeTo: (ctx)=>ctx.rel
32829 }),
32830 xAdvDevice: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$8215d14a63d9fb10, {
32831 type: 'global',
32832 relativeTo: (ctx)=>ctx.rel
32833 }),
32834 yAdvDevice: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$8215d14a63d9fb10, {
32835 type: 'global',
32836 relativeTo: (ctx)=>ctx.rel
32837 })
32838};
32839class $68e365289aac05c8$var$ValueRecord {
32840 buildStruct(parent) {
32841 let struct = parent;
32842 while(!struct[this.key] && struct.parent)struct = struct.parent;
32843 if (!struct[this.key]) return;
32844 let fields = {};
32845 fields.rel = ()=>struct._startOffset
32846 ;
32847 let format = struct[this.key];
32848 for(let key in format)if (format[key]) fields[key] = $68e365289aac05c8$var$types[key];
32849 return new ($parcel$interopDefault($lzfo4$restructure)).Struct(fields);
32850 }
32851 size(val, ctx) {
32852 return this.buildStruct(ctx).size(val, ctx);
32853 }
32854 decode(stream, parent) {
32855 let res = this.buildStruct(parent).decode(stream, parent);
32856 delete res.rel;
32857 return res;
32858 }
32859 constructor(key = 'valueFormat'){
32860 this.key = key;
32861 }
32862}
32863let $68e365289aac05c8$var$PairValueRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32864 secondGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32865 value1: new $68e365289aac05c8$var$ValueRecord('valueFormat1'),
32866 value2: new $68e365289aac05c8$var$ValueRecord('valueFormat2')
32867});
32868let $68e365289aac05c8$var$PairSet = new ($parcel$interopDefault($lzfo4$restructure)).Array($68e365289aac05c8$var$PairValueRecord, ($parcel$interopDefault($lzfo4$restructure)).uint16);
32869let $68e365289aac05c8$var$Class2Record = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32870 value1: new $68e365289aac05c8$var$ValueRecord('valueFormat1'),
32871 value2: new $68e365289aac05c8$var$ValueRecord('valueFormat2')
32872});
32873let $68e365289aac05c8$var$Anchor = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, {
32874 1: {
32875 xCoordinate: ($parcel$interopDefault($lzfo4$restructure)).int16,
32876 yCoordinate: ($parcel$interopDefault($lzfo4$restructure)).int16
32877 },
32878 2: {
32879 xCoordinate: ($parcel$interopDefault($lzfo4$restructure)).int16,
32880 yCoordinate: ($parcel$interopDefault($lzfo4$restructure)).int16,
32881 anchorPoint: ($parcel$interopDefault($lzfo4$restructure)).uint16
32882 },
32883 3: {
32884 xCoordinate: ($parcel$interopDefault($lzfo4$restructure)).int16,
32885 yCoordinate: ($parcel$interopDefault($lzfo4$restructure)).int16,
32886 xDeviceTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$8215d14a63d9fb10),
32887 yDeviceTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$8215d14a63d9fb10)
32888 }
32889});
32890let $68e365289aac05c8$var$EntryExitRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32891 entryAnchor: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$Anchor, {
32892 type: 'parent'
32893 }),
32894 exitAnchor: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$Anchor, {
32895 type: 'parent'
32896 })
32897});
32898let $68e365289aac05c8$var$MarkRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
32899 class: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32900 markAnchor: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$Anchor, {
32901 type: 'parent'
32902 })
32903});
32904let $68e365289aac05c8$var$MarkArray = new ($parcel$interopDefault($lzfo4$restructure)).Array($68e365289aac05c8$var$MarkRecord, ($parcel$interopDefault($lzfo4$restructure)).uint16);
32905let $68e365289aac05c8$var$BaseRecord = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$Anchor), (t)=>t.parent.classCount
32906);
32907let $68e365289aac05c8$var$BaseArray = new ($parcel$interopDefault($lzfo4$restructure)).Array($68e365289aac05c8$var$BaseRecord, ($parcel$interopDefault($lzfo4$restructure)).uint16);
32908let $68e365289aac05c8$var$ComponentRecord = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$Anchor), (t)=>t.parent.parent.classCount
32909);
32910let $68e365289aac05c8$var$LigatureAttach = new ($parcel$interopDefault($lzfo4$restructure)).Array($68e365289aac05c8$var$ComponentRecord, ($parcel$interopDefault($lzfo4$restructure)).uint16);
32911let $68e365289aac05c8$var$LigatureArray = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$LigatureAttach), ($parcel$interopDefault($lzfo4$restructure)).uint16);
32912let $68e365289aac05c8$export$73a8cfb19cd43a0f = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct('lookupType', {
32913 1: new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, {
32914 1: {
32915 coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
32916 valueFormat: $68e365289aac05c8$var$ValueFormat,
32917 value: new $68e365289aac05c8$var$ValueRecord()
32918 },
32919 2: {
32920 coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
32921 valueFormat: $68e365289aac05c8$var$ValueFormat,
32922 valueCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32923 values: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(new $68e365289aac05c8$var$ValueRecord(), 'valueCount')
32924 }
32925 }),
32926 2: new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, {
32927 1: {
32928 coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
32929 valueFormat1: $68e365289aac05c8$var$ValueFormat,
32930 valueFormat2: $68e365289aac05c8$var$ValueFormat,
32931 pairSetCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32932 pairSets: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$PairSet), 'pairSetCount')
32933 },
32934 2: {
32935 coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
32936 valueFormat1: $68e365289aac05c8$var$ValueFormat,
32937 valueFormat2: $68e365289aac05c8$var$ValueFormat,
32938 classDef1: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$843d551fbbafef71),
32939 classDef2: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$843d551fbbafef71),
32940 class1Count: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32941 class2Count: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32942 classRecords: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(new ($parcel$interopDefault($lzfo4$restructure)).LazyArray($68e365289aac05c8$var$Class2Record, 'class2Count'), 'class1Count')
32943 }
32944 }),
32945 3: {
32946 format: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32947 coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
32948 entryExitCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32949 entryExitRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($68e365289aac05c8$var$EntryExitRecord, 'entryExitCount')
32950 },
32951 4: {
32952 format: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32953 markCoverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
32954 baseCoverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
32955 classCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32956 markArray: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$MarkArray),
32957 baseArray: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$BaseArray)
32958 },
32959 5: {
32960 format: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32961 markCoverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
32962 ligatureCoverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
32963 classCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32964 markArray: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$MarkArray),
32965 ligatureArray: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$LigatureArray)
32966 },
32967 6: {
32968 format: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32969 mark1Coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
32970 mark2Coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
32971 classCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32972 mark1Array: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$MarkArray),
32973 mark2Array: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $68e365289aac05c8$var$BaseArray)
32974 },
32975 7: $02fa1fdbd31163f6$export$841858b892ce1f4c,
32976 8: $02fa1fdbd31163f6$export$5e6d09e6861162f6,
32977 9: {
32978 posFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32979 lookupType: ($parcel$interopDefault($lzfo4$restructure)).uint16,
32980 extension: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, null)
32981 }
32982});
32983// Fix circular reference
32984$68e365289aac05c8$export$73a8cfb19cd43a0f.versions[9].extension.type = $68e365289aac05c8$export$73a8cfb19cd43a0f;
32985var $68e365289aac05c8$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint32, {
32986 header: {
32987 scriptList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$3e15fc05ce864229),
32988 featureList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$aa18130def4b6cb4),
32989 lookupList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, new $02fa1fdbd31163f6$export$df0008c6ff2da22a($68e365289aac05c8$export$73a8cfb19cd43a0f))
32990 },
32991 0x00010000: {},
32992 0x00010001: {
32993 featureVariations: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f7d48077c0582beb$export$441b70b7971dd419)
32994 }
32995});
32996
32997
32998
32999
33000
33001let $1303c4861d36d148$var$Sequence = new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, ($parcel$interopDefault($lzfo4$restructure)).uint16);
33002let $1303c4861d36d148$var$AlternateSet = $1303c4861d36d148$var$Sequence;
33003let $1303c4861d36d148$var$Ligature = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33004 glyph: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33005 compCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33006 components: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, (t)=>t.compCount - 1
33007 )
33008});
33009let $1303c4861d36d148$var$LigatureSet = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $1303c4861d36d148$var$Ligature), ($parcel$interopDefault($lzfo4$restructure)).uint16);
33010let $1303c4861d36d148$var$GSUBLookup = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct('lookupType', {
33011 1: new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, {
33012 1: {
33013 coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
33014 deltaGlyphID: ($parcel$interopDefault($lzfo4$restructure)).int16
33015 },
33016 2: {
33017 coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
33018 glyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33019 substitute: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).uint16, 'glyphCount')
33020 }
33021 }),
33022 2: {
33023 substFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33024 coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
33025 count: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33026 sequences: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $1303c4861d36d148$var$Sequence), 'count')
33027 },
33028 3: {
33029 substFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33030 coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
33031 count: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33032 alternateSet: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $1303c4861d36d148$var$AlternateSet), 'count')
33033 },
33034 4: {
33035 substFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33036 coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
33037 count: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33038 ligatureSets: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $1303c4861d36d148$var$LigatureSet), 'count')
33039 },
33040 5: $02fa1fdbd31163f6$export$841858b892ce1f4c,
33041 6: $02fa1fdbd31163f6$export$5e6d09e6861162f6,
33042 7: {
33043 substFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33044 lookupType: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33045 extension: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, null)
33046 },
33047 8: {
33048 substFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33049 coverage: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111),
33050 backtrackCoverage: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), 'backtrackGlyphCount'),
33051 lookaheadGlyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33052 lookaheadCoverage: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$17608c3f81a6111), 'lookaheadGlyphCount'),
33053 glyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33054 substitutes: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'glyphCount')
33055 }
33056});
33057// Fix circular reference
33058$1303c4861d36d148$var$GSUBLookup.versions[7].extension.type = $1303c4861d36d148$var$GSUBLookup;
33059var $1303c4861d36d148$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint32, {
33060 header: {
33061 scriptList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$3e15fc05ce864229),
33062 featureList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $02fa1fdbd31163f6$export$aa18130def4b6cb4),
33063 lookupList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, new $02fa1fdbd31163f6$export$df0008c6ff2da22a($1303c4861d36d148$var$GSUBLookup))
33064 },
33065 0x00010000: {},
33066 0x00010001: {
33067 featureVariations: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f7d48077c0582beb$export$441b70b7971dd419)
33068 }
33069});
33070
33071
33072
33073
33074
33075let $a27d24eee1e03991$var$JstfGSUBModList = new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, ($parcel$interopDefault($lzfo4$restructure)).uint16);
33076let $a27d24eee1e03991$var$JstfPriority = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33077 shrinkageEnableGSUB: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfGSUBModList),
33078 shrinkageDisableGSUB: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfGSUBModList),
33079 shrinkageEnableGPOS: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfGSUBModList),
33080 shrinkageDisableGPOS: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfGSUBModList),
33081 shrinkageJstfMax: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, new $02fa1fdbd31163f6$export$df0008c6ff2da22a($68e365289aac05c8$export$73a8cfb19cd43a0f)),
33082 extensionEnableGSUB: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfGSUBModList),
33083 extensionDisableGSUB: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfGSUBModList),
33084 extensionEnableGPOS: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfGSUBModList),
33085 extensionDisableGPOS: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfGSUBModList),
33086 extensionJstfMax: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, new $02fa1fdbd31163f6$export$df0008c6ff2da22a($68e365289aac05c8$export$73a8cfb19cd43a0f))
33087});
33088let $a27d24eee1e03991$var$JstfLangSys = new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfPriority), ($parcel$interopDefault($lzfo4$restructure)).uint16);
33089let $a27d24eee1e03991$var$JstfLangSysRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33090 tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4),
33091 jstfLangSys: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfLangSys)
33092});
33093let $a27d24eee1e03991$var$JstfScript = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33094 extenderGlyphs: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, ($parcel$interopDefault($lzfo4$restructure)).uint16)),
33095 defaultLangSys: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfLangSys),
33096 langSysCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33097 langSysRecords: new ($parcel$interopDefault($lzfo4$restructure)).Array($a27d24eee1e03991$var$JstfLangSysRecord, 'langSysCount')
33098});
33099let $a27d24eee1e03991$var$JstfScriptRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33100 tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4),
33101 script: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $a27d24eee1e03991$var$JstfScript, {
33102 type: 'parent'
33103 })
33104});
33105var $a27d24eee1e03991$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33106 version: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33107 scriptCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33108 scriptList: new ($parcel$interopDefault($lzfo4$restructure)).Array($a27d24eee1e03991$var$JstfScriptRecord, 'scriptCount')
33109});
33110
33111
33112
33113
33114
33115// TODO: add this to restructure
33116class $2d882978d51e3645$var$VariableSizeNumber {
33117 decode(stream, parent) {
33118 switch(this.size(0, parent)){
33119 case 1:
33120 return stream.readUInt8();
33121 case 2:
33122 return stream.readUInt16BE();
33123 case 3:
33124 return stream.readUInt24BE();
33125 case 4:
33126 return stream.readUInt32BE();
33127 }
33128 }
33129 size(val, parent) {
33130 return $lzfo4$restructuresrcutilsjs.resolveLength(this._size, null, parent);
33131 }
33132 constructor(size){
33133 this._size = size;
33134 }
33135}
33136let $2d882978d51e3645$var$MapDataEntry = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33137 entry: new $2d882978d51e3645$var$VariableSizeNumber((t)=>((t.parent.entryFormat & 0x0030) >> 4) + 1
33138 ),
33139 outerIndex: (t)=>t.entry >> (t.parent.entryFormat & 0x000F) + 1
33140 ,
33141 innerIndex: (t)=>t.entry & (1 << (t.parent.entryFormat & 0x000F) + 1) - 1
33142});
33143let $2d882978d51e3645$var$DeltaSetIndexMap = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33144 entryFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33145 mapCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33146 mapData: new ($parcel$interopDefault($lzfo4$restructure)).Array($2d882978d51e3645$var$MapDataEntry, 'mapCount')
33147});
33148var $2d882978d51e3645$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33149 majorVersion: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33150 minorVersion: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33151 itemVariationStore: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $f7d48077c0582beb$export$fe1b122a2710f241),
33152 advanceWidthMapping: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $2d882978d51e3645$var$DeltaSetIndexMap),
33153 LSBMapping: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $2d882978d51e3645$var$DeltaSetIndexMap),
33154 RSBMapping: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $2d882978d51e3645$var$DeltaSetIndexMap)
33155});
33156
33157
33158
33159let $116b2de32b06b858$var$Signature = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33160 format: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33161 length: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33162 offset: ($parcel$interopDefault($lzfo4$restructure)).uint32
33163});
33164let $116b2de32b06b858$var$SignatureBlock = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33165 reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16, 2),
33166 cbSignature: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33167 signature: new ($parcel$interopDefault($lzfo4$restructure)).Buffer('cbSignature')
33168});
33169var $116b2de32b06b858$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33170 ulVersion: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33171 usNumSigs: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33172 usFlag: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33173 signatures: new ($parcel$interopDefault($lzfo4$restructure)).Array($116b2de32b06b858$var$Signature, 'usNumSigs'),
33174 signatureBlocks: new ($parcel$interopDefault($lzfo4$restructure)).Array($116b2de32b06b858$var$SignatureBlock, 'usNumSigs')
33175});
33176
33177
33178
33179let $7dc81c3b51e4c43a$var$GaspRange = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33180 rangeMaxPPEM: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33181 rangeGaspBehavior: new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint16, [
33182 'grayscale',
33183 'gridfit',
33184 'symmetricSmoothing',
33185 'symmetricGridfit' // only in version 1, for ClearType
33186 ])
33187});
33188var $7dc81c3b51e4c43a$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33189 version: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33190 numRanges: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33191 gaspRanges: new ($parcel$interopDefault($lzfo4$restructure)).Array($7dc81c3b51e4c43a$var$GaspRange, 'numRanges') // Sorted by ppem
33192});
33193
33194
33195
33196let $5bcc7800bd7e22c5$var$DeviceRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33197 pixelSize: ($parcel$interopDefault($lzfo4$restructure)).uint8,
33198 maximumWidth: ($parcel$interopDefault($lzfo4$restructure)).uint8,
33199 widths: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, (t)=>t.parent.parent.maxp.numGlyphs
33200 )
33201});
33202var // The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes
33203$5bcc7800bd7e22c5$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33204 version: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33205 numRecords: ($parcel$interopDefault($lzfo4$restructure)).int16,
33206 sizeDeviceRecord: ($parcel$interopDefault($lzfo4$restructure)).int32,
33207 records: new ($parcel$interopDefault($lzfo4$restructure)).Array($5bcc7800bd7e22c5$var$DeviceRecord, 'numRecords')
33208});
33209
33210
33211
33212let $21356b986524a925$var$KernPair = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33213 left: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33214 right: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33215 value: ($parcel$interopDefault($lzfo4$restructure)).int16
33216});
33217let $21356b986524a925$var$ClassTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33218 firstGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33219 nGlyphs: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33220 offsets: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'nGlyphs'),
33221 max: (t)=>t.offsets.length && Math.max.apply(Math, t.offsets)
33222});
33223let $21356b986524a925$var$Kern2Array = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33224 off: (t)=>t._startOffset - t.parent.parent._startOffset
33225 ,
33226 len: (t)=>((t.parent.leftTable.max - t.off) / t.parent.rowWidth + 1) * (t.parent.rowWidth / 2)
33227 ,
33228 values: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).int16, 'len')
33229});
33230let $21356b986524a925$var$KernSubtable = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct('format', {
33231 0: {
33232 nPairs: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33233 searchRange: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33234 entrySelector: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33235 rangeShift: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33236 pairs: new ($parcel$interopDefault($lzfo4$restructure)).Array($21356b986524a925$var$KernPair, 'nPairs')
33237 },
33238 2: {
33239 rowWidth: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33240 leftTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $21356b986524a925$var$ClassTable, {
33241 type: 'parent'
33242 }),
33243 rightTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $21356b986524a925$var$ClassTable, {
33244 type: 'parent'
33245 }),
33246 array: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $21356b986524a925$var$Kern2Array, {
33247 type: 'parent'
33248 })
33249 },
33250 3: {
33251 glyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33252 kernValueCount: ($parcel$interopDefault($lzfo4$restructure)).uint8,
33253 leftClassCount: ($parcel$interopDefault($lzfo4$restructure)).uint8,
33254 rightClassCount: ($parcel$interopDefault($lzfo4$restructure)).uint8,
33255 flags: ($parcel$interopDefault($lzfo4$restructure)).uint8,
33256 kernValue: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).int16, 'kernValueCount'),
33257 leftClass: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, 'glyphCount'),
33258 rightClass: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, 'glyphCount'),
33259 kernIndex: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, (t)=>t.leftClassCount * t.rightClassCount
33260 )
33261 }
33262});
33263let $21356b986524a925$var$KernTable = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct('version', {
33264 0: {
33265 subVersion: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33266 length: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33267 format: ($parcel$interopDefault($lzfo4$restructure)).uint8,
33268 coverage: new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint8, [
33269 'horizontal',
33270 'minimum',
33271 'crossStream',
33272 'override' // If set to 1 the value in this table replaces the accumulated value
33273 ]),
33274 subtable: $21356b986524a925$var$KernSubtable,
33275 padding: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint8, (t)=>t.length - t._currentOffset
33276 )
33277 },
33278 1: {
33279 length: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33280 coverage: new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint8, [
33281 null,
33282 null,
33283 null,
33284 null,
33285 null,
33286 'variation',
33287 'crossStream',
33288 'vertical' // Set if table has vertical kerning values
33289 ]),
33290 format: ($parcel$interopDefault($lzfo4$restructure)).uint8,
33291 tupleIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33292 subtable: $21356b986524a925$var$KernSubtable,
33293 padding: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint8, (t)=>t.length - t._currentOffset
33294 )
33295 }
33296});
33297var $21356b986524a925$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, {
33298 0: {
33299 nTables: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33300 tables: new ($parcel$interopDefault($lzfo4$restructure)).Array($21356b986524a925$var$KernTable, 'nTables')
33301 },
33302 1: {
33303 reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16),
33304 nTables: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33305 tables: new ($parcel$interopDefault($lzfo4$restructure)).Array($21356b986524a925$var$KernTable, 'nTables')
33306 }
33307});
33308
33309
33310
33311var // Linear Threshold table
33312// Records the ppem for each glyph at which the scaling becomes linear again,
33313// despite instructions effecting the advance width
33314$c7bc0d0d5cc6d685$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33315 version: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33316 numGlyphs: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33317 yPels: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, 'numGlyphs')
33318});
33319
33320
33321
33322var // PCL 5 Table
33323// NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines
33324$8bee01cf059cb725$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33325 version: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33326 fontNumber: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33327 pitch: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33328 xHeight: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33329 style: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33330 typeFamily: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33331 capHeight: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33332 symbolSet: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33333 typeface: new ($parcel$interopDefault($lzfo4$restructure)).String(16),
33334 characterComplement: new ($parcel$interopDefault($lzfo4$restructure)).String(8),
33335 fileName: new ($parcel$interopDefault($lzfo4$restructure)).String(6),
33336 strokeWeight: new ($parcel$interopDefault($lzfo4$restructure)).String(1),
33337 widthType: new ($parcel$interopDefault($lzfo4$restructure)).String(1),
33338 serifStyle: ($parcel$interopDefault($lzfo4$restructure)).uint8,
33339 reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint8)
33340});
33341
33342
33343
33344// VDMX tables contain ascender/descender overrides for certain (usually small)
33345// sizes. This is needed in order to match font metrics on Windows.
33346let $fcf1a0f1b278e42d$var$Ratio = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33347 bCharSet: ($parcel$interopDefault($lzfo4$restructure)).uint8,
33348 xRatio: ($parcel$interopDefault($lzfo4$restructure)).uint8,
33349 yStartRatio: ($parcel$interopDefault($lzfo4$restructure)).uint8,
33350 yEndRatio: ($parcel$interopDefault($lzfo4$restructure)).uint8 // Ending y-Ratio value
33351});
33352let $fcf1a0f1b278e42d$var$vTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33353 yPelHeight: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33354 yMax: ($parcel$interopDefault($lzfo4$restructure)).int16,
33355 yMin: ($parcel$interopDefault($lzfo4$restructure)).int16 // Minimum value (in pels) for this yPelHeight
33356});
33357let $fcf1a0f1b278e42d$var$VdmxGroup = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33358 recs: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33359 startsz: ($parcel$interopDefault($lzfo4$restructure)).uint8,
33360 endsz: ($parcel$interopDefault($lzfo4$restructure)).uint8,
33361 entries: new ($parcel$interopDefault($lzfo4$restructure)).Array($fcf1a0f1b278e42d$var$vTable, 'recs') // The VDMX records
33362});
33363var $fcf1a0f1b278e42d$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33364 version: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33365 numRecs: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33366 numRatios: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33367 ratioRanges: new ($parcel$interopDefault($lzfo4$restructure)).Array($fcf1a0f1b278e42d$var$Ratio, 'numRatios'),
33368 offsets: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'numRatios'),
33369 groups: new ($parcel$interopDefault($lzfo4$restructure)).Array($fcf1a0f1b278e42d$var$VdmxGroup, 'numRecs') // The actual VDMX groupings
33370});
33371
33372
33373
33374var // Vertical Header Table
33375$6b7dea390387f6ff$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33376 version: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33377 ascent: ($parcel$interopDefault($lzfo4$restructure)).int16,
33378 descent: ($parcel$interopDefault($lzfo4$restructure)).int16,
33379 lineGap: ($parcel$interopDefault($lzfo4$restructure)).int16,
33380 advanceHeightMax: ($parcel$interopDefault($lzfo4$restructure)).int16,
33381 minTopSideBearing: ($parcel$interopDefault($lzfo4$restructure)).int16,
33382 minBottomSideBearing: ($parcel$interopDefault($lzfo4$restructure)).int16,
33383 yMaxExtent: ($parcel$interopDefault($lzfo4$restructure)).int16,
33384 caretSlopeRise: ($parcel$interopDefault($lzfo4$restructure)).int16,
33385 caretSlopeRun: ($parcel$interopDefault($lzfo4$restructure)).int16,
33386 caretOffset: ($parcel$interopDefault($lzfo4$restructure)).int16,
33387 reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).int16, 4),
33388 metricDataFormat: ($parcel$interopDefault($lzfo4$restructure)).int16,
33389 numberOfMetrics: ($parcel$interopDefault($lzfo4$restructure)).uint16 // Number of advance heights in the Vertical Metrics table
33390});
33391
33392
33393
33394let $1cd1ccbdfeff8d2f$var$VmtxEntry = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33395 advance: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33396 bearing: ($parcel$interopDefault($lzfo4$restructure)).int16 // The top sidebearing of the glyph
33397});
33398var // Vertical Metrics Table
33399$1cd1ccbdfeff8d2f$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33400 metrics: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray($1cd1ccbdfeff8d2f$var$VmtxEntry, (t)=>t.parent.vhea.numberOfMetrics
33401 ),
33402 bearings: new ($parcel$interopDefault($lzfo4$restructure)).LazyArray(($parcel$interopDefault($lzfo4$restructure)).int16, (t)=>t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics
33403 )
33404});
33405
33406
33407
33408let $2b61ce22494b8a7d$var$shortFrac = new ($parcel$interopDefault($lzfo4$restructure)).Fixed(16, 'BE', 14);
33409let $2b61ce22494b8a7d$var$Correspondence = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33410 fromCoord: $2b61ce22494b8a7d$var$shortFrac,
33411 toCoord: $2b61ce22494b8a7d$var$shortFrac
33412});
33413let $2b61ce22494b8a7d$var$Segment = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33414 pairCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33415 correspondence: new ($parcel$interopDefault($lzfo4$restructure)).Array($2b61ce22494b8a7d$var$Correspondence, 'pairCount')
33416});
33417var $2b61ce22494b8a7d$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33418 version: ($parcel$interopDefault($lzfo4$restructure)).fixed32,
33419 axisCount: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33420 segment: new ($parcel$interopDefault($lzfo4$restructure)).Array($2b61ce22494b8a7d$var$Segment, 'axisCount')
33421});
33422
33423
33424
33425
33426class $ad5453f9e5579f22$var$UnboundedArrayAccessor {
33427 getItem(index) {
33428 if (this._items[index] == null) {
33429 let pos = this.stream.pos;
33430 this.stream.pos = this.base + this.type.size(null, this.parent) * index;
33431 this._items[index] = this.type.decode(this.stream, this.parent);
33432 this.stream.pos = pos;
33433 }
33434 return this._items[index];
33435 }
33436 inspect() {
33437 return `[UnboundedArray ${this.type.constructor.name}]`;
33438 }
33439 constructor(type, stream, parent){
33440 this.type = type;
33441 this.stream = stream;
33442 this.parent = parent;
33443 this.base = this.stream.pos;
33444 this._items = [];
33445 }
33446}
33447class $ad5453f9e5579f22$export$c5af1eebc882e39a extends ($parcel$interopDefault($lzfo4$restructure)).Array {
33448 decode(stream, parent) {
33449 return new $ad5453f9e5579f22$var$UnboundedArrayAccessor(this.type, stream, parent);
33450 }
33451 constructor(type){
33452 super(type, 0);
33453 }
33454}
33455let $ad5453f9e5579f22$export$8351f8c2ae2f103c = function(ValueType = ($parcel$interopDefault($lzfo4$restructure)).uint16) {
33456 // Helper class that makes internal structures invisible to pointers
33457 class Shadow {
33458 decode(stream, ctx) {
33459 ctx = ctx.parent.parent;
33460 return this.type.decode(stream, ctx);
33461 }
33462 size(val, ctx) {
33463 ctx = ctx.parent.parent;
33464 return this.type.size(val, ctx);
33465 }
33466 encode(stream, val, ctx) {
33467 ctx = ctx.parent.parent;
33468 return this.type.encode(stream, val, ctx);
33469 }
33470 constructor(type){
33471 this.type = type;
33472 }
33473 }
33474 ValueType = new Shadow(ValueType);
33475 let BinarySearchHeader = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33476 unitSize: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33477 nUnits: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33478 searchRange: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33479 entrySelector: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33480 rangeShift: ($parcel$interopDefault($lzfo4$restructure)).uint16
33481 });
33482 let LookupSegmentSingle = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33483 lastGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33484 firstGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33485 value: ValueType
33486 });
33487 let LookupSegmentArray = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33488 lastGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33489 firstGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33490 values: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, new ($parcel$interopDefault($lzfo4$restructure)).Array(ValueType, (t)=>t.lastGlyph - t.firstGlyph + 1
33491 ), {
33492 type: 'parent'
33493 })
33494 });
33495 let LookupSingle = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33496 glyph: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33497 value: ValueType
33498 });
33499 return new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint16, {
33500 0: {
33501 values: new $ad5453f9e5579f22$export$c5af1eebc882e39a(ValueType) // length == number of glyphs maybe?
33502 },
33503 2: {
33504 binarySearchHeader: BinarySearchHeader,
33505 segments: new ($parcel$interopDefault($lzfo4$restructure)).Array(LookupSegmentSingle, (t)=>t.binarySearchHeader.nUnits
33506 )
33507 },
33508 4: {
33509 binarySearchHeader: BinarySearchHeader,
33510 segments: new ($parcel$interopDefault($lzfo4$restructure)).Array(LookupSegmentArray, (t)=>t.binarySearchHeader.nUnits
33511 )
33512 },
33513 6: {
33514 binarySearchHeader: BinarySearchHeader,
33515 segments: new ($parcel$interopDefault($lzfo4$restructure)).Array(LookupSingle, (t)=>t.binarySearchHeader.nUnits
33516 )
33517 },
33518 8: {
33519 firstGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33520 count: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33521 values: new ($parcel$interopDefault($lzfo4$restructure)).Array(ValueType, 'count')
33522 }
33523 });
33524};
33525function $ad5453f9e5579f22$export$79f7d93d790934ba(entryData = {}, lookupType = ($parcel$interopDefault($lzfo4$restructure)).uint16) {
33526 let entry = Object.assign({
33527 newState: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33528 flags: ($parcel$interopDefault($lzfo4$restructure)).uint16
33529 }, entryData);
33530 let Entry = new ($parcel$interopDefault($lzfo4$restructure)).Struct(entry);
33531 let StateArray = new $ad5453f9e5579f22$export$c5af1eebc882e39a(new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, (t)=>t.nClasses
33532 ));
33533 let StateHeader = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33534 nClasses: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33535 classTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new $ad5453f9e5579f22$export$8351f8c2ae2f103c(lookupType)),
33536 stateArray: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, StateArray),
33537 entryTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new $ad5453f9e5579f22$export$c5af1eebc882e39a(Entry))
33538 });
33539 return StateHeader;
33540}
33541function $ad5453f9e5579f22$export$105027425199cc51(entryData = {}, lookupType = ($parcel$interopDefault($lzfo4$restructure)).uint16) {
33542 let ClassLookupTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33543 version () {
33544 return 8;
33545 },
33546 firstGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33547 values: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, ($parcel$interopDefault($lzfo4$restructure)).uint16)
33548 });
33549 let entry = Object.assign({
33550 newStateOffset: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33551 // convert offset to stateArray index
33552 newState: (t)=>(t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses
33553 ,
33554 flags: ($parcel$interopDefault($lzfo4$restructure)).uint16
33555 }, entryData);
33556 let Entry = new ($parcel$interopDefault($lzfo4$restructure)).Struct(entry);
33557 let StateArray = new $ad5453f9e5579f22$export$c5af1eebc882e39a(new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, (t)=>t.nClasses
33558 ));
33559 let StateHeader1 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33560 nClasses: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33561 classTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, ClassLookupTable),
33562 stateArray: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, StateArray),
33563 entryTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, new $ad5453f9e5579f22$export$c5af1eebc882e39a(Entry))
33564 });
33565 return StateHeader1;
33566}
33567
33568
33569let $d96812815f65600e$var$BslnSubtable = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct('format', {
33570 0: {
33571 deltas: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).int16, 32)
33572 },
33573 1: {
33574 deltas: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).int16, 32),
33575 mappingData: new $ad5453f9e5579f22$export$8351f8c2ae2f103c(($parcel$interopDefault($lzfo4$restructure)).uint16)
33576 },
33577 2: {
33578 standardGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33579 controlPoints: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 32)
33580 },
33581 3: {
33582 standardGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33583 controlPoints: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 32),
33584 mappingData: new $ad5453f9e5579f22$export$8351f8c2ae2f103c(($parcel$interopDefault($lzfo4$restructure)).uint16)
33585 }
33586});
33587var $d96812815f65600e$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33588 version: ($parcel$interopDefault($lzfo4$restructure)).fixed32,
33589 format: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33590 defaultBaseline: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33591 subtable: $d96812815f65600e$var$BslnSubtable
33592});
33593
33594
33595
33596let $03d9c1eb48643b7a$var$Setting = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33597 setting: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33598 nameIndex: ($parcel$interopDefault($lzfo4$restructure)).int16,
33599 name: (t)=>t.parent.parent.parent.name.records.fontFeatures[t.nameIndex]
33600});
33601let $03d9c1eb48643b7a$var$FeatureName = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33602 feature: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33603 nSettings: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33604 settingTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new ($parcel$interopDefault($lzfo4$restructure)).Array($03d9c1eb48643b7a$var$Setting, 'nSettings'), {
33605 type: 'parent'
33606 }),
33607 featureFlags: new ($parcel$interopDefault($lzfo4$restructure)).Bitfield(($parcel$interopDefault($lzfo4$restructure)).uint8, [
33608 null,
33609 null,
33610 null,
33611 null,
33612 null,
33613 null,
33614 'hasDefault',
33615 'exclusive'
33616 ]),
33617 defaultSetting: ($parcel$interopDefault($lzfo4$restructure)).uint8,
33618 nameIndex: ($parcel$interopDefault($lzfo4$restructure)).int16,
33619 name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameIndex]
33620});
33621var $03d9c1eb48643b7a$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33622 version: ($parcel$interopDefault($lzfo4$restructure)).fixed32,
33623 featureNameCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33624 reserved1: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16),
33625 reserved2: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint32),
33626 featureNames: new ($parcel$interopDefault($lzfo4$restructure)).Array($03d9c1eb48643b7a$var$FeatureName, 'featureNameCount')
33627});
33628
33629
33630
33631let $2db446770962f79d$var$Axis = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33632 axisTag: new ($parcel$interopDefault($lzfo4$restructure)).String(4),
33633 minValue: ($parcel$interopDefault($lzfo4$restructure)).fixed32,
33634 defaultValue: ($parcel$interopDefault($lzfo4$restructure)).fixed32,
33635 maxValue: ($parcel$interopDefault($lzfo4$restructure)).fixed32,
33636 flags: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33637 nameID: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33638 name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameID]
33639});
33640let $2db446770962f79d$var$Instance = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33641 nameID: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33642 name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameID]
33643 ,
33644 flags: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33645 coord: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).fixed32, (t)=>t.parent.axisCount
33646 ),
33647 postscriptNameID: new ($parcel$interopDefault($lzfo4$restructure)).Optional(($parcel$interopDefault($lzfo4$restructure)).uint16, (t)=>t.parent.instanceSize - t._currentOffset > 0
33648 )
33649});
33650var $2db446770962f79d$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33651 version: ($parcel$interopDefault($lzfo4$restructure)).fixed32,
33652 offsetToData: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33653 countSizePairs: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33654 axisCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33655 axisSize: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33656 instanceCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33657 instanceSize: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33658 axis: new ($parcel$interopDefault($lzfo4$restructure)).Array($2db446770962f79d$var$Axis, 'axisCount'),
33659 instance: new ($parcel$interopDefault($lzfo4$restructure)).Array($2db446770962f79d$var$Instance, 'instanceCount')
33660});
33661
33662
33663
33664let $9b2a13e02edeea86$var$shortFrac = new ($parcel$interopDefault($lzfo4$restructure)).Fixed(16, 'BE', 14);
33665class $9b2a13e02edeea86$var$Offset {
33666 static decode(stream, parent) {
33667 // In short format, offsets are multiplied by 2.
33668 // This doesn't seem to be documented by Apple, but it
33669 // is implemented this way in Freetype.
33670 return parent.flags ? stream.readUInt32BE() : stream.readUInt16BE() * 2;
33671 }
33672}
33673let $9b2a13e02edeea86$var$gvar = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33674 version: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33675 reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16),
33676 axisCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33677 globalCoordCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33678 globalCoords: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Array($9b2a13e02edeea86$var$shortFrac, 'axisCount'), 'globalCoordCount')),
33679 glyphCount: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33680 flags: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33681 offsetToData: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33682 offsets: new ($parcel$interopDefault($lzfo4$restructure)).Array(new ($parcel$interopDefault($lzfo4$restructure)).Pointer($9b2a13e02edeea86$var$Offset, 'void', {
33683 relativeTo: (ctx)=>ctx.offsetToData
33684 ,
33685 allowNull: false
33686 }), (t)=>t.glyphCount + 1
33687 )
33688});
33689var $9b2a13e02edeea86$export$2e2bcd8739ae039 = $9b2a13e02edeea86$var$gvar;
33690
33691
33692
33693
33694let $e59e1b842b4890cf$var$ClassTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33695 length: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33696 coverage: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33697 subFeatureFlags: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33698 stateTable: new $ad5453f9e5579f22$export$105027425199cc51
33699});
33700let $e59e1b842b4890cf$var$WidthDeltaRecord = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33701 justClass: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33702 beforeGrowLimit: ($parcel$interopDefault($lzfo4$restructure)).fixed32,
33703 beforeShrinkLimit: ($parcel$interopDefault($lzfo4$restructure)).fixed32,
33704 afterGrowLimit: ($parcel$interopDefault($lzfo4$restructure)).fixed32,
33705 afterShrinkLimit: ($parcel$interopDefault($lzfo4$restructure)).fixed32,
33706 growFlags: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33707 shrinkFlags: ($parcel$interopDefault($lzfo4$restructure)).uint16
33708});
33709let $e59e1b842b4890cf$var$WidthDeltaCluster = new ($parcel$interopDefault($lzfo4$restructure)).Array($e59e1b842b4890cf$var$WidthDeltaRecord, ($parcel$interopDefault($lzfo4$restructure)).uint32);
33710let $e59e1b842b4890cf$var$ActionData = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct('actionType', {
33711 0: {
33712 lowerLimit: ($parcel$interopDefault($lzfo4$restructure)).fixed32,
33713 upperLimit: ($parcel$interopDefault($lzfo4$restructure)).fixed32,
33714 order: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33715 glyphs: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, ($parcel$interopDefault($lzfo4$restructure)).uint16)
33716 },
33717 1: {
33718 addGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16
33719 },
33720 2: {
33721 substThreshold: ($parcel$interopDefault($lzfo4$restructure)).fixed32,
33722 addGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33723 substGlyph: ($parcel$interopDefault($lzfo4$restructure)).uint16
33724 },
33725 3: {},
33726 4: {
33727 variationAxis: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33728 minimumLimit: ($parcel$interopDefault($lzfo4$restructure)).fixed32,
33729 noStretchValue: ($parcel$interopDefault($lzfo4$restructure)).fixed32,
33730 maximumLimit: ($parcel$interopDefault($lzfo4$restructure)).fixed32
33731 },
33732 5: {
33733 flags: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33734 glyph: ($parcel$interopDefault($lzfo4$restructure)).uint16
33735 }
33736});
33737let $e59e1b842b4890cf$var$Action = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33738 actionClass: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33739 actionType: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33740 actionLength: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33741 actionData: $e59e1b842b4890cf$var$ActionData,
33742 padding: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint8, (t)=>t.actionLength - t._currentOffset
33743 )
33744});
33745let $e59e1b842b4890cf$var$PostcompensationAction = new ($parcel$interopDefault($lzfo4$restructure)).Array($e59e1b842b4890cf$var$Action, ($parcel$interopDefault($lzfo4$restructure)).uint32);
33746let $e59e1b842b4890cf$var$PostCompensationTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33747 lookupTable: new $ad5453f9e5579f22$export$8351f8c2ae2f103c(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e59e1b842b4890cf$var$PostcompensationAction))
33748});
33749let $e59e1b842b4890cf$var$JustificationTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33750 classTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e59e1b842b4890cf$var$ClassTable, {
33751 type: 'parent'
33752 }),
33753 wdcOffset: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33754 postCompensationTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e59e1b842b4890cf$var$PostCompensationTable, {
33755 type: 'parent'
33756 }),
33757 widthDeltaClusters: new $ad5453f9e5579f22$export$8351f8c2ae2f103c(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e59e1b842b4890cf$var$WidthDeltaCluster, {
33758 type: 'parent',
33759 relativeTo: (ctx)=>ctx.wdcOffset
33760 }))
33761});
33762var $e59e1b842b4890cf$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33763 version: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33764 format: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33765 horizontal: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e59e1b842b4890cf$var$JustificationTable),
33766 vertical: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $e59e1b842b4890cf$var$JustificationTable)
33767});
33768
33769
33770
33771
33772let $06adb7326c86c9e4$var$LigatureData = {
33773 action: ($parcel$interopDefault($lzfo4$restructure)).uint16
33774};
33775let $06adb7326c86c9e4$var$ContextualData = {
33776 markIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33777 currentIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16
33778};
33779let $06adb7326c86c9e4$var$InsertionData = {
33780 currentInsertIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33781 markedInsertIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16
33782};
33783let $06adb7326c86c9e4$var$SubstitutionTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33784 items: new $ad5453f9e5579f22$export$c5af1eebc882e39a(new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new $ad5453f9e5579f22$export$8351f8c2ae2f103c))
33785});
33786let $06adb7326c86c9e4$var$SubtableData = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct('type', {
33787 0: {
33788 stateTable: new $ad5453f9e5579f22$export$79f7d93d790934ba
33789 },
33790 1: {
33791 stateTable: new $ad5453f9e5579f22$export$79f7d93d790934ba($06adb7326c86c9e4$var$ContextualData),
33792 substitutionTable: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $06adb7326c86c9e4$var$SubstitutionTable)
33793 },
33794 2: {
33795 stateTable: new $ad5453f9e5579f22$export$79f7d93d790934ba($06adb7326c86c9e4$var$LigatureData),
33796 ligatureActions: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new $ad5453f9e5579f22$export$c5af1eebc882e39a(($parcel$interopDefault($lzfo4$restructure)).uint32)),
33797 components: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new $ad5453f9e5579f22$export$c5af1eebc882e39a(($parcel$interopDefault($lzfo4$restructure)).uint16)),
33798 ligatureList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new $ad5453f9e5579f22$export$c5af1eebc882e39a(($parcel$interopDefault($lzfo4$restructure)).uint16))
33799 },
33800 4: {
33801 lookupTable: new $ad5453f9e5579f22$export$8351f8c2ae2f103c
33802 },
33803 5: {
33804 stateTable: new $ad5453f9e5579f22$export$79f7d93d790934ba($06adb7326c86c9e4$var$InsertionData),
33805 insertionActions: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, new $ad5453f9e5579f22$export$c5af1eebc882e39a(($parcel$interopDefault($lzfo4$restructure)).uint16))
33806 }
33807});
33808let $06adb7326c86c9e4$var$Subtable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33809 length: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33810 coverage: ($parcel$interopDefault($lzfo4$restructure)).uint24,
33811 type: ($parcel$interopDefault($lzfo4$restructure)).uint8,
33812 subFeatureFlags: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33813 table: $06adb7326c86c9e4$var$SubtableData,
33814 padding: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint8, (t)=>t.length - t._currentOffset
33815 )
33816});
33817let $06adb7326c86c9e4$var$FeatureEntry = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33818 featureType: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33819 featureSetting: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33820 enableFlags: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33821 disableFlags: ($parcel$interopDefault($lzfo4$restructure)).uint32
33822});
33823let $06adb7326c86c9e4$var$MorxChain = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33824 defaultFlags: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33825 chainLength: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33826 nFeatureEntries: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33827 nSubtables: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33828 features: new ($parcel$interopDefault($lzfo4$restructure)).Array($06adb7326c86c9e4$var$FeatureEntry, 'nFeatureEntries'),
33829 subtables: new ($parcel$interopDefault($lzfo4$restructure)).Array($06adb7326c86c9e4$var$Subtable, 'nSubtables')
33830});
33831var $06adb7326c86c9e4$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33832 version: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33833 unused: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16),
33834 nChains: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33835 chains: new ($parcel$interopDefault($lzfo4$restructure)).Array($06adb7326c86c9e4$var$MorxChain, 'nChains')
33836});
33837
33838
33839
33840
33841let $7c2349d24ed9a62f$var$OpticalBounds = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33842 left: ($parcel$interopDefault($lzfo4$restructure)).int16,
33843 top: ($parcel$interopDefault($lzfo4$restructure)).int16,
33844 right: ($parcel$interopDefault($lzfo4$restructure)).int16,
33845 bottom: ($parcel$interopDefault($lzfo4$restructure)).int16
33846});
33847var $7c2349d24ed9a62f$export$2e2bcd8739ae039 = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33848 version: ($parcel$interopDefault($lzfo4$restructure)).fixed32,
33849 format: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33850 lookupTable: new $ad5453f9e5579f22$export$8351f8c2ae2f103c($7c2349d24ed9a62f$var$OpticalBounds)
33851});
33852
33853
33854let $6cd727f8bf15b50a$var$tables = {};
33855var $6cd727f8bf15b50a$export$2e2bcd8739ae039 = $6cd727f8bf15b50a$var$tables;
33856$6cd727f8bf15b50a$var$tables.cmap = $f6569fe31dc9e2a4$export$2e2bcd8739ae039;
33857$6cd727f8bf15b50a$var$tables.head = $e1b51afd73796719$export$2e2bcd8739ae039;
33858$6cd727f8bf15b50a$var$tables.hhea = $af15e8c2ca202685$export$2e2bcd8739ae039;
33859$6cd727f8bf15b50a$var$tables.hmtx = $cbee70d452c87a2f$export$2e2bcd8739ae039;
33860$6cd727f8bf15b50a$var$tables.maxp = $62b43947ebb31537$export$2e2bcd8739ae039;
33861$6cd727f8bf15b50a$var$tables.name = $7cfee716e27b503e$export$2e2bcd8739ae039;
33862$6cd727f8bf15b50a$var$tables['OS/2'] = $5e9fda50085d9beb$export$2e2bcd8739ae039;
33863$6cd727f8bf15b50a$var$tables.post = $8fb96ffb3c5b1cd6$export$2e2bcd8739ae039;
33864$6cd727f8bf15b50a$var$tables.fpgm = $2b37abe4b96e3c42$export$2e2bcd8739ae039;
33865$6cd727f8bf15b50a$var$tables.loca = $8cebe4fe43d5c208$export$2e2bcd8739ae039;
33866$6cd727f8bf15b50a$var$tables.prep = $75c86c4a9179fd24$export$2e2bcd8739ae039;
33867$6cd727f8bf15b50a$var$tables['cvt '] = $e85635aafda425ab$export$2e2bcd8739ae039;
33868$6cd727f8bf15b50a$var$tables.glyf = $1edb604f0b10eb6a$export$2e2bcd8739ae039;
33869$6cd727f8bf15b50a$var$tables['CFF '] = $af4e76a81d73e13e$export$2e2bcd8739ae039;
33870$6cd727f8bf15b50a$var$tables['CFF2'] = $af4e76a81d73e13e$export$2e2bcd8739ae039;
33871$6cd727f8bf15b50a$var$tables.VORG = $a037a9ab8e35d2e2$export$2e2bcd8739ae039;
33872$6cd727f8bf15b50a$var$tables.EBLC = $415d3f0073d22090$export$2e2bcd8739ae039;
33873$6cd727f8bf15b50a$var$tables.CBLC = $6cd727f8bf15b50a$var$tables.EBLC;
33874$6cd727f8bf15b50a$var$tables.sbix = $95fc167908565fc1$export$2e2bcd8739ae039;
33875$6cd727f8bf15b50a$var$tables.COLR = $ee5a058727c0db64$export$2e2bcd8739ae039;
33876$6cd727f8bf15b50a$var$tables.CPAL = $23ee004c2c56be61$export$2e2bcd8739ae039;
33877$6cd727f8bf15b50a$var$tables.BASE = $4745757aab3ee679$export$2e2bcd8739ae039;
33878$6cd727f8bf15b50a$var$tables.GDEF = $e587dbe605efb582$export$2e2bcd8739ae039;
33879$6cd727f8bf15b50a$var$tables.GPOS = $68e365289aac05c8$export$2e2bcd8739ae039;
33880$6cd727f8bf15b50a$var$tables.GSUB = $1303c4861d36d148$export$2e2bcd8739ae039;
33881$6cd727f8bf15b50a$var$tables.JSTF = $a27d24eee1e03991$export$2e2bcd8739ae039;
33882$6cd727f8bf15b50a$var$tables.HVAR = $2d882978d51e3645$export$2e2bcd8739ae039;
33883$6cd727f8bf15b50a$var$tables.DSIG = $116b2de32b06b858$export$2e2bcd8739ae039;
33884$6cd727f8bf15b50a$var$tables.gasp = $7dc81c3b51e4c43a$export$2e2bcd8739ae039;
33885$6cd727f8bf15b50a$var$tables.hdmx = $5bcc7800bd7e22c5$export$2e2bcd8739ae039;
33886$6cd727f8bf15b50a$var$tables.kern = $21356b986524a925$export$2e2bcd8739ae039;
33887$6cd727f8bf15b50a$var$tables.LTSH = $c7bc0d0d5cc6d685$export$2e2bcd8739ae039;
33888$6cd727f8bf15b50a$var$tables.PCLT = $8bee01cf059cb725$export$2e2bcd8739ae039;
33889$6cd727f8bf15b50a$var$tables.VDMX = $fcf1a0f1b278e42d$export$2e2bcd8739ae039;
33890$6cd727f8bf15b50a$var$tables.vhea = $6b7dea390387f6ff$export$2e2bcd8739ae039;
33891$6cd727f8bf15b50a$var$tables.vmtx = $1cd1ccbdfeff8d2f$export$2e2bcd8739ae039;
33892$6cd727f8bf15b50a$var$tables.avar = $2b61ce22494b8a7d$export$2e2bcd8739ae039;
33893$6cd727f8bf15b50a$var$tables.bsln = $d96812815f65600e$export$2e2bcd8739ae039;
33894$6cd727f8bf15b50a$var$tables.feat = $03d9c1eb48643b7a$export$2e2bcd8739ae039;
33895$6cd727f8bf15b50a$var$tables.fvar = $2db446770962f79d$export$2e2bcd8739ae039;
33896$6cd727f8bf15b50a$var$tables.gvar = $9b2a13e02edeea86$export$2e2bcd8739ae039;
33897$6cd727f8bf15b50a$var$tables.just = $e59e1b842b4890cf$export$2e2bcd8739ae039;
33898$6cd727f8bf15b50a$var$tables.morx = $06adb7326c86c9e4$export$2e2bcd8739ae039;
33899$6cd727f8bf15b50a$var$tables.opbd = $7c2349d24ed9a62f$export$2e2bcd8739ae039;
33900
33901
33902let $58b5e8ab8241ced9$var$TableEntry = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33903 tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4),
33904 checkSum: ($parcel$interopDefault($lzfo4$restructure)).uint32,
33905 offset: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, 'void', {
33906 type: 'global'
33907 }),
33908 length: ($parcel$interopDefault($lzfo4$restructure)).uint32
33909});
33910let $58b5e8ab8241ced9$var$Directory = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
33911 tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4),
33912 numTables: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33913 searchRange: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33914 entrySelector: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33915 rangeShift: ($parcel$interopDefault($lzfo4$restructure)).uint16,
33916 tables: new ($parcel$interopDefault($lzfo4$restructure)).Array($58b5e8ab8241ced9$var$TableEntry, 'numTables')
33917});
33918$58b5e8ab8241ced9$var$Directory.process = function() {
33919 let tables = {};
33920 for (let table of this.tables)tables[table.tag] = table;
33921 this.tables = tables;
33922};
33923$58b5e8ab8241ced9$var$Directory.preEncode = function(stream) {
33924 let tables = [];
33925 for(let tag in this.tables){
33926 let table = this.tables[tag];
33927 if (table) tables.push({
33928 tag: tag,
33929 checkSum: 0,
33930 offset: new ($parcel$interopDefault($lzfo4$restructure)).VoidPointer($6cd727f8bf15b50a$export$2e2bcd8739ae039[tag], table),
33931 length: $6cd727f8bf15b50a$export$2e2bcd8739ae039[tag].size(table)
33932 });
33933 }
33934 this.tag = 'true';
33935 this.numTables = tables.length;
33936 this.tables = tables;
33937 let maxExponentFor2 = Math.floor(Math.log(this.numTables) / Math.LN2);
33938 let maxPowerOf2 = Math.pow(2, maxExponentFor2);
33939 this.searchRange = maxPowerOf2 * 16;
33940 this.entrySelector = Math.log(maxPowerOf2) / Math.LN2;
33941 this.rangeShift = this.numTables * 16 - this.searchRange;
33942};
33943var $58b5e8ab8241ced9$export$2e2bcd8739ae039 = $58b5e8ab8241ced9$var$Directory;
33944
33945
33946
33947
33948function $c07919491d3366c0$export$2e0ae67339d5f1ac(arr, cmp) {
33949 let min = 0;
33950 let max = arr.length - 1;
33951 while(min <= max){
33952 let mid = min + max >> 1;
33953 let res = cmp(arr[mid]);
33954 if (res < 0) max = mid - 1;
33955 else if (res > 0) min = mid + 1;
33956 else return mid;
33957 }
33958 return -1;
33959}
33960function $c07919491d3366c0$export$d02631cccf789723(index, end) {
33961 let $c07919491d3366c0$export$d02631cccf789723 = [];
33962 while(index < end)$c07919491d3366c0$export$d02631cccf789723.push(index++);
33963 return $c07919491d3366c0$export$d02631cccf789723;
33964}
33965
33966
33967
33968
33969
33970
33971var _class;
33972let $1be0370b015c0ead$export$2e2bcd8739ae039 = (_class = class $1be0370b015c0ead$export$2e2bcd8739ae039 {
33973 findSubtable(cmapTable, pairs) {
33974 for (let [platformID, encodingID] of pairs)for (let cmap of cmapTable.tables){
33975 if (cmap.platformID === platformID && cmap.encodingID === encodingID) return cmap.table;
33976 }
33977 return null;
33978 }
33979 lookup(codepoint, variationSelector) {
33980 // If there is no Unicode cmap in this font, we need to re-encode
33981 // the codepoint in the encoding that the cmap supports.
33982 if (this.encoding) {
33983 let buf = ($parcel$interopDefault($lzfo4$iconvlitecjs)).encode(String.fromCodePoint(codepoint), this.encoding);
33984 codepoint = 0;
33985 for(let i = 0; i < buf.length; i++)codepoint = codepoint << 8 | buf[i];
33986 // Otherwise, try to get a Unicode variation selector for this codepoint if one is provided.
33987 } else if (variationSelector) {
33988 let gid = this.getVariationSelector(codepoint, variationSelector);
33989 if (gid) return gid;
33990 }
33991 let cmap = this.cmap;
33992 switch(cmap.version){
33993 case 0:
33994 return cmap.codeMap.get(codepoint) || 0;
33995 case 4:
33996 {
33997 let min = 0;
33998 let max = cmap.segCount - 1;
33999 while(min <= max){
34000 let mid = min + max >> 1;
34001 if (codepoint < cmap.startCode.get(mid)) max = mid - 1;
34002 else if (codepoint > cmap.endCode.get(mid)) min = mid + 1;
34003 else {
34004 let rangeOffset = cmap.idRangeOffset.get(mid);
34005 let gid;
34006 if (rangeOffset === 0) gid = codepoint + cmap.idDelta.get(mid);
34007 else {
34008 let index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid);
34009 gid = cmap.glyphIndexArray.get(index) || 0;
34010 if (gid !== 0) gid += cmap.idDelta.get(mid);
34011 }
34012 return gid & 0xffff;
34013 }
34014 }
34015 return 0;
34016 }
34017 case 8:
34018 throw new Error('TODO: cmap format 8');
34019 case 6:
34020 case 10:
34021 return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0;
34022 case 12:
34023 case 13:
34024 {
34025 let min = 0;
34026 let max = cmap.nGroups - 1;
34027 while(min <= max){
34028 let mid = min + max >> 1;
34029 let group = cmap.groups.get(mid);
34030 if (codepoint < group.startCharCode) max = mid - 1;
34031 else if (codepoint > group.endCharCode) min = mid + 1;
34032 else {
34033 if (cmap.version === 12) return group.glyphID + (codepoint - group.startCharCode);
34034 else return group.glyphID;
34035 }
34036 }
34037 return 0;
34038 }
34039 case 14:
34040 throw new Error('TODO: cmap format 14');
34041 default:
34042 throw new Error(`Unknown cmap format ${cmap.version}`);
34043 }
34044 }
34045 getVariationSelector(codepoint, variationSelector) {
34046 if (!this.uvs) return 0;
34047 let selectors = this.uvs.varSelectors.toArray();
34048 let i = $c07919491d3366c0$export$2e0ae67339d5f1ac(selectors, (x)=>variationSelector - x.varSelector
34049 );
34050 let sel = selectors[i];
34051 if (i !== -1 && sel.defaultUVS) i = $c07919491d3366c0$export$2e0ae67339d5f1ac(sel.defaultUVS, (x)=>codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? 1 : 0
34052 );
34053 if (i !== -1 && sel.nonDefaultUVS) {
34054 i = $c07919491d3366c0$export$2e0ae67339d5f1ac(sel.nonDefaultUVS, (x)=>codepoint - x.unicodeValue
34055 );
34056 if (i !== -1) return sel.nonDefaultUVS[i].glyphID;
34057 }
34058 return 0;
34059 }
34060 getCharacterSet() {
34061 let cmap = this.cmap;
34062 switch(cmap.version){
34063 case 0:
34064 return $c07919491d3366c0$export$d02631cccf789723(0, cmap.codeMap.length);
34065 case 4:
34066 {
34067 let res = [];
34068 let endCodes = cmap.endCode.toArray();
34069 for(let i = 0; i < endCodes.length; i++){
34070 let tail = endCodes[i] + 1;
34071 let start = cmap.startCode.get(i);
34072 res.push(...$c07919491d3366c0$export$d02631cccf789723(start, tail));
34073 }
34074 return res;
34075 }
34076 case 8:
34077 throw new Error('TODO: cmap format 8');
34078 case 6:
34079 case 10:
34080 return $c07919491d3366c0$export$d02631cccf789723(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length);
34081 case 12:
34082 case 13:
34083 {
34084 let res = [];
34085 for (let group of cmap.groups.toArray())res.push(...$c07919491d3366c0$export$d02631cccf789723(group.startCharCode, group.endCharCode + 1));
34086 return res;
34087 }
34088 case 14:
34089 throw new Error('TODO: cmap format 14');
34090 default:
34091 throw new Error(`Unknown cmap format ${cmap.version}`);
34092 }
34093 }
34094 codePointsForGlyph(gid) {
34095 let cmap = this.cmap;
34096 switch(cmap.version){
34097 case 0:
34098 {
34099 let res = [];
34100 for(let i = 0; i < 256; i++)if (cmap.codeMap.get(i) === gid) res.push(i);
34101 return res;
34102 }
34103 case 4:
34104 {
34105 let res = [];
34106 for(let i = 0; i < cmap.segCount; i++){
34107 let end = cmap.endCode.get(i);
34108 let start = cmap.startCode.get(i);
34109 let rangeOffset = cmap.idRangeOffset.get(i);
34110 let delta = cmap.idDelta.get(i);
34111 for(var c = start; c <= end; c++){
34112 let g = 0;
34113 if (rangeOffset === 0) g = c + delta;
34114 else {
34115 let index = rangeOffset / 2 + (c - start) - (cmap.segCount - i);
34116 g = cmap.glyphIndexArray.get(index) || 0;
34117 if (g !== 0) g += delta;
34118 }
34119 if (g === gid) res.push(c);
34120 }
34121 }
34122 return res;
34123 }
34124 case 12:
34125 {
34126 let res = [];
34127 for (let group of cmap.groups.toArray())if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) res.push(group.startCharCode + (gid - group.glyphID));
34128 return res;
34129 }
34130 case 13:
34131 {
34132 let res = [];
34133 for (let group of cmap.groups.toArray())if (gid === group.glyphID) res.push(...$c07919491d3366c0$export$d02631cccf789723(group.startCharCode, group.endCharCode + 1));
34134 return res;
34135 }
34136 default:
34137 throw new Error(`Unknown cmap format ${cmap.version}`);
34138 }
34139 }
34140 constructor(cmapTable){
34141 // Attempt to find a Unicode cmap first
34142 this.encoding = null;
34143 this.cmap = this.findSubtable(cmapTable, [
34144 // 32-bit subtables
34145 [
34146 3,
34147 10
34148 ],
34149 [
34150 0,
34151 6
34152 ],
34153 [
34154 0,
34155 4
34156 ],
34157 // 16-bit subtables
34158 [
34159 3,
34160 1
34161 ],
34162 [
34163 0,
34164 3
34165 ],
34166 [
34167 0,
34168 2
34169 ],
34170 [
34171 0,
34172 1
34173 ],
34174 [
34175 0,
34176 0
34177 ]
34178 ]);
34179 // If not unicode cmap was found, and iconv-lite is installed,
34180 // take the first table with a supported encoding.
34181 if (!this.cmap && ($parcel$interopDefault($lzfo4$iconvlitecjs))) for (let cmap of cmapTable.tables){
34182 let encoding = $d8b54c41212776fe$export$badc544e0651b6b1(cmap.platformID, cmap.encodingID, cmap.table.language - 1);
34183 if (($parcel$interopDefault($lzfo4$iconvlitecjs)).encodingExists(encoding)) {
34184 this.cmap = cmap.table;
34185 this.encoding = encoding;
34186 }
34187 }
34188 if (!this.cmap) throw new Error("Could not find a supported cmap table");
34189 this.uvs = this.findSubtable(cmapTable, [
34190 [
34191 0,
34192 5
34193 ]
34194 ]);
34195 if (this.uvs && this.uvs.version !== 14) this.uvs = null;
34196 }
34197}, $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "getCharacterSet", [
34198 $9ea776e3198edd2e$export$69a3209f1a06c04d
34199], Object.getOwnPropertyDescriptor(_class.prototype, "getCharacterSet"), _class.prototype), $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "codePointsForGlyph", [
34200 $9ea776e3198edd2e$export$69a3209f1a06c04d
34201], Object.getOwnPropertyDescriptor(_class.prototype, "codePointsForGlyph"), _class.prototype), _class);
34202
34203
34204
34205class $392dfa2b44d72edd$export$2e2bcd8739ae039 {
34206 process(glyphs, positions) {
34207 for(let glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++){
34208 let left = glyphs[glyphIndex].id;
34209 let right = glyphs[glyphIndex + 1].id;
34210 positions[glyphIndex].xAdvance += this.getKerning(left, right);
34211 }
34212 }
34213 getKerning(left, right) {
34214 let res = 0;
34215 for (let table of this.kern.tables){
34216 if (table.coverage.crossStream) continue;
34217 switch(table.version){
34218 case 0:
34219 if (!table.coverage.horizontal) continue;
34220 break;
34221 case 1:
34222 if (table.coverage.vertical || table.coverage.variation) continue;
34223 break;
34224 default:
34225 throw new Error(`Unsupported kerning table version ${table.version}`);
34226 }
34227 let val = 0;
34228 let s = table.subtable;
34229 switch(table.format){
34230 case 0:
34231 let pairIdx = $c07919491d3366c0$export$2e0ae67339d5f1ac(s.pairs, function(pair) {
34232 return left - pair.left || right - pair.right;
34233 });
34234 if (pairIdx >= 0) val = s.pairs[pairIdx].value;
34235 break;
34236 case 2:
34237 let leftOffset = 0, rightOffset = 0;
34238 if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph];
34239 else leftOffset = s.array.off;
34240 if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph];
34241 let index = (leftOffset + rightOffset - s.array.off) / 2;
34242 val = s.array.values.get(index);
34243 break;
34244 case 3:
34245 if (left >= s.glyphCount || right >= s.glyphCount) return 0;
34246 val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]];
34247 break;
34248 default:
34249 throw new Error(`Unsupported kerning sub-table format ${table.format}`);
34250 }
34251 // Microsoft supports the override flag, which resets the result
34252 // Otherwise, the sum of the results from all subtables is returned
34253 if (table.coverage.override) res = val;
34254 else res += val;
34255 }
34256 return res;
34257 }
34258 constructor(font){
34259 this.kern = font.kern;
34260 }
34261}
34262
34263
34264
34265class $c2c165353b6a2650$export$2e2bcd8739ae039 {
34266 positionGlyphs(glyphs, positions) {
34267 // find each base + mark cluster, and position the marks relative to the base
34268 let clusterStart = 0;
34269 let clusterEnd = 0;
34270 for(let index = 0; index < glyphs.length; index++){
34271 let glyph = glyphs[index];
34272 if (glyph.isMark) clusterEnd = index;
34273 else {
34274 if (clusterStart !== clusterEnd) this.positionCluster(glyphs, positions, clusterStart, clusterEnd);
34275 clusterStart = clusterEnd = index;
34276 }
34277 }
34278 if (clusterStart !== clusterEnd) this.positionCluster(glyphs, positions, clusterStart, clusterEnd);
34279 return positions;
34280 }
34281 positionCluster(glyphs, positions, clusterStart, clusterEnd) {
34282 let base = glyphs[clusterStart];
34283 let baseBox = base.cbox.copy();
34284 // adjust bounding box for ligature glyphs
34285 if (base.codePoints.length > 1) // LTR. TODO: RTL support.
34286 baseBox.minX += (base.codePoints.length - 1) * baseBox.width / base.codePoints.length;
34287 let xOffset = -positions[clusterStart].xAdvance;
34288 let yOffset = 0;
34289 let yGap = this.font.unitsPerEm / 16;
34290 // position each of the mark glyphs relative to the base glyph
34291 for(let index = clusterStart + 1; index <= clusterEnd; index++){
34292 let mark = glyphs[index];
34293 let markBox = mark.cbox;
34294 let position = positions[index];
34295 let combiningClass = this.getCombiningClass(mark.codePoints[0]);
34296 if (combiningClass !== 'Not_Reordered') {
34297 position.xOffset = position.yOffset = 0;
34298 // x positioning
34299 switch(combiningClass){
34300 case 'Double_Above':
34301 case 'Double_Below':
34302 // LTR. TODO: RTL support.
34303 position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX;
34304 break;
34305 case 'Attached_Below_Left':
34306 case 'Below_Left':
34307 case 'Above_Left':
34308 // left align
34309 position.xOffset += baseBox.minX - markBox.minX;
34310 break;
34311 case 'Attached_Above_Right':
34312 case 'Below_Right':
34313 case 'Above_Right':
34314 // right align
34315 position.xOffset += baseBox.maxX - markBox.width - markBox.minX;
34316 break;
34317 default:
34318 // center align
34319 position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX;
34320 }
34321 // y positioning
34322 switch(combiningClass){
34323 case 'Double_Below':
34324 case 'Below_Left':
34325 case 'Below':
34326 case 'Below_Right':
34327 case 'Attached_Below_Left':
34328 case 'Attached_Below':
34329 // add a small gap between the glyphs if they are not attached
34330 if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') baseBox.minY += yGap;
34331 position.yOffset = -baseBox.minY - markBox.maxY;
34332 baseBox.minY += markBox.height;
34333 break;
34334 case 'Double_Above':
34335 case 'Above_Left':
34336 case 'Above':
34337 case 'Above_Right':
34338 case 'Attached_Above':
34339 case 'Attached_Above_Right':
34340 // add a small gap between the glyphs if they are not attached
34341 if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') baseBox.maxY += yGap;
34342 position.yOffset = baseBox.maxY - markBox.minY;
34343 baseBox.maxY += markBox.height;
34344 break;
34345 }
34346 position.xAdvance = position.yAdvance = 0;
34347 position.xOffset += xOffset;
34348 position.yOffset += yOffset;
34349 } else {
34350 xOffset -= position.xAdvance;
34351 yOffset -= position.yAdvance;
34352 }
34353 }
34354 return;
34355 }
34356 getCombiningClass(codePoint) {
34357 let combiningClass = ($parcel$interopDefault($lzfo4$unicodeproperties)).getCombiningClass(codePoint);
34358 // Thai / Lao need some per-character work
34359 if ((codePoint & -256) === 0x0e00) {
34360 if (combiningClass === 'Not_Reordered') switch(codePoint){
34361 case 0x0e31:
34362 case 0x0e34:
34363 case 0x0e35:
34364 case 0x0e36:
34365 case 0x0e37:
34366 case 0x0e47:
34367 case 0x0e4c:
34368 case 0x0e3d:
34369 case 0x0e4e:
34370 return 'Above_Right';
34371 case 0x0eb1:
34372 case 0x0eb4:
34373 case 0x0eb5:
34374 case 0x0eb6:
34375 case 0x0eb7:
34376 case 0x0ebb:
34377 case 0x0ecc:
34378 case 0x0ecd:
34379 return 'Above';
34380 case 0x0ebc:
34381 return 'Below';
34382 }
34383 else if (codePoint === 0x0e3a) return 'Below_Right';
34384 }
34385 switch(combiningClass){
34386 // Hebrew
34387 case 'CCC10':
34388 case 'CCC11':
34389 case 'CCC12':
34390 case 'CCC13':
34391 case 'CCC14':
34392 case 'CCC15':
34393 case 'CCC16':
34394 case 'CCC17':
34395 case 'CCC18':
34396 case 'CCC20':
34397 case 'CCC22':
34398 return 'Below';
34399 case 'CCC23':
34400 return 'Attached_Above';
34401 case 'CCC24':
34402 return 'Above_Right';
34403 case 'CCC25':
34404 case 'CCC19':
34405 return 'Above_Left';
34406 case 'CCC26':
34407 return 'Above';
34408 case 'CCC21':
34409 break;
34410 // Arabic and Syriac
34411 case 'CCC27':
34412 case 'CCC28':
34413 case 'CCC30':
34414 case 'CCC31':
34415 case 'CCC33':
34416 case 'CCC34':
34417 case 'CCC35':
34418 case 'CCC36':
34419 return 'Above';
34420 case 'CCC29':
34421 case 'CCC32':
34422 return 'Below';
34423 // Thai
34424 case 'CCC103':
34425 return 'Below_Right';
34426 case 'CCC107':
34427 return 'Above_Right';
34428 // Lao
34429 case 'CCC118':
34430 return 'Below';
34431 case 'CCC122':
34432 return 'Above';
34433 // Tibetan
34434 case 'CCC129':
34435 case 'CCC132':
34436 return 'Below';
34437 case 'CCC130':
34438 return 'Above';
34439 }
34440 return combiningClass;
34441 }
34442 constructor(font){
34443 this.font = font;
34444 }
34445}
34446
34447
34448class $6d619c173ebabb82$export$2e2bcd8739ae039 {
34449 /**
34450 * The width of the bounding box
34451 * @type {number}
34452 */ get width() {
34453 return this.maxX - this.minX;
34454 }
34455 /**
34456 * The height of the bounding box
34457 * @type {number}
34458 */ get height() {
34459 return this.maxY - this.minY;
34460 }
34461 addPoint(x, y) {
34462 if (Math.abs(x) !== Infinity) {
34463 if (x < this.minX) this.minX = x;
34464 if (x > this.maxX) this.maxX = x;
34465 }
34466 if (Math.abs(y) !== Infinity) {
34467 if (y < this.minY) this.minY = y;
34468 if (y > this.maxY) this.maxY = y;
34469 }
34470 }
34471 copy() {
34472 return new $6d619c173ebabb82$export$2e2bcd8739ae039(this.minX, this.minY, this.maxX, this.maxY);
34473 }
34474 constructor(minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity){
34475 /**
34476 * The minimum X position in the bounding box
34477 * @type {number}
34478 */ this.minX = minX;
34479 /**
34480 * The minimum Y position in the bounding box
34481 * @type {number}
34482 */ this.minY = minY;
34483 /**
34484 * The maxmimum X position in the bounding box
34485 * @type {number}
34486 */ this.maxX = maxX;
34487 /**
34488 * The maxmimum Y position in the bounding box
34489 * @type {number}
34490 */ this.maxY = maxY;
34491 }
34492}
34493
34494
34495
34496// This maps the Unicode Script property to an OpenType script tag
34497// Data from http://www.microsoft.com/typography/otspec/scripttags.htm
34498// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt.
34499const $2e3a795a88d7e002$var$UNICODE_SCRIPTS = {
34500 Caucasian_Albanian: 'aghb',
34501 Arabic: 'arab',
34502 Imperial_Aramaic: 'armi',
34503 Armenian: 'armn',
34504 Avestan: 'avst',
34505 Balinese: 'bali',
34506 Bamum: 'bamu',
34507 Bassa_Vah: 'bass',
34508 Batak: 'batk',
34509 Bengali: [
34510 'bng2',
34511 'beng'
34512 ],
34513 Bopomofo: 'bopo',
34514 Brahmi: 'brah',
34515 Braille: 'brai',
34516 Buginese: 'bugi',
34517 Buhid: 'buhd',
34518 Chakma: 'cakm',
34519 Canadian_Aboriginal: 'cans',
34520 Carian: 'cari',
34521 Cham: 'cham',
34522 Cherokee: 'cher',
34523 Coptic: 'copt',
34524 Cypriot: 'cprt',
34525 Cyrillic: 'cyrl',
34526 Devanagari: [
34527 'dev2',
34528 'deva'
34529 ],
34530 Deseret: 'dsrt',
34531 Duployan: 'dupl',
34532 Egyptian_Hieroglyphs: 'egyp',
34533 Elbasan: 'elba',
34534 Ethiopic: 'ethi',
34535 Georgian: 'geor',
34536 Glagolitic: 'glag',
34537 Gothic: 'goth',
34538 Grantha: 'gran',
34539 Greek: 'grek',
34540 Gujarati: [
34541 'gjr2',
34542 'gujr'
34543 ],
34544 Gurmukhi: [
34545 'gur2',
34546 'guru'
34547 ],
34548 Hangul: 'hang',
34549 Han: 'hani',
34550 Hanunoo: 'hano',
34551 Hebrew: 'hebr',
34552 Hiragana: 'hira',
34553 Pahawh_Hmong: 'hmng',
34554 Katakana_Or_Hiragana: 'hrkt',
34555 Old_Italic: 'ital',
34556 Javanese: 'java',
34557 Kayah_Li: 'kali',
34558 Katakana: 'kana',
34559 Kharoshthi: 'khar',
34560 Khmer: 'khmr',
34561 Khojki: 'khoj',
34562 Kannada: [
34563 'knd2',
34564 'knda'
34565 ],
34566 Kaithi: 'kthi',
34567 Tai_Tham: 'lana',
34568 Lao: 'lao ',
34569 Latin: 'latn',
34570 Lepcha: 'lepc',
34571 Limbu: 'limb',
34572 Linear_A: 'lina',
34573 Linear_B: 'linb',
34574 Lisu: 'lisu',
34575 Lycian: 'lyci',
34576 Lydian: 'lydi',
34577 Mahajani: 'mahj',
34578 Mandaic: 'mand',
34579 Manichaean: 'mani',
34580 Mende_Kikakui: 'mend',
34581 Meroitic_Cursive: 'merc',
34582 Meroitic_Hieroglyphs: 'mero',
34583 Malayalam: [
34584 'mlm2',
34585 'mlym'
34586 ],
34587 Modi: 'modi',
34588 Mongolian: 'mong',
34589 Mro: 'mroo',
34590 Meetei_Mayek: 'mtei',
34591 Myanmar: [
34592 'mym2',
34593 'mymr'
34594 ],
34595 Old_North_Arabian: 'narb',
34596 Nabataean: 'nbat',
34597 Nko: 'nko ',
34598 Ogham: 'ogam',
34599 Ol_Chiki: 'olck',
34600 Old_Turkic: 'orkh',
34601 Oriya: [
34602 'ory2',
34603 'orya'
34604 ],
34605 Osmanya: 'osma',
34606 Palmyrene: 'palm',
34607 Pau_Cin_Hau: 'pauc',
34608 Old_Permic: 'perm',
34609 Phags_Pa: 'phag',
34610 Inscriptional_Pahlavi: 'phli',
34611 Psalter_Pahlavi: 'phlp',
34612 Phoenician: 'phnx',
34613 Miao: 'plrd',
34614 Inscriptional_Parthian: 'prti',
34615 Rejang: 'rjng',
34616 Runic: 'runr',
34617 Samaritan: 'samr',
34618 Old_South_Arabian: 'sarb',
34619 Saurashtra: 'saur',
34620 Shavian: 'shaw',
34621 Sharada: 'shrd',
34622 Siddham: 'sidd',
34623 Khudawadi: 'sind',
34624 Sinhala: 'sinh',
34625 Sora_Sompeng: 'sora',
34626 Sundanese: 'sund',
34627 Syloti_Nagri: 'sylo',
34628 Syriac: 'syrc',
34629 Tagbanwa: 'tagb',
34630 Takri: 'takr',
34631 Tai_Le: 'tale',
34632 New_Tai_Lue: 'talu',
34633 Tamil: [
34634 'tml2',
34635 'taml'
34636 ],
34637 Tai_Viet: 'tavt',
34638 Telugu: [
34639 'tel2',
34640 'telu'
34641 ],
34642 Tifinagh: 'tfng',
34643 Tagalog: 'tglg',
34644 Thaana: 'thaa',
34645 Thai: 'thai',
34646 Tibetan: 'tibt',
34647 Tirhuta: 'tirh',
34648 Ugaritic: 'ugar',
34649 Vai: 'vai ',
34650 Warang_Citi: 'wara',
34651 Old_Persian: 'xpeo',
34652 Cuneiform: 'xsux',
34653 Yi: 'yi ',
34654 Inherited: 'zinh',
34655 Common: 'zyyy',
34656 Unknown: 'zzzz'
34657};
34658const $2e3a795a88d7e002$var$OPENTYPE_SCRIPTS = {};
34659for(let script in $2e3a795a88d7e002$var$UNICODE_SCRIPTS){
34660 let tag = $2e3a795a88d7e002$var$UNICODE_SCRIPTS[script];
34661 if (Array.isArray(tag)) for (let t of tag)$2e3a795a88d7e002$var$OPENTYPE_SCRIPTS[t] = script;
34662 else $2e3a795a88d7e002$var$OPENTYPE_SCRIPTS[tag] = script;
34663}
34664function $2e3a795a88d7e002$export$b32f0b5f69d65e51(script1) {
34665 return $2e3a795a88d7e002$var$UNICODE_SCRIPTS[script1];
34666}
34667function $2e3a795a88d7e002$export$ce50e82f12a827a4(tag) {
34668 return $2e3a795a88d7e002$var$OPENTYPE_SCRIPTS[tag];
34669}
34670function $2e3a795a88d7e002$export$e5cb25e204fb8450(string) {
34671 let len = string.length;
34672 let idx = 0;
34673 while(idx < len){
34674 let code = string.charCodeAt(idx++);
34675 // Check if this is a high surrogate
34676 if (0xd800 <= code && code <= 0xdbff && idx < len) {
34677 let next = string.charCodeAt(idx);
34678 // Check if this is a low surrogate
34679 if (0xdc00 <= next && next <= 0xdfff) {
34680 idx++;
34681 code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000;
34682 }
34683 }
34684 let script2 = ($parcel$interopDefault($lzfo4$unicodeproperties)).getScript(code);
34685 if (script2 !== 'Common' && script2 !== 'Inherited' && script2 !== 'Unknown') return $2e3a795a88d7e002$var$UNICODE_SCRIPTS[script2];
34686 }
34687 return $2e3a795a88d7e002$var$UNICODE_SCRIPTS.Unknown;
34688}
34689function $2e3a795a88d7e002$export$16fab0757cfc223d(codePoints) {
34690 for(let i = 0; i < codePoints.length; i++){
34691 let codePoint = codePoints[i];
34692 let script3 = ($parcel$interopDefault($lzfo4$unicodeproperties)).getScript(codePoint);
34693 if (script3 !== 'Common' && script3 !== 'Inherited' && script3 !== 'Unknown') return $2e3a795a88d7e002$var$UNICODE_SCRIPTS[script3];
34694 }
34695 return $2e3a795a88d7e002$var$UNICODE_SCRIPTS.Unknown;
34696}
34697// The scripts in this map are written from right to left
34698const $2e3a795a88d7e002$var$RTL = {
34699 arab: true,
34700 hebr: true,
34701 syrc: true,
34702 thaa: true,
34703 cprt: true,
34704 khar: true,
34705 phnx: true,
34706 'nko ': true,
34707 lydi: true,
34708 avst: true,
34709 armi: true,
34710 phli: true,
34711 prti: true,
34712 sarb: true,
34713 orkh: true,
34714 samr: true,
34715 mand: true,
34716 merc: true,
34717 mero: true,
34718 // Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm)
34719 mani: true,
34720 mend: true,
34721 nbat: true,
34722 narb: true,
34723 palm: true,
34724 phlp: true // Psalter Pahlavi
34725};
34726function $2e3a795a88d7e002$export$9fddb9d0dd7d8a54(script4) {
34727 if ($2e3a795a88d7e002$var$RTL[script4]) return 'rtl';
34728 return 'ltr';
34729}
34730
34731
34732class $9ee490eecf5a30a9$export$2e2bcd8739ae039 {
34733 /**
34734 * The total advance width of the run.
34735 * @type {number}
34736 */ get advanceWidth() {
34737 let width = 0;
34738 for (let position of this.positions)width += position.xAdvance;
34739 return width;
34740 }
34741 /**
34742 * The total advance height of the run.
34743 * @type {number}
34744 */ get advanceHeight() {
34745 let height = 0;
34746 for (let position of this.positions)height += position.yAdvance;
34747 return height;
34748 }
34749 /**
34750 * The bounding box containing all glyphs in the run.
34751 * @type {BBox}
34752 */ get bbox() {
34753 let bbox = new $6d619c173ebabb82$export$2e2bcd8739ae039;
34754 let x = 0;
34755 let y = 0;
34756 for(let index = 0; index < this.glyphs.length; index++){
34757 let glyph = this.glyphs[index];
34758 let p = this.positions[index];
34759 let b = glyph.bbox;
34760 bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset);
34761 bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset);
34762 x += p.xAdvance;
34763 y += p.yAdvance;
34764 }
34765 return bbox;
34766 }
34767 constructor(glyphs, features, script, language, direction){
34768 /**
34769 * An array of Glyph objects in the run
34770 * @type {Glyph[]}
34771 */ this.glyphs = glyphs;
34772 /**
34773 * An array of GlyphPosition objects for each glyph in the run
34774 * @type {GlyphPosition[]}
34775 */ this.positions = null;
34776 /**
34777 * The script that was requested for shaping. This was either passed in or detected automatically.
34778 * @type {string}
34779 */ this.script = script;
34780 /**
34781 * The language requested for shaping, as passed in. If `null`, the default language for the
34782 * script was used.
34783 * @type {string}
34784 */ this.language = language || null;
34785 /**
34786 * The direction requested for shaping, as passed in (either ltr or rtl).
34787 * If `null`, the default direction of the script is used.
34788 * @type {string}
34789 */ this.direction = direction || $2e3a795a88d7e002$export$9fddb9d0dd7d8a54(script);
34790 /**
34791 * The features requested during shaping. This is a combination of user
34792 * specified features and features chosen by the shaper.
34793 * @type {object}
34794 */ this.features = {};
34795 // Convert features to an object
34796 if (Array.isArray(features)) for (let tag of features)this.features[tag] = true;
34797 else if (typeof features === 'object') this.features = features;
34798 }
34799}
34800
34801
34802class $745bead61c15c3c9$export$2e2bcd8739ae039 {
34803 constructor(xAdvance = 0, yAdvance = 0, xOffset = 0, yOffset = 0){
34804 /**
34805 * The amount to move the virtual pen in the X direction after rendering this glyph.
34806 * @type {number}
34807 */ this.xAdvance = xAdvance;
34808 /**
34809 * The amount to move the virtual pen in the Y direction after rendering this glyph.
34810 * @type {number}
34811 */ this.yAdvance = yAdvance;
34812 /**
34813 * The offset from the pen position in the X direction at which to render this glyph.
34814 * @type {number}
34815 */ this.xOffset = xOffset;
34816 /**
34817 * The offset from the pen position in the Y direction at which to render this glyph.
34818 * @type {number}
34819 */ this.yOffset = yOffset;
34820 }
34821}
34822
34823
34824
34825
34826// see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html
34827// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac
34828const $38911a2c3f8fd728$var$features = {
34829 allTypographicFeatures: {
34830 code: 0,
34831 exclusive: false,
34832 allTypeFeatures: 0
34833 },
34834 ligatures: {
34835 code: 1,
34836 exclusive: false,
34837 requiredLigatures: 0,
34838 commonLigatures: 2,
34839 rareLigatures: 4,
34840 // logos: 6
34841 rebusPictures: 8,
34842 diphthongLigatures: 10,
34843 squaredLigatures: 12,
34844 abbrevSquaredLigatures: 14,
34845 symbolLigatures: 16,
34846 contextualLigatures: 18,
34847 historicalLigatures: 20
34848 },
34849 cursiveConnection: {
34850 code: 2,
34851 exclusive: true,
34852 unconnected: 0,
34853 partiallyConnected: 1,
34854 cursive: 2
34855 },
34856 letterCase: {
34857 code: 3,
34858 exclusive: true
34859 },
34860 // upperAndLowerCase: 0 # deprecated
34861 // allCaps: 1 # deprecated
34862 // allLowerCase: 2 # deprecated
34863 // smallCaps: 3 # deprecated
34864 // initialCaps: 4 # deprecated
34865 // initialCapsAndSmallCaps: 5 # deprecated
34866 verticalSubstitution: {
34867 code: 4,
34868 exclusive: false,
34869 substituteVerticalForms: 0
34870 },
34871 linguisticRearrangement: {
34872 code: 5,
34873 exclusive: false,
34874 linguisticRearrangement: 0
34875 },
34876 numberSpacing: {
34877 code: 6,
34878 exclusive: true,
34879 monospacedNumbers: 0,
34880 proportionalNumbers: 1,
34881 thirdWidthNumbers: 2,
34882 quarterWidthNumbers: 3
34883 },
34884 smartSwash: {
34885 code: 8,
34886 exclusive: false,
34887 wordInitialSwashes: 0,
34888 wordFinalSwashes: 2,
34889 // lineInitialSwashes: 4
34890 // lineFinalSwashes: 6
34891 nonFinalSwashes: 8
34892 },
34893 diacritics: {
34894 code: 9,
34895 exclusive: true,
34896 showDiacritics: 0,
34897 hideDiacritics: 1,
34898 decomposeDiacritics: 2
34899 },
34900 verticalPosition: {
34901 code: 10,
34902 exclusive: true,
34903 normalPosition: 0,
34904 superiors: 1,
34905 inferiors: 2,
34906 ordinals: 3,
34907 scientificInferiors: 4
34908 },
34909 fractions: {
34910 code: 11,
34911 exclusive: true,
34912 noFractions: 0,
34913 verticalFractions: 1,
34914 diagonalFractions: 2
34915 },
34916 overlappingCharacters: {
34917 code: 13,
34918 exclusive: false,
34919 preventOverlap: 0
34920 },
34921 typographicExtras: {
34922 code: 14,
34923 exclusive: false,
34924 // hyphensToEmDash: 0
34925 // hyphenToEnDash: 2
34926 slashedZero: 4
34927 },
34928 // formInterrobang: 6
34929 // smartQuotes: 8
34930 // periodsToEllipsis: 10
34931 mathematicalExtras: {
34932 code: 15,
34933 exclusive: false,
34934 // hyphenToMinus: 0
34935 // asteristoMultiply: 2
34936 // slashToDivide: 4
34937 // inequalityLigatures: 6
34938 // exponents: 8
34939 mathematicalGreek: 10
34940 },
34941 ornamentSets: {
34942 code: 16,
34943 exclusive: true,
34944 noOrnaments: 0,
34945 dingbats: 1,
34946 piCharacters: 2,
34947 fleurons: 3,
34948 decorativeBorders: 4,
34949 internationalSymbols: 5,
34950 mathSymbols: 6
34951 },
34952 characterAlternatives: {
34953 code: 17,
34954 exclusive: true,
34955 noAlternates: 0
34956 },
34957 // user defined options
34958 designComplexity: {
34959 code: 18,
34960 exclusive: true,
34961 designLevel1: 0,
34962 designLevel2: 1,
34963 designLevel3: 2,
34964 designLevel4: 3,
34965 designLevel5: 4
34966 },
34967 styleOptions: {
34968 code: 19,
34969 exclusive: true,
34970 noStyleOptions: 0,
34971 displayText: 1,
34972 engravedText: 2,
34973 illuminatedCaps: 3,
34974 titlingCaps: 4,
34975 tallCaps: 5
34976 },
34977 characterShape: {
34978 code: 20,
34979 exclusive: true,
34980 traditionalCharacters: 0,
34981 simplifiedCharacters: 1,
34982 JIS1978Characters: 2,
34983 JIS1983Characters: 3,
34984 JIS1990Characters: 4,
34985 traditionalAltOne: 5,
34986 traditionalAltTwo: 6,
34987 traditionalAltThree: 7,
34988 traditionalAltFour: 8,
34989 traditionalAltFive: 9,
34990 expertCharacters: 10,
34991 JIS2004Characters: 11,
34992 hojoCharacters: 12,
34993 NLCCharacters: 13,
34994 traditionalNamesCharacters: 14
34995 },
34996 numberCase: {
34997 code: 21,
34998 exclusive: true,
34999 lowerCaseNumbers: 0,
35000 upperCaseNumbers: 1
35001 },
35002 textSpacing: {
35003 code: 22,
35004 exclusive: true,
35005 proportionalText: 0,
35006 monospacedText: 1,
35007 halfWidthText: 2,
35008 thirdWidthText: 3,
35009 quarterWidthText: 4,
35010 altProportionalText: 5,
35011 altHalfWidthText: 6
35012 },
35013 transliteration: {
35014 code: 23,
35015 exclusive: true,
35016 noTransliteration: 0
35017 },
35018 // hanjaToHangul: 1
35019 // hiraganaToKatakana: 2
35020 // katakanaToHiragana: 3
35021 // kanaToRomanization: 4
35022 // romanizationToHiragana: 5
35023 // romanizationToKatakana: 6
35024 // hanjaToHangulAltOne: 7
35025 // hanjaToHangulAltTwo: 8
35026 // hanjaToHangulAltThree: 9
35027 annotation: {
35028 code: 24,
35029 exclusive: true,
35030 noAnnotation: 0,
35031 boxAnnotation: 1,
35032 roundedBoxAnnotation: 2,
35033 circleAnnotation: 3,
35034 invertedCircleAnnotation: 4,
35035 parenthesisAnnotation: 5,
35036 periodAnnotation: 6,
35037 romanNumeralAnnotation: 7,
35038 diamondAnnotation: 8,
35039 invertedBoxAnnotation: 9,
35040 invertedRoundedBoxAnnotation: 10
35041 },
35042 kanaSpacing: {
35043 code: 25,
35044 exclusive: true,
35045 fullWidthKana: 0,
35046 proportionalKana: 1
35047 },
35048 ideographicSpacing: {
35049 code: 26,
35050 exclusive: true,
35051 fullWidthIdeographs: 0,
35052 proportionalIdeographs: 1,
35053 halfWidthIdeographs: 2
35054 },
35055 unicodeDecomposition: {
35056 code: 27,
35057 exclusive: false,
35058 canonicalComposition: 0,
35059 compatibilityComposition: 2,
35060 transcodingComposition: 4
35061 },
35062 rubyKana: {
35063 code: 28,
35064 exclusive: false,
35065 // noRubyKana: 0 # deprecated - use rubyKanaOff instead
35066 // rubyKana: 1 # deprecated - use rubyKanaOn instead
35067 rubyKana: 2
35068 },
35069 CJKSymbolAlternatives: {
35070 code: 29,
35071 exclusive: true,
35072 noCJKSymbolAlternatives: 0,
35073 CJKSymbolAltOne: 1,
35074 CJKSymbolAltTwo: 2,
35075 CJKSymbolAltThree: 3,
35076 CJKSymbolAltFour: 4,
35077 CJKSymbolAltFive: 5
35078 },
35079 ideographicAlternatives: {
35080 code: 30,
35081 exclusive: true,
35082 noIdeographicAlternatives: 0,
35083 ideographicAltOne: 1,
35084 ideographicAltTwo: 2,
35085 ideographicAltThree: 3,
35086 ideographicAltFour: 4,
35087 ideographicAltFive: 5
35088 },
35089 CJKVerticalRomanPlacement: {
35090 code: 31,
35091 exclusive: true,
35092 CJKVerticalRomanCentered: 0,
35093 CJKVerticalRomanHBaseline: 1
35094 },
35095 italicCJKRoman: {
35096 code: 32,
35097 exclusive: false,
35098 // noCJKItalicRoman: 0 # deprecated - use CJKItalicRomanOff instead
35099 // CJKItalicRoman: 1 # deprecated - use CJKItalicRomanOn instead
35100 CJKItalicRoman: 2
35101 },
35102 caseSensitiveLayout: {
35103 code: 33,
35104 exclusive: false,
35105 caseSensitiveLayout: 0,
35106 caseSensitiveSpacing: 2
35107 },
35108 alternateKana: {
35109 code: 34,
35110 exclusive: false,
35111 alternateHorizKana: 0,
35112 alternateVertKana: 2
35113 },
35114 stylisticAlternatives: {
35115 code: 35,
35116 exclusive: false,
35117 noStylisticAlternates: 0,
35118 stylisticAltOne: 2,
35119 stylisticAltTwo: 4,
35120 stylisticAltThree: 6,
35121 stylisticAltFour: 8,
35122 stylisticAltFive: 10,
35123 stylisticAltSix: 12,
35124 stylisticAltSeven: 14,
35125 stylisticAltEight: 16,
35126 stylisticAltNine: 18,
35127 stylisticAltTen: 20,
35128 stylisticAltEleven: 22,
35129 stylisticAltTwelve: 24,
35130 stylisticAltThirteen: 26,
35131 stylisticAltFourteen: 28,
35132 stylisticAltFifteen: 30,
35133 stylisticAltSixteen: 32,
35134 stylisticAltSeventeen: 34,
35135 stylisticAltEighteen: 36,
35136 stylisticAltNineteen: 38,
35137 stylisticAltTwenty: 40
35138 },
35139 contextualAlternates: {
35140 code: 36,
35141 exclusive: false,
35142 contextualAlternates: 0,
35143 swashAlternates: 2,
35144 contextualSwashAlternates: 4
35145 },
35146 lowerCase: {
35147 code: 37,
35148 exclusive: true,
35149 defaultLowerCase: 0,
35150 lowerCaseSmallCaps: 1,
35151 lowerCasePetiteCaps: 2
35152 },
35153 upperCase: {
35154 code: 38,
35155 exclusive: true,
35156 defaultUpperCase: 0,
35157 upperCaseSmallCaps: 1,
35158 upperCasePetiteCaps: 2
35159 },
35160 languageTag: {
35161 code: 39,
35162 exclusive: true
35163 },
35164 CJKRomanSpacing: {
35165 code: 103,
35166 exclusive: true,
35167 halfWidthCJKRoman: 0,
35168 proportionalCJKRoman: 1,
35169 defaultCJKRoman: 2,
35170 fullWidthCJKRoman: 3
35171 }
35172};
35173const $38911a2c3f8fd728$var$feature = (name, selector)=>[
35174 $38911a2c3f8fd728$var$features[name].code,
35175 $38911a2c3f8fd728$var$features[name][selector]
35176 ]
35177;
35178const $38911a2c3f8fd728$var$OTMapping = {
35179 rlig: $38911a2c3f8fd728$var$feature('ligatures', 'requiredLigatures'),
35180 clig: $38911a2c3f8fd728$var$feature('ligatures', 'contextualLigatures'),
35181 dlig: $38911a2c3f8fd728$var$feature('ligatures', 'rareLigatures'),
35182 hlig: $38911a2c3f8fd728$var$feature('ligatures', 'historicalLigatures'),
35183 liga: $38911a2c3f8fd728$var$feature('ligatures', 'commonLigatures'),
35184 hist: $38911a2c3f8fd728$var$feature('ligatures', 'historicalLigatures'),
35185 smcp: $38911a2c3f8fd728$var$feature('lowerCase', 'lowerCaseSmallCaps'),
35186 pcap: $38911a2c3f8fd728$var$feature('lowerCase', 'lowerCasePetiteCaps'),
35187 frac: $38911a2c3f8fd728$var$feature('fractions', 'diagonalFractions'),
35188 dnom: $38911a2c3f8fd728$var$feature('fractions', 'diagonalFractions'),
35189 numr: $38911a2c3f8fd728$var$feature('fractions', 'diagonalFractions'),
35190 afrc: $38911a2c3f8fd728$var$feature('fractions', 'verticalFractions'),
35191 // aalt
35192 // abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset?
35193 // ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum?
35194 // unic, vatu, vhal, vjmo, vpal, vrt2
35195 // dist -> trak table?
35196 // kern, vkrn -> kern table
35197 // lfbd + opbd + rtbd -> opbd table?
35198 // mark, mkmk -> acnt table?
35199 // locl -> languageTag + ltag table
35200 case: $38911a2c3f8fd728$var$feature('caseSensitiveLayout', 'caseSensitiveLayout'),
35201 ccmp: $38911a2c3f8fd728$var$feature('unicodeDecomposition', 'canonicalComposition'),
35202 cpct: $38911a2c3f8fd728$var$feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'),
35203 valt: $38911a2c3f8fd728$var$feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'),
35204 swsh: $38911a2c3f8fd728$var$feature('contextualAlternates', 'swashAlternates'),
35205 cswh: $38911a2c3f8fd728$var$feature('contextualAlternates', 'contextualSwashAlternates'),
35206 curs: $38911a2c3f8fd728$var$feature('cursiveConnection', 'cursive'),
35207 c2pc: $38911a2c3f8fd728$var$feature('upperCase', 'upperCasePetiteCaps'),
35208 c2sc: $38911a2c3f8fd728$var$feature('upperCase', 'upperCaseSmallCaps'),
35209 init: $38911a2c3f8fd728$var$feature('smartSwash', 'wordInitialSwashes'),
35210 fin2: $38911a2c3f8fd728$var$feature('smartSwash', 'wordFinalSwashes'),
35211 medi: $38911a2c3f8fd728$var$feature('smartSwash', 'nonFinalSwashes'),
35212 med2: $38911a2c3f8fd728$var$feature('smartSwash', 'nonFinalSwashes'),
35213 fin3: $38911a2c3f8fd728$var$feature('smartSwash', 'wordFinalSwashes'),
35214 fina: $38911a2c3f8fd728$var$feature('smartSwash', 'wordFinalSwashes'),
35215 pkna: $38911a2c3f8fd728$var$feature('kanaSpacing', 'proportionalKana'),
35216 half: $38911a2c3f8fd728$var$feature('textSpacing', 'halfWidthText'),
35217 halt: $38911a2c3f8fd728$var$feature('textSpacing', 'altHalfWidthText'),
35218 hkna: $38911a2c3f8fd728$var$feature('alternateKana', 'alternateHorizKana'),
35219 vkna: $38911a2c3f8fd728$var$feature('alternateKana', 'alternateVertKana'),
35220 // hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated
35221 ital: $38911a2c3f8fd728$var$feature('italicCJKRoman', 'CJKItalicRoman'),
35222 lnum: $38911a2c3f8fd728$var$feature('numberCase', 'upperCaseNumbers'),
35223 onum: $38911a2c3f8fd728$var$feature('numberCase', 'lowerCaseNumbers'),
35224 mgrk: $38911a2c3f8fd728$var$feature('mathematicalExtras', 'mathematicalGreek'),
35225 // nalt: not enough info. what type of annotation?
35226 // ornm: ditto, which ornament style?
35227 calt: $38911a2c3f8fd728$var$feature('contextualAlternates', 'contextualAlternates'),
35228 vrt2: $38911a2c3f8fd728$var$feature('verticalSubstitution', 'substituteVerticalForms'),
35229 vert: $38911a2c3f8fd728$var$feature('verticalSubstitution', 'substituteVerticalForms'),
35230 tnum: $38911a2c3f8fd728$var$feature('numberSpacing', 'monospacedNumbers'),
35231 pnum: $38911a2c3f8fd728$var$feature('numberSpacing', 'proportionalNumbers'),
35232 sups: $38911a2c3f8fd728$var$feature('verticalPosition', 'superiors'),
35233 subs: $38911a2c3f8fd728$var$feature('verticalPosition', 'inferiors'),
35234 ordn: $38911a2c3f8fd728$var$feature('verticalPosition', 'ordinals'),
35235 pwid: $38911a2c3f8fd728$var$feature('textSpacing', 'proportionalText'),
35236 hwid: $38911a2c3f8fd728$var$feature('textSpacing', 'halfWidthText'),
35237 qwid: $38911a2c3f8fd728$var$feature('textSpacing', 'quarterWidthText'),
35238 twid: $38911a2c3f8fd728$var$feature('textSpacing', 'thirdWidthText'),
35239 fwid: $38911a2c3f8fd728$var$feature('textSpacing', 'proportionalText'),
35240 palt: $38911a2c3f8fd728$var$feature('textSpacing', 'altProportionalText'),
35241 trad: $38911a2c3f8fd728$var$feature('characterShape', 'traditionalCharacters'),
35242 smpl: $38911a2c3f8fd728$var$feature('characterShape', 'simplifiedCharacters'),
35243 jp78: $38911a2c3f8fd728$var$feature('characterShape', 'JIS1978Characters'),
35244 jp83: $38911a2c3f8fd728$var$feature('characterShape', 'JIS1983Characters'),
35245 jp90: $38911a2c3f8fd728$var$feature('characterShape', 'JIS1990Characters'),
35246 jp04: $38911a2c3f8fd728$var$feature('characterShape', 'JIS2004Characters'),
35247 expt: $38911a2c3f8fd728$var$feature('characterShape', 'expertCharacters'),
35248 hojo: $38911a2c3f8fd728$var$feature('characterShape', 'hojoCharacters'),
35249 nlck: $38911a2c3f8fd728$var$feature('characterShape', 'NLCCharacters'),
35250 tnam: $38911a2c3f8fd728$var$feature('characterShape', 'traditionalNamesCharacters'),
35251 ruby: $38911a2c3f8fd728$var$feature('rubyKana', 'rubyKana'),
35252 titl: $38911a2c3f8fd728$var$feature('styleOptions', 'titlingCaps'),
35253 zero: $38911a2c3f8fd728$var$feature('typographicExtras', 'slashedZero'),
35254 ss01: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltOne'),
35255 ss02: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltTwo'),
35256 ss03: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltThree'),
35257 ss04: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltFour'),
35258 ss05: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltFive'),
35259 ss06: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltSix'),
35260 ss07: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltSeven'),
35261 ss08: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltEight'),
35262 ss09: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltNine'),
35263 ss10: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltTen'),
35264 ss11: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltEleven'),
35265 ss12: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltTwelve'),
35266 ss13: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltThirteen'),
35267 ss14: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltFourteen'),
35268 ss15: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltFifteen'),
35269 ss16: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltSixteen'),
35270 ss17: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltSeventeen'),
35271 ss18: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltEighteen'),
35272 ss19: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltNineteen'),
35273 ss20: $38911a2c3f8fd728$var$feature('stylisticAlternatives', 'stylisticAltTwenty')
35274};
35275// salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose
35276// Add cv01-cv99 features
35277for(let i = 1; i <= 99; i++)$38911a2c3f8fd728$var$OTMapping[`cv${`00${i}`.slice(-2)}`] = [
35278 $38911a2c3f8fd728$var$features.characterAlternatives.code,
35279 i
35280];
35281// create inverse mapping
35282let $38911a2c3f8fd728$var$AATMapping = {};
35283for(let ot in $38911a2c3f8fd728$var$OTMapping){
35284 let aat = $38911a2c3f8fd728$var$OTMapping[ot];
35285 if ($38911a2c3f8fd728$var$AATMapping[aat[0]] == null) $38911a2c3f8fd728$var$AATMapping[aat[0]] = {};
35286 $38911a2c3f8fd728$var$AATMapping[aat[0]][aat[1]] = ot;
35287}
35288function $38911a2c3f8fd728$export$b813f7d2a1677c16(features) {
35289 let res = {};
35290 for(let k in features){
35291 let r;
35292 if (r = $38911a2c3f8fd728$var$OTMapping[k]) {
35293 if (res[r[0]] == null) res[r[0]] = {};
35294 res[r[0]][r[1]] = features[k];
35295 }
35296 }
35297 return res;
35298}
35299// Maps strings in a [featureType, featureSetting]
35300// to their equivalent number codes
35301function $38911a2c3f8fd728$var$mapFeatureStrings(f) {
35302 let [type, setting] = f;
35303 if (isNaN(type)) var typeCode = $38911a2c3f8fd728$var$features[type] && $38911a2c3f8fd728$var$features[type].code;
35304 else var typeCode = type;
35305 if (isNaN(setting)) var settingCode = $38911a2c3f8fd728$var$features[type] && $38911a2c3f8fd728$var$features[type][setting];
35306 else var settingCode = setting;
35307 return [
35308 typeCode,
35309 settingCode
35310 ];
35311}
35312function $38911a2c3f8fd728$export$bd6df347a4f391c4(features) {
35313 let res = {};
35314 if (Array.isArray(features)) for(let k = 0; k < features.length; k++){
35315 let r;
35316 let f = $38911a2c3f8fd728$var$mapFeatureStrings(features[k]);
35317 if (r = $38911a2c3f8fd728$var$AATMapping[f[0]] && $38911a2c3f8fd728$var$AATMapping[f[0]][f[1]]) res[r] = true;
35318 }
35319 else if (typeof features === 'object') for(let type in features){
35320 let feature = features[type];
35321 for(let setting in feature){
35322 let r;
35323 let f = $38911a2c3f8fd728$var$mapFeatureStrings([
35324 type,
35325 setting
35326 ]);
35327 if (feature[setting] && (r = $38911a2c3f8fd728$var$AATMapping[f[0]] && $38911a2c3f8fd728$var$AATMapping[f[0]][f[1]])) res[r] = true;
35328 }
35329 }
35330 return Object.keys(res);
35331}
35332
35333
35334
35335
35336
35337
35338
35339var _class;
35340let $c2212a1e30c3e5e2$export$2e2bcd8739ae039 = (_class = class $c2212a1e30c3e5e2$export$2e2bcd8739ae039 {
35341 lookup(glyph) {
35342 switch(this.table.version){
35343 case 0:
35344 return this.table.values.getItem(glyph);
35345 case 2:
35346 case 4:
35347 {
35348 let min = 0;
35349 let max = this.table.binarySearchHeader.nUnits - 1;
35350 while(min <= max){
35351 var mid = min + max >> 1;
35352 var seg = this.table.segments[mid];
35353 // special end of search value
35354 if (seg.firstGlyph === 0xffff) return null;
35355 if (glyph < seg.firstGlyph) max = mid - 1;
35356 else if (glyph > seg.lastGlyph) min = mid + 1;
35357 else {
35358 if (this.table.version === 2) return seg.value;
35359 else return seg.values[glyph - seg.firstGlyph];
35360 }
35361 }
35362 return null;
35363 }
35364 case 6:
35365 {
35366 let min = 0;
35367 let max = this.table.binarySearchHeader.nUnits - 1;
35368 while(min <= max){
35369 var mid = min + max >> 1;
35370 var seg = this.table.segments[mid];
35371 // special end of search value
35372 if (seg.glyph === 0xffff) return null;
35373 if (glyph < seg.glyph) max = mid - 1;
35374 else if (glyph > seg.glyph) min = mid + 1;
35375 else return seg.value;
35376 }
35377 return null;
35378 }
35379 case 8:
35380 return this.table.values[glyph - this.table.firstGlyph];
35381 default:
35382 throw new Error(`Unknown lookup table format: ${this.table.version}`);
35383 }
35384 }
35385 glyphsForValue(classValue) {
35386 let res = [];
35387 switch(this.table.version){
35388 case 2:
35389 case 4:
35390 for (let segment of this.table.segments)if (this.table.version === 2 && segment.value === classValue) res.push(...$c07919491d3366c0$export$d02631cccf789723(segment.firstGlyph, segment.lastGlyph + 1));
35391 else {
35392 for(let index = 0; index < segment.values.length; index++)if (segment.values[index] === classValue) res.push(segment.firstGlyph + index);
35393 }
35394 break;
35395 case 6:
35396 for (let segment1 of this.table.segments)if (segment1.value === classValue) res.push(segment1.glyph);
35397 break;
35398 case 8:
35399 for(let i = 0; i < this.table.values.length; i++)if (this.table.values[i] === classValue) res.push(this.table.firstGlyph + i);
35400 break;
35401 default:
35402 throw new Error(`Unknown lookup table format: ${this.table.version}`);
35403 }
35404 return res;
35405 }
35406 constructor(table){
35407 this.table = table;
35408 }
35409}, $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "glyphsForValue", [
35410 $9ea776e3198edd2e$export$69a3209f1a06c04d
35411], Object.getOwnPropertyDescriptor(_class.prototype, "glyphsForValue"), _class.prototype), _class);
35412
35413
35414const $301debcb54a1563f$var$START_OF_TEXT_STATE = 0;
35415const $301debcb54a1563f$var$START_OF_LINE_STATE = 1;
35416const $301debcb54a1563f$var$END_OF_TEXT_CLASS = 0;
35417const $301debcb54a1563f$var$OUT_OF_BOUNDS_CLASS = 1;
35418const $301debcb54a1563f$var$DELETED_GLYPH_CLASS = 2;
35419const $301debcb54a1563f$var$END_OF_LINE_CLASS = 3;
35420const $301debcb54a1563f$var$DONT_ADVANCE = 0x4000;
35421class $301debcb54a1563f$export$2e2bcd8739ae039 {
35422 process(glyphs, reverse, processEntry) {
35423 let currentState = $301debcb54a1563f$var$START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think?
35424 let index = reverse ? glyphs.length - 1 : 0;
35425 let dir = reverse ? -1 : 1;
35426 while(dir === 1 && index <= glyphs.length || dir === -1 && index >= -1){
35427 let glyph = null;
35428 let classCode = $301debcb54a1563f$var$OUT_OF_BOUNDS_CLASS;
35429 let shouldAdvance = true;
35430 if (index === glyphs.length || index === -1) classCode = $301debcb54a1563f$var$END_OF_TEXT_CLASS;
35431 else {
35432 glyph = glyphs[index];
35433 if (glyph.id === 0xffff) classCode = $301debcb54a1563f$var$DELETED_GLYPH_CLASS;
35434 else {
35435 classCode = this.lookupTable.lookup(glyph.id);
35436 if (classCode == null) classCode = $301debcb54a1563f$var$OUT_OF_BOUNDS_CLASS;
35437 }
35438 }
35439 let row = this.stateTable.stateArray.getItem(currentState);
35440 let entryIndex = row[classCode];
35441 let entry = this.stateTable.entryTable.getItem(entryIndex);
35442 if (classCode !== $301debcb54a1563f$var$END_OF_TEXT_CLASS && classCode !== $301debcb54a1563f$var$DELETED_GLYPH_CLASS) {
35443 processEntry(glyph, entry, index);
35444 shouldAdvance = !(entry.flags & $301debcb54a1563f$var$DONT_ADVANCE);
35445 }
35446 currentState = entry.newState;
35447 if (shouldAdvance) index += dir;
35448 }
35449 return glyphs;
35450 }
35451 /**
35452 * Performs a depth-first traversal of the glyph strings
35453 * represented by the state machine.
35454 */ traverse(opts, state = 0, visited = new Set) {
35455 if (visited.has(state)) return;
35456 visited.add(state);
35457 let { nClasses: nClasses , stateArray: stateArray , entryTable: entryTable } = this.stateTable;
35458 let row = stateArray.getItem(state);
35459 // Skip predefined classes
35460 for(let classCode = 4; classCode < nClasses; classCode++){
35461 let entryIndex = row[classCode];
35462 let entry = entryTable.getItem(entryIndex);
35463 // Try all glyphs in the class
35464 for (let glyph of this.lookupTable.glyphsForValue(classCode)){
35465 if (opts.enter) opts.enter(glyph, entry);
35466 if (entry.newState !== 0) this.traverse(opts, entry.newState, visited);
35467 if (opts.exit) opts.exit(glyph, entry);
35468 }
35469 }
35470 }
35471 constructor(stateTable){
35472 this.stateTable = stateTable;
35473 this.lookupTable = new $c2212a1e30c3e5e2$export$2e2bcd8739ae039(stateTable.classTable);
35474 }
35475}
35476
35477
35478
35479
35480var _class;
35481// indic replacement flags
35482const $2dec272f88a4e9d9$var$MARK_FIRST = 0x8000;
35483const $2dec272f88a4e9d9$var$MARK_LAST = 0x2000;
35484const $2dec272f88a4e9d9$var$VERB = 0x000F;
35485// contextual substitution and glyph insertion flag
35486const $2dec272f88a4e9d9$var$SET_MARK = 0x8000;
35487// ligature entry flags
35488const $2dec272f88a4e9d9$var$SET_COMPONENT = 0x8000;
35489const $2dec272f88a4e9d9$var$PERFORM_ACTION = 0x2000;
35490// ligature action masks
35491const $2dec272f88a4e9d9$var$LAST_MASK = 0x80000000;
35492const $2dec272f88a4e9d9$var$STORE_MASK = 0x40000000;
35493const $2dec272f88a4e9d9$var$OFFSET_MASK = 0x3FFFFFFF;
35494const $2dec272f88a4e9d9$var$VERTICAL_ONLY = 0x800000;
35495const $2dec272f88a4e9d9$var$REVERSE_DIRECTION = 0x400000;
35496const $2dec272f88a4e9d9$var$HORIZONTAL_AND_VERTICAL = 0x200000;
35497// glyph insertion flags
35498const $2dec272f88a4e9d9$var$CURRENT_IS_KASHIDA_LIKE = 0x2000;
35499const $2dec272f88a4e9d9$var$MARKED_IS_KASHIDA_LIKE = 0x1000;
35500const $2dec272f88a4e9d9$var$CURRENT_INSERT_BEFORE = 0x0800;
35501const $2dec272f88a4e9d9$var$MARKED_INSERT_BEFORE = 0x0400;
35502const $2dec272f88a4e9d9$var$CURRENT_INSERT_COUNT = 0x03E0;
35503const $2dec272f88a4e9d9$var$MARKED_INSERT_COUNT = 0x001F;
35504let $2dec272f88a4e9d9$export$2e2bcd8739ae039 = (_class = class $2dec272f88a4e9d9$export$2e2bcd8739ae039 {
35505 // Processes an array of glyphs and applies the specified features
35506 // Features should be in the form of {featureType:{featureSetting:boolean}}
35507 process(glyphs, features = {}) {
35508 for (let chain of this.morx.chains){
35509 let flags = chain.defaultFlags;
35510 // enable/disable the requested features
35511 for (let feature of chain.features){
35512 let f;
35513 if (f = features[feature.featureType]) {
35514 if (f[feature.featureSetting]) {
35515 flags &= feature.disableFlags;
35516 flags |= feature.enableFlags;
35517 } else if (f[feature.featureSetting] === false) {
35518 flags |= ~feature.disableFlags;
35519 flags &= ~feature.enableFlags;
35520 }
35521 }
35522 }
35523 for (let subtable of chain.subtables)if (subtable.subFeatureFlags & flags) this.processSubtable(subtable, glyphs);
35524 }
35525 // remove deleted glyphs
35526 let index = glyphs.length - 1;
35527 while(index >= 0){
35528 if (glyphs[index].id === 0xffff) glyphs.splice(index, 1);
35529 index--;
35530 }
35531 return glyphs;
35532 }
35533 processSubtable(subtable, glyphs) {
35534 this.subtable = subtable;
35535 this.glyphs = glyphs;
35536 if (this.subtable.type === 4) {
35537 this.processNoncontextualSubstitutions(this.subtable, this.glyphs);
35538 return;
35539 }
35540 this.ligatureStack = [];
35541 this.markedGlyph = null;
35542 this.firstGlyph = null;
35543 this.lastGlyph = null;
35544 this.markedIndex = null;
35545 let stateMachine = this.getStateMachine(subtable);
35546 let process = this.getProcessor();
35547 let reverse = !!(this.subtable.coverage & $2dec272f88a4e9d9$var$REVERSE_DIRECTION);
35548 return stateMachine.process(this.glyphs, reverse, process);
35549 }
35550 getStateMachine(subtable) {
35551 return new $301debcb54a1563f$export$2e2bcd8739ae039(subtable.table.stateTable);
35552 }
35553 getProcessor() {
35554 switch(this.subtable.type){
35555 case 0:
35556 return this.processIndicRearragement;
35557 case 1:
35558 return this.processContextualSubstitution;
35559 case 2:
35560 return this.processLigature;
35561 case 4:
35562 return this.processNoncontextualSubstitutions;
35563 case 5:
35564 return this.processGlyphInsertion;
35565 default:
35566 throw new Error(`Invalid morx subtable type: ${this.subtable.type}`);
35567 }
35568 }
35569 processIndicRearragement(glyph, entry, index) {
35570 if (entry.flags & $2dec272f88a4e9d9$var$MARK_FIRST) this.firstGlyph = index;
35571 if (entry.flags & $2dec272f88a4e9d9$var$MARK_LAST) this.lastGlyph = index;
35572 $2dec272f88a4e9d9$var$reorderGlyphs(this.glyphs, entry.flags & $2dec272f88a4e9d9$var$VERB, this.firstGlyph, this.lastGlyph);
35573 }
35574 processContextualSubstitution(glyph, entry, index) {
35575 let subsitutions = this.subtable.table.substitutionTable.items;
35576 if (entry.markIndex !== 0xffff) {
35577 let lookup = subsitutions.getItem(entry.markIndex);
35578 let lookupTable = new $c2212a1e30c3e5e2$export$2e2bcd8739ae039(lookup);
35579 glyph = this.glyphs[this.markedGlyph];
35580 var gid = lookupTable.lookup(glyph.id);
35581 if (gid) this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints);
35582 }
35583 if (entry.currentIndex !== 0xffff) {
35584 let lookup = subsitutions.getItem(entry.currentIndex);
35585 let lookupTable = new $c2212a1e30c3e5e2$export$2e2bcd8739ae039(lookup);
35586 glyph = this.glyphs[index];
35587 var gid = lookupTable.lookup(glyph.id);
35588 if (gid) this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);
35589 }
35590 if (entry.flags & $2dec272f88a4e9d9$var$SET_MARK) this.markedGlyph = index;
35591 }
35592 processLigature(glyph, entry, index) {
35593 if (entry.flags & $2dec272f88a4e9d9$var$SET_COMPONENT) this.ligatureStack.push(index);
35594 if (entry.flags & $2dec272f88a4e9d9$var$PERFORM_ACTION) {
35595 let actions = this.subtable.table.ligatureActions;
35596 let components = this.subtable.table.components;
35597 let ligatureList = this.subtable.table.ligatureList;
35598 let actionIndex = entry.action;
35599 let last = false;
35600 let ligatureIndex = 0;
35601 let codePoints = [];
35602 let ligatureGlyphs = [];
35603 while(!last){
35604 let componentGlyph = this.ligatureStack.pop();
35605 codePoints.unshift(...this.glyphs[componentGlyph].codePoints);
35606 let action = actions.getItem(actionIndex++);
35607 last = !!(action & $2dec272f88a4e9d9$var$LAST_MASK);
35608 let store = !!(action & $2dec272f88a4e9d9$var$STORE_MASK);
35609 let offset = (action & $2dec272f88a4e9d9$var$OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits
35610 offset += this.glyphs[componentGlyph].id;
35611 let component = components.getItem(offset);
35612 ligatureIndex += component;
35613 if (last || store) {
35614 let ligatureEntry = ligatureList.getItem(ligatureIndex);
35615 this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints);
35616 ligatureGlyphs.push(componentGlyph);
35617 ligatureIndex = 0;
35618 codePoints = [];
35619 } else this.glyphs[componentGlyph] = this.font.getGlyph(0xffff);
35620 }
35621 // Put ligature glyph indexes back on the stack
35622 this.ligatureStack.push(...ligatureGlyphs);
35623 }
35624 }
35625 processNoncontextualSubstitutions(subtable, glyphs, index) {
35626 let lookupTable = new $c2212a1e30c3e5e2$export$2e2bcd8739ae039(subtable.table.lookupTable);
35627 for(index = 0; index < glyphs.length; index++){
35628 let glyph = glyphs[index];
35629 if (glyph.id !== 0xffff) {
35630 let gid = lookupTable.lookup(glyph.id);
35631 if (gid) glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);
35632 }
35633 }
35634 }
35635 _insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) {
35636 let insertions = [];
35637 while(count--){
35638 let gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++);
35639 insertions.push(this.font.getGlyph(gid));
35640 }
35641 if (!isBefore) glyphIndex++;
35642 this.glyphs.splice(glyphIndex, 0, ...insertions);
35643 }
35644 processGlyphInsertion(glyph, entry, index) {
35645 if (entry.flags & $2dec272f88a4e9d9$var$SET_MARK) this.markedIndex = index;
35646 if (entry.markedInsertIndex !== 0xffff) {
35647 let count = (entry.flags & $2dec272f88a4e9d9$var$MARKED_INSERT_COUNT) >>> 5;
35648 let isBefore = !!(entry.flags & $2dec272f88a4e9d9$var$MARKED_INSERT_BEFORE);
35649 this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore);
35650 }
35651 if (entry.currentInsertIndex !== 0xffff) {
35652 let count = (entry.flags & $2dec272f88a4e9d9$var$CURRENT_INSERT_COUNT) >>> 5;
35653 let isBefore = !!(entry.flags & $2dec272f88a4e9d9$var$CURRENT_INSERT_BEFORE);
35654 this._insertGlyphs(index, entry.currentInsertIndex, count, isBefore);
35655 }
35656 }
35657 getSupportedFeatures() {
35658 let features = [];
35659 for (let chain of this.morx.chains)for (let feature of chain.features)features.push([
35660 feature.featureType,
35661 feature.featureSetting
35662 ]);
35663 return features;
35664 }
35665 generateInputs(gid) {
35666 if (!this.inputCache) this.generateInputCache();
35667 return this.inputCache[gid] || [];
35668 }
35669 generateInputCache() {
35670 this.inputCache = {};
35671 for (let chain of this.morx.chains){
35672 let flags = chain.defaultFlags;
35673 for (let subtable of chain.subtables)if (subtable.subFeatureFlags & flags) this.generateInputsForSubtable(subtable);
35674 }
35675 }
35676 generateInputsForSubtable(subtable) {
35677 // Currently, only supporting ligature subtables.
35678 if (subtable.type !== 2) return;
35679 let reverse = !!(subtable.coverage & $2dec272f88a4e9d9$var$REVERSE_DIRECTION);
35680 if (reverse) throw new Error('Reverse subtable, not supported.');
35681 this.subtable = subtable;
35682 this.ligatureStack = [];
35683 let stateMachine = this.getStateMachine(subtable);
35684 let process = this.getProcessor();
35685 let input = [];
35686 let stack = [];
35687 this.glyphs = [];
35688 stateMachine.traverse({
35689 enter: (glyph, entry)=>{
35690 let glyphs = this.glyphs;
35691 stack.push({
35692 glyphs: glyphs.slice(),
35693 ligatureStack: this.ligatureStack.slice()
35694 });
35695 // Add glyph to input and glyphs to process.
35696 let g1 = this.font.getGlyph(glyph);
35697 input.push(g1);
35698 glyphs.push(input[input.length - 1]);
35699 // Process ligature substitution
35700 process(glyphs[glyphs.length - 1], entry, glyphs.length - 1);
35701 // Add input to result if only one matching (non-deleted) glyph remains.
35702 let count = 0;
35703 let found = 0;
35704 for(let i = 0; i < glyphs.length && count <= 1; i++)if (glyphs[i].id !== 0xffff) {
35705 count++;
35706 found = glyphs[i].id;
35707 }
35708 if (count === 1) {
35709 let result = input.map((g)=>g.id
35710 );
35711 let cache = this.inputCache[found];
35712 if (cache) cache.push(result);
35713 else this.inputCache[found] = [
35714 result
35715 ];
35716 }
35717 },
35718 exit: ()=>{
35719 ({ glyphs: this.glyphs , ligatureStack: this.ligatureStack } = stack.pop());
35720 input.pop();
35721 }
35722 });
35723 }
35724 constructor(font){
35725 this.processIndicRearragement = this.processIndicRearragement.bind(this);
35726 this.processContextualSubstitution = this.processContextualSubstitution.bind(this);
35727 this.processLigature = this.processLigature.bind(this);
35728 this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this);
35729 this.processGlyphInsertion = this.processGlyphInsertion.bind(this);
35730 this.font = font;
35731 this.morx = font.morx;
35732 this.inputCache = null;
35733 }
35734}, $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "getStateMachine", [
35735 $9ea776e3198edd2e$export$69a3209f1a06c04d
35736], Object.getOwnPropertyDescriptor(_class.prototype, "getStateMachine"), _class.prototype), _class);
35737// swaps the glyphs in rangeA with those in rangeB
35738// reverse the glyphs inside those ranges if specified
35739// ranges are in [offset, length] format
35740function $2dec272f88a4e9d9$var$swap(glyphs, rangeA, rangeB, reverseA = false, reverseB = false) {
35741 let end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]);
35742 if (reverseB) end.reverse();
35743 let start = glyphs.splice(rangeA[0], rangeA[1], ...end);
35744 if (reverseA) start.reverse();
35745 glyphs.splice(rangeB[0] - (rangeA[1] - 1), 0, ...start);
35746 return glyphs;
35747}
35748function $2dec272f88a4e9d9$var$reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) {
35749 let length = lastGlyph - firstGlyph + 1;
35750 switch(verb){
35751 case 0:
35752 return glyphs;
35753 case 1:
35754 return $2dec272f88a4e9d9$var$swap(glyphs, [
35755 firstGlyph,
35756 1
35757 ], [
35758 lastGlyph,
35759 0
35760 ]);
35761 case 2:
35762 return $2dec272f88a4e9d9$var$swap(glyphs, [
35763 firstGlyph,
35764 0
35765 ], [
35766 lastGlyph,
35767 1
35768 ]);
35769 case 3:
35770 return $2dec272f88a4e9d9$var$swap(glyphs, [
35771 firstGlyph,
35772 1
35773 ], [
35774 lastGlyph,
35775 1
35776 ]);
35777 case 4:
35778 return $2dec272f88a4e9d9$var$swap(glyphs, [
35779 firstGlyph,
35780 2
35781 ], [
35782 lastGlyph,
35783 0
35784 ]);
35785 case 5:
35786 return $2dec272f88a4e9d9$var$swap(glyphs, [
35787 firstGlyph,
35788 2
35789 ], [
35790 lastGlyph,
35791 0
35792 ], true, false);
35793 case 6:
35794 return $2dec272f88a4e9d9$var$swap(glyphs, [
35795 firstGlyph,
35796 0
35797 ], [
35798 lastGlyph,
35799 2
35800 ]);
35801 case 7:
35802 return $2dec272f88a4e9d9$var$swap(glyphs, [
35803 firstGlyph,
35804 0
35805 ], [
35806 lastGlyph,
35807 2
35808 ], false, true);
35809 case 8:
35810 return $2dec272f88a4e9d9$var$swap(glyphs, [
35811 firstGlyph,
35812 1
35813 ], [
35814 lastGlyph,
35815 2
35816 ]);
35817 case 9:
35818 return $2dec272f88a4e9d9$var$swap(glyphs, [
35819 firstGlyph,
35820 1
35821 ], [
35822 lastGlyph,
35823 2
35824 ], false, true);
35825 case 10:
35826 return $2dec272f88a4e9d9$var$swap(glyphs, [
35827 firstGlyph,
35828 2
35829 ], [
35830 lastGlyph,
35831 1
35832 ]);
35833 case 11:
35834 return $2dec272f88a4e9d9$var$swap(glyphs, [
35835 firstGlyph,
35836 2
35837 ], [
35838 lastGlyph,
35839 1
35840 ], true, false);
35841 case 12:
35842 return $2dec272f88a4e9d9$var$swap(glyphs, [
35843 firstGlyph,
35844 2
35845 ], [
35846 lastGlyph,
35847 2
35848 ]);
35849 case 13:
35850 return $2dec272f88a4e9d9$var$swap(glyphs, [
35851 firstGlyph,
35852 2
35853 ], [
35854 lastGlyph,
35855 2
35856 ], true, false);
35857 case 14:
35858 return $2dec272f88a4e9d9$var$swap(glyphs, [
35859 firstGlyph,
35860 2
35861 ], [
35862 lastGlyph,
35863 2
35864 ], false, true);
35865 case 15:
35866 return $2dec272f88a4e9d9$var$swap(glyphs, [
35867 firstGlyph,
35868 2
35869 ], [
35870 lastGlyph,
35871 2
35872 ], true, true);
35873 default:
35874 throw new Error(`Unknown verb: ${verb}`);
35875 }
35876}
35877
35878
35879class $7cff22d3cf7aa55a$export$2e2bcd8739ae039 {
35880 substitute(glyphRun) {
35881 // AAT expects the glyphs to be in visual order prior to morx processing,
35882 // so reverse the glyphs if the script is right-to-left.
35883 if (glyphRun.direction === 'rtl') glyphRun.glyphs.reverse();
35884 this.morxProcessor.process(glyphRun.glyphs, $38911a2c3f8fd728$export$b813f7d2a1677c16(glyphRun.features));
35885 }
35886 getAvailableFeatures(script, language) {
35887 return $38911a2c3f8fd728$export$bd6df347a4f391c4(this.morxProcessor.getSupportedFeatures());
35888 }
35889 stringsForGlyph(gid) {
35890 let glyphStrings = this.morxProcessor.generateInputs(gid);
35891 let result = new Set;
35892 for (let glyphs of glyphStrings)this._addStrings(glyphs, 0, result, '');
35893 return result;
35894 }
35895 _addStrings(glyphs, index, strings, string) {
35896 let codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]);
35897 for (let codePoint of codePoints){
35898 let s = string + String.fromCodePoint(codePoint);
35899 if (index < glyphs.length - 1) this._addStrings(glyphs, index + 1, strings, s);
35900 else strings.add(s);
35901 }
35902 }
35903 constructor(font){
35904 this.font = font;
35905 this.morxProcessor = new $2dec272f88a4e9d9$export$2e2bcd8739ae039(font);
35906 this.fallbackPosition = false;
35907 }
35908}
35909
35910
35911
35912class $6703eaa61400de19$export$2e2bcd8739ae039 {
35913 /**
35914 * Adds the given features to the last stage.
35915 * Ignores features that have already been applied.
35916 */ _addFeatures(features, global) {
35917 let stageIndex = this.stages.length - 1;
35918 let stage = this.stages[stageIndex];
35919 for (let feature of features)if (this.allFeatures[feature] == null) {
35920 stage.push(feature);
35921 this.allFeatures[feature] = stageIndex;
35922 if (global) this.globalFeatures[feature] = true;
35923 }
35924 }
35925 /**
35926 * Add features to the last stage
35927 */ add(arg, global = true) {
35928 if (this.stages.length === 0) this.stages.push([]);
35929 if (typeof arg === 'string') arg = [
35930 arg
35931 ];
35932 if (Array.isArray(arg)) this._addFeatures(arg, global);
35933 else if (typeof arg === 'object') {
35934 this._addFeatures(arg.global || [], true);
35935 this._addFeatures(arg.local || [], false);
35936 } else throw new Error("Unsupported argument to ShapingPlan#add");
35937 }
35938 /**
35939 * Add a new stage
35940 */ addStage(arg, global) {
35941 if (typeof arg === 'function') this.stages.push(arg, []);
35942 else {
35943 this.stages.push([]);
35944 this.add(arg, global);
35945 }
35946 }
35947 setFeatureOverrides(features) {
35948 if (Array.isArray(features)) this.add(features);
35949 else if (typeof features === 'object') for(let tag in features){
35950 if (features[tag]) this.add(tag);
35951 else if (this.allFeatures[tag] != null) {
35952 let stage = this.stages[this.allFeatures[tag]];
35953 stage.splice(stage.indexOf(tag), 1);
35954 delete this.allFeatures[tag];
35955 delete this.globalFeatures[tag];
35956 }
35957 }
35958 }
35959 /**
35960 * Assigns the global features to the given glyphs
35961 */ assignGlobalFeatures(glyphs) {
35962 for (let glyph of glyphs)for(let feature in this.globalFeatures)glyph.features[feature] = true;
35963 }
35964 /**
35965 * Executes the planned stages using the given OTProcessor
35966 */ process(processor, glyphs, positions) {
35967 for (let stage of this.stages){
35968 if (typeof stage === 'function') {
35969 if (!positions) stage(this.font, glyphs, this);
35970 } else if (stage.length > 0) processor.applyFeatures(stage, glyphs, positions);
35971 }
35972 }
35973 constructor(font, script, direction){
35974 this.font = font;
35975 this.script = script;
35976 this.direction = direction;
35977 this.stages = [];
35978 this.globalFeatures = {};
35979 this.allFeatures = {};
35980 }
35981}
35982
35983
35984
35985
35986const $4f61fb8204be1a7c$var$VARIATION_FEATURES = [
35987 'rvrn'
35988];
35989const $4f61fb8204be1a7c$var$COMMON_FEATURES = [
35990 'ccmp',
35991 'locl',
35992 'rlig',
35993 'mark',
35994 'mkmk'
35995];
35996const $4f61fb8204be1a7c$var$FRACTIONAL_FEATURES = [
35997 'frac',
35998 'numr',
35999 'dnom'
36000];
36001const $4f61fb8204be1a7c$var$HORIZONTAL_FEATURES = [
36002 'calt',
36003 'clig',
36004 'liga',
36005 'rclt',
36006 'curs',
36007 'kern'
36008];
36009const $4f61fb8204be1a7c$var$VERTICAL_FEATURES = [
36010 'vert'
36011];
36012const $4f61fb8204be1a7c$var$DIRECTIONAL_FEATURES = {
36013 ltr: [
36014 'ltra',
36015 'ltrm'
36016 ],
36017 rtl: [
36018 'rtla',
36019 'rtlm'
36020 ]
36021};
36022class $4f61fb8204be1a7c$export$2e2bcd8739ae039 {
36023 static plan(plan, glyphs, features) {
36024 // Plan the features we want to apply
36025 this.planPreprocessing(plan);
36026 this.planFeatures(plan);
36027 this.planPostprocessing(plan, features);
36028 // Assign the global features to all the glyphs
36029 plan.assignGlobalFeatures(glyphs);
36030 // Assign local features to glyphs
36031 this.assignFeatures(plan, glyphs);
36032 }
36033 static planPreprocessing(plan) {
36034 plan.add({
36035 global: [
36036 ...$4f61fb8204be1a7c$var$VARIATION_FEATURES,
36037 ...$4f61fb8204be1a7c$var$DIRECTIONAL_FEATURES[plan.direction]
36038 ],
36039 local: $4f61fb8204be1a7c$var$FRACTIONAL_FEATURES
36040 });
36041 }
36042 static planFeatures(plan) {
36043 // Do nothing by default. Let subclasses override this.
36044 }
36045 static planPostprocessing(plan, userFeatures) {
36046 plan.add([
36047 ...$4f61fb8204be1a7c$var$COMMON_FEATURES,
36048 ...$4f61fb8204be1a7c$var$HORIZONTAL_FEATURES
36049 ]);
36050 plan.setFeatureOverrides(userFeatures);
36051 }
36052 static assignFeatures(plan, glyphs) {
36053 // Enable contextual fractions
36054 for(let i = 0; i < glyphs.length; i++){
36055 let glyph = glyphs[i];
36056 if (glyph.codePoints[0] === 0x2044) {
36057 let start = i;
36058 let end = i + 1;
36059 // Apply numerator
36060 while(start > 0 && ($parcel$interopDefault($lzfo4$unicodeproperties)).isDigit(glyphs[start - 1].codePoints[0])){
36061 glyphs[start - 1].features.numr = true;
36062 glyphs[start - 1].features.frac = true;
36063 start--;
36064 }
36065 // Apply denominator
36066 while(end < glyphs.length && ($parcel$interopDefault($lzfo4$unicodeproperties)).isDigit(glyphs[end].codePoints[0])){
36067 glyphs[end].features.dnom = true;
36068 glyphs[end].features.frac = true;
36069 end++;
36070 }
36071 // Apply fraction slash
36072 glyph.features.frac = true;
36073 i = end - 1;
36074 }
36075 }
36076 }
36077}
36078$lzfo4$swchelpers.defineProperty($4f61fb8204be1a7c$export$2e2bcd8739ae039, "zeroMarkWidths", 'AFTER_GPOS');
36079
36080
36081
36082
36083
36084
36085var $38a185bbdd6946f1$require$Buffer = $lzfo4$buffer.Buffer;
36086const $38a185bbdd6946f1$var$trie = new ($parcel$interopDefault($lzfo4$unicodetrie))($38a185bbdd6946f1$require$Buffer.from("ABABAAAAAACgMQAAAZUBav7t2CtPA0EUBeDZB00pin9AJZIEgyUEj0QhweDAgQOJxCBRBElQSBwSicLgkOAwnNKZ5GaY2c7uzj4o5yZfZrrbefbuIx2nSq3CGmzAWH/+K+UO7MIe7MMhHMMpnMMFXMIVXIt2t3CnP088iPqjqNN8e4Ij7Rle4LUH82rLm6i/92A+RERERERERERNmfz/89GDeRARERERzbN8ceps2Iwt9H0C9/AJ6yOlDkbTczcot5VSm8Pm1vcFWfb7+BKOLTuOd2UlTX4wGP85Eg953lWPFbnuN7PkjtLmalOWbNenkHOSa7T3KmR9MVTZ2zZkVj1kHa68MueVKH0R4zqQ44WEXLM8VjcWHP0PtKLfPzQnMtGn3W4QYf6qxFxceVI394r2xnV+1rih0fV1Vzf3fO1n3evL5J78ruvZ5ptX2Rwy92Tfb1wlEqut3U+sZ3HXOeJ7/zDrbyuP6+Zz0fqa6Nv3vhY7Yu1xWnGevmsvsUpTT/RYIe8waUH/rvHMWKFzLfN8L+rTfp645mfX7ftlnfDtYxN59w0=", "base64"));
36087const $38a185bbdd6946f1$var$FEATURES = [
36088 'isol',
36089 'fina',
36090 'fin2',
36091 'fin3',
36092 'medi',
36093 'med2',
36094 'init'
36095];
36096const $38a185bbdd6946f1$var$ShapingClasses = {
36097 Non_Joining: 0,
36098 Left_Joining: 1,
36099 Right_Joining: 2,
36100 Dual_Joining: 3,
36101 Join_Causing: 3,
36102 ALAPH: 4,
36103 'DALATH RISH': 5,
36104 Transparent: 6
36105};
36106const $38a185bbdd6946f1$var$ISOL = 'isol';
36107const $38a185bbdd6946f1$var$FINA = 'fina';
36108const $38a185bbdd6946f1$var$FIN2 = 'fin2';
36109const $38a185bbdd6946f1$var$FIN3 = 'fin3';
36110const $38a185bbdd6946f1$var$MEDI = 'medi';
36111const $38a185bbdd6946f1$var$MED2 = 'med2';
36112const $38a185bbdd6946f1$var$INIT = 'init';
36113const $38a185bbdd6946f1$var$NONE = null;
36114// Each entry is [prevAction, curAction, nextState]
36115const $38a185bbdd6946f1$var$STATE_TABLE = [
36116 // Non_Joining, Left_Joining, Right_Joining, Dual_Joining, ALAPH, DALATH RISH
36117 // State 0: prev was U, not willing to join.
36118 [
36119 [
36120 $38a185bbdd6946f1$var$NONE,
36121 $38a185bbdd6946f1$var$NONE,
36122 0
36123 ],
36124 [
36125 $38a185bbdd6946f1$var$NONE,
36126 $38a185bbdd6946f1$var$ISOL,
36127 2
36128 ],
36129 [
36130 $38a185bbdd6946f1$var$NONE,
36131 $38a185bbdd6946f1$var$ISOL,
36132 1
36133 ],
36134 [
36135 $38a185bbdd6946f1$var$NONE,
36136 $38a185bbdd6946f1$var$ISOL,
36137 2
36138 ],
36139 [
36140 $38a185bbdd6946f1$var$NONE,
36141 $38a185bbdd6946f1$var$ISOL,
36142 1
36143 ],
36144 [
36145 $38a185bbdd6946f1$var$NONE,
36146 $38a185bbdd6946f1$var$ISOL,
36147 6
36148 ]
36149 ],
36150 // State 1: prev was R or ISOL/ALAPH, not willing to join.
36151 [
36152 [
36153 $38a185bbdd6946f1$var$NONE,
36154 $38a185bbdd6946f1$var$NONE,
36155 0
36156 ],
36157 [
36158 $38a185bbdd6946f1$var$NONE,
36159 $38a185bbdd6946f1$var$ISOL,
36160 2
36161 ],
36162 [
36163 $38a185bbdd6946f1$var$NONE,
36164 $38a185bbdd6946f1$var$ISOL,
36165 1
36166 ],
36167 [
36168 $38a185bbdd6946f1$var$NONE,
36169 $38a185bbdd6946f1$var$ISOL,
36170 2
36171 ],
36172 [
36173 $38a185bbdd6946f1$var$NONE,
36174 $38a185bbdd6946f1$var$FIN2,
36175 5
36176 ],
36177 [
36178 $38a185bbdd6946f1$var$NONE,
36179 $38a185bbdd6946f1$var$ISOL,
36180 6
36181 ]
36182 ],
36183 // State 2: prev was D/L in ISOL form, willing to join.
36184 [
36185 [
36186 $38a185bbdd6946f1$var$NONE,
36187 $38a185bbdd6946f1$var$NONE,
36188 0
36189 ],
36190 [
36191 $38a185bbdd6946f1$var$NONE,
36192 $38a185bbdd6946f1$var$ISOL,
36193 2
36194 ],
36195 [
36196 $38a185bbdd6946f1$var$INIT,
36197 $38a185bbdd6946f1$var$FINA,
36198 1
36199 ],
36200 [
36201 $38a185bbdd6946f1$var$INIT,
36202 $38a185bbdd6946f1$var$FINA,
36203 3
36204 ],
36205 [
36206 $38a185bbdd6946f1$var$INIT,
36207 $38a185bbdd6946f1$var$FINA,
36208 4
36209 ],
36210 [
36211 $38a185bbdd6946f1$var$INIT,
36212 $38a185bbdd6946f1$var$FINA,
36213 6
36214 ]
36215 ],
36216 // State 3: prev was D in FINA form, willing to join.
36217 [
36218 [
36219 $38a185bbdd6946f1$var$NONE,
36220 $38a185bbdd6946f1$var$NONE,
36221 0
36222 ],
36223 [
36224 $38a185bbdd6946f1$var$NONE,
36225 $38a185bbdd6946f1$var$ISOL,
36226 2
36227 ],
36228 [
36229 $38a185bbdd6946f1$var$MEDI,
36230 $38a185bbdd6946f1$var$FINA,
36231 1
36232 ],
36233 [
36234 $38a185bbdd6946f1$var$MEDI,
36235 $38a185bbdd6946f1$var$FINA,
36236 3
36237 ],
36238 [
36239 $38a185bbdd6946f1$var$MEDI,
36240 $38a185bbdd6946f1$var$FINA,
36241 4
36242 ],
36243 [
36244 $38a185bbdd6946f1$var$MEDI,
36245 $38a185bbdd6946f1$var$FINA,
36246 6
36247 ]
36248 ],
36249 // State 4: prev was FINA ALAPH, not willing to join.
36250 [
36251 [
36252 $38a185bbdd6946f1$var$NONE,
36253 $38a185bbdd6946f1$var$NONE,
36254 0
36255 ],
36256 [
36257 $38a185bbdd6946f1$var$NONE,
36258 $38a185bbdd6946f1$var$ISOL,
36259 2
36260 ],
36261 [
36262 $38a185bbdd6946f1$var$MED2,
36263 $38a185bbdd6946f1$var$ISOL,
36264 1
36265 ],
36266 [
36267 $38a185bbdd6946f1$var$MED2,
36268 $38a185bbdd6946f1$var$ISOL,
36269 2
36270 ],
36271 [
36272 $38a185bbdd6946f1$var$MED2,
36273 $38a185bbdd6946f1$var$FIN2,
36274 5
36275 ],
36276 [
36277 $38a185bbdd6946f1$var$MED2,
36278 $38a185bbdd6946f1$var$ISOL,
36279 6
36280 ]
36281 ],
36282 // State 5: prev was FIN2/FIN3 ALAPH, not willing to join.
36283 [
36284 [
36285 $38a185bbdd6946f1$var$NONE,
36286 $38a185bbdd6946f1$var$NONE,
36287 0
36288 ],
36289 [
36290 $38a185bbdd6946f1$var$NONE,
36291 $38a185bbdd6946f1$var$ISOL,
36292 2
36293 ],
36294 [
36295 $38a185bbdd6946f1$var$ISOL,
36296 $38a185bbdd6946f1$var$ISOL,
36297 1
36298 ],
36299 [
36300 $38a185bbdd6946f1$var$ISOL,
36301 $38a185bbdd6946f1$var$ISOL,
36302 2
36303 ],
36304 [
36305 $38a185bbdd6946f1$var$ISOL,
36306 $38a185bbdd6946f1$var$FIN2,
36307 5
36308 ],
36309 [
36310 $38a185bbdd6946f1$var$ISOL,
36311 $38a185bbdd6946f1$var$ISOL,
36312 6
36313 ]
36314 ],
36315 // State 6: prev was DALATH/RISH, not willing to join.
36316 [
36317 [
36318 $38a185bbdd6946f1$var$NONE,
36319 $38a185bbdd6946f1$var$NONE,
36320 0
36321 ],
36322 [
36323 $38a185bbdd6946f1$var$NONE,
36324 $38a185bbdd6946f1$var$ISOL,
36325 2
36326 ],
36327 [
36328 $38a185bbdd6946f1$var$NONE,
36329 $38a185bbdd6946f1$var$ISOL,
36330 1
36331 ],
36332 [
36333 $38a185bbdd6946f1$var$NONE,
36334 $38a185bbdd6946f1$var$ISOL,
36335 2
36336 ],
36337 [
36338 $38a185bbdd6946f1$var$NONE,
36339 $38a185bbdd6946f1$var$FIN3,
36340 5
36341 ],
36342 [
36343 $38a185bbdd6946f1$var$NONE,
36344 $38a185bbdd6946f1$var$ISOL,
36345 6
36346 ]
36347 ]
36348];
36349class $38a185bbdd6946f1$export$2e2bcd8739ae039 extends $4f61fb8204be1a7c$export$2e2bcd8739ae039 {
36350 static planFeatures(plan) {
36351 plan.add([
36352 'ccmp',
36353 'locl'
36354 ]);
36355 for(let i = 0; i < $38a185bbdd6946f1$var$FEATURES.length; i++){
36356 let feature = $38a185bbdd6946f1$var$FEATURES[i];
36357 plan.addStage(feature, false);
36358 }
36359 plan.addStage('mset');
36360 }
36361 static assignFeatures(plan, glyphs) {
36362 super.assignFeatures(plan, glyphs);
36363 let prev = -1;
36364 let state = 0;
36365 let actions = [];
36366 // Apply the state machine to map glyphs to features
36367 for(let i = 0; i < glyphs.length; i++){
36368 let curAction, prevAction;
36369 var glyph = glyphs[i];
36370 let type = $38a185bbdd6946f1$var$getShapingClass(glyph.codePoints[0]);
36371 if (type === $38a185bbdd6946f1$var$ShapingClasses.Transparent) {
36372 actions[i] = $38a185bbdd6946f1$var$NONE;
36373 continue;
36374 }
36375 [prevAction, curAction, state] = $38a185bbdd6946f1$var$STATE_TABLE[state][type];
36376 if (prevAction !== $38a185bbdd6946f1$var$NONE && prev !== -1) actions[prev] = prevAction;
36377 actions[i] = curAction;
36378 prev = i;
36379 }
36380 // Apply the chosen features to their respective glyphs
36381 for(let index = 0; index < glyphs.length; index++){
36382 let feature;
36383 var glyph = glyphs[index];
36384 if (feature = actions[index]) glyph.features[feature] = true;
36385 }
36386 }
36387}
36388function $38a185bbdd6946f1$var$getShapingClass(codePoint) {
36389 let res = $38a185bbdd6946f1$var$trie.get(codePoint);
36390 if (res) return res - 1;
36391 let category = ($parcel$interopDefault($lzfo4$unicodeproperties)).getCategory(codePoint);
36392 if (category === 'Mn' || category === 'Me' || category === 'Cf') return $38a185bbdd6946f1$var$ShapingClasses.Transparent;
36393 return $38a185bbdd6946f1$var$ShapingClasses.Non_Joining;
36394}
36395
36396
36397
36398
36399
36400class $9b0d9f7995eda7b8$export$2e2bcd8739ae039 {
36401 reset(options = {}, index = 0) {
36402 this.options = options;
36403 this.flags = options.flags || {};
36404 this.markAttachmentType = options.markAttachmentType || 0;
36405 this.index = index;
36406 }
36407 get cur() {
36408 return this.glyphs[this.index] || null;
36409 }
36410 shouldIgnore(glyph) {
36411 return this.flags.ignoreMarks && glyph.isMark || this.flags.ignoreBaseGlyphs && glyph.isBase || this.flags.ignoreLigatures && glyph.isLigature || this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType;
36412 }
36413 move(dir) {
36414 this.index += dir;
36415 while(0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index]))this.index += dir;
36416 if (0 > this.index || this.index >= this.glyphs.length) return null;
36417 return this.glyphs[this.index];
36418 }
36419 next() {
36420 return this.move(1);
36421 }
36422 prev() {
36423 return this.move(-1);
36424 }
36425 peek(count = 1) {
36426 let idx = this.index;
36427 let res = this.increment(count);
36428 this.index = idx;
36429 return res;
36430 }
36431 peekIndex(count = 1) {
36432 let idx = this.index;
36433 this.increment(count);
36434 let res = this.index;
36435 this.index = idx;
36436 return res;
36437 }
36438 increment(count = 1) {
36439 let dir = count < 0 ? -1 : 1;
36440 count = Math.abs(count);
36441 while(count--)this.move(dir);
36442 return this.glyphs[this.index];
36443 }
36444 constructor(glyphs, options){
36445 this.glyphs = glyphs;
36446 this.reset(options);
36447 }
36448}
36449
36450
36451
36452const $cca6af4639973976$var$DEFAULT_SCRIPTS = [
36453 'DFLT',
36454 'dflt',
36455 'latn'
36456];
36457class $cca6af4639973976$export$2e2bcd8739ae039 {
36458 findScript(script) {
36459 if (this.table.scriptList == null) return null;
36460 if (!Array.isArray(script)) script = [
36461 script
36462 ];
36463 for (let s of script)for (let entry of this.table.scriptList){
36464 if (entry.tag === s) return entry;
36465 }
36466 return null;
36467 }
36468 selectScript(script, language, direction) {
36469 let changed = false;
36470 let entry;
36471 if (!this.script || script !== this.scriptTag) {
36472 entry = this.findScript(script);
36473 if (!entry) entry = this.findScript($cca6af4639973976$var$DEFAULT_SCRIPTS);
36474 if (!entry) return this.scriptTag;
36475 this.scriptTag = entry.tag;
36476 this.script = entry.script;
36477 this.language = null;
36478 this.languageTag = null;
36479 changed = true;
36480 }
36481 if (!direction || direction !== this.direction) this.direction = direction || $2e3a795a88d7e002$export$9fddb9d0dd7d8a54(script);
36482 if (language && language.length < 4) language += ' '.repeat(4 - language.length);
36483 if (!language || language !== this.languageTag) {
36484 this.language = null;
36485 for (let lang of this.script.langSysRecords)if (lang.tag === language) {
36486 this.language = lang.langSys;
36487 this.languageTag = lang.tag;
36488 break;
36489 }
36490 if (!this.language) {
36491 this.language = this.script.defaultLangSys;
36492 this.languageTag = null;
36493 }
36494 changed = true;
36495 }
36496 // Build a feature lookup table
36497 if (changed) {
36498 this.features = {};
36499 if (this.language) for (let featureIndex of this.language.featureIndexes){
36500 let record = this.table.featureList[featureIndex];
36501 let substituteFeature = this.substituteFeatureForVariations(featureIndex);
36502 this.features[record.tag] = substituteFeature || record.feature;
36503 }
36504 }
36505 return this.scriptTag;
36506 }
36507 lookupsForFeatures(userFeatures = [], exclude) {
36508 let lookups = [];
36509 for (let tag of userFeatures){
36510 let feature = this.features[tag];
36511 if (!feature) continue;
36512 for (let lookupIndex of feature.lookupListIndexes){
36513 if (exclude && exclude.indexOf(lookupIndex) !== -1) continue;
36514 lookups.push({
36515 feature: tag,
36516 index: lookupIndex,
36517 lookup: this.table.lookupList.get(lookupIndex)
36518 });
36519 }
36520 }
36521 lookups.sort((a, b)=>a.index - b.index
36522 );
36523 return lookups;
36524 }
36525 substituteFeatureForVariations(featureIndex) {
36526 if (this.variationsIndex === -1) return null;
36527 let record = this.table.featureVariations.featureVariationRecords[this.variationsIndex];
36528 let substitutions = record.featureTableSubstitution.substitutions;
36529 for (let substitution of substitutions){
36530 if (substitution.featureIndex === featureIndex) return substitution.alternateFeatureTable;
36531 }
36532 return null;
36533 }
36534 findVariationsIndex(coords) {
36535 let variations = this.table.featureVariations;
36536 if (!variations) return -1;
36537 let records = variations.featureVariationRecords;
36538 for(let i = 0; i < records.length; i++){
36539 let conditions = records[i].conditionSet.conditionTable;
36540 if (this.variationConditionsMatch(conditions, coords)) return i;
36541 }
36542 return -1;
36543 }
36544 variationConditionsMatch(conditions, coords) {
36545 return conditions.every((condition)=>{
36546 let coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0;
36547 return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue;
36548 });
36549 }
36550 applyFeatures(userFeatures, glyphs, advances) {
36551 let lookups = this.lookupsForFeatures(userFeatures);
36552 this.applyLookups(lookups, glyphs, advances);
36553 }
36554 applyLookups(lookups, glyphs, positions) {
36555 this.glyphs = glyphs;
36556 this.positions = positions;
36557 this.glyphIterator = new $9b0d9f7995eda7b8$export$2e2bcd8739ae039(glyphs);
36558 for (let { feature: feature , lookup: lookup } of lookups){
36559 this.currentFeature = feature;
36560 this.glyphIterator.reset(lookup.flags);
36561 while(this.glyphIterator.index < glyphs.length){
36562 if (!(feature in this.glyphIterator.cur.features)) {
36563 this.glyphIterator.next();
36564 continue;
36565 }
36566 for (let table of lookup.subTables){
36567 let res = this.applyLookup(lookup.lookupType, table);
36568 if (res) break;
36569 }
36570 this.glyphIterator.next();
36571 }
36572 }
36573 }
36574 applyLookup(lookup, table) {
36575 throw new Error("applyLookup must be implemented by subclasses");
36576 }
36577 applyLookupList(lookupRecords) {
36578 let options = this.glyphIterator.options;
36579 let glyphIndex = this.glyphIterator.index;
36580 for (let lookupRecord of lookupRecords){
36581 // Reset flags and find glyph index for this lookup record
36582 this.glyphIterator.reset(options, glyphIndex);
36583 this.glyphIterator.increment(lookupRecord.sequenceIndex);
36584 // Get the lookup and setup flags for subtables
36585 let lookup = this.table.lookupList.get(lookupRecord.lookupListIndex);
36586 this.glyphIterator.reset(lookup.flags, this.glyphIterator.index);
36587 // Apply lookup subtables until one matches
36588 for (let table of lookup.subTables){
36589 if (this.applyLookup(lookup.lookupType, table)) break;
36590 }
36591 }
36592 this.glyphIterator.reset(options, glyphIndex);
36593 return true;
36594 }
36595 coverageIndex(coverage, glyph) {
36596 if (glyph == null) glyph = this.glyphIterator.cur.id;
36597 switch(coverage.version){
36598 case 1:
36599 return coverage.glyphs.indexOf(glyph);
36600 case 2:
36601 for (let range of coverage.rangeRecords){
36602 if (range.start <= glyph && glyph <= range.end) return range.startCoverageIndex + glyph - range.start;
36603 }
36604 break;
36605 }
36606 return -1;
36607 }
36608 match(sequenceIndex, sequence, fn, matched) {
36609 let pos = this.glyphIterator.index;
36610 let glyph = this.glyphIterator.increment(sequenceIndex);
36611 let idx = 0;
36612 while(idx < sequence.length && glyph && fn(sequence[idx], glyph)){
36613 if (matched) matched.push(this.glyphIterator.index);
36614 idx++;
36615 glyph = this.glyphIterator.next();
36616 }
36617 this.glyphIterator.index = pos;
36618 if (idx < sequence.length) return false;
36619 return matched || true;
36620 }
36621 sequenceMatches(sequenceIndex, sequence) {
36622 return this.match(sequenceIndex, sequence, (component, glyph)=>component === glyph.id
36623 );
36624 }
36625 sequenceMatchIndices(sequenceIndex, sequence) {
36626 return this.match(sequenceIndex, sequence, (component, glyph)=>{
36627 // If the current feature doesn't apply to this glyph,
36628 if (!(this.currentFeature in glyph.features)) return false;
36629 return component === glyph.id;
36630 }, []);
36631 }
36632 coverageSequenceMatches(sequenceIndex, sequence) {
36633 return this.match(sequenceIndex, sequence, (coverage, glyph)=>this.coverageIndex(coverage, glyph.id) >= 0
36634 );
36635 }
36636 getClassID(glyph, classDef) {
36637 switch(classDef.version){
36638 case 1:
36639 let i = glyph - classDef.startGlyph;
36640 if (i >= 0 && i < classDef.classValueArray.length) return classDef.classValueArray[i];
36641 break;
36642 case 2:
36643 for (let range of classDef.classRangeRecord){
36644 if (range.start <= glyph && glyph <= range.end) return range.class;
36645 }
36646 break;
36647 }
36648 return 0;
36649 }
36650 classSequenceMatches(sequenceIndex, sequence, classDef) {
36651 return this.match(sequenceIndex, sequence, (classID, glyph)=>classID === this.getClassID(glyph.id, classDef)
36652 );
36653 }
36654 applyContext(table) {
36655 let index, set;
36656 switch(table.version){
36657 case 1:
36658 index = this.coverageIndex(table.coverage);
36659 if (index === -1) return false;
36660 set = table.ruleSets[index];
36661 for (let rule of set){
36662 if (this.sequenceMatches(1, rule.input)) return this.applyLookupList(rule.lookupRecords);
36663 }
36664 break;
36665 case 2:
36666 if (this.coverageIndex(table.coverage) === -1) return false;
36667 index = this.getClassID(this.glyphIterator.cur.id, table.classDef);
36668 if (index === -1) return false;
36669 set = table.classSet[index];
36670 for (let rule1 of set){
36671 if (this.classSequenceMatches(1, rule1.classes, table.classDef)) return this.applyLookupList(rule1.lookupRecords);
36672 }
36673 break;
36674 case 3:
36675 if (this.coverageSequenceMatches(0, table.coverages)) return this.applyLookupList(table.lookupRecords);
36676 break;
36677 }
36678 return false;
36679 }
36680 applyChainingContext(table) {
36681 let index;
36682 switch(table.version){
36683 case 1:
36684 index = this.coverageIndex(table.coverage);
36685 if (index === -1) return false;
36686 let set = table.chainRuleSets[index];
36687 for (let rule of set){
36688 if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack) && this.sequenceMatches(1, rule.input) && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) return this.applyLookupList(rule.lookupRecords);
36689 }
36690 break;
36691 case 2:
36692 if (this.coverageIndex(table.coverage) === -1) return false;
36693 index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef);
36694 let rules = table.chainClassSet[index];
36695 if (!rules) return false;
36696 for (let rule2 of rules){
36697 if (this.classSequenceMatches(-rule2.backtrack.length, rule2.backtrack, table.backtrackClassDef) && this.classSequenceMatches(1, rule2.input, table.inputClassDef) && this.classSequenceMatches(1 + rule2.input.length, rule2.lookahead, table.lookaheadClassDef)) return this.applyLookupList(rule2.lookupRecords);
36698 }
36699 break;
36700 case 3:
36701 if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) && this.coverageSequenceMatches(0, table.inputCoverage) && this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) return this.applyLookupList(table.lookupRecords);
36702 break;
36703 }
36704 return false;
36705 }
36706 constructor(font, table){
36707 this.font = font;
36708 this.table = table;
36709 this.script = null;
36710 this.scriptTag = null;
36711 this.language = null;
36712 this.languageTag = null;
36713 this.features = {};
36714 this.lookups = {};
36715 // Setup variation substitutions
36716 this.variationsIndex = font._variationProcessor ? this.findVariationsIndex(font._variationProcessor.normalizedCoords) : -1;
36717 // initialize to default script + language
36718 this.selectScript();
36719 // current context (set by applyFeatures)
36720 this.glyphs = [];
36721 this.positions = []; // only used by GPOS
36722 this.ligatureID = 1;
36723 this.currentFeature = null;
36724 }
36725}
36726
36727
36728class $535fa31b81f74b90$export$2e2bcd8739ae039 {
36729 get id() {
36730 return this._id;
36731 }
36732 set id(id) {
36733 this._id = id;
36734 this.substituted = true;
36735 let GDEF = this._font.GDEF;
36736 if (GDEF && GDEF.glyphClassDef) {
36737 // TODO: clean this up
36738 let classID = $cca6af4639973976$export$2e2bcd8739ae039.prototype.getClassID(id, GDEF.glyphClassDef);
36739 this.isBase = classID === 1;
36740 this.isLigature = classID === 2;
36741 this.isMark = classID === 3;
36742 this.markAttachmentType = GDEF.markAttachClassDef ? $cca6af4639973976$export$2e2bcd8739ae039.prototype.getClassID(id, GDEF.markAttachClassDef) : 0;
36743 } else {
36744 this.isMark = this.codePoints.length > 0 && this.codePoints.every(($parcel$interopDefault($lzfo4$unicodeproperties)).isMark);
36745 this.isBase = !this.isMark;
36746 this.isLigature = this.codePoints.length > 1;
36747 this.markAttachmentType = 0;
36748 }
36749 }
36750 copy() {
36751 return new $535fa31b81f74b90$export$2e2bcd8739ae039(this._font, this.id, this.codePoints, this.features);
36752 }
36753 constructor(font, id, codePoints = [], features){
36754 this._font = font;
36755 this.codePoints = codePoints;
36756 this.id = id;
36757 this.features = {};
36758 if (Array.isArray(features)) for(let i = 0; i < features.length; i++){
36759 let feature = features[i];
36760 this.features[feature] = true;
36761 }
36762 else if (typeof features === 'object') Object.assign(this.features, features);
36763 this.ligatureID = null;
36764 this.ligatureComponent = null;
36765 this.isLigated = false;
36766 this.cursiveAttachment = null;
36767 this.markAttachment = null;
36768 this.shaperInfo = null;
36769 this.substituted = false;
36770 this.isMultiplied = false;
36771 }
36772}
36773
36774
36775class $643b4d234d3e305f$export$2e2bcd8739ae039 extends $4f61fb8204be1a7c$export$2e2bcd8739ae039 {
36776 static planFeatures(plan) {
36777 plan.add([
36778 'ljmo',
36779 'vjmo',
36780 'tjmo'
36781 ], false);
36782 }
36783 static assignFeatures(plan, glyphs) {
36784 let state = 0;
36785 let i = 0;
36786 while(i < glyphs.length){
36787 let action;
36788 let glyph = glyphs[i];
36789 let code = glyph.codePoints[0];
36790 let type = $643b4d234d3e305f$var$getType(code);
36791 [action, state] = $643b4d234d3e305f$var$STATE_TABLE[state][type];
36792 switch(action){
36793 case $643b4d234d3e305f$var$DECOMPOSE:
36794 // Decompose the composed syllable if it is not supported by the font.
36795 if (!plan.font.hasGlyphForCodePoint(code)) i = $643b4d234d3e305f$var$decompose(glyphs, i, plan.font);
36796 break;
36797 case $643b4d234d3e305f$var$COMPOSE:
36798 // Found a decomposed syllable. Try to compose if supported by the font.
36799 i = $643b4d234d3e305f$var$compose(glyphs, i, plan.font);
36800 break;
36801 case $643b4d234d3e305f$var$TONE_MARK:
36802 // Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable.
36803 $643b4d234d3e305f$var$reorderToneMark(glyphs, i, plan.font);
36804 break;
36805 case $643b4d234d3e305f$var$INVALID:
36806 // Tone mark has no valid syllable to attach to, so insert a dotted circle
36807 i = $643b4d234d3e305f$var$insertDottedCircle(glyphs, i, plan.font);
36808 break;
36809 }
36810 i++;
36811 }
36812 }
36813}
36814$lzfo4$swchelpers.defineProperty($643b4d234d3e305f$export$2e2bcd8739ae039, "zeroMarkWidths", 'NONE');
36815const $643b4d234d3e305f$var$HANGUL_BASE = 0xac00;
36816const $643b4d234d3e305f$var$HANGUL_END = 0xd7a4;
36817const $643b4d234d3e305f$var$HANGUL_COUNT = $643b4d234d3e305f$var$HANGUL_END - $643b4d234d3e305f$var$HANGUL_BASE + 1;
36818const $643b4d234d3e305f$var$L_BASE = 0x1100; // lead
36819const $643b4d234d3e305f$var$V_BASE = 0x1161; // vowel
36820const $643b4d234d3e305f$var$T_BASE = 0x11a7; // trail
36821const $643b4d234d3e305f$var$L_COUNT = 19;
36822const $643b4d234d3e305f$var$V_COUNT = 21;
36823const $643b4d234d3e305f$var$T_COUNT = 28;
36824const $643b4d234d3e305f$var$L_END = $643b4d234d3e305f$var$L_BASE + $643b4d234d3e305f$var$L_COUNT - 1;
36825const $643b4d234d3e305f$var$V_END = $643b4d234d3e305f$var$V_BASE + $643b4d234d3e305f$var$V_COUNT - 1;
36826const $643b4d234d3e305f$var$T_END = $643b4d234d3e305f$var$T_BASE + $643b4d234d3e305f$var$T_COUNT - 1;
36827const $643b4d234d3e305f$var$DOTTED_CIRCLE = 0x25cc;
36828const $643b4d234d3e305f$var$isL = (code)=>0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c
36829;
36830const $643b4d234d3e305f$var$isV = (code)=>0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6
36831;
36832const $643b4d234d3e305f$var$isT = (code)=>0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb
36833;
36834const $643b4d234d3e305f$var$isTone = (code)=>0x302e <= code && code <= 0x302f
36835;
36836const $643b4d234d3e305f$var$isLVT = (code)=>$643b4d234d3e305f$var$HANGUL_BASE <= code && code <= $643b4d234d3e305f$var$HANGUL_END
36837;
36838const $643b4d234d3e305f$var$isLV = (code)=>code - $643b4d234d3e305f$var$HANGUL_BASE < $643b4d234d3e305f$var$HANGUL_COUNT && (code - $643b4d234d3e305f$var$HANGUL_BASE) % $643b4d234d3e305f$var$T_COUNT === 0
36839;
36840const $643b4d234d3e305f$var$isCombiningL = (code)=>$643b4d234d3e305f$var$L_BASE <= code && code <= $643b4d234d3e305f$var$L_END
36841;
36842const $643b4d234d3e305f$var$isCombiningV = (code)=>$643b4d234d3e305f$var$V_BASE <= code && code <= $643b4d234d3e305f$var$V_END
36843;
36844const $643b4d234d3e305f$var$isCombiningT = (code)=>$643b4d234d3e305f$var$T_BASE + 1 && 1 <= code && code <= $643b4d234d3e305f$var$T_END
36845;
36846// Character categories
36847const $643b4d234d3e305f$var$X = 0; // Other character
36848const $643b4d234d3e305f$var$L = 1; // Leading consonant
36849const $643b4d234d3e305f$var$V = 2; // Medial vowel
36850const $643b4d234d3e305f$var$T = 3; // Trailing consonant
36851const $643b4d234d3e305f$var$LV = 4; // Composed <LV> syllable
36852const $643b4d234d3e305f$var$LVT = 5; // Composed <LVT> syllable
36853const $643b4d234d3e305f$var$M = 6; // Tone mark
36854// This function classifies a character using the above categories.
36855function $643b4d234d3e305f$var$getType(code) {
36856 if ($643b4d234d3e305f$var$isL(code)) return $643b4d234d3e305f$var$L;
36857 if ($643b4d234d3e305f$var$isV(code)) return $643b4d234d3e305f$var$V;
36858 if ($643b4d234d3e305f$var$isT(code)) return $643b4d234d3e305f$var$T;
36859 if ($643b4d234d3e305f$var$isLV(code)) return $643b4d234d3e305f$var$LV;
36860 if ($643b4d234d3e305f$var$isLVT(code)) return $643b4d234d3e305f$var$LVT;
36861 if ($643b4d234d3e305f$var$isTone(code)) return $643b4d234d3e305f$var$M;
36862 return $643b4d234d3e305f$var$X;
36863}
36864// State machine actions
36865const $643b4d234d3e305f$var$NO_ACTION = 0;
36866const $643b4d234d3e305f$var$DECOMPOSE = 1;
36867const $643b4d234d3e305f$var$COMPOSE = 2;
36868const $643b4d234d3e305f$var$TONE_MARK = 4;
36869const $643b4d234d3e305f$var$INVALID = 5;
36870// Build a state machine that accepts valid syllables, and applies actions along the way.
36871// The logic this is implementing is documented at the top of the file.
36872const $643b4d234d3e305f$var$STATE_TABLE = [
36873 // X L V T LV LVT M
36874 // State 0: start state
36875 [
36876 [
36877 $643b4d234d3e305f$var$NO_ACTION,
36878 0
36879 ],
36880 [
36881 $643b4d234d3e305f$var$NO_ACTION,
36882 1
36883 ],
36884 [
36885 $643b4d234d3e305f$var$NO_ACTION,
36886 0
36887 ],
36888 [
36889 $643b4d234d3e305f$var$NO_ACTION,
36890 0
36891 ],
36892 [
36893 $643b4d234d3e305f$var$DECOMPOSE,
36894 2
36895 ],
36896 [
36897 $643b4d234d3e305f$var$DECOMPOSE,
36898 3
36899 ],
36900 [
36901 $643b4d234d3e305f$var$INVALID,
36902 0
36903 ]
36904 ],
36905 // State 1: <L>
36906 [
36907 [
36908 $643b4d234d3e305f$var$NO_ACTION,
36909 0
36910 ],
36911 [
36912 $643b4d234d3e305f$var$NO_ACTION,
36913 1
36914 ],
36915 [
36916 $643b4d234d3e305f$var$COMPOSE,
36917 2
36918 ],
36919 [
36920 $643b4d234d3e305f$var$NO_ACTION,
36921 0
36922 ],
36923 [
36924 $643b4d234d3e305f$var$DECOMPOSE,
36925 2
36926 ],
36927 [
36928 $643b4d234d3e305f$var$DECOMPOSE,
36929 3
36930 ],
36931 [
36932 $643b4d234d3e305f$var$INVALID,
36933 0
36934 ]
36935 ],
36936 // State 2: <L,V> or <LV>
36937 [
36938 [
36939 $643b4d234d3e305f$var$NO_ACTION,
36940 0
36941 ],
36942 [
36943 $643b4d234d3e305f$var$NO_ACTION,
36944 1
36945 ],
36946 [
36947 $643b4d234d3e305f$var$NO_ACTION,
36948 0
36949 ],
36950 [
36951 $643b4d234d3e305f$var$COMPOSE,
36952 3
36953 ],
36954 [
36955 $643b4d234d3e305f$var$DECOMPOSE,
36956 2
36957 ],
36958 [
36959 $643b4d234d3e305f$var$DECOMPOSE,
36960 3
36961 ],
36962 [
36963 $643b4d234d3e305f$var$TONE_MARK,
36964 0
36965 ]
36966 ],
36967 // State 3: <L,V,T> or <LVT>
36968 [
36969 [
36970 $643b4d234d3e305f$var$NO_ACTION,
36971 0
36972 ],
36973 [
36974 $643b4d234d3e305f$var$NO_ACTION,
36975 1
36976 ],
36977 [
36978 $643b4d234d3e305f$var$NO_ACTION,
36979 0
36980 ],
36981 [
36982 $643b4d234d3e305f$var$NO_ACTION,
36983 0
36984 ],
36985 [
36986 $643b4d234d3e305f$var$DECOMPOSE,
36987 2
36988 ],
36989 [
36990 $643b4d234d3e305f$var$DECOMPOSE,
36991 3
36992 ],
36993 [
36994 $643b4d234d3e305f$var$TONE_MARK,
36995 0
36996 ]
36997 ]
36998];
36999function $643b4d234d3e305f$var$getGlyph(font, code, features) {
37000 return new $535fa31b81f74b90$export$2e2bcd8739ae039(font, font.glyphForCodePoint(code).id, [
37001 code
37002 ], features);
37003}
37004function $643b4d234d3e305f$var$decompose(glyphs, i, font) {
37005 let glyph = glyphs[i];
37006 let code = glyph.codePoints[0];
37007 let s = code - $643b4d234d3e305f$var$HANGUL_BASE;
37008 let t = $643b4d234d3e305f$var$T_BASE + s % $643b4d234d3e305f$var$T_COUNT;
37009 s = s / $643b4d234d3e305f$var$T_COUNT | 0;
37010 let l = $643b4d234d3e305f$var$L_BASE + s / $643b4d234d3e305f$var$V_COUNT | 0;
37011 let v = $643b4d234d3e305f$var$V_BASE + s % $643b4d234d3e305f$var$V_COUNT;
37012 // Don't decompose if all of the components are not available
37013 if (!font.hasGlyphForCodePoint(l) || !font.hasGlyphForCodePoint(v) || t !== $643b4d234d3e305f$var$T_BASE && !font.hasGlyphForCodePoint(t)) return i;
37014 // Replace the current glyph with decomposed L, V, and T glyphs,
37015 // and apply the proper OpenType features to each component.
37016 let ljmo = $643b4d234d3e305f$var$getGlyph(font, l, glyph.features);
37017 ljmo.features.ljmo = true;
37018 let vjmo = $643b4d234d3e305f$var$getGlyph(font, v, glyph.features);
37019 vjmo.features.vjmo = true;
37020 let insert = [
37021 ljmo,
37022 vjmo
37023 ];
37024 if (t > $643b4d234d3e305f$var$T_BASE) {
37025 let tjmo = $643b4d234d3e305f$var$getGlyph(font, t, glyph.features);
37026 tjmo.features.tjmo = true;
37027 insert.push(tjmo);
37028 }
37029 glyphs.splice(i, 1, ...insert);
37030 return i + insert.length - 1;
37031}
37032function $643b4d234d3e305f$var$compose(glyphs, i, font) {
37033 let glyph = glyphs[i];
37034 let code = glyphs[i].codePoints[0];
37035 let type = $643b4d234d3e305f$var$getType(code);
37036 let prev = glyphs[i - 1].codePoints[0];
37037 let prevType = $643b4d234d3e305f$var$getType(prev);
37038 // Figure out what type of syllable we're dealing with
37039 let lv, ljmo, vjmo, tjmo;
37040 if (prevType === $643b4d234d3e305f$var$LV && type === $643b4d234d3e305f$var$T) {
37041 // <LV,T>
37042 lv = prev;
37043 tjmo = glyph;
37044 } else {
37045 if (type === $643b4d234d3e305f$var$V) {
37046 // <L,V>
37047 ljmo = glyphs[i - 1];
37048 vjmo = glyph;
37049 } else {
37050 // <L,V,T>
37051 ljmo = glyphs[i - 2];
37052 vjmo = glyphs[i - 1];
37053 tjmo = glyph;
37054 }
37055 let l = ljmo.codePoints[0];
37056 let v = vjmo.codePoints[0];
37057 // Make sure L and V are combining characters
37058 if ($643b4d234d3e305f$var$isCombiningL(l) && $643b4d234d3e305f$var$isCombiningV(v)) lv = $643b4d234d3e305f$var$HANGUL_BASE + ((l - $643b4d234d3e305f$var$L_BASE) * $643b4d234d3e305f$var$V_COUNT + (v - $643b4d234d3e305f$var$V_BASE)) * $643b4d234d3e305f$var$T_COUNT;
37059 }
37060 let t = tjmo && tjmo.codePoints[0] || $643b4d234d3e305f$var$T_BASE;
37061 if (lv != null && (t === $643b4d234d3e305f$var$T_BASE || $643b4d234d3e305f$var$isCombiningT(t))) {
37062 let s = lv + (t - $643b4d234d3e305f$var$T_BASE);
37063 // Replace with a composed glyph if supported by the font,
37064 // otherwise apply the proper OpenType features to each component.
37065 if (font.hasGlyphForCodePoint(s)) {
37066 let del = prevType === $643b4d234d3e305f$var$V ? 3 : 2;
37067 glyphs.splice(i - del + 1, del, $643b4d234d3e305f$var$getGlyph(font, s, glyph.features));
37068 return i - del + 1;
37069 }
37070 }
37071 // Didn't compose (either a non-combining component or unsupported by font).
37072 if (ljmo) ljmo.features.ljmo = true;
37073 if (vjmo) vjmo.features.vjmo = true;
37074 if (tjmo) tjmo.features.tjmo = true;
37075 if (prevType === $643b4d234d3e305f$var$LV) {
37076 // Sequence was originally <L,V>, which got combined earlier.
37077 // Either the T was non-combining, or the LVT glyph wasn't supported.
37078 // Decompose the glyph again and apply OT features.
37079 $643b4d234d3e305f$var$decompose(glyphs, i - 1, font);
37080 return i + 1;
37081 }
37082 return i;
37083}
37084function $643b4d234d3e305f$var$getLength(code) {
37085 switch($643b4d234d3e305f$var$getType(code)){
37086 case $643b4d234d3e305f$var$LV:
37087 case $643b4d234d3e305f$var$LVT:
37088 return 1;
37089 case $643b4d234d3e305f$var$V:
37090 return 2;
37091 case $643b4d234d3e305f$var$T:
37092 return 3;
37093 }
37094}
37095function $643b4d234d3e305f$var$reorderToneMark(glyphs, i, font) {
37096 let glyph = glyphs[i];
37097 let code = glyphs[i].codePoints[0];
37098 // Move tone mark to the beginning of the previous syllable, unless it is zero width
37099 if (font.glyphForCodePoint(code).advanceWidth === 0) return;
37100 let prev = glyphs[i - 1].codePoints[0];
37101 let len = $643b4d234d3e305f$var$getLength(prev);
37102 glyphs.splice(i, 1);
37103 return glyphs.splice(i - len, 0, glyph);
37104}
37105function $643b4d234d3e305f$var$insertDottedCircle(glyphs, i, font) {
37106 let glyph = glyphs[i];
37107 let code = glyphs[i].codePoints[0];
37108 if (font.hasGlyphForCodePoint($643b4d234d3e305f$var$DOTTED_CIRCLE)) {
37109 let dottedCircle = $643b4d234d3e305f$var$getGlyph(font, $643b4d234d3e305f$var$DOTTED_CIRCLE, glyph.features);
37110 // If the tone mark is zero width, insert the dotted circle before, otherwise after
37111 let idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1;
37112 glyphs.splice(idx, 0, dottedCircle);
37113 i++;
37114 }
37115 return i;
37116}
37117
37118
37119
37120
37121
37122
37123
37124
37125
37126var $e319ffc9285ff10a$exports = {};
37127$e319ffc9285ff10a$exports = JSON.parse("{\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,14,15,16,17],[0,0,0,18,19,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,28,29,30,31,32,33,0,34,0,0,35,36,0,0,37,0],[0,0,0,38,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,39,0,0,0,40,41,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,12,43,0,0,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,0,43,0,0,0,0],[0,0,0,45,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,50,0,0,51,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0],[0,0,0,53,54,55,56,57,58,0,59,0,0,60,61,0,0,62,0],[0,0,0,4,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,63,64,0,0,40,41,0,9,0,10,0,0,0,42,0,63,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,0,2,16,0],[0,0,0,18,65,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,0,0],[0,0,0,69,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,73,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,75,0,0,0,76,77,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,25,79,0,0,0,0],[0,0,0,18,19,20,74,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,81,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,86,0,0,87,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0,0,0,0],[0,0,0,18,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,89,90,0,0,76,77,0,23,0,24,0,0,0,78,0,89,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,0,0],[0,0,0,94,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,96,0,0,0,97,98,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,35,100,0,0,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,102,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,107,0,0,108,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0],[0,0,0,28,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,110,111,0,0,97,98,0,33,0,34,0,0,0,99,0,110,0,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,0,0],[0,0,0,0,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,0,0,115,116,117,118,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,39,0,122,0,123,123,8,9,0,10,0,0,0,42,0,39,0,0],[0,124,64,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,0],[0,39,0,0,0,121,125,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,126,126,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,47,47,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,128,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,129,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,50,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,134,0,0,0,0,0,0,0,0],[0,0,0,135,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,136,0,0,0,137,138,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,60,140,0,0,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,0,140,0,0,0,0],[0,0,0,142,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,147,0,0,148,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,149,0,0,0,0,0,0,0,0],[0,0,0,53,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,150,151,0,0,137,138,0,58,0,59,0,0,0,139,0,150,0,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,0,0],[0,0,0,155,116,156,157,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,75,3,4,5,159,160,8,161,0,162,0,11,12,163,0,75,16,0],[0,0,0,0,0,40,164,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,0,165,0,0,0,0],[0,124,64,0,0,40,164,0,9,0,10,0,0,0,42,0,124,0,0],[0,0,0,0,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,71,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,167,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,168,0,0,0,0,0,0,0,0],[0,0,0,0,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,0,79,0,0,0,0],[0,0,0,169,170,171,172,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,75,0,176,0,177,177,22,23,0,24,0,0,0,78,0,75,0,0],[0,178,90,0,0,0,0,0,0,0,0,0,0,0,0,0,178,0,0],[0,75,0,0,0,175,179,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,180,180,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,83,83,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,182,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,183,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,86,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,188,0,0,0,0,0,0,0,0],[0,0,0,189,170,190,191,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,76,193,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,0,194,0,0,0,0],[0,178,90,0,0,76,193,0,23,0,24,0,0,0,78,0,178,0,0],[0,0,0,0,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,195,196,197,198,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,96,0,202,0,203,203,32,33,0,34,0,0,0,99,0,96,0,0],[0,204,111,0,0,0,0,0,0,0,0,0,0,0,0,0,204,0,0],[0,96,0,0,0,201,205,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,206,206,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,104,104,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,208,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,209,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,107,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,214,0,0,0,0,0,0,0,0],[0,0,0,215,196,216,217,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,97,219,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,0,220,0,0,0,0],[0,204,111,0,0,97,219,0,33,0,34,0,0,0,99,0,204,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,223,0,0,0,40,224,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,119,225,0,0,0,0],[0,0,0,115,116,117,222,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,115,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,226,64,0,0,40,224,0,9,0,10,0,0,0,42,0,226,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,39,0,0,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,44,44,8,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,227,0,228,229,0,9,0,10,0,0,230,0,0,0,0,0],[0,39,0,122,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,231,231,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,232,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,131,131,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,234,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,235,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,0,0,240,241,242,243,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,136,0,247,0,248,248,57,58,0,59,0,0,0,139,0,136,0,0],[0,249,151,0,0,0,0,0,0,0,0,0,0,0,0,0,249,0,0],[0,136,0,0,0,246,250,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,251,251,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,144,144,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,253,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,254,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,147,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,0],[0,0,0,260,241,261,262,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,137,264,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,0,265,0,0,0,0],[0,249,151,0,0,137,264,0,58,0,59,0,0,0,139,0,249,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,158,225,0,0,0,0],[0,0,0,155,116,156,222,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,155,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,43,266,266,8,161,0,24,0,0,12,267,0,0,0,0],[0,75,0,176,43,268,268,269,161,0,24,0,0,0,267,0,75,0,0],[0,0,0,0,0,270,0,0,271,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,272,0,0,0,0,0,0,0,0],[0,273,274,0,0,40,41,0,9,0,10,0,0,0,42,0,273,0,0],[0,0,0,40,0,123,123,8,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,121,275,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,276,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,279,0,0,0,76,280,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,173,281,0,0,0,0],[0,0,0,169,170,171,278,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,169,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,282,90,0,0,76,280,0,23,0,24,0,0,0,78,0,282,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,75,0,0,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,80,80,22,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,283,0,284,285,0,23,0,24,0,0,286,0,0,0,0,0],[0,75,0,176,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,287,287,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,288,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,185,185,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,290,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,291,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,192,281,0,0,0,0],[0,0,0,189,170,190,278,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,189,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,76,0,177,177,22,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,175,296,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,299,0,0,0,97,300,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,199,301,0,0,0,0],[0,0,0,195,196,197,298,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,195,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,302,111,0,0,97,300,0,33,0,34,0,0,0,99,0,302,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,96,0,0,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,101,101,32,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,303,0,304,305,0,33,0,34,0,0,306,0,0,0,0,0],[0,96,0,202,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,307,307,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,308,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,211,211,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,310,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,311,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,218,301,0,0,0,0],[0,0,0,215,196,216,298,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,215,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,97,0,203,203,32,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,201,316,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,0,225,0,0,0,0],[0,0,0,317,318,319,320,8,9,0,10,0,0,321,322,0,0,16,0],[0,223,0,323,0,123,123,8,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,0,0,121,324,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,325,318,326,327,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,64,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,230,0,0,0,0,0],[0,0,0,227,0,228,121,0,9,0,10,0,0,230,0,0,0,0,0],[0,0,0,227,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,0,0],[0,0,0,0,0,329,329,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,330,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,237,237,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,332,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,333,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,337,0,0,0,137,338,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,244,339,0,0,0,0],[0,0,0,240,241,242,336,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,240,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,340,151,0,0,137,338,0,58,0,59,0,0,0,139,0,340,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,136,0,0,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,141,141,57,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,341,0,342,343,0,58,0,59,0,0,344,0,0,0,0,0],[0,136,0,247,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,0,0,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,345,345,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,346,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,256,256,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,348,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,349,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,263,339,0,0,0,0],[0,0,0,260,241,261,336,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,260,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,137,0,248,248,57,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,246,354,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,126,126,8,23,0,0,0,0,0,0,0,0,0,0],[0,355,90,0,0,121,125,0,9,0,10,0,0,0,42,0,355,0,0],[0,0,0,0,0,356,356,269,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,357,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,270,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,363,0,0,0,0,0,0,0,0],[0,0,0,364,116,365,366,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,40,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,0,281,0,0,0,0],[0,0,0,369,370,371,372,22,23,0,24,0,0,373,374,0,0,27,0],[0,279,0,375,0,177,177,22,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,0,0,175,376,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,377,370,378,379,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,90,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,286,0,0,0,0,0],[0,0,0,283,0,284,175,0,23,0,24,0,0,286,0,0,0,0,0],[0,0,0,283,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,0,0],[0,0,0,0,0,381,381,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,382,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,293,293,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,384,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,385,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,76,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,0,301,0,0,0,0],[0,0,0,387,388,389,390,32,33,0,34,0,0,391,392,0,0,37,0],[0,299,0,393,0,203,203,32,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,0,0,201,394,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,395,388,396,397,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,111,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,306,0,0,0,0,0],[0,0,0,303,0,304,201,0,33,0,34,0,0,306,0,0,0,0,0],[0,0,0,303,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,0,0],[0,0,0,0,0,399,399,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,313,313,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,402,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,403,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,97,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,407,0,0,0,40,408,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,321,409,0,0,0,0],[0,0,0,317,318,319,406,8,9,0,10,0,0,321,322,0,0,16,0],[0,0,0,317,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,410,64,0,0,40,408,0,9,0,10,0,0,0,42,0,410,0,0],[0,223,0,0,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,323,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,328,409,0,0,0,0],[0,0,0,325,318,326,406,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,325,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,0,0,0,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,0,0],[0,0,0,0,0,411,411,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,412,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,413,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,0,339,0,0,0,0],[0,0,0,414,415,416,417,57,58,0,59,0,0,418,419,0,0,62,0],[0,337,0,420,0,248,248,57,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,0,0,246,421,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,422,415,423,424,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,151,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,344,0,0,0,0,0],[0,0,0,341,0,342,246,0,58,0,59,0,0,344,0,0,0,0,0],[0,0,0,341,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,143,0,0],[0,0,0,0,0,426,426,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,427,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,351,351,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,429,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,430,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,137,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,432,116,433,434,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,0,0,180,180,269,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,359,359,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,437,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,438,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,443,274,0,0,0,0,0,0,0,0,0,0,0,0,0,443,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,367,225,0,0,0,0],[0,0,0,364,116,365,445,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,364,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,448,0,0,0,76,449,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,373,450,0,0,0,0],[0,0,0,369,370,371,447,22,23,0,24,0,0,373,374,0,0,27,0],[0,0,0,369,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,451,90,0,0,76,449,0,23,0,24,0,0,0,78,0,451,0,0],[0,279,0,0,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,375,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,380,450,0,0,0,0],[0,0,0,377,370,378,447,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,377,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,0,0,0,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,0,0],[0,0,0,0,0,452,452,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,453,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,454,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,457,0,0,0,97,458,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,391,459,0,0,0,0],[0,0,0,387,388,389,456,32,33,0,34,0,0,391,392,0,0,37,0],[0,0,0,387,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,460,111,0,0,97,458,0,33,0,34,0,0,0,99,0,460,0,0],[0,299,0,0,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,393,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,398,459,0,0,0,0],[0,0,0,395,388,396,456,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,395,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,0,0,0,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0],[0,0,0,0,0,461,461,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,462,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,463,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,0,409,0,0,0,0],[0,0,0,464,465,466,467,8,9,0,10,0,0,468,469,0,0,16,0],[0,407,0,470,0,123,123,8,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,0,0,121,471,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,472,465,473,474,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,0,0,0,0,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,236,0,0],[0,0,0,0,0,0,476,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,479,0,0,0,137,480,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,418,481,0,0,0,0],[0,0,0,414,415,416,478,57,58,0,59,0,0,418,419,0,0,62,0],[0,0,0,414,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,482,151,0,0,137,480,0,58,0,59,0,0,0,139,0,482,0,0],[0,337,0,0,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,420,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,425,481,0,0,0,0],[0,0,0,422,415,423,478,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,422,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,0,0,0,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0],[0,0,0,0,0,483,483,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,484,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,485,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,435,225,0,0,0,0],[0,0,0,432,116,433,445,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,432,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,486,486,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,487,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,440,440,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,489,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,490,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,495,0,496,497,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,0,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,0,225,0,0,0,0],[0,0,0,0,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,0,450,0,0,0,0],[0,0,0,499,500,501,502,22,23,0,24,0,0,503,504,0,0,27,0],[0,448,0,505,0,177,177,22,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,0,0,175,506,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,507,500,508,509,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,0,0,0,0,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,0,0],[0,0,0,0,0,0,511,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,0,459,0,0,0,0],[0,0,0,512,513,514,515,32,33,0,34,0,0,516,517,0,0,37,0],[0,457,0,518,0,203,203,32,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,0,0,201,519,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,520,513,521,522,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,0,0,0,0,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,0,0],[0,0,0,0,0,0,524,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,527,0,0,0,40,528,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,468,529,0,0,0,0],[0,0,0,464,465,466,526,8,9,0,10,0,0,468,469,0,0,16,0],[0,0,0,464,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,530,64,0,0,40,528,0,9,0,10,0,0,0,42,0,530,0,0],[0,407,0,0,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,470,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,475,529,0,0,0,0],[0,0,0,472,465,473,526,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,472,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0],[0,0,0,0,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,0,481,0,0,0,0],[0,0,0,531,532,533,534,57,58,0,59,0,0,535,536,0,0,62,0],[0,479,0,537,0,248,248,57,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,0,0,246,538,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,539,532,540,541,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,0,0,0,0,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,350,0,0],[0,0,0,0,0,0,543,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,358,0,0],[0,0,0,0,0,544,544,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,545,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,492,492,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,547,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,548,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,274,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,498,0,0,0,0,0],[0,0,0,495,0,496,368,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,495,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,553,0,0,0,76,554,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,503,555,0,0,0,0],[0,0,0,499,500,501,552,22,23,0,24,0,0,503,504,0,0,27,0],[0,0,0,499,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,556,90,0,0,76,554,0,23,0,24,0,0,0,78,0,556,0,0],[0,448,0,0,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,505,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,510,555,0,0,0,0],[0,0,0,507,500,508,552,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,507,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,559,0,0,0,97,560,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,516,561,0,0,0,0],[0,0,0,512,513,514,558,32,33,0,34,0,0,516,517,0,0,37,0],[0,0,0,512,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,562,111,0,0,97,560,0,33,0,34,0,0,0,99,0,562,0,0],[0,457,0,0,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,518,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,523,561,0,0,0,0],[0,0,0,520,513,521,558,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,520,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,0],[0,0,0,0,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,0,529,0,0,0,0],[0,0,0,563,66,564,565,8,9,0,10,0,0,566,68,0,0,16,0],[0,527,0,567,0,123,123,8,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,0,0,121,568,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,569,66,570,571,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,575,0,0,0,137,576,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,535,577,0,0,0,0],[0,0,0,531,532,533,574,57,58,0,59,0,0,535,536,0,0,62,0],[0,0,0,531,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,578,151,0,0,137,576,0,58,0,59,0,0,0,139,0,578,0,0],[0,479,0,0,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,537,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,542,577,0,0,0,0],[0,0,0,539,532,540,574,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,539,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,0,0],[0,0,0,0,0,0,0,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,439,0,0],[0,0,0,0,0,579,579,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,580,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,581,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,0,555,0,0,0,0],[0,0,0,582,91,583,584,22,23,0,24,0,0,585,93,0,0,27,0],[0,553,0,586,0,177,177,22,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,0,0,175,587,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,588,91,589,590,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,0,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,0,561,0,0,0,0],[0,0,0,592,112,593,594,32,33,0,34,0,0,595,114,0,0,37,0],[0,559,0,596,0,203,203,32,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,0,0,201,597,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,598,112,599,600,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,566,165,0,0,0,0],[0,0,0,563,66,564,67,8,9,0,10,0,0,566,68,0,0,16,0],[0,0,0,563,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,527,0,0,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,567,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,572,165,0,0,0,0],[0,0,0,569,66,570,67,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,569,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,0,577,0,0,0,0],[0,0,0,603,152,604,605,57,58,0,59,0,0,606,154,0,0,62,0],[0,575,0,607,0,248,248,57,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,0,0,246,608,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,609,152,610,611,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,0,0,0,0,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,491,0,0],[0,0,0,0,0,0,613,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,585,194,0,0,0,0],[0,0,0,582,91,583,92,22,23,0,24,0,0,585,93,0,0,27,0],[0,0,0,582,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,553,0,0,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,586,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,591,194,0,0,0,0],[0,0,0,588,91,589,92,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,588,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,595,220,0,0,0,0],[0,0,0,592,112,593,113,32,33,0,34,0,0,595,114,0,0,37,0],[0,0,0,592,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,559,0,0,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,596,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,601,220,0,0,0,0],[0,0,0,598,112,599,113,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,598,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,606,265,0,0,0,0],[0,0,0,603,152,604,153,57,58,0,59,0,0,606,154,0,0,62,0],[0,0,0,603,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,575,0,0,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,607,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,612,265,0,0,0,0],[0,0,0,609,152,610,153,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,609,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,549,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0]],\"accepting\":[false,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,false,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,false,false,true,false,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,false,false,true,true,false,false,true,true,true,false,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,false,false,false,false,false,false,false,true,true,false,false,true,true,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,false,true,true,false,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,false,true,true,true,true,true,false,true,true,false,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"symbol_cluster\"],[],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"standalone_cluster\"]]}");
37128
37129
37130var $440f7c22deab646c$exports = {};
37131$440f7c22deab646c$exports = JSON.parse("{\"categories\":[\"O\",\"IND\",\"S\",\"GB\",\"B\",\"FM\",\"CGJ\",\"VMAbv\",\"VMPst\",\"VAbv\",\"VPst\",\"CMBlw\",\"VPre\",\"VBlw\",\"H\",\"VMBlw\",\"CMAbv\",\"MBlw\",\"CS\",\"R\",\"SUB\",\"MPst\",\"MPre\",\"FAbv\",\"FPst\",\"FBlw\",\"SMAbv\",\"SMBlw\",\"VMPre\",\"ZWNJ\",\"ZWJ\",\"WJ\",\"VS\",\"N\",\"HN\",\"MAbv\"],\"decompositions\":{\"2507\":[2503,2494],\"2508\":[2503,2519],\"2888\":[2887,2902],\"2891\":[2887,2878],\"2892\":[2887,2903],\"3018\":[3014,3006],\"3019\":[3015,3006],\"3020\":[3014,3031],\"3144\":[3142,3158],\"3264\":[3263,3285],\"3271\":[3270,3285],\"3272\":[3270,3286],\"3274\":[3270,3266],\"3275\":[3270,3266,3285],\"3402\":[3398,3390],\"3403\":[3399,3390],\"3404\":[3398,3415],\"3546\":[3545,3530],\"3548\":[3545,3535],\"3549\":[3545,3535,3530],\"3550\":[3545,3551],\"3635\":[3661,3634],\"3763\":[3789,3762],\"3955\":[3953,3954],\"3957\":[3953,3956],\"3958\":[4018,3968],\"3959\":[4018,3953,3968],\"3960\":[4019,3968],\"3961\":[4019,3953,3968],\"3969\":[3953,3968],\"6971\":[6970,6965],\"6973\":[6972,6965],\"6976\":[6974,6965],\"6977\":[6975,6965],\"6979\":[6978,6965],\"69934\":[69937,69927],\"69935\":[69938,69927],\"70475\":[70471,70462],\"70476\":[70471,70487],\"70843\":[70841,70842],\"70844\":[70841,70832],\"70846\":[70841,70845],\"71098\":[71096,71087],\"71099\":[71097,71087]},\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[2,2,3,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,17,18,11,19,20,21,22,0,0,23,0,0,2,0,24,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,27,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,46,0,0,0,39,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,23,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,23,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,23,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,23,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,23,0,0,0,0,0,0,0],[0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,23,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,11,0,20,21,22,0,0,23,0,0,0,0,0,0,0],[0,0,0,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,23,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,23,0,0,0,49,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,23,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,22,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,23,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,23,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,46,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,46,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,46,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,46,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,46,0,0,0,0,0,0,0],[0,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,46,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,35,0,43,44,45,0,0,46,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,46,0,0,0,53,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,46,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,45,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,46,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,46,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,23,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,23,0,0,0,0,0,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,46,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,46,0,0,0,0,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0]],\"accepting\":[false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"virama_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"number_joiner_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"numeral_cluster\"]]}");
37132
37133
37134const $76a40fa3f66cc629$export$a513ea61a7bee91c = {
37135 X: 1,
37136 C: 2,
37137 V: 4,
37138 N: 8,
37139 H: 16,
37140 ZWNJ: 32,
37141 ZWJ: 64,
37142 M: 128,
37143 SM: 256,
37144 VD: 512,
37145 A: 1024,
37146 Placeholder: 2048,
37147 Dotted_Circle: 4096,
37148 RS: 8192,
37149 Coeng: 16384,
37150 Repha: 32768,
37151 Ra: 65536,
37152 CM: 131072,
37153 Symbol: 262144 // Avagraha, etc that take marks (SM,A,VD).
37154};
37155const $76a40fa3f66cc629$export$1a1f61c9c4dd9df0 = {
37156 Start: 1,
37157 Ra_To_Become_Reph: 2,
37158 Pre_M: 4,
37159 Pre_C: 8,
37160 Base_C: 16,
37161 After_Main: 32,
37162 Above_C: 64,
37163 Before_Sub: 128,
37164 Below_C: 256,
37165 After_Sub: 512,
37166 Before_Post: 1024,
37167 Post_C: 2048,
37168 After_Post: 4096,
37169 Final_C: 8192,
37170 SMVD: 16384,
37171 End: 32768
37172};
37173const $76a40fa3f66cc629$export$8519deaa7de2b07 = $76a40fa3f66cc629$export$a513ea61a7bee91c.C | $76a40fa3f66cc629$export$a513ea61a7bee91c.Ra | $76a40fa3f66cc629$export$a513ea61a7bee91c.CM | $76a40fa3f66cc629$export$a513ea61a7bee91c.V | $76a40fa3f66cc629$export$a513ea61a7bee91c.Placeholder | $76a40fa3f66cc629$export$a513ea61a7bee91c.Dotted_Circle;
37174const $76a40fa3f66cc629$export$bbcd928767338e0d = $76a40fa3f66cc629$export$a513ea61a7bee91c.ZWJ | $76a40fa3f66cc629$export$a513ea61a7bee91c.ZWNJ;
37175const $76a40fa3f66cc629$export$ca9599b2a300afc = $76a40fa3f66cc629$export$a513ea61a7bee91c.H | $76a40fa3f66cc629$export$a513ea61a7bee91c.Coeng;
37176const $76a40fa3f66cc629$export$e99d119da76a0fc5 = {
37177 Default: {
37178 hasOldSpec: false,
37179 virama: 0,
37180 basePos: 'Last',
37181 rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Before_Post,
37182 rephMode: 'Implicit',
37183 blwfMode: 'Pre_And_Post'
37184 },
37185 Devanagari: {
37186 hasOldSpec: true,
37187 virama: 0x094D,
37188 basePos: 'Last',
37189 rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Before_Post,
37190 rephMode: 'Implicit',
37191 blwfMode: 'Pre_And_Post'
37192 },
37193 Bengali: {
37194 hasOldSpec: true,
37195 virama: 0x09CD,
37196 basePos: 'Last',
37197 rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.After_Sub,
37198 rephMode: 'Implicit',
37199 blwfMode: 'Pre_And_Post'
37200 },
37201 Gurmukhi: {
37202 hasOldSpec: true,
37203 virama: 0x0A4D,
37204 basePos: 'Last',
37205 rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Before_Sub,
37206 rephMode: 'Implicit',
37207 blwfMode: 'Pre_And_Post'
37208 },
37209 Gujarati: {
37210 hasOldSpec: true,
37211 virama: 0x0ACD,
37212 basePos: 'Last',
37213 rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Before_Post,
37214 rephMode: 'Implicit',
37215 blwfMode: 'Pre_And_Post'
37216 },
37217 Oriya: {
37218 hasOldSpec: true,
37219 virama: 0x0B4D,
37220 basePos: 'Last',
37221 rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.After_Main,
37222 rephMode: 'Implicit',
37223 blwfMode: 'Pre_And_Post'
37224 },
37225 Tamil: {
37226 hasOldSpec: true,
37227 virama: 0x0BCD,
37228 basePos: 'Last',
37229 rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.After_Post,
37230 rephMode: 'Implicit',
37231 blwfMode: 'Pre_And_Post'
37232 },
37233 Telugu: {
37234 hasOldSpec: true,
37235 virama: 0x0C4D,
37236 basePos: 'Last',
37237 rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.After_Post,
37238 rephMode: 'Explicit',
37239 blwfMode: 'Post_Only'
37240 },
37241 Kannada: {
37242 hasOldSpec: true,
37243 virama: 0x0CCD,
37244 basePos: 'Last',
37245 rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.After_Post,
37246 rephMode: 'Implicit',
37247 blwfMode: 'Post_Only'
37248 },
37249 Malayalam: {
37250 hasOldSpec: true,
37251 virama: 0x0D4D,
37252 basePos: 'Last',
37253 rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.After_Main,
37254 rephMode: 'Log_Repha',
37255 blwfMode: 'Pre_And_Post'
37256 },
37257 // Handled by UniversalShaper
37258 // Sinhala: {
37259 // hasOldSpec: false,
37260 // virama: 0x0DCA,
37261 // basePos: 'Last_Sinhala',
37262 // rephPos: POSITIONS.After_Main,
37263 // rephMode: 'Explicit',
37264 // blwfMode: 'Pre_And_Post'
37265 // },
37266 Khmer: {
37267 hasOldSpec: false,
37268 virama: 0x17D2,
37269 basePos: 'First',
37270 rephPos: $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Ra_To_Become_Reph,
37271 rephMode: 'Vis_Repha',
37272 blwfMode: 'Pre_And_Post'
37273 }
37274};
37275const $76a40fa3f66cc629$export$f647c9cfdd77d95a = {
37276 // Khmer
37277 0x17BE: [
37278 0x17C1,
37279 0x17BE
37280 ],
37281 0x17BF: [
37282 0x17C1,
37283 0x17BF
37284 ],
37285 0x17C0: [
37286 0x17C1,
37287 0x17C0
37288 ],
37289 0x17C4: [
37290 0x17C1,
37291 0x17C4
37292 ],
37293 0x17C5: [
37294 0x17C1,
37295 0x17C5
37296 ]
37297};
37298
37299
37300
37301var $88aa30158a161372$require$Buffer = $lzfo4$buffer.Buffer;
37302const { decompositions: $88aa30158a161372$var$decompositions } = (/*@__PURE__*/$parcel$interopDefault($440f7c22deab646c$exports));
37303const $88aa30158a161372$var$trie = new ($parcel$interopDefault($lzfo4$unicodetrie))($88aa30158a161372$require$Buffer.from("AAARAAAAAACgwgAAAbENTvLtnX+sHUUVx/f13nd/vHf7bl+FRGL7R0OJMcWYphBrimkVCSJR2xiEaLEGQ7AkBGowbYRSgj8K2B/GkpRYE6wlQSyJKCagrSlGkmqsqUZMY7S2CWkgqQViQSkt4Hfuzrx77tyZ2fm1u+/RPcknuzs7O3PmnDOzs7N73zteS5KXwKvgDTCnniTvBfPBJeAVpP2vFr69GGUtAkvAModyr0DeT4BrwCpwPVgDbga3ga+DjYbyluLcCvBN8F2wGWwHO8Ej4DjyPIbtz0DCeZpvD4CD4E/gb+AoOAFOgtPgLKiNJkkbTIKLwALwfvAh8GGwHFwFPg2uAzeCm8Ft4E5wN7gPPAi+D34AfgR+Ap7kx8+AZ8HvwZ/BEXAMvAheAa+Bc6OpzvVGknTABY30eB62C8GlYDFYCpaDq/n5z2J7PVgDbgG3N1KbrOdbWzby/N/G9i6wlR8/wLebUNcOll7vX7PLsQ4bdpAy92B/L3gK7AO/A38EfwX/AC+AkyT/m3x7mqdtYz7Gfq2ZJOPgPc3UXu/D9uJmmmcRT1uC7TJwZTONJxFL1+J4JbgBrAG3gNv5Nev5dhO2m3l54rqtON7RNLd1V8Z5auMfI+8Wbvv12P4Ux78AvyZl/Bb7fwD34HwH/EVR/t8t6rRlrYgFlHnMsdyXIupRFP+Gzv8Bb4CklSSjrTR9bz21uZx/Nj8v+uIFOJ4HFnJo3kWtNG6WkPSzBl1YbC8jeVfx+q+R9Pg48lxN8jFdhd8+01LrLTCdq6io8GNb1a8qKioqKioqKioc2cbXGcrWQ2Ynf9a9rmV/zVua9Dc16V/gz8pfxvar4A6wAdwL7gdbwUPgh+BR8AR4qpWuLe3D9gA4CA6DI+AoOAFOtdL1nNexfYs937fxDA8ubKf1zmv3dViI/Uvb9m2sqKioqAiHrVtehrH3TK2/3l4WZduioqIiDq+Rd1Jbef9ehnHmSnCtNNf7nOPcr8PHilO8jrfBF9v996lfwf6tUpl3tPvvdSjsvcwGnLt3Gsw/kzkpK8CdYH83my3Id0iT91WkL5xMktXgIfD85OD54zjfmYu5OFgN7h1LkmdBMg5fgbvAChzv49ujfEuZ3xlOk7kReTaSfL/B/jl+fMXsJLkb7AcPj8TlHC/zsgnYcyLd3zSh1vGAJr2ioqKiIn/eKXkMjn3/cWF5t/z6y37+K5urwP2YB36vPfw8yr7zeRjpu8g8cTf2H2+n89EtivLE93fs27Ez/Br2vM2+qWPl/ZyX9StFfQxW5v724PPxzXz7XHu4Pps5Jvtmiq13szmzfP0hlHkYHGn358bHeD0vYvsy+K+kz9vt/jy8gT40G1w4Rua0PN98nnaGf/e1G+mXIO2DY8P6Xz7WPz7Ky/7omJ0PBff4+B91fAqsAp8HXwI3gR04txbbdWDDWDpP/g7Yxs6BXWAP2AueJHo+M5bOpw+Cw+AIOApOgFMW7Xkdec6AkXH1+QfgyzbOTY73jy/C/gJ+/CCOP4D9xfz4I9h+TFMWtf9SRWzZwq7f0yi/L9voWSRbDfV/clx/3TuKfjoT26/iX813URx4tiVG3ay/sfFuJenb7J50A4mr1di/CZzLKZ6y2reunup4qzT+fM0wHp0PUD9+A7bYNJ5fn3eNP/Ft5bc0+S4n9/l1Gj+K82zesd1wfj3fZ79h2YyyVvLj7djfCR4xjJEyuy1+S/FyDt/MPwodn5hB8axrxy9nSBtYjOyHrs+BQ+B58E+u+wsWbWBtpb/hYL8RuA/pJ8fT2GffX+wl+daSa08jz9nxNG2k4963XBG/ZVhpUS573mh3BtPo7x/Eb7pE2yd5XvZssY/M/RZLc9SLeDsfD5gfTidi9//pwrzWu7t9lKcN7dxynthAh8vcKrQu1frHTGKBNF662KfoOXU1FsaFxe6x2kjClkBnGvXxwX0bytZ5unK+S9n2jxabTc5M0HUaIyTrfFa+Ljmflc9Xz7JtNdPa4eKz6WAPlb5l6xfLBzopWxcfncvSf7rHRJk2KSN2bKRsvcu2UZmxVIb9qd551e8rZcTERGuQ+qwIjERkjl2+djOlhWfpibnp/qxmP92FVr1/bc9GYxxuI5o3UzdukzYpj+H6nOxra9nHiaksjhDdsasPe9ca/CvOU1GVwUT4t8P921H4T8gsnkdIh+dn/pXrU0mnOZw21CbJv1P5LP0r4jtkbLH171BbCvavnFfeZ8L8K2wv/CuQRU6n/qWSNSbr2mO8xtK/U+Mq6Y/1yQyFJHHtv8Kn2uOC/Gvbf2VEPxJ9SvhY5d+Q+y21iRxLruOzsY6MWGrOkPHZ1b+jFuPzqEX/VcmoZkyIPT53k36/DZnrMd+K/Dbjs6kv6+6VYl9OU+WT07TplvMvWWhfVo3f4t48S+rbjIZl/1b5Xyd5vJdQiTyf7tUdMlbn0J9d/cn6c7M5DO1TNF0+bmT0Z3qdKaaoXeg1Lv7NEhufzyT/6vIKEeO1jX/psdi38a889qpkStcI/u12U3zE1Re+/Yv6QNwvdTDJGi9t2ps1XtKYDJ0PmcZKcU812sRxvms7J47mZ5c+SWJD5LPRg4qqj+nWL8Q5sRVrGar1EG0sOI6ndH3DVWL7wpeuwaY6O1Nh19N+Oqs5uI7Eto3aICxNrCn5rAuZ7Cn2bdJtfZPlL/k8Ld+ki6v9E56XPUvT52mV/YVvmMj2Zz8TEuNMTxfHuFfFUJ60OLrz1utODnFG47fLbSjXy0xSy4gN63EywlhMxWcNmK71svszi5OGTvdJe3rtd8ifB6I/mKBr1ap7uU/sqqTsMb+H5fxBFyuq+yqLnd7cmj33TwyOVVOwuj3nVXRtQtUGWR9jzI6kecZrKSKPuFakU2hZmXXZMDlsS1W9jBavv6eHpf3EtfJ7mKwYV0lX2g9FVY5N+Ung9aH1590+n3KLgEredfiez6u9svisY/Suk9Jsnkli1a+C1m/T7rzqd5UY9mfiXX9R92ibdZUIawTC96b1GBn6rDG1JsPv/b392SkiXVUGmyN0LO5LYi46Zf/Adc/QMaCo8TtG/bH1Z/TsW1QfUPRjm2cZee5PRaT33lEbnhlMax4qe1o/Y8a0icdaoOv9bsh+Hj6jonueoGtHumcMlX9lxLxXq7/D84fSzznGt6rtUerXxYU47/IcPeG3vqBbJ1StETZqg9fS2Akd/0Ovp+/CxD3P+/6bQwzJtsvyh5w+XjeXH9KfXGH3/VbSX4tS4XoftPZbnvcyxX1G5QvW1wbWTkbs7c3mTco6NWODbdxk3R9lGZo/aGxhiknTmETXLVs1c90u9+mBGCf6hs6fsmTq29sxPv8d82CuhCpNjGNjg31blGHrz1i41hd6nuYzbU3XhLQzj7Jt67Otw0uXUdDoH8e4F/joMdVui2dMJc3E+Tetvr6jEtPnPhJaVwz9Y7TDVlx1qnfitlEbtzlTVD0qX/pcm1esxI65PO3mU4eNrr5SZMz46FDE+aIlb5tntb1o/WOUETsW847pvNpaZH225eUpNnrS9yDy9wTysyr9XVOe63+qd3M6e4X6Ptd1Dpc1SdV53ZqFag1hpP+bE5f4ivY74BzXilzWWW1+S0TjJng91Gd9wmbNgpMVz6W8d7GJZwWtWp8p++c8fpjW0Vzff3dJfzGuoersEtnmpjVLupY48H6o7n8/C+kvJn+Lcd6q3QHx3usvZax3W8apvP6rev+UJSHfiCYe/h2aTwTaRi5DO28ZSd9zNhTfJ8b2je7drOo9HtNNbPMW03zOpq2qNqnKFN+0huhlMye2Pe9TdzfCedfxMlRfG7xjncaJ7fiXMYZk3X+ZvuKbXCGh8y8XH8TybajPTfq4tjG2/qb0RJO3SB19ba2SMuoNbW8R/g653qa9sdsRYsssu+ZxPss+tnayFd94yjofEi+hZdvo73q9jd3yisUYbfEpQ9XmMqUIm2fFZh4xkZeE1BNDL5v+ZcqXh/90bSwjflz8U0QcFWHzPOpy0amM+stqf1ad7LltVPqWmG3p3+GiIvLJf8duYA3NcBwbWRpkDXmo7RP+z5E6+8Xswz512dbrW2aMNrpKaBt9y45VR2j9efhAQL/PF38Xadq907NYC5dpZLy3kMX6PUHgeGGS3nfoPn9rObJ9s/4uMntnSt/J5TX+2ZRhtFcB8ZgVmyZbit8GCd/7/C7EOcYK7LdyjNhIlL81nqN/Xf9mOHt/anovP4X0tyem/OUZF9TmscY2nzEulq96ZeVwv2Bxxnwk3s9njT8m/YWOKl199fe53tTXyu5DLojfKWXej6R3RAPtDf1ex/PvtdJ8Q7aP7Ht6XpdXSJf8/wMdQuS/j0/HtKny9KbT+oT2K2ETuW7Tt09Uss5nCdWhjPuMTXzrztO4FHMy+V6TJaH9I6+2C5HPq9oc8xlKRva5rF8M/7tC26/6BsNFivQ//e1pVsyP19VrNrH1D5Wi7oUDdVp8Q5HVr1ztlzXPtH2Gc30+lMX3edH3ecm3fp0+Ps/IPvWH6OpiV7meEMlbzyIkpi1jtDU0Pmm6nMd0jU8bXK7N0jWkb/joHyNebfWgtrJpc0h7QiQP24aKqcwYPnTRIUmG63fRQ5VXLsekgy5NtVXVadLfpjzV9S6xYnuNri159ZmsmLCpJ8/6XSRGOaH659H+GLYtwhd51xvq31B9Qm0UavM84qhoKaNOnfwf", "base64"));
37304const $88aa30158a161372$var$stateMachine = new ($parcel$interopDefault($lzfo4$dfa))((/*@__PURE__*/$parcel$interopDefault($e319ffc9285ff10a$exports)));
37305class $88aa30158a161372$export$2e2bcd8739ae039 extends $4f61fb8204be1a7c$export$2e2bcd8739ae039 {
37306 static planFeatures(plan) {
37307 plan.addStage($88aa30158a161372$var$setupSyllables);
37308 plan.addStage([
37309 'locl',
37310 'ccmp'
37311 ]);
37312 plan.addStage($88aa30158a161372$var$initialReordering);
37313 plan.addStage('nukt');
37314 plan.addStage('akhn');
37315 plan.addStage('rphf', false);
37316 plan.addStage('rkrf');
37317 plan.addStage('pref', false);
37318 plan.addStage('blwf', false);
37319 plan.addStage('abvf', false);
37320 plan.addStage('half', false);
37321 plan.addStage('pstf', false);
37322 plan.addStage('vatu');
37323 plan.addStage('cjct');
37324 plan.addStage('cfar', false);
37325 plan.addStage($88aa30158a161372$var$finalReordering);
37326 plan.addStage({
37327 local: [
37328 'init'
37329 ],
37330 global: [
37331 'pres',
37332 'abvs',
37333 'blws',
37334 'psts',
37335 'haln',
37336 'dist',
37337 'abvm',
37338 'blwm',
37339 'calt',
37340 'clig'
37341 ]
37342 });
37343 // Setup the indic config for the selected script
37344 plan.unicodeScript = $2e3a795a88d7e002$export$ce50e82f12a827a4(plan.script);
37345 plan.indicConfig = $76a40fa3f66cc629$export$e99d119da76a0fc5[plan.unicodeScript] || $76a40fa3f66cc629$export$e99d119da76a0fc5.Default;
37346 plan.isOldSpec = plan.indicConfig.hasOldSpec && plan.script[plan.script.length - 1] !== '2';
37347 // TODO: turn off kern (Khmer) and liga features.
37348 }
37349 static assignFeatures(plan, glyphs) {
37350 // Decompose split matras
37351 // TODO: do this in a more general unicode normalizer
37352 for(let i = glyphs.length - 1; i >= 0; i--){
37353 let codepoint = glyphs[i].codePoints[0];
37354 let d = $76a40fa3f66cc629$export$f647c9cfdd77d95a[codepoint] || $88aa30158a161372$var$decompositions[codepoint];
37355 if (d) {
37356 let decomposed = d.map((c)=>{
37357 let g = plan.font.glyphForCodePoint(c);
37358 return new $535fa31b81f74b90$export$2e2bcd8739ae039(plan.font, g.id, [
37359 c
37360 ], glyphs[i].features);
37361 });
37362 glyphs.splice(i, 1, ...decomposed);
37363 }
37364 }
37365 }
37366}
37367$lzfo4$swchelpers.defineProperty($88aa30158a161372$export$2e2bcd8739ae039, "zeroMarkWidths", 'NONE');
37368function $88aa30158a161372$var$indicCategory(glyph) {
37369 return $88aa30158a161372$var$trie.get(glyph.codePoints[0]) >> 8;
37370}
37371function $88aa30158a161372$var$indicPosition(glyph) {
37372 return 1 << ($88aa30158a161372$var$trie.get(glyph.codePoints[0]) & 0xff);
37373}
37374class $88aa30158a161372$var$IndicInfo {
37375 constructor(category, position, syllableType, syllable){
37376 this.category = category;
37377 this.position = position;
37378 this.syllableType = syllableType;
37379 this.syllable = syllable;
37380 }
37381}
37382function $88aa30158a161372$var$setupSyllables(font, glyphs) {
37383 let syllable = 0;
37384 let last = 0;
37385 for (let [start, end, tags] of $88aa30158a161372$var$stateMachine.match(glyphs.map($88aa30158a161372$var$indicCategory))){
37386 if (start > last) {
37387 ++syllable;
37388 for(let i = last; i < start; i++)glyphs[i].shaperInfo = new $88aa30158a161372$var$IndicInfo($76a40fa3f66cc629$export$a513ea61a7bee91c.X, $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.End, 'non_indic_cluster', syllable);
37389 }
37390 ++syllable;
37391 // Create shaper info
37392 for(let i = start; i <= end; i++)glyphs[i].shaperInfo = new $88aa30158a161372$var$IndicInfo(1 << $88aa30158a161372$var$indicCategory(glyphs[i]), $88aa30158a161372$var$indicPosition(glyphs[i]), tags[0], syllable);
37393 last = end + 1;
37394 }
37395 if (last < glyphs.length) {
37396 ++syllable;
37397 for(let i = last; i < glyphs.length; i++)glyphs[i].shaperInfo = new $88aa30158a161372$var$IndicInfo($76a40fa3f66cc629$export$a513ea61a7bee91c.X, $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.End, 'non_indic_cluster', syllable);
37398 }
37399}
37400function $88aa30158a161372$var$isConsonant(glyph) {
37401 return glyph.shaperInfo.category & $76a40fa3f66cc629$export$8519deaa7de2b07;
37402}
37403function $88aa30158a161372$var$isJoiner(glyph) {
37404 return glyph.shaperInfo.category & $76a40fa3f66cc629$export$bbcd928767338e0d;
37405}
37406function $88aa30158a161372$var$isHalantOrCoeng(glyph) {
37407 return glyph.shaperInfo.category & $76a40fa3f66cc629$export$ca9599b2a300afc;
37408}
37409function $88aa30158a161372$var$wouldSubstitute(glyphs, feature) {
37410 for (let glyph of glyphs)glyph.features = {
37411 [feature]: true
37412 };
37413 let GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor;
37414 GSUB.applyFeatures([
37415 feature
37416 ], glyphs);
37417 return glyphs.length === 1;
37418}
37419function $88aa30158a161372$var$consonantPosition(font, consonant, virama) {
37420 let glyphs = [
37421 virama,
37422 consonant,
37423 virama
37424 ];
37425 if ($88aa30158a161372$var$wouldSubstitute(glyphs.slice(0, 2), 'blwf') || $88aa30158a161372$var$wouldSubstitute(glyphs.slice(1, 3), 'blwf')) return $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Below_C;
37426 else if ($88aa30158a161372$var$wouldSubstitute(glyphs.slice(0, 2), 'pstf') || $88aa30158a161372$var$wouldSubstitute(glyphs.slice(1, 3), 'pstf')) return $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Post_C;
37427 else if ($88aa30158a161372$var$wouldSubstitute(glyphs.slice(0, 2), 'pref') || $88aa30158a161372$var$wouldSubstitute(glyphs.slice(1, 3), 'pref')) return $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Post_C;
37428 return $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Base_C;
37429}
37430function $88aa30158a161372$var$initialReordering(font, glyphs, plan) {
37431 let indicConfig = plan.indicConfig;
37432 let features = font._layoutEngine.engine.GSUBProcessor.features;
37433 let dottedCircle = font.glyphForCodePoint(0x25cc).id;
37434 let virama = font.glyphForCodePoint(indicConfig.virama).id;
37435 if (virama) {
37436 let info = new $535fa31b81f74b90$export$2e2bcd8739ae039(font, virama, [
37437 indicConfig.virama
37438 ]);
37439 for(let i = 0; i < glyphs.length; i++)if (glyphs[i].shaperInfo.position === $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Base_C) glyphs[i].shaperInfo.position = $88aa30158a161372$var$consonantPosition(font, glyphs[i].copy(), info);
37440 }
37441 for(let start = 0, end = $88aa30158a161372$var$nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = $88aa30158a161372$var$nextSyllable(glyphs, start)){
37442 let { category: category , syllableType: syllableType } = glyphs[start].shaperInfo;
37443 if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') continue;
37444 if (syllableType === 'broken_cluster' && dottedCircle) {
37445 let g = new $535fa31b81f74b90$export$2e2bcd8739ae039(font, dottedCircle, [
37446 0x25cc
37447 ]);
37448 g.shaperInfo = new $88aa30158a161372$var$IndicInfo(1 << $88aa30158a161372$var$indicCategory(g), $88aa30158a161372$var$indicPosition(g), glyphs[start].shaperInfo.syllableType, glyphs[start].shaperInfo.syllable);
37449 // Insert after possible Repha.
37450 let i = start;
37451 while(i < end && glyphs[i].shaperInfo.category === $76a40fa3f66cc629$export$a513ea61a7bee91c.Repha)i++;
37452 glyphs.splice(i++, 0, g);
37453 end++;
37454 }
37455 // 1. Find base consonant:
37456 //
37457 // The shaping engine finds the base consonant of the syllable, using the
37458 // following algorithm: starting from the end of the syllable, move backwards
37459 // until a consonant is found that does not have a below-base or post-base
37460 // form (post-base forms have to follow below-base forms), or that is not a
37461 // pre-base reordering Ra, or arrive at the first consonant. The consonant
37462 // stopped at will be the base.
37463 let base = end;
37464 let limit = start;
37465 let hasReph = false;
37466 // If the syllable starts with Ra + Halant (in a script that has Reph)
37467 // and has more than one consonant, Ra is excluded from candidates for
37468 // base consonants.
37469 if (indicConfig.rephPos !== $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Ra_To_Become_Reph && features.rphf && start + 3 <= end && (indicConfig.rephMode === 'Implicit' && !$88aa30158a161372$var$isJoiner(glyphs[start + 2]) || indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === $76a40fa3f66cc629$export$a513ea61a7bee91c.ZWJ)) {
37470 // See if it matches the 'rphf' feature.
37471 let g = [
37472 glyphs[start].copy(),
37473 glyphs[start + 1].copy(),
37474 glyphs[start + 2].copy()
37475 ];
37476 if ($88aa30158a161372$var$wouldSubstitute(g.slice(0, 2), 'rphf') || indicConfig.rephMode === 'Explicit' && $88aa30158a161372$var$wouldSubstitute(g, 'rphf')) {
37477 limit += 2;
37478 while(limit < end && $88aa30158a161372$var$isJoiner(glyphs[limit]))limit++;
37479 base = start;
37480 hasReph = true;
37481 }
37482 } else if (indicConfig.rephMode === 'Log_Repha' && glyphs[start].shaperInfo.category === $76a40fa3f66cc629$export$a513ea61a7bee91c.Repha) {
37483 limit++;
37484 while(limit < end && $88aa30158a161372$var$isJoiner(glyphs[limit]))limit++;
37485 base = start;
37486 hasReph = true;
37487 }
37488 switch(indicConfig.basePos){
37489 case 'Last':
37490 {
37491 // starting from the end of the syllable, move backwards
37492 let i = end;
37493 let seenBelow = false;
37494 do {
37495 let info = glyphs[--i].shaperInfo;
37496 // until a consonant is found
37497 if ($88aa30158a161372$var$isConsonant(glyphs[i])) {
37498 // that does not have a below-base or post-base form
37499 // (post-base forms have to follow below-base forms),
37500 if (info.position !== $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Below_C && (info.position !== $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Post_C || seenBelow)) {
37501 base = i;
37502 break;
37503 }
37504 // or that is not a pre-base reordering Ra,
37505 //
37506 // IMPLEMENTATION NOTES:
37507 //
37508 // Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped
37509 // by the logic above already.
37510 //
37511 // or arrive at the first consonant. The consonant stopped at will
37512 // be the base.
37513 if (info.position === $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Below_C) seenBelow = true;
37514 base = i;
37515 } else if (start < i && info.category === $76a40fa3f66cc629$export$a513ea61a7bee91c.ZWJ && glyphs[i - 1].shaperInfo.category === $76a40fa3f66cc629$export$a513ea61a7bee91c.H) break;
37516 }while (i > limit)
37517 break;
37518 }
37519 case 'First':
37520 // The first consonant is always the base.
37521 base = start;
37522 // Mark all subsequent consonants as below.
37523 for(let i = base + 1; i < end; i++)if ($88aa30158a161372$var$isConsonant(glyphs[i])) glyphs[i].shaperInfo.position = $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Below_C;
37524 }
37525 // If the syllable starts with Ra + Halant (in a script that has Reph)
37526 // and has more than one consonant, Ra is excluded from candidates for
37527 // base consonants.
37528 //
37529 // Only do this for unforced Reph. (ie. not for Ra,H,ZWJ)
37530 if (hasReph && base === start && limit - base <= 2) hasReph = false;
37531 // 2. Decompose and reorder Matras:
37532 //
37533 // Each matra and any syllable modifier sign in the cluster are moved to the
37534 // appropriate position relative to the consonant(s) in the cluster. The
37535 // shaping engine decomposes two- or three-part matras into their constituent
37536 // parts before any repositioning. Matra characters are classified by which
37537 // consonant in a conjunct they have affinity for and are reordered to the
37538 // following positions:
37539 //
37540 // o Before first half form in the syllable
37541 // o After subjoined consonants
37542 // o After post-form consonant
37543 // o After main consonant (for above marks)
37544 //
37545 // IMPLEMENTATION NOTES:
37546 //
37547 // The normalize() routine has already decomposed matras for us, so we don't
37548 // need to worry about that.
37549 // 3. Reorder marks to canonical order:
37550 //
37551 // Adjacent nukta and halant or nukta and vedic sign are always repositioned
37552 // if necessary, so that the nukta is first.
37553 //
37554 // IMPLEMENTATION NOTES:
37555 //
37556 // We don't need to do this: the normalize() routine already did this for us.
37557 // Reorder characters
37558 for(let i1 = start; i1 < base; i1++){
37559 let info = glyphs[i1].shaperInfo;
37560 info.position = Math.min($76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Pre_C, info.position);
37561 }
37562 if (base < end) glyphs[base].shaperInfo.position = $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Base_C;
37563 // Mark final consonants. A final consonant is one appearing after a matra,
37564 // like in Khmer.
37565 for(let i2 = base + 1; i2 < end; i2++)if (glyphs[i2].shaperInfo.category === $76a40fa3f66cc629$export$a513ea61a7bee91c.M) {
37566 for(let j = i2 + 1; j < end; j++)if ($88aa30158a161372$var$isConsonant(glyphs[j])) {
37567 glyphs[j].shaperInfo.position = $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Final_C;
37568 break;
37569 }
37570 break;
37571 }
37572 // Handle beginning Ra
37573 if (hasReph) glyphs[start].shaperInfo.position = $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Ra_To_Become_Reph;
37574 // For old-style Indic script tags, move the first post-base Halant after
37575 // last consonant.
37576 //
37577 // Reports suggest that in some scripts Uniscribe does this only if there
37578 // is *not* a Halant after last consonant already (eg. Kannada), while it
37579 // does it unconditionally in other scripts (eg. Malayalam). We don't
37580 // currently know about other scripts, so we single out Malayalam for now.
37581 //
37582 // Kannada test case:
37583 // U+0C9A,U+0CCD,U+0C9A,U+0CCD
37584 // With some versions of Lohit Kannada.
37585 // https://bugs.freedesktop.org/show_bug.cgi?id=59118
37586 //
37587 // Malayalam test case:
37588 // U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D
37589 // With lohit-ttf-20121122/Lohit-Malayalam.ttf
37590 if (plan.isOldSpec) {
37591 let disallowDoubleHalants = plan.unicodeScript !== 'Malayalam';
37592 for(let i = base + 1; i < end; i++)if (glyphs[i].shaperInfo.category === $76a40fa3f66cc629$export$a513ea61a7bee91c.H) {
37593 let j;
37594 for(j = end - 1; j > i; j--){
37595 if ($88aa30158a161372$var$isConsonant(glyphs[j]) || disallowDoubleHalants && glyphs[j].shaperInfo.category === $76a40fa3f66cc629$export$a513ea61a7bee91c.H) break;
37596 }
37597 if (glyphs[j].shaperInfo.category !== $76a40fa3f66cc629$export$a513ea61a7bee91c.H && j > i) {
37598 // Move Halant to after last consonant.
37599 let t = glyphs[i];
37600 glyphs.splice(i, 0, ...glyphs.splice(i + 1, j - i));
37601 glyphs[j] = t;
37602 }
37603 break;
37604 }
37605 }
37606 // Attach misc marks to previous char to move with them.
37607 let lastPos = $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Start;
37608 for(let i3 = start; i3 < end; i3++){
37609 let info = glyphs[i3].shaperInfo;
37610 if (info.category & ($76a40fa3f66cc629$export$bbcd928767338e0d | $76a40fa3f66cc629$export$a513ea61a7bee91c.N | $76a40fa3f66cc629$export$a513ea61a7bee91c.RS | $76a40fa3f66cc629$export$a513ea61a7bee91c.CM | $76a40fa3f66cc629$export$ca9599b2a300afc & info.category)) {
37611 info.position = lastPos;
37612 if (info.category === $76a40fa3f66cc629$export$a513ea61a7bee91c.H && info.position === $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Pre_M) {
37613 // Uniscribe doesn't move the Halant with Left Matra.
37614 // TEST: U+092B,U+093F,U+094DE
37615 // We follow. This is important for the Sinhala
37616 // U+0DDA split matra since it decomposes to U+0DD9,U+0DCA
37617 // where U+0DD9 is a left matra and U+0DCA is the virama.
37618 // We don't want to move the virama with the left matra.
37619 // TEST: U+0D9A,U+0DDA
37620 for(let j = i3; j > start; j--)if (glyphs[j - 1].shaperInfo.position !== $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Pre_M) {
37621 info.position = glyphs[j - 1].shaperInfo.position;
37622 break;
37623 }
37624 }
37625 } else if (info.position !== $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.SMVD) lastPos = info.position;
37626 }
37627 // For post-base consonants let them own anything before them
37628 // since the last consonant or matra.
37629 let last = base;
37630 for(let i4 = base + 1; i4 < end; i4++){
37631 if ($88aa30158a161372$var$isConsonant(glyphs[i4])) {
37632 for(let j = last + 1; j < i4; j++)if (glyphs[j].shaperInfo.position < $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.SMVD) glyphs[j].shaperInfo.position = glyphs[i4].shaperInfo.position;
37633 last = i4;
37634 } else if (glyphs[i4].shaperInfo.category === $76a40fa3f66cc629$export$a513ea61a7bee91c.M) last = i4;
37635 }
37636 let arr = glyphs.slice(start, end);
37637 arr.sort((a, b)=>a.shaperInfo.position - b.shaperInfo.position
37638 );
37639 glyphs.splice(start, arr.length, ...arr);
37640 // Find base again
37641 for(let i5 = start; i5 < end; i5++)if (glyphs[i5].shaperInfo.position === $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Base_C) {
37642 base = i5;
37643 break;
37644 }
37645 // Setup features now
37646 // Reph
37647 for(let i6 = start; i6 < end && glyphs[i6].shaperInfo.position === $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Ra_To_Become_Reph; i6++)glyphs[i6].features.rphf = true;
37648 // Pre-base
37649 let blwf = !plan.isOldSpec && indicConfig.blwfMode === 'Pre_And_Post';
37650 for(let i7 = start; i7 < base; i7++){
37651 glyphs[i7].features.half = true;
37652 if (blwf) glyphs[i7].features.blwf = true;
37653 }
37654 // Post-base
37655 for(let i8 = base + 1; i8 < end; i8++){
37656 glyphs[i8].features.abvf = true;
37657 glyphs[i8].features.pstf = true;
37658 glyphs[i8].features.blwf = true;
37659 }
37660 if (plan.isOldSpec && plan.unicodeScript === 'Devanagari') {
37661 // Old-spec eye-lash Ra needs special handling. From the
37662 // spec:
37663 //
37664 // "The feature 'below-base form' is applied to consonants
37665 // having below-base forms and following the base consonant.
37666 // The exception is vattu, which may appear below half forms
37667 // as well as below the base glyph. The feature 'below-base
37668 // form' will be applied to all such occurrences of Ra as well."
37669 //
37670 // Test case: U+0924,U+094D,U+0930,U+094d,U+0915
37671 // with Sanskrit 2003 font.
37672 //
37673 // However, note that Ra,Halant,ZWJ is the correct way to
37674 // request eyelash form of Ra, so we wouldbn't inhibit it
37675 // in that sequence.
37676 //
37677 // Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915
37678 for(let i = start; i + 1 < base; i++)if (glyphs[i].shaperInfo.category === $76a40fa3f66cc629$export$a513ea61a7bee91c.Ra && glyphs[i + 1].shaperInfo.category === $76a40fa3f66cc629$export$a513ea61a7bee91c.H && (i + 1 === base || glyphs[i + 2].shaperInfo.category === $76a40fa3f66cc629$export$a513ea61a7bee91c.ZWJ)) {
37679 glyphs[i].features.blwf = true;
37680 glyphs[i + 1].features.blwf = true;
37681 }
37682 }
37683 let prefLen = 2;
37684 if (features.pref && base + prefLen < end) // Find a Halant,Ra sequence and mark it for pre-base reordering processing.
37685 for(let i9 = base + 1; i9 + prefLen - 1 < end; i9++){
37686 let g = [
37687 glyphs[i9].copy(),
37688 glyphs[i9 + 1].copy()
37689 ];
37690 if ($88aa30158a161372$var$wouldSubstitute(g, 'pref')) {
37691 for(let j = 0; j < prefLen; j++)glyphs[i9++].features.pref = true;
37692 // Mark the subsequent stuff with 'cfar'. Used in Khmer.
37693 // Read the feature spec.
37694 // This allows distinguishing the following cases with MS Khmer fonts:
37695 // U+1784,U+17D2,U+179A,U+17D2,U+1782
37696 // U+1784,U+17D2,U+1782,U+17D2,U+179A
37697 if (features.cfar) for(; i9 < end; i9++)glyphs[i9].features.cfar = true;
37698 break;
37699 }
37700 }
37701 // Apply ZWJ/ZWNJ effects
37702 for(let i10 = start + 1; i10 < end; i10++)if ($88aa30158a161372$var$isJoiner(glyphs[i10])) {
37703 let nonJoiner = glyphs[i10].shaperInfo.category === $76a40fa3f66cc629$export$a513ea61a7bee91c.ZWNJ;
37704 let j = i10;
37705 do {
37706 j--;
37707 // ZWJ/ZWNJ should disable CJCT. They do that by simply
37708 // being there, since we don't skip them for the CJCT
37709 // feature (ie. F_MANUAL_ZWJ)
37710 // A ZWNJ disables HALF.
37711 if (nonJoiner) delete glyphs[j].features.half;
37712 }while (j > start && !$88aa30158a161372$var$isConsonant(glyphs[j]))
37713 }
37714 }
37715}
37716function $88aa30158a161372$var$finalReordering(font, glyphs, plan) {
37717 let indicConfig = plan.indicConfig;
37718 let features = font._layoutEngine.engine.GSUBProcessor.features;
37719 for(let start = 0, end = $88aa30158a161372$var$nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = $88aa30158a161372$var$nextSyllable(glyphs, start)){
37720 // 4. Final reordering:
37721 //
37722 // After the localized forms and basic shaping forms GSUB features have been
37723 // applied (see below), the shaping engine performs some final glyph
37724 // reordering before applying all the remaining font features to the entire
37725 // cluster.
37726 let tryPref = !!features.pref;
37727 // Find base again
37728 let base = start;
37729 for(; base < end; base++)if (glyphs[base].shaperInfo.position >= $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Base_C) {
37730 if (tryPref && base + 1 < end) {
37731 for(let i = base + 1; i < end; i++)if (glyphs[i].features.pref) {
37732 if (!(glyphs[i].substituted && glyphs[i].isLigated && !glyphs[i].isMultiplied)) {
37733 // Ok, this was a 'pref' candidate but didn't form any.
37734 // Base is around here...
37735 base = i;
37736 while(base < end && $88aa30158a161372$var$isHalantOrCoeng(glyphs[base]))base++;
37737 glyphs[base].shaperInfo.position = $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.BASE_C;
37738 tryPref = false;
37739 }
37740 break;
37741 }
37742 }
37743 // For Malayalam, skip over unformed below- (but NOT post-) forms.
37744 if (plan.unicodeScript === 'Malayalam') for(let i = base + 1; i < end; i++){
37745 while(i < end && $88aa30158a161372$var$isJoiner(glyphs[i]))i++;
37746 if (i === end || !$88aa30158a161372$var$isHalantOrCoeng(glyphs[i])) break;
37747 i++; // Skip halant.
37748 while(i < end && $88aa30158a161372$var$isJoiner(glyphs[i]))i++;
37749 if (i < end && $88aa30158a161372$var$isConsonant(glyphs[i]) && glyphs[i].shaperInfo.position === $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Below_C) {
37750 base = i;
37751 glyphs[base].shaperInfo.position = $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Base_C;
37752 }
37753 }
37754 if (start < base && glyphs[base].shaperInfo.position > $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Base_C) base--;
37755 break;
37756 }
37757 if (base === end && start < base && glyphs[base - 1].shaperInfo.category === $76a40fa3f66cc629$export$a513ea61a7bee91c.ZWJ) base--;
37758 if (base < end) while(start < base && glyphs[base].shaperInfo.category & ($76a40fa3f66cc629$export$a513ea61a7bee91c.N | $76a40fa3f66cc629$export$ca9599b2a300afc))base--;
37759 // o Reorder matras:
37760 //
37761 // If a pre-base matra character had been reordered before applying basic
37762 // features, the glyph can be moved closer to the main consonant based on
37763 // whether half-forms had been formed. Actual position for the matra is
37764 // defined as “after last standalone halant glyph, after initial matra
37765 // position and before the main consonant”. If ZWJ or ZWNJ follow this
37766 // halant, position is moved after it.
37767 //
37768 if (start + 1 < end && start < base) {
37769 // If we lost track of base, alas, position before last thingy.
37770 let newPos = base === end ? base - 2 : base - 1;
37771 // Malayalam / Tamil do not have "half" forms or explicit virama forms.
37772 // The glyphs formed by 'half' are Chillus or ligated explicit viramas.
37773 // We want to position matra after them.
37774 if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {
37775 while(newPos > start && !(glyphs[newPos].shaperInfo.category & ($76a40fa3f66cc629$export$a513ea61a7bee91c.M | $76a40fa3f66cc629$export$ca9599b2a300afc)))newPos--;
37776 // If we found no Halant we are done.
37777 // Otherwise only proceed if the Halant does
37778 // not belong to the Matra itself!
37779 if ($88aa30158a161372$var$isHalantOrCoeng(glyphs[newPos]) && glyphs[newPos].shaperInfo.position !== $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Pre_M) // If ZWJ or ZWNJ follow this halant, position is moved after it.
37780 {
37781 if (newPos + 1 < end && $88aa30158a161372$var$isJoiner(glyphs[newPos + 1])) newPos++;
37782 } else newPos = start; // No move.
37783 }
37784 if (start < newPos && glyphs[newPos].shaperInfo.position !== $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Pre_M) {
37785 // Now go see if there's actually any matras...
37786 for(let i = newPos; i > start; i--)if (glyphs[i - 1].shaperInfo.position === $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Pre_M) {
37787 let oldPos = i - 1;
37788 if (oldPos < base && base <= newPos) base--;
37789 let tmp = glyphs[oldPos];
37790 glyphs.splice(oldPos, 0, ...glyphs.splice(oldPos + 1, newPos - oldPos));
37791 glyphs[newPos] = tmp;
37792 newPos--;
37793 }
37794 }
37795 }
37796 // o Reorder reph:
37797 //
37798 // Reph’s original position is always at the beginning of the syllable,
37799 // (i.e. it is not reordered at the character reordering stage). However,
37800 // it will be reordered according to the basic-forms shaping results.
37801 // Possible positions for reph, depending on the script, are; after main,
37802 // before post-base consonant forms, and after post-base consonant forms.
37803 // Two cases:
37804 //
37805 // - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then
37806 // we should only move it if the sequence ligated to the repha form.
37807 //
37808 // - If repha is encoded separately and in the logical position, we should only
37809 // move it if it did NOT ligate. If it ligated, it's probably the font trying
37810 // to make it work without the reordering.
37811 if (start + 1 < end && glyphs[start].shaperInfo.position === $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Ra_To_Become_Reph && glyphs[start].shaperInfo.category === $76a40fa3f66cc629$export$a513ea61a7bee91c.Repha !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)) {
37812 let newRephPos;
37813 let rephPos = indicConfig.rephPos;
37814 let found = false;
37815 // 1. If reph should be positioned after post-base consonant forms,
37816 // proceed to step 5.
37817 if (rephPos !== $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.After_Post) {
37818 // 2. If the reph repositioning class is not after post-base: target
37819 // position is after the first explicit halant glyph between the
37820 // first post-reph consonant and last main consonant. If ZWJ or ZWNJ
37821 // are following this halant, position is moved after it. If such
37822 // position is found, this is the target position. Otherwise,
37823 // proceed to the next step.
37824 //
37825 // Note: in old-implementation fonts, where classifications were
37826 // fixed in shaping engine, there was no case where reph position
37827 // will be found on this step.
37828 newRephPos = start + 1;
37829 while(newRephPos < base && !$88aa30158a161372$var$isHalantOrCoeng(glyphs[newRephPos]))newRephPos++;
37830 if (newRephPos < base && $88aa30158a161372$var$isHalantOrCoeng(glyphs[newRephPos])) {
37831 // ->If ZWJ or ZWNJ are following this halant, position is moved after it.
37832 if (newRephPos + 1 < base && $88aa30158a161372$var$isJoiner(glyphs[newRephPos + 1])) newRephPos++;
37833 found = true;
37834 }
37835 // 3. If reph should be repositioned after the main consonant: find the
37836 // first consonant not ligated with main, or find the first
37837 // consonant that is not a potential pre-base reordering Ra.
37838 if (!found && rephPos === $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.After_Main) {
37839 newRephPos = base;
37840 while(newRephPos + 1 < end && glyphs[newRephPos + 1].shaperInfo.position <= $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.After_Main)newRephPos++;
37841 found = newRephPos < end;
37842 }
37843 // 4. If reph should be positioned before post-base consonant, find
37844 // first post-base classified consonant not ligated with main. If no
37845 // consonant is found, the target position should be before the
37846 // first matra, syllable modifier sign or vedic sign.
37847 //
37848 // This is our take on what step 4 is trying to say (and failing, BADLY).
37849 if (!found && rephPos === $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.After_Sub) {
37850 newRephPos = base;
37851 while(newRephPos + 1 < end && !(glyphs[newRephPos + 1].shaperInfo.position & ($76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Post_C | $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.After_Post | $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.SMVD)))newRephPos++;
37852 found = newRephPos < end;
37853 }
37854 }
37855 // 5. If no consonant is found in steps 3 or 4, move reph to a position
37856 // immediately before the first post-base matra, syllable modifier
37857 // sign or vedic sign that has a reordering class after the intended
37858 // reph position. For example, if the reordering position for reph
37859 // is post-main, it will skip above-base matras that also have a
37860 // post-main position.
37861 if (!found) {
37862 // Copied from step 2.
37863 newRephPos = start + 1;
37864 while(newRephPos < base && !$88aa30158a161372$var$isHalantOrCoeng(glyphs[newRephPos]))newRephPos++;
37865 if (newRephPos < base && $88aa30158a161372$var$isHalantOrCoeng(glyphs[newRephPos])) {
37866 // ->If ZWJ or ZWNJ are following this halant, position is moved after it.
37867 if (newRephPos + 1 < base && $88aa30158a161372$var$isJoiner(glyphs[newRephPos + 1])) newRephPos++;
37868 found = true;
37869 }
37870 }
37871 // 6. Otherwise, reorder reph to the end of the syllable.
37872 if (!found) {
37873 newRephPos = end - 1;
37874 while(newRephPos > start && glyphs[newRephPos].shaperInfo.position === $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.SMVD)newRephPos--;
37875 // If the Reph is to be ending up after a Matra,Halant sequence,
37876 // position it before that Halant so it can interact with the Matra.
37877 // However, if it's a plain Consonant,Halant we shouldn't do that.
37878 // Uniscribe doesn't do this.
37879 // TEST: U+0930,U+094D,U+0915,U+094B,U+094D
37880 if ($88aa30158a161372$var$isHalantOrCoeng(glyphs[newRephPos])) {
37881 for(let i = base + 1; i < newRephPos; i++)if (glyphs[i].shaperInfo.category === $76a40fa3f66cc629$export$a513ea61a7bee91c.M) newRephPos--;
37882 }
37883 }
37884 let reph = glyphs[start];
37885 glyphs.splice(start, 0, ...glyphs.splice(start + 1, newRephPos - start));
37886 glyphs[newRephPos] = reph;
37887 if (start < base && base <= newRephPos) base--;
37888 }
37889 // o Reorder pre-base reordering consonants:
37890 //
37891 // If a pre-base reordering consonant is found, reorder it according to
37892 // the following rules:
37893 if (tryPref && base + 1 < end) {
37894 for(let i = base + 1; i < end; i++)if (glyphs[i].features.pref) {
37895 // 1. Only reorder a glyph produced by substitution during application
37896 // of the <pref> feature. (Note that a font may shape a Ra consonant with
37897 // the feature generally but block it in certain contexts.)
37898 // Note: We just check that something got substituted. We don't check that
37899 // the <pref> feature actually did it...
37900 //
37901 // Reorder pref only if it ligated.
37902 if (glyphs[i].isLigated && !glyphs[i].isMultiplied) {
37903 // 2. Try to find a target position the same way as for pre-base matra.
37904 // If it is found, reorder pre-base consonant glyph.
37905 //
37906 // 3. If position is not found, reorder immediately before main
37907 // consonant.
37908 let newPos = base;
37909 // Malayalam / Tamil do not have "half" forms or explicit virama forms.
37910 // The glyphs formed by 'half' are Chillus or ligated explicit viramas.
37911 // We want to position matra after them.
37912 if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {
37913 while(newPos > start && !(glyphs[newPos - 1].shaperInfo.category & ($76a40fa3f66cc629$export$a513ea61a7bee91c.M | $76a40fa3f66cc629$export$ca9599b2a300afc)))newPos--;
37914 // In Khmer coeng model, a H,Ra can go *after* matras. If it goes after a
37915 // split matra, it should be reordered to *before* the left part of such matra.
37916 if (newPos > start && glyphs[newPos - 1].shaperInfo.category === $76a40fa3f66cc629$export$a513ea61a7bee91c.M) {
37917 let oldPos = i;
37918 for(let j = base + 1; j < oldPos; j++)if (glyphs[j].shaperInfo.category === $76a40fa3f66cc629$export$a513ea61a7bee91c.M) {
37919 newPos--;
37920 break;
37921 }
37922 }
37923 }
37924 if (newPos > start && $88aa30158a161372$var$isHalantOrCoeng(glyphs[newPos - 1])) // -> If ZWJ or ZWNJ follow this halant, position is moved after it.
37925 {
37926 if (newPos < end && $88aa30158a161372$var$isJoiner(glyphs[newPos])) newPos++;
37927 }
37928 let oldPos = i;
37929 let tmp = glyphs[oldPos];
37930 glyphs.splice(newPos + 1, 0, ...glyphs.splice(newPos, oldPos - newPos));
37931 glyphs[newPos] = tmp;
37932 if (newPos <= base && base < oldPos) base++;
37933 }
37934 break;
37935 }
37936 }
37937 // Apply 'init' to the Left Matra if it's a word start.
37938 if (glyphs[start].shaperInfo.position === $76a40fa3f66cc629$export$1a1f61c9c4dd9df0.Pre_M && (!start || !/Cf|Mn/.test(($parcel$interopDefault($lzfo4$unicodeproperties)).getCategory(glyphs[start - 1].codePoints[0])))) glyphs[start].features.init = true;
37939 }
37940}
37941function $88aa30158a161372$var$nextSyllable(glyphs, start) {
37942 if (start >= glyphs.length) return start;
37943 let syllable = glyphs[start].shaperInfo.syllable;
37944 while(++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable);
37945 return start;
37946}
37947
37948
37949
37950
37951
37952
37953
37954
37955
37956var $15cb744015661546$require$Buffer = $lzfo4$buffer.Buffer;
37957const { categories: $15cb744015661546$var$categories , decompositions: $15cb744015661546$var$decompositions } = (/*@__PURE__*/$parcel$interopDefault($440f7c22deab646c$exports));
37958const $15cb744015661546$var$trie = new ($parcel$interopDefault($lzfo4$unicodetrie))($15cb744015661546$require$Buffer.from("AAACAAAAAADQqQAAAVEMrvPtnH+oHUcVx+fd99799W5e8mx+9NkYm7YUI2KtimkVDG3FWgVTFY1Fqa2VJirYB0IaUFLBaKGJViXir6oxKCSBoi0UTKtg2yA26h+milYNtMH+0WK1VQyvtBS/487hnncyMzuzu7N7n7kHPszu7OzMmTNzdmdmfzzfUmpiUqkemAMbwSZwKbjcxM1XEL4VvB28G3zAk+56cLMlfgdYADvBbvBF8GWwH9xl+CFLfwj8BPwU/MKS38/AMfA86v9ro9ucQcdR+CjCP4CT4EnwDPg3eAFMTik1A+bAPNgINoFLwGawZSpLfzXCrWAb+AjYDm4BO8FusAfsA/vBXeAgOALuNfv3g4fAcXACPAaeAE+B58Bp8NJUpnN7WqlZsHY629+A8GLwWvAG8BZwJXinOf5ehB8EN4AdYGE6q7dmF9uugs8hvz0V58nZK/L+Kva/BX4ADoN7prP6HgUPgkfA73L0eQzHnwBPgX+Y80+DF8FUW6lBO4tbjXA9uAi8pj3sS2/E9mawBVwNtoJt5pzrTXgzwk+B7awP7sT+7nY6WxFfQBlfAl8H3wU/Anezcu/D9s/BMRN3HOEJ8EdwMkC/J5HmmXZmq2fBIjgEVEepbieLX4Fw0MnSrzRxmrVsm7MB8ReDV4vjr3ekJy7rZGVPMb196Xm6oug83oRyt4CrwDVgK9gGPtzxn3uTOD6YPDPNJ5Hm0+AznazffJ7Z4KSnXncg3VfAN8EBhx42/z/UGdbrx52sr9yH8AFTrt5+2GzfnWPbKuw7ZszZyNh/xowZM2bMmDFjxsQyZ5lPNs3h9nBNYHuAfr9ic9ffiHnsJzznU91/j3P+2snWYf6G8O/gn+A0eMnEt7vQp5ulX4NwHmwEm7rZ8UsRXg6uMPvXIHwPuK7rLl+nu9FzfMyYMWPGpGVuslmarv+YMWPSkNq/d2D8uNDNngvdivA2y3jy9m72bF9v3ymOf2MExp8fG2TsAcfA2wJYBJetWBq3i+0fwPafwLmzSl0LFmZNPMLHZ4fpnsX2AdjgcXB+T6kPge+AG7D/vXYW/tLsc9r9M+MkVyLNR1m6g9g+ZfYvmMExcHCm+ftP0+T5y/e17Uw/PYLwHnC0m80TH+zG30/3mjSDnPS2/B4pUJ4rX3n+b5H3o92l6UjfvZ7y/oJzToGnu8O66XTPYf8/Jr8XWL6TPXf9bPnHtmVs+89AnxVgDVgPLgKvAg+Y/F6H7c1gC7jKHH8XeJ/x15vAjt4wvwVs7wKfBXvAPvA18G1wsJevj36f5gjS3etIq+ft9+PYQ73h/nFsn2D7f+5l75bo/VPYftpTblFb2/Jo2pdjfL0uXOX/qxfnp8vZVk2Xv9hbmu+LxvYt3A/7/WZsPoptPkr9bdCv1ya+d4TuMO8Tre5n4XkILwSbzP4l/WHazX1//r2O/z7cFHnvSYW8R/Vm02ZXIHxHze1Xdf9bbn7p0z2kDroNr2X9WL+7937sX9fP+v9h9n6jTrfI3jG9EfsfN3G35PR/G4uRfY3eMTwdkFa/C3hrf2kcfy/xYTOmprrfZsLbEe7rDPW/U9Rrv9k/ahmTL0cWWxP/YxRkgtES+zwNhZPs+FQgMj/liEsto2HxsZBQX2pZoLZqWc5riXDaQBLSt1L3hcnE+Vct7aYVKCEhbXk2+b7NZ84mmXAwCiL14Ne85S62MYPcXi5StM/YxlJF2lfabznZsC6/C807xvZV+yFve9d1KY//d3HNO8pKUXuTDh0Gpp7B852q6QFMgdWM2dfbAxOuEPQEfcEsO5fquJLZrMfyCtWP0heZF6oSdiH9u4aQvJRIJ/eL6BBynItLp5D2JRkY5L5u3xAf6lviXHWSZcfaKO/+5zvO/c9Xtq8uRXSObd+8bS0zJrS1rxTyX7k/a0nrk5D+mHeOC90uq1Q216X57lykfqHt62uTGJ2rat+i/kttyq/RSi29PlclZf2Xxq55ZeSV34T96d5X5PqZJ9I3ZX2lnkXt3xL1Kyrav/LutbZ6uGxuS6ss6V3pXOXY4kP7EBfyJT7+4TJQS9uf74f6n+3+6ZIi9bCtieatFfCxUMx4KMYfy/pzrB30vm88q9SZ11K+n9eeNN612UFKWX8uI9TmRca7TbWvKy2JvF6naF+b/0uRupZp35cZikhZvyniY2R/CbdB3vXynIC6hbRBHf4l1xps6w4x/lVEtxRtGZMuRA8uNh/jfYV8kdpsBUszcODrD7E2JT2KrB3V6XMhbdNjcXItxzaOJWkpf976/I5glQn1sbLP86U9FQvz4l0S28/lcWUJbbrE2l+Z/TlHvi4/kvZXLMyrmy1PW7x8hl6UFgvlmNM1Jq3aJ3Se0yJcpdwS6mOp/ZgLX5N1rdFKaIzH9ztquMbqq+/qCFRk+hRoyZvrTHuO8fNd/djmEzZJ3TdisN1bNQNl7y96DV/3mVkTtwasVdk1ai6ybGlDek8nT1fXc4M5tVSPvhqOsWQeXQs8L1n3IradU8OxCeVjK7dr7Dpl0cMHnUvt18TzfVsfb/pZY56fV2GnVPVIYaOi9xcZJ8cmKcu3wcuPsVHV5cdKFfZXNZefp5sWft+wzR1cczKCxh99NRx76HvwOpWNv6YZtAajt6WPyPswtVVs/VOJ7xpYx3VR31er7gMxNuV9Q443CDlW43KuYSXblsybfKYt58trfez7A1X7Tdm+V7TcoudL+LpVGf2khN63U5OyD5Af0NoUv06l7Jc0Rte+so4xL9Ayy3Rz+SufY5Jf267xcm7J4dd3kumIOrmk7Pl549bUY1puI91Gdb8Tpu+9tjmhXFdwtfVsTv5SQvXKW0cK4eXgPBO6iJ07NNVOHH7/tF1jyJdnWbrU/Uau3VNI156QZ2ZaZFu76i6vQXy9YJ2H9QZ97aF3p1xlx1yfuYRcd0Kl7NyaX190+pUOKI0tvus5j7/nSWKLo3FER8R3LHEx8gqwge1POgi1l1yfirV3zHpISHxs3vLeFXOellcG1DFGbGP00PPkeKEOaXIsqhzbruOh9Qk5L08nW2grJ0avsvWocv0zRh/fGCG0TV35hB4v0rds5Vddjm/sFCKx+aXSt2yalPZsolxXW46CDnXp0YQ0rdso9OUYPSYT6+yzuxxzlrVfFfavQ/LKqsP+dbVzE/0qRb8pKin6V9U6Fnn24pqHufLMWy90nV+0DkXmcrb0Uq+6pU7/qcs/67SHTeTaaBk9ipyXQvLqW1U7uPKpux/ESlP9umydR8H3UjzHoXxj0/J1Yr5ubHsPrWOJqxK+hk5r+EVtH3pe1XWIXa+1vQ9YJ/oZre1bGReh3xKWeX7BxfYstwh5errGJi59be8482cSsfUPQT4Xlc9K+XMmatcY0fo2+SxYQs/4XO8M03Ng/TxujYH+FRELSdH+6mtveu8itb1Cy7C9X8GfsVOcfN86RHg56wJ0ob5qOz/E/rIdq7YhF34/0cfoeWKVftJjIbWDbDfXeXR/prBOKWJ/3dd43+sr+32TvgEIEZ6/7Zt5/l7ghMm77u+ey4gcz5xfktA5vE9C5vy2Y3lpXeX40tHcLMX42qZHS/ltZluXiSlDxillt3VdIvufbc0j75wy5aWaOxWRUZmfl5nDSh3LzoWbXJOg8uumKkndp1PnH2IPfe+U33z7vjWhdPQuWMh4raqxWMh9X89RZtSZ7/JpyXs3NWQcETN3CZHU/lmVnstZB1+ZfM5A/1VJ2V9t8wTXN1S+f27mzaulbCxJHePwC1Tz/0K1/VdPvtOsba+vL7ZxM1/jakJ/V9/yfdtNx+i7bhVRRll/rrK+sk3qLt/3T0afH+tzz1HDfxzZ/HlGDduK1y/GL21zvKptQGWFSpVlFm0z+ZxD/vdAt9EqQ971NkRHW7qytog53+cfVfeFGLStfddfYka5x6dl+yi//4z6/559aUn4/+/k2pv8BqfM/0qVCnu+If2OJPRZUcyzJF/5RQm5xtM9ln+LRN+8U9+iMQS1Veg9q2z/TlV3Ett3/rLOIXOookidy/5X3GYD+S8a1z2e0vH695T9vhEqdbY//0dU3jWZ2rYq/cvCRT8r08/NLlT5/zySdSurv1ybLiup5tAp5+NNzfPJ5r61warapajItfTQNeK610/rWEMPyb+uOo/ierRNbGU01Z+rqneIPWNsT9t1rD+OYr8rm0eKvp/Ch1P4Yepyy+hWVD/f+VWXX5X+TZdfZZ+KLb9J+S8=", "base64"));
37959const $15cb744015661546$var$stateMachine = new ($parcel$interopDefault($lzfo4$dfa))((/*@__PURE__*/$parcel$interopDefault($440f7c22deab646c$exports)));
37960class $15cb744015661546$export$2e2bcd8739ae039 extends $4f61fb8204be1a7c$export$2e2bcd8739ae039 {
37961 static planFeatures(plan) {
37962 plan.addStage($15cb744015661546$var$setupSyllables);
37963 // Default glyph pre-processing group
37964 plan.addStage([
37965 'locl',
37966 'ccmp',
37967 'nukt',
37968 'akhn'
37969 ]);
37970 // Reordering group
37971 plan.addStage($15cb744015661546$var$clearSubstitutionFlags);
37972 plan.addStage([
37973 'rphf'
37974 ], false);
37975 plan.addStage($15cb744015661546$var$recordRphf);
37976 plan.addStage($15cb744015661546$var$clearSubstitutionFlags);
37977 plan.addStage([
37978 'pref'
37979 ]);
37980 plan.addStage($15cb744015661546$var$recordPref);
37981 // Orthographic unit shaping group
37982 plan.addStage([
37983 'rkrf',
37984 'abvf',
37985 'blwf',
37986 'half',
37987 'pstf',
37988 'vatu',
37989 'cjct'
37990 ]);
37991 plan.addStage($15cb744015661546$var$reorder);
37992 // Topographical features
37993 // Scripts that need this are handled by the Arabic shaper, not implemented here for now.
37994 // plan.addStage(['isol', 'init', 'medi', 'fina', 'med2', 'fin2', 'fin3'], false);
37995 // Standard topographic presentation and positional feature application
37996 plan.addStage([
37997 'abvs',
37998 'blws',
37999 'pres',
38000 'psts',
38001 'dist',
38002 'abvm',
38003 'blwm'
38004 ]);
38005 }
38006 static assignFeatures(plan, glyphs) {
38007 // Decompose split vowels
38008 // TODO: do this in a more general unicode normalizer
38009 for(let i = glyphs.length - 1; i >= 0; i--){
38010 let codepoint = glyphs[i].codePoints[0];
38011 if ($15cb744015661546$var$decompositions[codepoint]) {
38012 let decomposed = $15cb744015661546$var$decompositions[codepoint].map((c)=>{
38013 let g = plan.font.glyphForCodePoint(c);
38014 return new $535fa31b81f74b90$export$2e2bcd8739ae039(plan.font, g.id, [
38015 c
38016 ], glyphs[i].features);
38017 });
38018 glyphs.splice(i, 1, ...decomposed);
38019 }
38020 }
38021 }
38022}
38023$lzfo4$swchelpers.defineProperty($15cb744015661546$export$2e2bcd8739ae039, "zeroMarkWidths", 'BEFORE_GPOS');
38024function $15cb744015661546$var$useCategory(glyph) {
38025 return $15cb744015661546$var$trie.get(glyph.codePoints[0]);
38026}
38027class $15cb744015661546$var$USEInfo {
38028 constructor(category, syllableType, syllable){
38029 this.category = category;
38030 this.syllableType = syllableType;
38031 this.syllable = syllable;
38032 }
38033}
38034function $15cb744015661546$var$setupSyllables(font, glyphs) {
38035 let syllable = 0;
38036 for (let [start, end, tags] of $15cb744015661546$var$stateMachine.match(glyphs.map($15cb744015661546$var$useCategory))){
38037 ++syllable;
38038 // Create shaper info
38039 for(let i = start; i <= end; i++)glyphs[i].shaperInfo = new $15cb744015661546$var$USEInfo($15cb744015661546$var$categories[$15cb744015661546$var$useCategory(glyphs[i])], tags[0], syllable);
38040 // Assign rphf feature
38041 let limit = glyphs[start].shaperInfo.category === 'R' ? 1 : Math.min(3, end - start);
38042 for(let i1 = start; i1 < start + limit; i1++)glyphs[i1].features.rphf = true;
38043 }
38044}
38045function $15cb744015661546$var$clearSubstitutionFlags(font, glyphs) {
38046 for (let glyph of glyphs)glyph.substituted = false;
38047}
38048function $15cb744015661546$var$recordRphf(font, glyphs) {
38049 for (let glyph of glyphs)if (glyph.substituted && glyph.features.rphf) // Mark a substituted repha.
38050 glyph.shaperInfo.category = 'R';
38051}
38052function $15cb744015661546$var$recordPref(font, glyphs) {
38053 for (let glyph of glyphs)if (glyph.substituted) // Mark a substituted pref as VPre, as they behave the same way.
38054 glyph.shaperInfo.category = 'VPre';
38055}
38056function $15cb744015661546$var$reorder(font, glyphs) {
38057 let dottedCircle = font.glyphForCodePoint(0x25cc).id;
38058 for(let start = 0, end = $15cb744015661546$var$nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = $15cb744015661546$var$nextSyllable(glyphs, start)){
38059 let i, j;
38060 let info = glyphs[start].shaperInfo;
38061 let type = info.syllableType;
38062 // Only a few syllable types need reordering.
38063 if (type !== 'virama_terminated_cluster' && type !== 'standard_cluster' && type !== 'broken_cluster') continue;
38064 // Insert a dotted circle glyph in broken clusters.
38065 if (type === 'broken_cluster' && dottedCircle) {
38066 let g = new $535fa31b81f74b90$export$2e2bcd8739ae039(font, dottedCircle, [
38067 0x25cc
38068 ]);
38069 g.shaperInfo = info;
38070 // Insert after possible Repha.
38071 for(i = start; i < end && glyphs[i].shaperInfo.category === 'R'; i++);
38072 glyphs.splice(++i, 0, g);
38073 end++;
38074 }
38075 // Move things forward.
38076 if (info.category === 'R' && end - start > 1) // Got a repha. Reorder it to after first base, before first halant.
38077 for(i = start + 1; i < end; i++){
38078 info = glyphs[i].shaperInfo;
38079 if ($15cb744015661546$var$isBase(info) || $15cb744015661546$var$isHalant(glyphs[i])) {
38080 // If we hit a halant, move before it; otherwise it's a base: move to it's
38081 // place, and shift things in between backward.
38082 if ($15cb744015661546$var$isHalant(glyphs[i])) i--;
38083 glyphs.splice(start, 0, ...glyphs.splice(start + 1, i - start), glyphs[i]);
38084 break;
38085 }
38086 }
38087 // Move things back.
38088 for(i = start, j = end; i < end; i++){
38089 info = glyphs[i].shaperInfo;
38090 if ($15cb744015661546$var$isBase(info) || $15cb744015661546$var$isHalant(glyphs[i])) // If we hit a halant, move after it; otherwise it's a base: move to it's
38091 // place, and shift things in between backward.
38092 j = $15cb744015661546$var$isHalant(glyphs[i]) ? i + 1 : i;
38093 else if ((info.category === 'VPre' || info.category === 'VMPre') && j < i) glyphs.splice(j, 1, glyphs[i], ...glyphs.splice(j, i - j));
38094 }
38095 }
38096}
38097function $15cb744015661546$var$nextSyllable(glyphs, start) {
38098 if (start >= glyphs.length) return start;
38099 let syllable = glyphs[start].shaperInfo.syllable;
38100 while(++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable);
38101 return start;
38102}
38103function $15cb744015661546$var$isHalant(glyph) {
38104 return glyph.shaperInfo.category === 'H' && !glyph.isLigated;
38105}
38106function $15cb744015661546$var$isBase(info) {
38107 return info.category === 'B' || info.category === 'GB';
38108}
38109
38110
38111const $936111a4a5a2e9d6$var$SHAPERS = {
38112 arab: $38a185bbdd6946f1$export$2e2bcd8739ae039,
38113 mong: $38a185bbdd6946f1$export$2e2bcd8739ae039,
38114 syrc: $38a185bbdd6946f1$export$2e2bcd8739ae039,
38115 'nko ': $38a185bbdd6946f1$export$2e2bcd8739ae039,
38116 phag: $38a185bbdd6946f1$export$2e2bcd8739ae039,
38117 mand: $38a185bbdd6946f1$export$2e2bcd8739ae039,
38118 mani: $38a185bbdd6946f1$export$2e2bcd8739ae039,
38119 phlp: $38a185bbdd6946f1$export$2e2bcd8739ae039,
38120 hang: $643b4d234d3e305f$export$2e2bcd8739ae039,
38121 bng2: $88aa30158a161372$export$2e2bcd8739ae039,
38122 beng: $88aa30158a161372$export$2e2bcd8739ae039,
38123 dev2: $88aa30158a161372$export$2e2bcd8739ae039,
38124 deva: $88aa30158a161372$export$2e2bcd8739ae039,
38125 gjr2: $88aa30158a161372$export$2e2bcd8739ae039,
38126 gujr: $88aa30158a161372$export$2e2bcd8739ae039,
38127 guru: $88aa30158a161372$export$2e2bcd8739ae039,
38128 gur2: $88aa30158a161372$export$2e2bcd8739ae039,
38129 knda: $88aa30158a161372$export$2e2bcd8739ae039,
38130 knd2: $88aa30158a161372$export$2e2bcd8739ae039,
38131 mlm2: $88aa30158a161372$export$2e2bcd8739ae039,
38132 mlym: $88aa30158a161372$export$2e2bcd8739ae039,
38133 ory2: $88aa30158a161372$export$2e2bcd8739ae039,
38134 orya: $88aa30158a161372$export$2e2bcd8739ae039,
38135 taml: $88aa30158a161372$export$2e2bcd8739ae039,
38136 tml2: $88aa30158a161372$export$2e2bcd8739ae039,
38137 telu: $88aa30158a161372$export$2e2bcd8739ae039,
38138 tel2: $88aa30158a161372$export$2e2bcd8739ae039,
38139 khmr: $88aa30158a161372$export$2e2bcd8739ae039,
38140 bali: $15cb744015661546$export$2e2bcd8739ae039,
38141 batk: $15cb744015661546$export$2e2bcd8739ae039,
38142 brah: $15cb744015661546$export$2e2bcd8739ae039,
38143 bugi: $15cb744015661546$export$2e2bcd8739ae039,
38144 buhd: $15cb744015661546$export$2e2bcd8739ae039,
38145 cakm: $15cb744015661546$export$2e2bcd8739ae039,
38146 cham: $15cb744015661546$export$2e2bcd8739ae039,
38147 dupl: $15cb744015661546$export$2e2bcd8739ae039,
38148 egyp: $15cb744015661546$export$2e2bcd8739ae039,
38149 gran: $15cb744015661546$export$2e2bcd8739ae039,
38150 hano: $15cb744015661546$export$2e2bcd8739ae039,
38151 java: $15cb744015661546$export$2e2bcd8739ae039,
38152 kthi: $15cb744015661546$export$2e2bcd8739ae039,
38153 kali: $15cb744015661546$export$2e2bcd8739ae039,
38154 khar: $15cb744015661546$export$2e2bcd8739ae039,
38155 khoj: $15cb744015661546$export$2e2bcd8739ae039,
38156 sind: $15cb744015661546$export$2e2bcd8739ae039,
38157 lepc: $15cb744015661546$export$2e2bcd8739ae039,
38158 limb: $15cb744015661546$export$2e2bcd8739ae039,
38159 mahj: $15cb744015661546$export$2e2bcd8739ae039,
38160 // mand: UniversalShaper, // Mandaic
38161 // mani: UniversalShaper, // Manichaean
38162 mtei: $15cb744015661546$export$2e2bcd8739ae039,
38163 modi: $15cb744015661546$export$2e2bcd8739ae039,
38164 // mong: UniversalShaper, // Mongolian
38165 // 'nko ': UniversalShaper, // N’Ko
38166 hmng: $15cb744015661546$export$2e2bcd8739ae039,
38167 // phag: UniversalShaper, // Phags-pa
38168 // phlp: UniversalShaper, // Psalter Pahlavi
38169 rjng: $15cb744015661546$export$2e2bcd8739ae039,
38170 saur: $15cb744015661546$export$2e2bcd8739ae039,
38171 shrd: $15cb744015661546$export$2e2bcd8739ae039,
38172 sidd: $15cb744015661546$export$2e2bcd8739ae039,
38173 sinh: $88aa30158a161372$export$2e2bcd8739ae039,
38174 sund: $15cb744015661546$export$2e2bcd8739ae039,
38175 sylo: $15cb744015661546$export$2e2bcd8739ae039,
38176 tglg: $15cb744015661546$export$2e2bcd8739ae039,
38177 tagb: $15cb744015661546$export$2e2bcd8739ae039,
38178 tale: $15cb744015661546$export$2e2bcd8739ae039,
38179 lana: $15cb744015661546$export$2e2bcd8739ae039,
38180 tavt: $15cb744015661546$export$2e2bcd8739ae039,
38181 takr: $15cb744015661546$export$2e2bcd8739ae039,
38182 tibt: $15cb744015661546$export$2e2bcd8739ae039,
38183 tfng: $15cb744015661546$export$2e2bcd8739ae039,
38184 tirh: $15cb744015661546$export$2e2bcd8739ae039,
38185 latn: $4f61fb8204be1a7c$export$2e2bcd8739ae039,
38186 DFLT: $4f61fb8204be1a7c$export$2e2bcd8739ae039 // Default
38187};
38188function $936111a4a5a2e9d6$export$7877a478dd30fd3d(script) {
38189 if (!Array.isArray(script)) script = [
38190 script
38191 ];
38192 for (let s of script){
38193 let shaper = $936111a4a5a2e9d6$var$SHAPERS[s];
38194 if (shaper) return shaper;
38195 }
38196 return $4f61fb8204be1a7c$export$2e2bcd8739ae039;
38197}
38198
38199
38200
38201
38202
38203class $baa3ae21ed64fb80$export$2e2bcd8739ae039 extends $cca6af4639973976$export$2e2bcd8739ae039 {
38204 applyLookup(lookupType, table) {
38205 switch(lookupType){
38206 case 1:
38207 {
38208 let index = this.coverageIndex(table.coverage);
38209 if (index === -1) return false;
38210 let glyph = this.glyphIterator.cur;
38211 switch(table.version){
38212 case 1:
38213 glyph.id = glyph.id + table.deltaGlyphID & 0xffff;
38214 break;
38215 case 2:
38216 glyph.id = table.substitute.get(index);
38217 break;
38218 }
38219 return true;
38220 }
38221 case 2:
38222 {
38223 let index = this.coverageIndex(table.coverage);
38224 if (index !== -1) {
38225 let sequence = table.sequences.get(index);
38226 if (sequence.length === 0) {
38227 // If the sequence length is zero, delete the glyph.
38228 // The OpenType spec disallows this, but seems like Harfbuzz and Uniscribe allow it.
38229 this.glyphs.splice(this.glyphIterator.index, 1);
38230 return true;
38231 }
38232 this.glyphIterator.cur.id = sequence[0];
38233 this.glyphIterator.cur.ligatureComponent = 0;
38234 let features = this.glyphIterator.cur.features;
38235 let curGlyph = this.glyphIterator.cur;
38236 let replacement = sequence.slice(1).map((gid, i)=>{
38237 let glyph = new $535fa31b81f74b90$export$2e2bcd8739ae039(this.font, gid, undefined, features);
38238 glyph.shaperInfo = curGlyph.shaperInfo;
38239 glyph.isLigated = curGlyph.isLigated;
38240 glyph.ligatureComponent = i + 1;
38241 glyph.substituted = true;
38242 glyph.isMultiplied = true;
38243 return glyph;
38244 });
38245 this.glyphs.splice(this.glyphIterator.index + 1, 0, ...replacement);
38246 return true;
38247 }
38248 return false;
38249 }
38250 case 3:
38251 {
38252 let index = this.coverageIndex(table.coverage);
38253 if (index !== -1) {
38254 let USER_INDEX = 0; // TODO
38255 this.glyphIterator.cur.id = table.alternateSet.get(index)[USER_INDEX];
38256 return true;
38257 }
38258 return false;
38259 }
38260 case 4:
38261 {
38262 let index = this.coverageIndex(table.coverage);
38263 if (index === -1) return false;
38264 for (let ligature of table.ligatureSets.get(index)){
38265 let matched = this.sequenceMatchIndices(1, ligature.components);
38266 if (!matched) continue;
38267 let curGlyph = this.glyphIterator.cur;
38268 // Concatenate all of the characters the new ligature will represent
38269 let characters = curGlyph.codePoints.slice();
38270 for (let index of matched)characters.push(...this.glyphs[index].codePoints);
38271 // Create the replacement ligature glyph
38272 let ligatureGlyph = new $535fa31b81f74b90$export$2e2bcd8739ae039(this.font, ligature.glyph, characters, curGlyph.features);
38273 ligatureGlyph.shaperInfo = curGlyph.shaperInfo;
38274 ligatureGlyph.isLigated = true;
38275 ligatureGlyph.substituted = true;
38276 // From Harfbuzz:
38277 // - If it *is* a mark ligature, we don't allocate a new ligature id, and leave
38278 // the ligature to keep its old ligature id. This will allow it to attach to
38279 // a base ligature in GPOS. Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH,
38280 // and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a
38281 // ligature id and component value of 2. Then if SHADDA,FATHA form a ligature
38282 // later, we don't want them to lose their ligature id/component, otherwise
38283 // GPOS will fail to correctly position the mark ligature on top of the
38284 // LAM,LAM,HEH ligature. See https://bugzilla.gnome.org/show_bug.cgi?id=676343
38285 //
38286 // - If a ligature is formed of components that some of which are also ligatures
38287 // themselves, and those ligature components had marks attached to *their*
38288 // components, we have to attach the marks to the new ligature component
38289 // positions! Now *that*'s tricky! And these marks may be following the
38290 // last component of the whole sequence, so we should loop forward looking
38291 // for them and update them.
38292 //
38293 // Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a
38294 // 'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature
38295 // id and component == 1. Now, during 'liga', the LAM and the LAM-HEH ligature
38296 // form a LAM-LAM-HEH ligature. We need to reassign the SHADDA and FATHA to
38297 // the new ligature with a component value of 2.
38298 //
38299 // This in fact happened to a font... See https://bugzilla.gnome.org/show_bug.cgi?id=437633
38300 let isMarkLigature = curGlyph.isMark;
38301 for(let i = 0; i < matched.length && isMarkLigature; i++)isMarkLigature = this.glyphs[matched[i]].isMark;
38302 ligatureGlyph.ligatureID = isMarkLigature ? null : this.ligatureID++;
38303 let lastLigID = curGlyph.ligatureID;
38304 let lastNumComps = curGlyph.codePoints.length;
38305 let curComps = lastNumComps;
38306 let idx = this.glyphIterator.index + 1;
38307 // Set ligatureID and ligatureComponent on glyphs that were skipped in the matched sequence.
38308 // This allows GPOS to attach marks to the correct ligature components.
38309 for (let matchIndex of matched){
38310 // Don't assign new ligature components for mark ligatures (see above)
38311 if (isMarkLigature) idx = matchIndex;
38312 else while(idx < matchIndex){
38313 var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[idx].ligatureComponent || 1, lastNumComps);
38314 this.glyphs[idx].ligatureID = ligatureGlyph.ligatureID;
38315 this.glyphs[idx].ligatureComponent = ligatureComponent;
38316 idx++;
38317 }
38318 lastLigID = this.glyphs[idx].ligatureID;
38319 lastNumComps = this.glyphs[idx].codePoints.length;
38320 curComps += lastNumComps;
38321 idx++; // skip base glyph
38322 }
38323 // Adjust ligature components for any marks following
38324 if (lastLigID && !isMarkLigature) for(let i1 = idx; i1 < this.glyphs.length; i1++){
38325 if (this.glyphs[i1].ligatureID === lastLigID) {
38326 var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[i1].ligatureComponent || 1, lastNumComps);
38327 this.glyphs[i1].ligatureComponent = ligatureComponent;
38328 } else break;
38329 }
38330 // Delete the matched glyphs, and replace the current glyph with the ligature glyph
38331 for(let i2 = matched.length - 1; i2 >= 0; i2--)this.glyphs.splice(matched[i2], 1);
38332 this.glyphs[this.glyphIterator.index] = ligatureGlyph;
38333 return true;
38334 }
38335 return false;
38336 }
38337 case 5:
38338 return this.applyContext(table);
38339 case 6:
38340 return this.applyChainingContext(table);
38341 case 7:
38342 return this.applyLookup(table.lookupType, table.extension);
38343 default:
38344 throw new Error(`GSUB lookupType ${lookupType} is not supported`);
38345 }
38346 }
38347}
38348
38349
38350
38351class $1ab772dcf2da50dd$export$2e2bcd8739ae039 extends $cca6af4639973976$export$2e2bcd8739ae039 {
38352 applyPositionValue(sequenceIndex, value) {
38353 let position = this.positions[this.glyphIterator.peekIndex(sequenceIndex)];
38354 if (value.xAdvance != null) position.xAdvance += value.xAdvance;
38355 if (value.yAdvance != null) position.yAdvance += value.yAdvance;
38356 if (value.xPlacement != null) position.xOffset += value.xPlacement;
38357 if (value.yPlacement != null) position.yOffset += value.yPlacement;
38358 // Adjustments for font variations
38359 let variationProcessor = this.font._variationProcessor;
38360 let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;
38361 if (variationProcessor && variationStore) {
38362 if (value.xPlaDevice) position.xOffset += variationProcessor.getDelta(variationStore, value.xPlaDevice.a, value.xPlaDevice.b);
38363 if (value.yPlaDevice) position.yOffset += variationProcessor.getDelta(variationStore, value.yPlaDevice.a, value.yPlaDevice.b);
38364 if (value.xAdvDevice) position.xAdvance += variationProcessor.getDelta(variationStore, value.xAdvDevice.a, value.xAdvDevice.b);
38365 if (value.yAdvDevice) position.yAdvance += variationProcessor.getDelta(variationStore, value.yAdvDevice.a, value.yAdvDevice.b);
38366 }
38367 // TODO: device tables
38368 }
38369 applyLookup(lookupType, table) {
38370 switch(lookupType){
38371 case 1:
38372 {
38373 let index = this.coverageIndex(table.coverage);
38374 if (index === -1) return false;
38375 switch(table.version){
38376 case 1:
38377 this.applyPositionValue(0, table.value);
38378 break;
38379 case 2:
38380 this.applyPositionValue(0, table.values.get(index));
38381 break;
38382 }
38383 return true;
38384 }
38385 case 2:
38386 {
38387 let nextGlyph = this.glyphIterator.peek();
38388 if (!nextGlyph) return false;
38389 let index = this.coverageIndex(table.coverage);
38390 if (index === -1) return false;
38391 switch(table.version){
38392 case 1:
38393 let set = table.pairSets.get(index);
38394 for (let pair of set)if (pair.secondGlyph === nextGlyph.id) {
38395 this.applyPositionValue(0, pair.value1);
38396 this.applyPositionValue(1, pair.value2);
38397 return true;
38398 }
38399 return false;
38400 case 2:
38401 let class1 = this.getClassID(this.glyphIterator.cur.id, table.classDef1);
38402 let class2 = this.getClassID(nextGlyph.id, table.classDef2);
38403 if (class1 === -1 || class2 === -1) return false;
38404 var pair1 = table.classRecords.get(class1).get(class2);
38405 this.applyPositionValue(0, pair1.value1);
38406 this.applyPositionValue(1, pair1.value2);
38407 return true;
38408 }
38409 }
38410 case 3:
38411 {
38412 let nextIndex = this.glyphIterator.peekIndex();
38413 let nextGlyph = this.glyphs[nextIndex];
38414 if (!nextGlyph) return false;
38415 let curRecord = table.entryExitRecords[this.coverageIndex(table.coverage)];
38416 if (!curRecord || !curRecord.exitAnchor) return false;
38417 let nextRecord = table.entryExitRecords[this.coverageIndex(table.coverage, nextGlyph.id)];
38418 if (!nextRecord || !nextRecord.entryAnchor) return false;
38419 let entry = this.getAnchor(nextRecord.entryAnchor);
38420 let exit = this.getAnchor(curRecord.exitAnchor);
38421 let cur = this.positions[this.glyphIterator.index];
38422 let next = this.positions[nextIndex];
38423 let d;
38424 switch(this.direction){
38425 case 'ltr':
38426 cur.xAdvance = exit.x + cur.xOffset;
38427 d = entry.x + next.xOffset;
38428 next.xAdvance -= d;
38429 next.xOffset -= d;
38430 break;
38431 case 'rtl':
38432 d = exit.x + cur.xOffset;
38433 cur.xAdvance -= d;
38434 cur.xOffset -= d;
38435 next.xAdvance = entry.x + next.xOffset;
38436 break;
38437 }
38438 if (this.glyphIterator.flags.rightToLeft) {
38439 this.glyphIterator.cur.cursiveAttachment = nextIndex;
38440 cur.yOffset = entry.y - exit.y;
38441 } else {
38442 nextGlyph.cursiveAttachment = this.glyphIterator.index;
38443 cur.yOffset = exit.y - entry.y;
38444 }
38445 return true;
38446 }
38447 case 4:
38448 {
38449 let markIndex = this.coverageIndex(table.markCoverage);
38450 if (markIndex === -1) return false;
38451 // search backward for a base glyph
38452 let baseGlyphIndex = this.glyphIterator.index;
38453 while(--baseGlyphIndex >= 0 && (this.glyphs[baseGlyphIndex].isMark || this.glyphs[baseGlyphIndex].ligatureComponent > 0));
38454 if (baseGlyphIndex < 0) return false;
38455 let baseIndex = this.coverageIndex(table.baseCoverage, this.glyphs[baseGlyphIndex].id);
38456 if (baseIndex === -1) return false;
38457 let markRecord = table.markArray[markIndex];
38458 let baseAnchor = table.baseArray[baseIndex][markRecord.class];
38459 this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex);
38460 return true;
38461 }
38462 case 5:
38463 {
38464 let markIndex = this.coverageIndex(table.markCoverage);
38465 if (markIndex === -1) return false;
38466 // search backward for a base glyph
38467 let baseGlyphIndex = this.glyphIterator.index;
38468 while(--baseGlyphIndex >= 0 && this.glyphs[baseGlyphIndex].isMark);
38469 if (baseGlyphIndex < 0) return false;
38470 let ligIndex = this.coverageIndex(table.ligatureCoverage, this.glyphs[baseGlyphIndex].id);
38471 if (ligIndex === -1) return false;
38472 let ligAttach = table.ligatureArray[ligIndex];
38473 let markGlyph = this.glyphIterator.cur;
38474 let ligGlyph = this.glyphs[baseGlyphIndex];
38475 let compIndex = ligGlyph.ligatureID && ligGlyph.ligatureID === markGlyph.ligatureID && markGlyph.ligatureComponent > 0 ? Math.min(markGlyph.ligatureComponent, ligGlyph.codePoints.length) - 1 : ligGlyph.codePoints.length - 1;
38476 let markRecord = table.markArray[markIndex];
38477 let baseAnchor = ligAttach[compIndex][markRecord.class];
38478 this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex);
38479 return true;
38480 }
38481 case 6:
38482 {
38483 let mark1Index = this.coverageIndex(table.mark1Coverage);
38484 if (mark1Index === -1) return false;
38485 // get the previous mark to attach to
38486 let prevIndex = this.glyphIterator.peekIndex(-1);
38487 let prev = this.glyphs[prevIndex];
38488 if (!prev || !prev.isMark) return false;
38489 let cur = this.glyphIterator.cur;
38490 // The following logic was borrowed from Harfbuzz
38491 let good = false;
38492 if (cur.ligatureID === prev.ligatureID) {
38493 if (!cur.ligatureID) good = true;
38494 else if (cur.ligatureComponent === prev.ligatureComponent) good = true;
38495 } else // If ligature ids don't match, it may be the case that one of the marks
38496 // itself is a ligature, in which case match.
38497 if (cur.ligatureID && !cur.ligatureComponent || prev.ligatureID && !prev.ligatureComponent) good = true;
38498 if (!good) return false;
38499 let mark2Index = this.coverageIndex(table.mark2Coverage, prev.id);
38500 if (mark2Index === -1) return false;
38501 let markRecord = table.mark1Array[mark1Index];
38502 let baseAnchor = table.mark2Array[mark2Index][markRecord.class];
38503 this.applyAnchor(markRecord, baseAnchor, prevIndex);
38504 return true;
38505 }
38506 case 7:
38507 return this.applyContext(table);
38508 case 8:
38509 return this.applyChainingContext(table);
38510 case 9:
38511 return this.applyLookup(table.lookupType, table.extension);
38512 default:
38513 throw new Error(`Unsupported GPOS table: ${lookupType}`);
38514 }
38515 }
38516 applyAnchor(markRecord, baseAnchor, baseGlyphIndex) {
38517 let baseCoords = this.getAnchor(baseAnchor);
38518 let markCoords = this.getAnchor(markRecord.markAnchor);
38519 let basePos = this.positions[baseGlyphIndex];
38520 let markPos = this.positions[this.glyphIterator.index];
38521 markPos.xOffset = baseCoords.x - markCoords.x;
38522 markPos.yOffset = baseCoords.y - markCoords.y;
38523 this.glyphIterator.cur.markAttachment = baseGlyphIndex;
38524 }
38525 getAnchor(anchor) {
38526 // TODO: contour point, device tables
38527 let x = anchor.xCoordinate;
38528 let y = anchor.yCoordinate;
38529 // Adjustments for font variations
38530 let variationProcessor = this.font._variationProcessor;
38531 let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;
38532 if (variationProcessor && variationStore) {
38533 if (anchor.xDeviceTable) x += variationProcessor.getDelta(variationStore, anchor.xDeviceTable.a, anchor.xDeviceTable.b);
38534 if (anchor.yDeviceTable) y += variationProcessor.getDelta(variationStore, anchor.yDeviceTable.a, anchor.yDeviceTable.b);
38535 }
38536 return {
38537 x: x,
38538 y: y
38539 };
38540 }
38541 applyFeatures(userFeatures, glyphs, advances) {
38542 super.applyFeatures(userFeatures, glyphs, advances);
38543 for(var i = 0; i < this.glyphs.length; i++)this.fixCursiveAttachment(i);
38544 this.fixMarkAttachment();
38545 }
38546 fixCursiveAttachment(i) {
38547 let glyph = this.glyphs[i];
38548 if (glyph.cursiveAttachment != null) {
38549 let j = glyph.cursiveAttachment;
38550 glyph.cursiveAttachment = null;
38551 this.fixCursiveAttachment(j);
38552 this.positions[i].yOffset += this.positions[j].yOffset;
38553 }
38554 }
38555 fixMarkAttachment() {
38556 for(let i = 0; i < this.glyphs.length; i++){
38557 let glyph = this.glyphs[i];
38558 if (glyph.markAttachment != null) {
38559 let j = glyph.markAttachment;
38560 this.positions[i].xOffset += this.positions[j].xOffset;
38561 this.positions[i].yOffset += this.positions[j].yOffset;
38562 if (this.direction === 'ltr') for(let k = j; k < i; k++){
38563 this.positions[i].xOffset -= this.positions[k].xAdvance;
38564 this.positions[i].yOffset -= this.positions[k].yAdvance;
38565 }
38566 else for(let k1 = j + 1; k1 < i + 1; k1++){
38567 this.positions[i].xOffset += this.positions[k1].xAdvance;
38568 this.positions[i].yOffset += this.positions[k1].yAdvance;
38569 }
38570 }
38571 }
38572 }
38573}
38574
38575
38576class $2ec9b66dcab54746$export$2e2bcd8739ae039 {
38577 setup(glyphRun) {
38578 // Map glyphs to GlyphInfo objects so data can be passed between
38579 // GSUB and GPOS without mutating the real (shared) Glyph objects.
38580 this.glyphInfos = glyphRun.glyphs.map((glyph)=>new $535fa31b81f74b90$export$2e2bcd8739ae039(this.font, glyph.id, [
38581 ...glyph.codePoints
38582 ])
38583 );
38584 // Select a script based on what is available in GSUB/GPOS.
38585 let script = null;
38586 if (this.GPOSProcessor) script = this.GPOSProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);
38587 if (this.GSUBProcessor) script = this.GSUBProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);
38588 // Choose a shaper based on the script, and setup a shaping plan.
38589 // This determines which features to apply to which glyphs.
38590 this.shaper = $936111a4a5a2e9d6$export$7877a478dd30fd3d(script);
38591 this.plan = new $6703eaa61400de19$export$2e2bcd8739ae039(this.font, script, glyphRun.direction);
38592 this.shaper.plan(this.plan, this.glyphInfos, glyphRun.features);
38593 // Assign chosen features to output glyph run
38594 for(let key in this.plan.allFeatures)glyphRun.features[key] = true;
38595 }
38596 substitute(glyphRun) {
38597 if (this.GSUBProcessor) {
38598 this.plan.process(this.GSUBProcessor, this.glyphInfos);
38599 // Map glyph infos back to normal Glyph objects
38600 glyphRun.glyphs = this.glyphInfos.map((glyphInfo)=>this.font.getGlyph(glyphInfo.id, glyphInfo.codePoints)
38601 );
38602 }
38603 }
38604 position(glyphRun) {
38605 if (this.shaper.zeroMarkWidths === 'BEFORE_GPOS') this.zeroMarkAdvances(glyphRun.positions);
38606 if (this.GPOSProcessor) this.plan.process(this.GPOSProcessor, this.glyphInfos, glyphRun.positions);
38607 if (this.shaper.zeroMarkWidths === 'AFTER_GPOS') this.zeroMarkAdvances(glyphRun.positions);
38608 // Reverse the glyphs and positions if the script is right-to-left
38609 if (glyphRun.direction === 'rtl') {
38610 glyphRun.glyphs.reverse();
38611 glyphRun.positions.reverse();
38612 }
38613 return this.GPOSProcessor && this.GPOSProcessor.features;
38614 }
38615 zeroMarkAdvances(positions) {
38616 for(let i = 0; i < this.glyphInfos.length; i++)if (this.glyphInfos[i].isMark) {
38617 positions[i].xAdvance = 0;
38618 positions[i].yAdvance = 0;
38619 }
38620 }
38621 cleanup() {
38622 this.glyphInfos = null;
38623 this.plan = null;
38624 this.shaper = null;
38625 }
38626 getAvailableFeatures(script, language) {
38627 let features = [];
38628 if (this.GSUBProcessor) {
38629 this.GSUBProcessor.selectScript(script, language);
38630 features.push(...Object.keys(this.GSUBProcessor.features));
38631 }
38632 if (this.GPOSProcessor) {
38633 this.GPOSProcessor.selectScript(script, language);
38634 features.push(...Object.keys(this.GPOSProcessor.features));
38635 }
38636 return features;
38637 }
38638 constructor(font){
38639 this.font = font;
38640 this.glyphInfos = null;
38641 this.plan = null;
38642 this.GSUBProcessor = null;
38643 this.GPOSProcessor = null;
38644 this.fallbackPosition = true;
38645 if (font.GSUB) this.GSUBProcessor = new $baa3ae21ed64fb80$export$2e2bcd8739ae039(font, font.GSUB);
38646 if (font.GPOS) this.GPOSProcessor = new $1ab772dcf2da50dd$export$2e2bcd8739ae039(font, font.GPOS);
38647 }
38648}
38649
38650
38651class $8fe7395fdc229fa3$export$2e2bcd8739ae039 {
38652 layout(string, features, script, language, direction) {
38653 // Make the features parameter optional
38654 if (typeof features === 'string') {
38655 direction = language;
38656 language = script;
38657 script = features;
38658 features = [];
38659 }
38660 // Map string to glyphs if needed
38661 if (typeof string === 'string') {
38662 // Attempt to detect the script from the string if not provided.
38663 if (script == null) script = $2e3a795a88d7e002$export$e5cb25e204fb8450(string);
38664 var glyphs = this.font.glyphsForString(string);
38665 } else {
38666 // Attempt to detect the script from the glyph code points if not provided.
38667 if (script == null) {
38668 let codePoints = [];
38669 for (let glyph of string)codePoints.push(...glyph.codePoints);
38670 script = $2e3a795a88d7e002$export$16fab0757cfc223d(codePoints);
38671 }
38672 var glyphs = string;
38673 }
38674 let glyphRun = new $9ee490eecf5a30a9$export$2e2bcd8739ae039(glyphs, features, script, language, direction);
38675 // Return early if there are no glyphs
38676 if (glyphs.length === 0) {
38677 glyphRun.positions = [];
38678 return glyphRun;
38679 }
38680 // Setup the advanced layout engine
38681 if (this.engine && this.engine.setup) this.engine.setup(glyphRun);
38682 // Substitute and position the glyphs
38683 this.substitute(glyphRun);
38684 this.position(glyphRun);
38685 this.hideDefaultIgnorables(glyphRun.glyphs, glyphRun.positions);
38686 // Let the layout engine clean up any state it might have
38687 if (this.engine && this.engine.cleanup) this.engine.cleanup();
38688 return glyphRun;
38689 }
38690 substitute(glyphRun) {
38691 // Call the advanced layout engine to make substitutions
38692 if (this.engine && this.engine.substitute) this.engine.substitute(glyphRun);
38693 }
38694 position(glyphRun) {
38695 // Get initial glyph positions
38696 glyphRun.positions = glyphRun.glyphs.map((glyph)=>new $745bead61c15c3c9$export$2e2bcd8739ae039(glyph.advanceWidth)
38697 );
38698 let positioned = null;
38699 // Call the advanced layout engine. Returns the features applied.
38700 if (this.engine && this.engine.position) positioned = this.engine.position(glyphRun);
38701 // if there is no GPOS table, use unicode properties to position marks.
38702 if (!positioned && (!this.engine || this.engine.fallbackPosition)) {
38703 if (!this.unicodeLayoutEngine) this.unicodeLayoutEngine = new $c2c165353b6a2650$export$2e2bcd8739ae039(this.font);
38704 this.unicodeLayoutEngine.positionGlyphs(glyphRun.glyphs, glyphRun.positions);
38705 }
38706 // if kerning is not supported by GPOS, do kerning with the TrueType/AAT kern table
38707 if ((!positioned || !positioned.kern) && glyphRun.features.kern !== false && this.font.kern) {
38708 if (!this.kernProcessor) this.kernProcessor = new $392dfa2b44d72edd$export$2e2bcd8739ae039(this.font);
38709 this.kernProcessor.process(glyphRun.glyphs, glyphRun.positions);
38710 glyphRun.features.kern = true;
38711 }
38712 }
38713 hideDefaultIgnorables(glyphs, positions) {
38714 let space = this.font.glyphForCodePoint(0x20);
38715 for(let i = 0; i < glyphs.length; i++)if (this.isDefaultIgnorable(glyphs[i].codePoints[0])) {
38716 glyphs[i] = space;
38717 positions[i].xAdvance = 0;
38718 positions[i].yAdvance = 0;
38719 }
38720 }
38721 isDefaultIgnorable(ch) {
38722 // From DerivedCoreProperties.txt in the Unicode database,
38723 // minus U+115F, U+1160, U+3164 and U+FFA0, which is what
38724 // Harfbuzz and Uniscribe do.
38725 let plane = ch >> 16;
38726 if (plane === 0) // BMP
38727 switch(ch >> 8){
38728 case 0x00:
38729 return ch === 0x00AD;
38730 case 0x03:
38731 return ch === 0x034F;
38732 case 0x06:
38733 return ch === 0x061C;
38734 case 0x17:
38735 return 0x17B4 <= ch && ch <= 0x17B5;
38736 case 0x18:
38737 return 0x180B <= ch && ch <= 0x180E;
38738 case 0x20:
38739 return 0x200B <= ch && ch <= 0x200F || 0x202A <= ch && ch <= 0x202E || 0x2060 <= ch && ch <= 0x206F;
38740 case 0xFE:
38741 return 0xFE00 <= ch && ch <= 0xFE0F || ch === 0xFEFF;
38742 case 0xFF:
38743 return 0xFFF0 <= ch && ch <= 0xFFF8;
38744 default:
38745 return false;
38746 }
38747 else // Other planes
38748 switch(plane){
38749 case 0x01:
38750 return 0x1BCA0 <= ch && ch <= 0x1BCA3 || 0x1D173 <= ch && ch <= 0x1D17A;
38751 case 0x0E:
38752 return 0xE0000 <= ch && ch <= 0xE0FFF;
38753 default:
38754 return false;
38755 }
38756 }
38757 getAvailableFeatures(script, language) {
38758 let features = [];
38759 if (this.engine) features.push(...this.engine.getAvailableFeatures(script, language));
38760 if (this.font.kern && features.indexOf('kern') === -1) features.push('kern');
38761 return features;
38762 }
38763 stringsForGlyph(gid) {
38764 let result = new Set;
38765 let codePoints = this.font._cmapProcessor.codePointsForGlyph(gid);
38766 for (let codePoint of codePoints)result.add(String.fromCodePoint(codePoint));
38767 if (this.engine && this.engine.stringsForGlyph) for (let string of this.engine.stringsForGlyph(gid))result.add(string);
38768 return Array.from(result);
38769 }
38770 constructor(font){
38771 this.font = font;
38772 this.unicodeLayoutEngine = null;
38773 this.kernProcessor = null;
38774 // Choose an advanced layout engine. We try the AAT morx table first since more
38775 // scripts are currently supported because the shaping logic is built into the font.
38776 if (this.font.morx) this.engine = new $7cff22d3cf7aa55a$export$2e2bcd8739ae039(this.font);
38777 else if (this.font.GSUB || this.font.GPOS) this.engine = new $2ec9b66dcab54746$export$2e2bcd8739ae039(this.font);
38778 }
38779}
38780
38781
38782
38783
38784
38785
38786const $77603c74293666bc$var$SVG_COMMANDS = {
38787 moveTo: 'M',
38788 lineTo: 'L',
38789 quadraticCurveTo: 'Q',
38790 bezierCurveTo: 'C',
38791 closePath: 'Z'
38792};
38793class $77603c74293666bc$export$2e2bcd8739ae039 {
38794 /**
38795 * Compiles the path to a JavaScript function that can be applied with
38796 * a graphics context in order to render the path.
38797 * @return {string}
38798 */ toFunction() {
38799 return (ctx)=>{
38800 this.commands.forEach((c)=>{
38801 return ctx[c.command].apply(ctx, c.args);
38802 });
38803 };
38804 }
38805 /**
38806 * Converts the path to an SVG path data string
38807 * @return {string}
38808 */ toSVG() {
38809 let cmds = this.commands.map((c)=>{
38810 let args = c.args.map((arg)=>Math.round(arg * 100) / 100
38811 );
38812 return `${$77603c74293666bc$var$SVG_COMMANDS[c.command]}${args.join(' ')}`;
38813 });
38814 return cmds.join('');
38815 }
38816 /**
38817 * Gets the "control box" of a path.
38818 * This is like the bounding box, but it includes all points including
38819 * control points of bezier segments and is much faster to compute than
38820 * the real bounding box.
38821 * @type {BBox}
38822 */ get cbox() {
38823 if (!this._cbox) {
38824 let cbox = new $6d619c173ebabb82$export$2e2bcd8739ae039;
38825 for (let command1 of this.commands)for(let i = 0; i < command1.args.length; i += 2)cbox.addPoint(command1.args[i], command1.args[i + 1]);
38826 this._cbox = Object.freeze(cbox);
38827 }
38828 return this._cbox;
38829 }
38830 /**
38831 * Gets the exact bounding box of the path by evaluating curve segments.
38832 * Slower to compute than the control box, but more accurate.
38833 * @type {BBox}
38834 */ get bbox() {
38835 if (this._bbox) return this._bbox;
38836 let bbox = new $6d619c173ebabb82$export$2e2bcd8739ae039;
38837 let cx = 0, cy = 0;
38838 let f = (t)=>Math.pow(1 - t, 3) * p0[i] + 3 * Math.pow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + Math.pow(t, 3) * p3[i]
38839 ;
38840 for (let c of this.commands)switch(c.command){
38841 case 'moveTo':
38842 case 'lineTo':
38843 let [x, y] = c.args;
38844 bbox.addPoint(x, y);
38845 cx = x;
38846 cy = y;
38847 break;
38848 case 'quadraticCurveTo':
38849 case 'bezierCurveTo':
38850 if (c.command === 'quadraticCurveTo') {
38851 // http://fontforge.org/bezier.html
38852 var [qp1x, qp1y, p3x, p3y] = c.args;
38853 var cp1x = cx + 2 / 3 * (qp1x - cx); // CP1 = QP0 + 2/3 * (QP1-QP0)
38854 var cp1y = cy + 2 / 3 * (qp1y - cy);
38855 var cp2x = p3x + 2 / 3 * (qp1x - p3x); // CP2 = QP2 + 2/3 * (QP1-QP2)
38856 var cp2y = p3y + 2 / 3 * (qp1y - p3y);
38857 } else var [cp1x, cp1y, cp2x, cp2y, p3x, p3y] = c.args;
38858 // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html
38859 bbox.addPoint(p3x, p3y);
38860 var p0 = [
38861 cx,
38862 cy
38863 ];
38864 var p1 = [
38865 cp1x,
38866 cp1y
38867 ];
38868 var p2 = [
38869 cp2x,
38870 cp2y
38871 ];
38872 var p3 = [
38873 p3x,
38874 p3y
38875 ];
38876 for(var i = 0; i <= 1; i++){
38877 let b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];
38878 let a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];
38879 c = 3 * p1[i] - 3 * p0[i];
38880 if (a === 0) {
38881 if (b === 0) continue;
38882 let t = -c / b;
38883 if (0 < t && t < 1) {
38884 if (i === 0) bbox.addPoint(f(t), bbox.maxY);
38885 else if (i === 1) bbox.addPoint(bbox.maxX, f(t));
38886 }
38887 continue;
38888 }
38889 let b2ac = Math.pow(b, 2) - 4 * c * a;
38890 if (b2ac < 0) continue;
38891 let t1 = (-b + Math.sqrt(b2ac)) / (2 * a);
38892 if (0 < t1 && t1 < 1) {
38893 if (i === 0) bbox.addPoint(f(t1), bbox.maxY);
38894 else if (i === 1) bbox.addPoint(bbox.maxX, f(t1));
38895 }
38896 let t2 = (-b - Math.sqrt(b2ac)) / (2 * a);
38897 if (0 < t2 && t2 < 1) {
38898 if (i === 0) bbox.addPoint(f(t2), bbox.maxY);
38899 else if (i === 1) bbox.addPoint(bbox.maxX, f(t2));
38900 }
38901 }
38902 cx = p3x;
38903 cy = p3y;
38904 break;
38905 }
38906 return this._bbox = Object.freeze(bbox);
38907 }
38908 /**
38909 * Applies a mapping function to each point in the path.
38910 * @param {function} fn
38911 * @return {Path}
38912 */ mapPoints(fn) {
38913 let path = new $77603c74293666bc$export$2e2bcd8739ae039;
38914 for (let c of this.commands){
38915 let args = [];
38916 for(let i = 0; i < c.args.length; i += 2){
38917 let [x, y] = fn(c.args[i], c.args[i + 1]);
38918 args.push(x, y);
38919 }
38920 path[c.command](...args);
38921 }
38922 return path;
38923 }
38924 /**
38925 * Transforms the path by the given matrix.
38926 */ transform(m0, m1, m2, m3, m4, m5) {
38927 return this.mapPoints((x, y)=>{
38928 const tx = m0 * x + m2 * y + m4;
38929 const ty = m1 * x + m3 * y + m5;
38930 return [
38931 tx,
38932 ty
38933 ];
38934 });
38935 }
38936 /**
38937 * Translates the path by the given offset.
38938 */ translate(x, y) {
38939 return this.transform(1, 0, 0, 1, x, y);
38940 }
38941 /**
38942 * Rotates the path by the given angle (in radians).
38943 */ rotate(angle) {
38944 let cos = Math.cos(angle);
38945 let sin = Math.sin(angle);
38946 return this.transform(cos, sin, -sin, cos, 0, 0);
38947 }
38948 /**
38949 * Scales the path.
38950 */ scale(scaleX, scaleY = scaleX) {
38951 return this.transform(scaleX, 0, 0, scaleY, 0, 0);
38952 }
38953 constructor(){
38954 this.commands = [];
38955 this._bbox = null;
38956 this._cbox = null;
38957 }
38958}
38959for (let command of [
38960 'moveTo',
38961 'lineTo',
38962 'quadraticCurveTo',
38963 'bezierCurveTo',
38964 'closePath'
38965])$77603c74293666bc$export$2e2bcd8739ae039.prototype[command] = function(...args) {
38966 this._bbox = this._cbox = null;
38967 this.commands.push({
38968 command: command,
38969 args: args
38970 });
38971 return this;
38972};
38973
38974
38975
38976var $1ffba156ee058250$export$2e2bcd8739ae039 = [
38977 '.notdef',
38978 '.null',
38979 'nonmarkingreturn',
38980 'space',
38981 'exclam',
38982 'quotedbl',
38983 'numbersign',
38984 'dollar',
38985 'percent',
38986 'ampersand',
38987 'quotesingle',
38988 'parenleft',
38989 'parenright',
38990 'asterisk',
38991 'plus',
38992 'comma',
38993 'hyphen',
38994 'period',
38995 'slash',
38996 'zero',
38997 'one',
38998 'two',
38999 'three',
39000 'four',
39001 'five',
39002 'six',
39003 'seven',
39004 'eight',
39005 'nine',
39006 'colon',
39007 'semicolon',
39008 'less',
39009 'equal',
39010 'greater',
39011 'question',
39012 'at',
39013 'A',
39014 'B',
39015 'C',
39016 'D',
39017 'E',
39018 'F',
39019 'G',
39020 'H',
39021 'I',
39022 'J',
39023 'K',
39024 'L',
39025 'M',
39026 'N',
39027 'O',
39028 'P',
39029 'Q',
39030 'R',
39031 'S',
39032 'T',
39033 'U',
39034 'V',
39035 'W',
39036 'X',
39037 'Y',
39038 'Z',
39039 'bracketleft',
39040 'backslash',
39041 'bracketright',
39042 'asciicircum',
39043 'underscore',
39044 'grave',
39045 'a',
39046 'b',
39047 'c',
39048 'd',
39049 'e',
39050 'f',
39051 'g',
39052 'h',
39053 'i',
39054 'j',
39055 'k',
39056 'l',
39057 'm',
39058 'n',
39059 'o',
39060 'p',
39061 'q',
39062 'r',
39063 's',
39064 't',
39065 'u',
39066 'v',
39067 'w',
39068 'x',
39069 'y',
39070 'z',
39071 'braceleft',
39072 'bar',
39073 'braceright',
39074 'asciitilde',
39075 'Adieresis',
39076 'Aring',
39077 'Ccedilla',
39078 'Eacute',
39079 'Ntilde',
39080 'Odieresis',
39081 'Udieresis',
39082 'aacute',
39083 'agrave',
39084 'acircumflex',
39085 'adieresis',
39086 'atilde',
39087 'aring',
39088 'ccedilla',
39089 'eacute',
39090 'egrave',
39091 'ecircumflex',
39092 'edieresis',
39093 'iacute',
39094 'igrave',
39095 'icircumflex',
39096 'idieresis',
39097 'ntilde',
39098 'oacute',
39099 'ograve',
39100 'ocircumflex',
39101 'odieresis',
39102 'otilde',
39103 'uacute',
39104 'ugrave',
39105 'ucircumflex',
39106 'udieresis',
39107 'dagger',
39108 'degree',
39109 'cent',
39110 'sterling',
39111 'section',
39112 'bullet',
39113 'paragraph',
39114 'germandbls',
39115 'registered',
39116 'copyright',
39117 'trademark',
39118 'acute',
39119 'dieresis',
39120 'notequal',
39121 'AE',
39122 'Oslash',
39123 'infinity',
39124 'plusminus',
39125 'lessequal',
39126 'greaterequal',
39127 'yen',
39128 'mu',
39129 'partialdiff',
39130 'summation',
39131 'product',
39132 'pi',
39133 'integral',
39134 'ordfeminine',
39135 'ordmasculine',
39136 'Omega',
39137 'ae',
39138 'oslash',
39139 'questiondown',
39140 'exclamdown',
39141 'logicalnot',
39142 'radical',
39143 'florin',
39144 'approxequal',
39145 'Delta',
39146 'guillemotleft',
39147 'guillemotright',
39148 'ellipsis',
39149 'nonbreakingspace',
39150 'Agrave',
39151 'Atilde',
39152 'Otilde',
39153 'OE',
39154 'oe',
39155 'endash',
39156 'emdash',
39157 'quotedblleft',
39158 'quotedblright',
39159 'quoteleft',
39160 'quoteright',
39161 'divide',
39162 'lozenge',
39163 'ydieresis',
39164 'Ydieresis',
39165 'fraction',
39166 'currency',
39167 'guilsinglleft',
39168 'guilsinglright',
39169 'fi',
39170 'fl',
39171 'daggerdbl',
39172 'periodcentered',
39173 'quotesinglbase',
39174 'quotedblbase',
39175 'perthousand',
39176 'Acircumflex',
39177 'Ecircumflex',
39178 'Aacute',
39179 'Edieresis',
39180 'Egrave',
39181 'Iacute',
39182 'Icircumflex',
39183 'Idieresis',
39184 'Igrave',
39185 'Oacute',
39186 'Ocircumflex',
39187 'apple',
39188 'Ograve',
39189 'Uacute',
39190 'Ucircumflex',
39191 'Ugrave',
39192 'dotlessi',
39193 'circumflex',
39194 'tilde',
39195 'macron',
39196 'breve',
39197 'dotaccent',
39198 'ring',
39199 'cedilla',
39200 'hungarumlaut',
39201 'ogonek',
39202 'caron',
39203 'Lslash',
39204 'lslash',
39205 'Scaron',
39206 'scaron',
39207 'Zcaron',
39208 'zcaron',
39209 'brokenbar',
39210 'Eth',
39211 'eth',
39212 'Yacute',
39213 'yacute',
39214 'Thorn',
39215 'thorn',
39216 'minus',
39217 'multiply',
39218 'onesuperior',
39219 'twosuperior',
39220 'threesuperior',
39221 'onehalf',
39222 'onequarter',
39223 'threequarters',
39224 'franc',
39225 'Gbreve',
39226 'gbreve',
39227 'Idotaccent',
39228 'Scedilla',
39229 'scedilla',
39230 'Cacute',
39231 'cacute',
39232 'Ccaron',
39233 'ccaron',
39234 'dcroat'
39235];
39236
39237
39238var _class;
39239let $499b081c6bd05466$export$2e2bcd8739ae039 = (_class = class $499b081c6bd05466$export$2e2bcd8739ae039 {
39240 _getPath() {
39241 return new $77603c74293666bc$export$2e2bcd8739ae039();
39242 }
39243 _getCBox() {
39244 return this.path.cbox;
39245 }
39246 _getBBox() {
39247 return this.path.bbox;
39248 }
39249 _getTableMetrics(table) {
39250 if (this.id < table.metrics.length) return table.metrics.get(this.id);
39251 let metric = table.metrics.get(table.metrics.length - 1);
39252 let res = {
39253 advance: metric ? metric.advance : 0,
39254 bearing: table.bearings.get(this.id - table.metrics.length) || 0
39255 };
39256 return res;
39257 }
39258 _getMetrics(cbox) {
39259 if (this._metrics) return this._metrics;
39260 let { advance: advanceWidth , bearing: leftBearing } = this._getTableMetrics(this._font.hmtx);
39261 // For vertical metrics, use vmtx if available, or fall back to global data from OS/2 or hhea
39262 if (this._font.vmtx) var { advance: advanceHeight , bearing: topBearing } = this._getTableMetrics(this._font.vmtx);
39263 else {
39264 let os2;
39265 if (typeof cbox === 'undefined' || cbox === null) ({ cbox: cbox } = this);
39266 if ((os2 = this._font['OS/2']) && os2.version > 0) {
39267 var advanceHeight = Math.abs(os2.typoAscender - os2.typoDescender);
39268 var topBearing = os2.typoAscender - cbox.maxY;
39269 } else {
39270 let { hhea: hhea } = this._font;
39271 var advanceHeight = Math.abs(hhea.ascent - hhea.descent);
39272 var topBearing = hhea.ascent - cbox.maxY;
39273 }
39274 }
39275 if (this._font._variationProcessor && this._font.HVAR) advanceWidth += this._font._variationProcessor.getAdvanceAdjustment(this.id, this._font.HVAR);
39276 return this._metrics = {
39277 advanceWidth: advanceWidth,
39278 advanceHeight: advanceHeight,
39279 leftBearing: leftBearing,
39280 topBearing: topBearing
39281 };
39282 }
39283 /**
39284 * The glyph’s control box.
39285 * This is often the same as the bounding box, but is faster to compute.
39286 * Because of the way bezier curves are defined, some of the control points
39287 * can be outside of the bounding box. Where `bbox` takes this into account,
39288 * `cbox` does not. Thus, cbox is less accurate, but faster to compute.
39289 * See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2)
39290 * for a more detailed description.
39291 *
39292 * @type {BBox}
39293 */ get cbox() {
39294 return this._getCBox();
39295 }
39296 /**
39297 * The glyph’s bounding box, i.e. the rectangle that encloses the
39298 * glyph outline as tightly as possible.
39299 * @type {BBox}
39300 */ get bbox() {
39301 return this._getBBox();
39302 }
39303 /**
39304 * A vector Path object representing the glyph outline.
39305 * @type {Path}
39306 */ get path() {
39307 // Cache the path so we only decode it once
39308 // Decoding is actually performed by subclasses
39309 return this._getPath();
39310 }
39311 /**
39312 * Returns a path scaled to the given font size.
39313 * @param {number} size
39314 * @return {Path}
39315 */ getScaledPath(size) {
39316 let scale = 1 / this._font.unitsPerEm * size;
39317 return this.path.scale(scale);
39318 }
39319 /**
39320 * The glyph's advance width.
39321 * @type {number}
39322 */ get advanceWidth() {
39323 return this._getMetrics().advanceWidth;
39324 }
39325 /**
39326 * The glyph's advance height.
39327 * @type {number}
39328 */ get advanceHeight() {
39329 return this._getMetrics().advanceHeight;
39330 }
39331 get ligatureCaretPositions() {}
39332 _getName() {
39333 let { post: post } = this._font;
39334 if (!post) return null;
39335 switch(post.version){
39336 case 1:
39337 return $1ffba156ee058250$export$2e2bcd8739ae039[this.id];
39338 case 2:
39339 let id = post.glyphNameIndex[this.id];
39340 if (id < $1ffba156ee058250$export$2e2bcd8739ae039.length) return $1ffba156ee058250$export$2e2bcd8739ae039[id];
39341 return post.names[id - $1ffba156ee058250$export$2e2bcd8739ae039.length];
39342 case 2.5:
39343 return $1ffba156ee058250$export$2e2bcd8739ae039[this.id + post.offsets[this.id]];
39344 case 4:
39345 return String.fromCharCode(post.map[this.id]);
39346 }
39347 }
39348 /**
39349 * The glyph's name
39350 * @type {string}
39351 */ get name() {
39352 return this._getName();
39353 }
39354 /**
39355 * Renders the glyph to the given graphics context, at the specified font size.
39356 * @param {CanvasRenderingContext2d} ctx
39357 * @param {number} size
39358 */ render(ctx, size) {
39359 ctx.save();
39360 let scale = 1 / this._font.head.unitsPerEm * size;
39361 ctx.scale(scale, scale);
39362 let fn = this.path.toFunction();
39363 fn(ctx);
39364 ctx.fill();
39365 ctx.restore();
39366 }
39367 constructor(id, codePoints, font){
39368 /**
39369 * The glyph id in the font
39370 * @type {number}
39371 */ this.id = id;
39372 /**
39373 * An array of unicode code points that are represented by this glyph.
39374 * There can be multiple code points in the case of ligatures and other glyphs
39375 * that represent multiple visual characters.
39376 * @type {number[]}
39377 */ this.codePoints = codePoints;
39378 this._font = font;
39379 // TODO: get this info from GDEF if available
39380 this.isMark = this.codePoints.length > 0 && this.codePoints.every(($parcel$interopDefault($lzfo4$unicodeproperties)).isMark);
39381 this.isLigature = this.codePoints.length > 1;
39382 }
39383}, $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "cbox", [
39384 $9ea776e3198edd2e$export$69a3209f1a06c04d
39385], Object.getOwnPropertyDescriptor(_class.prototype, "cbox"), _class.prototype), $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "bbox", [
39386 $9ea776e3198edd2e$export$69a3209f1a06c04d
39387], Object.getOwnPropertyDescriptor(_class.prototype, "bbox"), _class.prototype), $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "path", [
39388 $9ea776e3198edd2e$export$69a3209f1a06c04d
39389], Object.getOwnPropertyDescriptor(_class.prototype, "path"), _class.prototype), $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "advanceWidth", [
39390 $9ea776e3198edd2e$export$69a3209f1a06c04d
39391], Object.getOwnPropertyDescriptor(_class.prototype, "advanceWidth"), _class.prototype), $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "advanceHeight", [
39392 $9ea776e3198edd2e$export$69a3209f1a06c04d
39393], Object.getOwnPropertyDescriptor(_class.prototype, "advanceHeight"), _class.prototype), $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "name", [
39394 $9ea776e3198edd2e$export$69a3209f1a06c04d
39395], Object.getOwnPropertyDescriptor(_class.prototype, "name"), _class.prototype), _class);
39396
39397
39398
39399
39400
39401// The header for both simple and composite glyphs
39402let $f71300a5bebbfea9$var$GlyfHeader = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
39403 numberOfContours: ($parcel$interopDefault($lzfo4$restructure)).int16,
39404 xMin: ($parcel$interopDefault($lzfo4$restructure)).int16,
39405 yMin: ($parcel$interopDefault($lzfo4$restructure)).int16,
39406 xMax: ($parcel$interopDefault($lzfo4$restructure)).int16,
39407 yMax: ($parcel$interopDefault($lzfo4$restructure)).int16
39408});
39409// Flags for simple glyphs
39410const $f71300a5bebbfea9$var$ON_CURVE = 1;
39411const $f71300a5bebbfea9$var$X_SHORT_VECTOR = 2;
39412const $f71300a5bebbfea9$var$Y_SHORT_VECTOR = 4;
39413const $f71300a5bebbfea9$var$REPEAT = 8;
39414const $f71300a5bebbfea9$var$SAME_X = 16;
39415const $f71300a5bebbfea9$var$SAME_Y = 32;
39416// Flags for composite glyphs
39417const $f71300a5bebbfea9$var$ARG_1_AND_2_ARE_WORDS = 1;
39418const $f71300a5bebbfea9$var$ARGS_ARE_XY_VALUES = 2;
39419const $f71300a5bebbfea9$var$ROUND_XY_TO_GRID = 4;
39420const $f71300a5bebbfea9$var$WE_HAVE_A_SCALE = 8;
39421const $f71300a5bebbfea9$var$MORE_COMPONENTS = 32;
39422const $f71300a5bebbfea9$var$WE_HAVE_AN_X_AND_Y_SCALE = 64;
39423const $f71300a5bebbfea9$var$WE_HAVE_A_TWO_BY_TWO = 128;
39424const $f71300a5bebbfea9$var$WE_HAVE_INSTRUCTIONS = 256;
39425const $f71300a5bebbfea9$var$USE_MY_METRICS = 512;
39426const $f71300a5bebbfea9$var$OVERLAP_COMPOUND = 1024;
39427const $f71300a5bebbfea9$var$SCALED_COMPONENT_OFFSET = 2048;
39428const $f71300a5bebbfea9$var$UNSCALED_COMPONENT_OFFSET = 4096;
39429class $f71300a5bebbfea9$export$baf26146a414f24a {
39430 copy() {
39431 return new $f71300a5bebbfea9$export$baf26146a414f24a(this.onCurve, this.endContour, this.x, this.y);
39432 }
39433 constructor(onCurve, endContour, x = 0, y = 0){
39434 this.onCurve = onCurve;
39435 this.endContour = endContour;
39436 this.x = x;
39437 this.y = y;
39438 }
39439}
39440// Represents a component in a composite glyph
39441class $f71300a5bebbfea9$var$Component {
39442 constructor(glyphID, dx, dy){
39443 this.glyphID = glyphID;
39444 this.dx = dx;
39445 this.dy = dy;
39446 this.pos = 0;
39447 this.scaleX = this.scaleY = 1;
39448 this.scale01 = this.scale10 = 0;
39449 }
39450}
39451class $f71300a5bebbfea9$export$2e2bcd8739ae039 extends $499b081c6bd05466$export$2e2bcd8739ae039 {
39452 // Parses just the glyph header and returns the bounding box
39453 _getCBox(internal) {
39454 // We need to decode the glyph if variation processing is requested,
39455 // so it's easier just to recompute the path's cbox after decoding.
39456 if (this._font._variationProcessor && !internal) return this.path.cbox;
39457 let stream = this._font._getTableStream('glyf');
39458 stream.pos += this._font.loca.offsets[this.id];
39459 let glyph = $f71300a5bebbfea9$var$GlyfHeader.decode(stream);
39460 let cbox = new $6d619c173ebabb82$export$2e2bcd8739ae039(glyph.xMin, glyph.yMin, glyph.xMax, glyph.yMax);
39461 return Object.freeze(cbox);
39462 }
39463 // Parses a single glyph coordinate
39464 _parseGlyphCoord(stream, prev, short, same) {
39465 if (short) {
39466 var val = stream.readUInt8();
39467 if (!same) val = -val;
39468 val += prev;
39469 } else if (same) var val = prev;
39470 else var val = prev + stream.readInt16BE();
39471 return val;
39472 }
39473 // Decodes the glyph data into points for simple glyphs,
39474 // or components for composite glyphs
39475 _decode() {
39476 let glyfPos = this._font.loca.offsets[this.id];
39477 let nextPos = this._font.loca.offsets[this.id + 1];
39478 // Nothing to do if there is no data for this glyph
39479 if (glyfPos === nextPos) return null;
39480 let stream = this._font._getTableStream('glyf');
39481 stream.pos += glyfPos;
39482 let startPos = stream.pos;
39483 let glyph = $f71300a5bebbfea9$var$GlyfHeader.decode(stream);
39484 if (glyph.numberOfContours > 0) this._decodeSimple(glyph, stream);
39485 else if (glyph.numberOfContours < 0) this._decodeComposite(glyph, stream, startPos);
39486 return glyph;
39487 }
39488 _decodeSimple(glyph, stream) {
39489 // this is a simple glyph
39490 glyph.points = [];
39491 let endPtsOfContours = new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, glyph.numberOfContours).decode(stream);
39492 glyph.instructions = new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, ($parcel$interopDefault($lzfo4$restructure)).uint16).decode(stream);
39493 let flags = [];
39494 let numCoords = endPtsOfContours[endPtsOfContours.length - 1] + 1;
39495 while(flags.length < numCoords){
39496 var flag = stream.readUInt8();
39497 flags.push(flag);
39498 // check for repeat flag
39499 if (flag & $f71300a5bebbfea9$var$REPEAT) {
39500 let count = stream.readUInt8();
39501 for(let j = 0; j < count; j++)flags.push(flag);
39502 }
39503 }
39504 for(var i = 0; i < flags.length; i++){
39505 var flag = flags[i];
39506 let point = new $f71300a5bebbfea9$export$baf26146a414f24a(!!(flag & $f71300a5bebbfea9$var$ON_CURVE), endPtsOfContours.indexOf(i) >= 0, 0, 0);
39507 glyph.points.push(point);
39508 }
39509 let px = 0;
39510 for(var i = 0; i < flags.length; i++){
39511 var flag = flags[i];
39512 glyph.points[i].x = px = this._parseGlyphCoord(stream, px, flag & $f71300a5bebbfea9$var$X_SHORT_VECTOR, flag & $f71300a5bebbfea9$var$SAME_X);
39513 }
39514 let py = 0;
39515 for(var i = 0; i < flags.length; i++){
39516 var flag = flags[i];
39517 glyph.points[i].y = py = this._parseGlyphCoord(stream, py, flag & $f71300a5bebbfea9$var$Y_SHORT_VECTOR, flag & $f71300a5bebbfea9$var$SAME_Y);
39518 }
39519 if (this._font._variationProcessor) {
39520 let points = glyph.points.slice();
39521 points.push(...this._getPhantomPoints(glyph));
39522 this._font._variationProcessor.transformPoints(this.id, points);
39523 glyph.phantomPoints = points.slice(-4);
39524 }
39525 return;
39526 }
39527 _decodeComposite(glyph, stream, offset = 0) {
39528 // this is a composite glyph
39529 glyph.components = [];
39530 let haveInstructions = false;
39531 let flags = $f71300a5bebbfea9$var$MORE_COMPONENTS;
39532 while(flags & $f71300a5bebbfea9$var$MORE_COMPONENTS){
39533 flags = stream.readUInt16BE();
39534 let gPos = stream.pos - offset;
39535 let glyphID = stream.readUInt16BE();
39536 if (!haveInstructions) haveInstructions = (flags & $f71300a5bebbfea9$var$WE_HAVE_INSTRUCTIONS) !== 0;
39537 if (flags & $f71300a5bebbfea9$var$ARG_1_AND_2_ARE_WORDS) {
39538 var dx = stream.readInt16BE();
39539 var dy = stream.readInt16BE();
39540 } else {
39541 var dx = stream.readInt8();
39542 var dy = stream.readInt8();
39543 }
39544 var component = new $f71300a5bebbfea9$var$Component(glyphID, dx, dy);
39545 component.pos = gPos;
39546 if (flags & $f71300a5bebbfea9$var$WE_HAVE_A_SCALE) // fixed number with 14 bits of fraction
39547 component.scaleX = component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;
39548 else if (flags & $f71300a5bebbfea9$var$WE_HAVE_AN_X_AND_Y_SCALE) {
39549 component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;
39550 component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;
39551 } else if (flags & $f71300a5bebbfea9$var$WE_HAVE_A_TWO_BY_TWO) {
39552 component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;
39553 component.scale01 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;
39554 component.scale10 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;
39555 component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;
39556 }
39557 glyph.components.push(component);
39558 }
39559 if (this._font._variationProcessor) {
39560 let points = [];
39561 for(let j = 0; j < glyph.components.length; j++){
39562 var component = glyph.components[j];
39563 points.push(new $f71300a5bebbfea9$export$baf26146a414f24a(true, true, component.dx, component.dy));
39564 }
39565 points.push(...this._getPhantomPoints(glyph));
39566 this._font._variationProcessor.transformPoints(this.id, points);
39567 glyph.phantomPoints = points.splice(-4, 4);
39568 for(let i = 0; i < points.length; i++){
39569 let point = points[i];
39570 glyph.components[i].dx = point.x;
39571 glyph.components[i].dy = point.y;
39572 }
39573 }
39574 return haveInstructions;
39575 }
39576 _getPhantomPoints(glyph) {
39577 let cbox = this._getCBox(true);
39578 if (this._metrics == null) this._metrics = $499b081c6bd05466$export$2e2bcd8739ae039.prototype._getMetrics.call(this, cbox);
39579 let { advanceWidth: advanceWidth , advanceHeight: advanceHeight , leftBearing: leftBearing , topBearing: topBearing } = this._metrics;
39580 return [
39581 new $f71300a5bebbfea9$export$baf26146a414f24a(false, true, glyph.xMin - leftBearing, 0),
39582 new $f71300a5bebbfea9$export$baf26146a414f24a(false, true, glyph.xMin - leftBearing + advanceWidth, 0),
39583 new $f71300a5bebbfea9$export$baf26146a414f24a(false, true, 0, glyph.yMax + topBearing),
39584 new $f71300a5bebbfea9$export$baf26146a414f24a(false, true, 0, glyph.yMax + topBearing + advanceHeight)
39585 ];
39586 }
39587 // Decodes font data, resolves composite glyphs, and returns an array of contours
39588 _getContours() {
39589 let glyph = this._decode();
39590 if (!glyph) return [];
39591 let points = [];
39592 if (glyph.numberOfContours < 0) // resolve composite glyphs
39593 for (let component of glyph.components){
39594 let contours = this._font.getGlyph(component.glyphID)._getContours();
39595 for(let i = 0; i < contours.length; i++){
39596 let contour = contours[i];
39597 for(let j = 0; j < contour.length; j++){
39598 let point = contour[j];
39599 let x = point.x * component.scaleX + point.y * component.scale01 + component.dx;
39600 let y = point.y * component.scaleY + point.x * component.scale10 + component.dy;
39601 points.push(new $f71300a5bebbfea9$export$baf26146a414f24a(point.onCurve, point.endContour, x, y));
39602 }
39603 }
39604 }
39605 else points = glyph.points || [];
39606 // Recompute and cache metrics if we performed variation processing, and don't have an HVAR table
39607 if (glyph.phantomPoints && !this._font.directory.tables.HVAR) {
39608 this._metrics.advanceWidth = glyph.phantomPoints[1].x - glyph.phantomPoints[0].x;
39609 this._metrics.advanceHeight = glyph.phantomPoints[3].y - glyph.phantomPoints[2].y;
39610 this._metrics.leftBearing = glyph.xMin - glyph.phantomPoints[0].x;
39611 this._metrics.topBearing = glyph.phantomPoints[2].y - glyph.yMax;
39612 }
39613 let contours = [];
39614 let cur = [];
39615 for(let k = 0; k < points.length; k++){
39616 var point = points[k];
39617 cur.push(point);
39618 if (point.endContour) {
39619 contours.push(cur);
39620 cur = [];
39621 }
39622 }
39623 return contours;
39624 }
39625 _getMetrics() {
39626 if (this._metrics) return this._metrics;
39627 let cbox = this._getCBox(true);
39628 super._getMetrics(cbox);
39629 if (this._font._variationProcessor && !this._font.HVAR) // No HVAR table, decode the glyph. This triggers recomputation of metrics.
39630 this.path;
39631 return this._metrics;
39632 }
39633 // Converts contours to a Path object that can be rendered
39634 _getPath() {
39635 let contours = this._getContours();
39636 let path = new $77603c74293666bc$export$2e2bcd8739ae039;
39637 for(let i = 0; i < contours.length; i++){
39638 let contour = contours[i];
39639 let firstPt = contour[0];
39640 let lastPt = contour[contour.length - 1];
39641 let start = 0;
39642 if (firstPt.onCurve) {
39643 // The first point will be consumed by the moveTo command, so skip in the loop
39644 var curvePt = null;
39645 start = 1;
39646 } else {
39647 if (lastPt.onCurve) // Start at the last point if the first point is off curve and the last point is on curve
39648 firstPt = lastPt;
39649 else // Start at the middle if both the first and last points are off curve
39650 firstPt = new $f71300a5bebbfea9$export$baf26146a414f24a(false, false, (firstPt.x + lastPt.x) / 2, (firstPt.y + lastPt.y) / 2);
39651 var curvePt = firstPt;
39652 }
39653 path.moveTo(firstPt.x, firstPt.y);
39654 for(let j = start; j < contour.length; j++){
39655 let pt = contour[j];
39656 let prevPt = j === 0 ? firstPt : contour[j - 1];
39657 if (prevPt.onCurve && pt.onCurve) path.lineTo(pt.x, pt.y);
39658 else if (prevPt.onCurve && !pt.onCurve) var curvePt = pt;
39659 else if (!prevPt.onCurve && !pt.onCurve) {
39660 let midX = (prevPt.x + pt.x) / 2;
39661 let midY = (prevPt.y + pt.y) / 2;
39662 path.quadraticCurveTo(prevPt.x, prevPt.y, midX, midY);
39663 var curvePt = pt;
39664 } else if (!prevPt.onCurve && pt.onCurve) {
39665 path.quadraticCurveTo(curvePt.x, curvePt.y, pt.x, pt.y);
39666 var curvePt = null;
39667 } else throw new Error("Unknown TTF path state");
39668 }
39669 // Connect the first and last points
39670 if (curvePt) path.quadraticCurveTo(curvePt.x, curvePt.y, firstPt.x, firstPt.y);
39671 path.closePath();
39672 }
39673 return path;
39674 }
39675 constructor(...args){
39676 super(...args);
39677 $lzfo4$swchelpers.defineProperty(this, "type", 'TTF');
39678 }
39679}
39680
39681
39682
39683
39684
39685class $e3cf8415f0436224$export$2e2bcd8739ae039 extends $499b081c6bd05466$export$2e2bcd8739ae039 {
39686 _getName() {
39687 if (this._font.CFF2) return super._getName();
39688 return this._font['CFF '].getGlyphName(this.id);
39689 }
39690 bias(s) {
39691 if (s.length < 1240) return 107;
39692 else if (s.length < 33900) return 1131;
39693 else return 32768;
39694 }
39695 _getPath() {
39696 let cff = this._font.CFF2 || this._font['CFF '];
39697 let { stream: stream } = cff;
39698 let str = cff.topDict.CharStrings[this.id];
39699 let end = str.offset + str.length;
39700 stream.pos = str.offset;
39701 let path = new $77603c74293666bc$export$2e2bcd8739ae039;
39702 let stack = [];
39703 let trans = [];
39704 let width = null;
39705 let nStems = 0;
39706 let x1 = 0, y1 = 0;
39707 let usedGsubrs;
39708 let usedSubrs;
39709 let open = false;
39710 this._usedGsubrs = usedGsubrs = {};
39711 this._usedSubrs = usedSubrs = {};
39712 let gsubrs = cff.globalSubrIndex || [];
39713 let gsubrsBias = this.bias(gsubrs);
39714 let privateDict = cff.privateDictForGlyph(this.id) || {};
39715 let subrs = privateDict.Subrs || [];
39716 let subrsBias = this.bias(subrs);
39717 let vstore = cff.topDict.vstore && cff.topDict.vstore.itemVariationStore;
39718 let vsindex = privateDict.vsindex;
39719 let variationProcessor = this._font._variationProcessor;
39720 function checkWidth() {
39721 if (width == null) width = stack.shift() + privateDict.nominalWidthX;
39722 }
39723 function parseStems() {
39724 if (stack.length % 2 !== 0) checkWidth();
39725 nStems += stack.length >> 1;
39726 return stack.length = 0;
39727 }
39728 function moveTo(x, y) {
39729 if (open) path.closePath();
39730 path.moveTo(x, y);
39731 open = true;
39732 }
39733 let parse = function() {
39734 while(stream.pos < end){
39735 let op = stream.readUInt8();
39736 if (op < 32) {
39737 let index, subr, phase;
39738 switch(op){
39739 case 1:
39740 case 3:
39741 case 18:
39742 case 23:
39743 parseStems();
39744 break;
39745 case 4:
39746 if (stack.length > 1) checkWidth();
39747 y1 += stack.shift();
39748 moveTo(x1, y1);
39749 break;
39750 case 5:
39751 while(stack.length >= 2){
39752 x1 += stack.shift();
39753 y1 += stack.shift();
39754 path.lineTo(x1, y1);
39755 }
39756 break;
39757 case 6:
39758 case 7:
39759 phase = op === 6;
39760 while(stack.length >= 1){
39761 if (phase) x1 += stack.shift();
39762 else y1 += stack.shift();
39763 path.lineTo(x1, y1);
39764 phase = !phase;
39765 }
39766 break;
39767 case 8:
39768 while(stack.length > 0){
39769 var c1x = x1 + stack.shift();
39770 var c1y = y1 + stack.shift();
39771 var c2x = c1x + stack.shift();
39772 var c2y = c1y + stack.shift();
39773 x1 = c2x + stack.shift();
39774 y1 = c2y + stack.shift();
39775 path.bezierCurveTo(c1x, c1y, c2x, c2y, x1, y1);
39776 }
39777 break;
39778 case 10:
39779 index = stack.pop() + subrsBias;
39780 subr = subrs[index];
39781 if (subr) {
39782 usedSubrs[index] = true;
39783 var p = stream.pos;
39784 var e = end;
39785 stream.pos = subr.offset;
39786 end = subr.offset + subr.length;
39787 parse();
39788 stream.pos = p;
39789 end = e;
39790 }
39791 break;
39792 case 11:
39793 if (cff.version >= 2) break;
39794 return;
39795 case 14:
39796 if (cff.version >= 2) break;
39797 if (stack.length > 0) checkWidth();
39798 if (open) {
39799 path.closePath();
39800 open = false;
39801 }
39802 break;
39803 case 15:
39804 if (cff.version < 2) throw new Error('vsindex operator not supported in CFF v1');
39805 vsindex = stack.pop();
39806 break;
39807 case 16:
39808 {
39809 if (cff.version < 2) throw new Error('blend operator not supported in CFF v1');
39810 if (!variationProcessor) throw new Error('blend operator in non-variation font');
39811 let blendVector = variationProcessor.getBlendVector(vstore, vsindex);
39812 let numBlends = stack.pop();
39813 let numOperands = numBlends * blendVector.length;
39814 let delta = stack.length - numOperands;
39815 let base = delta - numBlends;
39816 for(let i = 0; i < numBlends; i++){
39817 let sum = stack[base + i];
39818 for(let j = 0; j < blendVector.length; j++)sum += blendVector[j] * stack[delta++];
39819 stack[base + i] = sum;
39820 }
39821 while(numOperands--)stack.pop();
39822 break;
39823 }
39824 case 19:
39825 case 20:
39826 parseStems();
39827 stream.pos += nStems + 7 >> 3;
39828 break;
39829 case 21:
39830 if (stack.length > 2) checkWidth();
39831 x1 += stack.shift();
39832 y1 += stack.shift();
39833 moveTo(x1, y1);
39834 break;
39835 case 22:
39836 if (stack.length > 1) checkWidth();
39837 x1 += stack.shift();
39838 moveTo(x1, y1);
39839 break;
39840 case 24:
39841 while(stack.length >= 8){
39842 var c1x = x1 + stack.shift();
39843 var c1y = y1 + stack.shift();
39844 var c2x = c1x + stack.shift();
39845 var c2y = c1y + stack.shift();
39846 x1 = c2x + stack.shift();
39847 y1 = c2y + stack.shift();
39848 path.bezierCurveTo(c1x, c1y, c2x, c2y, x1, y1);
39849 }
39850 x1 += stack.shift();
39851 y1 += stack.shift();
39852 path.lineTo(x1, y1);
39853 break;
39854 case 25:
39855 while(stack.length >= 8){
39856 x1 += stack.shift();
39857 y1 += stack.shift();
39858 path.lineTo(x1, y1);
39859 }
39860 var c1x = x1 + stack.shift();
39861 var c1y = y1 + stack.shift();
39862 var c2x = c1x + stack.shift();
39863 var c2y = c1y + stack.shift();
39864 x1 = c2x + stack.shift();
39865 y1 = c2y + stack.shift();
39866 path.bezierCurveTo(c1x, c1y, c2x, c2y, x1, y1);
39867 break;
39868 case 26:
39869 if (stack.length % 2) x1 += stack.shift();
39870 while(stack.length >= 4){
39871 c1x = x1;
39872 c1y = y1 + stack.shift();
39873 c2x = c1x + stack.shift();
39874 c2y = c1y + stack.shift();
39875 x1 = c2x;
39876 y1 = c2y + stack.shift();
39877 path.bezierCurveTo(c1x, c1y, c2x, c2y, x1, y1);
39878 }
39879 break;
39880 case 27:
39881 if (stack.length % 2) y1 += stack.shift();
39882 while(stack.length >= 4){
39883 c1x = x1 + stack.shift();
39884 c1y = y1;
39885 c2x = c1x + stack.shift();
39886 c2y = c1y + stack.shift();
39887 x1 = c2x + stack.shift();
39888 y1 = c2y;
39889 path.bezierCurveTo(c1x, c1y, c2x, c2y, x1, y1);
39890 }
39891 break;
39892 case 28:
39893 stack.push(stream.readInt16BE());
39894 break;
39895 case 29:
39896 index = stack.pop() + gsubrsBias;
39897 subr = gsubrs[index];
39898 if (subr) {
39899 usedGsubrs[index] = true;
39900 var p = stream.pos;
39901 var e = end;
39902 stream.pos = subr.offset;
39903 end = subr.offset + subr.length;
39904 parse();
39905 stream.pos = p;
39906 end = e;
39907 }
39908 break;
39909 case 30:
39910 case 31:
39911 phase = op === 31;
39912 while(stack.length >= 4){
39913 if (phase) {
39914 c1x = x1 + stack.shift();
39915 c1y = y1;
39916 c2x = c1x + stack.shift();
39917 c2y = c1y + stack.shift();
39918 y1 = c2y + stack.shift();
39919 x1 = c2x + (stack.length === 1 ? stack.shift() : 0);
39920 } else {
39921 c1x = x1;
39922 c1y = y1 + stack.shift();
39923 c2x = c1x + stack.shift();
39924 c2y = c1y + stack.shift();
39925 x1 = c2x + stack.shift();
39926 y1 = c2y + (stack.length === 1 ? stack.shift() : 0);
39927 }
39928 path.bezierCurveTo(c1x, c1y, c2x, c2y, x1, y1);
39929 phase = !phase;
39930 }
39931 break;
39932 case 12:
39933 op = stream.readUInt8();
39934 switch(op){
39935 case 3:
39936 let a = stack.pop();
39937 let b = stack.pop();
39938 stack.push(a && b ? 1 : 0);
39939 break;
39940 case 4:
39941 a = stack.pop();
39942 b = stack.pop();
39943 stack.push(a || b ? 1 : 0);
39944 break;
39945 case 5:
39946 a = stack.pop();
39947 stack.push(a ? 0 : 1);
39948 break;
39949 case 9:
39950 a = stack.pop();
39951 stack.push(Math.abs(a));
39952 break;
39953 case 10:
39954 a = stack.pop();
39955 b = stack.pop();
39956 stack.push(a + b);
39957 break;
39958 case 11:
39959 a = stack.pop();
39960 b = stack.pop();
39961 stack.push(a - b);
39962 break;
39963 case 12:
39964 a = stack.pop();
39965 b = stack.pop();
39966 stack.push(a / b);
39967 break;
39968 case 14:
39969 a = stack.pop();
39970 stack.push(-a);
39971 break;
39972 case 15:
39973 a = stack.pop();
39974 b = stack.pop();
39975 stack.push(a === b ? 1 : 0);
39976 break;
39977 case 18:
39978 stack.pop();
39979 break;
39980 case 20:
39981 let val = stack.pop();
39982 let idx = stack.pop();
39983 trans[idx] = val;
39984 break;
39985 case 21:
39986 idx = stack.pop();
39987 stack.push(trans[idx] || 0);
39988 break;
39989 case 22:
39990 let s1 = stack.pop();
39991 let s2 = stack.pop();
39992 let v1 = stack.pop();
39993 let v2 = stack.pop();
39994 stack.push(v1 <= v2 ? s1 : s2);
39995 break;
39996 case 23:
39997 stack.push(Math.random());
39998 break;
39999 case 24:
40000 a = stack.pop();
40001 b = stack.pop();
40002 stack.push(a * b);
40003 break;
40004 case 26:
40005 a = stack.pop();
40006 stack.push(Math.sqrt(a));
40007 break;
40008 case 27:
40009 a = stack.pop();
40010 stack.push(a, a);
40011 break;
40012 case 28:
40013 a = stack.pop();
40014 b = stack.pop();
40015 stack.push(b, a);
40016 break;
40017 case 29:
40018 idx = stack.pop();
40019 if (idx < 0) idx = 0;
40020 else if (idx > stack.length - 1) idx = stack.length - 1;
40021 stack.push(stack[idx]);
40022 break;
40023 case 30:
40024 let n = stack.pop();
40025 let j = stack.pop();
40026 if (j >= 0) while(j > 0){
40027 var t = stack[n - 1];
40028 for(let i = n - 2; i >= 0; i--)stack[i + 1] = stack[i];
40029 stack[0] = t;
40030 j--;
40031 }
40032 else while(j < 0){
40033 var t = stack[0];
40034 for(let i = 0; i <= n; i++)stack[i] = stack[i + 1];
40035 stack[n - 1] = t;
40036 j++;
40037 }
40038 break;
40039 case 34:
40040 c1x = x1 + stack.shift();
40041 c1y = y1;
40042 c2x = c1x + stack.shift();
40043 c2y = c1y + stack.shift();
40044 let c3x = c2x + stack.shift();
40045 let c3y = c2y;
40046 let c4x = c3x + stack.shift();
40047 let c4y = c3y;
40048 let c5x = c4x + stack.shift();
40049 let c5y = c4y;
40050 let c6x = c5x + stack.shift();
40051 let c6y = c5y;
40052 x1 = c6x;
40053 y1 = c6y;
40054 path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);
40055 path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);
40056 break;
40057 case 35:
40058 let pts = [];
40059 for(let i = 0; i <= 5; i++){
40060 x1 += stack.shift();
40061 y1 += stack.shift();
40062 pts.push(x1, y1);
40063 }
40064 path.bezierCurveTo(...pts.slice(0, 6));
40065 path.bezierCurveTo(...pts.slice(6));
40066 stack.shift(); // fd
40067 break;
40068 case 36:
40069 c1x = x1 + stack.shift();
40070 c1y = y1 + stack.shift();
40071 c2x = c1x + stack.shift();
40072 c2y = c1y + stack.shift();
40073 c3x = c2x + stack.shift();
40074 c3y = c2y;
40075 c4x = c3x + stack.shift();
40076 c4y = c3y;
40077 c5x = c4x + stack.shift();
40078 c5y = c4y + stack.shift();
40079 c6x = c5x + stack.shift();
40080 c6y = c5y;
40081 x1 = c6x;
40082 y1 = c6y;
40083 path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);
40084 path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);
40085 break;
40086 case 37:
40087 let startx = x1;
40088 let starty = y1;
40089 pts = [];
40090 for(let i1 = 0; i1 <= 4; i1++){
40091 x1 += stack.shift();
40092 y1 += stack.shift();
40093 pts.push(x1, y1);
40094 }
40095 if (Math.abs(x1 - startx) > Math.abs(y1 - starty)) {
40096 x1 += stack.shift();
40097 y1 = starty;
40098 } else {
40099 x1 = startx;
40100 y1 += stack.shift();
40101 }
40102 pts.push(x1, y1);
40103 path.bezierCurveTo(...pts.slice(0, 6));
40104 path.bezierCurveTo(...pts.slice(6));
40105 break;
40106 default:
40107 throw new Error(`Unknown op: 12 ${op}`);
40108 }
40109 break;
40110 default:
40111 throw new Error(`Unknown op: ${op}`);
40112 }
40113 } else if (op < 247) stack.push(op - 139);
40114 else if (op < 251) {
40115 var b1 = stream.readUInt8();
40116 stack.push((op - 247) * 256 + b1 + 108);
40117 } else if (op < 255) {
40118 var b1 = stream.readUInt8();
40119 stack.push(-(op - 251) * 256 - b1 - 108);
40120 } else stack.push(stream.readInt32BE() / 65536);
40121 }
40122 };
40123 parse();
40124 if (open) path.closePath();
40125 return path;
40126 }
40127 constructor(...args){
40128 super(...args);
40129 $lzfo4$swchelpers.defineProperty(this, "type", 'CFF');
40130 }
40131}
40132
40133
40134
40135
40136
40137let $832cade1c5195e7c$var$SBIXImage = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
40138 originX: ($parcel$interopDefault($lzfo4$restructure)).uint16,
40139 originY: ($parcel$interopDefault($lzfo4$restructure)).uint16,
40140 type: new ($parcel$interopDefault($lzfo4$restructure)).String(4),
40141 data: new ($parcel$interopDefault($lzfo4$restructure)).Buffer((t)=>t.parent.buflen - t._currentOffset
40142 )
40143});
40144class $832cade1c5195e7c$export$2e2bcd8739ae039 extends $f71300a5bebbfea9$export$2e2bcd8739ae039 {
40145 /**
40146 * Returns an object representing a glyph image at the given point size.
40147 * The object has a data property with a Buffer containing the actual image data,
40148 * along with the image type, and origin.
40149 *
40150 * @param {number} size
40151 * @return {object}
40152 */ getImageForSize(size) {
40153 for(let i = 0; i < this._font.sbix.imageTables.length; i++){
40154 var table = this._font.sbix.imageTables[i];
40155 if (table.ppem >= size) break;
40156 }
40157 let offsets = table.imageOffsets;
40158 let start = offsets[this.id];
40159 let end = offsets[this.id + 1];
40160 if (start === end) return null;
40161 this._font.stream.pos = start;
40162 return $832cade1c5195e7c$var$SBIXImage.decode(this._font.stream, {
40163 buflen: end - start
40164 });
40165 }
40166 render(ctx, size) {
40167 let img = this.getImageForSize(size);
40168 if (img != null) {
40169 let scale = size / this._font.unitsPerEm;
40170 ctx.image(img.data, {
40171 height: size,
40172 x: img.originX,
40173 y: (this.bbox.minY - img.originY) * scale
40174 });
40175 }
40176 if (this._font.sbix.flags.renderOutlines) super.render(ctx, size);
40177 }
40178 constructor(...args){
40179 super(...args);
40180 $lzfo4$swchelpers.defineProperty(this, "type", 'SBIX');
40181 }
40182}
40183
40184
40185
40186
40187
40188class $8976e72033f2ead9$var$COLRLayer {
40189 constructor(glyph, color){
40190 this.glyph = glyph;
40191 this.color = color;
40192 }
40193}
40194class $8976e72033f2ead9$export$2e2bcd8739ae039 extends $499b081c6bd05466$export$2e2bcd8739ae039 {
40195 _getBBox() {
40196 let bbox = new $6d619c173ebabb82$export$2e2bcd8739ae039;
40197 for(let i = 0; i < this.layers.length; i++){
40198 let layer = this.layers[i];
40199 let b = layer.glyph.bbox;
40200 bbox.addPoint(b.minX, b.minY);
40201 bbox.addPoint(b.maxX, b.maxY);
40202 }
40203 return bbox;
40204 }
40205 /**
40206 * Returns an array of objects containing the glyph and color for
40207 * each layer in the composite color glyph.
40208 * @type {object[]}
40209 */ get layers() {
40210 let cpal = this._font.CPAL;
40211 let colr = this._font.COLR;
40212 let low = 0;
40213 let high = colr.baseGlyphRecord.length - 1;
40214 while(low <= high){
40215 let mid = low + high >> 1;
40216 var rec = colr.baseGlyphRecord[mid];
40217 if (this.id < rec.gid) high = mid - 1;
40218 else if (this.id > rec.gid) low = mid + 1;
40219 else {
40220 var baseLayer = rec;
40221 break;
40222 }
40223 }
40224 // if base glyph not found in COLR table,
40225 // default to normal glyph from glyf or CFF
40226 if (baseLayer == null) {
40227 var g = this._font._getBaseGlyph(this.id);
40228 var color = {
40229 red: 0,
40230 green: 0,
40231 blue: 0,
40232 alpha: 255
40233 };
40234 return [
40235 new $8976e72033f2ead9$var$COLRLayer(g, color)
40236 ];
40237 }
40238 // otherwise, return an array of all the layers
40239 let layers = [];
40240 for(let i = baseLayer.firstLayerIndex; i < baseLayer.firstLayerIndex + baseLayer.numLayers; i++){
40241 var rec = colr.layerRecords[i];
40242 var color = cpal.colorRecords[rec.paletteIndex];
40243 var g = this._font._getBaseGlyph(rec.gid);
40244 layers.push(new $8976e72033f2ead9$var$COLRLayer(g, color));
40245 }
40246 return layers;
40247 }
40248 render(ctx, size) {
40249 for (let { glyph: glyph , color: color } of this.layers){
40250 ctx.fillColor([
40251 color.red,
40252 color.green,
40253 color.blue
40254 ], color.alpha / 255 * 100);
40255 glyph.render(ctx, size);
40256 }
40257 return;
40258 }
40259 constructor(...args){
40260 super(...args);
40261 $lzfo4$swchelpers.defineProperty(this, "type", 'COLR');
40262 }
40263}
40264
40265
40266const $edb915616d019c4e$var$TUPLES_SHARE_POINT_NUMBERS = 0x8000;
40267const $edb915616d019c4e$var$TUPLE_COUNT_MASK = 0x0fff;
40268const $edb915616d019c4e$var$EMBEDDED_TUPLE_COORD = 0x8000;
40269const $edb915616d019c4e$var$INTERMEDIATE_TUPLE = 0x4000;
40270const $edb915616d019c4e$var$PRIVATE_POINT_NUMBERS = 0x2000;
40271const $edb915616d019c4e$var$TUPLE_INDEX_MASK = 0x0fff;
40272const $edb915616d019c4e$var$POINTS_ARE_WORDS = 0x80;
40273const $edb915616d019c4e$var$POINT_RUN_COUNT_MASK = 0x7f;
40274const $edb915616d019c4e$var$DELTAS_ARE_ZERO = 0x80;
40275const $edb915616d019c4e$var$DELTAS_ARE_WORDS = 0x40;
40276const $edb915616d019c4e$var$DELTA_RUN_COUNT_MASK = 0x3f;
40277class $edb915616d019c4e$export$2e2bcd8739ae039 {
40278 normalizeCoords(coords) {
40279 // the default mapping is linear along each axis, in two segments:
40280 // from the minValue to defaultValue, and from defaultValue to maxValue.
40281 let normalized = [];
40282 for(var i = 0; i < this.font.fvar.axis.length; i++){
40283 let axis = this.font.fvar.axis[i];
40284 if (coords[i] < axis.defaultValue) normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON));
40285 else normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON));
40286 }
40287 // if there is an avar table, the normalized value is calculated
40288 // by interpolating between the two nearest mapped values.
40289 if (this.font.avar) for(var i = 0; i < this.font.avar.segment.length; i++){
40290 let segment = this.font.avar.segment[i];
40291 for(let j = 0; j < segment.correspondence.length; j++){
40292 let pair = segment.correspondence[j];
40293 if (j >= 1 && normalized[i] < pair.fromCoord) {
40294 let prev = segment.correspondence[j - 1];
40295 normalized[i] = ((normalized[i] - prev.fromCoord) * (pair.toCoord - prev.toCoord) + Number.EPSILON) / (pair.fromCoord - prev.fromCoord + Number.EPSILON) + prev.toCoord;
40296 break;
40297 }
40298 }
40299 }
40300 return normalized;
40301 }
40302 transformPoints(gid, glyphPoints) {
40303 if (!this.font.fvar || !this.font.gvar) return;
40304 let { gvar: gvar } = this.font;
40305 if (gid >= gvar.glyphCount) return;
40306 let offset = gvar.offsets[gid];
40307 if (offset === gvar.offsets[gid + 1]) return;
40308 // Read the gvar data for this glyph
40309 let { stream: stream } = this.font;
40310 stream.pos = offset;
40311 if (stream.pos >= stream.length) return;
40312 let tupleCount = stream.readUInt16BE();
40313 let offsetToData = offset + stream.readUInt16BE();
40314 if (tupleCount & $edb915616d019c4e$var$TUPLES_SHARE_POINT_NUMBERS) {
40315 var here = stream.pos;
40316 stream.pos = offsetToData;
40317 var sharedPoints = this.decodePoints();
40318 offsetToData = stream.pos;
40319 stream.pos = here;
40320 }
40321 let origPoints = glyphPoints.map((pt)=>pt.copy()
40322 );
40323 tupleCount &= $edb915616d019c4e$var$TUPLE_COUNT_MASK;
40324 for(let i = 0; i < tupleCount; i++){
40325 let tupleDataSize = stream.readUInt16BE();
40326 let tupleIndex = stream.readUInt16BE();
40327 if (tupleIndex & $edb915616d019c4e$var$EMBEDDED_TUPLE_COORD) {
40328 var tupleCoords = [];
40329 for(let a = 0; a < gvar.axisCount; a++)tupleCoords.push(stream.readInt16BE() / 16384);
40330 } else {
40331 if ((tupleIndex & $edb915616d019c4e$var$TUPLE_INDEX_MASK) >= gvar.globalCoordCount) throw new Error('Invalid gvar table');
40332 var tupleCoords = gvar.globalCoords[tupleIndex & $edb915616d019c4e$var$TUPLE_INDEX_MASK];
40333 }
40334 if (tupleIndex & $edb915616d019c4e$var$INTERMEDIATE_TUPLE) {
40335 var startCoords = [];
40336 for(let a = 0; a < gvar.axisCount; a++)startCoords.push(stream.readInt16BE() / 16384);
40337 var endCoords = [];
40338 for(let a1 = 0; a1 < gvar.axisCount; a1++)endCoords.push(stream.readInt16BE() / 16384);
40339 }
40340 // Get the factor at which to apply this tuple
40341 let factor = this.tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords);
40342 if (factor === 0) {
40343 offsetToData += tupleDataSize;
40344 continue;
40345 }
40346 var here = stream.pos;
40347 stream.pos = offsetToData;
40348 if (tupleIndex & $edb915616d019c4e$var$PRIVATE_POINT_NUMBERS) var points = this.decodePoints();
40349 else var points = sharedPoints;
40350 // points.length = 0 means there are deltas for all points
40351 let nPoints = points.length === 0 ? glyphPoints.length : points.length;
40352 let xDeltas = this.decodeDeltas(nPoints);
40353 let yDeltas = this.decodeDeltas(nPoints);
40354 if (points.length === 0) for(let i = 0; i < glyphPoints.length; i++){
40355 var point = glyphPoints[i];
40356 point.x += Math.round(xDeltas[i] * factor);
40357 point.y += Math.round(yDeltas[i] * factor);
40358 }
40359 else {
40360 let outPoints = origPoints.map((pt)=>pt.copy()
40361 );
40362 let hasDelta = glyphPoints.map(()=>false
40363 );
40364 for(let i = 0; i < points.length; i++){
40365 let idx = points[i];
40366 if (idx < glyphPoints.length) {
40367 let point = outPoints[idx];
40368 hasDelta[idx] = true;
40369 point.x += Math.round(xDeltas[i] * factor);
40370 point.y += Math.round(yDeltas[i] * factor);
40371 }
40372 }
40373 this.interpolateMissingDeltas(outPoints, origPoints, hasDelta);
40374 for(let i1 = 0; i1 < glyphPoints.length; i1++){
40375 let deltaX = outPoints[i1].x - origPoints[i1].x;
40376 let deltaY = outPoints[i1].y - origPoints[i1].y;
40377 glyphPoints[i1].x += deltaX;
40378 glyphPoints[i1].y += deltaY;
40379 }
40380 }
40381 offsetToData += tupleDataSize;
40382 stream.pos = here;
40383 }
40384 }
40385 decodePoints() {
40386 let stream = this.font.stream;
40387 let count = stream.readUInt8();
40388 if (count & $edb915616d019c4e$var$POINTS_ARE_WORDS) count = (count & $edb915616d019c4e$var$POINT_RUN_COUNT_MASK) << 8 | stream.readUInt8();
40389 let points = new Uint16Array(count);
40390 let i = 0;
40391 let point = 0;
40392 while(i < count){
40393 let run = stream.readUInt8();
40394 let runCount = (run & $edb915616d019c4e$var$POINT_RUN_COUNT_MASK) + 1;
40395 let fn = run & $edb915616d019c4e$var$POINTS_ARE_WORDS ? stream.readUInt16 : stream.readUInt8;
40396 for(let j = 0; j < runCount && i < count; j++){
40397 point += fn.call(stream);
40398 points[i++] = point;
40399 }
40400 }
40401 return points;
40402 }
40403 decodeDeltas(count) {
40404 let stream = this.font.stream;
40405 let i = 0;
40406 let deltas = new Int16Array(count);
40407 while(i < count){
40408 let run = stream.readUInt8();
40409 let runCount = (run & $edb915616d019c4e$var$DELTA_RUN_COUNT_MASK) + 1;
40410 if (run & $edb915616d019c4e$var$DELTAS_ARE_ZERO) i += runCount;
40411 else {
40412 let fn = run & $edb915616d019c4e$var$DELTAS_ARE_WORDS ? stream.readInt16BE : stream.readInt8;
40413 for(let j = 0; j < runCount && i < count; j++)deltas[i++] = fn.call(stream);
40414 }
40415 }
40416 return deltas;
40417 }
40418 tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords) {
40419 let normalized = this.normalizedCoords;
40420 let { gvar: gvar } = this.font;
40421 let factor = 1;
40422 for(let i = 0; i < gvar.axisCount; i++){
40423 if (tupleCoords[i] === 0) continue;
40424 if (normalized[i] === 0) return 0;
40425 if ((tupleIndex & $edb915616d019c4e$var$INTERMEDIATE_TUPLE) === 0) {
40426 if (normalized[i] < Math.min(0, tupleCoords[i]) || normalized[i] > Math.max(0, tupleCoords[i])) return 0;
40427 factor = (factor * normalized[i] + Number.EPSILON) / (tupleCoords[i] + Number.EPSILON);
40428 } else {
40429 if (normalized[i] < startCoords[i] || normalized[i] > endCoords[i]) return 0;
40430 else if (normalized[i] < tupleCoords[i]) factor = factor * (normalized[i] - startCoords[i] + Number.EPSILON) / (tupleCoords[i] - startCoords[i] + Number.EPSILON);
40431 else factor = factor * (endCoords[i] - normalized[i] + Number.EPSILON) / (endCoords[i] - tupleCoords[i] + Number.EPSILON);
40432 }
40433 }
40434 return factor;
40435 }
40436 // Interpolates points without delta values.
40437 // Needed for the Ø and Q glyphs in Skia.
40438 // Algorithm from Freetype.
40439 interpolateMissingDeltas(points, inPoints, hasDelta) {
40440 if (points.length === 0) return;
40441 let point = 0;
40442 while(point < points.length){
40443 let firstPoint = point;
40444 // find the end point of the contour
40445 let endPoint = point;
40446 let pt = points[endPoint];
40447 while(!pt.endContour)pt = points[++endPoint];
40448 // find the first point that has a delta
40449 while(point <= endPoint && !hasDelta[point])point++;
40450 if (point > endPoint) continue;
40451 let firstDelta = point;
40452 let curDelta = point;
40453 point++;
40454 while(point <= endPoint){
40455 // find the next point with a delta, and interpolate intermediate points
40456 if (hasDelta[point]) {
40457 this.deltaInterpolate(curDelta + 1, point - 1, curDelta, point, inPoints, points);
40458 curDelta = point;
40459 }
40460 point++;
40461 }
40462 // shift contour if we only have a single delta
40463 if (curDelta === firstDelta) this.deltaShift(firstPoint, endPoint, curDelta, inPoints, points);
40464 else {
40465 // otherwise, handle the remaining points at the end and beginning of the contour
40466 this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, inPoints, points);
40467 if (firstDelta > 0) this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, inPoints, points);
40468 }
40469 point = endPoint + 1;
40470 }
40471 }
40472 deltaInterpolate(p1, p2, ref1, ref2, inPoints, outPoints) {
40473 if (p1 > p2) return;
40474 let iterable = [
40475 'x',
40476 'y'
40477 ];
40478 for(let i = 0; i < iterable.length; i++){
40479 let k = iterable[i];
40480 if (inPoints[ref1][k] > inPoints[ref2][k]) {
40481 var p = ref1;
40482 ref1 = ref2;
40483 ref2 = p;
40484 }
40485 let in1 = inPoints[ref1][k];
40486 let in2 = inPoints[ref2][k];
40487 let out1 = outPoints[ref1][k];
40488 let out2 = outPoints[ref2][k];
40489 // If the reference points have the same coordinate but different
40490 // delta, inferred delta is zero. Otherwise interpolate.
40491 if (in1 !== in2 || out1 === out2) {
40492 let scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1);
40493 for(let p = p1; p <= p2; p++){
40494 let out = inPoints[p][k];
40495 if (out <= in1) out += out1 - in1;
40496 else if (out >= in2) out += out2 - in2;
40497 else out = out1 + (out - in1) * scale;
40498 outPoints[p][k] = out;
40499 }
40500 }
40501 }
40502 }
40503 deltaShift(p1, p2, ref, inPoints, outPoints) {
40504 let deltaX = outPoints[ref].x - inPoints[ref].x;
40505 let deltaY = outPoints[ref].y - inPoints[ref].y;
40506 if (deltaX === 0 && deltaY === 0) return;
40507 for(let p = p1; p <= p2; p++)if (p !== ref) {
40508 outPoints[p].x += deltaX;
40509 outPoints[p].y += deltaY;
40510 }
40511 }
40512 getAdvanceAdjustment(gid, table) {
40513 let outerIndex, innerIndex;
40514 if (table.advanceWidthMapping) {
40515 let idx = gid;
40516 if (idx >= table.advanceWidthMapping.mapCount) idx = table.advanceWidthMapping.mapCount - 1;
40517 let entryFormat = table.advanceWidthMapping.entryFormat;
40518 ({ outerIndex: outerIndex , innerIndex: innerIndex } = table.advanceWidthMapping.mapData[idx]);
40519 } else {
40520 outerIndex = 0;
40521 innerIndex = gid;
40522 }
40523 return this.getDelta(table.itemVariationStore, outerIndex, innerIndex);
40524 }
40525 // See pseudo code from `Font Variations Overview'
40526 // in the OpenType specification.
40527 getDelta(itemStore, outerIndex, innerIndex) {
40528 if (outerIndex >= itemStore.itemVariationData.length) return 0;
40529 let varData = itemStore.itemVariationData[outerIndex];
40530 if (innerIndex >= varData.deltaSets.length) return 0;
40531 let deltaSet = varData.deltaSets[innerIndex];
40532 let blendVector = this.getBlendVector(itemStore, outerIndex);
40533 let netAdjustment = 0;
40534 for(let master = 0; master < varData.regionIndexCount; master++)netAdjustment += deltaSet.deltas[master] * blendVector[master];
40535 return netAdjustment;
40536 }
40537 getBlendVector(itemStore, outerIndex) {
40538 let varData = itemStore.itemVariationData[outerIndex];
40539 if (this.blendVectors.has(varData)) return this.blendVectors.get(varData);
40540 let normalizedCoords = this.normalizedCoords;
40541 let blendVector = [];
40542 // outer loop steps through master designs to be blended
40543 for(let master = 0; master < varData.regionIndexCount; master++){
40544 let scalar = 1;
40545 let regionIndex = varData.regionIndexes[master];
40546 let axes = itemStore.variationRegionList.variationRegions[regionIndex];
40547 // inner loop steps through axes in this region
40548 for(let j = 0; j < axes.length; j++){
40549 let axis = axes[j];
40550 let axisScalar;
40551 // compute the scalar contribution of this axis
40552 // ignore invalid ranges
40553 if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) axisScalar = 1;
40554 else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) axisScalar = 1;
40555 else if (axis.peakCoord === 0) axisScalar = 1;
40556 else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) axisScalar = 0;
40557 else {
40558 if (normalizedCoords[j] === axis.peakCoord) axisScalar = 1;
40559 else if (normalizedCoords[j] < axis.peakCoord) axisScalar = (normalizedCoords[j] - axis.startCoord + Number.EPSILON) / (axis.peakCoord - axis.startCoord + Number.EPSILON);
40560 else axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) / (axis.endCoord - axis.peakCoord + Number.EPSILON);
40561 }
40562 // take product of all the axis scalars
40563 scalar *= axisScalar;
40564 }
40565 blendVector[master] = scalar;
40566 }
40567 this.blendVectors.set(varData, blendVector);
40568 return blendVector;
40569 }
40570 constructor(font, coords){
40571 this.font = font;
40572 this.normalizedCoords = this.normalizeCoords(coords);
40573 this.blendVectors = new Map;
40574 }
40575}
40576
40577
40578
40579
40580const $ce4b1bce7aca5902$var$resolved = Promise.resolve();
40581class $ce4b1bce7aca5902$export$2e2bcd8739ae039 {
40582 includeGlyph(glyph) {
40583 if (typeof glyph === 'object') glyph = glyph.id;
40584 if (this.mapping[glyph] == null) {
40585 this.glyphs.push(glyph);
40586 this.mapping[glyph] = this.glyphs.length - 1;
40587 }
40588 return this.mapping[glyph];
40589 }
40590 encodeStream() {
40591 let s = new ($parcel$interopDefault($lzfo4$restructure)).EncodeStream();
40592 $ce4b1bce7aca5902$var$resolved.then(()=>{
40593 this.encode(s);
40594 return s.end();
40595 });
40596 return s;
40597 }
40598 constructor(font){
40599 this.font = font;
40600 this.glyphs = [];
40601 this.mapping = {};
40602 // always include the missing glyph
40603 this.includeGlyph(0);
40604 }
40605}
40606
40607
40608
40609
40610
40611// Flags for simple glyphs
40612const $54e221f7ab127ab6$var$ON_CURVE = 1;
40613const $54e221f7ab127ab6$var$X_SHORT_VECTOR = 2;
40614const $54e221f7ab127ab6$var$Y_SHORT_VECTOR = 4;
40615const $54e221f7ab127ab6$var$REPEAT = 8;
40616const $54e221f7ab127ab6$var$SAME_X = 16;
40617const $54e221f7ab127ab6$var$SAME_Y = 32;
40618class $54e221f7ab127ab6$var$Point {
40619 static size(val) {
40620 return val >= 0 && val <= 255 ? 1 : 2;
40621 }
40622 static encode(stream, value) {
40623 if (value >= 0 && value <= 255) stream.writeUInt8(value);
40624 else stream.writeInt16BE(value);
40625 }
40626}
40627let $54e221f7ab127ab6$var$Glyf = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
40628 numberOfContours: ($parcel$interopDefault($lzfo4$restructure)).int16,
40629 xMin: ($parcel$interopDefault($lzfo4$restructure)).int16,
40630 yMin: ($parcel$interopDefault($lzfo4$restructure)).int16,
40631 xMax: ($parcel$interopDefault($lzfo4$restructure)).int16,
40632 yMax: ($parcel$interopDefault($lzfo4$restructure)).int16,
40633 endPtsOfContours: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint16, 'numberOfContours'),
40634 instructions: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, ($parcel$interopDefault($lzfo4$restructure)).uint16),
40635 flags: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint8, 0),
40636 xPoints: new ($parcel$interopDefault($lzfo4$restructure)).Array($54e221f7ab127ab6$var$Point, 0),
40637 yPoints: new ($parcel$interopDefault($lzfo4$restructure)).Array($54e221f7ab127ab6$var$Point, 0)
40638});
40639class $54e221f7ab127ab6$export$2e2bcd8739ae039 {
40640 encodeSimple(path, instructions = []) {
40641 let endPtsOfContours = [];
40642 let xPoints = [];
40643 let yPoints = [];
40644 let flags = [];
40645 let same = 0;
40646 let lastX = 0, lastY = 0, lastFlag = 0;
40647 let pointCount = 0;
40648 for(let i = 0; i < path.commands.length; i++){
40649 let c = path.commands[i];
40650 for(let j = 0; j < c.args.length; j += 2){
40651 let x = c.args[j];
40652 let y = c.args[j + 1];
40653 let flag = 0;
40654 // If the ending point of a quadratic curve is the midpoint
40655 // between the control point and the control point of the next
40656 // quadratic curve, we can omit the ending point.
40657 if (c.command === 'quadraticCurveTo' && j === 2) {
40658 let next = path.commands[i + 1];
40659 if (next && next.command === 'quadraticCurveTo') {
40660 let midX = (lastX + next.args[0]) / 2;
40661 let midY = (lastY + next.args[1]) / 2;
40662 if (x === midX && y === midY) continue;
40663 }
40664 }
40665 // All points except control points are on curve.
40666 if (!(c.command === 'quadraticCurveTo' && j === 0)) flag |= $54e221f7ab127ab6$var$ON_CURVE;
40667 flag = this._encodePoint(x, lastX, xPoints, flag, $54e221f7ab127ab6$var$X_SHORT_VECTOR, $54e221f7ab127ab6$var$SAME_X);
40668 flag = this._encodePoint(y, lastY, yPoints, flag, $54e221f7ab127ab6$var$Y_SHORT_VECTOR, $54e221f7ab127ab6$var$SAME_Y);
40669 if (flag === lastFlag && same < 255) {
40670 flags[flags.length - 1] |= $54e221f7ab127ab6$var$REPEAT;
40671 same++;
40672 } else {
40673 if (same > 0) {
40674 flags.push(same);
40675 same = 0;
40676 }
40677 flags.push(flag);
40678 lastFlag = flag;
40679 }
40680 lastX = x;
40681 lastY = y;
40682 pointCount++;
40683 }
40684 if (c.command === 'closePath') endPtsOfContours.push(pointCount - 1);
40685 }
40686 // Close the path if the last command didn't already
40687 if (path.commands.length > 1 && path.commands[path.commands.length - 1].command !== 'closePath') endPtsOfContours.push(pointCount - 1);
40688 let bbox = path.bbox;
40689 let glyf = {
40690 numberOfContours: endPtsOfContours.length,
40691 xMin: bbox.minX,
40692 yMin: bbox.minY,
40693 xMax: bbox.maxX,
40694 yMax: bbox.maxY,
40695 endPtsOfContours: endPtsOfContours,
40696 instructions: instructions,
40697 flags: flags,
40698 xPoints: xPoints,
40699 yPoints: yPoints
40700 };
40701 let size = $54e221f7ab127ab6$var$Glyf.size(glyf);
40702 let tail = 4 - size % 4;
40703 let stream = new ($parcel$interopDefault($lzfo4$restructure)).EncodeStream(size + tail);
40704 $54e221f7ab127ab6$var$Glyf.encode(stream, glyf);
40705 // Align to 4-byte length
40706 if (tail !== 0) stream.fill(0, tail);
40707 return stream.buffer;
40708 }
40709 _encodePoint(value, last, points, flag, shortFlag, sameFlag) {
40710 let diff = value - last;
40711 if (value === last) flag |= sameFlag;
40712 else {
40713 if (-255 <= diff && diff <= 255) {
40714 flag |= shortFlag;
40715 if (diff < 0) diff = -diff;
40716 else flag |= sameFlag;
40717 }
40718 points.push(diff);
40719 }
40720 return flag;
40721 }
40722}
40723
40724
40725
40726var $6c87995b36333c4c$require$Buffer = $lzfo4$buffer.Buffer;
40727class $6c87995b36333c4c$export$2e2bcd8739ae039 extends $ce4b1bce7aca5902$export$2e2bcd8739ae039 {
40728 _addGlyph(gid) {
40729 let glyph = this.font.getGlyph(gid);
40730 let glyf = glyph._decode();
40731 // get the offset to the glyph from the loca table
40732 let curOffset = this.font.loca.offsets[gid];
40733 let nextOffset = this.font.loca.offsets[gid + 1];
40734 let stream = this.font._getTableStream('glyf');
40735 stream.pos += curOffset;
40736 let buffer = stream.readBuffer(nextOffset - curOffset);
40737 // if it is a compound glyph, include its components
40738 if (glyf && glyf.numberOfContours < 0) {
40739 buffer = $6c87995b36333c4c$require$Buffer.from(buffer);
40740 for (let component of glyf.components){
40741 gid = this.includeGlyph(component.glyphID);
40742 buffer.writeUInt16BE(gid, component.pos);
40743 }
40744 } else if (glyf && this.font._variationProcessor) // If this is a TrueType variation glyph, re-encode the path
40745 buffer = this.glyphEncoder.encodeSimple(glyph.path, glyf.instructions);
40746 this.glyf.push(buffer);
40747 this.loca.offsets.push(this.offset);
40748 this.hmtx.metrics.push({
40749 advance: glyph.advanceWidth,
40750 bearing: glyph._getMetrics().leftBearing
40751 });
40752 this.offset += buffer.length;
40753 return this.glyf.length - 1;
40754 }
40755 encode(stream) {
40756 // tables required by PDF spec:
40757 // head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm
40758 //
40759 // additional tables required for standalone fonts:
40760 // name, cmap, OS/2, post
40761 this.glyf = [];
40762 this.offset = 0;
40763 this.loca = {
40764 offsets: [],
40765 version: this.font.loca.version
40766 };
40767 this.hmtx = {
40768 metrics: [],
40769 bearings: []
40770 };
40771 // include all the glyphs
40772 // not using a for loop because we need to support adding more
40773 // glyphs to the array as we go, and CoffeeScript caches the length.
40774 let i = 0;
40775 while(i < this.glyphs.length)this._addGlyph(this.glyphs[i++]);
40776 let maxp = ($parcel$interopDefault($lzfo4$clone))(this.font.maxp);
40777 maxp.numGlyphs = this.glyf.length;
40778 this.loca.offsets.push(this.offset);
40779 let head = ($parcel$interopDefault($lzfo4$clone))(this.font.head);
40780 head.indexToLocFormat = this.loca.version;
40781 let hhea = ($parcel$interopDefault($lzfo4$clone))(this.font.hhea);
40782 hhea.numberOfMetrics = this.hmtx.metrics.length;
40783 // map = []
40784 // for index in [0...256]
40785 // if index < @numGlyphs
40786 // map[index] = index
40787 // else
40788 // map[index] = 0
40789 //
40790 // cmapTable =
40791 // version: 0
40792 // length: 262
40793 // language: 0
40794 // codeMap: map
40795 //
40796 // cmap =
40797 // version: 0
40798 // numSubtables: 1
40799 // tables: [
40800 // platformID: 1
40801 // encodingID: 0
40802 // table: cmapTable
40803 // ]
40804 // TODO: subset prep, cvt, fpgm?
40805 $58b5e8ab8241ced9$export$2e2bcd8739ae039.encode(stream, {
40806 tables: {
40807 head: head,
40808 hhea: hhea,
40809 loca: this.loca,
40810 maxp: maxp,
40811 'cvt ': this.font['cvt '],
40812 prep: this.font.prep,
40813 glyf: this.glyf,
40814 hmtx: this.hmtx,
40815 fpgm: this.font.fpgm
40816 }
40817 });
40818 }
40819 constructor(font){
40820 super(font);
40821 this.glyphEncoder = new $54e221f7ab127ab6$export$2e2bcd8739ae039;
40822 }
40823}
40824
40825
40826
40827
40828
40829
40830
40831var $63d0003ac9d86481$require$Buffer = $lzfo4$buffer.Buffer;
40832class $63d0003ac9d86481$export$2e2bcd8739ae039 extends $ce4b1bce7aca5902$export$2e2bcd8739ae039 {
40833 subsetCharstrings() {
40834 this.charstrings = [];
40835 let gsubrs = {};
40836 for (let gid of this.glyphs){
40837 this.charstrings.push(this.cff.getCharString(gid));
40838 let glyph = this.font.getGlyph(gid);
40839 let path = glyph.path; // this causes the glyph to be parsed
40840 for(let subr in glyph._usedGsubrs)gsubrs[subr] = true;
40841 }
40842 this.gsubrs = this.subsetSubrs(this.cff.globalSubrIndex, gsubrs);
40843 }
40844 subsetSubrs(subrs, used) {
40845 let res = [];
40846 for(let i = 0; i < subrs.length; i++){
40847 let subr = subrs[i];
40848 if (used[i]) {
40849 this.cff.stream.pos = subr.offset;
40850 res.push(this.cff.stream.readBuffer(subr.length));
40851 } else res.push($63d0003ac9d86481$require$Buffer.from([
40852 11
40853 ])); // return
40854 }
40855 return res;
40856 }
40857 subsetFontdict(topDict) {
40858 topDict.FDArray = [];
40859 topDict.FDSelect = {
40860 version: 0,
40861 fds: []
40862 };
40863 let used_fds = {};
40864 let used_subrs = [];
40865 let fd_select = {};
40866 for (let gid of this.glyphs){
40867 let fd = this.cff.fdForGlyph(gid);
40868 if (fd == null) continue;
40869 if (!used_fds[fd]) {
40870 topDict.FDArray.push(Object.assign({}, this.cff.topDict.FDArray[fd]));
40871 used_subrs.push({});
40872 fd_select[fd] = topDict.FDArray.length - 1;
40873 }
40874 used_fds[fd] = true;
40875 topDict.FDSelect.fds.push(fd_select[fd]);
40876 let glyph = this.font.getGlyph(gid);
40877 let path = glyph.path; // this causes the glyph to be parsed
40878 for(let subr in glyph._usedSubrs)used_subrs[fd_select[fd]][subr] = true;
40879 }
40880 for(let i = 0; i < topDict.FDArray.length; i++){
40881 let dict = topDict.FDArray[i];
40882 delete dict.FontName;
40883 if (dict.Private && dict.Private.Subrs) {
40884 dict.Private = Object.assign({}, dict.Private);
40885 dict.Private.Subrs = this.subsetSubrs(dict.Private.Subrs, used_subrs[i]);
40886 }
40887 }
40888 return;
40889 }
40890 createCIDFontdict(topDict) {
40891 let used_subrs = {};
40892 for (let gid of this.glyphs){
40893 let glyph = this.font.getGlyph(gid);
40894 let path = glyph.path; // this causes the glyph to be parsed
40895 for(let subr in glyph._usedSubrs)used_subrs[subr] = true;
40896 }
40897 let privateDict = Object.assign({}, this.cff.topDict.Private);
40898 if (this.cff.topDict.Private && this.cff.topDict.Private.Subrs) privateDict.Subrs = this.subsetSubrs(this.cff.topDict.Private.Subrs, used_subrs);
40899 topDict.FDArray = [
40900 {
40901 Private: privateDict
40902 }
40903 ];
40904 return topDict.FDSelect = {
40905 version: 3,
40906 nRanges: 1,
40907 ranges: [
40908 {
40909 first: 0,
40910 fd: 0
40911 }
40912 ],
40913 sentinel: this.charstrings.length
40914 };
40915 }
40916 addString(string) {
40917 if (!string) return null;
40918 if (!this.strings) this.strings = [];
40919 this.strings.push(string);
40920 return $4292bb2f086bd070$export$2e2bcd8739ae039.length + this.strings.length - 1;
40921 }
40922 encode(stream) {
40923 this.subsetCharstrings();
40924 let charset = {
40925 version: this.charstrings.length > 255 ? 2 : 1,
40926 ranges: [
40927 {
40928 first: 1,
40929 nLeft: this.charstrings.length - 2
40930 }
40931 ]
40932 };
40933 let topDict = Object.assign({}, this.cff.topDict);
40934 topDict.Private = null;
40935 topDict.charset = charset;
40936 topDict.Encoding = null;
40937 topDict.CharStrings = this.charstrings;
40938 for (let key of [
40939 'version',
40940 'Notice',
40941 'Copyright',
40942 'FullName',
40943 'FamilyName',
40944 'Weight',
40945 'PostScript',
40946 'BaseFontName',
40947 'FontName'
40948 ])topDict[key] = this.addString(this.cff.string(topDict[key]));
40949 topDict.ROS = [
40950 this.addString('Adobe'),
40951 this.addString('Identity'),
40952 0
40953 ];
40954 topDict.CIDCount = this.charstrings.length;
40955 if (this.cff.isCIDFont) this.subsetFontdict(topDict);
40956 else this.createCIDFontdict(topDict);
40957 let top = {
40958 version: 1,
40959 hdrSize: this.cff.hdrSize,
40960 offSize: 4,
40961 header: this.cff.header,
40962 nameIndex: [
40963 this.cff.postscriptName
40964 ],
40965 topDictIndex: [
40966 topDict
40967 ],
40968 stringIndex: this.strings,
40969 globalSubrIndex: this.gsubrs
40970 };
40971 $5d220daacf51f8dc$export$2e2bcd8739ae039.encode(stream, top);
40972 }
40973 constructor(font){
40974 super(font);
40975 this.cff = this.font['CFF '];
40976 if (!this.cff) throw new Error('Not a CFF Font');
40977 }
40978}
40979
40980
40981
40982var _class;
40983let $4eebb3cdbf303bc9$export$2e2bcd8739ae039 = (_class = class $4eebb3cdbf303bc9$export$2e2bcd8739ae039 {
40984 static probe(buffer) {
40985 let format = buffer.toString('ascii', 0, 4);
40986 return format === 'true' || format === 'OTTO' || format === String.fromCharCode(0, 1, 0, 0);
40987 }
40988 setDefaultLanguage(lang = null) {
40989 this.defaultLanguage = lang;
40990 }
40991 _getTable(table) {
40992 if (!(table.tag in this._tables)) try {
40993 this._tables[table.tag] = this._decodeTable(table);
40994 } catch (e) {
40995 if ($a35dad4d16c8d1df$export$bd5c5d8b8dcafd78) {
40996 console.error(`Error decoding table ${table.tag}`);
40997 console.error(e.stack);
40998 }
40999 }
41000 return this._tables[table.tag];
41001 }
41002 _getTableStream(tag) {
41003 let table = this.directory.tables[tag];
41004 if (table) {
41005 this.stream.pos = table.offset;
41006 return this.stream;
41007 }
41008 return null;
41009 }
41010 _decodeDirectory() {
41011 return this.directory = $58b5e8ab8241ced9$export$2e2bcd8739ae039.decode(this.stream, {
41012 _startOffset: 0
41013 });
41014 }
41015 _decodeTable(table) {
41016 let pos = this.stream.pos;
41017 let stream = this._getTableStream(table.tag);
41018 let result = $6cd727f8bf15b50a$export$2e2bcd8739ae039[table.tag].decode(stream, this, table.length);
41019 this.stream.pos = pos;
41020 return result;
41021 }
41022 /**
41023 * Gets a string from the font's `name` table
41024 * `lang` is a BCP-47 language code.
41025 * @return {string}
41026 */ getName(key, lang = this.defaultLanguage || $a35dad4d16c8d1df$export$42940898df819940) {
41027 let record = this.name && this.name.records[key];
41028 if (record) // Attempt to retrieve the entry, depending on which translation is available:
41029 return record[lang] || record[this.defaultLanguage] || record[$a35dad4d16c8d1df$export$42940898df819940] || record['en'] || record[Object.keys(record)[0]] // Seriously, ANY language would be fine
41030 || null;
41031 return null;
41032 }
41033 /**
41034 * The unique PostScript name for this font, e.g. "Helvetica-Bold"
41035 * @type {string}
41036 */ get postscriptName() {
41037 return this.getName('postscriptName');
41038 }
41039 /**
41040 * The font's full name, e.g. "Helvetica Bold"
41041 * @type {string}
41042 */ get fullName() {
41043 return this.getName('fullName');
41044 }
41045 /**
41046 * The font's family name, e.g. "Helvetica"
41047 * @type {string}
41048 */ get familyName() {
41049 return this.getName('fontFamily');
41050 }
41051 /**
41052 * The font's sub-family, e.g. "Bold".
41053 * @type {string}
41054 */ get subfamilyName() {
41055 return this.getName('fontSubfamily');
41056 }
41057 /**
41058 * The font's copyright information
41059 * @type {string}
41060 */ get copyright() {
41061 return this.getName('copyright');
41062 }
41063 /**
41064 * The font's version number
41065 * @type {string}
41066 */ get version() {
41067 return this.getName('version');
41068 }
41069 /**
41070 * The font’s [ascender](https://en.wikipedia.org/wiki/Ascender_(typography))
41071 * @type {number}
41072 */ get ascent() {
41073 return this.hhea.ascent;
41074 }
41075 /**
41076 * The font’s [descender](https://en.wikipedia.org/wiki/Descender)
41077 * @type {number}
41078 */ get descent() {
41079 return this.hhea.descent;
41080 }
41081 /**
41082 * The amount of space that should be included between lines
41083 * @type {number}
41084 */ get lineGap() {
41085 return this.hhea.lineGap;
41086 }
41087 /**
41088 * The offset from the normal underline position that should be used
41089 * @type {number}
41090 */ get underlinePosition() {
41091 return this.post.underlinePosition;
41092 }
41093 /**
41094 * The weight of the underline that should be used
41095 * @type {number}
41096 */ get underlineThickness() {
41097 return this.post.underlineThickness;
41098 }
41099 /**
41100 * If this is an italic font, the angle the cursor should be drawn at to match the font design
41101 * @type {number}
41102 */ get italicAngle() {
41103 return this.post.italicAngle;
41104 }
41105 /**
41106 * The height of capital letters above the baseline.
41107 * See [here](https://en.wikipedia.org/wiki/Cap_height) for more details.
41108 * @type {number}
41109 */ get capHeight() {
41110 let os2 = this['OS/2'];
41111 return os2 ? os2.capHeight : this.ascent;
41112 }
41113 /**
41114 * The height of lower case letters in the font.
41115 * See [here](https://en.wikipedia.org/wiki/X-height) for more details.
41116 * @type {number}
41117 */ get xHeight() {
41118 let os2 = this['OS/2'];
41119 return os2 ? os2.xHeight : 0;
41120 }
41121 /**
41122 * The number of glyphs in the font.
41123 * @type {number}
41124 */ get numGlyphs() {
41125 return this.maxp.numGlyphs;
41126 }
41127 /**
41128 * The size of the font’s internal coordinate grid
41129 * @type {number}
41130 */ get unitsPerEm() {
41131 return this.head.unitsPerEm;
41132 }
41133 /**
41134 * The font’s bounding box, i.e. the box that encloses all glyphs in the font.
41135 * @type {BBox}
41136 */ get bbox() {
41137 return Object.freeze(new $6d619c173ebabb82$export$2e2bcd8739ae039(this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax));
41138 }
41139 get _cmapProcessor() {
41140 return new $1be0370b015c0ead$export$2e2bcd8739ae039(this.cmap);
41141 }
41142 /**
41143 * An array of all of the unicode code points supported by the font.
41144 * @type {number[]}
41145 */ get characterSet() {
41146 return this._cmapProcessor.getCharacterSet();
41147 }
41148 /**
41149 * Returns whether there is glyph in the font for the given unicode code point.
41150 *
41151 * @param {number} codePoint
41152 * @return {boolean}
41153 */ hasGlyphForCodePoint(codePoint) {
41154 return !!this._cmapProcessor.lookup(codePoint);
41155 }
41156 /**
41157 * Maps a single unicode code point to a Glyph object.
41158 * Does not perform any advanced substitutions (there is no context to do so).
41159 *
41160 * @param {number} codePoint
41161 * @return {Glyph}
41162 */ glyphForCodePoint(codePoint) {
41163 return this.getGlyph(this._cmapProcessor.lookup(codePoint), [
41164 codePoint
41165 ]);
41166 }
41167 /**
41168 * Returns an array of Glyph objects for the given string.
41169 * This is only a one-to-one mapping from characters to glyphs.
41170 * For most uses, you should use font.layout (described below), which
41171 * provides a much more advanced mapping supporting AAT and OpenType shaping.
41172 *
41173 * @param {string} string
41174 * @return {Glyph[]}
41175 */ glyphsForString(string) {
41176 let glyphs = [];
41177 let len = string.length;
41178 let idx = 0;
41179 let last = -1;
41180 let state = -1;
41181 while(idx <= len){
41182 let code = 0;
41183 let nextState = 0;
41184 if (idx < len) {
41185 // Decode the next codepoint from UTF 16
41186 code = string.charCodeAt(idx++);
41187 if (0xd800 <= code && code <= 0xdbff && idx < len) {
41188 let next = string.charCodeAt(idx);
41189 if (0xdc00 <= next && next <= 0xdfff) {
41190 idx++;
41191 code = ((code & 0x3ff) << 10) + (next & 0x3ff) + 0x10000;
41192 }
41193 }
41194 // Compute the next state: 1 if the next codepoint is a variation selector, 0 otherwise.
41195 nextState = 0xfe00 <= code && code <= 0xfe0f || 0xe0100 <= code && code <= 0xe01ef ? 1 : 0;
41196 } else idx++;
41197 if (state === 0 && nextState === 1) // Variation selector following normal codepoint.
41198 glyphs.push(this.getGlyph(this._cmapProcessor.lookup(last, code), [
41199 last,
41200 code
41201 ]));
41202 else if (state === 0 && nextState === 0) // Normal codepoint following normal codepoint.
41203 glyphs.push(this.glyphForCodePoint(last));
41204 last = code;
41205 state = nextState;
41206 }
41207 return glyphs;
41208 }
41209 get _layoutEngine() {
41210 return new $8fe7395fdc229fa3$export$2e2bcd8739ae039(this);
41211 }
41212 /**
41213 * Returns a GlyphRun object, which includes an array of Glyphs and GlyphPositions for the given string.
41214 *
41215 * @param {string} string
41216 * @param {string[]} [userFeatures]
41217 * @param {string} [script]
41218 * @param {string} [language]
41219 * @param {string} [direction]
41220 * @return {GlyphRun}
41221 */ layout(string, userFeatures, script, language, direction) {
41222 return this._layoutEngine.layout(string, userFeatures, script, language, direction);
41223 }
41224 /**
41225 * Returns an array of strings that map to the given glyph id.
41226 * @param {number} gid - glyph id
41227 */ stringsForGlyph(gid) {
41228 return this._layoutEngine.stringsForGlyph(gid);
41229 }
41230 /**
41231 * An array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm)
41232 * (or mapped AAT tags) supported by the font.
41233 * The features parameter is an array of OpenType feature tags to be applied in addition to the default set.
41234 * If this is an AAT font, the OpenType feature tags are mapped to AAT features.
41235 *
41236 * @type {string[]}
41237 */ get availableFeatures() {
41238 return this._layoutEngine.getAvailableFeatures();
41239 }
41240 getAvailableFeatures(script, language) {
41241 return this._layoutEngine.getAvailableFeatures(script, language);
41242 }
41243 _getBaseGlyph(glyph, characters = []) {
41244 if (!this._glyphs[glyph]) {
41245 if (this.directory.tables.glyf) this._glyphs[glyph] = new $f71300a5bebbfea9$export$2e2bcd8739ae039(glyph, characters, this);
41246 else if (this.directory.tables['CFF '] || this.directory.tables.CFF2) this._glyphs[glyph] = new $e3cf8415f0436224$export$2e2bcd8739ae039(glyph, characters, this);
41247 }
41248 return this._glyphs[glyph] || null;
41249 }
41250 /**
41251 * Returns a glyph object for the given glyph id.
41252 * You can pass the array of code points this glyph represents for
41253 * your use later, and it will be stored in the glyph object.
41254 *
41255 * @param {number} glyph
41256 * @param {number[]} characters
41257 * @return {Glyph}
41258 */ getGlyph(glyph, characters = []) {
41259 if (!this._glyphs[glyph]) {
41260 if (this.directory.tables.sbix) this._glyphs[glyph] = new $832cade1c5195e7c$export$2e2bcd8739ae039(glyph, characters, this);
41261 else if (this.directory.tables.COLR && this.directory.tables.CPAL) this._glyphs[glyph] = new $8976e72033f2ead9$export$2e2bcd8739ae039(glyph, characters, this);
41262 else this._getBaseGlyph(glyph, characters);
41263 }
41264 return this._glyphs[glyph] || null;
41265 }
41266 /**
41267 * Returns a Subset for this font.
41268 * @return {Subset}
41269 */ createSubset() {
41270 if (this.directory.tables['CFF ']) return new $63d0003ac9d86481$export$2e2bcd8739ae039(this);
41271 return new $6c87995b36333c4c$export$2e2bcd8739ae039(this);
41272 }
41273 /**
41274 * Returns an object describing the available variation axes
41275 * that this font supports. Keys are setting tags, and values
41276 * contain the axis name, range, and default value.
41277 *
41278 * @type {object}
41279 */ get variationAxes() {
41280 let res = {};
41281 if (!this.fvar) return res;
41282 for (let axis of this.fvar.axis)res[axis.axisTag.trim()] = {
41283 name: axis.name.en,
41284 min: axis.minValue,
41285 default: axis.defaultValue,
41286 max: axis.maxValue
41287 };
41288 return res;
41289 }
41290 /**
41291 * Returns an object describing the named variation instances
41292 * that the font designer has specified. Keys are variation names
41293 * and values are the variation settings for this instance.
41294 *
41295 * @type {object}
41296 */ get namedVariations() {
41297 let res = {};
41298 if (!this.fvar) return res;
41299 for (let instance of this.fvar.instance){
41300 let settings = {};
41301 for(let i = 0; i < this.fvar.axis.length; i++){
41302 let axis = this.fvar.axis[i];
41303 settings[axis.axisTag.trim()] = instance.coord[i];
41304 }
41305 res[instance.name.en] = settings;
41306 }
41307 return res;
41308 }
41309 /**
41310 * Returns a new font with the given variation settings applied.
41311 * Settings can either be an instance name, or an object containing
41312 * variation tags as specified by the `variationAxes` property.
41313 *
41314 * @param {object} settings
41315 * @return {TTFFont}
41316 */ getVariation(settings) {
41317 if (!(this.directory.tables.fvar && (this.directory.tables.gvar && this.directory.tables.glyf || this.directory.tables.CFF2))) throw new Error('Variations require a font with the fvar, gvar and glyf, or CFF2 tables.');
41318 if (typeof settings === 'string') settings = this.namedVariations[settings];
41319 if (typeof settings !== 'object') throw new Error('Variation settings must be either a variation name or settings object.');
41320 // normalize the coordinates
41321 let coords = this.fvar.axis.map((axis, i)=>{
41322 let axisTag = axis.axisTag.trim();
41323 if (axisTag in settings) return Math.max(axis.minValue, Math.min(axis.maxValue, settings[axisTag]));
41324 else return axis.defaultValue;
41325 });
41326 let stream = new ($parcel$interopDefault($lzfo4$restructure)).DecodeStream(this.stream.buffer);
41327 stream.pos = this._directoryPos;
41328 let font = new $4eebb3cdbf303bc9$export$2e2bcd8739ae039(stream, coords);
41329 font._tables = this._tables;
41330 return font;
41331 }
41332 get _variationProcessor() {
41333 if (!this.fvar) return null;
41334 let variationCoords = this.variationCoords;
41335 // Ignore if no variation coords and not CFF2
41336 if (!variationCoords && !this.CFF2) return null;
41337 if (!variationCoords) variationCoords = this.fvar.axis.map((axis)=>axis.defaultValue
41338 );
41339 return new $edb915616d019c4e$export$2e2bcd8739ae039(this, variationCoords);
41340 }
41341 // Standardized format plugin API
41342 getFont(name) {
41343 return this.getVariation(name);
41344 }
41345 constructor(stream, variationCoords = null){
41346 $lzfo4$swchelpers.defineProperty(this, "type", 'TTF');
41347 this.defaultLanguage = null;
41348 this.stream = stream;
41349 this.variationCoords = variationCoords;
41350 this._directoryPos = this.stream.pos;
41351 this._tables = {};
41352 this._glyphs = {};
41353 this._decodeDirectory();
41354 // define properties for each table to lazily parse
41355 for(let tag in this.directory.tables){
41356 let table = this.directory.tables[tag];
41357 if ($6cd727f8bf15b50a$export$2e2bcd8739ae039[tag] && table.length > 0) Object.defineProperty(this, tag, {
41358 get: this._getTable.bind(this, table)
41359 });
41360 }
41361 }
41362}, $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "bbox", [
41363 $9ea776e3198edd2e$export$69a3209f1a06c04d
41364], Object.getOwnPropertyDescriptor(_class.prototype, "bbox"), _class.prototype), $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "_cmapProcessor", [
41365 $9ea776e3198edd2e$export$69a3209f1a06c04d
41366], Object.getOwnPropertyDescriptor(_class.prototype, "_cmapProcessor"), _class.prototype), $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "characterSet", [
41367 $9ea776e3198edd2e$export$69a3209f1a06c04d
41368], Object.getOwnPropertyDescriptor(_class.prototype, "characterSet"), _class.prototype), $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "_layoutEngine", [
41369 $9ea776e3198edd2e$export$69a3209f1a06c04d
41370], Object.getOwnPropertyDescriptor(_class.prototype, "_layoutEngine"), _class.prototype), $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "variationAxes", [
41371 $9ea776e3198edd2e$export$69a3209f1a06c04d
41372], Object.getOwnPropertyDescriptor(_class.prototype, "variationAxes"), _class.prototype), $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "namedVariations", [
41373 $9ea776e3198edd2e$export$69a3209f1a06c04d
41374], Object.getOwnPropertyDescriptor(_class.prototype, "namedVariations"), _class.prototype), $lzfo4$swchelpers.applyDecoratedDescriptor(_class.prototype, "_variationProcessor", [
41375 $9ea776e3198edd2e$export$69a3209f1a06c04d
41376], Object.getOwnPropertyDescriptor(_class.prototype, "_variationProcessor"), _class.prototype), _class);
41377
41378
41379
41380
41381
41382
41383let $42c3b3fb92f0bcfe$var$WOFFDirectoryEntry = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
41384 tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4),
41385 offset: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, 'void', {
41386 type: 'global'
41387 }),
41388 compLength: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41389 length: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41390 origChecksum: ($parcel$interopDefault($lzfo4$restructure)).uint32
41391});
41392let $42c3b3fb92f0bcfe$var$WOFFDirectory = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
41393 tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4),
41394 flavor: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41395 length: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41396 numTables: ($parcel$interopDefault($lzfo4$restructure)).uint16,
41397 reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16),
41398 totalSfntSize: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41399 majorVersion: ($parcel$interopDefault($lzfo4$restructure)).uint16,
41400 minorVersion: ($parcel$interopDefault($lzfo4$restructure)).uint16,
41401 metaOffset: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41402 metaLength: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41403 metaOrigLength: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41404 privOffset: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41405 privLength: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41406 tables: new ($parcel$interopDefault($lzfo4$restructure)).Array($42c3b3fb92f0bcfe$var$WOFFDirectoryEntry, 'numTables')
41407});
41408$42c3b3fb92f0bcfe$var$WOFFDirectory.process = function() {
41409 let tables = {};
41410 for (let table of this.tables)tables[table.tag] = table;
41411 this.tables = tables;
41412};
41413var $42c3b3fb92f0bcfe$export$2e2bcd8739ae039 = $42c3b3fb92f0bcfe$var$WOFFDirectory;
41414
41415
41416
41417
41418
41419
41420var $d601d2da4b510322$require$Buffer = $lzfo4$buffer.Buffer;
41421class $d601d2da4b510322$export$2e2bcd8739ae039 extends $4eebb3cdbf303bc9$export$2e2bcd8739ae039 {
41422 static probe(buffer) {
41423 return buffer.toString('ascii', 0, 4) === 'wOFF';
41424 }
41425 _decodeDirectory() {
41426 this.directory = $42c3b3fb92f0bcfe$export$2e2bcd8739ae039.decode(this.stream, {
41427 _startOffset: 0
41428 });
41429 }
41430 _getTableStream(tag) {
41431 let table = this.directory.tables[tag];
41432 if (table) {
41433 this.stream.pos = table.offset;
41434 if (table.compLength < table.length) {
41435 this.stream.pos += 2; // skip deflate header
41436 let outBuffer = $d601d2da4b510322$require$Buffer.alloc(table.length);
41437 let buf = ($parcel$interopDefault($lzfo4$tinyinflate))(this.stream.readBuffer(table.compLength - 2), outBuffer);
41438 return new ($parcel$interopDefault($lzfo4$restructure)).DecodeStream(buf);
41439 } else return this.stream;
41440 }
41441 return null;
41442 }
41443 constructor(...args){
41444 super(...args);
41445 $lzfo4$swchelpers.defineProperty(this, "type", 'WOFF');
41446 }
41447}
41448
41449
41450
41451
41452
41453
41454
41455
41456
41457class $54119d8499a8b392$export$2e2bcd8739ae039 extends $f71300a5bebbfea9$export$2e2bcd8739ae039 {
41458 _decode() {
41459 // We have to decode in advance (in WOFF2Font), so just return the pre-decoded data.
41460 return this._font._transformedGlyphs[this.id];
41461 }
41462 _getCBox() {
41463 return this.path.bbox;
41464 }
41465 constructor(...args){
41466 super(...args);
41467 $lzfo4$swchelpers.defineProperty(this, "type", 'WOFF2');
41468 }
41469}
41470
41471
41472
41473const $020d33b51d78c4b3$var$Base128 = {
41474 decode (stream) {
41475 let result = 0;
41476 let iterable = [
41477 0,
41478 1,
41479 2,
41480 3,
41481 4
41482 ];
41483 for(let j = 0; j < iterable.length; j++){
41484 let i = iterable[j];
41485 let code = stream.readUInt8();
41486 // If any of the top seven bits are set then we're about to overflow.
41487 if (result & 0xe0000000) throw new Error('Overflow');
41488 result = result << 7 | code & 0x7f;
41489 if ((code & 0x80) === 0) return result;
41490 }
41491 throw new Error('Bad base 128 number');
41492 }
41493};
41494let $020d33b51d78c4b3$var$knownTags = [
41495 'cmap',
41496 'head',
41497 'hhea',
41498 'hmtx',
41499 'maxp',
41500 'name',
41501 'OS/2',
41502 'post',
41503 'cvt ',
41504 'fpgm',
41505 'glyf',
41506 'loca',
41507 'prep',
41508 'CFF ',
41509 'VORG',
41510 'EBDT',
41511 'EBLC',
41512 'gasp',
41513 'hdmx',
41514 'kern',
41515 'LTSH',
41516 'PCLT',
41517 'VDMX',
41518 'vhea',
41519 'vmtx',
41520 'BASE',
41521 'GDEF',
41522 'GPOS',
41523 'GSUB',
41524 'EBSC',
41525 'JSTF',
41526 'MATH',
41527 'CBDT',
41528 'CBLC',
41529 'COLR',
41530 'CPAL',
41531 'SVG ',
41532 'sbix',
41533 'acnt',
41534 'avar',
41535 'bdat',
41536 'bloc',
41537 'bsln',
41538 'cvar',
41539 'fdsc',
41540 'feat',
41541 'fmtx',
41542 'fvar',
41543 'gvar',
41544 'hsty',
41545 'just',
41546 'lcar',
41547 'mort',
41548 'morx',
41549 'opbd',
41550 'prop',
41551 'trak',
41552 'Zapf',
41553 'Silf',
41554 'Glat',
41555 'Gloc',
41556 'Feat',
41557 'Sill'
41558];
41559let $020d33b51d78c4b3$var$WOFF2DirectoryEntry = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
41560 flags: ($parcel$interopDefault($lzfo4$restructure)).uint8,
41561 customTag: new ($parcel$interopDefault($lzfo4$restructure)).Optional(new ($parcel$interopDefault($lzfo4$restructure)).String(4), (t)=>(t.flags & 0x3f) === 0x3f
41562 ),
41563 tag: (t)=>t.customTag || $020d33b51d78c4b3$var$knownTags[t.flags & 0x3f]
41564 ,
41565 length: $020d33b51d78c4b3$var$Base128,
41566 transformVersion: (t)=>t.flags >>> 6 & 0x03
41567 ,
41568 transformed: (t)=>t.tag === 'glyf' || t.tag === 'loca' ? t.transformVersion === 0 : t.transformVersion !== 0
41569 ,
41570 transformLength: new ($parcel$interopDefault($lzfo4$restructure)).Optional($020d33b51d78c4b3$var$Base128, (t)=>t.transformed
41571 )
41572});
41573let $020d33b51d78c4b3$var$WOFF2Directory = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
41574 tag: new ($parcel$interopDefault($lzfo4$restructure)).String(4),
41575 flavor: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41576 length: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41577 numTables: ($parcel$interopDefault($lzfo4$restructure)).uint16,
41578 reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint16),
41579 totalSfntSize: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41580 totalCompressedSize: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41581 majorVersion: ($parcel$interopDefault($lzfo4$restructure)).uint16,
41582 minorVersion: ($parcel$interopDefault($lzfo4$restructure)).uint16,
41583 metaOffset: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41584 metaLength: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41585 metaOrigLength: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41586 privOffset: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41587 privLength: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41588 tables: new ($parcel$interopDefault($lzfo4$restructure)).Array($020d33b51d78c4b3$var$WOFF2DirectoryEntry, 'numTables')
41589});
41590$020d33b51d78c4b3$var$WOFF2Directory.process = function() {
41591 let tables = {};
41592 for(let i = 0; i < this.tables.length; i++){
41593 let table = this.tables[i];
41594 tables[table.tag] = table;
41595 }
41596 return this.tables = tables;
41597};
41598var $020d33b51d78c4b3$export$2e2bcd8739ae039 = $020d33b51d78c4b3$var$WOFF2Directory;
41599
41600
41601
41602var $442fd30f53d0bc2b$require$Buffer = $lzfo4$buffer.Buffer;
41603class $442fd30f53d0bc2b$export$2e2bcd8739ae039 extends $4eebb3cdbf303bc9$export$2e2bcd8739ae039 {
41604 static probe(buffer) {
41605 return buffer.toString('ascii', 0, 4) === 'wOF2';
41606 }
41607 _decodeDirectory() {
41608 this.directory = $020d33b51d78c4b3$export$2e2bcd8739ae039.decode(this.stream);
41609 this._dataPos = this.stream.pos;
41610 }
41611 _decompress() {
41612 // decompress data and setup table offsets if we haven't already
41613 if (!this._decompressed) {
41614 this.stream.pos = this._dataPos;
41615 let buffer = this.stream.readBuffer(this.directory.totalCompressedSize);
41616 let decompressedSize = 0;
41617 for(let tag in this.directory.tables){
41618 let entry = this.directory.tables[tag];
41619 entry.offset = decompressedSize;
41620 decompressedSize += entry.transformLength != null ? entry.transformLength : entry.length;
41621 }
41622 let decompressed = ($parcel$interopDefault($lzfo4$brotlidecompressjs))(buffer, decompressedSize);
41623 if (!decompressed) throw new Error('Error decoding compressed data in WOFF2');
41624 this.stream = new ($parcel$interopDefault($lzfo4$restructure)).DecodeStream($442fd30f53d0bc2b$require$Buffer.from(decompressed));
41625 this._decompressed = true;
41626 }
41627 }
41628 _decodeTable(table) {
41629 this._decompress();
41630 return super._decodeTable(table);
41631 }
41632 // Override this method to get a glyph and return our
41633 // custom subclass if there is a glyf table.
41634 _getBaseGlyph(glyph, characters = []) {
41635 if (!this._glyphs[glyph]) {
41636 if (this.directory.tables.glyf && this.directory.tables.glyf.transformed) {
41637 if (!this._transformedGlyphs) this._transformGlyfTable();
41638 return this._glyphs[glyph] = new $54119d8499a8b392$export$2e2bcd8739ae039(glyph, characters, this);
41639 } else return super._getBaseGlyph(glyph, characters);
41640 }
41641 }
41642 _transformGlyfTable() {
41643 this._decompress();
41644 this.stream.pos = this.directory.tables.glyf.offset;
41645 let table = $442fd30f53d0bc2b$var$GlyfTable.decode(this.stream);
41646 let glyphs = [];
41647 for(let index = 0; index < table.numGlyphs; index++){
41648 let glyph = {};
41649 let nContours = table.nContours.readInt16BE();
41650 glyph.numberOfContours = nContours;
41651 if (nContours > 0) {
41652 let nPoints = [];
41653 let totalPoints = 0;
41654 for(let i = 0; i < nContours; i++){
41655 let r = $442fd30f53d0bc2b$var$read255UInt16(table.nPoints);
41656 totalPoints += r;
41657 nPoints.push(totalPoints);
41658 }
41659 glyph.points = $442fd30f53d0bc2b$var$decodeTriplet(table.flags, table.glyphs, totalPoints);
41660 for(let i1 = 0; i1 < nContours; i1++)glyph.points[nPoints[i1] - 1].endContour = true;
41661 var instructionSize = $442fd30f53d0bc2b$var$read255UInt16(table.glyphs);
41662 } else if (nContours < 0) {
41663 let haveInstructions = $f71300a5bebbfea9$export$2e2bcd8739ae039.prototype._decodeComposite.call({
41664 _font: this
41665 }, glyph, table.composites);
41666 if (haveInstructions) var instructionSize = $442fd30f53d0bc2b$var$read255UInt16(table.glyphs);
41667 }
41668 glyphs.push(glyph);
41669 }
41670 this._transformedGlyphs = glyphs;
41671 }
41672 constructor(...args){
41673 super(...args);
41674 $lzfo4$swchelpers.defineProperty(this, "type", 'WOFF2');
41675 }
41676}
41677// Special class that accepts a length and returns a sub-stream for that data
41678class $442fd30f53d0bc2b$var$Substream {
41679 decode(stream, parent) {
41680 return new ($parcel$interopDefault($lzfo4$restructure)).DecodeStream(this._buf.decode(stream, parent));
41681 }
41682 constructor(length){
41683 this.length = length;
41684 this._buf = new ($parcel$interopDefault($lzfo4$restructure)).Buffer(length);
41685 }
41686}
41687// This struct represents the entire glyf table
41688let $442fd30f53d0bc2b$var$GlyfTable = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
41689 version: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41690 numGlyphs: ($parcel$interopDefault($lzfo4$restructure)).uint16,
41691 indexFormat: ($parcel$interopDefault($lzfo4$restructure)).uint16,
41692 nContourStreamSize: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41693 nPointsStreamSize: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41694 flagStreamSize: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41695 glyphStreamSize: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41696 compositeStreamSize: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41697 bboxStreamSize: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41698 instructionStreamSize: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41699 nContours: new $442fd30f53d0bc2b$var$Substream('nContourStreamSize'),
41700 nPoints: new $442fd30f53d0bc2b$var$Substream('nPointsStreamSize'),
41701 flags: new $442fd30f53d0bc2b$var$Substream('flagStreamSize'),
41702 glyphs: new $442fd30f53d0bc2b$var$Substream('glyphStreamSize'),
41703 composites: new $442fd30f53d0bc2b$var$Substream('compositeStreamSize'),
41704 bboxes: new $442fd30f53d0bc2b$var$Substream('bboxStreamSize'),
41705 instructions: new $442fd30f53d0bc2b$var$Substream('instructionStreamSize')
41706});
41707const $442fd30f53d0bc2b$var$WORD_CODE = 253;
41708const $442fd30f53d0bc2b$var$ONE_MORE_BYTE_CODE2 = 254;
41709const $442fd30f53d0bc2b$var$ONE_MORE_BYTE_CODE1 = 255;
41710const $442fd30f53d0bc2b$var$LOWEST_U_CODE = 253;
41711function $442fd30f53d0bc2b$var$read255UInt16(stream) {
41712 let code = stream.readUInt8();
41713 if (code === $442fd30f53d0bc2b$var$WORD_CODE) return stream.readUInt16BE();
41714 if (code === $442fd30f53d0bc2b$var$ONE_MORE_BYTE_CODE1) return stream.readUInt8() + $442fd30f53d0bc2b$var$LOWEST_U_CODE;
41715 if (code === $442fd30f53d0bc2b$var$ONE_MORE_BYTE_CODE2) return stream.readUInt8() + $442fd30f53d0bc2b$var$LOWEST_U_CODE * 2;
41716 return code;
41717}
41718function $442fd30f53d0bc2b$var$withSign(flag, baseval) {
41719 return flag & 1 ? baseval : -baseval;
41720}
41721function $442fd30f53d0bc2b$var$decodeTriplet(flags, glyphs, nPoints) {
41722 let y;
41723 let x = y = 0;
41724 let res = [];
41725 for(let i = 0; i < nPoints; i++){
41726 let dx = 0, dy = 0;
41727 let flag = flags.readUInt8();
41728 let onCurve = !(flag >> 7);
41729 flag &= 0x7f;
41730 if (flag < 10) {
41731 dx = 0;
41732 dy = $442fd30f53d0bc2b$var$withSign(flag, ((flag & 14) << 7) + glyphs.readUInt8());
41733 } else if (flag < 20) {
41734 dx = $442fd30f53d0bc2b$var$withSign(flag, ((flag - 10 & 14) << 7) + glyphs.readUInt8());
41735 dy = 0;
41736 } else if (flag < 84) {
41737 var b0 = flag - 20;
41738 var b1 = glyphs.readUInt8();
41739 dx = $442fd30f53d0bc2b$var$withSign(flag, 1 + (b0 & 0x30) + (b1 >> 4));
41740 dy = $442fd30f53d0bc2b$var$withSign(flag >> 1, 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f));
41741 } else if (flag < 120) {
41742 var b0 = flag - 84;
41743 dx = $442fd30f53d0bc2b$var$withSign(flag, 1 + (b0 / 12 << 8) + glyphs.readUInt8());
41744 dy = $442fd30f53d0bc2b$var$withSign(flag >> 1, 1 + (b0 % 12 >> 2 << 8) + glyphs.readUInt8());
41745 } else if (flag < 124) {
41746 var b1 = glyphs.readUInt8();
41747 let b2 = glyphs.readUInt8();
41748 dx = $442fd30f53d0bc2b$var$withSign(flag, (b1 << 4) + (b2 >> 4));
41749 dy = $442fd30f53d0bc2b$var$withSign(flag >> 1, ((b2 & 0x0f) << 8) + glyphs.readUInt8());
41750 } else {
41751 dx = $442fd30f53d0bc2b$var$withSign(flag, glyphs.readUInt16BE());
41752 dy = $442fd30f53d0bc2b$var$withSign(flag >> 1, glyphs.readUInt16BE());
41753 }
41754 x += dx;
41755 y += dy;
41756 res.push(new $f71300a5bebbfea9$export$baf26146a414f24a(onCurve, false, x, y));
41757 }
41758 return res;
41759}
41760
41761
41762
41763
41764
41765
41766
41767
41768var $c161ea4b70ba661a$require$Buffer = $lzfo4$buffer.Buffer;
41769let $c161ea4b70ba661a$var$TTCHeader = new ($parcel$interopDefault($lzfo4$restructure)).VersionedStruct(($parcel$interopDefault($lzfo4$restructure)).uint32, {
41770 0x00010000: {
41771 numFonts: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41772 offsets: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint32, 'numFonts')
41773 },
41774 0x00020000: {
41775 numFonts: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41776 offsets: new ($parcel$interopDefault($lzfo4$restructure)).Array(($parcel$interopDefault($lzfo4$restructure)).uint32, 'numFonts'),
41777 dsigTag: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41778 dsigLength: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41779 dsigOffset: ($parcel$interopDefault($lzfo4$restructure)).uint32
41780 }
41781});
41782class $c161ea4b70ba661a$export$2e2bcd8739ae039 {
41783 static probe(buffer) {
41784 return buffer.toString('ascii', 0, 4) === 'ttcf';
41785 }
41786 getFont(name) {
41787 for (let offset of this.header.offsets){
41788 let stream = new ($parcel$interopDefault($lzfo4$restructure)).DecodeStream(this.stream.buffer);
41789 stream.pos = offset;
41790 let font = new $4eebb3cdbf303bc9$export$2e2bcd8739ae039(stream);
41791 if ($c161ea4b70ba661a$require$Buffer.isBuffer(font.postscriptName) && font.postscriptName.equals(name) || font.postscriptName === name) return font;
41792 }
41793 return null;
41794 }
41795 get fonts() {
41796 let fonts = [];
41797 for (let offset of this.header.offsets){
41798 let stream = new ($parcel$interopDefault($lzfo4$restructure)).DecodeStream(this.stream.buffer);
41799 stream.pos = offset;
41800 fonts.push(new $4eebb3cdbf303bc9$export$2e2bcd8739ae039(stream));
41801 }
41802 return fonts;
41803 }
41804 constructor(stream){
41805 $lzfo4$swchelpers.defineProperty(this, "type", 'TTC');
41806 this.stream = stream;
41807 if (stream.readString(4) !== 'ttcf') throw new Error('Not a TrueType collection');
41808 this.header = $c161ea4b70ba661a$var$TTCHeader.decode(stream);
41809 }
41810}
41811
41812
41813
41814
41815
41816
41817var $6856163a969bb62a$require$Buffer = $lzfo4$buffer.Buffer;
41818let $6856163a969bb62a$var$DFontName = new ($parcel$interopDefault($lzfo4$restructure)).String(($parcel$interopDefault($lzfo4$restructure)).uint8);
41819let $6856163a969bb62a$var$DFontData = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
41820 len: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41821 buf: new ($parcel$interopDefault($lzfo4$restructure)).Buffer('len')
41822});
41823let $6856163a969bb62a$var$Ref = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
41824 id: ($parcel$interopDefault($lzfo4$restructure)).uint16,
41825 nameOffset: ($parcel$interopDefault($lzfo4$restructure)).int16,
41826 attr: ($parcel$interopDefault($lzfo4$restructure)).uint8,
41827 dataOffset: ($parcel$interopDefault($lzfo4$restructure)).uint24,
41828 handle: ($parcel$interopDefault($lzfo4$restructure)).uint32
41829});
41830let $6856163a969bb62a$var$Type = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
41831 name: new ($parcel$interopDefault($lzfo4$restructure)).String(4),
41832 maxTypeIndex: ($parcel$interopDefault($lzfo4$restructure)).uint16,
41833 refList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, new ($parcel$interopDefault($lzfo4$restructure)).Array($6856163a969bb62a$var$Ref, (t)=>t.maxTypeIndex + 1
41834 ), {
41835 type: 'parent'
41836 })
41837});
41838let $6856163a969bb62a$var$TypeList = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
41839 length: ($parcel$interopDefault($lzfo4$restructure)).uint16,
41840 types: new ($parcel$interopDefault($lzfo4$restructure)).Array($6856163a969bb62a$var$Type, (t)=>t.length + 1
41841 )
41842});
41843let $6856163a969bb62a$var$DFontMap = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
41844 reserved: new ($parcel$interopDefault($lzfo4$restructure)).Reserved(($parcel$interopDefault($lzfo4$restructure)).uint8, 24),
41845 typeList: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, $6856163a969bb62a$var$TypeList),
41846 nameListOffset: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint16, 'void')
41847});
41848let $6856163a969bb62a$var$DFontHeader = new ($parcel$interopDefault($lzfo4$restructure)).Struct({
41849 dataOffset: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41850 map: new ($parcel$interopDefault($lzfo4$restructure)).Pointer(($parcel$interopDefault($lzfo4$restructure)).uint32, $6856163a969bb62a$var$DFontMap),
41851 dataLength: ($parcel$interopDefault($lzfo4$restructure)).uint32,
41852 mapLength: ($parcel$interopDefault($lzfo4$restructure)).uint32
41853});
41854class $6856163a969bb62a$export$2e2bcd8739ae039 {
41855 static probe(buffer) {
41856 let stream = new ($parcel$interopDefault($lzfo4$restructure)).DecodeStream(buffer);
41857 try {
41858 var header = $6856163a969bb62a$var$DFontHeader.decode(stream);
41859 } catch (e) {
41860 return false;
41861 }
41862 for (let type of header.map.typeList.types){
41863 if (type.name === 'sfnt') return true;
41864 }
41865 return false;
41866 }
41867 getFont(name) {
41868 if (!this.sfnt) return null;
41869 for (let ref of this.sfnt.refList){
41870 let pos = this.header.dataOffset + ref.dataOffset + 4;
41871 let stream = new ($parcel$interopDefault($lzfo4$restructure)).DecodeStream(this.stream.buffer.slice(pos));
41872 let font = new $4eebb3cdbf303bc9$export$2e2bcd8739ae039(stream);
41873 if ($6856163a969bb62a$require$Buffer.isBuffer(font.postscriptName) && font.postscriptName.equals(name) || font.postscriptName === name) return font;
41874 }
41875 return null;
41876 }
41877 get fonts() {
41878 let fonts = [];
41879 for (let ref of this.sfnt.refList){
41880 let pos = this.header.dataOffset + ref.dataOffset + 4;
41881 let stream = new ($parcel$interopDefault($lzfo4$restructure)).DecodeStream(this.stream.buffer.slice(pos));
41882 fonts.push(new $4eebb3cdbf303bc9$export$2e2bcd8739ae039(stream));
41883 }
41884 return fonts;
41885 }
41886 constructor(stream){
41887 $lzfo4$swchelpers.defineProperty(this, "type", 'DFont');
41888 this.stream = stream;
41889 this.header = $6856163a969bb62a$var$DFontHeader.decode(this.stream);
41890 for (let type of this.header.map.typeList.types){
41891 for (let ref of type.refList)if (ref.nameOffset >= 0) {
41892 this.stream.pos = ref.nameOffset + this.header.map.nameListOffset;
41893 ref.name = $6856163a969bb62a$var$DFontName.decode(this.stream);
41894 } else ref.name = null;
41895 if (type.name === 'sfnt') this.sfnt = type;
41896 }
41897 }
41898}
41899
41900
41901
41902// Register font formats
41903$a35dad4d16c8d1df$export$36b2f24e97d43be($4eebb3cdbf303bc9$export$2e2bcd8739ae039);
41904$a35dad4d16c8d1df$export$36b2f24e97d43be($d601d2da4b510322$export$2e2bcd8739ae039);
41905$a35dad4d16c8d1df$export$36b2f24e97d43be($442fd30f53d0bc2b$export$2e2bcd8739ae039);
41906$a35dad4d16c8d1df$export$36b2f24e97d43be($c161ea4b70ba661a$export$2e2bcd8739ae039);
41907$a35dad4d16c8d1df$export$36b2f24e97d43be($6856163a969bb62a$export$2e2bcd8739ae039);
41908var // Legacy default export for backward compatibility.
41909$7b813caac4971c4b$export$2e2bcd8739ae039 = {
41910 registerFormat: $a35dad4d16c8d1df$export$36b2f24e97d43be,
41911 openSync: $a35dad4d16c8d1df$export$fa5499edb1ab414a,
41912 open: $a35dad4d16c8d1df$export$3ce6949f20cea765,
41913 create: $a35dad4d16c8d1df$export$185802fd694ee1f5,
41914 defaultLanguage: $a35dad4d16c8d1df$export$42940898df819940,
41915 setDefaultLanguage: $a35dad4d16c8d1df$export$5157e7780d44cc36
41916};
41917$parcel$exportWildcard(module.exports, $a35dad4d16c8d1df$exports);
41918
41919
41920
41921
41922}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
41923},{"../iconv-lite.cjs":172,"@swc/helpers":83,"brotli/decompress.js":98,"buffer":114,"clone":117,"deep-equal":155,"dfa":159,"fs":113,"restructure":244,"restructure/src/utils.js":260,"tiny-inflate":267,"unicode-properties":269,"unicode-trie":270}],172:[function(require,module,exports){
41924// iconv-lite is an optional dependency.
41925// This is a hack to make that work with Node native ESM by creating a CJS module
41926// that can be imported from ESM. This also works in bundlers which support try..catch
41927// blocks to mark optional dependencies.
41928try {
41929 module.exports = require('iconv-lite');
41930} catch (err) { }
41931
41932},{"iconv-lite":113}],173:[function(require,module,exports){
41933'use strict';
41934
41935var isCallable = require('is-callable');
41936
41937var toStr = Object.prototype.toString;
41938var hasOwnProperty = Object.prototype.hasOwnProperty;
41939
41940var forEachArray = function forEachArray(array, iterator, receiver) {
41941 for (var i = 0, len = array.length; i < len; i++) {
41942 if (hasOwnProperty.call(array, i)) {
41943 if (receiver == null) {
41944 iterator(array[i], i, array);
41945 } else {
41946 iterator.call(receiver, array[i], i, array);
41947 }
41948 }
41949 }
41950};
41951
41952var forEachString = function forEachString(string, iterator, receiver) {
41953 for (var i = 0, len = string.length; i < len; i++) {
41954 // no such thing as a sparse string.
41955 if (receiver == null) {
41956 iterator(string.charAt(i), i, string);
41957 } else {
41958 iterator.call(receiver, string.charAt(i), i, string);
41959 }
41960 }
41961};
41962
41963var forEachObject = function forEachObject(object, iterator, receiver) {
41964 for (var k in object) {
41965 if (hasOwnProperty.call(object, k)) {
41966 if (receiver == null) {
41967 iterator(object[k], k, object);
41968 } else {
41969 iterator.call(receiver, object[k], k, object);
41970 }
41971 }
41972 }
41973};
41974
41975var forEach = function forEach(list, iterator, thisArg) {
41976 if (!isCallable(iterator)) {
41977 throw new TypeError('iterator must be a function');
41978 }
41979
41980 var receiver;
41981 if (arguments.length >= 3) {
41982 receiver = thisArg;
41983 }
41984
41985 if (toStr.call(list) === '[object Array]') {
41986 forEachArray(list, iterator, receiver);
41987 } else if (typeof list === 'string') {
41988 forEachString(list, iterator, receiver);
41989 } else {
41990 forEachObject(list, iterator, receiver);
41991 }
41992};
41993
41994module.exports = forEach;
41995
41996},{"is-callable":193}],174:[function(require,module,exports){
41997'use strict';
41998
41999/* eslint no-invalid-this: 1 */
42000
42001var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
42002var toStr = Object.prototype.toString;
42003var max = Math.max;
42004var funcType = '[object Function]';
42005
42006var concatty = function concatty(a, b) {
42007 var arr = [];
42008
42009 for (var i = 0; i < a.length; i += 1) {
42010 arr[i] = a[i];
42011 }
42012 for (var j = 0; j < b.length; j += 1) {
42013 arr[j + a.length] = b[j];
42014 }
42015
42016 return arr;
42017};
42018
42019var slicy = function slicy(arrLike, offset) {
42020 var arr = [];
42021 for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {
42022 arr[j] = arrLike[i];
42023 }
42024 return arr;
42025};
42026
42027var joiny = function (arr, joiner) {
42028 var str = '';
42029 for (var i = 0; i < arr.length; i += 1) {
42030 str += arr[i];
42031 if (i + 1 < arr.length) {
42032 str += joiner;
42033 }
42034 }
42035 return str;
42036};
42037
42038module.exports = function bind(that) {
42039 var target = this;
42040 if (typeof target !== 'function' || toStr.apply(target) !== funcType) {
42041 throw new TypeError(ERROR_MESSAGE + target);
42042 }
42043 var args = slicy(arguments, 1);
42044
42045 var bound;
42046 var binder = function () {
42047 if (this instanceof bound) {
42048 var result = target.apply(
42049 this,
42050 concatty(args, arguments)
42051 );
42052 if (Object(result) === result) {
42053 return result;
42054 }
42055 return this;
42056 }
42057 return target.apply(
42058 that,
42059 concatty(args, arguments)
42060 );
42061
42062 };
42063
42064 var boundLength = max(0, target.length - args.length);
42065 var boundArgs = [];
42066 for (var i = 0; i < boundLength; i++) {
42067 boundArgs[i] = '$' + i;
42068 }
42069
42070 bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);
42071
42072 if (target.prototype) {
42073 var Empty = function Empty() {};
42074 Empty.prototype = target.prototype;
42075 bound.prototype = new Empty();
42076 Empty.prototype = null;
42077 }
42078
42079 return bound;
42080};
42081
42082},{}],175:[function(require,module,exports){
42083'use strict';
42084
42085var implementation = require('./implementation');
42086
42087module.exports = Function.prototype.bind || implementation;
42088
42089},{"./implementation":174}],176:[function(require,module,exports){
42090'use strict';
42091
42092var functionsHaveNames = function functionsHaveNames() {
42093 return typeof function f() {}.name === 'string';
42094};
42095
42096var gOPD = Object.getOwnPropertyDescriptor;
42097if (gOPD) {
42098 try {
42099 gOPD([], 'length');
42100 } catch (e) {
42101 // IE 8 has a broken gOPD
42102 gOPD = null;
42103 }
42104}
42105
42106functionsHaveNames.functionsHaveConfigurableNames = function functionsHaveConfigurableNames() {
42107 if (!functionsHaveNames() || !gOPD) {
42108 return false;
42109 }
42110 var desc = gOPD(function () {}, 'name');
42111 return !!desc && !!desc.configurable;
42112};
42113
42114var $bind = Function.prototype.bind;
42115
42116functionsHaveNames.boundFunctionsHaveNames = function boundFunctionsHaveNames() {
42117 return functionsHaveNames() && typeof $bind === 'function' && function f() {}.bind().name !== '';
42118};
42119
42120module.exports = functionsHaveNames;
42121
42122},{}],177:[function(require,module,exports){
42123'use strict';
42124
42125var undefined;
42126
42127var $Error = require('es-errors');
42128var $EvalError = require('es-errors/eval');
42129var $RangeError = require('es-errors/range');
42130var $ReferenceError = require('es-errors/ref');
42131var $SyntaxError = require('es-errors/syntax');
42132var $TypeError = require('es-errors/type');
42133var $URIError = require('es-errors/uri');
42134
42135var $Function = Function;
42136
42137// eslint-disable-next-line consistent-return
42138var getEvalledConstructor = function (expressionSyntax) {
42139 try {
42140 return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')();
42141 } catch (e) {}
42142};
42143
42144var $gOPD = Object.getOwnPropertyDescriptor;
42145if ($gOPD) {
42146 try {
42147 $gOPD({}, '');
42148 } catch (e) {
42149 $gOPD = null; // this is IE 8, which has a broken gOPD
42150 }
42151}
42152
42153var throwTypeError = function () {
42154 throw new $TypeError();
42155};
42156var ThrowTypeError = $gOPD
42157 ? (function () {
42158 try {
42159 // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties
42160 arguments.callee; // IE 8 does not throw here
42161 return throwTypeError;
42162 } catch (calleeThrows) {
42163 try {
42164 // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')
42165 return $gOPD(arguments, 'callee').get;
42166 } catch (gOPDthrows) {
42167 return throwTypeError;
42168 }
42169 }
42170 }())
42171 : throwTypeError;
42172
42173var hasSymbols = require('has-symbols')();
42174var hasProto = require('has-proto')();
42175
42176var getProto = Object.getPrototypeOf || (
42177 hasProto
42178 ? function (x) { return x.__proto__; } // eslint-disable-line no-proto
42179 : null
42180);
42181
42182var needsEval = {};
42183
42184var TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);
42185
42186var INTRINSICS = {
42187 __proto__: null,
42188 '%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,
42189 '%Array%': Array,
42190 '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,
42191 '%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,
42192 '%AsyncFromSyncIteratorPrototype%': undefined,
42193 '%AsyncFunction%': needsEval,
42194 '%AsyncGenerator%': needsEval,
42195 '%AsyncGeneratorFunction%': needsEval,
42196 '%AsyncIteratorPrototype%': needsEval,
42197 '%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,
42198 '%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,
42199 '%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,
42200 '%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,
42201 '%Boolean%': Boolean,
42202 '%DataView%': typeof DataView === 'undefined' ? undefined : DataView,
42203 '%Date%': Date,
42204 '%decodeURI%': decodeURI,
42205 '%decodeURIComponent%': decodeURIComponent,
42206 '%encodeURI%': encodeURI,
42207 '%encodeURIComponent%': encodeURIComponent,
42208 '%Error%': $Error,
42209 '%eval%': eval, // eslint-disable-line no-eval
42210 '%EvalError%': $EvalError,
42211 '%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,
42212 '%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,
42213 '%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,
42214 '%Function%': $Function,
42215 '%GeneratorFunction%': needsEval,
42216 '%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,
42217 '%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,
42218 '%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,
42219 '%isFinite%': isFinite,
42220 '%isNaN%': isNaN,
42221 '%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,
42222 '%JSON%': typeof JSON === 'object' ? JSON : undefined,
42223 '%Map%': typeof Map === 'undefined' ? undefined : Map,
42224 '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),
42225 '%Math%': Math,
42226 '%Number%': Number,
42227 '%Object%': Object,
42228 '%parseFloat%': parseFloat,
42229 '%parseInt%': parseInt,
42230 '%Promise%': typeof Promise === 'undefined' ? undefined : Promise,
42231 '%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,
42232 '%RangeError%': $RangeError,
42233 '%ReferenceError%': $ReferenceError,
42234 '%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,
42235 '%RegExp%': RegExp,
42236 '%Set%': typeof Set === 'undefined' ? undefined : Set,
42237 '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),
42238 '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,
42239 '%String%': String,
42240 '%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,
42241 '%Symbol%': hasSymbols ? Symbol : undefined,
42242 '%SyntaxError%': $SyntaxError,
42243 '%ThrowTypeError%': ThrowTypeError,
42244 '%TypedArray%': TypedArray,
42245 '%TypeError%': $TypeError,
42246 '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,
42247 '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,
42248 '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,
42249 '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,
42250 '%URIError%': $URIError,
42251 '%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,
42252 '%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,
42253 '%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet
42254};
42255
42256if (getProto) {
42257 try {
42258 null.error; // eslint-disable-line no-unused-expressions
42259 } catch (e) {
42260 // https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229
42261 var errorProto = getProto(getProto(e));
42262 INTRINSICS['%Error.prototype%'] = errorProto;
42263 }
42264}
42265
42266var doEval = function doEval(name) {
42267 var value;
42268 if (name === '%AsyncFunction%') {
42269 value = getEvalledConstructor('async function () {}');
42270 } else if (name === '%GeneratorFunction%') {
42271 value = getEvalledConstructor('function* () {}');
42272 } else if (name === '%AsyncGeneratorFunction%') {
42273 value = getEvalledConstructor('async function* () {}');
42274 } else if (name === '%AsyncGenerator%') {
42275 var fn = doEval('%AsyncGeneratorFunction%');
42276 if (fn) {
42277 value = fn.prototype;
42278 }
42279 } else if (name === '%AsyncIteratorPrototype%') {
42280 var gen = doEval('%AsyncGenerator%');
42281 if (gen && getProto) {
42282 value = getProto(gen.prototype);
42283 }
42284 }
42285
42286 INTRINSICS[name] = value;
42287
42288 return value;
42289};
42290
42291var LEGACY_ALIASES = {
42292 __proto__: null,
42293 '%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],
42294 '%ArrayPrototype%': ['Array', 'prototype'],
42295 '%ArrayProto_entries%': ['Array', 'prototype', 'entries'],
42296 '%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],
42297 '%ArrayProto_keys%': ['Array', 'prototype', 'keys'],
42298 '%ArrayProto_values%': ['Array', 'prototype', 'values'],
42299 '%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],
42300 '%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],
42301 '%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],
42302 '%BooleanPrototype%': ['Boolean', 'prototype'],
42303 '%DataViewPrototype%': ['DataView', 'prototype'],
42304 '%DatePrototype%': ['Date', 'prototype'],
42305 '%ErrorPrototype%': ['Error', 'prototype'],
42306 '%EvalErrorPrototype%': ['EvalError', 'prototype'],
42307 '%Float32ArrayPrototype%': ['Float32Array', 'prototype'],
42308 '%Float64ArrayPrototype%': ['Float64Array', 'prototype'],
42309 '%FunctionPrototype%': ['Function', 'prototype'],
42310 '%Generator%': ['GeneratorFunction', 'prototype'],
42311 '%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],
42312 '%Int8ArrayPrototype%': ['Int8Array', 'prototype'],
42313 '%Int16ArrayPrototype%': ['Int16Array', 'prototype'],
42314 '%Int32ArrayPrototype%': ['Int32Array', 'prototype'],
42315 '%JSONParse%': ['JSON', 'parse'],
42316 '%JSONStringify%': ['JSON', 'stringify'],
42317 '%MapPrototype%': ['Map', 'prototype'],
42318 '%NumberPrototype%': ['Number', 'prototype'],
42319 '%ObjectPrototype%': ['Object', 'prototype'],
42320 '%ObjProto_toString%': ['Object', 'prototype', 'toString'],
42321 '%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],
42322 '%PromisePrototype%': ['Promise', 'prototype'],
42323 '%PromiseProto_then%': ['Promise', 'prototype', 'then'],
42324 '%Promise_all%': ['Promise', 'all'],
42325 '%Promise_reject%': ['Promise', 'reject'],
42326 '%Promise_resolve%': ['Promise', 'resolve'],
42327 '%RangeErrorPrototype%': ['RangeError', 'prototype'],
42328 '%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],
42329 '%RegExpPrototype%': ['RegExp', 'prototype'],
42330 '%SetPrototype%': ['Set', 'prototype'],
42331 '%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],
42332 '%StringPrototype%': ['String', 'prototype'],
42333 '%SymbolPrototype%': ['Symbol', 'prototype'],
42334 '%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],
42335 '%TypedArrayPrototype%': ['TypedArray', 'prototype'],
42336 '%TypeErrorPrototype%': ['TypeError', 'prototype'],
42337 '%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],
42338 '%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],
42339 '%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],
42340 '%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],
42341 '%URIErrorPrototype%': ['URIError', 'prototype'],
42342 '%WeakMapPrototype%': ['WeakMap', 'prototype'],
42343 '%WeakSetPrototype%': ['WeakSet', 'prototype']
42344};
42345
42346var bind = require('function-bind');
42347var hasOwn = require('hasown');
42348var $concat = bind.call(Function.call, Array.prototype.concat);
42349var $spliceApply = bind.call(Function.apply, Array.prototype.splice);
42350var $replace = bind.call(Function.call, String.prototype.replace);
42351var $strSlice = bind.call(Function.call, String.prototype.slice);
42352var $exec = bind.call(Function.call, RegExp.prototype.exec);
42353
42354/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */
42355var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
42356var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */
42357var stringToPath = function stringToPath(string) {
42358 var first = $strSlice(string, 0, 1);
42359 var last = $strSlice(string, -1);
42360 if (first === '%' && last !== '%') {
42361 throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`');
42362 } else if (last === '%' && first !== '%') {
42363 throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`');
42364 }
42365 var result = [];
42366 $replace(string, rePropName, function (match, number, quote, subString) {
42367 result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;
42368 });
42369 return result;
42370};
42371/* end adaptation */
42372
42373var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {
42374 var intrinsicName = name;
42375 var alias;
42376 if (hasOwn(LEGACY_ALIASES, intrinsicName)) {
42377 alias = LEGACY_ALIASES[intrinsicName];
42378 intrinsicName = '%' + alias[0] + '%';
42379 }
42380
42381 if (hasOwn(INTRINSICS, intrinsicName)) {
42382 var value = INTRINSICS[intrinsicName];
42383 if (value === needsEval) {
42384 value = doEval(intrinsicName);
42385 }
42386 if (typeof value === 'undefined' && !allowMissing) {
42387 throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');
42388 }
42389
42390 return {
42391 alias: alias,
42392 name: intrinsicName,
42393 value: value
42394 };
42395 }
42396
42397 throw new $SyntaxError('intrinsic ' + name + ' does not exist!');
42398};
42399
42400module.exports = function GetIntrinsic(name, allowMissing) {
42401 if (typeof name !== 'string' || name.length === 0) {
42402 throw new $TypeError('intrinsic name must be a non-empty string');
42403 }
42404 if (arguments.length > 1 && typeof allowMissing !== 'boolean') {
42405 throw new $TypeError('"allowMissing" argument must be a boolean');
42406 }
42407
42408 if ($exec(/^%?[^%]*%?$/, name) === null) {
42409 throw new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');
42410 }
42411 var parts = stringToPath(name);
42412 var intrinsicBaseName = parts.length > 0 ? parts[0] : '';
42413
42414 var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);
42415 var intrinsicRealName = intrinsic.name;
42416 var value = intrinsic.value;
42417 var skipFurtherCaching = false;
42418
42419 var alias = intrinsic.alias;
42420 if (alias) {
42421 intrinsicBaseName = alias[0];
42422 $spliceApply(parts, $concat([0, 1], alias));
42423 }
42424
42425 for (var i = 1, isOwn = true; i < parts.length; i += 1) {
42426 var part = parts[i];
42427 var first = $strSlice(part, 0, 1);
42428 var last = $strSlice(part, -1);
42429 if (
42430 (
42431 (first === '"' || first === "'" || first === '`')
42432 || (last === '"' || last === "'" || last === '`')
42433 )
42434 && first !== last
42435 ) {
42436 throw new $SyntaxError('property names with quotes must have matching quotes');
42437 }
42438 if (part === 'constructor' || !isOwn) {
42439 skipFurtherCaching = true;
42440 }
42441
42442 intrinsicBaseName += '.' + part;
42443 intrinsicRealName = '%' + intrinsicBaseName + '%';
42444
42445 if (hasOwn(INTRINSICS, intrinsicRealName)) {
42446 value = INTRINSICS[intrinsicRealName];
42447 } else if (value != null) {
42448 if (!(part in value)) {
42449 if (!allowMissing) {
42450 throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');
42451 }
42452 return void undefined;
42453 }
42454 if ($gOPD && (i + 1) >= parts.length) {
42455 var desc = $gOPD(value, part);
42456 isOwn = !!desc;
42457
42458 // By convention, when a data property is converted to an accessor
42459 // property to emulate a data property that does not suffer from
42460 // the override mistake, that accessor's getter is marked with
42461 // an `originalValue` property. Here, when we detect this, we
42462 // uphold the illusion by pretending to see that original data
42463 // property, i.e., returning the value rather than the getter
42464 // itself.
42465 if (isOwn && 'get' in desc && !('originalValue' in desc.get)) {
42466 value = desc.get;
42467 } else {
42468 value = value[part];
42469 }
42470 } else {
42471 isOwn = hasOwn(value, part);
42472 value = value[part];
42473 }
42474
42475 if (isOwn && !skipFurtherCaching) {
42476 INTRINSICS[intrinsicRealName] = value;
42477 }
42478 }
42479 }
42480 return value;
42481};
42482
42483},{"es-errors":162,"es-errors/eval":161,"es-errors/range":163,"es-errors/ref":164,"es-errors/syntax":165,"es-errors/type":166,"es-errors/uri":167,"function-bind":175,"has-proto":181,"has-symbols":182,"hasown":185}],178:[function(require,module,exports){
42484'use strict';
42485
42486var GetIntrinsic = require('get-intrinsic');
42487
42488var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);
42489
42490if ($gOPD) {
42491 try {
42492 $gOPD([], 'length');
42493 } catch (e) {
42494 // IE 8 has a broken gOPD
42495 $gOPD = null;
42496 }
42497}
42498
42499module.exports = $gOPD;
42500
42501},{"get-intrinsic":177}],179:[function(require,module,exports){
42502'use strict';
42503
42504var $BigInt = typeof BigInt !== 'undefined' && BigInt;
42505
42506module.exports = function hasNativeBigInts() {
42507 return typeof $BigInt === 'function'
42508 && typeof BigInt === 'function'
42509 && typeof $BigInt(42) === 'bigint' // eslint-disable-line no-magic-numbers
42510 && typeof BigInt(42) === 'bigint'; // eslint-disable-line no-magic-numbers
42511};
42512
42513},{}],180:[function(require,module,exports){
42514'use strict';
42515
42516var $defineProperty = require('es-define-property');
42517
42518var hasPropertyDescriptors = function hasPropertyDescriptors() {
42519 return !!$defineProperty;
42520};
42521
42522hasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {
42523 // node v0.6 has a bug where array lengths can be Set but not Defined
42524 if (!$defineProperty) {
42525 return null;
42526 }
42527 try {
42528 return $defineProperty([], 'length', { value: 1 }).length !== 1;
42529 } catch (e) {
42530 // In Firefox 4-22, defining length on an array throws an exception.
42531 return true;
42532 }
42533};
42534
42535module.exports = hasPropertyDescriptors;
42536
42537},{"es-define-property":160}],181:[function(require,module,exports){
42538'use strict';
42539
42540var test = {
42541 __proto__: null,
42542 foo: {}
42543};
42544
42545var $Object = Object;
42546
42547/** @type {import('.')} */
42548module.exports = function hasProto() {
42549 // @ts-expect-error: TS errors on an inherited property for some reason
42550 return { __proto__: test }.foo === test.foo
42551 && !(test instanceof $Object);
42552};
42553
42554},{}],182:[function(require,module,exports){
42555'use strict';
42556
42557var origSymbol = typeof Symbol !== 'undefined' && Symbol;
42558var hasSymbolSham = require('./shams');
42559
42560module.exports = function hasNativeSymbols() {
42561 if (typeof origSymbol !== 'function') { return false; }
42562 if (typeof Symbol !== 'function') { return false; }
42563 if (typeof origSymbol('foo') !== 'symbol') { return false; }
42564 if (typeof Symbol('bar') !== 'symbol') { return false; }
42565
42566 return hasSymbolSham();
42567};
42568
42569},{"./shams":183}],183:[function(require,module,exports){
42570'use strict';
42571
42572/* eslint complexity: [2, 18], max-statements: [2, 33] */
42573module.exports = function hasSymbols() {
42574 if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }
42575 if (typeof Symbol.iterator === 'symbol') { return true; }
42576
42577 var obj = {};
42578 var sym = Symbol('test');
42579 var symObj = Object(sym);
42580 if (typeof sym === 'string') { return false; }
42581
42582 if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }
42583 if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }
42584
42585 // temp disabled per https://github.com/ljharb/object.assign/issues/17
42586 // if (sym instanceof Symbol) { return false; }
42587 // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4
42588 // if (!(symObj instanceof Symbol)) { return false; }
42589
42590 // if (typeof Symbol.prototype.toString !== 'function') { return false; }
42591 // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }
42592
42593 var symVal = 42;
42594 obj[sym] = symVal;
42595 for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop
42596 if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }
42597
42598 if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }
42599
42600 var syms = Object.getOwnPropertySymbols(obj);
42601 if (syms.length !== 1 || syms[0] !== sym) { return false; }
42602
42603 if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }
42604
42605 if (typeof Object.getOwnPropertyDescriptor === 'function') {
42606 var descriptor = Object.getOwnPropertyDescriptor(obj, sym);
42607 if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }
42608 }
42609
42610 return true;
42611};
42612
42613},{}],184:[function(require,module,exports){
42614'use strict';
42615
42616var hasSymbols = require('has-symbols/shams');
42617
42618/** @type {import('.')} */
42619module.exports = function hasToStringTagShams() {
42620 return hasSymbols() && !!Symbol.toStringTag;
42621};
42622
42623},{"has-symbols/shams":183}],185:[function(require,module,exports){
42624'use strict';
42625
42626var call = Function.prototype.call;
42627var $hasOwn = Object.prototype.hasOwnProperty;
42628var bind = require('function-bind');
42629
42630/** @type {import('.')} */
42631module.exports = bind.call(call, $hasOwn);
42632
42633},{"function-bind":175}],186:[function(require,module,exports){
42634/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
42635exports.read = function (buffer, offset, isLE, mLen, nBytes) {
42636 var e, m
42637 var eLen = (nBytes * 8) - mLen - 1
42638 var eMax = (1 << eLen) - 1
42639 var eBias = eMax >> 1
42640 var nBits = -7
42641 var i = isLE ? (nBytes - 1) : 0
42642 var d = isLE ? -1 : 1
42643 var s = buffer[offset + i]
42644
42645 i += d
42646
42647 e = s & ((1 << (-nBits)) - 1)
42648 s >>= (-nBits)
42649 nBits += eLen
42650 for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
42651
42652 m = e & ((1 << (-nBits)) - 1)
42653 e >>= (-nBits)
42654 nBits += mLen
42655 for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
42656
42657 if (e === 0) {
42658 e = 1 - eBias
42659 } else if (e === eMax) {
42660 return m ? NaN : ((s ? -1 : 1) * Infinity)
42661 } else {
42662 m = m + Math.pow(2, mLen)
42663 e = e - eBias
42664 }
42665 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
42666}
42667
42668exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
42669 var e, m, c
42670 var eLen = (nBytes * 8) - mLen - 1
42671 var eMax = (1 << eLen) - 1
42672 var eBias = eMax >> 1
42673 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
42674 var i = isLE ? 0 : (nBytes - 1)
42675 var d = isLE ? 1 : -1
42676 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
42677
42678 value = Math.abs(value)
42679
42680 if (isNaN(value) || value === Infinity) {
42681 m = isNaN(value) ? 1 : 0
42682 e = eMax
42683 } else {
42684 e = Math.floor(Math.log(value) / Math.LN2)
42685 if (value * (c = Math.pow(2, -e)) < 1) {
42686 e--
42687 c *= 2
42688 }
42689 if (e + eBias >= 1) {
42690 value += rt / c
42691 } else {
42692 value += rt * Math.pow(2, 1 - eBias)
42693 }
42694 if (value * c >= 2) {
42695 e++
42696 c /= 2
42697 }
42698
42699 if (e + eBias >= eMax) {
42700 m = 0
42701 e = eMax
42702 } else if (e + eBias >= 1) {
42703 m = ((value * c) - 1) * Math.pow(2, mLen)
42704 e = e + eBias
42705 } else {
42706 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
42707 e = 0
42708 }
42709 }
42710
42711 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
42712
42713 e = (e << mLen) | m
42714 eLen += mLen
42715 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
42716
42717 buffer[offset + i - d] |= s * 128
42718}
42719
42720},{}],187:[function(require,module,exports){
42721if (typeof Object.create === 'function') {
42722 // implementation from standard node.js 'util' module
42723 module.exports = function inherits(ctor, superCtor) {
42724 if (superCtor) {
42725 ctor.super_ = superCtor
42726 ctor.prototype = Object.create(superCtor.prototype, {
42727 constructor: {
42728 value: ctor,
42729 enumerable: false,
42730 writable: true,
42731 configurable: true
42732 }
42733 })
42734 }
42735 };
42736} else {
42737 // old school shim for old browsers
42738 module.exports = function inherits(ctor, superCtor) {
42739 if (superCtor) {
42740 ctor.super_ = superCtor
42741 var TempCtor = function () {}
42742 TempCtor.prototype = superCtor.prototype
42743 ctor.prototype = new TempCtor()
42744 ctor.prototype.constructor = ctor
42745 }
42746 }
42747}
42748
42749},{}],188:[function(require,module,exports){
42750'use strict';
42751
42752var hasOwn = require('hasown');
42753var channel = require('side-channel')();
42754
42755var $TypeError = require('es-errors/type');
42756
42757var SLOT = {
42758 assert: function (O, slot) {
42759 if (!O || (typeof O !== 'object' && typeof O !== 'function')) {
42760 throw new $TypeError('`O` is not an object');
42761 }
42762 if (typeof slot !== 'string') {
42763 throw new $TypeError('`slot` must be a string');
42764 }
42765 channel.assert(O);
42766 if (!SLOT.has(O, slot)) {
42767 throw new $TypeError('`' + slot + '` is not present on `O`');
42768 }
42769 },
42770 get: function (O, slot) {
42771 if (!O || (typeof O !== 'object' && typeof O !== 'function')) {
42772 throw new $TypeError('`O` is not an object');
42773 }
42774 if (typeof slot !== 'string') {
42775 throw new $TypeError('`slot` must be a string');
42776 }
42777 var slots = channel.get(O);
42778 return slots && slots['$' + slot];
42779 },
42780 has: function (O, slot) {
42781 if (!O || (typeof O !== 'object' && typeof O !== 'function')) {
42782 throw new $TypeError('`O` is not an object');
42783 }
42784 if (typeof slot !== 'string') {
42785 throw new $TypeError('`slot` must be a string');
42786 }
42787 var slots = channel.get(O);
42788 return !!slots && hasOwn(slots, '$' + slot);
42789 },
42790 set: function (O, slot, V) {
42791 if (!O || (typeof O !== 'object' && typeof O !== 'function')) {
42792 throw new $TypeError('`O` is not an object');
42793 }
42794 if (typeof slot !== 'string') {
42795 throw new $TypeError('`slot` must be a string');
42796 }
42797 var slots = channel.get(O);
42798 if (!slots) {
42799 slots = {};
42800 channel.set(O, slots);
42801 }
42802 slots['$' + slot] = V;
42803 }
42804};
42805
42806if (Object.freeze) {
42807 Object.freeze(SLOT);
42808}
42809
42810module.exports = SLOT;
42811
42812},{"es-errors/type":166,"hasown":185,"side-channel":263}],189:[function(require,module,exports){
42813'use strict';
42814
42815var hasToStringTag = require('has-tostringtag/shams')();
42816var callBound = require('call-bind/callBound');
42817
42818var $toString = callBound('Object.prototype.toString');
42819
42820var isStandardArguments = function isArguments(value) {
42821 if (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {
42822 return false;
42823 }
42824 return $toString(value) === '[object Arguments]';
42825};
42826
42827var isLegacyArguments = function isArguments(value) {
42828 if (isStandardArguments(value)) {
42829 return true;
42830 }
42831 return value !== null &&
42832 typeof value === 'object' &&
42833 typeof value.length === 'number' &&
42834 value.length >= 0 &&
42835 $toString(value) !== '[object Array]' &&
42836 $toString(value.callee) === '[object Function]';
42837};
42838
42839var supportsStandardArguments = (function () {
42840 return isStandardArguments(arguments);
42841}());
42842
42843isStandardArguments.isLegacyArguments = isLegacyArguments; // for tests
42844
42845module.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;
42846
42847},{"call-bind/callBound":115,"has-tostringtag/shams":184}],190:[function(require,module,exports){
42848'use strict';
42849
42850var callBind = require('call-bind');
42851var callBound = require('call-bind/callBound');
42852var GetIntrinsic = require('get-intrinsic');
42853
42854var $ArrayBuffer = GetIntrinsic('%ArrayBuffer%', true);
42855/** @type {undefined | ((receiver: ArrayBuffer) => number) | ((receiver: unknown) => never)} */
42856var $byteLength = callBound('ArrayBuffer.prototype.byteLength', true);
42857var $toString = callBound('Object.prototype.toString');
42858
42859// in node 0.10, ArrayBuffers have no prototype methods, but have an own slot-checking `slice` method
42860var abSlice = !!$ArrayBuffer && !$byteLength && new $ArrayBuffer(0).slice;
42861var $abSlice = !!abSlice && callBind(abSlice);
42862
42863/** @type {import('.')} */
42864module.exports = $byteLength || $abSlice
42865 ? function isArrayBuffer(obj) {
42866 if (!obj || typeof obj !== 'object') {
42867 return false;
42868 }
42869 try {
42870 if ($byteLength) {
42871 // @ts-expect-error no idea why TS can't handle the overload
42872 $byteLength(obj);
42873 } else {
42874 // @ts-expect-error TS chooses not to type-narrow inside a closure
42875 $abSlice(obj, 0);
42876 }
42877 return true;
42878 } catch (e) {
42879 return false;
42880 }
42881 }
42882 : $ArrayBuffer
42883 // in node 0.8, ArrayBuffers have no prototype or own methods, but also no Symbol.toStringTag
42884 ? function isArrayBuffer(obj) {
42885 return $toString(obj) === '[object ArrayBuffer]';
42886 }
42887 : function isArrayBuffer(obj) { // eslint-disable-line no-unused-vars
42888 return false;
42889 };
42890
42891},{"call-bind":116,"call-bind/callBound":115,"get-intrinsic":177}],191:[function(require,module,exports){
42892'use strict';
42893
42894var hasBigInts = require('has-bigints')();
42895
42896if (hasBigInts) {
42897 var bigIntValueOf = BigInt.prototype.valueOf;
42898 var tryBigInt = function tryBigIntObject(value) {
42899 try {
42900 bigIntValueOf.call(value);
42901 return true;
42902 } catch (e) {
42903 }
42904 return false;
42905 };
42906
42907 module.exports = function isBigInt(value) {
42908 if (
42909 value === null
42910 || typeof value === 'undefined'
42911 || typeof value === 'boolean'
42912 || typeof value === 'string'
42913 || typeof value === 'number'
42914 || typeof value === 'symbol'
42915 || typeof value === 'function'
42916 ) {
42917 return false;
42918 }
42919 if (typeof value === 'bigint') {
42920 return true;
42921 }
42922
42923 return tryBigInt(value);
42924 };
42925} else {
42926 module.exports = function isBigInt(value) {
42927 return false && value;
42928 };
42929}
42930
42931},{"has-bigints":179}],192:[function(require,module,exports){
42932'use strict';
42933
42934var callBound = require('call-bind/callBound');
42935var $boolToStr = callBound('Boolean.prototype.toString');
42936var $toString = callBound('Object.prototype.toString');
42937
42938var tryBooleanObject = function booleanBrandCheck(value) {
42939 try {
42940 $boolToStr(value);
42941 return true;
42942 } catch (e) {
42943 return false;
42944 }
42945};
42946var boolClass = '[object Boolean]';
42947var hasToStringTag = require('has-tostringtag/shams')();
42948
42949module.exports = function isBoolean(value) {
42950 if (typeof value === 'boolean') {
42951 return true;
42952 }
42953 if (value === null || typeof value !== 'object') {
42954 return false;
42955 }
42956 return hasToStringTag && Symbol.toStringTag in value ? tryBooleanObject(value) : $toString(value) === boolClass;
42957};
42958
42959},{"call-bind/callBound":115,"has-tostringtag/shams":184}],193:[function(require,module,exports){
42960'use strict';
42961
42962var fnToStr = Function.prototype.toString;
42963var reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;
42964var badArrayLike;
42965var isCallableMarker;
42966if (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {
42967 try {
42968 badArrayLike = Object.defineProperty({}, 'length', {
42969 get: function () {
42970 throw isCallableMarker;
42971 }
42972 });
42973 isCallableMarker = {};
42974 // eslint-disable-next-line no-throw-literal
42975 reflectApply(function () { throw 42; }, null, badArrayLike);
42976 } catch (_) {
42977 if (_ !== isCallableMarker) {
42978 reflectApply = null;
42979 }
42980 }
42981} else {
42982 reflectApply = null;
42983}
42984
42985var constructorRegex = /^\s*class\b/;
42986var isES6ClassFn = function isES6ClassFunction(value) {
42987 try {
42988 var fnStr = fnToStr.call(value);
42989 return constructorRegex.test(fnStr);
42990 } catch (e) {
42991 return false; // not a function
42992 }
42993};
42994
42995var tryFunctionObject = function tryFunctionToStr(value) {
42996 try {
42997 if (isES6ClassFn(value)) { return false; }
42998 fnToStr.call(value);
42999 return true;
43000 } catch (e) {
43001 return false;
43002 }
43003};
43004var toStr = Object.prototype.toString;
43005var objectClass = '[object Object]';
43006var fnClass = '[object Function]';
43007var genClass = '[object GeneratorFunction]';
43008var ddaClass = '[object HTMLAllCollection]'; // IE 11
43009var ddaClass2 = '[object HTML document.all class]';
43010var ddaClass3 = '[object HTMLCollection]'; // IE 9-10
43011var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`
43012
43013var isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing
43014
43015var isDDA = function isDocumentDotAll() { return false; };
43016if (typeof document === 'object') {
43017 // Firefox 3 canonicalizes DDA to undefined when it's not accessed directly
43018 var all = document.all;
43019 if (toStr.call(all) === toStr.call(document.all)) {
43020 isDDA = function isDocumentDotAll(value) {
43021 /* globals document: false */
43022 // in IE 6-8, typeof document.all is "object" and it's truthy
43023 if ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) {
43024 try {
43025 var str = toStr.call(value);
43026 return (
43027 str === ddaClass
43028 || str === ddaClass2
43029 || str === ddaClass3 // opera 12.16
43030 || str === objectClass // IE 6-8
43031 ) && value('') == null; // eslint-disable-line eqeqeq
43032 } catch (e) { /**/ }
43033 }
43034 return false;
43035 };
43036 }
43037}
43038
43039module.exports = reflectApply
43040 ? function isCallable(value) {
43041 if (isDDA(value)) { return true; }
43042 if (!value) { return false; }
43043 if (typeof value !== 'function' && typeof value !== 'object') { return false; }
43044 try {
43045 reflectApply(value, null, badArrayLike);
43046 } catch (e) {
43047 if (e !== isCallableMarker) { return false; }
43048 }
43049 return !isES6ClassFn(value) && tryFunctionObject(value);
43050 }
43051 : function isCallable(value) {
43052 if (isDDA(value)) { return true; }
43053 if (!value) { return false; }
43054 if (typeof value !== 'function' && typeof value !== 'object') { return false; }
43055 if (hasToStringTag) { return tryFunctionObject(value); }
43056 if (isES6ClassFn(value)) { return false; }
43057 var strClass = toStr.call(value);
43058 if (strClass !== fnClass && strClass !== genClass && !(/^\[object HTML/).test(strClass)) { return false; }
43059 return tryFunctionObject(value);
43060 };
43061
43062},{}],194:[function(require,module,exports){
43063'use strict';
43064
43065var getDay = Date.prototype.getDay;
43066var tryDateObject = function tryDateGetDayCall(value) {
43067 try {
43068 getDay.call(value);
43069 return true;
43070 } catch (e) {
43071 return false;
43072 }
43073};
43074
43075var toStr = Object.prototype.toString;
43076var dateClass = '[object Date]';
43077var hasToStringTag = require('has-tostringtag/shams')();
43078
43079module.exports = function isDateObject(value) {
43080 if (typeof value !== 'object' || value === null) {
43081 return false;
43082 }
43083 return hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;
43084};
43085
43086},{"has-tostringtag/shams":184}],195:[function(require,module,exports){
43087'use strict';
43088
43089/** @const */
43090var $Map = typeof Map === 'function' && Map.prototype ? Map : null;
43091var $Set = typeof Set === 'function' && Set.prototype ? Set : null;
43092
43093var exported;
43094
43095if (!$Map) {
43096 /** @type {import('.')} */
43097 // eslint-disable-next-line no-unused-vars
43098 exported = function isMap(x) {
43099 // `Map` is not present in this environment.
43100 return false;
43101 };
43102}
43103
43104var $mapHas = $Map ? Map.prototype.has : null;
43105var $setHas = $Set ? Set.prototype.has : null;
43106if (!exported && !$mapHas) {
43107 /** @type {import('.')} */
43108 // eslint-disable-next-line no-unused-vars
43109 exported = function isMap(x) {
43110 // `Map` does not have a `has` method
43111 return false;
43112 };
43113}
43114
43115/** @type {import('.')} */
43116module.exports = exported || function isMap(x) {
43117 if (!x || typeof x !== 'object') {
43118 return false;
43119 }
43120 try {
43121 $mapHas.call(x);
43122 if ($setHas) {
43123 try {
43124 $setHas.call(x);
43125 } catch (e) {
43126 return true;
43127 }
43128 }
43129 // @ts-expect-error TS can't figure out that $Map is always truthy here
43130 return x instanceof $Map; // core-js workaround, pre-v2.5.0
43131 } catch (e) {}
43132 return false;
43133};
43134
43135},{}],196:[function(require,module,exports){
43136'use strict';
43137
43138var numToStr = Number.prototype.toString;
43139var tryNumberObject = function tryNumberObject(value) {
43140 try {
43141 numToStr.call(value);
43142 return true;
43143 } catch (e) {
43144 return false;
43145 }
43146};
43147var toStr = Object.prototype.toString;
43148var numClass = '[object Number]';
43149var hasToStringTag = require('has-tostringtag/shams')();
43150
43151module.exports = function isNumberObject(value) {
43152 if (typeof value === 'number') {
43153 return true;
43154 }
43155 if (typeof value !== 'object') {
43156 return false;
43157 }
43158 return hasToStringTag ? tryNumberObject(value) : toStr.call(value) === numClass;
43159};
43160
43161},{"has-tostringtag/shams":184}],197:[function(require,module,exports){
43162'use strict';
43163
43164var callBound = require('call-bind/callBound');
43165var hasToStringTag = require('has-tostringtag/shams')();
43166var has;
43167var $exec;
43168var isRegexMarker;
43169var badStringifier;
43170
43171if (hasToStringTag) {
43172 has = callBound('Object.prototype.hasOwnProperty');
43173 $exec = callBound('RegExp.prototype.exec');
43174 isRegexMarker = {};
43175
43176 var throwRegexMarker = function () {
43177 throw isRegexMarker;
43178 };
43179 badStringifier = {
43180 toString: throwRegexMarker,
43181 valueOf: throwRegexMarker
43182 };
43183
43184 if (typeof Symbol.toPrimitive === 'symbol') {
43185 badStringifier[Symbol.toPrimitive] = throwRegexMarker;
43186 }
43187}
43188
43189var $toString = callBound('Object.prototype.toString');
43190var gOPD = Object.getOwnPropertyDescriptor;
43191var regexClass = '[object RegExp]';
43192
43193module.exports = hasToStringTag
43194 // eslint-disable-next-line consistent-return
43195 ? function isRegex(value) {
43196 if (!value || typeof value !== 'object') {
43197 return false;
43198 }
43199
43200 var descriptor = gOPD(value, 'lastIndex');
43201 var hasLastIndexDataProperty = descriptor && has(descriptor, 'value');
43202 if (!hasLastIndexDataProperty) {
43203 return false;
43204 }
43205
43206 try {
43207 $exec(value, badStringifier);
43208 } catch (e) {
43209 return e === isRegexMarker;
43210 }
43211 }
43212 : function isRegex(value) {
43213 // In older browsers, typeof regex incorrectly returns 'function'
43214 if (!value || (typeof value !== 'object' && typeof value !== 'function')) {
43215 return false;
43216 }
43217
43218 return $toString(value) === regexClass;
43219 };
43220
43221},{"call-bind/callBound":115,"has-tostringtag/shams":184}],198:[function(require,module,exports){
43222'use strict';
43223
43224var $Map = typeof Map === 'function' && Map.prototype ? Map : null;
43225var $Set = typeof Set === 'function' && Set.prototype ? Set : null;
43226
43227var exported;
43228
43229if (!$Set) {
43230 /** @type {import('.')} */
43231 // eslint-disable-next-line no-unused-vars
43232 exported = function isSet(x) {
43233 // `Set` is not present in this environment.
43234 return false;
43235 };
43236}
43237
43238var $mapHas = $Map ? Map.prototype.has : null;
43239var $setHas = $Set ? Set.prototype.has : null;
43240if (!exported && !$setHas) {
43241 /** @type {import('.')} */
43242 // eslint-disable-next-line no-unused-vars
43243 exported = function isSet(x) {
43244 // `Set` does not have a `has` method
43245 return false;
43246 };
43247}
43248
43249/** @type {import('.')} */
43250module.exports = exported || function isSet(x) {
43251 if (!x || typeof x !== 'object') {
43252 return false;
43253 }
43254 try {
43255 $setHas.call(x);
43256 if ($mapHas) {
43257 try {
43258 $mapHas.call(x);
43259 } catch (e) {
43260 return true;
43261 }
43262 }
43263 // @ts-expect-error TS can't figure out that $Set is always truthy here
43264 return x instanceof $Set; // core-js workaround, pre-v2.5.0
43265 } catch (e) {}
43266 return false;
43267};
43268
43269},{}],199:[function(require,module,exports){
43270'use strict';
43271
43272var callBound = require('call-bind/callBound');
43273
43274var $byteLength = callBound('SharedArrayBuffer.prototype.byteLength', true);
43275
43276/** @type {import('.')} */
43277module.exports = $byteLength
43278 ? function isSharedArrayBuffer(obj) {
43279 if (!obj || typeof obj !== 'object') {
43280 return false;
43281 }
43282 try {
43283 $byteLength(obj);
43284 return true;
43285 } catch (e) {
43286 return false;
43287 }
43288 }
43289 : function isSharedArrayBuffer(obj) { // eslint-disable-line no-unused-vars
43290 return false;
43291 };
43292
43293},{"call-bind/callBound":115}],200:[function(require,module,exports){
43294'use strict';
43295
43296var strValue = String.prototype.valueOf;
43297var tryStringObject = function tryStringObject(value) {
43298 try {
43299 strValue.call(value);
43300 return true;
43301 } catch (e) {
43302 return false;
43303 }
43304};
43305var toStr = Object.prototype.toString;
43306var strClass = '[object String]';
43307var hasToStringTag = require('has-tostringtag/shams')();
43308
43309module.exports = function isString(value) {
43310 if (typeof value === 'string') {
43311 return true;
43312 }
43313 if (typeof value !== 'object') {
43314 return false;
43315 }
43316 return hasToStringTag ? tryStringObject(value) : toStr.call(value) === strClass;
43317};
43318
43319},{"has-tostringtag/shams":184}],201:[function(require,module,exports){
43320'use strict';
43321
43322var toStr = Object.prototype.toString;
43323var hasSymbols = require('has-symbols')();
43324
43325if (hasSymbols) {
43326 var symToStr = Symbol.prototype.toString;
43327 var symStringRegex = /^Symbol\(.*\)$/;
43328 var isSymbolObject = function isRealSymbolObject(value) {
43329 if (typeof value.valueOf() !== 'symbol') {
43330 return false;
43331 }
43332 return symStringRegex.test(symToStr.call(value));
43333 };
43334
43335 module.exports = function isSymbol(value) {
43336 if (typeof value === 'symbol') {
43337 return true;
43338 }
43339 if (toStr.call(value) !== '[object Symbol]') {
43340 return false;
43341 }
43342 try {
43343 return isSymbolObject(value);
43344 } catch (e) {
43345 return false;
43346 }
43347 };
43348} else {
43349
43350 module.exports = function isSymbol(value) {
43351 // this environment does not support Symbols.
43352 return false && value;
43353 };
43354}
43355
43356},{"has-symbols":182}],202:[function(require,module,exports){
43357'use strict';
43358
43359var $WeakMap = typeof WeakMap === 'function' && WeakMap.prototype ? WeakMap : null;
43360var $WeakSet = typeof WeakSet === 'function' && WeakSet.prototype ? WeakSet : null;
43361
43362var exported;
43363
43364if (!$WeakMap) {
43365 /** @type {import('.')} */
43366 // eslint-disable-next-line no-unused-vars
43367 exported = function isWeakMap(x) {
43368 // `WeakMap` is not present in this environment.
43369 return false;
43370 };
43371}
43372
43373var $mapHas = $WeakMap ? $WeakMap.prototype.has : null;
43374var $setHas = $WeakSet ? $WeakSet.prototype.has : null;
43375if (!exported && !$mapHas) {
43376 /** @type {import('.')} */
43377 // eslint-disable-next-line no-unused-vars
43378 exported = function isWeakMap(x) {
43379 // `WeakMap` does not have a `has` method
43380 return false;
43381 };
43382}
43383
43384/** @type {import('.')} */
43385module.exports = exported || function isWeakMap(x) {
43386 if (!x || typeof x !== 'object') {
43387 return false;
43388 }
43389 try {
43390 $mapHas.call(x, $mapHas);
43391 if ($setHas) {
43392 try {
43393 $setHas.call(x, $setHas);
43394 } catch (e) {
43395 return true;
43396 }
43397 }
43398 // @ts-expect-error TS can't figure out that $WeakMap is always truthy here
43399 return x instanceof $WeakMap; // core-js workaround, pre-v3
43400 } catch (e) {}
43401 return false;
43402};
43403
43404},{}],203:[function(require,module,exports){
43405'use strict';
43406
43407var GetIntrinsic = require('get-intrinsic');
43408var callBound = require('call-bind/callBound');
43409
43410var $WeakSet = GetIntrinsic('%WeakSet%', true);
43411
43412var $setHas = callBound('WeakSet.prototype.has', true);
43413
43414if ($setHas) {
43415 var $mapHas = callBound('WeakMap.prototype.has', true);
43416
43417 /** @type {import('.')} */
43418 module.exports = function isWeakSet(x) {
43419 if (!x || typeof x !== 'object') {
43420 return false;
43421 }
43422 try {
43423 $setHas(x, $setHas);
43424 if ($mapHas) {
43425 try {
43426 $mapHas(x, $mapHas);
43427 } catch (e) {
43428 return true;
43429 }
43430 }
43431 // @ts-expect-error TS can't figure out that $WeakSet is always truthy here
43432 return x instanceof $WeakSet; // core-js workaround, pre-v3
43433 } catch (e) {}
43434 return false;
43435 };
43436} else {
43437 /** @type {import('.')} */
43438 // eslint-disable-next-line no-unused-vars
43439 module.exports = function isWeakSet(x) {
43440 // `WeakSet` does not exist, or does not have a `has` method
43441 return false;
43442 };
43443}
43444
43445},{"call-bind/callBound":115,"get-intrinsic":177}],204:[function(require,module,exports){
43446arguments[4][156][0].apply(exports,arguments)
43447},{"dup":156}],205:[function(require,module,exports){
43448'use strict';
43449
43450var _fs = require('fs');
43451
43452var _fs2 = _interopRequireDefault(_fs);
43453
43454function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
43455
43456var tags = require('./tags.json');
43457
43458/*
43459 unsignedByte,
43460 asciiStrings,
43461 unsignedShort,
43462 unsignedLong,
43463 unsignedRational,
43464 signedByte,
43465 undefined,
43466 signedShort,
43467 signedLong,
43468 signedRational,
43469 singleFloat,
43470 doubleFloat
43471 */
43472var bytes = [0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8];
43473var SOIMarkerLength = 2;
43474var JPEGSOIMarker = 0xffd8;
43475var TIFFINTEL = 0x4949;
43476var TIFFMOTOROLA = 0x4d4d;
43477var APPMarkerLength = 2;
43478var APPMarkerBegin = 0xffe0;
43479var APPMarkerEnd = 0xffef;
43480var data = void 0;
43481/**
43482 * @param buffer {Buffer}
43483 * @returns {Boolean}
43484 * @example
43485 * var content = fs.readFileSync("~/Picture/IMG_0911.JPG");
43486 * var isImage = isValid(content);
43487 * console.log(isImage);
43488 */
43489var isValid = function isValid(buffer) {
43490 try {
43491 var SOIMarker = buffer.readUInt16BE(0);
43492 return SOIMarker === JPEGSOIMarker;
43493 } catch (e) {
43494 throw new Error('Unsupport file format.');
43495 }
43496};
43497/**
43498 * @param buffer {Buffer}
43499 * @returns {Boolean}
43500 * @example
43501 */
43502var isTiff = function isTiff(buffer) {
43503 try {
43504 var SOIMarker = buffer.readUInt16BE(0);
43505 return SOIMarker === TIFFINTEL || SOIMarker === TIFFMOTOROLA;
43506 } catch (e) {
43507 throw new Error('Unsupport file format.');
43508 }
43509};
43510/**
43511 * @param buffer {Buffer}
43512 * @returns {Number}
43513 * @example
43514 * var content = fs.readFileSync("~/Picture/IMG_0911.JPG");
43515 * var APPNumber = checkAPPn(content);
43516 * console.log(APPNumber);
43517 */
43518var checkAPPn = function checkAPPn(buffer) {
43519 try {
43520 var APPMarkerTag = buffer.readUInt16BE(0);
43521 var isInRange = APPMarkerTag >= APPMarkerBegin && APPMarkerTag <= APPMarkerEnd;
43522 return isInRange ? APPMarkerTag - APPMarkerBegin : false;
43523 } catch (e) {
43524 throw new Error('Invalid APP Tag.');
43525 }
43526};
43527/**
43528 * @param buffer {Buffer}
43529 * @param tagCollection {Object}
43530 * @param order {Boolean}
43531 * @param offset {Number}
43532 * @returns {Object}
43533 * @example
43534 * var content = fs.readFileSync("~/Picture/IMG_0911.JPG");
43535 * var exifFragments = IFDHandler(content, 0, true, 8);
43536 * console.log(exifFragments.value);
43537 */
43538var IFDHandler = function IFDHandler(buffer, tagCollection, order, offset) {
43539 var entriesNumber = order ? buffer.readUInt16BE(0) : buffer.readUInt16LE(0);
43540
43541 if (entriesNumber === 0) {
43542 return {};
43543 }
43544
43545 var entriesNumberLength = 2;
43546 var entries = buffer.slice(entriesNumberLength);
43547 var entryLength = 12;
43548 // let nextIFDPointerBegin = entriesNumberLength + entryLength * entriesNumber;
43549 // let bigNextIFDPointer= buffer.readUInt32BE(nextIFDPointerBegin) ;
43550 // let littleNextIFDPointer= buffer.readUInt32LE(nextIFDPointerBegin);
43551 // let nextIFDPointer = order ?bigNextIFDPointer:littleNextIFDPointer;
43552 var exif = {};
43553 var entryCount = 0;
43554
43555 for (entryCount; entryCount < entriesNumber; entryCount += 1) {
43556 var entryBegin = entryCount * entryLength;
43557 var entry = entries.slice(entryBegin, entryBegin + entryLength);
43558 var tagBegin = 0;
43559 var tagLength = 2;
43560 var dataFormatBegin = tagBegin + tagLength;
43561 var dataFormatLength = 2;
43562 var componentsBegin = dataFormatBegin + dataFormatLength;
43563 var componentsNumberLength = 4;
43564 var dataValueBegin = componentsBegin + componentsNumberLength;
43565 var dataValueLength = 4;
43566 var tagAddress = entry.slice(tagBegin, dataFormatBegin);
43567 var tagNumber = order ? tagAddress.toString('hex') : tagAddress.reverse().toString('hex');
43568 var tagName = tagCollection[tagNumber];
43569 var bigDataFormat = entry.readUInt16BE(dataFormatBegin);
43570 var littleDataFormat = entry.readUInt16LE(dataFormatBegin);
43571 var dataFormat = order ? bigDataFormat : littleDataFormat;
43572 var componentsByte = bytes[dataFormat];
43573 var bigComponentsNumber = entry.readUInt32BE(componentsBegin);
43574 var littleComponentNumber = entry.readUInt32LE(componentsBegin);
43575 var componentsNumber = order ? bigComponentsNumber : littleComponentNumber;
43576 var dataLength = componentsNumber * componentsByte;
43577 var dataValue = entry.slice(dataValueBegin, dataValueBegin + dataValueLength);
43578
43579 if (dataLength > 4) {
43580 var dataOffset = (order ? dataValue.readUInt32BE(0) : dataValue.readUInt32LE(0)) - offset;
43581 dataValue = buffer.slice(dataOffset, dataOffset + dataLength);
43582 }
43583
43584 var tagValue = void 0;
43585
43586 if (tagName) {
43587 switch (dataFormat) {
43588 case 1:
43589 tagValue = dataValue.readUInt8(0);
43590 break;
43591 case 2:
43592 tagValue = dataValue.toString('ascii').replace(/\0+$/, '');
43593 break;
43594 case 3:
43595 tagValue = order ? dataValue.readUInt16BE(0) : dataValue.readUInt16LE(0);
43596 break;
43597 case 4:
43598 tagValue = order ? dataValue.readUInt32BE(0) : dataValue.readUInt32LE(0);
43599 break;
43600 case 5:
43601 tagValue = [];
43602
43603 for (var i = 0; i < dataValue.length; i += 8) {
43604 var bigTagValue = dataValue.readUInt32BE(i) / dataValue.readUInt32BE(i + 4);
43605 var littleTagValue = dataValue.readUInt32LE(i) / dataValue.readUInt32LE(i + 4);
43606 tagValue.push(order ? bigTagValue : littleTagValue);
43607 }
43608
43609 break;
43610 case 7:
43611 switch (tagName) {
43612 case 'ExifVersion':
43613 tagValue = dataValue.toString();
43614 break;
43615 case 'FlashPixVersion':
43616 tagValue = dataValue.toString();
43617 break;
43618 case 'SceneType':
43619 tagValue = dataValue.readUInt8(0);
43620 break;
43621 default:
43622 tagValue = '0x' + dataValue.toString('hex', 0, 15);
43623 break;
43624 }
43625 break;
43626 case 10:
43627 {
43628 var bigOrder = dataValue.readInt32BE(0) / dataValue.readInt32BE(4);
43629 var littleOrder = dataValue.readInt32LE(0) / dataValue.readInt32LE(4);
43630 tagValue = order ? bigOrder : littleOrder;
43631 break;
43632 }
43633 default:
43634 tagValue = '0x' + dataValue.toString('hex');
43635 break;
43636 }
43637 exif[tagName] = tagValue;
43638 }
43639 /*
43640 else {
43641 console.log(`Unkown Tag [0x${tagNumber}].`);
43642 }
43643 */
43644 }
43645 return exif;
43646};
43647
43648/**
43649 * @param buf {Buffer}
43650 * @returns {Undefined}
43651 * @example
43652 * var content = fs.readFileSync("~/Picture/IMG_0911.JPG");
43653 * var exifFragments = EXIFHandler(content);
43654 */
43655var EXIFHandler = function EXIFHandler(buf) {
43656 var pad = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
43657
43658 var buffer = buf;
43659
43660 if (pad) {
43661 buffer = buf.slice(APPMarkerLength);
43662 var length = buffer.readUInt16BE(0);
43663 buffer = buffer.slice(0, length);
43664 var lengthLength = 2;
43665 buffer = buffer.slice(lengthLength);
43666 var identifierLength = 5;
43667 buffer = buffer.slice(identifierLength);
43668 var padLength = 1;
43669 buffer = buffer.slice(padLength);
43670 }
43671
43672 var byteOrderLength = 2;
43673 var byteOrder = buffer.toString('ascii', 0, byteOrderLength) === 'MM';
43674 var fortyTwoLength = 2;
43675 var fortyTwoEnd = byteOrderLength + fortyTwoLength;
43676 var big42 = buffer.readUInt32BE(fortyTwoEnd);
43677 var little42 = buffer.readUInt32LE(fortyTwoEnd);
43678 var offsetOfIFD = byteOrder ? big42 : little42;
43679
43680 buffer = buffer.slice(offsetOfIFD);
43681
43682 if (buffer.length > 0) {
43683 data = IFDHandler(buffer, tags.ifd, byteOrder, offsetOfIFD);
43684
43685 if (data.ExifIFDPointer) {
43686 buffer = buffer.slice(data.ExifIFDPointer - offsetOfIFD);
43687 data.SubExif = IFDHandler(buffer, tags.ifd, byteOrder, data.ExifIFDPointer);
43688 }
43689
43690 if (data.GPSInfoIFDPointer) {
43691 var gps = data.GPSInfoIFDPointer;
43692 buffer = buffer.slice(data.ExifIFDPointer ? gps - data.ExifIFDPointer : gps - offsetOfIFD);
43693 data.GPSInfo = IFDHandler(buffer, tags.gps, byteOrder, gps);
43694 }
43695 }
43696};
43697
43698/**
43699 * @param buffer {Buffer}
43700 * @returns {Undefined}
43701 * @example
43702 * var content = fs.readFileSync("~/Picture/IMG_0911.JPG");
43703 * var exifFragments = APPnHandler(content);
43704 */
43705var APPnHandler = function APPnHandler(buffer) {
43706 var APPMarkerTag = checkAPPn(buffer);
43707
43708 if (APPMarkerTag !== false) {
43709 // APP0 is 0, and 0==false
43710 var length = buffer.readUInt16BE(APPMarkerLength);
43711
43712 switch (APPMarkerTag) {
43713 case 1:
43714 // EXIF
43715 EXIFHandler(buffer);
43716 break;
43717 default:
43718 APPnHandler(buffer.slice(APPMarkerLength + length));
43719 break;
43720 }
43721 }
43722};
43723
43724/**
43725 * @param buffer {Buffer}
43726 * @returns {Object}
43727 * @example
43728 */
43729var fromBuffer = function fromBuffer(buffer) {
43730 if (!buffer) {
43731 throw new Error('buffer not found');
43732 }
43733
43734 data = undefined;
43735
43736 if (isValid(buffer)) {
43737 buffer = buffer.slice(SOIMarkerLength);
43738 data = {};
43739 APPnHandler(buffer);
43740 } else if (isTiff(buffer)) {
43741 data = {};
43742 EXIFHandler(buffer, false);
43743 }
43744
43745 return data;
43746};
43747
43748/**
43749 * @param file {String}
43750 * @returns {Object}
43751 * @example
43752 * var exif = sync("~/Picture/IMG_1981.JPG");
43753 * console.log(exif.createTime);
43754 */
43755var sync = function sync(file) {
43756 if (!file) {
43757 throw new Error('File not found');
43758 }
43759
43760 var buffer = _fs2.default.readFileSync(file);
43761
43762 return fromBuffer(buffer);
43763};
43764
43765/**
43766 * @param file {String}
43767 * @param callback {Function}
43768 * @example
43769 * async("~/Picture/IMG_0707.JPG", (err, data) => {
43770 * if(err) {
43771 * console.log(err);
43772 * }
43773 * if(data) {
43774 * console.log(data.ExifOffset.createTime);
43775 * }
43776 * }
43777 */
43778var async = function async(file, callback) {
43779 data = undefined;
43780
43781 new Promise(function (resolve, reject) {
43782 if (!file) {
43783 reject(new Error('❓File not found.'));
43784 }
43785
43786 _fs2.default.readFile(file, function (err, buffer) {
43787 if (err) {
43788 reject(err);
43789 } else {
43790 try {
43791 if (isValid(buffer)) {
43792 var buf = buffer.slice(SOIMarkerLength);
43793
43794 data = {};
43795
43796 APPnHandler(buf);
43797 resolve(data);
43798 } else if (isTiff(buffer)) {
43799 data = {};
43800
43801 EXIFHandler(buffer, false);
43802 resolve(data);
43803 } else {
43804 reject(new Error('😱Unsupport file type.'));
43805 }
43806 } catch (e) {
43807 reject(e);
43808 }
43809 }
43810 });
43811 }, function (error) {
43812 callback(error, undefined);
43813 }).then(function (d) {
43814 callback(undefined, d);
43815 }).catch(function (error) {
43816 callback(error, undefined);
43817 });
43818};
43819
43820exports.fromBuffer = fromBuffer;
43821exports.parse = async;
43822exports.parseSync = sync;
43823
43824},{"./tags.json":206,"fs":113}],206:[function(require,module,exports){
43825module.exports={
43826 "ifd": {
43827 "010e": "ImageDescription",
43828 "010f": "Make",
43829 "011a": "XResolution",
43830 "011b": "YResolution",
43831 "011c": "PlanarConfiguration",
43832 "012d": "TransferFunction",
43833 "013b": "Artist",
43834 "013e": "WhitePoint",
43835 "013f": "PrimaryChromaticities",
43836 "0100": "ImageWidth",
43837 "0101": "ImageHeight",
43838 "0102": "BitsPerSample",
43839 "0103": "Compression",
43840 "0106": "PhotometricInterpretation",
43841 "0110": "Model",
43842 "0111": "StripOffsets",
43843 "0112": "Orientation",
43844 "0115": "SamplesPerPixel",
43845 "0116": "RowsPerStrip",
43846 "0117": "StripByteCounts",
43847 "0128": "ResolutionUnit",
43848 "0131": "Software",
43849 "0132": "DateTime",
43850 "0201": "JPEGInterchangeFormat",
43851 "0202": "JPEGInterchangeFormatLength",
43852 "0211": "YCbCrCoefficients",
43853 "0212": "YCbCrSubSampling",
43854 "0213": "YCbCrPositioning",
43855 "0214": "ReferenceBlackWhite",
43856 "829a": "ExposureTime",
43857 "829d": "FNumber",
43858 "920a": "FocalLength",
43859 "927c": "MakerNote",
43860 "8298": "Copyright",
43861 "8769": "ExifIFDPointer",
43862 "8822": "ExposureProgram",
43863 "8824": "SpectralSensitivity",
43864 "8825": "GPSInfoIFDPointer",
43865 "8827": "PhotographicSensitivity",
43866 "8828": "OECF",
43867 "8830": "SensitivityType",
43868 "8831": "StandardOutputSensitivity",
43869 "8832": "RecommendedExposureIndex",
43870 "8833": "ISOSpeed",
43871 "8834": "ISOSpeedLatitudeyyy",
43872 "8835": "ISOSpeedLatitudezzz",
43873 "9000": "ExifVersion",
43874 "9003": "DateTimeOriginal",
43875 "9004": "DateTimeDigitized",
43876 "9101": "ComponentsConfiguration",
43877 "9102": "CompressedBitsPerPixel",
43878 "9201": "ShutterSpeedValue",
43879 "9202": "ApertureValue",
43880 "9203": "BrightnessValue",
43881 "9204": "ExposureBiasValue",
43882 "9205": "MaxApertureValue",
43883 "9206": "SubjectDistance",
43884 "9207": "MeteringMode",
43885 "9208": "LightSource",
43886 "9209": "Flash",
43887 "9214": "SubjectArea",
43888 "9286": "UserComment",
43889 "9290": "SubSecTime",
43890 "9291": "SubSecTimeOriginal",
43891 "9292": "SubSecTimeDigitized",
43892 "a000": "FlashpixVersion",
43893 "a001": "ColorSpace",
43894 "a002": "PixelXDimension",
43895 "a003": "PixelYDimension",
43896 "a004": "RelatedSoundFile",
43897 "a005": "InteroperabilityIFDPointer",
43898 "a20b": "FlashEnergy",
43899 "a20c": "SpatialFrequencyResponse",
43900 "a20e": "FocalPlaneXResolution",
43901 "a20f": "FocalPlaneYResolution",
43902 "a40a": "Sharpness",
43903 "a40b": "DeviceSettingDescription",
43904 "a40c": "SubjectDistanceRange",
43905 "a210": "FocalPlaneResolutionUnit",
43906 "a214": "SubjectLocation",
43907 "a215": "ExposureIndex",
43908 "a217": "SensingMethod",
43909 "a300": "FileSource",
43910 "a301": "SceneType",
43911 "a302": "CFAPattern",
43912 "a401": "CustomRendered",
43913 "a402": "ExposureMode",
43914 "a403": "WhiteBalance",
43915 "a404": "DigitalZoomRatio",
43916 "a405": "FocalLengthIn35mmFilm",
43917 "a406": "SceneCaptureType",
43918 "a407": "GainControl",
43919 "a408": "Contrast",
43920 "a409": "Saturation",
43921 "a420": "ImageUniqueID",
43922 "a430": "CameraOwnerName",
43923 "a431": "BodySerialNumber",
43924 "a432": "LensSpecification",
43925 "a433": "LensMake",
43926 "a434": "LensModel",
43927 "a435": "LensSerialNumber",
43928 "a500": "Gamma"
43929 },
43930 "gps": {
43931 "0000": "GPSVersionID",
43932 "0001": "GPSLatitudeRef",
43933 "0002": "GPSLatitude",
43934 "0003": "GPSLongitudeRef",
43935 "0004": "GPSLongitude",
43936 "0005": "GPSAltitudeRef",
43937 "0006": "GPSAltitude",
43938 "0007": "GPSTimeStamp",
43939 "0008": "GPSSatellites",
43940 "0009": "GPSStatus",
43941 "000a": "GPSMeasureMode",
43942 "000b": "GPSDOP",
43943 "000c": "GPSSpeedRef",
43944 "000d": "GPSSpeed",
43945 "000e": "GPSTrackRef",
43946 "000f": "GPSTrack",
43947 "0010": "GPSImgDirectionRef",
43948 "0011": "GPSImgDirection",
43949 "0012": "GPSMapDatum",
43950 "0013": "GPSDestLatitudeRef",
43951 "0014": "GPSDestLatitude",
43952 "0015": "GPSDestLongitudeRef",
43953 "0016": "GPSDestLongitude",
43954 "0017": "GPSDestBearingRef",
43955 "0018": "GPSDestBearing",
43956 "0019": "GPSDestDistanceRef",
43957 "001a": "GPSDestDistance",
43958 "001b": "GPSProcessingMethod",
43959 "001c": "GPSAreaInformation",
43960 "001d": "GPSDateStamp",
43961 "001e": "GPSDifferential",
43962 "001f": "GPSHPositioningError"
43963 }
43964}
43965},{}],207:[function(require,module,exports){
43966var $kQ2hT$unicodetrie = require("unicode-trie");
43967var $kQ2hT$base64js = require("base64-js");
43968
43969function $parcel$interopDefault(a) {
43970 return a && a.__esModule ? a.default : a;
43971}
43972
43973"use strict";
43974
43975
43976
43977const $60ff486a304db230$export$af862512e23cb54 = 0; // Opening punctuation
43978const $60ff486a304db230$export$9bf3043cb7503aa1 = 1; // Closing punctuation
43979const $60ff486a304db230$export$6d0b2a5dd774590a = 2; // Closing parenthesis
43980const $60ff486a304db230$export$bf0b2277bd569ea1 = 3; // Ambiguous quotation
43981const $60ff486a304db230$export$bad2a840ccda93b6 = 4; // Glue
43982const $60ff486a304db230$export$fb4028874a74450 = 5; // Non-starters
43983const $60ff486a304db230$export$463bd1ce0149c55e = 6; // Exclamation/Interrogation
43984const $60ff486a304db230$export$2e8caadc521d7cbb = 7; // Symbols allowing break after
43985const $60ff486a304db230$export$bfe27467c1de9413 = 8; // Infix separator
43986const $60ff486a304db230$export$af5f8d68aad3cd3a = 9; // Prefix
43987const $60ff486a304db230$export$6b7e017d6825d38f = 10; // Postfix
43988const $60ff486a304db230$export$8227ca023eb0daaa = 11; // Numeric
43989const $60ff486a304db230$export$1bb1140fe1358b00 = 12; // Alphabetic
43990const $60ff486a304db230$export$f3e416a182673355 = 13; // Hebrew Letter
43991const $60ff486a304db230$export$8be180ec26319f9f = 14; // Ideographic
43992const $60ff486a304db230$export$70824c8942178d60 = 15; // Inseparable characters
43993const $60ff486a304db230$export$24aa617c849a894a = 16; // Hyphen
43994const $60ff486a304db230$export$a73c4d14459b698d = 17; // Break after
43995const $60ff486a304db230$export$921068d8846a1559 = 18; // Break before
43996const $60ff486a304db230$export$8b85a4f193482778 = 19; // Break on either side (but not pair)
43997const $60ff486a304db230$export$b2fd9c01d360241f = 20; // Zero-width space
43998const $60ff486a304db230$export$dcd191669c0a595f = 21; // Combining marks
43999const $60ff486a304db230$export$9e5d732f3676a9ba = 22; // Word joiner
44000const $60ff486a304db230$export$cb94397127ac9363 = 23; // Hangul LV
44001const $60ff486a304db230$export$746be9e3a3dfff1f = 24; // Hangul LVT
44002const $60ff486a304db230$export$96e3e682276c47cf = 25; // Hangul L Jamo
44003const $60ff486a304db230$export$fc2ff69ee2cb01bf = 26; // Hangul V Jamo
44004const $60ff486a304db230$export$8999624a7bae9d04 = 27; // Hangul T Jamo
44005const $60ff486a304db230$export$1dff41d5c0caca01 = 28; // Regional Indicator
44006const $60ff486a304db230$export$ddb7a6c76d9d93eb = 29; // Emoji Base
44007const $60ff486a304db230$export$7e93eb3105e4786d = 30; // Emoji Modifier
44008const $60ff486a304db230$export$30a74a373318dec6 = 31; // Zero Width Joiner
44009const $60ff486a304db230$export$54caeea5e6dab1f = 32; // Contingent break
44010const $60ff486a304db230$export$d710c5f50fc7496a = 33; // Ambiguous (Alphabetic or Ideograph)
44011const $60ff486a304db230$export$66498d28055820a9 = 34; // Break (mandatory)
44012const $60ff486a304db230$export$eb6c6d0b7c8826f2 = 35; // Conditional Japanese Starter
44013const $60ff486a304db230$export$de92be486109a1df = 36; // Carriage return
44014const $60ff486a304db230$export$606cfc2a8896c91f = 37; // Line feed
44015const $60ff486a304db230$export$e51d3c675bb0140d = 38; // Next line
44016const $60ff486a304db230$export$da51c6332ad11d7b = 39; // South-East Asian
44017const $60ff486a304db230$export$bea437c40441867d = 40; // Surrogates
44018const $60ff486a304db230$export$c4c7eecbfed13dc9 = 41; // Space
44019const $60ff486a304db230$export$98e1f8a379849661 = 42; // Unknown
44020
44021
44022const $1b6fba3281342923$export$98f50d781a474745 = 0; // Direct break opportunity
44023const $1b6fba3281342923$export$12ee1f8f5315ca7e = 1; // Indirect break opportunity
44024const $1b6fba3281342923$export$e4965ce242860454 = 2; // Indirect break opportunity for combining marks
44025const $1b6fba3281342923$export$8f14048969dcd45e = 3; // Prohibited break for combining marks
44026const $1b6fba3281342923$export$133eb141bf58aff4 = 4; // Prohibited break
44027const $1b6fba3281342923$export$5bdb8ccbf5c57afc = [
44028 //OP , CL , CP , QU , GL , NS , EX , SY , IS , PR , PO , NU , AL , HL , ID , IN , HY , BA , BB , B2 , ZW , CM , WJ , H2 , H3 , JL , JV , JT , RI , EB , EM , ZWJ , CB
44029 [
44030 $1b6fba3281342923$export$133eb141bf58aff4,
44031 $1b6fba3281342923$export$133eb141bf58aff4,
44032 $1b6fba3281342923$export$133eb141bf58aff4,
44033 $1b6fba3281342923$export$133eb141bf58aff4,
44034 $1b6fba3281342923$export$133eb141bf58aff4,
44035 $1b6fba3281342923$export$133eb141bf58aff4,
44036 $1b6fba3281342923$export$133eb141bf58aff4,
44037 $1b6fba3281342923$export$133eb141bf58aff4,
44038 $1b6fba3281342923$export$133eb141bf58aff4,
44039 $1b6fba3281342923$export$133eb141bf58aff4,
44040 $1b6fba3281342923$export$133eb141bf58aff4,
44041 $1b6fba3281342923$export$133eb141bf58aff4,
44042 $1b6fba3281342923$export$133eb141bf58aff4,
44043 $1b6fba3281342923$export$133eb141bf58aff4,
44044 $1b6fba3281342923$export$133eb141bf58aff4,
44045 $1b6fba3281342923$export$133eb141bf58aff4,
44046 $1b6fba3281342923$export$133eb141bf58aff4,
44047 $1b6fba3281342923$export$133eb141bf58aff4,
44048 $1b6fba3281342923$export$133eb141bf58aff4,
44049 $1b6fba3281342923$export$133eb141bf58aff4,
44050 $1b6fba3281342923$export$133eb141bf58aff4,
44051 $1b6fba3281342923$export$8f14048969dcd45e,
44052 $1b6fba3281342923$export$133eb141bf58aff4,
44053 $1b6fba3281342923$export$133eb141bf58aff4,
44054 $1b6fba3281342923$export$133eb141bf58aff4,
44055 $1b6fba3281342923$export$133eb141bf58aff4,
44056 $1b6fba3281342923$export$133eb141bf58aff4,
44057 $1b6fba3281342923$export$133eb141bf58aff4,
44058 $1b6fba3281342923$export$133eb141bf58aff4,
44059 $1b6fba3281342923$export$133eb141bf58aff4,
44060 $1b6fba3281342923$export$133eb141bf58aff4,
44061 $1b6fba3281342923$export$133eb141bf58aff4,
44062 $1b6fba3281342923$export$133eb141bf58aff4
44063 ],
44064 [
44065 $1b6fba3281342923$export$98f50d781a474745,
44066 $1b6fba3281342923$export$133eb141bf58aff4,
44067 $1b6fba3281342923$export$133eb141bf58aff4,
44068 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44069 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44070 $1b6fba3281342923$export$133eb141bf58aff4,
44071 $1b6fba3281342923$export$133eb141bf58aff4,
44072 $1b6fba3281342923$export$133eb141bf58aff4,
44073 $1b6fba3281342923$export$133eb141bf58aff4,
44074 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44075 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44076 $1b6fba3281342923$export$98f50d781a474745,
44077 $1b6fba3281342923$export$98f50d781a474745,
44078 $1b6fba3281342923$export$98f50d781a474745,
44079 $1b6fba3281342923$export$98f50d781a474745,
44080 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44081 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44082 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44083 $1b6fba3281342923$export$98f50d781a474745,
44084 $1b6fba3281342923$export$98f50d781a474745,
44085 $1b6fba3281342923$export$133eb141bf58aff4,
44086 $1b6fba3281342923$export$e4965ce242860454,
44087 $1b6fba3281342923$export$133eb141bf58aff4,
44088 $1b6fba3281342923$export$98f50d781a474745,
44089 $1b6fba3281342923$export$98f50d781a474745,
44090 $1b6fba3281342923$export$98f50d781a474745,
44091 $1b6fba3281342923$export$98f50d781a474745,
44092 $1b6fba3281342923$export$98f50d781a474745,
44093 $1b6fba3281342923$export$98f50d781a474745,
44094 $1b6fba3281342923$export$98f50d781a474745,
44095 $1b6fba3281342923$export$98f50d781a474745,
44096 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44097 $1b6fba3281342923$export$98f50d781a474745
44098 ],
44099 [
44100 $1b6fba3281342923$export$98f50d781a474745,
44101 $1b6fba3281342923$export$133eb141bf58aff4,
44102 $1b6fba3281342923$export$133eb141bf58aff4,
44103 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44104 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44105 $1b6fba3281342923$export$133eb141bf58aff4,
44106 $1b6fba3281342923$export$133eb141bf58aff4,
44107 $1b6fba3281342923$export$133eb141bf58aff4,
44108 $1b6fba3281342923$export$133eb141bf58aff4,
44109 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44110 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44111 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44112 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44113 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44114 $1b6fba3281342923$export$98f50d781a474745,
44115 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44116 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44117 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44118 $1b6fba3281342923$export$98f50d781a474745,
44119 $1b6fba3281342923$export$98f50d781a474745,
44120 $1b6fba3281342923$export$133eb141bf58aff4,
44121 $1b6fba3281342923$export$e4965ce242860454,
44122 $1b6fba3281342923$export$133eb141bf58aff4,
44123 $1b6fba3281342923$export$98f50d781a474745,
44124 $1b6fba3281342923$export$98f50d781a474745,
44125 $1b6fba3281342923$export$98f50d781a474745,
44126 $1b6fba3281342923$export$98f50d781a474745,
44127 $1b6fba3281342923$export$98f50d781a474745,
44128 $1b6fba3281342923$export$98f50d781a474745,
44129 $1b6fba3281342923$export$98f50d781a474745,
44130 $1b6fba3281342923$export$98f50d781a474745,
44131 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44132 $1b6fba3281342923$export$98f50d781a474745
44133 ],
44134 [
44135 $1b6fba3281342923$export$133eb141bf58aff4,
44136 $1b6fba3281342923$export$133eb141bf58aff4,
44137 $1b6fba3281342923$export$133eb141bf58aff4,
44138 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44139 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44140 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44141 $1b6fba3281342923$export$133eb141bf58aff4,
44142 $1b6fba3281342923$export$133eb141bf58aff4,
44143 $1b6fba3281342923$export$133eb141bf58aff4,
44144 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44145 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44146 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44147 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44148 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44149 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44150 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44151 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44152 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44153 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44154 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44155 $1b6fba3281342923$export$133eb141bf58aff4,
44156 $1b6fba3281342923$export$e4965ce242860454,
44157 $1b6fba3281342923$export$133eb141bf58aff4,
44158 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44159 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44160 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44161 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44162 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44163 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44164 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44165 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44166 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44167 $1b6fba3281342923$export$12ee1f8f5315ca7e
44168 ],
44169 [
44170 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44171 $1b6fba3281342923$export$133eb141bf58aff4,
44172 $1b6fba3281342923$export$133eb141bf58aff4,
44173 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44174 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44175 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44176 $1b6fba3281342923$export$133eb141bf58aff4,
44177 $1b6fba3281342923$export$133eb141bf58aff4,
44178 $1b6fba3281342923$export$133eb141bf58aff4,
44179 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44180 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44181 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44182 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44183 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44184 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44185 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44186 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44187 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44188 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44189 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44190 $1b6fba3281342923$export$133eb141bf58aff4,
44191 $1b6fba3281342923$export$e4965ce242860454,
44192 $1b6fba3281342923$export$133eb141bf58aff4,
44193 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44194 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44195 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44196 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44197 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44198 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44199 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44200 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44201 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44202 $1b6fba3281342923$export$12ee1f8f5315ca7e
44203 ],
44204 [
44205 $1b6fba3281342923$export$98f50d781a474745,
44206 $1b6fba3281342923$export$133eb141bf58aff4,
44207 $1b6fba3281342923$export$133eb141bf58aff4,
44208 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44209 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44210 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44211 $1b6fba3281342923$export$133eb141bf58aff4,
44212 $1b6fba3281342923$export$133eb141bf58aff4,
44213 $1b6fba3281342923$export$133eb141bf58aff4,
44214 $1b6fba3281342923$export$98f50d781a474745,
44215 $1b6fba3281342923$export$98f50d781a474745,
44216 $1b6fba3281342923$export$98f50d781a474745,
44217 $1b6fba3281342923$export$98f50d781a474745,
44218 $1b6fba3281342923$export$98f50d781a474745,
44219 $1b6fba3281342923$export$98f50d781a474745,
44220 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44221 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44222 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44223 $1b6fba3281342923$export$98f50d781a474745,
44224 $1b6fba3281342923$export$98f50d781a474745,
44225 $1b6fba3281342923$export$133eb141bf58aff4,
44226 $1b6fba3281342923$export$e4965ce242860454,
44227 $1b6fba3281342923$export$133eb141bf58aff4,
44228 $1b6fba3281342923$export$98f50d781a474745,
44229 $1b6fba3281342923$export$98f50d781a474745,
44230 $1b6fba3281342923$export$98f50d781a474745,
44231 $1b6fba3281342923$export$98f50d781a474745,
44232 $1b6fba3281342923$export$98f50d781a474745,
44233 $1b6fba3281342923$export$98f50d781a474745,
44234 $1b6fba3281342923$export$98f50d781a474745,
44235 $1b6fba3281342923$export$98f50d781a474745,
44236 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44237 $1b6fba3281342923$export$98f50d781a474745
44238 ],
44239 [
44240 $1b6fba3281342923$export$98f50d781a474745,
44241 $1b6fba3281342923$export$133eb141bf58aff4,
44242 $1b6fba3281342923$export$133eb141bf58aff4,
44243 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44244 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44245 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44246 $1b6fba3281342923$export$133eb141bf58aff4,
44247 $1b6fba3281342923$export$133eb141bf58aff4,
44248 $1b6fba3281342923$export$133eb141bf58aff4,
44249 $1b6fba3281342923$export$98f50d781a474745,
44250 $1b6fba3281342923$export$98f50d781a474745,
44251 $1b6fba3281342923$export$98f50d781a474745,
44252 $1b6fba3281342923$export$98f50d781a474745,
44253 $1b6fba3281342923$export$98f50d781a474745,
44254 $1b6fba3281342923$export$98f50d781a474745,
44255 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44256 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44257 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44258 $1b6fba3281342923$export$98f50d781a474745,
44259 $1b6fba3281342923$export$98f50d781a474745,
44260 $1b6fba3281342923$export$133eb141bf58aff4,
44261 $1b6fba3281342923$export$e4965ce242860454,
44262 $1b6fba3281342923$export$133eb141bf58aff4,
44263 $1b6fba3281342923$export$98f50d781a474745,
44264 $1b6fba3281342923$export$98f50d781a474745,
44265 $1b6fba3281342923$export$98f50d781a474745,
44266 $1b6fba3281342923$export$98f50d781a474745,
44267 $1b6fba3281342923$export$98f50d781a474745,
44268 $1b6fba3281342923$export$98f50d781a474745,
44269 $1b6fba3281342923$export$98f50d781a474745,
44270 $1b6fba3281342923$export$98f50d781a474745,
44271 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44272 $1b6fba3281342923$export$98f50d781a474745
44273 ],
44274 [
44275 $1b6fba3281342923$export$98f50d781a474745,
44276 $1b6fba3281342923$export$133eb141bf58aff4,
44277 $1b6fba3281342923$export$133eb141bf58aff4,
44278 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44279 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44280 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44281 $1b6fba3281342923$export$133eb141bf58aff4,
44282 $1b6fba3281342923$export$133eb141bf58aff4,
44283 $1b6fba3281342923$export$133eb141bf58aff4,
44284 $1b6fba3281342923$export$98f50d781a474745,
44285 $1b6fba3281342923$export$98f50d781a474745,
44286 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44287 $1b6fba3281342923$export$98f50d781a474745,
44288 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44289 $1b6fba3281342923$export$98f50d781a474745,
44290 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44291 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44292 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44293 $1b6fba3281342923$export$98f50d781a474745,
44294 $1b6fba3281342923$export$98f50d781a474745,
44295 $1b6fba3281342923$export$133eb141bf58aff4,
44296 $1b6fba3281342923$export$e4965ce242860454,
44297 $1b6fba3281342923$export$133eb141bf58aff4,
44298 $1b6fba3281342923$export$98f50d781a474745,
44299 $1b6fba3281342923$export$98f50d781a474745,
44300 $1b6fba3281342923$export$98f50d781a474745,
44301 $1b6fba3281342923$export$98f50d781a474745,
44302 $1b6fba3281342923$export$98f50d781a474745,
44303 $1b6fba3281342923$export$98f50d781a474745,
44304 $1b6fba3281342923$export$98f50d781a474745,
44305 $1b6fba3281342923$export$98f50d781a474745,
44306 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44307 $1b6fba3281342923$export$98f50d781a474745
44308 ],
44309 [
44310 $1b6fba3281342923$export$98f50d781a474745,
44311 $1b6fba3281342923$export$133eb141bf58aff4,
44312 $1b6fba3281342923$export$133eb141bf58aff4,
44313 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44314 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44315 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44316 $1b6fba3281342923$export$133eb141bf58aff4,
44317 $1b6fba3281342923$export$133eb141bf58aff4,
44318 $1b6fba3281342923$export$133eb141bf58aff4,
44319 $1b6fba3281342923$export$98f50d781a474745,
44320 $1b6fba3281342923$export$98f50d781a474745,
44321 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44322 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44323 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44324 $1b6fba3281342923$export$98f50d781a474745,
44325 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44326 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44327 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44328 $1b6fba3281342923$export$98f50d781a474745,
44329 $1b6fba3281342923$export$98f50d781a474745,
44330 $1b6fba3281342923$export$133eb141bf58aff4,
44331 $1b6fba3281342923$export$e4965ce242860454,
44332 $1b6fba3281342923$export$133eb141bf58aff4,
44333 $1b6fba3281342923$export$98f50d781a474745,
44334 $1b6fba3281342923$export$98f50d781a474745,
44335 $1b6fba3281342923$export$98f50d781a474745,
44336 $1b6fba3281342923$export$98f50d781a474745,
44337 $1b6fba3281342923$export$98f50d781a474745,
44338 $1b6fba3281342923$export$98f50d781a474745,
44339 $1b6fba3281342923$export$98f50d781a474745,
44340 $1b6fba3281342923$export$98f50d781a474745,
44341 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44342 $1b6fba3281342923$export$98f50d781a474745
44343 ],
44344 [
44345 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44346 $1b6fba3281342923$export$133eb141bf58aff4,
44347 $1b6fba3281342923$export$133eb141bf58aff4,
44348 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44349 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44350 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44351 $1b6fba3281342923$export$133eb141bf58aff4,
44352 $1b6fba3281342923$export$133eb141bf58aff4,
44353 $1b6fba3281342923$export$133eb141bf58aff4,
44354 $1b6fba3281342923$export$98f50d781a474745,
44355 $1b6fba3281342923$export$98f50d781a474745,
44356 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44357 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44358 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44359 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44360 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44361 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44362 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44363 $1b6fba3281342923$export$98f50d781a474745,
44364 $1b6fba3281342923$export$98f50d781a474745,
44365 $1b6fba3281342923$export$133eb141bf58aff4,
44366 $1b6fba3281342923$export$e4965ce242860454,
44367 $1b6fba3281342923$export$133eb141bf58aff4,
44368 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44369 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44370 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44371 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44372 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44373 $1b6fba3281342923$export$98f50d781a474745,
44374 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44375 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44376 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44377 $1b6fba3281342923$export$98f50d781a474745
44378 ],
44379 [
44380 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44381 $1b6fba3281342923$export$133eb141bf58aff4,
44382 $1b6fba3281342923$export$133eb141bf58aff4,
44383 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44384 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44385 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44386 $1b6fba3281342923$export$133eb141bf58aff4,
44387 $1b6fba3281342923$export$133eb141bf58aff4,
44388 $1b6fba3281342923$export$133eb141bf58aff4,
44389 $1b6fba3281342923$export$98f50d781a474745,
44390 $1b6fba3281342923$export$98f50d781a474745,
44391 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44392 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44393 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44394 $1b6fba3281342923$export$98f50d781a474745,
44395 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44396 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44397 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44398 $1b6fba3281342923$export$98f50d781a474745,
44399 $1b6fba3281342923$export$98f50d781a474745,
44400 $1b6fba3281342923$export$133eb141bf58aff4,
44401 $1b6fba3281342923$export$e4965ce242860454,
44402 $1b6fba3281342923$export$133eb141bf58aff4,
44403 $1b6fba3281342923$export$98f50d781a474745,
44404 $1b6fba3281342923$export$98f50d781a474745,
44405 $1b6fba3281342923$export$98f50d781a474745,
44406 $1b6fba3281342923$export$98f50d781a474745,
44407 $1b6fba3281342923$export$98f50d781a474745,
44408 $1b6fba3281342923$export$98f50d781a474745,
44409 $1b6fba3281342923$export$98f50d781a474745,
44410 $1b6fba3281342923$export$98f50d781a474745,
44411 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44412 $1b6fba3281342923$export$98f50d781a474745
44413 ],
44414 [
44415 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44416 $1b6fba3281342923$export$133eb141bf58aff4,
44417 $1b6fba3281342923$export$133eb141bf58aff4,
44418 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44419 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44420 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44421 $1b6fba3281342923$export$133eb141bf58aff4,
44422 $1b6fba3281342923$export$133eb141bf58aff4,
44423 $1b6fba3281342923$export$133eb141bf58aff4,
44424 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44425 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44426 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44427 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44428 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44429 $1b6fba3281342923$export$98f50d781a474745,
44430 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44431 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44432 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44433 $1b6fba3281342923$export$98f50d781a474745,
44434 $1b6fba3281342923$export$98f50d781a474745,
44435 $1b6fba3281342923$export$133eb141bf58aff4,
44436 $1b6fba3281342923$export$e4965ce242860454,
44437 $1b6fba3281342923$export$133eb141bf58aff4,
44438 $1b6fba3281342923$export$98f50d781a474745,
44439 $1b6fba3281342923$export$98f50d781a474745,
44440 $1b6fba3281342923$export$98f50d781a474745,
44441 $1b6fba3281342923$export$98f50d781a474745,
44442 $1b6fba3281342923$export$98f50d781a474745,
44443 $1b6fba3281342923$export$98f50d781a474745,
44444 $1b6fba3281342923$export$98f50d781a474745,
44445 $1b6fba3281342923$export$98f50d781a474745,
44446 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44447 $1b6fba3281342923$export$98f50d781a474745
44448 ],
44449 [
44450 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44451 $1b6fba3281342923$export$133eb141bf58aff4,
44452 $1b6fba3281342923$export$133eb141bf58aff4,
44453 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44454 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44455 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44456 $1b6fba3281342923$export$133eb141bf58aff4,
44457 $1b6fba3281342923$export$133eb141bf58aff4,
44458 $1b6fba3281342923$export$133eb141bf58aff4,
44459 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44460 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44461 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44462 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44463 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44464 $1b6fba3281342923$export$98f50d781a474745,
44465 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44466 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44467 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44468 $1b6fba3281342923$export$98f50d781a474745,
44469 $1b6fba3281342923$export$98f50d781a474745,
44470 $1b6fba3281342923$export$133eb141bf58aff4,
44471 $1b6fba3281342923$export$e4965ce242860454,
44472 $1b6fba3281342923$export$133eb141bf58aff4,
44473 $1b6fba3281342923$export$98f50d781a474745,
44474 $1b6fba3281342923$export$98f50d781a474745,
44475 $1b6fba3281342923$export$98f50d781a474745,
44476 $1b6fba3281342923$export$98f50d781a474745,
44477 $1b6fba3281342923$export$98f50d781a474745,
44478 $1b6fba3281342923$export$98f50d781a474745,
44479 $1b6fba3281342923$export$98f50d781a474745,
44480 $1b6fba3281342923$export$98f50d781a474745,
44481 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44482 $1b6fba3281342923$export$98f50d781a474745
44483 ],
44484 [
44485 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44486 $1b6fba3281342923$export$133eb141bf58aff4,
44487 $1b6fba3281342923$export$133eb141bf58aff4,
44488 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44489 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44490 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44491 $1b6fba3281342923$export$133eb141bf58aff4,
44492 $1b6fba3281342923$export$133eb141bf58aff4,
44493 $1b6fba3281342923$export$133eb141bf58aff4,
44494 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44495 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44496 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44497 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44498 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44499 $1b6fba3281342923$export$98f50d781a474745,
44500 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44501 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44502 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44503 $1b6fba3281342923$export$98f50d781a474745,
44504 $1b6fba3281342923$export$98f50d781a474745,
44505 $1b6fba3281342923$export$133eb141bf58aff4,
44506 $1b6fba3281342923$export$e4965ce242860454,
44507 $1b6fba3281342923$export$133eb141bf58aff4,
44508 $1b6fba3281342923$export$98f50d781a474745,
44509 $1b6fba3281342923$export$98f50d781a474745,
44510 $1b6fba3281342923$export$98f50d781a474745,
44511 $1b6fba3281342923$export$98f50d781a474745,
44512 $1b6fba3281342923$export$98f50d781a474745,
44513 $1b6fba3281342923$export$98f50d781a474745,
44514 $1b6fba3281342923$export$98f50d781a474745,
44515 $1b6fba3281342923$export$98f50d781a474745,
44516 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44517 $1b6fba3281342923$export$98f50d781a474745
44518 ],
44519 [
44520 $1b6fba3281342923$export$98f50d781a474745,
44521 $1b6fba3281342923$export$133eb141bf58aff4,
44522 $1b6fba3281342923$export$133eb141bf58aff4,
44523 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44524 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44525 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44526 $1b6fba3281342923$export$133eb141bf58aff4,
44527 $1b6fba3281342923$export$133eb141bf58aff4,
44528 $1b6fba3281342923$export$133eb141bf58aff4,
44529 $1b6fba3281342923$export$98f50d781a474745,
44530 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44531 $1b6fba3281342923$export$98f50d781a474745,
44532 $1b6fba3281342923$export$98f50d781a474745,
44533 $1b6fba3281342923$export$98f50d781a474745,
44534 $1b6fba3281342923$export$98f50d781a474745,
44535 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44536 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44537 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44538 $1b6fba3281342923$export$98f50d781a474745,
44539 $1b6fba3281342923$export$98f50d781a474745,
44540 $1b6fba3281342923$export$133eb141bf58aff4,
44541 $1b6fba3281342923$export$e4965ce242860454,
44542 $1b6fba3281342923$export$133eb141bf58aff4,
44543 $1b6fba3281342923$export$98f50d781a474745,
44544 $1b6fba3281342923$export$98f50d781a474745,
44545 $1b6fba3281342923$export$98f50d781a474745,
44546 $1b6fba3281342923$export$98f50d781a474745,
44547 $1b6fba3281342923$export$98f50d781a474745,
44548 $1b6fba3281342923$export$98f50d781a474745,
44549 $1b6fba3281342923$export$98f50d781a474745,
44550 $1b6fba3281342923$export$98f50d781a474745,
44551 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44552 $1b6fba3281342923$export$98f50d781a474745
44553 ],
44554 [
44555 $1b6fba3281342923$export$98f50d781a474745,
44556 $1b6fba3281342923$export$133eb141bf58aff4,
44557 $1b6fba3281342923$export$133eb141bf58aff4,
44558 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44559 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44560 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44561 $1b6fba3281342923$export$133eb141bf58aff4,
44562 $1b6fba3281342923$export$133eb141bf58aff4,
44563 $1b6fba3281342923$export$133eb141bf58aff4,
44564 $1b6fba3281342923$export$98f50d781a474745,
44565 $1b6fba3281342923$export$98f50d781a474745,
44566 $1b6fba3281342923$export$98f50d781a474745,
44567 $1b6fba3281342923$export$98f50d781a474745,
44568 $1b6fba3281342923$export$98f50d781a474745,
44569 $1b6fba3281342923$export$98f50d781a474745,
44570 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44571 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44572 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44573 $1b6fba3281342923$export$98f50d781a474745,
44574 $1b6fba3281342923$export$98f50d781a474745,
44575 $1b6fba3281342923$export$133eb141bf58aff4,
44576 $1b6fba3281342923$export$e4965ce242860454,
44577 $1b6fba3281342923$export$133eb141bf58aff4,
44578 $1b6fba3281342923$export$98f50d781a474745,
44579 $1b6fba3281342923$export$98f50d781a474745,
44580 $1b6fba3281342923$export$98f50d781a474745,
44581 $1b6fba3281342923$export$98f50d781a474745,
44582 $1b6fba3281342923$export$98f50d781a474745,
44583 $1b6fba3281342923$export$98f50d781a474745,
44584 $1b6fba3281342923$export$98f50d781a474745,
44585 $1b6fba3281342923$export$98f50d781a474745,
44586 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44587 $1b6fba3281342923$export$98f50d781a474745
44588 ],
44589 [
44590 $1b6fba3281342923$export$98f50d781a474745,
44591 $1b6fba3281342923$export$133eb141bf58aff4,
44592 $1b6fba3281342923$export$133eb141bf58aff4,
44593 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44594 $1b6fba3281342923$export$98f50d781a474745,
44595 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44596 $1b6fba3281342923$export$133eb141bf58aff4,
44597 $1b6fba3281342923$export$133eb141bf58aff4,
44598 $1b6fba3281342923$export$133eb141bf58aff4,
44599 $1b6fba3281342923$export$98f50d781a474745,
44600 $1b6fba3281342923$export$98f50d781a474745,
44601 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44602 $1b6fba3281342923$export$98f50d781a474745,
44603 $1b6fba3281342923$export$98f50d781a474745,
44604 $1b6fba3281342923$export$98f50d781a474745,
44605 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44606 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44607 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44608 $1b6fba3281342923$export$98f50d781a474745,
44609 $1b6fba3281342923$export$98f50d781a474745,
44610 $1b6fba3281342923$export$133eb141bf58aff4,
44611 $1b6fba3281342923$export$e4965ce242860454,
44612 $1b6fba3281342923$export$133eb141bf58aff4,
44613 $1b6fba3281342923$export$98f50d781a474745,
44614 $1b6fba3281342923$export$98f50d781a474745,
44615 $1b6fba3281342923$export$98f50d781a474745,
44616 $1b6fba3281342923$export$98f50d781a474745,
44617 $1b6fba3281342923$export$98f50d781a474745,
44618 $1b6fba3281342923$export$98f50d781a474745,
44619 $1b6fba3281342923$export$98f50d781a474745,
44620 $1b6fba3281342923$export$98f50d781a474745,
44621 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44622 $1b6fba3281342923$export$98f50d781a474745
44623 ],
44624 [
44625 $1b6fba3281342923$export$98f50d781a474745,
44626 $1b6fba3281342923$export$133eb141bf58aff4,
44627 $1b6fba3281342923$export$133eb141bf58aff4,
44628 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44629 $1b6fba3281342923$export$98f50d781a474745,
44630 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44631 $1b6fba3281342923$export$133eb141bf58aff4,
44632 $1b6fba3281342923$export$133eb141bf58aff4,
44633 $1b6fba3281342923$export$133eb141bf58aff4,
44634 $1b6fba3281342923$export$98f50d781a474745,
44635 $1b6fba3281342923$export$98f50d781a474745,
44636 $1b6fba3281342923$export$98f50d781a474745,
44637 $1b6fba3281342923$export$98f50d781a474745,
44638 $1b6fba3281342923$export$98f50d781a474745,
44639 $1b6fba3281342923$export$98f50d781a474745,
44640 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44641 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44642 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44643 $1b6fba3281342923$export$98f50d781a474745,
44644 $1b6fba3281342923$export$98f50d781a474745,
44645 $1b6fba3281342923$export$133eb141bf58aff4,
44646 $1b6fba3281342923$export$e4965ce242860454,
44647 $1b6fba3281342923$export$133eb141bf58aff4,
44648 $1b6fba3281342923$export$98f50d781a474745,
44649 $1b6fba3281342923$export$98f50d781a474745,
44650 $1b6fba3281342923$export$98f50d781a474745,
44651 $1b6fba3281342923$export$98f50d781a474745,
44652 $1b6fba3281342923$export$98f50d781a474745,
44653 $1b6fba3281342923$export$98f50d781a474745,
44654 $1b6fba3281342923$export$98f50d781a474745,
44655 $1b6fba3281342923$export$98f50d781a474745,
44656 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44657 $1b6fba3281342923$export$98f50d781a474745
44658 ],
44659 [
44660 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44661 $1b6fba3281342923$export$133eb141bf58aff4,
44662 $1b6fba3281342923$export$133eb141bf58aff4,
44663 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44664 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44665 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44666 $1b6fba3281342923$export$133eb141bf58aff4,
44667 $1b6fba3281342923$export$133eb141bf58aff4,
44668 $1b6fba3281342923$export$133eb141bf58aff4,
44669 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44670 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44671 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44672 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44673 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44674 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44675 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44676 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44677 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44678 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44679 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44680 $1b6fba3281342923$export$133eb141bf58aff4,
44681 $1b6fba3281342923$export$e4965ce242860454,
44682 $1b6fba3281342923$export$133eb141bf58aff4,
44683 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44684 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44685 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44686 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44687 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44688 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44689 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44690 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44691 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44692 $1b6fba3281342923$export$98f50d781a474745
44693 ],
44694 [
44695 $1b6fba3281342923$export$98f50d781a474745,
44696 $1b6fba3281342923$export$133eb141bf58aff4,
44697 $1b6fba3281342923$export$133eb141bf58aff4,
44698 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44699 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44700 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44701 $1b6fba3281342923$export$133eb141bf58aff4,
44702 $1b6fba3281342923$export$133eb141bf58aff4,
44703 $1b6fba3281342923$export$133eb141bf58aff4,
44704 $1b6fba3281342923$export$98f50d781a474745,
44705 $1b6fba3281342923$export$98f50d781a474745,
44706 $1b6fba3281342923$export$98f50d781a474745,
44707 $1b6fba3281342923$export$98f50d781a474745,
44708 $1b6fba3281342923$export$98f50d781a474745,
44709 $1b6fba3281342923$export$98f50d781a474745,
44710 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44711 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44712 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44713 $1b6fba3281342923$export$98f50d781a474745,
44714 $1b6fba3281342923$export$133eb141bf58aff4,
44715 $1b6fba3281342923$export$133eb141bf58aff4,
44716 $1b6fba3281342923$export$e4965ce242860454,
44717 $1b6fba3281342923$export$133eb141bf58aff4,
44718 $1b6fba3281342923$export$98f50d781a474745,
44719 $1b6fba3281342923$export$98f50d781a474745,
44720 $1b6fba3281342923$export$98f50d781a474745,
44721 $1b6fba3281342923$export$98f50d781a474745,
44722 $1b6fba3281342923$export$98f50d781a474745,
44723 $1b6fba3281342923$export$98f50d781a474745,
44724 $1b6fba3281342923$export$98f50d781a474745,
44725 $1b6fba3281342923$export$98f50d781a474745,
44726 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44727 $1b6fba3281342923$export$98f50d781a474745
44728 ],
44729 [
44730 $1b6fba3281342923$export$98f50d781a474745,
44731 $1b6fba3281342923$export$98f50d781a474745,
44732 $1b6fba3281342923$export$98f50d781a474745,
44733 $1b6fba3281342923$export$98f50d781a474745,
44734 $1b6fba3281342923$export$98f50d781a474745,
44735 $1b6fba3281342923$export$98f50d781a474745,
44736 $1b6fba3281342923$export$98f50d781a474745,
44737 $1b6fba3281342923$export$98f50d781a474745,
44738 $1b6fba3281342923$export$98f50d781a474745,
44739 $1b6fba3281342923$export$98f50d781a474745,
44740 $1b6fba3281342923$export$98f50d781a474745,
44741 $1b6fba3281342923$export$98f50d781a474745,
44742 $1b6fba3281342923$export$98f50d781a474745,
44743 $1b6fba3281342923$export$98f50d781a474745,
44744 $1b6fba3281342923$export$98f50d781a474745,
44745 $1b6fba3281342923$export$98f50d781a474745,
44746 $1b6fba3281342923$export$98f50d781a474745,
44747 $1b6fba3281342923$export$98f50d781a474745,
44748 $1b6fba3281342923$export$98f50d781a474745,
44749 $1b6fba3281342923$export$98f50d781a474745,
44750 $1b6fba3281342923$export$133eb141bf58aff4,
44751 $1b6fba3281342923$export$98f50d781a474745,
44752 $1b6fba3281342923$export$98f50d781a474745,
44753 $1b6fba3281342923$export$98f50d781a474745,
44754 $1b6fba3281342923$export$98f50d781a474745,
44755 $1b6fba3281342923$export$98f50d781a474745,
44756 $1b6fba3281342923$export$98f50d781a474745,
44757 $1b6fba3281342923$export$98f50d781a474745,
44758 $1b6fba3281342923$export$98f50d781a474745,
44759 $1b6fba3281342923$export$98f50d781a474745,
44760 $1b6fba3281342923$export$98f50d781a474745,
44761 $1b6fba3281342923$export$98f50d781a474745,
44762 $1b6fba3281342923$export$98f50d781a474745
44763 ],
44764 [
44765 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44766 $1b6fba3281342923$export$133eb141bf58aff4,
44767 $1b6fba3281342923$export$133eb141bf58aff4,
44768 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44769 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44770 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44771 $1b6fba3281342923$export$133eb141bf58aff4,
44772 $1b6fba3281342923$export$133eb141bf58aff4,
44773 $1b6fba3281342923$export$133eb141bf58aff4,
44774 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44775 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44776 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44777 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44778 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44779 $1b6fba3281342923$export$98f50d781a474745,
44780 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44781 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44782 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44783 $1b6fba3281342923$export$98f50d781a474745,
44784 $1b6fba3281342923$export$98f50d781a474745,
44785 $1b6fba3281342923$export$133eb141bf58aff4,
44786 $1b6fba3281342923$export$e4965ce242860454,
44787 $1b6fba3281342923$export$133eb141bf58aff4,
44788 $1b6fba3281342923$export$98f50d781a474745,
44789 $1b6fba3281342923$export$98f50d781a474745,
44790 $1b6fba3281342923$export$98f50d781a474745,
44791 $1b6fba3281342923$export$98f50d781a474745,
44792 $1b6fba3281342923$export$98f50d781a474745,
44793 $1b6fba3281342923$export$98f50d781a474745,
44794 $1b6fba3281342923$export$98f50d781a474745,
44795 $1b6fba3281342923$export$98f50d781a474745,
44796 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44797 $1b6fba3281342923$export$98f50d781a474745
44798 ],
44799 [
44800 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44801 $1b6fba3281342923$export$133eb141bf58aff4,
44802 $1b6fba3281342923$export$133eb141bf58aff4,
44803 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44804 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44805 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44806 $1b6fba3281342923$export$133eb141bf58aff4,
44807 $1b6fba3281342923$export$133eb141bf58aff4,
44808 $1b6fba3281342923$export$133eb141bf58aff4,
44809 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44810 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44811 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44812 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44813 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44814 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44815 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44816 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44817 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44818 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44819 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44820 $1b6fba3281342923$export$133eb141bf58aff4,
44821 $1b6fba3281342923$export$e4965ce242860454,
44822 $1b6fba3281342923$export$133eb141bf58aff4,
44823 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44824 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44825 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44826 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44827 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44828 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44829 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44830 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44831 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44832 $1b6fba3281342923$export$12ee1f8f5315ca7e
44833 ],
44834 [
44835 $1b6fba3281342923$export$98f50d781a474745,
44836 $1b6fba3281342923$export$133eb141bf58aff4,
44837 $1b6fba3281342923$export$133eb141bf58aff4,
44838 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44839 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44840 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44841 $1b6fba3281342923$export$133eb141bf58aff4,
44842 $1b6fba3281342923$export$133eb141bf58aff4,
44843 $1b6fba3281342923$export$133eb141bf58aff4,
44844 $1b6fba3281342923$export$98f50d781a474745,
44845 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44846 $1b6fba3281342923$export$98f50d781a474745,
44847 $1b6fba3281342923$export$98f50d781a474745,
44848 $1b6fba3281342923$export$98f50d781a474745,
44849 $1b6fba3281342923$export$98f50d781a474745,
44850 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44851 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44852 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44853 $1b6fba3281342923$export$98f50d781a474745,
44854 $1b6fba3281342923$export$98f50d781a474745,
44855 $1b6fba3281342923$export$133eb141bf58aff4,
44856 $1b6fba3281342923$export$e4965ce242860454,
44857 $1b6fba3281342923$export$133eb141bf58aff4,
44858 $1b6fba3281342923$export$98f50d781a474745,
44859 $1b6fba3281342923$export$98f50d781a474745,
44860 $1b6fba3281342923$export$98f50d781a474745,
44861 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44862 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44863 $1b6fba3281342923$export$98f50d781a474745,
44864 $1b6fba3281342923$export$98f50d781a474745,
44865 $1b6fba3281342923$export$98f50d781a474745,
44866 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44867 $1b6fba3281342923$export$98f50d781a474745
44868 ],
44869 [
44870 $1b6fba3281342923$export$98f50d781a474745,
44871 $1b6fba3281342923$export$133eb141bf58aff4,
44872 $1b6fba3281342923$export$133eb141bf58aff4,
44873 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44874 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44875 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44876 $1b6fba3281342923$export$133eb141bf58aff4,
44877 $1b6fba3281342923$export$133eb141bf58aff4,
44878 $1b6fba3281342923$export$133eb141bf58aff4,
44879 $1b6fba3281342923$export$98f50d781a474745,
44880 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44881 $1b6fba3281342923$export$98f50d781a474745,
44882 $1b6fba3281342923$export$98f50d781a474745,
44883 $1b6fba3281342923$export$98f50d781a474745,
44884 $1b6fba3281342923$export$98f50d781a474745,
44885 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44886 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44887 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44888 $1b6fba3281342923$export$98f50d781a474745,
44889 $1b6fba3281342923$export$98f50d781a474745,
44890 $1b6fba3281342923$export$133eb141bf58aff4,
44891 $1b6fba3281342923$export$e4965ce242860454,
44892 $1b6fba3281342923$export$133eb141bf58aff4,
44893 $1b6fba3281342923$export$98f50d781a474745,
44894 $1b6fba3281342923$export$98f50d781a474745,
44895 $1b6fba3281342923$export$98f50d781a474745,
44896 $1b6fba3281342923$export$98f50d781a474745,
44897 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44898 $1b6fba3281342923$export$98f50d781a474745,
44899 $1b6fba3281342923$export$98f50d781a474745,
44900 $1b6fba3281342923$export$98f50d781a474745,
44901 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44902 $1b6fba3281342923$export$98f50d781a474745
44903 ],
44904 [
44905 $1b6fba3281342923$export$98f50d781a474745,
44906 $1b6fba3281342923$export$133eb141bf58aff4,
44907 $1b6fba3281342923$export$133eb141bf58aff4,
44908 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44909 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44910 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44911 $1b6fba3281342923$export$133eb141bf58aff4,
44912 $1b6fba3281342923$export$133eb141bf58aff4,
44913 $1b6fba3281342923$export$133eb141bf58aff4,
44914 $1b6fba3281342923$export$98f50d781a474745,
44915 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44916 $1b6fba3281342923$export$98f50d781a474745,
44917 $1b6fba3281342923$export$98f50d781a474745,
44918 $1b6fba3281342923$export$98f50d781a474745,
44919 $1b6fba3281342923$export$98f50d781a474745,
44920 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44921 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44922 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44923 $1b6fba3281342923$export$98f50d781a474745,
44924 $1b6fba3281342923$export$98f50d781a474745,
44925 $1b6fba3281342923$export$133eb141bf58aff4,
44926 $1b6fba3281342923$export$e4965ce242860454,
44927 $1b6fba3281342923$export$133eb141bf58aff4,
44928 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44929 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44930 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44931 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44932 $1b6fba3281342923$export$98f50d781a474745,
44933 $1b6fba3281342923$export$98f50d781a474745,
44934 $1b6fba3281342923$export$98f50d781a474745,
44935 $1b6fba3281342923$export$98f50d781a474745,
44936 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44937 $1b6fba3281342923$export$98f50d781a474745
44938 ],
44939 [
44940 $1b6fba3281342923$export$98f50d781a474745,
44941 $1b6fba3281342923$export$133eb141bf58aff4,
44942 $1b6fba3281342923$export$133eb141bf58aff4,
44943 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44944 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44945 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44946 $1b6fba3281342923$export$133eb141bf58aff4,
44947 $1b6fba3281342923$export$133eb141bf58aff4,
44948 $1b6fba3281342923$export$133eb141bf58aff4,
44949 $1b6fba3281342923$export$98f50d781a474745,
44950 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44951 $1b6fba3281342923$export$98f50d781a474745,
44952 $1b6fba3281342923$export$98f50d781a474745,
44953 $1b6fba3281342923$export$98f50d781a474745,
44954 $1b6fba3281342923$export$98f50d781a474745,
44955 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44956 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44957 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44958 $1b6fba3281342923$export$98f50d781a474745,
44959 $1b6fba3281342923$export$98f50d781a474745,
44960 $1b6fba3281342923$export$133eb141bf58aff4,
44961 $1b6fba3281342923$export$e4965ce242860454,
44962 $1b6fba3281342923$export$133eb141bf58aff4,
44963 $1b6fba3281342923$export$98f50d781a474745,
44964 $1b6fba3281342923$export$98f50d781a474745,
44965 $1b6fba3281342923$export$98f50d781a474745,
44966 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44967 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44968 $1b6fba3281342923$export$98f50d781a474745,
44969 $1b6fba3281342923$export$98f50d781a474745,
44970 $1b6fba3281342923$export$98f50d781a474745,
44971 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44972 $1b6fba3281342923$export$98f50d781a474745
44973 ],
44974 [
44975 $1b6fba3281342923$export$98f50d781a474745,
44976 $1b6fba3281342923$export$133eb141bf58aff4,
44977 $1b6fba3281342923$export$133eb141bf58aff4,
44978 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44979 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44980 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44981 $1b6fba3281342923$export$133eb141bf58aff4,
44982 $1b6fba3281342923$export$133eb141bf58aff4,
44983 $1b6fba3281342923$export$133eb141bf58aff4,
44984 $1b6fba3281342923$export$98f50d781a474745,
44985 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44986 $1b6fba3281342923$export$98f50d781a474745,
44987 $1b6fba3281342923$export$98f50d781a474745,
44988 $1b6fba3281342923$export$98f50d781a474745,
44989 $1b6fba3281342923$export$98f50d781a474745,
44990 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44991 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44992 $1b6fba3281342923$export$12ee1f8f5315ca7e,
44993 $1b6fba3281342923$export$98f50d781a474745,
44994 $1b6fba3281342923$export$98f50d781a474745,
44995 $1b6fba3281342923$export$133eb141bf58aff4,
44996 $1b6fba3281342923$export$e4965ce242860454,
44997 $1b6fba3281342923$export$133eb141bf58aff4,
44998 $1b6fba3281342923$export$98f50d781a474745,
44999 $1b6fba3281342923$export$98f50d781a474745,
45000 $1b6fba3281342923$export$98f50d781a474745,
45001 $1b6fba3281342923$export$98f50d781a474745,
45002 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45003 $1b6fba3281342923$export$98f50d781a474745,
45004 $1b6fba3281342923$export$98f50d781a474745,
45005 $1b6fba3281342923$export$98f50d781a474745,
45006 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45007 $1b6fba3281342923$export$98f50d781a474745
45008 ],
45009 [
45010 $1b6fba3281342923$export$98f50d781a474745,
45011 $1b6fba3281342923$export$133eb141bf58aff4,
45012 $1b6fba3281342923$export$133eb141bf58aff4,
45013 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45014 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45015 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45016 $1b6fba3281342923$export$133eb141bf58aff4,
45017 $1b6fba3281342923$export$133eb141bf58aff4,
45018 $1b6fba3281342923$export$133eb141bf58aff4,
45019 $1b6fba3281342923$export$98f50d781a474745,
45020 $1b6fba3281342923$export$98f50d781a474745,
45021 $1b6fba3281342923$export$98f50d781a474745,
45022 $1b6fba3281342923$export$98f50d781a474745,
45023 $1b6fba3281342923$export$98f50d781a474745,
45024 $1b6fba3281342923$export$98f50d781a474745,
45025 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45026 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45027 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45028 $1b6fba3281342923$export$98f50d781a474745,
45029 $1b6fba3281342923$export$98f50d781a474745,
45030 $1b6fba3281342923$export$133eb141bf58aff4,
45031 $1b6fba3281342923$export$e4965ce242860454,
45032 $1b6fba3281342923$export$133eb141bf58aff4,
45033 $1b6fba3281342923$export$98f50d781a474745,
45034 $1b6fba3281342923$export$98f50d781a474745,
45035 $1b6fba3281342923$export$98f50d781a474745,
45036 $1b6fba3281342923$export$98f50d781a474745,
45037 $1b6fba3281342923$export$98f50d781a474745,
45038 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45039 $1b6fba3281342923$export$98f50d781a474745,
45040 $1b6fba3281342923$export$98f50d781a474745,
45041 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45042 $1b6fba3281342923$export$98f50d781a474745
45043 ],
45044 [
45045 $1b6fba3281342923$export$98f50d781a474745,
45046 $1b6fba3281342923$export$133eb141bf58aff4,
45047 $1b6fba3281342923$export$133eb141bf58aff4,
45048 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45049 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45050 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45051 $1b6fba3281342923$export$133eb141bf58aff4,
45052 $1b6fba3281342923$export$133eb141bf58aff4,
45053 $1b6fba3281342923$export$133eb141bf58aff4,
45054 $1b6fba3281342923$export$98f50d781a474745,
45055 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45056 $1b6fba3281342923$export$98f50d781a474745,
45057 $1b6fba3281342923$export$98f50d781a474745,
45058 $1b6fba3281342923$export$98f50d781a474745,
45059 $1b6fba3281342923$export$98f50d781a474745,
45060 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45061 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45062 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45063 $1b6fba3281342923$export$98f50d781a474745,
45064 $1b6fba3281342923$export$98f50d781a474745,
45065 $1b6fba3281342923$export$133eb141bf58aff4,
45066 $1b6fba3281342923$export$e4965ce242860454,
45067 $1b6fba3281342923$export$133eb141bf58aff4,
45068 $1b6fba3281342923$export$98f50d781a474745,
45069 $1b6fba3281342923$export$98f50d781a474745,
45070 $1b6fba3281342923$export$98f50d781a474745,
45071 $1b6fba3281342923$export$98f50d781a474745,
45072 $1b6fba3281342923$export$98f50d781a474745,
45073 $1b6fba3281342923$export$98f50d781a474745,
45074 $1b6fba3281342923$export$98f50d781a474745,
45075 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45076 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45077 $1b6fba3281342923$export$98f50d781a474745
45078 ],
45079 [
45080 $1b6fba3281342923$export$98f50d781a474745,
45081 $1b6fba3281342923$export$133eb141bf58aff4,
45082 $1b6fba3281342923$export$133eb141bf58aff4,
45083 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45084 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45085 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45086 $1b6fba3281342923$export$133eb141bf58aff4,
45087 $1b6fba3281342923$export$133eb141bf58aff4,
45088 $1b6fba3281342923$export$133eb141bf58aff4,
45089 $1b6fba3281342923$export$98f50d781a474745,
45090 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45091 $1b6fba3281342923$export$98f50d781a474745,
45092 $1b6fba3281342923$export$98f50d781a474745,
45093 $1b6fba3281342923$export$98f50d781a474745,
45094 $1b6fba3281342923$export$98f50d781a474745,
45095 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45096 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45097 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45098 $1b6fba3281342923$export$98f50d781a474745,
45099 $1b6fba3281342923$export$98f50d781a474745,
45100 $1b6fba3281342923$export$133eb141bf58aff4,
45101 $1b6fba3281342923$export$e4965ce242860454,
45102 $1b6fba3281342923$export$133eb141bf58aff4,
45103 $1b6fba3281342923$export$98f50d781a474745,
45104 $1b6fba3281342923$export$98f50d781a474745,
45105 $1b6fba3281342923$export$98f50d781a474745,
45106 $1b6fba3281342923$export$98f50d781a474745,
45107 $1b6fba3281342923$export$98f50d781a474745,
45108 $1b6fba3281342923$export$98f50d781a474745,
45109 $1b6fba3281342923$export$98f50d781a474745,
45110 $1b6fba3281342923$export$98f50d781a474745,
45111 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45112 $1b6fba3281342923$export$98f50d781a474745
45113 ],
45114 [
45115 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45116 $1b6fba3281342923$export$133eb141bf58aff4,
45117 $1b6fba3281342923$export$133eb141bf58aff4,
45118 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45119 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45120 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45121 $1b6fba3281342923$export$133eb141bf58aff4,
45122 $1b6fba3281342923$export$133eb141bf58aff4,
45123 $1b6fba3281342923$export$133eb141bf58aff4,
45124 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45125 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45126 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45127 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45128 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45129 $1b6fba3281342923$export$98f50d781a474745,
45130 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45131 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45132 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45133 $1b6fba3281342923$export$98f50d781a474745,
45134 $1b6fba3281342923$export$98f50d781a474745,
45135 $1b6fba3281342923$export$133eb141bf58aff4,
45136 $1b6fba3281342923$export$e4965ce242860454,
45137 $1b6fba3281342923$export$133eb141bf58aff4,
45138 $1b6fba3281342923$export$98f50d781a474745,
45139 $1b6fba3281342923$export$98f50d781a474745,
45140 $1b6fba3281342923$export$98f50d781a474745,
45141 $1b6fba3281342923$export$98f50d781a474745,
45142 $1b6fba3281342923$export$98f50d781a474745,
45143 $1b6fba3281342923$export$98f50d781a474745,
45144 $1b6fba3281342923$export$98f50d781a474745,
45145 $1b6fba3281342923$export$98f50d781a474745,
45146 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45147 $1b6fba3281342923$export$98f50d781a474745
45148 ],
45149 [
45150 $1b6fba3281342923$export$98f50d781a474745,
45151 $1b6fba3281342923$export$133eb141bf58aff4,
45152 $1b6fba3281342923$export$133eb141bf58aff4,
45153 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45154 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45155 $1b6fba3281342923$export$98f50d781a474745,
45156 $1b6fba3281342923$export$133eb141bf58aff4,
45157 $1b6fba3281342923$export$133eb141bf58aff4,
45158 $1b6fba3281342923$export$133eb141bf58aff4,
45159 $1b6fba3281342923$export$98f50d781a474745,
45160 $1b6fba3281342923$export$98f50d781a474745,
45161 $1b6fba3281342923$export$98f50d781a474745,
45162 $1b6fba3281342923$export$98f50d781a474745,
45163 $1b6fba3281342923$export$98f50d781a474745,
45164 $1b6fba3281342923$export$98f50d781a474745,
45165 $1b6fba3281342923$export$98f50d781a474745,
45166 $1b6fba3281342923$export$98f50d781a474745,
45167 $1b6fba3281342923$export$98f50d781a474745,
45168 $1b6fba3281342923$export$98f50d781a474745,
45169 $1b6fba3281342923$export$98f50d781a474745,
45170 $1b6fba3281342923$export$133eb141bf58aff4,
45171 $1b6fba3281342923$export$e4965ce242860454,
45172 $1b6fba3281342923$export$133eb141bf58aff4,
45173 $1b6fba3281342923$export$98f50d781a474745,
45174 $1b6fba3281342923$export$98f50d781a474745,
45175 $1b6fba3281342923$export$98f50d781a474745,
45176 $1b6fba3281342923$export$98f50d781a474745,
45177 $1b6fba3281342923$export$98f50d781a474745,
45178 $1b6fba3281342923$export$98f50d781a474745,
45179 $1b6fba3281342923$export$98f50d781a474745,
45180 $1b6fba3281342923$export$98f50d781a474745,
45181 $1b6fba3281342923$export$12ee1f8f5315ca7e,
45182 $1b6fba3281342923$export$98f50d781a474745
45183 ] // CB
45184];
45185
45186
45187const $f898ea50f3b38ab8$var$data = ($parcel$interopDefault($kQ2hT$base64js)).toByteArray("AAgOAAAAAAAQ4QAAAQ0P8vDtnQuMXUUZx+eyu7d7797d9m5bHoWltKVUlsjLWE0VJNigQoMVqkStEoNQQUl5GIo1KKmogEgqkKbBRki72lYabZMGKoGAjQRtJJDaCCIRiiigREBQS3z+xzOTnZ3O+3HOhd5NfpkzZx7fN9988zivu2M9hGwB28F94DnwEngd/Asc1EtIs9c/bIPDwCxwLDgezHcodyo4w5C+CCwBS8FnwSXgCnA1uFbI93XwbXAbWAfWgx+CzWAb+An4KfgFeAzsYWWfYuFz4CXwGvgb+Dfo6yNkEEwGh4CZYB44FpwI3g1OY+kfBItZOo2fB84Hy8DF4HJwNbiWpV8PVoO1LH4n2NRXyN+KcAd4kNVP9XsY4aPgcfAbsBfs6SniL4K/sPjfEf6HlanXCRkCw2BGvUh/keWfXS/CY+pFXs7x9XHmM94LTmWIeU2cgbxnS/k/B3kf86jDhU8L9V2E40vAFWAlWFUfb++NOL4F3C7JX4/4GiE+hvgWsF0oS7mXldspnN+F493gyXrh9xTav0cg3EvzgVfBG6wsmVSEkxBOBgdPGpd7JI6PnqRvJ68/xlbHof53gPeA94OzwLngk+ACsAwsByvASrAK3MB0Ws3CtQjvBJvAVrADPMDSHkb4CNijaccTwvnf4fiPEs8Lxy+D18A/QU8/xjgYBjPAbDAKTgYLwOngTHAO+EQ/8wuEF4EvsPiVCFf2+9tsFStzA8LVHuXXBsi6QyqzUYiPMR/7Mc7dAx7oL8bzw/3u/Bw8Bp4Az4AXwCtgHzsmDXP5fiF9iiVvly5d0sHngar16NKlS5cuXbp06fLmYlqHXrcd3ph4P0THUY3iXh49novju4S0tzfs5d+JPKewfAsRntZb3K9ZhOMlrO6lCC8An28U9+OuovcPcPxlVu5rCL/VmHh/iHIrzn3fIPu7SN8Axmg+8AOwEWwCm7tp3bRuWjetm5Y8bSu4B9zbKO6ZVsnORrVU3f4uXTqZ2H3sLoyx3eDXjfDndE9qyj6L838CfwVvgFpzYnof4oNgOhgBc8Fos9DrZIQLmtXPP1MmF6wGj4H+KXoWguvADkXaPil+YpuQy8Am8Ey7ODdtmJDF4HowBp4De6HDTNjhfHAHeBr0DBBy0kDxfPbcgSIusgrcWhtnJ8vL+TPix7UIOQtcBq4C28Cr4KRBnANbwSuDE+s50JgyNNFuXbp06XIgsXjIvPafjvXozKY+fVFz/z0LT1uCtKVSWbrOLWPnztG8e0Xfy7ol8XtZJi7WtG+5od2UFXQ/A12vUeS7jp27yVKHjdsU9lXB869TyNvAzt0lpP2oWbwLdjiO78bx/Sz+EMJHwK9Y/LcIfw+eZ3F67/Hl5vh9xX80J+rwX8SvRDhpgL17iPAQMHNArfPrqHPewLheI+AERV6efwV418B4nOZ/H+IfYHV8GOF5LJ3eAz0fx8sM9S0fUNud39O9CulfGZhY5huI3wzWgNvBelbHZoTbNPVpfYjKQpkHwUNgl0LWblbnk0LbbDxr0OMFpL3iqWdu9nWYPlVAWkXY39LnGdCkDbeqv1YNbfcMQ3t9oe8lzm6NH9N1ZB6Ln4BwfkJZJk7RyFnYKt6b/JDQXx9p5X+eFdqOjzM9P9MB/lUlFzr20aXIdzlY4dmn9F3YqtvoO76/2hp/D/xA5Zue88nNyL8GbFbs075X0tyUig3Qd2MCnf//HjnzpbsR3g9+1kHzzVjdnE71/qVBX9rGPUh/ysNWe1neFzvIDi5zAufV1sT0N0poR22wkFUfTOPfA4N2mbZ5fSrqOHSw+IbkSBbOGSzSRgf91/GTUWYBOB2cIZQ/G8cfBZ8CFwrnL8XxF8FKcA24jqXdiPA7Qr61OF7H4mMItwzuv2/YLth1ISt3Hzu3k4W7EH5JqPdRHD/O4k+z8A8IX5Lq3y7Z4nXE9xn6kX6vQ4bKfy+ok+hH+xf3hq9dnTTHhjKd2GmDuWA242iHMq4cC7A8kJ7i8o1+skSa7Jieo38HCWnoNjKFhdSFBxzpZ7QE6lI8N4S14aASZcryaV/WWHw66f6NHuCoxuQxmvM56GX9QMd8Q4D65ywGP+ZzRJuM+zQvx/MOS2VFeqQ4IXnH26zM9Xe6/E6D+4foAzzuajPZp8Qyw5ayZVDWuH0z0BtYRkeIDqH9KO9VbH1btd/lhNqCzvl8zeLnG0S/hnU6baHfpiuO6yy0rd+DHURo/zYF5H26j03rQsip2ndzz82u1z9N4VjWKWeb68Tedpt95HRVXp7H1R6p+/Wt4FPy/PpWwscOLRJ+PVWF/+W0iVyGzs18TIvXkOJ1Wxm66vSXz+vylenrZcj1ub439W+K8RNCGTJi2p/TJ1K23VaXr35tRpnzmjxequgfcfyk6B/TGBVlyedsNgpdd/h+W1U3P99QyFPNo1X3TwpM/WLTIWYfoBqXrv6iskHZ/RFr79R6hIyHBrH3f1nrUVnjP8SnZZ+rYtzr9Exld5MNbPNErusAPg+77u/eDOPftU9yj39TH7rezxd1LvsZQJlzkWlOirG/79zjMj/mtHUKu7vKy+3/LnXr9okyKedjX5/0He9iP/j63LwOQdarEVlfy8OO/Lqw023j6xcqmwxLiOd6heM2i9cV9LJy8jMJ23yQ+rpbfu7EQ/pXE8KYvUSqvVnb4XzZa6LrHMXHR+zcLvqWbm/Bn0/HzIs6fWPHoat8XfnDKmZGxRxeMbn2UqZ5Q94nmcZRbqqUXbZ8+lcjE+cPX11t814orvvAXNcG8vqj2vvk1MGn3anlj0bIT72v47bvE+Lc98T9b6r7AKn6j+8Duf7D0nnZx/j7Zjn0j9nbpSTndaLr9WNLivP+iN23xF7L+fqv6ZouFyb78jxVXvv5jJ9YUs9/sddO8h7KNg5jrhfaJGztT6G7KF+1d6yCmD5Kdb2fan60rSc552fZr3zeQ9DpnPp+Si5cx5Ktv2QfSzF/mMbWdOm46rFI4XstnU9xeqX4NKb7TKEdcr6pZOK3ID1k/LvFHkVczEuZLEDr499YqvqBym1aEHWgcvoYOtv0M91qQl5TfpO/in6rWx8OVpT1Wedkv3f5xom3T/xeR/6Gx6V86PWAOB4bBpqWdN+yTcVxjIyGRz/FrDGu6w/3d7kPm8StX8RyPu+uuvpNju/vTLJV37GpvoM0oZPnW87VLnL/5pDno1NoW1R6yedU6TyUv3u19a3KFnIbTLYz+ZCLP4T0tU1uivFgso0pnsJ/UtXvarNY28Xq5cvkBDrQP/E5ZaiuQwwfmTlsOiQRU1fMuqrDd/3ISSuwjOwXOfTyGUMpZIXq4GpLn3pUcdfzch2x7XO1u2uZHOPb1G6b3Xg9PH1IIWeEpJlPQtqos2EKW8b0u8rnuP1UeVLoXJb9be0uG9nnbchjU+XTszT5VeNBThPHnc5OKj1U9aj0GTHIVaGy1YhEWT4ixns00DT+XEzWn/7VAsIc63Cov3OdyhwjrnaqQqZvWKXdypRdlq+k8msZ031U+Rm4fA+3TtyeR9hwfW9G9yxDN0fZMN33F+9TE6md4hwoxumfaUzI9fN3PFT3xVV2msrQ3UsnChm6Nulk8TndpS28D3zX9tTIPsF/z7Am5OkTjm1tI1JZW74+4VgsZ0N3L1yXV3WeP5uR7TGHHdvC3JQlxybfpd22tDlk/2eofRK8TzrN/qnar/K/OUTth6I/+jAnEptNbPvFHP2gs40N3+dfMWtwqvVct7/wfd8gtQ7imifial9ZJ9/3IHLYU6eDj3+4PhsNhX+vwvcWLnu6kGfEMe8DuciPfUfGZB8X/7HJy/Gefe5n+VRGFd/wyP2ta7/LO4yh/sbLV/k9lev6kfO9Dt/5U67b1/6u/epqB1U9Me23jfHY9sscAg4tkbLl+e4/U36rJ9ddxfd6sg5vq5ice42Wpk/pb9FOJ36/W9tpv4kbC79nUbZceX8Zu6/qJ+P3WvhvA8v3reh7Jbn2d6rrNC7XNZTLma4Ba0JI9efX2uLzF5scG/w9UNU1ZxW+ymUfzELeTllXlQ1rUuhzjS5fp9c964iFBOqeSz63bU065nZKdU+mDEz3qHIjjifquw0pnb/raRtvrnsYcb46ihT3taoYz6brdNW9l6rWRnE/navdPn1XlR1km7hcz1WlH/elKuSOSvLLuE8U6m8uzwRdfcGl73VyTHuyMvzJ1Sa2cWDTP/Z63Kc94n2B1PYr24dz1JlyHLlcP+S4B6vD1c9EW4q2LWstCvUjeVy63k/LMYdUNd5D1xQfvVTzX1VjkMsUv88N8VH5fReVn/Fjn++/h6X6Q8a6b1/q3g/i/ewi0/Scs8zxXeV6mWIOUPlPzBgdFerW+bZrm2P18dnjuK6HunEp+rHvPMXbr+sHVb/lnL+pTP57jPw9Cvk3PW178JD9qChfzuvTf7Htl38L1QUf/VKu9SFjwWbTWPvFEvu7Uq76y7+31g6QlYPc669pbsm9Xur2LWI9Pu8ypfDXqm3A2z8s1FWGn4ntL9NfQu2oSlftX9uetvTtv7J8Ql4zxfXGZ3zk8PeQ9w59x2uMfqI8/q5eKh/l9cb2rwsu9rSNl06ZP2Pmxtz+rNMx93yno0n2/82rVH7rQ+y9P15H6FyRun9ViH81ATmffI7nJ5r8uXXW6enbP6b/B8/l5OifVHYLnb9S39s2zcc+Ph+rh8+eQgVPS72elzGWY/tUtbbabBpDiI7yN1q6/4th2y+ErAc5+9BVvu/7KamJbWNZeuqI/R4tRf+YyD1HmOZM1bMV3/14Sn10c0Xu+Sj1nOXb5jL73ncdy02uvlXZNde65dOHYl7Vs4KYuS6FzWLn2zJlpZqPXPVPOa5yzKOyn1VhT9lmMfdbfH7D11Wf2PXN5h9y+dD287+qxgSnaYmnIrRtIb8pJe6/Uv9OVer6Whn0zfGO/BEloZI9ojmfAlUflClDd178bTmVHVTpZXOkAlk/lb42UujmI89HH5V+cl7XtowY6vTxLVWok6UrGzoGTHN+bB+6ri05687VNpvfuvRfaP2uMlNQth1D5JjGelm/8yn+9p3p/7qk9gnfeddXZmq/Sm333PJT659Kv1zjNbZ9uv2Oi//67CV8/N1nj1DmviyXDNVeJkaeaX8UsyesYg8cu2+NvdaPfb+lLDu5tvt/");
45188const $f898ea50f3b38ab8$var$classTrie = new ($parcel$interopDefault($kQ2hT$unicodetrie))($f898ea50f3b38ab8$var$data);
45189const $f898ea50f3b38ab8$var$mapClass = function(c) {
45190 switch(c){
45191 case $60ff486a304db230$export$d710c5f50fc7496a:
45192 return $60ff486a304db230$export$1bb1140fe1358b00;
45193 case $60ff486a304db230$export$da51c6332ad11d7b:
45194 case $60ff486a304db230$export$bea437c40441867d:
45195 case $60ff486a304db230$export$98e1f8a379849661:
45196 return $60ff486a304db230$export$1bb1140fe1358b00;
45197 case $60ff486a304db230$export$eb6c6d0b7c8826f2:
45198 return $60ff486a304db230$export$fb4028874a74450;
45199 default:
45200 return c;
45201 }
45202};
45203const $f898ea50f3b38ab8$var$mapFirst = function(c) {
45204 switch(c){
45205 case $60ff486a304db230$export$606cfc2a8896c91f:
45206 case $60ff486a304db230$export$e51d3c675bb0140d:
45207 return $60ff486a304db230$export$66498d28055820a9;
45208 case $60ff486a304db230$export$c4c7eecbfed13dc9:
45209 return $60ff486a304db230$export$9e5d732f3676a9ba;
45210 default:
45211 return c;
45212 }
45213};
45214class $f898ea50f3b38ab8$var$Break {
45215 constructor(position, required = false){
45216 this.position = position;
45217 this.required = required;
45218 }
45219}
45220class $f898ea50f3b38ab8$var$LineBreaker {
45221 nextCodePoint() {
45222 const code = this.string.charCodeAt(this.pos++);
45223 const next = this.string.charCodeAt(this.pos);
45224 // If a surrogate pair
45225 if (0xd800 <= code && code <= 0xdbff && 0xdc00 <= next && next <= 0xdfff) {
45226 this.pos++;
45227 return (code - 0xd800) * 0x400 + (next - 0xdc00) + 0x10000;
45228 }
45229 return code;
45230 }
45231 nextCharClass() {
45232 return $f898ea50f3b38ab8$var$mapClass($f898ea50f3b38ab8$var$classTrie.get(this.nextCodePoint()));
45233 }
45234 getSimpleBreak() {
45235 // handle classes not handled by the pair table
45236 switch(this.nextClass){
45237 case $60ff486a304db230$export$c4c7eecbfed13dc9:
45238 return false;
45239 case $60ff486a304db230$export$66498d28055820a9:
45240 case $60ff486a304db230$export$606cfc2a8896c91f:
45241 case $60ff486a304db230$export$e51d3c675bb0140d:
45242 this.curClass = $60ff486a304db230$export$66498d28055820a9;
45243 return false;
45244 case $60ff486a304db230$export$de92be486109a1df:
45245 this.curClass = $60ff486a304db230$export$de92be486109a1df;
45246 return false;
45247 }
45248 return null;
45249 }
45250 getPairTableBreak(lastClass) {
45251 // if not handled already, use the pair table
45252 let shouldBreak = false;
45253 switch($1b6fba3281342923$export$5bdb8ccbf5c57afc[this.curClass][this.nextClass]){
45254 case $1b6fba3281342923$export$98f50d781a474745:
45255 shouldBreak = true;
45256 break;
45257 case $1b6fba3281342923$export$12ee1f8f5315ca7e:
45258 shouldBreak = lastClass === $60ff486a304db230$export$c4c7eecbfed13dc9;
45259 break;
45260 case $1b6fba3281342923$export$e4965ce242860454:
45261 shouldBreak = lastClass === $60ff486a304db230$export$c4c7eecbfed13dc9;
45262 if (!shouldBreak) {
45263 shouldBreak = false;
45264 return shouldBreak;
45265 }
45266 break;
45267 case $1b6fba3281342923$export$8f14048969dcd45e:
45268 if (lastClass !== $60ff486a304db230$export$c4c7eecbfed13dc9) return shouldBreak;
45269 break;
45270 case $1b6fba3281342923$export$133eb141bf58aff4:
45271 break;
45272 }
45273 if (this.LB8a) shouldBreak = false;
45274 // Rule LB21a
45275 if (this.LB21a && (this.curClass === $60ff486a304db230$export$24aa617c849a894a || this.curClass === $60ff486a304db230$export$a73c4d14459b698d)) {
45276 shouldBreak = false;
45277 this.LB21a = false;
45278 } else this.LB21a = this.curClass === $60ff486a304db230$export$f3e416a182673355;
45279 // Rule LB30a
45280 if (this.curClass === $60ff486a304db230$export$1dff41d5c0caca01) {
45281 this.LB30a++;
45282 if (this.LB30a == 2 && this.nextClass === $60ff486a304db230$export$1dff41d5c0caca01) {
45283 shouldBreak = true;
45284 this.LB30a = 0;
45285 }
45286 } else this.LB30a = 0;
45287 this.curClass = this.nextClass;
45288 return shouldBreak;
45289 }
45290 nextBreak() {
45291 // get the first char if we're at the beginning of the string
45292 if (this.curClass == null) {
45293 let firstClass = this.nextCharClass();
45294 this.curClass = $f898ea50f3b38ab8$var$mapFirst(firstClass);
45295 this.nextClass = firstClass;
45296 this.LB8a = firstClass === $60ff486a304db230$export$30a74a373318dec6;
45297 this.LB30a = 0;
45298 }
45299 while(this.pos < this.string.length){
45300 this.lastPos = this.pos;
45301 const lastClass = this.nextClass;
45302 this.nextClass = this.nextCharClass();
45303 // explicit newline
45304 if (this.curClass === $60ff486a304db230$export$66498d28055820a9 || this.curClass === $60ff486a304db230$export$de92be486109a1df && this.nextClass !== $60ff486a304db230$export$606cfc2a8896c91f) {
45305 this.curClass = $f898ea50f3b38ab8$var$mapFirst($f898ea50f3b38ab8$var$mapClass(this.nextClass));
45306 return new $f898ea50f3b38ab8$var$Break(this.lastPos, true);
45307 }
45308 let shouldBreak = this.getSimpleBreak();
45309 if (shouldBreak === null) shouldBreak = this.getPairTableBreak(lastClass);
45310 // Rule LB8a
45311 this.LB8a = this.nextClass === $60ff486a304db230$export$30a74a373318dec6;
45312 if (shouldBreak) return new $f898ea50f3b38ab8$var$Break(this.lastPos);
45313 }
45314 if (this.lastPos < this.string.length) {
45315 this.lastPos = this.string.length;
45316 return new $f898ea50f3b38ab8$var$Break(this.string.length);
45317 }
45318 return null;
45319 }
45320 constructor(string){
45321 this.string = string;
45322 this.pos = 0;
45323 this.lastPos = 0;
45324 this.curClass = null;
45325 this.nextClass = null;
45326 this.LB8a = false;
45327 this.LB21a = false;
45328 this.LB30a = 0;
45329 }
45330}
45331module.exports = $f898ea50f3b38ab8$var$LineBreaker;
45332
45333
45334
45335
45336},{"base64-js":208,"unicode-trie":270}],208:[function(require,module,exports){
45337var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
45338
45339;(function (exports) {
45340 'use strict';
45341
45342 var Arr = (typeof Uint8Array !== 'undefined')
45343 ? Uint8Array
45344 : Array
45345
45346 var PLUS = '+'.charCodeAt(0)
45347 var SLASH = '/'.charCodeAt(0)
45348 var NUMBER = '0'.charCodeAt(0)
45349 var LOWER = 'a'.charCodeAt(0)
45350 var UPPER = 'A'.charCodeAt(0)
45351 var PLUS_URL_SAFE = '-'.charCodeAt(0)
45352 var SLASH_URL_SAFE = '_'.charCodeAt(0)
45353
45354 function decode (elt) {
45355 var code = elt.charCodeAt(0)
45356 if (code === PLUS ||
45357 code === PLUS_URL_SAFE)
45358 return 62 // '+'
45359 if (code === SLASH ||
45360 code === SLASH_URL_SAFE)
45361 return 63 // '/'
45362 if (code < NUMBER)
45363 return -1 //no match
45364 if (code < NUMBER + 10)
45365 return code - NUMBER + 26 + 26
45366 if (code < UPPER + 26)
45367 return code - UPPER
45368 if (code < LOWER + 26)
45369 return code - LOWER + 26
45370 }
45371
45372 function b64ToByteArray (b64) {
45373 var i, j, l, tmp, placeHolders, arr
45374
45375 if (b64.length % 4 > 0) {
45376 throw new Error('Invalid string. Length must be a multiple of 4')
45377 }
45378
45379 // the number of equal signs (place holders)
45380 // if there are two placeholders, than the two characters before it
45381 // represent one byte
45382 // if there is only one, then the three characters before it represent 2 bytes
45383 // this is just a cheap hack to not do indexOf twice
45384 var len = b64.length
45385 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
45386
45387 // base64 is 4/3 + up to two characters of the original data
45388 arr = new Arr(b64.length * 3 / 4 - placeHolders)
45389
45390 // if there are placeholders, only get up to the last complete 4 chars
45391 l = placeHolders > 0 ? b64.length - 4 : b64.length
45392
45393 var L = 0
45394
45395 function push (v) {
45396 arr[L++] = v
45397 }
45398
45399 for (i = 0, j = 0; i < l; i += 4, j += 3) {
45400 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
45401 push((tmp & 0xFF0000) >> 16)
45402 push((tmp & 0xFF00) >> 8)
45403 push(tmp & 0xFF)
45404 }
45405
45406 if (placeHolders === 2) {
45407 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
45408 push(tmp & 0xFF)
45409 } else if (placeHolders === 1) {
45410 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
45411 push((tmp >> 8) & 0xFF)
45412 push(tmp & 0xFF)
45413 }
45414
45415 return arr
45416 }
45417
45418 function uint8ToBase64 (uint8) {
45419 var i,
45420 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
45421 output = "",
45422 temp, length
45423
45424 function encode (num) {
45425 return lookup.charAt(num)
45426 }
45427
45428 function tripletToBase64 (num) {
45429 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
45430 }
45431
45432 // go through the array every three bytes, we'll deal with trailing stuff later
45433 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
45434 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
45435 output += tripletToBase64(temp)
45436 }
45437
45438 // pad the end with zeros, but make sure to not forget the extra bytes
45439 switch (extraBytes) {
45440 case 1:
45441 temp = uint8[uint8.length - 1]
45442 output += encode(temp >> 2)
45443 output += encode((temp << 4) & 0x3F)
45444 output += '=='
45445 break
45446 case 2:
45447 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
45448 output += encode(temp >> 10)
45449 output += encode((temp >> 4) & 0x3F)
45450 output += encode((temp << 2) & 0x3F)
45451 output += '='
45452 break
45453 }
45454
45455 return output
45456 }
45457
45458 exports.toByteArray = b64ToByteArray
45459 exports.fromByteArray = uint8ToBase64
45460}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
45461
45462},{}],209:[function(require,module,exports){
45463(function (global){(function (){
45464var hasMap = typeof Map === 'function' && Map.prototype;
45465var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;
45466var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;
45467var mapForEach = hasMap && Map.prototype.forEach;
45468var hasSet = typeof Set === 'function' && Set.prototype;
45469var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;
45470var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;
45471var setForEach = hasSet && Set.prototype.forEach;
45472var hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;
45473var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;
45474var hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;
45475var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;
45476var hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;
45477var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;
45478var booleanValueOf = Boolean.prototype.valueOf;
45479var objectToString = Object.prototype.toString;
45480var functionToString = Function.prototype.toString;
45481var $match = String.prototype.match;
45482var $slice = String.prototype.slice;
45483var $replace = String.prototype.replace;
45484var $toUpperCase = String.prototype.toUpperCase;
45485var $toLowerCase = String.prototype.toLowerCase;
45486var $test = RegExp.prototype.test;
45487var $concat = Array.prototype.concat;
45488var $join = Array.prototype.join;
45489var $arrSlice = Array.prototype.slice;
45490var $floor = Math.floor;
45491var bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;
45492var gOPS = Object.getOwnPropertySymbols;
45493var symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;
45494var hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';
45495// ie, `has-tostringtag/shams
45496var toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol')
45497 ? Symbol.toStringTag
45498 : null;
45499var isEnumerable = Object.prototype.propertyIsEnumerable;
45500
45501var gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (
45502 [].__proto__ === Array.prototype // eslint-disable-line no-proto
45503 ? function (O) {
45504 return O.__proto__; // eslint-disable-line no-proto
45505 }
45506 : null
45507);
45508
45509function addNumericSeparator(num, str) {
45510 if (
45511 num === Infinity
45512 || num === -Infinity
45513 || num !== num
45514 || (num && num > -1000 && num < 1000)
45515 || $test.call(/e/, str)
45516 ) {
45517 return str;
45518 }
45519 var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;
45520 if (typeof num === 'number') {
45521 var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)
45522 if (int !== num) {
45523 var intStr = String(int);
45524 var dec = $slice.call(str, intStr.length + 1);
45525 return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');
45526 }
45527 }
45528 return $replace.call(str, sepRegex, '$&_');
45529}
45530
45531var utilInspect = require('./util.inspect');
45532var inspectCustom = utilInspect.custom;
45533var inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;
45534
45535module.exports = function inspect_(obj, options, depth, seen) {
45536 var opts = options || {};
45537
45538 if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {
45539 throw new TypeError('option "quoteStyle" must be "single" or "double"');
45540 }
45541 if (
45542 has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'
45543 ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity
45544 : opts.maxStringLength !== null
45545 )
45546 ) {
45547 throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');
45548 }
45549 var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;
45550 if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {
45551 throw new TypeError('option "customInspect", if provided, must be `true`, `false`, or `\'symbol\'`');
45552 }
45553
45554 if (
45555 has(opts, 'indent')
45556 && opts.indent !== null
45557 && opts.indent !== '\t'
45558 && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)
45559 ) {
45560 throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');
45561 }
45562 if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {
45563 throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');
45564 }
45565 var numericSeparator = opts.numericSeparator;
45566
45567 if (typeof obj === 'undefined') {
45568 return 'undefined';
45569 }
45570 if (obj === null) {
45571 return 'null';
45572 }
45573 if (typeof obj === 'boolean') {
45574 return obj ? 'true' : 'false';
45575 }
45576
45577 if (typeof obj === 'string') {
45578 return inspectString(obj, opts);
45579 }
45580 if (typeof obj === 'number') {
45581 if (obj === 0) {
45582 return Infinity / obj > 0 ? '0' : '-0';
45583 }
45584 var str = String(obj);
45585 return numericSeparator ? addNumericSeparator(obj, str) : str;
45586 }
45587 if (typeof obj === 'bigint') {
45588 var bigIntStr = String(obj) + 'n';
45589 return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;
45590 }
45591
45592 var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;
45593 if (typeof depth === 'undefined') { depth = 0; }
45594 if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {
45595 return isArray(obj) ? '[Array]' : '[Object]';
45596 }
45597
45598 var indent = getIndent(opts, depth);
45599
45600 if (typeof seen === 'undefined') {
45601 seen = [];
45602 } else if (indexOf(seen, obj) >= 0) {
45603 return '[Circular]';
45604 }
45605
45606 function inspect(value, from, noIndent) {
45607 if (from) {
45608 seen = $arrSlice.call(seen);
45609 seen.push(from);
45610 }
45611 if (noIndent) {
45612 var newOpts = {
45613 depth: opts.depth
45614 };
45615 if (has(opts, 'quoteStyle')) {
45616 newOpts.quoteStyle = opts.quoteStyle;
45617 }
45618 return inspect_(value, newOpts, depth + 1, seen);
45619 }
45620 return inspect_(value, opts, depth + 1, seen);
45621 }
45622
45623 if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable
45624 var name = nameOf(obj);
45625 var keys = arrObjKeys(obj, inspect);
45626 return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');
45627 }
45628 if (isSymbol(obj)) {
45629 var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\(.*\))_[^)]*$/, '$1') : symToString.call(obj);
45630 return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;
45631 }
45632 if (isElement(obj)) {
45633 var s = '<' + $toLowerCase.call(String(obj.nodeName));
45634 var attrs = obj.attributes || [];
45635 for (var i = 0; i < attrs.length; i++) {
45636 s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);
45637 }
45638 s += '>';
45639 if (obj.childNodes && obj.childNodes.length) { s += '...'; }
45640 s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>';
45641 return s;
45642 }
45643 if (isArray(obj)) {
45644 if (obj.length === 0) { return '[]'; }
45645 var xs = arrObjKeys(obj, inspect);
45646 if (indent && !singleLineValues(xs)) {
45647 return '[' + indentedJoin(xs, indent) + ']';
45648 }
45649 return '[ ' + $join.call(xs, ', ') + ' ]';
45650 }
45651 if (isError(obj)) {
45652 var parts = arrObjKeys(obj, inspect);
45653 if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) {
45654 return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';
45655 }
45656 if (parts.length === 0) { return '[' + String(obj) + ']'; }
45657 return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';
45658 }
45659 if (typeof obj === 'object' && customInspect) {
45660 if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) {
45661 return utilInspect(obj, { depth: maxDepth - depth });
45662 } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {
45663 return obj.inspect();
45664 }
45665 }
45666 if (isMap(obj)) {
45667 var mapParts = [];
45668 if (mapForEach) {
45669 mapForEach.call(obj, function (value, key) {
45670 mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));
45671 });
45672 }
45673 return collectionOf('Map', mapSize.call(obj), mapParts, indent);
45674 }
45675 if (isSet(obj)) {
45676 var setParts = [];
45677 if (setForEach) {
45678 setForEach.call(obj, function (value) {
45679 setParts.push(inspect(value, obj));
45680 });
45681 }
45682 return collectionOf('Set', setSize.call(obj), setParts, indent);
45683 }
45684 if (isWeakMap(obj)) {
45685 return weakCollectionOf('WeakMap');
45686 }
45687 if (isWeakSet(obj)) {
45688 return weakCollectionOf('WeakSet');
45689 }
45690 if (isWeakRef(obj)) {
45691 return weakCollectionOf('WeakRef');
45692 }
45693 if (isNumber(obj)) {
45694 return markBoxed(inspect(Number(obj)));
45695 }
45696 if (isBigInt(obj)) {
45697 return markBoxed(inspect(bigIntValueOf.call(obj)));
45698 }
45699 if (isBoolean(obj)) {
45700 return markBoxed(booleanValueOf.call(obj));
45701 }
45702 if (isString(obj)) {
45703 return markBoxed(inspect(String(obj)));
45704 }
45705 // note: in IE 8, sometimes `global !== window` but both are the prototypes of each other
45706 /* eslint-env browser */
45707 if (typeof window !== 'undefined' && obj === window) {
45708 return '{ [object Window] }';
45709 }
45710 if (obj === global) {
45711 return '{ [object globalThis] }';
45712 }
45713 if (!isDate(obj) && !isRegExp(obj)) {
45714 var ys = arrObjKeys(obj, inspect);
45715 var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;
45716 var protoTag = obj instanceof Object ? '' : 'null prototype';
45717 var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';
45718 var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';
45719 var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');
45720 if (ys.length === 0) { return tag + '{}'; }
45721 if (indent) {
45722 return tag + '{' + indentedJoin(ys, indent) + '}';
45723 }
45724 return tag + '{ ' + $join.call(ys, ', ') + ' }';
45725 }
45726 return String(obj);
45727};
45728
45729function wrapQuotes(s, defaultStyle, opts) {
45730 var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '"' : "'";
45731 return quoteChar + s + quoteChar;
45732}
45733
45734function quote(s) {
45735 return $replace.call(String(s), /"/g, '&quot;');
45736}
45737
45738function isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
45739function isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
45740function isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
45741function isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
45742function isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
45743function isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
45744function isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }
45745
45746// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives
45747function isSymbol(obj) {
45748 if (hasShammedSymbols) {
45749 return obj && typeof obj === 'object' && obj instanceof Symbol;
45750 }
45751 if (typeof obj === 'symbol') {
45752 return true;
45753 }
45754 if (!obj || typeof obj !== 'object' || !symToString) {
45755 return false;
45756 }
45757 try {
45758 symToString.call(obj);
45759 return true;
45760 } catch (e) {}
45761 return false;
45762}
45763
45764function isBigInt(obj) {
45765 if (!obj || typeof obj !== 'object' || !bigIntValueOf) {
45766 return false;
45767 }
45768 try {
45769 bigIntValueOf.call(obj);
45770 return true;
45771 } catch (e) {}
45772 return false;
45773}
45774
45775var hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };
45776function has(obj, key) {
45777 return hasOwn.call(obj, key);
45778}
45779
45780function toStr(obj) {
45781 return objectToString.call(obj);
45782}
45783
45784function nameOf(f) {
45785 if (f.name) { return f.name; }
45786 var m = $match.call(functionToString.call(f), /^function\s*([\w$]+)/);
45787 if (m) { return m[1]; }
45788 return null;
45789}
45790
45791function indexOf(xs, x) {
45792 if (xs.indexOf) { return xs.indexOf(x); }
45793 for (var i = 0, l = xs.length; i < l; i++) {
45794 if (xs[i] === x) { return i; }
45795 }
45796 return -1;
45797}
45798
45799function isMap(x) {
45800 if (!mapSize || !x || typeof x !== 'object') {
45801 return false;
45802 }
45803 try {
45804 mapSize.call(x);
45805 try {
45806 setSize.call(x);
45807 } catch (s) {
45808 return true;
45809 }
45810 return x instanceof Map; // core-js workaround, pre-v2.5.0
45811 } catch (e) {}
45812 return false;
45813}
45814
45815function isWeakMap(x) {
45816 if (!weakMapHas || !x || typeof x !== 'object') {
45817 return false;
45818 }
45819 try {
45820 weakMapHas.call(x, weakMapHas);
45821 try {
45822 weakSetHas.call(x, weakSetHas);
45823 } catch (s) {
45824 return true;
45825 }
45826 return x instanceof WeakMap; // core-js workaround, pre-v2.5.0
45827 } catch (e) {}
45828 return false;
45829}
45830
45831function isWeakRef(x) {
45832 if (!weakRefDeref || !x || typeof x !== 'object') {
45833 return false;
45834 }
45835 try {
45836 weakRefDeref.call(x);
45837 return true;
45838 } catch (e) {}
45839 return false;
45840}
45841
45842function isSet(x) {
45843 if (!setSize || !x || typeof x !== 'object') {
45844 return false;
45845 }
45846 try {
45847 setSize.call(x);
45848 try {
45849 mapSize.call(x);
45850 } catch (m) {
45851 return true;
45852 }
45853 return x instanceof Set; // core-js workaround, pre-v2.5.0
45854 } catch (e) {}
45855 return false;
45856}
45857
45858function isWeakSet(x) {
45859 if (!weakSetHas || !x || typeof x !== 'object') {
45860 return false;
45861 }
45862 try {
45863 weakSetHas.call(x, weakSetHas);
45864 try {
45865 weakMapHas.call(x, weakMapHas);
45866 } catch (s) {
45867 return true;
45868 }
45869 return x instanceof WeakSet; // core-js workaround, pre-v2.5.0
45870 } catch (e) {}
45871 return false;
45872}
45873
45874function isElement(x) {
45875 if (!x || typeof x !== 'object') { return false; }
45876 if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {
45877 return true;
45878 }
45879 return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';
45880}
45881
45882function inspectString(str, opts) {
45883 if (str.length > opts.maxStringLength) {
45884 var remaining = str.length - opts.maxStringLength;
45885 var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');
45886 return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;
45887 }
45888 // eslint-disable-next-line no-control-regex
45889 var s = $replace.call($replace.call(str, /(['\\])/g, '\\$1'), /[\x00-\x1f]/g, lowbyte);
45890 return wrapQuotes(s, 'single', opts);
45891}
45892
45893function lowbyte(c) {
45894 var n = c.charCodeAt(0);
45895 var x = {
45896 8: 'b',
45897 9: 't',
45898 10: 'n',
45899 12: 'f',
45900 13: 'r'
45901 }[n];
45902 if (x) { return '\\' + x; }
45903 return '\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));
45904}
45905
45906function markBoxed(str) {
45907 return 'Object(' + str + ')';
45908}
45909
45910function weakCollectionOf(type) {
45911 return type + ' { ? }';
45912}
45913
45914function collectionOf(type, size, entries, indent) {
45915 var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');
45916 return type + ' (' + size + ') {' + joinedEntries + '}';
45917}
45918
45919function singleLineValues(xs) {
45920 for (var i = 0; i < xs.length; i++) {
45921 if (indexOf(xs[i], '\n') >= 0) {
45922 return false;
45923 }
45924 }
45925 return true;
45926}
45927
45928function getIndent(opts, depth) {
45929 var baseIndent;
45930 if (opts.indent === '\t') {
45931 baseIndent = '\t';
45932 } else if (typeof opts.indent === 'number' && opts.indent > 0) {
45933 baseIndent = $join.call(Array(opts.indent + 1), ' ');
45934 } else {
45935 return null;
45936 }
45937 return {
45938 base: baseIndent,
45939 prev: $join.call(Array(depth + 1), baseIndent)
45940 };
45941}
45942
45943function indentedJoin(xs, indent) {
45944 if (xs.length === 0) { return ''; }
45945 var lineJoiner = '\n' + indent.prev + indent.base;
45946 return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\n' + indent.prev;
45947}
45948
45949function arrObjKeys(obj, inspect) {
45950 var isArr = isArray(obj);
45951 var xs = [];
45952 if (isArr) {
45953 xs.length = obj.length;
45954 for (var i = 0; i < obj.length; i++) {
45955 xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';
45956 }
45957 }
45958 var syms = typeof gOPS === 'function' ? gOPS(obj) : [];
45959 var symMap;
45960 if (hasShammedSymbols) {
45961 symMap = {};
45962 for (var k = 0; k < syms.length; k++) {
45963 symMap['$' + syms[k]] = syms[k];
45964 }
45965 }
45966
45967 for (var key in obj) { // eslint-disable-line no-restricted-syntax
45968 if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue
45969 if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue
45970 if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {
45971 // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section
45972 continue; // eslint-disable-line no-restricted-syntax, no-continue
45973 } else if ($test.call(/[^\w$]/, key)) {
45974 xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));
45975 } else {
45976 xs.push(key + ': ' + inspect(obj[key], obj));
45977 }
45978 }
45979 if (typeof gOPS === 'function') {
45980 for (var j = 0; j < syms.length; j++) {
45981 if (isEnumerable.call(obj, syms[j])) {
45982 xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));
45983 }
45984 }
45985 }
45986 return xs;
45987}
45988
45989}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
45990},{"./util.inspect":99}],210:[function(require,module,exports){
45991'use strict';
45992
45993var numberIsNaN = function (value) {
45994 return value !== value;
45995};
45996
45997module.exports = function is(a, b) {
45998 if (a === 0 && b === 0) {
45999 return 1 / a === 1 / b;
46000 }
46001 if (a === b) {
46002 return true;
46003 }
46004 if (numberIsNaN(a) && numberIsNaN(b)) {
46005 return true;
46006 }
46007 return false;
46008};
46009
46010
46011},{}],211:[function(require,module,exports){
46012'use strict';
46013
46014var define = require('define-properties');
46015var callBind = require('call-bind');
46016
46017var implementation = require('./implementation');
46018var getPolyfill = require('./polyfill');
46019var shim = require('./shim');
46020
46021var polyfill = callBind(getPolyfill(), Object);
46022
46023define(polyfill, {
46024 getPolyfill: getPolyfill,
46025 implementation: implementation,
46026 shim: shim
46027});
46028
46029module.exports = polyfill;
46030
46031},{"./implementation":210,"./polyfill":212,"./shim":213,"call-bind":116,"define-properties":158}],212:[function(require,module,exports){
46032'use strict';
46033
46034var implementation = require('./implementation');
46035
46036module.exports = function getPolyfill() {
46037 return typeof Object.is === 'function' ? Object.is : implementation;
46038};
46039
46040},{"./implementation":210}],213:[function(require,module,exports){
46041'use strict';
46042
46043var getPolyfill = require('./polyfill');
46044var define = require('define-properties');
46045
46046module.exports = function shimObjectIs() {
46047 var polyfill = getPolyfill();
46048 define(Object, { is: polyfill }, {
46049 is: function testObjectIs() {
46050 return Object.is !== polyfill;
46051 }
46052 });
46053 return polyfill;
46054};
46055
46056},{"./polyfill":212,"define-properties":158}],214:[function(require,module,exports){
46057'use strict';
46058
46059var keysShim;
46060if (!Object.keys) {
46061 // modified from https://github.com/es-shims/es5-shim
46062 var has = Object.prototype.hasOwnProperty;
46063 var toStr = Object.prototype.toString;
46064 var isArgs = require('./isArguments'); // eslint-disable-line global-require
46065 var isEnumerable = Object.prototype.propertyIsEnumerable;
46066 var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');
46067 var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');
46068 var dontEnums = [
46069 'toString',
46070 'toLocaleString',
46071 'valueOf',
46072 'hasOwnProperty',
46073 'isPrototypeOf',
46074 'propertyIsEnumerable',
46075 'constructor'
46076 ];
46077 var equalsConstructorPrototype = function (o) {
46078 var ctor = o.constructor;
46079 return ctor && ctor.prototype === o;
46080 };
46081 var excludedKeys = {
46082 $applicationCache: true,
46083 $console: true,
46084 $external: true,
46085 $frame: true,
46086 $frameElement: true,
46087 $frames: true,
46088 $innerHeight: true,
46089 $innerWidth: true,
46090 $onmozfullscreenchange: true,
46091 $onmozfullscreenerror: true,
46092 $outerHeight: true,
46093 $outerWidth: true,
46094 $pageXOffset: true,
46095 $pageYOffset: true,
46096 $parent: true,
46097 $scrollLeft: true,
46098 $scrollTop: true,
46099 $scrollX: true,
46100 $scrollY: true,
46101 $self: true,
46102 $webkitIndexedDB: true,
46103 $webkitStorageInfo: true,
46104 $window: true
46105 };
46106 var hasAutomationEqualityBug = (function () {
46107 /* global window */
46108 if (typeof window === 'undefined') { return false; }
46109 for (var k in window) {
46110 try {
46111 if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {
46112 try {
46113 equalsConstructorPrototype(window[k]);
46114 } catch (e) {
46115 return true;
46116 }
46117 }
46118 } catch (e) {
46119 return true;
46120 }
46121 }
46122 return false;
46123 }());
46124 var equalsConstructorPrototypeIfNotBuggy = function (o) {
46125 /* global window */
46126 if (typeof window === 'undefined' || !hasAutomationEqualityBug) {
46127 return equalsConstructorPrototype(o);
46128 }
46129 try {
46130 return equalsConstructorPrototype(o);
46131 } catch (e) {
46132 return false;
46133 }
46134 };
46135
46136 keysShim = function keys(object) {
46137 var isObject = object !== null && typeof object === 'object';
46138 var isFunction = toStr.call(object) === '[object Function]';
46139 var isArguments = isArgs(object);
46140 var isString = isObject && toStr.call(object) === '[object String]';
46141 var theKeys = [];
46142
46143 if (!isObject && !isFunction && !isArguments) {
46144 throw new TypeError('Object.keys called on a non-object');
46145 }
46146
46147 var skipProto = hasProtoEnumBug && isFunction;
46148 if (isString && object.length > 0 && !has.call(object, 0)) {
46149 for (var i = 0; i < object.length; ++i) {
46150 theKeys.push(String(i));
46151 }
46152 }
46153
46154 if (isArguments && object.length > 0) {
46155 for (var j = 0; j < object.length; ++j) {
46156 theKeys.push(String(j));
46157 }
46158 } else {
46159 for (var name in object) {
46160 if (!(skipProto && name === 'prototype') && has.call(object, name)) {
46161 theKeys.push(String(name));
46162 }
46163 }
46164 }
46165
46166 if (hasDontEnumBug) {
46167 var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
46168
46169 for (var k = 0; k < dontEnums.length; ++k) {
46170 if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {
46171 theKeys.push(dontEnums[k]);
46172 }
46173 }
46174 }
46175 return theKeys;
46176 };
46177}
46178module.exports = keysShim;
46179
46180},{"./isArguments":216}],215:[function(require,module,exports){
46181'use strict';
46182
46183var slice = Array.prototype.slice;
46184var isArgs = require('./isArguments');
46185
46186var origKeys = Object.keys;
46187var keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');
46188
46189var originalKeys = Object.keys;
46190
46191keysShim.shim = function shimObjectKeys() {
46192 if (Object.keys) {
46193 var keysWorksWithArguments = (function () {
46194 // Safari 5.0 bug
46195 var args = Object.keys(arguments);
46196 return args && args.length === arguments.length;
46197 }(1, 2));
46198 if (!keysWorksWithArguments) {
46199 Object.keys = function keys(object) { // eslint-disable-line func-name-matching
46200 if (isArgs(object)) {
46201 return originalKeys(slice.call(object));
46202 }
46203 return originalKeys(object);
46204 };
46205 }
46206 } else {
46207 Object.keys = keysShim;
46208 }
46209 return Object.keys || keysShim;
46210};
46211
46212module.exports = keysShim;
46213
46214},{"./implementation":214,"./isArguments":216}],216:[function(require,module,exports){
46215'use strict';
46216
46217var toStr = Object.prototype.toString;
46218
46219module.exports = function isArguments(value) {
46220 var str = toStr.call(value);
46221 var isArgs = str === '[object Arguments]';
46222 if (!isArgs) {
46223 isArgs = str !== '[object Array]' &&
46224 value !== null &&
46225 typeof value === 'object' &&
46226 typeof value.length === 'number' &&
46227 value.length >= 0 &&
46228 toStr.call(value.callee) === '[object Function]';
46229 }
46230 return isArgs;
46231};
46232
46233},{}],217:[function(require,module,exports){
46234'use strict';
46235
46236// modified from https://github.com/es-shims/es6-shim
46237var objectKeys = require('object-keys');
46238var hasSymbols = require('has-symbols/shams')();
46239var callBound = require('call-bind/callBound');
46240var toObject = Object;
46241var $push = callBound('Array.prototype.push');
46242var $propIsEnumerable = callBound('Object.prototype.propertyIsEnumerable');
46243var originalGetSymbols = hasSymbols ? Object.getOwnPropertySymbols : null;
46244
46245// eslint-disable-next-line no-unused-vars
46246module.exports = function assign(target, source1) {
46247 if (target == null) { throw new TypeError('target must be an object'); }
46248 var to = toObject(target); // step 1
46249 if (arguments.length === 1) {
46250 return to; // step 2
46251 }
46252 for (var s = 1; s < arguments.length; ++s) {
46253 var from = toObject(arguments[s]); // step 3.a.i
46254
46255 // step 3.a.ii:
46256 var keys = objectKeys(from);
46257 var getSymbols = hasSymbols && (Object.getOwnPropertySymbols || originalGetSymbols);
46258 if (getSymbols) {
46259 var syms = getSymbols(from);
46260 for (var j = 0; j < syms.length; ++j) {
46261 var key = syms[j];
46262 if ($propIsEnumerable(from, key)) {
46263 $push(keys, key);
46264 }
46265 }
46266 }
46267
46268 // step 3.a.iii:
46269 for (var i = 0; i < keys.length; ++i) {
46270 var nextKey = keys[i];
46271 if ($propIsEnumerable(from, nextKey)) { // step 3.a.iii.2
46272 var propValue = from[nextKey]; // step 3.a.iii.2.a
46273 to[nextKey] = propValue; // step 3.a.iii.2.b
46274 }
46275 }
46276 }
46277
46278 return to; // step 4
46279};
46280
46281},{"call-bind/callBound":115,"has-symbols/shams":183,"object-keys":215}],218:[function(require,module,exports){
46282'use strict';
46283
46284var defineProperties = require('define-properties');
46285var callBind = require('call-bind');
46286
46287var implementation = require('./implementation');
46288var getPolyfill = require('./polyfill');
46289var shim = require('./shim');
46290
46291var polyfill = callBind.apply(getPolyfill());
46292// eslint-disable-next-line no-unused-vars
46293var bound = function assign(target, source1) {
46294 return polyfill(Object, arguments);
46295};
46296
46297defineProperties(bound, {
46298 getPolyfill: getPolyfill,
46299 implementation: implementation,
46300 shim: shim
46301});
46302
46303module.exports = bound;
46304
46305},{"./implementation":217,"./polyfill":219,"./shim":220,"call-bind":116,"define-properties":158}],219:[function(require,module,exports){
46306'use strict';
46307
46308var implementation = require('./implementation');
46309
46310var lacksProperEnumerationOrder = function () {
46311 if (!Object.assign) {
46312 return false;
46313 }
46314 /*
46315 * v8, specifically in node 4.x, has a bug with incorrect property enumeration order
46316 * note: this does not detect the bug unless there's 20 characters
46317 */
46318 var str = 'abcdefghijklmnopqrst';
46319 var letters = str.split('');
46320 var map = {};
46321 for (var i = 0; i < letters.length; ++i) {
46322 map[letters[i]] = letters[i];
46323 }
46324 var obj = Object.assign({}, map);
46325 var actual = '';
46326 for (var k in obj) {
46327 actual += k;
46328 }
46329 return str !== actual;
46330};
46331
46332var assignHasPendingExceptions = function () {
46333 if (!Object.assign || !Object.preventExtensions) {
46334 return false;
46335 }
46336 /*
46337 * Firefox 37 still has "pending exception" logic in its Object.assign implementation,
46338 * which is 72% slower than our shim, and Firefox 40's native implementation.
46339 */
46340 var thrower = Object.preventExtensions({ 1: 2 });
46341 try {
46342 Object.assign(thrower, 'xy');
46343 } catch (e) {
46344 return thrower[1] === 'y';
46345 }
46346 return false;
46347};
46348
46349module.exports = function getPolyfill() {
46350 if (!Object.assign) {
46351 return implementation;
46352 }
46353 if (lacksProperEnumerationOrder()) {
46354 return implementation;
46355 }
46356 if (assignHasPendingExceptions()) {
46357 return implementation;
46358 }
46359 return Object.assign;
46360};
46361
46362},{"./implementation":217}],220:[function(require,module,exports){
46363'use strict';
46364
46365var define = require('define-properties');
46366var getPolyfill = require('./polyfill');
46367
46368module.exports = function shimAssign() {
46369 var polyfill = getPolyfill();
46370 define(
46371 Object,
46372 { assign: polyfill },
46373 { assign: function () { return Object.assign !== polyfill; } }
46374 );
46375 return polyfill;
46376};
46377
46378},{"./polyfill":219,"define-properties":158}],221:[function(require,module,exports){
46379(function (Buffer){(function (){
46380/*
46381 * MIT LICENSE
46382 * Copyright (c) 2011 Devon Govett
46383 *
46384 * Permission is hereby granted, free of charge, to any person obtaining a copy of this
46385 * software and associated documentation files (the "Software"), to deal in the Software
46386 * without restriction, including without limitation the rights to use, copy, modify, merge,
46387 * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
46388 * to whom the Software is furnished to do so, subject to the following conditions:
46389 *
46390 * The above copyright notice and this permission notice shall be included in all copies or
46391 * substantial portions of the Software.
46392 *
46393 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
46394 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
46395 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
46396 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
46397 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
46398 */
46399
46400const fs = require('fs');
46401const zlib = require('zlib');
46402
46403module.exports = class PNG {
46404 static decode(path, fn) {
46405 return fs.readFile(path, function(err, file) {
46406 const png = new PNG(file);
46407 return png.decode(pixels => fn(pixels));
46408 });
46409 }
46410
46411 static load(path) {
46412 const file = fs.readFileSync(path);
46413 return new PNG(file);
46414 }
46415
46416 constructor(data) {
46417 let i;
46418 this.data = data;
46419 this.pos = 8; // Skip the default header
46420
46421 this.palette = [];
46422 this.imgData = [];
46423 this.transparency = {};
46424 this.text = {};
46425
46426 while (true) {
46427 const chunkSize = this.readUInt32();
46428 let section = '';
46429 for (i = 0; i < 4; i++) {
46430 section += String.fromCharCode(this.data[this.pos++]);
46431 }
46432
46433 switch (section) {
46434 case 'IHDR':
46435 // we can grab interesting values from here (like width, height, etc)
46436 this.width = this.readUInt32();
46437 this.height = this.readUInt32();
46438 this.bits = this.data[this.pos++];
46439 this.colorType = this.data[this.pos++];
46440 this.compressionMethod = this.data[this.pos++];
46441 this.filterMethod = this.data[this.pos++];
46442 this.interlaceMethod = this.data[this.pos++];
46443 break;
46444
46445 case 'PLTE':
46446 this.palette = this.read(chunkSize);
46447 break;
46448
46449 case 'IDAT':
46450 for (i = 0; i < chunkSize; i++) {
46451 this.imgData.push(this.data[this.pos++]);
46452 }
46453 break;
46454
46455 case 'tRNS':
46456 // This chunk can only occur once and it must occur after the
46457 // PLTE chunk and before the IDAT chunk.
46458 this.transparency = {};
46459 switch (this.colorType) {
46460 case 3:
46461 // Indexed color, RGB. Each byte in this chunk is an alpha for
46462 // the palette index in the PLTE ("palette") chunk up until the
46463 // last non-opaque entry. Set up an array, stretching over all
46464 // palette entries which will be 0 (opaque) or 1 (transparent).
46465 this.transparency.indexed = this.read(chunkSize);
46466 var short = 255 - this.transparency.indexed.length;
46467 if (short > 0) {
46468 for (i = 0; i < short; i++) {
46469 this.transparency.indexed.push(255);
46470 }
46471 }
46472 break;
46473 case 0:
46474 // Greyscale. Corresponding to entries in the PLTE chunk.
46475 // Grey is two bytes, range 0 .. (2 ^ bit-depth) - 1
46476 this.transparency.grayscale = this.read(chunkSize)[0];
46477 break;
46478 case 2:
46479 // True color with proper alpha channel.
46480 this.transparency.rgb = this.read(chunkSize);
46481 break;
46482 }
46483 break;
46484
46485 case 'tEXt':
46486 var text = this.read(chunkSize);
46487 var index = text.indexOf(0);
46488 var key = String.fromCharCode.apply(String, text.slice(0, index));
46489 this.text[key] = String.fromCharCode.apply(
46490 String,
46491 text.slice(index + 1)
46492 );
46493 break;
46494
46495 case 'IEND':
46496 // we've got everything we need!
46497 switch (this.colorType) {
46498 case 0:
46499 case 3:
46500 case 4:
46501 this.colors = 1;
46502 break;
46503 case 2:
46504 case 6:
46505 this.colors = 3;
46506 break;
46507 }
46508
46509 this.hasAlphaChannel = [4, 6].includes(this.colorType);
46510 var colors = this.colors + (this.hasAlphaChannel ? 1 : 0);
46511 this.pixelBitlength = this.bits * colors;
46512
46513 switch (this.colors) {
46514 case 1:
46515 this.colorSpace = 'DeviceGray';
46516 break;
46517 case 3:
46518 this.colorSpace = 'DeviceRGB';
46519 break;
46520 }
46521
46522 this.imgData = new Buffer(this.imgData);
46523 return;
46524 break;
46525
46526 default:
46527 // unknown (or unimportant) section, skip it
46528 this.pos += chunkSize;
46529 }
46530
46531 this.pos += 4; // Skip the CRC
46532
46533 if (this.pos > this.data.length) {
46534 throw new Error('Incomplete or corrupt PNG file');
46535 }
46536 }
46537 }
46538
46539 read(bytes) {
46540 const result = new Array(bytes);
46541 for (let i = 0; i < bytes; i++) {
46542 result[i] = this.data[this.pos++];
46543 }
46544 return result;
46545 }
46546
46547 readUInt32() {
46548 const b1 = this.data[this.pos++] << 24;
46549 const b2 = this.data[this.pos++] << 16;
46550 const b3 = this.data[this.pos++] << 8;
46551 const b4 = this.data[this.pos++];
46552 return b1 | b2 | b3 | b4;
46553 }
46554
46555 readUInt16() {
46556 const b1 = this.data[this.pos++] << 8;
46557 const b2 = this.data[this.pos++];
46558 return b1 | b2;
46559 }
46560
46561 decodePixels(fn) {
46562 return zlib.inflate(this.imgData, (err, data) => {
46563 if (err) {
46564 throw err;
46565 }
46566
46567 const { width, height } = this;
46568 const pixelBytes = this.pixelBitlength / 8;
46569
46570 const pixels = new Buffer(width * height * pixelBytes);
46571 const { length } = data;
46572 let pos = 0;
46573
46574 function pass(x0, y0, dx, dy, singlePass = false) {
46575 const w = Math.ceil((width - x0) / dx);
46576 const h = Math.ceil((height - y0) / dy);
46577 const scanlineLength = pixelBytes * w;
46578 const buffer = singlePass ? pixels : new Buffer(scanlineLength * h);
46579 let row = 0;
46580 let c = 0;
46581 while (row < h && pos < length) {
46582 var byte, col, i, left, upper;
46583 switch (data[pos++]) {
46584 case 0: // None
46585 for (i = 0; i < scanlineLength; i++) {
46586 buffer[c++] = data[pos++];
46587 }
46588 break;
46589
46590 case 1: // Sub
46591 for (i = 0; i < scanlineLength; i++) {
46592 byte = data[pos++];
46593 left = i < pixelBytes ? 0 : buffer[c - pixelBytes];
46594 buffer[c++] = (byte + left) % 256;
46595 }
46596 break;
46597
46598 case 2: // Up
46599 for (i = 0; i < scanlineLength; i++) {
46600 byte = data[pos++];
46601 col = (i - (i % pixelBytes)) / pixelBytes;
46602 upper =
46603 row &&
46604 buffer[
46605 (row - 1) * scanlineLength +
46606 col * pixelBytes +
46607 (i % pixelBytes)
46608 ];
46609 buffer[c++] = (upper + byte) % 256;
46610 }
46611 break;
46612
46613 case 3: // Average
46614 for (i = 0; i < scanlineLength; i++) {
46615 byte = data[pos++];
46616 col = (i - (i % pixelBytes)) / pixelBytes;
46617 left = i < pixelBytes ? 0 : buffer[c - pixelBytes];
46618 upper =
46619 row &&
46620 buffer[
46621 (row - 1) * scanlineLength +
46622 col * pixelBytes +
46623 (i % pixelBytes)
46624 ];
46625 buffer[c++] = (byte + Math.floor((left + upper) / 2)) % 256;
46626 }
46627 break;
46628
46629 case 4: // Paeth
46630 for (i = 0; i < scanlineLength; i++) {
46631 var paeth, upperLeft;
46632 byte = data[pos++];
46633 col = (i - (i % pixelBytes)) / pixelBytes;
46634 left = i < pixelBytes ? 0 : buffer[c - pixelBytes];
46635
46636 if (row === 0) {
46637 upper = upperLeft = 0;
46638 } else {
46639 upper =
46640 buffer[
46641 (row - 1) * scanlineLength +
46642 col * pixelBytes +
46643 (i % pixelBytes)
46644 ];
46645 upperLeft =
46646 col &&
46647 buffer[
46648 (row - 1) * scanlineLength +
46649 (col - 1) * pixelBytes +
46650 (i % pixelBytes)
46651 ];
46652 }
46653
46654 const p = left + upper - upperLeft;
46655 const pa = Math.abs(p - left);
46656 const pb = Math.abs(p - upper);
46657 const pc = Math.abs(p - upperLeft);
46658
46659 if (pa <= pb && pa <= pc) {
46660 paeth = left;
46661 } else if (pb <= pc) {
46662 paeth = upper;
46663 } else {
46664 paeth = upperLeft;
46665 }
46666
46667 buffer[c++] = (byte + paeth) % 256;
46668 }
46669 break;
46670
46671 default:
46672 throw new Error(`Invalid filter algorithm: ${data[pos - 1]}`);
46673 }
46674
46675 if (!singlePass) {
46676 let pixelsPos = ((y0 + row * dy) * width + x0) * pixelBytes;
46677 let bufferPos = row * scanlineLength;
46678 for (i = 0; i < w; i++) {
46679 for (let j = 0; j < pixelBytes; j++)
46680 pixels[pixelsPos++] = buffer[bufferPos++];
46681 pixelsPos += (dx - 1) * pixelBytes;
46682 }
46683 }
46684
46685 row++;
46686 }
46687 }
46688
46689 if (this.interlaceMethod === 1) {
46690 /*
46691 1 6 4 6 2 6 4 6
46692 7 7 7 7 7 7 7 7
46693 5 6 5 6 5 6 5 6
46694 7 7 7 7 7 7 7 7
46695 3 6 4 6 3 6 4 6
46696 7 7 7 7 7 7 7 7
46697 5 6 5 6 5 6 5 6
46698 7 7 7 7 7 7 7 7
46699 */
46700 pass(0, 0, 8, 8); // 1
46701 pass(4, 0, 8, 8); // 2
46702 pass(0, 4, 4, 8); // 3
46703 pass(2, 0, 4, 4); // 4
46704 pass(0, 2, 2, 4); // 5
46705 pass(1, 0, 2, 2); // 6
46706 pass(0, 1, 1, 2); // 7
46707 } else {
46708 pass(0, 0, 1, 1, true);
46709 }
46710
46711 return fn(pixels);
46712 });
46713 }
46714
46715 decodePalette() {
46716 const { palette } = this;
46717 const { length } = palette;
46718 const transparency = this.transparency.indexed || [];
46719 const ret = new Buffer(transparency.length + length);
46720 let pos = 0;
46721 let c = 0;
46722
46723 for (let i = 0; i < length; i += 3) {
46724 var left;
46725 ret[pos++] = palette[i];
46726 ret[pos++] = palette[i + 1];
46727 ret[pos++] = palette[i + 2];
46728 ret[pos++] = (left = transparency[c++]) != null ? left : 255;
46729 }
46730
46731 return ret;
46732 }
46733
46734 copyToImageData(imageData, pixels) {
46735 let j, k;
46736 let { colors } = this;
46737 let palette = null;
46738 let alpha = this.hasAlphaChannel;
46739
46740 if (this.palette.length) {
46741 palette =
46742 this._decodedPalette || (this._decodedPalette = this.decodePalette());
46743 colors = 4;
46744 alpha = true;
46745 }
46746
46747 const data = imageData.data || imageData;
46748 const { length } = data;
46749 const input = palette || pixels;
46750 let i = (j = 0);
46751
46752 if (colors === 1) {
46753 while (i < length) {
46754 k = palette ? pixels[i / 4] * 4 : j;
46755 const v = input[k++];
46756 data[i++] = v;
46757 data[i++] = v;
46758 data[i++] = v;
46759 data[i++] = alpha ? input[k++] : 255;
46760 j = k;
46761 }
46762 } else {
46763 while (i < length) {
46764 k = palette ? pixels[i / 4] * 4 : j;
46765 data[i++] = input[k++];
46766 data[i++] = input[k++];
46767 data[i++] = input[k++];
46768 data[i++] = alpha ? input[k++] : 255;
46769 j = k;
46770 }
46771 }
46772 }
46773
46774 decode(fn) {
46775 const ret = new Buffer(this.width * this.height * 4);
46776 return this.decodePixels(pixels => {
46777 this.copyToImageData(ret, pixels);
46778 return fn(ret);
46779 });
46780 }
46781};
46782
46783}).call(this)}).call(this,require("buffer").Buffer)
46784},{"buffer":114,"fs":113,"zlib":101}],222:[function(require,module,exports){
46785'use strict';
46786
46787/** @type {import('.')} */
46788module.exports = [
46789 'Float32Array',
46790 'Float64Array',
46791 'Int8Array',
46792 'Int16Array',
46793 'Int32Array',
46794 'Uint8Array',
46795 'Uint8ClampedArray',
46796 'Uint16Array',
46797 'Uint32Array',
46798 'BigInt64Array',
46799 'BigUint64Array'
46800];
46801
46802},{}],223:[function(require,module,exports){
46803(function (process){(function (){
46804'use strict';
46805
46806if (typeof process === 'undefined' ||
46807 !process.version ||
46808 process.version.indexOf('v0.') === 0 ||
46809 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
46810 module.exports = { nextTick: nextTick };
46811} else {
46812 module.exports = process
46813}
46814
46815function nextTick(fn, arg1, arg2, arg3) {
46816 if (typeof fn !== 'function') {
46817 throw new TypeError('"callback" argument must be a function');
46818 }
46819 var len = arguments.length;
46820 var args, i;
46821 switch (len) {
46822 case 0:
46823 case 1:
46824 return process.nextTick(fn);
46825 case 2:
46826 return process.nextTick(function afterTickOne() {
46827 fn.call(null, arg1);
46828 });
46829 case 3:
46830 return process.nextTick(function afterTickTwo() {
46831 fn.call(null, arg1, arg2);
46832 });
46833 case 4:
46834 return process.nextTick(function afterTickThree() {
46835 fn.call(null, arg1, arg2, arg3);
46836 });
46837 default:
46838 args = new Array(len - 1);
46839 i = 0;
46840 while (i < args.length) {
46841 args[i++] = arguments[i];
46842 }
46843 return process.nextTick(function afterTick() {
46844 fn.apply(null, args);
46845 });
46846 }
46847}
46848
46849
46850}).call(this)}).call(this,require('_process'))
46851},{"_process":224}],224:[function(require,module,exports){
46852// shim for using process in browser
46853var process = module.exports = {};
46854
46855// cached from whatever global is present so that test runners that stub it
46856// don't break things. But we need to wrap it in a try catch in case it is
46857// wrapped in strict mode code which doesn't define any globals. It's inside a
46858// function because try/catches deoptimize in certain engines.
46859
46860var cachedSetTimeout;
46861var cachedClearTimeout;
46862
46863function defaultSetTimout() {
46864 throw new Error('setTimeout has not been defined');
46865}
46866function defaultClearTimeout () {
46867 throw new Error('clearTimeout has not been defined');
46868}
46869(function () {
46870 try {
46871 if (typeof setTimeout === 'function') {
46872 cachedSetTimeout = setTimeout;
46873 } else {
46874 cachedSetTimeout = defaultSetTimout;
46875 }
46876 } catch (e) {
46877 cachedSetTimeout = defaultSetTimout;
46878 }
46879 try {
46880 if (typeof clearTimeout === 'function') {
46881 cachedClearTimeout = clearTimeout;
46882 } else {
46883 cachedClearTimeout = defaultClearTimeout;
46884 }
46885 } catch (e) {
46886 cachedClearTimeout = defaultClearTimeout;
46887 }
46888} ())
46889function runTimeout(fun) {
46890 if (cachedSetTimeout === setTimeout) {
46891 //normal enviroments in sane situations
46892 return setTimeout(fun, 0);
46893 }
46894 // if setTimeout wasn't available but was latter defined
46895 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
46896 cachedSetTimeout = setTimeout;
46897 return setTimeout(fun, 0);
46898 }
46899 try {
46900 // when when somebody has screwed with setTimeout but no I.E. maddness
46901 return cachedSetTimeout(fun, 0);
46902 } catch(e){
46903 try {
46904 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
46905 return cachedSetTimeout.call(null, fun, 0);
46906 } catch(e){
46907 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
46908 return cachedSetTimeout.call(this, fun, 0);
46909 }
46910 }
46911
46912
46913}
46914function runClearTimeout(marker) {
46915 if (cachedClearTimeout === clearTimeout) {
46916 //normal enviroments in sane situations
46917 return clearTimeout(marker);
46918 }
46919 // if clearTimeout wasn't available but was latter defined
46920 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
46921 cachedClearTimeout = clearTimeout;
46922 return clearTimeout(marker);
46923 }
46924 try {
46925 // when when somebody has screwed with setTimeout but no I.E. maddness
46926 return cachedClearTimeout(marker);
46927 } catch (e){
46928 try {
46929 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
46930 return cachedClearTimeout.call(null, marker);
46931 } catch (e){
46932 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
46933 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
46934 return cachedClearTimeout.call(this, marker);
46935 }
46936 }
46937
46938
46939
46940}
46941var queue = [];
46942var draining = false;
46943var currentQueue;
46944var queueIndex = -1;
46945
46946function cleanUpNextTick() {
46947 if (!draining || !currentQueue) {
46948 return;
46949 }
46950 draining = false;
46951 if (currentQueue.length) {
46952 queue = currentQueue.concat(queue);
46953 } else {
46954 queueIndex = -1;
46955 }
46956 if (queue.length) {
46957 drainQueue();
46958 }
46959}
46960
46961function drainQueue() {
46962 if (draining) {
46963 return;
46964 }
46965 var timeout = runTimeout(cleanUpNextTick);
46966 draining = true;
46967
46968 var len = queue.length;
46969 while(len) {
46970 currentQueue = queue;
46971 queue = [];
46972 while (++queueIndex < len) {
46973 if (currentQueue) {
46974 currentQueue[queueIndex].run();
46975 }
46976 }
46977 queueIndex = -1;
46978 len = queue.length;
46979 }
46980 currentQueue = null;
46981 draining = false;
46982 runClearTimeout(timeout);
46983}
46984
46985process.nextTick = function (fun) {
46986 var args = new Array(arguments.length - 1);
46987 if (arguments.length > 1) {
46988 for (var i = 1; i < arguments.length; i++) {
46989 args[i - 1] = arguments[i];
46990 }
46991 }
46992 queue.push(new Item(fun, args));
46993 if (queue.length === 1 && !draining) {
46994 runTimeout(drainQueue);
46995 }
46996};
46997
46998// v8 likes predictible objects
46999function Item(fun, array) {
47000 this.fun = fun;
47001 this.array = array;
47002}
47003Item.prototype.run = function () {
47004 this.fun.apply(null, this.array);
47005};
47006process.title = 'browser';
47007process.browser = true;
47008process.env = {};
47009process.argv = [];
47010process.version = ''; // empty string to avoid regexp issues
47011process.versions = {};
47012
47013function noop() {}
47014
47015process.on = noop;
47016process.addListener = noop;
47017process.once = noop;
47018process.off = noop;
47019process.removeListener = noop;
47020process.removeAllListeners = noop;
47021process.emit = noop;
47022process.prependListener = noop;
47023process.prependOnceListener = noop;
47024
47025process.listeners = function (name) { return [] }
47026
47027process.binding = function (name) {
47028 throw new Error('process.binding is not supported');
47029};
47030
47031process.cwd = function () { return '/' };
47032process.chdir = function (dir) {
47033 throw new Error('process.chdir is not supported');
47034};
47035process.umask = function() { return 0; };
47036
47037},{}],225:[function(require,module,exports){
47038module.exports = require('./lib/_stream_duplex.js');
47039
47040},{"./lib/_stream_duplex.js":226}],226:[function(require,module,exports){
47041// Copyright Joyent, Inc. and other Node contributors.
47042//
47043// Permission is hereby granted, free of charge, to any person obtaining a
47044// copy of this software and associated documentation files (the
47045// "Software"), to deal in the Software without restriction, including
47046// without limitation the rights to use, copy, modify, merge, publish,
47047// distribute, sublicense, and/or sell copies of the Software, and to permit
47048// persons to whom the Software is furnished to do so, subject to the
47049// following conditions:
47050//
47051// The above copyright notice and this permission notice shall be included
47052// in all copies or substantial portions of the Software.
47053//
47054// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
47055// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
47056// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
47057// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
47058// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
47059// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
47060// USE OR OTHER DEALINGS IN THE SOFTWARE.
47061
47062// a duplex stream is just a stream that is both readable and writable.
47063// Since JS doesn't have multiple prototypal inheritance, this class
47064// prototypally inherits from Readable, and then parasitically from
47065// Writable.
47066
47067'use strict';
47068
47069/*<replacement>*/
47070
47071var pna = require('process-nextick-args');
47072/*</replacement>*/
47073
47074/*<replacement>*/
47075var objectKeys = Object.keys || function (obj) {
47076 var keys = [];
47077 for (var key in obj) {
47078 keys.push(key);
47079 }return keys;
47080};
47081/*</replacement>*/
47082
47083module.exports = Duplex;
47084
47085/*<replacement>*/
47086var util = Object.create(require('core-util-is'));
47087util.inherits = require('inherits');
47088/*</replacement>*/
47089
47090var Readable = require('./_stream_readable');
47091var Writable = require('./_stream_writable');
47092
47093util.inherits(Duplex, Readable);
47094
47095{
47096 // avoid scope creep, the keys array can then be collected
47097 var keys = objectKeys(Writable.prototype);
47098 for (var v = 0; v < keys.length; v++) {
47099 var method = keys[v];
47100 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
47101 }
47102}
47103
47104function Duplex(options) {
47105 if (!(this instanceof Duplex)) return new Duplex(options);
47106
47107 Readable.call(this, options);
47108 Writable.call(this, options);
47109
47110 if (options && options.readable === false) this.readable = false;
47111
47112 if (options && options.writable === false) this.writable = false;
47113
47114 this.allowHalfOpen = true;
47115 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
47116
47117 this.once('end', onend);
47118}
47119
47120Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', {
47121 // making it explicit this property is not enumerable
47122 // because otherwise some prototype manipulation in
47123 // userland will fail
47124 enumerable: false,
47125 get: function () {
47126 return this._writableState.highWaterMark;
47127 }
47128});
47129
47130// the no-half-open enforcer
47131function onend() {
47132 // if we allow half-open state, or if the writable side ended,
47133 // then we're ok.
47134 if (this.allowHalfOpen || this._writableState.ended) return;
47135
47136 // no more data can be written.
47137 // But allow more writes to happen in this tick.
47138 pna.nextTick(onEndNT, this);
47139}
47140
47141function onEndNT(self) {
47142 self.end();
47143}
47144
47145Object.defineProperty(Duplex.prototype, 'destroyed', {
47146 get: function () {
47147 if (this._readableState === undefined || this._writableState === undefined) {
47148 return false;
47149 }
47150 return this._readableState.destroyed && this._writableState.destroyed;
47151 },
47152 set: function (value) {
47153 // we ignore the value if the stream
47154 // has not been initialized yet
47155 if (this._readableState === undefined || this._writableState === undefined) {
47156 return;
47157 }
47158
47159 // backward compatibility, the user is explicitly
47160 // managing destroyed
47161 this._readableState.destroyed = value;
47162 this._writableState.destroyed = value;
47163 }
47164});
47165
47166Duplex.prototype._destroy = function (err, cb) {
47167 this.push(null);
47168 this.end();
47169
47170 pna.nextTick(cb, err);
47171};
47172},{"./_stream_readable":228,"./_stream_writable":230,"core-util-is":118,"inherits":187,"process-nextick-args":223}],227:[function(require,module,exports){
47173// Copyright Joyent, Inc. and other Node contributors.
47174//
47175// Permission is hereby granted, free of charge, to any person obtaining a
47176// copy of this software and associated documentation files (the
47177// "Software"), to deal in the Software without restriction, including
47178// without limitation the rights to use, copy, modify, merge, publish,
47179// distribute, sublicense, and/or sell copies of the Software, and to permit
47180// persons to whom the Software is furnished to do so, subject to the
47181// following conditions:
47182//
47183// The above copyright notice and this permission notice shall be included
47184// in all copies or substantial portions of the Software.
47185//
47186// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
47187// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
47188// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
47189// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
47190// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
47191// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
47192// USE OR OTHER DEALINGS IN THE SOFTWARE.
47193
47194// a passthrough stream.
47195// basically just the most minimal sort of Transform stream.
47196// Every written chunk gets output as-is.
47197
47198'use strict';
47199
47200module.exports = PassThrough;
47201
47202var Transform = require('./_stream_transform');
47203
47204/*<replacement>*/
47205var util = Object.create(require('core-util-is'));
47206util.inherits = require('inherits');
47207/*</replacement>*/
47208
47209util.inherits(PassThrough, Transform);
47210
47211function PassThrough(options) {
47212 if (!(this instanceof PassThrough)) return new PassThrough(options);
47213
47214 Transform.call(this, options);
47215}
47216
47217PassThrough.prototype._transform = function (chunk, encoding, cb) {
47218 cb(null, chunk);
47219};
47220},{"./_stream_transform":229,"core-util-is":118,"inherits":187}],228:[function(require,module,exports){
47221(function (process,global){(function (){
47222// Copyright Joyent, Inc. and other Node contributors.
47223//
47224// Permission is hereby granted, free of charge, to any person obtaining a
47225// copy of this software and associated documentation files (the
47226// "Software"), to deal in the Software without restriction, including
47227// without limitation the rights to use, copy, modify, merge, publish,
47228// distribute, sublicense, and/or sell copies of the Software, and to permit
47229// persons to whom the Software is furnished to do so, subject to the
47230// following conditions:
47231//
47232// The above copyright notice and this permission notice shall be included
47233// in all copies or substantial portions of the Software.
47234//
47235// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
47236// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
47237// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
47238// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
47239// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
47240// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
47241// USE OR OTHER DEALINGS IN THE SOFTWARE.
47242
47243'use strict';
47244
47245/*<replacement>*/
47246
47247var pna = require('process-nextick-args');
47248/*</replacement>*/
47249
47250module.exports = Readable;
47251
47252/*<replacement>*/
47253var isArray = require('isarray');
47254/*</replacement>*/
47255
47256/*<replacement>*/
47257var Duplex;
47258/*</replacement>*/
47259
47260Readable.ReadableState = ReadableState;
47261
47262/*<replacement>*/
47263var EE = require('events').EventEmitter;
47264
47265var EElistenerCount = function (emitter, type) {
47266 return emitter.listeners(type).length;
47267};
47268/*</replacement>*/
47269
47270/*<replacement>*/
47271var Stream = require('./internal/streams/stream');
47272/*</replacement>*/
47273
47274/*<replacement>*/
47275
47276var Buffer = require('safe-buffer').Buffer;
47277var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};
47278function _uint8ArrayToBuffer(chunk) {
47279 return Buffer.from(chunk);
47280}
47281function _isUint8Array(obj) {
47282 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
47283}
47284
47285/*</replacement>*/
47286
47287/*<replacement>*/
47288var util = Object.create(require('core-util-is'));
47289util.inherits = require('inherits');
47290/*</replacement>*/
47291
47292/*<replacement>*/
47293var debugUtil = require('util');
47294var debug = void 0;
47295if (debugUtil && debugUtil.debuglog) {
47296 debug = debugUtil.debuglog('stream');
47297} else {
47298 debug = function () {};
47299}
47300/*</replacement>*/
47301
47302var BufferList = require('./internal/streams/BufferList');
47303var destroyImpl = require('./internal/streams/destroy');
47304var StringDecoder;
47305
47306util.inherits(Readable, Stream);
47307
47308var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
47309
47310function prependListener(emitter, event, fn) {
47311 // Sadly this is not cacheable as some libraries bundle their own
47312 // event emitter implementation with them.
47313 if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);
47314
47315 // This is a hack to make sure that our error handler is attached before any
47316 // userland ones. NEVER DO THIS. This is here only because this code needs
47317 // to continue to work with older versions of Node.js that do not include
47318 // the prependListener() method. The goal is to eventually remove this hack.
47319 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
47320}
47321
47322function ReadableState(options, stream) {
47323 Duplex = Duplex || require('./_stream_duplex');
47324
47325 options = options || {};
47326
47327 // Duplex streams are both readable and writable, but share
47328 // the same options object.
47329 // However, some cases require setting options to different
47330 // values for the readable and the writable sides of the duplex stream.
47331 // These options can be provided separately as readableXXX and writableXXX.
47332 var isDuplex = stream instanceof Duplex;
47333
47334 // object stream flag. Used to make read(n) ignore n and to
47335 // make all the buffer merging and length checks go away
47336 this.objectMode = !!options.objectMode;
47337
47338 if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
47339
47340 // the point at which it stops calling _read() to fill the buffer
47341 // Note: 0 is a valid value, means "don't call _read preemptively ever"
47342 var hwm = options.highWaterMark;
47343 var readableHwm = options.readableHighWaterMark;
47344 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
47345
47346 if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;
47347
47348 // cast to ints.
47349 this.highWaterMark = Math.floor(this.highWaterMark);
47350
47351 // A linked list is used to store data chunks instead of an array because the
47352 // linked list can remove elements from the beginning faster than
47353 // array.shift()
47354 this.buffer = new BufferList();
47355 this.length = 0;
47356 this.pipes = null;
47357 this.pipesCount = 0;
47358 this.flowing = null;
47359 this.ended = false;
47360 this.endEmitted = false;
47361 this.reading = false;
47362
47363 // a flag to be able to tell if the event 'readable'/'data' is emitted
47364 // immediately, or on a later tick. We set this to true at first, because
47365 // any actions that shouldn't happen until "later" should generally also
47366 // not happen before the first read call.
47367 this.sync = true;
47368
47369 // whenever we return null, then we set a flag to say
47370 // that we're awaiting a 'readable' event emission.
47371 this.needReadable = false;
47372 this.emittedReadable = false;
47373 this.readableListening = false;
47374 this.resumeScheduled = false;
47375
47376 // has it been destroyed
47377 this.destroyed = false;
47378
47379 // Crypto is kind of old and crusty. Historically, its default string
47380 // encoding is 'binary' so we have to make this configurable.
47381 // Everything else in the universe uses 'utf8', though.
47382 this.defaultEncoding = options.defaultEncoding || 'utf8';
47383
47384 // the number of writers that are awaiting a drain event in .pipe()s
47385 this.awaitDrain = 0;
47386
47387 // if true, a maybeReadMore has been scheduled
47388 this.readingMore = false;
47389
47390 this.decoder = null;
47391 this.encoding = null;
47392 if (options.encoding) {
47393 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
47394 this.decoder = new StringDecoder(options.encoding);
47395 this.encoding = options.encoding;
47396 }
47397}
47398
47399function Readable(options) {
47400 Duplex = Duplex || require('./_stream_duplex');
47401
47402 if (!(this instanceof Readable)) return new Readable(options);
47403
47404 this._readableState = new ReadableState(options, this);
47405
47406 // legacy
47407 this.readable = true;
47408
47409 if (options) {
47410 if (typeof options.read === 'function') this._read = options.read;
47411
47412 if (typeof options.destroy === 'function') this._destroy = options.destroy;
47413 }
47414
47415 Stream.call(this);
47416}
47417
47418Object.defineProperty(Readable.prototype, 'destroyed', {
47419 get: function () {
47420 if (this._readableState === undefined) {
47421 return false;
47422 }
47423 return this._readableState.destroyed;
47424 },
47425 set: function (value) {
47426 // we ignore the value if the stream
47427 // has not been initialized yet
47428 if (!this._readableState) {
47429 return;
47430 }
47431
47432 // backward compatibility, the user is explicitly
47433 // managing destroyed
47434 this._readableState.destroyed = value;
47435 }
47436});
47437
47438Readable.prototype.destroy = destroyImpl.destroy;
47439Readable.prototype._undestroy = destroyImpl.undestroy;
47440Readable.prototype._destroy = function (err, cb) {
47441 this.push(null);
47442 cb(err);
47443};
47444
47445// Manually shove something into the read() buffer.
47446// This returns true if the highWaterMark has not been hit yet,
47447// similar to how Writable.write() returns true if you should
47448// write() some more.
47449Readable.prototype.push = function (chunk, encoding) {
47450 var state = this._readableState;
47451 var skipChunkCheck;
47452
47453 if (!state.objectMode) {
47454 if (typeof chunk === 'string') {
47455 encoding = encoding || state.defaultEncoding;
47456 if (encoding !== state.encoding) {
47457 chunk = Buffer.from(chunk, encoding);
47458 encoding = '';
47459 }
47460 skipChunkCheck = true;
47461 }
47462 } else {
47463 skipChunkCheck = true;
47464 }
47465
47466 return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
47467};
47468
47469// Unshift should *always* be something directly out of read()
47470Readable.prototype.unshift = function (chunk) {
47471 return readableAddChunk(this, chunk, null, true, false);
47472};
47473
47474function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
47475 var state = stream._readableState;
47476 if (chunk === null) {
47477 state.reading = false;
47478 onEofChunk(stream, state);
47479 } else {
47480 var er;
47481 if (!skipChunkCheck) er = chunkInvalid(state, chunk);
47482 if (er) {
47483 stream.emit('error', er);
47484 } else if (state.objectMode || chunk && chunk.length > 0) {
47485 if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
47486 chunk = _uint8ArrayToBuffer(chunk);
47487 }
47488
47489 if (addToFront) {
47490 if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);
47491 } else if (state.ended) {
47492 stream.emit('error', new Error('stream.push() after EOF'));
47493 } else {
47494 state.reading = false;
47495 if (state.decoder && !encoding) {
47496 chunk = state.decoder.write(chunk);
47497 if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
47498 } else {
47499 addChunk(stream, state, chunk, false);
47500 }
47501 }
47502 } else if (!addToFront) {
47503 state.reading = false;
47504 }
47505 }
47506
47507 return needMoreData(state);
47508}
47509
47510function addChunk(stream, state, chunk, addToFront) {
47511 if (state.flowing && state.length === 0 && !state.sync) {
47512 stream.emit('data', chunk);
47513 stream.read(0);
47514 } else {
47515 // update the buffer info.
47516 state.length += state.objectMode ? 1 : chunk.length;
47517 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
47518
47519 if (state.needReadable) emitReadable(stream);
47520 }
47521 maybeReadMore(stream, state);
47522}
47523
47524function chunkInvalid(state, chunk) {
47525 var er;
47526 if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
47527 er = new TypeError('Invalid non-string/buffer chunk');
47528 }
47529 return er;
47530}
47531
47532// if it's past the high water mark, we can push in some more.
47533// Also, if we have no data yet, we can stand some
47534// more bytes. This is to work around cases where hwm=0,
47535// such as the repl. Also, if the push() triggered a
47536// readable event, and the user called read(largeNumber) such that
47537// needReadable was set, then we ought to push more, so that another
47538// 'readable' event will be triggered.
47539function needMoreData(state) {
47540 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
47541}
47542
47543Readable.prototype.isPaused = function () {
47544 return this._readableState.flowing === false;
47545};
47546
47547// backwards compatibility.
47548Readable.prototype.setEncoding = function (enc) {
47549 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
47550 this._readableState.decoder = new StringDecoder(enc);
47551 this._readableState.encoding = enc;
47552 return this;
47553};
47554
47555// Don't raise the hwm > 8MB
47556var MAX_HWM = 0x800000;
47557function computeNewHighWaterMark(n) {
47558 if (n >= MAX_HWM) {
47559 n = MAX_HWM;
47560 } else {
47561 // Get the next highest power of 2 to prevent increasing hwm excessively in
47562 // tiny amounts
47563 n--;
47564 n |= n >>> 1;
47565 n |= n >>> 2;
47566 n |= n >>> 4;
47567 n |= n >>> 8;
47568 n |= n >>> 16;
47569 n++;
47570 }
47571 return n;
47572}
47573
47574// This function is designed to be inlinable, so please take care when making
47575// changes to the function body.
47576function howMuchToRead(n, state) {
47577 if (n <= 0 || state.length === 0 && state.ended) return 0;
47578 if (state.objectMode) return 1;
47579 if (n !== n) {
47580 // Only flow one buffer at a time
47581 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
47582 }
47583 // If we're asking for more than the current hwm, then raise the hwm.
47584 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
47585 if (n <= state.length) return n;
47586 // Don't have enough
47587 if (!state.ended) {
47588 state.needReadable = true;
47589 return 0;
47590 }
47591 return state.length;
47592}
47593
47594// you can override either this method, or the async _read(n) below.
47595Readable.prototype.read = function (n) {
47596 debug('read', n);
47597 n = parseInt(n, 10);
47598 var state = this._readableState;
47599 var nOrig = n;
47600
47601 if (n !== 0) state.emittedReadable = false;
47602
47603 // if we're doing read(0) to trigger a readable event, but we
47604 // already have a bunch of data in the buffer, then just trigger
47605 // the 'readable' event and move on.
47606 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
47607 debug('read: emitReadable', state.length, state.ended);
47608 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
47609 return null;
47610 }
47611
47612 n = howMuchToRead(n, state);
47613
47614 // if we've ended, and we're now clear, then finish it up.
47615 if (n === 0 && state.ended) {
47616 if (state.length === 0) endReadable(this);
47617 return null;
47618 }
47619
47620 // All the actual chunk generation logic needs to be
47621 // *below* the call to _read. The reason is that in certain
47622 // synthetic stream cases, such as passthrough streams, _read
47623 // may be a completely synchronous operation which may change
47624 // the state of the read buffer, providing enough data when
47625 // before there was *not* enough.
47626 //
47627 // So, the steps are:
47628 // 1. Figure out what the state of things will be after we do
47629 // a read from the buffer.
47630 //
47631 // 2. If that resulting state will trigger a _read, then call _read.
47632 // Note that this may be asynchronous, or synchronous. Yes, it is
47633 // deeply ugly to write APIs this way, but that still doesn't mean
47634 // that the Readable class should behave improperly, as streams are
47635 // designed to be sync/async agnostic.
47636 // Take note if the _read call is sync or async (ie, if the read call
47637 // has returned yet), so that we know whether or not it's safe to emit
47638 // 'readable' etc.
47639 //
47640 // 3. Actually pull the requested chunks out of the buffer and return.
47641
47642 // if we need a readable event, then we need to do some reading.
47643 var doRead = state.needReadable;
47644 debug('need readable', doRead);
47645
47646 // if we currently have less than the highWaterMark, then also read some
47647 if (state.length === 0 || state.length - n < state.highWaterMark) {
47648 doRead = true;
47649 debug('length less than watermark', doRead);
47650 }
47651
47652 // however, if we've ended, then there's no point, and if we're already
47653 // reading, then it's unnecessary.
47654 if (state.ended || state.reading) {
47655 doRead = false;
47656 debug('reading or ended', doRead);
47657 } else if (doRead) {
47658 debug('do read');
47659 state.reading = true;
47660 state.sync = true;
47661 // if the length is currently zero, then we *need* a readable event.
47662 if (state.length === 0) state.needReadable = true;
47663 // call internal read method
47664 this._read(state.highWaterMark);
47665 state.sync = false;
47666 // If _read pushed data synchronously, then `reading` will be false,
47667 // and we need to re-evaluate how much data we can return to the user.
47668 if (!state.reading) n = howMuchToRead(nOrig, state);
47669 }
47670
47671 var ret;
47672 if (n > 0) ret = fromList(n, state);else ret = null;
47673
47674 if (ret === null) {
47675 state.needReadable = true;
47676 n = 0;
47677 } else {
47678 state.length -= n;
47679 }
47680
47681 if (state.length === 0) {
47682 // If we have nothing in the buffer, then we want to know
47683 // as soon as we *do* get something into the buffer.
47684 if (!state.ended) state.needReadable = true;
47685
47686 // If we tried to read() past the EOF, then emit end on the next tick.
47687 if (nOrig !== n && state.ended) endReadable(this);
47688 }
47689
47690 if (ret !== null) this.emit('data', ret);
47691
47692 return ret;
47693};
47694
47695function onEofChunk(stream, state) {
47696 if (state.ended) return;
47697 if (state.decoder) {
47698 var chunk = state.decoder.end();
47699 if (chunk && chunk.length) {
47700 state.buffer.push(chunk);
47701 state.length += state.objectMode ? 1 : chunk.length;
47702 }
47703 }
47704 state.ended = true;
47705
47706 // emit 'readable' now to make sure it gets picked up.
47707 emitReadable(stream);
47708}
47709
47710// Don't emit readable right away in sync mode, because this can trigger
47711// another read() call => stack overflow. This way, it might trigger
47712// a nextTick recursion warning, but that's not so bad.
47713function emitReadable(stream) {
47714 var state = stream._readableState;
47715 state.needReadable = false;
47716 if (!state.emittedReadable) {
47717 debug('emitReadable', state.flowing);
47718 state.emittedReadable = true;
47719 if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);
47720 }
47721}
47722
47723function emitReadable_(stream) {
47724 debug('emit readable');
47725 stream.emit('readable');
47726 flow(stream);
47727}
47728
47729// at this point, the user has presumably seen the 'readable' event,
47730// and called read() to consume some data. that may have triggered
47731// in turn another _read(n) call, in which case reading = true if
47732// it's in progress.
47733// However, if we're not ended, or reading, and the length < hwm,
47734// then go ahead and try to read some more preemptively.
47735function maybeReadMore(stream, state) {
47736 if (!state.readingMore) {
47737 state.readingMore = true;
47738 pna.nextTick(maybeReadMore_, stream, state);
47739 }
47740}
47741
47742function maybeReadMore_(stream, state) {
47743 var len = state.length;
47744 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
47745 debug('maybeReadMore read 0');
47746 stream.read(0);
47747 if (len === state.length)
47748 // didn't get any data, stop spinning.
47749 break;else len = state.length;
47750 }
47751 state.readingMore = false;
47752}
47753
47754// abstract method. to be overridden in specific implementation classes.
47755// call cb(er, data) where data is <= n in length.
47756// for virtual (non-string, non-buffer) streams, "length" is somewhat
47757// arbitrary, and perhaps not very meaningful.
47758Readable.prototype._read = function (n) {
47759 this.emit('error', new Error('_read() is not implemented'));
47760};
47761
47762Readable.prototype.pipe = function (dest, pipeOpts) {
47763 var src = this;
47764 var state = this._readableState;
47765
47766 switch (state.pipesCount) {
47767 case 0:
47768 state.pipes = dest;
47769 break;
47770 case 1:
47771 state.pipes = [state.pipes, dest];
47772 break;
47773 default:
47774 state.pipes.push(dest);
47775 break;
47776 }
47777 state.pipesCount += 1;
47778 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
47779
47780 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
47781
47782 var endFn = doEnd ? onend : unpipe;
47783 if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);
47784
47785 dest.on('unpipe', onunpipe);
47786 function onunpipe(readable, unpipeInfo) {
47787 debug('onunpipe');
47788 if (readable === src) {
47789 if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
47790 unpipeInfo.hasUnpiped = true;
47791 cleanup();
47792 }
47793 }
47794 }
47795
47796 function onend() {
47797 debug('onend');
47798 dest.end();
47799 }
47800
47801 // when the dest drains, it reduces the awaitDrain counter
47802 // on the source. This would be more elegant with a .once()
47803 // handler in flow(), but adding and removing repeatedly is
47804 // too slow.
47805 var ondrain = pipeOnDrain(src);
47806 dest.on('drain', ondrain);
47807
47808 var cleanedUp = false;
47809 function cleanup() {
47810 debug('cleanup');
47811 // cleanup event handlers once the pipe is broken
47812 dest.removeListener('close', onclose);
47813 dest.removeListener('finish', onfinish);
47814 dest.removeListener('drain', ondrain);
47815 dest.removeListener('error', onerror);
47816 dest.removeListener('unpipe', onunpipe);
47817 src.removeListener('end', onend);
47818 src.removeListener('end', unpipe);
47819 src.removeListener('data', ondata);
47820
47821 cleanedUp = true;
47822
47823 // if the reader is waiting for a drain event from this
47824 // specific writer, then it would cause it to never start
47825 // flowing again.
47826 // So, if this is awaiting a drain, then we just call it now.
47827 // If we don't know, then assume that we are waiting for one.
47828 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
47829 }
47830
47831 // If the user pushes more data while we're writing to dest then we'll end up
47832 // in ondata again. However, we only want to increase awaitDrain once because
47833 // dest will only emit one 'drain' event for the multiple writes.
47834 // => Introduce a guard on increasing awaitDrain.
47835 var increasedAwaitDrain = false;
47836 src.on('data', ondata);
47837 function ondata(chunk) {
47838 debug('ondata');
47839 increasedAwaitDrain = false;
47840 var ret = dest.write(chunk);
47841 if (false === ret && !increasedAwaitDrain) {
47842 // If the user unpiped during `dest.write()`, it is possible
47843 // to get stuck in a permanently paused state if that write
47844 // also returned false.
47845 // => Check whether `dest` is still a piping destination.
47846 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
47847 debug('false write response, pause', state.awaitDrain);
47848 state.awaitDrain++;
47849 increasedAwaitDrain = true;
47850 }
47851 src.pause();
47852 }
47853 }
47854
47855 // if the dest has an error, then stop piping into it.
47856 // however, don't suppress the throwing behavior for this.
47857 function onerror(er) {
47858 debug('onerror', er);
47859 unpipe();
47860 dest.removeListener('error', onerror);
47861 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
47862 }
47863
47864 // Make sure our error handler is attached before userland ones.
47865 prependListener(dest, 'error', onerror);
47866
47867 // Both close and finish should trigger unpipe, but only once.
47868 function onclose() {
47869 dest.removeListener('finish', onfinish);
47870 unpipe();
47871 }
47872 dest.once('close', onclose);
47873 function onfinish() {
47874 debug('onfinish');
47875 dest.removeListener('close', onclose);
47876 unpipe();
47877 }
47878 dest.once('finish', onfinish);
47879
47880 function unpipe() {
47881 debug('unpipe');
47882 src.unpipe(dest);
47883 }
47884
47885 // tell the dest that it's being piped to
47886 dest.emit('pipe', src);
47887
47888 // start the flow if it hasn't been started already.
47889 if (!state.flowing) {
47890 debug('pipe resume');
47891 src.resume();
47892 }
47893
47894 return dest;
47895};
47896
47897function pipeOnDrain(src) {
47898 return function () {
47899 var state = src._readableState;
47900 debug('pipeOnDrain', state.awaitDrain);
47901 if (state.awaitDrain) state.awaitDrain--;
47902 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
47903 state.flowing = true;
47904 flow(src);
47905 }
47906 };
47907}
47908
47909Readable.prototype.unpipe = function (dest) {
47910 var state = this._readableState;
47911 var unpipeInfo = { hasUnpiped: false };
47912
47913 // if we're not piping anywhere, then do nothing.
47914 if (state.pipesCount === 0) return this;
47915
47916 // just one destination. most common case.
47917 if (state.pipesCount === 1) {
47918 // passed in one, but it's not the right one.
47919 if (dest && dest !== state.pipes) return this;
47920
47921 if (!dest) dest = state.pipes;
47922
47923 // got a match.
47924 state.pipes = null;
47925 state.pipesCount = 0;
47926 state.flowing = false;
47927 if (dest) dest.emit('unpipe', this, unpipeInfo);
47928 return this;
47929 }
47930
47931 // slow case. multiple pipe destinations.
47932
47933 if (!dest) {
47934 // remove all.
47935 var dests = state.pipes;
47936 var len = state.pipesCount;
47937 state.pipes = null;
47938 state.pipesCount = 0;
47939 state.flowing = false;
47940
47941 for (var i = 0; i < len; i++) {
47942 dests[i].emit('unpipe', this, { hasUnpiped: false });
47943 }return this;
47944 }
47945
47946 // try to find the right one.
47947 var index = indexOf(state.pipes, dest);
47948 if (index === -1) return this;
47949
47950 state.pipes.splice(index, 1);
47951 state.pipesCount -= 1;
47952 if (state.pipesCount === 1) state.pipes = state.pipes[0];
47953
47954 dest.emit('unpipe', this, unpipeInfo);
47955
47956 return this;
47957};
47958
47959// set up data events if they are asked for
47960// Ensure readable listeners eventually get something
47961Readable.prototype.on = function (ev, fn) {
47962 var res = Stream.prototype.on.call(this, ev, fn);
47963
47964 if (ev === 'data') {
47965 // Start flowing on next tick if stream isn't explicitly paused
47966 if (this._readableState.flowing !== false) this.resume();
47967 } else if (ev === 'readable') {
47968 var state = this._readableState;
47969 if (!state.endEmitted && !state.readableListening) {
47970 state.readableListening = state.needReadable = true;
47971 state.emittedReadable = false;
47972 if (!state.reading) {
47973 pna.nextTick(nReadingNextTick, this);
47974 } else if (state.length) {
47975 emitReadable(this);
47976 }
47977 }
47978 }
47979
47980 return res;
47981};
47982Readable.prototype.addListener = Readable.prototype.on;
47983
47984function nReadingNextTick(self) {
47985 debug('readable nexttick read 0');
47986 self.read(0);
47987}
47988
47989// pause() and resume() are remnants of the legacy readable stream API
47990// If the user uses them, then switch into old mode.
47991Readable.prototype.resume = function () {
47992 var state = this._readableState;
47993 if (!state.flowing) {
47994 debug('resume');
47995 state.flowing = true;
47996 resume(this, state);
47997 }
47998 return this;
47999};
48000
48001function resume(stream, state) {
48002 if (!state.resumeScheduled) {
48003 state.resumeScheduled = true;
48004 pna.nextTick(resume_, stream, state);
48005 }
48006}
48007
48008function resume_(stream, state) {
48009 if (!state.reading) {
48010 debug('resume read 0');
48011 stream.read(0);
48012 }
48013
48014 state.resumeScheduled = false;
48015 state.awaitDrain = 0;
48016 stream.emit('resume');
48017 flow(stream);
48018 if (state.flowing && !state.reading) stream.read(0);
48019}
48020
48021Readable.prototype.pause = function () {
48022 debug('call pause flowing=%j', this._readableState.flowing);
48023 if (false !== this._readableState.flowing) {
48024 debug('pause');
48025 this._readableState.flowing = false;
48026 this.emit('pause');
48027 }
48028 return this;
48029};
48030
48031function flow(stream) {
48032 var state = stream._readableState;
48033 debug('flow', state.flowing);
48034 while (state.flowing && stream.read() !== null) {}
48035}
48036
48037// wrap an old-style stream as the async data source.
48038// This is *not* part of the readable stream interface.
48039// It is an ugly unfortunate mess of history.
48040Readable.prototype.wrap = function (stream) {
48041 var _this = this;
48042
48043 var state = this._readableState;
48044 var paused = false;
48045
48046 stream.on('end', function () {
48047 debug('wrapped end');
48048 if (state.decoder && !state.ended) {
48049 var chunk = state.decoder.end();
48050 if (chunk && chunk.length) _this.push(chunk);
48051 }
48052
48053 _this.push(null);
48054 });
48055
48056 stream.on('data', function (chunk) {
48057 debug('wrapped data');
48058 if (state.decoder) chunk = state.decoder.write(chunk);
48059
48060 // don't skip over falsy values in objectMode
48061 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
48062
48063 var ret = _this.push(chunk);
48064 if (!ret) {
48065 paused = true;
48066 stream.pause();
48067 }
48068 });
48069
48070 // proxy all the other methods.
48071 // important when wrapping filters and duplexes.
48072 for (var i in stream) {
48073 if (this[i] === undefined && typeof stream[i] === 'function') {
48074 this[i] = function (method) {
48075 return function () {
48076 return stream[method].apply(stream, arguments);
48077 };
48078 }(i);
48079 }
48080 }
48081
48082 // proxy certain important events.
48083 for (var n = 0; n < kProxyEvents.length; n++) {
48084 stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
48085 }
48086
48087 // when we try to consume some more bytes, simply unpause the
48088 // underlying stream.
48089 this._read = function (n) {
48090 debug('wrapped _read', n);
48091 if (paused) {
48092 paused = false;
48093 stream.resume();
48094 }
48095 };
48096
48097 return this;
48098};
48099
48100Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
48101 // making it explicit this property is not enumerable
48102 // because otherwise some prototype manipulation in
48103 // userland will fail
48104 enumerable: false,
48105 get: function () {
48106 return this._readableState.highWaterMark;
48107 }
48108});
48109
48110// exposed for testing purposes only.
48111Readable._fromList = fromList;
48112
48113// Pluck off n bytes from an array of buffers.
48114// Length is the combined lengths of all the buffers in the list.
48115// This function is designed to be inlinable, so please take care when making
48116// changes to the function body.
48117function fromList(n, state) {
48118 // nothing buffered
48119 if (state.length === 0) return null;
48120
48121 var ret;
48122 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
48123 // read it all, truncate the list
48124 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
48125 state.buffer.clear();
48126 } else {
48127 // read part of list
48128 ret = fromListPartial(n, state.buffer, state.decoder);
48129 }
48130
48131 return ret;
48132}
48133
48134// Extracts only enough buffered data to satisfy the amount requested.
48135// This function is designed to be inlinable, so please take care when making
48136// changes to the function body.
48137function fromListPartial(n, list, hasStrings) {
48138 var ret;
48139 if (n < list.head.data.length) {
48140 // slice is the same for buffers and strings
48141 ret = list.head.data.slice(0, n);
48142 list.head.data = list.head.data.slice(n);
48143 } else if (n === list.head.data.length) {
48144 // first chunk is a perfect match
48145 ret = list.shift();
48146 } else {
48147 // result spans more than one buffer
48148 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
48149 }
48150 return ret;
48151}
48152
48153// Copies a specified amount of characters from the list of buffered data
48154// chunks.
48155// This function is designed to be inlinable, so please take care when making
48156// changes to the function body.
48157function copyFromBufferString(n, list) {
48158 var p = list.head;
48159 var c = 1;
48160 var ret = p.data;
48161 n -= ret.length;
48162 while (p = p.next) {
48163 var str = p.data;
48164 var nb = n > str.length ? str.length : n;
48165 if (nb === str.length) ret += str;else ret += str.slice(0, n);
48166 n -= nb;
48167 if (n === 0) {
48168 if (nb === str.length) {
48169 ++c;
48170 if (p.next) list.head = p.next;else list.head = list.tail = null;
48171 } else {
48172 list.head = p;
48173 p.data = str.slice(nb);
48174 }
48175 break;
48176 }
48177 ++c;
48178 }
48179 list.length -= c;
48180 return ret;
48181}
48182
48183// Copies a specified amount of bytes from the list of buffered data chunks.
48184// This function is designed to be inlinable, so please take care when making
48185// changes to the function body.
48186function copyFromBuffer(n, list) {
48187 var ret = Buffer.allocUnsafe(n);
48188 var p = list.head;
48189 var c = 1;
48190 p.data.copy(ret);
48191 n -= p.data.length;
48192 while (p = p.next) {
48193 var buf = p.data;
48194 var nb = n > buf.length ? buf.length : n;
48195 buf.copy(ret, ret.length - n, 0, nb);
48196 n -= nb;
48197 if (n === 0) {
48198 if (nb === buf.length) {
48199 ++c;
48200 if (p.next) list.head = p.next;else list.head = list.tail = null;
48201 } else {
48202 list.head = p;
48203 p.data = buf.slice(nb);
48204 }
48205 break;
48206 }
48207 ++c;
48208 }
48209 list.length -= c;
48210 return ret;
48211}
48212
48213function endReadable(stream) {
48214 var state = stream._readableState;
48215
48216 // If we get here before consuming all the bytes, then that is a
48217 // bug in node. Should never happen.
48218 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
48219
48220 if (!state.endEmitted) {
48221 state.ended = true;
48222 pna.nextTick(endReadableNT, state, stream);
48223 }
48224}
48225
48226function endReadableNT(state, stream) {
48227 // Check that we didn't get one last unshift.
48228 if (!state.endEmitted && state.length === 0) {
48229 state.endEmitted = true;
48230 stream.readable = false;
48231 stream.emit('end');
48232 }
48233}
48234
48235function indexOf(xs, x) {
48236 for (var i = 0, l = xs.length; i < l; i++) {
48237 if (xs[i] === x) return i;
48238 }
48239 return -1;
48240}
48241}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
48242},{"./_stream_duplex":226,"./internal/streams/BufferList":231,"./internal/streams/destroy":232,"./internal/streams/stream":233,"_process":224,"core-util-is":118,"events":170,"inherits":187,"isarray":204,"process-nextick-args":223,"safe-buffer":234,"string_decoder/":235,"util":99}],229:[function(require,module,exports){
48243// Copyright Joyent, Inc. and other Node contributors.
48244//
48245// Permission is hereby granted, free of charge, to any person obtaining a
48246// copy of this software and associated documentation files (the
48247// "Software"), to deal in the Software without restriction, including
48248// without limitation the rights to use, copy, modify, merge, publish,
48249// distribute, sublicense, and/or sell copies of the Software, and to permit
48250// persons to whom the Software is furnished to do so, subject to the
48251// following conditions:
48252//
48253// The above copyright notice and this permission notice shall be included
48254// in all copies or substantial portions of the Software.
48255//
48256// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
48257// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
48258// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
48259// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
48260// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
48261// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
48262// USE OR OTHER DEALINGS IN THE SOFTWARE.
48263
48264// a transform stream is a readable/writable stream where you do
48265// something with the data. Sometimes it's called a "filter",
48266// but that's not a great name for it, since that implies a thing where
48267// some bits pass through, and others are simply ignored. (That would
48268// be a valid example of a transform, of course.)
48269//
48270// While the output is causally related to the input, it's not a
48271// necessarily symmetric or synchronous transformation. For example,
48272// a zlib stream might take multiple plain-text writes(), and then
48273// emit a single compressed chunk some time in the future.
48274//
48275// Here's how this works:
48276//
48277// The Transform stream has all the aspects of the readable and writable
48278// stream classes. When you write(chunk), that calls _write(chunk,cb)
48279// internally, and returns false if there's a lot of pending writes
48280// buffered up. When you call read(), that calls _read(n) until
48281// there's enough pending readable data buffered up.
48282//
48283// In a transform stream, the written data is placed in a buffer. When
48284// _read(n) is called, it transforms the queued up data, calling the
48285// buffered _write cb's as it consumes chunks. If consuming a single
48286// written chunk would result in multiple output chunks, then the first
48287// outputted bit calls the readcb, and subsequent chunks just go into
48288// the read buffer, and will cause it to emit 'readable' if necessary.
48289//
48290// This way, back-pressure is actually determined by the reading side,
48291// since _read has to be called to start processing a new chunk. However,
48292// a pathological inflate type of transform can cause excessive buffering
48293// here. For example, imagine a stream where every byte of input is
48294// interpreted as an integer from 0-255, and then results in that many
48295// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
48296// 1kb of data being output. In this case, you could write a very small
48297// amount of input, and end up with a very large amount of output. In
48298// such a pathological inflating mechanism, there'd be no way to tell
48299// the system to stop doing the transform. A single 4MB write could
48300// cause the system to run out of memory.
48301//
48302// However, even in such a pathological case, only a single written chunk
48303// would be consumed, and then the rest would wait (un-transformed) until
48304// the results of the previous transformed chunk were consumed.
48305
48306'use strict';
48307
48308module.exports = Transform;
48309
48310var Duplex = require('./_stream_duplex');
48311
48312/*<replacement>*/
48313var util = Object.create(require('core-util-is'));
48314util.inherits = require('inherits');
48315/*</replacement>*/
48316
48317util.inherits(Transform, Duplex);
48318
48319function afterTransform(er, data) {
48320 var ts = this._transformState;
48321 ts.transforming = false;
48322
48323 var cb = ts.writecb;
48324
48325 if (!cb) {
48326 return this.emit('error', new Error('write callback called multiple times'));
48327 }
48328
48329 ts.writechunk = null;
48330 ts.writecb = null;
48331
48332 if (data != null) // single equals check for both `null` and `undefined`
48333 this.push(data);
48334
48335 cb(er);
48336
48337 var rs = this._readableState;
48338 rs.reading = false;
48339 if (rs.needReadable || rs.length < rs.highWaterMark) {
48340 this._read(rs.highWaterMark);
48341 }
48342}
48343
48344function Transform(options) {
48345 if (!(this instanceof Transform)) return new Transform(options);
48346
48347 Duplex.call(this, options);
48348
48349 this._transformState = {
48350 afterTransform: afterTransform.bind(this),
48351 needTransform: false,
48352 transforming: false,
48353 writecb: null,
48354 writechunk: null,
48355 writeencoding: null
48356 };
48357
48358 // start out asking for a readable event once data is transformed.
48359 this._readableState.needReadable = true;
48360
48361 // we have implemented the _read method, and done the other things
48362 // that Readable wants before the first _read call, so unset the
48363 // sync guard flag.
48364 this._readableState.sync = false;
48365
48366 if (options) {
48367 if (typeof options.transform === 'function') this._transform = options.transform;
48368
48369 if (typeof options.flush === 'function') this._flush = options.flush;
48370 }
48371
48372 // When the writable side finishes, then flush out anything remaining.
48373 this.on('prefinish', prefinish);
48374}
48375
48376function prefinish() {
48377 var _this = this;
48378
48379 if (typeof this._flush === 'function') {
48380 this._flush(function (er, data) {
48381 done(_this, er, data);
48382 });
48383 } else {
48384 done(this, null, null);
48385 }
48386}
48387
48388Transform.prototype.push = function (chunk, encoding) {
48389 this._transformState.needTransform = false;
48390 return Duplex.prototype.push.call(this, chunk, encoding);
48391};
48392
48393// This is the part where you do stuff!
48394// override this function in implementation classes.
48395// 'chunk' is an input chunk.
48396//
48397// Call `push(newChunk)` to pass along transformed output
48398// to the readable side. You may call 'push' zero or more times.
48399//
48400// Call `cb(err)` when you are done with this chunk. If you pass
48401// an error, then that'll put the hurt on the whole operation. If you
48402// never call cb(), then you'll never get another chunk.
48403Transform.prototype._transform = function (chunk, encoding, cb) {
48404 throw new Error('_transform() is not implemented');
48405};
48406
48407Transform.prototype._write = function (chunk, encoding, cb) {
48408 var ts = this._transformState;
48409 ts.writecb = cb;
48410 ts.writechunk = chunk;
48411 ts.writeencoding = encoding;
48412 if (!ts.transforming) {
48413 var rs = this._readableState;
48414 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
48415 }
48416};
48417
48418// Doesn't matter what the args are here.
48419// _transform does all the work.
48420// That we got here means that the readable side wants more data.
48421Transform.prototype._read = function (n) {
48422 var ts = this._transformState;
48423
48424 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
48425 ts.transforming = true;
48426 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
48427 } else {
48428 // mark that we need a transform, so that any data that comes in
48429 // will get processed, now that we've asked for it.
48430 ts.needTransform = true;
48431 }
48432};
48433
48434Transform.prototype._destroy = function (err, cb) {
48435 var _this2 = this;
48436
48437 Duplex.prototype._destroy.call(this, err, function (err2) {
48438 cb(err2);
48439 _this2.emit('close');
48440 });
48441};
48442
48443function done(stream, er, data) {
48444 if (er) return stream.emit('error', er);
48445
48446 if (data != null) // single equals check for both `null` and `undefined`
48447 stream.push(data);
48448
48449 // if there's nothing in the write buffer, then that means
48450 // that nothing more will ever be provided
48451 if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');
48452
48453 if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');
48454
48455 return stream.push(null);
48456}
48457},{"./_stream_duplex":226,"core-util-is":118,"inherits":187}],230:[function(require,module,exports){
48458(function (process,global,setImmediate){(function (){
48459// Copyright Joyent, Inc. and other Node contributors.
48460//
48461// Permission is hereby granted, free of charge, to any person obtaining a
48462// copy of this software and associated documentation files (the
48463// "Software"), to deal in the Software without restriction, including
48464// without limitation the rights to use, copy, modify, merge, publish,
48465// distribute, sublicense, and/or sell copies of the Software, and to permit
48466// persons to whom the Software is furnished to do so, subject to the
48467// following conditions:
48468//
48469// The above copyright notice and this permission notice shall be included
48470// in all copies or substantial portions of the Software.
48471//
48472// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
48473// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
48474// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
48475// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
48476// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
48477// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
48478// USE OR OTHER DEALINGS IN THE SOFTWARE.
48479
48480// A bit simpler than readable streams.
48481// Implement an async ._write(chunk, encoding, cb), and it'll handle all
48482// the drain event emission and buffering.
48483
48484'use strict';
48485
48486/*<replacement>*/
48487
48488var pna = require('process-nextick-args');
48489/*</replacement>*/
48490
48491module.exports = Writable;
48492
48493/* <replacement> */
48494function WriteReq(chunk, encoding, cb) {
48495 this.chunk = chunk;
48496 this.encoding = encoding;
48497 this.callback = cb;
48498 this.next = null;
48499}
48500
48501// It seems a linked list but it is not
48502// there will be only 2 of these for each stream
48503function CorkedRequest(state) {
48504 var _this = this;
48505
48506 this.next = null;
48507 this.entry = null;
48508 this.finish = function () {
48509 onCorkedFinish(_this, state);
48510 };
48511}
48512/* </replacement> */
48513
48514/*<replacement>*/
48515var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;
48516/*</replacement>*/
48517
48518/*<replacement>*/
48519var Duplex;
48520/*</replacement>*/
48521
48522Writable.WritableState = WritableState;
48523
48524/*<replacement>*/
48525var util = Object.create(require('core-util-is'));
48526util.inherits = require('inherits');
48527/*</replacement>*/
48528
48529/*<replacement>*/
48530var internalUtil = {
48531 deprecate: require('util-deprecate')
48532};
48533/*</replacement>*/
48534
48535/*<replacement>*/
48536var Stream = require('./internal/streams/stream');
48537/*</replacement>*/
48538
48539/*<replacement>*/
48540
48541var Buffer = require('safe-buffer').Buffer;
48542var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};
48543function _uint8ArrayToBuffer(chunk) {
48544 return Buffer.from(chunk);
48545}
48546function _isUint8Array(obj) {
48547 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
48548}
48549
48550/*</replacement>*/
48551
48552var destroyImpl = require('./internal/streams/destroy');
48553
48554util.inherits(Writable, Stream);
48555
48556function nop() {}
48557
48558function WritableState(options, stream) {
48559 Duplex = Duplex || require('./_stream_duplex');
48560
48561 options = options || {};
48562
48563 // Duplex streams are both readable and writable, but share
48564 // the same options object.
48565 // However, some cases require setting options to different
48566 // values for the readable and the writable sides of the duplex stream.
48567 // These options can be provided separately as readableXXX and writableXXX.
48568 var isDuplex = stream instanceof Duplex;
48569
48570 // object stream flag to indicate whether or not this stream
48571 // contains buffers or objects.
48572 this.objectMode = !!options.objectMode;
48573
48574 if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
48575
48576 // the point at which write() starts returning false
48577 // Note: 0 is a valid value, means that we always return false if
48578 // the entire buffer is not flushed immediately on write()
48579 var hwm = options.highWaterMark;
48580 var writableHwm = options.writableHighWaterMark;
48581 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
48582
48583 if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;
48584
48585 // cast to ints.
48586 this.highWaterMark = Math.floor(this.highWaterMark);
48587
48588 // if _final has been called
48589 this.finalCalled = false;
48590
48591 // drain event flag.
48592 this.needDrain = false;
48593 // at the start of calling end()
48594 this.ending = false;
48595 // when end() has been called, and returned
48596 this.ended = false;
48597 // when 'finish' is emitted
48598 this.finished = false;
48599
48600 // has it been destroyed
48601 this.destroyed = false;
48602
48603 // should we decode strings into buffers before passing to _write?
48604 // this is here so that some node-core streams can optimize string
48605 // handling at a lower level.
48606 var noDecode = options.decodeStrings === false;
48607 this.decodeStrings = !noDecode;
48608
48609 // Crypto is kind of old and crusty. Historically, its default string
48610 // encoding is 'binary' so we have to make this configurable.
48611 // Everything else in the universe uses 'utf8', though.
48612 this.defaultEncoding = options.defaultEncoding || 'utf8';
48613
48614 // not an actual buffer we keep track of, but a measurement
48615 // of how much we're waiting to get pushed to some underlying
48616 // socket or file.
48617 this.length = 0;
48618
48619 // a flag to see when we're in the middle of a write.
48620 this.writing = false;
48621
48622 // when true all writes will be buffered until .uncork() call
48623 this.corked = 0;
48624
48625 // a flag to be able to tell if the onwrite cb is called immediately,
48626 // or on a later tick. We set this to true at first, because any
48627 // actions that shouldn't happen until "later" should generally also
48628 // not happen before the first write call.
48629 this.sync = true;
48630
48631 // a flag to know if we're processing previously buffered items, which
48632 // may call the _write() callback in the same tick, so that we don't
48633 // end up in an overlapped onwrite situation.
48634 this.bufferProcessing = false;
48635
48636 // the callback that's passed to _write(chunk,cb)
48637 this.onwrite = function (er) {
48638 onwrite(stream, er);
48639 };
48640
48641 // the callback that the user supplies to write(chunk,encoding,cb)
48642 this.writecb = null;
48643
48644 // the amount that is being written when _write is called.
48645 this.writelen = 0;
48646
48647 this.bufferedRequest = null;
48648 this.lastBufferedRequest = null;
48649
48650 // number of pending user-supplied write callbacks
48651 // this must be 0 before 'finish' can be emitted
48652 this.pendingcb = 0;
48653
48654 // emit prefinish if the only thing we're waiting for is _write cbs
48655 // This is relevant for synchronous Transform streams
48656 this.prefinished = false;
48657
48658 // True if the error was already emitted and should not be thrown again
48659 this.errorEmitted = false;
48660
48661 // count buffered requests
48662 this.bufferedRequestCount = 0;
48663
48664 // allocate the first CorkedRequest, there is always
48665 // one allocated and free to use, and we maintain at most two
48666 this.corkedRequestsFree = new CorkedRequest(this);
48667}
48668
48669WritableState.prototype.getBuffer = function getBuffer() {
48670 var current = this.bufferedRequest;
48671 var out = [];
48672 while (current) {
48673 out.push(current);
48674 current = current.next;
48675 }
48676 return out;
48677};
48678
48679(function () {
48680 try {
48681 Object.defineProperty(WritableState.prototype, 'buffer', {
48682 get: internalUtil.deprecate(function () {
48683 return this.getBuffer();
48684 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
48685 });
48686 } catch (_) {}
48687})();
48688
48689// Test _writableState for inheritance to account for Duplex streams,
48690// whose prototype chain only points to Readable.
48691var realHasInstance;
48692if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
48693 realHasInstance = Function.prototype[Symbol.hasInstance];
48694 Object.defineProperty(Writable, Symbol.hasInstance, {
48695 value: function (object) {
48696 if (realHasInstance.call(this, object)) return true;
48697 if (this !== Writable) return false;
48698
48699 return object && object._writableState instanceof WritableState;
48700 }
48701 });
48702} else {
48703 realHasInstance = function (object) {
48704 return object instanceof this;
48705 };
48706}
48707
48708function Writable(options) {
48709 Duplex = Duplex || require('./_stream_duplex');
48710
48711 // Writable ctor is applied to Duplexes, too.
48712 // `realHasInstance` is necessary because using plain `instanceof`
48713 // would return false, as no `_writableState` property is attached.
48714
48715 // Trying to use the custom `instanceof` for Writable here will also break the
48716 // Node.js LazyTransform implementation, which has a non-trivial getter for
48717 // `_writableState` that would lead to infinite recursion.
48718 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
48719 return new Writable(options);
48720 }
48721
48722 this._writableState = new WritableState(options, this);
48723
48724 // legacy.
48725 this.writable = true;
48726
48727 if (options) {
48728 if (typeof options.write === 'function') this._write = options.write;
48729
48730 if (typeof options.writev === 'function') this._writev = options.writev;
48731
48732 if (typeof options.destroy === 'function') this._destroy = options.destroy;
48733
48734 if (typeof options.final === 'function') this._final = options.final;
48735 }
48736
48737 Stream.call(this);
48738}
48739
48740// Otherwise people can pipe Writable streams, which is just wrong.
48741Writable.prototype.pipe = function () {
48742 this.emit('error', new Error('Cannot pipe, not readable'));
48743};
48744
48745function writeAfterEnd(stream, cb) {
48746 var er = new Error('write after end');
48747 // TODO: defer error events consistently everywhere, not just the cb
48748 stream.emit('error', er);
48749 pna.nextTick(cb, er);
48750}
48751
48752// Checks that a user-supplied chunk is valid, especially for the particular
48753// mode the stream is in. Currently this means that `null` is never accepted
48754// and undefined/non-string values are only allowed in object mode.
48755function validChunk(stream, state, chunk, cb) {
48756 var valid = true;
48757 var er = false;
48758
48759 if (chunk === null) {
48760 er = new TypeError('May not write null values to stream');
48761 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
48762 er = new TypeError('Invalid non-string/buffer chunk');
48763 }
48764 if (er) {
48765 stream.emit('error', er);
48766 pna.nextTick(cb, er);
48767 valid = false;
48768 }
48769 return valid;
48770}
48771
48772Writable.prototype.write = function (chunk, encoding, cb) {
48773 var state = this._writableState;
48774 var ret = false;
48775 var isBuf = !state.objectMode && _isUint8Array(chunk);
48776
48777 if (isBuf && !Buffer.isBuffer(chunk)) {
48778 chunk = _uint8ArrayToBuffer(chunk);
48779 }
48780
48781 if (typeof encoding === 'function') {
48782 cb = encoding;
48783 encoding = null;
48784 }
48785
48786 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
48787
48788 if (typeof cb !== 'function') cb = nop;
48789
48790 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
48791 state.pendingcb++;
48792 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
48793 }
48794
48795 return ret;
48796};
48797
48798Writable.prototype.cork = function () {
48799 var state = this._writableState;
48800
48801 state.corked++;
48802};
48803
48804Writable.prototype.uncork = function () {
48805 var state = this._writableState;
48806
48807 if (state.corked) {
48808 state.corked--;
48809
48810 if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
48811 }
48812};
48813
48814Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
48815 // node::ParseEncoding() requires lower case.
48816 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
48817 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
48818 this._writableState.defaultEncoding = encoding;
48819 return this;
48820};
48821
48822function decodeChunk(state, chunk, encoding) {
48823 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
48824 chunk = Buffer.from(chunk, encoding);
48825 }
48826 return chunk;
48827}
48828
48829Object.defineProperty(Writable.prototype, 'writableHighWaterMark', {
48830 // making it explicit this property is not enumerable
48831 // because otherwise some prototype manipulation in
48832 // userland will fail
48833 enumerable: false,
48834 get: function () {
48835 return this._writableState.highWaterMark;
48836 }
48837});
48838
48839// if we're already writing something, then just put this
48840// in the queue, and wait our turn. Otherwise, call _write
48841// If we return false, then we need a drain event, so set that flag.
48842function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
48843 if (!isBuf) {
48844 var newChunk = decodeChunk(state, chunk, encoding);
48845 if (chunk !== newChunk) {
48846 isBuf = true;
48847 encoding = 'buffer';
48848 chunk = newChunk;
48849 }
48850 }
48851 var len = state.objectMode ? 1 : chunk.length;
48852
48853 state.length += len;
48854
48855 var ret = state.length < state.highWaterMark;
48856 // we must ensure that previous needDrain will not be reset to false.
48857 if (!ret) state.needDrain = true;
48858
48859 if (state.writing || state.corked) {
48860 var last = state.lastBufferedRequest;
48861 state.lastBufferedRequest = {
48862 chunk: chunk,
48863 encoding: encoding,
48864 isBuf: isBuf,
48865 callback: cb,
48866 next: null
48867 };
48868 if (last) {
48869 last.next = state.lastBufferedRequest;
48870 } else {
48871 state.bufferedRequest = state.lastBufferedRequest;
48872 }
48873 state.bufferedRequestCount += 1;
48874 } else {
48875 doWrite(stream, state, false, len, chunk, encoding, cb);
48876 }
48877
48878 return ret;
48879}
48880
48881function doWrite(stream, state, writev, len, chunk, encoding, cb) {
48882 state.writelen = len;
48883 state.writecb = cb;
48884 state.writing = true;
48885 state.sync = true;
48886 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
48887 state.sync = false;
48888}
48889
48890function onwriteError(stream, state, sync, er, cb) {
48891 --state.pendingcb;
48892
48893 if (sync) {
48894 // defer the callback if we are being called synchronously
48895 // to avoid piling up things on the stack
48896 pna.nextTick(cb, er);
48897 // this can emit finish, and it will always happen
48898 // after error
48899 pna.nextTick(finishMaybe, stream, state);
48900 stream._writableState.errorEmitted = true;
48901 stream.emit('error', er);
48902 } else {
48903 // the caller expect this to happen before if
48904 // it is async
48905 cb(er);
48906 stream._writableState.errorEmitted = true;
48907 stream.emit('error', er);
48908 // this can emit finish, but finish must
48909 // always follow error
48910 finishMaybe(stream, state);
48911 }
48912}
48913
48914function onwriteStateUpdate(state) {
48915 state.writing = false;
48916 state.writecb = null;
48917 state.length -= state.writelen;
48918 state.writelen = 0;
48919}
48920
48921function onwrite(stream, er) {
48922 var state = stream._writableState;
48923 var sync = state.sync;
48924 var cb = state.writecb;
48925
48926 onwriteStateUpdate(state);
48927
48928 if (er) onwriteError(stream, state, sync, er, cb);else {
48929 // Check if we're actually ready to finish, but don't emit yet
48930 var finished = needFinish(state);
48931
48932 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
48933 clearBuffer(stream, state);
48934 }
48935
48936 if (sync) {
48937 /*<replacement>*/
48938 asyncWrite(afterWrite, stream, state, finished, cb);
48939 /*</replacement>*/
48940 } else {
48941 afterWrite(stream, state, finished, cb);
48942 }
48943 }
48944}
48945
48946function afterWrite(stream, state, finished, cb) {
48947 if (!finished) onwriteDrain(stream, state);
48948 state.pendingcb--;
48949 cb();
48950 finishMaybe(stream, state);
48951}
48952
48953// Must force callback to be called on nextTick, so that we don't
48954// emit 'drain' before the write() consumer gets the 'false' return
48955// value, and has a chance to attach a 'drain' listener.
48956function onwriteDrain(stream, state) {
48957 if (state.length === 0 && state.needDrain) {
48958 state.needDrain = false;
48959 stream.emit('drain');
48960 }
48961}
48962
48963// if there's something in the buffer waiting, then process it
48964function clearBuffer(stream, state) {
48965 state.bufferProcessing = true;
48966 var entry = state.bufferedRequest;
48967
48968 if (stream._writev && entry && entry.next) {
48969 // Fast case, write everything using _writev()
48970 var l = state.bufferedRequestCount;
48971 var buffer = new Array(l);
48972 var holder = state.corkedRequestsFree;
48973 holder.entry = entry;
48974
48975 var count = 0;
48976 var allBuffers = true;
48977 while (entry) {
48978 buffer[count] = entry;
48979 if (!entry.isBuf) allBuffers = false;
48980 entry = entry.next;
48981 count += 1;
48982 }
48983 buffer.allBuffers = allBuffers;
48984
48985 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
48986
48987 // doWrite is almost always async, defer these to save a bit of time
48988 // as the hot path ends with doWrite
48989 state.pendingcb++;
48990 state.lastBufferedRequest = null;
48991 if (holder.next) {
48992 state.corkedRequestsFree = holder.next;
48993 holder.next = null;
48994 } else {
48995 state.corkedRequestsFree = new CorkedRequest(state);
48996 }
48997 state.bufferedRequestCount = 0;
48998 } else {
48999 // Slow case, write chunks one-by-one
49000 while (entry) {
49001 var chunk = entry.chunk;
49002 var encoding = entry.encoding;
49003 var cb = entry.callback;
49004 var len = state.objectMode ? 1 : chunk.length;
49005
49006 doWrite(stream, state, false, len, chunk, encoding, cb);
49007 entry = entry.next;
49008 state.bufferedRequestCount--;
49009 // if we didn't call the onwrite immediately, then
49010 // it means that we need to wait until it does.
49011 // also, that means that the chunk and cb are currently
49012 // being processed, so move the buffer counter past them.
49013 if (state.writing) {
49014 break;
49015 }
49016 }
49017
49018 if (entry === null) state.lastBufferedRequest = null;
49019 }
49020
49021 state.bufferedRequest = entry;
49022 state.bufferProcessing = false;
49023}
49024
49025Writable.prototype._write = function (chunk, encoding, cb) {
49026 cb(new Error('_write() is not implemented'));
49027};
49028
49029Writable.prototype._writev = null;
49030
49031Writable.prototype.end = function (chunk, encoding, cb) {
49032 var state = this._writableState;
49033
49034 if (typeof chunk === 'function') {
49035 cb = chunk;
49036 chunk = null;
49037 encoding = null;
49038 } else if (typeof encoding === 'function') {
49039 cb = encoding;
49040 encoding = null;
49041 }
49042
49043 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
49044
49045 // .end() fully uncorks
49046 if (state.corked) {
49047 state.corked = 1;
49048 this.uncork();
49049 }
49050
49051 // ignore unnecessary end() calls.
49052 if (!state.ending) endWritable(this, state, cb);
49053};
49054
49055function needFinish(state) {
49056 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
49057}
49058function callFinal(stream, state) {
49059 stream._final(function (err) {
49060 state.pendingcb--;
49061 if (err) {
49062 stream.emit('error', err);
49063 }
49064 state.prefinished = true;
49065 stream.emit('prefinish');
49066 finishMaybe(stream, state);
49067 });
49068}
49069function prefinish(stream, state) {
49070 if (!state.prefinished && !state.finalCalled) {
49071 if (typeof stream._final === 'function') {
49072 state.pendingcb++;
49073 state.finalCalled = true;
49074 pna.nextTick(callFinal, stream, state);
49075 } else {
49076 state.prefinished = true;
49077 stream.emit('prefinish');
49078 }
49079 }
49080}
49081
49082function finishMaybe(stream, state) {
49083 var need = needFinish(state);
49084 if (need) {
49085 prefinish(stream, state);
49086 if (state.pendingcb === 0) {
49087 state.finished = true;
49088 stream.emit('finish');
49089 }
49090 }
49091 return need;
49092}
49093
49094function endWritable(stream, state, cb) {
49095 state.ending = true;
49096 finishMaybe(stream, state);
49097 if (cb) {
49098 if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);
49099 }
49100 state.ended = true;
49101 stream.writable = false;
49102}
49103
49104function onCorkedFinish(corkReq, state, err) {
49105 var entry = corkReq.entry;
49106 corkReq.entry = null;
49107 while (entry) {
49108 var cb = entry.callback;
49109 state.pendingcb--;
49110 cb(err);
49111 entry = entry.next;
49112 }
49113
49114 // reuse the free corkReq.
49115 state.corkedRequestsFree.next = corkReq;
49116}
49117
49118Object.defineProperty(Writable.prototype, 'destroyed', {
49119 get: function () {
49120 if (this._writableState === undefined) {
49121 return false;
49122 }
49123 return this._writableState.destroyed;
49124 },
49125 set: function (value) {
49126 // we ignore the value if the stream
49127 // has not been initialized yet
49128 if (!this._writableState) {
49129 return;
49130 }
49131
49132 // backward compatibility, the user is explicitly
49133 // managing destroyed
49134 this._writableState.destroyed = value;
49135 }
49136});
49137
49138Writable.prototype.destroy = destroyImpl.destroy;
49139Writable.prototype._undestroy = destroyImpl.undestroy;
49140Writable.prototype._destroy = function (err, cb) {
49141 this.end();
49142 cb(err);
49143};
49144}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate)
49145},{"./_stream_duplex":226,"./internal/streams/destroy":232,"./internal/streams/stream":233,"_process":224,"core-util-is":118,"inherits":187,"process-nextick-args":223,"safe-buffer":234,"timers":266,"util-deprecate":272}],231:[function(require,module,exports){
49146'use strict';
49147
49148function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
49149
49150var Buffer = require('safe-buffer').Buffer;
49151var util = require('util');
49152
49153function copyBuffer(src, target, offset) {
49154 src.copy(target, offset);
49155}
49156
49157module.exports = function () {
49158 function BufferList() {
49159 _classCallCheck(this, BufferList);
49160
49161 this.head = null;
49162 this.tail = null;
49163 this.length = 0;
49164 }
49165
49166 BufferList.prototype.push = function push(v) {
49167 var entry = { data: v, next: null };
49168 if (this.length > 0) this.tail.next = entry;else this.head = entry;
49169 this.tail = entry;
49170 ++this.length;
49171 };
49172
49173 BufferList.prototype.unshift = function unshift(v) {
49174 var entry = { data: v, next: this.head };
49175 if (this.length === 0) this.tail = entry;
49176 this.head = entry;
49177 ++this.length;
49178 };
49179
49180 BufferList.prototype.shift = function shift() {
49181 if (this.length === 0) return;
49182 var ret = this.head.data;
49183 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
49184 --this.length;
49185 return ret;
49186 };
49187
49188 BufferList.prototype.clear = function clear() {
49189 this.head = this.tail = null;
49190 this.length = 0;
49191 };
49192
49193 BufferList.prototype.join = function join(s) {
49194 if (this.length === 0) return '';
49195 var p = this.head;
49196 var ret = '' + p.data;
49197 while (p = p.next) {
49198 ret += s + p.data;
49199 }return ret;
49200 };
49201
49202 BufferList.prototype.concat = function concat(n) {
49203 if (this.length === 0) return Buffer.alloc(0);
49204 var ret = Buffer.allocUnsafe(n >>> 0);
49205 var p = this.head;
49206 var i = 0;
49207 while (p) {
49208 copyBuffer(p.data, ret, i);
49209 i += p.data.length;
49210 p = p.next;
49211 }
49212 return ret;
49213 };
49214
49215 return BufferList;
49216}();
49217
49218if (util && util.inspect && util.inspect.custom) {
49219 module.exports.prototype[util.inspect.custom] = function () {
49220 var obj = util.inspect({ length: this.length });
49221 return this.constructor.name + ' ' + obj;
49222 };
49223}
49224},{"safe-buffer":234,"util":99}],232:[function(require,module,exports){
49225'use strict';
49226
49227/*<replacement>*/
49228
49229var pna = require('process-nextick-args');
49230/*</replacement>*/
49231
49232// undocumented cb() API, needed for core, not for public API
49233function destroy(err, cb) {
49234 var _this = this;
49235
49236 var readableDestroyed = this._readableState && this._readableState.destroyed;
49237 var writableDestroyed = this._writableState && this._writableState.destroyed;
49238
49239 if (readableDestroyed || writableDestroyed) {
49240 if (cb) {
49241 cb(err);
49242 } else if (err) {
49243 if (!this._writableState) {
49244 pna.nextTick(emitErrorNT, this, err);
49245 } else if (!this._writableState.errorEmitted) {
49246 this._writableState.errorEmitted = true;
49247 pna.nextTick(emitErrorNT, this, err);
49248 }
49249 }
49250
49251 return this;
49252 }
49253
49254 // we set destroyed to true before firing error callbacks in order
49255 // to make it re-entrance safe in case destroy() is called within callbacks
49256
49257 if (this._readableState) {
49258 this._readableState.destroyed = true;
49259 }
49260
49261 // if this is a duplex stream mark the writable part as destroyed as well
49262 if (this._writableState) {
49263 this._writableState.destroyed = true;
49264 }
49265
49266 this._destroy(err || null, function (err) {
49267 if (!cb && err) {
49268 if (!_this._writableState) {
49269 pna.nextTick(emitErrorNT, _this, err);
49270 } else if (!_this._writableState.errorEmitted) {
49271 _this._writableState.errorEmitted = true;
49272 pna.nextTick(emitErrorNT, _this, err);
49273 }
49274 } else if (cb) {
49275 cb(err);
49276 }
49277 });
49278
49279 return this;
49280}
49281
49282function undestroy() {
49283 if (this._readableState) {
49284 this._readableState.destroyed = false;
49285 this._readableState.reading = false;
49286 this._readableState.ended = false;
49287 this._readableState.endEmitted = false;
49288 }
49289
49290 if (this._writableState) {
49291 this._writableState.destroyed = false;
49292 this._writableState.ended = false;
49293 this._writableState.ending = false;
49294 this._writableState.finalCalled = false;
49295 this._writableState.prefinished = false;
49296 this._writableState.finished = false;
49297 this._writableState.errorEmitted = false;
49298 }
49299}
49300
49301function emitErrorNT(self, err) {
49302 self.emit('error', err);
49303}
49304
49305module.exports = {
49306 destroy: destroy,
49307 undestroy: undestroy
49308};
49309},{"process-nextick-args":223}],233:[function(require,module,exports){
49310module.exports = require('events').EventEmitter;
49311
49312},{"events":170}],234:[function(require,module,exports){
49313/* eslint-disable node/no-deprecated-api */
49314var buffer = require('buffer')
49315var Buffer = buffer.Buffer
49316
49317// alternative to using Object.keys for old browsers
49318function copyProps (src, dst) {
49319 for (var key in src) {
49320 dst[key] = src[key]
49321 }
49322}
49323if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
49324 module.exports = buffer
49325} else {
49326 // Copy properties from require('buffer')
49327 copyProps(buffer, exports)
49328 exports.Buffer = SafeBuffer
49329}
49330
49331function SafeBuffer (arg, encodingOrOffset, length) {
49332 return Buffer(arg, encodingOrOffset, length)
49333}
49334
49335// Copy static methods from Buffer
49336copyProps(Buffer, SafeBuffer)
49337
49338SafeBuffer.from = function (arg, encodingOrOffset, length) {
49339 if (typeof arg === 'number') {
49340 throw new TypeError('Argument must not be a number')
49341 }
49342 return Buffer(arg, encodingOrOffset, length)
49343}
49344
49345SafeBuffer.alloc = function (size, fill, encoding) {
49346 if (typeof size !== 'number') {
49347 throw new TypeError('Argument must be a number')
49348 }
49349 var buf = Buffer(size)
49350 if (fill !== undefined) {
49351 if (typeof encoding === 'string') {
49352 buf.fill(fill, encoding)
49353 } else {
49354 buf.fill(fill)
49355 }
49356 } else {
49357 buf.fill(0)
49358 }
49359 return buf
49360}
49361
49362SafeBuffer.allocUnsafe = function (size) {
49363 if (typeof size !== 'number') {
49364 throw new TypeError('Argument must be a number')
49365 }
49366 return Buffer(size)
49367}
49368
49369SafeBuffer.allocUnsafeSlow = function (size) {
49370 if (typeof size !== 'number') {
49371 throw new TypeError('Argument must be a number')
49372 }
49373 return buffer.SlowBuffer(size)
49374}
49375
49376},{"buffer":114}],235:[function(require,module,exports){
49377// Copyright Joyent, Inc. and other Node contributors.
49378//
49379// Permission is hereby granted, free of charge, to any person obtaining a
49380// copy of this software and associated documentation files (the
49381// "Software"), to deal in the Software without restriction, including
49382// without limitation the rights to use, copy, modify, merge, publish,
49383// distribute, sublicense, and/or sell copies of the Software, and to permit
49384// persons to whom the Software is furnished to do so, subject to the
49385// following conditions:
49386//
49387// The above copyright notice and this permission notice shall be included
49388// in all copies or substantial portions of the Software.
49389//
49390// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
49391// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
49392// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
49393// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
49394// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
49395// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
49396// USE OR OTHER DEALINGS IN THE SOFTWARE.
49397
49398'use strict';
49399
49400/*<replacement>*/
49401
49402var Buffer = require('safe-buffer').Buffer;
49403/*</replacement>*/
49404
49405var isEncoding = Buffer.isEncoding || function (encoding) {
49406 encoding = '' + encoding;
49407 switch (encoding && encoding.toLowerCase()) {
49408 case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
49409 return true;
49410 default:
49411 return false;
49412 }
49413};
49414
49415function _normalizeEncoding(enc) {
49416 if (!enc) return 'utf8';
49417 var retried;
49418 while (true) {
49419 switch (enc) {
49420 case 'utf8':
49421 case 'utf-8':
49422 return 'utf8';
49423 case 'ucs2':
49424 case 'ucs-2':
49425 case 'utf16le':
49426 case 'utf-16le':
49427 return 'utf16le';
49428 case 'latin1':
49429 case 'binary':
49430 return 'latin1';
49431 case 'base64':
49432 case 'ascii':
49433 case 'hex':
49434 return enc;
49435 default:
49436 if (retried) return; // undefined
49437 enc = ('' + enc).toLowerCase();
49438 retried = true;
49439 }
49440 }
49441};
49442
49443// Do not cache `Buffer.isEncoding` when checking encoding names as some
49444// modules monkey-patch it to support additional encodings
49445function normalizeEncoding(enc) {
49446 var nenc = _normalizeEncoding(enc);
49447 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
49448 return nenc || enc;
49449}
49450
49451// StringDecoder provides an interface for efficiently splitting a series of
49452// buffers into a series of JS strings without breaking apart multi-byte
49453// characters.
49454exports.StringDecoder = StringDecoder;
49455function StringDecoder(encoding) {
49456 this.encoding = normalizeEncoding(encoding);
49457 var nb;
49458 switch (this.encoding) {
49459 case 'utf16le':
49460 this.text = utf16Text;
49461 this.end = utf16End;
49462 nb = 4;
49463 break;
49464 case 'utf8':
49465 this.fillLast = utf8FillLast;
49466 nb = 4;
49467 break;
49468 case 'base64':
49469 this.text = base64Text;
49470 this.end = base64End;
49471 nb = 3;
49472 break;
49473 default:
49474 this.write = simpleWrite;
49475 this.end = simpleEnd;
49476 return;
49477 }
49478 this.lastNeed = 0;
49479 this.lastTotal = 0;
49480 this.lastChar = Buffer.allocUnsafe(nb);
49481}
49482
49483StringDecoder.prototype.write = function (buf) {
49484 if (buf.length === 0) return '';
49485 var r;
49486 var i;
49487 if (this.lastNeed) {
49488 r = this.fillLast(buf);
49489 if (r === undefined) return '';
49490 i = this.lastNeed;
49491 this.lastNeed = 0;
49492 } else {
49493 i = 0;
49494 }
49495 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
49496 return r || '';
49497};
49498
49499StringDecoder.prototype.end = utf8End;
49500
49501// Returns only complete characters in a Buffer
49502StringDecoder.prototype.text = utf8Text;
49503
49504// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
49505StringDecoder.prototype.fillLast = function (buf) {
49506 if (this.lastNeed <= buf.length) {
49507 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
49508 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
49509 }
49510 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
49511 this.lastNeed -= buf.length;
49512};
49513
49514// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
49515// continuation byte. If an invalid byte is detected, -2 is returned.
49516function utf8CheckByte(byte) {
49517 if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
49518 return byte >> 6 === 0x02 ? -1 : -2;
49519}
49520
49521// Checks at most 3 bytes at the end of a Buffer in order to detect an
49522// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
49523// needed to complete the UTF-8 character (if applicable) are returned.
49524function utf8CheckIncomplete(self, buf, i) {
49525 var j = buf.length - 1;
49526 if (j < i) return 0;
49527 var nb = utf8CheckByte(buf[j]);
49528 if (nb >= 0) {
49529 if (nb > 0) self.lastNeed = nb - 1;
49530 return nb;
49531 }
49532 if (--j < i || nb === -2) return 0;
49533 nb = utf8CheckByte(buf[j]);
49534 if (nb >= 0) {
49535 if (nb > 0) self.lastNeed = nb - 2;
49536 return nb;
49537 }
49538 if (--j < i || nb === -2) return 0;
49539 nb = utf8CheckByte(buf[j]);
49540 if (nb >= 0) {
49541 if (nb > 0) {
49542 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
49543 }
49544 return nb;
49545 }
49546 return 0;
49547}
49548
49549// Validates as many continuation bytes for a multi-byte UTF-8 character as
49550// needed or are available. If we see a non-continuation byte where we expect
49551// one, we "replace" the validated continuation bytes we've seen so far with
49552// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding
49553// behavior. The continuation byte check is included three times in the case
49554// where all of the continuation bytes for a character exist in the same buffer.
49555// It is also done this way as a slight performance increase instead of using a
49556// loop.
49557function utf8CheckExtraBytes(self, buf, p) {
49558 if ((buf[0] & 0xC0) !== 0x80) {
49559 self.lastNeed = 0;
49560 return '\ufffd';
49561 }
49562 if (self.lastNeed > 1 && buf.length > 1) {
49563 if ((buf[1] & 0xC0) !== 0x80) {
49564 self.lastNeed = 1;
49565 return '\ufffd';
49566 }
49567 if (self.lastNeed > 2 && buf.length > 2) {
49568 if ((buf[2] & 0xC0) !== 0x80) {
49569 self.lastNeed = 2;
49570 return '\ufffd';
49571 }
49572 }
49573 }
49574}
49575
49576// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
49577function utf8FillLast(buf) {
49578 var p = this.lastTotal - this.lastNeed;
49579 var r = utf8CheckExtraBytes(this, buf, p);
49580 if (r !== undefined) return r;
49581 if (this.lastNeed <= buf.length) {
49582 buf.copy(this.lastChar, p, 0, this.lastNeed);
49583 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
49584 }
49585 buf.copy(this.lastChar, p, 0, buf.length);
49586 this.lastNeed -= buf.length;
49587}
49588
49589// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
49590// partial character, the character's bytes are buffered until the required
49591// number of bytes are available.
49592function utf8Text(buf, i) {
49593 var total = utf8CheckIncomplete(this, buf, i);
49594 if (!this.lastNeed) return buf.toString('utf8', i);
49595 this.lastTotal = total;
49596 var end = buf.length - (total - this.lastNeed);
49597 buf.copy(this.lastChar, 0, end);
49598 return buf.toString('utf8', i, end);
49599}
49600
49601// For UTF-8, a replacement character is added when ending on a partial
49602// character.
49603function utf8End(buf) {
49604 var r = buf && buf.length ? this.write(buf) : '';
49605 if (this.lastNeed) return r + '\ufffd';
49606 return r;
49607}
49608
49609// UTF-16LE typically needs two bytes per character, but even if we have an even
49610// number of bytes available, we need to check if we end on a leading/high
49611// surrogate. In that case, we need to wait for the next two bytes in order to
49612// decode the last character properly.
49613function utf16Text(buf, i) {
49614 if ((buf.length - i) % 2 === 0) {
49615 var r = buf.toString('utf16le', i);
49616 if (r) {
49617 var c = r.charCodeAt(r.length - 1);
49618 if (c >= 0xD800 && c <= 0xDBFF) {
49619 this.lastNeed = 2;
49620 this.lastTotal = 4;
49621 this.lastChar[0] = buf[buf.length - 2];
49622 this.lastChar[1] = buf[buf.length - 1];
49623 return r.slice(0, -1);
49624 }
49625 }
49626 return r;
49627 }
49628 this.lastNeed = 1;
49629 this.lastTotal = 2;
49630 this.lastChar[0] = buf[buf.length - 1];
49631 return buf.toString('utf16le', i, buf.length - 1);
49632}
49633
49634// For UTF-16LE we do not explicitly append special replacement characters if we
49635// end on a partial character, we simply let v8 handle that.
49636function utf16End(buf) {
49637 var r = buf && buf.length ? this.write(buf) : '';
49638 if (this.lastNeed) {
49639 var end = this.lastTotal - this.lastNeed;
49640 return r + this.lastChar.toString('utf16le', 0, end);
49641 }
49642 return r;
49643}
49644
49645function base64Text(buf, i) {
49646 var n = (buf.length - i) % 3;
49647 if (n === 0) return buf.toString('base64', i);
49648 this.lastNeed = 3 - n;
49649 this.lastTotal = 3;
49650 if (n === 1) {
49651 this.lastChar[0] = buf[buf.length - 1];
49652 } else {
49653 this.lastChar[0] = buf[buf.length - 2];
49654 this.lastChar[1] = buf[buf.length - 1];
49655 }
49656 return buf.toString('base64', i, buf.length - n);
49657}
49658
49659function base64End(buf) {
49660 var r = buf && buf.length ? this.write(buf) : '';
49661 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
49662 return r;
49663}
49664
49665// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
49666function simpleWrite(buf) {
49667 return buf.toString(this.encoding);
49668}
49669
49670function simpleEnd(buf) {
49671 return buf && buf.length ? this.write(buf) : '';
49672}
49673},{"safe-buffer":234}],236:[function(require,module,exports){
49674module.exports = require('./readable').PassThrough
49675
49676},{"./readable":237}],237:[function(require,module,exports){
49677exports = module.exports = require('./lib/_stream_readable.js');
49678exports.Stream = exports;
49679exports.Readable = exports;
49680exports.Writable = require('./lib/_stream_writable.js');
49681exports.Duplex = require('./lib/_stream_duplex.js');
49682exports.Transform = require('./lib/_stream_transform.js');
49683exports.PassThrough = require('./lib/_stream_passthrough.js');
49684
49685},{"./lib/_stream_duplex.js":226,"./lib/_stream_passthrough.js":227,"./lib/_stream_readable.js":228,"./lib/_stream_transform.js":229,"./lib/_stream_writable.js":230}],238:[function(require,module,exports){
49686module.exports = require('./readable').Transform
49687
49688},{"./readable":237}],239:[function(require,module,exports){
49689module.exports = require('./lib/_stream_writable.js');
49690
49691},{"./lib/_stream_writable.js":230}],240:[function(require,module,exports){
49692'use strict';
49693
49694var setFunctionName = require('set-function-name');
49695var $TypeError = require('es-errors/type');
49696
49697var $Object = Object;
49698
49699module.exports = setFunctionName(function flags() {
49700 if (this == null || this !== $Object(this)) {
49701 throw new $TypeError('RegExp.prototype.flags getter called on non-object');
49702 }
49703 var result = '';
49704 if (this.hasIndices) {
49705 result += 'd';
49706 }
49707 if (this.global) {
49708 result += 'g';
49709 }
49710 if (this.ignoreCase) {
49711 result += 'i';
49712 }
49713 if (this.multiline) {
49714 result += 'm';
49715 }
49716 if (this.dotAll) {
49717 result += 's';
49718 }
49719 if (this.unicode) {
49720 result += 'u';
49721 }
49722 if (this.unicodeSets) {
49723 result += 'v';
49724 }
49725 if (this.sticky) {
49726 result += 'y';
49727 }
49728 return result;
49729}, 'get flags', true);
49730
49731
49732},{"es-errors/type":166,"set-function-name":262}],241:[function(require,module,exports){
49733'use strict';
49734
49735var define = require('define-properties');
49736var callBind = require('call-bind');
49737
49738var implementation = require('./implementation');
49739var getPolyfill = require('./polyfill');
49740var shim = require('./shim');
49741
49742var flagsBound = callBind(getPolyfill());
49743
49744define(flagsBound, {
49745 getPolyfill: getPolyfill,
49746 implementation: implementation,
49747 shim: shim
49748});
49749
49750module.exports = flagsBound;
49751
49752},{"./implementation":240,"./polyfill":242,"./shim":243,"call-bind":116,"define-properties":158}],242:[function(require,module,exports){
49753'use strict';
49754
49755var implementation = require('./implementation');
49756
49757var supportsDescriptors = require('define-properties').supportsDescriptors;
49758var $gOPD = Object.getOwnPropertyDescriptor;
49759
49760module.exports = function getPolyfill() {
49761 if (supportsDescriptors && (/a/mig).flags === 'gim') {
49762 var descriptor = $gOPD(RegExp.prototype, 'flags');
49763 if (
49764 descriptor
49765 && typeof descriptor.get === 'function'
49766 && typeof RegExp.prototype.dotAll === 'boolean'
49767 && typeof RegExp.prototype.hasIndices === 'boolean'
49768 ) {
49769 /* eslint getter-return: 0 */
49770 var calls = '';
49771 var o = {};
49772 Object.defineProperty(o, 'hasIndices', {
49773 get: function () {
49774 calls += 'd';
49775 }
49776 });
49777 Object.defineProperty(o, 'sticky', {
49778 get: function () {
49779 calls += 'y';
49780 }
49781 });
49782 if (calls === 'dy') {
49783 return descriptor.get;
49784 }
49785 }
49786 }
49787 return implementation;
49788};
49789
49790},{"./implementation":240,"define-properties":158}],243:[function(require,module,exports){
49791'use strict';
49792
49793var supportsDescriptors = require('define-properties').supportsDescriptors;
49794var getPolyfill = require('./polyfill');
49795var gOPD = Object.getOwnPropertyDescriptor;
49796var defineProperty = Object.defineProperty;
49797var TypeErr = TypeError;
49798var getProto = Object.getPrototypeOf;
49799var regex = /a/;
49800
49801module.exports = function shimFlags() {
49802 if (!supportsDescriptors || !getProto) {
49803 throw new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');
49804 }
49805 var polyfill = getPolyfill();
49806 var proto = getProto(regex);
49807 var descriptor = gOPD(proto, 'flags');
49808 if (!descriptor || descriptor.get !== polyfill) {
49809 defineProperty(proto, 'flags', {
49810 configurable: true,
49811 enumerable: false,
49812 get: polyfill
49813 });
49814 }
49815 return polyfill;
49816};
49817
49818},{"./polyfill":242,"define-properties":158}],244:[function(require,module,exports){
49819exports.EncodeStream = require('./src/EncodeStream');
49820exports.DecodeStream = require('./src/DecodeStream');
49821exports.Array = require('./src/Array');
49822exports.LazyArray = require('./src/LazyArray');
49823exports.Bitfield = require('./src/Bitfield');
49824exports.Boolean = require('./src/Boolean');
49825exports.Buffer = require('./src/Buffer');
49826exports.Enum = require('./src/Enum');
49827exports.Optional = require('./src/Optional');
49828exports.Reserved = require('./src/Reserved');
49829exports.String = require('./src/String');
49830exports.Struct = require('./src/Struct');
49831exports.VersionedStruct = require('./src/VersionedStruct');
49832
49833const utils = require('./src/utils');
49834const NumberT = require('./src/Number');
49835const Pointer = require('./src/Pointer');
49836
49837Object.assign(exports, utils, NumberT, Pointer);
49838
49839},{"./src/Array":245,"./src/Bitfield":246,"./src/Boolean":247,"./src/Buffer":248,"./src/DecodeStream":249,"./src/EncodeStream":250,"./src/Enum":251,"./src/LazyArray":252,"./src/Number":253,"./src/Optional":254,"./src/Pointer":255,"./src/Reserved":256,"./src/String":257,"./src/Struct":258,"./src/VersionedStruct":259,"./src/utils":260}],245:[function(require,module,exports){
49840const {Number:NumberT} = require('./Number');
49841const utils = require('./utils');
49842
49843class ArrayT {
49844 constructor(type, length, lengthType = 'count') {
49845 this.type = type;
49846 this.length = length;
49847 this.lengthType = lengthType;
49848 }
49849
49850 decode(stream, parent) {
49851 let length;
49852 const { pos } = stream;
49853
49854 const res = [];
49855 let ctx = parent;
49856
49857 if (this.length != null) {
49858 length = utils.resolveLength(this.length, stream, parent);
49859 }
49860
49861 if (this.length instanceof NumberT) {
49862 // define hidden properties
49863 Object.defineProperties(res, {
49864 parent: { value: parent },
49865 _startOffset: { value: pos },
49866 _currentOffset: { value: 0, writable: true },
49867 _length: { value: length }
49868 });
49869
49870 ctx = res;
49871 }
49872
49873 if ((length == null) || (this.lengthType === 'bytes')) {
49874 const target = (length != null) ?
49875 stream.pos + length
49876 : (parent != null ? parent._length : undefined) ?
49877 parent._startOffset + parent._length
49878 :
49879 stream.length;
49880
49881 while (stream.pos < target) {
49882 res.push(this.type.decode(stream, ctx));
49883 }
49884
49885 } else {
49886 for (let i = 0, end = length; i < end; i++) {
49887 res.push(this.type.decode(stream, ctx));
49888 }
49889 }
49890
49891 return res;
49892 }
49893
49894 size(array, ctx) {
49895 if (!array) {
49896 return this.type.size(null, ctx) * utils.resolveLength(this.length, null, ctx);
49897 }
49898
49899 let size = 0;
49900 if (this.length instanceof NumberT) {
49901 size += this.length.size();
49902 ctx = {parent: ctx};
49903 }
49904
49905 for (let item of array) {
49906 size += this.type.size(item, ctx);
49907 }
49908
49909 return size;
49910 }
49911
49912 encode(stream, array, parent) {
49913 let ctx = parent;
49914 if (this.length instanceof NumberT) {
49915 ctx = {
49916 pointers: [],
49917 startOffset: stream.pos,
49918 parent
49919 };
49920
49921 ctx.pointerOffset = stream.pos + this.size(array, ctx);
49922 this.length.encode(stream, array.length);
49923 }
49924
49925 for (let item of array) {
49926 this.type.encode(stream, item, ctx);
49927 }
49928
49929 if (this.length instanceof NumberT) {
49930 let i = 0;
49931 while (i < ctx.pointers.length) {
49932 const ptr = ctx.pointers[i++];
49933 ptr.type.encode(stream, ptr.val);
49934 }
49935 }
49936
49937 }
49938}
49939
49940module.exports = ArrayT;
49941
49942},{"./Number":253,"./utils":260}],246:[function(require,module,exports){
49943class Bitfield {
49944 constructor(type, flags = []) {
49945 this.type = type;
49946 this.flags = flags;
49947 }
49948 decode(stream) {
49949 const val = this.type.decode(stream);
49950
49951 const res = {};
49952 for (let i = 0; i < this.flags.length; i++) {
49953 const flag = this.flags[i];
49954 if (flag != null) {
49955 res[flag] = !!(val & (1 << i));
49956 }
49957 }
49958
49959 return res;
49960 }
49961
49962 size() {
49963 return this.type.size();
49964 }
49965
49966 encode(stream, keys) {
49967 let val = 0;
49968 for (let i = 0; i < this.flags.length; i++) {
49969 const flag = this.flags[i];
49970 if (flag != null) {
49971 if (keys[flag]) { val |= (1 << i); }
49972 }
49973 }
49974
49975 return this.type.encode(stream, val);
49976 }
49977}
49978
49979module.exports = Bitfield;
49980
49981},{}],247:[function(require,module,exports){
49982class BooleanT {
49983 constructor(type) {
49984 this.type = type;
49985 }
49986
49987 decode(stream, parent) {
49988 return !!this.type.decode(stream, parent);
49989 }
49990
49991 size(val, parent) {
49992 return this.type.size(val, parent);
49993 }
49994
49995 encode(stream, val, parent) {
49996 return this.type.encode(stream, +val, parent);
49997 }
49998}
49999
50000module.exports = BooleanT;
50001
50002},{}],248:[function(require,module,exports){
50003const utils = require('./utils');
50004const {Number:NumberT} = require('./Number');
50005
50006class BufferT {
50007 constructor(length) {
50008 this.length = length;
50009 }
50010 decode(stream, parent) {
50011 const length = utils.resolveLength(this.length, stream, parent);
50012 return stream.readBuffer(length);
50013 }
50014
50015 size(val, parent) {
50016 if (!val) {
50017 return utils.resolveLength(this.length, null, parent);
50018 }
50019
50020 return val.length;
50021 }
50022
50023 encode(stream, buf, parent) {
50024 if (this.length instanceof NumberT) {
50025 this.length.encode(stream, buf.length);
50026 }
50027
50028 return stream.writeBuffer(buf);
50029 }
50030}
50031
50032module.exports = BufferT;
50033
50034},{"./Number":253,"./utils":260}],249:[function(require,module,exports){
50035(function (Buffer){(function (){
50036let iconv;
50037try { iconv = require('iconv-lite'); } catch (error) {}
50038
50039class DecodeStream {
50040 constructor(buffer) {
50041 this.buffer = buffer;
50042 this.pos = 0;
50043 this.length = this.buffer.length;
50044 }
50045
50046 readString(length, encoding = 'ascii') {
50047 switch (encoding) {
50048 case 'utf16le': case 'ucs2': case 'utf8': case 'ascii':
50049 return this.buffer.toString(encoding, this.pos, (this.pos += length));
50050
50051 case 'utf16be':
50052 var buf = Buffer.from(this.readBuffer(length));
50053
50054 // swap the bytes
50055 for (let i = 0, end = buf.length - 1; i < end; i += 2) {
50056 const byte = buf[i];
50057 buf[i] = buf[i + 1];
50058 buf[i + 1] = byte;
50059 }
50060
50061 return buf.toString('utf16le');
50062
50063 default:
50064 buf = this.readBuffer(length);
50065 if (iconv) {
50066 try {
50067 return iconv.decode(buf, encoding);
50068 } catch (error1) {}
50069 }
50070
50071 return buf;
50072 }
50073 }
50074
50075 readBuffer(length) {
50076 return this.buffer.slice(this.pos, (this.pos += length));
50077 }
50078
50079 readUInt24BE() {
50080 return (this.readUInt16BE() << 8) + this.readUInt8();
50081 }
50082
50083 readUInt24LE() {
50084 return this.readUInt16LE() + (this.readUInt8() << 16);
50085 }
50086
50087 readInt24BE() {
50088 return (this.readInt16BE() << 8) + this.readUInt8();
50089 }
50090
50091 readInt24LE() {
50092 return this.readUInt16LE() + (this.readInt8() << 16);
50093 }
50094}
50095
50096DecodeStream.TYPES = {
50097 UInt8: 1,
50098 UInt16: 2,
50099 UInt24: 3,
50100 UInt32: 4,
50101 Int8: 1,
50102 Int16: 2,
50103 Int24: 3,
50104 Int32: 4,
50105 Float: 4,
50106 Double: 8
50107};
50108
50109for (let key in Buffer.prototype) {
50110 if (key.slice(0, 4) === 'read') {
50111 const bytes = DecodeStream.TYPES[key.replace(/read|[BL]E/g, '')];
50112 DecodeStream.prototype[key] = function() {
50113 const ret = this.buffer[key](this.pos);
50114 this.pos += bytes;
50115 return ret;
50116 };
50117 }
50118}
50119
50120module.exports = DecodeStream;
50121
50122}).call(this)}).call(this,require("buffer").Buffer)
50123},{"buffer":114,"iconv-lite":113}],250:[function(require,module,exports){
50124(function (Buffer){(function (){
50125let iconv;
50126const stream = require('stream');
50127const DecodeStream = require('./DecodeStream');
50128try { iconv = require('iconv-lite'); } catch (error) {}
50129
50130class EncodeStream extends stream.Readable {
50131 constructor(bufferSize = 65536) {
50132 super(...arguments);
50133 this.buffer = Buffer.alloc(bufferSize);
50134 this.bufferOffset = 0;
50135 this.pos = 0;
50136 }
50137
50138 // do nothing, required by node
50139 _read() {}
50140
50141 ensure(bytes) {
50142 if ((this.bufferOffset + bytes) > this.buffer.length) {
50143 return this.flush();
50144 }
50145 }
50146
50147 flush() {
50148 if (this.bufferOffset > 0) {
50149 this.push(Buffer.from(this.buffer.slice(0, this.bufferOffset)));
50150 return this.bufferOffset = 0;
50151 }
50152 }
50153
50154 writeBuffer(buffer) {
50155 this.flush();
50156 this.push(buffer);
50157 return this.pos += buffer.length;
50158 }
50159
50160 writeString(string, encoding = 'ascii') {
50161 switch (encoding) {
50162 case 'utf16le': case 'ucs2': case 'utf8': case 'ascii':
50163 return this.writeBuffer(Buffer.from(string, encoding));
50164
50165 case 'utf16be':
50166 var buf = Buffer.from(string, 'utf16le');
50167
50168 // swap the bytes
50169 for (let i = 0, end = buf.length - 1; i < end; i += 2) {
50170 const byte = buf[i];
50171 buf[i] = buf[i + 1];
50172 buf[i + 1] = byte;
50173 }
50174
50175 return this.writeBuffer(buf);
50176
50177 default:
50178 if (iconv) {
50179 return this.writeBuffer(iconv.encode(string, encoding));
50180 } else {
50181 throw new Error('Install iconv-lite to enable additional string encodings.');
50182 }
50183 }
50184 }
50185
50186 writeUInt24BE(val) {
50187 this.ensure(3);
50188 this.buffer[this.bufferOffset++] = (val >>> 16) & 0xff;
50189 this.buffer[this.bufferOffset++] = (val >>> 8) & 0xff;
50190 this.buffer[this.bufferOffset++] = val & 0xff;
50191 return this.pos += 3;
50192 }
50193
50194 writeUInt24LE(val) {
50195 this.ensure(3);
50196 this.buffer[this.bufferOffset++] = val & 0xff;
50197 this.buffer[this.bufferOffset++] = (val >>> 8) & 0xff;
50198 this.buffer[this.bufferOffset++] = (val >>> 16) & 0xff;
50199 return this.pos += 3;
50200 }
50201
50202 writeInt24BE(val) {
50203 if (val >= 0) {
50204 return this.writeUInt24BE(val);
50205 } else {
50206 return this.writeUInt24BE(val + 0xffffff + 1);
50207 }
50208 }
50209
50210 writeInt24LE(val) {
50211 if (val >= 0) {
50212 return this.writeUInt24LE(val);
50213 } else {
50214 return this.writeUInt24LE(val + 0xffffff + 1);
50215 }
50216 }
50217
50218 fill(val, length) {
50219 if (length < this.buffer.length) {
50220 this.ensure(length);
50221 this.buffer.fill(val, this.bufferOffset, this.bufferOffset + length);
50222 this.bufferOffset += length;
50223 return this.pos += length;
50224 } else {
50225 const buf = Buffer.alloc(length);
50226 buf.fill(val);
50227 return this.writeBuffer(buf);
50228 }
50229 }
50230
50231 end() {
50232 this.flush();
50233 return this.push(null);
50234 }
50235}
50236
50237for (let key in Buffer.prototype) {
50238 if (key.slice(0, 5) === 'write') {
50239 const bytes = +DecodeStream.TYPES[key.replace(/write|[BL]E/g, '')];
50240 EncodeStream.prototype[key] = function(value) {
50241 this.ensure(bytes);
50242 this.buffer[key](value, this.bufferOffset);
50243 this.bufferOffset += bytes;
50244 return this.pos += bytes;
50245 };
50246 }
50247}
50248
50249module.exports = EncodeStream;
50250
50251}).call(this)}).call(this,require("buffer").Buffer)
50252},{"./DecodeStream":249,"buffer":114,"iconv-lite":113,"stream":265}],251:[function(require,module,exports){
50253class Enum {
50254 constructor(type, options = []) {
50255 this.type = type;
50256 this.options = options;
50257 }
50258 decode(stream) {
50259 const index = this.type.decode(stream);
50260 return this.options[index] || index;
50261 }
50262
50263 size() {
50264 return this.type.size();
50265 }
50266
50267 encode(stream, val) {
50268 const index = this.options.indexOf(val);
50269 if (index === -1) {
50270 throw new Error(`Unknown option in enum: ${val}`);
50271 }
50272
50273 return this.type.encode(stream, index);
50274 }
50275}
50276
50277module.exports = Enum;
50278
50279},{}],252:[function(require,module,exports){
50280const ArrayT = require('./Array');
50281const {Number:NumberT} = require('./Number');
50282const utils = require('./utils');
50283const {inspect} = require('util');
50284
50285class LazyArrayT extends ArrayT {
50286 decode(stream, parent) {
50287 const { pos } = stream;
50288 const length = utils.resolveLength(this.length, stream, parent);
50289
50290 if (this.length instanceof NumberT) {
50291 parent = {
50292 parent,
50293 _startOffset: pos,
50294 _currentOffset: 0,
50295 _length: length
50296 };
50297 }
50298
50299 const res = new LazyArray(this.type, length, stream, parent);
50300
50301 stream.pos += length * this.type.size(null, parent);
50302 return res;
50303 }
50304
50305 size(val, ctx) {
50306 if (val instanceof LazyArray) {
50307 val = val.toArray();
50308 }
50309
50310 return super.size(val, ctx);
50311 }
50312
50313 encode(stream, val, ctx) {
50314 if (val instanceof LazyArray) {
50315 val = val.toArray();
50316 }
50317
50318 return super.encode(stream, val, ctx);
50319 }
50320}
50321
50322class LazyArray {
50323 constructor(type, length, stream, ctx) {
50324 this.type = type;
50325 this.length = length;
50326 this.stream = stream;
50327 this.ctx = ctx;
50328 this.base = this.stream.pos;
50329 this.items = [];
50330 }
50331
50332 get(index) {
50333 if ((index < 0) || (index >= this.length)) {
50334 return undefined;
50335 }
50336
50337 if (this.items[index] == null) {
50338 const { pos } = this.stream;
50339 this.stream.pos = this.base + (this.type.size(null, this.ctx) * index);
50340 this.items[index] = this.type.decode(this.stream, this.ctx);
50341 this.stream.pos = pos;
50342 }
50343
50344 return this.items[index];
50345 }
50346
50347 toArray() {
50348 const result = [];
50349 for (let i = 0, end = this.length; i < end; i++) {
50350 result.push(this.get(i));
50351 }
50352 return result;
50353 }
50354
50355 inspect() {
50356 return inspect(this.toArray());
50357 }
50358}
50359
50360module.exports = LazyArrayT;
50361
50362},{"./Array":245,"./Number":253,"./utils":260,"util":275}],253:[function(require,module,exports){
50363const DecodeStream = require('./DecodeStream');
50364
50365class NumberT {
50366 constructor(type, endian = 'BE') {
50367 this.type = type;
50368 this.endian = endian;
50369 this.fn = this.type;
50370 if (this.type[this.type.length - 1] !== '8') {
50371 this.fn += this.endian;
50372 }
50373 }
50374
50375 size() {
50376 return DecodeStream.TYPES[this.type];
50377 }
50378
50379 decode(stream) {
50380 return stream[`read${this.fn}`]();
50381 }
50382
50383 encode(stream, val) {
50384 return stream[`write${this.fn}`](val);
50385 }
50386}
50387
50388exports.Number = NumberT;
50389exports.uint8 = new NumberT('UInt8');
50390exports.uint16be = (exports.uint16 = new NumberT('UInt16', 'BE'));
50391exports.uint16le = new NumberT('UInt16', 'LE');
50392exports.uint24be = (exports.uint24 = new NumberT('UInt24', 'BE'));
50393exports.uint24le = new NumberT('UInt24', 'LE');
50394exports.uint32be = (exports.uint32 = new NumberT('UInt32', 'BE'));
50395exports.uint32le = new NumberT('UInt32', 'LE');
50396exports.int8 = new NumberT('Int8');
50397exports.int16be = (exports.int16 = new NumberT('Int16', 'BE'));
50398exports.int16le = new NumberT('Int16', 'LE');
50399exports.int24be = (exports.int24 = new NumberT('Int24', 'BE'));
50400exports.int24le = new NumberT('Int24', 'LE');
50401exports.int32be = (exports.int32 = new NumberT('Int32', 'BE'));
50402exports.int32le = new NumberT('Int32', 'LE');
50403exports.floatbe = (exports.float = new NumberT('Float', 'BE'));
50404exports.floatle = new NumberT('Float', 'LE');
50405exports.doublebe = (exports.double = new NumberT('Double', 'BE'));
50406exports.doublele = new NumberT('Double', 'LE');
50407
50408class Fixed extends NumberT {
50409 constructor(size, endian, fracBits = size >> 1) {
50410 super(`Int${size}`, endian);
50411 this._point = 1 << fracBits;
50412 }
50413
50414 decode(stream) {
50415 return super.decode(stream) / this._point;
50416 }
50417
50418 encode(stream, val) {
50419 return super.encode(stream, (val * this._point) | 0);
50420 }
50421}
50422
50423exports.Fixed = Fixed;
50424exports.fixed16be = (exports.fixed16 = new Fixed(16, 'BE'));
50425exports.fixed16le = new Fixed(16, 'LE');
50426exports.fixed32be = (exports.fixed32 =new Fixed(32, 'BE'));
50427exports.fixed32le = new Fixed(32, 'LE');
50428
50429},{"./DecodeStream":249}],254:[function(require,module,exports){
50430class Optional {
50431 constructor(type, condition = true) {
50432 this.type = type;
50433 this.condition = condition;
50434 }
50435
50436 decode(stream, parent) {
50437 let { condition } = this;
50438 if (typeof condition === 'function') {
50439 condition = condition.call(parent, parent);
50440 }
50441
50442 if (condition) {
50443 return this.type.decode(stream, parent);
50444 }
50445 }
50446
50447 size(val, parent) {
50448 let { condition } = this;
50449 if (typeof condition === 'function') {
50450 condition = condition.call(parent, parent);
50451 }
50452
50453 if (condition) {
50454 return this.type.size(val, parent);
50455 } else {
50456 return 0;
50457 }
50458 }
50459
50460 encode(stream, val, parent) {
50461 let { condition } = this;
50462 if (typeof condition === 'function') {
50463 condition = condition.call(parent, parent);
50464 }
50465
50466 if (condition) {
50467 return this.type.encode(stream, val, parent);
50468 }
50469 }
50470}
50471
50472module.exports = Optional;
50473
50474},{}],255:[function(require,module,exports){
50475const utils = require('./utils');
50476
50477class Pointer {
50478 constructor(offsetType, type, options = {}) {
50479 this.offsetType = offsetType;
50480 this.type = type;
50481 this.options = options;
50482 if (this.type === 'void') { this.type = null; }
50483 if (this.options.type == null) { this.options.type = 'local'; }
50484 if (this.options.allowNull == null) { this.options.allowNull = true; }
50485 if (this.options.nullValue == null) { this.options.nullValue = 0; }
50486 if (this.options.lazy == null) { this.options.lazy = false; }
50487 if (this.options.relativeTo) {
50488 if (typeof this.options.relativeTo !== 'function') {
50489 throw new Error('relativeTo option must be a function');
50490 }
50491 this.relativeToGetter = options.relativeTo;
50492 }
50493 }
50494
50495 decode(stream, ctx) {
50496 const offset = this.offsetType.decode(stream, ctx);
50497
50498 // handle NULL pointers
50499 if ((offset === this.options.nullValue) && this.options.allowNull) {
50500 return null;
50501 }
50502
50503 let relative;
50504 switch (this.options.type) {
50505 case 'local': relative = ctx._startOffset; break;
50506 case 'immediate': relative = stream.pos - this.offsetType.size(); break;
50507 case 'parent': relative = ctx.parent._startOffset; break;
50508 default:
50509 var c = ctx;
50510 while (c.parent) {
50511 c = c.parent;
50512 }
50513
50514 relative = c._startOffset || 0;
50515 }
50516
50517 if (this.options.relativeTo) {
50518 relative += this.relativeToGetter(ctx);
50519 }
50520
50521 const ptr = offset + relative;
50522
50523 if (this.type != null) {
50524 let val = null;
50525 const decodeValue = () => {
50526 if (val != null) { return val; }
50527
50528 const { pos } = stream;
50529 stream.pos = ptr;
50530 val = this.type.decode(stream, ctx);
50531 stream.pos = pos;
50532 return val;
50533 };
50534
50535 // If this is a lazy pointer, define a getter to decode only when needed.
50536 // This obviously only works when the pointer is contained by a Struct.
50537 if (this.options.lazy) {
50538 return new utils.PropertyDescriptor({
50539 get: decodeValue});
50540 }
50541
50542 return decodeValue();
50543 } else {
50544 return ptr;
50545 }
50546 }
50547
50548 size(val, ctx) {
50549 const parent = ctx;
50550 switch (this.options.type) {
50551 case 'local': case 'immediate':
50552 break;
50553 case 'parent':
50554 ctx = ctx.parent;
50555 break;
50556 default: // global
50557 while (ctx.parent) {
50558 ctx = ctx.parent;
50559 }
50560 }
50561
50562 let { type } = this;
50563 if (type == null) {
50564 if (!(val instanceof VoidPointer)) {
50565 throw new Error("Must be a VoidPointer");
50566 }
50567
50568 ({ type } = val);
50569 val = val.value;
50570 }
50571
50572 if (val && ctx) {
50573 ctx.pointerSize += type.size(val, parent);
50574 }
50575
50576 return this.offsetType.size();
50577 }
50578
50579 encode(stream, val, ctx) {
50580 let relative;
50581 const parent = ctx;
50582 if ((val == null)) {
50583 this.offsetType.encode(stream, this.options.nullValue);
50584 return;
50585 }
50586
50587 switch (this.options.type) {
50588 case 'local':
50589 relative = ctx.startOffset;
50590 break;
50591 case 'immediate':
50592 relative = stream.pos + this.offsetType.size(val, parent);
50593 break;
50594 case 'parent':
50595 ctx = ctx.parent;
50596 relative = ctx.startOffset;
50597 break;
50598 default: // global
50599 relative = 0;
50600 while (ctx.parent) {
50601 ctx = ctx.parent;
50602 }
50603 }
50604
50605 if (this.options.relativeTo) {
50606 relative += this.relativeToGetter(parent.val);
50607 }
50608
50609 this.offsetType.encode(stream, ctx.pointerOffset - relative);
50610
50611 let { type } = this;
50612 if (type == null) {
50613 if (!(val instanceof VoidPointer)) {
50614 throw new Error("Must be a VoidPointer");
50615 }
50616
50617 ({ type } = val);
50618 val = val.value;
50619 }
50620
50621 ctx.pointers.push({
50622 type,
50623 val,
50624 parent
50625 });
50626
50627 return ctx.pointerOffset += type.size(val, parent);
50628 }
50629}
50630
50631// A pointer whose type is determined at decode time
50632class VoidPointer {
50633 constructor(type, value) {
50634 this.type = type;
50635 this.value = value;
50636 }
50637}
50638
50639exports.Pointer = Pointer;
50640exports.VoidPointer = VoidPointer;
50641
50642},{"./utils":260}],256:[function(require,module,exports){
50643const utils = require('./utils');
50644
50645class Reserved {
50646 constructor(type, count = 1) {
50647 this.type = type;
50648 this.count = count;
50649 }
50650 decode(stream, parent) {
50651 stream.pos += this.size(null, parent);
50652 return undefined;
50653 }
50654
50655 size(data, parent) {
50656 const count = utils.resolveLength(this.count, null, parent);
50657 return this.type.size() * count;
50658 }
50659
50660 encode(stream, val, parent) {
50661 return stream.fill(0, this.size(val, parent));
50662 }
50663}
50664
50665module.exports = Reserved;
50666
50667},{"./utils":260}],257:[function(require,module,exports){
50668(function (Buffer){(function (){
50669const {Number:NumberT} = require('./Number');
50670const utils = require('./utils');
50671
50672class StringT {
50673 constructor(length, encoding = 'ascii') {
50674 this.length = length;
50675 this.encoding = encoding;
50676 }
50677
50678 decode(stream, parent) {
50679 let length, pos;
50680
50681 if (this.length != null) {
50682 length = utils.resolveLength(this.length, stream, parent);
50683 } else {
50684 let buffer;
50685 ({buffer, length, pos} = stream);
50686
50687 while ((pos < length) && (buffer[pos] !== 0x00)) {
50688 ++pos;
50689 }
50690
50691 length = pos - stream.pos;
50692 }
50693
50694 let { encoding } = this;
50695 if (typeof encoding === 'function') {
50696 encoding = encoding.call(parent, parent) || 'ascii';
50697 }
50698
50699 const string = stream.readString(length, encoding);
50700
50701 if ((this.length == null) && (stream.pos < stream.length)) {
50702 stream.pos++;
50703 }
50704
50705 return string;
50706 }
50707
50708 size(val, parent) {
50709 // Use the defined value if no value was given
50710 if (!val) {
50711 return utils.resolveLength(this.length, null, parent);
50712 }
50713
50714 let { encoding } = this;
50715 if (typeof encoding === 'function') {
50716 encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || 'ascii';
50717 }
50718
50719 if (encoding === 'utf16be') {
50720 encoding = 'utf16le';
50721 }
50722
50723 let size = Buffer.byteLength(val, encoding);
50724 if (this.length instanceof NumberT) {
50725 size += this.length.size();
50726 }
50727
50728 if ((this.length == null)) {
50729 size++;
50730 }
50731
50732 return size;
50733 }
50734
50735 encode(stream, val, parent) {
50736 let { encoding } = this;
50737 if (typeof encoding === 'function') {
50738 encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || 'ascii';
50739 }
50740
50741 if (this.length instanceof NumberT) {
50742 this.length.encode(stream, Buffer.byteLength(val, encoding));
50743 }
50744
50745 stream.writeString(val, encoding);
50746
50747 if ((this.length == null)) {
50748 return stream.writeUInt8(0x00);
50749 }
50750 }
50751}
50752
50753module.exports = StringT;
50754
50755}).call(this)}).call(this,require("buffer").Buffer)
50756},{"./Number":253,"./utils":260,"buffer":114}],258:[function(require,module,exports){
50757const utils = require('./utils');
50758
50759class Struct {
50760 constructor(fields = {}) {
50761 this.fields = fields;
50762 }
50763
50764 decode(stream, parent, length = 0) {
50765 const res = this._setup(stream, parent, length);
50766 this._parseFields(stream, res, this.fields);
50767
50768 if (this.process != null) {
50769 this.process.call(res, stream);
50770 }
50771 return res;
50772 }
50773
50774 _setup(stream, parent, length) {
50775 const res = {};
50776
50777 // define hidden properties
50778 Object.defineProperties(res, {
50779 parent: { value: parent },
50780 _startOffset: { value: stream.pos },
50781 _currentOffset: { value: 0, writable: true },
50782 _length: { value: length }
50783 });
50784
50785 return res;
50786 }
50787
50788 _parseFields(stream, res, fields) {
50789 for (let key in fields) {
50790 var val;
50791 const type = fields[key];
50792 if (typeof type === 'function') {
50793 val = type.call(res, res);
50794 } else {
50795 val = type.decode(stream, res);
50796 }
50797
50798 if (val !== undefined) {
50799 if (val instanceof utils.PropertyDescriptor) {
50800 Object.defineProperty(res, key, val);
50801 } else {
50802 res[key] = val;
50803 }
50804 }
50805
50806 res._currentOffset = stream.pos - res._startOffset;
50807 }
50808
50809 }
50810
50811 size(val, parent, includePointers) {
50812 if (val == null) { val = {}; }
50813 if (includePointers == null) { includePointers = true; }
50814 const ctx = {
50815 parent,
50816 val,
50817 pointerSize: 0
50818 };
50819
50820 let size = 0;
50821 for (let key in this.fields) {
50822 const type = this.fields[key];
50823 if (type.size != null) {
50824 size += type.size(val[key], ctx);
50825 }
50826 }
50827
50828 if (includePointers) {
50829 size += ctx.pointerSize;
50830 }
50831
50832 return size;
50833 }
50834
50835 encode(stream, val, parent) {
50836 let type;
50837 if (this.preEncode != null) {
50838 this.preEncode.call(val, stream);
50839 }
50840
50841 const ctx = {
50842 pointers: [],
50843 startOffset: stream.pos,
50844 parent,
50845 val,
50846 pointerSize: 0
50847 };
50848
50849 ctx.pointerOffset = stream.pos + this.size(val, ctx, false);
50850
50851 for (let key in this.fields) {
50852 type = this.fields[key];
50853 if (type.encode != null) {
50854 type.encode(stream, val[key], ctx);
50855 }
50856 }
50857
50858 let i = 0;
50859 while (i < ctx.pointers.length) {
50860 const ptr = ctx.pointers[i++];
50861 ptr.type.encode(stream, ptr.val, ptr.parent);
50862 }
50863
50864 }
50865}
50866
50867module.exports = Struct;
50868
50869},{"./utils":260}],259:[function(require,module,exports){
50870const Struct = require('./Struct');
50871
50872const getPath = (object, pathArray) => {
50873 return pathArray.reduce((prevObj, key) => prevObj && prevObj[key], object);
50874};
50875
50876class VersionedStruct extends Struct {
50877 constructor(type, versions = {}) {
50878 super();
50879 this.type = type;
50880 this.versions = versions;
50881 if (typeof type === 'string') {
50882 this.versionPath = type.split('.');
50883 }
50884 }
50885
50886 decode(stream, parent, length = 0) {
50887 const res = this._setup(stream, parent, length);
50888
50889 if (typeof this.type === 'string') {
50890 res.version = getPath(parent, this.versionPath);
50891 } else {
50892 res.version = this.type.decode(stream);
50893 }
50894
50895 if (this.versions.header) {
50896 this._parseFields(stream, res, this.versions.header);
50897 }
50898
50899 const fields = this.versions[res.version];
50900 if ((fields == null)) {
50901 throw new Error(`Unknown version ${res.version}`);
50902 }
50903
50904 if (fields instanceof VersionedStruct) {
50905 return fields.decode(stream, parent);
50906 }
50907
50908 this._parseFields(stream, res, fields);
50909
50910 if (this.process != null) {
50911 this.process.call(res, stream);
50912 }
50913 return res;
50914 }
50915
50916 size(val, parent, includePointers = true) {
50917 let key, type;
50918 if (!val) {
50919 throw new Error('Not a fixed size');
50920 }
50921
50922 const ctx = {
50923 parent,
50924 val,
50925 pointerSize: 0
50926 };
50927
50928 let size = 0;
50929 if (typeof this.type !== 'string') {
50930 size += this.type.size(val.version, ctx);
50931 }
50932
50933 if (this.versions.header) {
50934 for (key in this.versions.header) {
50935 type = this.versions.header[key];
50936 if (type.size != null) {
50937 size += type.size(val[key], ctx);
50938 }
50939 }
50940 }
50941
50942 const fields = this.versions[val.version];
50943 if ((fields == null)) {
50944 throw new Error(`Unknown version ${val.version}`);
50945 }
50946
50947 for (key in fields) {
50948 type = fields[key];
50949 if (type.size != null) {
50950 size += type.size(val[key], ctx);
50951 }
50952 }
50953
50954 if (includePointers) {
50955 size += ctx.pointerSize;
50956 }
50957
50958 return size;
50959 }
50960
50961 encode(stream, val, parent) {
50962 let key, type;
50963 if (this.preEncode != null) {
50964 this.preEncode.call(val, stream);
50965 }
50966
50967 const ctx = {
50968 pointers: [],
50969 startOffset: stream.pos,
50970 parent,
50971 val,
50972 pointerSize: 0
50973 };
50974
50975 ctx.pointerOffset = stream.pos + this.size(val, ctx, false);
50976
50977 if (typeof this.type !== 'string') {
50978 this.type.encode(stream, val.version);
50979 }
50980
50981 if (this.versions.header) {
50982 for (key in this.versions.header) {
50983 type = this.versions.header[key];
50984 if (type.encode != null) {
50985 type.encode(stream, val[key], ctx);
50986 }
50987 }
50988 }
50989
50990 const fields = this.versions[val.version];
50991 for (key in fields) {
50992 type = fields[key];
50993 if (type.encode != null) {
50994 type.encode(stream, val[key], ctx);
50995 }
50996 }
50997
50998 let i = 0;
50999 while (i < ctx.pointers.length) {
51000 const ptr = ctx.pointers[i++];
51001 ptr.type.encode(stream, ptr.val, ptr.parent);
51002 }
51003
51004 }
51005}
51006
51007module.exports = VersionedStruct;
51008
51009},{"./Struct":258}],260:[function(require,module,exports){
51010const {Number:NumberT} = require('./Number');
51011
51012exports.resolveLength = function(length, stream, parent) {
51013 let res;
51014 if (typeof length === 'number') {
51015 res = length;
51016
51017 } else if (typeof length === 'function') {
51018 res = length.call(parent, parent);
51019
51020 } else if (parent && (typeof length === 'string')) {
51021 res = parent[length];
51022
51023 } else if (stream && length instanceof NumberT) {
51024 res = length.decode(stream);
51025 }
51026
51027 if (isNaN(res)) {
51028 throw new Error('Not a fixed size');
51029 }
51030
51031 return res;
51032};
51033
51034class PropertyDescriptor {
51035 constructor(opts = {}) {
51036 this.enumerable = true;
51037 this.configurable = true;
51038
51039 for (let key in opts) {
51040 const val = opts[key];
51041 this[key] = val;
51042 }
51043 }
51044}
51045
51046exports.PropertyDescriptor = PropertyDescriptor;
51047
51048},{"./Number":253}],261:[function(require,module,exports){
51049'use strict';
51050
51051var GetIntrinsic = require('get-intrinsic');
51052var define = require('define-data-property');
51053var hasDescriptors = require('has-property-descriptors')();
51054var gOPD = require('gopd');
51055
51056var $TypeError = require('es-errors/type');
51057var $floor = GetIntrinsic('%Math.floor%');
51058
51059/** @type {import('.')} */
51060module.exports = function setFunctionLength(fn, length) {
51061 if (typeof fn !== 'function') {
51062 throw new $TypeError('`fn` is not a function');
51063 }
51064 if (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {
51065 throw new $TypeError('`length` must be a positive 32-bit integer');
51066 }
51067
51068 var loose = arguments.length > 2 && !!arguments[2];
51069
51070 var functionLengthIsConfigurable = true;
51071 var functionLengthIsWritable = true;
51072 if ('length' in fn && gOPD) {
51073 var desc = gOPD(fn, 'length');
51074 if (desc && !desc.configurable) {
51075 functionLengthIsConfigurable = false;
51076 }
51077 if (desc && !desc.writable) {
51078 functionLengthIsWritable = false;
51079 }
51080 }
51081
51082 if (functionLengthIsConfigurable || functionLengthIsWritable || !loose) {
51083 if (hasDescriptors) {
51084 define(/** @type {Parameters<define>[0]} */ (fn), 'length', length, true, true);
51085 } else {
51086 define(/** @type {Parameters<define>[0]} */ (fn), 'length', length);
51087 }
51088 }
51089 return fn;
51090};
51091
51092},{"define-data-property":157,"es-errors/type":166,"get-intrinsic":177,"gopd":178,"has-property-descriptors":180}],262:[function(require,module,exports){
51093'use strict';
51094
51095var define = require('define-data-property');
51096var hasDescriptors = require('has-property-descriptors')();
51097var functionsHaveConfigurableNames = require('functions-have-names').functionsHaveConfigurableNames();
51098
51099var $TypeError = require('es-errors/type');
51100
51101/** @type {import('.')} */
51102module.exports = function setFunctionName(fn, name) {
51103 if (typeof fn !== 'function') {
51104 throw new $TypeError('`fn` is not a function');
51105 }
51106 var loose = arguments.length > 2 && !!arguments[2];
51107 if (!loose || functionsHaveConfigurableNames) {
51108 if (hasDescriptors) {
51109 define(/** @type {Parameters<define>[0]} */ (fn), 'name', name, true, true);
51110 } else {
51111 define(/** @type {Parameters<define>[0]} */ (fn), 'name', name);
51112 }
51113 }
51114 return fn;
51115};
51116
51117},{"define-data-property":157,"es-errors/type":166,"functions-have-names":176,"has-property-descriptors":180}],263:[function(require,module,exports){
51118'use strict';
51119
51120var GetIntrinsic = require('get-intrinsic');
51121var callBound = require('call-bind/callBound');
51122var inspect = require('object-inspect');
51123
51124var $TypeError = require('es-errors/type');
51125var $WeakMap = GetIntrinsic('%WeakMap%', true);
51126var $Map = GetIntrinsic('%Map%', true);
51127
51128var $weakMapGet = callBound('WeakMap.prototype.get', true);
51129var $weakMapSet = callBound('WeakMap.prototype.set', true);
51130var $weakMapHas = callBound('WeakMap.prototype.has', true);
51131var $mapGet = callBound('Map.prototype.get', true);
51132var $mapSet = callBound('Map.prototype.set', true);
51133var $mapHas = callBound('Map.prototype.has', true);
51134
51135/*
51136* This function traverses the list returning the node corresponding to the given key.
51137*
51138* That node is also moved to the head of the list, so that if it's accessed again we don't need to traverse the whole list. By doing so, all the recently used nodes can be accessed relatively quickly.
51139*/
51140/** @type {import('.').listGetNode} */
51141var listGetNode = function (list, key) { // eslint-disable-line consistent-return
51142 /** @type {typeof list | NonNullable<(typeof list)['next']>} */
51143 var prev = list;
51144 /** @type {(typeof list)['next']} */
51145 var curr;
51146 for (; (curr = prev.next) !== null; prev = curr) {
51147 if (curr.key === key) {
51148 prev.next = curr.next;
51149 // eslint-disable-next-line no-extra-parens
51150 curr.next = /** @type {NonNullable<typeof list.next>} */ (list.next);
51151 list.next = curr; // eslint-disable-line no-param-reassign
51152 return curr;
51153 }
51154 }
51155};
51156
51157/** @type {import('.').listGet} */
51158var listGet = function (objects, key) {
51159 var node = listGetNode(objects, key);
51160 return node && node.value;
51161};
51162/** @type {import('.').listSet} */
51163var listSet = function (objects, key, value) {
51164 var node = listGetNode(objects, key);
51165 if (node) {
51166 node.value = value;
51167 } else {
51168 // Prepend the new node to the beginning of the list
51169 objects.next = /** @type {import('.').ListNode<typeof value>} */ ({ // eslint-disable-line no-param-reassign, no-extra-parens
51170 key: key,
51171 next: objects.next,
51172 value: value
51173 });
51174 }
51175};
51176/** @type {import('.').listHas} */
51177var listHas = function (objects, key) {
51178 return !!listGetNode(objects, key);
51179};
51180
51181/** @type {import('.')} */
51182module.exports = function getSideChannel() {
51183 /** @type {WeakMap<object, unknown>} */ var $wm;
51184 /** @type {Map<object, unknown>} */ var $m;
51185 /** @type {import('.').RootNode<unknown>} */ var $o;
51186
51187 /** @type {import('.').Channel} */
51188 var channel = {
51189 assert: function (key) {
51190 if (!channel.has(key)) {
51191 throw new $TypeError('Side channel does not contain ' + inspect(key));
51192 }
51193 },
51194 get: function (key) { // eslint-disable-line consistent-return
51195 if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {
51196 if ($wm) {
51197 return $weakMapGet($wm, key);
51198 }
51199 } else if ($Map) {
51200 if ($m) {
51201 return $mapGet($m, key);
51202 }
51203 } else {
51204 if ($o) { // eslint-disable-line no-lonely-if
51205 return listGet($o, key);
51206 }
51207 }
51208 },
51209 has: function (key) {
51210 if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {
51211 if ($wm) {
51212 return $weakMapHas($wm, key);
51213 }
51214 } else if ($Map) {
51215 if ($m) {
51216 return $mapHas($m, key);
51217 }
51218 } else {
51219 if ($o) { // eslint-disable-line no-lonely-if
51220 return listHas($o, key);
51221 }
51222 }
51223 return false;
51224 },
51225 set: function (key, value) {
51226 if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {
51227 if (!$wm) {
51228 $wm = new $WeakMap();
51229 }
51230 $weakMapSet($wm, key, value);
51231 } else if ($Map) {
51232 if (!$m) {
51233 $m = new $Map();
51234 }
51235 $mapSet($m, key, value);
51236 } else {
51237 if (!$o) {
51238 // Initialize the linked list as an empty node, so that we don't have to special-case handling of the first node: we can always refer to it as (previous node).next, instead of something like (list).head
51239 $o = { key: {}, next: null };
51240 }
51241 listSet($o, key, value);
51242 }
51243 }
51244 };
51245 return channel;
51246};
51247
51248},{"call-bind/callBound":115,"es-errors/type":166,"get-intrinsic":177,"object-inspect":209}],264:[function(require,module,exports){
51249'use strict';
51250
51251var SLOT = require('internal-slot');
51252
51253var $SyntaxError = SyntaxError;
51254var $StopIteration = typeof StopIteration === 'object' ? StopIteration : null;
51255
51256module.exports = function getStopIterationIterator(origIterator) {
51257 if (!$StopIteration) {
51258 throw new $SyntaxError('this environment lacks StopIteration');
51259 }
51260
51261 SLOT.set(origIterator, '[[Done]]', false);
51262
51263 var siIterator = {
51264 next: function next() {
51265 var iterator = SLOT.get(this, '[[Iterator]]');
51266 var done = SLOT.get(iterator, '[[Done]]');
51267 try {
51268 return {
51269 done: done,
51270 value: done ? void undefined : iterator.next()
51271 };
51272 } catch (e) {
51273 SLOT.set(iterator, '[[Done]]', true);
51274 if (e !== $StopIteration) {
51275 throw e;
51276 }
51277 return {
51278 done: true,
51279 value: void undefined
51280 };
51281 }
51282 }
51283 };
51284
51285 SLOT.set(siIterator, '[[Iterator]]', origIterator);
51286
51287 return siIterator;
51288};
51289
51290},{"internal-slot":188}],265:[function(require,module,exports){
51291// Copyright Joyent, Inc. and other Node contributors.
51292//
51293// Permission is hereby granted, free of charge, to any person obtaining a
51294// copy of this software and associated documentation files (the
51295// "Software"), to deal in the Software without restriction, including
51296// without limitation the rights to use, copy, modify, merge, publish,
51297// distribute, sublicense, and/or sell copies of the Software, and to permit
51298// persons to whom the Software is furnished to do so, subject to the
51299// following conditions:
51300//
51301// The above copyright notice and this permission notice shall be included
51302// in all copies or substantial portions of the Software.
51303//
51304// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
51305// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
51306// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
51307// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
51308// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
51309// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
51310// USE OR OTHER DEALINGS IN THE SOFTWARE.
51311
51312module.exports = Stream;
51313
51314var EE = require('events').EventEmitter;
51315var inherits = require('inherits');
51316
51317inherits(Stream, EE);
51318Stream.Readable = require('readable-stream/readable.js');
51319Stream.Writable = require('readable-stream/writable.js');
51320Stream.Duplex = require('readable-stream/duplex.js');
51321Stream.Transform = require('readable-stream/transform.js');
51322Stream.PassThrough = require('readable-stream/passthrough.js');
51323
51324// Backwards-compat with node 0.4.x
51325Stream.Stream = Stream;
51326
51327
51328
51329// old-style streams. Note that the pipe method (the only relevant
51330// part of this class) is overridden in the Readable class.
51331
51332function Stream() {
51333 EE.call(this);
51334}
51335
51336Stream.prototype.pipe = function(dest, options) {
51337 var source = this;
51338
51339 function ondata(chunk) {
51340 if (dest.writable) {
51341 if (false === dest.write(chunk) && source.pause) {
51342 source.pause();
51343 }
51344 }
51345 }
51346
51347 source.on('data', ondata);
51348
51349 function ondrain() {
51350 if (source.readable && source.resume) {
51351 source.resume();
51352 }
51353 }
51354
51355 dest.on('drain', ondrain);
51356
51357 // If the 'end' option is not supplied, dest.end() will be called when
51358 // source gets the 'end' or 'close' events. Only dest.end() once.
51359 if (!dest._isStdio && (!options || options.end !== false)) {
51360 source.on('end', onend);
51361 source.on('close', onclose);
51362 }
51363
51364 var didOnEnd = false;
51365 function onend() {
51366 if (didOnEnd) return;
51367 didOnEnd = true;
51368
51369 dest.end();
51370 }
51371
51372
51373 function onclose() {
51374 if (didOnEnd) return;
51375 didOnEnd = true;
51376
51377 if (typeof dest.destroy === 'function') dest.destroy();
51378 }
51379
51380 // don't leave dangling pipes when there are errors.
51381 function onerror(er) {
51382 cleanup();
51383 if (EE.listenerCount(this, 'error') === 0) {
51384 throw er; // Unhandled stream error in pipe.
51385 }
51386 }
51387
51388 source.on('error', onerror);
51389 dest.on('error', onerror);
51390
51391 // remove all the event listeners that were added.
51392 function cleanup() {
51393 source.removeListener('data', ondata);
51394 dest.removeListener('drain', ondrain);
51395
51396 source.removeListener('end', onend);
51397 source.removeListener('close', onclose);
51398
51399 source.removeListener('error', onerror);
51400 dest.removeListener('error', onerror);
51401
51402 source.removeListener('end', cleanup);
51403 source.removeListener('close', cleanup);
51404
51405 dest.removeListener('close', cleanup);
51406 }
51407
51408 source.on('end', cleanup);
51409 source.on('close', cleanup);
51410
51411 dest.on('close', cleanup);
51412
51413 dest.emit('pipe', source);
51414
51415 // Allow for unix-like usage: A.pipe(B).pipe(C)
51416 return dest;
51417};
51418
51419},{"events":170,"inherits":187,"readable-stream/duplex.js":225,"readable-stream/passthrough.js":236,"readable-stream/readable.js":237,"readable-stream/transform.js":238,"readable-stream/writable.js":239}],266:[function(require,module,exports){
51420(function (setImmediate,clearImmediate){(function (){
51421var nextTick = require('process/browser.js').nextTick;
51422var apply = Function.prototype.apply;
51423var slice = Array.prototype.slice;
51424var immediateIds = {};
51425var nextImmediateId = 0;
51426
51427// DOM APIs, for completeness
51428
51429exports.setTimeout = function() {
51430 return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);
51431};
51432exports.setInterval = function() {
51433 return new Timeout(apply.call(setInterval, window, arguments), clearInterval);
51434};
51435exports.clearTimeout =
51436exports.clearInterval = function(timeout) { timeout.close(); };
51437
51438function Timeout(id, clearFn) {
51439 this._id = id;
51440 this._clearFn = clearFn;
51441}
51442Timeout.prototype.unref = Timeout.prototype.ref = function() {};
51443Timeout.prototype.close = function() {
51444 this._clearFn.call(window, this._id);
51445};
51446
51447// Does not start the time, just sets up the members needed.
51448exports.enroll = function(item, msecs) {
51449 clearTimeout(item._idleTimeoutId);
51450 item._idleTimeout = msecs;
51451};
51452
51453exports.unenroll = function(item) {
51454 clearTimeout(item._idleTimeoutId);
51455 item._idleTimeout = -1;
51456};
51457
51458exports._unrefActive = exports.active = function(item) {
51459 clearTimeout(item._idleTimeoutId);
51460
51461 var msecs = item._idleTimeout;
51462 if (msecs >= 0) {
51463 item._idleTimeoutId = setTimeout(function onTimeout() {
51464 if (item._onTimeout)
51465 item._onTimeout();
51466 }, msecs);
51467 }
51468};
51469
51470// That's not how node.js implements it but the exposed api is the same.
51471exports.setImmediate = typeof setImmediate === "function" ? setImmediate : function(fn) {
51472 var id = nextImmediateId++;
51473 var args = arguments.length < 2 ? false : slice.call(arguments, 1);
51474
51475 immediateIds[id] = true;
51476
51477 nextTick(function onNextTick() {
51478 if (immediateIds[id]) {
51479 // fn.call() is faster so we optimize for the common use-case
51480 // @see http://jsperf.com/call-apply-segu
51481 if (args) {
51482 fn.apply(null, args);
51483 } else {
51484 fn.call(null);
51485 }
51486 // Prevent ids from leaking
51487 exports.clearImmediate(id);
51488 }
51489 });
51490
51491 return id;
51492};
51493
51494exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate : function(id) {
51495 delete immediateIds[id];
51496};
51497}).call(this)}).call(this,require("timers").setImmediate,require("timers").clearImmediate)
51498},{"process/browser.js":224,"timers":266}],267:[function(require,module,exports){
51499var TINF_OK = 0;
51500var TINF_DATA_ERROR = -3;
51501
51502function Tree() {
51503 this.table = new Uint16Array(16); /* table of code length counts */
51504 this.trans = new Uint16Array(288); /* code -> symbol translation table */
51505}
51506
51507function Data(source, dest) {
51508 this.source = source;
51509 this.sourceIndex = 0;
51510 this.tag = 0;
51511 this.bitcount = 0;
51512
51513 this.dest = dest;
51514 this.destLen = 0;
51515
51516 this.ltree = new Tree(); /* dynamic length/symbol tree */
51517 this.dtree = new Tree(); /* dynamic distance tree */
51518}
51519
51520/* --------------------------------------------------- *
51521 * -- uninitialized global data (static structures) -- *
51522 * --------------------------------------------------- */
51523
51524var sltree = new Tree();
51525var sdtree = new Tree();
51526
51527/* extra bits and base tables for length codes */
51528var length_bits = new Uint8Array(30);
51529var length_base = new Uint16Array(30);
51530
51531/* extra bits and base tables for distance codes */
51532var dist_bits = new Uint8Array(30);
51533var dist_base = new Uint16Array(30);
51534
51535/* special ordering of code length codes */
51536var clcidx = new Uint8Array([
51537 16, 17, 18, 0, 8, 7, 9, 6,
51538 10, 5, 11, 4, 12, 3, 13, 2,
51539 14, 1, 15
51540]);
51541
51542/* used by tinf_decode_trees, avoids allocations every call */
51543var code_tree = new Tree();
51544var lengths = new Uint8Array(288 + 32);
51545
51546/* ----------------------- *
51547 * -- utility functions -- *
51548 * ----------------------- */
51549
51550/* build extra bits and base tables */
51551function tinf_build_bits_base(bits, base, delta, first) {
51552 var i, sum;
51553
51554 /* build bits table */
51555 for (i = 0; i < delta; ++i) bits[i] = 0;
51556 for (i = 0; i < 30 - delta; ++i) bits[i + delta] = i / delta | 0;
51557
51558 /* build base table */
51559 for (sum = first, i = 0; i < 30; ++i) {
51560 base[i] = sum;
51561 sum += 1 << bits[i];
51562 }
51563}
51564
51565/* build the fixed huffman trees */
51566function tinf_build_fixed_trees(lt, dt) {
51567 var i;
51568
51569 /* build fixed length tree */
51570 for (i = 0; i < 7; ++i) lt.table[i] = 0;
51571
51572 lt.table[7] = 24;
51573 lt.table[8] = 152;
51574 lt.table[9] = 112;
51575
51576 for (i = 0; i < 24; ++i) lt.trans[i] = 256 + i;
51577 for (i = 0; i < 144; ++i) lt.trans[24 + i] = i;
51578 for (i = 0; i < 8; ++i) lt.trans[24 + 144 + i] = 280 + i;
51579 for (i = 0; i < 112; ++i) lt.trans[24 + 144 + 8 + i] = 144 + i;
51580
51581 /* build fixed distance tree */
51582 for (i = 0; i < 5; ++i) dt.table[i] = 0;
51583
51584 dt.table[5] = 32;
51585
51586 for (i = 0; i < 32; ++i) dt.trans[i] = i;
51587}
51588
51589/* given an array of code lengths, build a tree */
51590var offs = new Uint16Array(16);
51591
51592function tinf_build_tree(t, lengths, off, num) {
51593 var i, sum;
51594
51595 /* clear code length count table */
51596 for (i = 0; i < 16; ++i) t.table[i] = 0;
51597
51598 /* scan symbol lengths, and sum code length counts */
51599 for (i = 0; i < num; ++i) t.table[lengths[off + i]]++;
51600
51601 t.table[0] = 0;
51602
51603 /* compute offset table for distribution sort */
51604 for (sum = 0, i = 0; i < 16; ++i) {
51605 offs[i] = sum;
51606 sum += t.table[i];
51607 }
51608
51609 /* create code->symbol translation table (symbols sorted by code) */
51610 for (i = 0; i < num; ++i) {
51611 if (lengths[off + i]) t.trans[offs[lengths[off + i]]++] = i;
51612 }
51613}
51614
51615/* ---------------------- *
51616 * -- decode functions -- *
51617 * ---------------------- */
51618
51619/* get one bit from source stream */
51620function tinf_getbit(d) {
51621 /* check if tag is empty */
51622 if (!d.bitcount--) {
51623 /* load next tag */
51624 d.tag = d.source[d.sourceIndex++];
51625 d.bitcount = 7;
51626 }
51627
51628 /* shift bit out of tag */
51629 var bit = d.tag & 1;
51630 d.tag >>>= 1;
51631
51632 return bit;
51633}
51634
51635/* read a num bit value from a stream and add base */
51636function tinf_read_bits(d, num, base) {
51637 if (!num)
51638 return base;
51639
51640 while (d.bitcount < 24) {
51641 d.tag |= d.source[d.sourceIndex++] << d.bitcount;
51642 d.bitcount += 8;
51643 }
51644
51645 var val = d.tag & (0xffff >>> (16 - num));
51646 d.tag >>>= num;
51647 d.bitcount -= num;
51648 return val + base;
51649}
51650
51651/* given a data stream and a tree, decode a symbol */
51652function tinf_decode_symbol(d, t) {
51653 while (d.bitcount < 24) {
51654 d.tag |= d.source[d.sourceIndex++] << d.bitcount;
51655 d.bitcount += 8;
51656 }
51657
51658 var sum = 0, cur = 0, len = 0;
51659 var tag = d.tag;
51660
51661 /* get more bits while code value is above sum */
51662 do {
51663 cur = 2 * cur + (tag & 1);
51664 tag >>>= 1;
51665 ++len;
51666
51667 sum += t.table[len];
51668 cur -= t.table[len];
51669 } while (cur >= 0);
51670
51671 d.tag = tag;
51672 d.bitcount -= len;
51673
51674 return t.trans[sum + cur];
51675}
51676
51677/* given a data stream, decode dynamic trees from it */
51678function tinf_decode_trees(d, lt, dt) {
51679 var hlit, hdist, hclen;
51680 var i, num, length;
51681
51682 /* get 5 bits HLIT (257-286) */
51683 hlit = tinf_read_bits(d, 5, 257);
51684
51685 /* get 5 bits HDIST (1-32) */
51686 hdist = tinf_read_bits(d, 5, 1);
51687
51688 /* get 4 bits HCLEN (4-19) */
51689 hclen = tinf_read_bits(d, 4, 4);
51690
51691 for (i = 0; i < 19; ++i) lengths[i] = 0;
51692
51693 /* read code lengths for code length alphabet */
51694 for (i = 0; i < hclen; ++i) {
51695 /* get 3 bits code length (0-7) */
51696 var clen = tinf_read_bits(d, 3, 0);
51697 lengths[clcidx[i]] = clen;
51698 }
51699
51700 /* build code length tree */
51701 tinf_build_tree(code_tree, lengths, 0, 19);
51702
51703 /* decode code lengths for the dynamic trees */
51704 for (num = 0; num < hlit + hdist;) {
51705 var sym = tinf_decode_symbol(d, code_tree);
51706
51707 switch (sym) {
51708 case 16:
51709 /* copy previous code length 3-6 times (read 2 bits) */
51710 var prev = lengths[num - 1];
51711 for (length = tinf_read_bits(d, 2, 3); length; --length) {
51712 lengths[num++] = prev;
51713 }
51714 break;
51715 case 17:
51716 /* repeat code length 0 for 3-10 times (read 3 bits) */
51717 for (length = tinf_read_bits(d, 3, 3); length; --length) {
51718 lengths[num++] = 0;
51719 }
51720 break;
51721 case 18:
51722 /* repeat code length 0 for 11-138 times (read 7 bits) */
51723 for (length = tinf_read_bits(d, 7, 11); length; --length) {
51724 lengths[num++] = 0;
51725 }
51726 break;
51727 default:
51728 /* values 0-15 represent the actual code lengths */
51729 lengths[num++] = sym;
51730 break;
51731 }
51732 }
51733
51734 /* build dynamic trees */
51735 tinf_build_tree(lt, lengths, 0, hlit);
51736 tinf_build_tree(dt, lengths, hlit, hdist);
51737}
51738
51739/* ----------------------------- *
51740 * -- block inflate functions -- *
51741 * ----------------------------- */
51742
51743/* given a stream and two trees, inflate a block of data */
51744function tinf_inflate_block_data(d, lt, dt) {
51745 while (1) {
51746 var sym = tinf_decode_symbol(d, lt);
51747
51748 /* check for end of block */
51749 if (sym === 256) {
51750 return TINF_OK;
51751 }
51752
51753 if (sym < 256) {
51754 d.dest[d.destLen++] = sym;
51755 } else {
51756 var length, dist, offs;
51757 var i;
51758
51759 sym -= 257;
51760
51761 /* possibly get more bits from length code */
51762 length = tinf_read_bits(d, length_bits[sym], length_base[sym]);
51763
51764 dist = tinf_decode_symbol(d, dt);
51765
51766 /* possibly get more bits from distance code */
51767 offs = d.destLen - tinf_read_bits(d, dist_bits[dist], dist_base[dist]);
51768
51769 /* copy match */
51770 for (i = offs; i < offs + length; ++i) {
51771 d.dest[d.destLen++] = d.dest[i];
51772 }
51773 }
51774 }
51775}
51776
51777/* inflate an uncompressed block of data */
51778function tinf_inflate_uncompressed_block(d) {
51779 var length, invlength;
51780 var i;
51781
51782 /* unread from bitbuffer */
51783 while (d.bitcount > 8) {
51784 d.sourceIndex--;
51785 d.bitcount -= 8;
51786 }
51787
51788 /* get length */
51789 length = d.source[d.sourceIndex + 1];
51790 length = 256 * length + d.source[d.sourceIndex];
51791
51792 /* get one's complement of length */
51793 invlength = d.source[d.sourceIndex + 3];
51794 invlength = 256 * invlength + d.source[d.sourceIndex + 2];
51795
51796 /* check length */
51797 if (length !== (~invlength & 0x0000ffff))
51798 return TINF_DATA_ERROR;
51799
51800 d.sourceIndex += 4;
51801
51802 /* copy block */
51803 for (i = length; i; --i)
51804 d.dest[d.destLen++] = d.source[d.sourceIndex++];
51805
51806 /* make sure we start next block on a byte boundary */
51807 d.bitcount = 0;
51808
51809 return TINF_OK;
51810}
51811
51812/* inflate stream from source to dest */
51813function tinf_uncompress(source, dest) {
51814 var d = new Data(source, dest);
51815 var bfinal, btype, res;
51816
51817 do {
51818 /* read final block flag */
51819 bfinal = tinf_getbit(d);
51820
51821 /* read block type (2 bits) */
51822 btype = tinf_read_bits(d, 2, 0);
51823
51824 /* decompress block */
51825 switch (btype) {
51826 case 0:
51827 /* decompress uncompressed block */
51828 res = tinf_inflate_uncompressed_block(d);
51829 break;
51830 case 1:
51831 /* decompress block with fixed huffman trees */
51832 res = tinf_inflate_block_data(d, sltree, sdtree);
51833 break;
51834 case 2:
51835 /* decompress block with dynamic huffman trees */
51836 tinf_decode_trees(d, d.ltree, d.dtree);
51837 res = tinf_inflate_block_data(d, d.ltree, d.dtree);
51838 break;
51839 default:
51840 res = TINF_DATA_ERROR;
51841 }
51842
51843 if (res !== TINF_OK)
51844 throw new Error('Data error');
51845
51846 } while (!bfinal);
51847
51848 if (d.destLen < d.dest.length) {
51849 if (typeof d.dest.slice === 'function')
51850 return d.dest.slice(0, d.destLen);
51851 else
51852 return d.dest.subarray(0, d.destLen);
51853 }
51854
51855 return d.dest;
51856}
51857
51858/* -------------------- *
51859 * -- initialization -- *
51860 * -------------------- */
51861
51862/* build fixed huffman trees */
51863tinf_build_fixed_trees(sltree, sdtree);
51864
51865/* build extra bits and base tables */
51866tinf_build_bits_base(length_bits, length_base, 4, 3);
51867tinf_build_bits_base(dist_bits, dist_base, 2, 1);
51868
51869/* fix a special case */
51870length_bits[28] = 0;
51871length_base[28] = 258;
51872
51873module.exports = tinf_uncompress;
51874
51875},{}],268:[function(require,module,exports){
51876(function (global){(function (){
51877/******************************************************************************
51878Copyright (c) Microsoft Corporation.
51879
51880Permission to use, copy, modify, and/or distribute this software for any
51881purpose with or without fee is hereby granted.
51882
51883THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
51884REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
51885AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
51886INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
51887LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
51888OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
51889PERFORMANCE OF THIS SOFTWARE.
51890***************************************************************************** */
51891/* global global, define, Symbol, Reflect, Promise, SuppressedError */
51892var __extends;
51893var __assign;
51894var __rest;
51895var __decorate;
51896var __param;
51897var __esDecorate;
51898var __runInitializers;
51899var __propKey;
51900var __setFunctionName;
51901var __metadata;
51902var __awaiter;
51903var __generator;
51904var __exportStar;
51905var __values;
51906var __read;
51907var __spread;
51908var __spreadArrays;
51909var __spreadArray;
51910var __await;
51911var __asyncGenerator;
51912var __asyncDelegator;
51913var __asyncValues;
51914var __makeTemplateObject;
51915var __importStar;
51916var __importDefault;
51917var __classPrivateFieldGet;
51918var __classPrivateFieldSet;
51919var __classPrivateFieldIn;
51920var __createBinding;
51921var __addDisposableResource;
51922var __disposeResources;
51923(function (factory) {
51924 var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {};
51925 if (typeof define === "function" && define.amd) {
51926 define("tslib", ["exports"], function (exports) { factory(createExporter(root, createExporter(exports))); });
51927 }
51928 else if (typeof module === "object" && typeof module.exports === "object") {
51929 factory(createExporter(root, createExporter(module.exports)));
51930 }
51931 else {
51932 factory(createExporter(root));
51933 }
51934 function createExporter(exports, previous) {
51935 if (exports !== root) {
51936 if (typeof Object.create === "function") {
51937 Object.defineProperty(exports, "__esModule", { value: true });
51938 }
51939 else {
51940 exports.__esModule = true;
51941 }
51942 }
51943 return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };
51944 }
51945})
51946(function (exporter) {
51947 var extendStatics = Object.setPrototypeOf ||
51948 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
51949 function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
51950
51951 __extends = function (d, b) {
51952 if (typeof b !== "function" && b !== null)
51953 throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
51954 extendStatics(d, b);
51955 function __() { this.constructor = d; }
51956 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
51957 };
51958
51959 __assign = Object.assign || function (t) {
51960 for (var s, i = 1, n = arguments.length; i < n; i++) {
51961 s = arguments[i];
51962 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
51963 }
51964 return t;
51965 };
51966
51967 __rest = function (s, e) {
51968 var t = {};
51969 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
51970 t[p] = s[p];
51971 if (s != null && typeof Object.getOwnPropertySymbols === "function")
51972 for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
51973 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
51974 t[p[i]] = s[p[i]];
51975 }
51976 return t;
51977 };
51978
51979 __decorate = function (decorators, target, key, desc) {
51980 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
51981 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
51982 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
51983 return c > 3 && r && Object.defineProperty(target, key, r), r;
51984 };
51985
51986 __param = function (paramIndex, decorator) {
51987 return function (target, key) { decorator(target, key, paramIndex); }
51988 };
51989
51990 __esDecorate = function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
51991 function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
51992 var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
51993 var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
51994 var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
51995 var _, done = false;
51996 for (var i = decorators.length - 1; i >= 0; i--) {
51997 var context = {};
51998 for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
51999 for (var p in contextIn.access) context.access[p] = contextIn.access[p];
52000 context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
52001 var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
52002 if (kind === "accessor") {
52003 if (result === void 0) continue;
52004 if (result === null || typeof result !== "object") throw new TypeError("Object expected");
52005 if (_ = accept(result.get)) descriptor.get = _;
52006 if (_ = accept(result.set)) descriptor.set = _;
52007 if (_ = accept(result.init)) initializers.unshift(_);
52008 }
52009 else if (_ = accept(result)) {
52010 if (kind === "field") initializers.unshift(_);
52011 else descriptor[key] = _;
52012 }
52013 }
52014 if (target) Object.defineProperty(target, contextIn.name, descriptor);
52015 done = true;
52016 };
52017
52018 __runInitializers = function (thisArg, initializers, value) {
52019 var useValue = arguments.length > 2;
52020 for (var i = 0; i < initializers.length; i++) {
52021 value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
52022 }
52023 return useValue ? value : void 0;
52024 };
52025
52026 __propKey = function (x) {
52027 return typeof x === "symbol" ? x : "".concat(x);
52028 };
52029
52030 __setFunctionName = function (f, name, prefix) {
52031 if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
52032 return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
52033 };
52034
52035 __metadata = function (metadataKey, metadataValue) {
52036 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
52037 };
52038
52039 __awaiter = function (thisArg, _arguments, P, generator) {
52040 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
52041 return new (P || (P = Promise))(function (resolve, reject) {
52042 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
52043 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
52044 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
52045 step((generator = generator.apply(thisArg, _arguments || [])).next());
52046 });
52047 };
52048
52049 __generator = function (thisArg, body) {
52050 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
52051 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
52052 function verb(n) { return function (v) { return step([n, v]); }; }
52053 function step(op) {
52054 if (f) throw new TypeError("Generator is already executing.");
52055 while (g && (g = 0, op[0] && (_ = 0)), _) try {
52056 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
52057 if (y = 0, t) op = [op[0] & 2, t.value];
52058 switch (op[0]) {
52059 case 0: case 1: t = op; break;
52060 case 4: _.label++; return { value: op[1], done: false };
52061 case 5: _.label++; y = op[1]; op = [0]; continue;
52062 case 7: op = _.ops.pop(); _.trys.pop(); continue;
52063 default:
52064 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
52065 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
52066 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
52067 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
52068 if (t[2]) _.ops.pop();
52069 _.trys.pop(); continue;
52070 }
52071 op = body.call(thisArg, _);
52072 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
52073 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
52074 }
52075 };
52076
52077 __exportStar = function(m, o) {
52078 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
52079 };
52080
52081 __createBinding = Object.create ? (function(o, m, k, k2) {
52082 if (k2 === undefined) k2 = k;
52083 var desc = Object.getOwnPropertyDescriptor(m, k);
52084 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
52085 desc = { enumerable: true, get: function() { return m[k]; } };
52086 }
52087 Object.defineProperty(o, k2, desc);
52088 }) : (function(o, m, k, k2) {
52089 if (k2 === undefined) k2 = k;
52090 o[k2] = m[k];
52091 });
52092
52093 __values = function (o) {
52094 var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
52095 if (m) return m.call(o);
52096 if (o && typeof o.length === "number") return {
52097 next: function () {
52098 if (o && i >= o.length) o = void 0;
52099 return { value: o && o[i++], done: !o };
52100 }
52101 };
52102 throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
52103 };
52104
52105 __read = function (o, n) {
52106 var m = typeof Symbol === "function" && o[Symbol.iterator];
52107 if (!m) return o;
52108 var i = m.call(o), r, ar = [], e;
52109 try {
52110 while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
52111 }
52112 catch (error) { e = { error: error }; }
52113 finally {
52114 try {
52115 if (r && !r.done && (m = i["return"])) m.call(i);
52116 }
52117 finally { if (e) throw e.error; }
52118 }
52119 return ar;
52120 };
52121
52122 /** @deprecated */
52123 __spread = function () {
52124 for (var ar = [], i = 0; i < arguments.length; i++)
52125 ar = ar.concat(__read(arguments[i]));
52126 return ar;
52127 };
52128
52129 /** @deprecated */
52130 __spreadArrays = function () {
52131 for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
52132 for (var r = Array(s), k = 0, i = 0; i < il; i++)
52133 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
52134 r[k] = a[j];
52135 return r;
52136 };
52137
52138 __spreadArray = function (to, from, pack) {
52139 if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
52140 if (ar || !(i in from)) {
52141 if (!ar) ar = Array.prototype.slice.call(from, 0, i);
52142 ar[i] = from[i];
52143 }
52144 }
52145 return to.concat(ar || Array.prototype.slice.call(from));
52146 };
52147
52148 __await = function (v) {
52149 return this instanceof __await ? (this.v = v, this) : new __await(v);
52150 };
52151
52152 __asyncGenerator = function (thisArg, _arguments, generator) {
52153 if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
52154 var g = generator.apply(thisArg, _arguments || []), i, q = [];
52155 return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
52156 function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
52157 function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
52158 function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
52159 function fulfill(value) { resume("next", value); }
52160 function reject(value) { resume("throw", value); }
52161 function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
52162 };
52163
52164 __asyncDelegator = function (o) {
52165 var i, p;
52166 return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
52167 function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }
52168 };
52169
52170 __asyncValues = function (o) {
52171 if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
52172 var m = o[Symbol.asyncIterator], i;
52173 return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
52174 function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
52175 function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
52176 };
52177
52178 __makeTemplateObject = function (cooked, raw) {
52179 if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
52180 return cooked;
52181 };
52182
52183 var __setModuleDefault = Object.create ? (function(o, v) {
52184 Object.defineProperty(o, "default", { enumerable: true, value: v });
52185 }) : function(o, v) {
52186 o["default"] = v;
52187 };
52188
52189 __importStar = function (mod) {
52190 if (mod && mod.__esModule) return mod;
52191 var result = {};
52192 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
52193 __setModuleDefault(result, mod);
52194 return result;
52195 };
52196
52197 __importDefault = function (mod) {
52198 return (mod && mod.__esModule) ? mod : { "default": mod };
52199 };
52200
52201 __classPrivateFieldGet = function (receiver, state, kind, f) {
52202 if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
52203 if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
52204 return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
52205 };
52206
52207 __classPrivateFieldSet = function (receiver, state, value, kind, f) {
52208 if (kind === "m") throw new TypeError("Private method is not writable");
52209 if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
52210 if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
52211 return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
52212 };
52213
52214 __classPrivateFieldIn = function (state, receiver) {
52215 if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object");
52216 return typeof state === "function" ? receiver === state : state.has(receiver);
52217 };
52218
52219 __addDisposableResource = function (env, value, async) {
52220 if (value !== null && value !== void 0) {
52221 if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
52222 var dispose;
52223 if (async) {
52224 if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
52225 dispose = value[Symbol.asyncDispose];
52226 }
52227 if (dispose === void 0) {
52228 if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
52229 dispose = value[Symbol.dispose];
52230 }
52231 if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
52232 env.stack.push({ value: value, dispose: dispose, async: async });
52233 }
52234 else if (async) {
52235 env.stack.push({ async: true });
52236 }
52237 return value;
52238 };
52239
52240 var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
52241 var e = new Error(message);
52242 return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
52243 };
52244
52245 __disposeResources = function (env) {
52246 function fail(e) {
52247 env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
52248 env.hasError = true;
52249 }
52250 function next() {
52251 while (env.stack.length) {
52252 var rec = env.stack.pop();
52253 try {
52254 var result = rec.dispose && rec.dispose.call(rec.value);
52255 if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
52256 }
52257 catch (e) {
52258 fail(e);
52259 }
52260 }
52261 if (env.hasError) throw env.error;
52262 }
52263 return next();
52264 };
52265
52266 exporter("__extends", __extends);
52267 exporter("__assign", __assign);
52268 exporter("__rest", __rest);
52269 exporter("__decorate", __decorate);
52270 exporter("__param", __param);
52271 exporter("__esDecorate", __esDecorate);
52272 exporter("__runInitializers", __runInitializers);
52273 exporter("__propKey", __propKey);
52274 exporter("__setFunctionName", __setFunctionName);
52275 exporter("__metadata", __metadata);
52276 exporter("__awaiter", __awaiter);
52277 exporter("__generator", __generator);
52278 exporter("__exportStar", __exportStar);
52279 exporter("__createBinding", __createBinding);
52280 exporter("__values", __values);
52281 exporter("__read", __read);
52282 exporter("__spread", __spread);
52283 exporter("__spreadArrays", __spreadArrays);
52284 exporter("__spreadArray", __spreadArray);
52285 exporter("__await", __await);
52286 exporter("__asyncGenerator", __asyncGenerator);
52287 exporter("__asyncDelegator", __asyncDelegator);
52288 exporter("__asyncValues", __asyncValues);
52289 exporter("__makeTemplateObject", __makeTemplateObject);
52290 exporter("__importStar", __importStar);
52291 exporter("__importDefault", __importDefault);
52292 exporter("__classPrivateFieldGet", __classPrivateFieldGet);
52293 exporter("__classPrivateFieldSet", __classPrivateFieldSet);
52294 exporter("__classPrivateFieldIn", __classPrivateFieldIn);
52295 exporter("__addDisposableResource", __addDisposableResource);
52296 exporter("__disposeResources", __disposeResources);
52297});
52298
52299}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
52300},{}],269:[function(require,module,exports){
52301var $c5L0i$base64js = require("base64-js");
52302var $c5L0i$unicodetrie = require("unicode-trie");
52303
52304function $parcel$interopDefault(a) {
52305 return a && a.__esModule ? a.default : a;
52306}
52307function $parcel$defineInteropFlag(a) {
52308 Object.defineProperty(a, '__esModule', {value: true, configurable: true});
52309}
52310function $parcel$export(e, n, v, s) {
52311 Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
52312}
52313
52314$parcel$defineInteropFlag(module.exports);
52315
52316$parcel$export(module.exports, "getCategory", () => $43d7963e56408b24$export$410364bbb673ddbc);
52317$parcel$export(module.exports, "getCombiningClass", () => $43d7963e56408b24$export$c03b919c6651ed55);
52318$parcel$export(module.exports, "getScript", () => $43d7963e56408b24$export$941569448d136665);
52319$parcel$export(module.exports, "getEastAsianWidth", () => $43d7963e56408b24$export$92f6187db8ca6d26);
52320$parcel$export(module.exports, "getNumericValue", () => $43d7963e56408b24$export$7d1258ebb7625a0d);
52321$parcel$export(module.exports, "isAlphabetic", () => $43d7963e56408b24$export$52c8ea63abd07594);
52322$parcel$export(module.exports, "isDigit", () => $43d7963e56408b24$export$727d9dbc4fbb948f);
52323$parcel$export(module.exports, "isPunctuation", () => $43d7963e56408b24$export$a5b49f4dc6a07d2c);
52324$parcel$export(module.exports, "isLowerCase", () => $43d7963e56408b24$export$7b6804e8df61fcf5);
52325$parcel$export(module.exports, "isUpperCase", () => $43d7963e56408b24$export$aebd617640818cda);
52326$parcel$export(module.exports, "isTitleCase", () => $43d7963e56408b24$export$de8b4ee23b2cf823);
52327$parcel$export(module.exports, "isWhiteSpace", () => $43d7963e56408b24$export$3c52dd84024ae72c);
52328$parcel$export(module.exports, "isBaseForm", () => $43d7963e56408b24$export$a11bdcffe109e74b);
52329$parcel$export(module.exports, "isMark", () => $43d7963e56408b24$export$e33ad6871e762338);
52330$parcel$export(module.exports, "default", () => $43d7963e56408b24$export$2e2bcd8739ae039);
52331
52332
52333var $29668e65f2091c2c$exports = {};
52334$29668e65f2091c2c$exports = JSON.parse('{"categories":["Cc","Zs","Po","Sc","Ps","Pe","Sm","Pd","Nd","Lu","Sk","Pc","Ll","So","Lo","Pi","Cf","No","Pf","Lt","Lm","Mn","Me","Mc","Nl","Zl","Zp","Cs","Co"],"combiningClasses":["Not_Reordered","Above","Above_Right","Below","Attached_Above_Right","Attached_Below","Overlay","Iota_Subscript","Double_Below","Double_Above","Below_Right","Above_Left","CCC10","CCC11","CCC12","CCC13","CCC14","CCC15","CCC16","CCC17","CCC18","CCC19","CCC20","CCC21","CCC22","CCC23","CCC24","CCC25","CCC30","CCC31","CCC32","CCC27","CCC28","CCC29","CCC33","CCC34","CCC35","CCC36","Nukta","Virama","CCC84","CCC91","CCC103","CCC107","CCC118","CCC122","CCC129","CCC130","CCC132","Attached_Above","Below_Left","Left","Kana_Voicing","CCC26","Right"],"scripts":["Common","Latin","Bopomofo","Inherited","Greek","Coptic","Cyrillic","Armenian","Hebrew","Arabic","Syriac","Thaana","Nko","Samaritan","Mandaic","Devanagari","Bengali","Gurmukhi","Gujarati","Oriya","Tamil","Telugu","Kannada","Malayalam","Sinhala","Thai","Lao","Tibetan","Myanmar","Georgian","Hangul","Ethiopic","Cherokee","Canadian_Aboriginal","Ogham","Runic","Tagalog","Hanunoo","Buhid","Tagbanwa","Khmer","Mongolian","Limbu","Tai_Le","New_Tai_Lue","Buginese","Tai_Tham","Balinese","Sundanese","Batak","Lepcha","Ol_Chiki","Braille","Glagolitic","Tifinagh","Han","Hiragana","Katakana","Yi","Lisu","Vai","Bamum","Syloti_Nagri","Phags_Pa","Saurashtra","Kayah_Li","Rejang","Javanese","Cham","Tai_Viet","Meetei_Mayek","null","Linear_B","Lycian","Carian","Old_Italic","Gothic","Old_Permic","Ugaritic","Old_Persian","Deseret","Shavian","Osmanya","Osage","Elbasan","Caucasian_Albanian","Linear_A","Cypriot","Imperial_Aramaic","Palmyrene","Nabataean","Hatran","Phoenician","Lydian","Meroitic_Hieroglyphs","Meroitic_Cursive","Kharoshthi","Old_South_Arabian","Old_North_Arabian","Manichaean","Avestan","Inscriptional_Parthian","Inscriptional_Pahlavi","Psalter_Pahlavi","Old_Turkic","Old_Hungarian","Hanifi_Rohingya","Old_Sogdian","Sogdian","Elymaic","Brahmi","Kaithi","Sora_Sompeng","Chakma","Mahajani","Sharada","Khojki","Multani","Khudawadi","Grantha","Newa","Tirhuta","Siddham","Modi","Takri","Ahom","Dogra","Warang_Citi","Nandinagari","Zanabazar_Square","Soyombo","Pau_Cin_Hau","Bhaiksuki","Marchen","Masaram_Gondi","Gunjala_Gondi","Makasar","Cuneiform","Egyptian_Hieroglyphs","Anatolian_Hieroglyphs","Mro","Bassa_Vah","Pahawh_Hmong","Medefaidrin","Miao","Tangut","Nushu","Duployan","SignWriting","Nyiakeng_Puachue_Hmong","Wancho","Mende_Kikakui","Adlam"],"eaw":["N","Na","A","W","H","F"]}');
52335
52336
52337const $43d7963e56408b24$var$trie = new (0, ($parcel$interopDefault($c5L0i$unicodetrie)))((0, ($parcel$interopDefault($c5L0i$base64js))).toByteArray("AAARAAAAAADwfAEAZXl5ONRt+/5bPVFZimRfKoTQJNm37CGE7Iw0j3UsTWKsoyI7kwyyTiEUzSD7NiEzhWYijH0wMVkHE4Mx49fzfo+3nuP4/fdZjvv+XNd5n/d9nef1WZvmKhTxiZndzDQBSEYQqxqKwnsKvGQucFh+6t6cJ792ePQBZv5S9yXSwkyjf/P4T7mTNnIAv1dOVhMlR9lflbUL9JeJguqsjvG9NTj/wLb566VAURnLo2vvRi89S3gW/33ihh2eXpDn40BIW7REl/7coRKIhAFlAiOtbLDTt6mMb4GzMF1gNnvX/sBxtbsAIjfztCNcQjcNDtLThRvuXu5M5g/CBjaLBE4lJm4qy/oZD97+IJryApcXfgWYlkvWbhfXgujOJKVu8B+ozqTLbxyJ5kNiR75CxDqfBM9eOlDMmGeoZ0iQbbS5VUplIwI+ZNXEKQVJxlwqjhOY7w3XwPesbLK5JZE+Tt4X8q8km0dzInsPPzbscrjBMVjF5mOHSeRdJVgKUjLTHiHqXSPkep8N/zFk8167KLp75f6RndkvzdfB6Uz3MmqvRArzdCbs1/iRZjYPLLF3U8Qs+H+Rb8iK51a6NIV2V9+07uJsTGFWpPz8J++7iRu2B6eAKlK/kujrLthwaD/7a6J5w90TusnH1JMAc+gNrql4aspOUG/RrsxUKmPzhHgP4Bleru+6Vfc/MBjgXVx7who94nPn7MPFrnwQP7g0k0Dq0h2GSKO6fTZ8nLodN1SiOUj/5EL/Xo1DBvRm0wmrh3x6phcJ20/9CuMr5h8WPqXMSasLoLHoufTmE7mzYrs6B0dY7KjuCogKqsvxnxAwXWvd9Puc9PnE8DOHT2INHxRlIyVHrqZahtfV2E/A2PDdtA3ewlRHMtFIBKO/T4IozWTQZ+mb+gdKuk/ZHrqloucKdsOSJmlWTSntWjcxVMjUmroXLM10I6TwDLnBq4LP69TxgVeyGsd8yHvhF8ydPlrNRSNs9EP7WmeuSE7Lu10JbOuQcJw/63sDp68wB9iwP5AO+mBpV0R5VDDeyQUFCel1G+4KHBgEVFS0YK+m2sXLWLuGTlkVAd97WwKKdacjWElRCuDRauf33l/yVcDF6sVPKeTes99FC1NpNWcpieGSV/IbO8PCTy5pbUR1U8lxzf4T+y6fZMxOz3LshkQLeeDSd0WmUrQgajmbktrxsb2AZ0ACw2Vgni+gV/m+KvCRWLg08Clx7uhql+v9XySGcjjOHlsp8vBw/e8HS7dtiqF6T/XcSXuaMW66GF1g4q9YyBadHqy3Y5jin1c7yZos6BBr6dsomSHxiUHanYtcYQwnMMZhRhOnaYJeyJzaRuukyCUh48+e/BUvk/aEfDp8ag+jD64BHxNnQ5v/E7WRk7eLjGV13I3oqy45YNONi/1op1oDr7rPjkhPsTXgUpQtGDPlIs55KhQaic9kSGs/UrZ2QKQOflB8MTEQxRF9pullToWO7Eplan6mcMRFnUu2441yxi23x+KqKlr7RWWsi9ZXMWlr8vfP3llk1m2PRj0yudccxBuoa7VfIgRmnFPGX6Pm1WIfMm/Rm4n/xTn8IGqA0GWuqgu48pEUO0U9nN+ZdIvFpPb7VDPphIfRZxznlHeVFebkd9l+raXy9BpTMcIUIvBfgHEb6ndGo8VUkxpief14KjzFOcaANfgvFpvyY8lE8lE4raHizLpluPzMks1hx/e1Hok5yV0p7qQH7GaYeMzzZTFvRpv6k6iaJ4yNqzBvN8J7B430h2wFm1IBPcqbou33G7/NWPgopl4Mllla6e24L3TOTVNkza2zv3QKuDWTeDpClCEYgTQ+5vEBSQZs/rMF50+sm4jofTgWLqgX1x3TkrDEVaRqfY/xZizFZ3Y8/DFEFD31VSfBQ5raEB6nHnZh6ddehtclQJ8fBrldyIh99LNnV32HzKEej04hk6SYjdauCa4aYW0ru/QxvQRGzLKOAQszf3ixJypTW3WWL6BLSF2EMCMIw7OUvWBC6A/gDc2D1jvBapMCc7ztx6jYczwTKsRLL6dMNXb83HS8kdD0pTMMj161zbVHkU0mhSHo9SlBDDXdN6hDvRGizmohtIyR3ot8tF5iUG4GLNcXeGvBudSFrHu+bVZb9jirNVG+rQPI51A7Hu8/b0UeaIaZ4UgDO68PkYx3PE2HWpKapJ764Kxt5TFYpywMy4DLQqVRy11I7SOLhxUFmqiEK52NaijWArIfCg6qG8q5eSiwRCJb1R7GDJG74TrYgx/lVq7w9++Kh929xSJEaoSse5fUOQg9nMAnIZv+7fwVRcNv3gOHI46Vb5jYUC66PYHO6lS+TOmvEQjuYmx4RkffYGxqZIp/DPWNHAixbRBc+XKE3JEOgs4jIwu/dSAwhydruOGF39co91aTs85JJ3Z/LpXoF43hUwJsb/M1Chzdn8HX8vLXnqWUKvRhNLpfAF4PTFqva1sBQG0J+59HyYfmQ3oa4/sxZdapVLlo/fooxSXi/dOEQWIWq8E0FkttEyTFXR2aNMPINMIzZwCNEheYTVltsdaLkMyKoEUluPNAYCM2IG3br0DLy0fVNWKHtbSKbBjfiw7Lu06gQFalC7RC9BwRMSpLYDUo9pDtDfzwUiPJKLJ2LGcSphWBadOI/iJjNqUHV7ucG8yC6+iNM9QYElqBR7ECFXrcTgWQ3eG/tCWacT9bxIkfmxPmi3vOd36KxihAJA73vWNJ+Y9oapXNscVSVqS5g15xOWND/WuUCcA9YAAg6WFbjHamrblZ5c0L6Zx1X58ZittGcfDKU697QRSqW/g+RofNRyvrWMrBn44cPvkRe2HdTu/Cq01C5/riWPHZyXPKHuSDDdW8c1XPgd6ogvLh20qEIu8c19sqr4ufyHrwh37ZN5MkvY1dsGmEz9pUBTxWrvvhNyODyX2Q1k/fbX/T/vbHNcBrmjgDtvBdtZrVtiIg5iXQuzO/DEMvRX8Mi1zymSlt92BGILeKItjoShJXE/H7xwnf0Iewb8BFieJ9MflEBCQYEDm8eZniiEPfGoaYiiEdhQxHQNr2AuRdmbL9mcl18Kumh+HEZLp6z+j35ML9zTbUwahUZCyQQOgQrGfdfQtaR/OYJ/9dYXb2TWZFMijfCA8Nov4sa5FFDUe1T68h4q08WDE7JbbDiej4utRMR9ontevxlXv6LuJTXt1YEv8bDzEt683PuSsIN0afvu0rcBu9AbXZbkOG3K3AhtqQ28N23lXm7S3Yn6KXmAhBhz+GeorJJ4XxO/b3vZk2LXp42+QvsVxGSNVpfSctIFMTR1bD9t70i6sfNF3WKz/uKDEDCpzzztwhL45lsw89H2IpWN10sXHRlhDse9KCdpP5qNNpU84cTY+aiqswqR8XZ9ea0KbVRwRuOGQU3csAtV2fSbnq47U6es6rKlWLWhg3s/B9C9g+oTyp6RtIldR51OOkP5/6nSy6itUVPcMNOp4M/hDdKOz3uK6srbdxOrc2cJgr1Sg02oBxxSky6V7JaG+ziNwlfqnjnvh2/uq1lKfbp+qpwq/D/5OI5gkFl5CejKGxfc2YVJfGqc4E0x5e9PHK2ukbHNI7/RZV6LNe65apbTGjoCaQls0txPPbmQbCQn+/upCoXRZy9yzorWJvZ0KWcbXlBxU/d5I4ERUTxMuVWhSMmF677LNN7NnLwsmKawXkCgbrpcluOl0WChR1qhtSrxGXHu251dEItYhYX3snvn1gS2uXuzdTxCJjZtjsip0iT2sDC0qMS7Bk9su2NyXjFK5/f5ZoWwofg3DtTyjaFqspnOOTSh8xK/CKUFS57guVEkw9xoQuRCwwEO9Lu9z2vYxSa9NFV8DvSxv2C4WYLYF8Nrc4DzWkzNsk81JJOlZ/LYJrGCoj4MmZpnf3AXmzxT4rtl9jsqljEyedz468SGKdBiQzyz/qWKEhFg45ZczlZZ3KGL3l6sn+3TTa3zMVMhPa1obGp/z+fvY0QXTrJTf1XAT3EtQdUfYYlmWZyvPZ/6rWwU7UOQei7pVE0osgN94Iy+T1+omE6z4Rh2O20FjgBeK2y1mcoFiMDOJvuZPn5Moy9fmFH3wyfKvn4+TwfLvt/lHTTVnvrtoUWRBiQXhiNM8nE6ZoWeux/Z0b2unRcdUzdDpmL7CAgd1ToRXwgmHTZOgiGtVT+xr1QH9ObebRTT4NzL+XSpLuuWp62GqQvJVTPoZOeJCb6gIwd9XHMftQ+Kc08IKKdKQANSJ1a2gve3JdRhO0+tNiYzWAZfd7isoeBu67W7xuK8WX7nhJURld98Inb0t/dWOSau/kDvV4DJo/cImw9AO2Gvq0F2n0M7yIZKL8amMbjYld+qFls7hq8Acvq97K2PrCaomuUiesu7qNanGupEl6J/iem8lyr/NMnsTr6o41PO0yhQh3hPFN0wJP7S830je9iTBLzUNgYH+gUZpROo3rN2qgCI+6GewpX8w8CH+ro6QrWiStqmcMzVa3vEel+3/dDxMp0rDv1Q6wTMS3K64zTT6RWzK1y643im25Ja7X2ePCV2mTswd/4jshZPo4bLnerqIosq/hy2bKUAmVn9n4oun1+a0DIZ56UhVwmZHdUNpLa8gmPvxS1eNvCF1T0wo1wKPdCJi0qOrWz7oYRTzgTtkzEzZn308XSLwUog4OWGKJzCn/3FfF9iA32dZHSv30pRCM3KBY9WZoRhtdK/ChHk6DEQBsfV6tN2o1Cn0mLtPBfnkS+qy1L2xfFe9TQPtDE1Be44RTl82E9hPT2rS2+93LFbzhQQO3C/hD2jRFH3BWWbasAfuMhRJFcTri73eE835y016s22DjoFJ862WvLj69fu2TgSF3RHia9D5DSitlQAXYCnbdqjPkR287Lh6dCHDapos+eFDvcZPP2edPmTFxznJE/EBLoQQ0Qmn9EkZOyJmHxMbvKYb8o21ZHmv5YLqgsEPk9gWZwYQY9wLqGXuax/8QlV5qDaPbq9pLPT1yp+zOWKmraEy1OUJI7zdEcEmvBpbdwLrDCgEb2xX8S/nxZgjK4bRi+pbOmbh8bEeoPvU/L9ndx9kntlDALbdAvp0O8ZC3zSUnFg4cePsw7jxewWvL7HRSBLUn6J7vTH9uld5N76JFPgBCdXGF221oEJk++XfRwXplLSyrVO7HFWBEs99nTazKveW3HpbD4dH/YmdAl+lwbSt8BQWyTG7jAsACI7bPPUU9hI9XUHWqQOuezHzUjnx5Qqs6T1qNHfTTHleDtmqK7flA9a0gz2nycIpz1FHBuWxKNtUeTdqP29Fb3tv+tl5JyBqXoR+vCsdzZwZUhf6Lu8bvkB9yQP4x7GGegB0ym0Lpl03Q7e+C0cDsm9GSDepCDji7nUslLyYyluPfvLyKaDSX4xpR+nVYQjQQn5F8KbY1gbIVLiK1J3mW90zTyR1bqApX2BlWh7KG8LAY9/S9nWC0XXh9pZZo6xuir12T43rkaGfQssbQyIslA7uJnSHOV22NhlNtUo0czxPAsXhh8tIQYaTM4l/yAlZlydTcXhlG22Gs/n3BxKBd/3ZjYwg3NaUurVXhNB+afVnFfNr9TbC9ksNdvwpNfeHanyJ8M6GrIVfLlYAPv0ILe4dn0Z+BJSbJkN7eZY/c6+6ttDYcIDeUKIDXqUSE42Xdh5nRbuaObozjht0HJ5H1e+em+NJi/+8kQlyjCbJpPckwThZeIF9/u7lrVIKNeJLCN/TpPAeXxvd31/CUDWHK9MuP1V1TJgngzi4V0qzS3SW3Qy5UiGHqg02wQa5tsEl9s/X9nNMosgLlUgZSfCBj1DiypLfhr9/r0nR0XY2tmhDOcUS4E7cqa4EJBhzqvpbZa35Q5Iz5EqmhYiOGDAYk606Tv74+KGfPjKVuP15rIzgW0I7/niOu9el/sn2bRye0gV+GrePDRDMHjwO1lEdeXH8N+UTO3IoN18kpI3tPxz+fY+n2MGMSGFHAx/83tKeJOl+2i+f1O9v6FfEDBbqrw+lpM8Anav7zHNr7hE78nXUtPNodMbCnITWA7Ma/IHlZ50F9hWge/wzOvSbtqFVFtkS8Of2nssjZwbSFdU+VO8z6tCEc9UA9ACxT5zIUeSrkBB/v1krOpm7bVMrGxEKfI6LcnpB4D8bvn2hDKGqKrJaVAJuDaBEY3F7eXyqnFWlOoFV/8ZLspZiZd7orXLhd4mhHQgbuKbHjJWUzrnm0Dxw/LJLzXCkh7slMxKo8uxZIWZfdKHlfI7uj3LP6ARAuWdF7ZmZ7daOKqKGbz5LxOggTgS39oEioYmrqkCeUDvbxkBYKeHhcLmMN8dMF01ZMb32IpL/cH8R7VHQSI5I0YfL14g9d7P/6cjB1JXXxbozEDbsrPdmL8ph7QW10jio+v7YsqHKQ6xrBbOVtxU0/nFfzUGZwIBLwyUvg49ii+54nv9FyECBpURnQK4Ox6N7lw5fsjdd5l/2SwBcAHMJoyjO1Pifye2dagaOwCVMqdJWAo77pvBe0zdJcTWu5fdzPNfV2p1pc7/JKQ8zhKkwsOELUDhXygPJ5oR8Vpk2lsCen3D3QOQp2zdrSZHjVBstDF/wWO98rrkQ6/7zt/Drip7OHIug1lomNdmRaHRrjmqeodn22sesQQPgzimPOMqC60a5+i/UYh51uZm+ijWkkaI2xjrBO2558DZNZMiuDQlaVAvBy2wLn/bR3FrNzfnO/9oDztYqxZrr7JMIhqmrochbqmQnKowxW29bpqTaJu7kW1VotC72QkYX8OoDDdMDwV1kJRk3mufgJBzf+iwFRJ7XWQwO5ujVglgFgHtycWiMLx5N+6XU+TulLabWjOzoao03fniUW0xvIJNPbk7CQlFZd/RCOPvgQbLjh5ITE8NVJeKt3HGr6JTnFdIzcVOlEtwqbIIX0IM7saC+4N5047MTJ9+Wn11EhyEPIlwsHE5utCeXRjQzlrR+R1Cf/qDzcNbqLXdk3J7gQ39VUrrEkS/VMWjjg+t2oYrqB0tUZClcUF6+LBC3EQ7KnGIwm/qjZX4GKPtjTX1zQKV6nPAb2t/Rza5IqKRf8i2DFEhV/YSifX0YwsiF6TQnp48Gr65TFq0zUe6LGjiY7fq0LSGKL1VnC6ESI2yxvt3XqBx53B3gSlGFeJcPbUbonW1E9E9m4NfuwPh+t5QjRxX34lvBPVxwQd7aeTd+r9dw5CiP1pt8wMZoMdni7GapYdo6KPgeQKcmlFfq4UYhvV0IBgeiR3RnTMBaqDqpZrTRyLdsp4l0IXZTdErfH0sN3dqBG5vRIx3VgCYcHmmkqJ8Hyu3s9K9uBD1d8cZUEx3qYcF5vsqeRpF1GOg8emeWM2OmBlWPdZ6qAXwm3nENFyh+kvXk132PfWAlN0kb7yh4fz2T7VWUY/hEXX5DvxGABC03XRpyOG8t/u3Gh5tZdpsSV9AWaxJN7zwhVglgII1gV28tUViyqn4UMdIh5t+Ea2zo7PO48oba0TwQbiSZOH4YhD578kPF3reuaP7LujPMsjHmaDuId9XEaZBCJhbXJbRg5VCk3KJpryH/+8S3wdhR47pdFcmpZG2p0Bpjp/VbvalgIZMllYX5L31aMPdt1J7r/7wbixt0Mnz2ZvNGTARHPVD+2O1D8SGpWXlVnP2ekgon55YiinADDynyaXtZDXueVqbuTi8z8cHHK325pgqM+mWZwzHeEreMvhZopAScXM14SJHpGwZyRljMlDvcMm9FZ/1e9+r/puOnpXOtc9Iu2fmgBfEP9cGW1Fzb1rGlfJ08pACtq1ZW18bf2cevebzVeHbaA50G9qoUp39JWdPHbYkPCRXjt4gzlq3Cxge28Mky8MoS/+On72kc+ZI2xBtgJytpAQHQ1zrEddMIVyR5urX6yBNu8v5lKC8eLdGKTJtbgIZ3ZyTzSfWmx9f+cvcJe8yM39K/djkp2aUTE/9m2Lj5jg7b8vdRAer7DO3SyLNHs1CAm5x5iAdh2yGJYivArZbCBNY88Tw+w+C1Tbt7wK3zl2rzTHo/D8/gb3c3mYrnEIEipYqPUcdWjnTsSw471O3EUN7Gtg4NOAs9PJrxm03VuZKa5xwXAYCjt7Gs01Km6T2DhOYUMoFcCSu7Hk1p3yP1eG+M3v3Q5luAze6WwBnZIYO0TCucPWK+UJ36KoJ8Y+vpavhLO8g5ed704IjlQdfemrMu//EvPYXTQSGIPPfiagJS9nMqP5IvkxN9pvuJz7h8carPXTKMq8jnTeL0STan6dnLTAqwIswcIwWDR2KwbGddAVN8SYWRB7kfBfBRkSXzvHlIF8D6jo64kUzYk5o/n8oLjKqat0rdXvQ86MkwQGMnnlcasqPPT2+mVtUGb32KuH6cyZQenrRG11TArcAl27+nvOMBDe++EKHf4YdyGf7mznzOz33cFFGEcv329p4qG2hoaQ8ULiMyVz6ENcxhoqGnFIdupcn7GICQWuw3yO3W8S33mzCcMYJ8ywc7U7rmaQf/W5K63Gr4bVTpXOyOp4tbaPyIaatBNpXqlmQUTSZXjxPr19+73PSaT+QnI35YsWn6WpfJjRtK8vlJZoTSgjaRU39AGCkWOZtifJrnefCrqwTKDFmuWUCukEsYcRrMzCoit28wYpP7kSVjMD8WJYQiNc2blMjuqYegmf6SsfC1jqz8XzghMlOX+gn/MKZmgljszrmehEa4V98VreJDxYvHr3j7IeJB9/sBZV41BWT/AZAjuC5XorlIPnZgBAniBEhanp0/0+qZmEWDpu8ige1hUPIyTo6T6gDEcFhWSoduNh8YSu65KgMOGBw7VlNYzNIgwHtq9KP2yyTVysqX5v12sf7D+vQUdR2dRDvCV40rIInXSLWT/yrC6ExOQxBJwIDbeZcl3z1yR5Rj3l8IGpxspapnvBL+fwupA3b6fkFceID9wgiM1ILB0cHVdvo/R4xg8yqKXT8efl0GnGX1/27FUYeUW2L/GNRGGWVGp3i91oaJkb4rybENHre9a2P5viz/yqk8ngWUUS+Kv+fu+9BLFnfLiLXOFcIeBJLhnayCiuDRSqcx0Qu68gVsGYc6EHD500Fkt+gpDj6gvr884n8wZ5o6q7xtL5wA0beXQnffWYkZrs2NGIRgQbsc5NB302SVx+R4ROvmgZaR8wBcji128BMfJ9kcvJ4DC+bQ57kRmv5yxgU4ngZfn0/JNZ8JBwxjTqS+s9kjJFG1unGUGLwMiIuXUD9EFhNIJuyCEAmVZSIGKH4G6v1gRR1LyzQKH2ZqiI1DnHMoDEZspbDjTeaFIAbSvjSq3A+n46y9hhVM8wIpnARSXyzmOD96d9UXvFroSPgGw1dq2vdEqDq9fJN1EbL2WulNmHkFDvxSO9ZT/RX/Bw2gA/BrF90XrJACereVfbV/YXaKfp77Nmx5NjEIUlxojsy7iN7nBHSZigfsbFyVOX1ZTeCCxvqnRSExP4lk5ZeYlRu9caaa743TWNdchRIhEWwadsBIe245C8clpaZ4zrPsk+OwXzxWCvRRumyNSLW5KWaSJyJU95cwheK76gr7228spZ3hmTtLyrfM2QRFqZFMR8/Q6yWfVgwTdfX2Ry4w3+eAO/5VT5nFb5NlzXPvBEAWrNZ6Q3jbH0RF4vcbp+fDngf/ywpoyNQtjrfvcq93AVb1RDWRghvyqgI2BkMr1rwYi8gizZ0G9GmPpMeqPerAQ0dJbzx+KAFM4IBq6iSLpZHUroeyfd9o5o+4fR2EtsZBoJORQEA4SW0CmeXSnblx2e9QkCHIodyqV6+g5ETEpZsLqnd/Na60EKPX/tQpPEcO+COIBPcQdszDzSiHGyQFPly/7KciUh1u+mFfxTCHGv9nn2WqndGgeGjQ/kr02qmTBX7Hc1qiEvgiSz1Tz/sy7Es29wvn6FrDGPP7asXlhOaiHxOctPvTptFA1kHFUk8bME7SsTSnGbFbUrssxrq70LhoSh5OwvQna+w84XdXhZb2sloJ4ZsCg3j+PrjJL08/JBi5zGd6ud/ZxhmcGKLOXPcNunQq5ESW92iJvfsuRrNYtawWwSmNhPYoFj2QqWNF0ffLpGt/ad24RJ8vkb5sXkpyKXmvFG5Vcdzf/44k3PBL/ojJ52+kWGzOArnyp5f969oV3J2c4Li27Nkova9VwRNVKqN0V+gV+mTHitgkXV30aWd3A1RSildEleiNPA+5cp+3+T7X+xfHiRZXQ1s4FA9TxIcnveQs9JSZ5r5qNmgqlW4zMtZ6rYNvgmyVcywKtu8ZxnSbS5vXlBV+NXdIfi3+xzrnJ0TkFL+Un8v1PWOC2PPFCjVPq7qTH7mOpzOYj/b4h0ceT+eHgr97Jqhb1ziVfeANzfN8bFUhPKBi7hJBCukQnB0aGjFTYLJPXL26lQ2b80xrOD5cFWgA8hz3St0e69kwNnD3+nX3gy12FjrjO+ddRvvvfyV3SWbXcxqNHfmsb9u1TV+wHTb9B07/L2sB8WUHJ9eeNomDyysEWZ0deqEhH/oWI2oiEh526gvAK1Nx2kIhNvkYR+tPYHEa9j+nd1VBpQP1uzSjIDO+fDDB7uy029rRjDC5Sk6aKczyz1D5uA9Lu+Rrrapl8JXNL3VRllNQH2K1ZFxOpX8LprttfqQ56MbPM0IttUheXWD/mROOeFqGUbL+kUOVlXLTFX/525g4faLEFO4qWWdmOXMNvVjpIVTWt650HfQjX9oT3Dg5Au6+v1/Ci78La6ZOngYCFPT1AUwxQuZ0yt5xKdNXLaDTISMTeCj16XTryhM36K2mfGRIgot71voWs8tTpL/f1rvcwv3LSDf+/G8THCT7NpfHWcW+lsF/ol8q9Bi6MezNTqp0rpp/kJRiVfNrX/w27cRRTu8RIIqtUblBMkxy4jwAVqCjUJkiPBj2cAoVloG8B2/N5deLdMhDb7xs5nhd3dubJhuj8WbaFRyu1L678DHhhA+rMimNo4C1kGpp0tD/qnCfCFHejpf0LJX43OTr578PY0tnIIrlWyNYyuR/ie6j2xNb1OV6u0dOX/1Dtcd7+ya9W+rY2LmnyQMtk8SMLTon8RAdwOaN2tNg5zVnDKlmVeOxPV2vhHIo9QEPV7jc3f+zVDquiNg1OaHX3cZXJDRY5MJpo+VanAcmqp4oasYLG+wrXUL5vJU0kqk2hGEskhP+Jjigrz1l6QnEwp6n8PMVeJp70Ii6ppeaK9GhF6fJE00ceLyxv08tKiPat4QdxZFgSbQknnEiCLD8Qc1rjazVKM3r3gXnnMeONgdz/yFV1q+haaN+wnF3Fn4uYCI9XsKOuVwDD0LsCO/f0gj5cmxCFcr7sclIcefWjvore+3aSU474cyqDVxH7w1RX3CHsaqsMRX17ZLgjsDXws3kLm2XJdM3Ku383UXqaHqsywzPhx7NFir0Fqjym/w6cxD2U9ypa3dx7Z12w/fi3Jps8sqJ8f8Ah8aZAvkHXvIRyrsxK7rrFaNNdNvjI8+3Emri195DCNa858anj2Qdny6Czshkn4N2+1m+k5S8sunX3Ja7I+JutRzg1mc2e9Yc0Zv9PZn1SwhxIdU9sXwZRTd/J5FoUm0e+PYREeHg3oc2YYzGf2xfJxXExt4pT3RfDRHvMXLUmoXOy63xv5pLuhOEax0dRgSywZ/GH+YBXFgCeTU0hZ8SPEFsn8punp1Kurd1KgXxUZ+la3R5+4ePGR4ZF5UQtOa83+Vj8zh80dfzbhxWCeoJnQ4dkZJM4drzknZOOKx2n3WrvJnzFIS8p0xeic+M3ZRVXIp10tV2DyYKwRxLzulPwzHcLlYTxl4PF7v8l106Azr+6wBFejbq/3P72C/0j78cepY9990/d4eAurn2lqdGKLU8FffnMw7cY7pVeXJRMU73Oxwi2g2vh/+4gX8dvbjfojn/eLVhhYl8GthwCQ50KcZq4z2JeW5eeOnJWFQEnVxDoG459TaC4zXybECEoJ0V5q1tXrQbDMtUxeTV6Pdt1/zJuc7TJoV/9YZFWxUtCf6Ou3Vd/vR/vG0138hJQrHkNeoep5dLe+6umcSquKvMaFpm3EZHDBOvCi0XYyIFHMgX7Cqp3JVXlxJFwQfHSaIUEbI2u1lBVUdlNw4Qa9UsLPEK94Qiln3pyKxQVCeNlx8yd7EegVNQBkFLabKvnietYVB4IPZ1fSor82arbgYec8aSdFMaIluYTYuNx32SxfrjKUdPGq+UNp5YpydoEG3xVLixtmHO9zXxKAnHnPuH2fPGrjx0GcuCDEU+yXUtXh6nfUL+cykws1gJ5vkfYFaFBr9PdCXvVf35OJQxzUMmWjv0W6uGJK11uAGDqSpOwCf6rouSIjPVgw57cJCOQ4b9tkI/Y5WNon9Swe72aZryKo8d+HyHBEdWJKrkary0LIGczA4Irq353Wc0Zga3om7UQiAGCvIl8GGyaqz5zH+1gMP5phWUCpKtttWIyicz09vXg76GxkmiGSMQ06Z9X8BUwqOtauDbPIf4rpK/yYoeAHxJ9soXS9VDe1Aw+awOOxaN8foLrif0TXBvQ55dtRtulRq9emFDBxlQcqKCaD8NeTSE7FOHvcjf/+oKbbtRqz9gbofoc2EzQ3pL6W5JdfJzAWmOk8oeoECe90lVMruwl/ltM015P/zIPazqvdvFmLNVHMIZrwiQ2tIKtGh6PDVH+85ew3caqVt2BsDv5rOcu3G9srQWd7NmgtzCRUXLYknYRSwtH9oUtkqyN3CfP20xQ1faXQl4MEmjQehWR6GmGnkdpYNQYeIG408yAX7uCZmYUic9juOfb+Re28+OVOB+scYK4DaPcBe+5wmji9gymtkMpKo4UKqCz7yxzuN8VIlx9yNozpRJpNaWHtaZVEqP45n2JemTlYBSmNIK1FuSYAUQ1yBLnKxevrjayd+h2i8PjdB3YY6b0nr3JuOXGpPMyh4V2dslpR3DFEvgpsBLqhqLDOWP4yEvIL6f21PpA7/8B"));
52338const $43d7963e56408b24$var$log2 = Math.log2 || ((n)=>Math.log(n) / Math.LN2);
52339const $43d7963e56408b24$var$bits = (n)=>$43d7963e56408b24$var$log2(n) + 1 | 0;
52340// compute the number of bits stored for each field
52341const $43d7963e56408b24$var$CATEGORY_BITS = $43d7963e56408b24$var$bits((0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).categories.length - 1);
52342const $43d7963e56408b24$var$COMBINING_BITS = $43d7963e56408b24$var$bits((0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).combiningClasses.length - 1);
52343const $43d7963e56408b24$var$SCRIPT_BITS = $43d7963e56408b24$var$bits((0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).scripts.length - 1);
52344const $43d7963e56408b24$var$EAW_BITS = $43d7963e56408b24$var$bits((0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).eaw.length - 1);
52345const $43d7963e56408b24$var$NUMBER_BITS = 10;
52346// compute shift and mask values for each field
52347const $43d7963e56408b24$var$CATEGORY_SHIFT = $43d7963e56408b24$var$COMBINING_BITS + $43d7963e56408b24$var$SCRIPT_BITS + $43d7963e56408b24$var$EAW_BITS + $43d7963e56408b24$var$NUMBER_BITS;
52348const $43d7963e56408b24$var$COMBINING_SHIFT = $43d7963e56408b24$var$SCRIPT_BITS + $43d7963e56408b24$var$EAW_BITS + $43d7963e56408b24$var$NUMBER_BITS;
52349const $43d7963e56408b24$var$SCRIPT_SHIFT = $43d7963e56408b24$var$EAW_BITS + $43d7963e56408b24$var$NUMBER_BITS;
52350const $43d7963e56408b24$var$EAW_SHIFT = $43d7963e56408b24$var$NUMBER_BITS;
52351const $43d7963e56408b24$var$CATEGORY_MASK = (1 << $43d7963e56408b24$var$CATEGORY_BITS) - 1;
52352const $43d7963e56408b24$var$COMBINING_MASK = (1 << $43d7963e56408b24$var$COMBINING_BITS) - 1;
52353const $43d7963e56408b24$var$SCRIPT_MASK = (1 << $43d7963e56408b24$var$SCRIPT_BITS) - 1;
52354const $43d7963e56408b24$var$EAW_MASK = (1 << $43d7963e56408b24$var$EAW_BITS) - 1;
52355const $43d7963e56408b24$var$NUMBER_MASK = (1 << $43d7963e56408b24$var$NUMBER_BITS) - 1;
52356function $43d7963e56408b24$export$410364bbb673ddbc(codePoint) {
52357 const val = $43d7963e56408b24$var$trie.get(codePoint);
52358 return (0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).categories[val >> $43d7963e56408b24$var$CATEGORY_SHIFT & $43d7963e56408b24$var$CATEGORY_MASK];
52359}
52360function $43d7963e56408b24$export$c03b919c6651ed55(codePoint) {
52361 const val = $43d7963e56408b24$var$trie.get(codePoint);
52362 return (0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).combiningClasses[val >> $43d7963e56408b24$var$COMBINING_SHIFT & $43d7963e56408b24$var$COMBINING_MASK];
52363}
52364function $43d7963e56408b24$export$941569448d136665(codePoint) {
52365 const val = $43d7963e56408b24$var$trie.get(codePoint);
52366 return (0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).scripts[val >> $43d7963e56408b24$var$SCRIPT_SHIFT & $43d7963e56408b24$var$SCRIPT_MASK];
52367}
52368function $43d7963e56408b24$export$92f6187db8ca6d26(codePoint) {
52369 const val = $43d7963e56408b24$var$trie.get(codePoint);
52370 return (0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).eaw[val >> $43d7963e56408b24$var$EAW_SHIFT & $43d7963e56408b24$var$EAW_MASK];
52371}
52372function $43d7963e56408b24$export$7d1258ebb7625a0d(codePoint) {
52373 let val = $43d7963e56408b24$var$trie.get(codePoint);
52374 let num = val & $43d7963e56408b24$var$NUMBER_MASK;
52375 if (num === 0) return null;
52376 else if (num <= 50) return num - 1;
52377 else if (num < 0x1e0) {
52378 const numerator = (num >> 4) - 12;
52379 const denominator = (num & 0xf) + 1;
52380 return numerator / denominator;
52381 } else if (num < 0x300) {
52382 val = (num >> 5) - 14;
52383 let exp = (num & 0x1f) + 2;
52384 while(exp > 0){
52385 val *= 10;
52386 exp--;
52387 }
52388 return val;
52389 } else {
52390 val = (num >> 2) - 0xbf;
52391 let exp = (num & 3) + 1;
52392 while(exp > 0){
52393 val *= 60;
52394 exp--;
52395 }
52396 return val;
52397 }
52398}
52399function $43d7963e56408b24$export$52c8ea63abd07594(codePoint) {
52400 const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint);
52401 return category === "Lu" || category === "Ll" || category === "Lt" || category === "Lm" || category === "Lo" || category === "Nl";
52402}
52403function $43d7963e56408b24$export$727d9dbc4fbb948f(codePoint) {
52404 return $43d7963e56408b24$export$410364bbb673ddbc(codePoint) === "Nd";
52405}
52406function $43d7963e56408b24$export$a5b49f4dc6a07d2c(codePoint) {
52407 const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint);
52408 return category === "Pc" || category === "Pd" || category === "Pe" || category === "Pf" || category === "Pi" || category === "Po" || category === "Ps";
52409}
52410function $43d7963e56408b24$export$7b6804e8df61fcf5(codePoint) {
52411 return $43d7963e56408b24$export$410364bbb673ddbc(codePoint) === "Ll";
52412}
52413function $43d7963e56408b24$export$aebd617640818cda(codePoint) {
52414 return $43d7963e56408b24$export$410364bbb673ddbc(codePoint) === "Lu";
52415}
52416function $43d7963e56408b24$export$de8b4ee23b2cf823(codePoint) {
52417 return $43d7963e56408b24$export$410364bbb673ddbc(codePoint) === "Lt";
52418}
52419function $43d7963e56408b24$export$3c52dd84024ae72c(codePoint) {
52420 const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint);
52421 return category === "Zs" || category === "Zl" || category === "Zp";
52422}
52423function $43d7963e56408b24$export$a11bdcffe109e74b(codePoint) {
52424 const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint);
52425 return category === "Nd" || category === "No" || category === "Nl" || category === "Lu" || category === "Ll" || category === "Lt" || category === "Lm" || category === "Lo" || category === "Me" || category === "Mc";
52426}
52427function $43d7963e56408b24$export$e33ad6871e762338(codePoint) {
52428 const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint);
52429 return category === "Mn" || category === "Me" || category === "Mc";
52430}
52431var // Backwards compatibility.
52432$43d7963e56408b24$export$2e2bcd8739ae039 = {
52433 getCategory: $43d7963e56408b24$export$410364bbb673ddbc,
52434 getCombiningClass: $43d7963e56408b24$export$c03b919c6651ed55,
52435 getScript: $43d7963e56408b24$export$941569448d136665,
52436 getEastAsianWidth: $43d7963e56408b24$export$92f6187db8ca6d26,
52437 getNumericValue: $43d7963e56408b24$export$7d1258ebb7625a0d,
52438 isAlphabetic: $43d7963e56408b24$export$52c8ea63abd07594,
52439 isDigit: $43d7963e56408b24$export$727d9dbc4fbb948f,
52440 isPunctuation: $43d7963e56408b24$export$a5b49f4dc6a07d2c,
52441 isLowerCase: $43d7963e56408b24$export$7b6804e8df61fcf5,
52442 isUpperCase: $43d7963e56408b24$export$aebd617640818cda,
52443 isTitleCase: $43d7963e56408b24$export$de8b4ee23b2cf823,
52444 isWhiteSpace: $43d7963e56408b24$export$3c52dd84024ae72c,
52445 isBaseForm: $43d7963e56408b24$export$a11bdcffe109e74b,
52446 isMark: $43d7963e56408b24$export$e33ad6871e762338
52447};
52448
52449
52450
52451
52452},{"base64-js":87,"unicode-trie":270}],270:[function(require,module,exports){
52453const inflate = require('tiny-inflate');
52454const { swap32LE } = require('./swap');
52455
52456// Shift size for getting the index-1 table offset.
52457const SHIFT_1 = 6 + 5;
52458
52459// Shift size for getting the index-2 table offset.
52460const SHIFT_2 = 5;
52461
52462// Difference between the two shift sizes,
52463// for getting an index-1 offset from an index-2 offset. 6=11-5
52464const SHIFT_1_2 = SHIFT_1 - SHIFT_2;
52465
52466// Number of index-1 entries for the BMP. 32=0x20
52467// This part of the index-1 table is omitted from the serialized form.
52468const OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> SHIFT_1;
52469
52470// Number of entries in an index-2 block. 64=0x40
52471const INDEX_2_BLOCK_LENGTH = 1 << SHIFT_1_2;
52472
52473// Mask for getting the lower bits for the in-index-2-block offset. */
52474const INDEX_2_MASK = INDEX_2_BLOCK_LENGTH - 1;
52475
52476// Shift size for shifting left the index array values.
52477// Increases possible data size with 16-bit index values at the cost
52478// of compactability.
52479// This requires data blocks to be aligned by DATA_GRANULARITY.
52480const INDEX_SHIFT = 2;
52481
52482// Number of entries in a data block. 32=0x20
52483const DATA_BLOCK_LENGTH = 1 << SHIFT_2;
52484
52485// Mask for getting the lower bits for the in-data-block offset.
52486const DATA_MASK = DATA_BLOCK_LENGTH - 1;
52487
52488// The part of the index-2 table for U+D800..U+DBFF stores values for
52489// lead surrogate code _units_ not code _points_.
52490// Values for lead surrogate code _points_ are indexed with this portion of the table.
52491// Length=32=0x20=0x400>>SHIFT_2. (There are 1024=0x400 lead surrogates.)
52492const LSCP_INDEX_2_OFFSET = 0x10000 >> SHIFT_2;
52493const LSCP_INDEX_2_LENGTH = 0x400 >> SHIFT_2;
52494
52495// Count the lengths of both BMP pieces. 2080=0x820
52496const INDEX_2_BMP_LENGTH = LSCP_INDEX_2_OFFSET + LSCP_INDEX_2_LENGTH;
52497
52498// The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.
52499// Length 32=0x20 for lead bytes C0..DF, regardless of SHIFT_2.
52500const UTF8_2B_INDEX_2_OFFSET = INDEX_2_BMP_LENGTH;
52501const UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; // U+0800 is the first code point after 2-byte UTF-8
52502
52503// The index-1 table, only used for supplementary code points, at offset 2112=0x840.
52504// Variable length, for code points up to highStart, where the last single-value range starts.
52505// Maximum length 512=0x200=0x100000>>SHIFT_1.
52506// (For 0x100000 supplementary code points U+10000..U+10ffff.)
52507//
52508// The part of the index-2 table for supplementary code points starts
52509// after this index-1 table.
52510//
52511// Both the index-1 table and the following part of the index-2 table
52512// are omitted completely if there is only BMP data.
52513const INDEX_1_OFFSET = UTF8_2B_INDEX_2_OFFSET + UTF8_2B_INDEX_2_LENGTH;
52514
52515// The alignment size of a data block. Also the granularity for compaction.
52516const DATA_GRANULARITY = 1 << INDEX_SHIFT;
52517
52518class UnicodeTrie {
52519 constructor(data) {
52520 const isBuffer = (typeof data.readUInt32BE === 'function') && (typeof data.slice === 'function');
52521
52522 if (isBuffer || data instanceof Uint8Array) {
52523 // read binary format
52524 let uncompressedLength;
52525 if (isBuffer) {
52526 this.highStart = data.readUInt32LE(0);
52527 this.errorValue = data.readUInt32LE(4);
52528 uncompressedLength = data.readUInt32LE(8);
52529 data = data.slice(12);
52530 } else {
52531 const view = new DataView(data.buffer);
52532 this.highStart = view.getUint32(0, true);
52533 this.errorValue = view.getUint32(4, true);
52534 uncompressedLength = view.getUint32(8, true);
52535 data = data.subarray(12);
52536 }
52537
52538 // double inflate the actual trie data
52539 data = inflate(data, new Uint8Array(uncompressedLength));
52540 data = inflate(data, new Uint8Array(uncompressedLength));
52541
52542 // swap bytes from little-endian
52543 swap32LE(data);
52544
52545 this.data = new Uint32Array(data.buffer);
52546
52547 } else {
52548 // pre-parsed data
52549 ({ data: this.data, highStart: this.highStart, errorValue: this.errorValue } = data);
52550 }
52551 }
52552
52553 get(codePoint) {
52554 let index;
52555 if ((codePoint < 0) || (codePoint > 0x10ffff)) {
52556 return this.errorValue;
52557 }
52558
52559 if ((codePoint < 0xd800) || ((codePoint > 0xdbff) && (codePoint <= 0xffff))) {
52560 // Ordinary BMP code point, excluding leading surrogates.
52561 // BMP uses a single level lookup. BMP index starts at offset 0 in the index.
52562 // data is stored in the index array itself.
52563 index = (this.data[codePoint >> SHIFT_2] << INDEX_SHIFT) + (codePoint & DATA_MASK);
52564 return this.data[index];
52565 }
52566
52567 if (codePoint <= 0xffff) {
52568 // Lead Surrogate Code Point. A Separate index section is stored for
52569 // lead surrogate code units and code points.
52570 // The main index has the code unit data.
52571 // For this function, we need the code point data.
52572 index = (this.data[LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> SHIFT_2)] << INDEX_SHIFT) + (codePoint & DATA_MASK);
52573 return this.data[index];
52574 }
52575
52576 if (codePoint < this.highStart) {
52577 // Supplemental code point, use two-level lookup.
52578 index = this.data[(INDEX_1_OFFSET - OMITTED_BMP_INDEX_1_LENGTH) + (codePoint >> SHIFT_1)];
52579 index = this.data[index + ((codePoint >> SHIFT_2) & INDEX_2_MASK)];
52580 index = (index << INDEX_SHIFT) + (codePoint & DATA_MASK);
52581 return this.data[index];
52582 }
52583
52584 return this.data[this.data.length - DATA_GRANULARITY];
52585 }
52586}
52587
52588module.exports = UnicodeTrie;
52589},{"./swap":271,"tiny-inflate":267}],271:[function(require,module,exports){
52590const isBigEndian = (new Uint8Array(new Uint32Array([0x12345678]).buffer)[0] === 0x12);
52591
52592const swap = (b, n, m) => {
52593 let i = b[n];
52594 b[n] = b[m];
52595 b[m] = i;
52596};
52597
52598const swap32 = array => {
52599 const len = array.length;
52600 for (let i = 0; i < len; i += 4) {
52601 swap(array, i, i + 3);
52602 swap(array, i + 1, i + 2);
52603 }
52604};
52605
52606const swap32LE = array => {
52607 if (isBigEndian) {
52608 swap32(array);
52609 }
52610};
52611
52612module.exports = {
52613 swap32LE: swap32LE
52614};
52615
52616},{}],272:[function(require,module,exports){
52617(function (global){(function (){
52618
52619/**
52620 * Module exports.
52621 */
52622
52623module.exports = deprecate;
52624
52625/**
52626 * Mark that a method should not be used.
52627 * Returns a modified function which warns once by default.
52628 *
52629 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
52630 *
52631 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
52632 * will throw an Error when invoked.
52633 *
52634 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
52635 * will invoke `console.trace()` instead of `console.error()`.
52636 *
52637 * @param {Function} fn - the function to deprecate
52638 * @param {String} msg - the string to print to the console when `fn` is invoked
52639 * @returns {Function} a new "deprecated" version of `fn`
52640 * @api public
52641 */
52642
52643function deprecate (fn, msg) {
52644 if (config('noDeprecation')) {
52645 return fn;
52646 }
52647
52648 var warned = false;
52649 function deprecated() {
52650 if (!warned) {
52651 if (config('throwDeprecation')) {
52652 throw new Error(msg);
52653 } else if (config('traceDeprecation')) {
52654 console.trace(msg);
52655 } else {
52656 console.warn(msg);
52657 }
52658 warned = true;
52659 }
52660 return fn.apply(this, arguments);
52661 }
52662
52663 return deprecated;
52664}
52665
52666/**
52667 * Checks `localStorage` for boolean values for the given `name`.
52668 *
52669 * @param {String} name
52670 * @returns {Boolean}
52671 * @api private
52672 */
52673
52674function config (name) {
52675 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
52676 try {
52677 if (!global.localStorage) return false;
52678 } catch (_) {
52679 return false;
52680 }
52681 var val = global.localStorage[name];
52682 if (null == val) return false;
52683 return String(val).toLowerCase() === 'true';
52684}
52685
52686}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
52687},{}],273:[function(require,module,exports){
52688if (typeof Object.create === 'function') {
52689 // implementation from standard node.js 'util' module
52690 module.exports = function inherits(ctor, superCtor) {
52691 ctor.super_ = superCtor
52692 ctor.prototype = Object.create(superCtor.prototype, {
52693 constructor: {
52694 value: ctor,
52695 enumerable: false,
52696 writable: true,
52697 configurable: true
52698 }
52699 });
52700 };
52701} else {
52702 // old school shim for old browsers
52703 module.exports = function inherits(ctor, superCtor) {
52704 ctor.super_ = superCtor
52705 var TempCtor = function () {}
52706 TempCtor.prototype = superCtor.prototype
52707 ctor.prototype = new TempCtor()
52708 ctor.prototype.constructor = ctor
52709 }
52710}
52711
52712},{}],274:[function(require,module,exports){
52713module.exports = function isBuffer(arg) {
52714 return arg && typeof arg === 'object'
52715 && typeof arg.copy === 'function'
52716 && typeof arg.fill === 'function'
52717 && typeof arg.readUInt8 === 'function';
52718}
52719},{}],275:[function(require,module,exports){
52720(function (process,global){(function (){
52721// Copyright Joyent, Inc. and other Node contributors.
52722//
52723// Permission is hereby granted, free of charge, to any person obtaining a
52724// copy of this software and associated documentation files (the
52725// "Software"), to deal in the Software without restriction, including
52726// without limitation the rights to use, copy, modify, merge, publish,
52727// distribute, sublicense, and/or sell copies of the Software, and to permit
52728// persons to whom the Software is furnished to do so, subject to the
52729// following conditions:
52730//
52731// The above copyright notice and this permission notice shall be included
52732// in all copies or substantial portions of the Software.
52733//
52734// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
52735// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
52736// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
52737// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
52738// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
52739// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
52740// USE OR OTHER DEALINGS IN THE SOFTWARE.
52741
52742var formatRegExp = /%[sdj%]/g;
52743exports.format = function(f) {
52744 if (!isString(f)) {
52745 var objects = [];
52746 for (var i = 0; i < arguments.length; i++) {
52747 objects.push(inspect(arguments[i]));
52748 }
52749 return objects.join(' ');
52750 }
52751
52752 var i = 1;
52753 var args = arguments;
52754 var len = args.length;
52755 var str = String(f).replace(formatRegExp, function(x) {
52756 if (x === '%%') return '%';
52757 if (i >= len) return x;
52758 switch (x) {
52759 case '%s': return String(args[i++]);
52760 case '%d': return Number(args[i++]);
52761 case '%j':
52762 try {
52763 return JSON.stringify(args[i++]);
52764 } catch (_) {
52765 return '[Circular]';
52766 }
52767 default:
52768 return x;
52769 }
52770 });
52771 for (var x = args[i]; i < len; x = args[++i]) {
52772 if (isNull(x) || !isObject(x)) {
52773 str += ' ' + x;
52774 } else {
52775 str += ' ' + inspect(x);
52776 }
52777 }
52778 return str;
52779};
52780
52781
52782// Mark that a method should not be used.
52783// Returns a modified function which warns once by default.
52784// If --no-deprecation is set, then it is a no-op.
52785exports.deprecate = function(fn, msg) {
52786 // Allow for deprecating things in the process of starting up.
52787 if (isUndefined(global.process)) {
52788 return function() {
52789 return exports.deprecate(fn, msg).apply(this, arguments);
52790 };
52791 }
52792
52793 if (process.noDeprecation === true) {
52794 return fn;
52795 }
52796
52797 var warned = false;
52798 function deprecated() {
52799 if (!warned) {
52800 if (process.throwDeprecation) {
52801 throw new Error(msg);
52802 } else if (process.traceDeprecation) {
52803 console.trace(msg);
52804 } else {
52805 console.error(msg);
52806 }
52807 warned = true;
52808 }
52809 return fn.apply(this, arguments);
52810 }
52811
52812 return deprecated;
52813};
52814
52815
52816var debugs = {};
52817var debugEnviron;
52818exports.debuglog = function(set) {
52819 if (isUndefined(debugEnviron))
52820 debugEnviron = process.env.NODE_DEBUG || '';
52821 set = set.toUpperCase();
52822 if (!debugs[set]) {
52823 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
52824 var pid = process.pid;
52825 debugs[set] = function() {
52826 var msg = exports.format.apply(exports, arguments);
52827 console.error('%s %d: %s', set, pid, msg);
52828 };
52829 } else {
52830 debugs[set] = function() {};
52831 }
52832 }
52833 return debugs[set];
52834};
52835
52836
52837/**
52838 * Echos the value of a value. Trys to print the value out
52839 * in the best way possible given the different types.
52840 *
52841 * @param {Object} obj The object to print out.
52842 * @param {Object} opts Optional options object that alters the output.
52843 */
52844/* legacy: obj, showHidden, depth, colors*/
52845function inspect(obj, opts) {
52846 // default options
52847 var ctx = {
52848 seen: [],
52849 stylize: stylizeNoColor
52850 };
52851 // legacy...
52852 if (arguments.length >= 3) ctx.depth = arguments[2];
52853 if (arguments.length >= 4) ctx.colors = arguments[3];
52854 if (isBoolean(opts)) {
52855 // legacy...
52856 ctx.showHidden = opts;
52857 } else if (opts) {
52858 // got an "options" object
52859 exports._extend(ctx, opts);
52860 }
52861 // set default options
52862 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
52863 if (isUndefined(ctx.depth)) ctx.depth = 2;
52864 if (isUndefined(ctx.colors)) ctx.colors = false;
52865 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
52866 if (ctx.colors) ctx.stylize = stylizeWithColor;
52867 return formatValue(ctx, obj, ctx.depth);
52868}
52869exports.inspect = inspect;
52870
52871
52872// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
52873inspect.colors = {
52874 'bold' : [1, 22],
52875 'italic' : [3, 23],
52876 'underline' : [4, 24],
52877 'inverse' : [7, 27],
52878 'white' : [37, 39],
52879 'grey' : [90, 39],
52880 'black' : [30, 39],
52881 'blue' : [34, 39],
52882 'cyan' : [36, 39],
52883 'green' : [32, 39],
52884 'magenta' : [35, 39],
52885 'red' : [31, 39],
52886 'yellow' : [33, 39]
52887};
52888
52889// Don't use 'blue' not visible on cmd.exe
52890inspect.styles = {
52891 'special': 'cyan',
52892 'number': 'yellow',
52893 'boolean': 'yellow',
52894 'undefined': 'grey',
52895 'null': 'bold',
52896 'string': 'green',
52897 'date': 'magenta',
52898 // "name": intentionally not styling
52899 'regexp': 'red'
52900};
52901
52902
52903function stylizeWithColor(str, styleType) {
52904 var style = inspect.styles[styleType];
52905
52906 if (style) {
52907 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
52908 '\u001b[' + inspect.colors[style][1] + 'm';
52909 } else {
52910 return str;
52911 }
52912}
52913
52914
52915function stylizeNoColor(str, styleType) {
52916 return str;
52917}
52918
52919
52920function arrayToHash(array) {
52921 var hash = {};
52922
52923 array.forEach(function(val, idx) {
52924 hash[val] = true;
52925 });
52926
52927 return hash;
52928}
52929
52930
52931function formatValue(ctx, value, recurseTimes) {
52932 // Provide a hook for user-specified inspect functions.
52933 // Check that value is an object with an inspect function on it
52934 if (ctx.customInspect &&
52935 value &&
52936 isFunction(value.inspect) &&
52937 // Filter out the util module, it's inspect function is special
52938 value.inspect !== exports.inspect &&
52939 // Also filter out any prototype objects using the circular check.
52940 !(value.constructor && value.constructor.prototype === value)) {
52941 var ret = value.inspect(recurseTimes, ctx);
52942 if (!isString(ret)) {
52943 ret = formatValue(ctx, ret, recurseTimes);
52944 }
52945 return ret;
52946 }
52947
52948 // Primitive types cannot have properties
52949 var primitive = formatPrimitive(ctx, value);
52950 if (primitive) {
52951 return primitive;
52952 }
52953
52954 // Look up the keys of the object.
52955 var keys = Object.keys(value);
52956 var visibleKeys = arrayToHash(keys);
52957
52958 if (ctx.showHidden) {
52959 keys = Object.getOwnPropertyNames(value);
52960 }
52961
52962 // IE doesn't make error fields non-enumerable
52963 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
52964 if (isError(value)
52965 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
52966 return formatError(value);
52967 }
52968
52969 // Some type of object without properties can be shortcutted.
52970 if (keys.length === 0) {
52971 if (isFunction(value)) {
52972 var name = value.name ? ': ' + value.name : '';
52973 return ctx.stylize('[Function' + name + ']', 'special');
52974 }
52975 if (isRegExp(value)) {
52976 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
52977 }
52978 if (isDate(value)) {
52979 return ctx.stylize(Date.prototype.toString.call(value), 'date');
52980 }
52981 if (isError(value)) {
52982 return formatError(value);
52983 }
52984 }
52985
52986 var base = '', array = false, braces = ['{', '}'];
52987
52988 // Make Array say that they are Array
52989 if (isArray(value)) {
52990 array = true;
52991 braces = ['[', ']'];
52992 }
52993
52994 // Make functions say that they are functions
52995 if (isFunction(value)) {
52996 var n = value.name ? ': ' + value.name : '';
52997 base = ' [Function' + n + ']';
52998 }
52999
53000 // Make RegExps say that they are RegExps
53001 if (isRegExp(value)) {
53002 base = ' ' + RegExp.prototype.toString.call(value);
53003 }
53004
53005 // Make dates with properties first say the date
53006 if (isDate(value)) {
53007 base = ' ' + Date.prototype.toUTCString.call(value);
53008 }
53009
53010 // Make error with message first say the error
53011 if (isError(value)) {
53012 base = ' ' + formatError(value);
53013 }
53014
53015 if (keys.length === 0 && (!array || value.length == 0)) {
53016 return braces[0] + base + braces[1];
53017 }
53018
53019 if (recurseTimes < 0) {
53020 if (isRegExp(value)) {
53021 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
53022 } else {
53023 return ctx.stylize('[Object]', 'special');
53024 }
53025 }
53026
53027 ctx.seen.push(value);
53028
53029 var output;
53030 if (array) {
53031 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
53032 } else {
53033 output = keys.map(function(key) {
53034 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
53035 });
53036 }
53037
53038 ctx.seen.pop();
53039
53040 return reduceToSingleString(output, base, braces);
53041}
53042
53043
53044function formatPrimitive(ctx, value) {
53045 if (isUndefined(value))
53046 return ctx.stylize('undefined', 'undefined');
53047 if (isString(value)) {
53048 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
53049 .replace(/'/g, "\\'")
53050 .replace(/\\"/g, '"') + '\'';
53051 return ctx.stylize(simple, 'string');
53052 }
53053 if (isNumber(value))
53054 return ctx.stylize('' + value, 'number');
53055 if (isBoolean(value))
53056 return ctx.stylize('' + value, 'boolean');
53057 // For some reason typeof null is "object", so special case here.
53058 if (isNull(value))
53059 return ctx.stylize('null', 'null');
53060}
53061
53062
53063function formatError(value) {
53064 return '[' + Error.prototype.toString.call(value) + ']';
53065}
53066
53067
53068function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
53069 var output = [];
53070 for (var i = 0, l = value.length; i < l; ++i) {
53071 if (hasOwnProperty(value, String(i))) {
53072 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
53073 String(i), true));
53074 } else {
53075 output.push('');
53076 }
53077 }
53078 keys.forEach(function(key) {
53079 if (!key.match(/^\d+$/)) {
53080 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
53081 key, true));
53082 }
53083 });
53084 return output;
53085}
53086
53087
53088function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
53089 var name, str, desc;
53090 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
53091 if (desc.get) {
53092 if (desc.set) {
53093 str = ctx.stylize('[Getter/Setter]', 'special');
53094 } else {
53095 str = ctx.stylize('[Getter]', 'special');
53096 }
53097 } else {
53098 if (desc.set) {
53099 str = ctx.stylize('[Setter]', 'special');
53100 }
53101 }
53102 if (!hasOwnProperty(visibleKeys, key)) {
53103 name = '[' + key + ']';
53104 }
53105 if (!str) {
53106 if (ctx.seen.indexOf(desc.value) < 0) {
53107 if (isNull(recurseTimes)) {
53108 str = formatValue(ctx, desc.value, null);
53109 } else {
53110 str = formatValue(ctx, desc.value, recurseTimes - 1);
53111 }
53112 if (str.indexOf('\n') > -1) {
53113 if (array) {
53114 str = str.split('\n').map(function(line) {
53115 return ' ' + line;
53116 }).join('\n').substr(2);
53117 } else {
53118 str = '\n' + str.split('\n').map(function(line) {
53119 return ' ' + line;
53120 }).join('\n');
53121 }
53122 }
53123 } else {
53124 str = ctx.stylize('[Circular]', 'special');
53125 }
53126 }
53127 if (isUndefined(name)) {
53128 if (array && key.match(/^\d+$/)) {
53129 return str;
53130 }
53131 name = JSON.stringify('' + key);
53132 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
53133 name = name.substr(1, name.length - 2);
53134 name = ctx.stylize(name, 'name');
53135 } else {
53136 name = name.replace(/'/g, "\\'")
53137 .replace(/\\"/g, '"')
53138 .replace(/(^"|"$)/g, "'");
53139 name = ctx.stylize(name, 'string');
53140 }
53141 }
53142
53143 return name + ': ' + str;
53144}
53145
53146
53147function reduceToSingleString(output, base, braces) {
53148 var numLinesEst = 0;
53149 var length = output.reduce(function(prev, cur) {
53150 numLinesEst++;
53151 if (cur.indexOf('\n') >= 0) numLinesEst++;
53152 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
53153 }, 0);
53154
53155 if (length > 60) {
53156 return braces[0] +
53157 (base === '' ? '' : base + '\n ') +
53158 ' ' +
53159 output.join(',\n ') +
53160 ' ' +
53161 braces[1];
53162 }
53163
53164 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
53165}
53166
53167
53168// NOTE: These type checking functions intentionally don't use `instanceof`
53169// because it is fragile and can be easily faked with `Object.create()`.
53170function isArray(ar) {
53171 return Array.isArray(ar);
53172}
53173exports.isArray = isArray;
53174
53175function isBoolean(arg) {
53176 return typeof arg === 'boolean';
53177}
53178exports.isBoolean = isBoolean;
53179
53180function isNull(arg) {
53181 return arg === null;
53182}
53183exports.isNull = isNull;
53184
53185function isNullOrUndefined(arg) {
53186 return arg == null;
53187}
53188exports.isNullOrUndefined = isNullOrUndefined;
53189
53190function isNumber(arg) {
53191 return typeof arg === 'number';
53192}
53193exports.isNumber = isNumber;
53194
53195function isString(arg) {
53196 return typeof arg === 'string';
53197}
53198exports.isString = isString;
53199
53200function isSymbol(arg) {
53201 return typeof arg === 'symbol';
53202}
53203exports.isSymbol = isSymbol;
53204
53205function isUndefined(arg) {
53206 return arg === void 0;
53207}
53208exports.isUndefined = isUndefined;
53209
53210function isRegExp(re) {
53211 return isObject(re) && objectToString(re) === '[object RegExp]';
53212}
53213exports.isRegExp = isRegExp;
53214
53215function isObject(arg) {
53216 return typeof arg === 'object' && arg !== null;
53217}
53218exports.isObject = isObject;
53219
53220function isDate(d) {
53221 return isObject(d) && objectToString(d) === '[object Date]';
53222}
53223exports.isDate = isDate;
53224
53225function isError(e) {
53226 return isObject(e) &&
53227 (objectToString(e) === '[object Error]' || e instanceof Error);
53228}
53229exports.isError = isError;
53230
53231function isFunction(arg) {
53232 return typeof arg === 'function';
53233}
53234exports.isFunction = isFunction;
53235
53236function isPrimitive(arg) {
53237 return arg === null ||
53238 typeof arg === 'boolean' ||
53239 typeof arg === 'number' ||
53240 typeof arg === 'string' ||
53241 typeof arg === 'symbol' || // ES6 symbol
53242 typeof arg === 'undefined';
53243}
53244exports.isPrimitive = isPrimitive;
53245
53246exports.isBuffer = require('./support/isBuffer');
53247
53248function objectToString(o) {
53249 return Object.prototype.toString.call(o);
53250}
53251
53252
53253function pad(n) {
53254 return n < 10 ? '0' + n.toString(10) : n.toString(10);
53255}
53256
53257
53258var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
53259 'Oct', 'Nov', 'Dec'];
53260
53261// 26 Feb 16:19:34
53262function timestamp() {
53263 var d = new Date();
53264 var time = [pad(d.getHours()),
53265 pad(d.getMinutes()),
53266 pad(d.getSeconds())].join(':');
53267 return [d.getDate(), months[d.getMonth()], time].join(' ');
53268}
53269
53270
53271// log is just a thin wrapper to console.log that prepends a timestamp
53272exports.log = function() {
53273 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
53274};
53275
53276
53277/**
53278 * Inherit the prototype methods from one constructor into another.
53279 *
53280 * The Function.prototype.inherits from lang.js rewritten as a standalone
53281 * function (not on Function.prototype). NOTE: If this file is to be loaded
53282 * during bootstrapping this function needs to be rewritten using some native
53283 * functions as prototype setup using normal JavaScript does not work as
53284 * expected during bootstrapping (see mirror.js in r114903).
53285 *
53286 * @param {function} ctor Constructor function which needs to inherit the
53287 * prototype.
53288 * @param {function} superCtor Constructor function to inherit prototype from.
53289 */
53290exports.inherits = require('inherits');
53291
53292exports._extend = function(origin, add) {
53293 // Don't do anything if add isn't an object
53294 if (!add || !isObject(add)) return origin;
53295
53296 var keys = Object.keys(add);
53297 var i = keys.length;
53298 while (i--) {
53299 origin[keys[i]] = add[keys[i]];
53300 }
53301 return origin;
53302};
53303
53304function hasOwnProperty(obj, prop) {
53305 return Object.prototype.hasOwnProperty.call(obj, prop);
53306}
53307
53308}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
53309},{"./support/isBuffer":274,"_process":224,"inherits":273}],276:[function(require,module,exports){
53310'use strict';
53311
53312var isString = require('is-string');
53313var isNumber = require('is-number-object');
53314var isBoolean = require('is-boolean-object');
53315var isSymbol = require('is-symbol');
53316var isBigInt = require('is-bigint');
53317
53318// eslint-disable-next-line consistent-return
53319module.exports = function whichBoxedPrimitive(value) {
53320 // eslint-disable-next-line eqeqeq
53321 if (value == null || (typeof value !== 'object' && typeof value !== 'function')) {
53322 return null;
53323 }
53324 if (isString(value)) {
53325 return 'String';
53326 }
53327 if (isNumber(value)) {
53328 return 'Number';
53329 }
53330 if (isBoolean(value)) {
53331 return 'Boolean';
53332 }
53333 if (isSymbol(value)) {
53334 return 'Symbol';
53335 }
53336 if (isBigInt(value)) {
53337 return 'BigInt';
53338 }
53339};
53340
53341},{"is-bigint":191,"is-boolean-object":192,"is-number-object":196,"is-string":200,"is-symbol":201}],277:[function(require,module,exports){
53342'use strict';
53343
53344var isMap = require('is-map');
53345var isSet = require('is-set');
53346var isWeakMap = require('is-weakmap');
53347var isWeakSet = require('is-weakset');
53348
53349/** @type {import('.')} */
53350module.exports = function whichCollection(/** @type {unknown} */ value) {
53351 if (value && typeof value === 'object') {
53352 if (isMap(value)) {
53353 return 'Map';
53354 }
53355 if (isSet(value)) {
53356 return 'Set';
53357 }
53358 if (isWeakMap(value)) {
53359 return 'WeakMap';
53360 }
53361 if (isWeakSet(value)) {
53362 return 'WeakSet';
53363 }
53364 }
53365 return false;
53366};
53367
53368},{"is-map":195,"is-set":198,"is-weakmap":202,"is-weakset":203}],278:[function(require,module,exports){
53369(function (global){(function (){
53370'use strict';
53371
53372var forEach = require('for-each');
53373var availableTypedArrays = require('available-typed-arrays');
53374var callBind = require('call-bind');
53375var callBound = require('call-bind/callBound');
53376var gOPD = require('gopd');
53377
53378/** @type {(O: object) => string} */
53379var $toString = callBound('Object.prototype.toString');
53380var hasToStringTag = require('has-tostringtag/shams')();
53381
53382var g = typeof globalThis === 'undefined' ? global : globalThis;
53383var typedArrays = availableTypedArrays();
53384
53385var $slice = callBound('String.prototype.slice');
53386var getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');
53387
53388/** @type {<T = unknown>(array: readonly T[], value: unknown) => number} */
53389var $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {
53390 for (var i = 0; i < array.length; i += 1) {
53391 if (array[i] === value) {
53392 return i;
53393 }
53394 }
53395 return -1;
53396};
53397
53398/** @typedef {(receiver: import('.').TypedArray) => string | typeof Uint8Array.prototype.slice.call | typeof Uint8Array.prototype.set.call} Getter */
53399/** @type {{ [k in `\$${import('.').TypedArrayName}`]?: Getter } & { __proto__: null }} */
53400var cache = { __proto__: null };
53401if (hasToStringTag && gOPD && getPrototypeOf) {
53402 forEach(typedArrays, function (typedArray) {
53403 var arr = new g[typedArray]();
53404 if (Symbol.toStringTag in arr) {
53405 var proto = getPrototypeOf(arr);
53406 // @ts-expect-error TS won't narrow inside a closure
53407 var descriptor = gOPD(proto, Symbol.toStringTag);
53408 if (!descriptor) {
53409 var superProto = getPrototypeOf(proto);
53410 // @ts-expect-error TS won't narrow inside a closure
53411 descriptor = gOPD(superProto, Symbol.toStringTag);
53412 }
53413 // @ts-expect-error TODO: fix
53414 cache['$' + typedArray] = callBind(descriptor.get);
53415 }
53416 });
53417} else {
53418 forEach(typedArrays, function (typedArray) {
53419 var arr = new g[typedArray]();
53420 var fn = arr.slice || arr.set;
53421 if (fn) {
53422 // @ts-expect-error TODO: fix
53423 cache['$' + typedArray] = callBind(fn);
53424 }
53425 });
53426}
53427
53428/** @type {(value: object) => false | import('.').TypedArrayName} */
53429var tryTypedArrays = function tryAllTypedArrays(value) {
53430 /** @type {ReturnType<typeof tryAllTypedArrays>} */ var found = false;
53431 forEach(
53432 // eslint-disable-next-line no-extra-parens
53433 /** @type {Record<`\$${TypedArrayName}`, Getter>} */ /** @type {any} */ (cache),
53434 /** @type {(getter: Getter, name: `\$${import('.').TypedArrayName}`) => void} */
53435 function (getter, typedArray) {
53436 if (!found) {
53437 try {
53438 // @ts-expect-error TODO: fix
53439 if ('$' + getter(value) === typedArray) {
53440 found = $slice(typedArray, 1);
53441 }
53442 } catch (e) { /**/ }
53443 }
53444 }
53445 );
53446 return found;
53447};
53448
53449/** @type {(value: object) => false | import('.').TypedArrayName} */
53450var trySlices = function tryAllSlices(value) {
53451 /** @type {ReturnType<typeof tryAllSlices>} */ var found = false;
53452 forEach(
53453 // eslint-disable-next-line no-extra-parens
53454 /** @type {Record<`\$${TypedArrayName}`, Getter>} */ /** @type {any} */ (cache),
53455 /** @type {(getter: typeof cache, name: `\$${import('.').TypedArrayName}`) => void} */ function (getter, name) {
53456 if (!found) {
53457 try {
53458 // @ts-expect-error TODO: fix
53459 getter(value);
53460 found = $slice(name, 1);
53461 } catch (e) { /**/ }
53462 }
53463 }
53464 );
53465 return found;
53466};
53467
53468/** @type {import('.')} */
53469module.exports = function whichTypedArray(value) {
53470 if (!value || typeof value !== 'object') { return false; }
53471 if (!hasToStringTag) {
53472 /** @type {string} */
53473 var tag = $slice($toString(value), 8, -1);
53474 if ($indexOf(typedArrays, tag) > -1) {
53475 return tag;
53476 }
53477 if (tag !== 'Object') {
53478 return false;
53479 }
53480 // node < 0.6 hits here on real Typed Arrays
53481 return trySlices(value);
53482 }
53483 if (!gOPD) { return null; } // unknown engine
53484 return tryTypedArrays(value);
53485};
53486
53487}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
53488},{"available-typed-arrays":86,"call-bind":116,"call-bind/callBound":115,"for-each":173,"gopd":178,"has-tostringtag/shams":184}]},{},[1])(1)
53489});